From 548eac2e00f12820e96512fbbc5af3978ffac861 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Thu, 29 Feb 2024 14:57:31 +0100 Subject: [PATCH 01/14] Create CITATION.cff --- CITATION.cff | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..9e2e8f72ed --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,23 @@ +cff-version: 1.0.0 +message: "If you use this software, please cite it as below." +authors: + - family-names: Schena + given-names: Lorenzo + orcid: https: XXX + - family-names: Branlard + given-names: Emmanuel + orcid: https: XXX + - family-names: Jonkman + given-names: Jason + orcid: https: XXX + - family-names: Platt + given-names: Andrew + orcid: https: XXX + - family-names: Slaughter + given-names: Derek + orcid: https: XXX +title: "OpenFAST ZMQ mod - temporary reference" +version: 1.0 +identifiers: + - type: doi +date-released: 2024-02-01 From 9c7291862d7473388bbb26dc0783419f3994c799 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Thu, 29 Feb 2024 14:58:11 +0100 Subject: [PATCH 02/14] Update CITATION.cff --- CITATION.cff | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 9e2e8f72ed..d033fed807 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,21 +1,21 @@ cff-version: 1.0.0 message: "If you use this software, please cite it as below." authors: - - family-names: Schena - given-names: Lorenzo - orcid: https: XXX - - family-names: Branlard - given-names: Emmanuel +- family-names: Schena + given-names: Lorenzo + orcid: https: XXX +- family-names: Branlard +given-names: Emmanuel +orcid: https: XXX +- family-names: Jonkman + given-names: Jason + orcid: https: XXX +- family-names: Platt + given-names: Andrew + orcid: https: XXX +- family-names: Slaughter + given-names: Derek orcid: https: XXX - - family-names: Jonkman - given-names: Jason - orcid: https: XXX - - family-names: Platt - given-names: Andrew - orcid: https: XXX - - family-names: Slaughter - given-names: Derek - orcid: https: XXX title: "OpenFAST ZMQ mod - temporary reference" version: 1.0 identifiers: From 1d9844bd88afa8db91cebb7bff0f960c12a04435 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Thu, 29 Feb 2024 14:58:40 +0100 Subject: [PATCH 03/14] Update CITATION.cff --- CITATION.cff | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index d033fed807..78b2c0e3ca 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -3,19 +3,14 @@ message: "If you use this software, please cite it as below." authors: - family-names: Schena given-names: Lorenzo - orcid: https: XXX - family-names: Branlard given-names: Emmanuel -orcid: https: XXX - family-names: Jonkman given-names: Jason - orcid: https: XXX - family-names: Platt given-names: Andrew - orcid: https: XXX - family-names: Slaughter given-names: Derek - orcid: https: XXX title: "OpenFAST ZMQ mod - temporary reference" version: 1.0 identifiers: From 369f36819e3b51716803eea782a17ee560f14c35 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:00:00 +0100 Subject: [PATCH 04/14] Update CITATION.cff --- CITATION.cff | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 78b2c0e3ca..960a4e8f4c 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,15 +4,16 @@ authors: - family-names: Schena given-names: Lorenzo - family-names: Branlard -given-names: Emmanuel + given-names: Emmanuel - family-names: Jonkman given-names: Jason - family-names: Platt given-names: Andrew - family-names: Slaughter given-names: Derek -title: "OpenFAST ZMQ mod - temporary reference" +title: "Real time OpenFAST communication" version: 1.0 identifiers: - - type: doi + - type: url + - url: "https://github.com/lorenzoschena/openfast/" date-released: 2024-02-01 From f8f3aef03aa9bebdbbbaa725e4c3cbc8565b39f9 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Tue, 21 May 2024 16:49:08 +0200 Subject: [PATCH 05/14] zmq connection --- modules/openfast-library/CMakeLists.txt | 5 +- .../openfast-library/src/FAST_Registry.txt | 15 + modules/openfast-library/src/FAST_Subs.f90 | 467 ++++++++++++++++- modules/openfast-library/src/zmq_client.c | 482 ++++++++++++++++++ modules/servodyn/src/ServoDyn.f90 | 38 +- 5 files changed, 975 insertions(+), 32 deletions(-) create mode 100644 modules/openfast-library/src/zmq_client.c diff --git a/modules/openfast-library/CMakeLists.txt b/modules/openfast-library/CMakeLists.txt index d549e705f9..bf14157413 100644 --- a/modules/openfast-library/CMakeLists.txt +++ b/modules/openfast-library/CMakeLists.txt @@ -65,8 +65,11 @@ add_library(openfast_postlib src/FAST_Mods.f90 src/FAST_Subs.f90 src/FAST_Solver.f90 + src/zmq_client.c ) -target_link_libraries(openfast_postlib openfast_prelib foamfastlib scfastlib) + +target_link_libraries(openfast_postlib openfast_prelib foamfastlib scfastlib zmq cjson) + target_include_directories(openfast_postlib PUBLIC $ ) diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index 7a3deecc33..0ec0c8f5db 100644 --- a/modules/openfast-library/src/FAST_Registry.txt +++ b/modules/openfast-library/src/FAST_Registry.txt @@ -193,6 +193,21 @@ typedef ^ FAST_ParameterType IntKi Lin_ModOrder {NumModules} - - "indices that d typedef ^ FAST_ParameterType IntKi LinInterpOrder - - - "Interpolation order for CalcSteady solution" - #typedef ^ FAST_ParameterType LOGICAL CheckHSSBrTrqC - - - "Flag to determine if we should check HSSBrTrqC extrapolation to ElastoDyn" - +# ................................................... ZMQ PROTOCOL ........................................................... +typedef ^ FAST_ParameterType LOGICAL ZmqOn - .false. - "zmq activation flag" - +typedef ^ FAST_ParameterType CHARACTER(1024) ZmqInAddress - - - "address for ZMQ REQ-REP protocol" - +typedef ^ FAST_ParameterType IntKi ZmqInNbr - - - "number of ZMQ REQ-REP channels" - +typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqInChannels {:} - - "address for ZMQ REQ-REP protocol" - + +typedef ^ FAST_ParameterType CHARACTER(1024) ZmqOutAddress - - - "address for ZMQ PUB-SUB protocol" - +typedef ^ FAST_ParameterType IntKi ZmqOutNbr - - - "number of ZMQ PUB-SUB channels" - + +typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqOutChannels {:} - - "variables to pass ZMQ PUB-SUB protocol" - +typedef ^ FAST_ParameterType IntKi ZmqOutChnlsIdx {:} - - "indexes of channels to be broadcasted" - + +typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqOutChannelsNames {:} - - "names for ZMQ PUB-SUB protocol" - +typedef ^ FAST_ParameterType ReKi ZmqOutChannelsAry {:} - - "array to pass ZMQ PUB-SUB protocol" - +# ............................................................................................................................ # SAVED OPERATING POINT DATA FOR VTKLIN (visualization of mode shapes from linearization analysis) # ..... IceDyn OP data ....................................................................................................... diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 9129d0555d..3e7e5ead8e 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -19,6 +19,196 @@ ! See the License for the specific language governing permissions and ! limitations under the License. !********************************************************************************************************************************** +module zmq_client_module + use iso_c_binding + implicit none + + interface + function zmq_req_rep(socket_address, request) result(out) bind(C, name='zmq_req_rep') + use, intrinsic :: iso_c_binding + character(kind=c_char), dimension(*), intent(in) :: socket_address(*) + character(kind=c_char), dimension(*), intent(in) :: request(*) + type(c_ptr) :: out + end function zmq_req_rep + end interface + ! interface + ! FUNCTION zmq_req_rep(socket_address, request) BIND(C, NAME="zmq_req_rep") + ! IMPORT :: C_PTR, C_CHAR + ! CHARACTER(KIND=C_CHAR), INTENT(IN) :: socket_address, request + ! TYPE(C_PTR) :: zmq_req_rep ! Return a C pointer + ! END FUNCTION zmq_req_rep + ! end interface + ! interface + ! function zmq_broadcast(message) result(out) bind(C, name='zmq_broadcast') + ! use, intrinsic :: iso_c_binding + ! character(kind=c_char), dimension(*), intent(in) :: message + ! type(c_ptr) :: out + ! end function zmq_broadcast + ! end interface + + interface + function zmq_broadcast(arr, names) result(zmq_broadcast_out) bind(C, name='zmq_broadcast') + use, intrinsic :: iso_c_binding + + ! real(c_double), intent(in) :: arr(:) + character(kind=c_char), dimension(*), intent(in) :: arr(*) + character(kind=c_char), dimension(*), intent(in) :: names(*) + integer(c_int) :: zmq_broadcast_out + end function zmq_broadcast + end interface + + interface + function zmq_init_pub(req_address) result(out_pub) bind(C, name='zmq_init_pub') + use, intrinsic :: iso_c_binding + character(kind=c_char), dimension(*), intent(in) :: req_address + integer(c_int) :: out_pub + end function zmq_init_pub + end interface + + interface + function zmq_init_req(reqrep_address) result(out_req) bind(C, name='zmq_init_req_rep') + use, intrinsic :: iso_c_binding + character(kind=c_char), dimension(*), intent(in) :: reqrep_address + integer(c_int) :: out_req + end function zmq_init_req + end interface + +end module zmq_client_module +!---------------------------------------------------------------------------------------------------------------------------------- +function strcat(input_strings, num_strings) result(output_string) + character(len=*), dimension(:) :: input_strings + character(len=1000) :: output_string + integer :: num_strings, i + + output_string = '' + + do i = 1, num_strings + if (i /= 1) then + output_string = trim(adjustl(output_string)) // ';' + end if + output_string = output_string // trim(adjustl(input_strings(i))) + end do + +end function strcat +! ----- ZMQ Requester ---------------------------------------------------------------------------------------------------------------------------------- +subroutine zmq_req(socket_address, request, request_size, values_array) +use iso_c_binding +use zmq_client_module, only: zmq_req_rep +implicit none + +character(len=300) :: socket_address +integer, intent(in) :: request_size +character(len=*), dimension(request_size) :: request ! array of strings with requests +real, dimension(request_size) :: values_array ! empty (or not) array to be overwritten +! -------------------------------------------------------------- +real(c_double), dimension(:), pointer :: received_values +type(c_ptr) :: response_ptr +integer :: num_values, i, str_len +integer, parameter :: max_string_length = 1024 +real(kind=c_float), dimension(:), pointer :: float_array +! -------------------------------------------------------------- + +character(len=300) :: concatreq = '' +do i = 1, request_size + concatreq = trim(adjustl(concatreq)) // trim(adjustl(request(i))) // ";" +end do + +concatreq = trim(concatreq) // c_null_char +socket_address = trim(socket_address) // c_null_char ! to be moved in initialization + +response_ptr = zmq_req_rep(socket_address, concatreq) + +call c_f_pointer(response_ptr, float_array, [request_size]) + +! Print the received C string (for debugging purposes) +print *, "Received measurements: ", float_array + +do i= 1, request_size + values_array(i) = float_array(i) +end do + + ! received_float = tmp_float + ! Set as ErrStat // ErrMsg for consistency with openfast ""ErrId_Severe, Fatal, None"" + ! - FATAL -> if missing requested data + ! - SEVERE -> In broadcasting because simulation keeps running + +end subroutine zmq_req +! ------------------------------------------------------------------------------------------------------------------------------- +! subroutine zmq_pub(message) +! use iso_c_binding +! use zmq_client_module, only: zmq_broadcast +! implicit none + +! character(*) :: message +! type(c_ptr) :: response_ptr_pub +! real(c_float), pointer :: tmp_float_pub +! real(c_float) :: received_float_pub + +! response_ptr_pub = zmq_broadcast(message) + +! end subroutine zmq_pub +! --------------------------------------------- +subroutine zmq_pub(array, names, ZmqOutNbr) + use iso_c_binding + use zmq_client_module, only: zmq_broadcast + implicit none + ! Fixed-size buffer for concatenated names + character(len=2048) :: concatenated_names = "" + integer :: totalLength, totalLength_ary, i, offset, ZmqOutNbr + integer(c_int) :: response_ptr_pub + ! real(c_double), dimension(ZmqOutNbr + 2), intent(out) :: array + character(len=*), dimension(ZmqOutNbr + 2), intent(in) :: names + + real(kind=C_DOUBLE), dimension(ZmqOutNbr + 2) :: array + character(len=1), parameter :: delimiter = ";" + character(len=1000) :: concatenatedString = "" + ! ----------------------------------------------------- + totalLength = 0 + totalLength_ary = 0 + + do i = 1, ZmqOutNbr + 2 + concatenated_names(totalLength + 1 : totalLength + len_trim(names(i)) + 1) = trim(names(i)) // ";" + totalLength = totalLength + len_trim(names(i)) + 2 + + write(concatenatedString(totalLength_ary+1:), '(f0.6,a)') array(i), delimiter + totalLength_ary = len_trim(trim(concatenatedString)) + end do + + concatenated_names = trim(concatenated_names) // c_null_char + concatenatedString = trim(concatenatedString) // c_null_char + + response_ptr_pub = zmq_broadcast(concatenatedString, concatenated_names) + +end subroutine zmq_pub +! --------------------------------------------- +subroutine zmq_pub_init(req_address) + use iso_c_binding + use zmq_client_module, only: zmq_init_pub + implicit none + + character(*) :: req_address + integer(c_int) :: response_ptr_pub_init + + print *, "Atempting connection from Fortran at ", req_address + + response_ptr_pub_init = zmq_init_pub(trim(req_address)) + +end subroutine zmq_pub_init +! ---------------------------------------------- +subroutine zmq_req_init(reqrep_address) + use iso_c_binding + use zmq_client_module, only: zmq_init_req + implicit none + + character(*) :: reqrep_address + integer(c_int) :: response_ptr_req_init + + print *, "Atempting connection from Fortran at ", reqrep_address + + response_ptr_req_init = zmq_init_req(trim(reqrep_address)) + +end subroutine zmq_req_init +! ---------------------------------------------- MODULE FAST_Subs USE FAST_Solver @@ -44,6 +234,7 @@ SUBROUTINE FAST_InitializeAll_T( t_initial, TurbID, Turbine, ErrStat, ErrMsg, In CHARACTER(*), OPTIONAL,INTENT(IN ) :: InFile !< A CHARACTER string containing the name of the primary FAST input file (if not present, we'll get it from the command line) TYPE(FAST_ExternInitType),OPTIONAL,INTENT(IN ) :: ExternInitData !< Initialization input data from an external source (Simulink) + character(*), parameter :: req_address = "tcp://127.0.0.1:5556" // c_null_char Turbine%TurbID = TurbID @@ -1375,7 +1566,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, ! Set up output for glue code (must be done after all modules are initialized so we have their WriteOutput information) ! ........................ - CALL FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat2, ErrMsg2 ) + CALL FAST_InitOutput( p_FAST, y_FAST, Init, p_FAST%ZmqOutChnlsIdx, p_FAST%ZmqOutChannelsNames, p_FAST%ZmqOutChannelsAry, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) @@ -1810,7 +2001,21 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, !............................................................................................................................... call ValidateInputData(p, m_FAST, ErrStat2, ErrMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - + + + ! ------------------------------------------------------------------------------- + ! ZMQ start-up + ! ------------------------------------------------------------------------------- + + if (p%ZmqOn) then + ! 1. We open the Broadcast socket (or, if already open, we connect to it) + call zmq_pub_init(p%ZmqOutAddress) + call zmq_req_init(p%ZmqInAddress) + ! 1. We open the REQ-REP socket (or, if already open, we connect to it) + ! call zmq_pub_init(Turbine%p_FAST%ZmqInAddress) + ! p%ZmqOutChannelsAry(1) = TurbID + + end if IF ( ErrStat >= AbortErrLev ) RETURN @@ -2013,27 +2218,27 @@ SUBROUTINE ValidateInputData(p, m_FAST, ErrStat, ErrMsg) END SUBROUTINE ValidateInputData !---------------------------------------------------------------------------------------------------------------------------------- !> This routine initializes the output for the glue code, including writing the header for the primary output file. -SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat, ErrMsg ) - +SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ZmqOutChnlsIdx, ZmqOutChannelsNames, ZmqOutChannelsAry, ErrStat, ErrMsg ) IMPLICIT NONE ! Passed variables TYPE(FAST_ParameterType), INTENT(IN) :: p_FAST !< Glue-code simulation parameters TYPE(FAST_OutputFileType), INTENT(INOUT) :: y_FAST !< Glue-code simulation outputs TYPE(FAST_InitData), INTENT(IN) :: Init !< Initialization data for all modules + INTEGER(IntKi), allocatable, intent(inout) :: ZmqOutChnlsIdx(:) + CHARACTER(*), allocatable, intent(inout) :: ZmqOutChannelsNames(:) + REAL(DbKi), allocatable, intent(inout) :: ZmqOutChannelsAry(:) INTEGER(IntKi), INTENT(OUT) :: ErrStat !< Error status CHARACTER(*), INTENT(OUT) :: ErrMsg !< Error message corresponding to ErrStat - - ! Local variables. INTEGER(IntKi) :: I, J ! Generic index for DO loops. INTEGER(IntKi) :: indxNext ! The index of the next value to be written to an array INTEGER(IntKi) :: NumOuts ! number of channels to be written to the output file(s) - - + CHARACTER(ChanLen) :: tmp_string ! zmq auxiliarry string + CHARACTER(ChanLen) :: tmp_string2 ! zmq auxiliarry string !...................................................... ! Set the description lines to be printed in the output file !...................................................... @@ -2262,6 +2467,44 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat, ErrMsg ) END DO ! I END IF + ! Query of ZMQ broadcast channels idx + + if (p_FAST%ZmqOn) then + CALL AllocAry( ZmqOutChnlsIdx, p_FAST%ZmqOutNbr, 'ZmqOutChnlsIdx', ErrStat, ErrMsg ) + CALL AllocAry( ZmqOutChannelsNames, p_FAST%ZmqOutNbr + 2, 'ZmqOutChannelNames', ErrStat, ErrMsg ) + + ZmqOutChnlsIdx = 0_IntKi + + do i = 1, SIZE(ZmqOutChnlsIdx) + tmp_string = p_FAST%ZmqOutChannels(i) + call Conv2UC(tmp_string) + + do j = 1, SIZE(y_FAST%ChannelNames) + tmp_string2 = y_FAST%ChannelNames(j) + call Conv2UC(tmp_string2) + + if (trim(tmp_string) == trim(tmp_string2)) then + ZmqOutChnlsIdx(i) = j + exit + end if + + end do + end do + + if (minval(ZmqOutChnlsIdx) == 0) then + call WrScr('Warning: one channel requested from ZMQ was not identified') ! CU = unit number for the output + end if + + ! Augmenting ZMQ output to handle wind turbine id and current time stamp + ZmqOutChannelsNames(1) = 'TurbId' + ZmqOutChannelsNames(2) = 'Time' + + do i = 1,p_FAST%ZmqOutNbr + ZmqOutChannelsNames(2 + i) = trim(y_FAST%ChannelNames(ZmqOutChnlsIdx(i))) ! Up to here everything OK! + end do + + end if + !...................................................... ! Open the text output file and print the headers @@ -3280,6 +3523,105 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS END IF + ! --------------------- ZMQ Communication ------------------------ ! + CALL ReadCom( UnIn, InputFile, 'Section Header: ZMQ Communication', ErrStat2, ErrMsg2, UnEc ) + + if ( ErrStat2 >= AbortErrLev ) then + CALL SetErrStat( ErrId_Warn, "ZMQ section not found, turning off ZMQ communication", ErrStat, ErrMsg, RoutineName) + call cleanup() + RETURN + end if + + CALL ReadVar( UnIn, InputFile, p%ZmqOn, "ZmqOn", "ZMQ communication (flag)", ErrStat2, ErrMsg2, UnEc) + if ( ErrStat2 >= AbortErrLev ) then + CALL SetErrStat( ErrId_Warn, "ZMQ section not found, turning off ZMQ communication", ErrStat, ErrMsg, RoutineName) + call cleanup() + RETURN + end if + + CALL ReadVar( UnIn, InputFile, p%ZmqInAddress, "ZmqInAddress", "REQ-REP localhost address", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + p%ZmqInAddress = trim(p%ZmqInAddress) // c_null_char + + ! check valid address to be put here + + CALL ReadVar( UnIn, InputFile, p%ZmqInNbr, "ZmqInNbr", "Number of parameters to be requested ", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + CALL AllocAry(p%ZmqInChannels, p%ZmqInNbr, "ZmqInChannels", Errstat2, ErrMsg2) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + CALL ReadAry( UnIn, InputFile, p%ZmqInChannels, p%ZmqInNbr, "ZmqInChannels", "Channels to be requested at communication time", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + + ! ------------------------------------------- Broadcasting settings ---------------------------------------------------- + CALL ReadVar( UnIn, InputFile, p%ZmqOutAddress, "ZmqOutAddress", "PUB-SUB localhost address ", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + p%ZmqOutAddress = trim(p%ZmqOutAddress) // c_null_char + + ! check valid address + + CALL ReadVar( UnIn, InputFile, p%ZmqOutNbr, "ZmqOutNbr", "Number of channels to be broadcasted", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + ! Read channel names to be broadcasted + + CALL AllocAry(p%ZmqOutChannels, p%ZmqOutNbr, "ZmqOutChannels", Errstat2, ErrMsg2) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + CALL ReadAry( UnIn, InputFile, p%ZmqOutChannels, p%ZmqOutNbr, "ZmqOutChannels", "Channels to be broadcasterd at communication time", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + ! Create broadcasting array and name tag, actually used by the Message Passing Interface. We add 2 slots, for wind turbine ID and time, to be always broadcasted + + CALL AllocAry(p%ZmqOutChannelsNames, p%ZmqOutNbr + 2, "ZmqOutChannelsNames", Errstat2, ErrMsg2) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + CALL AllocAry(p%ZmqOutChannelsAry, p%ZmqOutNbr + 2, "ZmqOutChannelsAry" , Errstat2, ErrMsg2) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + call cleanup() RETURN @@ -4159,13 +4501,13 @@ SUBROUTINE FAST_Solution0_T(Turbine, ErrStat, ErrMsg) CALL FAST_Solution0(Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX,& Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & - Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg ) + Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, Turbine%TurbID, ErrStat, ErrMsg ) END SUBROUTINE FAST_Solution0_T !---------------------------------------------------------------------------------------------------------------------------------- !> Routine that calls CalcOutput for the first time of the simulation (at t=0). After the initial solve, data arrays are initialized. SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & - MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg ) + MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, TurbID, ErrStat, ErrMsg ) TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< Parameters for the glue code TYPE(FAST_OutputFileType),INTENT(INOUT) :: y_FAST !< Output variables for the glue code @@ -4203,6 +4545,7 @@ SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, O CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'FAST_Solution0' + INTEGER(IntKi) :: TurbID !< TurbID for message-tagging purposes with ZMQ (consistency with FAST_Solution) !NOTE: m_FAST%t_global is t_initial in this routine @@ -4237,8 +4580,8 @@ SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, O !---------------------------------------------------------------------------------------- ! Check to see if we should output data this time step: !---------------------------------------------------------------------------------------- - - CALL WriteOutputToFile(n_t_global_next, t_initial, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2) + + CALL WriteOutputToFile(n_t_global_next, t_initial, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, TurbID, ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ! turn off VTK output when @@ -4733,14 +5076,17 @@ SUBROUTINE FAST_Solution_T(t_initial, n_t_global, Turbine, ErrStat, ErrMsg ) CALL FAST_Solution(t_initial, n_t_global, Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX, & Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & - Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg ) + Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, Turbine%p_FAST%ZmqOutChannelsAry, Turbine%TurbID, ErrStat, ErrMsg ) END SUBROUTINE FAST_Solution_T !---------------------------------------------------------------------------------------------------------------------------------- !> This routine takes data from n_t_global and gets values at n_t_global + 1 SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & - MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg ) + MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) + use iso_c_binding + !use zmq_req + REAL(DbKi), INTENT(IN ) :: t_initial !< initial time INTEGER(IntKi), INTENT(IN ) :: n_t_global !< loop counter @@ -4779,7 +5125,8 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, INTEGER(IntKi), parameter :: MaxCorrections = 20 ! maximum number of corrections allowed LOGICAL :: WriteThisStep ! Whether WriteOutput values will be printed - INTEGER(IntKi) :: I, k ! generic loop counters + INTEGER(IntKi) :: I, k, idx ! generic loop counters + INTEGER(IntKi) :: TurbID !< Grab Turbine ID for messages-tagging purposes (ZMQ) !REAL(ReKi) :: ControlInputGuess ! value of controller inputs @@ -4787,7 +5134,11 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'FAST_Solution' - + ! ----------------------------------------------------------------------------- + REAL(DbKi), allocatable, intent(inout) :: ZmqOutChannelsAry(:) + REAL(DbKi) :: ZmqInChannelsAry(p_FAST%ZmqInNbr) + character(len=1024) :: tmp_str + ! ----------------------------------------------------------------------------- ErrStat = ErrID_None ErrMsg = "" @@ -5083,17 +5434,58 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, !! We've advanced everything to the next time step: !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - !! update the global time - + ! Advance time step m_FAST%t_global = t_global_next - + ! Inserting here call to ZMQ to retrieve and override routines' outputs + + if (p_FAST%ZmqOn) then + + ZmqInChannelsAry = 0.0_DbKi + + call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) + + If (ZmqInChannelsAry(1) == TurbID) then + + do i = 1, p_FAST%ZmqInNbr + tmp_str = trim(p_FAST%ZmqInChannels(i)) + + select case (tmp_str) ! Be careful with dependencies + case('VelH') + IfW%p%FlowField%Uniform%VelH = ZmqInChannelsAry(i) + case('VelV') + IfW%p%FlowField%Uniform%VelV = ZmqInChannelsAry(i) + case('VelGust') + IfW%p%FlowField%Uniform%VelGust = ZmqInChannelsAry(i) + case('AngleV') + IfW%p%FlowField%Uniform%AngleV = ZmqInChannelsAry(i) + case('AngleH') + IfW%p%FlowField%Uniform%AngleH = ZmqInChannelsAry(i) + case('BldPitchCom1') + SrvD%y%BlPitchCom(1) = ZmqInChannelsAry(i) + case('BldPitchCom2') + SrvD%y%BlPitchCom(2) = ZmqInChannelsAry(i) + case('BldPitchCom3') + SrvD%y%BlPitchCom(3) = ZmqInChannelsAry(i) + case('YawMom') + SrvD%y%YawMom = ZmqInChannelsAry(i) + case('GenTrq') + SrvD%y%GenTrq = ZmqInChannelsAry(i) + case('HSSBrFrac') + SrvD%y%hssbrtrqc = ZmqInChannelsAry(i) + end select + + end do + + end if + + end if !---------------------------------------------------------------------------------------- !! Check to see if we should output data this time step: !---------------------------------------------------------------------------------------- CALL WriteOutputToFile(n_t_global_next, t_global_next, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & - SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2) + SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, TurbID, ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) !---------------------------------------------------------------------------------------- @@ -5130,7 +5522,7 @@ END FUNCTION NeedWriteOutput !! calls the routine to write to the files with the output data. It should be called after all the output solves for a given time !! have been completed, and assumes y_FAST\%WriteThisStep has been set. SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & - SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg) + SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, TurbID, ErrStat, ErrMsg) !............................................................................................................................... INTEGER(IntKi), INTENT(IN ) :: n_t_global !< Current global time step REAL(DbKi), INTENT(IN ) :: t_global !< Current global time @@ -5160,6 +5552,8 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, CHARACTER(*), PARAMETER :: RoutineName = 'WriteOutputToFile' + INTEGER(IntKi), INTENT(INOUT) :: TurbID !< Added TurbID for ZMQ communication + ! --------------------------------------------------------------------------------------------------------------------------------- ErrStat = ErrID_None ErrMsg = "" @@ -5172,8 +5566,8 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, ! Generate glue-code output file CALL WrOutputLine( t_global, p_FAST, y_FAST, IfW%y%WriteOutput, OpFM%y%WriteOutput, ED%y%WriteOutput, & AD%y, SrvD%y%WriteOutput, HD%y%WriteOutput, SD%y%WriteOutput, ExtPtfm%y%WriteOutput, MAPp%y%WriteOutput, & - FEAM%y%WriteOutput, MD%y%WriteOutput, Orca%y%WriteOutput, IceF%y%WriteOutput, IceD%y, BD%y, ErrStat, ErrMsg ) - + FEAM%y%WriteOutput, MD%y%WriteOutput, Orca%y%WriteOutput, IceF%y%WriteOutput, IceD%y, BD%y,& + p_FAST%ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) ENDIF ! Write visualization data (and also note that we're ignoring any errors that occur doing so) @@ -5188,7 +5582,7 @@ END SUBROUTINE WriteOutputToFile !---------------------------------------------------------------------------------------------------------------------------------- !> This routine writes the module output to the primary output file(s). SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, HDOutput, SDOutput, ExtPtfmOutput,& - MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, ErrStat, ErrMsg) + MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg) IMPLICIT NONE @@ -5223,6 +5617,10 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_A CHARACTER(p_FAST%TChanLen) :: TmpStr ! temporary string to print the time output as text REAL(ReKi) :: OutputAry(SIZE(y_FAST%ChannelNames)-1) + INTEGER(IntKi) :: i ! loop variable + INTEGER(IntKi) :: TurbID !< Wind turbine ID, used for broadcasting + ! ---- ZMQ Definitions ----- + REAL(ReKi), ALLOCATABLE :: ZmqOutChannelsAry(:) ErrStat = ErrID_None ErrMsg = '' @@ -5230,6 +5628,27 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_A CALL FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, HDOutput, SDOutput, ExtPtfmOutput, & MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, OutputAry) + ! ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + ! ! End of simulation time step. Broadcast results to ZMQ (assuming that we broadcast at every time step, to be modified later) + ! ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + if (p_FAST%ZmqOn) then + + CALL AllocAry( ZmqOutChannelsAry, p_FAST%ZmqOutNbr + 2, 'ZmqOutChannelsAry', ErrStat, ErrMsg ) + + ZmqOutChannelsAry = 0.0_ReKi !< Reset to zero all values prior to allocation and broadcasting + + ZmqOutChannelsAry(1) = TurbID + ZmqOutChannelsAry(2) = t + + do i = 1, p_FAST%ZmqOutNbr + ZmqOutChannelsAry(2 + i) = OutputAry(p_FAST%ZmqOutChnlsIdx(i) - 1) + end do + + call zmq_pub(ZmqOutChannelsAry, p_FAST%ZmqOutChannelsNames, p_FAST%ZmqOutNbr) + + end if + IF (p_FAST%WrTxtOutFile) THEN ! Write one line of tabular output: diff --git a/modules/openfast-library/src/zmq_client.c b/modules/openfast-library/src/zmq_client.c new file mode 100644 index 0000000000..886d2bcdee --- /dev/null +++ b/modules/openfast-library/src/zmq_client.c @@ -0,0 +1,482 @@ +// || ----- ZeroMQ Client (re-adapted from ROSCO) ------ || +// || Real-time interactor for FAST || +// || --------------------------------------------------- || + + +#include +#include +#include +#include +#include +#include + +// Initializing publisher and requester as global variables + +void *publisher = NULL; +void *requester = NULL; + +void printString(const char *str) { + printf("String: "); + + // Print each character of the string including the null terminator + for (int i = 0; str[i] != '\0'; ++i) { + printf("%c", str[i]); + } + printf("\\0"); +} + + +// float *zmq_req_rep(const char *socket_address, const char *request) { +// // add null-termination from Fortran strings inputs + +// // printf("received request from fortran in C: %s \n\n", request); + +// size_t socket_len = strlen(socket_address); +// size_t request_len = strlen(request); + +// int send_status_req; +// int send_status_data; +// // Allocate memory for null-terminated strings +// // char *socket_copy = malloc(socket_len + 1); +// // char *request_copy = malloc(request_len + 1); + +// // // Copy received strings and null-terminate them +// // strncpy(socket_copy, socket_address, socket_len); +// // socket_copy[socket_len +1] = '\0'; + +// // strncpy(request_copy, request, request_len); +// // request_copy[request_len +1] = '\0'; + +// void *context = zmq_ctx_new(); + +// if (context == NULL) { +// perror("Error in opening ZMQ comm"); +// return NULL; // Return NULL to indicate failure +// } + +// void *requester = zmq_socket(context, ZMQ_REQ); +// if (requester == NULL) { +// perror("Error in opening ZMQ comm"); +// zmq_ctx_destroy(context); +// return NULL; // Return NULL to indicate failure +// } +// // printf("Connecting..."); + +// int rc = zmq_connect(requester, socket_address); + +// if (rc != 0) { +// perror("Error in connecting to specified address"); +// fprintf(stderr, "Address: %s\n", socket_address); +// zmq_close(requester); +// zmq_ctx_destroy(context); +// return NULL; // Return NULL to indicate failure +// } + +// // printf("C: Sending request %s to socket... \n", request); +// send_status_req = zmq_send(requester, request, strlen(request), 0); + +// if (send_status_req >= 0) { +// printf("C: Request sent successfully.\n"); +// } else { +// printf("C: Error sending request: %s\n", zmq_strerror(errno)); +// } + +// float *received_value = (float *)malloc(sizeof(float)); + +// int recv_size = zmq_recv(requester, (char *)received_value, sizeof(float), 0); +// if (recv_size == sizeof(float)) { +// printf("C: Received float value: %f\n", *received_value); +// return received_value; // Return pointer to received float data + +// } else { +// free(received_value); // Free the allocated memory in case of failure +// printf("C: Error receiving float value\n"); +// zmq_close(requester); +// zmq_ctx_destroy(context); + +// return NULL; +// } + +// zmq_close(requester); +// zmq_ctx_destroy(context); +// free(socket_address); +// free(request); + +// return NULL; // Return NULL to indicate failure +// } +// String manipulation before passing to ZMQ + + +char **split(const char *str, char delimiter, int *count) { + int token_count = 0; + int str_len = strlen(str); + + // Count the number of tokens + for (int i = 0; i < str_len; i++) { + if (str[i] == delimiter) { + token_count++; + } + } + token_count++; // Add one for the last token + + char **tokens = malloc(token_count * sizeof(char *)); + if (tokens == NULL) { + *count = 0; + return NULL; + } + + int token_index = 0; + int token_start = 0; + for (int i = 0; i <= str_len; i++) { + if (str[i] == delimiter || str[i] == '\0') { + int token_length = i - token_start; + tokens[token_index] = malloc((token_length + 1) * sizeof(char)); + if (tokens[token_index] == NULL) { + *count = token_index; + for (int j = 0; j < token_index; j++) { + free(tokens[j]); + } + free(tokens); + return NULL; + } + strncpy(tokens[token_index], str + token_start, token_length); + tokens[token_index][token_length] = '\0'; + token_index++; + token_start = i + 1; + } + } + + *count = token_count; + return tokens; +} + +char *createJSONString(const char *data, const char *names) { + cJSON *root = cJSON_CreateObject(); + + int data_count, names_count; + char **data_tokens = split(data, ';', &data_count); + char **names_tokens = split(names, ';', &names_count); + + if (root && data_tokens && names_tokens && data_count == names_count) { + for (int i = 0; i < data_count; i++) { + // Check for empty string in names before adding to JSON + if (strcmp(names_tokens[i], "") != 0) { + cJSON_AddItemToObject(root, names_tokens[i], cJSON_CreateNumber(atof(data_tokens[i]))); + } + free(data_tokens[i]); + free(names_tokens[i]); + } + free(data_tokens); + free(names_tokens); + + char *jsonString = cJSON_Print(root); + cJSON_Delete(root); + return jsonString; + } else { + cJSON_Delete(root); + if (data_tokens) { + for (int i = 0; i < data_count; i++) { + free(data_tokens[i]); + } + free(data_tokens); + } + if (names_tokens) { + for (int i = 0; i < names_count; i++) { + free(names_tokens[i]); + } + free(names_tokens); + } + return NULL; + } +} + +char *cJSON_keys_to_string(cJSON *json, const char *delimiter) { + char *result = NULL; + cJSON *child = json->child; + size_t total_len = 0; + + // Calculate the total length needed for the keys string + while (child != NULL) { + total_len += strlen(child->string) + strlen(delimiter) + 1; // +1 for delimiter + + child = child->next; + } + + // Allocate memory for the keys string + result = (char *)malloc(total_len + 1); // +1 for null terminator + if (result == NULL) { + return NULL; + } + + // Build the keys string separated by the delimiter + child = json->child; + result[0] = '\0'; // Initialize the string + while (child != NULL) { + strcat(result, child->string); + if (child->next != NULL) { + strcat(result, delimiter); + } + child = child->next; + } + + return result; +} + +char *cJSON_values_to_string(cJSON *json, const char *delimiter) { + char *result = NULL; + cJSON *child = json->child; + size_t total_len = 0; + + // Calculate the total length needed for the values string + while (child != NULL) { + total_len += strlen(cJSON_Print(child)) + strlen(delimiter) + 1; // +1 for delimiter + + child = child->next; + } + + // Allocate memory for the values string + result = (char *)malloc(total_len + 1); // +1 for null terminator + if (result == NULL) { + return NULL; + } + + // Build the values string separated by the delimiter + child = json->child; + result[0] = '\0'; // Initialize the string + while (child != NULL) { + strcat(result, cJSON_Print(child)); + if (child->next != NULL) { + strcat(result, delimiter); + } + child = child->next; + } + + return result; +} + +float *process_received_data(const char *received_data) { + // Parse received JSON data + cJSON *root = cJSON_Parse(received_data); + if (!root) { + fprintf(stderr, "Error parsing JSON\n"); + return NULL; // Handle the error appropriately + } + + // Extract values from JSON and create an array of floats + cJSON *array = cJSON_GetObjectItem(root, "array_key"); // Replace "array_key" with your JSON key + if (!array || !cJSON_IsArray(array)) { + fprintf(stderr, "JSON array not found or invalid\n"); + cJSON_Delete(root); + return NULL; // Handle the error appropriately + } + + int num_elements = cJSON_GetArraySize(array); + float *float_array = (float *)malloc(num_elements * sizeof(float)); + + for (int i = 0; i < num_elements; ++i) { + cJSON *item = cJSON_GetArrayItem(array, i); + if (cJSON_IsNumber(item)) { + float_array[i] = (float)item->valuedouble; + } else { + fprintf(stderr, "Non-numeric value found in JSON array\n"); + free(float_array); + cJSON_Delete(root); + return NULL; // Handle the error appropriately + } + } + + cJSON_Delete(root); + return float_array; +} + + +// ------------------------------- Key ZMQ Helpers ------------------------- // +int zmq_init_pub(const char *req_address) { + void *context = zmq_ctx_new(); + publisher = zmq_socket(context, ZMQ_PUB); + + int rc = zmq_connect(publisher, req_address); + + if (rc != 0) { + printf("Error binding at %s : %s\n", req_address, zmq_strerror(errno)); + zmq_close(publisher); + zmq_ctx_destroy(context); + return -1; // Return error code if binding fails + } + + printf("Established PUB - SUB connection at address %s \n", req_address); + return 0; // Return success +} + + +int zmq_init_req_rep(const char *req_address) { + void *context = zmq_ctx_new(); + requester = zmq_socket(context, ZMQ_REQ); + + int rc = zmq_connect(requester, req_address); + + if (rc != 0) { + printf("Error binding at %s : %s\n", req_address, zmq_strerror(errno)); + zmq_close(requester); + zmq_ctx_destroy(context); + return -1; // Return error code if binding fails + } + + printf("Established REQ - REP connection at address %s \n", req_address); + return 0; // Return success +} + +int zmq_broadcast(const char *data, const char *names) { + if (publisher == NULL) { + printf("Socket not initialized. Call zmq_initialize_publisher first.\n"); + return -1; // Return error if socket is not initialized + } + // printf("inside C broadcasting routine.... \n"); + + size_t size = 0; + + // printf("Received names: %s\n", names); + // printf("Received string: %s\n", data); + + char *jsonString = createJSONString(data, names); + + if (jsonString) { + // printf("JSON String ready to be published: %s\n", jsonString); + zmq_send(publisher, jsonString, strlen(jsonString), 0); + free(jsonString); + } else { + printf("Failed to create JSON string\n"); + } + + return 0; // Success +} + +int count_semicolons(const char *request) { + int semicolon_count = 0; + for (int i = 0; request[i] != '\0'; i++) { + if (request[i] == ';') { + semicolon_count++; + } + } + return semicolon_count; +} + + +float *zmq_req_rep(const char *socket_address, const char *request) { + + if (requester == NULL) { + printf("Socket not initialized. Call zmq_initialize_requester first.\n"); + return -1; // Return error if socket is not initialized + } + + int req_count, send_status_req; + int max_floats = count_semicolons(request); + + // char **reqtoken = split(request, ';', &req_count); + + // printf("C: Sending request %s to socket... \n", request); + send_status_req = zmq_send(requester, request, strlen(request), 0); + + // char received_data[max_floats * sizeof(float)]; + + // Receive data via ZeroMQ + char buffer[1024]; + zmq_recv(requester, buffer, sizeof(buffer), 0); + + // Process received string + int count = 0; + const char delim[] = ";"; + char* token; + float* float_array; + + // Count the number of floats + char* copy = strdup(buffer); + token = strtok(copy, delim); + while (token != NULL) { + count++; + token = strtok(NULL, delim); + } + free(copy); + + // Allocate memory for the float array + float_array = (float*)malloc(count * sizeof(float)); + + // Convert string tokens to floats + token = strtok(buffer, delim); + for (int i = 0; i < count; ++i) { + float_array[i] = strtof(token, NULL); + token = strtok(NULL, delim); + } + + printf("Received float array:"); + for (int i = 0; i < count; ++i) { + printf(" %.4f", float_array[i]); + } + printf("\n"); + + return float_array; +} + + + + + + + + + + + + + + + + + + + + + // const int max_data_size = 1024; + + // Receive data via ZeroMQ + // char* received_data = (char*)malloc(max_data_size * sizeof(char)); + + // Receive data via ZeroMQ + // int recv_size = zmq_recv(requester, received_data, max_data_size - 1, 0); + + // if (recv_size > 0) { + // received_data[recv_size] = '\0'; // Null-terminate at the correct position + // printf("Received data: %s\n", received_data); + + // return received_data; + // } else { + // fprintf(stderr, "Error receiving data\n"); + // free(received_data); + // return NULL; + // } + // } + + + + +// float *received_value = (float *)malloc(sizeof(float)); + +// // int recv_size = zmq_recv(requester, (char *)received_value, max_floats * sizeof(float), 0); +// int recv_size = zmq_recv(requester, (char *)&received_value, sizeof(float *), 0); + +// if (recv_size > 0 && recv_size == sizeof(float *)) { +// printf("Received pointer to array\n"); +// return received_value; // Return pointer to the received float array +// } +// else +// { +// printf("C: Error receiving float array\n"); +// return NULL; +// } +// } + +// free(socket_address); +// free(request); + +// return NULL; // Return NULL to indicate failure +// } diff --git a/modules/servodyn/src/ServoDyn.f90 b/modules/servodyn/src/ServoDyn.f90 index a5e683526f..75dc0dbd1f 100644 --- a/modules/servodyn/src/ServoDyn.f90 +++ b/modules/servodyn/src/ServoDyn.f90 @@ -62,6 +62,7 @@ MODULE ServoDyn INTEGER(IntKi), PARAMETER :: ControlMode_USER = 3 !< The (ServoDyn-universal) control code for obtaining the control values from a user-defined routine INTEGER(IntKi), PARAMETER :: ControlMode_EXTERN = 4 !< The (ServoDyn-universal) control code for obtaining the control values from Simulink or Labivew INTEGER(IntKi), PARAMETER :: ControlMode_DLL = 5 !< The (ServoDyn-universal) control code for obtaining the control values from a Bladed-Style dynamic-link library + INTEGER(IntKi), PARAMETER :: ZmqIn = 9 !< The (ServoDyn-universal) control code for obtaining the control values from a Zmq socket INTEGER(IntKi), PARAMETER, PUBLIC :: TrimCase_none = 0 INTEGER(IntKi), PARAMETER, PUBLIC :: TrimCase_yaw = 1 @@ -4587,7 +4588,7 @@ SUBROUTINE Pitch_ValidateData( ) END IF - IF ( InputFileData%PCMode /= ControlMode_NONE .and. InputFileData%PCMode /= ControlMode_USER ) THEN + IF ( InputFileData%PCMode /= ControlMode_NONE .and. InputFileData%PCMode /= ControlMode_USER .and. InputFileData%PCMode /= ZmqIn ) THEN IF ( InputFileData%PCMode /= ControlMode_EXTERN .and. InputFileData%PCMode /= ControlMode_DLL ) & CALL SetErrStat( ErrID_Fatal, 'PCMode must be 0, 3, 4, or 5.', ErrStat, ErrMsg, RoutineName ) ENDIF @@ -4627,7 +4628,7 @@ SUBROUTINE Yaw_ValidateData( ) !............................................................................................................................... ! checks for yaw control mode: - IF ( InputFileData%YCMode /= ControlMode_NONE .and. InputFileData%YCMode /= ControlMode_USER ) THEN + IF ( InputFileData%YCMode /= ControlMode_NONE .and. InputFileData%YCMode /= ControlMode_USER .and. InputFileData%YCMode /= ZmqIn) THEN IF ( InputFileData%YCMode /= ControlMode_DLL .and. InputFileData%YCMode /= ControlMode_EXTERN ) & CALL SetErrStat( ErrID_Fatal, 'YCMode must be 0, 3, 4 or 5.', ErrStat, ErrMsg, RoutineName ) ENDIF @@ -4695,14 +4696,14 @@ SUBROUTINE Torque_ValidateData( ) IF ( InputFileData%VSContrl == ControlMode_EXTERN ) THEN CALL SetErrStat( ErrID_Fatal, 'VSContrl can equal '//TRIM(Num2LStr(ControlMode_EXTERN))//' only when ServoDyn is interfaced with Simulink or LabVIEW.'// & - ' Set VSContrl to 0, 1, 3, or 5 or interface ServoDyn with Simulink or LabVIEW.', ErrStat, ErrMsg, RoutineName ) + ' Set VSContrl to 0, 1, 3, 5 for interface ServoDyn with Simulink or LabVIEW or 9 for ZMQ.', ErrStat, ErrMsg, RoutineName ) END IF END IF ! checks for generator and torque control: IF ( InputFileData%VSContrl /= ControlMode_NONE .and. & - InputFileData%VSContrl /= ControlMode_SIMPLE .AND. InputFileData%VSContrl /= ControlMode_USER ) THEN + InputFileData%VSContrl /= ControlMode_SIMPLE .AND. InputFileData%VSContrl /= ControlMode_USER .AND. InputFileData%VSContrl /= ZmqIn ) THEN IF ( InputFileData%VSContrl /= ControlMode_DLL .AND. InputFileData%VSContrl /=ControlMode_EXTERN ) & CALL SetErrStat( ErrID_Fatal, 'VSContrl must be either 0, 1, 3, 4, or 5.', ErrStat, ErrMsg, RoutineName ) ENDIF @@ -4854,8 +4855,7 @@ SUBROUTINE SrvD_SetParameters( InputFileData, p, UnSum, ErrStat, ErrMsg ) if (UnSum >0) then write(UnSum, '(A)') ' Unless specified, units are consistent with Input units, [SI] system is advised.' write(UnSum, '(A)') SectionDivide - write(UnSum, '(A)') ' Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)' - write(UnSum, '(A43,I2)') ' PCMode -- Pitch control mode: ',p%PCMode + write(UnSum, '(A)') ' Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch)' write(UnSum, '(A43,I2)') ' PCMode -- Pitch control mode: ',p%PCMode write(UnSum, '(A43,ES20.12e3)') ' TPCOn -- pitch control start time: ',p%TPCOn write(UnSum, '(A)') ' -------------------' write(UnSum, '(A43,3ES12.5e2)') ' TPitManS -- pitch override start time: ',p%TPitManS( 1:min(p%NumBl,size(InputFileData%TPitManS))) @@ -5259,6 +5259,10 @@ SUBROUTINE CalculateStandardYaw(t, u, p, m, YawPosCom, YawRateCom, YawPosComInt, return end if + CASE ( ZmqIn ) + + continue + END SELECT @@ -5404,6 +5408,11 @@ SUBROUTINE Pitch_CalcOutput( t, u, p, x, xd, z, OtherState, BlPitchCom, ElecPwr, END IF BlPitchCom = p%BlAlpha * m%xd_BlPitchFilter + (1.0_ReKi - p%BlAlpha) * BlPitchCom + + CASE ( ZmqIn ) + + ! ... do nothing, values are overwritten in FAST_Subs ... + continue END SELECT @@ -5411,7 +5420,7 @@ SUBROUTINE Pitch_CalcOutput( t, u, p, x, xd, z, OtherState, BlPitchCom, ElecPwr, ! Use the initial blade pitch angles: - BlPitchCom = p%BlPitchInit + BlPitchCom = p%BlPitchInit ! todo: add check that blpitch is one of the channels inputs of ZMQ ENDIF @@ -5748,6 +5757,10 @@ SUBROUTINE Torque_CalcOutput( t, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrM CASE ( ControlMode_EXTERN ) ! HSS brake model from LabVIEW. HSSBrFrac = u%ExternalHSSBrFrac + + CASE ( ZmqIn ) + + continue ENDSELECT @@ -5997,6 +6010,10 @@ SUBROUTINE CalculateTorque( t, u, p, m, GenTrq, ElecPwr, ErrStat, ErrMsg ) GenTrq = u%ExternalGenTrq ElecPwr = u%ExternalElecPwr + CASE ( ZmqIn ) + + continue + END SELECT @@ -6208,6 +6225,13 @@ SUBROUTINE CalculateTorqueJacobian( t, u, p, m, GenTrq_du, ElecPwr_du, ErrStat, GenTrq_du = 0.0_R8Ki ElecPwr_du = 0.0_R8Ki + + CASE ( ZmqIn ) + + ! we should not get here (initialization should have caught this issue) + + GenTrq_du = 0.0_R8Ki + ElecPwr_du = 0.0_R8Ki END SELECT From 45416d6ad51b4f00f749888f05bcbd70c399c5c7 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Wed, 22 May 2024 19:17:13 +0200 Subject: [PATCH 06/14] linked w/ osx --- .gitignore | 3 + README.rst | 14 + modules/openfast-library/CMakeLists.txt | 22 +- modules/openfast-library/src/FAST_Types.f90 | 325 ++++++++++++++++++++ modules/openfast-library/src/zmq_client.c | 6 +- modules/servodyn/src/ServoDyn.f90 | 3 +- 6 files changed, 366 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 0b6dd4368e..bc38298017 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ vs-build/ varcache *.slxc +# old repo for zmq pr +/RealTimeFAST +/cJSON \ No newline at end of file diff --git a/README.rst b/README.rst index dff299384a..3adbf786ac 100644 --- a/README.rst +++ b/README.rst @@ -1,3 +1,17 @@ +OpenFAST ZMQ PR +======== +OpenFAST with ZMQ for interfacing with other applications, developed at NREL during my research stay (2023-11 - 2024 - 01). + + +Requirements +---- +``` +cJSON +ZMQ +``` + + +======== OpenFAST ======== diff --git a/modules/openfast-library/CMakeLists.txt b/modules/openfast-library/CMakeLists.txt index bf14157413..54dbc8f427 100644 --- a/modules/openfast-library/CMakeLists.txt +++ b/modules/openfast-library/CMakeLists.txt @@ -68,11 +68,27 @@ add_library(openfast_postlib src/zmq_client.c ) -target_link_libraries(openfast_postlib openfast_prelib foamfastlib scfastlib zmq cjson) +# Specify the include directories for ZeroMQ and cJSON +include_directories( + /opt/homebrew/Cellar/zeromq/4.3.5_1/include + /opt/homebrew/Cellar/cjson/1.7.18/include + ${CMAKE_CURRENT_SOURCE_DIR}/src +) + +# Specify the library directories for ZeroMQ and cJSON +link_directories( + /opt/homebrew/Cellar/zeromq/4.3.5_1/lib + /opt/homebrew/Cellar/cjson/1.7.18/lib +) -target_include_directories(openfast_postlib PUBLIC - $ +target_link_libraries(openfast_postlib + openfast_prelib + foamfastlib + scfastlib + /opt/homebrew/Cellar/zeromq/4.3.5_1/lib/libzmq.dylib + /opt/homebrew/Cellar/cjson/1.7.18/lib/libcjson.dylib ) + set_target_properties(openfast_postlib PROPERTIES PUBLIC_HEADER src/FAST_Library.h) # OpenFAST Library static (openfast, FAST.Farm, Simulink) diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 91a5d96889..1befccc878 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -201,6 +201,16 @@ MODULE FAST_Types INTEGER(IntKi) :: Lin_NumMods !< number of modules in the linearization [-] INTEGER(IntKi) , DIMENSION(NumModules) :: Lin_ModOrder !< indices that determine which order the modules are in the glue-code linearization matrix [-] INTEGER(IntKi) :: LinInterpOrder !< Interpolation order for CalcSteady solution [-] + LOGICAL :: ZmqOn = .false. !< zmq activation flag [-] + CHARACTER(1024) :: ZmqInAddress !< address for ZMQ REQ-REP protocol [-] + INTEGER(IntKi) :: ZmqInNbr !< number of ZMQ REQ-REP channels [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqInChannels !< address for ZMQ REQ-REP protocol [-] + CHARACTER(1024) :: ZmqOutAddress !< address for ZMQ PUB-SUB protocol [-] + INTEGER(IntKi) :: ZmqOutNbr !< number of ZMQ PUB-SUB channels [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannels !< variables to pass ZMQ PUB-SUB protocol [-] + INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: ZmqOutChnlsIdx !< indexes of channels to be broadcasted [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannelsNames !< names for ZMQ PUB-SUB protocol [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannelsAry !< array to pass ZMQ PUB-SUB protocol [-] END TYPE FAST_ParameterType ! ======================= ! ========= FAST_LinStateSave ======= @@ -2233,6 +2243,71 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg DstParamData%Lin_NumMods = SrcParamData%Lin_NumMods DstParamData%Lin_ModOrder = SrcParamData%Lin_ModOrder DstParamData%LinInterpOrder = SrcParamData%LinInterpOrder + DstParamData%ZmqOn = SrcParamData%ZmqOn + DstParamData%ZmqInAddress = SrcParamData%ZmqInAddress + DstParamData%ZmqInNbr = SrcParamData%ZmqInNbr +IF (ALLOCATED(SrcParamData%ZmqInChannels)) THEN + i1_l = LBOUND(SrcParamData%ZmqInChannels,1) + i1_u = UBOUND(SrcParamData%ZmqInChannels,1) + IF (.NOT. ALLOCATED(DstParamData%ZmqInChannels)) THEN + ALLOCATE(DstParamData%ZmqInChannels(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%ZmqInChannels.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%ZmqInChannels = SrcParamData%ZmqInChannels +ENDIF + DstParamData%ZmqOutAddress = SrcParamData%ZmqOutAddress + DstParamData%ZmqOutNbr = SrcParamData%ZmqOutNbr +IF (ALLOCATED(SrcParamData%ZmqOutChannels)) THEN + i1_l = LBOUND(SrcParamData%ZmqOutChannels,1) + i1_u = UBOUND(SrcParamData%ZmqOutChannels,1) + IF (.NOT. ALLOCATED(DstParamData%ZmqOutChannels)) THEN + ALLOCATE(DstParamData%ZmqOutChannels(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%ZmqOutChannels.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%ZmqOutChannels = SrcParamData%ZmqOutChannels +ENDIF +IF (ALLOCATED(SrcParamData%ZmqOutChnlsIdx)) THEN + i1_l = LBOUND(SrcParamData%ZmqOutChnlsIdx,1) + i1_u = UBOUND(SrcParamData%ZmqOutChnlsIdx,1) + IF (.NOT. ALLOCATED(DstParamData%ZmqOutChnlsIdx)) THEN + ALLOCATE(DstParamData%ZmqOutChnlsIdx(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%ZmqOutChnlsIdx.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%ZmqOutChnlsIdx = SrcParamData%ZmqOutChnlsIdx +ENDIF +IF (ALLOCATED(SrcParamData%ZmqOutChannelsNames)) THEN + i1_l = LBOUND(SrcParamData%ZmqOutChannelsNames,1) + i1_u = UBOUND(SrcParamData%ZmqOutChannelsNames,1) + IF (.NOT. ALLOCATED(DstParamData%ZmqOutChannelsNames)) THEN + ALLOCATE(DstParamData%ZmqOutChannelsNames(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%ZmqOutChannelsNames.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%ZmqOutChannelsNames = SrcParamData%ZmqOutChannelsNames +ENDIF +IF (ALLOCATED(SrcParamData%ZmqOutChannelsAry)) THEN + i1_l = LBOUND(SrcParamData%ZmqOutChannelsAry,1) + i1_u = UBOUND(SrcParamData%ZmqOutChannelsAry,1) + IF (.NOT. ALLOCATED(DstParamData%ZmqOutChannelsAry)) THEN + ALLOCATE(DstParamData%ZmqOutChannelsAry(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%ZmqOutChannelsAry.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%ZmqOutChannelsAry = SrcParamData%ZmqOutChannelsAry +ENDIF END SUBROUTINE FAST_CopyParam SUBROUTINE FAST_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -2260,6 +2335,21 @@ SUBROUTINE FAST_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL FAST_Destroyvtk_modeshapetype( ParamData%VTK_modes, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(ParamData%ZmqInChannels)) THEN + DEALLOCATE(ParamData%ZmqInChannels) +ENDIF +IF (ALLOCATED(ParamData%ZmqOutChannels)) THEN + DEALLOCATE(ParamData%ZmqOutChannels) +ENDIF +IF (ALLOCATED(ParamData%ZmqOutChnlsIdx)) THEN + DEALLOCATE(ParamData%ZmqOutChnlsIdx) +ENDIF +IF (ALLOCATED(ParamData%ZmqOutChannelsNames)) THEN + DEALLOCATE(ParamData%ZmqOutChannelsNames) +ENDIF +IF (ALLOCATED(ParamData%ZmqOutChannelsAry)) THEN + DEALLOCATE(ParamData%ZmqOutChannelsAry) +ENDIF END SUBROUTINE FAST_DestroyParam SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -2421,6 +2511,36 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_BufSz = Int_BufSz + 1 ! Lin_NumMods Int_BufSz = Int_BufSz + SIZE(InData%Lin_ModOrder) ! Lin_ModOrder Int_BufSz = Int_BufSz + 1 ! LinInterpOrder + Int_BufSz = Int_BufSz + 1 ! ZmqOn + Int_BufSz = Int_BufSz + 1*LEN(InData%ZmqInAddress) ! ZmqInAddress + Int_BufSz = Int_BufSz + 1 ! ZmqInNbr + Int_BufSz = Int_BufSz + 1 ! ZmqInChannels allocated yes/no + IF ( ALLOCATED(InData%ZmqInChannels) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! ZmqInChannels upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%ZmqInChannels)*LEN(InData%ZmqInChannels) ! ZmqInChannels + END IF + Int_BufSz = Int_BufSz + 1*LEN(InData%ZmqOutAddress) ! ZmqOutAddress + Int_BufSz = Int_BufSz + 1 ! ZmqOutNbr + Int_BufSz = Int_BufSz + 1 ! ZmqOutChannels allocated yes/no + IF ( ALLOCATED(InData%ZmqOutChannels) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! ZmqOutChannels upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%ZmqOutChannels)*LEN(InData%ZmqOutChannels) ! ZmqOutChannels + END IF + Int_BufSz = Int_BufSz + 1 ! ZmqOutChnlsIdx allocated yes/no + IF ( ALLOCATED(InData%ZmqOutChnlsIdx) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! ZmqOutChnlsIdx upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%ZmqOutChnlsIdx) ! ZmqOutChnlsIdx + END IF + Int_BufSz = Int_BufSz + 1 ! ZmqOutChannelsNames allocated yes/no + IF ( ALLOCATED(InData%ZmqOutChannelsNames) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! ZmqOutChannelsNames upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%ZmqOutChannelsNames)*LEN(InData%ZmqOutChannelsNames) ! ZmqOutChannelsNames + END IF + Int_BufSz = Int_BufSz + 1 ! ZmqOutChannelsAry allocated yes/no + IF ( ALLOCATED(InData%ZmqOutChannelsAry) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! ZmqOutChannelsAry upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%ZmqOutChannelsAry) ! ZmqOutChannelsAry + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -2728,6 +2848,101 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, END DO IntKiBuf(Int_Xferred) = InData%LinInterpOrder Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%ZmqOn, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(InData%ZmqInAddress) + IntKiBuf(Int_Xferred) = ICHAR(InData%ZmqInAddress(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + IntKiBuf(Int_Xferred) = InData%ZmqInNbr + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%ZmqInChannels) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%ZmqInChannels,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ZmqInChannels,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%ZmqInChannels,1), UBOUND(InData%ZmqInChannels,1) + DO I = 1, LEN(InData%ZmqInChannels) + IntKiBuf(Int_Xferred) = ICHAR(InData%ZmqInChannels(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + DO I = 1, LEN(InData%ZmqOutAddress) + IntKiBuf(Int_Xferred) = ICHAR(InData%ZmqOutAddress(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + IntKiBuf(Int_Xferred) = InData%ZmqOutNbr + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%ZmqOutChannels) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%ZmqOutChannels,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ZmqOutChannels,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%ZmqOutChannels,1), UBOUND(InData%ZmqOutChannels,1) + DO I = 1, LEN(InData%ZmqOutChannels) + IntKiBuf(Int_Xferred) = ICHAR(InData%ZmqOutChannels(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IF ( .NOT. ALLOCATED(InData%ZmqOutChnlsIdx) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%ZmqOutChnlsIdx,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ZmqOutChnlsIdx,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%ZmqOutChnlsIdx,1), UBOUND(InData%ZmqOutChnlsIdx,1) + IntKiBuf(Int_Xferred) = InData%ZmqOutChnlsIdx(i1) + Int_Xferred = Int_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%ZmqOutChannelsNames) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%ZmqOutChannelsNames,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ZmqOutChannelsNames,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%ZmqOutChannelsNames,1), UBOUND(InData%ZmqOutChannelsNames,1) + DO I = 1, LEN(InData%ZmqOutChannelsNames) + IntKiBuf(Int_Xferred) = ICHAR(InData%ZmqOutChannelsNames(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IF ( .NOT. ALLOCATED(InData%ZmqOutChannelsAry) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%ZmqOutChannelsAry,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ZmqOutChannelsAry,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%ZmqOutChannelsAry,1), UBOUND(InData%ZmqOutChannelsAry,1) + ReKiBuf(Re_Xferred) = InData%ZmqOutChannelsAry(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF END SUBROUTINE FAST_PackParam SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -3075,6 +3290,116 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END DO OutData%LinInterpOrder = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ZmqOn = TRANSFER(IntKiBuf(Int_Xferred), OutData%ZmqOn) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(OutData%ZmqInAddress) + OutData%ZmqInAddress(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%ZmqInNbr = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqInChannels not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%ZmqInChannels)) DEALLOCATE(OutData%ZmqInChannels) + ALLOCATE(OutData%ZmqInChannels(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ZmqInChannels.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ZmqInChannels,1), UBOUND(OutData%ZmqInChannels,1) + DO I = 1, LEN(OutData%ZmqInChannels) + OutData%ZmqInChannels(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + DO I = 1, LEN(OutData%ZmqOutAddress) + OutData%ZmqOutAddress(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%ZmqOutNbr = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqOutChannels not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%ZmqOutChannels)) DEALLOCATE(OutData%ZmqOutChannels) + ALLOCATE(OutData%ZmqOutChannels(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ZmqOutChannels.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ZmqOutChannels,1), UBOUND(OutData%ZmqOutChannels,1) + DO I = 1, LEN(OutData%ZmqOutChannels) + OutData%ZmqOutChannels(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqOutChnlsIdx not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%ZmqOutChnlsIdx)) DEALLOCATE(OutData%ZmqOutChnlsIdx) + ALLOCATE(OutData%ZmqOutChnlsIdx(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ZmqOutChnlsIdx.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ZmqOutChnlsIdx,1), UBOUND(OutData%ZmqOutChnlsIdx,1) + OutData%ZmqOutChnlsIdx(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqOutChannelsNames not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%ZmqOutChannelsNames)) DEALLOCATE(OutData%ZmqOutChannelsNames) + ALLOCATE(OutData%ZmqOutChannelsNames(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ZmqOutChannelsNames.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ZmqOutChannelsNames,1), UBOUND(OutData%ZmqOutChannelsNames,1) + DO I = 1, LEN(OutData%ZmqOutChannelsNames) + OutData%ZmqOutChannelsNames(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqOutChannelsAry not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%ZmqOutChannelsAry)) DEALLOCATE(OutData%ZmqOutChannelsAry) + ALLOCATE(OutData%ZmqOutChannelsAry(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ZmqOutChannelsAry.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ZmqOutChannelsAry,1), UBOUND(OutData%ZmqOutChannelsAry,1) + OutData%ZmqOutChannelsAry(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF END SUBROUTINE FAST_UnPackParam SUBROUTINE FAST_CopyLinStateSave( SrcLinStateSaveData, DstLinStateSaveData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/openfast-library/src/zmq_client.c b/modules/openfast-library/src/zmq_client.c index 886d2bcdee..76ccf697e6 100644 --- a/modules/openfast-library/src/zmq_client.c +++ b/modules/openfast-library/src/zmq_client.c @@ -7,8 +7,8 @@ #include #include #include -#include -#include +#include +#include // Initializing publisher and requester as global variables @@ -366,7 +366,7 @@ float *zmq_req_rep(const char *socket_address, const char *request) { if (requester == NULL) { printf("Socket not initialized. Call zmq_initialize_requester first.\n"); - return -1; // Return error if socket is not initialized + return NULL; // Return error if socket is not initialized } int req_count, send_status_req; diff --git a/modules/servodyn/src/ServoDyn.f90 b/modules/servodyn/src/ServoDyn.f90 index 75dc0dbd1f..96212f9d7f 100644 --- a/modules/servodyn/src/ServoDyn.f90 +++ b/modules/servodyn/src/ServoDyn.f90 @@ -4855,7 +4855,8 @@ SUBROUTINE SrvD_SetParameters( InputFileData, p, UnSum, ErrStat, ErrMsg ) if (UnSum >0) then write(UnSum, '(A)') ' Unless specified, units are consistent with Input units, [SI] system is advised.' write(UnSum, '(A)') SectionDivide - write(UnSum, '(A)') ' Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch)' write(UnSum, '(A43,I2)') ' PCMode -- Pitch control mode: ',p%PCMode + write(UnSum, '(A)') ' Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch)' + write(UnSum, '(A43,I2)') ' PCMode -- Pitch control mode: ',p%PCMode write(UnSum, '(A43,ES20.12e3)') ' TPCOn -- pitch control start time: ',p%TPCOn write(UnSum, '(A)') ' -------------------' write(UnSum, '(A43,3ES12.5e2)') ' TPitManS -- pitch override start time: ',p%TPitManS( 1:min(p%NumBl,size(InputFileData%TPitManS))) From 2ec068f828ec40636f28c4a569d782c00306ff56 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:02:53 +0200 Subject: [PATCH 07/14] zmq dt, EOF sim --- README.rst | 15 + .../openfast-library/src/FAST_Registry.txt | 5 +- modules/openfast-library/src/FAST_Subs.f90 | 85 +- modules/openfast-library/src/FAST_Types.f90 | 14 + zmq_coupling_tests/ex01_sub.py | 38 + .../templateDir/AeroData/Cylinder1.dat | 19 + .../templateDir/AeroData/Cylinder2.dat | 19 + .../templateDir/AeroData/DU21_A17.dat | 158 + .../templateDir/AeroData/DU25_A17.dat | 157 + .../templateDir/AeroData/DU30_A17.dat | 159 + .../templateDir/AeroData/DU35_A17.dat | 151 + .../templateDir/AeroData/DU40_A17.dat | 152 + .../templateDir/AeroData/NACA64_A17.dat | 143 + .../templateDir/Airfoils/Cylinder1.dat | 59 + .../templateDir/Airfoils/Cylinder1_coords.txt | 407 + .../templateDir/Airfoils/Cylinder2.dat | 60 + .../templateDir/Airfoils/Cylinder2_coords.txt | 407 + .../templateDir/Airfoils/DU21_A17.dat | 196 + .../templateDir/Airfoils/DU21_A17_coords.txt | 407 + .../templateDir/Airfoils/DU25_A17.dat | 194 + .../templateDir/Airfoils/DU25_A17_coords.txt | 407 + .../templateDir/Airfoils/DU30_A17.dat | 198 + .../templateDir/Airfoils/DU30_A17_coords.txt | 407 + .../templateDir/Airfoils/DU35_A17.dat | 189 + .../templateDir/Airfoils/DU35_A17_coords.txt | 407 + .../templateDir/Airfoils/DU40_A17.dat | 190 + .../templateDir/Airfoils/DU40_A17_coords.txt | 407 + .../templateDir/Airfoils/NACA64_A17.dat | 181 + .../Airfoils/NACA64_A17_coords.txt | 407 + .../templateDir/Cp_Ct_Cq.NREL5MW.txt | 99 + zmq_coupling_tests/templateDir/DISCON.IN | 192 + .../templateDir/IceDyn_Input.dat | 74 + .../templateDir/IceFloe_IEC_Crushing.dat | 51 + zmq_coupling_tests/templateDir/Main02.AD.sum | 55 + zmq_coupling_tests/templateDir/Main02.ED.sum | 210 + .../templateDir/Main02.SrvD.sum | 66 + zmq_coupling_tests/templateDir/Main02.UA.sum | 16 + zmq_coupling_tests/templateDir/Main02.ech | 103 + zmq_coupling_tests/templateDir/Main02.fst | 84 + zmq_coupling_tests/templateDir/Main02.outb | Bin 0 -> 1761946 bytes zmq_coupling_tests/templateDir/Main02.sum | 103 + .../NRELOffshrBsline5MW_AeroDyn_blade.dat | 28 + .../NRELOffshrBsline5MW_BeamDyn.dat | 94 + .../NRELOffshrBsline5MW_BeamDyn_Blade.dat | 756 + .../templateDir/NRELOffshrBsline5MW_Blade.dat | 83 + .../NRELOffshrBsline5MW_InflowWind.dat | 71 + ...LOffshrBsline5MW_Monopile_IEC_Crushing.inp | 26 + .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 106 + .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 160 + ...ffshrBsline5MW_Onshore_ElastoDyn_Tower.dat | 54 + .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 110 + zmq_coupling_tests/templateDir/README.md | 1 + zmq_coupling_tests/templateDir/uniform.hh | 1229 ++ .../zmq_python_toolbox/REPtests.ipynb | 2141 ++ .../zmq_python_toolbox/SUBtests.ipynb | 17139 ++++++++++++++++ .../zmq_python_toolbox/ex_files/tsim.dat | 12001 +++++++++++ .../zmq_python_toolbox/pyFAST/__init__.py | 6 + .../pyFAST/aeroacoustics/plot_directivity.py | 86 + .../pyFAST/aeroacoustics/plot_mechanisms.py | 112 + .../pyFAST/aeroacoustics/plot_rotor_map.py | 92 + .../pyFAST/aeroacoustics/plot_spectra.py | 87 + .../pyFAST/aeroacoustics/run_OF.py | 18 + .../pyFAST/aeroacoustics/write_BLfiles.py | 144 + .../pyFAST/airfoils/DynamicStall.py | 506 + .../pyFAST/airfoils/Polar.py | 1993 ++ .../pyFAST/airfoils/__init__.py | 2 + .../pyFAST/airfoils/data/63-235.csv | 152 + .../pyFAST/airfoils/data/Cylinder.csv | 4 + .../pyFAST/airfoils/data/Cylinder.dat | 5 + .../pyFAST/airfoils/data/DU21_A17.csv | 147 + .../pyFAST/airfoils/data/FFA-W3-241-Re12M.dat | 106 + .../pyFAST/airfoils/examples/correction3D.py | 43 + .../airfoils/examples/createADPolarFile.py | 118 + .../examples/createADPolarFile_Basic.py | 65 + .../pyFAST/airfoils/polar_file.py | 291 + .../pyFAST/airfoils/tests/__init__.py | 0 .../airfoils/tests/test_polar_interp.py | 47 + .../pyFAST/airfoils/tests/test_polar_manip.py | 23 + .../airfoils/tests/test_polar_params.py | 256 + .../airfoils/tests/test_polar_subfunctions.py | 51 + .../airfoils/tests/test_run_Examples.py | 33 + .../pyFAST/case_generation/README.rst | 3 + .../pyFAST/case_generation/__init__.py | 0 .../pyFAST/case_generation/case_gen.py | 673 + .../case_generation/examples/.gitignore | 4 + .../examples/Example_CPLambdaPitch.py | 48 + .../examples/Example_ExcelFile.py | 57 + .../examples/Example_Parametric.py | 112 + .../examples/Example_PowerCurve_Parametric.py | 123 + .../examples/ParametricExcel.xlsx | Bin 0 -> 11500 bytes .../pyFAST/case_generation/examples/README.md | 7 + .../pyFAST/case_generation/runner.py | 319 + .../pyFAST/case_generation/tests/__init__.py | 1 + .../tests/test_run_Examples.py | 33 + .../zmq_python_toolbox/pyFAST/common.py | 3 + .../pyFAST/converters/.gitignore | 10 + .../pyFAST/converters/README.md | 4 + .../pyFAST/converters/__init__.py | 0 .../pyFAST/converters/beam.py | 590 + .../pyFAST/converters/beamDynToHawc2.py | 500 + .../pyFAST/converters/beamdyn.py | 2 + .../pyFAST/converters/doc/.gitignore | 11 + .../pyFAST/converters/doc/BeamDynInput.tex | 950 + .../pyFAST/converters/doc/Bibliography.bib | 15788 ++++++++++++++ .../pyFAST/converters/doc/Makefile | 41 + .../svgtex/AeroElastCodesCoordConvention.svg | 1798 ++ .../doc/svgtex/BeamDynSectionCoord.svg | 1283 ++ .../svgtex/BeamDynSectionCoord_Abstract.svg | 844 + .../svgtex/StiffnessMatrixAxialBending.svg | 1263 ++ .../pyFAST/converters/elastodyn.py | 79 + .../pyFAST/converters/examples/.gitignore | 2 + .../examples/Main_BeamDynToHawc2.py | 77 + .../examples/Main_Hawc2ToAeroDyn.py | 45 + .../examples/Main_Hawc2ToBeamDyn.py | 46 + .../examples/Main_OpenFASTToHawc2.py | 47 + .../pyFAST/converters/hawc2.py | 32 + .../pyFAST/converters/hawc2ToBeamDyn.py | 458 + .../pyFAST/converters/hawc2ToElastoDyn.py | 85 + .../pyFAST/converters/hawc2ToOpenfast.py | 255 + .../pyFAST/converters/openfastToHawc2.py | 364 + .../pyFAST/converters/tests/__init__.py | 0 .../pyFAST/converters/tests/test_K_BD_H2.py | 152 + .../pyFAST/converters/tests/test_beamprops.py | 52 + .../converters/tests/test_hawc2ToBeamDyn.py | 60 + .../converters/tests/test_run_Examples.py | 33 + .../pyFAST/fastfarm/.gitignore | 3 + .../pyFAST/fastfarm/AMRWindSimulation.py | 577 + .../pyFAST/fastfarm/FASTFarmCaseCreation.py | 2244 ++ .../pyFAST/fastfarm/README.md | 8 + .../pyFAST/fastfarm/TurbSimCaseCreation.py | 399 + .../pyFAST/fastfarm/__init__.py | 4 + .../examples/Ex1_TurbSimInputSetup.py | 55 + .../fastfarm/examples/Ex2_FFarmInputSetup.py | 73 + .../examples/Ex3_FFarmCompleteSetup.py | 161 + .../examples/Ex4_AMRWindSamplingSetup.py | 52 + .../pyFAST/fastfarm/examples/README.md | 10 + .../examples/SampleFiles/TestCase.fstf | 112 + .../examples/SampleFiles/TestCase.inp | 74 + .../examples/SampleFiles/_TestCase_mod.fstf | 113 + .../examples/SampleFiles/runAllHighBox.sh | 53 + .../examples/SampleFiles/runAllLowBox.sh | 50 + .../runFASTFarm_cond0_case0_seed0.sh | 42 + .../template_HighT1_InflowXX_SeedY.inp | 74 + .../template_Low_InflowXX_SeedY.inp | 74 + .../pyFAST/fastfarm/fastfarm.py | 648 + .../pyFAST/fastfarm/tests/__init__.py | 0 .../fastfarm/tests/test_run_Examples.py | 33 + .../fastfarm/tests/test_turbsimExtent.py | 79 + .../pyFAST/input_output/README.md | 63 + .../pyFAST/input_output/__init__.py | 307 + .../pyFAST/input_output/amrwind_file.py | 125 + .../pyFAST/input_output/bladed_out_file.py | 398 + .../pyFAST/input_output/bmodes_out_file.py | 152 + .../input_output/cactus_element_file.py | 107 + .../pyFAST/input_output/cactus_file.py | 386 + .../pyFAST/input_output/converters.py | 94 + .../pyFAST/input_output/csv_file.py | 285 + .../pyFAST/input_output/examples/.gitignore | 4 + .../examples/Example_ChangeAeroDyn.py | 15 + .../examples/Example_EditOpenFASTModel.py | 88 + .../input_output/examples/Example_MannBox.py | 90 + .../examples/Example_PlotBinary.py | 23 + .../examples/Example_PlotBlade.py | 20 + .../examples/Example_TurbSimBox.py | 127 + .../examples/Example_TurbSim_Processing.py | 38 + .../examples/Example_VTKPlanesGrid.py | 39 + .../pyFAST/input_output/examples/README.md | 10 + .../input_output/examples/SubDynModes.py | 43 + .../pyFAST/input_output/excel_file.py | 81 + .../pyFAST/input_output/fast_input_deck.py | 477 + .../pyFAST/input_output/fast_input_file.py | 2104 ++ .../input_output/fast_input_file_graph.py | 352 + .../input_output/fast_linearization_file.py | 615 + .../pyFAST/input_output/fast_output_file.py | 651 + .../pyFAST/input_output/fast_summary_file.py | 270 + .../pyFAST/input_output/fast_wind_file.py | 72 + .../pyFAST/input_output/file.py | 235 + .../pyFAST/input_output/file_formats.py | 31 + .../pyFAST/input_output/flex_blade_file.py | 139 + .../pyFAST/input_output/flex_doc_file.py | 208 + .../pyFAST/input_output/flex_out_file.py | 205 + .../pyFAST/input_output/flex_profile_file.py | 144 + .../pyFAST/input_output/flex_wavekin_file.py | 101 + .../pyFAST/input_output/hawc2_ae_file.py | 91 + .../pyFAST/input_output/hawc2_dat_file.py | 144 + .../pyFAST/input_output/hawc2_htc_file.py | 136 + .../pyFAST/input_output/hawc2_pc_file.py | 97 + .../pyFAST/input_output/hawc2_st_file.py | 81 + .../pyFAST/input_output/hawcstab2_cmb_file.py | 36 + .../pyFAST/input_output/hawcstab2_ind_file.py | 60 + .../pyFAST/input_output/hawcstab2_pwr_file.py | 49 + .../pyFAST/input_output/mannbox_file.py | 332 + .../pyFAST/input_output/mannbox_input_file.py | 191 + .../pyFAST/input_output/matlabmat_file.py | 111 + .../pyFAST/input_output/mini_yaml.py | 166 + .../pyFAST/input_output/netcdf_file.py | 40 + .../pyFAST/input_output/parquet_file.py | 48 + .../pyFAST/input_output/pickle_file.py | 174 + .../pyFAST/input_output/postpro.py | 2 + .../pyFAST/input_output/raawmat_file.py | 211 + .../pyFAST/input_output/rosco_discon_file.py | 265 + .../input_output/rosco_performance_file.py | 438 + .../pyFAST/input_output/tdms_file.py | 225 + .../pyFAST/input_output/tecplot_file.py | 222 + .../pyFAST/input_output/tests/__init__.py | 0 .../tests/example_files/BHAWC_out_ascii.dat | 11 + .../tests/example_files/BHAWC_out_ascii.sel | 18 + .../tests/example_files/BHAWC_out_ascii1.dat | 20 + .../tests/example_files/BHAWC_out_ascii1.sel | 21 + .../tests/example_files/Bladed_out_ascii.$04 | 200 + .../tests/example_files/Bladed_out_ascii.$41 | 800 + .../tests/example_files/Bladed_out_ascii.%04 | 39 + .../tests/example_files/Bladed_out_ascii.%41 | 98 + .../tests/example_files/Bladed_out_binary.$04 | Bin 0 -> 21600 bytes .../tests/example_files/Bladed_out_binary.$41 | Bin 0 -> 76800 bytes .../tests/example_files/Bladed_out_binary.%04 | 39 + .../tests/example_files/Bladed_out_binary.%41 | 98 + .../example_files/Bladed_out_binary_case2.$04 | Bin 0 -> 360 bytes .../example_files/Bladed_out_binary_case2.$06 | Bin 0 -> 160 bytes .../example_files/Bladed_out_binary_case2.$09 | Bin 0 -> 680 bytes .../example_files/Bladed_out_binary_case2.$12 | Bin 0 -> 520 bytes .../example_files/Bladed_out_binary_case2.$23 | 1 + .../example_files/Bladed_out_binary_case2.$25 | Bin 0 -> 640 bytes .../example_files/Bladed_out_binary_case2.$31 | Bin 0 -> 120 bytes .../example_files/Bladed_out_binary_case2.$37 | 522 + .../example_files/Bladed_out_binary_case2.$46 | Bin 0 -> 480 bytes .../example_files/Bladed_out_binary_case2.$55 | Bin 0 -> 200 bytes .../example_files/Bladed_out_binary_case2.$69 | Bin 0 -> 240 bytes .../example_files/Bladed_out_binary_case2.$PJ | 1013 + .../example_files/Bladed_out_binary_case2.%04 | 39 + .../example_files/Bladed_out_binary_case2.%06 | 29 + .../example_files/Bladed_out_binary_case2.%09 | 59 + .../example_files/Bladed_out_binary_case2.%12 | 47 + .../example_files/Bladed_out_binary_case2.%23 | 37 + .../example_files/Bladed_out_binary_case2.%25 | 60 + .../example_files/Bladed_out_binary_case2.%31 | 31 + .../example_files/Bladed_out_binary_case2.%37 | 31 + .../example_files/Bladed_out_binary_case2.%46 | 56 + .../example_files/Bladed_out_binary_case2.%55 | 17 + .../example_files/Bladed_out_binary_case2.%69 | 33 + .../Bladed_out_binary_case2_fail.$55 | Bin 0 -> 200 bytes .../Bladed_out_binary_case2_fail.%55 | 17 + .../example_files/CSVAutoCommentChar.txt | 21 + .../tests/example_files/CSVColInHeader.csv | 5 + .../tests/example_files/CSVColInHeader2.csv | 3 + .../tests/example_files/CSVColInHeader3.csv | 3 + .../tests/example_files/CSVComma.csv | 5 + .../tests/example_files/CSVDateNaN.csv | 12 + .../tests/example_files/CSVNoHeader.csv | 4 + .../tests/example_files/CSVSemi.csv | 4 + .../tests/example_files/CSVSpace_ExtraCol.csv | 6 + .../tests/example_files/CSVTab.csv | 6 + .../example_files/CSVTwoLinesHeaders.txt | 18 + .../tests/example_files/CSVxIsString.csv | 8 + .../example_files/ExcelFile_OneSheet.xlsx | Bin 0 -> 11708 bytes .../tests/example_files/FASTIn_AD14.dat | 45 + .../tests/example_files/FASTIn_AD14_arf.dat | 32 + .../example_files/FASTIn_AD14_arf_3col.dat | 57 + .../example_files/FASTIn_AD14_arf_Re.dat | 79 + .../tests/example_files/FASTIn_AD15.dat | 73 + .../FASTIn_AD15_arf_multitabs.dat | 146 + .../tests/example_files/FASTIn_AD15_arfl.dat | 83 + .../tests/example_files/FASTIn_AD15_arfl0.dat | 66 + .../tests/example_files/FASTIn_AD15_bld.dat | 26 + .../tests/example_files/FASTIn_AD15_latin.dat | 73 + .../tests/example_files/FASTIn_AD15_of34.dat | 123 + .../tests/example_files/FASTIn_AD_F7.dat | 45 + .../tests/example_files/FASTIn_AD_twr.dat | 40 + .../tests/example_files/FASTIn_BD.dat | 88 + .../tests/example_files/FASTIn_BD_bld.dat | 41 + .../tests/example_files/FASTIn_BD_bld_2.dat | 39 + .../tests/example_files/FASTIn_Blade.dat | 29 + .../tests/example_files/FASTIn_ED.dat | 128 + .../tests/example_files/FASTIn_ED_bld.dat | 81 + .../tests/example_files/FASTIn_ED_bld_F7.dat | 44 + .../tests/example_files/FASTIn_ED_twr.dat | 52 + .../tests/example_files/FASTIn_ED_twr_F7.dat | 52 + .../example_files/FASTIn_ExtPtfm_SubSef.dat | 31 + .../tests/example_files/FASTIn_HD.dat | 149 + .../tests/example_files/FASTIn_HD2.dat | 269 + .../example_files/FASTIn_HD_SeaState.dat | 96 + .../tests/example_files/FASTIn_HD_driver.dvr | 27 + .../tests/example_files/FASTIn_IF_NoHead.dat | 55 + .../tests/example_files/FASTIn_MD-v1.dat | 64 + .../tests/example_files/FASTIn_MD-v2.dat | 39 + .../tests/example_files/FASTIn_SD.dat | 97 + .../tests/example_files/FASTIn_SbD.dat | 70 + .../example_files/FASTIn_SbD_comments.dat | 165 + .../tests/example_files/FASTIn_TurbSim.dat | 74 + .../tests/example_files/FASTIn_arf_coords.txt | 407 + .../tests/example_files/FASTLin.lin | 113 + .../tests/example_files/FASTLin_EDM.lin | 139 + .../tests/example_files/FASTOutBin.outb | Bin 0 -> 4678 bytes .../tests/example_files/FASTOutBin_ID4.outb | Bin 0 -> 11641 bytes .../tests/example_files/FASTOut_HD.elev | 9 + .../tests/example_files/FASTOut_V7.elm | 7 + .../FASTSum_Pendulum.SD.sum.yaml | 178 + .../tests/example_files/FASTWnd.wnd | 8 + .../tests/example_files/FLEXBlade000.bla | 32 + .../tests/example_files/FLEXBlade001.bld | 32 + .../tests/example_files/FLEXBlade002.bld | 56 + .../tests/example_files/FLEXBlade003.bld | 21 + .../tests/example_files/FLEXOutBinV0.int | Bin 0 -> 11352 bytes .../tests/example_files/FLEXOutBinV3.res | Bin 0 -> 186 bytes .../tests/example_files/FLEXProfile.pro | 1016 + .../tests/example_files/FLEXWaveKin.wko | 24 + .../tests/example_files/HAWC2_ae.dat | 83 + .../tests/example_files/HAWC2_out_ascii.dat | 800 + .../tests/example_files/HAWC2_out_ascii.sel | 41 + .../tests/example_files/HAWC2_out_bin.dat | Bin 0 -> 44800 bytes .../tests/example_files/HAWC2_out_bin.sel | 70 + .../tests/example_files/HAWC2_pc.dat | 638 + .../tests/example_files/HAWC2_st.dat | 38 + .../tests/example_files/HAWC2_st.st | 38 + .../tests/example_files/HAWC2_st_fpm.st | 49 + .../tests/example_files/HAWCStab2.pwr | 46 + .../example_files/HAWCStab2_defl_u3000.ind | 20 + .../example_files/HAWCStab2_fext_u3000.ind | 20 + .../tests/example_files/HAWCStab2_u3000.ind | 49 + .../tests/example_files/MannBox_2x4x8.bin | 1 + .../example_files/ParquetFile_test.parquet | Bin 0 -> 2951 bytes .../RoscoDISCON_PowerTracking.in | 151 + .../example_files/RoscoPerformance_CpCtCq.txt | 29 + .../TDMS_1Grp2Chan_TimeTrack.tdms | Bin 0 -> 560 bytes .../tests/example_files/TDMS_2Grp2Chan.tdms | Bin 0 -> 1019 bytes .../tests/example_files/TecplotASCII_1.dat | 11 + .../tests/example_files/TecplotASCII_2.dat | 28 + .../tests/example_files/TurbSimTS.txt | 17 + .../tests/example_files/TurbSim_FAST.bts | Bin 0 -> 5572 bytes .../tests/example_files/TurbSim_NoTwr.bts | Bin 0 -> 7372 bytes .../tests/example_files/TurbSim_WithTwr.bts | Bin 0 -> 9772 bytes .../VTKStructuredPointsPointData.vtk | 15 + .../input_decks/Elliptic_AD15_40.dat | 124 + .../Elliptic_AD15_blade_40_cos.dat | 46 + .../example_files/input_decks/Elliptic_IW.dat | 57 + .../input_decks/Elliptic_OLAF.dat | 45 + .../input_decks/Elliptic_Wind.wnd | 5 + .../Main_EllipticalWingInf_OLAF.dvr | 55 + .../input_decks/Polar2PiAlpha_AD15.dat | 152 + .../input_output/tests/helpers_for_test.py | 29 + .../pyFAST/input_output/tests/test_bladed.py | 127 + .../pyFAST/input_output/tests/test_csv.py | 53 + .../input_output/tests/test_fast_input.py | 197 + .../tests/test_fast_input_deck.py | 25 + .../tests/test_fast_linearization.py | 58 + .../input_output/tests/test_fast_output.py | 44 + .../input_output/tests/test_fast_summary.py | 42 + .../pyFAST/input_output/tests/test_flex.py | 59 + .../pyFAST/input_output/tests/test_hawc.py | 112 + .../pyFAST/input_output/tests/test_mannbox.py | 24 + .../pyFAST/input_output/tests/test_parquet.py | 26 + .../input_output/tests/test_run_Examples.py | 33 + .../pyFAST/input_output/tests/test_turbsim.py | 35 + .../pyFAST/input_output/tests/test_vtk.py | 24 + .../pyFAST/input_output/tests/test_yaml.py | 107 + .../pyFAST/input_output/tools/__init__.py | 0 .../pyFAST/input_output/tools/graph.py | 688 + .../pyFAST/input_output/turbsim_file.py | 1091 + .../pyFAST/input_output/turbsim_ts_file.py | 102 + .../pyFAST/input_output/vtk_file.py | 1349 ++ .../pyFAST/input_output/wetb/__init__.py | 0 .../pyFAST/input_output/wetb/hawc2/Hawc2io.py | 343 + .../input_output/wetb/hawc2/__init__.py | 12 + .../pyFAST/input_output/wetb/hawc2/ae_file.py | 138 + .../input_output/wetb/hawc2/htc_contents.py | 479 + .../input_output/wetb/hawc2/htc_extensions.py | 143 + .../input_output/wetb/hawc2/htc_file.py | 600 + .../input_output/wetb/hawc2/htc_file_set.py | 55 + .../pyFAST/input_output/wetb/hawc2/pc_file.py | 163 + .../pyFAST/input_output/wetb/hawc2/st_file.py | 302 + .../pyFAST/linearization/README.rst | 3 + .../pyFAST/linearization/__init__.py | 18 + .../pyFAST/linearization/campbell.py | 515 + .../pyFAST/linearization/campbell_data.py | 692 + .../pyFAST/linearization/examples/README.md | 15 + .../ex1a_OneLinFile_SimpleEigenAnalysis.py | 44 + .../examples/ex1b_OneLinFile_NoRotation.py | 33 + .../examples/ex2a_MultiLinFiles_OneOP.py | 38 + .../examples/ex3a_MultiLinFile_Campbell.py | 75 + .../linearization/examples/runCampbell.py | 94 + .../pyFAST/linearization/linearization.py | 396 + .../pyFAST/linearization/linfile.py | 639 + .../pyFAST/linearization/mbc.py | 523 + .../pyFAST/linearization/plotCampbellData.py | 42 + .../pyFAST/linearization/plotModeShapes.py | 134 + .../pyFAST/linearization/tests/__init__.py | 0 .../linearization/tests/test_campbell_data.py | 103 + .../linearization/tests/test_modesID.py | 94 + .../tests/test_modesVizBinary.py | 118 + .../linearization/tests/test_run_Examples.py | 31 + .../pyFAST/linearization/tools.py | 397 + .../pyFAST/modules/__init__.py | 0 .../zmq_python_toolbox/pyFAST/modules/olaf.py | 211 + .../pyFAST/postpro/__init__.py | 3 + .../examples/Example_EquivalentLoad.py | 30 + .../postpro/examples/Example_RadialInterp.py | 79 + .../postpro/examples/Example_RadialPostPro.py | 57 + .../pyFAST/postpro/examples/Example_Remap.py | 27 + .../pyFAST/postpro/postpro.py | 1844 ++ .../pyFAST/postpro/tests/__init__.py | 0 .../pyFAST/postpro/tests/test_run_Examples.py | 33 + .../pyFAST/tools/__init__.py | 0 .../pyFAST/tools/curve_fitting.py | 1446 ++ .../pyFAST/tools/damping.py | 373 + .../zmq_python_toolbox/pyFAST/tools/eva.py | 332 + .../pyFAST/tools/fatigue.py | 1221 ++ .../pyFAST/tools/pandalib.py | 209 + .../pyFAST/tools/signal_analysis.py | 893 + .../pyFAST/tools/spectral.py | 1442 ++ .../zmq_python_toolbox/pyFAST/tools/stats.py | 384 + .../pyFAST/tools/tests/__init__.py | 0 .../pyFAST/tools/tests/test_fatigue.py | 6 + .../zmq_python_toolbox/pyFAST/tools/tictoc.py | 75 + .../real_fast_interactor.py | 151 + 414 files changed, 117433 insertions(+), 13 deletions(-) create mode 100644 zmq_coupling_tests/ex01_sub.py create mode 100644 zmq_coupling_tests/templateDir/AeroData/Cylinder1.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/Cylinder2.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/DU21_A17.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/DU25_A17.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/DU30_A17.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/DU35_A17.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/DU40_A17.dat create mode 100644 zmq_coupling_tests/templateDir/AeroData/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/Cylinder1.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/Cylinder1_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/Cylinder2.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/Cylinder2_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU21_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU21_A17_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU25_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU25_A17_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU30_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU30_A17_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU35_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU35_A17_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU40_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/DU40_A17_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Airfoils/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templateDir/Airfoils/NACA64_A17_coords.txt create mode 100644 zmq_coupling_tests/templateDir/Cp_Ct_Cq.NREL5MW.txt create mode 100644 zmq_coupling_tests/templateDir/DISCON.IN create mode 100644 zmq_coupling_tests/templateDir/IceDyn_Input.dat create mode 100644 zmq_coupling_tests/templateDir/IceFloe_IEC_Crushing.dat create mode 100644 zmq_coupling_tests/templateDir/Main02.AD.sum create mode 100644 zmq_coupling_tests/templateDir/Main02.ED.sum create mode 100644 zmq_coupling_tests/templateDir/Main02.SrvD.sum create mode 100644 zmq_coupling_tests/templateDir/Main02.UA.sum create mode 100644 zmq_coupling_tests/templateDir/Main02.ech create mode 100644 zmq_coupling_tests/templateDir/Main02.fst create mode 100644 zmq_coupling_tests/templateDir/Main02.outb create mode 100644 zmq_coupling_tests/templateDir/Main02.sum create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_AeroDyn_blade.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn_Blade.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Blade.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_InflowWind.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat create mode 100644 zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ServoDyn.dat create mode 100644 zmq_coupling_tests/templateDir/README.md create mode 100644 zmq_coupling_tests/templateDir/uniform.hh create mode 100644 zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb create mode 100644 zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb create mode 100644 zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/Polar.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/ParametricExcel.xlsx create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToElastoDyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToOpenfast.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_pc_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_st_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawcstab2_cmb_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawcstab2_ind_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawcstab2_pwr_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$04 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$41 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.%04 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.%41 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$04 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$06 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$09 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$12 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$23 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$25 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$31 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$46 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$55 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$69 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$PJ create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.$55 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ExcelFile_OneSheet.xlsx create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14_arf.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14_arf_3col.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14_arf_Re.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin.outb create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin_ID4.outb create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV0.int create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV3.res create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.sel create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_pc.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_st.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_st.st create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_st_fpm.st create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2.pwr create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2_defl_u3000.ind create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2_fext_u3000.ind create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2_u3000.ind create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/MannBox_2x4x8.bin create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ParquetFile_test.parquet create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_1Grp2Chan_TimeTrack.tdms create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_2Grp2Chan.tdms create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_FAST.bts create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_NoTwr.bts create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_WithTwr.bts create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/VTKStructuredPointsPointData.vtk create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_40.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/spectral.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/__init__.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py create mode 100644 zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py diff --git a/README.rst b/README.rst index 3adbf786ac..b1da5a9f57 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,21 @@ cJSON ZMQ ``` +Main changes in this PR +---- + +- Added ZMQ connection to OpenFAST +- Modified input files to include ZMQ parameters +- Added Python routines and tests to interface with OpenFAST (to be moved to `openfast-toolbox`?) + +Updates +--- +- Added end of simulation message to ZMQ, so that receiver can know when the simulation is over and +detach from the ZMQ connection (close the socket). Currently, EOF signals are zeros, to keep float format. (`line 5649`) +- Added warning if user passes wind speed at runtime, as it will trigger Inflow Wind to use the steady model around the rotor disk (`line 3580`) +- Added variables `ZmqInDT` and `ZmqOutDT` to the input file, to set the time step for the ZMQ connection (`line 3586` - `line 3641`) + + ======== OpenFAST diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index 0ec0c8f5db..5ac610f47f 100644 --- a/modules/openfast-library/src/FAST_Registry.txt +++ b/modules/openfast-library/src/FAST_Registry.txt @@ -198,13 +198,12 @@ typedef ^ FAST_ParameterType LOGICAL ZmqOn - .false. typedef ^ FAST_ParameterType CHARACTER(1024) ZmqInAddress - - - "address for ZMQ REQ-REP protocol" - typedef ^ FAST_ParameterType IntKi ZmqInNbr - - - "number of ZMQ REQ-REP channels" - typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqInChannels {:} - - "address for ZMQ REQ-REP protocol" - - +typedef ^ FAST_ParameterType ReKi ZmqInDT - - - "time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation" typedef ^ FAST_ParameterType CHARACTER(1024) ZmqOutAddress - - - "address for ZMQ PUB-SUB protocol" - typedef ^ FAST_ParameterType IntKi ZmqOutNbr - - - "number of ZMQ PUB-SUB channels" - - typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqOutChannels {:} - - "variables to pass ZMQ PUB-SUB protocol" - +typedef ^ FAST_ParameterType ReKi ZmqOutDT - - - "time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation" typedef ^ FAST_ParameterType IntKi ZmqOutChnlsIdx {:} - - "indexes of channels to be broadcasted" - - typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqOutChannelsNames {:} - - "names for ZMQ PUB-SUB protocol" - typedef ^ FAST_ParameterType ReKi ZmqOutChannelsAry {:} - - "array to pass ZMQ PUB-SUB protocol" - # ............................................................................................................................ diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 3e7e5ead8e..af0a4a47ad 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -2009,8 +2009,13 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, if (p%ZmqOn) then ! 1. We open the Broadcast socket (or, if already open, we connect to it) - call zmq_pub_init(p%ZmqOutAddress) - call zmq_req_init(p%ZmqInAddress) + if (p%ZmqOutNbr > 0) then + call zmq_pub_init(p%ZmqOutAddress) + end if + + if (p%ZmqInNbr > 0) then + call zmq_req_init(p%ZmqInAddress) + end if ! 1. We open the REQ-REP socket (or, if already open, we connect to it) ! call zmq_pub_init(Turbine%p_FAST%ZmqInAddress) ! p%ZmqOutChannelsAry(1) = TurbID @@ -3571,6 +3576,32 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS RETURN end if + ! Warn user that if ZmqIn requests wind speed, OF will treat it as steady across the rotor, compromising wake models + if ( any( p%ZmqInChannels == 'Wind1VelX' ) .or. any( p%ZmqInChannels == 'Wind1VelY' ) .or. any( p%ZmqInChannels == 'Wind1VelZ' ) ) then + call WrScr("Warning: ZMQ input requests wind speed. OpenFAST will treat it as steady across the rotor, compromising wake meandering. This warning will not be shown again.") + end if + + ! Set ZMQ requests frequency + CALL ReadVar( UnIn, InputFile, Line, "ZmqInDT", "time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + CALL Conv2UC( Line ) + IF ( INDEX(Line, "DEFAULT" ) == 1 ) THEN + p%ZmqInDT = p%DT + ELSE + ! If it's not "default", read this variable; otherwise use the value in p%DT + READ( Line, *, IOSTAT=IOS) p%ZmqInDT + CALL CheckIOS ( IOS, InputFile, 'ZmqInDT', NumType, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + end if + ! ------------------------------------------- Broadcasting settings ---------------------------------------------------- CALL ReadVar( UnIn, InputFile, p%ZmqOutAddress, "ZmqOutAddress", "PUB-SUB localhost address ", ErrStat2, ErrMsg2, UnEc) @@ -3615,6 +3646,27 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS RETURN end if + ! Set ZMQ broadcasting frequency + CALL ReadVar( UnIn, InputFile, Line, "ZmqOutDT", "time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + CALL Conv2UC( Line ) + IF ( INDEX(Line, "DEFAULT" ) == 1 ) THEN + p%ZmqOutDT = p%DT + ELSE + ! If it's not "default", read this variable; otherwise use the value in p%DT + READ( Line, *, IOSTAT=IOS) p%ZmqOutDT + CALL CheckIOS ( IOS, InputFile, 'ZmqOutDT', NumType, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + end if + CALL AllocAry(p%ZmqOutChannelsAry, p%ZmqOutNbr + 2, "ZmqOutChannelsAry" , Errstat2, ErrMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if ( ErrStat >= AbortErrLev ) then @@ -5439,11 +5491,17 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, ! Inserting here call to ZMQ to retrieve and override routines' outputs - if (p_FAST%ZmqOn) then + if ( (p_FAST%ZmqOn) .and. (p_FAST%ZmqInNbr > 0) ) then + + ! Check if there's need to communicate with the ZMQ socket (the values will be enforced for next time step) to update values + + if (mod(t_global_next, p_FAST%ZmqInDT) == 0) then - ZmqInChannelsAry = 0.0_DbKi + ! TurbID = p_FAST%TurbID + ZmqInChannelsAry = 0.0_DbKi + call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) - call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) + end if ! otherwise we'll keep the values from the previous time step If (ZmqInChannelsAry(1) == TurbID) then @@ -5639,11 +5697,18 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_A ZmqOutChannelsAry = 0.0_ReKi !< Reset to zero all values prior to allocation and broadcasting ZmqOutChannelsAry(1) = TurbID - ZmqOutChannelsAry(2) = t - - do i = 1, p_FAST%ZmqOutNbr - ZmqOutChannelsAry(2 + i) = OutputAry(p_FAST%ZmqOutChnlsIdx(i) - 1) - end do + ZmqOutChannelsAry(2) = t + + if (t == p_FAST%TMax) then + ! If the simulation is finished, then broadcast zeros to signal EOF (as a float) + do i = 1, p_FAST%ZmqOutNbr + ZmqOutChannelsAry(2 + i) = 0.0_ReKi + end do + else + do i = 1, p_FAST%ZmqOutNbr + ZmqOutChannelsAry(2 + i) = OutputAry(p_FAST%ZmqOutChnlsIdx(i) - 1) + end do + end if call zmq_pub(ZmqOutChannelsAry, p_FAST%ZmqOutChannelsNames, p_FAST%ZmqOutNbr) diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 1befccc878..6db7839135 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -205,9 +205,11 @@ MODULE FAST_Types CHARACTER(1024) :: ZmqInAddress !< address for ZMQ REQ-REP protocol [-] INTEGER(IntKi) :: ZmqInNbr !< number of ZMQ REQ-REP channels [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqInChannels !< address for ZMQ REQ-REP protocol [-] + REAL(ReKi) :: ZmqInDT !< time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation [-] CHARACTER(1024) :: ZmqOutAddress !< address for ZMQ PUB-SUB protocol [-] INTEGER(IntKi) :: ZmqOutNbr !< number of ZMQ PUB-SUB channels [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannels !< variables to pass ZMQ PUB-SUB protocol [-] + REAL(ReKi) :: ZmqOutDT !< time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation [-] INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: ZmqOutChnlsIdx !< indexes of channels to be broadcasted [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannelsNames !< names for ZMQ PUB-SUB protocol [-] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannelsAry !< array to pass ZMQ PUB-SUB protocol [-] @@ -2258,6 +2260,7 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg END IF DstParamData%ZmqInChannels = SrcParamData%ZmqInChannels ENDIF + DstParamData%ZmqInDT = SrcParamData%ZmqInDT DstParamData%ZmqOutAddress = SrcParamData%ZmqOutAddress DstParamData%ZmqOutNbr = SrcParamData%ZmqOutNbr IF (ALLOCATED(SrcParamData%ZmqOutChannels)) THEN @@ -2272,6 +2275,7 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg END IF DstParamData%ZmqOutChannels = SrcParamData%ZmqOutChannels ENDIF + DstParamData%ZmqOutDT = SrcParamData%ZmqOutDT IF (ALLOCATED(SrcParamData%ZmqOutChnlsIdx)) THEN i1_l = LBOUND(SrcParamData%ZmqOutChnlsIdx,1) i1_u = UBOUND(SrcParamData%ZmqOutChnlsIdx,1) @@ -2519,6 +2523,7 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_BufSz = Int_BufSz + 2*1 ! ZmqInChannels upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%ZmqInChannels)*LEN(InData%ZmqInChannels) ! ZmqInChannels END IF + Re_BufSz = Re_BufSz + 1 ! ZmqInDT Int_BufSz = Int_BufSz + 1*LEN(InData%ZmqOutAddress) ! ZmqOutAddress Int_BufSz = Int_BufSz + 1 ! ZmqOutNbr Int_BufSz = Int_BufSz + 1 ! ZmqOutChannels allocated yes/no @@ -2526,6 +2531,7 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_BufSz = Int_BufSz + 2*1 ! ZmqOutChannels upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%ZmqOutChannels)*LEN(InData%ZmqOutChannels) ! ZmqOutChannels END IF + Re_BufSz = Re_BufSz + 1 ! ZmqOutDT Int_BufSz = Int_BufSz + 1 ! ZmqOutChnlsIdx allocated yes/no IF ( ALLOCATED(InData%ZmqOutChnlsIdx) ) THEN Int_BufSz = Int_BufSz + 2*1 ! ZmqOutChnlsIdx upper/lower bounds for each dimension @@ -2873,6 +2879,8 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, END DO ! I END DO END IF + ReKiBuf(Re_Xferred) = InData%ZmqInDT + Re_Xferred = Re_Xferred + 1 DO I = 1, LEN(InData%ZmqOutAddress) IntKiBuf(Int_Xferred) = ICHAR(InData%ZmqOutAddress(I:I), IntKi) Int_Xferred = Int_Xferred + 1 @@ -2896,6 +2904,8 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, END DO ! I END DO END IF + ReKiBuf(Re_Xferred) = InData%ZmqOutDT + Re_Xferred = Re_Xferred + 1 IF ( .NOT. ALLOCATED(InData%ZmqOutChnlsIdx) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -3318,6 +3328,8 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END DO ! I END DO END IF + OutData%ZmqInDT = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 DO I = 1, LEN(OutData%ZmqOutAddress) OutData%ZmqOutAddress(I:I) = CHAR(IntKiBuf(Int_Xferred)) Int_Xferred = Int_Xferred + 1 @@ -3344,6 +3356,8 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END DO ! I END DO END IF + OutData%ZmqOutDT = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqOutChnlsIdx not allocated Int_Xferred = Int_Xferred + 1 ELSE diff --git a/zmq_coupling_tests/ex01_sub.py b/zmq_coupling_tests/ex01_sub.py new file mode 100644 index 0000000000..9ea13ea577 --- /dev/null +++ b/zmq_coupling_tests/ex01_sub.py @@ -0,0 +1,38 @@ +''' +Example 1: Simple subscriber to FAST + +This example shows how to create a simple subscriber that connects to a FAST to +get results at runtime. +''' +from zmq_python_toolbox.real_fast_interactor import RFInteractor +import os +import multiprocessing as mp +import concurrent.futures + +dir = os.path.dirname(__file__) +fstdir = os.path.join(dir, 'templateDir') + + +# Create a subscriber +sub = RFInteractor(ZmqInAddress=None, ZmqOutAddress="tcp://127.0.0.1:5557", verbose=True) + + +def run_openfast(): + return os.system('openfast ./templateDir/Main02.fst') + +def run_sub(): + return sub.fast_sub(25) + +def run_in_parallel(): + with concurrent.futures.ProcessPoolExecutor() as executor: + p1 = executor.submit(run_openfast) + p2 = executor.submit(run_sub) + print(p1.result()) + print(p2.result()) + +if __name__ == '__main__': + # create two processes, one for zmq sub and other for openfast + run_in_parallel() + + + \ No newline at end of file diff --git a/zmq_coupling_tests/templateDir/AeroData/Cylinder1.dat b/zmq_coupling_tests/templateDir/AeroData/Cylinder1.dat new file mode 100644 index 0000000000..4ff6d1311f --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/Cylinder1.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.50 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.50 Minimum CD value +-180.00 0.000 0.5000 0.000 + 0.00 0.000 0.5000 0.000 + 180.00 0.000 0.5000 0.000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/Cylinder2.dat b/zmq_coupling_tests/templateDir/AeroData/Cylinder2.dat new file mode 100644 index 0000000000..29f643ca65 --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/Cylinder2.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.35 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.35 Minimum CD value +-180.00 0.000 0.3500 0.000 + 0.00 0.000 0.3500 0.000 + 180.00 0.000 0.3500 0.000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/DU21_A17.dat b/zmq_coupling_tests/templateDir/AeroData/DU21_A17.dat new file mode 100644 index 0000000000..52cc6d3ff9 --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/DU21_A17.dat @@ -0,0 +1,158 @@ +DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -5.0609 Zero Cn angle of attack (deg) + 6.2047 Cn slope for zero lift (dimensionless) + 1.4144 Cn extrapolated to value at positive stall angle of attack + -0.5324 Cn at stall value for negative angle of attack + -1.50 Angle of attack for minimum CD (deg) + 0.0057 Minimum CD value +-180.00 0.000 0.0185 0.0000 +-175.00 0.394 0.0332 0.1978 +-170.00 0.788 0.0945 0.3963 +-160.00 0.670 0.2809 0.2738 +-155.00 0.749 0.3932 0.3118 +-150.00 0.797 0.5112 0.3413 +-145.00 0.818 0.6309 0.3636 +-140.00 0.813 0.7485 0.3799 +-135.00 0.786 0.8612 0.3911 +-130.00 0.739 0.9665 0.3980 +-125.00 0.675 1.0625 0.4012 +-120.00 0.596 1.1476 0.4014 +-115.00 0.505 1.2206 0.3990 +-110.00 0.403 1.2805 0.3943 +-105.00 0.294 1.3265 0.3878 +-100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/DU25_A17.dat b/zmq_coupling_tests/templateDir/AeroData/DU25_A17.dat new file mode 100644 index 0000000000..3c24e77f5f --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/DU25_A17.dat @@ -0,0 +1,157 @@ +DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.2422 Zero Cn angle of attack (deg) + 6.4462 Cn slope for zero lift (dimensionless) + 1.4336 Cn extrapolated to value at positive stall angle of attack + -0.6873 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0065 Minimum CD value +-180.00 0.000 0.0202 0.0000 +-175.00 0.368 0.0324 0.1845 +-170.00 0.735 0.0943 0.3701 +-160.00 0.695 0.2848 0.2679 +-155.00 0.777 0.4001 0.3046 +-150.00 0.828 0.5215 0.3329 +-145.00 0.850 0.6447 0.3540 +-140.00 0.846 0.7660 0.3693 +-135.00 0.818 0.8823 0.3794 +-130.00 0.771 0.9911 0.3854 +-125.00 0.705 1.0905 0.3878 +-120.00 0.624 1.1787 0.3872 +-115.00 0.530 1.2545 0.3841 +-110.00 0.426 1.3168 0.3788 +-105.00 0.314 1.3650 0.3716 +-100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/DU30_A17.dat b/zmq_coupling_tests/templateDir/AeroData/DU30_A17.dat new file mode 100644 index 0000000000..23ecb3e9a3 --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/DU30_A17.dat @@ -0,0 +1,159 @@ +DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -2.3220 Zero Cn angle of attack (deg) + 7.3326 Cn slope for zero lift (dimensionless) + 1.4490 Cn extrapolated to value at positive stall angle of attack + -0.6138 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0087 Minimum CD value +-180.00 0.000 0.0267 0.0000 +-175.00 0.274 0.0370 0.1379 +-170.00 0.547 0.0968 0.2778 +-160.00 0.685 0.2876 0.2740 +-155.00 0.766 0.4025 0.3118 +-150.00 0.816 0.5232 0.3411 +-145.00 0.836 0.6454 0.3631 +-140.00 0.832 0.7656 0.3791 +-135.00 0.804 0.8807 0.3899 +-130.00 0.756 0.9882 0.3965 +-125.00 0.690 1.0861 0.3994 +-120.00 0.609 1.1730 0.3992 +-115.00 0.515 1.2474 0.3964 +-110.00 0.411 1.3084 0.3915 +-105.00 0.300 1.3552 0.3846 +-100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/DU35_A17.dat b/zmq_coupling_tests/templateDir/AeroData/DU35_A17.dat new file mode 100644 index 0000000000..9e962a1e63 --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/DU35_A17.dat @@ -0,0 +1,151 @@ +DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 11.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.8330 Zero Cn angle of attack (deg) + 7.1838 Cn slope for zero lift (dimensionless) + 1.6717 Cn extrapolated to value at positive stall angle of attack + -0.3075 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0094 Minimum CD value +-180.00 0.000 0.0407 0.0000 +-175.00 0.223 0.0507 0.0937 +-170.00 0.405 0.1055 0.1702 +-160.00 0.658 0.2982 0.2819 +-155.00 0.733 0.4121 0.3213 +-150.00 0.778 0.5308 0.3520 +-145.00 0.795 0.6503 0.3754 +-140.00 0.787 0.7672 0.3926 +-135.00 0.757 0.8785 0.4046 +-130.00 0.708 0.9819 0.4121 +-125.00 0.641 1.0756 0.4160 +-120.00 0.560 1.1580 0.4167 +-115.00 0.467 1.2280 0.4146 +-110.00 0.365 1.2847 0.4104 +-105.00 0.255 1.3274 0.4041 +-100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/DU40_A17.dat b/zmq_coupling_tests/templateDir/AeroData/DU40_A17.dat new file mode 100644 index 0000000000..08a2d28261 --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/DU40_A17.dat @@ -0,0 +1,152 @@ +DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.3430 Zero Cn angle of attack (deg) + 7.4888 Cn slope for zero lift (dimensionless) + 1.3519 Cn extrapolated to value at positive stall angle of attack + -0.3226 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0113 Minimum CD value +-180.00 0.000 0.0602 0.0000 +-175.00 0.218 0.0699 0.0934 +-170.00 0.397 0.1107 0.1697 +-160.00 0.642 0.3045 0.2813 +-155.00 0.715 0.4179 0.3208 +-150.00 0.757 0.5355 0.3516 +-145.00 0.772 0.6535 0.3752 +-140.00 0.762 0.7685 0.3926 +-135.00 0.731 0.8777 0.4048 +-130.00 0.680 0.9788 0.4126 +-125.00 0.613 1.0700 0.4166 +-120.00 0.532 1.1499 0.4176 +-115.00 0.439 1.2174 0.4158 +-110.00 0.337 1.2716 0.4117 +-105.00 0.228 1.3118 0.4057 +-100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 + + diff --git a/zmq_coupling_tests/templateDir/AeroData/NACA64_A17.dat b/zmq_coupling_tests/templateDir/AeroData/NACA64_A17.dat new file mode 100644 index 0000000000..3db1887a38 --- /dev/null +++ b/zmq_coupling_tests/templateDir/AeroData/NACA64_A17.dat @@ -0,0 +1,143 @@ +NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.4320 Zero Cn angle of attack (deg) + 6.0031 Cn slope for zero lift (dimensionless) + 1.4073 Cn extrapolated to value at positive stall angle of attack + -0.7945 Cn at stall value for negative angle of attack + -1.00 Angle of attack for minimum CD (deg) + 0.0052 Minimum CD value +-180.00 0.000 0.0198 0.0000 +-175.00 0.374 0.0341 0.1880 +-170.00 0.749 0.0955 0.3770 +-160.00 0.659 0.2807 0.2747 +-155.00 0.736 0.3919 0.3130 +-150.00 0.783 0.5086 0.3428 +-145.00 0.803 0.6267 0.3654 +-140.00 0.798 0.7427 0.3820 +-135.00 0.771 0.8537 0.3935 +-130.00 0.724 0.9574 0.4007 +-125.00 0.660 1.0519 0.4042 +-120.00 0.581 1.1355 0.4047 +-115.00 0.491 1.2070 0.4025 +-110.00 0.390 1.2656 0.3981 +-105.00 0.282 1.3104 0.3918 +-100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 + + diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder1.dat b/zmq_coupling_tests/templateDir/Airfoils/Cylinder1.dat new file mode 100644 index 0000000000..393e5d8721 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/Cylinder1.dat @@ -0,0 +1,59 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.50 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder1_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.5 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.5000 0.0 + 0.00 0.000 0.5000 0.0 + 180.00 0.000 0.5000 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder1_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/Cylinder1_coords.txt new file mode 100644 index 0000000000..3c8ec3d3b4 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/Cylinder1_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.5 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder2.dat b/zmq_coupling_tests/templateDir/Airfoils/Cylinder2.dat new file mode 100644 index 0000000000..5294db4fdb --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/Cylinder2.dat @@ -0,0 +1,60 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.35 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder2_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.35 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.3500 0.0 + 0.00 0.000 0.3500 0.0 + 180.00 0.000 0.3500 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder2_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/Cylinder2_coords.txt new file mode 100644 index 0000000000..f95e693e67 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/Cylinder2_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.41667 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU21_A17.dat b/zmq_coupling_tests/templateDir/Airfoils/DU21_A17.dat new file mode 100644 index 0000000000..7d55bb9ac2 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU21_A17.dat @@ -0,0 +1,196 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU21_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4144 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.5324 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.121 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 142 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0185 0.0000 + -175.00 0.394 0.0332 0.1978 + -170.00 0.788 0.0945 0.3963 + -160.00 0.670 0.2809 0.2738 + -155.00 0.749 0.3932 0.3118 + -150.00 0.797 0.5112 0.3413 + -145.00 0.818 0.6309 0.3636 + -140.00 0.813 0.7485 0.3799 + -135.00 0.786 0.8612 0.3911 + -130.00 0.739 0.9665 0.3980 + -125.00 0.675 1.0625 0.4012 + -120.00 0.596 1.1476 0.4014 + -115.00 0.505 1.2206 0.3990 + -110.00 0.403 1.2805 0.3943 + -105.00 0.294 1.3265 0.3878 + -100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU21_A17_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/DU21_A17_coords.txt new file mode 100644 index 0000000000..3728b88baa --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU21_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 93-W-210.lm +! x/c y/c +1.00000 0.00194 +0.99660 0.00304 +0.99314 0.00411 +0.98961 0.00516 +0.98601 0.00618 +0.98235 0.00720 +0.97863 0.00823 +0.97484 0.00927 +0.97098 0.01033 +0.96706 0.01139 +0.96307 0.01246 +0.95902 0.01354 +0.95490 0.01463 +0.95072 0.01573 +0.94647 0.01684 +0.94216 0.01797 +0.93778 0.01911 +0.93333 0.02026 +0.92882 0.02142 +0.92425 0.02260 +0.91961 0.02379 +0.91490 0.02499 +0.91013 0.02621 +0.90529 0.02744 +0.90039 0.02869 +0.89542 0.02995 +0.89039 0.03122 +0.88529 0.03250 +0.88013 0.03379 +0.87490 0.03510 +0.86961 0.03643 +0.86425 0.03776 +0.85882 0.03912 +0.85333 0.04048 +0.84778 0.04186 +0.84216 0.04326 +0.83647 0.04466 +0.83072 0.04608 +0.82490 0.04752 +0.81902 0.04896 +0.81307 0.05041 +0.80706 0.05188 +0.80098 0.05336 +0.79484 0.05484 +0.78863 0.05634 +0.78235 0.05784 +0.77601 0.05936 +0.76961 0.06088 +0.76314 0.06242 +0.75660 0.06396 +0.75000 0.06550 +0.74333 0.06706 +0.73667 0.06860 +0.73000 0.07014 +0.72333 0.07167 +0.71667 0.07320 +0.71000 0.07472 +0.70333 0.07624 +0.69667 0.07774 +0.69000 0.07924 +0.68333 0.08072 +0.67667 0.08220 +0.67000 0.08366 +0.66333 0.08511 +0.65667 0.08655 +0.65000 0.08798 +0.64333 0.08940 +0.63667 0.09080 +0.63000 0.09220 +0.62333 0.09357 +0.61667 0.09492 +0.61000 0.09626 +0.60333 0.09759 +0.59667 0.09889 +0.59000 0.10017 +0.58333 0.10143 +0.57667 0.10267 +0.57000 0.10389 +0.56333 0.10509 +0.55667 0.10627 +0.55000 0.10742 +0.54333 0.10854 +0.53667 0.10964 +0.53000 0.11071 +0.52333 0.11175 +0.51667 0.11277 +0.51000 0.11375 +0.50333 0.11470 +0.49667 0.11562 +0.49000 0.11650 +0.48333 0.11734 +0.47667 0.11813 +0.47000 0.11889 +0.46333 0.11960 +0.45667 0.12027 +0.45000 0.12089 +0.44333 0.12147 +0.43667 0.12200 +0.43000 0.12249 +0.42333 0.12292 +0.41667 0.12331 +0.41000 0.12365 +0.40333 0.12394 +0.39667 0.12418 +0.39000 0.12436 +0.38333 0.12449 +0.37667 0.12457 +0.37000 0.12459 +0.36333 0.12455 +0.35667 0.12446 +0.35000 0.12431 +0.34333 0.12411 +0.33667 0.12385 +0.33000 0.12353 +0.32333 0.12317 +0.31667 0.12275 +0.31000 0.12228 +0.30333 0.12175 +0.29667 0.12117 +0.29000 0.12053 +0.28333 0.11984 +0.27667 0.11910 +0.27000 0.11829 +0.26333 0.11744 +0.25667 0.11653 +0.25000 0.11557 +0.24342 0.11456 +0.23693 0.11351 +0.23053 0.11243 +0.22421 0.11130 +0.21798 0.11015 +0.21184 0.10896 +0.20579 0.10773 +0.19982 0.10648 +0.19395 0.10520 +0.18816 0.10389 +0.18245 0.10255 +0.17684 0.10119 +0.17131 0.09980 +0.16587 0.09839 +0.16052 0.09696 +0.15526 0.09550 +0.15008 0.09403 +0.14499 0.09254 +0.13999 0.09103 +0.13508 0.08950 +0.13026 0.08796 +0.12552 0.08641 +0.12087 0.08483 +0.11631 0.08325 +0.11183 0.08165 +0.10745 0.08004 +0.10315 0.07843 +0.09893 0.07679 +0.09481 0.07516 +0.09077 0.07351 +0.08683 0.07186 +0.08297 0.07021 +0.07919 0.06854 +0.07551 0.06687 +0.07191 0.06520 +0.06840 0.06353 +0.06498 0.06185 +0.06164 0.06017 +0.05840 0.05850 +0.05524 0.05682 +0.05217 0.05515 +0.04918 0.05348 +0.04629 0.05181 +0.04348 0.05015 +0.04076 0.04849 +0.03812 0.04683 +0.03558 0.04519 +0.03312 0.04356 +0.03075 0.04194 +0.02847 0.04033 +0.02627 0.03874 +0.02417 0.03716 +0.02215 0.03560 +0.02022 0.03404 +0.01837 0.03249 +0.01662 0.03094 +0.01495 0.02940 +0.01337 0.02785 +0.01187 0.02630 +0.01047 0.02476 +0.00915 0.02322 +0.00792 0.02169 +0.00678 0.02017 +0.00572 0.01864 +0.00476 0.01713 +0.00388 0.01562 +0.00309 0.01410 +0.00238 0.01253 +0.00177 0.01094 +0.00124 0.00923 +0.00080 0.00740 +0.00044 0.00537 +0.00018 0.00333 +0.00000 0.00000 +0.00018 -0.00292 +0.00044 -0.00443 +0.00080 -0.00589 +0.00124 -0.00727 +0.00177 -0.00864 +0.00238 -0.00998 +0.00309 -0.01134 +0.00388 -0.01266 +0.00476 -0.01397 +0.00572 -0.01526 +0.00678 -0.01656 +0.00792 -0.01785 +0.00915 -0.01914 +0.01047 -0.02044 +0.01187 -0.02174 +0.01337 -0.02306 +0.01495 -0.02438 +0.01662 -0.02571 +0.01837 -0.02705 +0.02022 -0.02841 +0.02215 -0.02976 +0.02417 -0.03112 +0.02627 -0.03248 +0.02847 -0.03384 +0.03075 -0.03520 +0.03312 -0.03655 +0.03558 -0.03789 +0.03812 -0.03923 +0.04076 -0.04056 +0.04348 -0.04188 +0.04629 -0.04319 +0.04918 -0.04449 +0.05217 -0.04579 +0.05524 -0.04708 +0.05840 -0.04836 +0.06164 -0.04963 +0.06498 -0.05089 +0.06840 -0.05215 +0.07191 -0.05340 +0.07551 -0.05464 +0.07919 -0.05587 +0.08297 -0.05709 +0.08683 -0.05831 +0.09077 -0.05951 +0.09481 -0.06071 +0.09893 -0.06189 +0.10315 -0.06306 +0.10745 -0.06422 +0.11183 -0.06536 +0.11631 -0.06648 +0.12087 -0.06759 +0.12552 -0.06868 +0.13026 -0.06975 +0.13508 -0.07079 +0.13999 -0.07182 +0.14499 -0.07282 +0.15008 -0.07380 +0.15526 -0.07476 +0.16052 -0.07568 +0.16587 -0.07658 +0.17131 -0.07746 +0.17684 -0.07830 +0.18245 -0.07911 +0.18816 -0.07989 +0.19395 -0.08063 +0.19982 -0.08134 +0.20579 -0.08201 +0.21184 -0.08264 +0.21798 -0.08324 +0.22421 -0.08380 +0.23053 -0.08432 +0.23693 -0.08479 +0.24342 -0.08523 +0.25000 -0.08561 +0.25667 -0.08595 +0.26333 -0.08624 +0.27000 -0.08648 +0.27667 -0.08667 +0.28333 -0.08680 +0.29000 -0.08689 +0.29667 -0.08693 +0.30333 -0.08692 +0.31000 -0.08686 +0.31667 -0.08676 +0.32333 -0.08660 +0.33000 -0.08640 +0.33667 -0.08615 +0.34333 -0.08586 +0.35000 -0.08553 +0.35667 -0.08515 +0.36333 -0.08473 +0.37000 -0.08427 +0.37667 -0.08376 +0.38333 -0.08322 +0.39000 -0.08263 +0.39667 -0.08200 +0.40333 -0.08134 +0.41000 -0.08062 +0.41667 -0.07987 +0.42333 -0.07908 +0.43000 -0.07824 +0.43667 -0.07736 +0.44333 -0.07644 +0.45000 -0.07548 +0.45667 -0.07448 +0.46333 -0.07343 +0.47000 -0.07235 +0.47667 -0.07122 +0.48333 -0.07006 +0.49000 -0.06886 +0.49667 -0.06763 +0.50333 -0.06636 +0.51000 -0.06506 +0.51667 -0.06373 +0.52333 -0.06237 +0.53000 -0.06097 +0.53667 -0.05955 +0.54333 -0.05810 +0.55000 -0.05663 +0.55667 -0.05513 +0.56333 -0.05361 +0.57000 -0.05207 +0.57667 -0.05050 +0.58333 -0.04892 +0.59000 -0.04732 +0.59667 -0.04571 +0.60333 -0.04408 +0.61000 -0.04243 +0.61667 -0.04078 +0.62333 -0.03911 +0.63000 -0.03744 +0.63667 -0.03576 +0.64333 -0.03409 +0.65000 -0.03241 +0.65667 -0.03073 +0.66333 -0.02906 +0.67000 -0.02740 +0.67667 -0.02574 +0.68333 -0.02411 +0.69000 -0.02248 +0.69667 -0.02088 +0.70333 -0.01930 +0.71000 -0.01774 +0.71667 -0.01620 +0.72333 -0.01470 +0.73000 -0.01323 +0.73667 -0.01179 +0.74333 -0.01039 +0.75000 -0.00903 +0.75660 -0.00772 +0.76314 -0.00647 +0.76961 -0.00528 +0.77601 -0.00416 +0.78235 -0.00308 +0.78863 -0.00207 +0.79484 -0.00112 +0.80098 -0.00023 +0.80706 0.00060 +0.81307 0.00136 +0.81902 0.00207 +0.82490 0.00273 +0.83072 0.00333 +0.83647 0.00387 +0.84216 0.00435 +0.84778 0.00479 +0.85333 0.00517 +0.85882 0.00550 +0.86425 0.00578 +0.86961 0.00601 +0.87490 0.00620 +0.88013 0.00633 +0.88529 0.00643 +0.89039 0.00648 +0.89542 0.00649 +0.90039 0.00646 +0.90529 0.00639 +0.91013 0.00628 +0.91490 0.00613 +0.91961 0.00595 +0.92425 0.00574 +0.92882 0.00550 +0.93333 0.00523 +0.93778 0.00494 +0.94216 0.00462 +0.94647 0.00428 +0.95072 0.00392 +0.95490 0.00355 +0.95902 0.00315 +0.96307 0.00275 +0.96706 0.00233 +0.97098 0.00189 +0.97484 0.00145 +0.97863 0.00099 +0.98235 0.00053 +0.98601 0.00005 +0.98961 -0.00044 +0.99314 -0.00094 +0.99660 -0.00143 +1.00000 -0.00194 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU25_A17.dat b/zmq_coupling_tests/templateDir/Airfoils/DU25_A17.dat new file mode 100644 index 0000000000..4949fcf7e5 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU25_A17.dat @@ -0,0 +1,194 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU25_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4336 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6873 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.12 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 140 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0202 0.0000 + -175.00 0.368 0.0324 0.1845 + -170.00 0.735 0.0943 0.3701 + -160.00 0.695 0.2848 0.2679 + -155.00 0.777 0.4001 0.3046 + -150.00 0.828 0.5215 0.3329 + -145.00 0.850 0.6447 0.3540 + -140.00 0.846 0.7660 0.3693 + -135.00 0.818 0.8823 0.3794 + -130.00 0.771 0.9911 0.3854 + -125.00 0.705 1.0905 0.3878 + -120.00 0.624 1.1787 0.3872 + -115.00 0.530 1.2545 0.3841 + -110.00 0.426 1.3168 0.3788 + -105.00 0.314 1.3650 0.3716 + -100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU25_A17_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/DU25_A17_coords.txt new file mode 100644 index 0000000000..8655cdc1d7 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU25_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 91-W2-250.lm +! x/c y/c +1.00000 0.00213 +0.99660 0.00314 +0.99314 0.00414 +0.98961 0.00515 +0.98601 0.00617 +0.98235 0.00720 +0.97863 0.00822 +0.97484 0.00926 +0.97098 0.01030 +0.96706 0.01135 +0.96307 0.01240 +0.95902 0.01347 +0.95490 0.01454 +0.95072 0.01562 +0.94647 0.01672 +0.94216 0.01783 +0.93778 0.01895 +0.93333 0.02009 +0.92882 0.02125 +0.92425 0.02241 +0.91961 0.02359 +0.91490 0.02479 +0.91013 0.02600 +0.90529 0.02722 +0.90039 0.02846 +0.89542 0.02972 +0.89039 0.03099 +0.88529 0.03227 +0.88013 0.03357 +0.87490 0.03489 +0.86961 0.03622 +0.86425 0.03756 +0.85882 0.03892 +0.85333 0.04029 +0.84778 0.04167 +0.84216 0.04306 +0.83647 0.04447 +0.83072 0.04589 +0.82490 0.04732 +0.81902 0.04877 +0.81307 0.05023 +0.80706 0.05170 +0.80098 0.05319 +0.79484 0.05468 +0.78863 0.05619 +0.78235 0.05771 +0.77601 0.05925 +0.76961 0.06078 +0.76314 0.06233 +0.75660 0.06388 +0.75000 0.06544 +0.74333 0.06701 +0.73667 0.06857 +0.73000 0.07013 +0.72333 0.07168 +0.71667 0.07322 +0.71000 0.07475 +0.70333 0.07628 +0.69667 0.07779 +0.69000 0.07930 +0.68333 0.08080 +0.67667 0.08228 +0.67000 0.08375 +0.66333 0.08522 +0.65667 0.08667 +0.65000 0.08810 +0.64333 0.08953 +0.63667 0.09093 +0.63000 0.09233 +0.62333 0.09371 +0.61667 0.09507 +0.61000 0.09642 +0.60333 0.09775 +0.59667 0.09906 +0.59000 0.10035 +0.58333 0.10163 +0.57667 0.10289 +0.57000 0.10413 +0.56333 0.10535 +0.55667 0.10655 +0.55000 0.10773 +0.54333 0.10888 +0.53667 0.11001 +0.53000 0.11112 +0.52333 0.11221 +0.51667 0.11327 +0.51000 0.11430 +0.50333 0.11530 +0.49667 0.11628 +0.49000 0.11723 +0.48333 0.11815 +0.47667 0.11904 +0.47000 0.11991 +0.46333 0.12074 +0.45667 0.12154 +0.45000 0.12230 +0.44333 0.12303 +0.43667 0.12372 +0.43000 0.12436 +0.42333 0.12497 +0.41667 0.12554 +0.41000 0.12606 +0.40333 0.12655 +0.39667 0.12699 +0.39000 0.12738 +0.38333 0.12773 +0.37667 0.12803 +0.37000 0.12828 +0.36333 0.12846 +0.35667 0.12858 +0.35000 0.12864 +0.34333 0.12862 +0.33667 0.12853 +0.33000 0.12837 +0.32333 0.12815 +0.31667 0.12785 +0.31000 0.12749 +0.30333 0.12705 +0.29667 0.12656 +0.29000 0.12600 +0.28333 0.12538 +0.27667 0.12469 +0.27000 0.12394 +0.26333 0.12312 +0.25667 0.12224 +0.25000 0.12130 +0.24342 0.12030 +0.23693 0.11926 +0.23053 0.11817 +0.22421 0.11704 +0.21798 0.11586 +0.21184 0.11465 +0.20579 0.11340 +0.19982 0.11210 +0.19395 0.11078 +0.18816 0.10942 +0.18245 0.10803 +0.17684 0.10660 +0.17131 0.10515 +0.16587 0.10367 +0.16052 0.10217 +0.15526 0.10064 +0.15008 0.09909 +0.14499 0.09751 +0.13999 0.09591 +0.13508 0.09430 +0.13026 0.09266 +0.12552 0.09101 +0.12087 0.08934 +0.11631 0.08765 +0.11183 0.08595 +0.10745 0.08424 +0.10315 0.08251 +0.09893 0.08076 +0.09481 0.07902 +0.09077 0.07725 +0.08683 0.07549 +0.08297 0.07371 +0.07919 0.07192 +0.07551 0.07013 +0.07191 0.06834 +0.06840 0.06654 +0.06498 0.06474 +0.06164 0.06293 +0.05840 0.06113 +0.05524 0.05933 +0.05217 0.05753 +0.04918 0.05573 +0.04629 0.05393 +0.04348 0.05214 +0.04076 0.05035 +0.03812 0.04856 +0.03558 0.04679 +0.03312 0.04502 +0.03075 0.04326 +0.02847 0.04151 +0.02627 0.03976 +0.02417 0.03804 +0.02215 0.03632 +0.02022 0.03462 +0.01837 0.03293 +0.01662 0.03126 +0.01495 0.02961 +0.01337 0.02797 +0.01187 0.02635 +0.01047 0.02475 +0.00915 0.02317 +0.00792 0.02161 +0.00678 0.02007 +0.00572 0.01855 +0.00476 0.01706 +0.00388 0.01557 +0.00309 0.01409 +0.00238 0.01261 +0.00177 0.01110 +0.00124 0.00945 +0.00080 0.00766 +0.00044 0.00568 +0.00018 0.00363 +0.00000 0.00000 +0.00018 -0.00360 +0.00044 -0.00572 +0.00080 -0.00778 +0.00124 -0.00974 +0.00177 -0.01169 +0.00238 -0.01359 +0.00309 -0.01549 +0.00388 -0.01736 +0.00476 -0.01921 +0.00572 -0.02104 +0.00678 -0.02288 +0.00792 -0.02470 +0.00915 -0.02652 +0.01047 -0.02835 +0.01187 -0.03019 +0.01337 -0.03205 +0.01495 -0.03392 +0.01662 -0.03581 +0.01837 -0.03770 +0.02022 -0.03961 +0.02215 -0.04153 +0.02417 -0.04345 +0.02627 -0.04537 +0.02847 -0.04730 +0.03075 -0.04921 +0.03312 -0.05112 +0.03558 -0.05302 +0.03812 -0.05491 +0.04076 -0.05679 +0.04348 -0.05865 +0.04629 -0.06051 +0.04918 -0.06234 +0.05217 -0.06418 +0.05524 -0.06600 +0.05840 -0.06780 +0.06164 -0.06960 +0.06498 -0.07139 +0.06840 -0.07316 +0.07191 -0.07492 +0.07551 -0.07668 +0.07919 -0.07842 +0.08297 -0.08015 +0.08683 -0.08186 +0.09077 -0.08356 +0.09481 -0.08525 +0.09893 -0.08692 +0.10315 -0.08858 +0.10745 -0.09022 +0.11183 -0.09182 +0.11631 -0.09342 +0.12087 -0.09498 +0.12552 -0.09652 +0.13026 -0.09803 +0.13508 -0.09951 +0.13999 -0.10095 +0.14499 -0.10237 +0.15008 -0.10376 +0.15526 -0.10511 +0.16052 -0.10642 +0.16587 -0.10769 +0.17131 -0.10892 +0.17684 -0.11011 +0.18245 -0.11126 +0.18816 -0.11236 +0.19395 -0.11341 +0.19982 -0.11441 +0.20579 -0.11536 +0.21184 -0.11626 +0.21798 -0.11710 +0.22421 -0.11789 +0.23053 -0.11862 +0.23693 -0.11929 +0.24342 -0.11990 +0.25000 -0.12045 +0.25667 -0.12094 +0.26333 -0.12135 +0.27000 -0.12168 +0.27667 -0.12195 +0.28333 -0.12214 +0.29000 -0.12227 +0.29667 -0.12232 +0.30333 -0.12231 +0.31000 -0.12222 +0.31667 -0.12207 +0.32333 -0.12186 +0.33000 -0.12157 +0.33667 -0.12123 +0.34333 -0.12082 +0.35000 -0.12034 +0.35667 -0.11981 +0.36333 -0.11922 +0.37000 -0.11857 +0.37667 -0.11785 +0.38333 -0.11708 +0.39000 -0.11625 +0.39667 -0.11537 +0.40333 -0.11442 +0.41000 -0.11342 +0.41667 -0.11236 +0.42333 -0.11124 +0.43000 -0.11006 +0.43667 -0.10881 +0.44333 -0.10752 +0.45000 -0.10615 +0.45667 -0.10474 +0.46333 -0.10326 +0.47000 -0.10173 +0.47667 -0.10015 +0.48333 -0.09851 +0.49000 -0.09682 +0.49667 -0.09508 +0.50333 -0.09329 +0.51000 -0.09145 +0.51667 -0.08956 +0.52333 -0.08764 +0.53000 -0.08567 +0.53667 -0.08366 +0.54333 -0.08162 +0.55000 -0.07953 +0.55667 -0.07742 +0.56333 -0.07527 +0.57000 -0.07309 +0.57667 -0.07088 +0.58333 -0.06865 +0.59000 -0.06639 +0.59667 -0.06410 +0.60333 -0.06180 +0.61000 -0.05948 +0.61667 -0.05713 +0.62333 -0.05478 +0.63000 -0.05242 +0.63667 -0.05005 +0.64333 -0.04767 +0.65000 -0.04530 +0.65667 -0.04293 +0.66333 -0.04057 +0.67000 -0.03822 +0.67667 -0.03588 +0.68333 -0.03357 +0.69000 -0.03127 +0.69667 -0.02900 +0.70333 -0.02676 +0.71000 -0.02456 +0.71667 -0.02238 +0.72333 -0.02026 +0.73000 -0.01817 +0.73667 -0.01614 +0.74333 -0.01416 +0.75000 -0.01223 +0.75660 -0.01038 +0.76314 -0.00861 +0.76961 -0.00692 +0.77601 -0.00532 +0.78235 -0.00381 +0.78863 -0.00238 +0.79484 -0.00103 +0.80098 0.00023 +0.80706 0.00141 +0.81307 0.00250 +0.81902 0.00351 +0.82490 0.00444 +0.83072 0.00529 +0.83647 0.00606 +0.84216 0.00675 +0.84778 0.00737 +0.85333 0.00791 +0.85882 0.00839 +0.86425 0.00879 +0.86961 0.00913 +0.87490 0.00940 +0.88013 0.00961 +0.88529 0.00975 +0.89039 0.00983 +0.89542 0.00985 +0.90039 0.00982 +0.90529 0.00972 +0.91013 0.00957 +0.91490 0.00936 +0.91961 0.00910 +0.92425 0.00880 +0.92882 0.00844 +0.93333 0.00804 +0.93778 0.00760 +0.94216 0.00712 +0.94647 0.00660 +0.95072 0.00606 +0.95490 0.00549 +0.95902 0.00490 +0.96307 0.00429 +0.96706 0.00367 +0.97098 0.00303 +0.97484 0.00238 +0.97863 0.00173 +0.98235 0.00108 +0.98601 0.00043 +0.98961 -0.00022 +0.99314 -0.00086 +0.99660 -0.00149 +1.00000 -0.00213 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU30_A17.dat b/zmq_coupling_tests/templateDir/Airfoils/DU30_A17.dat new file mode 100644 index 0000000000..2173054243 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU30_A17.dat @@ -0,0 +1,198 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU30_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -2.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.449 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6138 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.008 Cd0 ! 2D drag coefficient value at 0-lift. + -0.09 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 143 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0267 0.0000 + -175.00 0.274 0.0370 0.1379 + -170.00 0.547 0.0968 0.2778 + -160.00 0.685 0.2876 0.2740 + -155.00 0.766 0.4025 0.3118 + -150.00 0.816 0.5232 0.3411 + -145.00 0.836 0.6454 0.3631 + -140.00 0.832 0.7656 0.3791 + -135.00 0.804 0.8807 0.3899 + -130.00 0.756 0.9882 0.3965 + -125.00 0.690 1.0861 0.3994 + -120.00 0.609 1.1730 0.3992 + -115.00 0.515 1.2474 0.3964 + -110.00 0.411 1.3084 0.3915 + -105.00 0.300 1.3552 0.3846 + -100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU30_A17_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/DU30_A17_coords.txt new file mode 100644 index 0000000000..0f010f6506 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU30_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 97-W-300.lm +! x/c y/c +1.00000 0.00246 +0.99660 0.00340 +0.99314 0.00437 +0.98961 0.00536 +0.98601 0.00638 +0.98235 0.00740 +0.97863 0.00843 +0.97484 0.00947 +0.97098 0.01051 +0.96706 0.01157 +0.96307 0.01264 +0.95902 0.01371 +0.95490 0.01479 +0.95072 0.01588 +0.94647 0.01698 +0.94216 0.01810 +0.93778 0.01922 +0.93333 0.02036 +0.92882 0.02151 +0.92425 0.02268 +0.91961 0.02386 +0.91490 0.02505 +0.91013 0.02626 +0.90529 0.02749 +0.90039 0.02873 +0.89542 0.02999 +0.89039 0.03126 +0.88529 0.03255 +0.88013 0.03385 +0.87490 0.03516 +0.86961 0.03649 +0.86425 0.03784 +0.85882 0.03921 +0.85333 0.04058 +0.84778 0.04197 +0.84216 0.04337 +0.83647 0.04479 +0.83072 0.04622 +0.82490 0.04767 +0.81902 0.04913 +0.81307 0.05060 +0.80706 0.05208 +0.80098 0.05357 +0.79484 0.05508 +0.78863 0.05659 +0.78235 0.05812 +0.77601 0.05965 +0.76961 0.06120 +0.76314 0.06275 +0.75660 0.06432 +0.75000 0.06589 +0.74333 0.06747 +0.73667 0.06904 +0.73000 0.07061 +0.72333 0.07217 +0.71667 0.07371 +0.71000 0.07525 +0.70333 0.07678 +0.69667 0.07830 +0.69000 0.07981 +0.68333 0.08131 +0.67667 0.08280 +0.67000 0.08428 +0.66333 0.08575 +0.65667 0.08720 +0.65000 0.08864 +0.64333 0.09008 +0.63667 0.09149 +0.63000 0.09290 +0.62333 0.09429 +0.61667 0.09566 +0.61000 0.09703 +0.60333 0.09837 +0.59667 0.09970 +0.59000 0.10102 +0.58333 0.10232 +0.57667 0.10360 +0.57000 0.10486 +0.56333 0.10611 +0.55667 0.10734 +0.55000 0.10855 +0.54333 0.10975 +0.53667 0.11092 +0.53000 0.11207 +0.52333 0.11321 +0.51667 0.11432 +0.51000 0.11541 +0.50333 0.11648 +0.49667 0.11752 +0.49000 0.11854 +0.48333 0.11954 +0.47667 0.12051 +0.47000 0.12146 +0.46333 0.12239 +0.45667 0.12328 +0.45000 0.12415 +0.44333 0.12500 +0.43667 0.12581 +0.43000 0.12659 +0.42333 0.12734 +0.41667 0.12806 +0.41000 0.12875 +0.40333 0.12940 +0.39667 0.13001 +0.39000 0.13059 +0.38333 0.13113 +0.37667 0.13164 +0.37000 0.13210 +0.36333 0.13252 +0.35667 0.13290 +0.35000 0.13323 +0.34333 0.13352 +0.33667 0.13377 +0.33000 0.13396 +0.32333 0.13411 +0.31667 0.13420 +0.31000 0.13424 +0.30333 0.13422 +0.29667 0.13415 +0.29000 0.13401 +0.28333 0.13381 +0.27667 0.13355 +0.27000 0.13321 +0.26333 0.13280 +0.25667 0.13231 +0.25000 0.13174 +0.24342 0.13109 +0.23693 0.13036 +0.23053 0.12955 +0.22421 0.12866 +0.21798 0.12771 +0.21184 0.12668 +0.20579 0.12559 +0.19982 0.12444 +0.19395 0.12324 +0.18816 0.12197 +0.18245 0.12066 +0.17684 0.11930 +0.17131 0.11789 +0.16587 0.11644 +0.16052 0.11495 +0.15526 0.11342 +0.15008 0.11185 +0.14499 0.11024 +0.13999 0.10860 +0.13508 0.10693 +0.13026 0.10522 +0.12552 0.10348 +0.12087 0.10172 +0.11631 0.09993 +0.11183 0.09811 +0.10745 0.09627 +0.10315 0.09441 +0.09893 0.09252 +0.09481 0.09061 +0.09077 0.08869 +0.08683 0.08675 +0.08297 0.08478 +0.07919 0.08280 +0.07551 0.08082 +0.07191 0.07881 +0.06840 0.07680 +0.06498 0.07477 +0.06164 0.07274 +0.05840 0.07070 +0.05524 0.06865 +0.05217 0.06660 +0.04918 0.06454 +0.04629 0.06248 +0.04348 0.06042 +0.04076 0.05835 +0.03812 0.05629 +0.03558 0.05423 +0.03312 0.05217 +0.03075 0.05012 +0.02847 0.04808 +0.02627 0.04604 +0.02417 0.04402 +0.02215 0.04200 +0.02022 0.03999 +0.01837 0.03799 +0.01662 0.03602 +0.01495 0.03405 +0.01337 0.03211 +0.01187 0.03017 +0.01047 0.02827 +0.00915 0.02637 +0.00792 0.02450 +0.00678 0.02266 +0.00572 0.02083 +0.00476 0.01904 +0.00388 0.01725 +0.00309 0.01548 +0.00238 0.01370 +0.00177 0.01194 +0.00124 0.01010 +0.00080 0.00820 +0.00044 0.00612 +0.00018 0.00390 +0.00000 0.00000 +0.00018 -0.00382 +0.00044 -0.00601 +0.00080 -0.00815 +0.00124 -0.01017 +0.00177 -0.01216 +0.00238 -0.01412 +0.00309 -0.01611 +0.00388 -0.01811 +0.00476 -0.02014 +0.00572 -0.02217 +0.00678 -0.02423 +0.00792 -0.02630 +0.00915 -0.02840 +0.01047 -0.03053 +0.01187 -0.03267 +0.01337 -0.03485 +0.01495 -0.03705 +0.01662 -0.03929 +0.01837 -0.04154 +0.02022 -0.04385 +0.02215 -0.04617 +0.02417 -0.04852 +0.02627 -0.05088 +0.02847 -0.05328 +0.03075 -0.05569 +0.03312 -0.05813 +0.03558 -0.06060 +0.03812 -0.06308 +0.04076 -0.06559 +0.04348 -0.06811 +0.04629 -0.07064 +0.04918 -0.07318 +0.05217 -0.07574 +0.05524 -0.07831 +0.05840 -0.08088 +0.06164 -0.08345 +0.06498 -0.08604 +0.06840 -0.08862 +0.07191 -0.09121 +0.07551 -0.09379 +0.07919 -0.09637 +0.08297 -0.09895 +0.08683 -0.10152 +0.09077 -0.10408 +0.09481 -0.10665 +0.09893 -0.10919 +0.10315 -0.11173 +0.10745 -0.11425 +0.11183 -0.11675 +0.11631 -0.11923 +0.12087 -0.12169 +0.12552 -0.12412 +0.13026 -0.12652 +0.13508 -0.12888 +0.13999 -0.13121 +0.14499 -0.13350 +0.15008 -0.13576 +0.15526 -0.13797 +0.16052 -0.14014 +0.16587 -0.14225 +0.17131 -0.14432 +0.17684 -0.14633 +0.18245 -0.14828 +0.18816 -0.15017 +0.19395 -0.15198 +0.19982 -0.15371 +0.20579 -0.15537 +0.21184 -0.15693 +0.21798 -0.15840 +0.22421 -0.15976 +0.23053 -0.16101 +0.23693 -0.16214 +0.24342 -0.16314 +0.25000 -0.16399 +0.25667 -0.16470 +0.26333 -0.16526 +0.27000 -0.16567 +0.27667 -0.16592 +0.28333 -0.16602 +0.29000 -0.16598 +0.29667 -0.16580 +0.30333 -0.16548 +0.31000 -0.16503 +0.31667 -0.16445 +0.32333 -0.16374 +0.33000 -0.16291 +0.33667 -0.16198 +0.34333 -0.16094 +0.35000 -0.15980 +0.35667 -0.15855 +0.36333 -0.15722 +0.37000 -0.15580 +0.37667 -0.15429 +0.38333 -0.15270 +0.39000 -0.15104 +0.39667 -0.14931 +0.40333 -0.14752 +0.41000 -0.14566 +0.41667 -0.14374 +0.42333 -0.14178 +0.43000 -0.13977 +0.43667 -0.13772 +0.44333 -0.13562 +0.45000 -0.13348 +0.45667 -0.13130 +0.46333 -0.12908 +0.47000 -0.12683 +0.47667 -0.12456 +0.48333 -0.12225 +0.49000 -0.11992 +0.49667 -0.11757 +0.50333 -0.11520 +0.51000 -0.11281 +0.51667 -0.11040 +0.52333 -0.10799 +0.53000 -0.10555 +0.53667 -0.10310 +0.54333 -0.10065 +0.55000 -0.09818 +0.55667 -0.09570 +0.56333 -0.09321 +0.57000 -0.09071 +0.57667 -0.08821 +0.58333 -0.08571 +0.59000 -0.08320 +0.59667 -0.08070 +0.60333 -0.07819 +0.61000 -0.07569 +0.61667 -0.07319 +0.62333 -0.07070 +0.63000 -0.06820 +0.63667 -0.06572 +0.64333 -0.06325 +0.65000 -0.06079 +0.65667 -0.05834 +0.66333 -0.05590 +0.67000 -0.05347 +0.67667 -0.05106 +0.68333 -0.04867 +0.69000 -0.04629 +0.69667 -0.04394 +0.70333 -0.04161 +0.71000 -0.03931 +0.71667 -0.03703 +0.72333 -0.03478 +0.73000 -0.03256 +0.73667 -0.03037 +0.74333 -0.02822 +0.75000 -0.02610 +0.75660 -0.02405 +0.76314 -0.02205 +0.76961 -0.02013 +0.77601 -0.01827 +0.78235 -0.01647 +0.78863 -0.01474 +0.79484 -0.01309 +0.80098 -0.01150 +0.80706 -0.00998 +0.81307 -0.00854 +0.81902 -0.00717 +0.82490 -0.00586 +0.83072 -0.00462 +0.83647 -0.00346 +0.84216 -0.00236 +0.84778 -0.00133 +0.85333 -0.00037 +0.85882 0.00052 +0.86425 0.00134 +0.86961 0.00210 +0.87490 0.00278 +0.88013 0.00340 +0.88529 0.00395 +0.89039 0.00444 +0.89542 0.00487 +0.90039 0.00524 +0.90529 0.00555 +0.91013 0.00580 +0.91490 0.00600 +0.91961 0.00614 +0.92425 0.00622 +0.92882 0.00625 +0.93333 0.00623 +0.93778 0.00615 +0.94216 0.00602 +0.94647 0.00583 +0.95072 0.00558 +0.95490 0.00528 +0.95902 0.00493 +0.96307 0.00452 +0.96706 0.00405 +0.97098 0.00352 +0.97484 0.00294 +0.97863 0.00231 +0.98235 0.00163 +0.98601 0.00090 +0.98961 0.00012 +0.99314 -0.00071 +0.99660 -0.00158 +1.00000 -0.00246 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU35_A17.dat b/zmq_coupling_tests/templateDir/Airfoils/DU35_A17.dat new file mode 100644 index 0000000000..750b46ecbf --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU35_A17.dat @@ -0,0 +1,189 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU35_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -1.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 11.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -11.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.6717 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3075 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.012 Cd0 ! 2D drag coefficient value at 0-lift. + -0.07 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 135 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0407 0.0000 + -175.00 0.223 0.0507 0.0937 + -170.00 0.405 0.1055 0.1702 + -160.00 0.658 0.2982 0.2819 + -155.00 0.733 0.4121 0.3213 + -150.00 0.778 0.5308 0.3520 + -145.00 0.795 0.6503 0.3754 + -140.00 0.787 0.7672 0.3926 + -135.00 0.757 0.8785 0.4046 + -130.00 0.708 0.9819 0.4121 + -125.00 0.641 1.0756 0.4160 + -120.00 0.560 1.1580 0.4167 + -115.00 0.467 1.2280 0.4146 + -110.00 0.365 1.2847 0.4104 + -105.00 0.255 1.3274 0.4041 + -100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU35_A17_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/DU35_A17_coords.txt new file mode 100644 index 0000000000..b1b81649b2 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU35_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU 35 +! x/c y/c +1.00000 0.00283 +0.99660 0.00378 +0.99314 0.00477 +0.98961 0.00578 +0.98601 0.00683 +0.98235 0.00789 +0.97863 0.00897 +0.97484 0.01006 +0.97098 0.01116 +0.96706 0.01228 +0.96307 0.01342 +0.95902 0.01456 +0.95490 0.01571 +0.95072 0.01688 +0.94647 0.01806 +0.94216 0.01926 +0.93778 0.02046 +0.93333 0.02169 +0.92882 0.02292 +0.92425 0.02419 +0.91961 0.02547 +0.91490 0.02675 +0.91013 0.02807 +0.90529 0.02941 +0.90039 0.03077 +0.89542 0.03214 +0.89039 0.03353 +0.88529 0.03495 +0.88013 0.03638 +0.87490 0.03782 +0.86961 0.03929 +0.86425 0.04079 +0.85882 0.04230 +0.85333 0.04383 +0.84778 0.04538 +0.84216 0.04694 +0.83647 0.04853 +0.83072 0.05013 +0.82490 0.05176 +0.81902 0.05340 +0.81307 0.05506 +0.80706 0.05673 +0.80098 0.05842 +0.79484 0.06013 +0.78863 0.06184 +0.78235 0.06358 +0.77601 0.06531 +0.76961 0.06708 +0.76314 0.06885 +0.75660 0.07064 +0.75000 0.07244 +0.74333 0.07426 +0.73667 0.07606 +0.73000 0.07786 +0.72333 0.07966 +0.71667 0.08144 +0.71000 0.08322 +0.70333 0.08498 +0.69667 0.08674 +0.69000 0.08849 +0.68333 0.09022 +0.67667 0.09196 +0.67000 0.09368 +0.66333 0.09539 +0.65667 0.09708 +0.65000 0.09876 +0.64333 0.10044 +0.63667 0.10210 +0.63000 0.10375 +0.62333 0.10538 +0.61667 0.10699 +0.61000 0.10859 +0.60333 0.11017 +0.59667 0.11174 +0.59000 0.11330 +0.58333 0.11483 +0.57667 0.11634 +0.57000 0.11784 +0.56333 0.11931 +0.55667 0.12077 +0.55000 0.12220 +0.54333 0.12363 +0.53667 0.12502 +0.53000 0.12639 +0.52333 0.12775 +0.51667 0.12907 +0.51000 0.13037 +0.50333 0.13165 +0.49667 0.13289 +0.49000 0.13411 +0.48333 0.13531 +0.47667 0.13648 +0.47000 0.13761 +0.46333 0.13873 +0.45667 0.13980 +0.45000 0.14086 +0.44333 0.14189 +0.43667 0.14288 +0.43000 0.14384 +0.42333 0.14477 +0.41667 0.14566 +0.41000 0.14653 +0.40333 0.14736 +0.39667 0.14814 +0.39000 0.14889 +0.38333 0.14960 +0.37667 0.15028 +0.37000 0.15091 +0.36333 0.15151 +0.35667 0.15207 +0.35000 0.15258 +0.34333 0.15306 +0.33667 0.15351 +0.33000 0.15391 +0.32333 0.15426 +0.31667 0.15457 +0.31000 0.15482 +0.30333 0.15502 +0.29667 0.15516 +0.29000 0.15524 +0.28333 0.15525 +0.27667 0.15520 +0.27000 0.15507 +0.26333 0.15486 +0.25667 0.15457 +0.25000 0.15419 +0.24342 0.15372 +0.23693 0.15316 +0.23053 0.15250 +0.22421 0.15175 +0.21798 0.15094 +0.21184 0.15002 +0.20579 0.14904 +0.19982 0.14798 +0.19395 0.14686 +0.18816 0.14566 +0.18245 0.14439 +0.17684 0.14308 +0.17131 0.14169 +0.16587 0.14025 +0.16052 0.13875 +0.15526 0.13721 +0.15008 0.13561 +0.14499 0.13396 +0.13999 0.13226 +0.13508 0.13052 +0.13026 0.12873 +0.12552 0.12689 +0.12087 0.12502 +0.11631 0.12311 +0.11183 0.12115 +0.10745 0.11917 +0.10315 0.11715 +0.09893 0.11509 +0.09481 0.11299 +0.09077 0.11087 +0.08683 0.10871 +0.08297 0.10652 +0.07919 0.10430 +0.07551 0.10207 +0.07191 0.09979 +0.06840 0.09750 +0.06498 0.09517 +0.06164 0.09284 +0.05840 0.09048 +0.05524 0.08809 +0.05217 0.08569 +0.04918 0.08327 +0.04629 0.08084 +0.04348 0.07839 +0.04076 0.07592 +0.03812 0.07345 +0.03558 0.07096 +0.03312 0.06847 +0.03075 0.06597 +0.02847 0.06348 +0.02627 0.06097 +0.02417 0.05847 +0.02215 0.05596 +0.02022 0.05344 +0.01837 0.05091 +0.01662 0.04841 +0.01495 0.04589 +0.01337 0.04339 +0.01187 0.04088 +0.01047 0.03840 +0.00915 0.03591 +0.00792 0.03343 +0.00678 0.03096 +0.00572 0.02845 +0.00476 0.02592 +0.00388 0.02329 +0.00309 0.02056 +0.00238 0.01774 +0.00177 0.01503 +0.00124 0.01240 +0.00080 0.00990 +0.00044 0.00733 +0.00018 0.00465 +0.00000 0.00000 +0.00018 -0.00461 +0.00044 -0.00726 +0.00080 -0.00990 +0.00124 -0.01246 +0.00177 -0.01509 +0.00238 -0.01776 +0.00309 -0.02049 +0.00388 -0.02317 +0.00476 -0.02585 +0.00572 -0.02848 +0.00678 -0.03112 +0.00792 -0.03376 +0.00915 -0.03642 +0.01047 -0.03911 +0.01187 -0.04178 +0.01337 -0.04450 +0.01495 -0.04721 +0.01662 -0.04995 +0.01837 -0.05269 +0.02022 -0.05547 +0.02215 -0.05825 +0.02417 -0.06105 +0.02627 -0.06386 +0.02847 -0.06670 +0.03075 -0.06955 +0.03312 -0.07244 +0.03558 -0.07536 +0.03812 -0.07828 +0.04076 -0.08125 +0.04348 -0.08422 +0.04629 -0.08720 +0.04918 -0.09020 +0.05217 -0.09321 +0.05524 -0.09622 +0.05840 -0.09925 +0.06164 -0.10225 +0.06498 -0.10528 +0.06840 -0.10829 +0.07191 -0.11131 +0.07551 -0.11431 +0.07919 -0.11730 +0.08297 -0.12028 +0.08683 -0.12325 +0.09077 -0.12619 +0.09481 -0.12914 +0.09893 -0.13205 +0.10315 -0.13494 +0.10745 -0.13780 +0.11183 -0.14065 +0.11631 -0.14345 +0.12087 -0.14624 +0.12552 -0.14898 +0.13026 -0.15169 +0.13508 -0.15435 +0.13999 -0.15697 +0.14499 -0.15954 +0.15008 -0.16207 +0.15526 -0.16454 +0.16052 -0.16696 +0.16587 -0.16932 +0.17131 -0.17163 +0.17684 -0.17387 +0.18245 -0.17603 +0.18816 -0.17814 +0.19395 -0.18015 +0.19982 -0.18207 +0.20579 -0.18391 +0.21184 -0.18564 +0.21798 -0.18727 +0.22421 -0.18877 +0.23053 -0.19015 +0.23693 -0.19140 +0.24342 -0.19250 +0.25000 -0.19343 +0.25667 -0.19420 +0.26333 -0.19481 +0.27000 -0.19525 +0.27667 -0.19552 +0.28333 -0.19562 +0.29000 -0.19556 +0.29667 -0.19535 +0.30333 -0.19498 +0.31000 -0.19448 +0.31667 -0.19383 +0.32333 -0.19303 +0.33000 -0.19211 +0.33667 -0.19107 +0.34333 -0.18991 +0.35000 -0.18864 +0.35667 -0.18725 +0.36333 -0.18577 +0.37000 -0.18418 +0.37667 -0.18251 +0.38333 -0.18074 +0.39000 -0.17889 +0.39667 -0.17695 +0.40333 -0.17496 +0.41000 -0.17288 +0.41667 -0.17074 +0.42333 -0.16855 +0.43000 -0.16631 +0.43667 -0.16402 +0.44333 -0.16167 +0.45000 -0.15929 +0.45667 -0.15684 +0.46333 -0.15436 +0.47000 -0.15185 +0.47667 -0.14930 +0.48333 -0.14671 +0.49000 -0.14410 +0.49667 -0.14147 +0.50333 -0.13881 +0.51000 -0.13613 +0.51667 -0.13342 +0.52333 -0.13071 +0.53000 -0.12797 +0.53667 -0.12522 +0.54333 -0.12247 +0.55000 -0.11970 +0.55667 -0.11692 +0.56333 -0.11413 +0.57000 -0.11133 +0.57667 -0.10853 +0.58333 -0.10573 +0.59000 -0.10293 +0.59667 -0.10014 +0.60333 -0.09734 +0.61000 -0.09456 +0.61667 -0.09178 +0.62333 -0.08901 +0.63000 -0.08624 +0.63667 -0.08348 +0.64333 -0.08074 +0.65000 -0.07801 +0.65667 -0.07529 +0.66333 -0.07257 +0.67000 -0.06987 +0.67667 -0.06719 +0.68333 -0.06452 +0.69000 -0.06186 +0.69667 -0.05922 +0.70333 -0.05661 +0.71000 -0.05401 +0.71667 -0.05144 +0.72333 -0.04889 +0.73000 -0.04637 +0.73667 -0.04386 +0.74333 -0.04140 +0.75000 -0.03896 +0.75660 -0.03658 +0.76314 -0.03425 +0.76961 -0.03199 +0.77601 -0.02979 +0.78235 -0.02765 +0.78863 -0.02557 +0.79484 -0.02357 +0.80098 -0.02162 +0.80706 -0.01974 +0.81307 -0.01794 +0.81902 -0.01621 +0.82490 -0.01454 +0.83072 -0.01294 +0.83647 -0.01142 +0.84216 -0.00996 +0.84778 -0.00858 +0.85333 -0.00727 +0.85882 -0.00604 +0.86425 -0.00487 +0.86961 -0.00377 +0.87490 -0.00276 +0.88013 -0.00182 +0.88529 -0.00095 +0.89039 -0.00014 +0.89542 0.00061 +0.90039 0.00128 +0.90529 0.00189 +0.91013 0.00243 +0.91490 0.00293 +0.91961 0.00335 +0.92425 0.00370 +0.92882 0.00401 +0.93333 0.00425 +0.93778 0.00441 +0.94216 0.00452 +0.94647 0.00455 +0.95072 0.00451 +0.95490 0.00439 +0.95902 0.00420 +0.96307 0.00394 +0.96706 0.00358 +0.97098 0.00315 +0.97484 0.00264 +0.97863 0.00206 +0.98235 0.00141 +0.98601 0.00069 +0.98961 -0.00011 +0.99314 -0.00097 +0.99660 -0.00190 +1.00000 -0.00283 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU40_A17.dat b/zmq_coupling_tests/templateDir/Airfoils/DU40_A17.dat new file mode 100644 index 0000000000..3882d07ad9 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU40_A17.dat @@ -0,0 +1,190 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU40_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.3519 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3226 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.03 Cd0 ! 2D drag coefficient value at 0-lift. + -0.05 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 136 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0602 0.0000 + -175.00 0.218 0.0699 0.0934 + -170.00 0.397 0.1107 0.1697 + -160.00 0.642 0.3045 0.2813 + -155.00 0.715 0.4179 0.3208 + -150.00 0.757 0.5355 0.3516 + -145.00 0.772 0.6535 0.3752 + -140.00 0.762 0.7685 0.3926 + -135.00 0.731 0.8777 0.4048 + -130.00 0.680 0.9788 0.4126 + -125.00 0.613 1.0700 0.4166 + -120.00 0.532 1.1499 0.4176 + -115.00 0.439 1.2174 0.4158 + -110.00 0.337 1.2716 0.4117 + -105.00 0.228 1.3118 0.4057 + -100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU40_A17_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/DU40_A17_coords.txt new file mode 100644 index 0000000000..24e0ec78c9 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/DU40_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.33087 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU4050 +! x/c y/c +1.00000 0.00347 +0.99660 0.00455 +0.99314 0.00565 +0.98961 0.00678 +0.98601 0.00795 +0.98235 0.00914 +0.97863 0.01035 +0.97484 0.01158 +0.97098 0.01283 +0.96706 0.01410 +0.96307 0.01539 +0.95902 0.01670 +0.95490 0.01803 +0.95072 0.01937 +0.94647 0.02074 +0.94216 0.02212 +0.93778 0.02352 +0.93333 0.02495 +0.92882 0.02639 +0.92425 0.02786 +0.91961 0.02936 +0.91490 0.03087 +0.91013 0.03242 +0.90529 0.03400 +0.90039 0.03560 +0.89542 0.03723 +0.89039 0.03887 +0.88529 0.04056 +0.88013 0.04226 +0.87490 0.04399 +0.86961 0.04575 +0.86425 0.04754 +0.85882 0.04935 +0.85333 0.05119 +0.84778 0.05305 +0.84216 0.05493 +0.83647 0.05685 +0.83072 0.05878 +0.82490 0.06076 +0.81902 0.06275 +0.81307 0.06476 +0.80706 0.06680 +0.80098 0.06886 +0.79484 0.07094 +0.78863 0.07304 +0.78235 0.07517 +0.77601 0.07730 +0.76961 0.07947 +0.76314 0.08165 +0.75660 0.08386 +0.75000 0.08608 +0.74333 0.08832 +0.73667 0.09056 +0.73000 0.09279 +0.72333 0.09502 +0.71667 0.09724 +0.71000 0.09946 +0.70333 0.10166 +0.69667 0.10386 +0.69000 0.10605 +0.68333 0.10822 +0.67667 0.11040 +0.67000 0.11256 +0.66333 0.11471 +0.65667 0.11685 +0.65000 0.11897 +0.64333 0.12109 +0.63667 0.12318 +0.63000 0.12527 +0.62333 0.12733 +0.61667 0.12938 +0.61000 0.13142 +0.60333 0.13343 +0.59667 0.13543 +0.59000 0.13742 +0.58333 0.13938 +0.57667 0.14131 +0.57000 0.14323 +0.56333 0.14512 +0.55667 0.14698 +0.55000 0.14882 +0.54333 0.15064 +0.53667 0.15242 +0.53000 0.15417 +0.52333 0.15591 +0.51667 0.15759 +0.51000 0.15925 +0.50333 0.16088 +0.49667 0.16246 +0.49000 0.16401 +0.48333 0.16553 +0.47667 0.16701 +0.47000 0.16844 +0.46333 0.16985 +0.45667 0.17120 +0.45000 0.17253 +0.44333 0.17381 +0.43667 0.17504 +0.43000 0.17624 +0.42333 0.17739 +0.41667 0.17849 +0.41000 0.17957 +0.40333 0.18058 +0.39667 0.18154 +0.39000 0.18246 +0.38333 0.18333 +0.37667 0.18415 +0.37000 0.18491 +0.36333 0.18563 +0.35667 0.18629 +0.35000 0.18690 +0.34333 0.18746 +0.33667 0.18797 +0.33000 0.18842 +0.32333 0.18881 +0.31667 0.18914 +0.31000 0.18940 +0.30333 0.18961 +0.29667 0.18973 +0.29000 0.18979 +0.28333 0.18977 +0.27667 0.18968 +0.27000 0.18950 +0.26333 0.18924 +0.25667 0.18890 +0.25000 0.18845 +0.24342 0.18791 +0.23693 0.18729 +0.23053 0.18657 +0.22421 0.18575 +0.21798 0.18487 +0.21184 0.18388 +0.20579 0.18282 +0.19982 0.18167 +0.19395 0.18046 +0.18816 0.17916 +0.18245 0.17778 +0.17684 0.17634 +0.17131 0.17482 +0.16587 0.17323 +0.16052 0.17158 +0.15526 0.16987 +0.15008 0.16809 +0.14499 0.16625 +0.13999 0.16436 +0.13508 0.16240 +0.13026 0.16038 +0.12552 0.15831 +0.12087 0.15619 +0.11631 0.15402 +0.11183 0.15179 +0.10745 0.14953 +0.10315 0.14722 +0.09893 0.14485 +0.09481 0.14243 +0.09077 0.13998 +0.08683 0.13748 +0.08297 0.13493 +0.07919 0.13234 +0.07551 0.12972 +0.07191 0.12705 +0.06840 0.12435 +0.06498 0.12161 +0.06164 0.11884 +0.05840 0.11603 +0.05524 0.11319 +0.05217 0.11031 +0.04918 0.10740 +0.04629 0.10447 +0.04348 0.10150 +0.04076 0.09851 +0.03812 0.09549 +0.03558 0.09246 +0.03312 0.08940 +0.03075 0.08632 +0.02847 0.08324 +0.02627 0.08013 +0.02417 0.07701 +0.02215 0.07387 +0.02022 0.07070 +0.01837 0.06751 +0.01662 0.06433 +0.01495 0.06111 +0.01337 0.05790 +0.01187 0.05468 +0.01047 0.05148 +0.00915 0.04826 +0.00792 0.04505 +0.00678 0.04181 +0.00572 0.03847 +0.00476 0.03502 +0.00388 0.03133 +0.00309 0.02736 +0.00238 0.02318 +0.00177 0.01920 +0.00124 0.01552 +0.00080 0.01217 +0.00044 0.00892 +0.00018 0.00563 +0.00000 0.00000 +0.00018 -0.00567 +0.00044 -0.00905 +0.00080 -0.01247 +0.00124 -0.01591 +0.00177 -0.01956 +0.00238 -0.02333 +0.00309 -0.02716 +0.00388 -0.03085 +0.00476 -0.03442 +0.00572 -0.03783 +0.00678 -0.04120 +0.00792 -0.04453 +0.00915 -0.04785 +0.01047 -0.05117 +0.01187 -0.05447 +0.01337 -0.05781 +0.01495 -0.06113 +0.01662 -0.06446 +0.01837 -0.06775 +0.02022 -0.07107 +0.02215 -0.07437 +0.02417 -0.07766 +0.02627 -0.08092 +0.02847 -0.08421 +0.03075 -0.08748 +0.03312 -0.09076 +0.03558 -0.09406 +0.03812 -0.09733 +0.04076 -0.10064 +0.04348 -0.10392 +0.04629 -0.10720 +0.04918 -0.11047 +0.05217 -0.11374 +0.05524 -0.11698 +0.05840 -0.12023 +0.06164 -0.12344 +0.06498 -0.12665 +0.06840 -0.12982 +0.07191 -0.13299 +0.07551 -0.13612 +0.07919 -0.13922 +0.08297 -0.14230 +0.08683 -0.14535 +0.09077 -0.14835 +0.09481 -0.15135 +0.09893 -0.15429 +0.10315 -0.15720 +0.10745 -0.16006 +0.11183 -0.16289 +0.11631 -0.16567 +0.12087 -0.16842 +0.12552 -0.17111 +0.13026 -0.17376 +0.13508 -0.17635 +0.13999 -0.17890 +0.14499 -0.18137 +0.15008 -0.18380 +0.15526 -0.18616 +0.16052 -0.18847 +0.16587 -0.19070 +0.17131 -0.19287 +0.17684 -0.19496 +0.18245 -0.19698 +0.18816 -0.19894 +0.19395 -0.20080 +0.19982 -0.20257 +0.20579 -0.20425 +0.21184 -0.20584 +0.21798 -0.20733 +0.22421 -0.20870 +0.23053 -0.20996 +0.23693 -0.21110 +0.24342 -0.21210 +0.25000 -0.21297 +0.25667 -0.21370 +0.26333 -0.21429 +0.27000 -0.21472 +0.27667 -0.21501 +0.28333 -0.21515 +0.29000 -0.21516 +0.29667 -0.21502 +0.30333 -0.21476 +0.31000 -0.21437 +0.31667 -0.21384 +0.32333 -0.21320 +0.33000 -0.21243 +0.33667 -0.21155 +0.34333 -0.21057 +0.35000 -0.20948 +0.35667 -0.20827 +0.36333 -0.20697 +0.37000 -0.20556 +0.37667 -0.20407 +0.38333 -0.20248 +0.39000 -0.20081 +0.39667 -0.19904 +0.40333 -0.19720 +0.41000 -0.19527 +0.41667 -0.19327 +0.42333 -0.19119 +0.43000 -0.18905 +0.43667 -0.18683 +0.44333 -0.18454 +0.45000 -0.18219 +0.45667 -0.17976 +0.46333 -0.17727 +0.47000 -0.17473 +0.47667 -0.17212 +0.48333 -0.16945 +0.49000 -0.16673 +0.49667 -0.16397 +0.50333 -0.16115 +0.51000 -0.15828 +0.51667 -0.15537 +0.52333 -0.15242 +0.53000 -0.14942 +0.53667 -0.14639 +0.54333 -0.14333 +0.55000 -0.14024 +0.55667 -0.13713 +0.56333 -0.13399 +0.57000 -0.13083 +0.57667 -0.12765 +0.58333 -0.12446 +0.59000 -0.12125 +0.59667 -0.11804 +0.60333 -0.11482 +0.61000 -0.11160 +0.61667 -0.10838 +0.62333 -0.10515 +0.63000 -0.10192 +0.63667 -0.09870 +0.64333 -0.09549 +0.65000 -0.09228 +0.65667 -0.08909 +0.66333 -0.08590 +0.67000 -0.08274 +0.67667 -0.07958 +0.68333 -0.07645 +0.69000 -0.07333 +0.69667 -0.07024 +0.70333 -0.06717 +0.71000 -0.06413 +0.71667 -0.06112 +0.72333 -0.05814 +0.73000 -0.05519 +0.73667 -0.05228 +0.74333 -0.04941 +0.75000 -0.04658 +0.75660 -0.04382 +0.76314 -0.04114 +0.76961 -0.03853 +0.77601 -0.03600 +0.78235 -0.03354 +0.78863 -0.03116 +0.79484 -0.02887 +0.80098 -0.02665 +0.80706 -0.02452 +0.81307 -0.02247 +0.81902 -0.02050 +0.82490 -0.01862 +0.83072 -0.01681 +0.83647 -0.01510 +0.84216 -0.01346 +0.84778 -0.01191 +0.85333 -0.01045 +0.85882 -0.00907 +0.86425 -0.00776 +0.86961 -0.00653 +0.87490 -0.00539 +0.88013 -0.00434 +0.88529 -0.00335 +0.89039 -0.00245 +0.89542 -0.00160 +0.90039 -0.00085 +0.90529 -0.00015 +0.91013 0.00046 +0.91490 0.00103 +0.91961 0.00151 +0.92425 0.00193 +0.92882 0.00229 +0.93333 0.00258 +0.93778 0.00279 +0.94216 0.00295 +0.94647 0.00303 +0.95072 0.00303 +0.95490 0.00296 +0.95902 0.00282 +0.96307 0.00261 +0.96706 0.00232 +0.97098 0.00194 +0.97484 0.00149 +0.97863 0.00098 +0.98235 0.00040 +0.98601 -0.00025 +0.98961 -0.00097 +0.99314 -0.00176 +0.99660 -0.00261 +1.00000 -0.00347 diff --git a/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17.dat b/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17.dat new file mode 100644 index 0000000000..68cff47cc6 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17.dat @@ -0,0 +1,181 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA64_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.432 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4073 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.7945 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.0065 Cd0 ! 2D drag coefficient value at 0-lift. + -0.088 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"Default" x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"Default" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 127 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0198 0.0000 + -175.00 0.374 0.0341 0.1880 + -170.00 0.749 0.0955 0.3770 + -160.00 0.659 0.2807 0.2747 + -155.00 0.736 0.3919 0.3130 + -150.00 0.783 0.5086 0.3428 + -145.00 0.803 0.6267 0.3654 + -140.00 0.798 0.7427 0.3820 + -135.00 0.771 0.8537 0.3935 + -130.00 0.724 0.9574 0.4007 + -125.00 0.660 1.0519 0.4042 + -120.00 0.581 1.1355 0.4047 + -115.00 0.491 1.2070 0.4025 + -110.00 0.390 1.2656 0.3981 + -105.00 0.282 1.3104 0.3918 + -100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 diff --git a/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17_coords.txt b/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17_coords.txt new file mode 100644 index 0000000000..aa31ac26b2 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! NACA 64-618 (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.990000 0.003385 +0.980000 0.006126 +0.975000 0.007447 +0.970000 0.008767 +0.965000 0.010062 +0.960000 0.011357 +0.955000 0.012639 +0.950000 0.013921 +0.945000 0.015200 +0.940000 0.016478 +0.935000 0.017757 +0.930000 0.019036 +0.925000 0.020317 +0.920000 0.021598 +0.915000 0.022881 +0.910000 0.024163 +0.905000 0.025448 +0.900000 0.026733 +0.887500 0.029951 +0.875000 0.033169 +0.862500 0.036386 +0.850000 0.039603 +0.837500 0.042804 +0.825000 0.046004 +0.812500 0.049171 +0.800000 0.052337 +0.787500 0.055452 +0.775000 0.058566 +0.762500 0.061611 +0.750000 0.064656 +0.737500 0.067615 +0.725000 0.070573 +0.712500 0.073429 +0.700000 0.076285 +0.687500 0.079029 +0.675000 0.081773 +0.662500 0.084393 +0.650000 0.087012 +0.637500 0.089490 +0.625000 0.091967 +0.612500 0.094283 +0.600000 0.096599 +0.587500 0.098743 +0.575000 0.100887 +0.562500 0.102843 +0.550000 0.104799 +0.537500 0.106549 +0.525000 0.108299 +0.512500 0.109830 +0.500000 0.111360 +0.487500 0.112649 +0.475000 0.113937 +0.462500 0.114964 +0.450000 0.115990 +0.445000 0.116320 +0.440000 0.116650 +0.435000 0.116931 +0.430000 0.117211 +0.425000 0.117439 +0.420000 0.117667 +0.415000 0.117835 +0.410000 0.118003 +0.405000 0.118104 +0.400000 0.118204 +0.395000 0.118231 +0.390000 0.118258 +0.385000 0.118213 +0.380000 0.118168 +0.375000 0.118057 +0.370000 0.117946 +0.365000 0.117777 +0.360000 0.117607 +0.355000 0.117383 +0.350000 0.117159 +0.345000 0.116881 +0.340000 0.116603 +0.335000 0.116273 +0.330000 0.115942 +0.325000 0.115562 +0.320000 0.115181 +0.315000 0.114750 +0.310000 0.114319 +0.305000 0.113838 +0.300000 0.113356 +0.295000 0.112824 +0.290000 0.112292 +0.285000 0.111710 +0.280000 0.111127 +0.275000 0.110495 +0.270000 0.109863 +0.265000 0.109180 +0.260000 0.108497 +0.255000 0.107762 +0.250000 0.107027 +0.245000 0.106241 +0.240000 0.105454 +0.235000 0.104614 +0.230000 0.103774 +0.225000 0.102880 +0.220000 0.101985 +0.215000 0.101035 +0.210000 0.100084 +0.205000 0.099076 +0.200000 0.098068 +0.195000 0.097001 +0.190000 0.095934 +0.185000 0.094805 +0.180000 0.093676 +0.175000 0.092484 +0.170000 0.091291 +0.165000 0.090032 +0.160000 0.088772 +0.155000 0.087441 +0.150000 0.086110 +0.145000 0.084704 +0.140000 0.083298 +0.135000 0.081814 +0.130000 0.080329 +0.125000 0.078759 +0.120000 0.077188 +0.115000 0.075525 +0.110000 0.073862 +0.105000 0.072098 +0.100000 0.070334 +0.097500 0.069412 +0.095000 0.068489 +0.092500 0.067537 +0.090000 0.066584 +0.087500 0.065601 +0.085000 0.064617 +0.082500 0.063600 +0.080000 0.062583 +0.077500 0.061531 +0.075000 0.060478 +0.072500 0.059388 +0.070000 0.058297 +0.067500 0.057165 +0.065000 0.056032 +0.062500 0.054854 +0.060000 0.053676 +0.057500 0.052447 +0.055000 0.051218 +0.052500 0.049933 +0.050000 0.048647 +0.047500 0.047299 +0.045000 0.045950 +0.042500 0.044530 +0.040000 0.043110 +0.037500 0.041606 +0.035000 0.040102 +0.032500 0.038501 +0.030000 0.036899 +0.027500 0.035177 +0.025000 0.033454 +0.022500 0.031574 +0.020000 0.029694 +0.018750 0.028680 +0.017500 0.027666 +0.016250 0.026589 +0.015000 0.025511 +0.013750 0.024354 +0.012500 0.023197 +0.011250 0.021936 +0.010000 0.020674 +0.009500 0.020131 +0.009000 0.019587 +0.008500 0.019017 +0.008000 0.018447 +0.007500 0.017844 +0.007000 0.017241 +0.006500 0.016598 +0.006000 0.015955 +0.005500 0.015260 +0.005000 0.014565 +0.004500 0.013801 +0.004000 0.013037 +0.003500 0.012167 +0.003000 0.011296 +0.002500 0.010262 +0.002000 0.009227 +0.001875 0.008930 +0.001750 0.008633 +0.001625 0.008315 +0.001500 0.007997 +0.001375 0.007655 +0.001250 0.007312 +0.001125 0.006934 +0.001000 0.006555 +0.000875 0.006125 +0.000750 0.005695 +0.000625 0.005184 +0.000500 0.004672 +0.000400 0.004190 +0.000350 0.003913 +0.000300 0.003636 +0.000200 0.002970 +0.000100 0.002104 +0.000050 0.001052 +0.000000 0.000000 +0.000050 -0.001046 +0.000100 -0.002092 +0.000200 -0.002954 +0.000300 -0.003613 +0.000350 -0.003891 +0.000400 -0.004169 +0.000500 -0.004658 +0.000625 -0.005178 +0.000750 -0.005698 +0.000875 -0.006135 +0.001000 -0.006572 +0.001125 -0.006956 +0.001250 -0.007340 +0.001375 -0.007684 +0.001500 -0.008027 +0.001625 -0.008341 +0.001750 -0.008654 +0.001875 -0.008943 +0.002000 -0.009231 +0.002500 -0.010204 +0.003000 -0.011176 +0.003500 -0.011953 +0.004000 -0.012729 +0.004500 -0.013380 +0.005000 -0.014030 +0.005500 -0.014595 +0.006000 -0.015160 +0.006500 -0.015667 +0.007000 -0.016174 +0.007500 -0.016636 +0.008000 -0.017098 +0.008500 -0.017526 +0.009000 -0.017953 +0.009500 -0.018352 +0.010000 -0.018750 +0.011250 -0.019644 +0.012500 -0.020537 +0.013750 -0.021322 +0.015000 -0.022107 +0.016250 -0.022812 +0.017500 -0.023517 +0.018750 -0.024160 +0.020000 -0.024803 +0.022500 -0.025948 +0.025000 -0.027092 +0.027500 -0.028097 +0.030000 -0.029102 +0.032500 -0.030003 +0.035000 -0.030904 +0.037500 -0.031725 +0.040000 -0.032546 +0.042500 -0.033304 +0.045000 -0.034061 +0.047500 -0.034767 +0.050000 -0.035472 +0.052500 -0.036132 +0.055000 -0.036792 +0.057500 -0.037414 +0.060000 -0.038035 +0.062500 -0.038622 +0.065000 -0.039209 +0.067500 -0.039766 +0.070000 -0.040322 +0.072500 -0.040852 +0.075000 -0.041381 +0.077500 -0.041885 +0.080000 -0.042389 +0.082500 -0.042870 +0.085000 -0.043350 +0.087500 -0.043809 +0.090000 -0.044268 +0.092500 -0.044707 +0.095000 -0.045145 +0.097500 -0.045566 +0.100000 -0.045987 +0.105000 -0.046782 +0.110000 -0.047576 +0.115000 -0.048313 +0.120000 -0.049050 +0.125000 -0.049734 +0.130000 -0.050417 +0.135000 -0.051053 +0.140000 -0.051688 +0.145000 -0.052278 +0.150000 -0.052868 +0.155000 -0.053418 +0.160000 -0.053967 +0.165000 -0.054478 +0.170000 -0.054988 +0.175000 -0.055461 +0.180000 -0.055934 +0.185000 -0.056373 +0.190000 -0.056811 +0.195000 -0.057216 +0.200000 -0.057621 +0.205000 -0.057993 +0.210000 -0.058365 +0.215000 -0.058705 +0.220000 -0.059045 +0.225000 -0.059355 +0.230000 -0.059664 +0.235000 -0.059944 +0.240000 -0.060224 +0.245000 -0.060474 +0.250000 -0.060723 +0.255000 -0.060943 +0.260000 -0.061163 +0.265000 -0.061354 +0.270000 -0.061545 +0.275000 -0.061708 +0.280000 -0.061871 +0.285000 -0.062004 +0.290000 -0.062137 +0.295000 -0.062240 +0.300000 -0.062343 +0.305000 -0.062417 +0.310000 -0.062490 +0.315000 -0.062534 +0.320000 -0.062577 +0.325000 -0.062590 +0.330000 -0.062602 +0.335000 -0.062583 +0.340000 -0.062563 +0.345000 -0.062512 +0.350000 -0.062460 +0.355000 -0.062374 +0.360000 -0.062287 +0.365000 -0.062164 +0.370000 -0.062040 +0.375000 -0.061878 +0.380000 -0.061716 +0.385000 -0.061509 +0.390000 -0.061301 +0.395000 -0.061040 +0.400000 -0.060778 +0.405000 -0.060458 +0.410000 -0.060138 +0.415000 -0.059763 +0.420000 -0.059388 +0.425000 -0.058966 +0.430000 -0.058544 +0.435000 -0.058083 +0.440000 -0.057622 +0.445000 -0.057127 +0.450000 -0.056632 +0.462500 -0.055265 +0.475000 -0.053897 +0.487500 -0.052374 +0.500000 -0.050850 +0.512500 -0.049195 +0.525000 -0.047539 +0.537500 -0.045777 +0.550000 -0.044014 +0.562500 -0.042165 +0.575000 -0.040316 +0.587500 -0.038401 +0.600000 -0.036486 +0.612500 -0.034526 +0.625000 -0.032565 +0.637500 -0.030575 +0.650000 -0.028585 +0.662500 -0.026594 +0.675000 -0.024603 +0.687500 -0.022632 +0.700000 -0.020660 +0.712500 -0.018728 +0.725000 -0.016795 +0.737500 -0.014922 +0.750000 -0.013048 +0.762500 -0.011260 +0.775000 -0.009472 +0.787500 -0.007797 +0.800000 -0.006122 +0.812500 -0.004594 +0.825000 -0.003065 +0.837500 -0.001721 +0.850000 -0.000376 +0.862500 0.000742 +0.875000 0.001859 +0.887500 0.002698 +0.900000 0.003536 +0.905000 0.003780 +0.910000 0.004023 +0.915000 0.004205 +0.920000 0.004387 +0.925000 0.004504 +0.930000 0.004620 +0.935000 0.004661 +0.940000 0.004702 +0.945000 0.004658 +0.950000 0.004614 +0.955000 0.004476 +0.960000 0.004338 +0.965000 0.004084 +0.970000 0.003829 +0.975000 0.003436 +0.980000 0.003042 +0.990000 0.001910 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templateDir/Cp_Ct_Cq.NREL5MW.txt b/zmq_coupling_tests/templateDir/Cp_Ct_Cq.NREL5MW.txt new file mode 100644 index 0000000000..4324d3bbac --- /dev/null +++ b/zmq_coupling_tests/templateDir/Cp_Ct_Cq.NREL5MW.txt @@ -0,0 +1,99 @@ +# ----- Rotor performance tables for the NREL-5MW wind turbine ----- +# ------------ Written on Jan-13-22 using the ROSCO toolbox ------------ + +# Pitch angle vector, 36 entries - x axis (matrix columns) (deg) +-5.0 -4.0 -3.0 -2.0 -1.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 +# TSR vector, 26 entries - y axis (matrix rows) (-) +2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 +# Wind speed vector - z axis (m/s) +11.4 + +# Power coefficient + +0.006673 0.009813 0.013077 0.016508 0.020122 0.023918 0.027887 0.032006 0.036239 0.040540 0.044858 0.049138 0.053326 0.057366 0.061205 0.064796 0.068092 0.071051 0.073631 0.075796 0.077520 0.078793 0.079607 0.079960 0.079851 0.079303 0.078341 0.076993 0.075269 0.073154 0.070619 0.067607 0.064059 0.059976 0.055381 0.050328 +0.020093 0.026879 0.033876 0.041034 0.048264 0.055472 0.062560 0.069438 0.076024 0.082246 0.088041 0.093349 0.098111 0.102262 0.105746 0.108521 0.110563 0.111865 0.112435 0.112304 0.111503 0.110082 0.108043 0.105376 0.102031 0.097898 0.092907 0.087092 0.080496 0.073183 0.065206 0.056618 0.047499 0.037976 0.028144 0.018084 +0.048757 0.059921 0.070879 0.081507 0.091686 0.101314 0.110305 0.118583 0.126073 0.132692 0.138350 0.142964 0.146489 0.148944 0.150362 0.150761 0.150158 0.148560 0.145993 0.142397 0.137607 0.131540 0.124241 0.115747 0.106162 0.095542 0.084011 0.071754 0.058916 0.045611 0.031929 0.017939 0.003701 -0.010721 -0.025259 -0.039848 +0.090123 0.104877 0.118836 0.131894 0.143960 0.154953 0.164780 0.173312 0.180438 0.186134 0.190421 0.193294 0.194678 0.194534 0.192872 0.189595 0.184490 0.177562 0.168848 0.158486 0.146540 0.133154 0.118581 0.103012 0.086606 0.069499 0.051807 0.033628 0.015033 -0.003935 -0.023212 -0.042681 -0.062203 -0.081676 -0.101014 -0.120137 +0.139124 0.156683 0.172901 0.187702 0.200999 0.212709 0.222753 0.231064 0.237530 0.241950 0.244105 0.243810 0.240834 0.235185 0.226970 0.216406 0.203596 0.188826 0.172423 0.154596 0.135473 0.115192 0.093900 0.071756 0.048901 0.025448 0.001458 -0.023067 -0.048079 -0.073394 -0.098747 -0.123894 -0.148637 -0.172971 -0.196999 -0.220426 +0.191782 0.211839 0.230276 0.247076 0.262109 0.275108 0.285675 0.293225 0.297120 0.296898 0.292698 0.284905 0.273940 0.260137 0.243968 0.225765 0.205747 0.184044 0.160751 0.135955 0.109826 0.082563 0.054349 0.025323 -0.004446 -0.034984 -0.066317 -0.098275 -0.130442 -0.162296 -0.193412 -0.223707 -0.253665 -0.283545 -0.312671 -0.340141 +0.246353 0.270341 0.292682 0.312827 0.329812 0.342452 0.349588 0.350796 0.346468 0.337517 0.324917 0.309376 0.291272 0.270832 0.248190 0.223439 0.196656 0.167952 0.137415 0.105259 0.071726 0.037018 0.001262 -0.035533 -0.073456 -0.112507 -0.152329 -0.192145 -0.231094 -0.268667 -0.305110 -0.341553 -0.378474 -0.414899 -0.449086 -0.478908 +0.306243 0.335683 0.361286 0.381426 0.394666 0.400011 0.397807 0.389766 0.377676 0.362345 0.344063 0.323009 0.299287 0.272921 0.243930 0.212388 0.178407 0.142107 0.103741 0.063607 0.021945 -0.021117 -0.065611 -0.111678 -0.159287 -0.207873 -0.256248 -0.303158 -0.347971 -0.391262 -0.434965 -0.480253 -0.525739 -0.568955 -0.606708 -0.638532 +0.368062 0.397982 0.420678 0.434161 0.438041 0.434596 0.426094 0.413722 0.397833 0.378568 0.356023 0.330207 0.301063 0.268542 0.232706 0.193700 0.151740 0.107083 0.060108 0.011125 -0.039710 -0.092454 -0.147289 -0.204180 -0.262421 -0.320480 -0.376558 -0.429701 -0.480649 -0.532192 -0.586717 -0.643176 -0.698195 -0.746783 -0.788014 -0.825218 +0.413915 0.437699 0.451902 0.458070 0.457967 0.452866 0.443478 0.429833 0.411921 0.389793 0.363427 0.332762 0.297737 0.258384 0.214897 0.167596 0.116800 0.062939 0.006435 -0.052490 -0.113873 -0.177938 -0.244676 -0.313397 -0.382360 -0.449143 -0.512100 -0.571792 -0.631581 -0.695509 -0.764242 -0.833635 -0.896797 -0.950560 -0.998368 -1.044827 +0.427324 0.444280 0.455448 0.462056 0.464498 0.462253 0.454597 0.441298 0.422256 0.397517 0.367139 0.331124 0.289519 0.242518 0.190536 0.134077 0.073568 0.009566 -0.057573 -0.127803 -0.201376 -0.278345 -0.358171 -0.439117 -0.518328 -0.593032 -0.663068 -0.731776 -0.804602 -0.885395 -0.971040 -1.052725 -1.123154 -1.184540 -1.242706 -1.302084 +0.413889 0.430080 0.443986 0.455667 0.463490 0.465861 0.461379 0.449315 0.429515 0.402103 0.367325 0.325347 0.276400 0.220931 0.159637 0.093102 0.021935 -0.053297 -0.132381 -0.215535 -0.302917 -0.394172 -0.487834 -0.580989 -0.669719 -0.752399 -0.831452 -0.912845 -1.003839 -1.105589 -1.208911 -1.301214 -1.380509 -1.453087 -1.525242 -1.600224 +0.390738 0.409602 0.427384 0.443933 0.457445 0.465005 0.464411 0.454181 0.433864 0.403639 0.364016 0.315425 0.258360 0.193623 0.122136 0.044567 -0.038313 -0.126023 -0.218606 -0.316340 -0.419059 -0.525699 -0.633667 -0.738622 -0.836834 -0.928785 -1.019688 -1.118620 -1.233318 -1.358741 -1.478110 -1.581346 -1.672639 -1.759983 -1.849169 -1.941926 +0.363054 0.386720 0.409228 0.429996 0.447852 0.460425 0.463989 0.456010 0.435373 0.402165 0.357222 0.301344 0.235402 0.160566 0.077923 -0.011703 -0.107479 -0.209107 -0.316861 -0.430808 -0.550233 -0.673151 -0.795604 -0.912315 -1.020857 -1.123956 -1.230487 -1.353172 -1.496497 -1.645302 -1.779751 -1.896314 -2.002958 -2.108318 -2.217267 -2.330606 +0.332023 0.361556 0.389367 0.414649 0.436246 0.452807 0.460431 0.454894 0.434075 0.397696 0.346937 0.283092 0.207494 0.121668 0.026850 -0.075950 -0.185943 -0.303110 -0.427726 -0.559435 -0.696810 -0.836734 -0.973950 -1.103096 -1.222996 -1.339770 -1.467400 -1.620400 -1.794614 -1.965735 -2.116279 -2.249130 -2.374431 -2.500966 -2.632648 -2.770283 +0.297995 0.333854 0.367528 0.397656 0.423215 0.442899 0.454053 0.450936 0.429986 0.390235 0.333142 0.260640 0.174562 0.076794 -0.031277 -0.148468 -0.274167 -0.408575 -0.551737 -0.702675 -0.859149 -1.016871 -1.169580 -1.311915 -1.444423 -1.578792 -1.734397 -1.922541 -2.128205 -2.321411 -2.490350 -2.642587 -2.789846 -2.940844 -3.098986 -3.264660 +0.261597 0.303619 0.343502 0.378889 0.408674 0.431280 0.445167 0.444233 0.423112 0.379761 0.315806 0.233927 0.136491 0.025768 -0.096686 -0.229613 -0.372646 -0.526034 -0.689370 -0.860978 -1.037730 -1.214335 -1.383513 -1.539437 -1.686737 -1.844401 -2.034203 -2.260837 -2.498120 -2.714447 -2.904511 -3.079332 -3.251981 -3.431224 -3.619857 -3.816817 +0.223751 0.271311 0.317227 0.358217 0.392491 0.418111 0.434088 0.434927 0.413446 0.366239 0.294883 0.202866 0.093151 -0.031589 -0.169648 -0.319787 -0.481868 -0.655988 -0.841105 -1.034831 -1.233270 -1.430180 -1.616348 -1.786462 -1.952417 -2.139500 -2.368690 -2.636225 -2.905702 -3.147086 -3.361213 -3.561934 -3.763787 -3.975522 -4.198409 -4.429489 +0.185578 0.237532 0.288993 0.335546 0.374551 0.403289 0.421002 0.423063 0.400961 0.349628 0.270309 0.167352 0.044405 -0.095487 -0.250473 -0.419415 -0.602317 -0.798913 -1.007440 -1.224860 -1.446724 -1.665242 -1.868434 -2.054428 -2.244050 -2.466255 -2.739406 -3.049892 -3.352672 -3.621561 -3.862815 -4.093010 -4.328409 -4.576896 -4.837351 -5.105458 +0.147095 0.203239 0.259075 0.310894 0.354752 0.386719 0.405978 0.408744 0.385629 0.329881 0.242007 0.127271 -0.009910 -0.166158 -0.339498 -0.528928 -0.734472 -0.955298 -1.188911 -1.431845 -1.679152 -1.920015 -2.140330 -2.345296 -2.563821 -2.826409 -3.147779 -3.503220 -3.840906 -4.140058 -4.411660 -4.675361 -4.948974 -5.238172 -5.539321 -5.847566 +0.109921 0.168465 0.228283 0.284493 0.333003 0.368316 0.389001 0.392004 0.367452 0.306944 0.209888 0.082498 -0.069969 -0.243863 -0.437077 -0.648769 -0.878808 -1.125646 -1.386141 -1.656724 -1.931386 -2.194733 -2.433122 -2.661010 -2.913585 -3.221522 -3.595200 -3.997663 -4.372318 -4.704715 -5.010142 -5.311913 -5.628384 -5.961897 -6.307013 -6.658699 +0.075556 0.133907 0.196815 0.256499 0.309270 0.347981 0.370019 0.372880 0.346417 0.280755 0.173858 0.032901 -0.135979 -0.328881 -0.543585 -0.779386 -1.035790 -1.310469 -1.599847 -1.900506 -2.203972 -2.489774 -2.748220 -3.003362 -3.294941 -3.653136 -4.083147 -4.534716 -4.948847 -5.317645 -5.660775 -6.005570 -6.369299 -6.750614 -7.143160 -7.541782 +0.045437 0.101086 0.164731 0.227521 0.283675 0.325613 0.348964 0.351362 0.322521 0.251245 0.133815 -0.021672 -0.208162 -0.421508 -0.659413 -0.921225 -1.205892 -1.510319 -1.830843 -2.164074 -2.497172 -2.805822 -3.087060 -3.374013 -3.709339 -4.122787 -4.613131 -5.115993 -5.572447 -5.980987 -6.366170 -6.759084 -7.174174 -7.606904 -8.050518 -8.499762 +0.020095 0.070625 0.132961 0.197686 0.256313 0.301131 0.325760 0.327415 0.295744 0.218342 0.089649 -0.081378 -0.286748 -0.522056 -0.784958 -1.074719 -1.389587 -1.725804 -2.080005 -2.448103 -2.811255 -3.143907 -3.451088 -3.774480 -4.158169 -4.632027 -5.186626 -5.743189 -6.245055 -6.696930 -7.128978 -7.575043 -8.045426 -8.533374 -9.031865 -9.535604 +-0.001687 0.043909 0.102330 0.166837 0.227413 0.274487 0.300332 0.301010 0.266040 0.181968 0.041242 -0.146395 -0.371984 -0.630855 -0.920613 -1.240294 -1.587356 -1.957580 -2.348192 -2.753074 -3.146694 -3.505110 -3.841738 -4.206100 -4.642786 -5.182427 -5.805056 -6.418029 -6.968601 -7.467747 -7.951835 -8.455876 -8.985506 -9.532652 -10.089996 -10.652280 +-0.020991 0.020364 0.073330 0.135754 0.197326 0.245733 0.272607 0.272110 0.233378 0.142039 -0.011538 -0.216915 -0.464126 -0.748233 -1.066769 -1.418378 -1.799699 -2.206350 -2.636179 -3.079288 -3.504186 -3.890511 -4.260392 -4.670103 -5.164549 -5.775547 -6.469853 -7.142266 -7.745026 -8.295764 -8.837283 -9.403900 -9.996885 -10.607377 -11.227722 -11.852766 + + +# Thrust coefficient + +0.128717 0.128402 0.127976 0.127677 0.127561 0.127629 0.127867 0.128247 0.128729 0.129258 0.129777 0.130225 0.130542 0.130673 0.130570 0.130193 0.129510 0.128500 0.127155 0.125472 0.123467 0.121169 0.118605 0.115809 0.112801 0.109598 0.106205 0.102605 0.098769 0.094663 0.090253 0.085471 0.080247 0.074585 0.068519 0.062126 +0.168397 0.169715 0.171083 0.172538 0.173986 0.175323 0.176451 0.177284 0.177754 0.177804 0.177391 0.176487 0.175078 0.173164 0.170771 0.167935 0.164700 0.161125 0.157265 0.153157 0.148796 0.144149 0.139139 0.133696 0.127741 0.121140 0.113810 0.105805 0.097197 0.088074 0.078501 0.068532 0.058230 0.047709 0.037053 0.026331 +0.226643 0.229393 0.231723 0.233550 0.234756 0.235255 0.234993 0.233948 0.232126 0.229565 0.226326 0.222484 0.218143 0.213440 0.208473 0.203249 0.197693 0.191672 0.185067 0.177711 0.169360 0.159907 0.149434 0.138024 0.125825 0.112914 0.099398 0.085443 0.071172 0.056685 0.042068 0.027389 0.012700 -0.001958 -0.016522 -0.030881 +0.299075 0.301289 0.302422 0.302406 0.301210 0.298869 0.295464 0.291107 0.285985 0.280362 0.274473 0.268391 0.262007 0.255130 0.247532 0.238852 0.228637 0.216830 0.203516 0.188917 0.173159 0.156385 0.138854 0.120751 0.102214 0.083356 0.064271 0.045044 0.025754 0.006460 -0.012785 -0.031903 -0.050766 -0.069197 -0.086927 -0.103550 +0.379238 0.378835 0.376828 0.373306 0.368432 0.362520 0.355993 0.349221 0.342334 0.335182 0.327457 0.318711 0.308189 0.295450 0.280436 0.263431 0.244639 0.224405 0.203103 0.180973 0.158152 0.134784 0.110984 0.086862 0.062520 0.038061 0.013566 -0.010909 -0.035298 -0.059484 -0.083286 -0.106436 -0.128554 -0.149119 -0.167467 -0.182809 +0.462045 0.457610 0.451683 0.444801 0.437544 0.430278 0.422940 0.415089 0.406018 0.394702 0.380509 0.363246 0.343190 0.320701 0.296376 0.270674 0.243937 0.216365 0.188092 0.159188 0.129783 0.100004 0.069970 0.039795 0.009565 -0.020663 -0.050818 -0.080761 -0.110260 -0.138960 -0.166409 -0.192073 -0.215232 -0.234926 -0.250010 -0.259496 +0.545296 0.537969 0.530603 0.523523 0.516328 0.508094 0.497562 0.483752 0.466005 0.444344 0.419336 0.391808 0.362349 0.331374 0.299182 0.266026 0.232071 0.197454 0.162213 0.126478 0.090382 0.054055 0.017608 -0.018892 -0.055386 -0.091750 -0.127731 -0.162918 -0.196784 -0.228774 -0.258236 -0.284215 -0.305420 -0.320331 -0.327933 -0.328268 +0.634417 0.627969 0.621264 0.612780 0.601387 0.585824 0.565236 0.539859 0.510799 0.478901 0.444769 0.408839 0.371429 0.332767 0.293070 0.252557 0.211368 0.169524 0.127130 0.084335 0.041284 -0.001917 -0.045208 -0.088516 -0.131639 -0.174175 -0.215526 -0.255049 -0.292101 -0.325924 -0.355354 -0.378817 -0.394523 -0.401294 -0.399320 -0.390574 +0.735578 0.726839 0.715209 0.698962 0.676693 0.649128 0.617406 0.582286 0.544379 0.504195 0.462125 0.418443 0.373358 0.327062 0.279804 0.231775 0.183064 0.133686 0.083811 0.033605 -0.016820 -0.067406 -0.118066 -0.168514 -0.218193 -0.266339 -0.312201 -0.355042 -0.394026 -0.427876 -0.454896 -0.473018 -0.480617 -0.477721 -0.466483 -0.450923 +0.836616 0.819394 0.796306 0.768163 0.735696 0.699319 0.659490 0.616641 0.571164 0.523450 0.473790 0.422421 0.369559 0.315437 0.260360 0.204512 0.147873 0.090579 0.032826 -0.025256 -0.083602 -0.142121 -0.200467 -0.257947 -0.313640 -0.366661 -0.416171 -0.461284 -0.500752 -0.532889 -0.555398 -0.565981 -0.564006 -0.551394 -0.532762 -0.512992 +0.923379 0.893210 0.859907 0.823650 0.784285 0.741493 0.695217 0.645715 0.593258 0.538206 0.480917 0.421690 0.360798 0.298558 0.235326 0.171229 0.106253 0.040624 -0.025491 -0.092007 -0.158843 -0.225631 -0.291594 -0.355648 -0.416743 -0.473917 -0.526240 -0.572594 -0.611418 -0.640346 -0.656398 -0.657833 -0.645755 -0.624799 -0.601049 -0.579120 +0.993425 0.954344 0.913695 0.871240 0.826266 0.778188 0.726411 0.670805 0.611601 0.549205 0.484132 0.416794 0.347553 0.276858 0.205091 0.132281 0.058537 -0.015913 -0.090942 -0.166478 -0.242184 -0.317269 -0.390504 -0.460636 -0.526540 -0.587232 -0.641708 -0.688659 -0.725848 -0.749926 -0.757799 -0.749140 -0.727679 -0.700204 -0.673221 -0.650161 +1.058549 1.011415 0.963227 0.914208 0.863809 0.810735 0.753864 0.692505 0.626704 0.556910 0.483849 0.408103 0.330166 0.250636 0.169909 0.087938 0.004949 -0.078857 -0.163388 -0.248386 -0.333115 -0.416283 -0.496411 -0.572141 -0.642397 -0.706208 -0.762552 -0.809541 -0.843850 -0.861381 -0.859866 -0.841099 -0.811461 -0.779163 -0.750163 -0.726138 +1.122305 1.067207 1.011341 0.955082 0.898284 0.839959 0.778078 0.711195 0.638918 0.561654 0.480375 0.395899 0.308904 0.220154 0.129994 0.038399 -0.054349 -0.148080 -0.242618 -0.337354 -0.431053 -0.522046 -0.608688 -0.689695 -0.764072 -0.830961 -0.888968 -0.935169 -0.965155 -0.974811 -0.963246 -0.934896 -0.898382 -0.862536 -0.832084 -0.807326 +1.185738 1.122582 1.058847 0.995008 0.931027 0.866582 0.799502 0.727171 0.648509 0.563696 0.473951 0.380407 0.283976 0.185599 0.085524 -0.016186 -0.119230 -0.223433 -0.328360 -0.432958 -0.535499 -0.634048 -0.726965 -0.813132 -0.891721 -0.961752 -1.021004 -1.065338 -1.089724 -1.090502 -1.068696 -1.031466 -0.989260 -0.950738 -0.919159 -0.894322 +1.248868 1.177878 1.106090 1.034308 0.962814 0.891330 0.818549 0.740704 0.655695 0.563246 0.464772 0.361803 0.255555 0.147124 0.036641 -0.075690 -0.189578 -0.304724 -0.420330 -0.534810 -0.646043 -0.751962 -0.851114 -0.942592 -1.025625 -1.098723 -1.158523 -1.199963 -1.217675 -1.208810 -1.176857 -1.131525 -1.084562 -1.043982 -1.011881 -0.987449 +1.310753 1.232966 1.153240 1.073234 0.993908 0.914846 0.835616 0.752042 0.660663 0.560476 0.452996 0.340238 0.223775 0.104835 -0.016537 -0.140014 -0.265270 -0.391766 -0.518236 -0.642586 -0.762395 -0.875671 -0.981224 -1.078327 -1.165991 -1.241827 -1.301438 -1.339064 -1.349133 -1.330112 -1.288253 -1.235555 -1.184617 -1.142625 -1.110627 -1.086622 +1.370202 1.287113 1.200281 1.111936 1.024461 0.937489 0.851104 0.761450 0.663572 0.555529 0.438759 0.315838 0.188759 0.058841 -0.073915 -0.209068 -0.346176 -0.484368 -0.621832 -0.756036 -0.884420 -1.005217 -1.117496 -1.220568 -1.312850 -1.390993 -1.449734 -1.482671 -1.484225 -1.454750 -1.403285 -1.343886 -1.289747 -1.247079 -1.215478 -1.191550 +1.425945 1.339521 1.246699 1.150493 1.054590 0.959390 0.865327 0.769108 0.664559 0.548527 0.422175 0.288713 0.150621 0.009228 -0.135421 -0.282763 -0.432177 -0.582348 -0.730921 -0.875019 -1.012114 -1.140727 -1.260146 -1.369430 -1.466168 -1.546178 -1.603417 -1.630806 -1.623105 -1.583019 -1.522246 -1.456812 -1.400325 -1.357559 -1.326244 -1.302016 +1.478287 1.389036 1.292096 1.188788 1.084384 0.980656 0.878503 0.775237 0.663743 0.539578 0.403344 0.258956 0.109434 -0.043935 -0.200986 -0.361019 -0.523161 -0.685556 -0.845366 -0.999480 -1.145544 -1.282366 -1.409337 -1.524920 -1.625906 -1.707377 -1.762486 -1.783498 -1.765941 -1.715150 -1.645380 -1.574677 -1.516687 -1.474068 -1.442713 -1.417868 +1.525569 1.435807 1.335411 1.226404 1.113896 1.001379 0.890777 0.780002 0.661259 0.528773 0.382346 0.226642 0.065268 -0.100589 -0.270547 -0.443771 -0.619028 -0.793883 -0.965092 -1.129434 -1.284809 -1.430301 -1.565142 -1.687017 -1.792041 -1.874588 -1.926934 -1.940785 -1.912886 -1.851321 -1.772922 -1.697837 -1.639004 -1.596445 -1.564728 -1.539006 +1.566315 1.479214 1.376488 1.263103 1.143093 1.021619 0.902254 0.783557 0.657210 0.516187 0.359250 0.191837 0.018160 -0.160683 -0.344060 -0.530963 -0.719689 -0.907253 -1.090067 -1.264932 -1.430027 -1.584649 -1.727568 -1.855690 -1.964564 -2.047808 -2.096752 -2.102712 -2.064071 -1.991678 -1.905145 -1.826603 -1.767296 -1.724535 -1.692174 -1.665365 +1.599400 1.517580 1.415403 1.298085 1.171736 1.041419 0.913010 0.786007 0.651695 0.501886 0.334113 0.154593 -0.031851 -0.224178 -0.421492 -0.622547 -0.825079 -1.025616 -1.220296 -1.406037 -1.581314 -1.745475 -1.896602 -2.030921 -2.143474 -2.227031 -2.271933 -2.269336 -2.219606 -2.136371 -2.042346 -1.961175 -1.901455 -1.858218 -1.824963 -1.796908 +1.624851 1.550529 1.451132 1.331239 1.199665 1.060803 0.923092 0.787425 0.644798 0.485924 0.306984 0.114961 -0.084730 -0.291046 -0.502823 -0.718477 -0.935156 -1.148950 -1.355807 -1.552820 -1.738766 -1.912794 -2.072223 -2.212699 -2.328774 -2.412252 -2.452480 -2.440720 -2.379579 -2.285564 -2.184808 -2.101635 -2.041361 -1.997404 -1.963032 -1.933615 +1.644484 1.576932 1.482832 1.362862 1.226569 1.079755 0.932536 0.787882 0.636575 0.468351 0.277909 0.072976 -0.140450 -0.361273 -0.588030 -0.818712 -1.049886 -1.277246 -1.496631 -1.705352 -1.902443 -2.086605 -2.254411 -2.401028 -2.520465 -2.603459 -2.638392 -2.616924 -2.544069 -2.439454 -2.332777 -2.247970 -2.186918 -2.142020 -2.106339 -2.075472 +1.659936 1.597863 1.510260 1.392062 1.252024 1.098156 0.941373 0.787439 0.627098 0.449210 0.246925 0.028662 -0.198996 -0.434846 -0.677094 -0.923225 -1.169251 -1.410513 -1.642804 -1.863707 -2.072377 -2.266900 -2.443154 -2.595911 -2.718548 -2.800637 -2.829676 -2.798002 -2.713156 -2.598249 -2.486428 -2.400100 -2.338052 -2.292009 -2.254855 -2.222470 + + +# Torque coefficient + +0.003340 0.004911 0.006545 0.008262 0.010070 0.011970 0.013957 0.016018 0.018137 0.020289 0.022450 0.024593 0.026688 0.028710 0.030632 0.032429 0.034079 0.035559 0.036851 0.037934 0.038797 0.039434 0.039841 0.040018 0.039964 0.039689 0.039208 0.038533 0.037670 0.036612 0.035343 0.033836 0.032060 0.030017 0.027717 0.025188 +0.008045 0.010762 0.013563 0.016429 0.019324 0.022210 0.025048 0.027802 0.030438 0.032930 0.035250 0.037375 0.039282 0.040944 0.042339 0.043450 0.044267 0.044789 0.045017 0.044964 0.044644 0.044075 0.043258 0.042191 0.040851 0.039196 0.037198 0.034870 0.032229 0.029301 0.026107 0.022669 0.019018 0.015205 0.011268 0.007241 +0.016268 0.019993 0.023649 0.027195 0.030591 0.033804 0.036803 0.039565 0.042064 0.044273 0.046161 0.047700 0.048876 0.049695 0.050168 0.050302 0.050100 0.049567 0.048711 0.047511 0.045913 0.043888 0.041453 0.038619 0.035421 0.031878 0.028030 0.023941 0.019658 0.015218 0.010653 0.005985 0.001235 -0.003577 -0.008428 -0.013295 +0.025774 0.029993 0.033986 0.037720 0.041171 0.044314 0.047125 0.049565 0.051603 0.053232 0.054458 0.055280 0.055675 0.055634 0.055159 0.054221 0.052762 0.050780 0.048288 0.045325 0.041909 0.038080 0.033913 0.029460 0.024768 0.019876 0.014816 0.009617 0.004299 -0.001125 -0.006638 -0.012206 -0.017789 -0.023358 -0.028889 -0.034358 +0.034814 0.039208 0.043266 0.046970 0.050298 0.053228 0.055741 0.057821 0.059439 0.060545 0.061084 0.061010 0.060266 0.058852 0.056797 0.054153 0.050947 0.047252 0.043147 0.038686 0.033900 0.028825 0.023497 0.017956 0.012237 0.006368 0.000365 -0.005772 -0.012031 -0.018366 -0.024710 -0.031003 -0.037195 -0.043284 -0.049297 -0.055159 +0.042659 0.047120 0.051221 0.054958 0.058302 0.061193 0.063544 0.065223 0.066090 0.066040 0.065106 0.063373 0.060934 0.057863 0.054267 0.050218 0.045765 0.040938 0.035756 0.030241 0.024429 0.018365 0.012089 0.005633 -0.000989 -0.007782 -0.014751 -0.021860 -0.029015 -0.036100 -0.043021 -0.049760 -0.056424 -0.063070 -0.069549 -0.075659 +0.049318 0.054120 0.058592 0.062625 0.066025 0.068556 0.069984 0.070226 0.069360 0.067568 0.065045 0.061934 0.058310 0.054218 0.049685 0.044730 0.039369 0.033622 0.027509 0.021072 0.014359 0.007411 0.000253 -0.007113 -0.014705 -0.022523 -0.030495 -0.038466 -0.046263 -0.053785 -0.061080 -0.068376 -0.075767 -0.083059 -0.089903 -0.095873 +0.055734 0.061091 0.065751 0.069416 0.071826 0.072799 0.072397 0.070934 0.068734 0.065944 0.062616 0.058785 0.054468 0.049669 0.044393 0.038653 0.032469 0.025862 0.018880 0.011576 0.003994 -0.003843 -0.011941 -0.020324 -0.028989 -0.037831 -0.046635 -0.055172 -0.063328 -0.071206 -0.079160 -0.087402 -0.095680 -0.103545 -0.110416 -0.116207 +0.061402 0.066394 0.070180 0.072429 0.073076 0.072502 0.071083 0.069019 0.066369 0.063155 0.059394 0.055087 0.050225 0.044800 0.038821 0.032314 0.025314 0.017864 0.010027 0.001856 -0.006625 -0.015424 -0.024572 -0.034062 -0.043778 -0.053464 -0.062820 -0.071685 -0.080185 -0.088783 -0.097879 -0.107298 -0.116477 -0.124582 -0.131461 -0.137667 +0.063740 0.067402 0.069590 0.070539 0.070524 0.069738 0.068292 0.066191 0.063433 0.060025 0.055965 0.051243 0.045849 0.039789 0.033093 0.025809 0.017986 0.009692 0.000991 -0.008083 -0.017536 -0.027401 -0.037678 -0.048261 -0.058881 -0.069165 -0.078860 -0.088052 -0.097259 -0.107103 -0.117688 -0.128374 -0.138100 -0.146379 -0.153741 -0.160896 +0.061104 0.063529 0.065126 0.066071 0.066420 0.066099 0.065004 0.063103 0.060380 0.056842 0.052498 0.047348 0.041399 0.034678 0.027245 0.019172 0.010520 0.001368 -0.008233 -0.018275 -0.028795 -0.039801 -0.051216 -0.062791 -0.074117 -0.084800 -0.094814 -0.104639 -0.115053 -0.126605 -0.138852 -0.150533 -0.160603 -0.169381 -0.177699 -0.186189 +0.055238 0.057399 0.059255 0.060814 0.061858 0.062174 0.061576 0.059966 0.057323 0.053665 0.049023 0.043421 0.036888 0.029486 0.021305 0.012425 0.002927 -0.007113 -0.017668 -0.028765 -0.040427 -0.052606 -0.065106 -0.077539 -0.089381 -0.100415 -0.110966 -0.121829 -0.133973 -0.147552 -0.161342 -0.173660 -0.184243 -0.193929 -0.203559 -0.213566 +0.048889 0.051249 0.053474 0.055545 0.057235 0.058181 0.058107 0.056827 0.054285 0.050503 0.045545 0.039466 0.032326 0.024226 0.015282 0.005576 -0.004794 -0.015768 -0.027352 -0.039580 -0.052432 -0.065775 -0.079284 -0.092416 -0.104704 -0.116209 -0.127582 -0.139961 -0.154312 -0.170004 -0.184940 -0.197857 -0.209279 -0.220207 -0.231366 -0.242972 +0.042753 0.045540 0.048190 0.050636 0.052739 0.054219 0.054639 0.053699 0.051269 0.047359 0.042066 0.035486 0.027721 0.018908 0.009176 -0.001378 -0.012657 -0.024624 -0.037313 -0.050732 -0.064795 -0.079270 -0.093690 -0.107433 -0.120215 -0.132356 -0.144901 -0.159348 -0.176226 -0.193749 -0.209582 -0.223308 -0.235867 -0.248274 -0.261103 -0.274450 +0.036927 0.040211 0.043304 0.046116 0.048518 0.050360 0.051208 0.050592 0.048277 0.044231 0.038585 0.031485 0.023077 0.013532 0.002986 -0.008447 -0.020680 -0.033711 -0.047570 -0.062219 -0.077497 -0.093059 -0.108320 -0.122683 -0.136018 -0.149005 -0.163200 -0.180216 -0.199592 -0.218623 -0.235366 -0.250141 -0.264077 -0.278150 -0.292795 -0.308102 +0.031398 0.035176 0.038724 0.041898 0.044591 0.046665 0.047841 0.047512 0.045305 0.041116 0.035101 0.027462 0.018392 0.008091 -0.003295 -0.015643 -0.028887 -0.043049 -0.058133 -0.074036 -0.090523 -0.107141 -0.123231 -0.138228 -0.152189 -0.166347 -0.182742 -0.202566 -0.224235 -0.244592 -0.262392 -0.278432 -0.293948 -0.309857 -0.326520 -0.343976 +0.026185 0.030391 0.034383 0.037925 0.040906 0.043169 0.044559 0.044466 0.042352 0.038012 0.031611 0.023415 0.013662 0.002579 -0.009678 -0.022983 -0.037300 -0.052654 -0.069003 -0.086180 -0.103872 -0.121549 -0.138483 -0.154090 -0.168834 -0.184616 -0.203614 -0.226299 -0.250050 -0.271703 -0.290728 -0.308227 -0.325508 -0.343449 -0.362331 -0.382045 +0.021330 0.025864 0.030241 0.034148 0.037416 0.039858 0.041381 0.041461 0.039413 0.034913 0.028111 0.019339 0.008880 -0.003011 -0.016172 -0.030485 -0.045936 -0.062535 -0.080182 -0.098649 -0.117566 -0.136337 -0.154085 -0.170301 -0.186122 -0.203956 -0.225804 -0.251308 -0.276997 -0.300008 -0.320420 -0.339555 -0.358797 -0.378982 -0.400229 -0.422258 +0.016887 0.021614 0.026297 0.030533 0.034082 0.036698 0.038309 0.038497 0.036486 0.031815 0.024597 0.015228 0.004041 -0.008689 -0.022792 -0.038165 -0.054808 -0.072698 -0.091673 -0.111457 -0.131646 -0.151530 -0.170019 -0.186944 -0.204199 -0.224419 -0.249274 -0.277527 -0.305079 -0.329546 -0.351500 -0.372446 -0.393867 -0.416478 -0.440178 -0.464575 +0.012803 0.017690 0.022550 0.027060 0.030877 0.033660 0.035336 0.035577 0.033565 0.028713 0.021064 0.011078 -0.000863 -0.014462 -0.029550 -0.046038 -0.063928 -0.083149 -0.103482 -0.124627 -0.146152 -0.167117 -0.186293 -0.204133 -0.223153 -0.246009 -0.273981 -0.304918 -0.334310 -0.360348 -0.383988 -0.406940 -0.430756 -0.455927 -0.482139 -0.508968 +0.009169 0.014052 0.019042 0.023730 0.027777 0.030722 0.032448 0.032698 0.030650 0.025603 0.017507 0.006881 -0.005836 -0.020341 -0.036458 -0.054116 -0.073304 -0.093893 -0.115622 -0.138192 -0.161102 -0.183069 -0.202953 -0.221962 -0.243030 -0.268716 -0.299885 -0.333456 -0.364707 -0.392433 -0.417910 -0.443081 -0.469479 -0.497298 -0.526085 -0.555420 +0.006050 0.010723 0.015760 0.020539 0.024765 0.027865 0.029630 0.029859 0.027740 0.022482 0.013922 0.002635 -0.010889 -0.026336 -0.043528 -0.062410 -0.082942 -0.104937 -0.128110 -0.152185 -0.176486 -0.199372 -0.220067 -0.240498 -0.263846 -0.292529 -0.326963 -0.363123 -0.396285 -0.425817 -0.453293 -0.480903 -0.510029 -0.540564 -0.571997 -0.603917 +0.003499 0.007783 0.012684 0.017518 0.021842 0.025071 0.026869 0.027054 0.024833 0.019345 0.010303 -0.001669 -0.016028 -0.032455 -0.050772 -0.070931 -0.092849 -0.116289 -0.140968 -0.166626 -0.192273 -0.216038 -0.237692 -0.259787 -0.285606 -0.317440 -0.355194 -0.393913 -0.429058 -0.460514 -0.490172 -0.520425 -0.552385 -0.585704 -0.619861 -0.654451 +0.001490 0.005236 0.009858 0.014657 0.019004 0.022327 0.024153 0.024276 0.021928 0.016189 0.006647 -0.006034 -0.021261 -0.038708 -0.058200 -0.079685 -0.103030 -0.127959 -0.154221 -0.181514 -0.208440 -0.233104 -0.255880 -0.279857 -0.308306 -0.343440 -0.384561 -0.425827 -0.463037 -0.496541 -0.528576 -0.561649 -0.596525 -0.632704 -0.669664 -0.707014 +-0.000121 0.003139 0.007316 0.011928 0.016259 0.019625 0.021473 0.021521 0.019021 0.013010 0.002949 -0.010467 -0.026596 -0.045104 -0.065821 -0.088677 -0.113491 -0.139960 -0.167888 -0.196836 -0.224978 -0.250604 -0.274671 -0.300722 -0.331943 -0.370526 -0.415042 -0.458867 -0.498231 -0.533919 -0.568529 -0.604567 -0.642433 -0.681552 -0.721401 -0.761602 +-0.001449 0.001406 0.005062 0.009371 0.013622 0.016963 0.018818 0.018784 0.016110 0.009805 -0.000797 -0.014974 -0.032039 -0.051651 -0.073640 -0.097912 -0.124235 -0.152307 -0.181979 -0.212567 -0.241898 -0.268567 -0.294100 -0.322383 -0.356515 -0.398693 -0.446622 -0.493039 -0.534649 -0.572667 -0.610048 -0.649163 -0.690097 -0.732240 -0.775063 -0.818211 + diff --git a/zmq_coupling_tests/templateDir/DISCON.IN b/zmq_coupling_tests/templateDir/DISCON.IN new file mode 100644 index 0000000000..7c4aacb165 --- /dev/null +++ b/zmq_coupling_tests/templateDir/DISCON.IN @@ -0,0 +1,192 @@ +! Controller parameter input file for the NREL-5MW wind turbine +! - File written using ROSCO version 2.8.0 controller tuning logic on 10/18/23 + +!------- SIMULATION CONTROL ------------------------------------------------------------ +1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} +0 ! DT_Out - {Time step to output .dbg* files, or 0 to match sampling period of OpenFAST} +0 ! Echo - (0 - no Echo, 1 - Echo input data to .echo) + +!------- CONTROLLER FLAGS ------------------------------------------------- +1 ! F_LPFType - (1: first-order low-pass filter, 2: second-order low-pass filter), [rad/s] (currently filters generator speed and pitch control signals +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +3 ! VS_ControlMode - Generator torque control mode in above rated conditions (0- no torque control, 1- k*omega^2 with PI transitions, 2- WSE TSR Tracking, 3- Power-based TSR Tracking)} +0 ! VS_ConstPower - Do constant power torque control, where above rated torque varies, 0 for constant torque} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +0 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time, 2: rotor position control} +0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} +0 ! AWC_Mode - Active wake control {0 - not used, 1 - complex number method, 2 - Coleman transform method} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} +0 ! CC_Mode - Cable control mode [0- unused, 1- User defined, 2- Open loop control] +0 ! StC_Mode - Structural control mode [0- unused, 1- User defined, 2- Open loop control] + +!------- FILTERS ---------------------------------------------------------- +1.57080 ! F_LPFCornerFreq - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +0 ! F_NumNotchFilts - Number of notch filters placed on sensors +0.0000 ! F_NotchFreqs - Natural frequency of the notch filters. Array with length F_NumNotchFilts +0.0000 ! F_NotchBetaNum - Damping value of numerator (determines the width of notch). Array with length F_NumNotchFilts, [-] +0.0000 ! F_NotchBetaDen - Damping value of denominator (determines the depth of notch). Array with length F_NumNotchFilts, [-] +0 ! F_GenSpdNotch_N - Number of notch filters on generator speed +0 ! F_GenSpdNotch_Ind - Indices of notch filters on generator speed +0 ! F_TwrTopNotch_N - Number of notch filters on tower top acceleration signal +0 ! F_TwrTopNotch_Ind - Indices of notch filters on tower top acceleration signal +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +0.0000 1.0000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.056789 0.084492 0.106018 0.124332 0.140807 0.155903 0.169931 0.183270 0.196062 0.208354 0.220050 0.231503 0.242646 0.253377 0.263967 0.274233 0.284343 0.294292 0.303997 0.313626 0.322957 0.332260 0.341319 0.350368 0.359221 0.368059 0.376700 0.385301 0.393691 0.402050 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-0.018995 -0.016672 -0.014787 -0.013228 -0.011916 -0.010797 -0.009831 -0.008989 -0.008248 -0.007592 -0.007006 -0.006480 -0.006005 -0.005574 -0.005182 -0.004822 -0.004492 -0.004187 -0.003906 -0.003644 -0.003402 -0.003175 -0.002963 -0.002765 -0.002579 -0.002404 -0.002239 -0.002083 -0.001936 -0.001797 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.008388 -0.007514 -0.006805 -0.006218 -0.005725 -0.005304 -0.004940 -0.004624 -0.004345 -0.004098 -0.003878 -0.003680 -0.003501 -0.003339 -0.003192 -0.003056 -0.002932 -0.002817 -0.002712 -0.002613 -0.002522 -0.002437 -0.002357 -0.002283 -0.002212 -0.002147 -0.002085 -0.002026 -0.001971 -0.001918 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.000880000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +122.9096700000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.000880000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +9.120000 11.400000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +2 ! IPC_SatMode - IPC Saturation method (0 - no saturation (except by PC_MinPit), 1 - saturate by PS_BldPitchMin, 2 - saturate sotfly (full IPC cycle) by PC_MinPit, 3 - saturate softly by PS_BldPitchMin) +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +94.40000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +43093.51876000 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +1500000.000000 ! VS_MaxRat - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +47402.87063000 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +35.29006000000 ! VS_MinOMSpd - Minimum generator speed [rad/s] +2.063350000000 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side). Only used in VS_ControlMode = 1,3 +5000000.000000 ! VS_RtPwr - Wind turbine rated power [W] +43093.51876000 ! VS_RtTq - Rated torque, [Nm]. +122.9096700000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-657.442080000 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-104.507080000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +7.64 ! VS_TSRopt - Power-maximizing region 2 tip-speed-ratio. Only used in VS_ControlMode = 2. +0.314000000000 ! VS_PwrFiltF - Low pass filter on power used to determine generator speed set point. Only used in VS_ControlMode = 3. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +2 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_GenSpeeds array +0.07854 ! PRC_LPF_Freq - Frequency of the low pass filter on the wind speed estimate used to set PRC_GenSpeeds [rad/s] +3.0000 25.0000 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s] +0.7917 0.7917 ! PRC_GenSpeeds - Array of generator speeds corresponding to PRC_WindSpeeds [rad/s] + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +63.000 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +97.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +43702538.05700 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"Cp_Ct_Cq.NREL5MW.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.2897 3.5793 3.8690 4.1586 4.4483 4.7379 5.0276 5.3172 5.6069 5.8966 6.1862 6.4759 6.7655 7.0552 7.3448 7.6345 7.9241 8.2138 8.5034 8.7931 9.0828 9.3724 9.6621 9.9517 10.2414 10.5310 10.8207 11.1103 11.4000 11.8533 12.3067 12.7600 13.2133 13.6667 14.1200 14.5733 15.0267 15.4800 15.9333 16.3867 16.8400 17.2933 17.7467 18.2000 18.6533 19.1067 19.5600 20.0133 20.4667 20.9200 21.3733 21.8267 22.2800 22.7333 23.1867 23.6400 24.0933 24.5467 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.01638154 -0.01796321 -0.01954487 -0.02112654 -0.02270820 -0.02428987 -0.02587154 -0.02745320 -0.02903487 -0.03061653 -0.03219820 -0.03377987 -0.03536153 -0.03694320 -0.03852486 -0.04010653 -0.04168820 -0.04326986 -0.04485153 -0.04643319 -0.04801486 -0.04959652 -0.05117819 -0.05275986 -0.05434152 -0.05592319 -0.05758373 -0.05882656 -0.06845507 -0.05992890 -0.05031134 -0.05798636 -0.06840333 -0.08061549 -0.09336590 -0.10698855 -0.12116040 -0.13530722 -0.15025447 -0.16589008 -0.18080009 -0.19651023 -0.21294470 -0.22969213 -0.24540879 -0.26178304 -0.27905964 -0.29706835 -0.31499595 -0.33136688 -0.34832584 -0.36677525 -0.38556416 -0.40554370 -0.42546670 -0.44309547 -0.46062268 -0.47954729 -0.49884696 -0.51943992 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER FORE-AFT DAMPING ------------------------------------------- +-1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] +0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +60 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.000 3.290 3.579 3.869 4.159 4.448 4.738 5.028 5.317 5.607 5.897 6.186 6.476 6.766 7.055 7.345 7.634 7.924 8.214 8.503 8.793 9.083 9.372 9.662 9.952 10.241 10.531 10.821 11.110 11.400 11.853 12.307 12.760 13.213 13.667 14.120 14.573 15.027 15.480 15.933 16.387 16.840 17.293 17.747 18.200 18.653 19.107 19.560 20.013 20.467 20.920 21.373 21.827 22.280 22.733 23.187 23.640 24.093 24.547 25.000 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.011 0.023 0.032 0.040 0.047 0.059 0.070 0.081 0.091 0.102 0.112 0.122 0.131 0.141 0.150 0.160 0.169 0.178 0.187 0.196 0.205 0.214 0.223 0.232 0.240 0.249 0.257 0.266 0.274 0.282 0.290 0.299 0.307 0.315 0.323 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +1 ! Fl_n - Number of Fl_Kp gains in gain scheduling, optional with default of 1 +0.0000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] +0.0000 ! Fl_U - Wind speeds for scheduling Fl_Kp, optional if Fl_Kp is single value [m/s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) + 0 0 0 ! Ind_BldPitch - The columns in OL_Filename that contains the blade pitch (1,2,3) inputs in rad [array] +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the yaw rate in rad/s +0 ! Ind_Azimuth - The column in OL_Filename that contains the desired azimuth position in rad (used if OL_Mode = 2) +0.0000 0.0000 0.0000 0.0000 ! RP_Gains - PID gains and Tf of derivative for rotor position control (used if OL_Mode = 2) +0 ! Ind_CableControl - The column(s) in OL_Filename that contains the cable control inputs in m [Used with CC_Mode = 2, must be the same size as CC_Group_N] +0 ! Ind_StructControl - The column(s) in OL_Filename that contains the structural control inputs [Used with StC_Mode = 2, must be the same size as StC_Group_N] + +!------- Pitch Actuator Model ----------------------------------------------------- +3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- Pitch Actuator Faults ----------------------------------------------------- +0.00000000 0.00000000 0.00000000 ! PF_Offsets - Constant blade pitch offsets for blades 1-3 [rad] + +!------- Active Wake Control ----------------------------------------------------- +1 ! AWC_NumModes - Number of user-defined AWC forcing modes +1 ! AWC_n - Azimuthal mode number(s) (i.e., the number and direction of the lobes of the wake structure) +1 ! AWC_harmonic - Harmonic(s) to apply in the AWC Inverse Coleman Transformation (only used when AWC_Mode = 2) +0.0500 ! AWC_freq - Frequency(s) of forcing mode(s) [Hz] +1.0000 ! AWC_amp - Pitch amplitude(s) of individual forcing mode(s) [deg] +0.0000 ! AWC_clockangle - Initial angle(s) of forcing mode(s) [deg] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +2.000000 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] + +!------- Cable Control --------------------------------------------------------- +1 ! CC_Group_N - Number of cable control groups +0 ! CC_GroupIndex - First index for cable control group, should correspond to deltaL +20.000000 ! CC_ActTau - Time constant for line actuator [s] + +!------- Structural Controllers --------------------------------------------------------- +1 ! StC_Group_N - Number of cable control groups +0 ! StC_GroupIndex - First index for structural control group, options specified in ServoDyn summary output diff --git a/zmq_coupling_tests/templateDir/IceDyn_Input.dat b/zmq_coupling_tests/templateDir/IceDyn_Input.dat new file mode 100644 index 0000000000..3cd7ff93ce --- /dev/null +++ b/zmq_coupling_tests/templateDir/IceDyn_Input.dat @@ -0,0 +1,74 @@ +------------------ IceDyn v1.01.x Input File ----------------------------------- +Freshwater Ice of Great Lakes input properties. +---------------------- STRUCTURE PROPERTIES ------------------------------------ + 1 NumLegs - number of support-structure legs in contact with ice + 0 LegPosX - array of size NumLegs: global X position of legs 1-NumLegs (m) + 0 LegPosY - array of size NumLegs: global Y position of legs 1-NumLegs (m) + 6 StWidth - array of size NumLegs: Width of the structure in contact with the ice, or diameter for cylindrical structures (m) +---------------------- ICE MODELS ---------------------------------------------- + 6 IceModel - Number that represents different ice models. {1: quasi-static load; 2:dynamic ice-structure interaction; 3: random ice load; 4: non-simultaneous ice failure; 5: sloping structure 6: large ice floe impact} + 1 IceSubModel - Number that represents different ice sub models. +---------------------- ICE PROPERTIES -General --------------------------------- +0.1 IceVel - Velocity of ice sheet movement (m/s) +0.8 IceThks - Thickness of the ice sheet (m) +1000 WtDen - Mass density of water (kg/m3) +900 IceDen - Mass density of ice (kg/m3) +0.0 InitLoc - Ice sheet initial location (m) +0.0 InitTm - Ice load starting time (s) +2 Seed1 - Random seed 1 +5 Seed2 - Random seed 2 +---------------------- ICE PROPERTIES - Ice Model 1, SubModel 1------------------ +2.7 Ikm - Indentation factor +3.5e6 Ag - Constant depends only on ice crystal type, used in calculating uniaxial stress (MPa-3s-1) +65000 Qg - Activation Energy (Jmol^-1) +8.314 Rg - Universal gas constant (Jmol-1K-1) +269 Tice - Ice temperature (K) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 2------------------- +0.3 Poisson - Poisson's ratio of ice +90.0 WgAngle - Wedge Angel, degree. Default 90 Degrees. +9.5 EIce - Young's modulus of ice (GPa) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 3------------------- +5 SigNm - Nominal ice stress (MPa) +---------------------- ICE PROPERTIES -Ice Model 2, SubModel 1,2----------------- +1.0 Pitch - Distance between sequential ice teeth (m) +5.0 IceStr2 - Ice failure stress (MPa) +1.0 Delmax2 - Ice tooth maximum elastic deformation (m) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 1,2----------------- +0.5 ThkMean - Mean value of ice thickness (m) +0.04 ThkVar - Variance of ice thickness (m^2) +0.001 VelMean - Mean value of ice velocity (m/s) +1e-6 VelVar - Variance of ice velocity (m^2/s^2) +15 TeMean - Mean value of ice loading event duration (s) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 2,3----------------- +5 StrMean - Mean value of ice strength (MPa) +1 StrVar - Variance of ice strength (MPa) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 3------------------- +0.1 DelMean - Mean value of maximum ice tooth tip displacement (m) +0.01 DelVar - Variance of maximum ice tooth tip displacement (m^2) +0.2 PMean - Mean value of the distance between sequential ice teeth (m) +0.01 PVar - Variance of the distance between sequential ice teeth (m^2) +---------------------- ICE PROPERTIES -Ice Model 4 ------------------------------ +0 PrflMean - Mean value of ice contact face position (m) +0.02 PrflSig - Standard deviation of ice contact face position (m) +10 ZoneNo1 - Number of failure zones along contact width +1 ZoneNo2 - Number of failure zones along contact height/thickness +0.27 ZonePitch - Distance between sequential ice teeth (m) +5.0 IceStr - Ice failure stress within each failure region (MPa) +0.027 Delmax - Ice teeth maximum elastic deformatIon (m) +---------------------- ICE PROPERTIES -Ice Model 5, Submodel 1,2 ----------------- +55.0 ConeAgl - Slope angle of the cone (degree) +8.0 ConeDwl - Cone waterline diameter (m) +1.0 ConeDtp - Cone top diameter (m) +0.3 RdupThk - Ride-up ice thickness (m) +0.3 mu - Friction coefficient between structure and ice (-) +0.7 FlxStr - Flexural strength of ice (MPa) +0.1 StrLim - Limit strain for ice fracture failure (-) +1e-2 StrRtLim - Limit strain rate for ice brittle behavior (s^-1) +---------------------- ICE PROPERTIES -Ice Model 6 ------------------------------- +800 FloeLth - Ice floe length (m) +800 FloeWth - Ice floe width (m) +5.0 CPrAr - Ice crushing strength pressure-area relation constant +-0.5 dPrAr - Ice crushing strength pressure-area relation order +9 Fdr - Constant external driving force (MN) +140 Kic - Fracture toughness of ice (kNm^(-3/2)) +3.3 FspN - Non-dimensional splitting load \ No newline at end of file diff --git a/zmq_coupling_tests/templateDir/IceFloe_IEC_Crushing.dat b/zmq_coupling_tests/templateDir/IceFloe_IEC_Crushing.dat new file mode 100644 index 0000000000..66ae737cf7 --- /dev/null +++ b/zmq_coupling_tests/templateDir/IceFloe_IEC_Crushing.dat @@ -0,0 +1,51 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 60.0 +randomSeed 123 +rampTime 10.0 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 1.2 +numLegs 4.0 +towerFrequency 0.28 +! +legX1 4.5 +legY1 4.5 +shelterFactor_ks1 1.0 +loadPhase1 0.0 +! +legX2 -4.5 +legY2 4.5 +shelterFactor_ks2 1.0 +loadPhase2 45.0 +! +legX3 4.5 +legY3 -4.5 +shelterFactor_ks3 1.0 +loadPhase3 135.0 +! +legX4 -4.5 +legY4 -4.5 +shelterFactor_ks4 1.0 +loadPhase4 290.0 +! +singleLoad 0 +legAutoFactor 0 +multiLegFactor_kn 1 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templateDir/Main02.AD.sum b/zmq_coupling_tests/templateDir/Main02.AD.sum new file mode 100644 index 0000000000..fc8b0bd8b9 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.AD.sum @@ -0,0 +1,55 @@ + +This summary information was generated by AeroDyn on 11-Jun-2024 at 10:00:11. + +====== General Options ============================================================================ + 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory + 2 AFAeroMod - Type of blade airfoil aerodynamics model: Beddoes-Leishman unsteady model + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +====== Blade-Element/Momentum Theory Options ====================================================== + 2 SkewMod - Type of skewed-wake correction model: Pitt/Peters + T TipLoss - Use the Prandtl tip-loss model? Yes + T HubLoss - Use the Prandtl hub-loss model? Yes + T TanInd - Include tangential induction in BEMT calculations? Yes + F AIDrag - Include the drag term in the axial-induction calculation? No + F TIDrag - Include the drag term in the tangential-induction calculation? No + 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== + 3 UAMod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 0 NBlOuts - Number of blade nodes selected for output + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templateDir/Main02.ED.sum b/zmq_coupling_tests/templateDir/Main02.ED.sum new file mode 100644 index 0000000000..8abf6daaed --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.ED.sum @@ -0,0 +1,210 @@ + +This summary information was generated by ElastoDyn on 11-Jun-2024 at 10:00:11. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 16 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Enabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.00500000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 0.000 + Mass Incl. Platform (kg) 696850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 OoPDefl1 (m) + 2 IPDefl1 (m) + 3 TwstDefl1 (deg) + 4 BldPitch1 (deg) + 5 Azimuth (deg) + 6 RotSpeed (rpm) + 7 GenSpeed (rpm) + 8 TTDspFA (m) + 9 TTDspSS (m) + 10 TTDspTwst (deg) + 11 Spn2MLxb1 (kN-m) + 12 Spn2MLyb1 (kN-m) + 13 RootFxb1 (kN) + 14 RootFyb1 (kN) + 15 RootFzb1 (kN) + 16 RootMxb1 (kN-m) + 17 RootMyb1 (kN-m) + 18 RootMyc1 (kN-m) + 19 RootMyc2 (kN-m) + 20 RootMyc3 (kN-m) + 21 RootMzb1 (kN-m) + 22 RotTorq (kN-m) + 23 LSSGagMya (kN-m) + 24 LSSGagMza (kN-m) + 25 YawBrFxp (kN) + 26 YawBrFyp (kN) + 27 YawBrFzp (kN) + 28 YawBrMxp (kN-m) + 29 YawBrMyp (kN-m) + 30 YawBrMzp (kN-m) + 31 TwrBsFxt (kN) + 32 TwrBsFyt (kN) + 33 TwrBsFzt (kN) + 34 TwrBsMxt (kN-m) + 35 TwrBsMyt (kN-m) + 36 TwrBsMzt (kN-m) + 37 NcIMURAys (deg/s^2) + 38 NcIMUTAxs (m/s^2) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templateDir/Main02.SrvD.sum b/zmq_coupling_tests/templateDir/Main02.SrvD.sum new file mode 100644 index 0000000000..341a7f6bf6 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 11-Jun-2024 at 10:00:11. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 0 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 11-Jun-2024 at 10:00:11. + diff --git a/zmq_coupling_tests/templateDir/Main02.UA.sum b/zmq_coupling_tests/templateDir/Main02.UA.sum new file mode 100644 index 0000000000..3a1ab207e3 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.UA.sum @@ -0,0 +1,16 @@ + +Predictions were generated on 11-Jun-2024 at 10:00:11 + OpenFAST + + + +AirfoilNumber TableNumber alpha0 alpha1 alpha2 eta_e C_nalpha C_lalpha T_f0 T_V0 T_p T_VL b1 b2 b5 A1 A2 A5 S1 S2 S3 S4 Cn1 Cn2 St_sh Cd0 Cm0 k0 k1 k2 k3 k1_hat x_cp_bar UACutout UACutout_delta UACutout_blend filtCutOff alphaLowerWrap alphaLower alphaUpper alphaUpperWrap c_alphaLowerWrap c_alphaLower c_alphaUpper c_alphaUpperWrap c_RateWrap c_RateLower c_Rate c_RateUpper +(-) (-) (deg) (deg) (deg) (-) (-/rad) (-/rad) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (deg) (deg) (deg) (-) (deg) (deg) (deg) (deg) (-) (-) (-) (-) (-/rad) (-/rad) (-/rad) (-/rad) + 1 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 2 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 3 1 -3.20000 9.00000 -9.00000 1.00000 7.48880 9.05273 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.35190 -0.32260 0.19000 0.03000 -0.05000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -0.25000 2.25000 55.00000 -5.61045 0.10507 0.47793 8.35959 -3.07855 7.31788 8.54531 8.56087 + 4 1 -1.20000 11.50000 -11.50000 1.00000 7.18380 8.82355 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.67170 -0.30750 0.19000 0.01200 -0.07000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -40.00000 -2.75000 5.75000 50.00000 -5.56999 -0.20172 0.96897 6.72117 -2.60827 8.25716 7.89125 7.44806 + 5 1 -2.20000 9.00000 -9.00000 1.00000 7.33260 8.47978 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.44900 -0.61380 0.19000 0.00800 -0.09000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -6.39000 6.25000 45.00000 -5.67249 -0.57626 1.09716 5.87251 -2.44993 7.56262 7.58542 7.06084 + 6 1 -3.20000 8.50000 -8.50000 1.00000 6.44620 7.97647 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.43360 -0.68730 0.19000 0.00600 -0.12000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -7.96000 3.75000 32.00000 -5.53755 -0.61874 0.91909 4.38619 -2.00914 7.60871 7.52444 7.03186 + 7 1 -4.20000 8.00000 -8.00000 1.00000 6.20470 8.96402 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.41440 -0.53240 0.19000 0.00600 -0.12100 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -35.00000 -9.05000 2.75000 30.00000 -4.67755 -0.67498 0.85701 4.10998 -1.70674 8.83741 7.43866 6.83970 + 8 1 -4.43200 9.00000 -9.00000 1.00000 6.00310 7.67763 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.40730 -0.79450 0.19000 0.00650 -0.08800 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -50.00000 -5.50000 4.50000 28.00000 -6.14917 -0.20664 0.95141 3.60393 -1.98160 7.65128 6.63516 6.46715 diff --git a/zmq_coupling_tests/templateDir/Main02.ech b/zmq_coupling_tests/templateDir/Main02.ech new file mode 100644 index 0000000000..f350cdab6a --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.ech @@ -0,0 +1,103 @@ + +This file of echoed input was generated by OpenFAST on 11-Jun-2024 at 10:00:11. + +Data from OpenFAST primary input file "Main02.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 2.0000E+01 TMax - Total run time (s) + 5.0000E-03 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) + 1.2250E+00 AirDens - Air density (kg/m^3) + 1.0250E+03 WtrDens - Water density (kg/m^3) + 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) + 1.0350E+05 Patm - Atmospheric pressure (Pa) + 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) + 5.0000E+01 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + T SumPrint - Print summary data to .sum (flag) + 5.0000E+00 SttsTime - Amount of time between screen status messages (s) + 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES10.3E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + T VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "https://127.0.1:5555" + 0 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + " + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 4 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + "Wind1VelX" "Azimuth" "GenTq" "GenPwr" diff --git a/zmq_coupling_tests/templateDir/Main02.fst b/zmq_coupling_tests/templateDir/Main02.fst new file mode 100644 index 0000000000..d82e03d109 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.fst @@ -0,0 +1,84 @@ +------- OpenFAST example INPUT FILE ------------------------------------------- +FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +20.0 TMax - Total run time (s) +0.005 DT - Recommended module time step (s) +2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} +0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} +99999 DT_UJac - Time between calls to get Jacobians (s) +1000000.0 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ +1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} +1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} +2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} +1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} +0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} +0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} +0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} +0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} +0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- +9.80665 Gravity - Gravitational acceleration (m/s^2) +1.225 AirDens - Air density (kg/m^3) +1025 WtrDens - Water density (kg/m^3) +1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) +335 SpdSound - Speed of sound in working fluid (m/s) +103500 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] +1700 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] +50 WtrDpth - Water depth (m) +0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +5 SttsTime - Amount of time between screen status messages (s) +99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +default DT_Out - Time step for tabular output (s) (or "default") +0 TStart - Time to begin tabular output (s) +0 OutFileFmt - Format for tabular (time-marching) output file (switch) {0: uncompressed binary [.outb], 1: text file [.out], 2: binary file [.outb], 3: both 1 and 2} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) +3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) +0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) +0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) +0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) +0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) +2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] +30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] +1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] +1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ +0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} +1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +True VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] +15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"https://127.0.1:5555" ZmqInAddress - REQ-REP localhost address +0 ZmqInNbr - Number of parameters to be requested +none ZmqInChannels - Channels to be requested at communication time +default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +4 ZmqOutNbr - Number of channels to be broadcasted +"Wind1VelX" +"Azimuth" +"GenTq" +"GenPwr" ZmqOutChannels - Channels to be broadcasterd at communication time +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) diff --git a/zmq_coupling_tests/templateDir/Main02.outb b/zmq_coupling_tests/templateDir/Main02.outb new file mode 100644 index 0000000000000000000000000000000000000000..948b542a25857a2cdbc2c66b75b16513228fac42 GIT binary patch literal 1761946 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 z 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 z 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≠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

g6GT^AieNKMRiiNF` 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ξ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

Detg!){-Z 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

htm_LGjwNt{m2?a^s7)kVAh(*! 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

YCi>i`GwhO{BrQ!*75X#XHhHkFRI#C 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�`|Kqly9dfad$_?I9 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�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

SFzbvRW;|S! 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

=x@@>7S(SYqT)KmVE;?vGqJ9c-9dX)O4v2qW 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%0Aktwu9uzHKX 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%0A;Nt!B!|_LoAoa}>w@>Jv^!OpQ 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

6aDCF<4Tq$e?oJ{hC`+*%yYwxpqX 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 VixCb~4D{3WkehFBPrxj4`wyM62wngH literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/templateDir/Main02.sum b/zmq_coupling_tests/templateDir/Main02.sum new file mode 100644 index 0000000000..a826dc2222 --- /dev/null +++ b/zmq_coupling_tests/templateDir/Main02.sum @@ -0,0 +1,103 @@ + +FAST Summary File + +Predictions were generated on 11-Jun-2024 at 10:00:11 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-6-g45416d6a + compiled with + NWTC Subroutine Library + ElastoDyn + BeamDyn (unknown version, unknown date) [not called] + InflowWind + AeroDyn14 (unknown version, unknown date) [not called] + AeroDyn + ServoDyn + HydroDyn (unknown version, unknown date) [not called] + SubDyn (unknown version, unknown date) [not called] + ExtPtfm_MCKF (unknown version, unknown date) [not called] + MAP (unknown version, unknown date) [not called] + FEAMooring (unknown version, unknown date) [not called] + MoorDyn (unknown version, unknown date) [not called] + OrcaFlexInterface (unknown version, unknown date) [not called] + IceFloe (unknown version, unknown date) [not called] + IceDyn (unknown version, unknown date) [not called] + + +Modeling a land-based turbine +Description from the FAST input file: + FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) + +Interpolation order for input/output time histories: 2 (quadratic) +Number of correction iterations: 0 + + + Requested Time Steps + ------------------------------------------------- + Component Time Step (s) Subcycles (-) + ----------------- --------------- ------------- + FAST (glue code) 5.000E-03 + InflowWind 5.000E-03 1 + ElastoDyn 5.000E-03 1 + AeroDyn 5.000E-03 1 + ServoDyn 5.000E-03 1 + FAST output files 5.000E-03 1 + + + Requested Channels in FAST Output File(s) + -------------------------------------------- + Number Name Units Generated by + ------ -------------------- -------------------- ------------ + 1 Time (s) OpenFAST + 2 Wind1VelX (m/s) InflowWind + 3 Wind1VelY (m/s) InflowWind + 4 Wind1VelZ (m/s) InflowWind + 5 OoPDefl1 (m) ElastoDyn + 6 IPDefl1 (m) ElastoDyn + 7 TwstDefl1 (deg) ElastoDyn + 8 BldPitch1 (deg) ElastoDyn + 9 Azimuth (deg) ElastoDyn + 10 RotSpeed (rpm) ElastoDyn + 11 GenSpeed (rpm) ElastoDyn + 12 TTDspFA (m) ElastoDyn + 13 TTDspSS (m) ElastoDyn + 14 TTDspTwst (deg) ElastoDyn + 15 Spn2MLxb1 (kN-m) ElastoDyn + 16 Spn2MLyb1 (kN-m) ElastoDyn + 17 RootFxb1 (kN) ElastoDyn + 18 RootFyb1 (kN) ElastoDyn + 19 RootFzb1 (kN) ElastoDyn + 20 RootMxb1 (kN-m) ElastoDyn + 21 RootMyb1 (kN-m) ElastoDyn + 22 RootMyc1 (kN-m) ElastoDyn + 23 RootMyc2 (kN-m) ElastoDyn + 24 RootMyc3 (kN-m) ElastoDyn + 25 RootMzb1 (kN-m) ElastoDyn + 26 RotTorq (kN-m) ElastoDyn + 27 LSSGagMya (kN-m) ElastoDyn + 28 LSSGagMza (kN-m) ElastoDyn + 29 YawBrFxp (kN) ElastoDyn + 30 YawBrFyp (kN) ElastoDyn + 31 YawBrFzp (kN) ElastoDyn + 32 YawBrMxp (kN-m) ElastoDyn + 33 YawBrMyp (kN-m) ElastoDyn + 34 YawBrMzp (kN-m) ElastoDyn + 35 TwrBsFxt (kN) ElastoDyn + 36 TwrBsFyt (kN) ElastoDyn + 37 TwrBsFzt (kN) ElastoDyn + 38 TwrBsMxt (kN-m) ElastoDyn + 39 TwrBsMyt (kN-m) ElastoDyn + 40 TwrBsMzt (kN-m) ElastoDyn + 41 NcIMURAys (deg/s^2) ElastoDyn + 42 NcIMUTAxs (m/s^2) ElastoDyn + 43 RtFldFxh (N) AeroDyn + 44 RtFldFyh (N) AeroDyn + 45 RtFldFzh (N) AeroDyn + 46 RtFldMxh (N-m) AeroDyn + 47 RtFldMyh (N-m) AeroDyn + 48 RtFldMzh (N-m) AeroDyn + 49 RtVAvgxh (m/s) AeroDyn + 50 RtFldCp (-) AeroDyn + 51 RtFldCt (-) AeroDyn + 52 RtArea (m^2) AeroDyn + 53 RtSpeed (rpm) AeroDyn + 54 RtTSR (-) AeroDyn + 55 GenTq (kN-m) ServoDyn + 56 GenPwr (kW) ServoDyn diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_AeroDyn_blade.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_AeroDyn_blade.dat new file mode 100644 index 0000000000..9d541024d0 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_AeroDyn_blade.dat @@ -0,0 +1,28 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 + +!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m +6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn.dat new file mode 100644 index 0000000000..2f8ab74652 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn.dat @@ -0,0 +1,94 @@ +--------- BEAMDYN with OpenFAST INPUT FILE ------------------------------------------- +NREL 5MW blade +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech"? (flag) +True QuasiStaticInit - Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only] + 0 rhoinf - Numerical damping parameter for generalized-alpha integrator + 2 quadrature - Quadrature method: 1=Gaussian; 2=Trapezoidal (switch) +"DEFAULT" refine - Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2] +"DEFAULT" n_fact - Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5] +"DEFAULT" DTBeam - Time step size (s) +"DEFAULT" load_retries - Number of factored load retries before quitting the simulation [DEFAULT = 20] +"DEFAULT" NRMax - Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10] +"DEFAULT" stop_tol - Tolerance for stopping criterion (-) [DEFAULT = 1E-5] +"DEFAULT" tngt_stf_fd - Use finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_comp - Compare analytical finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_pert - Perturbation size for finite differencing (-) [DEFAULT = 1E-6] +"DEFAULT" tngt_stf_difftol - Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1] +True RotStates - Orient states in the rotating frame during linearization? (flag) [used only when linearizing] +---------------------- GEOMETRY PARAMETER -------------------------------------- + 1 member_total - Total number of members (-) + 49 kp_total - Total number of key points (-) [must be at least 3] + 1 49 - Member number; Number of key points in this member + kp_xr kp_yr kp_zr initial_twist + (m) (m) (m) (deg) +0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.9987500E-01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1998650E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 2.1998550E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 3.1998450E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 4.1998350E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 5.1998250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 6.1998150E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 7.1998050E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 8.2010250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 9.1997850E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.0199775E+01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1199765E+01 1.3181000E+01 +0.0000000E+00 0.0000000E+00 1.2199755E+01 1.2848000E+01 +0.0000000E+00 0.0000000E+00 1.3200975E+01 1.2192000E+01 +0.0000000E+00 0.0000000E+00 1.4199735E+01 1.1561000E+01 +0.0000000E+00 0.0000000E+00 1.5199725E+01 1.1072000E+01 +0.0000000E+00 0.0000000E+00 1.6199715E+01 1.0792000E+01 +0.0000000E+00 0.0000000E+00 1.8200925E+01 1.0232000E+01 +0.0000000E+00 0.0000000E+00 2.0200290E+01 9.6720000E+00 +0.0000000E+00 0.0000000E+00 2.2200270E+01 9.1100000E+00 +0.0000000E+00 0.0000000E+00 2.4200250E+01 8.5340000E+00 +0.0000000E+00 0.0000000E+00 2.6200230E+01 7.9320000E+00 +0.0000000E+00 0.0000000E+00 2.8200825E+01 7.3210000E+00 +0.0000000E+00 0.0000000E+00 3.0200190E+01 6.7110000E+00 +0.0000000E+00 0.0000000E+00 3.2200170E+01 6.1220000E+00 +0.0000000E+00 0.0000000E+00 3.4200150E+01 5.5460000E+00 +0.0000000E+00 0.0000000E+00 3.6200130E+01 4.9710000E+00 +0.0000000E+00 0.0000000E+00 3.8200725E+01 4.4010000E+00 +0.0000000E+00 0.0000000E+00 4.0200090E+01 3.8340000E+00 +0.0000000E+00 0.0000000E+00 4.2200070E+01 3.3320000E+00 +0.0000000E+00 0.0000000E+00 4.4200050E+01 2.8900000E+00 +0.0000000E+00 0.0000000E+00 4.6200030E+01 2.5030000E+00 +0.0000000E+00 0.0000000E+00 4.8201240E+01 2.1160000E+00 +0.0000000E+00 0.0000000E+00 5.0199990E+01 1.7300000E+00 +0.0000000E+00 0.0000000E+00 5.2199970E+01 1.3420000E+00 +0.0000000E+00 0.0000000E+00 5.4199950E+01 9.5400000E-01 +0.0000000E+00 0.0000000E+00 5.5199940E+01 7.6000000E-01 +0.0000000E+00 0.0000000E+00 5.6199930E+01 5.7400000E-01 +0.0000000E+00 0.0000000E+00 5.7199920E+01 4.0400000E-01 +0.0000000E+00 0.0000000E+00 5.7699915E+01 3.1900000E-01 +0.0000000E+00 0.0000000E+00 5.8201140E+01 2.5300000E-01 +0.0000000E+00 0.0000000E+00 5.8699905E+01 2.1600000E-01 +0.0000000E+00 0.0000000E+00 5.9199900E+01 1.7800000E-01 +0.0000000E+00 0.0000000E+00 5.9699895E+01 1.4000000E-01 +0.0000000E+00 0.0000000E+00 6.0199890E+01 1.0100000E-01 +0.0000000E+00 0.0000000E+00 6.0699885E+01 6.2000000E-02 +0.0000000E+00 0.0000000E+00 6.1199880E+01 2.3000000E-02 +0.0000000E+00 0.0000000E+00 6.1500000E+01 0.0000000E+00 +---------------------- MESH PARAMETER ------------------------------------------ + 5 order_elem - Order of interpolation (basis) function (-) +---------------------- MATERIAL PARAMETER -------------------------------------- +"NRELOffshrBsline5MW_BeamDyn_Blade.dat" BldFile - Name of file containing properties for blade (quoted string) +---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- +False UsePitchAct - Whether a pitch actuator should be used (flag) + 200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] + 2E+07 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] + 500000 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] +---------------------- OUTPUTS ------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. + 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) + 1, 2, 3, 4, 5, 6 OutNd - Nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RootFxr, RootFyr, RootFzr" +"RootMxr, RootMyr, RootMzr" +"TipTDxr, TipTDyr, TipTDzr" +"TipRDxr, TipRDyr, TipRDzr" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn_Blade.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn_Blade.dat new file mode 100644 index 0000000000..b8724b9a23 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn_Blade.dat @@ -0,0 +1,756 @@ + ------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- + Test Format 1 + ---------------------- BLADE PARAMETERS -------------------------------------- +49 station_total - Number of blade input stations (-) + 1 damp_type - Damping type: 0: no damping; 1: damped + ---------------------- DAMPING COEFFICIENT------------------------------------ + mu1 mu2 mu3 mu4 mu5 mu6 + (-) (-) (-) (-) (-) (-) +1.0E-03 1.0E-03 1.0E-03 0.0014 0.0022 0.0022 + ---------------------- DISTRIBUTED PROPERTIES--------------------------------- + 0.000000 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.003250 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.019510 + 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.078950E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.955860E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.942490E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.431590E+09 + + 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.733630E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.066380E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.091520E+03 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.157900E+03 + + 0.035770 + 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.006723E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.949780E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.745590E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.993980E+09 + + 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.405500E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.047360E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.660900E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.013450E+03 + + 0.052030 + 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.867780E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.978880E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.528740E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.666590E+09 + + 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.400420E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.099750E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.738100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.973560E+03 + + 0.068290 + 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.607860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.485850E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.078240E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.474710E+09 + + 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.924960E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.730200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.485500E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521570E+03 + + 0.084550 + 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.491260E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.022060E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.229720E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.323540E+09 + + 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.502750E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.414900E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.567600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.098250E+03 + + 0.100810 + 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.971300E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 9.144700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.309540E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.907870E+09 + + 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.240540E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.937300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.005300E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.942600E+02 + + 0.117070 + 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.493950E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.063160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.528360E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.570360E+09 + + 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.006380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.471800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.516100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.987900E+02 + + 0.133350 + 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.034800E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.884440E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.980060E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.158260E+09 + + 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.820620E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.908400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.161200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.069600E+02 + + 0.149590 + 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.037290E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.009180E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.936840E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.002120E+09 + + 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.996550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.038600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.036000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.074600E+02 + + 0.165850 + 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.169720E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.167680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.691660E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.559000E+08 + + 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.263210E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.447000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.892400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.339400E+02 + + 0.182110 + 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.082350E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.271660E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.949460E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.722700E+08 + + 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.168200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.699000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.465700E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.164700E+02 + + 0.198370 + 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.085970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.081700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.386520E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.474900E+08 + + 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.061860E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.012800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.159100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.171900E+02 + + 0.214650 + 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.668340E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.244530E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.933740E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.488400E+08 + + 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.814200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.465600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.871100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.336700E+02 + + 0.230890 + 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.147760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.048960E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.568960E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.359200E+08 + + 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.528220E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.687100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.608400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.295500E+02 + + 0.247150 + 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.011580E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.948490E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.388650E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.113500E+08 + + 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.494770E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.537600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.485600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.023200E+02 + + 0.263410 + 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.882620E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.808020E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.271990E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.919400E+08 + + 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.465380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.362200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.403000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.765200E+02 + + 0.295950 + 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.613970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.501400E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.050050E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.610000E+08 + + 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.393330E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.981800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.246100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.227900E+02 + + 0.328460 + 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.357480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.244070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.828250E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.288200E+08 + + 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.300040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.620800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.094200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.715000E+02 + + 0.360980 + 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.146860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.995280E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.588710E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.007500E+08 + + 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.219900E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.350100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.436000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.293700E+02 + + 0.393500 + 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.944090E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.750760E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.361930E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.743800E+08 + + 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.138200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.085700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.024000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.888100E+02 + + 0.426020 + 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.632700E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.447140E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.102380E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.444700E+08 + + 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.947340E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.638700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.267000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.265400E+02 + + 0.458550 + 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.432400E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.139070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.758000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.199800E+08 + + 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.871200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.370600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.942000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.864800E+02 + + 0.491060 + 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.168760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.734240E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.813000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.119000E+07 + + 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.633430E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.964100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.734000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.337500E+02 + + 0.523580 + 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.047430E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.554870E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.347200E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.909000E+07 + + 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.532070E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.803400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.914000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.094800E+02 + + 0.556100 + 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.229500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.334030E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.089000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.745000E+07 + + 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.416660E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.624300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.216000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845900E+02 + + 0.588620 + 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.608200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.828730E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.145400E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.592000E+07 + + 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.206380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.348300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.733000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521600E+02 + + 0.621150 + 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.480300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.584100E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.386300E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.598000E+07 + + 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.002930E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.163000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.330000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.296000E+02 + + 0.653660 + 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.397000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.323360E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.758800E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.744000E+07 + + 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.794040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.798000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.960000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.079400E+02 + + 0.686180 + 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.311500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.183680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.260100E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.090000E+07 + + 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.650940E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.893000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.300000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.062300E+02 + + 0.718700 + 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.600100E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.020160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.072600E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.854000E+07 + + 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.544110E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.578000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.220000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.200000E+01 + + 0.751220 + 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.757500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.978100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.088000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.628000E+07 + + 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.389350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.996000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.190000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.515000E+01 + + 0.783760 + 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.288900E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.096100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.631000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.453000E+07 + + 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.295550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.141000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.577000E+01 + + 0.816260 + 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.440400E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.181900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.105000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.070000E+06 + + 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.072640E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.544000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.880000E+01 + + 0.848780 + 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.116000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.548700E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.948000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.060000E+06 + + 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.877600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.957000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.750000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.232000E+01 + + 0.881300 + 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.815200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.951200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.936000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.080000E+06 + + 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.024800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.409000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.210000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.630000E+01 + + 0.897560 + 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.602500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.537200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.467000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.090000E+06 + + 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 8.300100E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.012000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.930000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.205000E+01 + + 0.913820 + 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.092300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.047300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.041000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.750000E+06 + + 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.290600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.015000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.690000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.184000E+01 + + 0.930080 + 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.000800E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.814200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.652000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.330000E+06 + + 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.877200E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.853000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.490000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.002000E+01 + + 0.938210 + 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.224000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.617100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.384000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.940000E+06 + + 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.626400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.711000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.340000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845000E+01 + + 0.946360 + 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.323000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.588100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.963000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.240000E+06 + + 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.934000E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.155000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.100000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.265000E+01 + + 0.954470 + 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.332000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.378800E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.600000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.660000E+06 + + 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.591400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.770000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.066000E+01 + + 0.962600 + 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.453000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.187900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.283000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.130000E+06 + + 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.248400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.190000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.100000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E+00 + + 0.970730 + 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.690000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.016300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.008000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.640000E+06 + + 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.911400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.820000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.600000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.380000E+00 + + 0.978860 + 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.992000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.507000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.550000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.170000E+06 + + 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.581800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.570000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.200000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.990000E+00 + + 0.986990 + 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.131000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.426000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.600000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.580000E+06 + + 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.166900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.010000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.260000E+00 + + 0.995120 + 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.850000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.610000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 + + 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.145300E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.400000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.800000E-01 + + 1.000000 + 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.530000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.010000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.700000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.900000E+05 + + 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.031900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.800000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.000000E-01 + + + + + + + + + + + + diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Blade.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Blade.dat new file mode 100644 index 0000000000..cf5aa25dfe --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Blade.dat @@ -0,0 +1,83 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 +3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 +5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 +6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 +8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 +1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 +1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 +1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 +1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 +1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 +1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 +1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 +2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 +2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 +2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 +2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 +2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 +3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 +3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 +3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 +4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 +4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 +4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 +5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 +5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 +5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 +6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 +6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 +6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 +7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 +7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 +7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 +8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 +8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 +8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 +8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 +9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 +9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 +9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 +9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 +9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 +9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 +9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 +9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 +9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 +9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 +1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 + + diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_InflowWind.dat new file mode 100644 index 0000000000..b82ff07000 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_InflowWind.dat @@ -0,0 +1,71 @@ +------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- +Steady 8 m/s winds with no shear for FAST CertTests #20 and #25 +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 1 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) +False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 90 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 10 HWindSpeed - Horizontal windspeed (m/s) + 90 RefHt - Reference height for horizontal wind speed (m) + 0 PLexp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +"uniform.hh" Filename_Uni - Filename of time series data for uniform wind field. (-) + 90 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"Wind/90m_12mps_twr.bts" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 90 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 11.4 URef - Mean u-component wind speed at the reference height (m/s) + 0 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +================== LIDAR Parameters =========================================================================== +0 SensorType - Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed) +0 NumPulseGate - Number of lidar measurement gates (used when SensorType = 3) +30 PulseSpacing - Distance between range gates (m) (used when SensorType = 3) +0 NumBeam - Number of lidar measurement beams (0-5)(used when SensorType = 1) +-200 FocalDistanceX - Focal distance co-ordinates of the lidar beam in the x direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceY - Focal distance co-ordinates of the lidar beam in the y direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceZ - Focal distance co-ordinates of the lidar beam in the z direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0.0 0.0 0.0 RotorApexOffsetPos - Offset of the lidar from hub height (m) +17 URefLid - Reference average wind speed for the lidar[m/s] +0.25 MeasurementInterval - Time between each measurement [s] +False LidRadialVel - TRUE => return radial component, FALSE => return 'x' direction estimate +1 ConsiderHubMotion - Flag whether to consider the hub motion's impact on Lidar measurements +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp new file mode 100644 index 0000000000..ad085b6d0e --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp @@ -0,0 +1,26 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 600.0 +randomSeed 123 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 6.0 +numLegs 1.0 +towerFrequency 0.28 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat new file mode 100644 index 0000000000..f21b8af75d --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -0,0 +1,106 @@ +------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False Buoyancy - Include buoyancy effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] +"unused" AA_InputFile - Aeroacoustics input file +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) + 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] + 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] + 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils/Cylinder2.dat" +"Airfoils/DU40_A17.dat" +"Airfoils/DU35_A17.dat" +"Airfoils/DU30_A17.dat" +"Airfoils/DU25_A17.dat" +"Airfoils/DU21_A17.dat" +"Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +0.0 VolHub - Hub volume (m^3) +0.0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] +0.0 VolNac - Nacelle volume (m^3) +0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail fin Aerodynamics ======================================================================== +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.000000E-01 0.0 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.000000E-01 0.0 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.000000E-01 0.0 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.000000E-01 0.0 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.000000E-01 0.0 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.000000E-01 0.0 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.000000E-01 0.0 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.000000E-01 0.0 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 0 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtFldFxh" +"RtFldFyh" +"RtFldFzh" +"RtFldMxh" +"RtFldMyh" +"RtFldMzh" +"RtVAvgxh" +"RtFldCp" +"RtFldCt" +"RtArea" +"RtSpeed" +"RtTSR" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat new file mode 100644 index 0000000000..8bd9386371 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -0,0 +1,160 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"DEFAULT" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +True YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 5 BlPitch(1) - Blade 1 initial pitch (degrees) + 5 BlPitch(2) - Blade 2 initial pitch (degrees) + 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 8 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 0 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 0 PtfmMass - Platform mass (kg) + 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"BldPitch1" - Blade 1 pitch angle +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction +"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat new file mode 100644 index 0000000000..664185cbd6 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat @@ -0,0 +1,54 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline tower input properties. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 5.5908700E+03 6.1434300E+11 6.1434300E+11 +1.0000000E-01 5.2324300E+03 5.3482100E+11 5.3482100E+11 +2.0000000E-01 4.8857600E+03 4.6326700E+11 4.6326700E+11 +3.0000000E-01 4.5508700E+03 3.9913100E+11 3.9913100E+11 +4.0000000E-01 4.2277500E+03 3.4188300E+11 3.4188300E+11 +5.0000000E-01 3.9164100E+03 2.9101100E+11 2.9101100E+11 +6.0000000E-01 3.6168300E+03 2.4602700E+11 2.4602700E+11 +7.0000000E-01 3.3290300E+03 2.0645700E+11 2.0645700E+11 +8.0000000E-01 3.0530100E+03 1.7185100E+11 1.7185100E+11 +9.0000000E-01 2.7887500E+03 1.4177600E+11 1.4177600E+11 +1.0000000E+00 2.5362700E+03 1.1582000E+11 1.1582000E+11 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.7004 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 2.1963 TwFAM1Sh(3) - , coefficient of x^3 term + -5.6202 TwFAM1Sh(4) - , coefficient of x^4 term + 6.2275 TwFAM1Sh(5) - , coefficient of x^5 term + -2.504 TwFAM1Sh(6) - , coefficient of x^6 term + -70.5319 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -63.7623 TwFAM2Sh(3) - , coefficient of x^3 term + 289.737 TwFAM2Sh(4) - , coefficient of x^4 term + -176.513 TwFAM2Sh(5) - , coefficient of x^5 term + 22.0706 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.385 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -1.7684 TwSSM1Sh(3) - , coefficient of x^3 term + 3.0871 TwSSM1Sh(4) - , coefficient of x^4 term + -2.2395 TwSSM1Sh(5) - , coefficient of x^5 term + 0.5357 TwSSM1Sh(6) - , coefficient of x^6 term + -121.21 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + 184.415 TwSSM2Sh(3) - , coefficient of x^3 term + -224.904 TwSSM2Sh(4) - , coefficient of x^4 term + 298.536 TwSSM2Sh(5) - , coefficient of x^5 term + -135.838 TwSSM2Sh(6) - , coefficient of x^6 term + + diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ServoDyn.dat new file mode 100644 index 0000000000..563cb7f181 --- /dev/null +++ b/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ServoDyn.dat @@ -0,0 +1,110 @@ +------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to .ech (flag) +"default" DT - Communication interval for controllers (s) (or "default") +---------------------- PITCH CONTROL ------------------------------------------- + 0 PCMode - Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 TPCOn - Time to enable active pitch control (s) [unused when PCMode=0] + 9999.9 TPitManS(1) - Time to start override pitch maneuver for blade 1 and end standard pitch control (s) + 9999.9 TPitManS(2) - Time to start override pitch maneuver for blade 2 and end standard pitch control (s) + 9999.9 TPitManS(3) - Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades] + 8 PitManRat(1) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s) + 8 PitManRat(2) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s) + 8 PitManRat(3) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades] + 20 BlPitchF(1) - Blade 1 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(2) - Blade 2 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(3) - Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades] +---------------------- GENERATOR AND TORQUE CONTROL ---------------------------- + 1 VSContrl - Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 2 GenModel - Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0] + 94.4 GenEff - Generator efficiency [ignored by the Thevenin and user-defined generator models] (%) +True GenTiStr - Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag) +True GenTiStp - Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag) + 10.0 SpdGenOn - Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False] + 0 TimGenOn - Time to turn on the generator for a startup (s) [used only when GenTiStr=True] + 9999.9 TimGenOf - Time to turn off the generator (s) [used only when GenTiStp=True] +---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL -------------------- + 1162.0 VS_RtGnSp - Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1] + 47403.0 VS_RtTq - Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1] + 0.025576 VS_Rgn2K - Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1] + 10.0 VS_SlPc - Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1] +---------------------- SIMPLE INDUCTION GENERATOR ------------------------------ + 9999.9 SIG_SlPc - Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_SySp - Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_RtTq - Rated torque (N-m) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_PORt - Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1] +---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR ----------------- + 9999.9 TEC_Freq - Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2] + 9998 TEC_NPol - Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SRes - Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RRes - Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_VLL - Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SLR - Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RLR - Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_MR - Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2] +---------------------- HIGH-SPEED SHAFT BRAKE ---------------------------------- + 0 HSSBrMode - HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 THSSBrDp - Time to initiate deployment of the HSS brake (s) + 0.6 HSSBrDT - Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1] + 28116.2 HSSBrTqF - Fully deployed HSS-brake torque (N-m) +---------------------- NACELLE-YAW CONTROL ------------------------------------- + 0 YCMode - Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 TYCOn - Time to enable active yaw control (s) [unused when YCMode=0] + 0 YawNeut - Neutral yaw position--yaw spring force is zero at this yaw (degrees) +9.02832E+09 YawSpr - Nacelle-yaw spring constant (N-m/rad) + 1.916E+07 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s)) + 9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s) + 2 YawManRat - Yaw maneuver rate (in absolute value) (deg/s) + 0 NacYawF - Final yaw angle for override yaw maneuvers (degrees) +---------------------- AERODYNAMIC FLOW CONTROL -------------------------------- + 0 AfCmode - Airfoil control mode {0: none, 1: cosine wave cycle, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 AfC_Mean - Mean level for cosine cycling or steady value (-) [used only with AfCmode==1] + 0 AfC_Amp - Amplitude for for cosine cycling of flap signal (-) [used only with AfCmode==1] + 0 AfC_Phase - Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1] +---------------------- STRUCTURAL CONTROL -------------------------------------- +0 NumBStC - Number of blade structural controllers (integer) +"unused" BStCfiles - Name of the files for blade structural controllers (quoted strings) [unused when NumBStC==0] +0 NumNStC - Number of nacelle structural controllers (integer) +"unused" NStCfiles - Name of the files for nacelle structural controllers (quoted strings) [unused when NumNStC==0] +0 NumTStC - Number of tower structural controllers (integer) +"unused" TStCfiles - Name of the files for tower structural controllers (quoted strings) [unused when NumTStC==0] +0 NumSStC - Number of substructure structural controllers (integer) +"unused" SStCfiles - Name of the files for substructure structural controllers (quoted strings) [unused when NumSStC==0] +---------------------- CABLE CONTROL ------------------------------------------- + 0 CCmode - Cable control mode {0: none, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) +---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface] +"../../ROSCO/install/lib/libdiscon.so" DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface] +"/home/of_rt/ROSCO/Examples/examples_out/17_ZeroMQ/DISCON_zmq.IN" DLL_InFile - Name of input file sent to the DLL (-) [used only with Bladed Interface] +"DISCON_zmq" DLL_ProcName - Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface] +"default" DLL_DT - Communication interval for dynamic library (s) (or "default") [used only with Bladed Interface] +false DLL_Ramp - Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface] + 9999.9 BPCutoff - Cutoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface] + 0 NacYaw_North - Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface] + 1 Ptch_Cntrl - Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface] + 0 Ptch_SetPnt - Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface] + 0 Ptch_Min - Record 6: Minimum pitch angle (deg) [used only with Bladed Interface] + 0 Ptch_Max - Record 7: Maximum pitch angle (deg) [used only with Bladed Interface] + 0 PtchRate_Min - Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface] + 0 PtchRate_Max - Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface] + 0 Gain_OM - Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface] + 0 GenSpd_MinOM - Record 17: Minimum generator speed (rpm) [used only with Bladed Interface] + 0 GenSpd_MaxOM - Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface] + 0 GenSpd_Dem - Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface] + 0 GenTrq_Dem - Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface] + 0 GenPwr_Dem - Record 13: Demanded power (W) [used only with Bladed Interface] +---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE ------------- + 0 DLL_NumTrq - Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface] + GenSpd_TLU GenTrq_TLU + (rpm) (Nm) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to .sum (flag) (currently unused) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"GenTq" - Electrical generator power and torque +"GenPwr" - Electrical generator power and torque +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templateDir/README.md b/zmq_coupling_tests/templateDir/README.md new file mode 100644 index 0000000000..3a57620102 --- /dev/null +++ b/zmq_coupling_tests/templateDir/README.md @@ -0,0 +1 @@ +## 5MW_Land_DLL_WTurb diff --git a/zmq_coupling_tests/templateDir/uniform.hh b/zmq_coupling_tests/templateDir/uniform.hh new file mode 100644 index 0000000000..1aa7c078e9 --- /dev/null +++ b/zmq_coupling_tests/templateDir/uniform.hh @@ -0,0 +1,1229 @@ +! This hub-height wind-speed file was generated by TurbSim (from OpenFAST-HEAD-HASH-NOTFOUND) on 12-Dec-2022 at 19:42:28. +! +! The requested statistics for this data were: +! Mean Total Wind Speed = 17.172 m/s +! Turbulence Intensity = 17.241% +! +! Time HorSpd WndDir VerSpd HorShr VerShr LnVShr GstSpd +! (sec) (m/s) (deg) (m/s) (-) (-) (-) (m/s) + 0.000 6.0 -4.89 2.13 0.000 0.200 0.000 0.00 + 0.050 6.0 -3.93 0.44 0.000 0.200 0.000 0.00 + 0.100 6.0 -8.01 0.67 0.000 0.200 0.000 0.00 + 0.150 6.0 -8.50 -0.69 0.000 0.200 0.000 0.00 + 0.200 6.0 -8.57 -0.62 0.000 0.200 0.000 0.00 + 0.250 6.0 -7.82 0.12 0.000 0.200 0.000 0.00 + 0.300 6.0 -8.56 0.30 0.000 0.200 0.000 0.00 + 0.350 6.0 -10.82 1.23 0.000 0.200 0.000 0.00 + 0.400 19.64 -13.18 2.32 0.000 0.200 0.000 0.00 + 0.450 18.78 -13.51 1.80 0.000 0.200 0.000 0.00 + 0.500 19.08 -11.15 3.15 0.000 0.200 0.000 0.00 + 0.550 18.59 -9.97 2.48 0.000 0.200 0.000 0.00 + 0.600 18.82 -9.18 1.81 0.000 0.200 0.000 0.00 + 0.650 18.49 -7.64 1.94 0.000 0.200 0.000 0.00 + 0.700 17.45 -9.40 0.93 0.000 0.200 0.000 0.00 + 0.750 17.61 -10.19 0.39 0.000 0.200 0.000 0.00 + 0.800 17.50 -8.67 0.85 0.000 0.200 0.000 0.00 + 0.850 17.55 -13.58 1.76 0.000 0.200 0.000 0.00 + 0.900 18.33 -14.87 1.11 0.000 0.200 0.000 0.00 + 0.950 18.49 -14.15 0.72 0.000 0.200 0.000 0.00 + 1.000 17.89 -10.92 0.77 0.000 0.200 0.000 0.00 + 1.050 17.09 -10.99 0.65 0.000 0.200 0.000 0.00 + 1.100 17.32 -8.80 0.74 0.000 0.200 0.000 0.00 + 1.150 17.75 -8.52 -0.02 0.000 0.200 0.000 0.00 + 1.200 18.04 -9.78 0.67 0.000 0.200 0.000 0.00 + 1.250 17.39 -9.57 0.03 0.000 0.200 0.000 0.00 + 1.300 17.90 -11.76 -0.70 0.000 0.200 0.000 0.00 + 1.350 18.34 -9.42 0.38 0.000 0.200 0.000 0.00 + 1.400 19.46 -6.94 1.69 0.000 0.200 0.000 0.00 + 1.450 19.64 -7.30 3.36 0.000 0.200 0.000 0.00 + 1.500 19.24 -4.19 2.32 0.000 0.200 0.000 0.00 + 1.550 18.98 -2.27 2.12 0.000 0.200 0.000 0.00 + 1.600 19.32 1.20 2.57 0.000 0.200 0.000 0.00 + 1.650 18.73 1.90 2.86 0.000 0.200 0.000 0.00 + 1.700 18.15 3.77 2.48 0.000 0.200 0.000 0.00 + 1.750 18.33 3.32 2.53 0.000 0.200 0.000 0.00 + 1.800 17.96 3.56 2.82 0.000 0.200 0.000 0.00 + 1.850 16.95 1.02 2.44 0.000 0.200 0.000 0.00 + 1.900 16.92 -1.48 2.51 0.000 0.200 0.000 0.00 + 1.950 17.60 -2.38 3.20 0.000 0.200 0.000 0.00 + 2.000 18.18 -0.68 3.61 0.000 0.200 0.000 0.00 + 2.050 17.67 1.19 3.34 0.000 0.200 0.000 0.00 + 2.100 17.38 -3.01 4.71 0.000 0.200 0.000 0.00 + 2.150 17.91 -3.50 4.65 0.000 0.200 0.000 0.00 + 2.200 17.70 -5.78 3.93 0.000 0.200 0.000 0.00 + 2.250 17.07 -0.62 4.58 0.000 0.200 0.000 0.00 + 2.300 17.41 1.89 4.55 0.000 0.200 0.000 0.00 + 2.350 17.25 5.08 3.77 0.000 0.200 0.000 0.00 + 2.400 17.41 9.68 3.73 0.000 0.200 0.000 0.00 + 2.450 17.86 3.54 4.09 0.000 0.200 0.000 0.00 + 2.500 18.45 3.62 3.02 0.000 0.200 0.000 0.00 + 2.550 18.74 3.06 2.85 0.000 0.200 0.000 0.00 + 2.600 17.86 5.88 1.59 0.000 0.200 0.000 0.00 + 2.650 18.22 5.46 1.35 0.000 0.200 0.000 0.00 + 2.700 17.97 4.78 1.77 0.000 0.200 0.000 0.00 + 2.750 18.65 4.98 1.30 0.000 0.200 0.000 0.00 + 2.800 19.66 6.76 0.61 0.000 0.200 0.000 0.00 + 2.850 18.64 1.96 0.53 0.000 0.200 0.000 0.00 + 2.900 19.44 4.13 -0.30 0.000 0.200 0.000 0.00 + 2.950 19.80 0.65 0.61 0.000 0.200 0.000 0.00 + 3.000 20.45 3.32 0.84 0.000 0.200 0.000 0.00 + 3.050 21.19 2.37 -0.65 0.000 0.200 0.000 0.00 + 3.100 20.29 3.61 -1.93 0.000 0.200 0.000 0.00 + 3.150 19.47 1.99 -2.09 0.000 0.200 0.000 0.00 + 3.200 19.79 1.34 -1.57 0.000 0.200 0.000 0.00 + 3.250 19.78 1.75 -0.49 0.000 0.200 0.000 0.00 + 3.300 20.18 4.82 0.35 0.000 0.200 0.000 0.00 + 3.350 18.28 4.43 0.62 0.000 0.200 0.000 0.00 + 3.400 18.15 4.25 -0.61 0.000 0.200 0.000 0.00 + 3.450 18.68 5.22 -0.27 0.000 0.200 0.000 0.00 + 3.500 17.22 6.19 -0.63 0.000 0.200 0.000 0.00 + 3.550 17.49 5.77 0.17 0.000 0.200 0.000 0.00 + 3.600 17.02 7.45 -0.22 0.000 0.200 0.000 0.00 + 3.650 16.16 7.81 -1.43 0.000 0.200 0.000 0.00 + 3.700 16.12 2.16 -0.70 0.000 0.200 0.000 0.00 + 3.750 16.03 -1.38 -0.98 0.000 0.200 0.000 0.00 + 3.800 17.38 -0.86 -0.04 0.000 0.200 0.000 0.00 + 3.850 17.79 3.73 -0.19 0.000 0.200 0.000 0.00 + 3.900 16.90 11.54 1.07 0.000 0.200 0.000 0.00 + 3.950 16.94 8.41 2.26 0.000 0.200 0.000 0.00 + 4.000 16.38 10.38 2.17 0.000 0.200 0.000 0.00 + 4.050 14.62 6.07 1.48 0.000 0.200 0.000 0.00 + 4.100 14.59 5.09 2.16 0.000 0.200 0.000 0.00 + 4.150 13.70 4.76 2.52 0.000 0.200 0.000 0.00 + 4.200 13.51 4.07 2.75 0.000 0.200 0.000 0.00 + 4.250 13.19 3.20 1.83 0.000 0.200 0.000 0.00 + 4.300 12.81 6.89 0.64 0.000 0.200 0.000 0.00 + 4.350 13.37 5.52 0.82 0.000 0.200 0.000 0.00 + 4.400 13.63 -0.95 0.17 0.000 0.200 0.000 0.00 + 4.450 13.32 1.03 0.88 0.000 0.200 0.000 0.00 + 4.500 11.82 0.55 -0.47 0.000 0.200 0.000 0.00 + 4.550 12.98 6.54 -0.60 0.000 0.200 0.000 0.00 + 4.600 13.45 6.18 -0.35 0.000 0.200 0.000 0.00 + 4.650 13.30 1.85 1.04 0.000 0.200 0.000 0.00 + 4.700 13.03 5.99 0.32 0.000 0.200 0.000 0.00 + 4.750 13.72 10.63 1.28 0.000 0.200 0.000 0.00 + 4.800 13.38 7.28 3.11 0.000 0.200 0.000 0.00 + 4.850 13.55 5.99 3.94 0.000 0.200 0.000 0.00 + 4.900 13.58 4.59 3.42 0.000 0.200 0.000 0.00 + 4.950 13.87 2.49 2.79 0.000 0.200 0.000 0.00 + 5.000 12.80 0.82 3.41 0.000 0.200 0.000 0.00 + 5.050 13.60 -1.74 2.34 0.000 0.200 0.000 0.00 + 5.100 13.68 -0.97 3.41 0.000 0.200 0.000 0.00 + 5.150 14.66 0.55 4.37 0.000 0.200 0.000 0.00 + 5.200 15.30 -4.00 4.49 0.000 0.200 0.000 0.00 + 5.250 14.50 -2.33 4.22 0.000 0.200 0.000 0.00 + 5.300 13.73 1.54 4.97 0.000 0.200 0.000 0.00 + 5.350 13.14 4.44 5.89 0.000 0.200 0.000 0.00 + 5.400 14.34 2.28 4.27 0.000 0.200 0.000 0.00 + 5.450 15.16 3.81 4.05 0.000 0.200 0.000 0.00 + 5.500 15.61 1.89 3.91 0.000 0.200 0.000 0.00 + 5.550 15.81 5.59 3.73 0.000 0.200 0.000 0.00 + 5.600 15.28 9.00 3.31 0.000 0.200 0.000 0.00 + 5.650 16.61 8.83 4.35 0.000 0.200 0.000 0.00 + 5.700 16.93 3.03 4.00 0.000 0.200 0.000 0.00 + 5.750 16.34 1.67 2.64 0.000 0.200 0.000 0.00 + 5.800 16.71 0.33 2.51 0.000 0.200 0.000 0.00 + 5.850 18.48 -0.17 2.35 0.000 0.200 0.000 0.00 + 5.900 18.16 -0.84 1.77 0.000 0.200 0.000 0.00 + 5.950 18.13 0.07 1.41 0.000 0.200 0.000 0.00 + 6.000 18.29 -1.44 1.07 0.000 0.200 0.000 0.00 + 6.050 18.77 -2.11 -0.19 0.000 0.200 0.000 0.00 + 6.100 17.52 0.01 0.22 0.000 0.200 0.000 0.00 + 6.150 17.50 2.25 0.00 0.000 0.200 0.000 0.00 + 6.200 17.05 0.78 -1.03 0.000 0.200 0.000 0.00 + 6.250 17.06 2.31 -0.47 0.000 0.200 0.000 0.00 + 6.300 17.17 1.42 0.70 0.000 0.200 0.000 0.00 + 6.350 16.71 0.95 1.23 0.000 0.200 0.000 0.00 + 6.400 16.53 3.72 1.64 0.000 0.200 0.000 0.00 + 6.450 17.10 8.97 3.33 0.000 0.200 0.000 0.00 + 6.500 16.84 3.25 4.50 0.000 0.200 0.000 0.00 + 6.550 16.98 1.92 4.38 0.000 0.200 0.000 0.00 + 6.600 16.89 -0.62 3.40 0.000 0.200 0.000 0.00 + 6.650 18.48 -1.59 2.58 0.000 0.200 0.000 0.00 + 6.700 19.86 0.28 3.58 0.000 0.200 0.000 0.00 + 6.750 19.57 -0.47 3.09 0.000 0.200 0.000 0.00 + 6.800 19.15 1.93 2.47 0.000 0.200 0.000 0.00 + 6.850 19.26 -1.66 3.12 0.000 0.200 0.000 0.00 + 6.900 18.68 -1.61 3.77 0.000 0.200 0.000 0.00 + 6.950 19.70 -2.45 3.21 0.000 0.200 0.000 0.00 + 7.000 19.71 -4.21 3.27 0.000 0.200 0.000 0.00 + 7.050 19.06 -5.21 2.90 0.000 0.200 0.000 0.00 + 7.100 19.55 -9.61 2.81 0.000 0.200 0.000 0.00 + 7.150 19.09 -12.57 2.70 0.000 0.200 0.000 0.00 + 7.200 18.49 -12.49 3.41 0.000 0.200 0.000 0.00 + 7.250 18.55 -12.54 2.90 0.000 0.200 0.000 0.00 + 7.300 19.20 -8.36 2.48 0.000 0.200 0.000 0.00 + 7.350 18.57 -6.58 1.65 0.000 0.200 0.000 0.00 + 7.400 17.93 -6.74 2.41 0.000 0.200 0.000 0.00 + 7.450 18.40 -9.68 1.53 0.000 0.200 0.000 0.00 + 7.500 17.86 -14.45 1.09 0.000 0.200 0.000 0.00 + 7.550 16.39 -11.11 -0.19 0.000 0.200 0.000 0.00 + 7.600 16.54 -9.60 0.29 0.000 0.200 0.000 0.00 + 7.650 17.22 -12.66 0.38 0.000 0.200 0.000 0.00 + 7.700 17.55 -9.39 0.26 0.000 0.200 0.000 0.00 + 7.750 17.58 -4.52 1.21 0.000 0.200 0.000 0.00 + 7.800 17.82 -6.58 1.28 0.000 0.200 0.000 0.00 + 7.850 18.53 -6.72 1.23 0.000 0.200 0.000 0.00 + 7.900 17.27 -5.12 0.53 0.000 0.200 0.000 0.00 + 7.950 16.20 -5.96 0.25 0.000 0.200 0.000 0.00 + 8.000 17.42 -7.63 1.14 0.000 0.200 0.000 0.00 + 8.050 17.25 -8.54 1.62 0.000 0.200 0.000 0.00 + 8.100 16.20 -12.09 1.38 0.000 0.200 0.000 0.00 + 8.150 14.86 -11.18 0.68 0.000 0.200 0.000 0.00 + 8.200 15.39 -10.42 0.11 0.000 0.200 0.000 0.00 + 8.250 15.03 -10.81 1.08 0.000 0.200 0.000 0.00 + 8.300 15.91 -6.98 1.39 0.000 0.200 0.000 0.00 + 8.350 17.29 -4.86 0.60 0.000 0.200 0.000 0.00 + 8.400 16.50 -5.51 -0.77 0.000 0.200 0.000 0.00 + 8.450 16.16 -2.19 0.78 0.000 0.200 0.000 0.00 + 8.500 17.40 -0.01 0.45 0.000 0.200 0.000 0.00 + 8.550 17.44 1.52 0.90 0.000 0.200 0.000 0.00 + 8.600 17.06 1.50 1.76 0.000 0.200 0.000 0.00 + 8.650 17.59 1.17 1.00 0.000 0.200 0.000 0.00 + 8.700 18.19 3.10 0.85 0.000 0.200 0.000 0.00 + 8.750 17.81 5.75 0.08 0.000 0.200 0.000 0.00 + 8.800 16.68 4.66 -1.45 0.000 0.200 0.000 0.00 + 8.850 16.74 2.35 -1.74 0.000 0.200 0.000 0.00 + 8.900 17.10 -0.00 -0.64 0.000 0.200 0.000 0.00 + 8.950 16.54 4.65 0.89 0.000 0.200 0.000 0.00 + 9.000 16.44 0.61 1.04 0.000 0.200 0.000 0.00 + 9.050 17.41 -0.34 1.00 0.000 0.200 0.000 0.00 + 9.100 17.48 0.14 0.54 0.000 0.200 0.000 0.00 + 9.150 18.01 0.66 -0.29 0.000 0.200 0.000 0.00 + 9.200 16.88 -6.33 1.24 0.000 0.200 0.000 0.00 + 9.250 16.96 -6.89 1.69 0.000 0.200 0.000 0.00 + 9.300 16.83 -8.20 0.68 0.000 0.200 0.000 0.00 + 9.350 17.00 -5.93 1.24 0.000 0.200 0.000 0.00 + 9.400 17.06 -3.87 1.24 0.000 0.200 0.000 0.00 + 9.450 17.29 -5.69 0.82 0.000 0.200 0.000 0.00 + 9.500 17.00 -8.17 0.37 0.000 0.200 0.000 0.00 + 9.550 16.01 -5.70 0.39 0.000 0.200 0.000 0.00 + 9.600 15.45 -11.51 -0.41 0.000 0.200 0.000 0.00 + 9.650 15.11 -13.02 -0.16 0.000 0.200 0.000 0.00 + 9.700 15.53 -3.68 -0.38 0.000 0.200 0.000 0.00 + 9.750 14.59 -3.52 -0.51 0.000 0.200 0.000 0.00 + 9.800 15.97 -3.81 -0.62 0.000 0.200 0.000 0.00 + 9.850 16.23 -1.94 0.32 0.000 0.200 0.000 0.00 + 9.900 16.99 -3.03 1.54 0.000 0.200 0.000 0.00 + 9.950 16.85 -4.24 1.71 0.000 0.200 0.000 0.00 + 10.000 17.35 -4.06 1.01 0.000 0.200 0.000 0.00 + 10.050 17.16 -1.86 0.97 0.000 0.200 0.000 0.00 + 10.100 17.31 -0.60 0.96 0.000 0.200 0.000 0.00 + 10.150 16.56 -0.30 0.29 0.000 0.200 0.000 0.00 + 10.200 16.70 2.64 0.21 0.000 0.200 0.000 0.00 + 10.250 17.12 2.90 0.75 0.000 0.200 0.000 0.00 + 10.300 17.28 2.87 0.62 0.000 0.200 0.000 0.00 + 10.350 16.11 2.40 0.54 0.000 0.200 0.000 0.00 + 10.400 14.64 3.77 -0.28 0.000 0.200 0.000 0.00 + 10.450 13.26 7.43 0.43 0.000 0.200 0.000 0.00 + 10.500 12.29 10.40 -1.46 0.000 0.200 0.000 0.00 + 10.550 11.86 3.37 -1.32 0.000 0.200 0.000 0.00 + 10.600 12.19 1.50 -0.84 0.000 0.200 0.000 0.00 + 10.650 11.07 1.83 0.50 0.000 0.200 0.000 0.00 + 10.700 11.11 -0.36 1.29 0.000 0.200 0.000 0.00 + 10.750 11.85 1.55 -0.59 0.000 0.200 0.000 0.00 + 10.800 11.33 -3.20 -1.94 0.000 0.200 0.000 0.00 + 10.850 10.94 -2.07 -1.88 0.000 0.200 0.000 0.00 + 10.900 11.60 4.57 -1.43 0.000 0.200 0.000 0.00 + 10.950 11.78 3.44 -0.82 0.000 0.200 0.000 0.00 + 11.000 11.30 5.58 -2.59 0.000 0.200 0.000 0.00 + 11.050 12.37 8.44 -3.60 0.000 0.200 0.000 0.00 + 11.100 13.98 4.76 -3.72 0.000 0.200 0.000 0.00 + 11.150 13.38 -0.45 -3.30 0.000 0.200 0.000 0.00 + 11.200 12.66 -0.62 -3.60 0.000 0.200 0.000 0.00 + 11.250 13.28 3.02 -3.23 0.000 0.200 0.000 0.00 + 11.300 12.85 6.17 -3.24 0.000 0.200 0.000 0.00 + 11.350 13.03 7.39 -2.36 0.000 0.200 0.000 0.00 + 11.400 12.63 13.15 -0.94 0.000 0.200 0.000 0.00 + 11.450 12.04 14.98 -2.09 0.000 0.200 0.000 0.00 + 11.500 11.60 10.09 -2.74 0.000 0.200 0.000 0.00 + 11.550 11.97 13.33 -1.30 0.000 0.200 0.000 0.00 + 11.600 11.51 10.01 0.19 0.000 0.200 0.000 0.00 + 11.650 11.12 10.89 -0.57 0.000 0.200 0.000 0.00 + 11.700 11.20 9.13 -0.75 0.000 0.200 0.000 0.00 + 11.750 11.75 12.03 -0.12 0.000 0.200 0.000 0.00 + 11.800 10.27 14.47 -0.35 0.000 0.200 0.000 0.00 + 11.850 10.74 17.09 0.65 0.000 0.200 0.000 0.00 + 11.900 9.85 16.94 1.15 0.000 0.200 0.000 0.00 + 11.950 9.38 17.24 1.09 0.000 0.200 0.000 0.00 + 12.000 10.15 18.43 -0.53 0.000 0.200 0.000 0.00 + 12.050 9.47 12.24 -0.62 0.000 0.200 0.000 0.00 + 12.100 10.08 15.16 -0.53 0.000 0.200 0.000 0.00 + 12.150 10.58 6.32 -0.32 0.000 0.200 0.000 0.00 + 12.200 10.79 0.17 0.94 0.000 0.200 0.000 0.00 + 12.250 11.59 1.50 1.48 0.000 0.200 0.000 0.00 + 12.300 11.58 1.49 1.95 0.000 0.200 0.000 0.00 + 12.350 10.76 3.79 2.70 0.000 0.200 0.000 0.00 + 12.400 10.07 1.56 1.28 0.000 0.200 0.000 0.00 + 12.450 10.52 2.40 1.76 0.000 0.200 0.000 0.00 + 12.500 10.75 4.53 1.56 0.000 0.200 0.000 0.00 + 12.550 10.19 5.16 2.14 0.000 0.200 0.000 0.00 + 12.600 10.02 2.89 2.49 0.000 0.200 0.000 0.00 + 12.650 9.92 2.53 3.39 0.000 0.200 0.000 0.00 + 12.700 9.68 3.40 4.17 0.000 0.200 0.000 0.00 + 12.750 9.30 4.85 4.37 0.000 0.200 0.000 0.00 + 12.800 9.82 10.91 4.10 0.000 0.200 0.000 0.00 + 12.850 10.79 12.67 2.98 0.000 0.200 0.000 0.00 + 12.900 10.94 7.09 2.50 0.000 0.200 0.000 0.00 + 12.950 10.87 4.86 2.73 0.000 0.200 0.000 0.00 + 13.000 10.06 1.33 2.91 0.000 0.200 0.000 0.00 + 13.050 10.95 1.14 3.28 0.000 0.200 0.000 0.00 + 13.100 10.58 1.85 2.46 0.000 0.200 0.000 0.00 + 13.150 11.19 2.06 1.22 0.000 0.200 0.000 0.00 + 13.200 11.07 2.79 1.58 0.000 0.200 0.000 0.00 + 13.250 11.51 9.71 1.02 0.000 0.200 0.000 0.00 + 13.300 11.87 12.62 -0.16 0.000 0.200 0.000 0.00 + 13.350 11.91 13.33 0.92 0.000 0.200 0.000 0.00 + 13.400 12.25 12.31 1.90 0.000 0.200 0.000 0.00 + 13.450 11.75 14.94 1.41 0.000 0.200 0.000 0.00 + 13.500 11.75 13.58 2.50 0.000 0.200 0.000 0.00 + 13.550 12.14 8.42 4.28 0.000 0.200 0.000 0.00 + 13.600 12.99 7.82 3.90 0.000 0.200 0.000 0.00 + 13.650 12.78 6.05 4.45 0.000 0.200 0.000 0.00 + 13.700 12.78 7.37 2.90 0.000 0.200 0.000 0.00 + 13.750 13.25 7.37 2.49 0.000 0.200 0.000 0.00 + 13.800 13.59 8.41 2.57 0.000 0.200 0.000 0.00 + 13.850 13.62 5.75 3.11 0.000 0.200 0.000 0.00 + 13.900 13.39 6.29 3.78 0.000 0.200 0.000 0.00 + 13.950 13.60 8.78 3.25 0.000 0.200 0.000 0.00 + 14.000 14.64 10.85 3.21 0.000 0.200 0.000 0.00 + 14.050 14.92 6.77 3.04 0.000 0.200 0.000 0.00 + 14.100 14.73 9.67 2.25 0.000 0.200 0.000 0.00 + 14.150 13.84 11.71 1.18 0.000 0.200 0.000 0.00 + 14.200 13.43 10.15 1.54 0.000 0.200 0.000 0.00 + 14.250 13.70 13.24 2.26 0.000 0.200 0.000 0.00 + 14.300 13.78 13.68 2.87 0.000 0.200 0.000 0.00 + 14.350 13.45 6.36 2.96 0.000 0.200 0.000 0.00 + 14.400 14.47 8.56 3.73 0.000 0.200 0.000 0.00 + 14.450 13.82 9.04 4.22 0.000 0.200 0.000 0.00 + 14.500 14.21 8.36 4.28 0.000 0.200 0.000 0.00 + 14.550 14.72 18.32 4.02 0.000 0.200 0.000 0.00 + 14.600 14.59 19.15 3.73 0.000 0.200 0.000 0.00 + 14.650 14.40 17.95 2.70 0.000 0.200 0.000 0.00 + 14.700 14.34 14.38 2.85 0.000 0.200 0.000 0.00 + 14.750 12.78 19.54 3.24 0.000 0.200 0.000 0.00 + 14.800 12.62 15.92 4.40 0.000 0.200 0.000 0.00 + 14.850 12.66 16.51 3.92 0.000 0.200 0.000 0.00 + 14.900 13.33 13.00 4.61 0.000 0.200 0.000 0.00 + 14.950 13.04 14.57 4.42 0.000 0.200 0.000 0.00 + 15.000 12.69 9.98 3.54 0.000 0.200 0.000 0.00 + 15.050 12.56 15.86 3.91 0.000 0.200 0.000 0.00 + 15.100 13.43 11.99 3.60 0.000 0.200 0.000 0.00 + 15.150 13.07 9.88 3.94 0.000 0.200 0.000 0.00 + 15.200 12.77 14.44 2.56 0.000 0.200 0.000 0.00 + 15.250 11.92 17.30 2.84 0.000 0.200 0.000 0.00 + 15.300 12.96 15.40 4.19 0.000 0.200 0.000 0.00 + 15.350 12.96 10.26 3.58 0.000 0.200 0.000 0.00 + 15.400 12.79 3.24 3.59 0.000 0.200 0.000 0.00 + 15.450 13.09 1.87 3.38 0.000 0.200 0.000 0.00 + 15.500 13.10 4.38 2.94 0.000 0.200 0.000 0.00 + 15.550 13.24 0.61 3.87 0.000 0.200 0.000 0.00 + 15.600 12.92 -0.68 4.69 0.000 0.200 0.000 0.00 + 15.650 12.99 -2.36 6.32 0.000 0.200 0.000 0.00 + 15.700 14.12 -5.92 6.21 0.000 0.200 0.000 0.00 + 15.750 15.34 -3.26 6.85 0.000 0.200 0.000 0.00 + 15.800 14.61 -0.63 7.06 0.000 0.200 0.000 0.00 + 15.850 14.84 -0.81 7.50 0.000 0.200 0.000 0.00 + 15.900 16.52 -2.68 7.66 0.000 0.200 0.000 0.00 + 15.950 16.81 -4.49 6.63 0.000 0.200 0.000 0.00 + 16.000 16.33 -4.33 6.40 0.000 0.200 0.000 0.00 + 16.050 16.45 -5.36 5.12 0.000 0.200 0.000 0.00 + 16.100 16.78 -2.68 5.05 0.000 0.200 0.000 0.00 + 16.150 15.69 -2.60 4.62 0.000 0.200 0.000 0.00 + 16.200 15.73 -2.54 4.89 0.000 0.200 0.000 0.00 + 16.250 15.69 -0.03 5.57 0.000 0.200 0.000 0.00 + 16.300 16.67 -0.36 6.57 0.000 0.200 0.000 0.00 + 16.350 16.25 0.21 5.98 0.000 0.200 0.000 0.00 + 16.400 16.12 1.46 5.02 0.000 0.200 0.000 0.00 + 16.450 15.56 2.90 4.66 0.000 0.200 0.000 0.00 + 16.500 14.98 3.24 5.33 0.000 0.200 0.000 0.00 + 16.550 14.45 0.97 5.38 0.000 0.200 0.000 0.00 + 16.600 14.45 -0.31 4.95 0.000 0.200 0.000 0.00 + 16.650 13.48 -4.47 6.67 0.000 0.200 0.000 0.00 + 16.700 14.19 -10.58 6.60 0.000 0.200 0.000 0.00 + 16.750 14.04 -9.10 7.42 0.000 0.200 0.000 0.00 + 16.800 14.49 -6.62 7.16 0.000 0.200 0.000 0.00 + 16.850 14.41 -5.02 6.14 0.000 0.200 0.000 0.00 + 16.900 14.71 -2.13 5.39 0.000 0.200 0.000 0.00 + 16.950 15.21 -3.83 5.61 0.000 0.200 0.000 0.00 + 17.000 15.59 -4.16 5.70 0.000 0.200 0.000 0.00 + 17.050 14.89 -1.15 4.51 0.000 0.200 0.000 0.00 + 17.100 14.55 -5.09 3.63 0.000 0.200 0.000 0.00 + 17.150 13.52 -5.63 2.19 0.000 0.200 0.000 0.00 + 17.200 13.07 -10.12 0.90 0.000 0.200 0.000 0.00 + 17.250 13.36 -7.57 0.13 0.000 0.200 0.000 0.00 + 17.300 13.28 -2.65 0.81 0.000 0.200 0.000 0.00 + 17.350 12.56 -1.79 1.68 0.000 0.200 0.000 0.00 + 17.400 12.85 -3.17 1.54 0.000 0.200 0.000 0.00 + 17.450 12.66 4.31 2.06 0.000 0.200 0.000 0.00 + 17.500 11.26 1.49 1.98 0.000 0.200 0.000 0.00 + 17.550 11.76 4.94 1.96 0.000 0.200 0.000 0.00 + 17.600 12.26 -0.98 2.42 0.000 0.200 0.000 0.00 + 17.650 11.32 1.76 2.25 0.000 0.200 0.000 0.00 + 17.700 11.52 3.29 2.84 0.000 0.200 0.000 0.00 + 17.750 13.29 0.27 2.60 0.000 0.200 0.000 0.00 + 17.800 13.00 3.35 2.06 0.000 0.200 0.000 0.00 + 17.850 12.75 7.80 2.23 0.000 0.200 0.000 0.00 + 17.900 12.46 8.36 2.09 0.000 0.200 0.000 0.00 + 17.950 13.24 4.23 1.80 0.000 0.200 0.000 0.00 + 18.000 15.15 -0.51 1.89 0.000 0.200 0.000 0.00 + 18.050 14.74 5.89 1.52 0.000 0.200 0.000 0.00 + 18.100 13.70 7.23 0.15 0.000 0.200 0.000 0.00 + 18.150 13.15 7.17 0.03 0.000 0.200 0.000 0.00 + 18.200 14.59 10.46 0.33 0.000 0.200 0.000 0.00 + 18.250 15.25 9.77 -0.44 0.000 0.200 0.000 0.00 + 18.300 15.32 5.60 -0.89 0.000 0.200 0.000 0.00 + 18.350 14.43 7.20 -0.65 0.000 0.200 0.000 0.00 + 18.400 15.44 9.01 -1.61 0.000 0.200 0.000 0.00 + 18.450 15.48 9.24 -1.64 0.000 0.200 0.000 0.00 + 18.500 15.58 7.11 -1.29 0.000 0.200 0.000 0.00 + 18.550 17.14 9.29 -1.00 0.000 0.200 0.000 0.00 + 18.600 16.79 8.11 1.19 0.000 0.200 0.000 0.00 + 18.650 15.32 9.51 1.59 0.000 0.200 0.000 0.00 + 18.700 15.25 11.69 1.27 0.000 0.200 0.000 0.00 + 18.750 14.95 14.65 2.36 0.000 0.200 0.000 0.00 + 18.800 14.64 21.24 3.28 0.000 0.200 0.000 0.00 + 18.850 15.27 20.87 1.97 0.000 0.200 0.000 0.00 + 18.900 15.11 23.38 1.41 0.000 0.200 0.000 0.00 + 18.950 13.85 17.97 1.12 0.000 0.200 0.000 0.00 + 19.000 14.38 13.65 2.12 0.000 0.200 0.000 0.00 + 19.050 14.70 12.78 2.99 0.000 0.200 0.000 0.00 + 19.100 14.89 10.71 3.06 0.000 0.200 0.000 0.00 + 19.150 14.93 10.81 2.16 0.000 0.200 0.000 0.00 + 19.200 15.88 8.07 2.59 0.000 0.200 0.000 0.00 + 19.250 15.72 7.29 1.62 0.000 0.200 0.000 0.00 + 19.300 15.47 4.81 1.10 0.000 0.200 0.000 0.00 + 19.350 14.97 3.53 1.02 0.000 0.200 0.000 0.00 + 19.400 13.83 2.24 2.57 0.000 0.200 0.000 0.00 + 19.450 13.64 0.68 2.04 0.000 0.200 0.000 0.00 + 19.500 14.20 2.04 2.19 0.000 0.200 0.000 0.00 + 19.550 14.67 1.32 2.90 0.000 0.200 0.000 0.00 + 19.600 14.67 3.30 1.95 0.000 0.200 0.000 0.00 + 19.650 14.72 8.65 2.80 0.000 0.200 0.000 0.00 + 19.700 14.89 8.02 3.27 0.000 0.200 0.000 0.00 + 19.750 16.21 6.01 3.68 0.000 0.200 0.000 0.00 + 19.800 17.55 7.25 3.49 0.000 0.200 0.000 0.00 + 19.850 17.61 11.82 1.55 0.000 0.200 0.000 0.00 + 19.900 18.55 11.27 1.27 0.000 0.200 0.000 0.00 + 19.950 17.91 12.73 2.62 0.000 0.200 0.000 0.00 + 20.000 18.20 10.74 3.03 0.000 0.200 0.000 0.00 + 20.050 17.65 11.57 2.21 0.000 0.200 0.000 0.00 + 20.100 17.68 11.35 2.81 0.000 0.200 0.000 0.00 + 20.150 17.40 12.89 2.19 0.000 0.200 0.000 0.00 + 20.200 17.54 14.75 1.14 0.000 0.200 0.000 0.00 + 20.250 17.19 10.70 1.83 0.000 0.200 0.000 0.00 + 20.300 17.47 9.03 2.79 0.000 0.200 0.000 0.00 + 20.350 18.80 5.41 3.21 0.000 0.200 0.000 0.00 + 20.400 17.19 3.26 3.18 0.000 0.200 0.000 0.00 + 20.450 16.81 4.79 3.11 0.000 0.200 0.000 0.00 + 20.500 16.38 3.20 3.67 0.000 0.200 0.000 0.00 + 20.550 15.85 9.74 2.00 0.000 0.200 0.000 0.00 + 20.600 16.92 8.62 3.01 0.000 0.200 0.000 0.00 + 20.650 15.65 11.18 2.41 0.000 0.200 0.000 0.00 + 20.700 16.39 13.84 1.38 0.000 0.200 0.000 0.00 + 20.750 17.06 8.64 1.31 0.000 0.200 0.000 0.00 + 20.800 17.39 11.10 0.42 0.000 0.200 0.000 0.00 + 20.850 17.53 9.33 0.06 0.000 0.200 0.000 0.00 + 20.900 17.86 12.59 0.21 0.000 0.200 0.000 0.00 + 20.950 16.98 14.12 0.71 0.000 0.200 0.000 0.00 + 21.000 16.11 14.02 0.80 0.000 0.200 0.000 0.00 + 21.050 16.39 8.75 2.05 0.000 0.200 0.000 0.00 + 21.100 16.37 11.44 2.24 0.000 0.200 0.000 0.00 + 21.150 16.00 12.81 1.90 0.000 0.200 0.000 0.00 + 21.200 16.83 11.10 1.49 0.000 0.200 0.000 0.00 + 21.250 17.14 13.95 1.20 0.000 0.200 0.000 0.00 + 21.300 18.42 16.57 0.10 0.000 0.200 0.000 0.00 + 21.350 18.55 12.34 0.51 0.000 0.200 0.000 0.00 + 21.400 16.51 11.61 0.81 0.000 0.200 0.000 0.00 + 21.450 16.92 12.56 0.83 0.000 0.200 0.000 0.00 + 21.500 18.07 11.90 1.94 0.000 0.200 0.000 0.00 + 21.550 19.65 13.19 1.67 0.000 0.200 0.000 0.00 + 21.600 19.04 12.00 1.71 0.000 0.200 0.000 0.00 + 21.650 19.16 9.91 2.70 0.000 0.200 0.000 0.00 + 21.700 19.59 10.79 2.52 0.000 0.200 0.000 0.00 + 21.750 19.68 8.80 1.30 0.000 0.200 0.000 0.00 + 21.800 20.01 13.92 1.75 0.000 0.200 0.000 0.00 + 21.850 19.17 10.87 1.68 0.000 0.200 0.000 0.00 + 21.900 18.32 10.78 0.72 0.000 0.200 0.000 0.00 + 21.950 18.18 8.27 1.05 0.000 0.200 0.000 0.00 + 22.000 18.36 7.14 0.90 0.000 0.200 0.000 0.00 + 22.050 18.61 9.37 1.34 0.000 0.200 0.000 0.00 + 22.100 18.55 8.76 0.45 0.000 0.200 0.000 0.00 + 22.150 18.23 9.62 1.44 0.000 0.200 0.000 0.00 + 22.200 18.13 11.45 0.51 0.000 0.200 0.000 0.00 + 22.250 18.59 11.95 1.23 0.000 0.200 0.000 0.00 + 22.300 18.14 12.64 1.33 0.000 0.200 0.000 0.00 + 22.350 17.02 11.55 -0.66 0.000 0.200 0.000 0.00 + 22.400 16.70 7.20 -0.83 0.000 0.200 0.000 0.00 + 22.450 17.01 5.44 -0.97 0.000 0.200 0.000 0.00 + 22.500 17.10 8.11 -0.44 0.000 0.200 0.000 0.00 + 22.550 17.78 5.08 0.71 0.000 0.200 0.000 0.00 + 22.600 16.97 8.66 0.70 0.000 0.200 0.000 0.00 + 22.650 16.90 10.31 0.26 0.000 0.200 0.000 0.00 + 22.700 17.23 8.82 0.55 0.000 0.200 0.000 0.00 + 22.750 18.27 7.59 0.28 0.000 0.200 0.000 0.00 + 22.800 17.53 2.41 -1.32 0.000 0.200 0.000 0.00 + 22.850 17.42 3.59 -1.19 0.000 0.200 0.000 0.00 + 22.900 17.92 5.47 -1.45 0.000 0.200 0.000 0.00 + 22.950 18.26 4.24 -0.39 0.000 0.200 0.000 0.00 + 23.000 17.32 2.53 -1.17 0.000 0.200 0.000 0.00 + 23.050 16.55 1.72 -0.92 0.000 0.200 0.000 0.00 + 23.100 16.92 5.15 -0.41 0.000 0.200 0.000 0.00 + 23.150 18.09 7.08 -0.24 0.000 0.200 0.000 0.00 + 23.200 17.81 6.83 0.02 0.000 0.200 0.000 0.00 + 23.250 17.18 8.82 -0.86 0.000 0.200 0.000 0.00 + 23.300 18.20 4.80 -1.40 0.000 0.200 0.000 0.00 + 23.350 18.27 5.91 -0.02 0.000 0.200 0.000 0.00 + 23.400 18.97 6.57 -0.84 0.000 0.200 0.000 0.00 + 23.450 19.80 5.10 -0.18 0.000 0.200 0.000 0.00 + 23.500 19.82 4.80 -0.18 0.000 0.200 0.000 0.00 + 23.550 20.60 0.52 0.20 0.000 0.200 0.000 0.00 + 23.600 20.04 2.18 -0.87 0.000 0.200 0.000 0.00 + 23.650 19.40 1.90 -1.98 0.000 0.200 0.000 0.00 + 23.700 19.05 -1.56 -2.58 0.000 0.200 0.000 0.00 + 23.750 19.29 -3.52 -2.79 0.000 0.200 0.000 0.00 + 23.800 20.13 0.24 -2.55 0.000 0.200 0.000 0.00 + 23.850 20.60 1.88 -1.22 0.000 0.200 0.000 0.00 + 23.900 21.56 4.71 -1.40 0.000 0.200 0.000 0.00 + 23.950 22.14 4.41 -0.27 0.000 0.200 0.000 0.00 + 24.000 22.05 2.61 -1.58 0.000 0.200 0.000 0.00 + 24.050 20.23 3.16 -2.24 0.000 0.200 0.000 0.00 + 24.100 20.51 2.35 -2.87 0.000 0.200 0.000 0.00 + 24.150 20.83 2.91 -2.09 0.000 0.200 0.000 0.00 + 24.200 21.05 0.82 -1.09 0.000 0.200 0.000 0.00 + 24.250 21.59 -1.50 0.70 0.000 0.200 0.000 0.00 + 24.300 21.81 -1.04 0.21 0.000 0.200 0.000 0.00 + 24.350 21.47 0.33 -1.89 0.000 0.200 0.000 0.00 + 24.400 19.56 3.23 -3.96 0.000 0.200 0.000 0.00 + 24.450 20.04 3.52 -3.46 0.000 0.200 0.000 0.00 + 24.500 20.83 4.32 -2.53 0.000 0.200 0.000 0.00 + 24.550 20.67 3.27 -3.41 0.000 0.200 0.000 0.00 + 24.600 20.63 1.67 -2.34 0.000 0.200 0.000 0.00 + 24.650 21.91 1.33 -2.83 0.000 0.200 0.000 0.00 + 24.700 22.62 1.73 -3.32 0.000 0.200 0.000 0.00 + 24.750 21.41 2.76 -3.60 0.000 0.200 0.000 0.00 + 24.800 21.23 2.52 -3.65 0.000 0.200 0.000 0.00 + 24.850 22.74 1.74 -3.61 0.000 0.200 0.000 0.00 + 24.900 22.51 2.11 -2.60 0.000 0.200 0.000 0.00 + 24.950 22.79 3.56 -2.78 0.000 0.200 0.000 0.00 + 25.000 22.51 2.21 -1.35 0.000 0.200 0.000 0.00 + 25.050 21.62 2.09 -1.70 0.000 0.200 0.000 0.00 + 25.100 22.46 2.46 -2.69 0.000 0.200 0.000 0.00 + 25.150 23.28 1.22 -3.09 0.000 0.200 0.000 0.00 + 25.200 23.63 -0.77 -2.65 0.000 0.200 0.000 0.00 + 25.250 23.51 -0.05 -3.21 0.000 0.200 0.000 0.00 + 25.300 23.09 0.94 -2.86 0.000 0.200 0.000 0.00 + 25.350 23.60 0.34 -3.97 0.000 0.200 0.000 0.00 + 25.400 24.14 -1.58 -3.80 0.000 0.200 0.000 0.00 + 25.450 24.04 -0.05 -3.56 0.000 0.200 0.000 0.00 + 25.500 24.29 -2.29 -4.32 0.000 0.200 0.000 0.00 + 25.550 24.37 -3.08 -3.36 0.000 0.200 0.000 0.00 + 25.600 24.55 -2.66 -2.99 0.000 0.200 0.000 0.00 + 25.650 24.28 0.46 -3.04 0.000 0.200 0.000 0.00 + 25.700 23.27 3.38 -3.51 0.000 0.200 0.000 0.00 + 25.750 22.89 5.04 -4.21 0.000 0.200 0.000 0.00 + 25.800 22.67 6.24 -4.41 0.000 0.200 0.000 0.00 + 25.850 22.46 2.29 -5.61 0.000 0.200 0.000 0.00 + 25.900 21.98 4.28 -5.79 0.000 0.200 0.000 0.00 + 25.950 21.85 4.88 -5.03 0.000 0.200 0.000 0.00 + 26.000 22.07 5.84 -5.72 0.000 0.200 0.000 0.00 + 26.050 21.40 7.89 -6.44 0.000 0.200 0.000 0.00 + 26.100 22.17 8.75 -4.78 0.000 0.200 0.000 0.00 + 26.150 21.62 8.21 -4.38 0.000 0.200 0.000 0.00 + 26.200 20.45 6.85 -5.01 0.000 0.200 0.000 0.00 + 26.250 20.94 7.48 -4.31 0.000 0.200 0.000 0.00 + 26.300 22.25 9.97 -4.45 0.000 0.200 0.000 0.00 + 26.350 21.80 12.54 -4.18 0.000 0.200 0.000 0.00 + 26.400 23.24 16.00 -3.53 0.000 0.200 0.000 0.00 + 26.450 24.22 17.22 -2.28 0.000 0.200 0.000 0.00 + 26.500 25.05 19.71 -1.53 0.000 0.200 0.000 0.00 + 26.550 24.35 19.62 -0.83 0.000 0.200 0.000 0.00 + 26.600 23.71 16.17 -1.23 0.000 0.200 0.000 0.00 + 26.650 23.30 14.61 -0.99 0.000 0.200 0.000 0.00 + 26.700 22.95 12.01 -1.87 0.000 0.200 0.000 0.00 + 26.750 22.31 9.18 -2.03 0.000 0.200 0.000 0.00 + 26.800 21.84 11.61 -1.11 0.000 0.200 0.000 0.00 + 26.850 21.41 10.95 -1.61 0.000 0.200 0.000 0.00 + 26.900 20.20 7.25 -1.56 0.000 0.200 0.000 0.00 + 26.950 21.30 6.01 -1.23 0.000 0.200 0.000 0.00 + 27.000 22.58 5.04 -2.05 0.000 0.200 0.000 0.00 + 27.050 22.17 8.15 -1.89 0.000 0.200 0.000 0.00 + 27.100 21.68 7.57 -2.93 0.000 0.200 0.000 0.00 + 27.150 22.38 11.79 -3.16 0.000 0.200 0.000 0.00 + 27.200 22.21 13.34 -3.63 0.000 0.200 0.000 0.00 + 27.250 21.80 13.43 -3.25 0.000 0.200 0.000 0.00 + 27.300 22.11 15.03 -1.92 0.000 0.200 0.000 0.00 + 27.350 23.29 17.08 -3.57 0.000 0.200 0.000 0.00 + 27.400 23.40 15.93 -2.27 0.000 0.200 0.000 0.00 + 27.450 22.73 11.64 -3.53 0.000 0.200 0.000 0.00 + 27.500 22.99 11.61 -3.62 0.000 0.200 0.000 0.00 + 27.550 22.96 12.23 -2.54 0.000 0.200 0.000 0.00 + 27.600 22.76 14.21 -3.02 0.000 0.200 0.000 0.00 + 27.650 23.56 11.09 -3.18 0.000 0.200 0.000 0.00 + 27.700 23.19 12.42 -3.47 0.000 0.200 0.000 0.00 + 27.750 23.01 11.15 -3.01 0.000 0.200 0.000 0.00 + 27.800 22.09 12.95 -2.41 0.000 0.200 0.000 0.00 + 27.850 22.33 16.92 -3.51 0.000 0.200 0.000 0.00 + 27.900 23.17 16.39 -3.57 0.000 0.200 0.000 0.00 + 27.950 23.03 13.47 -4.37 0.000 0.200 0.000 0.00 + 28.000 22.04 13.49 -4.17 0.000 0.200 0.000 0.00 + 28.050 22.07 14.81 -3.82 0.000 0.200 0.000 0.00 + 28.100 22.95 14.95 -2.75 0.000 0.200 0.000 0.00 + 28.150 23.39 16.62 -4.15 0.000 0.200 0.000 0.00 + 28.200 23.42 14.77 -4.15 0.000 0.200 0.000 0.00 + 28.250 23.77 18.75 -4.43 0.000 0.200 0.000 0.00 + 28.300 23.59 16.80 -4.80 0.000 0.200 0.000 0.00 + 28.350 24.52 13.63 -3.12 0.000 0.200 0.000 0.00 + 28.400 23.47 13.62 -2.37 0.000 0.200 0.000 0.00 + 28.450 23.78 13.22 -2.11 0.000 0.200 0.000 0.00 + 28.500 23.73 13.61 -2.77 0.000 0.200 0.000 0.00 + 28.550 23.50 13.31 -3.65 0.000 0.200 0.000 0.00 + 28.600 23.29 11.79 -3.60 0.000 0.200 0.000 0.00 + 28.650 22.74 11.14 -3.46 0.000 0.200 0.000 0.00 + 28.700 22.75 14.06 -2.76 0.000 0.200 0.000 0.00 + 28.750 23.05 11.17 -2.34 0.000 0.200 0.000 0.00 + 28.800 23.33 9.72 -2.73 0.000 0.200 0.000 0.00 + 28.850 23.95 8.32 -2.34 0.000 0.200 0.000 0.00 + 28.900 24.63 7.85 -2.74 0.000 0.200 0.000 0.00 + 28.950 23.27 5.27 -3.44 0.000 0.200 0.000 0.00 + 29.000 23.23 4.99 -4.01 0.000 0.200 0.000 0.00 + 29.050 23.00 9.33 -4.19 0.000 0.200 0.000 0.00 + 29.100 23.36 9.61 -3.23 0.000 0.200 0.000 0.00 + 29.150 22.94 6.47 -3.95 0.000 0.200 0.000 0.00 + 29.200 24.07 8.03 -3.72 0.000 0.200 0.000 0.00 + 29.250 23.22 5.88 -3.12 0.000 0.200 0.000 0.00 + 29.300 24.10 2.85 -2.67 0.000 0.200 0.000 0.00 + 29.350 24.54 2.08 -3.48 0.000 0.200 0.000 0.00 + 29.400 23.75 3.98 -4.20 0.000 0.200 0.000 0.00 + 29.450 23.95 4.35 -3.95 0.000 0.200 0.000 0.00 + 29.500 23.31 6.34 -3.30 0.000 0.200 0.000 0.00 + 29.550 23.64 6.52 -4.12 0.000 0.200 0.000 0.00 + 29.600 24.09 7.39 -4.87 0.000 0.200 0.000 0.00 + 29.650 23.31 5.52 -5.44 0.000 0.200 0.000 0.00 + 29.700 23.44 5.87 -4.66 0.000 0.200 0.000 0.00 + 29.750 23.46 8.87 -4.95 0.000 0.200 0.000 0.00 + 29.800 23.29 7.13 -5.43 0.000 0.200 0.000 0.00 + 29.850 23.71 7.01 -4.52 0.000 0.200 0.000 0.00 + 29.900 23.42 8.55 -4.88 0.000 0.200 0.000 0.00 + 29.950 23.14 8.16 -3.87 0.000 0.200 0.000 0.00 + 30.000 23.27 9.18 -3.95 0.000 0.200 0.000 0.00 + 30.050 23.62 8.71 -5.26 0.000 0.200 0.000 0.00 + 30.100 23.19 8.92 -5.62 0.000 0.200 0.000 0.00 + 30.150 23.18 8.94 -5.13 0.000 0.200 0.000 0.00 + 30.200 23.51 10.82 -4.29 0.000 0.200 0.000 0.00 + 30.250 25.60 10.45 -4.29 0.000 0.200 0.000 0.00 + 30.300 26.03 10.27 -2.29 0.000 0.200 0.000 0.00 + 30.350 26.34 7.69 -2.87 0.000 0.200 0.000 0.00 + 30.400 26.48 3.63 -3.60 0.000 0.200 0.000 0.00 + 30.450 26.50 4.26 -3.76 0.000 0.200 0.000 0.00 + 30.500 27.27 10.66 -3.70 0.000 0.200 0.000 0.00 + 30.550 27.36 11.49 -3.91 0.000 0.200 0.000 0.00 + 30.600 27.95 9.17 -4.15 0.000 0.200 0.000 0.00 + 30.650 27.63 8.81 -6.37 0.000 0.200 0.000 0.00 + 30.700 27.47 9.75 -5.88 0.000 0.200 0.000 0.00 + 30.750 27.86 10.06 -6.39 0.000 0.200 0.000 0.00 + 30.800 27.16 10.36 -6.10 0.000 0.200 0.000 0.00 + 30.850 27.22 11.24 -4.26 0.000 0.200 0.000 0.00 + 30.900 27.61 10.43 -4.40 0.000 0.200 0.000 0.00 + 30.950 26.51 12.10 -4.65 0.000 0.200 0.000 0.00 + 31.000 25.60 10.87 -3.47 0.000 0.200 0.000 0.00 + 31.050 25.39 10.18 -4.43 0.000 0.200 0.000 0.00 + 31.100 27.07 10.39 -5.29 0.000 0.200 0.000 0.00 + 31.150 27.31 7.66 -5.36 0.000 0.200 0.000 0.00 + 31.200 27.17 5.17 -5.53 0.000 0.200 0.000 0.00 + 31.250 27.18 2.55 -5.29 0.000 0.200 0.000 0.00 + 31.300 27.12 4.86 -6.62 0.000 0.200 0.000 0.00 + 31.350 26.33 4.61 -7.64 0.000 0.200 0.000 0.00 + 31.400 25.64 4.73 -6.33 0.000 0.200 0.000 0.00 + 31.450 26.68 1.71 -6.83 0.000 0.200 0.000 0.00 + 31.500 27.78 2.28 -6.08 0.000 0.200 0.000 0.00 + 31.550 28.02 2.84 -6.37 0.000 0.200 0.000 0.00 + 31.600 26.81 2.47 -7.23 0.000 0.200 0.000 0.00 + 31.650 25.50 3.99 -6.53 0.000 0.200 0.000 0.00 + 31.700 25.94 3.30 -5.60 0.000 0.200 0.000 0.00 + 31.750 24.53 5.45 -5.20 0.000 0.200 0.000 0.00 + 31.800 24.35 3.12 -4.27 0.000 0.200 0.000 0.00 + 31.850 24.72 1.06 -4.76 0.000 0.200 0.000 0.00 + 31.900 23.68 -0.17 -4.93 0.000 0.200 0.000 0.00 + 31.950 25.07 -0.12 -4.55 0.000 0.200 0.000 0.00 + 32.000 24.64 -1.28 -5.08 0.000 0.200 0.000 0.00 + 32.050 25.61 -0.60 -5.07 0.000 0.200 0.000 0.00 + 32.100 25.39 -4.55 -3.57 0.000 0.200 0.000 0.00 + 32.150 24.32 -3.50 -2.89 0.000 0.200 0.000 0.00 + 32.200 23.86 -3.61 -3.63 0.000 0.200 0.000 0.00 + 32.250 23.98 -3.18 -4.57 0.000 0.200 0.000 0.00 + 32.300 24.24 -3.25 -6.43 0.000 0.200 0.000 0.00 + 32.350 23.71 -3.98 -4.77 0.000 0.200 0.000 0.00 + 32.400 23.64 -4.11 -4.78 0.000 0.200 0.000 0.00 + 32.450 24.48 -6.64 -5.08 0.000 0.200 0.000 0.00 + 32.500 25.02 -5.56 -4.84 0.000 0.200 0.000 0.00 + 32.550 24.71 -5.20 -6.10 0.000 0.200 0.000 0.00 + 32.600 24.65 -6.66 -6.18 0.000 0.200 0.000 0.00 + 32.650 25.07 -5.86 -5.05 0.000 0.200 0.000 0.00 + 32.700 25.06 -3.66 -5.57 0.000 0.200 0.000 0.00 + 32.750 24.96 -3.36 -4.89 0.000 0.200 0.000 0.00 + 32.800 25.78 -3.32 -5.47 0.000 0.200 0.000 0.00 + 32.850 25.82 -3.93 -5.99 0.000 0.200 0.000 0.00 + 32.900 25.07 -2.80 -5.68 0.000 0.200 0.000 0.00 + 32.950 24.38 -1.92 -4.37 0.000 0.200 0.000 0.00 + 33.000 23.94 -0.40 -4.63 0.000 0.200 0.000 0.00 + 33.050 24.32 -2.45 -4.52 0.000 0.200 0.000 0.00 + 33.100 24.42 -3.53 -3.94 0.000 0.200 0.000 0.00 + 33.150 23.82 -5.00 -2.98 0.000 0.200 0.000 0.00 + 33.200 22.51 -4.12 -2.22 0.000 0.200 0.000 0.00 + 33.250 21.39 -6.12 -3.01 0.000 0.200 0.000 0.00 + 33.300 19.90 -8.28 -3.21 0.000 0.200 0.000 0.00 + 33.350 20.30 -6.73 -3.46 0.000 0.200 0.000 0.00 + 33.400 20.13 -7.55 -2.92 0.000 0.200 0.000 0.00 + 33.450 20.32 -8.40 -2.71 0.000 0.200 0.000 0.00 + 33.500 18.81 -7.05 -3.12 0.000 0.200 0.000 0.00 + 33.550 18.80 -8.42 -3.35 0.000 0.200 0.000 0.00 + 33.600 18.12 -13.61 -4.10 0.000 0.200 0.000 0.00 + 33.650 19.08 -18.16 -3.91 0.000 0.200 0.000 0.00 + 33.700 18.11 -15.49 -3.09 0.000 0.200 0.000 0.00 + 33.750 17.57 -14.59 -4.05 0.000 0.200 0.000 0.00 + 33.800 16.88 -12.88 -3.91 0.000 0.200 0.000 0.00 + 33.850 16.89 -10.91 -4.49 0.000 0.200 0.000 0.00 + 33.900 17.45 -11.04 -3.95 0.000 0.200 0.000 0.00 + 33.950 18.90 -11.02 -3.91 0.000 0.200 0.000 0.00 + 34.000 18.60 -10.85 -3.88 0.000 0.200 0.000 0.00 + 34.050 17.71 -8.54 -3.96 0.000 0.200 0.000 0.00 + 34.100 18.01 -4.95 -2.11 0.000 0.200 0.000 0.00 + 34.150 17.20 -6.26 -2.59 0.000 0.200 0.000 0.00 + 34.200 18.44 -5.74 -1.78 0.000 0.200 0.000 0.00 + 34.250 17.79 -7.60 -0.52 0.000 0.200 0.000 0.00 + 34.300 18.47 -14.38 -0.09 0.000 0.200 0.000 0.00 + 34.350 17.50 -10.96 -0.38 0.000 0.200 0.000 0.00 + 34.400 17.07 -5.93 -0.91 0.000 0.200 0.000 0.00 + 34.450 17.80 -7.20 -1.41 0.000 0.200 0.000 0.00 + 34.500 18.01 -10.32 -0.81 0.000 0.200 0.000 0.00 + 34.550 18.31 -8.37 -1.56 0.000 0.200 0.000 0.00 + 34.600 18.74 -10.23 -0.27 0.000 0.200 0.000 0.00 + 34.650 18.72 -11.39 0.64 0.000 0.200 0.000 0.00 + 34.700 17.95 -8.84 1.34 0.000 0.200 0.000 0.00 + 34.750 17.82 -12.57 1.08 0.000 0.200 0.000 0.00 + 34.800 17.34 -11.79 0.98 0.000 0.200 0.000 0.00 + 34.850 17.61 -9.77 1.35 0.000 0.200 0.000 0.00 + 34.900 16.65 -11.26 2.56 0.000 0.200 0.000 0.00 + 34.950 16.42 -13.24 1.91 0.000 0.200 0.000 0.00 + 35.000 17.05 -9.12 -0.08 0.000 0.200 0.000 0.00 + 35.050 17.37 -8.36 -2.48 0.000 0.200 0.000 0.00 + 35.100 17.09 -9.19 -0.94 0.000 0.200 0.000 0.00 + 35.150 17.45 -10.12 -0.35 0.000 0.200 0.000 0.00 + 35.200 18.11 -9.94 -0.69 0.000 0.200 0.000 0.00 + 35.250 18.98 -10.30 -0.76 0.000 0.200 0.000 0.00 + 35.300 19.92 -9.80 0.43 0.000 0.200 0.000 0.00 + 35.350 21.32 -9.00 0.46 0.000 0.200 0.000 0.00 + 35.400 19.93 -11.01 1.85 0.000 0.200 0.000 0.00 + 35.450 19.31 -14.45 3.81 0.000 0.200 0.000 0.00 + 35.500 18.40 -14.72 4.92 0.000 0.200 0.000 0.00 + 35.550 18.31 -14.44 3.02 0.000 0.200 0.000 0.00 + 35.600 17.23 -15.71 2.80 0.000 0.200 0.000 0.00 + 35.650 17.79 -15.31 2.62 0.000 0.200 0.000 0.00 + 35.700 16.95 -19.11 3.08 0.000 0.200 0.000 0.00 + 35.750 17.68 -17.18 3.51 0.000 0.200 0.000 0.00 + 35.800 17.14 -19.29 2.89 0.000 0.200 0.000 0.00 + 35.850 17.78 -24.42 3.43 0.000 0.200 0.000 0.00 + 35.900 18.19 -20.43 3.39 0.000 0.200 0.000 0.00 + 35.950 17.31 -17.93 3.67 0.000 0.200 0.000 0.00 + 36.000 16.31 -15.89 3.31 0.000 0.200 0.000 0.00 + 36.050 17.54 -20.47 3.04 0.000 0.200 0.000 0.00 + 36.100 18.70 -21.21 2.90 0.000 0.200 0.000 0.00 + 36.150 18.30 -21.49 2.19 0.000 0.200 0.000 0.00 + 36.200 18.41 -23.66 3.17 0.000 0.200 0.000 0.00 + 36.250 18.75 -23.73 2.78 0.000 0.200 0.000 0.00 + 36.300 18.25 -22.63 3.21 0.000 0.200 0.000 0.00 + 36.350 19.18 -22.84 1.86 0.000 0.200 0.000 0.00 + 36.400 19.86 -25.44 0.95 0.000 0.200 0.000 0.00 + 36.450 19.05 -29.70 1.00 0.000 0.200 0.000 0.00 + 36.500 18.83 -27.03 1.36 0.000 0.200 0.000 0.00 + 36.550 18.68 -30.76 1.21 0.000 0.200 0.000 0.00 + 36.600 18.23 -31.57 1.13 0.000 0.200 0.000 0.00 + 36.650 17.86 -28.02 1.99 0.000 0.200 0.000 0.00 + 36.700 17.05 -25.58 1.59 0.000 0.200 0.000 0.00 + 36.750 16.35 -26.49 1.07 0.000 0.200 0.000 0.00 + 36.800 16.45 -26.96 1.55 0.000 0.200 0.000 0.00 + 36.850 15.50 -28.68 1.36 0.000 0.200 0.000 0.00 + 36.900 15.89 -28.25 0.11 0.000 0.200 0.000 0.00 + 36.950 15.08 -26.01 -0.09 0.000 0.200 0.000 0.00 + 37.000 15.29 -30.74 -0.52 0.000 0.200 0.000 0.00 + 37.050 15.83 -28.91 -0.19 0.000 0.200 0.000 0.00 + 37.100 15.76 -28.63 -0.69 0.000 0.200 0.000 0.00 + 37.150 16.70 -29.95 -0.86 0.000 0.200 0.000 0.00 + 37.200 17.10 -29.72 0.03 0.000 0.200 0.000 0.00 + 37.250 16.57 -27.82 -0.21 0.000 0.200 0.000 0.00 + 37.300 17.06 -29.55 -0.46 0.000 0.200 0.000 0.00 + 37.350 16.51 -29.01 -0.87 0.000 0.200 0.000 0.00 + 37.400 17.38 -26.58 -1.25 0.000 0.200 0.000 0.00 + 37.450 17.18 -28.07 -0.08 0.000 0.200 0.000 0.00 + 37.500 17.83 -27.86 -0.26 0.000 0.200 0.000 0.00 + 37.550 17.73 -28.57 -0.43 0.000 0.200 0.000 0.00 + 37.600 17.76 -25.27 -0.67 0.000 0.200 0.000 0.00 + 37.650 17.29 -23.32 0.42 0.000 0.200 0.000 0.00 + 37.700 16.71 -20.62 0.86 0.000 0.200 0.000 0.00 + 37.750 17.35 -19.62 0.11 0.000 0.200 0.000 0.00 + 37.800 18.14 -15.56 0.47 0.000 0.200 0.000 0.00 + 37.850 18.84 -15.05 0.23 0.000 0.200 0.000 0.00 + 37.900 18.81 -11.09 -0.79 0.000 0.200 0.000 0.00 + 37.950 18.66 -14.26 0.52 0.000 0.200 0.000 0.00 + 38.000 18.92 -16.43 0.66 0.000 0.200 0.000 0.00 + 38.050 19.52 -12.91 0.88 0.000 0.200 0.000 0.00 + 38.100 19.74 -8.17 0.99 0.000 0.200 0.000 0.00 + 38.150 19.22 -8.91 0.44 0.000 0.200 0.000 0.00 + 38.200 18.40 -13.09 0.65 0.000 0.200 0.000 0.00 + 38.250 19.50 -12.47 0.29 0.000 0.200 0.000 0.00 + 38.300 18.55 -11.39 -0.26 0.000 0.200 0.000 0.00 + 38.350 19.38 -11.97 -0.54 0.000 0.200 0.000 0.00 + 38.400 19.70 -16.89 -1.07 0.000 0.200 0.000 0.00 + 38.450 19.78 -16.17 -1.95 0.000 0.200 0.000 0.00 + 38.500 20.76 -14.59 -1.07 0.000 0.200 0.000 0.00 + 38.550 20.81 -16.82 -1.21 0.000 0.200 0.000 0.00 + 38.600 20.81 -15.57 -0.21 0.000 0.200 0.000 0.00 + 38.650 20.89 -13.56 0.19 0.000 0.200 0.000 0.00 + 38.700 20.91 -14.53 1.95 0.000 0.200 0.000 0.00 + 38.750 19.65 -10.27 1.46 0.000 0.200 0.000 0.00 + 38.800 19.57 -10.26 0.78 0.000 0.200 0.000 0.00 + 38.850 18.35 -9.25 1.55 0.000 0.200 0.000 0.00 + 38.900 18.35 -13.48 1.30 0.000 0.200 0.000 0.00 + 38.950 17.69 -14.96 1.86 0.000 0.200 0.000 0.00 + 39.000 17.04 -13.73 1.36 0.000 0.200 0.000 0.00 + 39.050 16.97 -11.47 1.27 0.000 0.200 0.000 0.00 + 39.100 15.95 -9.57 1.14 0.000 0.200 0.000 0.00 + 39.150 16.20 -14.55 0.88 0.000 0.200 0.000 0.00 + 39.200 17.31 -14.38 0.50 0.000 0.200 0.000 0.00 + 39.250 17.49 -13.22 0.69 0.000 0.200 0.000 0.00 + 39.300 16.59 -13.91 0.42 0.000 0.200 0.000 0.00 + 39.350 15.61 -14.25 1.40 0.000 0.200 0.000 0.00 + 39.400 15.20 -18.83 1.29 0.000 0.200 0.000 0.00 + 39.450 15.95 -20.50 1.98 0.000 0.200 0.000 0.00 + 39.500 15.62 -14.53 2.76 0.000 0.200 0.000 0.00 + 39.550 16.03 -11.12 1.77 0.000 0.200 0.000 0.00 + 39.600 16.71 -11.64 0.58 0.000 0.200 0.000 0.00 + 39.650 16.61 -9.83 0.79 0.000 0.200 0.000 0.00 + 39.700 16.01 -7.79 0.06 0.000 0.200 0.000 0.00 + 39.750 15.45 -4.76 -0.38 0.000 0.200 0.000 0.00 + 39.800 15.35 -3.35 -0.45 0.000 0.200 0.000 0.00 + 39.850 16.99 -3.27 -0.61 0.000 0.200 0.000 0.00 + 39.900 16.86 -0.12 -1.19 0.000 0.200 0.000 0.00 + 39.950 16.04 0.11 -0.97 0.000 0.200 0.000 0.00 + 40.000 14.98 -2.90 -0.04 0.000 0.200 0.000 0.00 + 40.050 14.06 1.53 -0.61 0.000 0.200 0.000 0.00 + 40.100 14.39 0.06 -0.41 0.000 0.200 0.000 0.00 + 40.150 14.66 0.84 -1.06 0.000 0.200 0.000 0.00 + 40.200 14.77 -0.29 -0.01 0.000 0.200 0.000 0.00 + 40.250 15.17 2.68 1.09 0.000 0.200 0.000 0.00 + 40.300 14.89 3.70 0.95 0.000 0.200 0.000 0.00 + 40.350 14.83 0.68 0.79 0.000 0.200 0.000 0.00 + 40.400 14.95 1.49 0.82 0.000 0.200 0.000 0.00 + 40.450 14.60 0.12 1.36 0.000 0.200 0.000 0.00 + 40.500 14.43 0.55 1.27 0.000 0.200 0.000 0.00 + 40.550 14.51 -4.92 1.12 0.000 0.200 0.000 0.00 + 40.600 15.75 -3.24 -0.19 0.000 0.200 0.000 0.00 + 40.650 14.77 -4.22 0.64 0.000 0.200 0.000 0.00 + 40.700 15.16 -5.98 0.60 0.000 0.200 0.000 0.00 + 40.750 13.79 -3.93 0.36 0.000 0.200 0.000 0.00 + 40.800 12.69 -3.45 0.83 0.000 0.200 0.000 0.00 + 40.850 13.32 2.30 1.75 0.000 0.200 0.000 0.00 + 40.900 12.70 2.50 0.81 0.000 0.200 0.000 0.00 + 40.950 13.26 4.19 0.83 0.000 0.200 0.000 0.00 + 41.000 12.70 3.10 1.76 0.000 0.200 0.000 0.00 + 41.050 12.17 -1.92 1.87 0.000 0.200 0.000 0.00 + 41.100 12.38 -5.31 1.06 0.000 0.200 0.000 0.00 + 41.150 13.69 -1.95 1.53 0.000 0.200 0.000 0.00 + 41.200 14.06 0.52 1.64 0.000 0.200 0.000 0.00 + 41.250 13.14 3.48 2.44 0.000 0.200 0.000 0.00 + 41.300 13.56 4.36 2.09 0.000 0.200 0.000 0.00 + 41.350 13.96 0.78 2.47 0.000 0.200 0.000 0.00 + 41.400 13.03 3.54 2.94 0.000 0.200 0.000 0.00 + 41.450 12.34 10.35 1.77 0.000 0.200 0.000 0.00 + 41.500 12.91 12.27 1.73 0.000 0.200 0.000 0.00 + 41.550 13.55 10.27 2.26 0.000 0.200 0.000 0.00 + 41.600 13.05 8.95 2.00 0.000 0.200 0.000 0.00 + 41.650 12.13 12.15 1.12 0.000 0.200 0.000 0.00 + 41.700 10.99 0.49 0.39 0.000 0.200 0.000 0.00 + 41.750 10.85 1.26 1.60 0.000 0.200 0.000 0.00 + 41.800 12.09 0.58 2.34 0.000 0.200 0.000 0.00 + 41.850 13.29 1.43 1.07 0.000 0.200 0.000 0.00 + 41.900 13.53 4.35 1.21 0.000 0.200 0.000 0.00 + 41.950 13.66 4.68 0.49 0.000 0.200 0.000 0.00 + 42.000 13.40 4.31 1.34 0.000 0.200 0.000 0.00 + 42.050 13.98 0.15 2.13 0.000 0.200 0.000 0.00 + 42.100 14.25 0.17 1.72 0.000 0.200 0.000 0.00 + 42.150 14.57 5.03 1.00 0.000 0.200 0.000 0.00 + 42.200 14.96 5.98 0.97 0.000 0.200 0.000 0.00 + 42.250 13.87 4.43 2.54 0.000 0.200 0.000 0.00 + 42.300 14.01 6.63 1.82 0.000 0.200 0.000 0.00 + 42.350 14.64 6.91 1.70 0.000 0.200 0.000 0.00 + 42.400 15.11 10.28 0.81 0.000 0.200 0.000 0.00 + 42.450 14.98 8.86 0.98 0.000 0.200 0.000 0.00 + 42.500 14.63 4.86 0.69 0.000 0.200 0.000 0.00 + 42.550 15.40 -0.48 1.00 0.000 0.200 0.000 0.00 + 42.600 14.88 3.03 0.97 0.000 0.200 0.000 0.00 + 42.650 15.47 2.88 -0.14 0.000 0.200 0.000 0.00 + 42.700 15.02 -4.18 0.63 0.000 0.200 0.000 0.00 + 42.750 15.19 -8.58 0.72 0.000 0.200 0.000 0.00 + 42.800 15.53 -12.00 -0.45 0.000 0.200 0.000 0.00 + 42.850 16.22 -11.41 -1.83 0.000 0.200 0.000 0.00 + 42.900 16.92 -10.20 -1.73 0.000 0.200 0.000 0.00 + 42.950 16.34 -9.44 -1.54 0.000 0.200 0.000 0.00 + 43.000 16.90 -11.45 -2.66 0.000 0.200 0.000 0.00 + 43.050 16.55 -10.82 -2.71 0.000 0.200 0.000 0.00 + 43.100 17.05 -10.99 -3.06 0.000 0.200 0.000 0.00 + 43.150 16.65 -12.10 -3.26 0.000 0.200 0.000 0.00 + 43.200 17.08 -10.54 -2.13 0.000 0.200 0.000 0.00 + 43.250 17.63 -6.42 -3.10 0.000 0.200 0.000 0.00 + 43.300 17.30 -7.00 -3.73 0.000 0.200 0.000 0.00 + 43.350 17.31 -6.48 -3.07 0.000 0.200 0.000 0.00 + 43.400 17.08 -5.39 -2.47 0.000 0.200 0.000 0.00 + 43.450 16.99 -4.58 -3.08 0.000 0.200 0.000 0.00 + 43.500 17.74 -6.71 -3.14 0.000 0.200 0.000 0.00 + 43.550 17.54 -4.93 -3.35 0.000 0.200 0.000 0.00 + 43.600 17.00 -3.58 -2.31 0.000 0.200 0.000 0.00 + 43.650 16.53 -8.45 -1.74 0.000 0.200 0.000 0.00 + 43.700 16.61 -7.78 -2.84 0.000 0.200 0.000 0.00 + 43.750 16.20 -6.39 -3.15 0.000 0.200 0.000 0.00 + 43.800 15.95 2.52 -2.98 0.000 0.200 0.000 0.00 + 43.850 16.31 2.64 -3.62 0.000 0.200 0.000 0.00 + 43.900 16.55 4.10 -4.04 0.000 0.200 0.000 0.00 + 43.950 17.05 0.10 -4.03 0.000 0.200 0.000 0.00 + 44.000 16.72 -1.02 -3.66 0.000 0.200 0.000 0.00 + 44.050 15.81 -3.51 -2.82 0.000 0.200 0.000 0.00 + 44.100 15.66 -1.46 -3.41 0.000 0.200 0.000 0.00 + 44.150 15.69 -0.99 -3.96 0.000 0.200 0.000 0.00 + 44.200 15.25 3.63 -3.86 0.000 0.200 0.000 0.00 + 44.250 16.02 -1.19 -3.92 0.000 0.200 0.000 0.00 + 44.300 17.21 2.75 -2.41 0.000 0.200 0.000 0.00 + 44.350 17.09 7.63 -3.30 0.000 0.200 0.000 0.00 + 44.400 16.93 7.63 -2.15 0.000 0.200 0.000 0.00 + 44.450 16.10 6.56 -2.24 0.000 0.200 0.000 0.00 + 44.500 15.92 4.55 -2.03 0.000 0.200 0.000 0.00 + 44.550 15.04 2.69 -2.08 0.000 0.200 0.000 0.00 + 44.600 15.75 -1.14 -2.60 0.000 0.200 0.000 0.00 + 44.650 15.57 -4.49 -1.13 0.000 0.200 0.000 0.00 + 44.700 15.55 -7.78 -1.73 0.000 0.200 0.000 0.00 + 44.750 16.15 -11.34 -1.38 0.000 0.200 0.000 0.00 + 44.800 15.34 -7.24 -1.63 0.000 0.200 0.000 0.00 + 44.850 16.44 -2.81 -1.29 0.000 0.200 0.000 0.00 + 44.900 16.45 -3.66 -2.08 0.000 0.200 0.000 0.00 + 44.950 16.74 -2.47 -1.87 0.000 0.200 0.000 0.00 + 45.000 16.92 -2.14 -1.45 0.000 0.200 0.000 0.00 + 45.050 18.06 -2.32 -0.70 0.000 0.200 0.000 0.00 + 45.100 17.08 -1.42 -2.46 0.000 0.200 0.000 0.00 + 45.150 16.13 -1.17 -2.26 0.000 0.200 0.000 0.00 + 45.200 16.83 -4.27 -1.26 0.000 0.200 0.000 0.00 + 45.250 16.04 -5.05 -1.73 0.000 0.200 0.000 0.00 + 45.300 15.47 -8.40 -1.36 0.000 0.200 0.000 0.00 + 45.350 15.80 -4.27 -1.47 0.000 0.200 0.000 0.00 + 45.400 15.35 -7.62 -1.81 0.000 0.200 0.000 0.00 + 45.450 15.34 -4.04 -2.07 0.000 0.200 0.000 0.00 + 45.500 16.14 -1.39 -2.47 0.000 0.200 0.000 0.00 + 45.550 16.80 -2.47 -1.00 0.000 0.200 0.000 0.00 + 45.600 15.78 -1.97 -1.48 0.000 0.200 0.000 0.00 + 45.650 15.25 -3.11 -1.91 0.000 0.200 0.000 0.00 + 45.700 14.71 -2.76 -1.80 0.000 0.200 0.000 0.00 + 45.750 15.69 -1.81 -1.25 0.000 0.200 0.000 0.00 + 45.800 16.08 -1.36 -1.26 0.000 0.200 0.000 0.00 + 45.850 16.53 -3.92 -1.06 0.000 0.200 0.000 0.00 + 45.900 17.24 -7.11 -1.06 0.000 0.200 0.000 0.00 + 45.950 17.66 -10.29 -0.96 0.000 0.200 0.000 0.00 + 46.000 17.63 -9.90 -0.59 0.000 0.200 0.000 0.00 + 46.050 17.20 -10.43 -0.94 0.000 0.200 0.000 0.00 + 46.100 17.12 -11.19 -1.76 0.000 0.200 0.000 0.00 + 46.150 17.29 -10.39 -1.60 0.000 0.200 0.000 0.00 + 46.200 17.80 -9.13 -0.70 0.000 0.200 0.000 0.00 + 46.250 17.48 -8.19 -2.48 0.000 0.200 0.000 0.00 + 46.300 16.88 -10.14 -1.52 0.000 0.200 0.000 0.00 + 46.350 16.82 -5.78 -1.98 0.000 0.200 0.000 0.00 + 46.400 16.81 -7.49 -2.61 0.000 0.200 0.000 0.00 + 46.450 16.91 -9.91 -2.58 0.000 0.200 0.000 0.00 + 46.500 16.31 -5.95 -3.12 0.000 0.200 0.000 0.00 + 46.550 16.12 -7.20 -3.24 0.000 0.200 0.000 0.00 + 46.600 15.96 -9.48 -2.47 0.000 0.200 0.000 0.00 + 46.650 14.77 -9.85 -2.73 0.000 0.200 0.000 0.00 + 46.700 15.56 -6.55 -4.00 0.000 0.200 0.000 0.00 + 46.750 14.65 -8.63 -2.87 0.000 0.200 0.000 0.00 + 46.800 13.78 -7.70 -2.21 0.000 0.200 0.000 0.00 + 46.850 13.98 -5.19 -2.14 0.000 0.200 0.000 0.00 + 46.900 14.36 -6.28 -1.22 0.000 0.200 0.000 0.00 + 46.950 14.98 -2.51 -1.39 0.000 0.200 0.000 0.00 + 47.000 15.05 -1.10 -1.35 0.000 0.200 0.000 0.00 + 47.050 16.21 1.55 -1.88 0.000 0.200 0.000 0.00 + 47.100 15.04 7.33 -0.04 0.000 0.200 0.000 0.00 + 47.150 14.19 3.77 1.86 0.000 0.200 0.000 0.00 + 47.200 13.88 3.02 2.39 0.000 0.200 0.000 0.00 + 47.250 13.40 3.06 3.00 0.000 0.200 0.000 0.00 + 47.300 13.82 -1.02 2.14 0.000 0.200 0.000 0.00 + 47.350 14.25 -4.30 3.02 0.000 0.200 0.000 0.00 + 47.400 15.04 1.09 2.99 0.000 0.200 0.000 0.00 + 47.450 15.15 -4.06 4.15 0.000 0.200 0.000 0.00 + 47.500 14.79 -11.58 2.57 0.000 0.200 0.000 0.00 + 47.550 14.93 -13.37 3.29 0.000 0.200 0.000 0.00 + 47.600 14.65 -13.36 2.97 0.000 0.200 0.000 0.00 + 47.650 14.97 -8.57 2.78 0.000 0.200 0.000 0.00 + 47.700 14.26 -10.35 3.21 0.000 0.200 0.000 0.00 + 47.750 12.76 -7.93 2.52 0.000 0.200 0.000 0.00 + 47.800 12.46 -0.39 2.95 0.000 0.200 0.000 0.00 + 47.850 12.31 5.08 2.52 0.000 0.200 0.000 0.00 + 47.900 13.93 7.38 2.42 0.000 0.200 0.000 0.00 + 47.950 14.53 -0.43 2.35 0.000 0.200 0.000 0.00 + 48.000 15.02 -0.63 3.19 0.000 0.200 0.000 0.00 + 48.050 15.59 -0.81 1.99 0.000 0.200 0.000 0.00 + 48.100 16.92 1.52 0.92 0.000 0.200 0.000 0.00 + 48.150 16.43 -2.61 -0.09 0.000 0.200 0.000 0.00 + 48.200 16.54 -1.34 0.50 0.000 0.200 0.000 0.00 + 48.250 15.95 0.79 0.30 0.000 0.200 0.000 0.00 + 48.300 15.66 2.20 -0.07 0.000 0.200 0.000 0.00 + 48.350 16.03 3.23 -0.34 0.000 0.200 0.000 0.00 + 48.400 15.59 0.66 1.54 0.000 0.200 0.000 0.00 + 48.450 15.71 0.96 0.82 0.000 0.200 0.000 0.00 + 48.500 15.24 6.22 -0.48 0.000 0.200 0.000 0.00 + 48.550 15.83 4.87 0.23 0.000 0.200 0.000 0.00 + 48.600 15.75 6.56 -0.44 0.000 0.200 0.000 0.00 + 48.650 17.29 6.79 -0.81 0.000 0.200 0.000 0.00 + 48.700 16.73 9.37 -0.35 0.000 0.200 0.000 0.00 + 48.750 16.91 9.06 0.52 0.000 0.200 0.000 0.00 + 48.800 18.02 6.97 0.88 0.000 0.200 0.000 0.00 + 48.850 17.23 4.40 1.87 0.000 0.200 0.000 0.00 + 48.900 17.18 3.96 1.03 0.000 0.200 0.000 0.00 + 48.950 16.84 9.78 1.58 0.000 0.200 0.000 0.00 + 49.000 16.67 7.70 2.19 0.000 0.200 0.000 0.00 + 49.050 16.59 5.23 3.26 0.000 0.200 0.000 0.00 + 49.100 16.42 9.56 2.04 0.000 0.200 0.000 0.00 + 49.150 16.34 10.23 1.07 0.000 0.200 0.000 0.00 + 49.200 16.67 9.97 0.63 0.000 0.200 0.000 0.00 + 49.250 16.62 13.00 1.65 0.000 0.200 0.000 0.00 + 49.300 16.60 13.83 1.46 0.000 0.200 0.000 0.00 + 49.350 16.16 11.46 0.51 0.000 0.200 0.000 0.00 + 49.400 15.47 11.51 0.98 0.000 0.200 0.000 0.00 + 49.450 17.06 12.06 2.28 0.000 0.200 0.000 0.00 + 49.500 16.61 8.73 2.73 0.000 0.200 0.000 0.00 + 49.550 16.04 12.18 3.12 0.000 0.200 0.000 0.00 + 49.600 16.35 10.07 3.15 0.000 0.200 0.000 0.00 + 49.650 16.38 9.40 4.19 0.000 0.200 0.000 0.00 + 49.700 16.03 5.76 4.08 0.000 0.200 0.000 0.00 + 49.750 15.65 2.12 3.37 0.000 0.200 0.000 0.00 + 49.800 14.67 5.80 2.84 0.000 0.200 0.000 0.00 + 49.850 14.68 3.67 4.27 0.000 0.200 0.000 0.00 + 49.900 14.36 3.23 4.57 0.000 0.200 0.000 0.00 + 49.950 13.78 1.49 4.48 0.000 0.200 0.000 0.00 + 50.000 13.67 -7.12 4.66 0.000 0.200 0.000 0.00 + 50.050 14.10 -4.38 4.29 0.000 0.200 0.000 0.00 + 50.100 13.20 -3.25 3.85 0.000 0.200 0.000 0.00 + 50.150 12.49 -4.83 2.14 0.000 0.200 0.000 0.00 + 50.200 13.32 -3.71 2.01 0.000 0.200 0.000 0.00 + 50.250 12.87 -4.69 2.12 0.000 0.200 0.000 0.00 + 50.300 13.00 -8.68 1.65 0.000 0.200 0.000 0.00 + 50.350 13.48 -6.32 0.45 0.000 0.200 0.000 0.00 + 50.400 13.72 -1.88 1.10 0.000 0.200 0.000 0.00 + 50.450 14.69 -3.79 1.73 0.000 0.200 0.000 0.00 + 50.500 14.59 -5.72 2.24 0.000 0.200 0.000 0.00 + 50.550 14.36 -5.42 0.80 0.000 0.200 0.000 0.00 + 50.600 13.47 -6.13 0.28 0.000 0.200 0.000 0.00 + 50.650 13.60 -8.27 0.23 0.000 0.200 0.000 0.00 + 50.700 14.99 -9.19 0.95 0.000 0.200 0.000 0.00 + 50.750 14.64 -7.87 0.08 0.000 0.200 0.000 0.00 + 50.800 15.22 -6.54 -0.30 0.000 0.200 0.000 0.00 + 50.850 16.37 -5.26 -1.33 0.000 0.200 0.000 0.00 + 50.900 16.88 -9.13 -1.34 0.000 0.200 0.000 0.00 + 50.950 16.70 -8.03 -1.89 0.000 0.200 0.000 0.00 + 51.000 16.94 -7.53 -0.97 0.000 0.200 0.000 0.00 + 51.050 17.49 -6.38 -1.07 0.000 0.200 0.000 0.00 + 51.100 16.94 -5.23 -0.89 0.000 0.200 0.000 0.00 + 51.150 17.84 -8.32 -0.90 0.000 0.200 0.000 0.00 + 51.200 18.68 -8.39 -0.68 0.000 0.200 0.000 0.00 + 51.250 17.60 -7.93 -0.77 0.000 0.200 0.000 0.00 + 51.300 17.59 -5.97 -0.52 0.000 0.200 0.000 0.00 + 51.350 18.38 -7.39 0.16 0.000 0.200 0.000 0.00 + 51.400 18.43 -8.19 1.67 0.000 0.200 0.000 0.00 + 51.450 17.14 -9.55 2.83 0.000 0.200 0.000 0.00 + 51.500 17.07 -10.17 2.89 0.000 0.200 0.000 0.00 + 51.550 18.12 -9.63 2.49 0.000 0.200 0.000 0.00 + 51.600 18.73 -8.30 2.22 0.000 0.200 0.000 0.00 + 51.650 19.07 -6.20 2.20 0.000 0.200 0.000 0.00 + 51.700 19.31 -6.60 2.24 0.000 0.200 0.000 0.00 + 51.750 20.20 -4.29 2.57 0.000 0.200 0.000 0.00 + 51.800 19.85 -3.79 1.46 0.000 0.200 0.000 0.00 + 51.850 17.14 -9.17 1.36 0.000 0.200 0.000 0.00 + 51.900 16.12 -6.01 0.78 0.000 0.200 0.000 0.00 + 51.950 16.25 -5.97 -0.27 0.000 0.200 0.000 0.00 + 52.000 17.62 -6.08 -0.72 0.000 0.200 0.000 0.00 + 52.050 16.98 -4.87 0.01 0.000 0.200 0.000 0.00 + 52.100 17.26 -0.13 0.66 0.000 0.200 0.000 0.00 + 52.150 16.50 5.64 0.40 0.000 0.200 0.000 0.00 + 52.200 17.37 2.75 0.30 0.000 0.200 0.000 0.00 + 52.250 18.07 0.49 -0.07 0.000 0.200 0.000 0.00 + 52.300 17.72 2.04 -0.73 0.000 0.200 0.000 0.00 + 52.350 17.95 0.01 -1.68 0.000 0.200 0.000 0.00 + 52.400 17.41 4.62 -3.30 0.000 0.200 0.000 0.00 + 52.450 16.40 6.54 -2.94 0.000 0.200 0.000 0.00 + 52.500 17.50 5.23 -2.70 0.000 0.200 0.000 0.00 + 52.550 17.82 8.74 -1.94 0.000 0.200 0.000 0.00 + 52.600 17.97 6.99 -0.93 0.000 0.200 0.000 0.00 + 52.650 18.94 4.68 -0.48 0.000 0.200 0.000 0.00 + 52.700 18.53 4.12 -1.26 0.000 0.200 0.000 0.00 + 52.750 16.77 0.63 -2.22 0.000 0.200 0.000 0.00 + 52.800 16.75 0.68 -1.65 0.000 0.200 0.000 0.00 + 52.850 16.64 4.58 -0.06 0.000 0.200 0.000 0.00 + 52.900 15.99 4.54 -0.62 0.000 0.200 0.000 0.00 + 52.950 16.52 5.35 -1.48 0.000 0.200 0.000 0.00 + 53.000 17.11 6.14 -0.90 0.000 0.200 0.000 0.00 + 53.050 17.30 5.29 0.56 0.000 0.200 0.000 0.00 + 53.100 16.46 2.09 1.31 0.000 0.200 0.000 0.00 + 53.150 17.53 4.21 1.14 0.000 0.200 0.000 0.00 + 53.200 16.43 -0.60 1.72 0.000 0.200 0.000 0.00 + 53.250 16.70 -4.71 1.49 0.000 0.200 0.000 0.00 + 53.300 17.57 -3.74 0.60 0.000 0.200 0.000 0.00 + 53.350 17.64 -8.70 1.10 0.000 0.200 0.000 0.00 + 53.400 16.47 -9.08 0.53 0.000 0.200 0.000 0.00 + 53.450 16.79 -5.01 -0.32 0.000 0.200 0.000 0.00 + 53.500 16.23 -5.33 1.27 0.000 0.200 0.000 0.00 + 53.550 16.51 -6.30 2.51 0.000 0.200 0.000 0.00 + 53.600 16.25 -4.78 2.67 0.000 0.200 0.000 0.00 + 53.650 16.08 -4.39 2.74 0.000 0.200 0.000 0.00 + 53.700 16.45 -1.47 1.68 0.000 0.200 0.000 0.00 + 53.750 17.13 -6.67 0.84 0.000 0.200 0.000 0.00 + 53.800 18.14 -12.77 0.30 0.000 0.200 0.000 0.00 + 53.850 17.96 -6.55 -1.59 0.000 0.200 0.000 0.00 + 53.900 17.13 -5.43 -0.93 0.000 0.200 0.000 0.00 + 53.950 15.99 -3.38 -1.59 0.000 0.200 0.000 0.00 + 54.000 15.26 -3.14 -1.97 0.000 0.200 0.000 0.00 + 54.050 15.63 -6.15 -2.07 0.000 0.200 0.000 0.00 + 54.100 15.84 -4.98 -2.57 0.000 0.200 0.000 0.00 + 54.150 16.83 -1.43 -1.60 0.000 0.200 0.000 0.00 + 54.200 16.47 -1.41 -2.56 0.000 0.200 0.000 0.00 + 54.250 16.04 0.30 -3.68 0.000 0.200 0.000 0.00 + 54.300 15.74 3.66 -2.96 0.000 0.200 0.000 0.00 + 54.350 15.51 6.74 -3.39 0.000 0.200 0.000 0.00 + 54.400 15.09 5.83 -3.97 0.000 0.200 0.000 0.00 + 54.450 15.85 7.15 -4.17 0.000 0.200 0.000 0.00 + 54.500 15.76 10.81 -4.14 0.000 0.200 0.000 0.00 + 54.550 17.55 14.35 -4.34 0.000 0.200 0.000 0.00 + 54.600 17.30 11.16 -4.48 0.000 0.200 0.000 0.00 + 54.650 16.61 10.76 -3.24 0.000 0.200 0.000 0.00 + 54.700 17.33 7.43 -3.85 0.000 0.200 0.000 0.00 + 54.750 16.90 9.15 -4.61 0.000 0.200 0.000 0.00 + 54.800 17.35 8.59 -5.81 0.000 0.200 0.000 0.00 + 54.850 16.72 5.02 -6.49 0.000 0.200 0.000 0.00 + 54.900 17.15 3.41 -6.28 0.000 0.200 0.000 0.00 + 54.950 17.88 6.34 -7.49 0.000 0.200 0.000 0.00 + 55.000 17.30 5.91 -7.45 0.000 0.200 0.000 0.00 + 55.050 17.45 2.19 -7.54 0.000 0.200 0.000 0.00 + 55.100 17.43 2.54 -6.40 0.000 0.200 0.000 0.00 + 55.150 17.30 2.67 -5.88 0.000 0.200 0.000 0.00 + 55.200 17.84 -0.49 -6.37 0.000 0.200 0.000 0.00 + 55.250 18.32 -1.64 -5.70 0.000 0.200 0.000 0.00 + 55.300 18.45 -7.60 -7.19 0.000 0.200 0.000 0.00 + 55.350 19.41 -4.60 -6.79 0.000 0.200 0.000 0.00 + 55.400 18.72 -6.09 -4.98 0.000 0.200 0.000 0.00 + 55.450 17.86 -8.48 -4.88 0.000 0.200 0.000 0.00 + 55.500 18.60 -11.48 -5.60 0.000 0.200 0.000 0.00 + 55.550 18.24 -11.96 -5.84 0.000 0.200 0.000 0.00 + 55.600 17.96 -6.49 -5.61 0.000 0.200 0.000 0.00 + 55.650 17.45 -9.99 -5.35 0.000 0.200 0.000 0.00 + 55.700 16.69 -8.74 -4.78 0.000 0.200 0.000 0.00 + 55.750 16.15 -7.32 -4.69 0.000 0.200 0.000 0.00 + 55.800 15.79 -5.94 -5.47 0.000 0.200 0.000 0.00 + 55.850 16.22 -10.36 -5.69 0.000 0.200 0.000 0.00 + 55.900 16.77 -7.54 -5.42 0.000 0.200 0.000 0.00 + 55.950 15.53 -2.87 -5.50 0.000 0.200 0.000 0.00 + 56.000 16.19 -7.00 -5.19 0.000 0.200 0.000 0.00 + 56.050 16.26 -7.20 -5.04 0.000 0.200 0.000 0.00 + 56.100 16.36 -7.19 -3.74 0.000 0.200 0.000 0.00 + 56.150 16.37 -5.43 -3.42 0.000 0.200 0.000 0.00 + 56.200 17.57 -6.83 -2.20 0.000 0.200 0.000 0.00 + 56.250 18.17 -7.74 -2.37 0.000 0.200 0.000 0.00 + 56.300 18.22 -7.92 -2.74 0.000 0.200 0.000 0.00 + 56.350 17.67 -7.77 -2.26 0.000 0.200 0.000 0.00 + 56.400 17.32 -7.36 -2.43 0.000 0.200 0.000 0.00 + 56.450 17.79 -10.10 -3.62 0.000 0.200 0.000 0.00 + 56.500 18.14 -12.76 -1.51 0.000 0.200 0.000 0.00 + 56.550 18.73 -9.73 -1.69 0.000 0.200 0.000 0.00 + 56.600 18.05 -12.13 -3.61 0.000 0.200 0.000 0.00 + 56.650 18.67 -14.38 -3.41 0.000 0.200 0.000 0.00 + 56.700 19.13 -13.49 -3.12 0.000 0.200 0.000 0.00 + 56.750 18.24 -15.05 -2.47 0.000 0.200 0.000 0.00 + 56.800 18.16 -12.17 -1.37 0.000 0.200 0.000 0.00 + 56.850 17.98 -12.16 0.86 0.000 0.200 0.000 0.00 + 56.900 17.14 -12.78 0.60 0.000 0.200 0.000 0.00 + 56.950 18.06 -12.36 -0.06 0.000 0.200 0.000 0.00 + 57.000 18.27 -11.04 2.13 0.000 0.200 0.000 0.00 + 57.050 17.50 -5.04 2.00 0.000 0.200 0.000 0.00 + 57.100 17.87 -5.40 1.03 0.000 0.200 0.000 0.00 + 57.150 17.88 -6.74 1.57 0.000 0.200 0.000 0.00 + 57.200 16.92 -8.52 0.72 0.000 0.200 0.000 0.00 + 57.250 17.27 -6.21 0.87 0.000 0.200 0.000 0.00 + 57.300 17.03 -8.52 -0.03 0.000 0.200 0.000 0.00 + 57.350 17.56 -9.04 0.03 0.000 0.200 0.000 0.00 + 57.400 17.66 -10.30 0.36 0.000 0.200 0.000 0.00 + 57.450 17.42 -2.85 0.86 0.000 0.200 0.000 0.00 + 57.500 17.28 1.14 1.55 0.000 0.200 0.000 0.00 + 57.550 16.94 3.60 1.81 0.000 0.200 0.000 0.00 + 57.600 16.99 3.77 2.91 0.000 0.200 0.000 0.00 + 57.650 17.41 1.80 2.69 0.000 0.200 0.000 0.00 + 57.700 17.85 -3.91 2.77 0.000 0.200 0.000 0.00 + 57.750 18.08 -7.67 2.05 0.000 0.200 0.000 0.00 + 57.800 18.53 -6.90 2.95 0.000 0.200 0.000 0.00 + 57.850 18.34 -5.30 2.19 0.000 0.200 0.000 0.00 + 57.900 17.63 -1.82 2.86 0.000 0.200 0.000 0.00 + 57.950 17.14 -5.44 3.85 0.000 0.200 0.000 0.00 + 58.000 17.21 -4.10 4.64 0.000 0.200 0.000 0.00 + 58.050 17.31 -3.58 4.37 0.000 0.200 0.000 0.00 + 58.100 17.34 -3.05 3.71 0.000 0.200 0.000 0.00 + 58.150 17.39 -3.33 4.57 0.000 0.200 0.000 0.00 + 58.200 16.90 -2.31 3.46 0.000 0.200 0.000 0.00 + 58.250 18.03 -6.46 3.83 0.000 0.200 0.000 0.00 + 58.300 17.43 -3.15 4.46 0.000 0.200 0.000 0.00 + 58.350 16.68 -0.27 4.20 0.000 0.200 0.000 0.00 + 58.400 16.46 -0.20 4.02 0.000 0.200 0.000 0.00 + 58.450 16.09 -1.28 4.10 0.000 0.200 0.000 0.00 + 58.500 15.54 -3.68 3.12 0.000 0.200 0.000 0.00 + 58.550 16.92 0.19 2.11 0.000 0.200 0.000 0.00 + 58.600 15.88 5.72 2.14 0.000 0.200 0.000 0.00 + 58.650 15.73 3.65 1.61 0.000 0.200 0.000 0.00 + 58.700 15.83 3.15 1.65 0.000 0.200 0.000 0.00 + 58.750 15.25 4.66 1.91 0.000 0.200 0.000 0.00 + 58.800 15.29 3.91 2.02 0.000 0.200 0.000 0.00 + 58.850 14.81 3.64 0.90 0.000 0.200 0.000 0.00 + 58.900 15.52 6.52 0.21 0.000 0.200 0.000 0.00 + 58.950 15.04 4.29 -0.11 0.000 0.200 0.000 0.00 + 59.000 15.70 8.14 0.19 0.000 0.200 0.000 0.00 + 59.050 16.65 6.78 1.51 0.000 0.200 0.000 0.00 + 59.100 18.33 8.86 1.06 0.000 0.200 0.000 0.00 + 59.150 17.76 8.45 1.00 0.000 0.200 0.000 0.00 + 59.200 17.42 6.19 0.64 0.000 0.200 0.000 0.00 + 59.250 17.26 3.97 0.58 0.000 0.200 0.000 0.00 + 59.300 16.39 -0.02 0.60 0.000 0.200 0.000 0.00 + 59.350 16.50 -0.15 0.40 0.000 0.200 0.000 0.00 + 59.400 16.66 -0.71 -0.96 0.000 0.200 0.000 0.00 + 59.450 15.90 -1.14 -0.38 0.000 0.200 0.000 0.00 + 59.500 15.86 -4.46 -0.71 0.000 0.200 0.000 0.00 + 59.550 16.45 -6.50 -0.56 0.000 0.200 0.000 0.00 + 59.600 17.24 -4.17 -0.26 0.000 0.200 0.000 0.00 + 59.650 18.97 -2.67 0.40 0.000 0.200 0.000 0.00 + 59.700 19.44 -3.43 1.46 0.000 0.200 0.000 0.00 + 59.750 19.40 0.61 1.15 0.000 0.200 0.000 0.00 + 59.800 19.00 2.31 0.71 0.000 0.200 0.000 0.00 + 59.850 18.58 4.62 0.16 0.000 0.200 0.000 0.00 + 59.900 17.84 3.89 0.14 0.000 0.200 0.000 0.00 + 59.950 17.16 3.64 -1.75 0.000 0.200 0.000 0.00 + 60.000 18.54 4.03 -1.35 0.000 0.200 0.000 0.00 + 60.050 18.98 2.32 -1.62 0.000 0.200 0.000 0.00 + 60.100 19.42 6.74 -1.13 0.000 0.200 0.000 0.00 + 60.150 18.92 7.21 0.08 0.000 0.200 0.000 0.00 + 60.200 18.88 7.84 -0.26 0.000 0.200 0.000 0.00 + 60.250 19.10 10.29 1.04 0.000 0.200 0.000 0.00 + 60.300 18.73 7.34 1.81 0.000 0.200 0.000 0.00 + 60.350 18.69 7.29 1.98 0.000 0.200 0.000 0.00 + 60.400 18.06 2.58 1.63 0.000 0.200 0.000 0.00 + 60.450 17.07 -1.59 2.12 0.000 0.200 0.000 0.00 + 60.500 16.65 1.52 1.22 0.000 0.200 0.000 0.00 + 60.550 16.91 3.08 1.17 0.000 0.200 0.000 0.00 + 60.600 16.83 3.38 0.89 0.000 0.200 0.000 0.00 + 60.650 17.17 6.25 1.76 0.000 0.200 0.000 0.00 + 60.700 17.12 6.93 1.71 0.000 0.200 0.000 0.00 + 60.750 17.98 3.14 1.50 0.000 0.200 0.000 0.00 + 60.800 18.66 1.93 1.38 0.000 0.200 0.000 0.00 + 60.850 19.02 2.08 2.84 0.000 0.200 0.000 0.00 + 60.900 19.41 -2.79 3.46 0.000 0.200 0.000 0.00 + 60.950 19.21 -1.33 2.52 0.000 0.200 0.000 0.00 + 61.000 19.47 -2.72 2.75 0.000 0.200 0.000 0.00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb new file mode 100644 index 0000000000..235731d048 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb @@ -0,0 +1,2141 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ZMQ REQ-REP Tests" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from real_fast_interactor import RFInteractor" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ZMQ Real Time interactor for FAST initialized. \n", + " PUB-SUB protocol: None | REQ-REP protocol: tcp://127.0.0.1:5555\n" + ] + } + ], + "source": [ + "rfi = RFInteractor(ZmqInAddress='tcp://127.0.0.1:5555', ZmqOutAddress=None, verbose=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pyFAST.input_output import FASTOutputFile\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt \n", + "\n", + "\n", + "t = np.linspace(0, 20, int(80/0.01))\n", + "\n", + "wind_series = FASTOutputFile('./ex_files/tsim.dat').toDataFrame()['U_[3.40]']\n", + "bld_pitch = np.deg2rad(3 * np.sin(t))\n", + "\n", + "fig, axs = plt.subplots(2, 1, figsize=(8, 5))\n", + "axs[0].plot(wind_series)\n", + "axs[0].set_ylabel('$u_h$ (m/s)')\n", + "\n", + "axs[1].plot(bld_pitch)\n", + "axs[1].set_ylabel('BldPitch1 (rad)')\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n", + "VelH;BldPitchCom1;\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[10], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m: \n\u001b[1;32m 4\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: bld_pitch[count_sampling]}\n\u001b[0;32m----> 5\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", + "File \u001b[0;32m/home/of_rt/real_fast_interactor/real_fast_interactor.py:118\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict)\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfast_rep\u001b[39m(\u001b[38;5;28mself\u001b[39m, rep_dict):\n\u001b[1;32m 115\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 118\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequester\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 119\u001b[0m \u001b[38;5;28mprint\u001b[39m(req_)\n\u001b[1;32m 120\u001b[0m requests \u001b[38;5;241m=\u001b[39m req_\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m;\u001b[39m\u001b[38;5;124m\"\u001b[39m) \n", + "File \u001b[0;32m/home/of_rt/yoda/lib/python3.10/site-packages/zmq/sugar/socket.py:934\u001b[0m, in \u001b[0;36mSocket.recv_string\u001b[0;34m(self, flags, encoding)\u001b[0m\n\u001b[1;32m 914\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_string\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, encoding: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 915\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a unicode string, as sent by send_string.\u001b[39;00m\n\u001b[1;32m 916\u001b[0m \n\u001b[1;32m 917\u001b[0m \u001b[38;5;124;03m Parameters\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 932\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`~Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 933\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 934\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 935\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: buf\u001b[38;5;241m.\u001b[39mdecode(encoding))\n", + "File \u001b[0;32mzmq/backend/cython/socket.pyx:805\u001b[0m, in \u001b[0;36mzmq.backend.cython.socket.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mzmq/backend/cython/socket.pyx:841\u001b[0m, in \u001b[0;36mzmq.backend.cython.socket.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mzmq/backend/cython/socket.pyx:194\u001b[0m, in \u001b[0;36mzmq.backend.cython.socket._recv_copy\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/home/of_rt/yoda/lib/python3.10/site-packages/zmq/backend/cython/checkrc.pxd:13\u001b[0m, in \u001b[0;36mzmq.backend.cython.checkrc._check_rc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "count_sampling = 0\n", + "\n", + "while True: \n", + " rep = {'VelH': wind_series[count_sampling], 'BlPitchCom1': bld_pitch[count_sampling]}\n", + " rfi.fast_rep(rep)\n", + " count_sampling += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "yoda", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb new file mode 100644 index 0000000000..4eca66c096 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb @@ -0,0 +1,17139 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Zmq Live PUB-SUB" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#export PATH=$PATH:/Users/lorenzoschena/Desktop/Workspace/openfast/install/bin\n", + "from real_fast_interactor import RFInteractor" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ZMQ Real Time interactor for FAST initialized. \n", + " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n" + ] + } + ], + "source": [ + "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "mode": "lines", + "name": " Wind1VelX", + "type": "scatter", + "xaxis": "x", + "y": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ], + "yaxis": "y" + }, + { + "mode": "lines", + "name": " Azimuth", + "type": "scatter", + "xaxis": "x2", + "y": [ + 0, + 0.240044, + 0.480173, + 0.72038, + 0.960654, + 1.200982, + 1.44135, + 1.681741, + 1.922138, + 2.162521, + 2.402871, + 2.643166, + 2.883388, + 3.123516, + 3.363529, + 3.60341, + 3.843142, + 4.082709, + 4.322096, + 4.561293, + 4.800289, + 5.039079, + 5.277657, + 5.516023, + 5.754177, + 5.992123, + 6.229869, + 6.467424, + 6.7048, + 6.942012, + 7.179077, + 7.416014, + 7.652844, + 7.889588, + 8.126271, + 8.362917, + 8.599551, + 8.836198, + 9.072884, + 9.309634, + 9.546471, + 9.783418, + 10.020499, + 10.257731, + 10.495135, + 10.732726, + 10.970518, + 11.208522, + 11.446749, + 11.685204, + 11.923891, + 12.162812, + 12.401966, + 12.641348, + 12.880954, + 13.120774, + 13.360798, + 13.601015, + 13.841411, + 14.08197, + 14.322677, + 14.563514, + 14.804464, + 15.045509, + 15.286631, + 15.527812, + 15.769035, + 16.010284, + 16.251543, + 16.492798, + 16.734036, + 16.975246, + 17.216416, + 17.45754, + 17.698611, + 17.939624, + 18.180577, + 18.421467, + 18.662297, + 18.903068, + 19.143785, + 19.384453, + 19.625078, + 19.865669, + 20.106235, + 20.346784, + 20.587328, + 20.827877, + 21.068442, + 21.309034, + 21.549663, + 21.79034, + 22.031074, + 22.271873, + 22.512747, + 22.753702, + 22.994743, + 23.235874, + 23.4771, + 23.718422, + 23.959839, + 24.20135, + 24.442953, + 24.684644, + 24.926417, + 25.168264, + 25.410179, + 25.652152, + 25.894173, + 26.136232, + 26.378316, + 26.620415, + 26.862516, + 27.104606, + 27.346675, + 27.588709, + 27.830699, + 28.072632, + 28.3145, + 28.556293, + 28.798004, + 29.039626, + 29.281154, + 29.522583, + 29.763913, + 30.005141, + 30.246269, + 30.487298, + 30.728234, + 30.96908, + 31.209843, + 31.450532, + 31.691156, + 31.931724, + 32.17225, + 32.412743, + 32.653218, + 32.893687, + 33.134165, + 33.374664, + 33.6152, + 33.855785, + 34.096433, + 34.337157, + 34.577968, + 34.818878, + 35.059898, + 35.301038, + 35.542305, + 35.783707, + 36.02525, + 36.266939, + 36.508777, + 36.750767, + 36.99291, + 37.235206, + 37.477655, + 37.720253, + 37.962998, + 38.205885, + 38.44891, + 38.692068, + 38.935351, + 39.178755, + 39.422271, + 39.665893, + 39.909614, + 40.153427, + 40.397326, + 40.641304, + 40.885354, + 41.129472, + 41.373652, + 41.61789, + 41.862183, + 42.106527, + 42.35092, + 42.595361, + 42.839849, + 43.084385, + 43.328969, + 43.573603, + 43.81829, + 44.063031, + 44.307832, + 44.552694, + 44.797623, + 45.042624, + 45.287699, + 45.532855, + 45.778096, + 46.023427, + 46.26885, + 46.514372, + 46.759994, + 47.005721, + 47.251554, + 47.497495, + 47.743545, + 47.989705, + 48.235974, + 48.482352, + 48.728835, + 48.975421, + 49.222106, + 49.468887, + 49.715756, + 49.96271, + 50.209741, + 50.456842, + 50.704005, + 50.951222, + 51.198486, + 51.445787, + 51.693116, + 51.940465, + 52.187826, + 52.435189, + 52.682547, + 52.929891, + 53.177214, + 53.42451, + 53.671771, + 53.918992, + 54.166169, + 54.413296, + 54.660371, + 54.907392, + 55.154355, + 55.401261, + 55.64811, + 55.894902, + 56.141638, + 56.388322, + 56.634957, + 56.881545, + 57.128091, + 57.3746, + 57.621076, + 57.867526, + 58.113955, + 58.360369, + 58.606773, + 58.853173, + 59.099577, + 59.345988, + 59.592414, + 59.838858, + 60.085326, + 60.331822, + 60.578351, + 60.824916, + 61.071521, + 61.318167, + 61.564857, + 61.811593, + 62.058376, + 62.305206, + 62.552084, + 62.79901, + 63.045982, + 63.293001, + 63.540065, + 63.787172, + 64.034322, + 64.281512, + 64.52874, + 64.776006, + 65.023306, + 65.270641, + 65.518008, + 65.765405, + 66.012833, + 66.260291, + 66.507778, + 66.755293, + 67.002839, + 67.250414, + 67.498021, + 67.745661, + 67.993336, + 68.241049, + 68.488801, + 68.736595, + 68.984436, + 69.232326, + 69.480269, + 69.728269, + 69.976329, + 70.224455, + 70.472649, + 70.720916, + 70.969259, + 71.217682, + 71.466189, + 71.714783, + 71.963466, + 72.212242, + 72.461111, + 72.710076, + 72.959139, + 73.208298, + 73.457556, + 73.706912, + 73.956364, + 74.205912, + 74.455553, + 74.705285, + 74.955105, + 75.20501, + 75.454997, + 75.705061, + 75.955198, + 76.205405, + 76.455675, + 76.706005, + 76.956389, + 77.206822, + 77.457299, + 77.707815, + 77.958365, + 78.208945, + 78.459549, + 78.710173, + 78.960814, + 79.211466, + 79.462128, + 79.712795, + 79.963465, + 80.214136, + 80.464805, + 80.715471, + 80.966132, + 81.216789, + 81.467439, + 81.718084, + 81.968723, + 82.219356, + 82.469986, + 82.720612, + 82.971235, + 83.221858, + 83.472481, + 83.723107, + 83.973736, + 84.224371, + 84.475013, + 84.725664, + 84.976326, + 85.226999, + 85.477685, + 85.728386, + 85.979102, + 86.229835, + 86.480584, + 86.731351, + 86.982136, + 87.232939, + 87.48376, + 87.734598, + 87.985455, + 88.236328, + 88.487219, + 88.738125, + 88.989047, + 89.239984, + 89.490936, + 89.741901, + 89.99288, + 90.243871, + 90.494875, + 90.745891, + 90.99692, + 91.247962, + 91.499016, + 91.750084, + 92.001167, + 92.252265, + 92.50338, + 92.754514, + 93.005669, + 93.256845, + 93.508047, + 93.759276, + 94.010536, + 94.261828, + 94.513157, + 94.764525, + 95.015936, + 95.267393, + 95.5189, + 95.770461, + 96.022078, + 96.273756, + 96.525498, + 96.777307, + 97.029187, + 97.28114, + 97.53317, + 97.785279, + 98.03747, + 98.289745, + 98.542105, + 98.794553, + 99.04709, + 99.299717, + 99.552434, + 99.805243, + 100.058143, + 100.311135, + 100.564218, + 100.817391, + 101.070654, + 101.324005, + 101.577443, + 101.830966, + 102.084574, + 102.338263, + 102.592033, + 102.84588, + 103.099804, + 103.353801, + 103.607869, + 103.862008, + 104.116213, + 104.370484, + 104.624818, + 104.879213, + 105.133668, + 105.388181, + 105.64275, + 105.897373, + 106.15205, + 106.40678, + 106.66156, + 106.916391, + 107.171271, + 107.426199, + 107.681176, + 107.936201, + 108.191272, + 108.446391, + 108.701556, + 108.956767, + 109.212024, + 109.467327, + 109.722675, + 109.978068, + 110.233507, + 110.48899, + 110.744517, + 111.000088, + 111.255701, + 111.511358, + 111.767056, + 112.022795, + 112.278575, + 112.534393, + 112.79025, + 113.046144, + 113.302073, + 113.558038, + 113.814035, + 114.070065, + 114.326126, + 114.582216, + 114.838334, + 115.09448, + 115.350651, + 115.606846, + 115.863065, + 116.119307, + 116.375569, + 116.631853, + 116.888156, + 117.144479, + 117.400822, + 117.657183, + 117.913563, + 118.169962, + 118.42638, + 118.682819, + 118.939277, + 119.195757, + 119.45226, + 119.708785, + 119.965336, + 120.221912, + 120.478517, + 120.735151, + 120.991816, + 121.248514, + 121.505247, + 121.762017, + 122.018826, + 122.275677, + 122.53257, + 122.789509, + 123.046496, + 123.303531, + 123.560618, + 123.817758, + 124.074953, + 124.332204, + 124.589513, + 124.846881, + 125.104311, + 125.361802, + 125.619356, + 125.876974, + 126.134657, + 126.392405, + 126.650219, + 126.9081, + 127.166046, + 127.42406, + 127.68214, + 127.940287, + 128.198501, + 128.456781, + 128.715127, + 128.973539, + 129.232017, + 129.490559, + 129.749166, + 130.007837, + 130.266572, + 130.52537, + 130.784231, + 131.043154, + 131.302139, + 131.561186, + 131.820293, + 132.079461, + 132.33869, + 132.597978, + 132.857327, + 133.116734, + 133.376201, + 133.635727, + 133.895311, + 134.154953, + 134.414654, + 134.674412, + 134.934227, + 135.1941, + 135.454029, + 135.714015, + 135.974056, + 136.234152, + 136.494303, + 136.754507, + 137.014765, + 137.275075, + 137.535437, + 137.795849, + 138.056311, + 138.316821, + 138.577378, + 138.837982, + 139.09863, + 139.359322, + 139.620056, + 139.88083, + 140.141644, + 140.402495, + 140.663383, + 140.924305, + 141.185261, + 141.446248, + 141.707265, + 141.968311, + 142.229385, + 142.490484, + 142.751608, + 143.012756, + 143.273927, + 143.535118, + 143.796331, + 144.057563, + 144.318814, + 144.580083, + 144.841371, + 145.102676, + 145.363998, + 145.625337, + 145.886693, + 146.148067, + 146.409458, + 146.670867, + 146.932294, + 147.19374, + 147.455205, + 147.71669, + 147.978196, + 148.239724, + 148.501274, + 148.762847, + 149.024444, + 149.286067, + 149.547716, + 149.809393, + 150.071098, + 150.332832, + 150.594597, + 150.856393, + 151.118221, + 151.380083, + 151.64198, + 151.903911, + 152.165879, + 152.427883, + 152.689926, + 152.952007, + 153.214127, + 153.476287, + 153.738487, + 154.000729, + 154.263012, + 154.525338, + 154.787707, + 155.050118, + 155.312574, + 155.575074, + 155.837619, + 156.100208, + 156.362844, + 156.625526, + 156.888254, + 157.151029, + 157.413852, + 157.676723, + 157.939642, + 158.20261, + 158.465628, + 158.728695, + 158.991812, + 159.254981, + 159.5182, + 159.781471, + 160.044794, + 160.30817, + 160.571598, + 160.83508, + 161.098615, + 161.362205, + 161.625848, + 161.889546, + 162.153298, + 162.417104, + 162.680966, + 162.944882, + 163.208852, + 163.472877, + 163.736956, + 164.001088, + 164.265274, + 164.529513, + 164.793805, + 165.058148, + 165.322542, + 165.586987, + 165.851481, + 166.116024, + 166.380615, + 166.645252, + 166.909935, + 167.174663, + 167.439434, + 167.704247, + 167.969101, + 168.233995, + 168.498927, + 168.763897, + 169.028903, + 169.293943, + 169.559017, + 169.824122, + 170.089259, + 170.354426, + 170.61962, + 170.884843, + 171.150091, + 171.415365, + 171.680663, + 171.945984, + 172.211327, + 172.476692, + 172.742077, + 173.007482, + 173.272906, + 173.538349, + 173.803809, + 174.069286, + 174.334781, + 174.600291, + 174.865818, + 175.13136, + 175.396917, + 175.662489, + 175.928076, + 176.193678, + 176.459294, + 176.724924, + 176.990568, + 177.256225, + 177.521896, + 177.787581, + 178.05328, + 178.318992, + 178.584718, + 178.850458, + 179.116212, + 179.38198, + 179.647763, + 179.91356, + 180.179372, + 180.445198, + 180.71104, + 180.976897, + 181.24277, + 181.508658, + 181.774563, + 182.040484, + 182.306421, + 182.572376, + 182.838348, + 183.104338, + 183.370347, + 183.636374, + 183.90242, + 184.168486, + 184.434572, + 184.700679, + 184.966808, + 185.232958, + 185.499131, + 185.765327, + 186.031547, + 186.297792, + 186.564062, + 186.830358, + 187.09668, + 187.363031, + 187.629409, + 187.895817, + 188.162254, + 188.428722, + 188.695221, + 188.961752, + 189.228315, + 189.494912, + 189.761542, + 190.028207, + 190.294906, + 190.561641, + 190.828412, + 191.095219, + 191.362063, + 191.628943, + 191.895861, + 192.162816, + 192.429809, + 192.69684, + 192.963909, + 193.231015, + 193.498159, + 193.765341, + 194.03256, + 194.299817, + 194.56711, + 194.834441, + 195.101808, + 195.369211, + 195.636649, + 195.904123, + 196.171632, + 196.439174, + 196.706751, + 196.97436, + 197.242002, + 197.509676, + 197.77738, + 198.045116, + 198.312881, + 198.580675, + 198.848498, + 199.116348, + 199.384226, + 199.65213, + 199.920059, + 200.188013, + 200.455992, + 200.723994, + 200.992019, + 201.260067, + 201.528135, + 201.796225, + 202.064336, + 202.332466, + 202.600615, + 202.868783, + 203.136969, + 203.405173, + 203.673394, + 203.941631, + 204.209884, + 204.478153, + 204.746438, + 205.014736, + 205.283049, + 205.551376, + 205.819717, + 206.088071, + 206.356437, + 206.624816, + 206.893206, + 207.161609, + 207.430023, + 207.698448, + 207.966884, + 208.235331, + 208.503788, + 208.772255, + 209.040733, + 209.30922, + 209.577717, + 209.846224, + 210.114741, + 210.383267, + 210.651803, + 210.920349, + 211.188905, + 211.457471, + 211.726047, + 211.994634, + 212.263231, + 212.531839, + 212.800459, + 213.069091, + 213.337734, + 213.606391, + 213.87506, + 214.143743, + 214.412441, + 214.681153, + 214.94988, + 215.218624, + 215.487384, + 215.756161, + 216.024957, + 216.293771, + 216.562605, + 216.831459, + 217.100334, + 217.36923, + 217.638149, + 217.907091, + 218.176057, + 218.445047, + 218.714062, + 218.983104, + 219.252172, + 219.521267, + 219.79039, + 220.059541, + 220.328722, + 220.597932, + 220.867173, + 221.136444, + 221.405747, + 221.675081, + 221.944448, + 222.213847, + 222.483279, + 222.752744, + 223.022243, + 223.291776, + 223.561343, + 223.830945, + 224.100581, + 224.370252, + 224.639958, + 224.909699, + 225.179476, + 225.449287, + 225.719134, + 225.989016, + 226.258934, + 226.528886, + 226.798874, + 227.068898, + 227.338956, + 227.609049, + 227.879177, + 228.14934, + 228.419538, + 228.68977, + 228.960036, + 229.230336, + 229.50067, + 229.771038, + 230.041439, + 230.311873, + 230.58234, + 230.85284, + 231.123372, + 231.393936, + 231.664531, + 231.935158, + 232.205815, + 232.476503, + 232.747221, + 233.017968, + 233.288745, + 233.559551, + 233.830385, + 234.101248, + 234.372139, + 234.643057, + 234.914002, + 235.184975, + 235.455973, + 235.726998, + 235.998048, + 236.269124, + 236.540224, + 236.811349, + 237.082499, + 237.353672, + 237.62487, + 237.89609, + 238.167334, + 238.4386, + 238.709889, + 238.981201, + 239.252534, + 239.52389, + 239.795267, + 240.066666, + 240.338086, + 240.609528, + 240.880991, + 241.152475, + 241.42398, + 241.695507, + 241.967054, + 242.238623, + 242.510214, + 242.781825, + 243.053458, + 243.325112, + 243.596788, + 243.868486, + 244.140206, + 244.411948, + 244.683712, + 244.955499, + 245.227309, + 245.499142, + 245.770998, + 246.042877, + 246.314781, + 246.586709, + 246.858661, + 247.130637, + 247.402639, + 247.674666, + 247.946719, + 248.218798, + 248.490903, + 248.763034, + 249.035193, + 249.307378, + 249.579592, + 249.851832, + 250.124101, + 250.396398, + 250.668724, + 250.941079, + 251.213462, + 251.485875, + 251.758318, + 252.030791, + 252.303293, + 252.575826, + 252.848389, + 253.120983, + 253.393608, + 253.666264, + 253.938951, + 254.21167, + 254.48442, + 254.757202, + 255.030015, + 255.302861, + 255.575738, + 255.848648, + 256.12159, + 256.394564, + 256.667571, + 256.94061, + 257.213681, + 257.486785, + 257.759922, + 258.033091, + 258.306292, + 258.579526, + 258.852793, + 259.126091, + 259.399422, + 259.672786, + 259.946181, + 260.219609, + 260.493068, + 260.766559, + 261.040081, + 261.313635, + 261.587221, + 261.860837, + 262.134484, + 262.408162, + 262.681871, + 262.955609, + 263.229378, + 263.503176, + 263.777004, + 264.050861, + 264.324747, + 264.598661, + 264.872605, + 265.146576, + 265.420575, + 265.694602, + 265.968657, + 266.242739, + 266.516847, + 266.790983, + 267.065145, + 267.339333, + 267.613547, + 267.887788, + 268.162054, + 268.436345, + 268.710663, + 268.985005, + 269.259373, + 269.533766, + 269.808183, + 270.082626, + 270.357094, + 270.631586, + 270.906104, + 271.180646, + 271.455213, + 271.729805, + 272.004422, + 272.279064, + 272.553731, + 272.828423, + 273.10314, + 273.377883, + 273.652651, + 273.927445, + 274.202265, + 274.477111, + 274.751984, + 275.026882, + 275.301808, + 275.57676, + 275.851739, + 276.126746, + 276.40178, + 276.676843, + 276.951933, + 277.227052, + 277.502199, + 277.777376, + 278.052581, + 278.327817, + 278.603082, + 278.878377, + 279.153703, + 279.429059, + 279.704446, + 279.979865, + 280.255315, + 280.530798, + 280.806312, + 281.081859, + 281.357439, + 281.633052, + 281.908698, + 282.184378, + 282.460092, + 282.73584, + 283.011623, + 283.28744, + 283.563292, + 283.839179, + 284.115102, + 284.39106, + 284.667054, + 284.943084, + 285.21915, + 285.495252, + 285.771391, + 286.047566, + 286.323778, + 286.600027, + 286.876313, + 287.152635, + 287.428995, + 287.705391, + 287.981824, + 288.258295, + 288.534802, + 288.811346, + 289.087927, + 289.364545, + 289.641199, + 289.91789, + 290.194618, + 290.471381, + 290.748181, + 291.025016, + 291.301888, + 291.578794, + 291.855736, + 292.132713, + 292.409724, + 292.68677, + 292.963849, + 293.240963, + 293.51811, + 293.79529, + 294.072502, + 294.349747, + 294.627024, + 294.904333, + 295.181673, + 295.459043, + 295.736444, + 296.013875, + 296.291335, + 296.568824, + 296.846342, + 297.123888, + 297.401462, + 297.679063, + 297.956691, + 298.234345, + 298.512026, + 298.789732, + 299.067462, + 299.345218, + 299.622997, + 299.900801, + 300.178627, + 300.456477, + 300.734348, + 301.012242, + 301.290157, + 301.568094, + 301.846051, + 302.124029, + 302.402027, + 302.680044, + 302.95808, + 303.236136, + 303.51421, + 303.792302, + 304.070412, + 304.34854, + 304.626685, + 304.904847, + 305.183026, + 305.461222, + 305.739434, + 306.017662, + 306.295906, + 306.574166, + 306.852442, + 307.130733, + 307.40904, + 307.687363, + 307.965701, + 308.244054, + 308.522423, + 308.800807, + 309.079207, + 309.357623, + 309.636054, + 309.914501, + 310.192965, + 310.471444, + 310.74994, + 311.028453, + 311.306983, + 311.58553, + 311.864094, + 312.142676, + 312.421276, + 312.699895, + 312.978532, + 313.257188, + 313.535863, + 313.814558, + 314.093274, + 314.372009, + 314.650765, + 314.929543, + 315.208341, + 315.487161, + 315.766004, + 316.044868, + 316.323755, + 316.602665, + 316.881598, + 317.160555, + 317.439535, + 317.718539, + 317.997567, + 318.276619, + 318.555696, + 318.834797, + 319.113923, + 319.393074, + 319.67225, + 319.951451, + 320.230678, + 320.509929, + 320.789207, + 321.068509, + 321.347837, + 321.627191, + 321.90657, + 322.185975, + 322.465406, + 322.744862, + 323.024344, + 323.303851, + 323.583384, + 323.862943, + 324.142527, + 324.422137, + 324.701772, + 324.981432, + 325.261118, + 325.540829, + 325.820565, + 326.100326, + 326.380112, + 326.659923, + 326.939759, + 327.219619, + 327.499504, + 327.779413, + 328.059347, + 328.339304, + 328.619285, + 328.89929, + 329.179318, + 329.459369, + 329.739443, + 330.01954, + 330.29966, + 330.579801, + 330.859965, + 331.140151, + 331.420357, + 331.700585, + 331.980834, + 332.261104, + 332.541394, + 332.821704, + 333.102033, + 333.382382, + 333.662751, + 333.943138, + 334.223543, + 334.503967, + 334.784409, + 335.064869, + 335.345346, + 335.625841, + 335.906352, + 336.18688, + 336.467424, + 336.747985, + 337.028561, + 337.309154, + 337.589762, + 337.870386, + 338.151025, + 338.431679, + 338.712349, + 338.993034, + 339.273734, + 339.554448, + 339.835178, + 340.115923, + 340.396682, + 340.677457, + 340.958246, + 341.23905, + 341.51987, + 341.800704, + 342.081553, + 342.362417, + 342.643297, + 342.924191, + 343.205101, + 343.486027, + 343.766968, + 344.047924, + 344.328896, + 344.609884, + 344.890888, + 345.171907, + 345.452943, + 345.733995, + 346.015063, + 346.296148, + 346.577249, + 346.858367, + 347.139502, + 347.420653, + 347.701822, + 347.983007, + 348.26421, + 348.545431, + 348.826668, + 349.107924, + 349.389197, + 349.670487, + 349.951796, + 350.233123, + 350.514468, + 350.795832, + 351.077214, + 351.358614, + 351.640034, + 351.921472, + 352.202929, + 352.484405, + 352.7659, + 353.047415, + 353.328948, + 353.610502, + 353.892075, + 354.173667, + 354.455279, + 354.736912, + 355.018563, + 355.300235, + 355.581927, + 355.863639, + 356.14537, + 356.427122, + 356.708894, + 356.990685, + 357.272497, + 357.554329, + 357.83618, + 358.118052, + 358.399943, + 358.681854, + 358.963784, + 359.245735, + 359.527704, + 359.809693, + 0.091701, + 0.373728, + 0.655774, + 0.937839, + 1.219922, + 1.502024, + 1.784144, + 2.066282, + 2.348439, + 2.630612, + 2.912804, + 3.195012, + 3.477238, + 3.759481, + 4.041741, + 4.324017, + 4.60631, + 4.888619, + 5.170944, + 5.453285, + 5.735641, + 6.018013, + 6.300401, + 6.582803, + 6.865221, + 7.147654, + 7.430101, + 7.712563, + 7.995039, + 8.27753, + 8.560035, + 8.842554, + 9.125087, + 9.407635, + 9.690195, + 9.97277, + 10.255359, + 10.537961, + 10.820576, + 11.103205, + 11.385847, + 11.668503, + 11.951172, + 12.233854, + 12.516549, + 12.799258, + 13.08198, + 13.364714, + 13.647462, + 13.930223, + 14.212997, + 14.495784, + 14.778583, + 15.061396, + 15.344222, + 15.627061, + 15.909912, + 16.192777, + 16.475655, + 16.758545, + 17.041449, + 17.324366, + 17.607296, + 17.890239, + 18.173195, + 18.456164, + 18.739146, + 19.022142, + 19.305151, + 19.588173, + 19.871209, + 20.154259, + 20.437322, + 20.720398, + 21.003489, + 21.286593, + 21.569711, + 21.852843, + 22.13599, + 22.41915, + 22.702325, + 22.985514, + 23.268718, + 23.551936, + 23.835169, + 24.118417, + 24.401679, + 24.684957, + 24.96825, + 25.251558, + 25.534881, + 25.818219, + 26.101573, + 26.384943, + 26.668328, + 26.951729, + 27.235146, + 27.518578, + 27.802027, + 28.085491, + 28.368972, + 28.652468, + 28.935981, + 29.21951, + 29.503056, + 29.786617, + 30.070195, + 30.353789, + 30.637399, + 30.921026, + 31.204669, + 31.488329, + 31.772005, + 32.055697, + 32.339405, + 32.62313, + 32.906871, + 33.190629, + 33.474403, + 33.758192, + 34.041999, + 34.325821, + 34.609659, + 34.893514, + 35.177384, + 35.461271, + 35.745173, + 36.029092, + 36.313026, + 36.596977, + 36.880943, + 37.164925, + 37.448923, + 37.732936, + 38.016966, + 38.301011, + 38.585071, + 38.869148, + 39.15324, + 39.437347, + 39.72147, + 40.005609, + 40.289764, + 40.573934, + 40.858119, + 41.14232, + 41.426537, + 41.71077, + 41.995017, + 42.279281, + 42.56356, + 42.847855, + 43.132166, + 43.416492, + 43.700834, + 43.985192, + 44.269565, + 44.553955, + 44.83836, + 45.122781, + 45.407218, + 45.691672, + 45.976141, + 46.260627, + 46.545128, + 46.829646, + 47.114181, + 47.398732, + 47.683299, + 47.967883, + 48.252484, + 48.537102, + 48.821736, + 49.106387, + 49.391056, + 49.675742, + 49.960445, + 50.245165, + 50.529903, + 50.814658, + 51.099432, + 51.384223, + 51.669032, + 51.953859, + 52.238704, + 52.523568, + 52.808449, + 53.09335, + 53.378269, + 53.663206, + 53.948163, + 54.233138, + 54.518132, + 54.803145, + 55.088177, + 55.373229, + 55.6583, + 55.94339, + 56.228499, + 56.513628, + 56.798777, + 57.083945, + 57.369132, + 57.654339, + 57.939566, + 58.224812, + 58.510078, + 58.795363, + 59.080668, + 59.365993, + 59.651337, + 59.936701, + 60.222083, + 60.507486, + 60.792907, + 61.078348, + 61.363808, + 61.649287, + 61.934786, + 62.220302, + 62.505838, + 62.791392, + 63.076965, + 63.362556, + 63.648166, + 63.933793, + 64.219439, + 64.505102, + 64.790783, + 65.076481, + 65.362196, + 65.647928, + 65.933677, + 66.219443, + 66.505225, + 66.791024, + 67.076839, + 67.362669, + 67.648515, + 67.934377, + 68.220254, + 68.506146, + 68.792054, + 69.077976, + 69.363913, + 69.649865, + 69.935831, + 70.221811, + 70.507806, + 70.793814, + 71.079837, + 71.365874, + 71.651925, + 71.937989, + 72.224068, + 72.51016, + 72.796266, + 73.082385, + 73.368518, + 73.654665, + 73.940825, + 74.226999, + 74.513186, + 74.799387, + 75.085602, + 75.37183, + 75.658071, + 75.944326, + 76.230595, + 76.516877, + 76.803173, + 77.089482, + 77.375805, + 77.662141, + 77.948491, + 78.234854, + 78.521231, + 78.807621, + 79.094025, + 79.380442, + 79.666873, + 79.953317, + 80.239775, + 80.526246, + 80.812731, + 81.099229, + 81.385742, + 81.672268, + 81.958807, + 82.245361, + 82.531928, + 82.81851, + 83.105105, + 83.391715, + 83.678339, + 83.964977, + 84.25163, + 84.538298, + 84.824981, + 85.111678, + 85.398391, + 85.68512, + 85.971863, + 86.258623, + 86.545399, + 86.832191, + 87.118999, + 87.405824, + 87.692665, + 87.979524, + 88.2664, + 88.553294, + 88.840205, + 89.127134, + 89.414081, + 89.701046, + 89.98803, + 90.275032, + 90.562053, + 90.849093, + 91.136153, + 91.423231, + 91.710329, + 91.997447, + 92.284584, + 92.571741, + 92.858918, + 93.146115, + 93.433333, + 93.72057, + 94.007828, + 94.295106, + 94.582404, + 94.869723, + 95.157063, + 95.444423, + 95.731803, + 96.019205, + 96.306627, + 96.59407, + 96.881533, + 97.169017, + 97.456522, + 97.744048, + 98.031595, + 98.319162, + 98.60675, + 98.89436, + 99.18199, + 99.469641, + 99.757313, + 100.045006, + 100.33272, + 100.620454, + 100.90821, + 101.195987, + 101.483785, + 101.771605, + 102.059445, + 102.347306, + 102.635189, + 102.923092, + 103.211017, + 103.498963, + 103.78693, + 104.074919, + 104.362928, + 104.650959, + 104.93901, + 105.227083, + 105.515177, + 105.803292, + 106.091427, + 106.379584, + 106.667762, + 106.95596, + 107.244179, + 107.532419, + 107.82068, + 108.10896, + 108.397262, + 108.685583, + 108.973925, + 109.262287, + 109.550669, + 109.839071, + 110.127492, + 110.415934, + 110.704395, + 110.992875, + 111.281375, + 111.569894, + 111.858432, + 112.146989, + 112.435565, + 112.72416, + 113.012774, + 113.301406, + 113.590057, + 113.878726, + 114.167414, + 114.45612, + 114.744844, + 115.033586, + 115.322346, + 115.611125, + 115.899921, + 116.188735, + 116.477566, + 116.766416, + 117.055283, + 117.344167, + 117.633069, + 117.921989, + 118.210926, + 118.49988, + 118.788851, + 119.07784, + 119.366846, + 119.655868, + 119.944908, + 120.233964, + 120.523038, + 120.812128, + 121.101235, + 121.390358, + 121.679498, + 121.968654, + 122.257826, + 122.547015, + 122.83622, + 123.125441, + 123.414678, + 123.703931, + 123.993199, + 124.282483, + 124.571783, + 124.861098, + 125.150429, + 125.439775, + 125.729136, + 126.018512, + 126.307903, + 126.597309, + 126.88673, + 127.176166, + 127.465616, + 127.755081, + 128.044561, + 128.334055, + 128.623563, + 128.913085, + 129.202622, + 129.492173, + 129.781738, + 130.071317, + 130.36091, + 130.650517, + 130.940138, + 131.229772, + 131.519421, + 131.809083, + 132.098758, + 132.388448, + 132.678151, + 132.967867, + 133.257597, + 133.547341, + 133.837097, + 134.126868, + 134.416651, + 134.706448, + 134.996258, + 135.286081, + 135.575918, + 135.865767, + 136.15563, + 136.445505, + 136.735394, + 137.025295, + 137.315209, + 137.605136, + 137.895076, + 138.185029, + 138.474994, + 138.764972, + 139.054962, + 139.344965, + 139.634981, + 139.925009, + 140.21505, + 140.505103, + 140.795168, + 141.085246, + 141.375336, + 141.665438, + 141.955553, + 142.24568, + 142.53582, + 142.825972, + 143.116136, + 143.406312, + 143.696501, + 143.986702, + 144.276915, + 144.567141, + 144.857379, + 145.147629, + 145.437892, + 145.728167, + 146.018455, + 146.308754, + 146.599067, + 146.889392, + 147.179729, + 147.470079, + 147.760441, + 148.050816, + 148.341203, + 148.631603, + 148.922015, + 149.21244, + 149.502878, + 149.793328, + 150.083791, + 150.374266, + 150.664754, + 150.955255, + 151.245768, + 151.536293, + 151.826832, + 152.117383, + 152.407946, + 152.698522, + 152.98911, + 153.279711, + 153.570324, + 153.86095, + 154.151588, + 154.442238, + 154.732901, + 155.023576, + 155.314263, + 155.604963, + 155.895674, + 156.186398, + 156.477134, + 156.767882, + 157.058642, + 157.349413, + 157.640197, + 157.930992, + 158.221799, + 158.512618, + 158.803449, + 159.094291, + 159.385145, + 159.676011, + 159.966888, + 160.257776, + 160.548676, + 160.839587, + 161.130509, + 161.421443, + 161.712388, + 162.003344, + 162.294311, + 162.585289, + 162.876278, + 163.167278, + 163.458288, + 163.74931, + 164.040342, + 164.331385, + 164.622438, + 164.913502, + 165.204577, + 165.495661, + 165.786756, + 166.077862, + 166.368977, + 166.660103, + 166.951238, + 167.242383, + 167.533538, + 167.824703, + 168.115878, + 168.407062, + 168.698255, + 168.989458, + 169.28067, + 169.571891, + 169.863121, + 170.154361, + 170.445609, + 170.736866, + 171.028132, + 171.319407, + 171.61069, + 171.901982, + 172.193282, + 172.48459, + 172.775907, + 173.067232, + 173.358565, + 173.649906, + 173.941255, + 174.232612, + 174.523977, + 174.81535, + 175.106731, + 175.398119, + 175.689514, + 175.980918, + 176.272329, + 176.563747, + 176.855173, + 177.146606, + 177.438046, + 177.729494, + 178.020949, + 178.312411, + 178.603881, + 178.895357, + 179.186841, + 179.478331, + 179.769829, + 180.061334, + 180.352845, + 180.644364, + 180.935889, + 181.227421, + 181.518961, + 181.810506, + 182.102059, + 182.393618, + 182.685184, + 182.976757, + 183.268336, + 183.559922, + 183.851514, + 184.143113, + 184.434718, + 184.72633, + 185.017948, + 185.309572, + 185.601203, + 185.892839, + 186.184482, + 186.476131, + 186.767786, + 187.059448, + 187.351115, + 187.642788, + 187.934468, + 188.226153, + 188.517845, + 188.809542, + 189.101246, + 189.392956, + 189.684672, + 189.976394, + 190.268123, + 190.559858, + 190.851599, + 191.143347, + 191.435102, + 191.726863, + 192.018631, + 192.310406, + 192.602188, + 192.893977, + 193.185773, + 193.477577, + 193.769388, + 194.061206, + 194.353033, + 194.644867, + 194.936709, + 195.228558, + 195.520416, + 195.812282, + 196.104156, + 196.396039, + 196.68793, + 196.979829, + 197.271736, + 197.563652, + 197.855576, + 198.147508, + 198.439449, + 198.731399, + 199.023356, + 199.315322, + 199.607297, + 199.899279, + 200.19127, + 200.483269, + 200.775276, + 201.067291, + 201.359313, + 201.651344, + 201.943383, + 202.235429, + 202.527483, + 202.819545, + 203.111615, + 203.403691, + 203.695776, + 203.987868, + 204.279967, + 204.572074, + 204.864188, + 205.156309, + 205.448438, + 205.740574, + 206.032717, + 206.324868, + 206.617026, + 206.909191, + 207.201363, + 207.493543, + 207.78573, + 208.077925, + 208.370127, + 208.662336, + 208.954552, + 209.246776, + 209.539008, + 209.831247, + 210.123493, + 210.415747, + 210.708008, + 211.000277, + 211.292553, + 211.584836, + 211.877128, + 212.169426, + 212.461732, + 212.754046, + 213.046367, + 213.338695, + 213.631031, + 213.923375, + 214.215726, + 214.508084, + 214.80045, + 215.092823, + 215.385203, + 215.677591, + 215.969986, + 216.262389, + 216.554799, + 216.847216, + 217.139641, + 217.432073, + 217.724513, + 218.016961, + 218.309415, + 218.601878, + 218.894348, + 219.186826, + 219.479312, + 219.771806, + 220.064308, + 220.356818, + 220.649337, + 220.941864, + 221.234399, + 221.526943, + 221.819496, + 222.112059, + 222.40463, + 222.69721, + 222.989801, + 223.2824, + 223.57501, + 223.86763, + 224.16026, + 224.452901, + 224.745552, + 225.038214, + 225.330887, + 225.623571, + 225.916266, + 226.208973, + 226.501692, + 226.794423, + 227.087165, + 227.37992, + 227.672687, + 227.965467, + 228.258259, + 228.551064, + 228.843881, + 229.136712, + 229.429556, + 229.722413, + 230.015284, + 230.308168, + 230.601065, + 230.893976, + 231.186901, + 231.47984, + 231.772792, + 232.065759, + 232.35874, + 232.651735, + 232.944744, + 233.237768, + 233.530806, + 233.823859, + 234.116926, + 234.410008, + 234.703105, + 234.996217, + 235.289344, + 235.582485, + 235.875642, + 236.168815, + 236.462002, + 236.755205, + 237.048423, + 237.341656, + 237.634906, + 237.92817, + 238.221451, + 238.514747, + 238.808059, + 239.101387, + 239.394731, + 239.68809, + 239.981466, + 240.274857, + 240.568265, + 240.861688, + 241.155127, + 241.448583, + 241.742054, + 242.035541, + 242.329044, + 242.622563, + 242.916098, + 243.209648, + 243.503214, + 243.796796, + 244.090394, + 244.384007, + 244.677635, + 244.971279, + 245.264938, + 245.558612, + 245.852301, + 246.146005, + 246.439724, + 246.733458, + 247.027206, + 247.320969, + 247.614746, + 247.908538, + 248.202344, + 248.496164, + 248.789998, + 249.083846, + 249.377708, + 249.671583, + 249.965472, + 250.259374, + 250.55329, + 250.847219, + 251.141161, + 251.435116, + 251.729085, + 252.023066, + 252.31706, + 252.611066, + 252.905085, + 253.199117, + 253.493161, + 253.787217, + 254.081286, + 254.375367, + 254.66946, + 254.963564, + 255.257681, + 255.55181, + 255.84595, + 256.140102, + 256.434266, + 256.728441, + 257.022628, + 257.316826, + 257.611036, + 257.905256, + 258.199488, + 258.493731, + 258.787985, + 259.08225, + 259.376525, + 259.670812, + 259.965109, + 260.259417, + 260.553736, + 260.848065, + 261.142405, + 261.436755, + 261.731116, + 262.025488, + 262.319869, + 262.614261, + 262.908664, + 263.203076, + 263.497499, + 263.791933, + 264.086377, + 264.380831, + 264.675295, + 264.96977, + 265.264255, + 265.55875, + 265.853256, + 266.147772, + 266.442299, + 266.736836, + 267.031384, + 267.325942, + 267.620511, + 267.91509, + 268.209681, + 268.504282, + 268.798894, + 269.093516, + 269.38815, + 269.682795, + 269.977451, + 270.272117, + 270.566795, + 270.861485, + 271.156185, + 271.450897, + 271.74562, + 272.040355, + 272.335101, + 272.629858, + 272.924627, + 273.219408, + 273.5142, + 273.809004, + 274.10382, + 274.398647, + 274.693487, + 274.988338, + 275.283201, + 275.578076, + 275.872963, + 276.167861, + 276.462772, + 276.757695, + 277.05263, + 277.347577, + 277.642536, + 277.937507, + 278.23249, + 278.527486, + 278.822494, + 279.117514, + 279.412547, + 279.707591, + 280.002649, + 280.297718, + 280.5928, + 280.887895, + 281.183002, + 281.478122, + 281.773254, + 282.068399, + 282.363557, + 282.658727, + 282.953911, + 283.249106, + 283.544315, + 283.839537, + 284.134771, + 284.430018, + 284.725278, + 285.020551, + 285.315837, + 285.611135, + 285.906447, + 286.201771, + 286.497109, + 286.792459, + 287.087821, + 287.383197, + 287.678585, + 287.973987, + 288.2694, + 288.564827, + 288.860266, + 289.155718, + 289.451182, + 289.746659, + 290.042148, + 290.337649, + 290.633163, + 290.928689, + 291.224227, + 291.519778, + 291.81534, + 292.110914, + 292.406501, + 292.702099, + 292.997709, + 293.29333, + 293.588963, + 293.884608, + 294.180264, + 294.475931, + 294.77161, + 295.0673, + 295.363, + 295.658712, + 295.954435, + 296.250169, + 296.545913, + 296.841668, + 297.137434, + 297.43321, + 297.728996, + 298.024792, + 298.320599, + 298.616415, + 298.912242, + 299.208078, + 299.503924, + 299.79978, + 300.095645, + 300.391519, + 300.687403, + 300.983295, + 301.279197, + 301.575107, + 301.871026, + 302.166954, + 302.46289, + 302.758834, + 303.054786, + 303.350746, + 303.646714, + 303.94269, + 304.238673, + 304.534663, + 304.83066, + 305.126664, + 305.422675, + 305.718692, + 306.014716, + 306.310746, + 306.606782, + 306.902824, + 307.198871, + 307.494924, + 307.790982, + 308.087046, + 308.383114, + 308.679188, + 308.975266, + 309.271349, + 309.567437, + 309.863529, + 310.159626, + 310.455727, + 310.751833, + 311.047943, + 311.344057, + 311.640176, + 311.936299, + 312.232426, + 312.528557, + 312.824693, + 313.120834, + 313.416978, + 313.713128, + 314.009281, + 314.30544, + 314.601603, + 314.897771, + 315.193943, + 315.49012, + 315.786303, + 316.08249, + 316.378682, + 316.674879, + 316.971081, + 317.267288, + 317.5635, + 317.859717, + 318.15594, + 318.452167, + 318.748399, + 319.044637, + 319.34088, + 319.637127, + 319.93338, + 320.229638, + 320.5259, + 320.822168, + 321.11844, + 321.414717, + 321.710999, + 322.007286, + 322.303578, + 322.599874, + 322.896175, + 323.192481, + 323.488791, + 323.785106, + 324.081426, + 324.37775, + 324.674079, + 324.970413, + 325.266751, + 325.563094, + 325.859442, + 326.155795, + 326.452152, + 326.748515, + 327.044882, + 327.341255, + 327.637632, + 327.934015, + 328.230403, + 328.526796, + 328.823195, + 329.119599, + 329.416008, + 329.712423, + 330.008844, + 330.30527, + 330.601702, + 330.89814, + 331.194584, + 331.491034, + 331.787489, + 332.083951, + 332.380418, + 332.676892, + 332.973371, + 333.269856, + 333.566347, + 333.862845, + 334.159348, + 334.455857, + 334.752371, + 335.048892, + 335.345418, + 335.64195, + 335.938488, + 336.235031, + 336.531579, + 336.828134, + 337.124693, + 337.421258, + 337.717829, + 338.014404, + 338.310985, + 338.607571, + 338.904162, + 339.200758, + 339.497359, + 339.793966, + 340.090577, + 340.387193, + 340.683815, + 340.980441, + 341.277072, + 341.573709, + 341.870351, + 342.166997, + 342.463649, + 342.760306, + 343.056968, + 343.353636, + 343.650309, + 343.946987, + 344.24367, + 344.540359, + 344.837054, + 345.133754, + 345.430459, + 345.727171, + 346.023888, + 346.32061, + 346.617339, + 346.914073, + 347.210813, + 347.507559, + 347.80431, + 348.101068, + 348.397831, + 348.694601, + 348.991376, + 349.288157, + 349.584944, + 349.881737, + 350.178536, + 350.47534, + 350.772151, + 351.068967, + 351.365789, + 351.662617, + 351.95945, + 352.25629, + 352.553135, + 352.849986, + 353.146842, + 353.443704, + 353.740572, + 354.037446, + 354.334325, + 354.63121, + 354.928101, + 355.224997, + 355.5219, + 355.818808, + 356.115722, + 356.412641, + 356.709567, + 357.006498, + 357.303436, + 357.60038, + 357.897329, + 358.194285, + 358.491247, + 358.788215, + 359.085189, + 359.38217, + 359.679157, + 359.976151, + 0.273151, + 0.570158, + 0.867171, + 1.164191, + 1.461218, + 1.758251, + 2.055291, + 2.352338, + 2.649392, + 2.946453, + 3.243521, + 3.540595, + 3.837677, + 4.134765, + 4.43186, + 4.728962, + 5.026072, + 5.323188, + 5.620311, + 5.917441, + 6.214578, + 6.511722, + 6.808873, + 7.10603, + 7.403195, + 7.700366, + 7.997544, + 8.294729, + 8.591921, + 8.88912, + 9.186326, + 9.483538, + 9.780757, + 10.077983, + 10.375215, + 10.672455, + 10.969701, + 11.266954, + 11.564214, + 11.861481, + 12.158754, + 12.456034, + 12.753322, + 13.050616, + 13.347917, + 13.645225, + 13.94254, + 14.239861, + 14.53719, + 14.834526, + 15.131869, + 15.429219, + 15.726576, + 16.02394, + 16.321311, + 16.618689, + 16.916075, + 17.213468, + 17.510867, + 17.808274, + 18.105688, + 18.40311, + 18.700538, + 18.997973, + 19.295416, + 19.592866, + 19.890323, + 20.187787, + 20.485258, + 20.782736, + 21.080221, + 21.377713, + 21.675212, + 21.972719, + 22.270232, + 22.567752, + 22.865279, + 23.162813, + 23.460353, + 23.757901, + 24.055455, + 24.353016, + 24.650584, + 24.948159, + 25.245741, + 25.543329, + 25.840924, + 26.138526, + 26.436134, + 26.733749, + 27.031371, + 27.329, + 27.626635, + 27.924277, + 28.221926, + 28.519581, + 28.817243, + 29.114912, + 29.412587, + 29.710269, + 30.007958, + 30.305653, + 30.603355, + 30.901063, + 31.198779, + 31.4965, + 31.794229, + 32.091963, + 32.389705, + 32.687453, + 32.985207, + 33.282968, + 33.580735, + 33.878508, + 34.176288, + 34.474074, + 34.771867, + 35.069665, + 35.36747, + 35.665281, + 35.963098, + 36.260922, + 36.558751, + 36.856586, + 37.154427, + 37.452274, + 37.750127, + 38.047986, + 38.34585, + 38.64372, + 38.941597, + 39.239478, + 39.537366, + 39.835259, + 40.133158, + 40.431062, + 40.728972, + 41.026888, + 41.324809, + 41.622736, + 41.920669, + 42.218607, + 42.516551, + 42.814501, + 43.112456, + 43.410417, + 43.708383, + 44.006356, + 44.304334, + 44.602318, + 44.900308, + 45.198304, + 45.496305, + 45.794313, + 46.092326, + 46.390345, + 46.68837, + 46.986402, + 47.284439, + 47.582482, + 47.880532, + 48.178587, + 48.476649, + 48.774717, + 49.072791, + 49.370871, + 49.668957, + 49.96705, + 50.265149, + 50.563254, + 50.861366, + 51.159484, + 51.457608, + 51.755739, + 52.053876, + 52.35202, + 52.65017, + 52.948327, + 53.246491, + 53.544661, + 53.842837, + 54.141021, + 54.439211, + 54.737407, + 55.035611, + 55.333821, + 55.632039, + 55.930263, + 56.228494, + 56.526732, + 56.824978, + 57.12323, + 57.421489, + 57.719756, + 58.01803, + 58.316311, + 58.614599, + 58.912895, + 59.211198, + 59.509509, + 59.807827, + 60.106152, + 60.404485, + 60.702826, + 61.001174, + 61.29953, + 61.597894, + 61.896265, + 62.194644, + 62.493031, + 62.791426, + 63.089828, + 63.388238, + 63.686656, + 63.985081, + 64.283514, + 64.581955, + 64.880404, + 65.17886, + 65.477324, + 65.775795, + 66.074274, + 66.37276, + 66.671254, + 66.969755, + 67.268264, + 67.56678, + 67.865303, + 68.163833, + 68.462371, + 68.760916, + 69.059468, + 69.358028, + 69.656594, + 69.955168, + 70.253749, + 70.552337, + 70.850933, + 71.149536, + 71.448146, + 71.746764, + 72.045389, + 72.344022, + 72.642662, + 72.94131, + 73.239966, + 73.53863, + 73.837301, + 74.13598, + 74.434668, + 74.733363, + 75.032067, + 75.330778, + 75.629498, + 75.928226, + 76.226963, + 76.525708, + 76.824461, + 77.123223, + 77.421993, + 77.720771, + 78.019557, + 78.318352, + 78.617155, + 78.915967, + 79.214786, + 79.513613, + 79.812449, + 80.111292, + 80.410143, + 80.709001, + 81.007868, + 81.306741, + 81.605622, + 81.90451, + 82.203406, + 82.502308, + 82.801217, + 83.100133, + 83.399056, + 83.697985, + 83.99692, + 84.295862, + 84.59481, + 84.893764, + 85.192724, + 85.491691, + 85.790663, + 86.089641, + 86.388625, + 86.687614, + 86.98661, + 87.285611, + 87.584617, + 87.883629, + 88.182647, + 88.481671, + 88.780699, + 89.079734, + 89.378774, + 89.677819, + 89.97687, + 90.275926, + 90.574988, + 90.874055, + 91.173128, + 91.472205, + 91.771288, + 92.070377, + 92.36947, + 92.668569, + 92.967673, + 93.266782, + 93.565896, + 93.865015, + 94.164139, + 94.463268, + 94.762402, + 95.061541, + 95.360684, + 95.659833, + 95.958985, + 96.258143, + 96.557305, + 96.856471, + 97.155642, + 97.454817, + 97.753997, + 98.053181, + 98.35237, + 98.651563, + 98.95076, + 99.249961, + 99.549167, + 99.848377, + 100.147592, + 100.446811, + 100.746034, + 101.045262, + 101.344495, + 101.643732, + 101.942974, + 102.242221, + 102.541473, + 102.84073, + 103.139992, + 103.439259, + 103.738531, + 104.037809, + 104.337093, + 104.636382, + 104.935677, + 105.234978, + 105.534285, + 105.833599, + 106.132918, + 106.432244, + 106.731577, + 107.030916, + 107.330262, + 107.629615, + 107.928975, + 108.228342, + 108.527716, + 108.827098, + 109.126486, + 109.425883, + 109.725286, + 110.024697, + 110.324116, + 110.623543, + 110.922977, + 111.222419, + 111.521868, + 111.821326, + 112.120791, + 112.420265, + 112.719746, + 113.019236, + 113.318733, + 113.618238, + 113.917752, + 114.217274, + 114.516803, + 114.816342, + 115.115888, + 115.415442, + 115.715005, + 116.014577, + 116.314156, + 116.613744, + 116.913341, + 117.212946, + 117.51256, + 117.812182, + 118.111813, + 118.411452, + 118.7111, + 119.010757, + 119.310423, + 119.610097, + 119.90978, + 120.209472, + 120.509173, + 120.808883, + 121.108601, + 121.408329, + 121.708065, + 122.00781, + 122.307564, + 122.607327, + 122.907098, + 123.206879, + 123.506668, + 123.806465, + 124.106272, + 124.406086, + 124.70591, + 125.005741, + 125.305581, + 125.60543, + 125.905286, + 126.205151, + 126.505023, + 126.804904, + 127.104792, + 127.404688, + 127.704592, + 128.004503, + 128.304422, + 128.604348, + 128.904281, + 129.204221, + 129.504168, + 129.804122, + 130.104083, + 130.40405, + 130.704024, + 131.004005, + 131.303992, + 131.603985, + 131.903985, + 132.20399, + 132.504002, + 132.804019, + 133.104042, + 133.404071, + 133.704106, + 134.004147, + 134.304192, + 134.604244, + 134.904301, + 135.204363, + 135.50443, + 135.804503, + 136.10458, + 136.404663, + 136.704751, + 137.004843, + 137.304941, + 137.605043, + 137.90515, + 138.205262, + 138.505378, + 138.805499, + 139.105625, + 139.405754, + 139.705888, + 140.006027, + 140.306169, + 140.606316, + 140.906467, + 141.206622, + 141.506781, + 141.806944, + 142.10711, + 142.407281, + 142.707455, + 143.007633, + 143.307815, + 143.608, + 143.908189, + 144.208382, + 144.508578, + 144.808777, + 145.10898, + 145.409187, + 145.709397, + 146.009611, + 146.309827, + 146.610048, + 146.910272, + 147.210499, + 147.51073, + 147.810964, + 148.111202, + 148.411443, + 148.711688, + 149.011936, + 149.312188, + 149.612444, + 149.912703, + 150.212965, + 150.513232, + 150.813502, + 151.113775, + 151.414053, + 151.714334, + 152.014619, + 152.314908, + 152.6152, + 152.915496, + 153.215796, + 153.5161, + 153.816408, + 154.11672, + 154.417035, + 154.717354, + 155.017677, + 155.318004, + 155.618335, + 155.91867, + 156.219008, + 156.519351, + 156.819697, + 157.120047, + 157.4204, + 157.720758, + 158.021119, + 158.321483, + 158.621852, + 158.922224, + 159.2226, + 159.52298, + 159.823363, + 160.12375, + 160.42414, + 160.724534, + 161.024931, + 161.325333, + 161.625737, + 161.926145, + 162.226557, + 162.526972, + 162.827391, + 163.127813, + 163.428239, + 163.728668, + 164.029101, + 164.329537, + 164.629976, + 164.930419, + 165.230865, + 165.531315, + 165.831768, + 166.132224, + 166.432683, + 166.733146, + 167.033612, + 167.334081, + 167.634553, + 167.935029, + 168.235507, + 168.535989, + 168.836473, + 169.13696, + 169.43745, + 169.737943, + 170.038439, + 170.338938, + 170.639439, + 170.939942, + 171.240448, + 171.540957, + 171.841468, + 172.141981, + 172.442497, + 172.743015, + 173.043535, + 173.344057, + 173.644581, + 173.945107, + 174.245635, + 174.546164, + 174.846696, + 175.147229, + 175.447764, + 175.7483, + 176.048838, + 176.349378, + 176.649918, + 176.950461, + 177.251004, + 177.551549, + 177.852096, + 178.152643, + 178.453192, + 178.753742, + 179.054292, + 179.354844, + 179.655397, + 179.955951, + 180.256506, + 180.557062, + 180.857619, + 181.158177, + 181.458735, + 181.759295, + 182.059855, + 182.360416, + 182.660977, + 182.961539, + 183.262102, + 183.562665, + 183.863229, + 184.163794, + 184.464358, + 184.764924, + 185.065489, + 185.366055, + 185.666621, + 185.967187, + 186.267753, + 186.568319, + 186.868885, + 187.169452, + 187.470018, + 187.770584, + 188.07115, + 188.371716, + 188.672282, + 188.972848, + 189.273413, + 189.573979, + 189.874545, + 190.175111, + 190.475677, + 190.776243, + 191.076809, + 191.377376, + 191.677943, + 191.978511, + 192.27908, + 192.579649, + 192.88022, + 193.180792, + 193.481365, + 193.781939, + 194.082515, + 194.383093, + 194.683673, + 194.984255, + 195.284839, + 195.585426, + 195.886015, + 196.186607, + 196.487202, + 196.787799, + 197.0884, + 197.389004, + 197.689611, + 197.990222, + 198.290836, + 198.591453, + 198.892074, + 199.192699, + 199.493327, + 199.793959, + 200.094594, + 200.395233, + 200.695876, + 200.996523, + 201.297174, + 201.597828, + 201.898486, + 202.199148, + 202.499813, + 202.800482, + 203.101155, + 203.401831, + 203.702511, + 204.003195, + 204.303883, + 204.604574, + 204.905269, + 205.205968, + 205.50667, + 205.807376, + 206.108087, + 206.4088, + 206.709518, + 207.01024, + 207.310966, + 207.611696, + 207.91243, + 208.213168, + 208.51391, + 208.814657, + 209.115408, + 209.416163, + 209.716923, + 210.017687, + 210.318456, + 210.619229, + 210.920007, + 211.22079, + 211.521577, + 211.822369, + 212.123166, + 212.423967, + 212.724773, + 213.025583, + 213.326399, + 213.627218, + 213.928043, + 214.228872, + 214.529705, + 214.830543, + 215.131385, + 215.432232, + 215.733082, + 216.033937, + 216.334796, + 216.635659, + 216.936526, + 217.237397, + 217.538272, + 217.83915, + 218.140032, + 218.440918, + 218.741807, + 219.042699, + 219.343595, + 219.644494, + 219.945397, + 220.246303, + 220.547211, + 220.848124, + 221.149039, + 221.449958, + 221.750879, + 222.051804, + 222.352732, + 222.653664, + 222.954598, + 223.255536, + 223.556477, + 223.857422, + 224.15837, + 224.459321, + 224.760276, + 225.061234, + 225.362196, + 225.663161, + 225.964131, + 226.265104, + 226.566081, + 226.867061, + 227.168046, + 227.469034, + 227.770027, + 228.071023, + 228.372024, + 228.673028, + 228.974037, + 229.27505, + 229.576067, + 229.877088, + 230.178113, + 230.479143, + 230.780176, + 231.081214, + 231.382256, + 231.683302, + 231.984352, + 232.285407, + 232.586466, + 232.887529, + 233.188596, + 233.489667, + 233.790743, + 234.091823, + 234.392907, + 234.693995, + 234.995088, + 235.296185, + 235.597287, + 235.898393, + 236.199503, + 236.500618, + 236.801737, + 237.102861, + 237.40399, + 237.705124, + 238.006262, + 238.307406, + 238.608554, + 238.909708, + 239.210866, + 239.51203, + 239.8132, + 240.114374, + 240.415554, + 240.71674, + 241.017932, + 241.319129, + 241.620332, + 241.921541, + 242.222756, + 242.523977, + 242.825204, + 243.126438, + 243.427677, + 243.728923, + 244.030176, + 244.331435, + 244.6327, + 244.933972, + 245.235251, + 245.536536, + 245.837828, + 246.139127, + 246.440432, + 246.741744, + 247.043063, + 247.344388, + 247.645721, + 247.94706, + 248.248406, + 248.549759, + 248.851119, + 249.152486, + 249.453859, + 249.75524, + 250.056627, + 250.358022, + 250.659423, + 250.960832, + 251.262248, + 251.56367, + 251.8651, + 252.166537, + 252.467981, + 252.769433, + 253.070891, + 253.372357, + 253.67383, + 253.975311, + 254.276799, + 254.578294, + 254.879797, + 255.181307, + 255.482825, + 255.78435, + 256.085884, + 256.387424, + 256.688973, + 256.990529, + 257.292093, + 257.593664, + 257.895243, + 258.196831, + 258.498426, + 258.800028, + 259.101639, + 259.403257, + 259.704883, + 260.006517, + 260.308159, + 260.609808, + 260.911465, + 261.21313, + 261.514803, + 261.816483, + 262.118171, + 262.419867, + 262.72157, + 263.023281, + 263.324999, + 263.626725, + 263.928458, + 264.230199, + 264.531947, + 264.833703, + 265.135465, + 265.437236, + 265.739013, + 266.040797, + 266.342589, + 266.644388, + 266.946194, + 267.248007, + 267.549828, + 267.851655, + 268.153489, + 268.45533, + 268.757179, + 269.059034, + 269.360896, + 269.662764, + 269.96464, + 270.266522, + 270.568411, + 270.870307, + 271.17221, + 271.474119, + 271.776035, + 272.077957, + 272.379885, + 272.68182, + 272.983762, + 273.285709, + 273.587663, + 273.889623, + 274.19159, + 274.493562, + 274.79554, + 275.097524, + 275.399513, + 275.701508, + 276.003509, + 276.305516, + 276.607527, + 276.909544, + 277.211566, + 277.513594, + 277.815626, + 278.117663, + 278.419705, + 278.721752, + 279.023803, + 279.325859, + 279.627919, + 279.929983, + 280.232052, + 280.534125, + 280.836202, + 281.138283, + 281.440368, + 281.742457, + 282.044549, + 282.346645, + 282.648745, + 282.950848, + 283.252955, + 283.555065, + 283.857179, + 284.159296, + 284.461416, + 284.76354, + 285.065666, + 285.367796, + 285.669929, + 285.972065, + 286.274204, + 286.576346, + 286.87849, + 287.180638, + 287.482789, + 287.784942, + 288.087098, + 288.389257, + 288.691418, + 288.993582, + 289.295749, + 289.597918, + 289.900089, + 290.202263, + 290.50444, + 290.806619, + 291.1088, + 291.410984, + 291.713169, + 292.015357, + 292.317548, + 292.61974, + 292.921934, + 293.224131, + 293.526329, + 293.82853, + 294.130733, + 294.432937, + 294.735144, + 295.037352, + 295.339562, + 295.641774, + 295.943988, + 296.246204, + 296.548422, + 296.850641, + 297.152862, + 297.455085, + 297.75731, + 298.059536, + 298.361764, + 298.663994, + 298.966226, + 299.268459, + 299.570694, + 299.872931, + 300.175169, + 300.477409, + 300.779651, + 301.081895, + 301.38414, + 301.686387, + 301.988635, + 302.290885, + 302.593137, + 302.895391, + 303.197646, + 303.499902, + 303.80216, + 304.10442, + 304.406681, + 304.708943, + 305.011207, + 305.313473, + 305.615739, + 305.918007, + 306.220276, + 306.522546, + 306.824817, + 307.127089, + 307.429362, + 307.731636, + 308.033911, + 308.336187, + 308.638464, + 308.940742, + 309.24302, + 309.545299, + 309.84758, + 310.149861, + 310.452142, + 310.754425, + 311.056709, + 311.358994, + 311.661279, + 311.963566, + 312.265854, + 312.568144, + 312.870435, + 313.172727, + 313.475021, + 313.777316, + 314.079614, + 314.381913, + 314.684214, + 314.986517, + 315.288822, + 315.59113, + 315.893439, + 316.195752, + 316.498066, + 316.800383, + 317.102703, + 317.405025, + 317.70735, + 318.009677, + 318.312008, + 318.61434, + 318.916676, + 319.219014, + 319.521354, + 319.823697, + 320.126043, + 320.428391, + 320.730742, + 321.033094, + 321.335449, + 321.637807, + 321.940166, + 322.242527, + 322.54489, + 322.847255, + 323.149622, + 323.451991, + 323.754361, + 324.056733, + 324.359106, + 324.661481, + 324.963857, + 325.266234, + 325.568613, + 325.870993, + 326.173374, + 326.475756, + 326.77814, + 327.080525, + 327.382911, + 327.685298, + 327.987686, + 328.290076, + 328.592466, + 328.894858, + 329.197252, + 329.499646, + 329.802042, + 330.104439, + 330.406837, + 330.709236, + 331.011637, + 331.314039, + 331.616443, + 331.918848, + 332.221254, + 332.523661, + 332.82607, + 333.12848, + 333.430891, + 333.733304, + 334.035717, + 334.338132, + 334.640548, + 334.942965, + 335.245383, + 335.547802, + 335.850222, + 336.152642, + 336.455064, + 336.757486, + 337.059909, + 337.362333, + 337.664757, + 337.967182, + 338.269607, + 338.572032, + 338.874458, + 339.176885, + 339.479311, + 339.781739, + 340.084166, + 340.386594, + 340.689022, + 340.99145, + 341.293879, + 341.596308, + 341.898738, + 342.201168, + 342.503598, + 342.80603, + 343.108462, + 343.410894, + 343.713327, + 344.015762, + 344.318197, + 344.620633, + 344.923071, + 345.225509, + 345.527949, + 345.830391, + 346.132834, + 346.435278, + 346.737725, + 347.040173, + 347.342623, + 347.645074, + 347.947528, + 348.249984, + 348.552442, + 348.854903, + 349.157365, + 349.45983, + 349.762297, + 350.064767, + 350.367239, + 350.669714, + 350.972191, + 351.274671, + 351.577153, + 351.879637, + 352.182125, + 352.484615, + 352.787107, + 353.089602, + 353.3921, + 353.6946, + 353.997102, + 354.299608, + 354.602116, + 354.904626, + 355.207139, + 355.509655, + 355.812174, + 356.114695, + 356.417219, + 356.719745, + 357.022274, + 357.324806, + 357.627341, + 357.929878, + 358.232418, + 358.534961, + 358.837507, + 359.140056, + 359.442607, + 359.745162, + 0.047719, + 0.350279, + 0.652843, + 0.955409, + 1.257979, + 1.560551, + 1.863127, + 2.165705, + 2.468287, + 2.770872, + 3.07346, + 3.376051, + 3.678645, + 3.981242, + 4.283842, + 4.586445, + 4.889051, + 5.19166, + 5.494272, + 5.796886, + 6.099504, + 6.402124, + 6.704747, + 7.007373, + 7.310002, + 7.612633, + 7.915266, + 8.217902, + 8.520541, + 8.823182, + 9.125825, + 9.42847, + 9.731118, + 10.033768, + 10.33642, + 10.639074, + 10.94173, + 11.244388, + 11.547048, + 11.849711, + 12.152375, + 12.455041, + 12.757709, + 13.060378, + 13.36305, + 13.665724, + 13.968399, + 14.271077, + 14.573756, + 14.876437, + 15.17912, + 15.481805, + 15.784492, + 16.087181, + 16.389872, + 16.692565, + 16.99526, + 17.297957, + 17.600656, + 17.903357, + 18.20606, + 18.508766, + 18.811473, + 19.114183, + 19.416895, + 19.719609, + 20.022326, + 20.325045, + 20.627766, + 20.930489, + 21.233215, + 21.535943, + 21.838674, + 22.141407, + 22.444142, + 22.74688, + 23.04962, + 23.352363, + 23.655109, + 23.957857, + 24.260608, + 24.563362, + 24.866118, + 25.168877, + 25.471639, + 25.774404, + 26.077171, + 26.379942, + 26.682716, + 26.985492, + 27.288272, + 27.591055, + 27.893842, + 28.196632, + 28.499425, + 28.802222, + 29.105022, + 29.407826, + 29.710633, + 30.013445, + 30.31626, + 30.619079, + 30.921903, + 31.22473, + 31.527562, + 31.830397, + 32.133237, + 32.436082, + 32.738931, + 33.041784, + 33.344642, + 33.647504, + 33.950371, + 34.253243, + 34.556119, + 34.859001, + 35.161887, + 35.464777, + 35.767673, + 36.070573, + 36.373478, + 36.676389, + 36.979304, + 37.282223, + 37.585148, + 37.888078, + 38.191012, + 38.493952, + 38.796896, + 39.099845, + 39.402799, + 39.705758, + 40.008721, + 40.311689, + 40.614663, + 40.91764, + 41.220623, + 41.52361, + 41.826602, + 42.129599, + 42.4326, + 42.735606, + 43.038617, + 43.341632, + 43.644652, + 43.947676, + 44.250705, + 44.553738, + 44.856776, + 45.159818, + 45.462865, + 45.765916, + 46.068971, + 46.372031, + 46.675095, + 46.978163, + 47.281235, + 47.584312, + 47.887393, + 48.190477, + 48.493566, + 48.796658, + 49.099755, + 49.402855, + 49.705959, + 50.009067, + 50.312178, + 50.615293, + 50.918411, + 51.221533, + 51.524658, + 51.827786, + 52.130917, + 52.434051, + 52.737188, + 53.040328, + 53.343471, + 53.646617, + 53.949765, + 54.252915, + 54.556068, + 54.859224, + 55.162381, + 55.465541, + 55.768703, + 56.071867, + 56.375032, + 56.6782, + 56.981369, + 57.284539, + 57.587712 + ], + "yaxis": "y2" + }, + { + "mode": "lines", + "name": " GenTq", + "type": "scatter", + "xaxis": "x3", + "y": [ + 15.401253, + 15.346899, + 15.293689, + 15.241616, + 15.191, + 15.14206, + 15.094997, + 15.04999, + 15.007198, + 14.966757, + 14.928781, + 14.89336, + 14.860562, + 14.830434, + 14.803, + 14.778265, + 14.756211, + 14.736806, + 14.719999, + 14.705725, + 14.693905, + 14.684447, + 14.677253, + 14.672216, + 14.669221, + 14.668152, + 14.668892, + 14.671322, + 14.675327, + 14.680793, + 14.687614, + 14.69569, + 14.704927, + 14.715241, + 14.726558, + 14.738813, + 14.751951, + 14.76593, + 14.780715, + 14.796284, + 14.812623, + 14.829726, + 14.847596, + 14.866244, + 14.885684, + 14.905937, + 14.927025, + 14.948972, + 14.971803, + 14.995539, + 15.020201, + 15.045804, + 15.072356, + 15.09986, + 15.128309, + 15.157687, + 15.187969, + 15.219116, + 15.251081, + 15.283802, + 15.317207, + 15.35121, + 15.385714, + 15.420612, + 15.455783, + 15.491099, + 15.526422, + 15.561606, + 15.596497, + 15.630939, + 15.664771, + 15.697828, + 15.729948, + 15.760969, + 15.790731, + 15.819083, + 15.845876, + 15.870971, + 15.894241, + 15.915567, + 15.934845, + 15.951983, + 15.966906, + 15.979553, + 15.989879, + 15.997856, + 16.003475, + 16.006741, + 16.007676, + 16.006321, + 16.00273, + 15.996973, + 15.989135, + 15.979312, + 15.967613, + 15.954157, + 15.939074, + 15.9225, + 15.904575, + 15.885448, + 15.865267, + 15.844183, + 15.822348, + 15.79991, + 15.777016, + 15.753807, + 15.73042, + 15.706986, + 15.683627, + 15.660457, + 15.637582, + 15.615099, + 15.593094, + 15.571644, + 15.550817, + 15.53067, + 15.51125, + 15.492597, + 15.47474, + 15.457701, + 15.441494, + 15.426129, + 15.411606, + 15.397923, + 15.385074, + 15.373048, + 15.361833, + 15.351416, + 15.341784, + 15.332923, + 15.324821, + 15.31747, + 15.31086, + 15.304989, + 15.299855, + 15.295463, + 15.29182, + 15.288939, + 15.286834, + 15.285528, + 15.285044, + 15.285412, + 15.286661, + 15.288827, + 15.291946, + 15.296055, + 15.301194, + 15.307401, + 15.314715, + 15.323171, + 15.332803, + 15.343643, + 15.355717, + 15.369048, + 15.383654, + 15.399544, + 15.416723, + 15.435189, + 15.454931, + 15.475932, + 15.498165, + 15.521594, + 15.546179, + 15.571867, + 15.598599, + 15.626308, + 15.65492, + 15.684352, + 15.714518, + 15.745323, + 15.776667, + 15.808448, + 15.840557, + 15.872886, + 15.905322, + 15.937752, + 15.970064, + 16.002146, + 16.033888, + 16.065183, + 16.095927, + 16.126022, + 16.155372, + 16.18389, + 16.211495, + 16.238112, + 16.263672, + 16.288118, + 16.311398, + 16.333469, + 16.354296, + 16.373852, + 16.39212, + 16.409088, + 16.424754, + 16.439122, + 16.452204, + 16.464017, + 16.474584, + 16.483933, + 16.492097, + 16.499113, + 16.505021, + 16.509861, + 16.513679, + 16.516519, + 16.518426, + 16.519446, + 16.519624, + 16.519003, + 16.517626, + 16.515532, + 16.512759, + 16.509342, + 16.505316, + 16.500709, + 16.49555, + 16.489862, + 16.483669, + 16.476991, + 16.469845, + 16.462248, + 16.454214, + 16.445756, + 16.436888, + 16.427622, + 16.41797, + 16.407946, + 16.397564, + 16.386838, + 16.375787, + 16.364429, + 16.352786, + 16.340883, + 16.328747, + 16.316409, + 16.303902, + 16.291263, + 16.278533, + 16.265754, + 16.252974, + 16.240242, + 16.227609, + 16.21513, + 16.202862, + 16.190862, + 16.17919, + 16.167905, + 16.157069, + 16.14674, + 16.136978, + 16.127842, + 16.119387, + 16.111667, + 16.104735, + 16.098638, + 16.09342, + 16.089121, + 16.085779, + 16.083424, + 16.082083, + 16.081777, + 16.082521, + 16.084327, + 16.087198, + 16.091135, + 16.096132, + 16.102176, + 16.109252, + 16.117338, + 16.126406, + 16.136428, + 16.147367, + 16.159185, + 16.171839, + 16.185286, + 16.199477, + 16.214362, + 16.22989, + 16.24601, + 16.262666, + 16.279806, + 16.297376, + 16.315323, + 16.333595, + 16.35214, + 16.370908, + 16.389852, + 16.408925, + 16.428084, + 16.447287, + 16.466494, + 16.485669, + 16.504777, + 16.523786, + 16.542666, + 16.561391, + 16.579935, + 16.598274, + 16.616387, + 16.634255, + 16.65186, + 16.669183, + 16.686208, + 16.702921, + 16.719306, + 16.735347, + 16.75103, + 16.766339, + 16.781259, + 16.795775, + 16.809869, + 16.823525, + 16.836725, + 16.849452, + 16.861684, + 16.873405, + 16.884591, + 16.895225, + 16.905283, + 16.914746, + 16.923593, + 16.931802, + 16.939353, + 16.946228, + 16.952408, + 16.957877, + 16.962618, + 16.966619, + 16.969869, + 16.972359, + 16.974083, + 16.975037, + 16.975222, + 16.974641, + 16.9733, + 16.97121, + 16.968384, + 16.964841, + 16.9606, + 16.955687, + 16.950129, + 16.94396, + 16.937212, + 16.929926, + 16.922141, + 16.913902, + 16.905255, + 16.896247, + 16.88693, + 16.877354, + 16.867573, + 16.85764, + 16.847609, + 16.837535, + 16.827471, + 16.817472, + 16.80759, + 16.797876, + 16.788381, + 16.779153, + 16.770238, + 16.761682, + 16.753526, + 16.745809, + 16.738568, + 16.731838, + 16.725649, + 16.720031, + 16.715007, + 16.710602, + 16.706834, + 16.703721, + 16.701276, + 16.699512, + 16.698437, + 16.698058, + 16.698378, + 16.699402, + 16.701128, + 16.703556, + 16.706681, + 16.710501, + 16.715008, + 16.720197, + 16.726058, + 16.732583, + 16.739762, + 16.747585, + 16.75604, + 16.765117, + 16.774803, + 16.785086, + 16.795954, + 16.807392, + 16.819387, + 16.831925, + 16.844992, + 16.858572, + 16.872651, + 16.887211, + 16.902235, + 16.917706, + 16.933604, + 16.949911, + 16.966604, + 16.983662, + 17.001063, + 17.01878, + 17.036789, + 17.055062, + 17.07357, + 17.092284, + 17.111172, + 17.130201, + 17.149338, + 17.168547, + 17.187792, + 17.207035, + 17.226239, + 17.245363, + 17.26437, + 17.283217, + 17.301866, + 17.320276, + 17.338407, + 17.356219, + 17.373674, + 17.390733, + 17.407359, + 17.423517, + 17.439173, + 17.454295, + 17.468851, + 17.482814, + 17.496159, + 17.508862, + 17.520902, + 17.532261, + 17.542925, + 17.552882, + 17.562122, + 17.57064, + 17.578432, + 17.5855, + 17.591846, + 17.597476, + 17.6024, + 17.606629, + 17.610177, + 17.613063, + 17.615305, + 17.616925, + 17.617947, + 17.618396, + 17.618301, + 17.61769, + 17.616593, + 17.615041, + 17.613069, + 17.610707, + 17.607991, + 17.604954, + 17.601632, + 17.598058, + 17.594267, + 17.590293, + 17.586171, + 17.581935, + 17.577616, + 17.573249, + 17.568864, + 17.564493, + 17.560167, + 17.555914, + 17.551764, + 17.547744, + 17.543881, + 17.540202, + 17.536732, + 17.533495, + 17.530514, + 17.527812, + 17.52541, + 17.523331, + 17.521593, + 17.520217, + 17.51922, + 17.51862, + 17.518435, + 17.518679, + 17.51937, + 17.52052, + 17.522143, + 17.524252, + 17.526858, + 17.529972, + 17.533604, + 17.537762, + 17.542452, + 17.547682, + 17.553455, + 17.559775, + 17.566644, + 17.574062, + 17.582028, + 17.59054, + 17.599592, + 17.609179, + 17.619293, + 17.629924, + 17.641061, + 17.652691, + 17.664798, + 17.677366, + 17.690376, + 17.703807, + 17.717639, + 17.731846, + 17.746405, + 17.761287, + 17.776467, + 17.791913, + 17.807596, + 17.823485, + 17.839547, + 17.855749, + 17.872058, + 17.88844, + 17.90486, + 17.921284, + 17.937679, + 17.954009, + 17.970241, + 17.986342, + 18.00228, + 18.018023, + 18.03354, + 18.048801, + 18.063779, + 18.078446, + 18.092777, + 18.106747, + 18.120335, + 18.133518, + 18.146279, + 18.158599, + 18.170464, + 18.181859, + 18.192772, + 18.203193, + 18.213115, + 18.22253, + 18.231433, + 18.239822, + 18.247695, + 18.255053, + 18.261896, + 18.268228, + 18.274055, + 18.279381, + 18.284214, + 18.288564, + 18.292438, + 18.295848, + 18.298807, + 18.301325, + 18.303417, + 18.305098, + 18.306382, + 18.307285, + 18.307823, + 18.308014, + 18.307875, + 18.307425, + 18.306681, + 18.305663, + 18.30439, + 18.302882, + 18.30116, + 18.299244, + 18.297156, + 18.294915, + 18.292544, + 18.290065, + 18.287499, + 18.284869, + 18.282197, + 18.279505, + 18.276817, + 18.274155, + 18.271541, + 18.268998, + 18.266549, + 18.264216, + 18.262022, + 18.259987, + 18.258135, + 18.256486, + 18.25506, + 18.253879, + 18.252961, + 18.252326, + 18.251991, + 18.251974, + 18.252291, + 18.252958, + 18.253988, + 18.255394, + 18.257189, + 18.259384, + 18.261986, + 18.265005, + 18.268447, + 18.272316, + 18.276617, + 18.281351, + 18.286519, + 18.29212, + 18.298152, + 18.30461, + 18.311489, + 18.318782, + 18.326481, + 18.334577, + 18.343057, + 18.351911, + 18.361124, + 18.370682, + 18.380569, + 18.390769, + 18.401264, + 18.412036, + 18.423065, + 18.434333, + 18.445818, + 18.457501, + 18.46936, + 18.481374, + 18.49352, + 18.505779, + 18.518127, + 18.530544, + 18.543007, + 18.555496, + 18.56799, + 18.580466, + 18.592906, + 18.605289, + 18.617596, + 18.629807, + 18.641904, + 18.65387, + 18.665686, + 18.677337, + 18.688805, + 18.700076, + 18.711136, + 18.721969, + 18.732562, + 18.742904, + 18.752981, + 18.762784, + 18.7723, + 18.781522, + 18.790439, + 18.799044, + 18.807328, + 18.815285, + 18.82291, + 18.830196, + 18.837139, + 18.843735, + 18.849982, + 18.855876, + 18.861417, + 18.866603, + 18.871435, + 18.875913, + 18.88004, + 18.883817, + 18.887248, + 18.890336, + 18.893088, + 18.895507, + 18.897602, + 18.899378, + 18.900845, + 18.90201, + 18.902885, + 18.903478, + 18.903802, + 18.903868, + 18.903689, + 18.903278, + 18.902648, + 18.901815, + 18.900792, + 18.899597, + 18.898244, + 18.896749, + 18.89513, + 18.893404, + 18.891587, + 18.889697, + 18.887749, + 18.885764, + 18.883756, + 18.881743, + 18.879744, + 18.877774, + 18.87585, + 18.873988, + 18.872206, + 18.870518, + 18.86894, + 18.867486, + 18.866171, + 18.865007, + 18.864009, + 18.863188, + 18.862556, + 18.862124, + 18.861901, + 18.861897, + 18.86212, + 18.862578, + 18.863278, + 18.864225, + 18.865425, + 18.866882, + 18.8686, + 18.87058, + 18.872825, + 18.875337, + 18.878114, + 18.881158, + 18.884466, + 18.888037, + 18.891869, + 18.895958, + 18.9003, + 18.904892, + 18.909727, + 18.914802, + 18.920109, + 18.925642, + 18.931395, + 18.93736, + 18.943529, + 18.949893, + 18.956446, + 18.963176, + 18.970076, + 18.977135, + 18.984344, + 18.991693, + 18.999171, + 19.006767, + 19.01447, + 19.02227, + 19.030155, + 19.038113, + 19.046134, + 19.054204, + 19.062312, + 19.070447, + 19.078596, + 19.086746, + 19.094886, + 19.103004, + 19.111086, + 19.119122, + 19.127099, + 19.135005, + 19.142828, + 19.150556, + 19.158178, + 19.165682, + 19.173058, + 19.180294, + 19.18738, + 19.194306, + 19.201062, + 19.207638, + 19.214026, + 19.220217, + 19.226203, + 19.231976, + 19.23753, + 19.242859, + 19.247955, + 19.252816, + 19.257435, + 19.261809, + 19.265936, + 19.269812, + 19.273437, + 19.276808, + 19.279927, + 19.282794, + 19.28541, + 19.287776, + 19.289897, + 19.291775, + 19.293415, + 19.294822, + 19.296001, + 19.296958, + 19.297701, + 19.298237, + 19.298575, + 19.298722, + 19.298687, + 19.298482, + 19.298115, + 19.297596, + 19.296938, + 19.29615, + 19.295245, + 19.294234, + 19.293129, + 19.291941, + 19.290684, + 19.289368, + 19.288008, + 19.286614, + 19.285199, + 19.283776, + 19.282357, + 19.280953, + 19.279577, + 19.278241, + 19.276955, + 19.275733, + 19.274584, + 19.273521, + 19.272553, + 19.271691, + 19.270945, + 19.270325, + 19.269841, + 19.269501, + 19.269315, + 19.26929, + 19.269435, + 19.269757, + 19.270264, + 19.270961, + 19.271855, + 19.272953, + 19.274258, + 19.275776, + 19.277511, + 19.279466, + 19.281646, + 19.284052, + 19.286686, + 19.28955, + 19.292646, + 19.295973, + 19.299531, + 19.303319, + 19.307337, + 19.311581, + 19.316051, + 19.320742, + 19.32565, + 19.330772, + 19.336104, + 19.341638, + 19.34737, + 19.353294, + 19.359401, + 19.365685, + 19.372139, + 19.378752, + 19.385518, + 19.392425, + 19.399466, + 19.406629, + 19.413905, + 19.421283, + 19.428752, + 19.436301, + 19.443918, + 19.451593, + 19.459313, + 19.467067, + 19.474842, + 19.482628, + 19.490413, + 19.498184, + 19.50593, + 19.513641, + 19.521303, + 19.528907, + 19.536442, + 19.543896, + 19.551261, + 19.558525, + 19.56568, + 19.572717, + 19.579626, + 19.5864, + 19.593031, + 19.599511, + 19.605835, + 19.611996, + 19.617988, + 19.623806, + 19.629445, + 19.634902, + 19.640173, + 19.645256, + 19.650147, + 19.654847, + 19.659353, + 19.663666, + 19.667785, + 19.671713, + 19.675449, + 19.678997, + 19.682359, + 19.685538, + 19.688538, + 19.691363, + 19.694018, + 19.696508, + 19.698838, + 19.701015, + 19.703046, + 19.704938, + 19.706697, + 19.708331, + 19.709849, + 19.711258, + 19.712568, + 19.713787, + 19.714924, + 19.715988, + 19.716989, + 19.717937, + 19.71884, + 19.719709, + 19.720554, + 19.721383, + 19.722208, + 19.723038, + 19.723882, + 19.72475, + 19.725652, + 19.726597, + 19.727595, + 19.728653, + 19.729781, + 19.730988, + 19.732282, + 19.73367, + 19.73516, + 19.73676, + 19.738476, + 19.740316, + 19.742284, + 19.744387, + 19.74663, + 19.749018, + 19.751555, + 19.754244, + 19.75709, + 19.760096, + 19.763262, + 19.766592, + 19.770086, + 19.773745, + 19.777569, + 19.781558, + 19.785712, + 19.790028, + 19.794505, + 19.79914, + 19.80393, + 19.808872, + 19.813963, + 19.819197, + 19.82457, + 19.830076, + 19.835711, + 19.841467, + 19.847339, + 19.85332, + 19.859403, + 19.865581, + 19.871845, + 19.878189, + 19.884605, + 19.891083, + 19.897617, + 19.904197, + 19.910815, + 19.917464, + 19.924133, + 19.930815, + 19.937502, + 19.944185, + 19.950855, + 19.957505, + 19.964126, + 19.970711, + 19.977252, + 19.983741, + 19.990172, + 19.996537, + 20.00283, + 20.009044, + 20.015173, + 20.021212, + 20.027155, + 20.032997, + 20.038733, + 20.04436, + 20.049872, + 20.055267, + 20.060542, + 20.065693, + 20.070719, + 20.075616, + 20.080385, + 20.085024, + 20.089532, + 20.093908, + 20.098154, + 20.102269, + 20.106254, + 20.110111, + 20.113842, + 20.117448, + 20.120933, + 20.124298, + 20.127548, + 20.130685, + 20.133714, + 20.136639, + 20.139464, + 20.142195, + 20.144836, + 20.147393, + 20.149871, + 20.152277, + 20.154616, + 20.156896, + 20.159121, + 20.161299, + 20.163437, + 20.165542, + 20.16762, + 20.169679, + 20.171726, + 20.173768, + 20.175812, + 20.177866, + 20.179937, + 20.182031, + 20.184157, + 20.18632, + 20.188528, + 20.190788, + 20.193106, + 20.195488, + 20.197941, + 20.20047, + 20.203082, + 20.205782, + 20.208575, + 20.211467, + 20.214461, + 20.217562, + 20.220774, + 20.224102, + 20.227547, + 20.231114, + 20.234805, + 20.238623, + 20.242568, + 20.246643, + 20.25085, + 20.255188, + 20.259658, + 20.26426, + 20.268994, + 20.273859, + 20.278854, + 20.283977, + 20.289227, + 20.294602, + 20.300099, + 20.305714, + 20.311446, + 20.31729, + 20.323243, + 20.3293, + 20.335458, + 20.341711, + 20.348055, + 20.354484, + 20.360994, + 20.367578, + 20.374231, + 20.380947, + 20.38772, + 20.394544, + 20.401412, + 20.408318, + 20.415255, + 20.422217, + 20.429198, + 20.43619, + 20.443186, + 20.450181, + 20.457167, + 20.464137, + 20.471085, + 20.478005, + 20.48489, + 20.491733, + 20.498528, + 20.505269, + 20.511951, + 20.518566, + 20.52511, + 20.531577, + 20.537961, + 20.544258, + 20.550462, + 20.556569, + 20.562574, + 20.568474, + 20.574264, + 20.57994, + 20.5855, + 20.59094, + 20.596257, + 20.601448, + 20.606512, + 20.611447, + 20.61625, + 20.620921, + 20.625458, + 20.629861, + 20.634129, + 20.638262, + 20.642261, + 20.646124, + 20.649855, + 20.653453, + 20.656919, + 20.660256, + 20.663464, + 20.666547, + 20.669507, + 20.672346, + 20.675066, + 20.677672, + 20.680165, + 20.682551, + 20.684831, + 20.687011, + 20.689094, + 20.691085, + 20.692986, + 20.694804, + 20.696542, + 20.698206, + 20.699799, + 20.701326, + 20.702794, + 20.704205, + 20.705567, + 20.706882, + 20.708158, + 20.709398, + 20.710607, + 20.711792, + 20.712957, + 20.714106, + 20.715246, + 20.716382, + 20.717518, + 20.718659, + 20.71981, + 20.720977, + 20.722165, + 20.723377, + 20.72462, + 20.725897, + 20.727213, + 20.728573, + 20.729982, + 20.731444, + 20.732963, + 20.734543, + 20.736189, + 20.737905, + 20.739693, + 20.741559, + 20.743505, + 20.745536, + 20.747653, + 20.749861, + 20.752161, + 20.754558, + 20.757052, + 20.759646, + 20.762343, + 20.765142, + 20.768047, + 20.771058, + 20.774176, + 20.777401, + 20.780734, + 20.784174, + 20.787721, + 20.791374, + 20.795132, + 20.798994, + 20.802958, + 20.807022, + 20.811183, + 20.815438, + 20.819786, + 20.824221, + 20.828742, + 20.833343, + 20.83802, + 20.84277, + 20.847588, + 20.852468, + 20.857405, + 20.862394, + 20.86743, + 20.872507, + 20.87762, + 20.882762, + 20.887927, + 20.89311, + 20.898304, + 20.903503, + 20.908701, + 20.913893, + 20.919071, + 20.924231, + 20.929366, + 20.93447, + 20.939538, + 20.944564, + 20.949542, + 20.954468, + 20.959337, + 20.964142, + 20.968881, + 20.973547, + 20.978138, + 20.982648, + 20.987075, + 20.991415, + 20.995663, + 20.999818, + 21.003877, + 21.007836, + 21.011695, + 21.01545, + 21.019101, + 21.022646, + 21.026083, + 21.029412, + 21.032633, + 21.035746, + 21.038749, + 21.041644, + 21.044432, + 21.047112, + 21.049687, + 21.052158, + 21.054526, + 21.056793, + 21.058962, + 21.061035, + 21.063015, + 21.064904, + 21.066705, + 21.068423, + 21.07006, + 21.071621, + 21.073108, + 21.074528, + 21.075883, + 21.077179, + 21.07842, + 21.079612, + 21.080759, + 21.081866, + 21.082938, + 21.083982, + 21.085002, + 21.086004, + 21.086993, + 21.087975, + 21.088956, + 21.089941, + 21.090936, + 21.091945, + 21.092975, + 21.094031, + 21.095118, + 21.096241, + 21.097404, + 21.098614, + 21.099874, + 21.101189, + 21.102562, + 21.103999, + 21.105502, + 21.107075, + 21.108722, + 21.110445, + 21.112246, + 21.114129, + 21.116096, + 21.118147, + 21.120284, + 21.12251, + 21.124823, + 21.127226, + 21.129718, + 21.132299, + 21.134969, + 21.137726, + 21.140571, + 21.143502, + 21.146516, + 21.149613, + 21.152791, + 21.156046, + 21.159377, + 21.16278, + 21.166253, + 21.169793, + 21.173396, + 21.177058, + 21.180777, + 21.184547, + 21.188365, + 21.192228, + 21.19613, + 21.200067, + 21.204036, + 21.208031, + 21.212048, + 21.216083, + 21.220131, + 21.224187, + 21.228247, + 21.232306, + 21.23636, + 21.240405, + 21.244435, + 21.248447, + 21.252436, + 21.256397, + 21.260328, + 21.264223, + 21.268079, + 21.271892, + 21.275659, + 21.279375, + 21.283038, + 21.286644, + 21.29019, + 21.293674, + 21.297092, + 21.300442, + 21.303723, + 21.30693, + 21.310064, + 21.313122, + 21.316103, + 21.319005, + 21.321828, + 21.324571, + 21.327232, + 21.329813, + 21.332312, + 21.334731, + 21.337069, + 21.339326, + 21.341505, + 21.343606, + 21.34563, + 21.34758, + 21.349456, + 21.35126, + 21.352996, + 21.354665, + 21.35627, + 21.357814, + 21.3593, + 21.36073, + 21.362109, + 21.363439, + 21.364724, + 21.365968, + 21.367174, + 21.368347, + 21.36949, + 21.370607, + 21.371702, + 21.37278, + 21.373844, + 21.374898, + 21.375947, + 21.376994, + 21.378043, + 21.379098, + 21.380164, + 21.381243, + 21.38234, + 21.383458, + 21.384599, + 21.385769, + 21.386969, + 21.388203, + 21.389473, + 21.390783, + 21.392134, + 21.393528, + 21.394969, + 21.396458, + 21.397996, + 21.399585, + 21.401227, + 21.402923, + 21.404672, + 21.406477, + 21.408338, + 21.410255, + 21.412228, + 21.414257, + 21.416342, + 21.418483, + 21.420679, + 21.422929, + 21.425232, + 21.427588, + 21.429995, + 21.432451, + 21.434956, + 21.437507, + 21.440103, + 21.442743, + 21.445423, + 21.448142, + 21.450898, + 21.453689, + 21.456513, + 21.459366, + 21.462248, + 21.465154, + 21.468083, + 21.471033, + 21.474001, + 21.476983, + 21.479979, + 21.482985, + 21.485999, + 21.489018, + 21.492039, + 21.495062, + 21.498082, + 21.501098, + 21.504107, + 21.507107, + 21.510097, + 21.513073, + 21.516034, + 21.518979, + 21.521904, + 21.524809, + 21.527691, + 21.53055, + 21.533384, + 21.53619, + 21.538969, + 21.541719, + 21.544439, + 21.547129, + 21.549786, + 21.552411, + 21.555004, + 21.557563, + 21.560089, + 21.562581, + 21.56504, + 21.567465, + 21.569857, + 21.572216, + 21.574543, + 21.576838, + 21.579101, + 21.581335, + 21.583539, + 21.585715, + 21.587863, + 21.589986, + 21.592085, + 21.59416, + 21.596213, + 21.598247, + 21.600262, + 21.602261, + 21.604244, + 21.606215, + 21.608175, + 21.610126, + 21.612069, + 21.614007, + 21.615942, + 21.617876, + 21.619811, + 21.621748, + 21.623691, + 21.62564, + 21.627599, + 21.629568, + 21.63155, + 21.633547, + 21.635561, + 21.637593, + 21.639645, + 21.641719, + 21.643817, + 21.64594, + 21.648089, + 21.650267, + 21.652474, + 21.654712, + 21.656982, + 21.659286, + 21.661623, + 21.663995, + 21.666404, + 21.668849, + 21.671332, + 21.673853, + 21.676412, + 21.67901, + 21.681648, + 21.684325, + 21.687041, + 21.689797, + 21.692592, + 21.695427, + 21.6983, + 21.701212, + 21.704162, + 21.707149, + 21.710173, + 21.713232, + 21.716327, + 21.719456, + 21.722617, + 21.72581, + 21.729034, + 21.732286, + 21.735566, + 21.738872, + 21.742203, + 21.745556, + 21.74893, + 21.752324, + 21.755734, + 21.75916, + 21.762598, + 21.766048, + 21.769506, + 21.772971, + 21.77644, + 21.779911, + 21.783382, + 21.78685, + 21.790313, + 21.793769, + 21.797214, + 21.800647, + 21.804065, + 21.807466, + 21.810846, + 21.814205, + 21.817539, + 21.820845, + 21.824122, + 21.827368, + 21.830579, + 21.833753, + 21.836889, + 21.839984, + 21.843036, + 21.846044, + 21.849004, + 21.851916, + 21.854778, + 21.857587, + 21.860344, + 21.863046, + 21.865692, + 21.868281, + 21.870812, + 21.873285, + 21.875699, + 21.878053, + 21.880348, + 21.882584, + 21.88476, + 21.886877, + 21.888936, + 21.890938, + 21.892884, + 21.894774, + 21.896611, + 21.898395, + 21.90013, + 21.901816, + 21.903456, + 21.905053, + 21.906608, + 21.908124, + 21.909605, + 21.911054, + 21.912472, + 21.913864, + 21.915232, + 21.91658, + 21.917911, + 21.919229, + 21.920536, + 21.921837, + 21.923135, + 21.924432, + 21.925733, + 21.92704, + 21.928358, + 21.929688, + 21.931034, + 21.9324, + 21.933787, + 21.935199, + 21.936638, + 21.938107, + 21.939608, + 21.941144, + 21.942716, + 21.944327, + 21.945978, + 21.947672, + 21.949409, + 21.951191, + 21.95302, + 21.954896, + 21.956821, + 21.958796, + 21.960821, + 21.962897, + 21.965025, + 21.967205, + 21.969437, + 21.971722, + 21.97406, + 21.976451, + 21.978895, + 21.981391, + 21.98394, + 21.986542, + 21.989195, + 21.9919, + 21.994656, + 21.997462, + 22.000317, + 22.003222, + 22.006174, + 22.009174, + 22.01222, + 22.015311, + 22.018446, + 22.021623, + 22.024842, + 22.028101, + 22.031398, + 22.034733, + 22.038103, + 22.041507, + 22.044944, + 22.048411, + 22.051906, + 22.055428, + 22.058975, + 22.062545, + 22.066136, + 22.069746, + 22.073372, + 22.077013, + 22.080666, + 22.08433, + 22.088002, + 22.09168, + 22.095361, + 22.099045, + 22.102729, + 22.10641, + 22.110086, + 22.113757, + 22.117419, + 22.121072, + 22.124713, + 22.12834, + 22.131953, + 22.135549, + 22.139128, + 22.142687, + 22.146227, + 22.149745, + 22.153241, + 22.156714, + 22.160164, + 22.163589, + 22.16699, + 22.170365, + 22.173715, + 22.17704, + 22.180339, + 22.183613, + 22.186861, + 22.190085, + 22.193284, + 22.196459, + 22.199609, + 22.202737, + 22.205842, + 22.208925, + 22.211987, + 22.215028, + 22.218049, + 22.221052, + 22.224036, + 22.227003, + 22.229953, + 22.232887, + 22.235806, + 22.238711, + 22.241603, + 22.244481, + 22.247348, + 22.250204, + 22.253048, + 22.255883, + 22.258708, + 22.261525, + 22.264333, + 22.267133, + 22.269926, + 22.272712, + 22.275492, + 22.278265, + 22.281033, + 22.283794, + 22.286551, + 22.289303, + 22.292049, + 22.294791, + 22.297529, + 22.300262, + 22.302991, + 22.305715, + 22.308436, + 22.311152, + 22.313864, + 22.316572, + 22.319275, + 22.321974, + 22.324669, + 22.32736, + 22.330046, + 22.332727, + 22.335403, + 22.338074, + 22.340739, + 22.343399, + 22.346053, + 22.3487, + 22.351341, + 22.353975, + 22.356602, + 22.35922, + 22.361831, + 22.364433, + 22.367026, + 22.369609, + 22.372182, + 22.374745, + 22.377296, + 22.379836, + 22.382363, + 22.384877, + 22.387378, + 22.389865, + 22.392337, + 22.394794, + 22.397235, + 22.39966, + 22.402068, + 22.404459, + 22.406833, + 22.409188, + 22.411525, + 22.413842, + 22.416141, + 22.41842, + 22.42068, + 22.422919, + 22.425139, + 22.427338, + 22.429518, + 22.431677, + 22.433816, + 22.435936, + 22.438035, + 22.440116, + 22.442177, + 22.444219, + 22.446243, + 22.44825, + 22.450238, + 22.45221, + 22.454166, + 22.456106, + 22.458031, + 22.459941, + 22.461838, + 22.463722, + 22.465594, + 22.467455, + 22.469304, + 22.471144, + 22.472975, + 22.474798, + 22.476613, + 22.478421, + 22.480223, + 22.48202, + 22.483813, + 22.485602, + 22.487388, + 22.489171, + 22.490953, + 22.492735, + 22.494515, + 22.496297, + 22.498079, + 22.499862, + 22.501648, + 22.503436, + 22.505227, + 22.507022, + 22.508821, + 22.510624, + 22.512433, + 22.514246, + 22.516065, + 22.51789, + 22.519721, + 22.521559, + 22.523404, + 22.525255, + 22.527114, + 22.52898, + 22.530854, + 22.532736, + 22.534626, + 22.536524, + 22.53843, + 22.540345, + 22.542267, + 22.544198, + 22.546137, + 22.548084, + 22.55004, + 22.552003, + 22.553975, + 22.555954, + 22.55794, + 22.559934, + 22.561935, + 22.563943, + 22.565957, + 22.567977, + 22.570003, + 22.572034, + 22.57407, + 22.576111, + 22.578155, + 22.580203, + 22.582253, + 22.584306, + 22.58636, + 22.588415, + 22.590471, + 22.592526, + 22.59458, + 22.596632, + 22.598682, + 22.600728, + 22.602771, + 22.604808, + 22.606841, + 22.608867, + 22.610886, + 22.612897, + 22.6149, + 22.616894, + 22.618878, + 22.620851, + 22.622813, + 22.624763, + 22.6267, + 22.628625, + 22.630536, + 22.632432, + 22.634314, + 22.636181, + 22.638032, + 22.639867, + 22.641685, + 22.643487, + 22.645271, + 22.647038, + 22.648787, + 22.650519, + 22.652232, + 22.653927, + 22.655604, + 22.657262, + 22.658902, + 22.660524, + 22.662127, + 22.663711, + 22.665277, + 22.666825, + 22.668354, + 22.669865, + 22.671358, + 22.672833, + 22.67429, + 22.67573, + 22.677152, + 22.678557, + 22.679945, + 22.681317, + 22.682672, + 22.684011, + 22.685333, + 22.686641, + 22.687932, + 22.689209, + 22.690471, + 22.691719, + 22.692952, + 22.694172, + 22.695378, + 22.696571, + 22.697752, + 22.69892, + 22.700076, + 22.701221, + 22.702355, + 22.703478, + 22.70459, + 22.705693, + 22.706786, + 22.70787, + 22.708945, + 22.710012, + 22.711071, + 22.712123, + 22.713168, + 22.714206, + 22.715238, + 22.716264, + 22.717286, + 22.718302, + 22.719314, + 22.720321, + 22.721325, + 22.722326, + 22.723323, + 22.724318, + 22.725311, + 22.726301, + 22.72729, + 22.728278, + 22.729264, + 22.730249, + 22.731234, + 22.732218, + 22.733202, + 22.734185, + 22.735168, + 22.736151, + 22.737133, + 22.738116, + 22.739098, + 22.74008, + 22.741061, + 22.742042, + 22.743023, + 22.744002, + 22.744981, + 22.745959, + 22.746935, + 22.74791, + 22.748884, + 22.749855, + 22.750826, + 22.751794, + 22.75276, + 22.753725, + 22.754688, + 22.75565, + 22.75661, + 22.757568, + 22.758526, + 22.759484, + 22.760441, + 22.761399, + 22.762357, + 22.763318, + 22.76428, + 22.765246, + 22.766216, + 22.76719, + 22.76817, + 22.769156, + 22.77015, + 22.771153, + 22.772165, + 22.773188, + 22.774222, + 22.775269, + 22.776329, + 22.777403, + 22.778493, + 22.779599, + 22.780721, + 22.781861, + 22.783019, + 22.784195, + 22.78539, + 22.786604, + 22.787838, + 22.78909, + 22.790362, + 22.791653, + 22.792963, + 22.794291, + 22.795637, + 22.796999, + 22.798379, + 22.799773, + 22.801183, + 22.802605, + 22.80404, + 22.805486, + 22.806942, + 22.808406, + 22.809877, + 22.811354, + 22.812835, + 22.814318, + 22.815803, + 22.817287, + 22.81877, + 22.820249, + 22.821723, + 22.823191, + 22.824652, + 22.826104, + 22.827545, + 22.828976, + 22.830394, + 22.831799, + 22.833189, + 22.834564, + 22.835923, + 22.837266, + 22.838591, + 22.839899, + 22.841188, + 22.842459, + 22.84371, + 22.844943, + 22.846157, + 22.847352, + 22.848528, + 22.849685, + 22.850823, + 22.851944, + 22.853046, + 22.854131, + 22.855199, + 22.856251, + 22.857288, + 22.858309, + 22.859316, + 22.86031, + 22.861291, + 22.86226, + 22.863218, + 22.864167, + 22.865107, + 22.86604, + 22.866966, + 22.867886, + 22.868802, + 22.869716, + 22.870628, + 22.871539, + 22.872452, + 22.873367, + 22.874286, + 22.875211, + 22.876143, + 22.877084, + 22.878035, + 22.878997, + 22.879974, + 22.880966, + 22.881975, + 22.883003, + 22.884052, + 22.885123, + 22.886219, + 22.88734, + 22.88849, + 22.889669, + 22.89088, + 22.892124, + 22.893402, + 22.894718, + 22.896071, + 22.897464, + 22.898897, + 22.900374, + 22.901894, + 22.903459, + 22.905069, + 22.906727, + 22.908432, + 22.910186, + 22.911989, + 22.913842, + 22.915744, + 22.917696, + 22.919699, + 22.921752, + 22.923854, + 22.926006, + 22.928207, + 22.930456, + 22.932752, + 22.935095, + 22.937484, + 22.939916, + 22.942392, + 22.944909, + 22.947467, + 22.950063, + 22.952696, + 22.955363, + 22.958064, + 22.960796, + 22.963558, + 22.966346, + 22.96916, + 22.971997, + 22.974854, + 22.977731, + 22.980623, + 22.983531, + 22.986451, + 22.98938, + 22.992318, + 22.995262, + 22.99821, + 23.001159, + 23.004109, + 23.007056, + 23.009999, + 23.012937, + 23.015867, + 23.018787, + 23.021696, + 23.024593, + 23.027475, + 23.030342, + 23.033191, + 23.036022, + 23.038833, + 23.041623, + 23.044391, + 23.047135, + 23.049855, + 23.05255, + 23.055218, + 23.057859, + 23.060473, + 23.063057, + 23.065613, + 23.068138, + 23.070633, + 23.073097, + 23.07553, + 23.077932, + 23.080302, + 23.082639, + 23.084945, + 23.087218, + 23.089459, + 23.091668, + 23.093845, + 23.09599, + 23.098104, + 23.100186, + 23.102238, + 23.104259, + 23.10625, + 23.108212, + 23.110146, + 23.112051, + 23.113929, + 23.115781, + 23.117607, + 23.119408, + 23.121186, + 23.122941, + 23.124673, + 23.126385, + 23.128077, + 23.12975, + 23.131406, + 23.133045, + 23.134668, + 23.136277, + 23.137873, + 23.139457, + 23.141029, + 23.142591, + 23.144144, + 23.14569, + 23.147228, + 23.14876, + 23.150287, + 23.15181, + 23.15333, + 23.154848, + 23.156363, + 23.157878, + 23.159393, + 23.160908, + 23.162425, + 23.163943, + 23.165463, + 23.166986, + 23.168513, + 23.170043, + 23.171578, + 23.173117, + 23.17466, + 23.176209, + 23.177763, + 23.179323, + 23.180889, + 23.18246, + 23.184038, + 23.185622, + 23.187213, + 23.188811, + 23.190415, + 23.192026, + 23.193644, + 23.19527, + 23.196903, + 23.198543, + 23.200191, + 23.201846, + 23.203509, + 23.20518, + 23.20686, + 23.208547, + 23.210243, + 23.211947, + 23.213659, + 23.215381, + 23.217111, + 23.21885, + 23.220598, + 23.222355, + 23.224122, + 23.225898, + 23.227684, + 23.22948, + 23.231285, + 23.2331, + 23.234924, + 23.236759, + 23.238603, + 23.240457, + 23.242321, + 23.244195, + 23.246079, + 23.247972, + 23.249875, + 23.251787, + 23.253709, + 23.255639, + 23.257579, + 23.259527, + 23.261485, + 23.26345, + 23.265424, + 23.267406, + 23.269395, + 23.271392, + 23.273396, + 23.275407, + 23.277425, + 23.27945, + 23.281481, + 23.283517, + 23.28556, + 23.287608, + 23.289661, + 23.291719, + 23.293781, + 23.295848, + 23.29792, + 23.299995, + 23.302073, + 23.304156, + 23.306241, + 23.308329, + 23.31042, + 23.312513, + 23.314608, + 23.316704, + 23.318802, + 23.320901, + 23.323001, + 23.325101, + 23.327201, + 23.3293, + 23.331398, + 23.333496, + 23.335591, + 23.337684, + 23.339775, + 23.341862, + 23.343946, + 23.346026, + 23.3481, + 23.35017, + 23.352233, + 23.35429, + 23.35634, + 23.358383, + 23.360417, + 23.362442, + 23.364457, + 23.366462, + 23.368457, + 23.37044, + 23.372411, + 23.374369, + 23.376314, + 23.378245, + 23.380161, + 23.382062, + 23.383948, + 23.385817, + 23.387669, + 23.389504, + 23.391321, + 23.393119, + 23.394899, + 23.396659, + 23.398399, + 23.400118, + 23.401817, + 23.403494, + 23.40515, + 23.406784, + 23.408396, + 23.409985, + 23.411551, + 23.413093, + 23.414612, + 23.416107, + 23.417578, + 23.419025, + 23.420447, + 23.421844, + 23.423216, + 23.424563, + 23.425884, + 23.427179, + 23.428448, + 23.429691, + 23.430907, + 23.432097, + 23.433259, + 23.434394, + 23.435502, + 23.436581, + 23.437632, + 23.438655, + 23.439649, + 23.440614, + 23.44155, + 23.442457, + 23.443335, + 23.444182, + 23.445001, + 23.445789, + 23.446548, + 23.447278, + 23.447978, + 23.44865, + 23.449293, + 23.449908, + 23.450496, + 23.451057, + 23.451592, + 23.452102, + 23.452587, + 23.45305, + 23.453492, + 23.453913, + 23.454315, + 23.4547, + 23.455069, + 23.455424, + 23.455768, + 23.456101, + 23.456426, + 23.456744, + 23.457059, + 23.457371, + 23.457684, + 23.457998, + 23.458317, + 23.458642, + 23.458975, + 23.459318, + 23.459674, + 23.460043, + 23.460428, + 23.46083, + 23.461251, + 23.461693, + 23.462156, + 23.462641, + 23.463151, + 23.463685, + 23.464244, + 23.46483, + 23.465442, + 23.466081, + 23.466747, + 23.46744, + 23.46816, + 23.468907, + 23.46968, + 23.47048, + 23.471305, + 23.472155, + 23.473029, + 23.473926, + 23.474846, + 23.475788, + 23.47675, + 23.477731, + 23.478731, + 23.479748, + 23.480781, + 23.481829, + 23.48289, + 23.483965, + 23.48505, + 23.486147, + 23.487252, + 23.488365, + 23.489485, + 23.490612, + 23.491743, + 23.492878, + 23.494015, + 23.495155, + 23.496296, + 23.497437, + 23.498577, + 23.499715, + 23.500851, + 23.501984, + 23.503113, + 23.504237, + 23.505355, + 23.506468, + 23.507573, + 23.508671, + 23.50976, + 23.51084, + 23.511911, + 23.512971, + 23.51402, + 23.515058, + 23.516084, + 23.517097, + 23.518096, + 23.519082, + 23.520053, + 23.52101, + 23.521951, + 23.522877, + 23.523787, + 23.524681, + 23.525559, + 23.52642, + 23.527264, + 23.528091, + 23.528902, + 23.529697, + 23.530475, + 23.531238, + 23.531984, + 23.532716, + 23.533433, + 23.534136, + 23.534825, + 23.535503, + 23.536168, + 23.536823, + 23.537468, + 23.538105, + 23.538734, + 23.539357, + 23.539975, + 23.540589, + 23.5412, + 23.54181, + 23.542421, + 23.543033, + 23.543647, + 23.544266, + 23.54489, + 23.545521, + 23.54616, + 23.546807, + 23.547465, + 23.548134, + 23.548815, + 23.54951, + 23.550218, + 23.550942, + 23.551681, + 23.552436, + 23.553207, + 23.553996, + 23.554802, + 23.555626, + 23.556467, + 23.557327, + 23.558204, + 23.5591, + 23.560013, + 23.560943, + 23.561891, + 23.562856, + 23.563837, + 23.564835, + 23.565847, + 23.566875, + 23.567917, + 23.568973, + 23.570043, + 23.571124, + 23.572218, + 23.573323, + 23.574438, + 23.575563, + 23.576698, + 23.577841, + 23.578991, + 23.580149, + 23.581314, + 23.582484, + 23.58366, + 23.58484, + 23.586025, + 23.587213, + 23.588404, + 23.589598, + 23.590794, + 23.591992, + 23.59319, + 23.59439, + 23.595589, + 23.596789, + 23.597987, + 23.599185, + 23.600381, + 23.601576, + 23.602768, + 23.603958, + 23.605145, + 23.606329, + 23.607509, + 23.608685, + 23.609857, + 23.611024, + 23.612187, + 23.613345, + 23.614497, + 23.615643, + 23.616784, + 23.617919, + 23.619047, + 23.620169, + 23.621284, + 23.622393, + 23.623495, + 23.624591, + 23.625679, + 23.626761, + 23.627837, + 23.628905, + 23.629968, + 23.631024, + 23.632074, + 23.633119, + 23.634158, + 23.635192, + 23.636221, + 23.637246, + 23.638267, + 23.639284, + 23.640299, + 23.641311, + 23.642321, + 23.64333, + 23.644338, + 23.645346, + 23.646354, + 23.647363, + 23.648373, + 23.649386, + 23.650401, + 23.651418, + 23.65244, + 23.653465, + 23.654494, + 23.655529, + 23.656568, + 23.657613, + 23.658664, + 23.65972, + 23.660783, + 23.661852, + 23.662928, + 23.66401, + 23.665098, + 23.666193, + 23.667295, + 23.668403, + 23.669517, + 23.670637, + 23.671763, + 23.672895, + 23.674032, + 23.675174, + 23.67632, + 23.67747, + 23.678625, + 23.679782, + 23.680943, + 23.682106, + 23.683272, + 23.684439, + 23.685607, + 23.686776, + 23.687945, + 23.689113, + 23.690281, + 23.691448, + 23.692614, + 23.693777, + 23.694937, + 23.696095, + 23.697249, + 23.6984, + 23.699546, + 23.700687, + 23.701824, + 23.702955, + 23.704081, + 23.7052, + 23.706313, + 23.707419, + 23.708519, + 23.70961, + 23.710695, + 23.711771, + 23.712839, + 23.713898, + 23.714949, + 23.715991, + 23.717024, + 23.718047, + 23.719061, + 23.720065, + 23.721059, + 23.722042, + 23.723016, + 23.72398, + 23.724933, + 23.725875, + 23.726808, + 23.72773, + 23.728641, + 23.729543, + 23.730434, + 23.731315, + 23.732186, + 23.733048, + 23.7339, + 23.734743, + 23.735578, + 23.736405, + 23.737223, + 23.738034, + 23.738838, + 23.739636, + 23.740428, + 23.741215, + 23.741997, + 23.742776, + 23.743551, + 23.744324, + 23.745095, + 23.745865, + 23.746635, + 23.747405, + 23.748177, + 23.748951, + 23.749728, + 23.750509, + 23.751294, + 23.752085, + 23.752881, + 23.753685, + 23.754495, + 23.755314, + 23.756142, + 23.75698, + 23.757827, + 23.758686, + 23.759555, + 23.760437, + 23.76133, + 23.762237, + 23.763156, + 23.764089, + 23.765036, + 23.765997, + 23.766973, + 23.767962, + 23.768967, + 23.769987, + 23.771021, + 23.772071, + 23.773135, + 23.774215, + 23.775309, + 23.776419, + 23.777543, + 23.778681, + 23.779835, + 23.781002, + 23.782183, + 23.783378, + 23.784587, + 23.785808, + 23.787042, + 23.788289, + 23.789547, + 23.790817, + 23.792098, + 23.79339, + 23.794692, + 23.796004, + 23.797325, + 23.798655, + 23.799993, + 23.801339, + 23.802692, + 23.804051, + 23.805416, + 23.806787, + 23.808163, + 23.809542, + 23.810925, + 23.81231, + 23.813698, + 23.815087, + 23.816476, + 23.817864, + 23.819252, + 23.820638, + 23.82202, + 23.823399, + 23.824774, + 23.826143, + 23.827506, + 23.828862, + 23.830211, + 23.83155, + 23.832881, + 23.834201, + 23.835511, + 23.83681, + 23.838097, + 23.839371, + 23.840634, + 23.841883, + 23.84312, + 23.844343, + 23.845553, + 23.84675, + 23.847935, + 23.849106, + 23.850266, + 23.851414, + 23.85255, + 23.853677, + 23.854793, + 23.855901, + 23.857001, + 23.858094, + 23.859181, + 23.860263, + 23.861341, + 23.862417, + 23.863491, + 23.864565, + 23.86564, + 23.866717, + 23.867796, + 23.86888, + 23.869968, + 23.871063, + 23.872164, + 23.873273, + 23.874389, + 23.875514, + 23.876649, + 23.877792, + 23.878945, + 23.880108, + 23.88128, + 23.882462, + 23.883653, + 23.884852, + 23.88606, + 23.887275, + 23.888497, + 23.889725, + 23.890958, + 23.892196, + 23.893436, + 23.894678, + 23.895921, + 23.897163, + 23.898403, + 23.899641, + 23.900874, + 23.902101, + 23.903321, + 23.904533, + 23.905736, + 23.906928, + 23.908108, + 23.909275, + 23.910428, + 23.911565, + 23.912687, + 23.913792, + 23.914878, + 23.915947, + 23.916996, + 23.918025, + 23.919034, + 23.920022, + 23.920989, + 23.921934, + 23.922857, + 23.923759, + 23.924638, + 23.925495, + 23.92633, + 23.927144, + 23.927935, + 23.928705, + 23.929454, + 23.930182, + 23.930889, + 23.931575, + 23.932242, + 23.93289, + 23.933519, + 23.93413, + 23.934724, + 23.935301, + 23.935862, + 23.936407, + 23.936939, + 23.937456, + 23.937961, + 23.938455, + 23.938937, + 23.93941, + 23.939874, + 23.940331, + 23.940782, + 23.941228, + 23.94167, + 23.94211, + 23.942549, + 23.942989, + 23.94343, + 23.943875, + 23.944325, + 23.944782, + 23.945248, + 23.945723, + 23.94621, + 23.946711, + 23.947226, + 23.947759, + 23.94831, + 23.948881, + 23.949475, + 23.950092, + 23.950734, + 23.951403, + 23.9521, + 23.952827, + 23.953584, + 23.954375, + 23.955198, + 23.956056, + 23.95695, + 23.95788, + 23.958847, + 23.959853, + 23.960896, + 23.961978, + 23.963099, + 23.964259, + 23.965458, + 23.966696, + 23.967972, + 23.969287, + 23.970639, + 23.972027, + 23.973452, + 23.974911, + 23.976405, + 23.977931, + 23.979489, + 23.981076, + 23.982693, + 23.984336, + 23.986005, + 23.987698, + 23.989412, + 23.991147, + 23.9929, + 23.99467, + 23.996454, + 23.998251, + 24.000058, + 24.001875, + 24.003698, + 24.005527, + 24.007358, + 24.009191, + 24.011024, + 24.012854, + 24.01468, + 24.0165, + 24.018313, + 24.020117, + 24.021911, + 24.023692, + 24.02546, + 24.027213, + 24.02895, + 24.030669, + 24.03237, + 24.034051, + 24.035711, + 24.037349, + 24.038965, + 24.040556, + 24.042123, + 24.043665, + 24.045181, + 24.04667, + 24.048132, + 24.049565, + 24.050971, + 24.052348, + 24.053696, + 24.055014, + 24.056302, + 24.057561, + 24.05879, + 24.059988, + 24.061157, + 24.062295, + 24.063404, + 24.064482, + 24.065531, + 24.066551, + 24.067541, + 24.068503, + 24.069436, + 24.070342, + 24.071221, + 24.072072, + 24.072898, + 24.073699, + 24.074475, + 24.075228, + 24.075957, + 24.076665, + 24.077351, + 24.078018, + 24.078665, + 24.079294, + 24.079905, + 24.080501, + 24.081082, + 24.081648, + 24.082202, + 24.082744, + 24.083275, + 24.083797, + 24.084309, + 24.084814, + 24.085313, + 24.085806, + 24.086294, + 24.086778, + 24.087259, + 24.087739, + 24.088217, + 24.088694, + 24.089172, + 24.089651, + 24.090131, + 24.090613, + 24.091098, + 24.091585, + 24.092077, + 24.092572, + 24.093071, + 24.093575, + 24.094083, + 24.094597, + 24.095115, + 24.095638, + 24.096167, + 24.096701, + 24.097241, + 24.097786, + 24.098336, + 24.098891, + 24.099452, + 24.100018, + 24.100589, + 24.101165, + 24.101746, + 24.102332, + 24.102922, + 24.103517, + 24.104116, + 24.104719, + 24.105327, + 24.105939, + 24.106554, + 24.107174, + 24.107797, + 24.108423, + 24.109053, + 24.109686, + 24.110322, + 24.110961, + 24.111603, + 24.112247, + 24.112895, + 24.113544, + 24.114196, + 24.11485, + 24.115505, + 24.116163, + 24.116821, + 24.117481, + 24.118143, + 24.118805, + 24.119467, + 24.12013, + 24.120793, + 24.121456, + 24.122118, + 24.12278, + 24.12344, + 24.1241, + 24.124757, + 24.125413, + 24.126067, + 24.126718, + 24.127366, + 24.128011, + 24.128653, + 24.129291, + 24.129926, + 24.130556, + 24.131182, + 24.131804, + 24.132421, + 24.133032, + 24.133639, + 24.13424, + 24.134836, + 24.135427, + 24.136011, + 24.13659, + 24.137163, + 24.137729, + 24.13829, + 24.138844, + 24.139392, + 24.139934, + 24.140469, + 24.140998, + 24.14152, + 24.142035, + 24.142544, + 24.143046, + 24.143541, + 24.14403, + 24.144511, + 24.144985, + 24.145452, + 24.145912, + 24.146364, + 24.146809, + 24.147246, + 24.147675, + 24.148096, + 24.148509, + 24.148913, + 24.149309, + 24.149696, + 24.150075, + 24.150444, + 24.150804, + 24.151155, + 24.151495, + 24.151826, + 24.152147, + 24.152458, + 24.152759, + 24.153049, + 24.153328, + 24.153597, + 24.153855, + 24.154102, + 24.154338, + 24.154562, + 24.154776, + 24.154979, + 24.155171, + 24.155351, + 24.155521, + 24.15568, + 24.155828, + 24.155966, + 24.156093, + 24.156209, + 24.156316, + 24.156413, + 24.1565, + 24.156577, + 24.156646, + 24.156706, + 24.156757, + 24.156799, + 24.156834, + 24.156861, + 24.15688, + 24.156892, + 24.156897, + 24.156895, + 24.156887, + 24.156872, + 24.156852, + 24.156825, + 24.156793, + 24.156755, + 24.156711, + 24.156663, + 24.156609, + 24.156551, + 24.156488, + 24.156421, + 24.15635, + 24.156275, + 24.156197, + 24.156116, + 24.156033, + 24.155947, + 24.15586, + 24.155772, + 24.155685, + 24.155598, + 24.155512, + 24.155429, + 24.15535, + 24.155275, + 24.155206, + 24.155144, + 24.155091, + 24.155047, + 24.155015, + 24.154995, + 24.154989, + 24.154998, + 24.155025, + 24.155071, + 24.155137, + 24.155225, + 24.155336, + 24.155471, + 24.155634, + 24.155823, + 24.156041, + 24.15629, + 24.156569, + 24.156881, + 24.157225, + 24.157603, + 24.158015, + 24.158461, + 24.158943, + 24.15946, + 24.160011, + 24.160598, + 24.161219, + 24.161874, + 24.162563, + 24.163285, + 24.164039, + 24.164823, + 24.165637, + 24.16648, + 24.16735, + 24.168245, + 24.169165, + 24.170107, + 24.17107, + 24.172052, + 24.173051, + 24.174066, + 24.175095, + 24.176135, + 24.177185, + 24.178244, + 24.179308, + 24.180378, + 24.18145, + 24.182523, + 24.183596, + 24.184667, + 24.185734, + 24.186796, + 24.187851, + 24.188899, + 24.189938, + 24.190966, + 24.191984, + 24.192989, + 24.19398, + 24.194957, + 24.195919, + 24.196866, + 24.197796, + 24.198708, + 24.199603, + 24.20048, + 24.201338, + 24.202177, + 24.202996, + 24.203795, + 24.204575, + 24.205333, + 24.206071, + 24.206788, + 24.207485, + 24.20816, + 24.208814, + 24.209447, + 24.210059, + 24.210649, + 24.211219, + 24.211768, + 24.212297, + 24.212805, + 24.213293, + 24.213762, + 24.214211, + 24.214642, + 24.215054, + 24.215449, + 24.215827, + 24.216189, + 24.216536, + 24.216868, + 24.217187, + 24.217494, + 24.217789, + 24.218074, + 24.218351, + 24.21862, + 24.218882, + 24.21914, + 24.219395, + 24.219647, + 24.219899, + 24.220152, + 24.220408, + 24.220668, + 24.220934, + 24.221206, + 24.221488, + 24.221779, + 24.222082, + 24.222398, + 24.222729, + 24.223075, + 24.223437, + 24.223818, + 24.224218, + 24.224637, + 24.225078, + 24.225539, + 24.226024, + 24.226531, + 24.227061, + 24.227615, + 24.228193, + 24.228795, + 24.229421, + 24.230071, + 24.230746, + 24.231444, + 24.232166, + 24.232911, + 24.233678, + 24.234468, + 24.235279, + 24.236111, + 24.236963, + 24.237835, + 24.238725, + 24.239634, + 24.240559, + 24.2415, + 24.242457, + 24.243428, + 24.244412, + 24.24541, + 24.246419, + 24.247439, + 24.24847, + 24.24951, + 24.250558, + 24.251615, + 24.252679, + 24.25375, + 24.254826, + 24.255909, + 24.256996, + 24.258087, + 24.259183, + 24.260282, + 24.261384, + 24.262488, + 24.263596, + 24.264705, + 24.265816, + 24.266929, + 24.268043, + 24.269158, + 24.270275, + 24.271392, + 24.272509, + 24.273627, + 24.274746, + 24.275864, + 24.276983, + 24.278102, + 24.279221, + 24.28034, + 24.281459, + 24.282578, + 24.283697, + 24.284815, + 24.285934, + 24.287052, + 24.28817, + 24.289288, + 24.290406, + 24.291525, + 24.292643, + 24.293762, + 24.294881, + 24.296002, + 24.297123, + 24.298245, + 24.299368, + 24.300493, + 24.30162, + 24.302748, + 24.30388, + 24.305013, + 24.30615, + 24.30729, + 24.308434, + 24.309582, + 24.310734, + 24.311891, + 24.313053, + 24.31422, + 24.315393, + 24.316571, + 24.317756, + 24.318948, + 24.320146, + 24.32135, + 24.322562, + 24.323781, + 24.325007, + 24.326241, + 24.327481, + 24.328729, + 24.329984, + 24.331246, + 24.332515, + 24.333791, + 24.335072, + 24.33636, + 24.337653, + 24.338952, + 24.340255, + 24.341563, + 24.342874, + 24.344188, + 24.345505, + 24.346824, + 24.348144, + 24.349465, + 24.350785, + 24.352105, + 24.353423, + 24.354739, + 24.356053, + 24.357362, + 24.358667, + 24.359967, + 24.36126, + 24.362548, + 24.363828, + 24.3651, + 24.366363, + 24.367617, + 24.368862, + 24.370096, + 24.371318, + 24.372529, + 24.373728, + 24.374915, + 24.376088, + 24.377248, + 24.378393, + 24.379524, + 24.380641, + 24.381742, + 24.382827, + 24.383897, + 24.38495, + 24.385987, + 24.387007, + 24.38801, + 24.388995, + 24.389963, + 24.390913, + 24.391846, + 24.392759, + 24.393655, + 24.394531, + 24.395389, + 24.396228, + 24.397048, + 24.397848, + 24.398629, + 24.399391, + 24.400133, + 24.400856, + 24.40156, + 24.402243, + 24.402908, + 24.403553, + 24.404179, + 24.404785, + 24.405373, + 24.405942, + 24.406493, + 24.407025, + 24.407539, + 24.408036, + 24.408515, + 24.408978, + 24.409424, + 24.409854, + 24.410269, + 24.410669, + 24.411055, + 24.411427, + 24.411786, + 24.412132, + 24.412467, + 24.41279, + 24.413103, + 24.413406, + 24.4137, + 24.413985, + 24.414263, + 24.414533, + 24.414797, + 24.415055, + 24.415309, + 24.415557, + 24.415802, + 24.416044, + 24.416283, + 24.41652, + 24.416756, + 24.41699, + 24.417224, + 24.417458, + 24.417692, + 24.417928, + 24.418164, + 24.418402, + 24.418641, + 24.418883, + 24.419128, + 24.419375, + 24.419624, + 24.419877, + 24.420133, + 24.420392, + 24.420655, + 24.420921, + 24.42119, + 24.421463, + 24.42174, + 24.42202, + 24.422303, + 24.42259, + 24.422881, + 24.423174, + 24.423471, + 24.42377, + 24.424072, + 24.424377, + 24.424685, + 24.424995, + 24.425307, + 24.425621, + 24.425937, + 24.426254, + 24.426573, + 24.426893, + 24.427213, + 24.427534, + 24.427854, + 24.428175, + 24.428495, + 24.428814, + 24.429131, + 24.429446, + 24.429759, + 24.430069, + 24.430376, + 24.430679, + 24.430977, + 24.43127, + 24.431558, + 24.43184, + 24.432115, + 24.432382, + 24.432643, + 24.432895, + 24.433138, + 24.433373, + 24.433598, + 24.433814, + 24.43402, + 24.434216, + 24.434402, + 24.434578, + 24.434745, + 24.434902, + 24.435049, + 24.435188, + 24.435319, + 24.435442, + 24.435557, + 24.435667, + 24.435771, + 24.43587, + 24.435966, + 24.43606, + 24.436153, + 24.436245, + 24.436339, + 24.436436, + 24.436536, + 24.436642, + 24.436754, + 24.436873, + 24.437002, + 24.437141, + 24.437291, + 24.437453, + 24.437629, + 24.437819, + 24.438024, + 24.438244, + 24.438481, + 24.438735, + 24.439006, + 24.439295, + 24.439601, + 24.439924, + 24.440265, + 24.440623, + 24.440997, + 24.441387, + 24.441793, + 24.442213, + 24.442647, + 24.443094, + 24.443553, + 24.444022, + 24.444501, + 24.444988, + 24.445482, + 24.445981, + 24.446485, + 24.446991, + 24.447499, + 24.448007, + 24.448514, + 24.449017, + 24.449517, + 24.450012, + 24.4505, + 24.450981, + 24.451453, + 24.451915, + 24.452366, + 24.452806, + 24.453233, + 24.453646, + 24.454045, + 24.45443, + 24.454799, + 24.455152, + 24.455489, + 24.455809, + 24.456112, + 24.456398, + 24.456667, + 24.456917, + 24.45715, + 24.457365, + 24.457563, + 24.457743, + 24.457905, + 24.458049, + 24.458176, + 24.458286, + 24.458379, + 24.458455, + 24.458515, + 24.458559, + 24.458587, + 24.4586, + 24.458598, + 24.458581, + 24.458551, + 24.458506, + 24.458449, + 24.45838, + 24.458299, + 24.458207, + 24.458105, + 24.457994, + 24.457874, + 24.457747, + 24.457612, + 24.457473, + 24.457328, + 24.45718, + 24.45703, + 24.456879, + 24.456728, + 24.456579, + 24.456433, + 24.456291, + 24.456154, + 24.456025, + 24.455904, + 24.455794, + 24.455695, + 24.45561, + 24.455538, + 24.455483, + 24.455446, + 24.455427, + 24.455428, + 24.455451, + 24.455496, + 24.455565, + 24.455659, + 24.455779, + 24.455925, + 24.456099, + 24.456301, + 24.456532, + 24.456791, + 24.457081, + 24.4574, + 24.457748, + 24.458127, + 24.458535, + 24.458972, + 24.459439, + 24.459933, + 24.460456, + 24.461005, + 24.461581, + 24.462182, + 24.462807, + 24.463455, + 24.464125, + 24.464815, + 24.465525, + 24.466253, + 24.466997, + 24.467755, + 24.468528, + 24.469312, + 24.470106, + 24.47091, + 24.47172, + 24.472536, + 24.473356, + 24.474179, + 24.475002, + 24.475825, + 24.476646, + 24.477464, + 24.478277, + 24.479084, + 24.479884, + 24.480675, + 24.481457, + 24.482228, + 24.482987, + 24.483733, + 24.484465, + 24.485183, + 24.485885, + 24.486572, + 24.487241, + 24.487893, + 24.488526, + 24.489141, + 24.489737, + 24.490314, + 24.49087, + 24.491406, + 24.491922, + 24.492417, + 24.492892, + 24.493345, + 24.493778, + 24.49419, + 24.494581, + 24.494952, + 24.495302, + 24.495631, + 24.495941, + 24.496231, + 24.496502, + 24.496754, + 24.496987, + 24.497203, + 24.497402, + 24.497585, + 24.497751, + 24.497903, + 24.49804, + 24.498164, + 24.498276, + 24.498377, + 24.498466, + 24.498547, + 24.498619, + 24.498684, + 24.498743, + 24.498797, + 24.498847, + 24.498895, + 24.498942, + 24.498988, + 24.499036, + 24.499086, + 24.49914, + 24.499199, + 24.499264, + 24.499336, + 24.499416, + 24.499507, + 24.499607, + 24.49972, + 24.499845, + 24.499984, + 24.500137, + 24.500306, + 24.50049, + 24.500692, + 24.500912, + 24.501149, + 24.501406, + 24.501681, + 24.501976, + 24.502291, + 24.502626, + 24.502982, + 24.503359, + 24.503756, + 24.504173, + 24.504612, + 24.505071, + 24.505551, + 24.506051, + 24.506572, + 24.507112, + 24.507672, + 24.508251, + 24.508849, + 24.509465, + 24.5101, + 24.510752, + 24.511422, + 24.512109, + 24.512811, + 24.51353, + 24.514263, + 24.515012, + 24.515774, + 24.51655, + 24.51734, + 24.518142, + 24.518955, + 24.519781, + 24.520617, + 24.521463, + 24.52232, + 24.523185, + 24.524059, + 24.524941, + 24.525831, + 24.526727, + 24.52763, + 24.528538, + 24.529452, + 24.53037, + 24.531292, + 24.532217, + 24.533145, + 24.534074, + 24.535006, + 24.535938, + 24.53687, + 24.537801, + 24.538732, + 24.539661, + 24.540587, + 24.54151, + 24.54243, + 24.543346, + 24.544257, + 24.545163, + 24.546062, + 24.546956, + 24.547842, + 24.548721, + 24.549593, + 24.550456, + 24.55131, + 24.552155, + 24.552991, + 24.553816, + 24.554632, + 24.555437, + 24.556232, + 24.557016, + 24.557789, + 24.55855, + 24.5593, + 24.560039, + 24.560766, + 24.561481, + 24.562185, + 24.562877, + 24.563557, + 24.564225, + 24.564881, + 24.565526, + 24.566158, + 24.566779, + 24.567388, + 24.567986, + 24.568571, + 24.569145, + 24.569707, + 24.570257, + 24.570796, + 24.571322, + 24.571837, + 24.572341, + 24.572832, + 24.573311, + 24.573779, + 24.574234, + 24.574677, + 24.575108, + 24.575526, + 24.575933, + 24.576326, + 24.576707, + 24.577075, + 24.57743, + 24.577772, + 24.5781, + 24.578415, + 24.578717, + 24.579005 + ], + "yaxis": "y3" + }, + { + "mode": "lines", + "name": " GenPwr", + "type": "scatter", + "xaxis": "x4", + "y": [ + 1181.458304, + 1175.209399, + 1169.102789, + 1163.136929, + 1157.347729, + 1151.759401, + 1146.393857, + 1141.270585, + 1136.406538, + 1131.816095, + 1127.511048, + 1123.500612, + 1119.791471, + 1116.387844, + 1113.291583, + 1110.502283, + 1108.017425, + 1105.832531, + 1103.941331, + 1102.335953, + 1101.007116, + 1099.944338, + 1099.136144, + 1098.570282, + 1098.233941, + 1098.11396, + 1098.19704, + 1098.469947, + 1098.919702, + 1099.533759, + 1100.300173, + 1101.207745, + 1102.246152, + 1103.406053, + 1104.679174, + 1106.058372, + 1107.53767, + 1109.112273, + 1110.778554, + 1112.53402, + 1114.377253, + 1116.307833, + 1118.326239, + 1120.433731, + 1122.632215, + 1124.924102, + 1127.312149, + 1129.799293, + 1132.388483, + 1135.082512, + 1137.88384, + 1140.794435, + 1143.815607, + 1146.947863, + 1150.190764, + 1153.542805, + 1157.001301, + 1160.562302, + 1164.220518, + 1167.969271, + 1171.800464, + 1175.70458, + 1179.670696, + 1183.686525, + 1187.738479, + 1191.811753, + 1195.890439, + 1199.957645, + 1203.995648, + 1207.986054, + 1211.909977, + 1215.74823, + 1219.481525, + 1223.090679, + 1226.556827, + 1229.86163, + 1232.987489, + 1235.917736, + 1238.636837, + 1241.130589, + 1243.386253, + 1245.392738, + 1247.140707, + 1248.622692, + 1249.833174, + 1250.768644, + 1251.42763, + 1251.810706, + 1251.920471, + 1251.761501, + 1251.340279, + 1250.665103, + 1249.745969, + 1248.59444, + 1247.223493, + 1245.647352, + 1243.88132, + 1241.941586, + 1239.845043, + 1237.609091, + 1235.251448, + 1232.789962, + 1230.242428, + 1227.626416, + 1224.959105, + 1222.257137, + 1219.536473, + 1216.812281, + 1214.098822, + 1211.409367, + 1208.75613, + 1206.150205, + 1203.601545, + 1201.118936, + 1198.710004, + 1196.381229, + 1194.13798, + 1191.984564, + 1189.924284, + 1187.959511, + 1186.091769, + 1184.321822, + 1182.64977, + 1181.075156, + 1179.597069, + 1178.214252, + 1176.925211, + 1175.728317, + 1174.621918, + 1173.604417, + 1172.674381, + 1171.830609, + 1171.07221, + 1170.398665, + 1169.809876, + 1169.306203, + 1168.888495, + 1168.558097, + 1168.316858, + 1168.167113, + 1168.111662, + 1168.153741, + 1168.296973, + 1168.545282, + 1168.902864, + 1169.37407, + 1169.963428, + 1170.675443, + 1171.514519, + 1172.484901, + 1173.590649, + 1174.835405, + 1176.222444, + 1177.754498, + 1179.43372, + 1181.261582, + 1183.23882, + 1185.365359, + 1187.640293, + 1190.061811, + 1192.627185, + 1195.332699, + 1198.17374, + 1201.144686, + 1204.238993, + 1207.449201, + 1210.766965, + 1214.1831, + 1217.687626, + 1221.269867, + 1224.918479, + 1228.621563, + 1232.366769, + 1236.141352, + 1239.932322, + 1243.726514, + 1247.510719, + 1251.271768, + 1254.99668, + 1258.672728, + 1262.287572, + 1265.829347, + 1269.286755, + 1272.649164, + 1275.906668, + 1279.050174, + 1282.071448, + 1284.963171, + 1287.718969, + 1290.333444, + 1292.802182, + 1295.121756, + 1297.289716, + 1299.304561, + 1301.165713, + 1302.873476, + 1304.428975, + 1305.834106, + 1307.091465, + 1308.204274, + 1309.176308, + 1310.01181, + 1310.715415, + 1311.292065, + 1311.746925, + 1312.08531, + 1312.312604, + 1312.434192, + 1312.455392, + 1312.381399, + 1312.217229, + 1311.967673, + 1311.637266, + 1311.230252, + 1310.750572, + 1310.201849, + 1309.587384, + 1308.91017, + 1308.172897, + 1307.37798, + 1306.527586, + 1305.623667, + 1304.667998, + 1303.662225, + 1302.607907, + 1301.506561, + 1300.359711, + 1299.168964, + 1297.936027, + 1296.662772, + 1295.351266, + 1294.003857, + 1292.623146, + 1291.212076, + 1289.773923, + 1288.312333, + 1286.831321, + 1285.335291, + 1283.829021, + 1282.317651, + 1280.806657, + 1279.301903, + 1277.809497, + 1276.33586, + 1274.887625, + 1273.471605, + 1272.094754, + 1270.764098, + 1269.486692, + 1268.269555, + 1267.119614, + 1266.043643, + 1265.048206, + 1264.139599, + 1263.323795, + 1262.606395, + 1261.992575, + 1261.487038, + 1261.093983, + 1260.817061, + 1260.65935, + 1260.623329, + 1260.710859, + 1260.923175, + 1261.260873, + 1261.723914, + 1262.311629, + 1263.022732, + 1263.855337, + 1264.806978, + 1265.874642, + 1267.054798, + 1268.343432, + 1269.736095, + 1271.227939, + 1272.813765, + 1274.488076, + 1276.245121, + 1278.078948, + 1279.983456, + 1281.952441, + 1283.979652, + 1286.058833, + 1288.183767, + 1290.348327, + 1292.546504, + 1294.772453, + 1297.020515, + 1299.285252, + 1301.561465, + 1303.844213, + 1306.128827, + 1308.410914, + 1310.686364, + 1312.951349, + 1315.202312, + 1317.435962, + 1319.649256, + 1321.839383, + 1324.003744, + 1326.139926, + 1328.245683, + 1330.3189, + 1332.357575, + 1334.359787, + 1336.323669, + 1338.247322, + 1340.128854, + 1341.966466, + 1343.758166, + 1345.502032, + 1347.19602, + 1348.838023, + 1350.425851, + 1351.957232, + 1353.429808, + 1354.841147, + 1356.18875, + 1357.470065, + 1358.682506, + 1359.823474, + 1360.890379, + 1361.880668, + 1362.791861, + 1363.621598, + 1364.367608, + 1365.027828, + 1365.60037, + 1366.083589, + 1366.476108, + 1366.776847, + 1366.985055, + 1367.100337, + 1367.122678, + 1367.052467, + 1366.890511, + 1366.638047, + 1366.296756, + 1365.868764, + 1365.356644, + 1364.76341, + 1364.092506, + 1363.347798, + 1362.533548, + 1361.654399, + 1360.715345, + 1359.7217, + 1358.679069, + 1357.593312, + 1356.470501, + 1355.316887, + 1354.138855, + 1352.942885, + 1351.735507, + 1350.523263, + 1349.312663, + 1348.110147, + 1346.922047, + 1345.754549, + 1344.613661, + 1343.50518, + 1342.434664, + 1341.407406, + 1340.428414, + 1339.50239, + 1338.633716, + 1337.826439, + 1337.084269, + 1336.410569, + 1335.808354, + 1335.280296, + 1334.828724, + 1334.455636, + 1334.162706, + 1333.951297, + 1333.822475, + 1333.777027, + 1333.815474, + 1333.938089, + 1334.144923, + 1334.435813, + 1334.810408, + 1335.268187, + 1335.808478, + 1336.430471, + 1337.133242, + 1337.915758, + 1338.776901, + 1339.715472, + 1340.73021, + 1341.819787, + 1342.982826, + 1344.217899, + 1345.523533, + 1346.89821, + 1348.340359, + 1349.84836, + 1351.420536, + 1353.055143, + 1354.750369, + 1356.50432, + 1358.315012, + 1360.180359, + 1362.098166, + 1364.066111, + 1366.081746, + 1368.142474, + 1370.245552, + 1372.388076, + 1374.566975, + 1376.779008, + 1379.02076, + 1381.288641, + 1383.578886, + 1385.887559, + 1388.210558, + 1390.543626, + 1392.882355, + 1395.222202, + 1397.55851, + 1399.886514, + 1402.201373, + 1404.498185, + 1406.772011, + 1409.017901, + 1411.230921, + 1413.406181, + 1415.538856, + 1417.62422, + 1419.657687, + 1421.634814, + 1423.551355, + 1425.403271, + 1427.186764, + 1428.8983, + 1430.53463, + 1432.092812, + 1433.570232, + 1434.964616, + 1436.274046, + 1437.49697, + 1438.632212, + 1439.678973, + 1440.636837, + 1441.505766, + 1442.286101, + 1442.978554, + 1443.584195, + 1444.104447, + 1444.541067, + 1444.89613, + 1445.172015, + 1445.371382, + 1445.497149, + 1445.552478, + 1445.540741, + 1445.465505, + 1445.330504, + 1445.139616, + 1444.896839, + 1444.606268, + 1444.272073, + 1443.898473, + 1443.489721, + 1443.050083, + 1442.583816, + 1442.095154, + 1441.588294, + 1441.067379, + 1440.53649, + 1439.999628, + 1439.460716, + 1438.923581, + 1438.391954, + 1437.869463, + 1437.359632, + 1436.865874, + 1436.391497, + 1435.939697, + 1435.51356, + 1435.116067, + 1434.750089, + 1434.418392, + 1434.123641, + 1433.868397, + 1433.655122, + 1433.486177, + 1433.363828, + 1433.290239, + 1433.26748, + 1433.297518, + 1433.382222, + 1433.523355, + 1433.722575, + 1433.98143, + 1434.301351, + 1434.683649, + 1435.129506, + 1435.639974, + 1436.21596, + 1436.85822, + 1437.567363, + 1438.343824, + 1439.187872, + 1440.099595, + 1441.078891, + 1442.125467, + 1443.238826, + 1444.418264, + 1445.662866, + 1446.9715, + 1448.342817, + 1449.775242, + 1451.266985, + 1452.81603, + 1454.420145, + 1456.076885, + 1457.783589, + 1459.537404, + 1461.335274, + 1463.173965, + 1465.050069, + 1466.960018, + 1468.900097, + 1470.866462, + 1472.855155, + 1474.86212, + 1476.883222, + 1478.914268, + 1480.951023, + 1482.989232, + 1485.024638, + 1487.053004, + 1489.070133, + 1491.071885, + 1493.054198, + 1495.013107, + 1496.94476, + 1498.845435, + 1500.711555, + 1502.539707, + 1504.326649, + 1506.069325, + 1507.764875, + 1509.410644, + 1511.004192, + 1512.543293, + 1514.025942, + 1515.450352, + 1516.814986, + 1518.11851, + 1519.359836, + 1520.538088, + 1521.652619, + 1522.702994, + 1523.688989, + 1524.610588, + 1525.467967, + 1526.261496, + 1526.991724, + 1527.659373, + 1528.265329, + 1528.810633, + 1529.296473, + 1529.724174, + 1530.095187, + 1530.411085, + 1530.673551, + 1530.884374, + 1531.045437, + 1531.158715, + 1531.226264, + 1531.250218, + 1531.232785, + 1531.176236, + 1531.082907, + 1530.95519, + 1530.795533, + 1530.606431, + 1530.39043, + 1530.150117, + 1529.88812, + 1529.607108, + 1529.309779, + 1528.998868, + 1528.677134, + 1528.347364, + 1528.012361, + 1527.674949, + 1527.337962, + 1527.004239, + 1526.676621, + 1526.357946, + 1526.051038, + 1525.758703, + 1525.483721, + 1525.22884, + 1524.996763, + 1524.790144, + 1524.611578, + 1524.46359, + 1524.348627, + 1524.269049, + 1524.227119, + 1524.224992, + 1524.264709, + 1524.348186, + 1524.477207, + 1524.653414, + 1524.878302, + 1525.153203, + 1525.479291, + 1525.857564, + 1526.288849, + 1526.773791, + 1527.312853, + 1527.906313, + 1528.55426, + 1529.256595, + 1530.013033, + 1530.823103, + 1531.686148, + 1532.601333, + 1533.567645, + 1534.5839, + 1535.648751, + 1536.760691, + 1537.918063, + 1539.119069, + 1540.361777, + 1541.64413, + 1542.96396, + 1544.318994, + 1545.706865, + 1547.125124, + 1548.571253, + 1550.042672, + 1551.53675, + 1553.050819, + 1554.582184, + 1556.12813, + 1557.685935, + 1559.252879, + 1560.826252, + 1562.403365, + 1563.981556, + 1565.558199, + 1567.13071, + 1568.696556, + 1570.253257, + 1571.798395, + 1573.329617, + 1574.84464, + 1576.341255, + 1577.817328, + 1579.270809, + 1580.699702, + 1582.102136, + 1583.476295, + 1584.820468, + 1586.133025, + 1587.412428, + 1588.657231, + 1589.866077, + 1591.037701, + 1592.170931, + 1593.264687, + 1594.317983, + 1595.329926, + 1596.299718, + 1597.226657, + 1598.110134, + 1598.949638, + 1599.744758, + 1600.495177, + 1601.20068, + 1601.861151, + 1602.476576, + 1603.047043, + 1603.572742, + 1604.053969, + 1604.491122, + 1604.884704, + 1605.235324, + 1605.543696, + 1605.810638, + 1606.037073, + 1606.224026, + 1606.372625, + 1606.484096, + 1606.559764, + 1606.601051, + 1606.609467, + 1606.586614, + 1606.534177, + 1606.45392, + 1606.347682, + 1606.217373, + 1606.064966, + 1605.892488, + 1605.702021, + 1605.495688, + 1605.27565, + 1605.044093, + 1604.803172, + 1604.555047, + 1604.302002, + 1604.046163, + 1603.789772, + 1603.534998, + 1603.284001, + 1603.038912, + 1602.801823, + 1602.574781, + 1602.359781, + 1602.158761, + 1601.973594, + 1601.80608, + 1601.657946, + 1601.530834, + 1601.426301, + 1601.345814, + 1601.290745, + 1601.262368, + 1601.261858, + 1601.290286, + 1601.348622, + 1601.437728, + 1601.558362, + 1601.711178, + 1601.896724, + 1602.115445, + 1602.367682, + 1602.653679, + 1602.973578, + 1603.327426, + 1603.715176, + 1604.136691, + 1604.591746, + 1605.08003, + 1605.601152, + 1606.154642, + 1606.739954, + 1607.356473, + 1608.003514, + 1608.680324, + 1609.386092, + 1610.119945, + 1610.880954, + 1611.668135, + 1612.480455, + 1613.316831, + 1614.176135, + 1615.057196, + 1615.958798, + 1616.879691, + 1617.818585, + 1618.774156, + 1619.745051, + 1620.729882, + 1621.727235, + 1622.735669, + 1623.753719, + 1624.779899, + 1625.812703, + 1626.850609, + 1627.892078, + 1628.935564, + 1629.979508, + 1631.022348, + 1632.062518, + 1633.098451, + 1634.128586, + 1635.151367, + 1636.16525, + 1637.168703, + 1638.160214, + 1639.138293, + 1640.101474, + 1641.048322, + 1641.977438, + 1642.887458, + 1643.777063, + 1644.644979, + 1645.489986, + 1646.310917, + 1647.106664, + 1647.876186, + 1648.618506, + 1649.332722, + 1650.018003, + 1650.673602, + 1651.298849, + 1651.893161, + 1652.456044, + 1652.987093, + 1653.485993, + 1653.952527, + 1654.386569, + 1654.788092, + 1655.157165, + 1655.493951, + 1655.798713, + 1656.071807, + 1656.313684, + 1656.524887, + 1656.70605, + 1656.857894, + 1656.981225, + 1657.076933, + 1657.145982, + 1657.189415, + 1657.208341, + 1657.203938, + 1657.177444, + 1657.130152, + 1657.063409, + 1656.978607, + 1656.87718, + 1656.760598, + 1656.630363, + 1656.488003, + 1656.335068, + 1656.173122, + 1656.003745, + 1655.82852, + 1655.649037, + 1655.466881, + 1655.283633, + 1655.100865, + 1654.920136, + 1654.742987, + 1654.570941, + 1654.405497, + 1654.248129, + 1654.100282, + 1653.963368, + 1653.838767, + 1653.72782, + 1653.631832, + 1653.552063, + 1653.489732, + 1653.446012, + 1653.422026, + 1653.41885, + 1653.437507, + 1653.478966, + 1653.54414, + 1653.633886, + 1653.749002, + 1653.890225, + 1654.058231, + 1654.253632, + 1654.476973, + 1654.728734, + 1655.009327, + 1655.319094, + 1655.658309, + 1656.027172, + 1656.425813, + 1656.854287, + 1657.312578, + 1657.800594, + 1658.31817, + 1658.865065, + 1659.440965, + 1660.045482, + 1660.678154, + 1661.338443, + 1662.025744, + 1662.739377, + 1663.478593, + 1664.242576, + 1665.030441, + 1665.841241, + 1666.673964, + 1667.527541, + 1668.400844, + 1669.292692, + 1670.201852, + 1671.127044, + 1672.066945, + 1673.020192, + 1673.985384, + 1674.961091, + 1675.945856, + 1676.938197, + 1677.936615, + 1678.9396, + 1679.945632, + 1680.953188, + 1681.960746, + 1682.966794, + 1683.969829, + 1684.968365, + 1685.96094, + 1686.946116, + 1687.922488, + 1688.888685, + 1689.84338, + 1690.785287, + 1691.713169, + 1692.625843, + 1693.52218, + 1694.401112, + 1695.261632, + 1696.102798, + 1696.923736, + 1697.723642, + 1698.501762, + 1699.257365, + 1699.98992, + 1700.698845, + 1701.383725, + 1702.044185, + 1702.679939, + 1703.29078, + 1703.876582, + 1704.437297, + 1704.972957, + 1705.483671, + 1705.969625, + 1706.431082, + 1706.868378, + 1707.28192, + 1707.672187, + 1708.039725, + 1708.385147, + 1708.709128, + 1709.012405, + 1709.295773, + 1709.560081, + 1709.806232, + 1710.035177, + 1710.247912, + 1710.445478, + 1710.628953, + 1710.799453, + 1710.958124, + 1711.106142, + 1711.244709, + 1711.375049, + 1711.498401, + 1711.616021, + 1711.729176, + 1711.839139, + 1711.947184, + 1712.05459, + 1712.162626, + 1712.272558, + 1712.385637, + 1712.5031, + 1712.626167, + 1712.756033, + 1712.89387, + 1713.04082, + 1713.197991, + 1713.366457, + 1713.547254, + 1713.741376, + 1713.949771, + 1714.173341, + 1714.412937, + 1714.669358, + 1714.943347, + 1715.23559, + 1715.546714, + 1715.877285, + 1716.227804, + 1716.59871, + 1716.990373, + 1717.4031, + 1717.837127, + 1718.292621, + 1718.769683, + 1719.268342, + 1719.788558, + 1720.330224, + 1720.893162, + 1721.477129, + 1722.081813, + 1722.706838, + 1723.351765, + 1724.016091, + 1724.699254, + 1725.400635, + 1726.119558, + 1726.855295, + 1727.607068, + 1728.374053, + 1729.15538, + 1729.950142, + 1730.757391, + 1731.576149, + 1732.405406, + 1733.244127, + 1734.091256, + 1734.945716, + 1735.80642, + 1736.672271, + 1737.542158, + 1738.414976, + 1739.289612, + 1740.164963, + 1741.039932, + 1741.913433, + 1742.784396, + 1743.651768, + 1744.51452, + 1745.371643, + 1746.222161, + 1747.065125, + 1747.899619, + 1748.724765, + 1749.539721, + 1750.343687, + 1751.135902, + 1751.915653, + 1752.68227, + 1753.435133, + 1754.173669, + 1754.897355, + 1755.60572, + 1756.298345, + 1756.974863, + 1757.634962, + 1758.278381, + 1758.904917, + 1759.514418, + 1760.106787, + 1760.681983, + 1761.240017, + 1761.780952, + 1762.304908, + 1762.812055, + 1763.302616, + 1763.776864, + 1764.235123, + 1764.677766, + 1765.105212, + 1765.517927, + 1765.916422, + 1766.30125, + 1766.673008, + 1767.032331, + 1767.379889, + 1767.716393, + 1768.042583, + 1768.359233, + 1768.667145, + 1768.967148, + 1769.260094, + 1769.546859, + 1769.828335, + 1770.105434, + 1770.379079, + 1770.650205, + 1770.919754, + 1771.188674, + 1771.457917, + 1771.728431, + 1772.001164, + 1772.277055, + 1772.557037, + 1772.842027, + 1773.132931, + 1773.430636, + 1773.736009, + 1774.049894, + 1774.37311, + 1774.706447, + 1775.050668, + 1775.4065, + 1775.774638, + 1776.155738, + 1776.55042, + 1776.959262, + 1777.382801, + 1777.821529, + 1778.275895, + 1778.7463, + 1779.233101, + 1779.736603, + 1780.257066, + 1780.794698, + 1781.34966, + 1781.922059, + 1782.511956, + 1783.119359, + 1783.74423, + 1784.386476, + 1785.045961, + 1785.722496, + 1786.415848, + 1787.125735, + 1787.85183, + 1788.593763, + 1789.351119, + 1790.123443, + 1790.910239, + 1791.710972, + 1792.52507, + 1793.351926, + 1794.190901, + 1795.041322, + 1795.902488, + 1796.773671, + 1797.654114, + 1798.543041, + 1799.439652, + 1800.343128, + 1801.252633, + 1802.167318, + 1803.086318, + 1804.008762, + 1804.933767, + 1805.860446, + 1806.78791, + 1807.715266, + 1808.641624, + 1809.566097, + 1810.487802, + 1811.405867, + 1812.319426, + 1813.227628, + 1814.129635, + 1815.024624, + 1815.911792, + 1816.790353, + 1817.659547, + 1818.518633, + 1819.366898, + 1820.203657, + 1821.02825, + 1821.840051, + 1822.638462, + 1823.42292, + 1824.192895, + 1824.947893, + 1825.687454, + 1826.411158, + 1827.11862, + 1827.809496, + 1828.483478, + 1829.140301, + 1829.779738, + 1830.401601, + 1831.005746, + 1831.592066, + 1832.160495, + 1832.711009, + 1833.243621, + 1833.758384, + 1834.255392, + 1834.734775, + 1835.196701, + 1835.641374, + 1836.069036, + 1836.47996, + 1836.874456, + 1837.252866, + 1837.615561, + 1837.962943, + 1838.295442, + 1838.613518, + 1838.917651, + 1839.20835, + 1839.486142, + 1839.751579, + 1840.005229, + 1840.247678, + 1840.47953, + 1840.7014, + 1840.913918, + 1841.117725, + 1841.313471, + 1841.501816, + 1841.683424, + 1841.858969, + 1842.029125, + 1842.194573, + 1842.355994, + 1842.51407, + 1842.669486, + 1842.822923, + 1842.975062, + 1843.126582, + 1843.278158, + 1843.430462, + 1843.584161, + 1843.739917, + 1843.898385, + 1844.060215, + 1844.226046, + 1844.396514, + 1844.57224, + 1844.75384, + 1844.941915, + 1845.137058, + 1845.339845, + 1845.55084, + 1845.770591, + 1845.999631, + 1846.238473, + 1846.487612, + 1846.747522, + 1847.018656, + 1847.301447, + 1847.596295, + 1847.903582, + 1848.223655, + 1848.556833, + 1848.903406, + 1849.263627, + 1849.637716, + 1850.025859, + 1850.428201, + 1850.844852, + 1851.275879, + 1851.721311, + 1852.181133, + 1852.655289, + 1853.14368, + 1853.646162, + 1854.162549, + 1854.69261, + 1855.236071, + 1855.792615, + 1856.361882, + 1856.943469, + 1857.536933, + 1858.141793, + 1858.757528, + 1859.383582, + 1860.019364, + 1860.66425, + 1861.317585, + 1861.978689, + 1862.646853, + 1863.321345, + 1864.001415, + 1864.686293, + 1865.375194, + 1866.067323, + 1866.761872, + 1867.45803, + 1868.15498, + 1868.851905, + 1869.54799, + 1870.242424, + 1870.934406, + 1871.62314, + 1872.307848, + 1872.987761, + 1873.662132, + 1874.330231, + 1874.991348, + 1875.644799, + 1876.289924, + 1876.92609, + 1877.552691, + 1878.169153, + 1878.774932, + 1879.369515, + 1879.952423, + 1880.523211, + 1881.081469, + 1881.626822, + 1882.158932, + 1882.677497, + 1883.182255, + 1883.67298, + 1884.149483, + 1884.611615, + 1885.059265, + 1885.492361, + 1885.910868, + 1886.314789, + 1886.704167, + 1887.079081, + 1887.439647, + 1887.78602, + 1888.118391, + 1888.436985, + 1888.742066, + 1889.033922, + 1889.312842, + 1889.57922, + 1889.833414, + 1890.075862, + 1890.307009, + 1890.527339, + 1890.737363, + 1890.937619, + 1891.128674, + 1891.311119, + 1891.485568, + 1891.652659, + 1891.813048, + 1891.967413, + 1892.116446, + 1892.260853, + 1892.401357, + 1892.538686, + 1892.673579, + 1892.806781, + 1892.93904, + 1893.071104, + 1893.203721, + 1893.337634, + 1893.473579, + 1893.612283, + 1893.754462, + 1893.900817, + 1894.052032, + 1894.208772, + 1894.37168, + 1894.541375, + 1894.71845, + 1894.903469, + 1895.096967, + 1895.299445, + 1895.511372, + 1895.733181, + 1895.965266, + 1896.207987, + 1896.461661, + 1896.726567, + 1897.002943, + 1897.290986, + 1897.590851, + 1897.902652, + 1898.226461, + 1898.562308, + 1898.910182, + 1899.270033, + 1899.641768, + 1900.025259, + 1900.420335, + 1900.826792, + 1901.244387, + 1901.672845, + 1902.111855, + 1902.561076, + 1903.020136, + 1903.488635, + 1903.966145, + 1904.452213, + 1904.946363, + 1905.448097, + 1905.956896, + 1906.472225, + 1906.993531, + 1907.520247, + 1908.051793, + 1908.58758, + 1909.127008, + 1909.669471, + 1910.214358, + 1910.761052, + 1911.308937, + 1911.857397, + 1912.405815, + 1912.953579, + 1913.500082, + 1914.044722, + 1914.586907, + 1915.126053, + 1915.661588, + 1916.192951, + 1916.719595, + 1917.24099, + 1917.75662, + 1918.265989, + 1918.768618, + 1919.264049, + 1919.751846, + 1920.231595, + 1920.702906, + 1921.165412, + 1921.618774, + 1922.062678, + 1922.496838, + 1922.920997, + 1923.334924, + 1923.738422, + 1924.131321, + 1924.513484, + 1924.884803, + 1925.245205, + 1925.594645, + 1925.933114, + 1926.260632, + 1926.577254, + 1926.883065, + 1927.178183, + 1927.462758, + 1927.73697, + 1928.001029, + 1928.255178, + 1928.499685, + 1928.73485, + 1928.960998, + 1929.17848, + 1929.387674, + 1929.58898, + 1929.782819, + 1929.969636, + 1930.14989, + 1930.324062, + 1930.492647, + 1930.656151, + 1930.815096, + 1930.97001, + 1931.121432, + 1931.269904, + 1931.415973, + 1931.560189, + 1931.7031, + 1931.845251, + 1931.987184, + 1932.129436, + 1932.272533, + 1932.416994, + 1932.563323, + 1932.712014, + 1932.863543, + 1933.018372, + 1933.176943, + 1933.339681, + 1933.506986, + 1933.679242, + 1933.856806, + 1934.040013, + 1934.229174, + 1934.424573, + 1934.626471, + 1934.835101, + 1935.050669, + 1935.273357, + 1935.503317, + 1935.740676, + 1935.985535, + 1936.237966, + 1936.498018, + 1936.76571, + 1937.04104, + 1937.323977, + 1937.614469, + 1937.912439, + 1938.217786, + 1938.530388, + 1938.850104, + 1939.176769, + 1939.510201, + 1939.850198, + 1940.196544, + 1940.549003, + 1940.907326, + 1941.271249, + 1941.640497, + 1942.014782, + 1942.393804, + 1942.777257, + 1943.164825, + 1943.556184, + 1943.951005, + 1944.348955, + 1944.749696, + 1945.152887, + 1945.558188, + 1945.965255, + 1946.373746, + 1946.783322, + 1947.193645, + 1947.604381, + 1948.0152, + 1948.425778, + 1948.835797, + 1949.244947, + 1949.652925, + 1950.059436, + 1950.464197, + 1950.866934, + 1951.267385, + 1951.665297, + 1952.060433, + 1952.452567, + 1952.841485, + 1953.226991, + 1953.6089, + 1953.987044, + 1954.36127, + 1954.73144, + 1955.097433, + 1955.459144, + 1955.816486, + 1956.169386, + 1956.517791, + 1956.861664, + 1957.200984, + 1957.535749, + 1957.865973, + 1958.191688, + 1958.512941, + 1958.829797, + 1959.142337, + 1959.450658, + 1959.754872, + 1960.055106, + 1960.351503, + 1960.644219, + 1960.933423, + 1961.219297, + 1961.502037, + 1961.781847, + 1962.058945, + 1962.333557, + 1962.605919, + 1962.876273, + 1963.144871, + 1963.41197, + 1963.677834, + 1963.94273, + 1964.206928, + 1964.470704, + 1964.734334, + 1964.998093, + 1965.26226, + 1965.527111, + 1965.792921, + 1966.059961, + 1966.328502, + 1966.598807, + 1966.871138, + 1967.145749, + 1967.422888, + 1967.702796, + 1967.985709, + 1968.271851, + 1968.561439, + 1968.854682, + 1969.151777, + 1969.452913, + 1969.758267, + 1970.068004, + 1970.38228, + 1970.701239, + 1971.025011, + 1971.353715, + 1971.687457, + 1972.026331, + 1972.370418, + 1972.719786, + 1973.074488, + 1973.434566, + 1973.800046, + 1974.170944, + 1974.547259, + 1974.928977, + 1975.316072, + 1975.708502, + 1976.106214, + 1976.509139, + 1976.917196, + 1977.330288, + 1977.748308, + 1978.171133, + 1978.598628, + 1979.030645, + 1979.467023, + 1979.907587, + 1980.352152, + 1980.800519, + 1981.252478, + 1981.707809, + 1982.166278, + 1982.627642, + 1983.091648, + 1983.558034, + 1984.026526, + 1984.496844, + 1984.968699, + 1985.441794, + 1985.915825, + 1986.390484, + 1986.865453, + 1987.340412, + 1987.815035, + 1988.288994, + 1988.761955, + 1989.233585, + 1989.703546, + 1990.171501, + 1990.637111, + 1991.100041, + 1991.559952, + 1992.01651, + 1992.469386, + 1992.918249, + 1993.362779, + 1993.802656, + 1994.23757, + 1994.667218, + 1995.091305, + 1995.509546, + 1995.921667, + 1996.327405, + 1996.726511, + 1997.118751, + 1997.503907, + 1997.881775, + 1998.252173, + 1998.614938, + 1998.969925, + 1999.317013, + 1999.656104, + 1999.987123, + 2000.310022, + 2000.624775, + 2000.931385, + 2001.229883, + 2001.520325, + 2001.802795, + 2002.077407, + 2002.344302, + 2002.603647, + 2002.855639, + 2003.1005, + 2003.338479, + 2003.56985, + 2003.794912, + 2004.013987, + 2004.227418, + 2004.435569, + 2004.638823, + 2004.837579, + 2005.032252, + 2005.22327, + 2005.411073, + 2005.59611, + 2005.778837, + 2005.959715, + 2006.139208, + 2006.317783, + 2006.495903, + 2006.674032, + 2006.852625, + 2007.032132, + 2007.212997, + 2007.395652, + 2007.580516, + 2007.767998, + 2007.958492, + 2008.152377, + 2008.350016, + 2008.551755, + 2008.757924, + 2008.968832, + 2009.184773, + 2009.40602, + 2009.632829, + 2009.865435, + 2010.104055, + 2010.348888, + 2010.600114, + 2010.857896, + 2011.122378, + 2011.393687, + 2011.671934, + 2011.957212, + 2012.249601, + 2012.549164, + 2012.855952, + 2013.17, + 2013.491331, + 2013.819954, + 2014.155866, + 2014.499052, + 2014.849485, + 2015.207126, + 2015.571926, + 2015.943825, + 2016.32275, + 2016.708618, + 2017.101338, + 2017.500805, + 2017.906905, + 2018.319514, + 2018.738495, + 2019.163704, + 2019.594985, + 2020.032171, + 2020.475088, + 2020.923548, + 2021.377357, + 2021.83631, + 2022.300191, + 2022.768777, + 2023.241835, + 2023.719124, + 2024.200392, + 2024.685384, + 2025.173835, + 2025.665473, + 2026.160022, + 2026.657199, + 2027.156718, + 2027.658289, + 2028.161619, + 2028.666414, + 2029.17238, + 2029.679222, + 2030.186647, + 2030.694365, + 2031.20209, + 2031.709541, + 2032.216443, + 2032.722527, + 2033.227534, + 2033.731213, + 2034.233325, + 2034.733642, + 2035.231945, + 2035.728033, + 2036.221716, + 2036.712817, + 2037.201176, + 2037.686649, + 2038.169105, + 2038.648432, + 2039.124531, + 2039.597321, + 2040.066738, + 2040.53273, + 2040.995263, + 2041.454318, + 2041.909888, + 2042.361983, + 2042.810624, + 2043.255845, + 2043.697691, + 2044.136217, + 2044.571491, + 2045.003586, + 2045.432585, + 2045.858577, + 2046.281658, + 2046.701926, + 2047.119487, + 2047.534447, + 2047.946915, + 2048.357002, + 2048.764818, + 2049.170473, + 2049.574078, + 2049.975739, + 2050.375563, + 2050.773651, + 2051.170103, + 2051.565014, + 2051.958477, + 2052.350579, + 2052.741402, + 2053.131024, + 2053.51952, + 2053.906958, + 2054.293401, + 2054.678909, + 2055.063537, + 2055.447333, + 2055.830343, + 2056.212607, + 2056.594163, + 2056.975041, + 2057.355271, + 2057.734877, + 2058.113878, + 2058.492293, + 2058.870134, + 2059.247412, + 2059.624133, + 2060.0003, + 2060.375914, + 2060.750972, + 2061.125467, + 2061.49939, + 2061.872729, + 2062.245468, + 2062.617587, + 2062.989065, + 2063.359876, + 2063.72999, + 2064.099376, + 2064.467997, + 2064.835813, + 2065.202783, + 2065.568858, + 2065.933989, + 2066.298123, + 2066.661202, + 2067.023167, + 2067.383954, + 2067.743496, + 2068.101725, + 2068.45857, + 2068.813955, + 2069.167807, + 2069.520046, + 2069.870596, + 2070.219376, + 2070.566307, + 2070.91131, + 2071.254305, + 2071.595216, + 2071.933965, + 2072.270479, + 2072.604687, + 2072.93652, + 2073.265915, + 2073.592811, + 2073.917153, + 2074.238891, + 2074.55798, + 2074.874383, + 2075.188066, + 2075.499004, + 2075.80718, + 2076.112581, + 2076.415204, + 2076.715053, + 2077.01214, + 2077.306483, + 2077.598109, + 2077.887052, + 2078.173354, + 2078.457063, + 2078.738235, + 2079.016932, + 2079.293223, + 2079.567183, + 2079.838891, + 2080.108432, + 2080.375896, + 2080.641378, + 2080.904974, + 2081.166785, + 2081.426915, + 2081.685469, + 2081.942553, + 2082.198277, + 2082.452748, + 2082.706077, + 2082.958371, + 2083.209739, + 2083.460289, + 2083.710125, + 2083.959353, + 2084.208076, + 2084.456392, + 2084.7044, + 2084.952195, + 2085.19987, + 2085.447514, + 2085.695213, + 2085.943051, + 2086.191107, + 2086.439459, + 2086.688179, + 2086.937337, + 2087.187001, + 2087.437234, + 2087.688096, + 2087.939642, + 2088.191928, + 2088.445003, + 2088.698914, + 2088.953704, + 2089.209416, + 2089.466086, + 2089.723749, + 2089.982436, + 2090.242177, + 2090.502996, + 2090.764915, + 2091.027955, + 2091.29213, + 2091.557453, + 2091.823932, + 2092.091571, + 2092.360372, + 2092.630333, + 2092.901446, + 2093.173702, + 2093.447087, + 2093.721581, + 2093.997161, + 2094.273803, + 2094.551473, + 2094.830137, + 2095.109755, + 2095.390283, + 2095.671672, + 2095.953869, + 2096.236818, + 2096.520455, + 2096.804717, + 2097.089531, + 2097.374825, + 2097.66052, + 2097.946534, + 2098.232783, + 2098.519177, + 2098.805625, + 2099.092032, + 2099.378302, + 2099.664335, + 2099.950031, + 2100.235287, + 2100.519999, + 2100.804063, + 2101.087376, + 2101.369831, + 2101.651326, + 2101.931756, + 2102.21102, + 2102.489016, + 2102.765648, + 2103.040818, + 2103.314432, + 2103.586401, + 2103.856636, + 2104.125054, + 2104.391574, + 2104.656122, + 2104.918623, + 2105.179012, + 2105.437226, + 2105.693204, + 2105.946895, + 2106.198249, + 2106.447221, + 2106.693773, + 2106.937869, + 2107.179479, + 2107.418578, + 2107.655143, + 2107.889159, + 2108.120613, + 2108.349495, + 2108.575801, + 2108.79953, + 2109.020684, + 2109.239269, + 2109.455294, + 2109.668772, + 2109.879716, + 2110.088144, + 2110.294077, + 2110.497537, + 2110.698548, + 2110.897138, + 2111.093336, + 2111.287172, + 2111.478679, + 2111.667891, + 2111.854845, + 2112.039577, + 2112.222128, + 2112.402538, + 2112.580849, + 2112.757104, + 2112.931349, + 2113.103629, + 2113.273991, + 2113.442485, + 2113.60916, + 2113.774067, + 2113.937258, + 2114.098787, + 2114.258706, + 2114.417072, + 2114.573941, + 2114.729367, + 2114.88341, + 2115.036127, + 2115.187576, + 2115.337816, + 2115.486907, + 2115.634908, + 2115.781878, + 2115.927877, + 2116.072963, + 2116.217195, + 2116.360633, + 2116.503332, + 2116.645351, + 2116.786745, + 2116.927568, + 2117.067875, + 2117.207717, + 2117.347145, + 2117.486206, + 2117.624948, + 2117.763414, + 2117.901644, + 2118.039679, + 2118.177551, + 2118.315294, + 2118.452934, + 2118.590496, + 2118.727999, + 2118.86546, + 2119.002889, + 2119.140293, + 2119.277676, + 2119.415034, + 2119.552363, + 2119.689654, + 2119.826893, + 2119.964065, + 2120.101152, + 2120.238134, + 2120.374989, + 2120.511696, + 2120.648233, + 2120.784579, + 2120.920716, + 2121.056626, + 2121.192298, + 2121.327724, + 2121.462899, + 2121.597827, + 2121.732517, + 2121.866985, + 2122.001258, + 2122.135367, + 2122.269355, + 2122.403274, + 2122.537184, + 2122.671154, + 2122.805266, + 2122.939606, + 2123.074272, + 2123.209371, + 2123.345015, + 2123.481324, + 2123.618425, + 2123.75645, + 2123.895533, + 2124.035813, + 2124.177429, + 2124.320523, + 2124.465232, + 2124.611694, + 2124.76004, + 2124.910397, + 2125.062886, + 2125.217618, + 2125.374696, + 2125.534212, + 2125.696246, + 2125.860863, + 2126.028119, + 2126.19805, + 2126.37068, + 2126.546015, + 2126.724047, + 2126.904749, + 2127.088079, + 2127.273977, + 2127.462369, + 2127.653161, + 2127.846248, + 2128.041507, + 2128.238803, + 2128.437987, + 2128.638898, + 2128.841366, + 2129.045209, + 2129.250237, + 2129.456255, + 2129.663061, + 2129.870448, + 2130.078209, + 2130.286134, + 2130.494012, + 2130.701635, + 2130.908799, + 2131.115301, + 2131.320945, + 2131.525542, + 2131.72891, + 2131.930873, + 2132.131268, + 2132.329939, + 2132.526742, + 2132.721543, + 2132.914221, + 2133.104665, + 2133.292778, + 2133.478474, + 2133.661683, + 2133.842342, + 2134.020405, + 2134.195836, + 2134.368614, + 2134.538726, + 2134.706175, + 2134.870973, + 2135.033142, + 2135.192718, + 2135.349743, + 2135.504272, + 2135.656368, + 2135.806102, + 2135.953555, + 2136.098816, + 2136.241981, + 2136.383154, + 2136.522447, + 2136.659978, + 2136.795872, + 2136.930261, + 2137.063283, + 2137.195082, + 2137.325811, + 2137.455625, + 2137.58469, + 2137.713173, + 2137.841252, + 2137.969107, + 2138.096929, + 2138.224911, + 2138.353253, + 2138.482163, + 2138.611852, + 2138.742538, + 2138.874445, + 2139.007801, + 2139.14284, + 2139.279801, + 2139.418924, + 2139.560456, + 2139.704645, + 2139.851742, + 2140.001999, + 2140.15567, + 2140.313007, + 2140.474262, + 2140.639685, + 2140.809522, + 2140.984016, + 2141.163404, + 2141.347915, + 2141.537772, + 2141.73319, + 2141.93437, + 2142.141506, + 2142.354778, + 2142.57435, + 2142.800377, + 2143.032993, + 2143.272319, + 2143.518458, + 2143.771495, + 2144.031496, + 2144.298508, + 2144.57256, + 2144.853659, + 2145.141795, + 2145.436934, + 2145.739025, + 2146.047998, + 2146.363759, + 2146.6862, + 2147.015191, + 2147.350586, + 2147.69222, + 2148.039912, + 2148.393465, + 2148.752669, + 2149.117298, + 2149.487115, + 2149.861869, + 2150.241302, + 2150.625143, + 2151.013115, + 2151.404933, + 2151.800308, + 2152.198944, + 2152.600542, + 2153.004801, + 2153.41142, + 2153.820094, + 2154.230523, + 2154.642405, + 2155.055442, + 2155.46934, + 2155.883809, + 2156.298562, + 2156.71332, + 2157.127809, + 2157.541761, + 2157.954916, + 2158.367021, + 2158.777832, + 2159.187111, + 2159.594631, + 2160.000172, + 2160.403523, + 2160.804482, + 2161.202857, + 2161.598463, + 2161.991127, + 2162.380682, + 2162.766972, + 2163.149851, + 2163.529179, + 2163.904829, + 2164.276681, + 2164.644623, + 2165.008555, + 2165.368384, + 2165.724027, + 2166.07541, + 2166.422467, + 2166.765144, + 2167.103394, + 2167.437179, + 2167.766472, + 2168.091253, + 2168.411513, + 2168.727252, + 2169.038479, + 2169.345212, + 2169.647478, + 2169.945314, + 2170.238765, + 2170.527886, + 2170.812739, + 2171.093397, + 2171.369939, + 2171.642453, + 2171.911035, + 2172.175788, + 2172.436822, + 2172.694254, + 2172.948207, + 2173.19881, + 2173.446197, + 2173.690506, + 2173.931881, + 2174.170467, + 2174.406414, + 2174.639873, + 2174.870998, + 2175.099944, + 2175.326864, + 2175.551914, + 2175.775249, + 2175.99702, + 2176.217378, + 2176.436471, + 2176.654445, + 2176.871441, + 2177.087598, + 2177.303048, + 2177.51792, + 2177.732338, + 2177.94642, + 2178.16028, + 2178.374024, + 2178.587753, + 2178.801564, + 2179.015545, + 2179.229781, + 2179.444348, + 2179.65932, + 2179.874763, + 2180.090737, + 2180.307299, + 2180.5245, + 2180.742387, + 2180.961001, + 2181.18038, + 2181.400561, + 2181.621572, + 2181.843444, + 2182.066202, + 2182.289868, + 2182.514466, + 2182.740015, + 2182.966534, + 2183.194042, + 2183.422555, + 2183.652092, + 2183.882668, + 2184.1143, + 2184.347006, + 2184.580803, + 2184.815707, + 2185.051737, + 2185.288911, + 2185.527246, + 2185.766763, + 2186.00748, + 2186.249416, + 2186.492591, + 2186.737022, + 2186.98273, + 2187.229733, + 2187.478047, + 2187.727689, + 2187.978676, + 2188.23102, + 2188.484735, + 2188.739831, + 2188.996317, + 2189.2542, + 2189.513484, + 2189.774172, + 2190.036262, + 2190.299753, + 2190.564637, + 2190.830908, + 2191.098555, + 2191.367563, + 2191.637916, + 2191.909597, + 2192.182585, + 2192.456856, + 2192.732385, + 2193.009146, + 2193.287109, + 2193.566243, + 2193.846518, + 2194.1279, + 2194.410356, + 2194.69385, + 2194.978347, + 2195.263811, + 2195.550205, + 2195.837494, + 2196.125641, + 2196.414608, + 2196.70436, + 2196.994859, + 2197.28607, + 2197.577955, + 2197.870479, + 2198.163606, + 2198.457297, + 2198.751518, + 2199.046229, + 2199.341395, + 2199.636977, + 2199.932933, + 2200.229225, + 2200.52581, + 2200.822644, + 2201.119682, + 2201.416877, + 2201.71418, + 2202.01154, + 2202.308903, + 2202.606215, + 2202.903416, + 2203.200447, + 2203.497245, + 2203.793744, + 2204.089876, + 2204.385571, + 2204.680756, + 2204.975356, + 2205.269293, + 2205.562489, + 2205.854861, + 2206.146327, + 2206.436802, + 2206.7262, + 2207.014433, + 2207.301413, + 2207.587052, + 2207.87126, + 2208.153947, + 2208.435023, + 2208.714399, + 2208.991986, + 2209.267694, + 2209.541437, + 2209.813128, + 2210.082682, + 2210.350014, + 2210.615042, + 2210.877686, + 2211.137868, + 2211.395512, + 2211.650543, + 2211.90289, + 2212.152485, + 2212.39926, + 2212.643151, + 2212.884099, + 2213.122044, + 2213.35693, + 2213.588705, + 2213.817318, + 2214.042722, + 2214.264871, + 2214.483722, + 2214.699234, + 2214.911367, + 2215.120084, + 2215.325348, + 2215.527123, + 2215.725375, + 2215.92007, + 2216.111172, + 2216.298649, + 2216.482465, + 2216.662586, + 2216.838975, + 2217.011596, + 2217.180413, + 2217.345387, + 2217.50648, + 2217.663654, + 2217.81687, + 2217.966091, + 2218.111278, + 2218.252398, + 2218.389416, + 2218.522304, + 2218.651034, + 2218.775588, + 2218.895949, + 2219.01211, + 2219.124071, + 2219.23184, + 2219.335438, + 2219.434892, + 2219.530246, + 2219.621555, + 2219.708885, + 2219.792322, + 2219.871961, + 2219.947916, + 2220.020316, + 2220.089305, + 2220.155044, + 2220.217709, + 2220.277493, + 2220.334601, + 2220.389256, + 2220.441691, + 2220.492155, + 2220.540906, + 2220.588213, + 2220.634353, + 2220.679612, + 2220.72428, + 2220.76865, + 2220.81302, + 2220.857686, + 2220.902942, + 2220.94908, + 2220.996386, + 2221.045139, + 2221.095608, + 2221.148053, + 2221.202722, + 2221.259847, + 2221.319647, + 2221.382325, + 2221.448065, + 2221.517035, + 2221.58938, + 2221.665231, + 2221.744694, + 2221.827857, + 2221.914789, + 2222.005537, + 2222.100128, + 2222.198572, + 2222.300858, + 2222.406958, + 2222.516825, + 2222.630399, + 2222.747602, + 2222.868343, + 2222.992518, + 2223.120012, + 2223.250698, + 2223.384441, + 2223.521098, + 2223.66052, + 2223.802551, + 2223.947033, + 2224.093803, + 2224.242697, + 2224.393551, + 2224.546198, + 2224.700476, + 2224.856221, + 2225.013273, + 2225.171476, + 2225.330673, + 2225.490715, + 2225.651454, + 2225.812746, + 2225.97445, + 2226.136433, + 2226.298561, + 2226.460709, + 2226.62275, + 2226.784567, + 2226.946042, + 2227.10706, + 2227.267512, + 2227.427289, + 2227.586286, + 2227.744398, + 2227.901525, + 2228.057567, + 2228.212426, + 2228.366006, + 2228.518214, + 2228.668958, + 2228.818148, + 2228.965697, + 2229.111519, + 2229.255533, + 2229.397661, + 2229.537826, + 2229.675961, + 2229.811998, + 2229.945878, + 2230.077547, + 2230.20696, + 2230.334075, + 2230.458862, + 2230.581298, + 2230.701371, + 2230.819077, + 2230.934424, + 2231.047429, + 2231.158122, + 2231.266544, + 2231.372749, + 2231.4768, + 2231.578775, + 2231.678764, + 2231.776866, + 2231.873193, + 2231.967868, + 2232.061025, + 2232.152808, + 2232.243368, + 2232.332866, + 2232.42147, + 2232.509355, + 2232.5967, + 2232.683689, + 2232.770508, + 2232.857347, + 2232.944393, + 2233.031837, + 2233.119864, + 2233.208659, + 2233.2984, + 2233.389262, + 2233.481412, + 2233.57501, + 2233.670209, + 2233.767151, + 2233.865969, + 2233.966784, + 2234.069708, + 2234.174838, + 2234.282263, + 2234.392057, + 2234.504282, + 2234.618988, + 2234.736212, + 2234.855979, + 2234.978301, + 2235.103181, + 2235.230607, + 2235.36056, + 2235.493009, + 2235.627912, + 2235.765223, + 2235.904882, + 2236.046826, + 2236.190983, + 2236.337278, + 2236.485628, + 2236.635947, + 2236.788147, + 2236.942134, + 2237.097815, + 2237.255095, + 2237.413876, + 2237.574064, + 2237.735561, + 2237.898272, + 2238.062104, + 2238.226965, + 2238.392762, + 2238.559409, + 2238.726818, + 2238.894907, + 2239.063593, + 2239.232799, + 2239.402447, + 2239.572466, + 2239.742782, + 2239.913329, + 2240.084038, + 2240.254846, + 2240.42569, + 2240.59651, + 2240.767247, + 2240.937842, + 2241.108242, + 2241.27839, + 2241.448234, + 2241.617721, + 2241.786802, + 2241.955426, + 2242.123544, + 2242.291111, + 2242.458081, + 2242.62441, + 2242.790055, + 2242.954977, + 2243.119138, + 2243.282503, + 2243.445038, + 2243.606714, + 2243.767506, + 2243.927389, + 2244.086346, + 2244.244362, + 2244.401427, + 2244.557534, + 2244.712684, + 2244.866881, + 2245.020135, + 2245.17246, + 2245.323878, + 2245.474415, + 2245.624101, + 2245.772975, + 2245.921079, + 2246.06846, + 2246.215171, + 2246.361269, + 2246.506816, + 2246.651876, + 2246.79652, + 2246.94082, + 2247.08485, + 2247.228687, + 2247.372411, + 2247.5161, + 2247.659835, + 2247.803694, + 2247.947757, + 2248.092101, + 2248.2368, + 2248.381929, + 2248.527555, + 2248.673745, + 2248.82056, + 2248.968057, + 2249.116288, + 2249.2653, + 2249.415133, + 2249.565823, + 2249.717398, + 2249.86988, + 2250.023287, + 2250.177627, + 2250.332904, + 2250.489116, + 2250.646252, + 2250.804299, + 2250.963235, + 2251.123033, + 2251.283662, + 2251.445085, + 2251.607261, + 2251.770144, + 2251.933684, + 2252.097829, + 2252.262522, + 2252.427706, + 2252.593319, + 2252.759297, + 2252.925578, + 2253.092095, + 2253.258782, + 2253.425571, + 2253.592397, + 2253.75919, + 2253.925885, + 2254.092415, + 2254.258715, + 2254.42472, + 2254.590367, + 2254.755593, + 2254.920338, + 2255.084543, + 2255.248149, + 2255.411101, + 2255.573343, + 2255.734823, + 2255.89549, + 2256.055292, + 2256.214183, + 2256.372115, + 2256.529043, + 2256.684923, + 2256.839713, + 2256.993373, + 2257.145863, + 2257.297146, + 2257.447186, + 2257.59595, + 2257.743405, + 2257.889521, + 2258.034272, + 2258.17763, + 2258.319574, + 2258.460083, + 2258.599141, + 2258.736734, + 2258.872852, + 2259.007488, + 2259.140639, + 2259.272309, + 2259.402503, + 2259.531232, + 2259.658513, + 2259.784367, + 2259.908821, + 2260.031906, + 2260.153661, + 2260.27413, + 2260.39336, + 2260.511409, + 2260.628335, + 2260.744205, + 2260.859091, + 2260.97307, + 2261.086223, + 2261.198638, + 2261.310405, + 2261.421621, + 2261.532383, + 2261.642795, + 2261.752963, + 2261.862993, + 2261.972997, + 2262.083086, + 2262.193372, + 2262.303968, + 2262.414987, + 2262.526543, + 2262.638745, + 2262.751706, + 2262.865532, + 2262.98033, + 2263.096202, + 2263.213249, + 2263.331567, + 2263.451249, + 2263.572382, + 2263.69505, + 2263.819332, + 2263.945303, + 2264.073031, + 2264.202581, + 2264.334009, + 2264.467369, + 2264.602707, + 2264.740066, + 2264.879481, + 2265.020981, + 2265.164592, + 2265.310332, + 2265.458215, + 2265.608248, + 2265.760434, + 2265.91477, + 2266.07125, + 2266.22986, + 2266.390583, + 2266.553396, + 2266.718275, + 2266.885187, + 2267.054099, + 2267.22497, + 2267.39776, + 2267.572423, + 2267.748908, + 2267.927163, + 2268.107135, + 2268.288763, + 2268.471987, + 2268.656745, + 2268.842971, + 2269.030596, + 2269.21955, + 2269.409761, + 2269.601155, + 2269.793654, + 2269.987178, + 2270.181646, + 2270.376972, + 2270.573069, + 2270.769846, + 2270.967208, + 2271.165058, + 2271.363296, + 2271.561818, + 2271.760516, + 2271.959282, + 2272.158001, + 2272.356559, + 2272.554838, + 2272.752718, + 2272.95008, + 2273.146803, + 2273.342766, + 2273.537851, + 2273.731941, + 2273.924921, + 2274.116683, + 2274.30712, + 2274.496135, + 2274.683636, + 2274.86954, + 2275.053771, + 2275.236267, + 2275.416975, + 2275.595852, + 2275.772872, + 2275.948018, + 2276.121289, + 2276.292697, + 2276.46227, + 2276.630048, + 2276.796086, + 2276.960456, + 2277.123238, + 2277.284529, + 2277.444438, + 2277.603085, + 2277.760598, + 2277.917119, + 2278.072793, + 2278.227774, + 2278.382221, + 2278.536297, + 2278.690164, + 2278.843986, + 2278.997926, + 2279.152142, + 2279.306788, + 2279.462011, + 2279.617949, + 2279.774732, + 2279.932476, + 2280.091288, + 2280.251259, + 2280.412465, + 2280.574968, + 2280.738812, + 2280.904026, + 2281.07062, + 2281.238589, + 2281.407907, + 2281.578535, + 2281.750415, + 2281.923472, + 2282.097616, + 2282.272743, + 2282.448734, + 2282.625457, + 2282.802771, + 2282.98052, + 2283.158542, + 2283.336667, + 2283.514719, + 2283.692516, + 2283.869876, + 2284.046613, + 2284.22254, + 2284.397473, + 2284.571229, + 2284.743629, + 2284.914497, + 2285.083665, + 2285.250971, + 2285.41626, + 2285.579384, + 2285.740206, + 2285.898597, + 2286.054439, + 2286.207622, + 2286.358049, + 2286.505631, + 2286.650292, + 2286.791965, + 2286.930596, + 2287.066139, + 2287.198562, + 2287.327839, + 2287.453956, + 2287.57691, + 2287.696705, + 2287.813354, + 2287.926879, + 2288.03731, + 2288.144686, + 2288.249052, + 2288.350461, + 2288.448972, + 2288.544653, + 2288.637577, + 2288.727823, + 2288.815477, + 2288.900631, + 2288.983384, + 2289.063841, + 2289.142111, + 2289.218313, + 2289.29257, + 2289.365012, + 2289.435776, + 2289.505006, + 2289.572852, + 2289.639473, + 2289.705032, + 2289.769702, + 2289.833662, + 2289.897098, + 2289.960204, + 2290.02318, + 2290.086234, + 2290.149578, + 2290.213434, + 2290.278027, + 2290.343588, + 2290.410352, + 2290.478558, + 2290.548449, + 2290.620269, + 2290.694264, + 2290.77068, + 2290.849763, + 2290.931755, + 2291.016896, + 2291.105422, + 2291.197563, + 2291.293543, + 2291.393575, + 2291.497867, + 2291.606612, + 2291.719995, + 2291.838184, + 2291.961337, + 2292.089595, + 2292.223083, + 2292.361908, + 2292.506162, + 2292.655917, + 2292.811227, + 2292.972127, + 2293.13863, + 2293.310733, + 2293.488412, + 2293.671621, + 2293.860299, + 2294.054362, + 2294.253709, + 2294.458222, + 2294.667765, + 2294.882183, + 2295.101308, + 2295.324956, + 2295.55293, + 2295.785018, + 2296.020999, + 2296.26064, + 2296.503698, + 2296.749922, + 2296.999055, + 2297.250833, + 2297.504989, + 2297.76125, + 2298.019343, + 2298.278993, + 2298.539923, + 2298.801861, + 2299.064534, + 2299.327671, + 2299.591006, + 2299.854278, + 2300.117231, + 2300.379612, + 2300.641178, + 2300.90169, + 2301.160919, + 2301.41864, + 2301.674639, + 2301.928709, + 2302.180652, + 2302.430277, + 2302.677404, + 2302.92186, + 2303.16348, + 2303.402111, + 2303.637606, + 2303.869827, + 2304.098646, + 2304.323941, + 2304.545603, + 2304.763526, + 2304.977617, + 2305.18779, + 2305.393965, + 2305.596074, + 2305.794055, + 2305.987854, + 2306.177427, + 2306.362736, + 2306.543754, + 2306.720459, + 2306.89284, + 2307.060892, + 2307.224621, + 2307.384039, + 2307.539167, + 2307.690034, + 2307.836678, + 2307.979146, + 2308.11749, + 2308.251774, + 2308.382068, + 2308.50845, + 2308.631005, + 2308.749827, + 2308.865016, + 2308.97668, + 2309.084932, + 2309.189892, + 2309.291687, + 2309.390447, + 2309.486309, + 2309.579413, + 2309.669903, + 2309.757926, + 2309.843634, + 2309.927176, + 2310.008708, + 2310.088383, + 2310.166355, + 2310.242777, + 2310.317802, + 2310.391581, + 2310.46426, + 2310.535985, + 2310.606897, + 2310.677131, + 2310.746821, + 2310.816094, + 2310.88507, + 2310.953865, + 2311.022587, + 2311.09134, + 2311.160219, + 2311.229312, + 2311.298702, + 2311.368463, + 2311.438663, + 2311.509363, + 2311.580617, + 2311.652471, + 2311.724967, + 2311.798139, + 2311.872016, + 2311.946621, + 2312.021972, + 2312.098082, + 2312.174959, + 2312.252608, + 2312.33103, + 2312.410221, + 2312.490178, + 2312.57089, + 2312.652348, + 2312.73454, + 2312.817451, + 2312.901066, + 2312.985369, + 2313.070342, + 2313.155968, + 2313.242228, + 2313.329105, + 2313.416579, + 2313.504633, + 2313.593247, + 2313.682402, + 2313.77208, + 2313.862264, + 2313.952932, + 2314.044068, + 2314.135651, + 2314.227662, + 2314.320082, + 2314.412888, + 2314.506061, + 2314.599578, + 2314.693415, + 2314.787548, + 2314.881951, + 2314.976598, + 2315.07146, + 2315.166507, + 2315.261708, + 2315.35703, + 2315.452439, + 2315.547897, + 2315.643369, + 2315.738815, + 2315.834196, + 2315.929472, + 2316.024601, + 2316.119542, + 2316.214252, + 2316.30869, + 2316.402813, + 2316.496579, + 2316.589948, + 2316.682879, + 2316.775332, + 2316.867269, + 2316.958653, + 2317.049449, + 2317.139622, + 2317.229141, + 2317.317975, + 2317.406097, + 2317.493479, + 2317.580098, + 2317.66593, + 2317.750957, + 2317.835157, + 2317.918516, + 2318.001017, + 2318.082647, + 2318.163392, + 2318.243242, + 2318.322185, + 2318.400212, + 2318.477313, + 2318.553479, + 2318.628701, + 2318.702969, + 2318.776274, + 2318.848606, + 2318.919954, + 2318.990306, + 2319.059649, + 2319.127969, + 2319.195252, + 2319.261481, + 2319.326639, + 2319.390705, + 2319.453661, + 2319.515484, + 2319.576152, + 2319.635641, + 2319.693926, + 2319.750981, + 2319.806781, + 2319.861298, + 2319.914506, + 2319.966376, + 2320.016883, + 2320.065998, + 2320.113697, + 2320.159955, + 2320.204746, + 2320.248048, + 2320.28984, + 2320.330103, + 2320.36882, + 2320.405976, + 2320.441557, + 2320.475555, + 2320.507962, + 2320.538774, + 2320.567991, + 2320.595614, + 2320.621651, + 2320.646109, + 2320.669001, + 2320.690342, + 2320.710153, + 2320.728456, + 2320.745275, + 2320.760639, + 2320.77458, + 2320.78713, + 2320.798324, + 2320.8082, + 2320.816797, + 2320.824152, + 2320.830305, + 2320.835296, + 2320.839164, + 2320.841947, + 2320.843682, + 2320.844405, + 2320.844152, + 2320.842955, + 2320.840845, + 2320.837852, + 2320.834006, + 2320.829333, + 2320.823862, + 2320.817618, + 2320.81063, + 2320.802924, + 2320.794532, + 2320.785486, + 2320.775822, + 2320.765579, + 2320.754803, + 2320.743544, + 2320.731861, + 2320.719818, + 2320.707489, + 2320.694958, + 2320.682316, + 2320.669667, + 2320.657124, + 2320.644811, + 2320.632864, + 2320.621429, + 2320.610665, + 2320.600738, + 2320.591828, + 2320.584122, + 2320.577817, + 2320.573117, + 2320.570233, + 2320.569381, + 2320.570782, + 2320.574659, + 2320.581236, + 2320.590736, + 2320.603379, + 2320.619384, + 2320.63896, + 2320.66231, + 2320.689628, + 2320.721096, + 2320.756884, + 2320.797148, + 2320.842025, + 2320.89164, + 2320.946095, + 2321.005474, + 2321.069843, + 2321.139244, + 2321.213698, + 2321.293207, + 2321.377747, + 2321.467274, + 2321.561724, + 2321.661008, + 2321.765021, + 2321.873633, + 2321.9867, + 2322.104056, + 2322.225522, + 2322.3509, + 2322.479981, + 2322.612542, + 2322.748349, + 2322.88716, + 2323.028725, + 2323.172786, + 2323.319082, + 2323.467351, + 2323.617326, + 2323.768742, + 2323.921337, + 2324.074849, + 2324.229024, + 2324.383611, + 2324.538367, + 2324.693054, + 2324.847444, + 2325.001317, + 2325.154462, + 2325.306679, + 2325.457776, + 2325.607571, + 2325.755896, + 2325.902589, + 2326.047502, + 2326.190495, + 2326.331439, + 2326.470215, + 2326.606711, + 2326.740828, + 2326.872473, + 2327.001561, + 2327.128015, + 2327.251768, + 2327.372756, + 2327.490926, + 2327.606227, + 2327.718619, + 2327.828063, + 2327.934529, + 2328.037992, + 2328.138433, + 2328.235836, + 2328.330194, + 2328.421504, + 2328.509768, + 2328.594997, + 2328.677206, + 2328.756418, + 2328.832662, + 2328.905977, + 2328.976406, + 2329.044004, + 2329.108831, + 2329.170959, + 2329.230469, + 2329.287449, + 2329.341999, + 2329.394229, + 2329.444258, + 2329.492217, + 2329.538244, + 2329.582489, + 2329.625112, + 2329.666281, + 2329.706174, + 2329.744977, + 2329.782882, + 2329.820089, + 2329.856806, + 2329.893243, + 2329.929616, + 2329.966143, + 2330.003045, + 2330.040543, + 2330.078858, + 2330.118209, + 2330.158813, + 2330.200881, + 2330.24462, + 2330.290232, + 2330.337907, + 2330.387831, + 2330.440176, + 2330.495107, + 2330.552774, + 2330.613317, + 2330.676861, + 2330.74352, + 2330.81339, + 2330.886556, + 2330.963087, + 2331.043036, + 2331.126442, + 2331.213331, + 2331.303711, + 2331.397579, + 2331.494917, + 2331.595693, + 2331.699864, + 2331.807375, + 2331.918158, + 2332.032138, + 2332.149229, + 2332.269336, + 2332.392359, + 2332.51819, + 2332.646715, + 2332.777819, + 2332.911379, + 2333.047274, + 2333.185379, + 2333.325569, + 2333.46772, + 2333.611709, + 2333.757414, + 2333.904716, + 2334.053501, + 2334.203654, + 2334.35507, + 2334.507643, + 2334.661275, + 2334.815873, + 2334.971347, + 2335.127615, + 2335.284598, + 2335.442222, + 2335.600422, + 2335.759133, + 2335.918298, + 2336.077864, + 2336.237782, + 2336.398008, + 2336.558502, + 2336.719227, + 2336.880149, + 2337.041239, + 2337.20247, + 2337.363817, + 2337.525258, + 2337.686775, + 2337.848348, + 2338.009964, + 2338.171608, + 2338.333268, + 2338.494935, + 2338.6566, + 2338.818257, + 2338.979901, + 2339.141529, + 2339.30314, + 2339.464735, + 2339.626318, + 2339.787892, + 2339.949467, + 2340.111052, + 2340.272661, + 2340.434308, + 2340.596012, + 2340.757794, + 2340.919678, + 2341.081691, + 2341.243862, + 2341.406225, + 2341.568814, + 2341.731668, + 2341.894825, + 2342.05833, + 2342.222226, + 2342.386559, + 2342.551377, + 2342.716728, + 2342.88266, + 2343.049224, + 2343.216466, + 2343.384435, + 2343.553177, + 2343.722738, + 2343.893158, + 2344.064477, + 2344.236731, + 2344.409952, + 2344.584167, + 2344.7594, + 2344.935669, + 2345.112985, + 2345.291355, + 2345.470779, + 2345.65125, + 2345.832757, + 2346.01528, + 2346.198791, + 2346.383259, + 2346.568643, + 2346.754897, + 2346.941967, + 2347.129794, + 2347.318313, + 2347.507452, + 2347.697134, + 2347.887276, + 2348.077794, + 2348.268596, + 2348.459587, + 2348.65067, + 2348.841745, + 2349.032709, + 2349.223459, + 2349.413889, + 2349.603894, + 2349.793368, + 2349.982204, + 2350.170298, + 2350.357545, + 2350.543844, + 2350.729094, + 2350.913197, + 2351.096056, + 2351.27758, + 2351.457677, + 2351.636262, + 2351.81325, + 2351.988562, + 2352.16212, + 2352.333852, + 2352.503687, + 2352.671558, + 2352.837402, + 2353.001159, + 2353.162772, + 2353.322185, + 2353.479347, + 2353.634209, + 2353.786725, + 2353.936849, + 2354.084541, + 2354.229759, + 2354.372466, + 2354.512625, + 2354.650203, + 2354.785168, + 2354.917489, + 2355.047137, + 2355.174087, + 2355.298314, + 2355.419796, + 2355.538513, + 2355.654449, + 2355.767589, + 2355.877921, + 2355.985436, + 2356.090131, + 2356.192003, + 2356.291055, + 2356.387293, + 2356.480727, + 2356.571372, + 2356.659249, + 2356.74438, + 2356.826795, + 2356.906529, + 2356.983619, + 2357.058111, + 2357.130053, + 2357.1995, + 2357.26651, + 2357.331148, + 2357.393482, + 2357.453586, + 2357.511536, + 2357.567414, + 2357.621305, + 2357.673295, + 2357.723477, + 2357.771943, + 2357.818789, + 2357.86411, + 2357.908006, + 2357.950575, + 2357.991916, + 2358.03213, + 2358.071315, + 2358.10957, + 2358.14699, + 2358.183672, + 2358.219709, + 2358.255192, + 2358.290209, + 2358.324846, + 2358.359184, + 2358.393304, + 2358.427279, + 2358.461181, + 2358.495079, + 2358.529034, + 2358.563106, + 2358.59735, + 2358.631816, + 2358.666551, + 2358.701597, + 2358.736991, + 2358.772767, + 2358.808955, + 2358.84558, + 2358.882663, + 2358.920221, + 2358.958269, + 2358.996816, + 2359.035869, + 2359.075431, + 2359.115502, + 2359.15608, + 2359.197157, + 2359.238727, + 2359.280777, + 2359.323294, + 2359.366262, + 2359.409664, + 2359.453478, + 2359.497684, + 2359.542257, + 2359.587172, + 2359.632401, + 2359.677914, + 2359.723681, + 2359.769668, + 2359.815837, + 2359.862151, + 2359.908569, + 2359.955045, + 2360.001532, + 2360.047978, + 2360.09433, + 2360.140529, + 2360.186514, + 2360.23222, + 2360.277578, + 2360.322517, + 2360.366963, + 2360.41084, + 2360.45407, + 2360.496574, + 2360.538272, + 2360.579087, + 2360.618939, + 2360.657754, + 2360.69546, + 2360.731989, + 2360.767278, + 2360.801272, + 2360.833924, + 2360.865192, + 2360.895048, + 2360.923473, + 2360.950458, + 2360.976009, + 2361.000142, + 2361.022889, + 2361.044295, + 2361.064417, + 2361.083329, + 2361.101118, + 2361.117883, + 2361.133739, + 2361.148813, + 2361.163241, + 2361.177174, + 2361.190771, + 2361.204198, + 2361.217632, + 2361.231252, + 2361.245242, + 2361.259791, + 2361.275086, + 2361.291314, + 2361.308658, + 2361.327297, + 2361.347406, + 2361.369148, + 2361.39268, + 2361.418144, + 2361.445672, + 2361.475382, + 2361.507375, + 2361.541738, + 2361.578539, + 2361.617829, + 2361.659641, + 2361.703988, + 2361.750866, + 2361.800252, + 2361.852101, + 2361.906356, + 2361.962937, + 2362.02175, + 2362.082684, + 2362.145615, + 2362.210401, + 2362.276893, + 2362.344926, + 2362.414327, + 2362.484916, + 2362.556505, + 2362.6289, + 2362.701904, + 2362.775317, + 2362.848939, + 2362.92257, + 2362.996012, + 2363.069072, + 2363.141558, + 2363.213287, + 2363.284081, + 2363.353768, + 2363.422186, + 2363.489181, + 2363.554607, + 2363.618329, + 2363.680221, + 2363.740168, + 2363.798064, + 2363.853814, + 2363.907335, + 2363.958551, + 2364.007398, + 2364.053821, + 2364.097774, + 2364.139219, + 2364.178128, + 2364.214479, + 2364.24826, + 2364.279463, + 2364.308088, + 2364.334142, + 2364.357638, + 2364.378592, + 2364.397028, + 2364.412973, + 2364.42646, + 2364.437527, + 2364.446215, + 2364.45257, + 2364.456643, + 2364.458491, + 2364.458174, + 2364.455757, + 2364.451312, + 2364.444915, + 2364.436648, + 2364.426601, + 2364.414868, + 2364.401552, + 2364.38676, + 2364.370609, + 2364.353223, + 2364.334734, + 2364.315279, + 2364.295008, + 2364.274075, + 2364.252643, + 2364.230882, + 2364.20897, + 2364.187093, + 2364.16544, + 2364.144211, + 2364.123605, + 2364.103832, + 2364.0851, + 2364.067622, + 2364.051613, + 2364.037289, + 2364.024863, + 2364.014549, + 2364.006557, + 2364.001091, + 2363.998352, + 2363.998534, + 2364.00182, + 2364.008388, + 2364.018402, + 2364.032017, + 2364.049374, + 2364.070599, + 2364.095807, + 2364.125095, + 2364.158545, + 2364.196221, + 2364.238172, + 2364.284428, + 2364.335002, + 2364.389888, + 2364.449063, + 2364.512488, + 2364.580104, + 2364.651836, + 2364.727594, + 2364.807269, + 2364.89074, + 2364.977869, + 2365.068507, + 2365.16249, + 2365.259645, + 2365.359786, + 2365.462719, + 2365.568243, + 2365.676147, + 2365.786217, + 2365.898232, + 2366.011969, + 2366.127201, + 2366.243702, + 2366.361244, + 2366.479599, + 2366.598543, + 2366.717853, + 2366.837311, + 2366.9567, + 2367.075812, + 2367.194442, + 2367.312392, + 2367.429471, + 2367.545495, + 2367.660287, + 2367.773678, + 2367.885507, + 2367.995623, + 2368.103881, + 2368.210145, + 2368.314289, + 2368.416193, + 2368.51575, + 2368.612856, + 2368.707419, + 2368.799355, + 2368.888587, + 2368.975048, + 2369.058677, + 2369.139423, + 2369.217242, + 2369.292097, + 2369.363961, + 2369.432812, + 2369.498639, + 2369.561435, + 2369.621204, + 2369.677956, + 2369.731709, + 2369.782488, + 2369.830327, + 2369.875268, + 2369.917359, + 2369.956658, + 2369.993229, + 2370.027146, + 2370.058488, + 2370.087344, + 2370.11381, + 2370.137991, + 2370.159996, + 2370.179944, + 2370.197962, + 2370.214181, + 2370.228741, + 2370.241786, + 2370.253468, + 2370.263944, + 2370.273374, + 2370.281924, + 2370.289765, + 2370.297069, + 2370.304013, + 2370.310773, + 2370.317528, + 2370.324459, + 2370.331744, + 2370.339562, + 2370.34809, + 2370.357502, + 2370.367969, + 2370.379659, + 2370.392736, + 2370.407356, + 2370.423672, + 2370.44183, + 2370.461968, + 2370.484217, + 2370.508699, + 2370.535531, + 2370.564817, + 2370.596655, + 2370.631133, + 2370.668328, + 2370.708311, + 2370.751141, + 2370.796868, + 2370.845532, + 2370.897167, + 2370.951793, + 2371.009426, + 2371.070071, + 2371.133725, + 2371.20038, + 2371.270016, + 2371.342611, + 2371.418133, + 2371.496546, + 2371.577808, + 2371.661871, + 2371.748683, + 2371.838187, + 2371.930324, + 2372.02503, + 2372.122238, + 2372.22188, + 2372.323884, + 2372.428176, + 2372.534682, + 2372.643326, + 2372.754031, + 2372.866717, + 2372.981307, + 2373.097721, + 2373.215878, + 2373.335699, + 2373.457102, + 2373.580005, + 2373.704328, + 2373.829986, + 2373.956898, + 2374.08498, + 2374.214148, + 2374.344317, + 2374.475401, + 2374.607314, + 2374.73997, + 2374.87328, + 2375.007157, + 2375.14151, + 2375.276251, + 2375.411287, + 2375.54653, + 2375.681887, + 2375.817267, + 2375.952578, + 2376.087731, + 2376.222633, + 2376.357195, + 2376.491329, + 2376.624946, + 2376.75796, + 2376.890288, + 2377.021846, + 2377.152554, + 2377.282337, + 2377.411118, + 2377.538828, + 2377.665398, + 2377.790763, + 2377.914864, + 2378.037643, + 2378.159048, + 2378.279031, + 2378.397545, + 2378.514552, + 2378.630014, + 2378.743899, + 2378.856179, + 2378.966828, + 2379.075826, + 2379.183154, + 2379.288799, + 2379.392748, + 2379.494992, + 2379.595525, + 2379.694343, + 2379.791443, + 2379.886824, + 2379.980486, + 2380.072431, + 2380.16266, + 2380.251175, + 2380.33798, + 2380.423075, + 2380.506462, + 2380.588143, + 2380.668118, + 2380.746384, + 2380.822942, + 2380.897786, + 2380.970913, + 2381.042315, + 2381.111986, + 2381.179915, + 2381.246091, + 2381.310502, + 2381.373135, + 2381.433973, + 2381.493, + 2381.550199, + 2381.605551, + 2381.659036, + 2381.710635, + 2381.760327, + 2381.808091, + 2381.853905, + 2381.89775, + 2381.939603 + ], + "yaxis": "y4" + } + ], + "layout": { + "annotations": [ + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " Wind1VelX", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 1, + "yanchor": "bottom", + "yref": "paper" + }, + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " Azimuth", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 0.71875, + "yanchor": "bottom", + "yref": "paper" + }, + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " GenTq", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 0.4375, + "yanchor": "bottom", + "yref": "paper" + }, + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " GenPwr", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 0.15625, + "yanchor": "bottom", + "yref": "paper" + } + ], + "height": 1200, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "TurbId: 1 - Time = 19.995 (s)" + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ] + }, + "xaxis2": { + "anchor": "y2", + "domain": [ + 0, + 1 + ] + }, + "xaxis3": { + "anchor": "y3", + "domain": [ + 0, + 1 + ] + }, + "xaxis4": { + "anchor": "y4", + "domain": [ + 0, + 1 + ] + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0.84375, + 1 + ] + }, + "yaxis2": { + "anchor": "x2", + "domain": [ + 0.5625, + 0.71875 + ] + }, + "yaxis3": { + "anchor": "x3", + "domain": [ + 0.28125, + 0.4375 + ] + }, + "yaxis4": { + "anchor": "x4", + "domain": [ + 0, + 0.15625 + ] + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_sub\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m25\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:110\u001b[0m, in \u001b[0;36mRFInteractor.fast_sub\u001b[0;34m(self, N_plots_update)\u001b[0m\n\u001b[1;32m 107\u001b[0m count \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m: \n\u001b[0;32m--> 110\u001b[0m update_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubscriber\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose:\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28mprint\u001b[39m(update_)\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/socket.py:1018\u001b[0m, in \u001b[0;36mSocket.recv_json\u001b[0;34m(self, flags, **kwargs)\u001b[0m\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_json\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[1;32m 999\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a Python object as a message using json to serialize.\u001b[39;00m\n\u001b[1;32m 1000\u001b[0m \n\u001b[1;32m 1001\u001b[0m \u001b[38;5;124;03m Keyword arguments are passed on to json.loads\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`~Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1018\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1019\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: jsonapi\u001b[38;5;241m.\u001b[39mloads(buf, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs))\n", + "File \u001b[0;32m_zmq.py:1137\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:1172\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:1259\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._recv_copy\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "rfi.fast_sub(25)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tmp = rfi.subscriber.recv_json()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "20" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rfi.sub_dict[' Time'][-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tmp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for key, value in tmp.items():\n", + " if key not in rfi.sub_dict:\n", + " rfi.sub_dict[key] = [] \n", + " rfi.sub_dict[key].append(value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rfi.sub_dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "yoda", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat b/zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat new file mode 100644 index 0000000000..81527249cd --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat @@ -0,0 +1,12001 @@ + Time U Uh Ut V W u' v' w' u'w' u'v' v'w' TKE CTKE + 0.00 13.407 13.408 13.409 0.164 -0.158 1.295 0.164 -0.158 -0.204 0.212 -0.026 0.864 0.148 + 0.05 13.459 13.462 13.468 0.266 -0.419 1.346 0.266 -0.419 -0.564 0.359 -0.112 1.029 0.339 + 0.10 13.452 13.463 13.476 0.554 -0.583 1.339 0.554 -0.583 -0.781 0.742 -0.323 1.221 0.563 + 0.15 13.281 13.309 13.320 0.865 -0.523 1.169 0.865 -0.523 -0.611 1.011 -0.452 1.193 0.632 + 0.20 13.445 13.466 13.471 0.764 -0.334 1.332 0.764 -0.334 -0.445 1.018 -0.255 1.235 0.570 + 0.25 13.351 13.394 13.397 1.073 -0.260 1.238 1.073 -0.260 -0.321 1.329 -0.279 1.376 0.698 + 0.30 13.301 13.328 13.330 0.838 -0.245 1.189 0.838 -0.245 -0.291 0.996 -0.205 1.088 0.529 + 0.35 13.208 13.220 13.221 0.568 0.140 1.095 0.568 0.140 0.154 0.623 0.080 0.771 0.323 + 0.40 12.615 12.641 12.641 0.804 0.119 0.502 0.804 0.119 0.060 0.404 0.096 0.456 0.210 + 0.45 12.577 12.599 12.599 0.760 0.016 0.464 0.760 0.016 0.007 0.352 0.012 0.396 0.176 + 0.50 12.888 12.894 12.896 0.380 -0.258 0.775 0.380 -0.258 -0.200 0.295 -0.098 0.406 0.185 + 0.55 12.776 12.786 12.789 0.510 -0.292 0.663 0.510 -0.292 -0.193 0.338 -0.149 0.392 0.209 + 0.60 12.880 12.899 12.932 0.705 -0.924 0.767 0.705 -0.924 -0.709 0.541 -0.651 0.969 0.552 + 0.65 12.935 12.962 12.991 0.831 -0.870 0.822 0.831 -0.870 -0.715 0.683 -0.723 1.061 0.612 + 0.70 12.893 12.924 12.944 0.898 -0.721 0.780 0.898 -0.721 -0.562 0.700 -0.647 0.967 0.553 + 0.75 12.641 12.675 12.694 0.929 -0.693 0.528 0.929 -0.693 -0.366 0.491 -0.644 0.811 0.444 + 0.80 12.687 12.711 12.729 0.769 -0.686 0.574 0.769 -0.686 -0.394 0.442 -0.528 0.696 0.397 + 0.85 12.909 12.929 12.936 0.723 -0.409 0.796 0.723 -0.409 -0.326 0.576 -0.296 0.662 0.362 + 0.90 12.859 12.871 12.876 0.561 -0.362 0.746 0.561 -0.362 -0.270 0.419 -0.203 0.501 0.269 + 0.95 13.050 13.064 13.073 0.617 -0.469 0.937 0.617 -0.469 -0.439 0.579 -0.290 0.739 0.391 + 1.00 12.941 12.953 12.955 0.568 -0.211 0.828 0.568 -0.211 -0.174 0.470 -0.120 0.526 0.258 + 1.05 12.959 12.975 12.980 0.661 -0.337 0.846 0.661 -0.337 -0.285 0.559 -0.223 0.633 0.333 + 1.10 12.861 12.908 12.908 1.100 0.080 0.748 1.100 0.080 0.060 0.823 0.088 0.888 0.415 + 1.15 12.460 12.504 12.506 1.046 0.220 0.348 1.046 0.220 0.076 0.364 0.230 0.632 0.218 + 1.20 12.449 12.516 12.520 1.288 0.327 0.336 1.288 0.327 0.110 0.433 0.422 0.940 0.307 + 1.25 12.658 12.749 12.760 1.513 0.534 0.546 1.513 0.534 0.291 0.825 0.808 1.436 0.596 + 1.30 12.964 13.046 13.063 1.462 0.666 0.851 1.462 0.666 0.566 1.244 0.973 1.652 0.839 + 1.35 12.642 12.709 12.726 1.310 0.646 0.529 1.310 0.646 0.341 0.693 0.846 1.207 0.573 + 1.40 12.683 12.710 12.734 0.829 0.782 0.570 0.829 0.782 0.445 0.472 0.648 0.811 0.459 + 1.45 12.867 12.896 12.909 0.866 0.577 0.754 0.866 0.577 0.435 0.653 0.499 0.825 0.465 + 1.50 13.089 13.090 13.098 0.206 0.441 0.976 0.206 0.441 0.431 0.201 0.091 0.595 0.242 + 1.55 12.912 12.912 12.912 -0.089 0.045 0.799 -0.089 0.045 0.036 -0.071 -0.004 0.324 0.040 + 1.60 12.680 12.681 12.682 -0.120 -0.120 0.568 -0.120 -0.120 -0.068 -0.068 0.014 0.176 0.049 + 1.65 12.665 12.665 12.665 -0.005 0.014 0.552 -0.005 0.014 0.008 -0.003 -0.000 0.153 0.004 + 1.70 12.857 12.858 12.858 0.129 0.050 0.745 0.129 0.050 0.037 0.096 0.006 0.287 0.051 + 1.75 12.831 12.834 12.835 0.273 0.175 0.718 0.273 0.175 0.126 0.196 0.048 0.311 0.119 + 1.80 13.091 13.091 13.092 0.005 0.124 0.978 0.005 0.124 0.122 0.005 0.001 0.486 0.061 + 1.85 13.257 13.258 13.258 0.142 -0.077 1.144 0.142 -0.077 -0.089 0.162 -0.011 0.668 0.093 + 1.90 13.226 13.227 13.231 0.150 0.324 1.113 0.150 0.324 0.360 0.167 0.049 0.683 0.200 + 1.95 13.158 13.158 13.160 -0.041 0.237 1.045 -0.041 0.237 0.248 -0.043 -0.010 0.575 0.126 + 2.00 12.887 12.888 12.891 0.211 0.242 0.774 0.211 0.242 0.187 0.164 0.051 0.351 0.127 + 2.05 13.148 13.150 13.151 0.232 -0.145 1.035 0.232 -0.145 -0.150 0.241 -0.034 0.573 0.143 + 2.10 13.104 13.108 13.114 0.337 -0.378 0.991 0.337 -0.378 -0.374 0.334 -0.127 0.619 0.259 + 2.15 12.552 12.555 12.568 0.296 -0.576 0.439 0.296 -0.576 -0.253 0.130 -0.170 0.306 0.166 + 2.20 12.077 12.079 12.080 -0.179 -0.173 -0.036 -0.179 -0.173 0.006 0.006 0.031 0.032 0.016 + 2.25 11.861 11.861 11.862 -0.129 -0.111 -0.252 -0.129 -0.111 0.028 0.032 0.014 0.046 0.023 + 2.30 11.981 11.981 11.984 0.056 -0.255 -0.132 0.056 -0.255 0.034 -0.007 -0.014 0.043 0.019 + 2.35 11.905 11.908 11.909 0.277 -0.150 -0.208 0.277 -0.150 0.031 -0.058 -0.041 0.071 0.039 + 2.40 11.879 11.895 11.896 0.618 0.154 -0.234 0.618 0.154 -0.036 -0.144 0.095 0.230 0.088 + 2.45 12.078 12.097 12.098 0.679 0.138 -0.035 0.679 0.138 -0.005 -0.024 0.093 0.241 0.048 + 2.50 12.120 12.155 12.158 0.931 -0.232 0.007 0.931 -0.232 -0.002 0.006 -0.216 0.461 0.108 + 2.55 12.114 12.135 12.136 0.721 -0.134 0.001 0.721 -0.134 -0.000 0.001 -0.097 0.269 0.048 + 2.60 12.084 12.093 12.094 0.466 -0.175 -0.029 0.466 -0.175 0.005 -0.014 -0.081 0.124 0.041 + 2.65 12.256 12.263 12.273 0.392 -0.510 0.143 0.392 -0.510 -0.073 0.056 -0.200 0.217 0.110 + 2.70 12.138 12.144 12.159 0.369 -0.616 0.025 0.369 -0.616 -0.016 0.009 -0.227 0.258 0.114 + 2.75 12.124 12.126 12.128 0.255 -0.177 0.011 0.255 -0.177 -0.002 0.003 -0.045 0.048 0.023 + 2.80 11.984 11.985 11.988 0.186 -0.241 -0.129 0.186 -0.241 0.031 -0.024 -0.045 0.055 0.030 + 2.85 12.065 12.066 12.066 0.136 -0.146 -0.048 0.136 -0.146 0.007 -0.007 -0.020 0.021 0.011 + 2.90 11.901 11.902 11.904 0.124 -0.241 -0.212 0.124 -0.241 0.051 -0.026 -0.030 0.059 0.032 + 2.95 11.809 11.814 11.814 0.339 0.066 -0.304 0.339 0.066 -0.020 -0.103 0.022 0.106 0.054 + 3.00 11.952 11.953 11.953 0.147 -0.106 -0.161 0.147 -0.106 0.017 -0.024 -0.016 0.030 0.017 + 3.05 12.044 12.044 12.055 0.010 0.500 -0.068 0.010 0.500 -0.034 -0.001 0.005 0.128 0.017 + 3.10 12.139 12.141 12.144 -0.193 0.263 0.026 -0.193 0.263 0.007 -0.005 -0.051 0.054 0.026 + 3.15 12.246 12.246 12.257 -0.032 0.532 0.133 -0.032 0.532 0.071 -0.004 -0.017 0.151 0.036 + 3.20 12.393 12.395 12.424 0.178 0.862 0.280 0.178 0.862 0.242 0.050 0.153 0.427 0.145 + 3.25 12.098 12.098 12.132 0.036 0.915 -0.015 0.036 0.915 -0.014 -0.001 0.033 0.420 0.018 + 3.30 11.961 11.964 12.005 -0.300 0.985 -0.152 -0.300 0.985 -0.150 0.046 -0.296 0.542 0.167 + 3.35 11.881 11.881 11.921 -0.020 0.980 -0.232 -0.020 0.980 -0.228 0.005 -0.019 0.508 0.114 + 3.40 11.900 11.900 11.936 -0.125 0.923 -0.213 -0.125 0.923 -0.197 0.027 -0.115 0.457 0.115 + 3.45 12.125 12.126 12.161 -0.132 0.932 0.012 -0.132 0.932 0.011 -0.002 -0.123 0.443 0.062 + 3.50 12.100 12.101 12.163 -0.174 1.229 -0.013 -0.174 1.229 -0.016 0.002 -0.214 0.770 0.107 + 3.55 11.981 11.988 12.038 -0.431 1.090 -0.132 -0.431 1.090 -0.144 0.057 -0.469 0.695 0.247 + 3.60 12.118 12.118 12.154 -0.131 0.930 0.005 -0.131 0.930 0.004 -0.001 -0.122 0.441 0.061 + 3.65 12.148 12.149 12.193 -0.151 1.032 0.036 -0.151 1.032 0.037 -0.005 -0.156 0.544 0.080 + 3.70 12.233 12.233 12.272 -0.027 0.984 0.120 -0.027 0.984 0.118 -0.003 -0.026 0.492 0.061 + 3.75 12.541 12.541 12.570 0.087 0.854 0.428 0.087 0.854 0.365 0.037 0.074 0.460 0.187 + 3.80 12.402 12.403 12.431 0.113 0.845 0.289 0.113 0.845 0.244 0.033 0.095 0.405 0.132 + 3.85 12.188 12.188 12.204 0.095 0.608 0.075 0.095 0.608 0.046 0.007 0.058 0.192 0.037 + 3.90 12.007 12.007 12.015 0.107 0.438 -0.106 0.107 0.438 -0.046 -0.011 0.047 0.107 0.034 + 3.95 11.915 11.915 11.928 -0.038 0.550 -0.197 -0.038 0.550 -0.109 0.008 -0.021 0.172 0.055 + 4.00 11.962 11.963 11.972 0.095 0.469 -0.150 0.095 0.469 -0.071 -0.014 0.045 0.126 0.042 + 4.05 12.224 12.228 12.237 -0.329 0.448 0.111 -0.329 0.448 0.050 -0.037 -0.147 0.161 0.080 + 4.10 12.280 12.291 12.306 -0.529 0.594 0.167 -0.529 0.594 0.099 -0.088 -0.314 0.330 0.171 + 4.15 12.202 12.205 12.212 -0.234 0.434 0.090 -0.234 0.434 0.039 -0.021 -0.102 0.126 0.055 + 4.20 11.876 11.876 11.885 -0.029 0.453 -0.237 -0.029 0.453 -0.107 0.007 -0.013 0.131 0.054 + 4.25 11.894 11.895 11.905 0.171 0.477 -0.219 0.171 0.477 -0.104 -0.037 0.082 0.152 0.069 + 4.30 11.960 11.962 11.969 0.222 0.422 -0.153 0.222 0.422 -0.065 -0.034 0.094 0.125 0.059 + 4.35 12.152 12.155 12.156 0.256 0.189 0.039 0.256 0.189 0.007 0.010 0.048 0.051 0.025 + 4.40 12.233 12.234 12.234 0.136 -0.013 0.120 0.136 -0.013 -0.002 0.016 -0.002 0.017 0.008 + 4.45 11.882 11.884 11.884 0.198 -0.012 -0.231 0.198 -0.012 0.003 -0.046 -0.002 0.046 0.023 + 4.50 11.987 11.987 11.987 0.022 -0.058 -0.126 0.022 -0.058 0.007 -0.003 -0.001 0.010 0.004 + 4.55 12.099 12.104 12.109 -0.343 0.339 -0.013 -0.343 0.339 -0.005 0.005 -0.116 0.116 0.058 + 4.60 12.318 12.321 12.325 -0.264 0.299 0.205 -0.264 0.299 0.061 -0.054 -0.079 0.101 0.057 + 4.65 11.937 11.940 11.956 -0.271 0.617 -0.176 -0.271 0.617 -0.109 0.048 -0.167 0.242 0.102 + 4.70 11.668 11.671 11.704 -0.256 0.882 -0.445 -0.256 0.882 -0.392 0.114 -0.226 0.521 0.233 + 4.75 11.792 11.800 11.823 -0.448 0.731 -0.321 -0.448 0.731 -0.235 0.144 -0.328 0.419 0.214 + 4.80 11.723 11.729 11.737 -0.381 0.433 -0.390 -0.381 0.433 -0.169 0.148 -0.165 0.242 0.139 + 4.85 11.713 11.714 11.722 -0.165 0.438 -0.400 -0.165 0.438 -0.175 0.066 -0.072 0.189 0.100 + 4.90 11.459 11.460 11.473 0.099 0.545 -0.653 0.099 0.545 -0.356 -0.065 0.054 0.367 0.183 + 4.95 11.735 11.735 11.747 -0.097 0.528 -0.378 -0.097 0.528 -0.200 0.037 -0.051 0.216 0.105 + 5.00 11.466 11.469 11.473 0.251 0.308 -0.647 0.251 0.308 -0.199 -0.162 0.077 0.288 0.134 + 5.05 11.104 11.105 11.116 0.141 0.496 -1.009 0.141 0.496 -0.500 -0.142 0.070 0.641 0.262 + 5.10 11.085 11.085 11.086 -0.048 0.142 -1.028 -0.048 0.142 -0.146 0.050 -0.007 0.539 0.077 + 5.15 11.021 11.026 11.026 -0.310 -0.100 -1.092 -0.310 -0.100 0.109 0.338 0.031 0.649 0.178 + 5.20 10.690 10.698 10.701 -0.414 -0.271 -1.423 -0.414 -0.271 0.385 0.589 0.112 1.135 0.356 + 5.25 10.479 10.479 10.479 -0.067 0.084 -1.634 -0.067 0.084 -0.138 0.109 -0.006 1.341 0.088 + 5.30 10.750 10.750 10.751 -0.131 0.114 -1.363 -0.131 0.114 -0.155 0.179 -0.015 0.944 0.119 + 5.35 10.804 10.806 10.808 -0.191 0.217 -1.308 -0.191 0.217 -0.283 0.250 -0.041 0.898 0.190 + 5.40 10.742 10.746 10.749 -0.276 0.248 -1.371 -0.276 0.248 -0.340 0.379 -0.068 1.008 0.257 + 5.45 10.857 10.861 10.863 -0.301 0.159 -1.256 -0.301 0.159 -0.200 0.378 -0.048 0.846 0.215 + 5.50 10.910 10.926 10.926 -0.590 -0.036 -1.203 -0.590 -0.036 0.043 0.710 0.021 0.898 0.356 + 5.55 10.984 10.987 10.992 -0.267 -0.327 -1.129 -0.267 -0.327 0.369 0.301 0.087 0.726 0.242 + 5.60 11.195 11.195 11.195 -0.143 0.017 -0.918 -0.143 0.017 -0.016 0.131 -0.002 0.432 0.066 + 5.65 11.028 11.028 11.029 0.015 0.177 -1.085 0.015 0.177 -0.192 -0.017 0.003 0.604 0.096 + 5.70 10.832 10.832 10.848 0.052 0.588 -1.281 0.052 0.588 -0.753 -0.067 0.031 0.995 0.378 + 5.75 11.050 11.051 11.054 0.171 0.238 -1.063 0.171 0.238 -0.253 -0.181 0.041 0.608 0.157 + 5.80 11.073 11.078 11.085 0.329 0.369 -1.039 0.329 0.369 -0.384 -0.342 0.122 0.663 0.264 + 5.85 10.713 10.713 10.725 -0.066 0.493 -1.400 -0.066 0.493 -0.691 0.092 -0.032 1.104 0.349 + 5.90 10.802 10.802 10.815 0.054 0.519 -1.311 0.054 0.519 -0.680 -0.071 0.028 0.995 0.342 + 5.95 10.612 10.613 10.626 0.178 0.517 -1.501 0.178 0.517 -0.775 -0.267 0.092 1.276 0.413 + 6.00 10.583 10.584 10.602 0.158 0.616 -1.530 0.158 0.616 -0.943 -0.241 0.097 1.373 0.489 + 6.05 10.148 10.151 10.177 0.263 0.729 -1.965 0.263 0.729 -1.432 -0.517 0.192 2.231 0.767 + 6.10 10.435 10.436 10.444 0.107 0.419 -1.678 0.107 0.419 -0.703 -0.179 0.045 1.501 0.364 + 6.15 10.487 10.489 10.506 0.204 0.598 -1.626 0.204 0.598 -0.972 -0.331 0.122 1.521 0.517 + 6.20 10.096 10.096 10.113 -0.008 0.588 -2.017 -0.008 0.588 -1.186 0.017 -0.005 2.207 0.593 + 6.25 10.066 10.068 10.074 0.162 0.374 -2.047 0.162 0.374 -0.764 -0.332 0.061 2.177 0.418 + 6.30 10.354 10.355 10.361 -0.160 0.344 -1.759 -0.160 0.344 -0.604 0.281 -0.055 1.618 0.334 + 6.35 10.233 10.235 10.244 -0.231 0.425 -1.880 -0.231 0.425 -0.800 0.434 -0.098 1.885 0.458 + 6.40 10.286 10.290 10.292 -0.288 0.237 -1.827 -0.288 0.237 -0.433 0.527 -0.068 1.739 0.343 + 6.45 10.173 10.185 10.187 -0.487 0.190 -1.939 -0.487 0.190 -0.368 0.944 -0.092 2.017 0.509 + 6.50 10.043 10.052 10.053 -0.431 0.137 -2.070 -0.431 0.137 -0.284 0.892 -0.059 2.245 0.469 + 6.55 10.264 10.277 10.281 -0.506 0.301 -1.849 -0.506 0.301 -0.556 0.936 -0.152 1.882 0.550 + 6.60 10.014 10.052 10.056 -0.863 0.283 -2.098 -0.863 0.283 -0.594 1.812 -0.244 2.614 0.961 + 6.65 9.838 9.915 9.915 -1.231 0.060 -2.274 -1.231 0.060 -0.137 2.801 -0.074 3.346 1.403 + 6.70 9.860 9.931 9.931 -1.181 0.041 -2.253 -1.181 0.041 -0.091 2.661 -0.048 3.236 1.331 + 6.75 9.926 9.989 9.989 -1.115 0.000 -2.187 -1.115 0.000 -0.000 2.438 -0.000 3.012 1.219 + 6.80 10.129 10.172 10.172 -0.928 0.105 -1.983 -0.928 0.105 -0.207 1.841 -0.097 2.403 0.928 + 6.85 10.015 10.067 10.071 -1.023 0.285 -2.098 -1.023 0.285 -0.597 2.146 -0.291 2.765 1.123 + 6.90 9.975 10.014 10.016 -0.882 0.203 -2.138 -0.882 0.203 -0.434 1.885 -0.179 2.695 0.972 + 6.95 10.395 10.434 10.434 -0.901 0.013 -1.718 -0.901 0.013 -0.022 1.549 -0.012 1.883 0.775 + 7.00 10.415 10.455 10.455 -0.914 -0.021 -1.697 -0.914 -0.021 0.036 1.551 0.020 1.858 0.776 + 7.05 10.647 10.675 10.677 -0.767 -0.206 -1.466 -0.767 -0.206 0.302 1.124 0.158 1.390 0.587 + 7.10 10.478 10.529 10.538 -1.031 -0.436 -1.634 -1.031 -0.436 0.712 1.685 0.449 1.962 0.942 + 7.15 10.616 10.645 10.671 -0.780 -0.747 -1.497 -0.780 -0.747 1.119 1.167 0.583 1.703 0.859 + 7.20 10.418 10.469 10.510 -1.036 -0.921 -1.695 -1.036 -0.921 1.562 1.757 0.955 2.398 1.268 + 7.25 10.173 10.219 10.271 -0.970 -1.033 -1.940 -0.970 -1.033 2.004 1.881 1.002 2.885 1.463 + 7.30 10.419 10.454 10.471 -0.849 -0.601 -1.694 -0.849 -0.601 1.019 1.438 0.511 1.976 0.918 + 7.35 10.485 10.516 10.535 -0.807 -0.632 -1.628 -0.807 -0.632 1.029 1.314 0.510 1.851 0.873 + 7.40 10.185 10.215 10.236 -0.783 -0.652 -1.928 -0.783 -0.652 1.257 1.509 0.510 2.377 1.015 + 7.45 10.153 10.166 10.198 -0.525 -0.798 -1.960 -0.525 -0.798 1.565 1.030 0.419 2.378 0.960 + 7.50 10.237 10.284 10.340 -0.984 -1.075 -1.876 -0.984 -1.075 2.018 1.846 1.058 2.822 1.466 + 7.55 10.021 10.090 10.121 -1.177 -0.798 -2.092 -1.177 -0.798 1.668 2.463 0.939 3.199 1.560 + 7.60 9.976 10.037 10.076 -1.103 -0.885 -2.137 -1.103 -0.885 1.892 2.357 0.977 3.283 1.588 + 7.65 10.177 10.229 10.247 -1.022 -0.617 -1.935 -1.022 -0.617 1.194 1.979 0.631 2.586 1.198 + 7.70 10.059 10.098 10.099 -0.889 -0.164 -2.054 -0.889 -0.164 0.337 1.825 0.146 2.517 0.931 + 7.75 9.889 9.950 9.953 -1.102 -0.235 -2.224 -1.102 -0.235 0.522 2.451 0.259 3.108 1.260 + 7.80 10.119 10.154 10.167 -0.834 -0.527 -1.993 -0.834 -0.527 1.050 1.662 0.439 2.473 1.007 + 7.85 10.005 10.111 10.119 -1.460 -0.397 -2.108 -1.460 -0.397 0.838 3.078 0.580 3.367 1.621 + 7.90 10.043 10.121 10.128 -1.250 -0.382 -2.070 -1.250 -0.382 0.791 2.587 0.477 2.996 1.373 + 7.95 10.160 10.229 10.245 -1.185 -0.565 -1.953 -1.185 -0.565 1.102 2.314 0.669 2.768 1.324 + 8.00 10.203 10.258 10.272 -1.062 -0.543 -1.910 -1.062 -0.543 1.038 2.029 0.577 2.536 1.176 + 8.05 10.577 10.631 10.652 -1.065 -0.675 -1.536 -1.065 -0.675 1.037 1.636 0.719 1.974 1.033 + 8.10 10.602 10.697 10.712 -1.426 -0.558 -1.511 -1.426 -0.558 0.843 2.154 0.795 2.313 1.223 + 8.15 10.551 10.633 10.647 -1.315 -0.552 -1.562 -1.315 -0.552 0.863 2.053 0.726 2.236 1.171 + 8.20 10.901 10.953 10.979 -1.064 -0.765 -1.212 -1.064 -0.765 0.927 1.289 0.814 1.593 0.892 + 8.25 10.981 11.012 11.060 -0.835 -1.025 -1.132 -0.835 -1.025 1.160 0.945 0.856 1.515 0.862 + 8.30 10.948 10.975 11.013 -0.770 -0.916 -1.165 -0.770 -0.916 1.067 0.896 0.705 1.394 0.781 + 8.35 11.236 11.255 11.276 -0.658 -0.683 -0.877 -0.658 -0.683 0.599 0.577 0.450 0.835 0.473 + 8.40 11.418 11.459 11.493 -0.967 -0.889 -0.695 -0.967 -0.889 0.618 0.672 0.859 1.104 0.627 + 8.45 11.428 11.468 11.521 -0.958 -1.103 -0.685 -0.958 -1.103 0.755 0.656 1.056 1.301 0.727 + 8.50 11.355 11.399 11.451 -1.009 -1.089 -0.758 -1.009 -1.089 0.825 0.765 1.098 1.389 0.786 + 8.55 11.422 11.437 11.492 -0.592 -1.117 -0.691 -0.592 -1.117 0.771 0.409 0.661 1.037 0.547 + 8.60 11.475 11.486 11.534 -0.490 -1.058 -0.637 -0.490 -1.058 0.675 0.312 0.519 0.883 0.453 + 8.65 11.239 11.251 11.329 -0.519 -1.331 -0.874 -0.519 -1.331 1.163 0.453 0.690 1.402 0.713 + 8.70 11.343 11.353 11.382 -0.480 -0.807 -0.770 -0.480 -0.807 0.621 0.369 0.387 0.737 0.410 + 8.75 11.286 11.318 11.343 -0.850 -0.752 -0.827 -0.850 -0.752 0.622 0.703 0.639 0.986 0.568 + 8.80 11.306 11.341 11.355 -0.890 -0.562 -0.807 -0.890 -0.562 0.453 0.718 0.500 0.880 0.493 + 8.85 11.029 11.091 11.093 -1.179 -0.172 -1.084 -1.179 -0.172 0.186 1.278 0.202 1.297 0.653 + 8.90 11.025 11.072 11.072 -1.025 0.024 -1.088 -1.025 0.024 -0.027 1.115 -0.025 1.117 0.558 + 8.95 11.132 11.147 11.157 -0.595 -0.450 -0.981 -0.595 -0.450 0.441 0.584 0.267 0.759 0.389 + 9.00 11.214 11.233 11.238 -0.642 -0.352 -0.898 -0.642 -0.352 0.316 0.577 0.226 0.672 0.348 + 9.05 10.971 10.985 10.986 -0.552 -0.156 -1.142 -0.552 -0.156 0.178 0.631 0.086 0.816 0.330 + 9.10 10.950 10.971 10.972 -0.682 -0.107 -1.163 -0.682 -0.107 0.124 0.793 0.073 0.914 0.403 + 9.15 10.629 10.659 10.662 -0.796 0.258 -1.484 -0.796 0.258 -0.382 1.180 -0.205 1.450 0.629 + 9.20 10.348 10.378 10.380 -0.795 0.209 -1.765 -0.795 0.209 -0.368 1.403 -0.166 1.895 0.730 + 9.25 10.407 10.441 10.442 -0.844 -0.112 -1.706 -0.844 -0.112 0.190 1.440 0.094 1.817 0.728 + 9.30 10.463 10.485 10.491 -0.687 -0.354 -1.650 -0.687 -0.354 0.583 1.133 0.243 1.660 0.649 + 9.35 10.470 10.488 10.492 -0.604 -0.293 -1.643 -0.604 -0.293 0.481 0.992 0.177 1.574 0.558 + 9.40 10.765 10.798 10.798 -0.840 -0.065 -1.348 -0.840 -0.065 0.087 1.132 0.054 1.263 0.568 + 9.45 10.986 11.017 11.020 -0.815 -0.277 -1.126 -0.815 -0.277 0.312 0.918 0.226 1.005 0.498 + 9.50 11.132 11.170 11.170 -0.919 -0.075 -0.981 -0.919 -0.075 0.074 0.901 0.069 0.905 0.453 + 9.55 11.181 11.224 11.225 -0.988 -0.155 -0.932 -0.988 -0.155 0.144 0.921 0.153 0.935 0.472 + 9.60 10.814 10.841 10.843 -0.772 -0.217 -1.299 -0.772 -0.217 0.282 1.003 0.167 1.165 0.527 + 9.65 10.573 10.619 10.619 -0.995 -0.072 -1.540 -0.995 -0.072 0.111 1.532 0.072 1.683 0.769 + 9.70 10.058 10.129 10.129 -1.197 0.138 -2.055 -1.197 0.138 -0.283 2.460 -0.165 2.838 1.241 + 9.75 10.072 10.128 10.131 -1.061 0.258 -2.041 -1.061 0.258 -0.527 2.166 -0.274 2.679 1.123 + 9.80 10.251 10.319 10.322 -1.185 0.235 -1.862 -1.185 0.235 -0.438 2.207 -0.279 2.464 1.134 + 9.85 10.264 10.326 10.327 -1.128 -0.142 -1.849 -1.128 -0.142 0.262 2.086 0.160 2.355 1.054 + 9.90 10.342 10.373 10.373 -0.801 -0.141 -1.771 -0.801 -0.141 0.250 1.419 0.113 1.900 0.723 + 9.95 10.269 10.294 10.299 -0.712 0.332 -1.844 -0.712 0.332 -0.613 1.313 -0.237 2.009 0.734 + 10.00 10.256 10.298 10.301 -0.929 0.225 -1.857 -0.929 0.225 -0.418 1.725 -0.209 2.181 0.894 + 10.05 10.468 10.512 10.514 -0.957 0.210 -1.644 -0.957 0.210 -0.346 1.573 -0.201 1.832 0.812 + 10.10 10.860 10.901 10.901 -0.938 -0.088 -1.253 -0.938 -0.088 0.110 1.175 0.083 1.228 0.592 + 10.15 10.790 10.807 10.810 -0.605 0.293 -1.323 -0.605 0.293 -0.387 0.800 -0.177 1.101 0.453 + 10.20 10.805 10.822 10.839 -0.613 0.596 -1.308 -0.613 0.596 -0.779 0.802 -0.365 1.221 0.588 + 10.25 11.078 11.091 11.103 -0.540 0.525 -1.035 -0.540 0.525 -0.544 0.559 -0.284 0.820 0.415 + 10.30 11.062 11.068 11.088 -0.372 0.660 -1.051 -0.372 0.660 -0.694 0.390 -0.245 0.839 0.416 + 10.35 11.162 11.169 11.201 -0.386 0.846 -0.950 -0.386 0.846 -0.804 0.367 -0.326 0.884 0.471 + 10.40 11.230 11.238 11.260 -0.433 0.705 -0.883 -0.433 0.705 -0.622 0.383 -0.305 0.732 0.396 + 10.45 11.315 11.319 11.345 -0.295 0.776 -0.798 -0.295 0.776 -0.619 0.236 -0.229 0.663 0.351 + 10.50 11.528 11.540 11.563 -0.521 0.726 -0.585 -0.521 0.726 -0.425 0.305 -0.379 0.570 0.323 + 10.55 11.099 11.108 11.119 -0.448 0.490 -1.014 -0.448 0.490 -0.496 0.454 -0.219 0.734 0.354 + 10.60 11.273 11.276 11.293 -0.281 0.618 -0.840 -0.281 0.618 -0.519 0.236 -0.174 0.584 0.298 + 10.65 11.336 11.340 11.364 -0.324 0.736 -0.777 -0.324 0.736 -0.572 0.252 -0.238 0.625 0.334 + 10.70 11.054 11.063 11.079 -0.453 0.584 -1.059 -0.453 0.584 -0.619 0.480 -0.265 0.834 0.413 + 10.75 11.416 11.417 11.418 -0.154 -0.107 -0.697 -0.154 -0.107 0.074 0.108 0.016 0.260 0.066 + 10.80 11.331 11.332 11.332 0.024 -0.109 -0.781 0.024 -0.109 0.085 -0.019 -0.003 0.311 0.044 + 10.85 11.032 11.032 11.033 0.031 0.123 -1.080 0.031 0.123 -0.133 -0.034 0.004 0.592 0.069 + 10.90 11.207 11.208 11.210 -0.182 0.179 -0.906 -0.182 0.179 -0.162 0.165 -0.033 0.443 0.117 + 10.95 11.620 11.620 11.622 -0.018 0.227 -0.493 -0.018 0.227 -0.112 0.009 -0.004 0.148 0.056 + 11.00 11.616 11.616 11.617 0.042 0.153 -0.496 0.042 0.153 -0.076 -0.021 0.006 0.136 0.040 + 11.05 11.584 11.587 11.587 -0.248 -0.002 -0.528 -0.248 -0.002 0.001 0.131 0.000 0.170 0.065 + 11.10 11.559 11.562 11.562 -0.257 0.074 -0.554 -0.257 0.074 -0.041 0.142 -0.019 0.189 0.075 + 11.15 11.582 11.585 11.585 -0.252 0.001 -0.530 -0.252 0.001 -0.000 0.134 -0.000 0.173 0.067 + 11.20 11.445 11.446 11.446 0.039 -0.101 -0.667 0.039 -0.101 0.068 -0.026 -0.004 0.229 0.036 + 11.25 11.274 11.274 11.275 0.056 0.197 -0.839 0.056 0.197 -0.166 -0.047 0.011 0.373 0.086 + 11.30 11.160 11.163 11.164 -0.267 0.148 -0.953 -0.267 0.148 -0.141 0.254 -0.039 0.501 0.147 + 11.35 11.121 11.123 11.123 -0.198 -0.030 -0.992 -0.198 -0.030 0.030 0.197 0.006 0.512 0.100 + 11.40 11.307 11.317 11.318 -0.488 0.123 -0.806 -0.488 0.123 -0.099 0.394 -0.060 0.452 0.205 + 11.45 10.958 10.974 10.976 -0.583 0.209 -1.154 -0.583 0.209 -0.241 0.673 -0.122 0.858 0.363 + 11.50 10.680 10.703 10.704 -0.697 -0.106 -1.433 -0.697 -0.106 0.151 0.999 0.074 1.275 0.507 + 11.55 10.691 10.699 10.701 -0.423 -0.218 -1.422 -0.423 -0.218 0.310 0.602 0.092 1.124 0.342 + 11.60 10.613 10.621 10.622 -0.419 0.165 -1.500 -0.419 0.165 -0.248 0.628 -0.069 1.227 0.340 + 11.65 10.409 10.413 10.413 -0.311 -0.012 -1.704 -0.311 -0.012 0.020 0.530 0.004 1.500 0.265 + 11.70 10.363 10.378 10.378 -0.558 -0.063 -1.750 -0.558 -0.063 0.110 0.977 0.035 1.689 0.492 + 11.75 10.499 10.512 10.513 -0.521 0.135 -1.614 -0.521 0.135 -0.218 0.841 -0.071 1.447 0.436 + 11.80 10.543 10.552 10.553 -0.448 0.154 -1.570 -0.448 0.154 -0.241 0.704 -0.069 1.345 0.373 + 11.85 10.723 10.738 10.739 -0.569 -0.155 -1.390 -0.569 -0.155 0.216 0.791 0.088 1.140 0.413 + 11.90 10.563 10.589 10.589 -0.737 0.089 -1.550 -0.737 0.089 -0.137 1.143 -0.065 1.477 0.576 + 11.95 10.760 10.780 10.797 -0.650 0.616 -1.353 -0.650 0.616 -0.834 0.879 -0.400 1.316 0.638 + 12.00 11.053 11.092 11.100 -0.927 0.423 -1.060 -0.927 0.423 -0.449 0.982 -0.392 1.081 0.574 + 12.05 11.391 11.429 11.431 -0.926 0.203 -0.722 -0.926 0.203 -0.147 0.668 -0.188 0.710 0.355 + 12.10 11.438 11.478 11.483 -0.953 0.340 -0.675 -0.953 0.340 -0.229 0.643 -0.324 0.739 0.378 + 12.15 11.359 11.415 11.421 -1.131 0.359 -0.754 -1.131 0.359 -0.270 0.853 -0.406 0.988 0.491 + 12.20 11.317 11.366 11.374 -1.058 0.411 -0.796 -1.058 0.411 -0.327 0.842 -0.435 0.961 0.501 + 12.25 11.351 11.370 11.380 -0.659 0.489 -0.762 -0.659 0.489 -0.372 0.502 -0.322 0.627 0.352 + 12.30 11.533 11.545 11.555 -0.508 0.497 -0.579 -0.508 0.497 -0.288 0.294 -0.252 0.420 0.241 + 12.35 11.242 11.243 11.246 0.107 0.252 -0.871 0.107 0.252 -0.219 -0.093 0.027 0.416 0.120 + 12.40 10.979 10.981 10.981 0.179 0.064 -1.133 0.179 0.064 -0.073 -0.203 0.012 0.660 0.108 + 12.45 10.970 10.973 10.976 -0.251 0.267 -1.143 -0.251 0.267 -0.305 0.286 -0.067 0.720 0.212 + 12.50 10.406 10.411 10.412 -0.324 0.170 -1.707 -0.324 0.170 -0.291 0.553 -0.055 1.524 0.314 + 12.55 10.232 10.233 10.239 -0.143 0.338 -1.881 -0.143 0.338 -0.635 0.270 -0.048 1.835 0.346 + 12.60 10.246 10.247 10.249 0.165 0.194 -1.867 0.165 0.194 -0.363 -0.308 0.032 1.775 0.239 + 12.65 10.387 10.389 10.395 0.193 0.350 -1.726 0.193 0.350 -0.603 -0.332 0.067 1.568 0.346 + 12.70 10.244 10.247 10.256 0.242 0.435 -1.869 0.242 0.435 -0.813 -0.452 0.105 1.871 0.468 + 12.75 10.215 10.217 10.252 0.165 0.852 -1.897 0.165 0.852 -1.617 -0.314 0.141 2.177 0.827 + 12.80 10.279 10.285 10.346 0.364 1.119 -1.834 0.364 1.119 -2.053 -0.668 0.408 2.374 1.098 + 12.85 10.300 10.307 10.420 0.383 1.526 -1.813 0.383 1.526 -2.766 -0.694 0.584 2.880 1.455 + 12.90 10.065 10.068 10.138 0.240 1.190 -2.048 0.240 1.190 -2.438 -0.492 0.286 2.834 1.252 + 12.95 10.004 10.006 10.041 0.198 0.842 -2.109 0.198 0.842 -1.775 -0.417 0.166 2.598 0.915 + 13.00 10.453 10.455 10.473 0.194 0.612 -1.660 0.194 0.612 -1.016 -0.322 0.119 1.584 0.536 + 13.05 10.713 10.732 10.754 0.641 0.696 -1.400 0.641 0.696 -0.975 -0.897 0.446 1.428 0.699 + 13.10 10.598 10.637 10.660 0.906 0.707 -1.515 0.906 0.707 -1.071 -1.372 0.641 1.808 0.928 + 13.15 10.729 10.775 10.808 0.993 0.841 -1.384 0.993 0.841 -1.164 -1.374 0.835 1.804 0.993 + 13.20 10.487 10.548 10.596 1.128 1.009 -1.626 1.128 1.009 -1.640 -1.834 1.138 2.467 1.355 + 13.25 10.391 10.435 10.494 0.963 1.111 -1.722 0.963 1.111 -1.912 -1.658 1.070 2.563 1.374 + 13.30 10.287 10.313 10.406 0.733 1.385 -1.826 0.733 1.385 -2.529 -1.338 1.015 2.895 1.518 + 13.35 10.478 10.514 10.577 0.858 1.158 -1.634 0.858 1.158 -1.893 -1.403 0.994 2.375 1.279 + 13.40 11.119 11.138 11.202 0.654 1.196 -0.994 0.654 1.196 -1.188 -0.650 0.782 1.423 0.782 + 13.45 11.024 11.044 11.111 0.653 1.219 -1.089 0.653 1.219 -1.327 -0.711 0.797 1.550 0.852 + 13.50 10.900 10.961 11.022 1.148 1.156 -1.212 1.148 1.156 -1.401 -1.392 1.327 2.062 1.190 + 13.55 11.242 11.260 11.300 0.631 0.949 -0.870 0.631 0.949 -0.826 -0.549 0.599 1.028 0.579 + 13.60 11.132 11.141 11.177 0.436 0.900 -0.981 0.436 0.900 -0.883 -0.427 0.392 0.981 0.528 + 13.65 11.251 11.259 11.277 0.430 0.640 -0.862 0.430 0.640 -0.552 -0.371 0.275 0.669 0.360 + 13.70 11.261 11.266 11.280 0.339 0.554 -0.852 0.339 0.554 -0.472 -0.288 0.188 0.574 0.292 + 13.75 11.087 11.107 11.127 0.668 0.660 -1.025 0.668 0.660 -0.677 -0.685 0.441 0.967 0.530 + 13.80 11.061 11.068 11.087 0.399 0.642 -1.052 0.399 0.642 -0.676 -0.420 0.256 0.839 0.418 + 13.85 11.160 11.168 11.186 0.403 0.641 -0.953 0.403 0.641 -0.611 -0.384 0.259 0.741 0.383 + 13.90 11.390 11.412 11.432 0.702 0.677 -0.723 0.702 0.677 -0.489 -0.507 0.475 0.737 0.425 + 13.95 11.274 11.304 11.310 0.821 0.363 -0.838 0.821 0.363 -0.305 -0.689 0.298 0.755 0.405 + 14.00 11.150 11.191 11.220 0.959 0.797 -0.963 0.959 0.797 -0.767 -0.923 0.764 1.241 0.711 + 14.05 11.019 11.080 11.114 1.167 0.862 -1.094 1.167 0.862 -0.943 -1.277 1.005 1.650 0.939 + 14.10 11.031 11.095 11.098 1.190 0.293 -1.082 1.190 0.293 -0.317 -1.288 0.349 1.337 0.686 + 14.15 10.722 10.837 10.842 1.579 0.327 -1.391 1.579 0.327 -0.455 -2.197 0.516 2.268 1.151 + 14.20 10.827 10.907 10.919 1.317 0.530 -1.286 1.317 0.530 -0.681 -1.694 0.698 1.835 0.977 + 14.25 10.941 11.017 11.019 1.290 0.212 -1.172 1.290 0.212 -0.249 -1.511 0.274 1.541 0.778 + 14.30 11.321 11.403 11.407 1.366 0.291 -0.792 1.366 0.291 -0.231 -1.082 0.398 1.289 0.588 + 14.35 11.528 11.577 11.577 1.057 0.084 -0.584 1.057 0.084 -0.049 -0.618 0.089 0.733 0.313 + 14.40 11.368 11.431 11.441 1.201 0.463 -0.745 1.201 0.463 -0.345 -0.895 0.556 1.106 0.554 + 14.45 11.553 11.595 11.621 0.990 0.780 -0.560 0.990 0.780 -0.437 -0.554 0.772 0.951 0.523 + 14.50 11.377 11.395 11.444 0.644 1.060 -0.736 0.644 1.060 -0.780 -0.474 0.683 1.040 0.570 + 14.55 11.178 11.181 11.235 0.292 1.099 -0.935 0.292 1.099 -1.028 -0.273 0.321 1.084 0.555 + 14.60 11.205 11.220 11.259 0.595 0.927 -0.908 0.595 0.927 -0.842 -0.540 0.551 1.019 0.571 + 14.65 11.002 11.008 11.061 0.359 1.084 -1.110 0.359 1.084 -1.203 -0.398 0.389 1.268 0.663 + 14.70 10.991 11.002 11.073 0.474 1.253 -1.121 0.474 1.253 -1.406 -0.531 0.594 1.527 0.808 + 14.75 11.115 11.127 11.165 0.505 0.922 -0.997 0.505 0.922 -0.920 -0.504 0.465 1.050 0.574 + 14.80 11.099 11.116 11.131 0.600 0.580 -1.013 0.600 0.580 -0.588 -0.608 0.348 0.862 0.457 + 14.85 11.111 11.114 11.124 0.273 0.473 -1.002 0.273 0.473 -0.474 -0.274 0.129 0.651 0.281 + 14.90 11.179 11.179 11.194 -0.019 0.591 -0.934 -0.019 0.591 -0.552 0.017 -0.011 0.611 0.276 + 14.95 11.208 11.208 11.239 0.067 0.836 -0.905 0.067 0.836 -0.757 -0.060 0.056 0.761 0.381 + 15.00 11.438 11.438 11.460 0.067 0.704 -0.675 0.067 0.704 -0.475 -0.045 0.047 0.478 0.240 + 15.05 11.242 11.242 11.263 0.034 0.672 -0.870 0.034 0.672 -0.585 -0.030 0.023 0.605 0.293 + 15.10 11.353 11.353 11.376 -0.123 0.714 -0.760 -0.123 0.714 -0.543 0.094 -0.088 0.552 0.279 + 15.15 11.161 11.165 11.191 -0.290 0.759 -0.951 -0.290 0.759 -0.722 0.276 -0.220 0.782 0.402 + 15.20 10.906 10.915 10.940 -0.423 0.743 -1.206 -0.423 0.743 -0.896 0.511 -0.314 1.093 0.539 + 15.25 11.047 11.048 11.087 -0.175 0.925 -1.066 -0.175 0.925 -0.985 0.187 -0.162 1.011 0.508 + 15.30 11.486 11.491 11.511 -0.350 0.672 -0.627 -0.350 0.672 -0.422 0.219 -0.235 0.484 0.265 + 15.35 11.690 11.697 11.718 -0.424 0.692 -0.423 -0.424 0.692 -0.293 0.180 -0.294 0.419 0.226 + 15.40 11.667 11.673 11.702 -0.377 0.830 -0.446 -0.377 0.830 -0.370 0.168 -0.313 0.515 0.256 + 15.45 11.653 11.673 11.697 -0.678 0.762 -0.460 -0.678 0.762 -0.350 0.312 -0.516 0.626 0.349 + 15.50 11.625 11.648 11.688 -0.745 0.967 -0.488 -0.745 0.967 -0.472 0.364 -0.720 0.864 0.467 + 15.55 11.686 11.691 11.712 -0.325 0.711 -0.427 -0.325 0.711 -0.303 0.139 -0.231 0.397 0.203 + 15.60 11.653 11.664 11.677 -0.503 0.558 -0.460 -0.503 0.558 -0.257 0.231 -0.281 0.388 0.223 + 15.65 11.491 11.492 11.530 -0.146 0.938 -0.622 -0.146 0.938 -0.583 0.091 -0.137 0.644 0.303 + 15.70 11.645 11.645 11.664 -0.123 0.663 -0.468 -0.123 0.663 -0.311 0.058 -0.082 0.337 0.163 + 15.75 11.560 11.563 11.564 -0.259 0.131 -0.553 -0.259 0.131 -0.072 0.143 -0.034 0.195 0.082 + 15.80 11.729 11.730 11.731 0.099 0.136 -0.383 0.099 0.136 -0.052 -0.038 0.013 0.088 0.033 + 15.85 11.638 11.639 11.642 0.142 0.236 -0.474 0.142 0.236 -0.112 -0.068 0.034 0.151 0.068 + 15.90 11.492 11.500 11.500 0.428 -0.031 -0.621 0.428 -0.031 0.019 -0.266 -0.013 0.285 0.133 + 15.95 11.193 11.199 11.199 0.364 0.069 -0.920 0.364 0.069 -0.063 -0.335 0.025 0.492 0.171 + 16.00 11.191 11.200 11.204 0.452 -0.308 -0.922 0.452 -0.308 0.284 -0.416 -0.139 0.575 0.261 + 16.05 11.203 11.223 11.226 0.668 -0.259 -0.910 0.668 -0.259 0.236 -0.607 -0.173 0.670 0.337 + 16.10 11.045 11.075 11.075 0.825 0.044 -1.068 0.825 0.044 -0.048 -0.881 0.037 0.911 0.441 + 16.15 11.230 11.251 11.254 0.683 0.263 -0.882 0.683 0.263 -0.232 -0.602 0.179 0.657 0.335 + 16.20 11.270 11.278 11.280 0.424 0.235 -0.843 0.424 0.235 -0.198 -0.358 0.100 0.473 0.210 + 16.25 11.209 11.219 11.222 0.485 0.229 -0.904 0.485 0.229 -0.207 -0.439 0.111 0.552 0.249 + 16.30 11.424 11.431 11.434 0.396 0.291 -0.689 0.396 0.291 -0.201 -0.273 0.115 0.358 0.179 + 16.35 11.362 11.378 11.382 0.608 0.301 -0.751 0.608 0.301 -0.226 -0.457 0.183 0.512 0.271 + 16.40 11.642 11.663 11.667 0.696 0.313 -0.470 0.696 0.313 -0.147 -0.327 0.218 0.402 0.210 + 16.45 11.698 11.710 11.710 0.528 -0.005 -0.414 0.528 -0.005 0.002 -0.219 -0.002 0.225 0.109 + 16.50 11.646 11.650 11.651 0.315 -0.062 -0.467 0.315 -0.062 0.029 -0.147 -0.020 0.160 0.075 + 16.55 11.816 11.817 11.817 0.119 -0.075 -0.296 0.119 -0.075 0.022 -0.035 -0.009 0.054 0.021 + 16.60 11.540 11.546 11.546 0.342 0.137 -0.572 0.342 0.137 -0.078 -0.196 0.047 0.231 0.108 + 16.65 11.571 11.571 11.571 0.095 0.102 -0.542 0.095 0.102 -0.055 -0.051 0.010 0.157 0.038 + 16.70 11.336 11.340 11.343 0.294 0.240 -0.777 0.294 0.240 -0.186 -0.229 0.071 0.374 0.152 + 16.75 11.529 11.543 11.570 0.572 0.779 -0.584 0.572 0.779 -0.454 -0.334 0.446 0.637 0.359 + 16.80 11.720 11.731 11.746 0.517 0.602 -0.393 0.517 0.602 -0.237 -0.203 0.311 0.392 0.220 + 16.85 11.806 11.809 11.828 0.266 0.662 -0.307 0.266 0.662 -0.203 -0.082 0.176 0.302 0.141 + 16.90 11.838 11.839 11.849 -0.155 0.499 -0.275 -0.155 0.499 -0.137 0.043 -0.077 0.174 0.082 + 16.95 11.870 11.874 11.875 -0.329 0.093 -0.243 -0.329 0.093 -0.023 0.080 -0.031 0.088 0.044 + 17.00 11.508 11.513 11.522 -0.349 0.436 -0.605 -0.349 0.436 -0.264 0.211 -0.152 0.339 0.185 + 17.05 11.806 11.807 11.809 0.036 0.251 -0.306 0.036 0.251 -0.077 -0.011 0.009 0.079 0.039 + 17.10 11.833 11.840 11.845 0.400 0.345 -0.280 0.400 0.345 -0.097 -0.112 0.138 0.179 0.101 + 17.15 11.436 11.439 11.454 0.262 0.590 -0.677 0.262 0.590 -0.399 -0.177 0.155 0.437 0.232 + 17.20 11.389 11.390 11.422 0.125 0.863 -0.724 0.125 0.863 -0.625 -0.091 0.108 0.642 0.320 + 17.25 11.142 11.142 11.167 0.051 0.753 -0.971 0.051 0.753 -0.731 -0.049 0.038 0.756 0.367 + 17.30 11.023 11.024 11.038 -0.096 0.562 -1.090 -0.096 0.562 -0.613 0.105 -0.054 0.756 0.312 + 17.35 10.732 10.736 10.752 -0.291 0.593 -1.381 -0.291 0.593 -0.820 0.402 -0.173 1.172 0.465 + 17.40 10.922 10.931 10.937 -0.439 0.363 -1.190 -0.439 0.363 -0.433 0.523 -0.160 0.871 0.349 + 17.45 10.951 10.960 10.974 -0.427 0.560 -1.161 -0.427 0.560 -0.651 0.496 -0.239 0.923 0.426 + 17.50 11.062 11.066 11.068 -0.312 0.231 -1.051 -0.312 0.231 -0.243 0.328 -0.072 0.628 0.207 + 17.55 11.295 11.296 11.300 -0.128 0.294 -0.818 -0.128 0.294 -0.240 0.105 -0.038 0.386 0.132 + 17.60 11.150 11.154 11.159 -0.297 0.336 -0.963 -0.297 0.336 -0.324 0.286 -0.100 0.564 0.222 + 17.65 11.353 11.354 11.366 -0.105 0.526 -0.760 -0.105 0.526 -0.400 0.080 -0.055 0.433 0.206 + 17.70 11.662 11.662 11.675 -0.004 0.547 -0.450 -0.004 0.547 -0.246 0.002 -0.002 0.251 0.123 + 17.75 11.626 11.626 11.632 -0.026 0.378 -0.487 -0.026 0.378 -0.184 0.013 -0.010 0.190 0.092 + 17.80 11.578 11.578 11.594 0.066 0.613 -0.535 0.066 0.613 -0.328 -0.035 0.040 0.333 0.166 + 17.85 11.311 11.314 11.319 0.287 0.318 -0.802 0.287 0.318 -0.255 -0.230 0.091 0.414 0.178 + 17.90 11.532 11.544 11.544 0.522 0.106 -0.581 0.522 0.106 -0.062 -0.303 0.056 0.311 0.157 + 17.95 11.764 11.772 11.772 0.411 0.117 -0.348 0.411 0.117 -0.041 -0.143 0.048 0.152 0.078 + 18.00 11.882 11.888 11.893 0.378 0.341 -0.231 0.378 0.341 -0.079 -0.087 0.129 0.156 0.087 + 18.05 12.068 12.075 12.078 0.412 0.282 -0.045 0.412 0.282 -0.013 -0.018 0.116 0.126 0.059 + 18.10 12.044 12.047 12.052 0.271 0.359 -0.069 0.271 0.359 -0.025 -0.019 0.097 0.103 0.051 + 18.15 12.342 12.348 12.354 0.372 0.397 0.230 0.372 0.397 0.091 0.085 0.148 0.174 0.097 + 18.20 12.267 12.285 12.294 0.655 0.471 0.154 0.655 0.471 0.073 0.101 0.308 0.337 0.166 + 18.25 12.099 12.115 12.129 0.622 0.592 -0.014 0.622 0.592 -0.008 -0.009 0.368 0.369 0.184 + 18.30 12.452 12.474 12.475 0.750 0.131 0.339 0.750 0.131 0.044 0.254 0.098 0.347 0.138 + 18.35 12.324 12.339 12.339 0.607 0.039 0.211 0.607 0.039 0.008 0.128 0.024 0.208 0.065 + 18.40 12.165 12.180 12.190 0.611 0.486 0.052 0.611 0.486 0.025 0.032 0.297 0.306 0.150 + 18.45 11.981 12.030 12.048 1.086 0.664 -0.132 1.086 0.664 -0.088 -0.143 0.722 0.819 0.370 + 18.50 12.122 12.169 12.183 1.071 0.570 0.009 1.071 0.570 0.005 0.010 0.610 0.736 0.305 + 18.55 11.725 11.784 11.795 1.176 0.518 -0.388 1.176 0.518 -0.201 -0.456 0.609 0.900 0.393 + 18.60 11.890 11.941 11.942 1.107 0.110 -0.223 1.107 0.110 -0.024 -0.247 0.121 0.644 0.138 + 18.65 11.902 11.947 11.948 1.036 0.191 -0.211 1.036 0.191 -0.040 -0.219 0.198 0.577 0.149 + 18.70 11.985 12.061 12.067 1.360 0.367 -0.128 1.360 0.367 -0.047 -0.174 0.500 1.000 0.266 + 18.75 12.133 12.225 12.258 1.498 0.898 0.020 1.498 0.898 0.018 0.030 1.346 1.526 0.673 + 18.80 11.989 12.047 12.068 1.183 0.707 -0.124 1.183 0.707 -0.087 -0.146 0.837 0.958 0.427 + 18.85 11.828 11.859 11.886 0.858 0.802 -0.285 0.858 0.802 -0.228 -0.244 0.689 0.731 0.383 + 18.90 11.953 11.980 12.004 0.801 0.756 -0.160 0.801 0.756 -0.121 -0.128 0.605 0.619 0.315 + 18.95 11.960 11.987 12.037 0.793 1.102 -0.152 0.793 1.102 -0.168 -0.121 0.873 0.932 0.449 + 19.00 12.050 12.071 12.130 0.720 1.189 -0.063 0.720 1.189 -0.075 -0.045 0.857 0.969 0.431 + 19.05 11.908 11.939 11.987 0.858 1.078 -0.205 0.858 1.078 -0.221 -0.176 0.924 0.969 0.483 + 19.10 11.896 11.901 11.937 0.314 0.933 -0.216 0.314 0.933 -0.202 -0.068 0.293 0.508 0.181 + 19.15 11.983 11.983 12.010 -0.005 0.806 -0.130 -0.005 0.806 -0.105 0.001 -0.004 0.333 0.053 + 19.20 11.860 11.860 11.901 -0.124 0.980 -0.253 -0.124 0.980 -0.248 0.031 -0.121 0.520 0.139 + 19.25 11.598 11.598 11.682 0.003 1.400 -0.515 0.003 1.400 -0.721 -0.002 0.004 1.113 0.361 + 19.30 11.395 11.397 11.492 0.214 1.481 -0.718 0.214 1.481 -1.064 -0.154 0.318 1.378 0.560 + 19.35 11.357 11.358 11.480 0.147 1.669 -0.756 0.147 1.669 -1.261 -0.111 0.244 1.688 0.645 + 19.40 11.484 11.488 11.603 -0.304 1.633 -0.629 -0.304 1.633 -1.028 0.191 -0.497 1.578 0.579 + 19.45 11.487 11.493 11.595 -0.383 1.531 -0.626 -0.383 1.531 -0.958 0.240 -0.586 1.441 0.574 + 19.50 11.863 11.864 11.974 -0.180 1.616 -0.250 -0.180 1.616 -0.403 0.045 -0.290 1.352 0.249 + 19.55 11.890 11.891 11.980 -0.123 1.461 -0.223 -0.123 1.461 -0.325 0.027 -0.179 1.099 0.186 + 19.60 11.506 11.509 11.595 -0.246 1.414 -0.607 -0.246 1.414 -0.858 0.149 -0.348 1.213 0.469 + 19.65 11.507 11.510 11.606 -0.264 1.490 -0.606 -0.264 1.490 -0.903 0.160 -0.393 1.328 0.499 + 19.70 11.685 11.686 11.730 -0.204 1.008 -0.428 -0.204 1.008 -0.432 0.087 -0.206 0.621 0.243 + 19.75 11.956 11.956 11.992 -0.015 0.940 -0.157 -0.015 0.940 -0.148 0.002 -0.014 0.454 0.074 + 19.80 11.867 11.868 11.893 -0.138 0.765 -0.245 -0.138 0.765 -0.188 0.034 -0.105 0.332 0.109 + 19.85 12.017 12.023 12.054 -0.375 0.868 -0.096 -0.375 0.868 -0.083 0.036 -0.325 0.451 0.169 + 19.90 11.998 12.002 12.057 -0.309 1.151 -0.114 -0.309 1.151 -0.132 0.035 -0.356 0.717 0.191 + 19.95 11.834 11.834 11.874 -0.146 0.971 -0.279 -0.146 0.971 -0.271 0.041 -0.142 0.521 0.154 + 20.00 11.758 11.761 11.775 -0.262 0.566 -0.354 -0.262 0.566 -0.201 0.093 -0.148 0.257 0.133 + 20.05 11.809 11.814 11.825 -0.363 0.507 -0.304 -0.363 0.507 -0.154 0.111 -0.184 0.241 0.132 + 20.10 11.310 11.320 11.334 -0.486 0.549 -0.803 -0.486 0.549 -0.441 0.390 -0.267 0.591 0.323 + 20.15 11.103 11.133 11.168 -0.821 0.877 -1.010 -0.821 0.877 -0.885 0.828 -0.719 1.231 0.705 + 20.20 11.560 11.607 11.632 -1.037 0.771 -0.552 -1.037 0.771 -0.426 0.573 -0.799 0.987 0.536 + 20.25 11.588 11.606 11.631 -0.644 0.768 -0.525 -0.644 0.768 -0.403 0.338 -0.495 0.640 0.361 + 20.30 12.075 12.089 12.090 -0.584 0.041 -0.037 -0.584 0.041 -0.002 0.022 -0.024 0.172 0.016 + 20.35 11.872 11.877 11.886 -0.325 0.482 -0.241 -0.325 0.482 -0.116 0.078 -0.157 0.198 0.105 + 20.40 11.266 11.273 11.291 -0.407 0.633 -0.847 -0.407 0.633 -0.536 0.344 -0.257 0.642 0.344 + 20.45 11.359 11.360 11.379 -0.181 0.649 -0.754 -0.181 0.649 -0.490 0.137 -0.118 0.512 0.261 + 20.50 11.643 11.646 11.651 -0.250 0.338 -0.469 -0.250 0.338 -0.158 0.117 -0.084 0.198 0.107 + 20.55 12.001 12.004 12.004 -0.255 0.088 -0.111 -0.255 0.088 -0.010 0.028 -0.022 0.043 0.019 + 20.60 11.563 11.567 11.568 -0.322 -0.156 -0.550 -0.322 -0.156 0.086 0.177 0.050 0.215 0.102 + 20.65 11.249 11.250 11.251 -0.161 0.076 -0.863 -0.161 0.076 -0.066 0.139 -0.012 0.389 0.077 + 20.70 11.536 11.538 11.539 -0.230 -0.161 -0.577 -0.230 -0.161 0.093 0.133 0.037 0.206 0.083 + 20.75 11.753 11.757 11.757 -0.301 -0.033 -0.359 -0.301 -0.033 0.012 0.108 0.010 0.110 0.055 + 20.80 11.740 11.741 11.741 -0.158 0.104 -0.373 -0.158 0.104 -0.039 0.059 -0.016 0.087 0.036 + 20.85 11.760 11.760 11.762 0.051 -0.228 -0.353 0.051 -0.228 0.081 -0.018 -0.012 0.090 0.042 + 20.90 11.690 11.690 11.707 -0.105 -0.624 -0.423 -0.105 -0.624 0.264 0.044 0.065 0.290 0.138 + 20.95 11.610 11.613 11.626 -0.259 -0.553 -0.503 -0.259 -0.553 0.278 0.130 0.143 0.313 0.170 + 21.00 11.643 11.649 11.686 -0.373 -0.936 -0.470 -0.373 -0.936 0.440 0.175 0.349 0.619 0.294 + 21.05 11.768 11.776 11.795 -0.433 -0.663 -0.344 -0.433 -0.663 0.228 0.149 0.287 0.373 0.198 + 21.10 11.452 11.463 11.476 -0.517 -0.532 -0.661 -0.517 -0.532 0.351 0.342 0.275 0.494 0.281 + 21.15 11.210 11.220 11.225 -0.459 -0.329 -0.902 -0.459 -0.329 0.297 0.414 0.151 0.567 0.266 + 21.20 11.388 11.393 11.394 -0.325 -0.125 -0.724 -0.325 -0.125 0.091 0.235 0.041 0.323 0.128 + 21.25 11.494 11.500 11.501 -0.367 -0.146 -0.619 -0.367 -0.146 0.090 0.227 0.054 0.269 0.125 + 21.30 11.360 11.367 11.373 -0.400 -0.379 -0.753 -0.400 -0.379 0.285 0.301 0.151 0.435 0.221 + 21.35 11.319 11.335 11.338 -0.590 -0.258 -0.793 -0.590 -0.258 0.204 0.468 0.152 0.522 0.266 + 21.40 11.464 11.491 11.492 -0.780 -0.156 -0.648 -0.780 -0.156 0.101 0.506 0.121 0.527 0.265 + 21.45 11.163 11.210 11.210 -1.022 0.001 -0.950 -1.022 0.001 -0.001 0.971 -0.001 0.974 0.485 + 21.50 11.269 11.315 11.322 -1.026 -0.388 -0.844 -1.026 -0.388 0.327 0.866 0.398 0.958 0.504 + 21.55 11.406 11.457 11.467 -1.089 -0.461 -0.707 -1.089 -0.461 0.326 0.770 0.502 0.949 0.488 + 21.60 11.546 11.685 11.695 -1.797 -0.480 -0.566 -1.797 -0.480 0.272 1.018 0.863 1.890 0.681 + 21.65 11.705 11.820 11.836 -1.647 -0.619 -0.408 -1.647 -0.619 0.253 0.672 1.019 1.631 0.623 + 21.70 11.657 11.766 11.789 -1.596 -0.749 -0.456 -1.596 -0.749 0.341 0.728 1.195 1.658 0.720 + 21.75 11.522 11.609 11.652 -1.414 -1.003 -0.590 -1.414 -1.003 0.592 0.835 1.419 1.677 0.875 + 21.80 11.141 11.205 11.222 -1.195 -0.620 -0.972 -1.195 -0.620 0.603 1.162 0.741 1.379 0.752 + 21.85 11.295 11.362 11.367 -1.227 -0.336 -0.817 -1.227 -0.336 0.275 1.003 0.412 1.143 0.559 + 21.90 11.340 11.429 11.431 -1.425 -0.235 -0.773 -1.425 -0.235 0.182 1.102 0.335 1.342 0.583 + 21.95 11.780 11.879 11.880 -1.528 -0.177 -0.333 -1.528 -0.177 0.059 0.508 0.271 1.238 0.289 + 22.00 11.749 11.811 11.813 -1.209 -0.214 -0.364 -1.209 -0.214 0.078 0.440 0.259 0.820 0.258 + 22.05 11.725 11.769 11.773 -1.021 -0.308 -0.388 -1.021 -0.308 0.120 0.396 0.315 0.644 0.260 + 22.10 11.517 11.555 11.565 -0.939 -0.480 -0.596 -0.939 -0.480 0.286 0.560 0.451 0.734 0.387 + 22.15 11.463 11.521 11.524 -1.158 -0.243 -0.650 -1.158 -0.243 0.158 0.752 0.281 0.911 0.409 + 22.20 11.553 11.610 11.610 -1.144 0.133 -0.560 -1.144 0.133 -0.075 0.640 -0.152 0.820 0.331 + 22.25 11.305 11.340 11.350 -0.889 0.476 -0.807 -0.889 0.476 -0.385 0.718 -0.423 0.835 0.459 + 22.30 11.176 11.193 11.207 -0.612 0.566 -0.937 -0.612 0.566 -0.531 0.573 -0.347 0.786 0.427 + 22.35 11.419 11.432 11.433 -0.559 -0.093 -0.694 -0.559 -0.093 0.065 0.388 0.052 0.402 0.199 + 22.40 11.549 11.560 11.560 -0.489 -0.061 -0.564 -0.489 -0.061 0.034 0.275 0.030 0.280 0.140 + 22.45 11.357 11.374 11.374 -0.614 0.062 -0.755 -0.614 0.062 -0.047 0.464 -0.038 0.476 0.234 + 22.50 11.409 11.425 11.429 -0.613 0.304 -0.704 -0.613 0.304 -0.214 0.431 -0.186 0.482 0.258 + 22.55 11.536 11.564 11.569 -0.802 0.322 -0.576 -0.802 0.322 -0.186 0.462 -0.258 0.539 0.280 + 22.60 11.437 11.466 11.468 -0.813 0.194 -0.676 -0.813 0.194 -0.131 0.549 -0.158 0.577 0.293 + 22.65 12.075 12.104 12.108 -0.841 -0.310 -0.038 -0.841 -0.310 0.012 0.032 0.260 0.402 0.131 + 22.70 11.968 12.012 12.013 -1.029 -0.134 -0.145 -1.029 -0.134 0.019 0.149 0.138 0.549 0.102 + 22.75 11.718 11.729 11.735 -0.507 -0.394 -0.395 -0.507 -0.394 0.156 0.200 0.200 0.285 0.162 + 22.80 11.715 11.733 11.734 -0.651 -0.163 -0.398 -0.651 -0.163 0.065 0.259 0.106 0.305 0.144 + 22.85 11.806 11.834 11.835 -0.819 -0.099 -0.307 -0.819 -0.099 0.030 0.251 0.081 0.387 0.133 + 22.90 11.814 11.833 11.833 -0.676 0.098 -0.299 -0.676 0.098 -0.029 0.202 -0.066 0.278 0.107 + 22.95 11.805 11.813 11.819 -0.442 0.368 -0.308 -0.442 0.368 -0.113 0.136 -0.162 0.213 0.120 + 23.00 11.591 11.593 11.604 -0.233 0.491 -0.522 -0.233 0.491 -0.256 0.121 -0.114 0.284 0.153 + 23.05 11.703 11.710 11.724 -0.395 0.581 -0.409 -0.395 0.581 -0.238 0.162 -0.229 0.330 0.184 + 23.10 11.765 11.771 11.786 -0.365 0.602 -0.347 -0.365 0.602 -0.209 0.127 -0.219 0.308 0.164 + 23.15 11.832 11.838 11.844 -0.398 0.370 -0.281 -0.398 0.370 -0.104 0.112 -0.147 0.187 0.106 + 23.20 11.960 11.969 11.969 -0.441 -0.017 -0.152 -0.441 -0.017 0.003 0.067 0.007 0.109 0.034 + 23.25 11.976 11.982 11.985 -0.392 -0.266 -0.137 -0.392 -0.266 0.037 0.054 0.104 0.122 0.062 + 23.30 11.588 11.597 11.612 -0.456 -0.591 -0.524 -0.456 -0.591 0.310 0.239 0.270 0.416 0.238 + 23.35 11.565 11.576 11.601 -0.522 -0.760 -0.548 -0.522 -0.760 0.416 0.286 0.397 0.575 0.321 + 23.40 11.445 11.455 11.464 -0.472 -0.462 -0.668 -0.472 -0.462 0.309 0.315 0.218 0.441 0.246 + 23.45 11.242 11.243 11.246 0.200 -0.213 -0.871 0.200 -0.213 0.185 -0.174 -0.043 0.422 0.129 + 23.50 11.191 11.193 11.203 -0.236 -0.460 -0.922 -0.236 -0.460 0.424 0.218 0.109 0.559 0.245 + 23.55 11.359 11.362 11.364 -0.243 -0.223 -0.754 -0.243 -0.223 0.168 0.183 0.054 0.338 0.127 + 23.60 11.411 11.421 11.427 -0.469 -0.382 -0.702 -0.469 -0.382 0.268 0.329 0.179 0.429 0.230 + 23.65 11.353 11.380 11.386 -0.779 -0.371 -0.760 -0.779 -0.371 0.282 0.592 0.289 0.661 0.358 + 23.70 11.625 11.665 11.674 -0.960 -0.472 -0.488 -0.960 -0.472 0.230 0.468 0.453 0.691 0.345 + 23.75 11.772 11.813 11.828 -0.983 -0.599 -0.341 -0.983 -0.599 0.204 0.335 0.589 0.721 0.354 + 23.80 12.026 12.083 12.089 -1.170 -0.385 -0.087 -1.170 -0.385 0.033 0.102 0.450 0.762 0.231 + 23.85 12.177 12.207 12.222 -0.853 -0.615 0.064 -0.853 -0.615 -0.040 -0.055 0.524 0.555 0.264 + 23.90 12.164 12.176 12.206 -0.535 -0.865 0.051 -0.535 -0.865 -0.044 -0.027 0.463 0.519 0.233 + 23.95 12.099 12.123 12.135 -0.762 -0.538 -0.014 -0.762 -0.538 0.007 0.011 0.410 0.435 0.205 + 24.00 12.121 12.147 12.165 -0.796 -0.666 0.008 -0.796 -0.666 -0.005 -0.007 0.530 0.539 0.265 + 24.05 12.251 12.262 12.290 -0.529 -0.827 0.138 -0.529 -0.827 -0.114 -0.073 0.437 0.491 0.229 + 24.10 12.279 12.284 12.301 -0.367 -0.646 0.166 -0.367 -0.646 -0.107 -0.061 0.237 0.290 0.134 + 24.15 12.590 12.592 12.633 -0.212 -1.025 0.477 -0.212 -1.025 -0.489 -0.101 0.218 0.661 0.272 + 24.20 12.481 12.483 12.536 0.185 -1.157 0.369 0.185 -1.157 -0.427 0.068 -0.214 0.754 0.241 + 24.25 12.049 12.053 12.089 0.300 -0.931 -0.064 0.300 -0.931 0.059 -0.019 -0.279 0.480 0.143 + 24.30 11.850 11.851 11.898 -0.163 -1.061 -0.263 -0.163 -1.061 0.279 0.043 0.173 0.611 0.166 + 24.35 11.841 11.851 11.891 -0.501 -0.975 -0.272 -0.501 -0.975 0.265 0.136 0.488 0.637 0.286 + 24.40 11.836 11.837 11.890 -0.157 -1.114 -0.276 -0.157 -1.114 0.308 0.043 0.175 0.671 0.178 + 24.45 11.497 11.498 11.528 -0.148 -0.823 -0.616 -0.148 -0.823 0.507 0.091 0.122 0.539 0.265 + 24.50 11.901 11.902 11.926 0.058 -0.759 -0.211 0.058 -0.759 0.160 -0.012 -0.044 0.312 0.083 + 24.55 12.119 12.120 12.135 0.197 -0.596 0.006 0.197 -0.596 -0.004 0.001 -0.118 0.197 0.059 + 24.60 11.921 11.921 11.923 0.019 -0.217 -0.192 0.019 -0.217 0.042 -0.004 -0.004 0.042 0.021 + 24.65 11.968 11.974 11.976 -0.382 -0.227 -0.145 -0.382 -0.227 0.033 0.055 0.086 0.109 0.054 + 24.70 12.216 12.220 12.220 0.292 -0.022 0.104 0.292 -0.022 -0.002 0.030 -0.006 0.048 0.015 + 24.75 12.519 12.523 12.524 0.321 -0.167 0.406 0.321 -0.167 -0.068 0.130 -0.053 0.148 0.078 + 24.80 12.374 12.375 12.375 0.085 -0.114 0.261 0.085 -0.114 -0.030 0.022 -0.010 0.044 0.019 + 24.85 12.476 12.479 12.479 0.279 -0.139 0.363 0.279 -0.139 -0.051 0.101 -0.039 0.114 0.060 + 24.90 12.628 12.633 12.645 0.351 -0.559 0.515 0.351 -0.559 -0.288 0.181 -0.196 0.351 0.196 + 24.95 12.547 12.557 12.560 0.508 -0.284 0.434 0.508 -0.284 -0.123 0.220 -0.144 0.263 0.145 + 25.00 12.332 12.350 12.350 0.656 -0.041 0.220 0.656 -0.041 -0.009 0.144 -0.027 0.240 0.073 + 25.05 11.883 11.888 11.891 0.360 -0.258 -0.230 0.360 -0.258 0.059 -0.083 -0.093 0.124 0.069 + 25.10 11.996 12.000 12.002 0.301 -0.210 -0.117 0.301 -0.210 0.025 -0.035 -0.063 0.074 0.038 + 25.15 12.286 12.298 12.315 0.538 -0.644 0.174 0.538 -0.644 -0.112 0.093 -0.346 0.367 0.188 + 25.20 12.188 12.190 12.246 0.205 -1.174 0.076 0.205 -1.174 -0.089 0.015 -0.240 0.713 0.128 + 25.25 12.788 12.789 12.827 0.193 -0.977 0.675 0.193 -0.977 -0.660 0.131 -0.189 0.724 0.349 + 25.30 12.738 12.746 12.805 0.447 -1.227 0.626 0.447 -1.227 -0.768 0.280 -0.549 1.049 0.492 + 25.35 12.441 12.448 12.544 0.436 -1.545 0.328 0.436 -1.545 -0.507 0.143 -0.673 1.342 0.427 + 25.40 12.584 12.584 12.679 0.056 -1.546 0.471 0.056 -1.546 -0.729 0.026 -0.086 1.308 0.367 + 25.45 12.723 12.726 12.836 -0.303 -1.679 0.610 -0.303 -1.679 -1.024 -0.185 0.508 1.641 0.579 + 25.50 12.994 12.995 13.089 -0.162 -1.567 0.881 -0.162 -1.567 -1.381 -0.143 0.254 1.630 0.706 + 25.55 13.187 13.189 13.254 -0.234 -1.317 1.074 -0.234 -1.317 -1.415 -0.252 0.309 1.472 0.735 + 25.60 12.932 12.933 13.003 0.194 -1.347 0.819 0.194 -1.347 -1.103 0.158 -0.261 1.261 0.572 + 25.65 13.116 13.121 13.221 0.372 -1.624 1.003 0.372 -1.624 -1.629 0.374 -0.605 1.891 0.889 + 25.70 12.975 12.980 13.093 0.359 -1.718 0.862 0.359 -1.718 -1.481 0.310 -0.617 1.912 0.817 + 25.75 12.683 12.687 12.789 0.308 -1.611 0.571 0.308 -1.611 -0.919 0.176 -0.496 1.508 0.530 + 25.80 12.612 12.612 12.727 0.058 -1.701 0.499 0.058 -1.701 -0.849 0.029 -0.099 1.573 0.428 + 25.85 12.683 12.685 12.793 0.198 -1.661 0.570 0.198 -1.661 -0.948 0.113 -0.330 1.562 0.505 + 25.90 12.830 12.830 12.903 -0.068 -1.369 0.717 -0.068 -1.369 -0.981 -0.048 0.092 1.196 0.493 + 25.95 12.879 12.879 12.934 0.020 -1.189 0.766 0.020 -1.189 -0.911 0.015 -0.024 1.000 0.456 + 26.00 12.527 12.527 12.549 0.027 -0.745 0.414 0.027 -0.745 -0.308 0.011 -0.020 0.363 0.155 + 26.05 12.606 12.606 12.646 0.038 -1.012 0.493 0.038 -1.012 -0.499 0.019 -0.039 0.634 0.250 + 26.10 12.780 12.794 12.833 0.595 -0.995 0.668 0.595 -0.995 -0.664 0.397 -0.592 0.895 0.487 + 26.15 13.042 13.053 13.075 0.530 -0.763 0.929 0.530 -0.763 -0.709 0.492 -0.404 0.863 0.477 + 26.20 13.296 13.298 13.326 0.258 -0.865 1.183 0.258 -0.865 -1.023 0.305 -0.223 1.107 0.545 + 26.25 13.236 13.243 13.260 0.424 -0.679 1.123 0.424 -0.679 -0.763 0.476 -0.288 0.951 0.472 + 26.30 13.393 13.410 13.453 0.687 -1.065 1.280 0.687 -1.065 -1.363 0.880 -0.732 1.622 0.890 + 26.35 13.403 13.414 13.480 0.556 -1.326 1.290 0.556 -1.326 -1.710 0.717 -0.737 1.865 0.998 + 26.40 13.243 13.253 13.281 0.499 -0.874 1.130 0.499 -0.874 -0.988 0.564 -0.436 1.145 0.609 + 26.45 12.988 12.991 13.061 0.268 -1.349 0.875 0.268 -1.349 -1.181 0.235 -0.362 1.330 0.629 + 26.50 12.804 12.810 12.836 0.397 -0.806 0.691 0.397 -0.806 -0.558 0.275 -0.320 0.643 0.350 + 26.55 13.000 13.003 13.018 0.293 -0.623 0.887 0.293 -0.623 -0.552 0.260 -0.183 0.630 0.319 + 26.60 13.267 13.268 13.292 0.117 -0.799 1.154 0.117 -0.799 -0.922 0.135 -0.094 0.992 0.468 + 26.65 13.229 13.233 13.269 0.294 -0.981 1.117 0.294 -0.981 -1.096 0.328 -0.288 1.148 0.590 + 26.70 13.102 13.105 13.125 0.277 -0.730 0.989 0.277 -0.730 -0.722 0.274 -0.202 0.794 0.399 + 26.75 12.889 12.890 12.899 -0.185 -0.491 0.776 -0.185 -0.491 -0.381 -0.143 0.091 0.439 0.209 + 26.80 13.030 13.032 13.043 0.233 -0.522 0.917 0.233 -0.522 -0.479 0.214 -0.122 0.584 0.269 + 26.85 13.277 13.280 13.311 0.280 -0.908 1.164 0.280 -0.908 -1.057 0.326 -0.254 1.129 0.567 + 26.90 13.350 13.351 13.358 0.109 -0.427 1.238 0.109 -0.427 -0.529 0.135 -0.047 0.863 0.274 + 26.95 13.385 13.386 13.390 0.144 -0.342 1.272 0.144 -0.342 -0.435 0.183 -0.049 0.878 0.237 + 27.00 13.485 13.487 13.496 -0.198 -0.499 1.373 -0.198 -0.499 -0.684 -0.272 0.099 1.086 0.372 + 27.05 13.519 13.525 13.542 -0.415 -0.668 1.406 -0.415 -0.668 -0.939 -0.583 0.277 1.298 0.570 + 27.10 13.606 13.607 13.624 -0.198 -0.677 1.493 -0.198 -0.677 -1.011 -0.296 0.134 1.363 0.531 + 27.15 13.534 13.535 13.549 -0.121 -0.626 1.422 -0.121 -0.626 -0.890 -0.172 0.076 1.214 0.455 + 27.20 13.403 13.404 13.405 -0.105 -0.200 1.290 -0.105 -0.200 -0.258 -0.136 0.021 0.858 0.146 + 27.25 13.199 13.202 13.209 0.283 -0.428 1.087 0.283 -0.428 -0.466 0.307 -0.121 0.722 0.285 + 27.30 13.141 13.143 13.154 0.205 -0.543 1.028 0.205 -0.543 -0.558 0.211 -0.111 0.697 0.303 + 27.35 13.440 13.446 13.464 0.391 -0.712 1.327 0.391 -0.712 -0.945 0.518 -0.278 1.211 0.557 + 27.40 13.533 13.544 13.565 0.562 -0.749 1.420 0.562 -0.749 -1.064 0.797 -0.421 1.446 0.697 + 27.45 13.467 13.477 13.511 0.531 -0.946 1.354 0.531 -0.946 -1.281 0.719 -0.502 1.505 0.776 + 27.50 12.903 12.909 12.919 0.392 -0.522 0.790 0.392 -0.522 -0.413 0.310 -0.205 0.525 0.277 + 27.55 13.043 13.046 13.062 0.266 -0.650 0.930 0.266 -0.650 -0.605 0.247 -0.173 0.679 0.338 + 27.60 12.807 12.811 12.822 0.333 -0.527 0.694 0.333 -0.527 -0.366 0.231 -0.176 0.435 0.234 + 27.65 12.866 12.892 12.907 0.817 -0.624 0.753 0.817 -0.624 -0.470 0.615 -0.509 0.811 0.463 + 27.70 12.746 12.763 12.788 0.659 -0.811 0.633 0.659 -0.811 -0.513 0.417 -0.534 0.746 0.425 + 27.75 12.312 12.319 12.350 0.387 -0.886 0.200 0.387 -0.886 -0.177 0.077 -0.343 0.487 0.197 + 27.80 12.295 12.299 12.315 0.309 -0.641 0.182 0.309 -0.641 -0.117 0.056 -0.198 0.270 0.118 + 27.85 12.247 12.247 12.251 0.021 -0.300 0.134 0.021 -0.300 -0.040 0.003 -0.006 0.054 0.020 + 27.90 12.378 12.378 12.382 0.058 -0.314 0.265 0.058 -0.314 -0.083 0.015 -0.018 0.086 0.043 + 27.95 12.526 12.527 12.540 -0.130 -0.579 0.414 -0.130 -0.579 -0.239 -0.054 0.075 0.262 0.128 + 28.00 12.596 12.600 12.608 -0.324 -0.443 0.483 -0.324 -0.443 -0.214 -0.157 0.144 0.268 0.151 + 28.05 12.649 12.651 12.651 -0.221 0.090 0.536 -0.221 0.090 0.048 -0.118 -0.020 0.172 0.065 + 28.10 12.584 12.584 12.584 0.063 0.003 0.471 0.063 0.003 0.002 0.030 0.000 0.113 0.015 + 28.15 12.750 12.756 12.758 -0.399 0.235 0.637 -0.399 0.235 0.150 -0.254 -0.094 0.310 0.155 + 28.20 12.725 12.726 12.726 0.084 -0.015 0.613 0.084 -0.015 -0.009 0.051 -0.001 0.191 0.026 + 28.25 12.463 12.463 12.465 0.040 -0.189 0.351 0.040 -0.189 -0.066 0.014 -0.008 0.080 0.034 + 28.30 12.627 12.636 12.637 0.478 -0.142 0.514 0.478 -0.142 -0.073 0.246 -0.068 0.257 0.133 + 28.35 12.486 12.490 12.491 0.286 -0.196 0.374 0.286 -0.196 -0.073 0.107 -0.056 0.130 0.071 + 28.40 12.218 12.218 12.222 0.087 -0.314 0.105 0.087 -0.314 -0.033 0.009 -0.027 0.058 0.022 + 28.45 12.508 12.513 12.523 0.371 -0.486 0.395 0.371 -0.486 -0.192 0.146 -0.180 0.265 0.151 + 28.50 12.772 12.773 12.785 0.151 -0.546 0.659 0.151 -0.546 -0.360 0.100 -0.083 0.378 0.191 + 28.55 12.873 12.874 12.874 0.071 -0.029 0.761 0.071 -0.029 -0.022 0.054 -0.002 0.292 0.029 + 28.60 12.992 12.994 12.995 -0.261 -0.089 0.879 -0.261 -0.089 -0.078 -0.230 0.023 0.424 0.122 + 28.65 12.898 12.898 12.898 -0.031 -0.008 0.785 -0.031 -0.008 -0.006 -0.024 0.000 0.309 0.012 + 28.70 12.955 12.958 12.958 -0.234 0.075 0.843 -0.234 0.075 0.063 -0.197 -0.017 0.385 0.104 + 28.75 13.078 13.078 13.079 -0.023 -0.169 0.966 -0.023 -0.169 -0.164 -0.022 0.004 0.481 0.083 + 28.80 13.355 13.356 13.359 0.156 -0.294 1.242 0.156 -0.294 -0.366 0.194 -0.046 0.827 0.208 + 28.85 12.787 12.788 12.792 -0.110 -0.314 0.675 -0.110 -0.314 -0.212 -0.074 0.035 0.283 0.114 + 28.90 12.862 12.876 12.881 -0.597 -0.356 0.749 -0.597 -0.356 -0.267 -0.447 0.212 0.522 0.281 + 28.95 12.841 12.841 12.842 -0.133 -0.110 0.728 -0.133 -0.110 -0.080 -0.097 0.015 0.280 0.063 + 29.00 12.789 12.790 12.792 0.128 -0.222 0.676 0.128 -0.222 -0.150 0.087 -0.028 0.262 0.088 + 29.05 12.672 12.673 12.683 0.203 -0.503 0.559 0.203 -0.503 -0.281 0.113 -0.102 0.303 0.160 + 29.10 12.853 12.856 12.860 0.281 -0.343 0.740 0.281 -0.343 -0.254 0.208 -0.096 0.372 0.171 + 29.15 12.946 12.954 12.968 0.470 -0.591 0.833 0.470 -0.591 -0.492 0.391 -0.277 0.631 0.343 + 29.20 13.229 13.237 13.254 0.452 -0.667 1.117 0.452 -0.667 -0.745 0.505 -0.302 0.948 0.475 + 29.25 13.288 13.293 13.321 0.371 -0.861 1.175 0.371 -0.861 -1.012 0.436 -0.319 1.130 0.573 + 29.30 13.461 13.461 13.485 -0.035 -0.811 1.348 -0.035 -0.811 -1.093 -0.048 0.029 1.238 0.547 + 29.35 13.176 13.177 13.192 -0.081 -0.635 1.064 -0.081 -0.635 -0.675 -0.086 0.051 0.771 0.341 + 29.40 13.201 13.203 13.205 0.221 -0.244 1.089 0.221 -0.244 -0.265 0.240 -0.054 0.646 0.181 + 29.45 13.002 13.008 13.018 0.379 -0.507 0.889 0.379 -0.507 -0.451 0.337 -0.192 0.596 0.297 + 29.50 12.851 12.852 12.852 0.127 -0.128 0.738 0.127 -0.128 -0.095 0.094 -0.016 0.289 0.067 + 29.55 13.039 13.039 13.041 -0.001 -0.181 0.927 -0.001 -0.181 -0.167 -0.001 0.000 0.446 0.084 + 29.60 13.138 13.145 13.152 0.442 -0.409 1.025 0.442 -0.409 -0.419 0.453 -0.181 0.706 0.321 + 29.65 12.819 12.822 12.823 0.319 -0.064 0.706 0.319 -0.064 -0.045 0.225 -0.020 0.302 0.115 + 29.70 12.760 12.761 12.762 -0.189 0.056 0.647 -0.189 0.056 0.036 -0.122 -0.011 0.229 0.064 + 29.75 12.672 12.674 12.674 -0.197 0.082 0.559 -0.197 0.082 0.046 -0.110 -0.016 0.179 0.060 + 29.80 12.826 12.842 12.842 -0.633 -0.081 0.714 -0.633 -0.081 -0.058 -0.452 0.051 0.458 0.229 + 29.85 12.786 12.792 12.795 -0.382 -0.278 0.673 -0.382 -0.278 -0.187 -0.258 0.106 0.338 0.168 + 29.90 12.443 12.447 12.447 -0.310 -0.026 0.330 -0.310 -0.026 -0.008 -0.102 0.008 0.103 0.051 + 29.95 12.891 12.896 12.900 -0.360 -0.305 0.778 -0.360 -0.305 -0.237 -0.280 0.110 0.414 0.192 + 30.00 12.831 12.849 12.849 -0.675 0.085 0.718 -0.675 0.085 0.061 -0.485 -0.057 0.489 0.246 + 30.05 12.933 12.942 12.958 -0.485 0.631 0.820 -0.485 0.631 0.518 -0.398 -0.306 0.653 0.360 + 30.10 13.016 13.025 13.036 -0.469 0.553 0.903 -0.469 0.553 0.500 -0.424 -0.260 0.671 0.352 + 30.15 13.081 13.085 13.090 -0.305 0.374 0.968 -0.305 0.374 0.363 -0.296 -0.114 0.586 0.241 + 30.20 12.916 12.917 12.917 -0.087 0.137 0.804 -0.087 0.137 0.110 -0.070 -0.012 0.336 0.066 + 30.25 12.945 12.948 12.948 -0.270 0.015 0.833 -0.270 0.015 0.013 -0.225 -0.004 0.383 0.113 + 30.30 13.105 13.117 13.119 -0.579 -0.177 0.992 -0.579 -0.177 -0.176 -0.575 0.103 0.675 0.305 + 30.35 13.184 13.196 13.197 -0.564 -0.160 1.071 -0.564 -0.160 -0.172 -0.604 0.090 0.745 0.317 + 30.40 13.037 13.048 13.050 -0.546 -0.247 0.924 -0.546 -0.247 -0.228 -0.505 0.135 0.606 0.285 + 30.45 13.285 13.307 13.307 -0.760 -0.041 1.172 -0.760 -0.041 -0.048 -0.891 0.031 0.977 0.446 + 30.50 13.087 13.106 13.107 -0.712 -0.138 0.974 -0.712 -0.138 -0.135 -0.694 0.098 0.738 0.357 + 30.55 13.331 13.367 13.370 -0.982 -0.264 1.218 -0.982 -0.264 -0.321 -1.196 0.259 1.259 0.633 + 30.60 13.242 13.300 13.306 -1.244 -0.390 1.129 -1.244 -0.390 -0.441 -1.405 0.485 1.487 0.775 + 30.65 13.662 13.723 13.731 -1.295 -0.463 1.549 -1.295 -0.463 -0.717 -2.006 0.599 2.146 1.107 + 30.70 13.556 13.647 13.650 -1.566 -0.304 1.444 -1.566 -0.304 -0.439 -2.261 0.477 2.315 1.176 + 30.75 13.492 13.548 13.557 -1.223 -0.502 1.379 -1.223 -0.502 -0.692 -1.687 0.614 1.825 0.962 + 30.80 13.426 13.472 13.495 -1.114 -0.780 1.313 -1.114 -0.780 -1.024 -1.463 0.869 1.787 0.993 + 30.85 13.390 13.442 13.470 -1.182 -0.871 1.277 -1.182 -0.871 -1.112 -1.510 1.030 1.893 1.070 + 30.90 13.255 13.329 13.366 -1.397 -0.995 1.143 -1.397 -0.995 -1.137 -1.596 1.390 2.124 1.201 + 30.95 13.253 13.363 13.388 -1.710 -0.817 1.140 -1.710 -0.817 -0.932 -1.950 1.397 2.447 1.287 + 31.00 13.347 13.416 13.432 -1.359 -0.656 1.234 -1.359 -0.656 -0.810 -1.677 0.892 1.900 1.032 + 31.05 13.474 13.526 13.537 -1.175 -0.565 1.362 -1.175 -0.565 -0.769 -1.599 0.664 1.776 0.947 + 31.10 13.492 13.548 13.551 -1.232 -0.277 1.379 -1.232 -0.277 -0.383 -1.699 0.342 1.749 0.888 + 31.15 14.012 14.035 14.043 -0.812 -0.466 1.899 -0.812 -0.466 -0.885 -1.542 0.378 2.242 0.909 + 31.20 13.940 13.960 13.961 -0.752 -0.149 1.827 -0.752 -0.149 -0.273 -1.374 0.112 1.964 0.703 + 31.25 13.823 13.842 13.844 -0.716 -0.270 1.710 -0.716 -0.270 -0.462 -1.225 0.193 1.756 0.662 + 31.30 13.909 13.935 13.944 -0.849 -0.490 1.796 -0.849 -0.490 -0.880 -1.525 0.416 2.094 0.905 + 31.35 13.839 13.882 13.896 -1.092 -0.613 1.727 -1.092 -0.613 -1.059 -1.885 0.670 2.275 1.132 + 31.40 13.522 13.551 13.558 -0.885 -0.449 1.409 -0.885 -0.449 -0.632 -1.246 0.397 1.485 0.726 + 31.45 13.312 13.348 13.349 -0.971 0.209 1.200 -0.971 0.209 0.250 -1.164 -0.203 1.212 0.604 + 31.50 13.789 13.808 13.811 -0.717 0.308 1.677 -0.717 0.308 0.517 -1.201 -0.221 1.710 0.663 + 31.55 13.882 13.894 13.895 -0.575 -0.178 1.770 -0.575 -0.178 -0.316 -1.018 0.103 1.747 0.535 + 31.60 13.667 13.678 13.680 -0.556 -0.244 1.554 -0.556 -0.244 -0.379 -0.865 0.136 1.392 0.477 + 31.65 13.500 13.505 13.505 -0.365 -0.094 1.387 -0.365 -0.094 -0.130 -0.506 0.034 1.033 0.262 + 31.70 13.614 13.617 13.617 -0.266 0.085 1.502 -0.266 0.085 0.128 -0.399 -0.023 1.166 0.210 + 31.75 13.573 13.584 13.585 -0.562 0.117 1.460 -0.562 0.117 0.171 -0.821 -0.066 1.230 0.420 + 31.80 13.642 13.663 13.664 -0.759 0.148 1.529 -0.759 0.148 0.227 -1.161 -0.113 1.468 0.594 + 31.85 13.503 13.515 13.520 -0.573 0.385 1.390 -0.573 0.385 0.535 -0.797 -0.221 1.204 0.492 + 31.90 13.241 13.244 13.245 -0.290 0.174 1.128 -0.290 0.174 0.197 -0.328 -0.051 0.694 0.193 + 31.95 13.071 13.073 13.076 -0.204 0.273 0.958 -0.204 0.273 0.261 -0.195 -0.056 0.517 0.165 + 32.00 13.153 13.158 13.158 -0.370 -0.004 1.040 -0.370 -0.004 -0.004 -0.385 0.002 0.609 0.192 + 32.05 13.088 13.092 13.092 -0.295 -0.033 0.976 -0.295 -0.033 -0.033 -0.288 0.010 0.520 0.145 + 32.10 13.100 13.105 13.105 -0.327 -0.147 0.988 -0.327 -0.147 -0.145 -0.323 0.048 0.552 0.179 + 32.15 13.002 13.003 13.004 -0.128 0.189 0.889 -0.128 0.189 0.168 -0.114 -0.024 0.421 0.102 + 32.20 12.965 12.966 12.966 -0.101 0.064 0.852 -0.101 0.064 0.054 -0.086 -0.006 0.370 0.051 + 32.25 12.921 12.923 12.926 -0.192 0.287 0.808 -0.192 0.287 0.232 -0.155 -0.055 0.386 0.142 + 32.30 12.921 12.926 12.941 -0.363 0.622 0.808 -0.363 0.622 0.502 -0.293 -0.225 0.586 0.312 + 32.35 13.154 13.162 13.168 -0.466 0.414 1.041 -0.466 0.414 0.431 -0.485 -0.193 0.736 0.338 + 32.40 13.426 13.427 13.428 -0.164 0.142 1.313 -0.164 0.142 0.186 -0.216 -0.023 0.886 0.143 + 32.45 13.157 13.160 13.171 0.283 0.541 1.044 0.283 0.541 0.565 0.296 0.153 0.732 0.328 + 32.50 13.155 13.156 13.183 0.156 0.841 1.042 0.156 0.841 0.876 0.162 0.131 0.909 0.450 + 32.55 13.161 13.162 13.183 -0.156 0.734 1.049 -0.156 0.734 0.770 -0.164 -0.115 0.831 0.398 + 32.60 13.313 13.313 13.332 -0.092 0.706 1.200 -0.092 0.706 0.847 -0.110 -0.065 0.973 0.428 + 32.65 13.560 13.564 13.581 -0.322 0.690 1.447 -0.322 0.690 0.998 -0.466 -0.222 1.337 0.562 + 32.70 13.633 13.634 13.634 -0.124 0.133 1.520 -0.124 0.133 0.203 -0.188 -0.017 1.172 0.139 + 32.75 13.413 13.414 13.415 0.157 0.118 1.300 0.157 0.118 0.154 0.204 0.019 0.865 0.128 + 32.80 13.419 13.422 13.431 0.272 0.502 1.306 0.272 0.502 0.656 0.356 0.137 1.016 0.379 + 32.85 13.604 13.612 13.621 0.452 0.510 1.492 0.452 0.510 0.761 0.674 0.231 1.345 0.521 + 32.90 13.653 13.671 13.676 0.702 0.378 1.540 0.702 0.378 0.583 1.081 0.266 1.504 0.628 + 32.95 13.695 13.715 13.715 0.750 0.033 1.582 0.750 0.033 0.052 1.186 0.024 1.533 0.594 + 33.00 13.516 13.572 13.578 1.227 0.434 1.403 1.227 0.434 0.609 1.721 0.532 1.831 0.951 + 33.05 13.361 13.403 13.403 1.062 0.043 1.248 1.062 0.043 0.054 1.325 0.046 1.343 0.663 + 33.10 13.265 13.314 13.315 1.140 -0.105 1.152 1.140 -0.105 -0.121 1.314 -0.120 1.320 0.663 + 33.15 13.065 13.091 13.092 0.838 0.034 0.952 0.838 0.034 0.033 0.798 0.029 0.805 0.399 + 33.20 13.170 13.186 13.186 0.640 -0.017 1.057 0.640 -0.017 -0.018 0.677 -0.011 0.764 0.339 + 33.25 12.928 12.943 12.953 0.627 0.513 0.815 0.627 0.513 0.418 0.511 0.322 0.660 0.367 + 33.30 13.259 13.271 13.281 0.565 0.513 1.146 0.565 0.513 0.588 0.648 0.290 0.948 0.461 + 33.35 13.202 13.203 13.203 0.135 0.136 1.089 0.135 0.136 0.148 0.147 0.018 0.611 0.105 + 33.40 13.109 13.109 13.109 0.045 0.040 0.996 0.045 0.040 0.040 0.044 0.002 0.498 0.030 + 33.45 13.150 13.150 13.151 -0.092 0.177 1.037 -0.092 0.177 0.184 -0.095 -0.016 0.557 0.104 + 33.50 13.066 13.071 13.085 -0.364 0.616 0.953 -0.364 0.616 0.587 -0.347 -0.224 0.710 0.359 + 33.55 13.131 13.136 13.140 -0.390 0.297 1.018 -0.390 0.297 0.302 -0.397 -0.116 0.638 0.256 + 33.60 12.970 12.986 12.987 -0.632 0.181 0.858 -0.632 0.181 0.155 -0.542 -0.114 0.584 0.288 + 33.65 12.784 12.788 12.791 -0.293 0.305 0.671 -0.293 0.305 0.205 -0.196 -0.089 0.315 0.149 + 33.70 12.492 12.492 12.494 -0.003 0.205 0.380 -0.003 0.205 0.078 -0.001 -0.001 0.093 0.039 + 33.75 12.415 12.417 12.417 -0.250 0.036 0.302 -0.250 0.036 0.011 -0.076 -0.009 0.078 0.038 + 33.80 12.425 12.426 12.427 -0.171 -0.144 0.312 -0.171 -0.144 -0.045 -0.053 0.025 0.074 0.037 + 33.85 12.700 12.711 12.713 -0.536 -0.204 0.587 -0.536 -0.204 -0.120 -0.315 0.109 0.337 0.177 + 33.90 12.552 12.560 12.560 -0.435 0.040 0.440 -0.435 0.040 0.017 -0.191 -0.017 0.192 0.096 + 33.95 12.752 12.771 12.778 -0.703 0.415 0.639 -0.703 0.415 0.265 -0.449 -0.292 0.538 0.299 + 34.00 12.852 12.867 12.881 -0.630 0.593 0.739 -0.630 0.593 0.438 -0.465 -0.373 0.647 0.370 + 34.05 12.710 12.715 12.719 -0.348 0.321 0.598 -0.348 0.321 0.192 -0.208 -0.111 0.290 0.152 + 34.10 12.321 12.322 12.323 -0.137 0.178 0.208 -0.137 0.178 0.037 -0.029 -0.024 0.047 0.026 + 34.15 12.127 12.129 12.129 -0.203 0.041 0.014 -0.203 0.041 0.001 -0.003 -0.008 0.022 0.004 + 34.20 12.215 12.215 12.215 -0.043 -0.010 0.102 -0.043 -0.010 -0.001 -0.004 0.000 0.006 0.002 + 34.25 12.514 12.514 12.514 0.029 -0.037 0.401 0.029 -0.037 -0.015 0.012 -0.001 0.082 0.010 + 34.30 12.631 12.631 12.632 0.097 0.129 0.518 0.097 0.129 0.067 0.050 0.012 0.147 0.042 + 34.35 12.677 12.679 12.685 0.249 0.383 0.564 0.249 0.383 0.216 0.140 0.095 0.263 0.137 + 34.40 12.786 12.788 12.794 0.225 0.379 0.674 0.225 0.379 0.255 0.152 0.085 0.324 0.155 + 34.45 13.180 13.180 13.180 0.012 0.035 1.067 0.012 0.035 0.037 0.013 0.000 0.570 0.020 + 34.50 13.160 13.160 13.163 -0.044 -0.273 1.047 -0.044 -0.273 -0.286 -0.047 0.012 0.587 0.145 + 34.55 13.303 13.303 13.303 -0.063 0.029 1.190 -0.063 0.029 0.034 -0.075 -0.002 0.710 0.041 + 34.60 13.372 13.372 13.372 0.033 -0.025 1.260 0.033 -0.025 -0.031 0.042 -0.001 0.794 0.026 + 34.65 13.463 13.466 13.467 0.274 0.123 1.350 0.274 0.123 0.166 0.370 0.034 0.957 0.203 + 34.70 13.386 13.390 13.390 0.344 0.042 1.273 0.344 0.042 0.053 0.438 0.014 0.871 0.221 + 34.75 13.370 13.374 13.376 0.347 -0.189 1.257 0.347 -0.189 -0.238 0.436 -0.066 0.868 0.251 + 34.80 13.503 13.514 13.514 0.528 -0.096 1.390 0.528 -0.096 -0.134 0.734 -0.051 1.110 0.374 + 34.85 13.251 13.255 13.255 0.323 -0.036 1.138 0.323 -0.036 -0.041 0.368 -0.012 0.701 0.185 + 34.90 13.267 13.269 13.269 -0.222 -0.100 1.154 -0.222 -0.100 -0.116 -0.256 0.022 0.696 0.141 + 34.95 13.050 13.050 13.055 0.086 -0.359 0.937 0.086 -0.359 -0.336 0.081 -0.031 0.507 0.174 + 35.00 13.183 13.189 13.191 0.382 -0.216 1.071 0.382 -0.216 -0.231 0.409 -0.082 0.669 0.239 + 35.05 12.682 12.683 12.686 0.186 -0.263 0.569 0.186 -0.263 -0.150 0.106 -0.049 0.214 0.095 + 35.10 12.692 12.694 12.704 0.246 -0.497 0.579 0.246 -0.497 -0.288 0.142 -0.122 0.321 0.172 + 35.15 12.968 12.970 12.991 0.219 -0.738 0.855 0.219 -0.738 -0.631 0.187 -0.161 0.662 0.339 + 35.20 12.964 12.978 12.998 0.610 -0.718 0.851 0.610 -0.718 -0.611 0.519 -0.438 0.806 0.457 + 35.25 13.246 13.263 13.284 0.685 -0.739 1.133 0.685 -0.739 -0.837 0.776 -0.506 1.149 0.624 + 35.30 12.856 12.883 12.912 0.833 -0.857 0.744 0.833 -0.857 -0.637 0.620 -0.714 0.991 0.570 + 35.35 12.968 12.989 13.040 0.726 -1.151 0.856 0.726 -1.151 -0.985 0.621 -0.835 1.291 0.716 + 35.40 12.628 12.635 12.718 0.425 -1.444 0.515 0.425 -1.444 -0.744 0.219 -0.613 1.266 0.494 + 35.45 12.854 12.856 12.921 0.202 -1.297 0.741 0.202 -1.297 -0.961 0.150 -0.262 1.136 0.504 + 35.50 13.085 13.088 13.150 0.299 -1.274 0.972 0.299 -1.274 -1.238 0.291 -0.381 1.329 0.664 + 35.55 13.078 13.079 13.135 0.167 -1.214 0.965 0.167 -1.214 -1.172 0.161 -0.203 1.217 0.600 + 35.60 13.169 13.173 13.213 0.329 -1.029 1.056 0.329 -1.029 -1.087 0.348 -0.339 1.141 0.595 + 35.65 12.989 12.996 13.022 0.445 -0.822 0.876 0.445 -0.822 -0.720 0.390 -0.366 0.821 0.449 + 35.70 12.925 12.926 12.953 0.116 -0.839 0.812 0.116 -0.839 -0.681 0.094 -0.097 0.688 0.347 + 35.75 12.938 12.941 12.955 0.283 -0.596 0.826 0.283 -0.596 -0.492 0.234 -0.169 0.559 0.285 + 35.80 12.765 12.793 12.805 0.848 -0.558 0.652 0.848 -0.558 -0.364 0.553 -0.474 0.728 0.407 + 35.85 12.910 12.918 12.936 0.451 -0.682 0.798 0.451 -0.682 -0.544 0.359 -0.307 0.652 0.360 + 35.90 13.129 13.141 13.166 0.562 -0.810 1.016 0.562 -0.810 -0.823 0.571 -0.455 1.002 0.550 + 35.95 13.164 13.181 13.217 0.658 -0.976 1.052 0.658 -0.976 -1.027 0.692 -0.642 1.246 0.697 + 36.00 13.431 13.443 13.492 0.576 -1.150 1.318 0.576 -1.150 -1.515 0.760 -0.663 1.695 0.910 + 36.05 13.313 13.336 13.413 0.784 -1.438 1.200 0.784 -1.438 -1.726 0.940 -1.127 2.061 1.133 + 36.10 13.223 13.235 13.316 0.555 -1.464 1.111 0.555 -1.464 -1.626 0.616 -0.812 1.842 0.960 + 36.15 13.177 13.197 13.268 0.737 -1.364 1.064 0.737 -1.364 -1.451 0.784 -1.005 1.768 0.966 + 36.20 13.317 13.359 13.407 1.050 -1.138 1.204 1.050 -1.138 -1.370 1.265 -1.195 1.924 1.107 + 36.25 13.230 13.270 13.292 1.033 -0.755 1.117 1.033 -0.755 -0.844 1.154 -0.780 1.442 0.814 + 36.30 13.206 13.250 13.264 1.074 -0.605 1.093 1.074 -0.605 -0.661 1.175 -0.650 1.358 0.748 + 36.35 13.155 13.206 13.227 1.162 -0.747 1.042 1.162 -0.747 -0.779 1.211 -0.869 1.498 0.841 + 36.40 13.154 13.207 13.233 1.180 -0.841 1.041 1.180 -0.841 -0.875 1.228 -0.992 1.591 0.903 + 36.45 12.957 13.045 13.069 1.512 -0.781 0.844 1.512 -0.781 -0.659 1.277 -1.180 1.805 0.930 + 36.50 13.060 13.146 13.179 1.501 -0.927 0.947 1.501 -0.927 -0.878 1.422 -1.392 2.005 1.087 + 36.55 13.031 13.092 13.118 1.263 -0.826 0.918 1.263 -0.826 -0.759 1.160 -1.044 1.561 0.868 + 36.60 12.852 12.893 12.900 1.019 -0.435 0.740 1.019 -0.435 -0.322 0.754 -0.443 0.887 0.466 + 36.65 12.997 13.016 13.028 0.696 -0.569 0.885 0.696 -0.569 -0.504 0.616 -0.396 0.796 0.444 + 36.70 13.057 13.078 13.097 0.738 -0.701 0.945 0.738 -0.701 -0.662 0.697 -0.517 0.964 0.546 + 36.75 13.178 13.221 13.235 1.067 -0.592 1.065 1.067 -0.592 -0.631 1.137 -0.632 1.312 0.723 + 36.80 13.249 13.308 13.325 1.252 -0.666 1.136 1.252 -0.666 -0.757 1.422 -0.834 1.651 0.907 + 36.85 13.219 13.260 13.278 1.042 -0.678 1.106 1.042 -0.678 -0.750 1.153 -0.707 1.385 0.773 + 36.90 13.199 13.221 13.250 0.766 -0.872 1.086 0.766 -0.872 -0.947 0.831 -0.668 1.263 0.713 + 36.95 13.189 13.235 13.256 1.098 -0.756 1.076 1.098 -0.756 -0.814 1.182 -0.830 1.468 0.829 + 37.00 13.375 13.424 13.437 1.153 -0.577 1.262 1.153 -0.577 -0.729 1.455 -0.665 1.627 0.879 + 37.05 13.421 13.472 13.477 1.174 -0.372 1.308 1.174 -0.372 -0.487 1.536 -0.437 1.614 0.835 + 37.10 13.469 13.520 13.520 1.173 0.103 1.356 1.173 0.103 0.140 1.591 0.121 1.613 0.801 + 37.15 13.424 13.482 13.486 1.245 0.357 1.311 1.245 0.357 0.468 1.633 0.444 1.698 0.878 + 37.20 13.502 13.552 13.562 1.161 0.502 1.390 1.161 0.502 0.698 1.614 0.583 1.766 0.926 + 37.25 13.531 13.560 13.573 0.886 0.593 1.418 0.886 0.593 0.841 1.257 0.525 1.574 0.800 + 37.30 13.664 13.691 13.719 0.866 0.861 1.551 0.866 0.861 1.335 1.344 0.746 1.949 1.018 + 37.35 13.669 13.686 13.718 0.678 0.951 1.556 0.678 0.951 1.479 1.055 0.645 1.892 0.964 + 37.40 13.968 13.980 14.001 0.574 0.773 1.855 0.574 0.773 1.435 1.064 0.444 2.184 0.920 + 37.45 13.882 13.893 13.905 0.548 0.592 1.769 0.548 0.592 1.047 0.969 0.324 1.890 0.731 + 37.50 13.901 13.906 13.914 0.399 0.447 1.788 0.399 0.447 0.798 0.713 0.178 1.778 0.543 + 37.55 13.907 13.923 13.927 0.686 0.297 1.794 0.686 0.297 0.533 1.231 0.204 1.888 0.678 + 37.60 13.919 13.946 13.947 0.867 0.171 1.806 0.867 0.171 0.308 1.567 0.148 2.022 0.802 + 37.65 13.605 13.631 13.636 0.841 0.398 1.492 0.841 0.398 0.594 1.254 0.335 1.545 0.714 + 37.70 13.730 13.768 13.769 1.021 -0.089 1.618 1.021 -0.089 -0.145 1.651 -0.091 1.834 0.830 + 37.75 13.537 13.556 13.557 0.719 -0.138 1.425 0.719 -0.138 -0.197 1.024 -0.099 1.283 0.524 + 37.80 13.550 13.588 13.593 1.026 -0.347 1.437 1.026 -0.347 -0.498 1.475 -0.356 1.619 0.798 + 37.85 14.071 14.098 14.110 0.880 -0.569 1.958 0.880 -0.569 -1.113 1.723 -0.500 2.466 1.056 + 37.90 14.110 14.149 14.165 1.051 -0.673 1.998 1.051 -0.673 -1.345 2.100 -0.708 2.774 1.296 + 37.95 14.320 14.358 14.364 1.036 -0.408 2.208 1.036 -0.408 -0.902 2.287 -0.423 3.057 1.247 + 38.00 14.213 14.265 14.275 1.218 -0.555 2.100 1.218 -0.555 -1.165 2.558 -0.676 3.100 1.445 + 38.05 14.183 14.291 14.301 1.758 -0.537 2.070 1.758 -0.537 -1.111 3.639 -0.943 3.832 1.960 + 38.10 14.028 14.163 14.168 1.948 -0.384 1.916 1.948 -0.384 -0.735 3.732 -0.748 3.807 1.939 + 38.15 14.275 14.410 14.428 1.963 -0.721 2.163 1.963 -0.721 -1.560 4.244 -1.416 4.525 2.369 + 38.20 13.947 14.047 14.062 1.674 -0.648 1.834 1.674 -0.648 -1.188 3.070 -1.084 3.293 1.733 + 38.25 14.099 14.164 14.179 1.364 -0.649 1.986 1.364 -0.649 -1.289 2.708 -0.885 3.112 1.564 + 38.30 14.120 14.187 14.201 1.380 -0.632 2.007 1.380 -0.632 -1.268 2.770 -0.872 3.166 1.584 + 38.35 14.049 14.103 14.114 1.232 -0.555 1.936 1.232 -0.555 -1.075 2.386 -0.684 2.788 1.352 + 38.40 14.271 14.313 14.332 1.099 -0.729 2.158 1.099 -0.729 -1.574 2.371 -0.801 3.199 1.478 + 38.45 14.412 14.474 14.490 1.347 -0.670 2.299 1.347 -0.670 -1.541 3.095 -0.903 3.774 1.787 + 38.50 13.990 14.030 14.042 1.060 -0.576 1.877 1.060 -0.576 -1.082 1.989 -0.611 2.490 1.173 + 38.55 14.039 14.066 14.089 0.868 -0.799 1.926 0.868 -0.799 -1.540 1.672 -0.694 2.551 1.188 + 38.60 13.743 13.786 13.807 1.092 -0.753 1.630 1.092 -0.753 -1.228 1.780 -0.822 2.209 1.157 + 38.65 13.739 13.778 13.789 1.033 -0.542 1.627 1.033 -0.542 -0.881 1.680 -0.560 2.003 0.989 + 38.70 13.914 13.960 13.968 1.133 -0.464 1.801 1.133 -0.464 -0.836 2.041 -0.526 2.371 1.134 + 38.75 13.624 13.673 13.682 1.166 -0.495 1.511 1.166 -0.495 -0.748 1.761 -0.577 1.943 0.999 + 38.80 13.697 13.743 13.749 1.123 -0.379 1.585 1.123 -0.379 -0.601 1.779 -0.426 1.958 0.963 + 38.85 14.038 14.068 14.083 0.917 -0.660 1.925 0.917 -0.660 -1.270 1.765 -0.605 2.491 1.129 + 38.90 13.875 13.919 13.942 1.114 -0.799 1.762 1.114 -0.799 -1.409 1.963 -0.891 2.493 1.288 + 38.95 13.824 13.840 13.869 0.671 -0.895 1.711 0.671 -0.895 -1.532 1.149 -0.601 2.090 1.003 + 39.00 13.849 13.859 13.891 0.531 -0.943 1.736 0.531 -0.943 -1.638 0.921 -0.501 2.093 0.973 + 39.05 14.024 14.037 14.081 0.595 -1.112 1.911 0.595 -1.112 -2.125 1.137 -0.661 2.621 1.249 + 39.10 14.339 14.340 14.381 0.147 -1.084 2.226 0.147 -1.084 -2.413 0.327 -0.159 3.076 1.220 + 39.15 14.293 14.296 14.320 0.294 -0.836 2.180 0.294 -0.836 -1.823 0.641 -0.246 2.769 0.974 + 39.20 14.270 14.273 14.284 0.291 -0.575 2.157 0.291 -0.575 -1.241 0.628 -0.167 2.534 0.700 + 39.25 14.471 14.473 14.510 0.240 -1.033 2.358 0.240 -1.033 -2.435 0.566 -0.248 3.342 1.256 + 39.30 14.354 14.358 14.436 0.308 -1.502 2.242 0.308 -1.502 -3.366 0.691 -0.463 3.687 1.734 + 39.35 14.482 14.485 14.612 0.252 -1.925 2.370 0.252 -1.925 -4.562 0.597 -0.485 4.692 2.313 + 39.40 14.417 14.422 14.545 0.364 -1.891 2.304 0.364 -1.891 -4.358 0.839 -0.688 4.509 2.245 + 39.45 14.374 14.384 14.493 0.551 -1.772 2.261 0.551 -1.772 -4.007 1.245 -0.976 4.278 2.154 + 39.50 14.622 14.630 14.754 0.475 -1.905 2.510 0.475 -1.905 -4.781 1.191 -0.904 5.076 2.505 + 39.55 14.490 14.506 14.630 0.670 -1.902 2.377 0.670 -1.902 -4.523 1.592 -1.274 4.860 2.481 + 39.60 14.522 14.534 14.655 0.592 -1.877 2.409 0.592 -1.877 -4.523 1.425 -1.110 4.840 2.435 + 39.65 14.461 14.472 14.563 0.589 -1.618 2.348 0.589 -1.618 -3.799 1.382 -0.953 4.238 2.077 + 39.70 14.701 14.731 14.816 0.926 -1.589 2.589 0.926 -1.589 -4.113 2.397 -1.471 5.041 2.491 + 39.75 14.468 14.483 14.607 0.664 -1.900 2.355 0.664 -1.900 -4.475 1.564 -1.262 4.799 2.453 + 39.80 14.286 14.292 14.389 0.411 -1.672 2.173 0.411 -1.672 -3.632 0.893 -0.687 3.842 1.901 + 39.85 14.098 14.101 14.167 0.312 -1.358 1.985 0.312 -1.358 -2.695 0.619 -0.423 2.941 1.399 + 39.90 13.842 13.862 13.909 0.740 -1.151 1.729 0.740 -1.151 -1.990 1.280 -0.852 2.431 1.257 + 39.95 13.940 13.953 14.033 0.594 -1.497 1.828 0.594 -1.497 -2.736 1.086 -0.890 2.967 1.538 + 40.00 13.734 13.735 13.802 0.188 -1.356 1.621 0.188 -1.356 -2.198 0.304 -0.254 2.250 1.117 + 40.05 14.030 14.031 14.093 0.193 -1.318 1.917 0.193 -1.318 -2.527 0.370 -0.255 2.725 1.283 + 40.10 14.073 14.074 14.112 -0.149 -1.039 1.960 -0.149 -1.039 -2.037 -0.292 0.155 2.472 1.032 + 40.15 14.375 14.376 14.406 0.171 -0.924 2.262 0.171 -0.924 -2.091 0.388 -0.158 3.000 1.066 + 40.20 14.493 14.493 14.542 -0.122 -1.196 2.380 -0.122 -1.196 -2.846 -0.289 0.145 3.554 1.432 + 40.25 14.745 14.747 14.783 -0.226 -1.037 2.632 -0.226 -1.037 -2.731 -0.594 0.234 4.028 1.402 + 40.30 14.762 14.770 14.802 -0.466 -0.974 2.650 -0.466 -0.974 -2.580 -1.235 0.454 4.093 1.448 + 40.35 14.661 14.669 14.684 -0.490 -0.659 2.548 -0.490 -0.659 -1.680 -1.248 0.323 3.584 1.059 + 40.40 14.687 14.694 14.710 -0.426 -0.691 2.575 -0.426 -0.691 -1.779 -1.098 0.295 3.644 1.056 + 40.45 14.620 14.631 14.641 -0.565 -0.532 2.508 -0.565 -0.532 -1.333 -1.417 0.300 3.445 0.984 + 40.50 14.714 14.723 14.736 -0.514 -0.621 2.601 -0.514 -0.621 -1.615 -1.338 0.319 3.708 1.061 + 40.55 14.473 14.477 14.477 -0.309 -0.133 2.361 -0.309 -0.133 -0.314 -0.730 0.041 2.843 0.398 + 40.60 14.506 14.508 14.510 -0.225 -0.238 2.394 -0.225 -0.238 -0.570 -0.537 0.053 2.918 0.392 + 40.65 14.751 14.751 14.753 -0.001 -0.272 2.638 -0.001 -0.272 -0.718 -0.004 0.000 3.516 0.359 + 40.70 14.959 14.959 14.964 0.075 -0.388 2.846 0.075 -0.388 -1.105 0.214 -0.029 4.129 0.563 + 40.75 14.781 14.790 14.793 -0.516 -0.320 2.668 -0.516 -0.320 -0.853 -1.378 0.165 3.744 0.814 + 40.80 14.393 14.395 14.396 -0.236 -0.192 2.280 -0.236 -0.192 -0.437 -0.538 0.045 2.646 0.347 + 40.85 14.425 14.429 14.429 -0.322 0.014 2.312 -0.322 0.014 0.032 -0.744 -0.005 2.725 0.372 + 40.90 14.710 14.710 14.710 -0.089 -0.012 2.597 -0.089 -0.012 -0.031 -0.231 0.001 3.376 0.116 + 40.95 14.691 14.691 14.691 -0.066 0.078 2.578 -0.066 0.078 0.202 -0.171 -0.005 3.328 0.132 + 41.00 14.655 14.656 14.662 -0.171 0.442 2.542 -0.171 0.442 1.123 -0.434 -0.076 3.343 0.603 + 41.05 14.640 14.641 14.656 -0.206 0.653 2.527 -0.206 0.653 1.650 -0.521 -0.135 3.427 0.868 + 41.10 14.504 14.507 14.526 -0.290 0.736 2.392 -0.290 0.736 1.759 -0.693 -0.213 3.173 0.951 + 41.15 14.150 14.150 14.166 -0.067 0.674 2.037 -0.067 0.674 1.374 -0.136 -0.045 2.304 0.691 + 41.20 13.865 13.865 13.884 -0.067 0.735 1.752 -0.067 0.735 1.288 -0.118 -0.050 1.807 0.647 + 41.25 13.949 13.951 13.985 -0.233 0.974 1.836 -0.233 0.974 1.788 -0.427 -0.226 2.187 0.926 + 41.30 13.964 13.964 13.986 0.088 0.788 1.851 0.088 0.788 1.459 0.162 0.069 2.028 0.735 + 41.35 13.449 13.457 13.484 0.470 0.853 1.336 0.470 0.853 1.139 0.628 0.401 1.366 0.681 + 41.40 13.379 13.387 13.399 0.478 0.559 1.266 0.478 0.559 0.707 0.605 0.267 1.072 0.484 + 41.45 13.255 13.255 13.285 -0.003 0.890 1.142 -0.003 0.890 1.017 -0.003 -0.002 1.048 0.508 + 41.50 13.088 13.089 13.108 -0.136 0.706 0.975 -0.136 0.706 0.689 -0.133 -0.096 0.734 0.354 + 41.55 13.287 13.287 13.315 -0.038 0.859 1.175 -0.038 0.859 1.009 -0.045 -0.033 1.059 0.505 + 41.60 13.209 13.212 13.214 -0.266 0.269 1.096 -0.266 0.269 0.295 -0.292 -0.072 0.672 0.211 + 41.65 13.366 13.369 13.370 -0.286 -0.146 1.253 -0.286 -0.146 -0.184 -0.359 0.042 0.837 0.203 + 41.70 13.241 13.242 13.242 -0.140 -0.067 1.129 -0.140 -0.067 -0.075 -0.158 0.009 0.649 0.088 + 41.75 13.166 13.166 13.167 0.029 0.157 1.053 0.029 0.157 0.165 0.031 0.005 0.567 0.084 + 41.80 13.118 13.118 13.119 0.092 -0.182 1.005 0.092 -0.182 -0.183 0.092 -0.017 0.526 0.103 + 41.85 12.999 12.999 13.008 0.002 -0.485 0.887 0.002 -0.485 -0.430 0.001 -0.001 0.511 0.215 + 41.90 13.269 13.269 13.270 0.097 -0.149 1.156 0.097 -0.149 -0.172 0.112 -0.014 0.684 0.103 + 41.95 13.283 13.284 13.286 0.205 0.190 1.170 0.205 0.190 0.222 0.240 0.039 0.724 0.165 + 42.00 13.158 13.158 13.160 -0.054 0.197 1.046 -0.054 0.197 0.206 -0.057 -0.011 0.568 0.107 + 42.05 12.833 12.835 12.835 0.208 0.130 0.720 0.208 0.130 0.094 0.150 0.027 0.290 0.089 + 42.10 12.658 12.658 12.661 -0.105 -0.271 0.545 -0.105 -0.271 -0.148 -0.057 0.029 0.191 0.081 + 42.15 12.572 12.572 12.583 -0.014 -0.529 0.459 -0.014 -0.529 -0.243 -0.007 0.008 0.246 0.122 + 42.20 12.448 12.449 12.451 0.191 -0.185 0.335 0.191 -0.185 -0.062 0.064 -0.035 0.091 0.048 + 42.25 12.517 12.523 12.525 0.384 -0.234 0.405 0.384 -0.234 -0.095 0.155 -0.090 0.183 0.101 + 42.30 12.577 12.584 12.584 0.427 -0.015 0.464 0.427 -0.015 -0.007 0.198 -0.007 0.199 0.099 + 42.35 12.833 12.841 12.841 0.461 -0.012 0.720 0.461 -0.012 -0.008 0.332 -0.005 0.366 0.166 + 42.40 12.707 12.734 12.734 0.816 0.043 0.595 0.816 0.043 0.025 0.485 0.035 0.511 0.244 + 42.45 12.463 12.505 12.507 1.032 0.219 0.350 1.032 0.219 0.077 0.361 0.227 0.618 0.217 + 42.50 12.498 12.530 12.536 0.891 0.393 0.385 0.891 0.393 0.151 0.343 0.350 0.549 0.256 + 42.55 12.622 12.646 12.651 0.787 0.356 0.509 0.787 0.356 0.181 0.401 0.280 0.503 0.261 + 42.60 12.613 12.649 12.655 0.950 0.399 0.500 0.950 0.399 0.200 0.475 0.379 0.656 0.320 + 42.65 12.955 12.975 12.975 0.723 -0.135 0.842 0.723 -0.135 -0.114 0.608 -0.098 0.625 0.313 + 42.70 12.976 12.991 12.992 0.639 -0.097 0.863 0.639 -0.097 -0.084 0.551 -0.062 0.581 0.280 + 42.75 12.753 12.776 12.776 0.761 -0.001 0.640 0.761 -0.001 -0.001 0.488 -0.001 0.495 0.244 + 42.80 12.559 12.610 12.610 1.136 -0.089 0.446 1.136 -0.089 -0.040 0.506 -0.101 0.748 0.259 + 42.85 12.735 12.774 12.778 0.993 0.326 0.622 0.993 0.326 0.203 0.618 0.323 0.739 0.363 + 42.90 12.679 12.706 12.707 0.834 0.161 0.566 0.834 0.161 0.091 0.472 0.134 0.521 0.250 + 42.95 12.504 12.556 12.559 1.143 0.235 0.391 1.143 0.235 0.092 0.447 0.269 0.757 0.265 + 43.00 12.626 12.681 12.686 1.188 0.343 0.513 1.188 0.343 0.176 0.609 0.408 0.896 0.377 + 43.05 13.043 13.098 13.098 1.203 0.047 0.930 1.203 0.047 0.044 1.119 0.056 1.158 0.561 + 43.10 13.164 13.211 13.213 1.104 -0.261 1.052 1.104 -0.261 -0.275 1.161 -0.289 1.196 0.614 + 43.15 12.909 12.933 12.946 0.797 -0.572 0.796 0.797 -0.572 -0.455 0.634 -0.455 0.798 0.452 + 43.20 12.870 12.879 12.887 0.501 -0.458 0.757 0.501 -0.458 -0.347 0.379 -0.229 0.517 0.281 + 43.25 13.033 13.036 13.039 0.284 -0.275 0.921 0.284 -0.275 -0.253 0.261 -0.078 0.502 0.186 + 43.30 13.163 13.177 13.181 0.612 -0.311 1.050 0.612 -0.311 -0.327 0.642 -0.190 0.787 0.373 + 43.35 13.228 13.246 13.246 0.687 -0.013 1.115 0.687 -0.013 -0.015 0.766 -0.009 0.858 0.383 + 43.40 12.936 12.940 12.940 0.314 0.002 0.823 0.314 0.002 0.001 0.258 0.001 0.388 0.129 + 43.45 12.751 12.751 12.754 0.001 0.263 0.639 0.001 0.263 0.168 0.001 0.000 0.239 0.084 + 43.50 13.021 13.022 13.023 0.161 -0.088 0.909 0.161 -0.088 -0.080 0.146 -0.014 0.430 0.083 + 43.55 12.833 12.834 12.836 0.160 0.218 0.720 0.160 0.218 0.157 0.115 0.035 0.296 0.099 + 43.60 12.686 12.688 12.692 0.211 0.335 0.573 0.211 0.335 0.192 0.121 0.071 0.242 0.119 + 43.65 12.493 12.493 12.495 0.013 0.225 0.380 0.013 0.225 0.086 0.005 0.003 0.098 0.043 + 43.70 11.970 11.970 11.974 -0.069 0.304 -0.143 -0.069 0.304 -0.043 0.010 -0.021 0.059 0.025 + 43.75 11.635 11.635 11.638 -0.063 0.274 -0.478 -0.063 0.274 -0.131 0.030 -0.017 0.154 0.068 + 43.80 11.735 11.735 11.748 0.005 0.565 -0.378 0.005 0.565 -0.214 -0.002 0.003 0.231 0.107 + 43.85 11.832 11.833 11.847 0.159 0.567 -0.280 0.159 0.567 -0.159 -0.045 0.090 0.213 0.094 + 43.90 11.910 11.932 11.938 0.719 0.374 -0.203 0.719 0.374 -0.076 -0.146 0.268 0.348 0.157 + 43.95 11.838 11.847 11.859 0.477 0.519 -0.275 0.477 0.519 -0.143 -0.131 0.248 0.286 0.157 + 44.00 11.864 11.865 11.885 -0.100 0.683 -0.248 -0.100 0.683 -0.170 0.025 -0.068 0.269 0.092 + 44.05 11.695 11.701 11.714 -0.384 0.547 -0.418 -0.384 0.547 -0.228 0.161 -0.210 0.311 0.175 + 44.10 11.776 11.781 11.791 -0.343 0.474 -0.337 -0.343 0.474 -0.160 0.115 -0.162 0.228 0.128 + 44.15 11.731 11.746 11.754 -0.603 0.408 -0.382 -0.603 0.408 -0.156 0.230 -0.246 0.338 0.186 + 44.20 11.666 11.705 11.713 -0.954 0.458 -0.447 -0.954 0.458 -0.205 0.427 -0.437 0.660 0.322 + 44.25 11.503 11.521 11.545 -0.650 0.746 -0.610 -0.650 0.746 -0.455 0.396 -0.485 0.675 0.387 + 44.30 11.545 11.600 11.647 -1.125 1.046 -0.567 -1.125 1.046 -0.594 0.638 -1.176 1.340 0.732 + 44.35 11.804 11.848 11.949 -1.019 1.553 -0.309 -1.019 1.553 -0.480 0.315 -1.583 1.774 0.842 + 44.40 12.000 12.013 12.089 -0.570 1.350 -0.113 -0.570 1.350 -0.153 0.064 -0.770 1.081 0.394 + 44.45 11.982 11.985 12.014 -0.256 0.842 -0.131 -0.256 0.842 -0.110 0.034 -0.216 0.396 0.122 + 44.50 12.128 12.132 12.145 -0.345 0.555 0.015 -0.345 0.555 0.008 -0.005 -0.191 0.213 0.096 + 44.55 12.247 12.254 12.257 -0.397 0.266 0.135 -0.397 0.266 0.036 -0.053 -0.106 0.123 0.062 + 44.60 11.954 11.960 11.960 -0.362 -0.104 -0.158 -0.362 -0.104 0.016 0.057 0.037 0.083 0.035 + 44.65 11.978 11.990 11.990 -0.520 -0.082 -0.134 -0.520 -0.082 0.011 0.070 0.043 0.148 0.041 + 44.70 12.388 12.396 12.397 -0.446 -0.123 0.275 -0.446 -0.123 -0.034 -0.123 0.055 0.145 0.069 + 44.75 12.287 12.298 12.300 -0.515 -0.228 0.174 -0.515 -0.228 -0.040 -0.090 0.117 0.174 0.076 + 44.80 12.309 12.316 12.321 -0.407 -0.344 0.196 -0.407 -0.344 -0.068 -0.080 0.140 0.161 0.087 + 44.85 12.220 12.220 12.222 0.069 -0.230 0.107 0.069 -0.230 -0.025 0.007 -0.016 0.035 0.015 + 44.90 12.003 12.007 12.008 -0.321 -0.133 -0.110 -0.321 -0.133 0.015 0.035 0.043 0.067 0.029 + 44.95 12.421 12.433 12.433 -0.541 0.048 0.308 -0.541 0.048 0.015 -0.167 -0.026 0.195 0.085 + 45.00 12.469 12.473 12.481 -0.342 -0.432 0.356 -0.342 -0.432 -0.154 -0.122 0.148 0.215 0.123 + 45.05 12.085 12.086 12.094 -0.158 -0.437 -0.028 -0.158 -0.437 0.012 0.004 0.069 0.108 0.035 + 45.10 12.240 12.254 12.255 -0.587 -0.090 0.128 -0.587 -0.090 -0.011 -0.075 0.053 0.185 0.046 + 45.15 12.262 12.271 12.271 -0.454 0.046 0.150 -0.454 0.046 0.007 -0.068 -0.021 0.115 0.036 + 45.20 12.469 12.473 12.473 -0.294 0.028 0.356 -0.294 0.028 0.010 -0.105 -0.008 0.107 0.053 + 45.25 12.444 12.457 12.457 -0.572 -0.053 0.331 -0.572 -0.053 -0.018 -0.189 0.031 0.220 0.096 + 45.30 12.302 12.309 12.309 -0.406 -0.106 0.189 -0.406 -0.106 -0.020 -0.077 0.043 0.106 0.045 + 45.35 12.068 12.076 12.079 -0.451 -0.269 -0.045 -0.451 -0.269 0.012 0.020 0.121 0.139 0.062 + 45.40 11.917 11.933 11.940 -0.623 -0.406 -0.196 -0.623 -0.406 0.080 0.122 0.253 0.296 0.146 + 45.45 12.037 12.059 12.061 -0.724 -0.245 -0.076 -0.724 -0.245 0.019 0.055 0.177 0.295 0.093 + 45.50 11.906 11.941 11.949 -0.913 -0.448 -0.207 -0.913 -0.448 0.093 0.189 0.409 0.538 0.230 + 45.55 12.032 12.075 12.094 -1.021 -0.672 -0.081 -1.021 -0.672 0.054 0.083 0.686 0.750 0.346 + 45.60 12.137 12.189 12.191 -1.128 -0.183 0.024 -1.128 -0.183 -0.004 -0.027 0.207 0.653 0.104 + 45.65 12.234 12.263 12.265 -0.841 -0.209 0.121 -0.841 -0.209 -0.025 -0.102 0.176 0.383 0.102 + 45.70 11.957 11.998 12.003 -1.001 -0.329 -0.156 -1.001 -0.329 0.051 0.156 0.329 0.567 0.184 + 45.75 11.949 12.000 12.000 -1.102 -0.095 -0.164 -1.102 -0.095 0.016 0.180 0.105 0.625 0.104 + 45.80 11.749 11.780 11.780 -0.849 0.013 -0.364 -0.849 0.013 -0.005 0.309 -0.011 0.427 0.155 + 45.85 11.954 11.965 11.965 -0.498 -0.134 -0.158 -0.498 -0.134 0.021 0.079 0.067 0.146 0.053 + 45.90 11.834 11.848 11.848 -0.563 -0.089 -0.279 -0.563 -0.089 0.025 0.157 0.050 0.201 0.083 + 45.95 11.726 11.750 11.750 -0.755 0.025 -0.387 -0.755 0.025 -0.010 0.292 -0.019 0.360 0.147 + 46.00 11.847 11.885 11.885 -0.951 0.090 -0.266 -0.951 0.090 -0.024 0.253 -0.086 0.492 0.134 + 46.05 11.668 11.696 11.696 -0.809 -0.093 -0.445 -0.809 -0.093 0.042 0.360 0.076 0.431 0.185 + 46.10 11.862 11.898 11.898 -0.929 -0.075 -0.251 -0.929 -0.075 0.019 0.233 0.070 0.466 0.122 + 46.15 11.918 11.943 11.944 -0.774 -0.150 -0.195 -0.774 -0.150 0.029 0.151 0.116 0.330 0.096 + 46.20 11.932 11.962 11.962 -0.834 -0.101 -0.180 -0.834 -0.101 0.018 0.150 0.085 0.369 0.087 + 46.25 11.750 11.777 11.780 -0.795 -0.279 -0.363 -0.795 -0.279 0.101 0.289 0.222 0.421 0.189 + 46.30 11.380 11.405 11.408 -0.761 -0.263 -0.733 -0.761 -0.263 0.193 0.558 0.200 0.593 0.312 + 46.35 11.350 11.389 11.389 -0.942 -0.031 -0.762 -0.942 -0.031 0.024 0.718 0.030 0.735 0.360 + 46.40 11.520 11.551 11.552 -0.846 0.174 -0.593 -0.846 0.174 -0.103 0.502 -0.147 0.549 0.267 + 46.45 11.840 11.866 11.867 -0.786 -0.101 -0.272 -0.786 -0.101 0.028 0.214 0.080 0.351 0.115 + 46.50 11.696 11.744 11.747 -1.065 -0.275 -0.417 -1.065 -0.275 0.115 0.444 0.293 0.692 0.272 + 46.55 11.741 11.818 11.843 -1.348 -0.766 -0.372 -1.348 -0.766 0.285 0.501 1.033 1.271 0.591 + 46.60 11.707 11.795 11.807 -1.443 -0.530 -0.406 -1.443 -0.530 0.215 0.586 0.765 1.264 0.494 + 46.65 12.050 12.114 12.117 -1.239 -0.275 -0.063 -1.239 -0.275 0.017 0.078 0.341 0.807 0.175 + 46.70 12.210 12.273 12.278 -1.242 -0.343 0.097 -1.242 -0.343 -0.033 -0.121 0.426 0.835 0.222 + 46.75 12.314 12.372 12.373 -1.203 -0.103 0.201 -1.203 -0.103 -0.021 -0.242 0.124 0.749 0.136 + 46.80 12.508 12.553 12.555 -1.063 0.234 0.395 -1.063 0.234 0.092 -0.420 -0.249 0.670 0.248 + 46.85 12.682 12.709 12.709 -0.820 -0.003 0.569 -0.820 -0.003 -0.002 -0.467 0.002 0.498 0.233 + 46.90 12.470 12.520 12.520 -1.120 0.105 0.357 -1.120 0.105 0.038 -0.400 -0.118 0.697 0.209 + 46.95 12.766 12.783 12.789 -0.659 0.389 0.653 -0.659 0.389 0.254 -0.430 -0.257 0.506 0.281 + 47.00 12.719 12.724 12.727 -0.340 -0.296 0.606 -0.340 -0.296 -0.179 -0.206 0.101 0.286 0.146 + 47.05 12.244 12.247 12.247 0.255 -0.034 0.131 0.255 -0.034 -0.004 0.033 -0.009 0.042 0.017 + 47.10 12.380 12.381 12.383 0.157 -0.260 0.267 0.157 -0.260 -0.069 0.042 -0.041 0.082 0.045 + 47.15 12.451 12.451 12.454 -0.024 -0.259 0.338 -0.024 -0.259 -0.088 -0.008 0.006 0.091 0.044 + 47.20 12.631 12.644 12.645 0.573 -0.186 0.518 0.573 -0.186 -0.096 0.297 -0.106 0.316 0.165 + 47.25 12.828 12.832 12.836 0.309 -0.305 0.715 0.309 -0.305 -0.218 0.221 -0.094 0.350 0.162 + 47.30 12.810 12.818 12.818 0.464 -0.039 0.697 0.464 -0.039 -0.027 0.323 -0.018 0.351 0.162 + 47.35 12.699 12.715 12.718 0.636 0.259 0.587 0.636 0.259 0.152 0.373 0.165 0.408 0.218 + 47.40 12.881 12.896 12.897 0.632 -0.131 0.768 0.632 -0.131 -0.101 0.486 -0.083 0.503 0.251 + 47.45 12.685 12.686 12.686 -0.120 -0.057 0.572 -0.120 -0.057 -0.032 -0.068 0.007 0.173 0.038 + 47.50 12.701 12.709 12.710 -0.451 0.126 0.589 -0.451 0.126 0.074 -0.266 -0.057 0.283 0.141 + 47.55 12.671 12.676 12.677 -0.365 -0.135 0.558 -0.365 -0.135 -0.075 -0.204 0.049 0.231 0.111 + 47.60 12.550 12.564 12.565 -0.591 -0.149 0.437 -0.591 -0.149 -0.065 -0.258 0.088 0.281 0.140 + 47.65 12.380 12.388 12.388 -0.443 0.017 0.267 -0.443 0.017 0.005 -0.118 -0.008 0.134 0.059 + 47.70 12.489 12.503 12.503 -0.590 0.038 0.376 -0.590 0.038 0.014 -0.222 -0.022 0.245 0.112 + 47.75 12.886 12.898 12.898 -0.540 -0.079 0.773 -0.540 -0.079 -0.061 -0.418 0.043 0.448 0.212 + 47.80 13.346 13.362 13.365 -0.648 -0.319 1.233 -0.648 -0.319 -0.393 -0.800 0.207 1.021 0.457 + 47.85 13.050 13.077 13.077 -0.842 -0.089 0.937 -0.842 -0.089 -0.083 -0.789 0.075 0.798 0.399 + 47.90 12.922 12.953 12.953 -0.903 0.056 0.809 -0.903 0.056 0.045 -0.730 -0.050 0.736 0.367 + 47.95 12.907 12.953 12.955 -1.087 0.206 0.794 -1.087 0.206 0.164 -0.863 -0.224 0.927 0.453 + 48.00 13.035 13.073 13.075 -1.000 0.178 0.922 -1.000 0.178 0.164 -0.923 -0.178 0.942 0.477 + 48.05 13.079 13.105 13.106 -0.823 0.154 0.966 -0.823 0.154 0.149 -0.795 -0.127 0.817 0.410 + 48.10 13.331 13.378 13.391 -1.124 0.587 1.218 -1.124 0.587 0.715 -1.369 -0.660 1.545 0.840 + 48.15 13.488 13.527 13.529 -1.028 0.203 1.376 -1.028 0.203 0.279 -1.414 -0.209 1.495 0.728 + 48.20 13.446 13.486 13.488 -1.039 0.221 1.334 -1.039 0.221 0.295 -1.386 -0.230 1.453 0.718 + 48.25 13.553 13.610 13.613 -1.244 0.256 1.440 -1.244 0.256 0.369 -1.792 -0.318 1.844 0.928 + 48.30 13.416 13.491 13.494 -1.420 0.279 1.303 -1.420 0.279 0.363 -1.850 -0.396 1.896 0.963 + 48.35 13.347 13.397 13.401 -1.156 0.304 1.235 -1.156 0.304 0.376 -1.428 -0.352 1.477 0.759 + 48.40 13.197 13.227 13.227 -0.884 -0.120 1.084 -0.884 -0.120 -0.130 -0.958 0.106 0.986 0.486 + 48.45 13.468 13.516 13.518 -1.144 -0.233 1.355 -1.144 -0.233 -0.316 -1.549 0.267 1.599 0.802 + 48.50 13.713 13.802 13.814 -1.565 -0.567 1.601 -1.565 -0.567 -0.908 -2.504 0.888 2.666 1.404 + 48.55 13.569 13.636 13.646 -1.342 -0.546 1.457 -1.342 -0.546 -0.796 -1.955 0.733 2.110 1.117 + 48.60 13.637 13.665 13.669 -0.874 -0.320 1.525 -0.874 -0.320 -0.488 -1.333 0.280 1.596 0.724 + 48.65 13.626 13.668 13.676 -1.080 -0.452 1.513 -1.080 -0.452 -0.684 -1.634 0.488 1.830 0.919 + 48.70 13.492 13.518 13.523 -0.840 -0.356 1.379 -0.840 -0.356 -0.490 -1.158 0.299 1.367 0.646 + 48.75 13.484 13.508 13.516 -0.811 -0.476 1.371 -0.811 -0.476 -0.652 -1.112 0.386 1.382 0.673 + 48.80 13.315 13.327 13.347 -0.577 -0.725 1.202 -0.577 -0.725 -0.871 -0.693 0.418 1.151 0.595 + 48.85 13.539 13.559 13.567 -0.731 -0.468 1.426 -0.731 -0.468 -0.668 -1.042 0.342 1.393 0.642 + 48.90 13.568 13.591 13.593 -0.795 -0.209 1.455 -0.795 -0.209 -0.304 -1.158 0.166 1.397 0.604 + 48.95 13.503 13.509 13.510 -0.411 0.126 1.390 -0.411 0.126 0.175 -0.571 -0.052 1.059 0.300 + 49.00 13.197 13.206 13.210 -0.479 0.333 1.084 -0.479 0.333 0.362 -0.519 -0.160 0.758 0.326 + 49.05 13.058 13.059 13.061 -0.081 0.237 0.946 -0.081 0.237 0.224 -0.077 -0.019 0.479 0.119 + 49.10 12.796 12.797 12.798 -0.108 0.217 0.683 -0.108 0.217 0.148 -0.074 -0.023 0.263 0.083 + 49.15 12.411 12.412 12.414 0.087 0.207 0.299 0.087 0.207 0.062 0.026 0.018 0.070 0.035 + 49.20 12.753 12.754 12.754 0.150 0.108 0.640 0.150 0.108 0.069 0.096 0.016 0.222 0.060 + 49.25 12.749 12.761 12.765 0.549 0.338 0.636 0.549 0.338 0.215 0.349 0.186 0.410 0.225 + 49.30 12.773 12.783 12.788 0.522 0.341 0.660 0.522 0.341 0.225 0.344 0.178 0.412 0.224 + 49.35 12.445 12.457 12.467 0.565 0.496 0.332 0.565 0.496 0.165 0.187 0.281 0.338 0.188 + 49.40 12.592 12.601 12.602 0.479 0.167 0.479 0.479 0.167 0.080 0.230 0.080 0.244 0.128 + 49.45 12.857 12.865 12.872 0.461 0.429 0.744 0.461 0.429 0.319 0.343 0.198 0.475 0.254 + 49.50 12.718 12.722 12.722 0.325 -0.096 0.605 0.325 -0.096 -0.058 0.196 -0.031 0.240 0.104 + 49.55 12.711 12.711 12.712 -0.004 0.153 0.598 -0.004 0.153 0.092 -0.003 -0.001 0.191 0.046 + 49.60 12.605 12.610 12.615 0.350 0.361 0.493 0.350 0.361 0.178 0.172 0.126 0.248 0.139 + 49.65 12.803 12.821 12.829 0.685 0.435 0.690 0.685 0.435 0.300 0.473 0.298 0.568 0.317 + 49.70 12.498 12.517 12.518 0.689 0.198 0.385 0.689 0.198 0.076 0.265 0.137 0.331 0.154 + 49.75 12.580 12.600 12.601 0.707 0.150 0.467 0.707 0.150 0.070 0.330 0.106 0.370 0.177 + 49.80 12.889 12.927 12.934 0.984 0.430 0.776 0.984 0.430 0.334 0.764 0.423 0.878 0.468 + 49.85 12.890 12.913 12.919 0.777 0.365 0.777 0.777 0.365 0.284 0.604 0.284 0.671 0.363 + 49.90 12.527 12.554 12.557 0.828 0.268 0.414 0.828 0.268 0.111 0.343 0.221 0.464 0.212 + 49.95 12.569 12.616 12.618 1.086 0.271 0.456 1.086 0.271 0.124 0.495 0.295 0.731 0.295 + 50.00 12.633 12.664 12.681 0.886 0.645 0.521 0.886 0.645 0.336 0.461 0.571 0.736 0.404 + 50.05 12.866 12.913 12.924 1.101 0.520 0.753 1.101 0.520 0.392 0.830 0.573 1.025 0.541 + 50.10 12.831 12.904 12.921 1.372 0.656 0.718 1.372 0.656 0.471 0.986 0.900 1.415 0.708 + 50.15 12.631 12.731 12.748 1.593 0.660 0.518 1.593 0.660 0.342 0.825 1.052 1.621 0.690 + 50.20 12.754 12.898 12.917 1.920 0.702 0.641 1.920 0.702 0.450 1.231 1.348 2.295 0.940 + 50.25 12.853 12.977 12.981 1.796 0.296 0.740 1.796 0.296 0.219 1.328 0.531 1.929 0.724 + 50.30 12.871 12.963 12.963 1.539 -0.005 0.758 1.539 -0.005 -0.004 1.167 -0.008 1.471 0.584 + 50.35 12.996 13.077 13.077 1.451 0.057 0.883 1.451 0.057 0.051 1.282 0.083 1.444 0.643 + 50.40 13.323 13.388 13.391 1.314 -0.318 1.210 1.314 -0.318 -0.385 1.591 -0.419 1.647 0.845 + 50.45 13.090 13.149 13.178 1.238 -0.874 0.977 1.238 -0.874 -0.854 1.210 -1.082 1.626 0.917 + 50.50 13.218 13.276 13.290 1.238 -0.606 1.105 1.238 -0.606 -0.670 1.369 -0.751 1.562 0.850 + 50.55 13.247 13.342 13.373 1.589 -0.905 1.135 1.589 -0.905 -1.026 1.803 -1.438 2.315 1.262 + 50.60 13.326 13.427 13.465 1.644 -1.004 1.213 1.644 -1.004 -1.219 1.995 -1.651 2.592 1.431 + 50.65 13.499 13.576 13.622 1.446 -1.123 1.386 1.446 -1.123 -1.557 2.005 -1.625 2.637 1.507 + 50.70 13.230 13.275 13.308 1.087 -0.943 1.117 1.087 -0.943 -1.053 1.214 -1.024 1.659 0.953 + 50.75 13.010 13.053 13.090 1.059 -0.980 0.897 1.059 -0.980 -0.880 0.950 -1.037 1.443 0.830 + 50.80 12.876 12.882 12.951 0.396 -1.333 0.763 0.396 -1.333 -1.017 0.302 -0.528 1.258 0.592 + 50.85 12.470 12.474 12.549 0.307 -1.368 0.358 0.307 -1.368 -0.489 0.110 -0.420 1.046 0.327 + 50.90 12.680 12.687 12.809 0.421 -1.757 0.568 0.421 -1.757 -0.997 0.239 -0.740 1.793 0.632 + 50.95 12.762 12.772 12.919 0.499 -1.944 0.649 0.499 -1.944 -1.262 0.324 -0.969 2.224 0.812 + 51.00 12.456 12.474 12.552 0.672 -1.403 0.343 0.672 -1.403 -0.481 0.230 -0.943 1.268 0.542 + 51.05 12.482 12.500 12.561 0.670 -1.235 0.369 0.670 -1.235 -0.456 0.247 -0.827 1.055 0.488 + 51.10 12.325 12.338 12.378 0.573 -0.996 0.212 0.573 -0.996 -0.211 0.121 -0.570 0.683 0.310 + 51.15 12.452 12.485 12.557 0.911 -1.341 0.339 0.911 -1.341 -0.454 0.309 -1.222 1.372 0.670 + 51.20 12.648 12.665 12.726 0.642 -1.248 0.536 0.642 -1.248 -0.668 0.344 -0.801 1.128 0.549 + 51.25 12.850 12.851 12.890 0.146 -1.002 0.737 0.146 -1.002 -0.739 0.107 -0.146 0.784 0.380 + 51.30 13.100 13.105 13.125 0.332 -0.726 0.988 0.332 -0.726 -0.717 0.328 -0.241 0.806 0.412 + 51.35 12.734 12.761 12.771 0.825 -0.519 0.621 0.825 -0.519 -0.323 0.513 -0.429 0.669 0.371 + 51.40 12.709 12.735 12.754 0.817 -0.682 0.596 0.817 -0.682 -0.407 0.487 -0.557 0.744 0.422 + 51.45 12.562 12.592 12.625 0.874 -0.913 0.449 0.874 -0.913 -0.410 0.392 -0.798 0.900 0.490 + 51.50 12.609 12.631 12.659 0.741 -0.837 0.496 0.741 -0.837 -0.416 0.368 -0.621 0.748 0.416 + 51.55 12.680 12.701 12.726 0.726 -0.802 0.567 0.726 -0.802 -0.455 0.412 -0.583 0.747 0.423 + 51.60 12.568 12.601 12.622 0.902 -0.743 0.455 0.902 -0.743 -0.338 0.411 -0.670 0.786 0.428 + 51.65 12.646 12.680 12.689 0.930 -0.483 0.533 0.930 -0.483 -0.258 0.496 -0.449 0.691 0.358 + 51.70 12.527 12.561 12.563 0.912 -0.262 0.415 0.912 -0.262 -0.109 0.378 -0.239 0.536 0.230 + 51.75 12.709 12.735 12.735 0.809 -0.096 0.596 0.809 -0.096 -0.057 0.482 -0.078 0.510 0.246 + 51.80 12.479 12.512 12.512 0.909 0.021 0.366 0.909 0.021 0.008 0.333 0.019 0.480 0.167 + 51.85 12.572 12.581 12.581 0.497 -0.034 0.459 0.497 -0.034 -0.016 0.228 -0.017 0.229 0.115 + 51.90 12.940 12.951 12.952 0.530 -0.087 0.828 0.530 -0.087 -0.072 0.438 -0.046 0.487 0.223 + 51.95 13.166 13.167 13.167 0.058 -0.028 1.054 0.058 -0.028 -0.029 0.061 -0.002 0.557 0.034 + 52.00 12.903 12.907 12.908 0.307 0.189 0.790 0.307 0.189 0.150 0.243 0.058 0.377 0.146 + 52.05 12.684 12.688 12.688 0.314 0.071 0.571 0.314 0.071 0.041 0.179 0.022 0.215 0.093 + 52.10 12.715 12.724 12.724 0.460 0.015 0.602 0.460 0.015 0.009 0.277 0.007 0.288 0.139 + 52.15 12.712 12.728 12.728 0.638 -0.043 0.600 0.638 -0.043 -0.026 0.382 -0.027 0.384 0.192 + 52.20 12.723 12.750 12.750 0.818 -0.049 0.611 0.818 -0.049 -0.030 0.500 -0.040 0.522 0.251 + 52.25 12.690 12.715 12.726 0.793 -0.522 0.577 0.793 -0.522 -0.302 0.458 -0.414 0.618 0.344 + 52.30 12.236 12.269 12.280 0.898 -0.509 0.123 0.898 -0.509 -0.063 0.111 -0.457 0.540 0.237 + 52.35 12.688 12.713 12.717 0.807 -0.307 0.575 0.807 -0.307 -0.177 0.464 -0.248 0.538 0.277 + 52.40 12.371 12.431 12.441 1.223 -0.498 0.258 1.223 -0.498 -0.128 0.315 -0.608 0.905 0.349 + 52.45 12.328 12.385 12.386 1.183 -0.146 0.215 1.183 -0.146 -0.031 0.255 -0.173 0.734 0.155 + 52.50 12.078 12.099 12.101 0.713 0.165 -0.034 0.713 0.165 -0.006 -0.025 0.117 0.268 0.060 + 52.55 12.057 12.067 12.069 0.503 0.199 -0.056 0.503 0.199 -0.011 -0.028 0.100 0.148 0.052 + 52.60 12.400 12.427 12.428 0.818 -0.138 0.288 0.818 -0.138 -0.040 0.235 -0.113 0.386 0.132 + 52.65 12.507 12.542 12.542 0.932 -0.137 0.394 0.932 -0.137 -0.054 0.367 -0.127 0.521 0.196 + 52.70 12.762 12.792 12.793 0.870 -0.177 0.649 0.870 -0.177 -0.115 0.565 -0.154 0.605 0.298 + 52.75 12.815 12.834 12.838 0.696 -0.322 0.702 0.696 -0.322 -0.226 0.488 -0.224 0.540 0.291 + 52.80 12.762 12.773 12.774 0.537 -0.116 0.649 0.537 -0.116 -0.075 0.348 -0.062 0.361 0.181 + 52.85 12.569 12.575 12.575 0.380 -0.078 0.456 0.380 -0.078 -0.036 0.173 -0.030 0.179 0.090 + 52.90 12.576 12.578 12.578 0.189 -0.074 0.464 0.189 -0.074 -0.034 0.088 -0.014 0.128 0.048 + 52.95 12.727 12.727 12.729 -0.037 0.203 0.614 -0.037 0.203 0.125 -0.023 -0.008 0.210 0.064 + 53.00 12.773 12.775 12.782 -0.250 0.413 0.660 -0.250 0.413 0.272 -0.165 -0.103 0.334 0.167 + 53.05 12.925 12.925 12.939 -0.095 0.593 0.812 -0.095 0.593 0.481 -0.077 -0.056 0.510 0.245 + 53.10 13.027 13.028 13.030 0.087 0.231 0.914 0.087 0.231 0.211 0.079 0.020 0.449 0.113 + 53.15 13.227 13.227 13.243 -0.074 0.636 1.114 -0.074 0.636 0.709 -0.082 -0.047 0.826 0.358 + 53.20 13.233 13.235 13.246 -0.277 0.540 1.120 -0.277 0.540 0.604 -0.310 -0.149 0.811 0.348 + 53.25 13.269 13.282 13.297 -0.587 0.633 1.156 -0.587 0.633 0.732 -0.679 -0.371 1.041 0.532 + 53.30 13.193 13.206 13.215 -0.573 0.507 1.080 -0.573 0.507 0.548 -0.619 -0.290 0.876 0.438 + 53.35 13.396 13.405 13.422 -0.483 0.678 1.283 -0.483 0.678 0.870 -0.619 -0.327 1.170 0.558 + 53.40 13.786 13.787 13.819 -0.147 0.952 1.673 -0.147 0.952 1.592 -0.246 -0.140 1.863 0.809 + 53.45 14.025 14.025 14.036 -0.042 0.545 1.913 -0.042 0.545 1.043 -0.080 -0.023 1.979 0.523 + 53.50 14.153 14.168 14.176 0.650 0.488 2.040 0.650 0.488 0.995 1.327 0.317 2.412 0.844 + 53.55 13.948 13.961 13.974 0.604 0.586 1.836 0.604 0.586 1.075 1.108 0.353 2.038 0.792 + 53.60 13.850 13.866 13.880 0.658 0.623 1.738 0.658 0.623 1.082 1.143 0.410 1.920 0.813 + 53.65 13.816 13.832 13.863 0.670 0.924 1.703 0.670 0.924 1.574 1.142 0.620 2.102 1.020 + 53.70 13.442 13.488 13.540 1.115 1.186 1.329 1.115 1.186 1.577 1.483 1.323 2.209 1.268 + 53.75 13.492 13.558 13.608 1.338 1.166 1.379 1.338 1.166 1.608 1.845 1.559 2.525 1.451 + 53.80 13.516 13.544 13.609 0.867 1.327 1.403 0.867 1.327 1.862 1.217 1.151 2.241 1.252 + 53.85 13.408 13.410 13.456 0.255 1.103 1.295 0.255 1.103 1.429 0.330 0.281 1.480 0.747 + 53.90 13.649 13.650 13.718 -0.119 1.367 1.536 -0.119 1.367 2.100 -0.182 -0.162 2.122 1.057 + 53.95 13.395 13.395 13.450 -0.037 1.215 1.282 -0.037 1.215 1.558 -0.048 -0.045 1.561 0.779 + 54.00 13.236 13.236 13.293 0.113 1.229 1.123 0.113 1.229 1.380 0.127 0.139 1.392 0.696 + 54.05 13.014 13.015 13.069 0.172 1.184 0.901 0.172 1.184 1.067 0.155 0.204 1.121 0.548 + 54.10 12.815 12.817 12.861 0.204 1.068 0.702 0.204 1.068 0.750 0.143 0.218 0.838 0.397 + 54.15 13.184 13.184 13.212 0.092 0.849 1.071 0.092 0.849 0.909 0.098 0.078 0.938 0.459 + 54.20 13.291 13.291 13.316 -0.008 0.822 1.178 -0.008 0.822 0.969 -0.009 -0.007 1.032 0.484 + 54.25 13.354 13.358 13.389 -0.326 0.907 1.241 -0.326 0.907 1.126 -0.404 -0.295 1.235 0.616 + 54.30 13.712 13.726 13.764 -0.611 1.026 1.600 -0.611 1.026 1.641 -0.978 -0.627 1.992 1.005 + 54.35 13.637 13.648 13.691 -0.559 1.077 1.524 -0.559 1.077 1.642 -0.852 -0.602 1.898 0.973 + 54.40 13.307 13.312 13.344 -0.351 0.929 1.194 -0.351 0.929 1.109 -0.419 -0.326 1.206 0.615 + 54.45 13.255 13.270 13.277 -0.641 0.417 1.142 -0.641 0.417 0.476 -0.732 -0.268 0.944 0.457 + 54.50 13.067 13.081 13.097 -0.588 0.651 0.955 -0.588 0.651 0.622 -0.562 -0.383 0.841 0.461 + 54.55 13.060 13.068 13.107 -0.471 1.009 0.947 -0.471 1.009 0.956 -0.446 -0.475 1.068 0.578 + 54.60 13.051 13.056 13.099 -0.354 1.059 0.938 -0.354 1.059 0.994 -0.332 -0.375 1.063 0.556 + 54.65 12.881 12.881 12.910 -0.034 0.867 0.768 -0.034 0.867 0.666 -0.026 -0.030 0.671 0.334 + 54.70 12.913 12.916 12.941 -0.263 0.803 0.801 -0.263 0.803 0.642 -0.210 -0.211 0.677 0.354 + 54.75 13.135 13.136 13.151 -0.123 0.633 1.022 -0.123 0.633 0.647 -0.125 -0.078 0.730 0.332 + 54.80 13.165 13.165 13.172 -0.045 0.430 1.052 -0.045 0.430 0.452 -0.047 -0.019 0.647 0.228 + 54.85 13.205 13.206 13.219 0.123 0.594 1.092 0.123 0.594 0.649 0.135 0.073 0.781 0.333 + 54.90 13.263 13.263 13.276 -0.103 0.584 1.150 -0.103 0.584 0.671 -0.118 -0.060 0.837 0.342 + 54.95 13.131 13.131 13.157 -0.113 0.817 1.018 -0.113 0.817 0.832 -0.116 -0.093 0.858 0.422 + 55.00 12.864 12.864 12.900 -0.025 0.964 0.751 -0.025 0.964 0.724 -0.019 -0.024 0.747 0.362 + 55.05 12.950 12.952 13.006 0.234 1.181 0.838 0.234 1.181 0.989 0.196 0.276 1.075 0.523 + 55.10 13.150 13.151 13.214 0.169 1.285 1.037 0.169 1.285 1.333 0.175 0.217 1.378 0.681 + 55.15 13.076 13.076 13.123 0.110 1.108 0.963 0.110 1.108 1.067 0.106 0.122 1.084 0.540 + 55.20 13.281 13.281 13.330 0.046 1.145 1.168 0.046 1.145 1.338 0.054 0.053 1.339 0.670 + 55.25 13.136 13.137 13.151 0.195 0.606 1.023 0.195 0.606 0.620 0.200 0.118 0.726 0.331 + 55.30 13.246 13.247 13.249 0.190 0.210 1.133 0.190 0.210 0.238 0.215 0.040 0.682 0.162 + 55.35 13.107 13.107 13.118 0.143 0.523 0.994 0.143 0.523 0.520 0.142 0.075 0.641 0.272 + 55.40 13.281 13.281 13.288 0.037 0.416 1.168 0.037 0.416 0.486 0.043 0.015 0.770 0.244 + 55.45 12.952 12.953 12.960 -0.071 0.433 0.840 -0.071 0.433 0.363 -0.060 -0.031 0.449 0.185 + 55.50 13.210 13.211 13.224 -0.188 0.588 1.097 -0.188 0.588 0.645 -0.207 -0.111 0.792 0.343 + 55.55 13.124 13.125 13.134 -0.150 0.500 1.011 -0.150 0.500 0.506 -0.152 -0.075 0.647 0.267 + 55.60 12.972 12.973 12.978 -0.171 0.348 0.859 -0.171 0.348 0.299 -0.147 -0.060 0.444 0.169 + 55.65 13.100 13.102 13.127 -0.202 0.818 0.987 -0.202 0.818 0.808 -0.199 -0.165 0.842 0.424 + 55.70 13.255 13.255 13.263 -0.021 0.457 1.142 -0.021 0.457 0.522 -0.024 -0.010 0.757 0.261 + 55.75 13.194 13.196 13.200 -0.226 0.347 1.081 -0.226 0.347 0.375 -0.245 -0.079 0.670 0.227 + 55.80 13.407 13.409 13.417 -0.257 0.456 1.294 -0.257 0.456 0.590 -0.333 -0.117 0.974 0.344 + 55.85 13.695 13.695 13.716 -0.020 0.752 1.582 -0.020 0.752 1.190 -0.031 -0.015 1.535 0.595 + 55.90 13.623 13.628 13.661 -0.379 0.950 1.510 -0.379 0.950 1.435 -0.573 -0.360 1.664 0.793 + 55.95 13.574 13.578 13.605 -0.315 0.858 1.462 -0.315 0.858 1.254 -0.460 -0.270 1.486 0.681 + 56.00 13.787 13.791 13.800 -0.352 0.488 1.674 -0.352 0.488 0.816 -0.590 -0.172 1.582 0.511 + 56.05 13.774 13.777 13.787 -0.314 0.518 1.661 -0.314 0.518 0.860 -0.522 -0.163 1.563 0.510 + 56.10 13.574 13.576 13.577 -0.217 0.189 1.461 -0.217 0.189 0.276 -0.318 -0.041 1.109 0.211 + 56.15 13.626 13.627 13.629 -0.203 0.177 1.513 -0.203 0.177 0.268 -0.307 -0.036 1.181 0.204 + 56.20 13.584 13.584 13.585 0.127 0.118 1.471 0.127 0.118 0.173 0.188 0.015 1.097 0.128 + 56.25 13.535 13.537 13.539 0.250 0.206 1.422 0.250 0.206 0.293 0.355 0.051 1.063 0.231 + 56.30 13.396 13.396 13.401 -0.089 0.346 1.283 -0.089 0.346 0.444 -0.114 -0.031 0.887 0.230 + 56.35 13.282 13.283 13.290 -0.134 0.428 1.170 -0.134 0.428 0.500 -0.157 -0.057 0.784 0.264 + 56.40 13.297 13.309 13.324 -0.557 0.629 1.185 -0.557 0.629 0.745 -0.660 -0.351 1.055 0.528 + 56.45 13.203 13.212 13.227 -0.497 0.633 1.090 -0.497 0.633 0.689 -0.542 -0.314 0.917 0.466 + 56.50 12.974 12.979 12.993 -0.373 0.600 0.861 -0.373 0.600 0.516 -0.321 -0.224 0.620 0.324 + 56.55 12.848 12.848 12.863 0.036 0.619 0.735 0.036 0.619 0.455 0.026 0.022 0.462 0.228 + 56.60 12.877 12.881 12.900 -0.346 0.700 0.764 -0.346 0.700 0.535 -0.264 -0.242 0.597 0.322 + 56.65 12.775 12.777 12.781 -0.237 0.300 0.662 -0.237 0.300 0.199 -0.157 -0.071 0.292 0.131 + 56.70 12.901 12.906 12.917 -0.347 0.536 0.788 -0.347 0.536 0.422 -0.274 -0.186 0.514 0.268 + 56.75 12.748 12.757 12.769 -0.467 0.550 0.635 -0.467 0.550 0.349 -0.296 -0.257 0.462 0.263 + 56.80 12.585 12.587 12.602 -0.233 0.605 0.472 -0.233 0.605 0.286 -0.110 -0.141 0.322 0.169 + 56.85 12.509 12.510 12.516 -0.172 0.387 0.396 -0.172 0.387 0.153 -0.068 -0.067 0.168 0.090 + 56.90 12.984 12.987 12.997 -0.248 0.520 0.871 -0.248 0.520 0.453 -0.216 -0.129 0.546 0.259 + 56.95 12.916 12.917 12.924 -0.174 0.419 0.803 -0.174 0.419 0.337 -0.139 -0.073 0.426 0.186 + 57.00 13.148 13.149 13.152 -0.165 0.250 1.035 -0.165 0.250 0.259 -0.171 -0.041 0.581 0.156 + 57.05 12.866 12.867 12.869 0.163 0.238 0.753 0.163 0.238 0.179 0.123 0.039 0.325 0.110 + 57.10 12.922 12.928 12.930 0.380 0.245 0.809 0.380 0.245 0.198 0.307 0.093 0.430 0.189 + 57.15 12.766 12.772 12.784 0.408 0.563 0.653 0.408 0.563 0.368 0.266 0.230 0.455 0.254 + 57.20 12.739 12.744 12.772 0.361 0.849 0.626 0.361 0.849 0.531 0.226 0.307 0.622 0.327 + 57.25 12.884 12.912 12.942 0.849 0.877 0.771 0.849 0.877 0.676 0.655 0.745 1.042 0.600 + 57.30 12.806 12.818 12.841 0.552 0.774 0.693 0.552 0.774 0.536 0.383 0.428 0.692 0.393 + 57.35 12.802 12.810 12.821 0.443 0.532 0.689 0.443 0.532 0.366 0.305 0.235 0.477 0.266 + 57.40 13.084 13.094 13.102 0.522 0.468 0.971 0.522 0.468 0.455 0.507 0.245 0.717 0.362 + 57.45 13.252 13.259 13.263 0.408 0.327 1.140 0.408 0.327 0.373 0.465 0.133 0.786 0.305 + 57.50 13.228 13.236 13.236 0.471 0.020 1.115 0.471 0.020 0.022 0.525 0.009 0.733 0.263 + 57.55 13.224 13.240 13.240 0.637 0.132 1.111 0.637 0.132 0.147 0.708 0.084 0.829 0.364 + 57.60 13.119 13.129 13.130 0.498 0.175 1.007 0.498 0.175 0.176 0.501 0.087 0.646 0.269 + 57.65 13.193 13.208 13.209 0.631 0.140 1.080 0.631 0.140 0.151 0.681 0.088 0.792 0.352 + 57.70 13.217 13.222 13.223 0.348 0.142 1.104 0.348 0.142 0.157 0.384 0.049 0.681 0.209 + 57.75 13.386 13.395 13.395 0.480 -0.032 1.274 0.480 -0.032 -0.041 0.611 -0.015 0.927 0.306 + 57.80 13.307 13.321 13.323 0.615 0.241 1.194 0.615 0.241 0.288 0.735 0.148 0.931 0.401 + 57.85 13.090 13.139 13.143 1.134 0.304 0.978 1.134 0.304 0.297 1.109 0.344 1.167 0.599 + 57.90 13.161 13.191 13.192 0.879 0.143 1.049 0.879 0.143 0.150 0.922 0.126 0.946 0.471 + 57.95 13.137 13.152 13.152 0.622 0.015 1.024 0.622 0.015 0.015 0.637 0.009 0.718 0.319 + 58.00 12.979 12.986 12.987 0.434 0.129 0.866 0.434 0.129 0.111 0.376 0.056 0.478 0.198 + 58.05 12.699 12.703 12.706 0.319 0.274 0.586 0.319 0.274 0.160 0.187 0.087 0.260 0.131 + 58.10 12.778 12.779 12.780 0.096 0.213 0.666 0.096 0.213 0.142 0.064 0.021 0.249 0.078 + 58.15 13.023 13.025 13.026 0.229 0.129 0.910 0.229 0.129 0.117 0.208 0.029 0.449 0.120 + 58.20 13.130 13.141 13.142 0.533 0.181 1.017 0.533 0.181 0.184 0.542 0.096 0.676 0.290 + 58.25 12.840 12.876 12.878 0.963 0.220 0.727 0.963 0.220 0.160 0.700 0.212 0.752 0.374 + 58.30 12.950 12.974 12.975 0.800 0.100 0.837 0.800 0.100 0.084 0.670 0.080 0.675 0.340 + 58.35 12.921 12.955 12.956 0.944 -0.190 0.808 0.944 -0.190 -0.154 0.763 -0.180 0.790 0.399 + 58.40 13.168 13.194 13.205 0.824 -0.532 1.055 0.824 -0.532 -0.561 0.869 -0.438 1.037 0.562 + 58.45 13.201 13.231 13.239 0.882 -0.466 1.089 0.882 -0.466 -0.507 0.960 -0.411 1.090 0.581 + 58.50 12.957 12.973 12.978 0.637 -0.370 0.844 0.637 -0.370 -0.312 0.538 -0.236 0.628 0.332 + 58.55 12.905 12.919 12.924 0.586 -0.378 0.792 0.586 -0.378 -0.299 0.464 -0.221 0.557 0.297 + 58.60 12.884 12.889 12.889 0.361 -0.054 0.771 0.361 -0.054 -0.041 0.278 -0.019 0.364 0.141 + 58.65 12.529 12.535 12.536 0.376 0.166 0.416 0.376 0.166 0.069 0.156 0.063 0.171 0.091 + 58.70 12.607 12.626 12.629 0.706 0.234 0.494 0.706 0.234 0.116 0.349 0.165 0.399 0.201 + 58.75 12.643 12.673 12.676 0.873 0.265 0.530 0.873 0.265 0.141 0.463 0.232 0.557 0.268 + 58.80 12.256 12.281 12.289 0.786 0.433 0.143 0.786 0.433 0.062 0.113 0.340 0.413 0.182 + 58.85 12.414 12.440 12.446 0.808 0.381 0.301 0.808 0.381 0.115 0.243 0.308 0.444 0.204 + 58.90 12.342 12.355 12.368 0.563 0.578 0.229 0.563 0.578 0.133 0.129 0.325 0.352 0.187 + 58.95 12.302 12.327 12.329 0.776 0.229 0.190 0.776 0.229 0.043 0.147 0.178 0.345 0.117 + 59.00 11.868 11.903 11.911 0.912 0.441 -0.245 0.912 0.441 -0.108 -0.223 0.403 0.543 0.236 + 59.05 11.758 11.803 11.803 1.023 0.118 -0.355 1.023 0.118 -0.042 -0.363 0.120 0.593 0.192 + 59.10 11.454 11.489 11.495 0.897 0.383 -0.659 0.897 0.383 -0.252 -0.591 0.343 0.692 0.364 + 59.15 11.740 11.769 11.769 0.820 0.109 -0.372 0.820 0.109 -0.041 -0.305 0.090 0.411 0.160 + 59.20 11.611 11.631 11.635 0.684 -0.305 -0.502 0.684 -0.305 0.153 -0.343 -0.209 0.406 0.215 + 59.25 11.697 11.723 11.725 0.787 -0.160 -0.416 0.787 -0.160 0.066 -0.327 -0.126 0.409 0.178 + 59.30 11.595 11.631 11.633 0.904 -0.251 -0.517 0.904 -0.251 0.130 -0.468 -0.227 0.574 0.268 + 59.35 11.657 11.700 11.704 1.002 -0.325 -0.456 1.002 -0.325 0.148 -0.457 -0.325 0.658 0.290 + 59.40 11.477 11.544 11.551 1.244 -0.397 -0.636 1.244 -0.397 0.253 -0.791 -0.494 1.055 0.483 + 59.45 11.488 11.504 11.504 0.616 -0.063 -0.625 0.616 -0.063 0.040 -0.385 -0.039 0.387 0.194 + 59.50 11.178 11.195 11.196 0.630 -0.136 -0.935 0.630 -0.136 0.127 -0.589 -0.086 0.645 0.304 + 59.55 11.005 11.031 11.032 0.761 -0.177 -1.108 0.761 -0.177 0.196 -0.843 -0.134 0.919 0.438 + 59.60 11.115 11.138 11.140 0.720 0.222 -0.998 0.720 0.222 -0.221 -0.718 0.160 0.782 0.384 + 59.65 11.075 11.102 11.104 0.766 0.242 -1.038 0.766 0.242 -0.251 -0.794 0.185 0.861 0.427 + 59.70 11.347 11.349 11.349 0.237 0.089 -0.766 0.237 0.089 -0.068 -0.181 0.021 0.326 0.098 + 59.75 11.384 11.389 11.404 -0.321 0.585 -0.728 -0.321 0.585 -0.426 0.234 -0.188 0.488 0.261 + 59.80 11.408 11.408 11.421 0.080 0.542 -0.705 0.080 0.542 -0.382 -0.056 0.043 0.399 0.194 + 59.85 11.464 11.466 11.478 0.214 0.524 -0.649 0.214 0.524 -0.340 -0.139 0.112 0.371 0.192 + 59.90 11.537 11.538 11.544 0.132 0.374 -0.576 0.132 0.374 -0.215 -0.076 0.050 0.245 0.117 + 59.95 11.624 11.624 11.627 0.127 0.262 -0.489 0.127 0.262 -0.128 -0.062 0.033 0.162 0.073 + 60.00 11.957 11.962 11.963 0.362 -0.158 -0.156 0.362 -0.158 0.025 -0.057 -0.057 0.090 0.042 + 60.05 11.970 11.974 11.976 0.327 -0.198 -0.143 0.327 -0.198 0.028 -0.047 -0.065 0.083 0.042 + 60.10 11.811 11.822 11.827 0.513 -0.360 -0.302 0.513 -0.360 0.109 -0.155 -0.185 0.242 0.132 + 60.15 12.250 12.263 12.268 0.558 -0.349 0.138 0.558 -0.349 -0.048 0.077 -0.195 0.226 0.107 + 60.20 12.130 12.140 12.152 0.498 -0.548 0.017 0.498 -0.548 -0.009 0.008 -0.273 0.274 0.136 + 60.25 12.398 12.411 12.433 0.553 -0.740 0.285 0.553 -0.740 -0.211 0.158 -0.410 0.468 0.244 + 60.30 12.743 12.755 12.776 0.566 -0.737 0.630 0.566 -0.737 -0.464 0.356 -0.417 0.630 0.359 + 60.35 12.827 12.828 12.845 0.103 -0.667 0.714 0.103 -0.667 -0.476 0.074 -0.069 0.483 0.243 + 60.40 12.600 12.600 12.608 0.080 -0.433 0.487 0.080 -0.433 -0.211 0.039 -0.035 0.216 0.109 + 60.45 12.601 12.601 12.608 0.030 -0.425 0.488 0.030 -0.425 -0.207 0.015 -0.013 0.210 0.104 + 60.50 12.688 12.688 12.689 -0.116 -0.080 0.575 -0.116 -0.080 -0.046 -0.067 0.009 0.175 0.041 + 60.55 12.765 12.765 12.766 0.023 -0.121 0.652 0.023 -0.121 -0.079 0.015 -0.003 0.220 0.040 + 60.60 12.693 12.693 12.695 0.060 0.227 0.580 0.060 0.227 0.132 0.035 0.014 0.196 0.068 + 60.65 12.839 12.842 12.849 0.255 0.445 0.726 0.255 0.445 0.323 0.185 0.113 0.395 0.195 + 60.70 13.010 13.013 13.016 0.305 0.253 0.897 0.305 0.253 0.227 0.274 0.077 0.481 0.182 + 60.75 13.115 13.115 13.115 -0.034 0.114 1.002 -0.034 0.114 0.114 -0.034 -0.004 0.509 0.060 + 60.80 12.905 12.906 12.909 0.157 0.270 0.793 0.157 0.270 0.214 0.125 0.042 0.363 0.126 + 60.85 12.987 12.987 12.988 -0.134 0.140 0.874 -0.134 0.140 0.123 -0.117 -0.019 0.401 0.085 + 60.90 12.823 12.824 12.824 0.074 0.120 0.711 0.074 0.120 0.086 0.053 0.009 0.262 0.050 + 60.95 12.734 12.739 12.739 0.340 0.099 0.621 0.340 0.099 0.061 0.211 0.034 0.256 0.111 + 61.00 12.757 12.761 12.763 0.327 0.222 0.644 0.327 0.222 0.143 0.210 0.072 0.286 0.132 + 61.05 12.713 12.716 12.716 0.296 -0.024 0.600 0.296 -0.024 -0.014 0.177 -0.007 0.224 0.089 + 61.10 12.947 12.967 12.969 0.717 -0.236 0.835 0.717 -0.236 -0.197 0.598 -0.169 0.633 0.326 + 61.15 12.792 12.795 12.795 0.257 0.012 0.679 0.257 0.012 0.008 0.174 0.003 0.264 0.087 + 61.20 12.388 12.390 12.391 0.260 -0.152 0.275 0.260 -0.152 -0.042 0.071 -0.039 0.083 0.046 + 61.25 12.586 12.588 12.588 0.173 -0.089 0.474 0.173 -0.089 -0.042 0.082 -0.015 0.131 0.047 + 61.30 13.013 13.014 13.015 -0.136 -0.150 0.900 -0.136 -0.150 -0.135 -0.122 0.020 0.426 0.092 + 61.35 12.745 12.745 12.747 -0.096 -0.221 0.632 -0.096 -0.221 -0.140 -0.061 0.021 0.229 0.077 + 61.40 12.645 12.648 12.649 -0.256 -0.146 0.532 -0.256 -0.146 -0.078 -0.136 0.037 0.185 0.081 + 61.45 12.439 12.442 12.442 -0.280 -0.076 0.326 -0.280 -0.076 -0.025 -0.091 0.021 0.095 0.049 + 61.50 12.623 12.625 12.626 -0.232 0.101 0.510 -0.232 0.101 0.052 -0.119 -0.023 0.162 0.066 + 61.55 12.518 12.518 12.519 -0.044 0.156 0.405 -0.044 0.156 0.063 -0.018 -0.007 0.095 0.033 + 61.60 12.475 12.478 12.478 0.276 0.126 0.362 0.276 0.126 0.045 0.100 0.035 0.111 0.058 + 61.65 12.323 12.332 12.335 0.470 0.285 0.210 0.470 0.285 0.060 0.099 0.134 0.173 0.088 + 61.70 12.238 12.239 12.240 0.115 0.139 0.126 0.115 0.139 0.017 0.014 0.016 0.024 0.014 + 61.75 12.375 12.377 12.382 -0.266 -0.333 0.262 -0.266 -0.333 -0.087 -0.070 0.089 0.125 0.071 + 61.80 12.354 12.357 12.363 0.273 -0.361 0.242 0.273 -0.361 -0.087 0.066 -0.099 0.132 0.074 + 61.85 12.220 12.223 12.225 0.284 0.198 0.107 0.284 0.198 0.021 0.030 0.056 0.066 0.034 + 61.90 12.258 12.258 12.264 -0.036 0.380 0.145 -0.036 0.380 0.055 -0.005 -0.014 0.083 0.028 + 61.95 12.444 12.449 12.455 -0.377 0.354 0.331 -0.377 0.354 0.117 -0.125 -0.134 0.189 0.109 + 62.00 12.068 12.068 12.082 -0.028 0.591 -0.045 -0.028 0.591 -0.026 0.001 -0.016 0.176 0.016 + 62.05 12.311 12.312 12.315 0.183 0.285 0.198 0.183 0.285 0.056 0.036 0.052 0.077 0.042 + 62.10 12.310 12.310 12.315 0.105 0.331 0.197 0.105 0.331 0.065 0.021 0.035 0.080 0.038 + 62.15 12.208 12.208 12.225 0.028 0.637 0.095 0.028 0.637 0.061 0.003 0.018 0.208 0.032 + 62.20 12.261 12.262 12.267 0.110 0.372 0.148 0.110 0.372 0.055 0.016 0.041 0.086 0.035 + 62.25 12.028 12.028 12.038 0.104 0.497 -0.085 0.104 0.497 -0.042 -0.009 0.052 0.132 0.034 + 62.30 11.815 11.829 11.845 0.571 0.618 -0.298 0.571 0.618 -0.184 -0.170 0.353 0.398 0.216 + 62.35 12.038 12.049 12.067 0.519 0.658 -0.075 0.519 0.658 -0.049 -0.039 0.341 0.354 0.174 + 62.40 11.926 11.932 11.961 0.370 0.834 -0.187 0.370 0.834 -0.156 -0.069 0.309 0.434 0.176 + 62.45 11.982 11.990 12.005 0.434 0.608 -0.131 0.434 0.608 -0.080 -0.057 0.264 0.288 0.141 + 62.50 12.099 12.108 12.109 0.453 0.151 -0.014 0.453 0.151 -0.002 -0.006 0.069 0.114 0.034 + 62.55 11.917 11.920 11.922 0.272 0.202 -0.196 0.272 0.202 -0.040 -0.053 0.055 0.077 0.043 + 62.60 11.731 11.734 11.743 0.249 0.457 -0.382 0.249 0.457 -0.174 -0.095 0.114 0.208 0.114 + 62.65 11.842 11.843 11.858 0.173 0.601 -0.271 0.173 0.601 -0.163 -0.047 0.104 0.232 0.099 + 62.70 11.721 11.721 11.737 0.014 0.602 -0.392 0.014 0.602 -0.236 -0.005 0.008 0.258 0.118 + 62.75 11.895 11.898 11.906 -0.272 0.448 -0.218 -0.272 0.448 -0.098 0.059 -0.122 0.161 0.083 + 62.80 12.054 12.056 12.073 -0.211 0.640 -0.058 -0.211 0.640 -0.037 0.012 -0.135 0.229 0.070 + 62.85 11.891 11.891 11.943 -0.059 1.104 -0.222 -0.059 1.104 -0.245 0.013 -0.065 0.636 0.127 + 62.90 11.841 11.843 11.892 -0.194 1.075 -0.271 -0.194 1.075 -0.292 0.053 -0.209 0.633 0.181 + 62.95 12.113 12.129 12.159 -0.606 0.863 0.001 -0.606 0.863 0.001 -0.000 -0.522 0.555 0.261 + 63.00 12.038 12.039 12.055 -0.129 0.625 -0.074 -0.129 0.625 -0.046 0.010 -0.080 0.206 0.047 + 63.05 11.651 11.651 11.661 0.076 0.464 -0.462 0.076 0.464 -0.214 -0.035 0.035 0.217 0.110 + 63.10 11.627 11.627 11.643 0.013 0.614 -0.486 0.013 0.614 -0.298 -0.006 0.008 0.306 0.149 + 63.15 11.731 11.732 11.745 0.127 0.550 -0.381 0.127 0.550 -0.210 -0.048 0.070 0.232 0.113 + 63.20 11.696 11.698 11.715 -0.217 0.639 -0.417 -0.217 0.639 -0.267 0.090 -0.138 0.315 0.157 + 63.25 11.458 11.463 11.475 -0.334 0.526 -0.655 -0.334 0.526 -0.345 0.219 -0.176 0.409 0.222 + 63.30 11.331 11.340 11.343 -0.457 0.260 -0.782 -0.457 0.260 -0.203 0.357 -0.119 0.444 0.214 + 63.35 11.416 11.417 11.417 -0.169 0.004 -0.697 -0.169 0.004 -0.003 0.118 -0.001 0.257 0.059 + 63.40 11.454 11.458 11.464 -0.309 0.387 -0.659 -0.309 0.387 -0.255 0.204 -0.120 0.340 0.174 + 63.45 11.583 11.587 11.591 -0.293 0.319 -0.530 -0.293 0.319 -0.169 0.155 -0.094 0.234 0.124 + 63.50 11.225 11.227 11.229 -0.177 0.222 -0.887 -0.177 0.222 -0.197 0.157 -0.039 0.434 0.127 + 63.55 11.103 11.104 11.111 -0.124 0.388 -1.010 -0.124 0.388 -0.392 0.125 -0.048 0.593 0.207 + 63.60 11.176 11.176 11.193 0.022 0.626 -0.937 0.022 0.626 -0.586 -0.021 0.014 0.635 0.293 + 63.65 11.077 11.077 11.093 -0.064 0.590 -1.036 -0.064 0.590 -0.612 0.066 -0.038 0.713 0.308 + 63.70 10.936 10.936 10.978 0.099 0.950 -1.177 0.099 0.950 -1.118 -0.116 0.094 1.149 0.564 + 63.75 10.927 10.928 10.985 0.154 1.118 -1.186 0.154 1.118 -1.326 -0.183 0.173 1.340 0.675 + 63.80 11.095 11.097 11.161 0.214 1.189 -1.018 0.214 1.189 -1.211 -0.218 0.255 1.248 0.628 + 63.85 11.367 11.367 11.479 0.117 1.597 -0.746 0.117 1.597 -1.191 -0.087 0.186 1.561 0.605 + 63.90 11.584 11.585 11.678 -0.125 1.471 -0.529 -0.125 1.471 -0.778 0.066 -0.183 1.229 0.401 + 63.95 11.056 11.058 11.149 -0.227 1.423 -1.057 -0.227 1.423 -1.504 0.239 -0.322 1.597 0.778 + 64.00 10.865 10.866 10.946 -0.125 1.322 -1.248 -0.125 1.322 -1.649 0.156 -0.165 1.659 0.832 + 64.05 11.127 11.132 11.261 -0.306 1.703 -0.985 -0.306 1.703 -1.678 0.301 -0.520 1.983 0.891 + 64.10 11.092 11.099 11.270 -0.382 1.959 -1.020 -0.382 1.959 -1.999 0.389 -0.747 2.512 1.085 + 64.15 11.016 11.025 11.212 0.442 2.039 -1.097 0.442 2.039 -2.236 -0.485 0.901 2.778 1.230 + 64.20 11.120 11.135 11.258 0.585 1.660 -0.993 0.585 1.660 -1.648 -0.581 0.972 2.042 1.000 + 64.25 11.268 11.271 11.394 0.261 1.668 -0.845 0.261 1.668 -1.409 -0.220 0.435 1.781 0.746 + 64.30 11.256 11.258 11.360 0.201 1.520 -0.857 0.201 1.520 -1.302 -0.172 0.306 1.542 0.674 + 64.35 11.367 11.380 11.453 0.553 1.287 -0.746 0.553 1.287 -0.960 -0.412 0.712 1.260 0.632 + 64.40 11.239 11.249 11.316 0.453 1.234 -0.873 0.453 1.234 -1.078 -0.395 0.558 1.245 0.638 + 64.45 11.115 11.116 11.203 0.138 1.400 -0.998 0.138 1.400 -1.398 -0.138 0.193 1.488 0.709 + 64.50 10.914 10.915 11.001 0.115 1.373 -1.199 0.115 1.373 -1.646 -0.137 0.157 1.668 0.830 + 64.55 10.973 10.981 11.081 0.425 1.483 -1.140 0.425 1.483 -1.691 -0.485 0.631 1.840 0.934 + 64.60 11.015 11.044 11.140 0.792 1.460 -1.098 0.792 1.460 -1.602 -0.870 1.156 1.981 1.079 + 64.65 11.102 11.120 11.231 0.644 1.572 -1.011 0.644 1.572 -1.590 -0.651 1.012 1.954 0.997 + 64.70 11.154 11.159 11.286 0.342 1.691 -0.959 0.342 1.691 -1.622 -0.328 0.578 1.949 0.877 + 64.75 11.497 11.505 11.650 0.423 1.829 -0.616 0.423 1.829 -1.126 -0.261 0.774 1.952 0.696 + 64.80 11.914 11.914 12.067 0.087 1.916 -0.199 0.087 1.916 -0.382 -0.017 0.167 1.860 0.208 + 64.85 12.230 12.231 12.377 -0.160 1.894 0.117 -0.160 1.894 0.222 -0.019 -0.302 1.813 0.188 + 64.90 11.766 11.773 11.908 -0.393 1.791 -0.347 -0.393 1.791 -0.621 0.136 -0.704 1.741 0.474 + 64.95 11.808 11.809 11.943 0.092 1.786 -0.305 0.092 1.786 -0.544 -0.028 0.165 1.645 0.284 + 65.00 12.235 12.254 12.376 0.679 1.738 0.122 0.679 1.738 0.212 0.083 1.180 1.748 0.601 + 65.05 12.193 12.225 12.338 0.886 1.660 0.081 0.886 1.660 0.134 0.071 1.471 1.774 0.740 + 65.10 12.039 12.051 12.159 0.545 1.617 -0.074 0.545 1.617 -0.119 -0.040 0.881 1.458 0.445 + 65.15 12.125 12.137 12.221 0.537 1.436 0.012 0.537 1.436 0.017 0.006 0.771 1.175 0.386 + 65.20 12.106 12.118 12.231 0.548 1.659 -0.007 0.548 1.659 -0.012 -0.004 0.909 1.527 0.455 + 65.25 12.059 12.090 12.170 0.862 1.396 -0.054 0.862 1.396 -0.075 -0.046 1.202 1.346 0.603 + 65.30 12.285 12.322 12.374 0.949 1.136 0.172 0.949 1.136 0.196 0.164 1.078 1.110 0.554 + 65.35 12.310 12.339 12.380 0.854 0.997 0.197 0.854 0.997 0.196 0.168 0.851 0.881 0.445 + 65.40 12.582 12.600 12.631 0.674 0.876 0.470 0.674 0.876 0.412 0.317 0.591 0.722 0.393 + 65.45 12.769 12.788 12.813 0.697 0.808 0.656 0.697 0.808 0.530 0.457 0.563 0.784 0.449 + 65.50 12.602 12.621 12.661 0.701 1.002 0.489 0.701 1.002 0.490 0.343 0.702 0.867 0.461 + 65.55 12.466 12.470 12.548 0.328 1.396 0.353 0.328 1.396 0.493 0.116 0.458 1.091 0.341 + 65.60 12.452 12.457 12.483 0.373 0.799 0.339 0.373 0.799 0.271 0.126 0.298 0.446 0.211 + 65.65 12.294 12.323 12.380 0.838 1.189 0.182 0.838 1.189 0.216 0.152 0.996 1.074 0.515 + 65.70 12.365 12.394 12.463 0.848 1.308 0.252 0.848 1.308 0.330 0.214 1.109 1.246 0.588 + 65.75 12.571 12.603 12.633 0.894 0.871 0.458 0.894 0.871 0.399 0.410 0.779 0.884 0.483 + 65.80 12.480 12.489 12.505 0.462 0.640 0.368 0.462 0.640 0.235 0.170 0.296 0.379 0.207 + 65.85 12.521 12.528 12.551 0.417 0.751 0.409 0.417 0.751 0.307 0.171 0.313 0.452 0.235 + 65.90 12.737 12.737 12.753 0.059 0.654 0.624 0.059 0.654 0.408 0.037 0.038 0.410 0.206 + 65.95 12.552 12.553 12.566 0.150 0.569 0.439 0.150 0.569 0.250 0.066 0.085 0.269 0.136 + 66.00 12.598 12.598 12.655 0.097 1.199 0.485 0.097 1.199 0.582 0.047 0.116 0.842 0.298 + 66.05 12.580 12.580 12.667 0.029 1.485 0.467 0.029 1.485 0.694 0.014 0.044 1.212 0.348 + 66.10 12.597 12.599 12.664 0.242 1.280 0.484 0.242 1.280 0.620 0.117 0.310 0.966 0.351 + 66.15 12.414 12.427 12.478 0.572 1.127 0.301 0.572 1.127 0.339 0.172 0.644 0.844 0.374 + 66.20 12.217 12.232 12.271 0.607 0.977 0.104 0.607 0.977 0.102 0.063 0.594 0.667 0.303 + 66.25 12.264 12.268 12.296 0.324 0.833 0.151 0.324 0.833 0.126 0.049 0.270 0.410 0.151 + 66.30 12.104 12.104 12.132 0.122 0.825 -0.009 0.122 0.825 -0.007 -0.001 0.100 0.347 0.050 + 66.35 12.276 12.283 12.287 0.414 0.289 0.163 0.414 0.289 0.047 0.068 0.120 0.141 0.073 + 66.40 12.479 12.480 12.490 0.157 0.497 0.367 0.157 0.497 0.182 0.058 0.078 0.203 0.103 + 66.45 12.435 12.435 12.460 0.055 0.798 0.322 0.055 0.798 0.257 0.018 0.044 0.372 0.131 + 66.50 12.274 12.277 12.283 0.268 0.386 0.161 0.268 0.386 0.062 0.043 0.103 0.123 0.064 + 66.55 12.221 12.225 12.227 0.338 0.220 0.108 0.338 0.220 0.024 0.036 0.074 0.087 0.043 + 66.60 12.024 12.024 12.030 0.143 0.363 -0.089 0.143 0.363 -0.032 -0.013 0.052 0.080 0.031 + 66.65 11.448 11.448 11.457 -0.032 0.446 -0.665 -0.032 0.446 -0.296 0.021 -0.014 0.321 0.149 + 66.70 11.414 11.414 11.433 0.080 0.666 -0.699 0.080 0.666 -0.465 -0.056 0.053 0.469 0.236 + 66.75 11.715 11.715 11.736 0.072 0.700 -0.398 0.072 0.700 -0.279 -0.028 0.050 0.327 0.142 + 66.80 11.494 11.494 11.541 0.039 1.045 -0.619 0.039 1.045 -0.647 -0.024 0.041 0.739 0.324 + 66.85 11.346 11.347 11.408 -0.013 1.187 -0.766 -0.013 1.187 -0.910 0.010 -0.016 0.999 0.455 + 66.90 11.128 11.128 11.197 0.040 1.240 -0.984 0.040 1.240 -1.221 -0.040 0.050 1.255 0.611 + 66.95 11.141 11.142 11.215 0.145 1.276 -0.972 0.145 1.276 -1.240 -0.141 0.185 1.297 0.631 + 67.00 11.262 11.270 11.370 0.435 1.502 -0.851 0.435 1.502 -1.278 -0.370 0.653 1.585 0.741 + 67.05 11.019 11.035 11.085 0.604 1.045 -1.094 0.604 1.045 -1.143 -0.661 0.631 1.327 0.732 + 67.10 10.837 10.858 10.897 0.679 0.917 -1.276 0.679 0.917 -1.170 -0.866 0.623 1.465 0.792 + 67.15 10.804 10.817 10.892 0.521 1.273 -1.308 0.521 1.273 -1.666 -0.682 0.664 1.802 0.959 + 67.20 10.715 10.763 10.836 1.010 1.259 -1.397 1.010 1.259 -1.760 -1.412 1.272 2.280 1.295 + 67.25 10.485 10.503 10.570 0.606 1.191 -1.628 0.606 1.191 -1.939 -0.986 0.722 2.218 1.146 + 67.30 10.774 10.793 10.834 0.653 0.932 -1.339 0.653 0.932 -1.248 -0.875 0.609 1.544 0.820 + 67.35 10.896 10.909 10.927 0.517 0.628 -1.217 0.517 0.628 -0.764 -0.629 0.325 1.071 0.521 + 67.40 11.054 11.071 11.079 0.610 0.435 -1.059 0.610 0.435 -0.461 -0.646 0.266 0.842 0.419 + 67.45 11.166 11.179 11.187 0.535 0.435 -0.947 0.535 0.435 -0.412 -0.507 0.233 0.686 0.347 + 67.50 11.225 11.229 11.233 0.315 0.303 -0.888 0.315 0.303 -0.269 -0.280 0.096 0.490 0.200 + 67.55 10.927 10.932 10.965 0.328 0.851 -1.186 0.328 0.851 -1.009 -0.389 0.279 1.119 0.558 + 67.60 10.795 10.823 10.859 0.775 0.889 -1.318 0.775 0.889 -1.171 -1.021 0.689 1.563 0.850 + 67.65 10.564 10.585 10.641 0.669 1.084 -1.549 0.669 1.084 -1.678 -1.036 0.725 2.010 1.051 + 67.70 10.216 10.222 10.278 0.342 1.074 -1.897 0.342 1.074 -2.037 -0.650 0.368 2.434 1.085 + 67.75 10.588 10.596 10.678 0.424 1.313 -1.525 0.424 1.313 -2.003 -0.647 0.557 2.115 1.089 + 67.80 10.507 10.515 10.576 0.412 1.127 -1.606 0.412 1.127 -1.809 -0.661 0.464 2.009 0.991 + 67.85 10.468 10.468 10.493 0.003 0.724 -1.644 0.003 0.724 -1.190 -0.005 0.002 1.614 0.595 + 67.90 10.338 10.339 10.364 -0.149 0.710 -1.774 -0.149 0.710 -1.260 0.265 -0.106 1.838 0.646 + 67.95 10.216 10.219 10.260 0.232 0.919 -1.897 0.232 0.919 -1.743 -0.439 0.213 2.247 0.905 + 68.00 10.079 10.081 10.180 0.190 1.415 -2.033 0.190 1.415 -2.877 -0.386 0.268 3.086 1.458 + 68.05 9.809 9.810 9.903 0.161 1.348 -2.304 0.161 1.348 -3.105 -0.370 0.216 3.575 1.567 + 68.10 10.101 10.105 10.213 0.277 1.487 -2.012 0.277 1.487 -2.992 -0.557 0.412 3.168 1.535 + 68.15 10.519 10.525 10.665 0.342 1.722 -1.593 0.342 1.722 -2.744 -0.545 0.589 2.811 1.430 + 68.20 10.732 10.742 10.863 0.466 1.616 -1.381 0.466 1.616 -2.232 -0.643 0.753 2.368 1.221 + 68.25 10.489 10.498 10.642 0.441 1.744 -1.624 0.441 1.744 -2.832 -0.716 0.769 2.936 1.510 + 68.30 10.538 10.549 10.715 0.490 1.878 -1.575 0.490 1.878 -2.957 -0.772 0.921 3.124 1.596 + 68.35 10.787 10.787 10.958 -0.042 1.924 -1.326 -0.042 1.924 -2.551 0.056 -0.081 2.731 1.276 + 68.40 11.111 11.118 11.255 -0.388 1.755 -1.002 -0.388 1.755 -1.758 0.389 -0.681 2.117 0.962 + 68.45 11.164 11.169 11.283 -0.349 1.595 -0.949 -0.349 1.595 -1.514 0.331 -0.556 1.783 0.823 + 68.50 11.225 11.231 11.291 -0.365 1.163 -0.888 -0.365 1.163 -1.033 0.324 -0.425 1.138 0.582 + 68.55 11.152 11.159 11.220 -0.414 1.161 -0.961 -0.414 1.161 -1.116 0.398 -0.481 1.222 0.640 + 68.60 11.173 11.176 11.257 -0.270 1.343 -0.940 -0.270 1.343 -1.262 0.254 -0.363 1.380 0.669 + 68.65 11.123 11.132 11.240 -0.447 1.552 -0.989 -0.447 1.552 -1.535 0.442 -0.693 1.793 0.871 + 68.70 11.343 11.346 11.425 -0.259 1.341 -0.770 -0.259 1.341 -1.032 0.199 -0.347 1.229 0.554 + 68.75 11.336 11.337 11.362 0.096 0.756 -0.776 0.096 0.756 -0.587 -0.074 0.072 0.591 0.298 + 68.80 11.566 11.568 11.588 -0.208 0.683 -0.547 -0.208 0.683 -0.373 0.114 -0.142 0.404 0.208 + 68.85 11.469 11.474 11.498 -0.352 0.736 -0.644 -0.352 0.736 -0.474 0.226 -0.259 0.540 0.293 + 68.90 11.841 11.841 11.867 -0.022 0.795 -0.272 -0.022 0.795 -0.216 0.006 -0.018 0.353 0.109 + 68.95 12.068 12.068 12.081 0.022 0.550 -0.045 0.022 0.550 -0.024 -0.001 0.012 0.153 0.014 + 69.00 12.250 12.254 12.271 -0.298 0.651 0.138 -0.298 0.651 0.090 -0.041 -0.194 0.266 0.109 + 69.05 12.213 12.219 12.245 -0.412 0.795 0.100 -0.412 0.795 0.079 -0.041 -0.327 0.405 0.169 + 69.10 12.333 12.339 12.365 -0.386 0.803 0.220 -0.386 0.803 0.176 -0.085 -0.310 0.421 0.183 + 69.15 12.065 12.066 12.130 -0.149 1.249 -0.048 -0.149 1.249 -0.060 0.007 -0.186 0.792 0.098 + 69.20 11.980 11.981 12.076 -0.214 1.509 -0.133 -0.214 1.509 -0.201 0.029 -0.324 1.171 0.191 + 69.25 12.230 12.231 12.338 -0.158 1.623 0.117 -0.158 1.623 0.190 -0.018 -0.256 1.336 0.160 + 69.30 12.442 12.442 12.511 -0.088 1.309 0.329 -0.088 1.309 0.431 -0.029 -0.115 0.914 0.223 + 69.35 12.524 12.524 12.588 0.069 1.266 0.411 0.069 1.266 0.520 0.028 0.087 0.889 0.264 + 69.40 12.427 12.430 12.507 0.256 1.385 0.314 0.256 1.385 0.435 0.080 0.354 1.041 0.283 + 69.45 12.231 12.246 12.343 0.598 1.545 0.118 0.598 1.545 0.183 0.071 0.924 1.380 0.472 + 69.50 11.982 11.988 12.090 0.381 1.569 -0.131 0.381 1.569 -0.206 -0.050 0.598 1.312 0.317 + 69.55 12.228 12.228 12.316 0.088 1.469 0.115 0.088 1.469 0.169 0.010 0.129 1.089 0.107 + 69.60 12.462 12.464 12.536 0.211 1.340 0.350 0.211 1.340 0.469 0.074 0.282 0.981 0.276 + 69.65 12.577 12.590 12.638 0.569 1.104 0.464 0.569 1.104 0.512 0.264 0.628 0.879 0.426 + 69.70 12.483 12.494 12.561 0.539 1.297 0.370 0.539 1.297 0.480 0.199 0.699 1.055 0.435 + 69.75 12.180 12.197 12.271 0.643 1.344 0.067 0.643 1.344 0.090 0.043 0.864 1.111 0.435 + 69.80 12.473 12.506 12.586 0.912 1.414 0.360 0.912 1.414 0.509 0.328 1.289 1.480 0.712 + 69.85 12.183 12.222 12.276 0.968 1.159 0.070 0.968 1.159 0.082 0.068 1.122 1.143 0.563 + 69.90 12.116 12.185 12.224 1.291 0.980 0.004 1.291 0.980 0.004 0.005 1.265 1.314 0.633 + 69.95 12.009 12.062 12.079 1.131 0.644 -0.104 1.131 0.644 -0.067 -0.118 0.729 0.853 0.371 + 70.00 12.245 12.287 12.316 1.017 0.848 0.132 1.017 0.848 0.112 0.134 0.862 0.885 0.440 + 70.05 12.319 12.394 12.423 1.354 0.847 0.207 1.354 0.847 0.175 0.280 1.147 1.297 0.597 + 70.10 12.631 12.703 12.730 1.356 0.820 0.518 1.356 0.820 0.424 0.702 1.111 1.389 0.691 + 70.15 12.860 12.911 12.917 1.142 0.407 0.747 1.142 0.407 0.304 0.853 0.464 1.014 0.509 + 70.20 12.519 12.550 12.569 0.881 0.685 0.406 0.881 0.685 0.278 0.358 0.603 0.705 0.377 + 70.25 12.222 12.242 12.268 0.698 0.800 0.109 0.698 0.800 0.087 0.076 0.559 0.570 0.285 + 70.30 12.464 12.473 12.481 0.466 0.463 0.351 0.466 0.463 0.163 0.163 0.215 0.277 0.158 + 70.35 12.367 12.372 12.379 0.374 0.417 0.254 0.374 0.417 0.106 0.095 0.156 0.189 0.105 + 70.40 12.563 12.565 12.578 0.189 0.586 0.450 0.189 0.586 0.264 0.085 0.111 0.291 0.149 + 70.45 12.523 12.525 12.529 0.224 0.312 0.410 0.224 0.312 0.128 0.092 0.070 0.158 0.086 + 70.50 12.481 12.483 12.489 0.241 0.365 0.368 0.241 0.365 0.134 0.089 0.088 0.163 0.092 + 70.55 12.419 12.437 12.439 0.658 0.230 0.306 0.658 0.230 0.070 0.202 0.151 0.290 0.131 + 70.60 12.225 12.254 12.254 0.836 0.053 0.112 0.836 0.053 0.006 0.094 0.044 0.357 0.052 + 70.65 12.468 12.489 12.490 0.721 0.159 0.355 0.721 0.159 0.056 0.256 0.114 0.336 0.143 + 70.70 12.704 12.717 12.719 0.579 0.227 0.591 0.579 0.227 0.134 0.342 0.131 0.368 0.195 + 70.75 12.423 12.436 12.439 0.567 0.263 0.311 0.567 0.263 0.082 0.176 0.149 0.243 0.122 + 70.80 12.324 12.325 12.333 0.136 0.445 0.211 0.136 0.445 0.094 0.029 0.060 0.131 0.058 + 70.85 12.383 12.383 12.390 -0.091 0.414 0.270 -0.091 0.414 0.112 -0.025 -0.038 0.126 0.060 + 70.90 12.620 12.630 12.631 0.504 0.201 0.507 0.504 0.201 0.102 0.256 0.101 0.276 0.147 + 70.95 12.594 12.602 12.603 0.441 -0.155 0.481 0.441 -0.155 -0.075 0.212 -0.068 0.225 0.117 + 71.00 12.904 12.906 12.906 0.200 0.080 0.791 0.200 0.080 0.063 0.158 0.016 0.336 0.085 + 71.05 12.915 12.918 12.921 0.236 0.286 0.803 0.236 0.286 0.230 0.190 0.068 0.391 0.153 + 71.10 13.019 13.019 13.019 0.012 -0.038 0.906 0.012 -0.038 -0.035 0.011 -0.000 0.411 0.018 + 71.15 13.043 13.055 13.060 -0.561 0.359 0.931 -0.561 0.359 0.334 -0.522 -0.201 0.655 0.326 + 71.20 12.604 12.637 12.657 -0.910 0.718 0.491 -0.910 0.718 0.353 -0.447 -0.653 0.793 0.433 + 71.25 12.708 12.730 12.760 -0.752 0.872 0.595 -0.752 0.872 0.519 -0.447 -0.656 0.840 0.474 + 71.30 12.807 12.820 12.833 -0.586 0.570 0.694 -0.586 0.570 0.395 -0.406 -0.334 0.575 0.329 + 71.35 12.467 12.468 12.495 -0.138 0.818 0.354 -0.138 0.818 0.290 -0.049 -0.113 0.407 0.157 + 71.40 12.182 12.183 12.204 -0.090 0.717 0.069 -0.090 0.717 0.050 -0.006 -0.065 0.263 0.041 + 71.45 12.219 12.221 12.237 -0.178 0.631 0.107 -0.178 0.631 0.067 -0.019 -0.112 0.221 0.066 + 71.50 11.997 11.998 12.015 -0.166 0.623 -0.116 -0.166 0.623 -0.072 0.019 -0.104 0.214 0.064 + 71.55 12.036 12.036 12.060 -0.130 0.754 -0.077 -0.130 0.754 -0.058 0.010 -0.098 0.295 0.057 + 71.60 12.187 12.194 12.239 -0.417 1.045 0.075 -0.417 1.045 0.078 -0.031 -0.436 0.636 0.222 + 71.65 12.141 12.143 12.182 -0.219 0.973 0.028 -0.219 0.973 0.027 -0.006 -0.213 0.498 0.108 + 71.70 12.590 12.594 12.617 -0.348 0.760 0.477 -0.348 0.760 0.362 -0.166 -0.265 0.463 0.239 + 71.75 12.600 12.610 12.633 -0.510 0.756 0.487 -0.510 0.756 0.368 -0.248 -0.385 0.534 0.294 + 71.80 12.781 12.807 12.819 -0.811 0.562 0.669 -0.811 0.562 0.376 -0.542 -0.456 0.711 0.401 + 71.85 12.831 12.866 12.888 -0.945 0.762 0.718 -0.945 0.762 0.547 -0.678 -0.720 0.994 0.565 + 71.90 13.013 13.031 13.050 -0.689 0.711 0.900 -0.689 0.711 0.639 -0.620 -0.490 0.895 0.508 + 71.95 13.063 13.094 13.119 -0.898 0.817 0.950 -0.898 0.817 0.776 -0.853 -0.733 1.188 0.683 + 72.00 12.903 12.925 12.937 -0.741 0.560 0.791 -0.741 0.560 0.442 -0.586 -0.415 0.744 0.422 + 72.05 12.774 12.774 12.787 -0.052 0.563 0.661 -0.052 0.563 0.372 -0.034 -0.029 0.378 0.187 + 72.10 12.820 12.820 12.835 0.076 0.613 0.707 0.076 0.613 0.434 0.054 0.047 0.441 0.220 + 72.15 12.944 12.948 12.951 0.298 0.300 0.831 0.298 0.300 0.250 0.248 0.089 0.435 0.181 + 72.20 13.103 13.119 13.120 0.642 0.150 0.990 0.642 0.150 0.149 0.636 0.096 0.708 0.330 + 72.25 13.473 13.497 13.498 0.810 -0.120 1.360 0.810 -0.120 -0.163 1.102 -0.097 1.260 0.559 + 72.30 13.323 13.327 13.331 0.333 -0.309 1.210 0.333 -0.309 -0.374 0.403 -0.103 0.835 0.280 + 72.35 13.128 13.137 13.137 0.488 -0.100 1.015 0.488 -0.100 -0.102 0.496 -0.049 0.639 0.254 + 72.40 13.306 13.315 13.317 0.497 -0.263 1.193 0.497 -0.263 -0.314 0.593 -0.131 0.870 0.342 + 72.45 13.324 13.325 13.338 0.204 -0.575 1.211 0.204 -0.575 -0.696 0.247 -0.117 0.919 0.374 + 72.50 13.446 13.446 13.448 -0.078 -0.192 1.333 -0.078 -0.192 -0.256 -0.104 0.015 0.911 0.139 + 72.55 13.503 13.506 13.506 -0.291 0.039 1.390 -0.291 0.039 0.054 -0.404 -0.011 1.009 0.204 + 72.60 13.520 13.529 13.529 -0.478 -0.050 1.408 -0.478 -0.050 -0.071 -0.673 0.024 1.106 0.339 + 72.65 13.548 13.557 13.557 -0.500 0.132 1.435 -0.500 0.132 0.190 -0.718 -0.066 1.163 0.373 + 72.70 13.304 13.329 13.329 -0.817 0.080 1.191 -0.817 0.080 0.095 -0.973 -0.065 1.046 0.490 + 72.75 13.630 13.667 13.668 -1.009 -0.113 1.517 -1.009 -0.113 -0.172 -1.531 0.114 1.667 0.773 + 72.80 13.679 13.692 13.692 -0.592 0.009 1.566 -0.592 0.009 0.014 -0.927 -0.005 1.402 0.463 + 72.85 13.544 13.552 13.552 -0.460 0.067 1.431 -0.460 0.067 0.096 -0.659 -0.031 1.133 0.333 + 72.90 13.447 13.448 13.448 -0.080 0.082 1.335 -0.080 0.082 0.110 -0.107 -0.007 0.897 0.077 + 72.95 13.367 13.367 13.367 -0.087 0.071 1.254 -0.087 0.071 0.089 -0.109 -0.006 0.792 0.070 + 73.00 13.640 13.641 13.641 -0.123 -0.139 1.527 -0.123 -0.139 -0.213 -0.188 0.017 1.184 0.142 + 73.05 13.425 13.425 13.430 -0.057 -0.337 1.312 -0.057 -0.337 -0.442 -0.075 0.019 0.920 0.224 + 73.10 13.277 13.278 13.288 0.183 -0.506 1.164 0.183 -0.506 -0.589 0.213 -0.092 0.822 0.317 + 73.15 13.409 13.419 13.428 0.519 -0.491 1.296 0.519 -0.491 -0.637 0.672 -0.255 1.095 0.480 + 73.20 13.503 13.506 13.507 0.302 -0.136 1.390 0.302 -0.136 -0.189 0.421 -0.041 1.021 0.231 + 73.25 13.354 13.361 13.361 0.436 0.061 1.241 0.436 0.061 0.075 0.541 0.026 0.867 0.273 + 73.30 13.103 13.122 13.123 0.705 0.163 0.990 0.705 0.163 0.162 0.698 0.115 0.752 0.363 + 73.35 13.004 13.041 13.042 0.988 -0.113 0.891 0.988 -0.113 -0.100 0.881 -0.111 0.892 0.447 + 73.40 13.015 13.053 13.054 1.005 -0.151 0.902 1.005 -0.151 -0.136 0.907 -0.152 0.923 0.465 + 73.45 12.563 12.582 12.585 0.684 -0.294 0.450 0.684 -0.294 -0.132 0.308 -0.201 0.379 0.196 + 73.50 12.605 12.647 12.651 1.027 -0.302 0.492 1.027 -0.302 -0.149 0.506 -0.311 0.694 0.306 + 73.55 12.603 12.656 12.660 1.152 -0.337 0.490 1.152 -0.337 -0.166 0.565 -0.389 0.841 0.353 + 73.60 12.230 12.277 12.277 1.068 -0.075 0.118 1.068 -0.075 -0.009 0.126 -0.080 0.581 0.075 + 73.65 12.161 12.240 12.240 1.392 0.001 0.048 1.392 0.001 0.000 0.067 0.002 0.970 0.033 + 73.70 12.178 12.274 12.274 1.531 -0.043 0.066 1.531 -0.043 -0.003 0.100 -0.065 1.176 0.060 + 73.75 12.146 12.263 12.264 1.688 0.158 0.033 1.688 0.158 0.005 0.056 0.266 1.437 0.136 + 73.80 12.551 12.677 12.677 1.781 -0.055 0.438 1.781 -0.055 -0.024 0.780 -0.099 1.684 0.393 + 73.85 12.740 12.826 12.826 1.479 0.101 0.627 1.479 0.101 0.063 0.928 0.149 1.296 0.471 + 73.90 12.681 12.750 12.751 1.319 -0.137 0.569 1.319 -0.137 -0.078 0.750 -0.180 1.041 0.388 + 73.95 12.763 12.835 12.841 1.358 -0.396 0.650 1.358 -0.396 -0.257 0.883 -0.537 1.211 0.533 + 74.00 12.688 12.770 12.792 1.444 -0.737 0.576 1.444 -0.737 -0.424 0.831 -1.065 1.480 0.708 + 74.05 12.306 12.354 12.398 1.088 -1.049 0.193 1.088 -1.049 -0.202 0.210 -1.142 1.161 0.589 + 74.10 12.104 12.138 12.168 0.906 -0.845 -0.008 0.906 -0.845 0.007 -0.008 -0.766 0.768 0.383 + 74.15 12.039 12.055 12.075 0.622 -0.687 -0.074 0.622 -0.687 0.051 -0.046 -0.427 0.432 0.216 + 74.20 12.234 12.262 12.286 0.839 -0.761 0.121 0.839 -0.761 -0.092 0.101 -0.638 0.649 0.326 + 74.25 12.176 12.231 12.237 1.162 -0.381 0.063 1.162 -0.381 -0.024 0.073 -0.443 0.750 0.225 + 74.30 12.376 12.416 12.416 0.993 -0.051 0.263 0.993 -0.051 -0.014 0.261 -0.051 0.529 0.133 + 74.35 12.742 12.773 12.773 0.885 -0.089 0.630 0.885 -0.089 -0.056 0.557 -0.078 0.593 0.283 + 74.40 13.192 13.215 13.233 0.781 -0.690 1.079 0.781 -0.690 -0.744 0.843 -0.539 1.125 0.624 + 74.45 13.443 13.453 13.467 0.509 -0.616 1.331 0.509 -0.616 -0.820 0.678 -0.314 1.205 0.555 + 74.50 13.736 13.755 13.774 0.737 -0.714 1.623 0.737 -0.714 -1.159 1.196 -0.526 1.843 0.873 + 74.55 13.493 13.514 13.522 0.749 -0.467 1.380 0.749 -0.467 -0.645 1.033 -0.350 1.342 0.634 + 74.60 13.265 13.274 13.282 0.483 -0.467 1.152 0.483 -0.467 -0.538 0.557 -0.226 0.890 0.403 + 74.65 13.286 13.294 13.312 0.467 -0.689 1.173 0.467 -0.689 -0.809 0.548 -0.322 1.035 0.514 + 74.70 13.219 13.221 13.223 0.220 -0.221 1.106 0.220 -0.221 -0.244 0.244 -0.049 0.661 0.174 + 74.75 12.926 12.932 12.936 0.395 -0.302 0.813 0.395 -0.302 -0.246 0.321 -0.119 0.454 0.211 + 74.80 13.008 13.031 13.049 0.765 -0.684 0.895 0.765 -0.684 -0.613 0.685 -0.524 0.928 0.529 + 74.85 12.983 13.005 13.035 0.757 -0.886 0.870 0.757 -0.886 -0.771 0.658 -0.670 1.057 0.608 + 74.90 13.491 13.512 13.545 0.766 -0.939 1.378 0.766 -0.939 -1.294 1.055 -0.719 1.683 0.909 + 74.95 13.289 13.332 13.375 1.069 -1.067 1.176 1.069 -1.067 -1.255 1.257 -1.141 1.833 1.056 + 75.00 13.228 13.292 13.328 1.299 -0.981 1.116 1.299 -0.981 -1.094 1.450 -1.274 1.947 1.109 + 75.05 13.126 13.167 13.170 1.038 -0.304 1.013 1.038 -0.304 -0.307 1.051 -0.315 1.098 0.570 + 75.10 13.256 13.318 13.319 1.284 -0.147 1.143 1.284 -0.147 -0.168 1.469 -0.189 1.489 0.745 + 75.15 13.272 13.363 13.363 1.557 -0.135 1.159 1.557 -0.135 -0.156 1.804 -0.209 1.892 0.911 + 75.20 13.434 13.513 13.526 1.464 -0.580 1.321 1.464 -0.580 -0.767 1.934 -0.850 2.113 1.124 + 75.25 13.508 13.573 13.586 1.327 -0.601 1.395 1.327 -0.601 -0.839 1.851 -0.798 2.034 1.092 + 75.30 13.273 13.349 13.369 1.421 -0.727 1.160 1.421 -0.727 -0.844 1.649 -1.034 1.948 1.061 + 75.35 13.225 13.295 13.315 1.361 -0.735 1.112 1.361 -0.735 -0.818 1.514 -1.001 1.815 0.995 + 75.40 13.555 13.656 13.664 1.658 -0.470 1.442 1.658 -0.470 -0.677 2.391 -0.779 2.524 1.302 + 75.45 13.485 13.557 13.562 1.397 -0.341 1.372 1.397 -0.341 -0.468 1.917 -0.476 1.976 1.015 + 75.50 13.231 13.289 13.290 1.240 -0.191 1.118 1.240 -0.191 -0.214 1.386 -0.237 1.412 0.711 + 75.55 13.212 13.240 13.241 0.860 0.141 1.100 0.860 0.141 0.155 0.946 0.122 0.984 0.483 + 75.60 13.144 13.161 13.163 0.658 0.222 1.032 0.658 0.222 0.229 0.678 0.146 0.773 0.365 + 75.65 13.081 13.113 13.113 0.922 -0.088 0.968 0.922 -0.088 -0.085 0.892 -0.081 0.897 0.450 + 75.70 13.061 13.080 13.080 0.693 -0.035 0.949 0.693 -0.035 -0.034 0.658 -0.025 0.691 0.330 + 75.75 12.886 12.892 12.892 0.370 -0.008 0.773 0.370 -0.008 -0.006 0.286 -0.003 0.368 0.143 + 75.80 12.971 12.978 12.978 0.412 -0.013 0.859 0.412 -0.013 -0.011 0.353 -0.005 0.453 0.177 + 75.85 12.884 12.906 12.907 0.748 0.190 0.771 0.748 0.190 0.147 0.577 0.142 0.595 0.306 + 75.90 12.894 12.938 12.938 1.073 0.054 0.781 1.073 0.054 0.042 0.837 0.058 0.882 0.420 + 75.95 12.521 12.545 12.545 0.779 -0.054 0.408 0.779 -0.054 -0.022 0.318 -0.042 0.388 0.161 + 76.00 12.744 12.746 12.746 0.232 -0.125 0.631 0.232 -0.125 -0.079 0.146 -0.029 0.234 0.084 + 76.05 12.780 12.781 12.782 0.169 -0.152 0.667 0.169 -0.152 -0.102 0.113 -0.026 0.249 0.077 + 76.10 12.784 12.792 12.794 0.452 -0.217 0.672 0.452 -0.217 -0.146 0.303 -0.098 0.351 0.175 + 76.15 12.774 12.782 12.782 0.450 0.102 0.661 0.450 0.102 0.068 0.298 0.046 0.325 0.154 + 76.20 13.061 13.081 13.081 0.714 -0.060 0.948 0.714 -0.060 -0.057 0.677 -0.043 0.706 0.340 + 76.25 13.208 13.218 13.221 0.526 -0.291 1.095 0.526 -0.291 -0.319 0.576 -0.153 0.780 0.338 + 76.30 13.092 13.092 13.092 -0.007 -0.011 0.979 -0.007 -0.011 -0.010 -0.007 0.000 0.479 0.006 + 76.35 13.202 13.207 13.207 -0.346 0.029 1.090 -0.346 0.029 0.032 -0.377 -0.010 0.654 0.189 + 76.40 13.209 13.212 13.212 -0.283 -0.104 1.096 -0.283 -0.104 -0.113 -0.310 0.029 0.646 0.166 + 76.45 13.271 13.277 13.279 -0.391 -0.234 1.158 -0.391 -0.234 -0.271 -0.453 0.092 0.775 0.268 + 76.50 13.353 13.353 13.354 -0.082 0.120 1.240 -0.082 0.120 0.148 -0.101 -0.010 0.780 0.090 + 76.55 13.447 13.447 13.454 -0.029 -0.434 1.334 -0.029 -0.434 -0.580 -0.039 0.013 0.985 0.290 + 76.60 13.384 13.384 13.392 -0.041 -0.445 1.271 -0.041 -0.445 -0.566 -0.053 0.018 0.908 0.285 + 76.65 13.486 13.486 13.491 0.103 -0.362 1.373 0.103 -0.362 -0.498 0.142 -0.037 1.013 0.259 + 76.70 13.607 13.608 13.610 0.085 -0.238 1.495 0.085 -0.238 -0.355 0.127 -0.020 1.149 0.189 + 76.75 13.670 13.670 13.671 0.056 -0.118 1.558 0.056 -0.118 -0.184 0.087 -0.007 1.222 0.102 + 76.80 13.718 13.719 13.722 -0.118 -0.273 1.606 -0.118 -0.273 -0.439 -0.189 0.032 1.333 0.239 + 76.85 13.755 13.756 13.777 0.197 -0.759 1.642 0.197 -0.759 -1.246 0.324 -0.150 1.656 0.648 + 76.90 13.529 13.547 13.559 0.698 -0.570 1.416 0.698 -0.570 -0.808 0.988 -0.398 1.409 0.669 + 76.95 13.399 13.400 13.409 0.168 -0.475 1.286 0.168 -0.475 -0.611 0.216 -0.080 0.954 0.326 + 77.00 13.193 13.193 13.200 0.092 -0.422 1.080 0.092 -0.422 -0.456 0.099 -0.039 0.676 0.234 + 77.05 13.013 13.013 13.014 0.105 -0.135 0.900 0.105 -0.135 -0.121 0.095 -0.014 0.420 0.077 + 77.10 12.795 12.810 12.810 -0.606 -0.068 0.682 -0.606 -0.068 -0.046 -0.414 0.041 0.419 0.209 + 77.15 13.234 13.243 13.246 -0.501 0.288 1.121 -0.501 0.288 0.323 -0.562 -0.144 0.795 0.332 + 77.20 13.028 13.028 13.034 0.027 0.393 0.915 0.027 0.393 0.360 0.024 0.010 0.496 0.180 + 77.25 13.020 13.021 13.027 0.151 0.383 0.907 0.151 0.383 0.347 0.137 0.058 0.496 0.189 + 77.30 13.080 13.080 13.091 -0.039 0.525 0.967 -0.039 0.525 0.508 -0.038 -0.021 0.606 0.255 + 77.35 13.386 13.387 13.396 -0.157 0.484 1.274 -0.157 0.484 0.617 -0.199 -0.076 0.940 0.326 + 77.40 13.425 13.434 13.443 -0.501 0.486 1.312 -0.501 0.486 0.638 -0.658 -0.244 1.105 0.474 + 77.45 13.463 13.472 13.485 -0.485 0.594 1.350 -0.485 0.594 0.803 -0.655 -0.289 1.206 0.538 + 77.50 13.519 13.531 13.532 -0.582 0.147 1.406 -0.582 0.147 0.207 -0.818 -0.086 1.168 0.424 + 77.55 13.418 13.420 13.424 -0.274 0.328 1.305 -0.274 0.328 0.428 -0.358 -0.090 0.943 0.282 + 77.60 13.574 13.574 13.589 -0.113 0.621 1.461 -0.113 0.621 0.908 -0.165 -0.070 1.267 0.463 + 77.65 13.633 13.633 13.644 0.014 0.555 1.520 0.014 0.555 0.843 0.022 0.008 1.310 0.422 + 77.70 13.769 13.769 13.772 -0.048 0.254 1.657 -0.048 0.254 0.420 -0.079 -0.012 1.405 0.214 + 77.75 13.671 13.671 13.676 0.055 0.382 1.558 0.055 0.382 0.595 0.086 0.021 1.288 0.301 + 77.80 13.527 13.527 13.532 0.112 0.364 1.414 0.112 0.364 0.515 0.158 0.041 1.072 0.270 + 77.85 13.527 13.528 13.534 -0.049 0.410 1.415 -0.049 0.410 0.581 -0.069 -0.020 1.086 0.292 + 77.90 13.621 13.622 13.639 0.144 0.684 1.509 0.144 0.684 1.032 0.217 0.098 1.382 0.530 + 77.95 14.142 14.152 14.159 0.545 0.436 2.029 0.545 0.436 0.884 1.106 0.238 2.302 0.718 + 78.00 13.941 13.955 13.960 0.629 0.385 1.828 0.629 0.385 0.703 1.150 0.242 1.942 0.685 + 78.05 13.688 13.698 13.716 0.519 0.710 1.575 0.519 0.710 1.118 0.817 0.368 1.627 0.716 + 78.10 13.696 13.697 13.703 0.204 0.403 1.583 0.204 0.403 0.638 0.324 0.082 1.355 0.360 + 78.15 13.398 13.399 13.402 0.163 0.260 1.285 0.163 0.260 0.334 0.209 0.042 0.873 0.198 + 78.20 13.619 13.619 13.619 0.136 0.069 1.506 0.136 0.069 0.104 0.204 0.009 1.145 0.115 + 78.25 13.824 13.828 13.829 0.355 0.097 1.711 0.355 0.097 0.166 0.607 0.034 1.531 0.315 + 78.30 13.625 13.635 13.636 0.520 -0.172 1.512 0.520 -0.172 -0.261 0.786 -0.090 1.293 0.417 + 78.35 13.563 13.575 13.576 0.578 -0.074 1.450 0.578 -0.074 -0.107 0.838 -0.043 1.221 0.423 + 78.40 13.307 13.318 13.318 0.550 0.051 1.194 0.550 0.051 0.061 0.657 0.028 0.865 0.330 + 78.45 13.430 13.436 13.440 0.407 0.354 1.317 0.407 0.354 0.466 0.536 0.144 1.013 0.362 + 78.50 13.160 13.166 13.172 0.403 0.398 1.047 0.403 0.398 0.416 0.421 0.160 0.708 0.307 + 78.55 12.802 12.804 12.807 0.203 0.307 0.689 0.203 0.307 0.211 0.140 0.062 0.305 0.131 + 78.60 12.697 12.700 12.701 -0.251 0.202 0.584 -0.251 0.202 0.118 -0.147 -0.051 0.223 0.097 + 78.65 12.548 12.556 12.556 -0.441 -0.005 0.436 -0.441 -0.005 -0.002 -0.192 0.002 0.192 0.096 + 78.70 12.803 12.808 12.809 -0.349 0.159 0.690 -0.349 0.159 0.110 -0.241 -0.056 0.312 0.135 + 78.75 12.768 12.774 12.774 -0.393 0.058 0.655 -0.393 0.058 0.038 -0.258 -0.023 0.294 0.131 + 78.80 12.912 12.925 12.925 -0.574 0.002 0.799 -0.574 0.002 0.002 -0.459 -0.001 0.484 0.230 + 78.85 13.030 13.034 13.039 -0.345 -0.353 0.917 -0.345 -0.353 -0.324 -0.316 0.122 0.542 0.234 + 78.90 12.862 12.868 12.881 -0.379 -0.588 0.749 -0.379 -0.588 -0.441 -0.284 0.223 0.525 0.285 + 78.95 13.080 13.083 13.090 -0.241 -0.453 0.968 -0.241 -0.453 -0.438 -0.233 0.109 0.600 0.254 + 79.00 12.968 12.969 12.979 -0.138 -0.513 0.855 -0.138 -0.513 -0.439 -0.118 0.071 0.507 0.230 + 79.05 12.952 12.953 12.957 -0.141 -0.335 0.839 -0.141 -0.335 -0.281 -0.118 0.047 0.418 0.154 + 79.10 13.079 13.079 13.100 0.141 -0.743 0.966 0.141 -0.743 -0.717 0.136 -0.104 0.752 0.369 + 79.15 12.831 12.831 12.866 -0.039 -0.947 0.718 -0.039 -0.947 -0.680 -0.028 0.037 0.707 0.341 + 79.20 12.688 12.693 12.707 -0.373 -0.590 0.575 -0.373 -0.590 -0.339 -0.215 0.220 0.409 0.229 + 79.25 12.508 12.523 12.559 -0.615 -0.952 0.395 -0.615 -0.952 -0.376 -0.243 0.585 0.720 0.368 + 79.30 12.857 12.889 12.957 -0.907 -1.326 0.744 -0.907 -1.326 -0.987 -0.675 1.203 1.567 0.848 + 79.35 12.926 12.956 13.025 -0.876 -1.343 0.813 -0.876 -1.343 -1.093 -0.712 1.177 1.617 0.878 + 79.40 12.943 12.998 13.086 -1.196 -1.520 0.830 -1.196 -1.520 -1.261 -0.992 1.817 2.214 1.212 + 79.45 12.741 12.777 12.852 -0.960 -1.390 0.628 -0.960 -1.390 -0.873 -0.603 1.335 1.624 0.853 + 79.50 12.513 12.535 12.607 -0.754 -1.345 0.400 -0.754 -1.345 -0.538 -0.301 1.014 1.268 0.593 + 79.55 12.491 12.520 12.597 -0.853 -1.391 0.378 -0.853 -1.391 -0.525 -0.322 1.187 1.403 0.669 + 79.60 12.625 12.654 12.780 -0.861 -1.791 0.512 -0.861 -1.791 -0.916 -0.441 1.543 2.105 0.924 + 79.65 12.601 12.613 12.707 -0.540 -1.540 0.488 -0.540 -1.540 -0.752 -0.264 0.832 1.451 0.576 + 79.70 12.905 12.917 12.999 -0.560 -1.457 0.792 -0.560 -1.457 -1.154 -0.444 0.816 1.532 0.741 + 79.75 12.615 12.622 12.667 -0.421 -1.058 0.502 -0.421 -1.058 -0.531 -0.212 0.446 0.774 0.363 + 79.80 12.838 12.849 12.933 -0.530 -1.470 0.725 -0.530 -1.470 -1.066 -0.385 0.779 1.484 0.688 + 79.85 12.927 12.928 12.985 -0.083 -1.215 0.815 -0.083 -1.215 -0.990 -0.068 0.101 1.073 0.499 + 79.90 13.002 13.002 13.038 -0.136 -0.966 0.889 -0.136 -0.966 -0.858 -0.121 0.131 0.871 0.438 + 79.95 13.172 13.174 13.209 -0.215 -0.958 1.060 -0.215 -0.958 -1.015 -0.228 0.206 1.043 0.530 + 80.00 12.805 12.807 12.837 -0.208 -0.877 0.692 -0.208 -0.877 -0.607 -0.144 0.182 0.646 0.325 + 80.05 13.100 13.100 13.150 0.027 -1.143 0.988 0.027 -1.143 -1.129 0.027 -0.031 1.141 0.565 + 80.10 12.896 12.902 12.935 0.406 -0.923 0.783 0.406 -0.923 -0.722 0.318 -0.374 0.814 0.437 + 80.15 12.731 12.734 12.748 0.267 -0.598 0.618 0.267 -0.598 -0.370 0.165 -0.160 0.405 0.218 + 80.20 12.853 12.853 12.871 -0.023 -0.683 0.740 -0.023 -0.683 -0.505 -0.017 0.016 0.507 0.253 + 80.25 12.879 12.879 12.895 0.001 -0.645 0.766 0.001 -0.645 -0.494 0.001 -0.001 0.502 0.247 + 80.30 12.852 12.855 12.864 -0.271 -0.489 0.739 -0.271 -0.489 -0.361 -0.200 0.133 0.429 0.217 + 80.35 12.912 12.912 12.913 -0.102 -0.164 0.799 -0.102 -0.164 -0.131 -0.081 0.017 0.338 0.078 + 80.40 12.735 12.736 12.736 0.136 -0.157 0.622 0.136 -0.157 -0.098 0.084 -0.021 0.215 0.065 + 80.45 12.563 12.565 12.570 0.253 -0.348 0.450 0.253 -0.348 -0.157 0.114 -0.088 0.194 0.106 + 80.50 12.500 12.502 12.504 0.250 -0.227 0.387 0.250 -0.227 -0.088 0.097 -0.057 0.132 0.071 + 80.55 12.403 12.410 12.415 0.427 -0.319 0.290 0.427 -0.319 -0.093 0.124 -0.136 0.184 0.103 + 80.60 12.547 12.567 12.575 0.706 -0.468 0.434 0.706 -0.468 -0.203 0.306 -0.331 0.453 0.247 + 80.65 12.475 12.475 12.486 0.008 -0.533 0.362 0.008 -0.533 -0.193 0.003 -0.004 0.207 0.096 + 80.70 12.325 12.327 12.332 -0.194 -0.349 0.212 -0.194 -0.349 -0.074 -0.041 0.068 0.102 0.054 + 80.75 12.117 12.121 12.129 0.312 -0.426 0.004 0.312 -0.426 -0.002 0.001 -0.133 0.140 0.067 + 80.80 12.210 12.221 12.241 0.526 -0.689 0.097 0.526 -0.689 -0.067 0.051 -0.363 0.381 0.186 + 80.85 12.533 12.540 12.562 0.426 -0.735 0.420 0.426 -0.735 -0.309 0.179 -0.313 0.449 0.237 + 80.90 12.523 12.547 12.556 0.778 -0.464 0.410 0.778 -0.464 -0.190 0.319 -0.361 0.494 0.259 + 80.95 12.403 12.418 12.440 0.603 -0.751 0.290 0.603 -0.751 -0.218 0.175 -0.453 0.506 0.266 + 81.00 12.487 12.493 12.515 0.395 -0.740 0.374 0.395 -0.740 -0.277 0.148 -0.292 0.422 0.214 + 81.05 12.526 12.536 12.536 0.499 -0.103 0.413 0.499 -0.103 -0.043 0.206 -0.052 0.215 0.108 + 81.10 12.716 12.731 12.732 0.616 -0.156 0.603 0.616 -0.156 -0.094 0.371 -0.096 0.383 0.197 + 81.15 12.785 12.786 12.789 0.204 -0.265 0.672 0.204 -0.265 -0.178 0.137 -0.054 0.282 0.116 + 81.20 12.485 12.485 12.486 0.123 0.178 0.372 0.123 0.178 0.066 0.046 0.022 0.092 0.042 + 81.25 12.246 12.248 12.249 0.241 -0.118 0.133 0.241 -0.118 -0.016 0.032 -0.028 0.045 0.023 + 81.30 12.138 12.143 12.143 0.354 -0.064 0.025 0.354 -0.064 -0.002 0.009 -0.023 0.065 0.012 + 81.35 11.868 11.869 11.870 0.171 0.094 -0.245 0.171 0.094 -0.023 -0.042 0.016 0.049 0.025 + 81.40 12.201 12.201 12.210 0.006 0.468 0.088 0.006 0.468 0.041 0.001 0.003 0.113 0.021 + 81.45 11.925 11.929 11.929 0.300 0.069 -0.188 0.300 0.069 -0.013 -0.056 0.021 0.065 0.031 + 81.50 11.885 11.888 11.891 0.272 -0.235 -0.227 0.272 -0.235 0.054 -0.062 -0.064 0.091 0.052 + 81.55 12.203 12.203 12.203 0.072 -0.024 0.090 0.072 -0.024 -0.002 0.007 -0.002 0.007 0.004 + 81.60 12.022 12.022 12.022 -0.057 0.058 -0.091 -0.057 0.058 -0.005 0.005 -0.003 0.007 0.004 + 81.65 11.826 11.826 11.827 0.058 0.051 -0.287 0.058 0.051 -0.015 -0.017 0.003 0.044 0.011 + 81.70 11.912 11.914 11.916 -0.204 0.229 -0.201 -0.204 0.229 -0.046 0.041 -0.047 0.067 0.039 + 81.75 11.778 11.779 11.780 -0.102 0.169 -0.334 -0.102 0.169 -0.056 0.034 -0.017 0.075 0.034 + 81.80 11.663 11.670 11.675 0.411 0.344 -0.450 0.411 0.344 -0.155 -0.185 0.141 0.245 0.140 + 81.85 11.479 11.487 11.500 0.435 0.529 -0.634 0.435 0.529 -0.335 -0.276 0.230 0.435 0.246 + 81.90 11.578 11.589 11.609 0.512 0.670 -0.535 0.512 0.670 -0.358 -0.274 0.343 0.498 0.283 + 81.95 11.790 11.798 11.807 0.449 0.447 -0.323 0.449 0.447 -0.144 -0.145 0.200 0.253 0.143 + 82.00 11.507 11.509 11.509 0.223 0.064 -0.606 0.223 0.064 -0.039 -0.135 0.014 0.211 0.071 + 82.05 11.566 11.569 11.569 0.251 -0.056 -0.547 0.251 -0.056 0.031 -0.137 -0.014 0.183 0.071 + 82.10 11.448 11.450 11.454 0.188 -0.317 -0.665 0.188 -0.317 0.211 -0.125 -0.060 0.289 0.126 + 82.15 11.595 11.596 11.617 0.160 -0.705 -0.518 0.160 -0.705 0.365 -0.083 -0.113 0.395 0.195 + 82.20 11.360 11.361 11.376 0.075 -0.582 -0.752 0.075 -0.582 0.437 -0.056 -0.043 0.455 0.222 + 82.25 10.917 10.917 10.919 -0.070 -0.165 -1.196 -0.070 -0.165 0.197 0.084 0.012 0.731 0.107 + 82.30 10.786 10.788 10.789 -0.175 -0.164 -1.327 -0.175 -0.164 0.217 0.232 0.029 0.909 0.159 + 82.35 10.990 10.990 10.993 0.023 -0.250 -1.123 0.023 -0.250 0.281 -0.026 -0.006 0.662 0.141 + 82.40 11.069 11.069 11.076 -0.034 -0.394 -1.044 -0.034 -0.394 0.411 0.035 0.013 0.623 0.206 + 82.45 10.918 10.919 10.935 0.152 -0.600 -1.195 0.152 -0.600 0.718 -0.182 -0.091 0.906 0.373 + 82.50 11.328 11.329 11.385 0.160 -1.133 -0.785 0.160 -1.133 0.890 -0.125 -0.181 0.963 0.458 + 82.55 11.276 11.276 11.352 0.008 -1.311 -0.836 0.008 -1.311 1.097 -0.007 -0.010 1.209 0.548 + 82.60 10.955 10.955 11.002 -0.080 -1.010 -1.158 -0.080 -1.010 1.170 0.092 0.080 1.184 0.588 + 82.65 10.734 10.734 10.770 -0.059 -0.879 -1.379 -0.059 -0.879 1.212 0.081 0.052 1.339 0.608 + 82.70 10.967 10.967 11.055 -0.042 -1.385 -1.145 -0.042 -1.385 1.587 0.048 0.058 1.617 0.794 + 82.75 10.894 10.899 10.985 -0.335 -1.368 -1.218 -0.335 -1.368 1.667 0.408 0.458 1.734 0.888 + 82.80 11.072 11.082 11.159 -0.466 -1.313 -1.041 -0.466 -1.313 1.367 0.485 0.612 1.512 0.787 + 82.85 11.463 11.464 11.555 -0.042 -1.448 -0.649 -0.042 -1.448 0.940 0.027 0.061 1.261 0.471 + 82.90 11.437 11.439 11.559 0.225 -1.661 -0.676 0.225 -1.661 1.122 -0.152 -0.373 1.633 0.596 + 82.95 11.408 11.409 11.463 -0.110 -1.111 -0.705 -0.110 -1.111 0.783 0.078 0.122 0.871 0.398 + 83.00 11.135 11.137 11.152 0.195 -0.565 -0.977 0.195 -0.565 0.552 -0.191 -0.110 0.656 0.297 + 83.05 11.217 11.222 11.230 0.336 -0.400 -0.895 0.336 -0.400 0.358 -0.301 -0.135 0.537 0.243 + 83.10 11.146 11.147 11.158 0.168 -0.493 -0.967 0.168 -0.493 0.476 -0.163 -0.083 0.603 0.255 + 83.15 11.110 11.121 11.156 0.484 -0.884 -1.003 0.484 -0.884 0.886 -0.485 -0.427 1.010 0.549 + 83.20 10.767 10.775 10.789 0.405 -0.563 -1.346 0.405 -0.563 0.757 -0.545 -0.228 1.146 0.480 + 83.25 10.709 10.722 10.723 0.535 -0.116 -1.404 0.535 -0.116 0.164 -0.752 -0.062 1.136 0.386 + 83.30 10.887 10.914 10.914 0.766 -0.077 -1.226 0.766 -0.077 0.095 -0.939 -0.059 1.047 0.473 + 83.35 11.006 11.018 11.022 0.512 -0.307 -1.107 0.512 -0.307 0.340 -0.567 -0.157 0.791 0.340 + 83.40 11.156 11.175 11.188 0.648 -0.542 -0.957 0.648 -0.542 0.519 -0.620 -0.351 0.815 0.441 + 83.45 11.325 11.338 11.351 0.539 -0.548 -0.788 0.539 -0.548 0.431 -0.424 -0.295 0.605 0.337 + 83.50 10.932 10.943 10.944 0.497 0.100 -1.181 0.497 0.100 -0.118 -0.587 0.050 0.826 0.300 + 83.55 11.054 11.063 11.063 0.448 -0.087 -1.059 0.448 -0.087 0.092 -0.475 -0.039 0.665 0.242 + 83.60 11.235 11.253 11.253 0.633 0.033 -0.878 0.633 0.033 -0.029 -0.556 0.021 0.586 0.278 + 83.65 11.582 11.601 11.602 0.674 -0.099 -0.531 0.674 -0.099 0.053 -0.358 -0.067 0.373 0.184 + 83.70 11.381 11.403 11.403 0.704 0.052 -0.732 0.704 0.052 -0.038 -0.515 0.037 0.517 0.259 + 83.75 11.402 11.433 11.433 0.840 0.004 -0.711 0.840 0.004 -0.003 -0.597 0.003 0.606 0.299 + 83.80 11.561 11.601 11.603 0.958 -0.228 -0.552 0.958 -0.228 0.126 -0.529 -0.219 0.637 0.293 + 83.85 11.507 11.587 11.591 1.362 -0.279 -0.606 1.362 -0.279 0.169 -0.825 -0.381 1.150 0.462 + 83.90 11.740 11.785 11.800 1.030 -0.595 -0.372 1.030 -0.595 0.222 -0.384 -0.613 0.777 0.378 + 83.95 11.678 11.714 11.730 0.927 -0.607 -0.435 0.927 -0.607 0.264 -0.404 -0.563 0.709 0.371 + 84.00 11.561 11.601 11.620 0.966 -0.664 -0.552 0.966 -0.664 0.367 -0.534 -0.642 0.840 0.456 + 84.05 11.817 11.835 11.847 0.652 -0.538 -0.296 0.652 -0.538 0.159 -0.193 -0.351 0.402 0.216 + 84.10 11.933 11.943 11.950 0.488 -0.415 -0.180 0.488 -0.415 0.075 -0.088 -0.203 0.222 0.117 + 84.15 11.799 11.800 11.816 0.191 -0.613 -0.314 0.191 -0.613 0.192 -0.060 -0.117 0.255 0.117 + 84.20 11.788 11.790 11.800 0.222 -0.492 -0.325 0.222 -0.492 0.160 -0.072 -0.109 0.198 0.103 + 84.25 11.798 11.800 11.800 0.228 -0.093 -0.315 0.228 -0.093 0.029 -0.072 -0.021 0.080 0.040 + 84.30 11.874 11.874 11.877 0.131 0.263 -0.239 0.131 0.263 -0.063 -0.031 0.034 0.072 0.039 + 84.35 11.753 11.767 11.767 0.578 0.056 -0.360 0.578 0.056 -0.020 -0.208 0.032 0.233 0.106 + 84.40 11.945 11.952 11.952 0.386 -0.101 -0.168 0.386 -0.101 0.017 -0.065 -0.039 0.094 0.039 + 84.45 12.077 12.083 12.088 0.396 -0.341 -0.036 0.396 -0.341 0.012 -0.014 -0.135 0.137 0.068 + 84.50 11.895 11.907 11.912 0.531 -0.327 -0.218 0.531 -0.327 0.071 -0.115 -0.174 0.218 0.110 + 84.55 11.823 11.825 11.830 0.236 0.342 -0.290 0.236 0.342 -0.099 -0.068 0.081 0.129 0.073 + 84.60 11.762 11.763 11.785 -0.090 0.717 -0.350 -0.090 0.717 -0.251 0.031 -0.064 0.323 0.131 + 84.65 11.534 11.534 11.556 0.026 0.720 -0.579 0.026 0.720 -0.417 -0.015 0.019 0.427 0.209 + 84.70 11.351 11.353 11.361 0.185 0.428 -0.761 0.185 0.428 -0.326 -0.141 0.079 0.398 0.182 + 84.75 11.750 11.752 11.752 0.214 0.127 -0.363 0.214 0.127 -0.046 -0.078 0.027 0.097 0.047 + 84.80 11.842 11.843 11.843 -0.039 -0.085 -0.270 -0.039 -0.085 0.023 0.011 0.003 0.041 0.013 + 84.85 11.606 11.607 11.614 0.106 -0.424 -0.507 0.106 -0.424 0.215 -0.054 -0.045 0.224 0.113 + 84.90 11.350 11.357 11.358 0.387 -0.184 -0.763 0.387 -0.184 0.140 -0.295 -0.071 0.383 0.167 + 84.95 11.202 11.211 11.212 0.450 -0.115 -0.911 0.450 -0.115 0.105 -0.410 -0.052 0.522 0.213 + 85.00 11.276 11.288 11.290 0.519 -0.187 -0.837 0.519 -0.187 0.156 -0.434 -0.097 0.502 0.236 + 85.05 11.202 11.215 11.215 0.556 -0.044 -0.911 0.556 -0.044 0.040 -0.506 -0.025 0.570 0.254 + 85.10 11.364 11.380 11.380 0.591 -0.009 -0.748 0.591 -0.009 0.007 -0.442 -0.005 0.454 0.221 + 85.15 11.645 11.663 11.664 0.648 -0.164 -0.468 0.648 -0.164 0.077 -0.303 -0.106 0.333 0.165 + 85.20 11.581 11.591 11.594 0.482 -0.268 -0.532 0.482 -0.268 0.143 -0.256 -0.129 0.294 0.160 + 85.25 11.523 11.531 11.534 0.439 -0.259 -0.590 0.439 -0.259 0.153 -0.259 -0.114 0.304 0.161 + 85.30 11.695 11.697 11.698 0.244 -0.117 -0.418 0.244 -0.117 0.049 -0.102 -0.029 0.124 0.058 + 85.35 11.989 11.989 11.991 -0.076 -0.220 -0.124 -0.076 -0.220 0.027 0.009 0.017 0.035 0.017 + 85.40 12.369 12.372 12.397 -0.275 -0.786 0.256 -0.275 -0.786 -0.201 -0.070 0.216 0.379 0.152 + 85.45 12.077 12.081 12.095 -0.311 -0.583 -0.036 -0.311 -0.583 0.021 0.011 0.181 0.219 0.091 + 85.50 11.592 11.592 11.604 0.098 -0.513 -0.521 0.098 -0.513 0.267 -0.051 -0.050 0.272 0.138 + 85.55 11.667 11.670 11.677 0.257 -0.401 -0.446 0.257 -0.401 0.179 -0.114 -0.103 0.213 0.118 + 85.60 11.549 11.556 11.562 0.413 -0.368 -0.564 0.413 -0.368 0.207 -0.233 -0.152 0.312 0.173 + 85.65 11.334 11.337 11.357 0.253 -0.681 -0.779 0.253 -0.681 0.531 -0.197 -0.172 0.567 0.296 + 85.70 11.287 11.287 11.311 0.121 -0.735 -0.826 0.121 -0.735 0.607 -0.100 -0.089 0.619 0.311 + 85.75 11.250 11.255 11.262 0.342 -0.381 -0.863 0.342 -0.381 0.329 -0.295 -0.130 0.503 0.230 + 85.80 11.524 11.524 11.524 -0.002 -0.031 -0.589 -0.002 -0.031 0.018 0.001 0.000 0.174 0.009 + 85.85 11.682 11.684 11.686 0.241 -0.214 -0.431 0.241 -0.214 0.092 -0.104 -0.052 0.145 0.074 + 85.90 11.430 11.430 11.432 -0.067 -0.245 -0.683 -0.067 -0.245 0.167 0.046 0.016 0.266 0.087 + 85.95 11.336 11.336 11.341 -0.017 -0.334 -0.777 -0.017 -0.334 0.260 0.013 0.006 0.358 0.130 + 86.00 11.208 11.208 11.219 0.064 -0.502 -0.905 0.064 -0.502 0.454 -0.057 -0.032 0.538 0.230 + 86.05 10.876 10.876 10.877 -0.032 -0.128 -1.237 -0.032 -0.128 0.158 0.039 0.004 0.773 0.081 + 86.10 11.022 11.023 11.023 -0.075 0.040 -1.090 -0.075 0.040 -0.043 0.082 -0.003 0.598 0.046 + 86.15 11.109 11.111 11.114 0.225 0.244 -1.004 0.225 0.244 -0.245 -0.225 0.055 0.559 0.169 + 86.20 10.984 10.987 11.011 0.244 0.723 -1.128 0.244 0.723 -0.816 -0.275 0.176 0.928 0.439 + 86.25 11.079 11.080 11.093 0.145 0.545 -1.034 0.145 0.545 -0.564 -0.150 0.079 0.694 0.294 + 86.30 11.018 11.022 11.037 0.311 0.573 -1.095 0.311 0.573 -0.627 -0.341 0.178 0.812 0.368 + 86.35 10.980 10.980 11.022 -0.022 0.964 -1.133 -0.022 0.964 -1.093 0.025 -0.022 1.107 0.547 + 86.40 10.915 10.915 10.938 0.059 0.710 -1.198 0.059 0.710 -0.851 -0.071 0.042 0.972 0.428 + 86.45 10.812 10.816 10.829 0.269 0.537 -1.301 0.269 0.537 -0.698 -0.350 0.144 1.026 0.397 + 86.50 10.974 10.985 10.998 0.491 0.523 -1.139 0.491 0.523 -0.596 -0.560 0.257 0.906 0.428 + 86.55 11.170 11.180 11.190 0.458 0.485 -0.942 0.458 0.485 -0.457 -0.432 0.222 0.667 0.333 + 86.60 11.140 11.157 11.159 0.604 0.217 -0.973 0.604 0.217 -0.211 -0.587 0.131 0.679 0.319 + 86.65 10.815 10.834 10.836 0.647 0.190 -1.298 0.647 0.190 -0.247 -0.839 0.123 1.069 0.442 + 86.70 10.845 10.856 10.856 0.470 0.096 -1.267 0.470 0.096 -0.121 -0.595 0.045 0.918 0.305 + 86.75 10.985 10.987 10.999 0.195 -0.527 -1.128 0.195 -0.527 0.595 -0.220 -0.103 0.794 0.321 + 86.80 10.948 10.948 10.959 -0.106 -0.489 -1.165 -0.106 -0.489 0.570 0.124 0.052 0.804 0.293 + 86.85 10.719 10.719 10.721 -0.030 -0.209 -1.394 -0.030 -0.209 0.291 0.042 0.006 0.994 0.147 + 86.90 10.796 10.805 10.805 0.426 -0.075 -1.316 0.426 -0.075 0.099 -0.560 -0.032 0.960 0.285 + 86.95 10.681 10.699 10.702 0.619 0.272 -1.432 0.619 0.272 -0.389 -0.886 0.168 1.253 0.491 + 87.00 10.736 10.752 10.753 0.598 0.137 -1.377 0.598 0.137 -0.188 -0.824 0.082 1.137 0.425 + 87.05 11.046 11.059 11.060 0.535 0.183 -1.067 0.535 0.183 -0.196 -0.570 0.098 0.729 0.305 + 87.10 11.087 11.109 11.110 0.705 0.039 -1.026 0.705 0.039 -0.040 -0.723 0.027 0.775 0.362 + 87.15 10.973 10.981 10.984 0.416 -0.279 -1.140 0.416 -0.279 0.318 -0.475 -0.116 0.775 0.292 + 87.20 11.008 11.025 11.033 0.610 -0.419 -1.105 0.610 -0.419 0.462 -0.674 -0.255 0.884 0.428 + 87.25 10.968 10.986 11.012 0.616 -0.757 -1.144 0.616 -0.757 0.867 -0.705 -0.466 1.131 0.605 + 87.30 10.834 10.848 10.869 0.549 -0.684 -1.279 0.549 -0.684 0.875 -0.703 -0.376 1.203 0.592 + 87.35 10.583 10.601 10.607 0.618 -0.376 -1.530 0.618 -0.376 0.575 -0.946 -0.232 1.432 0.566 + 87.40 10.311 10.314 10.317 0.250 -0.249 -1.802 0.250 -0.249 0.449 -0.451 -0.062 1.687 0.320 + 87.45 10.600 10.605 10.625 0.330 -0.641 -1.513 0.330 -0.641 0.969 -0.499 -0.211 1.404 0.555 + 87.50 10.752 10.755 10.812 0.256 -1.114 -1.361 0.256 -1.114 1.516 -0.349 -0.286 1.579 0.791 + 87.55 10.823 10.826 10.892 -0.273 -1.193 -1.290 -0.273 -1.193 1.540 0.352 0.325 1.581 0.806 + 87.60 10.940 10.946 10.980 -0.373 -0.869 -1.173 -0.373 -0.869 1.019 0.438 0.324 1.136 0.578 + 87.65 10.934 10.936 10.971 0.196 -0.881 -1.179 0.196 -0.881 1.038 -0.230 -0.172 1.101 0.539 + 87.70 10.793 10.794 10.832 0.131 -0.913 -1.320 0.131 -0.913 1.206 -0.173 -0.119 1.297 0.612 + 87.75 10.727 10.727 10.764 0.036 -0.891 -1.385 0.036 -0.891 1.234 -0.050 -0.032 1.357 0.618 + 87.80 11.104 11.105 11.126 0.131 -0.689 -1.009 0.131 -0.689 0.695 -0.132 -0.090 0.755 0.357 + 87.85 10.926 10.932 10.968 -0.368 -0.876 -1.187 -0.368 -0.876 1.040 0.436 0.322 1.155 0.586 + 87.90 10.827 10.834 10.869 -0.374 -0.880 -1.285 -0.374 -0.880 1.131 0.480 0.329 1.283 0.636 + 87.95 10.703 10.704 10.716 -0.143 -0.517 -1.410 -0.143 -0.517 0.730 0.202 0.074 1.138 0.380 + 88.00 10.926 10.928 10.948 0.201 -0.666 -1.187 0.201 -0.666 0.790 -0.238 -0.134 0.946 0.418 + 88.05 10.721 10.730 10.766 0.432 -0.882 -1.392 0.432 -0.882 1.228 -0.601 -0.381 1.451 0.710 + 88.10 10.539 10.547 10.561 0.415 -0.543 -1.574 0.415 -0.543 0.854 -0.654 -0.225 1.473 0.550 + 88.15 10.707 10.709 10.738 0.239 -0.778 -1.406 0.239 -0.778 1.094 -0.336 -0.186 1.320 0.580 + 88.20 10.537 10.539 10.554 0.203 -0.559 -1.575 0.203 -0.559 0.880 -0.320 -0.113 1.418 0.472 + 88.25 10.399 10.399 10.412 -0.046 -0.522 -1.714 -0.046 -0.522 0.895 0.080 0.024 1.607 0.450 + 88.30 10.300 10.303 10.303 -0.258 -0.027 -1.813 -0.258 -0.027 0.050 0.468 0.007 1.677 0.235 + 88.35 10.487 10.512 10.512 -0.730 0.037 -1.626 -0.730 0.037 -0.060 1.187 -0.027 1.589 0.595 + 88.40 10.145 10.175 10.175 -0.777 0.089 -1.968 -0.777 0.089 -0.175 1.528 -0.069 2.241 0.770 + 88.45 10.274 10.310 10.313 -0.851 0.250 -1.838 -0.851 0.250 -0.459 1.564 -0.212 2.083 0.822 + 88.50 10.366 10.387 10.388 -0.659 0.185 -1.747 -0.659 0.185 -0.323 1.152 -0.122 1.760 0.601 + 88.55 10.611 10.648 10.654 -0.889 0.364 -1.502 -0.889 0.364 -0.546 1.335 -0.323 1.589 0.739 + 88.60 10.581 10.627 10.628 -0.985 -0.104 -1.532 -0.985 -0.104 0.160 1.509 0.103 1.664 0.760 + 88.65 10.500 10.515 10.522 -0.552 -0.384 -1.612 -0.552 -0.384 0.619 0.890 0.212 1.526 0.552 + 88.70 10.572 10.602 10.607 -0.799 -0.329 -1.541 -0.799 -0.329 0.506 1.230 0.262 1.560 0.678 + 88.75 10.384 10.443 10.448 -1.110 -0.317 -1.729 -1.110 -0.317 0.548 1.919 0.352 2.161 1.013 + 88.80 10.151 10.208 10.208 -1.077 0.012 -1.962 -1.077 0.012 -0.024 2.114 -0.013 2.506 1.057 + 88.85 10.088 10.126 10.127 -0.883 -0.113 -2.025 -0.883 -0.113 0.230 1.789 0.100 2.447 0.903 + 88.90 10.123 10.159 10.168 -0.855 -0.422 -1.990 -0.855 -0.422 0.840 1.702 0.361 2.434 0.966 + 88.95 10.177 10.195 10.215 -0.606 -0.640 -1.936 -0.606 -0.640 1.239 1.172 0.388 2.262 0.875 + 89.00 10.277 10.279 10.297 -0.199 -0.621 -1.836 -0.199 -0.621 1.141 0.365 0.124 1.898 0.602 + 89.05 10.126 10.135 10.153 -0.421 -0.607 -1.986 -0.421 -0.607 1.207 0.837 0.256 2.246 0.745 + 89.10 10.426 10.433 10.462 -0.375 -0.772 -1.686 -0.375 -0.772 1.301 0.633 0.290 1.790 0.738 + 89.15 10.354 10.360 10.378 -0.337 -0.623 -1.759 -0.337 -0.623 1.096 0.593 0.210 1.798 0.632 + 89.20 10.526 10.537 10.588 -0.485 -1.041 -1.587 -0.485 -1.041 1.652 0.770 0.505 1.919 0.946 + 89.25 10.444 10.453 10.475 -0.431 -0.686 -1.669 -0.431 -0.686 1.145 0.719 0.296 1.721 0.692 + 89.30 10.375 10.396 10.422 -0.650 -0.743 -1.738 -0.650 -0.743 1.290 1.130 0.483 1.997 0.891 + 89.35 10.555 10.580 10.607 -0.727 -0.757 -1.558 -0.727 -0.757 1.179 1.132 0.550 1.764 0.862 + 89.40 10.462 10.492 10.522 -0.790 -0.799 -1.651 -0.790 -0.799 1.320 1.304 0.631 1.994 0.980 + 89.45 10.507 10.540 10.568 -0.833 -0.765 -1.605 -0.833 -0.765 1.228 1.337 0.637 1.928 0.962 + 89.50 10.411 10.505 10.544 -1.403 -0.911 -1.702 -1.403 -0.911 1.550 2.388 1.278 2.848 1.561 + 89.55 10.570 10.645 10.694 -1.264 -1.019 -1.543 -1.264 -1.019 1.572 1.950 1.288 2.509 1.408 + 89.60 10.623 10.720 10.768 -1.440 -1.020 -1.490 -1.440 -1.020 1.521 2.145 1.469 2.667 1.506 + 89.65 10.652 10.752 10.803 -1.464 -1.048 -1.461 -1.464 -1.048 1.531 2.139 1.534 2.688 1.522 + 89.70 10.836 10.974 11.037 -1.733 -1.174 -1.276 -1.733 -1.174 1.498 2.212 2.034 3.005 1.679 + 89.75 11.112 11.305 11.391 -2.076 -1.398 -1.000 -2.076 -1.398 1.398 2.077 2.902 3.633 1.917 + 89.80 10.759 10.924 10.974 -1.890 -1.050 -1.354 -1.890 -1.050 1.421 2.559 1.983 3.253 1.768 + 89.85 10.686 10.891 10.935 -2.102 -0.977 -1.426 -2.102 -0.977 1.393 2.999 2.053 3.704 1.946 + 89.90 10.628 10.784 10.835 -1.830 -1.051 -1.485 -1.830 -1.051 1.561 2.718 1.924 3.330 1.839 + 89.95 10.701 10.844 10.890 -1.760 -0.994 -1.412 -1.760 -0.994 1.404 2.486 1.750 3.041 1.674 + 90.00 10.576 10.694 10.765 -1.584 -1.236 -1.537 -1.584 -1.236 1.900 2.435 1.959 3.200 1.829 + 90.05 10.408 10.510 10.577 -1.459 -1.187 -1.705 -1.459 -1.187 2.023 2.487 1.732 3.222 1.822 + 90.10 10.695 10.860 10.913 -1.885 -1.073 -1.418 -1.885 -1.073 1.522 2.673 2.023 3.358 1.841 + 90.15 10.941 11.094 11.152 -1.837 -1.133 -1.172 -1.837 -1.133 1.328 2.154 2.081 3.017 1.638 + 90.20 10.977 11.131 11.191 -1.842 -1.158 -1.136 -1.842 -1.158 1.315 2.092 2.134 3.013 1.633 + 90.25 11.034 11.190 11.291 -1.865 -1.507 -1.079 -1.865 -1.507 1.626 2.012 2.810 3.456 1.909 + 90.30 11.273 11.445 11.550 -1.979 -1.549 -0.840 -1.979 -1.549 1.301 1.662 3.065 3.510 1.861 + 90.35 11.521 11.690 11.786 -1.980 -1.504 -0.592 -1.980 -1.504 0.890 1.172 2.977 3.266 1.660 + 90.40 11.298 11.390 11.485 -1.445 -1.473 -0.815 -1.445 -1.473 1.200 1.177 2.129 2.461 1.356 + 90.45 11.455 11.628 11.744 -1.997 -1.646 -0.658 -1.997 -1.646 1.082 1.313 3.286 3.564 1.850 + 90.50 12.058 12.243 12.310 -2.124 -1.279 -0.055 -2.124 -1.279 0.071 0.117 2.717 3.075 1.360 + 90.55 11.725 11.891 11.942 -1.982 -1.095 -0.388 -1.982 -1.095 0.425 0.769 2.171 2.640 1.171 + 90.60 11.874 12.020 12.097 -1.869 -1.359 -0.239 -1.869 -1.359 0.325 0.446 2.541 2.699 1.300 + 90.65 12.011 12.187 12.237 -2.067 -1.103 -0.102 -2.067 -1.103 0.112 0.210 2.281 2.750 1.147 + 90.70 12.218 12.355 12.416 -1.838 -1.233 0.105 -1.838 -1.233 -0.129 -0.193 2.266 2.454 1.139 + 90.75 12.252 12.353 12.394 -1.580 -1.012 0.139 -1.580 -1.012 -0.140 -0.219 1.599 1.771 0.810 + 90.80 12.270 12.331 12.377 -1.230 -1.063 0.157 -1.230 -1.063 -0.167 -0.193 1.307 1.334 0.666 + 90.85 11.944 12.013 12.065 -1.282 -1.115 -0.169 -1.282 -1.115 0.188 0.216 1.429 1.458 0.729 + 90.90 11.559 11.633 11.672 -1.311 -0.953 -0.554 -1.311 -0.953 0.528 0.726 1.249 1.467 0.769 + 90.95 11.616 11.678 11.745 -1.201 -1.246 -0.496 -1.201 -1.246 0.618 0.596 1.495 1.620 0.862 + 91.00 11.774 11.851 11.911 -1.350 -1.197 -0.339 -1.350 -1.197 0.406 0.458 1.616 1.685 0.864 + 91.05 11.826 11.880 11.917 -1.138 -0.932 -0.287 -1.138 -0.932 0.268 0.327 1.061 1.123 0.571 + 91.10 11.802 11.839 11.867 -0.938 -0.810 -0.311 -0.938 -0.810 0.252 0.291 0.760 0.816 0.426 + 91.15 11.805 11.829 11.875 -0.749 -1.050 -0.308 -0.749 -1.050 0.324 0.231 0.786 0.879 0.441 + 91.20 11.725 11.767 11.800 -0.989 -0.890 -0.388 -0.989 -0.890 0.345 0.383 0.880 0.960 0.510 + 91.25 11.659 11.688 11.726 -0.824 -0.949 -0.454 -0.824 -0.949 0.431 0.374 0.782 0.892 0.484 + 91.30 11.668 11.768 11.817 -1.531 -1.074 -0.445 -1.531 -1.074 0.478 0.681 1.643 1.847 0.921 + 91.35 11.820 11.931 11.961 -1.621 -0.849 -0.292 -1.621 -0.849 0.248 0.474 1.376 1.716 0.738 + 91.40 11.938 12.008 12.014 -1.295 -0.375 -0.175 -1.295 -0.375 0.066 0.227 0.486 0.925 0.270 + 91.45 11.830 11.909 11.938 -1.373 -0.819 -0.283 -1.373 -0.819 0.232 0.388 1.125 1.319 0.606 + 91.50 11.628 11.700 11.718 -1.292 -0.657 -0.484 -1.292 -0.657 0.318 0.626 0.848 1.168 0.551 + 91.55 11.605 11.686 11.710 -1.376 -0.749 -0.508 -1.376 -0.749 0.380 0.699 1.030 1.356 0.651 + 91.60 11.351 11.397 11.416 -1.019 -0.659 -0.762 -1.019 -0.659 0.502 0.776 0.671 1.027 0.571 + 91.65 11.205 11.264 11.284 -1.150 -0.668 -0.908 -1.150 -0.668 0.606 1.044 0.769 1.297 0.716 + 91.70 11.044 11.132 11.168 -1.392 -0.902 -1.069 -1.392 -0.902 0.964 1.488 1.256 1.947 1.086 + 91.75 11.234 11.285 11.324 -1.070 -0.944 -0.879 -1.070 -0.944 0.830 0.941 1.011 1.405 0.806 + 91.80 11.233 11.270 11.282 -0.911 -0.511 -0.879 -0.911 -0.511 0.449 0.801 0.466 0.932 0.515 + 91.85 11.363 11.383 11.400 -0.686 -0.611 -0.750 -0.686 -0.611 0.458 0.515 0.420 0.704 0.404 + 91.90 11.127 11.155 11.175 -0.791 -0.677 -0.986 -0.791 -0.677 0.667 0.780 0.535 1.028 0.579 + 91.95 11.159 11.189 11.200 -0.816 -0.488 -0.954 -0.816 -0.488 0.466 0.778 0.398 0.907 0.495 + 92.00 11.342 11.364 11.376 -0.715 -0.511 -0.771 -0.715 -0.511 0.394 0.551 0.365 0.684 0.385 + 92.05 11.434 11.487 11.497 -1.104 -0.491 -0.679 -1.104 -0.491 0.333 0.749 0.542 0.960 0.491 + 92.10 11.407 11.454 11.454 -1.038 -0.026 -0.706 -1.038 -0.026 0.018 0.732 0.027 0.788 0.367 + 92.15 11.294 11.365 11.367 -1.271 -0.193 -0.819 -1.271 -0.193 0.158 1.041 0.245 1.162 0.540 + 92.20 11.338 11.496 11.502 -1.897 -0.393 -0.775 -1.897 -0.393 0.305 1.469 0.746 2.176 0.838 + 92.25 11.320 11.511 11.520 -2.091 -0.434 -0.793 -2.091 -0.434 0.344 1.658 0.908 2.596 0.961 + 92.30 11.309 11.538 11.546 -2.287 -0.437 -0.804 -2.287 -0.437 0.352 1.840 1.001 3.035 1.062 + 92.35 11.141 11.351 11.361 -2.177 -0.464 -0.972 -2.177 -0.464 0.451 2.117 1.009 2.950 1.194 + 92.40 11.286 11.498 11.506 -2.200 -0.438 -0.827 -2.200 -0.438 0.363 1.820 0.964 2.858 1.046 + 92.45 10.995 11.176 11.183 -2.006 -0.393 -1.118 -2.006 -0.393 0.439 2.243 0.788 2.714 1.209 + 92.50 11.142 11.329 11.335 -2.054 -0.349 -0.971 -2.054 -0.349 0.339 1.995 0.717 2.642 1.073 + 92.55 10.812 11.031 11.036 -2.185 -0.354 -1.301 -2.185 -0.354 0.460 2.841 0.774 3.295 1.490 + 92.60 10.811 11.005 11.015 -2.061 -0.472 -1.302 -2.061 -0.472 0.614 2.683 0.972 3.082 1.459 + 92.65 10.945 11.084 11.093 -1.750 -0.432 -1.167 -1.750 -0.432 0.505 2.044 0.757 2.307 1.118 + 92.70 10.992 11.157 11.160 -1.915 -0.242 -1.121 -1.915 -0.242 0.271 2.146 0.463 2.490 1.106 + 92.75 10.912 11.127 11.136 -2.179 -0.452 -1.201 -2.179 -0.452 0.542 2.617 0.984 3.197 1.424 + 92.80 11.055 11.326 11.327 -2.463 -0.122 -1.058 -2.463 -0.122 0.129 2.606 0.299 3.600 1.313 + 92.85 11.219 11.468 11.473 -2.373 -0.339 -0.893 -2.373 -0.339 0.302 2.120 0.803 3.272 1.143 + 92.90 11.154 11.333 11.333 -2.002 0.101 -0.958 -2.002 0.101 -0.097 1.918 -0.202 2.468 0.966 + 92.95 10.778 10.884 10.897 -1.519 0.529 -1.335 -1.519 0.529 -0.706 2.028 -0.803 2.185 1.146 + 93.00 10.726 10.848 10.849 -1.619 0.133 -1.386 -1.619 0.133 -0.185 2.245 -0.216 2.281 1.131 + 93.05 10.856 10.979 10.981 -1.635 0.214 -1.256 -1.635 0.214 -0.269 2.054 -0.349 2.148 1.050 + 93.10 11.049 11.166 11.166 -1.613 0.048 -1.064 -1.613 0.048 -0.051 1.716 -0.077 1.868 0.859 + 93.15 10.648 10.703 10.703 -1.087 0.092 -1.465 -1.087 0.092 -0.135 1.593 -0.100 1.669 0.801 + 93.20 10.875 10.927 10.928 -1.071 0.118 -1.238 -1.071 0.118 -0.146 1.326 -0.126 1.347 0.670 + 93.25 10.814 10.897 10.901 -1.344 0.272 -1.299 -1.344 0.272 -0.353 1.745 -0.365 1.783 0.909 + 93.30 10.546 10.597 10.601 -1.034 0.287 -1.567 -1.034 0.287 -0.450 1.620 -0.297 1.803 0.854 + 93.35 10.511 10.551 10.552 -0.918 0.120 -1.601 -0.918 0.120 -0.192 1.470 -0.110 1.711 0.743 + 93.40 10.636 10.696 10.697 -1.138 0.153 -1.477 -1.138 0.153 -0.225 1.680 -0.174 1.750 0.852 + 93.45 10.472 10.518 10.525 -0.983 0.376 -1.640 -0.983 0.376 -0.617 1.612 -0.370 1.899 0.882 + 93.50 10.474 10.509 10.509 -0.857 0.042 -1.639 -0.857 0.042 -0.069 1.405 -0.036 1.711 0.703 + 93.55 10.339 10.372 10.375 -0.821 0.242 -1.773 -0.821 0.242 -0.429 1.456 -0.198 1.939 0.765 + 93.60 10.497 10.509 10.513 -0.502 0.273 -1.616 -0.502 0.273 -0.442 0.811 -0.137 1.469 0.467 + 93.65 10.575 10.581 10.584 -0.361 0.257 -1.538 -0.361 0.257 -0.395 0.555 -0.093 1.281 0.344 + 93.70 10.641 10.662 10.667 -0.666 0.330 -1.472 -0.666 0.330 -0.486 0.981 -0.220 1.360 0.558 + 93.75 10.486 10.510 10.511 -0.723 0.096 -1.627 -0.723 0.096 -0.156 1.177 -0.069 1.590 0.595 + 93.80 10.383 10.400 10.413 -0.588 0.527 -1.729 -0.588 0.527 -0.912 1.016 -0.310 1.807 0.700 + 93.85 10.180 10.214 10.237 -0.825 0.693 -1.932 -0.825 0.693 -1.339 1.594 -0.572 2.448 1.079 + 93.90 10.155 10.188 10.199 -0.822 0.484 -1.958 -0.822 0.484 -0.947 1.610 -0.398 2.372 0.955 + 93.95 10.490 10.528 10.533 -0.887 0.331 -1.622 -0.887 0.331 -0.538 1.440 -0.294 1.765 0.782 + 94.00 10.556 10.594 10.595 -0.902 0.134 -1.557 -0.902 0.134 -0.208 1.404 -0.120 1.627 0.712 + 94.05 10.468 10.513 10.516 -0.973 0.239 -1.645 -0.973 0.239 -0.393 1.601 -0.233 1.855 0.832 + 94.10 10.240 10.258 10.263 -0.607 0.322 -1.873 -0.607 0.322 -0.602 1.136 -0.195 1.990 0.650 + 94.15 10.210 10.248 10.257 -0.872 0.432 -1.902 -0.872 0.432 -0.821 1.659 -0.377 2.283 0.944 + 94.20 10.432 10.452 10.453 -0.649 0.069 -1.680 -0.649 0.069 -0.115 1.090 -0.045 1.625 0.548 + 94.25 10.464 10.468 10.468 -0.295 -0.022 -1.649 -0.295 -0.022 0.037 0.486 0.007 1.404 0.244 + 94.30 10.140 10.140 10.141 0.005 0.152 -1.973 0.005 0.152 -0.300 -0.010 0.001 1.958 0.150 + 94.35 9.810 9.814 9.818 -0.268 -0.295 -2.303 -0.268 -0.295 0.680 0.617 0.079 2.731 0.461 + 94.40 9.678 9.714 9.718 -0.829 -0.293 -2.434 -0.829 -0.293 0.713 2.019 0.243 3.350 1.077 + 94.45 9.704 9.747 9.747 -0.910 -0.076 -2.409 -0.910 -0.076 0.184 2.192 0.069 3.317 1.100 + 94.50 9.596 9.614 9.616 -0.593 -0.152 -2.517 -0.593 -0.152 0.383 1.493 0.090 3.355 0.772 + 94.55 9.594 9.596 9.597 -0.206 -0.137 -2.519 -0.206 -0.137 0.346 0.520 0.028 3.203 0.313 + 94.60 9.644 9.645 9.646 -0.052 -0.195 -2.468 -0.052 -0.195 0.482 0.128 0.010 3.067 0.250 + 94.65 9.462 9.475 9.478 -0.510 0.224 -2.651 -0.510 0.224 -0.593 1.352 -0.114 3.670 0.740 + 94.70 9.774 9.780 9.782 -0.323 -0.200 -2.338 -0.323 -0.200 0.468 0.755 0.065 2.806 0.445 + 94.75 9.888 9.889 9.894 -0.187 -0.315 -2.225 -0.187 -0.315 0.700 0.416 0.059 2.542 0.408 + 94.80 9.849 9.851 9.863 0.205 -0.482 -2.264 0.205 -0.482 1.092 -0.464 -0.099 2.700 0.595 + 94.85 10.116 10.122 10.154 0.344 -0.802 -1.997 0.344 -0.802 1.602 -0.686 -0.276 2.374 0.882 + 94.90 10.011 10.017 10.021 0.357 -0.264 -2.102 0.357 -0.264 0.554 -0.750 -0.094 2.308 0.469 + 94.95 9.880 9.898 9.898 0.596 0.000 -2.233 0.596 0.000 -0.000 -1.332 0.000 2.672 0.666 + 95.00 9.927 9.931 9.934 0.286 0.243 -2.186 0.286 0.243 -0.530 -0.624 0.069 2.459 0.411 + 95.05 9.985 9.985 9.995 0.001 0.439 -2.127 0.001 0.439 -0.934 -0.002 0.000 2.359 0.467 + 95.10 10.076 10.076 10.078 0.059 0.175 -2.037 0.059 0.175 -0.357 -0.120 0.010 2.092 0.188 + 95.15 10.136 10.152 10.153 0.573 -0.149 -1.977 0.573 -0.149 0.294 -1.134 -0.085 2.130 0.587 + 95.20 10.359 10.370 10.373 0.480 -0.243 -1.754 0.480 -0.243 0.426 -0.841 -0.117 1.682 0.475 + 95.25 10.188 10.193 10.196 0.321 -0.225 -1.925 0.321 -0.225 0.434 -0.618 -0.072 1.929 0.379 + 95.30 10.032 10.057 10.060 0.716 -0.224 -2.081 0.716 -0.224 0.466 -1.491 -0.161 2.447 0.785 + 95.35 9.970 9.985 9.991 0.551 -0.361 -2.143 0.551 -0.361 0.773 -1.181 -0.199 2.514 0.713 + 95.40 10.176 10.185 10.188 0.412 -0.269 -1.937 0.412 -0.269 0.521 -0.797 -0.111 1.996 0.479 + 95.45 9.992 9.993 9.993 0.164 -0.013 -2.121 0.164 -0.013 0.028 -0.348 -0.002 2.262 0.175 + 95.50 10.106 10.111 10.113 0.301 -0.213 -2.007 0.301 -0.213 0.428 -0.604 -0.064 2.081 0.372 + 95.55 10.187 10.193 10.194 0.354 -0.125 -1.926 0.354 -0.125 0.240 -0.683 -0.044 1.925 0.363 + 95.60 10.053 10.056 10.056 0.250 -0.020 -2.060 0.250 -0.020 0.041 -0.514 -0.005 2.153 0.258 + 95.65 10.123 10.134 10.134 0.480 0.008 -1.990 0.480 0.008 -0.015 -0.955 0.004 2.095 0.477 + 95.70 10.284 10.284 10.288 0.045 0.272 -1.829 0.045 0.272 -0.498 -0.083 0.012 1.711 0.253 + 95.75 10.490 10.495 10.498 -0.319 0.251 -1.622 -0.319 0.251 -0.406 0.518 -0.080 1.398 0.332 + 95.80 10.805 10.814 10.817 -0.420 0.272 -1.307 -0.420 0.272 -0.355 0.549 -0.114 0.980 0.332 + 95.85 11.108 11.110 11.113 0.198 0.252 -1.005 0.198 0.252 -0.253 -0.199 0.050 0.556 0.163 + 95.90 11.218 11.240 11.240 0.708 -0.036 -0.895 0.708 -0.036 0.032 -0.634 -0.025 0.652 0.318 + 95.95 11.177 11.193 11.197 0.594 0.303 -0.936 0.594 0.303 -0.283 -0.556 0.180 0.660 0.325 + 96.00 11.178 11.190 11.197 0.527 0.407 -0.935 0.527 0.407 -0.380 -0.492 0.214 0.659 0.329 + 96.05 11.354 11.366 11.369 0.526 0.272 -0.759 0.526 0.272 -0.206 -0.399 0.143 0.463 0.236 + 96.10 11.319 11.325 11.331 0.341 0.373 -0.793 0.341 0.373 -0.296 -0.271 0.127 0.442 0.210 + 96.15 11.443 11.443 11.452 0.032 0.444 -0.670 0.032 0.444 -0.297 -0.021 0.014 0.323 0.149 + 96.20 11.529 11.529 11.544 -0.050 0.585 -0.584 -0.050 0.585 -0.341 0.029 -0.029 0.343 0.172 + 96.25 11.352 11.352 11.359 -0.006 0.396 -0.761 -0.006 0.396 -0.301 0.004 -0.002 0.368 0.151 + 96.30 11.334 11.337 11.346 0.247 0.446 -0.779 0.247 0.446 -0.347 -0.192 0.110 0.433 0.206 + 96.35 11.528 11.532 11.553 0.308 0.697 -0.585 0.308 0.697 -0.407 -0.180 0.215 0.461 0.247 + 96.40 11.266 11.272 11.289 0.374 0.624 -0.847 0.374 0.624 -0.528 -0.317 0.233 0.623 0.329 + 96.45 11.092 11.133 11.171 0.963 0.920 -1.021 0.963 0.920 -0.939 -0.984 0.886 1.408 0.811 + 96.50 10.983 11.028 11.043 0.992 0.588 -1.130 0.992 0.588 -0.665 -1.121 0.583 1.303 0.714 + 96.55 10.775 10.826 10.845 1.045 0.650 -1.338 1.045 0.650 -0.870 -1.398 0.679 1.652 0.891 + 96.60 10.732 10.781 10.802 1.028 0.673 -1.381 1.028 0.673 -0.929 -1.420 0.692 1.709 0.916 + 96.65 10.833 10.853 10.857 0.653 0.282 -1.280 0.653 0.282 -0.361 -0.836 0.184 1.072 0.464 + 96.70 11.042 11.048 11.051 0.339 0.285 -1.070 0.339 0.285 -0.305 -0.363 0.097 0.671 0.242 + 96.75 10.719 10.726 10.729 0.406 0.245 -1.394 0.406 0.245 -0.341 -0.566 0.099 1.084 0.334 + 96.80 11.067 11.074 11.079 0.401 0.308 -1.046 0.401 0.308 -0.323 -0.419 0.124 0.675 0.272 + 96.85 11.259 11.274 11.274 0.580 0.053 -0.854 0.580 0.053 -0.045 -0.495 0.031 0.534 0.249 + 96.90 11.187 11.211 11.230 0.732 0.644 -0.926 0.732 0.644 -0.596 -0.678 0.471 0.904 0.509 + 96.95 11.365 11.385 11.400 0.684 0.578 -0.748 0.684 0.578 -0.433 -0.512 0.396 0.681 0.389 + 97.00 11.405 11.417 11.425 0.529 0.418 -0.708 0.529 0.418 -0.296 -0.375 0.221 0.478 0.263 + 97.05 11.252 11.263 11.281 0.491 0.643 -0.861 0.491 0.643 -0.553 -0.423 0.316 0.698 0.382 + 97.10 11.469 11.470 11.478 0.158 0.428 -0.644 0.158 0.428 -0.275 -0.102 0.068 0.311 0.151 + 97.15 11.291 11.291 11.307 0.122 0.596 -0.822 0.122 0.596 -0.490 -0.101 0.073 0.523 0.253 + 97.20 11.438 11.441 11.448 0.229 0.405 -0.674 0.229 0.405 -0.273 -0.154 0.093 0.336 0.164 + 97.25 11.405 11.406 11.406 0.157 0.082 -0.708 0.157 0.082 -0.058 -0.111 0.013 0.266 0.063 + 97.30 11.609 11.612 11.612 -0.277 0.057 -0.504 -0.277 0.057 -0.029 0.140 -0.016 0.167 0.072 + 97.35 11.556 11.557 11.557 0.120 0.054 -0.557 0.120 0.054 -0.030 -0.067 0.006 0.164 0.037 + 97.40 11.439 11.446 11.446 0.408 0.022 -0.674 0.408 0.022 -0.015 -0.275 0.009 0.311 0.138 + 97.45 11.512 11.521 11.525 0.462 -0.298 -0.601 0.462 -0.298 0.179 -0.277 -0.138 0.332 0.179 + 97.50 11.637 11.643 11.646 0.362 -0.267 -0.476 0.362 -0.267 0.127 -0.172 -0.096 0.214 0.117 + 97.55 11.405 11.410 11.411 0.326 -0.179 -0.708 0.326 -0.179 0.127 -0.231 -0.059 0.320 0.135 + 97.60 11.517 11.520 11.523 0.250 -0.241 -0.596 0.250 -0.241 0.144 -0.149 -0.060 0.238 0.108 + 97.65 11.349 11.349 11.357 0.135 -0.422 -0.764 0.135 -0.422 0.323 -0.103 -0.057 0.390 0.172 + 97.70 11.390 11.390 11.398 0.074 -0.440 -0.723 0.074 -0.440 0.319 -0.054 -0.033 0.361 0.162 + 97.75 11.483 11.483 11.500 0.010 -0.613 -0.630 0.010 -0.613 0.386 -0.006 -0.006 0.386 0.193 + 97.80 11.506 11.508 11.543 -0.189 -0.897 -0.606 -0.189 -0.897 0.544 0.114 0.169 0.604 0.290 + 97.85 11.503 11.503 11.523 0.028 -0.683 -0.610 0.028 -0.683 0.417 -0.017 -0.019 0.420 0.209 + 97.90 11.406 11.407 11.422 0.091 -0.588 -0.706 0.091 -0.588 0.415 -0.065 -0.054 0.427 0.212 + 97.95 11.169 11.173 11.192 0.306 -0.656 -0.944 0.306 -0.656 0.619 -0.289 -0.201 0.708 0.356 + 98.00 11.376 11.377 11.414 0.176 -0.915 -0.737 0.176 -0.915 0.674 -0.130 -0.161 0.705 0.352 + 98.05 11.104 11.107 11.119 0.258 -0.527 -1.009 0.258 -0.527 0.532 -0.260 -0.136 0.681 0.304 + 98.10 11.174 11.174 11.194 -0.021 -0.665 -0.939 -0.021 -0.665 0.625 0.020 0.014 0.662 0.313 + 98.15 11.224 11.224 11.240 0.017 -0.592 -0.889 0.017 -0.592 0.526 -0.015 -0.010 0.570 0.263 + 98.20 10.984 10.984 10.996 -0.005 -0.506 -1.129 -0.005 -0.506 0.572 0.005 0.002 0.765 0.286 + 98.25 11.196 11.197 11.200 0.048 -0.259 -0.916 0.048 -0.259 0.237 -0.044 -0.012 0.455 0.121 + 98.30 11.141 11.143 11.147 0.241 -0.280 -0.972 0.241 -0.280 0.272 -0.234 -0.067 0.541 0.183 + 98.35 11.134 11.134 11.150 -0.019 -0.607 -0.979 -0.019 -0.607 0.595 0.019 0.012 0.664 0.298 + 98.40 10.856 10.857 10.908 0.108 -1.058 -1.257 0.108 -1.058 1.329 -0.135 -0.114 1.355 0.671 + 98.45 10.753 10.755 10.776 0.166 -0.685 -1.359 0.166 -0.685 0.931 -0.225 -0.113 1.172 0.482 + 98.50 10.928 10.948 10.957 0.662 -0.440 -1.185 0.662 -0.440 0.521 -0.785 -0.291 1.018 0.493 + 98.55 11.234 11.246 11.256 0.514 -0.484 -0.879 0.514 -0.484 0.426 -0.452 -0.249 0.636 0.334 + 98.60 11.195 11.197 11.216 0.171 -0.656 -0.917 0.171 -0.656 0.602 -0.157 -0.112 0.651 0.316 + 98.65 10.908 10.914 10.921 0.363 -0.402 -1.205 0.363 -0.402 0.485 -0.437 -0.146 0.873 0.334 + 98.70 11.081 11.087 11.094 0.378 -0.384 -1.032 0.378 -0.384 0.396 -0.390 -0.145 0.678 0.287 + 98.75 11.066 11.066 11.080 -0.060 -0.542 -1.047 -0.060 -0.542 0.567 0.063 0.033 0.696 0.286 + 98.80 11.245 11.245 11.253 0.014 -0.437 -0.868 0.014 -0.437 0.379 -0.013 -0.006 0.472 0.190 + 98.85 11.121 11.122 11.128 0.162 -0.351 -0.992 0.162 -0.351 0.348 -0.160 -0.057 0.567 0.194 + 98.90 11.363 11.371 11.373 0.409 -0.243 -0.749 0.409 -0.243 0.182 -0.306 -0.099 0.394 0.185 + 98.95 11.186 11.209 11.212 0.725 -0.230 -0.927 0.725 -0.230 0.213 -0.672 -0.166 0.718 0.362 + 99.00 11.072 11.093 11.099 0.676 -0.371 -1.040 0.676 -0.371 0.386 -0.703 -0.251 0.839 0.420 + 99.05 10.655 10.672 10.681 0.607 -0.420 -1.458 0.607 -0.420 0.613 -0.885 -0.255 1.335 0.553 + 99.10 10.704 10.729 10.749 0.732 -0.664 -1.409 0.732 -0.664 0.935 -1.031 -0.486 1.481 0.737 + 99.15 10.925 10.977 10.987 1.067 -0.471 -1.188 1.067 -0.471 0.559 -1.267 -0.503 1.386 0.737 + 99.20 10.602 10.669 10.676 1.189 -0.397 -1.510 1.189 -0.397 0.600 -1.796 -0.472 1.926 0.976 + 99.25 10.329 10.391 10.395 1.134 -0.313 -1.784 1.134 -0.313 0.558 -2.024 -0.355 2.284 1.065 + 99.30 10.399 10.468 10.469 1.199 -0.179 -1.714 1.199 -0.179 0.307 -2.054 -0.215 2.203 1.044 + 99.35 10.551 10.599 10.599 1.012 -0.038 -1.562 1.012 -0.038 0.060 -1.581 -0.039 1.733 0.791 + 99.40 10.767 10.821 10.821 1.077 0.039 -1.345 1.077 0.039 -0.052 -1.449 0.041 1.485 0.725 + 99.45 11.187 11.228 11.228 0.951 -0.073 -0.925 0.951 -0.073 0.067 -0.880 -0.069 0.883 0.443 + 99.50 10.772 10.823 10.827 1.050 -0.294 -1.341 1.050 -0.294 0.395 -1.408 -0.309 1.494 0.747 + 99.55 10.470 10.544 10.544 1.249 -0.011 -1.643 1.249 -0.011 0.018 -2.052 -0.014 2.129 1.026 + 99.60 10.307 10.381 10.381 1.242 0.033 -1.806 1.242 0.033 -0.060 -2.243 0.041 2.403 1.122 + 99.65 10.396 10.448 10.450 1.045 -0.201 -1.717 1.045 -0.201 0.345 -1.793 -0.210 2.039 0.919 + 99.70 10.216 10.270 10.274 1.049 -0.281 -1.897 1.049 -0.281 0.533 -1.991 -0.295 2.389 1.041 + 99.75 10.440 10.518 10.535 1.280 -0.602 -1.673 1.280 -0.602 1.007 -2.142 -0.770 2.400 1.244 + 99.80 10.377 10.474 10.480 1.424 -0.374 -1.736 1.424 -0.374 0.649 -2.472 -0.532 2.591 1.305 + 99.85 10.386 10.479 10.481 1.394 -0.206 -1.727 1.394 -0.206 0.355 -2.408 -0.287 2.484 1.225 + 99.90 10.029 10.095 10.097 1.155 -0.178 -2.084 1.155 -0.178 0.371 -2.408 -0.206 2.855 1.222 + 99.95 9.984 10.061 10.066 1.237 -0.331 -2.129 1.237 -0.331 0.706 -2.633 -0.410 3.085 1.378 + 100.00 10.062 10.144 10.150 1.291 -0.334 -2.051 1.291 -0.334 0.685 -2.648 -0.431 2.993 1.384 + 100.05 9.998 10.065 10.065 1.163 0.060 -2.115 1.163 0.060 -0.126 -2.459 0.069 2.914 1.232 + 100.10 9.704 9.755 9.755 0.998 -0.032 -2.409 0.998 -0.032 0.077 -2.404 -0.032 3.401 1.203 + 100.15 10.024 10.082 10.083 1.083 0.166 -2.089 1.083 0.166 -0.346 -2.262 0.179 2.782 1.147 + 100.20 10.418 10.477 10.485 1.109 -0.409 -1.695 1.109 -0.409 0.693 -1.880 -0.453 2.135 1.027 + 100.25 10.521 10.592 10.620 1.221 -0.780 -1.592 1.221 -0.780 1.242 -1.944 -0.953 2.317 1.248 + 100.30 10.508 10.644 10.679 1.698 -0.866 -1.605 1.698 -0.866 1.389 -2.725 -1.469 3.103 1.696 + 100.35 10.559 10.709 10.731 1.783 -0.689 -1.554 1.783 -0.689 1.070 -2.770 -1.228 3.033 1.607 + 100.40 10.520 10.690 10.706 1.901 -0.582 -1.593 1.901 -0.582 0.928 -3.028 -1.107 3.245 1.677 + 100.45 10.561 10.667 10.680 1.500 -0.515 -1.552 1.500 -0.515 0.798 -2.327 -0.772 2.461 1.289 + 100.50 10.742 10.830 10.837 1.377 -0.382 -1.371 1.377 -0.382 0.524 -1.887 -0.526 1.961 1.014 + 100.55 10.540 10.652 10.665 1.542 -0.518 -1.573 1.542 -0.518 0.814 -2.425 -0.798 2.559 1.340 + 100.60 10.586 10.705 10.719 1.592 -0.535 -1.527 1.592 -0.535 0.817 -2.431 -0.852 2.576 1.351 + 100.65 11.033 11.182 11.188 1.821 -0.356 -1.080 1.821 -0.356 0.384 -1.967 -0.648 2.305 1.053 + 100.70 11.170 11.367 11.384 2.107 -0.625 -0.943 2.107 -0.625 0.590 -1.986 -1.318 2.860 1.228 + 100.75 10.428 10.626 10.634 2.043 -0.392 -1.685 2.043 -0.392 0.661 -3.442 -0.801 3.583 1.798 + 100.80 10.516 10.675 10.688 1.837 -0.541 -1.597 1.837 -0.541 0.864 -2.934 -0.993 3.109 1.608 + 100.85 10.200 10.370 10.372 1.873 -0.199 -1.913 1.873 -0.199 0.380 -3.582 -0.372 3.603 1.811 + 100.90 10.410 10.635 10.642 2.176 -0.399 -1.703 2.176 -0.399 0.679 -3.705 -0.867 3.896 1.933 + 100.95 10.360 10.561 10.561 2.054 -0.010 -1.753 2.054 -0.010 0.017 -3.600 -0.020 3.645 1.800 + 101.00 10.215 10.482 10.482 2.348 -0.096 -1.897 2.348 -0.096 0.182 -4.455 -0.225 4.561 2.232 + 101.05 10.402 10.549 10.551 1.755 0.216 -1.711 1.755 0.216 -0.369 -3.002 0.378 3.026 1.524 + 101.10 10.101 10.245 10.247 1.708 0.218 -2.012 1.708 0.218 -0.438 -3.436 0.372 3.505 1.742 + 101.15 10.152 10.346 10.346 1.994 -0.021 -1.961 1.994 -0.021 0.042 -3.909 -0.042 3.910 1.955 + 101.20 10.147 10.282 10.296 1.658 0.537 -1.966 1.658 0.537 -1.056 -3.260 0.891 3.451 1.770 + 101.25 10.132 10.305 10.318 1.878 0.523 -1.981 1.878 0.523 -1.035 -3.720 0.982 3.862 1.992 + 101.30 10.117 10.244 10.255 1.611 0.473 -1.996 1.611 0.473 -0.943 -3.215 0.761 3.401 1.718 + 101.35 10.179 10.305 10.307 1.606 0.197 -1.934 1.606 0.197 -0.381 -3.105 0.316 3.179 1.572 + 101.40 10.111 10.232 10.253 1.572 0.660 -2.002 1.572 0.660 -1.321 -3.148 1.037 3.458 1.784 + 101.45 10.471 10.580 10.612 1.519 0.818 -1.642 1.519 0.818 -1.343 -2.495 1.242 2.836 1.547 + 101.50 10.238 10.374 10.418 1.674 0.951 -1.874 1.674 0.951 -1.782 -3.137 1.591 3.609 1.972 + 101.55 10.278 10.384 10.424 1.482 0.908 -1.835 1.482 0.908 -1.666 -2.720 1.346 3.195 1.731 + 101.60 10.509 10.623 10.658 1.551 0.863 -1.604 1.551 0.863 -1.385 -2.487 1.339 2.861 1.573 + 101.65 10.618 10.747 10.812 1.661 1.177 -1.495 1.661 1.177 -1.760 -2.483 1.956 3.190 1.809 + 101.70 10.743 10.856 10.935 1.561 1.315 -1.370 1.561 1.315 -1.801 -2.138 2.053 3.021 1.734 + 101.75 10.770 10.873 10.949 1.491 1.293 -1.343 1.491 1.293 -1.737 -2.002 1.928 2.849 1.639 + 101.80 10.844 10.959 11.010 1.579 1.057 -1.268 1.579 1.057 -1.341 -2.002 1.668 2.609 1.466 + 101.85 10.815 10.912 10.969 1.454 1.115 -1.298 1.454 1.115 -1.448 -1.887 1.621 2.521 1.439 + 101.90 10.864 10.916 10.977 1.062 1.155 -1.248 1.062 1.155 -1.442 -1.326 1.226 2.010 1.155 + 101.95 11.036 11.097 11.160 1.168 1.180 -1.077 1.168 1.180 -1.271 -1.259 1.379 1.959 1.129 + 102.00 11.254 11.307 11.331 1.088 0.736 -0.858 1.088 0.736 -0.631 -0.934 0.800 1.231 0.691 + 102.05 11.265 11.331 11.340 1.225 0.458 -0.848 1.225 0.458 -0.389 -1.039 0.561 1.215 0.622 + 102.10 11.301 11.379 11.387 1.329 0.430 -0.812 1.329 0.430 -0.349 -1.079 0.571 1.305 0.635 + 102.15 11.162 11.213 11.232 1.073 0.650 -0.951 1.073 0.650 -0.619 -1.020 0.697 1.239 0.691 + 102.20 11.468 11.560 11.572 1.454 0.530 -0.645 1.454 0.530 -0.341 -0.937 0.770 1.405 0.630 + 102.25 11.796 11.851 11.862 1.146 0.508 -0.317 1.146 0.508 -0.161 -0.364 0.582 0.836 0.352 + 102.30 11.940 12.001 12.013 1.204 0.540 -0.173 1.204 0.540 -0.093 -0.208 0.650 0.886 0.344 + 102.35 11.475 11.538 11.543 1.202 0.338 -0.638 1.202 0.338 -0.215 -0.767 0.406 0.983 0.447 + 102.40 11.464 11.576 11.578 1.607 0.238 -0.649 1.607 0.238 -0.154 -1.043 0.382 1.530 0.561 + 102.45 11.432 11.493 11.494 1.181 0.144 -0.680 1.181 0.144 -0.098 -0.804 0.170 0.940 0.414 + 102.50 11.586 11.652 11.652 1.238 0.038 -0.527 1.238 0.038 -0.020 -0.652 0.048 0.905 0.327 + 102.55 11.547 11.633 11.639 1.405 0.392 -0.565 1.405 0.392 -0.222 -0.795 0.551 1.224 0.496 + 102.60 11.171 11.251 11.268 1.340 0.625 -0.942 1.340 0.625 -0.589 -1.262 0.837 1.536 0.812 + 102.65 11.391 11.494 11.515 1.533 0.686 -0.721 1.533 0.686 -0.495 -1.106 1.051 1.670 0.802 + 102.70 11.597 11.698 11.716 1.529 0.662 -0.516 1.529 0.662 -0.341 -0.788 1.013 1.521 0.664 + 102.75 11.680 11.787 11.811 1.587 0.752 -0.433 1.587 0.752 -0.326 -0.688 1.193 1.636 0.707 + 102.80 11.813 11.903 11.926 1.462 0.744 -0.300 1.462 0.744 -0.223 -0.439 1.088 1.391 0.597 + 102.85 11.747 11.839 11.841 1.474 0.240 -0.366 1.474 0.240 -0.088 -0.540 0.354 1.182 0.326 + 102.90 12.046 12.114 12.121 1.277 0.428 -0.066 1.277 0.428 -0.028 -0.085 0.547 0.909 0.277 + 102.95 12.170 12.251 12.258 1.401 0.423 0.057 1.401 0.423 0.024 0.080 0.593 1.073 0.299 + 103.00 12.289 12.352 12.352 1.246 0.054 0.176 1.246 0.054 0.010 0.219 0.068 0.793 0.115 + 103.05 12.431 12.478 12.479 1.083 -0.177 0.318 1.083 -0.177 -0.056 0.344 -0.192 0.653 0.199 + 103.10 12.196 12.260 12.266 1.250 0.394 0.083 1.250 0.394 0.033 0.104 0.493 0.863 0.252 + 103.15 12.261 12.315 12.321 1.155 0.373 0.148 1.155 0.373 0.055 0.171 0.431 0.747 0.234 + 103.20 12.265 12.346 12.357 1.409 0.521 0.152 1.409 0.521 0.079 0.215 0.735 1.140 0.385 + 103.25 12.418 12.545 12.551 1.784 0.375 0.305 1.784 0.375 0.114 0.544 0.669 1.708 0.435 + 103.30 12.730 12.857 12.863 1.806 0.364 0.617 1.806 0.364 0.225 1.115 0.657 1.887 0.657 + 103.35 12.856 13.028 13.028 2.112 0.083 0.743 2.112 0.083 0.061 1.569 0.175 2.510 0.790 + 103.40 12.604 12.808 12.810 2.281 0.177 0.491 2.281 0.177 0.087 1.120 0.403 2.738 0.597 + 103.45 12.575 12.801 12.801 2.393 -0.013 0.462 2.393 -0.013 -0.006 1.107 -0.030 2.971 0.554 + 103.50 12.050 12.228 12.229 2.083 -0.108 -0.063 2.083 -0.108 0.007 -0.132 -0.226 2.177 0.131 + 103.55 12.010 12.142 12.143 1.789 0.079 -0.103 1.789 0.079 -0.008 -0.184 0.142 1.609 0.116 + 103.60 12.070 12.198 12.202 1.761 0.292 -0.042 1.761 0.292 -0.012 -0.075 0.514 1.594 0.260 + 103.65 11.771 11.931 11.932 1.945 0.186 -0.342 1.945 0.186 -0.063 -0.664 0.361 1.966 0.379 + 103.70 11.704 11.819 11.819 1.639 0.034 -0.408 1.639 0.034 -0.014 -0.669 0.055 1.427 0.336 + 103.75 11.692 11.809 11.809 1.653 -0.010 -0.420 1.653 -0.010 0.004 -0.695 -0.016 1.455 0.348 + 103.80 11.325 11.420 11.423 1.470 0.234 -0.788 1.470 0.234 -0.185 -1.158 0.345 1.418 0.611 + 103.85 11.460 11.558 11.558 1.495 -0.077 -0.652 1.495 -0.077 0.050 -0.975 -0.116 1.333 0.492 + 103.90 11.609 11.701 11.701 1.469 -0.032 -0.504 1.469 -0.032 0.016 -0.740 -0.048 1.207 0.371 + 103.95 11.237 11.297 11.300 1.168 0.233 -0.876 1.168 0.233 -0.204 -1.023 0.273 1.093 0.539 + 104.00 11.075 11.132 11.137 1.124 0.331 -1.038 1.124 0.331 -0.344 -1.166 0.372 1.225 0.636 + 104.05 11.138 11.200 11.200 1.175 -0.061 -0.975 1.175 -0.061 0.060 -1.146 -0.072 1.168 0.575 + 104.10 10.936 10.998 11.007 1.166 0.455 -1.177 1.166 0.455 -0.535 -1.373 0.530 1.476 0.783 + 104.15 11.111 11.158 11.158 1.025 0.077 -1.002 1.025 0.077 -0.077 -1.027 0.079 1.030 0.516 + 104.20 11.202 11.250 11.251 1.035 -0.157 -0.911 1.035 -0.157 0.143 -0.942 -0.163 0.962 0.483 + 104.25 11.204 11.258 11.259 1.097 0.122 -0.908 1.097 0.122 -0.111 -0.997 0.134 1.022 0.506 + 104.30 11.056 11.118 11.119 1.171 0.158 -1.057 1.171 0.158 -0.167 -1.238 0.185 1.257 0.631 + 104.35 10.808 10.850 10.852 0.954 0.230 -1.305 0.954 0.230 -0.301 -1.245 0.220 1.334 0.650 + 104.40 10.855 10.902 10.902 1.012 0.136 -1.258 1.012 0.136 -0.171 -1.273 0.138 1.313 0.646 + 104.45 10.784 10.796 10.797 0.498 0.137 -1.328 0.498 0.137 -0.182 -0.661 0.068 1.016 0.345 + 104.50 10.746 10.766 10.780 0.656 0.538 -1.367 0.656 0.538 -0.736 -0.897 0.353 1.294 0.606 + 104.55 11.066 11.081 11.092 0.564 0.496 -1.046 0.564 0.496 -0.519 -0.590 0.280 0.829 0.417 + 104.60 11.066 11.111 11.131 1.004 0.654 -1.047 1.004 0.654 -0.685 -1.051 0.657 1.266 0.708 + 104.65 10.872 10.923 10.978 1.048 1.097 -1.240 1.048 1.097 -1.361 -1.300 1.150 1.921 1.103 + 104.70 11.048 11.073 11.096 0.744 0.709 -1.065 0.744 0.709 -0.755 -0.792 0.527 1.095 0.607 + 104.75 10.886 10.915 10.954 0.789 0.921 -1.226 0.789 0.921 -1.130 -0.968 0.727 1.488 0.828 + 104.80 10.826 10.872 10.918 0.991 1.008 -1.287 0.991 1.008 -1.297 -1.275 0.999 1.827 1.038 + 104.85 10.838 10.876 10.919 0.907 0.966 -1.275 0.907 0.966 -1.232 -1.156 0.876 1.691 0.951 + 104.90 10.612 10.686 10.724 1.257 0.903 -1.501 1.257 0.903 -1.354 -1.887 1.135 2.324 1.292 + 104.95 11.018 11.082 11.111 1.198 0.803 -1.095 1.198 0.803 -0.879 -1.312 0.962 1.640 0.925 + 105.00 11.200 11.259 11.282 1.147 0.722 -0.913 1.147 0.722 -0.659 -1.047 0.829 1.335 0.745 + 105.05 10.912 11.001 11.026 1.396 0.739 -1.201 1.396 0.739 -0.888 -1.676 1.032 1.968 1.080 + 105.10 10.584 10.639 10.671 1.087 0.826 -1.529 1.087 0.826 -1.263 -1.662 0.898 2.101 1.136 + 105.15 10.469 10.505 10.537 0.862 0.825 -1.643 0.862 0.825 -1.355 -1.416 0.711 2.062 1.043 + 105.20 10.930 10.980 11.026 1.053 0.999 -1.183 1.053 0.999 -1.182 -1.246 1.053 1.754 1.007 + 105.25 11.203 11.272 11.302 1.247 0.816 -0.910 1.247 0.816 -0.743 -1.134 1.018 1.524 0.848 + 105.30 11.121 11.194 11.211 1.277 0.616 -0.992 1.277 0.616 -0.611 -1.266 0.787 1.497 0.806 + 105.35 10.937 11.024 11.036 1.380 0.517 -1.176 1.380 0.517 -0.608 -1.623 0.713 1.777 0.937 + 105.40 10.929 11.009 11.037 1.323 0.786 -1.184 1.323 0.786 -0.930 -1.566 1.040 1.884 1.049 + 105.45 11.019 11.130 11.161 1.571 0.838 -1.094 1.571 0.838 -0.917 -1.719 1.317 2.184 1.176 + 105.50 10.922 11.020 11.032 1.465 0.509 -1.191 1.465 0.509 -0.606 -1.744 0.746 1.911 0.996 + 105.55 10.917 10.984 10.999 1.210 0.573 -1.196 1.210 0.573 -0.686 -1.448 0.694 1.612 0.873 + 105.60 10.842 10.889 10.935 1.004 1.008 -1.270 1.004 1.008 -1.280 -1.276 1.012 1.819 1.036 + 105.65 10.922 10.968 11.017 1.003 1.033 -1.191 1.003 1.033 -1.229 -1.194 1.036 1.745 1.001 + 105.70 10.906 10.962 11.019 1.106 1.121 -1.207 1.106 1.121 -1.352 -1.335 1.240 1.968 1.135 + 105.75 10.652 10.733 10.800 1.319 1.200 -1.461 1.319 1.200 -1.754 -1.927 1.583 2.657 1.524 + 105.80 10.826 10.964 11.042 1.737 1.312 -1.287 1.737 1.312 -1.689 -2.236 2.279 3.198 1.806 + 105.85 11.138 11.274 11.353 1.745 1.337 -0.975 1.745 1.337 -1.303 -1.701 2.333 2.892 1.584 + 105.90 11.011 11.164 11.246 1.845 1.352 -1.102 1.845 1.352 -1.490 -2.034 2.496 3.224 1.774 + 105.95 11.001 11.129 11.259 1.685 1.704 -1.112 1.685 1.704 -1.895 -1.874 2.872 3.491 1.959 + 106.00 10.807 11.046 11.148 2.286 1.502 -1.306 2.286 1.502 -1.962 -2.986 3.434 4.594 2.478 + 106.05 10.669 11.020 11.158 2.758 1.750 -1.443 2.758 1.750 -2.525 -3.981 4.825 6.376 3.373 + 106.10 10.738 10.965 11.018 2.215 1.087 -1.374 2.215 1.087 -1.494 -3.045 2.407 3.989 2.080 + 106.15 10.745 10.938 10.981 2.050 0.964 -1.368 2.050 0.964 -1.318 -2.804 1.975 3.501 1.837 + 106.20 10.523 10.688 10.790 1.870 1.478 -1.590 1.870 1.478 -2.350 -2.972 2.764 4.104 2.345 + 106.25 10.627 10.772 10.896 1.758 1.644 -1.486 1.758 1.644 -2.442 -2.612 2.890 4.000 2.299 + 106.30 10.732 10.802 10.916 1.222 1.574 -1.380 1.222 1.574 -2.173 -1.687 1.924 2.939 1.679 + 106.35 11.089 11.105 11.201 0.595 1.466 -1.024 0.595 1.466 -1.501 -0.609 0.872 1.775 0.920 + 106.40 10.978 11.004 11.111 0.750 1.542 -1.135 0.750 1.542 -1.750 -0.850 1.156 2.113 1.131 + 106.45 10.864 10.890 11.002 0.755 1.560 -1.249 0.755 1.560 -1.948 -0.942 1.177 2.281 1.231 + 106.50 11.000 11.030 11.092 0.809 1.179 -1.113 0.809 1.179 -1.312 -0.901 0.954 1.642 0.928 + 106.55 10.971 10.974 11.047 0.271 1.264 -1.142 0.271 1.264 -1.444 -0.310 0.343 1.488 0.758 + 106.60 10.970 10.970 11.062 0.130 1.418 -1.143 0.130 1.418 -1.621 -0.148 0.184 1.667 0.819 + 106.65 10.788 10.790 10.914 0.198 1.640 -1.324 0.198 1.640 -2.172 -0.262 0.325 2.241 1.106 + 106.70 10.660 10.663 10.845 0.254 1.978 -1.452 0.254 1.978 -2.872 -0.370 0.503 3.043 1.470 + 106.75 10.911 10.911 11.144 -0.022 2.267 -1.202 -0.022 2.267 -2.725 0.027 -0.051 3.293 1.363 + 106.80 11.139 11.139 11.321 -0.017 2.022 -0.974 -0.017 2.022 -1.969 0.016 -0.034 2.518 0.985 + 106.85 11.312 11.314 11.520 -0.198 2.167 -0.800 -0.198 2.167 -1.735 0.159 -0.430 2.689 0.897 + 106.90 11.356 11.357 11.602 -0.182 2.369 -0.757 -0.182 2.369 -1.793 0.138 -0.432 3.109 0.925 + 106.95 11.486 11.489 11.713 -0.252 2.281 -0.627 -0.252 2.281 -1.430 0.158 -0.575 2.831 0.775 + 107.00 11.711 11.723 11.934 -0.521 2.237 -0.401 -0.521 2.237 -0.898 0.209 -1.165 2.718 0.743 + 107.05 11.592 11.601 11.769 -0.438 1.982 -0.520 -0.438 1.982 -1.032 0.228 -0.869 2.195 0.684 + 107.10 11.563 11.567 11.671 -0.288 1.559 -0.550 -0.288 1.559 -0.857 0.158 -0.449 1.408 0.490 + 107.15 11.436 11.441 11.514 -0.335 1.298 -0.677 -0.335 1.298 -0.878 0.226 -0.434 1.127 0.503 + 107.20 11.429 11.430 11.485 -0.193 1.125 -0.684 -0.193 1.125 -0.770 0.132 -0.218 0.886 0.405 + 107.25 11.640 11.640 11.706 0.097 1.239 -0.473 0.097 1.239 -0.587 -0.046 0.121 0.885 0.300 + 107.30 11.990 11.998 12.089 0.429 1.485 -0.123 0.429 1.485 -0.182 -0.053 0.637 1.202 0.332 + 107.35 11.801 11.810 11.971 0.482 1.953 -0.312 0.482 1.953 -0.610 -0.151 0.942 2.073 0.566 + 107.40 11.835 11.853 12.073 0.653 2.293 -0.277 0.653 2.293 -0.636 -0.181 1.497 2.881 0.818 + 107.45 11.663 11.671 11.925 0.430 2.452 -0.450 0.430 2.452 -1.104 -0.193 1.054 3.201 0.769 + 107.50 11.817 11.818 12.105 0.171 2.621 -0.296 0.171 2.621 -0.775 -0.051 0.449 3.493 0.449 + 107.55 11.879 11.890 12.110 0.505 2.299 -0.234 0.505 2.299 -0.538 -0.118 1.161 2.799 0.643 + 107.60 11.948 11.971 12.225 0.751 2.477 -0.165 0.751 2.477 -0.409 -0.124 1.861 3.363 0.955 + 107.65 12.098 12.110 12.328 0.536 2.306 -0.015 0.536 2.306 -0.034 -0.008 1.235 2.803 0.618 + 107.70 12.186 12.210 12.436 0.759 2.362 0.074 0.759 2.362 0.174 0.056 1.793 3.080 0.901 + 107.75 12.041 12.051 12.260 0.495 2.255 -0.072 0.495 2.255 -0.163 -0.036 1.117 2.667 0.565 + 107.80 11.780 11.781 11.948 0.075 1.994 -0.332 0.075 1.994 -0.663 -0.025 0.149 2.047 0.340 + 107.85 11.798 11.799 12.013 0.123 2.258 -0.315 0.123 2.258 -0.711 -0.039 0.279 2.606 0.382 + 107.90 11.401 11.402 11.709 0.151 2.662 -0.711 0.151 2.662 -1.894 -0.107 0.402 3.808 0.970 + 107.95 11.252 11.252 11.590 0.000 2.778 -0.861 0.000 2.778 -2.391 -0.000 0.001 4.229 1.195 + 108.00 11.381 11.381 11.676 -0.033 2.605 -0.731 -0.033 2.605 -1.906 0.024 -0.086 3.662 0.954 + 108.05 11.358 11.359 11.574 -0.167 2.218 -0.755 -0.167 2.218 -1.675 0.126 -0.370 2.759 0.860 + 108.10 11.394 11.394 11.565 -0.098 1.980 -0.719 -0.098 1.980 -1.424 0.071 -0.194 2.223 0.719 + 108.15 11.634 11.635 11.777 -0.079 1.825 -0.479 -0.079 1.825 -0.873 0.038 -0.145 1.783 0.443 + 108.20 11.655 11.655 11.795 0.108 1.812 -0.458 0.108 1.812 -0.830 -0.050 0.196 1.752 0.427 + 108.25 11.552 11.554 11.746 0.173 2.118 -0.560 0.173 2.118 -1.187 -0.097 0.366 2.415 0.623 + 108.30 11.564 11.565 11.789 0.094 2.286 -0.548 0.094 2.286 -1.254 -0.051 0.214 2.768 0.637 + 108.35 11.601 11.601 11.851 0.040 2.421 -0.512 0.040 2.421 -1.239 -0.020 0.096 3.063 0.621 + 108.40 11.588 11.591 11.825 0.265 2.340 -0.525 0.265 2.340 -1.227 -0.139 0.619 2.909 0.691 + 108.45 11.579 11.581 11.793 0.231 2.225 -0.534 0.231 2.225 -1.188 -0.123 0.514 2.645 0.650 + 108.50 11.390 11.396 11.618 0.368 2.261 -0.723 0.368 2.261 -1.635 -0.266 0.832 2.885 0.927 + 108.55 11.340 11.341 11.529 0.130 2.076 -0.773 0.130 2.076 -1.604 -0.100 0.269 2.461 0.815 + 108.60 11.220 11.220 11.387 0.044 1.944 -0.893 0.044 1.944 -1.737 -0.039 0.085 2.290 0.870 + 108.65 10.907 10.907 11.176 0.057 2.438 -1.206 0.057 2.438 -2.940 -0.069 0.139 3.701 1.472 + 108.70 10.959 10.959 11.210 0.047 2.357 -1.154 0.047 2.357 -2.720 -0.054 0.110 3.445 1.361 + 108.75 10.708 10.708 11.016 -0.096 2.585 -1.405 -0.096 2.585 -3.633 0.135 -0.248 4.334 1.822 + 108.80 10.755 10.765 10.988 -0.455 2.205 -1.358 -0.455 2.205 -2.994 0.618 -1.004 3.457 1.609 + 108.85 10.779 10.792 10.986 -0.524 2.056 -1.334 -0.524 2.056 -2.742 0.699 -1.077 3.140 1.514 + 108.90 11.219 11.244 11.460 -0.749 2.215 -0.894 -0.749 2.215 -1.980 0.669 -1.659 3.132 1.334 + 108.95 10.874 10.920 11.221 -1.000 2.580 -1.238 -1.000 2.580 -3.195 1.238 -2.580 4.595 2.145 + 109.00 10.740 10.791 11.099 -1.051 2.596 -1.373 -1.051 2.596 -3.566 1.444 -2.729 4.866 2.358 + 109.05 11.099 11.144 11.331 -1.006 2.047 -1.014 -1.006 2.047 -2.077 1.020 -2.059 3.116 1.549 + 109.10 11.146 11.186 11.267 -0.947 1.353 -0.967 -0.947 1.353 -1.309 0.916 -1.282 1.832 1.024 + 109.15 11.259 11.314 11.410 -1.116 1.475 -0.854 -1.116 1.475 -1.259 0.953 -1.646 2.075 1.141 + 109.20 11.323 11.368 11.492 -1.004 1.684 -0.790 -1.004 1.684 -1.330 0.793 -1.692 2.235 1.147 + 109.25 11.241 11.275 11.398 -0.884 1.666 -0.872 -0.884 1.666 -1.453 0.771 -1.473 2.159 1.104 + 109.30 10.945 10.964 11.103 -0.649 1.750 -1.168 -0.649 1.750 -2.044 0.758 -1.135 2.424 1.229 + 109.35 10.942 10.962 11.098 -0.667 1.730 -1.171 -0.667 1.730 -2.026 0.781 -1.154 2.405 1.229 + 109.40 11.025 11.073 11.231 -1.029 1.877 -1.087 -1.029 1.877 -2.041 1.119 -1.931 2.882 1.512 + 109.45 10.805 10.842 10.948 -0.892 1.520 -1.308 -0.892 1.520 -1.988 1.167 -1.356 2.408 1.337 + 109.50 10.824 10.858 10.952 -0.851 1.435 -1.289 -0.851 1.435 -1.850 1.097 -1.222 2.223 1.237 + 109.55 10.806 10.823 10.945 -0.597 1.628 -1.307 -0.597 1.628 -2.127 0.779 -0.971 2.357 1.232 + 109.60 10.981 10.982 11.153 -0.111 1.949 -1.131 -0.111 1.949 -2.205 0.125 -0.215 2.545 1.109 + 109.65 10.900 10.901 11.105 -0.145 2.121 -1.213 -0.145 2.121 -2.573 0.175 -0.307 2.995 1.298 + 109.70 10.903 10.903 11.133 -0.107 2.250 -1.210 -0.107 2.250 -2.724 0.129 -0.241 3.270 1.369 + 109.75 10.706 10.706 10.877 -0.113 1.921 -1.407 -0.113 1.921 -2.703 0.159 -0.217 2.841 1.358 + 109.80 10.656 10.657 10.797 0.150 1.731 -1.457 0.150 1.731 -2.521 -0.218 0.259 2.570 1.272 + 109.85 10.962 10.974 11.108 0.508 1.718 -1.150 0.508 1.718 -1.976 -0.585 0.873 2.267 1.119 + 109.90 11.393 11.409 11.508 0.607 1.507 -0.720 0.607 1.507 -1.085 -0.437 0.915 1.578 0.742 + 109.95 11.271 11.282 11.405 0.498 1.668 -0.841 0.498 1.668 -1.403 -0.419 0.830 1.868 0.841 + 110.00 11.284 11.286 11.424 0.226 1.773 -0.829 0.226 1.773 -1.470 -0.187 0.401 1.941 0.768 + 110.05 11.491 11.501 11.634 0.485 1.752 -0.622 0.485 1.752 -1.090 -0.302 0.849 1.845 0.707 + 110.10 11.413 11.417 11.544 0.309 1.710 -0.700 0.309 1.710 -1.197 -0.216 0.529 1.756 0.663 + 110.15 11.373 11.375 11.537 0.217 1.928 -0.740 0.217 1.928 -1.427 -0.161 0.419 2.156 0.748 + 110.20 11.367 11.372 11.488 0.335 1.629 -0.746 0.335 1.629 -1.216 -0.250 0.546 1.662 0.678 + 110.25 11.060 11.078 11.265 0.627 2.049 -1.053 0.627 2.049 -2.158 -0.660 1.285 2.850 1.298 + 110.30 10.885 10.906 11.132 0.671 2.235 -1.228 0.671 2.235 -2.744 -0.824 1.500 3.476 1.617 + 110.35 11.324 11.328 11.476 0.287 1.840 -0.789 0.287 1.840 -1.451 -0.226 0.528 2.045 0.780 + 110.40 11.388 11.402 11.547 0.571 1.822 -0.725 0.571 1.822 -1.321 -0.414 1.041 2.086 0.866 + 110.45 11.161 11.202 11.358 0.961 1.877 -0.952 0.961 1.877 -1.786 -0.915 1.804 2.676 1.349 + 110.50 11.170 11.209 11.353 0.937 1.804 -0.943 0.937 1.804 -1.700 -0.884 1.690 2.510 1.278 + 110.55 11.223 11.261 11.436 0.927 1.996 -0.890 0.927 1.996 -1.776 -0.825 1.850 2.817 1.347 + 110.60 11.404 11.446 11.598 0.973 1.873 -0.708 0.973 1.873 -1.327 -0.689 1.823 2.478 1.179 + 110.65 11.540 11.579 11.700 0.951 1.680 -0.573 0.951 1.680 -0.962 -0.545 1.598 2.028 0.972 + 110.70 11.934 11.945 12.058 0.522 1.644 -0.179 0.522 1.644 -0.294 -0.093 0.858 1.503 0.456 + 110.75 12.078 12.081 12.175 0.252 1.510 -0.035 0.252 1.510 -0.052 -0.009 0.380 1.173 0.192 + 110.80 12.085 12.102 12.183 0.636 1.401 -0.028 0.636 1.401 -0.039 -0.018 0.891 1.185 0.446 + 110.85 11.760 11.785 11.897 0.766 1.629 -0.353 0.766 1.629 -0.576 -0.271 1.248 1.683 0.700 + 110.90 12.156 12.170 12.320 0.574 1.917 0.044 0.574 1.917 0.083 0.025 1.100 2.003 0.552 + 110.95 11.951 11.965 12.054 0.578 1.466 -0.162 0.578 1.466 -0.238 -0.094 0.847 1.255 0.442 + 111.00 12.266 12.288 12.358 0.743 1.312 0.153 0.743 1.312 0.200 0.113 0.975 1.149 0.501 + 111.05 12.253 12.283 12.343 0.864 1.210 0.140 0.864 1.210 0.170 0.121 1.045 1.115 0.533 + 111.10 12.404 12.412 12.448 0.436 0.950 0.292 0.436 0.950 0.277 0.127 0.414 0.589 0.257 + 111.15 12.061 12.062 12.082 0.135 0.695 -0.051 0.135 0.695 -0.036 -0.007 0.094 0.252 0.050 + 111.20 12.042 12.044 12.056 0.196 0.532 -0.070 0.196 0.532 -0.037 -0.014 0.104 0.163 0.056 + 111.25 12.162 12.163 12.168 0.191 0.342 0.049 0.191 0.342 0.017 0.009 0.065 0.078 0.034 + 111.30 12.561 12.564 12.565 0.255 0.213 0.448 0.255 0.213 0.095 0.114 0.054 0.156 0.079 + 111.35 12.588 12.598 12.599 0.500 0.097 0.476 0.500 0.097 0.046 0.238 0.049 0.243 0.124 + 111.40 12.503 12.505 12.507 0.203 0.223 0.390 0.203 0.223 0.087 0.079 0.045 0.122 0.063 + 111.45 12.384 12.385 12.388 -0.127 0.277 0.271 -0.127 0.277 0.075 -0.034 -0.035 0.083 0.045 + 111.50 12.158 12.159 12.171 0.158 0.543 0.045 0.158 0.543 0.024 0.007 0.086 0.161 0.045 + 111.55 12.308 12.311 12.332 0.260 0.729 0.195 0.260 0.729 0.142 0.051 0.189 0.318 0.121 + 111.60 12.234 12.243 12.271 -0.478 0.826 0.121 -0.478 0.826 0.100 -0.058 -0.394 0.462 0.206 + 111.65 12.248 12.263 12.283 -0.603 0.699 0.135 -0.603 0.699 0.094 -0.081 -0.422 0.435 0.220 + 111.70 12.030 12.072 12.073 -1.005 0.127 -0.083 -1.005 0.127 -0.010 0.083 -0.127 0.516 0.076 + 111.75 11.723 11.778 11.785 -1.139 0.398 -0.390 -1.139 0.398 -0.155 0.444 -0.453 0.804 0.326 + 111.80 12.238 12.285 12.298 -1.076 0.568 0.125 -1.076 0.568 0.071 -0.135 -0.612 0.748 0.315 + 111.85 12.054 12.166 12.174 -1.645 0.456 -0.059 -1.645 0.456 -0.027 0.096 -0.751 1.458 0.379 + 111.90 11.973 12.075 12.090 -1.569 0.589 -0.140 -1.569 0.589 -0.082 0.219 -0.925 1.415 0.477 + 111.95 12.210 12.298 12.324 -1.464 0.806 0.097 -1.464 0.806 0.079 -0.143 -1.180 1.401 0.596 + 112.00 12.044 12.120 12.150 -1.355 0.842 -0.068 -1.355 0.842 -0.058 0.093 -1.141 1.275 0.573 + 112.05 12.013 12.062 12.085 -1.086 0.733 -0.100 -1.086 0.733 -0.073 0.108 -0.797 0.864 0.404 + 112.10 12.090 12.125 12.147 -0.923 0.734 -0.023 -0.923 0.734 -0.017 0.021 -0.677 0.695 0.339 + 112.15 12.035 12.092 12.117 -1.170 0.779 -0.078 -1.170 0.779 -0.061 0.091 -0.911 0.990 0.459 + 112.20 11.957 12.030 12.093 -1.322 1.234 -0.155 -1.322 1.234 -0.192 0.206 -1.632 1.648 0.828 + 112.25 11.734 11.791 11.873 -1.150 1.398 -0.378 -1.150 1.398 -0.529 0.435 -1.609 1.711 0.874 + 112.30 11.571 11.590 11.659 -0.666 1.265 -0.542 -0.666 1.265 -0.686 0.361 -0.843 1.169 0.572 + 112.35 11.681 11.724 11.806 -1.008 1.387 -0.432 -1.008 1.387 -0.599 0.435 -1.398 1.563 0.791 + 112.40 11.881 11.934 11.999 -1.126 1.246 -0.232 -1.126 1.246 -0.289 0.261 -1.403 1.437 0.728 + 112.45 11.871 11.965 12.008 -1.497 1.021 -0.242 -1.497 1.021 -0.247 0.362 -1.528 1.670 0.795 + 112.50 12.274 12.373 12.402 -1.556 0.847 0.162 -1.556 0.847 0.137 -0.251 -1.318 1.582 0.675 + 112.55 12.584 12.652 12.667 -1.313 0.614 0.471 -1.313 0.614 0.289 -0.618 -0.806 1.161 0.528 + 112.60 12.317 12.349 12.363 -0.900 0.584 0.204 -0.900 0.584 0.119 -0.183 -0.526 0.597 0.285 + 112.65 12.423 12.437 12.461 -0.592 0.783 0.310 -0.592 0.783 0.242 -0.183 -0.464 0.530 0.277 + 112.70 12.389 12.395 12.422 -0.389 0.819 0.276 -0.389 0.819 0.226 -0.107 -0.319 0.449 0.202 + 112.75 12.159 12.163 12.184 -0.338 0.714 0.046 -0.338 0.714 0.033 -0.016 -0.241 0.313 0.122 + 112.80 12.341 12.341 12.367 0.025 0.797 0.229 0.025 0.797 0.182 0.006 0.020 0.344 0.092 + 112.85 12.521 12.522 12.535 -0.137 0.559 0.409 -0.137 0.559 0.229 -0.056 -0.076 0.249 0.124 + 112.90 12.216 12.217 12.219 -0.123 0.199 0.104 -0.123 0.199 0.021 -0.013 -0.025 0.033 0.017 + 112.95 12.169 12.170 12.179 -0.167 0.458 0.056 -0.167 0.458 0.026 -0.009 -0.076 0.120 0.041 + 113.00 12.307 12.314 12.337 -0.391 0.763 0.195 -0.391 0.763 0.149 -0.076 -0.299 0.387 0.171 + 113.05 12.400 12.413 12.424 -0.584 0.516 0.287 -0.584 0.516 0.148 -0.167 -0.301 0.345 0.188 + 113.10 12.329 12.347 12.356 -0.659 0.488 0.216 -0.659 0.488 0.105 -0.142 -0.321 0.359 0.183 + 113.15 12.371 12.384 12.397 -0.568 0.554 0.259 -0.568 0.554 0.143 -0.147 -0.315 0.348 0.188 + 113.20 12.270 12.317 12.327 -1.073 0.520 0.157 -1.073 0.520 0.082 -0.168 -0.558 0.723 0.294 + 113.25 12.272 12.332 12.336 -1.214 0.289 0.160 -1.214 0.289 0.046 -0.194 -0.351 0.792 0.202 + 113.30 12.291 12.320 12.323 -0.850 0.272 0.178 -0.850 0.272 0.049 -0.152 -0.231 0.414 0.140 + 113.35 12.632 12.653 12.655 -0.723 0.229 0.519 -0.723 0.229 0.119 -0.375 -0.166 0.423 0.214 + 113.40 12.788 12.819 12.824 -0.883 0.381 0.675 -0.883 0.381 0.258 -0.596 -0.337 0.691 0.366 + 113.45 13.118 13.146 13.149 -0.844 0.307 1.006 -0.844 0.307 0.308 -0.849 -0.259 0.909 0.470 + 113.50 12.620 12.638 12.654 -0.684 0.630 0.507 -0.684 0.630 0.319 -0.347 -0.431 0.561 0.319 + 113.55 12.374 12.400 12.434 -0.812 0.915 0.261 -0.812 0.915 0.239 -0.212 -0.743 0.782 0.404 + 113.60 12.402 12.426 12.473 -0.774 1.082 0.289 -0.774 1.082 0.313 -0.224 -0.838 0.927 0.461 + 113.65 12.535 12.559 12.600 -0.783 1.007 0.422 -0.783 1.007 0.425 -0.331 -0.789 0.903 0.477 + 113.70 12.339 12.358 12.392 -0.676 0.927 0.226 -0.676 0.927 0.210 -0.153 -0.627 0.684 0.339 + 113.75 12.201 12.213 12.235 -0.547 0.725 0.088 -0.547 0.725 0.064 -0.048 -0.397 0.417 0.202 + 113.80 12.343 12.355 12.390 -0.551 0.936 0.230 -0.551 0.936 0.215 -0.127 -0.516 0.616 0.287 + 113.85 12.426 12.438 12.472 -0.550 0.923 0.313 -0.550 0.923 0.289 -0.172 -0.507 0.626 0.304 + 113.90 12.652 12.672 12.733 -0.718 1.240 0.539 -0.718 1.240 0.669 -0.387 -0.890 1.172 0.589 + 113.95 12.665 12.679 12.767 -0.593 1.499 0.552 -0.593 1.499 0.828 -0.328 -0.889 1.452 0.629 + 114.00 12.681 12.686 12.733 -0.379 1.094 0.568 -0.379 1.094 0.621 -0.215 -0.414 0.831 0.389 + 114.05 12.376 12.388 12.451 -0.548 1.247 0.263 -0.548 1.247 0.328 -0.144 -0.683 0.962 0.386 + 114.10 12.033 12.045 12.081 -0.537 0.926 -0.080 -0.537 0.926 -0.074 0.043 -0.498 0.577 0.252 + 114.15 12.193 12.213 12.226 -0.705 0.556 0.080 -0.705 0.556 0.045 -0.057 -0.392 0.406 0.199 + 114.20 12.400 12.417 12.429 -0.655 0.524 0.287 -0.655 0.524 0.151 -0.188 -0.343 0.393 0.210 + 114.25 12.377 12.403 12.408 -0.790 0.380 0.265 -0.790 0.380 0.101 -0.209 -0.300 0.420 0.190 + 114.30 12.226 12.250 12.259 -0.773 0.470 0.113 -0.773 0.470 0.053 -0.087 -0.363 0.416 0.189 + 114.35 12.218 12.219 12.232 -0.151 0.567 0.105 -0.151 0.567 0.060 -0.016 -0.085 0.178 0.053 + 114.40 12.327 12.331 12.352 0.304 0.724 0.214 0.304 0.724 0.155 0.065 0.220 0.331 0.138 + 114.45 12.521 12.522 12.533 0.167 0.536 0.408 0.167 0.536 0.218 0.068 0.089 0.241 0.123 + 114.50 12.453 12.453 12.458 0.053 0.359 0.340 0.053 0.359 0.122 0.018 0.019 0.124 0.063 + 114.55 12.713 12.714 12.716 0.150 0.257 0.600 0.150 0.257 0.154 0.090 0.038 0.224 0.091 + 114.60 12.855 12.856 12.858 0.207 0.227 0.742 0.207 0.227 0.168 0.154 0.047 0.322 0.116 + 114.65 12.612 12.613 12.614 0.175 0.045 0.499 0.175 0.045 0.023 0.088 0.008 0.141 0.045 + 114.70 12.588 12.588 12.592 0.062 -0.309 0.475 0.062 -0.309 -0.147 0.029 -0.019 0.163 0.075 + 114.75 12.849 12.849 12.863 0.044 -0.592 0.736 0.044 -0.592 -0.436 0.033 -0.026 0.447 0.219 + 114.80 12.635 12.638 12.640 0.304 -0.207 0.522 0.304 -0.207 -0.108 0.159 -0.063 0.204 0.101 + 114.85 13.019 13.021 13.029 0.240 -0.465 0.906 0.240 -0.465 -0.422 0.218 -0.112 0.548 0.244 + 114.90 13.192 13.208 13.220 0.647 -0.573 1.079 0.647 -0.573 -0.618 0.698 -0.371 0.956 0.502 + 114.95 12.990 13.001 13.014 0.534 -0.579 0.877 0.534 -0.579 -0.508 0.468 -0.309 0.695 0.378 + 115.00 12.974 12.980 12.991 0.403 -0.535 0.861 0.403 -0.535 -0.461 0.347 -0.215 0.595 0.308 + 115.05 13.233 13.244 13.249 0.555 -0.353 1.120 0.555 -0.353 -0.396 0.622 -0.196 0.844 0.381 + 115.10 13.281 13.290 13.313 0.491 -0.774 1.168 0.491 -0.774 -0.904 0.574 -0.380 1.102 0.568 + 115.15 13.115 13.149 13.160 0.940 -0.547 1.003 0.940 -0.547 -0.549 0.942 -0.515 1.094 0.603 + 115.20 13.153 13.172 13.188 0.716 -0.645 1.040 0.716 -0.645 -0.671 0.745 -0.462 1.005 0.552 + 115.25 12.947 12.972 12.992 0.792 -0.726 0.834 0.792 -0.726 -0.606 0.661 -0.576 0.926 0.533 + 115.30 12.885 12.892 12.905 0.434 -0.571 0.772 0.434 -0.571 -0.441 0.335 -0.248 0.556 0.304 + 115.35 12.976 12.977 12.992 0.189 -0.622 0.863 0.189 -0.622 -0.536 0.163 -0.117 0.583 0.286 + 115.40 12.845 12.845 12.848 0.067 -0.288 0.732 0.067 -0.288 -0.210 0.049 -0.019 0.311 0.108 + 115.45 12.900 12.916 12.917 0.647 0.167 0.787 0.647 0.167 0.131 0.509 0.108 0.533 0.268 + 115.50 12.932 12.937 12.941 0.363 -0.305 0.819 0.363 -0.305 -0.250 0.297 -0.111 0.448 0.202 + 115.55 13.183 13.185 13.199 0.193 -0.607 1.071 0.193 -0.607 -0.650 0.206 -0.117 0.776 0.346 + 115.60 13.103 13.104 13.176 0.132 -1.372 0.991 0.132 -1.372 -1.359 0.131 -0.182 1.440 0.689 + 115.65 13.186 13.187 13.253 -0.124 -1.322 1.073 -0.124 -1.322 -1.419 -0.133 0.164 1.458 0.717 + 115.70 13.032 13.033 13.067 -0.151 -0.944 0.919 -0.151 -0.944 -0.868 -0.139 0.142 0.879 0.445 + 115.75 13.292 13.292 13.306 0.054 -0.619 1.179 0.054 -0.619 -0.730 0.064 -0.033 0.888 0.367 + 115.80 13.598 13.600 13.614 0.222 -0.629 1.485 0.222 -0.629 -0.935 0.329 -0.140 1.325 0.500 + 115.85 13.708 13.712 13.745 0.311 -0.954 1.596 0.311 -0.954 -1.522 0.496 -0.297 1.776 0.814 + 115.90 13.712 13.715 13.777 0.266 -1.304 1.599 0.266 -1.304 -2.086 0.426 -0.347 2.165 1.079 + 115.95 13.794 13.795 13.863 0.079 -1.376 1.682 0.079 -1.376 -2.314 0.132 -0.108 2.364 1.160 + 116.00 13.987 13.988 14.053 -0.153 -1.352 1.874 -0.153 -1.352 -2.533 -0.286 0.206 2.681 1.279 + 116.05 14.061 14.061 14.115 -0.029 -1.232 1.948 -0.029 -1.232 -2.401 -0.057 0.036 2.658 1.201 + 116.10 13.827 13.827 13.886 -0.089 -1.274 1.714 -0.089 -1.274 -2.183 -0.153 0.114 2.284 1.096 + 116.15 13.921 13.921 13.966 0.076 -1.118 1.808 0.076 -1.118 -2.021 0.138 -0.085 2.262 1.014 + 116.20 14.209 14.210 14.280 -0.181 -1.408 2.096 -0.181 -1.408 -2.951 -0.380 0.255 3.205 1.493 + 116.25 14.055 14.063 14.176 -0.491 -1.786 1.942 -0.491 -1.786 -3.468 -0.954 0.877 3.601 1.851 + 116.30 13.977 13.985 14.129 -0.468 -2.012 1.864 -0.468 -2.012 -3.750 -0.873 0.942 3.871 1.982 + 116.35 14.024 14.036 14.175 -0.579 -1.981 1.911 -0.579 -1.981 -3.786 -1.107 1.147 3.956 2.054 + 116.40 14.349 14.370 14.525 -0.783 -2.114 2.236 -0.783 -2.114 -4.727 -1.752 1.656 5.041 2.653 + 116.45 14.170 14.193 14.375 -0.816 -2.276 2.057 -0.816 -2.276 -4.683 -1.678 1.856 5.039 2.655 + 116.50 14.188 14.196 14.389 -0.493 -2.344 2.075 -0.493 -2.344 -4.863 -1.024 1.156 5.021 2.551 + 116.55 14.080 14.081 14.301 -0.200 -2.497 1.967 -0.200 -2.497 -4.911 -0.394 0.500 5.072 2.476 + 116.60 14.025 14.030 14.274 -0.381 -2.626 1.912 -0.381 -2.626 -5.023 -0.730 1.002 5.350 2.587 + 116.65 14.037 14.039 14.256 -0.265 -2.475 1.924 -0.265 -2.475 -4.761 -0.509 0.655 4.948 2.416 + 116.70 14.188 14.194 14.287 0.393 -1.629 2.076 0.393 -1.629 -3.381 0.817 -0.641 3.558 1.768 + 116.75 13.792 13.807 13.879 0.638 -1.409 1.679 0.638 -1.409 -2.366 1.072 -0.899 2.606 1.374 + 116.80 14.114 14.123 14.180 0.488 -1.274 2.001 0.488 -1.274 -2.550 0.976 -0.622 2.933 1.400 + 116.85 14.234 14.236 14.294 0.244 -1.283 2.121 0.244 -1.283 -2.720 0.517 -0.313 3.102 1.393 + 116.90 14.241 14.245 14.298 0.333 -1.232 2.129 0.333 -1.232 -2.623 0.710 -0.411 3.080 1.374 + 116.95 14.150 14.150 14.244 0.122 -1.635 2.037 0.122 -1.635 -3.331 0.249 -0.200 3.419 1.673 + 117.00 13.868 13.872 13.999 -0.311 -1.886 1.755 -0.311 -1.886 -3.311 -0.545 0.586 3.368 1.703 + 117.05 13.644 13.645 13.756 -0.203 -1.741 1.531 -0.203 -1.741 -2.666 -0.310 0.353 2.708 1.353 + 117.10 13.708 13.719 13.825 -0.557 -1.708 1.595 -0.557 -1.708 -2.725 -0.889 0.952 2.887 1.510 + 117.15 13.835 13.857 13.970 -0.788 -1.774 1.722 -0.788 -1.774 -3.055 -1.356 1.398 3.367 1.812 + 117.20 13.756 13.763 13.934 -0.427 -2.176 1.643 -0.427 -2.176 -3.576 -0.702 0.929 3.809 1.880 + 117.25 13.752 13.752 13.933 0.067 -2.237 1.639 0.067 -2.237 -3.667 0.110 -0.150 3.848 1.836 + 117.30 13.720 13.723 13.870 0.286 -2.012 1.607 0.286 -2.012 -3.234 0.460 -0.576 3.356 1.658 + 117.35 13.538 13.542 13.664 0.335 -1.818 1.425 0.335 -1.818 -2.591 0.478 -0.609 2.724 1.352 + 117.40 13.812 13.815 13.919 -0.321 -1.699 1.699 -0.321 -1.699 -2.886 -0.546 0.546 2.937 1.493 + 117.45 14.297 14.323 14.447 -0.860 -1.888 2.184 -0.860 -1.888 -4.124 -1.878 1.624 4.538 2.407 + 117.50 14.322 14.362 14.459 -1.064 -1.676 2.209 -1.064 -1.676 -3.703 -2.350 1.783 4.411 2.367 + 117.55 14.385 14.439 14.501 -1.248 -1.340 2.272 -1.248 -1.340 -3.044 -2.835 1.672 4.257 2.242 + 117.60 14.451 14.505 14.573 -1.254 -1.403 2.338 -1.254 -1.403 -3.281 -2.931 1.759 4.504 2.369 + 117.65 14.240 14.324 14.408 -1.546 -1.558 2.127 -1.546 -1.558 -3.313 -3.289 2.409 4.671 2.627 + 117.70 14.071 14.112 14.171 -1.077 -1.286 1.958 -1.077 -1.286 -2.518 -2.109 1.385 3.324 1.782 + 117.75 14.239 14.291 14.338 -1.216 -1.168 2.126 -1.216 -1.168 -2.482 -2.585 1.420 3.681 1.927 + 117.80 14.385 14.442 14.502 -1.284 -1.316 2.272 -1.284 -1.316 -2.990 -2.918 1.690 4.271 2.253 + 117.85 14.168 14.222 14.278 -1.243 -1.268 2.055 -1.243 -1.268 -2.605 -2.554 1.576 3.687 1.987 + 117.90 13.891 13.908 13.948 -0.683 -1.049 1.779 -0.683 -1.049 -1.865 -1.215 0.716 2.365 1.169 + 117.95 14.216 14.243 14.302 -0.867 -1.306 2.104 -0.867 -1.306 -2.746 -1.824 1.132 3.441 1.743 + 118.00 13.842 13.856 13.899 -0.619 -1.096 1.729 -0.619 -1.096 -1.896 -1.070 0.678 2.287 1.140 + 118.05 13.831 13.833 13.869 -0.180 -1.009 1.719 -0.180 -1.009 -1.734 -0.309 0.181 2.002 0.885 + 118.10 13.648 13.648 13.686 -0.148 -1.014 1.535 -0.148 -1.014 -1.557 -0.227 0.150 1.703 0.790 + 118.15 13.527 13.527 13.539 0.008 -0.572 1.414 0.008 -0.572 -0.808 0.011 -0.005 1.163 0.404 + 118.20 13.411 13.413 13.417 -0.229 -0.347 1.298 -0.229 -0.347 -0.450 -0.297 0.079 0.929 0.272 + 118.25 13.617 13.617 13.621 -0.021 -0.355 1.504 -0.021 -0.355 -0.534 -0.032 0.008 1.194 0.268 + 118.30 13.600 13.600 13.605 -0.122 -0.371 1.487 -0.122 -0.371 -0.551 -0.181 0.045 1.182 0.291 + 118.35 13.950 13.959 13.984 -0.486 -0.847 1.837 -0.486 -0.847 -1.557 -0.894 0.412 2.165 0.921 + 118.40 14.413 14.415 14.447 -0.265 -0.961 2.300 -0.265 -0.961 -2.211 -0.609 0.255 3.142 1.154 + 118.45 14.701 14.702 14.733 -0.160 -0.946 2.589 -0.160 -0.946 -2.449 -0.414 0.151 3.811 1.244 + 118.50 14.537 14.538 14.562 -0.121 -0.845 2.425 -0.121 -0.845 -2.049 -0.294 0.103 3.304 1.036 + 118.55 14.524 14.524 14.555 -0.047 -0.946 2.411 -0.047 -0.946 -2.282 -0.113 0.044 3.355 1.143 + 118.60 14.532 14.543 14.574 -0.551 -0.960 2.420 -0.551 -0.960 -2.322 -1.333 0.529 3.539 1.365 + 118.65 14.847 14.853 14.879 -0.412 -0.878 2.734 -0.412 -0.878 -2.402 -1.125 0.362 4.209 1.338 + 118.70 14.718 14.726 14.762 -0.479 -1.033 2.605 -0.479 -1.033 -2.693 -1.248 0.495 4.043 1.504 + 118.75 14.727 14.728 14.753 -0.158 -0.851 2.614 -0.158 -0.851 -2.224 -0.412 0.134 3.792 1.133 + 118.80 14.528 14.533 14.558 -0.382 -0.844 2.416 -0.382 -0.844 -2.039 -0.924 0.323 3.347 1.131 + 118.85 14.444 14.449 14.465 -0.350 -0.693 2.331 -0.350 -0.693 -1.616 -0.816 0.243 3.019 0.913 + 118.90 14.513 14.514 14.529 -0.193 -0.668 2.400 -0.193 -0.668 -1.602 -0.462 0.129 3.121 0.836 + 118.95 14.577 14.577 14.624 0.035 -1.169 2.464 0.035 -1.169 -2.880 0.085 -0.040 3.720 1.441 + 119.00 14.475 14.475 14.530 -0.012 -1.260 2.363 -0.012 -1.260 -2.976 -0.029 0.016 3.584 1.488 + 119.05 14.137 14.139 14.187 -0.239 -1.169 2.024 -0.239 -1.169 -2.366 -0.483 0.279 2.760 1.216 + 119.10 14.315 14.320 14.407 -0.390 -1.579 2.202 -0.390 -1.579 -3.478 -0.858 0.616 3.748 1.817 + 119.15 14.278 14.278 14.366 0.045 -1.584 2.165 0.045 -1.584 -3.430 0.097 -0.071 3.600 1.716 + 119.20 14.138 14.139 14.202 -0.117 -1.343 2.025 -0.117 -1.343 -2.720 -0.237 0.157 2.960 1.368 + 119.25 14.091 14.102 14.149 -0.568 -1.151 1.978 -0.568 -1.151 -2.277 -1.124 0.654 2.780 1.311 + 119.30 14.181 14.184 14.254 -0.291 -1.417 2.068 -0.291 -1.417 -2.931 -0.601 0.412 3.185 1.510 + 119.35 14.068 14.069 14.171 -0.125 -1.698 1.956 -0.125 -1.698 -3.320 -0.245 0.213 3.361 1.668 + 119.40 14.209 14.209 14.309 0.110 -1.689 2.096 0.110 -1.689 -3.541 0.231 -0.186 3.630 1.777 + 119.45 14.146 14.146 14.209 -0.081 -1.338 2.033 -0.081 -1.338 -2.720 -0.164 0.108 2.965 1.364 + 119.50 14.084 14.089 14.132 -0.366 -1.104 1.971 -0.366 -1.104 -2.176 -0.722 0.404 2.619 1.164 + 119.55 13.962 13.972 14.009 -0.524 -1.012 1.850 -0.524 -1.012 -1.872 -0.970 0.531 2.360 1.087 + 119.60 13.947 13.947 14.010 -0.083 -1.330 1.834 -0.083 -1.330 -2.440 -0.151 0.110 2.570 1.223 + 119.65 13.962 13.964 14.034 0.242 -1.399 1.850 0.242 -1.399 -2.588 0.448 -0.339 2.719 1.324 + 119.70 13.629 13.629 13.694 -0.025 -1.335 1.516 -0.025 -1.335 -2.024 -0.038 0.033 2.040 1.012 + 119.75 13.433 13.433 13.501 -0.065 -1.354 1.320 -0.065 -1.354 -1.788 -0.086 0.089 1.791 0.896 + 119.80 13.203 13.203 13.259 0.037 -1.212 1.090 0.037 -1.212 -1.321 0.041 -0.045 1.329 0.661 + 119.85 13.228 13.229 13.259 -0.162 -0.893 1.115 -0.162 -0.893 -0.995 -0.181 0.145 1.033 0.511 + 119.90 13.263 13.269 13.299 -0.380 -0.905 1.150 -0.380 -0.905 -1.041 -0.437 0.344 1.143 0.590 + 119.95 13.310 13.312 13.361 -0.220 -1.138 1.198 -0.220 -1.138 -1.362 -0.264 0.250 1.388 0.705 + 120.00 13.287 13.289 13.363 0.215 -1.409 1.174 0.215 -1.409 -1.654 0.253 -0.303 1.705 0.850 + 120.05 13.019 13.026 13.086 0.425 -1.250 0.907 0.425 -1.250 -1.133 0.386 -0.532 1.283 0.655 + 120.10 12.981 13.002 13.048 0.736 -1.092 0.868 0.736 -1.092 -0.948 0.639 -0.803 1.244 0.699 + 120.15 13.020 13.031 13.060 0.538 -0.862 0.907 0.538 -0.862 -0.782 0.489 -0.464 0.928 0.516 + 120.20 13.071 13.087 13.101 0.639 -0.601 0.959 0.639 -0.601 -0.576 0.613 -0.384 0.845 0.463 + 120.25 13.033 13.049 13.061 0.653 -0.543 0.920 0.653 -0.543 -0.499 0.601 -0.354 0.784 0.429 + 120.30 13.050 13.050 13.074 0.108 -0.786 0.937 0.108 -0.786 -0.736 0.101 -0.085 0.754 0.374 + 120.35 13.072 13.074 13.090 0.229 -0.659 0.959 0.229 -0.659 -0.632 0.220 -0.151 0.703 0.343 + 120.40 13.029 13.029 13.041 -0.029 -0.551 0.916 -0.029 -0.551 -0.505 -0.027 0.016 0.572 0.253 + 120.45 13.036 13.036 13.053 -0.150 -0.657 0.923 -0.150 -0.657 -0.606 -0.138 0.098 0.653 0.315 + 120.50 13.235 13.248 13.262 0.594 -0.610 1.122 0.594 -0.610 -0.684 0.666 -0.362 0.992 0.511 + 120.55 13.287 13.320 13.336 0.933 -0.640 1.175 0.933 -0.640 -0.752 1.096 -0.598 1.331 0.729 + 120.60 13.436 13.455 13.468 0.718 -0.582 1.323 0.718 -0.582 -0.770 0.950 -0.418 1.302 0.646 + 120.65 13.326 13.334 13.348 0.446 -0.625 1.214 0.446 -0.625 -0.758 0.542 -0.279 1.031 0.486 + 120.70 13.151 13.161 13.194 0.498 -0.932 1.039 0.498 -0.932 -0.968 0.518 -0.465 1.098 0.596 + 120.75 13.225 13.232 13.273 0.419 -1.042 1.112 0.419 -1.042 -1.159 0.466 -0.437 1.250 0.662 + 120.80 13.161 13.165 13.192 0.318 -0.835 1.048 0.318 -0.835 -0.876 0.333 -0.266 0.949 0.487 + 120.85 13.114 13.132 13.156 0.692 -0.795 1.001 0.692 -0.795 -0.796 0.693 -0.550 1.057 0.595 + 120.90 13.159 13.201 13.217 1.047 -0.660 1.046 1.047 -0.660 -0.691 1.096 -0.691 1.314 0.734 + 120.95 13.216 13.246 13.274 0.895 -0.855 1.103 0.895 -0.855 -0.943 0.987 -0.765 1.374 0.782 + 121.00 13.426 13.437 13.475 0.533 -1.014 1.314 0.533 -1.014 -1.331 0.700 -0.540 1.518 0.799 + 121.05 13.916 13.921 13.968 0.387 -1.144 1.803 0.387 -1.144 -2.064 0.697 -0.442 2.355 1.111 + 121.10 13.966 13.974 14.045 0.460 -1.411 1.854 0.460 -1.411 -2.615 0.853 -0.649 2.819 1.413 + 121.15 13.638 13.650 13.714 0.561 -1.332 1.525 0.561 -1.332 -2.032 0.856 -0.748 2.208 1.164 + 121.20 13.436 13.452 13.516 0.644 -1.318 1.323 0.644 -1.318 -1.744 0.853 -0.849 1.951 1.059 + 121.25 13.451 13.470 13.528 0.725 -1.248 1.338 0.725 -1.248 -1.669 0.970 -0.905 1.936 1.066 + 121.30 13.745 13.751 13.827 0.402 -1.454 1.632 0.402 -1.454 -2.372 0.656 -0.584 2.469 1.265 + 121.35 13.626 13.632 13.720 0.419 -1.545 1.513 0.419 -1.545 -2.338 0.634 -0.647 2.426 1.253 + 121.40 13.767 13.775 13.852 0.486 -1.459 1.654 0.486 -1.459 -2.413 0.804 -0.709 2.550 1.320 + 121.45 13.747 13.769 13.853 0.782 -1.518 1.634 0.782 -1.518 -2.480 1.278 -1.187 2.793 1.516 + 121.50 13.702 13.733 13.806 0.924 -1.416 1.589 0.924 -1.416 -2.251 1.468 -1.308 2.692 1.494 + 121.55 13.430 13.452 13.513 0.769 -1.288 1.317 0.769 -1.288 -1.696 1.013 -0.990 1.992 1.105 + 121.60 13.159 13.190 13.245 0.910 -1.200 1.046 0.910 -1.200 -1.255 0.952 -1.092 1.681 0.958 + 121.65 13.053 13.071 13.122 0.679 -1.155 0.940 0.679 -1.155 -1.086 0.638 -0.784 1.340 0.742 + 121.70 13.065 13.083 13.113 0.690 -0.882 0.952 0.690 -0.882 -0.840 0.657 -0.609 1.081 0.614 + 121.75 13.313 13.336 13.393 0.776 -1.237 1.200 0.776 -1.237 -1.484 0.932 -0.960 1.786 0.999 + 121.80 13.416 13.424 13.466 0.471 -1.062 1.303 0.471 -1.062 -1.384 0.614 -0.501 1.524 0.797 + 121.85 13.620 13.624 13.668 0.358 -1.088 1.507 0.358 -1.088 -1.640 0.540 -0.390 1.792 0.885 + 121.90 13.805 13.810 13.838 0.381 -0.870 1.692 0.381 -0.870 -1.473 0.645 -0.332 1.884 0.821 + 121.95 13.803 13.803 13.826 -0.145 -0.789 1.690 -0.145 -0.789 -1.333 -0.245 0.114 1.750 0.680 + 122.00 13.792 13.795 13.848 0.291 -1.205 1.679 0.291 -1.205 -2.023 0.489 -0.351 2.178 1.055 + 122.05 13.404 13.408 13.453 0.311 -1.104 1.291 0.311 -1.104 -1.425 0.402 -0.344 1.491 0.760 + 122.10 13.158 13.167 13.190 0.495 -0.773 1.045 0.495 -0.773 -0.808 0.517 -0.383 0.967 0.516 + 122.15 12.880 12.896 12.899 0.626 -0.302 0.768 0.626 -0.302 -0.232 0.480 -0.189 0.536 0.283 + 122.20 12.773 12.802 12.804 0.861 -0.253 0.660 0.861 -0.253 -0.167 0.568 -0.218 0.620 0.315 + 122.25 12.456 12.464 12.467 0.431 -0.272 0.343 0.431 -0.272 -0.093 0.148 -0.117 0.189 0.105 + 122.30 12.590 12.616 12.621 0.808 -0.336 0.477 0.808 -0.336 -0.161 0.386 -0.272 0.497 0.249 + 122.35 12.560 12.592 12.599 0.903 -0.397 0.447 0.903 -0.397 -0.177 0.404 -0.358 0.586 0.284 + 122.40 12.523 12.554 12.560 0.881 -0.408 0.410 0.881 -0.408 -0.167 0.361 -0.360 0.556 0.268 + 122.45 12.513 12.525 12.526 0.555 0.135 0.400 0.555 0.135 0.054 0.222 0.075 0.243 0.120 + 122.50 12.522 12.534 12.535 0.536 -0.202 0.409 0.536 -0.202 -0.083 0.219 -0.108 0.248 0.129 + 122.55 12.683 12.705 12.710 0.752 -0.346 0.570 0.752 -0.346 -0.197 0.429 -0.260 0.505 0.269 + 122.60 12.618 12.652 12.656 0.931 -0.323 0.505 0.931 -0.323 -0.163 0.470 -0.301 0.613 0.291 + 122.65 12.845 12.912 12.914 1.315 -0.209 0.732 1.315 -0.209 -0.153 0.963 -0.274 1.155 0.506 + 122.70 13.245 13.323 13.325 1.440 -0.197 1.132 1.440 -0.197 -0.223 1.630 -0.284 1.697 0.835 + 122.75 13.210 13.250 13.251 1.035 -0.142 1.097 1.035 -0.142 -0.155 1.136 -0.146 1.147 0.578 + 122.80 13.121 13.137 13.140 0.636 -0.319 1.008 0.636 -0.319 -0.321 0.641 -0.203 0.762 0.373 + 122.85 13.051 13.063 13.074 0.564 -0.520 0.938 0.564 -0.520 -0.488 0.530 -0.294 0.735 0.389 + 122.90 12.984 13.015 13.016 0.898 -0.223 0.871 0.898 -0.223 -0.194 0.782 -0.201 0.807 0.415 + 122.95 12.915 12.926 12.938 0.538 -0.549 0.802 0.538 -0.549 -0.440 0.431 -0.295 0.617 0.342 + 123.00 12.895 12.944 12.969 1.127 -0.807 0.782 1.127 -0.807 -0.631 0.881 -0.910 1.267 0.708 + 123.05 12.894 12.953 12.976 1.232 -0.766 0.781 1.232 -0.766 -0.598 0.962 -0.943 1.357 0.737 + 123.10 13.236 13.328 13.348 1.566 -0.730 1.123 1.566 -0.730 -0.820 1.759 -1.144 2.123 1.126 + 123.15 13.245 13.367 13.397 1.804 -0.890 1.132 1.804 -0.890 -1.008 2.042 -1.606 2.664 1.393 + 123.20 13.511 13.620 13.645 1.718 -0.836 1.398 1.718 -0.836 -1.169 2.402 -1.437 2.803 1.517 + 123.25 13.515 13.587 13.608 1.388 -0.764 1.403 1.388 -0.764 -1.072 1.947 -1.061 2.239 1.231 + 123.30 13.366 13.441 13.464 1.411 -0.792 1.254 1.411 -0.792 -0.993 1.769 -1.118 2.095 1.158 + 123.35 13.603 13.677 13.733 1.419 -1.241 1.491 1.419 -1.241 -1.851 2.115 -1.761 2.888 1.658 + 123.40 13.367 13.452 13.499 1.505 -1.130 1.254 1.505 -1.130 -1.417 1.887 -1.700 2.557 1.454 + 123.45 13.310 13.370 13.410 1.269 -1.030 1.197 1.269 -1.030 -1.233 1.519 -1.307 2.052 1.177 + 123.50 13.302 13.334 13.395 0.932 -1.276 1.189 0.932 -1.276 -1.517 1.108 -1.189 1.955 1.111 + 123.55 13.239 13.255 13.336 0.662 -1.471 1.126 0.662 -1.471 -1.656 0.746 -0.974 1.935 1.030 + 123.60 13.159 13.185 13.247 0.830 -1.278 1.046 0.830 -1.278 -1.336 0.868 -1.061 1.708 0.957 + 123.65 13.059 13.073 13.154 0.593 -1.459 0.946 0.593 -1.459 -1.381 0.561 -0.865 1.688 0.862 + 123.70 13.101 13.114 13.191 0.581 -1.423 0.988 0.581 -1.423 -1.406 0.574 -0.828 1.670 0.865 + 123.75 13.234 13.248 13.329 0.618 -1.462 1.121 0.618 -1.462 -1.640 0.693 -0.903 1.889 0.998 + 123.80 13.230 13.235 13.303 0.370 -1.347 1.117 0.370 -1.347 -1.504 0.414 -0.499 1.600 0.819 + 123.85 13.101 13.110 13.157 0.469 -1.120 0.988 0.469 -1.120 -1.107 0.463 -0.525 1.226 0.655 + 123.90 12.949 12.955 13.005 0.413 -1.135 0.836 0.413 -1.135 -0.948 0.345 -0.469 1.078 0.556 + 123.95 12.746 12.766 12.789 0.722 -0.759 0.633 0.722 -0.759 -0.481 0.457 -0.548 0.749 0.430 + 124.00 12.747 12.758 12.775 0.537 -0.654 0.634 0.537 -0.654 -0.415 0.341 -0.352 0.559 0.321 + 124.05 12.967 12.972 12.988 0.358 -0.654 0.854 0.358 -0.654 -0.558 0.306 -0.234 0.642 0.339 + 124.10 12.733 12.736 12.753 0.310 -0.658 0.620 0.310 -0.658 -0.408 0.192 -0.204 0.457 0.248 + 124.15 13.002 13.016 13.027 0.596 -0.539 0.889 0.596 -0.539 -0.479 0.530 -0.321 0.718 0.392 + 124.20 12.991 13.037 13.067 1.089 -0.893 0.878 1.089 -0.893 -0.784 0.956 -0.973 1.377 0.787 + 124.25 12.990 13.014 13.063 0.791 -1.130 0.877 0.791 -1.130 -0.992 0.694 -0.894 1.337 0.753 + 124.30 12.989 13.009 13.040 0.731 -0.893 0.876 0.731 -0.893 -0.782 0.641 -0.653 1.049 0.602 + 124.35 12.992 13.013 13.039 0.740 -0.817 0.879 0.740 -0.817 -0.718 0.650 -0.604 0.994 0.571 + 124.40 12.866 12.878 12.897 0.565 -0.690 0.753 0.565 -0.690 -0.520 0.426 -0.390 0.682 0.388 + 124.45 12.955 12.967 12.990 0.549 -0.780 0.842 0.549 -0.780 -0.657 0.462 -0.428 0.810 0.455 + 124.50 12.769 12.793 12.809 0.774 -0.645 0.656 0.774 -0.645 -0.423 0.508 -0.499 0.723 0.414 + 124.55 13.071 13.085 13.092 0.593 -0.435 0.959 0.593 -0.435 -0.417 0.569 -0.258 0.730 0.375 + 124.60 13.273 13.287 13.296 0.606 -0.510 1.160 0.606 -0.510 -0.591 0.703 -0.309 0.987 0.485 + 124.65 13.528 13.538 13.555 0.511 -0.682 1.415 0.511 -0.682 -0.966 0.723 -0.349 1.365 0.628 + 124.70 13.671 13.672 13.685 0.201 -0.587 1.558 0.201 -0.587 -0.915 0.313 -0.118 1.406 0.487 + 124.75 13.687 13.688 13.693 0.167 -0.368 1.574 0.167 -0.368 -0.578 0.262 -0.061 1.320 0.319 + 124.80 13.811 13.815 13.822 0.340 -0.451 1.698 0.340 -0.451 -0.766 0.577 -0.153 1.601 0.486 + 124.85 13.647 13.648 13.649 0.182 -0.107 1.534 0.182 -0.107 -0.164 0.279 -0.019 1.199 0.162 + 124.90 13.934 13.934 13.937 -0.107 -0.290 1.821 -0.107 -0.290 -0.527 -0.195 0.031 1.706 0.281 + 124.95 14.188 14.191 14.198 -0.287 -0.462 2.075 -0.287 -0.462 -0.959 -0.597 0.133 2.301 0.569 + 125.00 14.319 14.320 14.329 -0.190 -0.488 2.206 -0.190 -0.488 -1.077 -0.420 0.093 2.571 0.580 + 125.05 14.382 14.383 14.383 -0.166 0.075 2.269 -0.166 0.075 0.171 -0.376 -0.012 2.591 0.206 + 125.10 14.225 14.227 14.228 -0.267 0.160 2.112 -0.267 0.160 0.337 -0.564 -0.043 2.279 0.329 + 125.15 14.186 14.187 14.192 -0.170 0.376 2.073 -0.170 0.376 0.779 -0.352 -0.064 2.233 0.429 + 125.20 13.881 13.881 13.885 0.046 0.314 1.768 0.046 0.314 0.556 0.082 0.015 1.614 0.281 + 125.25 13.862 13.863 13.871 -0.192 0.483 1.749 -0.192 0.483 0.845 -0.336 -0.093 1.664 0.457 + 125.30 13.995 13.997 13.997 -0.201 0.139 1.882 -0.201 0.139 0.261 -0.378 -0.028 1.801 0.230 + 125.35 13.945 13.947 13.947 -0.195 0.099 1.833 -0.195 0.099 0.181 -0.357 -0.019 1.703 0.201 + 125.40 14.179 14.180 14.181 -0.153 0.218 2.066 -0.153 0.218 0.451 -0.316 -0.033 2.170 0.276 + 125.45 14.200 14.201 14.202 -0.146 0.156 2.087 -0.146 0.156 0.325 -0.304 -0.023 2.202 0.223 + 125.50 14.111 14.112 14.112 -0.170 0.047 1.999 -0.170 0.047 0.094 -0.339 -0.008 2.013 0.176 + 125.55 14.289 14.290 14.294 0.147 0.339 2.176 0.147 0.339 0.737 0.321 0.050 2.436 0.403 + 125.60 14.351 14.358 14.359 0.472 0.144 2.238 0.472 0.144 0.323 1.056 0.068 2.626 0.553 + 125.65 14.034 14.037 14.037 0.262 0.079 1.921 0.262 0.079 0.151 0.504 0.021 1.883 0.263 + 125.70 14.050 14.050 14.051 -0.024 -0.215 1.937 -0.024 -0.215 -0.416 -0.046 0.005 1.899 0.209 + 125.75 14.101 14.102 14.105 0.174 -0.281 1.989 0.174 -0.281 -0.559 0.346 -0.049 2.032 0.329 + 125.80 13.879 13.882 13.888 0.300 -0.412 1.766 0.300 -0.412 -0.727 0.530 -0.124 1.689 0.454 + 125.85 13.672 13.676 13.676 0.293 0.018 1.560 0.293 0.018 0.028 0.457 0.005 1.259 0.229 + 125.90 13.727 13.728 13.729 0.176 0.145 1.614 0.176 0.145 0.234 0.284 0.026 1.329 0.185 + 125.95 13.743 13.744 13.745 0.121 0.191 1.631 0.121 0.191 0.312 0.197 0.023 1.355 0.185 + 126.00 13.675 13.678 13.682 0.286 0.367 1.562 0.286 0.367 0.573 0.447 0.105 1.328 0.367 + 126.05 13.475 13.475 13.475 0.080 0.067 1.362 0.080 0.067 0.092 0.109 0.005 0.933 0.071 + 126.10 13.241 13.241 13.241 -0.036 0.018 1.128 -0.036 0.018 0.020 -0.041 -0.001 0.637 0.023 + 126.15 13.087 13.099 13.100 0.565 0.065 0.974 0.565 0.065 0.063 0.550 0.037 0.636 0.278 + 126.20 12.942 12.961 12.961 0.698 0.019 0.829 0.698 0.019 0.016 0.579 0.013 0.587 0.290 + 126.25 12.715 12.728 12.728 0.570 0.070 0.602 0.570 0.070 0.042 0.343 0.040 0.346 0.174 + 126.30 12.960 12.971 12.971 0.539 -0.122 0.847 0.539 -0.122 -0.103 0.456 -0.066 0.511 0.236 + 126.35 13.027 13.027 13.031 -0.020 -0.292 0.915 -0.020 -0.292 -0.267 -0.019 0.006 0.461 0.134 + 126.40 13.055 13.058 13.070 0.285 -0.564 0.942 0.285 -0.564 -0.531 0.268 -0.160 0.643 0.308 + 126.45 13.027 13.028 13.042 0.176 -0.600 0.914 0.176 -0.600 -0.549 0.161 -0.106 0.614 0.291 + 126.50 12.902 12.910 12.925 0.440 -0.618 0.790 0.440 -0.618 -0.488 0.347 -0.272 0.599 0.329 + 126.55 13.065 13.065 13.074 0.062 -0.485 0.952 0.062 -0.485 -0.461 0.059 -0.030 0.572 0.233 + 126.60 13.359 13.359 13.385 -0.016 -0.845 1.246 -0.016 -0.845 -1.053 -0.020 0.013 1.134 0.527 + 126.65 13.456 13.456 13.480 0.026 -0.809 1.343 0.026 -0.809 -1.087 0.035 -0.021 1.230 0.544 + 126.70 13.235 13.236 13.253 0.173 -0.653 1.123 0.173 -0.653 -0.733 0.194 -0.113 0.858 0.383 + 126.75 13.151 13.154 13.185 0.291 -0.905 1.038 0.291 -0.905 -0.940 0.302 -0.264 0.991 0.511 + 126.80 13.189 13.193 13.228 0.319 -0.968 1.076 0.319 -0.968 -1.041 0.343 -0.309 1.098 0.570 + 126.85 13.209 13.225 13.258 0.659 -0.932 1.096 0.659 -0.932 -1.022 0.722 -0.614 1.252 0.697 + 126.90 13.350 13.365 13.400 0.628 -0.965 1.237 0.628 -0.965 -1.194 0.777 -0.606 1.429 0.774 + 126.95 13.259 13.260 13.273 0.175 -0.596 1.146 0.175 -0.596 -0.683 0.201 -0.104 0.849 0.360 + 127.00 13.190 13.196 13.223 0.404 -0.850 1.077 0.404 -0.850 -0.916 0.435 -0.343 1.023 0.535 + 127.05 13.477 13.484 13.509 0.434 -0.820 1.364 0.434 -0.820 -1.119 0.593 -0.356 1.361 0.658 + 127.10 13.619 13.620 13.652 0.136 -0.936 1.506 0.136 -0.936 -1.410 0.204 -0.127 1.581 0.715 + 127.15 13.456 13.458 13.513 0.230 -1.221 1.343 0.230 -1.221 -1.639 0.309 -0.281 1.673 0.846 + 127.20 13.049 13.055 13.080 0.406 -0.809 0.936 0.406 -0.809 -0.757 0.380 -0.328 0.847 0.454 + 127.25 12.898 12.920 12.949 0.753 -0.866 0.785 0.753 -0.866 -0.680 0.591 -0.652 0.966 0.556 + 127.30 13.211 13.237 13.268 0.826 -0.904 1.098 0.826 -0.904 -0.993 0.907 -0.747 1.353 0.770 + 127.35 13.133 13.172 13.182 1.016 -0.497 1.020 1.016 -0.497 -0.507 1.037 -0.505 1.160 0.630 + 127.40 13.203 13.242 13.256 1.020 -0.612 1.090 1.020 -0.612 -0.667 1.112 -0.624 1.302 0.720 + 127.45 13.283 13.341 13.348 1.252 -0.402 1.170 1.252 -0.402 -0.470 1.464 -0.503 1.549 0.809 + 127.50 13.265 13.327 13.328 1.283 -0.212 1.152 1.283 -0.212 -0.244 1.477 -0.272 1.508 0.761 + 127.55 13.399 13.468 13.473 1.363 -0.355 1.286 1.363 -0.355 -0.457 1.752 -0.484 1.818 0.937 + 127.60 13.556 13.648 13.655 1.583 -0.420 1.443 1.583 -0.420 -0.607 2.284 -0.665 2.382 1.228 + 127.65 13.376 13.463 13.464 1.536 -0.154 1.263 1.536 -0.154 -0.195 1.940 -0.237 1.989 0.982 + 127.70 13.355 13.437 13.442 1.480 -0.362 1.243 1.480 -0.362 -0.449 1.839 -0.535 1.933 0.984 + 127.75 13.351 13.416 13.422 1.318 -0.394 1.238 1.318 -0.394 -0.488 1.632 -0.519 1.713 0.890 + 127.80 13.519 13.569 13.575 1.161 -0.416 1.406 1.161 -0.416 -0.585 1.633 -0.483 1.750 0.900 + 127.85 13.659 13.696 13.699 1.014 -0.294 1.546 1.014 -0.294 -0.455 1.567 -0.298 1.752 0.829 + 127.90 13.617 13.667 13.667 1.171 -0.105 1.504 1.171 -0.105 -0.158 1.761 -0.123 1.822 0.886 + 127.95 13.753 13.805 13.809 1.199 0.328 1.640 1.199 0.328 0.537 1.967 0.393 2.117 1.038 + 128.00 13.812 13.838 13.839 0.848 0.106 1.700 0.848 0.106 0.180 1.441 0.090 1.809 0.727 + 128.05 14.043 14.058 14.059 0.662 0.073 1.930 0.662 0.073 0.141 1.277 0.048 2.084 0.643 + 128.10 14.028 14.036 14.038 0.463 0.258 1.915 0.463 0.258 0.494 0.887 0.119 1.974 0.511 + 128.15 13.911 13.912 13.919 0.188 0.434 1.798 0.188 0.434 0.780 0.338 0.082 1.728 0.427 + 128.20 13.589 13.594 13.599 0.341 0.368 1.477 0.341 0.368 0.543 0.503 0.125 1.216 0.376 + 128.25 13.375 13.376 13.382 0.170 0.404 1.262 0.170 0.404 0.510 0.214 0.068 0.893 0.279 + 128.30 13.471 13.478 13.478 0.436 0.121 1.358 0.436 0.121 0.164 0.593 0.053 1.024 0.309 + 128.35 13.271 13.300 13.304 0.881 0.341 1.158 0.881 0.341 0.395 1.020 0.300 1.116 0.567 + 128.40 13.240 13.270 13.270 0.889 0.088 1.127 0.889 0.088 0.100 1.002 0.079 1.034 0.505 + 128.45 13.416 13.451 13.451 0.965 0.141 1.303 0.965 0.141 0.184 1.258 0.136 1.325 0.639 + 128.50 13.222 13.242 13.243 0.726 -0.186 1.109 0.726 -0.186 -0.207 0.805 -0.135 0.896 0.421 + 128.55 12.960 12.968 12.977 0.466 -0.463 0.847 0.466 -0.463 -0.392 0.395 -0.215 0.574 0.298 + 128.60 12.692 12.712 12.719 0.714 -0.433 0.579 0.714 -0.433 -0.250 0.413 -0.309 0.516 0.287 + 128.65 12.504 12.530 12.532 0.811 -0.228 0.391 0.811 -0.228 -0.089 0.317 -0.185 0.431 0.189 + 128.70 12.563 12.598 12.599 0.936 -0.183 0.450 0.936 -0.183 -0.082 0.421 -0.171 0.556 0.231 + 128.75 12.272 12.295 12.298 0.753 -0.245 0.159 0.753 -0.245 -0.039 0.120 -0.184 0.326 0.112 + 128.80 12.126 12.137 12.138 0.517 -0.202 0.013 0.517 -0.202 -0.003 0.007 -0.104 0.154 0.052 + 128.85 12.194 12.203 12.203 0.457 -0.113 0.081 0.457 -0.113 -0.009 0.037 -0.052 0.114 0.032 + 128.90 12.035 12.047 12.047 0.527 0.108 -0.077 0.527 0.108 -0.008 -0.041 0.057 0.148 0.035 + 128.95 12.363 12.376 12.382 0.562 0.375 0.250 0.562 0.375 0.094 0.141 0.211 0.260 0.135 + 129.00 12.142 12.146 12.154 0.306 0.428 0.029 0.306 0.428 0.013 0.009 0.131 0.139 0.066 + 129.05 12.367 12.374 12.376 0.397 0.234 0.255 0.397 0.234 0.060 0.101 0.093 0.139 0.075 + 129.10 12.540 12.544 12.549 0.297 0.379 0.427 0.297 0.379 0.162 0.127 0.113 0.207 0.117 + 129.15 12.337 12.354 12.357 0.642 0.283 0.224 0.642 0.283 0.063 0.144 0.182 0.271 0.120 + 129.20 12.182 12.190 12.190 0.440 -0.006 0.069 0.440 -0.006 -0.000 0.031 -0.003 0.099 0.015 + 129.25 11.975 11.979 11.981 0.285 -0.215 -0.138 0.285 -0.215 0.030 -0.039 -0.061 0.073 0.039 + 129.30 11.841 11.856 11.861 0.581 -0.374 -0.271 0.581 -0.374 0.102 -0.158 -0.218 0.276 0.144 + 129.35 11.725 11.746 11.746 0.694 0.069 -0.388 0.694 0.069 -0.027 -0.269 0.048 0.318 0.137 + 129.40 11.700 11.724 11.724 0.761 0.012 -0.413 0.761 0.012 -0.005 -0.314 0.009 0.375 0.157 + 129.45 11.636 11.672 11.672 0.914 0.029 -0.477 0.914 0.029 -0.014 -0.436 0.026 0.532 0.218 + 129.50 11.550 11.597 11.600 1.041 0.283 -0.563 1.041 0.283 -0.159 -0.586 0.295 0.740 0.337 + 129.55 11.645 11.712 11.712 1.252 0.055 -0.468 1.252 0.055 -0.026 -0.586 0.069 0.894 0.295 + 129.60 11.551 11.607 11.607 1.139 -0.033 -0.561 1.139 -0.033 0.018 -0.639 -0.037 0.806 0.320 + 129.65 11.599 11.665 11.666 1.241 0.169 -0.514 1.241 0.169 -0.087 -0.638 0.210 0.917 0.339 + 129.70 11.547 11.623 11.628 1.326 0.362 -0.566 1.326 0.362 -0.205 -0.751 0.480 1.105 0.457 + 129.75 11.685 11.752 11.758 1.249 0.363 -0.427 1.249 0.363 -0.155 -0.534 0.454 0.938 0.359 + 129.80 11.870 11.910 11.911 0.975 0.094 -0.242 0.975 0.094 -0.023 -0.236 0.092 0.509 0.127 + 129.85 11.406 11.436 11.440 0.826 0.319 -0.707 0.826 0.319 -0.226 -0.584 0.264 0.642 0.340 + 129.90 11.522 11.573 11.573 1.079 -0.114 -0.590 1.079 -0.114 0.067 -0.637 -0.123 0.763 0.326 + 129.95 11.404 11.453 11.456 1.057 -0.277 -0.709 1.057 -0.277 0.197 -0.750 -0.293 0.849 0.414 + 130.00 11.146 11.193 11.197 1.027 -0.297 -0.967 1.027 -0.297 0.287 -0.993 -0.305 1.039 0.539 + 130.05 11.423 11.468 11.470 1.012 -0.190 -0.689 1.012 -0.190 0.131 -0.697 -0.193 0.767 0.368 + 130.10 11.275 11.318 11.319 0.985 -0.201 -0.838 0.985 -0.201 0.168 -0.826 -0.198 0.857 0.433 + 130.15 11.719 11.776 11.789 1.161 -0.547 -0.394 1.161 -0.547 0.215 -0.457 -0.635 0.901 0.406 + 130.20 11.485 11.569 11.578 1.393 -0.464 -0.628 1.393 -0.464 0.292 -0.875 -0.647 1.275 0.563 + 130.25 11.585 11.719 11.723 1.765 -0.297 -0.527 1.765 -0.297 0.157 -0.931 -0.524 1.740 0.540 + 130.30 11.305 11.439 11.441 1.747 -0.220 -0.808 1.747 -0.220 0.178 -1.411 -0.385 1.876 0.737 + 130.35 11.159 11.356 11.365 2.105 -0.450 -0.953 2.105 -0.450 0.429 -2.007 -0.947 2.771 1.130 + 130.40 11.160 11.352 11.360 2.078 -0.429 -0.953 2.078 -0.429 0.409 -1.980 -0.892 2.705 1.105 + 130.45 11.088 11.331 11.332 2.334 -0.145 -1.025 2.334 -0.145 0.148 -2.393 -0.337 3.261 1.211 + 130.50 11.128 11.329 11.336 2.126 -0.403 -0.985 2.126 -0.403 0.397 -2.094 -0.856 2.826 1.148 + 130.55 11.458 11.629 11.634 1.987 -0.337 -0.655 1.987 -0.337 0.221 -1.301 -0.670 2.246 0.740 + 130.60 11.581 11.689 11.694 1.585 -0.337 -0.532 1.585 -0.337 0.179 -0.843 -0.534 1.454 0.507 + 130.65 11.925 11.991 11.996 1.262 -0.344 -0.188 1.262 -0.344 0.065 -0.237 -0.434 0.873 0.249 + 130.70 11.932 12.001 12.007 1.287 -0.374 -0.181 1.287 -0.374 0.068 -0.233 -0.481 0.915 0.269 + 130.75 12.104 12.154 12.161 1.109 -0.407 -0.009 1.109 -0.407 0.004 -0.010 -0.452 0.698 0.226 + 130.80 11.883 11.938 11.962 1.154 -0.745 -0.230 1.154 -0.745 0.171 -0.266 -0.859 0.969 0.458 + 130.85 11.908 11.961 11.974 1.121 -0.560 -0.205 1.121 -0.560 0.115 -0.230 -0.628 0.806 0.339 + 130.90 11.817 11.872 11.879 1.138 -0.396 -0.296 1.138 -0.396 0.117 -0.336 -0.451 0.770 0.287 + 130.95 11.448 11.508 11.528 1.173 -0.668 -0.665 1.173 -0.668 0.444 -0.780 -0.784 1.132 0.596 + 131.00 11.265 11.306 11.323 0.956 -0.619 -0.847 0.956 -0.619 0.524 -0.810 -0.591 1.007 0.566 + 131.05 11.377 11.424 11.431 1.027 -0.406 -0.735 1.027 -0.406 0.299 -0.755 -0.417 0.880 0.457 + 131.10 11.199 11.244 11.252 1.008 -0.439 -0.914 1.008 -0.439 0.401 -0.921 -0.442 1.022 0.549 + 131.15 11.267 11.310 11.317 0.983 -0.396 -0.846 0.983 -0.396 0.335 -0.831 -0.390 0.919 0.489 + 131.20 11.319 11.378 11.379 1.152 -0.196 -0.794 1.152 -0.196 0.156 -0.914 -0.226 0.998 0.477 + 131.25 11.487 11.539 11.539 1.093 -0.115 -0.626 1.093 -0.115 0.072 -0.684 -0.126 0.799 0.350 + 131.30 11.582 11.619 11.620 0.931 -0.158 -0.531 0.931 -0.158 0.084 -0.494 -0.148 0.587 0.261 + 131.35 11.777 11.819 11.819 0.993 -0.054 -0.336 0.993 -0.054 0.018 -0.334 -0.054 0.551 0.169 + 131.40 11.819 11.820 11.839 0.173 -0.678 -0.294 0.173 -0.678 0.199 -0.051 -0.117 0.288 0.118 + 131.45 11.804 11.805 11.816 0.172 -0.511 -0.309 0.172 -0.511 0.158 -0.053 -0.088 0.193 0.094 + 131.50 11.642 11.650 11.652 0.419 -0.195 -0.470 0.419 -0.195 0.092 -0.197 -0.082 0.217 0.116 + 131.55 11.547 11.555 11.569 0.424 -0.573 -0.565 0.424 -0.573 0.324 -0.240 -0.243 0.414 0.235 + 131.60 11.764 11.767 11.805 0.270 -0.952 -0.349 0.270 -0.952 0.332 -0.094 -0.257 0.550 0.215 + 131.65 11.532 11.538 11.559 0.381 -0.702 -0.581 0.381 -0.702 0.408 -0.221 -0.267 0.488 0.268 + 131.70 11.330 11.332 11.350 0.220 -0.630 -0.782 0.220 -0.630 0.493 -0.172 -0.139 0.529 0.270 + 131.75 11.047 11.047 11.078 0.112 -0.819 -1.066 0.112 -0.819 0.874 -0.119 -0.092 0.910 0.443 + 131.80 11.239 11.239 11.292 -0.041 -1.093 -0.874 -0.041 -1.093 0.955 0.036 0.045 0.980 0.478 + 131.85 11.212 11.212 11.277 0.013 -1.211 -0.901 0.013 -1.211 1.091 -0.012 -0.016 1.139 0.545 + 131.90 11.166 11.166 11.196 -0.025 -0.813 -0.946 -0.025 -0.813 0.769 0.024 0.021 0.779 0.385 + 131.95 11.154 11.154 11.177 -0.052 -0.712 -0.959 -0.052 -0.712 0.683 0.050 0.037 0.714 0.343 + 132.00 11.093 11.093 11.108 -0.048 -0.563 -1.019 -0.048 -0.563 0.574 0.049 0.027 0.679 0.288 + 132.05 10.909 10.913 10.929 -0.283 -0.592 -1.204 -0.283 -0.592 0.712 0.340 0.167 0.940 0.403 + 132.10 10.783 10.784 10.796 0.177 -0.506 -1.330 0.177 -0.506 0.673 -0.235 -0.089 1.028 0.359 + 132.15 10.796 10.800 10.815 -0.262 -0.580 -1.316 -0.262 -0.580 0.764 0.345 0.152 1.069 0.426 + 132.20 10.600 10.600 10.603 0.005 -0.259 -1.513 0.005 -0.259 0.391 -0.008 -0.001 1.178 0.196 + 132.25 10.744 10.745 10.749 0.171 -0.273 -1.369 0.171 -0.273 0.374 -0.233 -0.047 0.989 0.221 + 132.30 10.975 10.976 10.978 0.096 -0.247 -1.138 0.096 -0.247 0.281 -0.109 -0.024 0.682 0.151 + 132.35 10.947 10.955 10.955 0.404 0.079 -1.166 0.404 0.079 -0.092 -0.471 0.032 0.764 0.240 + 132.40 10.786 10.795 10.803 0.428 0.425 -1.327 0.428 0.425 -0.564 -0.567 0.182 1.062 0.410 + 132.45 10.769 10.774 10.779 0.330 0.310 -1.344 0.330 0.310 -0.416 -0.444 0.102 1.005 0.309 + 132.50 10.535 10.540 10.551 0.331 0.475 -1.578 0.331 0.475 -0.749 -0.521 0.157 1.412 0.463 + 132.55 10.405 10.421 10.427 0.592 0.340 -1.708 0.592 0.340 -0.580 -1.011 0.201 1.692 0.591 + 132.60 10.629 10.650 10.651 0.673 0.131 -1.484 0.673 0.131 -0.195 -0.999 0.088 1.336 0.511 + 132.65 10.503 10.528 10.528 0.721 -0.024 -1.610 0.721 -0.024 0.038 -1.161 -0.017 1.556 0.581 + 132.70 10.339 10.362 10.362 0.683 0.001 -1.773 0.683 0.001 -0.001 -1.211 0.000 1.806 0.606 + 132.75 10.621 10.647 10.647 0.748 -0.105 -1.492 0.748 -0.105 0.157 -1.116 -0.079 1.399 0.565 + 132.80 10.601 10.649 10.650 1.011 -0.149 -1.512 1.011 -0.149 0.225 -1.528 -0.150 1.665 0.776 + 132.85 10.365 10.433 10.433 1.188 0.072 -1.747 1.188 0.072 -0.126 -2.075 0.085 2.235 1.040 + 132.90 10.234 10.271 10.283 0.863 0.499 -1.878 0.863 0.499 -0.937 -1.620 0.430 2.261 0.960 + 132.95 10.423 10.478 10.482 1.070 0.301 -1.690 1.070 0.301 -0.509 -1.807 0.322 2.045 0.953 + 133.00 10.410 10.446 10.451 0.863 0.320 -1.703 0.863 0.320 -0.544 -1.470 0.276 1.873 0.796 + 133.05 10.209 10.227 10.229 0.607 0.224 -1.904 0.607 0.224 -0.427 -1.155 0.136 2.022 0.620 + 133.10 10.381 10.399 10.400 0.607 -0.101 -1.731 0.607 -0.101 0.176 -1.051 -0.062 1.688 0.534 + 133.15 10.684 10.690 10.694 0.357 -0.279 -1.428 0.357 -0.279 0.398 -0.510 -0.100 1.123 0.327 + 133.20 10.496 10.499 10.505 0.231 -0.372 -1.617 0.231 -0.372 0.601 -0.374 -0.086 1.403 0.357 + 133.25 10.274 10.281 10.287 0.370 -0.354 -1.839 0.370 -0.354 0.651 -0.681 -0.131 1.822 0.476 + 133.30 10.420 10.421 10.434 0.139 -0.522 -1.693 0.139 -0.522 0.883 -0.235 -0.072 1.578 0.458 + 133.35 10.401 10.404 10.417 0.271 -0.511 -1.712 0.271 -0.511 0.875 -0.463 -0.138 1.633 0.500 + 133.40 10.676 10.682 10.693 0.348 -0.479 -1.436 0.348 -0.479 0.689 -0.500 -0.167 1.207 0.433 + 133.45 10.548 10.548 10.564 0.038 -0.576 -1.565 0.038 -0.576 0.902 -0.059 -0.022 1.391 0.452 + 133.50 10.518 10.518 10.533 -0.046 -0.563 -1.595 -0.046 -0.563 0.898 0.074 0.026 1.432 0.450 + 133.55 10.536 10.536 10.558 -0.102 -0.677 -1.577 -0.102 -0.677 1.067 0.161 0.069 1.478 0.541 + 133.60 10.681 10.681 10.694 -0.044 -0.525 -1.431 -0.044 -0.525 0.752 0.063 0.023 1.163 0.377 + 133.65 10.402 10.403 10.406 0.143 -0.281 -1.711 0.143 -0.281 0.481 -0.245 -0.040 1.514 0.271 + 133.70 10.425 10.426 10.431 0.148 -0.318 -1.688 0.148 -0.318 0.536 -0.250 -0.047 1.486 0.297 + 133.75 10.251 10.253 10.257 -0.189 -0.301 -1.862 -0.189 -0.301 0.561 0.352 0.057 1.796 0.332 + 133.80 9.975 9.976 9.976 -0.154 -0.016 -2.138 -0.154 -0.016 0.034 0.329 0.002 2.296 0.165 + 133.85 9.976 9.980 9.980 0.272 0.108 -2.137 0.272 0.108 -0.231 -0.581 0.029 2.326 0.313 + 133.90 10.131 10.142 10.144 0.480 -0.202 -1.982 0.480 -0.202 0.401 -0.951 -0.097 2.099 0.518 + 133.95 10.282 10.287 10.291 0.346 0.271 -1.831 0.346 0.271 -0.496 -0.634 0.094 1.773 0.405 + 134.00 10.309 10.309 10.329 0.060 0.639 -1.804 0.060 0.639 -1.153 -0.108 0.038 1.833 0.579 + 134.05 10.496 10.502 10.509 0.370 0.379 -1.617 0.370 0.379 -0.613 -0.598 0.140 1.448 0.434 + 134.10 10.644 10.648 10.653 0.279 0.339 -1.468 0.279 0.339 -0.497 -0.410 0.095 1.174 0.326 + 134.15 10.557 10.557 10.568 0.022 0.493 -1.556 0.022 0.493 -0.767 -0.034 0.011 1.332 0.384 + 134.20 10.585 10.586 10.589 0.133 0.246 -1.528 0.133 0.246 -0.377 -0.203 0.033 1.206 0.215 + 134.25 10.852 10.857 10.859 0.310 -0.228 -1.261 0.310 -0.228 0.288 -0.391 -0.071 0.869 0.245 + 134.30 11.267 11.274 11.277 0.420 -0.225 -0.846 0.420 -0.225 0.190 -0.355 -0.094 0.472 0.207 + 134.35 11.364 11.368 11.373 0.311 -0.352 -0.749 0.311 -0.352 0.264 -0.233 -0.109 0.391 0.184 + 134.40 11.066 11.079 11.081 0.535 -0.206 -1.047 0.535 -0.206 0.216 -0.560 -0.110 0.713 0.305 + 134.45 11.238 11.270 11.280 0.850 -0.483 -0.875 0.850 -0.483 0.423 -0.744 -0.411 0.861 0.475 + 134.50 11.166 11.176 11.185 0.482 -0.428 -0.947 0.482 -0.428 0.405 -0.456 -0.206 0.656 0.322 + 134.55 11.043 11.066 11.068 0.721 -0.205 -1.070 0.721 -0.205 0.219 -0.771 -0.148 0.853 0.408 + 134.60 10.758 10.767 10.768 0.428 -0.172 -1.355 0.428 -0.172 0.233 -0.579 -0.074 1.024 0.314 + 134.65 10.829 10.831 10.833 0.194 -0.225 -1.284 0.194 -0.225 0.289 -0.249 -0.044 0.868 0.192 + 134.70 10.827 10.829 10.829 0.169 -0.020 -1.286 0.169 -0.020 0.026 -0.218 -0.003 0.841 0.110 + 134.75 10.874 10.878 10.886 0.268 0.417 -1.238 0.268 0.417 -0.516 -0.332 0.112 0.890 0.312 + 134.80 10.899 10.903 10.903 0.287 0.043 -1.214 0.287 0.043 -0.053 -0.349 0.012 0.779 0.176 + 134.85 11.079 11.081 11.081 0.159 0.096 -1.033 0.159 0.096 -0.099 -0.165 0.015 0.551 0.096 + 134.90 10.918 10.922 10.922 -0.291 -0.034 -1.194 -0.291 -0.034 0.040 0.347 0.010 0.756 0.175 + 134.95 10.999 11.005 11.005 0.354 -0.072 -1.114 0.354 -0.072 0.080 -0.395 -0.025 0.686 0.202 + 135.00 10.862 10.862 10.864 0.096 -0.232 -1.251 0.096 -0.232 0.290 -0.120 -0.022 0.814 0.157 + 135.05 10.492 10.492 10.492 -0.045 -0.046 -1.621 -0.045 -0.046 0.075 0.073 0.002 1.316 0.052 + 135.10 10.196 10.197 10.200 -0.180 0.230 -1.917 -0.180 0.230 -0.441 0.346 -0.042 1.880 0.281 + 135.15 10.588 10.601 10.603 -0.532 0.178 -1.525 -0.532 0.178 -0.271 0.811 -0.094 1.319 0.430 + 135.20 10.907 10.914 10.916 -0.409 0.180 -1.206 -0.409 0.180 -0.217 0.494 -0.074 0.827 0.272 + 135.25 10.704 10.710 10.719 -0.365 0.427 -1.409 -0.365 0.427 -0.602 0.515 -0.156 1.150 0.404 + 135.30 10.506 10.516 10.551 -0.473 0.859 -1.607 -0.473 0.859 -1.380 0.761 -0.406 1.772 0.814 + 135.35 10.560 10.569 10.597 -0.423 0.778 -1.553 -0.423 0.778 -1.209 0.657 -0.329 1.598 0.707 + 135.40 10.699 10.705 10.730 -0.360 0.723 -1.414 -0.360 0.723 -1.022 0.509 -0.260 1.325 0.585 + 135.45 10.578 10.581 10.632 -0.231 1.039 -1.535 -0.231 1.039 -1.594 0.355 -0.240 1.744 0.825 + 135.50 10.674 10.678 10.725 -0.265 1.008 -1.438 -0.265 1.008 -1.450 0.381 -0.267 1.578 0.761 + 135.55 10.542 10.548 10.568 -0.353 0.638 -1.570 -0.353 0.638 -1.001 0.555 -0.225 1.499 0.583 + 135.60 10.737 10.739 10.752 -0.216 0.520 -1.376 -0.216 0.520 -0.716 0.298 -0.113 1.105 0.392 + 135.65 10.804 10.806 10.820 0.195 0.554 -1.309 0.195 0.554 -0.725 -0.255 0.108 1.029 0.388 + 135.70 11.065 11.066 11.081 0.154 0.569 -1.048 0.154 0.569 -0.596 -0.162 0.088 0.723 0.312 + 135.75 11.286 11.292 11.310 0.387 0.627 -0.827 0.387 0.627 -0.519 -0.320 0.243 0.614 0.328 + 135.80 11.147 11.152 11.172 0.358 0.668 -0.966 0.358 0.668 -0.646 -0.346 0.240 0.754 0.385 + 135.85 11.256 11.267 11.290 0.500 0.714 -0.857 0.500 0.714 -0.612 -0.429 0.357 0.747 0.414 + 135.90 11.514 11.531 11.554 0.622 0.725 -0.598 0.622 0.725 -0.434 -0.372 0.451 0.635 0.364 + 135.95 11.255 11.264 11.296 0.442 0.851 -0.858 0.442 0.851 -0.730 -0.379 0.376 0.828 0.452 + 136.00 11.278 11.288 11.325 0.470 0.923 -0.835 0.470 0.923 -0.770 -0.393 0.434 0.885 0.484 + 136.05 10.885 10.894 10.906 0.441 0.498 -1.228 0.441 0.498 -0.611 -0.541 0.219 0.974 0.423 + 136.10 10.709 10.713 10.723 0.304 0.452 -1.404 0.304 0.452 -0.635 -0.427 0.138 1.134 0.389 + 136.15 10.589 10.589 10.590 0.082 0.171 -1.524 0.082 0.171 -0.260 -0.125 0.014 1.180 0.145 + 136.20 10.461 10.462 10.464 -0.126 0.214 -1.652 -0.126 0.214 -0.354 0.207 -0.027 1.395 0.206 + 136.25 10.434 10.434 10.435 -0.022 0.125 -1.679 -0.022 0.125 -0.211 0.036 -0.003 1.417 0.107 + 136.30 10.432 10.432 10.433 0.043 0.137 -1.681 0.043 0.137 -0.231 -0.073 0.006 1.423 0.121 + 136.35 10.708 10.708 10.708 -0.001 0.100 -1.405 -0.001 0.100 -0.141 0.002 -0.000 0.992 0.070 + 136.40 10.772 10.775 10.784 0.247 0.439 -1.341 0.247 0.439 -0.589 -0.332 0.109 1.026 0.342 + 136.45 10.752 10.761 10.772 0.426 0.479 -1.360 0.426 0.479 -0.652 -0.580 0.204 1.131 0.448 + 136.50 10.889 10.890 10.909 -0.077 0.652 -1.223 -0.077 0.652 -0.798 0.094 -0.050 0.964 0.403 + 136.55 10.993 10.995 11.004 -0.186 0.459 -1.120 -0.186 0.459 -0.514 0.208 -0.085 0.749 0.280 + 136.60 10.588 10.592 10.605 -0.295 0.533 -1.525 -0.295 0.533 -0.812 0.450 -0.157 1.348 0.471 + 136.65 10.755 10.758 10.775 -0.280 0.599 -1.358 -0.280 0.599 -0.813 0.380 -0.167 1.141 0.457 + 136.70 10.770 10.775 10.799 -0.310 0.729 -1.343 -0.310 0.729 -0.979 0.417 -0.226 1.215 0.544 + 136.75 10.896 10.897 10.906 -0.194 0.443 -1.217 -0.194 0.443 -0.539 0.237 -0.086 0.858 0.297 + 136.80 10.956 10.962 10.968 -0.354 0.370 -1.156 -0.354 0.370 -0.428 0.410 -0.131 0.800 0.303 + 136.85 10.717 10.718 10.723 0.102 0.324 -1.396 0.102 0.324 -0.453 -0.142 0.033 1.032 0.238 + 136.90 10.642 10.643 10.645 -0.184 0.177 -1.471 -0.184 0.177 -0.260 0.270 -0.033 1.115 0.188 + 136.95 10.387 10.387 10.387 0.004 0.096 -1.726 0.004 0.096 -0.165 -0.008 0.000 1.494 0.083 + 137.00 10.720 10.720 10.720 0.080 0.024 -1.393 0.080 0.024 -0.033 -0.111 0.002 0.974 0.058 + 137.05 10.615 10.616 10.622 0.162 0.357 -1.498 0.162 0.357 -0.534 -0.243 0.058 1.199 0.295 + 137.10 10.580 10.581 10.581 -0.133 0.056 -1.533 -0.133 0.056 -0.085 0.203 -0.007 1.185 0.110 + 137.15 10.671 10.674 10.676 0.252 0.181 -1.441 0.252 0.181 -0.260 -0.363 0.045 1.087 0.225 + 137.20 10.270 10.270 10.295 0.069 0.707 -1.843 0.069 0.707 -1.303 -0.128 0.049 1.950 0.655 + 137.25 10.417 10.417 10.433 -0.104 0.574 -1.696 -0.104 0.574 -0.973 0.176 -0.060 1.608 0.495 + 137.30 10.724 10.724 10.733 0.101 0.436 -1.389 0.101 0.436 -0.606 -0.141 0.044 1.065 0.312 + 137.35 10.365 10.368 10.370 0.235 0.199 -1.748 0.235 0.199 -0.348 -0.411 0.047 1.575 0.270 + 137.40 10.388 10.388 10.389 0.083 0.115 -1.725 0.083 0.115 -0.198 -0.143 0.010 1.498 0.122 + 137.45 10.524 10.524 10.524 -0.021 -0.022 -1.589 -0.021 -0.022 0.035 0.033 0.000 1.262 0.024 + 137.50 10.459 10.460 10.466 -0.162 0.329 -1.654 -0.162 0.329 -0.543 0.268 -0.053 1.434 0.304 + 137.55 10.316 10.316 10.322 -0.005 0.357 -1.797 -0.005 0.357 -0.641 0.009 -0.002 1.679 0.321 + 137.60 10.381 10.382 10.385 -0.161 0.226 -1.732 -0.161 0.226 -0.391 0.278 -0.036 1.538 0.240 + 137.65 10.759 10.759 10.790 -0.007 0.820 -1.354 -0.007 0.820 -1.110 0.010 -0.006 1.252 0.555 + 137.70 11.005 11.006 11.033 0.141 0.774 -1.107 0.141 0.774 -0.857 -0.156 0.109 0.923 0.439 + 137.75 10.640 10.640 10.675 0.027 0.863 -1.473 0.027 0.863 -1.272 -0.039 0.023 1.458 0.636 + 137.80 10.675 10.675 10.735 0.039 1.132 -1.438 0.039 1.132 -1.628 -0.056 0.044 1.675 0.815 + 137.85 10.646 10.646 10.692 -0.004 0.993 -1.467 -0.004 0.993 -1.457 0.007 -0.004 1.569 0.728 + 137.90 10.709 10.709 10.765 0.033 1.091 -1.403 0.033 1.091 -1.532 -0.046 0.036 1.581 0.766 + 137.95 10.639 10.644 10.701 0.336 1.102 -1.474 0.336 1.102 -1.624 -0.495 0.370 1.750 0.869 + 138.00 10.483 10.490 10.553 0.382 1.156 -1.630 0.382 1.156 -1.884 -0.623 0.442 2.070 1.016 + 138.05 10.456 10.463 10.542 0.375 1.284 -1.656 0.375 1.284 -2.127 -0.622 0.482 2.267 1.134 + 138.10 10.635 10.647 10.707 0.498 1.136 -1.477 0.498 1.136 -1.679 -0.735 0.566 1.861 0.959 + 138.15 10.586 10.586 10.663 0.054 1.274 -1.527 0.054 1.274 -1.944 -0.082 0.068 1.978 0.974 + 138.20 10.980 10.980 11.018 0.062 0.910 -1.133 0.062 0.910 -1.030 -0.071 0.057 1.057 0.517 + 138.25 10.683 10.683 10.725 0.014 0.949 -1.430 0.014 0.949 -1.357 -0.020 0.013 1.473 0.679 + 138.30 10.631 10.631 10.654 0.019 0.701 -1.482 0.019 0.701 -1.038 -0.029 0.014 1.343 0.519 + 138.35 10.769 10.772 10.811 0.243 0.914 -1.344 0.243 0.914 -1.228 -0.326 0.222 1.350 0.645 + 138.40 10.734 10.734 10.781 0.119 1.004 -1.379 0.119 1.004 -1.384 -0.164 0.120 1.462 0.699 + 138.45 10.447 10.453 10.568 -0.360 1.553 -1.666 -0.360 1.553 -2.587 0.600 -0.559 2.659 1.357 + 138.50 10.614 10.616 10.742 -0.232 1.637 -1.499 -0.232 1.637 -2.453 0.348 -0.380 2.489 1.253 + 138.55 10.952 10.958 11.099 -0.369 1.762 -1.161 -0.369 1.762 -2.045 0.429 -0.651 2.295 1.094 + 138.60 10.970 10.973 11.108 -0.233 1.730 -1.142 -0.233 1.730 -1.976 0.266 -0.403 2.176 1.017 + 138.65 11.003 11.013 11.110 -0.455 1.465 -1.110 -0.455 1.465 -1.625 0.505 -0.666 1.792 0.914 + 138.70 10.909 10.922 10.968 -0.528 0.997 -1.203 -0.528 0.997 -1.200 0.635 -0.526 1.360 0.728 + 138.75 11.119 11.126 11.165 -0.407 0.931 -0.994 -0.407 0.931 -0.926 0.404 -0.379 1.010 0.539 + 138.80 11.384 11.385 11.430 -0.193 1.016 -0.729 -0.193 1.016 -0.741 0.141 -0.196 0.801 0.390 + 138.85 11.067 11.068 11.137 0.053 1.245 -1.045 0.053 1.245 -1.301 -0.055 0.065 1.322 0.652 + 138.90 11.010 11.011 11.056 0.144 0.996 -1.103 0.144 0.996 -1.099 -0.159 0.144 1.115 0.560 + 138.95 11.063 11.067 11.104 -0.293 0.912 -1.050 -0.293 0.912 -0.958 0.307 -0.267 1.010 0.520 + 139.00 11.151 11.151 11.180 -0.083 0.798 -0.962 -0.083 0.798 -0.768 0.080 -0.066 0.785 0.387 + 139.05 11.091 11.096 11.117 -0.316 0.695 -1.022 -0.316 0.695 -0.710 0.322 -0.219 0.813 0.405 + 139.10 11.156 11.181 11.204 -0.746 0.717 -0.957 -0.746 0.717 -0.686 0.714 -0.535 0.993 0.563 + 139.15 11.253 11.293 11.296 -0.957 0.263 -0.860 -0.957 0.263 -0.226 0.823 -0.252 0.862 0.445 + 139.20 10.842 10.886 10.887 -0.979 0.068 -1.271 -0.979 0.068 -0.087 1.244 -0.067 1.289 0.624 + 139.25 10.908 10.956 10.956 -1.030 0.008 -1.205 -1.030 0.008 -0.010 1.242 -0.009 1.257 0.621 + 139.30 11.100 11.162 11.166 -1.169 0.309 -1.012 -1.169 0.309 -0.313 1.183 -0.361 1.243 0.638 + 139.35 11.261 11.324 11.326 -1.192 0.223 -0.852 -1.192 0.223 -0.190 1.016 -0.266 1.099 0.534 + 139.40 11.369 11.432 11.432 -1.194 0.102 -0.744 -1.194 0.102 -0.076 0.888 -0.121 0.995 0.450 + 139.45 11.297 11.342 11.342 -1.004 0.088 -0.816 -1.004 0.088 -0.072 0.819 -0.088 0.841 0.413 + 139.50 11.613 11.630 11.631 -0.633 -0.095 -0.500 -0.633 -0.095 0.047 0.316 0.060 0.330 0.163 + 139.55 11.651 11.693 11.693 -0.997 0.042 -0.462 -0.997 0.042 -0.020 0.460 -0.042 0.604 0.231 + 139.60 11.378 11.417 11.421 -0.940 0.308 -0.734 -0.940 0.308 -0.226 0.690 -0.289 0.759 0.391 + 139.65 11.323 11.360 11.362 -0.924 0.202 -0.790 -0.924 0.202 -0.160 0.730 -0.187 0.759 0.385 + 139.70 11.370 11.446 11.452 -1.320 0.371 -0.743 -1.320 0.371 -0.276 0.981 -0.490 1.216 0.565 + 139.75 11.349 11.495 11.496 -1.829 0.135 -0.764 -1.829 0.135 -0.103 1.397 -0.247 1.974 0.711 + 139.80 11.260 11.408 11.413 -1.833 -0.319 -0.853 -1.833 -0.319 0.272 1.563 0.585 2.095 0.846 + 139.85 11.156 11.278 11.300 -1.652 -0.698 -0.956 -1.652 -0.698 0.668 1.580 1.153 2.066 1.034 + 139.90 11.375 11.488 11.547 -1.607 -1.167 -0.738 -1.607 -1.167 0.861 1.185 1.875 2.244 1.190 + 139.95 11.352 11.444 11.512 -1.444 -1.247 -0.760 -1.444 -1.247 0.949 1.098 1.802 2.110 1.157 + 140.00 11.074 11.153 11.219 -1.328 -1.213 -1.039 -1.328 -1.213 1.260 1.379 1.611 2.157 1.233 + 140.05 11.159 11.236 11.301 -1.315 -1.203 -0.954 -1.315 -1.203 1.147 1.254 1.582 2.043 1.161 + 140.10 11.515 11.541 11.660 -0.771 -1.663 -0.598 -0.771 -1.663 0.994 0.461 1.282 1.858 0.843 + 140.15 11.233 11.251 11.332 -0.644 -1.352 -0.880 -0.644 -1.352 1.189 0.567 0.871 1.508 0.790 + 140.20 11.176 11.203 11.253 -0.778 -1.059 -0.937 -0.778 -1.059 0.992 0.729 0.824 1.302 0.741 + 140.25 10.817 10.839 10.901 -0.692 -1.160 -1.296 -0.692 -1.160 1.503 0.897 0.803 1.752 0.963 + 140.30 10.971 10.994 11.045 -0.709 -1.060 -1.142 -0.709 -1.060 1.211 0.810 0.752 1.465 0.820 + 140.35 10.873 10.902 10.946 -0.784 -0.984 -1.239 -0.784 -0.984 1.220 0.972 0.771 1.560 0.870 + 140.40 10.890 10.898 11.001 -0.426 -1.502 -1.223 -0.426 -1.502 1.838 0.521 0.640 1.967 1.007 + 140.45 10.792 10.802 10.941 -0.445 -1.739 -1.320 -0.445 -1.739 2.296 0.588 0.774 2.483 1.247 + 140.50 10.854 10.864 10.947 -0.471 -1.350 -1.259 -0.471 -1.350 1.700 0.593 0.636 1.815 0.955 + 140.55 10.587 10.605 10.681 -0.618 -1.274 -1.526 -0.618 -1.274 1.943 0.944 0.788 2.166 1.150 + 140.60 10.450 10.473 10.580 -0.686 -1.504 -1.662 -0.686 -1.504 2.500 1.141 1.032 2.748 1.468 + 140.65 10.467 10.491 10.624 -0.707 -1.674 -1.645 -0.707 -1.674 2.754 1.164 1.184 3.005 1.608 + 140.70 10.744 10.771 10.896 -0.756 -1.648 -1.369 -0.756 -1.648 2.256 1.035 1.247 2.581 1.389 + 140.75 11.127 11.160 11.307 -0.846 -1.819 -0.985 -0.846 -1.819 1.792 0.834 1.539 2.498 1.253 + 140.80 11.267 11.294 11.392 -0.777 -1.496 -0.846 -0.777 -1.496 1.265 0.657 1.161 1.778 0.919 + 140.85 11.232 11.262 11.349 -0.825 -1.407 -0.881 -0.825 -1.407 1.240 0.727 1.161 1.718 0.924 + 140.90 11.111 11.129 11.191 -0.629 -1.181 -1.002 -0.629 -1.181 1.183 0.630 0.743 1.397 0.766 + 140.95 11.327 11.349 11.413 -0.692 -1.210 -0.785 -0.692 -1.210 0.950 0.543 0.837 1.279 0.689 + 141.00 11.408 11.435 11.510 -0.795 -1.308 -0.705 -0.795 -1.308 0.922 0.561 1.040 1.420 0.749 + 141.05 11.131 11.158 11.214 -0.782 -1.121 -0.982 -0.782 -1.121 1.100 0.767 0.876 1.415 0.801 + 141.10 11.025 11.038 11.069 -0.535 -0.837 -1.088 -0.535 -0.837 0.911 0.582 0.448 1.085 0.585 + 141.15 10.931 10.933 10.943 -0.169 -0.482 -1.182 -0.169 -0.482 0.570 0.199 0.081 0.829 0.305 + 141.20 11.282 11.292 11.307 -0.485 -0.585 -0.831 -0.485 -0.585 0.486 0.403 0.284 0.634 0.346 + 141.25 11.439 11.447 11.460 -0.438 -0.541 -0.674 -0.438 -0.541 0.364 0.295 0.237 0.469 0.263 + 141.30 11.461 11.467 11.483 -0.375 -0.603 -0.652 -0.375 -0.603 0.393 0.245 0.226 0.465 0.258 + 141.35 11.413 11.434 11.459 -0.700 -0.746 -0.700 -0.700 -0.746 0.522 0.490 0.522 0.768 0.443 + 141.40 11.534 11.544 11.603 -0.495 -1.165 -0.579 -0.495 -1.165 0.675 0.287 0.577 0.969 0.466 + 141.45 11.876 11.880 11.956 -0.314 -1.350 -0.237 -0.314 -1.350 0.320 0.074 0.424 0.988 0.268 + 141.50 11.783 11.785 11.820 -0.214 -0.916 -0.330 -0.214 -0.916 0.302 0.071 0.196 0.497 0.184 + 141.55 11.380 11.382 11.397 -0.232 -0.570 -0.733 -0.232 -0.570 0.417 0.170 0.132 0.458 0.235 + 141.60 11.548 11.552 11.556 -0.304 -0.319 -0.565 -0.304 -0.319 0.180 0.172 0.097 0.257 0.134 + 141.65 11.695 11.696 11.711 -0.153 -0.591 -0.417 -0.153 -0.591 0.247 0.064 0.091 0.273 0.135 + 141.70 11.853 11.855 11.878 0.195 -0.741 -0.260 0.195 -0.741 0.193 -0.051 -0.144 0.327 0.123 + 141.75 11.608 11.608 11.648 0.054 -0.960 -0.505 0.054 -0.960 0.485 -0.027 -0.052 0.590 0.244 + 141.80 11.821 11.822 11.859 0.086 -0.936 -0.291 0.086 -0.936 0.273 -0.025 -0.080 0.485 0.143 + 141.85 12.004 12.006 12.028 0.233 -0.730 -0.109 0.233 -0.730 0.080 -0.025 -0.170 0.299 0.095 + 141.90 12.009 12.009 12.036 0.045 -0.803 -0.104 0.045 -0.803 0.083 -0.005 -0.036 0.329 0.045 + 141.95 12.078 12.078 12.108 -0.022 -0.846 -0.035 -0.022 -0.846 0.029 0.001 0.018 0.359 0.017 + 142.00 12.080 12.081 12.117 0.079 -0.936 -0.032 0.079 -0.936 0.030 -0.003 -0.074 0.441 0.040 + 142.05 11.632 11.633 11.675 0.112 -0.989 -0.481 0.112 -0.989 0.475 -0.054 -0.111 0.611 0.246 + 142.10 11.428 11.428 11.440 0.031 -0.524 -0.685 0.031 -0.524 0.359 -0.021 -0.016 0.372 0.180 + 142.15 11.584 11.585 11.594 0.104 -0.473 -0.529 0.104 -0.473 0.250 -0.055 -0.049 0.257 0.130 + 142.20 11.707 11.709 11.716 -0.230 -0.411 -0.406 -0.230 -0.411 0.167 0.093 0.095 0.193 0.107 + 142.25 11.629 11.631 11.632 -0.244 -0.120 -0.484 -0.244 -0.120 0.058 0.118 0.029 0.154 0.067 + 142.30 11.582 11.591 11.594 -0.477 -0.262 -0.531 -0.477 -0.262 0.139 0.254 0.125 0.289 0.158 + 142.35 11.229 11.249 11.249 -0.667 0.096 -0.884 -0.667 0.096 -0.085 0.590 -0.064 0.618 0.300 + 142.40 11.110 11.146 11.146 -0.899 -0.015 -1.003 -0.899 -0.015 0.015 0.902 0.013 0.908 0.451 + 142.45 10.885 10.920 10.920 -0.878 0.044 -1.228 -0.878 0.044 -0.054 1.079 -0.039 1.141 0.540 + 142.50 10.501 10.535 10.555 -0.854 0.645 -1.612 -0.854 0.645 -1.040 1.376 -0.551 1.872 0.905 + 142.55 10.428 10.451 10.460 -0.698 0.417 -1.685 -0.698 0.417 -0.703 1.175 -0.291 1.749 0.700 + 142.60 10.798 10.811 10.812 -0.527 0.149 -1.315 -0.527 0.149 -0.197 0.693 -0.079 1.014 0.362 + 142.65 10.806 10.850 10.850 -0.975 0.049 -1.307 -0.975 0.049 -0.063 1.274 -0.047 1.330 0.638 + 142.70 10.884 10.933 10.935 -1.032 -0.192 -1.229 -1.032 -0.192 0.236 1.267 0.198 1.305 0.652 + 142.75 10.562 10.614 10.614 -1.045 -0.004 -1.550 -1.045 -0.004 0.006 1.620 0.004 1.748 0.810 + 142.80 10.381 10.431 10.433 -1.021 0.200 -1.732 -1.021 0.200 -0.347 1.768 -0.205 2.041 0.907 + 142.85 10.427 10.440 10.444 -0.525 0.288 -1.686 -0.525 0.288 -0.486 0.884 -0.151 1.600 0.510 + 142.90 10.494 10.512 10.512 -0.614 -0.047 -1.618 -0.614 -0.047 0.077 0.994 0.029 1.500 0.499 + 142.95 10.717 10.750 10.751 -0.833 -0.151 -1.395 -0.833 -0.151 0.210 1.163 0.125 1.332 0.594 + 143.00 10.883 10.919 10.923 -0.883 0.294 -1.230 -0.883 0.294 -0.361 1.085 -0.259 1.189 0.586 + 143.05 10.921 10.950 10.966 -0.796 0.589 -1.192 -0.796 0.589 -0.701 0.948 -0.468 1.200 0.635 + 143.10 10.667 10.692 10.705 -0.725 0.538 -1.446 -0.725 0.538 -0.777 1.048 -0.390 1.452 0.681 + 143.15 10.361 10.433 10.451 -1.220 0.612 -1.751 -1.220 0.612 -1.073 2.137 -0.747 2.466 1.253 + 143.20 10.379 10.413 10.440 -0.833 0.760 -1.733 -0.833 0.760 -1.317 1.444 -0.633 2.138 1.027 + 143.25 10.436 10.448 10.463 -0.504 0.554 -1.677 -0.504 0.554 -0.929 0.846 -0.280 1.686 0.644 + 143.30 10.383 10.396 10.441 -0.521 0.968 -1.730 -0.521 0.968 -1.675 0.901 -0.504 2.100 0.984 + 143.35 10.550 10.554 10.598 -0.282 0.962 -1.563 -0.282 0.962 -1.504 0.440 -0.271 1.723 0.795 + 143.40 10.669 10.677 10.697 -0.433 0.653 -1.444 -0.433 0.653 -0.943 0.625 -0.283 1.350 0.583 + 143.45 10.551 10.552 10.578 -0.149 0.743 -1.562 -0.149 0.743 -1.160 0.233 -0.111 1.507 0.594 + 143.50 10.629 10.629 10.666 -0.024 0.894 -1.484 -0.024 0.894 -1.327 0.035 -0.021 1.501 0.664 + 143.55 10.614 10.614 10.646 -0.067 0.822 -1.499 -0.067 0.822 -1.232 0.100 -0.055 1.463 0.619 + 143.60 10.670 10.672 10.689 -0.219 0.604 -1.443 -0.219 0.604 -0.871 0.316 -0.132 1.248 0.468 + 143.65 10.594 10.595 10.607 -0.187 0.500 -1.519 -0.187 0.500 -0.760 0.283 -0.093 1.296 0.408 + 143.70 10.708 10.708 10.713 0.107 0.328 -1.405 0.107 0.328 -0.461 -0.150 0.035 1.046 0.243 + 143.75 10.918 10.918 10.924 -0.008 0.365 -1.195 -0.008 0.365 -0.436 0.010 -0.003 0.781 0.218 + 143.80 11.143 11.149 11.153 0.368 0.306 -0.970 0.368 0.306 -0.297 -0.356 0.112 0.585 0.239 + 143.85 11.210 11.212 11.213 0.199 0.168 -0.903 0.199 0.168 -0.151 -0.179 0.033 0.442 0.119 + 143.90 11.419 11.419 11.423 0.047 -0.328 -0.694 0.047 -0.328 0.228 -0.033 -0.015 0.296 0.115 + 143.95 11.159 11.162 11.164 0.254 -0.218 -0.953 0.254 -0.218 0.208 -0.242 -0.055 0.511 0.162 + 144.00 11.331 11.331 11.339 -0.078 -0.420 -0.782 -0.078 -0.420 0.328 0.061 0.033 0.397 0.168 + 144.05 11.204 11.206 11.207 -0.243 -0.169 -0.909 -0.243 -0.169 0.154 0.221 0.041 0.457 0.136 + 144.10 11.386 11.387 11.389 0.202 -0.207 -0.727 0.202 -0.207 0.151 -0.147 -0.042 0.306 0.107 + 144.15 11.738 11.740 11.740 -0.172 0.062 -0.375 -0.172 0.062 -0.023 0.064 -0.011 0.087 0.035 + 144.20 11.219 11.227 11.229 -0.412 0.205 -0.893 -0.412 0.205 -0.184 0.368 -0.085 0.505 0.210 + 144.25 11.012 11.012 11.030 -0.101 0.631 -1.101 -0.101 0.631 -0.695 0.111 -0.064 0.811 0.353 + 144.30 11.182 11.182 11.183 0.145 0.133 -0.931 0.145 0.133 -0.124 -0.135 0.019 0.453 0.092 + 144.35 11.282 11.292 11.292 0.470 -0.056 -0.831 0.470 -0.056 0.047 -0.390 -0.026 0.457 0.197 + 144.40 11.276 11.284 11.287 0.436 -0.259 -0.837 0.436 -0.259 0.217 -0.365 -0.113 0.479 0.219 + 144.45 11.288 11.304 11.305 0.592 -0.208 -0.825 0.592 -0.208 0.172 -0.489 -0.123 0.537 0.266 + 144.50 11.445 11.459 11.460 0.564 -0.143 -0.667 0.564 -0.143 0.095 -0.377 -0.080 0.392 0.198 + 144.55 11.162 11.176 11.176 0.555 -0.087 -0.951 0.555 -0.087 0.083 -0.528 -0.048 0.610 0.268 + 144.60 11.217 11.242 11.246 0.746 -0.278 -0.895 0.746 -0.278 0.249 -0.668 -0.208 0.718 0.371 + 144.65 10.959 10.977 10.980 0.636 -0.243 -1.154 0.636 -0.243 0.280 -0.734 -0.154 0.898 0.400 + 144.70 11.000 11.026 11.028 0.754 -0.234 -1.113 0.754 -0.234 0.260 -0.839 -0.176 0.931 0.448 + 144.75 11.144 11.158 11.159 0.566 -0.125 -0.969 0.566 -0.125 0.121 -0.549 -0.071 0.637 0.283 + 144.80 11.028 11.060 11.062 0.839 -0.190 -1.084 0.839 -0.190 0.206 -0.909 -0.159 0.958 0.473 + 144.85 11.009 11.021 11.022 0.505 0.178 -1.104 0.505 0.178 -0.196 -0.557 0.090 0.752 0.299 + 144.90 11.000 11.011 11.016 0.491 -0.324 -1.113 0.491 -0.324 0.360 -0.547 -0.159 0.792 0.337 + 144.95 10.950 10.957 10.961 0.393 -0.308 -1.163 0.393 -0.308 0.358 -0.457 -0.121 0.801 0.297 + 145.00 11.115 11.142 11.142 0.773 0.065 -0.997 0.773 0.065 -0.065 -0.771 0.050 0.798 0.388 + 145.05 11.000 11.007 11.010 0.383 0.272 -1.112 0.383 0.272 -0.303 -0.426 0.104 0.729 0.267 + 145.10 11.052 11.052 11.054 0.089 0.185 -1.061 0.089 0.185 -0.197 -0.094 0.016 0.584 0.109 + 145.15 11.231 11.232 11.252 -0.085 0.671 -0.881 -0.085 0.671 -0.592 0.075 -0.057 0.617 0.300 + 145.20 11.314 11.322 11.345 -0.440 0.718 -0.799 -0.440 0.718 -0.574 0.351 -0.315 0.673 0.371 + 145.25 11.340 11.340 11.352 -0.016 0.511 -0.772 -0.016 0.511 -0.395 0.012 -0.008 0.429 0.198 + 145.30 11.228 11.228 11.228 0.022 0.120 -0.885 0.022 0.120 -0.106 -0.020 0.003 0.399 0.054 + 145.35 11.271 11.272 11.275 0.159 0.236 -0.841 0.159 0.236 -0.198 -0.133 0.037 0.394 0.121 + 145.40 11.193 11.195 11.207 0.210 0.516 -0.920 0.210 0.516 -0.475 -0.193 0.108 0.578 0.262 + 145.45 11.208 11.209 11.220 -0.177 0.485 -0.905 -0.177 0.485 -0.439 0.160 -0.086 0.543 0.238 + 145.50 11.146 11.150 11.152 -0.296 0.177 -0.966 -0.296 0.177 -0.171 0.286 -0.053 0.527 0.169 + 145.55 11.199 11.199 11.199 -0.075 0.047 -0.914 -0.075 0.047 -0.043 0.069 -0.004 0.422 0.041 + 145.60 11.179 11.180 11.180 -0.169 0.080 -0.934 -0.169 0.080 -0.075 0.157 -0.014 0.454 0.087 + 145.65 11.215 11.215 11.217 0.053 0.226 -0.898 0.053 0.226 -0.203 -0.048 0.012 0.430 0.104 + 145.70 11.054 11.055 11.059 -0.121 0.312 -1.059 -0.121 0.312 -0.331 0.128 -0.038 0.617 0.178 + 145.75 11.012 11.016 11.024 -0.284 0.411 -1.100 -0.284 0.411 -0.452 0.312 -0.117 0.730 0.281 + 145.80 11.261 11.263 11.268 -0.246 0.322 -0.852 -0.246 0.322 -0.274 0.209 -0.079 0.445 0.177 + 145.85 11.239 11.240 11.247 -0.104 0.415 -0.874 -0.104 0.415 -0.362 0.091 -0.043 0.473 0.188 + 145.90 11.096 11.099 11.116 -0.239 0.623 -1.017 -0.239 0.623 -0.634 0.243 -0.149 0.740 0.347 + 145.95 11.180 11.187 11.191 -0.387 0.311 -0.932 -0.387 0.311 -0.290 0.361 -0.120 0.558 0.239 + 146.00 11.129 11.145 11.155 -0.596 0.467 -0.984 -0.596 0.467 -0.459 0.586 -0.278 0.770 0.397 + 146.05 10.689 10.721 10.731 -0.830 0.472 -1.424 -0.830 0.472 -0.672 1.183 -0.392 1.470 0.708 + 146.10 10.636 10.654 10.659 -0.621 0.347 -1.477 -0.621 0.347 -0.512 0.918 -0.216 1.344 0.537 + 146.15 10.784 10.793 10.801 -0.438 0.418 -1.329 -0.438 0.418 -0.555 0.582 -0.183 1.066 0.412 + 146.20 10.547 10.564 10.573 -0.587 0.447 -1.566 -0.587 0.447 -0.700 0.919 -0.263 1.498 0.593 + 146.25 10.560 10.571 10.587 -0.484 0.579 -1.553 -0.484 0.579 -0.899 0.751 -0.280 1.491 0.602 + 146.30 10.808 10.817 10.834 -0.449 0.601 -1.305 -0.449 0.601 -0.784 0.586 -0.270 1.133 0.508 + 146.35 10.982 11.009 11.022 -0.767 0.532 -1.131 -0.767 0.532 -0.602 0.868 -0.409 1.076 0.566 + 146.40 10.938 10.953 10.953 -0.580 0.081 -1.175 -0.580 0.081 -0.095 0.682 -0.047 0.862 0.345 + 146.45 10.922 10.929 10.930 -0.374 0.169 -1.191 -0.374 0.169 -0.201 0.445 -0.063 0.793 0.246 + 146.50 11.014 11.017 11.019 -0.250 0.222 -1.099 -0.250 0.222 -0.244 0.275 -0.055 0.659 0.186 + 146.55 11.270 11.275 11.277 -0.340 0.221 -0.843 -0.340 0.221 -0.186 0.287 -0.075 0.437 0.175 + 146.60 11.894 11.907 11.916 -0.567 0.451 -0.219 -0.567 0.451 -0.099 0.124 -0.256 0.287 0.151 + 146.65 11.731 11.735 11.742 -0.314 0.399 -0.382 -0.314 0.399 -0.152 0.120 -0.125 0.202 0.115 + 146.70 11.605 11.609 11.609 -0.324 0.099 -0.508 -0.324 0.099 -0.050 0.165 -0.032 0.186 0.087 + 146.75 11.678 11.684 11.684 -0.383 -0.027 -0.435 -0.383 -0.027 0.012 0.166 0.010 0.168 0.084 + 146.80 11.637 11.640 11.644 -0.243 0.311 -0.476 -0.243 0.311 -0.148 0.115 -0.076 0.191 0.101 + 146.85 11.709 11.709 11.711 0.090 0.168 -0.404 0.090 0.168 -0.068 -0.036 0.015 0.100 0.039 + 146.90 11.973 11.973 11.974 -0.017 -0.042 -0.139 -0.017 -0.042 0.006 0.002 0.001 0.011 0.003 + 146.95 12.087 12.088 12.089 0.133 0.106 -0.025 0.133 0.106 -0.003 -0.003 0.014 0.015 0.007 + 147.00 11.739 11.739 11.741 0.053 0.243 -0.374 0.053 0.243 -0.091 -0.020 0.013 0.101 0.047 + 147.05 11.571 11.573 11.574 0.238 0.170 -0.542 0.238 0.170 -0.092 -0.129 0.040 0.190 0.082 + 147.10 11.465 11.475 11.476 0.461 0.185 -0.647 0.461 0.185 -0.120 -0.298 0.085 0.333 0.166 + 147.15 11.826 11.826 11.826 0.037 -0.016 -0.287 0.037 -0.016 0.005 -0.011 -0.001 0.042 0.006 + 147.20 11.703 11.705 11.707 0.202 0.229 -0.410 0.202 0.229 -0.094 -0.083 0.046 0.131 0.067 + 147.25 11.972 11.974 11.974 0.182 0.027 -0.141 0.182 0.027 -0.004 -0.026 0.005 0.027 0.013 + 147.30 12.021 12.021 12.021 -0.044 -0.014 -0.092 -0.044 -0.014 0.001 0.004 0.001 0.005 0.002 + 147.35 11.975 11.979 11.979 0.313 -0.004 -0.138 0.313 -0.004 0.001 -0.043 -0.001 0.059 0.022 + 147.40 12.090 12.091 12.096 -0.124 0.343 -0.022 -0.124 0.343 -0.008 0.003 -0.043 0.067 0.022 + 147.45 11.929 11.929 11.958 -0.033 0.832 -0.184 -0.033 0.832 -0.153 0.006 -0.027 0.364 0.078 + 147.50 11.953 11.954 11.989 -0.098 0.914 -0.160 -0.098 0.914 -0.146 0.016 -0.089 0.435 0.086 + 147.55 12.124 12.127 12.156 -0.256 0.830 0.012 -0.256 0.830 0.010 -0.003 -0.212 0.377 0.106 + 147.60 11.979 11.983 12.012 -0.318 0.839 -0.134 -0.318 0.839 -0.113 0.043 -0.267 0.411 0.146 + 147.65 12.007 12.007 12.010 -0.010 0.275 -0.106 -0.010 0.275 -0.029 0.001 -0.003 0.043 0.015 + 147.70 11.858 11.862 11.865 0.298 0.258 -0.255 0.298 0.258 -0.066 -0.076 0.077 0.110 0.063 + 147.75 11.390 11.401 11.404 0.495 0.249 -0.722 0.495 0.249 -0.180 -0.358 0.123 0.415 0.210 + 147.80 11.354 11.369 11.374 0.600 0.324 -0.759 0.600 0.324 -0.246 -0.456 0.195 0.521 0.277 + 147.85 11.302 11.324 11.334 0.706 0.469 -0.811 0.706 0.469 -0.380 -0.572 0.331 0.688 0.381 + 147.90 11.461 11.463 11.464 0.232 0.074 -0.652 0.232 0.074 -0.048 -0.151 0.017 0.242 0.080 + 147.95 11.387 11.391 11.395 0.275 0.292 -0.725 0.275 0.292 -0.212 -0.200 0.081 0.344 0.151 + 148.00 11.129 11.132 11.135 0.238 0.259 -0.983 0.238 0.259 -0.255 -0.234 0.062 0.545 0.176 + 148.05 11.387 11.390 11.390 0.260 -0.091 -0.726 0.260 -0.091 0.066 -0.189 -0.024 0.301 0.101 + 148.10 11.330 11.334 11.334 0.314 0.017 -0.783 0.314 0.017 -0.013 -0.246 0.005 0.356 0.123 + 148.15 11.393 11.394 11.394 0.108 0.045 -0.719 0.108 0.045 -0.032 -0.078 0.005 0.266 0.042 + 148.20 11.454 11.454 11.456 0.027 0.220 -0.659 0.027 0.220 -0.145 -0.018 0.006 0.242 0.073 + 148.25 11.253 11.253 11.254 0.126 0.113 -0.860 0.126 0.113 -0.097 -0.108 0.014 0.384 0.073 + 148.30 11.298 11.299 11.299 -0.123 -0.026 -0.815 -0.123 -0.026 0.021 0.100 0.003 0.340 0.051 + 148.35 11.364 11.364 11.370 -0.084 -0.365 -0.749 -0.084 -0.365 0.273 0.063 0.031 0.351 0.141 + 148.40 11.309 11.310 11.328 0.163 -0.639 -0.804 0.163 -0.639 0.514 -0.131 -0.104 0.541 0.270 + 148.45 11.058 11.058 11.075 0.054 -0.620 -1.055 0.054 -0.620 0.654 -0.057 -0.034 0.750 0.329 + 148.50 11.376 11.376 11.387 0.064 -0.497 -0.737 0.064 -0.497 0.366 -0.047 -0.032 0.397 0.185 + 148.55 11.509 11.509 11.514 0.013 -0.324 -0.604 0.013 -0.324 0.196 -0.008 -0.004 0.235 0.098 + 148.60 11.346 11.349 11.352 -0.237 -0.286 -0.767 -0.237 -0.286 0.219 0.182 0.068 0.363 0.146 + 148.65 11.236 11.238 11.246 -0.224 -0.422 -0.877 -0.224 -0.422 0.370 0.196 0.094 0.498 0.215 + 148.70 11.202 11.204 11.215 0.181 -0.513 -0.911 0.181 -0.513 0.467 -0.165 -0.093 0.563 0.252 + 148.75 10.983 10.983 10.997 0.008 -0.554 -1.129 0.008 -0.554 0.625 -0.009 -0.005 0.791 0.313 + 148.80 11.052 11.054 11.078 -0.202 -0.719 -1.060 -0.202 -0.719 0.763 0.214 0.145 0.841 0.403 + 148.85 11.188 11.212 11.248 -0.731 -0.896 -0.925 -0.731 -0.896 0.829 0.676 0.655 1.096 0.627 + 148.90 11.496 11.512 11.543 -0.613 -0.836 -0.617 -0.613 -0.836 0.516 0.378 0.513 0.728 0.410 + 148.95 11.455 11.475 11.501 -0.686 -0.775 -0.658 -0.686 -0.775 0.510 0.452 0.532 0.752 0.432 + 149.00 11.631 11.668 11.685 -0.928 -0.644 -0.482 -0.928 -0.644 0.311 0.447 0.597 0.754 0.404 + 149.05 11.677 11.719 11.734 -0.988 -0.602 -0.436 -0.988 -0.602 0.262 0.430 0.595 0.764 0.390 + 149.10 11.672 11.713 11.723 -0.974 -0.486 -0.440 -0.974 -0.486 0.214 0.429 0.473 0.689 0.337 + 149.15 11.664 11.715 11.716 -1.094 -0.107 -0.449 -1.094 -0.107 0.048 0.491 0.118 0.705 0.254 + 149.20 11.775 11.864 11.864 -1.457 0.011 -0.338 -1.457 0.011 -0.004 0.493 -0.016 1.119 0.246 + 149.25 11.714 11.860 11.863 -1.853 -0.260 -0.399 -1.853 -0.260 0.104 0.739 0.482 1.830 0.444 + 149.30 11.294 11.415 11.421 -1.662 -0.341 -0.819 -1.662 -0.341 0.280 1.362 0.567 1.775 0.751 + 149.35 11.467 11.569 11.588 -1.536 -0.663 -0.646 -1.536 -0.663 0.428 0.992 1.019 1.609 0.743 + 149.40 11.513 11.680 11.690 -1.969 -0.476 -0.600 -1.969 -0.476 0.286 1.181 0.938 2.231 0.767 + 149.45 11.465 11.589 11.621 -1.691 -0.857 -0.648 -1.691 -0.857 0.556 1.096 1.450 2.007 0.950 + 149.50 11.508 11.645 11.660 -1.785 -0.577 -0.605 -1.785 -0.577 0.349 1.080 1.029 1.942 0.766 + 149.55 11.593 11.641 11.642 -1.059 -0.133 -0.520 -1.059 -0.133 0.069 0.551 0.141 0.704 0.286 + 149.60 11.589 11.641 11.643 -1.105 -0.179 -0.524 -1.105 -0.179 0.094 0.579 0.198 0.764 0.309 + 149.65 11.547 11.620 11.622 -1.297 -0.230 -0.565 -1.297 -0.230 0.130 0.733 0.298 1.028 0.401 + 149.70 11.505 11.587 11.589 -1.384 0.176 -0.608 -1.384 0.176 -0.107 0.842 -0.244 1.158 0.441 + 149.75 11.702 11.761 11.761 -1.180 0.068 -0.411 -1.180 0.068 -0.028 0.485 -0.080 0.783 0.246 + 149.80 11.552 11.656 11.656 -1.550 0.004 -0.561 -1.550 0.004 -0.002 0.869 -0.005 1.358 0.435 + 149.85 11.358 11.443 11.443 -1.398 0.017 -0.755 -1.398 0.017 -0.013 1.055 -0.023 1.262 0.528 + 149.90 11.280 11.353 11.362 -1.289 0.443 -0.833 -1.289 0.443 -0.369 1.074 -0.570 1.275 0.635 + 149.95 11.308 11.401 11.401 -1.447 0.053 -0.804 -1.447 0.053 -0.043 1.164 -0.077 1.371 0.584 + 150.00 10.894 10.972 10.984 -1.305 0.508 -1.219 -1.305 0.508 -0.620 1.591 -0.664 1.724 0.916 + 150.05 10.895 10.934 10.971 -0.926 0.899 -1.218 -0.926 0.899 -1.095 1.127 -0.832 1.574 0.889 + 150.10 10.621 10.688 10.732 -1.199 0.967 -1.492 -1.199 0.967 -1.443 1.789 -1.159 2.300 1.287 + 150.15 10.926 11.057 11.106 -1.696 1.045 -1.187 -1.696 1.045 -1.241 2.013 -1.773 2.689 1.478 + 150.20 10.987 11.106 11.138 -1.618 0.845 -1.125 -1.618 0.845 -0.951 1.821 -1.367 2.299 1.234 + 150.25 11.146 11.278 11.318 -1.719 0.946 -0.967 -1.719 0.946 -0.915 1.661 -1.626 2.392 1.249 + 150.30 11.077 11.217 11.257 -1.767 0.942 -1.036 -1.767 0.942 -0.975 1.829 -1.664 2.540 1.329 + 150.35 11.341 11.478 11.496 -1.771 0.637 -0.772 -1.771 0.637 -0.492 1.367 -1.129 2.070 0.920 + 150.40 11.108 11.246 11.276 -1.759 0.825 -1.005 -1.759 0.825 -0.829 1.768 -1.451 2.393 1.216 + 150.45 11.371 11.456 11.466 -1.392 0.469 -0.742 -1.392 0.469 -0.348 1.032 -0.653 1.354 0.635 + 150.50 11.604 11.683 11.691 -1.362 0.419 -0.509 -1.362 0.419 -0.213 0.693 -0.570 1.144 0.461 + 150.55 11.750 11.816 11.824 -1.248 0.423 -0.363 -1.248 0.423 -0.153 0.452 -0.528 0.934 0.356 + 150.60 11.758 11.801 11.819 -1.014 0.638 -0.355 -1.014 0.638 -0.227 0.360 -0.647 0.780 0.387 + 150.65 11.976 11.990 12.002 -0.589 0.533 -0.137 -0.589 0.533 -0.073 0.081 -0.314 0.325 0.166 + 150.70 11.839 11.867 11.872 -0.815 0.353 -0.274 -0.815 0.353 -0.097 0.223 -0.288 0.432 0.189 + 150.75 11.585 11.614 11.625 -0.821 0.515 -0.528 -0.821 0.515 -0.272 0.434 -0.423 0.609 0.332 + 150.80 11.416 11.451 11.461 -0.896 0.487 -0.697 -0.896 0.487 -0.339 0.624 -0.436 0.763 0.417 + 150.85 11.425 11.475 11.488 -1.064 0.550 -0.688 -1.064 0.550 -0.378 0.732 -0.585 0.954 0.505 + 150.90 11.526 11.561 11.578 -0.899 0.623 -0.587 -0.899 0.623 -0.365 0.527 -0.560 0.770 0.426 + 150.95 11.291 11.323 11.335 -0.852 0.522 -0.822 -0.852 0.522 -0.429 0.700 -0.445 0.837 0.467 + 151.00 11.332 11.359 11.378 -0.783 0.649 -0.781 -0.783 0.649 -0.507 0.611 -0.508 0.822 0.471 + 151.05 11.329 11.374 11.397 -1.017 0.724 -0.784 -1.017 0.724 -0.568 0.797 -0.736 1.087 0.612 + 151.10 11.857 11.898 11.909 -0.991 0.493 -0.256 -0.991 0.493 -0.126 0.254 -0.489 0.646 0.283 + 151.15 11.711 11.771 11.772 -1.184 0.118 -0.402 -1.184 0.118 -0.047 0.475 -0.139 0.788 0.249 + 151.20 11.431 11.474 11.480 -0.999 0.373 -0.682 -0.999 0.373 -0.255 0.681 -0.373 0.801 0.409 + 151.25 11.292 11.323 11.333 -0.831 0.474 -0.821 -0.831 0.474 -0.389 0.682 -0.394 0.794 0.439 + 151.30 11.306 11.317 11.337 -0.493 0.675 -0.806 -0.493 0.675 -0.545 0.398 -0.333 0.675 0.376 + 151.35 11.180 11.189 11.218 -0.457 0.795 -0.933 -0.457 0.795 -0.742 0.426 -0.364 0.856 0.465 + 151.40 10.904 10.917 10.995 -0.535 1.305 -1.208 -0.535 1.305 -1.578 0.646 -0.698 1.725 0.921 + 151.45 10.841 10.857 10.924 -0.598 1.209 -1.272 -0.598 1.209 -1.538 0.760 -0.723 1.718 0.931 + 151.50 10.716 10.729 10.809 -0.516 1.317 -1.396 -0.516 1.317 -1.840 0.721 -0.680 1.976 1.045 + 151.55 10.938 10.958 11.079 -0.663 1.634 -1.175 -0.663 1.634 -1.920 0.779 -1.084 2.246 1.169 + 151.60 11.164 11.186 11.274 -0.690 1.408 -0.949 -0.690 1.408 -1.335 0.655 -0.972 1.679 0.888 + 151.65 11.444 11.464 11.544 -0.676 1.360 -0.669 -0.676 1.360 -0.910 0.452 -0.920 1.377 0.685 + 151.70 11.491 11.498 11.569 -0.411 1.275 -0.622 -0.411 1.275 -0.793 0.255 -0.524 1.090 0.492 + 151.75 11.434 11.440 11.510 -0.370 1.268 -0.679 -0.370 1.268 -0.860 0.251 -0.469 1.102 0.506 + 151.80 11.436 11.436 11.526 -0.115 1.439 -0.677 -0.115 1.439 -0.974 0.078 -0.165 1.271 0.496 + 151.85 11.467 11.475 11.570 -0.429 1.480 -0.646 -0.429 1.480 -0.956 0.277 -0.635 1.396 0.591 + 151.90 11.439 11.453 11.505 -0.566 1.092 -0.674 -0.566 1.092 -0.736 0.381 -0.618 0.984 0.517 + 151.95 11.110 11.118 11.161 -0.419 0.980 -1.003 -0.419 0.980 -0.982 0.420 -0.411 1.070 0.572 + 152.00 11.268 11.272 11.300 -0.273 0.807 -0.845 -0.273 0.807 -0.682 0.231 -0.220 0.720 0.376 + 152.05 10.945 10.966 10.990 -0.675 0.722 -1.168 -0.675 0.722 -0.843 0.788 -0.487 1.170 0.626 + 152.10 11.047 11.074 11.107 -0.772 0.854 -1.066 -0.772 0.854 -0.910 0.823 -0.659 1.230 0.696 + 152.15 11.077 11.106 11.142 -0.799 0.889 -1.035 -0.799 0.889 -0.920 0.828 -0.710 1.250 0.713 + 152.20 11.422 11.449 11.483 -0.778 0.888 -0.691 -0.778 0.888 -0.613 0.537 -0.690 0.935 0.534 + 152.25 11.197 11.225 11.242 -0.794 0.625 -0.916 -0.794 0.625 -0.573 0.727 -0.496 0.930 0.525 + 152.30 11.161 11.233 11.238 -1.267 0.351 -0.952 -1.267 0.351 -0.334 1.206 -0.445 1.317 0.664 + 152.35 10.979 11.035 11.046 -1.107 0.504 -1.134 -1.107 0.504 -0.571 1.255 -0.558 1.382 0.744 + 152.40 10.987 11.028 11.043 -0.951 0.578 -1.126 -0.951 0.578 -0.651 1.071 -0.550 1.253 0.684 + 152.45 11.227 11.283 11.295 -1.123 0.539 -0.886 -1.123 0.539 -0.478 0.995 -0.605 1.169 0.630 + 152.50 10.915 10.948 10.956 -0.848 0.422 -1.197 -0.848 0.422 -0.506 1.015 -0.358 1.165 0.595 + 152.55 11.074 11.085 11.093 -0.506 0.414 -1.039 -0.506 0.414 -0.430 0.526 -0.210 0.754 0.356 + 152.60 11.219 11.238 11.255 -0.659 0.609 -0.894 -0.659 0.609 -0.544 0.589 -0.401 0.802 0.448 + 152.65 11.166 11.183 11.189 -0.631 0.365 -0.947 -0.631 0.365 -0.346 0.598 -0.231 0.715 0.364 + 152.70 11.301 11.315 11.318 -0.570 0.261 -0.812 -0.570 0.261 -0.212 0.463 -0.149 0.526 0.265 + 152.75 11.291 11.304 11.304 -0.544 0.087 -0.822 -0.544 0.087 -0.071 0.447 -0.047 0.489 0.228 + 152.80 11.178 11.182 11.183 -0.268 0.192 -0.934 -0.268 0.192 -0.180 0.251 -0.052 0.491 0.156 + 152.85 11.028 11.028 11.028 -0.092 0.084 -1.085 -0.092 0.084 -0.091 0.100 -0.008 0.597 0.068 + 152.90 10.898 10.898 10.906 -0.120 0.415 -1.215 -0.120 0.415 -0.504 0.146 -0.050 0.832 0.264 + 152.95 10.844 10.845 10.867 -0.094 0.692 -1.268 -0.094 0.692 -0.878 0.119 -0.065 1.048 0.444 + 153.00 11.008 11.012 11.035 -0.269 0.708 -1.104 -0.269 0.708 -0.782 0.297 -0.191 0.897 0.429 + 153.05 11.305 11.305 11.318 0.038 0.552 -0.808 0.038 0.552 -0.446 -0.031 0.021 0.480 0.224 + 153.10 11.414 11.416 11.424 -0.186 0.430 -0.699 -0.186 0.430 -0.301 0.130 -0.080 0.354 0.168 + 153.15 11.535 11.538 11.556 0.233 0.660 -0.578 0.233 0.660 -0.381 -0.134 0.154 0.412 0.216 + 153.20 11.462 11.467 11.487 0.350 0.677 -0.651 0.350 0.677 -0.441 -0.228 0.237 0.502 0.275 + 153.25 11.410 11.416 11.438 0.368 0.704 -0.703 0.368 0.704 -0.495 -0.258 0.259 0.562 0.308 + 153.30 11.168 11.172 11.214 0.315 0.965 -0.945 0.315 0.965 -0.912 -0.298 0.304 0.962 0.503 + 153.35 10.935 10.942 10.991 0.400 1.026 -1.178 0.400 1.026 -1.209 -0.471 0.410 1.300 0.680 + 153.40 11.083 11.083 11.131 0.010 1.033 -1.029 0.010 1.033 -1.063 -0.011 0.011 1.063 0.532 + 153.45 11.125 11.125 11.169 -0.022 0.994 -0.988 -0.022 0.994 -0.982 0.022 -0.022 0.982 0.491 + 153.50 11.464 11.464 11.480 0.028 0.609 -0.649 0.028 0.609 -0.395 -0.018 0.017 0.397 0.198 + 153.55 11.329 11.331 11.340 -0.197 0.466 -0.784 -0.197 0.466 -0.365 0.154 -0.092 0.435 0.203 + 153.60 11.322 11.327 11.336 -0.339 0.462 -0.791 -0.339 0.462 -0.366 0.268 -0.157 0.477 0.240 + 153.65 11.463 11.473 11.489 -0.478 0.607 -0.650 -0.478 0.607 -0.394 0.311 -0.290 0.509 0.290 + 153.70 11.549 11.550 11.555 -0.082 0.364 -0.563 -0.082 0.364 -0.205 0.046 -0.030 0.229 0.106 + 153.75 11.514 11.515 11.518 -0.130 0.279 -0.599 -0.130 0.279 -0.167 0.078 -0.036 0.227 0.094 + 153.80 11.178 11.178 11.187 -0.123 0.451 -0.935 -0.123 0.451 -0.422 0.115 -0.055 0.547 0.220 + 153.85 11.172 11.174 11.180 -0.192 0.365 -0.941 -0.192 0.365 -0.343 0.181 -0.070 0.527 0.197 + 153.90 11.219 11.219 11.228 -0.000 0.439 -0.894 -0.000 0.439 -0.393 0.000 -0.000 0.496 0.196 + 153.95 11.096 11.100 11.101 -0.292 0.138 -1.016 -0.292 0.138 -0.141 0.297 -0.040 0.569 0.166 + 154.00 10.830 10.832 10.836 -0.206 0.306 -1.283 -0.206 0.306 -0.393 0.265 -0.063 0.891 0.239 + 154.05 10.782 10.782 10.785 -0.010 0.258 -1.331 -0.010 0.258 -0.343 0.013 -0.002 0.918 0.171 + 154.10 10.887 10.897 10.898 -0.471 0.191 -1.226 -0.471 0.191 -0.234 0.577 -0.090 0.881 0.315 + 154.15 10.909 10.913 10.913 -0.324 0.028 -1.204 -0.324 0.028 -0.034 0.391 -0.009 0.778 0.196 + 154.20 10.495 10.496 10.502 -0.161 0.345 -1.618 -0.161 0.345 -0.558 0.261 -0.056 1.382 0.309 + 154.25 10.262 10.267 10.271 -0.299 0.285 -1.850 -0.299 0.285 -0.528 0.553 -0.085 1.797 0.385 + 154.30 10.357 10.358 10.373 -0.141 0.556 -1.756 -0.141 0.556 -0.976 0.248 -0.078 1.705 0.505 + 154.35 10.031 10.035 10.062 -0.307 0.734 -2.082 -0.307 0.734 -1.529 0.638 -0.225 2.485 0.836 + 154.40 10.219 10.219 10.236 -0.120 0.593 -1.894 -0.120 0.593 -1.124 0.227 -0.071 1.977 0.574 + 154.45 10.424 10.427 10.435 -0.276 0.395 -1.689 -0.276 0.395 -0.667 0.467 -0.109 1.542 0.411 + 154.50 10.466 10.474 10.484 -0.395 0.464 -1.647 -0.395 0.464 -0.765 0.651 -0.184 1.542 0.511 + 154.55 10.470 10.492 10.511 -0.678 0.629 -1.643 -0.678 0.629 -1.034 1.114 -0.426 1.777 0.789 + 154.60 10.675 10.691 10.694 -0.584 0.260 -1.438 -0.584 0.260 -0.374 0.839 -0.152 1.238 0.466 + 154.65 10.778 10.788 10.797 -0.462 0.439 -1.335 -0.462 0.439 -0.586 0.617 -0.203 1.094 0.437 + 154.70 10.561 10.563 10.569 -0.204 0.368 -1.552 -0.204 0.368 -0.572 0.316 -0.075 1.293 0.329 + 154.75 10.480 10.482 10.503 -0.243 0.653 -1.633 -0.243 0.653 -1.067 0.397 -0.159 1.576 0.575 + 154.80 10.480 10.486 10.500 -0.340 0.539 -1.633 -0.340 0.539 -0.879 0.555 -0.183 1.536 0.528 + 154.85 10.552 10.553 10.558 -0.195 0.301 -1.561 -0.195 0.301 -0.469 0.304 -0.059 1.283 0.281 + 154.90 10.818 10.819 10.822 0.080 0.279 -1.294 0.080 0.279 -0.362 -0.104 0.022 0.880 0.188 + 154.95 11.004 11.004 11.020 0.120 0.583 -1.109 0.120 0.583 -0.647 -0.133 0.070 0.793 0.332 + 155.00 10.780 10.782 10.814 -0.218 0.832 -1.333 -0.218 0.832 -1.110 0.291 -0.182 1.259 0.581 + 155.05 10.277 10.292 10.313 -0.564 0.649 -1.836 -0.564 0.649 -1.192 1.035 -0.366 2.055 0.810 + 155.10 10.158 10.186 10.226 -0.751 0.906 -1.955 -0.751 0.906 -1.771 1.469 -0.681 2.604 1.200 + 155.15 9.955 10.000 10.028 -0.950 0.747 -2.158 -0.950 0.747 -1.612 2.051 -0.710 3.059 1.352 + 155.20 10.035 10.085 10.114 -1.008 0.754 -2.078 -1.008 0.754 -1.568 2.094 -0.760 2.951 1.362 + 155.25 10.373 10.437 10.452 -1.161 0.552 -1.740 -1.161 0.552 -0.960 2.020 -0.641 2.340 1.163 + 155.30 10.416 10.466 10.481 -1.026 0.559 -1.697 -1.026 0.559 -0.949 1.741 -0.574 2.122 1.032 + 155.35 10.460 10.545 10.548 -1.342 0.213 -1.653 -1.342 0.213 -0.351 2.219 -0.285 2.290 1.132 + 155.40 10.473 10.571 10.572 -1.440 0.077 -1.640 -1.440 0.077 -0.127 2.361 -0.111 2.384 1.184 + 155.45 10.255 10.357 10.361 -1.448 0.280 -1.857 -1.448 0.280 -0.520 2.689 -0.406 2.812 1.384 + 155.50 9.898 9.980 9.997 -1.276 0.585 -2.214 -1.276 0.585 -1.296 2.826 -0.747 3.438 1.599 + 155.55 9.831 9.907 9.919 -1.220 0.494 -2.281 -1.220 0.494 -1.127 2.782 -0.602 3.468 1.531 + 155.60 9.876 9.952 9.969 -1.227 0.567 -2.236 -1.227 0.567 -1.269 2.745 -0.697 3.415 1.552 + 155.65 9.810 9.928 9.930 -1.527 0.164 -2.303 -1.527 0.164 -0.377 3.515 -0.250 3.830 1.772 + 155.70 9.631 9.749 9.753 -1.514 0.284 -2.482 -1.514 0.284 -0.705 3.758 -0.430 4.267 1.924 + 155.75 9.871 9.975 9.983 -1.433 0.403 -2.242 -1.433 0.403 -0.903 3.213 -0.578 3.621 1.694 + 155.80 9.980 10.058 10.076 -1.249 0.590 -2.132 -1.249 0.590 -1.259 2.664 -0.737 3.228 1.519 + 155.85 9.891 9.957 9.959 -1.151 0.163 -2.222 -1.151 0.163 -0.363 2.559 -0.188 3.145 1.296 + 155.90 9.711 9.738 9.738 -0.723 -0.080 -2.402 -0.723 -0.080 0.191 1.737 0.058 3.150 0.874 + 155.95 10.176 10.185 10.185 -0.427 0.046 -1.937 -0.427 0.046 -0.089 0.827 -0.020 1.968 0.416 + 156.00 10.198 10.224 10.226 -0.734 0.179 -1.915 -0.734 0.179 -0.344 1.406 -0.132 2.119 0.727 + 156.05 9.855 9.861 9.863 -0.324 0.218 -2.258 -0.324 0.218 -0.493 0.730 -0.071 2.624 0.442 + 156.10 9.927 9.930 9.943 -0.240 0.518 -2.186 -0.240 0.518 -1.132 0.526 -0.125 2.553 0.627 + 156.15 10.124 10.131 10.132 -0.367 0.129 -1.989 -0.367 0.129 -0.257 0.730 -0.047 2.053 0.388 + 156.20 9.896 9.902 9.906 -0.334 0.280 -2.217 -0.334 0.280 -0.620 0.741 -0.094 2.552 0.485 + 156.25 10.113 10.121 10.128 -0.413 0.373 -2.000 -0.413 0.373 -0.747 0.826 -0.154 2.155 0.562 + 156.30 10.295 10.306 10.332 -0.472 0.739 -1.818 -0.472 0.739 -1.344 0.858 -0.349 2.037 0.816 + 156.35 10.263 10.274 10.287 -0.478 0.528 -1.850 -0.478 0.528 -0.977 0.885 -0.253 1.965 0.671 + 156.40 10.076 10.079 10.080 -0.264 0.161 -2.037 -0.264 0.161 -0.327 0.537 -0.042 2.123 0.315 + 156.45 9.848 9.874 9.880 -0.709 0.362 -2.264 -0.709 0.362 -0.819 1.605 -0.256 2.881 0.910 + 156.50 9.982 10.025 10.035 -0.931 0.449 -2.131 -0.931 0.449 -0.956 1.983 -0.418 2.804 1.120 + 156.55 10.150 10.193 10.198 -0.933 0.312 -1.963 -0.933 0.312 -0.613 1.830 -0.291 2.410 0.976 + 156.60 9.832 9.850 9.854 -0.594 0.284 -2.281 -0.594 0.284 -0.647 1.355 -0.169 2.819 0.756 + 156.65 9.771 9.778 9.788 -0.368 0.435 -2.342 -0.368 0.435 -1.018 0.862 -0.160 2.904 0.672 + 156.70 10.001 10.013 10.015 -0.490 0.220 -2.112 -0.490 0.220 -0.464 1.035 -0.108 2.375 0.570 + 156.75 10.091 10.120 10.120 -0.770 0.075 -2.022 -0.770 0.075 -0.151 1.556 -0.058 2.343 0.782 + 156.80 9.881 9.908 9.909 -0.723 0.151 -2.231 -0.723 0.151 -0.336 1.613 -0.109 2.762 0.826 + 156.85 10.011 10.051 10.051 -0.893 -0.004 -2.101 -0.893 -0.004 0.008 1.876 0.004 2.606 0.938 + 156.90 9.957 9.985 9.986 -0.747 -0.074 -2.155 -0.747 -0.074 0.159 1.610 0.055 2.604 0.809 + 156.95 10.203 10.227 10.227 -0.688 0.093 -1.909 -0.688 0.093 -0.177 1.313 -0.064 2.063 0.663 + 157.00 10.059 10.101 10.107 -0.924 0.356 -2.054 -0.924 0.356 -0.731 1.898 -0.329 2.600 1.030 + 157.05 10.264 10.334 10.343 -1.199 0.422 -1.848 -1.199 0.422 -0.780 2.216 -0.506 2.516 1.202 + 157.10 10.207 10.303 10.337 -1.402 0.833 -1.906 -1.402 0.833 -1.587 2.671 -1.168 3.145 1.660 + 157.15 10.268 10.400 10.431 -1.653 0.804 -1.845 -1.653 0.804 -1.483 3.051 -1.329 3.392 1.822 + 157.20 10.164 10.256 10.294 -1.371 0.874 -1.948 -1.371 0.874 -1.703 2.671 -1.198 3.219 1.693 + 157.25 10.323 10.403 10.427 -1.284 0.710 -1.789 -1.284 0.710 -1.270 2.298 -0.911 2.678 1.390 + 157.30 10.528 10.610 10.624 -1.312 0.559 -1.585 -1.312 0.559 -0.886 2.079 -0.733 2.272 1.188 + 157.35 10.408 10.519 10.575 -1.524 1.088 -1.705 -1.524 1.088 -1.855 2.599 -1.659 3.207 1.799 + 157.40 10.475 10.570 10.630 -1.419 1.124 -1.638 -1.419 1.124 -1.842 2.324 -1.595 2.980 1.683 + 157.45 10.407 10.465 10.529 -1.099 1.162 -1.706 -1.099 1.162 -1.982 1.875 -1.277 2.734 1.506 + 157.50 10.857 10.883 10.945 -0.751 1.164 -1.256 -0.751 1.164 -1.462 0.943 -0.874 1.748 0.974 + 157.55 11.053 11.083 11.142 -0.813 1.149 -1.060 -0.813 1.149 -1.218 0.862 -0.935 1.553 0.880 + 157.60 11.059 11.117 11.142 -1.139 0.742 -1.054 -1.139 0.742 -0.782 1.200 -0.845 1.479 0.832 + 157.65 10.725 10.811 10.831 -1.357 0.651 -1.387 -1.357 0.651 -0.903 1.883 -0.883 2.095 1.134 + 157.70 10.693 10.763 10.781 -1.227 0.617 -1.420 -1.227 0.617 -0.876 1.742 -0.756 1.951 1.046 + 157.75 10.866 10.990 11.005 -1.647 0.561 -1.247 -1.647 0.561 -0.699 2.053 -0.923 2.290 1.178 + 157.80 10.982 11.089 11.121 -1.540 0.836 -1.131 -1.540 0.836 -0.945 1.742 -1.287 2.174 1.181 + 157.85 11.126 11.236 11.255 -1.569 0.651 -0.987 -1.569 0.651 -0.643 1.549 -1.022 1.931 0.982 + 157.90 11.061 11.174 11.182 -1.586 0.441 -1.052 -1.586 0.441 -0.464 1.669 -0.700 1.909 0.934 + 157.95 11.133 11.194 11.194 -1.163 0.108 -0.980 -1.163 0.108 -0.106 1.140 -0.126 1.163 0.576 + 158.00 11.364 11.389 11.389 -0.754 0.058 -0.749 -0.754 0.058 -0.043 0.565 -0.044 0.566 0.284 + 158.05 11.196 11.230 11.231 -0.876 0.108 -0.917 -0.876 0.108 -0.099 0.803 -0.095 0.810 0.407 + 158.10 11.068 11.111 11.112 -0.972 0.145 -1.045 -0.972 0.145 -0.151 1.016 -0.141 1.029 0.518 + 158.15 11.122 11.165 11.166 -0.972 0.206 -0.991 -0.972 0.206 -0.204 0.963 -0.200 0.984 0.502 + 158.20 10.915 10.938 10.954 -0.717 0.587 -1.198 -0.717 0.587 -0.703 0.859 -0.421 1.147 0.594 + 158.25 11.001 11.012 11.066 -0.503 1.087 -1.112 -0.503 1.087 -1.209 0.559 -0.546 1.335 0.720 + 158.30 10.595 10.609 10.666 -0.554 1.099 -1.518 -0.554 1.099 -1.669 0.841 -0.609 1.910 0.983 + 158.35 10.835 10.858 10.932 -0.712 1.273 -1.278 -0.712 1.273 -1.627 0.911 -0.907 1.881 1.037 + 158.40 10.986 11.005 11.066 -0.636 1.165 -1.126 -0.636 1.165 -1.312 0.716 -0.741 1.515 0.834 + 158.45 11.288 11.317 11.374 -0.810 1.138 -0.825 -0.810 1.138 -0.939 0.668 -0.922 1.316 0.738 + 158.50 11.390 11.427 11.479 -0.926 1.095 -0.723 -0.926 1.095 -0.792 0.670 -1.014 1.290 0.725 + 158.55 11.538 11.582 11.637 -1.014 1.132 -0.575 -1.014 1.132 -0.651 0.583 -1.148 1.321 0.722 + 158.60 11.494 11.509 11.546 -0.585 0.929 -0.619 -0.585 0.929 -0.575 0.362 -0.543 0.794 0.435 + 158.65 11.236 11.271 11.309 -0.888 0.928 -0.877 -0.888 0.928 -0.813 0.779 -0.824 1.209 0.698 + 158.70 11.559 11.642 11.682 -1.390 0.958 -0.554 -1.390 0.958 -0.531 0.770 -1.331 1.578 0.813 + 158.75 11.707 11.787 11.852 -1.373 1.237 -0.406 -1.373 1.237 -0.502 0.557 -1.699 1.790 0.928 + 158.80 11.902 11.996 12.040 -1.502 1.029 -0.211 -1.502 1.029 -0.217 0.317 -1.546 1.680 0.796 + 158.85 12.091 12.161 12.207 -1.297 1.066 -0.021 -1.297 1.066 -0.023 0.028 -1.382 1.409 0.691 + 158.90 11.847 11.983 12.027 -1.803 1.021 -0.266 -1.803 1.021 -0.272 0.479 -1.841 2.182 0.961 + 158.95 12.239 12.338 12.370 -1.559 0.889 0.126 -1.559 0.889 0.112 -0.197 -1.386 1.619 0.702 + 159.00 12.145 12.270 12.297 -1.743 0.816 0.033 -1.743 0.816 0.027 -0.057 -1.422 1.852 0.712 + 159.05 11.981 12.124 12.144 -1.852 0.699 -0.131 -1.852 0.699 -0.092 0.243 -1.295 1.968 0.661 + 159.10 11.889 11.978 11.992 -1.458 0.597 -0.224 -1.458 0.597 -0.134 0.327 -0.870 1.265 0.469 + 159.15 11.605 11.703 11.716 -1.512 0.557 -0.508 -1.512 0.557 -0.283 0.768 -0.843 1.427 0.587 + 159.20 11.606 11.719 11.740 -1.626 0.707 -0.507 -1.626 0.707 -0.358 0.825 -1.149 1.700 0.730 + 159.25 11.561 11.635 11.641 -1.311 0.386 -0.552 -1.311 0.386 -0.213 0.724 -0.506 1.086 0.454 + 159.30 11.644 11.720 11.744 -1.333 0.744 -0.469 -1.333 0.744 -0.349 0.625 -0.992 1.275 0.611 + 159.35 11.749 11.853 11.882 -1.569 0.839 -0.364 -1.569 0.839 -0.305 0.571 -1.316 1.649 0.733 + 159.40 11.796 11.878 11.919 -1.401 0.988 -0.317 -1.401 0.988 -0.313 0.444 -1.384 1.520 0.744 + 159.45 12.036 12.094 12.107 -1.185 0.553 -0.077 -1.185 0.553 -0.042 0.091 -0.655 0.858 0.331 + 159.50 12.076 12.181 12.196 -1.596 0.597 -0.037 -1.596 0.597 -0.022 0.059 -0.953 1.452 0.477 + 159.55 12.021 12.126 12.142 -1.592 0.635 -0.092 -1.592 0.635 -0.059 0.147 -1.011 1.473 0.512 + 159.60 12.025 12.147 12.173 -1.717 0.796 -0.088 -1.717 0.796 -0.070 0.151 -1.366 1.795 0.688 + 159.65 12.239 12.336 12.343 -1.549 0.400 0.126 -1.549 0.400 0.050 -0.195 -0.620 1.288 0.326 + 159.70 11.967 12.049 12.055 -1.398 0.401 -0.145 -1.398 0.401 -0.058 0.203 -0.560 1.068 0.299 + 159.75 12.033 12.124 12.133 -1.482 0.489 -0.080 -1.482 0.489 -0.039 0.119 -0.724 1.221 0.368 + 159.80 11.927 12.049 12.060 -1.713 0.507 -0.186 -1.713 0.507 -0.094 0.318 -0.868 1.613 0.465 + 159.85 11.988 12.145 12.152 -1.949 0.410 -0.125 -1.949 0.410 -0.051 0.244 -0.800 1.991 0.419 + 159.90 11.828 11.928 11.934 -1.538 0.375 -0.285 -1.538 0.375 -0.107 0.438 -0.576 1.293 0.366 + 159.95 11.858 11.941 11.970 -1.406 0.845 -0.255 -1.406 0.845 -0.216 0.359 -1.189 1.378 0.630 + 160.00 12.163 12.231 12.257 -1.288 0.806 0.050 -1.288 0.806 0.040 -0.064 -1.038 1.156 0.520 + 160.05 12.176 12.268 12.291 -1.504 0.739 0.063 -1.504 0.739 0.047 -0.095 -1.111 1.406 0.558 + 160.10 12.416 12.539 12.567 -1.758 0.834 0.303 -1.758 0.834 0.252 -0.532 -1.466 1.939 0.790 + 160.15 12.298 12.428 12.472 -1.798 1.041 0.185 -1.798 1.041 0.192 -0.332 -1.871 2.174 0.955 + 160.20 12.336 12.409 12.449 -1.345 0.995 0.223 -1.345 0.995 0.222 -0.300 -1.338 1.425 0.695 + 160.25 12.323 12.394 12.406 -1.323 0.563 0.210 -1.323 0.563 0.118 -0.278 -0.745 1.055 0.402 + 160.30 12.405 12.494 12.506 -1.491 0.541 0.292 -1.491 0.541 0.158 -0.436 -0.806 1.301 0.465 + 160.35 12.450 12.509 12.527 -1.216 0.667 0.337 -1.216 0.667 0.225 -0.410 -0.811 1.019 0.468 + 160.40 13.005 13.071 13.084 -1.303 0.589 0.893 -1.303 0.589 0.525 -1.163 -0.767 1.420 0.744 + 160.45 13.024 13.091 13.108 -1.320 0.672 0.912 -1.320 0.672 0.613 -1.203 -0.887 1.512 0.808 + 160.50 12.810 12.905 12.913 -1.563 0.473 0.697 -1.563 0.473 0.329 -1.089 -0.739 1.576 0.679 + 160.55 12.865 13.018 13.022 -1.989 0.312 0.752 -1.989 0.312 0.235 -1.497 -0.621 2.311 0.819 + 160.60 12.963 13.045 13.049 -1.461 0.339 0.850 -1.461 0.339 0.288 -1.242 -0.495 1.486 0.684 + 160.65 13.067 13.121 13.127 -1.187 0.376 0.955 -1.187 0.376 0.359 -1.133 -0.447 1.231 0.635 + 160.70 12.969 12.989 12.994 -0.714 0.392 0.856 -0.714 0.392 0.335 -0.611 -0.280 0.698 0.376 + 160.75 13.060 13.086 13.087 -0.826 0.130 0.947 -0.826 0.130 0.123 -0.782 -0.108 0.798 0.400 + 160.80 13.056 13.071 13.071 -0.629 0.113 0.943 -0.629 0.113 0.106 -0.593 -0.071 0.649 0.303 + 160.85 13.086 13.102 13.104 -0.646 0.212 0.973 -0.646 0.212 0.206 -0.629 -0.137 0.705 0.338 + 160.90 13.075 13.093 13.093 -0.686 0.037 0.962 -0.686 0.037 0.036 -0.660 -0.025 0.699 0.331 + 160.95 12.902 12.923 12.925 -0.744 -0.196 0.789 -0.744 -0.196 -0.155 -0.587 0.146 0.608 0.312 + 161.00 12.779 12.822 12.823 -1.049 -0.184 0.666 -1.049 -0.184 -0.123 -0.699 0.193 0.789 0.368 + 161.05 12.315 12.361 12.361 -1.070 0.026 0.202 -1.070 0.026 0.005 -0.216 -0.028 0.593 0.109 + 161.10 12.512 12.568 12.577 -1.189 0.464 0.399 -1.189 0.464 0.185 -0.475 -0.552 0.894 0.376 + 161.15 12.255 12.298 12.307 -1.017 0.473 0.143 -1.017 0.473 0.067 -0.145 -0.481 0.640 0.253 + 161.20 11.757 11.811 11.815 -1.128 0.299 -0.356 -1.128 0.299 -0.107 0.402 -0.338 0.745 0.268 + 161.25 11.862 11.931 11.941 -1.281 0.481 -0.250 -1.281 0.481 -0.120 0.321 -0.616 0.967 0.352 + 161.30 12.003 12.036 12.061 -0.890 0.774 -0.110 -0.890 0.774 -0.085 0.098 -0.689 0.702 0.350 + 161.35 11.779 11.814 11.862 -0.908 1.063 -0.333 -0.908 1.063 -0.354 0.303 -0.965 1.033 0.536 + 161.40 11.887 11.919 11.942 -0.878 0.733 -0.226 -0.878 0.733 -0.165 0.198 -0.643 0.679 0.346 + 161.45 11.823 11.849 11.865 -0.780 0.624 -0.290 -0.780 0.624 -0.181 0.226 -0.487 0.541 0.283 + 161.50 12.021 12.049 12.055 -0.816 0.393 -0.091 -0.816 0.393 -0.036 0.075 -0.321 0.414 0.166 + 161.55 12.336 12.401 12.412 -1.265 0.509 0.224 -1.265 0.509 0.114 -0.283 -0.644 0.955 0.356 + 161.60 12.584 12.680 12.683 -1.556 0.258 0.472 -1.556 0.258 0.122 -0.734 -0.402 1.355 0.423 + 161.65 12.363 12.423 12.423 -1.215 0.117 0.251 -1.215 0.117 0.029 -0.304 -0.142 0.776 0.169 + 161.70 12.442 12.496 12.496 -1.155 0.039 0.329 -1.155 0.039 0.013 -0.380 -0.045 0.722 0.192 + 161.75 12.293 12.364 12.364 -1.320 0.103 0.180 -1.320 0.103 0.019 -0.238 -0.136 0.892 0.137 + 161.80 12.260 12.336 12.337 -1.368 -0.192 0.147 -1.368 -0.192 -0.028 -0.201 0.263 0.965 0.166 + 161.85 12.171 12.241 12.245 -1.306 -0.347 0.058 -1.306 -0.347 -0.020 -0.076 0.453 0.915 0.230 + 161.90 12.357 12.401 12.404 -1.042 -0.291 0.244 -1.042 -0.291 -0.071 -0.254 0.303 0.615 0.201 + 161.95 12.265 12.317 12.318 -1.129 -0.178 0.152 -1.129 -0.178 -0.027 -0.171 0.201 0.664 0.133 + 162.00 12.168 12.259 12.261 -1.489 -0.195 0.055 -1.489 -0.195 -0.011 -0.083 0.290 1.130 0.151 + 162.05 12.128 12.204 12.204 -1.360 0.042 0.015 -1.360 0.042 0.001 -0.020 -0.058 0.926 0.031 + 162.10 12.179 12.222 12.222 -1.022 0.126 0.066 -1.022 0.126 0.008 -0.067 -0.128 0.533 0.073 + 162.15 12.085 12.130 12.130 -1.044 -0.049 -0.028 -1.044 -0.049 0.001 0.029 0.051 0.547 0.029 + 162.20 12.203 12.226 12.226 -0.748 0.041 0.090 -0.748 0.041 0.004 -0.068 -0.030 0.285 0.037 + 162.25 11.939 12.007 12.009 -1.274 -0.222 -0.173 -1.274 -0.222 0.039 0.221 0.283 0.852 0.181 + 162.30 11.946 12.016 12.021 -1.299 -0.346 -0.167 -1.299 -0.346 0.058 0.217 0.450 0.917 0.251 + 162.35 11.590 11.675 11.675 -1.403 -0.023 -0.523 -1.403 -0.023 0.012 0.733 0.032 1.121 0.367 + 162.40 11.530 11.626 11.626 -1.493 -0.023 -0.583 -1.493 -0.023 0.013 0.870 0.034 1.285 0.436 + 162.45 11.612 11.691 11.691 -1.353 -0.066 -0.500 -1.353 -0.066 0.033 0.677 0.090 1.043 0.342 + 162.50 11.778 11.809 11.810 -0.856 0.095 -0.335 -0.856 0.095 -0.032 0.286 -0.081 0.427 0.150 + 162.55 11.991 12.028 12.033 -0.939 -0.351 -0.122 -0.939 -0.351 0.043 0.114 0.329 0.510 0.176 + 162.60 12.146 12.155 12.156 -0.474 0.136 0.033 -0.474 0.136 0.005 -0.016 -0.064 0.122 0.033 + 162.65 12.492 12.504 12.507 -0.549 0.303 0.379 -0.549 0.303 0.115 -0.208 -0.166 0.268 0.145 + 162.70 12.394 12.417 12.419 -0.762 0.234 0.281 -0.762 0.234 0.066 -0.214 -0.178 0.357 0.143 + 162.75 12.270 12.337 12.339 -1.290 0.228 0.157 -1.290 0.228 0.036 -0.202 -0.294 0.870 0.179 + 162.80 12.298 12.372 12.379 -1.346 0.426 0.186 -1.346 0.426 0.079 -0.250 -0.574 1.014 0.316 + 162.85 12.204 12.281 12.281 -1.372 -0.083 0.091 -1.372 -0.083 -0.008 -0.125 0.114 0.949 0.085 + 162.90 12.085 12.186 12.186 -1.570 0.074 -0.028 -1.570 0.074 -0.002 0.044 -0.116 1.235 0.062 + 162.95 12.072 12.142 12.142 -1.299 0.003 -0.041 -1.299 0.003 -0.000 0.053 -0.004 0.844 0.026 + 163.00 11.791 11.879 11.879 -1.441 0.092 -0.321 -1.441 0.092 -0.030 0.463 -0.132 1.093 0.241 + 163.05 11.879 12.041 12.043 -1.973 0.208 -0.234 -1.973 0.208 -0.049 0.462 -0.410 1.996 0.310 + 163.10 12.089 12.170 12.171 -1.399 -0.166 -0.024 -1.399 -0.166 0.004 0.033 0.233 0.993 0.118 + 163.15 12.168 12.234 12.236 -1.270 0.214 0.056 -1.270 0.214 0.012 -0.071 -0.272 0.831 0.141 + 163.20 12.311 12.371 12.375 -1.225 0.314 0.198 -1.225 0.314 0.062 -0.242 -0.384 0.819 0.229 + 163.25 12.401 12.451 12.452 -1.115 -0.160 0.288 -1.115 -0.160 -0.046 -0.321 0.178 0.676 0.185 + 163.30 12.570 12.641 12.641 -1.338 -0.022 0.457 -1.338 -0.022 -0.010 -0.612 0.029 1.000 0.306 + 163.35 12.333 12.434 12.437 -1.577 -0.263 0.221 -1.577 -0.263 -0.058 -0.348 0.415 1.303 0.272 + 163.40 12.066 12.169 12.170 -1.578 -0.170 -0.047 -1.578 -0.170 0.008 0.074 0.269 1.260 0.139 + 163.45 12.035 12.104 12.104 -1.296 -0.078 -0.078 -1.296 -0.078 0.006 0.101 0.101 0.846 0.072 + 163.50 12.113 12.161 12.161 -1.079 -0.016 0.000 -1.079 -0.016 -0.000 -0.000 0.017 0.583 0.009 + 163.55 11.940 12.006 12.010 -1.266 0.298 -0.173 -1.266 0.298 -0.052 0.219 -0.378 0.861 0.220 + 163.60 11.690 11.716 11.722 -0.789 0.367 -0.423 -0.789 0.367 -0.155 0.334 -0.290 0.468 0.234 + 163.65 11.658 11.700 11.702 -0.992 0.168 -0.455 -0.992 0.168 -0.076 0.451 -0.166 0.610 0.243 + 163.70 11.452 11.528 11.532 -1.323 0.273 -0.661 -1.323 0.273 -0.181 0.874 -0.362 1.130 0.481 + 163.75 11.563 11.697 11.706 -1.765 0.463 -0.550 -1.765 0.463 -0.255 0.970 -0.818 1.815 0.647 + 163.80 11.811 11.905 11.911 -1.493 0.373 -0.302 -1.493 0.373 -0.113 0.451 -0.557 1.229 0.363 + 163.85 11.958 12.069 12.074 -1.637 0.339 -0.155 -1.637 0.339 -0.053 0.254 -0.556 1.409 0.306 + 163.90 12.014 12.095 12.098 -1.396 0.255 -0.099 -1.396 0.255 -0.025 0.138 -0.356 1.012 0.191 + 163.95 11.805 11.872 11.884 -1.265 0.531 -0.308 -1.265 0.531 -0.164 0.390 -0.671 0.988 0.397 + 164.00 11.598 11.675 11.684 -1.343 0.437 -0.515 -1.343 0.437 -0.225 0.691 -0.587 1.130 0.467 + 164.05 11.839 11.876 11.913 -0.943 0.937 -0.274 -0.943 0.937 -0.257 0.258 -0.883 0.921 0.478 + 164.10 11.876 11.902 11.927 -0.783 0.781 -0.237 -0.783 0.781 -0.185 0.186 -0.612 0.640 0.333 + 164.15 11.973 12.007 12.015 -0.896 0.444 -0.139 -0.896 0.444 -0.062 0.125 -0.398 0.510 0.211 + 164.20 11.931 11.959 11.959 -0.821 0.102 -0.182 -0.821 0.102 -0.019 0.149 -0.084 0.358 0.086 + 164.25 11.873 11.913 11.913 -0.974 0.040 -0.240 -0.974 0.040 -0.010 0.234 -0.039 0.504 0.119 + 164.30 12.068 12.105 12.105 -0.938 -0.009 -0.045 -0.938 -0.009 0.000 0.042 0.008 0.441 0.021 + 164.35 11.985 12.074 12.075 -1.469 0.093 -0.128 -1.469 0.093 -0.012 0.188 -0.136 1.091 0.116 + 164.40 11.920 12.025 12.026 -1.586 -0.196 -0.193 -1.586 -0.196 0.038 0.306 0.310 1.295 0.219 + 164.45 11.785 11.882 11.893 -1.512 -0.508 -0.328 -1.512 -0.508 0.166 0.495 0.767 1.326 0.464 + 164.50 11.496 11.563 11.570 -1.249 -0.397 -0.617 -1.249 -0.397 0.245 0.771 0.496 1.050 0.475 + 164.55 11.515 11.558 11.560 -0.999 -0.211 -0.598 -0.999 -0.211 0.126 0.598 0.211 0.700 0.323 + 164.60 11.586 11.621 11.621 -0.901 0.067 -0.527 -0.901 0.067 -0.035 0.474 -0.060 0.547 0.240 + 164.65 11.535 11.584 11.584 -1.059 0.142 -0.578 -1.059 0.142 -0.082 0.612 -0.150 0.738 0.318 + 164.70 11.794 11.860 11.860 -1.246 0.024 -0.319 -1.246 0.024 -0.008 0.397 -0.030 0.827 0.199 + 164.75 12.297 12.348 12.349 -1.117 -0.128 0.185 -1.117 -0.128 -0.024 -0.206 0.143 0.649 0.126 + 164.80 12.074 12.120 12.131 -1.058 -0.509 -0.039 -1.058 -0.509 0.020 0.041 0.539 0.690 0.270 + 164.85 11.974 11.996 12.015 -0.730 -0.664 -0.139 -0.730 -0.664 0.092 0.101 0.484 0.496 0.252 + 164.90 11.521 11.533 11.541 -0.520 -0.421 -0.591 -0.520 -0.421 0.249 0.308 0.219 0.399 0.226 + 164.95 11.373 11.392 11.396 -0.655 -0.313 -0.740 -0.655 -0.313 0.232 0.485 0.205 0.538 0.288 + 165.00 11.008 11.023 11.023 -0.559 -0.025 -1.104 -0.559 -0.025 0.028 0.617 0.014 0.766 0.309 + 165.05 11.449 11.468 11.470 -0.663 0.201 -0.664 -0.663 0.201 -0.134 0.440 -0.133 0.460 0.239 + 165.10 11.602 11.650 11.651 -1.064 0.088 -0.511 -1.064 0.088 -0.045 0.544 -0.094 0.700 0.277 + 165.15 11.637 11.688 11.691 -1.087 0.241 -0.475 -1.087 0.241 -0.115 0.517 -0.263 0.733 0.295 + 165.20 11.895 11.948 11.953 -1.118 0.342 -0.218 -1.118 0.342 -0.074 0.243 -0.383 0.707 0.230 + 165.25 12.026 12.059 12.059 -0.891 0.039 -0.087 -0.891 0.039 -0.003 0.077 -0.034 0.402 0.042 + 165.30 11.472 11.513 11.517 -0.968 0.302 -0.640 -0.968 0.302 -0.194 0.620 -0.293 0.719 0.356 + 165.35 11.297 11.354 11.358 -1.145 0.295 -0.816 -1.145 0.295 -0.240 0.935 -0.337 1.032 0.511 + 165.40 11.328 11.397 11.398 -1.250 0.164 -0.785 -1.250 0.164 -0.129 0.981 -0.205 1.102 0.505 + 165.45 11.617 11.681 11.681 -1.221 0.121 -0.496 -1.221 0.121 -0.060 0.606 -0.148 0.876 0.313 + 165.50 11.714 11.755 11.760 -0.981 0.362 -0.399 -0.981 0.362 -0.145 0.392 -0.356 0.627 0.274 + 165.55 11.731 11.747 11.747 -0.619 -0.088 -0.382 -0.619 -0.088 0.034 0.236 0.054 0.268 0.122 + 165.60 11.522 11.528 11.531 -0.394 -0.258 -0.591 -0.394 -0.258 0.153 0.233 0.102 0.286 0.148 + 165.65 11.436 11.446 11.452 -0.480 -0.356 -0.677 -0.480 -0.356 0.241 0.325 0.171 0.408 0.220 + 165.70 11.300 11.320 11.324 -0.671 -0.280 -0.812 -0.671 -0.280 0.227 0.545 0.188 0.594 0.310 + 165.75 11.198 11.210 11.216 -0.512 -0.369 -0.914 -0.512 -0.369 0.338 0.468 0.189 0.617 0.304 + 165.80 11.017 11.030 11.036 -0.541 -0.352 -1.096 -0.541 -0.352 0.386 0.593 0.191 0.809 0.366 + 165.85 11.241 11.253 11.253 -0.531 0.011 -0.872 -0.531 0.011 -0.010 0.463 -0.006 0.521 0.231 + 165.90 11.492 11.493 11.493 -0.179 0.026 -0.621 -0.179 0.026 -0.016 0.111 -0.005 0.209 0.056 + 165.95 12.046 12.049 12.052 -0.268 -0.252 -0.067 -0.268 -0.252 0.017 0.018 0.067 0.070 0.036 + 166.00 11.860 11.863 11.874 -0.254 0.510 -0.252 -0.254 0.510 -0.129 0.064 -0.129 0.194 0.097 + 166.05 11.881 11.889 11.895 -0.450 0.354 -0.232 -0.450 0.354 -0.082 0.104 -0.159 0.190 0.103 + 166.10 11.802 11.806 11.815 -0.275 0.482 -0.310 -0.275 0.482 -0.149 0.085 -0.132 0.202 0.109 + 166.15 11.557 11.561 11.579 -0.325 0.639 -0.556 -0.325 0.639 -0.355 0.181 -0.207 0.411 0.225 + 166.20 11.587 11.587 11.617 0.043 0.830 -0.526 0.043 0.830 -0.436 -0.022 0.036 0.484 0.219 + 166.25 11.546 11.549 11.581 0.238 0.862 -0.567 0.238 0.862 -0.489 -0.135 0.205 0.561 0.274 + 166.30 11.760 11.766 11.829 -0.362 1.218 -0.352 -0.362 1.218 -0.429 0.128 -0.441 0.869 0.314 + 166.35 11.491 11.509 11.656 -0.636 1.846 -0.621 -0.636 1.846 -1.147 0.395 -1.174 2.098 0.844 + 166.40 11.565 11.607 11.770 -0.982 1.952 -0.547 -0.982 1.952 -1.069 0.537 -1.916 2.537 1.129 + 166.45 11.411 11.447 11.629 -0.912 2.048 -0.702 -0.912 2.048 -1.437 0.640 -1.868 2.760 1.221 + 166.50 11.601 11.635 11.771 -0.887 1.782 -0.512 -0.887 1.782 -0.912 0.454 -1.580 2.112 0.940 + 166.55 11.758 11.792 11.869 -0.889 1.351 -0.355 -0.889 1.351 -0.479 0.316 -1.202 1.371 0.666 + 166.60 11.621 11.664 11.708 -1.007 1.010 -0.492 -1.007 1.010 -0.497 0.496 -1.018 1.139 0.618 + 166.65 11.826 11.878 11.911 -1.110 0.892 -0.287 -1.110 0.892 -0.256 0.318 -0.990 1.055 0.536 + 166.70 11.736 11.755 11.812 -0.667 1.163 -0.377 -0.667 1.163 -0.439 0.251 -0.775 0.969 0.463 + 166.75 11.234 11.266 11.380 -0.845 1.605 -0.879 -0.845 1.605 -1.410 0.743 -1.357 2.032 1.047 + 166.80 11.333 11.381 11.504 -1.046 1.678 -0.780 -1.046 1.678 -1.308 0.816 -1.756 2.260 1.169 + 166.85 11.367 11.406 11.566 -0.943 1.919 -0.746 -0.943 1.919 -1.431 0.703 -1.810 2.564 1.206 + 166.90 11.345 11.397 11.520 -1.083 1.680 -0.768 -1.083 1.680 -1.290 0.831 -1.819 2.292 1.190 + 166.95 11.392 11.446 11.528 -1.106 1.374 -0.720 -1.106 1.374 -0.989 0.796 -1.519 1.814 0.990 + 167.00 11.140 11.187 11.280 -1.025 1.448 -0.973 -1.025 1.448 -1.409 0.997 -1.484 2.047 1.138 + 167.05 11.359 11.405 11.494 -1.028 1.425 -0.754 -1.028 1.425 -1.075 0.775 -1.465 1.828 0.988 + 167.10 11.223 11.313 11.405 -1.423 1.452 -0.890 -1.423 1.452 -1.293 1.266 -2.066 2.463 1.373 + 167.15 11.425 11.518 11.633 -1.459 1.631 -0.688 -1.459 1.631 -1.122 1.004 -2.380 2.632 1.408 + 167.20 11.464 11.547 11.673 -1.378 1.714 -0.648 -1.378 1.714 -1.112 0.894 -2.362 2.629 1.380 + 167.25 11.656 11.719 11.793 -1.208 1.322 -0.456 -1.208 1.322 -0.603 0.551 -1.597 1.708 0.897 + 167.30 11.936 11.973 12.034 -0.935 1.218 -0.177 -0.935 1.218 -0.215 0.165 -1.138 1.194 0.585 + 167.35 12.040 12.078 12.140 -0.961 1.225 -0.073 -0.961 1.225 -0.089 0.070 -1.177 1.214 0.591 + 167.40 12.103 12.164 12.213 -1.213 1.090 -0.009 -1.213 1.090 -0.010 0.011 -1.321 1.329 0.661 + 167.45 12.005 12.053 12.115 -1.084 1.224 -0.108 -1.084 1.224 -0.132 0.117 -1.326 1.342 0.669 + 167.50 11.919 11.978 12.049 -1.184 1.308 -0.194 -1.184 1.308 -0.253 0.229 -1.549 1.575 0.793 + 167.55 11.872 11.936 12.018 -1.227 1.409 -0.240 -1.227 1.409 -0.339 0.295 -1.729 1.774 0.893 + 167.60 12.018 12.087 12.128 -1.288 0.993 -0.095 -1.288 0.993 -0.094 0.122 -1.279 1.327 0.644 + 167.65 11.798 11.878 11.890 -1.373 0.554 -0.315 -1.373 0.554 -0.174 0.432 -0.760 1.145 0.446 + 167.70 12.158 12.215 12.224 -1.179 0.448 0.046 -1.179 0.448 0.020 -0.054 -0.528 0.796 0.266 + 167.75 12.149 12.241 12.255 -1.494 0.589 0.037 -1.494 0.589 0.022 -0.055 -0.880 1.291 0.441 + 167.80 12.162 12.233 12.240 -1.314 0.416 0.049 -1.314 0.416 0.021 -0.065 -0.547 0.951 0.275 + 167.85 11.813 11.882 11.885 -1.274 0.293 -0.300 -1.274 0.293 -0.088 0.382 -0.374 0.900 0.271 + 167.90 11.913 11.988 11.993 -1.338 0.369 -0.200 -1.338 0.369 -0.074 0.267 -0.494 0.983 0.283 + 167.95 12.019 12.099 12.099 -1.385 0.131 -0.094 -1.385 0.131 -0.012 0.130 -0.181 0.971 0.112 + 168.00 12.044 12.142 12.153 -1.537 0.509 -0.069 -1.537 0.509 -0.035 0.105 -0.783 1.314 0.395 + 168.05 11.766 11.852 11.867 -1.433 0.594 -0.347 -1.433 0.594 -0.206 0.498 -0.851 1.263 0.503 + 168.10 11.697 11.787 11.808 -1.448 0.704 -0.416 -1.448 0.704 -0.292 0.602 -1.019 1.383 0.610 + 168.15 11.804 11.911 11.936 -1.594 0.770 -0.309 -1.594 0.770 -0.238 0.492 -1.228 1.615 0.672 + 168.20 11.899 12.012 12.035 -1.645 0.733 -0.214 -1.645 0.733 -0.157 0.352 -1.206 1.645 0.633 + 168.25 11.616 11.767 11.816 -1.877 1.073 -0.496 -1.877 1.073 -0.533 0.932 -2.014 2.460 1.141 + 168.30 11.893 12.063 12.101 -2.023 0.955 -0.220 -2.023 0.955 -0.210 0.445 -1.932 2.526 0.997 + 168.35 12.130 12.343 12.393 -2.281 1.118 0.018 -2.281 1.118 0.020 -0.040 -2.549 3.226 1.275 + 168.40 12.104 12.258 12.308 -1.940 1.104 -0.009 -1.940 1.104 -0.010 0.017 -2.141 2.490 1.070 + 168.45 12.666 12.858 12.899 -2.218 1.018 0.553 -2.218 1.018 0.563 -1.226 -2.258 3.131 1.315 + 168.50 12.707 12.893 12.922 -2.184 0.864 0.594 -2.184 0.864 0.513 -1.297 -1.887 2.934 1.173 + 168.55 12.918 13.106 13.168 -2.213 1.276 0.805 -2.213 1.276 1.027 -1.782 -2.824 3.587 1.747 + 168.60 12.381 12.644 12.747 -2.563 1.616 0.268 -2.563 1.616 0.433 -0.688 -4.141 4.627 2.110 + 168.65 12.034 12.255 12.381 -2.317 1.758 -0.078 -2.317 1.758 -0.138 0.182 -4.073 4.232 2.040 + 168.70 11.984 12.213 12.330 -2.354 1.690 -0.129 -2.354 1.690 -0.217 0.303 -3.978 4.207 1.998 + 168.75 11.903 12.129 12.182 -2.327 1.139 -0.209 -2.327 1.139 -0.239 0.487 -2.650 3.378 1.353 + 168.80 12.136 12.319 12.353 -2.118 0.912 0.023 -2.118 0.912 0.021 -0.048 -1.931 2.659 0.966 + 168.85 12.241 12.436 12.473 -2.194 0.962 0.128 -2.194 0.962 0.123 -0.282 -2.109 2.877 1.066 + 168.90 12.341 12.482 12.511 -1.871 0.848 0.228 -1.871 0.848 0.194 -0.427 -1.586 2.136 0.827 + 168.95 12.273 12.437 12.466 -2.013 0.853 0.160 -2.013 0.853 0.136 -0.322 -1.716 2.402 0.876 + 169.00 12.008 12.179 12.227 -2.034 1.086 -0.105 -2.034 1.086 -0.114 0.214 -2.209 2.664 1.111 + 169.05 12.055 12.203 12.256 -1.898 1.132 -0.058 -1.898 1.132 -0.066 0.110 -2.149 2.444 1.076 + 169.10 12.221 12.360 12.414 -1.851 1.155 0.108 -1.851 1.155 0.125 -0.200 -2.137 2.386 1.075 + 169.15 12.168 12.348 12.379 -2.103 0.881 0.055 -2.103 0.881 0.048 -0.115 -1.853 2.600 0.929 + 169.20 12.107 12.277 12.289 -2.035 0.537 -0.006 -2.035 0.537 -0.003 0.012 -1.093 2.215 0.547 + 169.25 12.246 12.428 12.464 -2.119 0.950 0.133 -2.119 0.950 0.126 -0.281 -2.013 2.706 1.018 + 169.30 12.329 12.577 12.625 -2.485 1.100 0.216 -2.485 1.100 0.238 -0.537 -2.733 3.717 1.398 + 169.35 12.374 12.570 12.625 -2.209 1.178 0.261 -2.209 1.178 0.308 -0.577 -2.602 3.167 1.341 + 169.40 12.587 12.769 12.805 -2.150 0.958 0.474 -2.150 0.958 0.454 -1.019 -2.059 2.882 1.171 + 169.45 12.338 12.461 12.512 -1.745 1.122 0.226 -1.745 1.122 0.253 -0.394 -1.958 2.177 1.006 + 169.50 12.254 12.355 12.411 -1.576 1.176 0.142 -1.576 1.176 0.167 -0.223 -1.854 1.944 0.938 + 169.55 12.029 12.136 12.238 -1.610 1.577 -0.084 -1.610 1.577 -0.133 0.135 -2.539 2.543 1.273 + 169.60 11.873 12.026 12.156 -1.917 1.767 -0.240 -1.917 1.767 -0.424 0.460 -3.386 3.426 1.722 + 169.65 11.871 12.016 12.139 -1.858 1.728 -0.242 -1.858 1.728 -0.418 0.449 -3.211 3.248 1.634 + 169.70 11.909 12.048 12.178 -1.827 1.772 -0.204 -1.827 1.772 -0.362 0.373 -3.237 3.259 1.639 + 169.75 12.458 12.582 12.696 -1.760 1.697 0.346 -1.760 1.697 0.587 -0.608 -2.986 3.047 1.551 + 169.80 12.312 12.402 12.475 -1.493 1.349 0.199 -1.493 1.349 0.269 -0.298 -2.013 2.043 1.026 + 169.85 12.404 12.494 12.530 -1.492 0.950 0.292 -1.492 0.950 0.277 -0.435 -1.418 1.607 0.754 + 169.90 12.573 12.648 12.689 -1.368 1.026 0.461 -1.368 1.026 0.473 -0.630 -1.403 1.568 0.805 + 169.95 12.360 12.409 12.478 -1.108 1.309 0.247 -1.108 1.309 0.323 -0.274 -1.450 1.500 0.755 + 170.00 12.556 12.627 12.670 -1.329 1.050 0.444 -1.329 1.050 0.466 -0.590 -1.396 1.533 0.793 + 170.05 12.464 12.542 12.598 -1.404 1.179 0.351 -1.404 1.179 0.414 -0.492 -1.655 1.742 0.888 + 170.10 12.180 12.286 12.368 -1.610 1.420 0.067 -1.610 1.420 0.096 -0.109 -2.286 2.307 1.146 + 170.15 12.238 12.374 12.471 -1.828 1.550 0.126 -1.828 1.550 0.195 -0.230 -2.833 2.879 1.424 + 170.20 12.302 12.426 12.494 -1.751 1.297 0.190 -1.751 1.297 0.246 -0.332 -2.271 2.392 1.154 + 170.25 12.325 12.391 12.450 -1.276 1.213 0.212 -1.276 1.213 0.258 -0.271 -1.547 1.572 0.796 + 170.30 12.263 12.369 12.442 -1.618 1.351 0.150 -1.618 1.351 0.203 -0.242 -2.185 2.232 1.104 + 170.35 12.535 12.659 12.730 -1.772 1.343 0.422 -1.772 1.343 0.566 -0.747 -2.379 2.560 1.279 + 170.40 12.276 12.389 12.459 -1.669 1.321 0.163 -1.669 1.321 0.215 -0.272 -2.204 2.278 1.116 + 170.45 12.062 12.148 12.196 -1.447 1.071 -0.051 -1.447 1.071 -0.054 0.074 -1.549 1.621 0.776 + 170.50 12.196 12.269 12.312 -1.337 1.028 0.083 -1.337 1.028 0.086 -0.111 -1.374 1.425 0.691 + 170.55 12.286 12.379 12.394 -1.519 0.608 0.173 -1.519 0.608 0.105 -0.263 -0.923 1.354 0.483 + 170.60 12.075 12.173 12.191 -1.540 0.676 -0.038 -1.540 0.676 -0.026 0.058 -1.041 1.415 0.522 + 170.65 12.280 12.332 12.348 -1.137 0.629 0.167 -1.137 0.629 0.105 -0.190 -0.716 0.858 0.374 + 170.70 12.326 12.357 12.381 -0.876 0.766 0.213 -0.876 0.766 0.163 -0.187 -0.671 0.700 0.358 + 170.75 12.389 12.416 12.474 -0.826 1.200 0.276 -0.826 1.200 0.331 -0.228 -0.991 1.099 0.535 + 170.80 12.760 12.781 12.797 -0.739 0.635 0.647 -0.739 0.635 0.411 -0.478 -0.469 0.684 0.393 + 170.85 12.940 12.982 12.998 -1.052 0.633 0.827 -1.052 0.633 0.523 -0.870 -0.665 1.095 0.607 + 170.90 12.800 12.825 12.841 -0.793 0.655 0.687 -0.793 0.655 0.450 -0.545 -0.519 0.765 0.438 + 170.95 12.990 13.024 13.032 -0.943 0.470 0.877 -0.943 0.470 0.412 -0.827 -0.443 0.939 0.512 + 171.00 13.279 13.292 13.292 -0.586 0.082 1.166 -0.586 0.082 0.095 -0.683 -0.048 0.855 0.346 + 171.05 13.188 13.194 13.206 -0.388 0.557 1.075 -0.388 0.557 0.599 -0.418 -0.216 0.809 0.381 + 171.10 13.490 13.501 13.514 -0.546 0.587 1.378 -0.546 0.587 0.809 -0.753 -0.321 1.271 0.575 + 171.15 13.078 13.089 13.097 -0.530 0.446 0.966 -0.530 0.446 0.431 -0.512 -0.236 0.706 0.355 + 171.20 13.020 13.026 13.032 -0.375 0.390 0.908 -0.375 0.390 0.354 -0.340 -0.146 0.558 0.256 + 171.25 12.984 12.994 12.996 -0.510 0.211 0.871 -0.510 0.211 0.184 -0.444 -0.108 0.532 0.246 + 171.30 12.935 12.955 12.958 -0.709 0.283 0.822 -0.709 0.283 0.233 -0.583 -0.201 0.629 0.330 + 171.35 12.872 12.902 12.903 -0.872 0.178 0.759 -0.872 0.178 0.135 -0.662 -0.155 0.684 0.347 + 171.40 12.944 12.987 12.993 -1.060 0.370 0.831 -1.060 0.370 0.307 -0.881 -0.392 0.975 0.506 + 171.45 12.917 12.970 12.971 -1.174 0.190 0.804 -1.174 0.190 0.153 -0.944 -0.223 1.030 0.491 + 171.50 12.846 12.885 12.890 -1.005 0.370 0.733 -1.005 0.370 0.271 -0.737 -0.372 0.842 0.434 + 171.55 12.746 12.780 12.781 -0.929 0.198 0.633 -0.929 0.198 0.125 -0.588 -0.184 0.652 0.314 + 171.60 13.063 13.099 13.102 -0.966 -0.265 0.951 -0.966 -0.265 -0.252 -0.918 0.256 0.953 0.493 + 171.65 12.950 12.985 12.989 -0.956 -0.339 0.837 -0.956 -0.339 -0.283 -0.800 0.324 0.865 0.454 + 171.70 12.677 12.707 12.715 -0.876 -0.447 0.564 -0.876 -0.447 -0.252 -0.494 0.391 0.643 0.340 + 171.75 12.820 12.877 12.885 -1.208 -0.456 0.707 -1.208 -0.456 -0.323 -0.854 0.551 1.084 0.533 + 171.80 12.823 12.887 12.889 -1.288 -0.210 0.710 -1.288 -0.210 -0.149 -0.914 0.270 1.104 0.482 + 171.85 12.884 12.934 12.941 -1.140 -0.417 0.771 -1.140 -0.417 -0.321 -0.878 0.475 1.033 0.524 + 171.90 12.675 12.723 12.735 -1.098 -0.544 0.563 -1.098 -0.544 -0.306 -0.618 0.597 0.909 0.456 + 171.95 12.748 12.798 12.813 -1.135 -0.614 0.635 -1.135 -0.614 -0.390 -0.721 0.697 1.035 0.538 + 172.00 12.630 12.674 12.677 -1.054 -0.277 0.518 -1.054 -0.277 -0.144 -0.545 0.292 0.727 0.318 + 172.05 12.712 12.756 12.759 -1.058 -0.288 0.599 -1.058 -0.288 -0.173 -0.634 0.305 0.781 0.362 + 172.10 13.138 13.173 13.180 -0.949 -0.434 1.026 -0.949 -0.434 -0.445 -0.973 0.412 1.070 0.573 + 172.15 13.427 13.445 13.451 -0.693 -0.403 1.314 -0.693 -0.403 -0.529 -0.911 0.279 1.185 0.545 + 172.20 13.085 13.090 13.101 -0.347 -0.539 0.972 -0.347 -0.539 -0.524 -0.337 0.187 0.678 0.325 + 172.25 12.591 12.592 12.601 -0.203 -0.474 0.478 -0.203 -0.474 -0.226 -0.097 0.096 0.247 0.132 + 172.30 12.773 12.786 12.811 -0.573 -0.805 0.660 -0.573 -0.805 -0.531 -0.378 0.461 0.705 0.399 + 172.35 12.753 12.767 12.798 -0.594 -0.894 0.640 -0.594 -0.894 -0.572 -0.380 0.531 0.781 0.434 + 172.40 13.005 13.031 13.038 -0.824 -0.415 0.892 -0.824 -0.415 -0.370 -0.735 0.342 0.823 0.446 + 172.45 12.949 12.981 12.990 -0.920 -0.481 0.836 -0.920 -0.481 -0.402 -0.769 0.443 0.888 0.487 + 172.50 12.425 12.466 12.479 -1.013 -0.564 0.312 -1.013 -0.564 -0.176 -0.316 0.571 0.720 0.338 + 172.55 12.528 12.567 12.583 -0.985 -0.643 0.415 -0.985 -0.643 -0.267 -0.409 0.633 0.778 0.400 + 172.60 12.623 12.649 12.650 -0.824 -0.154 0.510 -0.824 -0.154 -0.078 -0.420 0.127 0.481 0.223 + 172.65 12.759 12.780 12.796 -0.725 -0.633 0.647 -0.725 -0.633 -0.409 -0.469 0.459 0.672 0.386 + 172.70 12.761 12.773 12.777 -0.552 -0.329 0.648 -0.552 -0.329 -0.213 -0.358 0.182 0.417 0.227 + 172.75 12.754 12.765 12.775 -0.514 -0.506 0.641 -0.514 -0.506 -0.325 -0.330 0.260 0.466 0.265 + 172.80 12.597 12.607 12.629 -0.491 -0.751 0.484 -0.491 -0.751 -0.364 -0.238 0.369 0.520 0.285 + 172.85 12.954 12.958 13.009 -0.344 -1.140 0.841 -0.344 -1.140 -0.959 -0.289 0.392 1.063 0.538 + 172.90 13.148 13.150 13.200 -0.204 -1.149 1.036 -0.204 -1.149 -1.190 -0.211 0.234 1.217 0.616 + 172.95 13.087 13.090 13.156 -0.246 -1.318 0.975 -0.246 -1.318 -1.284 -0.240 0.325 1.373 0.673 + 173.00 12.940 12.942 13.011 -0.255 -1.332 0.827 -0.255 -1.332 -1.102 -0.211 0.340 1.262 0.586 + 173.05 13.049 13.052 13.132 -0.281 -1.444 0.936 -0.281 -1.444 -1.351 -0.263 0.406 1.520 0.718 + 173.10 13.013 13.015 13.139 -0.229 -1.799 0.901 -0.229 -1.799 -1.620 -0.206 0.412 2.050 0.842 + 173.15 13.043 13.043 13.118 -0.045 -1.401 0.930 -0.045 -1.401 -1.303 -0.042 0.063 1.415 0.653 + 173.20 13.319 13.322 13.365 -0.246 -1.072 1.207 -0.246 -1.072 -1.294 -0.297 0.264 1.333 0.677 + 173.25 13.233 13.237 13.259 -0.340 -0.763 1.120 -0.340 -0.763 -0.855 -0.381 0.259 0.976 0.486 + 173.30 13.115 13.115 13.147 -0.060 -0.927 1.002 -0.060 -0.927 -0.929 -0.060 0.055 0.933 0.466 + 173.35 13.043 13.045 13.071 0.211 -0.828 0.930 0.211 -0.828 -0.770 0.196 -0.175 0.798 0.407 + 173.40 12.877 12.879 12.888 -0.215 -0.485 0.764 -0.215 -0.485 -0.371 -0.164 0.104 0.433 0.209 + 173.45 12.929 12.934 12.947 -0.388 -0.570 0.816 -0.388 -0.570 -0.465 -0.316 0.221 0.570 0.302 + 173.50 13.112 13.127 13.141 -0.625 -0.602 1.000 -0.625 -0.602 -0.601 -0.625 0.376 0.876 0.473 + 173.55 12.993 13.000 13.025 -0.429 -0.801 0.881 -0.429 -0.801 -0.706 -0.378 0.344 0.801 0.435 + 173.60 12.791 12.799 12.805 -0.452 -0.371 0.679 -0.452 -0.371 -0.252 -0.306 0.168 0.401 0.215 + 173.65 12.990 12.998 13.009 -0.432 -0.553 0.878 -0.432 -0.553 -0.486 -0.379 0.239 0.631 0.330 + 173.70 13.059 13.065 13.074 -0.411 -0.492 0.946 -0.411 -0.492 -0.465 -0.388 0.202 0.653 0.319 + 173.75 12.910 12.913 12.925 -0.277 -0.565 0.797 -0.277 -0.565 -0.450 -0.221 0.156 0.516 0.263 + 173.80 12.616 12.617 12.618 -0.181 -0.080 0.503 -0.181 -0.080 -0.040 -0.091 0.014 0.146 0.050 + 173.85 12.653 12.657 12.658 -0.316 -0.160 0.540 -0.316 -0.160 -0.087 -0.171 0.051 0.209 0.099 + 173.90 13.011 13.024 13.024 -0.598 0.011 0.898 -0.598 0.011 0.010 -0.537 -0.007 0.582 0.269 + 173.95 13.101 13.112 13.114 -0.540 0.221 0.988 -0.540 0.221 0.219 -0.533 -0.120 0.658 0.294 + 174.00 13.066 13.077 13.077 -0.545 0.085 0.953 -0.545 0.085 0.081 -0.520 -0.047 0.606 0.264 + 174.05 13.360 13.364 13.364 -0.332 0.005 1.247 -0.332 0.005 0.007 -0.414 -0.002 0.833 0.207 + 174.10 13.204 13.210 13.213 -0.408 0.260 1.091 -0.408 0.260 0.284 -0.445 -0.106 0.713 0.269 + 174.15 12.894 12.895 12.896 -0.214 0.070 0.781 -0.214 0.070 0.055 -0.167 -0.015 0.330 0.088 + 174.20 12.798 12.801 12.802 0.254 -0.196 0.685 0.254 -0.196 -0.134 0.174 -0.050 0.286 0.113 + 174.25 12.941 12.941 12.947 0.041 -0.373 0.829 0.041 -0.373 -0.309 0.034 -0.015 0.414 0.156 + 174.30 12.746 12.746 12.757 -0.013 -0.513 0.634 -0.013 -0.513 -0.325 -0.008 0.007 0.332 0.163 + 174.35 12.732 12.733 12.734 0.146 -0.172 0.619 0.146 -0.172 -0.107 0.090 -0.025 0.217 0.071 + 174.40 12.756 12.759 12.759 0.273 -0.097 0.643 0.273 -0.097 -0.063 0.176 -0.027 0.249 0.094 + 174.45 12.780 12.790 12.793 0.494 -0.271 0.667 0.494 -0.271 -0.181 0.330 -0.134 0.381 0.200 + 174.50 12.587 12.594 12.594 0.422 0.072 0.474 0.422 0.072 0.034 0.200 0.030 0.204 0.103 + 174.55 12.633 12.638 12.638 0.329 -0.079 0.521 0.329 -0.079 -0.041 0.171 -0.026 0.193 0.089 + 174.60 12.603 12.621 12.621 0.674 -0.084 0.490 0.674 -0.084 -0.041 0.330 -0.056 0.351 0.169 + 174.65 12.775 12.794 12.794 0.699 0.036 0.663 0.699 0.036 0.024 0.463 0.025 0.464 0.232 + 174.70 12.889 12.904 12.907 0.621 -0.248 0.777 0.621 -0.248 -0.193 0.482 -0.154 0.525 0.271 + 174.75 12.727 12.744 12.747 0.666 -0.284 0.614 0.666 -0.284 -0.175 0.409 -0.190 0.451 0.242 + 174.80 12.635 12.648 12.649 0.594 0.091 0.522 0.594 0.091 0.047 0.310 0.054 0.317 0.159 + 174.85 12.496 12.515 12.519 0.686 0.327 0.384 0.686 0.327 0.126 0.263 0.225 0.362 0.184 + 174.90 12.718 12.725 12.726 0.419 0.203 0.605 0.419 0.203 0.123 0.253 0.085 0.291 0.147 + 174.95 12.501 12.506 12.533 0.351 0.825 0.388 0.351 0.825 0.321 0.136 0.290 0.478 0.227 + 175.00 12.272 12.309 12.325 0.961 0.626 0.159 0.961 0.626 0.099 0.153 0.601 0.670 0.314 + 175.05 12.409 12.437 12.439 0.828 0.202 0.296 0.828 0.202 0.060 0.246 0.167 0.407 0.151 + 175.10 12.412 12.432 12.435 0.694 -0.282 0.300 0.694 -0.282 -0.084 0.208 -0.196 0.325 0.149 + 175.15 12.583 12.619 12.622 0.955 -0.251 0.470 0.955 -0.251 -0.118 0.449 -0.239 0.598 0.261 + 175.20 12.667 12.672 12.673 0.369 -0.136 0.554 0.369 -0.136 -0.076 0.204 -0.050 0.231 0.112 + 175.25 12.704 12.712 12.713 0.442 -0.146 0.592 0.442 -0.146 -0.086 0.261 -0.064 0.283 0.141 + 175.30 12.643 12.655 12.658 0.555 -0.267 0.530 0.555 -0.267 -0.141 0.294 -0.148 0.330 0.179 + 175.35 12.708 12.709 12.714 0.167 -0.337 0.595 0.167 -0.337 -0.200 0.100 -0.056 0.248 0.115 + 175.40 12.726 12.728 12.737 0.225 -0.482 0.613 0.225 -0.482 -0.295 0.138 -0.109 0.329 0.172 + 175.45 12.980 12.981 12.990 0.162 -0.495 0.867 0.162 -0.495 -0.430 0.140 -0.080 0.512 0.229 + 175.50 12.842 12.843 12.850 0.167 -0.440 0.729 0.167 -0.440 -0.321 0.122 -0.074 0.377 0.176 + 175.55 12.846 12.847 12.847 -0.175 -0.097 0.733 -0.175 -0.097 -0.071 -0.129 0.017 0.289 0.074 + 175.60 13.151 13.154 13.168 -0.282 -0.598 1.038 -0.282 -0.598 -0.621 -0.293 0.169 0.758 0.354 + 175.65 13.302 13.303 13.308 -0.097 -0.387 1.189 -0.097 -0.387 -0.460 -0.115 0.037 0.787 0.238 + 175.70 13.170 13.172 13.179 -0.207 -0.429 1.058 -0.207 -0.429 -0.454 -0.218 0.089 0.673 0.256 + 175.75 13.294 13.301 13.308 -0.436 -0.437 1.181 -0.436 -0.437 -0.516 -0.514 0.190 0.888 0.377 + 175.80 13.293 13.296 13.307 -0.296 -0.541 1.180 -0.296 -0.541 -0.638 -0.350 0.160 0.886 0.372 + 175.85 13.190 13.197 13.225 -0.418 -0.868 1.077 -0.418 -0.868 -0.935 -0.450 0.363 1.044 0.549 + 175.90 13.319 13.319 13.337 -0.069 -0.676 1.206 -0.069 -0.676 -0.816 -0.083 0.047 0.959 0.411 + 175.95 13.402 13.403 13.431 0.167 -0.860 1.289 0.167 -0.860 -1.109 0.216 -0.144 1.215 0.569 + 176.00 13.374 13.374 13.422 0.091 -1.139 1.261 0.091 -1.139 -1.437 0.115 -0.104 1.448 0.723 + 176.05 13.312 13.312 13.346 -0.090 -0.959 1.199 -0.090 -0.959 -1.150 -0.108 0.087 1.183 0.579 + 176.10 13.359 13.359 13.373 0.027 -0.605 1.246 0.027 -0.605 -0.754 0.034 -0.017 0.960 0.378 + 176.15 13.337 13.343 13.347 -0.382 -0.333 1.224 -0.382 -0.333 -0.408 -0.468 0.127 0.878 0.317 + 176.20 13.329 13.342 13.345 -0.594 -0.261 1.216 -0.594 -0.261 -0.318 -0.722 0.155 0.950 0.402 + 176.25 13.258 13.274 13.285 -0.652 -0.541 1.145 -0.652 -0.541 -0.620 -0.747 0.353 1.015 0.516 + 176.30 13.480 13.492 13.497 -0.579 -0.368 1.367 -0.579 -0.368 -0.504 -0.792 0.213 1.170 0.481 + 176.35 13.537 13.543 13.543 -0.403 -0.043 1.424 -0.403 -0.043 -0.061 -0.574 0.017 1.096 0.289 + 176.40 13.303 13.309 13.311 -0.425 -0.217 1.190 -0.425 -0.217 -0.258 -0.506 0.092 0.822 0.288 + 176.45 13.242 13.242 13.242 -0.045 -0.024 1.129 -0.045 -0.024 -0.027 -0.051 0.001 0.639 0.029 + 176.50 13.254 13.254 13.257 -0.115 0.279 1.141 -0.115 0.279 0.318 -0.131 -0.032 0.696 0.173 + 176.55 13.022 13.032 13.032 -0.504 0.122 0.909 -0.504 0.122 0.111 -0.458 -0.061 0.548 0.238 + 176.60 12.855 12.866 12.871 -0.532 -0.350 0.742 -0.532 -0.350 -0.259 -0.395 0.186 0.478 0.254 + 176.65 12.574 12.583 12.591 -0.495 -0.426 0.461 -0.495 -0.426 -0.196 -0.228 0.211 0.320 0.184 + 176.70 12.774 12.779 12.797 -0.364 -0.666 0.661 -0.364 -0.666 -0.441 -0.241 0.242 0.507 0.279 + 176.75 12.859 12.860 12.864 -0.178 -0.304 0.746 -0.178 -0.304 -0.227 -0.133 0.054 0.340 0.134 + 176.80 12.886 12.887 12.887 -0.171 -0.062 0.773 -0.171 -0.062 -0.048 -0.132 0.011 0.315 0.070 + 176.85 13.124 13.130 13.137 -0.392 -0.455 1.011 -0.392 -0.455 -0.460 -0.397 0.178 0.691 0.316 + 176.90 13.097 13.106 13.111 -0.491 -0.371 0.984 -0.491 -0.371 -0.365 -0.483 0.182 0.673 0.316 + 176.95 13.242 13.244 13.248 -0.253 -0.291 1.129 -0.253 -0.291 -0.329 -0.286 0.074 0.712 0.221 + 177.00 13.338 13.340 13.343 -0.270 -0.284 1.225 -0.270 -0.284 -0.348 -0.331 0.077 0.827 0.243 + 177.05 13.484 13.487 13.493 -0.298 -0.395 1.371 -0.298 -0.395 -0.542 -0.409 0.118 1.062 0.344 + 177.10 13.439 13.443 13.446 -0.338 -0.270 1.326 -0.338 -0.270 -0.358 -0.449 0.091 0.973 0.291 + 177.15 13.538 13.543 13.545 -0.366 -0.216 1.425 -0.366 -0.216 -0.308 -0.522 0.079 1.106 0.306 + 177.20 13.484 13.489 13.489 -0.345 -0.115 1.371 -0.345 -0.115 -0.158 -0.473 0.040 1.006 0.250 + 177.25 13.776 13.780 13.780 -0.329 -0.121 1.663 -0.329 -0.121 -0.202 -0.548 0.040 1.444 0.293 + 177.30 13.871 13.873 13.875 -0.218 -0.284 1.758 -0.218 -0.284 -0.499 -0.384 0.062 1.609 0.316 + 177.35 13.591 13.594 13.594 -0.268 -0.022 1.479 -0.268 -0.022 -0.033 -0.397 0.006 1.129 0.199 + 177.40 13.514 13.524 13.530 -0.520 -0.388 1.401 -0.520 -0.388 -0.544 -0.729 0.202 1.192 0.466 + 177.45 13.581 13.588 13.592 -0.440 -0.326 1.468 -0.440 -0.326 -0.478 -0.647 0.143 1.228 0.409 + 177.50 13.757 13.775 13.779 -0.702 -0.350 1.644 -0.702 -0.350 -0.576 -1.155 0.246 1.660 0.657 + 177.55 13.809 13.861 13.877 -1.201 -0.653 1.696 -1.201 -0.653 -1.108 -2.036 0.784 2.373 1.224 + 177.60 13.780 13.814 13.833 -0.968 -0.726 1.667 -0.968 -0.726 -1.211 -1.613 0.703 2.122 1.068 + 177.65 13.891 13.927 13.942 -0.991 -0.648 1.779 -0.991 -0.648 -1.153 -1.763 0.643 2.283 1.101 + 177.70 13.758 13.815 13.836 -1.245 -0.774 1.645 -1.245 -0.774 -1.273 -2.049 0.963 2.428 1.299 + 177.75 13.501 13.542 13.560 -1.057 -0.701 1.388 -1.057 -0.701 -0.973 -1.467 0.742 1.768 0.955 + 177.80 13.598 13.643 13.673 -1.102 -0.900 1.486 -1.102 -0.900 -1.337 -1.638 0.992 2.116 1.168 + 177.85 13.389 13.455 13.516 -1.330 -1.290 1.276 -1.330 -1.290 -1.646 -1.697 1.716 2.531 1.461 + 177.90 13.293 13.377 13.473 -1.501 -1.600 1.180 -1.501 -1.600 -1.888 -1.771 2.402 3.103 1.766 + 177.95 13.492 13.574 13.662 -1.490 -1.554 1.379 -1.490 -1.554 -2.142 -2.055 2.316 3.268 1.882 + 178.00 13.588 13.683 13.795 -1.613 -1.747 1.475 -1.613 -1.747 -2.578 -2.380 2.819 3.916 2.250 + 178.05 13.696 13.780 13.879 -1.515 -1.662 1.583 -1.515 -1.662 -2.631 -2.398 2.517 3.781 2.180 + 178.10 13.758 13.872 13.967 -1.775 -1.625 1.645 -1.775 -1.625 -2.674 -2.921 2.885 4.250 2.450 + 178.15 13.756 13.849 14.001 -1.607 -2.054 1.643 -1.607 -2.054 -3.375 -2.640 3.300 4.750 2.704 + 178.20 14.048 14.149 14.297 -1.689 -2.050 1.935 -1.689 -2.050 -3.968 -3.269 3.464 5.402 3.100 + 178.25 14.228 14.329 14.440 -1.697 -1.787 2.116 -1.697 -1.787 -3.781 -3.591 3.034 5.276 3.017 + 178.30 14.275 14.331 14.460 -1.260 -1.932 2.163 -1.260 -1.932 -4.178 -2.725 2.435 4.998 2.775 + 178.35 14.200 14.267 14.356 -1.381 -1.597 2.087 -1.381 -1.597 -3.332 -2.881 2.204 4.406 2.463 + 178.40 14.271 14.333 14.401 -1.338 -1.393 2.158 -1.338 -1.393 -3.007 -2.888 1.865 4.195 2.284 + 178.45 14.370 14.435 14.501 -1.364 -1.381 2.258 -1.364 -1.381 -3.117 -3.079 1.883 4.432 2.384 + 178.50 14.006 14.068 14.120 -1.325 -1.203 1.893 -1.325 -1.203 -2.277 -2.509 1.594 3.393 1.872 + 178.55 13.476 13.522 13.539 -1.112 -0.685 1.364 -1.112 -0.685 -0.933 -1.516 0.761 1.782 0.968 + 178.60 13.295 13.320 13.339 -0.820 -0.705 1.182 -0.820 -0.705 -0.833 -0.970 0.578 1.284 0.702 + 178.65 13.008 13.057 13.087 -1.130 -0.882 0.895 -1.130 -0.882 -0.789 -1.011 0.996 1.427 0.812 + 178.70 12.948 13.009 13.021 -1.251 -0.573 0.836 -1.251 -0.573 -0.478 -1.045 0.716 1.295 0.677 + 178.75 13.211 13.286 13.302 -1.411 -0.664 1.098 -1.411 -0.664 -0.729 -1.549 0.937 1.819 0.976 + 178.80 13.519 13.625 13.642 -1.692 -0.698 1.406 -1.692 -0.698 -0.981 -2.379 1.180 2.663 1.416 + 178.85 13.433 13.559 13.584 -1.840 -0.830 1.321 -1.840 -0.830 -1.096 -2.430 1.527 2.910 1.536 + 178.90 13.463 13.673 13.704 -2.386 -0.922 1.350 -2.386 -0.922 -1.245 -3.222 2.200 4.183 2.048 + 178.95 13.290 13.507 13.528 -2.410 -0.758 1.177 -2.410 -0.758 -0.892 -2.837 1.826 3.884 1.745 + 179.00 13.094 13.345 13.356 -2.578 -0.539 0.981 -2.578 -0.539 -0.529 -2.530 1.390 3.950 1.467 + 179.05 13.132 13.359 13.396 -2.449 -1.007 1.019 -2.449 -1.007 -1.026 -2.496 2.465 4.025 1.828 + 179.10 13.159 13.362 13.375 -2.321 -0.585 1.046 -2.321 -0.585 -0.612 -2.427 1.357 3.411 1.424 + 179.15 12.867 13.077 13.094 -2.335 -0.670 0.754 -2.335 -0.670 -0.505 -1.762 1.564 3.235 1.205 + 179.20 12.751 12.961 12.964 -2.324 -0.293 0.638 -2.324 -0.293 -0.187 -1.483 0.681 2.948 0.821 + 179.25 12.884 13.031 13.034 -1.951 -0.307 0.771 -1.951 -0.307 -0.236 -1.505 0.598 2.248 0.818 + 179.30 12.690 12.766 12.766 -1.392 0.024 0.577 -1.392 0.024 0.014 -0.803 -0.033 1.135 0.402 + 179.35 12.937 13.010 13.011 -1.380 0.119 0.824 -1.380 0.119 0.098 -1.137 -0.165 1.299 0.577 + 179.40 12.675 12.764 12.764 -1.509 0.042 0.562 -1.509 0.042 0.024 -0.848 -0.063 1.297 0.425 + 179.45 12.818 12.930 12.930 -1.699 -0.048 0.705 -1.699 -0.048 -0.034 -1.198 0.081 1.693 0.601 + 179.50 12.902 12.968 12.969 -1.312 -0.115 0.789 -1.312 -0.115 -0.091 -1.035 0.151 1.178 0.525 + 179.55 12.821 12.904 12.908 -1.462 -0.316 0.708 -1.462 -0.316 -0.224 -1.035 0.463 1.370 0.578 + 179.60 13.062 13.173 13.178 -1.709 -0.359 0.949 -1.709 -0.359 -0.341 -1.622 0.613 1.974 0.883 + 179.65 13.317 13.461 13.463 -1.970 0.167 1.204 -1.970 0.167 0.201 -2.371 -0.329 2.679 1.201 + 179.70 13.085 13.202 13.213 -1.756 0.523 0.972 -1.756 0.523 0.508 -1.707 -0.917 2.151 1.002 + 179.75 13.218 13.300 13.306 -1.476 0.395 1.105 -1.476 0.395 0.436 -1.631 -0.583 1.778 0.893 + 179.80 13.223 13.311 13.326 -1.524 0.631 1.110 -1.524 0.631 0.701 -1.692 -0.962 1.976 1.034 + 179.85 13.447 13.528 13.539 -1.475 0.543 1.334 -1.475 0.543 0.724 -1.968 -0.800 2.125 1.122 + 179.90 13.489 13.533 13.540 -1.100 0.436 1.376 -1.100 0.436 0.599 -1.514 -0.479 1.647 0.849 + 179.95 13.432 13.481 13.489 -1.154 0.455 1.319 -1.154 0.455 0.600 -1.522 -0.525 1.639 0.859 + 180.00 13.184 13.221 13.230 -0.984 0.498 1.072 -0.984 0.498 0.533 -1.054 -0.490 1.182 0.639 + 180.05 13.189 13.215 13.223 -0.830 0.441 1.076 -0.830 0.441 0.475 -0.893 -0.366 1.021 0.538 + 180.10 13.093 13.096 13.108 -0.269 0.567 0.981 -0.269 0.567 0.556 -0.264 -0.152 0.678 0.317 + 180.15 12.561 12.570 12.575 -0.457 0.380 0.449 -0.457 0.380 0.171 -0.205 -0.174 0.278 0.159 + 180.20 12.796 12.806 12.809 -0.517 0.269 0.683 -0.517 0.269 0.184 -0.353 -0.139 0.403 0.211 + 180.25 12.746 12.750 12.751 -0.323 0.183 0.633 -0.323 0.183 0.116 -0.204 -0.059 0.269 0.121 + 180.30 12.099 12.100 12.111 -0.115 0.523 -0.013 -0.115 0.523 -0.007 0.002 -0.060 0.143 0.030 + 180.35 12.191 12.191 12.196 -0.136 0.348 0.078 -0.136 0.348 0.027 -0.011 -0.047 0.073 0.028 + 180.40 12.349 12.361 12.373 -0.555 0.528 0.236 -0.555 0.528 0.125 -0.131 -0.293 0.321 0.172 + 180.45 12.555 12.581 12.591 -0.802 0.512 0.443 -0.802 0.512 0.227 -0.355 -0.411 0.551 0.294 + 180.50 12.861 12.867 12.868 -0.382 0.150 0.748 -0.382 0.150 0.112 -0.286 -0.057 0.364 0.156 + 180.55 12.538 12.553 12.557 -0.601 0.329 0.425 -0.601 0.329 0.140 -0.256 -0.198 0.325 0.176 + 180.60 12.260 12.291 12.293 -0.872 0.201 0.147 -0.872 0.201 0.030 -0.128 -0.176 0.412 0.110 + 180.65 12.339 12.357 12.358 -0.677 0.137 0.226 -0.677 0.137 0.031 -0.153 -0.093 0.264 0.091 + 180.70 12.166 12.189 12.196 -0.749 0.399 0.053 -0.749 0.399 0.021 -0.040 -0.298 0.361 0.151 + 180.75 11.952 11.982 11.992 -0.854 0.472 -0.161 -0.854 0.472 -0.076 0.137 -0.403 0.489 0.216 + 180.80 12.051 12.055 12.063 -0.307 0.434 -0.062 -0.307 0.434 -0.027 0.019 -0.133 0.143 0.069 + 180.85 12.013 12.017 12.021 -0.299 0.308 -0.099 -0.299 0.308 -0.031 0.030 -0.092 0.097 0.051 + 180.90 12.044 12.048 12.052 -0.276 0.329 -0.068 -0.276 0.329 -0.023 0.019 -0.091 0.095 0.048 + 180.95 12.345 12.345 12.366 -0.016 0.720 0.232 -0.016 0.720 0.167 -0.004 -0.011 0.286 0.084 + 181.00 12.279 12.279 12.294 0.053 0.609 0.166 0.053 0.609 0.101 0.009 0.033 0.201 0.053 + 181.05 12.089 12.089 12.095 -0.036 0.369 -0.024 -0.036 0.369 -0.009 0.001 -0.013 0.069 0.008 + 181.10 11.760 11.761 11.769 0.181 0.434 -0.353 0.181 0.434 -0.153 -0.064 0.079 0.173 0.092 + 181.15 11.794 11.796 11.802 0.232 0.374 -0.319 0.232 0.374 -0.119 -0.074 0.087 0.148 0.083 + 181.20 11.672 11.681 11.687 0.462 0.370 -0.441 0.462 0.370 -0.163 -0.204 0.171 0.272 0.156 + 181.25 11.697 11.711 11.727 0.560 0.628 -0.416 0.560 0.628 -0.261 -0.233 0.352 0.440 0.248 + 181.30 11.647 11.653 11.675 0.398 0.718 -0.466 0.398 0.718 -0.335 -0.185 0.286 0.446 0.239 + 181.35 11.630 11.670 11.692 0.960 0.728 -0.483 0.960 0.728 -0.351 -0.463 0.699 0.843 0.455 + 181.40 11.583 11.617 11.652 0.897 0.902 -0.530 0.897 0.902 -0.478 -0.475 0.808 0.949 0.526 + 181.45 11.610 11.633 11.665 0.741 0.864 -0.503 0.741 0.864 -0.435 -0.373 0.641 0.775 0.430 + 181.50 11.588 11.619 11.631 0.840 0.532 -0.524 0.840 0.532 -0.279 -0.441 0.447 0.632 0.343 + 181.55 11.416 11.469 11.490 1.106 0.692 -0.697 1.106 0.692 -0.482 -0.771 0.764 1.093 0.594 + 181.60 11.242 11.296 11.320 1.104 0.742 -0.871 1.104 0.742 -0.646 -0.961 0.819 1.264 0.709 + 181.65 11.457 11.481 11.501 0.752 0.671 -0.656 0.752 0.671 -0.441 -0.494 0.505 0.723 0.416 + 181.70 11.178 11.221 11.232 0.977 0.511 -0.935 0.977 0.511 -0.478 -0.914 0.500 1.045 0.573 + 181.75 11.337 11.367 11.370 0.828 0.288 -0.776 0.828 0.288 -0.224 -0.642 0.239 0.685 0.360 + 181.80 11.264 11.298 11.313 0.877 0.576 -0.849 0.877 0.576 -0.489 -0.744 0.504 0.910 0.512 + 181.85 11.327 11.367 11.377 0.957 0.470 -0.786 0.957 0.470 -0.369 -0.752 0.450 0.877 0.475 + 181.90 11.447 11.485 11.488 0.929 0.239 -0.665 0.929 0.239 -0.159 -0.618 0.222 0.682 0.338 + 181.95 11.415 11.439 11.449 0.730 0.491 -0.697 0.730 0.491 -0.342 -0.509 0.358 0.630 0.355 + 182.00 11.097 11.110 11.166 0.544 1.119 -1.016 0.544 1.119 -1.137 -0.553 0.609 1.290 0.701 + 182.05 11.158 11.165 11.195 0.387 0.824 -0.955 0.387 0.824 -0.787 -0.370 0.319 0.870 0.463 + 182.10 11.252 11.256 11.271 0.321 0.578 -0.861 0.321 0.578 -0.498 -0.276 0.185 0.589 0.299 + 182.15 11.017 11.018 11.052 0.150 0.861 -1.096 0.150 0.861 -0.944 -0.165 0.129 0.983 0.483 + 182.20 11.344 11.344 11.373 -0.003 0.811 -0.769 -0.003 0.811 -0.623 0.002 -0.002 0.624 0.312 + 182.25 11.339 11.342 11.375 -0.227 0.875 -0.773 -0.227 0.875 -0.677 0.176 -0.199 0.708 0.364 + 182.30 11.463 11.464 11.516 -0.160 1.093 -0.650 -0.160 1.093 -0.710 0.104 -0.175 0.821 0.369 + 182.35 11.354 11.356 11.388 -0.234 0.854 -0.759 -0.234 0.854 -0.648 0.177 -0.199 0.680 0.350 + 182.40 11.340 11.341 11.407 -0.116 1.230 -0.773 -0.116 1.230 -0.950 0.090 -0.143 1.062 0.483 + 182.45 11.513 11.514 11.563 -0.191 1.057 -0.600 -0.191 1.057 -0.634 0.115 -0.202 0.756 0.338 + 182.50 11.429 11.429 11.500 -0.108 1.278 -0.684 -0.108 1.278 -0.874 0.074 -0.139 1.056 0.444 + 182.55 11.306 11.311 11.370 -0.345 1.156 -0.807 -0.345 1.156 -0.934 0.279 -0.399 1.054 0.526 + 182.60 11.106 11.106 11.188 -0.014 1.348 -1.007 -0.014 1.348 -1.357 0.014 -0.019 1.416 0.679 + 182.65 11.024 11.034 11.099 0.461 1.202 -1.089 0.461 1.202 -1.308 -0.502 0.554 1.421 0.754 + 182.70 11.085 11.102 11.123 0.610 0.679 -1.028 0.610 0.679 -0.698 -0.627 0.414 0.945 0.513 + 182.75 11.148 11.159 11.179 0.490 0.665 -0.965 0.490 0.665 -0.641 -0.473 0.326 0.806 0.430 + 182.80 11.327 11.331 11.400 0.304 1.258 -0.786 0.304 1.258 -0.989 -0.239 0.382 1.147 0.543 + 182.85 11.542 11.545 11.591 0.230 1.036 -0.570 0.230 1.036 -0.591 -0.131 0.238 0.725 0.325 + 182.90 11.045 11.046 11.068 -0.115 0.701 -1.068 -0.115 0.701 -0.748 0.123 -0.081 0.822 0.381 + 182.95 11.476 11.489 11.502 -0.544 0.547 -0.637 -0.544 0.547 -0.348 0.347 -0.298 0.501 0.287 + 183.00 11.848 11.863 11.870 -0.591 0.411 -0.265 -0.591 0.411 -0.109 0.156 -0.243 0.294 0.154 + 183.05 11.676 11.690 11.701 -0.572 0.510 -0.436 -0.572 0.510 -0.223 0.250 -0.292 0.389 0.222 + 183.10 11.647 11.660 11.662 -0.561 -0.211 -0.466 -0.561 -0.211 0.098 0.262 0.119 0.289 0.152 + 183.15 11.612 11.616 11.618 -0.329 0.195 -0.501 -0.329 0.195 -0.098 0.165 -0.064 0.199 0.101 + 183.20 12.034 12.057 12.058 -0.754 0.106 -0.079 -0.754 0.106 -0.008 0.060 -0.080 0.293 0.050 + 183.25 12.191 12.195 12.195 -0.303 0.120 0.078 -0.303 0.120 0.009 -0.024 -0.036 0.056 0.022 + 183.30 12.364 12.370 12.370 -0.365 0.005 0.252 -0.365 0.005 0.001 -0.092 -0.002 0.098 0.046 + 183.35 12.521 12.523 12.523 -0.210 -0.016 0.409 -0.210 -0.016 -0.007 -0.086 0.003 0.106 0.043 + 183.40 12.292 12.293 12.295 -0.118 -0.265 0.179 -0.118 -0.265 -0.048 -0.021 0.031 0.058 0.030 + 183.45 12.458 12.460 12.460 -0.216 -0.118 0.345 -0.216 -0.118 -0.041 -0.075 0.026 0.090 0.044 + 183.50 12.471 12.472 12.473 0.118 -0.184 0.358 0.118 -0.184 -0.066 0.042 -0.022 0.088 0.041 + 183.55 12.384 12.386 12.392 0.239 0.390 0.271 0.239 0.390 0.106 0.065 0.093 0.141 0.077 + 183.60 12.295 12.298 12.298 0.287 0.088 0.182 0.287 0.088 0.016 0.052 0.025 0.062 0.030 + 183.65 12.327 12.334 12.335 0.396 0.154 0.215 0.396 0.154 0.033 0.085 0.061 0.113 0.055 + 183.70 12.482 12.490 12.492 0.454 0.246 0.369 0.454 0.246 0.091 0.167 0.112 0.201 0.110 + 183.75 12.497 12.505 12.507 0.443 0.209 0.384 0.443 0.209 0.080 0.170 0.093 0.194 0.105 + 183.80 12.266 12.268 12.270 0.248 0.226 0.153 0.248 0.226 0.035 0.038 0.056 0.068 0.038 + 183.85 12.223 12.223 12.229 0.109 0.359 0.110 0.109 0.359 0.039 0.012 0.039 0.076 0.028 + 183.90 12.439 12.440 12.459 0.127 0.687 0.326 0.127 0.687 0.224 0.042 0.087 0.297 0.122 + 183.95 12.481 12.482 12.498 0.194 0.636 0.368 0.194 0.636 0.234 0.071 0.123 0.289 0.137 + 184.00 12.575 12.575 12.582 0.112 0.434 0.462 0.112 0.434 0.200 0.052 0.049 0.207 0.106 + 184.05 12.514 12.518 12.533 0.296 0.613 0.401 0.296 0.613 0.246 0.119 0.181 0.313 0.164 + 184.10 12.399 12.400 12.419 0.120 0.689 0.286 0.120 0.689 0.197 0.034 0.083 0.286 0.108 + 184.15 12.438 12.438 12.455 -0.047 0.645 0.325 -0.047 0.645 0.210 -0.015 -0.030 0.262 0.106 + 184.20 12.439 12.441 12.460 0.254 0.685 0.326 0.254 0.685 0.223 0.083 0.174 0.320 0.147 + 184.25 12.333 12.337 12.354 0.326 0.638 0.220 0.326 0.638 0.140 0.072 0.208 0.281 0.131 + 184.30 12.135 12.148 12.163 0.575 0.603 0.022 0.575 0.603 0.013 0.013 0.347 0.348 0.174 + 184.35 12.184 12.193 12.207 0.465 0.578 0.071 0.465 0.578 0.041 0.033 0.269 0.278 0.137 + 184.40 12.403 12.403 12.411 0.126 0.449 0.290 0.126 0.449 0.130 0.036 0.056 0.151 0.073 + 184.45 12.750 12.751 12.756 0.078 0.384 0.638 0.078 0.384 0.245 0.050 0.030 0.280 0.126 + 184.50 12.942 12.948 12.962 0.385 0.603 0.829 0.385 0.603 0.500 0.319 0.232 0.600 0.319 + 184.55 12.981 12.983 12.993 0.213 0.520 0.868 0.213 0.520 0.451 0.185 0.111 0.535 0.250 + 184.60 12.715 12.715 12.720 -0.061 0.358 0.602 -0.061 0.358 0.215 -0.037 -0.022 0.247 0.110 + 184.65 12.512 12.522 12.539 -0.498 0.656 0.399 -0.498 0.656 0.262 -0.199 -0.327 0.419 0.232 + 184.70 12.423 12.443 12.452 -0.689 0.497 0.311 -0.689 0.497 0.154 -0.214 -0.343 0.409 0.216 + 184.75 12.534 12.542 12.560 -0.450 0.673 0.421 -0.450 0.673 0.284 -0.190 -0.303 0.417 0.228 + 184.80 12.313 12.322 12.389 -0.462 1.290 0.200 -0.462 1.290 0.259 -0.093 -0.596 0.959 0.328 + 184.85 12.071 12.087 12.154 -0.619 1.273 -0.042 -0.619 1.273 -0.053 0.026 -0.788 1.003 0.395 + 184.90 12.171 12.184 12.250 -0.556 1.270 0.058 -0.556 1.270 0.074 -0.032 -0.706 0.962 0.355 + 184.95 12.426 12.433 12.495 -0.443 1.243 0.313 -0.443 1.243 0.389 -0.139 -0.551 0.920 0.344 + 185.00 12.391 12.402 12.444 -0.522 1.025 0.278 -0.522 1.025 0.285 -0.145 -0.535 0.701 0.312 + 185.05 12.553 12.562 12.590 -0.479 0.845 0.440 -0.479 0.845 0.372 -0.211 -0.405 0.568 0.294 + 185.10 12.442 12.442 12.478 0.008 0.949 0.329 0.008 0.949 0.312 0.003 0.008 0.504 0.156 + 185.15 12.152 12.152 12.170 -0.072 0.659 0.039 -0.072 0.659 0.026 -0.003 -0.047 0.221 0.027 + 185.20 12.240 12.243 12.256 -0.256 0.561 0.127 -0.256 0.561 0.071 -0.033 -0.144 0.198 0.082 + 185.25 12.224 12.227 12.247 -0.303 0.686 0.111 -0.303 0.686 0.076 -0.034 -0.208 0.288 0.112 + 185.30 12.457 12.471 12.474 -0.583 0.253 0.345 -0.583 0.253 0.087 -0.201 -0.148 0.262 0.132 + 185.35 12.636 12.649 12.649 -0.567 -0.080 0.524 -0.567 -0.080 -0.042 -0.297 0.045 0.301 0.152 + 185.40 12.378 12.402 12.402 -0.765 0.107 0.265 -0.765 0.107 0.028 -0.203 -0.082 0.334 0.110 + 185.45 12.440 12.472 12.472 -0.885 0.036 0.328 -0.885 0.036 0.012 -0.290 -0.032 0.446 0.146 + 185.50 12.391 12.419 12.420 -0.835 -0.087 0.278 -0.835 -0.087 -0.024 -0.233 0.073 0.391 0.122 + 185.55 12.551 12.587 12.588 -0.960 0.157 0.438 -0.960 0.157 0.069 -0.420 -0.151 0.569 0.226 + 185.60 12.509 12.574 12.575 -1.280 -0.154 0.396 -1.280 -0.154 -0.061 -0.507 0.197 0.910 0.274 + 185.65 12.595 12.662 12.663 -1.299 -0.127 0.483 -1.299 -0.127 -0.061 -0.627 0.164 0.969 0.326 + 185.70 12.684 12.718 12.718 -0.929 -0.104 0.571 -0.929 -0.104 -0.060 -0.531 0.097 0.600 0.271 + 185.75 12.855 12.935 12.935 -1.432 -0.038 0.742 -1.432 -0.038 -0.028 -1.063 0.055 1.301 0.532 + 185.80 12.701 12.749 12.749 -1.109 0.040 0.588 -1.109 0.040 0.024 -0.652 -0.045 0.789 0.327 + 185.85 12.707 12.731 12.733 -0.787 -0.218 0.594 -0.787 -0.218 -0.130 -0.468 0.172 0.510 0.257 + 185.90 12.793 12.838 12.845 -1.082 -0.426 0.680 -1.082 -0.426 -0.290 -0.736 0.461 0.908 0.458 + 185.95 12.830 12.886 12.888 -1.204 -0.181 0.717 -1.204 -0.181 -0.130 -0.863 0.218 0.998 0.450 + 186.00 12.751 12.834 12.840 -1.459 -0.390 0.638 -1.459 -0.390 -0.249 -0.931 0.569 1.344 0.560 + 186.05 12.572 12.608 12.613 -0.953 -0.355 0.459 -0.953 -0.355 -0.163 -0.438 0.338 0.623 0.288 + 186.10 12.352 12.383 12.387 -0.885 -0.296 0.239 -0.885 -0.296 -0.071 -0.211 0.262 0.464 0.172 + 186.15 12.571 12.627 12.631 -1.188 -0.316 0.458 -1.188 -0.316 -0.145 -0.544 0.375 0.861 0.338 + 186.20 12.597 12.642 12.644 -1.070 0.211 0.484 -1.070 0.211 0.102 -0.518 -0.226 0.712 0.287 + 186.25 12.960 13.031 13.031 -1.360 0.096 0.847 -1.360 0.096 0.081 -1.152 -0.130 1.289 0.581 + 186.30 12.699 12.786 12.796 -1.493 0.499 0.586 -1.493 0.499 0.293 -0.875 -0.746 1.411 0.593 + 186.35 12.672 12.736 12.738 -1.280 0.215 0.559 -1.280 0.215 0.120 -0.716 -0.275 0.999 0.388 + 186.40 12.668 12.736 12.739 -1.317 0.297 0.555 -1.317 0.297 0.165 -0.731 -0.391 1.065 0.423 + 186.45 12.708 12.762 12.764 -1.180 0.175 0.595 -1.180 0.175 0.104 -0.702 -0.207 0.888 0.369 + 186.50 12.513 12.596 12.597 -1.446 0.108 0.400 -1.446 0.108 0.043 -0.579 -0.157 1.132 0.301 + 186.55 12.560 12.616 12.616 -1.190 0.035 0.447 -1.190 0.035 0.016 -0.532 -0.042 0.808 0.267 + 186.60 12.482 12.524 12.525 -1.035 0.140 0.369 -1.035 0.140 0.052 -0.382 -0.145 0.613 0.206 + 186.65 12.430 12.474 12.476 -1.051 0.201 0.317 -1.051 0.201 0.064 -0.333 -0.212 0.623 0.200 + 186.70 12.455 12.493 12.500 -0.968 0.404 0.343 -0.968 0.404 0.138 -0.332 -0.391 0.609 0.265 + 186.75 12.431 12.497 12.501 -1.283 0.313 0.318 -1.283 0.313 0.100 -0.408 -0.402 0.922 0.291 + 186.80 12.227 12.272 12.285 -1.046 0.570 0.115 -1.046 0.570 0.065 -0.120 -0.596 0.716 0.306 + 186.85 12.554 12.592 12.601 -0.982 0.463 0.441 -0.982 0.463 0.204 -0.433 -0.455 0.686 0.330 + 186.90 12.695 12.735 12.737 -1.001 0.233 0.583 -1.001 0.233 0.136 -0.583 -0.233 0.698 0.321 + 186.95 12.952 12.984 12.993 -0.915 0.471 0.839 -0.915 0.471 0.396 -0.768 -0.431 0.882 0.483 + 187.00 12.922 12.934 12.949 -0.561 0.627 0.809 -0.561 0.627 0.507 -0.453 -0.351 0.681 0.383 + 187.05 12.763 12.778 12.785 -0.609 0.429 0.650 -0.609 0.429 0.279 -0.396 -0.261 0.489 0.275 + 187.10 12.697 12.700 12.709 -0.274 0.460 0.585 -0.274 0.460 0.269 -0.160 -0.126 0.314 0.169 + 187.15 12.561 12.579 12.582 -0.686 0.260 0.448 -0.686 0.260 0.117 -0.307 -0.178 0.369 0.187 + 187.20 12.703 12.720 12.734 -0.671 0.592 0.590 -0.671 0.592 0.349 -0.396 -0.397 0.574 0.330 + 187.25 12.697 12.704 12.734 -0.426 0.863 0.584 -0.426 0.863 0.504 -0.249 -0.368 0.634 0.336 + 187.30 12.864 12.871 12.887 -0.432 0.647 0.751 -0.432 0.647 0.486 -0.324 -0.279 0.584 0.324 + 187.35 12.409 12.444 12.453 -0.931 0.477 0.296 -0.931 0.477 0.141 -0.276 -0.444 0.591 0.271 + 187.40 12.544 12.574 12.578 -0.857 0.334 0.432 -0.857 0.334 0.144 -0.370 -0.287 0.516 0.245 + 187.45 12.699 12.754 12.763 -1.181 0.491 0.586 -1.181 0.491 0.288 -0.692 -0.580 0.990 0.474 + 187.50 12.768 12.831 12.836 -1.271 0.357 0.655 -1.271 0.357 0.234 -0.833 -0.454 1.086 0.488 + 187.55 12.638 12.706 12.726 -1.310 0.717 0.525 -1.310 0.717 0.376 -0.688 -0.939 1.252 0.612 + 187.60 12.898 12.939 12.981 -1.030 1.039 0.785 -1.030 1.039 0.816 -0.809 -1.070 1.378 0.785 + 187.65 13.057 13.091 13.137 -0.952 1.093 0.944 -0.952 1.093 1.032 -0.898 -1.041 1.496 0.859 + 187.70 13.274 13.309 13.331 -0.964 0.766 1.161 -0.964 0.766 0.890 -1.119 -0.739 1.432 0.805 + 187.75 13.250 13.305 13.325 -1.202 0.725 1.138 -1.202 0.725 0.825 -1.368 -0.872 1.633 0.910 + 187.80 13.272 13.326 13.336 -1.191 0.518 1.160 -1.191 0.518 0.600 -1.381 -0.617 1.516 0.814 + 187.85 13.260 13.312 13.346 -1.174 0.956 1.147 -1.174 0.956 1.097 -1.347 -1.123 1.804 1.034 + 187.90 13.103 13.139 13.167 -0.979 0.851 0.990 -0.979 0.851 0.842 -0.969 -0.833 1.332 0.765 + 187.95 13.495 13.523 13.569 -0.865 1.123 1.382 -0.865 1.123 1.553 -1.196 -0.972 1.960 1.094 + 188.00 13.442 13.483 13.545 -1.048 1.292 1.329 -1.048 1.292 1.718 -1.393 -1.354 2.267 1.297 + 188.05 13.300 13.341 13.403 -1.047 1.282 1.187 -1.047 1.282 1.522 -1.244 -1.342 2.075 1.190 + 188.10 13.605 13.644 13.680 -1.030 0.985 1.493 -1.030 0.985 1.470 -1.538 -1.015 2.130 1.179 + 188.15 13.281 13.362 13.398 -1.469 0.975 1.168 -1.469 0.975 1.139 -1.716 -1.433 2.237 1.255 + 188.20 13.289 13.368 13.397 -1.455 0.885 1.176 -1.455 0.885 1.040 -1.711 -1.287 2.141 1.190 + 188.25 12.894 12.945 12.989 -1.144 1.072 0.781 -1.144 1.072 0.838 -0.894 -1.227 1.535 0.867 + 188.30 12.789 12.856 12.891 -1.305 0.953 0.676 -1.305 0.953 0.645 -0.883 -1.244 1.535 0.828 + 188.35 12.841 12.911 12.965 -1.338 1.188 0.729 -1.338 1.188 0.865 -0.975 -1.590 1.866 1.028 + 188.40 12.397 12.458 12.530 -1.230 1.345 0.284 -1.230 1.345 0.383 -0.350 -1.654 1.701 0.867 + 188.45 12.104 12.146 12.204 -1.012 1.196 -0.009 -1.012 1.196 -0.011 0.009 -1.210 1.227 0.605 + 188.50 12.202 12.227 12.275 -0.789 1.089 0.089 -0.789 1.089 0.097 -0.070 -0.859 0.908 0.434 + 188.55 12.400 12.410 12.449 -0.485 0.991 0.287 -0.485 0.991 0.285 -0.139 -0.481 0.650 0.288 + 188.60 12.677 12.687 12.754 -0.482 1.307 0.565 -0.482 1.307 0.738 -0.272 -0.630 1.130 0.504 + 188.65 12.510 12.515 12.586 -0.356 1.334 0.398 -0.356 1.334 0.530 -0.142 -0.475 1.033 0.363 + 188.70 12.221 12.230 12.269 -0.451 0.983 0.108 -0.451 0.983 0.107 -0.049 -0.443 0.590 0.229 + 188.75 12.511 12.547 12.593 -0.942 1.077 0.398 -0.942 1.077 0.429 -0.375 -1.015 1.103 0.582 + 188.80 12.764 12.796 12.838 -0.896 1.042 0.652 -0.896 1.042 0.679 -0.584 -0.934 1.157 0.647 + 188.85 12.315 12.341 12.380 -0.808 0.977 0.202 -0.808 0.977 0.197 -0.163 -0.789 0.824 0.415 + 188.90 12.173 12.203 12.227 -0.851 0.775 0.060 -0.851 0.775 0.047 -0.051 -0.659 0.664 0.331 + 188.95 12.178 12.208 12.231 -0.845 0.751 0.066 -0.845 0.751 0.049 -0.055 -0.635 0.641 0.319 + 189.00 12.256 12.299 12.318 -1.030 0.673 0.143 -1.030 0.673 0.096 -0.148 -0.694 0.768 0.358 + 189.05 12.601 12.625 12.650 -0.789 0.785 0.488 -0.789 0.785 0.383 -0.385 -0.620 0.739 0.412 + 189.10 12.353 12.386 12.404 -0.901 0.674 0.240 -0.901 0.674 0.162 -0.217 -0.607 0.662 0.332 + 189.15 12.314 12.323 12.325 -0.492 0.213 0.201 -0.492 0.213 0.043 -0.099 -0.105 0.164 0.075 + 189.20 12.165 12.190 12.197 -0.778 0.391 0.053 -0.778 0.391 0.021 -0.041 -0.305 0.381 0.154 + 189.25 12.068 12.093 12.102 -0.766 0.474 -0.045 -0.766 0.474 -0.021 0.034 -0.363 0.407 0.183 + 189.30 12.165 12.192 12.193 -0.803 0.202 0.052 -0.803 0.202 0.011 -0.042 -0.163 0.344 0.084 + 189.35 12.239 12.256 12.261 -0.648 0.330 0.126 -0.648 0.330 0.042 -0.082 -0.214 0.272 0.116 + 189.40 12.094 12.101 12.119 -0.416 0.649 -0.019 -0.416 0.649 -0.012 0.008 -0.270 0.297 0.135 + 189.45 12.016 12.016 12.040 0.061 0.761 -0.097 0.061 0.761 -0.074 -0.006 0.046 0.296 0.044 + 189.50 11.997 12.000 12.026 -0.266 0.793 -0.116 -0.266 0.793 -0.092 0.031 -0.211 0.357 0.116 + 189.55 12.159 12.161 12.195 -0.219 0.910 0.046 -0.219 0.910 0.042 -0.010 -0.199 0.439 0.102 + 189.60 12.467 12.469 12.491 -0.224 0.738 0.355 -0.224 0.738 0.262 -0.080 -0.166 0.360 0.160 + 189.65 12.497 12.504 12.514 -0.433 0.498 0.384 -0.433 0.498 0.191 -0.166 -0.215 0.291 0.166 + 189.70 12.531 12.547 12.552 -0.634 0.361 0.418 -0.634 0.361 0.151 -0.265 -0.229 0.353 0.191 + 189.75 12.368 12.370 12.371 -0.244 0.141 0.255 -0.244 0.141 0.036 -0.062 -0.034 0.072 0.040 + 189.80 12.038 12.054 12.061 -0.629 0.393 -0.075 -0.629 0.393 -0.029 0.047 -0.247 0.278 0.127 + 189.85 11.972 11.985 11.986 -0.553 0.139 -0.141 -0.553 0.139 -0.020 0.078 -0.077 0.172 0.056 + 189.90 11.850 11.869 11.871 -0.671 -0.210 -0.262 -0.671 -0.210 0.055 0.176 0.141 0.281 0.116 + 189.95 11.525 11.554 11.554 -0.809 0.030 -0.587 -0.809 0.030 -0.018 0.475 -0.024 0.500 0.238 + 190.00 11.370 11.395 11.411 -0.744 0.607 -0.743 -0.744 0.607 -0.451 0.552 -0.452 0.737 0.422 + 190.05 11.514 11.554 11.562 -0.966 0.419 -0.599 -0.966 0.419 -0.251 0.579 -0.404 0.734 0.375 + 190.10 11.749 11.759 11.761 -0.503 0.207 -0.364 -0.503 0.207 -0.075 0.183 -0.104 0.214 0.112 + 190.15 11.873 11.893 11.895 -0.686 -0.249 -0.240 -0.686 -0.249 0.060 0.165 0.171 0.295 0.122 + 190.20 11.844 11.856 11.856 -0.513 -0.140 -0.268 -0.513 -0.140 0.038 0.138 0.072 0.177 0.080 + 190.25 12.291 12.331 12.332 -0.995 0.094 0.178 -0.995 0.094 0.017 -0.177 -0.093 0.515 0.101 + 190.30 12.477 12.512 12.513 -0.926 0.191 0.365 -0.926 0.191 0.070 -0.338 -0.176 0.513 0.194 + 190.35 12.741 12.752 12.756 -0.534 0.325 0.628 -0.534 0.325 0.204 -0.335 -0.174 0.393 0.215 + 190.40 12.816 12.849 12.850 -0.924 -0.053 0.703 -0.924 -0.053 -0.037 -0.650 0.049 0.675 0.326 + 190.45 12.383 12.399 12.399 -0.618 -0.130 0.270 -0.618 -0.130 -0.035 -0.167 0.080 0.236 0.094 + 190.50 12.433 12.453 12.457 -0.694 -0.339 0.321 -0.694 -0.339 -0.109 -0.223 0.236 0.350 0.171 + 190.55 12.475 12.492 12.500 -0.638 -0.461 0.363 -0.638 -0.461 -0.167 -0.231 0.294 0.376 0.205 + 190.60 12.638 12.647 12.650 -0.473 -0.284 0.525 -0.473 -0.284 -0.149 -0.249 0.134 0.290 0.160 + 190.65 12.561 12.575 12.580 -0.599 -0.362 0.448 -0.599 -0.362 -0.162 -0.268 0.217 0.345 0.190 + 190.70 12.281 12.283 12.283 -0.216 -0.013 0.168 -0.216 -0.013 -0.002 -0.036 0.003 0.038 0.018 + 190.75 12.343 12.344 12.349 -0.070 0.373 0.231 -0.070 0.373 0.086 -0.016 -0.026 0.099 0.046 + 190.80 12.462 12.464 12.474 -0.225 0.491 0.350 -0.225 0.491 0.172 -0.079 -0.111 0.207 0.109 + 190.85 12.468 12.472 12.483 -0.289 0.522 0.356 -0.289 0.522 0.186 -0.103 -0.151 0.241 0.130 + 190.90 12.487 12.493 12.506 -0.366 0.587 0.374 -0.366 0.587 0.220 -0.137 -0.215 0.310 0.168 + 190.95 12.707 12.722 12.738 -0.623 0.641 0.594 -0.623 0.641 0.381 -0.370 -0.399 0.576 0.332 + 191.00 12.973 13.007 13.009 -0.940 0.180 0.861 -0.940 0.180 0.155 -0.809 -0.170 0.828 0.420 + 191.05 12.830 12.885 12.885 -1.184 -0.069 0.718 -1.184 -0.069 -0.050 -0.850 0.082 0.961 0.428 + 191.10 12.642 12.683 12.683 -1.025 0.041 0.529 -1.025 0.041 0.022 -0.543 -0.042 0.666 0.272 + 191.15 12.768 12.822 12.823 -1.170 -0.197 0.655 -1.170 -0.197 -0.129 -0.767 0.231 0.919 0.406 + 191.20 12.920 12.954 12.957 -0.940 -0.273 0.807 -0.940 -0.273 -0.221 -0.758 0.257 0.805 0.415 + 191.25 13.046 13.069 13.075 -0.767 -0.395 0.933 -0.767 -0.395 -0.369 -0.716 0.303 0.807 0.430 + 191.30 13.133 13.137 13.137 -0.328 -0.086 1.020 -0.328 -0.086 -0.087 -0.334 0.028 0.578 0.173 + 191.35 12.812 12.817 12.818 -0.359 0.135 0.699 -0.359 0.135 0.094 -0.251 -0.048 0.318 0.136 + 191.40 12.875 12.881 12.881 -0.384 -0.043 0.762 -0.384 -0.043 -0.033 -0.293 0.016 0.365 0.148 + 191.45 12.720 12.723 12.723 -0.277 -0.014 0.607 -0.277 -0.014 -0.008 -0.168 0.004 0.223 0.084 + 191.50 12.822 12.832 12.834 -0.487 -0.239 0.710 -0.487 -0.239 -0.170 -0.346 0.116 0.399 0.201 + 191.55 13.108 13.108 13.109 0.001 0.090 0.996 0.001 0.090 0.090 0.001 0.000 0.500 0.045 + 191.60 12.911 12.912 12.915 -0.175 0.267 0.798 -0.175 0.267 0.213 -0.139 -0.047 0.369 0.129 + 191.65 13.066 13.066 13.068 -0.102 0.246 0.953 -0.102 0.246 0.234 -0.097 -0.025 0.489 0.127 + 191.70 13.017 13.017 13.018 -0.109 0.138 0.904 -0.109 0.138 0.125 -0.099 -0.015 0.424 0.080 + 191.75 12.964 12.965 12.965 -0.129 0.132 0.851 -0.129 0.132 0.112 -0.110 -0.017 0.379 0.079 + 191.80 13.134 13.134 13.135 0.014 0.126 1.021 0.014 0.126 0.129 0.015 0.002 0.530 0.065 + 191.85 13.097 13.101 13.101 0.323 0.032 0.984 0.323 0.032 0.031 0.318 0.010 0.537 0.160 + 191.90 13.013 13.017 13.019 0.325 0.233 0.900 0.325 0.233 0.210 0.293 0.076 0.485 0.184 + 191.95 13.061 13.065 13.065 0.321 0.036 0.949 0.321 0.036 0.034 0.304 0.011 0.502 0.153 + 192.00 12.994 12.996 12.996 0.220 0.007 0.881 0.220 0.007 0.007 0.194 0.002 0.412 0.097 + 192.05 12.929 12.931 12.933 0.239 -0.215 0.816 0.239 -0.215 -0.175 0.195 -0.051 0.384 0.133 + 192.10 13.052 13.053 13.059 0.147 -0.421 0.939 0.147 -0.421 -0.395 0.138 -0.062 0.540 0.211 + 192.15 12.639 12.647 12.648 0.455 -0.196 0.526 0.455 -0.196 -0.103 0.239 -0.089 0.261 0.137 + 192.20 12.601 12.620 12.624 0.686 -0.309 0.489 0.686 -0.309 -0.151 0.335 -0.212 0.402 0.212 + 192.25 12.465 12.502 12.504 0.954 -0.247 0.353 0.954 -0.247 -0.087 0.336 -0.236 0.547 0.210 + 192.30 12.494 12.501 12.528 0.412 -0.822 0.381 0.412 -0.822 -0.314 0.157 -0.339 0.496 0.244 + 192.35 12.403 12.404 12.432 0.192 -0.833 0.290 0.192 -0.833 -0.242 0.056 -0.160 0.408 0.148 + 192.40 12.400 12.406 12.417 0.382 -0.525 0.287 0.382 -0.525 -0.151 0.110 -0.201 0.252 0.137 + 192.45 12.575 12.583 12.595 0.458 -0.550 0.462 0.458 -0.550 -0.254 0.212 -0.252 0.363 0.208 + 192.50 12.777 12.778 12.801 0.125 -0.759 0.665 0.125 -0.759 -0.504 0.083 -0.094 0.517 0.260 + 192.55 13.019 13.020 13.064 0.190 -1.064 0.906 0.190 -1.064 -0.964 0.172 -0.202 0.995 0.500 + 192.60 12.850 12.856 12.886 0.419 -0.871 0.737 0.419 -0.871 -0.642 0.309 -0.365 0.738 0.400 + 192.65 12.955 12.955 12.970 -0.040 -0.619 0.842 -0.040 -0.619 -0.521 -0.034 0.025 0.547 0.262 + 192.70 13.183 13.188 13.208 -0.362 -0.728 1.070 -0.362 -0.728 -0.779 -0.387 0.263 0.903 0.455 + 192.75 13.389 13.389 13.400 -0.008 -0.539 1.276 -0.008 -0.539 -0.688 -0.010 0.004 0.960 0.344 + 192.80 13.588 13.589 13.594 -0.101 -0.378 1.476 -0.101 -0.378 -0.558 -0.148 0.038 1.165 0.289 + 192.85 13.460 13.461 13.462 0.086 -0.213 1.348 0.086 -0.213 -0.288 0.116 -0.018 0.935 0.155 + 192.90 13.503 13.503 13.507 -0.036 -0.305 1.390 -0.036 -0.305 -0.423 -0.050 0.011 1.013 0.213 + 192.95 13.628 13.628 13.638 -0.019 -0.526 1.515 -0.019 -0.526 -0.798 -0.029 0.010 1.286 0.399 + 193.00 13.459 13.463 13.478 0.319 -0.632 1.346 0.319 -0.632 -0.850 0.430 -0.202 1.156 0.487 + 193.05 13.602 13.603 13.609 0.142 -0.412 1.489 0.142 -0.412 -0.614 0.211 -0.059 1.204 0.326 + 193.10 13.705 13.706 13.710 -0.133 -0.343 1.593 -0.133 -0.343 -0.546 -0.212 0.046 1.336 0.294 + 193.15 13.718 13.719 13.719 -0.179 0.041 1.605 -0.179 0.041 0.065 -0.288 -0.007 1.306 0.148 + 193.20 13.600 13.601 13.601 -0.139 0.039 1.487 -0.139 0.039 0.059 -0.207 -0.005 1.116 0.107 + 193.25 13.335 13.338 13.343 -0.312 0.337 1.222 -0.312 0.337 0.412 -0.382 -0.105 0.852 0.286 + 193.30 13.277 13.278 13.286 -0.192 0.450 1.164 -0.192 0.450 0.523 -0.223 -0.086 0.797 0.288 + 193.35 13.042 13.048 13.053 -0.404 0.373 0.929 -0.404 0.373 0.346 -0.376 -0.151 0.583 0.266 + 193.40 13.368 13.371 13.371 -0.296 0.034 1.255 -0.296 0.034 0.043 -0.371 -0.010 0.832 0.187 + 193.45 13.406 13.419 13.422 -0.591 -0.291 1.293 -0.591 -0.291 -0.376 -0.764 0.172 1.053 0.434 + 193.50 13.574 13.578 13.585 -0.345 -0.434 1.461 -0.345 -0.434 -0.635 -0.504 0.150 1.221 0.412 + 193.55 13.417 13.426 13.435 -0.488 -0.483 1.304 -0.488 -0.483 -0.630 -0.636 0.236 1.086 0.463 + 193.60 13.496 13.496 13.509 0.021 -0.583 1.383 0.021 -0.583 -0.806 0.029 -0.012 1.127 0.403 + 193.65 13.482 13.482 13.482 0.031 -0.127 1.369 0.031 -0.127 -0.174 0.043 -0.004 0.946 0.090 + 193.70 13.216 13.217 13.221 0.170 0.330 1.103 0.170 0.330 0.364 0.188 0.056 0.678 0.207 + 193.75 13.284 13.291 13.291 0.432 0.032 1.171 0.432 0.032 0.038 0.506 0.014 0.780 0.254 + 193.80 13.256 13.275 13.276 0.715 0.199 1.143 0.715 0.199 0.228 0.817 0.143 0.928 0.430 + 193.85 13.241 13.246 13.247 0.365 0.220 1.128 0.365 0.220 0.248 0.412 0.081 0.727 0.244 + 193.90 13.266 13.266 13.267 0.114 -0.115 1.153 0.114 -0.115 -0.132 0.132 -0.013 0.678 0.094 + 193.95 13.195 13.196 13.196 0.128 -0.074 1.082 0.128 -0.074 -0.080 0.139 -0.009 0.597 0.080 + 194.00 13.269 13.271 13.271 -0.194 -0.064 1.156 -0.194 -0.064 -0.075 -0.224 0.012 0.689 0.118 + 194.05 13.226 13.229 13.229 -0.278 -0.061 1.113 -0.278 -0.061 -0.068 -0.310 0.017 0.660 0.159 + 194.10 13.040 13.040 13.048 -0.013 -0.458 0.927 -0.013 -0.458 -0.425 -0.012 0.006 0.535 0.213 + 194.15 13.384 13.385 13.416 0.213 -0.897 1.271 0.213 -0.897 -1.140 0.270 -0.191 1.233 0.594 + 194.20 13.280 13.285 13.299 -0.360 -0.614 1.167 -0.360 -0.614 -0.717 -0.421 0.221 0.935 0.430 + 194.25 13.386 13.416 13.433 -0.888 -0.689 1.273 -0.888 -0.689 -0.877 -1.130 0.611 1.442 0.778 + 194.30 13.347 13.354 13.378 -0.407 -0.814 1.235 -0.407 -0.814 -1.005 -0.503 0.331 1.176 0.586 + 194.35 13.358 13.360 13.365 -0.220 -0.351 1.245 -0.220 -0.351 -0.437 -0.274 0.077 0.861 0.261 + 194.40 13.825 13.826 13.829 -0.165 -0.305 1.712 -0.165 -0.305 -0.523 -0.282 0.050 1.526 0.298 + 194.45 13.622 13.628 13.635 -0.384 -0.456 1.509 -0.384 -0.456 -0.688 -0.579 0.175 1.317 0.458 + 194.50 13.702 13.709 13.718 -0.457 -0.492 1.589 -0.457 -0.492 -0.781 -0.726 0.225 1.487 0.545 + 194.55 13.805 13.824 13.831 -0.716 -0.446 1.693 -0.716 -0.446 -0.755 -1.212 0.320 1.788 0.732 + 194.60 13.557 13.579 13.591 -0.766 -0.569 1.445 -0.766 -0.569 -0.822 -1.107 0.436 1.499 0.723 + 194.65 13.601 13.606 13.617 -0.347 -0.553 1.489 -0.347 -0.553 -0.823 -0.517 0.192 1.321 0.495 + 194.70 13.799 13.803 13.812 -0.315 -0.503 1.686 -0.315 -0.503 -0.848 -0.531 0.158 1.598 0.506 + 194.75 13.968 13.969 13.987 -0.190 -0.709 1.855 -0.190 -0.709 -1.315 -0.352 0.134 1.990 0.684 + 194.80 14.088 14.089 14.107 -0.120 -0.706 1.976 -0.120 -0.706 -1.395 -0.237 0.085 2.208 0.709 + 194.85 14.220 14.221 14.227 -0.157 -0.394 2.107 -0.157 -0.394 -0.831 -0.331 0.062 2.311 0.448 + 194.90 14.192 14.192 14.193 -0.080 0.118 2.079 -0.080 0.118 0.245 -0.166 -0.009 2.172 0.148 + 194.95 13.958 13.960 13.970 -0.240 0.542 1.845 -0.240 0.542 1.001 -0.442 -0.130 1.877 0.551 + 195.00 13.609 13.614 13.623 -0.395 0.483 1.496 -0.395 0.483 0.722 -0.591 -0.191 1.313 0.476 + 195.05 13.460 13.464 13.470 -0.337 0.404 1.347 -0.337 0.404 0.544 -0.454 -0.136 1.046 0.361 + 195.10 13.216 13.218 13.219 -0.203 0.182 1.104 -0.203 0.182 0.200 -0.224 -0.037 0.646 0.151 + 195.15 13.219 13.220 13.220 -0.051 -0.100 1.107 -0.051 -0.100 -0.111 -0.057 0.005 0.619 0.062 + 195.20 13.453 13.461 13.461 -0.456 -0.123 1.340 -0.456 -0.123 -0.165 -0.612 0.056 1.010 0.318 + 195.25 13.257 13.264 13.264 -0.423 -0.053 1.145 -0.423 -0.053 -0.060 -0.484 0.022 0.746 0.244 + 195.30 13.165 13.171 13.171 -0.399 -0.050 1.052 -0.399 -0.050 -0.053 -0.420 0.020 0.634 0.212 + 195.35 13.248 13.254 13.273 -0.402 -0.700 1.135 -0.402 -0.700 -0.795 -0.457 0.282 0.970 0.480 + 195.40 13.578 13.585 13.603 -0.425 -0.697 1.465 -0.425 -0.697 -1.021 -0.622 0.296 1.406 0.616 + 195.45 13.683 13.708 13.711 -0.834 -0.248 1.570 -0.834 -0.248 -0.389 -1.309 0.207 1.611 0.691 + 195.50 13.424 13.469 13.472 -1.102 -0.275 1.311 -1.102 -0.275 -0.360 -1.444 0.302 1.504 0.759 + 195.55 13.500 13.529 13.540 -0.874 -0.542 1.388 -0.874 -0.542 -0.752 -1.213 0.474 1.492 0.752 + 195.60 13.189 13.192 13.198 -0.288 -0.398 1.076 -0.288 -0.398 -0.429 -0.310 0.115 0.700 0.270 + 195.65 12.968 12.968 12.971 -0.014 -0.244 0.855 -0.014 -0.244 -0.209 -0.012 0.003 0.396 0.104 + 195.70 13.266 13.269 13.278 -0.269 -0.496 1.153 -0.269 -0.496 -0.572 -0.310 0.133 0.824 0.332 + 195.75 13.164 13.166 13.179 -0.224 -0.580 1.051 -0.224 -0.580 -0.610 -0.235 0.130 0.746 0.333 + 195.80 13.109 13.110 13.130 -0.156 -0.719 0.997 -0.156 -0.719 -0.716 -0.156 0.112 0.767 0.371 + 195.85 13.283 13.283 13.296 -0.006 -0.584 1.170 -0.006 -0.584 -0.684 -0.008 0.004 0.855 0.342 + 195.90 13.446 13.447 13.471 -0.125 -0.804 1.334 -0.125 -0.804 -1.073 -0.167 0.101 1.221 0.545 + 195.95 13.371 13.374 13.408 -0.284 -0.949 1.259 -0.284 -0.949 -1.194 -0.357 0.269 1.282 0.637 + 196.00 13.231 13.239 13.257 -0.447 -0.682 1.119 -0.447 -0.682 -0.763 -0.501 0.305 0.958 0.481 + 196.05 13.143 13.143 13.157 -0.042 -0.617 1.030 -0.042 -0.617 -0.636 -0.043 0.026 0.722 0.319 + 196.10 12.793 12.797 12.801 -0.317 -0.320 0.681 -0.317 -0.320 -0.218 -0.216 0.101 0.333 0.161 + 196.15 12.874 12.894 12.899 -0.702 -0.383 0.762 -0.702 -0.383 -0.292 -0.535 0.269 0.610 0.333 + 196.20 12.649 12.680 12.693 -0.890 -0.571 0.536 -0.890 -0.571 -0.306 -0.477 0.508 0.703 0.381 + 196.25 12.572 12.583 12.602 -0.526 -0.700 0.459 -0.526 -0.700 -0.321 -0.241 0.368 0.488 0.272 + 196.30 12.599 12.614 12.626 -0.606 -0.561 0.487 -0.606 -0.561 -0.273 -0.295 0.340 0.460 0.263 + 196.35 12.439 12.475 12.514 -0.946 -0.987 0.326 -0.946 -0.987 -0.322 -0.309 0.934 0.988 0.518 + 196.40 12.537 12.585 12.622 -1.093 -0.970 0.424 -1.093 -0.970 -0.412 -0.464 1.061 1.158 0.614 + 196.45 12.626 12.666 12.697 -0.996 -0.897 0.514 -0.996 -0.897 -0.461 -0.512 0.894 1.030 0.564 + 196.50 12.875 12.901 12.929 -0.813 -0.846 0.762 -0.813 -0.846 -0.645 -0.620 0.688 0.979 0.564 + 196.55 13.043 13.058 13.085 -0.617 -0.850 0.930 -0.617 -0.850 -0.790 -0.574 0.524 0.984 0.554 + 196.60 12.854 12.874 12.893 -0.708 -0.708 0.741 -0.708 -0.708 -0.525 -0.525 0.501 0.776 0.448 + 196.65 12.722 12.737 12.745 -0.609 -0.450 0.610 -0.609 -0.450 -0.274 -0.371 0.274 0.473 0.269 + 196.70 12.549 12.571 12.584 -0.746 -0.572 0.436 -0.746 -0.572 -0.250 -0.325 0.427 0.537 0.296 + 196.75 12.537 12.561 12.581 -0.766 -0.711 0.425 -0.766 -0.711 -0.302 -0.325 0.545 0.636 0.351 + 196.80 12.648 12.657 12.689 -0.488 -0.891 0.535 -0.488 -0.891 -0.477 -0.261 0.435 0.659 0.348 + 196.85 12.783 12.792 12.821 -0.492 -0.866 0.670 -0.492 -0.866 -0.580 -0.329 0.426 0.720 0.396 + 196.90 13.046 13.048 13.057 -0.236 -0.486 0.933 -0.236 -0.486 -0.454 -0.220 0.115 0.582 0.259 + 196.95 13.166 13.166 13.167 -0.088 -0.169 1.053 -0.088 -0.169 -0.177 -0.093 0.015 0.573 0.100 + 197.00 13.244 13.247 13.267 -0.270 -0.717 1.132 -0.270 -0.717 -0.811 -0.306 0.194 0.934 0.444 + 197.05 12.858 12.860 12.872 -0.223 -0.549 0.745 -0.223 -0.549 -0.409 -0.166 0.122 0.453 0.229 + 197.10 12.946 12.946 12.946 0.052 -0.011 0.834 0.052 -0.011 -0.009 0.043 -0.001 0.349 0.022 + 197.15 12.819 12.824 12.838 -0.351 -0.614 0.706 -0.351 -0.614 -0.434 -0.248 0.216 0.499 0.272 + 197.20 12.659 12.668 12.691 -0.473 -0.770 0.546 -0.473 -0.770 -0.421 -0.259 0.365 0.558 0.307 + 197.25 12.241 12.253 12.257 -0.553 -0.308 0.128 -0.553 -0.308 -0.040 -0.071 0.171 0.209 0.095 + 197.30 12.037 12.052 12.055 -0.620 -0.267 -0.076 -0.620 -0.267 0.020 0.047 0.166 0.231 0.087 + 197.35 12.381 12.406 12.421 -0.796 -0.614 0.268 -0.796 -0.614 -0.164 -0.213 0.489 0.541 0.279 + 197.40 12.292 12.302 12.309 -0.499 -0.412 0.180 -0.499 -0.412 -0.074 -0.090 0.206 0.226 0.118 + 197.45 12.408 12.418 12.426 -0.495 -0.435 0.295 -0.495 -0.435 -0.128 -0.146 0.215 0.260 0.145 + 197.50 12.516 12.526 12.534 -0.483 -0.450 0.404 -0.483 -0.450 -0.182 -0.195 0.217 0.299 0.172 + 197.55 12.370 12.380 12.394 -0.509 -0.584 0.257 -0.509 -0.584 -0.150 -0.131 0.297 0.333 0.179 + 197.60 12.192 12.207 12.212 -0.605 -0.327 0.079 -0.605 -0.327 -0.026 -0.048 0.198 0.240 0.103 + 197.65 12.333 12.352 12.359 -0.687 -0.408 0.220 -0.687 -0.408 -0.090 -0.151 0.280 0.343 0.165 + 197.70 12.293 12.298 12.314 -0.346 -0.626 0.181 -0.346 -0.626 -0.113 -0.063 0.217 0.273 0.126 + 197.75 12.254 12.262 12.275 -0.427 -0.566 0.141 -0.427 -0.566 -0.080 -0.060 0.242 0.261 0.131 + 197.80 12.389 12.393 12.399 -0.323 -0.394 0.276 -0.323 -0.394 -0.109 -0.089 0.127 0.168 0.095 + 197.85 12.484 12.489 12.494 -0.352 -0.349 0.371 -0.352 -0.349 -0.130 -0.131 0.123 0.192 0.111 + 197.90 12.688 12.694 12.696 -0.388 -0.215 0.575 -0.388 -0.215 -0.124 -0.223 0.083 0.264 0.134 + 197.95 12.284 12.285 12.285 -0.174 0.050 0.171 -0.174 0.050 0.009 -0.030 -0.009 0.031 0.016 + 198.00 12.105 12.105 12.109 -0.038 0.293 -0.008 -0.038 0.293 -0.002 0.000 -0.011 0.044 0.006 + 198.05 12.287 12.287 12.313 0.016 0.804 0.174 0.016 0.804 0.140 0.003 0.013 0.339 0.070 + 198.10 12.252 12.254 12.270 -0.244 0.629 0.139 -0.244 0.629 0.087 -0.034 -0.154 0.238 0.090 + 198.15 12.006 12.011 12.022 -0.357 0.496 -0.107 -0.357 0.496 -0.053 0.038 -0.177 0.193 0.094 + 198.20 12.262 12.272 12.277 -0.511 0.331 0.149 -0.511 0.331 0.049 -0.076 -0.169 0.196 0.096 + 198.25 12.456 12.474 12.482 -0.672 0.436 0.343 -0.672 0.436 0.150 -0.231 -0.293 0.380 0.201 + 198.30 12.579 12.603 12.604 -0.769 0.166 0.467 -0.769 0.166 0.077 -0.359 -0.128 0.418 0.194 + 198.35 12.614 12.620 12.622 -0.376 0.263 0.501 -0.376 0.263 0.132 -0.188 -0.099 0.231 0.125 + 198.40 12.688 12.695 12.696 -0.438 0.122 0.575 -0.438 0.122 0.070 -0.252 -0.053 0.269 0.133 + 198.45 12.673 12.694 12.702 -0.719 0.468 0.561 -0.719 0.468 0.262 -0.403 -0.336 0.525 0.294 + 198.50 12.418 12.450 12.459 -0.902 0.472 0.305 -0.902 0.472 0.144 -0.275 -0.426 0.565 0.264 + 198.55 12.616 12.663 12.667 -1.085 0.305 0.504 -1.085 0.305 0.153 -0.546 -0.330 0.761 0.328 + 198.60 12.704 12.745 12.777 -1.022 0.894 0.591 -1.022 0.894 0.529 -0.605 -0.914 1.097 0.609 + 198.65 12.178 12.242 12.280 -1.246 0.975 0.065 -1.246 0.975 0.064 -0.081 -1.214 1.253 0.609 + 198.70 12.609 12.662 12.678 -1.157 0.631 0.496 -1.157 0.631 0.313 -0.574 -0.730 0.991 0.490 + 198.75 12.883 12.939 12.939 -1.195 0.092 0.770 -1.195 0.092 0.071 -0.921 -0.110 1.016 0.465 + 198.80 12.642 12.707 12.708 -1.284 0.122 0.529 -1.284 0.122 0.065 -0.680 -0.157 0.972 0.350 + 198.85 12.655 12.739 12.741 -1.464 0.221 0.542 -1.464 0.221 0.120 -0.794 -0.323 1.243 0.433 + 198.90 12.589 12.663 12.663 -1.363 0.081 0.476 -1.363 0.081 0.039 -0.649 -0.111 1.046 0.330 + 198.95 12.520 12.577 12.584 -1.199 0.410 0.407 -1.199 0.410 0.167 -0.488 -0.492 0.886 0.356 + 199.00 12.165 12.206 12.217 -0.990 0.529 0.053 -0.990 0.529 0.028 -0.052 -0.524 0.631 0.264 + 199.05 12.183 12.225 12.237 -1.024 0.536 0.070 -1.024 0.536 0.037 -0.071 -0.549 0.670 0.277 + 199.10 11.921 11.967 11.980 -1.048 0.557 -0.192 -1.048 0.557 -0.107 0.201 -0.584 0.723 0.313 + 199.15 11.968 12.042 12.069 -1.334 0.808 -0.145 -1.334 0.808 -0.117 0.194 -1.077 1.226 0.550 + 199.20 12.053 12.121 12.155 -1.283 0.898 -0.060 -1.283 0.898 -0.053 0.076 -1.152 1.228 0.578 + 199.25 12.196 12.242 12.276 -1.060 0.906 0.083 -1.060 0.906 0.076 -0.088 -0.961 0.976 0.484 + 199.30 11.880 11.936 11.984 -1.158 1.071 -0.233 -1.158 1.071 -0.250 0.270 -1.241 1.271 0.647 + 199.35 12.318 12.358 12.410 -0.991 1.131 0.205 -0.991 1.131 0.232 -0.203 -1.120 1.151 0.581 + 199.40 12.472 12.484 12.514 -0.558 0.867 0.359 -0.558 0.867 0.311 -0.200 -0.484 0.596 0.305 + 199.45 12.237 12.263 12.285 -0.804 0.739 0.124 -0.804 0.739 0.091 -0.099 -0.594 0.604 0.305 + 199.50 12.117 12.119 12.147 -0.176 0.833 0.005 -0.176 0.833 0.004 -0.001 -0.146 0.363 0.073 + 199.55 12.278 12.281 12.335 -0.294 1.151 0.165 -0.294 1.151 0.190 -0.049 -0.338 0.720 0.196 + 199.60 12.563 12.566 12.599 -0.292 0.905 0.450 -0.292 0.905 0.407 -0.132 -0.265 0.554 0.252 + 199.65 12.666 12.666 12.688 -0.034 0.745 0.554 -0.034 0.745 0.412 -0.019 -0.025 0.431 0.207 + 199.70 12.701 12.701 12.724 0.047 0.757 0.588 0.047 0.757 0.445 0.028 0.036 0.460 0.224 + 199.75 12.801 12.801 12.804 0.020 0.236 0.689 0.020 0.236 0.163 0.013 0.005 0.265 0.082 + 199.80 12.705 12.709 12.716 -0.302 0.445 0.592 -0.302 0.445 0.263 -0.179 -0.134 0.320 0.173 + 199.85 12.766 12.770 12.789 -0.298 0.705 0.653 -0.298 0.705 0.461 -0.195 -0.210 0.506 0.271 + 199.90 12.912 12.917 12.929 -0.385 0.553 0.799 -0.385 0.553 0.442 -0.308 -0.213 0.546 0.289 + 199.95 13.020 13.024 13.036 -0.297 0.572 0.908 -0.297 0.572 0.519 -0.270 -0.170 0.619 0.304 + 200.00 12.935 12.940 12.959 -0.375 0.704 0.822 -0.375 0.704 0.579 -0.308 -0.264 0.656 0.354 + 200.05 12.909 12.912 12.931 -0.267 0.696 0.797 -0.267 0.696 0.555 -0.213 -0.186 0.595 0.311 + 200.10 12.673 12.677 12.704 -0.305 0.830 0.560 -0.305 0.830 0.465 -0.171 -0.253 0.548 0.278 + 200.15 12.618 12.624 12.644 -0.373 0.712 0.505 -0.373 0.712 0.360 -0.189 -0.266 0.451 0.243 + 200.20 12.749 12.767 12.795 -0.677 0.859 0.636 -0.677 0.859 0.546 -0.431 -0.582 0.800 0.453 + 200.25 12.546 12.569 12.608 -0.763 0.991 0.433 -0.763 0.991 0.429 -0.330 -0.756 0.876 0.465 + 200.30 12.482 12.513 12.532 -0.873 0.704 0.369 -0.873 0.704 0.260 -0.323 -0.615 0.697 0.371 + 200.35 12.725 12.766 12.786 -1.021 0.724 0.612 -1.021 0.724 0.443 -0.625 -0.739 0.970 0.532 + 200.40 12.434 12.455 12.486 -0.721 0.885 0.321 -0.721 0.885 0.284 -0.232 -0.638 0.703 0.368 + 200.45 12.290 12.309 12.312 -0.674 0.311 0.177 -0.674 0.311 0.055 -0.119 -0.210 0.291 0.124 + 200.50 11.933 11.961 11.961 -0.814 0.131 -0.180 -0.814 0.131 -0.024 0.146 -0.107 0.356 0.091 + 200.55 11.786 11.795 11.811 -0.439 0.621 -0.326 -0.439 0.621 -0.203 0.143 -0.273 0.342 0.184 + 200.60 12.256 12.265 12.283 -0.483 0.648 0.143 -0.483 0.648 0.093 -0.069 -0.313 0.337 0.167 + 200.65 12.115 12.130 12.169 -0.599 0.978 0.002 -0.599 0.978 0.002 -0.001 -0.586 0.658 0.293 + 200.70 12.222 12.253 12.288 -0.868 0.938 0.109 -0.868 0.938 0.102 -0.095 -0.814 0.823 0.413 + 200.75 12.224 12.241 12.280 -0.637 0.976 0.111 -0.637 0.976 0.109 -0.071 -0.622 0.686 0.318 + 200.80 11.786 11.804 11.881 -0.658 1.352 -0.327 -0.658 1.352 -0.442 0.215 -0.889 1.183 0.508 + 200.85 11.843 11.863 11.924 -0.690 1.201 -0.270 -0.690 1.201 -0.324 0.186 -0.829 0.996 0.455 + 200.90 11.813 11.823 11.913 -0.481 1.460 -0.299 -0.481 1.460 -0.437 0.144 -0.703 1.226 0.420 + 200.95 11.988 11.992 12.094 -0.297 1.569 -0.124 -0.297 1.569 -0.195 0.037 -0.465 1.283 0.253 + 201.00 12.235 12.240 12.280 -0.359 0.990 0.122 -0.359 0.990 0.121 -0.044 -0.356 0.562 0.189 + 201.05 12.040 12.056 12.103 -0.614 1.062 -0.072 -0.614 1.062 -0.077 0.044 -0.652 0.755 0.329 + 201.10 12.179 12.187 12.271 -0.450 1.438 0.066 -0.450 1.438 0.095 -0.030 -0.647 1.137 0.327 + 201.15 11.965 11.969 12.101 -0.309 1.785 -0.148 -0.309 1.785 -0.265 0.046 -0.551 1.652 0.307 + 201.20 11.833 11.838 11.974 -0.325 1.800 -0.280 -0.325 1.800 -0.503 0.091 -0.585 1.713 0.389 + 201.25 11.826 11.829 11.982 -0.258 1.909 -0.287 -0.258 1.909 -0.547 0.074 -0.492 1.896 0.370 + 201.30 11.787 11.791 11.965 -0.288 2.032 -0.325 -0.288 2.032 -0.661 0.094 -0.584 2.158 0.444 + 201.35 11.992 11.994 12.096 -0.229 1.565 -0.121 -0.229 1.565 -0.189 0.028 -0.358 1.258 0.203 + 201.40 11.811 11.812 11.885 -0.189 1.317 -0.302 -0.189 1.317 -0.398 0.057 -0.248 0.930 0.236 + 201.45 11.973 11.980 12.024 -0.389 1.030 -0.139 -0.389 1.030 -0.143 0.054 -0.401 0.616 0.215 + 201.50 12.081 12.094 12.167 -0.558 1.329 -0.032 -0.558 1.329 -0.042 0.018 -0.741 1.040 0.371 + 201.55 12.342 12.348 12.435 -0.378 1.469 0.229 -0.378 1.469 0.337 -0.087 -0.556 1.176 0.328 + 201.60 12.381 12.386 12.490 -0.359 1.611 0.268 -0.359 1.611 0.431 -0.096 -0.578 1.397 0.364 + 201.65 12.205 12.212 12.330 -0.437 1.697 0.092 -0.437 1.697 0.156 -0.040 -0.741 1.539 0.379 + 201.70 12.085 12.091 12.232 -0.381 1.854 -0.028 -0.381 1.854 -0.052 0.011 -0.706 1.792 0.354 + 201.75 11.986 11.996 12.120 -0.484 1.732 -0.127 -0.484 1.732 -0.220 0.061 -0.838 1.625 0.434 + 201.80 12.116 12.117 12.237 -0.184 1.713 0.003 -0.184 1.713 0.005 -0.001 -0.315 1.484 0.158 + 201.85 12.249 12.260 12.342 -0.510 1.423 0.136 -0.510 1.423 0.194 -0.070 -0.726 1.152 0.378 + 201.90 12.410 12.423 12.519 -0.559 1.550 0.297 -0.559 1.550 0.461 -0.166 -0.867 1.402 0.498 + 201.95 12.489 12.494 12.625 -0.338 1.816 0.376 -0.338 1.816 0.683 -0.127 -0.614 1.777 0.464 + 202.00 12.040 12.047 12.165 -0.404 1.692 -0.073 -0.404 1.692 -0.123 0.029 -0.684 1.515 0.348 + 202.05 11.819 11.823 12.006 -0.287 2.093 -0.294 -0.287 2.093 -0.615 0.084 -0.601 2.274 0.432 + 202.10 11.747 11.757 11.918 -0.478 1.955 -0.366 -0.478 1.955 -0.715 0.175 -0.934 2.092 0.595 + 202.15 11.977 11.979 12.107 -0.198 1.753 -0.135 -0.198 1.753 -0.237 0.027 -0.347 1.565 0.211 + 202.20 11.964 11.973 12.077 -0.466 1.579 -0.148 -0.466 1.579 -0.234 0.069 -0.736 1.367 0.388 + 202.25 12.138 12.138 12.301 -0.126 1.994 0.025 -0.126 1.994 0.049 -0.003 -0.252 1.996 0.128 + 202.30 12.370 12.371 12.541 -0.129 2.062 0.257 -0.129 2.062 0.531 -0.033 -0.265 2.167 0.297 + 202.35 12.349 12.350 12.494 -0.178 1.888 0.236 -0.178 1.888 0.446 -0.042 -0.336 1.826 0.280 + 202.40 12.468 12.468 12.597 -0.094 1.792 0.355 -0.094 1.792 0.637 -0.033 -0.168 1.672 0.330 + 202.45 12.385 12.385 12.516 0.094 1.804 0.272 0.094 1.804 0.490 0.025 0.169 1.669 0.260 + 202.50 12.433 12.434 12.572 0.160 1.855 0.320 0.160 1.855 0.594 0.051 0.296 1.784 0.333 + 202.55 12.813 12.815 12.959 0.164 1.928 0.701 0.164 1.928 1.351 0.115 0.316 2.117 0.696 + 202.60 12.683 12.683 12.851 0.081 2.072 0.570 0.081 2.072 1.182 0.046 0.168 2.312 0.597 + 202.65 12.531 12.532 12.692 -0.136 2.007 0.419 -0.136 2.007 0.840 -0.057 -0.272 2.110 0.442 + 202.70 12.418 12.419 12.572 -0.179 1.956 0.305 -0.179 1.956 0.596 -0.055 -0.350 1.975 0.347 + 202.75 12.422 12.426 12.597 -0.299 2.072 0.309 -0.299 2.072 0.641 -0.093 -0.619 2.239 0.448 + 202.80 12.262 12.262 12.403 0.088 1.861 0.149 0.088 1.861 0.278 0.013 0.163 1.746 0.161 + 202.85 12.187 12.197 12.375 0.477 2.096 0.075 0.477 2.096 0.156 0.036 1.000 2.313 0.506 + 202.90 12.276 12.286 12.487 0.489 2.233 0.163 0.489 2.233 0.365 0.080 1.092 2.627 0.577 + 202.95 12.422 12.424 12.572 0.247 1.923 0.309 0.247 1.923 0.594 0.076 0.475 1.927 0.382 + 203.00 12.301 12.302 12.450 0.157 1.914 0.189 0.157 1.914 0.361 0.030 0.300 1.861 0.235 + 203.05 12.718 12.718 12.884 -0.057 2.063 0.605 -0.057 2.063 1.249 -0.034 -0.117 2.312 0.627 + 203.10 12.311 12.312 12.448 -0.165 1.839 0.198 -0.165 1.839 0.364 -0.033 -0.304 1.724 0.238 + 203.15 11.998 11.998 12.120 0.052 1.716 -0.115 0.052 1.716 -0.197 -0.006 0.089 1.480 0.108 + 203.20 12.141 12.143 12.247 0.234 1.597 0.028 0.234 1.597 0.044 0.006 0.373 1.303 0.188 + 203.25 12.147 12.149 12.260 0.210 1.645 0.035 0.210 1.645 0.057 0.007 0.345 1.375 0.175 + 203.30 12.216 12.216 12.336 0.043 1.718 0.103 0.043 1.718 0.177 0.004 0.074 1.482 0.096 + 203.35 12.312 12.314 12.434 0.224 1.724 0.199 0.224 1.724 0.343 0.044 0.386 1.531 0.259 + 203.40 12.461 12.464 12.628 0.267 2.028 0.348 0.267 2.028 0.706 0.093 0.542 2.153 0.447 + 203.45 12.643 12.643 12.824 0.068 2.146 0.530 0.068 2.146 1.137 0.036 0.147 2.445 0.574 + 203.50 12.778 12.778 12.880 0.008 1.622 0.665 0.008 1.622 1.078 0.005 0.013 1.536 0.539 + 203.55 12.772 12.772 12.859 0.053 1.497 0.659 0.053 1.497 0.986 0.035 0.079 1.339 0.495 + 203.60 12.603 12.603 12.710 0.140 1.640 0.490 0.140 1.640 0.803 0.069 0.229 1.474 0.419 + 203.65 12.494 12.494 12.567 -0.103 1.349 0.381 -0.103 1.349 0.514 -0.039 -0.138 0.988 0.267 + 203.70 12.276 12.284 12.325 -0.434 1.006 0.163 -0.434 1.006 0.164 -0.071 -0.437 0.613 0.236 + 203.75 12.540 12.548 12.571 -0.452 0.759 0.427 -0.452 0.759 0.324 -0.193 -0.343 0.481 0.255 + 203.80 12.426 12.426 12.452 0.067 0.800 0.313 0.067 0.800 0.250 0.021 0.054 0.371 0.128 + 203.85 12.332 12.332 12.392 0.122 1.213 0.219 0.122 1.213 0.265 0.027 0.148 0.767 0.152 + 203.90 12.219 12.219 12.297 -0.101 1.385 0.106 -0.101 1.385 0.147 -0.011 -0.139 0.970 0.101 + 203.95 12.445 12.447 12.525 -0.257 1.391 0.332 -0.257 1.391 0.462 -0.085 -0.358 1.056 0.295 + 204.00 12.150 12.150 12.259 -0.090 1.629 0.037 -0.090 1.629 0.060 -0.003 -0.147 1.331 0.079 + 204.05 11.881 11.883 11.985 0.181 1.560 -0.231 0.181 1.560 -0.361 -0.042 0.283 1.260 0.230 + 204.10 11.724 11.726 11.869 0.197 1.835 -0.388 0.197 1.835 -0.713 -0.077 0.362 1.778 0.401 + 204.15 11.194 11.200 11.327 0.388 1.688 -0.919 0.388 1.688 -1.552 -0.356 0.654 1.923 0.861 + 204.20 11.430 11.438 11.585 0.438 1.839 -0.683 0.438 1.839 -1.256 -0.299 0.806 2.019 0.761 + 204.25 11.405 11.405 11.548 -0.066 1.810 -0.708 -0.066 1.810 -1.281 0.047 -0.120 1.890 0.644 + 204.30 11.483 11.485 11.690 -0.169 2.180 -0.629 -0.169 2.180 -1.372 0.106 -0.368 2.589 0.712 + 204.35 11.521 11.522 11.808 -0.142 2.585 -0.592 -0.142 2.585 -1.530 0.084 -0.367 3.526 0.788 + 204.40 11.564 11.568 11.905 -0.297 2.813 -0.549 -0.297 2.813 -1.544 0.163 -0.835 4.152 0.882 + 204.45 11.803 11.803 12.096 0.012 2.645 -0.310 0.012 2.645 -0.820 -0.004 0.032 3.546 0.410 + 204.50 12.195 12.198 12.370 -0.267 2.057 0.082 -0.267 2.057 0.169 -0.022 -0.549 2.154 0.288 + 204.55 11.829 11.832 12.025 -0.273 2.143 -0.284 -0.273 2.143 -0.608 0.077 -0.585 2.373 0.423 + 204.60 11.717 11.723 11.982 -0.367 2.478 -0.395 -0.367 2.478 -0.980 0.145 -0.908 3.216 0.672 + 204.65 11.793 11.796 12.036 -0.267 2.390 -0.320 -0.267 2.390 -0.764 0.085 -0.639 2.942 0.500 + 204.70 11.855 11.861 12.022 -0.386 1.960 -0.258 -0.386 1.960 -0.505 0.100 -0.757 2.029 0.458 + 204.75 12.140 12.155 12.313 -0.618 1.963 0.027 -0.618 1.963 0.053 -0.017 -1.213 2.117 0.607 + 204.80 12.228 12.240 12.346 -0.531 1.613 0.116 -0.531 1.613 0.187 -0.061 -0.857 1.449 0.440 + 204.85 12.314 12.337 12.437 -0.751 1.576 0.201 -0.751 1.576 0.317 -0.151 -1.183 1.544 0.617 + 204.90 12.157 12.179 12.289 -0.716 1.647 0.045 -0.716 1.647 0.074 -0.032 -1.179 1.613 0.591 + 204.95 12.140 12.157 12.259 -0.637 1.575 0.027 -0.637 1.575 0.043 -0.018 -1.004 1.444 0.502 + 205.00 11.944 11.979 12.113 -0.905 1.802 -0.168 -0.905 1.802 -0.303 0.152 -1.631 2.047 0.833 + 205.05 12.120 12.154 12.295 -0.901 1.858 0.008 -0.901 1.858 0.014 -0.007 -1.674 2.132 0.837 + 205.10 12.033 12.067 12.173 -0.904 1.599 -0.079 -0.904 1.599 -0.127 0.072 -1.446 1.690 0.727 + 205.15 11.977 12.029 12.115 -1.119 1.438 -0.136 -1.119 1.438 -0.195 0.152 -1.610 1.670 0.814 + 205.20 11.836 11.923 12.023 -1.444 1.546 -0.277 -1.444 1.546 -0.429 0.400 -2.233 2.277 1.155 + 205.25 11.794 11.810 11.857 -0.613 1.052 -0.319 -0.613 1.052 -0.335 0.195 -0.645 0.792 0.376 + 205.30 11.497 11.500 11.532 -0.275 0.859 -0.616 -0.275 0.859 -0.529 0.169 -0.236 0.597 0.302 + 205.35 11.130 11.150 11.160 -0.658 0.478 -0.982 -0.658 0.478 -0.470 0.646 -0.314 0.813 0.429 + 205.40 11.250 11.274 11.279 -0.739 0.316 -0.863 -0.739 0.316 -0.273 0.638 -0.234 0.696 0.366 + 205.45 11.153 11.168 11.178 -0.589 0.453 -0.960 -0.589 0.453 -0.435 0.565 -0.267 0.737 0.381 + 205.50 11.204 11.222 11.229 -0.644 0.387 -0.909 -0.644 0.387 -0.352 0.586 -0.249 0.696 0.364 + 205.55 11.439 11.454 11.458 -0.577 0.304 -0.674 -0.577 0.304 -0.205 0.389 -0.176 0.440 0.237 + 205.60 11.541 11.568 11.569 -0.791 0.151 -0.572 -0.791 0.151 -0.086 0.452 -0.119 0.488 0.238 + 205.65 11.272 11.301 11.301 -0.806 0.108 -0.841 -0.806 0.108 -0.091 0.678 -0.087 0.684 0.345 + 205.70 11.292 11.346 11.353 -1.108 0.391 -0.821 -1.108 0.391 -0.321 0.909 -0.433 1.027 0.529 + 205.75 11.660 11.743 11.747 -1.395 0.306 -0.453 -1.395 0.306 -0.139 0.632 -0.427 1.123 0.388 + 205.80 11.642 11.705 11.727 -1.210 0.709 -0.470 -1.210 0.709 -0.333 0.569 -0.858 1.094 0.541 + 205.85 11.263 11.314 11.333 -1.078 0.653 -0.850 -1.078 0.653 -0.555 0.916 -0.704 1.155 0.641 + 205.90 11.577 11.643 11.658 -1.239 0.593 -0.536 -1.239 0.593 -0.318 0.664 -0.734 1.086 0.520 + 205.95 11.595 11.685 11.696 -1.449 0.504 -0.518 -1.449 0.504 -0.261 0.751 -0.730 1.310 0.540 + 206.00 11.692 11.786 11.817 -1.485 0.854 -0.420 -1.485 0.854 -0.359 0.624 -1.269 1.556 0.729 + 206.05 11.074 11.143 11.204 -1.245 1.168 -1.039 -1.245 1.168 -1.214 1.294 -1.454 1.997 1.147 + 206.10 11.188 11.234 11.289 -1.014 1.113 -0.925 -1.014 1.113 -1.030 0.938 -1.129 1.562 0.897 + 206.15 11.353 11.394 11.427 -0.968 0.868 -0.760 -0.968 0.868 -0.659 0.736 -0.840 1.134 0.648 + 206.20 11.450 11.473 11.518 -0.717 1.015 -0.663 -0.717 1.015 -0.673 0.475 -0.728 0.992 0.550 + 206.25 11.564 11.596 11.641 -0.859 1.027 -0.549 -0.859 1.027 -0.564 0.471 -0.882 1.047 0.574 + 206.30 11.497 11.526 11.571 -0.821 1.018 -0.616 -0.821 1.018 -0.627 0.506 -0.835 1.045 0.580 + 206.35 11.464 11.495 11.556 -0.835 1.186 -0.648 -0.835 1.186 -0.769 0.541 -0.990 1.262 0.683 + 206.40 11.228 11.251 11.302 -0.721 1.077 -0.885 -0.721 1.077 -0.953 0.638 -0.776 1.231 0.692 + 206.45 11.097 11.134 11.193 -0.912 1.147 -1.016 -0.912 1.147 -1.165 0.926 -1.046 1.590 0.910 + 206.50 10.897 10.926 10.986 -0.800 1.142 -1.216 -0.800 1.142 -1.389 0.972 -0.914 1.711 0.963 + 206.55 10.967 10.989 11.058 -0.693 1.237 -1.146 -0.693 1.237 -1.417 0.793 -0.856 1.661 0.918 + 206.60 11.255 11.271 11.293 -0.601 0.707 -0.858 -0.601 0.707 -0.607 0.516 -0.425 0.799 0.451 + 206.65 11.189 11.204 11.216 -0.563 0.518 -0.923 -0.563 0.518 -0.478 0.520 -0.291 0.719 0.382 + 206.70 11.267 11.280 11.288 -0.533 0.432 -0.846 -0.533 0.432 -0.366 0.450 -0.230 0.593 0.312 + 206.75 11.121 11.122 11.149 -0.173 0.783 -0.992 -0.173 0.783 -0.777 0.172 -0.135 0.814 0.403 + 206.80 10.943 10.953 10.977 -0.469 0.728 -1.170 -0.469 0.728 -0.852 0.548 -0.341 1.059 0.535 + 206.85 11.025 11.032 11.067 -0.375 0.885 -1.088 -0.375 0.885 -0.962 0.408 -0.332 1.053 0.548 + 206.90 11.214 11.220 11.234 -0.360 0.567 -0.899 -0.360 0.567 -0.510 0.323 -0.204 0.629 0.319 + 206.95 11.317 11.323 11.336 -0.367 0.531 -0.796 -0.367 0.531 -0.423 0.292 -0.195 0.525 0.275 + 207.00 10.957 10.979 11.005 -0.698 0.759 -1.156 -0.698 0.759 -0.878 0.806 -0.530 1.200 0.652 + 207.05 10.704 10.714 10.729 -0.458 0.558 -1.408 -0.458 0.558 -0.786 0.644 -0.255 1.252 0.524 + 207.10 10.685 10.689 10.698 -0.278 0.439 -1.427 -0.278 0.439 -0.626 0.397 -0.122 1.154 0.376 + 207.15 10.664 10.664 10.664 -0.061 -0.029 -1.449 -0.061 -0.029 0.043 0.089 0.002 1.051 0.049 + 207.20 10.621 10.623 10.624 -0.244 -0.095 -1.492 -0.244 -0.095 0.141 0.363 0.023 1.148 0.195 + 207.25 10.562 10.568 10.569 -0.346 -0.175 -1.551 -0.346 -0.175 0.271 0.536 0.060 1.277 0.302 + 207.30 10.654 10.656 10.657 -0.217 -0.115 -1.459 -0.217 -0.115 0.167 0.317 0.025 1.094 0.179 + 207.35 10.841 10.846 10.850 -0.312 -0.292 -1.272 -0.312 -0.292 0.371 0.397 0.091 0.900 0.276 + 207.40 10.868 10.868 10.870 0.111 -0.168 -1.245 0.111 -0.168 0.209 -0.139 -0.019 0.795 0.126 + 207.45 11.180 11.181 11.182 0.196 -0.154 -0.933 0.196 -0.154 0.144 -0.183 -0.030 0.466 0.117 + 207.50 11.277 11.279 11.279 0.231 0.072 -0.836 0.231 0.072 -0.061 -0.193 0.017 0.379 0.102 + 207.55 11.252 11.252 11.252 0.012 0.046 -0.861 0.012 0.046 -0.039 -0.010 0.001 0.372 0.020 + 207.60 10.912 10.912 10.915 -0.116 0.267 -1.201 -0.116 0.267 -0.321 0.140 -0.031 0.764 0.176 + 207.65 10.867 10.868 10.883 -0.130 0.576 -1.246 -0.130 0.576 -0.718 0.162 -0.075 0.951 0.370 + 207.70 10.775 10.776 10.797 -0.195 0.673 -1.338 -0.195 0.673 -0.900 0.260 -0.131 1.140 0.473 + 207.75 10.586 10.603 10.618 -0.591 0.567 -1.526 -0.591 0.567 -0.865 0.902 -0.335 1.500 0.647 + 207.80 10.451 10.462 10.471 -0.468 0.444 -1.661 -0.468 0.444 -0.737 0.778 -0.208 1.588 0.546 + 207.85 10.757 10.781 10.787 -0.717 0.358 -1.356 -0.717 0.358 -0.485 0.971 -0.256 1.239 0.558 + 207.90 11.025 11.040 11.043 -0.589 -0.221 -1.088 -0.589 -0.221 0.241 0.641 0.130 0.790 0.349 + 207.95 11.201 11.207 11.214 -0.353 -0.388 -0.911 -0.353 -0.388 0.353 0.322 0.137 0.553 0.248 + 208.00 10.911 10.911 10.913 -0.010 -0.213 -1.202 -0.010 -0.213 0.256 0.012 0.002 0.745 0.128 + 208.05 10.934 10.937 10.939 -0.253 -0.221 -1.179 -0.253 -0.221 0.261 0.299 0.056 0.751 0.200 + 208.10 10.793 10.799 10.799 -0.363 -0.079 -1.320 -0.363 -0.079 0.105 0.479 0.029 0.940 0.245 + 208.15 10.598 10.632 10.633 -0.860 -0.111 -1.515 -0.860 -0.111 0.169 1.304 0.096 1.524 0.659 + 208.20 10.500 10.536 10.539 -0.867 0.244 -1.612 -0.867 0.244 -0.393 1.398 -0.211 1.705 0.734 + 208.25 10.525 10.548 10.555 -0.707 0.388 -1.588 -0.707 0.388 -0.617 1.122 -0.274 1.586 0.655 + 208.30 10.332 10.341 10.346 -0.412 0.347 -1.780 -0.412 0.347 -0.617 0.733 -0.143 1.730 0.484 + 208.35 10.203 10.213 10.214 -0.455 0.105 -1.909 -0.455 0.105 -0.200 0.869 -0.048 1.932 0.447 + 208.40 10.351 10.357 10.360 -0.344 0.258 -1.761 -0.344 0.258 -0.455 0.606 -0.089 1.644 0.382 + 208.45 10.471 10.476 10.481 -0.340 0.313 -1.642 -0.340 0.313 -0.514 0.559 -0.107 1.455 0.383 + 208.50 10.432 10.438 10.442 -0.358 0.260 -1.681 -0.358 0.260 -0.437 0.602 -0.093 1.510 0.375 + 208.55 10.173 10.181 10.187 -0.405 0.355 -1.940 -0.405 0.355 -0.688 0.785 -0.144 2.026 0.527 + 208.60 10.572 10.573 10.574 -0.103 0.143 -1.541 -0.103 0.143 -0.220 0.158 -0.015 1.202 0.136 + 208.65 10.598 10.598 10.601 -0.027 0.274 -1.515 -0.027 0.274 -0.415 0.041 -0.007 1.186 0.209 + 208.70 10.338 10.345 10.359 -0.368 0.537 -1.775 -0.368 0.537 -0.953 0.652 -0.197 1.786 0.586 + 208.75 10.298 10.304 10.305 -0.351 0.171 -1.815 -0.351 0.171 -0.310 0.638 -0.060 1.723 0.356 + 208.80 10.318 10.328 10.328 -0.459 -0.075 -1.795 -0.459 -0.075 0.134 0.825 0.034 1.720 0.418 + 208.85 10.307 10.315 10.316 -0.415 -0.118 -1.806 -0.415 -0.118 0.212 0.750 0.049 1.724 0.390 + 208.90 10.620 10.644 10.654 -0.715 -0.470 -1.493 -0.715 -0.470 0.702 1.067 0.336 1.480 0.660 + 208.95 10.316 10.340 10.347 -0.695 -0.399 -1.796 -0.695 -0.399 0.716 1.248 0.277 1.934 0.733 + 209.00 10.335 10.347 10.354 -0.500 -0.381 -1.778 -0.500 -0.381 0.678 0.890 0.191 1.779 0.567 + 209.05 10.103 10.119 10.120 -0.566 -0.131 -2.010 -0.566 -0.131 0.263 1.137 0.074 2.188 0.585 + 209.10 9.983 9.999 9.999 -0.571 -0.042 -2.130 -0.571 -0.042 0.090 1.216 0.024 2.433 0.610 + 209.15 10.037 10.067 10.068 -0.776 -0.081 -2.075 -0.776 -0.081 0.167 1.610 0.063 2.458 0.810 + 209.20 9.950 9.971 9.971 -0.656 -0.028 -2.163 -0.656 -0.028 0.060 1.419 0.018 2.555 0.710 + 209.25 10.189 10.197 10.198 -0.409 0.112 -1.924 -0.409 0.112 -0.215 0.788 -0.046 1.941 0.409 + 209.30 10.262 10.267 10.270 -0.318 -0.235 -1.851 -0.318 -0.235 0.436 0.589 0.075 1.791 0.368 + 209.35 10.060 10.060 10.063 -0.096 -0.256 -2.053 -0.096 -0.256 0.525 0.197 0.025 2.145 0.281 + 209.40 9.909 9.909 9.916 -0.059 -0.374 -2.204 -0.059 -0.374 0.824 0.131 0.022 2.500 0.417 + 209.45 9.672 9.682 9.684 -0.438 -0.174 -2.440 -0.438 -0.174 0.425 1.068 0.076 3.089 0.576 + 209.50 9.572 9.603 9.605 -0.763 -0.225 -2.540 -0.763 -0.225 0.573 1.939 0.172 3.544 1.015 + 209.55 9.638 9.682 9.688 -0.927 -0.343 -2.475 -0.927 -0.343 0.849 2.295 0.318 3.552 1.234 + 209.60 9.688 9.744 9.760 -1.045 -0.555 -2.425 -1.045 -0.555 1.347 2.535 0.581 3.641 1.464 + 209.65 9.711 9.735 9.758 -0.684 -0.661 -2.402 -0.684 -0.661 1.587 1.643 0.452 3.336 1.164 + 209.70 10.064 10.103 10.113 -0.887 -0.453 -2.049 -0.887 -0.453 0.928 1.817 0.401 2.594 1.040 + 209.75 9.574 9.607 9.607 -0.788 0.075 -2.538 -0.788 0.075 -0.189 2.001 -0.059 3.535 1.005 + 209.80 9.449 9.458 9.472 -0.416 0.514 -2.664 -0.416 0.514 -1.368 1.109 -0.214 3.767 0.887 + 209.85 9.362 9.376 9.380 -0.499 0.300 -2.751 -0.499 0.300 -0.824 1.372 -0.149 3.952 0.804 + 209.90 9.666 9.677 9.683 -0.465 0.328 -2.447 -0.465 0.328 -0.803 1.138 -0.153 3.155 0.701 + 209.95 9.823 9.839 9.840 -0.560 0.157 -2.290 -0.560 0.157 -0.359 1.282 -0.088 2.791 0.667 + 210.00 9.746 9.763 9.763 -0.576 0.000 -2.367 -0.576 0.000 -0.001 1.364 -0.000 2.967 0.682 + 210.05 9.707 9.708 9.711 -0.118 -0.256 -2.405 -0.118 -0.256 0.617 0.284 0.030 2.933 0.340 + 210.10 9.754 9.754 9.758 0.059 -0.284 -2.359 0.059 -0.284 0.670 -0.138 -0.017 2.825 0.342 + 210.15 9.660 9.660 9.666 -0.042 -0.340 -2.453 -0.042 -0.340 0.834 0.102 0.014 3.068 0.420 + 210.20 9.662 9.666 9.669 0.267 -0.232 -2.450 0.267 -0.232 0.569 -0.655 -0.062 3.065 0.435 + 210.25 9.552 9.559 9.564 0.356 -0.321 -2.561 0.356 -0.321 0.823 -0.912 -0.114 3.394 0.617 + 210.30 9.594 9.618 9.630 0.678 -0.483 -2.519 0.678 -0.483 1.217 -1.708 -0.328 3.519 1.062 + 210.35 9.859 9.870 9.874 0.464 -0.279 -2.254 0.464 -0.279 0.629 -1.046 -0.129 2.686 0.614 + 210.40 9.785 9.792 9.794 0.390 -0.179 -2.328 0.390 -0.179 0.416 -0.909 -0.070 2.802 0.501 + 210.45 9.831 9.841 9.845 0.432 -0.276 -2.281 0.432 -0.276 0.630 -0.986 -0.119 2.734 0.588 + 210.50 9.810 9.838 9.841 0.741 -0.212 -2.302 0.741 -0.212 0.489 -1.706 -0.157 2.947 0.891 + 210.55 9.615 9.628 9.632 0.491 -0.279 -2.498 0.491 -0.279 0.696 -1.226 -0.137 3.278 0.708 + 210.60 9.528 9.540 9.541 0.477 -0.145 -2.585 0.477 -0.145 0.375 -1.233 -0.069 3.465 0.645 + 210.65 9.443 9.445 9.462 0.170 -0.573 -2.670 0.170 -0.573 1.530 -0.454 -0.097 3.743 0.800 + 210.70 9.634 9.634 9.666 0.018 -0.782 -2.479 0.018 -0.782 1.938 -0.044 -0.014 3.378 0.969 + 210.75 9.845 9.856 9.907 -0.461 -0.999 -2.267 -0.461 -0.999 2.264 1.046 0.461 3.175 1.268 + 210.80 10.066 10.073 10.143 -0.394 -1.185 -2.047 -0.394 -1.185 2.427 0.807 0.467 2.876 1.300 + 210.85 9.997 9.998 10.047 -0.071 -1.000 -2.116 -0.071 -1.000 2.115 0.151 0.071 2.740 1.061 + 210.90 10.063 10.069 10.105 -0.343 -0.847 -2.050 -0.343 -0.847 1.737 0.702 0.290 2.518 0.948 + 210.95 10.037 10.041 10.117 -0.294 -1.238 -2.076 -0.294 -1.238 2.571 0.611 0.364 2.965 1.334 + 211.00 9.873 9.878 9.896 -0.298 -0.602 -2.240 -0.298 -0.602 1.348 0.668 0.180 2.733 0.758 + 211.05 10.015 10.025 10.027 -0.458 -0.171 -2.098 -0.458 -0.171 0.358 0.960 0.078 2.320 0.514 + 211.10 10.088 10.157 10.158 -1.185 0.128 -2.025 -1.185 0.128 -0.260 2.399 -0.152 2.760 1.209 + 211.15 10.128 10.175 10.176 -0.979 -0.141 -1.985 -0.979 -0.141 0.279 1.944 0.138 2.459 0.984 + 211.20 10.187 10.198 10.206 -0.485 -0.384 -1.926 -0.485 -0.384 0.740 0.935 0.187 2.046 0.603 + 211.25 10.382 10.406 10.412 -0.706 -0.360 -1.731 -0.706 -0.360 0.623 1.222 0.254 1.813 0.698 + 211.30 10.553 10.572 10.575 -0.645 -0.242 -1.560 -0.645 -0.242 0.377 1.006 0.156 1.454 0.543 + 211.35 10.716 10.725 10.732 -0.441 -0.378 -1.397 -0.441 -0.378 0.528 0.616 0.167 1.144 0.414 + 211.40 10.570 10.577 10.579 -0.403 -0.180 -1.543 -0.403 -0.180 0.277 0.621 0.072 1.288 0.342 + 211.45 10.605 10.641 10.641 -0.879 -0.031 -1.508 -0.879 -0.031 0.047 1.325 0.027 1.523 0.663 + 211.50 10.721 10.769 10.769 -1.011 -0.024 -1.391 -1.011 -0.024 0.033 1.406 0.024 1.479 0.703 + 211.55 11.299 11.318 11.318 -0.663 0.004 -0.814 -0.663 0.004 -0.003 0.539 -0.003 0.551 0.270 + 211.60 11.350 11.369 11.369 -0.658 -0.117 -0.763 -0.658 -0.117 0.089 0.502 0.077 0.514 0.258 + 211.65 11.427 11.434 11.434 -0.409 -0.088 -0.686 -0.409 -0.088 0.060 0.281 0.036 0.323 0.145 + 211.70 11.572 11.572 11.583 -0.011 -0.496 -0.541 -0.011 -0.496 0.268 0.006 0.005 0.269 0.134 + 211.75 11.174 11.178 11.178 0.315 -0.015 -0.939 0.315 -0.015 0.014 -0.295 -0.005 0.490 0.148 + 211.80 11.407 11.419 11.419 0.509 0.079 -0.706 0.509 0.079 -0.055 -0.359 0.040 0.382 0.183 + 211.85 11.325 11.333 11.335 0.427 0.214 -0.788 0.427 0.214 -0.169 -0.336 0.091 0.424 0.194 + 211.90 11.323 11.324 11.329 0.144 0.333 -0.790 0.144 0.333 -0.263 -0.114 0.048 0.378 0.145 + 211.95 11.383 11.385 11.392 -0.202 0.387 -0.730 -0.202 0.387 -0.283 0.147 -0.078 0.362 0.164 + 212.00 11.491 11.505 11.515 -0.561 0.479 -0.622 -0.561 0.479 -0.298 0.349 -0.269 0.466 0.266 + 212.05 11.272 11.294 11.294 -0.712 -0.006 -0.841 -0.712 -0.006 0.005 0.599 0.004 0.607 0.299 + 212.10 11.078 11.102 11.103 -0.733 0.081 -1.035 -0.733 0.081 -0.084 0.758 -0.060 0.807 0.383 + 212.15 10.982 11.009 11.014 -0.758 0.336 -1.130 -0.758 0.336 -0.380 0.857 -0.255 0.983 0.486 + 212.20 10.889 10.924 10.926 -0.877 0.214 -1.224 -0.877 0.214 -0.262 1.073 -0.188 1.156 0.560 + 212.25 11.531 11.565 11.566 -0.884 0.158 -0.582 -0.884 0.158 -0.092 0.515 -0.140 0.573 0.271 + 212.30 11.151 11.181 11.206 -0.824 0.744 -0.962 -0.824 0.744 -0.716 0.793 -0.613 1.079 0.616 + 212.35 10.908 10.948 10.978 -0.940 0.812 -1.205 -0.940 0.812 -0.979 1.133 -0.764 1.498 0.840 + 212.40 10.781 10.804 10.833 -0.700 0.786 -1.331 -0.700 0.786 -1.046 0.932 -0.550 1.440 0.753 + 212.45 10.943 10.953 10.973 -0.466 0.656 -1.169 -0.466 0.656 -0.767 0.545 -0.305 1.007 0.494 + 212.50 11.376 11.405 11.412 -0.821 0.389 -0.737 -0.821 0.389 -0.286 0.605 -0.319 0.684 0.371 + 212.55 11.172 11.178 11.184 -0.359 0.377 -0.941 -0.359 0.377 -0.355 0.338 -0.135 0.578 0.254 + 212.60 11.141 11.145 11.169 -0.300 0.722 -0.972 -0.300 0.722 -0.702 0.291 -0.216 0.778 0.395 + 212.65 11.275 11.276 11.324 0.108 1.045 -0.838 0.108 1.045 -0.875 -0.090 0.113 0.902 0.443 + 212.70 11.418 11.419 11.486 0.160 1.235 -0.695 0.160 1.235 -0.858 -0.111 0.198 1.017 0.444 + 212.75 11.499 11.499 11.543 -0.102 1.003 -0.614 -0.102 1.003 -0.616 0.063 -0.103 0.697 0.314 + 212.80 11.634 11.634 11.687 0.098 1.112 -0.479 0.098 1.112 -0.532 -0.047 0.109 0.737 0.273 + 212.85 11.541 11.543 11.605 -0.184 1.195 -0.571 -0.184 1.195 -0.683 0.105 -0.220 0.895 0.363 + 212.90 11.338 11.342 11.425 -0.275 1.379 -0.775 -0.275 1.379 -1.068 0.213 -0.379 1.288 0.576 + 212.95 11.448 11.448 11.573 -0.023 1.696 -0.665 -0.023 1.696 -1.127 0.015 -0.039 1.660 0.564 + 213.00 11.202 11.202 11.285 -0.000 1.364 -0.911 -0.000 1.364 -1.242 0.000 -0.000 1.345 0.621 + 213.05 11.203 11.205 11.299 -0.226 1.449 -0.910 -0.226 1.449 -1.318 0.206 -0.328 1.489 0.687 + 213.10 11.114 11.114 11.210 -0.053 1.464 -0.999 -0.053 1.464 -1.462 0.053 -0.077 1.572 0.733 + 213.15 11.323 11.325 11.416 0.208 1.440 -0.790 0.208 1.440 -1.137 -0.164 0.299 1.370 0.594 + 213.20 11.624 11.625 11.745 0.116 1.674 -0.488 0.116 1.674 -0.817 -0.057 0.194 1.527 0.421 + 213.25 11.710 11.712 11.820 0.227 1.594 -0.403 0.227 1.594 -0.643 -0.092 0.363 1.378 0.372 + 213.30 11.700 11.700 11.782 0.020 1.388 -0.413 0.020 1.388 -0.573 -0.008 0.028 1.048 0.287 + 213.35 11.478 11.483 11.553 -0.353 1.265 -0.635 -0.353 1.265 -0.803 0.224 -0.447 1.064 0.473 + 213.40 11.690 11.699 11.774 -0.457 1.327 -0.423 -0.457 1.327 -0.561 0.193 -0.607 1.075 0.424 + 213.45 11.806 11.815 11.931 -0.464 1.654 -0.307 -0.464 1.654 -0.507 0.142 -0.768 1.523 0.466 + 213.50 11.973 12.008 12.090 -0.919 1.403 -0.140 -0.919 1.403 -0.196 0.129 -1.289 1.417 0.655 + 213.55 12.133 12.159 12.232 -0.808 1.327 0.020 -0.808 1.327 0.026 -0.016 -1.073 1.208 0.536 + 213.60 11.864 11.882 11.970 -0.654 1.454 -0.249 -0.654 1.454 -0.362 0.163 -0.951 1.302 0.515 + 213.65 11.770 11.776 11.853 -0.391 1.352 -0.343 -0.391 1.352 -0.464 0.134 -0.528 1.050 0.358 + 213.70 11.887 11.888 11.935 0.097 1.062 -0.225 0.097 1.062 -0.239 -0.022 0.103 0.594 0.131 + 213.75 12.011 12.019 12.049 0.414 0.849 -0.101 0.414 0.849 -0.086 -0.042 0.351 0.451 0.182 + 213.80 11.586 11.587 11.654 0.129 1.246 -0.527 0.129 1.246 -0.656 -0.068 0.161 0.923 0.340 + 213.85 11.516 11.521 11.553 0.358 0.856 -0.597 0.358 0.856 -0.511 -0.214 0.306 0.608 0.316 + 213.90 11.480 11.487 11.524 0.397 0.931 -0.633 0.397 0.931 -0.590 -0.251 0.369 0.713 0.370 + 213.95 11.401 11.403 11.437 0.194 0.890 -0.712 0.194 0.890 -0.633 -0.138 0.173 0.668 0.335 + 214.00 11.333 11.333 11.399 -0.002 1.219 -0.779 -0.002 1.219 -0.950 0.002 -0.003 1.047 0.475 + 214.05 11.697 11.697 11.735 -0.079 0.943 -0.416 -0.079 0.943 -0.392 0.033 -0.074 0.534 0.200 + 214.10 11.650 11.650 11.685 -0.039 0.901 -0.463 -0.039 0.901 -0.417 0.018 -0.035 0.513 0.209 + 214.15 11.820 11.821 11.848 -0.156 0.795 -0.293 -0.156 0.795 -0.233 0.046 -0.124 0.371 0.134 + 214.20 11.776 11.776 11.827 -0.015 1.097 -0.337 -0.015 1.097 -0.369 0.005 -0.017 0.659 0.185 + 214.25 12.074 12.083 12.141 0.456 1.189 -0.038 0.456 1.189 -0.046 -0.018 0.543 0.812 0.272 + 214.30 11.751 11.761 11.849 0.478 1.444 -0.362 0.478 1.444 -0.523 -0.173 0.690 1.222 0.441 + 214.35 11.678 11.694 11.790 0.596 1.504 -0.434 0.596 1.504 -0.653 -0.259 0.897 1.403 0.570 + 214.40 11.820 11.831 11.904 0.508 1.319 -0.293 0.508 1.319 -0.386 -0.149 0.670 1.042 0.394 + 214.45 11.941 11.945 11.995 0.311 1.100 -0.172 0.311 1.100 -0.189 -0.054 0.342 0.668 0.197 + 214.50 11.882 11.884 11.939 0.206 1.143 -0.231 0.206 1.143 -0.263 -0.047 0.235 0.701 0.178 + 214.55 12.087 12.091 12.136 0.343 1.035 -0.026 0.343 1.035 -0.027 -0.009 0.355 0.595 0.178 + 214.60 11.999 12.001 12.040 0.218 0.963 -0.114 0.218 0.963 -0.109 -0.025 0.210 0.494 0.119 + 214.65 11.969 11.974 12.033 0.358 1.184 -0.144 0.358 1.184 -0.170 -0.051 0.424 0.775 0.230 + 214.70 11.908 11.916 11.997 0.449 1.385 -0.205 0.449 1.385 -0.284 -0.092 0.621 1.081 0.345 + 214.75 11.795 11.796 11.860 0.116 1.233 -0.317 0.116 1.233 -0.391 -0.037 0.143 0.817 0.209 + 214.80 12.016 12.018 12.101 -0.205 1.422 -0.097 -0.205 1.422 -0.138 0.020 -0.292 1.037 0.162 + 214.85 11.968 11.969 12.039 0.167 1.303 -0.145 0.167 1.303 -0.189 -0.024 0.217 0.873 0.144 + 214.90 12.044 12.044 12.131 0.063 1.452 -0.069 0.063 1.452 -0.100 -0.004 0.092 1.058 0.068 + 214.95 11.960 11.961 12.042 0.099 1.391 -0.152 0.099 1.391 -0.212 -0.015 0.137 0.984 0.126 + 215.00 11.627 11.632 11.729 0.329 1.507 -0.485 0.329 1.507 -0.732 -0.160 0.496 1.308 0.449 + 215.05 11.550 11.567 11.679 0.623 1.618 -0.563 0.623 1.618 -0.910 -0.351 1.008 1.661 0.702 + 215.10 11.402 11.425 11.559 0.740 1.751 -0.711 0.740 1.751 -1.246 -0.526 1.295 2.060 0.936 + 215.15 11.222 11.232 11.362 0.478 1.714 -0.891 0.478 1.714 -1.527 -0.426 0.819 1.980 0.892 + 215.20 11.143 11.160 11.240 0.623 1.335 -0.970 0.623 1.335 -1.295 -0.605 0.832 1.556 0.827 + 215.25 11.039 11.056 11.122 0.610 1.207 -1.074 0.610 1.207 -1.296 -0.655 0.737 1.491 0.814 + 215.30 11.191 11.193 11.259 0.211 1.212 -0.922 0.211 1.212 -1.117 -0.194 0.256 1.181 0.581 + 215.35 10.959 10.959 11.032 -0.014 1.267 -1.154 -0.014 1.267 -1.462 0.016 -0.018 1.468 0.731 + 215.40 11.099 11.100 11.139 -0.141 0.938 -1.014 -0.141 0.938 -0.951 0.143 -0.132 0.964 0.485 + 215.45 11.184 11.184 11.203 0.030 0.643 -0.929 0.030 0.643 -0.597 -0.028 0.019 0.638 0.299 + 215.50 10.887 10.891 10.931 0.296 0.941 -1.226 0.296 0.941 -1.154 -0.363 0.279 1.238 0.621 + 215.55 10.908 10.908 10.951 0.049 0.962 -1.205 0.049 0.962 -1.159 -0.059 0.047 1.189 0.581 + 215.60 11.036 11.036 11.142 0.098 1.533 -1.077 0.098 1.533 -1.651 -0.106 0.150 1.760 0.831 + 215.65 10.999 11.000 11.113 0.116 1.583 -1.114 0.116 1.583 -1.763 -0.129 0.184 1.880 0.889 + 215.70 11.325 11.329 11.441 0.304 1.599 -0.788 0.304 1.599 -1.260 -0.239 0.485 1.635 0.686 + 215.75 11.376 11.386 11.622 0.482 2.332 -0.737 0.482 2.332 -1.719 -0.355 1.123 3.108 1.042 + 215.80 11.118 11.140 11.306 0.700 1.933 -0.995 0.700 1.933 -1.924 -0.696 1.353 2.609 1.226 + 215.85 11.100 11.129 11.272 0.801 1.787 -1.012 0.801 1.787 -1.809 -0.811 1.431 2.429 1.222 + 215.90 11.091 11.126 11.261 0.871 1.740 -1.021 0.871 1.740 -1.777 -0.890 1.516 2.414 1.250 + 215.95 10.765 10.797 10.970 0.830 1.939 -1.348 0.830 1.939 -2.614 -1.118 1.609 3.134 1.634 + 216.00 10.698 10.737 10.935 0.911 2.070 -1.415 0.911 2.070 -2.929 -1.289 1.887 3.559 1.857 + 216.05 10.675 10.728 10.927 1.070 2.074 -1.438 1.070 2.074 -2.982 -1.539 2.220 3.757 2.012 + 216.10 11.168 11.220 11.444 1.073 2.254 -0.945 1.073 2.254 -2.129 -1.013 2.418 3.561 1.689 + 216.15 11.713 11.781 11.955 1.262 2.033 -0.399 1.262 2.033 -0.812 -0.504 2.566 2.942 1.369 + 216.20 11.781 11.825 11.951 1.009 1.732 -0.331 1.009 1.732 -0.574 -0.334 1.748 2.064 0.935 + 216.25 12.226 12.245 12.358 0.682 1.668 0.114 0.682 1.668 0.189 0.077 1.138 1.631 0.578 + 216.30 12.020 12.057 12.146 0.934 1.475 -0.093 0.934 1.475 -0.136 -0.086 1.378 1.529 0.694 + 216.35 11.850 11.932 12.044 1.395 1.638 -0.263 1.395 1.638 -0.430 -0.366 2.284 2.348 1.176 + 216.40 11.783 11.870 11.963 1.435 1.487 -0.329 1.435 1.487 -0.490 -0.473 2.135 2.190 1.120 + 216.45 11.760 11.811 11.905 1.091 1.491 -0.352 1.091 1.491 -0.525 -0.385 1.627 1.769 0.876 + 216.50 11.800 11.846 11.937 1.038 1.472 -0.313 1.038 1.472 -0.460 -0.325 1.528 1.671 0.814 + 216.55 11.810 11.856 11.975 1.039 1.685 -0.303 1.039 1.685 -0.510 -0.315 1.751 2.005 0.925 + 216.60 11.850 11.898 12.008 1.064 1.625 -0.263 1.064 1.625 -0.427 -0.280 1.729 1.921 0.901 + 216.65 11.502 11.547 11.662 1.026 1.631 -0.611 1.026 1.631 -0.997 -0.627 1.673 2.043 1.023 + 216.70 11.112 11.118 11.220 0.352 1.509 -1.001 0.352 1.509 -1.510 -0.353 0.532 1.702 0.820 + 216.75 11.221 11.245 11.364 0.738 1.642 -0.892 0.738 1.642 -1.465 -0.659 1.213 2.019 1.006 + 216.80 11.165 11.195 11.346 0.814 1.847 -0.948 0.814 1.847 -1.750 -0.771 1.503 2.486 1.216 + 216.85 11.257 11.286 11.477 0.802 2.086 -0.856 0.802 2.086 -1.785 -0.686 1.672 2.864 1.270 + 216.90 11.246 11.279 11.393 0.866 1.609 -0.867 0.866 1.609 -1.396 -0.751 1.394 2.046 1.056 + 216.95 11.255 11.285 11.365 0.815 1.350 -0.858 0.815 1.350 -1.158 -0.699 1.100 1.612 0.872 + 217.00 11.335 11.350 11.449 0.581 1.500 -0.777 0.581 1.500 -1.166 -0.452 0.872 1.596 0.762 + 217.05 11.305 11.318 11.405 0.548 1.400 -0.808 0.548 1.400 -1.130 -0.443 0.767 1.456 0.718 + 217.10 11.202 11.216 11.277 0.565 1.165 -0.911 0.565 1.165 -1.061 -0.515 0.658 1.253 0.675 + 217.15 11.746 11.751 11.806 0.362 1.133 -0.367 0.362 1.133 -0.416 -0.133 0.410 0.775 0.300 + 217.20 11.878 11.898 11.968 0.700 1.291 -0.235 0.700 1.291 -0.303 -0.165 0.904 1.106 0.484 + 217.25 12.071 12.088 12.181 0.655 1.502 -0.042 0.655 1.502 -0.063 -0.028 0.983 1.343 0.493 + 217.30 11.965 11.988 12.081 0.748 1.493 -0.148 0.748 1.493 -0.221 -0.111 1.116 1.404 0.572 + 217.35 11.921 11.946 12.069 0.784 1.713 -0.192 0.784 1.713 -0.329 -0.151 1.343 1.793 0.695 + 217.40 11.811 11.816 11.885 0.342 1.274 -0.301 0.342 1.274 -0.384 -0.103 0.435 0.915 0.295 + 217.45 11.776 11.790 11.853 0.570 1.220 -0.337 0.570 1.220 -0.411 -0.192 0.695 0.963 0.415 + 217.50 11.999 12.023 12.069 0.762 1.057 -0.114 0.762 1.057 -0.121 -0.087 0.806 0.856 0.410 + 217.55 11.642 11.645 11.684 0.252 0.949 -0.470 0.252 0.949 -0.447 -0.119 0.239 0.593 0.260 + 217.60 11.547 11.548 11.597 0.185 1.061 -0.566 0.185 1.061 -0.601 -0.105 0.196 0.740 0.320 + 217.65 11.894 11.898 11.930 0.305 0.882 -0.219 0.305 0.882 -0.193 -0.067 0.269 0.459 0.169 + 217.70 11.539 11.559 11.593 0.684 0.886 -0.574 0.684 0.886 -0.508 -0.393 0.606 0.791 0.441 + 217.75 11.451 11.475 11.519 0.744 1.009 -0.662 0.744 1.009 -0.668 -0.492 0.751 1.005 0.559 + 217.80 11.660 11.680 11.701 0.675 0.698 -0.452 0.675 0.698 -0.316 -0.305 0.471 0.574 0.322 + 217.85 11.956 11.961 11.980 0.351 0.680 -0.157 0.351 0.680 -0.107 -0.055 0.239 0.305 0.134 + 217.90 12.125 12.125 12.141 0.061 0.631 0.012 0.061 0.631 0.008 0.001 0.039 0.201 0.020 + 217.95 11.802 11.802 11.808 0.115 0.348 -0.311 0.115 0.348 -0.108 -0.036 0.040 0.116 0.060 + 218.00 11.955 11.957 11.960 0.228 0.260 -0.158 0.228 0.260 -0.041 -0.036 0.059 0.072 0.040 + 218.05 12.088 12.088 12.107 0.133 0.674 -0.025 0.133 0.674 -0.017 -0.003 0.090 0.236 0.046 + 218.10 12.117 12.118 12.137 0.183 0.664 0.004 0.183 0.664 0.003 0.001 0.121 0.237 0.061 + 218.15 12.196 12.197 12.214 0.177 0.644 0.083 0.177 0.644 0.053 0.015 0.114 0.227 0.063 + 218.20 12.431 12.437 12.444 0.381 0.423 0.319 0.381 0.423 0.135 0.121 0.161 0.213 0.121 + 218.25 12.197 12.210 12.218 0.579 0.428 0.084 0.579 0.428 0.036 0.049 0.248 0.262 0.127 + 218.30 11.934 11.939 11.944 0.344 0.355 -0.179 0.344 0.355 -0.064 -0.062 0.122 0.138 0.075 + 218.35 11.579 11.581 11.610 0.203 0.824 -0.534 0.203 0.824 -0.440 -0.108 0.167 0.503 0.241 + 218.40 11.540 11.541 11.579 -0.138 0.946 -0.573 -0.138 0.946 -0.542 0.079 -0.130 0.621 0.282 + 218.45 11.799 11.799 11.807 -0.083 0.428 -0.314 -0.083 0.428 -0.135 0.026 -0.036 0.145 0.071 + 218.50 12.139 12.143 12.144 -0.313 0.135 0.026 -0.313 0.135 0.004 -0.008 -0.042 0.058 0.022 + 218.55 12.269 12.282 12.282 -0.556 0.067 0.156 -0.556 0.067 0.011 -0.087 -0.037 0.169 0.048 + 218.60 12.105 12.109 12.109 -0.328 -0.074 -0.008 -0.328 -0.074 0.001 0.003 0.024 0.057 0.012 + 218.65 12.149 12.158 12.158 -0.462 -0.112 0.036 -0.462 -0.112 -0.004 -0.017 0.052 0.114 0.027 + 218.70 12.030 12.042 12.043 -0.530 -0.141 -0.083 -0.530 -0.141 0.012 0.044 0.075 0.154 0.044 + 218.75 11.760 11.776 11.776 -0.607 -0.038 -0.353 -0.607 -0.038 0.014 0.214 0.023 0.247 0.108 + 218.80 11.985 11.988 11.991 -0.252 -0.290 -0.128 -0.252 -0.290 0.037 0.032 0.073 0.082 0.044 + 218.85 12.115 12.117 12.120 -0.216 -0.304 0.002 -0.216 -0.304 -0.001 -0.000 0.066 0.070 0.033 + 218.90 11.869 11.873 11.882 -0.296 -0.469 -0.243 -0.296 -0.469 0.114 0.072 0.139 0.184 0.097 + 218.95 11.948 11.948 11.953 0.081 -0.318 -0.165 0.081 -0.318 0.052 -0.013 -0.026 0.068 0.030 + 219.00 12.014 12.014 12.015 0.098 -0.139 -0.099 0.098 -0.139 0.014 -0.010 -0.014 0.019 0.011 + 219.05 11.882 11.882 11.890 -0.014 -0.433 -0.231 -0.014 -0.433 0.100 0.003 0.006 0.121 0.050 + 219.10 12.085 12.085 12.090 -0.027 -0.359 -0.028 -0.027 -0.359 0.010 0.001 0.010 0.065 0.007 + 219.15 12.168 12.170 12.174 -0.215 -0.322 0.055 -0.215 -0.322 -0.018 -0.012 0.069 0.076 0.036 + 219.20 12.062 12.063 12.063 0.182 0.025 -0.051 0.182 0.025 -0.001 -0.009 0.004 0.018 0.005 + 219.25 12.188 12.188 12.188 0.075 -0.024 0.075 0.075 -0.024 -0.002 0.006 -0.002 0.006 0.003 + 219.30 12.460 12.460 12.460 -0.098 -0.034 0.347 -0.098 -0.034 -0.012 -0.034 0.003 0.066 0.018 + 219.35 12.212 12.215 12.217 0.243 -0.239 0.099 0.243 -0.239 -0.024 0.024 -0.058 0.063 0.034 + 219.40 12.056 12.058 12.058 0.217 -0.090 -0.057 0.217 -0.090 0.005 -0.012 -0.019 0.029 0.012 + 219.45 12.573 12.574 12.575 0.175 -0.114 0.460 0.175 -0.114 -0.052 0.081 -0.020 0.128 0.049 + 219.50 12.404 12.405 12.406 -0.133 -0.155 0.291 -0.133 -0.155 -0.045 -0.039 0.021 0.063 0.031 + 219.55 12.162 12.166 12.172 -0.307 0.367 0.049 -0.307 0.367 0.018 -0.015 -0.113 0.116 0.058 + 219.60 12.057 12.058 12.065 0.141 0.412 -0.056 0.141 0.412 -0.023 -0.008 0.058 0.096 0.031 + 219.65 11.721 11.721 11.722 0.051 0.138 -0.392 0.051 0.138 -0.054 -0.020 0.007 0.088 0.029 + 219.70 11.662 11.662 11.663 -0.035 0.126 -0.451 -0.035 0.126 -0.057 0.016 -0.004 0.110 0.030 + 219.75 11.593 11.607 11.607 -0.570 -0.036 -0.520 -0.570 -0.036 0.019 0.297 0.021 0.298 0.149 + 219.80 11.191 11.195 11.201 -0.303 0.368 -0.922 -0.303 0.368 -0.339 0.280 -0.112 0.539 0.227 + 219.85 11.581 11.581 11.581 0.062 0.003 -0.532 0.062 0.003 -0.002 -0.033 0.000 0.143 0.016 + 219.90 11.309 11.309 11.309 -0.101 0.003 -0.804 -0.101 0.003 -0.003 0.082 -0.000 0.328 0.041 + 219.95 11.094 11.095 11.096 -0.174 -0.135 -1.019 -0.174 -0.135 0.137 0.177 0.023 0.543 0.112 + 220.00 11.053 11.058 11.061 -0.338 -0.241 -1.060 -0.338 -0.241 0.256 0.358 0.081 0.648 0.224 + 220.05 10.741 10.746 10.750 -0.325 -0.278 -1.372 -0.325 -0.278 0.381 0.445 0.090 1.032 0.297 + 220.10 10.710 10.713 10.719 -0.237 -0.353 -1.402 -0.237 -0.353 0.495 0.332 0.084 1.074 0.301 + 220.15 10.950 10.963 10.973 -0.549 -0.468 -1.163 -0.549 -0.468 0.545 0.638 0.257 0.937 0.439 + 220.20 11.094 11.112 11.121 -0.636 -0.430 -1.019 -0.636 -0.430 0.438 0.648 0.274 0.814 0.414 + 220.25 11.143 11.174 11.190 -0.833 -0.591 -0.970 -0.833 -0.591 0.573 0.807 0.492 0.991 0.553 + 220.30 11.084 11.109 11.120 -0.741 -0.497 -1.029 -0.741 -0.497 0.511 0.763 0.368 0.927 0.495 + 220.35 11.244 11.258 11.295 -0.557 -0.916 -0.869 -0.557 -0.916 0.796 0.484 0.511 0.953 0.531 + 220.40 10.978 10.978 11.028 -0.090 -1.049 -1.135 -0.090 -1.049 1.191 0.102 0.094 1.198 0.599 + 220.45 11.064 11.064 11.118 -0.091 -1.099 -1.049 -0.091 -1.099 1.153 0.096 0.100 1.159 0.581 + 220.50 11.302 11.308 11.351 0.343 -0.996 -0.810 0.343 -0.996 0.808 -0.278 -0.342 0.884 0.460 + 220.55 11.517 11.520 11.535 0.255 -0.587 -0.596 0.255 -0.587 0.350 -0.152 -0.150 0.382 0.205 + 220.60 11.459 11.460 11.462 -0.102 -0.233 -0.654 -0.102 -0.233 0.152 0.067 0.024 0.246 0.084 + 220.65 11.700 11.701 11.705 -0.110 -0.330 -0.413 -0.110 -0.330 0.136 0.046 0.036 0.146 0.074 + 220.70 11.695 11.701 11.706 -0.393 -0.330 -0.418 -0.393 -0.330 0.138 0.164 0.130 0.219 0.125 + 220.75 11.496 11.497 11.499 -0.093 -0.250 -0.617 -0.093 -0.250 0.154 0.057 0.023 0.226 0.083 + 220.80 11.750 11.750 11.764 -0.051 -0.579 -0.363 -0.051 -0.579 0.210 0.018 0.029 0.235 0.107 + 220.85 11.913 11.915 11.973 -0.206 -1.178 -0.200 -0.206 -1.178 0.235 0.041 0.243 0.735 0.170 + 220.90 11.918 11.925 11.978 -0.388 -1.127 -0.194 -0.388 -1.127 0.219 0.075 0.437 0.730 0.248 + 220.95 12.101 12.109 12.172 -0.426 -1.235 -0.011 -0.426 -1.235 0.014 0.005 0.526 0.854 0.263 + 221.00 12.057 12.061 12.126 -0.304 -1.262 -0.056 -0.304 -1.262 0.071 0.017 0.384 0.844 0.195 + 221.05 11.828 11.830 11.870 -0.182 -0.971 -0.284 -0.182 -0.971 0.276 0.052 0.176 0.529 0.166 + 221.10 12.042 12.044 12.094 -0.191 -1.100 -0.071 -0.191 -1.100 0.078 0.013 0.210 0.625 0.112 + 221.15 11.821 11.822 11.860 -0.106 -0.948 -0.291 -0.106 -0.948 0.276 0.031 0.100 0.497 0.148 + 221.20 11.603 11.603 11.651 0.058 -1.050 -0.510 0.058 -1.050 0.536 -0.030 -0.061 0.683 0.270 + 221.25 11.647 11.648 11.688 0.135 -0.975 -0.466 0.135 -0.975 0.454 -0.063 -0.131 0.593 0.239 + 221.30 11.794 11.794 11.839 0.115 -1.023 -0.319 0.115 -1.023 0.326 -0.037 -0.117 0.581 0.174 + 221.35 11.751 11.752 11.790 0.153 -0.951 -0.362 0.153 -0.951 0.344 -0.055 -0.145 0.529 0.189 + 221.40 11.670 11.672 11.713 -0.210 -0.982 -0.443 -0.210 -0.982 0.435 0.093 0.207 0.603 0.245 + 221.45 11.486 11.486 11.519 -0.062 -0.870 -0.627 -0.062 -0.870 0.545 0.039 0.054 0.577 0.275 + 221.50 11.054 11.055 11.057 -0.055 -0.220 -1.058 -0.055 -0.220 0.232 0.058 0.012 0.586 0.120 + 221.55 11.099 11.103 11.103 0.284 -0.129 -1.014 0.284 -0.129 0.131 -0.288 -0.037 0.563 0.159 + 221.60 11.182 11.185 11.185 0.259 0.031 -0.930 0.259 0.031 -0.029 -0.241 0.008 0.467 0.122 + 221.65 11.246 11.246 11.251 0.041 -0.326 -0.867 0.041 -0.326 0.282 -0.035 -0.013 0.430 0.142 + 221.70 11.380 11.381 11.398 0.126 -0.620 -0.733 0.126 -0.620 0.455 -0.092 -0.078 0.469 0.235 + 221.75 11.316 11.317 11.323 0.122 -0.372 -0.796 0.122 -0.372 0.296 -0.097 -0.045 0.394 0.157 + 221.80 11.445 11.446 11.449 0.124 -0.273 -0.667 0.124 -0.273 0.182 -0.083 -0.034 0.268 0.101 + 221.85 11.452 11.453 11.457 0.092 -0.314 -0.660 0.092 -0.314 0.208 -0.060 -0.029 0.272 0.109 + 221.90 11.267 11.296 11.309 0.802 -0.554 -0.846 0.802 -0.554 0.469 -0.678 -0.444 0.832 0.468 + 221.95 11.157 11.223 11.281 1.215 -1.141 -0.955 1.215 -1.141 1.090 -1.161 -1.386 1.845 1.056 + 222.00 11.177 11.216 11.250 0.935 -0.882 -0.936 0.935 -0.882 0.826 -0.876 -0.825 1.264 0.729 + 222.05 11.212 11.256 11.297 0.993 -0.961 -0.901 0.993 -0.961 0.866 -0.895 -0.954 1.361 0.784 + 222.10 11.268 11.318 11.362 1.071 -0.998 -0.845 1.071 -0.998 0.843 -0.905 -1.068 1.428 0.817 + 222.15 11.215 11.280 11.309 1.212 -0.807 -0.898 1.212 -0.807 0.725 -1.089 -0.978 1.464 0.817 + 222.20 11.323 11.355 11.385 0.858 -0.817 -0.790 0.858 -0.817 0.645 -0.677 -0.700 1.013 0.584 + 222.25 11.344 11.375 11.397 0.841 -0.712 -0.769 0.841 -0.712 0.548 -0.646 -0.599 0.903 0.519 + 222.30 11.405 11.452 11.479 1.037 -0.785 -0.708 1.037 -0.785 0.556 -0.734 -0.814 1.097 0.615 + 222.35 11.501 11.527 11.556 0.775 -0.822 -0.612 0.775 -0.822 0.503 -0.474 -0.637 0.825 0.470 + 222.40 11.623 11.643 11.665 0.690 -0.707 -0.490 0.690 -0.707 0.346 -0.338 -0.488 0.608 0.344 + 222.45 11.296 11.311 11.348 0.598 -0.915 -0.817 0.598 -0.915 0.748 -0.488 -0.547 0.931 0.524 + 222.50 11.102 11.144 11.177 0.978 -0.852 -1.011 0.978 -0.852 0.861 -0.989 -0.833 1.352 0.777 + 222.55 11.098 11.154 11.193 1.112 -0.940 -1.014 1.112 -0.940 0.953 -1.128 -1.045 1.575 0.905 + 222.60 10.975 11.064 11.094 1.402 -0.816 -1.138 1.402 -0.816 0.929 -1.595 -1.145 1.963 1.086 + 222.65 11.089 11.177 11.189 1.407 -0.509 -1.024 1.407 -0.509 0.521 -1.441 -0.716 1.644 0.846 + 222.70 10.933 11.070 11.079 1.735 -0.446 -1.179 1.735 -0.446 0.526 -2.047 -0.774 2.301 1.125 + 222.75 10.974 11.102 11.108 1.683 -0.370 -1.139 1.683 -0.370 0.422 -1.917 -0.623 2.133 1.030 + 222.80 10.884 11.021 11.025 1.734 -0.293 -1.229 1.734 -0.293 0.360 -2.131 -0.508 2.302 1.110 + 222.85 11.397 11.542 11.588 1.827 -1.029 -0.716 1.827 -1.029 0.737 -1.308 -1.880 2.455 1.203 + 222.90 11.260 11.371 11.406 1.588 -0.888 -0.853 1.588 -0.888 0.757 -1.354 -1.409 2.018 1.048 + 222.95 11.166 11.275 11.299 1.564 -0.728 -0.947 1.564 -0.728 0.689 -1.481 -1.138 1.936 0.995 + 223.00 11.291 11.404 11.416 1.598 -0.528 -0.822 1.598 -0.528 0.434 -1.313 -0.843 1.754 0.810 + 223.05 10.898 11.070 11.081 1.948 -0.491 -1.215 1.948 -0.491 0.596 -2.367 -0.956 2.756 1.311 + 223.10 11.032 11.219 11.237 2.043 -0.626 -1.081 2.043 -0.626 0.676 -2.209 -1.278 2.868 1.320 + 223.15 10.920 11.082 11.112 1.889 -0.820 -1.193 1.889 -0.820 0.978 -2.254 -1.548 2.831 1.452 + 223.20 10.886 11.019 11.065 1.711 -1.002 -1.227 1.711 -1.002 1.230 -2.100 -1.714 2.718 1.488 + 223.25 11.078 11.220 11.272 1.776 -1.082 -1.034 1.776 -1.082 1.119 -1.837 -1.922 2.697 1.442 + 223.30 11.098 11.254 11.283 1.866 -0.804 -1.014 1.866 -0.804 0.815 -1.893 -1.500 2.579 1.275 + 223.35 10.854 11.051 11.086 2.082 -0.871 -1.259 2.082 -0.871 1.097 -2.622 -1.814 3.340 1.686 + 223.40 10.789 10.968 11.004 1.974 -0.884 -1.324 1.974 -0.884 1.171 -2.613 -1.746 3.216 1.677 + 223.45 10.974 11.066 11.129 1.427 -1.185 -1.139 1.427 -1.185 1.349 -1.625 -1.690 2.368 1.353 + 223.50 11.102 11.183 11.285 1.340 -1.513 -1.010 1.340 -1.513 1.528 -1.354 -2.027 2.552 1.438 + 223.55 10.987 11.000 11.081 0.530 -1.340 -1.126 0.530 -1.340 1.508 -0.597 -0.710 1.672 0.885 + 223.60 11.382 11.383 11.475 0.157 -1.450 -0.731 0.157 -1.450 1.060 -0.115 -0.227 1.330 0.545 + 223.65 11.244 11.256 11.327 0.523 -1.266 -0.869 0.523 -1.266 1.100 -0.454 -0.662 1.316 0.681 + 223.70 11.288 11.313 11.345 0.740 -0.858 -0.824 0.740 -0.858 0.707 -0.610 -0.635 0.981 0.565 + 223.75 11.237 11.246 11.271 0.434 -0.749 -0.876 0.434 -0.749 0.656 -0.380 -0.325 0.758 0.412 + 223.80 11.210 11.234 11.260 0.733 -0.757 -0.903 0.733 -0.757 0.683 -0.662 -0.555 0.962 0.550 + 223.85 11.469 11.480 11.492 0.496 -0.527 -0.644 0.496 -0.527 0.340 -0.320 -0.262 0.470 0.267 + 223.90 11.387 11.392 11.412 0.332 -0.681 -0.726 0.332 -0.681 0.495 -0.241 -0.226 0.551 0.297 + 223.95 11.523 11.527 11.545 0.311 -0.640 -0.590 0.311 -0.640 0.378 -0.184 -0.199 0.427 0.232 + 224.00 11.361 11.386 11.406 0.757 -0.669 -0.752 0.757 -0.669 0.503 -0.569 -0.506 0.793 0.456 + 224.05 11.616 11.632 11.664 0.602 -0.871 -0.497 0.602 -0.871 0.433 -0.299 -0.525 0.684 0.371 + 224.10 11.539 11.557 11.585 0.644 -0.809 -0.574 0.644 -0.809 0.465 -0.370 -0.521 0.699 0.395 + 224.15 11.226 11.249 11.287 0.721 -0.935 -0.887 0.721 -0.935 0.830 -0.640 -0.674 1.091 0.623 + 224.20 11.348 11.367 11.383 0.666 -0.587 -0.765 0.666 -0.587 0.449 -0.509 -0.391 0.686 0.392 + 224.25 11.424 11.428 11.442 0.284 -0.577 -0.689 0.284 -0.577 0.397 -0.195 -0.164 0.444 0.236 + 224.30 11.527 11.529 11.549 -0.187 -0.687 -0.586 -0.187 -0.687 0.402 0.110 0.128 0.425 0.218 + 224.35 11.327 11.327 11.352 0.070 -0.745 -0.786 0.070 -0.745 0.585 -0.055 -0.052 0.588 0.295 + 224.40 11.302 11.310 11.319 -0.432 -0.440 -0.811 -0.432 -0.440 0.357 0.350 0.190 0.519 0.267 + 224.45 10.989 11.006 11.009 -0.609 -0.266 -1.124 -0.609 -0.266 0.299 0.684 0.162 0.852 0.382 + 224.50 10.884 10.909 10.923 -0.727 -0.562 -1.228 -0.727 -0.562 0.691 0.893 0.409 1.177 0.601 + 224.55 11.474 11.510 11.523 -0.912 -0.531 -0.639 -0.912 -0.531 0.339 0.582 0.484 0.760 0.415 + 224.60 11.546 11.581 11.595 -0.899 -0.564 -0.567 -0.899 -0.564 0.319 0.509 0.506 0.723 0.393 + 224.65 11.559 11.604 11.617 -1.015 -0.549 -0.553 -1.015 -0.549 0.304 0.562 0.558 0.820 0.424 + 224.70 11.572 11.609 11.644 -0.928 -0.900 -0.541 -0.928 -0.900 0.487 0.502 0.835 0.982 0.545 + 224.75 11.964 11.995 12.039 -0.854 -1.037 -0.149 -0.854 -1.037 0.154 0.127 0.885 0.913 0.454 + 224.80 11.859 11.906 11.929 -1.051 -0.744 -0.254 -1.051 -0.744 0.189 0.267 0.782 0.861 0.424 + 224.85 12.105 12.140 12.147 -0.914 -0.404 -0.007 -0.914 -0.404 0.003 0.007 0.369 0.500 0.185 + 224.90 12.356 12.402 12.416 -1.065 -0.605 0.243 -1.065 -0.605 -0.147 -0.259 0.644 0.780 0.355 + 224.95 12.118 12.138 12.156 -0.700 -0.661 0.005 -0.700 -0.661 -0.003 -0.004 0.463 0.464 0.231 + 225.00 12.066 12.081 12.092 -0.594 -0.505 -0.046 -0.594 -0.505 0.023 0.028 0.300 0.305 0.151 + 225.05 11.733 11.753 11.753 -0.689 0.074 -0.380 -0.689 0.074 -0.028 0.262 -0.051 0.313 0.134 + 225.10 11.951 11.967 11.973 -0.620 -0.378 -0.162 -0.620 -0.378 0.061 0.100 0.234 0.276 0.131 + 225.15 11.876 11.899 11.909 -0.727 -0.503 -0.236 -0.727 -0.503 0.119 0.172 0.365 0.418 0.210 + 225.20 11.604 11.608 11.613 -0.273 -0.347 -0.508 -0.273 -0.347 0.177 0.139 0.095 0.227 0.122 + 225.25 11.715 11.715 11.718 -0.075 -0.251 -0.398 -0.075 -0.251 0.100 0.030 0.019 0.113 0.053 + 225.30 11.509 11.509 11.509 -0.002 0.051 -0.604 -0.002 0.051 -0.031 0.001 -0.000 0.184 0.016 + 225.35 11.872 11.878 11.878 0.350 0.051 -0.240 0.350 0.051 -0.012 -0.084 0.018 0.091 0.043 + 225.40 11.471 11.471 11.476 0.059 -0.333 -0.642 0.059 -0.333 0.214 -0.038 -0.020 0.263 0.109 + 225.45 11.370 11.372 11.383 -0.202 -0.491 -0.742 -0.202 -0.491 0.364 0.150 0.099 0.416 0.203 + 225.50 11.689 11.693 11.709 -0.298 -0.624 -0.424 -0.298 -0.624 0.264 0.126 0.186 0.329 0.174 + 225.55 11.661 11.670 11.695 -0.462 -0.769 -0.452 -0.462 -0.769 0.347 0.209 0.355 0.505 0.270 + 225.60 11.909 11.924 11.959 -0.596 -0.916 -0.204 -0.596 -0.916 0.186 0.121 0.546 0.618 0.295 + 225.65 11.800 11.809 11.857 -0.439 -1.066 -0.312 -0.439 -1.066 0.333 0.137 0.468 0.714 0.295 + 225.70 11.704 11.704 11.725 0.060 -0.701 -0.409 0.060 -0.701 0.286 -0.025 -0.042 0.331 0.145 + 225.75 11.518 11.518 11.529 0.092 -0.512 -0.595 0.092 -0.512 0.305 -0.055 -0.047 0.312 0.157 + 225.80 11.356 11.362 11.364 0.373 -0.245 -0.757 0.373 -0.245 0.185 -0.283 -0.091 0.386 0.175 + 225.85 11.337 11.344 11.344 0.404 0.076 -0.776 0.404 0.076 -0.059 -0.314 0.031 0.386 0.160 + 225.90 11.704 11.704 11.707 0.106 -0.238 -0.409 0.106 -0.238 0.097 -0.043 -0.025 0.118 0.055 + 225.95 11.859 11.862 11.868 0.273 -0.386 -0.254 0.273 -0.386 0.098 -0.069 -0.105 0.144 0.080 + 226.00 11.575 11.575 11.582 -0.060 -0.381 -0.538 -0.060 -0.381 0.205 0.032 0.023 0.219 0.104 + 226.05 11.501 11.501 11.502 0.007 -0.139 -0.612 0.007 -0.139 0.085 -0.004 -0.001 0.197 0.043 + 226.10 11.624 11.624 11.629 0.068 -0.340 -0.489 0.068 -0.340 0.166 -0.033 -0.023 0.180 0.086 + 226.15 11.615 11.615 11.624 -0.026 -0.447 -0.498 -0.026 -0.447 0.222 0.013 0.011 0.224 0.112 + 226.20 11.621 11.621 11.648 0.045 -0.806 -0.492 0.045 -0.806 0.397 -0.022 -0.037 0.447 0.200 + 226.25 11.502 11.502 11.519 0.043 -0.639 -0.611 0.043 -0.639 0.390 -0.027 -0.028 0.392 0.196 + 226.30 11.172 11.175 11.197 0.262 -0.713 -0.941 0.262 -0.713 0.671 -0.247 -0.187 0.731 0.369 + 226.35 10.970 10.988 11.010 0.627 -0.689 -1.142 0.627 -0.689 0.787 -0.717 -0.432 1.087 0.574 + 226.40 10.897 10.924 10.932 0.768 -0.408 -1.216 0.768 -0.408 0.496 -0.934 -0.313 1.117 0.551 + 226.45 10.718 10.747 10.766 0.781 -0.637 -1.394 0.781 -0.637 0.888 -1.089 -0.498 1.480 0.745 + 226.50 10.615 10.621 10.650 0.342 -0.780 -1.497 0.342 -0.780 1.168 -0.512 -0.267 1.484 0.651 + 226.55 10.665 10.670 10.680 0.343 -0.454 -1.448 0.343 -0.454 0.658 -0.497 -0.156 1.210 0.419 + 226.60 10.679 10.684 10.685 0.353 0.066 -1.434 0.353 0.066 -0.095 -0.507 0.023 1.093 0.258 + 226.65 10.837 10.846 10.849 0.430 0.257 -1.275 0.430 0.257 -0.328 -0.548 0.111 0.939 0.324 + 226.70 11.007 11.007 11.008 0.037 0.045 -1.105 0.037 0.045 -0.050 -0.041 0.002 0.613 0.032 + 226.75 11.150 11.157 11.160 0.390 0.254 -0.962 0.390 0.254 -0.244 -0.375 0.099 0.571 0.229 + 226.80 11.098 11.099 11.106 0.161 0.395 -1.015 0.161 0.395 -0.401 -0.163 0.063 0.606 0.219 + 226.85 11.061 11.061 11.064 0.046 0.250 -1.052 0.046 0.250 -0.263 -0.048 0.011 0.586 0.134 + 226.90 11.311 11.320 11.322 0.459 -0.197 -0.802 0.459 -0.197 0.158 -0.368 -0.090 0.446 0.205 + 226.95 11.551 11.586 11.586 0.894 -0.060 -0.562 0.894 -0.060 0.034 -0.502 -0.054 0.559 0.253 + 227.00 11.577 11.601 11.602 0.748 -0.046 -0.536 0.748 -0.046 0.025 -0.400 -0.034 0.424 0.201 + 227.05 11.205 11.249 11.249 1.000 -0.039 -0.908 1.000 -0.039 0.035 -0.908 -0.039 0.913 0.455 + 227.10 11.082 11.102 11.104 0.660 -0.247 -1.031 0.660 -0.247 0.255 -0.680 -0.163 0.779 0.372 + 227.15 10.977 11.003 11.004 0.750 -0.166 -1.135 0.750 -0.166 0.188 -0.851 -0.124 0.939 0.440 + 227.20 10.609 10.621 10.621 0.498 -0.078 -1.503 0.498 -0.078 0.117 -0.749 -0.039 1.257 0.379 + 227.25 10.958 10.974 10.977 0.587 0.290 -1.155 0.587 0.290 -0.335 -0.677 0.170 0.881 0.387 + 227.30 10.876 10.891 10.896 0.574 0.348 -1.237 0.574 0.348 -0.431 -0.710 0.200 0.991 0.427 + 227.35 11.060 11.079 11.091 0.654 0.511 -1.053 0.654 0.511 -0.539 -0.689 0.334 0.899 0.468 + 227.40 11.096 11.106 11.107 0.462 0.179 -1.017 0.462 0.179 -0.182 -0.470 0.082 0.640 0.255 + 227.45 11.159 11.172 11.182 0.543 0.479 -0.954 0.543 0.479 -0.457 -0.518 0.260 0.717 0.369 + 227.50 11.157 11.159 11.168 0.239 0.440 -0.956 0.239 0.440 -0.420 -0.229 0.105 0.582 0.245 + 227.55 10.894 10.908 10.913 0.560 0.330 -1.219 0.560 0.330 -0.402 -0.682 0.185 0.954 0.407 + 227.60 10.934 10.973 10.985 0.935 0.494 -1.179 0.935 0.494 -0.583 -1.103 0.462 1.255 0.665 + 227.65 10.683 10.698 10.700 0.557 0.200 -1.430 0.557 0.200 -0.286 -0.797 0.112 1.197 0.427 + 227.70 10.441 10.452 10.460 0.472 0.431 -1.672 0.472 0.431 -0.721 -0.789 0.204 1.602 0.544 + 227.75 10.954 10.954 10.956 -0.040 0.192 -1.159 -0.040 0.192 -0.222 0.047 -0.008 0.691 0.113 + 227.80 10.812 10.814 10.816 0.234 -0.150 -1.301 0.234 -0.150 0.195 -0.304 -0.035 0.885 0.182 + 227.85 11.070 11.086 11.097 0.594 -0.500 -1.043 0.594 -0.500 0.521 -0.620 -0.297 0.845 0.431 + 227.90 11.480 11.521 11.539 0.976 -0.646 -0.633 0.976 -0.646 0.409 -0.618 -0.630 0.885 0.486 + 227.95 11.601 11.631 11.635 0.826 -0.326 -0.511 0.826 -0.326 0.167 -0.422 -0.269 0.525 0.264 + 228.00 11.458 11.472 11.478 0.557 -0.382 -0.655 0.557 -0.382 0.250 -0.364 -0.212 0.442 0.245 + 228.05 11.614 11.650 11.675 0.909 -0.769 -0.499 0.909 -0.769 0.383 -0.453 -0.699 0.833 0.458 + 228.10 11.846 11.867 11.900 0.710 -0.882 -0.267 0.710 -0.882 0.235 -0.189 -0.626 0.676 0.347 + 228.15 11.988 12.039 12.067 1.106 -0.825 -0.125 1.106 -0.825 0.103 -0.138 -0.912 0.959 0.464 + 228.20 12.203 12.229 12.251 0.797 -0.727 0.090 0.797 -0.727 -0.066 0.072 -0.579 0.586 0.294 + 228.25 11.787 11.819 11.854 0.865 -0.912 -0.326 0.865 -0.912 0.297 -0.282 -0.789 0.843 0.444 + 228.30 11.740 11.771 11.806 0.849 -0.910 -0.372 0.849 -0.910 0.339 -0.316 -0.773 0.844 0.451 + 228.35 11.693 11.746 11.787 1.115 -0.978 -0.420 1.115 -0.978 0.411 -0.468 -1.091 1.188 0.628 + 228.40 11.595 11.675 11.709 1.359 -0.898 -0.518 1.359 -0.898 0.465 -0.704 -1.221 1.462 0.742 + 228.45 11.446 11.487 11.488 0.971 -0.168 -0.667 0.971 -0.168 0.112 -0.647 -0.163 0.707 0.338 + 228.50 11.389 11.442 11.445 1.098 -0.262 -0.724 1.098 -0.262 0.190 -0.795 -0.288 0.899 0.433 + 228.55 11.508 11.546 11.571 0.939 -0.757 -0.605 0.939 -0.757 0.458 -0.568 -0.711 0.910 0.509 + 228.60 11.564 11.572 11.615 0.440 -0.990 -0.549 0.440 -0.990 0.543 -0.241 -0.435 0.737 0.368 + 228.65 11.575 11.594 11.636 0.654 -0.995 -0.537 0.654 -0.995 0.535 -0.351 -0.651 0.853 0.456 + 228.70 11.143 11.175 11.195 0.847 -0.657 -0.970 0.847 -0.657 0.637 -0.821 -0.556 1.044 0.589 + 228.75 10.942 10.951 10.955 0.450 -0.314 -1.171 0.450 -0.314 0.368 -0.527 -0.142 0.836 0.329 + 228.80 11.280 11.286 11.289 0.390 -0.258 -0.833 0.390 -0.258 0.215 -0.325 -0.100 0.456 0.201 + 228.85 11.269 11.269 11.271 -0.066 -0.172 -0.844 -0.066 -0.172 0.145 0.056 0.011 0.373 0.078 + 228.90 11.538 11.540 11.541 0.210 -0.164 -0.575 0.210 -0.164 0.094 -0.121 -0.034 0.201 0.078 + 228.95 11.367 11.368 11.371 0.082 -0.285 -0.745 0.082 -0.285 0.212 -0.061 -0.023 0.322 0.111 + 229.00 11.082 11.082 11.091 0.100 -0.437 -1.031 0.100 -0.437 0.451 -0.103 -0.044 0.632 0.232 + 229.05 11.223 11.223 11.226 -0.131 -0.261 -0.890 -0.131 -0.261 0.233 0.117 0.034 0.439 0.131 + 229.10 11.558 11.563 11.575 -0.332 -0.516 -0.554 -0.332 -0.516 0.286 0.184 0.171 0.342 0.190 + 229.15 11.300 11.301 11.321 -0.169 -0.681 -0.813 -0.169 -0.681 0.554 0.137 0.115 0.577 0.291 + 229.20 11.356 11.357 11.365 0.110 -0.431 -0.757 0.110 -0.431 0.326 -0.083 -0.047 0.385 0.170 + 229.25 11.528 11.528 11.528 0.075 -0.018 -0.585 0.075 -0.018 0.010 -0.044 -0.001 0.174 0.023 + 229.30 11.592 11.596 11.597 0.309 -0.188 -0.521 0.309 -0.188 0.098 -0.161 -0.058 0.201 0.099 + 229.35 11.523 11.527 11.531 0.316 -0.274 -0.590 0.316 -0.274 0.162 -0.186 -0.087 0.261 0.131 + 229.40 11.576 11.580 11.583 0.305 -0.283 -0.537 0.305 -0.283 0.152 -0.164 -0.086 0.231 0.120 + 229.45 11.917 11.917 11.920 0.016 -0.289 -0.196 0.016 -0.289 0.057 -0.003 -0.005 0.061 0.028 + 229.50 11.663 11.663 11.663 -0.016 0.123 -0.450 -0.016 0.123 -0.055 0.007 -0.002 0.109 0.028 + 229.55 11.570 11.571 11.572 -0.054 0.157 -0.542 -0.054 0.157 -0.085 0.029 -0.009 0.161 0.045 + 229.60 11.431 11.432 11.432 -0.136 -0.006 -0.682 -0.136 -0.006 0.004 0.093 0.001 0.242 0.046 + 229.65 11.162 11.166 11.171 -0.297 0.333 -0.951 -0.297 0.333 -0.317 0.283 -0.099 0.552 0.218 + 229.70 11.184 11.199 11.202 -0.576 0.296 -0.929 -0.576 0.296 -0.275 0.535 -0.171 0.641 0.313 + 229.75 10.957 10.970 10.976 -0.539 0.350 -1.156 -0.539 0.350 -0.405 0.624 -0.189 0.875 0.383 + 229.80 11.008 11.015 11.034 -0.388 0.650 -1.105 -0.388 0.650 -0.718 0.428 -0.252 0.897 0.437 + 229.85 11.082 11.084 11.104 -0.195 0.661 -1.031 -0.195 0.661 -0.681 0.201 -0.129 0.768 0.361 + 229.90 10.857 10.874 10.896 -0.608 0.700 -1.256 -0.608 0.700 -0.879 0.763 -0.425 1.218 0.620 + 229.95 10.973 11.006 11.044 -0.841 0.915 -1.139 -0.841 0.915 -1.043 0.958 -0.770 1.421 0.806 + 230.00 10.901 10.942 10.953 -0.946 0.499 -1.212 -0.946 0.499 -0.604 1.146 -0.471 1.305 0.689 + 230.05 10.815 10.824 10.827 -0.454 0.259 -1.298 -0.454 0.259 -0.336 0.590 -0.117 0.979 0.344 + 230.10 10.508 10.519 10.523 -0.490 0.286 -1.605 -0.490 0.286 -0.458 0.787 -0.140 1.450 0.461 + 230.15 10.621 10.660 10.669 -0.914 0.444 -1.492 -0.914 0.444 -0.662 1.363 -0.405 1.629 0.784 + 230.20 11.218 11.255 11.264 -0.909 0.441 -0.895 -0.909 0.441 -0.395 0.814 -0.401 0.911 0.495 + 230.25 11.075 11.105 11.105 -0.812 0.115 -1.038 -0.812 0.115 -0.119 0.842 -0.093 0.874 0.428 + 230.30 10.857 10.891 10.893 -0.860 -0.180 -1.256 -0.860 -0.180 0.226 1.079 0.155 1.174 0.557 + 230.35 11.057 11.110 11.114 -1.085 -0.286 -1.056 -1.085 -0.286 0.302 1.146 0.310 1.187 0.612 + 230.40 11.034 11.093 11.093 -1.134 -0.086 -1.078 -1.134 -0.086 0.093 1.223 0.098 1.228 0.615 + 230.45 11.047 11.080 11.083 -0.852 0.233 -1.066 -0.852 0.233 -0.248 0.908 -0.198 0.958 0.481 + 230.50 11.330 11.347 11.359 -0.624 0.525 -0.783 -0.624 0.525 -0.411 0.488 -0.327 0.639 0.359 + 230.55 11.194 11.219 11.244 -0.763 0.740 -0.919 -0.763 0.740 -0.680 0.702 -0.564 0.987 0.564 + 230.60 11.268 11.283 11.317 -0.589 0.876 -0.845 -0.589 0.876 -0.740 0.498 -0.516 0.914 0.515 + 230.65 11.518 11.535 11.579 -0.626 1.009 -0.595 -0.626 1.009 -0.600 0.372 -0.632 0.882 0.474 + 230.70 11.518 11.530 11.586 -0.533 1.140 -0.595 -0.533 1.140 -0.678 0.317 -0.608 0.969 0.482 + 230.75 11.748 11.758 11.810 -0.465 1.106 -0.364 -0.465 1.106 -0.403 0.169 -0.514 0.786 0.337 + 230.80 11.751 11.757 11.842 -0.370 1.418 -0.362 -0.370 1.418 -0.513 0.134 -0.524 1.140 0.373 + 230.85 11.599 11.605 11.648 -0.371 0.999 -0.513 -0.371 0.999 -0.513 0.191 -0.371 0.699 0.330 + 230.90 11.608 11.609 11.650 -0.199 0.968 -0.505 -0.199 0.968 -0.489 0.101 -0.192 0.615 0.267 + 230.95 11.430 11.430 11.494 -0.044 1.218 -0.683 -0.044 1.218 -0.832 0.030 -0.054 0.976 0.417 + 231.00 11.271 11.272 11.328 0.156 1.123 -0.842 0.156 1.123 -0.945 -0.131 0.175 0.997 0.485 + 231.05 11.302 11.302 11.367 -0.055 1.210 -0.811 -0.055 1.210 -0.981 0.044 -0.066 1.062 0.492 + 231.10 11.441 11.445 11.497 -0.310 1.091 -0.672 -0.310 1.091 -0.733 0.208 -0.338 0.869 0.417 + 231.15 11.249 11.250 11.315 -0.145 1.213 -0.864 -0.145 1.213 -1.047 0.125 -0.176 1.118 0.535 + 231.20 11.698 11.709 11.755 -0.507 1.048 -0.415 -0.507 1.048 -0.435 0.211 -0.531 0.764 0.359 + 231.25 11.392 11.399 11.469 -0.408 1.258 -0.721 -0.408 1.258 -0.906 0.294 -0.513 1.134 0.541 + 231.30 11.523 11.535 11.624 -0.529 1.437 -0.590 -0.529 1.437 -0.848 0.312 -0.760 1.347 0.590 + 231.35 11.613 11.622 11.676 -0.477 1.119 -0.500 -0.477 1.119 -0.560 0.238 -0.534 0.865 0.405 + 231.40 11.540 11.556 11.580 -0.614 0.739 -0.573 -0.614 0.739 -0.423 0.352 -0.454 0.626 0.357 + 231.45 11.459 11.472 11.526 -0.559 1.108 -0.654 -0.559 1.108 -0.725 0.366 -0.619 0.984 0.511 + 231.50 11.406 11.423 11.458 -0.629 0.894 -0.707 -0.629 0.894 -0.632 0.444 -0.562 0.847 0.477 + 231.55 11.602 11.609 11.625 -0.385 0.612 -0.510 -0.385 0.612 -0.312 0.196 -0.235 0.391 0.219 + 231.60 11.878 11.901 11.919 -0.742 0.655 -0.235 -0.742 0.655 -0.154 0.175 -0.486 0.517 0.269 + 231.65 11.444 11.476 11.506 -0.848 0.830 -0.668 -0.848 0.830 -0.555 0.567 -0.703 0.927 0.530 + 231.70 11.539 11.597 11.625 -1.151 0.809 -0.574 -1.151 0.809 -0.464 0.660 -0.932 1.155 0.616 + 231.75 11.657 11.739 11.781 -1.391 0.986 -0.456 -1.391 0.986 -0.450 0.634 -1.371 1.557 0.788 + 231.80 11.604 11.700 11.712 -1.492 0.521 -0.508 -1.492 0.521 -0.265 0.759 -0.778 1.378 0.559 + 231.85 11.392 11.487 11.493 -1.476 0.374 -0.721 -1.476 0.374 -0.270 1.064 -0.552 1.419 0.614 + 231.90 11.362 11.423 11.454 -1.181 0.837 -0.751 -1.181 0.837 -0.628 0.887 -0.988 1.329 0.734 + 231.95 11.294 11.325 11.339 -0.836 0.570 -0.819 -0.836 0.570 -0.467 0.685 -0.477 0.848 0.478 + 232.00 11.190 11.204 11.226 -0.566 0.703 -0.923 -0.566 0.703 -0.649 0.523 -0.398 0.833 0.462 + 232.05 11.113 11.131 11.149 -0.625 0.637 -1.000 -0.625 0.637 -0.637 0.624 -0.398 0.898 0.488 + 232.10 10.899 10.914 10.930 -0.555 0.603 -1.213 -0.555 0.603 -0.732 0.673 -0.334 1.072 0.524 + 232.15 10.881 10.897 10.900 -0.586 0.280 -1.232 -0.586 0.280 -0.345 0.722 -0.164 0.970 0.409 + 232.20 10.918 10.946 10.951 -0.784 0.336 -1.195 -0.784 0.336 -0.401 0.937 -0.263 1.078 0.526 + 232.25 10.792 10.842 10.847 -1.045 0.328 -1.321 -1.045 0.328 -0.434 1.381 -0.343 1.473 0.744 + 232.30 10.786 10.882 10.884 -1.447 0.180 -1.327 -1.447 0.180 -0.239 1.920 -0.261 1.944 0.976 + 232.35 11.035 11.185 11.193 -1.826 0.434 -1.078 -1.826 0.434 -0.468 1.969 -0.793 2.342 1.087 + 232.40 11.286 11.448 11.454 -1.918 0.382 -0.827 -1.918 0.382 -0.316 1.586 -0.733 2.255 0.888 + 232.45 11.646 11.822 11.822 -2.033 -0.005 -0.467 -2.033 -0.005 0.002 0.949 0.010 2.176 0.474 + 232.50 11.227 11.419 11.420 -2.082 0.149 -0.886 -2.082 0.149 -0.132 1.844 -0.311 2.572 0.937 + 232.55 11.099 11.304 11.310 -2.144 0.345 -1.014 -2.144 0.345 -0.349 2.173 -0.739 2.872 1.161 + 232.60 10.902 11.116 11.119 -2.173 0.242 -1.211 -2.173 0.242 -0.293 2.631 -0.526 3.123 1.350 + 232.65 11.097 11.299 11.306 -2.123 0.415 -1.015 -2.123 0.415 -0.422 2.156 -0.882 2.855 1.183 + 232.70 11.219 11.473 11.474 -2.403 0.157 -0.894 -2.403 0.157 -0.140 2.149 -0.376 3.300 1.093 + 232.75 11.194 11.470 11.470 -2.503 -0.077 -0.919 -2.503 -0.077 0.071 2.301 0.194 3.559 1.155 + 232.80 11.319 11.645 11.646 -2.738 0.162 -0.794 -2.738 0.162 -0.128 2.174 -0.443 4.077 1.111 + 232.85 11.188 11.684 11.685 -3.369 0.110 -0.925 -3.369 0.110 -0.102 3.115 -0.372 6.108 1.569 + 232.90 10.855 11.312 11.312 -3.182 -0.087 -1.258 -3.182 -0.087 0.110 4.004 0.278 5.859 2.008 + 232.95 10.913 11.363 11.364 -3.165 -0.146 -1.200 -3.165 -0.146 0.175 3.797 0.461 5.739 1.914 + 233.00 10.694 11.231 11.233 -3.431 -0.237 -1.419 -3.431 -0.237 0.336 4.869 0.813 6.922 2.474 + 233.05 10.660 11.210 11.210 -3.468 0.001 -1.452 -3.468 0.001 -0.002 5.037 -0.005 7.067 2.518 + 233.10 10.500 11.054 11.054 -3.453 0.059 -1.612 -3.453 0.059 -0.094 5.568 -0.202 7.264 2.786 + 233.15 10.273 10.900 10.903 -3.642 0.262 -1.839 -3.642 0.262 -0.481 6.699 -0.953 8.359 3.392 + 233.20 10.103 10.719 10.729 -3.581 0.476 -2.010 -3.581 0.476 -0.956 7.199 -1.704 8.547 3.730 + 233.25 10.118 10.724 10.734 -3.556 0.459 -1.995 -3.556 0.459 -0.915 7.093 -1.632 8.416 3.668 + 233.30 10.113 10.628 10.656 -3.269 0.780 -2.000 -3.269 0.780 -1.560 6.538 -2.549 7.647 3.594 + 233.35 10.156 10.575 10.592 -2.946 0.608 -1.957 -2.946 0.608 -1.190 5.765 -1.792 6.439 3.077 + 233.40 10.102 10.565 10.599 -3.095 0.847 -2.011 -3.095 0.847 -1.704 6.226 -2.622 7.172 3.484 + 233.45 10.138 10.660 10.691 -3.298 0.812 -1.975 -3.298 0.812 -1.604 6.514 -2.679 7.718 3.612 + 233.50 10.278 10.784 10.794 -3.264 0.465 -1.835 -3.264 0.465 -0.853 5.989 -1.518 7.119 3.119 + 233.55 10.549 10.985 10.989 -3.063 0.310 -1.564 -3.063 0.310 -0.484 4.790 -0.949 5.962 2.454 + 233.60 10.811 11.206 11.208 -2.949 0.193 -1.302 -2.949 0.193 -0.252 3.838 -0.570 5.213 1.944 + 233.65 11.128 11.522 11.522 -2.987 0.031 -0.985 -2.987 0.031 -0.030 2.943 -0.092 4.948 1.472 + 233.70 10.832 11.210 11.214 -2.888 0.309 -1.281 -2.888 0.309 -0.396 3.700 -0.893 5.039 1.913 + 233.75 11.131 11.470 11.488 -2.768 0.630 -0.981 -2.768 0.630 -0.619 2.716 -1.745 4.512 1.644 + 233.80 11.112 11.551 11.557 -3.153 0.369 -1.001 -3.153 0.369 -0.369 3.156 -1.163 5.541 1.692 + 233.85 11.215 11.844 11.844 -3.808 -0.057 -0.898 -3.808 -0.057 0.051 3.419 0.216 7.655 1.713 + 233.90 11.515 12.214 12.216 -4.072 -0.213 -0.597 -4.072 -0.213 0.127 2.432 0.869 8.490 1.293 + 233.95 11.623 12.159 12.160 -3.571 0.056 -0.489 -3.571 0.056 -0.027 1.747 -0.200 6.496 0.879 + 234.00 11.542 12.053 12.054 -3.473 0.058 -0.571 -3.473 0.058 -0.033 1.982 -0.200 6.196 0.996 + 234.05 11.707 12.155 12.155 -3.270 -0.053 -0.406 -3.270 -0.053 0.021 1.328 0.172 5.431 0.670 + 234.10 11.919 12.367 12.367 -3.300 -0.017 -0.194 -3.300 -0.017 0.003 0.641 0.057 5.466 0.322 + 234.15 12.061 12.514 12.514 -3.335 -0.139 -0.052 -3.335 -0.139 0.007 0.172 0.464 5.572 0.247 + 234.20 12.035 12.441 12.445 -3.152 0.298 -0.078 -3.152 0.298 -0.023 0.245 -0.939 5.016 0.485 + 234.25 11.943 12.370 12.381 -3.224 0.502 -0.170 -3.224 0.502 -0.085 0.548 -1.620 5.337 0.856 + 234.30 11.832 12.153 12.162 -2.775 0.464 -0.281 -2.775 0.464 -0.130 0.779 -1.289 3.998 0.756 + 234.35 11.724 11.976 11.991 -2.444 0.589 -0.388 -2.444 0.589 -0.229 0.949 -1.440 3.235 0.870 + 234.40 12.000 12.272 12.293 -2.570 0.725 -0.113 -2.570 0.725 -0.082 0.291 -1.862 3.571 0.943 + 234.45 11.948 12.158 12.184 -2.247 0.802 -0.165 -2.247 0.802 -0.132 0.370 -1.803 2.861 0.923 + 234.50 12.057 12.250 12.271 -2.162 0.721 -0.055 -2.162 0.721 -0.040 0.120 -1.558 2.598 0.782 + 234.55 12.205 12.374 12.385 -2.041 0.524 0.092 -2.041 0.524 0.048 -0.188 -1.069 2.223 0.543 + 234.60 12.398 12.532 12.541 -1.828 0.472 0.285 -1.828 0.472 0.135 -0.521 -0.863 1.822 0.508 + 234.65 12.602 12.723 12.746 -1.756 0.756 0.489 -1.756 0.756 0.369 -0.858 -1.327 1.946 0.811 + 234.70 12.495 12.623 12.638 -1.793 0.612 0.382 -1.793 0.612 0.234 -0.685 -1.097 1.868 0.657 + 234.75 12.763 12.879 12.901 -1.724 0.751 0.650 -1.724 0.751 0.488 -1.121 -1.294 1.980 0.890 + 234.80 12.903 13.061 13.065 -2.023 0.314 0.791 -2.023 0.314 0.248 -1.600 -0.635 2.409 0.869 + 234.85 12.358 12.515 12.521 -1.976 0.382 0.245 -1.976 0.382 0.094 -0.485 -0.754 2.055 0.451 + 234.90 12.507 12.689 12.691 -2.144 0.190 0.394 -2.144 0.190 0.075 -0.845 -0.407 2.394 0.470 + 234.95 12.504 12.686 12.686 -2.141 -0.034 0.391 -2.141 -0.034 -0.013 -0.837 0.073 2.369 0.420 + 235.00 12.179 12.375 12.381 -2.192 -0.385 0.067 -2.192 -0.385 -0.026 -0.146 0.843 2.478 0.428 + 235.05 12.383 12.585 12.592 -2.248 -0.411 0.270 -2.248 -0.411 -0.111 -0.608 0.923 2.647 0.555 + 235.10 12.466 12.625 12.625 -1.998 -0.137 0.353 -1.998 -0.137 -0.048 -0.705 0.273 2.067 0.379 + 235.15 12.202 12.359 12.360 -1.961 -0.192 0.089 -1.961 -0.192 -0.017 -0.175 0.376 1.944 0.208 + 235.20 12.088 12.284 12.284 -2.190 0.003 -0.025 -2.190 0.003 -0.000 0.055 -0.007 2.399 0.028 + 235.25 11.916 12.201 12.202 -2.624 0.157 -0.197 -2.624 0.157 -0.031 0.518 -0.412 3.476 0.331 + 235.30 11.881 12.160 12.161 -2.587 0.171 -0.232 -2.587 0.171 -0.040 0.600 -0.443 3.389 0.373 + 235.35 11.697 11.893 11.893 -2.151 -0.050 -0.416 -2.151 -0.050 0.021 0.894 0.109 2.401 0.450 + 235.40 11.635 11.900 11.901 -2.495 -0.161 -0.478 -2.495 -0.161 0.077 1.191 0.402 3.238 0.630 + 235.45 11.457 11.806 11.808 -2.852 -0.184 -0.656 -2.852 -0.184 0.121 1.871 0.524 4.299 0.973 + 235.50 11.302 11.638 11.657 -2.775 -0.666 -0.811 -2.775 -0.666 0.540 2.249 1.848 4.400 1.480 + 235.55 11.605 11.888 11.910 -2.577 -0.721 -0.508 -2.577 -0.721 0.366 1.308 1.857 3.709 1.151 + 235.60 11.668 11.888 11.905 -2.278 -0.626 -0.445 -2.278 -0.626 0.279 1.013 1.426 2.889 0.886 + 235.65 11.311 11.535 11.540 -2.264 -0.332 -0.802 -2.264 -0.332 0.266 1.815 0.751 2.940 0.991 + 235.70 11.325 11.486 11.487 -1.922 -0.019 -0.788 -1.922 -0.019 0.015 1.515 0.037 2.159 0.758 + 235.75 10.877 11.113 11.115 -2.276 0.237 -1.235 -2.276 0.237 -0.293 2.811 -0.540 3.380 1.439 + 235.80 10.752 10.976 10.978 -2.204 0.250 -1.361 -2.204 0.250 -0.340 3.000 -0.551 3.387 1.535 + 235.85 10.459 10.702 10.711 -2.268 0.439 -1.654 -2.268 0.439 -0.726 3.750 -0.995 4.035 1.974 + 235.90 10.420 10.674 10.678 -2.313 0.299 -1.693 -2.313 0.299 -0.506 3.915 -0.691 4.152 2.004 + 235.95 10.500 10.673 10.685 -1.914 0.513 -1.613 -1.914 0.513 -0.827 3.087 -0.981 3.263 1.671 + 236.00 10.740 10.893 10.908 -1.820 0.555 -1.372 -1.820 0.555 -0.762 2.498 -1.010 2.752 1.400 + 236.05 10.654 10.813 10.832 -1.844 0.640 -1.458 -1.844 0.640 -0.934 2.690 -1.181 2.969 1.541 + 236.10 10.750 10.918 10.941 -1.905 0.711 -1.363 -1.905 0.711 -0.968 2.596 -1.354 2.996 1.542 + 236.15 10.511 10.711 10.729 -2.060 0.615 -1.602 -2.060 0.615 -0.985 3.300 -1.267 3.594 1.835 + 236.20 10.710 10.951 10.970 -2.281 0.646 -1.402 -2.281 0.646 -0.906 3.199 -1.474 3.794 1.819 + 236.25 10.553 10.729 10.756 -1.934 0.756 -1.560 -1.934 0.756 -1.180 3.016 -1.463 3.372 1.777 + 236.30 10.420 10.585 10.625 -1.860 0.917 -1.692 -1.860 0.917 -1.552 3.148 -1.705 3.583 1.951 + 236.35 10.436 10.568 10.599 -1.667 0.812 -1.677 -1.667 0.812 -1.362 2.796 -1.354 3.125 1.696 + 236.40 10.471 10.619 10.624 -1.763 0.327 -1.641 -1.763 0.327 -0.536 2.895 -0.576 2.955 1.500 + 236.45 10.501 10.619 10.629 -1.579 0.467 -1.612 -1.579 0.467 -0.752 2.546 -0.737 2.656 1.378 + 236.50 10.406 10.526 10.531 -1.582 0.336 -1.707 -1.582 0.336 -0.573 2.700 -0.531 2.764 1.405 + 236.55 10.535 10.669 10.669 -1.685 0.087 -1.578 -1.685 0.087 -0.137 2.659 -0.146 2.668 1.333 + 236.60 10.777 10.920 10.921 -1.762 -0.076 -1.335 -1.762 -0.076 0.102 2.352 0.135 2.446 1.179 + 236.65 10.781 10.892 10.893 -1.549 0.139 -1.332 -1.549 0.139 -0.186 2.064 -0.216 2.097 1.042 + 236.70 10.542 10.624 10.627 -1.319 -0.252 -1.571 -1.319 -0.252 0.395 2.072 0.332 2.136 1.068 + 236.75 10.527 10.632 10.633 -1.485 -0.164 -1.585 -1.485 -0.164 0.260 2.354 0.244 2.373 1.191 + 236.80 10.442 10.567 10.582 -1.616 -0.571 -1.671 -1.616 -0.571 0.954 2.701 0.923 2.865 1.504 + 236.85 10.433 10.607 10.640 -1.909 -0.842 -1.680 -1.909 -0.842 1.414 3.207 1.608 3.587 1.928 + 236.90 10.332 10.473 10.512 -1.713 -0.902 -1.780 -1.713 -0.902 1.606 3.049 1.545 3.458 1.888 + 236.95 10.463 10.607 10.647 -1.740 -0.921 -1.650 -1.740 -0.921 1.519 2.871 1.602 3.299 1.811 + 237.00 10.558 10.698 10.783 -1.722 -1.356 -1.555 -1.722 -1.356 2.108 2.677 2.334 3.609 2.065 + 237.05 10.483 10.637 10.687 -1.801 -1.035 -1.630 -1.801 -1.035 1.686 2.934 1.863 3.484 1.932 + 237.10 10.382 10.485 10.536 -1.468 -1.032 -1.731 -1.468 -1.032 1.787 2.542 1.516 3.109 1.728 + 237.15 10.018 10.102 10.138 -1.301 -0.855 -2.095 -1.301 -0.855 1.791 2.726 1.113 3.406 1.723 + 237.20 10.382 10.456 10.472 -1.241 -0.573 -1.730 -1.241 -0.573 0.991 2.147 0.711 2.431 1.235 + 237.25 10.455 10.511 10.542 -1.083 -0.810 -1.658 -1.083 -0.810 1.343 1.796 0.878 2.289 1.204 + 237.30 10.280 10.385 10.435 -1.472 -1.022 -1.833 -1.472 -1.022 1.874 2.699 1.505 3.286 1.807 + 237.35 10.200 10.291 10.332 -1.365 -0.924 -1.913 -1.365 -0.924 1.767 2.611 1.261 3.188 1.698 + 237.40 10.290 10.430 10.468 -1.706 -0.892 -1.823 -1.706 -0.892 1.626 3.110 1.521 3.514 1.912 + 237.45 10.311 10.419 10.487 -1.498 -1.191 -1.802 -1.498 -1.191 2.147 2.699 1.784 3.455 1.941 + 237.50 10.683 10.806 10.870 -1.624 -1.183 -1.430 -1.624 -1.183 1.691 2.322 1.921 3.040 1.728 + 237.55 10.672 10.752 10.807 -1.302 -1.095 -1.440 -1.302 -1.095 1.577 1.875 1.425 2.484 1.417 + 237.60 10.694 10.794 10.860 -1.463 -1.199 -1.419 -1.463 -1.199 1.701 2.075 1.753 2.795 1.603 + 237.65 10.738 10.853 10.955 -1.573 -1.492 -1.375 -1.573 -1.492 2.052 2.163 2.348 3.296 1.897 + 237.70 10.739 10.818 10.906 -1.311 -1.383 -1.374 -1.311 -1.383 1.900 1.801 1.812 2.759 1.592 + 237.75 10.680 10.733 10.800 -1.065 -1.198 -1.433 -1.065 -1.198 1.716 1.526 1.276 2.311 1.314 + 237.80 10.707 10.760 10.835 -1.065 -1.271 -1.406 -1.065 -1.271 1.788 1.498 1.354 2.364 1.348 + 237.85 10.794 10.878 10.968 -1.354 -1.398 -1.319 -1.354 -1.398 1.844 1.786 1.893 2.764 1.595 + 237.90 10.959 11.016 11.102 -1.112 -1.383 -1.153 -1.112 -1.383 1.595 1.282 1.537 2.239 1.280 + 237.95 11.213 11.260 11.311 -1.027 -1.077 -0.900 -1.027 -1.077 0.969 0.924 1.106 1.512 0.868 + 238.00 11.007 11.057 11.065 -1.058 -0.403 -1.106 -1.058 -0.403 0.446 1.170 0.426 1.253 0.661 + 238.05 10.717 10.751 10.756 -0.850 -0.318 -1.395 -0.850 -0.318 0.444 1.186 0.271 1.385 0.647 + 238.10 10.701 10.722 10.729 -0.664 -0.404 -1.412 -0.664 -0.404 0.570 0.938 0.268 1.298 0.565 + 238.15 10.487 10.515 10.523 -0.763 -0.405 -1.625 -0.763 -0.405 0.659 1.240 0.309 1.694 0.719 + 238.20 10.561 10.583 10.585 -0.681 -0.182 -1.551 -0.681 -0.182 0.282 1.056 0.124 1.452 0.550 + 238.25 10.407 10.413 10.413 -0.360 0.040 -1.706 -0.360 0.040 -0.068 0.614 -0.014 1.521 0.309 + 238.30 10.690 10.697 10.702 -0.401 -0.312 -1.423 -0.401 -0.312 0.444 0.571 0.125 1.142 0.367 + 238.35 10.594 10.599 10.600 -0.329 -0.123 -1.519 -0.329 -0.123 0.186 0.499 0.040 1.215 0.267 + 238.40 10.476 10.486 10.487 -0.468 0.169 -1.637 -0.468 0.169 -0.277 0.766 -0.079 1.464 0.409 + 238.45 10.317 10.354 10.360 -0.874 -0.351 -1.796 -0.874 -0.351 0.630 1.570 0.307 2.057 0.860 + 238.50 10.394 10.407 10.411 -0.511 -0.300 -1.718 -0.511 -0.300 0.516 0.877 0.153 1.652 0.515 + 238.55 10.394 10.423 10.424 -0.770 0.196 -1.719 -0.770 0.196 -0.337 1.324 -0.151 1.793 0.687 + 238.60 10.622 10.638 10.643 -0.587 0.331 -1.491 -0.587 0.331 -0.494 0.875 -0.194 1.339 0.512 + 238.65 10.779 10.805 10.812 -0.752 0.400 -1.334 -0.752 0.400 -0.534 1.004 -0.301 1.253 0.588 + 238.70 10.900 10.922 10.923 -0.699 0.139 -1.213 -0.699 0.139 -0.169 0.848 -0.097 0.990 0.435 + 238.75 10.936 10.960 10.960 -0.720 -0.075 -1.177 -0.720 -0.075 0.088 0.848 0.054 0.955 0.427 + 238.80 10.897 10.920 10.920 -0.708 0.031 -1.216 -0.708 0.031 -0.038 0.861 -0.022 0.990 0.431 + 238.85 11.169 11.178 11.178 -0.460 -0.074 -0.944 -0.460 -0.074 0.070 0.434 0.034 0.554 0.221 + 238.90 11.052 11.060 11.062 -0.423 -0.230 -1.061 -0.423 -0.230 0.244 0.448 0.097 0.678 0.260 + 238.95 11.268 11.284 11.284 -0.606 0.045 -0.845 -0.606 0.045 -0.038 0.512 -0.027 0.542 0.257 + 239.00 11.441 11.470 11.471 -0.812 -0.132 -0.671 -0.812 -0.132 0.089 0.545 0.107 0.564 0.281 + 239.05 11.279 11.312 11.313 -0.866 0.126 -0.833 -0.866 0.126 -0.105 0.721 -0.109 0.730 0.369 + 239.10 11.247 11.315 11.315 -1.239 0.063 -0.866 -1.239 0.063 -0.055 1.073 -0.079 1.145 0.539 + 239.15 11.303 11.365 11.368 -1.182 0.262 -0.810 -1.182 0.262 -0.212 0.957 -0.309 1.061 0.514 + 239.20 11.328 11.389 11.389 -1.178 -0.031 -0.785 -1.178 -0.031 0.024 0.924 0.037 1.002 0.462 + 239.25 11.568 11.642 11.652 -1.313 -0.475 -0.545 -1.313 -0.475 0.259 0.716 0.623 1.124 0.492 + 239.30 11.639 11.719 11.723 -1.361 -0.301 -0.473 -1.361 -0.301 0.142 0.644 0.409 1.083 0.388 + 239.35 11.554 11.609 11.610 -1.131 0.051 -0.559 -1.131 0.051 -0.029 0.632 -0.058 0.797 0.317 + 239.40 11.580 11.638 11.638 -1.162 -0.010 -0.533 -1.162 -0.010 0.005 0.619 0.012 0.817 0.310 + 239.45 11.508 11.554 11.554 -1.032 0.010 -0.605 -1.032 0.010 -0.006 0.624 -0.010 0.716 0.312 + 239.50 11.454 11.534 11.535 -1.359 0.093 -0.659 -1.359 0.093 -0.061 0.895 -0.126 1.144 0.453 + 239.55 11.570 11.677 11.680 -1.572 0.264 -0.542 -1.572 0.264 -0.143 0.853 -0.416 1.418 0.480 + 239.60 11.346 11.433 11.434 -1.408 -0.026 -0.766 -1.408 -0.026 0.020 1.079 0.036 1.285 0.540 + 239.65 11.087 11.143 11.146 -1.119 -0.260 -1.026 -1.119 -0.260 0.267 1.148 0.291 1.186 0.607 + 239.70 11.218 11.311 11.323 -1.452 -0.503 -0.895 -1.452 -0.503 0.450 1.300 0.731 1.582 0.779 + 239.75 11.117 11.185 11.199 -1.231 -0.571 -0.996 -1.231 -0.571 0.568 1.226 0.702 1.416 0.761 + 239.80 11.244 11.309 11.317 -1.210 -0.425 -0.869 -1.210 -0.425 0.369 1.051 0.515 1.199 0.613 + 239.85 11.182 11.239 11.245 -1.125 -0.389 -0.931 -1.125 -0.389 0.362 1.047 0.437 1.141 0.595 + 239.90 11.597 11.656 11.669 -1.178 -0.547 -0.516 -1.178 -0.547 0.282 0.608 0.644 0.976 0.465 + 239.95 11.809 11.837 11.842 -0.811 -0.348 -0.303 -0.811 -0.348 0.106 0.246 0.282 0.436 0.195 + 240.00 11.619 11.657 11.658 -0.944 -0.148 -0.494 -0.944 -0.148 0.073 0.467 0.139 0.579 0.246 + 240.05 11.338 11.383 11.386 -1.014 0.249 -0.775 -1.014 0.249 -0.193 0.786 -0.253 0.845 0.424 + 240.10 11.330 11.386 11.386 -1.127 -0.105 -0.783 -1.127 -0.105 0.082 0.882 0.118 0.947 0.447 + 240.15 11.244 11.312 11.317 -1.240 -0.336 -0.869 -1.240 -0.336 0.292 1.078 0.416 1.203 0.596 + 240.20 11.248 11.295 11.326 -1.028 -0.838 -0.865 -1.028 -0.838 0.724 0.889 0.861 1.253 0.717 + 240.25 11.420 11.465 11.482 -1.023 -0.615 -0.693 -1.023 -0.615 0.426 0.709 0.629 0.952 0.519 + 240.30 11.564 11.654 11.671 -1.446 -0.627 -0.549 -1.446 -0.627 0.344 0.794 0.907 1.393 0.627 + 240.35 11.601 11.690 11.705 -1.442 -0.596 -0.512 -1.442 -0.596 0.305 0.738 0.860 1.348 0.587 + 240.40 11.780 11.844 11.886 -1.229 -0.993 -0.333 -1.229 -0.993 0.330 0.409 1.221 1.304 0.664 + 240.45 11.807 11.893 11.928 -1.425 -0.921 -0.306 -1.425 -0.921 0.282 0.436 1.313 1.487 0.706 + 240.50 11.619 11.724 11.764 -1.564 -0.975 -0.494 -1.564 -0.975 0.481 0.772 1.525 1.820 0.888 + 240.55 11.507 11.611 11.638 -1.551 -0.794 -0.605 -1.551 -0.794 0.480 0.939 1.231 1.701 0.810 + 240.60 11.511 11.582 11.595 -1.282 -0.544 -0.602 -1.282 -0.544 0.327 0.771 0.698 1.151 0.545 + 240.65 11.673 11.733 11.748 -1.187 -0.584 -0.440 -1.187 -0.584 0.257 0.522 0.693 0.972 0.452 + 240.70 11.846 11.889 11.902 -1.017 -0.555 -0.267 -1.017 -0.555 0.148 0.272 0.564 0.707 0.322 + 240.75 11.888 11.912 11.917 -0.752 -0.353 -0.225 -0.752 -0.353 0.079 0.169 0.265 0.370 0.162 + 240.80 11.887 11.970 11.974 -1.408 -0.295 -0.226 -1.408 -0.295 0.067 0.318 0.416 1.060 0.264 + 240.85 11.868 11.966 11.989 -1.535 -0.732 -0.245 -1.535 -0.732 0.180 0.376 1.124 1.477 0.600 + 240.90 12.002 12.064 12.101 -1.227 -0.945 -0.111 -1.227 -0.945 0.105 0.137 1.159 1.205 0.586 + 240.95 11.933 11.970 12.006 -0.941 -0.937 -0.180 -0.941 -0.937 0.169 0.170 0.881 0.898 0.457 + 241.00 11.775 11.798 11.823 -0.738 -0.766 -0.338 -0.738 -0.766 0.259 0.249 0.565 0.623 0.335 + 241.05 11.847 11.896 11.930 -1.078 -0.901 -0.266 -1.078 -0.901 0.239 0.286 0.971 1.022 0.520 + 241.10 11.771 11.806 11.840 -0.919 -0.891 -0.342 -0.919 -0.891 0.305 0.314 0.819 0.878 0.464 + 241.15 11.847 11.877 11.901 -0.842 -0.767 -0.266 -0.842 -0.767 0.204 0.224 0.646 0.684 0.357 + 241.20 11.835 11.860 11.879 -0.769 -0.663 -0.277 -0.769 -0.663 0.184 0.213 0.510 0.554 0.291 + 241.25 12.072 12.097 12.116 -0.776 -0.686 -0.041 -0.776 -0.686 0.028 0.032 0.532 0.537 0.267 + 241.30 11.951 11.989 12.020 -0.951 -0.857 -0.161 -0.951 -0.857 0.138 0.153 0.815 0.832 0.420 + 241.35 12.003 12.040 12.054 -0.943 -0.578 -0.109 -0.943 -0.578 0.063 0.103 0.545 0.617 0.279 + 241.40 11.960 11.979 11.998 -0.682 -0.670 -0.153 -0.682 -0.670 0.102 0.104 0.457 0.469 0.240 + 241.45 11.784 11.801 11.826 -0.617 -0.771 -0.328 -0.617 -0.771 0.253 0.202 0.475 0.541 0.288 + 241.50 11.803 11.816 11.833 -0.547 -0.640 -0.310 -0.547 -0.640 0.198 0.170 0.350 0.403 0.218 + 241.55 11.926 11.943 11.964 -0.636 -0.709 -0.187 -0.636 -0.709 0.133 0.119 0.451 0.471 0.242 + 241.60 11.986 11.995 12.015 -0.484 -0.696 -0.127 -0.484 -0.696 0.089 0.062 0.337 0.367 0.177 + 241.65 12.319 12.357 12.374 -0.966 -0.641 0.207 -0.966 -0.641 -0.132 -0.199 0.619 0.693 0.332 + 241.70 12.227 12.252 12.311 -0.771 -1.211 0.115 -0.771 -1.211 -0.139 -0.088 0.934 1.038 0.474 + 241.75 12.394 12.397 12.435 -0.258 -0.976 0.282 -0.258 -0.976 -0.275 -0.073 0.252 0.549 0.190 + 241.80 12.276 12.278 12.306 -0.178 -0.834 0.163 -0.178 -0.834 -0.136 -0.029 0.148 0.377 0.102 + 241.85 12.198 12.203 12.217 -0.349 -0.586 0.086 -0.349 -0.586 -0.050 -0.030 0.205 0.236 0.106 + 241.90 12.346 12.379 12.394 -0.900 -0.609 0.233 -0.900 -0.609 -0.142 -0.210 0.548 0.618 0.302 + 241.95 12.464 12.484 12.514 -0.701 -0.870 0.351 -0.701 -0.870 -0.306 -0.246 0.610 0.686 0.363 + 242.00 12.187 12.191 12.214 -0.325 -0.744 0.074 -0.325 -0.744 -0.055 -0.024 0.241 0.332 0.124 + 242.05 12.006 12.009 12.016 -0.274 -0.403 -0.107 -0.274 -0.403 0.043 0.029 0.110 0.124 0.061 + 242.10 12.410 12.415 12.446 -0.355 -0.884 0.297 -0.355 -0.884 -0.262 -0.105 0.314 0.498 0.211 + 242.15 12.314 12.320 12.342 -0.388 -0.738 0.201 -0.388 -0.738 -0.148 -0.078 0.286 0.367 0.166 + 242.20 12.332 12.337 12.343 -0.335 -0.388 0.219 -0.335 -0.388 -0.085 -0.073 0.130 0.155 0.086 + 242.25 12.007 12.010 12.010 -0.239 -0.129 -0.106 -0.239 -0.129 0.014 0.025 0.031 0.043 0.021 + 242.30 11.855 11.855 11.857 -0.023 0.258 -0.258 -0.023 0.258 -0.067 0.006 -0.006 0.067 0.034 + 242.35 11.932 11.932 11.932 0.038 0.099 -0.181 0.038 0.099 -0.018 -0.007 0.004 0.022 0.010 + 242.40 11.991 11.993 11.993 0.193 -0.085 -0.122 0.193 -0.085 0.010 -0.024 -0.016 0.030 0.015 + 242.45 12.212 12.216 12.216 0.300 -0.116 0.099 0.300 -0.116 -0.011 0.030 -0.035 0.057 0.024 + 242.50 12.240 12.240 12.244 0.123 0.290 0.127 0.123 0.290 0.037 0.016 0.036 0.058 0.027 + 242.55 12.092 12.094 12.101 -0.225 0.401 -0.021 -0.225 0.401 -0.008 0.005 -0.090 0.106 0.045 + 242.60 12.180 12.180 12.183 -0.127 0.255 0.067 -0.127 0.255 0.017 -0.009 -0.032 0.043 0.019 + 242.65 12.127 12.132 12.132 -0.318 0.069 0.015 -0.318 0.069 0.001 -0.005 -0.022 0.053 0.011 + 242.70 12.248 12.259 12.264 -0.506 0.362 0.135 -0.506 0.362 0.049 -0.068 -0.183 0.203 0.101 + 242.75 12.006 12.006 12.009 -0.007 0.261 -0.107 -0.007 0.261 -0.028 0.001 -0.002 0.040 0.014 + 242.80 11.865 11.866 11.866 -0.130 0.005 -0.248 -0.130 0.005 -0.001 0.032 -0.001 0.039 0.016 + 242.85 11.803 11.817 11.820 -0.569 0.260 -0.310 -0.569 0.260 -0.080 0.176 -0.148 0.243 0.122 + 242.90 12.109 12.115 12.115 -0.371 0.037 -0.004 -0.371 0.037 -0.000 0.001 -0.014 0.070 0.007 + 242.95 12.166 12.180 12.180 -0.585 0.074 0.053 -0.585 0.074 0.004 -0.031 -0.043 0.175 0.027 + 243.00 12.424 12.444 12.445 -0.700 -0.141 0.312 -0.700 -0.141 -0.044 -0.218 0.099 0.303 0.122 + 243.05 12.619 12.635 12.643 -0.642 -0.446 0.506 -0.642 -0.446 -0.226 -0.325 0.286 0.434 0.244 + 243.10 12.627 12.646 12.647 -0.689 -0.162 0.514 -0.689 -0.162 -0.083 -0.354 0.112 0.383 0.190 + 243.15 12.563 12.569 12.571 -0.375 -0.250 0.450 -0.375 -0.250 -0.113 -0.169 0.094 0.203 0.112 + 243.20 12.665 12.669 12.672 -0.321 -0.274 0.552 -0.321 -0.274 -0.152 -0.178 0.088 0.242 0.125 + 243.25 12.860 12.872 12.876 -0.559 -0.310 0.747 -0.559 -0.310 -0.231 -0.417 0.173 0.483 0.254 + 243.30 12.696 12.721 12.722 -0.796 -0.145 0.583 -0.796 -0.145 -0.084 -0.464 0.115 0.497 0.243 + 243.35 12.669 12.687 12.687 -0.668 -0.069 0.556 -0.668 -0.069 -0.038 -0.371 0.046 0.380 0.188 + 243.40 12.520 12.546 12.547 -0.800 -0.134 0.408 -0.800 -0.134 -0.055 -0.326 0.107 0.412 0.174 + 243.45 12.314 12.318 12.319 -0.315 -0.150 0.201 -0.315 -0.150 -0.030 -0.063 0.047 0.081 0.042 + 243.50 12.099 12.099 12.103 -0.097 -0.293 -0.014 -0.097 -0.293 0.004 0.001 0.028 0.048 0.014 + 243.55 12.241 12.242 12.254 -0.193 -0.541 0.128 -0.193 -0.541 -0.069 -0.025 0.105 0.173 0.064 + 243.60 12.405 12.407 12.413 -0.258 -0.364 0.292 -0.258 -0.364 -0.106 -0.075 0.094 0.142 0.080 + 243.65 12.623 12.623 12.629 -0.019 -0.373 0.511 -0.019 -0.373 -0.190 -0.010 0.007 0.200 0.095 + 243.70 12.384 12.390 12.392 0.376 -0.197 0.271 0.376 -0.197 -0.053 0.102 -0.074 0.127 0.069 + 243.75 12.341 12.347 12.352 0.382 -0.358 0.228 0.382 -0.358 -0.082 0.087 -0.137 0.163 0.091 + 243.80 12.362 12.368 12.378 0.374 -0.503 0.249 0.374 -0.503 -0.126 0.093 -0.188 0.228 0.122 + 243.85 12.366 12.378 12.401 0.536 -0.753 0.253 0.536 -0.753 -0.191 0.136 -0.403 0.459 0.233 + 243.90 12.464 12.472 12.478 0.448 -0.373 0.352 0.448 -0.373 -0.131 0.158 -0.167 0.232 0.132 + 243.95 12.699 12.710 12.711 0.531 -0.054 0.587 0.531 -0.054 -0.032 0.311 -0.029 0.314 0.157 + 244.00 12.558 12.559 12.560 0.162 -0.107 0.445 0.162 -0.107 -0.048 0.072 -0.017 0.118 0.044 + 244.05 12.581 12.588 12.589 0.417 -0.109 0.469 0.417 -0.109 -0.051 0.195 -0.045 0.203 0.104 + 244.10 12.517 12.525 12.525 0.449 -0.083 0.404 0.449 -0.083 -0.034 0.182 -0.037 0.186 0.094 + 244.15 12.410 12.427 12.429 0.647 -0.216 0.297 0.647 -0.216 -0.064 0.192 -0.140 0.277 0.123 + 244.20 12.082 12.087 12.092 0.358 -0.340 -0.031 0.358 -0.340 0.010 -0.011 -0.122 0.123 0.061 + 244.25 12.169 12.169 12.174 0.051 -0.356 0.056 0.051 -0.356 -0.020 0.003 -0.018 0.066 0.014 + 244.30 12.122 12.122 12.124 0.056 -0.242 0.009 0.056 -0.242 -0.002 0.001 -0.014 0.031 0.007 + 244.35 12.260 12.260 12.264 0.106 -0.300 0.147 0.106 -0.300 -0.044 0.016 -0.032 0.061 0.028 + 244.40 12.139 12.139 12.143 -0.042 -0.308 0.026 -0.042 -0.308 -0.008 -0.001 0.013 0.049 0.008 + 244.45 12.451 12.452 12.455 0.125 -0.275 0.338 0.125 -0.275 -0.093 0.042 -0.034 0.103 0.054 + 244.50 12.330 12.331 12.332 0.129 -0.096 0.218 0.129 -0.096 -0.021 0.028 -0.012 0.037 0.019 + 244.55 12.082 12.089 12.092 0.423 0.234 -0.031 0.423 0.234 -0.007 -0.013 0.099 0.117 0.050 + 244.60 12.468 12.489 12.511 0.724 0.730 0.356 0.724 0.730 0.260 0.257 0.529 0.592 0.321 + 244.65 12.542 12.555 12.571 0.577 0.630 0.429 0.577 0.630 0.270 0.248 0.363 0.457 0.258 + 244.70 12.628 12.640 12.660 0.532 0.722 0.516 0.532 0.722 0.372 0.274 0.384 0.535 0.301 + 244.75 12.560 12.568 12.604 0.463 0.953 0.447 0.463 0.953 0.426 0.207 0.441 0.661 0.324 + 244.80 12.525 12.531 12.556 0.418 0.785 0.412 0.418 0.785 0.323 0.172 0.328 0.480 0.246 + 244.85 12.604 12.611 12.638 0.438 0.823 0.491 0.438 0.823 0.404 0.215 0.361 0.555 0.291 + 244.90 12.462 12.481 12.525 0.683 1.054 0.349 0.683 1.054 0.368 0.239 0.720 0.850 0.421 + 244.95 12.378 12.381 12.461 0.260 1.417 0.265 0.260 1.417 0.376 0.069 0.369 1.073 0.265 + 245.00 12.588 12.589 12.639 0.165 1.124 0.475 0.165 1.124 0.534 0.078 0.186 0.758 0.285 + 245.05 12.768 12.768 12.797 0.081 0.865 0.655 0.081 0.865 0.567 0.053 0.070 0.592 0.287 + 245.10 12.832 12.832 12.884 0.027 1.152 0.719 0.027 1.152 0.829 0.020 0.032 0.923 0.415 + 245.15 13.169 13.169 13.189 0.030 0.722 1.056 0.030 0.722 0.763 0.031 0.021 0.819 0.382 + 245.20 12.870 12.874 12.903 0.325 0.865 0.757 0.325 0.865 0.655 0.246 0.281 0.713 0.377 + 245.25 12.601 12.614 12.655 0.580 1.016 0.488 0.580 1.016 0.496 0.283 0.589 0.803 0.410 + 245.30 12.475 12.479 12.512 0.336 0.903 0.362 0.336 0.903 0.327 0.122 0.304 0.530 0.231 + 245.35 12.824 12.832 12.846 0.441 0.606 0.711 0.441 0.606 0.431 0.314 0.267 0.534 0.298 + 245.40 12.538 12.549 12.568 0.544 0.686 0.425 0.544 0.686 0.292 0.231 0.374 0.474 0.264 + 245.45 12.603 12.619 12.634 0.622 0.622 0.491 0.622 0.622 0.305 0.305 0.387 0.508 0.290 + 245.50 12.642 12.683 12.708 1.014 0.798 0.530 1.014 0.798 0.423 0.537 0.809 0.973 0.530 + 245.55 12.634 12.659 12.688 0.782 0.859 0.522 0.782 0.859 0.448 0.408 0.672 0.811 0.453 + 245.60 12.781 12.791 12.816 0.505 0.798 0.668 0.505 0.798 0.533 0.337 0.403 0.669 0.374 + 245.65 12.711 12.713 12.737 0.224 0.790 0.598 0.224 0.790 0.472 0.134 0.177 0.515 0.261 + 245.70 12.457 12.463 12.481 0.387 0.682 0.344 0.387 0.682 0.235 0.133 0.264 0.367 0.189 + 245.75 12.585 12.592 12.611 0.415 0.699 0.472 0.415 0.699 0.330 0.196 0.290 0.442 0.241 + 245.80 12.717 12.723 12.751 0.401 0.843 0.604 0.401 0.843 0.509 0.242 0.338 0.618 0.329 + 245.85 12.824 12.842 12.856 0.667 0.607 0.711 0.667 0.607 0.432 0.474 0.405 0.660 0.379 + 245.90 12.985 13.009 13.016 0.781 0.442 0.873 0.781 0.442 0.385 0.681 0.345 0.783 0.428 + 245.95 12.713 12.734 12.747 0.735 0.574 0.600 0.735 0.574 0.345 0.441 0.422 0.615 0.350 + 246.00 12.420 12.471 12.478 1.117 0.421 0.308 1.117 0.421 0.129 0.344 0.470 0.760 0.298 + 246.05 12.330 12.354 12.364 0.763 0.492 0.218 0.763 0.492 0.107 0.166 0.375 0.435 0.212 + 246.10 12.450 12.465 12.488 0.602 0.760 0.337 0.602 0.760 0.257 0.203 0.458 0.527 0.281 + 246.15 12.764 12.779 12.804 0.631 0.793 0.651 0.631 0.793 0.516 0.411 0.501 0.726 0.414 + 246.20 12.593 12.605 12.621 0.548 0.621 0.481 0.548 0.621 0.299 0.264 0.341 0.459 0.262 + 246.25 12.542 12.558 12.567 0.633 0.473 0.430 0.633 0.473 0.203 0.272 0.299 0.404 0.226 + 246.30 12.377 12.400 12.413 0.758 0.575 0.264 0.758 0.575 0.152 0.200 0.436 0.488 0.252 + 246.35 12.882 12.887 12.905 0.386 0.673 0.769 0.386 0.673 0.517 0.297 0.260 0.596 0.325 + 246.40 12.857 12.878 12.908 0.742 0.877 0.744 0.742 0.877 0.653 0.552 0.651 0.937 0.537 + 246.45 12.611 12.636 12.673 0.793 0.964 0.498 0.793 0.964 0.480 0.395 0.764 0.903 0.493 + 246.50 12.769 12.798 12.808 0.862 0.509 0.656 0.862 0.509 0.334 0.565 0.439 0.716 0.395 + 246.55 12.915 12.942 12.948 0.822 0.412 0.803 0.822 0.412 0.330 0.660 0.338 0.745 0.406 + 246.60 12.900 12.923 12.927 0.772 0.297 0.788 0.772 0.297 0.234 0.608 0.229 0.652 0.345 + 246.65 12.732 12.741 12.753 0.490 0.559 0.619 0.490 0.559 0.346 0.303 0.274 0.468 0.268 + 246.70 12.782 12.784 12.808 0.239 0.775 0.669 0.239 0.775 0.518 0.160 0.186 0.553 0.287 + 246.75 12.925 12.926 12.951 -0.118 0.804 0.812 -0.118 0.804 0.653 -0.096 -0.095 0.660 0.333 + 246.80 12.843 12.847 12.863 -0.312 0.641 0.730 -0.312 0.641 0.468 -0.228 -0.200 0.520 0.279 + 246.85 12.798 12.803 12.813 -0.370 0.505 0.685 -0.370 0.505 0.346 -0.254 -0.187 0.431 0.234 + 246.90 12.853 12.868 12.887 -0.624 0.695 0.740 -0.624 0.695 0.514 -0.462 -0.434 0.710 0.408 + 246.95 12.686 12.700 12.715 -0.607 0.617 0.573 -0.607 0.617 0.354 -0.348 -0.375 0.539 0.311 + 247.00 12.582 12.593 12.615 -0.515 0.752 0.469 -0.515 0.752 0.353 -0.242 -0.387 0.525 0.288 + 247.05 12.826 12.837 12.855 -0.517 0.696 0.713 -0.517 0.696 0.496 -0.369 -0.360 0.630 0.358 + 247.10 12.445 12.460 12.487 -0.609 0.817 0.332 -0.609 0.817 0.271 -0.202 -0.498 0.574 0.301 + 247.15 12.383 12.399 12.418 -0.636 0.682 0.270 -0.636 0.682 0.184 -0.172 -0.434 0.472 0.251 + 247.20 12.559 12.571 12.584 -0.566 0.559 0.446 -0.566 0.559 0.249 -0.252 -0.316 0.416 0.238 + 247.25 12.743 12.757 12.775 -0.609 0.677 0.630 -0.609 0.677 0.426 -0.384 -0.413 0.613 0.353 + 247.30 12.565 12.578 12.598 -0.567 0.704 0.453 -0.567 0.704 0.319 -0.257 -0.399 0.511 0.286 + 247.35 12.741 12.751 12.757 -0.521 0.400 0.628 -0.521 0.400 0.251 -0.327 -0.208 0.413 0.231 + 247.40 12.710 12.718 12.726 -0.448 0.475 0.597 -0.448 0.475 0.283 -0.268 -0.213 0.391 0.222 + 247.45 12.558 12.562 12.575 -0.332 0.567 0.445 -0.332 0.567 0.252 -0.148 -0.188 0.315 0.174 + 247.50 12.406 12.407 12.444 -0.081 0.959 0.293 -0.081 0.959 0.281 -0.024 -0.078 0.506 0.146 + 247.55 12.255 12.255 12.287 0.029 0.875 0.142 0.029 0.875 0.125 0.004 0.026 0.394 0.064 + 247.60 12.424 12.425 12.445 -0.089 0.720 0.311 -0.089 0.720 0.224 -0.028 -0.064 0.312 0.118 + 247.65 12.549 12.549 12.579 -0.061 0.868 0.437 -0.061 0.868 0.379 -0.026 -0.053 0.474 0.192 + 247.70 12.680 12.680 12.714 -0.035 0.924 0.568 -0.035 0.924 0.524 -0.020 -0.032 0.588 0.263 + 247.75 12.575 12.576 12.612 -0.127 0.960 0.462 -0.127 0.960 0.444 -0.059 -0.122 0.576 0.232 + 247.80 12.784 12.785 12.800 0.194 0.615 0.671 0.194 0.615 0.413 0.130 0.119 0.433 0.225 + 247.85 13.000 13.001 13.011 -0.087 0.522 0.888 -0.087 0.522 0.464 -0.077 -0.045 0.534 0.236 + 247.90 12.854 12.860 12.864 -0.397 0.298 0.741 -0.397 0.298 0.221 -0.294 -0.118 0.398 0.193 + 247.95 12.893 12.904 12.904 -0.523 0.080 0.781 -0.523 0.080 0.062 -0.408 -0.042 0.445 0.208 + 248.00 12.619 12.663 12.663 -1.049 -0.027 0.506 -1.049 -0.027 -0.014 -0.531 0.028 0.678 0.266 + 248.05 12.412 12.424 12.434 -0.547 0.488 0.300 -0.547 0.488 0.146 -0.164 -0.267 0.314 0.173 + 248.10 12.258 12.263 12.266 -0.345 0.280 0.145 -0.345 0.280 0.041 -0.050 -0.097 0.109 0.058 + 248.15 12.448 12.448 12.450 -0.009 0.223 0.335 -0.009 0.223 0.075 -0.003 -0.002 0.081 0.037 + 248.20 12.537 12.537 12.549 -0.050 0.560 0.424 -0.050 0.560 0.237 -0.021 -0.028 0.248 0.120 + 248.25 12.407 12.407 12.434 0.027 0.816 0.295 0.027 0.816 0.240 0.008 0.022 0.377 0.121 + 248.30 12.237 12.242 12.251 -0.344 0.481 0.124 -0.344 0.481 0.060 -0.043 -0.166 0.183 0.091 + 248.35 12.321 12.326 12.339 -0.364 0.557 0.208 -0.364 0.557 0.116 -0.076 -0.203 0.243 0.123 + 248.40 12.263 12.263 12.284 0.035 0.726 0.150 0.035 0.726 0.109 0.005 0.026 0.275 0.056 + 248.45 11.969 11.976 11.996 0.412 0.691 -0.144 0.412 0.691 -0.099 -0.059 0.284 0.334 0.153 + 248.50 12.094 12.098 12.106 0.307 0.436 -0.018 0.307 0.436 -0.008 -0.006 0.134 0.142 0.067 + 248.55 12.317 12.318 12.320 0.125 0.192 0.205 0.125 0.192 0.039 0.026 0.024 0.047 0.026 + 248.60 12.408 12.423 12.434 0.612 0.529 0.295 0.612 0.529 0.156 0.181 0.324 0.371 0.201 + 248.65 12.612 12.621 12.640 0.492 0.692 0.499 0.492 0.692 0.346 0.245 0.341 0.485 0.272 + 248.70 13.011 13.011 13.014 -0.025 0.284 0.898 -0.025 0.284 0.255 -0.023 -0.007 0.444 0.128 + 248.75 13.147 13.150 13.150 -0.255 -0.071 1.034 -0.255 -0.071 -0.074 -0.264 0.018 0.570 0.137 + 248.80 13.250 13.250 13.252 -0.109 -0.185 1.137 -0.109 -0.185 -0.210 -0.124 0.020 0.669 0.122 + 248.85 13.183 13.192 13.192 -0.478 0.047 1.070 -0.478 0.047 0.050 -0.511 -0.022 0.688 0.257 + 248.90 13.087 13.096 13.102 -0.483 0.423 0.974 -0.483 0.423 0.412 -0.470 -0.204 0.680 0.329 + 248.95 13.126 13.150 13.169 -0.799 0.709 1.013 -0.799 0.709 0.719 -0.810 -0.567 1.084 0.611 + 249.00 13.354 13.396 13.405 -1.070 0.482 1.241 -1.070 0.482 0.598 -1.328 -0.515 1.458 0.772 + 249.05 13.188 13.235 13.240 -1.116 0.359 1.075 -1.116 0.359 0.386 -1.200 -0.401 1.265 0.661 + 249.10 13.417 13.441 13.443 -0.800 0.232 1.304 -0.800 0.232 0.302 -1.044 -0.185 1.198 0.551 + 249.15 13.452 13.489 13.492 -1.004 0.298 1.339 -1.004 0.298 0.400 -1.344 -0.300 1.445 0.717 + 249.20 13.429 13.490 13.497 -1.287 0.434 1.316 -1.287 0.434 0.570 -1.694 -0.558 1.788 0.936 + 249.25 13.545 13.588 13.588 -1.069 0.003 1.433 -1.069 0.003 0.005 -1.531 -0.004 1.597 0.765 + 249.30 13.638 13.683 13.684 -1.108 0.212 1.525 -1.108 0.212 0.323 -1.689 -0.235 1.799 0.868 + 249.35 13.707 13.747 13.749 -1.051 0.237 1.594 -1.051 0.237 0.378 -1.675 -0.250 1.851 0.868 + 249.40 14.004 14.030 14.030 -0.855 0.104 1.891 -0.855 0.104 0.198 -1.616 -0.089 2.158 0.815 + 249.45 14.072 14.095 14.098 -0.790 0.320 1.960 -0.790 0.320 0.628 -1.547 -0.253 2.283 0.844 + 249.50 14.250 14.286 14.304 -1.014 0.710 2.137 -1.014 0.710 1.517 -2.166 -0.719 3.050 1.370 + 249.55 14.216 14.235 14.252 -0.748 0.684 2.103 -0.748 0.684 1.437 -1.572 -0.511 2.724 1.095 + 249.60 13.850 13.866 13.886 -0.669 0.747 1.737 -0.669 0.747 1.298 -1.163 -0.500 2.012 0.906 + 249.65 13.884 13.904 13.916 -0.756 0.563 1.771 -0.756 0.563 0.998 -1.339 -0.426 2.013 0.862 + 249.70 13.553 13.603 13.629 -1.170 0.838 1.440 -1.170 0.838 1.207 -1.685 -0.981 2.073 1.147 + 249.75 13.428 13.477 13.494 -1.152 0.676 1.315 -1.152 0.676 0.888 -1.515 -0.778 1.756 0.960 + 249.80 13.046 13.092 13.112 -1.088 0.729 0.934 -1.088 0.729 0.680 -1.016 -0.793 1.293 0.728 + 249.85 12.831 12.908 12.917 -1.406 0.484 0.718 -1.406 0.484 0.347 -1.010 -0.680 1.363 0.633 + 249.90 13.120 13.191 13.207 -1.367 0.634 1.008 -1.367 0.634 0.638 -1.377 -0.866 1.643 0.874 + 249.95 12.968 13.068 13.090 -1.618 0.749 0.855 -1.618 0.749 0.640 -1.383 -1.211 1.954 0.974 + 250.00 13.200 13.305 13.315 -1.671 0.508 1.087 -1.671 0.508 0.552 -1.816 -0.848 2.115 1.040 + 250.05 13.000 13.109 13.109 -1.683 0.152 0.887 -1.683 0.152 0.135 -1.493 -0.255 1.822 0.760 + 250.10 12.790 12.861 12.873 -1.344 0.548 0.678 -1.344 0.548 0.371 -0.911 -0.737 1.283 0.614 + 250.15 12.813 12.861 12.864 -1.112 0.234 0.701 -1.112 0.234 0.164 -0.779 -0.260 0.891 0.419 + 250.20 12.863 12.899 12.899 -0.962 -0.058 0.751 -0.962 -0.058 -0.043 -0.722 0.056 0.746 0.363 + 250.25 13.029 13.048 13.053 -0.704 0.359 0.916 -0.704 0.359 0.328 -0.645 -0.253 0.732 0.383 + 250.30 13.410 13.432 13.432 -0.765 0.019 1.297 -0.765 0.019 0.025 -0.993 -0.015 1.135 0.497 + 250.35 13.410 13.446 13.448 -0.990 -0.235 1.297 -0.990 -0.235 -0.305 -1.284 0.233 1.358 0.670 + 250.40 13.333 13.371 13.379 -1.011 -0.467 1.220 -1.011 -0.467 -0.570 -1.234 0.472 1.365 0.719 + 250.45 13.031 13.090 13.103 -1.239 -0.588 0.918 -1.239 -0.588 -0.540 -1.138 0.729 1.362 0.727 + 250.50 12.703 12.751 12.772 -1.108 -0.736 0.590 -1.108 -0.736 -0.434 -0.654 0.815 1.059 0.566 + 250.55 12.733 12.772 12.797 -1.005 -0.791 0.620 -1.005 -0.791 -0.491 -0.623 0.795 1.010 0.562 + 250.60 13.117 13.172 13.193 -1.205 -0.755 1.004 -1.205 -0.755 -0.758 -1.209 0.910 1.515 0.846 + 250.65 13.458 13.515 13.536 -1.246 -0.747 1.345 -1.246 -0.747 -1.005 -1.675 0.931 1.959 1.082 + 250.70 13.408 13.458 13.480 -1.156 -0.779 1.295 -1.156 -0.779 -1.009 -1.498 0.901 1.811 1.009 + 250.75 12.910 12.997 13.042 -1.506 -1.078 0.797 -1.506 -1.078 -0.859 -1.200 1.623 2.032 1.097 + 250.80 12.749 12.801 12.862 -1.148 -1.253 0.637 -1.148 -1.253 -0.798 -0.731 1.438 1.646 0.900 + 250.85 12.674 12.751 12.829 -1.397 -1.419 0.561 -1.397 -1.419 -0.796 -0.784 1.982 2.140 1.138 + 250.90 12.567 12.617 12.676 -1.121 -1.220 0.454 -1.121 -1.220 -0.554 -0.509 1.368 1.476 0.781 + 250.95 12.302 12.341 12.398 -0.976 -1.182 0.190 -0.976 -1.182 -0.224 -0.185 1.154 1.193 0.595 + 251.00 12.399 12.437 12.471 -0.971 -0.918 0.286 -0.971 -0.918 -0.263 -0.278 0.892 0.934 0.485 + 251.05 12.784 12.817 12.834 -0.912 -0.662 0.671 -0.912 -0.662 -0.445 -0.612 0.604 0.860 0.484 + 251.10 12.631 12.643 12.658 -0.547 -0.607 0.518 -0.547 -0.607 -0.314 -0.283 0.332 0.468 0.269 + 251.15 12.647 12.673 12.684 -0.809 -0.518 0.534 -0.809 -0.518 -0.277 -0.432 0.419 0.604 0.331 + 251.20 12.579 12.606 12.612 -0.811 -0.415 0.467 -0.811 -0.415 -0.194 -0.378 0.336 0.524 0.271 + 251.25 12.403 12.428 12.428 -0.780 0.005 0.290 -0.780 0.005 0.001 -0.226 -0.004 0.346 0.113 + 251.30 12.411 12.421 12.421 -0.516 -0.033 0.298 -0.516 -0.033 -0.010 -0.154 0.017 0.178 0.078 + 251.35 12.398 12.414 12.414 -0.633 0.124 0.285 -0.633 0.124 0.035 -0.180 -0.079 0.249 0.100 + 251.40 12.348 12.353 12.356 -0.364 -0.260 0.235 -0.364 -0.260 -0.061 -0.086 0.095 0.128 0.071 + 251.45 12.601 12.605 12.608 -0.313 -0.282 0.489 -0.313 -0.282 -0.138 -0.153 0.088 0.208 0.112 + 251.50 12.790 12.802 12.803 -0.550 -0.196 0.677 -0.550 -0.196 -0.133 -0.373 0.108 0.400 0.205 + 251.55 13.013 13.036 13.040 -0.783 -0.324 0.900 -0.783 -0.324 -0.292 -0.705 0.254 0.764 0.402 + 251.60 12.891 12.921 12.925 -0.886 -0.324 0.778 -0.886 -0.324 -0.252 -0.690 0.287 0.748 0.394 + 251.65 12.560 12.606 12.606 -1.067 -0.077 0.448 -1.067 -0.077 -0.035 -0.478 0.082 0.672 0.243 + 251.70 12.641 12.712 12.714 -1.347 -0.195 0.528 -1.347 -0.195 -0.103 -0.711 0.263 1.065 0.383 + 251.75 12.885 12.960 12.962 -1.395 -0.193 0.772 -1.395 -0.193 -0.149 -1.077 0.270 1.290 0.560 + 251.80 13.041 13.114 13.115 -1.380 -0.193 0.928 -1.380 -0.193 -0.179 -1.281 0.266 1.401 0.660 + 251.85 12.788 12.810 12.810 -0.751 -0.027 0.675 -0.751 -0.027 -0.018 -0.507 0.020 0.510 0.254 + 251.90 12.572 12.590 12.591 -0.658 -0.165 0.459 -0.658 -0.165 -0.076 -0.302 0.109 0.336 0.165 + 251.95 12.598 12.615 12.617 -0.662 -0.219 0.485 -0.662 -0.219 -0.106 -0.321 0.145 0.361 0.184 + 252.00 12.473 12.485 12.491 -0.533 -0.407 0.360 -0.533 -0.407 -0.147 -0.192 0.217 0.290 0.162 + 252.05 12.364 12.367 12.367 -0.290 0.023 0.251 -0.290 0.023 0.006 -0.073 -0.007 0.074 0.037 + 252.10 12.553 12.555 12.559 -0.248 0.313 0.440 -0.248 0.313 0.138 -0.109 -0.078 0.177 0.096 + 252.15 12.607 12.608 12.608 -0.170 -0.029 0.494 -0.170 -0.029 -0.015 -0.084 0.005 0.137 0.043 + 252.20 12.525 12.529 12.531 -0.319 -0.213 0.413 -0.319 -0.213 -0.088 -0.131 0.068 0.159 0.086 + 252.25 12.281 12.289 12.292 -0.455 -0.273 0.168 -0.455 -0.273 -0.046 -0.076 0.124 0.155 0.076 + 252.30 12.236 12.239 12.239 -0.281 -0.117 0.123 -0.281 -0.117 -0.014 -0.034 0.033 0.054 0.025 + 252.35 12.360 12.366 12.367 -0.389 0.158 0.247 -0.389 0.158 0.039 -0.096 -0.061 0.119 0.060 + 252.40 12.382 12.396 12.400 -0.600 0.288 0.269 -0.600 0.288 0.077 -0.161 -0.173 0.258 0.124 + 252.45 12.362 12.371 12.373 -0.462 0.261 0.249 -0.462 0.261 0.065 -0.115 -0.120 0.172 0.089 + 252.50 12.431 12.442 12.442 -0.504 0.112 0.319 -0.504 0.112 0.036 -0.161 -0.056 0.184 0.087 + 252.55 12.098 12.108 12.117 -0.498 0.476 -0.015 -0.498 0.476 -0.007 0.007 -0.237 0.237 0.119 + 252.60 12.007 12.027 12.046 -0.694 0.669 -0.106 -0.694 0.669 -0.071 0.073 -0.465 0.470 0.238 + 252.65 12.386 12.434 12.435 -1.091 0.175 0.273 -1.091 0.175 0.048 -0.298 -0.191 0.648 0.179 + 252.70 12.333 12.368 12.368 -0.921 0.130 0.220 -0.921 0.130 0.029 -0.203 -0.120 0.457 0.119 + 252.75 12.223 12.256 12.259 -0.896 0.260 0.110 -0.896 0.260 0.029 -0.099 -0.233 0.441 0.127 + 252.80 12.265 12.293 12.300 -0.830 0.410 0.152 -0.830 0.410 0.062 -0.126 -0.340 0.440 0.184 + 252.85 12.184 12.207 12.219 -0.758 0.538 0.071 -0.758 0.538 0.038 -0.054 -0.408 0.435 0.207 + 252.90 11.995 12.009 12.009 -0.567 0.045 -0.117 -0.567 0.045 -0.005 0.067 -0.025 0.169 0.036 + 252.95 11.922 11.945 11.947 -0.743 0.178 -0.191 -0.743 0.178 -0.034 0.142 -0.132 0.310 0.098 + 253.00 11.730 11.746 11.749 -0.612 0.229 -0.383 -0.612 0.229 -0.088 0.234 -0.140 0.287 0.143 + 253.05 11.514 11.527 11.534 -0.534 0.404 -0.598 -0.534 0.404 -0.242 0.320 -0.216 0.403 0.228 + 253.10 11.433 11.441 11.448 -0.432 0.400 -0.680 -0.432 0.400 -0.272 0.293 -0.173 0.404 0.218 + 253.15 11.650 11.652 11.654 -0.263 -0.166 -0.463 -0.263 -0.166 0.077 0.122 0.044 0.156 0.075 + 253.20 11.624 11.629 11.630 0.349 -0.112 -0.489 0.349 -0.112 0.055 -0.171 -0.039 0.187 0.092 + 253.25 11.856 11.859 11.860 0.252 0.150 -0.256 0.252 0.150 -0.038 -0.064 0.038 0.076 0.042 + 253.30 12.054 12.060 12.061 0.400 0.109 -0.059 0.400 0.109 -0.006 -0.024 0.044 0.088 0.025 + 253.35 12.148 12.158 12.158 0.502 0.028 0.035 0.502 0.028 0.001 0.018 0.014 0.127 0.011 + 253.40 12.119 12.120 12.120 0.156 -0.041 0.006 0.156 -0.041 -0.000 0.001 -0.006 0.013 0.003 + 253.45 12.307 12.313 12.314 -0.388 0.055 0.194 -0.388 0.055 0.011 -0.076 -0.021 0.096 0.040 + 253.50 12.277 12.279 12.279 -0.228 -0.093 0.164 -0.228 -0.093 -0.015 -0.037 0.021 0.044 0.023 + 253.55 12.483 12.483 12.493 -0.098 -0.502 0.370 -0.098 -0.502 -0.186 -0.036 0.049 0.199 0.098 + 253.60 12.455 12.455 12.459 0.012 -0.299 0.342 0.012 -0.299 -0.102 0.004 -0.004 0.103 0.051 + 253.65 12.155 12.155 12.158 0.088 -0.245 0.042 0.088 -0.245 -0.010 0.004 -0.022 0.035 0.012 + 253.70 12.247 12.256 12.268 0.473 -0.523 0.135 0.473 -0.523 -0.070 0.064 -0.247 0.258 0.133 + 253.75 12.514 12.577 12.590 1.263 -0.573 0.401 1.263 -0.573 -0.230 0.506 -0.724 1.043 0.457 + 253.80 12.006 12.110 12.120 1.585 -0.490 -0.107 1.585 -0.490 0.053 -0.170 -0.777 1.382 0.399 + 253.85 12.216 12.312 12.325 1.528 -0.581 0.104 1.528 -0.581 -0.060 0.158 -0.888 1.342 0.452 + 253.90 12.210 12.313 12.318 1.587 -0.358 0.097 1.587 -0.358 -0.035 0.154 -0.569 1.328 0.295 + 253.95 12.608 12.708 12.710 1.591 -0.223 0.495 1.591 -0.223 -0.110 0.787 -0.355 1.412 0.435 + 254.00 12.503 12.581 12.581 1.395 -0.001 0.390 1.395 -0.001 -0.000 0.544 -0.002 1.050 0.272 + 254.05 12.495 12.549 12.549 1.164 -0.074 0.382 1.164 -0.074 -0.028 0.444 -0.086 0.753 0.227 + 254.10 12.475 12.538 12.543 1.254 -0.379 0.362 1.254 -0.379 -0.137 0.454 -0.476 0.924 0.336 + 254.15 12.584 12.653 12.668 1.314 -0.620 0.471 1.314 -0.620 -0.292 0.620 -0.814 1.167 0.532 + 254.20 12.531 12.606 12.633 1.378 -0.817 0.418 1.378 -0.817 -0.342 0.576 -1.126 1.371 0.655 + 254.25 12.576 12.656 12.678 1.420 -0.749 0.463 1.420 -0.749 -0.347 0.657 -1.064 1.397 0.649 + 254.30 12.757 12.832 12.853 1.386 -0.726 0.644 1.386 -0.726 -0.468 0.893 -1.006 1.431 0.712 + 254.35 12.422 12.451 12.456 0.860 -0.332 0.309 0.860 -0.332 -0.103 0.266 -0.286 0.473 0.202 + 254.40 12.211 12.246 12.270 0.932 -0.763 0.098 0.932 -0.763 -0.075 0.091 -0.711 0.730 0.360 + 254.45 12.191 12.228 12.264 0.953 -0.944 0.078 0.953 -0.944 -0.074 0.074 -0.899 0.902 0.453 + 254.50 12.255 12.285 12.338 0.863 -1.141 0.142 0.863 -1.141 -0.162 0.122 -0.985 1.034 0.503 + 254.55 12.342 12.386 12.438 1.042 -1.136 0.229 1.042 -1.136 -0.261 0.239 -1.184 1.215 0.618 + 254.60 12.346 12.377 12.408 0.873 -0.876 0.234 0.873 -0.876 -0.205 0.204 -0.765 0.792 0.409 + 254.65 12.232 12.290 12.310 1.194 -0.701 0.119 1.194 -0.701 -0.084 0.143 -0.837 0.966 0.427 + 254.70 12.190 12.251 12.267 1.223 -0.621 0.077 1.223 -0.621 -0.048 0.094 -0.759 0.943 0.383 + 254.75 12.124 12.188 12.192 1.243 -0.304 0.011 1.243 -0.304 -0.003 0.014 -0.377 0.818 0.189 + 254.80 12.001 12.058 12.060 1.175 -0.173 -0.112 1.175 -0.173 0.019 -0.131 -0.203 0.711 0.121 + 254.85 11.698 11.787 11.787 1.444 0.003 -0.415 1.444 0.003 -0.001 -0.599 0.005 1.128 0.299 + 254.90 11.565 11.613 11.619 1.055 0.364 -0.547 1.055 0.364 -0.199 -0.578 0.384 0.773 0.361 + 254.95 11.988 12.010 12.010 0.710 0.024 -0.124 0.710 0.024 -0.003 -0.088 0.017 0.260 0.045 + 255.00 12.032 12.048 12.050 0.627 -0.219 -0.081 0.627 -0.219 0.018 -0.051 -0.137 0.224 0.074 + 255.05 11.974 11.982 11.985 0.445 0.244 -0.139 0.445 0.244 -0.034 -0.062 0.108 0.138 0.065 + 255.10 11.750 11.759 11.764 0.460 0.364 -0.363 0.460 0.364 -0.132 -0.167 0.167 0.238 0.135 + 255.15 11.350 11.371 11.385 0.689 0.568 -0.763 0.689 0.568 -0.433 -0.526 0.391 0.690 0.393 + 255.20 11.459 11.493 11.504 0.885 0.507 -0.654 0.885 0.507 -0.332 -0.578 0.449 0.734 0.402 + 255.25 11.651 11.684 11.688 0.880 0.305 -0.462 0.880 0.305 -0.141 -0.407 0.268 0.540 0.253 + 255.30 11.231 11.263 11.263 0.851 -0.040 -0.882 0.851 -0.040 0.035 -0.750 -0.034 0.752 0.376 + 255.35 11.627 11.656 11.657 0.814 0.136 -0.485 0.814 0.136 -0.066 -0.395 0.110 0.458 0.208 + 255.40 11.725 11.739 11.739 0.564 0.110 -0.388 0.564 0.110 -0.043 -0.219 0.062 0.240 0.116 + 255.45 11.681 11.718 11.720 0.922 -0.210 -0.431 0.922 -0.210 0.091 -0.398 -0.194 0.540 0.226 + 255.50 11.815 11.870 11.880 1.144 -0.477 -0.298 1.144 -0.477 0.142 -0.341 -0.546 0.813 0.330 + 255.55 11.981 12.043 12.048 1.229 -0.331 -0.132 1.229 -0.331 0.044 -0.163 -0.407 0.819 0.220 + 255.60 11.779 11.841 11.842 1.212 -0.094 -0.334 1.212 -0.094 0.031 -0.404 -0.114 0.794 0.211 + 255.65 12.035 12.055 12.055 0.692 -0.117 -0.078 0.692 -0.117 0.009 -0.054 -0.081 0.249 0.049 + 255.70 11.743 11.774 11.775 0.851 0.168 -0.370 0.851 0.168 -0.062 -0.315 0.143 0.445 0.176 + 255.75 11.902 11.954 11.955 1.112 0.154 -0.211 1.112 0.154 -0.032 -0.235 0.171 0.653 0.146 + 255.80 12.187 12.227 12.234 0.985 0.395 0.075 0.985 0.395 0.029 0.074 0.389 0.566 0.199 + 255.85 12.089 12.170 12.181 1.403 0.530 -0.024 1.403 0.530 -0.013 -0.034 0.743 1.124 0.372 + 255.90 12.019 12.098 12.110 1.382 0.539 -0.094 1.382 0.539 -0.050 -0.130 0.744 1.105 0.379 + 255.95 11.905 11.948 11.979 1.020 0.851 -0.208 1.020 0.851 -0.177 -0.212 0.868 0.904 0.455 + 256.00 12.043 12.086 12.107 1.025 0.705 -0.070 1.025 0.705 -0.049 -0.072 0.722 0.776 0.364 + 256.05 11.953 11.994 11.997 0.988 0.277 -0.159 0.988 0.277 -0.044 -0.157 0.273 0.539 0.159 + 256.10 11.671 11.737 11.740 1.247 0.253 -0.442 1.247 0.253 -0.112 -0.551 0.315 0.907 0.322 + 256.15 11.503 11.595 11.597 1.458 0.195 -0.610 1.458 0.195 -0.119 -0.889 0.284 1.268 0.470 + 256.20 11.654 11.720 11.721 1.238 0.175 -0.459 1.238 0.175 -0.080 -0.568 0.216 0.887 0.306 + 256.25 11.712 11.796 11.815 1.409 0.665 -0.401 1.409 0.665 -0.267 -0.565 0.936 1.294 0.563 + 256.30 11.838 11.912 11.948 1.331 0.917 -0.275 1.331 0.917 -0.252 -0.366 1.221 1.344 0.650 + 256.35 11.695 11.795 11.819 1.536 0.737 -0.418 1.536 0.737 -0.308 -0.642 1.132 1.539 0.669 + 256.40 11.659 11.793 11.802 1.774 0.462 -0.454 1.774 0.462 -0.210 -0.806 0.820 1.784 0.584 + 256.45 11.437 11.618 11.636 2.043 0.637 -0.675 2.043 0.637 -0.430 -1.380 1.302 2.518 0.973 + 256.50 11.231 11.503 11.531 2.487 0.804 -0.882 2.487 0.804 -0.710 -2.194 2.000 3.804 1.526 + 256.55 11.374 11.630 11.662 2.424 0.865 -0.739 2.424 0.865 -0.639 -1.790 2.097 3.584 1.415 + 256.60 11.797 12.100 12.115 2.690 0.592 -0.315 2.690 0.592 -0.187 -0.848 1.594 3.843 0.908 + 256.65 11.848 12.108 12.114 2.494 0.403 -0.265 2.494 0.403 -0.107 -0.660 1.005 3.227 0.604 + 256.70 11.911 12.191 12.191 2.599 0.067 -0.202 2.599 0.067 -0.014 -0.525 0.175 3.400 0.277 + 256.75 11.773 12.025 12.026 2.450 -0.103 -0.340 2.450 -0.103 0.035 -0.832 -0.253 3.064 0.435 + 256.80 11.388 11.645 11.645 2.432 -0.075 -0.725 2.432 -0.075 0.055 -1.763 -0.183 3.223 0.887 + 256.85 11.301 11.536 11.543 2.320 -0.398 -0.812 2.320 -0.398 0.323 -1.884 -0.923 3.101 1.061 + 256.90 11.276 11.473 11.480 2.118 -0.402 -0.837 2.118 -0.402 0.337 -1.773 -0.852 2.674 0.998 + 256.95 10.905 11.104 11.113 2.089 -0.448 -1.207 2.089 -0.448 0.540 -2.522 -0.935 3.011 1.372 + 257.00 10.943 11.079 11.090 1.732 -0.486 -1.170 1.732 -0.486 0.568 -2.027 -0.841 2.303 1.133 + 257.05 11.117 11.262 11.267 1.804 -0.304 -0.996 1.804 -0.304 0.303 -1.796 -0.549 2.169 0.951 + 257.10 11.259 11.392 11.412 1.740 -0.667 -0.854 1.740 -0.667 0.570 -1.486 -1.161 2.101 0.985 + 257.15 11.395 11.551 11.609 1.895 -1.159 -0.718 1.895 -1.159 0.832 -1.361 -2.196 2.725 1.357 + 257.20 11.389 11.559 11.633 1.976 -1.309 -0.723 1.976 -1.309 0.947 -1.429 -2.586 3.070 1.551 + 257.25 11.503 11.639 11.690 1.772 -1.085 -0.609 1.772 -1.085 0.661 -1.080 -1.922 2.344 1.151 + 257.30 11.585 11.715 11.773 1.741 -1.165 -0.528 1.741 -1.165 0.615 -0.920 -2.028 2.334 1.155 + 257.35 11.749 11.864 11.899 1.645 -0.914 -0.364 1.645 -0.914 0.332 -0.598 -1.503 1.836 0.826 + 257.40 11.594 11.684 11.721 1.445 -0.938 -0.519 1.445 -0.938 0.487 -0.750 -1.356 1.619 0.812 + 257.45 11.642 11.692 11.747 1.087 -1.136 -0.471 1.087 -1.136 0.535 -0.512 -1.234 1.346 0.719 + 257.50 11.813 11.856 11.913 1.013 -1.170 -0.300 1.013 -1.170 0.351 -0.304 -1.185 1.242 0.636 + 257.55 12.008 12.080 12.124 1.312 -1.041 -0.105 1.312 -1.041 0.109 -0.138 -1.366 1.409 0.689 + 257.60 12.061 12.143 12.175 1.414 -0.882 -0.052 1.414 -0.882 0.046 -0.074 -1.247 1.390 0.625 + 257.65 11.925 12.024 12.075 1.538 -1.108 -0.188 1.538 -1.108 0.208 -0.289 -1.703 1.813 0.870 + 257.70 11.986 12.089 12.140 1.573 -1.109 -0.127 1.573 -1.109 0.141 -0.200 -1.745 1.861 0.881 + 257.75 12.009 12.092 12.179 1.413 -1.452 -0.104 1.413 -1.452 0.151 -0.147 -2.052 2.058 1.031 + 257.80 11.749 11.870 11.921 1.690 -1.103 -0.363 1.690 -1.103 0.401 -0.614 -1.863 2.102 1.001 + 257.85 11.845 11.964 12.008 1.680 -1.027 -0.268 1.680 -1.027 0.275 -0.450 -1.725 1.975 0.902 + 257.90 11.590 11.685 11.718 1.489 -0.875 -0.523 1.489 -0.875 0.458 -0.779 -1.303 1.628 0.793 + 257.95 11.641 11.704 11.756 1.214 -1.101 -0.472 1.214 -1.101 0.519 -0.573 -1.337 1.455 0.772 + 258.00 11.626 11.684 11.716 1.165 -0.864 -0.487 1.165 -0.864 0.421 -0.567 -1.006 1.170 0.615 + 258.05 11.460 11.502 11.543 0.974 -0.972 -0.652 0.974 -0.972 0.635 -0.636 -0.948 1.160 0.653 + 258.10 11.325 11.351 11.375 0.767 -0.746 -0.788 0.767 -0.746 0.588 -0.605 -0.573 0.883 0.510 + 258.15 11.469 11.538 11.557 1.259 -0.663 -0.644 1.259 -0.663 0.427 -0.810 -0.835 1.219 0.620 + 258.20 11.516 11.545 11.566 0.808 -0.709 -0.596 0.808 -0.709 0.423 -0.482 -0.573 0.756 0.430 + 258.25 11.711 11.763 11.791 1.108 -0.811 -0.402 1.108 -0.811 0.326 -0.445 -0.898 1.023 0.527 + 258.30 11.584 11.610 11.637 0.786 -0.784 -0.529 0.786 -0.784 0.415 -0.416 -0.616 0.756 0.425 + 258.35 11.270 11.295 11.327 0.744 -0.848 -0.842 0.744 -0.848 0.714 -0.627 -0.631 0.991 0.570 + 258.40 11.574 11.577 11.587 0.269 -0.489 -0.539 0.269 -0.489 0.264 -0.145 -0.132 0.301 0.164 + 258.45 11.590 11.594 11.601 0.322 -0.410 -0.523 0.322 -0.410 0.215 -0.169 -0.132 0.273 0.152 + 258.50 11.550 11.553 11.558 0.265 -0.345 -0.563 0.265 -0.345 0.194 -0.149 -0.091 0.253 0.131 + 258.55 11.675 11.686 11.689 0.510 -0.290 -0.438 0.510 -0.290 0.127 -0.224 -0.148 0.268 0.148 + 258.60 11.918 11.923 11.930 0.342 -0.386 -0.194 0.342 -0.386 0.075 -0.067 -0.132 0.152 0.083 + 258.65 12.043 12.058 12.064 0.602 -0.382 -0.070 0.602 -0.382 0.027 -0.042 -0.230 0.257 0.118 + 258.70 11.705 11.719 11.720 0.579 -0.155 -0.408 0.579 -0.155 0.063 -0.236 -0.090 0.263 0.130 + 258.75 12.065 12.076 12.086 0.500 -0.505 -0.047 0.500 -0.505 0.024 -0.024 -0.253 0.254 0.127 + 258.80 11.973 11.982 12.008 0.457 -0.789 -0.139 0.457 -0.789 0.110 -0.064 -0.361 0.426 0.191 + 258.85 12.162 12.171 12.190 0.468 -0.679 0.049 0.468 -0.679 -0.033 0.023 -0.318 0.341 0.160 + 258.90 11.946 11.948 11.957 0.239 -0.452 -0.167 0.239 -0.452 0.076 -0.040 -0.108 0.145 0.069 + 258.95 12.194 12.197 12.198 0.295 -0.130 0.081 0.295 -0.130 -0.011 0.024 -0.038 0.055 0.023 + 259.00 12.100 12.111 12.126 0.525 -0.614 -0.013 0.525 -0.614 0.008 -0.007 -0.322 0.326 0.161 + 259.05 12.117 12.130 12.141 0.556 -0.506 0.005 0.556 -0.506 -0.002 0.003 -0.281 0.283 0.141 + 259.10 12.263 12.274 12.278 0.524 -0.290 0.150 0.524 -0.290 -0.044 0.079 -0.152 0.191 0.088 + 259.15 12.571 12.592 12.602 0.716 -0.516 0.458 0.716 -0.516 -0.237 0.328 -0.370 0.495 0.274 + 259.20 12.188 12.225 12.238 0.949 -0.562 0.075 0.949 -0.562 -0.042 0.071 -0.533 0.611 0.270 + 259.25 12.339 12.362 12.389 0.754 -0.821 0.226 0.754 -0.821 -0.186 0.171 -0.619 0.647 0.334 + 259.30 12.269 12.280 12.313 0.533 -0.897 0.156 0.533 -0.897 -0.140 0.083 -0.478 0.556 0.252 + 259.35 12.389 12.402 12.469 0.561 -1.299 0.276 0.561 -1.299 -0.359 0.155 -0.729 1.039 0.413 + 259.40 12.408 12.432 12.521 0.771 -1.493 0.295 0.771 -1.493 -0.441 0.228 -1.151 1.455 0.627 + 259.45 12.507 12.511 12.596 0.312 -1.466 0.394 0.312 -1.466 -0.577 0.123 -0.457 1.200 0.373 + 259.50 12.589 12.590 12.632 0.110 -1.031 0.476 0.110 -1.031 -0.491 0.052 -0.114 0.651 0.253 + 259.55 12.608 12.608 12.660 0.030 -1.145 0.495 0.030 -1.145 -0.566 0.015 -0.035 0.778 0.284 + 259.60 12.940 12.941 13.007 0.203 -1.305 0.827 0.203 -1.305 -1.079 0.168 -0.265 1.214 0.562 + 259.65 13.082 13.085 13.200 0.285 -1.739 0.969 0.285 -1.739 -1.685 0.276 -0.495 2.022 0.889 + 259.70 13.160 13.161 13.274 0.121 -1.734 1.047 0.121 -1.734 -1.816 0.126 -0.209 2.059 0.916 + 259.75 12.822 12.822 12.927 0.112 -1.638 0.709 0.112 -1.638 -1.161 0.079 -0.183 1.599 0.589 + 259.80 12.840 12.842 12.985 0.206 -1.921 0.728 0.206 -1.921 -1.397 0.150 -0.396 2.130 0.730 + 259.85 12.785 12.791 12.897 0.385 -1.651 0.673 0.385 -1.651 -1.110 0.259 -0.636 1.663 0.653 + 259.90 12.836 12.845 12.901 0.497 -1.199 0.723 0.497 -1.199 -0.867 0.359 -0.595 1.103 0.556 + 259.95 12.612 12.626 12.674 0.585 -1.100 0.500 0.585 -1.100 -0.549 0.292 -0.644 0.901 0.448 + 260.00 12.549 12.576 12.620 0.823 -1.044 0.437 0.823 -1.044 -0.456 0.359 -0.860 0.979 0.519 + 260.05 12.529 12.553 12.584 0.769 -0.880 0.417 0.769 -0.880 -0.367 0.320 -0.676 0.769 0.417 + 260.10 12.721 12.740 12.784 0.693 -1.056 0.609 0.693 -1.056 -0.643 0.422 -0.732 0.983 0.531 + 260.15 13.103 13.150 13.219 1.120 -1.344 0.990 1.120 -1.344 -1.330 1.109 -1.505 2.020 1.147 + 260.20 13.089 13.136 13.213 1.109 -1.428 0.976 1.109 -1.428 -1.394 1.082 -1.584 2.111 1.186 + 260.25 13.108 13.146 13.200 0.990 -1.201 0.995 0.990 -1.201 -1.196 0.986 -1.189 1.707 0.977 + 260.30 12.744 12.770 12.808 0.808 -0.985 0.631 0.808 -0.985 -0.622 0.510 -0.796 1.011 0.566 + 260.35 12.613 12.617 12.638 0.316 -0.728 0.500 0.316 -0.728 -0.364 0.158 -0.230 0.440 0.229 + 260.40 12.290 12.291 12.310 0.152 -0.690 0.177 0.152 -0.690 -0.122 0.027 -0.105 0.265 0.082 + 260.45 12.521 12.525 12.552 0.325 -0.823 0.408 0.325 -0.823 -0.336 0.133 -0.268 0.475 0.225 + 260.50 12.615 12.635 12.672 0.716 -0.963 0.502 0.716 -0.963 -0.484 0.359 -0.689 0.846 0.458 + 260.55 12.678 12.693 12.760 0.633 -1.302 0.565 0.633 -1.302 -0.736 0.357 -0.824 1.208 0.581 + 260.60 12.984 13.015 13.048 0.895 -0.922 0.872 0.895 -0.922 -0.804 0.780 -0.826 1.206 0.696 + 260.65 13.035 13.070 13.114 0.947 -1.082 0.922 0.947 -1.082 -0.998 0.873 -1.024 1.459 0.838 + 260.70 13.133 13.152 13.204 0.704 -1.170 1.021 0.704 -1.170 -1.194 0.719 -0.824 1.453 0.810 + 260.75 13.063 13.083 13.125 0.729 -1.041 0.950 0.729 -1.041 -0.989 0.693 -0.758 1.258 0.713 + 260.80 13.414 13.424 13.535 0.530 -1.729 1.301 0.530 -1.729 -2.249 0.689 -0.916 2.481 1.262 + 260.85 13.058 13.065 13.192 0.425 -1.827 0.945 0.425 -1.827 -1.727 0.402 -0.777 2.206 0.968 + 260.90 12.660 12.662 12.752 0.236 -1.510 0.547 0.236 -1.510 -0.826 0.129 -0.356 1.317 0.454 + 260.95 12.459 12.460 12.539 0.202 -1.402 0.346 0.202 -1.402 -0.485 0.070 -0.284 1.063 0.283 + 261.00 12.276 12.278 12.327 0.238 -1.095 0.163 0.238 -1.095 -0.178 0.039 -0.260 0.641 0.159 + 261.05 11.982 11.991 12.036 0.482 -1.040 -0.131 0.482 -1.040 0.136 -0.063 -0.501 0.666 0.262 + 261.10 11.799 11.804 11.823 0.344 -0.680 -0.314 0.344 -0.680 0.214 -0.108 -0.233 0.339 0.167 + 261.15 11.875 11.884 11.892 0.452 -0.446 -0.237 0.452 -0.446 0.106 -0.107 -0.201 0.230 0.126 + 261.20 11.664 11.682 11.688 0.635 -0.378 -0.448 0.635 -0.378 0.170 -0.285 -0.240 0.374 0.205 + 261.25 11.483 11.496 11.496 0.535 -0.031 -0.630 0.535 -0.031 0.020 -0.337 -0.017 0.342 0.169 + 261.30 11.698 11.718 11.719 0.672 0.156 -0.414 0.672 0.156 -0.064 -0.278 0.105 0.324 0.152 + 261.35 11.807 11.838 11.840 0.861 -0.172 -0.306 0.861 -0.172 0.053 -0.263 -0.148 0.432 0.153 + 261.40 11.534 11.588 11.589 1.120 -0.158 -0.579 1.120 -0.158 0.092 -0.649 -0.177 0.807 0.339 + 261.45 11.376 11.450 11.453 1.299 -0.292 -0.737 1.299 -0.292 0.215 -0.957 -0.379 1.158 0.526 + 261.50 11.243 11.288 11.291 1.006 -0.279 -0.870 1.006 -0.279 0.243 -0.875 -0.280 0.923 0.475 + 261.55 11.364 11.385 11.394 0.700 -0.429 -0.749 0.700 -0.429 0.321 -0.524 -0.300 0.617 0.342 + 261.60 11.312 11.328 11.336 0.617 -0.427 -0.801 0.617 -0.427 0.342 -0.494 -0.263 0.603 0.328 + 261.65 11.546 11.551 11.558 0.360 -0.401 -0.567 0.360 -0.401 0.228 -0.204 -0.144 0.306 0.169 + 261.70 11.708 11.712 11.724 0.303 -0.534 -0.405 0.303 -0.534 0.216 -0.123 -0.162 0.270 0.148 + 261.75 11.660 11.660 11.696 -0.042 -0.918 -0.453 -0.042 -0.918 0.415 0.019 0.039 0.524 0.209 + 261.80 11.768 11.771 11.787 -0.269 -0.616 -0.345 -0.269 -0.616 0.212 0.093 0.165 0.285 0.142 + 261.85 11.790 11.803 11.835 -0.551 -0.870 -0.322 -0.551 -0.870 0.281 0.178 0.479 0.582 0.292 + 261.90 11.949 11.951 11.996 -0.218 -1.033 -0.163 -0.218 -1.033 0.169 0.036 0.225 0.570 0.142 + 261.95 11.998 11.998 12.067 -0.080 -1.290 -0.115 -0.080 -1.290 0.148 0.009 0.104 0.841 0.090 + 262.00 11.975 11.983 12.026 -0.423 -1.016 -0.137 -0.423 -1.016 0.140 0.058 0.430 0.615 0.228 + 262.05 12.241 12.253 12.276 -0.546 -0.754 0.128 -0.546 -0.754 -0.097 -0.070 0.411 0.441 0.214 + 262.10 12.318 12.324 12.375 -0.398 -1.118 0.205 -0.398 -1.118 -0.229 -0.082 0.444 0.725 0.253 + 262.15 12.524 12.526 12.582 -0.234 -1.181 0.411 -0.234 -1.181 -0.486 -0.096 0.276 0.809 0.284 + 262.20 12.464 12.468 12.530 -0.315 -1.238 0.352 -0.315 -1.238 -0.435 -0.111 0.390 0.878 0.297 + 262.25 12.352 12.355 12.397 -0.262 -1.022 0.239 -0.262 -1.022 -0.245 -0.063 0.268 0.586 0.184 + 262.30 12.233 12.236 12.269 0.251 -0.902 0.120 0.251 -0.902 -0.109 0.030 -0.226 0.446 0.126 + 262.35 12.328 12.331 12.381 0.244 -1.111 0.216 0.244 -1.111 -0.240 0.053 -0.271 0.670 0.183 + 262.40 12.533 12.534 12.576 0.174 -1.019 0.420 0.174 -1.019 -0.428 0.073 -0.177 0.623 0.235 + 262.45 12.385 12.386 12.414 -0.071 -0.838 0.273 -0.071 -0.838 -0.228 -0.019 0.060 0.391 0.118 + 262.50 12.581 12.596 12.619 -0.622 -0.765 0.468 -0.622 -0.765 -0.358 -0.291 0.476 0.596 0.331 + 262.55 12.518 12.554 12.592 -0.953 -0.977 0.405 -0.953 -0.977 -0.395 -0.386 0.931 1.013 0.541 + 262.60 12.766 12.800 12.842 -0.929 -1.035 0.653 -0.929 -1.035 -0.676 -0.607 0.962 1.181 0.662 + 262.65 12.732 12.776 12.795 -1.057 -0.707 0.619 -1.057 -0.707 -0.438 -0.655 0.747 1.000 0.543 + 262.70 12.522 12.546 12.560 -0.771 -0.597 0.409 -0.771 -0.597 -0.244 -0.315 0.460 0.559 0.304 + 262.75 12.522 12.536 12.576 -0.598 -1.000 0.409 -0.598 -1.000 -0.409 -0.245 0.598 0.763 0.382 + 262.80 12.475 12.483 12.543 -0.445 -1.223 0.362 -0.445 -1.223 -0.443 -0.161 0.545 0.913 0.360 + 262.85 12.805 12.823 12.880 -0.684 -1.206 0.692 -0.684 -1.206 -0.835 -0.473 0.825 1.201 0.633 + 262.90 12.558 12.576 12.610 -0.676 -0.935 0.445 -0.676 -0.935 -0.416 -0.300 0.632 0.764 0.407 + 262.95 12.442 12.465 12.559 -0.758 -1.535 0.329 -0.758 -1.535 -0.506 -0.250 1.163 1.519 0.646 + 263.00 12.097 12.117 12.212 -0.699 -1.518 -0.016 -0.699 -1.518 0.024 0.011 1.061 1.396 0.530 + 263.05 12.253 12.271 12.324 -0.660 -1.142 0.141 -0.660 -1.142 -0.161 -0.093 0.754 0.880 0.388 + 263.10 12.121 12.155 12.191 -0.919 -0.931 0.008 -0.919 -0.931 -0.007 -0.007 0.856 0.856 0.428 + 263.15 11.854 11.883 11.915 -0.829 -0.875 -0.259 -0.829 -0.875 0.227 0.215 0.725 0.760 0.395 + 263.20 12.027 12.043 12.095 -0.619 -1.127 -0.086 -0.619 -1.127 0.097 0.053 0.698 0.830 0.353 + 263.25 11.918 11.927 11.941 -0.466 -0.580 -0.195 -0.466 -0.580 0.113 0.091 0.270 0.296 0.153 + 263.30 11.565 11.575 11.583 -0.489 -0.427 -0.548 -0.489 -0.427 0.234 0.268 0.209 0.361 0.206 + 263.35 11.385 11.398 11.400 -0.533 -0.231 -0.728 -0.533 -0.231 0.168 0.388 0.123 0.434 0.220 + 263.40 11.393 11.413 11.414 -0.667 0.129 -0.719 -0.667 0.129 -0.093 0.480 -0.086 0.490 0.248 + 263.45 11.224 11.242 11.243 -0.630 -0.108 -0.888 -0.630 -0.108 0.095 0.560 0.068 0.599 0.286 + 263.50 11.209 11.240 11.242 -0.832 0.224 -0.904 -0.832 0.224 -0.202 0.752 -0.186 0.780 0.401 + 263.55 11.074 11.095 11.097 -0.682 0.225 -1.039 -0.682 0.225 -0.234 0.709 -0.154 0.798 0.381 + 263.60 11.051 11.051 11.056 0.054 0.319 -1.062 0.054 0.319 -0.339 -0.057 0.017 0.616 0.172 + 263.65 11.111 11.111 11.111 -0.061 -0.003 -1.002 -0.061 -0.003 0.003 0.061 0.000 0.504 0.031 + 263.70 11.488 11.491 11.494 -0.251 -0.288 -0.625 -0.251 -0.288 0.180 0.157 0.072 0.268 0.125 + 263.75 11.262 11.278 11.279 -0.591 -0.156 -0.850 -0.591 -0.156 0.133 0.502 0.092 0.548 0.264 + 263.80 11.218 11.223 11.227 -0.319 -0.300 -0.895 -0.319 -0.300 0.269 0.285 0.096 0.496 0.202 + 263.85 11.222 11.227 11.227 -0.336 -0.004 -0.890 -0.336 -0.004 0.003 0.300 0.001 0.453 0.150 + 263.90 11.495 11.499 11.515 -0.283 -0.604 -0.617 -0.283 -0.604 0.373 0.175 0.171 0.413 0.223 + 263.95 11.457 11.469 11.483 -0.521 -0.567 -0.656 -0.521 -0.567 0.372 0.342 0.296 0.512 0.293 + 264.00 11.511 11.520 11.536 -0.454 -0.612 -0.602 -0.454 -0.612 0.368 0.273 0.278 0.471 0.268 + 264.05 11.718 11.723 11.738 -0.318 -0.591 -0.394 -0.318 -0.591 0.233 0.126 0.188 0.303 0.162 + 264.10 11.533 11.534 11.541 -0.118 -0.416 -0.580 -0.118 -0.416 0.241 0.068 0.049 0.262 0.128 + 264.15 11.480 11.482 11.490 0.227 -0.422 -0.633 0.227 -0.422 0.267 -0.143 -0.096 0.315 0.159 + 264.20 11.195 11.198 11.200 0.263 -0.226 -0.918 0.263 -0.226 0.207 -0.242 -0.059 0.482 0.162 + 264.25 11.164 11.167 11.176 0.240 -0.450 -0.949 0.240 -0.450 0.426 -0.228 -0.108 0.580 0.248 + 264.30 11.220 11.228 11.244 0.436 -0.602 -0.893 0.436 -0.602 0.538 -0.389 -0.262 0.675 0.357 + 264.35 11.319 11.321 11.340 0.207 -0.662 -0.794 0.207 -0.662 0.526 -0.165 -0.137 0.556 0.284 + 264.40 11.325 11.341 11.353 -0.598 -0.521 -0.787 -0.598 -0.521 0.410 0.471 0.312 0.625 0.349 + 264.45 10.955 10.956 10.965 -0.176 -0.436 -1.158 -0.176 -0.436 0.505 0.204 0.077 0.781 0.275 + 264.50 10.899 10.900 10.902 0.136 -0.204 -1.214 0.136 -0.204 0.248 -0.165 -0.028 0.767 0.150 + 264.55 10.916 10.916 10.917 -0.118 0.068 -1.197 -0.118 0.068 -0.081 0.141 -0.008 0.726 0.082 + 264.60 11.393 11.395 11.395 -0.201 -0.020 -0.720 -0.201 -0.020 0.014 0.145 0.004 0.279 0.073 + 264.65 11.393 11.394 11.395 0.132 -0.188 -0.720 0.132 -0.188 0.135 -0.095 -0.025 0.285 0.083 + 264.70 11.259 11.260 11.260 -0.067 0.059 -0.853 -0.067 0.059 -0.051 0.057 -0.004 0.368 0.038 + 264.75 11.192 11.192 11.193 0.004 0.149 -0.920 0.004 0.149 -0.137 -0.003 0.001 0.435 0.069 + 264.80 11.169 11.169 11.176 0.040 -0.370 -0.944 0.040 -0.370 0.349 -0.038 -0.015 0.514 0.176 + 264.85 11.129 11.133 11.166 -0.299 -0.863 -0.984 -0.299 -0.863 0.849 0.294 0.258 0.901 0.467 + 264.90 11.029 11.030 11.062 -0.113 -0.844 -1.084 -0.113 -0.844 0.915 0.122 0.095 0.950 0.464 + 264.95 11.046 11.047 11.078 -0.134 -0.827 -1.067 -0.134 -0.827 0.882 0.143 0.111 0.920 0.450 + 265.00 11.091 11.092 11.104 0.104 -0.510 -1.021 0.104 -0.510 0.521 -0.107 -0.053 0.657 0.267 + 265.05 11.387 11.391 11.391 0.304 -0.041 -0.726 0.304 -0.041 0.030 -0.221 -0.012 0.311 0.112 + 265.10 11.255 11.256 11.261 -0.140 -0.355 -0.858 -0.140 -0.355 0.305 0.120 0.050 0.441 0.166 + 265.15 11.053 11.057 11.060 -0.315 -0.229 -1.060 -0.315 -0.229 0.243 0.334 0.072 0.638 0.210 + 265.20 11.298 11.316 11.316 -0.640 -0.004 -0.815 -0.640 -0.004 0.004 0.522 0.003 0.537 0.261 + 265.25 10.785 10.791 10.792 -0.381 -0.065 -1.328 -0.381 -0.065 0.086 0.506 0.025 0.957 0.257 + 265.30 10.717 10.726 10.732 -0.430 0.349 -1.396 -0.430 0.349 -0.487 0.601 -0.150 1.127 0.394 + 265.35 10.591 10.607 10.619 -0.581 0.517 -1.522 -0.581 0.517 -0.786 0.884 -0.300 1.460 0.610 + 265.40 10.638 10.655 10.662 -0.605 0.384 -1.475 -0.605 0.384 -0.567 0.892 -0.232 1.345 0.541 + 265.45 10.586 10.601 10.601 -0.563 0.072 -1.527 -0.563 0.072 -0.110 0.860 -0.041 1.327 0.434 + 265.50 10.183 10.194 10.196 -0.463 0.208 -1.929 -0.463 0.208 -0.401 0.892 -0.096 1.990 0.491 + 265.55 10.322 10.329 10.329 -0.374 0.024 -1.791 -0.374 0.024 -0.043 0.670 -0.009 1.674 0.336 + 265.60 10.422 10.422 10.427 0.136 0.303 -1.691 0.136 0.303 -0.512 -0.230 0.041 1.485 0.281 + 265.65 10.572 10.573 10.580 0.133 0.373 -1.541 0.133 0.373 -0.575 -0.205 0.050 1.265 0.306 + 265.70 10.716 10.716 10.726 0.048 0.466 -1.397 0.048 0.466 -0.652 -0.067 0.023 1.086 0.328 + 265.75 10.572 10.574 10.588 -0.171 0.556 -1.541 -0.171 0.556 -0.856 0.263 -0.095 1.356 0.450 + 265.80 10.873 10.873 10.884 -0.124 0.487 -1.240 -0.124 0.487 -0.604 0.154 -0.060 0.895 0.313 + 265.85 10.754 10.756 10.761 0.192 0.336 -1.359 0.192 0.336 -0.457 -0.261 0.065 0.998 0.265 + 265.90 10.518 10.522 10.524 0.270 0.236 -1.595 0.270 0.236 -0.376 -0.430 0.064 1.336 0.287 + 265.95 10.572 10.575 10.575 0.251 -0.092 -1.541 0.251 -0.092 0.142 -0.386 -0.023 1.223 0.206 + 266.00 10.685 10.686 10.688 0.172 -0.199 -1.428 0.172 -0.199 0.285 -0.245 -0.034 1.054 0.189 + 266.05 10.621 10.621 10.628 0.101 -0.383 -1.492 0.101 -0.383 0.572 -0.151 -0.039 1.191 0.296 + 266.10 10.555 10.555 10.565 -0.034 -0.446 -1.558 -0.034 -0.446 0.695 0.052 0.015 1.313 0.349 + 266.15 10.761 10.764 10.783 -0.233 -0.642 -1.351 -0.233 -0.642 0.867 0.314 0.149 1.146 0.467 + 266.20 10.541 10.549 10.553 -0.404 -0.271 -1.571 -0.404 -0.271 0.426 0.635 0.109 1.353 0.386 + 266.25 10.394 10.396 10.396 -0.231 0.036 -1.719 -0.231 0.036 -0.061 0.396 -0.008 1.505 0.201 + 266.30 10.424 10.425 10.427 -0.120 0.237 -1.689 -0.120 0.237 -0.400 0.202 -0.028 1.461 0.224 + 266.35 10.188 10.188 10.191 -0.073 0.238 -1.925 -0.073 0.238 -0.458 0.141 -0.017 1.884 0.240 + 266.40 10.209 10.209 10.212 0.038 0.250 -1.904 0.038 0.250 -0.477 -0.073 0.010 1.845 0.241 + 266.45 10.075 10.083 10.084 0.393 0.131 -2.038 0.393 0.131 -0.268 -0.800 0.052 2.162 0.423 + 266.50 10.019 10.047 10.047 0.739 -0.114 -2.093 0.739 -0.114 0.238 -1.546 -0.084 2.470 0.783 + 266.55 10.018 10.048 10.051 0.773 -0.242 -2.095 0.773 -0.242 0.507 -1.620 -0.187 2.523 0.854 + 266.60 9.978 9.993 10.008 0.531 -0.552 -2.134 0.531 -0.552 1.178 -1.134 -0.293 2.571 0.831 + 266.65 10.182 10.189 10.197 0.383 -0.393 -1.931 0.383 -0.393 0.758 -0.739 -0.150 2.015 0.535 + 266.70 10.529 10.537 10.541 0.402 -0.313 -1.584 0.402 -0.313 0.496 -0.637 -0.126 1.384 0.408 + 266.75 10.611 10.613 10.615 0.223 -0.179 -1.502 0.223 -0.179 0.269 -0.335 -0.040 1.168 0.216 + 266.80 10.769 10.769 10.770 -0.076 -0.177 -1.344 -0.076 -0.177 0.238 0.102 0.013 0.922 0.130 + 266.85 10.619 10.619 10.622 0.054 -0.218 -1.494 0.054 -0.218 0.326 -0.081 -0.012 1.141 0.168 + 266.90 10.364 10.368 10.371 0.304 0.240 -1.749 0.304 0.240 -0.420 -0.532 0.073 1.604 0.341 + 266.95 10.137 10.137 10.141 0.141 0.254 -1.976 0.141 0.254 -0.502 -0.279 0.036 1.995 0.288 + 267.00 10.085 10.088 10.091 -0.242 0.246 -2.028 -0.242 0.246 -0.499 0.490 -0.059 2.116 0.351 + 267.05 10.159 10.160 10.167 -0.085 0.386 -1.954 -0.085 0.386 -0.754 0.166 -0.033 1.986 0.386 + 267.10 9.933 9.933 9.934 0.082 0.118 -2.180 0.082 0.118 -0.257 -0.178 0.010 2.387 0.156 + 267.15 9.826 9.829 9.829 -0.229 0.059 -2.286 -0.229 0.059 -0.134 0.525 -0.013 2.642 0.271 + 267.20 9.496 9.498 9.517 -0.220 0.596 -2.617 -0.220 0.596 -1.559 0.575 -0.131 3.626 0.833 + 267.25 9.673 9.673 9.695 -0.115 0.647 -2.440 -0.115 0.647 -1.580 0.279 -0.074 3.194 0.803 + 267.30 9.575 9.575 9.618 -0.015 0.903 -2.538 -0.015 0.903 -2.292 0.039 -0.014 3.628 1.146 + 267.35 9.465 9.466 9.495 0.094 0.742 -2.648 0.094 0.742 -1.964 -0.249 0.070 3.784 0.991 + 267.40 9.672 9.672 9.694 -0.107 0.656 -2.441 -0.107 0.656 -1.601 0.261 -0.070 3.201 0.812 + 267.45 9.564 9.565 9.586 -0.135 0.629 -2.549 -0.135 0.629 -1.605 0.344 -0.085 3.456 0.822 + 267.50 9.301 9.301 9.324 0.037 0.656 -2.812 0.037 0.656 -1.845 -0.104 0.024 4.170 0.924 + 267.55 9.123 9.132 9.174 -0.392 0.875 -2.989 -0.392 0.875 -2.614 1.172 -0.343 4.927 1.443 + 267.60 9.284 9.287 9.329 -0.233 0.877 -2.828 -0.233 0.877 -2.481 0.658 -0.204 4.412 1.287 + 267.65 9.448 9.450 9.470 -0.157 0.611 -2.664 -0.157 0.611 -1.628 0.418 -0.096 3.748 0.842 + 267.70 9.567 9.575 9.593 -0.395 0.592 -2.546 -0.395 0.592 -1.507 1.005 -0.234 3.494 0.914 + 267.75 9.640 9.648 9.673 -0.373 0.702 -2.472 -0.373 0.702 -1.737 0.921 -0.262 3.373 0.992 + 267.80 9.630 9.632 9.639 -0.190 0.363 -2.483 -0.190 0.363 -0.902 0.471 -0.069 3.166 0.510 + 267.85 9.615 9.616 9.627 -0.158 0.456 -2.498 -0.158 0.456 -1.139 0.395 -0.072 3.235 0.604 + 267.90 9.696 9.697 9.706 -0.142 0.413 -2.417 -0.142 0.413 -0.998 0.343 -0.059 3.015 0.528 + 267.95 9.665 9.669 9.713 -0.293 0.923 -2.448 -0.293 0.923 -2.260 0.718 -0.271 3.466 1.193 + 268.00 9.518 9.526 9.553 -0.396 0.722 -2.595 -0.396 0.722 -1.875 1.027 -0.286 3.707 1.078 + 268.05 9.666 9.668 9.698 -0.208 0.760 -2.447 -0.208 0.760 -1.859 0.510 -0.158 3.305 0.967 + 268.10 9.708 9.708 9.717 -0.080 0.428 -2.405 -0.080 0.428 -1.029 0.193 -0.034 2.987 0.524 + 268.15 10.054 10.057 10.104 -0.224 0.972 -2.058 -0.224 0.972 -2.002 0.462 -0.218 2.616 1.033 + 268.20 9.889 9.894 9.949 -0.316 1.038 -2.223 -0.316 1.038 -2.307 0.703 -0.328 3.060 1.217 + 268.25 9.759 9.759 9.818 -0.043 1.075 -2.354 -0.043 1.075 -2.530 0.102 -0.047 3.349 1.266 + 268.30 9.915 9.919 9.923 -0.292 0.250 -2.198 -0.292 0.250 -0.550 0.642 -0.073 2.489 0.424 + 268.35 9.873 9.892 9.902 -0.603 0.454 -2.239 -0.603 0.454 -1.016 1.350 -0.274 2.792 0.856 + 268.40 9.834 9.857 9.887 -0.678 0.766 -2.279 -0.678 0.766 -1.746 1.545 -0.519 3.120 1.194 + 268.45 10.087 10.111 10.127 -0.696 0.568 -2.026 -0.696 0.568 -1.151 1.410 -0.395 2.455 0.931 + 268.50 10.062 10.103 10.124 -0.912 0.650 -2.051 -0.912 0.650 -1.333 1.869 -0.592 2.729 1.185 + 268.55 9.888 9.903 9.921 -0.553 0.589 -2.225 -0.553 0.589 -1.311 1.231 -0.326 2.801 0.914 + 268.60 9.972 9.984 9.991 -0.485 0.375 -2.141 -0.485 0.375 -0.802 1.039 -0.182 2.480 0.662 + 268.65 10.044 10.073 10.082 -0.768 0.419 -2.069 -0.768 0.419 -0.867 1.589 -0.322 2.523 0.919 + 268.70 10.260 10.290 10.296 -0.786 0.341 -1.852 -0.786 0.341 -0.632 1.456 -0.268 2.083 0.805 + 268.75 10.097 10.128 10.139 -0.792 0.455 -2.015 -0.792 0.455 -0.917 1.596 -0.360 2.448 0.938 + 268.80 10.571 10.602 10.615 -0.812 0.525 -1.542 -0.812 0.525 -0.810 1.252 -0.427 1.656 0.775 + 268.85 10.736 10.752 10.754 -0.593 0.186 -1.377 -0.593 0.186 -0.256 0.816 -0.110 1.141 0.431 + 268.90 10.699 10.730 10.756 -0.823 0.748 -1.414 -0.823 0.748 -1.058 1.164 -0.615 1.618 0.844 + 268.95 10.775 10.802 10.813 -0.765 0.482 -1.338 -0.765 0.482 -0.646 1.023 -0.369 1.304 0.632 + 269.00 10.889 10.918 10.918 -0.795 0.104 -1.224 -0.795 0.104 -0.128 0.974 -0.083 1.071 0.493 + 269.05 10.786 10.831 10.841 -0.992 0.472 -1.327 -0.992 0.472 -0.627 1.316 -0.468 1.484 0.766 + 269.10 10.601 10.619 10.638 -0.611 0.630 -1.511 -0.611 0.630 -0.952 0.924 -0.385 1.527 0.691 + 269.15 10.772 10.785 10.807 -0.537 0.681 -1.341 -0.537 0.681 -0.913 0.721 -0.366 1.275 0.610 + 269.20 10.696 10.718 10.733 -0.683 0.574 -1.417 -0.683 0.574 -0.813 0.967 -0.392 1.401 0.661 + 269.25 10.903 10.914 10.950 -0.467 0.894 -1.209 -0.467 0.894 -1.081 0.565 -0.418 1.240 0.645 + 269.30 10.852 10.868 10.892 -0.600 0.713 -1.261 -0.600 0.713 -0.900 0.756 -0.428 1.229 0.625 + 269.35 10.686 10.696 10.724 -0.469 0.773 -1.427 -0.469 0.773 -1.103 0.669 -0.362 1.427 0.670 + 269.40 11.075 11.092 11.141 -0.613 1.049 -1.038 -0.613 1.049 -1.089 0.636 -0.643 1.276 0.708 + 269.45 10.895 10.904 10.940 -0.446 0.888 -1.218 -0.446 0.888 -1.081 0.543 -0.396 1.235 0.636 + 269.50 10.959 10.972 11.006 -0.523 0.864 -1.153 -0.523 0.864 -0.997 0.604 -0.452 1.175 0.625 + 269.55 11.051 11.077 11.105 -0.758 0.794 -1.062 -0.758 0.794 -0.843 0.805 -0.602 1.166 0.656 + 269.60 10.758 10.770 10.778 -0.515 0.429 -1.355 -0.515 0.429 -0.581 0.698 -0.221 1.143 0.467 + 269.65 11.001 11.019 11.026 -0.626 0.410 -1.112 -0.626 0.410 -0.455 0.696 -0.256 0.898 0.435 + 269.70 10.903 10.909 10.914 -0.361 0.315 -1.209 -0.361 0.315 -0.381 0.437 -0.114 0.846 0.295 + 269.75 11.252 11.255 11.257 -0.244 0.223 -0.861 -0.244 0.223 -0.192 0.210 -0.054 0.425 0.145 + 269.80 11.172 11.178 11.178 -0.368 0.123 -0.941 -0.368 0.123 -0.116 0.346 -0.045 0.518 0.184 + 269.85 11.097 11.101 11.101 -0.272 0.119 -1.015 -0.272 0.119 -0.121 0.277 -0.033 0.560 0.152 + 269.90 10.912 10.913 10.917 -0.112 0.311 -1.201 -0.112 0.311 -0.374 0.135 -0.035 0.776 0.200 + 269.95 11.080 11.081 11.092 0.153 0.485 -1.032 0.153 0.485 -0.501 -0.157 0.074 0.662 0.265 + 270.00 11.212 11.215 11.220 0.228 0.345 -0.900 0.228 0.345 -0.311 -0.205 0.079 0.491 0.190 + 270.05 11.302 11.307 11.320 0.353 0.546 -0.811 0.353 0.546 -0.443 -0.286 0.193 0.540 0.281 + 270.10 11.237 11.241 11.262 0.303 0.700 -0.876 0.303 0.700 -0.613 -0.265 0.212 0.674 0.350 + 270.15 11.360 11.360 11.381 0.078 0.686 -0.753 0.078 0.686 -0.517 -0.059 0.054 0.522 0.261 + 270.20 11.374 11.377 11.400 -0.254 0.724 -0.739 -0.254 0.724 -0.535 0.188 -0.184 0.568 0.298 + 270.25 11.145 11.155 11.188 -0.481 0.859 -0.968 -0.481 0.859 -0.832 0.465 -0.413 0.953 0.519 + 270.30 11.064 11.089 11.116 -0.730 0.783 -1.048 -0.730 0.783 -0.821 0.766 -0.572 1.123 0.630 + 270.35 11.160 11.188 11.205 -0.791 0.605 -0.952 -0.791 0.605 -0.576 0.754 -0.479 0.950 0.531 + 270.40 11.258 11.310 11.312 -1.091 0.171 -0.855 -1.091 0.171 -0.146 0.933 -0.186 0.976 0.481 + 270.45 11.387 11.460 11.460 -1.291 0.021 -0.726 -1.291 0.021 -0.015 0.938 -0.027 1.098 0.469 + 270.50 11.538 11.624 11.626 -1.411 0.220 -0.575 -1.411 0.220 -0.127 0.812 -0.311 1.186 0.439 + 270.55 11.684 11.730 11.733 -1.039 0.219 -0.428 -1.039 0.219 -0.094 0.445 -0.227 0.656 0.254 + 270.60 11.546 11.620 11.625 -1.312 0.340 -0.567 -1.312 0.340 -0.193 0.744 -0.446 1.079 0.444 + 270.65 11.408 11.500 11.503 -1.447 0.289 -0.705 -1.447 0.289 -0.204 1.020 -0.419 1.338 0.561 + 270.70 11.122 11.249 11.250 -1.685 0.181 -0.991 -1.685 0.181 -0.179 1.669 -0.305 1.926 0.853 + 270.75 11.246 11.308 11.318 -1.183 0.458 -0.867 -1.183 0.458 -0.397 1.025 -0.542 1.180 0.613 + 270.80 11.265 11.303 11.328 -0.929 0.756 -0.848 -0.929 0.756 -0.641 0.788 -0.702 1.077 0.618 + 270.85 11.085 11.094 11.098 -0.442 0.306 -1.028 -0.442 0.306 -0.314 0.454 -0.135 0.672 0.284 + 270.90 11.194 11.196 11.199 -0.236 0.262 -0.919 -0.236 0.262 -0.241 0.216 -0.062 0.484 0.165 + 270.95 11.754 11.755 11.756 -0.184 0.030 -0.359 -0.184 0.030 -0.011 0.066 -0.005 0.082 0.033 + 271.00 11.566 11.574 11.574 -0.426 0.116 -0.547 -0.426 0.116 -0.063 0.233 -0.049 0.247 0.123 + 271.05 11.216 11.257 11.258 -0.957 0.142 -0.896 -0.957 0.142 -0.127 0.858 -0.136 0.870 0.439 + 271.10 11.330 11.348 11.350 -0.640 0.202 -0.783 -0.640 0.202 -0.158 0.501 -0.129 0.532 0.271 + 271.15 11.445 11.464 11.467 -0.666 -0.246 -0.668 -0.666 -0.246 0.164 0.445 0.164 0.475 0.251 + 271.20 11.779 11.792 11.794 -0.547 -0.247 -0.334 -0.547 -0.247 0.082 0.183 0.135 0.236 0.121 + 271.25 11.774 11.778 11.784 -0.308 -0.365 -0.339 -0.308 -0.365 0.124 0.104 0.112 0.171 0.099 + 271.30 11.886 11.908 11.912 -0.710 -0.332 -0.226 -0.710 -0.332 0.075 0.161 0.236 0.333 0.148 + 271.35 11.802 11.814 11.818 -0.530 -0.283 -0.310 -0.530 -0.283 0.088 0.165 0.150 0.229 0.120 + 271.40 11.726 11.758 11.758 -0.878 0.008 -0.387 -0.878 0.008 -0.003 0.340 -0.007 0.460 0.170 + 271.45 11.955 11.991 11.991 -0.922 0.032 -0.158 -0.922 0.032 -0.005 0.145 -0.029 0.438 0.074 + 271.50 11.636 11.683 11.701 -1.057 0.637 -0.477 -1.057 0.637 -0.304 0.504 -0.673 0.875 0.447 + 271.55 11.606 11.677 11.695 -1.283 0.643 -0.506 -1.283 0.643 -0.326 0.650 -0.825 1.159 0.550 + 271.60 11.414 11.501 11.503 -1.413 0.194 -0.699 -1.413 0.194 -0.136 0.987 -0.274 1.261 0.517 + 271.65 11.209 11.276 11.276 -1.229 -0.002 -0.904 -1.229 -0.002 0.002 1.111 0.003 1.164 0.555 + 271.70 11.080 11.213 11.214 -1.725 0.121 -1.033 -1.725 0.121 -0.125 1.782 -0.208 2.028 0.899 + 271.75 11.114 11.241 11.241 -1.687 0.043 -0.999 -1.687 0.043 -0.043 1.685 -0.072 1.923 0.844 + 271.80 10.946 11.030 11.031 -1.359 -0.127 -1.167 -1.359 -0.127 0.149 1.586 0.173 1.613 0.801 + 271.85 11.090 11.249 11.254 -1.888 -0.339 -1.023 -1.888 -0.339 0.347 1.931 0.640 2.362 1.032 + 271.90 10.649 10.772 10.772 -1.626 -0.057 -1.464 -1.626 -0.057 0.084 2.381 0.093 2.395 1.192 + 271.95 10.864 10.962 10.964 -1.466 0.194 -1.249 -1.466 0.194 -0.242 1.830 -0.284 1.873 0.934 + 272.00 11.066 11.143 11.153 -1.313 0.469 -1.047 -1.313 0.469 -0.491 1.375 -0.616 1.521 0.792 + 272.05 10.749 10.776 10.803 -0.754 0.770 -1.364 -0.754 0.770 -1.050 1.028 -0.580 1.510 0.790 + 272.10 11.003 11.038 11.057 -0.873 0.650 -1.110 -0.873 0.650 -0.721 0.969 -0.567 1.208 0.667 + 272.15 11.114 11.141 11.174 -0.785 0.861 -0.999 -0.785 0.861 -0.860 0.784 -0.676 1.178 0.673 + 272.20 11.234 11.255 11.270 -0.678 0.586 -0.879 -0.678 0.586 -0.514 0.596 -0.397 0.787 0.441 + 272.25 11.594 11.606 11.609 -0.540 0.244 -0.519 -0.540 0.244 -0.127 0.280 -0.132 0.310 0.167 + 272.30 11.579 11.618 11.627 -0.943 0.465 -0.534 -0.943 0.465 -0.248 0.503 -0.439 0.696 0.356 + 272.35 11.491 11.526 11.559 -0.887 0.878 -0.621 -0.887 0.878 -0.546 0.551 -0.779 0.972 0.550 + 272.40 11.367 11.422 11.457 -1.114 0.902 -0.746 -1.114 0.902 -0.673 0.831 -1.005 1.305 0.734 + 272.45 11.176 11.228 11.248 -1.083 0.664 -0.937 -1.083 0.664 -0.622 1.015 -0.719 1.246 0.695 + 272.50 11.090 11.119 11.126 -0.793 0.409 -1.023 -0.793 0.409 -0.418 0.811 -0.324 0.921 0.484 + 272.55 10.924 10.936 10.955 -0.522 0.636 -1.189 -0.522 0.636 -0.756 0.620 -0.332 1.045 0.516 + 272.60 11.161 11.197 11.212 -0.888 0.592 -0.952 -0.888 0.592 -0.563 0.845 -0.525 1.022 0.572 + 272.65 11.116 11.163 11.217 -1.019 1.095 -0.996 -1.019 1.095 -1.091 1.015 -1.116 1.615 0.931 + 272.70 11.224 11.264 11.288 -0.943 0.729 -0.888 -0.943 0.729 -0.647 0.838 -0.688 1.105 0.631 + 272.75 11.401 11.416 11.440 -0.577 0.742 -0.712 -0.577 0.742 -0.528 0.411 -0.428 0.695 0.397 + 272.80 11.609 11.626 11.638 -0.635 0.526 -0.504 -0.635 0.526 -0.265 0.320 -0.334 0.467 0.266 + 272.85 11.499 11.525 11.541 -0.778 0.602 -0.614 -0.778 0.602 -0.369 0.478 -0.468 0.672 0.382 + 272.90 11.561 11.586 11.592 -0.748 0.382 -0.551 -0.748 0.382 -0.211 0.413 -0.286 0.505 0.272 + 272.95 11.190 11.212 11.220 -0.702 0.415 -0.923 -0.702 0.415 -0.383 0.648 -0.292 0.759 0.404 + 273.00 11.074 11.086 11.115 -0.532 0.805 -1.039 -0.532 0.805 -0.836 0.552 -0.428 1.005 0.545 + 273.05 10.985 11.009 11.028 -0.727 0.652 -1.128 -0.727 0.652 -0.736 0.820 -0.474 1.113 0.600 + 273.10 10.933 10.941 10.978 -0.410 0.899 -1.179 -0.410 0.899 -1.060 0.484 -0.369 1.184 0.611 + 273.15 11.077 11.079 11.130 -0.217 1.059 -1.036 -0.217 1.059 -1.097 0.224 -0.229 1.121 0.572 + 273.20 10.909 10.919 10.984 -0.454 1.191 -1.204 -0.454 1.191 -1.433 0.546 -0.541 1.537 0.813 + 273.25 10.764 10.778 10.841 -0.530 1.175 -1.348 -0.530 1.175 -1.585 0.715 -0.623 1.740 0.923 + 273.30 10.693 10.719 10.806 -0.734 1.372 -1.419 -0.734 1.372 -1.948 1.042 -1.007 2.218 1.214 + 273.35 10.524 10.555 10.690 -0.803 1.694 -1.589 -0.803 1.694 -2.691 1.276 -1.360 3.019 1.637 + 273.40 10.864 10.889 11.051 -0.733 1.886 -1.248 -0.733 1.886 -2.355 0.915 -1.382 2.827 1.440 + 273.45 11.242 11.244 11.425 -0.248 2.027 -0.871 -0.248 2.027 -1.766 0.216 -0.503 2.464 0.924 + 273.50 11.594 11.598 11.763 -0.318 1.961 -0.519 -0.318 1.961 -1.018 0.165 -0.624 2.108 0.602 + 273.55 11.603 11.621 11.790 -0.638 1.992 -0.510 -0.638 1.992 -1.015 0.325 -1.270 2.317 0.829 + 273.60 11.509 11.523 11.692 -0.577 1.975 -0.604 -0.577 1.975 -1.193 0.348 -1.139 2.300 0.843 + 273.65 11.187 11.211 11.308 -0.733 1.474 -0.926 -0.733 1.474 -1.364 0.679 -1.080 1.783 0.934 + 273.70 10.933 10.951 11.038 -0.630 1.386 -1.180 -0.630 1.386 -1.635 0.743 -0.873 1.855 0.998 + 273.75 10.941 10.950 11.109 -0.435 1.876 -1.172 -0.435 1.876 -2.198 0.509 -0.815 2.540 1.199 + 273.80 10.881 10.888 11.049 -0.413 1.875 -1.232 -0.413 1.875 -2.310 0.509 -0.775 2.602 1.245 + 273.85 11.007 11.013 11.172 -0.345 1.880 -1.106 -0.345 1.880 -2.078 0.382 -0.649 2.438 1.105 + 273.90 10.945 10.947 11.077 -0.198 1.697 -1.168 -0.198 1.697 -1.982 0.231 -0.335 2.141 1.011 + 273.95 10.771 10.779 10.859 -0.419 1.317 -1.342 -0.419 1.317 -1.767 0.563 -0.552 1.856 0.968 + 274.00 11.109 11.123 11.218 -0.552 1.455 -1.004 -0.552 1.455 -1.461 0.555 -0.804 1.715 0.879 + 274.05 11.051 11.060 11.226 -0.442 1.925 -1.062 -0.442 1.925 -2.045 0.470 -0.851 2.515 1.132 + 274.10 10.942 10.946 11.168 -0.290 2.214 -1.171 -0.290 2.214 -2.593 0.339 -0.642 3.179 1.346 + 274.15 10.739 10.739 10.949 -0.049 2.137 -1.374 -0.049 2.137 -2.937 0.068 -0.106 3.230 1.470 + 274.20 10.250 10.250 10.440 -0.078 1.984 -1.863 -0.078 1.984 -3.695 0.146 -0.155 3.706 1.851 + 274.25 10.413 10.416 10.624 -0.250 2.091 -1.700 -0.250 2.091 -3.555 0.425 -0.523 3.662 1.809 + 274.30 10.437 10.437 10.608 0.046 1.900 -1.676 0.046 1.900 -3.185 -0.077 0.087 3.211 1.594 + 274.35 10.603 10.604 10.742 0.126 1.716 -1.509 0.126 1.716 -2.590 -0.191 0.217 2.619 1.303 + 274.40 10.324 10.325 10.414 0.151 1.357 -1.788 0.151 1.357 -2.427 -0.270 0.205 2.531 1.225 + 274.45 9.939 9.945 10.038 0.348 1.363 -2.174 0.348 1.363 -2.963 -0.756 0.474 3.352 1.547 + 274.50 9.723 9.724 9.783 0.129 1.072 -2.390 0.129 1.072 -2.563 -0.309 0.139 3.439 1.293 + 274.55 9.850 9.850 9.883 0.005 0.802 -2.263 0.005 0.802 -1.815 -0.011 0.004 2.882 0.907 + 274.60 9.669 9.669 9.707 0.009 0.863 -2.444 0.009 0.863 -2.109 -0.021 0.008 3.359 1.055 + 274.65 9.785 9.785 9.829 -0.077 0.925 -2.328 -0.077 0.925 -2.154 0.178 -0.071 3.141 1.081 + 274.70 9.882 9.883 9.943 -0.143 1.088 -2.231 -0.143 1.088 -2.426 0.320 -0.156 3.090 1.226 + 274.75 9.892 9.898 9.932 -0.337 0.826 -2.221 -0.337 0.826 -1.835 0.748 -0.278 2.865 1.001 + 274.80 9.546 9.552 9.556 -0.342 0.268 -2.567 -0.342 0.268 -0.688 0.877 -0.092 3.389 0.559 + 274.85 9.735 9.735 9.743 -0.032 0.406 -2.378 -0.032 0.406 -0.965 0.075 -0.013 2.910 0.484 + 274.90 9.801 9.803 9.835 -0.212 0.790 -2.312 -0.212 0.790 -1.826 0.490 -0.167 3.007 0.949 + 274.95 9.948 9.956 10.001 -0.384 0.947 -2.165 -0.384 0.947 -2.049 0.831 -0.363 2.864 1.121 + 275.00 10.001 10.002 10.039 -0.134 0.860 -2.111 -0.134 0.860 -1.815 0.282 -0.115 2.607 0.920 + 275.05 10.006 10.010 10.031 -0.277 0.648 -2.107 -0.277 0.648 -1.366 0.584 -0.180 2.468 0.748 + 275.10 10.204 10.230 10.240 -0.729 0.450 -1.909 -0.729 0.450 -0.860 1.391 -0.328 2.189 0.834 + 275.15 10.385 10.444 10.454 -1.100 0.466 -1.727 -1.100 0.466 -0.804 1.900 -0.512 2.205 1.063 + 275.20 10.543 10.585 10.600 -0.934 0.562 -1.569 -0.934 0.562 -0.883 1.466 -0.525 1.826 0.895 + 275.25 10.265 10.283 10.287 -0.596 0.307 -1.847 -0.596 0.307 -0.567 1.101 -0.183 1.931 0.626 + 275.30 10.061 10.094 10.095 -0.824 -0.088 -2.052 -0.824 -0.088 0.180 1.690 0.072 2.449 0.851 + 275.35 10.116 10.144 10.144 -0.750 -0.055 -1.997 -0.750 -0.055 0.110 1.498 0.041 2.276 0.751 + 275.40 10.205 10.219 10.220 -0.531 0.162 -1.908 -0.531 0.162 -0.310 1.012 -0.086 1.974 0.531 + 275.45 10.586 10.596 10.596 -0.448 0.031 -1.527 -0.448 0.031 -0.048 0.684 -0.014 1.266 0.343 + 275.50 10.886 10.893 10.895 -0.390 0.204 -1.226 -0.390 0.204 -0.250 0.479 -0.080 0.849 0.273 + 275.55 10.944 10.950 10.952 -0.363 0.201 -1.169 -0.363 0.201 -0.235 0.425 -0.073 0.769 0.245 + 275.60 10.771 10.786 10.786 -0.569 0.031 -1.342 -0.569 0.031 -0.042 0.764 -0.018 1.063 0.383 + 275.65 10.781 10.796 10.796 -0.565 -0.104 -1.332 -0.565 -0.104 0.138 0.753 0.059 1.052 0.384 + 275.70 10.595 10.604 10.607 -0.430 -0.230 -1.517 -0.430 -0.230 0.349 0.653 0.099 1.270 0.374 + 275.75 10.825 10.827 10.830 -0.203 -0.270 -1.288 -0.203 -0.270 0.348 0.261 0.055 0.886 0.219 + 275.80 10.645 10.647 10.648 -0.206 -0.173 -1.468 -0.206 -0.173 0.253 0.303 0.036 1.114 0.198 + 275.85 10.511 10.512 10.513 -0.132 -0.175 -1.602 -0.132 -0.175 0.280 0.211 0.023 1.307 0.176 + 275.90 10.283 10.286 10.291 -0.262 -0.309 -1.830 -0.262 -0.309 0.566 0.479 0.081 1.756 0.373 + 275.95 10.658 10.664 10.671 -0.358 -0.394 -1.455 -0.358 -0.394 0.574 0.521 0.141 1.200 0.394 + 276.00 10.734 10.746 10.751 -0.524 -0.307 -1.379 -0.524 -0.307 0.423 0.722 0.161 1.135 0.426 + 276.05 10.659 10.676 10.693 -0.603 -0.608 -1.454 -0.603 -0.608 0.884 0.876 0.366 1.424 0.649 + 276.10 10.839 10.842 10.851 -0.257 -0.433 -1.273 -0.257 -0.433 0.551 0.328 0.111 0.937 0.325 + 276.15 10.922 10.925 10.946 -0.239 -0.689 -1.191 -0.239 -0.689 0.821 0.285 0.165 0.975 0.442 + 276.20 11.118 11.121 11.140 -0.222 -0.652 -0.995 -0.222 -0.652 0.649 0.221 0.145 0.732 0.350 + 276.25 10.948 10.950 10.969 -0.217 -0.646 -1.165 -0.217 -0.646 0.752 0.253 0.140 0.911 0.403 + 276.30 11.022 11.022 11.043 -0.025 -0.674 -1.091 -0.025 -0.674 0.735 0.027 0.017 0.823 0.368 + 276.35 11.041 11.051 11.075 -0.475 -0.722 -1.072 -0.475 -0.722 0.774 0.510 0.343 0.949 0.494 + 276.40 11.121 11.156 11.186 -0.885 -0.813 -0.992 -0.885 -0.813 0.806 0.878 0.720 1.214 0.696 + 276.45 10.909 10.942 10.951 -0.844 -0.438 -1.204 -0.844 -0.438 0.527 1.016 0.370 1.177 0.602 + 276.50 10.985 10.995 11.043 -0.455 -1.029 -1.128 -0.455 -1.029 1.160 0.514 0.469 1.269 0.676 + 276.55 10.824 10.827 10.880 -0.242 -1.072 -1.289 -0.242 -1.072 1.382 0.312 0.259 1.434 0.720 + 276.60 10.655 10.656 10.711 -0.112 -1.085 -1.457 -0.112 -1.085 1.582 0.164 0.122 1.657 0.797 + 276.65 10.593 10.593 10.703 -0.016 -1.528 -1.520 -0.016 -1.528 2.322 0.025 0.025 2.322 1.161 + 276.70 10.477 10.477 10.598 0.031 -1.598 -1.636 0.031 -1.598 2.614 -0.050 -0.049 2.615 1.307 + 276.75 10.490 10.490 10.595 0.020 -1.482 -1.622 0.020 -1.482 2.404 -0.032 -0.029 2.414 1.202 + 276.80 10.679 10.683 10.759 -0.268 -1.275 -1.433 -0.268 -1.275 1.827 0.384 0.341 1.876 0.949 + 276.85 10.607 10.614 10.693 -0.375 -1.298 -1.506 -0.375 -1.298 1.954 0.564 0.487 2.046 1.046 + 276.90 10.892 10.892 10.948 -0.099 -1.106 -1.221 -0.099 -1.106 1.351 0.121 0.110 1.363 0.680 + 276.95 10.991 10.991 11.026 -0.041 -0.872 -1.122 -0.041 -0.872 0.978 0.046 0.036 1.010 0.490 + 277.00 11.048 11.049 11.086 0.175 -0.901 -1.065 0.175 -0.901 0.960 -0.187 -0.158 0.988 0.495 + 277.05 11.039 11.041 11.119 0.216 -1.314 -1.074 0.216 -1.314 1.411 -0.232 -0.284 1.463 0.729 + 277.10 10.648 10.651 10.704 0.233 -1.059 -1.464 0.233 -1.059 1.551 -0.341 -0.247 1.660 0.804 + 277.15 10.636 10.642 10.656 0.343 -0.542 -1.477 0.343 -0.542 0.800 -0.506 -0.186 1.296 0.482 + 277.20 10.647 10.647 10.691 0.083 -0.963 -1.466 0.083 -0.963 1.412 -0.122 -0.080 1.542 0.710 + 277.25 11.145 11.159 11.188 0.552 -0.813 -0.968 0.552 -0.813 0.787 -0.534 -0.448 0.951 0.526 + 277.30 10.951 10.957 10.966 0.356 -0.461 -1.162 0.356 -0.461 0.536 -0.413 -0.164 0.845 0.348 + 277.35 11.257 11.262 11.288 0.335 -0.767 -0.856 0.335 -0.767 0.656 -0.287 -0.257 0.717 0.381 + 277.40 11.121 11.125 11.147 0.275 -0.708 -0.992 0.275 -0.708 0.702 -0.273 -0.195 0.780 0.389 + 277.45 10.934 10.940 10.967 0.364 -0.762 -1.179 0.364 -0.762 0.898 -0.429 -0.277 1.051 0.516 + 277.50 10.520 10.520 10.551 -0.028 -0.803 -1.593 -0.028 -0.803 1.279 0.045 0.023 1.591 0.640 + 277.55 10.383 10.383 10.406 -0.011 -0.688 -1.730 -0.011 -0.688 1.191 0.019 0.008 1.733 0.595 + 277.60 10.670 10.674 10.698 -0.297 -0.711 -1.443 -0.297 -0.711 1.026 0.429 0.211 1.338 0.566 + 277.65 10.432 10.445 10.458 -0.521 -0.521 -1.681 -0.521 -0.521 0.875 0.876 0.271 1.684 0.634 + 277.70 10.237 10.238 10.238 -0.048 0.020 -1.875 -0.048 0.020 -0.037 0.090 -0.001 1.760 0.049 + 277.75 10.223 10.224 10.227 -0.127 -0.259 -1.890 -0.127 -0.259 0.490 0.241 0.033 1.828 0.273 + 277.80 10.214 10.218 10.228 0.272 -0.450 -1.898 0.272 -0.450 0.855 -0.516 -0.122 1.940 0.503 + 277.85 10.352 10.353 10.367 0.190 -0.524 -1.761 0.190 -0.524 0.923 -0.335 -0.100 1.706 0.494 + 277.90 10.613 10.616 10.623 0.252 -0.379 -1.500 0.252 -0.379 0.569 -0.377 -0.095 1.228 0.345 + 277.95 10.717 10.718 10.737 0.124 -0.650 -1.396 0.124 -0.650 0.907 -0.174 -0.081 1.193 0.464 + 278.00 10.843 10.843 10.844 0.055 -0.174 -1.270 0.055 -0.174 0.221 -0.070 -0.010 0.823 0.116 + 278.05 11.179 11.180 11.182 0.119 0.196 -0.934 0.119 0.196 -0.183 -0.111 0.023 0.462 0.108 + 278.10 11.280 11.285 11.285 0.302 0.112 -0.832 0.302 0.112 -0.093 -0.251 0.034 0.398 0.135 + 278.15 11.301 11.302 11.302 0.166 0.093 -0.812 0.166 0.093 -0.075 -0.135 0.015 0.348 0.078 + 278.20 11.377 11.379 11.379 0.235 -0.028 -0.736 0.235 -0.028 0.021 -0.173 -0.007 0.299 0.087 + 278.25 11.500 11.506 11.506 0.369 -0.017 -0.613 0.369 -0.017 0.010 -0.226 -0.006 0.256 0.113 + 278.30 11.023 11.034 11.038 0.503 0.275 -1.090 0.503 0.275 -0.300 -0.548 0.138 0.758 0.320 + 278.35 11.080 11.086 11.087 0.344 0.139 -1.032 0.344 0.139 -0.143 -0.356 0.048 0.602 0.193 + 278.40 11.348 11.357 11.363 0.462 0.342 -0.765 0.462 0.342 -0.261 -0.353 0.158 0.457 0.233 + 278.45 11.245 11.256 11.277 0.499 0.687 -0.867 0.499 0.687 -0.595 -0.433 0.343 0.736 0.406 + 278.50 11.214 11.224 11.234 0.459 0.482 -0.899 0.459 0.482 -0.433 -0.413 0.221 0.625 0.319 + 278.55 11.338 11.347 11.353 0.444 0.377 -0.775 0.444 0.377 -0.292 -0.344 0.167 0.469 0.240 + 278.60 11.330 11.344 11.345 0.562 0.134 -0.783 0.562 0.134 -0.105 -0.440 0.075 0.473 0.229 + 278.65 11.368 11.388 11.393 0.684 0.310 -0.745 0.684 0.310 -0.231 -0.509 0.212 0.559 0.299 + 278.70 11.471 11.491 11.507 0.684 0.604 -0.642 0.684 0.604 -0.388 -0.439 0.413 0.622 0.358 + 278.75 11.419 11.423 11.427 0.288 0.294 -0.694 0.288 0.294 -0.204 -0.199 0.085 0.325 0.149 + 278.80 11.466 11.469 11.469 0.265 -0.084 -0.647 0.265 -0.084 0.054 -0.172 -0.022 0.248 0.091 + 278.85 11.511 11.523 11.527 0.528 -0.306 -0.602 0.528 -0.306 0.184 -0.318 -0.162 0.368 0.201 + 278.90 11.504 11.537 11.549 0.875 -0.518 -0.609 0.875 -0.518 0.316 -0.533 -0.453 0.702 0.384 + 278.95 11.703 11.740 11.768 0.923 -0.822 -0.410 0.923 -0.822 0.336 -0.378 -0.758 0.847 0.456 + 279.00 11.962 11.977 12.001 0.587 -0.754 -0.150 0.587 -0.754 0.113 -0.088 -0.443 0.468 0.233 + 279.05 11.800 11.841 11.867 0.984 -0.790 -0.313 0.984 -0.790 0.248 -0.308 -0.778 0.846 0.436 + 279.10 11.525 11.563 11.576 0.932 -0.548 -0.588 0.932 -0.548 0.322 -0.547 -0.510 0.757 0.407 + 279.15 11.718 11.735 11.768 0.627 -0.884 -0.395 0.627 -0.884 0.349 -0.247 -0.555 0.666 0.350 + 279.20 11.778 11.808 11.828 0.839 -0.689 -0.335 0.839 -0.689 0.231 -0.281 -0.578 0.645 0.341 + 279.25 11.563 11.596 11.611 0.877 -0.595 -0.550 0.877 -0.595 0.327 -0.482 -0.522 0.712 0.391 + 279.30 11.595 11.622 11.628 0.796 -0.381 -0.518 0.796 -0.381 0.197 -0.413 -0.303 0.524 0.274 + 279.35 11.695 11.703 11.715 0.431 -0.521 -0.417 0.431 -0.521 0.218 -0.180 -0.224 0.316 0.180 + 279.40 11.589 11.591 11.599 0.199 -0.434 -0.524 0.199 -0.434 0.227 -0.104 -0.086 0.251 0.132 + 279.45 11.553 11.553 11.560 0.124 -0.408 -0.560 0.124 -0.408 0.229 -0.069 -0.050 0.248 0.122 + 279.50 11.713 11.716 11.725 0.291 -0.449 -0.400 0.291 -0.449 0.180 -0.116 -0.131 0.223 0.125 + 279.55 11.702 11.702 11.712 0.116 -0.469 -0.411 0.116 -0.469 0.193 -0.048 -0.055 0.201 0.103 + 279.60 11.751 11.752 11.774 -0.148 -0.724 -0.362 -0.148 -0.724 0.262 0.054 0.107 0.338 0.144 + 279.65 12.264 12.264 12.297 -0.102 -0.901 0.151 -0.102 -0.901 -0.136 -0.015 0.092 0.422 0.082 + 279.70 12.105 12.106 12.116 0.095 -0.514 -0.008 0.095 -0.514 0.004 -0.001 -0.049 0.136 0.025 + 279.75 12.027 12.027 12.047 0.008 -0.687 -0.086 0.008 -0.687 0.059 -0.001 -0.006 0.240 0.030 + 279.80 12.175 12.179 12.216 -0.315 -0.959 0.062 -0.315 -0.959 -0.059 -0.019 0.302 0.512 0.154 + 279.85 12.221 12.224 12.296 -0.276 -1.324 0.108 -0.276 -1.324 -0.143 -0.030 0.365 0.921 0.197 + 279.90 12.343 12.343 12.419 -0.033 -1.368 0.230 -0.033 -1.368 -0.315 -0.008 0.045 0.963 0.159 + 279.95 12.136 12.136 12.179 -0.018 -1.022 0.023 -0.018 -1.022 -0.024 -0.000 0.018 0.523 0.015 + 280.00 12.312 12.312 12.356 0.017 -1.035 0.199 0.017 -1.035 -0.206 0.003 -0.018 0.556 0.104 + 280.05 12.117 12.117 12.142 0.109 -0.764 0.004 0.109 -0.764 -0.003 0.000 -0.083 0.298 0.042 + 280.10 12.129 12.137 12.147 0.428 -0.514 0.016 0.428 -0.514 -0.008 0.007 -0.220 0.224 0.110 + 280.15 12.105 12.107 12.116 0.213 -0.454 -0.007 0.213 -0.454 0.003 -0.002 -0.097 0.126 0.048 + 280.20 12.081 12.083 12.090 -0.206 -0.420 -0.031 -0.206 -0.420 0.013 0.006 0.086 0.110 0.044 + 280.25 12.031 12.031 12.039 -0.079 -0.438 -0.082 -0.079 -0.438 0.036 0.007 0.035 0.102 0.025 + 280.30 12.004 12.005 12.016 0.180 -0.498 -0.109 0.180 -0.498 0.054 -0.020 -0.090 0.146 0.053 + 280.35 11.851 11.851 11.863 0.096 -0.531 -0.262 0.096 -0.531 0.139 -0.025 -0.051 0.180 0.075 + 280.40 11.981 11.983 11.996 0.214 -0.566 -0.132 0.214 -0.566 0.075 -0.028 -0.121 0.192 0.073 + 280.45 12.003 12.005 12.014 0.228 -0.452 -0.110 0.228 -0.452 0.050 -0.025 -0.103 0.134 0.059 + 280.50 11.978 11.978 11.979 -0.035 -0.195 -0.135 -0.035 -0.195 0.026 0.005 0.007 0.029 0.014 + 280.55 12.162 12.162 12.167 -0.103 -0.344 0.049 -0.103 -0.344 -0.017 -0.005 0.035 0.066 0.020 + 280.60 12.265 12.267 12.271 -0.215 -0.327 0.152 -0.215 -0.327 -0.050 -0.033 0.070 0.088 0.046 + 280.65 12.062 12.064 12.068 -0.211 -0.321 -0.050 -0.211 -0.321 0.016 0.011 0.068 0.075 0.035 + 280.70 12.102 12.103 12.112 -0.043 -0.480 -0.010 -0.043 -0.480 0.005 0.000 0.021 0.116 0.011 + 280.75 12.137 12.138 12.143 0.169 -0.326 0.024 0.169 -0.326 -0.008 0.004 -0.055 0.068 0.028 + 280.80 11.848 11.848 11.857 -0.058 -0.471 -0.265 -0.058 -0.471 0.125 0.015 0.027 0.148 0.064 + 280.85 12.021 12.022 12.052 0.175 -0.852 -0.092 0.175 -0.852 0.079 -0.016 -0.149 0.383 0.085 + 280.90 11.990 12.002 12.041 0.517 -0.973 -0.122 0.517 -0.973 0.119 -0.063 -0.503 0.614 0.260 + 280.95 11.852 11.862 11.891 0.490 -0.830 -0.261 0.490 -0.830 0.217 -0.128 -0.407 0.498 0.239 + 281.00 12.079 12.083 12.106 0.335 -0.739 -0.034 0.335 -0.739 0.025 -0.011 -0.247 0.329 0.124 + 281.05 12.122 12.122 12.153 -0.105 -0.869 0.009 -0.105 -0.869 -0.008 -0.001 0.091 0.383 0.046 + 281.10 11.828 11.828 11.841 0.054 -0.559 -0.285 0.054 -0.559 0.159 -0.015 -0.030 0.198 0.081 + 281.15 11.786 11.786 11.815 0.075 -0.833 -0.327 0.075 -0.833 0.272 -0.024 -0.062 0.403 0.140 + 281.20 11.642 11.645 11.656 0.293 -0.496 -0.471 0.293 -0.496 0.233 -0.138 -0.145 0.277 0.154 + 281.25 11.629 11.640 11.668 0.496 -0.807 -0.484 0.496 -0.807 0.390 -0.240 -0.401 0.566 0.304 + 281.30 11.671 11.679 11.728 0.417 -1.071 -0.442 0.417 -1.071 0.473 -0.184 -0.447 0.758 0.338 + 281.35 11.962 11.968 12.011 0.359 -1.017 -0.150 0.359 -1.017 0.153 -0.054 -0.365 0.593 0.200 + 281.40 11.970 11.997 12.039 0.798 -1.006 -0.142 0.798 -1.006 0.143 -0.114 -0.802 0.834 0.411 + 281.45 11.806 11.821 11.869 0.602 -1.071 -0.307 0.602 -1.071 0.329 -0.185 -0.645 0.802 0.374 + 281.50 11.619 11.626 11.682 0.391 -1.139 -0.493 0.391 -1.139 0.562 -0.193 -0.446 0.847 0.372 + 281.55 11.902 11.912 11.959 0.489 -1.061 -0.211 0.489 -1.061 0.224 -0.103 -0.519 0.705 0.287 + 281.60 11.867 11.871 11.904 0.307 -0.876 -0.245 0.307 -0.876 0.215 -0.075 -0.269 0.461 0.176 + 281.65 11.756 11.757 11.770 0.190 -0.542 -0.357 0.190 -0.542 0.193 -0.068 -0.103 0.228 0.115 + 281.70 11.689 11.689 11.711 -0.086 -0.714 -0.424 -0.086 -0.714 0.303 0.036 0.061 0.349 0.156 + 281.75 11.647 11.649 11.665 0.247 -0.609 -0.466 0.247 -0.609 0.284 -0.115 -0.151 0.325 0.171 + 281.80 11.433 11.438 11.447 0.334 -0.451 -0.680 0.334 -0.451 0.306 -0.227 -0.150 0.388 0.205 + 281.85 11.643 11.646 11.655 0.259 -0.442 -0.469 0.259 -0.442 0.207 -0.122 -0.114 0.241 0.133 + 281.90 11.824 11.824 11.830 -0.092 -0.367 -0.289 -0.092 -0.367 0.106 0.027 0.034 0.113 0.057 + 281.95 11.625 11.625 11.639 0.016 -0.569 -0.488 0.016 -0.569 0.277 -0.008 -0.009 0.281 0.139 + 282.00 11.687 11.689 11.711 -0.192 -0.719 -0.426 -0.192 -0.719 0.306 0.082 0.138 0.368 0.173 + 282.05 11.698 11.698 11.736 0.072 -0.940 -0.415 0.072 -0.940 0.390 -0.030 -0.068 0.530 0.198 + 282.10 11.874 11.874 11.928 0.109 -1.129 -0.239 0.109 -1.129 0.270 -0.026 -0.123 0.671 0.149 + 282.15 12.046 12.046 12.105 0.073 -1.196 -0.067 0.073 -1.196 0.080 -0.005 -0.087 0.720 0.059 + 282.20 12.157 12.158 12.227 0.187 -1.298 0.044 0.187 -1.298 -0.057 0.008 -0.242 0.861 0.125 + 282.25 12.266 12.268 12.329 0.249 -1.225 0.153 0.249 -1.225 -0.187 0.038 -0.305 0.793 0.180 + 282.30 12.601 12.618 12.687 0.661 -1.321 0.488 0.661 -1.321 -0.645 0.323 -0.873 1.210 0.566 + 282.35 12.762 12.770 12.827 0.446 -1.212 0.649 0.446 -1.212 -0.787 0.289 -0.540 1.045 0.499 + 282.40 12.572 12.577 12.638 0.360 -1.241 0.459 0.360 -1.241 -0.570 0.165 -0.447 0.940 0.371 + 282.45 12.796 12.804 12.844 0.448 -1.019 0.683 0.448 -1.019 -0.696 0.306 -0.456 0.852 0.443 + 282.50 12.851 12.856 12.909 0.366 -1.161 0.738 0.366 -1.161 -0.857 0.270 -0.425 1.013 0.497 + 282.55 12.629 12.629 12.692 0.136 -1.256 0.516 0.136 -1.256 -0.648 0.070 -0.171 0.931 0.337 + 282.60 13.030 13.031 13.112 0.169 -1.456 0.917 0.169 -1.456 -1.335 0.155 -0.246 1.494 0.683 + 282.65 13.444 13.444 13.513 0.014 -1.365 1.331 0.014 -1.365 -1.817 0.019 -0.019 1.818 0.909 + 282.70 13.221 13.221 13.277 -0.056 -1.211 1.108 -0.056 -1.211 -1.342 -0.062 0.068 1.349 0.673 + 282.75 13.093 13.094 13.128 0.051 -0.947 0.981 0.051 -0.947 -0.929 0.050 -0.049 0.930 0.466 + 282.80 12.825 12.825 12.843 0.070 -0.687 0.712 0.070 -0.687 -0.489 0.050 -0.048 0.491 0.247 + 282.85 12.744 12.745 12.793 0.148 -1.107 0.631 0.148 -1.107 -0.699 0.093 -0.164 0.823 0.362 + 282.90 12.935 12.937 13.023 0.217 -1.496 0.822 0.217 -1.496 -1.230 0.179 -0.325 1.480 0.642 + 282.95 13.156 13.157 13.221 -0.099 -1.304 1.043 -0.099 -1.304 -1.361 -0.104 0.129 1.400 0.685 + 283.00 12.885 12.885 12.952 0.042 -1.313 0.773 0.042 -1.313 -1.014 0.032 -0.055 1.161 0.508 + 283.05 12.400 12.400 12.462 0.022 -1.242 0.287 0.022 -1.242 -0.357 0.006 -0.028 0.813 0.179 + 283.10 12.164 12.164 12.219 0.035 -1.159 0.052 0.035 -1.159 -0.060 0.002 -0.040 0.673 0.036 + 283.15 12.287 12.292 12.328 0.336 -0.941 0.174 0.336 -0.941 -0.164 0.059 -0.316 0.514 0.180 + 283.20 12.088 12.098 12.119 0.489 -0.725 -0.025 0.489 -0.725 0.018 -0.012 -0.355 0.383 0.178 + 283.25 11.811 11.828 11.838 0.623 -0.490 -0.302 0.623 -0.490 0.148 -0.188 -0.306 0.360 0.194 + 283.30 12.037 12.066 12.075 0.832 -0.484 -0.076 0.832 -0.484 0.037 -0.063 -0.402 0.466 0.205 + 283.35 11.903 11.929 11.936 0.790 -0.428 -0.210 0.790 -0.428 0.090 -0.166 -0.338 0.426 0.194 + 283.40 12.283 12.298 12.302 0.609 -0.296 0.170 0.609 -0.296 -0.050 0.104 -0.180 0.244 0.107 + 283.45 12.425 12.441 12.441 0.645 -0.065 0.312 0.645 -0.065 -0.020 0.201 -0.042 0.259 0.103 + 283.50 12.248 12.264 12.265 0.638 -0.073 0.135 0.638 -0.073 -0.010 0.086 -0.047 0.215 0.049 + 283.55 12.092 12.110 12.110 0.658 0.001 -0.020 0.658 0.001 -0.000 -0.013 0.001 0.217 0.007 + 283.60 11.980 11.997 11.998 0.631 -0.130 -0.133 0.631 -0.130 0.017 -0.084 -0.082 0.217 0.059 + 283.65 11.729 11.776 11.777 1.057 -0.122 -0.384 1.057 -0.122 0.047 -0.406 -0.129 0.640 0.214 + 283.70 11.999 12.011 12.015 0.555 -0.291 -0.114 0.555 -0.291 0.033 -0.063 -0.161 0.203 0.088 + 283.75 12.255 12.269 12.275 0.590 -0.388 0.142 0.590 -0.388 -0.055 0.084 -0.229 0.259 0.125 + 283.80 12.208 12.237 12.241 0.835 -0.323 0.095 0.835 -0.323 -0.031 0.080 -0.270 0.406 0.142 + 283.85 12.279 12.310 12.310 0.865 -0.045 0.166 0.865 -0.045 -0.007 0.144 -0.039 0.389 0.075 + 283.90 12.362 12.387 12.389 0.783 -0.223 0.249 0.783 -0.223 -0.056 0.195 -0.175 0.362 0.134 + 283.95 12.249 12.298 12.302 1.101 -0.289 0.136 1.101 -0.289 -0.039 0.150 -0.318 0.657 0.177 + 284.00 12.340 12.385 12.387 1.058 -0.213 0.227 1.058 -0.213 -0.048 0.240 -0.225 0.608 0.166 + 284.05 12.230 12.257 12.264 0.816 -0.399 0.117 0.816 -0.399 -0.047 0.095 -0.326 0.420 0.171 + 284.10 12.495 12.534 12.539 0.988 -0.347 0.382 0.988 -0.347 -0.133 0.378 -0.342 0.621 0.263 + 284.15 12.389 12.415 12.418 0.812 -0.275 0.276 0.812 -0.275 -0.076 0.224 -0.223 0.405 0.163 + 284.20 12.477 12.495 12.495 0.669 -0.076 0.364 0.669 -0.076 -0.028 0.244 -0.051 0.293 0.125 + 284.25 12.487 12.501 12.501 0.587 0.083 0.374 0.587 0.083 0.031 0.220 0.049 0.246 0.114 + 284.30 12.519 12.527 12.531 0.468 0.295 0.406 0.468 0.295 0.120 0.190 0.138 0.235 0.132 + 284.35 12.106 12.125 12.131 0.686 0.354 -0.007 0.686 0.354 -0.002 -0.005 0.243 0.298 0.121 + 284.40 12.073 12.093 12.094 0.683 0.202 -0.040 0.683 0.202 -0.008 -0.027 0.138 0.254 0.070 + 284.45 12.178 12.195 12.195 0.637 0.020 0.065 0.637 0.020 0.001 0.042 0.013 0.205 0.022 + 284.50 12.415 12.424 12.425 0.467 -0.141 0.302 0.467 -0.141 -0.043 0.141 -0.066 0.165 0.081 + 284.55 12.434 12.434 12.434 0.094 0.078 0.321 0.094 0.078 0.025 0.030 0.007 0.059 0.020 + 284.60 12.465 12.467 12.469 -0.194 0.248 0.353 -0.194 0.248 0.087 -0.068 -0.048 0.112 0.060 + 284.65 12.416 12.419 12.423 -0.284 0.316 0.303 -0.284 0.316 0.096 -0.086 -0.090 0.136 0.078 + 284.70 12.392 12.392 12.409 -0.121 0.648 0.279 -0.121 0.648 0.181 -0.034 -0.079 0.256 0.100 + 284.75 12.702 12.702 12.709 0.009 0.400 0.589 0.009 0.400 0.236 0.005 0.004 0.254 0.118 + 284.80 12.553 12.553 12.566 0.095 0.556 0.440 0.095 0.556 0.245 0.042 0.053 0.256 0.127 + 284.85 12.564 12.564 12.566 -0.035 0.254 0.451 -0.035 0.254 0.114 -0.016 -0.009 0.134 0.058 + 284.90 12.837 12.837 12.839 -0.119 0.165 0.724 -0.119 0.165 0.119 -0.086 -0.020 0.283 0.074 + 284.95 12.843 12.844 12.844 -0.166 -0.074 0.730 -0.166 -0.074 -0.054 -0.121 0.012 0.283 0.066 + 285.00 12.647 12.652 12.652 -0.338 0.026 0.534 -0.338 0.026 0.014 -0.181 -0.009 0.200 0.091 + 285.05 12.722 12.724 12.725 -0.227 -0.132 0.609 -0.227 -0.132 -0.081 -0.138 0.030 0.220 0.081 + 285.10 12.620 12.621 12.623 0.134 -0.216 0.507 0.134 -0.216 -0.110 0.068 -0.029 0.161 0.066 + 285.15 12.254 12.255 12.257 0.121 0.224 0.141 0.121 0.224 0.032 0.017 0.027 0.042 0.023 + 285.20 12.321 12.323 12.323 0.219 0.105 0.208 0.219 0.105 0.022 0.046 0.023 0.051 0.028 + 285.25 12.057 12.059 12.070 0.243 0.515 -0.056 0.243 0.515 -0.029 -0.014 0.125 0.164 0.065 + 285.30 11.742 11.745 11.775 0.300 0.838 -0.371 0.300 0.838 -0.311 -0.111 0.251 0.465 0.208 + 285.35 11.561 11.571 11.616 0.470 1.022 -0.552 0.470 1.022 -0.564 -0.259 0.480 0.784 0.392 + 285.40 11.613 11.621 11.648 0.433 0.788 -0.499 0.433 0.788 -0.394 -0.216 0.341 0.529 0.282 + 285.45 11.379 11.386 11.395 0.399 0.448 -0.734 0.399 0.448 -0.329 -0.293 0.179 0.449 0.238 + 285.50 11.094 11.105 11.129 0.495 0.730 -1.019 0.495 0.730 -0.744 -0.505 0.362 0.908 0.484 + 285.55 11.252 11.268 11.300 0.591 0.848 -0.861 0.591 0.848 -0.730 -0.509 0.501 0.905 0.511 + 285.60 11.397 11.411 11.426 0.557 0.584 -0.716 0.557 0.584 -0.418 -0.398 0.325 0.581 0.331 + 285.65 11.515 11.528 11.530 0.554 0.184 -0.598 0.554 0.184 -0.110 -0.331 0.102 0.349 0.182 + 285.70 11.535 11.546 11.546 0.498 -0.106 -0.578 0.498 -0.106 0.062 -0.288 -0.053 0.296 0.149 + 285.75 11.548 11.557 11.558 0.464 -0.100 -0.565 0.464 -0.100 0.057 -0.262 -0.046 0.272 0.136 + 285.80 11.463 11.471 11.475 0.440 0.283 -0.650 0.440 0.283 -0.184 -0.286 0.124 0.348 0.181 + 285.85 11.364 11.369 11.377 0.349 0.417 -0.749 0.349 0.417 -0.312 -0.261 0.146 0.428 0.216 + 285.90 11.385 11.388 11.394 0.235 0.365 -0.728 0.235 0.365 -0.266 -0.171 0.086 0.359 0.164 + 285.95 11.483 11.484 11.485 0.118 0.197 -0.630 0.118 0.197 -0.124 -0.074 0.023 0.225 0.073 + 286.00 11.823 11.832 11.835 0.469 0.281 -0.290 0.469 0.281 -0.081 -0.136 0.132 0.191 0.103 + 286.05 12.000 12.001 12.001 0.149 0.014 -0.113 0.149 0.014 -0.002 -0.017 0.002 0.017 0.008 + 286.10 12.035 12.037 12.039 0.187 0.241 -0.078 0.187 0.241 -0.019 -0.014 0.045 0.050 0.025 + 286.15 11.962 11.962 11.963 0.002 0.117 -0.151 0.002 0.117 -0.018 -0.000 0.000 0.018 0.009 + 286.20 11.915 11.915 11.918 0.029 -0.274 -0.198 0.029 -0.274 0.054 -0.006 -0.008 0.057 0.027 + 286.25 11.512 11.512 11.514 0.062 0.194 -0.601 0.062 0.194 -0.117 -0.038 0.012 0.201 0.062 + 286.30 11.353 11.359 11.360 0.363 0.152 -0.760 0.363 0.152 -0.115 -0.276 0.055 0.366 0.152 + 286.35 11.400 11.404 11.410 0.314 0.363 -0.713 0.314 0.363 -0.259 -0.224 0.114 0.369 0.180 + 286.40 11.714 11.717 11.724 0.297 0.382 -0.399 0.297 0.382 -0.152 -0.118 0.113 0.197 0.112 + 286.45 11.570 11.581 11.583 0.511 0.177 -0.543 0.511 0.177 -0.096 -0.278 0.090 0.294 0.154 + 286.50 11.465 11.488 11.489 0.715 0.156 -0.647 0.715 0.156 -0.101 -0.463 0.112 0.477 0.243 + 286.55 11.545 11.563 11.564 0.658 0.164 -0.568 0.658 0.164 -0.093 -0.374 0.108 0.391 0.200 + 286.60 11.232 11.242 11.260 0.460 0.651 -0.881 0.460 0.651 -0.573 -0.405 0.300 0.706 0.382 + 286.65 11.033 11.046 11.071 0.542 0.748 -1.080 0.542 0.748 -0.808 -0.585 0.405 1.010 0.538 + 286.70 10.746 10.755 10.777 0.443 0.694 -1.367 0.443 0.694 -0.949 -0.606 0.308 1.274 0.584 + 286.75 11.043 11.047 11.060 0.288 0.532 -1.070 0.288 0.532 -0.569 -0.309 0.153 0.755 0.332 + 286.80 11.147 11.151 11.157 0.272 0.391 -0.965 0.272 0.391 -0.377 -0.263 0.106 0.579 0.236 + 286.85 11.162 11.168 11.176 0.355 0.413 -0.951 0.355 0.413 -0.392 -0.337 0.147 0.600 0.269 + 286.90 11.216 11.232 11.246 0.581 0.569 -0.896 0.581 0.569 -0.510 -0.521 0.331 0.733 0.400 + 286.95 11.056 11.074 11.082 0.645 0.395 -1.057 0.645 0.395 -0.418 -0.682 0.255 0.845 0.420 + 287.00 10.922 10.928 10.929 0.351 0.139 -1.190 0.351 0.139 -0.165 -0.417 0.049 0.780 0.226 + 287.05 11.114 11.129 11.131 0.580 0.233 -0.999 0.580 0.233 -0.233 -0.579 0.135 0.694 0.319 + 287.10 11.036 11.054 11.073 0.627 0.651 -1.076 0.627 0.651 -0.701 -0.675 0.408 0.988 0.528 + 287.15 11.056 11.078 11.090 0.694 0.524 -1.057 0.694 0.524 -0.554 -0.734 0.364 0.937 0.494 + 287.20 11.163 11.194 11.219 0.841 0.741 -0.950 0.841 0.741 -0.704 -0.799 0.624 1.080 0.617 + 287.25 11.208 11.225 11.239 0.617 0.554 -0.905 0.617 0.554 -0.501 -0.558 0.341 0.753 0.412 + 287.30 11.224 11.244 11.260 0.667 0.596 -0.889 0.667 0.596 -0.530 -0.593 0.398 0.795 0.445 + 287.35 11.177 11.208 11.226 0.831 0.636 -0.936 0.831 0.636 -0.595 -0.777 0.528 0.985 0.556 + 287.40 11.384 11.396 11.423 0.529 0.782 -0.729 0.529 0.782 -0.570 -0.386 0.414 0.711 0.401 + 287.45 11.332 11.342 11.360 0.457 0.650 -0.780 0.457 0.650 -0.507 -0.357 0.297 0.620 0.344 + 287.50 11.378 11.384 11.410 0.370 0.771 -0.735 0.370 0.771 -0.566 -0.272 0.285 0.636 0.345 + 287.55 11.433 11.433 11.449 0.071 0.602 -0.680 0.071 0.602 -0.409 -0.048 0.043 0.414 0.207 + 287.60 11.370 11.371 11.372 -0.157 0.175 -0.743 -0.157 0.175 -0.130 0.117 -0.028 0.304 0.089 + 287.65 11.264 11.265 11.265 -0.118 0.044 -0.849 -0.118 0.044 -0.037 0.100 -0.005 0.368 0.053 + 287.70 11.613 11.625 11.626 -0.519 0.173 -0.499 -0.519 0.173 -0.087 0.259 -0.090 0.274 0.144 + 287.75 11.608 11.635 11.639 -0.800 -0.300 -0.505 -0.800 -0.300 0.151 0.404 0.240 0.492 0.247 + 287.80 11.869 11.879 11.880 -0.487 0.202 -0.244 -0.487 0.202 -0.049 0.119 -0.098 0.169 0.081 + 287.85 11.689 11.692 11.703 -0.277 0.498 -0.424 -0.277 0.498 -0.211 0.117 -0.138 0.252 0.139 + 287.90 11.464 11.476 11.482 -0.521 0.392 -0.649 -0.521 0.392 -0.254 0.338 -0.204 0.423 0.235 + 287.95 11.366 11.367 11.378 -0.180 0.482 -0.747 -0.180 0.482 -0.360 0.134 -0.087 0.411 0.197 + 288.00 11.408 11.408 11.416 0.049 0.418 -0.705 0.049 0.418 -0.295 -0.035 0.021 0.337 0.149 + 288.05 10.948 10.952 10.967 0.308 0.569 -1.165 0.308 0.569 -0.662 -0.358 0.175 0.887 0.386 + 288.10 11.065 11.074 11.085 0.448 0.487 -1.048 0.448 0.487 -0.510 -0.469 0.218 0.768 0.363 + 288.15 10.767 10.768 10.787 0.125 0.642 -1.346 0.125 0.642 -0.864 -0.168 0.080 1.119 0.442 + 288.20 11.051 11.051 11.085 0.030 0.866 -1.062 0.030 0.866 -0.920 -0.032 0.026 0.939 0.460 + 288.25 11.219 11.219 11.252 0.052 0.860 -0.893 0.052 0.860 -0.768 -0.046 0.044 0.770 0.385 + 288.30 11.205 11.207 11.222 -0.218 0.580 -0.908 -0.218 0.580 -0.526 0.198 -0.126 0.604 0.288 + 288.35 11.507 11.515 11.536 0.434 0.695 -0.606 0.434 0.695 -0.421 -0.263 0.302 0.519 0.290 + 288.40 11.671 11.672 11.676 0.191 0.276 -0.442 0.191 0.276 -0.122 -0.084 0.053 0.154 0.079 + 288.45 11.581 11.581 11.581 0.073 0.094 -0.532 0.073 0.094 -0.050 -0.039 0.007 0.149 0.032 + 288.50 11.390 11.392 11.396 0.236 0.316 -0.723 0.236 0.316 -0.228 -0.170 0.074 0.339 0.147 + 288.55 11.438 11.438 11.441 0.033 0.290 -0.675 0.033 0.290 -0.196 -0.022 0.010 0.271 0.099 + 288.60 11.433 11.433 11.436 -0.006 0.274 -0.680 -0.006 0.274 -0.187 0.004 -0.002 0.269 0.093 + 288.65 11.207 11.211 11.214 -0.312 0.252 -0.906 -0.312 0.252 -0.228 0.283 -0.079 0.491 0.186 + 288.70 11.359 11.359 11.363 -0.005 0.296 -0.754 -0.005 0.296 -0.223 0.004 -0.001 0.328 0.112 + 288.75 11.405 11.410 11.437 0.330 0.790 -0.707 0.330 0.790 -0.559 -0.234 0.261 0.617 0.330 + 288.80 11.285 11.294 11.320 0.436 0.775 -0.827 0.436 0.775 -0.641 -0.360 0.337 0.737 0.405 + 288.85 11.198 11.205 11.229 0.390 0.736 -0.915 0.390 0.736 -0.673 -0.357 0.287 0.766 0.407 + 288.90 11.187 11.188 11.199 -0.161 0.497 -0.926 -0.161 0.497 -0.460 0.149 -0.080 0.565 0.245 + 288.95 11.117 11.117 11.131 -0.054 0.541 -0.996 -0.054 0.541 -0.539 0.054 -0.029 0.644 0.271 + 289.00 11.230 11.232 11.250 0.205 0.643 -0.883 0.205 0.643 -0.568 -0.181 0.132 0.618 0.305 + 289.05 11.151 11.152 11.176 -0.120 0.741 -0.962 -0.120 0.741 -0.713 0.115 -0.089 0.744 0.364 + 289.10 11.396 11.399 11.412 -0.290 0.529 -0.717 -0.290 0.529 -0.379 0.208 -0.153 0.439 0.229 + 289.15 11.481 11.484 11.491 -0.265 0.401 -0.632 -0.265 0.401 -0.253 0.167 -0.106 0.315 0.161 + 289.20 11.580 11.586 11.594 -0.378 0.431 -0.533 -0.378 0.431 -0.229 0.202 -0.163 0.306 0.173 + 289.25 11.487 11.487 11.498 0.036 0.507 -0.626 0.036 0.507 -0.318 -0.022 0.018 0.325 0.159 + 289.30 11.438 11.444 11.451 -0.366 0.420 -0.675 -0.366 0.420 -0.283 0.247 -0.153 0.383 0.203 + 289.35 11.176 11.182 11.204 -0.361 0.707 -0.937 -0.361 0.707 -0.662 0.338 -0.255 0.754 0.393 + 289.40 11.117 11.117 11.166 -0.003 1.046 -0.996 -0.003 1.046 -1.042 0.003 -0.003 1.043 0.521 + 289.45 11.307 11.307 11.359 0.098 1.087 -0.806 0.098 1.087 -0.876 -0.079 0.107 0.920 0.443 + 289.50 10.934 10.934 11.000 -0.070 1.200 -1.179 -0.070 1.200 -1.415 0.082 -0.084 1.417 0.710 + 289.55 11.050 11.050 11.121 -0.044 1.250 -1.063 -0.044 1.250 -1.329 0.047 -0.055 1.347 0.665 + 289.60 11.285 11.287 11.367 -0.217 1.343 -0.828 -0.217 1.343 -1.112 0.180 -0.292 1.268 0.582 + 289.65 11.604 11.607 11.690 -0.296 1.384 -0.509 -0.296 1.384 -0.705 0.151 -0.410 1.131 0.414 + 289.70 11.587 11.588 11.679 0.156 1.459 -0.526 0.156 1.459 -0.768 -0.082 0.227 1.215 0.402 + 289.75 11.189 11.189 11.291 0.103 1.511 -0.924 0.103 1.511 -1.396 -0.095 0.156 1.573 0.704 + 289.80 11.264 11.264 11.370 -0.002 1.546 -0.849 -0.002 1.546 -1.312 0.002 -0.003 1.555 0.656 + 289.85 11.550 11.551 11.611 -0.144 1.173 -0.562 -0.144 1.173 -0.659 0.081 -0.169 0.856 0.343 + 289.90 11.517 11.517 11.566 0.086 1.064 -0.596 0.086 1.064 -0.634 -0.051 0.091 0.747 0.321 + 289.95 11.584 11.586 11.646 0.223 1.175 -0.529 0.223 1.175 -0.621 -0.118 0.262 0.855 0.342 + 290.00 11.477 11.480 11.508 -0.258 0.802 -0.636 -0.258 0.802 -0.510 0.164 -0.207 0.557 0.287 + 290.05 11.414 11.416 11.444 -0.234 0.801 -0.699 -0.234 0.801 -0.560 0.163 -0.187 0.592 0.306 + 290.10 11.855 11.859 11.878 -0.305 0.688 -0.258 -0.305 0.688 -0.178 0.079 -0.210 0.316 0.143 + 290.15 11.657 11.665 11.696 -0.424 0.850 -0.455 -0.424 0.850 -0.387 0.193 -0.360 0.555 0.281 + 290.20 12.000 12.007 12.036 -0.400 0.830 -0.113 -0.400 0.830 -0.093 0.045 -0.332 0.431 0.174 + 290.25 11.639 11.645 11.661 -0.383 0.617 -0.474 -0.383 0.617 -0.292 0.182 -0.236 0.376 0.209 + 290.30 11.667 11.667 11.681 0.096 0.560 -0.446 0.096 0.560 -0.249 -0.043 0.053 0.261 0.129 + 290.35 11.821 11.822 11.855 0.170 0.873 -0.292 0.170 0.873 -0.255 -0.050 0.148 0.438 0.149 + 290.40 11.886 11.891 11.949 0.335 1.175 -0.227 0.335 1.175 -0.266 -0.076 0.394 0.772 0.241 + 290.45 11.773 11.773 11.823 0.088 1.090 -0.340 0.088 1.090 -0.371 -0.030 0.096 0.656 0.192 + 290.50 11.695 11.696 11.774 0.150 1.351 -0.417 0.150 1.351 -0.564 -0.063 0.203 1.011 0.301 + 290.55 11.853 11.853 11.906 0.031 1.123 -0.260 0.031 1.123 -0.292 -0.008 0.035 0.665 0.147 + 290.60 11.662 11.664 11.769 -0.190 1.569 -0.451 -0.190 1.569 -0.707 0.086 -0.298 1.350 0.386 + 290.65 11.538 11.540 11.655 -0.184 1.636 -0.575 -0.184 1.636 -0.940 0.106 -0.301 1.521 0.497 + 290.70 11.551 11.556 11.655 -0.337 1.516 -0.562 -0.337 1.516 -0.851 0.189 -0.511 1.364 0.505 + 290.75 11.690 11.696 11.731 -0.379 0.907 -0.423 -0.379 0.907 -0.384 0.160 -0.344 0.572 0.270 + 290.80 11.790 11.799 11.832 -0.466 0.886 -0.323 -0.466 0.886 -0.286 0.151 -0.413 0.553 0.262 + 290.85 11.843 11.848 11.923 -0.362 1.328 -0.270 -0.362 1.328 -0.358 0.098 -0.481 0.984 0.304 + 290.90 11.818 11.830 11.960 -0.533 1.757 -0.294 -0.533 1.757 -0.517 0.157 -0.937 1.729 0.541 + 290.95 11.768 11.775 11.880 -0.385 1.581 -0.344 -0.385 1.581 -0.545 0.133 -0.609 1.384 0.414 + 291.00 11.859 11.860 11.974 -0.184 1.650 -0.254 -0.184 1.650 -0.419 0.047 -0.303 1.411 0.260 + 291.05 12.221 12.221 12.348 0.089 1.765 0.108 0.089 1.765 0.190 0.010 0.157 1.568 0.124 + 291.10 12.167 12.170 12.264 -0.297 1.513 0.054 -0.297 1.513 0.081 -0.016 -0.449 1.191 0.228 + 291.15 12.462 12.462 12.537 0.018 1.367 0.350 0.018 1.367 0.478 0.006 0.024 0.995 0.239 + 291.20 12.515 12.521 12.562 0.396 1.012 0.402 0.396 1.012 0.407 0.159 0.401 0.672 0.297 + 291.25 12.353 12.354 12.408 0.153 1.156 0.240 0.153 1.156 0.277 0.037 0.177 0.708 0.165 + 291.30 11.901 11.901 11.967 0.036 1.257 -0.212 0.036 1.257 -0.266 -0.008 0.046 0.813 0.135 + 291.35 12.208 12.208 12.266 -0.031 1.183 0.096 -0.031 1.183 0.113 -0.003 -0.036 0.705 0.059 + 291.40 12.254 12.255 12.319 0.079 1.253 0.142 0.079 1.253 0.177 0.011 0.099 0.798 0.102 + 291.45 12.759 12.759 12.813 0.024 1.175 0.646 0.024 1.175 0.759 0.015 0.028 0.900 0.380 + 291.50 12.633 12.634 12.682 -0.162 1.102 0.520 -0.162 1.102 0.573 -0.084 -0.179 0.756 0.303 + 291.55 12.465 12.465 12.505 0.007 0.999 0.352 0.007 0.999 0.352 0.002 0.007 0.561 0.176 + 291.60 11.997 11.998 12.041 -0.140 1.014 -0.116 -0.140 1.014 -0.117 0.016 -0.142 0.531 0.092 + 291.65 12.338 12.342 12.406 -0.325 1.257 0.225 -0.325 1.257 0.282 -0.073 -0.408 0.868 0.251 + 291.70 12.318 12.319 12.423 -0.139 1.603 0.205 -0.139 1.603 0.329 -0.029 -0.223 1.316 0.199 + 291.75 12.265 12.266 12.365 0.048 1.567 0.153 0.048 1.567 0.239 0.007 0.075 1.240 0.125 + 291.80 12.373 12.374 12.449 -0.153 1.366 0.260 -0.153 1.366 0.355 -0.040 -0.209 0.978 0.207 + 291.85 12.268 12.268 12.321 -0.003 1.142 0.155 -0.003 1.142 0.177 -0.000 -0.003 0.664 0.089 + 291.90 11.980 11.981 12.060 0.203 1.379 -0.133 0.203 1.379 -0.184 -0.027 0.280 0.980 0.168 + 291.95 11.841 11.841 11.878 0.040 0.937 -0.272 0.040 0.937 -0.255 -0.011 0.037 0.477 0.129 + 292.00 11.827 11.828 11.847 -0.017 0.678 -0.285 -0.017 0.678 -0.194 0.005 -0.012 0.271 0.097 + 292.05 12.023 12.023 12.056 0.014 0.883 -0.089 0.014 0.883 -0.079 -0.001 0.012 0.394 0.040 + 292.10 11.812 11.814 11.876 -0.200 1.213 -0.301 -0.200 1.213 -0.365 0.060 -0.243 0.801 0.221 + 292.15 11.928 11.936 11.982 -0.437 1.054 -0.185 -0.437 1.054 -0.195 0.081 -0.461 0.668 0.253 + 292.20 12.101 12.105 12.117 -0.315 0.535 -0.012 -0.315 0.535 -0.006 0.004 -0.168 0.193 0.084 + 292.25 11.982 11.983 11.994 -0.172 0.500 -0.131 -0.172 0.500 -0.065 0.022 -0.086 0.148 0.055 + 292.30 11.885 11.885 11.897 -0.033 0.545 -0.228 -0.033 0.545 -0.124 0.008 -0.018 0.175 0.063 + 292.35 12.070 12.070 12.087 -0.106 0.631 -0.043 -0.106 0.631 -0.027 0.005 -0.067 0.206 0.036 + 292.40 12.008 12.016 12.026 -0.444 0.487 -0.105 -0.444 0.487 -0.051 0.047 -0.216 0.223 0.114 + 292.45 11.788 11.813 11.823 -0.775 0.477 -0.325 -0.775 0.477 -0.155 0.252 -0.370 0.467 0.237 + 292.50 12.001 12.045 12.065 -1.018 0.704 -0.111 -1.018 0.704 -0.078 0.113 -0.717 0.772 0.365 + 292.55 12.163 12.227 12.243 -1.248 0.623 0.050 -1.248 0.623 0.031 -0.063 -0.778 0.974 0.391 + 292.60 12.477 12.512 12.516 -0.944 0.307 0.364 -0.944 0.307 0.112 -0.343 -0.289 0.559 0.231 + 292.65 12.732 12.769 12.777 -0.972 0.461 0.619 -0.972 0.461 0.286 -0.602 -0.449 0.770 0.401 + 292.70 12.791 12.850 12.852 -1.233 0.207 0.678 -1.233 0.207 0.140 -0.836 -0.255 1.011 0.443 + 292.75 12.805 12.853 12.858 -1.107 0.366 0.692 -1.107 0.366 0.253 -0.766 -0.405 0.919 0.452 + 292.80 12.641 12.651 12.656 -0.514 0.366 0.528 -0.514 0.366 0.193 -0.271 -0.188 0.338 0.191 + 292.85 12.537 12.544 12.546 -0.436 0.211 0.424 -0.436 0.211 0.089 -0.185 -0.092 0.207 0.112 + 292.90 13.015 13.023 13.038 -0.458 0.607 0.903 -0.458 0.607 0.548 -0.413 -0.278 0.696 0.370 + 292.95 12.935 12.960 12.979 -0.803 0.707 0.822 -0.803 0.707 0.581 -0.660 -0.568 0.910 0.523 + 293.00 12.723 12.756 12.762 -0.926 0.389 0.610 -0.926 0.389 0.237 -0.565 -0.360 0.691 0.355 + 293.05 12.850 12.884 12.887 -0.927 0.288 0.738 -0.927 0.288 0.213 -0.684 -0.267 0.743 0.382 + 293.10 12.589 12.625 12.640 -0.958 0.605 0.476 -0.958 0.605 0.288 -0.456 -0.580 0.755 0.396 + 293.15 12.738 12.790 12.807 -1.154 0.659 0.625 -1.154 0.659 0.412 -0.721 -0.760 1.078 0.563 + 293.20 12.652 12.693 12.721 -1.014 0.843 0.540 -1.014 0.843 0.455 -0.547 -0.855 1.015 0.556 + 293.25 12.710 12.740 12.781 -0.866 1.020 0.598 -0.866 1.020 0.610 -0.518 -0.884 1.074 0.596 + 293.30 13.069 13.090 13.155 -0.745 1.305 0.956 -0.745 1.305 1.247 -0.712 -0.972 1.586 0.867 + 293.35 12.757 12.784 12.840 -0.827 1.195 0.644 -0.827 1.195 0.770 -0.533 -0.989 1.264 0.681 + 293.40 12.490 12.514 12.533 -0.768 0.691 0.377 -0.768 0.691 0.261 -0.290 -0.530 0.605 0.329 + 293.45 12.541 12.558 12.586 -0.657 0.837 0.428 -0.657 0.837 0.358 -0.281 -0.550 0.658 0.357 + 293.50 12.599 12.635 12.674 -0.945 0.995 0.487 -0.945 0.995 0.484 -0.460 -0.940 1.060 0.577 + 293.55 12.686 12.715 12.739 -0.855 0.784 0.573 -0.855 0.784 0.449 -0.490 -0.671 0.837 0.472 + 293.60 12.659 12.668 12.705 -0.462 0.973 0.547 -0.462 0.973 0.532 -0.253 -0.450 0.730 0.370 + 293.65 12.457 12.457 12.504 -0.109 1.079 0.344 -0.109 1.079 0.371 -0.038 -0.118 0.647 0.196 + 293.70 12.530 12.530 12.593 -0.036 1.253 0.417 -0.036 1.253 0.523 -0.015 -0.046 0.873 0.262 + 293.75 12.652 12.654 12.746 -0.249 1.526 0.539 -0.249 1.526 0.823 -0.134 -0.380 1.341 0.458 + 293.80 12.656 12.659 12.743 -0.277 1.461 0.543 -0.277 1.461 0.794 -0.151 -0.405 1.253 0.452 + 293.85 12.750 12.752 12.856 -0.208 1.637 0.637 -0.208 1.637 1.043 -0.132 -0.340 1.565 0.553 + 293.90 12.987 12.988 13.144 -0.120 2.017 0.875 -0.120 2.017 1.764 -0.105 -0.241 2.423 0.892 + 293.95 13.261 13.266 13.434 -0.347 2.118 1.149 -0.347 2.118 2.433 -0.398 -0.735 2.963 1.286 + 294.00 12.791 12.792 12.921 -0.145 1.823 0.678 -0.145 1.823 1.236 -0.098 -0.264 1.902 0.634 + 294.05 12.611 12.611 12.733 -0.084 1.758 0.498 -0.084 1.758 0.875 -0.042 -0.147 1.672 0.444 + 294.10 12.574 12.576 12.663 -0.236 1.481 0.461 -0.236 1.481 0.683 -0.109 -0.349 1.231 0.387 + 294.15 12.562 12.564 12.656 -0.202 1.527 0.450 -0.202 1.527 0.686 -0.091 -0.309 1.287 0.379 + 294.20 12.504 12.504 12.577 -0.132 1.349 0.391 -0.132 1.349 0.528 -0.051 -0.178 0.996 0.280 + 294.25 12.553 12.553 12.628 -0.011 1.367 0.441 -0.011 1.367 0.602 -0.005 -0.015 1.032 0.301 + 294.30 12.799 12.799 12.844 -0.025 1.080 0.686 -0.025 1.080 0.740 -0.017 -0.027 0.818 0.371 + 294.35 12.872 12.875 12.929 -0.250 1.187 0.759 -0.250 1.187 0.902 -0.190 -0.297 1.025 0.484 + 294.40 12.868 12.873 12.901 -0.358 0.854 0.755 -0.358 0.854 0.645 -0.271 -0.306 0.714 0.382 + 294.45 12.969 12.976 13.010 -0.432 0.947 0.856 -0.432 0.947 0.811 -0.370 -0.409 0.908 0.490 + 294.50 13.183 13.201 13.223 -0.678 0.769 1.070 -0.678 0.769 0.824 -0.726 -0.522 1.099 0.608 + 294.55 13.095 13.102 13.122 -0.415 0.726 0.982 -0.415 0.726 0.713 -0.407 -0.301 0.832 0.437 + 294.60 12.986 13.004 13.028 -0.689 0.778 0.873 -0.689 0.778 0.679 -0.602 -0.536 0.921 0.527 + 294.65 12.773 12.779 12.807 -0.386 0.845 0.660 -0.386 0.845 0.558 -0.255 -0.326 0.649 0.347 + 294.70 12.831 12.837 12.885 -0.384 1.112 0.718 -0.384 1.112 0.798 -0.276 -0.427 0.950 0.473 + 294.75 12.560 12.570 12.605 -0.522 0.931 0.447 -0.522 0.931 0.416 -0.233 -0.486 0.670 0.341 + 294.80 12.380 12.390 12.464 -0.477 1.358 0.268 -0.477 1.358 0.363 -0.128 -0.647 1.071 0.377 + 294.85 12.606 12.613 12.699 -0.424 1.481 0.493 -0.424 1.481 0.730 -0.209 -0.627 1.307 0.492 + 294.90 12.706 12.707 12.766 -0.139 1.229 0.594 -0.139 1.229 0.729 -0.083 -0.171 0.941 0.377 + 294.95 12.445 12.452 12.496 -0.443 1.037 0.332 -0.443 1.037 0.344 -0.147 -0.460 0.691 0.296 + 295.00 12.393 12.403 12.447 -0.502 1.047 0.280 -0.502 1.047 0.293 -0.141 -0.526 0.713 0.309 + 295.05 12.289 12.300 12.346 -0.528 1.057 0.176 -0.528 1.057 0.186 -0.093 -0.558 0.713 0.298 + 295.10 12.472 12.484 12.506 -0.555 0.743 0.359 -0.555 0.743 0.267 -0.199 -0.412 0.494 0.265 + 295.15 12.476 12.478 12.507 -0.224 0.848 0.364 -0.224 0.848 0.308 -0.082 -0.190 0.450 0.186 + 295.20 12.320 12.322 12.344 -0.242 0.734 0.207 -0.242 0.734 0.152 -0.050 -0.178 0.320 0.119 + 295.25 12.261 12.262 12.287 -0.093 0.795 0.148 -0.093 0.795 0.118 -0.014 -0.074 0.331 0.070 + 295.30 12.493 12.494 12.506 0.168 0.541 0.380 0.168 0.541 0.206 0.064 0.091 0.233 0.117 + 295.35 12.768 12.770 12.801 0.250 0.891 0.655 0.250 0.891 0.584 0.164 0.223 0.643 0.323 + 295.40 12.980 12.986 13.035 0.411 1.125 0.867 0.411 1.125 0.975 0.356 0.462 1.093 0.568 + 295.45 12.777 12.789 12.855 0.536 1.301 0.665 0.536 1.301 0.865 0.356 0.697 1.211 0.583 + 295.50 12.775 12.785 12.816 0.487 0.891 0.663 0.487 0.891 0.590 0.323 0.434 0.735 0.400 + 295.55 12.903 12.909 12.922 0.376 0.586 0.790 0.376 0.586 0.463 0.297 0.220 0.555 0.296 + 295.60 13.129 13.132 13.142 0.265 0.513 1.016 0.265 0.513 0.521 0.270 0.136 0.683 0.301 + 295.65 13.185 13.187 13.206 0.207 0.706 1.073 0.207 0.706 0.757 0.222 0.146 0.846 0.401 + 295.70 13.656 13.657 13.659 0.211 0.205 1.543 0.211 0.205 0.316 0.326 0.043 1.234 0.228 + 295.75 13.773 13.773 13.776 -0.013 0.310 1.660 -0.013 0.310 0.515 -0.022 -0.004 1.426 0.258 + 295.80 13.671 13.671 13.692 -0.017 0.757 1.558 -0.017 0.757 1.179 -0.026 -0.013 1.500 0.590 + 295.85 13.483 13.483 13.485 -0.056 0.212 1.371 -0.056 0.212 0.290 -0.077 -0.012 0.963 0.150 + 295.90 13.544 13.546 13.557 0.222 0.552 1.431 0.222 0.552 0.790 0.317 0.122 1.201 0.430 + 295.95 13.413 13.414 13.424 0.183 0.515 1.300 0.183 0.515 0.669 0.238 0.094 0.994 0.358 + 296.00 13.330 13.331 13.346 0.087 0.643 1.218 0.087 0.643 0.782 0.106 0.056 0.952 0.396 + 296.05 13.218 13.218 13.243 0.000 0.816 1.105 0.000 0.816 0.901 0.000 0.000 0.943 0.451 + 296.10 13.725 13.726 13.761 -0.174 0.978 1.612 -0.174 0.978 1.577 -0.280 -0.170 1.793 0.805 + 296.15 13.996 14.006 14.037 -0.534 0.920 1.883 -0.534 0.920 1.733 -1.005 -0.491 2.339 1.031 + 296.20 13.651 13.666 13.685 -0.644 0.717 1.538 -0.644 0.717 1.103 -0.990 -0.462 1.647 0.776 + 296.25 13.477 13.493 13.512 -0.669 0.703 1.364 -0.669 0.703 0.959 -0.913 -0.471 1.401 0.703 + 296.30 13.882 13.900 13.914 -0.714 0.622 1.769 -0.714 0.622 1.101 -1.263 -0.444 2.013 0.867 + 296.35 13.917 13.939 13.958 -0.776 0.728 1.804 -0.776 0.728 1.313 -1.399 -0.564 2.193 1.000 + 296.40 13.606 13.608 13.640 -0.236 0.939 1.493 -0.236 0.939 1.401 -0.353 -0.222 1.583 0.731 + 296.45 13.395 13.399 13.428 -0.315 0.886 1.282 -0.315 0.886 1.136 -0.404 -0.279 1.264 0.619 + 296.50 13.382 13.383 13.394 -0.175 0.535 1.270 -0.175 0.535 0.680 -0.223 -0.094 0.965 0.361 + 296.55 13.335 13.335 13.345 0.034 0.506 1.222 0.034 0.506 0.619 0.041 0.017 0.876 0.310 + 296.60 13.645 13.648 13.659 -0.292 0.544 1.532 -0.292 0.544 0.833 -0.448 -0.159 1.364 0.480 + 296.65 13.541 13.551 13.559 -0.522 0.460 1.428 -0.522 0.460 0.656 -0.746 -0.240 1.262 0.511 + 296.70 13.311 13.333 13.338 -0.763 0.346 1.198 -0.763 0.346 0.415 -0.914 -0.264 1.069 0.519 + 296.75 13.135 13.150 13.157 -0.634 0.431 1.022 -0.634 0.431 0.441 -0.648 -0.273 0.816 0.415 + 296.80 12.946 12.956 12.971 -0.517 0.630 0.833 -0.517 0.630 0.525 -0.431 -0.326 0.679 0.377 + 296.85 13.057 13.072 13.075 -0.625 0.289 0.944 -0.625 0.289 0.273 -0.590 -0.181 0.683 0.337 + 296.90 13.167 13.188 13.188 -0.736 -0.007 1.054 -0.736 -0.007 -0.007 -0.776 0.005 0.827 0.388 + 296.95 13.514 13.527 13.529 -0.591 -0.220 1.401 -0.591 -0.220 -0.309 -0.828 0.130 1.181 0.447 + 297.00 13.691 13.699 13.706 -0.469 -0.439 1.578 -0.469 -0.439 -0.692 -0.740 0.206 1.451 0.517 + 297.05 13.593 13.598 13.601 -0.394 -0.283 1.480 -0.394 -0.283 -0.419 -0.583 0.112 1.213 0.363 + 297.10 13.629 13.633 13.635 -0.342 -0.217 1.516 -0.342 -0.217 -0.329 -0.518 0.074 1.231 0.309 + 297.15 13.519 13.544 13.552 -0.822 -0.464 1.406 -0.822 -0.464 -0.652 -1.155 0.381 1.434 0.690 + 297.20 13.726 13.759 13.768 -0.952 -0.499 1.613 -0.952 -0.499 -0.804 -1.535 0.475 1.878 0.898 + 297.25 13.543 13.553 13.555 -0.530 -0.223 1.430 -0.530 -0.223 -0.318 -0.758 0.118 1.188 0.415 + 297.30 13.610 13.631 13.633 -0.765 -0.224 1.497 -0.765 -0.224 -0.335 -1.146 0.171 1.439 0.603 + 297.35 13.959 13.970 13.982 -0.556 -0.588 1.846 -0.556 -0.588 -1.085 -1.027 0.327 2.031 0.765 + 297.40 14.030 14.037 14.043 -0.413 -0.434 1.918 -0.413 -0.434 -0.833 -0.793 0.180 2.018 0.582 + 297.45 13.791 13.803 13.816 -0.570 -0.593 1.679 -0.570 -0.593 -0.995 -0.957 0.338 1.747 0.711 + 297.50 13.996 13.997 14.010 -0.214 -0.584 1.883 -0.214 -0.584 -1.100 -0.402 0.125 1.966 0.589 + 297.55 13.909 13.909 13.927 0.123 -0.700 1.796 0.123 -0.700 -1.257 0.221 -0.086 1.866 0.640 + 297.60 13.995 13.995 14.016 -0.039 -0.771 1.882 -0.039 -0.771 -1.451 -0.073 0.030 2.069 0.727 + 297.65 13.966 13.968 13.996 -0.258 -0.881 1.853 -0.258 -0.881 -1.632 -0.478 0.227 2.138 0.858 + 297.70 14.125 14.125 14.174 -0.097 -1.178 2.012 -0.097 -1.178 -2.370 -0.195 0.114 2.722 1.191 + 297.75 13.930 13.930 14.002 -0.001 -1.424 1.817 -0.001 -1.424 -2.586 -0.001 0.001 2.664 1.293 + 297.80 13.810 13.810 13.873 0.001 -1.320 1.697 0.001 -1.320 -2.241 0.002 -0.001 2.312 1.120 + 297.85 13.678 13.683 13.745 0.383 -1.300 1.565 0.383 -1.300 -2.034 0.599 -0.498 2.143 1.089 + 297.90 14.013 14.019 14.061 0.415 -1.083 1.900 0.415 -1.083 -2.057 0.789 -0.449 2.478 1.124 + 297.95 14.054 14.054 14.095 -0.114 -1.074 1.941 -0.114 -1.074 -2.085 -0.220 0.122 2.467 1.050 + 298.00 13.872 13.872 13.886 -0.060 -0.608 1.759 -0.060 -0.608 -1.070 -0.106 0.037 1.735 0.538 + 298.05 13.601 13.601 13.614 -0.110 -0.578 1.488 -0.110 -0.578 -0.860 -0.164 0.064 1.280 0.439 + 298.10 13.762 13.763 13.773 0.222 -0.513 1.649 0.222 -0.513 -0.846 0.367 -0.114 1.516 0.465 + 298.15 13.896 13.909 13.942 0.591 -0.959 1.784 0.591 -0.959 -1.710 1.055 -0.567 2.225 1.044 + 298.20 14.105 14.106 14.120 -0.064 -0.637 1.993 -0.064 -0.637 -1.270 -0.128 0.041 2.190 0.639 + 298.25 13.922 13.922 13.924 -0.040 -0.215 1.809 -0.040 -0.215 -0.389 -0.072 0.009 1.661 0.198 + 298.30 13.720 13.722 13.727 0.259 -0.364 1.607 0.259 -0.364 -0.584 0.417 -0.094 1.391 0.362 + 298.35 13.708 13.712 13.721 0.331 -0.511 1.595 0.331 -0.511 -0.816 0.528 -0.169 1.458 0.493 + 298.40 13.971 13.972 13.986 0.218 -0.619 1.858 0.218 -0.619 -1.149 0.404 -0.135 1.941 0.613 + 298.45 14.102 14.105 14.141 0.279 -1.004 1.990 0.279 -1.004 -1.997 0.555 -0.280 2.522 1.046 + 298.50 14.327 14.327 14.360 0.010 -0.972 2.214 0.010 -0.972 -2.151 0.022 -0.010 2.923 1.076 + 298.55 14.381 14.381 14.396 -0.017 -0.650 2.269 -0.017 -0.650 -1.476 -0.039 0.011 2.785 0.738 + 298.60 14.228 14.234 14.251 -0.400 -0.704 2.116 -0.400 -0.704 -1.488 -0.845 0.281 2.565 0.867 + 298.65 14.233 14.233 14.249 -0.115 -0.667 2.120 -0.115 -0.667 -1.414 -0.244 0.077 2.476 0.718 + 298.70 14.067 14.067 14.071 -0.007 -0.344 1.954 -0.007 -0.344 -0.672 -0.015 0.003 1.968 0.336 + 298.75 13.909 13.912 13.918 0.297 -0.403 1.796 0.297 -0.403 -0.723 0.533 -0.119 1.738 0.453 + 298.80 13.702 13.703 13.705 -0.171 -0.251 1.589 -0.171 -0.251 -0.398 -0.272 0.043 1.308 0.242 + 298.85 13.886 13.886 13.889 -0.094 -0.274 1.773 -0.094 -0.274 -0.486 -0.166 0.026 1.614 0.257 + 298.90 13.849 13.852 13.865 -0.256 -0.615 1.737 -0.256 -0.615 -1.068 -0.445 0.158 1.730 0.584 + 298.95 13.787 13.788 13.794 -0.148 -0.409 1.674 -0.148 -0.409 -0.684 -0.248 0.060 1.496 0.365 + 299.00 13.972 13.977 13.986 -0.375 -0.498 1.859 -0.375 -0.498 -0.926 -0.698 0.187 1.922 0.587 + 299.05 13.868 13.870 13.880 -0.212 -0.537 1.755 -0.212 -0.537 -0.942 -0.372 0.114 1.707 0.509 + 299.10 13.878 13.882 13.886 -0.341 -0.313 1.765 -0.341 -0.313 -0.553 -0.601 0.107 1.665 0.412 + 299.15 14.072 14.072 14.073 0.011 -0.082 1.960 0.011 -0.082 -0.161 0.022 -0.001 1.923 0.081 + 299.20 14.267 14.268 14.268 0.162 -0.122 2.154 0.162 -0.122 -0.262 0.349 -0.020 2.340 0.218 + 299.25 14.142 14.143 14.144 0.183 0.094 2.029 0.183 0.094 0.191 0.372 0.017 2.080 0.209 + 299.30 13.897 13.902 13.902 0.363 -0.004 1.784 0.363 -0.004 -0.008 0.648 -0.002 1.658 0.324 + 299.35 13.943 13.943 13.952 0.038 -0.511 1.830 0.038 -0.511 -0.935 0.069 -0.019 1.805 0.469 + 299.40 13.923 13.925 13.936 -0.200 -0.563 1.811 -0.200 -0.563 -1.020 -0.362 0.113 1.818 0.544 + 299.45 14.131 14.132 14.167 -0.190 -0.996 2.018 -0.190 -0.996 -2.009 -0.384 0.189 2.550 1.027 + 299.50 14.378 14.381 14.414 -0.277 -0.971 2.266 -0.277 -0.971 -2.199 -0.627 0.269 3.076 1.151 + 299.55 14.451 14.457 14.480 -0.390 -0.830 2.339 -0.390 -0.830 -1.941 -0.913 0.324 3.155 1.085 + 299.60 14.152 14.156 14.170 -0.334 -0.641 2.039 -0.334 -0.641 -1.308 -0.682 0.214 2.340 0.745 + 299.65 14.308 14.312 14.336 -0.330 -0.836 2.195 -0.330 -0.836 -1.835 -0.723 0.275 2.813 0.996 + 299.70 14.491 14.491 14.504 -0.041 -0.612 2.378 -0.041 -0.612 -1.455 -0.097 0.025 3.016 0.729 + 299.75 14.141 14.142 14.165 0.196 -0.808 2.028 0.196 -0.808 -1.639 0.398 -0.158 2.402 0.847 + 299.80 13.963 13.969 13.987 0.432 -0.698 1.850 0.432 -0.698 -1.291 0.798 -0.301 2.048 0.774 + 299.85 13.998 13.999 14.012 0.175 -0.619 1.885 0.175 -0.619 -1.166 0.330 -0.108 1.983 0.608 + 299.90 14.012 14.012 14.018 0.108 -0.400 1.899 0.108 -0.400 -0.759 0.204 -0.043 1.889 0.394 + 299.95 14.095 14.095 14.102 -0.018 -0.445 1.982 -0.018 -0.445 -0.881 -0.036 0.008 2.063 0.441 + 300.00 14.168 14.169 14.177 0.139 -0.487 2.055 0.139 -0.487 -1.002 0.285 -0.068 2.240 0.522 + 300.05 14.396 14.398 14.406 0.234 -0.469 2.283 0.234 -0.469 -1.070 0.535 -0.110 2.744 0.601 + 300.10 14.187 14.190 14.190 0.283 0.026 2.074 0.283 0.026 0.055 0.587 0.007 2.191 0.295 + 300.15 14.218 14.220 14.220 0.239 0.086 2.105 0.239 0.086 0.181 0.503 0.021 2.248 0.268 + 300.20 14.266 14.267 14.267 0.143 0.075 2.153 0.143 0.075 0.162 0.307 0.011 2.332 0.174 + 300.25 14.142 14.142 14.148 0.065 0.398 2.029 0.065 0.398 0.809 0.132 0.026 2.141 0.410 + 300.30 14.298 14.300 14.310 -0.245 0.551 2.185 -0.245 0.551 1.203 -0.535 -0.135 2.568 0.662 + 300.35 14.487 14.493 14.506 -0.396 0.630 2.374 -0.396 0.630 1.495 -0.940 -0.249 3.096 0.892 + 300.40 14.247 14.250 14.253 -0.301 0.268 2.134 -0.301 0.268 0.571 -0.641 -0.080 2.358 0.431 + 300.45 14.202 14.208 14.209 -0.410 0.127 2.089 -0.410 0.127 0.265 -0.856 -0.052 2.275 0.449 + 300.50 13.947 13.959 13.962 -0.590 0.273 1.834 -0.590 0.273 0.500 -1.081 -0.161 1.893 0.601 + 300.55 13.857 13.866 13.867 -0.493 0.169 1.744 -0.493 0.169 0.295 -0.859 -0.083 1.656 0.456 + 300.60 13.866 13.867 13.867 -0.145 0.060 1.753 -0.145 0.060 0.104 -0.255 -0.009 1.549 0.138 + 300.65 13.763 13.777 13.777 -0.604 -0.017 1.650 -0.604 -0.017 -0.029 -0.998 0.011 1.545 0.499 + 300.70 13.988 14.002 14.003 -0.626 0.164 1.875 -0.626 0.164 0.307 -1.174 -0.103 1.967 0.609 + 300.75 13.827 13.838 13.839 -0.572 -0.073 1.714 -0.572 -0.073 -0.125 -0.981 0.042 1.635 0.495 + 300.80 13.990 13.994 13.994 -0.338 -0.110 1.877 -0.338 -0.110 -0.206 -0.635 0.037 1.825 0.334 + 300.85 13.943 13.958 13.960 -0.648 0.235 1.830 -0.648 0.235 0.430 -1.185 -0.152 1.912 0.635 + 300.90 13.654 13.663 13.665 -0.497 0.266 1.541 -0.497 0.266 0.409 -0.766 -0.132 1.346 0.439 + 300.95 13.156 13.160 13.168 -0.322 0.474 1.043 -0.322 0.474 0.494 -0.336 -0.153 0.708 0.308 + 301.00 13.156 13.160 13.166 -0.326 0.420 1.043 -0.326 0.420 0.437 -0.340 -0.137 0.685 0.285 + 301.05 13.564 13.570 13.575 -0.419 0.372 1.451 -0.419 0.372 0.540 -0.608 -0.156 1.210 0.414 + 301.10 13.575 13.586 13.589 -0.524 0.316 1.463 -0.524 0.316 0.463 -0.767 -0.166 1.257 0.455 + 301.15 13.339 13.357 13.363 -0.682 0.423 1.226 -0.682 0.423 0.519 -0.837 -0.289 1.074 0.513 + 301.20 13.402 13.429 13.445 -0.861 0.655 1.289 -0.861 0.655 0.845 -1.110 -0.564 1.416 0.752 + 301.25 13.584 13.603 13.615 -0.715 0.565 1.471 -0.715 0.565 0.831 -1.051 -0.404 1.497 0.700 + 301.30 13.575 13.608 13.621 -0.944 0.597 1.462 -0.944 0.597 0.872 -1.381 -0.563 1.693 0.864 + 301.35 13.722 13.760 13.770 -1.018 0.536 1.609 -1.018 0.536 0.863 -1.639 -0.546 1.957 0.966 + 301.40 13.581 13.600 13.629 -0.703 0.894 1.469 -0.703 0.894 1.313 -1.032 -0.628 1.725 0.892 + 301.45 13.752 13.754 13.777 -0.242 0.800 1.639 -0.242 0.800 1.311 -0.397 -0.194 1.693 0.692 + 301.50 13.635 13.640 13.663 -0.351 0.800 1.523 -0.351 0.800 1.218 -0.535 -0.281 1.541 0.680 + 301.55 13.817 13.827 13.852 -0.519 0.826 1.705 -0.519 0.826 1.409 -0.885 -0.429 1.929 0.859 + 301.60 14.048 14.076 14.092 -0.891 0.669 1.935 -0.891 0.669 1.295 -1.723 -0.596 2.492 1.118 + 301.65 14.123 14.139 14.155 -0.663 0.676 2.011 -0.663 0.676 1.358 -1.333 -0.448 2.469 0.977 + 301.70 14.037 14.046 14.047 -0.505 0.166 1.924 -0.505 0.166 0.319 -0.972 -0.084 1.993 0.513 + 301.75 14.226 14.233 14.234 -0.449 -0.210 2.113 -0.449 -0.210 -0.445 -0.948 0.094 2.355 0.526 + 301.80 14.277 14.289 14.296 -0.582 -0.442 2.164 -0.582 -0.442 -0.956 -1.261 0.257 2.609 0.801 + 301.85 14.449 14.464 14.477 -0.649 -0.609 2.336 -0.649 -0.609 -1.423 -1.517 0.395 3.126 1.059 + 301.90 14.647 14.658 14.660 -0.550 -0.275 2.534 -0.550 -0.275 -0.696 -1.393 0.151 3.400 0.782 + 301.95 14.715 14.718 14.719 -0.309 -0.165 2.602 -0.309 -0.165 -0.429 -0.804 0.051 3.446 0.456 + 302.00 14.620 14.620 14.622 0.024 -0.212 2.507 0.024 -0.212 -0.533 0.060 -0.005 3.166 0.268 + 302.05 14.818 14.820 14.822 -0.248 -0.245 2.706 -0.248 -0.245 -0.663 -0.672 0.061 3.721 0.473 + 302.10 14.797 14.797 14.798 0.102 -0.197 2.684 0.102 -0.197 -0.528 0.273 -0.020 3.626 0.297 + 302.15 14.595 14.595 14.598 0.039 -0.281 2.482 0.039 -0.281 -0.697 0.096 -0.011 3.121 0.352 + 302.20 14.951 14.952 14.962 -0.100 -0.543 2.839 -0.100 -0.543 -1.540 -0.283 0.054 4.181 0.783 + 302.25 15.190 15.190 15.206 0.032 -0.695 3.078 0.032 -0.695 -2.140 0.098 -0.022 4.978 1.071 + 302.30 15.056 15.056 15.088 0.007 -0.991 2.943 0.007 -0.991 -2.916 0.020 -0.007 4.821 1.458 + 302.35 14.816 14.816 14.837 -0.117 -0.779 2.703 -0.117 -0.779 -2.106 -0.315 0.091 3.963 1.066 + 302.40 14.683 14.687 14.702 -0.323 -0.674 2.570 -0.323 -0.674 -1.733 -0.831 0.218 3.583 0.967 + 302.45 14.892 14.898 14.918 -0.411 -0.784 2.779 -0.411 -0.784 -2.179 -1.143 0.323 4.254 1.241 + 302.50 15.129 15.136 15.152 -0.478 -0.683 3.016 -0.478 -0.683 -2.060 -1.442 0.327 4.896 1.268 + 302.55 15.545 15.545 15.557 -0.164 -0.603 3.432 -0.164 -0.603 -2.069 -0.564 0.099 6.084 1.073 + 302.60 15.213 15.213 15.221 -0.090 -0.485 3.100 -0.090 -0.485 -1.503 -0.278 0.043 4.927 0.765 + 302.65 15.646 15.646 15.651 -0.094 -0.369 3.533 -0.094 -0.369 -1.303 -0.331 0.035 6.314 0.672 + 302.70 15.526 15.526 15.530 -0.045 -0.324 3.414 -0.045 -0.324 -1.105 -0.152 0.014 5.880 0.558 + 302.75 15.250 15.251 15.258 -0.160 -0.475 3.137 -0.160 -0.475 -1.491 -0.501 0.076 5.047 0.788 + 302.80 15.309 15.314 15.324 -0.397 -0.548 3.196 -0.397 -0.548 -1.753 -1.269 0.218 5.338 1.087 + 302.85 14.944 14.957 14.960 -0.629 -0.298 2.831 -0.629 -0.298 -0.845 -1.780 0.188 4.249 0.989 + 302.90 15.206 15.227 15.228 -0.806 -0.166 3.093 -0.806 -0.166 -0.513 -2.494 0.134 5.122 1.275 + 302.95 15.044 15.063 15.063 -0.753 -0.132 2.931 -0.753 -0.132 -0.386 -2.207 0.099 4.588 1.121 + 303.00 14.643 14.674 14.675 -0.951 -0.151 2.530 -0.951 -0.151 -0.381 -2.407 0.143 3.665 1.221 + 303.05 14.349 14.380 14.380 -0.945 0.008 2.236 -0.945 0.008 0.018 -2.112 -0.007 2.946 1.056 + 303.10 14.460 14.471 14.472 -0.561 -0.176 2.347 -0.561 -0.176 -0.412 -1.316 0.099 2.927 0.692 + 303.15 14.687 14.688 14.697 -0.171 -0.522 2.574 -0.171 -0.522 -1.343 -0.440 0.089 3.463 0.708 + 303.20 14.399 14.402 14.409 -0.294 -0.442 2.286 -0.294 -0.442 -1.010 -0.672 0.130 2.754 0.610 + 303.25 14.328 14.334 14.375 -0.418 -1.082 2.215 -0.418 -1.082 -2.397 -0.925 0.452 3.126 1.304 + 303.30 14.209 14.211 14.258 -0.280 -1.149 2.096 -0.280 -1.149 -2.408 -0.587 0.322 2.896 1.250 + 303.35 14.560 14.565 14.621 -0.407 -1.270 2.447 -0.407 -1.270 -3.108 -0.996 0.517 3.883 1.652 + 303.40 14.524 14.529 14.573 -0.391 -1.127 2.411 -0.391 -1.127 -2.716 -0.944 0.441 3.617 1.454 + 303.45 14.513 14.515 14.571 -0.281 -1.277 2.400 -0.281 -1.277 -3.065 -0.674 0.359 3.735 1.579 + 303.50 14.504 14.504 14.539 0.030 -1.018 2.391 0.030 -1.018 -2.433 0.071 -0.030 3.377 1.217 + 303.55 14.736 14.737 14.773 0.109 -1.042 2.623 0.109 -1.042 -2.734 0.286 -0.113 3.990 1.376 + 303.60 14.527 14.532 14.561 0.361 -0.919 2.415 0.361 -0.919 -2.218 0.871 -0.331 3.402 1.203 + 303.65 14.450 14.451 14.471 0.127 -0.770 2.337 0.127 -0.770 -1.799 0.297 -0.098 3.036 0.913 + 303.70 14.302 14.302 14.305 -0.138 -0.291 2.189 -0.138 -0.291 -0.636 -0.302 0.040 2.447 0.353 + 303.75 14.334 14.334 14.339 -0.096 -0.381 2.221 -0.096 -0.381 -0.846 -0.213 0.037 2.543 0.437 + 303.80 14.367 14.371 14.381 0.350 -0.529 2.254 0.350 -0.529 -1.192 0.790 -0.185 2.741 0.721 + 303.85 14.103 14.104 14.104 0.188 -0.029 1.990 0.188 -0.029 -0.058 0.373 -0.006 1.998 0.189 + 303.90 14.234 14.236 14.236 0.205 -0.114 2.121 0.205 -0.114 -0.242 0.435 -0.023 2.277 0.249 + 303.95 14.415 14.419 14.419 0.309 0.053 2.303 0.309 0.053 0.122 0.712 0.016 2.700 0.361 + 304.00 14.350 14.351 14.351 0.137 0.022 2.238 0.137 0.022 0.050 0.307 0.003 2.513 0.155 + 304.05 14.180 14.187 14.189 -0.452 0.238 2.067 -0.452 0.238 0.491 -0.934 -0.107 2.267 0.531 + 304.10 14.301 14.304 14.304 -0.320 0.013 2.188 -0.320 0.013 0.029 -0.700 -0.004 2.445 0.350 + 304.15 14.214 14.216 14.219 -0.264 0.247 2.101 -0.264 0.247 0.518 -0.554 -0.065 2.273 0.381 + 304.20 14.162 14.172 14.172 -0.522 0.031 2.049 -0.522 0.031 0.063 -1.069 -0.016 2.237 0.535 + 304.25 14.151 14.177 14.182 -0.851 -0.367 2.039 -0.851 -0.367 -0.748 -1.735 0.312 2.508 0.957 + 304.30 14.178 14.201 14.208 -0.816 -0.455 2.065 -0.816 -0.455 -0.939 -1.685 0.371 2.568 0.982 + 304.35 13.852 13.863 13.886 -0.548 -0.791 1.739 -0.548 -0.791 -1.375 -0.954 0.433 1.976 0.864 + 304.40 13.756 13.758 13.769 -0.256 -0.530 1.643 -0.256 -0.530 -0.872 -0.420 0.136 1.523 0.488 + 304.45 13.856 13.860 13.865 -0.342 -0.370 1.743 -0.342 -0.370 -0.644 -0.597 0.127 1.647 0.444 + 304.50 13.731 13.751 13.761 -0.737 -0.529 1.619 -0.737 -0.529 -0.856 -1.193 0.389 1.721 0.759 + 304.55 13.675 13.678 13.703 -0.271 -0.827 1.562 -0.271 -0.827 -1.292 -0.424 0.224 1.599 0.689 + 304.60 13.515 13.517 13.538 -0.253 -0.759 1.402 -0.253 -0.759 -1.064 -0.355 0.192 1.303 0.569 + 304.65 13.428 13.428 13.432 -0.058 -0.316 1.315 -0.058 -0.316 -0.416 -0.077 0.018 0.917 0.212 + 304.70 13.169 13.173 13.174 -0.353 0.095 1.056 -0.353 0.095 0.101 -0.373 -0.034 0.624 0.194 + 304.75 13.195 13.199 13.199 -0.332 0.026 1.082 -0.332 0.026 0.028 -0.360 -0.008 0.641 0.180 + 304.80 13.355 13.355 13.356 -0.038 0.158 1.242 -0.038 0.158 0.196 -0.047 -0.006 0.785 0.101 + 304.85 13.500 13.500 13.500 0.107 0.005 1.387 0.107 0.005 0.007 0.148 0.001 0.968 0.074 + 304.90 13.493 13.493 13.494 -0.096 0.126 1.380 -0.096 0.126 0.174 -0.132 -0.012 0.965 0.109 + 304.95 13.705 13.706 13.706 -0.218 -0.011 1.592 -0.218 -0.011 -0.017 -0.347 0.002 1.291 0.174 + 305.00 13.798 13.798 13.798 0.073 -0.019 1.685 0.073 -0.019 -0.032 0.124 -0.001 1.423 0.064 + 305.05 13.887 13.888 13.889 0.172 -0.156 1.774 0.172 -0.156 -0.277 0.304 -0.027 1.600 0.206 + 305.10 13.933 13.938 13.941 0.359 -0.269 1.821 0.359 -0.269 -0.490 0.654 -0.097 1.758 0.412 + 305.15 13.648 13.650 13.654 0.222 -0.330 1.535 0.222 -0.330 -0.507 0.341 -0.073 1.257 0.307 + 305.20 13.725 13.728 13.737 0.302 -0.492 1.612 0.302 -0.492 -0.794 0.487 -0.149 1.466 0.471 + 305.25 14.049 14.049 14.051 -0.022 -0.258 1.936 -0.022 -0.258 -0.499 -0.042 0.006 1.907 0.250 + 305.30 14.006 14.007 14.007 -0.126 0.065 1.893 -0.126 0.065 0.124 -0.239 -0.008 1.802 0.135 + 305.35 14.078 14.078 14.082 -0.161 0.336 1.965 -0.161 0.336 0.661 -0.316 -0.054 2.000 0.367 + 305.40 13.575 13.575 13.576 -0.110 0.168 1.462 -0.110 0.168 0.246 -0.161 -0.018 1.088 0.147 + 305.45 13.494 13.505 13.506 -0.535 0.151 1.382 -0.535 0.151 0.208 -0.739 -0.081 1.109 0.386 + 305.50 13.545 13.554 13.555 -0.496 0.173 1.432 -0.496 0.173 0.248 -0.711 -0.086 1.164 0.379 + 305.55 13.611 13.617 13.624 -0.424 0.414 1.498 -0.424 0.414 0.621 -0.635 -0.176 1.298 0.453 + 305.60 13.626 13.631 13.646 -0.370 0.639 1.513 -0.370 0.639 0.966 -0.560 -0.236 1.417 0.571 + 305.65 13.678 13.686 13.703 -0.481 0.683 1.565 -0.481 0.683 1.069 -0.752 -0.328 1.574 0.674 + 305.70 13.550 13.551 13.572 -0.143 0.744 1.438 -0.143 0.744 1.070 -0.205 -0.106 1.320 0.547 + 305.75 13.484 13.498 13.520 -0.611 0.762 1.372 -0.611 0.762 1.045 -0.838 -0.466 1.417 0.709 + 305.80 13.179 13.205 13.224 -0.830 0.710 1.066 -0.830 0.710 0.757 -0.884 -0.589 1.164 0.652 + 305.85 12.562 12.570 12.603 -0.471 0.905 0.449 -0.471 0.905 0.406 -0.211 -0.426 0.621 0.313 + 305.90 12.605 12.618 12.631 -0.566 0.570 0.493 -0.566 0.570 0.281 -0.279 -0.323 0.444 0.255 + 305.95 12.765 12.783 12.788 -0.673 0.366 0.652 -0.673 0.366 0.239 -0.439 -0.247 0.507 0.279 + 306.00 12.872 12.907 12.907 -0.961 0.005 0.759 -0.961 0.005 0.003 -0.730 -0.004 0.750 0.365 + 306.05 13.012 13.043 13.046 -0.908 -0.241 0.899 -0.908 -0.241 -0.217 -0.817 0.219 0.846 0.436 + 306.10 12.873 12.904 12.904 -0.903 -0.039 0.760 -0.903 -0.039 -0.030 -0.686 0.036 0.697 0.344 + 306.15 12.736 12.775 12.777 -0.993 -0.259 0.623 -0.993 -0.259 -0.162 -0.619 0.258 0.721 0.345 + 306.20 12.827 12.842 12.847 -0.620 -0.343 0.714 -0.620 -0.343 -0.245 -0.443 0.213 0.506 0.275 + 306.25 12.944 12.956 12.957 -0.542 0.151 0.832 -0.542 0.151 0.126 -0.451 -0.082 0.504 0.238 + 306.30 12.868 12.874 12.875 -0.391 0.198 0.755 -0.391 0.198 0.149 -0.295 -0.077 0.381 0.170 + 306.35 13.244 13.251 13.251 -0.428 -0.111 1.131 -0.428 -0.111 -0.126 -0.484 0.048 0.738 0.251 + 306.40 13.465 13.468 13.468 -0.296 -0.059 1.352 -0.296 -0.059 -0.079 -0.401 0.017 0.960 0.204 + 306.45 13.103 13.108 13.108 -0.339 0.010 0.991 -0.339 0.010 0.010 -0.336 -0.003 0.548 0.168 + 306.50 13.019 13.023 13.023 -0.319 -0.048 0.906 -0.319 -0.048 -0.043 -0.289 0.015 0.463 0.146 + 306.55 13.045 13.046 13.046 -0.183 0.101 0.932 -0.183 0.101 0.094 -0.170 -0.018 0.456 0.098 + 306.60 13.351 13.351 13.359 -0.098 0.451 1.238 -0.098 0.451 0.559 -0.122 -0.044 0.873 0.287 + 306.65 13.338 13.338 13.339 0.048 0.107 1.225 0.048 0.107 0.131 0.058 0.005 0.758 0.072 + 306.70 13.187 13.187 13.187 0.016 -0.022 1.074 0.016 -0.022 -0.023 0.017 -0.000 0.577 0.014 + 306.75 13.865 13.866 13.869 -0.178 0.269 1.752 -0.178 0.269 0.471 -0.311 -0.048 1.587 0.283 + 306.80 13.924 13.926 13.928 -0.212 0.253 1.812 -0.212 0.253 0.458 -0.383 -0.053 1.695 0.300 + 306.85 13.750 13.751 13.762 -0.126 0.559 1.638 -0.126 0.559 0.915 -0.206 -0.070 1.505 0.470 + 306.90 13.745 13.747 13.750 0.210 0.275 1.632 0.210 0.275 0.449 0.343 0.058 1.392 0.284 + 306.95 13.811 13.811 13.814 0.077 0.280 1.698 0.077 0.280 0.476 0.131 0.022 1.485 0.247 + 307.00 13.908 13.908 13.908 0.049 0.027 1.795 0.049 0.027 0.049 0.087 0.001 1.613 0.050 + 307.05 13.857 13.863 13.863 -0.382 -0.124 1.745 -0.382 -0.124 -0.216 -0.667 0.047 1.603 0.351 + 307.10 13.566 13.566 13.567 -0.125 0.123 1.453 -0.125 0.123 0.179 -0.182 -0.015 1.071 0.128 + 307.15 13.645 13.645 13.648 0.088 0.283 1.532 0.088 0.283 0.434 0.135 0.025 1.218 0.228 + 307.20 14.125 14.126 14.135 -0.139 0.489 2.013 -0.139 0.489 0.985 -0.279 -0.068 2.155 0.513 + 307.25 13.948 13.949 13.968 -0.154 0.724 1.836 -0.154 0.724 1.328 -0.283 -0.111 1.958 0.681 + 307.30 13.990 13.991 14.013 0.098 0.790 1.877 0.098 0.790 1.483 0.185 0.078 2.079 0.748 + 307.35 13.835 13.843 13.859 0.467 0.663 1.723 0.467 0.663 1.143 0.804 0.310 1.813 0.716 + 307.40 14.095 14.107 14.119 0.579 0.573 1.982 0.579 0.573 1.136 1.147 0.331 2.296 0.824 + 307.45 14.225 14.229 14.234 0.332 0.386 2.112 0.332 0.386 0.815 0.700 0.128 2.360 0.541 + 307.50 13.959 13.964 13.970 0.351 0.423 1.846 0.351 0.423 0.781 0.649 0.149 1.856 0.513 + 307.55 13.726 13.738 13.738 0.561 0.132 1.613 0.561 0.132 0.213 0.905 0.074 1.467 0.466 + 307.60 13.690 13.697 13.697 0.421 0.078 1.577 0.421 0.078 0.123 0.665 0.033 1.336 0.338 + 307.65 13.450 13.456 13.457 0.409 0.121 1.337 0.409 0.121 0.162 0.547 0.049 0.985 0.286 + 307.70 13.654 13.658 13.660 0.326 -0.248 1.541 0.326 -0.248 -0.383 0.503 -0.081 1.272 0.319 + 307.75 13.875 13.883 13.890 0.466 -0.425 1.762 0.466 -0.425 -0.749 0.821 -0.198 1.752 0.565 + 307.80 14.146 14.157 14.159 0.571 -0.179 2.033 0.571 -0.179 -0.364 1.161 -0.102 2.246 0.610 + 307.85 14.053 14.071 14.073 0.713 -0.275 1.940 0.713 -0.275 -0.534 1.383 -0.196 2.173 0.748 + 307.90 13.945 13.964 13.964 0.734 0.082 1.832 0.734 0.082 0.150 1.345 0.060 1.950 0.677 + 307.95 13.928 13.942 13.942 0.614 0.096 1.815 0.614 0.096 0.174 1.114 0.059 1.841 0.565 + 308.00 13.863 13.878 13.880 0.649 0.199 1.750 0.649 0.199 0.348 1.136 0.129 1.762 0.598 + 308.05 13.931 13.931 13.936 0.046 0.377 1.818 0.046 0.377 0.686 0.083 0.017 1.725 0.345 + 308.10 13.758 13.762 13.766 -0.317 0.333 1.646 -0.317 0.333 0.549 -0.521 -0.106 1.460 0.382 + 308.15 13.683 13.683 13.685 -0.084 0.242 1.570 -0.084 0.242 0.380 -0.132 -0.020 1.265 0.201 + 308.20 13.565 13.567 13.568 -0.189 0.193 1.453 -0.189 0.193 0.281 -0.275 -0.037 1.092 0.197 + 308.25 13.759 13.764 13.774 -0.352 0.534 1.646 -0.352 0.534 0.879 -0.580 -0.188 1.560 0.535 + 308.30 13.724 13.733 13.735 -0.482 0.265 1.612 -0.482 0.265 0.427 -0.776 -0.127 1.450 0.447 + 308.35 13.901 13.916 13.917 -0.652 0.203 1.788 -0.652 0.203 0.363 -1.166 -0.132 1.831 0.614 + 308.40 14.092 14.097 14.097 -0.382 0.051 1.979 -0.382 0.051 0.101 -0.755 -0.019 2.032 0.381 + 308.45 14.248 14.261 14.261 -0.605 0.038 2.135 -0.605 0.038 0.082 -1.292 -0.023 2.463 0.647 + 308.50 14.521 14.534 14.535 -0.606 -0.197 2.408 -0.606 -0.197 -0.474 -1.460 0.119 3.103 0.770 + 308.55 14.375 14.377 14.377 -0.194 -0.146 2.263 -0.194 -0.146 -0.331 -0.440 0.028 2.589 0.276 + 308.60 13.986 13.995 13.995 -0.497 -0.018 1.873 -0.497 -0.018 -0.034 -0.930 0.009 1.878 0.466 + 308.65 14.116 14.123 14.123 -0.453 0.055 2.003 -0.453 0.055 0.109 -0.908 -0.025 2.110 0.458 + 308.70 14.005 14.016 14.017 -0.564 -0.104 1.892 -0.564 -0.104 -0.196 -1.066 0.058 1.954 0.543 + 308.75 14.079 14.091 14.095 -0.564 -0.346 1.967 -0.564 -0.346 -0.680 -1.110 0.195 2.153 0.658 + 308.80 14.056 14.090 14.091 -0.978 -0.176 1.943 -0.978 -0.176 -0.342 -1.901 0.172 2.382 0.970 + 308.85 13.915 13.983 13.984 -1.378 0.149 1.802 -1.378 0.149 0.268 -2.483 -0.205 2.584 1.253 + 308.90 13.868 13.904 13.907 -0.993 0.317 1.755 -0.993 0.317 0.556 -1.743 -0.314 2.084 0.928 + 308.95 14.162 14.171 14.171 -0.502 0.084 2.049 -0.502 0.084 0.171 -1.028 -0.042 2.228 0.522 + 309.00 13.823 13.833 13.835 -0.518 0.256 1.710 -0.518 0.256 0.437 -0.885 -0.132 1.629 0.498 + 309.05 13.880 13.886 13.887 -0.409 0.186 1.767 -0.409 0.186 0.329 -0.723 -0.076 1.662 0.399 + 309.10 14.024 14.025 14.026 -0.219 0.135 1.911 -0.219 0.135 0.257 -0.418 -0.029 1.859 0.246 + 309.15 14.210 14.210 14.215 -0.084 0.349 2.097 -0.084 0.349 0.731 -0.176 -0.029 2.263 0.376 + 309.20 14.342 14.343 14.350 0.142 0.456 2.229 0.142 0.456 1.016 0.318 0.065 2.599 0.533 + 309.25 14.180 14.181 14.190 -0.194 0.511 2.067 -0.194 0.511 1.057 -0.400 -0.099 2.285 0.567 + 309.30 14.139 14.139 14.148 0.035 0.529 2.026 0.035 0.529 1.071 0.071 0.019 2.192 0.537 + 309.35 13.716 13.719 13.724 0.292 0.395 1.603 0.292 0.395 0.633 0.467 0.115 1.405 0.398 + 309.40 13.582 13.582 13.583 0.147 0.071 1.469 0.147 0.071 0.104 0.216 0.010 1.092 0.120 + 309.45 13.426 13.433 13.437 0.445 0.314 1.313 0.445 0.314 0.412 0.584 0.139 1.010 0.364 + 309.50 13.336 13.348 13.349 0.554 0.157 1.223 0.554 0.157 0.192 0.678 0.087 0.914 0.355 + 309.55 13.713 13.725 13.730 0.572 -0.369 1.600 0.572 -0.369 -0.590 0.915 -0.211 1.512 0.554 + 309.60 13.680 13.691 13.706 0.533 -0.657 1.568 0.533 -0.657 -1.029 0.835 -0.350 1.586 0.686 + 309.65 13.556 13.562 13.586 0.405 -0.801 1.443 0.405 -0.801 -1.156 0.585 -0.325 1.444 0.668 + 309.70 13.496 13.499 13.514 0.290 -0.627 1.383 0.290 -0.627 -0.867 0.402 -0.182 1.195 0.486 + 309.75 13.469 13.470 13.484 0.130 -0.624 1.356 0.130 -0.624 -0.846 0.177 -0.081 1.123 0.434 + 309.80 13.676 13.679 13.686 -0.284 -0.437 1.563 -0.284 -0.437 -0.684 -0.444 0.124 1.358 0.412 + 309.85 13.925 13.926 13.936 -0.133 -0.513 1.813 -0.133 -0.513 -0.931 -0.242 0.068 1.783 0.482 + 309.90 13.859 13.859 13.876 -0.079 -0.691 1.746 -0.079 -0.691 -1.206 -0.138 0.055 1.766 0.607 + 309.95 13.768 13.770 13.798 0.251 -0.873 1.655 0.251 -0.873 -1.445 0.415 -0.219 1.782 0.760 + 310.00 13.668 13.670 13.723 0.252 -1.199 1.555 0.252 -1.199 -1.864 0.391 -0.302 1.959 0.964 + 310.05 13.429 13.429 13.460 0.086 -0.919 1.316 0.086 -0.919 -1.210 0.114 -0.079 1.292 0.609 + 310.10 13.245 13.248 13.282 0.285 -0.951 1.132 0.285 -0.951 -1.076 0.323 -0.271 1.134 0.578 + 310.15 13.097 13.097 13.140 0.067 -1.065 0.984 0.067 -1.065 -1.048 0.066 -0.071 1.054 0.526 + 310.20 13.351 13.352 13.414 0.126 -1.289 1.238 0.126 -1.289 -1.596 0.156 -0.163 1.605 0.806 + 310.25 13.479 13.479 13.537 0.092 -1.253 1.366 0.092 -1.253 -1.712 0.125 -0.115 1.722 0.860 + 310.30 13.720 13.727 13.771 0.442 -1.098 1.607 0.442 -1.098 -1.764 0.710 -0.485 1.991 0.981 + 310.35 13.325 13.351 13.407 0.825 -1.232 1.212 0.825 -1.232 -1.494 1.000 -1.016 1.834 1.032 + 310.40 13.158 13.204 13.291 1.103 -1.513 1.045 1.103 -1.513 -1.582 1.153 -1.670 2.300 1.286 + 310.45 12.949 13.015 13.071 1.307 -1.210 0.836 1.307 -1.210 -1.011 1.093 -1.582 1.936 1.086 + 310.50 12.935 12.984 13.037 1.135 -1.170 0.822 1.135 -1.170 -0.961 0.933 -1.327 1.666 0.943 + 310.55 13.417 13.454 13.497 1.002 -1.079 1.304 1.002 -1.079 -1.407 1.307 -1.081 1.934 1.102 + 310.60 13.302 13.339 13.401 0.999 -1.285 1.189 0.999 -1.285 -1.529 1.188 -1.284 2.032 1.161 + 310.65 13.449 13.474 13.563 0.812 -1.551 1.336 0.812 -1.551 -2.073 1.085 -1.259 2.425 1.328 + 310.70 13.210 13.223 13.285 0.606 -1.279 1.097 0.606 -1.279 -1.403 0.664 -0.775 1.603 0.867 + 310.75 13.118 13.147 13.217 0.872 -1.364 1.005 0.872 -1.364 -1.370 0.877 -1.190 1.815 1.008 + 310.80 13.582 13.615 13.662 0.953 -1.131 1.469 0.953 -1.131 -1.662 1.399 -1.078 2.173 1.213 + 310.85 13.376 13.415 13.436 1.021 -0.751 1.263 1.021 -0.751 -0.949 1.290 -0.767 1.602 0.888 + 310.90 13.182 13.251 13.279 1.352 -0.860 1.069 1.352 -0.860 -0.920 1.446 -1.163 1.856 1.036 + 310.95 12.947 13.018 13.034 1.359 -0.654 0.834 1.359 -0.654 -0.546 1.133 -0.889 1.485 0.770 + 311.00 12.943 13.037 13.048 1.557 -0.536 0.831 1.557 -0.536 -0.445 1.293 -0.835 1.701 0.801 + 311.05 13.194 13.286 13.291 1.562 -0.364 1.082 1.562 -0.364 -0.393 1.689 -0.568 1.871 0.913 + 311.10 13.266 13.334 13.337 1.342 -0.294 1.154 1.342 -0.294 -0.339 1.549 -0.395 1.610 0.817 + 311.15 13.374 13.437 13.440 1.303 -0.274 1.261 1.303 -0.274 -0.345 1.643 -0.357 1.682 0.858 + 311.20 13.449 13.511 13.516 1.296 -0.341 1.336 1.296 -0.341 -0.456 1.732 -0.443 1.791 0.923 + 311.25 13.137 13.174 13.176 0.977 -0.227 1.025 0.977 -0.227 -0.233 1.001 -0.222 1.028 0.526 + 311.30 12.939 12.977 12.978 0.997 -0.103 0.826 0.997 -0.103 -0.085 0.824 -0.102 0.844 0.417 + 311.35 12.738 12.752 12.763 0.591 -0.523 0.626 0.591 -0.523 -0.327 0.370 -0.309 0.507 0.291 + 311.40 12.768 12.777 12.788 0.482 -0.541 0.655 0.482 -0.541 -0.354 0.316 -0.261 0.477 0.271 + 311.45 12.716 12.737 12.751 0.737 -0.592 0.603 0.737 -0.592 -0.357 0.445 -0.437 0.629 0.359 + 311.50 12.965 12.982 13.016 0.664 -0.945 0.852 0.664 -0.945 -0.805 0.566 -0.628 1.030 0.584 + 311.55 12.632 12.643 12.670 0.518 -0.833 0.519 0.518 -0.833 -0.433 0.269 -0.431 0.616 0.334 + 311.60 12.585 12.610 12.631 0.787 -0.719 0.473 0.787 -0.719 -0.340 0.372 -0.566 0.680 0.379 + 311.65 12.826 12.855 12.904 0.871 -1.114 0.713 0.871 -1.114 -0.794 0.621 -0.971 1.255 0.700 + 311.70 12.613 12.630 12.683 0.649 -1.161 0.500 0.649 -1.161 -0.580 0.325 -0.754 1.009 0.503 + 311.75 12.762 12.788 12.846 0.816 -1.214 0.649 0.816 -1.214 -0.789 0.530 -0.991 1.281 0.687 + 311.80 12.845 12.877 12.929 0.899 -1.158 0.732 0.899 -1.158 -0.848 0.659 -1.042 1.343 0.748 + 311.85 13.053 13.081 13.127 0.855 -1.105 0.940 0.855 -1.105 -1.039 0.803 -0.944 1.417 0.809 + 311.90 13.046 13.062 13.105 0.650 -1.064 0.933 0.650 -1.064 -0.993 0.606 -0.691 1.212 0.676 + 311.95 12.835 12.836 12.878 0.185 -1.030 0.722 0.185 -1.030 -0.744 0.133 -0.190 0.809 0.390 + 312.00 12.705 12.705 12.780 0.022 -1.382 0.592 0.022 -1.382 -0.818 0.013 -0.031 1.130 0.409 + 312.05 12.627 12.628 12.722 -0.140 -1.541 0.515 -0.140 -1.541 -0.793 -0.072 0.216 1.330 0.412 + 312.10 12.912 12.913 12.967 -0.172 -1.176 0.799 -0.172 -1.176 -0.940 -0.137 0.202 1.026 0.486 + 312.15 12.861 12.870 12.926 -0.481 -1.208 0.748 -0.481 -1.208 -0.903 -0.360 0.581 1.124 0.566 + 312.20 13.081 13.083 13.138 -0.262 -1.201 0.968 -0.262 -1.201 -1.162 -0.253 0.314 1.223 0.615 + 312.25 13.124 13.138 13.177 -0.596 -1.020 1.011 -0.596 -1.020 -1.032 -0.603 0.608 1.209 0.670 + 312.30 12.820 12.840 12.876 -0.726 -0.962 0.707 -0.726 -0.962 -0.680 -0.513 0.699 0.976 0.551 + 312.35 12.929 12.949 12.972 -0.721 -0.774 0.816 -0.721 -0.774 -0.632 -0.588 0.558 0.892 0.514 + 312.40 13.085 13.107 13.121 -0.748 -0.615 0.973 -0.748 -0.615 -0.598 -0.728 0.460 0.942 0.524 + 312.45 13.123 13.157 13.171 -0.945 -0.617 1.010 -0.945 -0.617 -0.624 -0.954 0.583 1.147 0.640 + 312.50 12.979 13.000 13.016 -0.740 -0.642 0.867 -0.740 -0.642 -0.556 -0.641 0.475 0.855 0.486 + 312.55 13.021 13.034 13.045 -0.595 -0.526 0.908 -0.595 -0.526 -0.478 -0.540 0.313 0.728 0.393 + 312.60 13.085 13.096 13.099 -0.519 -0.284 0.973 -0.519 -0.284 -0.276 -0.505 0.148 0.648 0.297 + 312.65 13.202 13.226 13.228 -0.811 -0.178 1.089 -0.811 -0.178 -0.194 -0.883 0.144 0.937 0.458 + 312.70 13.066 13.080 13.081 -0.611 -0.087 0.953 -0.611 -0.087 -0.083 -0.583 0.053 0.645 0.296 + 312.75 13.071 13.092 13.094 -0.746 -0.232 0.958 -0.746 -0.232 -0.223 -0.715 0.173 0.764 0.384 + 312.80 13.080 13.112 13.118 -0.912 -0.377 0.968 -0.912 -0.377 -0.364 -0.883 0.344 0.955 0.507 + 312.85 12.738 12.766 12.772 -0.842 -0.388 0.625 -0.842 -0.388 -0.243 -0.526 0.327 0.625 0.333 + 312.90 12.374 12.413 12.414 -0.983 -0.138 0.261 -0.983 -0.138 -0.036 -0.257 0.135 0.527 0.146 + 312.95 12.510 12.553 12.556 -1.046 -0.273 0.397 -1.046 -0.273 -0.108 -0.415 0.285 0.663 0.258 + 313.00 12.710 12.717 12.728 -0.439 -0.511 0.597 -0.439 -0.511 -0.305 -0.262 0.224 0.405 0.230 + 313.05 12.777 12.787 12.790 -0.488 -0.295 0.664 -0.488 -0.295 -0.196 -0.324 0.144 0.383 0.203 + 313.10 12.479 12.495 12.496 -0.626 -0.170 0.366 -0.626 -0.170 -0.062 -0.229 0.106 0.278 0.130 + 313.15 12.544 12.557 12.557 -0.554 -0.010 0.431 -0.554 -0.010 -0.004 -0.239 0.005 0.247 0.120 + 313.20 12.603 12.607 12.614 -0.336 -0.411 0.490 -0.336 -0.411 -0.201 -0.165 0.138 0.261 0.147 + 313.25 12.478 12.478 12.491 -0.059 -0.564 0.365 -0.059 -0.564 -0.206 -0.021 0.033 0.228 0.105 + 313.30 12.450 12.450 12.451 -0.069 -0.161 0.337 -0.069 -0.161 -0.054 -0.023 0.011 0.072 0.030 + 313.35 12.240 12.242 12.242 0.203 -0.050 0.127 0.203 -0.050 -0.006 0.026 -0.010 0.030 0.014 + 313.40 12.334 12.338 12.339 0.309 0.167 0.221 0.309 0.167 0.037 0.068 0.052 0.086 0.047 + 313.45 12.539 12.539 12.542 0.062 0.297 0.426 0.062 0.297 0.127 0.026 0.018 0.137 0.065 + 313.50 12.799 12.802 12.812 -0.233 0.525 0.687 -0.233 0.525 0.361 -0.160 -0.123 0.401 0.207 + 313.55 12.744 12.752 12.754 -0.437 0.215 0.632 -0.437 0.215 0.136 -0.276 -0.094 0.318 0.161 + 313.60 12.555 12.559 12.560 -0.335 0.150 0.442 -0.335 0.150 0.066 -0.148 -0.050 0.165 0.085 + 313.65 12.675 12.676 12.688 -0.094 0.560 0.563 -0.094 0.560 0.315 -0.053 -0.053 0.319 0.162 + 313.70 12.955 12.956 12.965 -0.136 0.489 0.843 -0.136 0.489 0.412 -0.114 -0.066 0.484 0.216 + 313.75 13.371 13.373 13.375 0.201 0.248 1.258 0.201 0.248 0.312 0.253 0.050 0.843 0.202 + 313.80 13.579 13.580 13.580 -0.199 -0.033 1.466 -0.199 -0.033 -0.048 -0.292 0.007 1.095 0.148 + 313.85 13.856 13.861 13.872 -0.357 -0.562 1.743 -0.357 -0.562 -0.979 -0.623 0.201 1.741 0.589 + 313.90 13.544 13.547 13.553 -0.286 -0.416 1.431 -0.286 -0.416 -0.596 -0.409 0.119 1.152 0.366 + 313.95 13.393 13.400 13.412 -0.417 -0.585 1.280 -0.417 -0.585 -0.749 -0.534 0.244 1.078 0.476 + 314.00 13.425 13.434 13.438 -0.473 -0.353 1.312 -0.473 -0.353 -0.463 -0.621 0.167 1.036 0.396 + 314.05 13.616 13.618 13.619 -0.228 -0.181 1.503 -0.228 -0.181 -0.272 -0.343 0.041 1.172 0.220 + 314.10 13.592 13.612 13.612 -0.741 0.035 1.479 -0.741 0.035 0.051 -1.096 -0.026 1.370 0.549 + 314.15 13.634 13.664 13.664 -0.908 -0.023 1.521 -0.908 -0.023 -0.034 -1.381 0.021 1.569 0.691 + 314.20 13.924 13.950 13.952 -0.853 -0.232 1.811 -0.853 -0.232 -0.420 -1.546 0.198 2.031 0.807 + 314.25 13.874 13.918 13.920 -1.100 -0.277 1.761 -1.100 -0.277 -0.487 -1.937 0.304 2.194 1.010 + 314.30 14.201 14.247 14.250 -1.141 -0.283 2.088 -1.141 -0.283 -0.592 -2.383 0.323 2.872 1.238 + 314.35 14.252 14.314 14.321 -1.327 -0.462 2.140 -1.327 -0.462 -0.988 -2.839 0.613 3.276 1.534 + 314.40 14.089 14.157 14.157 -1.387 -0.134 1.976 -1.387 -0.134 -0.265 -2.741 0.186 2.923 1.380 + 314.45 14.261 14.366 14.368 -1.738 -0.240 2.148 -1.738 -0.240 -0.515 -3.734 0.416 3.847 1.896 + 314.50 14.644 14.713 14.717 -1.425 -0.358 2.531 -1.425 -0.358 -0.906 -3.607 0.510 4.283 1.877 + 314.55 14.382 14.463 14.463 -1.531 -0.084 2.269 -1.531 -0.084 -0.190 -3.474 0.128 3.750 1.741 + 314.60 14.512 14.564 14.566 -1.233 -0.265 2.399 -1.233 -0.265 -0.636 -2.957 0.327 3.672 1.521 + 314.65 14.454 14.531 14.533 -1.494 -0.240 2.341 -1.494 -0.240 -0.562 -3.498 0.359 3.885 1.780 + 314.70 14.475 14.540 14.542 -1.373 -0.238 2.362 -1.373 -0.238 -0.561 -3.242 0.326 3.760 1.653 + 314.75 14.432 14.505 14.511 -1.453 -0.420 2.319 -1.453 -0.420 -0.975 -3.370 0.611 3.833 1.780 + 314.80 13.999 14.080 14.090 -1.506 -0.526 1.886 -1.506 -0.526 -0.992 -2.842 0.792 3.052 1.556 + 314.85 13.713 13.790 13.793 -1.458 -0.263 1.600 -1.458 -0.263 -0.420 -2.333 0.383 2.378 1.201 + 314.90 13.524 13.550 13.550 -0.835 -0.090 1.411 -0.835 -0.090 -0.127 -1.178 0.075 1.349 0.594 + 314.95 13.500 13.555 13.556 -1.217 -0.190 1.387 -1.217 -0.190 -0.263 -1.688 0.231 1.721 0.862 + 315.00 13.352 13.393 13.401 -1.050 -0.457 1.239 -1.050 -0.457 -0.567 -1.301 0.480 1.424 0.749 + 315.05 12.996 13.024 13.029 -0.847 -0.363 0.883 -0.847 -0.363 -0.321 -0.748 0.308 0.815 0.435 + 315.10 13.238 13.272 13.280 -0.949 -0.477 1.125 -0.949 -0.477 -0.536 -1.067 0.452 1.197 0.639 + 315.15 13.545 13.571 13.583 -0.846 -0.576 1.432 -0.846 -0.576 -0.824 -1.212 0.487 1.549 0.772 + 315.20 13.753 13.765 13.772 -0.562 -0.455 1.640 -0.562 -0.455 -0.747 -0.922 0.256 1.607 0.607 + 315.25 13.971 13.984 13.995 -0.596 -0.554 1.859 -0.596 -0.554 -1.030 -1.107 0.330 2.058 0.774 + 315.30 14.157 14.192 14.206 -0.995 -0.646 2.044 -0.995 -0.646 -1.320 -2.033 0.643 2.792 1.254 + 315.35 14.075 14.097 14.136 -0.797 -1.044 1.962 -0.797 -1.044 -2.048 -1.565 0.832 2.788 1.354 + 315.40 14.136 14.158 14.171 -0.784 -0.612 2.023 -0.784 -0.612 -1.239 -1.586 0.480 2.541 1.035 + 315.45 14.024 14.028 14.031 -0.350 -0.287 1.911 -0.350 -0.287 -0.549 -0.668 0.101 1.929 0.435 + 315.50 14.046 14.047 14.048 -0.230 -0.092 1.933 -0.230 -0.092 -0.178 -0.445 0.021 1.899 0.240 + 315.55 14.186 14.188 14.189 -0.224 0.174 2.073 -0.224 0.174 0.360 -0.464 -0.039 2.190 0.294 + 315.60 14.078 14.086 14.087 -0.493 0.093 1.965 -0.493 0.093 0.183 -0.970 -0.046 2.056 0.494 + 315.65 14.125 14.140 14.141 -0.649 0.156 2.012 -0.649 0.156 0.313 -1.306 -0.101 2.247 0.674 + 315.70 14.236 14.247 14.251 -0.569 0.300 2.123 -0.569 0.300 0.637 -1.207 -0.171 2.461 0.688 + 315.75 14.275 14.283 14.296 -0.477 0.607 2.162 -0.477 0.607 1.313 -1.031 -0.289 2.636 0.847 + 315.80 14.276 14.278 14.293 -0.247 0.671 2.163 -0.247 0.671 1.451 -0.533 -0.165 2.594 0.777 + 315.85 14.085 14.088 14.096 -0.315 0.463 1.972 -0.315 0.463 0.913 -0.622 -0.146 2.101 0.557 + 315.90 14.120 14.121 14.125 -0.190 0.332 2.007 -0.190 0.332 0.666 -0.381 -0.063 2.087 0.385 + 315.95 14.389 14.390 14.390 -0.175 0.027 2.276 -0.175 0.027 0.061 -0.397 -0.005 2.606 0.201 + 316.00 14.391 14.395 14.397 -0.335 -0.238 2.279 -0.335 -0.238 -0.543 -0.763 0.080 2.681 0.470 + 316.05 14.211 14.211 14.215 -0.110 -0.341 2.098 -0.110 -0.341 -0.716 -0.231 0.038 2.265 0.376 + 316.10 14.289 14.291 14.302 0.255 -0.557 2.176 0.255 -0.557 -1.213 0.554 -0.142 2.555 0.670 + 316.15 14.511 14.515 14.527 0.322 -0.600 2.398 0.322 -0.600 -1.439 0.771 -0.193 3.107 0.822 + 316.20 14.418 14.420 14.424 0.191 -0.351 2.306 0.191 -0.351 -0.809 0.441 -0.067 2.738 0.462 + 316.25 14.181 14.181 14.181 0.093 -0.017 2.068 0.093 -0.017 -0.035 0.192 -0.002 2.143 0.097 + 316.30 13.900 13.901 13.902 0.127 -0.147 1.788 0.127 -0.147 -0.263 0.228 -0.019 1.617 0.174 + 316.35 13.687 13.688 13.692 -0.162 -0.320 1.574 -0.162 -0.320 -0.503 -0.255 0.052 1.303 0.283 + 316.40 13.647 13.648 13.652 -0.157 -0.338 1.534 -0.157 -0.338 -0.519 -0.241 0.053 1.246 0.287 + 316.45 13.675 13.675 13.676 0.087 -0.166 1.562 0.087 -0.166 -0.259 0.137 -0.015 1.237 0.147 + 316.50 13.657 13.657 13.659 -0.068 -0.231 1.544 -0.068 -0.231 -0.357 -0.105 0.016 1.221 0.186 + 316.55 13.381 13.382 13.383 -0.162 -0.099 1.269 -0.162 -0.099 -0.126 -0.206 0.016 0.823 0.121 + 316.60 13.308 13.308 13.308 0.075 0.001 1.195 0.075 0.001 0.002 0.090 0.000 0.716 0.045 + 316.65 13.722 13.725 13.726 0.287 0.062 1.610 0.287 0.062 0.100 0.461 0.018 1.338 0.236 + 316.70 13.811 13.822 13.822 0.545 0.084 1.698 0.545 0.084 0.142 0.926 0.046 1.594 0.469 + 316.75 13.689 13.691 13.691 0.247 0.054 1.576 0.247 0.054 0.085 0.389 0.013 1.274 0.199 + 316.80 13.643 13.643 13.647 -0.006 -0.359 1.530 -0.006 -0.359 -0.549 -0.009 0.002 1.235 0.275 + 316.85 13.873 13.878 13.879 0.350 -0.201 1.760 0.350 -0.201 -0.355 0.617 -0.071 1.631 0.357 + 316.90 13.726 13.726 13.726 0.132 -0.017 1.613 0.132 -0.017 -0.027 0.212 -0.002 1.309 0.107 + 316.95 13.685 13.686 13.686 -0.130 -0.020 1.572 -0.130 -0.020 -0.032 -0.205 0.003 1.245 0.104 + 317.00 13.534 13.534 13.535 0.078 0.076 1.421 0.078 0.076 0.108 0.111 0.006 1.016 0.077 + 317.05 13.588 13.605 13.606 0.669 -0.182 1.475 0.669 -0.182 -0.269 0.987 -0.122 1.329 0.515 + 317.10 13.762 13.768 13.772 0.386 -0.322 1.650 0.386 -0.322 -0.531 0.637 -0.124 1.487 0.419 + 317.15 13.327 13.341 13.344 0.624 0.254 1.214 0.624 0.254 0.308 0.757 0.158 0.964 0.416 + 317.20 13.079 13.084 13.090 0.371 0.386 0.966 0.371 0.386 0.373 0.358 0.143 0.610 0.268 + 317.25 13.078 13.102 13.109 0.798 0.437 0.965 0.798 0.437 0.422 0.769 0.349 0.879 0.472 + 317.30 13.383 13.409 13.416 0.823 0.444 1.270 0.823 0.444 0.564 1.046 0.365 1.244 0.622 + 317.35 13.292 13.327 13.334 0.970 0.409 1.179 0.970 0.409 0.482 1.144 0.397 1.249 0.652 + 317.40 12.988 13.043 13.044 1.197 0.122 0.875 1.197 0.122 0.107 1.048 0.147 1.107 0.532 + 317.45 13.084 13.137 13.137 1.177 0.010 0.972 1.177 0.010 0.010 1.143 0.012 1.164 0.572 + 317.50 13.343 13.360 13.360 0.659 -0.009 1.231 0.659 -0.009 -0.011 0.811 -0.006 0.974 0.405 + 317.55 13.265 13.273 13.273 0.461 -0.033 1.152 0.461 -0.033 -0.038 0.531 -0.015 0.770 0.266 + 317.60 12.960 12.963 12.965 0.263 -0.235 0.848 0.263 -0.235 -0.199 0.223 -0.062 0.421 0.153 + 317.65 12.884 12.884 12.886 -0.075 -0.197 0.771 -0.075 -0.197 -0.152 -0.058 0.015 0.320 0.082 + 317.70 12.866 12.866 12.873 0.011 -0.429 0.753 0.011 -0.429 -0.323 0.008 -0.005 0.376 0.162 + 317.75 13.042 13.043 13.055 -0.084 -0.566 0.930 -0.084 -0.566 -0.526 -0.078 0.047 0.596 0.267 + 317.80 13.205 13.207 13.221 -0.208 -0.609 1.093 -0.208 -0.609 -0.666 -0.228 0.127 0.804 0.357 + 317.85 12.988 12.988 13.000 -0.019 -0.554 0.875 -0.019 -0.554 -0.485 -0.017 0.011 0.536 0.242 + 317.90 13.084 13.085 13.106 0.218 -0.732 0.971 0.218 -0.732 -0.711 0.212 -0.160 0.763 0.379 + 317.95 13.392 13.392 13.435 -0.025 -1.075 1.279 -0.025 -1.075 -1.375 -0.033 0.027 1.397 0.688 + 318.00 13.203 13.203 13.244 -0.047 -1.047 1.090 -0.047 -1.047 -1.141 -0.051 0.049 1.143 0.571 + 318.05 13.255 13.255 13.284 0.089 -0.871 1.142 0.089 -0.871 -0.995 0.102 -0.078 1.036 0.502 + 318.10 13.299 13.299 13.326 0.087 -0.843 1.186 0.087 -0.843 -0.999 0.103 -0.073 1.062 0.504 + 318.15 13.202 13.208 13.232 0.398 -0.798 1.089 0.398 -0.798 -0.869 0.434 -0.318 0.990 0.511 + 318.20 13.129 13.163 13.195 0.948 -0.922 1.016 0.948 -0.922 -0.937 0.963 -0.874 1.390 0.801 + 318.25 13.364 13.390 13.402 0.846 -0.569 1.251 0.846 -0.569 -0.712 1.058 -0.482 1.302 0.682 + 318.30 13.559 13.577 13.616 0.692 -1.039 1.446 0.692 -1.039 -1.503 1.000 -0.719 1.825 0.972 + 318.35 13.116 13.131 13.180 0.640 -1.135 1.003 0.640 -1.135 -1.138 0.641 -0.726 1.351 0.747 + 318.40 13.179 13.190 13.243 0.543 -1.181 1.066 0.543 -1.181 -1.260 0.579 -0.641 1.414 0.764 + 318.45 12.930 12.934 12.997 0.328 -1.275 0.817 0.328 -1.275 -1.042 0.269 -0.419 1.200 0.577 + 318.50 12.957 12.961 13.053 0.325 -1.546 0.844 0.325 -1.546 -1.305 0.274 -0.503 1.604 0.713 + 318.55 12.841 12.845 12.933 0.316 -1.506 0.728 0.316 -1.506 -1.097 0.230 -0.476 1.450 0.609 + 318.60 13.058 13.058 13.171 -0.070 -1.723 0.945 -0.070 -1.723 -1.628 -0.066 0.121 1.933 0.817 + 318.65 13.166 13.170 13.263 0.338 -1.565 1.053 0.338 -1.565 -1.648 0.356 -0.529 1.836 0.883 + 318.70 13.086 13.086 13.162 -0.064 -1.416 0.973 -0.064 -1.416 -1.378 -0.063 0.091 1.478 0.691 + 318.75 13.114 13.115 13.171 -0.153 -1.214 1.001 -0.153 -1.214 -1.215 -0.154 0.186 1.250 0.620 + 318.80 13.498 13.499 13.561 -0.218 -1.287 1.385 -0.218 -1.287 -1.782 -0.302 0.280 1.811 0.915 + 318.85 13.429 13.446 13.496 -0.657 -1.163 1.317 -0.657 -1.163 -1.531 -0.865 0.764 1.759 0.959 + 318.90 13.246 13.268 13.297 -0.768 -0.881 1.133 -0.768 -0.881 -0.998 -0.870 0.676 1.324 0.743 + 318.95 13.214 13.226 13.246 -0.563 -0.725 1.101 -0.563 -0.725 -0.799 -0.620 0.408 1.028 0.545 + 319.00 12.937 12.947 12.970 -0.522 -0.763 0.824 -0.522 -0.763 -0.629 -0.430 0.398 0.767 0.430 + 319.05 13.159 13.177 13.199 -0.685 -0.749 1.047 -0.685 -0.749 -0.784 -0.717 0.513 1.063 0.590 + 319.10 12.977 12.985 13.038 -0.460 -1.180 0.864 -0.460 -1.180 -1.019 -0.397 0.543 1.175 0.611 + 319.15 13.102 13.108 13.185 -0.420 -1.422 0.989 -0.420 -1.422 -1.406 -0.415 0.598 1.588 0.792 + 319.20 12.953 12.954 13.008 -0.174 -1.175 0.840 -0.174 -1.175 -0.988 -0.146 0.204 1.059 0.510 + 319.25 12.975 12.977 13.038 -0.191 -1.258 0.863 -0.191 -1.258 -1.085 -0.165 0.240 1.181 0.562 + 319.30 13.059 13.059 13.118 0.010 -1.236 0.947 0.010 -1.236 -1.170 0.009 -0.012 1.212 0.585 + 319.35 12.803 12.803 12.906 0.093 -1.628 0.690 0.093 -1.628 -1.123 0.064 -0.151 1.568 0.568 + 319.40 12.671 12.680 12.744 0.478 -1.277 0.558 0.478 -1.277 -0.713 0.267 -0.610 1.086 0.488 + 319.45 12.652 12.659 12.719 0.442 -1.230 0.539 0.442 -1.230 -0.663 0.238 -0.543 0.999 0.445 + 319.50 12.632 12.643 12.691 0.525 -1.107 0.519 0.525 -1.107 -0.574 0.273 -0.581 0.885 0.431 + 319.55 12.504 12.530 12.548 0.802 -0.666 0.392 0.802 -0.666 -0.261 0.314 -0.535 0.621 0.336 + 319.60 12.508 12.530 12.556 0.737 -0.806 0.395 0.737 -0.806 -0.319 0.291 -0.594 0.675 0.367 + 319.65 12.679 12.682 12.691 0.253 -0.481 0.566 0.253 -0.481 -0.273 0.143 -0.122 0.308 0.166 + 319.70 12.752 12.759 12.779 0.423 -0.727 0.639 0.423 -0.727 -0.464 0.270 -0.307 0.558 0.310 + 319.75 12.799 12.808 12.843 0.460 -0.946 0.687 0.460 -0.946 -0.649 0.316 -0.435 0.789 0.422 + 319.80 12.891 12.901 12.944 0.497 -1.054 0.778 0.497 -1.054 -0.820 0.387 -0.524 0.982 0.524 + 319.85 13.254 13.269 13.334 0.630 -1.315 1.141 0.630 -1.315 -1.501 0.719 -0.829 1.715 0.930 + 319.90 13.465 13.470 13.529 0.364 -1.262 1.352 0.364 -1.262 -1.707 0.493 -0.460 1.777 0.917 + 319.95 13.196 13.196 13.263 0.041 -1.340 1.083 0.041 -1.340 -1.450 0.044 -0.054 1.484 0.726 + 320.00 13.253 13.253 13.314 0.058 -1.273 1.140 0.058 -1.273 -1.452 0.066 -0.074 1.462 0.728 + 320.05 13.098 13.098 13.124 0.111 -0.824 0.985 0.111 -0.824 -0.812 0.109 -0.091 0.831 0.412 + 320.10 12.984 12.988 13.023 0.340 -0.955 0.871 0.340 -0.955 -0.832 0.296 -0.324 0.893 0.470 + 320.15 12.846 12.848 12.864 0.212 -0.631 0.734 0.212 -0.631 -0.463 0.155 -0.134 0.491 0.253 + 320.20 12.858 12.862 12.877 0.319 -0.605 0.746 0.319 -0.605 -0.451 0.238 -0.193 0.512 0.273 + 320.25 12.895 12.895 12.910 0.067 -0.628 0.782 0.067 -0.628 -0.491 0.053 -0.042 0.505 0.248 + 320.30 12.737 12.737 12.749 -0.018 -0.561 0.624 -0.018 -0.561 -0.350 -0.011 0.010 0.352 0.175 + 320.35 12.400 12.400 12.407 0.089 -0.411 0.287 0.089 -0.411 -0.118 0.026 -0.037 0.130 0.063 + 320.40 12.393 12.395 12.409 -0.222 -0.582 0.280 -0.222 -0.582 -0.163 -0.062 0.129 0.234 0.109 + 320.45 12.812 12.812 12.859 -0.082 -1.092 0.699 -0.082 -1.092 -0.764 -0.058 0.090 0.845 0.386 + 320.50 12.984 12.985 13.011 -0.163 -0.812 0.872 -0.163 -0.812 -0.707 -0.142 0.133 0.723 0.367 + 320.55 12.678 12.679 12.693 -0.141 -0.590 0.565 -0.141 -0.590 -0.333 -0.080 0.083 0.344 0.176 + 320.60 12.639 12.639 12.644 -0.031 -0.359 0.526 -0.031 -0.359 -0.189 -0.016 0.011 0.204 0.095 + 320.65 12.586 12.591 12.597 -0.368 -0.388 0.473 -0.368 -0.388 -0.184 -0.174 0.143 0.255 0.145 + 320.70 12.562 12.567 12.570 -0.346 -0.290 0.450 -0.346 -0.290 -0.130 -0.156 0.100 0.203 0.113 + 320.75 12.408 12.418 12.422 -0.498 -0.296 0.295 -0.498 -0.296 -0.087 -0.147 0.147 0.211 0.113 + 320.80 12.375 12.381 12.383 -0.379 -0.230 0.262 -0.379 -0.230 -0.060 -0.099 0.087 0.133 0.073 + 320.85 12.125 12.130 12.130 -0.360 -0.036 0.012 -0.360 -0.036 -0.000 -0.004 0.013 0.065 0.007 + 320.90 12.148 12.149 12.153 -0.158 -0.292 0.036 -0.158 -0.292 -0.010 -0.006 0.046 0.056 0.024 + 320.95 11.970 11.971 11.973 -0.199 -0.198 -0.143 -0.199 -0.198 0.028 0.028 0.039 0.050 0.028 + 321.00 11.801 11.811 11.811 -0.504 -0.008 -0.312 -0.504 -0.008 0.003 0.157 0.004 0.176 0.079 + 321.05 11.603 11.625 11.627 -0.728 -0.187 -0.510 -0.728 -0.187 0.095 0.371 0.136 0.412 0.203 + 321.10 11.836 11.849 11.849 -0.552 -0.046 -0.277 -0.552 -0.046 0.013 0.153 0.026 0.192 0.078 + 321.15 11.873 11.874 11.881 -0.195 0.404 -0.240 -0.195 0.404 -0.097 0.047 -0.079 0.129 0.067 + 321.20 11.818 11.819 11.819 0.180 0.001 -0.295 0.180 0.001 -0.000 -0.053 0.000 0.060 0.027 + 321.25 11.593 11.600 11.603 0.406 0.266 -0.520 0.406 0.266 -0.138 -0.211 0.108 0.253 0.137 + 321.30 11.692 11.693 11.693 0.124 0.030 -0.420 0.124 0.030 -0.013 -0.052 0.004 0.097 0.027 + 321.35 11.665 11.666 11.666 0.111 -0.059 -0.447 0.111 -0.059 0.027 -0.050 -0.007 0.108 0.028 + 321.40 11.430 11.435 11.437 0.363 -0.172 -0.683 0.363 -0.172 0.118 -0.248 -0.063 0.314 0.141 + 321.45 11.314 11.322 11.323 0.440 -0.119 -0.799 0.440 -0.119 0.095 -0.352 -0.053 0.423 0.184 + 321.50 11.412 11.423 11.424 0.506 -0.172 -0.701 0.506 -0.172 0.121 -0.355 -0.087 0.389 0.192 + 321.55 11.279 11.290 11.290 0.485 -0.073 -0.834 0.485 -0.073 0.061 -0.405 -0.036 0.468 0.205 + 321.60 11.295 11.318 11.319 0.732 -0.156 -0.818 0.732 -0.156 0.128 -0.599 -0.114 0.615 0.311 + 321.65 10.928 10.947 10.951 0.644 0.314 -1.185 0.644 0.314 -0.372 -0.763 0.202 0.959 0.437 + 321.70 11.085 11.092 11.100 0.378 0.431 -1.027 0.378 0.431 -0.442 -0.388 0.163 0.692 0.305 + 321.75 11.170 11.170 11.182 0.006 0.506 -0.942 0.006 0.506 -0.477 -0.005 0.003 0.572 0.239 + 321.80 11.335 11.335 11.380 -0.031 1.006 -0.778 -0.031 1.006 -0.782 0.024 -0.031 0.809 0.392 + 321.85 11.208 11.208 11.253 0.119 0.997 -0.905 0.119 0.997 -0.903 -0.108 0.119 0.914 0.458 + 321.90 10.984 10.985 11.014 -0.098 0.799 -1.128 -0.098 0.799 -0.902 0.111 -0.079 0.961 0.456 + 321.95 11.284 11.285 11.294 -0.156 0.455 -0.829 -0.156 0.455 -0.378 0.129 -0.071 0.460 0.203 + 322.00 11.176 11.176 11.178 -0.035 -0.199 -0.937 -0.035 -0.199 0.186 0.033 0.007 0.459 0.095 + 322.05 11.525 11.525 11.533 0.071 -0.428 -0.588 0.071 -0.428 0.252 -0.042 -0.030 0.267 0.128 + 322.10 11.570 11.570 11.570 0.124 -0.016 -0.543 0.124 -0.016 0.009 -0.067 -0.002 0.155 0.034 + 322.15 11.110 11.111 11.111 0.158 0.070 -1.003 0.158 0.070 -0.070 -0.158 0.011 0.518 0.087 + 322.20 11.178 11.183 11.183 0.329 -0.051 -0.935 0.329 -0.051 0.047 -0.308 -0.017 0.493 0.156 + 322.25 11.242 11.243 11.243 -0.123 -0.041 -0.870 -0.123 -0.041 0.036 0.107 0.005 0.387 0.057 + 322.30 11.146 11.146 11.147 -0.014 0.141 -0.967 -0.014 0.141 -0.137 0.013 -0.002 0.477 0.069 + 322.35 11.224 11.225 11.229 -0.128 0.309 -0.889 -0.128 0.309 -0.274 0.113 -0.039 0.451 0.150 + 322.40 11.091 11.093 11.107 -0.192 0.551 -1.021 -0.192 0.551 -0.563 0.196 -0.106 0.692 0.303 + 322.45 10.809 10.816 10.841 -0.390 0.728 -1.303 -0.390 0.728 -0.948 0.508 -0.284 1.190 0.556 + 322.50 10.735 10.751 10.770 -0.571 0.648 -1.377 -0.571 0.648 -0.893 0.786 -0.370 1.322 0.623 + 322.55 11.082 11.092 11.094 -0.468 0.232 -1.031 -0.468 0.232 -0.240 0.483 -0.109 0.668 0.275 + 322.60 10.917 10.928 10.944 -0.486 0.589 -1.196 -0.486 0.589 -0.704 0.581 -0.286 1.006 0.478 + 322.65 10.929 10.939 10.962 -0.459 0.710 -1.183 -0.459 0.710 -0.841 0.544 -0.326 1.058 0.526 + 322.70 11.251 11.260 11.289 -0.452 0.807 -0.862 -0.452 0.807 -0.695 0.390 -0.365 0.799 0.438 + 322.75 11.189 11.207 11.247 -0.630 0.949 -0.923 -0.630 0.949 -0.876 0.582 -0.598 1.075 0.605 + 322.80 11.094 11.107 11.119 -0.532 0.532 -1.019 -0.532 0.532 -0.543 0.542 -0.283 0.802 0.409 + 322.85 11.089 11.112 11.137 -0.726 0.738 -1.024 -0.726 0.738 -0.756 0.744 -0.536 1.060 0.594 + 322.90 11.155 11.188 11.192 -0.859 0.326 -0.958 -0.859 0.326 -0.312 0.823 -0.280 0.881 0.462 + 322.95 11.188 11.226 11.227 -0.917 -0.141 -0.924 -0.917 -0.141 0.130 0.847 0.129 0.857 0.433 + 323.00 11.347 11.385 11.386 -0.932 0.068 -0.766 -0.932 0.068 -0.052 0.713 -0.064 0.729 0.359 + 323.05 11.507 11.557 11.561 -1.078 0.272 -0.606 -1.078 0.272 -0.164 0.653 -0.293 0.801 0.367 + 323.10 11.407 11.470 11.500 -1.201 0.822 -0.706 -1.201 0.822 -0.580 0.847 -0.988 1.308 0.712 + 323.15 11.416 11.488 11.519 -1.285 0.836 -0.697 -1.285 0.836 -0.583 0.895 -1.075 1.418 0.758 + 323.20 11.600 11.654 11.702 -1.111 1.058 -0.512 -1.111 1.058 -0.542 0.569 -1.176 1.309 0.707 + 323.25 11.685 11.722 11.779 -0.938 1.157 -0.428 -0.938 1.157 -0.495 0.401 -1.085 1.201 0.629 + 323.30 11.603 11.633 11.657 -0.834 0.746 -0.509 -0.834 0.746 -0.380 0.425 -0.622 0.756 0.422 + 323.35 11.523 11.548 11.573 -0.755 0.762 -0.590 -0.755 0.762 -0.449 0.445 -0.575 0.749 0.428 + 323.40 11.671 11.715 11.738 -1.013 0.725 -0.441 -1.013 0.725 -0.320 0.447 -0.734 0.873 0.459 + 323.45 11.839 11.910 11.920 -1.291 0.498 -0.273 -1.291 0.498 -0.136 0.353 -0.643 0.995 0.373 + 323.50 11.796 11.867 11.892 -1.293 0.783 -0.317 -1.293 0.783 -0.248 0.410 -1.013 1.193 0.560 + 323.55 11.968 12.047 12.067 -1.374 0.704 -0.145 -1.374 0.704 -0.102 0.199 -0.968 1.203 0.496 + 323.60 11.986 12.082 12.111 -1.524 0.836 -0.127 -1.524 0.836 -0.106 0.193 -1.274 1.518 0.646 + 323.65 12.019 12.146 12.189 -1.755 1.015 -0.094 -1.755 1.015 -0.095 0.165 -1.782 2.060 0.896 + 323.70 12.096 12.259 12.318 -1.988 1.204 -0.016 -1.988 1.204 -0.020 0.033 -2.393 2.701 1.197 + 323.75 11.828 11.916 11.984 -1.443 1.282 -0.285 -1.443 1.282 -0.365 0.411 -1.850 1.904 0.965 + 323.80 11.893 11.989 12.026 -1.514 0.941 -0.220 -1.514 0.941 -0.207 0.332 -1.425 1.613 0.739 + 323.85 11.910 11.971 11.995 -1.201 0.761 -0.202 -1.201 0.761 -0.154 0.243 -0.914 1.032 0.479 + 323.90 12.254 12.297 12.312 -1.027 0.610 0.141 -1.027 0.610 0.086 -0.145 -0.626 0.723 0.324 + 323.95 12.148 12.203 12.213 -1.154 0.496 0.035 -1.154 0.496 0.018 -0.041 -0.572 0.789 0.287 + 324.00 12.039 12.069 12.076 -0.854 0.406 -0.074 -0.854 0.406 -0.030 0.063 -0.346 0.450 0.177 + 324.05 12.237 12.266 12.274 -0.841 0.457 0.124 -0.841 0.457 0.057 -0.104 -0.385 0.466 0.201 + 324.10 12.204 12.239 12.252 -0.929 0.562 0.091 -0.929 0.562 0.051 -0.085 -0.522 0.593 0.266 + 324.15 12.615 12.652 12.716 -0.969 1.271 0.502 -0.969 1.271 0.638 -0.487 -1.232 1.404 0.735 + 324.20 12.304 12.330 12.396 -0.805 1.275 0.191 -0.805 1.275 0.243 -0.154 -1.026 1.155 0.533 + 324.25 12.329 12.345 12.406 -0.615 1.233 0.217 -0.615 1.233 0.267 -0.133 -0.758 0.973 0.407 + 324.30 12.279 12.286 12.381 -0.420 1.531 0.166 -0.420 1.531 0.254 -0.070 -0.642 1.274 0.347 + 324.35 12.328 12.338 12.428 -0.477 1.495 0.216 -0.477 1.495 0.322 -0.103 -0.713 1.255 0.395 + 324.40 12.286 12.292 12.355 -0.402 1.247 0.173 -0.402 1.247 0.216 -0.069 -0.501 0.874 0.275 + 324.45 12.473 12.490 12.540 -0.648 1.121 0.361 -0.648 1.121 0.404 -0.234 -0.726 0.903 0.431 + 324.50 12.291 12.321 12.353 -0.867 0.888 0.178 -0.867 0.888 0.158 -0.154 -0.770 0.786 0.400 + 324.55 12.421 12.442 12.490 -0.722 1.093 0.308 -0.722 1.093 0.337 -0.223 -0.789 0.905 0.443 + 324.60 12.512 12.541 12.589 -0.855 1.104 0.399 -0.855 1.104 0.440 -0.341 -0.944 1.055 0.548 + 324.65 12.499 12.517 12.564 -0.669 1.094 0.386 -0.669 1.094 0.422 -0.258 -0.732 0.896 0.442 + 324.70 12.587 12.589 12.697 -0.204 1.650 0.475 -0.204 1.650 0.783 -0.097 -0.336 1.495 0.429 + 324.75 12.438 12.448 12.520 -0.487 1.340 0.325 -0.487 1.340 0.436 -0.158 -0.652 1.069 0.400 + 324.80 12.483 12.518 12.579 -0.936 1.236 0.370 -0.936 1.236 0.457 -0.346 -1.157 1.270 0.645 + 324.85 12.344 12.386 12.479 -1.025 1.517 0.231 -1.025 1.517 0.350 -0.237 -1.555 1.702 0.806 + 324.90 12.401 12.443 12.546 -1.026 1.601 0.288 -1.026 1.601 0.462 -0.296 -1.642 1.849 0.866 + 324.95 12.234 12.277 12.393 -1.028 1.691 0.121 -1.028 1.691 0.205 -0.124 -1.738 1.965 0.877 + 325.00 12.117 12.165 12.287 -1.083 1.726 0.004 -1.083 1.726 0.007 -0.004 -1.869 2.076 0.935 + 325.05 12.352 12.408 12.506 -1.179 1.560 0.239 -1.179 1.560 0.373 -0.282 -1.838 1.939 0.948 + 325.10 12.495 12.565 12.618 -1.327 1.151 0.382 -1.327 1.151 0.440 -0.507 -1.528 1.616 0.834 + 325.15 12.504 12.570 12.615 -1.292 1.060 0.391 -1.292 1.060 0.415 -0.505 -1.370 1.473 0.759 + 325.20 12.549 12.598 12.654 -1.118 1.180 0.436 -1.118 1.180 0.514 -0.487 -1.319 1.416 0.749 + 325.25 12.805 12.867 12.920 -1.265 1.171 0.692 -1.265 1.171 0.810 -0.875 -1.481 1.725 0.951 + 325.30 12.930 12.989 13.036 -1.236 1.105 0.817 -1.236 1.105 0.903 -1.010 -1.366 1.709 0.962 + 325.35 12.679 12.785 12.837 -1.644 1.160 0.566 -1.644 1.160 0.656 -0.930 -1.907 2.184 1.110 + 325.40 12.461 12.531 12.569 -1.318 0.977 0.349 -1.318 0.977 0.340 -0.459 -1.287 1.406 0.704 + 325.45 12.344 12.376 12.399 -0.899 0.755 0.231 -0.899 0.755 0.174 -0.208 -0.679 0.716 0.366 + 325.50 12.115 12.160 12.215 -1.046 1.156 0.002 -1.046 1.156 0.002 -0.002 -1.209 1.215 0.604 + 325.55 11.895 11.954 12.020 -1.185 1.261 -0.218 -1.185 1.261 -0.274 0.258 -1.494 1.521 0.770 + 325.60 11.635 11.666 11.718 -0.850 1.097 -0.478 -0.850 1.097 -0.524 0.406 -0.932 1.077 0.572 + 325.65 11.424 11.438 11.506 -0.558 1.251 -0.689 -0.558 1.251 -0.861 0.384 -0.698 1.175 0.587 + 325.70 11.355 11.372 11.433 -0.612 1.180 -0.757 -0.612 1.180 -0.893 0.464 -0.722 1.170 0.619 + 325.75 11.469 11.476 11.523 -0.395 1.036 -0.644 -0.395 1.036 -0.666 0.254 -0.410 0.822 0.411 + 325.80 11.521 11.525 11.562 -0.294 0.936 -0.592 -0.294 0.936 -0.554 0.174 -0.275 0.656 0.321 + 325.85 11.497 11.499 11.516 -0.238 0.624 -0.616 -0.238 0.624 -0.384 0.146 -0.148 0.413 0.219 + 325.90 11.619 11.623 11.636 -0.300 0.550 -0.494 -0.300 0.550 -0.272 0.148 -0.165 0.318 0.175 + 325.95 11.716 11.716 11.722 0.002 0.354 -0.396 0.002 0.354 -0.140 -0.001 0.001 0.141 0.070 + 326.00 11.815 11.815 11.816 0.023 0.161 -0.298 0.023 0.161 -0.048 -0.007 0.004 0.058 0.024 + 326.05 11.956 11.957 11.957 0.166 0.035 -0.157 0.166 0.035 -0.005 -0.026 0.006 0.027 0.014 + 326.10 11.734 11.734 11.734 -0.037 0.024 -0.379 -0.037 0.024 -0.009 0.014 -0.001 0.073 0.008 + 326.15 11.712 11.713 11.717 -0.175 0.320 -0.401 -0.175 0.320 -0.128 0.070 -0.056 0.147 0.078 + 326.20 12.001 12.005 12.009 -0.316 0.309 -0.112 -0.316 0.309 -0.035 0.035 -0.098 0.104 0.055 + 326.25 12.033 12.041 12.051 -0.443 0.505 -0.080 -0.443 0.505 -0.040 0.035 -0.224 0.229 0.115 + 326.30 12.239 12.242 12.249 -0.251 0.412 0.126 -0.251 0.412 0.052 -0.032 -0.104 0.125 0.060 + 326.35 12.495 12.496 12.505 -0.178 0.458 0.382 -0.178 0.458 0.175 -0.068 -0.082 0.194 0.102 + 326.40 12.772 12.772 12.772 0.001 0.089 0.659 0.001 0.089 0.059 0.001 0.000 0.221 0.029 + 326.45 12.575 12.575 12.577 0.010 0.222 0.462 0.010 0.222 0.103 0.005 0.002 0.132 0.051 + 326.50 12.677 12.683 12.692 0.410 0.469 0.564 0.410 0.469 0.264 0.231 0.192 0.353 0.200 + 326.55 12.665 12.667 12.683 0.229 0.623 0.552 0.229 0.623 0.344 0.127 0.143 0.373 0.197 + 326.60 12.483 12.484 12.507 -0.198 0.760 0.370 -0.198 0.760 0.281 -0.073 -0.151 0.377 0.164 + 326.65 12.788 12.790 12.793 -0.201 0.296 0.675 -0.201 0.296 0.200 -0.135 -0.059 0.292 0.124 + 326.70 12.542 12.543 12.543 -0.193 0.052 0.429 -0.193 0.052 0.022 -0.083 -0.010 0.112 0.043 + 326.75 12.315 12.316 12.318 -0.191 0.210 0.202 -0.191 0.210 0.042 -0.039 -0.040 0.061 0.035 + 326.80 12.707 12.707 12.713 -0.100 0.364 0.594 -0.100 0.364 0.216 -0.059 -0.036 0.248 0.114 + 326.85 12.699 12.701 12.703 -0.211 0.213 0.587 -0.211 0.213 0.125 -0.124 -0.045 0.217 0.091 + 326.90 12.792 12.798 12.801 -0.362 -0.302 0.680 -0.362 -0.302 -0.205 -0.246 0.109 0.342 0.169 + 326.95 12.761 12.769 12.770 -0.463 -0.164 0.648 -0.463 -0.164 -0.107 -0.300 0.076 0.331 0.164 + 327.00 12.712 12.713 12.714 -0.167 -0.070 0.600 -0.167 -0.070 -0.042 -0.100 0.012 0.196 0.055 + 327.05 12.341 12.342 12.343 -0.087 0.169 0.229 -0.087 0.169 0.039 -0.020 -0.015 0.044 0.023 + 327.10 12.389 12.394 12.395 -0.367 -0.173 0.276 -0.367 -0.173 -0.048 -0.101 0.064 0.120 0.064 + 327.15 12.811 12.815 12.817 -0.318 -0.198 0.699 -0.318 -0.198 -0.138 -0.222 0.063 0.314 0.135 + 327.20 12.796 12.798 12.798 -0.243 -0.063 0.683 -0.243 -0.063 -0.043 -0.166 0.015 0.265 0.086 + 327.25 12.573 12.576 12.578 -0.256 -0.237 0.460 -0.256 -0.237 -0.109 -0.118 0.061 0.167 0.086 + 327.30 12.732 12.733 12.735 -0.150 -0.190 0.620 -0.150 -0.190 -0.118 -0.093 0.029 0.221 0.076 + 327.35 12.042 12.042 12.042 0.019 -0.010 -0.071 0.019 -0.010 0.001 -0.001 -0.000 0.003 0.001 + 327.40 11.891 11.894 11.896 0.300 0.172 -0.222 0.300 0.172 -0.038 -0.067 0.052 0.084 0.046 + 327.45 11.788 11.793 11.794 0.320 0.171 -0.324 0.320 0.171 -0.055 -0.104 0.055 0.119 0.065 + 327.50 11.759 11.760 11.761 0.205 -0.055 -0.354 0.205 -0.055 0.020 -0.072 -0.011 0.085 0.038 + 327.55 11.627 11.647 11.648 0.681 0.151 -0.486 0.681 0.151 -0.073 -0.331 0.103 0.361 0.177 + 327.60 11.646 11.661 11.663 0.601 0.174 -0.467 0.601 0.174 -0.081 -0.281 0.105 0.305 0.155 + 327.65 11.362 11.362 11.363 0.071 0.108 -0.751 0.071 0.108 -0.081 -0.053 0.008 0.290 0.049 + 327.70 11.356 11.360 11.362 0.305 0.235 -0.757 0.305 0.235 -0.178 -0.231 0.072 0.361 0.150 + 327.75 11.714 11.718 11.721 0.303 0.276 -0.399 0.303 0.276 -0.110 -0.121 0.084 0.164 0.092 + 327.80 11.826 11.826 11.835 0.021 0.468 -0.287 0.021 0.468 -0.134 -0.006 0.010 0.151 0.067 + 327.85 11.896 11.896 11.898 0.105 0.220 -0.217 0.105 0.220 -0.048 -0.023 0.023 0.053 0.029 + 327.90 11.822 11.823 11.826 0.069 0.292 -0.290 0.069 0.292 -0.085 -0.020 0.020 0.087 0.045 + 327.95 11.806 11.806 11.809 -0.113 0.264 -0.307 -0.113 0.264 -0.081 0.035 -0.030 0.088 0.047 + 328.00 11.888 11.891 11.903 -0.279 0.528 -0.225 -0.279 0.528 -0.119 0.063 -0.147 0.204 0.100 + 328.05 11.887 11.897 11.912 -0.490 0.583 -0.225 -0.490 0.583 -0.131 0.110 -0.285 0.315 0.167 + 328.10 11.692 11.707 11.717 -0.599 0.481 -0.421 -0.599 0.481 -0.203 0.252 -0.288 0.383 0.216 + 328.15 11.756 11.770 11.784 -0.568 0.578 -0.357 -0.568 0.578 -0.206 0.202 -0.328 0.392 0.219 + 328.20 11.798 11.805 11.833 -0.425 0.815 -0.315 -0.425 0.815 -0.257 0.134 -0.346 0.472 0.226 + 328.25 12.128 12.132 12.157 -0.305 0.789 0.015 -0.305 0.789 0.012 -0.005 -0.240 0.358 0.120 + 328.30 12.223 12.223 12.252 -0.078 0.839 0.110 -0.078 0.839 0.092 -0.009 -0.065 0.361 0.057 + 328.35 12.444 12.445 12.472 0.158 0.817 0.331 0.158 0.817 0.271 0.052 0.129 0.401 0.152 + 328.40 12.242 12.250 12.289 0.460 0.980 0.129 0.460 0.980 0.126 0.059 0.451 0.595 0.236 + 328.45 12.157 12.167 12.240 0.479 1.341 0.044 0.479 1.341 0.059 0.021 0.642 1.015 0.323 + 328.50 12.418 12.426 12.459 0.459 0.902 0.305 0.459 0.902 0.275 0.140 0.414 0.559 0.258 + 328.55 12.328 12.332 12.395 0.314 1.246 0.215 0.314 1.246 0.268 0.067 0.391 0.849 0.239 + 328.60 12.185 12.196 12.313 0.510 1.697 0.072 0.510 1.697 0.122 0.037 0.866 1.573 0.438 + 328.65 12.015 12.019 12.106 0.330 1.447 -0.098 0.330 1.447 -0.142 -0.032 0.478 1.107 0.250 + 328.70 11.997 11.997 12.059 0.112 1.218 -0.116 0.112 1.218 -0.141 -0.013 0.136 0.754 0.098 + 328.75 12.044 12.045 12.073 0.121 0.834 -0.069 0.121 0.834 -0.057 -0.008 0.101 0.357 0.058 + 328.80 12.094 12.095 12.107 0.108 0.554 -0.018 0.108 0.554 -0.010 -0.002 0.060 0.159 0.030 + 328.85 12.105 12.106 12.112 -0.103 0.382 -0.007 -0.103 0.382 -0.003 0.001 -0.039 0.078 0.020 + 328.90 12.250 12.261 12.284 -0.515 0.752 0.137 -0.515 0.752 0.103 -0.071 -0.387 0.425 0.203 + 328.95 12.174 12.183 12.225 -0.478 1.011 0.061 -0.478 1.011 0.062 -0.029 -0.483 0.627 0.244 + 329.00 12.262 12.297 12.357 -0.927 1.221 0.149 -0.927 1.221 0.182 -0.138 -1.132 1.187 0.578 + 329.05 12.540 12.590 12.648 -1.122 1.203 0.427 -1.122 1.203 0.514 -0.479 -1.350 1.445 0.761 + 329.10 12.965 12.990 13.032 -0.806 1.041 0.853 -0.806 1.041 0.887 -0.687 -0.839 1.230 0.700 + 329.15 12.914 12.940 12.985 -0.824 1.068 0.801 -0.824 1.068 0.856 -0.660 -0.880 1.231 0.697 + 329.20 12.794 12.842 12.903 -1.109 1.246 0.682 -1.109 1.246 0.849 -0.756 -1.382 1.624 0.895 + 329.25 12.617 12.669 12.769 -1.150 1.588 0.504 -1.150 1.588 0.801 -0.580 -1.826 2.049 1.038 + 329.30 12.709 12.753 12.850 -1.065 1.576 0.596 -1.065 1.576 0.939 -0.635 -1.679 1.987 1.013 + 329.35 12.867 12.925 13.010 -1.225 1.487 0.754 -1.225 1.487 1.121 -0.924 -1.823 2.141 1.165 + 329.40 12.966 13.004 13.052 -0.992 1.119 0.853 -0.992 1.119 0.954 -0.846 -1.110 1.482 0.845 + 329.45 12.820 12.842 12.868 -0.752 0.806 0.707 -0.752 0.806 0.570 -0.532 -0.607 0.858 0.494 + 329.50 12.716 12.738 12.797 -0.736 1.236 0.603 -0.736 1.236 0.746 -0.444 -0.910 1.217 0.629 + 329.55 12.838 12.845 12.904 -0.426 1.232 0.725 -0.426 1.232 0.893 -0.309 -0.525 1.113 0.541 + 329.60 12.594 12.602 12.638 -0.452 0.952 0.481 -0.452 0.952 0.458 -0.218 -0.431 0.671 0.333 + 329.65 12.888 12.898 12.940 -0.500 1.045 0.776 -0.500 1.045 0.811 -0.388 -0.523 0.972 0.520 + 329.70 12.908 12.913 12.949 -0.338 0.976 0.795 -0.338 0.976 0.776 -0.269 -0.330 0.849 0.442 + 329.75 12.631 12.637 12.680 -0.387 1.048 0.518 -0.387 1.048 0.543 -0.200 -0.405 0.758 0.353 + 329.80 12.714 12.720 12.755 -0.390 0.945 0.602 -0.390 0.945 0.569 -0.235 -0.369 0.704 0.359 + 329.85 12.479 12.491 12.529 -0.538 0.981 0.366 -0.538 0.981 0.359 -0.197 -0.528 0.693 0.334 + 329.90 12.366 12.368 12.391 -0.219 0.762 0.253 -0.219 0.762 0.193 -0.055 -0.167 0.347 0.131 + 329.95 12.585 12.589 12.653 -0.308 1.270 0.472 -0.308 1.270 0.600 -0.145 -0.391 0.965 0.365 + 330.00 12.505 12.505 12.562 0.022 1.187 0.393 0.022 1.187 0.466 0.009 0.027 0.781 0.233 + 330.05 12.732 12.732 12.802 -0.061 1.341 0.619 -0.061 1.341 0.829 -0.038 -0.082 1.092 0.417 + 330.10 13.173 13.182 13.221 0.481 1.013 1.060 0.481 1.013 1.074 0.510 0.488 1.191 0.643 + 330.15 12.921 12.930 12.970 0.486 1.015 0.808 0.486 1.015 0.820 0.393 0.493 0.959 0.517 + 330.20 13.078 13.102 13.120 0.804 0.686 0.965 0.804 0.686 0.662 0.776 0.552 1.024 0.580 + 330.25 12.719 12.727 12.742 0.453 0.623 0.606 0.453 0.623 0.377 0.275 0.282 0.480 0.273 + 330.30 12.618 12.647 12.669 0.852 0.742 0.506 0.852 0.742 0.375 0.431 0.632 0.766 0.426 + 330.35 12.718 12.750 12.763 0.906 0.561 0.605 0.906 0.561 0.340 0.548 0.509 0.751 0.411 + 330.40 12.663 12.690 12.706 0.832 0.640 0.550 0.832 0.640 0.352 0.458 0.532 0.702 0.393 + 330.45 12.804 12.838 12.848 0.935 0.505 0.691 0.935 0.505 0.349 0.646 0.472 0.803 0.437 + 330.50 13.084 13.144 13.147 1.254 0.317 0.971 1.254 0.317 0.308 1.218 0.398 1.308 0.659 + 330.55 13.180 13.236 13.242 1.214 0.404 1.067 1.214 0.404 0.431 1.296 0.490 1.388 0.725 + 330.60 13.052 13.116 13.123 1.291 0.429 0.940 1.291 0.429 0.403 1.213 0.553 1.366 0.696 + 330.65 12.957 13.021 13.024 1.288 0.271 0.844 1.288 0.271 0.229 1.087 0.350 1.222 0.582 + 330.70 12.774 12.820 12.822 1.081 0.248 0.661 1.081 0.248 0.164 0.715 0.268 0.834 0.390 + 330.75 13.039 13.096 13.104 1.217 0.462 0.927 1.217 0.462 0.428 1.128 0.563 1.277 0.666 + 330.80 12.940 13.000 13.005 1.250 0.380 0.827 1.250 0.380 0.314 1.033 0.475 1.195 0.590 + 330.85 12.841 12.889 12.890 1.107 0.201 0.728 1.107 0.201 0.146 0.806 0.222 0.898 0.424 + 330.90 12.896 12.921 12.922 0.805 0.096 0.783 0.805 0.096 0.075 0.630 0.077 0.635 0.320 + 330.95 12.787 12.817 12.818 0.884 0.080 0.674 0.884 0.080 0.054 0.596 0.071 0.621 0.301 + 331.00 12.735 12.743 12.744 0.460 -0.160 0.622 0.460 -0.160 -0.099 0.286 -0.074 0.312 0.156 + 331.05 13.054 13.056 13.061 0.225 -0.380 0.941 0.225 -0.380 -0.357 0.212 -0.085 0.540 0.212 + 331.10 13.074 13.077 13.082 0.280 -0.392 0.961 0.280 -0.392 -0.377 0.269 -0.110 0.578 0.238 + 331.15 12.975 12.995 12.995 0.716 0.010 0.862 0.716 0.010 0.009 0.617 0.007 0.628 0.309 + 331.20 12.844 12.863 12.867 0.701 0.305 0.731 0.701 0.305 0.223 0.512 0.213 0.559 0.299 + 331.25 12.887 12.900 12.901 0.585 0.146 0.774 0.585 0.146 0.113 0.452 0.085 0.481 0.237 + 331.30 13.045 13.058 13.061 0.588 -0.282 0.932 0.588 -0.282 -0.263 0.548 -0.166 0.647 0.315 + 331.35 12.922 12.945 12.949 0.778 -0.313 0.809 0.778 -0.313 -0.254 0.629 -0.244 0.679 0.360 + 331.40 13.053 13.076 13.076 0.766 -0.120 0.940 0.766 -0.120 -0.113 0.720 -0.092 0.743 0.368 + 331.45 13.152 13.165 13.166 0.583 -0.198 1.039 0.583 -0.198 -0.206 0.605 -0.116 0.729 0.325 + 331.50 13.194 13.207 13.208 0.593 -0.178 1.081 0.593 -0.178 -0.193 0.641 -0.106 0.776 0.339 + 331.55 13.504 13.515 13.529 0.544 -0.598 1.392 0.544 -0.598 -0.832 0.758 -0.325 1.295 0.586 + 331.60 13.331 13.334 13.340 0.267 -0.409 1.218 0.267 -0.409 -0.498 0.325 -0.109 0.861 0.302 + 331.65 13.005 13.007 13.020 -0.247 -0.565 0.892 -0.247 -0.565 -0.504 -0.220 0.139 0.588 0.284 + 331.70 13.306 13.306 13.322 0.049 -0.650 1.193 0.049 -0.650 -0.776 0.058 -0.032 0.924 0.389 + 331.75 13.446 13.448 13.456 0.236 -0.472 1.333 0.236 -0.472 -0.630 0.314 -0.111 1.028 0.356 + 331.80 13.663 13.667 13.677 0.359 -0.526 1.550 0.359 -0.526 -0.816 0.556 -0.189 1.404 0.503 + 331.85 13.433 13.436 13.438 0.291 -0.216 1.320 0.291 -0.216 -0.285 0.384 -0.063 0.937 0.241 + 331.90 13.519 13.529 13.530 0.526 0.132 1.406 0.526 0.132 0.186 0.739 0.070 1.135 0.383 + 331.95 13.370 13.380 13.380 0.524 0.108 1.257 0.524 0.108 0.136 0.659 0.057 0.933 0.338 + 332.00 13.562 13.580 13.580 0.688 0.049 1.450 0.688 0.049 0.071 0.997 0.034 1.289 0.500 + 332.05 13.863 13.892 13.894 0.899 -0.214 1.750 0.899 -0.214 -0.375 1.573 -0.193 1.959 0.814 + 332.10 13.811 13.829 13.854 0.703 -0.845 1.698 0.703 -0.845 -1.435 1.193 -0.594 2.046 0.979 + 332.15 13.887 13.921 13.970 0.969 -1.175 1.774 0.969 -1.175 -2.084 1.720 -1.139 2.734 1.466 + 332.20 13.849 13.890 13.935 1.074 -1.123 1.736 1.074 -1.123 -1.949 1.865 -1.206 2.714 1.477 + 332.25 13.849 13.885 13.909 1.011 -0.813 1.736 1.011 -0.813 -1.412 1.754 -0.822 2.348 1.199 + 332.30 13.672 13.708 13.730 0.990 -0.780 1.559 0.990 -0.780 -1.216 1.544 -0.772 2.010 1.056 + 332.35 13.827 13.841 13.872 0.612 -0.935 1.714 0.612 -0.935 -1.603 1.049 -0.572 2.094 1.000 + 332.40 13.489 13.497 13.515 0.481 -0.691 1.376 0.481 -0.691 -0.951 0.661 -0.332 1.301 0.603 + 332.45 13.471 13.481 13.512 0.534 -0.906 1.358 0.534 -0.906 -1.230 0.725 -0.483 1.475 0.754 + 332.50 13.550 13.587 13.605 1.002 -0.695 1.438 1.002 -0.695 -0.999 1.441 -0.696 1.777 0.943 + 332.55 13.578 13.629 13.636 1.180 -0.440 1.465 1.180 -0.440 -0.645 1.728 -0.520 1.866 0.958 + 332.60 13.583 13.610 13.613 0.852 -0.322 1.470 0.852 -0.322 -0.474 1.253 -0.275 1.496 0.684 + 332.65 13.771 13.786 13.797 0.642 -0.544 1.658 0.642 -0.544 -0.903 1.065 -0.349 1.729 0.719 + 332.70 13.913 13.935 13.955 0.788 -0.742 1.800 0.788 -0.742 -1.337 1.418 -0.585 2.207 1.017 + 332.75 13.480 13.523 13.531 1.070 -0.464 1.368 1.070 -0.464 -0.634 1.464 -0.496 1.615 0.835 + 332.80 13.502 13.523 13.529 0.767 -0.403 1.389 0.767 -0.403 -0.560 1.066 -0.309 1.340 0.621 + 332.85 13.730 13.759 13.766 0.898 -0.433 1.617 0.898 -0.433 -0.700 1.452 -0.389 1.804 0.829 + 332.90 13.928 13.956 13.958 0.892 -0.250 1.815 0.892 -0.250 -0.454 1.618 -0.223 2.076 0.848 + 332.95 13.577 13.593 13.593 0.663 0.053 1.464 0.663 0.053 0.078 0.971 0.035 1.293 0.487 + 333.00 13.436 13.469 13.469 0.932 0.055 1.324 0.932 0.055 0.073 1.234 0.051 1.312 0.618 + 333.05 13.423 13.460 13.464 0.996 -0.318 1.310 0.996 -0.318 -0.417 1.305 -0.317 1.405 0.703 + 333.10 13.617 13.661 13.664 1.104 -0.271 1.504 1.104 -0.271 -0.408 1.659 -0.300 1.776 0.867 + 333.15 13.382 13.443 13.453 1.280 -0.510 1.269 1.280 -0.510 -0.647 1.625 -0.653 1.755 0.934 + 333.20 13.411 13.479 13.492 1.357 -0.587 1.298 1.357 -0.587 -0.762 1.761 -0.796 1.935 1.039 + 333.25 13.553 13.609 13.625 1.233 -0.648 1.440 1.233 -0.648 -0.934 1.776 -0.799 2.008 1.080 + 333.30 13.217 13.254 13.266 0.998 -0.569 1.104 0.998 -0.569 -0.628 1.101 -0.567 1.269 0.694 + 333.35 13.412 13.461 13.475 1.156 -0.613 1.299 1.156 -0.613 -0.796 1.501 -0.708 1.699 0.920 + 333.40 13.282 13.344 13.357 1.285 -0.568 1.170 1.285 -0.568 -0.664 1.503 -0.730 1.671 0.899 + 333.45 13.175 13.253 13.279 1.435 -0.821 1.063 1.435 -0.821 -0.872 1.525 -1.178 1.932 1.058 + 333.50 13.167 13.186 13.222 0.707 -0.964 1.055 0.707 -0.964 -1.017 0.746 -0.682 1.271 0.717 + 333.55 12.876 12.900 12.908 0.794 -0.443 0.763 0.794 -0.443 -0.338 0.606 -0.352 0.705 0.389 + 333.60 12.640 12.647 12.648 0.402 -0.163 0.528 0.402 -0.163 -0.086 0.212 -0.066 0.233 0.119 + 333.65 12.728 12.740 12.744 0.556 -0.312 0.615 0.556 -0.312 -0.192 0.342 -0.173 0.392 0.214 + 333.70 13.015 13.030 13.032 0.640 -0.226 0.902 0.640 -0.226 -0.204 0.578 -0.145 0.637 0.315 + 333.75 13.350 13.368 13.371 0.684 -0.292 1.237 0.684 -0.292 -0.362 0.846 -0.200 1.042 0.471 + 333.80 13.310 13.343 13.354 0.944 -0.540 1.197 0.944 -0.540 -0.646 1.130 -0.510 1.308 0.699 + 333.85 13.098 13.119 13.119 0.737 0.067 0.985 0.737 0.067 0.066 0.726 0.049 0.759 0.365 + 333.90 13.268 13.299 13.300 0.919 0.134 1.155 0.919 0.134 0.155 1.061 0.123 1.098 0.540 + 333.95 13.323 13.358 13.358 0.974 -0.058 1.210 0.974 -0.058 -0.070 1.178 -0.056 1.208 0.591 + 334.00 13.107 13.143 13.144 0.967 0.153 0.994 0.967 0.153 0.152 0.962 0.148 0.974 0.492 + 334.05 13.198 13.220 13.220 0.754 0.072 1.085 0.754 0.072 0.079 0.818 0.055 0.876 0.412 + 334.10 12.972 12.978 12.989 0.384 0.522 0.860 0.384 0.522 0.449 0.330 0.200 0.579 0.296 + 334.15 12.835 12.851 12.864 0.653 0.575 0.722 0.653 0.575 0.415 0.472 0.376 0.639 0.366 + 334.20 12.967 12.980 12.986 0.586 0.387 0.854 0.586 0.387 0.330 0.500 0.227 0.611 0.320 + 334.25 12.782 12.823 12.837 1.027 0.601 0.669 1.027 0.601 0.402 0.687 0.617 0.931 0.503 + 334.30 12.827 12.866 12.867 0.998 0.183 0.714 0.998 0.183 0.131 0.713 0.183 0.770 0.374 + 334.35 12.735 12.791 12.795 1.190 0.342 0.622 1.190 0.342 0.213 0.741 0.407 0.960 0.436 + 334.40 12.690 12.764 12.767 1.370 0.283 0.577 1.370 0.283 0.163 0.791 0.388 1.145 0.448 + 334.45 12.613 12.661 12.667 1.103 0.365 0.500 1.103 0.365 0.183 0.552 0.403 0.800 0.354 + 334.50 12.764 12.793 12.807 0.859 0.605 0.651 0.859 0.605 0.394 0.559 0.520 0.764 0.430 + 334.55 12.821 12.872 12.874 1.144 0.195 0.708 1.144 0.195 0.138 0.811 0.223 0.925 0.426 + 334.60 12.765 12.836 12.847 1.355 0.518 0.652 1.355 0.518 0.338 0.883 0.702 1.265 0.589 + 334.65 12.989 13.060 13.070 1.357 0.510 0.876 1.357 0.510 0.447 1.189 0.692 1.435 0.723 + 334.70 13.224 13.305 13.308 1.463 0.294 1.111 1.463 0.294 0.326 1.625 0.430 1.730 0.856 + 334.75 13.308 13.373 13.373 1.311 0.038 1.196 1.311 0.038 0.045 1.568 0.050 1.575 0.785 + 334.80 13.278 13.374 13.380 1.596 0.411 1.165 1.596 0.411 0.479 1.860 0.656 2.037 1.015 + 334.85 13.708 13.831 13.831 1.845 0.094 1.595 1.845 0.094 0.150 2.942 0.173 2.978 1.475 + 334.90 13.601 13.704 13.705 1.681 -0.099 1.488 1.681 -0.099 -0.148 2.501 -0.167 2.524 1.255 + 334.95 13.613 13.689 13.691 1.438 -0.263 1.500 1.438 -0.263 -0.394 2.157 -0.378 2.193 1.112 + 335.00 13.414 13.487 13.506 1.401 -0.705 1.302 1.401 -0.705 -0.918 1.823 -0.988 2.076 1.134 + 335.05 13.354 13.430 13.450 1.427 -0.724 1.241 1.427 -0.724 -0.899 1.771 -1.033 2.050 1.119 + 335.10 13.404 13.425 13.456 0.745 -0.915 1.291 0.745 -0.915 -1.182 0.961 -0.681 1.530 0.834 + 335.15 13.335 13.344 13.362 0.483 -0.697 1.222 0.483 -0.697 -0.852 0.590 -0.337 1.106 0.545 + 335.20 13.303 13.320 13.331 0.661 -0.538 1.190 0.661 -0.538 -0.641 0.787 -0.355 1.072 0.537 + 335.25 13.269 13.275 13.284 0.394 -0.474 1.157 0.394 -0.474 -0.548 0.456 -0.187 0.859 0.369 + 335.30 13.385 13.395 13.406 0.500 -0.541 1.273 0.500 -0.541 -0.688 0.637 -0.271 1.081 0.488 + 335.35 13.292 13.317 13.327 0.819 -0.523 1.179 0.819 -0.523 -0.617 0.965 -0.428 1.167 0.611 + 335.40 13.041 13.081 13.092 1.022 -0.534 0.929 1.022 -0.534 -0.496 0.949 -0.545 1.096 0.601 + 335.45 13.337 13.379 13.395 1.060 -0.666 1.224 1.060 -0.666 -0.816 1.297 -0.706 1.533 0.844 + 335.50 13.311 13.368 13.385 1.232 -0.673 1.198 1.232 -0.673 -0.807 1.475 -0.829 1.703 0.937 + 335.55 13.184 13.221 13.233 0.991 -0.570 1.071 0.991 -0.570 -0.611 1.061 -0.565 1.227 0.674 + 335.60 13.088 13.135 13.137 1.115 -0.225 0.975 1.115 -0.225 -0.219 1.087 -0.251 1.122 0.568 + 335.65 13.212 13.263 13.263 1.154 0.053 1.099 1.154 0.053 0.058 1.269 0.061 1.271 0.636 + 335.70 13.047 13.085 13.085 1.001 -0.057 0.934 1.001 -0.057 -0.053 0.935 -0.057 0.939 0.469 + 335.75 13.181 13.220 13.220 1.004 -0.091 1.069 1.004 -0.091 -0.097 1.073 -0.091 1.079 0.541 + 335.80 13.276 13.314 13.323 1.002 -0.494 1.164 1.002 -0.494 -0.575 1.166 -0.495 1.301 0.695 + 335.85 13.491 13.521 13.521 0.889 -0.020 1.379 0.889 -0.020 -0.027 1.226 -0.018 1.346 0.613 + 335.90 13.334 13.375 13.389 1.050 0.610 1.221 1.050 0.610 0.745 1.282 0.640 1.483 0.808 + 335.95 13.866 13.892 13.898 0.850 0.393 1.754 0.850 0.393 0.689 1.490 0.334 1.976 0.838 + 336.00 14.243 14.261 14.267 0.713 0.405 2.131 0.713 0.405 0.863 1.518 0.289 2.606 0.885 + 336.05 14.219 14.245 14.248 0.853 0.328 2.106 0.853 0.328 0.692 1.797 0.280 2.636 0.973 + 336.10 14.179 14.191 14.201 0.576 0.536 2.067 0.576 0.536 1.108 1.190 0.309 2.445 0.827 + 336.15 14.237 14.243 14.245 0.435 0.191 2.124 0.435 0.191 0.407 0.925 0.083 2.369 0.507 + 336.20 14.572 14.580 14.581 0.483 0.095 2.460 0.483 0.095 0.235 1.187 0.046 3.146 0.606 + 336.25 14.701 14.702 14.702 0.165 0.055 2.588 0.165 0.055 0.142 0.428 0.009 3.364 0.225 + 336.30 14.587 14.589 14.590 0.239 0.174 2.474 0.239 0.174 0.430 0.592 0.042 3.104 0.366 + 336.35 14.725 14.725 14.725 0.107 -0.076 2.612 0.107 -0.076 -0.199 0.279 -0.008 3.420 0.171 + 336.40 14.887 14.889 14.890 0.212 -0.228 2.774 0.212 -0.228 -0.633 0.588 -0.048 3.897 0.432 + 336.45 14.836 14.836 14.837 -0.036 -0.154 2.724 -0.036 -0.154 -0.419 -0.097 0.005 3.721 0.215 + 336.50 14.848 14.849 14.853 -0.179 -0.362 2.735 -0.179 -0.362 -0.989 -0.490 0.065 3.821 0.553 + 336.55 14.364 14.365 14.366 0.173 -0.207 2.251 0.173 -0.207 -0.466 0.389 -0.036 2.570 0.304 + 336.60 14.014 14.021 14.021 0.434 0.145 1.901 0.434 0.145 0.276 0.824 0.063 1.912 0.436 + 336.65 13.790 13.795 13.795 0.361 0.119 1.677 0.361 0.119 0.200 0.605 0.043 1.479 0.319 + 336.70 13.526 13.537 13.537 0.544 0.113 1.413 0.544 0.113 0.160 0.769 0.062 1.152 0.394 + 336.75 13.470 13.483 13.483 0.592 0.017 1.357 0.592 0.017 0.023 0.803 0.010 1.097 0.402 + 336.80 13.832 13.848 13.851 0.661 0.296 1.720 0.661 0.296 0.508 1.137 0.195 1.741 0.630 + 336.85 13.665 13.691 13.702 0.846 0.537 1.552 0.846 0.537 0.833 1.314 0.454 1.707 0.810 + 336.90 13.807 13.831 13.833 0.819 0.218 1.694 0.819 0.218 0.369 1.387 0.178 1.793 0.723 + 336.95 13.995 14.005 14.005 0.542 0.044 1.882 0.542 0.044 0.083 1.019 0.024 1.918 0.511 + 337.00 14.082 14.082 14.084 -0.039 -0.229 1.970 -0.039 -0.229 -0.451 -0.076 0.009 1.967 0.229 + 337.05 13.835 13.835 13.842 -0.130 -0.443 1.722 -0.130 -0.443 -0.762 -0.223 0.057 1.589 0.398 + 337.10 13.743 13.743 13.746 0.021 -0.283 1.631 0.021 -0.283 -0.461 0.035 -0.006 1.370 0.231 + 337.15 13.480 13.480 13.490 -0.054 -0.513 1.367 -0.054 -0.513 -0.702 -0.073 0.028 1.067 0.353 + 337.20 13.603 13.604 13.610 -0.167 -0.401 1.491 -0.167 -0.401 -0.598 -0.250 0.067 1.206 0.326 + 337.25 13.832 13.832 13.836 -0.003 -0.339 1.719 -0.003 -0.339 -0.583 -0.005 0.001 1.535 0.292 + 337.30 13.713 13.714 13.720 -0.173 -0.419 1.600 -0.173 -0.419 -0.670 -0.277 0.072 1.382 0.364 + 337.35 13.854 13.855 13.886 -0.151 -0.936 1.741 -0.151 -0.936 -1.630 -0.262 0.141 1.966 0.829 + 337.40 13.889 13.899 13.934 -0.529 -0.993 1.776 -0.529 -0.993 -1.764 -0.940 0.526 2.211 1.033 + 337.45 13.848 13.864 13.892 -0.665 -0.871 1.736 -0.665 -0.871 -1.511 -1.154 0.579 2.106 0.994 + 337.50 13.718 13.740 13.784 -0.778 -1.094 1.605 -0.778 -1.094 -1.756 -1.249 0.851 2.189 1.158 + 337.55 13.185 13.195 13.250 -0.517 -1.199 1.072 -0.517 -1.199 -1.286 -0.555 0.621 1.428 0.766 + 337.60 12.906 12.914 12.935 -0.455 -0.732 0.793 -0.455 -0.732 -0.581 -0.361 0.333 0.686 0.380 + 337.65 12.907 12.935 12.955 -0.852 -0.707 0.794 -0.852 -0.707 -0.562 -0.677 0.602 0.928 0.533 + 337.70 12.942 12.978 13.008 -0.956 -0.886 0.829 -0.956 -0.886 -0.735 -0.793 0.847 1.193 0.687 + 337.75 13.145 13.181 13.204 -0.964 -0.789 1.032 -0.964 -0.789 -0.814 -0.995 0.760 1.309 0.747 + 337.80 12.869 12.892 12.911 -0.765 -0.697 0.756 -0.765 -0.697 -0.527 -0.579 0.533 0.821 0.473 + 337.85 13.046 13.047 13.068 -0.197 -0.742 0.933 -0.197 -0.742 -0.692 -0.184 0.146 0.730 0.366 + 337.90 13.159 13.164 13.192 -0.379 -0.849 1.046 -0.379 -0.849 -0.888 -0.396 0.321 0.979 0.512 + 337.95 13.170 13.174 13.231 -0.331 -1.223 1.057 -0.331 -1.223 -1.293 -0.350 0.405 1.362 0.700 + 338.00 13.108 13.109 13.161 -0.191 -1.174 0.995 -0.191 -1.174 -1.167 -0.190 0.224 1.202 0.602 + 338.05 13.244 13.250 13.299 -0.386 -1.143 1.131 -0.386 -1.143 -1.293 -0.437 0.442 1.367 0.717 + 338.10 13.052 13.070 13.104 -0.694 -0.942 0.939 -0.694 -0.942 -0.885 -0.652 0.654 1.126 0.639 + 338.15 12.923 12.969 13.004 -1.091 -0.958 0.810 -1.091 -0.958 -0.776 -0.884 1.045 1.382 0.787 + 338.20 13.107 13.141 13.180 -0.938 -1.014 0.995 -0.938 -1.014 -1.009 -0.933 0.951 1.449 0.836 + 338.25 13.259 13.272 13.314 -0.568 -1.058 1.147 -0.568 -1.058 -1.213 -0.651 0.601 1.379 0.751 + 338.30 13.199 13.202 13.252 -0.293 -1.151 1.086 -0.293 -1.151 -1.250 -0.318 0.337 1.295 0.667 + 338.35 13.380 13.384 13.422 -0.313 -1.013 1.268 -0.313 -1.013 -1.285 -0.397 0.317 1.366 0.691 + 338.40 13.364 13.367 13.403 -0.274 -0.983 1.251 -0.274 -0.983 -1.230 -0.343 0.270 1.303 0.652 + 338.45 13.122 13.123 13.142 -0.175 -0.700 1.009 -0.175 -0.700 -0.706 -0.176 0.122 0.769 0.369 + 338.50 12.975 12.977 12.998 0.236 -0.742 0.862 0.236 -0.742 -0.640 0.203 -0.175 0.675 0.347 + 338.55 13.066 13.071 13.091 0.365 -0.728 0.953 0.365 -0.728 -0.694 0.348 -0.266 0.786 0.410 + 338.60 12.994 12.996 13.010 0.186 -0.607 0.881 0.186 -0.607 -0.535 0.164 -0.113 0.590 0.285 + 338.65 13.146 13.146 13.173 0.128 -0.834 1.033 0.128 -0.834 -0.861 0.133 -0.107 0.889 0.439 + 338.70 13.064 13.064 13.097 -0.058 -0.917 0.951 -0.058 -0.917 -0.872 -0.055 0.053 0.875 0.438 + 338.75 13.043 13.043 13.078 0.003 -0.954 0.931 0.003 -0.954 -0.888 0.002 -0.002 0.888 0.444 + 338.80 13.182 13.186 13.219 0.317 -0.941 1.069 0.317 -0.941 -1.006 0.339 -0.299 1.065 0.552 + 338.85 13.182 13.183 13.207 0.120 -0.801 1.069 0.120 -0.801 -0.856 0.129 -0.096 0.900 0.436 + 338.90 13.312 13.313 13.333 -0.113 -0.735 1.199 -0.113 -0.735 -0.882 -0.136 0.083 0.996 0.448 + 338.95 13.294 13.300 13.338 -0.402 -1.012 1.181 -0.402 -1.012 -1.195 -0.475 0.407 1.290 0.675 + 339.00 12.994 13.001 13.030 -0.449 -0.863 0.881 -0.449 -0.863 -0.761 -0.396 0.388 0.862 0.470 + 339.05 12.935 12.937 12.953 -0.255 -0.645 0.822 -0.255 -0.645 -0.530 -0.209 0.164 0.578 0.297 + 339.10 13.060 13.068 13.089 -0.479 -0.727 0.947 -0.479 -0.727 -0.688 -0.453 0.348 0.827 0.447 + 339.15 13.470 13.476 13.488 -0.388 -0.561 1.358 -0.388 -0.561 -0.761 -0.527 0.218 1.154 0.476 + 339.20 13.449 13.456 13.483 -0.440 -0.850 1.336 -0.440 -0.850 -1.137 -0.588 0.374 1.351 0.667 + 339.25 13.209 13.223 13.242 -0.613 -0.698 1.096 -0.613 -0.698 -0.766 -0.672 0.428 1.033 0.553 + 339.30 13.070 13.082 13.099 -0.575 -0.649 0.957 -0.575 -0.649 -0.621 -0.550 0.373 0.833 0.455 + 339.35 13.125 13.136 13.163 -0.537 -0.844 1.012 -0.537 -0.844 -0.854 -0.543 0.453 1.012 0.554 + 339.40 12.966 12.978 13.020 -0.553 -1.048 0.853 -0.553 -1.048 -0.894 -0.472 0.580 1.066 0.583 + 339.45 12.751 12.756 12.768 -0.326 -0.552 0.639 -0.326 -0.552 -0.352 -0.208 0.180 0.409 0.224 + 339.50 12.644 12.644 12.664 -0.009 -0.728 0.531 -0.009 -0.728 -0.387 -0.005 0.006 0.406 0.193 + 339.55 12.662 12.663 12.687 -0.126 -0.781 0.549 -0.126 -0.781 -0.429 -0.069 0.098 0.464 0.223 + 339.60 12.535 12.535 12.552 -0.001 -0.664 0.422 -0.001 -0.664 -0.280 -0.000 0.001 0.310 0.140 + 339.65 12.776 12.778 12.817 0.201 -0.997 0.664 0.201 -0.997 -0.662 0.133 -0.200 0.737 0.352 + 339.70 13.011 13.015 13.048 0.343 -0.917 0.898 0.343 -0.917 -0.824 0.308 -0.315 0.883 0.467 + 339.75 13.072 13.075 13.113 0.299 -0.996 0.959 0.299 -0.996 -0.955 0.286 -0.297 1.000 0.520 + 339.80 12.900 12.911 12.987 0.528 -1.400 0.787 0.528 -1.400 -1.102 0.416 -0.740 1.430 0.696 + 339.85 12.870 12.870 12.921 -0.078 -1.143 0.757 -0.078 -1.143 -0.865 -0.059 0.089 0.943 0.436 + 339.90 12.750 12.750 12.797 0.022 -1.096 0.637 0.022 -1.096 -0.698 0.014 -0.024 0.804 0.349 + 339.95 12.682 12.684 12.747 -0.221 -1.262 0.570 -0.221 -1.262 -0.719 -0.126 0.279 0.983 0.391 + 340.00 12.771 12.774 12.844 -0.289 -1.335 0.658 -0.289 -1.335 -0.878 -0.190 0.386 1.149 0.489 + 340.05 12.625 12.625 12.666 -0.035 -1.022 0.512 -0.035 -1.022 -0.523 -0.018 0.036 0.654 0.262 + 340.10 12.678 12.678 12.717 -0.074 -0.990 0.565 -0.074 -0.990 -0.560 -0.042 0.073 0.653 0.283 + 340.15 12.951 12.952 12.978 -0.202 -0.820 0.838 -0.202 -0.820 -0.687 -0.169 0.166 0.708 0.363 + 340.20 13.120 13.123 13.135 -0.303 -0.555 1.007 -0.303 -0.555 -0.559 -0.305 0.168 0.707 0.330 + 340.25 13.379 13.380 13.398 -0.149 -0.699 1.266 -0.149 -0.699 -0.885 -0.189 0.104 1.057 0.456 + 340.30 13.442 13.445 13.451 -0.303 -0.398 1.329 -0.303 -0.398 -0.529 -0.402 0.120 1.008 0.338 + 340.35 13.439 13.452 13.454 -0.591 -0.218 1.326 -0.591 -0.218 -0.289 -0.784 0.129 1.078 0.423 + 340.40 13.192 13.208 13.212 -0.657 -0.333 1.079 -0.657 -0.333 -0.359 -0.709 0.219 0.853 0.412 + 340.45 13.378 13.391 13.410 -0.582 -0.710 1.266 -0.582 -0.710 -0.899 -0.736 0.413 1.222 0.617 + 340.50 13.127 13.146 13.200 -0.710 -1.197 1.014 -0.710 -1.197 -1.214 -0.720 0.850 1.482 0.824 + 340.55 13.049 13.061 13.121 -0.553 -1.261 0.936 -0.553 -1.261 -1.180 -0.517 0.697 1.385 0.732 + 340.60 13.298 13.307 13.374 -0.499 -1.335 1.185 -0.499 -1.335 -1.581 -0.591 0.666 1.717 0.907 + 340.65 13.393 13.396 13.474 -0.289 -1.445 1.280 -0.289 -1.445 -1.850 -0.370 0.418 1.905 0.966 + 340.70 13.430 13.430 13.463 -0.077 -0.942 1.317 -0.077 -0.942 -1.241 -0.102 0.073 1.314 0.624 + 340.75 13.070 13.071 13.087 0.121 -0.658 0.957 0.121 -0.658 -0.629 0.115 -0.079 0.682 0.322 + 340.80 12.993 12.994 13.038 0.139 -1.074 0.880 0.139 -1.074 -0.946 0.122 -0.149 0.974 0.483 + 340.85 13.025 13.030 13.082 0.378 -1.161 0.912 0.378 -1.161 -1.059 0.344 -0.439 1.161 0.598 + 340.90 13.058 13.069 13.114 0.518 -1.086 0.946 0.518 -1.086 -1.027 0.490 -0.562 1.170 0.634 + 340.95 12.899 12.907 12.985 0.455 -1.420 0.786 0.455 -1.420 -1.116 0.358 -0.647 1.421 0.669 + 341.00 12.758 12.771 12.816 0.577 -1.081 0.645 0.577 -1.081 -0.697 0.372 -0.624 0.959 0.504 + 341.05 12.646 12.657 12.679 0.526 -0.749 0.533 0.526 -0.749 -0.400 0.281 -0.394 0.561 0.314 + 341.10 12.660 12.663 12.713 0.294 -1.128 0.547 0.294 -1.128 -0.617 0.161 -0.331 0.828 0.359 + 341.15 12.878 12.879 12.988 0.159 -1.681 0.765 0.159 -1.681 -1.287 0.122 -0.268 1.719 0.660 + 341.20 13.000 13.000 13.133 -0.087 -1.865 0.887 -0.087 -1.865 -1.654 -0.077 0.161 2.136 0.832 + 341.25 12.935 12.936 13.057 -0.123 -1.776 0.823 -0.123 -1.776 -1.461 -0.102 0.219 1.923 0.740 + 341.30 13.011 13.011 13.116 -0.025 -1.656 0.899 -0.025 -1.656 -1.488 -0.022 0.041 1.775 0.744 + 341.35 13.118 13.121 13.201 -0.247 -1.452 1.005 -0.247 -1.452 -1.460 -0.249 0.359 1.590 0.762 + 341.40 13.006 13.010 13.133 -0.325 -1.788 0.894 -0.325 -1.788 -1.598 -0.291 0.582 2.051 0.863 + 341.45 12.678 12.678 12.800 0.094 -1.763 0.565 0.094 -1.763 -0.996 0.053 -0.165 1.718 0.505 + 341.50 12.598 12.599 12.662 0.155 -1.266 0.485 0.155 -1.266 -0.614 0.075 -0.196 0.931 0.325 + 341.55 12.285 12.286 12.323 0.160 -0.949 0.172 0.160 -0.949 -0.163 0.028 -0.152 0.478 0.113 + 341.60 12.716 12.717 12.750 0.144 -0.916 0.604 0.144 -0.916 -0.553 0.087 -0.132 0.612 0.287 + 341.65 13.161 13.168 13.207 0.422 -1.017 1.048 0.422 -1.017 -1.066 0.443 -0.429 1.156 0.616 + 341.70 13.043 13.065 13.094 0.750 -0.880 0.930 0.750 -0.880 -0.819 0.698 -0.660 1.101 0.631 + 341.75 12.972 12.996 13.031 0.794 -0.954 0.859 0.794 -0.954 -0.820 0.682 -0.758 1.139 0.654 + 341.80 13.065 13.069 13.134 0.341 -1.307 0.952 0.341 -1.307 -1.244 0.324 -0.445 1.365 0.680 + 341.85 12.943 12.944 13.002 0.160 -1.229 0.830 0.160 -1.229 -1.020 0.132 -0.196 1.113 0.524 + 341.90 13.003 13.010 13.086 0.417 -1.410 0.891 0.417 -1.410 -1.256 0.372 -0.588 1.477 0.718 + 341.95 13.057 13.057 13.124 0.077 -1.324 0.944 0.077 -1.324 -1.250 0.072 -0.102 1.325 0.628 + 342.00 13.032 13.032 13.093 0.046 -1.264 0.919 0.046 -1.264 -1.161 0.042 -0.058 1.221 0.582 + 342.05 13.141 13.144 13.228 0.275 -1.487 1.028 0.275 -1.487 -1.529 0.283 -0.409 1.672 0.804 + 342.10 13.097 13.097 13.120 0.024 -0.777 0.984 0.024 -0.777 -0.764 0.024 -0.019 0.786 0.382 + 342.15 13.396 13.396 13.427 0.085 -0.910 1.283 0.085 -0.910 -1.168 0.109 -0.078 1.241 0.588 + 342.20 13.455 13.456 13.468 0.187 -0.573 1.342 0.187 -0.573 -0.768 0.251 -0.107 1.082 0.408 + 342.25 13.189 13.190 13.200 0.121 -0.514 1.076 0.121 -0.514 -0.553 0.130 -0.062 0.718 0.286 + 342.30 13.411 13.414 13.421 0.318 -0.408 1.298 0.318 -0.408 -0.529 0.413 -0.130 0.976 0.342 + 342.35 13.269 13.278 13.282 0.483 -0.331 1.156 0.483 -0.331 -0.383 0.559 -0.160 0.840 0.348 + 342.40 13.313 13.316 13.316 0.294 -0.127 1.200 0.294 -0.127 -0.152 0.353 -0.037 0.771 0.193 + 342.45 13.325 13.329 13.331 0.327 0.244 1.212 0.327 0.244 0.295 0.397 0.080 0.818 0.250 + 342.50 13.178 13.182 13.187 0.320 0.368 1.066 0.320 0.368 0.392 0.341 0.118 0.687 0.266 + 342.55 13.173 13.189 13.193 0.637 0.318 1.061 0.637 0.318 0.337 0.676 0.203 0.816 0.391 + 342.60 13.354 13.377 13.379 0.784 -0.186 1.242 0.784 -0.186 -0.230 0.973 -0.145 1.095 0.505 + 342.65 13.167 13.193 13.206 0.822 -0.597 1.054 0.822 -0.597 -0.629 0.867 -0.491 1.071 0.589 + 342.70 13.548 13.575 13.595 0.849 -0.730 1.436 0.849 -0.730 -1.048 1.219 -0.620 1.658 0.862 + 342.75 13.581 13.606 13.609 0.822 -0.259 1.469 0.822 -0.259 -0.380 1.207 -0.213 1.450 0.642 + 342.80 12.995 13.017 13.020 0.752 -0.283 0.883 0.752 -0.283 -0.250 0.664 -0.213 0.712 0.370 + 342.85 13.059 13.070 13.072 0.549 -0.199 0.946 0.549 -0.199 -0.189 0.519 -0.109 0.618 0.282 + 342.90 13.209 13.219 13.219 0.510 -0.037 1.096 0.510 -0.037 -0.041 0.559 -0.019 0.732 0.280 + 342.95 13.598 13.605 13.611 0.414 -0.402 1.486 0.414 -0.402 -0.597 0.615 -0.166 1.270 0.436 + 343.00 13.335 13.340 13.340 0.380 0.055 1.222 0.380 0.055 0.068 0.465 0.021 0.820 0.235 + 343.05 13.118 13.125 13.130 0.424 0.366 1.005 0.424 0.366 0.368 0.426 0.155 0.662 0.292 + 343.10 13.329 13.332 13.334 0.270 0.224 1.217 0.270 0.224 0.272 0.329 0.060 0.802 0.216 + 343.15 13.491 13.493 13.496 0.264 0.247 1.378 0.264 0.247 0.341 0.364 0.065 1.015 0.252 + 343.20 13.554 13.556 13.560 0.189 0.339 1.441 0.189 0.339 0.488 0.273 0.064 1.114 0.281 + 343.25 13.641 13.641 13.641 -0.019 0.056 1.528 -0.019 0.056 0.085 -0.028 -0.001 1.170 0.045 + 343.30 13.532 13.532 13.537 -0.060 0.343 1.419 -0.060 0.343 0.487 -0.085 -0.020 1.068 0.247 + 343.35 13.385 13.385 13.385 -0.096 -0.079 1.272 -0.096 -0.079 -0.101 -0.122 0.008 0.817 0.079 + 343.40 13.681 13.683 13.684 0.255 -0.179 1.568 0.255 -0.179 -0.281 0.399 -0.046 1.278 0.245 + 343.45 13.401 13.405 13.405 0.300 -0.040 1.289 0.300 -0.040 -0.052 0.387 -0.012 0.876 0.195 + 343.50 13.355 13.360 13.360 0.364 -0.018 1.242 0.364 -0.018 -0.023 0.451 -0.007 0.837 0.226 + 343.55 13.385 13.390 13.390 0.354 -0.037 1.272 0.354 -0.037 -0.047 0.451 -0.013 0.873 0.227 + 343.60 13.256 13.256 13.256 -0.005 0.155 1.143 -0.005 0.155 0.177 -0.005 -0.001 0.665 0.088 + 343.65 13.592 13.595 13.597 -0.252 0.233 1.480 -0.252 0.233 0.345 -0.372 -0.059 1.154 0.255 + 343.70 13.572 13.574 13.574 -0.209 0.130 1.459 -0.209 0.130 0.189 -0.306 -0.027 1.095 0.180 + 343.75 13.672 13.677 13.681 -0.378 0.337 1.559 -0.378 0.337 0.525 -0.590 -0.128 1.344 0.400 + 343.80 13.675 13.694 13.697 -0.722 0.268 1.562 -0.722 0.268 0.419 -1.128 -0.194 1.517 0.609 + 343.85 13.617 13.630 13.634 -0.597 0.338 1.504 -0.597 0.338 0.508 -0.897 -0.202 1.366 0.525 + 343.90 13.603 13.611 13.625 -0.460 0.633 1.490 -0.460 0.633 0.943 -0.685 -0.291 1.416 0.600 + 343.95 13.315 13.323 13.331 -0.467 0.468 1.202 -0.467 0.468 0.562 -0.561 -0.219 0.941 0.412 + 344.00 13.284 13.293 13.300 -0.483 0.447 1.171 -0.483 0.447 0.524 -0.566 -0.216 0.903 0.401 + 344.05 13.045 13.066 13.110 -0.736 1.075 0.932 -0.736 1.075 1.002 -0.686 -0.791 1.283 0.725 + 344.10 13.289 13.294 13.315 -0.386 0.736 1.176 -0.386 0.736 0.865 -0.454 -0.284 1.037 0.509 + 344.15 13.406 13.413 13.430 -0.424 0.683 1.293 -0.424 0.683 0.883 -0.549 -0.290 1.159 0.540 + 344.20 13.356 13.388 13.427 -0.925 1.012 1.244 -0.925 1.012 1.259 -1.150 -0.936 1.713 0.972 + 344.25 13.518 13.548 13.583 -0.903 0.966 1.405 -0.903 0.966 1.357 -1.268 -0.872 1.861 1.026 + 344.30 13.523 13.532 13.552 -0.482 0.749 1.410 -0.482 0.749 1.056 -0.680 -0.361 1.391 0.654 + 344.35 13.403 13.430 13.465 -0.851 0.974 1.290 -0.851 0.974 1.256 -1.098 -0.828 1.668 0.931 + 344.40 13.501 13.513 13.543 -0.566 0.902 1.389 -0.566 0.902 1.253 -0.786 -0.511 1.531 0.782 + 344.45 13.624 13.630 13.639 -0.404 0.507 1.511 -0.404 0.507 0.766 -0.611 -0.205 1.352 0.501 + 344.50 13.434 13.442 13.448 -0.479 0.390 1.321 -0.479 0.390 0.515 -0.632 -0.187 1.063 0.418 + 344.55 13.467 13.479 13.480 -0.589 0.151 1.354 -0.589 0.151 0.204 -0.797 -0.089 1.101 0.414 + 344.60 13.601 13.607 13.608 -0.430 0.158 1.488 -0.430 0.158 0.235 -0.639 -0.068 1.212 0.342 + 344.65 13.603 13.624 13.627 -0.758 0.254 1.490 -0.758 0.254 0.379 -1.129 -0.192 1.430 0.603 + 344.70 13.644 13.653 13.653 -0.482 0.039 1.531 -0.482 0.039 0.060 -0.738 -0.019 1.289 0.370 + 344.75 13.511 13.511 13.511 -0.057 0.026 1.398 -0.057 0.026 0.036 -0.080 -0.001 0.980 0.044 + 344.80 13.144 13.144 13.146 0.046 0.186 1.032 0.046 0.186 0.192 0.047 0.008 0.550 0.099 + 344.85 13.265 13.266 13.268 -0.201 0.209 1.152 -0.201 0.209 0.240 -0.231 -0.042 0.705 0.168 + 344.90 13.182 13.185 13.186 -0.321 0.091 1.069 -0.321 0.091 0.097 -0.343 -0.029 0.627 0.179 + 344.95 13.149 13.158 13.158 -0.492 0.044 1.036 -0.492 0.044 0.046 -0.510 -0.022 0.659 0.256 + 345.00 13.293 13.320 13.320 -0.846 -0.057 1.181 -0.846 -0.057 -0.067 -0.998 0.048 1.056 0.501 + 345.05 13.388 13.436 13.437 -1.143 -0.118 1.275 -1.143 -0.118 -0.151 -1.457 0.135 1.473 0.736 + 345.10 13.216 13.280 13.280 -1.300 0.095 1.103 -1.300 0.095 0.105 -1.434 -0.124 1.458 0.722 + 345.15 13.054 13.144 13.148 -1.533 0.338 0.941 -1.533 0.338 0.318 -1.442 -0.518 1.674 0.783 + 345.20 12.898 12.998 12.998 -1.610 -0.040 0.785 -1.610 -0.040 -0.031 -1.264 0.064 1.605 0.633 + 345.25 13.104 13.168 13.169 -1.297 -0.213 0.991 -1.297 -0.213 -0.211 -1.285 0.277 1.355 0.666 + 345.30 13.230 13.266 13.266 -0.974 0.007 1.117 -0.974 0.007 0.008 -1.089 -0.007 1.099 0.544 + 345.35 13.350 13.378 13.381 -0.854 -0.295 1.237 -0.854 -0.295 -0.365 -1.057 0.252 1.174 0.573 + 345.40 13.323 13.337 13.341 -0.621 -0.320 1.210 -0.621 -0.320 -0.387 -0.751 0.199 0.976 0.434 + 345.45 13.284 13.296 13.300 -0.556 -0.318 1.172 -0.556 -0.318 -0.372 -0.651 0.177 0.891 0.385 + 345.50 13.308 13.316 13.319 -0.475 -0.253 1.195 -0.475 -0.253 -0.302 -0.568 0.120 0.859 0.327 + 345.55 13.423 13.431 13.442 -0.478 -0.531 1.310 -0.478 -0.531 -0.696 -0.627 0.254 1.114 0.485 + 345.60 13.311 13.321 13.332 -0.509 -0.539 1.198 -0.509 -0.539 -0.645 -0.610 0.274 0.993 0.465 + 345.65 12.827 12.835 12.841 -0.443 -0.390 0.714 -0.443 -0.390 -0.279 -0.316 0.173 0.429 0.228 + 345.70 12.712 12.714 12.715 -0.222 -0.166 0.600 -0.222 -0.166 -0.099 -0.133 0.037 0.218 0.085 + 345.75 12.951 12.952 12.954 -0.135 -0.214 0.839 -0.135 -0.214 -0.180 -0.113 0.029 0.384 0.107 + 345.80 13.171 13.173 13.181 -0.220 -0.448 1.058 -0.220 -0.448 -0.474 -0.233 0.098 0.684 0.268 + 345.85 13.019 13.020 13.020 0.067 -0.140 0.907 0.067 -0.140 -0.127 0.060 -0.009 0.423 0.071 + 345.90 13.075 13.075 13.075 0.049 -0.118 0.962 0.049 -0.118 -0.114 0.047 -0.006 0.471 0.062 + 345.95 13.062 13.063 13.063 0.138 0.027 0.950 0.138 0.027 0.025 0.131 0.004 0.461 0.067 + 346.00 13.045 13.049 13.050 0.328 -0.182 0.932 0.328 -0.182 -0.169 0.306 -0.060 0.505 0.177 + 346.05 12.822 12.825 12.825 0.257 0.064 0.709 0.257 0.064 0.045 0.182 0.016 0.287 0.094 + 346.10 12.708 12.719 12.719 0.529 -0.056 0.595 0.529 -0.056 -0.033 0.315 -0.030 0.319 0.159 + 346.15 12.665 12.688 12.688 0.757 -0.004 0.553 0.757 -0.004 -0.002 0.418 -0.003 0.439 0.209 + 346.20 12.900 12.929 12.930 0.866 -0.174 0.787 0.866 -0.174 -0.137 0.681 -0.151 0.699 0.355 + 346.25 12.724 12.741 12.741 0.669 0.023 0.611 0.669 0.023 0.014 0.409 0.016 0.411 0.205 + 346.30 13.016 13.025 13.026 0.469 -0.152 0.903 0.469 -0.152 -0.137 0.424 -0.071 0.530 0.226 + 346.35 13.033 13.041 13.054 0.451 -0.592 0.920 0.451 -0.592 -0.545 0.415 -0.267 0.700 0.367 + 346.40 13.165 13.167 13.167 0.192 -0.117 1.052 0.192 -0.117 -0.123 0.202 -0.022 0.579 0.119 + 346.45 13.434 13.444 13.444 0.524 0.026 1.321 0.524 0.026 0.034 0.692 0.014 1.011 0.347 + 346.50 13.887 13.907 13.907 0.734 -0.114 1.774 0.734 -0.114 -0.202 1.303 -0.083 1.850 0.660 + 346.55 14.064 14.087 14.093 0.801 0.385 1.952 0.801 0.385 0.751 1.564 0.308 2.300 0.881 + 346.60 13.719 13.764 13.770 1.115 0.422 1.606 1.115 0.422 0.678 1.791 0.471 2.001 0.986 + 346.65 13.448 13.481 13.485 0.943 0.355 1.335 0.943 0.355 0.473 1.259 0.334 1.399 0.693 + 346.70 13.725 13.760 13.764 0.982 0.333 1.612 0.982 0.333 0.537 1.583 0.327 1.837 0.851 + 346.75 13.768 13.809 13.815 1.064 0.425 1.655 1.064 0.425 0.703 1.760 0.452 2.025 0.974 + 346.80 13.685 13.737 13.744 1.197 0.445 1.572 1.197 0.445 0.699 1.881 0.532 2.050 1.038 + 346.85 13.378 13.410 13.423 0.918 0.588 1.266 0.918 0.588 0.744 1.162 0.540 1.395 0.741 + 346.90 13.503 13.536 13.546 0.949 0.533 1.390 0.949 0.533 0.741 1.320 0.506 1.559 0.798 + 346.95 13.415 13.442 13.449 0.841 0.450 1.303 0.841 0.450 0.586 1.096 0.379 1.304 0.650 + 347.00 13.379 13.388 13.400 0.482 0.579 1.266 0.482 0.579 0.733 0.611 0.279 1.085 0.497 + 347.05 13.434 13.450 13.470 0.661 0.739 1.321 0.661 0.739 0.977 0.874 0.489 1.364 0.699 + 347.10 13.672 13.684 13.707 0.576 0.780 1.560 0.576 0.780 1.216 0.898 0.449 1.686 0.789 + 347.15 13.580 13.607 13.617 0.859 0.531 1.467 0.859 0.531 0.778 1.260 0.456 1.586 0.775 + 347.20 13.566 13.652 13.662 1.530 0.512 1.454 1.530 0.512 0.744 2.224 0.783 2.358 1.236 + 347.25 13.437 13.481 13.491 1.098 0.520 1.324 1.098 0.520 0.689 1.454 0.571 1.614 0.853 + 347.30 13.414 13.491 13.513 1.440 0.766 1.301 1.440 0.766 0.996 1.874 1.103 2.177 1.196 + 347.35 13.405 13.487 13.498 1.485 0.556 1.292 1.485 0.556 0.718 1.918 0.825 2.091 1.104 + 347.40 13.451 13.538 13.538 1.531 -0.039 1.339 1.531 -0.039 -0.052 2.050 -0.059 2.069 1.026 + 347.45 13.401 13.487 13.491 1.525 -0.305 1.288 1.525 -0.305 -0.393 1.964 -0.465 2.038 1.028 + 347.50 13.235 13.336 13.343 1.642 -0.415 1.122 1.642 -0.415 -0.466 1.843 -0.682 2.064 1.010 + 347.55 13.716 13.776 13.783 1.276 -0.465 1.603 1.276 -0.465 -0.746 2.046 -0.594 2.208 1.129 + 347.60 13.420 13.480 13.484 1.269 -0.327 1.307 1.269 -0.327 -0.428 1.659 -0.416 1.713 0.881 + 347.65 13.167 13.248 13.270 1.463 -0.765 1.054 1.463 -0.765 -0.806 1.542 -1.119 1.918 1.034 + 347.70 13.245 13.304 13.322 1.259 -0.683 1.132 1.259 -0.683 -0.773 1.425 -0.860 1.666 0.917 + 347.75 13.218 13.306 13.323 1.523 -0.673 1.106 1.523 -0.673 -0.744 1.684 -1.025 1.997 1.053 + 347.80 13.022 13.125 13.146 1.641 -0.756 0.909 1.641 -0.756 -0.687 1.491 -1.241 2.046 1.029 + 347.85 13.058 13.157 13.223 1.610 -1.315 0.945 1.610 -1.315 -1.243 1.522 -2.118 2.608 1.444 + 347.90 13.298 13.363 13.424 1.316 -1.281 1.185 1.316 -1.281 -1.518 1.560 -1.686 2.389 1.377 + 347.95 13.400 13.474 13.567 1.405 -1.588 1.288 1.405 -1.588 -2.044 1.810 -2.231 3.077 1.763 + 348.00 13.522 13.600 13.684 1.453 -1.508 1.410 1.453 -1.508 -2.126 2.048 -2.191 3.186 1.838 + 348.05 13.463 13.531 13.568 1.356 -1.010 1.350 1.356 -1.010 -1.363 1.831 -1.369 2.340 1.331 + 348.10 13.550 13.610 13.644 1.271 -0.971 1.437 1.271 -0.971 -1.396 1.827 -1.235 2.313 1.305 + 348.15 13.756 13.809 13.849 1.217 -1.049 1.643 1.217 -1.049 -1.723 1.999 -1.276 2.640 1.466 + 348.20 13.814 13.878 13.931 1.326 -1.218 1.701 1.326 -1.218 -2.072 2.256 -1.615 3.068 1.731 + 348.25 13.757 13.834 13.888 1.454 -1.225 1.645 1.454 -1.225 -2.015 2.391 -1.781 3.160 1.799 + 348.30 13.662 13.702 13.725 1.042 -0.793 1.550 1.042 -0.793 -1.229 1.614 -0.826 2.058 1.095 + 348.35 13.135 13.177 13.189 1.049 -0.558 1.023 1.049 -0.558 -0.571 1.073 -0.586 1.229 0.675 + 348.40 13.010 13.035 13.042 0.812 -0.425 0.897 0.812 -0.425 -0.381 0.729 -0.345 0.823 0.446 + 348.45 13.330 13.361 13.382 0.922 -0.737 1.217 0.922 -0.737 -0.897 1.122 -0.679 1.437 0.794 + 348.50 13.383 13.399 13.426 0.658 -0.857 1.270 0.658 -0.857 -1.088 0.835 -0.563 1.390 0.741 + 348.55 13.208 13.222 13.260 0.611 -0.993 1.095 0.611 -0.993 -1.088 0.669 -0.606 1.279 0.707 + 348.60 13.280 13.305 13.330 0.812 -0.822 1.167 0.812 -0.822 -0.959 0.948 -0.667 1.348 0.752 + 348.65 13.085 13.109 13.129 0.784 -0.736 0.972 0.784 -0.736 -0.716 0.762 -0.577 1.051 0.597 + 348.70 13.223 13.239 13.268 0.649 -0.866 1.111 0.649 -0.866 -0.961 0.721 -0.562 1.202 0.663 + 348.75 12.810 12.816 12.832 0.389 -0.648 0.697 0.389 -0.648 -0.452 0.271 -0.252 0.529 0.292 + 348.80 12.474 12.479 12.503 0.325 -0.774 0.362 0.325 -0.774 -0.280 0.118 -0.252 0.417 0.197 + 348.85 12.654 12.665 12.711 0.524 -1.080 0.541 0.524 -1.080 -0.585 0.284 -0.566 0.867 0.431 + 348.90 12.860 12.870 12.918 0.506 -1.115 0.748 0.506 -1.115 -0.833 0.378 -0.564 1.029 0.538 + 348.95 12.783 12.790 12.825 0.422 -0.954 0.670 0.422 -0.954 -0.640 0.283 -0.402 0.769 0.403 + 349.00 12.642 12.647 12.701 0.350 -1.175 0.529 0.350 -1.175 -0.622 0.185 -0.411 0.891 0.384 + 349.05 12.994 13.010 13.104 0.654 -1.570 0.881 0.654 -1.570 -1.383 0.576 -1.026 1.835 0.908 + 349.10 13.008 13.026 13.102 0.701 -1.405 0.895 0.701 -1.405 -1.257 0.627 -0.984 1.633 0.858 + 349.15 12.688 12.699 12.754 0.533 -1.180 0.575 0.533 -1.180 -0.679 0.307 -0.629 1.004 0.487 + 349.20 12.682 12.708 12.757 0.817 -1.109 0.569 0.817 -1.109 -0.631 0.465 -0.906 1.111 0.599 + 349.25 12.702 12.751 12.789 1.111 -0.995 0.589 1.111 -0.995 -0.586 0.655 -1.106 1.286 0.706 + 349.30 12.645 12.699 12.729 1.167 -0.871 0.532 1.167 -0.871 -0.463 0.621 -1.016 1.201 0.639 + 349.35 12.650 12.688 12.727 0.984 -0.991 0.537 0.984 -0.991 -0.532 0.529 -0.975 1.119 0.615 + 349.40 12.314 12.364 12.393 1.109 -0.843 0.201 1.109 -0.843 -0.170 0.224 -0.935 0.991 0.488 + 349.45 12.420 12.497 12.554 1.384 -1.195 0.307 1.384 -1.195 -0.367 0.425 -1.654 1.719 0.873 + 349.50 12.663 12.713 12.804 1.129 -1.527 0.550 1.129 -1.527 -0.840 0.621 -1.724 1.955 1.008 + 349.55 12.616 12.652 12.708 0.959 -1.191 0.503 0.959 -1.191 -0.600 0.482 -1.142 1.296 0.689 + 349.60 12.605 12.608 12.652 0.286 -1.060 0.492 0.286 -1.060 -0.521 0.141 -0.303 0.724 0.310 + 349.65 12.449 12.450 12.493 0.196 -1.026 0.336 0.196 -1.026 -0.345 0.066 -0.201 0.602 0.202 + 349.70 12.502 12.505 12.536 0.305 -0.883 0.389 0.305 -0.883 -0.343 0.119 -0.270 0.512 0.226 + 349.75 12.676 12.685 12.712 0.470 -0.824 0.563 0.470 -0.824 -0.464 0.265 -0.387 0.609 0.330 + 349.80 12.421 12.426 12.449 0.342 -0.759 0.308 0.342 -0.759 -0.234 0.105 -0.259 0.394 0.182 + 349.85 12.444 12.446 12.480 0.200 -0.916 0.332 0.200 -0.916 -0.304 0.066 -0.183 0.495 0.180 + 349.90 12.901 12.901 12.927 0.020 -0.822 0.788 0.020 -0.822 -0.647 0.016 -0.017 0.648 0.324 + 349.95 12.713 12.716 12.742 -0.247 -0.812 0.601 -0.247 -0.812 -0.488 -0.149 0.201 0.541 0.274 + 350.00 12.935 12.939 12.978 -0.300 -1.006 0.822 -0.300 -1.006 -0.827 -0.247 0.302 0.889 0.457 + 350.05 12.988 12.989 13.024 -0.170 -0.956 0.875 -0.170 -0.956 -0.837 -0.149 0.163 0.854 0.433 + 350.10 12.890 12.891 12.915 -0.144 -0.796 0.777 -0.144 -0.796 -0.619 -0.112 0.114 0.629 0.319 + 350.15 12.647 12.649 12.664 -0.258 -0.611 0.534 -0.258 -0.611 -0.326 -0.138 0.158 0.362 0.194 + 350.20 12.867 12.876 12.892 -0.470 -0.637 0.754 -0.470 -0.637 -0.481 -0.355 0.300 0.598 0.334 + 350.25 12.953 12.964 12.987 -0.541 -0.773 0.840 -0.541 -0.773 -0.650 -0.455 0.418 0.798 0.448 + 350.30 13.341 13.354 13.380 -0.575 -0.832 1.229 -0.575 -0.832 -1.022 -0.706 0.478 1.266 0.665 + 350.35 13.422 13.454 13.471 -0.922 -0.685 1.309 -0.922 -0.685 -0.897 -1.207 0.631 1.516 0.815 + 350.40 13.445 13.468 13.478 -0.783 -0.520 1.332 -0.783 -0.520 -0.692 -1.043 0.407 1.329 0.658 + 350.45 13.607 13.614 13.649 -0.442 -0.975 1.494 -0.442 -0.975 -1.457 -0.661 0.431 1.690 0.829 + 350.50 13.839 13.842 13.870 -0.310 -0.875 1.726 -0.310 -0.875 -1.510 -0.535 0.271 1.920 0.812 + 350.55 13.538 13.540 13.566 -0.235 -0.840 1.425 -0.235 -0.840 -1.198 -0.335 0.197 1.396 0.630 + 350.60 13.556 13.557 13.585 -0.091 -0.884 1.444 -0.091 -0.884 -1.277 -0.131 0.081 1.437 0.643 + 350.65 13.653 13.655 13.671 -0.270 -0.655 1.540 -0.270 -0.655 -1.009 -0.416 0.177 1.437 0.553 + 350.70 13.354 13.359 13.389 -0.368 -0.895 1.241 -0.368 -0.895 -1.111 -0.456 0.329 1.238 0.623 + 350.75 13.651 13.665 13.704 -0.616 -1.032 1.539 -0.616 -1.032 -1.588 -0.948 0.636 1.906 0.978 + 350.80 13.846 13.875 13.918 -0.902 -1.094 1.733 -0.902 -1.094 -1.897 -1.562 0.987 2.507 1.324 + 350.85 13.595 13.623 13.661 -0.870 -1.026 1.482 -0.870 -1.026 -1.521 -1.289 0.893 2.003 1.092 + 350.90 13.559 13.567 13.613 -0.480 -1.120 1.446 -0.480 -1.120 -1.619 -0.695 0.538 1.788 0.921 + 350.95 13.711 13.715 13.766 -0.342 -1.174 1.598 -0.342 -1.174 -1.876 -0.546 0.401 2.024 0.997 + 351.00 13.466 13.467 13.502 0.130 -0.977 1.353 0.130 -0.977 -1.323 0.175 -0.127 1.402 0.670 + 351.05 13.649 13.649 13.658 -0.001 -0.484 1.536 -0.001 -0.484 -0.743 -0.001 0.000 1.297 0.371 + 351.10 13.642 13.642 13.644 -0.065 0.227 1.529 -0.065 0.227 0.347 -0.099 -0.015 1.197 0.180 + 351.15 14.098 14.104 14.106 -0.408 -0.244 1.985 -0.408 -0.244 -0.485 -0.809 0.100 2.083 0.474 + 351.20 13.700 13.710 13.714 -0.525 -0.295 1.588 -0.525 -0.295 -0.469 -0.834 0.155 1.442 0.485 + 351.25 13.354 13.358 13.360 -0.318 0.232 1.242 -0.318 0.232 0.288 -0.394 -0.074 0.848 0.247 + 351.30 13.244 13.245 13.246 -0.208 0.149 1.131 -0.208 0.149 0.169 -0.235 -0.031 0.672 0.146 + 351.35 13.446 13.446 13.451 -0.007 0.362 1.334 -0.007 0.362 0.483 -0.009 -0.003 0.955 0.241 + 351.40 13.389 13.390 13.391 0.156 0.185 1.276 0.156 0.185 0.237 0.199 0.029 0.844 0.155 + 351.45 13.229 13.230 13.230 0.141 0.123 1.116 0.141 0.123 0.137 0.157 0.017 0.640 0.105 + 351.50 13.417 13.421 13.421 0.318 0.048 1.305 0.318 0.048 0.062 0.415 0.015 0.903 0.210 + 351.55 13.438 13.441 13.444 0.269 -0.290 1.325 0.269 -0.290 -0.384 0.357 -0.078 0.956 0.265 + 351.60 13.694 13.698 13.700 0.311 -0.242 1.581 0.311 -0.242 -0.382 0.491 -0.075 1.328 0.313 + 351.65 13.635 13.641 13.641 0.402 -0.093 1.522 0.402 -0.093 -0.141 0.613 -0.037 1.243 0.315 + 351.70 13.428 13.429 13.429 0.167 -0.017 1.315 0.167 -0.017 -0.023 0.219 -0.003 0.879 0.110 + 351.75 13.715 13.715 13.717 -0.053 -0.268 1.602 -0.053 -0.268 -0.430 -0.085 0.014 1.320 0.219 + 351.80 13.766 13.770 13.773 -0.339 -0.277 1.653 -0.339 -0.277 -0.459 -0.561 0.094 1.463 0.365 + 351.85 13.427 13.438 13.440 -0.528 0.243 1.315 -0.528 0.243 0.319 -0.694 -0.128 1.033 0.387 + 351.90 13.741 13.743 13.749 -0.213 0.403 1.628 -0.213 0.403 0.657 -0.347 -0.086 1.430 0.374 + 351.95 13.609 13.612 13.618 -0.315 0.388 1.496 -0.315 0.388 0.580 -0.471 -0.122 1.243 0.378 + 352.00 13.173 13.181 13.205 -0.461 0.784 1.060 -0.461 0.784 0.831 -0.489 -0.362 0.976 0.515 + 352.05 13.398 13.412 13.427 -0.616 0.635 1.285 -0.616 0.635 0.816 -0.792 -0.391 1.218 0.602 + 352.10 13.363 13.374 13.387 -0.537 0.595 1.251 -0.537 0.595 0.744 -0.672 -0.319 1.103 0.526 + 352.15 13.293 13.308 13.335 -0.620 0.848 1.181 -0.620 0.848 1.001 -0.732 -0.526 1.249 0.674 + 352.20 13.382 13.390 13.434 -0.468 1.083 1.269 -0.468 1.083 1.374 -0.594 -0.507 1.501 0.791 + 352.25 13.055 13.065 13.160 -0.531 1.574 0.942 -0.531 1.574 1.482 -0.500 -0.836 1.823 0.887 + 352.30 13.020 13.031 13.132 -0.520 1.633 0.907 -0.520 1.633 1.481 -0.472 -0.849 1.880 0.886 + 352.35 13.000 13.018 13.086 -0.676 1.334 0.888 -0.676 1.334 1.184 -0.600 -0.901 1.512 0.802 + 352.40 13.017 13.056 13.106 -1.012 1.135 0.904 -1.012 1.135 1.026 -0.915 -1.149 1.565 0.896 + 352.45 12.862 12.898 12.956 -0.960 1.221 0.749 -0.960 1.221 0.915 -0.720 -1.172 1.487 0.826 + 352.50 12.936 12.977 13.044 -1.032 1.319 0.823 -1.032 1.319 1.086 -0.850 -1.361 1.741 0.969 + 352.55 12.976 13.041 13.138 -1.308 1.587 0.863 -1.308 1.587 1.370 -1.129 -2.077 2.488 1.366 + 352.60 13.109 13.175 13.271 -1.310 1.595 0.997 -1.310 1.595 1.589 -1.305 -2.089 2.626 1.466 + 352.65 12.900 12.985 13.074 -1.489 1.519 0.787 -1.489 1.519 1.196 -1.171 -2.261 2.572 1.407 + 352.70 12.681 12.771 12.882 -1.516 1.685 0.568 -1.516 1.685 0.958 -0.861 -2.553 2.729 1.430 + 352.75 12.581 12.672 12.761 -1.515 1.502 0.468 -1.515 1.502 0.704 -0.710 -2.276 2.386 1.243 + 352.80 12.860 12.933 12.998 -1.366 1.297 0.748 -1.366 1.297 0.970 -1.021 -1.772 2.054 1.132 + 352.85 12.929 13.022 13.118 -1.548 1.585 0.817 -1.548 1.585 1.294 -1.264 -2.454 2.788 1.524 + 352.90 12.745 12.815 12.919 -1.341 1.632 0.632 -1.341 1.632 1.031 -0.847 -2.187 2.430 1.281 + 352.95 13.295 13.371 13.528 -1.430 2.055 1.182 -1.430 2.055 2.428 -1.690 -2.938 3.832 2.085 + 353.00 13.378 13.439 13.601 -1.274 2.094 1.265 -1.274 2.094 2.650 -1.612 -2.668 3.805 2.046 + 353.05 13.186 13.223 13.375 -0.984 2.011 1.073 -0.984 2.011 2.158 -1.056 -1.978 3.082 1.556 + 353.10 12.920 12.955 13.109 -0.961 2.002 0.807 -0.961 2.002 1.616 -0.775 -1.924 2.792 1.315 + 353.15 13.019 13.033 13.175 -0.598 1.930 0.906 -0.598 1.930 1.749 -0.542 -1.154 2.452 1.082 + 353.20 13.559 13.564 13.656 -0.355 1.585 1.447 -0.355 1.585 2.293 -0.514 -0.563 2.366 1.208 + 353.25 13.612 13.621 13.741 -0.486 1.812 1.500 -0.486 1.812 2.718 -0.729 -0.881 2.885 1.474 + 353.30 13.640 13.645 13.728 -0.353 1.514 1.527 -0.353 1.514 2.312 -0.540 -0.535 2.375 1.217 + 353.35 13.906 13.925 13.990 -0.728 1.344 1.793 -0.728 1.344 2.411 -1.305 -0.978 2.776 1.455 + 353.40 13.722 13.746 13.816 -0.798 1.397 1.610 -0.798 1.397 2.249 -1.285 -1.115 2.590 1.410 + 353.45 14.036 14.052 14.099 -0.684 1.149 1.923 -0.684 1.149 2.208 -1.314 -0.785 2.742 1.344 + 353.50 14.130 14.140 14.153 -0.548 0.596 2.017 -0.548 0.596 1.203 -1.106 -0.327 2.362 0.833 + 353.55 13.935 13.939 13.950 -0.305 0.552 1.822 -0.305 0.552 1.005 -0.555 -0.168 1.859 0.580 + 353.60 13.896 13.901 13.913 -0.377 0.573 1.783 -0.377 0.573 1.023 -0.671 -0.216 1.825 0.621 + 353.65 13.627 13.642 13.663 -0.648 0.767 1.514 -0.648 0.767 1.160 -0.981 -0.497 1.649 0.799 + 353.70 13.895 13.921 13.936 -0.858 0.636 1.782 -0.858 0.636 1.133 -1.529 -0.545 2.158 0.990 + 353.75 14.129 14.169 14.176 -1.071 0.435 2.016 -1.071 0.435 0.877 -2.160 -0.466 2.701 1.189 + 353.80 14.140 14.170 14.179 -0.913 0.511 2.027 -0.913 0.511 1.037 -1.851 -0.467 2.603 1.086 + 353.85 14.148 14.177 14.196 -0.910 0.725 2.035 -0.910 0.725 1.476 -1.852 -0.660 2.748 1.229 + 353.90 13.869 13.946 13.951 -1.465 0.383 1.756 -1.465 0.383 0.672 -2.572 -0.561 2.688 1.359 + 353.95 13.654 13.722 13.730 -1.369 0.477 1.541 -1.369 0.477 0.735 -2.109 -0.653 2.237 1.163 + 354.00 13.351 13.419 13.435 -1.350 0.660 1.238 -1.350 0.660 0.817 -1.671 -0.890 1.895 1.031 + 354.05 13.654 13.709 13.713 -1.225 0.317 1.541 -1.225 0.317 0.489 -1.888 -0.389 1.989 0.995 + 354.10 13.600 13.669 13.672 -1.369 0.297 1.488 -1.369 0.297 0.443 -2.037 -0.407 2.088 1.062 + 354.15 13.387 13.446 13.463 -1.262 0.673 1.274 -1.262 0.673 0.858 -1.608 -0.850 1.835 1.006 + 354.20 13.431 13.518 13.555 -1.532 1.004 1.318 -1.532 1.004 1.323 -2.019 -1.538 2.546 1.431 + 354.25 13.350 13.453 13.486 -1.659 0.955 1.237 -1.659 0.955 1.181 -2.052 -1.584 2.597 1.424 + 354.30 13.263 13.381 13.406 -1.769 0.819 1.150 -1.769 0.819 0.942 -2.035 -1.449 2.562 1.335 + 354.35 13.257 13.332 13.357 -1.420 0.804 1.144 -1.420 0.804 0.920 -1.624 -1.142 1.986 1.094 + 354.40 12.973 13.038 13.070 -1.297 0.922 0.860 -1.297 0.922 0.793 -1.115 -1.196 1.636 0.909 + 354.45 12.810 12.862 12.897 -1.163 0.941 0.697 -1.163 0.941 0.656 -0.810 -1.094 1.362 0.756 + 354.50 12.841 12.893 12.931 -1.151 1.001 0.728 -1.151 1.001 0.729 -0.838 -1.152 1.428 0.800 + 354.55 12.702 12.788 12.820 -1.477 0.908 0.589 -1.477 0.908 0.535 -0.870 -1.342 1.677 0.843 + 354.60 12.850 12.922 12.961 -1.360 1.002 0.737 -1.360 1.002 0.739 -1.002 -1.363 1.698 0.923 + 354.65 12.830 12.884 12.910 -1.174 0.825 0.717 -1.174 0.825 0.592 -0.842 -0.969 1.287 0.707 + 354.70 13.104 13.164 13.182 -1.255 0.685 0.992 -1.255 0.685 0.680 -1.245 -0.860 1.515 0.829 + 354.75 13.327 13.362 13.413 -0.967 1.161 1.215 -0.967 1.161 1.410 -1.175 -1.123 1.879 1.076 + 354.80 13.404 13.437 13.455 -0.935 0.706 1.291 -0.935 0.706 0.912 -1.208 -0.660 1.520 0.826 + 354.85 13.238 13.263 13.288 -0.804 0.810 1.126 -0.804 0.810 0.912 -0.905 -0.651 1.285 0.720 + 354.90 13.079 13.119 13.151 -1.031 0.917 0.966 -1.031 0.917 0.886 -0.996 -0.946 1.419 0.817 + 354.95 13.240 13.269 13.279 -0.872 0.523 1.127 -0.872 0.523 0.589 -0.983 -0.456 1.152 0.617 + 355.00 13.327 13.349 13.372 -0.768 0.784 1.214 -0.768 0.784 0.952 -0.932 -0.602 1.339 0.731 + 355.05 13.023 13.057 13.105 -0.948 1.115 0.910 -0.948 1.115 1.015 -0.863 -1.057 1.485 0.850 + 355.10 13.300 13.323 13.386 -0.788 1.293 1.187 -0.788 1.293 1.535 -0.935 -1.019 1.851 1.033 + 355.15 13.192 13.221 13.292 -0.865 1.371 1.079 -0.865 1.371 1.480 -0.934 -1.187 1.897 1.057 + 355.20 13.191 13.211 13.279 -0.738 1.339 1.078 -0.738 1.339 1.443 -0.796 -0.988 1.750 0.961 + 355.25 13.382 13.398 13.476 -0.659 1.442 1.269 -0.659 1.442 1.831 -0.837 -0.951 2.063 1.113 + 355.30 13.666 13.670 13.714 -0.307 1.101 1.553 -0.307 1.101 1.710 -0.477 -0.338 1.860 0.904 + 355.35 13.310 13.318 13.348 -0.453 0.898 1.197 -0.453 0.898 1.075 -0.542 -0.407 1.223 0.636 + 355.40 12.968 12.985 13.026 -0.676 1.031 0.855 -0.676 1.031 0.882 -0.578 -0.697 1.125 0.632 + 355.45 13.000 13.008 13.055 -0.451 1.115 0.887 -0.451 1.115 0.989 -0.400 -0.503 1.116 0.590 + 355.50 13.241 13.251 13.265 -0.518 0.608 1.128 -0.518 0.608 0.685 -0.585 -0.315 0.955 0.477 + 355.55 13.471 13.479 13.493 -0.461 0.615 1.358 -0.461 0.615 0.836 -0.627 -0.284 1.218 0.541 + 355.60 13.433 13.435 13.443 -0.205 0.472 1.320 -0.205 0.472 0.623 -0.271 -0.097 1.004 0.343 + 355.65 13.058 13.059 13.060 -0.227 0.113 0.945 -0.227 0.113 0.106 -0.214 -0.026 0.478 0.120 + 355.70 13.417 13.419 13.421 -0.229 0.223 1.305 -0.229 0.223 0.291 -0.298 -0.051 0.902 0.210 + 355.75 13.476 13.479 13.486 -0.313 0.444 1.363 -0.313 0.444 0.604 -0.426 -0.139 1.076 0.376 + 355.80 13.416 13.427 13.428 -0.555 0.154 1.303 -0.555 0.154 0.201 -0.723 -0.086 1.015 0.378 + 355.85 13.224 13.233 13.241 -0.483 0.449 1.111 -0.483 0.449 0.499 -0.537 -0.217 0.835 0.382 + 355.90 13.318 13.321 13.323 -0.277 0.248 1.205 -0.277 0.248 0.299 -0.334 -0.069 0.795 0.227 + 355.95 13.270 13.271 13.272 0.155 0.183 1.157 0.155 0.183 0.212 0.180 0.028 0.699 0.140 + 356.00 13.271 13.275 13.282 0.331 0.437 1.158 0.331 0.437 0.507 0.383 0.145 0.821 0.326 + 356.05 13.224 13.225 13.229 0.164 0.304 1.111 0.164 0.304 0.338 0.182 0.050 0.677 0.194 + 356.10 13.271 13.274 13.276 0.247 0.236 1.159 0.247 0.236 0.273 0.286 0.058 0.729 0.200 + 356.15 13.253 13.253 13.257 -0.091 0.297 1.140 -0.091 0.297 0.338 -0.104 -0.027 0.698 0.178 + 356.20 13.072 13.073 13.076 0.181 0.298 0.959 0.181 0.298 0.286 0.174 0.054 0.521 0.170 + 356.25 13.229 13.231 13.233 0.252 0.257 1.116 0.252 0.257 0.287 0.281 0.065 0.687 0.203 + 356.30 13.111 13.112 13.115 0.124 0.310 0.998 0.124 0.310 0.309 0.124 0.039 0.554 0.168 + 356.35 13.116 13.116 13.122 0.103 0.412 1.003 0.103 0.412 0.413 0.103 0.042 0.593 0.214 + 356.40 13.259 13.259 13.260 0.082 0.159 1.146 0.082 0.159 0.183 0.094 0.013 0.673 0.103 + 356.45 13.245 13.250 13.251 0.353 0.187 1.132 0.353 0.187 0.211 0.400 0.066 0.721 0.229 + 356.50 13.203 13.212 13.213 0.475 0.197 1.090 0.475 0.197 0.215 0.517 0.094 0.726 0.284 + 356.55 13.421 13.422 13.422 0.188 -0.062 1.308 0.188 -0.062 -0.081 0.246 -0.012 0.875 0.130 + 356.60 13.083 13.085 13.094 0.222 0.477 0.970 0.222 0.477 0.463 0.215 0.106 0.609 0.261 + 356.65 13.167 13.175 13.191 0.450 0.665 1.054 0.450 0.665 0.701 0.475 0.299 0.878 0.449 + 356.70 12.991 13.004 13.006 0.565 0.229 0.878 0.565 0.229 0.202 0.496 0.130 0.572 0.276 + 356.75 12.760 12.778 12.778 0.688 0.036 0.647 0.688 0.036 0.024 0.445 0.025 0.447 0.223 + 356.80 12.998 13.016 13.016 0.687 0.026 0.885 0.687 0.026 0.023 0.608 0.018 0.628 0.304 + 356.85 13.266 13.271 13.272 0.377 0.117 1.153 0.377 0.117 0.135 0.435 0.044 0.743 0.229 + 356.90 13.014 13.021 13.021 0.417 0.093 0.901 0.417 0.093 0.084 0.376 0.039 0.498 0.194 + 356.95 12.833 12.835 12.835 0.258 0.039 0.720 0.258 0.039 0.028 0.186 0.010 0.293 0.094 + 357.00 13.084 13.086 13.088 0.225 0.210 0.971 0.225 0.210 0.204 0.219 0.047 0.519 0.151 + 357.05 13.253 13.256 13.256 0.257 0.048 1.141 0.257 0.048 0.055 0.293 0.012 0.685 0.149 + 357.10 13.283 13.300 13.301 0.669 0.114 1.170 0.669 0.114 0.133 0.783 0.076 0.915 0.399 + 357.15 13.204 13.233 13.237 0.872 0.309 1.092 0.872 0.309 0.338 0.952 0.270 1.024 0.523 + 357.20 13.564 13.584 13.585 0.745 -0.131 1.451 0.745 -0.131 -0.190 1.081 -0.097 1.339 0.551 + 357.25 13.796 13.805 13.809 0.513 -0.327 1.683 0.513 -0.327 -0.551 0.864 -0.168 1.602 0.519 + 357.30 13.834 13.847 13.850 0.592 -0.304 1.722 0.592 -0.304 -0.523 1.018 -0.180 1.703 0.579 + 357.35 13.808 13.820 13.826 0.575 -0.428 1.695 0.575 -0.428 -0.726 0.975 -0.246 1.693 0.620 + 357.40 13.435 13.446 13.446 0.542 -0.016 1.322 0.542 -0.016 -0.022 0.717 -0.009 1.022 0.359 + 357.45 13.513 13.521 13.521 0.463 0.078 1.400 0.463 0.078 0.109 0.648 0.036 1.090 0.329 + 357.50 13.897 13.903 13.903 0.416 -0.125 1.784 0.416 -0.125 -0.224 0.741 -0.052 1.685 0.388 + 357.55 13.843 13.848 13.848 0.342 0.032 1.731 0.342 0.032 0.055 0.593 0.011 1.557 0.298 + 357.60 13.666 13.674 13.675 0.449 0.174 1.553 0.449 0.174 0.270 0.697 0.078 1.322 0.376 + 357.65 13.534 13.565 13.565 0.907 -0.152 1.422 0.907 -0.152 -0.216 1.289 -0.138 1.433 0.657 + 357.70 13.659 13.699 13.699 1.039 -0.056 1.547 1.039 -0.056 -0.086 1.608 -0.058 1.738 0.805 + 357.75 13.774 13.810 13.811 1.002 -0.134 1.661 1.002 -0.134 -0.223 1.664 -0.135 1.891 0.842 + 357.80 13.822 13.868 13.868 1.119 -0.119 1.710 1.119 -0.119 -0.203 1.914 -0.133 2.095 0.964 + 357.85 13.700 13.731 13.731 0.921 0.070 1.587 0.921 0.070 0.111 1.461 0.065 1.686 0.733 + 357.90 13.647 13.698 13.698 1.180 -0.086 1.534 1.180 -0.086 -0.131 1.811 -0.101 1.877 0.909 + 357.95 13.652 13.688 13.688 0.992 -0.120 1.539 0.992 -0.120 -0.185 1.527 -0.120 1.684 0.772 + 358.00 13.735 13.770 13.770 0.974 0.085 1.622 0.974 0.085 0.137 1.581 0.082 1.794 0.794 + 358.05 13.768 13.802 13.803 0.973 -0.178 1.655 0.973 -0.178 -0.294 1.610 -0.173 1.859 0.823 + 358.10 13.920 13.930 13.930 0.510 -0.002 1.808 0.510 -0.002 -0.003 0.921 -0.001 1.763 0.461 + 358.15 13.983 13.986 13.992 0.267 0.415 1.871 0.267 0.415 0.777 0.499 0.111 1.871 0.465 + 358.20 13.616 13.619 13.630 0.305 0.539 1.503 0.305 0.539 0.810 0.458 0.164 1.321 0.472 + 358.25 13.107 13.124 13.140 0.669 0.647 0.994 0.669 0.647 0.643 0.664 0.432 0.927 0.510 + 358.30 12.728 12.742 12.749 0.595 0.438 0.615 0.595 0.438 0.269 0.366 0.260 0.462 0.262 + 358.35 13.115 13.126 13.126 0.532 0.120 1.002 0.532 0.120 0.120 0.533 0.064 0.651 0.275 + 358.40 13.008 13.010 13.016 0.246 0.392 0.895 0.246 0.392 0.351 0.220 0.096 0.508 0.212 + 358.45 13.109 13.112 13.113 0.287 0.202 0.996 0.287 0.202 0.201 0.286 0.058 0.557 0.177 + 358.50 13.295 13.303 13.305 0.452 0.254 1.182 0.452 0.254 0.300 0.535 0.115 0.834 0.312 + 358.55 13.141 13.152 13.157 0.531 0.339 1.029 0.531 0.339 0.349 0.547 0.180 0.728 0.337 + 358.60 13.200 13.231 13.238 0.910 0.423 1.087 0.910 0.423 0.460 0.990 0.385 1.095 0.578 + 358.65 13.377 13.406 13.422 0.879 0.648 1.264 0.879 0.648 0.819 1.111 0.569 1.395 0.747 + 358.70 13.247 13.280 13.310 0.930 0.905 1.134 0.930 0.905 1.026 1.054 0.841 1.484 0.847 + 358.75 13.395 13.414 13.444 0.717 0.897 1.282 0.717 0.897 1.150 0.919 0.643 1.481 0.803 + 358.80 13.112 13.124 13.167 0.578 1.052 0.999 0.578 1.052 1.051 0.577 0.608 1.219 0.672 + 358.85 12.795 12.807 12.857 0.558 1.131 0.683 0.558 1.131 0.772 0.381 0.631 1.028 0.534 + 358.90 13.024 13.029 13.047 0.359 0.695 0.911 0.359 0.695 0.633 0.327 0.249 0.721 0.378 + 358.95 13.348 13.358 13.369 0.509 0.548 1.236 0.509 0.548 0.677 0.628 0.279 1.043 0.482 + 359.00 13.207 13.218 13.249 0.540 0.906 1.094 0.540 0.906 0.991 0.591 0.489 1.155 0.627 + 359.05 13.047 13.066 13.086 0.704 0.724 0.934 0.704 0.724 0.677 0.658 0.510 0.947 0.537 + 359.10 13.099 13.129 13.146 0.888 0.662 0.986 0.888 0.662 0.653 0.876 0.587 1.099 0.620 + 359.15 13.387 13.437 13.451 1.164 0.610 1.274 1.164 0.610 0.777 1.482 0.710 1.674 0.909 + 359.20 12.773 12.821 12.849 1.102 0.860 0.660 1.102 0.860 0.568 0.728 0.947 1.195 0.661 + 359.25 12.653 12.696 12.725 1.036 0.855 0.541 1.036 0.855 0.462 0.560 0.886 1.048 0.573 + 359.30 12.985 13.016 13.046 0.898 0.883 0.873 0.898 0.883 0.771 0.783 0.793 1.173 0.677 + 359.35 12.952 12.983 12.997 0.897 0.602 0.839 0.897 0.602 0.505 0.753 0.540 0.936 0.528 + 359.40 12.984 13.028 13.037 1.076 0.479 0.871 1.076 0.479 0.417 0.937 0.515 1.073 0.574 + 359.45 12.824 12.869 12.891 1.078 0.760 0.711 1.078 0.760 0.540 0.766 0.819 1.122 0.622 + 359.50 12.814 12.853 12.881 1.003 0.854 0.701 1.003 0.854 0.599 0.703 0.857 1.114 0.630 + 359.55 13.011 13.066 13.100 1.200 0.944 0.898 1.200 0.944 0.848 1.077 1.132 1.568 0.889 + 359.60 13.236 13.300 13.330 1.309 0.892 1.123 1.309 0.892 1.002 1.470 1.167 1.885 1.064 + 359.65 13.148 13.247 13.273 1.618 0.842 1.035 1.618 0.842 0.871 1.674 1.362 2.198 1.163 + 359.70 13.074 13.167 13.200 1.560 0.938 0.961 1.560 0.938 0.902 1.500 1.464 2.120 1.141 + 359.75 13.188 13.307 13.340 1.772 0.942 1.076 1.772 0.942 1.014 1.906 1.670 2.593 1.365 + 359.80 13.166 13.323 13.347 2.042 0.795 1.053 2.042 0.795 0.837 2.150 1.623 2.955 1.410 + 359.85 12.777 12.972 12.993 2.239 0.750 0.664 2.239 0.750 0.498 1.487 1.678 3.007 1.148 + 359.90 12.636 12.838 12.871 2.266 0.919 0.524 2.266 0.919 0.481 1.186 2.083 3.127 1.223 + 359.95 12.666 12.882 12.909 2.347 0.838 0.553 2.347 0.838 0.464 1.298 1.967 3.258 1.201 + 360.00 12.792 13.031 13.073 2.483 1.047 0.679 2.483 1.047 0.711 1.686 2.600 3.861 1.590 + 360.05 12.766 12.990 13.023 2.402 0.933 0.653 2.402 0.933 0.610 1.569 2.242 3.534 1.402 + 360.10 12.690 12.962 13.000 2.640 0.997 0.578 2.640 0.997 0.576 1.525 2.631 4.148 1.548 + 360.15 12.769 13.018 13.076 2.533 1.236 0.656 2.533 1.236 0.811 1.662 3.131 4.187 1.818 + 360.20 12.608 12.882 12.941 2.641 1.230 0.496 2.641 1.230 0.609 1.309 3.248 4.366 1.777 + 360.25 12.599 12.845 12.970 2.502 1.802 0.486 2.502 1.802 0.876 1.216 4.508 4.871 2.375 + 360.30 12.778 13.053 13.157 2.665 1.657 0.665 2.665 1.657 1.102 1.772 4.416 5.145 2.442 + 360.35 12.625 12.863 12.935 2.460 1.369 0.512 2.460 1.369 0.702 1.261 3.369 4.095 1.832 + 360.40 12.751 12.945 13.004 2.233 1.233 0.638 2.233 1.233 0.787 1.425 2.753 3.457 1.599 + 360.45 12.746 12.912 12.948 2.067 0.961 0.633 2.067 0.961 0.609 1.309 1.987 2.799 1.228 + 360.50 12.683 12.867 12.880 2.167 0.583 0.571 2.167 0.583 0.333 1.236 1.264 2.680 0.899 + 360.55 12.869 12.997 13.015 1.815 0.690 0.756 1.815 0.690 0.522 1.373 1.253 2.172 0.966 + 360.60 12.919 13.016 13.027 1.591 0.537 0.806 1.591 0.537 0.432 1.282 0.854 1.734 0.800 + 360.65 12.822 12.907 12.937 1.485 0.872 0.709 1.485 0.872 0.618 1.052 1.294 1.733 0.889 + 360.70 12.955 13.033 13.059 1.426 0.823 0.842 1.426 0.823 0.694 1.201 1.174 1.711 0.909 + 360.75 12.889 12.945 12.986 1.205 1.029 0.776 1.205 1.029 0.799 0.936 1.241 1.557 0.874 + 360.80 12.977 13.063 13.098 1.492 0.960 0.864 1.492 0.960 0.830 1.290 1.433 1.949 1.050 + 360.85 12.710 12.834 12.854 1.780 0.709 0.597 1.780 0.709 0.424 1.064 1.262 2.014 0.852 + 360.90 12.873 12.963 12.983 1.530 0.706 0.760 1.530 0.706 0.537 1.162 1.080 1.708 0.837 + 360.95 13.011 13.063 13.075 1.164 0.558 0.898 1.164 0.558 0.501 1.045 0.649 1.236 0.664 + 361.00 12.969 13.007 13.010 0.994 0.273 0.856 0.994 0.273 0.233 0.851 0.271 0.898 0.462 + 361.05 13.189 13.231 13.231 1.047 0.017 1.077 1.047 0.017 0.018 1.127 0.018 1.128 0.564 + 361.10 13.038 13.078 13.078 1.023 0.010 0.925 1.023 0.010 0.009 0.946 0.010 0.951 0.473 + 361.15 13.289 13.319 13.319 0.890 -0.093 1.177 0.890 -0.093 -0.110 1.047 -0.083 1.093 0.528 + 361.20 13.527 13.561 13.567 0.953 -0.419 1.414 0.953 -0.419 -0.593 1.348 -0.399 1.542 0.763 + 361.25 13.559 13.596 13.612 0.993 -0.665 1.446 0.993 -0.665 -0.962 1.436 -0.660 1.760 0.925 + 361.30 13.676 13.752 13.758 1.451 -0.381 1.563 1.451 -0.381 -0.595 2.268 -0.553 2.347 1.205 + 361.35 13.799 13.872 13.881 1.413 -0.511 1.687 1.413 -0.511 -0.861 2.383 -0.721 2.550 1.317 + 361.40 14.104 14.169 14.186 1.357 -0.684 1.991 1.357 -0.684 -1.361 2.703 -0.928 3.138 1.583 + 361.45 14.261 14.330 14.357 1.405 -0.878 2.148 1.405 -0.878 -1.887 3.019 -1.234 3.681 1.884 + 361.50 14.222 14.339 14.372 1.825 -0.973 2.109 1.825 -0.973 -2.053 3.850 -1.776 4.364 2.356 + 361.55 14.130 14.226 14.238 1.651 -0.572 2.017 1.651 -0.572 -1.154 3.331 -0.945 3.562 1.825 + 361.60 13.637 13.730 13.739 1.598 -0.490 1.524 1.598 -0.490 -0.746 2.436 -0.783 2.558 1.332 + 361.65 13.278 13.361 13.363 1.489 -0.213 1.165 1.489 -0.213 -0.248 1.735 -0.317 1.810 0.891 + 361.70 12.935 13.007 13.007 1.366 0.092 0.822 1.366 0.092 0.076 1.123 0.126 1.275 0.566 + 361.75 13.143 13.196 13.200 1.189 0.305 1.030 1.189 0.305 0.314 1.225 0.363 1.284 0.658 + 361.80 13.340 13.406 13.410 1.331 0.300 1.227 1.331 0.300 0.369 1.633 0.400 1.684 0.861 + 361.85 13.306 13.375 13.385 1.362 0.506 1.193 1.362 0.506 0.604 1.624 0.689 1.767 0.932 + 361.90 13.123 13.177 13.183 1.195 0.385 1.010 1.195 0.385 0.389 1.207 0.460 1.299 0.675 + 361.95 12.774 12.842 12.851 1.327 0.465 0.661 1.327 0.465 0.307 0.877 0.617 1.207 0.558 + 362.00 12.748 12.796 12.799 1.109 0.284 0.635 1.109 0.284 0.180 0.704 0.315 0.857 0.396 + 362.05 12.981 13.046 13.046 1.301 -0.082 0.868 1.301 -0.082 -0.072 1.130 -0.107 1.227 0.569 + 362.10 13.111 13.197 13.201 1.502 -0.310 0.999 1.502 -0.310 -0.310 1.500 -0.466 1.674 0.800 + 362.15 13.201 13.310 13.323 1.706 -0.572 1.088 1.706 -0.572 -0.622 1.856 -0.976 2.211 1.094 + 362.20 12.988 13.092 13.100 1.648 -0.438 0.875 1.648 -0.438 -0.383 1.443 -0.722 1.837 0.829 + 362.25 12.934 13.052 13.055 1.751 -0.255 0.821 1.751 -0.255 -0.209 1.438 -0.446 1.903 0.760 + 362.30 12.970 13.077 13.082 1.668 -0.355 0.858 1.668 -0.355 -0.305 1.431 -0.592 1.823 0.789 + 362.35 12.906 13.035 13.044 1.828 -0.478 0.793 1.828 -0.478 -0.379 1.450 -0.874 2.100 0.867 + 362.40 12.580 12.711 12.719 1.815 -0.454 0.468 1.815 -0.454 -0.212 0.849 -0.823 1.859 0.601 + 362.45 12.935 13.058 13.059 1.787 -0.191 0.822 1.787 -0.191 -0.157 1.470 -0.341 1.953 0.758 + 362.50 13.043 13.128 13.132 1.494 -0.319 0.930 1.494 -0.319 -0.296 1.389 -0.476 1.599 0.749 + 362.55 13.074 13.150 13.166 1.408 -0.658 0.961 1.408 -0.658 -0.633 1.353 -0.927 1.670 0.879 + 362.60 12.874 12.996 13.020 1.775 -0.793 0.761 1.775 -0.793 -0.603 1.351 -1.407 2.179 1.021 + 362.65 12.594 12.728 12.738 1.841 -0.521 0.481 1.841 -0.521 -0.251 0.886 -0.959 1.946 0.665 + 362.70 12.475 12.608 12.612 1.825 -0.345 0.362 1.825 -0.345 -0.125 0.661 -0.629 1.789 0.460 + 362.75 12.576 12.688 12.688 1.682 -0.091 0.463 1.682 -0.091 -0.042 0.779 -0.153 1.527 0.398 + 362.80 12.863 12.984 12.988 1.764 -0.336 0.750 1.764 -0.336 -0.252 1.324 -0.594 1.894 0.736 + 362.85 13.105 13.213 13.219 1.687 -0.394 0.992 1.687 -0.394 -0.391 1.674 -0.665 1.993 0.922 + 362.90 12.993 13.098 13.101 1.649 -0.304 0.881 1.649 -0.304 -0.267 1.452 -0.501 1.793 0.779 + 362.95 13.090 13.166 13.168 1.407 -0.266 0.978 1.407 -0.266 -0.260 1.375 -0.374 1.502 0.724 + 363.00 13.070 13.166 13.170 1.587 -0.314 0.957 1.587 -0.314 -0.300 1.519 -0.498 1.767 0.813 + 363.05 13.075 13.233 13.239 2.044 -0.372 0.962 2.044 -0.372 -0.358 1.966 -0.761 2.621 1.069 + 363.10 12.702 12.773 12.783 1.346 -0.503 0.589 1.346 -0.503 -0.296 0.793 -0.677 1.206 0.542 + 363.15 12.744 12.782 12.811 0.991 -0.859 0.631 0.991 -0.859 -0.542 0.625 -0.851 1.059 0.594 + 363.20 12.817 12.864 12.874 1.092 -0.521 0.704 1.092 -0.521 -0.367 0.769 -0.569 0.980 0.512 + 363.25 12.822 12.879 12.883 1.209 -0.293 0.710 1.209 -0.293 -0.208 0.858 -0.354 1.025 0.475 + 363.30 12.428 12.470 12.475 1.020 0.345 0.315 1.020 0.345 0.109 0.322 0.352 0.629 0.244 + 363.35 12.640 12.699 12.701 1.222 0.232 0.528 1.222 0.232 0.122 0.645 0.283 0.913 0.357 + 363.40 12.579 12.657 12.657 1.403 -0.037 0.466 1.403 -0.037 -0.017 0.654 -0.052 1.094 0.328 + 363.45 12.373 12.509 12.517 1.840 -0.450 0.260 1.840 -0.450 -0.117 0.478 -0.828 1.828 0.482 + 363.50 12.874 13.029 13.031 2.001 -0.259 0.761 2.001 -0.259 -0.197 1.524 -0.518 2.326 0.811 + 363.55 12.783 12.944 12.947 2.034 -0.298 0.670 2.034 -0.298 -0.200 1.363 -0.607 2.337 0.753 + 363.60 12.813 12.957 12.978 1.926 -0.729 0.701 1.926 -0.729 -0.511 1.349 -1.404 2.365 1.006 + 363.65 12.622 12.748 12.775 1.786 -0.827 0.509 1.786 -0.827 -0.421 0.910 -1.477 2.067 0.893 + 363.70 12.535 12.649 12.674 1.699 -0.793 0.422 1.699 -0.793 -0.335 0.717 -1.348 1.847 0.781 + 363.75 12.823 12.926 12.981 1.626 -1.195 0.711 1.626 -1.195 -0.849 1.155 -1.943 2.288 1.207 + 363.80 12.862 12.971 13.016 1.679 -1.076 0.749 1.679 -1.076 -0.806 1.258 -1.806 2.268 1.172 + 363.85 12.487 12.589 12.602 1.598 -0.592 0.374 1.598 -0.592 -0.221 0.598 -0.947 1.523 0.571 + 363.90 12.446 12.534 12.542 1.478 -0.470 0.333 1.478 -0.470 -0.157 0.493 -0.694 1.258 0.433 + 363.95 12.288 12.371 12.373 1.433 -0.217 0.175 1.433 -0.217 -0.038 0.251 -0.311 1.065 0.201 + 364.00 12.403 12.486 12.488 1.436 -0.219 0.290 1.436 -0.219 -0.063 0.416 -0.314 1.097 0.263 + 364.05 12.738 12.800 12.803 1.265 -0.265 0.625 1.265 -0.265 -0.166 0.790 -0.335 1.030 0.437 + 364.10 12.572 12.614 12.617 1.027 -0.286 0.459 1.027 -0.286 -0.131 0.472 -0.294 0.674 0.286 + 364.15 12.308 12.348 12.349 0.985 -0.193 0.196 0.985 -0.193 -0.038 0.193 -0.190 0.523 0.137 + 364.20 12.243 12.256 12.262 0.559 -0.388 0.131 0.559 -0.388 -0.051 0.073 -0.217 0.240 0.117 + 364.25 12.467 12.479 12.484 0.537 -0.366 0.355 0.537 -0.366 -0.130 0.190 -0.197 0.274 0.151 + 364.30 12.765 12.781 12.781 0.642 -0.033 0.652 0.642 -0.033 -0.021 0.419 -0.021 0.419 0.210 + 364.35 12.982 12.995 12.996 0.575 0.094 0.870 0.575 0.094 0.082 0.500 0.054 0.548 0.255 + 364.40 13.107 13.117 13.120 0.520 -0.252 0.994 0.520 -0.252 -0.250 0.517 -0.131 0.661 0.295 + 364.45 13.095 13.109 13.113 0.609 -0.326 0.982 0.609 -0.326 -0.321 0.598 -0.199 0.721 0.354 + 364.50 13.379 13.406 13.408 0.855 -0.178 1.266 0.855 -0.178 -0.226 1.082 -0.152 1.183 0.558 + 364.55 13.131 13.151 13.152 0.716 -0.222 1.018 0.716 -0.222 -0.227 0.729 -0.159 0.799 0.390 + 364.60 13.068 13.083 13.083 0.630 -0.027 0.955 0.630 -0.027 -0.025 0.602 -0.017 0.655 0.301 + 364.65 13.144 13.175 13.175 0.897 0.110 1.031 0.897 0.110 0.114 0.925 0.099 0.941 0.469 + 364.70 13.135 13.180 13.180 1.086 -0.025 1.022 1.086 -0.025 -0.025 1.110 -0.027 1.112 0.555 + 364.75 13.111 13.146 13.151 0.960 -0.352 0.998 0.960 -0.352 -0.352 0.958 -0.338 1.021 0.538 + 364.80 12.877 12.925 12.927 1.112 -0.222 0.765 1.112 -0.222 -0.169 0.850 -0.246 0.935 0.451 + 364.85 12.973 13.009 13.023 0.969 -0.590 0.860 0.969 -0.590 -0.508 0.834 -0.572 1.014 0.566 + 364.90 12.783 12.812 12.836 0.863 -0.796 0.670 0.863 -0.796 -0.533 0.578 -0.686 0.913 0.522 + 364.95 12.945 12.957 12.998 0.571 -1.027 0.832 0.571 -1.027 -0.854 0.475 -0.586 1.036 0.570 + 365.00 13.001 13.015 13.079 0.601 -1.300 0.888 0.601 -1.300 -1.154 0.534 -0.781 1.419 0.746 + 365.05 13.169 13.204 13.255 0.970 -1.154 1.056 0.970 -1.154 -1.219 1.025 -1.120 1.694 0.973 + 365.10 12.701 12.778 12.799 1.405 -0.722 0.588 1.405 -0.722 -0.425 0.826 -1.015 1.421 0.688 + 365.15 12.903 12.953 12.960 1.140 -0.442 0.790 1.140 -0.442 -0.349 0.900 -0.504 1.059 0.544 + 365.20 12.609 12.646 12.657 0.962 -0.518 0.497 0.962 -0.518 -0.257 0.478 -0.498 0.720 0.368 + 365.25 12.424 12.469 12.478 1.062 -0.468 0.311 1.062 -0.468 -0.145 0.330 -0.497 0.721 0.307 + 365.30 12.557 12.597 12.602 1.003 -0.353 0.444 1.003 -0.353 -0.157 0.446 -0.354 0.664 0.295 + 365.35 12.806 12.844 12.850 0.982 -0.376 0.694 0.982 -0.376 -0.261 0.681 -0.369 0.793 0.409 + 365.40 12.692 12.710 12.712 0.692 0.172 0.579 0.692 0.172 0.099 0.401 0.119 0.422 0.215 + 365.45 12.728 12.753 12.754 0.805 -0.082 0.615 0.805 -0.082 -0.050 0.495 -0.066 0.516 0.251 + 365.50 12.866 12.928 12.934 1.267 -0.402 0.753 1.267 -0.402 -0.302 0.954 -0.509 1.167 0.561 + 365.55 13.174 13.246 13.253 1.378 -0.429 1.061 1.378 -0.429 -0.455 1.462 -0.591 1.604 0.821 + 365.60 13.331 13.398 13.403 1.333 -0.369 1.219 1.333 -0.369 -0.449 1.624 -0.491 1.698 0.877 + 365.65 13.093 13.146 13.149 1.178 -0.292 0.980 1.178 -0.292 -0.286 1.155 -0.344 1.217 0.619 + 365.70 13.108 13.167 13.170 1.243 -0.283 0.996 1.243 -0.283 -0.282 1.237 -0.352 1.308 0.658 + 365.75 13.026 13.085 13.092 1.244 -0.407 0.913 1.244 -0.407 -0.371 1.136 -0.506 1.273 0.649 + 365.80 13.008 13.075 13.083 1.325 -0.443 0.895 1.325 -0.443 -0.396 1.186 -0.586 1.376 0.690 + 365.85 13.134 13.224 13.236 1.539 -0.561 1.022 1.539 -0.561 -0.573 1.573 -0.864 1.864 0.942 + 365.90 12.883 12.987 13.023 1.639 -0.972 0.770 1.639 -0.972 -0.748 1.263 -1.593 2.113 1.083 + 365.95 12.891 12.989 13.004 1.596 -0.622 0.778 1.596 -0.622 -0.484 1.242 -0.993 1.770 0.831 + 366.00 13.386 13.459 13.483 1.400 -0.807 1.273 1.400 -0.807 -1.028 1.782 -1.130 2.116 1.174 + 366.05 13.749 13.828 13.844 1.477 -0.664 1.636 1.477 -0.664 -1.086 2.417 -0.980 2.650 1.413 + 366.10 13.636 13.687 13.691 1.173 -0.332 1.523 1.173 -0.332 -0.506 1.787 -0.389 1.904 0.949 + 366.15 13.774 13.837 13.841 1.327 -0.301 1.661 1.327 -0.301 -0.499 2.204 -0.399 2.305 1.148 + 366.20 13.526 13.608 13.615 1.489 -0.429 1.414 1.489 -0.429 -0.606 2.105 -0.638 2.200 1.141 + 366.25 13.170 13.230 13.232 1.255 -0.253 1.057 1.255 -0.253 -0.267 1.327 -0.317 1.378 0.695 + 366.30 13.254 13.319 13.320 1.317 0.113 1.141 1.317 0.113 0.128 1.503 0.148 1.525 0.758 + 366.35 13.113 13.173 13.175 1.264 0.235 1.000 1.264 0.235 0.235 1.263 0.298 1.326 0.660 + 366.40 13.210 13.283 13.284 1.386 -0.132 1.098 1.386 -0.132 -0.145 1.521 -0.183 1.571 0.769 + 366.45 13.161 13.232 13.232 1.369 0.074 1.048 1.369 0.074 0.078 1.434 0.102 1.488 0.720 + 366.50 13.018 13.098 13.099 1.445 0.074 0.906 1.445 0.074 0.067 1.309 0.107 1.457 0.657 + 366.55 13.340 13.405 13.407 1.315 -0.235 1.228 1.315 -0.235 -0.288 1.614 -0.309 1.646 0.834 + 366.60 13.702 13.738 13.738 0.990 -0.038 1.589 0.990 -0.038 -0.060 1.574 -0.037 1.754 0.788 + 366.65 13.607 13.640 13.640 0.953 0.115 1.494 0.953 0.115 0.172 1.424 0.110 1.576 0.719 + 366.70 13.457 13.492 13.492 0.979 0.040 1.344 0.979 0.040 0.054 1.316 0.039 1.383 0.659 + 366.75 13.318 13.341 13.342 0.786 -0.094 1.205 0.786 -0.094 -0.113 0.948 -0.074 1.040 0.479 + 366.80 13.195 13.223 13.224 0.868 0.115 1.082 0.868 0.115 0.124 0.939 0.100 0.968 0.476 + 366.85 13.358 13.388 13.389 0.893 -0.125 1.245 0.893 -0.125 -0.156 1.113 -0.112 1.182 0.565 + 366.90 13.315 13.368 13.371 1.191 -0.252 1.202 1.191 -0.252 -0.303 1.432 -0.300 1.464 0.747 + 366.95 12.916 12.950 12.959 0.930 -0.489 0.803 0.930 -0.489 -0.393 0.747 -0.455 0.875 0.479 + 367.00 13.204 13.248 13.262 1.082 -0.596 1.091 1.082 -0.596 -0.650 1.180 -0.645 1.358 0.747 + 367.05 13.295 13.341 13.346 1.100 -0.373 1.183 1.100 -0.373 -0.441 1.301 -0.411 1.374 0.717 + 367.10 13.268 13.293 13.294 0.822 -0.145 1.155 0.822 -0.145 -0.167 0.949 -0.119 1.015 0.486 + 367.15 13.380 13.415 13.423 0.969 -0.455 1.268 0.969 -0.455 -0.577 1.228 -0.441 1.376 0.713 + 367.20 13.706 13.740 13.743 0.957 -0.293 1.593 0.957 -0.293 -0.466 1.524 -0.280 1.770 0.809 + 367.25 13.678 13.712 13.720 0.974 -0.477 1.565 0.974 -0.477 -0.747 1.524 -0.465 1.812 0.880 + 367.30 13.556 13.571 13.582 0.635 -0.549 1.443 0.635 -0.549 -0.792 0.917 -0.349 1.394 0.630 + 367.35 13.533 13.567 13.577 0.966 -0.507 1.420 0.966 -0.507 -0.720 1.372 -0.490 1.604 0.813 + 367.40 13.243 13.311 13.319 1.345 -0.450 1.130 1.345 -0.450 -0.509 1.521 -0.606 1.645 0.857 + 367.45 13.011 13.044 13.073 0.919 -0.876 0.898 0.919 -0.876 -0.787 0.826 -0.805 1.209 0.698 + 367.50 12.971 13.014 13.027 1.051 -0.590 0.859 1.051 -0.590 -0.507 0.903 -0.621 1.096 0.604 + 367.55 12.894 12.946 12.950 1.152 -0.348 0.782 1.152 -0.348 -0.272 0.900 -0.400 1.029 0.511 + 367.60 13.191 13.239 13.243 1.118 -0.350 1.079 1.118 -0.350 -0.377 1.205 -0.391 1.267 0.661 + 367.65 13.176 13.201 13.202 0.813 -0.104 1.063 0.813 -0.104 -0.111 0.864 -0.085 0.901 0.438 + 367.70 13.251 13.270 13.274 0.713 -0.332 1.138 0.713 -0.332 -0.377 0.811 -0.236 0.956 0.463 + 367.75 13.089 13.107 13.112 0.704 -0.349 0.976 0.704 -0.349 -0.341 0.686 -0.246 0.785 0.402 + 367.80 13.098 13.129 13.130 0.911 -0.104 0.985 0.911 -0.104 -0.102 0.897 -0.095 0.905 0.454 + 367.85 12.826 12.865 12.867 0.998 0.222 0.713 0.998 0.222 0.158 0.711 0.222 0.777 0.381 + 367.90 12.867 12.909 12.909 1.033 0.096 0.755 1.033 0.096 0.072 0.780 0.099 0.823 0.395 + 367.95 12.953 13.014 13.027 1.255 0.588 0.840 1.255 0.588 0.494 1.055 0.738 1.314 0.690 + 368.00 13.218 13.266 13.290 1.122 0.796 1.106 1.122 0.796 0.880 1.240 0.893 1.557 0.882 + 368.05 13.006 13.035 13.055 0.860 0.728 0.894 0.860 0.728 0.651 0.769 0.626 1.034 0.593 + 368.10 12.838 12.870 12.887 0.913 0.660 0.725 0.913 0.660 0.478 0.662 0.602 0.897 0.507 + 368.15 13.095 13.128 13.142 0.930 0.606 0.982 0.930 0.606 0.595 0.913 0.564 1.098 0.614 + 368.20 13.103 13.159 13.170 1.216 0.543 0.990 1.216 0.543 0.537 1.204 0.660 1.377 0.737 + 368.25 13.043 13.089 13.092 1.102 0.296 0.930 1.102 0.296 0.275 1.024 0.326 1.083 0.555 + 368.30 12.684 12.728 12.761 1.057 0.914 0.571 1.057 0.914 0.522 0.604 0.966 1.140 0.627 + 368.35 12.803 12.839 12.900 0.953 1.252 0.690 0.953 1.252 0.864 0.658 1.193 1.476 0.807 + 368.40 12.569 12.595 12.628 0.805 0.907 0.457 0.805 0.907 0.414 0.368 0.730 0.840 0.458 + 368.45 12.716 12.751 12.777 0.948 0.812 0.603 0.948 0.812 0.490 0.572 0.770 0.961 0.538 + 368.50 12.700 12.728 12.776 0.833 1.111 0.588 0.833 1.111 0.653 0.490 0.926 1.137 0.617 + 368.55 12.627 12.635 12.682 0.467 1.087 0.514 0.467 1.087 0.558 0.240 0.508 0.832 0.396 + 368.60 12.489 12.499 12.522 0.500 0.751 0.377 0.500 0.751 0.283 0.188 0.375 0.478 0.253 + 368.65 12.427 12.431 12.438 0.307 0.421 0.315 0.307 0.421 0.133 0.097 0.129 0.185 0.104 + 368.70 12.701 12.727 12.740 0.813 0.579 0.588 0.813 0.579 0.341 0.478 0.471 0.671 0.376 + 368.75 12.685 12.695 12.699 0.508 0.304 0.572 0.508 0.304 0.174 0.291 0.155 0.339 0.186 + 368.80 12.633 12.660 12.662 0.825 0.254 0.520 0.825 0.254 0.132 0.429 0.210 0.508 0.248 + 368.85 12.979 12.994 12.994 0.612 -0.035 0.867 0.612 -0.035 -0.030 0.531 -0.021 0.564 0.266 + 368.90 12.671 12.678 12.679 0.409 0.173 0.559 0.409 0.173 0.097 0.228 0.071 0.255 0.129 + 368.95 12.498 12.501 12.504 0.245 0.283 0.385 0.245 0.283 0.109 0.094 0.069 0.144 0.080 + 369.00 12.605 12.607 12.611 0.216 0.320 0.492 0.216 0.320 0.157 0.106 0.069 0.196 0.101 + 369.05 12.785 12.785 12.792 0.116 0.402 0.672 0.116 0.402 0.270 0.078 0.047 0.313 0.143 + 369.10 12.856 12.860 12.865 0.331 0.375 0.743 0.331 0.375 0.278 0.246 0.124 0.401 0.196 + 369.15 12.806 12.820 12.837 0.589 0.667 0.693 0.589 0.667 0.463 0.408 0.393 0.636 0.366 + 369.20 12.999 13.005 13.022 0.381 0.664 0.886 0.381 0.664 0.589 0.337 0.253 0.686 0.362 + 369.25 12.677 12.699 12.716 0.750 0.660 0.564 0.750 0.660 0.372 0.423 0.495 0.658 0.375 + 369.30 12.299 12.346 12.357 1.078 0.531 0.186 1.078 0.531 0.099 0.200 0.572 0.739 0.307 + 369.35 12.314 12.375 12.391 1.231 0.631 0.201 1.231 0.631 0.127 0.247 0.777 0.977 0.412 + 369.40 12.443 12.497 12.503 1.156 0.409 0.330 1.156 0.409 0.135 0.382 0.473 0.807 0.311 + 369.45 12.476 12.553 12.554 1.391 0.140 0.363 1.391 0.140 0.051 0.505 0.195 1.043 0.272 + 369.50 12.520 12.614 12.615 1.532 0.179 0.408 1.532 0.179 0.073 0.624 0.274 1.272 0.343 + 369.55 12.575 12.626 12.626 1.138 0.020 0.462 1.138 0.020 0.009 0.526 0.023 0.754 0.263 + 369.60 12.720 12.762 12.763 1.042 0.028 0.607 1.042 0.028 0.017 0.633 0.029 0.727 0.317 + 369.65 12.872 12.901 12.908 0.875 0.432 0.759 0.875 0.432 0.328 0.664 0.378 0.764 0.416 + 369.70 12.531 12.590 12.593 1.219 0.277 0.418 1.219 0.277 0.116 0.510 0.337 0.869 0.311 + 369.75 12.450 12.484 12.497 0.930 0.565 0.337 0.930 0.565 0.190 0.313 0.526 0.649 0.320 + 369.80 12.469 12.497 12.511 0.845 0.579 0.356 0.845 0.579 0.206 0.301 0.489 0.588 0.305 + 369.85 11.952 12.015 12.026 1.231 0.500 -0.161 1.231 0.500 -0.080 -0.198 0.616 0.896 0.326 + 369.90 11.968 12.016 12.042 1.077 0.791 -0.145 1.077 0.791 -0.115 -0.156 0.851 0.903 0.437 + 369.95 12.098 12.146 12.180 1.086 0.908 -0.015 1.086 0.908 -0.014 -0.016 0.987 1.003 0.494 + 370.00 12.476 12.484 12.531 0.438 1.088 0.364 0.438 1.088 0.395 0.159 0.476 0.753 0.320 + 370.05 12.293 12.308 12.356 0.600 1.089 0.181 0.600 1.089 0.197 0.108 0.653 0.790 0.345 + 370.10 12.182 12.188 12.208 0.403 0.702 0.069 0.403 0.702 0.048 0.028 0.283 0.330 0.144 + 370.15 12.012 12.024 12.058 0.537 0.904 -0.101 0.537 0.904 -0.091 -0.054 0.485 0.558 0.248 + 370.20 11.932 11.949 12.003 0.650 1.138 -0.181 0.650 1.138 -0.206 -0.118 0.740 0.875 0.389 + 370.25 12.061 12.063 12.131 0.216 1.285 -0.052 0.216 1.285 -0.067 -0.011 0.277 0.850 0.143 + 370.30 12.312 12.313 12.396 0.055 1.438 0.200 0.055 1.438 0.287 0.011 0.078 1.055 0.149 + 370.35 12.274 12.274 12.319 0.046 1.047 0.161 0.046 1.047 0.169 0.007 0.048 0.562 0.088 + 370.40 12.619 12.623 12.668 0.301 1.069 0.506 0.301 1.069 0.541 0.152 0.322 0.745 0.324 + 370.45 12.537 12.541 12.581 0.328 1.003 0.424 0.328 1.003 0.425 0.139 0.329 0.646 0.278 + 370.50 12.395 12.398 12.428 -0.258 0.874 0.282 -0.258 0.874 0.247 -0.073 -0.225 0.455 0.171 + 370.55 12.529 12.538 12.582 -0.462 1.060 0.416 -0.462 1.060 0.441 -0.192 -0.490 0.756 0.344 + 370.60 12.665 12.669 12.712 -0.312 1.037 0.553 -0.312 1.037 0.573 -0.172 -0.323 0.738 0.340 + 370.65 12.639 12.655 12.683 -0.631 0.851 0.526 -0.631 0.851 0.448 -0.332 -0.537 0.700 0.387 + 370.70 12.937 12.953 12.986 -0.640 0.928 0.825 -0.640 0.928 0.765 -0.527 -0.594 0.975 0.551 + 370.75 13.046 13.068 13.083 -0.762 0.634 0.933 -0.762 0.634 0.591 -0.711 -0.483 0.926 0.522 + 370.80 12.983 13.008 13.048 -0.817 1.017 0.870 -0.817 1.017 0.885 -0.711 -0.831 1.230 0.704 + 370.85 12.667 12.725 12.753 -1.215 0.849 0.554 -1.215 0.849 0.470 -0.673 -1.031 1.252 0.659 + 370.90 12.623 12.647 12.668 -0.785 0.724 0.510 -0.785 0.724 0.369 -0.401 -0.568 0.700 0.394 + 370.95 12.561 12.580 12.586 -0.681 0.398 0.448 -0.681 0.398 0.178 -0.305 -0.271 0.411 0.223 + 371.00 12.181 12.196 12.212 -0.592 0.638 0.068 -0.592 0.638 0.044 -0.041 -0.378 0.381 0.191 + 371.05 12.139 12.154 12.201 -0.592 1.071 0.026 -0.592 1.071 0.028 -0.016 -0.635 0.750 0.318 + 371.10 11.777 11.802 11.843 -0.757 0.993 -0.335 -0.757 0.993 -0.333 0.254 -0.751 0.835 0.430 + 371.15 11.289 11.301 11.367 -0.514 1.221 -0.823 -0.514 1.221 -1.006 0.423 -0.628 1.217 0.629 + 371.20 11.150 11.162 11.202 -0.531 0.942 -0.963 -0.531 0.942 -0.907 0.512 -0.501 1.049 0.578 + 371.25 11.098 11.100 11.134 -0.197 0.871 -1.014 -0.197 0.871 -0.884 0.200 -0.172 0.913 0.461 + 371.30 11.115 11.116 11.143 0.109 0.785 -0.998 0.109 0.785 -0.783 -0.109 0.086 0.812 0.398 + 371.35 11.431 11.432 11.447 0.201 0.575 -0.682 0.201 0.575 -0.392 -0.137 0.116 0.418 0.216 + 371.40 11.725 11.732 11.766 0.408 0.888 -0.388 0.408 0.888 -0.344 -0.158 0.362 0.553 0.262 + 371.45 11.869 11.887 11.900 0.660 0.561 -0.244 0.660 0.561 -0.137 -0.161 0.370 0.405 0.213 + 371.50 11.740 11.750 11.770 0.476 0.682 -0.372 0.476 0.682 -0.254 -0.177 0.325 0.415 0.224 + 371.55 11.469 11.490 11.538 0.708 1.048 -0.644 0.708 1.048 -0.675 -0.456 0.742 1.008 0.551 + 371.60 11.567 11.577 11.598 0.479 0.702 -0.546 0.479 0.702 -0.383 -0.262 0.337 0.510 0.287 + 371.65 11.466 11.473 11.489 0.406 0.600 -0.647 0.406 0.600 -0.388 -0.263 0.244 0.472 0.264 + 371.70 11.402 11.408 11.418 0.348 0.483 -0.710 0.348 0.483 -0.343 -0.247 0.168 0.430 0.228 + 371.75 11.450 11.453 11.463 0.254 0.470 -0.663 0.254 0.470 -0.312 -0.169 0.120 0.363 0.187 + 371.80 11.490 11.503 11.515 0.549 0.527 -0.623 0.549 0.527 -0.328 -0.342 0.289 0.483 0.277 + 371.85 11.699 11.707 11.730 0.415 0.736 -0.413 0.415 0.736 -0.304 -0.172 0.306 0.442 0.232 + 371.90 11.483 11.501 11.521 0.646 0.673 -0.630 0.646 0.673 -0.424 -0.407 0.434 0.633 0.365 + 371.95 11.701 11.719 11.723 0.663 0.296 -0.412 0.663 0.296 -0.122 -0.273 0.196 0.349 0.179 + 372.00 11.176 11.198 11.200 0.716 0.164 -0.937 0.716 0.164 -0.154 -0.671 0.118 0.709 0.349 + 372.05 10.997 11.016 11.019 0.640 0.269 -1.115 0.640 0.269 -0.301 -0.714 0.173 0.863 0.397 + 372.10 11.217 11.220 11.225 0.275 0.304 -0.896 0.275 0.304 -0.273 -0.247 0.084 0.485 0.189 + 372.15 10.944 10.954 10.956 0.467 0.214 -1.169 0.467 0.214 -0.250 -0.546 0.100 0.815 0.304 + 372.20 10.770 10.775 10.780 0.343 0.310 -1.343 0.343 0.310 -0.416 -0.460 0.106 1.008 0.315 + 372.25 10.856 10.856 10.859 0.090 0.256 -1.257 0.090 0.256 -0.322 -0.113 0.023 0.826 0.171 + 372.30 10.527 10.531 10.542 0.286 0.475 -1.586 0.286 0.475 -0.753 -0.453 0.136 1.411 0.445 + 372.35 10.152 10.178 10.185 0.719 0.384 -1.960 0.719 0.384 -0.754 -1.409 0.276 2.254 0.811 + 372.40 10.415 10.425 10.428 0.468 0.249 -1.698 0.468 0.249 -0.423 -0.794 0.117 1.582 0.454 + 372.45 10.575 10.577 10.577 0.173 0.096 -1.538 0.173 0.096 -0.148 -0.266 0.017 1.202 0.152 + 372.50 10.731 10.731 10.734 0.032 0.244 -1.382 0.032 0.244 -0.337 -0.044 0.008 0.985 0.170 + 372.55 10.836 10.836 10.840 -0.104 0.294 -1.277 -0.104 0.294 -0.376 0.133 -0.031 0.864 0.200 + 372.60 11.034 11.040 11.046 -0.383 0.339 -1.079 -0.383 0.339 -0.366 0.413 -0.130 0.713 0.283 + 372.65 10.803 10.805 10.814 -0.168 0.439 -1.309 -0.168 0.439 -0.574 0.219 -0.073 0.968 0.310 + 372.70 10.928 10.928 10.929 -0.100 0.096 -1.185 -0.100 0.096 -0.114 0.119 -0.010 0.712 0.082 + 372.75 11.179 11.180 11.180 -0.150 -0.067 -0.934 -0.150 -0.067 0.063 0.140 0.010 0.450 0.077 + 372.80 11.074 11.078 11.078 0.319 -0.040 -1.039 0.319 -0.040 0.041 -0.331 -0.013 0.591 0.167 + 372.85 11.262 11.274 11.275 0.506 -0.165 -0.850 0.506 -0.165 0.140 -0.430 -0.083 0.503 0.230 + 372.90 11.298 11.309 11.310 0.511 -0.040 -0.815 0.511 -0.040 0.032 -0.416 -0.020 0.463 0.209 + 372.95 11.461 11.467 11.467 0.352 0.070 -0.651 0.352 0.070 -0.045 -0.229 0.025 0.277 0.118 + 373.00 11.384 11.400 11.402 0.612 0.208 -0.729 0.612 0.208 -0.152 -0.446 0.127 0.475 0.244 + 373.05 11.156 11.187 11.189 0.826 0.226 -0.957 0.826 0.226 -0.216 -0.791 0.187 0.825 0.420 + 373.10 11.494 11.526 11.531 0.865 -0.328 -0.619 0.865 -0.328 0.203 -0.535 -0.283 0.619 0.319 + 373.15 11.445 11.470 11.483 0.758 -0.529 -0.667 0.758 -0.529 0.353 -0.506 -0.401 0.650 0.368 + 373.20 11.300 11.325 11.335 0.742 -0.475 -0.813 0.742 -0.475 0.386 -0.603 -0.353 0.718 0.399 + 373.25 11.136 11.167 11.183 0.833 -0.593 -0.976 0.833 -0.593 0.579 -0.813 -0.493 0.999 0.557 + 373.30 11.160 11.190 11.193 0.816 -0.247 -0.952 0.816 -0.247 0.236 -0.777 -0.202 0.817 0.419 + 373.35 11.212 11.229 11.231 0.627 -0.200 -0.901 0.627 -0.200 0.181 -0.565 -0.126 0.622 0.303 + 373.40 11.361 11.387 11.388 0.769 -0.095 -0.752 0.769 -0.095 0.071 -0.578 -0.073 0.583 0.294 + 373.45 11.369 11.383 11.395 0.562 -0.541 -0.744 0.562 -0.541 0.403 -0.418 -0.304 0.581 0.328 + 373.50 11.423 11.441 11.460 0.635 -0.671 -0.690 0.635 -0.671 0.463 -0.438 -0.426 0.665 0.383 + 373.55 11.532 11.571 11.580 0.949 -0.447 -0.580 0.949 -0.447 0.259 -0.551 -0.424 0.719 0.371 + 373.60 11.360 11.440 11.443 1.352 -0.279 -0.753 1.352 -0.279 0.210 -1.018 -0.377 1.236 0.553 + 373.65 11.372 11.442 11.444 1.271 -0.190 -0.741 1.271 -0.190 0.141 -0.942 -0.242 1.100 0.491 + 373.70 11.451 11.492 11.493 0.970 -0.135 -0.662 0.970 -0.135 0.089 -0.642 -0.131 0.698 0.330 + 373.75 11.370 11.431 11.431 1.180 -0.043 -0.743 1.180 -0.043 0.032 -0.877 -0.051 0.974 0.440 + 373.80 11.250 11.292 11.293 0.972 -0.159 -0.863 0.972 -0.159 0.137 -0.839 -0.154 0.857 0.432 + 373.85 11.398 11.438 11.438 0.947 0.111 -0.714 0.947 0.111 -0.080 -0.677 0.106 0.710 0.345 + 373.90 11.513 11.524 11.525 0.509 0.157 -0.600 0.509 0.157 -0.094 -0.305 0.080 0.322 0.165 + 373.95 11.594 11.599 11.599 0.308 -0.104 -0.518 0.308 -0.104 0.054 -0.160 -0.032 0.187 0.086 + 374.00 11.566 11.567 11.572 -0.134 -0.327 -0.547 -0.134 -0.327 0.179 0.073 0.044 0.212 0.099 + 374.05 11.591 11.591 11.592 -0.030 -0.135 -0.522 -0.030 -0.135 0.070 0.016 0.004 0.146 0.036 + 374.10 11.560 11.560 11.560 -0.085 -0.114 -0.553 -0.085 -0.114 0.063 0.047 0.010 0.163 0.040 + 374.15 11.390 11.390 11.391 -0.007 0.184 -0.723 -0.007 0.184 -0.133 0.005 -0.001 0.278 0.067 + 374.20 11.732 11.733 11.736 0.175 0.268 -0.381 0.175 0.268 -0.102 -0.067 0.047 0.124 0.065 + 374.25 12.264 12.271 12.284 0.418 0.579 0.151 0.418 0.579 0.087 0.063 0.242 0.266 0.132 + 374.30 11.982 11.982 11.998 0.053 0.615 -0.131 0.053 0.615 -0.080 -0.007 0.032 0.199 0.043 + 374.35 12.164 12.164 12.168 0.069 0.307 0.051 0.069 0.307 0.016 0.004 0.021 0.051 0.013 + 374.40 11.963 11.964 11.965 0.035 0.185 -0.149 0.035 0.185 -0.028 -0.005 0.006 0.029 0.014 + 374.45 11.725 11.725 11.727 0.056 0.165 -0.387 0.056 0.165 -0.064 -0.022 0.009 0.090 0.034 + 374.50 11.699 11.700 11.701 0.159 0.172 -0.414 0.159 0.172 -0.071 -0.066 0.027 0.113 0.050 + 374.55 11.755 11.769 11.769 0.571 0.021 -0.358 0.571 0.021 -0.007 -0.204 0.012 0.227 0.102 + 374.60 11.812 11.814 11.814 0.211 0.077 -0.301 0.211 0.077 -0.023 -0.063 0.016 0.070 0.035 + 374.65 11.828 11.829 11.833 0.168 -0.296 -0.285 0.168 -0.296 0.084 -0.048 -0.050 0.099 0.055 + 374.70 11.584 11.584 11.584 0.120 -0.021 -0.529 0.120 -0.021 0.011 -0.063 -0.002 0.147 0.032 + 374.75 11.830 11.836 11.840 0.351 -0.326 -0.282 0.351 -0.326 0.092 -0.099 -0.114 0.155 0.089 + 374.80 12.006 12.007 12.021 0.188 -0.577 -0.107 0.188 -0.577 0.062 -0.020 -0.108 0.190 0.063 + 374.85 12.162 12.176 12.176 0.579 -0.039 0.050 0.579 -0.039 -0.002 0.029 -0.023 0.170 0.018 + 374.90 12.196 12.201 12.201 0.355 0.030 0.083 0.355 0.030 0.002 0.030 0.011 0.067 0.016 + 374.95 11.945 11.956 11.957 0.512 -0.176 -0.168 0.512 -0.176 0.029 -0.086 -0.090 0.161 0.064 + 375.00 12.083 12.104 12.105 0.712 0.090 -0.029 0.712 0.090 -0.003 -0.021 0.064 0.258 0.034 + 375.05 11.783 11.799 11.802 0.606 0.293 -0.330 0.606 0.293 -0.097 -0.200 0.177 0.281 0.142 + 375.10 11.576 11.581 11.584 0.322 0.286 -0.537 0.322 0.286 -0.153 -0.173 0.092 0.237 0.124 + 375.15 11.627 11.627 11.628 0.140 0.087 -0.486 0.140 0.087 -0.042 -0.068 0.012 0.132 0.041 + 375.20 11.527 11.527 11.532 -0.082 0.336 -0.586 -0.082 0.336 -0.197 0.048 -0.028 0.231 0.102 + 375.25 11.594 11.601 11.601 0.394 0.084 -0.519 0.394 0.084 -0.044 -0.204 0.033 0.216 0.106 + 375.30 11.529 11.545 11.547 0.608 -0.234 -0.584 0.608 -0.234 0.136 -0.355 -0.142 0.383 0.203 + 375.35 11.581 11.597 11.605 0.617 -0.425 -0.532 0.617 -0.425 0.226 -0.328 -0.262 0.422 0.238 + 375.40 11.388 11.394 11.394 0.379 0.011 -0.725 0.379 0.011 -0.008 -0.275 0.004 0.335 0.137 + 375.45 11.504 11.505 11.505 0.114 0.100 -0.608 0.114 0.100 -0.061 -0.069 0.011 0.196 0.046 + 375.50 11.562 11.562 11.565 -0.104 -0.281 -0.551 -0.104 -0.281 0.155 0.057 0.029 0.197 0.084 + 375.55 11.585 11.585 11.586 0.092 -0.125 -0.528 0.092 -0.125 0.066 -0.049 -0.011 0.151 0.041 + 375.60 11.360 11.360 11.364 -0.057 -0.277 -0.753 -0.057 -0.277 0.209 0.043 0.016 0.323 0.107 + 375.65 11.260 11.261 11.261 0.133 -0.100 -0.853 0.133 -0.100 0.085 -0.113 -0.013 0.377 0.071 + 375.70 11.352 11.355 11.356 0.263 -0.135 -0.761 0.263 -0.135 0.103 -0.200 -0.036 0.333 0.114 + 375.75 11.547 11.548 11.551 0.167 -0.252 -0.566 0.167 -0.252 0.143 -0.095 -0.042 0.206 0.088 + 375.80 11.757 11.758 11.758 0.111 -0.023 -0.356 0.111 -0.023 0.008 -0.040 -0.003 0.070 0.020 + 375.85 11.783 11.785 11.785 0.212 0.107 -0.330 0.212 0.107 -0.035 -0.070 0.023 0.083 0.041 + 375.90 11.514 11.515 11.519 0.123 0.324 -0.599 0.123 0.324 -0.194 -0.074 0.040 0.239 0.106 + 375.95 11.688 11.688 11.688 -0.020 -0.074 -0.425 -0.020 -0.074 0.032 0.008 0.001 0.093 0.016 + 376.00 11.758 11.759 11.761 -0.167 0.202 -0.355 -0.167 0.202 -0.072 0.059 -0.034 0.097 0.049 + 376.05 11.768 11.769 11.770 -0.158 -0.063 -0.344 -0.158 -0.063 0.022 0.054 0.010 0.074 0.030 + 376.10 11.436 11.453 11.454 -0.615 0.203 -0.677 -0.615 0.203 -0.137 0.416 -0.125 0.439 0.228 + 376.15 11.466 11.480 11.480 -0.574 -0.001 -0.647 -0.574 -0.001 0.001 0.371 0.000 0.374 0.186 + 376.20 11.661 11.671 11.672 -0.483 0.165 -0.452 -0.483 0.165 -0.075 0.219 -0.080 0.233 0.122 + 376.25 11.540 11.597 11.604 -1.147 0.388 -0.573 -1.147 0.388 -0.222 0.657 -0.444 0.897 0.412 + 376.30 11.520 11.548 11.548 -0.810 -0.038 -0.593 -0.810 -0.038 0.022 0.481 0.031 0.505 0.241 + 376.35 11.543 11.558 11.559 -0.572 -0.197 -0.569 -0.572 -0.197 0.112 0.326 0.113 0.345 0.181 + 376.40 11.493 11.520 11.523 -0.786 -0.245 -0.620 -0.786 -0.245 0.152 0.487 0.192 0.530 0.272 + 376.45 11.600 11.636 11.640 -0.920 0.310 -0.513 -0.920 0.310 -0.159 0.472 -0.285 0.602 0.287 + 376.50 11.759 11.786 11.787 -0.807 0.079 -0.354 -0.807 0.079 -0.028 0.286 -0.063 0.391 0.147 + 376.55 11.729 11.765 11.768 -0.918 0.241 -0.384 -0.918 0.241 -0.093 0.352 -0.221 0.524 0.213 + 376.60 11.871 11.885 11.885 -0.575 0.066 -0.242 -0.575 0.066 -0.016 0.139 -0.038 0.197 0.072 + 376.65 11.809 11.824 11.825 -0.590 0.198 -0.304 -0.590 0.198 -0.060 0.179 -0.117 0.240 0.111 + 376.70 11.386 11.403 11.409 -0.615 0.375 -0.727 -0.615 0.375 -0.273 0.447 -0.231 0.523 0.286 + 376.75 11.236 11.270 11.270 -0.871 -0.075 -0.876 -0.871 -0.075 0.066 0.763 0.065 0.766 0.384 + 376.80 11.108 11.127 11.129 -0.655 0.221 -1.005 -0.655 0.221 -0.222 0.659 -0.145 0.744 0.355 + 376.85 11.208 11.249 11.258 -0.961 0.455 -0.905 -0.961 0.455 -0.412 0.870 -0.437 0.975 0.529 + 376.90 11.188 11.281 11.281 -1.448 0.086 -0.925 -1.448 0.086 -0.079 1.339 -0.124 1.479 0.674 + 376.95 11.277 11.328 11.328 -1.080 -0.023 -0.836 -1.080 -0.023 0.020 0.903 0.025 0.933 0.452 + 377.00 11.582 11.623 11.644 -0.974 -0.694 -0.531 -0.974 -0.694 0.368 0.517 0.676 0.856 0.464 + 377.05 11.362 11.428 11.433 -1.221 -0.360 -0.751 -1.221 -0.360 0.270 0.917 0.440 1.092 0.526 + 377.10 11.287 11.327 11.328 -0.949 -0.173 -0.826 -0.949 -0.173 0.143 0.784 0.164 0.806 0.407 + 377.15 11.413 11.424 11.425 -0.520 -0.140 -0.700 -0.520 -0.140 0.098 0.364 0.073 0.390 0.192 + 377.20 11.613 11.623 11.625 -0.460 -0.251 -0.499 -0.460 -0.251 0.126 0.230 0.116 0.262 0.143 + 377.25 11.736 11.743 11.743 -0.413 0.078 -0.377 -0.413 0.078 -0.029 0.156 -0.032 0.159 0.081 + 377.30 11.794 11.800 11.802 -0.363 -0.198 -0.319 -0.363 -0.198 0.063 0.116 0.072 0.136 0.075 + 377.35 11.726 11.738 11.742 -0.533 -0.315 -0.387 -0.533 -0.315 0.122 0.206 0.168 0.266 0.146 + 377.40 11.662 11.679 11.680 -0.629 -0.183 -0.451 -0.629 -0.183 0.083 0.284 0.115 0.317 0.159 + 377.45 11.590 11.620 11.625 -0.840 0.331 -0.523 -0.840 0.331 -0.173 0.440 -0.278 0.545 0.274 + 377.50 11.423 11.458 11.464 -0.902 0.359 -0.690 -0.902 0.359 -0.248 0.623 -0.324 0.710 0.372 + 377.55 11.433 11.465 11.466 -0.861 0.151 -0.680 -0.861 0.151 -0.103 0.586 -0.130 0.613 0.304 + 377.60 11.346 11.404 11.406 -1.154 0.167 -0.767 -1.154 0.167 -0.128 0.885 -0.193 0.974 0.458 + 377.65 10.945 10.997 10.997 -1.068 -0.039 -1.168 -1.068 -0.039 0.046 1.248 0.042 1.254 0.625 + 377.70 10.908 10.942 10.944 -0.856 0.235 -1.204 -0.856 0.235 -0.283 1.031 -0.201 1.119 0.544 + 377.75 10.996 11.059 11.060 -1.178 0.168 -1.117 -1.178 0.168 -0.188 1.316 -0.198 1.332 0.672 + 377.80 10.763 10.815 10.823 -1.053 0.416 -1.350 -1.053 0.416 -0.561 1.421 -0.438 1.552 0.795 + 377.85 11.017 11.073 11.085 -1.109 0.529 -1.096 -1.109 0.529 -0.579 1.215 -0.586 1.355 0.734 + 377.90 10.994 11.031 11.041 -0.894 0.488 -1.118 -0.894 0.488 -0.545 1.000 -0.436 1.144 0.610 + 377.95 10.870 10.892 10.905 -0.687 0.524 -1.242 -0.687 0.524 -0.651 0.854 -0.360 1.146 0.566 + 378.00 11.028 11.055 11.057 -0.772 0.201 -1.085 -0.772 0.201 -0.218 0.837 -0.155 0.906 0.439 + 378.05 11.135 11.161 11.162 -0.766 0.153 -0.978 -0.766 0.153 -0.150 0.749 -0.117 0.783 0.386 + 378.10 11.284 11.305 11.323 -0.690 0.639 -0.829 -0.690 0.639 -0.530 0.572 -0.441 0.786 0.448 + 378.15 11.260 11.261 11.264 -0.107 0.268 -0.852 -0.107 0.268 -0.228 0.091 -0.029 0.405 0.124 + 378.20 10.965 10.967 10.983 0.178 0.609 -1.148 0.178 0.609 -0.699 -0.205 0.109 0.860 0.368 + 378.25 10.812 10.816 10.849 0.269 0.849 -1.300 0.269 0.849 -1.104 -0.349 0.228 1.242 0.590 + 378.30 10.915 10.916 10.947 0.147 0.814 -1.197 0.147 0.814 -0.974 -0.176 0.120 1.059 0.499 + 378.35 11.018 11.021 11.101 0.273 1.335 -1.095 0.273 1.335 -1.462 -0.299 0.365 1.528 0.768 + 378.40 11.135 11.144 11.235 0.448 1.429 -0.978 0.448 1.429 -1.398 -0.438 0.641 1.600 0.799 + 378.45 11.290 11.296 11.361 0.391 1.213 -0.823 0.391 1.213 -0.998 -0.322 0.474 1.151 0.576 + 378.50 11.155 11.158 11.233 0.238 1.298 -0.957 0.238 1.298 -1.243 -0.228 0.309 1.329 0.650 + 378.55 11.320 11.320 11.348 0.023 0.794 -0.793 0.023 0.794 -0.629 -0.018 0.018 0.630 0.315 + 378.60 11.393 11.396 11.409 0.289 0.542 -0.720 0.289 0.542 -0.391 -0.208 0.157 0.448 0.235 + 378.65 11.187 11.221 11.227 0.873 0.374 -0.926 0.873 0.374 -0.346 -0.809 0.326 0.880 0.469 + 378.70 11.084 11.164 11.210 1.337 1.012 -1.029 1.337 1.012 -1.041 -1.376 1.353 1.936 1.097 + 378.75 11.398 11.439 11.499 0.963 1.174 -0.715 0.963 1.174 -0.839 -0.688 1.130 1.408 0.783 + 378.80 11.754 11.806 11.860 1.107 1.133 -0.359 1.107 1.133 -0.406 -0.397 1.254 1.319 0.688 + 378.85 11.642 11.671 11.724 0.829 1.108 -0.471 0.829 1.108 -0.522 -0.391 0.919 1.069 0.564 + 378.90 11.488 11.511 11.570 0.738 1.161 -0.625 0.738 1.161 -0.726 -0.461 0.856 1.141 0.607 + 378.95 11.603 11.635 11.680 0.867 1.022 -0.510 0.867 1.022 -0.522 -0.442 0.886 1.029 0.560 + 379.00 11.655 11.694 11.721 0.961 0.794 -0.458 0.961 0.794 -0.364 -0.440 0.763 0.882 0.477 + 379.05 11.673 11.700 11.712 0.803 0.518 -0.440 0.803 0.518 -0.228 -0.353 0.417 0.554 0.296 + 379.10 11.713 11.731 11.740 0.651 0.465 -0.400 0.651 0.465 -0.186 -0.260 0.303 0.400 0.220 + 379.15 11.824 11.868 11.875 1.019 0.428 -0.289 1.019 0.428 -0.124 -0.294 0.437 0.653 0.271 + 379.20 11.527 11.543 11.551 0.597 0.437 -0.585 0.597 0.437 -0.256 -0.349 0.261 0.445 0.253 + 379.25 11.429 11.455 11.459 0.776 0.299 -0.684 0.776 0.299 -0.204 -0.530 0.232 0.579 0.307 + 379.30 11.284 11.308 11.321 0.746 0.538 -0.829 0.746 0.538 -0.446 -0.618 0.401 0.766 0.431 + 379.35 11.475 11.494 11.512 0.662 0.657 -0.638 0.662 0.657 -0.419 -0.422 0.435 0.638 0.368 + 379.40 11.273 11.281 11.334 0.438 1.092 -0.840 0.438 1.092 -0.918 -0.368 0.478 1.045 0.549 + 379.45 11.299 11.303 11.328 0.294 0.745 -0.814 0.294 0.745 -0.606 -0.240 0.219 0.652 0.344 + 379.50 11.497 11.497 11.512 -0.044 0.587 -0.616 -0.044 0.587 -0.361 0.027 -0.026 0.363 0.182 + 379.55 11.677 11.678 11.681 -0.145 0.251 -0.436 -0.145 0.251 -0.109 0.063 -0.036 0.137 0.066 + 379.60 11.731 11.732 11.743 -0.136 0.506 -0.381 -0.136 0.506 -0.193 0.052 -0.069 0.210 0.106 + 379.65 11.595 11.601 11.626 -0.372 0.757 -0.518 -0.372 0.757 -0.392 0.192 -0.281 0.489 0.260 + 379.70 11.386 11.392 11.418 -0.382 0.769 -0.727 -0.382 0.769 -0.559 0.278 -0.294 0.633 0.345 + 379.75 11.308 11.311 11.330 -0.248 0.657 -0.805 -0.248 0.657 -0.529 0.200 -0.163 0.571 0.294 + 379.80 11.272 11.273 11.297 -0.165 0.739 -0.841 -0.165 0.739 -0.622 0.139 -0.122 0.640 0.324 + 379.85 11.391 11.391 11.400 -0.067 0.458 -0.722 -0.067 0.458 -0.331 0.048 -0.031 0.368 0.168 + 379.90 11.275 11.285 11.298 -0.487 0.531 -0.838 -0.487 0.531 -0.445 0.408 -0.258 0.611 0.328 + 379.95 11.356 11.393 11.396 -0.910 0.257 -0.757 -0.910 0.257 -0.195 0.689 -0.234 0.734 0.377 + 380.00 11.299 11.323 11.323 -0.728 0.128 -0.814 -0.728 0.128 -0.104 0.592 -0.093 0.604 0.304 + 380.05 11.328 11.341 11.341 -0.538 0.023 -0.784 -0.538 0.023 -0.018 0.422 -0.012 0.453 0.211 + 380.10 11.501 11.516 11.518 -0.598 -0.193 -0.612 -0.598 -0.193 0.118 0.366 0.115 0.384 0.201 + 380.15 11.313 11.333 11.334 -0.665 0.126 -0.799 -0.665 0.126 -0.101 0.532 -0.084 0.549 0.274 + 380.20 11.329 11.347 11.348 -0.641 -0.085 -0.784 -0.641 -0.085 0.067 0.502 0.054 0.516 0.255 + 380.25 11.442 11.450 11.450 -0.440 -0.055 -0.671 -0.440 -0.055 0.037 0.295 0.024 0.323 0.149 + 380.30 11.177 11.178 11.182 -0.167 0.307 -0.936 -0.167 0.307 -0.288 0.156 -0.051 0.499 0.166 + 380.35 11.641 11.641 11.649 0.055 0.424 -0.472 0.055 0.424 -0.200 -0.026 0.023 0.202 0.101 + 380.40 11.643 11.644 11.644 0.201 -0.002 -0.470 0.201 -0.002 0.001 -0.095 -0.000 0.131 0.047 + 380.45 11.596 11.603 11.603 0.408 0.115 -0.517 0.408 0.115 -0.059 -0.211 0.047 0.224 0.112 + 380.50 11.435 11.438 11.444 0.271 0.389 -0.678 0.271 0.389 -0.264 -0.184 0.105 0.343 0.169 + 380.55 11.414 11.414 11.422 0.023 0.413 -0.699 0.023 0.413 -0.289 -0.016 0.010 0.330 0.145 + 380.60 11.372 11.374 11.381 -0.225 0.389 -0.741 -0.225 0.389 -0.288 0.166 -0.087 0.375 0.172 + 380.65 11.252 11.261 11.264 -0.447 0.289 -0.861 -0.447 0.289 -0.248 0.385 -0.129 0.512 0.238 + 380.70 10.904 10.912 10.917 -0.406 0.338 -1.209 -0.406 0.338 -0.408 0.490 -0.137 0.870 0.326 + 380.75 10.810 10.812 10.814 -0.219 0.167 -1.303 -0.219 0.167 -0.217 0.285 -0.036 0.886 0.180 + 380.80 11.221 11.222 11.222 -0.083 0.034 -0.891 -0.083 0.034 -0.031 0.074 -0.003 0.401 0.040 + 380.85 11.446 11.452 11.452 0.374 0.001 -0.667 0.374 0.001 -0.000 -0.250 0.000 0.292 0.125 + 380.90 11.993 12.005 12.005 0.556 -0.000 -0.120 0.556 -0.000 0.000 -0.067 -0.000 0.162 0.033 + 380.95 12.002 12.002 12.004 -0.031 0.246 -0.111 -0.031 0.246 -0.027 0.003 -0.008 0.037 0.014 + 381.00 11.785 11.787 11.791 -0.181 0.306 -0.328 -0.181 0.306 -0.100 0.059 -0.055 0.117 0.064 + 381.05 11.568 11.568 11.572 -0.058 0.310 -0.545 -0.058 0.310 -0.169 0.032 -0.018 0.198 0.086 + 381.10 11.179 11.179 11.204 -0.069 0.753 -0.934 -0.069 0.753 -0.703 0.064 -0.052 0.722 0.354 + 381.15 10.992 10.993 11.022 -0.074 0.807 -1.120 -0.074 0.807 -0.904 0.083 -0.060 0.956 0.455 + 381.20 10.737 10.737 10.763 -0.002 0.748 -1.376 -0.002 0.748 -1.029 0.003 -0.001 1.226 0.514 + 381.25 10.697 10.699 10.700 0.188 0.170 -1.416 0.188 0.170 -0.240 -0.266 0.032 1.034 0.180 + 381.30 10.717 10.723 10.724 0.371 -0.106 -1.396 0.371 -0.106 0.148 -0.518 -0.039 1.049 0.270 + 381.35 10.784 10.785 10.787 0.142 -0.210 -1.329 0.142 -0.210 0.280 -0.189 -0.030 0.915 0.169 + 381.40 10.907 10.907 10.910 0.027 -0.220 -1.205 0.027 -0.220 0.266 -0.032 -0.006 0.751 0.134 + 381.45 11.102 11.112 11.117 0.457 -0.352 -1.011 0.457 -0.352 0.356 -0.462 -0.161 0.677 0.303 + 381.50 11.364 11.367 11.369 0.270 -0.223 -0.749 0.270 -0.223 0.167 -0.202 -0.060 0.342 0.135 + 381.55 11.479 11.482 11.483 -0.254 -0.132 -0.634 -0.254 -0.132 0.084 0.161 0.033 0.242 0.092 + 381.60 11.460 11.468 11.474 -0.425 -0.370 -0.653 -0.425 -0.370 0.241 0.277 0.157 0.372 0.200 + 381.65 11.325 11.327 11.331 0.237 -0.306 -0.788 0.237 -0.306 0.241 -0.187 -0.073 0.385 0.157 + 381.70 11.110 11.122 11.148 0.508 -0.758 -1.002 0.508 -0.758 0.760 -0.509 -0.385 0.919 0.496 + 381.75 10.877 10.887 10.903 0.477 -0.586 -1.236 0.477 -0.586 0.725 -0.590 -0.280 1.050 0.488 + 381.80 10.734 10.743 10.755 0.451 -0.514 -1.379 0.451 -0.514 0.708 -0.622 -0.232 1.185 0.485 + 381.85 11.049 11.063 11.069 0.554 -0.376 -1.064 0.554 -0.376 0.400 -0.590 -0.208 0.790 0.371 + 381.90 11.154 11.174 11.181 0.669 -0.385 -0.959 0.669 -0.385 0.369 -0.641 -0.257 0.757 0.392 + 381.95 11.334 11.383 11.389 1.058 -0.379 -0.779 1.058 -0.379 0.295 -0.824 -0.401 0.935 0.482 + 382.00 11.501 11.541 11.547 0.957 -0.387 -0.612 0.957 -0.387 0.237 -0.585 -0.371 0.720 0.366 + 382.05 11.600 11.649 11.659 1.063 -0.477 -0.512 1.063 -0.477 0.244 -0.545 -0.507 0.810 0.391 + 382.10 11.391 11.448 11.461 1.143 -0.539 -0.722 1.143 -0.539 0.389 -0.826 -0.617 1.060 0.551 + 382.15 11.570 11.595 11.633 0.767 -0.933 -0.543 0.767 -0.933 0.507 -0.416 -0.716 0.877 0.485 + 382.20 11.738 11.753 11.768 0.587 -0.603 -0.375 0.587 -0.603 0.226 -0.220 -0.354 0.424 0.237 + 382.25 11.776 11.795 11.837 0.662 -0.992 -0.336 0.662 -0.992 0.334 -0.223 -0.657 0.768 0.385 + 382.30 11.808 11.823 11.861 0.599 -0.955 -0.305 0.599 -0.955 0.291 -0.183 -0.572 0.682 0.334 + 382.35 11.924 11.951 11.976 0.802 -0.783 -0.189 0.802 -0.783 0.148 -0.152 -0.628 0.646 0.331 + 382.40 12.011 12.020 12.062 0.471 -0.999 -0.102 0.471 -0.999 0.102 -0.048 -0.471 0.616 0.242 + 382.45 12.164 12.172 12.268 0.456 -1.532 0.051 0.456 -1.532 -0.078 0.023 -0.699 1.279 0.352 + 382.50 12.130 12.153 12.262 0.756 -1.628 0.017 0.756 -1.628 -0.027 0.013 -1.230 1.610 0.615 + 382.55 12.196 12.222 12.289 0.804 -1.282 0.083 0.804 -1.282 -0.106 0.066 -1.030 1.147 0.519 + 382.60 11.929 11.952 12.024 0.741 -1.311 -0.184 0.741 -1.311 0.241 -0.136 -0.972 1.151 0.505 + 382.65 11.888 11.892 11.953 0.304 -1.200 -0.224 0.304 -1.200 0.270 -0.068 -0.365 0.792 0.229 + 382.70 11.832 11.835 11.923 0.273 -1.443 -0.281 0.273 -1.443 0.405 -0.077 -0.395 1.118 0.285 + 382.75 11.603 11.617 11.732 0.567 -1.640 -0.510 0.567 -1.640 0.836 -0.289 -0.929 1.635 0.641 + 382.80 11.534 11.536 11.622 0.222 -1.409 -0.579 0.222 -1.409 0.816 -0.129 -0.313 1.184 0.442 + 382.85 11.489 11.490 11.566 0.139 -1.324 -0.624 0.139 -1.324 0.827 -0.087 -0.184 1.081 0.426 + 382.90 11.698 11.703 11.770 0.354 -1.253 -0.415 0.354 -1.253 0.520 -0.147 -0.443 0.934 0.349 + 382.95 11.673 11.688 11.738 0.590 -1.083 -0.440 0.590 -1.083 0.476 -0.260 -0.639 0.857 0.419 + 383.00 11.696 11.704 11.752 0.423 -1.059 -0.417 0.423 -1.059 0.441 -0.176 -0.448 0.738 0.327 + 383.05 11.580 11.592 11.636 0.527 -1.007 -0.533 0.527 -1.007 0.537 -0.281 -0.531 0.788 0.403 + 383.10 11.245 11.257 11.292 0.518 -0.888 -0.867 0.518 -0.888 0.770 -0.449 -0.460 0.905 0.502 + 383.15 11.314 11.317 11.354 0.269 -0.912 -0.799 0.269 -0.912 0.729 -0.215 -0.246 0.772 0.399 + 383.20 11.192 11.193 11.247 0.185 -1.097 -0.921 0.185 -1.097 1.010 -0.170 -0.202 1.042 0.522 + 383.25 11.402 11.417 11.473 0.587 -1.132 -0.711 0.587 -1.132 0.805 -0.417 -0.664 1.066 0.562 + 383.30 12.082 12.102 12.178 0.688 -1.363 -0.030 0.688 -1.363 0.042 -0.021 -0.938 1.166 0.469 + 383.35 12.119 12.155 12.244 0.931 -1.472 0.006 0.931 -1.472 -0.009 0.006 -1.371 1.518 0.686 + 383.40 12.394 12.420 12.476 0.807 -1.180 0.281 0.807 -1.180 -0.331 0.227 -0.952 1.061 0.517 + 383.45 12.376 12.400 12.418 0.763 -0.676 0.263 0.763 -0.676 -0.178 0.201 -0.516 0.555 0.291 + 383.50 12.187 12.202 12.235 0.607 -0.894 0.074 0.607 -0.894 -0.066 0.045 -0.543 0.587 0.274 + 383.55 11.617 11.630 11.662 0.533 -0.866 -0.495 0.533 -0.866 0.429 -0.264 -0.462 0.639 0.342 + 383.60 11.278 11.279 11.316 0.163 -0.917 -0.835 0.163 -0.917 0.766 -0.136 -0.150 0.783 0.396 + 383.65 11.593 11.593 11.629 0.054 -0.910 -0.519 0.054 -0.910 0.473 -0.028 -0.050 0.551 0.238 + 383.70 11.775 11.782 11.814 0.384 -0.875 -0.338 0.384 -0.875 0.295 -0.130 -0.336 0.513 0.233 + 383.75 11.894 11.908 11.945 0.583 -0.939 -0.219 0.583 -0.939 0.206 -0.128 -0.547 0.635 0.299 + 383.80 11.520 11.522 11.539 0.222 -0.633 -0.593 0.222 -0.633 0.375 -0.131 -0.140 0.400 0.211 + 383.85 11.782 11.782 11.806 0.019 -0.747 -0.331 0.019 -0.747 0.247 -0.006 -0.014 0.334 0.124 + 383.90 11.651 11.651 11.676 0.068 -0.761 -0.462 0.068 -0.761 0.351 -0.031 -0.051 0.398 0.178 + 383.95 11.946 11.947 11.975 0.173 -0.811 -0.167 0.173 -0.811 0.135 -0.029 -0.140 0.358 0.098 + 384.00 12.100 12.107 12.129 0.393 -0.733 -0.013 0.393 -0.733 0.009 -0.005 -0.288 0.346 0.144 + 384.05 12.346 12.360 12.411 0.581 -1.127 0.234 0.581 -1.127 -0.263 0.136 -0.655 0.832 0.360 + 384.10 12.205 12.225 12.302 0.697 -1.381 0.092 0.697 -1.381 -0.127 0.064 -0.962 1.201 0.486 + 384.15 12.121 12.138 12.174 0.636 -0.931 0.008 0.636 -0.931 -0.008 0.005 -0.592 0.635 0.296 + 384.20 12.041 12.046 12.083 0.323 -0.946 -0.072 0.323 -0.946 0.068 -0.023 -0.305 0.502 0.157 + 384.25 11.915 11.922 11.981 0.395 -1.188 -0.198 0.395 -1.188 0.235 -0.078 -0.470 0.804 0.266 + 384.30 11.808 11.811 11.855 0.260 -1.018 -0.304 0.260 -1.018 0.310 -0.079 -0.265 0.599 0.208 + 384.35 11.736 11.736 11.767 0.138 -0.842 -0.377 0.138 -0.842 0.318 -0.052 -0.116 0.435 0.171 + 384.40 11.697 11.702 11.768 0.325 -1.244 -0.416 0.325 -1.244 0.517 -0.135 -0.405 0.913 0.335 + 384.45 11.768 11.770 11.819 0.187 -1.080 -0.345 0.187 -1.080 0.372 -0.064 -0.202 0.660 0.214 + 384.50 11.993 11.993 12.057 -0.064 -1.243 -0.120 -0.064 -1.243 0.149 0.008 0.080 0.782 0.085 + 384.55 12.047 12.047 12.116 -0.035 -1.288 -0.065 -0.035 -1.288 0.084 0.002 0.045 0.833 0.048 + 384.60 12.098 12.098 12.159 -0.021 -1.216 -0.015 -0.021 -1.216 0.018 0.000 0.025 0.740 0.016 + 384.65 12.212 12.217 12.291 -0.361 -1.342 0.099 -0.361 -1.342 -0.133 -0.036 0.484 0.971 0.252 + 384.70 12.127 12.133 12.188 -0.363 -1.159 0.014 -0.363 -1.159 -0.017 -0.005 0.421 0.738 0.211 + 384.75 12.061 12.064 12.099 -0.278 -0.915 -0.052 -0.278 -0.915 0.048 0.015 0.255 0.459 0.130 + 384.80 11.868 11.873 11.885 -0.340 -0.519 -0.244 -0.340 -0.519 0.127 0.083 0.177 0.222 0.116 + 384.85 12.197 12.201 12.217 -0.299 -0.617 0.085 -0.299 -0.617 -0.052 -0.025 0.184 0.238 0.097 + 384.90 12.251 12.258 12.301 -0.424 -1.022 0.138 -0.424 -1.022 -0.141 -0.059 0.433 0.622 0.230 + 384.95 12.367 12.372 12.434 -0.336 -1.245 0.254 -0.336 -1.245 -0.317 -0.086 0.419 0.864 0.266 + 385.00 12.533 12.534 12.608 -0.166 -1.365 0.420 -0.166 -1.365 -0.574 -0.070 0.227 1.034 0.310 + 385.05 12.363 12.364 12.419 -0.079 -1.175 0.251 -0.079 -1.175 -0.294 -0.020 0.093 0.725 0.155 + 385.10 12.429 12.430 12.525 -0.098 -1.540 0.317 -0.098 -1.540 -0.487 -0.031 0.152 1.240 0.256 + 385.15 12.531 12.531 12.629 -0.145 -1.568 0.418 -0.145 -1.568 -0.655 -0.061 0.228 1.327 0.348 + 385.20 12.508 12.512 12.614 -0.301 -1.605 0.395 -0.301 -1.605 -0.634 -0.119 0.484 1.411 0.403 + 385.25 12.664 12.664 12.750 -0.131 -1.472 0.551 -0.131 -1.472 -0.811 -0.072 0.193 1.244 0.418 + 385.30 12.586 12.598 12.656 -0.543 -1.207 0.474 -0.543 -1.207 -0.572 -0.257 0.656 0.989 0.454 + 385.35 12.905 12.906 12.979 -0.184 -1.372 0.792 -0.184 -1.372 -1.087 -0.146 0.252 1.272 0.563 + 385.40 12.863 12.863 12.947 -0.014 -1.468 0.750 -0.014 -1.468 -1.101 -0.010 0.020 1.359 0.551 + 385.45 12.943 12.944 13.048 -0.147 -1.645 0.830 -0.147 -1.645 -1.365 -0.122 0.241 1.708 0.696 + 385.50 13.215 13.222 13.307 -0.429 -1.510 1.102 -0.429 -1.510 -1.663 -0.473 0.648 1.839 0.923 + 385.55 13.229 13.236 13.293 -0.427 -1.234 1.116 -0.427 -1.234 -1.378 -0.476 0.527 1.476 0.775 + 385.60 12.889 12.892 12.931 -0.281 -1.001 0.776 -0.281 -1.001 -0.777 -0.218 0.282 0.842 0.427 + 385.65 13.021 13.023 13.084 -0.241 -1.261 0.908 -0.241 -1.261 -1.145 -0.219 0.305 1.236 0.602 + 385.70 13.221 13.235 13.270 -0.614 -0.964 1.108 -0.614 -0.964 -1.068 -0.681 0.592 1.267 0.699 + 385.75 13.303 13.326 13.352 -0.784 -0.844 1.190 -0.784 -0.844 -1.004 -0.933 0.662 1.372 0.761 + 385.80 12.894 12.922 12.938 -0.844 -0.646 0.781 -0.844 -0.646 -0.504 -0.659 0.545 0.869 0.496 + 385.85 12.771 12.794 12.811 -0.766 -0.656 0.658 -0.766 -0.656 -0.432 -0.504 0.503 0.726 0.417 + 385.90 13.066 13.109 13.146 -1.068 -0.979 0.953 -1.068 -0.979 -0.933 -1.018 1.045 1.503 0.866 + 385.95 12.646 12.684 12.694 -0.978 -0.515 0.533 -0.978 -0.515 -0.274 -0.521 0.504 0.753 0.388 + 386.00 12.729 12.757 12.781 -0.835 -0.789 0.616 -0.835 -0.789 -0.487 -0.515 0.659 0.850 0.484 + 386.05 12.533 12.565 12.583 -0.899 -0.667 0.420 -0.899 -0.667 -0.280 -0.378 0.599 0.715 0.381 + 386.10 12.544 12.576 12.596 -0.897 -0.697 0.431 -0.897 -0.697 -0.301 -0.387 0.626 0.739 0.397 + 386.15 12.593 12.597 12.606 -0.305 -0.476 0.480 -0.305 -0.476 -0.229 -0.146 0.145 0.275 0.154 + 386.20 13.070 13.078 13.110 -0.456 -0.917 0.957 -0.456 -0.917 -0.878 -0.437 0.418 0.983 0.533 + 386.25 13.024 13.040 13.073 -0.652 -0.925 0.911 -0.652 -0.925 -0.843 -0.594 0.603 1.056 0.597 + 386.30 13.235 13.272 13.304 -0.983 -0.925 1.123 -0.983 -0.925 -1.039 -1.103 0.909 1.541 0.883 + 386.35 13.336 13.386 13.436 -1.147 -1.169 1.224 -1.147 -1.169 -1.430 -1.403 1.340 2.089 1.205 + 386.40 13.293 13.328 13.351 -0.965 -0.791 1.180 -0.965 -0.791 -0.933 -1.139 0.763 1.475 0.829 + 386.45 13.453 13.491 13.504 -1.013 -0.604 1.340 -1.013 -0.604 -0.809 -1.357 0.612 1.593 0.847 + 386.50 13.513 13.540 13.565 -0.855 -0.815 1.400 -0.855 -0.815 -1.141 -1.198 0.697 1.678 0.898 + 386.55 13.548 13.570 13.620 -0.771 -1.169 1.435 -0.771 -1.169 -1.677 -1.106 0.901 2.009 1.101 + 386.60 13.536 13.565 13.638 -0.875 -1.414 1.424 -0.875 -1.414 -2.014 -1.246 1.238 2.396 1.336 + 386.65 13.457 13.509 13.568 -1.183 -1.262 1.344 -1.183 -1.262 -1.696 -1.591 1.493 2.399 1.382 + 386.70 13.478 13.557 13.602 -1.467 -1.105 1.365 -1.467 -1.105 -1.509 -2.003 1.622 2.619 1.493 + 386.75 13.268 13.321 13.359 -1.183 -1.018 1.155 -1.183 -1.018 -1.176 -1.366 1.204 1.885 1.084 + 386.80 13.373 13.438 13.493 -1.319 -1.215 1.260 -1.319 -1.215 -1.531 -1.663 1.603 2.403 1.386 + 386.85 13.320 13.397 13.439 -1.430 -1.067 1.208 -1.430 -1.067 -1.289 -1.727 1.526 2.321 1.320 + 386.90 13.121 13.199 13.238 -1.428 -1.017 1.009 -1.428 -1.017 -1.026 -1.440 1.453 2.046 1.144 + 386.95 13.440 13.486 13.520 -1.120 -0.952 1.327 -1.120 -0.952 -1.264 -1.486 1.066 1.961 1.112 + 387.00 13.432 13.454 13.480 -0.768 -0.835 1.319 -0.768 -0.835 -1.101 -1.013 0.641 1.513 0.814 + 387.05 13.320 13.333 13.346 -0.596 -0.601 1.207 -0.596 -0.601 -0.725 -0.720 0.358 1.086 0.541 + 387.10 13.120 13.129 13.151 -0.477 -0.775 1.007 -0.477 -0.775 -0.781 -0.480 0.370 0.921 0.494 + 387.15 13.466 13.479 13.504 -0.602 -0.820 1.353 -0.602 -0.820 -1.110 -0.815 0.494 1.433 0.731 + 387.20 13.362 13.384 13.394 -0.770 -0.501 1.249 -0.770 -0.501 -0.625 -0.962 0.385 1.202 0.605 + 387.25 13.559 13.585 13.593 -0.851 -0.440 1.446 -0.851 -0.440 -0.637 -1.231 0.375 1.504 0.718 + 387.30 13.405 13.433 13.443 -0.869 -0.529 1.292 -0.869 -0.529 -0.683 -1.122 0.459 1.351 0.696 + 387.35 13.654 13.670 13.703 -0.663 -0.949 1.542 -0.663 -0.949 -1.462 -1.022 0.629 1.858 0.946 + 387.40 13.577 13.592 13.608 -0.623 -0.668 1.464 -0.623 -0.668 -0.978 -0.913 0.416 1.489 0.700 + 387.45 13.567 13.589 13.601 -0.771 -0.561 1.455 -0.771 -0.561 -0.817 -1.121 0.433 1.512 0.726 + 387.50 13.491 13.515 13.518 -0.813 -0.248 1.378 -0.813 -0.248 -0.341 -1.120 0.201 1.311 0.594 + 387.55 13.409 13.426 13.445 -0.679 -0.717 1.296 -0.679 -0.717 -0.929 -0.880 0.486 1.327 0.684 + 387.60 13.462 13.481 13.550 -0.722 -1.367 1.349 -0.722 -1.367 -1.844 -0.974 0.987 2.105 1.154 + 387.65 13.224 13.256 13.285 -0.916 -0.878 1.112 -0.916 -0.878 -0.976 -1.018 0.804 1.423 0.812 + 387.70 13.172 13.181 13.232 -0.495 -1.160 1.059 -0.495 -1.160 -1.229 -0.525 0.575 1.357 0.727 + 387.75 13.237 13.244 13.264 -0.417 -0.728 1.124 -0.417 -0.728 -0.819 -0.469 0.304 0.984 0.496 + 387.80 13.446 13.453 13.462 -0.435 -0.506 1.333 -0.435 -0.506 -0.675 -0.580 0.220 1.111 0.458 + 387.85 13.298 13.305 13.308 -0.459 -0.244 1.185 -0.459 -0.244 -0.289 -0.544 0.112 0.837 0.313 + 387.90 13.344 13.350 13.350 -0.402 -0.103 1.231 -0.402 -0.103 -0.127 -0.494 0.042 0.843 0.256 + 387.95 12.984 12.989 12.989 -0.360 0.065 0.871 -0.360 0.065 0.056 -0.314 -0.023 0.446 0.160 + 388.00 12.601 12.606 12.608 -0.358 0.231 0.488 -0.358 0.231 0.113 -0.175 -0.083 0.210 0.112 + 388.05 12.914 12.916 12.919 -0.214 0.282 0.802 -0.214 0.282 0.226 -0.171 -0.060 0.384 0.145 + 388.10 13.240 13.240 13.241 -0.109 0.116 1.127 -0.109 0.116 0.131 -0.123 -0.013 0.648 0.090 + 388.15 13.294 13.306 13.310 -0.570 0.318 1.181 -0.570 0.318 0.375 -0.674 -0.181 0.911 0.396 + 388.20 13.346 13.373 13.383 -0.853 0.513 1.233 -0.853 0.513 0.633 -1.052 -0.438 1.256 0.652 + 388.25 13.565 13.582 13.595 -0.663 0.598 1.453 -0.663 0.598 0.869 -0.963 -0.396 1.453 0.678 + 388.30 13.286 13.298 13.314 -0.566 0.644 1.173 -0.566 0.644 0.755 -0.664 -0.364 1.056 0.535 + 388.35 13.330 13.333 13.353 -0.251 0.740 1.218 -0.251 0.740 0.901 -0.306 -0.186 1.047 0.485 + 388.40 13.748 13.748 13.753 -0.068 0.361 1.635 -0.068 0.361 0.591 -0.111 -0.025 1.404 0.301 + 388.45 13.533 13.533 13.536 -0.051 0.264 1.420 -0.051 0.264 0.375 -0.073 -0.014 1.045 0.191 + 388.50 13.783 13.787 13.787 0.352 -0.001 1.670 0.352 -0.001 -0.002 0.587 -0.000 1.456 0.294 + 388.55 13.839 13.844 13.848 0.389 0.310 1.726 0.389 0.310 0.536 0.671 0.121 1.613 0.433 + 388.60 13.670 13.675 13.676 0.349 0.218 1.557 0.349 0.218 0.340 0.543 0.076 1.297 0.322 + 388.65 13.863 13.866 13.866 0.272 0.073 1.750 0.272 0.073 0.128 0.476 0.020 1.572 0.247 + 388.70 13.625 13.631 13.633 0.432 0.203 1.512 0.432 0.203 0.306 0.653 0.088 1.257 0.363 + 388.75 13.552 13.560 13.566 0.466 0.413 1.439 0.466 0.413 0.595 0.670 0.193 1.229 0.458 + 388.80 13.541 13.557 13.562 0.657 0.342 1.429 0.657 0.342 0.488 0.939 0.224 1.295 0.541 + 388.85 13.458 13.471 13.475 0.591 0.349 1.345 0.591 0.349 0.470 0.794 0.206 1.140 0.473 + 388.90 13.285 13.301 13.312 0.650 0.543 1.172 0.650 0.543 0.637 0.762 0.353 1.046 0.527 + 388.95 13.067 13.102 13.112 0.947 0.527 0.955 0.947 0.527 0.503 0.904 0.499 1.043 0.575 + 389.00 12.879 12.919 12.930 1.011 0.531 0.766 1.011 0.531 0.407 0.775 0.537 0.946 0.514 + 389.05 12.921 12.958 12.966 0.975 0.450 0.809 0.975 0.450 0.364 0.789 0.439 0.904 0.487 + 389.10 13.093 13.116 13.120 0.777 0.306 0.981 0.777 0.306 0.300 0.762 0.238 0.829 0.426 + 389.15 12.767 12.778 12.778 0.520 0.083 0.655 0.520 0.083 0.055 0.340 0.043 0.353 0.174 + 389.20 12.862 12.874 12.874 0.558 0.078 0.749 0.558 0.078 0.058 0.418 0.043 0.439 0.212 + 389.25 12.955 12.967 12.967 0.558 -0.090 0.842 0.558 -0.090 -0.076 0.470 -0.050 0.514 0.239 + 389.30 12.894 12.898 12.899 0.334 0.122 0.781 0.334 0.122 0.095 0.261 0.041 0.368 0.140 + 389.35 13.121 13.121 13.121 0.058 -0.010 1.008 0.058 -0.010 -0.010 0.058 -0.001 0.510 0.029 + 389.40 12.840 12.840 12.840 -0.012 0.108 0.727 -0.012 0.108 0.079 -0.008 -0.001 0.270 0.040 + 389.45 12.512 12.528 12.529 0.634 0.114 0.399 0.634 0.114 0.046 0.253 0.072 0.287 0.134 + 389.50 12.397 12.419 12.420 0.748 0.153 0.284 0.748 0.153 0.044 0.212 0.115 0.332 0.123 + 389.55 12.395 12.411 12.415 0.635 0.289 0.282 0.635 0.289 0.082 0.179 0.183 0.283 0.135 + 389.60 12.625 12.643 12.645 0.677 0.250 0.512 0.677 0.250 0.128 0.347 0.169 0.392 0.203 + 389.65 12.857 12.879 12.879 0.738 0.084 0.745 0.738 0.084 0.063 0.550 0.062 0.553 0.278 + 389.70 13.203 13.241 13.245 0.992 -0.338 1.091 0.992 -0.338 -0.368 1.082 -0.335 1.144 0.596 + 389.75 13.314 13.347 13.351 0.927 -0.352 1.202 0.927 -0.352 -0.423 1.114 -0.327 1.214 0.618 + 389.80 13.014 13.038 13.040 0.798 -0.211 0.901 0.798 -0.211 -0.190 0.719 -0.168 0.746 0.381 + 389.85 13.089 13.096 13.099 0.429 -0.263 0.977 0.429 -0.263 -0.257 0.419 -0.113 0.603 0.252 + 389.90 13.119 13.146 13.147 0.849 0.163 1.006 0.849 0.163 0.164 0.854 0.138 0.880 0.440 + 389.95 13.036 13.094 13.097 1.232 0.285 0.923 1.232 0.285 0.263 1.137 0.351 1.225 0.609 + 390.00 13.170 13.217 13.218 1.103 0.170 1.058 1.103 0.170 0.180 1.167 0.188 1.182 0.598 + 390.05 13.190 13.273 13.290 1.485 0.669 1.077 1.485 0.669 0.721 1.600 0.994 1.907 1.008 + 390.10 13.113 13.203 13.214 1.545 0.525 1.000 1.545 0.525 0.525 1.545 0.811 1.831 0.911 + 390.15 13.417 13.502 13.506 1.514 0.310 1.304 1.514 0.310 0.404 1.975 0.469 2.045 1.035 + 390.20 13.427 13.508 13.509 1.483 0.078 1.314 1.483 0.078 0.103 1.949 0.116 1.967 0.978 + 390.25 13.178 13.270 13.273 1.566 0.262 1.065 1.566 0.262 0.279 1.667 0.410 1.827 0.870 + 390.30 13.152 13.229 13.233 1.422 0.313 1.039 1.422 0.313 0.325 1.478 0.445 1.600 0.789 + 390.35 13.067 13.133 13.150 1.315 0.668 0.954 1.315 0.668 0.637 1.255 0.878 1.543 0.830 + 390.40 13.312 13.392 13.408 1.461 0.664 1.199 1.461 0.664 0.796 1.752 0.971 2.007 1.078 + 390.45 13.139 13.252 13.256 1.727 0.319 1.026 1.727 0.319 0.328 1.772 0.551 2.068 0.942 + 390.50 12.484 12.597 12.602 1.691 0.337 0.371 1.691 0.337 0.125 0.627 0.570 1.555 0.428 + 390.55 12.556 12.649 12.659 1.529 0.489 0.444 1.529 0.489 0.217 0.678 0.748 1.387 0.516 + 390.60 12.860 12.918 12.919 1.221 0.161 0.748 1.221 0.161 0.120 0.913 0.196 1.038 0.471 + 390.65 12.802 12.857 12.857 1.188 0.029 0.689 1.188 0.029 0.020 0.819 0.035 0.944 0.410 + 390.70 12.756 12.795 12.796 0.994 0.157 0.643 0.994 0.157 0.101 0.639 0.156 0.713 0.333 + 390.75 12.930 12.975 12.978 1.079 0.304 0.817 1.079 0.304 0.249 0.881 0.328 0.962 0.486 + 390.80 12.764 12.786 12.786 0.738 0.005 0.652 0.738 0.005 0.004 0.481 0.004 0.485 0.240 + 390.85 12.785 12.818 12.831 0.924 -0.581 0.672 0.924 -0.581 -0.391 0.621 -0.537 0.821 0.454 + 390.90 12.569 12.603 12.609 0.918 -0.396 0.457 0.918 -0.396 -0.181 0.419 -0.364 0.604 0.292 + 390.95 12.445 12.484 12.497 0.992 -0.561 0.332 0.992 -0.561 -0.186 0.329 -0.556 0.704 0.336 + 391.00 12.383 12.406 12.434 0.749 -0.831 0.271 0.749 -0.831 -0.225 0.203 -0.622 0.662 0.346 + 391.05 12.687 12.726 12.748 0.997 -0.742 0.574 0.997 -0.742 -0.426 0.573 -0.741 0.938 0.514 + 391.10 12.554 12.582 12.618 0.835 -0.949 0.442 0.835 -0.949 -0.419 0.369 -0.792 0.896 0.484 + 391.15 12.306 12.308 12.344 0.234 -0.932 0.193 0.234 -0.932 -0.180 0.045 -0.218 0.480 0.143 + 391.20 12.385 12.402 12.464 0.641 -1.248 0.272 0.641 -1.248 -0.340 0.175 -0.800 1.021 0.443 + 391.25 12.623 12.632 12.700 0.484 -1.307 0.510 0.484 -1.307 -0.667 0.247 -0.632 1.101 0.476 + 391.30 12.598 12.612 12.664 0.583 -1.145 0.485 0.583 -1.145 -0.556 0.283 -0.668 0.944 0.457 + 391.35 12.560 12.563 12.646 0.302 -1.445 0.447 0.302 -1.445 -0.646 0.135 -0.437 1.190 0.396 + 391.40 12.750 12.759 12.809 0.488 -1.133 0.637 0.488 -1.133 -0.721 0.311 -0.553 0.963 0.480 + 391.45 12.467 12.469 12.495 0.207 -0.807 0.355 0.207 -0.807 -0.286 0.073 -0.167 0.410 0.170 + 391.50 12.395 12.397 12.414 0.238 -0.655 0.282 0.238 -0.655 -0.185 0.067 -0.156 0.282 0.125 + 391.55 12.307 12.310 12.334 0.280 -0.761 0.194 0.280 -0.761 -0.148 0.054 -0.213 0.347 0.132 + 391.60 12.399 12.400 12.459 0.166 -1.207 0.286 0.166 -1.207 -0.345 0.048 -0.200 0.783 0.201 + 391.65 12.484 12.484 12.532 -0.057 -1.097 0.371 -0.057 -1.097 -0.407 -0.021 0.063 0.672 0.206 + 391.70 12.703 12.706 12.748 -0.260 -1.029 0.591 -0.260 -1.029 -0.608 -0.153 0.267 0.738 0.341 + 391.75 13.119 13.121 13.169 -0.228 -1.115 1.007 -0.228 -1.115 -1.122 -0.230 0.255 1.154 0.587 + 391.80 12.941 12.945 12.982 -0.337 -0.982 0.828 -0.337 -0.982 -0.813 -0.279 0.330 0.881 0.460 + 391.85 13.080 13.088 13.150 -0.461 -1.275 0.967 -0.461 -1.275 -1.233 -0.445 0.587 1.387 0.718 + 391.90 13.104 13.131 13.181 -0.844 -1.140 0.991 -0.844 -1.140 -1.130 -0.837 0.963 1.498 0.852 + 391.95 13.049 13.073 13.108 -0.795 -0.955 0.936 -0.795 -0.955 -0.894 -0.744 0.759 1.210 0.695 + 392.00 13.008 13.060 13.112 -1.170 -1.168 0.895 -1.170 -1.168 -1.046 -1.047 1.368 1.768 1.008 + 392.05 13.168 13.229 13.281 -1.263 -1.177 1.055 -1.263 -1.177 -1.243 -1.333 1.487 2.047 1.176 + 392.10 13.036 13.122 13.180 -1.503 -1.239 0.923 -1.503 -1.239 -1.144 -1.388 1.863 2.324 1.295 + 392.15 12.986 13.145 13.194 -2.042 -1.128 0.873 -2.042 -1.128 -0.985 -1.782 2.304 3.102 1.537 + 392.20 13.192 13.322 13.368 -1.857 -1.112 1.079 -1.857 -1.112 -1.200 -2.004 2.066 2.925 1.559 + 392.25 12.848 12.912 12.977 -1.286 -1.297 0.735 -1.286 -1.297 -0.953 -0.945 1.667 1.937 1.070 + 392.30 13.169 13.254 13.329 -1.501 -1.407 1.056 -1.501 -1.407 -1.486 -1.585 2.112 2.674 1.515 + 392.35 13.208 13.263 13.294 -1.204 -0.909 1.096 -1.204 -0.909 -0.996 -1.319 1.095 1.739 0.991 + 392.40 13.389 13.442 13.453 -1.189 -0.551 1.276 -1.189 -0.551 -0.704 -1.518 0.656 1.674 0.899 + 392.45 13.188 13.267 13.272 -1.444 -0.351 1.076 -1.444 -0.351 -0.377 -1.553 0.506 1.682 0.838 + 392.50 13.558 13.649 13.653 -1.571 -0.337 1.445 -1.571 -0.337 -0.488 -2.270 0.530 2.334 1.191 + 392.55 13.530 13.616 13.625 -1.534 -0.476 1.417 -1.534 -0.476 -0.674 -2.174 0.730 2.294 1.195 + 392.60 13.546 13.664 13.666 -1.794 -0.184 1.433 -1.794 -0.184 -0.263 -2.572 0.330 2.654 1.303 + 392.65 13.502 13.610 13.617 -1.707 -0.438 1.390 -1.707 -0.438 -0.609 -2.372 0.748 2.518 1.280 + 392.70 13.592 13.707 13.717 -1.775 -0.519 1.479 -1.775 -0.519 -0.767 -2.625 0.921 2.804 1.443 + 392.75 13.659 13.741 13.747 -1.502 -0.409 1.546 -1.502 -0.409 -0.633 -2.322 0.615 2.407 1.242 + 392.80 13.474 13.592 13.592 -1.786 0.003 1.361 -1.786 0.003 0.004 -2.431 -0.005 2.521 1.216 + 392.85 13.625 13.737 13.737 -1.750 -0.014 1.512 -1.750 -0.014 -0.020 -2.646 0.024 2.675 1.323 + 392.90 13.894 14.004 14.005 -1.756 0.134 1.781 -1.756 0.134 0.239 -3.128 -0.236 3.137 1.573 + 392.95 13.770 13.883 13.883 -1.769 0.058 1.657 -1.769 0.058 0.095 -2.931 -0.102 2.939 1.467 + 393.00 13.617 13.739 13.742 -1.826 0.290 1.504 -1.826 0.290 0.436 -2.746 -0.529 2.839 1.415 + 393.05 13.820 13.911 13.919 -1.590 0.451 1.707 -1.590 0.451 0.771 -2.715 -0.718 2.823 1.456 + 393.10 13.562 13.613 13.614 -1.171 0.131 1.450 -1.171 0.131 0.190 -1.698 -0.153 1.745 0.858 + 393.15 13.464 13.545 13.545 -1.472 -0.058 1.352 -1.472 -0.058 -0.078 -1.989 0.085 1.998 0.996 + 393.20 13.667 13.754 13.756 -1.551 -0.189 1.554 -1.551 -0.189 -0.293 -2.411 0.293 2.428 1.223 + 393.25 13.953 14.077 14.080 -1.868 -0.291 1.840 -1.868 -0.291 -0.535 -3.437 0.543 3.480 1.760 + 393.30 13.572 13.677 13.683 -1.694 -0.420 1.459 -1.694 -0.420 -0.612 -2.471 0.711 2.587 1.321 + 393.35 13.587 13.685 13.695 -1.635 -0.529 1.474 -1.635 -0.529 -0.779 -2.410 0.865 2.563 1.338 + 393.40 13.742 13.800 13.809 -1.254 -0.505 1.630 -1.254 -0.505 -0.823 -2.043 0.633 2.241 1.146 + 393.45 13.592 13.644 13.666 -1.195 -0.772 1.479 -1.195 -0.772 -1.141 -1.767 0.922 2.105 1.148 + 393.50 13.773 13.828 13.880 -1.236 -1.192 1.660 -1.236 -1.192 -1.979 -2.052 1.473 2.853 1.605 + 393.55 13.806 13.838 13.881 -0.937 -1.093 1.693 -0.937 -1.093 -1.850 -1.588 1.024 2.470 1.322 + 393.60 13.523 13.569 13.587 -1.109 -0.700 1.410 -1.109 -0.700 -0.987 -1.564 0.776 1.854 1.003 + 393.65 13.607 13.680 13.695 -1.416 -0.626 1.494 -1.416 -0.626 -0.936 -2.116 0.887 2.315 1.239 + 393.70 13.813 13.885 13.906 -1.409 -0.769 1.700 -1.409 -0.769 -1.308 -2.395 1.083 2.733 1.468 + 393.75 14.007 14.076 14.094 -1.391 -0.701 1.894 -1.391 -0.701 -1.327 -2.636 0.975 3.008 1.554 + 393.80 14.002 14.038 14.071 -1.012 -0.951 1.889 -1.012 -0.951 -1.796 -1.911 0.962 2.748 1.397 + 393.85 13.947 13.968 14.002 -0.768 -0.978 1.834 -0.768 -0.978 -1.794 -1.408 0.751 2.455 1.200 + 393.90 14.197 14.218 14.253 -0.780 -0.995 2.084 -0.780 -0.995 -2.073 -1.625 0.776 2.971 1.373 + 393.95 14.261 14.283 14.323 -0.799 -1.074 2.148 -0.799 -1.074 -2.307 -1.716 0.858 3.203 1.500 + 394.00 14.544 14.579 14.605 -1.010 -0.878 2.431 -1.010 -0.878 -2.135 -2.456 0.887 3.850 1.686 + 394.05 14.430 14.479 14.507 -1.193 -0.898 2.317 -1.193 -0.898 -2.081 -2.765 1.072 3.800 1.812 + 394.10 14.541 14.592 14.620 -1.214 -0.916 2.428 -1.214 -0.916 -2.224 -2.948 1.112 4.105 1.928 + 394.15 14.346 14.379 14.395 -0.980 -0.680 2.233 -0.980 -0.680 -1.518 -2.189 0.666 3.204 1.373 + 394.20 14.078 14.119 14.139 -1.080 -0.760 1.965 -1.080 -0.760 -1.493 -2.122 0.821 2.802 1.361 + 394.25 13.947 14.032 14.051 -1.548 -0.732 1.834 -1.548 -0.732 -1.343 -2.839 1.134 3.148 1.669 + 394.30 13.854 13.931 13.938 -1.460 -0.448 1.741 -1.460 -0.448 -0.780 -2.541 0.654 2.681 1.369 + 394.35 13.864 13.898 13.905 -0.965 -0.457 1.751 -0.965 -0.457 -0.801 -1.690 0.441 2.104 0.961 + 394.40 14.096 14.100 14.125 -0.338 -0.838 1.983 -0.338 -0.838 -1.662 -0.670 0.283 2.374 0.907 + 394.45 14.108 14.115 14.139 -0.452 -0.834 1.995 -0.452 -0.834 -1.664 -0.901 0.377 2.439 0.965 + 394.50 14.534 14.541 14.575 -0.454 -0.983 2.422 -0.454 -0.983 -2.380 -1.099 0.446 3.518 1.329 + 394.55 14.409 14.414 14.438 -0.378 -0.823 2.297 -0.378 -0.823 -1.891 -0.869 0.311 3.048 1.052 + 394.60 14.430 14.446 14.476 -0.668 -0.931 2.318 -0.668 -0.931 -2.158 -1.547 0.621 3.342 1.363 + 394.65 14.235 14.247 14.264 -0.581 -0.700 2.122 -0.581 -0.700 -1.485 -1.233 0.407 2.666 0.986 + 394.70 14.349 14.362 14.370 -0.612 -0.460 2.236 -0.612 -0.460 -1.029 -1.369 0.281 2.794 0.868 + 394.75 14.468 14.503 14.511 -1.008 -0.467 2.355 -1.008 -0.467 -1.101 -2.375 0.471 3.391 1.330 + 394.80 14.468 14.490 14.495 -0.797 -0.385 2.355 -0.797 -0.385 -0.907 -1.877 0.307 3.164 1.053 + 394.85 14.155 14.163 14.173 -0.455 -0.542 2.043 -0.455 -0.542 -1.107 -0.929 0.247 2.337 0.733 + 394.90 13.980 13.982 13.988 -0.188 -0.405 1.868 -0.188 -0.405 -0.756 -0.350 0.076 1.844 0.418 + 394.95 14.053 14.054 14.060 -0.193 -0.411 1.940 -0.193 -0.411 -0.797 -0.374 0.079 1.985 0.442 + 395.00 13.684 13.691 13.706 -0.447 -0.625 1.571 -0.447 -0.625 -0.983 -0.702 0.280 1.530 0.620 + 395.05 13.484 13.485 13.527 -0.178 -1.068 1.371 -0.178 -1.068 -1.464 -0.244 0.190 1.526 0.748 + 395.10 13.565 13.565 13.592 -0.020 -0.846 1.452 -0.020 -0.846 -1.228 -0.029 0.017 1.413 0.614 + 395.15 13.848 13.848 13.886 0.073 -1.028 1.735 0.073 -1.028 -1.784 0.127 -0.075 2.036 0.895 + 395.20 13.776 13.776 13.813 -0.012 -1.001 1.663 -0.012 -1.001 -1.666 -0.019 0.012 1.885 0.833 + 395.25 13.574 13.576 13.615 0.255 -1.021 1.461 0.255 -1.021 -1.492 0.373 -0.261 1.621 0.780 + 395.30 13.864 13.872 13.907 0.475 -0.981 1.751 0.475 -0.981 -1.717 0.832 -0.466 2.127 0.982 + 395.35 13.821 13.829 13.868 0.463 -1.044 1.708 0.463 -1.044 -1.784 0.791 -0.483 2.111 1.005 + 395.40 13.601 13.613 13.638 0.557 -0.830 1.489 0.557 -0.830 -1.236 0.830 -0.463 1.608 0.779 + 395.45 13.731 13.751 13.769 0.736 -0.704 1.618 0.736 -0.704 -1.139 1.191 -0.518 1.828 0.864 + 395.50 13.888 13.897 13.912 0.485 -0.643 1.776 0.485 -0.643 -1.141 0.862 -0.312 1.901 0.732 + 395.55 13.844 13.861 13.879 0.701 -0.707 1.731 0.701 -0.707 -1.224 1.213 -0.495 1.993 0.896 + 395.60 13.938 13.948 13.965 0.522 -0.700 1.825 0.522 -0.700 -1.277 0.953 -0.366 2.047 0.818 + 395.65 14.021 14.026 14.052 0.386 -0.847 1.908 0.386 -0.847 -1.617 0.736 -0.327 2.254 0.903 + 395.70 14.399 14.406 14.469 0.473 -1.346 2.286 0.473 -1.346 -3.076 1.081 -0.637 3.630 1.661 + 395.75 14.335 14.343 14.389 0.475 -1.149 2.222 0.475 -1.149 -2.554 1.057 -0.546 3.242 1.408 + 395.80 14.295 14.305 14.343 0.538 -1.033 2.182 0.538 -1.033 -2.255 1.175 -0.556 3.060 1.301 + 395.85 14.252 14.262 14.306 0.536 -1.128 2.139 0.536 -1.128 -2.413 1.146 -0.604 3.067 1.369 + 395.90 14.290 14.297 14.339 0.449 -1.098 2.177 0.449 -1.098 -2.391 0.977 -0.493 3.074 1.315 + 395.95 14.277 14.284 14.346 0.434 -1.333 2.165 0.434 -1.333 -2.885 0.940 -0.579 3.325 1.545 + 396.00 14.229 14.229 14.266 -0.049 -1.032 2.116 -0.049 -1.032 -2.183 -0.104 0.051 2.772 1.093 + 396.05 14.403 14.403 14.468 0.057 -1.373 2.290 0.057 -1.373 -3.143 0.132 -0.079 3.566 1.574 + 396.10 14.604 14.612 14.667 0.468 -1.277 2.491 0.468 -1.277 -3.182 1.166 -0.598 4.029 1.721 + 396.15 14.241 14.250 14.312 0.512 -1.333 2.128 0.512 -1.333 -2.837 1.089 -0.682 3.284 1.557 + 396.20 14.620 14.631 14.692 0.571 -1.337 2.507 0.571 -1.337 -3.353 1.432 -0.764 4.200 1.862 + 396.25 14.658 14.665 14.686 0.471 -0.778 2.545 0.471 -0.778 -1.981 1.199 -0.367 3.653 1.172 + 396.30 14.858 14.871 14.881 0.602 -0.549 2.746 0.602 -0.549 -1.508 1.653 -0.331 4.101 1.131 + 396.35 14.789 14.795 14.818 0.438 -0.830 2.676 0.438 -0.830 -2.222 1.173 -0.364 4.021 1.269 + 396.40 14.558 14.565 14.601 0.433 -1.026 2.446 0.433 -1.026 -2.509 1.060 -0.445 3.611 1.380 + 396.45 14.653 14.659 14.713 0.400 -1.257 2.541 0.400 -1.257 -3.193 1.016 -0.502 4.097 1.694 + 396.50 14.407 14.409 14.497 0.263 -1.595 2.294 0.263 -1.595 -3.659 0.603 -0.419 3.938 1.866 + 396.55 14.580 14.581 14.723 0.136 -2.042 2.467 0.136 -2.042 -5.037 0.336 -0.278 5.137 2.528 + 396.60 14.274 14.275 14.437 0.172 -2.156 2.161 0.172 -2.156 -4.659 0.373 -0.372 4.674 2.344 + 396.65 14.267 14.267 14.385 0.075 -1.839 2.154 0.075 -1.839 -3.963 0.163 -0.139 4.015 1.984 + 396.70 14.114 14.119 14.221 -0.371 -1.708 2.001 -0.371 -1.708 -3.417 -0.742 0.634 3.529 1.777 + 396.75 14.048 14.050 14.137 -0.196 -1.568 1.936 -0.196 -1.568 -3.034 -0.380 0.308 3.121 1.537 + 396.80 13.859 13.861 13.994 -0.195 -1.931 1.746 -0.195 -1.931 -3.372 -0.341 0.377 3.408 1.705 + 396.85 14.052 14.054 14.208 -0.189 -2.087 1.939 -0.189 -2.087 -4.048 -0.366 0.394 4.077 2.042 + 396.90 13.823 13.831 13.962 -0.456 -1.913 1.710 -0.456 -1.913 -3.271 -0.779 0.872 3.395 1.737 + 396.95 13.932 13.934 14.068 -0.232 -1.937 1.819 -0.232 -1.937 -3.524 -0.423 0.450 3.558 1.789 + 397.00 14.165 14.167 14.254 -0.262 -1.564 2.052 -0.262 -1.564 -3.210 -0.539 0.411 3.364 1.641 + 397.05 14.092 14.095 14.156 -0.288 -1.315 1.979 -0.288 -1.315 -2.602 -0.570 0.379 2.864 1.345 + 397.10 13.922 13.927 13.972 -0.354 -1.126 1.810 -0.354 -1.126 -2.037 -0.640 0.399 2.334 1.086 + 397.15 13.825 13.828 13.870 -0.310 -1.076 1.712 -0.310 -1.076 -1.841 -0.531 0.334 2.092 0.973 + 397.20 13.803 13.806 13.843 -0.302 -1.002 1.690 -0.302 -1.002 -1.694 -0.510 0.302 1.976 0.897 + 397.25 13.952 13.956 13.993 -0.338 -1.018 1.839 -0.338 -1.018 -1.873 -0.621 0.344 2.267 1.002 + 397.30 14.000 14.006 14.044 -0.422 -1.025 1.887 -0.422 -1.025 -1.935 -0.796 0.432 2.395 1.068 + 397.35 14.082 14.090 14.156 -0.450 -1.367 1.970 -0.450 -1.367 -2.692 -0.887 0.616 2.975 1.450 + 397.40 13.941 13.954 14.005 -0.603 -1.195 1.828 -0.603 -1.195 -2.184 -1.102 0.720 2.566 1.275 + 397.45 13.866 13.885 13.915 -0.718 -0.912 1.754 -0.718 -0.912 -1.599 -1.260 0.655 2.211 1.069 + 397.50 13.970 13.981 14.010 -0.544 -0.901 1.858 -0.544 -0.901 -1.674 -1.011 0.490 2.279 1.008 + 397.55 13.737 13.757 13.778 -0.746 -0.750 1.624 -0.746 -0.750 -1.218 -1.211 0.559 1.878 0.903 + 397.60 13.630 13.647 13.661 -0.688 -0.621 1.517 -0.688 -0.621 -0.942 -1.044 0.428 1.580 0.735 + 397.65 14.021 14.029 14.047 -0.461 -0.709 1.908 -0.461 -0.709 -1.352 -0.880 0.327 2.178 0.823 + 397.70 14.173 14.181 14.189 -0.473 -0.491 2.060 -0.473 -0.491 -1.012 -0.973 0.232 2.354 0.712 + 397.75 13.967 13.973 13.986 -0.423 -0.589 1.854 -0.423 -0.589 -1.092 -0.784 0.249 1.982 0.684 + 397.80 13.762 13.773 13.788 -0.553 -0.652 1.649 -0.553 -0.652 -1.075 -0.912 0.361 1.725 0.728 + 397.85 13.543 13.559 13.575 -0.644 -0.674 1.430 -0.644 -0.674 -0.965 -0.922 0.435 1.458 0.702 + 397.90 13.074 13.088 13.098 -0.603 -0.527 0.961 -0.603 -0.527 -0.506 -0.579 0.318 0.782 0.416 + 397.95 13.188 13.198 13.215 -0.521 -0.679 1.075 -0.521 -0.679 -0.730 -0.560 0.354 0.944 0.493 + 398.00 13.025 13.040 13.065 -0.622 -0.801 0.913 -0.622 -0.801 -0.731 -0.568 0.498 0.931 0.526 + 398.05 12.916 12.922 12.941 -0.403 -0.694 0.803 -0.403 -0.694 -0.558 -0.324 0.280 0.645 0.351 + 398.10 12.870 12.871 12.884 -0.119 -0.597 0.757 -0.119 -0.597 -0.452 -0.090 0.071 0.472 0.233 + 398.15 12.918 12.921 12.953 -0.255 -0.912 0.806 -0.255 -0.912 -0.735 -0.206 0.233 0.773 0.399 + 398.20 12.895 12.899 12.938 -0.337 -1.003 0.782 -0.337 -1.003 -0.785 -0.264 0.338 0.866 0.447 + 398.25 12.927 12.927 12.964 -0.101 -0.982 0.814 -0.101 -0.982 -0.800 -0.082 0.099 0.819 0.405 + 398.30 12.898 12.900 12.951 -0.223 -1.155 0.785 -0.223 -1.155 -0.907 -0.175 0.257 1.000 0.479 + 398.35 12.530 12.533 12.564 -0.278 -0.885 0.417 -0.278 -0.885 -0.369 -0.116 0.246 0.517 0.229 + 398.40 12.554 12.554 12.567 -0.033 -0.580 0.441 -0.033 -0.580 -0.256 -0.014 0.019 0.266 0.129 + 398.45 12.446 12.449 12.459 -0.270 -0.495 0.333 -0.270 -0.495 -0.165 -0.090 0.134 0.214 0.115 + 398.50 12.804 12.809 12.810 -0.368 -0.130 0.691 -0.368 -0.130 -0.090 -0.254 0.048 0.315 0.137 + 398.55 13.045 13.048 13.048 -0.272 -0.049 0.933 -0.272 -0.049 -0.045 -0.253 0.013 0.473 0.129 + 398.60 13.128 13.129 13.130 -0.171 -0.047 1.015 -0.171 -0.047 -0.048 -0.174 0.008 0.531 0.090 + 398.65 12.897 12.898 12.898 -0.102 0.104 0.785 -0.102 0.104 0.082 -0.080 -0.011 0.318 0.057 + 398.70 12.653 12.657 12.657 -0.279 0.130 0.541 -0.279 0.130 0.070 -0.151 -0.036 0.194 0.085 + 398.75 12.449 12.451 12.451 -0.260 -0.004 0.336 -0.260 -0.004 -0.001 -0.087 0.001 0.090 0.044 + 398.80 12.674 12.676 12.677 -0.182 -0.161 0.562 -0.182 -0.161 -0.090 -0.102 0.029 0.187 0.070 + 398.85 12.539 12.539 12.541 0.104 -0.209 0.426 0.104 -0.209 -0.089 0.044 -0.022 0.118 0.051 + 398.90 12.192 12.194 12.196 0.235 -0.248 0.079 0.235 -0.248 -0.019 0.018 -0.058 0.061 0.032 + 398.95 12.209 12.231 12.231 0.733 0.021 0.096 0.733 0.021 0.002 0.070 0.015 0.273 0.036 + 399.00 12.008 12.033 12.033 0.774 -0.132 -0.105 0.774 -0.132 0.014 -0.081 -0.102 0.314 0.066 + 399.05 12.069 12.092 12.099 0.753 -0.393 -0.044 0.753 -0.393 0.017 -0.033 -0.296 0.362 0.149 + 399.10 12.170 12.210 12.213 0.985 -0.287 0.057 0.985 -0.287 -0.016 0.056 -0.282 0.528 0.144 + 399.15 12.127 12.168 12.168 0.993 0.051 0.015 0.993 0.051 0.001 0.015 0.051 0.494 0.027 + 399.20 12.161 12.176 12.176 0.619 0.036 0.048 0.619 0.036 0.002 0.030 0.022 0.193 0.018 + 399.25 11.888 11.894 11.898 0.386 -0.278 -0.225 0.386 -0.278 0.062 -0.087 -0.107 0.138 0.076 + 399.30 11.895 11.903 11.909 0.441 -0.380 -0.218 0.441 -0.380 0.083 -0.096 -0.168 0.193 0.105 + 399.35 11.936 11.941 11.944 0.352 -0.265 -0.177 0.352 -0.265 0.047 -0.062 -0.094 0.113 0.061 + 399.40 12.106 12.110 12.114 0.283 -0.313 -0.006 0.283 -0.313 0.002 -0.002 -0.089 0.089 0.044 + 399.45 11.931 11.946 11.951 0.610 -0.332 -0.182 0.610 -0.332 0.060 -0.111 -0.203 0.258 0.119 + 399.50 12.200 12.224 12.241 0.772 -0.633 0.087 0.772 -0.633 -0.055 0.067 -0.489 0.502 0.248 + 399.55 12.187 12.225 12.260 0.960 -0.929 0.074 0.960 -0.929 -0.069 0.071 -0.892 0.895 0.449 + 399.60 12.275 12.324 12.352 1.108 -0.831 0.162 1.108 -0.831 -0.134 0.179 -0.921 0.972 0.474 + 399.65 12.184 12.249 12.271 1.254 -0.740 0.071 1.254 -0.740 -0.053 0.090 -0.928 1.062 0.467 + 399.70 11.977 12.057 12.080 1.384 -0.747 -0.136 1.384 -0.747 0.101 -0.188 -1.033 1.245 0.528 + 399.75 12.244 12.334 12.361 1.484 -0.809 0.132 1.484 -0.809 -0.107 0.195 -1.201 1.437 0.611 + 399.80 12.361 12.423 12.450 1.247 -0.821 0.248 1.247 -0.821 -0.203 0.309 -1.023 1.144 0.544 + 399.85 12.487 12.548 12.595 1.244 -1.085 0.374 1.244 -1.085 -0.406 0.465 -1.350 1.432 0.742 + 399.90 12.415 12.470 12.526 1.168 -1.183 0.303 1.168 -1.183 -0.358 0.354 -1.382 1.427 0.735 + 399.95 12.285 12.340 12.396 1.170 -1.176 0.172 1.170 -1.176 -0.202 0.201 -1.376 1.391 0.703 + 400.00 12.318 12.355 12.398 0.951 -1.028 0.206 0.951 -1.028 -0.211 0.196 -0.978 1.002 0.510 + 400.05 12.055 12.109 12.145 1.144 -0.928 -0.058 1.144 -0.928 0.053 -0.066 -1.061 1.086 0.532 + 400.10 12.246 12.289 12.323 1.026 -0.913 0.133 1.026 -0.913 -0.122 0.137 -0.937 0.952 0.477 + 400.15 12.361 12.388 12.461 0.820 -1.350 0.248 0.820 -1.350 -0.335 0.203 -1.107 1.278 0.587 + 400.20 12.602 12.615 12.725 0.567 -1.673 0.489 0.567 -1.673 -0.819 0.278 -0.949 1.680 0.642 + 400.25 12.565 12.574 12.641 0.463 -1.306 0.452 0.463 -1.306 -0.591 0.209 -0.604 1.063 0.435 + 400.30 12.420 12.427 12.481 0.416 -1.167 0.307 0.416 -1.167 -0.358 0.128 -0.485 0.814 0.308 + 400.35 12.278 12.304 12.331 0.802 -0.812 0.165 0.802 -0.812 -0.134 0.133 -0.651 0.664 0.339 + 400.40 12.075 12.107 12.145 0.877 -0.962 -0.038 0.877 -0.962 0.036 -0.033 -0.844 0.849 0.423 + 400.45 12.183 12.200 12.239 0.634 -0.982 0.070 0.634 -0.982 -0.069 0.045 -0.623 0.686 0.314 + 400.50 12.327 12.341 12.369 0.596 -0.836 0.214 0.596 -0.836 -0.179 0.128 -0.498 0.550 0.272 + 400.55 12.460 12.477 12.539 0.665 -1.247 0.347 0.665 -1.247 -0.432 0.231 -0.829 1.058 0.481 + 400.60 12.170 12.171 12.212 0.174 -0.998 0.057 0.174 -0.998 -0.057 0.010 -0.173 0.515 0.091 + 400.65 12.034 12.038 12.096 0.321 -1.178 -0.079 0.321 -1.178 0.093 -0.025 -0.378 0.748 0.195 + 400.70 12.059 12.065 12.107 0.383 -1.005 -0.054 0.383 -1.005 0.054 -0.021 -0.385 0.580 0.195 + 400.75 12.156 12.170 12.231 0.574 -1.224 0.043 0.574 -1.224 -0.053 0.025 -0.702 0.914 0.352 + 400.80 12.313 12.326 12.398 0.565 -1.331 0.200 0.565 -1.331 -0.267 0.113 -0.752 1.066 0.403 + 400.85 12.423 12.443 12.506 0.705 -1.260 0.310 0.705 -1.260 -0.390 0.218 -0.888 1.090 0.497 + 400.90 12.282 12.290 12.417 0.443 -1.774 0.169 0.443 -1.774 -0.300 0.075 -0.785 1.685 0.422 + 400.95 12.614 12.623 12.807 0.459 -2.165 0.501 0.459 -2.165 -1.085 0.230 -0.995 2.575 0.745 + 401.00 12.727 12.740 12.911 0.579 -2.096 0.614 0.579 -2.096 -1.286 0.356 -1.214 2.552 0.902 + 401.05 12.668 12.688 12.835 0.714 -1.936 0.555 0.714 -1.936 -1.075 0.397 -1.382 2.283 0.898 + 401.10 12.931 12.944 13.019 0.582 -1.391 0.818 0.582 -1.391 -1.139 0.476 -0.809 1.472 0.738 + 401.15 12.819 12.821 12.924 0.220 -1.625 0.706 0.220 -1.625 -1.148 0.155 -0.357 1.594 0.606 + 401.20 12.246 12.248 12.431 0.253 -2.124 0.133 0.253 -2.124 -0.283 0.034 -0.538 2.297 0.305 + 401.25 12.230 12.230 12.386 0.030 -1.962 0.117 0.030 -1.962 -0.230 0.003 -0.059 1.932 0.118 + 401.30 12.188 12.196 12.323 0.423 -1.764 0.075 0.423 -1.764 -0.133 0.032 -0.746 1.648 0.379 + 401.35 11.974 11.978 12.130 0.315 -1.911 -0.139 0.315 -1.911 0.265 -0.044 -0.602 1.885 0.330 + 401.40 12.344 12.345 12.552 0.155 -2.270 0.231 0.155 -2.270 -0.525 0.036 -0.351 2.615 0.316 + 401.45 11.978 11.978 12.175 -0.105 -2.182 -0.135 -0.105 -2.182 0.295 0.014 0.229 2.395 0.187 + 401.50 11.963 11.966 12.183 0.240 -2.292 -0.149 0.240 -2.292 0.342 -0.036 -0.551 2.666 0.325 + 401.55 12.069 12.070 12.243 0.149 -2.055 -0.044 0.149 -2.055 0.091 -0.007 -0.306 2.123 0.159 + 401.60 11.883 11.884 12.061 -0.117 -2.059 -0.230 -0.117 -2.059 0.473 0.027 0.242 2.153 0.266 + 401.65 11.721 11.721 11.868 0.050 -1.859 -0.391 0.050 -1.859 0.728 -0.019 -0.092 1.806 0.367 + 401.70 11.778 11.779 11.915 -0.132 -1.793 -0.334 -0.132 -1.793 0.600 0.044 0.236 1.673 0.323 + 401.75 11.528 11.528 11.658 -0.062 -1.735 -0.585 -0.062 -1.735 1.015 0.036 0.107 1.678 0.511 + 401.80 11.084 11.084 11.264 0.062 -2.003 -1.029 0.062 -2.003 2.060 -0.064 -0.125 2.536 1.032 + 401.85 11.271 11.274 11.478 0.268 -2.151 -0.842 0.268 -2.151 1.811 -0.225 -0.576 2.704 0.957 + 401.90 11.368 11.379 11.583 0.491 -2.167 -0.745 0.491 -2.167 1.613 -0.366 -1.065 2.745 0.984 + 401.95 11.595 11.597 11.777 0.164 -2.052 -0.517 0.164 -2.052 1.061 -0.085 -0.335 2.252 0.558 + 402.00 11.465 11.465 11.654 0.108 -2.090 -0.648 0.108 -2.090 1.354 -0.070 -0.226 2.399 0.687 + 402.05 11.461 11.462 11.665 -0.069 -2.167 -0.651 -0.069 -2.167 1.412 0.045 0.150 2.563 0.710 + 402.10 11.446 11.450 11.658 0.287 -2.194 -0.667 0.287 -2.194 1.462 -0.191 -0.630 2.669 0.802 + 402.15 11.310 11.326 11.497 0.588 -1.974 -0.802 0.588 -1.974 1.584 -0.472 -1.162 2.444 1.010 + 402.20 11.292 11.301 11.458 0.437 -1.891 -0.820 0.437 -1.891 1.551 -0.358 -0.826 2.220 0.897 + 402.25 11.216 11.237 11.362 0.688 -1.683 -0.897 0.688 -1.683 1.510 -0.618 -1.159 2.056 1.001 + 402.30 11.286 11.292 11.452 0.369 -1.906 -0.827 0.369 -1.906 1.576 -0.305 -0.703 2.226 0.876 + 402.35 11.226 11.242 11.420 0.584 -2.013 -0.886 0.584 -2.013 1.785 -0.518 -1.176 2.590 1.100 + 402.40 11.116 11.130 11.332 0.552 -2.131 -0.997 0.552 -2.131 2.124 -0.550 -1.177 2.920 1.245 + 402.45 10.856 10.857 11.061 0.140 -2.116 -1.257 0.140 -2.116 2.659 -0.176 -0.295 3.038 1.341 + 402.50 10.961 10.966 11.166 0.337 -2.103 -1.152 0.337 -2.103 2.423 -0.388 -0.708 2.932 1.277 + 402.55 10.652 10.662 10.818 0.460 -1.831 -1.461 0.460 -1.831 2.674 -0.672 -0.842 2.848 1.441 + 402.60 10.936 10.948 11.168 0.526 -2.206 -1.177 0.526 -2.206 2.597 -0.620 -1.161 3.265 1.456 + 402.65 10.973 10.994 11.210 0.692 -2.189 -1.140 0.692 -2.189 2.496 -0.789 -1.515 3.286 1.512 + 402.70 10.639 10.665 10.898 0.734 -2.244 -1.473 0.734 -2.244 3.306 -1.081 -1.647 3.873 1.924 + 402.75 10.525 10.542 10.862 0.608 -2.618 -1.588 0.608 -2.618 4.157 -0.966 -1.592 4.872 2.278 + 402.80 10.468 10.498 10.819 0.790 -2.613 -1.644 0.790 -2.613 4.297 -1.299 -2.064 5.078 2.470 + 402.85 10.172 10.216 10.509 0.957 -2.463 -1.941 0.957 -2.463 4.782 -1.858 -2.358 5.377 2.823 + 402.90 10.262 10.302 10.576 0.915 -2.389 -1.851 0.915 -2.389 4.422 -1.693 -2.185 4.984 2.607 + 402.95 10.441 10.501 10.827 1.122 -2.639 -1.672 1.122 -2.639 4.412 -1.875 -2.959 5.508 2.817 + 403.00 10.439 10.497 10.907 1.104 -2.961 -1.674 1.104 -2.961 4.955 -1.848 -3.270 6.393 3.109 + 403.05 10.785 10.810 11.134 0.736 -2.667 -1.328 0.736 -2.667 3.541 -0.977 -1.963 4.709 2.082 + 403.10 11.205 11.209 11.549 0.289 -2.785 -0.908 0.289 -2.785 2.529 -0.263 -0.806 4.332 1.333 + 403.15 11.059 11.077 11.447 0.629 -2.888 -1.054 0.629 -2.888 3.043 -0.662 -1.816 4.923 1.802 + 403.20 10.585 10.629 10.948 0.964 -2.625 -1.528 0.964 -2.625 4.011 -1.473 -2.532 5.078 2.483 + 403.25 10.572 10.601 10.862 0.785 -2.366 -1.541 0.785 -2.366 3.645 -1.209 -1.856 4.293 2.133 + 403.30 10.790 10.791 10.990 0.154 -2.082 -1.323 0.154 -2.082 2.754 -0.204 -0.321 3.054 1.390 + 403.35 10.917 10.917 11.139 0.047 -2.214 -1.196 0.047 -2.214 2.648 -0.056 -0.104 3.167 1.325 + 403.40 10.840 10.845 10.996 0.326 -1.818 -1.273 0.326 -1.818 2.315 -0.415 -0.593 2.517 1.213 + 403.45 10.693 10.696 10.801 0.243 -1.503 -1.420 0.243 -1.503 2.134 -0.345 -0.365 2.167 1.096 + 403.50 10.390 10.399 10.476 0.436 -1.267 -1.723 0.436 -1.267 2.182 -0.752 -0.553 2.381 1.186 + 403.55 10.437 10.443 10.509 0.328 -1.182 -1.675 0.328 -1.182 1.980 -0.550 -0.388 2.156 1.046 + 403.60 10.446 10.446 10.504 -0.014 -1.106 -1.667 -0.014 -1.106 1.844 0.023 0.015 2.001 0.922 + 403.65 10.109 10.110 10.197 0.159 -1.326 -2.004 0.159 -1.326 2.657 -0.318 -0.210 2.899 1.342 + 403.70 10.158 10.159 10.253 0.122 -1.388 -1.955 0.122 -1.388 2.713 -0.239 -0.169 2.881 1.364 + 403.75 10.417 10.417 10.506 0.091 -1.363 -1.696 0.091 -1.363 2.311 -0.154 -0.124 2.371 1.160 + 403.80 10.621 10.622 10.724 0.144 -1.477 -1.492 0.144 -1.477 2.203 -0.216 -0.213 2.214 1.112 + 403.85 10.739 10.740 10.877 -0.043 -1.722 -1.373 -0.043 -1.722 2.365 0.059 0.074 2.426 1.183 + 403.90 10.693 10.693 10.813 0.055 -1.610 -1.420 0.055 -1.610 2.286 -0.078 -0.089 2.306 1.145 + 403.95 10.689 10.689 10.786 -0.025 -1.448 -1.424 -0.025 -1.448 2.061 0.035 0.036 2.062 1.031 + 404.00 10.791 10.794 10.887 -0.243 -1.422 -1.322 -0.243 -1.422 1.881 0.321 0.345 1.915 0.969 + 404.05 10.558 10.561 10.639 -0.215 -1.288 -1.554 -0.215 -1.288 2.002 0.334 0.277 2.061 1.024 + 404.10 10.515 10.518 10.627 -0.246 -1.520 -1.598 -0.246 -1.520 2.429 0.393 0.374 2.463 1.245 + 404.15 10.629 10.629 10.723 -0.066 -1.420 -1.484 -0.066 -1.420 2.107 0.097 0.093 2.111 1.056 + 404.20 10.491 10.492 10.538 0.156 -0.975 -1.621 0.156 -0.975 1.581 -0.253 -0.152 1.802 0.804 + 404.25 10.405 10.406 10.438 0.082 -0.823 -1.707 0.082 -0.823 1.406 -0.140 -0.067 1.800 0.707 + 404.30 10.429 10.429 10.454 0.016 -0.725 -1.684 0.016 -0.725 1.221 -0.027 -0.012 1.681 0.611 + 404.35 10.508 10.509 10.532 0.101 -0.703 -1.604 0.101 -0.703 1.127 -0.162 -0.071 1.539 0.570 + 404.40 10.532 10.533 10.542 0.082 -0.454 -1.580 0.082 -0.454 0.718 -0.130 -0.037 1.356 0.365 + 404.45 10.507 10.507 10.509 0.006 -0.165 -1.605 0.006 -0.165 0.265 -0.010 -0.001 1.302 0.132 + 404.50 10.415 10.422 10.422 0.384 -0.019 -1.698 0.384 -0.019 0.032 -0.652 -0.007 1.515 0.327 + 404.55 10.401 10.404 10.404 0.269 0.060 -1.712 0.269 0.060 -0.103 -0.460 0.016 1.504 0.236 + 404.60 10.840 10.842 10.845 0.156 -0.290 -1.272 0.156 -0.290 0.369 -0.198 -0.045 0.864 0.211 + 404.65 10.843 10.850 10.852 0.385 -0.229 -1.270 0.385 -0.229 0.290 -0.489 -0.088 0.907 0.288 + 404.70 10.818 10.832 10.833 0.568 -0.039 -1.295 0.568 -0.039 0.051 -0.735 -0.022 1.001 0.369 + 404.75 11.165 11.196 11.197 0.837 -0.128 -0.948 0.837 -0.128 0.121 -0.793 -0.107 0.808 0.405 + 404.80 11.315 11.341 11.345 0.769 -0.308 -0.798 0.769 -0.308 0.245 -0.614 -0.237 0.661 0.351 + 404.85 11.276 11.311 11.312 0.890 -0.148 -0.836 0.890 -0.148 0.124 -0.745 -0.132 0.757 0.383 + 404.90 11.235 11.273 11.275 0.925 0.189 -0.878 0.925 0.189 -0.166 -0.812 0.175 0.831 0.423 + 404.95 11.067 11.106 11.116 0.936 0.469 -1.046 0.936 0.469 -0.491 -0.979 0.439 1.095 0.590 + 405.00 11.213 11.272 11.280 1.156 0.412 -0.900 1.156 0.412 -0.371 -1.041 0.476 1.158 0.602 + 405.05 11.272 11.317 11.322 0.998 0.348 -0.840 0.998 0.348 -0.293 -0.839 0.347 0.912 0.477 + 405.10 11.002 11.044 11.053 0.966 0.441 -1.111 0.966 0.441 -0.490 -1.073 0.426 1.181 0.627 + 405.15 10.832 10.871 10.883 0.925 0.508 -1.281 0.925 0.508 -0.651 -1.185 0.470 1.378 0.716 + 405.20 10.831 10.870 10.893 0.912 0.709 -1.281 0.912 0.709 -0.908 -1.169 0.646 1.488 0.808 + 405.25 11.128 11.158 11.181 0.816 0.705 -0.984 0.816 0.705 -0.694 -0.804 0.575 1.066 0.604 + 405.30 11.165 11.183 11.218 0.641 0.884 -0.948 0.641 0.884 -0.838 -0.608 0.566 1.045 0.590 + 405.35 11.239 11.252 11.269 0.533 0.625 -0.874 0.533 0.625 -0.546 -0.466 0.333 0.719 0.396 + 405.40 11.288 11.301 11.304 0.558 0.219 -0.825 0.558 0.219 -0.180 -0.460 0.122 0.520 0.254 + 405.45 11.179 11.186 11.187 0.395 0.126 -0.934 0.395 0.126 -0.118 -0.369 0.050 0.522 0.195 + 405.50 11.347 11.347 11.348 -0.073 0.105 -0.766 -0.073 0.105 -0.081 0.056 -0.008 0.302 0.049 + 405.55 10.980 10.980 10.981 0.015 -0.084 -1.133 0.015 -0.084 0.095 -0.017 -0.001 0.645 0.048 + 405.60 11.317 11.319 11.319 -0.250 0.034 -0.796 -0.250 0.034 -0.027 0.199 -0.008 0.349 0.101 + 405.65 11.242 11.242 11.243 -0.140 0.076 -0.871 -0.140 0.076 -0.066 0.122 -0.011 0.392 0.069 + 405.70 11.127 11.135 11.135 -0.416 0.077 -0.986 -0.416 0.077 -0.076 0.410 -0.032 0.575 0.209 + 405.75 11.520 11.520 11.521 -0.009 -0.148 -0.593 -0.009 -0.148 0.088 0.005 0.001 0.187 0.044 + 405.80 11.783 11.784 11.784 0.161 -0.075 -0.330 0.161 -0.075 0.025 -0.053 -0.012 0.070 0.030 + 405.85 11.627 11.642 11.642 0.587 0.123 -0.486 0.587 0.123 -0.060 -0.285 0.072 0.298 0.150 + 405.90 11.550 11.556 11.556 0.355 0.104 -0.563 0.355 0.104 -0.059 -0.200 0.037 0.227 0.106 + 405.95 11.526 11.531 11.536 0.343 0.336 -0.587 0.343 0.336 -0.197 -0.201 0.115 0.288 0.152 + 406.00 11.512 11.515 11.520 0.250 0.336 -0.601 0.250 0.336 -0.202 -0.150 0.084 0.268 0.133 + 406.05 11.685 11.689 11.702 0.310 0.549 -0.428 0.310 0.549 -0.235 -0.132 0.170 0.290 0.159 + 406.10 11.883 11.898 11.900 0.590 0.201 -0.229 0.590 0.201 -0.046 -0.135 0.118 0.220 0.093 + 406.15 11.743 11.769 11.770 0.786 0.099 -0.370 0.786 0.099 -0.037 -0.291 0.078 0.382 0.152 + 406.20 11.843 11.890 11.890 1.052 0.054 -0.270 1.052 0.054 -0.014 -0.284 0.056 0.591 0.145 + 406.25 11.759 11.809 11.816 1.091 0.406 -0.354 1.091 0.406 -0.144 -0.386 0.443 0.740 0.302 + 406.30 11.811 11.845 11.860 0.901 0.592 -0.302 0.901 0.592 -0.179 -0.272 0.534 0.627 0.313 + 406.35 11.662 11.683 11.701 0.699 0.651 -0.451 0.699 0.651 -0.294 -0.315 0.455 0.558 0.313 + 406.40 11.610 11.629 11.661 0.674 0.863 -0.503 0.674 0.863 -0.434 -0.339 0.582 0.726 0.401 + 406.45 11.402 11.408 11.453 0.384 1.009 -0.711 0.384 1.009 -0.717 -0.273 0.387 0.835 0.430 + 406.50 11.407 11.415 11.492 0.407 1.330 -0.705 0.407 1.330 -0.938 -0.287 0.541 1.216 0.560 + 406.55 11.417 11.424 11.480 0.389 1.134 -0.696 0.389 1.134 -0.789 -0.270 0.441 0.960 0.472 + 406.60 11.340 11.357 11.404 0.637 1.029 -0.773 0.637 1.029 -0.796 -0.492 0.655 1.031 0.571 + 406.65 11.514 11.535 11.590 0.698 1.122 -0.598 0.698 1.122 -0.672 -0.418 0.783 1.052 0.556 + 406.70 11.496 11.499 11.542 0.263 0.995 -0.616 0.263 0.995 -0.613 -0.162 0.262 0.719 0.343 + 406.75 11.246 11.247 11.310 -0.102 1.193 -0.867 -0.102 1.193 -1.034 0.088 -0.121 1.092 0.522 + 406.80 10.729 10.729 10.852 -0.047 1.628 -1.384 -0.047 1.628 -2.253 0.066 -0.077 2.284 1.128 + 406.85 11.049 11.049 11.162 -0.032 1.587 -1.064 -0.032 1.587 -1.688 0.034 -0.051 1.825 0.845 + 406.90 10.798 10.810 10.894 -0.509 1.355 -1.315 -0.509 1.355 -1.782 0.669 -0.689 1.912 1.012 + 406.95 10.782 10.805 10.943 -0.708 1.730 -1.331 -0.708 1.730 -2.303 0.942 -1.225 2.633 1.387 + 407.00 11.145 11.163 11.322 -0.639 1.889 -0.968 -0.639 1.889 -1.828 0.618 -1.206 2.456 1.138 + 407.05 11.326 11.358 11.523 -0.854 1.944 -0.787 -0.854 1.944 -1.530 0.673 -1.661 2.564 1.178 + 407.10 11.236 11.277 11.427 -0.955 1.848 -0.877 -0.955 1.848 -1.620 0.838 -1.766 2.548 1.269 + 407.15 11.218 11.255 11.360 -0.918 1.540 -0.895 -0.918 1.540 -1.378 0.821 -1.413 2.007 1.069 + 407.20 11.176 11.230 11.335 -1.107 1.539 -0.937 -1.107 1.539 -1.442 1.038 -1.704 2.236 1.231 + 407.25 11.377 11.451 11.539 -1.296 1.419 -0.735 -1.296 1.419 -1.043 0.953 -1.839 2.117 1.160 + 407.30 11.579 11.656 11.705 -1.331 1.076 -0.533 -1.331 1.076 -0.574 0.710 -1.431 1.606 0.849 + 407.35 11.942 12.039 12.078 -1.522 0.973 -0.171 -1.522 0.973 -0.166 0.260 -1.480 1.645 0.756 + 407.40 11.771 11.853 11.858 -1.387 0.330 -0.341 -1.387 0.330 -0.113 0.474 -0.458 1.075 0.334 + 407.45 11.724 11.826 11.845 -1.553 0.664 -0.389 -1.553 0.664 -0.258 0.604 -1.031 1.501 0.611 + 407.50 11.795 11.868 11.896 -1.314 0.816 -0.318 -1.314 0.816 -0.259 0.417 -1.072 1.246 0.590 + 407.55 11.721 11.784 11.832 -1.214 1.064 -0.391 -1.214 1.064 -0.416 0.475 -1.292 1.379 0.719 + 407.60 11.751 11.803 11.859 -1.102 1.152 -0.361 -1.102 1.152 -0.416 0.398 -1.270 1.336 0.697 + 407.65 11.646 11.719 11.741 -1.307 0.719 -0.467 -1.307 0.719 -0.336 0.610 -0.940 1.221 0.585 + 407.70 11.479 11.524 11.569 -1.012 1.019 -0.634 -1.012 1.019 -0.646 0.641 -1.032 1.232 0.688 + 407.75 11.377 11.412 11.453 -0.892 0.966 -0.736 -0.892 0.966 -0.711 0.656 -0.862 1.135 0.648 + 407.80 11.310 11.338 11.359 -0.799 0.677 -0.803 -0.799 0.677 -0.544 0.641 -0.541 0.871 0.500 + 407.85 11.339 11.400 11.415 -1.182 0.569 -0.774 -1.182 0.569 -0.440 0.915 -0.673 1.160 0.609 + 407.90 11.360 11.398 11.406 -0.938 0.410 -0.753 -0.938 0.410 -0.309 0.706 -0.385 0.808 0.431 + 407.95 11.705 11.757 11.761 -1.100 0.321 -0.408 -1.100 0.321 -0.131 0.449 -0.354 0.740 0.293 + 408.00 11.750 11.791 11.796 -0.976 0.365 -0.362 -0.976 0.365 -0.132 0.354 -0.357 0.609 0.260 + 408.05 11.795 11.844 11.848 -1.080 0.315 -0.318 -1.080 0.315 -0.100 0.343 -0.340 0.683 0.247 + 408.10 11.725 11.756 11.758 -0.850 0.206 -0.387 -0.850 0.206 -0.080 0.329 -0.175 0.458 0.191 + 408.15 11.724 11.763 11.765 -0.946 0.254 -0.388 -0.946 0.254 -0.099 0.367 -0.240 0.555 0.225 + 408.20 11.823 11.874 11.882 -1.098 0.444 -0.290 -1.098 0.444 -0.129 0.319 -0.488 0.744 0.298 + 408.25 12.014 12.048 12.061 -0.907 0.545 -0.099 -0.907 0.545 -0.054 0.089 -0.494 0.564 0.252 + 408.30 12.556 12.576 12.594 -0.706 0.676 0.443 -0.706 0.676 0.300 -0.313 -0.478 0.576 0.323 + 408.35 12.508 12.530 12.545 -0.744 0.601 0.395 -0.744 0.601 0.238 -0.294 -0.447 0.535 0.293 + 408.40 12.538 12.567 12.610 -0.857 1.039 0.425 -0.857 1.039 0.442 -0.364 -0.891 0.998 0.529 + 408.45 12.498 12.534 12.590 -0.947 1.185 0.385 -0.947 1.185 0.456 -0.365 -1.122 1.225 0.633 + 408.50 12.143 12.174 12.235 -0.868 1.222 0.031 -0.868 1.222 0.037 -0.026 -1.060 1.124 0.531 + 408.55 12.113 12.165 12.215 -1.125 1.104 0.000 -1.125 1.104 0.001 -0.001 -1.242 1.243 0.621 + 408.60 11.852 11.910 11.934 -1.170 0.770 -0.261 -1.170 0.770 -0.201 0.305 -0.901 1.015 0.486 + 408.65 11.827 11.849 11.896 -0.727 1.057 -0.286 -0.727 1.057 -0.302 0.208 -0.768 0.863 0.426 + 408.70 12.118 12.130 12.152 -0.534 0.736 0.005 -0.534 0.736 0.004 -0.003 -0.393 0.413 0.196 + 408.75 12.172 12.174 12.191 -0.217 0.644 0.059 -0.217 0.644 0.038 -0.013 -0.140 0.233 0.073 + 408.80 11.948 11.967 12.017 -0.680 1.093 -0.165 -0.680 1.093 -0.180 0.112 -0.744 0.843 0.387 + 408.85 11.900 11.918 11.959 -0.647 0.994 -0.212 -0.647 0.994 -0.211 0.137 -0.643 0.726 0.345 + 408.90 11.889 11.903 11.924 -0.564 0.718 -0.224 -0.564 0.718 -0.160 0.126 -0.405 0.441 0.227 + 408.95 11.787 11.800 11.822 -0.542 0.727 -0.325 -0.542 0.727 -0.237 0.176 -0.394 0.464 0.246 + 409.00 11.688 11.714 11.754 -0.780 0.973 -0.425 -0.780 0.973 -0.413 0.331 -0.759 0.868 0.463 + 409.05 11.576 11.589 11.605 -0.564 0.603 -0.537 -0.564 0.603 -0.324 0.303 -0.340 0.485 0.280 + 409.10 11.780 11.791 11.803 -0.498 0.541 -0.333 -0.498 0.541 -0.180 0.166 -0.269 0.326 0.182 + 409.15 11.672 11.684 11.690 -0.525 0.393 -0.441 -0.525 0.393 -0.173 0.231 -0.206 0.312 0.177 + 409.20 11.795 11.809 11.809 -0.573 0.046 -0.318 -0.573 0.046 -0.015 0.182 -0.027 0.216 0.092 + 409.25 12.102 12.125 12.126 -0.742 -0.213 -0.011 -0.742 -0.213 0.002 0.008 0.158 0.298 0.079 + 409.30 11.915 11.962 11.965 -1.065 -0.249 -0.198 -1.065 -0.249 0.049 0.211 0.265 0.617 0.171 + 409.35 11.812 11.842 11.847 -0.854 -0.324 -0.301 -0.854 -0.324 0.098 0.257 0.277 0.462 0.195 + 409.40 12.367 12.378 12.400 -0.520 -0.731 0.254 -0.520 -0.731 -0.186 -0.132 0.380 0.435 0.222 + 409.45 12.316 12.343 12.344 -0.814 -0.167 0.204 -0.814 -0.167 -0.034 -0.166 0.136 0.366 0.108 + 409.50 12.313 12.352 12.363 -0.981 -0.529 0.200 -0.981 -0.529 -0.106 -0.197 0.519 0.641 0.282 + 409.55 12.292 12.353 12.356 -1.224 -0.260 0.179 -1.224 -0.260 -0.047 -0.219 0.319 0.799 0.195 + 409.60 12.445 12.511 12.513 -1.274 -0.269 0.333 -1.274 -0.269 -0.089 -0.424 0.342 0.903 0.276 + 409.65 12.748 12.817 12.827 -1.335 -0.490 0.635 -1.335 -0.490 -0.311 -0.847 0.654 1.213 0.557 + 409.70 12.795 12.847 12.860 -1.150 -0.573 0.682 -1.150 -0.573 -0.391 -0.785 0.659 1.058 0.548 + 409.75 12.572 12.628 12.645 -1.189 -0.656 0.459 -1.189 -0.656 -0.301 -0.545 0.780 1.027 0.499 + 409.80 12.712 12.767 12.768 -1.184 -0.166 0.599 -1.184 -0.166 -0.100 -0.710 0.197 0.895 0.372 + 409.85 12.548 12.586 12.587 -0.980 -0.166 0.435 -0.980 -0.166 -0.072 -0.426 0.163 0.588 0.231 + 409.90 12.470 12.503 12.504 -0.901 0.128 0.358 -0.901 0.128 0.046 -0.322 -0.115 0.478 0.173 + 409.95 12.466 12.484 12.484 -0.673 -0.056 0.353 -0.673 -0.056 -0.020 -0.238 0.038 0.290 0.121 + 410.00 12.159 12.189 12.189 -0.857 -0.045 0.046 -0.857 -0.045 -0.002 -0.039 0.039 0.369 0.028 + 410.05 12.392 12.414 12.414 -0.727 -0.046 0.280 -0.727 -0.046 -0.013 -0.203 0.034 0.304 0.103 + 410.10 12.444 12.483 12.491 -0.976 0.468 0.332 -0.976 0.468 0.155 -0.324 -0.457 0.641 0.290 + 410.15 12.193 12.244 12.245 -1.125 0.133 0.080 -1.125 0.133 0.011 -0.090 -0.150 0.645 0.088 + 410.20 11.799 11.839 11.843 -0.978 0.309 -0.314 -0.978 0.309 -0.097 0.307 -0.302 0.575 0.221 + 410.25 11.945 11.981 11.985 -0.925 0.285 -0.167 -0.925 0.285 -0.048 0.155 -0.264 0.483 0.155 + 410.30 12.182 12.195 12.195 -0.554 0.035 0.069 -0.554 0.035 0.002 -0.038 -0.019 0.157 0.022 + 410.35 12.162 12.167 12.169 -0.356 -0.180 0.049 -0.356 -0.180 -0.009 -0.018 0.064 0.081 0.033 + 410.40 11.931 11.942 11.943 -0.517 -0.114 -0.182 -0.517 -0.114 0.021 0.094 0.059 0.157 0.057 + 410.45 11.915 11.941 11.941 -0.789 -0.069 -0.198 -0.789 -0.069 0.014 0.156 0.055 0.333 0.083 + 410.50 11.795 11.824 11.827 -0.824 0.259 -0.317 -0.824 0.259 -0.082 0.262 -0.213 0.424 0.174 + 410.55 11.917 11.950 11.952 -0.896 0.163 -0.196 -0.896 0.163 -0.032 0.176 -0.146 0.434 0.115 + 410.60 11.735 11.762 11.765 -0.799 0.249 -0.378 -0.799 0.249 -0.094 0.302 -0.199 0.422 0.187 + 410.65 11.731 11.791 11.791 -1.186 0.100 -0.382 -1.186 0.100 -0.038 0.453 -0.118 0.781 0.235 + 410.70 11.649 11.732 11.733 -1.394 -0.181 -0.464 -1.394 -0.181 0.084 0.647 0.252 1.095 0.350 + 410.75 11.261 11.324 11.325 -1.198 -0.175 -0.852 -1.198 -0.175 0.149 1.021 0.210 1.097 0.527 + 410.80 11.343 11.376 11.376 -0.856 -0.005 -0.769 -0.856 -0.005 0.004 0.658 0.005 0.662 0.329 + 410.85 10.917 10.973 10.975 -1.109 -0.212 -1.196 -1.109 -0.212 0.254 1.325 0.235 1.352 0.685 + 410.90 11.057 11.148 11.158 -1.422 -0.476 -1.056 -1.422 -0.476 0.503 1.502 0.677 1.682 0.861 + 410.95 10.968 11.032 11.034 -1.191 -0.200 -1.145 -1.191 -0.200 0.229 1.363 0.239 1.385 0.702 + 411.00 11.102 11.172 11.172 -1.249 -0.118 -1.011 -1.249 -0.118 0.119 1.263 0.147 1.298 0.639 + 411.05 11.472 11.530 11.545 -1.160 -0.588 -0.641 -1.160 -0.588 0.377 0.744 0.682 1.051 0.538 + 411.10 11.521 11.591 11.620 -1.267 -0.822 -0.592 -1.267 -0.822 0.486 0.749 1.041 1.315 0.686 + 411.15 11.600 11.659 11.693 -1.168 -0.893 -0.512 -1.168 -0.893 0.458 0.599 1.043 1.213 0.644 + 411.20 11.922 11.983 12.023 -1.201 -0.985 -0.190 -1.201 -0.985 0.188 0.229 1.183 1.225 0.610 + 411.25 11.731 11.805 11.824 -1.321 -0.665 -0.381 -1.321 -0.665 0.254 0.504 0.878 1.166 0.522 + 411.30 11.896 11.906 11.928 -0.481 -0.728 -0.216 -0.481 -0.728 0.157 0.104 0.350 0.404 0.199 + 411.35 11.835 11.868 11.888 -0.875 -0.699 -0.278 -0.875 -0.699 0.194 0.243 0.611 0.665 0.343 + 411.40 12.056 12.082 12.110 -0.794 -0.826 -0.057 -0.794 -0.826 0.047 0.045 0.656 0.658 0.330 + 411.45 12.065 12.081 12.123 -0.618 -1.017 -0.048 -0.618 -1.017 0.049 0.030 0.629 0.710 0.316 + 411.50 11.956 11.963 12.008 -0.425 -1.040 -0.157 -0.425 -1.040 0.163 0.067 0.441 0.643 0.238 + 411.55 11.816 11.821 11.872 -0.344 -1.094 -0.297 -0.344 -1.094 0.325 0.102 0.377 0.702 0.254 + 411.60 11.663 11.673 11.735 -0.487 -1.201 -0.450 -0.487 -1.201 0.540 0.219 0.584 0.941 0.413 + 411.65 11.889 11.896 11.992 -0.412 -1.517 -0.224 -0.412 -1.517 0.339 0.092 0.625 1.260 0.359 + 411.70 11.659 11.661 11.777 -0.192 -1.647 -0.453 -0.192 -1.647 0.747 0.087 0.316 1.478 0.408 + 411.75 11.552 11.552 11.671 0.003 -1.666 -0.561 0.003 -1.666 0.935 -0.002 -0.005 1.546 0.467 + 411.80 11.467 11.469 11.517 0.205 -1.050 -0.645 0.205 -1.050 0.678 -0.132 -0.215 0.780 0.362 + 411.85 11.949 11.957 12.013 0.421 -1.162 -0.163 0.421 -1.162 0.190 -0.069 -0.489 0.776 0.264 + 411.90 11.867 11.870 11.929 0.247 -1.192 -0.246 0.247 -1.192 0.293 -0.061 -0.294 0.771 0.210 + 411.95 11.925 11.931 11.976 0.378 -1.046 -0.188 0.378 -1.046 0.197 -0.071 -0.396 0.636 0.224 + 412.00 11.590 11.600 11.626 0.471 -0.785 -0.523 0.471 -0.785 0.410 -0.246 -0.370 0.556 0.302 + 412.05 11.711 11.722 11.758 0.517 -0.923 -0.402 0.517 -0.923 0.371 -0.208 -0.477 0.640 0.320 + 412.10 11.940 11.963 11.987 0.743 -0.755 -0.173 0.743 -0.755 0.131 -0.128 -0.561 0.576 0.295 + 412.15 12.037 12.053 12.059 0.626 -0.365 -0.076 0.626 -0.365 0.028 -0.047 -0.228 0.265 0.117 + 412.20 11.938 11.975 11.982 0.937 -0.418 -0.174 0.937 -0.418 0.073 -0.163 -0.391 0.541 0.215 + 412.25 11.908 11.974 11.988 1.254 -0.584 -0.205 1.254 -0.584 0.120 -0.257 -0.733 0.978 0.393 + 412.30 11.639 11.691 11.711 1.104 -0.682 -0.474 1.104 -0.682 0.323 -0.523 -0.752 0.954 0.486 + 412.35 11.396 11.445 11.459 1.058 -0.566 -0.717 1.058 -0.566 0.406 -0.758 -0.599 0.977 0.524 + 412.40 11.445 11.522 11.537 1.336 -0.587 -0.668 1.336 -0.587 0.392 -0.893 -0.784 1.289 0.626 + 412.45 11.230 11.259 11.275 0.803 -0.596 -0.883 0.803 -0.596 0.526 -0.708 -0.478 0.889 0.502 + 412.50 11.052 11.084 11.092 0.836 -0.438 -1.061 0.836 -0.438 0.465 -0.887 -0.367 1.008 0.533 + 412.55 10.789 10.819 10.830 0.807 -0.481 -1.324 0.807 -0.481 0.636 -1.068 -0.388 1.317 0.651 + 412.60 10.618 10.649 10.656 0.811 -0.388 -1.494 0.811 -0.388 0.579 -1.212 -0.314 1.521 0.690 + 412.65 10.399 10.407 10.414 0.402 -0.382 -1.714 0.402 -0.382 0.654 -0.689 -0.153 1.622 0.481 + 412.70 10.585 10.586 10.594 0.196 -0.406 -1.528 0.196 -0.406 0.620 -0.299 -0.079 1.269 0.346 + 412.75 10.517 10.517 10.517 0.101 0.050 -1.596 0.101 0.050 -0.080 -0.161 0.005 1.280 0.090 + 412.80 10.565 10.565 10.577 -0.075 -0.507 -1.548 -0.075 -0.507 0.785 0.116 0.038 1.330 0.397 + 412.85 10.534 10.534 10.538 -0.015 -0.306 -1.579 -0.015 -0.306 0.482 0.024 0.005 1.293 0.242 + 412.90 10.193 10.199 10.200 0.357 -0.140 -1.920 0.357 -0.140 0.268 -0.686 -0.050 1.917 0.369 + 412.95 10.329 10.343 10.343 0.553 0.017 -1.784 0.553 0.017 -0.031 -0.986 0.010 1.745 0.493 + 413.00 10.472 10.476 10.477 0.321 -0.096 -1.641 0.321 -0.096 0.158 -0.527 -0.031 1.403 0.275 + 413.05 10.470 10.471 10.473 0.182 0.204 -1.643 0.182 0.204 -0.335 -0.299 0.037 1.387 0.225 + 413.10 10.686 10.693 10.693 0.387 0.051 -1.427 0.387 0.051 -0.073 -0.552 0.020 1.094 0.278 + 413.15 10.628 10.630 10.630 0.193 0.003 -1.485 0.193 0.003 -0.004 -0.287 0.001 1.121 0.143 + 413.20 10.643 10.644 10.644 0.103 0.072 -1.469 0.103 0.072 -0.106 -0.152 0.007 1.088 0.093 + 413.25 11.024 11.026 11.026 -0.197 0.010 -1.088 -0.197 0.010 -0.011 0.215 -0.002 0.612 0.107 + 413.30 11.248 11.250 11.258 -0.180 0.428 -0.865 -0.180 0.428 -0.370 0.156 -0.077 0.482 0.204 + 413.35 11.257 11.260 11.290 0.246 0.826 -0.855 0.246 0.826 -0.707 -0.211 0.203 0.738 0.383 + 413.40 10.965 10.978 10.988 0.531 0.485 -1.148 0.531 0.485 -0.557 -0.610 0.258 0.918 0.433 + 413.45 11.122 11.133 11.139 0.502 0.372 -0.991 0.502 0.372 -0.368 -0.498 0.187 0.686 0.323 + 413.50 11.029 11.040 11.044 0.487 0.288 -1.084 0.487 0.288 -0.312 -0.528 0.140 0.747 0.314 + 413.55 11.019 11.021 11.033 0.188 0.518 -1.094 0.188 0.518 -0.566 -0.206 0.098 0.750 0.305 + 413.60 11.248 11.262 11.283 0.565 0.688 -0.865 0.565 0.688 -0.595 -0.488 0.389 0.770 0.431 + 413.65 11.408 11.418 11.421 0.491 0.244 -0.705 0.491 0.244 -0.172 -0.346 0.120 0.399 0.202 + 413.70 11.472 11.497 11.505 0.762 0.414 -0.641 0.762 0.414 -0.265 -0.489 0.316 0.582 0.320 + 413.75 11.384 11.426 11.446 0.984 0.666 -0.729 0.984 0.666 -0.485 -0.717 0.655 0.972 0.543 + 413.80 11.477 11.525 11.538 1.049 0.556 -0.636 1.049 0.556 -0.354 -0.667 0.583 0.907 0.477 + 413.85 11.735 11.752 11.753 0.633 0.192 -0.378 0.633 0.192 -0.073 -0.239 0.121 0.290 0.139 + 413.90 11.539 11.565 11.565 0.779 -0.013 -0.574 0.779 -0.013 0.008 -0.447 -0.010 0.468 0.224 + 413.95 11.671 11.696 11.697 0.773 0.147 -0.442 0.773 0.147 -0.065 -0.342 0.113 0.407 0.183 + 414.00 11.456 11.470 11.471 0.576 0.089 -0.657 0.576 0.089 -0.058 -0.378 0.051 0.385 0.193 + 414.05 11.204 11.221 11.227 0.603 0.388 -0.908 0.603 0.388 -0.352 -0.547 0.234 0.669 0.346 + 414.10 10.895 10.919 10.940 0.715 0.680 -1.217 0.715 0.680 -0.828 -0.871 0.486 1.228 0.648 + 414.15 10.760 10.772 10.799 0.506 0.767 -1.353 0.506 0.767 -1.037 -0.684 0.388 1.337 0.651 + 414.20 10.845 10.864 10.884 0.650 0.659 -1.268 0.650 0.659 -0.836 -0.824 0.429 1.233 0.625 + 414.25 10.927 10.941 10.957 0.562 0.585 -1.186 0.562 0.585 -0.694 -0.666 0.329 1.032 0.508 + 414.30 11.055 11.061 11.065 0.385 0.285 -1.058 0.385 0.285 -0.301 -0.408 0.110 0.675 0.259 + 414.35 10.650 10.666 10.667 0.572 -0.128 -1.462 0.572 -0.128 0.188 -0.837 -0.074 1.241 0.430 + 414.40 10.649 10.684 10.685 0.865 -0.166 -1.464 0.865 -0.166 0.243 -1.266 -0.144 1.459 0.649 + 414.45 10.853 10.935 10.935 1.330 -0.014 -1.259 1.330 -0.014 0.017 -1.675 -0.018 1.678 0.838 + 414.50 11.091 11.223 11.223 1.715 -0.025 -1.022 1.715 -0.025 0.025 -1.753 -0.042 1.994 0.877 + 414.55 10.928 11.113 11.116 2.017 0.269 -1.185 2.017 0.269 -0.319 -2.390 0.544 2.772 1.236 + 414.60 10.794 10.960 10.971 1.901 0.492 -1.319 1.901 0.492 -0.648 -2.508 0.935 2.798 1.377 + 414.65 10.535 10.596 10.613 1.136 0.595 -1.578 1.136 0.595 -0.940 -1.793 0.677 2.068 1.067 + 414.70 10.403 10.447 10.462 0.960 0.557 -1.710 0.960 0.557 -0.952 -1.642 0.535 2.078 0.986 + 414.75 10.613 10.691 10.696 1.291 0.344 -1.500 1.291 0.344 -0.517 -1.937 0.445 2.018 1.027 + 414.80 10.697 10.780 10.788 1.335 0.401 -1.415 1.335 0.401 -0.567 -1.889 0.535 1.973 1.022 + 414.85 10.524 10.639 10.661 1.559 0.688 -1.588 1.559 0.688 -1.093 -2.476 1.073 2.713 1.456 + 414.90 10.342 10.473 10.496 1.656 0.685 -1.771 1.656 0.685 -1.213 -2.932 1.134 3.174 1.685 + 414.95 10.600 10.700 10.714 1.462 0.549 -1.513 1.462 0.549 -0.831 -2.211 0.803 2.363 1.247 + 415.00 10.557 10.636 10.666 1.293 0.798 -1.556 1.293 0.798 -1.241 -2.012 1.031 2.364 1.289 + 415.05 10.726 10.780 10.841 1.087 1.139 -1.387 1.087 1.139 -1.581 -1.508 1.239 2.202 1.256 + 415.10 10.945 11.065 11.122 1.626 1.119 -1.168 1.626 1.119 -1.307 -1.898 1.819 2.629 1.468 + 415.15 10.737 10.884 10.922 1.787 0.902 -1.376 1.787 0.902 -1.241 -2.460 1.612 2.951 1.596 + 415.20 10.795 10.992 11.035 2.071 0.968 -1.318 2.071 0.968 -1.275 -2.729 2.005 3.482 1.809 + 415.25 10.916 11.127 11.168 2.161 0.955 -1.197 2.161 0.955 -1.143 -2.587 2.064 3.507 1.750 + 415.30 10.876 11.003 11.006 1.664 0.262 -1.237 1.664 0.262 -0.323 -2.058 0.435 2.184 1.064 + 415.35 10.649 10.749 10.755 1.465 0.351 -1.464 1.465 0.351 -0.514 -2.145 0.515 2.206 1.132 + 415.40 10.467 10.562 10.572 1.417 0.452 -1.646 1.417 0.452 -0.744 -2.332 0.641 2.461 1.265 + 415.45 10.516 10.613 10.622 1.430 0.429 -1.597 1.430 0.429 -0.685 -2.283 0.614 2.389 1.231 + 415.50 10.580 10.671 10.677 1.392 0.356 -1.533 1.392 0.356 -0.545 -2.134 0.495 2.208 1.129 + 415.55 10.516 10.602 10.606 1.343 0.287 -1.597 1.343 0.287 -0.458 -2.145 0.386 2.218 1.114 + 415.60 10.637 10.718 10.723 1.317 0.332 -1.476 1.317 0.332 -0.491 -1.943 0.438 2.011 1.026 + 415.65 10.797 10.881 10.882 1.355 0.148 -1.316 1.355 0.148 -0.195 -1.784 0.201 1.796 0.903 + 415.70 10.740 10.841 10.841 1.479 0.034 -1.373 1.479 0.034 -0.047 -2.030 0.050 2.037 1.016 + 415.75 10.575 10.672 10.672 1.432 0.066 -1.537 1.432 0.066 -0.101 -2.202 0.094 2.209 1.103 + 415.80 10.555 10.641 10.641 1.348 0.109 -1.558 1.348 0.109 -0.170 -2.100 0.147 2.128 1.056 + 415.85 10.730 10.824 10.825 1.418 0.194 -1.383 1.418 0.194 -0.268 -1.961 0.275 1.980 0.999 + 415.90 10.548 10.660 10.664 1.536 0.283 -1.564 1.536 0.283 -0.442 -2.403 0.434 2.443 1.241 + 415.95 10.472 10.541 10.560 1.205 0.634 -1.641 1.205 0.634 -1.040 -1.977 0.764 2.273 1.181 + 416.00 10.676 10.754 10.780 1.296 0.751 -1.437 1.296 0.751 -1.079 -1.862 0.973 2.154 1.181 + 416.05 10.801 10.922 10.957 1.619 0.872 -1.311 1.619 0.872 -1.144 -2.124 1.412 2.551 1.398 + 416.10 10.839 10.944 10.963 1.517 0.640 -1.274 1.517 0.640 -0.815 -1.933 0.970 2.167 1.156 + 416.15 10.681 10.782 10.808 1.472 0.747 -1.432 1.472 0.747 -1.070 -2.107 1.100 2.387 1.303 + 416.20 10.559 10.621 10.689 1.153 1.199 -1.554 1.153 1.199 -1.863 -1.792 1.382 2.591 1.466 + 416.25 10.409 10.443 10.486 0.836 0.945 -1.703 0.836 0.945 -1.610 -1.424 0.790 2.247 1.145 + 416.30 10.495 10.516 10.543 0.662 0.755 -1.617 0.662 0.755 -1.222 -1.071 0.500 1.813 0.850 + 416.35 10.452 10.476 10.495 0.714 0.631 -1.661 0.714 0.631 -1.049 -1.186 0.451 1.834 0.823 + 416.40 10.325 10.351 10.370 0.737 0.619 -1.788 0.737 0.619 -1.106 -1.317 0.456 2.061 0.890 + 416.45 10.228 10.263 10.270 0.842 0.392 -1.885 0.842 0.392 -0.738 -1.587 0.330 2.207 0.890 + 416.50 10.307 10.347 10.353 0.908 0.363 -1.806 0.908 0.363 -0.656 -1.640 0.330 2.109 0.898 + 416.55 10.085 10.098 10.099 0.518 0.120 -2.028 0.518 0.120 -0.244 -1.050 0.062 2.197 0.540 + 416.60 9.839 9.883 9.885 0.925 0.206 -2.273 0.925 0.206 -0.469 -2.104 0.191 3.034 1.082 + 416.65 10.096 10.147 10.147 1.015 0.040 -2.017 1.015 0.040 -0.080 -2.047 0.040 2.550 1.025 + 416.70 9.907 9.982 9.983 1.227 0.042 -2.206 1.227 0.042 -0.092 -2.706 0.051 3.187 1.354 + 416.75 9.431 9.495 9.505 1.101 0.441 -2.682 1.101 0.441 -1.183 -2.953 0.486 4.300 1.609 + 416.80 9.361 9.388 9.417 0.704 0.740 -2.752 0.704 0.740 -2.036 -1.938 0.521 4.308 1.430 + 416.85 9.293 9.336 9.352 0.893 0.549 -2.820 0.893 0.549 -1.548 -2.518 0.490 4.525 1.498 + 416.90 9.227 9.278 9.308 0.970 0.748 -2.886 0.970 0.748 -2.158 -2.800 0.725 4.914 1.804 + 416.95 9.774 9.841 9.872 1.149 0.776 -2.339 1.149 0.776 -1.814 -2.687 0.891 3.696 1.681 + 417.00 9.727 9.808 9.825 1.258 0.579 -2.386 1.258 0.579 -1.383 -3.002 0.729 3.806 1.692 + 417.05 9.845 9.910 9.920 1.130 0.459 -2.268 1.130 0.459 -1.042 -2.563 0.519 3.316 1.408 + 417.10 9.596 9.658 9.682 1.097 0.670 -2.517 1.097 0.670 -1.685 -2.760 0.734 3.993 1.658 + 417.15 9.584 9.615 9.646 0.765 0.782 -2.529 0.765 0.782 -1.978 -1.934 0.598 3.795 1.415 + 417.20 9.483 9.535 9.578 0.992 0.911 -2.630 0.992 0.911 -2.396 -2.608 0.904 4.365 1.828 + 417.25 9.715 9.763 9.785 0.964 0.662 -2.398 0.964 0.662 -1.588 -2.313 0.639 3.559 1.438 + 417.30 9.824 9.859 9.902 0.824 0.920 -2.289 0.824 0.920 -2.107 -1.887 0.759 3.382 1.464 + 417.35 9.416 9.460 9.477 0.912 0.576 -2.697 0.912 0.576 -1.553 -2.460 0.525 4.219 1.478 + 417.40 8.938 8.992 9.024 0.986 0.757 -3.175 0.986 0.757 -2.402 -3.131 0.746 5.812 2.008 + 417.45 8.992 9.034 9.080 0.877 0.908 -3.121 0.877 0.908 -2.833 -2.737 0.796 5.667 2.009 + 417.50 9.218 9.288 9.340 1.145 0.978 -2.895 1.145 0.978 -2.832 -3.314 1.120 5.325 2.250 + 417.55 9.204 9.336 9.366 1.566 0.756 -2.909 1.566 0.756 -2.198 -4.554 1.183 5.743 2.597 + 417.60 9.298 9.436 9.465 1.611 0.740 -2.815 1.611 0.740 -2.083 -4.534 1.192 5.533 2.565 + 417.65 8.831 8.981 9.013 1.636 0.759 -3.282 1.636 0.759 -2.490 -5.369 1.242 7.011 3.024 + 417.70 9.075 9.210 9.228 1.572 0.570 -3.038 1.572 0.570 -1.731 -4.775 0.896 6.011 2.579 + 417.75 9.160 9.268 9.299 1.409 0.762 -2.952 1.409 0.762 -2.249 -4.161 1.074 5.642 2.425 + 417.80 9.210 9.308 9.320 1.347 0.478 -2.903 1.347 0.478 -1.387 -3.910 0.644 5.234 2.099 + 417.85 9.298 9.384 9.402 1.269 0.572 -2.815 1.269 0.572 -1.610 -3.573 0.726 4.930 1.993 + 417.90 9.099 9.249 9.295 1.660 0.922 -3.014 1.660 0.922 -2.779 -5.002 1.530 6.344 2.961 + 417.95 9.036 9.170 9.239 1.563 1.124 -3.077 1.563 1.124 -3.459 -4.809 1.757 6.587 3.089 + 418.00 8.936 9.051 9.111 1.442 1.038 -3.177 1.442 1.038 -3.298 -4.581 1.497 6.625 2.920 + 418.05 8.979 9.086 9.126 1.393 0.856 -3.134 1.393 0.856 -2.682 -4.366 1.192 6.248 2.630 + 418.10 8.809 8.933 9.007 1.483 1.152 -3.304 1.483 1.152 -3.807 -4.899 1.708 7.222 3.218 + 418.15 8.855 8.926 9.046 1.127 1.465 -3.258 1.127 1.465 -4.775 -3.673 1.652 7.017 3.123 + 418.20 9.104 9.180 9.269 1.178 1.282 -3.009 1.178 1.282 -3.858 -3.544 1.510 6.042 2.726 + 418.25 8.738 8.813 8.930 1.150 1.439 -3.375 1.150 1.439 -4.858 -3.882 1.656 7.393 3.218 + 418.30 8.670 8.811 8.945 1.570 1.544 -3.443 1.570 1.544 -5.314 -5.404 2.423 8.350 3.979 + 418.35 8.997 9.177 9.301 1.805 1.517 -3.116 1.805 1.517 -4.726 -5.625 2.738 7.634 3.920 + 418.40 9.239 9.427 9.565 1.875 1.615 -2.874 1.875 1.615 -4.642 -5.388 3.028 7.191 3.865 + 418.45 9.367 9.586 9.754 2.033 1.808 -2.745 2.033 1.808 -4.962 -5.583 3.676 7.470 4.162 + 418.50 9.364 9.532 9.739 1.783 1.999 -2.749 1.783 1.999 -5.494 -4.902 3.564 7.366 4.090 + 418.55 9.568 9.740 9.940 1.821 1.983 -2.545 1.821 1.983 -5.045 -4.633 3.609 6.860 3.871 + 418.60 9.726 9.855 10.027 1.592 1.848 -2.387 1.592 1.848 -4.411 -3.799 2.942 5.823 3.261 + 418.65 9.603 9.769 9.882 1.789 1.494 -2.510 1.789 1.494 -3.750 -4.491 2.674 5.867 3.217 + 418.70 9.560 9.762 9.889 1.975 1.581 -2.553 1.975 1.581 -4.037 -5.042 3.123 6.459 3.587 + 418.75 9.523 9.714 9.895 1.915 1.885 -2.589 1.915 1.885 -4.881 -4.960 3.611 6.964 3.920 + 418.80 9.222 9.387 9.575 1.748 1.891 -2.891 1.748 1.891 -5.466 -5.054 3.306 7.494 4.073 + 418.85 9.181 9.322 9.440 1.611 1.493 -2.931 1.611 1.493 -4.377 -4.724 2.406 6.710 3.437 + 418.90 9.419 9.567 9.652 1.678 1.279 -2.694 1.678 1.279 -3.445 -4.520 2.145 5.853 3.037 + 418.95 9.685 9.791 9.910 1.435 1.533 -2.428 1.435 1.533 -3.722 -3.485 2.200 5.153 2.777 + 419.00 10.032 10.131 10.258 1.416 1.608 -2.081 1.416 1.608 -3.347 -2.948 2.278 4.462 2.504 + 419.05 10.272 10.332 10.414 1.109 1.307 -1.841 1.109 1.307 -2.406 -2.042 1.450 3.163 1.736 + 419.10 10.104 10.190 10.301 1.318 1.513 -2.009 1.318 1.513 -3.039 -2.647 1.994 4.031 2.248 + 419.15 10.354 10.422 10.537 1.190 1.555 -1.759 1.190 1.555 -2.736 -2.093 1.850 3.464 1.955 + 419.20 9.951 10.097 10.216 1.707 1.560 -2.162 1.707 1.560 -3.373 -3.690 2.664 5.011 2.832 + 419.25 10.244 10.461 10.552 2.120 1.381 -1.869 2.120 1.381 -2.581 -3.963 2.928 4.948 2.781 + 419.30 10.020 10.228 10.317 2.048 1.355 -2.092 2.048 1.355 -2.836 -4.286 2.777 5.206 2.921 + 419.35 10.056 10.232 10.316 1.891 1.316 -2.057 1.891 1.316 -2.708 -3.890 2.489 4.770 2.677 + 419.40 10.129 10.263 10.315 1.655 1.027 -1.984 1.655 1.027 -2.037 -3.284 1.700 3.865 2.111 + 419.45 10.117 10.286 10.300 1.856 0.538 -1.995 1.856 0.538 -1.073 -3.704 0.998 3.858 1.992 + 419.50 10.092 10.262 10.264 1.860 0.239 -2.021 1.860 0.239 -0.484 -3.759 0.445 3.800 1.908 + 419.55 9.703 9.880 9.892 1.861 0.488 -2.409 1.861 0.488 -1.176 -4.484 0.909 4.754 2.362 + 419.60 9.814 9.963 9.982 1.719 0.611 -2.299 1.719 0.611 -1.405 -3.952 1.051 4.307 2.162 + 419.65 9.707 9.841 9.869 1.617 0.747 -2.406 1.617 0.747 -1.798 -3.889 1.208 4.480 2.226 + 419.70 9.909 10.020 10.041 1.486 0.646 -2.204 1.486 0.646 -1.424 -3.275 0.960 3.741 1.849 + 419.75 9.948 10.037 10.039 1.339 0.184 -2.165 1.339 0.184 -0.398 -2.899 0.246 3.257 1.468 + 419.80 9.591 9.677 9.682 1.285 0.305 -2.521 1.285 0.305 -0.769 -3.240 0.392 4.051 1.676 + 419.85 9.325 9.461 9.467 1.599 0.334 -2.788 1.599 0.334 -0.931 -4.457 0.534 5.219 2.292 + 419.90 9.552 9.676 9.683 1.542 0.368 -2.561 1.542 0.368 -0.941 -3.948 0.567 4.535 2.049 + 419.95 9.705 9.872 9.875 1.807 0.259 -2.408 1.807 0.259 -0.624 -4.352 0.468 4.565 2.211 + 420.00 9.927 10.130 10.139 2.019 0.426 -2.186 2.019 0.426 -0.930 -4.413 0.859 4.518 2.296 + 420.05 9.927 10.113 10.141 1.928 0.758 -2.185 1.928 0.758 -1.657 -4.213 1.462 4.534 2.379 + 420.10 10.268 10.414 10.445 1.736 0.804 -1.844 1.736 0.804 -1.483 -3.201 1.395 3.530 1.897 + 420.15 10.178 10.283 10.300 1.465 0.594 -1.935 1.465 0.594 -1.149 -2.834 0.870 3.121 1.590 + 420.20 9.892 10.016 10.045 1.571 0.762 -2.221 1.571 0.762 -1.693 -3.488 1.197 3.990 2.029 + 420.25 10.189 10.314 10.329 1.596 0.557 -1.923 1.596 0.557 -1.072 -3.070 0.890 3.279 1.686 + 420.30 10.288 10.386 10.396 1.424 0.448 -1.824 1.424 0.448 -0.818 -2.597 0.638 2.778 1.398 + 420.35 10.456 10.510 10.548 1.062 0.890 -1.656 1.062 0.890 -1.474 -1.759 0.945 2.332 1.241 + 420.40 10.300 10.326 10.380 0.719 1.058 -1.812 0.719 1.058 -1.918 -1.303 0.761 2.461 1.220 + 420.45 9.851 9.880 9.933 0.748 1.030 -2.262 0.748 1.030 -2.330 -1.691 0.771 3.368 1.490 + 420.50 9.945 9.952 10.009 0.383 1.068 -2.168 0.383 1.068 -2.316 -0.830 0.409 2.994 1.247 + 420.55 9.917 9.930 9.986 0.506 1.061 -2.196 0.506 1.061 -2.331 -1.112 0.537 3.102 1.319 + 420.60 10.146 10.165 10.207 0.618 0.923 -1.967 0.618 0.923 -1.814 -1.216 0.571 2.551 1.129 + 420.65 9.847 9.859 9.907 0.488 0.974 -2.265 0.488 0.974 -2.207 -1.105 0.475 3.159 1.257 + 420.70 9.844 9.858 9.877 0.520 0.619 -2.269 0.520 0.619 -1.404 -1.181 0.322 2.900 0.931 + 420.75 10.184 10.190 10.210 0.341 0.642 -1.929 0.341 0.642 -1.238 -0.657 0.219 2.124 0.709 + 420.80 10.187 10.191 10.212 0.289 0.658 -1.926 0.289 0.658 -1.267 -0.557 0.190 2.113 0.699 + 420.85 10.207 10.213 10.247 0.332 0.837 -1.905 0.332 0.837 -1.594 -0.632 0.278 2.220 0.869 + 420.90 10.137 10.138 10.152 0.149 0.524 -1.976 0.149 0.524 -1.036 -0.294 0.078 2.100 0.540 + 420.95 10.207 10.208 10.227 0.079 0.635 -1.905 0.079 0.635 -1.210 -0.150 0.050 2.020 0.610 + 421.00 10.218 10.219 10.234 0.151 0.559 -1.895 0.151 0.559 -1.059 -0.286 0.084 1.963 0.550 + 421.05 10.288 10.289 10.300 0.117 0.489 -1.825 0.117 0.489 -0.892 -0.214 0.057 1.791 0.459 + 421.10 10.310 10.310 10.310 -0.060 0.040 -1.803 -0.060 0.040 -0.072 0.108 -0.002 1.627 0.065 + 421.15 10.242 10.246 10.248 -0.278 -0.171 -1.870 -0.278 -0.171 0.320 0.520 0.048 1.803 0.306 + 421.20 10.271 10.271 10.272 -0.080 -0.022 -1.842 -0.080 -0.022 0.041 0.147 0.002 1.699 0.076 + 421.25 10.375 10.378 10.382 0.238 0.293 -1.738 0.238 0.293 -0.510 -0.413 0.070 1.581 0.330 + 421.30 10.218 10.236 10.237 0.602 0.145 -1.894 0.602 0.145 -0.274 -1.140 0.087 1.986 0.588 + 421.35 10.386 10.421 10.429 0.850 -0.401 -1.726 0.850 -0.401 0.692 -1.467 -0.341 1.932 0.829 + 421.40 10.542 10.590 10.625 1.005 -0.859 -1.571 1.005 -0.859 1.348 -1.578 -0.862 2.107 1.124 + 421.45 10.315 10.377 10.411 1.133 -0.831 -1.797 1.133 -0.831 1.494 -2.037 -0.942 2.603 1.348 + 421.50 10.357 10.438 10.458 1.295 -0.656 -1.756 1.295 -0.656 1.152 -2.273 -0.849 2.594 1.343 + 421.55 10.399 10.511 10.518 1.528 -0.393 -1.713 1.528 -0.393 0.674 -2.617 -0.601 2.712 1.384 + 421.60 10.467 10.556 10.567 1.370 -0.477 -1.646 1.370 -0.477 0.785 -2.254 -0.653 2.406 1.237 + 421.65 10.578 10.606 10.617 0.770 -0.482 -1.535 0.770 -0.482 0.741 -1.182 -0.371 1.591 0.722 + 421.70 10.594 10.600 10.605 0.354 -0.309 -1.519 0.354 -0.309 0.469 -0.538 -0.109 1.264 0.361 + 421.75 10.415 10.415 10.428 0.049 -0.530 -1.698 0.049 -0.530 0.900 -0.084 -0.026 1.584 0.452 + 421.80 10.688 10.689 10.702 -0.150 -0.528 -1.425 -0.150 -0.528 0.753 0.213 0.079 1.166 0.393 + 421.85 10.841 10.847 10.883 -0.358 -0.889 -1.272 -0.358 -0.889 1.130 0.455 0.318 1.268 0.630 + 421.90 10.500 10.500 10.509 -0.041 -0.421 -1.613 -0.041 -0.421 0.679 0.066 0.017 1.390 0.341 + 421.95 10.417 10.420 10.426 -0.273 -0.336 -1.696 -0.273 -0.336 0.571 0.463 0.092 1.532 0.370 + 422.00 10.773 10.774 10.779 -0.174 -0.332 -1.340 -0.174 -0.332 0.445 0.233 0.058 0.968 0.253 + 422.05 10.612 10.612 10.612 -0.033 -0.067 -1.501 -0.033 -0.067 0.100 0.050 0.002 1.129 0.056 + 422.10 10.716 10.716 10.719 -0.090 -0.216 -1.397 -0.090 -0.216 0.301 0.125 0.019 1.003 0.163 + 422.15 10.782 10.792 10.792 0.460 -0.090 -1.331 0.460 -0.090 0.120 -0.612 -0.041 0.995 0.312 + 422.20 10.822 10.833 10.835 0.481 0.201 -1.291 0.481 0.201 -0.260 -0.621 0.097 0.969 0.340 + 422.25 10.649 10.662 10.676 0.520 0.552 -1.464 0.520 0.552 -0.808 -0.761 0.287 1.359 0.573 + 422.30 10.554 10.571 10.577 0.603 0.363 -1.559 0.603 0.363 -0.566 -0.940 0.219 1.463 0.559 + 422.35 10.137 10.158 10.172 0.647 0.545 -1.976 0.647 0.545 -1.076 -1.279 0.352 2.310 0.854 + 422.40 9.728 9.752 9.759 0.682 0.382 -2.385 0.682 0.382 -0.910 -1.627 0.260 3.150 0.941 + 422.45 10.063 10.109 10.117 0.961 0.400 -2.049 0.961 0.400 -0.819 -1.970 0.384 2.642 1.084 + 422.50 9.860 9.953 9.959 1.355 0.355 -2.252 1.355 0.355 -0.799 -3.052 0.480 3.517 1.596 + 422.55 9.860 9.897 9.906 0.854 0.415 -2.253 0.854 0.415 -0.935 -1.924 0.355 2.988 1.084 + 422.60 9.623 9.675 9.676 1.009 0.085 -2.490 1.009 0.085 -0.212 -2.512 0.086 3.613 1.261 + 422.65 9.619 9.669 9.670 0.977 0.129 -2.494 0.977 0.129 -0.323 -2.436 0.126 3.595 1.230 + 422.70 9.615 9.729 9.736 1.481 -0.364 -2.497 1.481 -0.364 0.910 -3.699 -0.540 4.282 1.924 + 422.75 9.316 9.449 9.455 1.584 -0.330 -2.797 1.584 -0.330 0.923 -4.429 -0.522 5.220 2.277 + 422.80 9.103 9.211 9.211 1.408 -0.020 -3.010 1.408 -0.020 0.059 -4.239 -0.028 5.522 2.120 + 422.85 9.089 9.163 9.163 1.156 -0.101 -3.023 1.156 -0.101 0.305 -3.497 -0.117 5.244 1.756 + 422.90 9.390 9.482 9.482 1.317 -0.002 -2.723 1.317 -0.002 0.006 -3.587 -0.003 4.575 1.794 + 422.95 9.563 9.648 9.650 1.278 -0.187 -2.550 1.278 -0.187 0.477 -3.258 -0.239 4.085 1.651 + 423.00 10.145 10.209 10.211 1.142 -0.203 -1.968 1.142 -0.203 0.400 -2.246 -0.232 2.608 1.147 + 423.05 10.289 10.347 10.348 1.097 -0.129 -1.824 1.097 -0.129 0.236 -2.000 -0.142 2.273 1.010 + 423.10 10.452 10.558 10.565 1.492 -0.394 -1.661 1.492 -0.394 0.654 -2.478 -0.587 2.570 1.315 + 423.15 10.173 10.287 10.287 1.525 0.105 -1.940 1.525 0.105 -0.204 -2.959 0.160 3.050 1.485 + 423.20 9.891 9.956 9.963 1.139 0.359 -2.222 1.139 0.359 -0.798 -2.530 0.409 3.181 1.342 + 423.25 9.746 9.790 9.822 0.924 0.793 -2.367 0.924 0.793 -1.876 -2.188 0.733 3.543 1.487 + 423.30 9.843 9.878 9.948 0.830 1.176 -2.270 0.830 1.176 -2.669 -1.885 0.977 3.612 1.705 + 423.35 9.465 9.536 9.652 1.160 1.491 -2.648 1.160 1.491 -3.949 -3.071 1.730 5.290 2.647 + 423.40 9.649 9.741 9.883 1.335 1.669 -2.464 1.335 1.669 -4.111 -3.288 2.227 5.317 2.858 + 423.45 10.075 10.149 10.261 1.227 1.512 -2.038 1.227 1.512 -3.081 -2.501 1.855 3.973 2.190 + 423.50 9.947 10.008 10.116 1.106 1.470 -2.166 1.106 1.470 -3.183 -2.395 1.626 4.037 2.152 + 423.55 9.851 9.909 10.019 1.075 1.479 -2.262 1.075 1.479 -3.346 -2.432 1.590 4.231 2.216 + 423.60 10.030 10.061 10.120 0.790 1.086 -2.082 0.790 1.086 -2.262 -1.645 0.858 3.070 1.463 + 423.65 10.112 10.155 10.210 0.942 1.053 -2.001 0.942 1.053 -2.108 -1.885 0.992 3.001 1.499 + 423.70 10.037 10.092 10.128 1.060 0.851 -2.076 1.060 0.851 -1.767 -2.201 0.902 3.080 1.482 + 423.75 10.065 10.159 10.203 1.379 0.945 -2.048 1.379 0.945 -1.936 -2.825 1.304 3.495 1.832 + 423.80 9.757 9.814 9.847 1.064 0.802 -2.356 1.064 0.802 -1.890 -2.507 0.853 3.663 1.627 + 423.85 10.024 10.123 10.147 1.410 0.701 -2.089 1.410 0.701 -1.463 -2.945 0.988 3.420 1.717 + 423.90 10.248 10.323 10.343 1.239 0.646 -1.865 1.239 0.646 -1.205 -2.310 0.800 2.715 1.363 + 423.95 10.419 10.494 10.501 1.255 0.378 -1.694 1.255 0.378 -0.640 -2.126 0.475 2.294 1.135 + 424.00 10.020 10.061 10.089 0.904 0.751 -2.093 0.904 0.751 -1.571 -1.891 0.679 2.880 1.275 + 424.05 10.084 10.122 10.140 0.876 0.616 -2.029 0.876 0.616 -1.249 -1.778 0.539 2.632 1.119 + 424.10 10.141 10.176 10.183 0.844 0.368 -1.972 0.844 0.368 -0.726 -1.665 0.311 2.368 0.921 + 424.15 10.175 10.218 10.233 0.931 0.565 -1.937 0.931 0.565 -1.094 -1.805 0.526 2.470 1.087 + 424.20 10.388 10.409 10.420 0.658 0.483 -1.725 0.658 0.483 -0.833 -1.135 0.318 1.821 0.722 + 424.25 10.415 10.448 10.463 0.829 0.567 -1.698 0.829 0.567 -0.963 -1.408 0.470 1.946 0.885 + 424.30 10.597 10.615 10.633 0.625 0.618 -1.516 0.625 0.618 -0.937 -0.948 0.386 1.536 0.694 + 424.35 10.562 10.566 10.575 0.271 0.449 -1.551 0.271 0.449 -0.697 -0.420 0.122 1.340 0.411 + 424.40 10.338 10.339 10.373 0.194 0.832 -1.775 0.194 0.832 -1.477 -0.345 0.162 1.941 0.763 + 424.45 10.919 10.920 10.938 0.180 0.627 -1.194 0.180 0.627 -0.748 -0.215 0.113 0.925 0.393 + 424.50 10.621 10.621 10.640 -0.055 0.631 -1.492 -0.055 0.631 -0.942 0.082 -0.035 1.314 0.473 + 424.55 10.503 10.505 10.534 -0.163 0.780 -1.609 -0.163 0.780 -1.256 0.262 -0.127 1.613 0.645 + 424.60 10.270 10.275 10.289 0.308 0.540 -1.842 0.308 0.540 -0.995 -0.567 0.166 1.890 0.579 + 424.65 10.159 10.160 10.164 0.143 0.282 -1.954 0.143 0.282 -0.551 -0.280 0.040 1.959 0.310 + 424.70 10.169 10.171 10.176 0.189 0.329 -1.944 0.189 0.329 -0.639 -0.368 0.062 1.961 0.370 + 424.75 10.299 10.306 10.318 0.370 0.506 -1.813 0.370 0.506 -0.917 -0.670 0.187 1.840 0.575 + 424.80 10.562 10.568 10.578 0.333 0.467 -1.551 0.333 0.467 -0.725 -0.516 0.156 1.367 0.452 + 424.85 10.404 10.405 10.437 0.180 0.815 -1.709 0.180 0.815 -1.393 -0.307 0.146 1.809 0.717 + 424.90 10.388 10.388 10.435 -0.054 0.993 -1.725 -0.054 0.993 -1.713 0.093 -0.054 1.983 0.858 + 424.95 10.585 10.586 10.647 -0.115 1.141 -1.527 -0.115 1.141 -1.744 0.176 -0.131 1.825 0.879 + 425.00 10.553 10.554 10.582 -0.125 0.775 -1.560 -0.125 0.775 -1.209 0.194 -0.097 1.524 0.614 + 425.05 10.596 10.600 10.634 -0.284 0.849 -1.516 -0.284 0.849 -1.287 0.431 -0.241 1.550 0.689 + 425.10 10.774 10.779 10.790 -0.332 0.483 -1.339 -0.332 0.483 -0.647 0.444 -0.160 1.068 0.400 + 425.15 10.809 10.810 10.832 0.184 0.687 -1.304 0.184 0.687 -0.896 -0.240 0.127 1.103 0.468 + 425.20 10.871 10.873 10.905 0.246 0.829 -1.242 0.246 0.829 -1.029 -0.305 0.204 1.145 0.546 + 425.25 11.327 11.330 11.375 0.263 1.009 -0.786 0.263 1.009 -0.793 -0.207 0.266 0.853 0.431 + 425.30 11.238 11.239 11.294 0.107 1.115 -0.875 0.107 1.115 -0.975 -0.094 0.119 1.010 0.493 + 425.35 11.105 11.105 11.141 -0.090 0.898 -1.008 -0.090 0.898 -0.905 0.091 -0.081 0.915 0.457 + 425.40 11.208 11.208 11.267 0.041 1.147 -0.905 0.041 1.147 -1.038 -0.037 0.047 1.068 0.520 + 425.45 11.397 11.400 11.439 -0.282 0.947 -0.716 -0.282 0.947 -0.678 0.202 -0.267 0.744 0.378 + 425.50 11.257 11.262 11.291 -0.329 0.813 -0.856 -0.329 0.813 -0.696 0.282 -0.268 0.751 0.398 + 425.55 10.978 10.983 11.019 -0.331 0.885 -1.135 -0.331 0.885 -1.005 0.376 -0.293 1.091 0.556 + 425.60 11.023 11.041 11.093 -0.641 1.067 -1.090 -0.641 1.067 -1.162 0.698 -0.683 1.368 0.759 + 425.65 10.920 10.954 11.004 -0.856 1.052 -1.192 -0.856 1.052 -1.254 1.021 -0.900 1.630 0.925 + 425.70 11.105 11.113 11.157 -0.438 0.986 -1.008 -0.438 0.986 -0.994 0.442 -0.432 1.091 0.585 + 425.75 11.332 11.353 11.382 -0.693 0.810 -0.781 -0.693 0.810 -0.633 0.541 -0.561 0.873 0.502 + 425.80 11.647 11.662 11.672 -0.598 0.476 -0.466 -0.598 0.476 -0.222 0.279 -0.285 0.401 0.228 + 425.85 11.907 11.922 11.965 -0.598 1.017 -0.206 -0.598 1.017 -0.210 0.123 -0.608 0.717 0.328 + 425.90 11.689 11.705 11.747 -0.625 0.991 -0.424 -0.625 0.991 -0.420 0.265 -0.620 0.777 0.397 + 425.95 11.651 11.684 11.694 -0.879 0.489 -0.462 -0.879 0.489 -0.226 0.406 -0.429 0.612 0.316 + 426.00 11.573 11.606 11.620 -0.876 0.561 -0.539 -0.876 0.561 -0.303 0.472 -0.491 0.686 0.373 + 426.05 11.314 11.331 11.331 -0.624 -0.043 -0.799 -0.624 -0.043 0.034 0.498 0.027 0.514 0.250 + 426.10 11.026 11.033 11.033 -0.378 0.001 -1.086 -0.378 0.001 -0.001 0.410 -0.000 0.661 0.205 + 426.15 11.153 11.154 11.156 -0.126 -0.205 -0.959 -0.126 -0.205 0.197 0.121 0.026 0.489 0.116 + 426.20 11.222 11.226 11.226 -0.273 0.045 -0.890 -0.273 0.045 -0.040 0.243 -0.012 0.435 0.123 + 426.25 11.024 11.033 11.033 -0.438 0.064 -1.089 -0.438 0.064 -0.070 0.477 -0.028 0.691 0.241 + 426.30 11.074 11.081 11.082 -0.396 0.157 -1.039 -0.396 0.157 -0.163 0.411 -0.062 0.630 0.223 + 426.35 11.298 11.304 11.305 -0.378 0.135 -0.815 -0.378 0.135 -0.110 0.308 -0.051 0.412 0.165 + 426.40 11.288 11.306 11.307 -0.653 -0.110 -0.825 -0.653 -0.110 0.091 0.539 0.072 0.560 0.275 + 426.45 11.290 11.319 11.319 -0.812 -0.003 -0.823 -0.812 -0.003 0.003 0.668 0.003 0.668 0.334 + 426.50 11.671 11.697 11.701 -0.777 -0.312 -0.442 -0.777 -0.312 0.138 0.343 0.242 0.448 0.221 + 426.55 11.742 11.749 11.749 -0.411 -0.023 -0.371 -0.411 -0.023 0.009 0.152 0.010 0.153 0.076 + 426.60 11.793 11.817 11.818 -0.756 -0.086 -0.320 -0.756 -0.086 0.028 0.242 0.065 0.341 0.126 + 426.65 11.572 11.584 11.584 -0.519 -0.013 -0.541 -0.519 -0.013 0.007 0.281 0.007 0.281 0.140 + 426.70 11.732 11.740 11.740 -0.425 0.020 -0.380 -0.425 0.020 -0.008 0.162 -0.009 0.163 0.081 + 426.75 11.719 11.729 11.731 -0.485 0.222 -0.394 -0.485 0.222 -0.088 0.191 -0.108 0.220 0.118 + 426.80 11.694 11.694 11.704 -0.103 0.495 -0.419 -0.103 0.495 -0.208 0.043 -0.051 0.216 0.109 + 426.85 11.612 11.622 11.622 -0.469 0.124 -0.501 -0.469 0.124 -0.062 0.235 -0.058 0.243 0.125 + 426.90 11.716 11.724 11.724 -0.447 0.015 -0.397 -0.447 0.015 -0.006 0.177 -0.007 0.179 0.089 + 426.95 11.794 11.804 11.807 -0.486 0.231 -0.318 -0.486 0.231 -0.074 0.155 -0.112 0.196 0.102 + 427.00 11.513 11.530 11.530 -0.630 -0.058 -0.600 -0.630 -0.058 0.035 0.378 0.036 0.380 0.191 + 427.05 11.230 11.275 11.275 -1.004 0.101 -0.883 -1.004 0.101 -0.090 0.886 -0.102 0.899 0.448 + 427.10 11.043 11.097 11.098 -1.100 0.167 -1.070 -1.100 0.167 -0.179 1.177 -0.184 1.192 0.602 + 427.15 10.853 10.906 10.906 -1.074 -0.092 -1.260 -1.074 -0.092 0.116 1.353 0.099 1.375 0.681 + 427.20 11.165 11.209 11.209 -0.992 0.019 -0.948 -0.992 0.019 -0.018 0.940 -0.019 0.941 0.470 + 427.25 11.259 11.293 11.294 -0.881 0.103 -0.854 -0.881 0.103 -0.088 0.752 -0.091 0.758 0.381 + 427.30 11.499 11.531 11.531 -0.853 0.047 -0.614 -0.853 0.047 -0.029 0.523 -0.040 0.553 0.263 + 427.35 11.831 11.879 11.885 -1.065 0.376 -0.282 -1.065 0.376 -0.106 0.300 -0.400 0.677 0.256 + 427.40 11.758 11.767 11.775 -0.467 0.419 -0.355 -0.467 0.419 -0.149 0.166 -0.196 0.260 0.148 + 427.45 11.460 11.465 11.487 -0.338 0.715 -0.653 -0.338 0.715 -0.467 0.221 -0.242 0.526 0.285 + 427.50 11.605 11.611 11.618 -0.360 0.403 -0.507 -0.360 0.403 -0.205 0.182 -0.145 0.275 0.155 + 427.55 11.497 11.497 11.500 0.005 0.264 -0.616 0.005 0.264 -0.163 -0.003 0.001 0.225 0.081 + 427.60 11.754 11.754 11.760 -0.097 0.378 -0.359 -0.097 0.378 -0.136 0.035 -0.036 0.141 0.072 + 427.65 11.819 11.819 11.832 0.046 0.547 -0.294 0.046 0.547 -0.161 -0.014 0.025 0.194 0.082 + 427.70 11.771 11.773 11.804 0.212 0.860 -0.342 0.212 0.860 -0.294 -0.073 0.182 0.450 0.177 + 427.75 11.734 11.744 11.771 0.472 0.804 -0.379 0.472 0.804 -0.304 -0.179 0.380 0.506 0.259 + 427.80 11.451 11.452 11.457 0.194 0.318 -0.662 0.194 0.318 -0.210 -0.128 0.062 0.288 0.127 + 427.85 11.486 11.488 11.490 0.235 -0.214 -0.627 0.235 -0.214 0.134 -0.147 -0.050 0.247 0.103 + 427.90 11.871 11.872 11.876 0.184 -0.293 -0.242 0.184 -0.293 0.071 -0.045 -0.054 0.089 0.050 + 427.95 11.862 11.864 11.864 0.203 -0.106 -0.251 0.203 -0.106 0.027 -0.051 -0.021 0.058 0.031 + 428.00 11.997 11.998 12.000 0.156 -0.215 -0.115 0.156 -0.215 0.025 -0.018 -0.034 0.042 0.023 + 428.05 11.928 11.928 11.928 -0.025 -0.049 -0.185 -0.025 -0.049 0.009 0.005 0.001 0.019 0.005 + 428.10 12.262 12.262 12.262 0.054 0.018 0.149 0.054 0.018 0.003 0.008 0.001 0.013 0.004 + 428.15 12.294 12.294 12.294 0.070 -0.077 0.181 0.070 -0.077 -0.014 0.013 -0.005 0.022 0.010 + 428.20 12.567 12.571 12.572 0.311 0.137 0.454 0.311 0.137 0.062 0.141 0.043 0.161 0.080 + 428.25 12.670 12.681 12.689 0.530 0.448 0.557 0.530 0.448 0.249 0.295 0.237 0.396 0.227 + 428.30 12.529 12.529 12.536 -0.047 0.404 0.416 -0.047 0.404 0.168 -0.020 -0.019 0.169 0.085 + 428.35 12.356 12.356 12.357 0.074 0.159 0.243 0.074 0.159 0.039 0.018 0.012 0.045 0.022 + 428.40 12.369 12.369 12.370 0.109 0.088 0.256 0.109 0.088 0.023 0.028 0.010 0.043 0.019 + 428.45 12.497 12.497 12.497 -0.025 -0.091 0.384 -0.025 -0.091 -0.035 -0.010 0.002 0.078 0.018 + 428.50 12.401 12.401 12.404 -0.004 -0.239 0.289 -0.004 -0.239 -0.069 -0.001 0.001 0.070 0.034 + 428.55 12.243 12.244 12.246 -0.074 -0.218 0.131 -0.074 -0.218 -0.028 -0.010 0.016 0.035 0.017 + 428.60 12.386 12.387 12.388 -0.090 -0.180 0.274 -0.090 -0.180 -0.049 -0.025 0.016 0.058 0.029 + 428.65 12.405 12.407 12.412 -0.202 -0.365 0.292 -0.202 -0.365 -0.107 -0.059 0.074 0.130 0.071 + 428.70 12.278 12.278 12.280 -0.061 -0.256 0.165 -0.061 -0.256 -0.042 -0.010 0.016 0.048 0.023 + 428.75 12.438 12.438 12.439 0.031 -0.124 0.325 0.031 -0.124 -0.040 0.010 -0.004 0.061 0.021 + 428.80 12.794 12.797 12.798 -0.266 -0.173 0.681 -0.266 -0.173 -0.118 -0.181 0.046 0.282 0.110 + 428.85 12.611 12.611 12.611 0.001 0.082 0.498 0.001 0.082 0.041 0.000 0.000 0.127 0.021 + 428.90 12.596 12.597 12.598 0.195 0.101 0.483 0.195 0.101 0.049 0.094 0.020 0.141 0.054 + 428.95 12.442 12.450 12.452 0.454 0.209 0.329 0.454 0.209 0.069 0.149 0.095 0.179 0.095 + 429.00 12.554 12.567 12.567 0.555 0.012 0.442 0.555 0.012 0.005 0.245 0.007 0.251 0.123 + 429.05 12.742 12.747 12.748 0.358 -0.161 0.629 0.358 -0.161 -0.101 0.225 -0.058 0.275 0.127 + 429.10 12.832 12.846 12.848 0.601 0.164 0.720 0.601 0.164 0.118 0.433 0.099 0.453 0.230 + 429.15 12.789 12.801 12.801 0.554 0.071 0.676 0.554 0.071 0.048 0.374 0.039 0.384 0.190 + 429.20 12.861 12.865 12.867 0.311 0.221 0.749 0.311 0.221 0.166 0.233 0.069 0.353 0.147 + 429.25 13.156 13.156 13.157 -0.130 0.094 1.043 -0.130 0.094 0.098 -0.135 -0.012 0.557 0.084 + 429.30 12.974 12.974 12.974 0.110 0.102 0.861 0.110 0.102 0.088 0.095 0.011 0.382 0.065 + 429.35 12.478 12.478 12.479 0.013 0.199 0.365 0.013 0.199 0.073 0.005 0.003 0.086 0.036 + 429.40 12.454 12.455 12.455 -0.166 0.031 0.341 -0.166 0.031 0.011 -0.057 -0.005 0.073 0.029 + 429.45 12.653 12.656 12.657 -0.281 -0.128 0.540 -0.281 -0.128 -0.069 -0.152 0.036 0.193 0.085 + 429.50 12.460 12.466 12.467 -0.398 -0.155 0.347 -0.398 -0.155 -0.054 -0.138 0.062 0.152 0.080 + 429.55 12.661 12.663 12.664 -0.230 -0.215 0.548 -0.230 -0.215 -0.118 -0.126 0.049 0.200 0.090 + 429.60 12.864 12.864 12.873 0.025 -0.485 0.751 0.025 -0.485 -0.364 0.019 -0.012 0.400 0.182 + 429.65 12.720 12.730 12.739 0.515 -0.468 0.607 0.515 -0.468 -0.284 0.313 -0.241 0.427 0.243 + 429.70 13.097 13.104 13.108 0.423 -0.306 0.984 0.423 -0.306 -0.301 0.417 -0.129 0.621 0.265 + 429.75 13.067 13.067 13.069 0.119 0.231 0.954 0.119 0.231 0.221 0.114 0.028 0.489 0.125 + 429.80 13.011 13.011 13.011 -0.071 -0.027 0.898 -0.071 -0.027 -0.025 -0.064 0.002 0.406 0.034 + 429.85 13.223 13.224 13.224 -0.093 0.145 1.110 -0.093 0.145 0.160 -0.103 -0.013 0.631 0.096 + 429.90 13.328 13.330 13.331 -0.250 -0.057 1.215 -0.250 -0.057 -0.069 -0.304 0.014 0.771 0.156 + 429.95 13.078 13.078 13.078 -0.055 0.055 0.965 -0.055 0.055 0.053 -0.053 -0.003 0.469 0.038 + 430.00 13.294 13.295 13.295 -0.163 0.049 1.181 -0.163 0.049 0.058 -0.192 -0.008 0.712 0.100 + 430.05 13.091 13.099 13.100 -0.477 0.054 0.978 -0.477 0.054 0.052 -0.467 -0.026 0.593 0.235 + 430.10 12.938 12.944 12.945 -0.415 0.103 0.825 -0.415 0.103 0.085 -0.342 -0.043 0.432 0.178 + 430.15 12.726 12.734 12.734 -0.450 0.020 0.613 -0.450 0.020 0.012 -0.276 -0.009 0.289 0.138 + 430.20 12.838 12.857 12.858 -0.698 0.148 0.725 -0.698 0.148 0.107 -0.506 -0.103 0.517 0.264 + 430.25 12.892 12.902 12.906 -0.516 0.301 0.779 -0.516 0.301 0.235 -0.402 -0.155 0.482 0.245 + 430.30 13.037 13.043 13.045 -0.400 0.221 0.924 -0.400 0.221 0.204 -0.369 -0.088 0.531 0.215 + 430.35 13.011 13.029 13.029 -0.697 -0.009 0.898 -0.697 -0.009 -0.008 -0.626 0.006 0.646 0.313 + 430.40 12.784 12.788 12.788 -0.288 -0.045 0.672 -0.288 -0.045 -0.030 -0.193 0.013 0.268 0.098 + 430.45 12.737 12.746 12.748 -0.496 -0.222 0.624 -0.496 -0.222 -0.138 -0.309 0.110 0.342 0.178 + 430.50 12.789 12.814 12.817 -0.800 -0.248 0.677 -0.800 -0.248 -0.168 -0.541 0.199 0.580 0.300 + 430.55 12.754 12.760 12.760 -0.403 0.003 0.641 -0.403 0.003 0.002 -0.258 -0.001 0.287 0.129 + 430.60 12.679 12.679 12.680 0.004 -0.134 0.566 0.004 -0.134 -0.076 0.002 -0.000 0.169 0.038 + 430.65 12.930 12.933 12.938 0.292 -0.343 0.817 0.292 -0.343 -0.280 0.239 -0.100 0.435 0.191 + 430.70 12.853 12.854 12.860 0.131 -0.391 0.740 0.131 -0.391 -0.289 0.097 -0.051 0.359 0.155 + 430.75 12.600 12.600 12.601 0.086 -0.122 0.487 0.086 -0.122 -0.059 0.042 -0.010 0.130 0.037 + 430.80 12.884 12.887 12.894 -0.259 -0.437 0.772 -0.259 -0.437 -0.337 -0.200 0.113 0.427 0.204 + 430.85 12.969 12.973 12.981 -0.343 -0.433 0.856 -0.343 -0.433 -0.370 -0.293 0.148 0.519 0.248 + 430.90 13.025 13.033 13.038 -0.476 -0.341 0.912 -0.476 -0.341 -0.311 -0.434 0.162 0.587 0.279 + 430.95 12.783 12.787 12.787 -0.329 -0.050 0.670 -0.329 -0.050 -0.033 -0.220 0.016 0.280 0.112 + 431.00 12.611 12.619 12.619 -0.458 0.095 0.498 -0.458 0.095 0.047 -0.228 -0.044 0.233 0.119 + 431.05 12.695 12.704 12.709 -0.497 0.351 0.582 -0.497 0.351 0.204 -0.289 -0.174 0.354 0.197 + 431.10 12.643 12.651 12.662 -0.462 0.521 0.530 -0.462 0.521 0.276 -0.245 -0.241 0.383 0.220 + 431.15 12.886 12.893 12.901 -0.431 0.465 0.773 -0.431 0.465 0.359 -0.333 -0.201 0.500 0.265 + 431.20 12.767 12.777 12.785 -0.487 0.463 0.654 -0.487 0.463 0.303 -0.319 -0.225 0.440 0.247 + 431.25 12.741 12.745 12.767 -0.299 0.751 0.629 -0.299 0.751 0.472 -0.188 -0.225 0.525 0.278 + 431.30 12.446 12.449 12.481 -0.273 0.885 0.334 -0.273 0.885 0.295 -0.091 -0.241 0.485 0.196 + 431.35 12.520 12.524 12.536 -0.331 0.541 0.407 -0.331 0.541 0.220 -0.134 -0.179 0.284 0.157 + 431.40 12.749 12.753 12.753 -0.345 0.036 0.636 -0.345 0.036 0.023 -0.220 -0.012 0.262 0.111 + 431.45 12.660 12.680 12.685 -0.711 -0.363 0.547 -0.711 -0.363 -0.199 -0.389 0.258 0.468 0.254 + 431.50 12.829 12.844 12.851 -0.628 -0.423 0.716 -0.628 -0.423 -0.303 -0.450 0.266 0.543 0.302 + 431.55 13.007 13.014 13.014 -0.432 -0.025 0.894 -0.432 -0.025 -0.022 -0.386 0.011 0.493 0.194 + 431.60 12.934 12.942 12.943 -0.457 0.199 0.821 -0.457 0.199 0.164 -0.375 -0.091 0.461 0.210 + 431.65 12.722 12.735 12.749 -0.580 0.597 0.609 -0.580 0.597 0.363 -0.353 -0.346 0.532 0.307 + 431.70 12.806 12.830 12.845 -0.787 0.622 0.693 -0.787 0.622 0.431 -0.545 -0.489 0.743 0.425 + 431.75 12.696 12.719 12.745 -0.769 0.811 0.583 -0.769 0.811 0.473 -0.448 -0.623 0.794 0.451 + 431.80 12.794 12.834 12.851 -1.005 0.658 0.682 -1.005 0.658 0.448 -0.685 -0.661 0.953 0.526 + 431.85 12.531 12.609 12.613 -1.398 0.346 0.418 -1.398 0.346 0.145 -0.585 -0.484 1.125 0.386 + 431.90 12.571 12.602 12.616 -0.880 0.606 0.458 -0.880 0.606 0.278 -0.403 -0.533 0.675 0.362 + 431.95 12.288 12.320 12.337 -0.895 0.645 0.175 -0.895 0.645 0.113 -0.157 -0.577 0.623 0.304 + 432.00 12.558 12.592 12.599 -0.929 0.431 0.445 -0.929 0.431 0.192 -0.413 -0.400 0.623 0.303 + 432.05 12.243 12.286 12.298 -1.026 0.532 0.131 -1.026 0.532 0.069 -0.134 -0.546 0.677 0.283 + 432.10 12.207 12.243 12.257 -0.942 0.593 0.094 -0.942 0.593 0.056 -0.088 -0.559 0.624 0.284 + 432.15 12.593 12.626 12.633 -0.912 0.415 0.480 -0.912 0.415 0.200 -0.438 -0.379 0.617 0.306 + 432.20 12.565 12.591 12.591 -0.795 0.136 0.453 -0.795 0.136 0.061 -0.360 -0.108 0.428 0.190 + 432.25 12.610 12.632 12.632 -0.756 0.012 0.497 -0.756 0.012 0.006 -0.375 -0.009 0.409 0.188 + 432.30 12.690 12.733 12.733 -1.040 0.100 0.577 -1.040 0.100 0.058 -0.600 -0.105 0.713 0.306 + 432.35 12.899 12.965 12.970 -1.311 -0.365 0.786 -1.311 -0.365 -0.287 -1.030 0.479 1.235 0.586 + 432.40 12.972 12.998 13.005 -0.811 -0.444 0.859 -0.811 -0.444 -0.382 -0.697 0.360 0.797 0.436 + 432.45 12.809 12.835 12.852 -0.819 -0.650 0.696 -0.819 -0.650 -0.453 -0.571 0.533 0.789 0.451 + 432.50 13.026 13.082 13.096 -1.203 -0.612 0.913 -1.203 -0.612 -0.559 -1.099 0.736 1.328 0.718 + 432.55 13.332 13.415 13.418 -1.492 -0.277 1.219 -1.492 -0.277 -0.337 -1.818 0.413 1.894 0.947 + 432.60 13.523 13.582 13.586 -1.264 -0.353 1.410 -1.264 -0.353 -0.497 -1.782 0.446 1.855 0.952 + 432.65 13.330 13.361 13.371 -0.920 -0.501 1.217 -0.920 -0.501 -0.610 -1.120 0.461 1.290 0.678 + 432.70 13.513 13.558 13.564 -1.105 -0.413 1.400 -1.105 -0.413 -0.579 -1.547 0.457 1.676 0.857 + 432.75 13.364 13.440 13.442 -1.423 -0.262 1.251 -1.423 -0.262 -0.328 -1.780 0.373 1.829 0.924 + 432.80 13.311 13.401 13.401 -1.548 -0.018 1.198 -1.548 -0.018 -0.021 -1.855 0.027 1.916 0.927 + 432.85 13.055 13.126 13.126 -1.360 0.005 0.942 -1.360 0.005 0.004 -1.281 -0.006 1.369 0.641 + 432.90 13.080 13.118 13.118 -0.993 -0.136 0.967 -0.993 -0.136 -0.132 -0.960 0.135 0.970 0.489 + 432.95 13.140 13.166 13.166 -0.836 0.034 1.027 -0.836 0.034 0.035 -0.859 -0.029 0.877 0.430 + 433.00 13.291 13.353 13.353 -1.281 0.108 1.179 -1.281 0.108 0.127 -1.510 -0.138 1.521 0.761 + 433.05 13.498 13.547 13.549 -1.156 -0.212 1.385 -1.156 -0.212 -0.294 -1.600 0.246 1.649 0.823 + 433.10 13.563 13.582 13.588 -0.726 -0.419 1.450 -0.726 -0.419 -0.608 -1.052 0.304 1.402 0.626 + 433.15 13.453 13.453 13.455 -0.033 -0.260 1.340 -0.033 -0.260 -0.349 -0.045 0.009 0.932 0.176 + 433.20 13.680 13.681 13.698 0.086 -0.693 1.567 0.086 -0.693 -1.087 0.135 -0.060 1.473 0.548 + 433.25 14.004 14.005 14.042 -0.125 -1.024 1.892 -0.125 -1.024 -1.937 -0.236 0.128 2.321 0.978 + 433.30 13.824 13.825 13.869 -0.112 -1.103 1.712 -0.112 -1.103 -1.888 -0.192 0.124 2.080 0.951 + 433.35 13.890 13.890 13.930 -0.085 -1.043 1.777 -0.085 -1.043 -1.854 -0.151 0.089 2.127 0.931 + 433.40 14.124 14.125 14.150 -0.122 -0.857 2.011 -0.122 -0.857 -1.723 -0.246 0.105 2.397 0.872 + 433.45 14.272 14.274 14.341 -0.240 -1.377 2.159 -0.240 -1.377 -2.973 -0.518 0.330 3.308 1.518 + 433.50 13.895 13.907 13.959 -0.571 -1.205 1.783 -0.571 -1.205 -2.148 -1.017 0.687 2.478 1.237 + 433.55 13.970 13.981 14.050 -0.546 -1.395 1.857 -0.546 -1.395 -2.590 -1.013 0.761 2.846 1.442 + 433.60 14.089 14.094 14.135 -0.382 -1.069 1.976 -0.382 -1.069 -2.113 -0.755 0.408 2.598 1.140 + 433.65 14.095 14.096 14.119 -0.225 -0.798 1.982 -0.225 -0.798 -1.581 -0.447 0.180 2.307 0.826 + 433.70 13.810 13.811 13.827 -0.193 -0.654 1.697 -0.193 -0.654 -1.111 -0.327 0.126 1.673 0.582 + 433.75 13.839 13.840 13.843 0.132 -0.315 1.726 0.132 -0.315 -0.544 0.227 -0.041 1.549 0.296 + 433.80 14.010 14.014 14.017 0.343 -0.287 1.897 0.343 -0.287 -0.544 0.651 -0.098 1.900 0.427 + 433.85 13.799 13.799 13.804 -0.049 -0.367 1.687 -0.049 -0.367 -0.619 -0.082 0.018 1.491 0.312 + 433.90 13.672 13.672 13.672 -0.001 -0.034 1.559 -0.001 -0.034 -0.053 -0.001 0.000 1.215 0.027 + 433.95 13.626 13.627 13.628 0.153 0.096 1.514 0.153 0.096 0.146 0.232 0.015 1.162 0.137 + 434.00 13.572 13.572 13.572 0.007 -0.025 1.460 0.007 -0.025 -0.036 0.010 -0.000 1.066 0.019 + 434.05 13.698 13.699 13.699 0.087 0.101 1.586 0.087 0.101 0.161 0.137 0.009 1.266 0.106 + 434.10 13.662 13.664 13.668 0.204 -0.323 1.549 0.204 -0.323 -0.500 0.316 -0.066 1.273 0.298 + 434.15 13.507 13.508 13.508 0.181 0.051 1.394 0.181 0.051 0.071 0.252 0.009 0.990 0.131 + 434.20 13.393 13.394 13.394 0.147 -0.067 1.280 0.147 -0.067 -0.086 0.189 -0.010 0.832 0.104 + 434.25 13.066 13.066 13.066 -0.096 -0.047 0.953 -0.096 -0.047 -0.045 -0.091 0.005 0.460 0.051 + 434.30 12.971 12.972 12.978 -0.175 -0.391 0.858 -0.175 -0.391 -0.335 -0.150 0.069 0.460 0.187 + 434.35 12.905 12.906 12.909 -0.222 -0.264 0.792 -0.222 -0.264 -0.209 -0.176 0.059 0.373 0.140 + 434.40 13.367 13.367 13.370 -0.034 -0.303 1.254 -0.034 -0.303 -0.381 -0.043 0.010 0.833 0.192 + 434.45 13.477 13.478 13.481 0.194 -0.267 1.364 0.194 -0.267 -0.364 0.265 -0.052 0.985 0.227 + 434.50 13.512 13.518 13.520 0.430 0.173 1.399 0.430 0.173 0.242 0.602 0.074 1.086 0.326 + 434.55 13.434 13.443 13.443 0.486 -0.005 1.322 0.486 -0.005 -0.007 0.642 -0.003 0.991 0.321 + 434.60 13.859 13.878 13.879 0.735 -0.195 1.746 0.735 -0.195 -0.341 1.283 -0.143 1.813 0.668 + 434.65 13.632 13.643 13.644 0.565 0.059 1.519 0.565 0.059 0.090 0.858 0.033 1.315 0.432 + 434.70 13.301 13.303 13.310 0.253 0.428 1.188 0.253 0.428 0.508 0.301 0.108 0.829 0.300 + 434.75 13.179 13.179 13.186 0.032 0.434 1.066 0.032 0.434 0.462 0.034 0.014 0.663 0.232 + 434.80 13.185 13.186 13.190 0.138 0.351 1.072 0.138 0.351 0.377 0.148 0.048 0.646 0.204 + 434.85 13.388 13.400 13.410 0.582 0.503 1.275 0.582 0.503 0.642 0.742 0.293 1.109 0.512 + 434.90 13.097 13.119 13.142 0.757 0.788 0.984 0.757 0.788 0.775 0.745 0.597 1.081 0.615 + 434.95 12.944 12.990 13.028 1.090 0.990 0.831 1.090 0.990 0.823 0.906 1.079 1.430 0.816 + 435.00 12.982 13.017 13.079 0.944 1.279 0.870 0.944 1.279 1.112 0.821 1.207 1.641 0.918 + 435.05 13.022 13.056 13.095 0.947 1.009 0.909 0.947 1.009 0.917 0.861 0.955 1.370 0.790 + 435.10 13.070 13.105 13.119 0.950 0.622 0.957 0.950 0.622 0.596 0.910 0.591 1.103 0.619 + 435.15 12.996 13.012 13.022 0.638 0.499 0.884 0.638 0.499 0.441 0.563 0.318 0.718 0.392 + 435.20 12.996 13.019 13.041 0.772 0.758 0.883 0.772 0.758 0.669 0.682 0.585 0.975 0.560 + 435.25 12.897 12.923 12.957 0.812 0.935 0.784 0.812 0.935 0.734 0.637 0.759 1.075 0.617 + 435.30 13.067 13.080 13.089 0.572 0.488 0.954 0.572 0.488 0.466 0.546 0.279 0.738 0.385 + 435.35 13.065 13.083 13.086 0.678 0.291 0.952 0.678 0.291 0.277 0.646 0.197 0.726 0.365 + 435.40 12.848 12.850 12.854 0.251 0.288 0.735 0.251 0.288 0.212 0.185 0.073 0.343 0.145 + 435.45 12.630 12.632 12.633 0.206 0.143 0.518 0.206 0.143 0.074 0.106 0.029 0.165 0.066 + 435.50 12.735 12.736 12.743 0.118 0.408 0.623 0.118 0.408 0.254 0.074 0.048 0.284 0.134 + 435.55 12.639 12.643 12.650 0.298 0.414 0.527 0.298 0.414 0.218 0.157 0.123 0.269 0.148 + 435.60 12.657 12.658 12.663 0.166 0.344 0.544 0.166 0.344 0.187 0.090 0.057 0.221 0.108 + 435.65 12.641 12.645 12.648 0.328 0.264 0.528 0.328 0.264 0.139 0.173 0.087 0.228 0.119 + 435.70 12.675 12.677 12.680 0.225 0.314 0.562 0.225 0.314 0.176 0.126 0.071 0.232 0.114 + 435.75 12.634 12.636 12.637 0.184 0.189 0.521 0.184 0.189 0.099 0.096 0.035 0.171 0.071 + 435.80 12.213 12.225 12.228 0.544 0.268 0.100 0.544 0.268 0.027 0.054 0.146 0.189 0.079 + 435.85 11.933 11.942 11.942 0.482 -0.024 -0.180 0.482 -0.024 0.004 -0.087 -0.012 0.133 0.044 + 435.90 11.944 11.958 11.958 0.577 0.008 -0.168 0.577 0.008 -0.001 -0.097 0.005 0.181 0.049 + 435.95 11.877 11.881 11.881 0.297 0.021 -0.236 0.297 0.021 -0.005 -0.070 0.006 0.072 0.035 + 436.00 12.108 12.124 12.124 0.608 -0.007 -0.004 0.608 -0.007 0.000 -0.003 -0.004 0.185 0.002 + 436.05 11.889 11.909 11.909 0.686 0.068 -0.224 0.686 0.068 -0.015 -0.153 0.047 0.263 0.081 + 436.10 11.818 11.869 11.871 1.096 -0.225 -0.294 1.096 -0.225 0.066 -0.323 -0.247 0.669 0.206 + 436.15 11.966 12.028 12.031 1.219 -0.289 -0.147 1.219 -0.289 0.042 -0.179 -0.352 0.796 0.199 + 436.20 11.856 11.915 11.920 1.178 -0.372 -0.257 1.178 -0.372 0.095 -0.302 -0.438 0.796 0.270 + 436.25 11.856 11.900 11.914 1.020 -0.581 -0.257 1.020 -0.581 0.149 -0.262 -0.593 0.722 0.333 + 436.30 11.584 11.620 11.620 0.912 0.109 -0.529 0.912 0.109 -0.058 -0.482 0.099 0.561 0.248 + 436.35 11.641 11.715 11.720 1.317 0.314 -0.472 1.317 0.314 -0.148 -0.621 0.413 1.028 0.380 + 436.40 11.623 11.681 11.694 1.160 0.551 -0.490 1.160 0.551 -0.270 -0.568 0.640 0.945 0.449 + 436.45 11.732 11.802 11.805 1.283 0.253 -0.381 1.283 0.253 -0.096 -0.488 0.325 0.928 0.297 + 436.50 11.575 11.621 11.625 1.035 0.301 -0.538 1.035 0.301 -0.162 -0.557 0.312 0.726 0.329 + 436.55 11.565 11.593 11.602 0.804 0.454 -0.548 0.804 0.454 -0.249 -0.440 0.365 0.576 0.312 + 436.60 11.675 11.719 11.738 1.016 0.678 -0.438 1.016 0.678 -0.297 -0.445 0.689 0.842 0.436 + 436.65 11.590 11.608 11.637 0.644 0.822 -0.523 0.644 0.822 -0.430 -0.337 0.529 0.681 0.380 + 436.70 11.686 11.735 11.739 1.074 0.314 -0.427 1.074 0.314 -0.134 -0.459 0.338 0.718 0.293 + 436.75 11.768 11.796 11.797 0.809 0.109 -0.345 0.809 0.109 -0.038 -0.279 0.088 0.393 0.147 + 436.80 11.875 11.923 11.923 1.068 -0.074 -0.238 1.068 -0.074 0.018 -0.254 -0.079 0.602 0.133 + 436.85 11.760 11.797 11.797 0.934 -0.077 -0.353 0.934 -0.077 0.027 -0.329 -0.072 0.501 0.169 + 436.90 11.878 11.926 11.933 1.071 -0.413 -0.235 1.071 -0.413 0.097 -0.252 -0.442 0.687 0.259 + 436.95 12.091 12.136 12.141 1.043 -0.349 -0.022 1.043 -0.349 0.008 -0.023 -0.363 0.604 0.182 + 437.00 12.082 12.105 12.120 0.746 -0.610 -0.031 0.746 -0.610 0.019 -0.023 -0.455 0.465 0.228 + 437.05 12.206 12.232 12.236 0.803 -0.298 0.093 0.803 -0.298 -0.028 0.075 -0.239 0.371 0.126 + 437.10 12.078 12.092 12.093 0.584 -0.170 -0.035 0.584 -0.170 0.006 -0.020 -0.100 0.186 0.051 + 437.15 12.041 12.054 12.055 0.576 -0.110 -0.072 0.576 -0.110 0.008 -0.042 -0.063 0.175 0.038 + 437.20 12.089 12.107 12.109 0.646 0.224 -0.023 0.646 0.224 -0.005 -0.015 0.145 0.234 0.073 + 437.25 12.222 12.243 12.244 0.717 0.175 0.109 0.717 0.175 0.019 0.078 0.125 0.278 0.074 + 437.30 12.192 12.197 12.198 0.357 0.087 0.079 0.357 0.087 0.007 0.028 0.031 0.071 0.021 + 437.35 12.165 12.182 12.186 0.633 -0.336 0.052 0.633 -0.336 -0.018 0.033 -0.213 0.258 0.108 + 437.40 12.205 12.232 12.238 0.808 -0.375 0.092 0.808 -0.375 -0.035 0.075 -0.303 0.401 0.157 + 437.45 12.189 12.207 12.220 0.676 -0.548 0.076 0.676 -0.548 -0.042 0.051 -0.370 0.381 0.188 + 437.50 12.265 12.290 12.306 0.783 -0.615 0.153 0.783 -0.615 -0.094 0.120 -0.482 0.508 0.253 + 437.55 12.241 12.255 12.267 0.587 -0.542 0.128 0.587 -0.542 -0.069 0.075 -0.318 0.327 0.167 + 437.60 12.365 12.369 12.382 0.330 -0.565 0.252 0.330 -0.565 -0.142 0.083 -0.186 0.245 0.124 + 437.65 12.162 12.165 12.171 0.262 -0.382 0.049 0.262 -0.382 -0.019 0.013 -0.100 0.108 0.051 + 437.70 12.135 12.155 12.156 0.703 -0.055 0.022 0.703 -0.055 -0.001 0.016 -0.039 0.249 0.021 + 437.75 12.207 12.225 12.228 0.654 -0.280 0.094 0.654 -0.280 -0.026 0.062 -0.183 0.257 0.097 + 437.80 12.186 12.210 12.220 0.778 -0.476 0.073 0.778 -0.476 -0.035 0.057 -0.371 0.419 0.188 + 437.85 12.276 12.296 12.298 0.708 -0.222 0.163 0.708 -0.222 -0.036 0.115 -0.157 0.288 0.099 + 437.90 12.339 12.362 12.364 0.753 -0.227 0.226 0.753 -0.227 -0.051 0.170 -0.171 0.335 0.123 + 437.95 12.400 12.424 12.424 0.774 -0.008 0.287 0.774 -0.008 -0.002 0.222 -0.006 0.341 0.111 + 438.00 12.366 12.367 12.368 0.179 -0.171 0.253 0.179 -0.171 -0.043 0.045 -0.031 0.063 0.035 + 438.05 12.301 12.302 12.302 0.164 0.007 0.188 0.164 0.007 0.001 0.031 0.001 0.031 0.015 + 438.10 12.499 12.504 12.506 0.337 0.218 0.386 0.337 0.218 0.084 0.130 0.073 0.155 0.086 + 438.15 12.942 12.950 12.950 0.476 -0.006 0.829 0.476 -0.006 -0.005 0.395 -0.003 0.457 0.197 + 438.20 12.664 12.678 12.684 0.580 -0.409 0.552 0.580 -0.409 -0.225 0.320 -0.237 0.404 0.229 + 438.25 12.348 12.352 12.365 0.331 -0.569 0.235 0.331 -0.569 -0.134 0.078 -0.188 0.244 0.122 + 438.30 12.266 12.274 12.275 0.435 -0.152 0.153 0.435 -0.152 -0.023 0.067 -0.066 0.118 0.048 + 438.35 12.385 12.389 12.398 0.328 -0.453 0.272 0.328 -0.453 -0.123 0.089 -0.148 0.193 0.106 + 438.40 12.346 12.352 12.353 0.388 -0.175 0.233 0.388 -0.175 -0.041 0.091 -0.068 0.118 0.060 + 438.45 12.757 12.767 12.767 0.496 -0.101 0.644 0.496 -0.101 -0.065 0.320 -0.050 0.336 0.165 + 438.50 12.693 12.704 12.706 0.527 -0.264 0.580 0.527 -0.264 -0.153 0.306 -0.139 0.342 0.185 + 438.55 12.808 12.813 12.816 0.367 -0.254 0.695 0.367 -0.254 -0.177 0.255 -0.093 0.341 0.162 + 438.60 13.024 13.031 13.035 0.429 -0.310 0.911 0.429 -0.310 -0.283 0.391 -0.133 0.556 0.250 + 438.65 13.013 13.020 13.020 0.428 -0.067 0.900 0.428 -0.067 -0.060 0.385 -0.029 0.499 0.196 + 438.70 12.960 12.965 12.965 0.354 0.081 0.847 0.354 0.081 0.068 0.300 0.029 0.425 0.154 + 438.75 12.909 12.913 12.913 0.288 -0.152 0.797 0.288 -0.152 -0.121 0.229 -0.044 0.370 0.132 + 438.80 13.108 13.117 13.120 0.472 -0.300 0.995 0.472 -0.300 -0.298 0.470 -0.142 0.652 0.287 + 438.85 13.132 13.146 13.147 0.620 0.106 1.019 0.620 0.106 0.108 0.632 0.066 0.717 0.322 + 438.90 13.204 13.218 13.221 0.605 -0.269 1.091 0.605 -0.269 -0.293 0.660 -0.163 0.815 0.370 + 438.95 13.370 13.385 13.388 0.628 -0.277 1.257 0.628 -0.277 -0.349 0.790 -0.174 1.026 0.440 + 439.00 13.449 13.454 13.462 0.344 -0.466 1.336 0.344 -0.466 -0.623 0.460 -0.160 1.061 0.395 + 439.05 13.552 13.556 13.559 0.321 -0.296 1.440 0.321 -0.296 -0.426 0.463 -0.095 1.132 0.318 + 439.10 13.353 13.353 13.357 0.109 -0.321 1.240 0.109 -0.321 -0.398 0.135 -0.035 0.826 0.211 + 439.15 13.106 13.107 13.108 0.125 -0.197 0.993 0.125 -0.197 -0.196 0.124 -0.025 0.521 0.116 + 439.20 13.127 13.130 13.130 0.298 -0.034 1.014 0.298 -0.034 -0.034 0.302 -0.010 0.559 0.152 + 439.25 13.227 13.239 13.239 0.561 -0.087 1.114 0.561 -0.087 -0.097 0.625 -0.049 0.782 0.317 + 439.30 13.498 13.506 13.510 0.456 -0.331 1.385 0.456 -0.331 -0.459 0.632 -0.151 1.119 0.398 + 439.35 13.600 13.600 13.624 -0.062 -0.798 1.487 -0.062 -0.798 -1.186 -0.092 0.050 1.426 0.595 + 439.40 13.468 13.468 13.485 0.128 -0.666 1.355 0.128 -0.666 -0.902 0.174 -0.085 1.148 0.461 + 439.45 13.431 13.431 13.450 -0.007 -0.723 1.318 -0.007 -0.723 -0.953 -0.009 0.005 1.130 0.476 + 439.50 13.336 13.336 13.358 -0.036 -0.769 1.223 -0.036 -0.769 -0.941 -0.044 0.028 1.044 0.471 + 439.55 13.041 13.045 13.073 0.303 -0.856 0.929 0.303 -0.856 -0.795 0.281 -0.259 0.843 0.441 + 439.60 13.081 13.088 13.107 0.429 -0.703 0.968 0.429 -0.703 -0.681 0.415 -0.301 0.808 0.426 + 439.65 12.847 12.849 12.882 0.216 -0.916 0.735 0.216 -0.916 -0.673 0.159 -0.198 0.712 0.359 + 439.70 12.992 12.997 13.054 0.340 -1.228 0.879 0.340 -1.228 -1.080 0.299 -0.417 1.198 0.598 + 439.75 12.653 12.653 12.738 0.102 -1.471 0.540 0.102 -1.471 -0.794 0.055 -0.150 1.233 0.405 + 439.80 12.669 12.670 12.755 -0.138 -1.473 0.556 -0.138 -1.473 -0.819 -0.077 0.203 1.250 0.424 + 439.85 12.696 12.701 12.758 -0.333 -1.212 0.583 -0.333 -1.212 -0.707 -0.194 0.403 0.960 0.418 + 439.90 12.723 12.731 12.792 -0.473 -1.246 0.610 -0.473 -1.246 -0.760 -0.289 0.590 1.074 0.502 + 439.95 12.978 12.983 13.013 -0.377 -0.884 0.865 -0.377 -0.884 -0.765 -0.326 0.334 0.836 0.448 + 440.00 13.049 13.049 13.081 -0.053 -0.920 0.936 -0.053 -0.920 -0.861 -0.049 0.048 0.863 0.432 + 440.05 13.095 13.096 13.131 -0.113 -0.966 0.982 -0.113 -0.966 -0.949 -0.111 0.109 0.956 0.481 + 440.10 13.113 13.116 13.150 -0.268 -0.950 1.000 -0.268 -0.950 -0.950 -0.268 0.255 0.987 0.510 + 440.15 13.189 13.194 13.223 -0.365 -0.863 1.076 -0.365 -0.863 -0.929 -0.393 0.315 1.018 0.528 + 440.20 12.996 12.998 13.043 -0.276 -1.075 0.883 -0.276 -1.075 -0.949 -0.243 0.296 1.005 0.512 + 440.25 13.258 13.261 13.286 -0.284 -0.803 1.146 -0.284 -0.803 -0.920 -0.325 0.228 1.019 0.501 + 440.30 13.020 13.023 13.041 -0.293 -0.690 0.907 -0.293 -0.690 -0.625 -0.266 0.202 0.692 0.354 + 440.35 12.843 12.849 12.885 -0.389 -0.962 0.730 -0.389 -0.962 -0.703 -0.284 0.374 0.805 0.423 + 440.40 12.670 12.677 12.688 -0.402 -0.538 0.558 -0.402 -0.538 -0.300 -0.224 0.216 0.381 0.216 + 440.45 12.781 12.793 12.794 -0.554 -0.165 0.668 -0.554 -0.165 -0.110 -0.370 0.091 0.390 0.198 + 440.50 13.047 13.054 13.058 -0.408 0.343 0.935 -0.408 0.343 0.321 -0.381 -0.140 0.579 0.259 + 440.55 12.772 12.776 12.777 -0.343 0.102 0.659 -0.343 0.102 0.067 -0.226 -0.035 0.281 0.119 + 440.60 13.013 13.017 13.017 -0.334 -0.120 0.900 -0.334 -0.120 -0.108 -0.300 0.040 0.468 0.161 + 440.65 12.924 12.927 12.928 -0.292 -0.097 0.811 -0.292 -0.097 -0.079 -0.237 0.028 0.376 0.126 + 440.70 13.081 13.082 13.082 -0.133 -0.138 0.968 -0.133 -0.138 -0.134 -0.129 0.018 0.487 0.093 + 440.75 13.519 13.519 13.531 -0.082 -0.563 1.406 -0.082 -0.563 -0.792 -0.115 0.046 1.151 0.401 + 440.80 13.233 13.238 13.245 -0.365 -0.450 1.120 -0.365 -0.450 -0.504 -0.409 0.165 0.795 0.335 + 440.85 13.314 13.325 13.343 -0.547 -0.677 1.201 -0.547 -0.677 -0.813 -0.658 0.371 1.101 0.555 + 440.90 13.256 13.256 13.269 0.062 -0.585 1.143 0.062 -0.585 -0.668 0.071 -0.036 0.826 0.337 + 440.95 12.968 12.970 12.976 -0.226 -0.398 0.855 -0.226 -0.398 -0.340 -0.193 0.090 0.470 0.201 + 441.00 12.811 12.822 12.825 -0.533 -0.303 0.698 -0.533 -0.303 -0.211 -0.372 0.161 0.431 0.229 + 441.05 12.708 12.727 12.730 -0.702 -0.242 0.595 -0.702 -0.242 -0.144 -0.418 0.169 0.452 0.237 + 441.10 12.066 12.104 12.107 -0.949 -0.279 -0.046 -0.949 -0.279 0.013 0.044 0.264 0.490 0.134 + 441.15 11.657 11.689 11.690 -0.869 0.110 -0.456 -0.869 0.110 -0.050 0.396 -0.096 0.488 0.205 + 441.20 11.896 11.909 11.940 -0.553 0.858 -0.217 -0.553 0.858 -0.186 0.120 -0.474 0.544 0.262 + 441.25 11.937 11.962 11.994 -0.779 0.881 -0.176 -0.779 0.881 -0.155 0.137 -0.687 0.707 0.359 + 441.30 11.882 11.893 11.946 -0.501 1.128 -0.231 -0.501 1.128 -0.260 0.116 -0.566 0.789 0.317 + 441.35 11.703 11.738 11.797 -0.897 1.178 -0.409 -0.897 1.178 -0.482 0.367 -1.056 1.180 0.609 + 441.40 12.055 12.071 12.098 -0.613 0.812 -0.057 -0.613 0.812 -0.047 0.035 -0.498 0.520 0.251 + 441.45 12.365 12.381 12.395 -0.629 0.592 0.252 -0.629 0.592 0.149 -0.159 -0.373 0.405 0.216 + 441.50 12.230 12.261 12.275 -0.883 0.568 0.117 -0.883 0.568 0.066 -0.103 -0.502 0.558 0.258 + 441.55 12.145 12.195 12.212 -1.096 0.656 0.032 -1.096 0.656 0.021 -0.036 -0.719 0.817 0.360 + 441.60 12.042 12.105 12.110 -1.231 0.334 -0.071 -1.231 0.334 -0.024 0.087 -0.411 0.815 0.210 + 441.65 12.281 12.341 12.352 -1.216 0.524 0.168 -1.216 0.524 0.088 -0.205 -0.637 0.891 0.337 + 441.70 12.294 12.360 12.361 -1.278 0.160 0.181 -1.278 0.160 0.029 -0.231 -0.205 0.846 0.155 + 441.75 12.428 12.479 12.479 -1.130 0.054 0.315 -1.130 0.054 0.017 -0.356 -0.061 0.690 0.181 + 441.80 12.328 12.390 12.390 -1.233 -0.011 0.215 -1.233 -0.011 -0.002 -0.266 0.013 0.784 0.133 + 441.85 12.071 12.162 12.169 -1.486 0.400 -0.041 -1.486 0.400 -0.017 0.062 -0.595 1.185 0.299 + 441.90 11.986 12.077 12.079 -1.479 0.198 -0.127 -1.479 0.198 -0.025 0.188 -0.292 1.122 0.174 + 441.95 12.120 12.163 12.175 -1.027 0.544 0.007 -1.027 0.544 0.004 -0.007 -0.558 0.675 0.279 + 442.00 11.699 11.771 11.774 -1.300 0.274 -0.414 -1.300 0.274 -0.114 0.538 -0.357 0.969 0.328 + 442.05 11.757 11.803 11.804 -1.044 0.147 -0.356 -1.044 0.147 -0.052 0.371 -0.154 0.619 0.203 + 442.10 11.965 12.049 12.050 -1.416 0.201 -0.148 -1.416 0.201 -0.030 0.209 -0.285 1.034 0.177 + 442.15 12.127 12.204 12.206 -1.364 0.234 0.014 -1.364 0.234 0.003 -0.020 -0.319 0.957 0.160 + 442.20 12.195 12.264 12.268 -1.301 0.325 0.082 -1.301 0.325 0.027 -0.107 -0.423 0.903 0.219 + 442.25 12.396 12.471 12.476 -1.366 0.366 0.283 -1.366 0.366 0.104 -0.387 -0.500 1.041 0.320 + 442.30 12.353 12.389 12.402 -0.939 0.580 0.240 -0.939 0.580 0.139 -0.226 -0.545 0.638 0.303 + 442.35 12.477 12.508 12.522 -0.877 0.607 0.364 -0.877 0.607 0.221 -0.319 -0.532 0.635 0.329 + 442.40 12.316 12.319 12.328 -0.292 0.479 0.203 -0.292 0.479 0.097 -0.059 -0.140 0.178 0.090 + 442.45 12.361 12.366 12.384 -0.362 0.676 0.248 -0.362 0.676 0.168 -0.090 -0.245 0.325 0.155 + 442.50 12.444 12.458 12.477 -0.574 0.693 0.332 -0.574 0.693 0.230 -0.190 -0.398 0.460 0.249 + 442.55 12.228 12.245 12.278 -0.655 0.892 0.115 -0.655 0.892 0.103 -0.075 -0.585 0.619 0.299 + 442.60 12.408 12.436 12.467 -0.834 0.880 0.295 -0.834 0.880 0.259 -0.246 -0.733 0.778 0.408 + 442.65 12.436 12.461 12.493 -0.790 0.892 0.323 -0.790 0.892 0.288 -0.255 -0.705 0.762 0.402 + 442.70 12.304 12.333 12.375 -0.845 1.022 0.191 -0.845 1.022 0.195 -0.161 -0.864 0.898 0.450 + 442.75 12.523 12.538 12.577 -0.613 0.991 0.410 -0.613 0.991 0.407 -0.252 -0.607 0.763 0.387 + 442.80 12.455 12.465 12.502 -0.505 0.951 0.342 -0.505 0.951 0.325 -0.173 -0.480 0.638 0.302 + 442.85 12.305 12.308 12.346 -0.243 0.970 0.193 -0.243 0.970 0.187 -0.047 -0.236 0.518 0.152 + 442.90 12.061 12.062 12.104 -0.133 1.002 -0.052 -0.133 1.002 -0.052 0.007 -0.133 0.512 0.071 + 442.95 12.136 12.142 12.188 -0.402 1.050 0.023 -0.402 1.050 0.024 -0.009 -0.422 0.633 0.212 + 443.00 12.100 12.105 12.136 -0.355 0.856 -0.013 -0.355 0.856 -0.011 0.004 -0.303 0.429 0.152 + 443.05 11.837 11.844 11.879 -0.406 0.909 -0.275 -0.406 0.909 -0.250 0.112 -0.369 0.534 0.230 + 443.10 12.098 12.107 12.155 -0.460 1.079 -0.014 -0.460 1.079 -0.015 0.007 -0.496 0.688 0.248 + 443.15 12.096 12.106 12.196 -0.478 1.484 -0.016 -0.478 1.484 -0.024 0.008 -0.709 1.215 0.355 + 443.20 12.211 12.214 12.297 -0.284 1.425 0.098 -0.284 1.425 0.140 -0.028 -0.404 1.061 0.214 + 443.25 12.371 12.378 12.418 -0.411 0.999 0.258 -0.411 0.999 0.258 -0.106 -0.410 0.617 0.248 + 443.30 12.217 12.223 12.239 -0.378 0.624 0.104 -0.378 0.624 0.065 -0.039 -0.236 0.272 0.124 + 443.35 12.083 12.083 12.103 -0.100 0.691 -0.030 -0.100 0.691 -0.021 0.003 -0.069 0.244 0.036 + 443.40 12.072 12.074 12.092 -0.200 0.659 -0.041 -0.200 0.659 -0.027 0.008 -0.132 0.238 0.067 + 443.45 11.896 11.896 11.918 0.049 0.733 -0.217 0.049 0.733 -0.159 -0.011 0.036 0.293 0.082 + 443.50 12.141 12.141 12.154 0.019 0.559 0.028 0.019 0.559 0.016 0.001 0.011 0.157 0.010 + 443.55 12.166 12.172 12.173 -0.391 0.153 0.053 -0.391 0.153 0.008 -0.021 -0.060 0.089 0.032 + 443.60 12.249 12.250 12.257 -0.157 0.409 0.136 -0.157 0.409 0.056 -0.021 -0.064 0.105 0.044 + 443.65 12.365 12.365 12.377 0.054 0.547 0.252 0.054 0.547 0.138 0.014 0.030 0.183 0.071 + 443.70 12.121 12.121 12.131 0.034 0.503 0.008 0.034 0.503 0.004 0.000 0.017 0.127 0.009 + 443.75 12.008 12.011 12.014 0.258 0.259 -0.104 0.258 0.259 -0.027 -0.027 0.067 0.072 0.038 + 443.80 12.010 12.011 12.012 0.169 0.171 -0.103 0.169 0.171 -0.018 -0.017 0.029 0.034 0.019 + 443.85 12.092 12.092 12.106 -0.031 0.568 -0.020 -0.031 0.568 -0.012 0.001 -0.018 0.162 0.011 + 443.90 11.845 11.845 11.866 0.063 0.699 -0.268 0.063 0.699 -0.187 -0.017 0.044 0.282 0.097 + 443.95 11.827 11.829 11.837 -0.205 0.429 -0.286 -0.205 0.429 -0.123 0.059 -0.088 0.154 0.081 + 444.00 11.590 11.592 11.602 -0.178 0.474 -0.522 -0.178 0.474 -0.247 0.093 -0.084 0.264 0.139 + 444.05 11.397 11.401 11.435 -0.306 0.879 -0.716 -0.306 0.879 -0.629 0.219 -0.269 0.689 0.359 + 444.10 11.302 11.312 11.335 -0.493 0.723 -0.811 -0.493 0.723 -0.586 0.400 -0.357 0.712 0.397 + 444.15 11.271 11.305 11.327 -0.879 0.707 -0.842 -0.879 0.707 -0.595 0.740 -0.622 0.991 0.568 + 444.20 11.391 11.432 11.445 -0.969 0.538 -0.722 -0.969 0.538 -0.388 0.700 -0.521 0.875 0.477 + 444.25 11.420 11.438 11.440 -0.636 0.238 -0.693 -0.636 0.238 -0.165 0.441 -0.152 0.471 0.247 + 444.30 11.341 11.346 11.351 -0.328 0.350 -0.772 -0.328 0.350 -0.270 0.253 -0.115 0.413 0.194 + 444.35 11.221 11.226 11.242 -0.349 0.598 -0.892 -0.349 0.598 -0.534 0.311 -0.209 0.638 0.326 + 444.40 11.362 11.371 11.375 -0.452 0.298 -0.751 -0.452 0.298 -0.224 0.339 -0.135 0.428 0.214 + 444.45 11.420 11.442 11.450 -0.713 0.428 -0.693 -0.713 0.428 -0.297 0.494 -0.305 0.586 0.326 + 444.50 11.317 11.331 11.352 -0.572 0.677 -0.796 -0.572 0.677 -0.539 0.455 -0.387 0.709 0.402 + 444.55 11.442 11.444 11.450 -0.204 0.378 -0.671 -0.204 0.378 -0.254 0.137 -0.077 0.317 0.149 + 444.60 11.511 11.512 11.517 -0.063 0.339 -0.601 -0.063 0.339 -0.204 0.038 -0.022 0.240 0.104 + 444.65 11.119 11.121 11.122 -0.232 0.115 -0.994 -0.232 0.115 -0.115 0.230 -0.027 0.527 0.129 + 444.70 10.955 10.956 10.956 0.146 -0.006 -1.158 0.146 -0.006 0.007 -0.169 -0.001 0.681 0.085 + 444.75 10.870 10.871 10.876 0.059 -0.335 -1.242 0.059 -0.335 0.417 -0.073 -0.020 0.830 0.212 + 444.80 11.041 11.041 11.049 0.028 -0.420 -1.072 0.028 -0.420 0.450 -0.030 -0.012 0.663 0.226 + 444.85 10.931 10.931 10.933 0.055 -0.205 -1.182 0.055 -0.205 0.242 -0.065 -0.011 0.721 0.125 + 444.90 11.202 11.203 11.208 -0.111 -0.349 -0.910 -0.111 -0.349 0.318 0.101 0.039 0.482 0.168 + 444.95 11.041 11.046 11.051 -0.317 -0.329 -1.071 -0.317 -0.329 0.352 0.340 0.104 0.678 0.250 + 445.00 10.859 10.864 10.873 -0.332 -0.439 -1.254 -0.332 -0.439 0.550 0.417 0.146 0.938 0.353 + 445.05 11.202 11.211 11.246 -0.462 -0.878 -0.911 -0.462 -0.878 0.800 0.421 0.406 0.907 0.495 + 445.10 11.287 11.291 11.336 -0.304 -1.005 -0.826 -0.304 -1.005 0.830 0.251 0.305 0.892 0.460 + 445.15 11.062 11.065 11.099 0.245 -0.871 -1.051 0.245 -0.871 0.915 -0.258 -0.214 0.962 0.487 + 445.20 11.062 11.063 11.097 0.087 -0.877 -1.051 0.087 -0.877 0.922 -0.092 -0.077 0.941 0.465 + 445.25 11.386 11.388 11.484 -0.221 -1.483 -0.727 -0.221 -1.483 1.078 0.161 0.328 1.388 0.569 + 445.30 11.220 11.222 11.358 -0.176 -1.752 -0.892 -0.176 -1.752 1.563 0.157 0.308 1.948 0.800 + 445.35 11.277 11.285 11.452 -0.418 -1.950 -0.836 -0.418 -1.950 1.631 0.350 0.816 2.339 0.928 + 445.40 11.238 11.242 11.356 -0.319 -1.603 -0.875 -0.319 -1.603 1.403 0.279 0.512 1.719 0.760 + 445.45 11.546 11.548 11.708 -0.216 -1.930 -0.567 -0.216 -1.930 1.095 0.123 0.417 2.047 0.589 + 445.50 11.575 11.577 11.752 -0.188 -2.023 -0.538 -0.188 -2.023 1.087 0.101 0.380 2.208 0.578 + 445.55 11.632 11.633 11.850 -0.204 -2.257 -0.481 -0.204 -2.257 1.086 0.098 0.460 2.682 0.592 + 445.60 11.745 11.747 11.912 -0.169 -1.976 -0.367 -0.169 -1.976 0.726 0.062 0.334 2.034 0.401 + 445.65 12.087 12.091 12.255 -0.322 -1.994 -0.026 -0.322 -1.994 0.051 0.008 0.642 2.040 0.322 + 445.70 11.881 11.894 12.060 -0.553 -1.998 -0.232 -0.553 -1.998 0.464 0.128 1.105 2.176 0.603 + 445.75 11.950 11.963 12.148 -0.544 -2.113 -0.162 -0.544 -2.113 0.343 0.088 1.149 2.394 0.601 + 445.80 12.076 12.096 12.265 -0.701 -2.028 -0.037 -0.701 -2.028 0.075 0.026 1.421 2.303 0.712 + 445.85 12.096 12.106 12.230 -0.488 -1.738 -0.017 -0.488 -1.738 0.029 0.008 0.848 1.630 0.424 + 445.90 11.879 11.884 11.978 -0.347 -1.496 -0.234 -0.347 -1.496 0.349 0.081 0.519 1.206 0.316 + 445.95 12.160 12.174 12.239 -0.598 -1.252 0.047 -0.598 -1.252 -0.059 -0.028 0.749 0.964 0.376 + 446.00 11.723 11.728 11.782 -0.356 -1.121 -0.390 -0.356 -1.121 0.437 0.139 0.399 0.768 0.304 + 446.05 11.618 11.624 11.702 0.365 -1.347 -0.495 0.365 -1.347 0.666 -0.181 -0.492 1.096 0.424 + 446.10 11.408 11.408 11.508 -0.018 -1.514 -0.705 -0.018 -1.514 1.067 0.013 0.028 1.395 0.534 + 446.15 11.260 11.261 11.392 0.193 -1.719 -0.853 0.193 -1.719 1.466 -0.165 -0.332 1.860 0.756 + 446.20 11.189 11.200 11.423 0.510 -2.243 -0.924 0.510 -2.243 2.073 -0.472 -1.145 3.073 1.207 + 446.25 11.260 11.260 11.448 0.066 -2.065 -0.853 0.066 -2.065 1.761 -0.056 -0.137 2.498 0.884 + 446.30 11.361 11.363 11.464 -0.183 -1.524 -0.751 -0.183 -1.524 1.145 0.138 0.279 1.460 0.593 + 446.35 11.336 11.337 11.408 0.095 -1.273 -0.776 0.095 -1.273 0.988 -0.073 -0.120 1.116 0.499 + 446.40 11.122 11.122 11.182 -0.129 -1.152 -0.991 -0.129 -1.152 1.142 0.128 0.149 1.163 0.579 + 446.45 11.037 11.038 11.114 -0.075 -1.298 -1.075 -0.075 -1.298 1.395 0.081 0.098 1.423 0.701 + 446.50 11.003 11.003 11.035 -0.091 -0.833 -1.110 -0.091 -0.833 0.924 0.101 0.076 0.967 0.466 + 446.55 11.050 11.055 11.098 0.315 -0.974 -1.062 0.315 -0.974 1.035 -0.335 -0.307 1.088 0.565 + 446.60 11.322 11.326 11.395 0.308 -1.251 -0.791 0.308 -1.251 0.989 -0.244 -0.386 1.143 0.545 + 446.65 11.455 11.458 11.535 0.256 -1.332 -0.658 0.256 -1.332 0.876 -0.168 -0.341 1.136 0.478 + 446.70 11.440 11.444 11.546 0.298 -1.528 -0.673 0.298 -1.528 1.028 -0.200 -0.455 1.438 0.571 + 446.75 11.463 11.464 11.569 0.166 -1.554 -0.650 0.166 -1.554 1.010 -0.108 -0.258 1.433 0.524 + 446.80 11.526 11.526 11.604 -0.026 -1.341 -0.587 -0.026 -1.341 0.787 0.015 0.034 1.072 0.394 + 446.85 11.492 11.493 11.616 0.097 -1.687 -0.620 0.097 -1.687 1.047 -0.060 -0.163 1.620 0.530 + 446.90 11.759 11.763 11.864 0.308 -1.542 -0.353 0.308 -1.542 0.545 -0.109 -0.475 1.299 0.365 + 446.95 11.791 11.800 11.879 0.445 -1.371 -0.321 0.445 -1.371 0.441 -0.143 -0.610 1.091 0.383 + 447.00 11.521 11.531 11.622 0.475 -1.448 -0.591 0.475 -1.448 0.856 -0.281 -0.687 1.335 0.567 + 447.05 11.240 11.243 11.287 0.265 -0.987 -0.873 0.265 -0.987 0.861 -0.232 -0.262 0.903 0.465 + 447.10 11.252 11.268 11.313 0.598 -1.006 -0.861 0.598 -1.006 0.866 -0.515 -0.601 1.055 0.587 + 447.15 11.317 11.329 11.394 0.517 -1.214 -0.796 0.517 -1.214 0.966 -0.411 -0.627 1.187 0.611 + 447.20 11.374 11.378 11.416 0.320 -0.926 -0.739 0.320 -0.926 0.684 -0.236 -0.296 0.753 0.391 + 447.25 11.366 11.373 11.391 0.392 -0.642 -0.747 0.392 -0.642 0.479 -0.292 -0.252 0.562 0.308 + 447.30 11.212 11.231 11.243 0.651 -0.508 -0.900 0.651 -0.508 0.457 -0.586 -0.331 0.746 0.407 + 447.35 10.784 10.790 10.827 0.371 -0.889 -1.329 0.371 -0.889 1.182 -0.493 -0.330 1.348 0.661 + 447.40 10.971 10.981 10.999 0.472 -0.618 -1.142 0.472 -0.618 0.706 -0.538 -0.292 0.954 0.467 + 447.45 11.036 11.077 11.093 0.951 -0.581 -1.076 0.951 -0.581 0.625 -1.024 -0.553 1.200 0.660 + 447.50 10.952 10.984 10.989 0.830 -0.339 -1.161 0.830 -0.339 0.394 -0.963 -0.281 1.075 0.539 + 447.55 10.734 10.768 10.770 0.851 -0.202 -1.378 0.851 -0.202 0.278 -1.173 -0.172 1.332 0.609 + 447.60 10.858 10.880 10.881 0.703 0.144 -1.255 0.703 0.144 -0.181 -0.883 0.101 1.045 0.453 + 447.65 11.102 11.117 11.118 0.581 0.095 -1.011 0.581 0.095 -0.096 -0.587 0.055 0.684 0.299 + 447.70 11.331 11.340 11.341 0.459 0.129 -0.782 0.459 0.129 -0.101 -0.359 0.059 0.420 0.189 + 447.75 11.411 11.414 11.415 0.228 0.150 -0.702 0.228 0.150 -0.105 -0.160 0.034 0.283 0.097 + 447.80 11.441 11.448 11.448 0.397 0.061 -0.672 0.397 0.061 -0.041 -0.267 0.024 0.306 0.135 + 447.85 11.591 11.612 11.612 0.695 0.079 -0.522 0.695 0.079 -0.041 -0.363 0.055 0.381 0.185 + 447.90 11.486 11.519 11.519 0.866 -0.104 -0.626 0.866 -0.104 0.065 -0.542 -0.090 0.577 0.277 + 447.95 11.471 11.495 11.499 0.749 -0.296 -0.642 0.749 -0.296 0.190 -0.481 -0.221 0.530 0.281 + 448.00 11.478 11.507 11.513 0.816 -0.380 -0.635 0.816 -0.380 0.241 -0.518 -0.310 0.607 0.325 + 448.05 11.287 11.302 11.302 0.594 -0.007 -0.826 0.594 -0.007 0.006 -0.490 -0.004 0.517 0.245 + 448.10 11.278 11.298 11.300 0.687 0.160 -0.835 0.687 0.160 -0.134 -0.574 0.110 0.598 0.300 + 448.15 11.264 11.302 11.303 0.932 0.139 -0.849 0.932 0.139 -0.118 -0.792 0.130 0.805 0.405 + 448.20 11.518 11.542 11.543 0.734 0.145 -0.594 0.734 0.145 -0.086 -0.436 0.107 0.456 0.229 + 448.25 11.804 11.827 11.833 0.741 0.391 -0.309 0.741 0.391 -0.121 -0.229 0.289 0.398 0.194 + 448.30 11.819 11.843 11.852 0.763 0.459 -0.294 0.763 0.459 -0.135 -0.224 0.350 0.439 0.219 + 448.35 11.614 11.663 11.670 1.070 0.390 -0.499 1.070 0.390 -0.194 -0.534 0.417 0.773 0.352 + 448.40 11.372 11.398 11.411 0.761 0.539 -0.740 0.761 0.539 -0.399 -0.564 0.410 0.709 0.402 + 448.45 11.507 11.521 11.539 0.574 0.647 -0.606 0.574 0.647 -0.392 -0.348 0.371 0.558 0.321 + 448.50 11.775 11.801 11.809 0.779 0.447 -0.338 0.779 0.447 -0.151 -0.263 0.348 0.461 0.231 + 448.55 11.785 11.806 11.809 0.697 0.275 -0.328 0.697 0.275 -0.090 -0.229 0.192 0.335 0.156 + 448.60 11.834 11.852 11.853 0.650 0.177 -0.279 0.650 0.177 -0.049 -0.181 0.115 0.266 0.110 + 448.65 11.950 11.996 11.997 1.060 0.116 -0.163 1.060 0.116 -0.019 -0.173 0.123 0.582 0.107 + 448.70 11.974 11.987 11.989 0.559 0.227 -0.139 0.559 0.227 -0.032 -0.078 0.127 0.192 0.076 + 448.75 11.811 11.812 11.815 0.178 0.237 -0.302 0.178 0.237 -0.072 -0.054 0.042 0.090 0.050 + 448.80 11.924 11.930 11.933 -0.384 0.270 -0.189 -0.384 0.270 -0.051 0.073 -0.104 0.128 0.068 + 448.85 11.776 11.783 11.786 -0.391 0.249 -0.336 -0.391 0.249 -0.084 0.131 -0.097 0.164 0.092 + 448.90 11.712 11.712 11.713 -0.085 0.124 -0.401 -0.085 0.124 -0.050 0.034 -0.011 0.091 0.031 + 448.95 11.707 11.711 11.713 0.308 -0.225 -0.406 0.308 -0.225 0.091 -0.125 -0.069 0.155 0.085 + 449.00 11.573 11.580 11.591 0.421 -0.489 -0.540 0.421 -0.489 0.264 -0.228 -0.206 0.354 0.202 + 449.05 11.573 11.573 11.580 -0.080 -0.403 -0.540 -0.080 -0.403 0.217 0.043 0.032 0.230 0.112 + 449.10 11.415 11.418 11.432 0.284 -0.553 -0.698 0.284 -0.553 0.386 -0.198 -0.157 0.437 0.231 + 449.15 11.498 11.498 11.517 -0.035 -0.656 -0.615 -0.035 -0.656 0.403 0.022 0.023 0.405 0.202 + 449.20 11.811 11.811 11.858 0.039 -1.056 -0.302 0.039 -1.056 0.319 -0.012 -0.041 0.604 0.161 + 449.25 12.177 12.178 12.199 0.161 -0.717 0.064 0.161 -0.717 -0.046 0.010 -0.115 0.272 0.062 + 449.30 12.012 12.012 12.020 0.020 -0.439 -0.101 0.020 -0.439 0.044 -0.002 -0.009 0.102 0.023 + 449.35 12.102 12.104 12.138 -0.216 -0.911 -0.011 -0.216 -0.911 0.010 0.002 0.197 0.438 0.099 + 449.40 12.080 12.089 12.114 -0.476 -0.780 -0.033 -0.476 -0.780 0.026 0.016 0.371 0.418 0.186 + 449.45 12.248 12.255 12.289 -0.406 -0.909 0.135 -0.406 -0.909 -0.123 -0.055 0.369 0.505 0.197 + 449.50 11.989 11.993 12.052 -0.304 -1.185 -0.123 -0.304 -1.185 0.146 0.037 0.360 0.756 0.195 + 449.55 11.847 11.855 11.912 -0.438 -1.170 -0.266 -0.438 -1.170 0.312 0.117 0.513 0.817 0.306 + 449.60 11.567 11.577 11.637 -0.480 -1.175 -0.546 -0.480 -1.175 0.641 0.262 0.564 0.954 0.446 + 449.65 11.678 11.704 11.751 -0.771 -1.051 -0.435 -0.771 -1.051 0.457 0.335 0.810 0.944 0.494 + 449.70 11.708 11.727 11.743 -0.661 -0.613 -0.404 -0.661 -0.613 0.248 0.267 0.405 0.488 0.273 + 449.75 11.930 11.945 11.963 -0.593 -0.651 -0.183 -0.593 -0.651 0.119 0.108 0.387 0.405 0.209 + 449.80 11.596 11.623 11.635 -0.788 -0.526 -0.516 -0.788 -0.526 0.272 0.407 0.415 0.582 0.321 + 449.85 11.821 11.857 11.869 -0.920 -0.547 -0.292 -0.920 -0.547 0.160 0.268 0.503 0.615 0.296 + 449.90 11.726 11.767 11.768 -0.978 -0.200 -0.387 -0.978 -0.200 0.077 0.378 0.196 0.573 0.216 + 449.95 11.870 11.890 11.891 -0.679 -0.182 -0.243 -0.679 -0.182 0.044 0.165 0.124 0.277 0.105 + 450.00 11.709 11.728 11.728 -0.678 0.025 -0.404 -0.678 0.025 -0.010 0.274 -0.017 0.312 0.137 + 450.05 11.697 11.749 11.758 -1.100 0.467 -0.416 -1.100 0.467 -0.194 0.457 -0.514 0.801 0.358 + 450.10 11.629 11.681 11.683 -1.110 0.189 -0.484 -1.110 0.189 -0.091 0.537 -0.210 0.751 0.292 + 450.15 11.807 11.845 11.850 -0.949 0.363 -0.306 -0.949 0.363 -0.111 0.290 -0.344 0.562 0.232 + 450.20 11.623 11.676 11.678 -1.113 0.219 -0.490 -1.113 0.219 -0.107 0.545 -0.244 0.763 0.303 + 450.25 10.964 11.015 11.017 -1.054 0.205 -1.149 -1.054 0.205 -0.235 1.211 -0.216 1.236 0.626 + 450.30 10.961 11.018 11.022 -1.118 0.313 -1.152 -1.118 0.313 -0.360 1.288 -0.350 1.338 0.691 + 450.35 11.273 11.332 11.334 -1.159 0.231 -0.840 -1.159 0.231 -0.194 0.974 -0.268 1.051 0.514 + 450.40 11.661 11.704 11.707 -0.993 0.280 -0.451 -0.993 0.280 -0.126 0.448 -0.278 0.634 0.271 + 450.45 11.719 11.755 11.758 -0.928 0.229 -0.394 -0.928 0.229 -0.090 0.366 -0.213 0.535 0.216 + 450.50 11.439 11.515 11.518 -1.318 0.263 -0.674 -1.318 0.263 -0.177 0.888 -0.347 1.131 0.485 + 450.55 11.634 11.705 11.706 -1.282 -0.165 -0.478 -1.282 -0.165 0.079 0.613 0.212 0.950 0.327 + 450.60 11.683 11.760 11.760 -1.343 -0.041 -0.430 -1.343 -0.041 0.018 0.577 0.055 0.995 0.290 + 450.65 11.584 11.644 11.644 -1.179 -0.071 -0.529 -1.179 -0.071 0.038 0.624 0.084 0.837 0.315 + 450.70 11.173 11.248 11.248 -1.296 -0.059 -0.940 -1.296 -0.059 0.055 1.218 0.076 1.283 0.611 + 450.75 11.163 11.267 11.270 -1.527 -0.269 -0.950 -1.527 -0.269 0.255 1.451 0.411 1.654 0.765 + 450.80 11.163 11.268 11.273 -1.537 -0.340 -0.950 -1.537 -0.340 0.323 1.460 0.523 1.690 0.792 + 450.85 10.914 11.008 11.011 -1.436 -0.244 -1.199 -1.436 -0.244 0.293 1.722 0.351 1.780 0.891 + 450.90 11.034 11.104 11.105 -1.242 -0.190 -1.079 -1.242 -0.190 0.205 1.340 0.236 1.372 0.688 + 450.95 11.123 11.230 11.237 -1.551 -0.383 -0.990 -1.551 -0.383 0.379 1.536 0.594 1.767 0.845 + 451.00 11.167 11.259 11.264 -1.439 -0.336 -0.946 -1.439 -0.336 0.317 1.361 0.483 1.538 0.739 + 451.05 11.146 11.210 11.210 -1.193 0.002 -0.966 -1.193 0.002 -0.002 1.153 -0.002 1.179 0.577 + 451.10 11.156 11.252 11.253 -1.468 0.165 -0.957 -1.468 0.165 -0.158 1.405 -0.242 1.549 0.717 + 451.15 11.311 11.419 11.422 -1.567 0.219 -0.801 -1.567 0.219 -0.176 1.256 -0.344 1.574 0.657 + 451.20 11.717 11.840 11.844 -1.702 -0.322 -0.396 -1.702 -0.322 0.128 0.674 0.548 1.579 0.439 + 451.25 11.872 11.992 12.002 -1.690 -0.488 -0.241 -1.690 -0.488 0.117 0.407 0.825 1.576 0.464 + 451.30 11.637 11.783 11.783 -1.847 -0.072 -0.476 -1.847 -0.072 0.034 0.878 0.133 1.822 0.445 + 451.35 11.381 11.515 11.516 -1.752 0.086 -0.731 -1.752 0.086 -0.063 1.282 -0.151 1.806 0.646 + 451.40 11.287 11.374 11.378 -1.407 0.275 -0.826 -1.407 0.275 -0.227 1.161 -0.387 1.368 0.623 + 451.45 11.536 11.693 11.701 -1.908 0.442 -0.576 -1.908 0.442 -0.255 1.100 -0.843 2.084 0.704 + 451.50 11.277 11.414 11.427 -1.764 0.537 -0.836 -1.764 0.537 -0.449 1.474 -0.948 2.049 0.904 + 451.55 11.375 11.476 11.476 -1.516 0.024 -0.738 -1.516 0.024 -0.017 1.118 -0.036 1.422 0.560 + 451.60 11.452 11.564 11.564 -1.605 0.090 -0.661 -1.605 0.090 -0.060 1.061 -0.145 1.510 0.536 + 451.65 11.562 11.659 11.659 -1.505 0.091 -0.551 -1.505 0.091 -0.050 0.830 -0.136 1.289 0.421 + 451.70 11.657 11.744 11.745 -1.422 0.143 -0.455 -1.422 0.143 -0.065 0.647 -0.204 1.124 0.341 + 451.75 11.752 11.858 11.858 -1.583 0.012 -0.361 -1.583 0.012 -0.004 0.571 -0.019 1.318 0.286 + 451.80 11.803 11.963 11.964 -1.950 0.188 -0.310 -1.950 0.188 -0.058 0.604 -0.366 1.967 0.354 + 451.85 11.828 11.961 11.961 -1.779 0.010 -0.285 -1.779 0.010 -0.003 0.506 -0.018 1.623 0.253 + 451.90 11.821 11.949 11.950 -1.746 0.131 -0.292 -1.746 0.131 -0.038 0.510 -0.229 1.576 0.280 + 451.95 11.867 11.973 11.974 -1.594 0.159 -0.246 -1.594 0.159 -0.039 0.392 -0.254 1.313 0.235 + 452.00 11.567 11.711 11.711 -1.830 0.073 -0.546 -1.830 0.073 -0.040 0.998 -0.134 1.826 0.504 + 452.05 11.560 11.746 11.747 -2.085 0.114 -0.553 -2.085 0.114 -0.063 1.154 -0.237 2.334 0.590 + 452.10 11.634 11.851 11.851 -2.259 0.002 -0.479 -2.259 0.002 -0.001 1.082 -0.005 2.666 0.541 + 452.15 11.476 11.660 11.660 -2.061 -0.117 -0.637 -2.061 -0.117 0.075 1.312 0.242 2.333 0.668 + 452.20 11.454 11.632 11.632 -2.027 -0.061 -0.659 -2.027 -0.061 0.040 1.336 0.124 2.274 0.671 + 452.25 11.553 11.768 11.770 -2.242 -0.226 -0.560 -2.242 -0.226 0.127 1.256 0.508 2.695 0.680 + 452.30 11.637 11.826 11.841 -2.107 -0.590 -0.476 -2.107 -0.590 0.281 1.003 1.242 2.506 0.810 + 452.35 11.814 11.998 12.025 -2.094 -0.808 -0.299 -2.094 -0.808 0.242 0.627 1.691 2.564 0.910 + 452.40 11.914 12.107 12.117 -2.154 -0.490 -0.199 -2.154 -0.490 0.097 0.428 1.055 2.459 0.571 + 452.45 12.078 12.369 12.393 -2.665 -0.785 -0.035 -2.665 -0.785 0.027 0.093 2.092 3.860 1.047 + 452.50 12.375 12.646 12.655 -2.606 -0.452 0.262 -2.606 -0.452 -0.119 -0.683 1.179 3.532 0.684 + 452.55 12.301 12.527 12.534 -2.369 -0.402 0.188 -2.369 -0.402 -0.076 -0.446 0.953 2.906 0.527 + 452.60 12.439 12.710 12.728 -2.612 -0.669 0.326 -2.612 -0.669 -0.218 -0.852 1.749 3.689 0.979 + 452.65 12.158 12.508 12.541 -2.938 -0.903 0.045 -2.938 -0.903 -0.041 -0.134 2.654 4.725 1.329 + 452.70 12.340 12.628 12.653 -2.683 -0.800 0.227 -2.683 -0.800 -0.181 -0.608 2.146 3.944 1.119 + 452.75 12.254 12.547 12.560 -2.697 -0.563 0.141 -2.697 -0.563 -0.079 -0.381 1.518 3.806 0.784 + 452.80 12.172 12.544 12.550 -3.034 -0.387 0.059 -3.034 -0.387 -0.023 -0.178 1.175 4.680 0.594 + 452.85 12.167 12.524 12.526 -2.967 -0.272 0.054 -2.967 -0.272 -0.015 -0.161 0.808 4.440 0.412 + 452.90 12.117 12.466 12.473 -2.928 -0.413 0.004 -2.928 -0.413 -0.002 -0.013 1.210 4.373 0.605 + 452.95 12.356 12.705 12.712 -2.958 -0.418 0.243 -2.958 -0.418 -0.102 -0.720 1.237 4.492 0.717 + 453.00 12.419 12.803 12.806 -3.112 -0.265 0.306 -3.112 -0.265 -0.081 -0.953 0.824 4.924 0.631 + 453.05 12.636 13.020 13.030 -3.138 -0.496 0.524 -3.138 -0.496 -0.260 -1.643 1.558 5.182 1.139 + 453.10 12.488 12.936 12.938 -3.374 -0.226 0.375 -3.374 -0.226 -0.085 -1.266 0.762 5.787 0.740 + 453.15 12.557 12.932 12.932 -3.093 -0.078 0.444 -3.093 -0.078 -0.035 -1.372 0.241 4.883 0.697 + 453.20 12.485 12.810 12.810 -2.863 0.138 0.373 -2.863 0.138 0.052 -1.067 -0.396 4.178 0.570 + 453.25 12.228 12.519 12.530 -2.683 0.517 0.116 -2.683 0.517 0.060 -0.310 -1.387 3.741 0.711 + 453.30 12.121 12.407 12.428 -2.649 0.722 0.008 -2.649 0.722 0.006 -0.021 -1.913 3.769 0.957 + 453.35 12.198 12.507 12.529 -2.764 0.741 0.085 -2.764 0.741 0.063 -0.235 -2.048 4.098 1.031 + 453.40 12.503 12.859 12.862 -3.006 0.249 0.390 -3.006 0.249 0.097 -1.174 -0.747 4.626 0.697 + 453.45 12.402 12.763 12.764 -3.014 0.121 0.289 -3.014 0.121 0.035 -0.872 -0.365 4.591 0.473 + 453.50 12.032 12.329 12.329 -2.692 0.019 -0.081 -2.692 0.019 -0.002 0.218 -0.050 3.626 0.112 + 453.55 11.985 12.269 12.269 -2.620 -0.131 -0.127 -2.620 -0.131 0.017 0.334 0.342 3.449 0.239 + 453.60 11.927 12.253 12.254 -2.809 0.170 -0.186 -2.809 0.170 -0.032 0.523 -0.478 3.977 0.354 + 453.65 12.090 12.321 12.328 -2.371 0.430 -0.022 -2.371 0.430 -0.010 0.053 -1.019 2.903 0.510 + 453.70 12.251 12.521 12.534 -2.589 0.561 0.138 -2.589 0.561 0.077 -0.357 -1.454 3.520 0.749 + 453.75 12.258 12.461 12.468 -2.242 0.415 0.145 -2.242 0.415 0.060 -0.326 -0.931 2.609 0.494 + 453.80 12.460 12.734 12.754 -2.626 0.708 0.347 -2.626 0.708 0.246 -0.912 -1.860 3.759 1.043 + 453.85 12.314 12.569 12.605 -2.524 0.940 0.201 -2.524 0.940 0.189 -0.507 -2.374 3.647 1.217 + 453.90 12.140 12.322 12.382 -2.113 1.214 0.027 -2.113 1.214 0.033 -0.057 -2.566 2.971 1.283 + 453.95 12.348 12.491 12.571 -1.886 1.415 0.235 -1.886 1.415 0.332 -0.443 -2.670 2.808 1.363 + 454.00 12.307 12.539 12.577 -2.404 0.975 0.194 -2.404 0.975 0.189 -0.466 -2.343 3.383 1.198 + 454.05 12.266 12.462 12.494 -2.203 0.898 0.153 -2.203 0.898 0.137 -0.336 -1.979 2.842 1.006 + 454.10 12.139 12.358 12.393 -2.316 0.932 0.026 -2.316 0.932 0.025 -0.061 -2.159 3.117 1.080 + 454.15 11.916 12.153 12.228 -2.389 1.351 -0.197 -2.389 1.351 -0.266 0.470 -3.227 3.786 1.636 + 454.20 11.937 12.156 12.227 -2.296 1.310 -0.175 -2.296 1.310 -0.230 0.403 -3.008 3.509 1.522 + 454.25 12.092 12.312 12.367 -2.316 1.171 -0.021 -2.316 1.171 -0.024 0.048 -2.713 3.368 1.357 + 454.30 12.122 12.354 12.413 -2.380 1.213 0.010 -2.380 1.213 0.012 -0.023 -2.886 3.567 1.443 + 454.35 12.218 12.444 12.507 -2.359 1.262 0.105 -2.359 1.262 0.133 -0.248 -2.976 3.583 1.495 + 454.40 12.275 12.508 12.561 -2.402 1.157 0.162 -2.402 1.157 0.188 -0.390 -2.777 3.566 1.406 + 454.45 12.221 12.450 12.542 -2.377 1.514 0.108 -2.377 1.514 0.164 -0.258 -3.598 3.976 1.805 + 454.50 12.457 12.639 12.715 -2.140 1.385 0.344 -2.140 1.385 0.476 -0.736 -2.964 3.308 1.545 + 454.55 12.674 12.832 12.895 -2.009 1.274 0.561 -2.009 1.274 0.715 -1.127 -2.560 2.987 1.443 + 454.60 12.857 12.987 13.034 -1.832 1.112 0.744 -1.832 1.112 0.827 -1.363 -2.037 2.573 1.293 + 454.65 12.543 12.721 12.758 -2.122 0.960 0.430 -2.122 0.960 0.413 -0.913 -2.036 2.805 1.135 + 454.70 12.219 12.485 12.528 -2.565 1.033 0.106 -2.565 1.033 0.110 -0.272 -2.650 3.828 1.333 + 454.75 12.275 12.536 12.593 -2.544 1.201 0.162 -2.544 1.201 0.195 -0.413 -3.056 3.970 1.545 + 454.80 12.341 12.570 12.640 -2.389 1.327 0.228 -2.389 1.327 0.303 -0.546 -3.170 3.760 1.616 + 454.85 12.274 12.467 12.540 -2.184 1.352 0.161 -2.184 1.352 0.218 -0.352 -2.954 3.313 1.492 + 454.90 12.574 12.758 12.810 -2.159 1.155 0.461 -2.159 1.155 0.532 -0.995 -2.493 3.103 1.368 + 454.95 12.411 12.591 12.635 -2.120 1.055 0.298 -2.120 1.055 0.315 -0.632 -2.237 2.849 1.173 + 455.00 12.587 12.899 12.914 -2.820 0.630 0.474 -2.820 0.630 0.299 -1.337 -1.775 4.286 1.121 + 455.05 12.724 13.059 13.078 -2.942 0.693 0.611 -2.942 0.693 0.423 -1.797 -2.040 4.756 1.376 + 455.10 12.362 12.677 12.715 -2.807 0.979 0.249 -2.807 0.979 0.244 -0.700 -2.749 4.450 1.424 + 455.15 12.214 12.631 12.683 -3.219 1.155 0.101 -3.219 1.155 0.117 -0.325 -3.717 5.853 1.867 + 455.20 12.228 12.658 12.714 -3.270 1.195 0.115 -3.270 1.195 0.138 -0.376 -3.909 6.069 1.965 + 455.25 12.278 12.608 12.657 -2.867 1.105 0.165 -2.867 1.105 0.182 -0.473 -3.167 4.734 1.604 + 455.30 12.355 12.614 12.666 -2.542 1.146 0.242 -2.542 1.146 0.278 -0.616 -2.913 3.916 1.495 + 455.35 12.204 12.497 12.532 -2.690 0.942 0.091 -2.690 0.942 0.086 -0.245 -2.535 4.067 1.274 + 455.40 12.268 12.562 12.610 -2.698 1.109 0.156 -2.698 1.109 0.172 -0.420 -2.991 4.266 1.513 + 455.45 12.319 12.561 12.604 -2.453 1.041 0.206 -2.453 1.041 0.215 -0.506 -2.554 3.573 1.306 + 455.50 12.172 12.420 12.497 -2.467 1.385 0.060 -2.467 1.385 0.083 -0.147 -3.416 4.003 1.710 + 455.55 11.983 12.217 12.332 -2.378 1.682 -0.130 -2.378 1.682 -0.218 0.309 -3.998 4.249 2.008 + 455.60 12.133 12.391 12.483 -2.517 1.509 0.020 -2.517 1.509 0.031 -0.051 -3.797 4.305 1.899 + 455.65 11.992 12.205 12.289 -2.271 1.433 -0.121 -2.271 1.433 -0.173 0.274 -3.254 3.613 1.635 + 455.70 11.693 11.877 11.921 -2.079 1.028 -0.419 -2.079 1.028 -0.431 0.872 -2.137 2.778 1.174 + 455.75 11.888 12.083 12.110 -2.165 0.802 -0.225 -2.165 0.802 -0.180 0.487 -1.736 2.691 0.906 + 455.80 12.004 12.143 12.201 -1.835 1.186 -0.109 -1.835 1.186 -0.129 0.200 -2.177 2.394 1.095 + 455.85 11.749 11.947 11.981 -2.162 0.905 -0.364 -2.162 0.905 -0.329 0.786 -1.956 2.813 1.067 + 455.90 11.694 11.886 11.906 -2.129 0.687 -0.419 -2.129 0.687 -0.288 0.892 -1.462 2.591 0.868 + 455.95 11.659 11.901 11.911 -2.387 0.480 -0.454 -2.387 0.480 -0.218 1.083 -1.146 3.068 0.796 + 456.00 11.209 11.500 11.524 -2.567 0.753 -0.903 -2.567 0.753 -0.680 2.318 -1.933 3.985 1.547 + 456.05 11.261 11.530 11.557 -2.475 0.782 -0.851 -2.475 0.782 -0.666 2.107 -1.936 3.731 1.469 + 456.10 11.367 11.672 11.685 -2.653 0.542 -0.746 -2.653 0.542 -0.404 1.979 -1.438 3.943 1.240 + 456.15 11.656 11.962 11.962 -2.690 -0.052 -0.457 -2.690 -0.052 0.024 1.229 0.141 3.724 0.619 + 456.20 11.742 12.028 12.030 -2.605 -0.234 -0.371 -2.605 -0.234 0.087 0.966 0.610 3.489 0.573 + 456.25 11.699 11.958 11.959 -2.477 -0.172 -0.414 -2.477 -0.172 0.071 1.026 0.427 3.169 0.557 + 456.30 11.493 11.708 11.708 -2.233 -0.081 -0.620 -2.233 -0.081 0.050 1.385 0.180 2.689 0.699 + 456.35 11.404 11.593 11.593 -2.082 0.032 -0.709 -2.082 0.032 -0.023 1.475 -0.067 2.419 0.739 + 456.40 11.132 11.281 11.281 -1.829 -0.050 -0.981 -1.829 -0.050 0.049 1.794 0.091 2.154 0.898 + 456.45 11.424 11.569 11.575 -1.826 -0.366 -0.689 -1.826 -0.366 0.252 1.258 0.668 1.971 0.723 + 456.50 11.435 11.592 11.593 -1.901 -0.109 -0.677 -1.901 -0.109 0.074 1.288 0.207 2.043 0.653 + 456.55 11.257 11.423 11.424 -1.944 0.105 -0.856 -1.944 0.105 -0.090 1.665 -0.203 2.262 0.840 + 456.60 11.197 11.386 11.386 -2.065 0.068 -0.916 -2.065 0.068 -0.063 1.892 -0.141 2.554 0.949 + 456.65 11.091 11.244 11.255 -1.850 0.486 -1.022 -1.850 0.486 -0.497 1.890 -0.899 2.351 1.076 + 456.70 11.414 11.555 11.559 -1.803 0.292 -0.699 -1.803 0.292 -0.204 1.260 -0.527 1.911 0.690 + 456.75 11.322 11.482 11.484 -1.913 0.198 -0.791 -1.913 0.198 -0.157 1.513 -0.380 2.162 0.784 + 456.80 11.338 11.444 11.444 -1.555 0.017 -0.775 -1.555 0.017 -0.013 1.205 -0.026 1.510 0.603 + 456.85 11.432 11.496 11.496 -1.209 0.071 -0.681 -1.209 0.071 -0.049 0.823 -0.086 0.965 0.414 + 456.90 11.343 11.427 11.428 -1.383 0.081 -0.770 -1.383 0.081 -0.063 1.065 -0.113 1.256 0.536 + 456.95 11.162 11.250 11.254 -1.399 0.307 -0.951 -1.399 0.307 -0.291 1.330 -0.429 1.477 0.714 + 457.00 10.822 10.921 10.921 -1.467 0.140 -1.291 -1.467 0.140 -0.181 1.895 -0.205 1.920 0.957 + 457.05 11.058 11.123 11.123 -1.197 -0.046 -1.055 -1.197 -0.046 0.049 1.262 0.056 1.273 0.632 + 457.10 11.071 11.111 11.111 -0.939 0.037 -1.042 -0.939 0.037 -0.038 0.978 -0.034 0.984 0.490 + 457.15 11.186 11.214 11.214 -0.796 -0.019 -0.927 -0.796 -0.019 0.018 0.738 0.015 0.747 0.369 + 457.20 11.247 11.260 11.262 -0.531 0.202 -0.866 -0.531 0.202 -0.175 0.460 -0.107 0.536 0.252 + 457.25 11.430 11.456 11.466 -0.765 0.491 -0.683 -0.765 0.491 -0.335 0.522 -0.375 0.646 0.363 + 457.30 11.166 11.191 11.199 -0.738 0.423 -0.946 -0.738 0.423 -0.400 0.698 -0.312 0.809 0.431 + 457.35 10.993 11.012 11.020 -0.644 0.425 -1.119 -0.644 0.425 -0.476 0.721 -0.274 0.925 0.453 + 457.40 10.604 10.645 10.662 -0.939 0.602 -1.509 -0.939 0.602 -0.909 1.417 -0.565 1.760 0.888 + 457.45 10.469 10.505 10.524 -0.876 0.633 -1.644 -0.876 0.633 -1.041 1.440 -0.555 1.936 0.931 + 457.50 10.504 10.537 10.586 -0.829 1.020 -1.609 -0.829 1.020 -1.641 1.334 -0.846 2.158 1.139 + 457.55 10.515 10.561 10.625 -0.987 1.169 -1.598 -0.987 1.169 -1.869 1.577 -1.153 2.447 1.352 + 457.60 10.562 10.582 10.633 -0.651 1.033 -1.551 -0.651 1.033 -1.602 1.009 -0.672 1.948 1.005 + 457.65 10.354 10.375 10.426 -0.649 1.036 -1.758 -0.649 1.036 -1.822 1.142 -0.673 2.293 1.126 + 457.70 10.537 10.550 10.585 -0.523 0.862 -1.576 -0.523 0.862 -1.359 0.825 -0.451 1.751 0.826 + 457.75 10.650 10.663 10.681 -0.522 0.611 -1.463 -0.522 0.611 -0.893 0.764 -0.319 1.392 0.609 + 457.80 10.776 10.804 10.867 -0.779 1.163 -1.337 -0.779 1.163 -1.554 1.041 -0.906 1.873 1.039 + 457.85 10.938 10.946 11.007 -0.421 1.154 -1.175 -0.421 1.154 -1.356 0.495 -0.486 1.445 0.761 + 457.90 10.805 10.812 10.852 -0.398 0.934 -1.308 -0.398 0.934 -1.222 0.520 -0.372 1.371 0.690 + 457.95 10.821 10.842 10.846 -0.671 0.322 -1.292 -0.671 0.322 -0.416 0.867 -0.216 1.111 0.493 + 458.00 10.976 11.000 11.002 -0.733 0.226 -1.137 -0.733 0.226 -0.257 0.833 -0.165 0.940 0.444 + 458.05 10.989 11.016 11.019 -0.764 0.252 -1.123 -0.764 0.252 -0.283 0.859 -0.193 0.955 0.462 + 458.10 10.873 10.889 10.890 -0.595 -0.117 -1.240 -0.595 -0.117 0.145 0.737 0.069 0.952 0.377 + 458.15 11.104 11.120 11.122 -0.585 -0.235 -1.008 -0.585 -0.235 0.237 0.590 0.137 0.707 0.325 + 458.20 11.156 11.162 11.162 -0.351 0.008 -0.957 -0.351 0.008 -0.007 0.336 -0.003 0.519 0.168 + 458.25 11.074 11.093 11.095 -0.649 0.217 -1.039 -0.649 0.217 -0.225 0.674 -0.141 0.774 0.362 + 458.30 11.030 11.045 11.045 -0.568 0.065 -1.082 -0.568 0.065 -0.071 0.615 -0.037 0.749 0.310 + 458.35 11.289 11.311 11.312 -0.719 -0.035 -0.824 -0.719 -0.035 0.029 0.592 0.025 0.598 0.297 + 458.40 11.466 11.479 11.484 -0.529 -0.339 -0.646 -0.529 -0.339 0.219 0.342 0.179 0.406 0.222 + 458.45 11.385 11.398 11.402 -0.526 -0.333 -0.727 -0.526 -0.333 0.242 0.383 0.175 0.458 0.243 + 458.50 11.343 11.355 11.361 -0.531 -0.353 -0.770 -0.531 -0.353 0.272 0.409 0.187 0.500 0.263 + 458.55 11.407 11.413 11.416 -0.387 -0.242 -0.706 -0.387 -0.242 0.171 0.273 0.094 0.354 0.168 + 458.60 11.255 11.276 11.284 -0.695 -0.429 -0.858 -0.695 -0.429 0.368 0.597 0.298 0.702 0.381 + 458.65 11.366 11.386 11.409 -0.661 -0.734 -0.747 -0.661 -0.734 0.548 0.494 0.485 0.767 0.442 + 458.70 11.500 11.512 11.522 -0.531 -0.492 -0.613 -0.531 -0.492 0.302 0.326 0.261 0.450 0.258 + 458.75 11.185 11.207 11.236 -0.717 -0.804 -0.928 -0.717 -0.804 0.746 0.665 0.576 1.011 0.577 + 458.80 11.167 11.206 11.219 -0.935 -0.546 -0.946 -0.935 -0.546 0.516 0.884 0.510 1.033 0.572 + 458.85 11.510 11.560 11.577 -1.072 -0.629 -0.603 -1.072 -0.629 0.379 0.646 0.675 0.955 0.504 + 458.90 11.604 11.623 11.642 -0.666 -0.669 -0.509 -0.666 -0.669 0.341 0.339 0.446 0.576 0.328 + 458.95 11.681 11.684 11.708 -0.290 -0.751 -0.432 -0.290 -0.751 0.324 0.126 0.218 0.417 0.205 + 459.00 11.633 11.634 11.648 -0.145 -0.575 -0.480 -0.145 -0.575 0.276 0.069 0.083 0.291 0.148 + 459.05 11.726 11.727 11.741 -0.187 -0.571 -0.387 -0.187 -0.571 0.221 0.072 0.107 0.256 0.128 + 459.10 11.645 11.662 11.673 -0.628 -0.494 -0.468 -0.628 -0.494 0.231 0.294 0.310 0.429 0.243 + 459.15 11.539 11.551 11.554 -0.534 -0.274 -0.574 -0.534 -0.274 0.157 0.306 0.146 0.345 0.187 + 459.20 11.480 11.480 11.496 -0.099 -0.606 -0.633 -0.099 -0.606 0.384 0.063 0.060 0.389 0.197 + 459.25 11.612 11.620 11.647 -0.405 -0.797 -0.500 -0.405 -0.797 0.399 0.203 0.323 0.525 0.276 + 459.30 11.669 11.673 11.687 -0.270 -0.583 -0.443 -0.270 -0.583 0.258 0.120 0.157 0.304 0.163 + 459.35 11.673 11.686 11.721 -0.538 -0.916 -0.440 -0.538 -0.916 0.403 0.237 0.493 0.661 0.340 + 459.40 11.672 11.687 11.747 -0.592 -1.178 -0.440 -0.592 -1.178 0.519 0.261 0.698 0.966 0.454 + 459.45 11.533 11.541 11.610 -0.439 -1.263 -0.580 -0.439 -1.263 0.732 0.254 0.554 1.062 0.476 + 459.50 11.696 11.705 11.826 -0.463 -1.688 -0.417 -0.463 -1.688 0.704 0.193 0.781 1.619 0.534 + 459.55 11.869 11.881 11.986 -0.533 -1.580 -0.244 -0.533 -1.580 0.385 0.130 0.842 1.420 0.468 + 459.60 12.102 12.112 12.225 -0.502 -1.660 -0.011 -0.502 -1.660 0.018 0.006 0.834 1.503 0.417 + 459.65 12.221 12.227 12.322 -0.385 -1.530 0.108 -0.385 -1.530 -0.165 -0.042 0.589 1.251 0.307 + 459.70 12.115 12.128 12.192 -0.554 -1.252 0.002 -0.554 -1.252 -0.003 -0.001 0.694 0.937 0.347 + 459.75 12.293 12.331 12.397 -0.966 -1.275 0.180 -0.966 -1.275 -0.230 -0.174 1.232 1.296 0.633 + 459.80 12.241 12.268 12.396 -0.816 -1.774 0.128 -0.816 -1.774 -0.228 -0.105 1.448 1.914 0.735 + 459.85 12.065 12.075 12.176 -0.489 -1.567 -0.047 -0.489 -1.567 0.074 0.023 0.766 1.348 0.385 + 459.90 12.050 12.060 12.098 -0.488 -0.954 -0.063 -0.488 -0.954 0.060 0.031 0.466 0.577 0.235 + 459.95 11.953 11.963 12.002 -0.505 -0.965 -0.160 -0.505 -0.965 0.154 0.081 0.487 0.605 0.258 + 460.00 11.972 11.990 12.050 -0.650 -1.200 -0.140 -0.650 -1.200 0.169 0.091 0.780 0.941 0.402 + 460.05 11.800 11.830 11.869 -0.848 -0.962 -0.313 -0.848 -0.962 0.301 0.265 0.816 0.872 0.455 + 460.10 11.659 11.672 11.686 -0.544 -0.583 -0.454 -0.544 -0.583 0.264 0.247 0.317 0.421 0.241 + 460.15 11.829 11.833 11.861 -0.322 -0.803 -0.284 -0.322 -0.803 0.228 0.091 0.259 0.414 0.178 + 460.20 11.544 11.547 11.587 -0.266 -0.968 -0.569 -0.266 -0.968 0.551 0.152 0.258 0.666 0.313 + 460.25 11.456 11.461 11.484 -0.331 -0.726 -0.657 -0.331 -0.726 0.477 0.217 0.240 0.534 0.288 + 460.30 11.581 11.581 11.599 -0.000 -0.649 -0.531 -0.000 -0.649 0.345 0.000 0.000 0.352 0.173 + 460.35 11.533 11.533 11.544 0.096 -0.502 -0.580 0.096 -0.502 0.291 -0.056 -0.048 0.299 0.150 + 460.40 11.495 11.497 11.511 0.209 -0.560 -0.618 0.209 -0.560 0.346 -0.129 -0.117 0.369 0.193 + 460.45 11.730 11.730 11.753 -0.097 -0.742 -0.383 -0.097 -0.742 0.284 0.037 0.072 0.354 0.148 + 460.50 11.624 11.631 11.651 -0.401 -0.671 -0.488 -0.401 -0.671 0.328 0.196 0.269 0.425 0.234 + 460.55 11.477 11.502 11.507 -0.763 -0.331 -0.636 -0.763 -0.331 0.210 0.485 0.252 0.548 0.293 + 460.60 11.605 11.608 11.608 -0.249 0.032 -0.507 -0.249 0.032 -0.016 0.127 -0.008 0.160 0.064 + 460.65 11.829 11.839 11.845 -0.479 -0.386 -0.283 -0.479 -0.386 0.109 0.136 0.185 0.229 0.127 + 460.70 12.146 12.154 12.174 -0.438 -0.698 0.033 -0.438 -0.698 -0.023 -0.015 0.305 0.340 0.153 + 460.75 12.340 12.343 12.361 -0.280 -0.673 0.227 -0.280 -0.673 -0.153 -0.064 0.188 0.291 0.125 + 460.80 12.586 12.589 12.610 -0.248 -0.730 0.474 -0.248 -0.730 -0.346 -0.117 0.181 0.410 0.204 + 460.85 12.629 12.635 12.651 -0.399 -0.641 0.516 -0.399 -0.641 -0.331 -0.206 0.256 0.418 0.233 + 460.90 12.906 12.906 12.918 -0.059 -0.566 0.793 -0.059 -0.566 -0.449 -0.047 0.033 0.476 0.226 + 460.95 13.053 13.058 13.080 -0.370 -0.753 0.940 -0.370 -0.753 -0.708 -0.348 0.278 0.794 0.418 + 461.00 12.805 12.807 12.817 -0.240 -0.485 0.692 -0.240 -0.485 -0.336 -0.166 0.116 0.386 0.196 + 461.05 12.594 12.594 12.601 -0.071 -0.420 0.481 -0.071 -0.420 -0.202 -0.034 0.030 0.206 0.103 + 461.10 12.432 12.432 12.439 0.004 -0.417 0.320 0.004 -0.417 -0.133 0.001 -0.002 0.138 0.067 + 461.15 12.424 12.425 12.425 0.167 -0.062 0.311 0.167 -0.062 -0.019 0.052 -0.010 0.064 0.028 + 461.20 12.332 12.333 12.333 0.110 -0.100 0.220 0.110 -0.100 -0.022 0.024 -0.011 0.035 0.017 + 461.25 12.380 12.381 12.384 0.105 0.265 0.268 0.105 0.265 0.071 0.028 0.028 0.076 0.041 + 461.30 12.589 12.589 12.597 0.082 0.434 0.476 0.082 0.434 0.206 0.039 0.036 0.211 0.107 + 461.35 12.553 12.556 12.556 0.304 0.054 0.440 0.304 0.054 0.024 0.134 0.016 0.144 0.068 + 461.40 12.558 12.562 12.564 0.340 0.237 0.445 0.340 0.237 0.106 0.151 0.081 0.185 0.101 + 461.45 12.737 12.739 12.740 0.270 0.127 0.624 0.270 0.127 0.079 0.168 0.034 0.239 0.095 + 461.50 12.739 12.746 12.747 0.432 -0.116 0.626 0.432 -0.116 -0.072 0.270 -0.050 0.296 0.142 + 461.55 12.884 12.898 12.915 0.606 -0.662 0.771 0.606 -0.662 -0.511 0.468 -0.401 0.700 0.400 + 461.60 12.954 12.957 12.971 0.305 -0.591 0.841 0.305 -0.591 -0.497 0.256 -0.180 0.574 0.294 + 461.65 12.825 12.828 12.829 0.257 -0.152 0.712 0.257 -0.152 -0.108 0.183 -0.039 0.298 0.108 + 461.70 12.649 12.654 12.654 0.356 -0.083 0.536 0.356 -0.083 -0.044 0.191 -0.029 0.211 0.099 + 461.75 12.239 12.239 12.241 -0.017 -0.168 0.127 -0.017 -0.168 -0.021 -0.002 0.003 0.022 0.011 + 461.80 12.095 12.095 12.097 0.048 -0.214 -0.018 0.048 -0.214 0.004 -0.001 -0.010 0.024 0.005 + 461.85 11.958 11.959 11.959 0.146 0.021 -0.155 0.146 0.021 -0.003 -0.023 0.003 0.023 0.012 + 461.90 11.855 11.858 11.865 0.269 -0.416 -0.258 0.269 -0.416 0.107 -0.069 -0.112 0.156 0.085 + 461.95 11.873 11.875 11.875 0.236 -0.067 -0.240 0.236 -0.067 0.016 -0.057 -0.016 0.059 0.031 + 462.00 12.061 12.061 12.062 0.040 -0.085 -0.052 0.040 -0.085 0.004 -0.002 -0.003 0.006 0.003 + 462.05 12.126 12.127 12.129 -0.184 0.190 0.013 -0.184 0.190 0.002 -0.002 -0.035 0.035 0.018 + 462.10 12.136 12.140 12.140 -0.290 0.058 0.023 -0.290 0.058 0.001 -0.007 -0.017 0.044 0.009 + 462.15 12.233 12.234 12.234 -0.139 -0.131 0.120 -0.139 -0.131 -0.016 -0.017 0.018 0.025 0.015 + 462.20 12.536 12.538 12.538 -0.199 0.021 0.423 -0.199 0.021 0.009 -0.084 -0.004 0.110 0.042 + 462.25 12.434 12.443 12.443 -0.478 0.053 0.321 -0.478 0.053 0.017 -0.153 -0.025 0.167 0.078 + 462.30 12.331 12.338 12.342 -0.423 0.300 0.218 -0.423 0.300 0.065 -0.092 -0.127 0.158 0.085 + 462.35 12.075 12.075 12.080 -0.097 0.342 -0.038 -0.097 0.342 -0.013 0.004 -0.033 0.064 0.018 + 462.40 12.248 12.248 12.251 -0.086 0.243 0.135 -0.086 0.243 0.033 -0.012 -0.021 0.042 0.020 + 462.45 12.316 12.317 12.318 0.156 -0.135 0.203 0.156 -0.135 -0.027 0.032 -0.021 0.042 0.023 + 462.50 12.277 12.281 12.281 0.299 0.065 0.165 0.299 0.065 0.011 0.049 0.020 0.060 0.027 + 462.55 12.181 12.182 12.182 0.155 0.105 0.068 0.155 0.105 0.007 0.011 0.016 0.020 0.010 + 462.60 12.257 12.259 12.268 -0.209 0.468 0.145 -0.209 0.468 0.068 -0.030 -0.098 0.142 0.061 + 462.65 12.408 12.410 12.439 -0.231 0.850 0.295 -0.231 0.850 0.251 -0.068 -0.197 0.432 0.163 + 462.70 12.436 12.436 12.486 -0.113 1.112 0.323 -0.113 1.112 0.359 -0.036 -0.125 0.677 0.191 + 462.75 12.377 12.377 12.395 0.009 0.669 0.264 0.009 0.669 0.177 0.002 0.006 0.259 0.088 + 462.80 12.266 12.266 12.286 0.067 0.710 0.153 0.067 0.710 0.108 0.010 0.048 0.266 0.059 + 462.85 12.416 12.426 12.438 0.491 0.548 0.303 0.491 0.548 0.166 0.149 0.269 0.316 0.175 + 462.90 12.360 12.404 12.404 1.033 0.019 0.248 1.033 0.019 0.005 0.256 0.020 0.564 0.128 + 462.95 12.249 12.300 12.300 1.119 0.141 0.136 1.119 0.141 0.019 0.152 0.158 0.645 0.110 + 463.00 12.242 12.262 12.265 0.708 0.255 0.129 0.708 0.255 0.033 0.091 0.180 0.291 0.102 + 463.05 12.307 12.309 12.310 0.179 0.207 0.194 0.179 0.207 0.040 0.035 0.037 0.056 0.032 + 463.10 12.535 12.536 12.536 -0.166 0.076 0.422 -0.166 0.076 0.032 -0.070 -0.013 0.106 0.039 + 463.15 12.839 12.840 12.841 0.178 0.149 0.726 0.178 0.149 0.108 0.129 0.026 0.290 0.085 + 463.20 12.872 12.875 12.875 0.266 -0.084 0.759 0.266 -0.084 -0.063 0.202 -0.022 0.327 0.107 + 463.25 12.839 12.841 12.842 0.255 -0.130 0.726 0.255 -0.130 -0.094 0.185 -0.033 0.304 0.105 + 463.30 12.868 12.871 12.871 0.278 0.031 0.755 0.278 0.031 0.023 0.210 0.009 0.324 0.106 + 463.35 12.923 12.931 12.937 0.463 0.382 0.810 0.463 0.382 0.310 0.375 0.177 0.508 0.259 + 463.40 12.654 12.658 12.661 0.330 0.272 0.541 0.330 0.272 0.147 0.179 0.090 0.238 0.124 + 463.45 12.867 12.868 12.872 -0.037 0.339 0.755 -0.037 0.339 0.256 -0.028 -0.012 0.343 0.129 + 463.50 12.838 12.840 12.849 0.238 0.480 0.725 0.238 0.480 0.348 0.172 0.114 0.406 0.202 + 463.55 12.842 12.851 12.858 0.495 0.406 0.729 0.495 0.406 0.296 0.361 0.201 0.471 0.254 + 463.60 12.689 12.700 12.723 0.507 0.768 0.577 0.507 0.768 0.443 0.292 0.389 0.590 0.329 + 463.65 12.501 12.513 12.523 0.551 0.486 0.389 0.551 0.486 0.189 0.214 0.268 0.345 0.196 + 463.70 12.300 12.318 12.343 0.662 0.792 0.187 0.662 0.792 0.148 0.124 0.525 0.551 0.280 + 463.75 12.356 12.387 12.430 0.868 1.034 0.244 0.868 1.034 0.252 0.211 0.897 0.940 0.478 + 463.80 12.456 12.472 12.512 0.619 1.008 0.344 0.619 1.008 0.346 0.213 0.624 0.758 0.372 + 463.85 12.453 12.465 12.483 0.559 0.661 0.340 0.559 0.661 0.225 0.190 0.369 0.432 0.236 + 463.90 12.478 12.497 12.501 0.691 0.332 0.365 0.691 0.332 0.121 0.252 0.229 0.360 0.181 + 463.95 12.761 12.785 12.785 0.784 0.097 0.648 0.784 0.097 0.063 0.508 0.076 0.522 0.259 + 464.00 12.673 12.683 12.698 0.494 0.628 0.560 0.494 0.628 0.351 0.277 0.310 0.476 0.272 + 464.05 12.543 12.544 12.576 0.139 0.900 0.430 0.139 0.900 0.387 0.060 0.125 0.507 0.206 + 464.10 12.621 12.629 12.663 0.450 0.937 0.508 0.450 0.937 0.476 0.229 0.422 0.670 0.338 + 464.15 12.517 12.523 12.579 0.383 1.183 0.404 0.383 1.183 0.478 0.155 0.453 0.855 0.338 + 464.20 12.925 12.927 12.953 0.210 0.816 0.813 0.210 0.816 0.663 0.171 0.172 0.686 0.353 + 464.25 13.031 13.031 13.052 0.082 0.737 0.918 0.082 0.737 0.676 0.075 0.061 0.696 0.342 + 464.30 13.104 13.107 13.123 0.279 0.644 0.991 0.279 0.644 0.638 0.277 0.180 0.737 0.359 + 464.35 13.390 13.390 13.399 -0.002 0.483 1.277 -0.002 0.483 0.616 -0.003 -0.001 0.932 0.308 + 464.40 13.182 13.183 13.204 0.116 0.752 1.069 0.116 0.752 0.804 0.124 0.087 0.861 0.409 + 464.45 13.002 13.002 13.022 0.004 0.721 0.890 0.004 0.721 0.641 0.003 0.003 0.656 0.321 + 464.50 12.965 12.965 12.973 0.007 0.477 0.852 0.007 0.477 0.407 0.006 0.003 0.477 0.203 + 464.55 12.971 12.972 12.975 0.155 0.285 0.858 0.155 0.285 0.244 0.133 0.044 0.421 0.141 + 464.60 13.023 13.024 13.043 -0.132 0.703 0.910 -0.132 0.703 0.640 -0.120 -0.093 0.670 0.329 + 464.65 12.919 12.920 12.942 0.163 0.749 0.806 0.163 0.749 0.604 0.132 0.122 0.619 0.315 + 464.70 12.950 12.950 12.969 -0.044 0.701 0.837 -0.044 0.701 0.587 -0.037 -0.031 0.597 0.294 + 464.75 12.812 12.812 12.843 -0.112 0.893 0.699 -0.112 0.893 0.624 -0.078 -0.100 0.649 0.319 + 464.80 12.939 12.943 12.980 0.350 0.972 0.826 0.350 0.972 0.803 0.289 0.341 0.875 0.459 + 464.85 12.718 12.729 12.742 0.521 0.577 0.605 0.521 0.577 0.349 0.316 0.301 0.486 0.279 + 464.90 12.663 12.689 12.699 0.802 0.509 0.551 0.802 0.509 0.280 0.442 0.408 0.603 0.332 + 464.95 12.677 12.697 12.719 0.716 0.746 0.564 0.716 0.746 0.421 0.404 0.534 0.693 0.395 + 465.00 12.546 12.557 12.596 0.518 1.001 0.433 0.518 1.001 0.434 0.224 0.519 0.729 0.356 + 465.05 12.442 12.455 12.490 0.563 0.933 0.329 0.563 0.933 0.307 0.185 0.525 0.648 0.318 + 465.10 12.273 12.292 12.332 0.681 0.990 0.160 0.681 0.990 0.158 0.109 0.674 0.735 0.351 + 465.15 12.364 12.396 12.425 0.893 0.846 0.251 0.893 0.846 0.212 0.224 0.755 0.788 0.408 + 465.20 12.398 12.445 12.474 1.081 0.855 0.285 1.081 0.855 0.243 0.308 0.924 0.990 0.502 + 465.25 12.502 12.559 12.577 1.197 0.680 0.389 1.197 0.680 0.264 0.465 0.813 1.023 0.487 + 465.30 12.540 12.597 12.617 1.191 0.725 0.427 1.191 0.725 0.310 0.509 0.863 1.063 0.525 + 465.35 12.737 12.803 12.842 1.303 1.001 0.624 1.303 1.001 0.625 0.813 1.304 1.545 0.830 + 465.40 12.549 12.611 12.658 1.241 1.090 0.437 1.241 1.090 0.476 0.542 1.353 1.460 0.767 + 465.45 12.437 12.510 12.559 1.356 1.103 0.324 1.356 1.103 0.357 0.439 1.496 1.581 0.800 + 465.50 12.620 12.693 12.747 1.358 1.168 0.507 1.358 1.168 0.593 0.689 1.587 1.734 0.915 + 465.55 12.669 12.725 12.810 1.197 1.477 0.556 1.197 1.477 0.821 0.665 1.768 1.962 1.030 + 465.60 12.605 12.655 12.717 1.120 1.256 0.492 1.120 1.256 0.618 0.552 1.407 1.537 0.816 + 465.65 12.824 12.853 12.887 0.858 0.941 0.711 0.858 0.941 0.669 0.610 0.807 1.064 0.607 + 465.70 12.669 12.687 12.736 0.685 1.107 0.556 0.685 1.107 0.616 0.381 0.758 1.002 0.524 + 465.75 12.693 12.696 12.775 0.270 1.420 0.580 0.270 1.420 0.823 0.157 0.384 1.213 0.461 + 465.80 12.471 12.476 12.637 0.369 2.010 0.358 0.369 2.010 0.720 0.132 0.742 2.153 0.521 + 465.85 12.554 12.563 12.666 0.476 1.605 0.442 0.476 1.605 0.709 0.210 0.764 1.499 0.532 + 465.90 12.468 12.471 12.620 0.285 1.932 0.355 0.285 1.932 0.686 0.101 0.551 1.970 0.443 + 465.95 12.233 12.243 12.350 0.515 1.619 0.120 0.515 1.619 0.194 0.062 0.833 1.450 0.429 + 466.00 12.168 12.192 12.292 0.754 1.571 0.056 0.754 1.571 0.087 0.042 1.184 1.519 0.594 + 466.05 12.224 12.232 12.306 0.430 1.347 0.112 0.430 1.347 0.150 0.048 0.580 1.006 0.300 + 466.10 11.941 11.949 12.031 0.425 1.407 -0.172 0.425 1.407 -0.241 -0.073 0.598 1.094 0.324 + 466.15 12.028 12.032 12.157 0.322 1.737 -0.085 0.322 1.737 -0.148 -0.027 0.560 1.564 0.290 + 466.20 12.077 12.088 12.181 0.514 1.497 -0.035 0.514 1.497 -0.053 -0.018 0.770 1.254 0.386 + 466.25 12.207 12.207 12.288 0.077 1.410 0.094 0.077 1.410 0.132 0.007 0.109 1.002 0.086 + 466.30 12.122 12.124 12.191 -0.235 1.274 0.009 -0.235 1.274 0.012 -0.002 -0.299 0.839 0.150 + 466.35 12.219 12.219 12.301 0.074 1.411 0.106 0.074 1.411 0.150 0.008 0.104 1.004 0.091 + 466.40 12.383 12.386 12.480 -0.278 1.529 0.270 -0.278 1.529 0.413 -0.075 -0.426 1.245 0.299 + 466.45 12.678 12.685 12.727 -0.419 1.036 0.565 -0.419 1.036 0.586 -0.237 -0.434 0.784 0.383 + 466.50 12.676 12.681 12.753 -0.383 1.348 0.563 -0.383 1.348 0.758 -0.215 -0.516 1.140 0.471 + 466.55 12.588 12.592 12.678 -0.298 1.474 0.476 -0.298 1.474 0.701 -0.142 -0.439 1.244 0.420 + 466.60 12.609 12.626 12.706 -0.646 1.428 0.496 -0.646 1.428 0.709 -0.321 -0.922 1.351 0.603 + 466.65 12.323 12.335 12.424 -0.538 1.480 0.210 -0.538 1.480 0.312 -0.113 -0.796 1.262 0.431 + 466.70 12.424 12.443 12.507 -0.702 1.258 0.311 -0.702 1.258 0.391 -0.218 -0.883 1.086 0.495 + 466.75 12.583 12.626 12.672 -1.047 1.078 0.470 -1.047 1.078 0.507 -0.492 -1.128 1.239 0.666 + 466.80 12.300 12.326 12.354 -0.789 0.831 0.188 -0.789 0.831 0.156 -0.148 -0.655 0.674 0.345 + 466.85 12.450 12.483 12.512 -0.909 0.849 0.337 -0.909 0.849 0.286 -0.306 -0.772 0.831 0.439 + 466.90 12.675 12.693 12.729 -0.667 0.958 0.563 -0.667 0.958 0.539 -0.375 -0.639 0.839 0.458 + 466.95 12.900 12.963 12.978 -1.274 0.625 0.788 -1.274 0.625 0.493 -1.003 -0.797 1.317 0.686 + 467.00 12.792 12.833 12.842 -1.017 0.488 0.680 -1.017 0.488 0.332 -0.691 -0.496 0.867 0.457 + 467.05 12.851 12.883 12.891 -0.906 0.462 0.738 -0.906 0.462 0.341 -0.669 -0.419 0.790 0.430 + 467.10 12.953 13.010 13.025 -1.208 0.629 0.841 -1.208 0.629 0.528 -1.015 -0.759 1.280 0.687 + 467.15 12.779 12.824 12.842 -1.075 0.683 0.666 -1.075 0.683 0.455 -0.716 -0.734 1.033 0.561 + 467.20 12.656 12.691 12.706 -0.938 0.624 0.543 -0.938 0.624 0.339 -0.509 -0.585 0.782 0.423 + 467.25 12.664 12.693 12.699 -0.856 0.393 0.551 -0.856 0.393 0.217 -0.472 -0.336 0.595 0.309 + 467.30 12.751 12.805 12.806 -1.166 -0.158 0.639 -1.166 -0.158 -0.101 -0.745 0.184 0.896 0.387 + 467.35 12.597 12.630 12.631 -0.906 0.197 0.485 -0.906 0.197 0.096 -0.439 -0.179 0.547 0.242 + 467.40 12.720 12.729 12.729 -0.485 0.024 0.607 -0.485 0.024 0.014 -0.295 -0.011 0.302 0.148 + 467.45 12.753 12.756 12.757 -0.287 -0.159 0.640 -0.287 -0.159 -0.102 -0.183 0.046 0.258 0.107 + 467.50 12.350 12.366 12.370 -0.632 0.297 0.237 -0.632 0.297 0.070 -0.150 -0.187 0.272 0.125 + 467.55 12.192 12.196 12.199 -0.328 0.270 0.079 -0.328 0.270 0.021 -0.026 -0.089 0.093 0.047 + 467.60 12.393 12.405 12.406 -0.532 0.204 0.280 -0.532 0.204 0.057 -0.149 -0.108 0.201 0.097 + 467.65 12.862 12.872 12.876 -0.499 0.316 0.749 -0.499 0.316 0.237 -0.374 -0.158 0.455 0.235 + 467.70 12.851 12.863 12.873 -0.556 0.506 0.738 -0.556 0.506 0.373 -0.410 -0.281 0.555 0.311 + 467.75 12.837 12.848 12.854 -0.548 0.380 0.724 -0.548 0.380 0.275 -0.397 -0.208 0.484 0.263 + 467.80 12.690 12.695 12.695 -0.344 0.040 0.577 -0.344 0.040 0.023 -0.198 -0.014 0.227 0.100 + 467.85 12.826 12.835 12.836 -0.484 -0.056 0.714 -0.484 -0.056 -0.040 -0.345 0.027 0.373 0.174 + 467.90 12.769 12.780 12.780 -0.537 -0.031 0.656 -0.537 -0.031 -0.020 -0.352 0.017 0.360 0.177 + 467.95 12.893 12.905 12.906 -0.574 0.158 0.780 -0.574 0.158 0.123 -0.448 -0.091 0.481 0.236 + 468.00 13.059 13.076 13.077 -0.668 0.089 0.946 -0.668 0.089 0.084 -0.633 -0.059 0.675 0.320 + 468.05 13.154 13.181 13.184 -0.853 -0.275 1.041 -0.853 -0.275 -0.287 -0.888 0.235 0.944 0.481 + 468.10 13.037 13.057 13.058 -0.737 0.119 0.924 -0.737 0.119 0.110 -0.681 -0.088 0.705 0.348 + 468.15 12.889 12.922 12.924 -0.934 0.214 0.776 -0.934 0.214 0.166 -0.724 -0.200 0.760 0.385 + 468.20 12.874 12.941 12.941 -1.309 -0.030 0.762 -1.309 -0.030 -0.023 -0.997 0.039 1.147 0.499 + 468.25 13.035 13.128 13.128 -1.563 -0.082 0.922 -1.563 -0.082 -0.076 -1.441 0.128 1.650 0.724 + 468.30 13.370 13.465 13.465 -1.591 0.012 1.258 -1.591 0.012 0.015 -2.001 -0.019 2.057 1.001 + 468.35 13.373 13.419 13.421 -1.112 0.268 1.260 -1.112 0.268 0.337 -1.401 -0.297 1.447 0.735 + 468.40 13.259 13.325 13.325 -1.321 0.067 1.146 -1.321 0.067 0.077 -1.514 -0.088 1.532 0.759 + 468.45 13.166 13.218 13.218 -1.163 -0.120 1.054 -1.163 -0.120 -0.126 -1.226 0.140 1.239 0.620 + 468.50 13.211 13.275 13.276 -1.307 0.076 1.098 -1.307 0.076 0.084 -1.435 -0.100 1.460 0.721 + 468.55 13.206 13.277 13.278 -1.373 -0.198 1.093 -1.373 -0.198 -0.217 -1.500 0.272 1.559 0.770 + 468.60 13.598 13.686 13.696 -1.550 -0.502 1.486 -1.550 -0.502 -0.745 -2.302 0.777 2.430 1.271 + 468.65 13.679 13.737 13.759 -1.260 -0.784 1.566 -1.260 -0.784 -1.228 -1.973 0.988 2.327 1.263 + 468.70 13.699 13.746 13.762 -1.126 -0.680 1.587 -1.126 -0.680 -1.079 -1.786 0.766 2.124 1.111 + 468.75 13.780 13.831 13.844 -1.178 -0.599 1.668 -1.178 -0.599 -0.999 -1.964 0.706 2.264 1.157 + 468.80 14.003 14.063 14.081 -1.299 -0.718 1.890 -1.299 -0.718 -1.356 -2.455 0.932 2.887 1.478 + 468.85 13.872 13.921 13.941 -1.169 -0.750 1.759 -1.169 -0.750 -1.320 -2.056 0.877 2.512 1.298 + 468.90 13.687 13.736 13.746 -1.149 -0.540 1.575 -1.149 -0.540 -0.850 -1.809 0.620 2.046 1.046 + 468.95 14.142 14.185 14.199 -1.106 -0.633 2.029 -1.106 -0.633 -1.285 -2.245 0.701 2.872 1.340 + 469.00 14.206 14.236 14.259 -0.923 -0.821 2.093 -0.923 -0.821 -1.719 -1.932 0.758 2.954 1.348 + 469.05 14.472 14.493 14.524 -0.773 -0.942 2.360 -0.773 -0.942 -2.223 -1.824 0.728 3.526 1.483 + 469.10 14.688 14.704 14.715 -0.679 -0.575 2.575 -0.679 -0.575 -1.480 -1.747 0.390 3.711 1.161 + 469.15 14.344 14.368 14.376 -0.832 -0.482 2.231 -0.832 -0.482 -1.076 -1.855 0.401 2.951 1.091 + 469.20 14.135 14.166 14.180 -0.941 -0.635 2.022 -0.941 -0.635 -1.283 -1.903 0.597 2.689 1.186 + 469.25 14.106 14.162 14.172 -1.257 -0.554 1.993 -1.257 -0.554 -1.104 -2.504 0.696 2.929 1.412 + 469.30 14.195 14.226 14.244 -0.942 -0.729 2.082 -0.942 -0.729 -1.518 -1.960 0.687 2.876 1.286 + 469.35 14.233 14.260 14.303 -0.883 -1.108 2.120 -0.883 -1.108 -2.350 -1.871 0.978 3.251 1.580 + 469.40 14.246 14.259 14.320 -0.612 -1.327 2.133 -0.612 -1.327 -2.830 -1.306 0.813 3.343 1.611 + 469.45 13.968 13.968 14.010 -0.087 -1.088 1.855 -0.087 -1.088 -2.018 -0.162 0.095 2.316 1.013 + 469.50 13.997 13.997 14.031 -0.036 -0.970 1.884 -0.036 -0.970 -1.827 -0.067 0.035 2.246 0.914 + 469.55 14.299 14.302 14.360 -0.317 -1.285 2.186 -0.317 -1.285 -2.810 -0.693 0.407 3.266 1.461 + 469.60 14.217 14.217 14.268 -0.106 -1.206 2.104 -0.106 -1.206 -2.537 -0.223 0.128 2.946 1.275 + 469.65 14.396 14.397 14.455 -0.107 -1.298 2.283 -0.107 -1.298 -2.963 -0.245 0.139 3.455 1.488 + 469.70 14.698 14.701 14.736 0.276 -1.016 2.585 0.276 -1.016 -2.626 0.714 -0.281 3.896 1.368 + 469.75 14.705 14.723 14.781 0.741 -1.310 2.592 0.741 -1.310 -3.394 1.920 -0.970 4.490 2.009 + 469.80 14.787 14.804 14.835 0.712 -0.958 2.674 0.712 -0.958 -2.562 1.903 -0.681 4.288 1.631 + 469.85 14.774 14.810 14.835 1.030 -0.855 2.662 1.030 -0.855 -2.275 2.741 -0.880 4.438 1.835 + 469.90 14.832 14.870 14.918 1.070 -1.200 2.719 1.070 -1.200 -3.263 2.908 -1.284 4.988 2.278 + 469.95 14.447 14.509 14.598 1.339 -1.610 2.334 1.339 -1.610 -3.759 3.126 -2.157 4.918 2.672 + 470.00 14.227 14.263 14.383 1.026 -1.852 2.114 1.026 -1.852 -3.915 2.168 -1.900 4.475 2.431 + 470.05 14.337 14.375 14.487 1.042 -1.795 2.224 1.042 -1.795 -3.992 2.317 -1.870 4.627 2.490 + 470.10 14.112 14.163 14.310 1.199 -2.045 1.999 1.199 -2.045 -4.089 2.397 -2.453 4.809 2.668 + 470.15 13.622 13.675 13.802 1.203 -1.870 1.509 1.203 -1.870 -2.822 1.816 -2.250 3.611 2.020 + 470.20 13.441 13.499 13.585 1.252 -1.522 1.328 1.252 -1.522 -2.021 1.663 -1.905 2.824 1.619 + 470.25 13.704 13.766 13.849 1.305 -1.516 1.591 1.305 -1.516 -2.411 2.076 -1.978 3.265 1.873 + 470.30 13.640 13.675 13.719 0.977 -1.102 1.527 0.977 -1.102 -1.683 1.492 -1.077 2.251 1.247 + 470.35 13.681 13.723 13.759 1.073 -1.004 1.568 1.073 -1.004 -1.575 1.682 -1.077 2.309 1.272 + 470.40 13.763 13.832 13.897 1.381 -1.338 1.651 1.381 -1.338 -2.208 2.279 -1.847 3.210 1.836 + 470.45 13.746 13.798 13.872 1.193 -1.436 1.633 1.193 -1.436 -2.345 1.949 -1.714 3.077 1.749 + 470.50 13.388 13.407 13.474 0.728 -1.337 1.275 0.728 -1.337 -1.704 0.929 -0.974 1.972 1.086 + 470.55 13.576 13.585 13.638 0.479 -1.202 1.463 0.479 -1.202 -1.759 0.701 -0.575 1.908 0.989 + 470.60 14.162 14.180 14.240 0.721 -1.301 2.049 0.721 -1.301 -2.667 1.477 -0.938 3.206 1.595 + 470.65 14.186 14.205 14.241 0.740 -1.007 2.073 0.740 -1.007 -2.088 1.534 -0.745 2.930 1.348 + 470.70 14.062 14.092 14.120 0.921 -0.889 1.949 0.921 -0.889 -1.732 1.795 -0.819 2.718 1.313 + 470.75 13.777 13.831 13.856 1.227 -0.828 1.664 1.227 -0.828 -1.377 2.042 -1.016 2.480 1.332 + 470.80 13.942 14.032 14.053 1.591 -0.761 1.829 1.591 -0.761 -1.392 2.910 -1.211 3.228 1.723 + 470.85 14.039 14.165 14.193 1.888 -0.882 1.926 1.888 -0.882 -1.698 3.637 -1.665 4.026 2.173 + 470.90 14.209 14.321 14.342 1.788 -0.782 2.096 1.788 -0.782 -1.639 3.749 -1.398 4.102 2.162 + 470.95 14.249 14.364 14.386 1.816 -0.793 2.136 1.816 -0.793 -1.694 3.878 -1.440 4.244 2.235 + 471.00 14.248 14.358 14.390 1.777 -0.958 2.135 1.777 -0.958 -2.046 3.794 -1.703 4.317 2.317 + 471.05 14.103 14.183 14.224 1.506 -1.080 1.990 1.506 -1.080 -2.149 2.997 -1.626 3.697 2.015 + 471.10 14.161 14.255 14.297 1.635 -1.094 2.048 1.635 -1.094 -2.240 3.350 -1.789 4.033 2.204 + 471.15 14.049 14.100 14.130 1.193 -0.925 1.937 1.193 -0.925 -1.790 2.310 -1.103 3.014 1.562 + 471.20 14.273 14.303 14.361 0.924 -1.289 2.160 0.924 -1.289 -2.784 1.996 -1.191 3.591 1.813 + 471.25 13.977 14.023 14.090 1.131 -1.372 1.864 1.131 -1.372 -2.558 2.109 -1.552 3.319 1.830 + 471.30 13.805 13.833 13.923 0.874 -1.584 1.693 0.874 -1.584 -2.680 1.480 -1.385 3.069 1.680 + 471.35 13.850 13.875 13.974 0.833 -1.658 1.737 0.833 -1.658 -2.880 1.448 -1.381 3.230 1.753 + 471.40 13.797 13.802 13.874 0.385 -1.412 1.684 0.385 -1.412 -2.377 0.648 -0.543 2.488 1.262 + 471.45 13.789 13.789 13.841 0.057 -1.194 1.676 0.057 -1.194 -2.002 0.095 -0.068 2.120 1.003 + 471.50 13.608 13.608 13.654 0.019 -1.119 1.495 0.019 -1.119 -1.674 0.028 -0.021 1.745 0.837 + 471.55 13.197 13.198 13.245 -0.101 -1.114 1.085 -0.101 -1.114 -1.208 -0.109 0.112 1.214 0.609 + 471.60 13.269 13.269 13.306 -0.033 -0.995 1.156 -0.033 -0.995 -1.150 -0.038 0.033 1.164 0.576 + 471.65 13.310 13.310 13.383 0.043 -1.390 1.197 0.043 -1.390 -1.664 0.051 -0.059 1.684 0.833 + 471.70 13.522 13.523 13.586 0.159 -1.309 1.409 0.159 -1.309 -1.844 0.224 -0.208 1.862 0.935 + 471.75 13.312 13.315 13.383 0.285 -1.353 1.199 0.285 -1.353 -1.622 0.341 -0.385 1.675 0.851 + 471.80 13.279 13.290 13.352 0.542 -1.280 1.166 0.542 -1.280 -1.493 0.633 -0.694 1.647 0.882 + 471.85 13.407 13.415 13.462 0.438 -1.125 1.295 0.438 -1.125 -1.457 0.567 -0.493 1.567 0.820 + 471.90 13.668 13.668 13.758 0.087 -1.571 1.555 0.087 -1.571 -2.443 0.135 -0.137 2.447 1.225 + 471.95 13.565 13.566 13.664 0.177 -1.629 1.453 0.177 -1.629 -2.366 0.257 -0.288 2.397 1.199 + 472.00 13.439 13.442 13.516 0.291 -1.418 1.326 0.291 -1.418 -1.880 0.385 -0.412 1.926 0.981 + 472.05 13.211 13.211 13.280 0.097 -1.349 1.098 0.097 -1.349 -1.482 0.106 -0.130 1.518 0.746 + 472.10 13.380 13.386 13.430 0.387 -1.081 1.268 0.387 -1.081 -1.370 0.491 -0.418 1.462 0.757 + 472.15 13.606 13.608 13.655 0.220 -1.127 1.493 0.220 -1.127 -1.684 0.328 -0.248 1.775 0.867 + 472.20 13.905 13.912 13.955 0.420 -1.102 1.793 0.420 -1.102 -1.975 0.753 -0.463 2.302 1.082 + 472.25 13.627 13.635 13.656 0.474 -0.742 1.514 0.474 -0.742 -1.123 0.718 -0.352 1.534 0.689 + 472.30 13.634 13.658 13.688 0.809 -0.898 1.521 0.809 -0.898 -1.366 1.231 -0.727 1.888 0.989 + 472.35 13.577 13.584 13.655 0.423 -1.396 1.464 0.423 -1.396 -2.044 0.619 -0.590 2.136 1.108 + 472.40 13.406 13.419 13.481 0.596 -1.284 1.293 0.596 -1.284 -1.661 0.770 -0.765 1.838 0.992 + 472.45 13.576 13.594 13.631 0.690 -1.012 1.463 0.690 -1.012 -1.480 1.010 -0.698 1.820 0.962 + 472.50 13.592 13.603 13.648 0.550 -1.112 1.479 0.550 -1.112 -1.645 0.814 -0.612 1.864 0.967 + 472.55 13.571 13.576 13.630 0.355 -1.213 1.458 0.355 -1.213 -1.769 0.517 -0.430 1.862 0.946 + 472.60 13.314 13.321 13.397 0.437 -1.427 1.201 0.437 -1.427 -1.714 0.525 -0.624 1.835 0.949 + 472.65 13.278 13.290 13.332 0.567 -1.065 1.165 0.567 -1.065 -1.241 0.661 -0.604 1.406 0.765 + 472.70 13.164 13.177 13.199 0.580 -0.767 1.051 0.580 -0.767 -0.806 0.609 -0.445 1.015 0.552 + 472.75 12.587 12.602 12.617 0.608 -0.631 0.474 0.608 -0.631 -0.299 0.288 -0.384 0.496 0.283 + 472.80 12.487 12.501 12.519 0.573 -0.683 0.375 0.573 -0.683 -0.256 0.215 -0.392 0.468 0.257 + 472.85 12.452 12.473 12.510 0.736 -0.955 0.339 0.736 -0.955 -0.324 0.249 -0.703 0.784 0.407 + 472.90 12.560 12.589 12.612 0.859 -0.767 0.447 0.859 -0.767 -0.343 0.384 -0.659 0.763 0.418 + 472.95 12.610 12.644 12.670 0.927 -0.816 0.497 0.927 -0.816 -0.406 0.461 -0.756 0.886 0.487 + 473.00 12.315 12.374 12.395 1.206 -0.721 0.202 1.206 -0.721 -0.146 0.244 -0.870 1.008 0.458 + 473.05 12.307 12.370 12.386 1.241 -0.628 0.195 1.241 -0.628 -0.122 0.242 -0.779 0.986 0.412 + 473.10 12.447 12.478 12.493 0.877 -0.616 0.334 0.877 -0.616 -0.206 0.293 -0.540 0.630 0.324 + 473.15 12.569 12.596 12.617 0.819 -0.722 0.457 0.819 -0.722 -0.330 0.374 -0.592 0.700 0.387 + 473.20 12.386 12.417 12.441 0.869 -0.781 0.274 0.869 -0.781 -0.214 0.238 -0.678 0.720 0.375 + 473.25 12.676 12.720 12.746 1.051 -0.815 0.563 1.051 -0.815 -0.459 0.592 -0.857 1.043 0.569 + 473.30 12.585 12.613 12.639 0.835 -0.806 0.472 0.835 -0.806 -0.381 0.394 -0.673 0.785 0.434 + 473.35 12.363 12.384 12.397 0.723 -0.555 0.251 0.723 -0.555 -0.139 0.181 -0.401 0.447 0.231 + 473.40 12.560 12.578 12.583 0.663 -0.376 0.447 0.663 -0.376 -0.168 0.297 -0.250 0.391 0.211 + 473.45 12.547 12.558 12.566 0.542 -0.442 0.434 0.542 -0.442 -0.192 0.235 -0.240 0.339 0.193 + 473.50 12.664 12.676 12.686 0.545 -0.502 0.552 0.545 -0.502 -0.277 0.301 -0.274 0.427 0.246 + 473.55 12.704 12.719 12.728 0.632 -0.460 0.591 0.632 -0.460 -0.272 0.373 -0.290 0.480 0.273 + 473.60 13.141 13.158 13.175 0.686 -0.662 1.028 0.686 -0.662 -0.681 0.705 -0.454 0.983 0.540 + 473.65 13.157 13.185 13.187 0.857 -0.236 1.044 0.857 -0.236 -0.246 0.895 -0.202 0.940 0.475 + 473.70 12.949 12.975 12.979 0.812 -0.306 0.837 0.812 -0.306 -0.256 0.680 -0.249 0.727 0.384 + 473.75 13.147 13.162 13.176 0.632 -0.601 1.034 0.632 -0.601 -0.622 0.654 -0.380 0.915 0.489 + 473.80 13.186 13.199 13.216 0.586 -0.684 1.073 0.586 -0.684 -0.734 0.629 -0.401 0.981 0.523 + 473.85 13.034 13.050 13.060 0.642 -0.508 0.922 0.642 -0.508 -0.468 0.592 -0.326 0.760 0.411 + 473.90 12.956 12.968 12.979 0.566 -0.532 0.843 0.566 -0.532 -0.448 0.477 -0.301 0.657 0.360 + 473.95 13.080 13.098 13.101 0.677 -0.284 0.967 0.677 -0.284 -0.275 0.655 -0.192 0.737 0.368 + 474.00 13.123 13.139 13.139 0.650 -0.045 1.010 0.650 -0.045 -0.046 0.656 -0.029 0.722 0.329 + 474.05 12.923 12.970 12.972 1.103 -0.257 0.810 1.103 -0.257 -0.208 0.894 -0.284 0.970 0.480 + 474.10 12.805 12.852 12.854 1.092 -0.249 0.693 1.092 -0.249 -0.172 0.756 -0.272 0.867 0.411 + 474.15 12.919 12.986 12.990 1.316 -0.314 0.807 1.316 -0.314 -0.254 1.062 -0.414 1.241 0.584 + 474.20 12.830 12.913 12.917 1.460 -0.323 0.718 1.460 -0.323 -0.232 1.048 -0.471 1.376 0.586 + 474.25 12.869 12.945 12.963 1.402 -0.681 0.756 1.402 -0.681 -0.514 1.059 -0.954 1.499 0.758 + 474.30 12.632 12.703 12.712 1.337 -0.490 0.519 1.337 -0.490 -0.255 0.695 -0.656 1.149 0.494 + 474.35 12.525 12.616 12.622 1.512 -0.388 0.412 1.512 -0.388 -0.160 0.623 -0.587 1.303 0.436 + 474.40 12.457 12.586 12.601 1.797 -0.620 0.344 1.797 -0.620 -0.213 0.619 -1.114 1.867 0.646 + 474.45 12.837 12.941 12.947 1.640 -0.387 0.724 1.640 -0.387 -0.280 1.187 -0.634 1.681 0.687 + 474.50 12.872 12.966 12.967 1.565 -0.095 0.759 1.565 -0.095 -0.072 1.187 -0.148 1.517 0.599 + 474.55 12.739 12.834 12.836 1.565 -0.221 0.626 1.565 -0.221 -0.138 0.979 -0.346 1.445 0.524 + 474.60 12.807 12.870 12.873 1.276 -0.257 0.694 1.276 -0.257 -0.178 0.886 -0.328 1.088 0.481 + 474.65 12.890 12.932 12.933 1.050 -0.111 0.777 1.050 -0.111 -0.086 0.816 -0.116 0.859 0.414 + 474.70 12.901 12.943 12.951 1.044 -0.468 0.788 1.044 -0.468 -0.369 0.823 -0.489 0.965 0.513 + 474.75 13.236 13.274 13.279 1.002 -0.360 1.123 1.002 -0.360 -0.404 1.125 -0.361 1.197 0.624 + 474.80 13.288 13.332 13.341 1.082 -0.495 1.175 1.082 -0.495 -0.582 1.271 -0.536 1.398 0.749 + 474.85 13.118 13.156 13.180 1.000 -0.795 1.005 1.000 -0.795 -0.800 1.006 -0.795 1.322 0.755 + 474.90 12.872 12.896 12.911 0.785 -0.626 0.759 0.785 -0.626 -0.475 0.596 -0.491 0.792 0.453 + 474.95 13.084 13.105 13.119 0.741 -0.611 0.971 0.741 -0.611 -0.594 0.720 -0.453 0.933 0.519 + 475.00 12.958 12.993 13.013 0.943 -0.721 0.846 0.943 -0.721 -0.610 0.797 -0.680 1.062 0.606 + 475.05 12.811 12.832 12.855 0.746 -0.770 0.698 0.746 -0.770 -0.537 0.521 -0.575 0.818 0.472 + 475.10 12.908 12.927 12.943 0.704 -0.643 0.795 0.704 -0.643 -0.511 0.560 -0.453 0.771 0.442 + 475.15 12.948 12.958 12.976 0.525 -0.683 0.835 0.525 -0.683 -0.570 0.438 -0.358 0.719 0.402 + 475.20 12.875 12.877 12.895 0.220 -0.670 0.762 0.220 -0.670 -0.511 0.168 -0.148 0.540 0.279 + 475.25 12.962 12.965 13.009 0.253 -1.075 0.849 0.253 -1.075 -0.913 0.215 -0.272 0.971 0.488 + 475.30 12.920 12.923 12.959 0.257 -0.975 0.807 0.257 -0.975 -0.787 0.207 -0.250 0.834 0.426 + 475.35 12.779 12.789 12.815 0.502 -0.817 0.666 0.502 -0.817 -0.544 0.334 -0.411 0.682 0.380 + 475.40 12.951 12.975 13.009 0.782 -0.939 0.838 0.782 -0.939 -0.787 0.656 -0.735 1.098 0.630 + 475.45 12.941 12.973 13.013 0.906 -1.028 0.828 0.906 -1.028 -0.851 0.751 -0.932 1.282 0.734 + 475.50 12.585 12.598 12.620 0.556 -0.749 0.473 0.556 -0.749 -0.354 0.263 -0.416 0.547 0.303 + 475.55 12.414 12.436 12.446 0.741 -0.494 0.301 0.741 -0.494 -0.149 0.223 -0.366 0.442 0.227 + 475.60 12.568 12.583 12.595 0.624 -0.546 0.455 0.624 -0.546 -0.249 0.284 -0.341 0.447 0.254 + 475.65 12.494 12.509 12.518 0.598 -0.478 0.382 0.598 -0.478 -0.182 0.228 -0.285 0.366 0.204 + 475.70 12.456 12.462 12.468 0.405 -0.380 0.343 0.405 -0.380 -0.130 0.139 -0.154 0.213 0.123 + 475.75 12.451 12.457 12.473 0.399 -0.634 0.338 0.399 -0.634 -0.214 0.135 -0.253 0.337 0.179 + 475.80 12.581 12.593 12.645 0.545 -1.150 0.468 0.545 -1.150 -0.538 0.255 -0.627 0.920 0.432 + 475.85 12.937 12.963 12.986 0.824 -0.776 0.824 0.824 -0.776 -0.640 0.679 -0.640 0.980 0.566 + 475.90 12.934 12.956 12.993 0.742 -0.982 0.821 0.742 -0.982 -0.806 0.610 -0.729 1.095 0.623 + 475.95 12.748 12.764 12.816 0.643 -1.160 0.635 0.643 -1.160 -0.736 0.409 -0.746 1.081 0.563 + 476.00 12.619 12.643 12.685 0.780 -1.028 0.506 0.780 -1.028 -0.521 0.395 -0.803 0.962 0.518 + 476.05 12.526 12.550 12.572 0.781 -0.740 0.413 0.781 -0.740 -0.306 0.323 -0.578 0.664 0.365 + 476.10 12.262 12.278 12.309 0.624 -0.861 0.150 0.624 -0.861 -0.129 0.093 -0.538 0.577 0.280 + 476.15 12.079 12.095 12.113 0.636 -0.650 -0.034 0.636 -0.650 0.022 -0.022 -0.413 0.414 0.207 + 476.20 12.152 12.162 12.181 0.510 -0.669 0.039 0.510 -0.669 -0.026 0.020 -0.341 0.355 0.171 + 476.25 12.102 12.106 12.144 0.301 -0.969 -0.011 0.301 -0.969 0.010 -0.003 -0.292 0.515 0.146 + 476.30 12.334 12.334 12.378 0.062 -1.035 0.221 0.062 -1.035 -0.229 0.014 -0.064 0.562 0.119 + 476.35 12.492 12.492 12.535 -0.080 -1.039 0.379 -0.080 -1.039 -0.394 -0.030 0.083 0.615 0.202 + 476.40 12.544 12.545 12.591 -0.196 -1.070 0.431 -0.196 -1.070 -0.461 -0.085 0.210 0.685 0.257 + 476.45 12.839 12.839 12.875 -0.020 -0.969 0.726 -0.020 -0.969 -0.703 -0.015 0.019 0.733 0.352 + 476.50 12.931 12.934 12.982 0.289 -1.117 0.818 0.289 -1.117 -0.914 0.236 -0.323 1.000 0.499 + 476.55 13.161 13.163 13.204 0.236 -1.041 1.048 0.236 -1.041 -1.091 0.247 -0.246 1.118 0.572 + 476.60 13.397 13.405 13.438 0.474 -0.938 1.284 0.474 -0.938 -1.204 0.609 -0.445 1.377 0.711 + 476.65 13.364 13.398 13.450 0.957 -1.176 1.251 0.957 -1.176 -1.472 1.197 -1.125 1.932 1.103 + 476.70 13.489 13.528 13.632 1.033 -1.677 1.376 1.033 -1.677 -2.308 1.421 -1.732 2.886 1.608 + 476.75 13.362 13.429 13.522 1.348 -1.581 1.249 1.348 -1.581 -1.974 1.684 -2.131 2.938 1.679 + 476.80 13.359 13.445 13.513 1.516 -1.356 1.246 1.516 -1.356 -1.690 1.889 -2.056 2.845 1.632 + 476.85 12.922 13.045 13.108 1.782 -1.290 0.810 1.782 -1.290 -1.044 1.442 -2.298 2.746 1.454 + 476.90 12.787 12.887 12.944 1.605 -1.207 0.674 1.605 -1.207 -0.814 1.082 -1.938 2.244 1.182 + 476.95 12.805 12.960 12.973 2.000 -0.583 0.692 2.000 -0.583 -0.404 1.384 -1.167 2.410 0.927 + 477.00 12.882 13.001 13.014 1.759 -0.563 0.769 1.759 -0.563 -0.433 1.353 -0.990 2.001 0.866 + 477.05 13.092 13.158 13.163 1.312 -0.374 0.979 1.312 -0.374 -0.366 1.285 -0.491 1.411 0.712 + 477.10 13.279 13.361 13.365 1.474 -0.352 1.166 1.474 -0.352 -0.410 1.719 -0.518 1.828 0.921 + 477.15 13.105 13.214 13.221 1.694 -0.439 0.992 1.694 -0.439 -0.436 1.681 -0.743 2.023 0.944 + 477.20 12.767 12.840 12.853 1.371 -0.571 0.654 1.371 -0.571 -0.374 0.896 -0.783 1.317 0.624 + 477.25 12.875 12.941 12.950 1.298 -0.484 0.763 1.298 -0.484 -0.369 0.990 -0.628 1.250 0.614 + 477.30 13.126 13.197 13.207 1.361 -0.532 1.014 1.361 -0.532 -0.539 1.379 -0.724 1.581 0.824 + 477.35 13.622 13.699 13.738 1.445 -1.034 1.510 1.445 -1.034 -1.561 2.181 -1.494 2.718 1.535 + 477.40 13.475 13.539 13.574 1.320 -0.970 1.362 1.320 -0.970 -1.321 1.797 -1.280 2.269 1.286 + 477.45 13.323 13.375 13.409 1.176 -0.959 1.210 1.176 -0.959 -1.160 1.423 -1.127 1.883 1.077 + 477.50 13.355 13.429 13.450 1.407 -0.743 1.242 1.407 -0.743 -0.924 1.748 -1.046 2.038 1.118 + 477.55 13.469 13.521 13.555 1.182 -0.951 1.357 1.182 -0.951 -1.291 1.604 -1.125 2.072 1.173 + 477.60 13.470 13.514 13.545 1.086 -0.918 1.358 1.086 -0.918 -1.247 1.474 -0.997 1.933 1.087 + 477.65 13.341 13.391 13.430 1.154 -1.025 1.228 1.154 -1.025 -1.259 1.418 -1.183 1.946 1.118 + 477.70 13.225 13.260 13.326 0.965 -1.327 1.112 0.965 -1.327 -1.475 1.073 -1.280 1.964 1.114 + 477.75 13.577 13.614 13.676 1.004 -1.295 1.465 1.004 -1.295 -1.897 1.471 -1.300 2.415 1.365 + 477.80 13.726 13.787 13.888 1.300 -1.672 1.613 1.300 -1.672 -2.697 2.097 -2.173 3.544 2.024 + 477.85 13.585 13.665 13.751 1.471 -1.534 1.473 1.471 -1.534 -2.258 2.166 -2.256 3.342 1.929 + 477.90 13.623 13.691 13.789 1.365 -1.637 1.510 1.365 -1.637 -2.472 2.062 -2.235 3.412 1.960 + 477.95 14.069 14.114 14.255 1.123 -2.002 1.956 1.123 -2.002 -3.915 2.197 -2.248 4.547 2.510 + 478.00 14.116 14.200 14.340 1.549 -1.999 2.003 1.549 -1.999 -4.004 3.102 -3.097 5.204 2.968 + 478.05 14.033 14.075 14.176 1.076 -1.689 1.921 1.076 -1.689 -3.244 2.066 -1.817 3.850 2.127 + 478.10 14.110 14.160 14.243 1.185 -1.535 1.997 1.185 -1.535 -3.066 2.366 -1.819 3.874 2.139 + 478.15 13.901 13.966 14.038 1.341 -1.428 1.788 1.341 -1.428 -2.553 2.398 -1.915 3.518 1.996 + 478.20 14.094 14.114 14.194 0.750 -1.504 1.981 0.750 -1.504 -2.980 1.485 -1.127 3.375 1.758 + 478.25 14.141 14.174 14.217 0.957 -1.109 2.029 0.957 -1.109 -2.250 1.941 -1.061 3.130 1.578 + 478.30 14.100 14.121 14.149 0.763 -0.881 1.988 0.763 -0.881 -1.752 1.517 -0.673 2.655 1.207 + 478.35 14.186 14.207 14.256 0.779 -1.179 2.073 0.779 -1.179 -2.444 1.615 -0.919 3.148 1.535 + 478.40 14.197 14.217 14.277 0.753 -1.310 2.084 0.753 -1.310 -2.731 1.570 -0.987 3.314 1.651 + 478.45 13.983 13.990 14.078 0.445 -1.570 1.870 0.445 -1.570 -2.936 0.832 -0.698 3.080 1.565 + 478.50 14.160 14.160 14.246 0.155 -1.562 2.047 0.155 -1.562 -3.197 0.316 -0.241 3.326 1.611 + 478.55 14.279 14.285 14.395 0.397 -1.780 2.166 0.397 -1.780 -3.856 0.861 -0.707 4.010 2.007 + 478.60 14.162 14.168 14.315 0.410 -2.043 2.049 0.410 -2.043 -4.187 0.840 -0.837 4.271 2.176 + 478.65 14.376 14.391 14.576 0.665 -2.312 2.263 0.665 -2.312 -5.232 1.506 -1.538 5.454 2.829 + 478.70 14.610 14.614 14.751 0.305 -2.008 2.498 0.305 -2.008 -5.015 0.761 -0.611 5.181 2.554 + 478.75 14.546 14.558 14.703 0.604 -2.056 2.433 0.604 -2.056 -5.002 1.470 -1.242 5.256 2.680 + 478.80 14.560 14.579 14.753 0.739 -2.262 2.447 0.739 -2.262 -5.536 1.809 -1.672 5.826 3.030 + 478.85 14.556 14.557 14.744 0.191 -2.339 2.443 0.191 -2.339 -5.714 0.467 -0.447 5.737 2.875 + 478.90 13.955 13.955 14.197 -0.004 -2.611 1.842 -0.004 -2.611 -4.811 -0.007 0.010 5.106 2.405 + 478.95 13.604 13.607 13.903 -0.265 -2.852 1.492 -0.265 -2.852 -4.255 -0.395 0.756 5.216 2.170 + 479.00 13.572 13.572 13.854 -0.149 -2.780 1.459 -0.149 -2.780 -4.056 -0.217 0.413 4.940 2.041 + 479.05 13.739 13.744 14.048 -0.379 -2.908 1.626 -0.379 -2.908 -4.729 -0.616 1.101 5.623 2.447 + 479.10 14.106 14.110 14.412 -0.345 -2.938 1.993 -0.345 -2.938 -5.855 -0.688 1.014 6.361 2.991 + 479.15 14.043 14.046 14.336 0.250 -2.870 1.930 0.250 -2.870 -5.540 0.483 -0.718 6.013 2.804 + 479.20 13.946 13.952 14.199 0.402 -2.637 1.833 0.402 -2.637 -4.835 0.738 -1.061 5.239 2.502 + 479.25 13.966 13.968 14.236 0.243 -2.745 1.853 0.243 -2.745 -5.088 0.450 -0.666 5.515 2.575 + 479.30 14.141 14.141 14.328 -0.042 -2.312 2.028 -0.042 -2.312 -4.689 -0.085 0.097 4.730 2.345 + 479.35 13.688 13.689 13.960 -0.080 -2.737 1.576 -0.080 -2.737 -4.313 -0.126 0.219 4.990 2.160 + 479.40 13.818 13.819 14.107 -0.140 -2.837 1.706 -0.140 -2.837 -4.839 -0.238 0.396 5.488 2.430 + 479.45 13.929 13.929 14.269 -0.027 -3.096 1.816 -0.027 -3.096 -5.623 -0.048 0.082 6.443 2.812 + 479.50 14.135 14.136 14.434 -0.061 -2.919 2.023 -0.061 -2.919 -5.903 -0.124 0.179 6.307 2.954 + 479.55 14.121 14.122 14.373 0.165 -2.675 2.008 0.165 -2.675 -5.372 0.331 -0.440 5.608 2.700 + 479.60 13.630 13.630 13.868 -0.047 -2.556 1.517 -0.047 -2.556 -3.877 -0.071 0.119 4.418 1.940 + 479.65 13.733 13.733 13.923 -0.081 -2.291 1.620 -0.081 -2.291 -3.713 -0.131 0.186 3.941 1.860 + 479.70 13.900 13.901 14.014 -0.172 -1.776 1.787 -0.172 -1.776 -3.175 -0.308 0.306 3.190 1.602 + 479.75 13.851 13.851 13.941 -0.160 -1.578 1.738 -0.160 -1.578 -2.742 -0.278 0.252 2.767 1.384 + 479.80 13.949 13.950 14.050 -0.148 -1.677 1.836 -0.148 -1.677 -3.080 -0.271 0.248 3.103 1.551 + 479.85 13.883 13.886 13.954 0.318 -1.376 1.770 0.318 -1.376 -2.436 0.563 -0.438 2.564 1.269 + 479.90 13.676 13.684 13.737 0.480 -1.200 1.563 0.480 -1.200 -1.875 0.751 -0.576 2.056 1.050 + 479.95 13.458 13.469 13.492 0.528 -0.789 1.345 0.528 -0.789 -1.062 0.711 -0.417 1.356 0.672 + 480.00 13.474 13.483 13.503 0.492 -0.738 1.361 0.492 -0.738 -1.005 0.670 -0.363 1.320 0.631 + 480.05 13.364 13.368 13.380 0.306 -0.577 1.252 0.306 -0.577 -0.722 0.384 -0.177 0.996 0.418 + 480.10 13.736 13.744 13.768 0.486 -0.796 1.623 0.486 -0.796 -1.293 0.789 -0.387 1.752 0.781 + 480.15 13.495 13.509 13.528 0.626 -0.723 1.382 0.626 -0.723 -0.999 0.865 -0.452 1.412 0.698 + 480.20 13.454 13.471 13.474 0.681 -0.297 1.341 0.681 -0.297 -0.398 0.913 -0.202 1.175 0.508 + 480.25 13.514 13.529 13.542 0.625 -0.594 1.401 0.625 -0.594 -0.832 0.876 -0.371 1.354 0.632 + 480.30 13.437 13.460 13.470 0.787 -0.538 1.324 0.787 -0.538 -0.713 1.042 -0.424 1.331 0.666 + 480.35 13.280 13.311 13.317 0.907 -0.397 1.168 0.907 -0.397 -0.463 1.059 -0.360 1.171 0.605 + 480.40 13.497 13.517 13.518 0.739 -0.175 1.384 0.739 -0.175 -0.242 1.024 -0.129 1.247 0.530 + 480.45 13.680 13.709 13.709 0.896 0.051 1.567 0.896 0.051 0.080 1.404 0.046 1.630 0.703 + 480.50 13.686 13.707 13.707 0.751 0.133 1.573 0.751 0.133 0.210 1.182 0.100 1.529 0.602 + 480.55 13.394 13.412 13.414 0.698 0.204 1.281 0.698 0.204 0.262 0.894 0.143 1.085 0.471 + 480.60 13.238 13.287 13.287 1.137 0.037 1.125 1.137 0.037 0.042 1.279 0.042 1.280 0.640 + 480.65 13.228 13.297 13.301 1.354 -0.345 1.115 1.354 -0.345 -0.385 1.510 -0.467 1.598 0.813 + 480.70 13.231 13.327 13.329 1.599 -0.230 1.118 1.599 -0.230 -0.257 1.787 -0.367 1.929 0.921 + 480.75 13.220 13.284 13.289 1.306 -0.351 1.107 1.306 -0.351 -0.389 1.446 -0.459 1.527 0.783 + 480.80 13.173 13.213 13.219 1.030 -0.417 1.060 1.030 -0.417 -0.442 1.092 -0.429 1.179 0.627 + 480.85 13.067 13.130 13.155 1.282 -0.808 0.954 1.282 -0.808 -0.771 1.223 -1.035 1.603 0.889 + 480.90 12.918 12.979 13.003 1.257 -0.792 0.805 1.257 -0.792 -0.638 1.012 -0.996 1.428 0.778 + 480.95 13.108 13.147 13.170 1.014 -0.780 0.995 1.014 -0.780 -0.777 1.009 -0.791 1.314 0.750 + 481.00 13.206 13.246 13.269 1.023 -0.783 1.093 1.023 -0.783 -0.856 1.119 -0.801 1.428 0.810 + 481.05 13.122 13.156 13.178 0.937 -0.765 1.010 0.937 -0.765 -0.772 0.946 -0.717 1.241 0.708 + 481.10 13.017 13.023 13.032 0.381 -0.500 0.904 0.381 -0.500 -0.452 0.345 -0.191 0.606 0.300 + 481.15 13.081 13.093 13.113 0.552 -0.724 0.968 0.552 -0.724 -0.701 0.535 -0.400 0.883 0.484 + 481.20 12.824 12.827 12.836 0.296 -0.462 0.711 0.296 -0.462 -0.329 0.211 -0.137 0.404 0.207 + 481.25 12.765 12.766 12.767 0.143 -0.171 0.653 0.143 -0.171 -0.111 0.094 -0.025 0.238 0.074 + 481.30 12.651 12.656 12.669 0.353 -0.592 0.538 0.353 -0.592 -0.319 0.190 -0.209 0.382 0.213 + 481.35 12.670 12.670 12.671 0.050 -0.136 0.557 0.050 -0.136 -0.076 0.028 -0.007 0.166 0.041 + 481.40 12.782 12.785 12.786 0.281 -0.115 0.669 0.281 -0.115 -0.077 0.188 -0.032 0.270 0.103 + 481.45 12.940 12.957 12.957 0.656 -0.135 0.827 0.656 -0.135 -0.111 0.543 -0.088 0.567 0.281 + 481.50 12.926 12.942 12.943 0.626 0.197 0.814 0.626 0.197 0.160 0.509 0.123 0.546 0.274 + 481.55 12.741 12.770 12.770 0.863 0.114 0.628 0.863 0.114 0.071 0.542 0.098 0.576 0.278 + 481.60 12.801 12.824 12.825 0.775 -0.174 0.688 0.775 -0.174 -0.120 0.533 -0.135 0.552 0.281 + 481.65 12.921 12.941 12.942 0.725 -0.095 0.808 0.725 -0.095 -0.077 0.586 -0.069 0.594 0.297 + 481.70 12.658 12.710 12.710 1.143 -0.117 0.546 1.143 -0.117 -0.064 0.624 -0.133 0.809 0.320 + 481.75 12.782 12.828 12.830 1.086 -0.232 0.669 1.086 -0.232 -0.155 0.727 -0.251 0.841 0.392 + 481.80 13.069 13.092 13.097 0.768 -0.361 0.956 0.768 -0.361 -0.345 0.734 -0.277 0.817 0.429 + 481.85 13.040 13.062 13.072 0.760 -0.518 0.927 0.760 -0.518 -0.480 0.705 -0.394 0.853 0.470 + 481.90 13.301 13.314 13.348 0.592 -0.948 1.188 0.592 -0.948 -1.126 0.703 -0.561 1.330 0.721 + 481.95 13.586 13.589 13.626 0.273 -1.006 1.473 0.273 -1.006 -1.483 0.403 -0.275 1.629 0.781 + 482.00 13.618 13.623 13.652 0.332 -0.897 1.506 0.332 -0.897 -1.351 0.500 -0.298 1.591 0.736 + 482.05 13.714 13.722 13.751 0.451 -0.905 1.601 0.451 -0.905 -1.449 0.723 -0.408 1.793 0.835 + 482.10 13.657 13.683 13.714 0.848 -0.923 1.544 0.848 -0.923 -1.425 1.309 -0.782 1.977 1.043 + 482.15 13.789 13.799 13.824 0.516 -0.828 1.676 0.516 -0.828 -1.388 0.865 -0.427 1.881 0.845 + 482.20 13.800 13.833 13.869 0.957 -0.995 1.687 0.957 -0.995 -1.680 1.615 -0.953 2.377 1.259 + 482.25 13.881 13.940 13.994 1.289 -1.222 1.768 1.289 -1.222 -2.161 2.279 -1.576 3.140 1.757 + 482.30 13.848 13.874 13.994 0.858 -1.829 1.735 0.858 -1.829 -3.173 1.488 -1.568 3.545 1.919 + 482.35 14.144 14.160 14.255 0.659 -1.645 2.032 0.659 -1.645 -3.342 1.338 -1.084 3.634 1.880 + 482.40 14.030 14.031 14.123 0.150 -1.608 1.917 0.150 -1.608 -3.082 0.287 -0.241 3.142 1.553 + 482.45 14.249 14.249 14.352 0.143 -1.715 2.136 0.143 -1.715 -3.663 0.306 -0.246 3.762 1.842 + 482.50 14.173 14.174 14.262 0.205 -1.580 2.060 0.205 -1.580 -3.255 0.422 -0.324 3.391 1.649 + 482.55 14.187 14.190 14.270 0.291 -1.506 2.074 0.291 -1.506 -3.124 0.605 -0.439 3.328 1.606 + 482.60 13.868 13.874 13.968 0.431 -1.609 1.755 0.431 -1.609 -2.825 0.757 -0.694 2.928 1.503 + 482.65 13.560 13.562 13.638 0.210 -1.445 1.447 0.210 -1.445 -2.091 0.303 -0.303 2.113 1.067 + 482.70 13.530 13.530 13.590 0.108 -1.270 1.417 0.108 -1.270 -1.801 0.153 -0.137 1.817 0.906 + 482.75 13.486 13.486 13.542 0.060 -1.238 1.373 0.060 -1.238 -1.699 0.082 -0.074 1.710 0.851 + 482.80 13.604 13.608 13.658 -0.326 -1.168 1.491 -0.326 -1.168 -1.742 -0.486 0.381 1.847 0.924 + 482.85 13.875 13.884 13.943 -0.501 -1.285 1.762 -0.501 -1.285 -2.264 -0.883 0.644 2.503 1.257 + 482.90 14.089 14.107 14.176 -0.729 -1.392 1.976 -0.729 -1.392 -2.749 -1.440 1.014 3.186 1.633 + 482.95 14.031 14.044 14.088 -0.609 -1.114 1.918 -0.609 -1.114 -2.137 -1.168 0.678 2.645 1.264 + 483.00 14.009 14.034 14.103 -0.841 -1.392 1.896 -0.841 -1.392 -2.640 -1.595 1.172 3.120 1.650 + 483.05 14.265 14.306 14.367 -1.088 -1.316 2.152 -1.088 -1.316 -2.833 -2.342 1.432 3.774 1.972 + 483.10 14.238 14.285 14.318 -1.156 -0.982 2.125 -1.156 -0.982 -2.087 -2.457 1.136 3.408 1.709 + 483.15 14.362 14.407 14.463 -1.148 -1.268 2.249 -1.148 -1.268 -2.851 -2.581 1.455 3.991 2.056 + 483.20 14.106 14.149 14.214 -1.102 -1.358 1.993 -1.102 -1.358 -2.707 -2.196 1.496 3.515 1.896 + 483.25 13.853 13.933 13.966 -1.489 -0.960 1.740 -1.489 -0.960 -1.671 -2.591 1.430 3.084 1.699 + 483.30 13.712 13.782 13.819 -1.385 -1.016 1.599 -1.385 -1.016 -1.624 -2.216 1.407 2.754 1.543 + 483.35 13.500 13.545 13.585 -1.112 -1.031 1.387 -1.112 -1.031 -1.430 -1.542 1.147 2.112 1.198 + 483.40 13.312 13.344 13.358 -0.930 -0.604 1.199 -0.930 -0.604 -0.724 -1.115 0.562 1.334 0.722 + 483.45 13.345 13.360 13.396 -0.640 -0.983 1.232 -0.640 -0.983 -1.211 -0.788 0.629 1.447 0.788 + 483.50 13.394 13.424 13.456 -0.903 -0.924 1.281 -0.903 -0.924 -1.183 -1.157 0.834 1.655 0.927 + 483.55 13.306 13.360 13.407 -1.195 -1.116 1.194 -1.195 -1.116 -1.332 -1.427 1.334 2.049 1.182 + 483.60 13.193 13.244 13.279 -1.164 -0.963 1.080 -1.164 -0.963 -1.040 -1.258 1.121 1.725 0.990 + 483.65 13.251 13.342 13.364 -1.557 -0.768 1.138 -1.557 -0.768 -0.875 -1.772 1.196 2.154 1.155 + 483.70 13.419 13.519 13.555 -1.638 -0.994 1.306 -1.638 -0.994 -1.299 -2.140 1.629 2.689 1.493 + 483.75 13.213 13.279 13.337 -1.321 -1.238 1.100 -1.321 -1.238 -1.363 -1.453 1.636 2.244 1.289 + 483.80 13.040 13.104 13.158 -1.299 -1.193 0.927 -1.299 -1.193 -1.106 -1.204 1.550 1.985 1.126 + 483.85 13.141 13.177 13.255 -0.976 -1.428 1.028 -0.976 -1.428 -1.468 -1.004 1.394 2.025 1.130 + 483.90 13.183 13.207 13.265 -0.800 -1.236 1.070 -0.800 -1.236 -1.323 -0.856 0.989 1.657 0.930 + 483.95 13.198 13.216 13.272 -0.680 -1.220 1.086 -0.680 -1.220 -1.324 -0.738 0.829 1.564 0.864 + 484.00 13.172 13.206 13.251 -0.940 -1.097 1.059 -0.940 -1.097 -1.162 -0.996 1.031 1.605 0.923 + 484.05 13.524 13.556 13.605 -0.940 -1.143 1.411 -0.940 -1.143 -1.613 -1.326 1.075 2.091 1.174 + 484.10 13.794 13.833 13.897 -1.036 -1.333 1.681 -1.036 -1.333 -2.242 -1.741 1.381 2.839 1.578 + 484.15 13.579 13.630 13.680 -1.172 -1.174 1.467 -1.172 -1.174 -1.722 -1.719 1.376 2.451 1.397 + 484.20 13.642 13.687 13.762 -1.119 -1.433 1.529 -1.119 -1.433 -2.191 -1.711 1.604 2.822 1.605 + 484.25 13.383 13.406 13.487 -0.786 -1.479 1.270 -0.786 -1.479 -1.879 -0.998 1.163 2.209 1.212 + 484.30 13.551 13.601 13.685 -1.169 -1.513 1.438 -1.169 -1.513 -2.176 -1.681 1.769 2.862 1.635 + 484.35 13.556 13.596 13.669 -1.043 -1.415 1.443 -1.043 -1.415 -2.042 -1.505 1.475 2.586 1.467 + 484.40 13.212 13.253 13.297 -1.045 -1.085 1.099 -1.045 -1.085 -1.193 -1.149 1.135 1.739 1.004 + 484.45 13.115 13.148 13.188 -0.933 -1.026 1.002 -0.933 -1.026 -1.028 -0.935 0.958 1.464 0.844 + 484.50 13.197 13.228 13.275 -0.913 -1.113 1.084 -0.913 -1.113 -1.206 -0.990 1.017 1.624 0.931 + 484.55 13.232 13.247 13.293 -0.633 -1.113 1.119 -0.633 -1.113 -1.245 -0.708 0.704 1.446 0.798 + 484.60 13.362 13.388 13.424 -0.837 -0.979 1.249 -0.837 -0.979 -1.224 -1.046 0.820 1.610 0.903 + 484.65 13.184 13.228 13.265 -1.080 -0.984 1.071 -1.080 -0.984 -1.054 -1.157 1.063 1.642 0.946 + 484.70 12.936 12.998 13.013 -1.277 -0.624 0.823 -1.277 -0.624 -0.514 -1.051 0.797 1.348 0.708 + 484.75 12.839 12.887 12.897 -1.108 -0.507 0.726 -1.108 -0.507 -0.368 -0.805 0.562 1.006 0.524 + 484.80 12.808 12.838 12.855 -0.887 -0.662 0.695 -0.887 -0.662 -0.460 -0.616 0.587 0.854 0.484 + 484.85 13.194 13.233 13.245 -1.018 -0.565 1.081 -1.018 -0.565 -0.611 -1.101 0.575 1.262 0.692 + 484.90 13.273 13.302 13.308 -0.871 -0.411 1.160 -0.871 -0.411 -0.477 -1.011 0.358 1.137 0.587 + 484.95 13.029 13.061 13.063 -0.917 -0.209 0.916 -0.917 -0.209 -0.191 -0.840 0.191 0.862 0.441 + 485.00 13.225 13.238 13.238 -0.593 0.021 1.112 -0.593 0.021 0.023 -0.659 -0.012 0.795 0.330 + 485.05 13.397 13.430 13.430 -0.935 0.066 1.285 -0.935 0.066 0.085 -1.202 -0.062 1.265 0.603 + 485.10 13.557 13.601 13.601 -1.093 -0.018 1.444 -1.093 -0.018 -0.026 -1.578 0.020 1.640 0.789 + 485.15 13.527 13.575 13.576 -1.141 0.174 1.414 -1.141 0.174 0.246 -1.613 -0.199 1.666 0.822 + 485.20 13.696 13.735 13.738 -1.037 0.274 1.583 -1.037 0.274 0.434 -1.642 -0.284 1.829 0.861 + 485.25 13.700 13.738 13.743 -1.018 0.367 1.587 -1.018 0.367 0.582 -1.615 -0.373 1.845 0.878 + 485.30 13.396 13.413 13.414 -0.666 0.202 1.283 -0.666 0.202 0.259 -0.855 -0.135 1.066 0.452 + 485.35 13.135 13.147 13.147 -0.561 0.077 1.022 -0.561 0.077 0.079 -0.573 -0.043 0.683 0.290 + 485.40 13.242 13.246 13.246 -0.335 0.035 1.129 -0.335 0.035 0.040 -0.378 -0.012 0.694 0.190 + 485.45 13.003 13.014 13.015 -0.537 0.191 0.890 -0.537 0.191 0.170 -0.478 -0.102 0.559 0.259 + 485.50 12.999 13.005 13.005 -0.396 0.082 0.886 -0.396 0.082 0.073 -0.351 -0.033 0.474 0.180 + 485.55 13.114 13.117 13.119 -0.257 0.262 1.001 -0.257 0.262 0.263 -0.257 -0.067 0.569 0.187 + 485.60 12.805 12.814 12.824 -0.463 0.518 0.692 -0.463 0.518 0.359 -0.320 -0.240 0.481 0.269 + 485.65 13.141 13.151 13.151 -0.527 -0.006 1.028 -0.527 -0.006 -0.006 -0.542 0.003 0.667 0.271 + 485.70 13.046 13.046 13.049 -0.065 0.306 0.933 -0.065 0.306 0.285 -0.060 -0.020 0.484 0.146 + 485.75 13.090 13.091 13.100 -0.159 0.483 0.978 -0.159 0.483 0.472 -0.156 -0.077 0.607 0.251 + 485.80 12.702 12.712 12.730 -0.507 0.670 0.589 -0.507 0.670 0.395 -0.299 -0.340 0.526 0.300 + 485.85 12.632 12.638 12.657 -0.390 0.701 0.519 -0.390 0.701 0.364 -0.202 -0.273 0.456 0.249 + 485.90 12.567 12.573 12.577 -0.396 0.294 0.454 -0.396 0.294 0.134 -0.180 -0.116 0.225 0.126 + 485.95 12.663 12.667 12.670 -0.310 0.267 0.550 -0.310 0.267 0.147 -0.170 -0.083 0.235 0.120 + 486.00 12.714 12.715 12.717 -0.187 0.178 0.601 -0.187 0.178 0.107 -0.113 -0.033 0.214 0.079 + 486.05 12.484 12.488 12.488 -0.339 0.059 0.371 -0.339 0.059 0.022 -0.126 -0.020 0.128 0.065 + 486.10 12.521 12.539 12.542 -0.683 0.287 0.408 -0.683 0.287 0.117 -0.278 -0.196 0.357 0.180 + 486.15 12.416 12.445 12.449 -0.847 0.298 0.304 -0.847 0.298 0.091 -0.257 -0.253 0.449 0.186 + 486.20 12.656 12.681 12.683 -0.798 0.192 0.543 -0.798 0.192 0.105 -0.434 -0.153 0.484 0.236 + 486.25 12.679 12.692 12.693 -0.567 0.144 0.566 -0.567 0.144 0.081 -0.321 -0.082 0.332 0.171 + 486.30 12.566 12.572 12.574 -0.413 0.222 0.453 -0.413 0.222 0.100 -0.187 -0.091 0.212 0.116 + 486.35 12.593 12.594 12.599 -0.188 0.352 0.480 -0.188 0.352 0.169 -0.090 -0.066 0.195 0.101 + 486.40 12.565 12.566 12.580 -0.075 0.592 0.453 -0.075 0.592 0.268 -0.034 -0.044 0.280 0.137 + 486.45 12.282 12.283 12.289 -0.202 0.392 0.169 -0.202 0.392 0.066 -0.034 -0.079 0.112 0.054 + 486.50 12.242 12.244 12.258 0.218 0.592 0.129 0.218 0.592 0.076 0.028 0.129 0.208 0.076 + 486.55 12.240 12.240 12.248 0.056 0.448 0.127 0.056 0.448 0.057 0.007 0.025 0.110 0.031 + 486.60 12.327 12.327 12.327 0.004 0.074 0.214 0.004 0.074 0.016 0.001 0.000 0.026 0.008 + 486.65 12.477 12.477 12.477 0.012 -0.086 0.364 0.012 -0.086 -0.031 0.004 -0.001 0.070 0.016 + 486.70 12.436 12.437 12.439 -0.115 -0.256 0.323 -0.115 -0.256 -0.083 -0.037 0.029 0.092 0.048 + 486.75 12.739 12.742 12.744 -0.282 -0.216 0.626 -0.282 -0.216 -0.135 -0.177 0.061 0.259 0.115 + 486.80 12.743 12.752 12.755 -0.483 -0.294 0.630 -0.483 -0.294 -0.185 -0.304 0.142 0.358 0.192 + 486.85 12.920 12.925 12.932 -0.356 -0.421 0.807 -0.356 -0.421 -0.340 -0.287 0.150 0.478 0.235 + 486.90 12.526 12.526 12.528 0.004 -0.229 0.413 0.004 -0.229 -0.095 0.002 -0.001 0.111 0.047 + 486.95 12.655 12.655 12.660 -0.029 -0.355 0.542 -0.029 -0.355 -0.192 -0.016 0.010 0.210 0.097 + 487.00 12.585 12.591 12.602 -0.384 -0.537 0.472 -0.384 -0.537 -0.253 -0.181 0.206 0.329 0.187 + 487.05 12.516 12.522 12.530 -0.381 -0.455 0.403 -0.381 -0.455 -0.183 -0.153 0.173 0.257 0.148 + 487.10 12.226 12.227 12.241 -0.160 -0.567 0.114 -0.160 -0.567 -0.064 -0.018 0.091 0.180 0.056 + 487.15 12.838 12.839 12.846 0.081 -0.435 0.726 0.081 -0.435 -0.316 0.059 -0.035 0.361 0.162 + 487.20 13.012 13.015 13.021 -0.282 -0.396 0.899 -0.282 -0.396 -0.356 -0.254 0.112 0.523 0.226 + 487.25 12.770 12.773 12.776 -0.258 -0.284 0.658 -0.258 -0.284 -0.187 -0.170 0.073 0.290 0.131 + 487.30 12.754 12.756 12.758 -0.218 -0.243 0.641 -0.218 -0.243 -0.156 -0.140 0.053 0.259 0.108 + 487.35 12.782 12.802 12.805 -0.717 -0.244 0.669 -0.717 -0.244 -0.163 -0.480 0.175 0.511 0.268 + 487.40 13.176 13.179 13.179 -0.266 0.059 1.063 -0.266 0.059 0.063 -0.283 -0.016 0.602 0.145 + 487.45 13.284 13.296 13.296 -0.570 0.105 1.171 -0.570 0.105 0.123 -0.668 -0.060 0.854 0.341 + 487.50 13.261 13.272 13.273 -0.521 0.194 1.149 -0.521 0.194 0.223 -0.598 -0.101 0.814 0.323 + 487.55 13.358 13.370 13.374 -0.548 0.325 1.246 -0.548 0.325 0.405 -0.682 -0.178 0.979 0.407 + 487.60 13.166 13.166 13.178 -0.145 0.558 1.053 -0.145 0.558 0.587 -0.152 -0.081 0.720 0.306 + 487.65 13.368 13.370 13.376 0.213 0.390 1.255 0.213 0.390 0.489 0.267 0.083 0.886 0.282 + 487.70 12.976 12.981 12.985 0.327 0.352 0.864 0.327 0.352 0.304 0.283 0.115 0.488 0.215 + 487.75 12.643 12.650 12.665 0.423 0.627 0.530 0.423 0.627 0.332 0.224 0.265 0.426 0.240 + 487.80 12.747 12.751 12.769 0.288 0.689 0.635 0.288 0.689 0.437 0.183 0.198 0.480 0.257 + 487.85 12.668 12.699 12.709 0.890 0.499 0.555 0.890 0.499 0.277 0.494 0.444 0.675 0.360 + 487.90 12.629 12.701 12.702 1.347 0.206 0.516 1.347 0.206 0.106 0.695 0.277 1.062 0.378 + 487.95 12.756 12.814 12.818 1.224 -0.286 0.643 1.224 -0.286 -0.184 0.787 -0.351 0.997 0.441 + 488.00 12.939 13.005 13.005 1.312 0.043 0.826 1.312 0.043 0.036 1.084 0.057 1.203 0.543 + 488.05 12.618 12.663 12.664 1.064 0.151 0.505 1.064 0.151 0.076 0.538 0.161 0.705 0.283 + 488.10 12.675 12.741 12.741 1.288 -0.037 0.562 1.288 -0.037 -0.021 0.725 -0.047 0.989 0.363 + 488.15 12.815 12.887 12.887 1.361 0.018 0.702 1.361 0.018 0.013 0.955 0.025 1.172 0.478 + 488.20 12.793 12.846 12.848 1.159 -0.249 0.681 1.159 -0.249 -0.169 0.789 -0.289 0.935 0.429 + 488.25 12.861 12.978 12.997 1.745 -0.687 0.748 1.745 -0.687 -0.513 1.305 -1.198 2.038 0.922 + 488.30 12.683 12.816 12.835 1.841 -0.691 0.571 1.841 -0.691 -0.394 1.051 -1.272 2.096 0.848 + 488.35 12.913 13.061 13.066 1.960 -0.342 0.800 1.960 -0.342 -0.274 1.569 -0.670 2.300 0.864 + 488.40 12.689 12.859 12.861 2.085 -0.232 0.576 2.085 -0.232 -0.134 1.201 -0.483 2.367 0.651 + 488.45 12.689 12.769 12.771 1.425 -0.205 0.577 1.425 -0.205 -0.118 0.822 -0.292 1.203 0.440 + 488.50 12.743 12.817 12.817 1.368 -0.042 0.631 1.368 -0.042 -0.027 0.863 -0.058 1.136 0.433 + 488.55 12.699 12.753 12.753 1.172 -0.040 0.586 1.172 -0.040 -0.023 0.687 -0.047 0.859 0.344 + 488.60 12.689 12.727 12.728 0.979 -0.172 0.576 0.979 -0.172 -0.099 0.564 -0.168 0.660 0.298 + 488.65 12.607 12.633 12.644 0.807 -0.517 0.495 0.807 -0.517 -0.256 0.399 -0.417 0.581 0.316 + 488.70 12.690 12.702 12.713 0.544 -0.528 0.577 0.544 -0.528 -0.305 0.314 -0.287 0.454 0.262 + 488.75 12.693 12.703 12.711 0.493 -0.446 0.581 0.493 -0.446 -0.259 0.286 -0.220 0.390 0.222 + 488.80 12.325 12.341 12.353 0.618 -0.565 0.212 0.618 -0.565 -0.120 0.131 -0.349 0.373 0.196 + 488.85 12.327 12.356 12.368 0.855 -0.551 0.214 0.855 -0.551 -0.118 0.183 -0.471 0.540 0.260 + 488.90 11.965 11.993 12.002 0.814 -0.454 -0.147 0.814 -0.454 0.067 -0.120 -0.370 0.446 0.197 + 488.95 11.586 11.598 11.620 0.530 -0.710 -0.527 0.530 -0.710 0.374 -0.279 -0.376 0.531 0.300 + 489.00 11.507 11.521 11.548 0.564 -0.792 -0.605 0.564 -0.792 0.480 -0.342 -0.447 0.656 0.370 + 489.05 11.753 11.782 11.806 0.821 -0.752 -0.360 0.821 -0.752 0.270 -0.295 -0.618 0.685 0.368 + 489.10 11.669 11.721 11.766 1.109 -1.021 -0.444 1.109 -1.021 0.453 -0.493 -1.132 1.235 0.658 + 489.15 11.936 11.971 11.991 0.908 -0.700 -0.176 0.908 -0.700 0.124 -0.160 -0.636 0.673 0.334 + 489.20 11.991 12.009 12.028 0.668 -0.674 -0.122 0.668 -0.674 0.082 -0.082 -0.450 0.458 0.233 + 489.25 11.885 11.923 11.953 0.958 -0.850 -0.228 0.958 -0.850 0.194 -0.219 -0.815 0.846 0.433 + 489.30 11.916 11.995 12.034 1.369 -0.967 -0.196 1.369 -0.967 0.190 -0.269 -1.323 1.424 0.682 + 489.35 11.816 11.862 11.910 1.047 -1.060 -0.297 1.047 -1.060 0.314 -0.311 -1.110 1.154 0.597 + 489.40 11.656 11.696 11.740 0.962 -1.020 -0.457 0.962 -1.020 0.466 -0.439 -0.981 1.087 0.586 + 489.45 11.390 11.406 11.465 0.601 -1.167 -0.723 0.601 -1.167 0.844 -0.435 -0.702 1.123 0.590 + 489.50 11.098 11.123 11.145 0.746 -0.710 -1.015 0.746 -0.710 0.721 -0.757 -0.530 1.046 0.586 + 489.55 11.022 11.036 11.051 0.548 -0.572 -1.091 0.548 -0.572 0.624 -0.598 -0.314 0.909 0.460 + 489.60 11.082 11.089 11.106 0.392 -0.619 -1.031 0.392 -0.619 0.638 -0.404 -0.243 0.800 0.397 + 489.65 11.276 11.289 11.301 0.545 -0.503 -0.837 0.545 -0.503 0.421 -0.456 -0.274 0.624 0.339 + 489.70 10.873 10.875 10.877 0.232 -0.191 -1.240 0.232 -0.191 0.236 -0.288 -0.044 0.814 0.188 + 489.75 11.112 11.112 11.116 0.125 -0.302 -1.001 0.125 -0.302 0.303 -0.125 -0.038 0.555 0.165 + 489.80 11.412 11.415 11.416 0.251 -0.153 -0.700 0.251 -0.153 0.107 -0.176 -0.038 0.288 0.105 + 489.85 11.264 11.269 11.284 0.320 -0.588 -0.849 0.320 -0.588 0.499 -0.271 -0.188 0.584 0.299 + 489.90 11.457 11.472 11.483 0.596 -0.500 -0.656 0.596 -0.500 0.328 -0.391 -0.298 0.517 0.295 + 489.95 11.358 11.363 11.366 0.354 -0.256 -0.755 0.354 -0.256 0.194 -0.267 -0.091 0.381 0.171 + 490.00 10.982 10.987 10.987 0.358 0.032 -1.131 0.358 0.032 -0.036 -0.405 0.011 0.704 0.203 + 490.05 10.978 10.983 10.983 0.320 0.071 -1.135 0.320 0.071 -0.080 -0.363 0.023 0.697 0.186 + 490.10 11.135 11.143 11.143 0.402 0.004 -0.977 0.402 0.004 -0.004 -0.393 0.002 0.559 0.197 + 490.15 11.286 11.289 11.291 0.261 -0.216 -0.826 0.261 -0.216 0.179 -0.215 -0.056 0.399 0.143 + 490.20 11.397 11.398 11.399 0.198 -0.016 -0.716 0.198 -0.016 0.011 -0.141 -0.003 0.276 0.071 + 490.25 11.654 11.664 11.664 0.490 -0.022 -0.459 0.490 -0.022 0.010 -0.225 -0.011 0.226 0.113 + 490.30 11.977 11.992 11.992 0.604 -0.068 -0.136 0.604 -0.068 0.009 -0.082 -0.041 0.194 0.046 + 490.35 12.172 12.181 12.181 0.472 0.018 0.059 0.472 0.018 0.001 0.028 0.008 0.113 0.014 + 490.40 12.141 12.149 12.152 0.434 0.277 0.028 0.434 0.277 0.008 0.012 0.120 0.133 0.060 + 490.45 12.075 12.076 12.077 0.213 -0.120 -0.038 0.213 -0.120 0.005 -0.008 -0.026 0.031 0.014 + 490.50 12.177 12.186 12.186 0.463 0.090 0.065 0.463 0.090 0.006 0.030 0.042 0.113 0.026 + 490.55 12.060 12.083 12.086 0.742 0.295 -0.053 0.742 0.295 -0.016 -0.039 0.219 0.320 0.111 + 490.60 11.985 12.026 12.033 1.000 0.408 -0.128 1.000 0.408 -0.052 -0.128 0.407 0.591 0.215 + 490.65 12.042 12.068 12.072 0.798 0.299 -0.071 0.798 0.299 -0.021 -0.056 0.239 0.365 0.123 + 490.70 12.017 12.041 12.045 0.765 0.320 -0.096 0.765 0.320 -0.031 -0.074 0.245 0.348 0.129 + 490.75 12.092 12.097 12.101 0.343 0.315 -0.021 0.343 0.315 -0.007 -0.007 0.108 0.108 0.054 + 490.80 12.139 12.145 12.146 0.411 0.117 0.026 0.411 0.117 0.003 0.011 0.048 0.092 0.025 + 490.85 12.092 12.111 12.114 0.673 0.299 -0.021 0.673 0.299 -0.006 -0.014 0.201 0.272 0.101 + 490.90 12.486 12.496 12.502 0.501 0.387 0.373 0.501 0.387 0.144 0.187 0.194 0.270 0.153 + 490.95 12.554 12.555 12.556 0.172 0.142 0.442 0.172 0.142 0.063 0.076 0.024 0.122 0.051 + 491.00 12.535 12.537 12.551 0.224 0.582 0.423 0.224 0.582 0.246 0.095 0.131 0.284 0.147 + 491.05 12.621 12.625 12.636 0.330 0.530 0.508 0.330 0.530 0.269 0.168 0.175 0.324 0.181 + 491.10 12.902 12.905 12.913 0.279 0.456 0.789 0.279 0.456 0.360 0.220 0.127 0.454 0.220 + 491.15 12.638 12.638 12.642 0.056 0.330 0.525 0.056 0.330 0.173 0.029 0.019 0.194 0.088 + 491.20 12.604 12.605 12.607 0.161 0.248 0.491 0.161 0.248 0.122 0.079 0.040 0.164 0.075 + 491.25 12.329 12.329 12.340 0.078 0.512 0.216 0.078 0.512 0.110 0.017 0.040 0.157 0.059 + 491.30 12.046 12.048 12.059 0.232 0.502 -0.067 0.232 0.502 -0.034 -0.016 0.116 0.155 0.061 + 491.35 12.013 12.014 12.018 0.078 0.330 -0.099 0.078 0.330 -0.033 -0.008 0.026 0.062 0.021 + 491.40 12.014 12.014 12.038 -0.009 0.751 -0.099 -0.009 0.751 -0.074 0.001 -0.007 0.287 0.037 + 491.45 11.583 11.599 11.600 -0.600 0.136 -0.529 -0.600 0.136 -0.072 0.317 -0.081 0.329 0.168 + 491.50 11.846 11.863 11.863 -0.633 0.008 -0.267 -0.633 0.008 -0.002 0.169 -0.005 0.236 0.084 + 491.55 11.739 11.745 11.746 -0.388 0.117 -0.374 -0.388 0.117 -0.044 0.145 -0.046 0.152 0.079 + 491.60 11.743 11.743 11.746 -0.023 0.266 -0.370 -0.023 0.266 -0.098 0.008 -0.006 0.104 0.050 + 491.65 11.556 11.561 11.565 0.326 0.316 -0.557 0.326 0.316 -0.176 -0.181 0.103 0.258 0.136 + 491.70 11.668 11.668 11.678 0.050 0.467 -0.445 0.050 0.467 -0.207 -0.022 0.023 0.209 0.105 + 491.75 11.617 11.622 11.646 -0.341 0.752 -0.496 -0.341 0.752 -0.373 0.169 -0.257 0.464 0.242 + 491.80 11.650 11.655 11.660 -0.318 0.339 -0.462 -0.318 0.339 -0.157 0.147 -0.108 0.215 0.120 + 491.85 11.415 11.415 11.416 0.018 -0.191 -0.698 0.018 -0.191 0.133 -0.013 -0.003 0.262 0.067 + 491.90 11.516 11.521 11.523 0.327 -0.206 -0.596 0.327 -0.206 0.123 -0.195 -0.067 0.253 0.120 + 491.95 11.688 11.688 11.688 0.056 -0.005 -0.425 0.056 -0.005 0.002 -0.024 -0.000 0.092 0.012 + 492.00 11.551 11.551 11.555 -0.120 -0.300 -0.562 -0.120 -0.300 0.168 0.067 0.036 0.210 0.092 + 492.05 11.506 11.506 11.509 -0.032 -0.239 -0.607 -0.032 -0.239 0.145 0.019 0.008 0.213 0.073 + 492.10 11.303 11.305 11.305 -0.230 0.041 -0.810 -0.230 0.041 -0.033 0.187 -0.009 0.356 0.095 + 492.15 11.115 11.119 11.121 -0.325 0.173 -0.998 -0.325 0.173 -0.173 0.324 -0.056 0.566 0.186 + 492.20 11.217 11.223 11.223 -0.390 0.038 -0.896 -0.390 0.038 -0.034 0.349 -0.015 0.478 0.176 + 492.25 11.271 11.276 11.276 -0.336 0.066 -0.842 -0.336 0.066 -0.055 0.282 -0.022 0.413 0.144 + 492.30 11.530 11.534 11.535 0.269 0.157 -0.582 0.269 0.157 -0.091 -0.156 0.042 0.218 0.093 + 492.35 11.995 12.001 12.002 0.356 -0.161 -0.117 0.356 -0.161 0.019 -0.042 -0.057 0.083 0.037 + 492.40 11.868 11.886 11.894 0.663 -0.438 -0.245 0.663 -0.438 0.108 -0.163 -0.291 0.346 0.175 + 492.45 11.577 11.599 11.609 0.701 -0.483 -0.535 0.701 -0.483 0.258 -0.375 -0.338 0.506 0.284 + 492.50 11.390 11.423 11.428 0.876 -0.322 -0.723 0.876 -0.322 0.233 -0.634 -0.282 0.697 0.366 + 492.55 11.529 11.560 11.590 0.845 -0.834 -0.584 0.845 -0.834 0.487 -0.494 -0.705 0.875 0.494 + 492.60 11.482 11.500 11.515 0.648 -0.585 -0.631 0.648 -0.585 0.369 -0.409 -0.379 0.580 0.335 + 492.65 11.502 11.515 11.523 0.540 -0.436 -0.611 0.540 -0.436 0.267 -0.330 -0.236 0.428 0.243 + 492.70 11.632 11.643 11.681 0.508 -0.936 -0.481 0.508 -0.936 0.450 -0.244 -0.475 0.683 0.349 + 492.75 11.641 11.656 11.676 0.600 -0.685 -0.472 0.600 -0.685 0.323 -0.283 -0.411 0.526 0.297 + 492.80 11.687 11.698 11.702 0.515 -0.314 -0.426 0.515 -0.314 0.134 -0.220 -0.162 0.273 0.152 + 492.85 11.850 11.871 11.881 0.699 -0.495 -0.263 0.699 -0.495 0.130 -0.184 -0.346 0.401 0.206 + 492.90 11.635 11.655 11.662 0.677 -0.415 -0.478 0.677 -0.415 0.198 -0.324 -0.281 0.429 0.236 + 492.95 11.731 11.742 11.743 0.521 -0.145 -0.382 0.521 -0.145 0.055 -0.199 -0.076 0.219 0.110 + 493.00 11.620 11.637 11.639 0.638 -0.200 -0.493 0.638 -0.200 0.098 -0.314 -0.127 0.345 0.177 + 493.05 11.775 11.812 11.816 0.928 -0.302 -0.338 0.928 -0.302 0.102 -0.313 -0.280 0.533 0.216 + 493.10 11.834 11.890 11.900 1.149 -0.496 -0.278 1.149 -0.496 0.138 -0.320 -0.570 0.822 0.334 + 493.15 11.996 12.023 12.048 0.800 -0.770 -0.117 0.800 -0.770 0.090 -0.093 -0.617 0.624 0.315 + 493.20 11.871 11.902 11.938 0.853 -0.929 -0.241 0.853 -0.929 0.224 -0.206 -0.792 0.824 0.424 + 493.25 12.229 12.277 12.305 1.089 -0.825 0.116 1.089 -0.825 -0.096 0.126 -0.898 0.940 0.456 + 493.30 12.397 12.438 12.451 1.009 -0.566 0.284 1.009 -0.566 -0.161 0.286 -0.571 0.709 0.329 + 493.35 12.331 12.380 12.398 1.099 -0.660 0.219 1.099 -0.660 -0.144 0.240 -0.726 0.846 0.389 + 493.40 12.131 12.171 12.219 0.988 -1.085 0.018 0.988 -1.085 -0.019 0.018 -1.072 1.077 0.536 + 493.45 12.154 12.203 12.240 1.093 -0.948 0.042 1.093 -0.948 -0.039 0.045 -1.036 1.047 0.519 + 493.50 12.192 12.263 12.299 1.318 -0.936 0.079 1.318 -0.936 -0.074 0.105 -1.233 1.309 0.620 + 493.55 12.138 12.201 12.230 1.233 -0.838 0.026 1.233 -0.838 -0.022 0.032 -1.033 1.111 0.517 + 493.60 12.080 12.130 12.157 1.102 -0.799 -0.033 1.102 -0.799 0.026 -0.036 -0.880 0.927 0.441 + 493.65 11.933 11.995 12.007 1.216 -0.540 -0.180 1.216 -0.540 0.097 -0.219 -0.657 0.901 0.350 + 493.70 11.815 11.850 11.851 0.916 -0.095 -0.298 0.916 -0.095 0.028 -0.273 -0.087 0.468 0.144 + 493.75 11.962 12.025 12.028 1.230 -0.272 -0.151 1.230 -0.272 0.041 -0.185 -0.335 0.805 0.193 + 493.80 12.323 12.395 12.400 1.338 -0.340 0.210 1.338 -0.340 -0.071 0.281 -0.455 0.975 0.270 + 493.85 12.655 12.736 12.736 1.438 0.055 0.542 1.438 0.055 0.030 0.779 0.079 1.183 0.392 + 493.90 12.991 13.057 13.057 1.309 -0.030 0.878 1.309 -0.030 -0.027 1.150 -0.040 1.243 0.576 + 493.95 13.301 13.353 13.354 1.179 -0.183 1.188 1.179 -0.183 -0.217 1.401 -0.215 1.417 0.717 + 494.00 13.344 13.389 13.390 1.104 -0.160 1.231 1.104 -0.160 -0.197 1.359 -0.177 1.380 0.692 + 494.05 13.162 13.210 13.212 1.125 -0.239 1.049 1.125 -0.239 -0.251 1.180 -0.269 1.212 0.618 + 494.10 12.922 12.978 12.981 1.204 -0.258 0.810 1.204 -0.258 -0.209 0.975 -0.311 1.086 0.522 + 494.15 12.935 12.971 12.973 0.966 -0.238 0.822 0.966 -0.238 -0.196 0.794 -0.230 0.833 0.425 + 494.20 12.986 13.004 13.008 0.669 -0.327 0.874 0.669 -0.327 -0.286 0.584 -0.219 0.659 0.343 + 494.25 12.944 12.955 12.963 0.525 -0.457 0.831 0.525 -0.457 -0.380 0.437 -0.240 0.588 0.313 + 494.30 12.748 12.757 12.764 0.484 -0.442 0.635 0.484 -0.442 -0.280 0.307 -0.214 0.416 0.234 + 494.35 12.796 12.798 12.814 0.180 -0.643 0.684 0.180 -0.643 -0.439 0.123 -0.116 0.457 0.235 + 494.40 12.772 12.776 12.786 0.314 -0.505 0.659 0.314 -0.505 -0.333 0.207 -0.158 0.394 0.211 + 494.45 12.714 12.714 12.735 0.059 -0.728 0.601 0.059 -0.728 -0.438 0.035 -0.043 0.447 0.221 + 494.50 12.610 12.612 12.636 -0.253 -0.779 0.497 -0.253 -0.779 -0.387 -0.126 0.197 0.459 0.226 + 494.55 12.661 12.661 12.666 -0.073 -0.358 0.548 -0.073 -0.358 -0.196 -0.040 0.026 0.217 0.101 + 494.60 12.822 12.826 12.828 0.300 -0.233 0.709 0.300 -0.233 -0.165 0.213 -0.070 0.324 0.139 + 494.65 12.867 12.868 12.875 0.186 -0.427 0.754 0.186 -0.427 -0.322 0.140 -0.079 0.393 0.180 + 494.70 12.833 12.842 12.850 0.475 -0.455 0.720 0.475 -0.455 -0.328 0.342 -0.216 0.475 0.260 + 494.75 12.500 12.501 12.507 0.082 -0.395 0.388 0.082 -0.395 -0.153 0.032 -0.032 0.157 0.080 + 494.80 12.074 12.074 12.080 -0.045 -0.385 -0.039 -0.045 -0.385 0.015 0.002 0.017 0.076 0.011 + 494.85 12.366 12.366 12.386 -0.016 -0.714 0.253 -0.016 -0.714 -0.181 -0.004 0.011 0.287 0.090 + 494.90 12.368 12.368 12.429 -0.048 -1.229 0.255 -0.048 -1.229 -0.313 -0.012 0.059 0.789 0.160 + 494.95 12.556 12.564 12.628 0.462 -1.270 0.443 0.462 -1.270 -0.563 0.205 -0.587 1.011 0.419 + 495.00 12.960 12.961 13.001 0.107 -1.027 0.847 0.107 -1.027 -0.870 0.091 -0.110 0.892 0.441 + 495.05 13.051 13.054 13.073 0.249 -0.703 0.939 0.249 -0.703 -0.660 0.234 -0.175 0.719 0.361 + 495.10 12.935 12.936 12.945 0.171 -0.485 0.822 0.171 -0.485 -0.398 0.141 -0.083 0.470 0.215 + 495.15 13.000 13.002 13.018 0.227 -0.641 0.888 0.227 -0.641 -0.569 0.202 -0.146 0.625 0.310 + 495.20 13.016 13.019 13.040 0.276 -0.741 0.903 0.276 -0.741 -0.669 0.250 -0.205 0.720 0.371 + 495.25 12.927 12.930 12.932 0.275 -0.226 0.815 0.275 -0.226 -0.184 0.224 -0.062 0.395 0.148 + 495.30 12.834 12.834 12.844 0.125 -0.509 0.721 0.125 -0.509 -0.367 0.090 -0.063 0.397 0.191 + 495.35 12.908 12.910 12.917 0.204 -0.432 0.796 0.204 -0.432 -0.344 0.162 -0.088 0.431 0.195 + 495.40 12.725 12.725 12.726 0.039 -0.142 0.612 0.039 -0.142 -0.087 0.024 -0.006 0.198 0.045 + 495.45 12.572 12.573 12.573 -0.098 -0.013 0.459 -0.098 -0.013 -0.006 -0.045 0.001 0.110 0.023 + 495.50 12.737 12.737 12.737 -0.026 0.095 0.624 -0.026 0.095 0.059 -0.016 -0.002 0.200 0.031 + 495.55 12.581 12.581 12.583 0.067 0.216 0.468 0.067 0.216 0.101 0.032 0.015 0.135 0.053 + 495.60 12.533 12.533 12.533 -0.020 0.054 0.420 -0.020 0.054 0.023 -0.008 -0.001 0.090 0.012 + 495.65 12.269 12.275 12.275 0.386 0.103 0.156 0.386 0.103 0.016 0.060 0.040 0.092 0.037 + 495.70 12.527 12.536 12.536 0.470 0.033 0.415 0.470 0.033 0.014 0.195 0.015 0.197 0.098 + 495.75 12.542 12.552 12.552 0.487 -0.148 0.429 0.487 -0.148 -0.063 0.209 -0.072 0.221 0.115 + 495.80 12.300 12.331 12.331 0.875 -0.031 0.188 0.875 -0.031 -0.006 0.164 -0.027 0.401 0.083 + 495.85 12.589 12.598 12.600 0.482 0.258 0.476 0.482 0.258 0.123 0.229 0.124 0.262 0.144 + 495.90 12.537 12.547 12.552 0.499 0.344 0.424 0.499 0.344 0.146 0.212 0.172 0.274 0.155 + 495.95 12.433 12.438 12.441 0.341 0.260 0.320 0.341 0.260 0.083 0.109 0.088 0.143 0.082 + 496.00 12.183 12.185 12.198 -0.235 0.567 0.070 -0.235 0.567 0.040 -0.016 -0.133 0.191 0.070 + 496.05 12.115 12.117 12.124 -0.236 0.420 0.002 -0.236 0.420 0.001 -0.000 -0.099 0.116 0.050 + 496.10 11.995 11.999 12.003 -0.329 0.320 -0.118 -0.329 0.320 -0.038 0.039 -0.105 0.112 0.059 + 496.15 11.873 11.884 11.894 -0.507 0.490 -0.240 -0.507 0.490 -0.117 0.122 -0.249 0.278 0.150 + 496.20 11.554 11.559 11.560 -0.341 0.169 -0.559 -0.341 0.169 -0.094 0.191 -0.058 0.229 0.110 + 496.25 11.287 11.288 11.291 -0.165 0.244 -0.826 -0.165 0.244 -0.201 0.136 -0.040 0.385 0.123 + 496.30 11.002 11.006 11.047 -0.314 0.952 -1.111 -0.314 0.952 -1.058 0.348 -0.299 1.120 0.577 + 496.35 11.139 11.151 11.211 -0.533 1.158 -0.974 -0.533 1.158 -1.128 0.519 -0.617 1.287 0.693 + 496.40 11.313 11.343 11.394 -0.826 1.076 -0.800 -0.826 1.076 -0.861 0.660 -0.888 1.240 0.701 + 496.45 11.076 11.108 11.182 -0.838 1.282 -1.037 -0.838 1.282 -1.329 0.869 -1.074 1.710 0.959 + 496.50 11.114 11.119 11.203 -0.308 1.376 -0.999 -0.308 1.376 -1.374 0.308 -0.424 1.492 0.735 + 496.55 10.861 10.871 10.941 -0.455 1.240 -1.252 -0.455 1.240 -1.552 0.570 -0.565 1.655 0.873 + 496.60 11.045 11.049 11.095 -0.292 1.008 -1.068 -0.292 1.008 -1.077 0.311 -0.294 1.121 0.579 + 496.65 11.321 11.333 11.392 -0.512 1.161 -0.792 -0.512 1.161 -0.919 0.405 -0.594 1.118 0.584 + 496.70 11.273 11.286 11.343 -0.530 1.141 -0.839 -0.530 1.141 -0.957 0.445 -0.605 1.143 0.608 + 496.75 11.338 11.342 11.362 -0.307 0.684 -0.775 -0.307 0.684 -0.530 0.238 -0.210 0.581 0.309 + 496.80 11.399 11.413 11.434 -0.580 0.680 -0.714 -0.580 0.680 -0.486 0.414 -0.395 0.655 0.375 + 496.85 11.600 11.607 11.621 -0.400 0.564 -0.512 -0.400 0.564 -0.289 0.205 -0.225 0.370 0.210 + 496.90 11.853 11.873 11.893 -0.689 0.673 -0.259 -0.689 0.673 -0.175 0.179 -0.464 0.498 0.263 + 496.95 11.906 11.955 11.972 -1.083 0.638 -0.207 -1.083 0.638 -0.132 0.224 -0.691 0.811 0.369 + 497.00 12.052 12.128 12.137 -1.362 0.454 -0.061 -1.362 0.454 -0.028 0.083 -0.618 1.032 0.312 + 497.05 11.990 12.047 12.056 -1.177 0.460 -0.123 -1.177 0.460 -0.057 0.145 -0.541 0.806 0.282 + 497.10 11.840 11.894 11.900 -1.134 0.394 -0.273 -1.134 0.394 -0.108 0.310 -0.447 0.758 0.277 + 497.15 11.895 11.959 11.967 -1.230 0.440 -0.217 -1.230 0.440 -0.096 0.267 -0.541 0.877 0.306 + 497.20 12.124 12.160 12.165 -0.933 0.351 0.011 -0.933 0.351 0.004 -0.010 -0.328 0.497 0.164 + 497.25 11.872 11.897 11.899 -0.781 0.214 -0.241 -0.781 0.214 -0.052 0.188 -0.167 0.357 0.129 + 497.30 11.528 11.562 11.562 -0.882 0.019 -0.584 -0.882 0.019 -0.011 0.515 -0.017 0.560 0.258 + 497.35 11.912 11.926 11.937 -0.591 -0.506 -0.201 -0.591 -0.506 0.102 0.119 0.299 0.323 0.169 + 497.40 11.725 11.728 11.729 -0.262 -0.191 -0.388 -0.262 -0.191 0.074 0.102 0.050 0.128 0.068 + 497.45 11.998 12.009 12.010 -0.522 0.186 -0.115 -0.522 0.186 -0.021 0.060 -0.097 0.160 0.058 + 497.50 12.006 12.018 12.024 -0.531 0.385 -0.107 -0.531 0.385 -0.041 0.057 -0.204 0.221 0.108 + 497.55 11.860 11.881 11.884 -0.700 0.265 -0.253 -0.700 0.265 -0.067 0.177 -0.185 0.312 0.132 + 497.60 11.787 11.803 11.804 -0.626 0.154 -0.326 -0.626 0.154 -0.050 0.204 -0.097 0.261 0.116 + 497.65 11.912 11.915 11.922 -0.272 0.393 -0.200 -0.272 0.393 -0.079 0.054 -0.107 0.134 0.072 + 497.70 11.919 11.921 11.935 -0.201 0.588 -0.194 -0.201 0.588 -0.114 0.039 -0.118 0.212 0.084 + 497.75 11.910 11.910 11.933 -0.034 0.745 -0.203 -0.034 0.745 -0.151 0.007 -0.026 0.299 0.077 + 497.80 11.970 11.970 12.006 0.136 0.918 -0.143 0.136 0.918 -0.131 -0.019 0.124 0.441 0.091 + 497.85 11.846 11.850 11.914 0.302 1.233 -0.267 0.302 1.233 -0.329 -0.081 0.373 0.842 0.252 + 497.90 11.815 11.825 11.870 0.470 1.034 -0.298 0.470 1.034 -0.308 -0.140 0.486 0.690 0.296 + 497.95 11.865 11.877 11.903 0.533 0.795 -0.248 0.533 0.795 -0.197 -0.132 0.424 0.489 0.243 + 498.00 11.977 11.981 12.025 0.293 1.027 -0.135 0.293 1.027 -0.139 -0.040 0.301 0.580 0.167 + 498.05 12.172 12.180 12.203 0.436 0.753 0.059 0.436 0.753 0.044 0.026 0.328 0.380 0.166 + 498.10 11.932 11.939 11.973 0.402 0.906 -0.181 0.402 0.906 -0.164 -0.073 0.364 0.507 0.203 + 498.15 12.009 12.021 12.038 0.542 0.638 -0.104 0.542 0.638 -0.066 -0.056 0.346 0.356 0.178 + 498.20 12.123 12.133 12.143 0.514 0.492 0.010 0.514 0.492 0.005 0.005 0.253 0.253 0.127 + 498.25 11.967 11.969 11.977 0.261 0.431 -0.146 0.261 0.431 -0.063 -0.038 0.113 0.138 0.067 + 498.30 11.849 11.850 11.851 0.177 0.135 -0.264 0.177 0.135 -0.036 -0.047 0.024 0.060 0.032 + 498.35 11.845 11.845 11.847 0.051 0.185 -0.268 0.051 0.185 -0.050 -0.014 0.009 0.054 0.026 + 498.40 11.669 11.672 11.672 0.272 0.032 -0.444 0.272 0.032 -0.014 -0.121 0.009 0.136 0.061 + 498.45 11.534 11.541 11.543 0.401 0.202 -0.579 0.401 0.202 -0.117 -0.232 0.081 0.268 0.136 + 498.50 11.734 11.736 11.740 0.224 0.314 -0.379 0.224 0.314 -0.119 -0.085 0.071 0.146 0.081 + 498.55 11.603 11.603 11.611 -0.052 0.438 -0.510 -0.052 0.438 -0.223 0.026 -0.023 0.227 0.113 + 498.60 11.480 11.493 11.495 -0.530 0.213 -0.632 -0.530 0.213 -0.135 0.335 -0.113 0.363 0.189 + 498.65 11.412 11.444 11.445 -0.851 0.091 -0.700 -0.851 0.091 -0.064 0.596 -0.078 0.612 0.302 + 498.70 11.684 11.699 11.701 -0.583 -0.209 -0.429 -0.583 -0.209 0.090 0.250 0.122 0.283 0.146 + 498.75 11.621 11.623 11.624 -0.214 -0.129 -0.492 -0.214 -0.129 0.063 0.105 0.028 0.152 0.063 + 498.80 11.508 11.513 11.513 -0.325 0.093 -0.605 -0.325 0.093 -0.056 0.196 -0.030 0.240 0.103 + 498.85 11.381 11.382 11.389 -0.155 0.402 -0.732 -0.155 0.402 -0.294 0.113 -0.062 0.361 0.161 + 498.90 11.105 11.108 11.111 -0.270 0.268 -1.008 -0.270 0.268 -0.270 0.272 -0.072 0.581 0.195 + 498.95 11.123 11.128 11.143 -0.309 0.575 -0.989 -0.309 0.575 -0.569 0.306 -0.178 0.703 0.335 + 499.00 11.026 11.050 11.078 -0.728 0.784 -1.087 -0.728 0.784 -0.852 0.792 -0.571 1.163 0.648 + 499.05 11.124 11.140 11.161 -0.600 0.679 -0.989 -0.600 0.679 -0.672 0.594 -0.408 0.900 0.492 + 499.10 11.138 11.149 11.171 -0.497 0.689 -0.975 -0.497 0.689 -0.672 0.484 -0.342 0.836 0.448 + 499.15 10.967 10.975 10.983 -0.423 0.428 -1.146 -0.423 0.428 -0.490 0.485 -0.181 0.837 0.356 + 499.20 10.890 10.891 10.919 -0.058 0.787 -1.222 -0.058 0.787 -0.962 0.070 -0.045 1.059 0.483 + 499.25 10.998 10.998 11.018 0.032 0.671 -1.115 0.032 0.671 -0.748 -0.035 0.021 0.847 0.375 + 499.30 10.996 10.997 11.022 -0.101 0.744 -1.117 -0.101 0.744 -0.831 0.113 -0.075 0.905 0.421 + 499.35 10.956 10.957 10.987 -0.058 0.821 -1.156 -0.058 0.821 -0.949 0.067 -0.047 1.007 0.476 + 499.40 11.075 11.075 11.085 -0.013 0.483 -1.038 -0.013 0.483 -0.502 0.014 -0.006 0.656 0.251 + 499.45 10.995 10.997 11.016 -0.232 0.645 -1.118 -0.232 0.645 -0.721 0.260 -0.150 0.860 0.391 + 499.50 11.112 11.114 11.146 -0.200 0.844 -1.001 -0.200 0.844 -0.845 0.200 -0.169 0.877 0.442 + 499.55 11.025 11.025 11.058 -0.013 0.844 -1.087 -0.013 0.844 -0.917 0.014 -0.011 0.947 0.459 + 499.60 10.783 10.784 10.823 0.147 0.925 -1.330 0.147 0.925 -1.230 -0.196 0.136 1.323 0.627 + 499.65 10.565 10.569 10.578 0.284 0.448 -1.548 0.284 0.448 -0.694 -0.440 0.127 1.339 0.416 + 499.70 10.703 10.722 10.725 0.630 0.276 -1.409 0.630 0.276 -0.389 -0.888 0.174 1.230 0.493 + 499.75 10.703 10.706 10.706 0.258 0.028 -1.410 0.258 0.028 -0.039 -0.364 0.007 1.027 0.183 + 499.80 10.745 10.749 10.749 0.292 0.007 -1.368 0.292 0.007 -0.010 -0.400 0.002 0.978 0.200 + 499.85 10.853 10.854 10.854 0.174 0.064 -1.260 0.174 0.064 -0.081 -0.219 0.011 0.811 0.117 + 499.90 11.011 11.013 11.013 0.182 0.028 -1.101 0.182 0.028 -0.031 -0.201 0.005 0.624 0.102 + 499.95 10.987 10.987 10.987 0.068 0.046 -1.126 0.068 0.046 -0.052 -0.077 0.003 0.637 0.046 + 500.00 10.905 10.905 10.906 -0.088 0.138 -1.208 -0.088 0.138 -0.167 0.106 -0.012 0.743 0.099 + 500.05 10.672 10.672 10.673 -0.009 -0.124 -1.441 -0.009 -0.124 0.179 0.013 0.001 1.046 0.090 + 500.10 10.371 10.371 10.377 0.114 0.340 -1.742 0.114 0.340 -0.592 -0.198 0.039 1.582 0.313 + 500.15 10.408 10.410 10.416 -0.193 0.352 -1.705 -0.193 0.352 -0.601 0.330 -0.068 1.534 0.344 + 500.20 10.480 10.490 10.490 -0.454 0.016 -1.632 -0.454 0.016 -0.027 0.741 -0.007 1.435 0.371 + 500.25 10.774 10.778 10.786 -0.274 -0.414 -1.339 -0.274 -0.414 0.555 0.367 0.114 1.019 0.337 + 500.30 10.766 10.766 10.775 -0.016 -0.447 -1.347 -0.016 -0.447 0.603 0.021 0.007 1.008 0.302 + 500.35 10.645 10.647 10.651 -0.194 -0.293 -1.468 -0.194 -0.293 0.430 0.285 0.057 1.139 0.260 + 500.40 10.786 10.786 10.791 0.085 -0.328 -1.327 0.085 -0.328 0.435 -0.113 -0.028 0.938 0.225 + 500.45 10.796 10.796 10.801 0.025 -0.304 -1.316 0.025 -0.304 0.400 -0.033 -0.008 0.913 0.201 + 500.50 10.498 10.498 10.499 -0.078 0.091 -1.615 -0.078 0.091 -0.146 0.125 -0.007 1.311 0.096 + 500.55 10.296 10.297 10.301 -0.161 0.282 -1.817 -0.161 0.282 -0.513 0.292 -0.045 1.703 0.296 + 500.60 10.349 10.351 10.352 -0.171 0.154 -1.763 -0.171 0.154 -0.272 0.301 -0.026 1.581 0.203 + 500.65 10.564 10.564 10.583 -0.002 0.630 -1.549 -0.002 0.630 -0.975 0.003 -0.001 1.398 0.488 + 500.70 10.251 10.254 10.264 -0.231 0.464 -1.861 -0.231 0.464 -0.864 0.430 -0.107 1.867 0.485 + 500.75 10.590 10.590 10.597 0.041 0.384 -1.523 0.041 0.384 -0.585 -0.063 0.016 1.234 0.294 + 500.80 10.486 10.488 10.513 -0.216 0.714 -1.627 -0.216 0.714 -1.161 0.351 -0.154 1.601 0.611 + 500.85 10.384 10.388 10.407 -0.292 0.631 -1.729 -0.292 0.631 -1.091 0.505 -0.184 1.736 0.608 + 500.90 10.442 10.456 10.467 -0.540 0.471 -1.670 -0.540 0.471 -0.788 0.903 -0.255 1.652 0.612 + 500.95 10.306 10.317 10.326 -0.478 0.430 -1.807 -0.478 0.430 -0.777 0.863 -0.205 1.839 0.590 + 501.00 10.553 10.554 10.566 -0.129 0.518 -1.560 -0.129 0.518 -0.808 0.201 -0.067 1.359 0.418 + 501.05 10.538 10.539 10.561 -0.167 0.683 -1.575 -0.167 0.683 -1.076 0.264 -0.114 1.488 0.557 + 501.10 10.430 10.431 10.439 -0.142 0.418 -1.683 -0.142 0.418 -0.704 0.240 -0.060 1.514 0.373 + 501.15 10.619 10.619 10.621 -0.009 0.192 -1.493 -0.009 0.192 -0.287 0.013 -0.002 1.134 0.144 + 501.20 10.638 10.639 10.645 0.166 0.345 -1.475 0.166 0.345 -0.509 -0.245 0.057 1.161 0.284 + 501.25 10.538 10.539 10.546 0.137 0.405 -1.575 0.137 0.405 -0.639 -0.217 0.056 1.332 0.338 + 501.30 10.267 10.271 10.286 0.277 0.545 -1.845 0.277 0.545 -1.005 -0.511 0.151 1.889 0.569 + 501.35 10.276 10.276 10.281 0.083 0.334 -1.837 0.083 0.334 -0.614 -0.152 0.028 1.747 0.317 + 501.40 10.161 10.166 10.171 0.329 0.305 -1.952 0.329 0.305 -0.595 -0.643 0.100 2.005 0.441 + 501.45 9.915 9.950 9.955 0.835 0.318 -2.198 0.835 0.318 -0.700 -1.834 0.266 2.815 0.991 + 501.50 10.130 10.187 10.194 1.080 0.365 -1.983 1.080 0.365 -0.724 -2.141 0.394 2.616 1.147 + 501.55 10.246 10.274 10.284 0.756 0.453 -1.867 0.756 0.453 -0.845 -1.411 0.342 2.131 0.840 + 501.60 10.184 10.191 10.196 0.379 0.305 -1.928 0.379 0.305 -0.587 -0.731 0.115 1.977 0.472 + 501.65 10.249 10.254 10.257 0.301 0.261 -1.864 0.301 0.261 -0.486 -0.561 0.078 1.816 0.373 + 501.70 10.266 10.276 10.284 0.443 0.417 -1.846 0.443 0.417 -0.771 -0.818 0.185 1.890 0.570 + 501.75 10.208 10.215 10.223 0.388 0.395 -1.905 0.388 0.395 -0.752 -0.740 0.153 1.968 0.533 + 501.80 10.081 10.081 10.084 0.038 0.255 -2.032 0.038 0.255 -0.518 -0.078 0.010 2.097 0.262 + 501.85 10.182 10.186 10.190 0.293 0.289 -1.931 0.293 0.289 -0.559 -0.565 0.085 1.948 0.399 + 501.90 10.048 10.049 10.049 0.043 0.133 -2.064 0.043 0.133 -0.275 -0.088 0.006 2.141 0.145 + 501.95 10.079 10.081 10.082 0.185 0.166 -2.034 0.185 0.166 -0.337 -0.377 0.031 2.099 0.253 + 502.00 10.135 10.159 10.161 0.685 0.227 -1.977 0.685 0.227 -0.449 -1.355 0.156 2.215 0.718 + 502.05 10.169 10.199 10.202 0.782 0.231 -1.944 0.782 0.231 -0.448 -1.519 0.180 2.221 0.797 + 502.10 10.003 10.030 10.032 0.738 0.170 -2.110 0.738 0.170 -0.359 -1.557 0.125 2.512 0.801 + 502.15 9.819 9.830 9.847 0.465 0.592 -2.294 0.465 0.592 -1.358 -1.067 0.275 2.915 0.874 + 502.20 9.717 9.728 9.729 0.471 0.157 -2.396 0.471 0.157 -0.375 -1.129 0.074 2.994 0.596 + 502.25 9.625 9.627 9.629 0.221 0.158 -2.488 0.221 0.158 -0.392 -0.549 0.035 3.132 0.338 + 502.30 9.737 9.738 9.739 0.165 0.081 -2.376 0.165 0.081 -0.192 -0.392 0.013 2.839 0.218 + 502.35 9.775 9.775 9.777 -0.113 -0.159 -2.338 -0.113 -0.159 0.372 0.265 0.018 2.752 0.229 + 502.40 9.848 9.852 9.852 -0.252 0.059 -2.264 -0.252 0.059 -0.133 0.571 -0.015 2.597 0.293 + 502.45 9.823 9.823 9.823 0.051 0.016 -2.289 0.051 0.016 -0.037 -0.117 0.001 2.622 0.062 + 502.50 10.040 10.043 10.044 0.263 -0.065 -2.073 0.263 -0.065 0.135 -0.545 -0.017 2.185 0.281 + 502.55 10.023 10.036 10.036 0.495 -0.026 -2.089 0.495 -0.026 0.054 -1.035 -0.013 2.306 0.518 + 502.60 9.818 9.819 9.820 0.075 -0.154 -2.295 0.075 -0.154 0.354 -0.171 -0.012 2.647 0.197 + 502.65 9.922 9.923 9.923 0.183 0.053 -2.191 0.183 0.053 -0.115 -0.401 0.010 2.419 0.209 + 502.70 10.047 10.057 10.057 0.444 0.047 -2.066 0.444 0.047 -0.096 -0.917 0.021 2.233 0.461 + 502.75 10.152 10.156 10.169 0.282 -0.526 -1.961 0.282 -0.526 1.032 -0.553 -0.148 2.101 0.590 + 502.80 10.199 10.205 10.214 0.333 -0.429 -1.913 0.333 -0.429 0.821 -0.638 -0.143 1.978 0.524 + 502.85 10.031 10.034 10.063 0.238 -0.762 -2.082 0.238 -0.762 1.586 -0.495 -0.181 2.485 0.836 + 502.90 10.106 10.114 10.153 0.397 -0.894 -2.007 0.397 -0.894 1.793 -0.797 -0.355 2.492 0.997 + 502.95 9.789 9.800 9.846 0.461 -0.951 -2.324 0.461 -0.951 2.210 -1.071 -0.439 3.258 1.247 + 503.00 10.064 10.080 10.110 0.571 -0.785 -2.049 0.571 -0.785 1.608 -1.170 -0.448 2.570 1.019 + 503.05 10.113 10.121 10.145 0.400 -0.701 -2.000 0.400 -0.701 1.402 -0.801 -0.281 2.325 0.819 + 503.10 9.945 9.945 9.948 0.009 -0.251 -2.168 0.009 -0.251 0.544 -0.019 -0.002 2.381 0.272 + 503.15 10.048 10.049 10.052 0.110 -0.257 -2.065 0.110 -0.257 0.530 -0.228 -0.028 2.171 0.289 + 503.20 10.152 10.163 10.169 0.474 -0.334 -1.961 0.474 -0.334 0.655 -0.928 -0.158 2.090 0.573 + 503.25 10.361 10.380 10.384 0.625 -0.270 -1.752 0.625 -0.270 0.473 -1.095 -0.169 1.766 0.602 + 503.30 10.325 10.327 10.347 0.224 -0.635 -1.788 0.224 -0.635 1.136 -0.401 -0.143 1.825 0.606 + 503.35 10.395 10.412 10.422 0.597 -0.459 -1.718 0.597 -0.459 0.788 -1.026 -0.274 1.759 0.661 + 503.40 10.414 10.427 10.429 0.527 -0.193 -1.699 0.527 -0.193 0.327 -0.896 -0.102 1.600 0.480 + 503.45 10.252 10.285 10.289 0.827 -0.257 -1.861 0.827 -0.257 0.479 -1.538 -0.213 2.106 0.812 + 503.50 10.160 10.188 10.197 0.758 -0.438 -1.953 0.758 -0.438 0.855 -1.480 -0.331 2.290 0.870 + 503.55 10.192 10.207 10.214 0.551 -0.387 -1.921 0.551 -0.387 0.743 -1.058 -0.213 2.072 0.655 + 503.60 9.885 9.898 9.903 0.509 -0.308 -2.228 0.509 -0.308 0.685 -1.133 -0.156 2.659 0.667 + 503.65 10.240 10.256 10.257 0.576 -0.147 -1.873 0.576 -0.147 0.276 -1.078 -0.085 1.930 0.558 + 503.70 10.242 10.263 10.268 0.661 -0.317 -1.871 0.661 -0.317 0.593 -1.236 -0.209 2.018 0.693 + 503.75 10.353 10.369 10.373 0.577 -0.274 -1.760 0.577 -0.274 0.482 -1.015 -0.158 1.752 0.567 + 503.80 10.316 10.319 10.334 0.280 -0.550 -1.797 0.280 -0.550 0.988 -0.503 -0.154 1.805 0.560 + 503.85 10.091 10.093 10.101 0.156 -0.417 -2.021 0.156 -0.417 0.843 -0.316 -0.065 2.142 0.451 + 503.90 10.271 10.273 10.292 0.191 -0.632 -1.842 0.191 -0.632 1.164 -0.352 -0.121 1.914 0.611 + 503.95 10.302 10.303 10.314 0.182 -0.460 -1.811 0.182 -0.460 0.833 -0.329 -0.084 1.762 0.450 + 504.00 10.457 10.458 10.479 0.081 -0.678 -1.656 0.081 -0.678 1.122 -0.134 -0.055 1.603 0.566 + 504.05 10.332 10.332 10.341 0.119 -0.417 -1.781 0.119 -0.417 0.742 -0.211 -0.049 1.680 0.387 + 504.10 10.529 10.532 10.552 0.256 -0.655 -1.584 0.256 -0.655 1.037 -0.406 -0.168 1.502 0.563 + 504.15 10.483 10.489 10.501 0.353 -0.518 -1.630 0.353 -0.518 0.844 -0.576 -0.183 1.525 0.519 + 504.20 9.934 9.952 9.958 0.612 -0.332 -2.179 0.612 -0.332 0.723 -1.335 -0.203 2.617 0.766 + 504.25 10.055 10.072 10.100 0.576 -0.754 -2.058 0.576 -0.754 1.552 -1.185 -0.435 2.568 1.000 + 504.30 9.716 9.729 9.750 0.505 -0.632 -2.397 0.505 -0.632 1.515 -1.211 -0.319 3.200 0.983 + 504.35 9.689 9.705 9.727 0.564 -0.649 -2.424 0.564 -0.649 1.574 -1.367 -0.366 3.308 1.058 + 504.40 9.648 9.684 9.695 0.830 -0.450 -2.464 0.830 -0.450 1.109 -2.046 -0.374 3.482 1.179 + 504.45 9.382 9.451 9.459 1.137 -0.395 -2.730 1.137 -0.395 1.077 -3.104 -0.449 4.452 1.658 + 504.50 9.352 9.400 9.410 0.950 -0.437 -2.761 0.950 -0.437 1.205 -2.624 -0.415 4.357 1.458 + 504.55 9.459 9.527 9.541 1.141 -0.511 -2.654 1.141 -0.511 1.356 -3.029 -0.583 4.303 1.684 + 504.60 9.833 9.904 9.921 1.180 -0.579 -2.279 1.180 -0.579 1.320 -2.690 -0.684 3.462 1.537 + 504.65 10.234 10.286 10.297 1.034 -0.478 -1.879 1.034 -0.478 0.898 -1.944 -0.495 2.415 1.099 + 504.70 10.272 10.331 10.345 1.101 -0.544 -1.841 1.101 -0.544 1.001 -2.027 -0.599 2.448 1.169 + 504.75 10.350 10.414 10.418 1.150 -0.279 -1.763 1.150 -0.279 0.492 -2.027 -0.321 2.253 1.055 + 504.80 10.323 10.370 10.379 0.986 -0.453 -1.790 0.986 -0.453 0.811 -1.766 -0.447 2.191 0.997 + 504.85 10.298 10.349 10.353 1.030 -0.269 -1.815 1.030 -0.269 0.489 -1.869 -0.277 2.214 0.976 + 504.90 10.244 10.299 10.299 1.056 -0.019 -1.868 1.056 -0.019 0.035 -1.973 -0.020 2.303 0.987 + 504.95 10.533 10.568 10.568 0.860 -0.029 -1.580 0.860 -0.029 0.046 -1.359 -0.025 1.618 0.680 + 505.00 10.733 10.798 10.798 1.178 0.031 -1.379 1.178 0.031 -0.043 -1.625 0.036 1.646 0.813 + 505.05 10.751 10.809 10.810 1.119 -0.038 -1.361 1.119 -0.038 0.051 -1.523 -0.042 1.553 0.762 + 505.10 10.799 10.873 10.877 1.268 -0.319 -1.314 1.268 -0.319 0.419 -1.666 -0.404 1.718 0.882 + 505.15 10.824 10.898 10.910 1.266 -0.525 -1.289 1.266 -0.525 0.676 -1.632 -0.664 1.769 0.943 + 505.20 11.006 11.084 11.118 1.313 -0.869 -1.107 1.313 -0.869 0.963 -1.454 -1.141 1.853 1.042 + 505.25 11.153 11.293 11.311 1.775 -0.638 -0.960 1.775 -0.638 0.613 -1.704 -1.133 2.239 1.068 + 505.30 11.246 11.404 11.443 1.887 -0.942 -0.866 1.887 -0.942 0.816 -1.635 -1.777 2.599 1.274 + 505.35 11.162 11.312 11.338 1.836 -0.777 -0.951 1.836 -0.777 0.739 -1.746 -1.428 2.440 1.187 + 505.40 11.017 11.169 11.203 1.840 -0.870 -1.096 1.840 -0.870 0.953 -2.017 -1.601 2.672 1.373 + 505.45 11.121 11.337 11.364 2.200 -0.782 -0.992 2.200 -0.782 0.775 -2.181 -1.720 3.217 1.442 + 505.50 11.341 11.540 11.551 2.137 -0.488 -0.772 2.137 -0.488 0.377 -1.650 -1.044 2.701 0.994 + 505.55 11.310 11.466 11.467 1.882 -0.173 -0.802 1.882 -0.173 0.139 -1.510 -0.325 2.108 0.775 + 505.60 11.205 11.360 11.360 1.871 -0.092 -0.908 1.871 -0.092 0.083 -1.699 -0.172 2.167 0.855 + 505.65 11.263 11.440 11.442 2.004 -0.190 -0.850 2.004 -0.190 0.162 -1.703 -0.381 2.387 0.876 + 505.70 11.217 11.384 11.384 1.942 -0.047 -0.896 1.942 -0.047 0.042 -1.740 -0.092 2.289 0.872 + 505.75 11.425 11.644 11.644 2.245 0.014 -0.687 2.245 0.014 -0.010 -1.543 0.031 2.757 0.772 + 505.80 11.231 11.407 11.408 1.994 0.128 -0.881 1.994 0.128 -0.113 -1.757 0.255 2.384 0.890 + 505.85 11.068 11.254 11.257 2.038 -0.276 -1.045 2.038 -0.276 0.288 -2.130 -0.562 2.661 1.111 + 505.90 10.872 11.021 11.042 1.805 -0.677 -1.241 1.805 -0.677 0.840 -2.240 -1.222 2.628 1.343 + 505.95 10.690 10.832 10.842 1.746 -0.484 -1.423 1.746 -0.484 0.688 -2.484 -0.844 2.653 1.356 + 506.00 10.367 10.433 10.439 1.168 -0.372 -1.746 1.168 -0.372 0.649 -2.038 -0.434 2.274 1.091 + 506.05 10.344 10.431 10.446 1.345 -0.568 -1.769 1.345 -0.568 1.004 -2.379 -0.763 2.630 1.346 + 506.10 10.617 10.686 10.714 1.218 -0.763 -1.496 1.218 -0.763 1.142 -1.822 -0.930 2.152 1.171 + 506.15 10.416 10.470 10.488 1.068 -0.609 -1.697 1.068 -0.609 1.034 -1.813 -0.651 2.196 1.093 + 506.20 10.477 10.530 10.542 1.059 -0.486 -1.636 1.059 -0.486 0.796 -1.733 -0.515 2.017 0.988 + 506.25 10.591 10.624 10.656 0.842 -0.822 -1.522 0.842 -0.822 1.251 -1.282 -0.692 1.851 0.960 + 506.30 10.459 10.537 10.555 1.285 -0.605 -1.654 1.285 -0.605 1.000 -2.126 -0.777 2.377 1.237 + 506.35 10.579 10.667 10.673 1.366 -0.372 -1.534 1.366 -0.372 0.571 -2.095 -0.508 2.178 1.115 + 506.40 10.454 10.493 10.502 0.904 -0.441 -1.659 0.904 -0.441 0.732 -1.501 -0.399 1.883 0.858 + 506.45 10.650 10.700 10.708 1.035 -0.420 -1.463 1.035 -0.420 0.614 -1.513 -0.434 1.693 0.845 + 506.50 10.425 10.481 10.491 1.089 -0.443 -1.688 1.089 -0.443 0.747 -1.838 -0.482 2.116 1.021 + 506.55 10.237 10.295 10.310 1.096 -0.549 -1.876 1.096 -0.549 1.030 -2.055 -0.601 2.510 1.188 + 506.60 10.215 10.278 10.284 1.138 -0.345 -1.898 1.138 -0.345 0.655 -2.159 -0.393 2.508 1.145 + 506.65 10.408 10.433 10.438 0.720 -0.323 -1.705 0.720 -0.323 0.551 -1.227 -0.233 1.764 0.683 + 506.70 10.644 10.657 10.676 0.536 -0.631 -1.469 0.536 -0.631 0.927 -0.788 -0.339 1.422 0.632 + 506.75 10.377 10.380 10.388 0.269 -0.397 -1.736 0.269 -0.397 0.690 -0.467 -0.107 1.622 0.420 + 506.80 10.340 10.342 10.342 0.185 -0.032 -1.772 0.185 -0.032 0.056 -0.328 -0.006 1.588 0.166 + 506.85 10.564 10.580 10.580 0.576 0.009 -1.549 0.576 0.009 -0.013 -0.893 0.005 1.365 0.446 + 506.90 10.611 10.625 10.635 0.534 0.459 -1.502 0.534 0.459 -0.689 -0.802 0.245 1.376 0.543 + 506.95 10.482 10.485 10.499 0.258 0.543 -1.631 0.258 0.543 -0.885 -0.421 0.140 1.511 0.495 + 507.00 10.627 10.629 10.652 0.203 0.697 -1.486 0.203 0.697 -1.036 -0.301 0.141 1.367 0.544 + 507.05 10.687 10.694 10.701 0.381 0.393 -1.426 0.381 0.393 -0.560 -0.543 0.150 1.166 0.397 + 507.10 10.884 10.891 10.891 0.378 -0.012 -1.229 0.378 -0.012 0.014 -0.465 -0.004 0.826 0.232 + 507.15 10.751 10.751 10.754 0.132 -0.224 -1.362 0.132 -0.224 0.305 -0.180 -0.030 0.962 0.178 + 507.20 10.691 10.703 10.705 0.496 0.219 -1.421 0.496 0.219 -0.311 -0.705 0.109 1.157 0.389 + 507.25 10.961 10.969 10.978 0.441 0.432 -1.152 0.441 0.432 -0.497 -0.509 0.191 0.854 0.368 + 507.30 10.825 10.847 10.852 0.688 0.343 -1.288 0.688 0.343 -0.442 -0.886 0.236 1.125 0.509 + 507.35 11.114 11.121 11.125 0.389 0.298 -0.998 0.389 0.298 -0.297 -0.388 0.116 0.618 0.251 + 507.40 11.230 11.230 11.235 0.098 0.327 -0.883 0.098 0.327 -0.288 -0.087 0.032 0.448 0.151 + 507.45 11.062 11.062 11.075 0.041 0.523 -1.051 0.041 0.523 -0.549 -0.044 0.022 0.689 0.276 + 507.50 11.078 11.078 11.087 0.011 0.463 -1.035 0.011 0.463 -0.479 -0.011 0.005 0.643 0.240 + 507.55 10.920 10.921 10.924 0.193 0.255 -1.193 0.193 0.255 -0.305 -0.230 0.049 0.763 0.192 + 507.60 10.733 10.738 10.739 0.344 0.094 -1.380 0.344 0.094 -0.130 -0.474 0.032 1.016 0.246 + 507.65 10.774 10.776 10.776 0.190 0.030 -1.338 0.190 0.030 -0.040 -0.254 0.006 0.914 0.129 + 507.70 10.421 10.438 10.443 0.596 0.329 -1.692 0.596 0.329 -0.557 -1.009 0.196 1.664 0.584 + 507.75 10.377 10.399 10.406 0.674 0.385 -1.736 0.674 0.385 -0.669 -1.170 0.260 1.808 0.686 + 507.80 10.671 10.717 10.725 0.992 0.431 -1.442 0.992 0.431 -0.622 -1.431 0.428 1.625 0.809 + 507.85 10.447 10.536 10.546 1.360 0.471 -1.665 1.360 0.471 -0.785 -2.265 0.641 2.422 1.240 + 507.90 10.540 10.620 10.628 1.306 0.404 -1.573 1.306 0.404 -0.636 -2.054 0.528 2.171 1.107 + 507.95 10.406 10.517 10.519 1.523 0.211 -1.707 1.523 0.211 -0.360 -2.599 0.321 2.638 1.322 + 508.00 10.229 10.334 10.340 1.471 0.337 -1.884 1.471 0.337 -0.634 -2.771 0.495 2.913 1.443 + 508.05 10.145 10.220 10.229 1.237 0.431 -1.968 1.237 0.431 -0.849 -2.434 0.534 2.795 1.316 + 508.10 10.160 10.195 10.213 0.847 0.596 -1.953 0.847 0.596 -1.164 -1.655 0.505 2.443 1.043 + 508.15 9.861 9.890 9.906 0.754 0.563 -2.252 0.754 0.563 -1.268 -1.699 0.425 2.978 1.081 + 508.20 9.851 9.873 9.893 0.658 0.640 -2.262 0.658 0.640 -1.447 -1.488 0.421 2.980 1.059 + 508.25 9.977 10.000 10.017 0.664 0.600 -2.135 0.664 0.600 -1.281 -1.418 0.398 2.680 0.976 + 508.30 9.796 9.801 9.838 0.314 0.851 -2.317 0.314 0.851 -1.972 -0.728 0.268 3.096 1.060 + 508.35 9.771 9.801 9.856 0.764 1.040 -2.342 0.764 1.040 -2.435 -1.788 0.794 3.575 1.562 + 508.40 9.845 9.868 9.904 0.672 0.850 -2.268 0.672 0.850 -1.929 -1.524 0.571 3.159 1.262 + 508.45 9.873 9.907 9.944 0.823 0.854 -2.240 0.823 0.854 -1.914 -1.843 0.703 3.213 1.374 + 508.50 10.116 10.144 10.192 0.761 0.989 -1.997 0.761 0.989 -1.976 -1.520 0.753 2.774 1.302 + 508.55 9.849 9.862 9.906 0.510 0.929 -2.264 0.510 0.929 -2.103 -1.156 0.474 3.124 1.223 + 508.60 9.725 9.757 9.780 0.781 0.678 -2.388 0.781 0.678 -1.619 -1.864 0.529 3.385 1.263 + 508.65 9.858 9.866 9.876 0.393 0.432 -2.254 0.393 0.432 -0.974 -0.887 0.170 2.712 0.664 + 508.70 10.005 10.010 10.019 0.320 0.432 -2.108 0.320 0.432 -0.911 -0.675 0.138 2.367 0.571 + 508.75 10.307 10.314 10.326 0.402 0.495 -1.806 0.402 0.495 -0.894 -0.725 0.199 1.834 0.584 + 508.80 10.334 10.336 10.343 0.191 0.384 -1.779 0.191 0.384 -0.683 -0.340 0.073 1.674 0.383 + 508.85 10.035 10.056 10.065 0.647 0.411 -2.077 0.647 0.411 -0.855 -1.344 0.266 2.452 0.807 + 508.90 9.771 9.808 9.821 0.857 0.499 -2.342 0.857 0.499 -1.168 -2.008 0.427 3.235 1.181 + 508.95 9.782 9.824 9.844 0.909 0.635 -2.331 0.909 0.635 -1.480 -2.119 0.577 3.332 1.324 + 509.00 10.086 10.161 10.176 1.233 0.562 -2.027 1.233 0.562 -1.138 -2.499 0.692 2.972 1.416 + 509.05 9.922 9.988 10.023 1.149 0.832 -2.191 1.149 0.832 -1.822 -2.518 0.956 3.406 1.626 + 509.10 9.551 9.594 9.645 0.903 0.996 -2.562 0.903 0.996 -2.551 -2.313 0.899 4.184 1.779 + 509.15 9.554 9.576 9.601 0.641 0.693 -2.559 0.641 0.693 -1.773 -1.639 0.444 3.719 1.228 + 509.20 9.755 9.761 9.779 0.338 0.604 -2.358 0.338 0.604 -1.425 -0.796 0.204 3.020 0.823 + 509.25 9.945 9.945 9.968 0.015 0.675 -2.168 0.015 0.675 -1.462 -0.032 0.010 2.577 0.731 + 509.30 10.123 10.123 10.148 0.062 0.709 -1.990 0.062 0.709 -1.411 -0.123 0.044 2.233 0.708 + 509.35 10.156 10.162 10.195 0.349 0.825 -1.957 0.349 0.825 -1.615 -0.683 0.288 2.317 0.889 + 509.40 9.932 9.934 9.944 0.179 0.456 -2.181 0.179 0.456 -0.995 -0.391 0.082 2.498 0.536 + 509.45 9.549 9.557 9.575 0.404 0.582 -2.564 0.404 0.582 -1.493 -1.035 0.235 3.539 0.916 + 509.50 9.636 9.648 9.657 0.469 0.414 -2.477 0.469 0.414 -1.026 -1.162 0.194 3.263 0.781 + 509.55 9.456 9.466 9.481 0.450 0.525 -2.657 0.450 0.525 -1.396 -1.196 0.237 3.770 0.927 + 509.60 9.380 9.381 9.398 0.157 0.562 -2.733 0.157 0.562 -1.535 -0.429 0.088 3.904 0.798 + 509.65 9.369 9.381 9.422 0.487 0.874 -2.744 0.487 0.874 -2.398 -1.337 0.426 4.266 1.389 + 509.70 8.974 8.996 9.027 0.642 0.745 -3.139 0.642 0.745 -2.339 -2.015 0.478 5.411 1.562 + 509.75 8.826 8.828 8.844 0.145 0.536 -3.286 0.145 0.536 -1.762 -0.476 0.078 5.554 0.914 + 509.80 8.825 8.830 8.842 0.281 0.476 -3.288 0.281 0.476 -1.565 -0.923 0.134 5.557 0.911 + 509.85 8.900 8.923 8.924 0.643 0.109 -3.213 0.643 0.109 -0.350 -2.066 0.070 5.374 1.048 + 509.90 9.053 9.102 9.103 0.948 0.107 -3.060 0.948 0.107 -0.326 -2.900 0.101 5.137 1.460 + 509.95 9.331 9.370 9.372 0.850 0.207 -2.782 0.850 0.207 -0.574 -2.366 0.176 4.252 1.220 + 510.00 9.242 9.261 9.270 0.591 0.411 -2.871 0.591 0.411 -1.180 -1.697 0.243 4.380 1.041 + 510.05 9.175 9.180 9.187 0.316 0.340 -2.938 0.316 0.340 -0.998 -0.928 0.107 4.423 0.683 + 510.10 9.185 9.193 9.199 0.402 0.314 -2.928 0.402 0.314 -0.920 -1.176 0.126 4.417 0.749 + 510.15 9.518 9.524 9.527 0.330 0.263 -2.595 0.330 0.263 -0.683 -0.857 0.087 3.455 0.550 + 510.20 9.359 9.369 9.374 0.444 0.308 -2.754 0.444 0.308 -0.847 -1.223 0.137 3.938 0.747 + 510.25 9.256 9.266 9.266 0.434 0.086 -2.857 0.434 0.086 -0.247 -1.240 0.038 4.179 0.633 + 510.30 9.455 9.471 9.472 0.554 0.132 -2.658 0.554 0.132 -0.351 -1.474 0.073 3.696 0.758 + 510.35 9.218 9.254 9.266 0.818 0.471 -2.895 0.818 0.471 -1.363 -2.367 0.385 4.635 1.379 + 510.40 9.220 9.278 9.289 1.038 0.464 -2.893 1.038 0.464 -1.341 -3.005 0.481 4.832 1.663 + 510.45 9.358 9.408 9.410 0.973 0.178 -2.755 0.973 0.178 -0.492 -2.680 0.174 4.283 1.365 + 510.50 9.421 9.454 9.458 0.789 0.250 -2.691 0.789 0.250 -0.672 -2.123 0.197 3.964 1.118 + 510.55 9.669 9.715 9.728 0.943 0.496 -2.443 0.943 0.496 -1.213 -2.303 0.468 3.553 1.322 + 510.60 9.760 9.799 9.810 0.873 0.467 -2.353 0.873 0.467 -1.098 -2.054 0.407 3.258 1.182 + 510.65 9.685 9.740 9.750 1.030 0.449 -2.428 1.030 0.449 -1.091 -2.501 0.463 3.579 1.384 + 510.70 9.704 9.800 9.809 1.372 0.406 -2.409 1.372 0.406 -0.977 -3.305 0.556 3.925 1.745 + 510.75 9.558 9.634 9.658 1.206 0.689 -2.555 1.206 0.689 -1.761 -3.080 0.831 4.228 1.822 + 510.80 9.662 9.729 9.767 1.146 0.854 -2.451 1.146 0.854 -2.092 -2.810 0.979 4.026 1.819 + 510.85 9.774 9.859 9.897 1.290 0.864 -2.339 1.290 0.864 -2.020 -3.018 1.115 3.941 1.900 + 510.90 9.298 9.379 9.411 1.228 0.770 -2.814 1.228 0.770 -2.167 -3.457 0.946 5.011 2.094 + 510.95 9.245 9.318 9.354 1.165 0.821 -2.868 1.165 0.821 -2.354 -3.341 0.956 5.128 2.099 + 511.00 8.867 8.961 9.001 1.296 0.844 -3.246 1.296 0.844 -2.739 -4.207 1.093 6.464 2.569 + 511.05 8.935 9.024 9.063 1.261 0.840 -3.177 1.261 0.840 -2.669 -4.007 1.059 6.196 2.465 + 511.10 8.989 9.067 9.097 1.186 0.743 -3.124 1.186 0.743 -2.322 -3.706 0.882 5.859 2.231 + 511.15 9.088 9.198 9.238 1.416 0.861 -3.024 1.416 0.861 -2.605 -4.284 1.220 5.948 2.580 + 511.20 9.103 9.243 9.330 1.606 1.268 -3.010 1.606 1.268 -3.816 -4.834 2.036 6.623 3.243 + 511.25 9.017 9.138 9.223 1.480 1.255 -3.096 1.480 1.255 -3.886 -4.582 1.857 6.675 3.144 + 511.30 8.902 9.067 9.115 1.724 0.934 -3.211 1.724 0.934 -2.998 -5.535 1.609 7.078 3.249 + 511.35 8.925 9.000 9.032 1.159 0.758 -3.188 1.159 0.758 -2.417 -3.696 0.879 6.041 2.251 + 511.40 9.036 9.073 9.105 0.826 0.761 -3.077 0.826 0.761 -2.342 -2.543 0.629 5.365 1.757 + 511.45 9.040 9.081 9.083 0.866 0.173 -3.073 0.866 0.173 -0.531 -2.660 0.150 5.111 1.358 + 511.50 9.244 9.272 9.277 0.718 -0.302 -2.869 0.718 -0.302 0.867 -2.058 -0.217 4.418 1.122 + 511.55 9.416 9.458 9.460 0.895 -0.141 -2.697 0.895 -0.141 0.380 -2.414 -0.126 4.047 1.224 + 511.60 9.268 9.334 9.335 1.113 -0.108 -2.845 1.113 -0.108 0.308 -3.166 -0.121 4.672 1.592 + 511.65 9.155 9.237 9.237 1.227 -0.039 -2.958 1.227 -0.039 0.114 -3.630 -0.047 5.128 1.816 + 511.70 9.485 9.553 9.554 1.142 0.125 -2.628 1.142 0.125 -0.328 -3.002 0.143 4.114 1.512 + 511.75 9.545 9.578 9.579 0.799 0.127 -2.568 0.799 0.127 -0.327 -2.052 0.102 3.624 1.040 + 511.80 9.609 9.643 9.643 0.811 -0.051 -2.504 0.811 -0.051 0.129 -2.030 -0.042 3.465 1.017 + 511.85 9.846 9.857 9.858 0.465 -0.147 -2.267 0.465 -0.147 0.333 -1.054 -0.068 2.688 0.554 + 511.90 9.756 9.762 9.774 0.341 0.485 -2.357 0.341 0.485 -1.143 -0.803 0.165 2.953 0.703 + 511.95 10.027 10.039 10.045 0.498 0.353 -2.086 0.498 0.353 -0.737 -1.039 0.176 2.363 0.643 + 512.00 10.533 10.545 10.548 0.492 0.268 -1.579 0.492 0.268 -0.423 -0.777 0.132 1.404 0.447 + 512.05 10.486 10.513 10.514 0.751 0.173 -1.627 0.751 0.173 -0.281 -1.222 0.130 1.621 0.630 + 512.10 10.543 10.597 10.604 1.075 0.358 -1.570 1.075 0.358 -0.562 -1.688 0.385 1.875 0.910 + 512.15 10.550 10.599 10.605 1.015 0.340 -1.562 1.015 0.340 -0.531 -1.585 0.345 1.793 0.854 + 512.20 10.498 10.534 10.539 0.876 0.316 -1.615 0.876 0.316 -0.511 -1.415 0.277 1.738 0.765 + 512.25 10.412 10.464 10.465 1.041 0.139 -1.701 1.041 0.139 -0.236 -1.771 0.145 1.998 0.896 + 512.30 10.575 10.658 10.659 1.322 0.205 -1.538 1.322 0.205 -0.315 -2.033 0.271 2.077 1.037 + 512.35 10.869 10.968 10.968 1.467 0.063 -1.244 1.467 0.063 -0.078 -1.825 0.092 1.852 0.914 + 512.40 10.499 10.582 10.583 1.320 0.157 -1.613 1.320 0.157 -0.254 -2.131 0.208 2.186 1.078 + 512.45 10.206 10.317 10.318 1.507 -0.168 -1.906 1.507 -0.168 0.320 -2.873 -0.253 2.966 1.451 + 512.50 10.020 10.123 10.126 1.439 -0.252 -2.093 1.439 -0.252 0.526 -3.011 -0.362 3.256 1.539 + 512.55 10.015 10.142 10.150 1.599 -0.408 -2.098 1.599 -0.408 0.855 -3.354 -0.652 3.561 1.761 + 512.60 9.989 10.112 10.113 1.578 0.072 -2.124 1.578 0.072 -0.152 -3.352 0.113 3.503 1.679 + 512.65 9.971 10.143 10.143 1.859 0.004 -2.142 1.859 0.004 -0.009 -3.981 0.008 4.021 1.990 + 512.70 10.013 10.146 10.155 1.641 -0.420 -2.100 1.641 -0.420 0.882 -3.447 -0.689 3.640 1.812 + 512.75 9.950 10.040 10.065 1.345 -0.707 -2.163 1.345 -0.707 1.529 -2.909 -0.951 3.494 1.711 + 512.80 10.081 10.208 10.222 1.600 -0.536 -2.031 1.600 -0.536 1.088 -3.250 -0.857 3.487 1.767 + 512.85 9.867 10.057 10.070 1.941 -0.522 -2.245 1.941 -0.522 1.171 -4.359 -1.013 4.541 2.313 + 512.90 9.784 9.953 9.992 1.823 -0.883 -2.328 1.823 -0.883 2.057 -4.245 -1.611 4.763 2.492 + 512.95 9.687 9.828 9.832 1.655 -0.281 -2.426 1.655 -0.281 0.682 -4.015 -0.466 4.351 2.050 + 513.00 9.514 9.647 9.648 1.600 -0.087 -2.599 1.600 -0.087 0.226 -4.160 -0.139 4.662 2.084 + 513.05 9.449 9.634 9.656 1.877 -0.660 -2.664 1.877 -0.660 1.759 -4.999 -1.239 5.527 2.721 + 513.10 9.288 9.368 9.379 1.223 -0.455 -2.825 1.223 -0.455 1.284 -3.455 -0.556 4.841 1.864 + 513.15 9.527 9.621 9.636 1.340 -0.530 -2.585 1.340 -0.530 1.371 -3.464 -0.710 4.380 1.896 + 513.20 9.548 9.628 9.652 1.244 -0.674 -2.565 1.244 -0.674 1.728 -3.191 -0.838 4.290 1.862 + 513.25 9.454 9.529 9.541 1.194 -0.491 -2.659 1.194 -0.491 1.306 -3.174 -0.586 4.369 1.741 + 513.30 9.054 9.079 9.086 0.675 -0.345 -3.059 0.675 -0.345 1.055 -2.065 -0.233 4.965 1.165 + 513.35 9.000 9.014 9.023 0.497 -0.416 -3.113 0.497 -0.416 1.295 -1.548 -0.207 5.055 1.014 + 513.40 9.248 9.291 9.313 0.894 -0.645 -2.865 0.894 -0.645 1.848 -2.562 -0.577 4.712 1.606 + 513.45 9.513 9.555 9.577 0.900 -0.645 -2.600 0.900 -0.645 1.678 -2.341 -0.581 3.994 1.469 + 513.50 9.214 9.269 9.281 1.013 -0.476 -2.899 1.013 -0.476 1.379 -2.937 -0.482 4.829 1.640 + 513.55 9.204 9.250 9.268 0.925 -0.575 -2.909 0.925 -0.575 1.672 -2.690 -0.531 4.823 1.606 + 513.60 8.996 9.018 9.026 0.634 -0.372 -3.117 0.634 -0.372 1.161 -1.977 -0.236 5.129 1.152 + 513.65 9.338 9.368 9.395 0.748 -0.711 -2.775 0.748 -0.711 1.972 -2.075 -0.531 4.382 1.456 + 513.70 9.089 9.105 9.133 0.544 -0.709 -3.024 0.544 -0.709 2.145 -1.645 -0.386 4.972 1.365 + 513.75 8.906 8.922 8.936 0.536 -0.499 -3.206 0.536 -0.499 1.600 -1.719 -0.268 5.409 1.182 + 513.80 9.294 9.315 9.322 0.626 -0.363 -2.819 0.626 -0.363 1.024 -1.763 -0.227 4.234 1.026 + 513.85 9.081 9.124 9.131 0.885 -0.366 -3.032 0.885 -0.366 1.111 -2.684 -0.324 5.056 1.461 + 513.90 9.250 9.316 9.350 1.108 -0.794 -2.863 1.108 -0.794 2.273 -3.173 -0.880 5.028 2.001 + 513.95 9.149 9.227 9.298 1.196 -1.143 -2.963 1.196 -1.143 3.386 -3.543 -1.366 5.759 2.544 + 514.00 9.221 9.329 9.411 1.415 -1.239 -2.892 1.415 -1.239 3.582 -4.092 -1.753 5.949 2.857 + 514.05 9.556 9.703 9.756 1.683 -1.011 -2.556 1.683 -1.011 2.584 -4.302 -1.701 5.194 2.649 + 514.10 9.642 9.753 9.796 1.471 -0.910 -2.471 1.471 -0.910 2.249 -3.634 -1.339 4.548 2.239 + 514.15 9.565 9.638 9.700 1.190 -1.088 -2.548 1.190 -1.088 2.773 -3.033 -1.295 4.547 2.154 + 514.20 9.531 9.607 9.651 1.211 -0.916 -2.582 1.211 -0.916 2.366 -3.128 -1.110 4.487 2.038 + 514.25 9.724 9.816 9.831 1.336 -0.553 -2.388 1.336 -0.553 1.320 -3.191 -0.739 3.898 1.766 + 514.30 9.751 9.825 9.841 1.208 -0.555 -2.362 1.208 -0.555 1.311 -2.854 -0.671 3.674 1.606 + 514.35 9.441 9.511 9.531 1.154 -0.615 -2.672 1.154 -0.615 1.644 -3.084 -0.710 4.425 1.783 + 514.40 9.660 9.766 9.803 1.431 -0.855 -2.452 1.431 -0.855 2.097 -3.509 -1.224 4.397 2.134 + 514.45 9.757 9.863 9.907 1.441 -0.932 -2.355 1.441 -0.932 2.195 -3.394 -1.343 4.246 2.130 + 514.50 9.750 9.855 9.902 1.434 -0.966 -2.363 1.434 -0.966 2.283 -3.388 -1.386 4.287 2.157 + 514.55 9.738 9.819 9.882 1.259 -1.116 -2.375 1.259 -1.116 2.651 -2.990 -1.405 4.235 2.118 + 514.60 9.740 9.838 9.863 1.386 -0.699 -2.373 1.386 -0.699 1.660 -3.288 -0.969 4.020 1.904 + 514.65 9.780 9.883 9.897 1.422 -0.527 -2.333 1.422 -0.527 1.230 -3.316 -0.750 3.870 1.808 + 514.70 9.939 10.052 10.083 1.500 -0.788 -2.174 1.500 -0.788 1.712 -3.260 -1.182 3.798 1.934 + 514.75 9.916 10.051 10.078 1.637 -0.744 -2.196 1.637 -0.744 1.633 -3.595 -1.217 4.028 2.066 + 514.80 9.930 10.042 10.061 1.497 -0.607 -2.183 1.497 -0.607 1.325 -3.268 -0.909 3.687 1.821 + 514.85 9.725 9.846 9.870 1.536 -0.686 -2.387 1.536 -0.686 1.638 -3.666 -1.053 4.264 2.076 + 514.90 9.742 9.880 9.891 1.640 -0.477 -2.370 1.640 -0.477 1.131 -3.888 -0.783 4.269 2.062 + 514.95 9.780 9.915 9.919 1.630 -0.282 -2.332 1.630 -0.282 0.659 -3.802 -0.460 4.088 1.943 + 515.00 9.739 9.961 9.961 2.093 0.057 -2.374 2.093 0.057 -0.136 -4.968 0.120 5.009 2.486 + 515.05 9.769 9.954 9.956 1.914 -0.161 -2.344 1.914 -0.161 0.376 -4.486 -0.307 4.591 2.256 + 515.10 9.681 9.873 9.874 1.940 -0.070 -2.432 1.940 -0.070 0.170 -4.717 -0.135 4.840 2.361 + 515.15 9.589 9.784 9.784 1.942 -0.036 -2.524 1.942 -0.036 0.092 -4.900 -0.071 5.070 2.451 + 515.20 9.678 9.854 9.857 1.853 -0.230 -2.435 1.853 -0.230 0.561 -4.513 -0.427 4.708 2.284 + 515.25 9.855 10.053 10.054 1.985 -0.134 -2.257 1.985 -0.134 0.302 -4.481 -0.265 4.527 2.250 + 515.30 9.773 9.949 9.954 1.866 -0.323 -2.340 1.866 -0.323 0.756 -4.367 -0.603 4.532 2.237 + 515.35 9.728 9.922 9.931 1.948 -0.437 -2.384 1.948 -0.437 1.041 -4.644 -0.851 4.835 2.417 + 515.40 9.913 10.025 10.031 1.497 -0.354 -2.200 1.497 -0.354 0.780 -3.295 -0.531 3.604 1.713 + 515.45 9.790 10.021 10.039 2.142 -0.598 -2.323 2.142 -0.598 1.389 -4.977 -1.281 5.172 2.662 + 515.50 9.877 10.166 10.190 2.407 -0.699 -2.236 2.407 -0.699 1.562 -5.382 -1.682 5.641 2.926 + 515.55 9.998 10.270 10.306 2.351 -0.860 -2.115 2.351 -0.860 1.820 -4.972 -2.022 5.370 2.834 + 515.60 9.715 10.022 10.045 2.462 -0.668 -2.398 2.462 -0.668 1.600 -5.903 -1.643 6.128 3.166 + 515.65 9.288 9.614 9.627 2.483 -0.510 -2.825 2.483 -0.510 1.440 -7.014 -1.266 7.202 3.636 + 515.70 8.986 9.226 9.234 2.089 -0.383 -3.127 2.089 -0.383 1.196 -6.531 -0.799 7.143 3.344 + 515.75 8.800 9.067 9.072 2.185 -0.305 -3.313 2.185 -0.305 1.011 -7.240 -0.667 7.923 3.670 + 515.80 9.018 9.271 9.278 2.151 -0.362 -3.095 2.151 -0.362 1.120 -6.657 -0.778 7.167 3.398 + 515.85 8.953 9.111 9.111 1.689 0.001 -3.160 1.689 0.001 -0.005 -5.339 0.002 6.420 2.669 + 515.90 8.922 9.061 9.061 1.584 0.049 -3.191 1.584 0.049 -0.155 -5.055 0.077 6.347 2.529 + 515.95 9.179 9.334 9.334 1.693 -0.089 -2.934 1.693 -0.089 0.260 -4.968 -0.150 5.741 2.488 + 516.00 9.290 9.414 9.419 1.521 -0.323 -2.823 1.521 -0.323 0.911 -4.294 -0.491 5.194 2.209 + 516.05 9.116 9.239 9.239 1.502 0.003 -2.997 1.502 0.003 -0.009 -4.503 0.004 5.620 2.251 + 516.10 8.807 8.968 8.969 1.691 0.155 -3.306 1.691 0.155 -0.513 -5.590 0.262 6.906 2.810 + 516.15 8.927 9.119 9.120 1.863 -0.152 -3.186 1.863 -0.152 0.486 -5.936 -0.284 6.823 2.981 + 516.20 9.164 9.261 9.277 1.332 -0.542 -2.948 1.332 -0.542 1.597 -3.926 -0.721 5.380 2.150 + 516.25 9.636 9.729 9.741 1.346 -0.482 -2.477 1.346 -0.482 1.194 -3.334 -0.648 4.090 1.800 + 516.30 9.489 9.631 9.631 1.652 -0.014 -2.624 1.652 -0.014 0.038 -4.336 -0.024 4.809 2.168 + 516.35 9.310 9.471 9.471 1.740 -0.025 -2.803 1.740 -0.025 0.071 -4.877 -0.044 5.442 2.439 + 516.40 9.158 9.257 9.257 1.350 -0.006 -2.955 1.350 -0.006 0.017 -3.989 -0.008 5.277 1.994 + 516.45 9.212 9.300 9.304 1.277 0.251 -2.901 1.277 0.251 -0.727 -3.705 0.320 5.054 1.895 + 516.50 8.998 9.089 9.101 1.286 0.467 -3.115 1.286 0.467 -1.456 -4.005 0.601 5.788 2.152 + 516.55 8.861 8.948 8.955 1.246 0.351 -3.252 1.246 0.351 -1.143 -4.052 0.438 6.126 2.116 + 516.60 8.675 8.759 8.771 1.213 0.455 -3.438 1.213 0.455 -1.563 -4.171 0.551 6.750 2.244 + 516.65 8.423 8.468 8.490 0.880 0.611 -3.690 0.880 0.611 -2.255 -3.247 0.538 7.383 1.995 + 516.70 8.502 8.542 8.556 0.822 0.500 -3.611 0.822 0.500 -1.807 -2.970 0.412 6.983 1.750 + 516.75 8.491 8.514 8.521 0.623 0.361 -3.622 0.623 0.361 -1.309 -2.256 0.225 6.819 1.309 + 516.80 8.618 8.635 8.646 0.550 0.438 -3.495 0.550 0.438 -1.532 -1.922 0.241 6.356 1.235 + 516.85 8.741 8.788 8.789 0.911 0.147 -3.372 0.911 0.147 -0.495 -3.073 0.134 6.112 1.558 + 516.90 8.964 8.968 8.969 0.275 -0.109 -3.149 0.275 -0.109 0.343 -0.866 -0.030 5.001 0.466 + 516.95 9.019 9.021 9.040 -0.197 -0.595 -3.094 -0.197 -0.595 1.842 0.610 0.117 4.984 0.972 + 517.00 8.706 8.706 8.710 0.036 -0.255 -3.406 0.036 -0.255 0.869 -0.122 -0.009 5.835 0.439 + 517.05 8.531 8.533 8.543 0.207 -0.417 -3.582 0.207 -0.417 1.493 -0.740 -0.086 6.524 0.835 + 517.10 8.361 8.368 8.376 0.330 -0.382 -3.752 0.330 -0.382 1.432 -1.237 -0.126 7.165 0.948 + 517.15 8.545 8.547 8.564 0.201 -0.536 -3.568 0.201 -0.536 1.913 -0.717 -0.108 6.529 1.023 + 517.20 8.785 8.787 8.821 0.177 -0.773 -3.328 0.177 -0.773 2.572 -0.588 -0.136 5.851 1.321 + 517.25 8.749 8.751 8.752 0.177 -0.156 -3.364 0.177 -0.156 0.523 -0.596 -0.028 5.686 0.397 + 517.30 8.350 8.352 8.357 0.174 -0.273 -3.762 0.174 -0.273 1.029 -0.657 -0.048 7.131 0.611 + 517.35 8.493 8.493 8.509 0.063 -0.519 -3.620 0.063 -0.519 1.878 -0.228 -0.033 6.689 0.946 + 517.40 8.662 8.667 8.671 0.311 -0.257 -3.451 0.311 -0.257 0.886 -1.074 -0.080 6.037 0.697 + 517.45 8.701 8.715 8.715 0.501 0.035 -3.412 0.501 0.035 -0.120 -1.709 0.018 5.947 0.857 + 517.50 8.882 8.917 8.917 0.793 0.056 -3.231 0.793 0.056 -0.182 -2.562 0.045 5.536 1.285 + 517.55 8.737 8.777 8.791 0.844 0.489 -3.376 0.844 0.489 -1.652 -2.848 0.413 6.174 1.659 + 517.60 9.178 9.224 9.243 0.924 0.589 -2.935 0.924 0.589 -1.728 -2.711 0.544 4.906 1.630 + 517.65 9.223 9.273 9.311 0.958 0.840 -2.890 0.958 0.840 -2.427 -2.769 0.805 4.987 1.884 + 517.70 9.011 9.027 9.053 0.527 0.698 -3.102 0.527 0.698 -2.166 -1.634 0.368 5.193 1.369 + 517.75 8.887 8.912 8.939 0.668 0.692 -3.226 0.668 0.692 -2.232 -2.155 0.462 5.666 1.569 + 517.80 9.275 9.284 9.292 0.417 0.395 -2.838 0.417 0.395 -1.120 -1.183 0.165 4.192 0.819 + 517.85 9.241 9.246 9.263 0.321 0.567 -2.872 0.321 0.567 -1.628 -0.921 0.182 4.337 0.940 + 517.90 9.355 9.358 9.386 0.268 0.717 -2.758 0.268 0.717 -1.979 -0.741 0.193 4.097 1.061 + 517.95 9.327 9.330 9.344 0.226 0.518 -2.786 0.226 0.518 -1.443 -0.631 0.117 4.040 0.790 + 518.00 9.185 9.188 9.204 0.235 0.541 -2.928 0.235 0.541 -1.583 -0.688 0.127 4.459 0.865 + 518.05 9.297 9.298 9.326 0.153 0.714 -2.816 0.153 0.714 -2.010 -0.431 0.109 4.230 1.029 + 518.10 9.477 9.479 9.481 -0.161 0.208 -2.635 -0.161 0.208 -0.549 0.425 -0.034 3.507 0.348 + 518.15 9.475 9.481 9.481 -0.317 -0.087 -2.638 -0.317 -0.087 0.228 0.836 0.027 3.532 0.434 + 518.20 9.750 9.768 9.768 -0.589 0.055 -2.363 -0.589 0.055 -0.130 1.391 -0.032 2.966 0.699 + 518.25 9.847 9.859 9.860 -0.494 0.146 -2.266 -0.494 0.146 -0.331 1.120 -0.072 2.701 0.585 + 518.30 9.943 9.952 9.952 -0.444 -0.024 -2.170 -0.444 -0.024 0.051 0.963 0.011 2.454 0.482 + 518.35 9.862 9.873 9.873 -0.449 0.006 -2.250 -0.449 0.006 -0.013 1.011 -0.003 2.633 0.505 + 518.40 9.816 9.842 9.849 -0.715 0.376 -2.297 -0.715 0.376 -0.863 1.643 -0.269 2.964 0.938 + 518.45 10.168 10.193 10.211 -0.718 0.616 -1.945 -0.718 0.616 -1.199 1.397 -0.442 2.340 0.947 + 518.50 10.167 10.179 10.184 -0.498 0.304 -1.946 -0.498 0.304 -0.591 0.969 -0.151 2.063 0.573 + 518.55 10.106 10.111 10.126 -0.322 0.548 -2.007 -0.322 0.548 -1.100 0.647 -0.177 2.216 0.644 + 518.60 10.477 10.484 10.502 -0.383 0.629 -1.636 -0.383 0.629 -1.030 0.627 -0.241 1.610 0.615 + 518.65 10.076 10.089 10.103 -0.516 0.536 -2.037 -0.516 0.536 -1.092 1.052 -0.277 2.352 0.771 + 518.70 10.303 10.318 10.357 -0.566 0.898 -1.810 -0.566 0.898 -1.626 1.025 -0.509 2.202 0.994 + 518.75 10.282 10.297 10.389 -0.558 1.379 -1.831 -0.558 1.379 -2.525 1.021 -0.770 2.782 1.415 + 518.80 10.014 10.017 10.120 -0.276 1.438 -2.099 -0.276 1.438 -3.019 0.580 -0.397 3.275 1.550 + 518.85 9.720 9.730 9.802 -0.422 1.191 -2.392 -0.422 1.191 -2.849 1.011 -0.503 3.660 1.532 + 518.90 9.609 9.612 9.673 -0.233 1.086 -2.504 -0.233 1.086 -2.720 0.585 -0.254 3.751 1.397 + 518.95 9.775 9.777 9.816 -0.182 0.879 -2.338 -0.182 0.879 -2.055 0.425 -0.160 3.135 1.052 + 519.00 9.831 9.838 9.879 -0.383 0.901 -2.282 -0.383 0.901 -2.056 0.875 -0.345 3.083 1.130 + 519.05 9.847 9.851 9.879 -0.279 0.749 -2.266 -0.279 0.749 -1.698 0.632 -0.209 2.886 0.912 + 519.10 9.676 9.681 9.714 -0.312 0.797 -2.437 -0.312 0.797 -1.942 0.759 -0.248 3.334 1.050 + 519.15 10.083 10.084 10.144 -0.148 1.101 -2.030 -0.148 1.101 -2.234 0.300 -0.163 2.677 1.130 + 519.20 9.966 9.967 9.988 0.074 0.658 -2.146 0.074 0.658 -1.413 -0.158 0.048 2.523 0.711 + 519.25 9.746 9.750 9.813 -0.292 1.106 -2.367 -0.292 1.106 -2.619 0.691 -0.323 3.456 1.364 + 519.30 9.936 9.957 10.010 -0.646 1.037 -2.177 -0.646 1.037 -2.258 1.406 -0.670 3.116 1.371 + 519.35 9.683 9.696 9.754 -0.507 1.066 -2.430 -0.507 1.066 -2.590 1.231 -0.540 3.649 1.459 + 519.40 9.820 9.823 9.863 -0.230 0.887 -2.293 -0.230 0.887 -2.033 0.528 -0.204 3.048 1.055 + 519.45 9.944 9.950 9.965 -0.336 0.544 -2.168 -0.336 0.544 -1.180 0.729 -0.183 2.556 0.699 + 519.50 9.695 9.702 9.721 -0.344 0.612 -2.417 -0.344 0.612 -1.480 0.832 -0.211 3.169 0.856 + 519.55 9.401 9.401 9.415 -0.059 0.501 -2.712 -0.059 0.501 -1.359 0.159 -0.029 3.804 0.684 + 519.60 9.680 9.684 9.690 -0.272 0.358 -2.433 -0.272 0.358 -0.870 0.662 -0.097 3.060 0.549 + 519.65 9.803 9.805 9.814 -0.235 0.405 -2.310 -0.235 0.405 -0.935 0.544 -0.095 2.778 0.543 + 519.70 9.771 9.772 9.786 -0.129 0.515 -2.341 -0.129 0.515 -1.206 0.301 -0.066 2.882 0.622 + 519.75 9.753 9.753 9.757 -0.123 0.277 -2.360 -0.123 0.277 -0.653 0.289 -0.034 2.831 0.358 + 519.80 10.002 10.012 10.015 -0.454 0.255 -2.111 -0.454 0.255 -0.539 0.959 -0.116 2.364 0.553 + 519.85 10.280 10.290 10.291 -0.465 -0.083 -1.833 -0.465 -0.083 0.152 0.851 0.039 1.791 0.433 + 519.90 10.305 10.308 10.309 -0.250 0.123 -1.807 -0.250 0.123 -0.222 0.451 -0.031 1.672 0.252 + 519.95 10.469 10.472 10.472 -0.234 -0.012 -1.643 -0.234 -0.012 0.019 0.384 0.003 1.378 0.192 + 520.00 10.458 10.458 10.461 -0.093 -0.220 -1.655 -0.093 -0.220 0.364 0.155 0.021 1.398 0.198 + 520.05 10.522 10.525 10.531 0.268 -0.336 -1.591 0.268 -0.336 0.535 -0.426 -0.090 1.358 0.345 + 520.10 10.797 10.797 10.801 0.070 -0.295 -1.316 0.070 -0.295 0.388 -0.092 -0.021 0.912 0.200 + 520.15 10.930 10.931 10.939 -0.184 -0.407 -1.183 -0.184 -0.407 0.482 0.218 0.075 0.800 0.267 + 520.20 10.793 10.795 10.806 -0.247 -0.465 -1.320 -0.247 -0.465 0.614 0.325 0.115 1.010 0.352 + 520.25 10.594 10.610 10.612 -0.583 -0.215 -1.519 -0.583 -0.215 0.327 0.886 0.126 1.347 0.476 + 520.30 11.074 11.113 11.120 -0.927 -0.397 -1.038 -0.927 -0.397 0.412 0.962 0.368 1.047 0.555 + 520.35 11.321 11.369 11.370 -1.041 -0.119 -0.791 -1.041 -0.119 0.094 0.824 0.124 0.862 0.419 + 520.40 11.017 11.055 11.062 -0.922 0.379 -1.096 -0.922 0.379 -0.415 1.010 -0.349 1.097 0.573 + 520.45 11.086 11.115 11.124 -0.809 0.441 -1.027 -0.809 0.441 -0.453 0.831 -0.357 0.952 0.506 + 520.50 11.102 11.129 11.146 -0.769 0.616 -1.010 -0.769 0.616 -0.623 0.777 -0.474 0.996 0.552 + 520.55 11.017 11.066 11.081 -1.048 0.577 -1.096 -1.048 0.577 -0.632 1.149 -0.605 1.316 0.722 + 520.60 10.988 11.054 11.076 -1.202 0.699 -1.124 -1.202 0.699 -0.786 1.352 -0.840 1.599 0.888 + 520.65 10.979 11.023 11.039 -0.990 0.591 -1.134 -0.990 0.591 -0.670 1.122 -0.585 1.307 0.716 + 520.70 11.025 11.046 11.053 -0.673 0.394 -1.088 -0.673 0.394 -0.429 0.732 -0.265 0.896 0.444 + 520.75 11.027 11.065 11.068 -0.917 0.241 -1.086 -0.917 0.241 -0.262 0.996 -0.221 1.040 0.527 + 520.80 11.188 11.232 11.234 -0.994 -0.230 -0.925 -0.994 -0.230 0.213 0.919 0.229 0.948 0.486 + 520.85 10.946 11.026 11.026 -1.321 -0.047 -1.167 -1.321 -0.047 0.055 1.541 0.062 1.554 0.772 + 520.90 11.258 11.347 11.347 -1.413 -0.125 -0.855 -1.413 -0.125 0.107 1.208 0.177 1.371 0.613 + 520.95 11.601 11.691 11.693 -1.451 0.231 -0.512 -1.451 0.231 -0.118 0.743 -0.335 1.210 0.412 + 521.00 11.775 11.868 11.887 -1.479 0.686 -0.338 -1.479 0.686 -0.232 0.499 -1.014 1.386 0.577 + 521.05 11.658 11.734 11.745 -1.330 0.509 -0.455 -1.330 0.509 -0.231 0.605 -0.676 1.117 0.468 + 521.10 11.239 11.315 11.329 -1.305 0.571 -0.874 -1.305 0.571 -0.499 1.140 -0.745 1.396 0.725 + 521.15 11.161 11.298 11.302 -1.756 0.291 -0.952 -1.756 0.291 -0.277 1.672 -0.511 2.037 0.885 + 521.20 10.998 11.092 11.094 -1.442 0.245 -1.115 -1.442 0.245 -0.273 1.608 -0.353 1.691 0.834 + 521.25 11.038 11.112 11.112 -1.280 0.057 -1.075 -1.280 0.057 -0.061 1.376 -0.073 1.399 0.690 + 521.30 11.404 11.497 11.497 -1.459 0.043 -0.709 -1.459 0.043 -0.031 1.034 -0.063 1.316 0.518 + 521.35 11.634 11.705 11.709 -1.285 0.283 -0.478 -1.285 0.283 -0.135 0.615 -0.364 0.980 0.364 + 521.40 11.613 11.729 11.729 -1.649 0.090 -0.500 -1.649 0.090 -0.045 0.825 -0.148 1.489 0.420 + 521.45 11.352 11.502 11.515 -1.852 0.537 -0.761 -1.852 0.537 -0.408 1.409 -0.994 2.148 0.886 + 521.50 11.491 11.630 11.638 -1.794 0.440 -0.622 -1.794 0.440 -0.274 1.116 -0.789 1.899 0.697 + 521.55 11.121 11.314 11.322 -2.081 0.431 -0.992 -2.081 0.431 -0.428 2.064 -0.898 2.751 1.146 + 521.60 10.895 11.045 11.055 -1.812 0.465 -1.218 -1.812 0.465 -0.566 2.207 -0.842 2.492 1.215 + 521.65 11.137 11.288 11.296 -1.844 0.410 -0.976 -1.844 0.410 -0.400 1.800 -0.756 2.261 0.997 + 521.70 11.418 11.532 11.538 -1.616 0.351 -0.694 -1.616 0.351 -0.244 1.122 -0.567 1.609 0.640 + 521.75 11.124 11.246 11.260 -1.652 0.559 -0.989 -1.652 0.559 -0.553 1.633 -0.924 2.009 0.978 + 521.80 11.118 11.254 11.266 -1.745 0.534 -0.995 -1.745 0.534 -0.531 1.737 -0.931 2.161 1.021 + 521.85 11.181 11.314 11.335 -1.731 0.686 -0.932 -1.731 0.686 -0.640 1.612 -1.188 2.167 1.051 + 521.90 11.099 11.239 11.269 -1.769 0.818 -1.013 -1.769 0.818 -0.828 1.792 -1.446 2.412 1.224 + 521.95 11.258 11.411 11.422 -1.863 0.494 -0.855 -1.863 0.494 -0.423 1.592 -0.921 2.223 0.944 + 522.00 11.130 11.227 11.232 -1.468 0.341 -0.983 -1.468 0.341 -0.335 1.443 -0.501 1.619 0.782 + 522.05 11.233 11.287 11.292 -1.102 0.320 -0.880 -1.102 0.320 -0.281 0.969 -0.352 1.045 0.534 + 522.10 11.246 11.288 11.310 -0.976 0.702 -0.867 -0.976 0.702 -0.609 0.847 -0.686 1.099 0.624 + 522.15 10.857 10.888 10.935 -0.828 1.005 -1.256 -0.828 1.005 -1.262 1.040 -0.832 1.636 0.917 + 522.20 10.880 10.895 10.932 -0.578 0.900 -1.233 -0.578 0.900 -1.110 0.712 -0.520 1.332 0.709 + 522.25 10.940 10.948 10.982 -0.409 0.863 -1.173 -0.409 0.863 -1.012 0.480 -0.353 1.144 0.587 + 522.30 10.751 10.758 10.785 -0.386 0.763 -1.362 -0.386 0.763 -1.039 0.526 -0.294 1.293 0.600 + 522.35 10.437 10.447 10.512 -0.448 1.171 -1.676 -0.448 1.171 -1.962 0.750 -0.524 2.190 1.083 + 522.40 10.658 10.667 10.728 -0.436 1.140 -1.454 -0.436 1.140 -1.658 0.634 -0.497 1.802 0.921 + 522.45 10.842 10.869 10.924 -0.765 1.095 -1.271 -0.765 1.095 -1.392 0.972 -0.838 1.700 0.946 + 522.50 10.661 10.710 10.749 -1.016 0.920 -1.452 -1.016 0.920 -1.335 1.475 -0.935 1.993 1.099 + 522.55 10.915 11.000 11.020 -1.364 0.663 -1.197 -1.364 0.663 -0.794 1.633 -0.905 1.867 1.014 + 522.60 10.703 10.807 10.832 -1.496 0.728 -1.410 -1.496 0.728 -1.026 2.108 -1.089 2.377 1.293 + 522.65 10.531 10.610 10.626 -1.295 0.589 -1.582 -1.295 0.589 -0.932 2.050 -0.763 2.264 1.189 + 522.70 10.714 10.803 10.816 -1.387 0.523 -1.399 -1.387 0.523 -0.731 1.940 -0.725 2.077 1.098 + 522.75 10.807 10.919 10.932 -1.563 0.524 -1.306 -1.563 0.524 -0.685 2.042 -0.820 2.212 1.152 + 522.80 10.629 10.736 10.750 -1.509 0.539 -1.483 -1.509 0.539 -0.800 2.238 -0.814 2.384 1.256 + 522.85 10.769 10.856 10.877 -1.371 0.665 -1.343 -1.371 0.665 -0.893 1.842 -0.911 2.063 1.120 + 522.90 10.884 10.947 10.971 -1.170 0.729 -1.229 -1.170 0.729 -0.896 1.438 -0.853 1.705 0.948 + 522.95 10.918 10.969 10.982 -1.052 0.546 -1.195 -1.052 0.546 -0.653 1.256 -0.575 1.416 0.764 + 523.00 10.912 10.936 10.948 -0.728 0.500 -1.201 -0.728 0.500 -0.600 0.874 -0.364 1.111 0.560 + 523.05 10.983 10.994 11.001 -0.511 0.379 -1.130 -0.511 0.379 -0.428 0.577 -0.193 0.841 0.372 + 523.10 11.003 11.007 11.008 -0.323 0.148 -1.110 -0.323 0.148 -0.165 0.358 -0.048 0.679 0.199 + 523.15 10.830 10.837 10.846 -0.398 0.436 -1.283 -0.398 0.436 -0.559 0.510 -0.173 0.997 0.388 + 523.20 10.922 10.927 10.930 -0.340 0.234 -1.191 -0.340 0.234 -0.279 0.405 -0.080 0.794 0.249 + 523.25 10.887 10.895 10.897 -0.398 -0.217 -1.225 -0.398 -0.217 0.266 0.487 0.086 0.853 0.281 + 523.30 11.174 11.179 11.188 -0.335 -0.447 -0.939 -0.335 -0.447 0.419 0.314 0.150 0.597 0.273 + 523.35 11.176 11.187 11.199 -0.488 -0.526 -0.937 -0.488 -0.526 0.493 0.458 0.257 0.696 0.360 + 523.40 11.233 11.247 11.256 -0.559 -0.464 -0.880 -0.559 -0.464 0.408 0.492 0.259 0.651 0.345 + 523.45 11.057 11.079 11.084 -0.696 -0.360 -1.056 -0.696 -0.360 0.381 0.735 0.251 0.865 0.432 + 523.50 10.939 10.965 10.971 -0.754 0.346 -1.174 -0.754 0.346 -0.406 0.885 -0.261 1.033 0.504 + 523.55 10.426 10.454 10.465 -0.764 0.482 -1.686 -0.764 0.482 -0.812 1.288 -0.368 1.830 0.783 + 523.60 10.277 10.312 10.332 -0.848 0.635 -1.836 -0.848 0.635 -1.166 1.557 -0.539 2.247 1.009 + 523.65 10.485 10.539 10.548 -1.068 0.427 -1.628 -1.068 0.427 -0.695 1.738 -0.456 1.986 0.963 + 523.70 10.852 10.873 10.896 -0.674 0.704 -1.260 -0.674 0.704 -0.887 0.849 -0.474 1.269 0.658 + 523.75 10.914 10.929 10.940 -0.577 0.492 -1.199 -0.577 0.492 -0.590 0.692 -0.284 1.006 0.476 + 523.80 11.425 11.445 11.447 -0.677 0.188 -0.688 -0.677 0.188 -0.129 0.465 -0.127 0.483 0.250 + 523.85 11.447 11.487 11.488 -0.961 -0.135 -0.666 -0.961 -0.135 0.090 0.640 0.130 0.693 0.330 + 523.90 11.342 11.364 11.374 -0.704 -0.474 -0.771 -0.704 -0.474 0.366 0.543 0.334 0.658 0.367 + 523.95 11.643 11.647 11.655 -0.318 -0.433 -0.470 -0.318 -0.433 0.203 0.149 0.138 0.254 0.144 + 524.00 11.311 11.319 11.320 -0.429 -0.133 -0.802 -0.429 -0.133 0.107 0.344 0.057 0.422 0.182 + 524.05 11.187 11.207 11.207 -0.655 -0.075 -0.925 -0.655 -0.075 0.069 0.606 0.049 0.646 0.306 + 524.10 11.095 11.105 11.106 -0.489 0.102 -1.018 -0.489 0.102 -0.104 0.498 -0.050 0.643 0.256 + 524.15 11.042 11.066 11.067 -0.726 0.105 -1.070 -0.726 0.105 -0.112 0.777 -0.076 0.842 0.394 + 524.20 11.292 11.323 11.323 -0.825 -0.006 -0.820 -0.825 -0.006 0.005 0.677 0.005 0.677 0.338 + 524.25 11.291 11.313 11.313 -0.708 0.004 -0.822 -0.708 0.004 -0.003 0.581 -0.003 0.588 0.291 + 524.30 11.240 11.260 11.260 -0.679 0.020 -0.873 -0.679 0.020 -0.018 0.593 -0.014 0.612 0.297 + 524.35 11.065 11.078 11.079 -0.538 -0.119 -1.048 -0.538 -0.119 0.125 0.563 0.064 0.701 0.290 + 524.40 10.860 10.866 10.867 -0.354 0.135 -1.253 -0.354 0.135 -0.170 0.443 -0.048 0.856 0.239 + 524.45 11.079 11.085 11.086 -0.367 0.177 -1.034 -0.367 0.177 -0.183 0.379 -0.065 0.618 0.213 + 524.50 11.078 11.079 11.081 -0.164 0.188 -1.035 -0.164 0.188 -0.194 0.170 -0.031 0.566 0.130 + 524.55 10.990 10.990 10.992 0.042 0.246 -1.123 0.042 0.246 -0.276 -0.047 0.010 0.662 0.140 + 524.60 10.916 10.916 10.921 0.020 0.344 -1.197 0.020 0.344 -0.412 -0.024 0.007 0.776 0.206 + 524.65 11.127 11.127 11.135 0.061 0.424 -0.986 0.061 0.424 -0.418 -0.060 0.026 0.577 0.211 + 524.70 11.190 11.191 11.193 0.125 0.230 -0.923 0.125 0.230 -0.212 -0.115 0.029 0.460 0.122 + 524.75 10.821 10.824 10.832 0.245 0.401 -1.291 0.245 0.401 -0.518 -0.316 0.098 0.944 0.307 + 524.80 10.961 10.962 10.967 0.164 0.343 -1.152 0.164 0.343 -0.395 -0.189 0.056 0.736 0.221 + 524.85 11.101 11.104 11.104 -0.238 0.091 -1.011 -0.238 0.091 -0.092 0.241 -0.022 0.544 0.129 + 524.90 10.990 10.990 10.996 -0.097 0.344 -1.123 -0.097 0.344 -0.386 0.108 -0.033 0.694 0.201 + 524.95 10.993 10.994 10.996 0.087 0.215 -1.119 0.087 0.215 -0.241 -0.097 0.019 0.653 0.130 + 525.00 10.988 10.989 10.989 -0.137 -0.137 -1.125 -0.137 -0.137 0.155 0.154 0.019 0.652 0.110 + 525.05 11.158 11.158 11.162 -0.044 -0.262 -0.954 -0.044 -0.262 0.250 0.042 0.012 0.491 0.127 + 525.10 11.165 11.166 11.168 -0.194 -0.170 -0.948 -0.194 -0.170 0.161 0.184 0.033 0.483 0.123 + 525.15 11.085 11.086 11.091 -0.149 -0.338 -1.028 -0.149 -0.338 0.347 0.153 0.050 0.596 0.191 + 525.20 11.251 11.251 11.263 -0.069 -0.518 -0.862 -0.069 -0.518 0.447 0.060 0.036 0.508 0.226 + 525.25 11.115 11.116 11.119 0.181 -0.239 -0.998 0.181 -0.239 0.239 -0.181 -0.043 0.543 0.151 + 525.30 11.513 11.514 11.515 -0.169 -0.142 -0.600 -0.169 -0.142 0.085 0.101 0.024 0.204 0.067 + 525.35 11.663 11.664 11.664 -0.103 -0.032 -0.450 -0.103 -0.032 0.014 0.046 0.003 0.107 0.024 + 525.40 11.934 11.935 11.936 -0.180 0.159 -0.179 -0.180 0.159 -0.028 0.032 -0.029 0.045 0.026 + 525.45 11.877 11.878 11.878 -0.109 -0.048 -0.235 -0.109 -0.048 0.011 0.026 0.005 0.035 0.014 + 525.50 11.994 11.994 12.001 -0.022 0.416 -0.119 -0.022 0.416 -0.050 0.003 -0.009 0.094 0.025 + 525.55 11.768 11.769 11.793 -0.139 0.750 -0.345 -0.139 0.750 -0.259 0.048 -0.104 0.350 0.141 + 525.60 11.844 11.845 11.857 -0.187 0.521 -0.269 -0.187 0.521 -0.140 0.050 -0.097 0.189 0.089 + 525.65 11.852 11.852 11.858 -0.103 0.365 -0.261 -0.103 0.365 -0.095 0.027 -0.038 0.106 0.053 + 525.70 11.902 11.902 11.908 -0.096 0.388 -0.211 -0.096 0.388 -0.082 0.020 -0.037 0.102 0.046 + 525.75 11.637 11.644 11.645 0.403 0.176 -0.476 0.403 0.176 -0.084 -0.192 0.071 0.210 0.111 + 525.80 11.551 11.554 11.557 0.257 0.285 -0.562 0.257 0.285 -0.160 -0.144 0.073 0.231 0.114 + 525.85 11.492 11.492 11.492 -0.013 0.071 -0.621 -0.013 0.071 -0.044 0.008 -0.001 0.195 0.022 + 525.90 11.417 11.417 11.421 -0.031 -0.281 -0.696 -0.031 -0.281 0.196 0.022 0.009 0.282 0.099 + 525.95 11.348 11.351 11.352 0.268 0.087 -0.765 0.268 0.087 -0.067 -0.205 0.023 0.332 0.108 + 526.00 11.508 11.513 11.520 0.351 0.400 -0.605 0.351 0.400 -0.242 -0.212 0.140 0.324 0.176 + 526.05 11.752 11.753 11.764 0.075 0.519 -0.360 0.075 0.519 -0.187 -0.027 0.039 0.203 0.097 + 526.10 11.907 11.910 11.921 -0.291 0.507 -0.206 -0.291 0.507 -0.105 0.060 -0.148 0.193 0.095 + 526.15 11.987 11.987 11.996 0.003 0.454 -0.126 0.003 0.454 -0.057 -0.000 0.002 0.111 0.029 + 526.20 12.114 12.116 12.116 0.220 0.006 0.001 0.220 0.006 0.000 0.000 0.001 0.024 0.001 + 526.25 12.315 12.320 12.320 0.342 0.094 0.202 0.342 0.094 0.019 0.069 0.032 0.083 0.039 + 526.30 12.580 12.587 12.587 0.434 0.082 0.467 0.434 0.082 0.038 0.203 0.035 0.206 0.105 + 526.35 12.454 12.457 12.457 -0.252 -0.001 0.341 -0.252 -0.001 -0.000 -0.086 0.000 0.090 0.043 + 526.40 12.309 12.313 12.313 -0.321 -0.138 0.196 -0.321 -0.138 -0.027 -0.063 0.044 0.080 0.041 + 526.45 12.893 12.893 12.902 -0.066 -0.478 0.780 -0.066 -0.478 -0.373 -0.052 0.032 0.421 0.189 + 526.50 12.617 12.619 12.620 0.242 -0.125 0.504 0.242 -0.125 -0.063 0.122 -0.030 0.164 0.070 + 526.55 12.161 12.163 12.163 0.215 0.049 0.048 0.215 0.049 0.002 0.010 0.011 0.025 0.007 + 526.60 12.337 12.340 12.343 0.277 -0.252 0.224 0.277 -0.252 -0.056 0.062 -0.070 0.095 0.055 + 526.65 12.086 12.086 12.102 -0.072 -0.610 -0.027 -0.072 -0.610 0.016 0.002 0.044 0.189 0.024 + 526.70 12.068 12.079 12.085 -0.513 -0.382 -0.045 -0.513 -0.382 0.017 0.023 0.196 0.206 0.099 + 526.75 12.146 12.183 12.194 -0.936 -0.527 0.034 -0.936 -0.527 -0.018 -0.032 0.493 0.578 0.247 + 526.80 12.265 12.315 12.338 -1.116 -0.744 0.152 -1.116 -0.744 -0.113 -0.169 0.830 0.911 0.427 + 526.85 12.315 12.371 12.401 -1.177 -0.859 0.202 -1.177 -0.859 -0.173 -0.238 1.011 1.082 0.527 + 526.90 12.122 12.149 12.190 -0.801 -1.005 0.009 -0.801 -1.005 -0.009 -0.008 0.806 0.827 0.403 + 526.95 12.094 12.111 12.169 -0.640 -1.187 -0.018 -0.640 -1.187 0.022 0.012 0.760 0.910 0.380 + 527.00 12.055 12.094 12.160 -0.976 -1.269 -0.058 -0.976 -1.269 0.074 0.057 1.239 1.283 0.621 + 527.05 12.366 12.408 12.478 -1.018 -1.326 0.253 -1.018 -1.326 -0.336 -0.258 1.349 1.428 0.707 + 527.10 12.421 12.468 12.539 -1.079 -1.337 0.308 -1.079 -1.337 -0.412 -0.332 1.443 1.524 0.769 + 527.15 12.402 12.444 12.466 -1.031 -0.732 0.289 -1.031 -0.732 -0.212 -0.298 0.755 0.841 0.419 + 527.20 12.102 12.126 12.144 -0.758 -0.670 -0.011 -0.758 -0.670 0.007 0.008 0.508 0.512 0.254 + 527.25 11.643 11.682 11.713 -0.952 -0.852 -0.470 -0.952 -0.852 0.401 0.448 0.811 0.927 0.505 + 527.30 11.596 11.667 11.679 -1.288 -0.525 -0.517 -1.288 -0.525 0.272 0.666 0.676 1.101 0.494 + 527.35 11.525 11.592 11.596 -1.241 -0.322 -0.588 -1.241 -0.322 0.189 0.730 0.400 0.995 0.427 + 527.40 11.833 11.908 11.908 -1.328 0.017 -0.280 -1.328 0.017 -0.005 0.371 -0.023 0.922 0.186 + 527.45 11.802 11.865 11.872 -1.222 -0.387 -0.311 -1.222 -0.387 0.120 0.380 0.473 0.870 0.309 + 527.50 11.934 11.996 12.021 -1.217 -0.773 -0.179 -1.217 -0.773 0.138 0.217 0.941 1.055 0.488 + 527.55 12.119 12.176 12.192 -1.180 -0.624 0.006 -1.180 -0.624 -0.004 -0.007 0.736 0.890 0.368 + 527.60 12.330 12.348 12.360 -0.653 -0.548 0.218 -0.653 -0.548 -0.119 -0.142 0.358 0.387 0.202 + 527.65 12.452 12.483 12.489 -0.886 -0.378 0.339 -0.886 -0.378 -0.128 -0.300 0.335 0.522 0.234 + 527.70 12.647 12.678 12.682 -0.880 -0.338 0.534 -0.880 -0.338 -0.180 -0.470 0.297 0.587 0.292 + 527.75 12.396 12.410 12.426 -0.580 -0.639 0.283 -0.580 -0.639 -0.181 -0.164 0.371 0.413 0.222 + 527.80 12.143 12.147 12.158 -0.302 -0.530 0.030 -0.302 -0.530 -0.016 -0.009 0.160 0.186 0.081 + 527.85 12.456 12.464 12.478 -0.454 -0.594 0.343 -0.454 -0.594 -0.204 -0.156 0.270 0.339 0.186 + 527.90 12.517 12.529 12.582 -0.552 -1.147 0.404 -0.552 -1.147 -0.464 -0.223 0.634 0.892 0.408 + 527.95 12.209 12.227 12.269 -0.651 -1.020 0.097 -0.651 -1.020 -0.099 -0.063 0.664 0.737 0.337 + 528.00 12.522 12.528 12.561 -0.397 -0.907 0.409 -0.397 -0.907 -0.371 -0.163 0.360 0.574 0.271 + 528.05 12.381 12.381 12.409 -0.101 -0.833 0.268 -0.101 -0.833 -0.223 -0.027 0.084 0.388 0.120 + 528.10 12.116 12.116 12.142 0.137 -0.784 0.003 0.137 -0.784 -0.002 0.000 -0.107 0.317 0.054 + 528.15 11.955 11.955 11.973 -0.062 -0.663 -0.158 -0.062 -0.663 0.105 0.010 0.041 0.234 0.057 + 528.20 12.294 12.296 12.316 -0.205 -0.707 0.181 -0.205 -0.707 -0.128 -0.037 0.145 0.287 0.098 + 528.25 12.505 12.512 12.547 -0.429 -0.935 0.392 -0.429 -0.935 -0.366 -0.168 0.401 0.605 0.284 + 528.30 12.423 12.436 12.467 -0.553 -0.882 0.311 -0.553 -0.882 -0.274 -0.172 0.488 0.590 0.293 + 528.35 12.185 12.213 12.234 -0.829 -0.725 0.072 -0.829 -0.725 -0.052 -0.060 0.601 0.609 0.303 + 528.40 12.322 12.347 12.373 -0.787 -0.793 0.209 -0.787 -0.793 -0.166 -0.165 0.624 0.646 0.333 + 528.45 12.518 12.529 12.540 -0.538 -0.523 0.405 -0.538 -0.523 -0.212 -0.218 0.282 0.364 0.207 + 528.50 12.343 12.363 12.367 -0.690 -0.316 0.231 -0.690 -0.316 -0.073 -0.159 0.218 0.315 0.140 + 528.55 12.529 12.552 12.556 -0.759 -0.337 0.416 -0.759 -0.337 -0.140 -0.316 0.256 0.431 0.215 + 528.60 12.739 12.776 12.782 -0.968 -0.393 0.627 -0.968 -0.393 -0.246 -0.607 0.380 0.742 0.379 + 528.65 12.734 12.755 12.769 -0.746 -0.588 0.621 -0.746 -0.588 -0.365 -0.463 0.439 0.644 0.367 + 528.70 12.430 12.459 12.493 -0.843 -0.922 0.318 -0.843 -0.922 -0.293 -0.268 0.777 0.831 0.436 + 528.75 12.713 12.734 12.771 -0.727 -0.965 0.600 -0.727 -0.965 -0.580 -0.437 0.702 0.911 0.505 + 528.80 12.709 12.725 12.756 -0.643 -0.889 0.596 -0.643 -0.889 -0.530 -0.383 0.571 0.780 0.434 + 528.85 12.767 12.792 12.810 -0.804 -0.679 0.654 -0.804 -0.679 -0.444 -0.526 0.546 0.768 0.439 + 528.90 13.115 13.133 13.166 -0.687 -0.919 1.003 -0.687 -0.919 -0.921 -0.689 0.631 1.161 0.656 + 528.95 13.046 13.063 13.095 -0.647 -0.923 0.934 -0.647 -0.923 -0.862 -0.604 0.598 1.071 0.605 + 529.00 12.976 12.989 13.031 -0.577 -1.036 0.864 -0.577 -1.036 -0.895 -0.499 0.598 1.076 0.593 + 529.05 12.992 13.015 13.046 -0.778 -0.888 0.879 -0.778 -0.888 -0.781 -0.684 0.691 1.084 0.624 + 529.10 12.773 12.806 12.825 -0.917 -0.699 0.660 -0.917 -0.699 -0.461 -0.605 0.641 0.882 0.497 + 529.15 12.998 13.040 13.054 -1.053 -0.605 0.885 -1.053 -0.605 -0.535 -0.932 0.637 1.129 0.625 + 529.20 12.993 13.030 13.042 -0.969 -0.578 0.881 -0.969 -0.578 -0.509 -0.853 0.560 1.024 0.570 + 529.25 12.953 12.976 12.990 -0.767 -0.612 0.840 -0.767 -0.612 -0.515 -0.644 0.470 0.834 0.474 + 529.30 13.260 13.292 13.309 -0.909 -0.678 1.148 -0.909 -0.678 -0.778 -1.044 0.617 1.302 0.720 + 529.35 12.934 12.955 12.963 -0.736 -0.455 0.821 -0.736 -0.455 -0.373 -0.604 0.335 0.711 0.393 + 529.40 12.964 12.993 12.994 -0.868 -0.181 0.851 -0.868 -0.181 -0.154 -0.739 0.157 0.755 0.385 + 529.45 13.086 13.126 13.130 -1.023 -0.295 0.974 -1.023 -0.295 -0.288 -0.996 0.302 1.041 0.540 + 529.50 12.828 12.851 12.852 -0.772 -0.057 0.715 -0.772 -0.057 -0.041 -0.552 0.044 0.555 0.278 + 529.55 13.083 13.115 13.118 -0.909 -0.276 0.970 -0.909 -0.276 -0.267 -0.882 0.250 0.922 0.478 + 529.60 13.172 13.223 13.228 -1.163 -0.373 1.059 -1.163 -0.373 -0.395 -1.231 0.434 1.306 0.682 + 529.65 13.210 13.247 13.250 -0.982 -0.294 1.097 -0.982 -0.294 -0.323 -1.078 0.289 1.128 0.581 + 529.70 12.920 12.962 12.962 -1.042 0.035 0.807 -1.042 0.035 0.028 -0.841 -0.036 0.869 0.421 + 529.75 12.694 12.738 12.742 -1.060 0.332 0.581 -1.060 0.332 0.193 -0.616 -0.352 0.785 0.368 + 529.80 12.568 12.627 12.628 -1.213 0.209 0.455 -1.213 0.209 0.095 -0.552 -0.253 0.861 0.307 + 529.85 12.471 12.563 12.568 -1.517 0.383 0.358 -1.517 0.383 0.137 -0.543 -0.581 1.288 0.404 + 529.90 12.324 12.393 12.411 -1.302 0.686 0.211 -1.302 0.686 0.145 -0.275 -0.893 1.106 0.473 + 529.95 12.225 12.278 12.289 -1.131 0.520 0.113 -1.131 0.520 0.058 -0.127 -0.588 0.781 0.302 + 530.00 12.216 12.240 12.277 -0.774 0.952 0.103 -0.774 0.952 0.098 -0.080 -0.737 0.758 0.374 + 530.05 12.295 12.311 12.343 -0.622 0.890 0.183 -0.622 0.890 0.162 -0.114 -0.554 0.606 0.294 + 530.10 12.482 12.502 12.524 -0.708 0.733 0.369 -0.708 0.733 0.271 -0.261 -0.519 0.588 0.321 + 530.15 12.606 12.647 12.668 -1.015 0.722 0.494 -1.015 0.722 0.356 -0.501 -0.733 0.897 0.478 + 530.20 12.748 12.817 12.831 -1.325 0.604 0.635 -1.325 0.604 0.384 -0.842 -0.801 1.263 0.612 + 530.25 12.762 12.850 12.862 -1.507 0.548 0.649 -1.507 0.548 0.356 -0.978 -0.827 1.497 0.664 + 530.30 12.812 12.896 12.902 -1.474 0.395 0.699 -1.474 0.395 0.276 -1.030 -0.582 1.408 0.608 + 530.35 12.836 12.915 12.922 -1.425 0.429 0.723 -1.425 0.429 0.310 -1.030 -0.612 1.368 0.619 + 530.40 12.844 12.919 12.920 -1.385 0.157 0.732 -1.385 0.157 0.115 -1.013 -0.217 1.240 0.521 + 530.45 12.950 13.066 13.067 -1.741 -0.143 0.837 -1.741 -0.143 -0.120 -1.457 0.249 1.876 0.741 + 530.50 13.220 13.280 13.280 -1.257 -0.116 1.107 -1.257 -0.116 -0.128 -1.392 0.145 1.410 0.703 + 530.55 13.418 13.483 13.483 -1.317 -0.102 1.306 -1.317 -0.102 -0.133 -1.719 0.134 1.724 0.865 + 530.60 13.330 13.387 13.387 -1.237 0.071 1.217 -1.237 0.071 0.086 -1.505 -0.088 1.508 0.755 + 530.65 13.380 13.415 13.426 -0.958 0.542 1.268 -0.958 0.542 0.687 -1.215 -0.519 1.409 0.744 + 530.70 13.193 13.212 13.231 -0.715 0.692 1.080 -0.715 0.692 0.748 -0.773 -0.495 1.079 0.592 + 530.75 13.095 13.146 13.158 -1.160 0.549 0.982 -1.160 0.549 0.540 -1.139 -0.637 1.306 0.706 + 530.80 13.073 13.150 13.174 -1.420 0.794 0.960 -1.420 0.794 0.763 -1.364 -1.128 1.785 0.964 + 530.85 13.033 13.108 13.144 -1.397 0.965 0.921 -1.397 0.965 0.889 -1.286 -1.349 1.866 1.032 + 530.90 13.244 13.308 13.345 -1.303 0.995 1.131 -1.303 0.995 1.125 -1.473 -1.296 1.983 1.131 + 530.95 13.036 13.053 13.094 -0.677 1.036 0.923 -0.677 1.036 0.956 -0.625 -0.701 1.191 0.670 + 531.00 12.882 12.903 12.954 -0.741 1.142 0.769 -0.741 1.142 0.879 -0.570 -0.846 1.222 0.673 + 531.05 12.996 13.036 13.056 -1.029 0.718 0.883 -1.029 0.718 0.634 -0.908 -0.739 1.176 0.666 + 531.10 13.159 13.203 13.211 -1.082 0.472 1.046 -1.082 0.472 0.494 -1.132 -0.511 1.244 0.668 + 531.15 13.111 13.161 13.162 -1.144 0.180 0.998 -1.144 0.180 0.179 -1.142 -0.205 1.169 0.587 + 531.20 12.825 12.842 12.843 -0.652 0.154 0.712 -0.652 0.154 0.109 -0.465 -0.100 0.478 0.244 + 531.25 13.081 13.114 13.115 -0.934 0.143 0.968 -0.934 0.143 0.138 -0.904 -0.133 0.914 0.462 + 531.30 13.258 13.310 13.316 -1.173 0.412 1.145 -1.173 0.412 0.472 -1.343 -0.483 1.428 0.751 + 531.35 13.239 13.282 13.282 -1.064 0.073 1.127 -1.064 0.073 0.083 -1.198 -0.078 1.203 0.602 + 531.40 13.362 13.410 13.410 -1.131 -0.067 1.249 -1.131 -0.067 -0.084 -1.413 0.076 1.422 0.709 + 531.45 13.272 13.330 13.332 -1.243 -0.217 1.159 -1.243 -0.217 -0.251 -1.441 0.269 1.468 0.743 + 531.50 13.221 13.283 13.288 -1.272 -0.381 1.109 -1.272 -0.381 -0.423 -1.410 0.485 1.496 0.775 + 531.55 12.925 12.970 12.977 -1.070 -0.435 0.813 -1.070 -0.435 -0.353 -0.870 0.465 0.997 0.524 + 531.60 12.647 12.693 12.702 -1.079 -0.475 0.534 -1.079 -0.475 -0.254 -0.576 0.512 0.837 0.406 + 531.65 12.507 12.529 12.532 -0.748 -0.261 0.394 -0.748 -0.261 -0.103 -0.295 0.195 0.391 0.184 + 531.70 12.486 12.503 12.503 -0.656 0.070 0.373 -0.656 0.070 0.026 -0.245 -0.046 0.287 0.125 + 531.75 12.606 12.625 12.634 -0.698 0.483 0.493 -0.698 0.483 0.238 -0.344 -0.338 0.482 0.269 + 531.80 12.355 12.364 12.384 -0.483 0.696 0.242 -0.483 0.696 0.168 -0.117 -0.336 0.388 0.197 + 531.85 12.129 12.140 12.175 -0.500 0.926 0.016 -0.500 0.926 0.015 -0.008 -0.464 0.555 0.232 + 531.90 11.977 11.994 12.026 -0.625 0.882 -0.135 -0.625 0.882 -0.119 0.085 -0.551 0.594 0.285 + 531.95 12.145 12.162 12.190 -0.644 0.828 0.032 -0.644 0.828 0.027 -0.021 -0.533 0.551 0.267 + 532.00 12.390 12.412 12.432 -0.729 0.700 0.278 -0.729 0.700 0.194 -0.202 -0.510 0.549 0.291 + 532.05 12.314 12.343 12.376 -0.854 0.904 0.201 -0.854 0.904 0.182 -0.172 -0.771 0.793 0.405 + 532.10 12.180 12.212 12.249 -0.886 0.951 0.067 -0.886 0.951 0.064 -0.059 -0.843 0.847 0.424 + 532.15 12.121 12.135 12.167 -0.573 0.886 0.008 -0.573 0.886 0.007 -0.005 -0.508 0.557 0.254 + 532.20 11.996 12.003 12.050 -0.425 1.061 -0.117 -0.425 1.061 -0.124 0.050 -0.451 0.660 0.235 + 532.25 11.981 11.987 12.038 -0.385 1.105 -0.132 -0.385 1.105 -0.145 0.051 -0.425 0.693 0.226 + 532.30 11.937 11.952 11.987 -0.593 0.919 -0.175 -0.593 0.919 -0.161 0.104 -0.545 0.613 0.289 + 532.35 11.857 11.879 11.900 -0.723 0.698 -0.256 -0.723 0.698 -0.178 0.185 -0.504 0.537 0.283 + 532.40 11.914 11.926 11.945 -0.533 0.678 -0.199 -0.533 0.678 -0.135 0.106 -0.361 0.391 0.200 + 532.45 11.999 12.021 12.030 -0.737 0.459 -0.114 -0.737 0.459 -0.052 0.084 -0.338 0.383 0.176 + 532.50 12.044 12.063 12.067 -0.668 0.313 -0.068 -0.668 0.313 -0.021 0.046 -0.209 0.274 0.108 + 532.55 11.948 11.953 11.963 -0.366 0.473 -0.165 -0.366 0.473 -0.078 0.060 -0.173 0.192 0.100 + 532.60 12.034 12.044 12.057 -0.491 0.556 -0.079 -0.491 0.556 -0.044 0.039 -0.273 0.278 0.139 + 532.65 12.042 12.057 12.079 -0.586 0.735 -0.070 -0.586 0.735 -0.052 0.041 -0.430 0.444 0.218 + 532.70 12.161 12.192 12.216 -0.868 0.760 0.049 -0.868 0.760 0.037 -0.042 -0.660 0.667 0.331 + 532.75 12.112 12.148 12.177 -0.934 0.839 -0.001 -0.934 0.839 -0.001 0.001 -0.783 0.788 0.392 + 532.80 12.111 12.151 12.173 -0.986 0.730 -0.002 -0.986 0.730 -0.001 0.001 -0.720 0.753 0.360 + 532.85 12.169 12.199 12.244 -0.861 1.043 0.056 -0.861 1.043 0.058 -0.048 -0.898 0.917 0.451 + 532.90 12.062 12.104 12.162 -1.009 1.188 -0.051 -1.009 1.188 -0.060 0.051 -1.199 1.216 0.601 + 532.95 12.141 12.165 12.214 -0.749 1.102 0.029 -0.749 1.102 0.032 -0.021 -0.826 0.888 0.413 + 533.00 12.024 12.056 12.104 -0.870 1.079 -0.088 -0.870 1.079 -0.095 0.077 -0.939 0.964 0.473 + 533.05 12.071 12.103 12.139 -0.880 0.932 -0.041 -0.880 0.932 -0.039 0.037 -0.820 0.822 0.411 + 533.10 12.115 12.136 12.169 -0.722 0.896 0.002 -0.722 0.896 0.002 -0.001 -0.647 0.663 0.324 + 533.15 11.800 11.817 11.845 -0.632 0.814 -0.313 -0.632 0.814 -0.255 0.198 -0.515 0.580 0.304 + 533.20 11.992 12.001 12.036 -0.481 0.922 -0.121 -0.481 0.922 -0.112 0.058 -0.443 0.548 0.230 + 533.25 11.940 11.941 11.979 -0.151 0.952 -0.172 -0.151 0.952 -0.164 0.026 -0.144 0.480 0.110 + 533.30 11.820 11.826 11.857 0.351 0.861 -0.292 0.351 0.861 -0.252 -0.103 0.302 0.475 0.203 + 533.35 11.650 11.655 11.699 0.346 1.016 -0.463 0.346 1.016 -0.470 -0.160 0.352 0.683 0.304 + 533.40 11.576 11.577 11.659 0.116 1.378 -0.537 0.116 1.378 -0.739 -0.062 0.160 1.099 0.379 + 533.45 11.666 11.667 11.713 0.189 1.038 -0.447 0.189 1.038 -0.464 -0.084 0.196 0.657 0.255 + 533.50 11.513 11.531 11.577 0.642 1.036 -0.600 0.642 1.036 -0.621 -0.385 0.665 0.922 0.494 + 533.55 11.673 11.693 11.721 0.684 0.808 -0.440 0.684 0.808 -0.356 -0.301 0.553 0.657 0.361 + 533.60 11.863 11.866 11.889 0.255 0.745 -0.250 0.255 0.745 -0.186 -0.064 0.190 0.341 0.137 + 533.65 11.822 11.822 11.864 0.045 0.991 -0.291 0.045 0.991 -0.288 -0.013 0.045 0.535 0.146 + 533.70 11.650 11.650 11.668 0.021 0.653 -0.463 0.021 0.653 -0.302 -0.010 0.014 0.320 0.151 + 533.75 11.724 11.726 11.741 0.185 0.600 -0.389 0.185 0.600 -0.233 -0.072 0.111 0.273 0.134 + 533.80 11.679 11.707 11.733 0.820 0.778 -0.434 0.820 0.778 -0.338 -0.356 0.638 0.733 0.402 + 533.85 11.834 11.865 11.902 0.860 0.944 -0.279 0.860 0.944 -0.263 -0.240 0.812 0.854 0.443 + 533.90 12.065 12.087 12.137 0.735 1.101 -0.048 0.735 1.101 -0.053 -0.035 0.809 0.878 0.406 + 533.95 12.424 12.426 12.459 0.170 0.911 0.312 0.170 0.911 0.284 0.053 0.155 0.478 0.164 + 534.00 12.455 12.456 12.477 0.191 0.714 0.342 0.191 0.714 0.244 0.065 0.137 0.332 0.144 + 534.05 12.386 12.388 12.420 0.180 0.903 0.273 0.180 0.903 0.247 0.049 0.162 0.462 0.150 + 534.10 12.516 12.521 12.542 0.351 0.730 0.403 0.351 0.730 0.294 0.141 0.256 0.409 0.207 + 534.15 12.146 12.159 12.174 0.572 0.594 0.033 0.572 0.594 0.020 0.019 0.339 0.340 0.170 + 534.20 12.277 12.277 12.295 0.024 0.670 0.164 0.024 0.670 0.110 0.004 0.016 0.238 0.056 + 534.25 12.286 12.287 12.310 -0.172 0.747 0.173 -0.172 0.747 0.129 -0.030 -0.129 0.309 0.092 + 534.30 12.371 12.371 12.434 -0.078 1.249 0.258 -0.078 1.249 0.322 -0.020 -0.097 0.816 0.169 + 534.35 12.181 12.182 12.251 -0.116 1.301 0.069 -0.116 1.301 0.089 -0.008 -0.151 0.855 0.088 + 534.40 11.906 11.911 11.986 -0.359 1.338 -0.207 -0.359 1.338 -0.277 0.074 -0.481 0.981 0.280 + 534.45 11.646 11.661 11.749 -0.578 1.438 -0.466 -0.578 1.438 -0.671 0.269 -0.831 1.310 0.551 + 534.50 11.501 11.527 11.629 -0.777 1.539 -0.612 -0.777 1.539 -0.942 0.475 -1.195 1.673 0.797 + 534.55 11.470 11.488 11.523 -0.641 0.892 -0.643 -0.641 0.892 -0.573 0.412 -0.571 0.809 0.454 + 534.60 11.554 11.557 11.579 -0.247 0.713 -0.558 -0.247 0.713 -0.398 0.138 -0.176 0.440 0.228 + 534.65 11.389 11.390 11.446 -0.118 1.126 -0.723 -0.118 1.126 -0.815 0.085 -0.133 0.903 0.415 + 534.70 11.907 11.911 11.961 -0.317 1.093 -0.206 -0.317 1.093 -0.225 0.065 -0.346 0.669 0.209 + 534.75 12.183 12.188 12.232 -0.345 1.045 0.070 -0.345 1.045 0.073 -0.024 -0.361 0.608 0.184 + 534.80 12.229 12.238 12.253 -0.466 0.611 0.116 -0.466 0.611 0.071 -0.054 -0.285 0.302 0.149 + 534.85 11.954 11.969 11.992 -0.584 0.749 -0.158 -0.584 0.749 -0.119 0.093 -0.438 0.464 0.231 + 534.90 12.124 12.131 12.144 -0.411 0.573 0.011 -0.411 0.573 0.006 -0.005 -0.236 0.249 0.118 + 534.95 11.875 11.908 11.937 -0.883 0.839 -0.238 -0.883 0.839 -0.199 0.210 -0.740 0.769 0.397 + 535.00 12.172 12.187 12.228 -0.612 0.994 0.059 -0.612 0.994 0.059 -0.036 -0.608 0.683 0.306 + 535.05 12.308 12.312 12.330 -0.320 0.665 0.195 -0.320 0.665 0.130 -0.062 -0.213 0.291 0.128 + 535.10 11.841 11.841 11.873 -0.106 0.858 -0.272 -0.106 0.858 -0.233 0.029 -0.091 0.411 0.126 + 535.15 12.212 12.215 12.233 -0.268 0.663 0.100 -0.268 0.663 0.066 -0.027 -0.178 0.261 0.096 + 535.20 12.114 12.130 12.163 -0.625 0.897 0.001 -0.625 0.897 0.001 -0.001 -0.561 0.598 0.280 + 535.25 11.797 11.837 11.855 -0.977 0.658 -0.316 -0.977 0.658 -0.208 0.309 -0.643 0.743 0.371 + 535.30 11.527 11.539 11.541 -0.539 0.183 -0.586 -0.539 0.183 -0.107 0.316 -0.098 0.334 0.174 + 535.35 11.860 11.862 11.875 -0.227 0.553 -0.253 -0.227 0.553 -0.140 0.057 -0.126 0.211 0.098 + 535.40 11.847 11.847 11.848 0.036 0.096 -0.266 0.036 0.096 -0.025 -0.009 0.003 0.040 0.014 + 535.45 11.788 11.789 11.790 -0.161 -0.160 -0.325 -0.161 -0.160 0.052 0.052 0.026 0.079 0.039 + 535.50 11.636 11.644 11.645 -0.430 0.170 -0.477 -0.430 0.170 -0.081 0.205 -0.073 0.221 0.116 + 535.55 11.550 11.570 11.571 -0.669 0.204 -0.563 -0.669 0.204 -0.115 0.376 -0.137 0.403 0.208 + 535.60 11.269 11.295 11.300 -0.767 0.342 -0.844 -0.767 0.342 -0.288 0.647 -0.262 0.708 0.378 + 535.65 11.067 11.087 11.088 -0.667 -0.177 -1.046 -0.667 -0.177 0.185 0.697 0.118 0.785 0.366 + 535.70 11.233 11.265 11.265 -0.851 -0.006 -0.880 -0.851 -0.006 0.005 0.749 0.005 0.749 0.374 + 535.75 11.369 11.407 11.413 -0.934 0.373 -0.744 -0.934 0.373 -0.277 0.695 -0.348 0.783 0.413 + 535.80 11.529 11.548 11.550 -0.662 0.173 -0.584 -0.662 0.173 -0.101 0.386 -0.115 0.405 0.208 + 535.85 11.266 11.274 11.274 -0.421 -0.054 -0.847 -0.421 -0.054 0.046 0.357 0.023 0.449 0.180 + 535.90 11.345 11.354 11.355 -0.430 0.158 -0.767 -0.430 0.158 -0.121 0.330 -0.068 0.399 0.179 + 535.95 11.398 11.413 11.414 -0.593 0.146 -0.715 -0.593 0.146 -0.104 0.424 -0.086 0.442 0.222 + 536.00 11.313 11.371 11.371 -1.146 -0.083 -0.800 -1.146 -0.083 0.066 0.917 0.095 0.980 0.462 + 536.05 11.236 11.278 11.282 -0.975 0.304 -0.877 -0.975 0.304 -0.266 0.855 -0.296 0.906 0.472 + 536.10 11.571 11.595 11.595 -0.748 0.064 -0.542 -0.748 0.064 -0.034 0.405 -0.048 0.428 0.205 + 536.15 11.825 11.826 11.838 -0.146 0.519 -0.287 -0.146 0.519 -0.149 0.042 -0.076 0.186 0.086 + 536.20 11.579 11.581 11.610 -0.211 0.818 -0.534 -0.211 0.818 -0.436 0.112 -0.172 0.499 0.241 + 536.25 11.211 11.211 11.229 -0.090 0.643 -0.902 -0.090 0.643 -0.580 0.081 -0.058 0.618 0.294 + 536.30 11.126 11.129 11.150 0.257 0.680 -0.986 0.257 0.680 -0.671 -0.253 0.175 0.751 0.369 + 536.35 10.945 10.954 10.987 0.450 0.849 -1.168 0.450 0.849 -0.992 -0.526 0.382 1.144 0.593 + 536.40 10.994 11.015 11.055 0.690 0.938 -1.119 0.690 0.938 -1.050 -0.772 0.647 1.304 0.728 + 536.45 10.927 10.947 10.995 0.662 1.029 -1.186 0.662 1.029 -1.220 -0.785 0.681 1.451 0.801 + 536.50 11.252 11.269 11.307 0.630 0.925 -0.861 0.630 0.925 -0.797 -0.543 0.583 0.997 0.563 + 536.55 11.161 11.166 11.217 0.347 1.064 -0.952 0.347 1.064 -1.012 -0.331 0.370 1.079 0.564 + 536.60 11.388 11.392 11.413 0.326 0.690 -0.725 0.326 0.690 -0.500 -0.237 0.225 0.554 0.299 + 536.65 11.617 11.638 11.662 0.691 0.756 -0.496 0.691 0.756 -0.375 -0.342 0.522 0.647 0.364 + 536.70 11.316 11.328 11.346 0.524 0.640 -0.797 0.524 0.640 -0.510 -0.418 0.335 0.660 0.370 + 536.75 11.371 11.376 11.395 0.346 0.650 -0.742 0.346 0.650 -0.482 -0.256 0.225 0.546 0.295 + 536.80 11.376 11.387 11.403 0.504 0.616 -0.737 0.504 0.616 -0.454 -0.371 0.311 0.589 0.332 + 536.85 11.008 11.019 11.071 0.502 1.074 -1.105 0.502 1.074 -1.187 -0.555 0.539 1.314 0.709 + 536.90 11.121 11.136 11.217 0.582 1.344 -0.992 0.582 1.344 -1.333 -0.577 0.782 1.564 0.825 + 536.95 11.231 11.242 11.302 0.495 1.162 -0.882 0.495 1.162 -1.024 -0.437 0.575 1.186 0.627 + 537.00 11.268 11.269 11.301 0.171 0.847 -0.845 0.171 0.847 -0.715 -0.144 0.144 0.730 0.372 + 537.05 11.475 11.479 11.501 0.324 0.702 -0.638 0.324 0.702 -0.448 -0.206 0.227 0.502 0.272 + 537.10 11.445 11.488 11.505 0.991 0.620 -0.667 0.991 0.620 -0.414 -0.662 0.615 0.906 0.497 + 537.15 11.622 11.675 11.681 1.120 0.377 -0.491 1.120 0.377 -0.185 -0.550 0.423 0.819 0.359 + 537.20 11.619 11.650 11.654 0.838 0.302 -0.493 0.838 0.302 -0.149 -0.413 0.253 0.518 0.254 + 537.25 11.628 11.641 11.644 0.544 0.249 -0.484 0.544 0.249 -0.121 -0.264 0.135 0.296 0.160 + 537.30 11.722 11.724 11.724 0.215 -0.050 -0.391 0.215 -0.050 0.020 -0.084 -0.011 0.101 0.043 + 537.35 11.664 11.666 11.668 0.215 0.221 -0.448 0.215 0.221 -0.099 -0.096 0.048 0.148 0.073 + 537.40 11.656 11.659 11.662 0.259 0.256 -0.456 0.259 0.256 -0.117 -0.118 0.066 0.170 0.089 + 537.45 11.715 11.729 11.730 0.571 0.163 -0.398 0.571 0.163 -0.065 -0.227 0.093 0.255 0.127 + 537.50 11.581 11.581 11.601 0.095 0.671 -0.532 0.095 0.671 -0.357 -0.050 0.064 0.371 0.183 + 537.55 11.522 11.523 11.555 0.155 0.864 -0.591 0.155 0.864 -0.511 -0.091 0.134 0.560 0.268 + 537.60 11.432 11.432 11.473 0.021 0.959 -0.680 0.021 0.959 -0.653 -0.014 0.020 0.692 0.327 + 537.65 11.690 11.691 11.737 -0.168 1.032 -0.423 -0.168 1.032 -0.436 0.071 -0.174 0.636 0.238 + 537.70 11.417 11.418 11.502 -0.160 1.388 -0.696 -0.160 1.388 -0.966 0.111 -0.222 1.218 0.498 + 537.75 11.425 11.433 11.522 -0.425 1.433 -0.688 -0.425 1.433 -0.986 0.292 -0.608 1.354 0.597 + 537.80 11.475 11.479 11.557 -0.321 1.338 -0.638 -0.321 1.338 -0.854 0.205 -0.430 1.150 0.489 + 537.85 11.652 11.666 11.730 -0.569 1.228 -0.461 -0.569 1.228 -0.566 0.262 -0.699 1.022 0.468 + 537.90 11.893 11.900 11.954 -0.408 1.131 -0.220 -0.408 1.131 -0.249 0.090 -0.461 0.747 0.266 + 537.95 11.918 11.942 11.988 -0.758 1.054 -0.195 -0.758 1.054 -0.205 0.148 -0.799 0.862 0.419 + 538.00 11.528 11.569 11.604 -0.974 0.895 -0.585 -0.974 0.895 -0.523 0.570 -0.873 1.046 0.583 + 538.05 11.859 11.890 11.912 -0.848 0.731 -0.253 -0.848 0.731 -0.185 0.215 -0.620 0.659 0.341 + 538.10 12.060 12.090 12.122 -0.848 0.885 -0.053 -0.848 0.885 -0.047 0.045 -0.750 0.752 0.376 + 538.15 12.211 12.240 12.284 -0.839 1.044 0.098 -0.839 1.044 0.102 -0.082 -0.876 0.902 0.443 + 538.20 12.187 12.202 12.262 -0.598 1.218 0.074 -0.598 1.218 0.090 -0.044 -0.728 0.923 0.367 + 538.25 11.949 11.951 11.997 -0.226 1.041 -0.164 -0.226 1.041 -0.170 0.037 -0.235 0.581 0.146 + 538.30 12.177 12.179 12.228 -0.223 1.088 0.064 -0.223 1.088 0.070 -0.014 -0.243 0.619 0.126 + 538.35 11.790 11.791 11.837 -0.169 1.049 -0.323 -0.169 1.049 -0.339 0.055 -0.178 0.617 0.193 + 538.40 11.916 11.916 11.982 -0.116 1.254 -0.197 -0.116 1.254 -0.247 0.023 -0.146 0.813 0.144 + 538.45 11.933 11.936 12.001 0.271 1.250 -0.180 0.271 1.250 -0.225 -0.049 0.339 0.835 0.205 + 538.50 11.979 11.979 12.096 0.003 1.680 -0.134 0.003 1.680 -0.224 -0.000 0.006 1.420 0.112 + 538.55 12.023 12.024 12.159 -0.145 1.807 -0.089 -0.145 1.807 -0.162 0.013 -0.262 1.647 0.154 + 538.60 12.059 12.060 12.147 -0.106 1.455 -0.054 -0.106 1.455 -0.078 0.006 -0.155 1.066 0.087 + 538.65 12.062 12.063 12.132 -0.043 1.297 -0.050 -0.043 1.297 -0.065 0.002 -0.056 0.843 0.043 + 538.70 11.891 11.891 11.949 -0.107 1.174 -0.222 -0.107 1.174 -0.260 0.024 -0.126 0.719 0.145 + 538.75 12.021 12.022 12.088 -0.157 1.260 -0.092 -0.157 1.260 -0.115 0.014 -0.198 0.811 0.115 + 538.80 12.219 12.229 12.310 -0.509 1.404 0.106 -0.509 1.404 0.149 -0.054 -0.715 1.121 0.366 + 538.85 12.079 12.092 12.152 -0.553 1.210 -0.034 -0.553 1.210 -0.041 0.019 -0.669 0.885 0.335 + 538.90 12.317 12.317 12.384 0.013 1.288 0.204 0.013 1.288 0.263 0.003 0.017 0.851 0.132 + 538.95 12.172 12.175 12.215 0.283 0.990 0.059 0.283 0.990 0.058 0.017 0.281 0.532 0.144 + 539.00 12.005 12.010 12.091 0.327 1.401 -0.107 0.327 1.401 -0.151 -0.035 0.457 1.040 0.241 + 539.05 12.104 12.107 12.224 0.270 1.685 -0.009 0.270 1.685 -0.015 -0.002 0.455 1.456 0.227 + 539.10 12.189 12.193 12.296 0.307 1.586 0.077 0.307 1.586 0.121 0.024 0.488 1.307 0.252 + 539.15 12.354 12.357 12.457 0.274 1.571 0.241 0.274 1.571 0.379 0.066 0.430 1.301 0.289 + 539.20 11.882 11.885 11.967 0.274 1.402 -0.231 0.274 1.402 -0.324 -0.063 0.384 1.047 0.253 + 539.25 11.916 11.920 11.936 0.331 0.615 -0.197 0.331 0.615 -0.121 -0.065 0.203 0.263 0.123 + 539.30 11.971 11.971 11.974 -0.045 0.262 -0.142 -0.045 0.262 -0.037 0.006 -0.012 0.045 0.020 + 539.35 11.858 11.860 11.865 -0.234 0.333 -0.255 -0.234 0.333 -0.085 0.060 -0.078 0.115 0.065 + 539.40 11.948 11.949 11.950 -0.132 0.190 -0.165 -0.132 0.190 -0.031 0.022 -0.025 0.040 0.023 + 539.45 12.004 12.005 12.009 -0.152 0.313 -0.109 -0.152 0.313 -0.034 0.017 -0.047 0.066 0.030 + 539.50 12.221 12.222 12.223 -0.153 0.162 0.109 -0.153 0.162 0.018 -0.017 -0.025 0.031 0.017 + 539.55 12.100 12.102 12.105 -0.219 0.264 -0.013 -0.219 0.264 -0.003 0.003 -0.058 0.059 0.029 + 539.60 12.171 12.171 12.173 0.003 0.257 0.058 0.003 0.257 0.015 0.000 0.001 0.035 0.007 + 539.65 12.086 12.086 12.087 -0.127 0.097 -0.027 -0.127 0.097 -0.003 0.003 -0.012 0.013 0.007 + 539.70 12.056 12.056 12.059 -0.059 0.242 -0.057 -0.059 0.242 -0.014 0.003 -0.014 0.033 0.010 + 539.75 12.062 12.066 12.069 -0.310 0.268 -0.051 -0.310 0.268 -0.014 0.016 -0.083 0.085 0.043 + 539.80 12.165 12.165 12.167 -0.033 0.200 0.052 -0.033 0.200 0.010 -0.002 -0.007 0.022 0.006 + 539.85 11.914 11.915 11.916 0.132 0.179 -0.199 0.132 0.179 -0.036 -0.026 0.024 0.044 0.025 + 539.90 12.005 12.006 12.006 -0.094 -0.125 -0.108 -0.094 -0.125 0.013 0.010 0.012 0.018 0.010 + 539.95 11.905 11.908 11.908 0.269 -0.037 -0.208 0.269 -0.037 0.008 -0.056 -0.010 0.058 0.029 + 540.00 11.925 11.928 11.937 0.274 0.449 -0.188 0.274 0.449 -0.084 -0.051 0.123 0.156 0.079 + 540.05 12.026 12.031 12.040 0.375 0.453 -0.087 0.375 0.453 -0.040 -0.033 0.170 0.177 0.089 + 540.10 11.900 11.902 11.910 0.252 0.418 -0.213 0.252 0.418 -0.089 -0.054 0.105 0.142 0.074 + 540.15 11.774 11.786 11.792 0.533 0.365 -0.338 0.533 0.365 -0.124 -0.180 0.195 0.266 0.146 + 540.20 12.096 12.118 12.122 0.731 0.294 -0.017 0.731 0.294 -0.005 -0.012 0.215 0.311 0.108 + 540.25 11.936 11.964 11.970 0.818 0.378 -0.177 0.818 0.378 -0.067 -0.145 0.309 0.422 0.174 + 540.30 12.175 12.211 12.221 0.944 0.478 0.062 0.944 0.478 0.030 0.059 0.451 0.562 0.228 + 540.35 12.193 12.260 12.271 1.283 0.514 0.080 1.283 0.514 0.041 0.103 0.659 0.958 0.334 + 540.40 12.134 12.193 12.207 1.196 0.586 0.022 1.196 0.586 0.013 0.026 0.701 0.887 0.351 + 540.45 12.099 12.162 12.177 1.245 0.599 -0.014 1.245 0.599 -0.009 -0.018 0.746 0.954 0.373 + 540.50 12.534 12.596 12.617 1.246 0.721 0.422 1.246 0.721 0.304 0.525 0.898 1.125 0.542 + 540.55 12.268 12.334 12.351 1.280 0.647 0.155 1.280 0.647 0.100 0.199 0.829 1.041 0.429 + 540.60 11.992 12.046 12.075 1.144 0.833 -0.121 1.144 0.833 -0.101 -0.138 0.953 1.009 0.484 + 540.65 11.962 12.012 12.026 1.097 0.587 -0.151 1.097 0.587 -0.089 -0.166 0.645 0.786 0.336 + 540.70 12.103 12.137 12.152 0.907 0.608 -0.010 0.907 0.608 -0.006 -0.009 0.552 0.596 0.276 + 540.75 12.268 12.330 12.344 1.235 0.578 0.155 1.235 0.578 0.090 0.192 0.714 0.942 0.372 + 540.80 12.343 12.399 12.417 1.183 0.668 0.230 1.183 0.668 0.154 0.272 0.791 0.950 0.425 + 540.85 12.343 12.397 12.422 1.153 0.782 0.230 1.153 0.782 0.180 0.266 0.901 0.996 0.478 + 540.90 12.275 12.308 12.324 0.902 0.614 0.162 0.902 0.614 0.100 0.146 0.554 0.609 0.291 + 540.95 11.988 12.004 12.008 0.626 0.291 -0.125 0.626 0.291 -0.036 -0.078 0.182 0.246 0.101 + 541.00 11.954 11.960 11.960 0.378 -0.060 -0.159 0.378 -0.060 0.009 -0.060 -0.023 0.086 0.032 + 541.05 11.966 11.969 11.972 0.253 -0.281 -0.147 0.253 -0.281 0.041 -0.037 -0.071 0.082 0.045 + 541.10 11.968 11.975 11.988 0.414 -0.544 -0.145 0.414 -0.544 0.079 -0.060 -0.225 0.244 0.123 + 541.15 11.866 11.875 11.879 0.447 -0.308 -0.246 0.447 -0.308 0.076 -0.110 -0.138 0.178 0.096 + 541.20 11.717 11.729 11.730 0.533 -0.126 -0.396 0.533 -0.126 0.050 -0.211 -0.067 0.228 0.114 + 541.25 11.727 11.750 11.751 0.738 0.083 -0.386 0.738 0.083 -0.032 -0.285 0.061 0.350 0.146 + 541.30 11.523 11.545 11.546 0.699 -0.170 -0.589 0.699 -0.170 0.100 -0.412 -0.119 0.432 0.220 + 541.35 11.406 11.426 11.430 0.684 -0.292 -0.707 0.684 -0.292 0.206 -0.484 -0.199 0.526 0.281 + 541.40 11.170 11.216 11.217 1.021 0.127 -0.943 1.021 0.127 -0.120 -0.963 0.129 0.974 0.489 + 541.45 11.091 11.150 11.151 1.149 0.162 -1.022 1.149 0.162 -0.166 -1.174 0.186 1.195 0.600 + 541.50 11.203 11.237 11.240 0.877 0.257 -0.910 0.877 0.257 -0.234 -0.798 0.226 0.832 0.431 + 541.55 11.299 11.317 11.317 0.640 0.051 -0.814 0.640 0.051 -0.042 -0.521 0.033 0.538 0.262 + 541.60 11.503 11.507 11.508 0.299 -0.159 -0.610 0.299 -0.159 0.097 -0.182 -0.047 0.243 0.106 + 541.65 11.168 11.169 11.169 0.156 -0.038 -0.945 0.156 -0.038 0.036 -0.147 -0.006 0.459 0.076 + 541.70 11.448 11.449 11.449 0.106 0.075 -0.664 0.106 0.075 -0.050 -0.070 0.008 0.229 0.043 + 541.75 11.421 11.422 11.422 -0.145 -0.022 -0.692 -0.145 -0.022 0.015 0.101 0.003 0.250 0.051 + 541.80 11.520 11.520 11.520 0.020 0.050 -0.592 0.020 0.050 -0.030 -0.012 0.001 0.177 0.016 + 541.85 11.514 11.514 11.515 -0.033 -0.101 -0.599 -0.033 -0.101 0.061 0.020 0.003 0.185 0.032 + 541.90 11.282 11.284 11.285 0.234 -0.123 -0.831 0.234 -0.123 0.102 -0.194 -0.029 0.380 0.111 + 541.95 11.226 11.228 11.229 0.210 -0.159 -0.887 0.210 -0.159 0.141 -0.186 -0.033 0.428 0.118 + 542.00 11.731 11.732 11.732 0.143 -0.092 -0.382 0.143 -0.092 0.035 -0.055 -0.013 0.087 0.033 + 542.05 12.159 12.162 12.167 0.292 -0.349 0.046 0.292 -0.349 -0.016 0.013 -0.102 0.104 0.052 + 542.10 12.374 12.375 12.377 0.166 -0.201 0.262 0.166 -0.201 -0.053 0.044 -0.034 0.068 0.038 + 542.15 12.166 12.168 12.171 0.258 -0.248 0.053 0.258 -0.248 -0.013 0.014 -0.064 0.065 0.033 + 542.20 11.756 11.759 11.760 0.246 -0.113 -0.356 0.246 -0.113 0.040 -0.088 -0.028 0.100 0.050 + 542.25 11.642 11.644 11.660 0.220 -0.607 -0.471 0.220 -0.607 0.286 -0.103 -0.133 0.319 0.166 + 542.30 11.632 11.632 11.649 0.093 -0.624 -0.481 0.093 -0.624 0.300 -0.045 -0.058 0.315 0.154 + 542.35 11.761 11.766 11.787 0.341 -0.707 -0.352 0.341 -0.707 0.249 -0.120 -0.241 0.370 0.183 + 542.40 11.689 11.698 11.734 0.437 -0.926 -0.423 0.437 -0.926 0.392 -0.185 -0.404 0.614 0.296 + 542.45 11.646 11.651 11.671 0.352 -0.669 -0.467 0.352 -0.669 0.312 -0.164 -0.236 0.395 0.212 + 542.50 11.675 11.682 11.736 0.386 -1.127 -0.437 0.386 -1.127 0.493 -0.169 -0.435 0.805 0.339 + 542.55 11.686 11.703 11.752 0.624 -1.071 -0.427 0.624 -1.071 0.457 -0.266 -0.669 0.860 0.426 + 542.60 12.041 12.045 12.089 0.301 -1.030 -0.072 0.301 -1.030 0.074 -0.022 -0.310 0.578 0.160 + 542.65 12.071 12.074 12.095 0.272 -0.714 -0.042 0.272 -0.714 0.030 -0.011 -0.194 0.293 0.098 + 542.70 12.232 12.232 12.239 0.030 -0.424 0.119 0.030 -0.424 -0.050 0.004 -0.013 0.097 0.026 + 542.75 12.073 12.076 12.096 -0.251 -0.697 -0.040 -0.251 -0.697 0.028 0.010 0.175 0.275 0.089 + 542.80 12.159 12.164 12.214 -0.369 -1.106 0.046 -0.369 -1.106 -0.051 -0.017 0.408 0.681 0.206 + 542.85 11.977 11.982 12.050 -0.360 -1.280 -0.136 -0.360 -1.280 0.174 0.049 0.460 0.893 0.247 + 542.90 12.135 12.141 12.184 -0.383 -1.032 0.022 -0.383 -1.032 -0.023 -0.008 0.396 0.606 0.198 + 542.95 11.717 11.739 11.758 -0.722 -0.670 -0.396 -0.722 -0.670 0.265 0.286 0.483 0.563 0.310 + 543.00 11.799 11.813 11.829 -0.571 -0.624 -0.314 -0.571 -0.624 0.196 0.179 0.357 0.407 0.222 + 543.05 11.927 11.931 11.942 -0.293 -0.533 -0.186 -0.293 -0.533 0.099 0.054 0.156 0.202 0.096 + 543.10 11.766 11.766 11.784 -0.099 -0.646 -0.347 -0.099 -0.646 0.224 0.034 0.064 0.274 0.118 + 543.15 12.157 12.158 12.169 -0.204 -0.519 0.044 -0.204 -0.519 -0.023 -0.009 0.106 0.157 0.054 + 543.20 12.319 12.320 12.329 -0.102 -0.486 0.206 -0.102 -0.486 -0.100 -0.021 0.050 0.145 0.057 + 543.25 12.121 12.122 12.140 -0.167 -0.661 0.008 -0.167 -0.661 -0.005 -0.001 0.110 0.232 0.055 + 543.30 11.961 11.964 11.974 -0.257 -0.498 -0.152 -0.257 -0.498 0.076 0.039 0.128 0.169 0.077 + 543.35 12.322 12.322 12.337 -0.020 -0.597 0.209 -0.020 -0.597 -0.125 -0.004 0.012 0.200 0.063 + 543.40 12.357 12.358 12.373 0.160 -0.605 0.244 0.160 -0.605 -0.148 0.039 -0.097 0.226 0.090 + 543.45 12.204 12.205 12.208 0.175 -0.269 0.091 0.175 -0.269 -0.024 0.016 -0.047 0.056 0.028 + 543.50 12.059 12.060 12.065 -0.192 -0.328 -0.054 -0.192 -0.328 0.018 0.010 0.063 0.074 0.033 + 543.55 11.982 11.987 11.992 -0.351 -0.351 -0.131 -0.351 -0.351 0.046 0.046 0.123 0.132 0.070 + 543.60 12.130 12.132 12.147 -0.171 -0.602 0.018 -0.171 -0.602 -0.011 -0.003 0.103 0.196 0.052 + 543.65 12.157 12.157 12.165 0.001 -0.446 0.044 0.001 -0.446 -0.020 0.000 -0.001 0.100 0.010 + 543.70 12.307 12.311 12.333 0.328 -0.730 0.194 0.328 -0.730 -0.142 0.064 -0.240 0.340 0.143 + 543.75 12.511 12.521 12.565 0.479 -1.060 0.399 0.479 -1.060 -0.423 0.191 -0.508 0.756 0.344 + 543.80 12.653 12.654 12.709 0.118 -1.184 0.540 0.118 -1.184 -0.639 0.064 -0.139 0.853 0.329 + 543.85 12.705 12.706 12.766 0.177 -1.234 0.592 0.177 -1.234 -0.731 0.105 -0.218 0.952 0.385 + 543.90 12.584 12.585 12.610 0.171 -0.790 0.471 0.171 -0.790 -0.372 0.080 -0.135 0.437 0.202 + 543.95 12.939 12.939 12.962 -0.045 -0.770 0.826 -0.045 -0.770 -0.636 -0.037 0.034 0.639 0.319 + 544.00 12.616 12.617 12.661 0.115 -1.059 0.503 0.115 -1.059 -0.533 0.058 -0.122 0.694 0.275 + 544.05 12.340 12.340 12.353 0.103 -0.573 0.227 0.103 -0.573 -0.130 0.023 -0.059 0.195 0.072 + 544.10 12.436 12.445 12.458 0.457 -0.568 0.323 0.457 -0.568 -0.184 0.148 -0.260 0.318 0.175 + 544.15 12.438 12.452 12.481 0.578 -0.857 0.326 0.578 -0.857 -0.279 0.188 -0.495 0.587 0.299 + 544.20 12.146 12.167 12.197 0.718 -0.860 0.033 0.718 -0.860 -0.028 0.024 -0.617 0.628 0.309 + 544.25 12.072 12.087 12.122 0.613 -0.915 -0.041 0.613 -0.915 0.038 -0.025 -0.560 0.607 0.281 + 544.30 11.684 11.721 11.746 0.931 -0.765 -0.429 0.931 -0.765 0.328 -0.399 -0.712 0.818 0.440 + 544.35 11.657 11.701 11.717 1.014 -0.618 -0.456 1.014 -0.618 0.282 -0.462 -0.626 0.808 0.414 + 544.40 11.910 11.954 11.963 1.016 -0.473 -0.202 1.016 -0.473 0.096 -0.206 -0.481 0.649 0.266 + 544.45 11.820 11.870 11.883 1.091 -0.563 -0.293 1.091 -0.563 0.165 -0.320 -0.614 0.796 0.356 + 544.50 11.795 11.817 11.823 0.713 -0.390 -0.317 0.713 -0.390 0.124 -0.226 -0.278 0.381 0.190 + 544.55 11.881 11.908 11.908 0.805 0.024 -0.232 0.805 0.024 -0.006 -0.186 0.019 0.351 0.094 + 544.60 11.903 11.941 11.942 0.948 -0.121 -0.209 0.948 -0.121 0.025 -0.198 -0.114 0.478 0.115 + 544.65 12.146 12.170 12.179 0.768 -0.463 0.033 0.768 -0.463 -0.015 0.025 -0.356 0.403 0.179 + 544.70 12.325 12.356 12.375 0.887 -0.677 0.212 0.887 -0.677 -0.143 0.188 -0.601 0.645 0.323 + 544.75 12.214 12.241 12.250 0.810 -0.479 0.101 0.810 -0.479 -0.048 0.082 -0.387 0.447 0.199 + 544.80 12.061 12.090 12.100 0.832 -0.493 -0.052 0.832 -0.493 0.025 -0.043 -0.410 0.469 0.207 + 544.85 12.098 12.128 12.130 0.847 -0.225 -0.014 0.847 -0.225 0.003 -0.012 -0.191 0.384 0.096 + 544.90 11.934 11.968 11.968 0.902 0.009 -0.178 0.902 0.009 -0.002 -0.161 0.008 0.422 0.081 + 544.95 11.977 12.005 12.005 0.816 -0.015 -0.135 0.816 -0.015 0.002 -0.110 -0.012 0.342 0.056 + 545.00 12.213 12.227 12.229 0.590 -0.194 0.100 0.590 -0.194 -0.019 0.059 -0.115 0.198 0.065 + 545.05 11.989 12.010 12.025 0.711 -0.606 -0.124 0.711 -0.606 0.075 -0.088 -0.431 0.444 0.223 + 545.10 11.781 11.791 11.805 0.484 -0.571 -0.332 0.484 -0.571 0.189 -0.161 -0.276 0.335 0.186 + 545.15 11.601 11.610 11.624 0.473 -0.567 -0.512 0.473 -0.567 0.290 -0.242 -0.268 0.404 0.232 + 545.20 12.010 12.012 12.047 0.214 -0.918 -0.103 0.214 -0.918 0.095 -0.022 -0.196 0.450 0.109 + 545.25 12.122 12.124 12.146 0.234 -0.728 0.009 0.234 -0.728 -0.007 0.002 -0.171 0.293 0.085 + 545.30 12.122 12.126 12.151 0.276 -0.783 0.010 0.276 -0.783 -0.008 0.003 -0.216 0.345 0.108 + 545.35 12.260 12.267 12.295 0.401 -0.822 0.148 0.401 -0.822 -0.121 0.059 -0.329 0.429 0.178 + 545.40 12.004 12.042 12.062 0.955 -0.695 -0.109 0.955 -0.695 0.076 -0.104 -0.664 0.703 0.338 + 545.45 12.098 12.126 12.149 0.809 -0.747 -0.014 0.809 -0.747 0.011 -0.012 -0.605 0.607 0.302 + 545.50 12.145 12.175 12.198 0.859 -0.740 0.032 0.859 -0.740 -0.024 0.028 -0.636 0.643 0.318 + 545.55 12.166 12.189 12.214 0.749 -0.788 0.053 0.749 -0.788 -0.042 0.040 -0.590 0.592 0.296 + 545.60 12.221 12.223 12.258 0.222 -0.927 0.108 0.222 -0.927 -0.101 0.024 -0.206 0.460 0.115 + 545.65 12.253 12.253 12.308 -0.079 -1.167 0.140 -0.079 -1.167 -0.163 -0.011 0.092 0.694 0.094 + 545.70 12.365 12.378 12.419 0.565 -1.003 0.253 0.565 -1.003 -0.253 0.143 -0.567 0.694 0.319 + 545.75 12.576 12.589 12.628 0.573 -0.993 0.463 0.573 -0.993 -0.460 0.265 -0.568 0.764 0.389 + 545.80 12.515 12.515 12.545 -0.004 -0.867 0.402 -0.004 -0.867 -0.348 -0.002 0.004 0.457 0.174 + 545.85 12.510 12.512 12.538 -0.229 -0.817 0.397 -0.229 -0.817 -0.324 -0.091 0.187 0.438 0.192 + 545.90 12.705 12.712 12.739 -0.394 -0.840 0.593 -0.394 -0.840 -0.498 -0.233 0.331 0.606 0.321 + 545.95 12.876 12.880 12.912 -0.349 -0.904 0.763 -0.349 -0.904 -0.689 -0.266 0.315 0.760 0.402 + 546.00 12.854 12.867 12.894 -0.568 -0.836 0.741 -0.568 -0.836 -0.620 -0.421 0.475 0.786 0.443 + 546.05 12.757 12.770 12.792 -0.579 -0.752 0.644 -0.579 -0.752 -0.484 -0.373 0.435 0.658 0.375 + 546.10 12.795 12.798 12.849 -0.262 -1.150 0.682 -0.262 -1.150 -0.785 -0.179 0.301 0.929 0.430 + 546.15 12.793 12.794 12.827 0.072 -0.922 0.681 0.072 -0.922 -0.628 0.049 -0.067 0.660 0.317 + 546.20 12.839 12.840 12.884 -0.159 -1.056 0.727 -0.159 -1.056 -0.768 -0.116 0.168 0.835 0.397 + 546.25 12.848 12.848 12.878 0.076 -0.879 0.735 0.076 -0.879 -0.646 0.056 -0.067 0.660 0.326 + 546.30 12.969 12.971 13.006 0.197 -0.965 0.856 0.197 -0.965 -0.826 0.169 -0.190 0.851 0.432 + 546.35 13.193 13.194 13.256 0.179 -1.280 1.080 0.179 -1.280 -1.382 0.193 -0.229 1.418 0.707 + 546.40 13.046 13.046 13.098 0.039 -1.159 0.933 0.039 -1.159 -1.082 0.036 -0.045 1.108 0.542 + 546.45 12.923 12.928 12.957 -0.376 -0.857 0.810 -0.376 -0.857 -0.695 -0.305 0.323 0.766 0.412 + 546.50 12.715 12.729 12.740 -0.590 -0.519 0.603 -0.590 -0.519 -0.313 -0.355 0.306 0.490 0.282 + 546.55 12.811 12.822 12.832 -0.527 -0.502 0.698 -0.527 -0.502 -0.350 -0.368 0.265 0.509 0.286 + 546.60 12.956 12.970 12.996 -0.589 -0.823 0.843 -0.589 -0.823 -0.694 -0.497 0.485 0.868 0.491 + 546.65 12.901 12.913 12.919 -0.561 -0.392 0.788 -0.561 -0.392 -0.309 -0.442 0.220 0.544 0.291 + 546.70 12.773 12.786 12.801 -0.569 -0.615 0.660 -0.569 -0.615 -0.406 -0.376 0.350 0.569 0.327 + 546.75 12.621 12.633 12.634 -0.543 -0.196 0.508 -0.543 -0.196 -0.100 -0.276 0.107 0.296 0.156 + 546.80 12.584 12.600 12.604 -0.638 -0.288 0.471 -0.638 -0.288 -0.136 -0.300 0.184 0.356 0.189 + 546.85 12.561 12.572 12.574 -0.521 -0.224 0.448 -0.521 -0.224 -0.101 -0.234 0.117 0.261 0.140 + 546.90 12.541 12.544 12.549 -0.262 -0.367 0.428 -0.262 -0.367 -0.157 -0.112 0.096 0.193 0.108 + 546.95 12.623 12.630 12.633 0.404 -0.292 0.510 0.404 -0.292 -0.149 0.206 -0.118 0.254 0.140 + 547.00 12.566 12.573 12.573 0.398 -0.130 0.454 0.398 -0.130 -0.059 0.180 -0.052 0.190 0.098 + 547.05 12.602 12.618 12.618 0.642 0.040 0.489 0.642 0.040 0.020 0.314 0.026 0.326 0.158 + 547.10 12.524 12.540 12.543 0.622 -0.300 0.412 0.622 -0.300 -0.123 0.256 -0.187 0.323 0.170 + 547.15 12.465 12.476 12.476 0.515 -0.153 0.352 0.515 -0.153 -0.054 0.181 -0.079 0.206 0.102 + 547.20 12.335 12.343 12.343 0.429 0.033 0.222 0.429 0.033 0.007 0.095 0.014 0.117 0.048 + 547.25 12.679 12.691 12.693 0.560 -0.246 0.566 0.560 -0.246 -0.139 0.317 -0.138 0.347 0.186 + 547.30 12.554 12.555 12.557 0.125 -0.221 0.441 0.125 -0.221 -0.097 0.055 -0.027 0.130 0.058 + 547.35 12.427 12.433 12.435 0.390 -0.220 0.314 0.390 -0.220 -0.069 0.123 -0.086 0.150 0.082 + 547.40 12.439 12.459 12.461 0.705 0.249 0.326 0.705 0.249 0.081 0.230 0.176 0.333 0.150 + 547.45 12.518 12.526 12.536 0.438 0.518 0.405 0.438 0.518 0.210 0.177 0.227 0.312 0.178 + 547.50 12.696 12.715 12.732 0.696 0.662 0.583 0.696 0.662 0.386 0.406 0.461 0.631 0.363 + 547.55 12.363 12.384 12.385 0.716 0.109 0.251 0.716 0.109 0.027 0.179 0.078 0.293 0.099 + 547.60 12.528 12.560 12.561 0.899 0.135 0.415 0.899 0.135 0.056 0.373 0.121 0.500 0.198 + 547.65 12.684 12.728 12.730 1.061 -0.196 0.571 1.061 -0.196 -0.112 0.606 -0.208 0.745 0.325 + 547.70 12.892 12.930 12.933 0.989 0.301 0.779 0.989 0.301 0.235 0.770 0.298 0.838 0.429 + 547.75 12.751 12.797 12.805 1.073 0.462 0.639 1.073 0.462 0.295 0.686 0.496 0.887 0.448 + 547.80 12.336 12.389 12.418 1.147 0.854 0.223 1.147 0.854 0.190 0.256 0.980 1.048 0.515 + 547.85 12.294 12.356 12.394 1.238 0.973 0.181 1.238 0.973 0.176 0.224 1.205 1.256 0.619 + 547.90 12.443 12.556 12.575 1.680 0.694 0.330 1.680 0.694 0.229 0.554 1.165 1.706 0.655 + 547.95 12.736 12.860 12.873 1.783 0.570 0.623 1.783 0.570 0.355 1.111 1.017 1.946 0.773 + 548.00 12.567 12.681 12.697 1.698 0.638 0.454 1.698 0.638 0.290 0.771 1.083 1.748 0.680 + 548.05 12.379 12.516 12.537 1.849 0.721 0.266 1.849 0.721 0.192 0.492 1.332 2.004 0.716 + 548.10 12.488 12.610 12.648 1.750 0.970 0.376 1.750 0.970 0.365 0.657 1.698 2.072 0.928 + 548.15 12.498 12.616 12.649 1.719 0.920 0.385 1.719 0.920 0.354 0.662 1.581 1.974 0.875 + 548.20 12.352 12.441 12.501 1.482 1.226 0.240 1.482 1.226 0.294 0.355 1.816 1.878 0.937 + 548.25 12.077 12.123 12.176 1.049 1.141 -0.035 1.049 1.141 -0.040 -0.037 1.197 1.202 0.599 + 548.30 11.895 11.949 12.018 1.138 1.284 -0.218 1.138 1.284 -0.280 -0.248 1.462 1.496 0.755 + 548.35 12.236 12.290 12.326 1.157 0.939 0.123 1.157 0.939 0.116 0.142 1.086 1.118 0.551 + 548.40 12.091 12.143 12.179 1.117 0.934 -0.021 1.117 0.934 -0.020 -0.024 1.044 1.061 0.522 + 548.45 11.905 11.929 11.981 0.752 1.110 -0.207 0.752 1.110 -0.230 -0.156 0.834 0.919 0.439 + 548.50 11.952 11.964 12.011 0.526 1.066 -0.160 0.526 1.066 -0.171 -0.084 0.560 0.719 0.296 + 548.55 11.664 11.672 11.719 0.409 1.058 -0.448 0.409 1.058 -0.474 -0.183 0.432 0.743 0.334 + 548.60 11.778 11.785 11.807 0.402 0.715 -0.334 0.402 0.715 -0.239 -0.134 0.287 0.392 0.199 + 548.65 12.200 12.219 12.238 0.683 0.689 0.087 0.683 0.689 0.060 0.059 0.471 0.475 0.239 + 548.70 12.133 12.153 12.171 0.691 0.661 0.020 0.691 0.661 0.014 0.014 0.457 0.458 0.229 + 548.75 11.931 11.952 11.991 0.719 0.966 -0.182 0.719 0.966 -0.176 -0.131 0.695 0.742 0.364 + 548.80 11.945 11.974 11.989 0.832 0.601 -0.168 0.832 0.601 -0.101 -0.140 0.500 0.541 0.265 + 548.85 12.012 12.038 12.050 0.798 0.539 -0.101 0.798 0.539 -0.055 -0.081 0.430 0.469 0.221 + 548.90 11.615 11.626 11.641 0.500 0.597 -0.497 0.500 0.597 -0.297 -0.249 0.298 0.427 0.244 + 548.95 11.761 11.795 11.800 0.900 0.323 -0.352 0.900 0.323 -0.114 -0.316 0.291 0.519 0.222 + 549.00 11.516 11.532 11.534 0.617 0.191 -0.597 0.617 0.191 -0.114 -0.368 0.118 0.387 0.202 + 549.05 11.779 11.796 11.799 0.643 0.248 -0.334 0.643 0.248 -0.083 -0.215 0.160 0.293 0.140 + 549.10 11.548 11.586 11.597 0.932 0.508 -0.565 0.932 0.508 -0.287 -0.526 0.474 0.723 0.382 + 549.15 11.852 11.877 11.893 0.780 0.610 -0.261 0.780 0.610 -0.159 -0.203 0.476 0.524 0.271 + 549.20 11.904 11.919 11.943 0.593 0.760 -0.209 0.593 0.760 -0.159 -0.124 0.451 0.487 0.247 + 549.25 12.322 12.349 12.383 0.812 0.915 0.209 0.812 0.915 0.191 0.170 0.742 0.770 0.393 + 549.30 12.245 12.267 12.284 0.740 0.644 0.132 0.740 0.644 0.085 0.098 0.476 0.490 0.247 + 549.35 12.196 12.210 12.217 0.587 0.424 0.083 0.587 0.424 0.035 0.049 0.249 0.265 0.128 + 549.40 12.526 12.534 12.542 0.446 0.428 0.414 0.446 0.428 0.177 0.185 0.191 0.277 0.160 + 549.45 12.688 12.701 12.714 0.566 0.588 0.575 0.566 0.588 0.338 0.326 0.333 0.499 0.288 + 549.50 12.687 12.709 12.713 0.739 0.314 0.575 0.739 0.314 0.180 0.425 0.232 0.487 0.258 + 549.55 12.413 12.442 12.443 0.849 0.062 0.301 0.849 0.062 0.019 0.255 0.053 0.408 0.131 + 549.60 12.486 12.528 12.530 1.028 -0.239 0.373 1.028 -0.239 -0.089 0.383 -0.246 0.626 0.232 + 549.65 12.669 12.725 12.730 1.191 -0.366 0.556 1.191 -0.366 -0.203 0.662 -0.435 0.930 0.409 + 549.70 12.349 12.407 12.415 1.194 -0.460 0.236 1.194 -0.460 -0.109 0.282 -0.549 0.846 0.313 + 549.75 12.120 12.149 12.152 0.844 -0.292 0.007 0.844 -0.292 -0.002 0.006 -0.246 0.398 0.123 + 549.80 12.243 12.250 12.273 0.388 -0.759 0.131 0.388 -0.759 -0.099 0.051 -0.294 0.371 0.157 + 549.85 12.567 12.573 12.643 0.388 -1.328 0.454 0.388 -1.328 -0.603 0.176 -0.516 1.061 0.406 + 549.90 12.455 12.469 12.531 0.596 -1.241 0.342 0.596 -1.241 -0.425 0.204 -0.739 1.006 0.438 + 549.95 12.100 12.117 12.168 0.637 -1.114 -0.012 0.637 -1.114 0.014 -0.008 -0.710 0.824 0.355 + 550.00 12.127 12.149 12.202 0.724 -1.136 0.014 0.724 -1.136 -0.016 0.010 -0.822 0.907 0.411 + 550.05 12.486 12.511 12.548 0.799 -0.960 0.373 0.799 -0.960 -0.358 0.298 -0.767 0.849 0.449 + 550.10 12.275 12.299 12.322 0.770 -0.758 0.162 0.770 -0.758 -0.123 0.124 -0.584 0.597 0.305 + 550.15 12.112 12.144 12.189 0.882 -1.042 -0.000 0.882 -1.042 0.000 -0.000 -0.919 0.932 0.459 + 550.20 12.156 12.187 12.207 0.864 -0.705 0.043 0.864 -0.705 -0.030 0.037 -0.609 0.622 0.305 + 550.25 12.414 12.449 12.450 0.930 -0.154 0.301 0.930 -0.154 -0.046 0.280 -0.143 0.490 0.159 + 550.30 12.345 12.389 12.392 1.042 0.275 0.232 1.042 0.275 0.064 0.242 0.286 0.607 0.190 + 550.35 12.280 12.326 12.328 1.062 0.231 0.167 1.062 0.231 0.039 0.178 0.246 0.605 0.153 + 550.40 12.420 12.450 12.455 0.855 0.367 0.307 0.855 0.367 0.113 0.263 0.314 0.480 0.212 + 550.45 12.234 12.264 12.266 0.851 0.236 0.122 0.851 0.236 0.029 0.103 0.200 0.397 0.114 + 550.50 12.179 12.204 12.233 0.769 0.841 0.067 0.769 0.841 0.056 0.051 0.647 0.652 0.326 + 550.55 12.425 12.451 12.468 0.799 0.648 0.313 0.799 0.648 0.203 0.250 0.518 0.579 0.305 + 550.60 12.716 12.752 12.784 0.956 0.908 0.603 0.956 0.908 0.548 0.577 0.868 1.051 0.588 + 550.65 12.120 12.165 12.211 1.049 1.061 0.007 1.049 1.061 0.007 0.007 1.113 1.113 0.557 + 550.70 12.294 12.322 12.386 0.833 1.259 0.181 0.833 1.259 0.228 0.151 1.048 1.156 0.542 + 550.75 12.272 12.319 12.404 1.067 1.450 0.160 1.067 1.450 0.231 0.170 1.547 1.633 0.787 + 550.80 12.282 12.354 12.420 1.336 1.282 0.169 1.336 1.282 0.216 0.225 1.713 1.729 0.871 + 550.85 12.351 12.398 12.470 1.087 1.338 0.238 1.087 1.338 0.318 0.259 1.455 1.515 0.756 + 550.90 12.239 12.292 12.364 1.140 1.328 0.127 1.140 1.328 0.168 0.144 1.514 1.540 0.765 + 550.95 12.101 12.138 12.195 0.944 1.173 -0.012 0.944 1.173 -0.014 -0.011 1.108 1.134 0.554 + 551.00 12.210 12.283 12.323 1.343 0.989 0.097 1.343 0.989 0.096 0.130 1.328 1.396 0.669 + 551.05 12.156 12.239 12.284 1.428 1.042 0.043 1.428 1.042 0.045 0.061 1.488 1.563 0.745 + 551.10 12.339 12.424 12.485 1.449 1.229 0.227 1.449 1.229 0.279 0.328 1.780 1.830 0.916 + 551.15 12.498 12.552 12.576 1.158 0.783 0.385 1.158 0.783 0.302 0.447 0.907 1.052 0.527 + 551.20 12.803 12.875 12.894 1.362 0.706 0.690 1.362 0.706 0.487 0.940 0.961 1.415 0.715 + 551.25 12.844 12.920 12.941 1.402 0.736 0.731 1.402 0.736 0.538 1.025 1.033 1.521 0.776 + 551.30 12.979 13.047 13.083 1.329 0.960 0.867 1.329 0.960 0.832 1.152 1.276 1.720 0.955 + 551.35 12.634 12.707 12.751 1.357 1.060 0.521 1.357 1.060 0.553 0.708 1.439 1.619 0.848 + 551.40 12.215 12.303 12.366 1.475 1.244 0.102 1.475 1.244 0.127 0.150 1.835 1.867 0.923 + 551.45 12.255 12.298 12.342 1.028 1.034 0.142 1.028 1.034 0.147 0.146 1.063 1.073 0.542 + 551.50 11.985 12.032 12.093 1.053 1.218 -0.127 1.053 1.218 -0.155 -0.134 1.282 1.304 0.649 + 551.55 11.935 11.972 12.020 0.946 1.071 -0.178 0.946 1.071 -0.191 -0.169 1.014 1.037 0.523 + 551.60 11.869 11.908 11.931 0.966 0.735 -0.244 0.966 0.735 -0.179 -0.236 0.710 0.767 0.385 + 551.65 12.000 12.016 12.031 0.624 0.599 -0.113 0.624 0.599 -0.068 -0.071 0.374 0.381 0.193 + 551.70 11.998 11.999 12.024 0.155 0.780 -0.115 0.155 0.780 -0.089 -0.018 0.121 0.322 0.076 + 551.75 11.323 11.335 11.372 0.528 0.915 -0.790 0.528 0.915 -0.723 -0.417 0.483 0.870 0.482 + 551.80 11.453 11.459 11.474 0.358 0.579 -0.660 0.358 0.579 -0.382 -0.236 0.207 0.449 0.247 + 551.85 11.683 11.690 11.700 0.408 0.471 -0.430 0.408 0.471 -0.202 -0.175 0.192 0.286 0.165 + 551.90 11.679 11.724 11.741 1.021 0.626 -0.433 1.021 0.626 -0.271 -0.443 0.639 0.811 0.412 + 551.95 11.745 11.793 11.796 1.061 0.285 -0.368 1.061 0.285 -0.105 -0.390 0.302 0.671 0.252 + 552.00 11.860 11.889 11.890 0.838 0.132 -0.253 0.838 0.132 -0.033 -0.212 0.110 0.392 0.121 + 552.05 11.783 11.828 11.828 1.026 0.029 -0.329 1.026 0.029 -0.010 -0.338 0.030 0.582 0.170 + 552.10 11.509 11.540 11.541 0.847 -0.183 -0.604 0.847 -0.183 0.111 -0.512 -0.155 0.558 0.273 + 552.15 11.886 11.931 11.943 1.037 -0.538 -0.227 1.037 -0.538 0.122 -0.235 -0.558 0.708 0.309 + 552.20 11.890 11.938 11.945 1.069 -0.382 -0.222 1.069 -0.382 0.085 -0.238 -0.408 0.669 0.240 + 552.25 12.129 12.169 12.204 0.976 -0.936 0.017 0.976 -0.936 -0.016 0.016 -0.913 0.914 0.457 + 552.30 12.235 12.292 12.298 1.176 -0.407 0.122 1.176 -0.407 -0.050 0.144 -0.479 0.782 0.251 + 552.35 12.153 12.185 12.189 0.888 -0.304 0.040 0.888 -0.304 -0.012 0.035 -0.270 0.441 0.136 + 552.40 12.200 12.250 12.250 1.108 -0.064 0.087 1.108 -0.064 -0.006 0.096 -0.071 0.619 0.060 + 552.45 12.162 12.209 12.219 1.075 -0.494 0.049 1.075 -0.494 -0.024 0.053 -0.531 0.701 0.267 + 552.50 12.479 12.514 12.539 0.940 -0.781 0.366 0.940 -0.781 -0.286 0.344 -0.734 0.814 0.430 + 552.55 12.639 12.660 12.680 0.740 -0.710 0.526 0.740 -0.710 -0.373 0.389 -0.525 0.664 0.376 + 552.60 12.544 12.575 12.583 0.889 -0.454 0.431 0.889 -0.454 -0.196 0.383 -0.404 0.591 0.295 + 552.65 12.627 12.642 12.646 0.615 -0.306 0.514 0.615 -0.306 -0.157 0.316 -0.188 0.368 0.200 + 552.70 12.221 12.238 12.238 0.638 -0.109 0.108 0.638 -0.109 -0.012 0.069 -0.070 0.215 0.049 + 552.75 12.235 12.250 12.250 0.616 -0.007 0.122 0.616 -0.007 -0.001 0.075 -0.004 0.197 0.038 + 552.80 11.680 11.697 11.698 0.624 0.151 -0.432 0.624 0.151 -0.065 -0.270 0.094 0.300 0.147 + 552.85 11.510 11.512 11.517 0.229 0.339 -0.603 0.229 0.339 -0.205 -0.138 0.078 0.266 0.129 + 552.90 11.836 11.840 11.842 0.299 0.204 -0.277 0.299 0.204 -0.056 -0.083 0.061 0.104 0.059 + 552.95 11.691 11.698 11.699 0.398 0.115 -0.422 0.398 0.115 -0.049 -0.168 0.046 0.175 0.090 + 553.00 11.317 11.334 11.338 0.613 -0.284 -0.795 0.613 -0.284 0.226 -0.487 -0.174 0.544 0.282 + 553.05 11.529 11.531 11.562 0.248 -0.844 -0.584 0.248 -0.844 0.493 -0.145 -0.209 0.558 0.277 + 553.10 11.830 11.837 11.844 0.428 -0.404 -0.283 0.428 -0.404 0.115 -0.121 -0.173 0.213 0.120 + 553.15 11.509 11.532 11.532 0.733 -0.019 -0.604 0.733 -0.019 0.011 -0.443 -0.014 0.451 0.222 + 553.20 11.576 11.609 11.609 0.881 -0.043 -0.537 0.881 -0.043 0.023 -0.473 -0.038 0.534 0.238 + 553.25 11.679 11.719 11.719 0.960 -0.060 -0.434 0.960 -0.060 0.026 -0.416 -0.057 0.557 0.211 + 553.30 11.651 11.666 11.667 0.587 -0.191 -0.462 0.587 -0.191 0.088 -0.271 -0.112 0.297 0.153 + 553.35 11.617 11.627 11.634 0.489 -0.399 -0.496 0.489 -0.399 0.198 -0.242 -0.195 0.322 0.184 + 553.40 11.656 11.666 11.671 0.475 -0.343 -0.457 0.475 -0.343 0.157 -0.217 -0.163 0.276 0.157 + 553.45 11.691 11.698 11.704 0.404 -0.372 -0.422 0.404 -0.372 0.157 -0.170 -0.150 0.240 0.138 + 553.50 11.417 11.422 11.436 0.328 -0.564 -0.696 0.328 -0.564 0.393 -0.228 -0.185 0.455 0.245 + 553.55 11.379 11.387 11.425 0.433 -0.932 -0.734 0.433 -0.932 0.684 -0.318 -0.404 0.798 0.428 + 553.60 11.513 11.526 11.542 0.535 -0.611 -0.599 0.535 -0.611 0.366 -0.321 -0.327 0.509 0.293 + 553.65 11.425 11.434 11.443 0.441 -0.464 -0.688 0.441 -0.464 0.319 -0.304 -0.205 0.442 0.243 + 553.70 11.225 11.233 11.233 0.431 0.029 -0.888 0.431 0.029 -0.026 -0.383 0.013 0.488 0.192 + 553.75 11.349 11.369 11.370 0.661 0.160 -0.763 0.661 0.160 -0.122 -0.505 0.106 0.523 0.265 + 553.80 11.416 11.428 11.428 0.512 0.041 -0.697 0.512 0.041 -0.029 -0.357 0.021 0.375 0.179 + 553.85 11.527 11.540 11.544 0.550 -0.324 -0.586 0.550 -0.324 0.190 -0.322 -0.178 0.375 0.207 + 553.90 11.390 11.414 11.415 0.740 -0.166 -0.723 0.740 -0.166 0.120 -0.535 -0.122 0.549 0.281 + 553.95 11.652 11.682 11.682 0.836 -0.035 -0.461 0.836 -0.035 0.016 -0.385 -0.029 0.456 0.193 + 554.00 11.586 11.626 11.627 0.958 -0.161 -0.527 0.958 -0.161 0.085 -0.505 -0.155 0.611 0.267 + 554.05 11.395 11.432 11.433 0.924 -0.051 -0.718 0.924 -0.051 0.037 -0.663 -0.047 0.686 0.333 + 554.10 11.326 11.357 11.358 0.846 -0.159 -0.787 0.846 -0.159 0.125 -0.666 -0.134 0.681 0.346 + 554.15 11.074 11.155 11.159 1.337 -0.309 -1.038 1.337 -0.309 0.321 -1.389 -0.413 1.481 0.742 + 554.20 11.550 11.623 11.646 1.295 -0.735 -0.562 1.295 -0.735 0.414 -0.728 -0.953 1.267 0.634 + 554.25 11.548 11.641 11.671 1.473 -0.841 -0.565 1.473 -0.841 0.475 -0.832 -1.238 1.598 0.783 + 554.30 11.676 11.747 11.792 1.288 -1.024 -0.436 1.288 -1.024 0.447 -0.562 -1.319 1.449 0.751 + 554.35 11.743 11.778 11.827 0.917 -1.076 -0.370 0.917 -1.076 0.398 -0.339 -0.986 1.067 0.558 + 554.40 11.516 11.554 11.614 0.930 -1.187 -0.597 0.930 -1.187 0.708 -0.555 -1.104 1.315 0.712 + 554.45 11.544 11.613 11.668 1.260 -1.136 -0.569 1.260 -1.136 0.646 -0.717 -1.432 1.601 0.863 + 554.50 11.610 11.667 11.750 1.148 -1.398 -0.503 1.148 -1.398 0.703 -0.577 -1.606 1.763 0.923 + 554.55 11.440 11.498 11.597 1.153 -1.510 -0.672 1.153 -1.510 1.015 -0.775 -1.740 2.030 1.079 + 554.60 11.271 11.304 11.384 0.860 -1.345 -0.841 0.860 -1.345 1.132 -0.723 -1.156 1.628 0.886 + 554.65 11.321 11.351 11.443 0.836 -1.445 -0.792 0.836 -1.445 1.145 -0.662 -1.207 1.707 0.895 + 554.70 11.001 11.045 11.113 0.977 -1.230 -1.112 0.977 -1.230 1.367 -1.086 -1.202 1.851 1.060 + 554.75 10.717 10.777 10.866 1.136 -1.390 -1.396 1.136 -1.390 1.940 -1.585 -1.578 2.585 1.480 + 554.80 10.654 10.694 10.780 0.918 -1.360 -1.458 0.918 -1.360 1.984 -1.339 -1.249 2.410 1.350 + 554.85 10.610 10.645 10.683 0.862 -0.904 -1.503 0.862 -0.904 1.358 -1.295 -0.779 1.908 1.016 + 554.90 10.882 10.976 11.020 1.435 -0.979 -1.231 1.435 -0.979 1.206 -1.767 -1.406 2.267 1.280 + 554.95 11.365 11.410 11.465 1.011 -1.123 -0.748 1.011 -1.123 0.840 -0.756 -1.135 1.421 0.801 + 555.00 11.259 11.283 11.370 0.732 -1.401 -0.853 0.732 -1.401 1.195 -0.625 -1.026 1.613 0.847 + 555.05 11.231 11.251 11.357 0.670 -1.551 -0.882 0.670 -1.551 1.368 -0.591 -1.038 1.815 0.908 + 555.10 11.278 11.299 11.373 0.688 -1.295 -0.835 0.688 -1.295 1.082 -0.575 -0.892 1.425 0.758 + 555.15 11.233 11.251 11.330 0.639 -1.333 -0.880 0.639 -1.333 1.173 -0.562 -0.851 1.480 0.777 + 555.20 11.316 11.347 11.471 0.840 -1.678 -0.797 0.840 -1.678 1.337 -0.669 -1.409 2.078 1.027 + 555.25 11.042 11.090 11.156 1.034 -1.211 -1.071 1.034 -1.211 1.297 -1.107 -1.252 1.842 1.058 + 555.30 10.965 11.013 11.106 1.036 -1.430 -1.148 1.036 -1.430 1.642 -1.189 -1.481 2.218 1.255 + 555.35 10.953 11.017 11.125 1.187 -1.541 -1.160 1.187 -1.541 1.787 -1.377 -1.830 2.565 1.452 + 555.40 10.807 10.909 10.976 1.494 -1.204 -1.306 1.494 -1.204 1.573 -1.951 -1.798 2.694 1.542 + 555.45 10.878 10.907 11.036 0.791 -1.681 -1.234 0.791 -1.681 2.075 -0.976 -1.329 2.487 1.325 + 555.50 10.687 10.723 10.933 0.880 -2.132 -1.426 0.880 -2.132 3.041 -1.255 -1.876 3.677 1.893 + 555.55 10.523 10.549 10.670 0.741 -1.603 -1.590 0.741 -1.603 2.548 -1.179 -1.188 2.823 1.524 + 555.60 10.826 10.851 10.970 0.742 -1.609 -1.287 0.742 -1.609 2.070 -0.954 -1.193 2.397 1.287 + 555.65 10.876 10.906 11.035 0.804 -1.684 -1.237 0.804 -1.684 2.082 -0.994 -1.354 2.506 1.338 + 555.70 10.734 10.765 10.925 0.818 -1.861 -1.379 0.818 -1.861 2.565 -1.128 -1.522 3.016 1.594 + 555.75 10.727 10.745 10.911 0.609 -1.900 -1.385 0.609 -1.900 2.632 -0.844 -1.158 2.951 1.499 + 555.80 10.787 10.809 10.924 0.689 -1.577 -1.325 0.689 -1.577 2.091 -0.913 -1.086 2.359 1.263 + 555.85 10.700 10.739 10.836 0.907 -1.451 -1.412 0.907 -1.451 2.050 -1.280 -1.316 2.462 1.376 + 555.90 10.787 10.823 10.888 0.881 -1.187 -1.326 0.881 -1.187 1.573 -1.168 -1.045 1.971 1.110 + 555.95 10.542 10.587 10.657 0.976 -1.225 -1.571 0.976 -1.225 1.926 -1.534 -1.196 2.462 1.369 + 556.00 10.436 10.464 10.541 0.760 -1.270 -1.676 0.760 -1.270 2.129 -1.274 -0.965 2.501 1.331 + 556.05 10.304 10.329 10.386 0.716 -1.085 -1.809 0.716 -1.085 1.963 -1.295 -0.777 2.481 1.238 + 556.10 10.185 10.216 10.260 0.802 -0.944 -1.928 0.802 -0.944 1.821 -1.546 -0.757 2.626 1.253 + 556.15 10.484 10.518 10.570 0.840 -1.050 -1.629 0.840 -1.050 1.710 -1.368 -0.882 2.230 1.181 + 556.20 10.655 10.692 10.756 0.899 -1.166 -1.458 0.899 -1.166 1.700 -1.311 -1.048 2.146 1.194 + 556.25 10.437 10.473 10.543 0.868 -1.212 -1.676 0.868 -1.212 2.031 -1.455 -1.052 2.515 1.355 + 556.30 10.520 10.571 10.702 1.044 -1.670 -1.593 1.044 -1.670 2.661 -1.664 -1.744 3.210 1.795 + 556.35 10.893 10.950 11.080 1.121 -1.692 -1.220 1.121 -1.692 2.065 -1.367 -1.897 2.804 1.560 + 556.40 10.988 11.019 11.131 0.824 -1.578 -1.125 0.824 -1.578 1.775 -0.927 -1.301 2.218 1.194 + 556.45 10.808 10.842 10.931 0.860 -1.394 -1.305 0.860 -1.394 1.819 -1.122 -1.199 2.193 1.225 + 556.50 10.436 10.455 10.526 0.627 -1.216 -1.677 0.627 -1.216 2.039 -1.052 -0.763 2.341 1.209 + 556.55 10.383 10.403 10.453 0.646 -1.025 -1.730 0.646 -1.025 1.773 -1.117 -0.662 2.230 1.099 + 556.60 10.556 10.579 10.637 0.695 -1.107 -1.556 0.695 -1.107 1.723 -1.081 -0.769 2.065 1.087 + 556.65 10.573 10.608 10.656 0.861 -1.011 -1.540 0.861 -1.011 1.557 -1.325 -0.870 2.067 1.111 + 556.70 10.563 10.590 10.661 0.759 -1.224 -1.550 0.759 -1.224 1.896 -1.176 -0.928 2.237 1.208 + 556.75 10.620 10.657 10.728 0.884 -1.229 -1.493 0.884 -1.229 1.835 -1.319 -1.087 2.260 1.254 + 556.80 11.031 11.061 11.105 0.820 -0.986 -1.082 0.820 -0.986 1.067 -0.887 -0.808 1.407 0.803 + 556.85 11.189 11.205 11.241 0.597 -0.895 -0.923 0.597 -0.895 0.827 -0.551 -0.534 1.005 0.564 + 556.90 11.203 11.210 11.233 0.397 -0.724 -0.910 0.397 -0.724 0.659 -0.361 -0.287 0.755 0.402 + 556.95 11.213 11.220 11.244 0.418 -0.730 -0.900 0.418 -0.730 0.657 -0.376 -0.305 0.759 0.408 + 557.00 11.198 11.208 11.238 0.477 -0.811 -0.915 0.477 -0.811 0.742 -0.436 -0.386 0.861 0.471 + 557.05 11.501 11.536 11.547 0.905 -0.496 -0.612 0.905 -0.496 0.303 -0.554 -0.449 0.720 0.387 + 557.10 11.728 11.760 11.763 0.859 -0.286 -0.384 0.859 -0.286 0.110 -0.330 -0.246 0.484 0.213 + 557.15 11.631 11.645 11.646 0.573 -0.073 -0.481 0.573 -0.073 0.035 -0.276 -0.042 0.283 0.141 + 557.20 11.308 11.319 11.322 0.497 -0.282 -0.805 0.497 -0.282 0.227 -0.400 -0.140 0.487 0.241 + 557.25 11.442 11.463 11.481 0.688 -0.639 -0.670 0.688 -0.639 0.429 -0.461 -0.440 0.666 0.384 + 557.30 11.629 11.658 11.678 0.828 -0.675 -0.484 0.828 -0.675 0.327 -0.401 -0.559 0.688 0.381 + 557.35 11.659 11.663 11.666 0.314 -0.259 -0.454 0.314 -0.259 0.118 -0.143 -0.081 0.186 0.101 + 557.40 11.393 11.397 11.405 0.296 -0.444 -0.720 0.296 -0.444 0.320 -0.213 -0.131 0.402 0.203 + 557.45 11.275 11.287 11.301 0.516 -0.568 -0.838 0.516 -0.568 0.475 -0.433 -0.293 0.645 0.353 + 557.50 11.213 11.225 11.254 0.527 -0.812 -0.900 0.527 -0.812 0.731 -0.474 -0.428 0.874 0.485 + 557.55 11.052 11.071 11.091 0.657 -0.657 -1.061 0.657 -0.657 0.697 -0.697 -0.432 0.995 0.538 + 557.60 11.174 11.194 11.219 0.677 -0.743 -0.939 0.677 -0.743 0.698 -0.636 -0.503 0.946 0.535 + 557.65 11.377 11.402 11.411 0.758 -0.456 -0.736 0.758 -0.456 0.336 -0.558 -0.346 0.663 0.369 + 557.70 11.462 11.476 11.490 0.579 -0.557 -0.651 0.579 -0.557 0.363 -0.377 -0.323 0.535 0.307 + 557.75 11.446 11.453 11.483 0.399 -0.833 -0.667 0.399 -0.833 0.556 -0.266 -0.333 0.649 0.350 + 557.80 11.240 11.250 11.291 0.464 -0.967 -0.873 0.464 -0.967 0.844 -0.405 -0.449 0.956 0.519 + 557.85 11.202 11.205 11.252 0.231 -1.029 -0.910 0.231 -1.029 0.937 -0.211 -0.238 0.970 0.494 + 557.90 11.000 11.008 11.033 0.432 -0.742 -1.113 0.432 -0.742 0.826 -0.481 -0.320 0.988 0.504 + 557.95 10.957 10.957 11.026 -0.000 -1.227 -1.156 -0.000 -1.227 1.418 0.000 0.000 1.421 0.709 + 558.00 10.474 10.474 10.545 -0.014 -1.227 -1.639 -0.014 -1.227 2.010 0.022 0.017 2.096 1.005 + 558.05 10.642 10.642 10.736 -0.054 -1.413 -1.471 -0.054 -1.413 2.078 0.080 0.077 2.081 1.040 + 558.10 10.641 10.642 10.739 -0.140 -1.442 -1.472 -0.140 -1.442 2.123 0.206 0.202 2.133 1.071 + 558.15 10.489 10.489 10.589 -0.067 -1.449 -1.624 -0.067 -1.449 2.353 0.109 0.097 2.371 1.179 + 558.20 10.749 10.751 10.828 0.196 -1.290 -1.364 0.196 -1.290 1.759 -0.268 -0.253 1.781 0.899 + 558.25 10.603 10.607 10.718 0.267 -1.543 -1.510 0.267 -1.543 2.329 -0.403 -0.411 2.365 1.199 + 558.30 10.768 10.780 10.963 0.504 -1.996 -1.344 0.504 -1.996 2.683 -0.677 -1.005 3.022 1.472 + 558.35 10.645 10.652 10.822 0.378 -1.912 -1.468 0.378 -1.912 2.807 -0.554 -0.722 2.977 1.475 + 558.40 10.758 10.759 10.941 0.116 -1.989 -1.355 0.116 -1.989 2.694 -0.157 -0.230 2.902 1.354 + 558.45 10.727 10.728 10.914 -0.146 -2.005 -1.386 -0.146 -2.005 2.779 0.203 0.293 2.981 1.401 + 558.50 10.902 10.904 11.106 -0.212 -2.110 -1.211 -0.212 -2.110 2.556 0.257 0.448 2.982 1.304 + 558.55 10.917 10.917 11.032 -0.052 -1.586 -1.196 -0.052 -1.586 1.896 0.062 0.082 1.974 0.950 + 558.60 10.989 10.991 11.083 -0.189 -1.425 -1.124 -0.189 -1.425 1.602 0.212 0.270 1.665 0.819 + 558.65 10.976 10.981 11.069 -0.317 -1.397 -1.136 -0.317 -1.397 1.588 0.360 0.442 1.672 0.843 + 558.70 10.793 10.796 10.852 -0.250 -1.097 -1.320 -0.250 -1.097 1.448 0.331 0.275 1.504 0.755 + 558.75 10.729 10.729 10.765 -0.092 -0.871 -1.384 -0.092 -0.871 1.205 0.127 0.080 1.341 0.607 + 558.80 10.619 10.619 10.673 0.080 -1.070 -1.494 0.080 -1.070 1.599 -0.119 -0.085 1.692 0.803 + 558.85 10.875 10.875 10.918 -0.005 -0.970 -1.238 -0.005 -0.970 1.201 0.007 0.005 1.237 0.601 + 558.90 11.027 11.028 11.064 0.155 -0.881 -1.085 0.155 -0.881 0.956 -0.169 -0.137 0.989 0.490 + 558.95 11.145 11.149 11.194 0.281 -1.003 -0.967 0.281 -1.003 0.970 -0.272 -0.282 1.010 0.523 + 559.00 11.176 11.182 11.207 0.376 -0.748 -0.937 0.376 -0.748 0.701 -0.352 -0.281 0.789 0.417 + 559.05 11.238 11.263 11.277 0.741 -0.567 -0.874 0.741 -0.567 0.496 -0.648 -0.421 0.818 0.459 + 559.10 11.209 11.238 11.254 0.803 -0.602 -0.904 0.803 -0.602 0.544 -0.725 -0.483 0.912 0.514 + 559.15 11.259 11.279 11.291 0.661 -0.527 -0.854 0.661 -0.527 0.450 -0.564 -0.348 0.722 0.401 + 559.20 11.280 11.304 11.309 0.729 -0.332 -0.832 0.729 -0.332 0.276 -0.607 -0.242 0.667 0.355 + 559.25 11.058 11.085 11.088 0.784 -0.255 -1.055 0.784 -0.255 0.269 -0.828 -0.200 0.897 0.446 + 559.30 10.826 10.827 10.827 0.168 -0.091 -1.287 0.168 -0.091 0.117 -0.217 -0.015 0.847 0.123 + 559.35 10.899 10.900 10.900 0.086 0.014 -1.214 0.086 0.014 -0.017 -0.104 0.001 0.740 0.053 + 559.40 10.724 10.730 10.734 0.375 0.289 -1.389 0.375 0.289 -0.401 -0.521 0.108 1.077 0.333 + 559.45 10.775 10.809 10.810 0.863 -0.069 -1.338 0.863 -0.069 0.093 -1.154 -0.060 1.270 0.580 + 559.50 10.277 10.290 10.297 0.502 -0.392 -1.835 0.502 -0.392 0.719 -0.922 -0.197 1.887 0.593 + 559.55 10.256 10.269 10.272 0.531 -0.254 -1.857 0.531 -0.254 0.472 -0.986 -0.135 1.898 0.551 + 559.60 10.469 10.479 10.482 0.449 -0.253 -1.644 0.449 -0.253 0.417 -0.738 -0.114 1.484 0.427 + 559.65 10.365 10.372 10.373 0.355 0.185 -1.747 0.355 0.185 -0.324 -0.620 0.066 1.607 0.351 + 559.70 10.258 10.276 10.276 0.606 0.055 -1.855 0.606 0.055 -0.102 -1.124 0.033 1.905 0.565 + 559.75 10.234 10.258 10.261 0.696 -0.252 -1.878 0.696 -0.252 0.474 -1.308 -0.176 2.038 0.701 + 559.80 10.114 10.120 10.121 0.371 -0.097 -1.999 0.371 -0.097 0.194 -0.743 -0.036 2.072 0.384 + 559.85 10.065 10.086 10.092 0.648 0.340 -2.047 0.648 0.340 -0.696 -1.327 0.220 2.364 0.757 + 559.90 10.289 10.317 10.323 0.748 0.375 -1.823 0.748 0.375 -0.683 -1.364 0.280 2.012 0.776 + 559.95 10.527 10.549 10.554 0.691 0.305 -1.586 0.691 0.305 -0.483 -1.096 0.211 1.543 0.608 + 560.00 10.618 10.652 10.658 0.850 0.361 -1.495 0.850 0.361 -0.539 -1.270 0.307 1.543 0.707 + 560.05 10.416 10.423 10.430 0.368 0.392 -1.696 0.368 0.392 -0.665 -0.625 0.144 1.584 0.462 + 560.10 10.411 10.412 10.413 0.126 -0.097 -1.701 0.126 -0.097 0.165 -0.214 -0.012 1.460 0.135 + 560.15 10.536 10.539 10.539 0.238 -0.055 -1.577 0.238 -0.055 0.086 -0.375 -0.013 1.273 0.193 + 560.20 10.753 10.754 10.754 -0.135 0.026 -1.360 -0.135 0.026 -0.036 0.184 -0.004 0.934 0.094 + 560.25 10.585 10.587 10.590 0.207 0.260 -1.528 0.207 0.260 -0.397 -0.317 0.054 1.223 0.255 + 560.30 10.442 10.443 10.444 0.149 0.108 -1.671 0.149 0.108 -0.181 -0.248 0.016 1.413 0.154 + 560.35 10.441 10.442 10.442 -0.125 -0.084 -1.672 -0.125 -0.084 0.140 0.209 0.010 1.409 0.126 + 560.40 10.462 10.463 10.466 -0.100 -0.250 -1.650 -0.100 -0.250 0.412 0.164 0.025 1.398 0.222 + 560.45 10.354 10.354 10.355 -0.047 -0.130 -1.759 -0.047 -0.130 0.229 0.083 0.006 1.556 0.122 + 560.50 10.518 10.521 10.524 0.247 0.242 -1.595 0.247 0.242 -0.385 -0.394 0.060 1.332 0.277 + 560.55 10.564 10.577 10.580 0.519 0.242 -1.549 0.519 0.242 -0.375 -0.804 0.126 1.363 0.448 + 560.60 10.923 10.943 10.953 0.661 -0.460 -1.189 0.661 -0.460 0.547 -0.787 -0.304 1.032 0.503 + 560.65 11.163 11.185 11.193 0.704 -0.427 -0.950 0.704 -0.427 0.406 -0.668 -0.301 0.790 0.419 + 560.70 11.079 11.085 11.097 0.368 -0.508 -1.034 0.368 -0.508 0.525 -0.381 -0.187 0.731 0.337 + 560.75 11.319 11.325 11.341 0.350 -0.608 -0.794 0.350 -0.608 0.483 -0.278 -0.213 0.561 0.298 + 560.80 11.410 11.411 11.424 0.140 -0.546 -0.702 0.140 -0.546 0.383 -0.098 -0.076 0.405 0.202 + 560.85 11.036 11.038 11.046 -0.205 -0.431 -1.077 -0.205 -0.431 0.465 0.221 0.089 0.694 0.261 + 560.90 10.831 10.831 10.839 -0.111 -0.409 -1.282 -0.111 -0.409 0.524 0.142 0.045 0.911 0.273 + 560.95 10.838 10.840 10.850 -0.214 -0.474 -1.275 -0.214 -0.474 0.604 0.273 0.102 0.948 0.335 + 561.00 11.365 11.366 11.375 -0.155 -0.439 -0.748 -0.155 -0.439 0.329 0.116 0.068 0.388 0.178 + 561.05 11.297 11.297 11.303 -0.024 -0.351 -0.815 -0.024 -0.351 0.287 0.020 0.008 0.395 0.144 + 561.10 11.070 11.073 11.074 0.272 -0.145 -1.043 0.272 -0.145 0.152 -0.283 -0.039 0.591 0.162 + 561.15 10.936 10.939 10.940 0.288 0.113 -1.177 0.288 0.113 -0.133 -0.339 0.033 0.741 0.183 + 561.20 10.842 10.845 10.845 0.239 -0.093 -1.270 0.239 -0.093 0.119 -0.303 -0.022 0.840 0.163 + 561.25 11.076 11.084 11.084 0.429 -0.027 -1.037 0.429 -0.027 0.028 -0.445 -0.012 0.630 0.223 + 561.30 11.227 11.228 11.228 0.125 0.061 -0.885 0.125 0.061 -0.054 -0.111 0.008 0.402 0.062 + 561.35 11.289 11.289 11.291 0.034 -0.206 -0.824 0.034 -0.206 0.170 -0.028 -0.007 0.361 0.086 + 561.40 11.471 11.474 11.488 -0.257 -0.562 -0.641 -0.257 -0.562 0.361 0.165 0.145 0.397 0.211 + 561.45 11.335 11.337 11.345 -0.211 -0.440 -0.778 -0.211 -0.440 0.343 0.164 0.093 0.422 0.195 + 561.50 11.322 11.328 11.343 -0.366 -0.587 -0.791 -0.366 -0.587 0.464 0.289 0.215 0.552 0.294 + 561.55 11.262 11.283 11.303 -0.697 -0.670 -0.851 -0.697 -0.670 0.571 0.594 0.467 0.830 0.473 + 561.60 11.540 11.559 11.579 -0.657 -0.674 -0.573 -0.657 -0.674 0.386 0.376 0.443 0.607 0.349 + 561.65 11.387 11.399 11.418 -0.532 -0.650 -0.726 -0.532 -0.650 0.472 0.387 0.346 0.617 0.351 + 561.70 11.588 11.610 11.635 -0.716 -0.761 -0.525 -0.716 -0.761 0.399 0.376 0.545 0.683 0.386 + 561.75 11.429 11.436 11.444 -0.410 -0.431 -0.684 -0.410 -0.431 0.295 0.281 0.177 0.411 0.222 + 561.80 11.271 11.272 11.274 -0.138 -0.225 -0.842 -0.138 -0.225 0.189 0.116 0.031 0.389 0.112 + 561.85 11.029 11.034 11.034 -0.338 -0.024 -1.084 -0.338 -0.024 0.026 0.366 0.008 0.645 0.184 + 561.90 11.017 11.025 11.025 -0.428 -0.042 -1.096 -0.428 -0.042 0.046 0.469 0.018 0.693 0.236 + 561.95 10.990 10.998 10.998 -0.416 -0.087 -1.123 -0.416 -0.087 0.098 0.467 0.036 0.721 0.239 + 562.00 10.860 10.871 10.871 -0.503 0.009 -1.253 -0.503 0.009 -0.011 0.631 -0.005 0.912 0.316 + 562.05 10.923 10.944 10.961 -0.679 -0.620 -1.190 -0.679 -0.620 0.738 0.808 0.421 1.131 0.586 + 562.10 10.596 10.615 10.623 -0.637 -0.399 -1.517 -0.637 -0.399 0.605 0.966 0.254 1.433 0.584 + 562.15 10.559 10.576 10.589 -0.590 -0.534 -1.553 -0.590 -0.534 0.830 0.916 0.315 1.523 0.638 + 562.20 10.784 10.786 10.792 -0.216 -0.346 -1.329 -0.216 -0.346 0.460 0.287 0.075 0.966 0.274 + 562.25 10.549 10.549 10.550 0.042 -0.112 -1.564 0.042 -0.112 0.175 -0.066 -0.005 1.230 0.093 + 562.30 10.349 10.349 10.349 0.051 0.002 -1.764 0.051 0.002 -0.004 -0.090 0.000 1.557 0.045 + 562.35 10.358 10.360 10.361 -0.199 0.099 -1.755 -0.199 0.099 -0.173 0.348 -0.020 1.564 0.195 + 562.40 10.526 10.533 10.533 -0.388 0.083 -1.587 -0.388 0.083 -0.131 0.615 -0.032 1.338 0.315 + 562.45 10.531 10.533 10.544 -0.191 0.471 -1.581 -0.191 0.471 -0.744 0.302 -0.090 1.379 0.404 + 562.50 10.650 10.655 10.670 -0.313 0.563 -1.462 -0.313 0.563 -0.823 0.458 -0.176 1.277 0.479 + 562.55 10.729 10.730 10.746 0.096 0.585 -1.384 0.096 0.585 -0.810 -0.132 0.056 1.133 0.411 + 562.60 10.487 10.499 10.504 0.517 0.302 -1.626 0.517 0.302 -0.491 -0.841 0.156 1.502 0.493 + 562.65 10.593 10.601 10.612 0.416 0.479 -1.520 0.416 0.479 -0.728 -0.633 0.199 1.356 0.492 + 562.70 10.695 10.697 10.737 0.215 0.925 -1.418 0.215 0.925 -1.312 -0.305 0.199 1.456 0.681 + 562.75 10.992 10.997 11.020 -0.336 0.709 -1.121 -0.336 0.709 -0.795 0.377 -0.238 0.936 0.456 + 562.80 10.797 10.809 10.858 -0.517 1.026 -1.316 -0.517 1.026 -1.350 0.680 -0.530 1.525 0.801 + 562.85 11.097 11.118 11.152 -0.676 0.865 -1.015 -0.676 0.865 -0.878 0.686 -0.585 1.118 0.629 + 562.90 11.128 11.136 11.197 -0.419 1.168 -0.985 -0.419 1.168 -1.150 0.412 -0.489 1.255 0.658 + 562.95 10.905 10.912 10.974 -0.389 1.160 -1.207 -0.389 1.160 -1.401 0.469 -0.451 1.478 0.772 + 563.00 10.787 10.795 10.854 -0.398 1.128 -1.325 -0.398 1.128 -1.495 0.527 -0.449 1.594 0.824 + 563.05 10.750 10.758 10.831 -0.421 1.254 -1.363 -0.421 1.254 -1.709 0.574 -0.528 1.803 0.939 + 563.10 10.771 10.782 10.832 -0.486 1.043 -1.342 -0.486 1.043 -1.399 0.652 -0.507 1.562 0.812 + 563.15 10.613 10.614 10.659 -0.149 0.977 -1.500 -0.149 0.977 -1.465 0.224 -0.146 1.613 0.745 + 563.20 10.764 10.764 10.800 0.053 0.878 -1.349 0.053 0.878 -1.184 -0.071 0.046 1.297 0.594 + 563.25 10.588 10.595 10.624 0.384 0.785 -1.525 0.384 0.785 -1.196 -0.586 0.302 1.544 0.683 + 563.30 10.532 10.538 10.554 0.343 0.595 -1.581 0.343 0.595 -0.941 -0.543 0.205 1.486 0.553 + 563.35 10.518 10.518 10.549 0.002 0.813 -1.595 0.002 0.813 -1.296 -0.003 0.002 1.602 0.648 + 563.40 10.674 10.674 10.704 -0.058 0.800 -1.439 -0.058 0.800 -1.152 0.084 -0.047 1.357 0.578 + 563.45 10.531 10.532 10.564 -0.153 0.820 -1.582 -0.153 0.820 -1.297 0.243 -0.126 1.600 0.663 + 563.50 10.281 10.286 10.294 -0.340 0.397 -1.832 -0.340 0.397 -0.727 0.622 -0.135 1.815 0.483 + 563.55 10.339 10.353 10.364 -0.540 0.482 -1.774 -0.540 0.482 -0.855 0.958 -0.260 1.835 0.655 + 563.60 10.391 10.398 10.401 -0.362 0.265 -1.721 -0.362 0.265 -0.457 0.624 -0.096 1.582 0.390 + 563.65 10.459 10.464 10.464 -0.314 0.138 -1.654 -0.314 0.138 -0.228 0.519 -0.043 1.426 0.284 + 563.70 10.617 10.628 10.628 -0.469 -0.016 -1.496 -0.469 -0.016 0.024 0.702 0.008 1.229 0.351 + 563.75 10.710 10.752 10.753 -0.948 0.177 -1.403 -0.948 0.177 -0.249 1.330 -0.168 1.449 0.682 + 563.80 10.636 10.655 10.664 -0.643 0.427 -1.477 -0.643 0.427 -0.631 0.950 -0.275 1.389 0.587 + 563.85 10.864 10.880 10.890 -0.581 0.471 -1.249 -0.581 0.471 -0.588 0.726 -0.274 1.059 0.487 + 563.90 10.751 10.758 10.766 -0.383 0.425 -1.362 -0.383 0.425 -0.579 0.522 -0.163 1.091 0.398 + 563.95 10.538 10.543 10.562 -0.298 0.643 -1.574 -0.298 0.643 -1.012 0.469 -0.191 1.490 0.566 + 564.00 10.647 10.661 10.685 -0.552 0.716 -1.466 -0.552 0.716 -1.050 0.809 -0.395 1.483 0.692 + 564.05 10.890 10.903 10.935 -0.527 0.838 -1.223 -0.527 0.838 -1.024 0.645 -0.442 1.237 0.644 + 564.10 10.745 10.762 10.778 -0.613 0.593 -1.368 -0.613 0.593 -0.811 0.839 -0.363 1.300 0.611 + 564.15 10.634 10.646 10.677 -0.503 0.820 -1.479 -0.503 0.820 -1.213 0.744 -0.413 1.557 0.741 + 564.20 10.674 10.697 10.725 -0.700 0.775 -1.439 -0.700 0.775 -1.116 1.008 -0.543 1.581 0.799 + 564.25 10.623 10.635 10.674 -0.512 0.910 -1.490 -0.512 0.910 -1.356 0.762 -0.466 1.654 0.812 + 564.30 10.846 10.875 10.895 -0.786 0.670 -1.267 -0.786 0.670 -0.849 0.995 -0.527 1.335 0.705 + 564.35 10.728 10.778 10.795 -1.034 0.605 -1.384 -1.034 0.605 -0.838 1.431 -0.625 1.675 0.886 + 564.40 10.982 11.038 11.041 -1.112 0.268 -1.131 -1.112 0.268 -0.303 1.258 -0.298 1.294 0.664 + 564.45 10.841 10.886 10.893 -0.994 0.380 -1.272 -0.994 0.380 -0.483 1.265 -0.377 1.375 0.703 + 564.50 10.621 10.673 10.680 -1.045 0.388 -1.491 -1.045 0.388 -0.578 1.558 -0.405 1.733 0.855 + 564.55 10.758 10.813 10.829 -1.092 0.586 -1.355 -1.092 0.586 -0.794 1.480 -0.640 1.686 0.899 + 564.60 11.077 11.112 11.112 -0.882 0.049 -1.036 -0.882 0.049 -0.051 0.914 -0.043 0.927 0.458 + 564.65 11.096 11.117 11.117 -0.680 -0.028 -1.017 -0.680 -0.028 0.028 0.692 0.019 0.749 0.346 + 564.70 11.248 11.257 11.257 -0.439 0.034 -0.864 -0.439 0.034 -0.030 0.379 -0.015 0.471 0.190 + 564.75 11.122 11.136 11.137 -0.551 -0.167 -0.990 -0.551 -0.167 0.165 0.545 0.092 0.656 0.289 + 564.80 10.758 10.775 10.776 -0.619 0.118 -1.355 -0.619 0.118 -0.159 0.839 -0.073 1.117 0.429 + 564.85 10.819 10.831 10.833 -0.498 0.205 -1.294 -0.498 0.205 -0.265 0.645 -0.102 0.982 0.352 + 564.90 10.971 10.980 10.986 -0.435 0.379 -1.142 -0.435 0.379 -0.433 0.496 -0.165 0.818 0.339 + 564.95 10.998 11.005 11.012 -0.382 0.384 -1.114 -0.382 0.384 -0.428 0.426 -0.147 0.768 0.311 + 565.00 10.456 10.461 10.503 -0.298 0.941 -1.656 -0.298 0.941 -1.558 0.493 -0.280 1.858 0.829 + 565.05 10.266 10.277 10.338 -0.480 1.125 -1.847 -0.480 1.125 -2.078 0.886 -0.540 2.454 1.162 + 565.10 10.051 10.061 10.143 -0.460 1.283 -2.062 -0.460 1.283 -2.646 0.949 -0.591 3.055 1.436 + 565.15 10.568 10.569 10.647 -0.121 1.286 -1.544 -0.121 1.286 -1.986 0.187 -0.156 2.027 1.001 + 565.20 10.073 10.073 10.145 0.053 1.208 -2.040 0.053 1.208 -2.464 -0.107 0.063 2.812 1.234 + 565.25 9.977 9.993 10.105 -0.571 1.497 -2.136 -0.571 1.497 -3.198 1.220 -0.856 3.565 1.764 + 565.30 10.143 10.147 10.318 -0.270 1.873 -1.970 -0.270 1.873 -3.689 0.531 -0.505 3.730 1.880 + 565.35 10.115 10.123 10.325 -0.380 2.034 -1.997 -0.380 2.034 -4.063 0.759 -0.773 4.136 2.103 + 565.40 10.009 10.014 10.178 -0.320 1.817 -2.103 -0.320 1.817 -3.823 0.672 -0.581 3.915 1.962 + 565.45 10.132 10.135 10.297 -0.249 1.821 -1.981 -0.249 1.821 -3.608 0.493 -0.453 3.652 1.835 + 565.50 10.166 10.168 10.344 -0.174 1.904 -1.947 -0.174 1.904 -3.706 0.338 -0.331 3.722 1.868 + 565.55 10.208 10.209 10.386 -0.174 1.904 -1.905 -0.174 1.904 -3.628 0.331 -0.331 3.643 1.829 + 565.60 10.458 10.467 10.606 -0.419 1.712 -1.654 -0.419 1.712 -2.833 0.693 -0.717 2.922 1.502 + 565.65 10.378 10.390 10.497 -0.493 1.497 -1.735 -0.493 1.497 -2.596 0.855 -0.737 2.746 1.415 + 565.70 10.422 10.455 10.573 -0.834 1.573 -1.691 -0.834 1.573 -2.660 1.410 -1.312 3.015 1.642 + 565.75 10.444 10.460 10.521 -0.568 1.137 -1.669 -0.568 1.137 -1.898 0.947 -0.646 2.200 1.109 + 565.80 10.403 10.405 10.450 -0.201 0.975 -1.710 -0.201 0.975 -1.667 0.344 -0.196 1.957 0.857 + 565.85 10.322 10.324 10.398 -0.198 1.239 -1.790 -0.198 1.239 -2.219 0.354 -0.245 2.390 1.130 + 565.90 10.216 10.217 10.329 -0.144 1.514 -1.896 -0.144 1.514 -2.870 0.272 -0.217 2.954 1.446 + 565.95 10.121 10.121 10.250 -0.037 1.621 -1.992 -0.037 1.621 -3.229 0.074 -0.060 3.299 1.615 + 566.00 10.368 10.370 10.435 -0.173 1.165 -1.745 -0.173 1.165 -2.033 0.302 -0.201 2.215 1.032 + 566.05 10.085 10.086 10.157 -0.175 1.198 -2.028 -0.175 1.198 -2.430 0.354 -0.209 2.789 1.232 + 566.10 10.064 10.065 10.105 -0.149 0.898 -2.049 -0.149 0.898 -1.840 0.305 -0.134 2.514 0.935 + 566.15 10.338 10.344 10.371 -0.341 0.749 -1.775 -0.341 0.749 -1.330 0.605 -0.255 1.914 0.741 + 566.20 10.398 10.405 10.416 -0.404 0.464 -1.715 -0.404 0.464 -0.796 0.694 -0.188 1.661 0.536 + 566.25 10.178 10.187 10.199 -0.436 0.486 -1.935 -0.436 0.486 -0.940 0.843 -0.212 2.085 0.640 + 566.30 10.304 10.327 10.330 -0.688 0.255 -1.809 -0.688 0.255 -0.461 1.244 -0.175 1.905 0.669 + 566.35 10.127 10.136 10.139 -0.420 0.255 -1.986 -0.420 0.255 -0.505 0.835 -0.107 2.092 0.491 + 566.40 10.216 10.232 10.233 -0.571 0.100 -1.896 -0.571 0.100 -0.190 1.084 -0.057 1.966 0.551 + 566.45 10.473 10.498 10.499 -0.726 0.051 -1.640 -0.726 0.051 -0.084 1.191 -0.037 1.609 0.597 + 566.50 10.561 10.570 10.570 -0.436 -0.006 -1.552 -0.436 -0.006 0.009 0.677 0.003 1.299 0.338 + 566.55 10.822 10.836 10.839 -0.551 0.241 -1.290 -0.551 0.241 -0.311 0.711 -0.133 1.013 0.394 + 566.60 10.738 10.773 10.780 -0.869 0.375 -1.374 -0.869 0.375 -0.516 1.194 -0.326 1.392 0.670 + 566.65 11.087 11.119 11.126 -0.844 0.393 -1.026 -0.844 0.393 -0.403 0.866 -0.332 0.960 0.506 + 566.70 11.271 11.294 11.297 -0.730 0.253 -0.842 -0.730 0.253 -0.213 0.615 -0.184 0.653 0.338 + 566.75 11.241 11.249 11.259 -0.425 0.475 -0.872 -0.425 0.475 -0.414 0.371 -0.202 0.583 0.295 + 566.80 11.029 11.053 11.065 -0.722 0.508 -1.083 -0.722 0.508 -0.550 0.782 -0.366 0.976 0.512 + 566.85 10.770 10.799 10.823 -0.786 0.723 -1.343 -0.786 0.723 -0.971 1.055 -0.568 1.472 0.771 + 566.90 10.612 10.649 10.680 -0.881 0.816 -1.501 -0.881 0.816 -1.224 1.322 -0.719 1.847 0.970 + 566.95 10.740 10.797 10.824 -1.111 0.758 -1.373 -1.111 0.758 -1.040 1.525 -0.842 1.847 1.014 + 567.00 10.874 10.922 10.944 -1.017 0.699 -1.238 -1.017 0.699 -0.866 1.260 -0.711 1.529 0.843 + 567.05 11.150 11.225 11.234 -1.302 0.453 -0.963 -1.302 0.453 -0.437 1.254 -0.590 1.414 0.727 + 567.10 11.247 11.369 11.380 -1.660 0.498 -0.866 -1.660 0.498 -0.431 1.437 -0.827 1.877 0.857 + 567.15 11.013 11.166 11.187 -1.840 0.682 -1.099 -1.840 0.682 -0.750 2.023 -1.255 2.530 1.248 + 567.20 10.767 10.892 10.911 -1.651 0.630 -1.346 -1.651 0.630 -0.848 2.222 -1.039 2.467 1.298 + 567.25 11.194 11.334 11.346 -1.773 0.523 -0.919 -1.773 0.523 -0.481 1.629 -0.928 2.131 0.968 + 567.30 11.155 11.293 11.309 -1.762 0.600 -0.958 -1.762 0.600 -0.575 1.689 -1.057 2.192 1.037 + 567.35 11.304 11.527 11.535 -2.258 0.425 -0.809 -2.258 0.425 -0.344 1.826 -0.961 2.967 1.046 + 567.40 10.997 11.206 11.206 -2.153 0.107 -1.116 -2.153 0.107 -0.120 2.401 -0.231 2.945 1.208 + 567.45 10.993 11.189 11.223 -2.086 0.879 -1.120 -2.086 0.879 -0.984 2.336 -1.833 3.189 1.564 + 567.50 11.107 11.311 11.323 -2.138 0.533 -1.006 -2.138 0.533 -0.537 2.151 -1.141 2.934 1.247 + 567.55 11.296 11.551 11.577 -2.413 0.776 -0.817 -2.413 0.776 -0.634 1.972 -1.872 3.547 1.396 + 567.60 11.244 11.449 11.466 -2.155 0.635 -0.869 -2.155 0.635 -0.552 1.872 -1.368 2.901 1.192 + 567.65 11.574 11.735 11.735 -1.934 0.047 -0.539 -1.934 0.047 -0.025 1.042 -0.091 2.017 0.523 + 567.70 11.619 11.758 11.759 -1.808 -0.145 -0.494 -1.808 -0.145 0.072 0.893 0.262 1.767 0.467 + 567.75 11.325 11.456 11.457 -1.729 -0.134 -0.788 -1.729 -0.134 0.106 1.362 0.232 1.814 0.693 + 567.80 11.096 11.229 11.229 -1.725 0.033 -1.017 -1.725 0.033 -0.034 1.754 -0.057 2.005 0.878 + 567.85 11.146 11.269 11.271 -1.656 0.215 -0.966 -1.656 0.215 -0.208 1.601 -0.357 1.861 0.826 + 567.90 11.040 11.151 11.160 -1.565 0.462 -1.073 -1.565 0.462 -0.495 1.678 -0.722 1.906 0.947 + 567.95 10.928 11.002 11.013 -1.269 0.502 -1.184 -1.269 0.502 -0.595 1.503 -0.637 1.633 0.869 + 568.00 10.920 11.020 11.020 -1.484 0.057 -1.193 -1.484 0.057 -0.068 1.770 -0.085 1.814 0.887 + 568.05 10.922 11.004 11.004 -1.337 0.082 -1.191 -1.337 0.082 -0.098 1.593 -0.110 1.607 0.800 + 568.10 10.674 10.795 10.796 -1.613 0.173 -1.439 -1.613 0.173 -0.249 2.322 -0.279 2.352 1.176 + 568.15 10.627 10.739 10.739 -1.547 0.048 -1.486 -1.547 0.048 -0.071 2.299 -0.074 2.302 1.151 + 568.20 10.624 10.756 10.756 -1.677 -0.119 -1.489 -1.677 -0.119 0.176 2.497 0.199 2.522 1.256 + 568.25 10.710 10.786 10.790 -1.283 0.281 -1.403 -1.283 0.281 -0.394 1.800 -0.360 1.847 0.939 + 568.30 11.061 11.141 11.149 -1.335 0.402 -1.052 -1.335 0.402 -0.423 1.404 -0.537 1.526 0.781 + 568.35 11.109 11.229 11.266 -1.637 0.911 -1.004 -1.637 0.911 -0.915 1.643 -1.491 2.258 1.200 + 568.40 11.003 11.153 11.171 -1.825 0.631 -1.110 -1.825 0.631 -0.701 2.026 -1.152 2.481 1.217 + 568.45 11.091 11.278 11.287 -2.044 0.463 -1.022 -2.044 0.463 -0.473 2.089 -0.947 2.719 1.171 + 568.50 10.979 11.182 11.188 -2.122 0.364 -1.134 -2.122 0.364 -0.412 2.406 -0.771 2.961 1.280 + 568.55 10.881 11.076 11.076 -2.070 0.022 -1.232 -2.070 0.022 -0.027 2.550 -0.045 2.902 1.275 + 568.60 11.039 11.201 11.202 -1.899 -0.046 -1.074 -1.899 -0.046 0.049 2.039 0.087 2.381 1.021 + 568.65 11.313 11.442 11.442 -1.711 0.072 -0.799 -1.711 0.072 -0.057 1.368 -0.123 1.786 0.687 + 568.70 11.149 11.278 11.279 -1.704 0.099 -0.964 -1.704 0.099 -0.096 1.642 -0.169 1.920 0.827 + 568.75 10.863 10.948 10.950 -1.360 0.243 -1.250 -1.360 0.243 -0.304 1.700 -0.331 1.736 0.879 + 568.80 10.816 10.910 10.915 -1.429 0.329 -1.297 -1.429 0.329 -0.427 1.853 -0.470 1.916 0.980 + 568.85 11.031 11.106 11.107 -1.289 0.170 -1.082 -1.289 0.170 -0.184 1.395 -0.220 1.431 0.712 + 568.90 11.102 11.201 11.201 -1.485 -0.035 -1.011 -1.485 -0.035 0.035 1.501 0.052 1.614 0.751 + 568.95 11.101 11.194 11.198 -1.443 0.287 -1.012 -1.443 0.287 -0.291 1.460 -0.415 1.594 0.773 + 569.00 10.864 10.938 10.958 -1.270 0.663 -1.248 -1.270 0.663 -0.827 1.586 -0.842 1.806 0.988 + 569.05 10.965 11.033 11.098 -1.223 1.202 -1.148 -1.223 1.202 -1.379 1.403 -1.469 2.128 1.228 + 569.10 11.129 11.226 11.258 -1.471 0.846 -0.984 -1.471 0.846 -0.832 1.448 -1.245 1.924 1.041 + 569.15 11.072 11.187 11.221 -1.597 0.870 -1.040 -1.597 0.870 -0.906 1.661 -1.390 2.195 1.174 + 569.20 11.295 11.372 11.422 -1.321 1.069 -0.818 -1.321 1.069 -0.874 1.081 -1.412 1.778 0.991 + 569.25 11.230 11.290 11.345 -1.161 1.114 -0.882 -1.161 1.114 -0.983 1.025 -1.294 1.684 0.961 + 569.30 11.088 11.151 11.205 -1.183 1.090 -1.024 -1.183 1.090 -1.117 1.212 -1.290 1.819 1.046 + 569.35 11.179 11.232 11.273 -1.089 0.962 -0.934 -1.089 0.962 -0.898 1.017 -1.047 1.491 0.857 + 569.40 11.231 11.265 11.318 -0.877 1.094 -0.882 -0.877 1.094 -0.965 0.773 -0.959 1.372 0.782 + 569.45 11.361 11.408 11.440 -1.031 0.857 -0.751 -1.031 0.857 -0.644 0.775 -0.884 1.182 0.670 + 569.50 11.453 11.480 11.532 -0.784 1.092 -0.660 -0.784 1.092 -0.720 0.517 -0.856 1.121 0.616 + 569.55 11.648 11.669 11.719 -0.694 1.082 -0.465 -0.694 1.082 -0.503 0.323 -0.751 0.934 0.480 + 569.60 11.571 11.583 11.601 -0.532 0.646 -0.542 -0.532 0.646 -0.350 0.288 -0.343 0.497 0.284 + 569.65 11.634 11.641 11.695 -0.385 1.125 -0.479 -0.385 1.125 -0.539 0.184 -0.433 0.822 0.358 + 569.70 11.734 11.752 11.812 -0.661 1.189 -0.379 -0.661 1.189 -0.451 0.251 -0.786 0.998 0.470 + 569.75 11.915 11.937 12.022 -0.724 1.425 -0.198 -0.724 1.425 -0.282 0.143 -1.032 1.297 0.540 + 569.80 11.531 11.564 11.608 -0.870 1.006 -0.582 -0.870 1.006 -0.585 0.506 -0.875 1.054 0.584 + 569.85 11.480 11.506 11.550 -0.782 0.998 -0.633 -0.782 0.998 -0.632 0.495 -0.780 1.004 0.560 + 569.90 11.844 11.870 11.909 -0.786 0.959 -0.269 -0.786 0.959 -0.258 0.211 -0.754 0.805 0.412 + 569.95 11.523 11.541 11.593 -0.659 1.094 -0.590 -0.659 1.094 -0.646 0.389 -0.721 0.990 0.522 + 570.00 11.356 11.395 11.492 -0.945 1.486 -0.757 -0.945 1.486 -1.124 0.715 -1.404 1.836 0.968 + 570.05 11.144 11.195 11.285 -1.068 1.424 -0.969 -1.068 1.424 -1.379 1.035 -1.520 2.053 1.149 + 570.10 11.032 11.064 11.118 -0.841 1.102 -1.081 -0.841 1.102 -1.191 0.909 -0.927 1.545 0.881 + 570.15 10.858 10.897 10.946 -0.922 1.024 -1.254 -0.922 1.024 -1.285 1.157 -0.945 1.736 0.985 + 570.20 10.992 11.018 11.065 -0.764 1.011 -1.121 -0.764 1.011 -1.134 0.856 -0.773 1.431 0.809 + 570.25 10.738 10.768 10.776 -0.808 0.414 -1.375 -0.808 0.414 -0.570 1.111 -0.335 1.358 0.646 + 570.30 10.359 10.390 10.401 -0.812 0.477 -1.754 -0.812 0.477 -0.836 1.424 -0.387 1.982 0.848 + 570.35 10.392 10.417 10.421 -0.719 0.315 -1.721 -0.719 0.315 -0.542 1.238 -0.227 1.789 0.685 + 570.40 10.297 10.316 10.319 -0.617 0.268 -1.816 -0.617 0.268 -0.487 1.120 -0.165 1.874 0.616 + 570.45 10.336 10.336 10.340 -0.052 0.272 -1.777 -0.052 0.272 -0.484 0.093 -0.014 1.617 0.246 + 570.50 10.527 10.527 10.556 0.013 0.784 -1.586 0.013 0.784 -1.243 -0.021 0.010 1.565 0.622 + 570.55 10.721 10.721 10.728 0.035 0.392 -1.392 0.035 0.392 -0.546 -0.049 0.014 1.046 0.274 + 570.60 10.727 10.729 10.736 0.226 0.379 -1.386 0.226 0.379 -0.525 -0.313 0.085 1.057 0.308 + 570.65 10.774 10.797 10.800 0.705 0.256 -1.339 0.705 0.256 -0.343 -0.945 0.181 1.178 0.510 + 570.70 11.142 11.147 11.148 0.339 0.175 -0.971 0.339 0.175 -0.170 -0.329 0.059 0.544 0.187 + 570.75 11.266 11.276 11.278 0.475 0.201 -0.846 0.475 0.201 -0.170 -0.402 0.095 0.491 0.223 + 570.80 11.387 11.395 11.402 0.437 0.413 -0.726 0.437 0.413 -0.300 -0.317 0.180 0.444 0.236 + 570.85 11.168 11.174 11.202 0.371 0.791 -0.945 0.371 0.791 -0.748 -0.351 0.294 0.828 0.438 + 570.90 11.237 11.252 11.263 0.562 0.510 -0.875 0.562 0.510 -0.447 -0.492 0.286 0.671 0.362 + 570.95 11.086 11.093 11.097 0.392 0.307 -1.027 0.392 0.307 -0.316 -0.402 0.120 0.652 0.263 + 571.00 10.952 10.966 10.966 0.557 0.000 -1.161 0.557 0.000 -0.000 -0.647 0.000 0.829 0.323 + 571.05 10.828 10.849 10.851 0.684 0.203 -1.285 0.684 0.203 -0.261 -0.878 0.139 1.080 0.463 + 571.10 11.124 11.156 11.159 0.850 0.250 -0.989 0.850 0.250 -0.247 -0.841 0.212 0.881 0.451 + 571.15 10.936 10.940 10.942 0.300 0.230 -1.177 0.300 0.230 -0.270 -0.353 0.069 0.764 0.225 + 571.20 10.700 10.700 10.701 -0.077 0.144 -1.413 -0.077 0.144 -0.203 0.108 -0.011 1.011 0.115 + 571.25 10.389 10.389 10.389 0.087 0.008 -1.724 0.087 0.008 -0.013 -0.149 0.001 1.489 0.075 + 571.30 10.565 10.571 10.574 0.369 -0.230 -1.548 0.369 -0.230 0.356 -0.571 -0.085 1.292 0.339 + 571.35 10.449 10.453 10.453 0.254 -0.082 -1.663 0.254 -0.082 0.136 -0.422 -0.021 1.419 0.222 + 571.40 10.466 10.487 10.487 0.658 -0.088 -1.647 0.658 -0.088 0.145 -1.084 -0.058 1.576 0.547 + 571.45 10.446 10.477 10.479 0.807 0.173 -1.667 0.807 0.173 -0.288 -1.344 0.139 1.729 0.691 + 571.50 10.538 10.588 10.588 1.030 0.071 -1.575 1.030 0.071 -0.112 -1.623 0.073 1.774 0.814 + 571.55 10.455 10.515 10.527 1.122 0.504 -1.658 1.122 0.504 -0.836 -1.860 0.566 2.130 1.058 + 571.60 10.561 10.624 10.645 1.161 0.663 -1.552 1.161 0.663 -1.029 -1.802 0.770 2.098 1.107 + 571.65 10.909 10.951 11.003 0.950 1.073 -1.203 0.950 1.073 -1.291 -1.144 1.020 1.751 1.002 + 571.70 11.018 11.049 11.063 0.829 0.556 -1.095 0.829 0.556 -0.609 -0.908 0.462 1.098 0.594 + 571.75 10.950 11.019 11.030 1.233 0.486 -1.163 1.233 0.486 -0.565 -1.434 0.599 1.555 0.827 + 571.80 11.193 11.251 11.253 1.148 0.210 -0.920 1.148 0.210 -0.193 -1.056 0.241 1.104 0.550 + 571.85 11.251 11.279 11.280 0.800 0.146 -0.862 0.800 0.146 -0.126 -0.689 0.117 0.702 0.355 + 571.90 11.110 11.127 11.127 0.602 0.096 -1.002 0.602 0.096 -0.096 -0.604 0.058 0.688 0.307 + 571.95 11.309 11.354 11.356 1.014 -0.162 -0.804 1.014 -0.162 0.130 -0.815 -0.164 0.850 0.421 + 572.00 11.004 11.060 11.062 1.111 -0.215 -1.109 1.111 -0.215 0.238 -1.231 -0.238 1.254 0.638 + 572.05 10.890 10.940 10.942 1.040 -0.235 -1.222 1.040 -0.235 0.287 -1.271 -0.244 1.315 0.663 + 572.10 11.223 11.258 11.263 0.883 -0.329 -0.889 0.883 -0.329 0.293 -0.785 -0.290 0.839 0.443 + 572.15 11.198 11.247 11.251 1.051 -0.306 -0.915 1.051 -0.306 0.280 -0.961 -0.322 1.017 0.526 + 572.20 10.878 10.933 10.939 1.099 -0.339 -1.235 1.099 -0.339 0.419 -1.357 -0.373 1.424 0.734 + 572.25 10.716 10.788 10.792 1.242 -0.316 -1.397 1.242 -0.316 0.442 -1.735 -0.393 1.797 0.917 + 572.30 10.782 10.860 10.860 1.303 -0.067 -1.331 1.303 -0.067 0.089 -1.735 -0.088 1.737 0.870 + 572.35 10.725 10.794 10.794 1.214 0.022 -1.387 1.214 0.022 -0.031 -1.684 0.027 1.699 0.842 + 572.40 10.749 10.790 10.790 0.936 0.011 -1.363 0.936 0.011 -0.015 -1.277 0.011 1.368 0.638 + 572.45 10.814 10.837 10.840 0.704 0.249 -1.299 0.704 0.249 -0.323 -0.914 0.175 1.122 0.493 + 572.50 10.965 10.990 10.994 0.754 0.277 -1.148 0.754 0.277 -0.318 -0.866 0.209 0.982 0.473 + 572.55 10.922 10.954 10.955 0.846 0.094 -1.191 0.846 0.094 -0.112 -1.008 0.080 1.072 0.508 + 572.60 10.773 10.853 10.853 1.316 0.016 -1.340 1.316 0.016 -0.021 -1.762 0.021 1.763 0.881 + 572.65 10.794 10.947 10.947 1.825 -0.095 -1.319 1.825 -0.095 0.125 -2.406 -0.173 2.539 1.208 + 572.70 10.819 10.974 10.974 1.839 -0.007 -1.294 1.839 -0.007 0.009 -2.380 -0.013 2.529 1.190 + 572.75 11.253 11.390 11.390 1.761 -0.074 -0.860 1.761 -0.074 0.063 -1.514 -0.130 1.923 0.761 + 572.80 11.401 11.545 11.551 1.819 -0.361 -0.712 1.819 -0.361 0.257 -1.294 -0.656 1.972 0.737 + 572.85 11.385 11.520 11.532 1.759 -0.530 -0.728 1.759 -0.530 0.386 -1.281 -0.933 1.953 0.816 + 572.90 11.524 11.624 11.639 1.517 -0.589 -0.588 1.517 -0.589 0.346 -0.892 -0.893 1.497 0.655 + 572.95 11.403 11.548 11.556 1.826 -0.424 -0.710 1.826 -0.424 0.301 -1.296 -0.775 2.010 0.770 + 573.00 11.540 11.624 11.652 1.393 -0.807 -0.573 1.393 -0.807 0.462 -0.798 -1.124 1.460 0.727 + 573.05 11.468 11.511 11.525 0.996 -0.564 -0.645 0.996 -0.564 0.364 -0.642 -0.561 0.863 0.464 + 573.10 11.608 11.645 11.667 0.930 -0.710 -0.505 0.930 -0.710 0.358 -0.469 -0.661 0.812 0.443 + 573.15 11.401 11.439 11.477 0.932 -0.942 -0.712 0.932 -0.942 0.671 -0.664 -0.878 1.131 0.644 + 573.20 11.634 11.668 11.695 0.883 -0.805 -0.479 0.883 -0.805 0.385 -0.422 -0.710 0.828 0.456 + 573.25 11.327 11.392 11.398 1.222 -0.371 -0.786 1.222 -0.371 0.291 -0.960 -0.453 1.124 0.550 + 573.30 11.399 11.442 11.446 0.996 -0.282 -0.714 0.996 -0.282 0.201 -0.711 -0.281 0.790 0.395 + 573.35 11.700 11.734 11.739 0.893 -0.339 -0.413 0.893 -0.339 0.140 -0.369 -0.303 0.542 0.249 + 573.40 11.420 11.429 11.429 0.443 -0.016 -0.692 0.443 -0.016 0.011 -0.307 -0.007 0.338 0.153 + 573.45 11.612 11.632 11.637 0.686 0.348 -0.501 0.686 0.348 -0.174 -0.343 0.238 0.421 0.226 + 573.50 11.822 11.841 11.841 0.665 -0.072 -0.291 0.665 -0.072 0.021 -0.193 -0.048 0.266 0.100 + 573.55 12.029 12.052 12.054 0.740 0.201 -0.084 0.740 0.201 -0.017 -0.062 0.149 0.298 0.081 + 573.60 11.703 11.736 11.748 0.880 0.526 -0.410 0.880 0.526 -0.215 -0.361 0.462 0.609 0.312 + 573.65 11.633 11.646 11.653 0.547 0.397 -0.480 0.547 0.397 -0.191 -0.263 0.217 0.344 0.195 + 573.70 11.456 11.467 11.471 0.505 0.300 -0.657 0.505 0.300 -0.197 -0.332 0.151 0.388 0.207 + 573.75 11.455 11.475 11.476 0.664 -0.136 -0.657 0.664 -0.136 0.090 -0.437 -0.091 0.446 0.227 + 573.80 11.516 11.543 11.549 0.784 -0.364 -0.596 0.784 -0.364 0.217 -0.468 -0.286 0.552 0.295 + 573.85 11.371 11.423 11.426 1.083 -0.267 -0.742 1.083 -0.267 0.198 -0.803 -0.289 0.897 0.438 + 573.90 11.646 11.710 11.711 1.223 -0.103 -0.467 1.223 -0.103 0.048 -0.571 -0.125 0.862 0.293 + 573.95 11.726 11.778 11.778 1.105 -0.089 -0.387 1.105 -0.089 0.034 -0.427 -0.098 0.689 0.220 + 574.00 11.727 11.790 11.790 1.212 0.088 -0.386 1.212 0.088 -0.034 -0.467 0.106 0.812 0.240 + 574.05 11.603 11.642 11.642 0.950 -0.042 -0.510 0.950 -0.042 0.021 -0.484 -0.040 0.582 0.243 + 574.10 11.851 11.893 11.893 0.999 0.040 -0.262 0.999 0.040 -0.011 -0.261 0.040 0.534 0.132 + 574.15 12.011 12.057 12.058 1.055 -0.136 -0.102 1.055 -0.136 0.014 -0.108 -0.143 0.571 0.090 + 574.20 11.916 11.970 11.977 1.138 -0.408 -0.197 1.138 -0.408 0.080 -0.224 -0.464 0.750 0.261 + 574.25 12.004 12.070 12.071 1.260 0.116 -0.109 1.260 0.116 -0.013 -0.137 0.147 0.806 0.100 + 574.30 12.130 12.217 12.220 1.457 -0.253 0.017 1.457 -0.253 -0.004 0.025 -0.369 1.094 0.185 + 574.35 11.970 12.025 12.032 1.151 -0.395 -0.143 1.151 -0.395 0.056 -0.164 -0.455 0.751 0.243 + 574.40 12.180 12.263 12.271 1.430 -0.416 0.067 1.430 -0.416 -0.028 0.096 -0.595 1.112 0.302 + 574.45 12.264 12.341 12.342 1.377 -0.105 0.151 1.377 -0.105 -0.016 0.208 -0.144 0.965 0.127 + 574.50 12.349 12.382 12.382 0.907 0.024 0.236 0.907 0.024 0.006 0.214 0.022 0.440 0.108 + 574.55 12.242 12.303 12.303 1.231 0.003 0.129 1.231 0.003 0.000 0.158 0.004 0.766 0.079 + 574.60 12.097 12.197 12.200 1.556 0.287 -0.016 1.556 0.287 -0.005 -0.025 0.447 1.251 0.224 + 574.65 12.254 12.335 12.336 1.406 0.178 0.141 1.406 0.178 0.025 0.199 0.250 1.014 0.160 + 574.70 12.278 12.355 12.355 1.371 -0.003 0.166 1.371 -0.003 -0.000 0.227 -0.004 0.954 0.114 + 574.75 12.552 12.639 12.639 1.479 -0.038 0.440 1.479 -0.038 -0.017 0.650 -0.056 1.191 0.326 + 574.80 12.555 12.605 12.609 1.122 -0.322 0.442 1.122 -0.322 -0.142 0.496 -0.362 0.779 0.315 + 574.85 12.799 12.818 12.827 0.692 -0.476 0.686 0.692 -0.476 -0.327 0.475 -0.330 0.589 0.332 + 574.90 12.659 12.680 12.689 0.728 -0.476 0.546 0.728 -0.476 -0.260 0.398 -0.347 0.528 0.294 + 574.95 12.205 12.216 12.219 0.524 -0.250 0.092 0.524 -0.250 -0.023 0.048 -0.131 0.173 0.071 + 575.00 12.083 12.096 12.096 0.572 -0.018 -0.030 0.572 -0.018 0.001 -0.017 -0.010 0.164 0.010 + 575.05 11.883 11.903 11.906 0.680 0.297 -0.230 0.680 0.297 -0.068 -0.156 0.202 0.302 0.132 + 575.10 11.870 11.883 11.883 0.572 0.009 -0.243 0.572 0.009 -0.002 -0.139 0.005 0.193 0.070 + 575.15 11.941 11.954 11.955 0.567 0.111 -0.172 0.567 0.111 -0.019 -0.097 0.063 0.181 0.059 + 575.20 12.071 12.071 12.071 0.065 0.057 -0.042 0.065 0.057 -0.002 -0.003 0.004 0.005 0.003 + 575.25 12.209 12.210 12.211 0.158 -0.179 0.096 0.158 -0.179 -0.017 0.015 -0.028 0.033 0.018 + 575.30 12.206 12.211 12.211 0.348 -0.008 0.093 0.348 -0.008 -0.001 0.032 -0.003 0.065 0.016 + 575.35 12.165 12.176 12.182 0.531 -0.379 0.052 0.531 -0.379 -0.020 0.027 -0.201 0.214 0.102 + 575.40 12.363 12.368 12.401 0.351 -0.916 0.250 0.351 -0.916 -0.229 0.088 -0.321 0.512 0.202 + 575.45 12.448 12.448 12.475 -0.132 -0.811 0.335 -0.132 -0.811 -0.272 -0.044 0.107 0.394 0.148 + 575.50 12.513 12.514 12.546 0.096 -0.896 0.401 0.096 -0.896 -0.359 0.039 -0.086 0.487 0.186 + 575.55 12.285 12.286 12.344 0.137 -1.196 0.172 0.137 -1.196 -0.206 0.024 -0.164 0.739 0.132 + 575.60 12.408 12.409 12.493 0.169 -1.444 0.295 0.169 -1.444 -0.426 0.050 -0.244 1.100 0.247 + 575.65 12.635 12.636 12.770 -0.144 -1.846 0.522 -0.144 -1.846 -0.964 -0.075 0.265 1.851 0.501 + 575.70 12.659 12.661 12.812 -0.216 -1.964 0.546 -0.216 -1.964 -1.073 -0.118 0.424 2.101 0.580 + 575.75 12.793 12.793 12.921 -0.132 -1.808 0.680 -0.132 -1.808 -1.230 -0.090 0.238 1.875 0.628 + 575.80 12.836 12.837 12.979 -0.155 -1.914 0.723 -0.155 -1.914 -1.385 -0.112 0.296 2.106 0.710 + 575.85 12.360 12.361 12.445 -0.136 -1.444 0.247 -0.136 -1.444 -0.357 -0.034 0.196 1.082 0.204 + 575.90 12.204 12.204 12.262 -0.067 -1.189 0.091 -0.067 -1.189 -0.108 -0.006 0.079 0.714 0.067 + 575.95 12.173 12.176 12.224 -0.262 -1.083 0.061 -0.262 -1.083 -0.066 -0.016 0.284 0.622 0.146 + 576.00 12.541 12.541 12.588 0.030 -1.085 0.428 0.030 -1.085 -0.464 0.013 -0.032 0.681 0.233 + 576.05 12.434 12.437 12.480 0.269 -1.033 0.322 0.269 -1.033 -0.332 0.086 -0.278 0.621 0.221 + 576.10 12.417 12.421 12.458 0.306 -0.963 0.304 0.306 -0.963 -0.293 0.093 -0.294 0.556 0.213 + 576.15 12.573 12.576 12.608 0.279 -0.887 0.461 0.279 -0.887 -0.409 0.129 -0.248 0.538 0.247 + 576.20 12.528 12.542 12.551 0.578 -0.484 0.416 0.578 -0.484 -0.201 0.240 -0.279 0.370 0.210 + 576.25 12.395 12.397 12.408 0.238 -0.520 0.282 0.238 -0.520 -0.146 0.067 -0.124 0.203 0.102 + 576.30 12.333 12.336 12.352 0.262 -0.643 0.220 0.262 -0.643 -0.141 0.058 -0.168 0.265 0.114 + 576.35 12.488 12.501 12.506 0.553 -0.372 0.375 0.553 -0.372 -0.140 0.208 -0.206 0.293 0.162 + 576.40 12.199 12.206 12.206 0.386 -0.018 0.087 0.386 -0.018 -0.002 0.033 -0.007 0.079 0.017 + 576.45 12.324 12.342 12.342 0.670 0.023 0.211 0.670 0.023 0.005 0.141 0.015 0.247 0.071 + 576.50 12.639 12.681 12.687 1.024 -0.401 0.526 1.024 -0.401 -0.211 0.539 -0.410 0.743 0.355 + 576.55 12.515 12.555 12.557 0.998 -0.250 0.402 0.998 -0.250 -0.101 0.401 -0.250 0.610 0.242 + 576.60 12.428 12.446 12.447 0.678 -0.116 0.315 0.678 -0.116 -0.037 0.214 -0.079 0.286 0.115 + 576.65 12.630 12.644 12.644 0.578 0.025 0.518 0.578 0.025 0.013 0.299 0.014 0.301 0.150 + 576.70 12.598 12.605 12.608 0.418 0.245 0.486 0.418 0.245 0.119 0.203 0.102 0.235 0.128 + 576.75 12.653 12.659 12.661 0.399 0.207 0.540 0.399 0.207 0.112 0.216 0.083 0.247 0.128 + 576.80 12.633 12.636 12.641 0.281 0.359 0.520 0.281 0.359 0.187 0.146 0.101 0.239 0.129 + 576.85 12.650 12.651 12.652 0.168 0.158 0.537 0.168 0.158 0.085 0.090 0.027 0.171 0.063 + 576.90 12.502 12.503 12.505 0.148 0.240 0.389 0.148 0.240 0.093 0.058 0.035 0.115 0.058 + 576.95 12.288 12.292 12.293 0.312 0.209 0.175 0.312 0.209 0.037 0.055 0.065 0.086 0.046 + 577.00 12.062 12.065 12.068 0.265 0.259 -0.051 0.265 0.259 -0.013 -0.014 0.069 0.070 0.036 + 577.05 12.083 12.083 12.086 0.004 0.271 -0.030 0.004 0.271 -0.008 -0.000 0.001 0.037 0.004 + 577.10 11.936 11.938 11.941 -0.181 0.266 -0.176 -0.181 0.266 -0.047 0.032 -0.048 0.067 0.037 + 577.15 12.063 12.066 12.066 0.276 0.050 -0.050 0.276 0.050 -0.002 -0.014 0.014 0.041 0.010 + 577.20 11.946 11.949 11.951 0.269 0.214 -0.167 0.269 0.214 -0.036 -0.045 0.058 0.073 0.041 + 577.25 12.279 12.279 12.283 -0.003 0.313 0.167 -0.003 0.313 0.052 -0.000 -0.001 0.063 0.026 + 577.30 12.412 12.412 12.412 -0.015 0.046 0.299 -0.015 0.046 0.014 -0.005 -0.001 0.046 0.007 + 577.35 12.235 12.236 12.236 -0.110 -0.003 0.122 -0.110 -0.003 -0.000 -0.013 0.000 0.014 0.007 + 577.40 12.237 12.237 12.241 0.015 0.304 0.124 0.015 0.304 0.038 0.002 0.005 0.054 0.019 + 577.45 12.668 12.673 12.678 0.369 0.335 0.555 0.369 0.335 0.186 0.205 0.123 0.278 0.151 + 577.50 12.817 12.825 12.825 0.452 -0.072 0.704 0.452 -0.072 -0.051 0.318 -0.033 0.352 0.162 + 577.55 12.696 12.702 12.703 0.397 0.200 0.583 0.397 0.200 0.117 0.231 0.079 0.269 0.135 + 577.60 12.599 12.601 12.601 0.187 -0.133 0.486 0.187 -0.133 -0.065 0.091 -0.025 0.145 0.057 + 577.65 12.517 12.527 12.528 0.502 -0.156 0.404 0.502 -0.156 -0.063 0.203 -0.078 0.220 0.113 + 577.70 12.319 12.319 12.320 0.034 0.174 0.206 0.034 0.174 0.036 0.007 0.006 0.037 0.019 + 577.75 12.333 12.333 12.334 0.117 -0.164 0.220 0.117 -0.164 -0.036 0.026 -0.019 0.044 0.024 + 577.80 12.635 12.648 12.648 0.582 -0.112 0.522 0.582 -0.112 -0.058 0.304 -0.065 0.312 0.158 + 577.85 12.668 12.677 12.677 0.475 0.102 0.555 0.475 0.102 0.057 0.264 0.049 0.272 0.137 + 577.90 12.883 12.886 12.888 0.267 0.260 0.770 0.267 0.260 0.200 0.206 0.069 0.366 0.148 + 577.95 12.872 12.872 12.873 0.057 -0.036 0.760 0.057 -0.036 -0.027 0.043 -0.002 0.291 0.026 + 578.00 12.971 12.971 12.971 -0.085 0.026 0.858 -0.085 0.026 0.022 -0.073 -0.002 0.372 0.038 + 578.05 12.922 12.926 12.926 0.295 0.035 0.810 0.295 0.035 0.029 0.239 0.010 0.372 0.120 + 578.10 12.845 12.849 12.850 0.327 0.184 0.732 0.327 0.184 0.135 0.239 0.060 0.338 0.141 + 578.15 12.747 12.756 12.782 0.469 0.816 0.635 0.469 0.816 0.518 0.298 0.383 0.645 0.355 + 578.20 12.559 12.569 12.593 0.501 0.778 0.447 0.501 0.778 0.347 0.224 0.390 0.528 0.284 + 578.25 11.916 11.921 11.951 0.342 0.850 -0.197 0.342 0.850 -0.168 -0.067 0.291 0.439 0.171 + 578.30 11.990 11.994 12.004 0.280 0.491 -0.123 0.280 0.491 -0.060 -0.034 0.137 0.167 0.077 + 578.35 12.053 12.055 12.069 0.216 0.578 -0.060 0.216 0.578 -0.035 -0.013 0.125 0.192 0.065 + 578.40 12.040 12.056 12.073 0.605 0.657 -0.072 0.605 0.657 -0.048 -0.044 0.397 0.401 0.201 + 578.45 12.237 12.247 12.263 0.474 0.639 0.125 0.474 0.639 0.080 0.059 0.303 0.324 0.159 + 578.50 12.055 12.066 12.093 0.515 0.811 -0.058 0.515 0.811 -0.047 -0.030 0.418 0.463 0.211 + 578.55 11.699 11.706 11.734 0.409 0.807 -0.414 0.409 0.807 -0.334 -0.169 0.330 0.495 0.250 + 578.60 11.606 11.629 11.653 0.721 0.748 -0.507 0.721 0.748 -0.379 -0.365 0.539 0.667 0.376 + 578.65 11.601 11.638 11.673 0.923 0.898 -0.512 0.923 0.898 -0.460 -0.472 0.829 0.960 0.530 + 578.70 11.678 11.781 11.817 1.557 0.909 -0.435 1.557 0.909 -0.395 -0.677 1.416 1.721 0.809 + 578.75 11.811 11.887 11.920 1.343 0.887 -0.302 1.343 0.887 -0.268 -0.405 1.191 1.341 0.643 + 578.80 11.799 11.849 11.876 1.084 0.799 -0.314 1.084 0.799 -0.251 -0.340 0.866 0.955 0.482 + 578.85 11.630 11.675 11.682 1.022 0.410 -0.483 1.022 0.410 -0.198 -0.493 0.419 0.723 0.339 + 578.90 11.978 12.016 12.035 0.945 0.689 -0.134 0.945 0.689 -0.093 -0.127 0.651 0.693 0.335 + 578.95 11.891 11.990 11.995 1.536 0.374 -0.222 1.536 0.374 -0.083 -0.341 0.575 1.274 0.337 + 579.00 12.013 12.091 12.091 1.371 -0.016 -0.100 1.371 -0.016 0.002 -0.137 -0.023 0.944 0.070 + 579.05 11.838 11.941 11.943 1.560 0.245 -0.274 1.560 0.245 -0.067 -0.428 0.383 1.285 0.289 + 579.10 11.944 12.021 12.022 1.358 -0.080 -0.168 1.358 -0.080 0.014 -0.229 -0.109 0.940 0.127 + 579.15 12.022 12.116 12.117 1.502 0.177 -0.090 1.502 0.177 -0.016 -0.136 0.266 1.148 0.150 + 579.20 11.871 11.965 11.968 1.499 0.261 -0.242 1.499 0.261 -0.063 -0.363 0.391 1.188 0.269 + 579.25 11.928 12.018 12.024 1.466 0.391 -0.185 1.466 0.391 -0.072 -0.271 0.573 1.168 0.319 + 579.30 12.042 12.090 12.090 1.072 0.029 -0.070 1.072 0.029 -0.002 -0.075 0.031 0.578 0.041 + 579.35 11.804 11.865 11.867 1.197 -0.241 -0.308 1.197 -0.241 0.074 -0.369 -0.289 0.793 0.237 + 579.40 11.620 11.674 11.694 1.120 -0.688 -0.493 1.120 -0.688 0.339 -0.552 -0.771 0.986 0.504 + 579.45 11.891 11.939 11.952 1.074 -0.555 -0.222 1.074 -0.555 0.123 -0.238 -0.597 0.756 0.327 + 579.50 12.117 12.174 12.178 1.181 -0.332 0.004 1.181 -0.332 -0.001 0.004 -0.392 0.753 0.196 + 579.55 12.191 12.270 12.277 1.389 -0.433 0.078 1.389 -0.433 -0.034 0.108 -0.601 1.061 0.306 + 579.60 12.387 12.458 12.462 1.330 -0.307 0.274 1.330 -0.307 -0.084 0.364 -0.409 0.969 0.277 + 579.65 12.129 12.169 12.170 0.991 -0.141 0.016 0.991 -0.141 -0.002 0.016 -0.140 0.501 0.070 + 579.70 11.828 11.910 11.910 1.401 0.075 -0.285 1.401 0.075 -0.021 -0.400 0.105 1.025 0.207 + 579.75 11.986 12.035 12.036 1.090 -0.080 -0.127 1.090 -0.080 0.010 -0.138 -0.087 0.605 0.082 + 579.80 11.853 11.889 11.889 0.926 -0.052 -0.260 0.926 -0.052 0.013 -0.241 -0.048 0.464 0.123 + 579.85 11.681 11.742 11.742 1.192 -0.069 -0.432 1.192 -0.069 0.030 -0.515 -0.082 0.806 0.261 + 579.90 11.746 11.785 11.787 0.955 0.215 -0.367 0.955 0.215 -0.079 -0.350 0.205 0.546 0.207 + 579.95 11.524 11.565 11.565 0.978 -0.038 -0.589 0.978 -0.038 0.022 -0.576 -0.037 0.653 0.289 + 580.00 11.987 12.008 12.013 0.709 -0.329 -0.125 0.709 -0.329 0.041 -0.089 -0.234 0.313 0.127 + 580.05 12.176 12.212 12.218 0.945 -0.387 0.063 0.945 -0.387 -0.024 0.059 -0.365 0.523 0.185 + 580.10 12.323 12.373 12.373 1.116 -0.006 0.210 1.116 -0.006 -0.001 0.234 -0.007 0.644 0.117 + 580.15 12.147 12.208 12.209 1.218 -0.153 0.034 1.218 -0.153 -0.005 0.042 -0.186 0.754 0.095 + 580.20 12.155 12.259 12.260 1.590 -0.160 0.043 1.590 -0.160 -0.007 0.068 -0.254 1.278 0.132 + 580.25 11.948 12.091 12.099 1.853 -0.447 -0.165 1.853 -0.447 0.074 -0.306 -0.828 1.831 0.443 + 580.30 12.088 12.190 12.196 1.573 -0.385 -0.025 1.573 -0.385 0.009 -0.039 -0.605 1.311 0.303 + 580.35 12.004 12.094 12.104 1.470 -0.496 -0.109 1.470 -0.496 0.054 -0.160 -0.729 1.209 0.374 + 580.40 12.233 12.315 12.324 1.423 -0.460 0.120 1.423 -0.460 -0.055 0.171 -0.654 1.125 0.339 + 580.45 12.336 12.423 12.429 1.462 -0.391 0.224 1.462 -0.391 -0.088 0.327 -0.572 1.171 0.332 + 580.50 12.242 12.329 12.343 1.462 -0.584 0.129 1.462 -0.584 -0.076 0.189 -0.854 1.248 0.439 + 580.55 12.079 12.145 12.151 1.262 -0.403 -0.034 1.262 -0.403 0.014 -0.043 -0.508 0.878 0.255 + 580.60 12.443 12.478 12.483 0.935 -0.351 0.330 0.935 -0.351 -0.116 0.308 -0.328 0.554 0.233 + 580.65 12.272 12.304 12.314 0.887 -0.504 0.159 0.887 -0.504 -0.080 0.141 -0.448 0.534 0.238 + 580.70 12.254 12.315 12.323 1.225 -0.450 0.141 1.225 -0.450 -0.064 0.173 -0.551 0.862 0.291 + 580.75 12.598 12.650 12.664 1.138 -0.601 0.485 1.138 -0.601 -0.292 0.552 -0.684 0.946 0.463 + 580.80 12.615 12.642 12.656 0.827 -0.590 0.502 0.827 -0.590 -0.296 0.415 -0.489 0.643 0.353 + 580.85 12.336 12.369 12.374 0.913 -0.329 0.223 0.913 -0.329 -0.073 0.203 -0.300 0.496 0.185 + 580.90 12.412 12.431 12.442 0.677 -0.537 0.300 0.677 -0.537 -0.161 0.203 -0.364 0.418 0.223 + 580.95 12.624 12.667 12.678 1.044 -0.509 0.511 1.044 -0.509 -0.260 0.534 -0.531 0.805 0.398 + 581.00 12.722 12.788 12.809 1.292 -0.727 0.610 1.292 -0.727 -0.443 0.788 -0.939 1.284 0.651 + 581.05 12.923 12.957 12.975 0.930 -0.686 0.811 0.930 -0.686 -0.556 0.754 -0.637 0.996 0.566 + 581.10 12.713 12.762 12.777 1.123 -0.612 0.600 1.123 -0.612 -0.367 0.673 -0.687 0.997 0.515 + 581.15 12.901 12.983 12.987 1.459 -0.340 0.788 1.459 -0.340 -0.268 1.149 -0.496 1.432 0.640 + 581.20 13.173 13.236 13.238 1.286 -0.260 1.060 1.286 -0.260 -0.276 1.364 -0.334 1.423 0.715 + 581.25 13.343 13.397 13.398 1.203 -0.157 1.230 1.203 -0.157 -0.194 1.480 -0.189 1.493 0.753 + 581.30 13.047 13.170 13.172 1.798 -0.225 0.934 1.798 -0.225 -0.210 1.679 -0.405 2.078 0.870 + 581.35 13.402 13.502 13.509 1.642 -0.404 1.289 1.642 -0.404 -0.521 2.117 -0.663 2.261 1.139 + 581.40 13.625 13.672 13.672 1.124 -0.062 1.513 1.124 -0.062 -0.094 1.700 -0.070 1.777 0.852 + 581.45 13.321 13.394 13.394 1.395 -0.066 1.208 1.395 -0.066 -0.079 1.686 -0.092 1.705 0.845 + 581.50 13.602 13.689 13.695 1.548 -0.403 1.489 1.548 -0.403 -0.599 2.305 -0.623 2.388 1.231 + 581.55 13.607 13.714 13.753 1.714 -1.035 1.494 1.714 -1.035 -1.547 2.560 -1.774 3.120 1.739 + 581.60 13.805 13.898 13.938 1.606 -1.052 1.693 1.606 -1.052 -1.780 2.718 -1.689 3.275 1.831 + 581.65 13.768 13.857 13.873 1.567 -0.665 1.656 1.567 -0.665 -1.101 2.595 -1.042 2.820 1.503 + 581.70 13.688 13.767 13.779 1.475 -0.579 1.575 1.475 -0.579 -0.911 2.323 -0.854 2.496 1.319 + 581.75 13.829 13.893 13.905 1.337 -0.578 1.716 1.337 -0.578 -0.992 2.294 -0.773 2.533 1.308 + 581.80 13.843 13.870 13.882 0.870 -0.565 1.730 0.870 -0.565 -0.977 1.506 -0.491 2.035 0.930 + 581.85 13.792 13.814 13.817 0.784 -0.259 1.679 0.784 -0.259 -0.436 1.317 -0.203 1.751 0.701 + 581.90 13.967 13.992 13.998 0.834 -0.412 1.854 0.834 -0.412 -0.765 1.546 -0.344 2.152 0.880 + 581.95 14.043 14.051 14.060 0.453 -0.503 1.930 0.453 -0.503 -0.972 0.874 -0.228 2.093 0.663 + 582.00 13.711 13.729 13.746 0.710 -0.675 1.598 0.710 -0.675 -1.079 1.135 -0.480 1.757 0.819 + 582.05 13.619 13.670 13.693 1.174 -0.795 1.506 1.174 -0.795 -1.198 1.768 -0.933 2.139 1.165 + 582.10 13.807 13.865 13.871 1.265 -0.416 1.694 1.265 -0.416 -0.705 2.142 -0.526 2.321 1.158 + 582.15 13.809 13.860 13.868 1.188 -0.474 1.697 1.188 -0.474 -0.805 2.016 -0.564 2.257 1.121 + 582.20 13.963 13.985 13.994 0.783 -0.499 1.850 0.783 -0.499 -0.923 1.449 -0.391 2.142 0.881 + 582.25 14.095 14.128 14.156 0.966 -0.888 1.983 0.966 -0.888 -1.760 1.915 -0.857 2.826 1.369 + 582.30 13.965 13.999 14.051 0.980 -1.211 1.852 0.980 -1.211 -2.243 1.814 -1.187 2.929 1.560 + 582.35 14.061 14.089 14.154 0.899 -1.352 1.948 0.899 -1.352 -2.634 1.752 -1.216 3.216 1.695 + 582.40 14.294 14.319 14.388 0.848 -1.408 2.181 0.848 -1.408 -3.071 1.850 -1.194 3.730 1.890 + 582.45 14.454 14.486 14.595 0.957 -1.782 2.341 0.957 -1.782 -4.171 2.241 -1.706 4.786 2.517 + 582.50 14.616 14.647 14.748 0.958 -1.715 2.503 0.958 -1.715 -4.293 2.399 -1.643 5.063 2.593 + 582.55 14.275 14.299 14.372 0.827 -1.452 2.162 0.827 -1.452 -3.139 1.789 -1.201 3.733 1.904 + 582.60 14.174 14.182 14.247 0.470 -1.362 2.061 0.470 -1.362 -2.808 0.970 -0.641 3.163 1.520 + 582.65 14.040 14.043 14.100 0.296 -1.262 1.927 0.296 -1.262 -2.432 0.570 -0.373 2.697 1.263 + 582.70 14.343 14.362 14.416 0.738 -1.252 2.230 0.738 -1.252 -2.792 1.646 -0.924 3.543 1.685 + 582.75 14.278 14.297 14.343 0.743 -1.146 2.165 0.743 -1.146 -2.481 1.609 -0.852 3.276 1.539 + 582.80 14.393 14.408 14.442 0.671 -0.980 2.280 0.671 -0.980 -2.234 1.530 -0.658 3.304 1.393 + 582.85 14.228 14.286 14.330 1.291 -1.113 2.115 1.291 -1.113 -2.354 2.731 -1.437 3.690 1.941 + 582.90 14.159 14.236 14.280 1.485 -1.112 2.046 1.485 -1.112 -2.275 3.038 -1.650 3.813 2.069 + 582.95 14.346 14.424 14.470 1.499 -1.148 2.233 1.499 -1.148 -2.563 3.348 -1.721 4.276 2.277 + 583.00 14.568 14.620 14.642 1.232 -0.800 2.455 1.232 -0.800 -1.963 3.025 -0.985 4.093 1.869 + 583.05 14.708 14.751 14.767 1.123 -0.687 2.595 1.123 -0.687 -1.783 2.914 -0.772 4.234 1.751 + 583.10 14.537 14.578 14.580 1.084 -0.248 2.424 1.084 -0.248 -0.600 2.629 -0.268 3.557 1.355 + 583.15 14.478 14.530 14.540 1.232 -0.528 2.365 1.232 -0.528 -1.248 2.913 -0.650 3.694 1.618 + 583.20 14.502 14.551 14.568 1.190 -0.708 2.389 1.190 -0.708 -1.692 2.842 -0.843 3.813 1.707 + 583.25 14.438 14.493 14.516 1.263 -0.817 2.325 1.263 -0.817 -1.900 2.937 -1.032 3.835 1.824 + 583.30 14.383 14.442 14.452 1.310 -0.526 2.270 1.310 -0.526 -1.194 2.974 -0.689 3.573 1.639 + 583.35 14.316 14.381 14.385 1.366 -0.296 2.204 1.366 -0.296 -0.653 3.010 -0.405 3.405 1.553 + 583.40 14.181 14.224 14.228 1.100 -0.353 2.068 1.100 -0.353 -0.731 2.275 -0.389 2.806 1.210 + 583.45 14.441 14.489 14.500 1.174 -0.565 2.329 1.174 -0.565 -1.317 2.733 -0.664 3.560 1.553 + 583.50 14.225 14.268 14.284 1.103 -0.672 2.113 1.103 -0.672 -1.420 2.330 -0.741 3.066 1.414 + 583.55 14.249 14.297 14.308 1.166 -0.567 2.137 1.166 -0.567 -1.211 2.491 -0.661 3.123 1.424 + 583.60 14.058 14.091 14.092 0.969 -0.113 1.945 0.969 -0.113 -0.219 1.885 -0.109 2.368 0.950 + 583.65 14.267 14.317 14.320 1.201 -0.266 2.154 1.201 -0.266 -0.574 2.587 -0.320 3.076 1.334 + 583.70 14.211 14.244 14.249 0.968 -0.377 2.098 0.968 -0.377 -0.792 2.031 -0.365 2.741 1.105 + 583.75 13.924 13.961 13.965 1.022 -0.300 1.811 1.022 -0.300 -0.543 1.850 -0.306 2.207 0.976 + 583.80 14.066 14.151 14.166 1.549 -0.636 1.953 1.549 -0.636 -1.242 3.025 -0.984 3.309 1.708 + 583.85 13.667 13.774 13.777 1.711 -0.302 1.554 1.711 -0.302 -0.469 2.660 -0.516 2.718 1.375 + 583.90 13.745 13.837 13.846 1.597 -0.509 1.632 1.597 -0.509 -0.830 2.606 -0.813 2.736 1.427 + 583.95 13.529 13.622 13.625 1.596 -0.262 1.416 1.596 -0.262 -0.371 2.259 -0.418 2.310 1.164 + 584.00 13.482 13.597 13.597 1.761 0.063 1.369 1.761 0.063 0.086 2.411 0.111 2.489 1.208 + 584.05 13.479 13.582 13.582 1.669 0.009 1.366 1.669 0.009 0.013 2.280 0.015 2.325 1.140 + 584.10 13.224 13.307 13.307 1.488 0.056 1.111 1.488 0.056 0.062 1.652 0.084 1.725 0.828 + 584.15 13.240 13.321 13.327 1.475 0.386 1.127 1.475 0.386 0.435 1.662 0.569 1.797 0.905 + 584.20 13.179 13.271 13.272 1.563 -0.099 1.066 1.563 -0.099 -0.106 1.667 -0.155 1.795 0.839 + 584.25 13.397 13.457 13.457 1.264 0.115 1.285 1.264 0.115 0.148 1.624 0.145 1.631 0.819 + 584.30 13.361 13.392 13.398 0.913 0.399 1.248 0.913 0.399 0.498 1.139 0.364 1.275 0.648 + 584.35 13.165 13.214 13.219 1.139 0.374 1.052 1.139 0.374 0.394 1.198 0.426 1.272 0.665 + 584.40 13.455 13.507 13.529 1.182 0.766 1.342 1.182 0.766 1.028 1.587 0.906 1.894 1.049 + 584.45 13.426 13.476 13.492 1.154 0.668 1.313 1.154 0.668 0.877 1.515 0.770 1.751 0.956 + 584.50 13.240 13.261 13.275 0.748 0.595 1.127 0.748 0.595 0.671 0.843 0.445 1.092 0.583 + 584.55 12.943 12.977 12.982 0.937 0.350 0.830 0.937 0.350 0.291 0.778 0.328 0.845 0.447 + 584.60 12.928 12.968 12.973 1.016 0.356 0.815 1.016 0.356 0.290 0.828 0.361 0.911 0.474 + 584.65 13.105 13.188 13.192 1.473 0.321 0.993 1.473 0.321 0.319 1.462 0.473 1.629 0.785 + 584.70 13.274 13.365 13.370 1.558 0.373 1.161 1.558 0.373 0.433 1.809 0.581 1.958 0.975 + 584.75 14.018 14.117 14.118 1.670 0.190 1.905 1.670 0.190 0.363 3.182 0.318 3.228 1.609 + 584.80 14.114 14.195 14.195 1.514 0.099 2.001 1.514 0.099 0.198 3.029 0.150 3.153 1.520 + 584.85 13.799 13.846 13.853 1.135 0.459 1.686 1.135 0.459 0.774 1.913 0.521 2.171 1.064 + 584.90 13.883 13.923 13.931 1.062 0.457 1.770 1.062 0.457 0.808 1.880 0.485 2.235 1.052 + 584.95 13.731 13.752 13.754 0.759 0.193 1.619 0.759 0.193 0.312 1.228 0.146 1.616 0.638 + 585.00 13.827 13.837 13.838 0.539 -0.124 1.714 0.539 -0.124 -0.213 0.923 -0.067 1.622 0.475 + 585.05 13.690 13.695 13.699 0.343 -0.337 1.578 0.343 -0.337 -0.532 0.541 -0.116 1.360 0.384 + 585.10 13.699 13.707 13.716 0.464 -0.515 1.586 0.464 -0.515 -0.816 0.736 -0.239 1.498 0.562 + 585.15 13.614 13.625 13.632 0.533 -0.451 1.502 0.533 -0.451 -0.677 0.800 -0.240 1.371 0.538 + 585.20 13.748 13.759 13.761 0.536 -0.233 1.636 0.536 -0.233 -0.381 0.877 -0.125 1.509 0.482 + 585.25 13.923 13.948 13.953 0.829 -0.398 1.810 0.829 -0.398 -0.721 1.500 -0.330 2.061 0.848 + 585.30 14.056 14.087 14.088 0.946 -0.129 1.943 0.946 -0.129 -0.250 1.837 -0.122 2.342 0.929 + 585.35 14.144 14.175 14.176 0.946 -0.140 2.031 0.946 -0.140 -0.285 1.922 -0.133 2.520 0.974 + 585.40 14.163 14.173 14.173 0.527 -0.101 2.050 0.527 -0.101 -0.208 1.081 -0.053 2.246 0.551 + 585.45 14.276 14.278 14.278 0.218 0.164 2.163 0.218 0.164 0.355 0.471 0.036 2.377 0.295 + 585.50 14.497 14.507 14.508 0.543 -0.147 2.384 0.543 -0.147 -0.350 1.294 -0.080 3.001 0.672 + 585.55 14.650 14.655 14.656 0.385 -0.149 2.537 0.385 -0.149 -0.378 0.977 -0.057 3.303 0.524 + 585.60 14.717 14.718 14.721 0.202 0.281 2.604 0.202 0.281 0.731 0.526 0.057 3.450 0.451 + 585.65 14.946 14.946 14.946 0.063 0.095 2.833 0.063 0.095 0.268 0.179 0.006 4.019 0.161 + 585.70 15.147 15.148 15.149 0.240 -0.084 3.034 0.240 -0.084 -0.255 0.728 -0.020 4.634 0.386 + 585.75 14.933 14.935 14.937 0.270 0.244 2.820 0.270 0.244 0.689 0.763 0.066 4.043 0.515 + 585.80 14.890 14.890 14.900 0.141 0.535 2.777 0.141 0.535 1.485 0.391 0.075 4.008 0.769 + 585.85 14.984 14.985 15.000 0.199 0.678 2.871 0.199 0.678 1.947 0.571 0.135 4.370 1.017 + 585.90 15.061 15.066 15.071 0.370 0.374 2.949 0.370 0.374 1.104 1.092 0.139 4.486 0.779 + 585.95 15.222 15.225 15.228 0.253 0.341 3.110 0.253 0.341 1.059 0.787 0.086 4.925 0.661 + 586.00 15.030 15.033 15.046 0.297 0.617 2.917 0.297 0.617 1.801 0.866 0.183 4.490 1.004 + 586.05 14.767 14.792 14.807 0.864 0.674 2.654 0.864 0.674 1.788 2.292 0.582 4.122 1.483 + 586.10 14.779 14.799 14.808 0.766 0.521 2.666 0.766 0.521 1.388 2.042 0.399 3.983 1.250 + 586.15 14.937 14.953 14.961 0.704 0.491 2.824 0.704 0.491 1.386 1.989 0.346 4.356 1.224 + 586.20 15.270 15.289 15.297 0.769 0.490 3.157 0.769 0.490 1.548 2.429 0.377 5.400 1.452 + 586.25 15.338 15.354 15.364 0.719 0.547 3.225 0.719 0.547 1.764 2.318 0.393 5.607 1.470 + 586.30 15.342 15.362 15.367 0.786 0.398 3.229 0.786 0.398 1.284 2.536 0.312 5.601 1.430 + 586.35 15.238 15.264 15.273 0.880 0.535 3.125 0.880 0.535 1.672 2.751 0.471 5.415 1.627 + 586.40 15.360 15.387 15.421 0.913 1.016 3.247 0.913 1.016 3.300 2.964 0.927 6.205 2.266 + 586.45 15.265 15.278 15.296 0.631 0.730 3.153 0.631 0.730 2.302 1.989 0.461 5.435 1.538 + 586.50 15.354 15.375 15.387 0.816 0.601 3.241 0.816 0.601 1.948 2.645 0.490 5.766 1.661 + 586.55 15.342 15.372 15.378 0.968 0.406 3.229 0.968 0.406 1.311 3.126 0.393 5.764 1.706 + 586.60 15.188 15.220 15.220 0.984 0.079 3.075 0.984 0.079 0.242 3.025 0.077 5.216 1.518 + 586.65 15.197 15.212 15.212 0.686 -0.085 3.084 0.686 -0.085 -0.263 2.115 -0.059 4.994 1.066 + 586.70 15.061 15.091 15.092 0.945 -0.146 2.949 0.945 -0.146 -0.430 2.786 -0.138 4.804 1.411 + 586.75 15.125 15.144 15.144 0.763 0.031 3.012 0.763 0.031 0.093 2.299 0.024 4.827 1.151 + 586.80 14.951 15.000 15.002 1.215 0.202 2.838 1.215 0.202 0.573 3.448 0.245 4.786 1.752 + 586.85 15.052 15.092 15.093 1.110 0.134 2.939 1.110 0.134 0.395 3.262 0.149 4.943 1.645 + 586.90 15.115 15.135 15.143 0.776 -0.481 3.002 0.776 -0.481 -1.443 2.329 -0.373 4.923 1.383 + 586.95 15.473 15.491 15.500 0.751 -0.544 3.360 0.751 -0.544 -1.828 2.522 -0.408 6.074 1.571 + 587.00 15.544 15.557 15.559 0.642 -0.216 3.431 0.642 -0.216 -0.741 2.204 -0.139 6.116 1.165 + 587.05 15.320 15.330 15.330 0.551 -0.033 3.207 0.551 -0.033 -0.105 1.767 -0.018 5.295 0.885 + 587.10 15.109 15.115 15.115 0.416 0.079 2.996 0.416 0.079 0.237 1.246 0.033 4.579 0.634 + 587.15 15.149 15.154 15.154 0.371 0.084 3.036 0.371 0.084 0.255 1.127 0.031 4.682 0.578 + 587.20 15.082 15.083 15.085 0.223 -0.201 2.969 0.223 -0.201 -0.596 0.662 -0.045 4.452 0.446 + 587.25 15.141 15.142 15.144 0.173 -0.293 3.028 0.173 -0.293 -0.888 0.524 -0.051 4.642 0.516 + 587.30 15.095 15.105 15.105 0.543 -0.020 2.982 0.543 -0.020 -0.060 1.619 -0.011 4.594 0.810 + 587.35 15.087 15.092 15.092 0.368 -0.037 2.974 0.368 -0.037 -0.110 1.095 -0.014 4.492 0.551 + 587.40 15.379 15.381 15.391 0.289 -0.544 3.266 0.289 -0.544 -1.775 0.944 -0.157 5.523 1.008 + 587.45 15.514 15.515 15.531 0.161 -0.697 3.402 0.161 -0.697 -2.372 0.546 -0.112 6.041 1.219 + 587.50 15.272 15.290 15.311 0.725 -0.814 3.160 0.725 -0.814 -2.572 2.292 -0.591 5.586 1.748 + 587.55 15.641 15.650 15.680 0.529 -0.964 3.528 0.529 -0.964 -3.401 1.868 -0.510 6.829 1.957 + 587.60 15.569 15.579 15.591 0.560 -0.629 3.456 0.560 -0.629 -2.174 1.935 -0.352 6.326 1.466 + 587.65 15.268 15.292 15.312 0.847 -0.793 3.155 0.847 -0.793 -2.502 2.674 -0.672 5.652 1.862 + 587.70 15.322 15.336 15.353 0.640 -0.728 3.209 0.640 -0.728 -2.335 2.056 -0.466 5.620 1.573 + 587.75 15.430 15.454 15.484 0.866 -0.955 3.317 0.866 -0.955 -3.167 2.872 -0.826 6.332 2.177 + 587.80 15.484 15.516 15.527 1.005 -0.585 3.371 1.005 -0.585 -1.971 3.388 -0.588 6.357 1.982 + 587.85 15.754 15.786 15.807 0.998 -0.814 3.641 0.998 -0.814 -2.964 3.635 -0.812 7.459 2.380 + 587.90 15.801 15.830 15.850 0.970 -0.793 3.688 0.970 -0.793 -2.926 3.576 -0.769 7.585 2.342 + 587.95 15.752 15.773 15.794 0.816 -0.823 3.639 0.816 -0.823 -2.993 2.969 -0.671 7.292 2.135 + 588.00 15.587 15.591 15.621 0.353 -0.967 3.475 0.353 -0.967 -3.360 1.225 -0.341 6.566 1.796 + 588.05 15.476 15.480 15.516 0.363 -1.055 3.363 0.363 -1.055 -3.547 1.220 -0.383 6.277 1.885 + 588.10 15.275 15.279 15.307 0.387 -0.917 3.162 0.387 -0.917 -2.901 1.224 -0.355 5.494 1.584 + 588.15 15.587 15.600 15.641 0.636 -1.128 3.475 0.636 -1.128 -3.920 2.210 -0.718 6.875 2.279 + 588.20 15.526 15.547 15.577 0.797 -0.970 3.413 0.797 -0.970 -3.310 2.722 -0.773 6.614 2.177 + 588.25 15.322 15.338 15.372 0.706 -1.026 3.209 0.706 -1.026 -3.293 2.267 -0.725 5.925 2.032 + 588.30 15.388 15.394 15.433 0.416 -1.101 3.275 0.416 -1.101 -3.607 1.363 -0.458 6.057 1.941 + 588.35 15.241 15.241 15.319 -0.082 -1.542 3.128 -0.082 -1.542 -4.825 -0.256 0.126 6.085 2.416 + 588.40 15.169 15.170 15.240 -0.203 -1.462 3.056 -0.203 -1.462 -4.466 -0.621 0.297 5.758 2.259 + 588.45 15.113 15.113 15.153 0.032 -1.099 3.000 0.032 -1.099 -3.296 0.096 -0.035 5.104 1.649 + 588.50 15.195 15.195 15.242 0.070 -1.194 3.083 0.070 -1.194 -3.680 0.216 -0.084 5.466 1.844 + 588.55 15.461 15.461 15.522 0.141 -1.376 3.348 0.141 -1.376 -4.606 0.474 -0.195 6.561 2.317 + 588.60 15.229 15.229 15.316 0.151 -1.623 3.116 0.151 -1.623 -5.057 0.471 -0.245 6.183 2.542 + 588.65 15.083 15.085 15.139 -0.221 -1.281 2.971 -0.221 -1.281 -3.805 -0.658 0.284 5.257 1.936 + 588.70 14.983 14.986 15.034 -0.329 -1.195 2.870 -0.329 -1.195 -3.430 -0.943 0.393 4.887 1.790 + 588.75 14.984 14.984 15.051 -0.145 -1.417 2.871 -0.145 -1.417 -4.069 -0.417 0.206 5.135 2.048 + 588.80 15.401 15.403 15.444 -0.226 -1.125 3.288 -0.226 -1.125 -3.700 -0.743 0.254 6.065 1.891 + 588.85 15.300 15.304 15.327 -0.340 -0.849 3.187 -0.340 -0.849 -2.707 -1.084 0.289 5.498 1.465 + 588.90 15.326 15.338 15.374 -0.586 -1.052 3.214 -0.586 -1.052 -3.379 -1.885 0.617 5.889 1.959 + 588.95 15.531 15.553 15.597 -0.822 -1.173 3.418 -0.822 -1.173 -4.008 -2.811 0.964 6.868 2.495 + 589.00 15.367 15.398 15.444 -0.971 -1.193 3.255 -0.971 -1.193 -3.883 -3.159 1.158 6.479 2.569 + 589.05 15.263 15.285 15.314 -0.828 -0.934 3.150 -0.828 -0.934 -2.941 -2.608 0.773 5.740 2.003 + 589.10 15.392 15.409 15.442 -0.737 -1.008 3.279 -0.737 -1.008 -3.305 -2.417 0.743 6.155 2.081 + 589.15 15.629 15.631 15.662 -0.257 -0.977 3.517 -0.257 -0.977 -3.437 -0.903 0.251 6.694 1.781 + 589.20 15.785 15.785 15.820 0.098 -1.053 3.672 0.098 -1.053 -3.865 0.361 -0.104 7.301 1.942 + 589.25 15.466 15.467 15.491 0.123 -0.870 3.354 0.123 -0.870 -2.917 0.411 -0.107 6.010 1.474 + 589.30 15.603 15.606 15.640 0.326 -1.032 3.490 0.326 -1.032 -3.601 1.139 -0.337 6.676 1.896 + 589.35 15.805 15.811 15.828 0.465 -0.731 3.692 0.465 -0.731 -2.697 1.717 -0.340 7.190 1.608 + 589.40 15.723 15.726 15.770 0.310 -1.181 3.610 0.310 -1.181 -4.264 1.121 -0.367 7.262 2.212 + 589.45 15.711 15.725 15.790 0.667 -1.426 3.598 0.667 -1.426 -5.132 2.400 -0.952 7.713 2.873 + 589.50 15.287 15.293 15.358 0.439 -1.405 3.174 0.439 -1.405 -4.458 1.394 -0.617 6.120 2.356 + 589.55 15.501 15.503 15.561 0.247 -1.341 3.388 0.247 -1.341 -4.544 0.836 -0.331 6.670 2.316 + 589.60 15.233 15.233 15.269 0.076 -1.045 3.120 0.076 -1.045 -3.261 0.239 -0.080 5.417 1.636 + 589.65 15.557 15.561 15.607 -0.310 -1.205 3.445 -0.310 -1.205 -4.150 -1.070 0.374 6.707 2.151 + 589.70 15.415 15.416 15.462 -0.183 -1.188 3.302 -0.183 -1.188 -3.922 -0.605 0.218 6.175 1.987 + 589.75 15.032 15.034 15.061 -0.282 -0.901 2.919 -0.282 -0.901 -2.630 -0.823 0.254 4.706 1.384 + 589.80 15.441 15.441 15.485 -0.132 -1.159 3.328 -0.132 -1.159 -3.856 -0.440 0.153 6.218 1.942 + 589.85 15.752 15.752 15.795 0.034 -1.177 3.639 0.034 -1.177 -4.282 0.123 -0.040 7.313 2.142 + 589.90 15.506 15.508 15.529 0.234 -0.808 3.393 0.234 -0.808 -2.741 0.795 -0.189 6.111 1.430 + 589.95 15.676 15.681 15.699 0.414 -0.739 3.563 0.414 -0.739 -2.635 1.476 -0.306 6.707 1.518 + 590.00 15.692 15.702 15.729 0.554 -0.928 3.579 0.554 -0.928 -3.323 1.984 -0.514 6.990 1.952 + 590.05 15.593 15.595 15.644 0.271 -1.231 3.480 0.271 -1.231 -4.283 0.943 -0.333 6.850 2.199 + 590.10 15.566 15.567 15.610 0.184 -1.152 3.453 0.184 -1.152 -3.977 0.634 -0.211 6.643 2.017 + 590.15 15.629 15.630 15.661 -0.129 -0.988 3.516 -0.129 -0.988 -3.473 -0.454 0.128 6.679 1.752 + 590.20 15.377 15.377 15.440 -0.003 -1.401 3.264 -0.003 -1.401 -4.573 -0.010 0.004 6.308 2.286 + 590.25 15.602 15.603 15.659 0.117 -1.332 3.489 0.117 -1.332 -4.646 0.407 -0.155 6.981 2.333 + 590.30 15.591 15.592 15.637 0.145 -1.190 3.478 0.145 -1.190 -4.138 0.505 -0.173 6.768 2.086 + 590.35 15.334 15.334 15.374 -0.109 -1.114 3.221 -0.109 -1.114 -3.588 -0.351 0.122 5.813 1.804 + 590.40 15.425 15.425 15.461 0.054 -1.050 3.312 0.054 -1.050 -3.477 0.180 -0.057 6.038 1.741 + 590.45 15.313 15.313 15.357 -0.021 -1.163 3.200 -0.021 -1.163 -3.721 -0.069 0.025 5.796 1.861 + 590.50 15.413 15.413 15.496 -0.061 -1.599 3.300 -0.061 -1.599 -5.276 -0.202 0.098 6.725 2.641 + 590.55 15.643 15.643 15.763 0.060 -1.941 3.530 0.060 -1.941 -6.850 0.213 -0.117 8.115 3.427 + 590.60 15.459 15.464 15.541 0.354 -1.555 3.347 0.354 -1.555 -5.203 1.183 -0.550 6.871 2.682 + 590.65 15.517 15.522 15.600 0.397 -1.562 3.404 0.397 -1.562 -5.317 1.353 -0.621 7.093 2.761 + 590.70 15.541 15.543 15.647 0.270 -1.801 3.428 0.270 -1.801 -6.173 0.924 -0.486 7.533 3.130 + 590.75 15.653 15.655 15.754 0.255 -1.765 3.540 0.255 -1.765 -6.249 0.902 -0.450 7.857 3.165 + 590.80 15.732 15.741 15.837 0.534 -1.737 3.620 0.534 -1.737 -6.289 1.932 -0.928 8.203 3.322 + 590.85 15.111 15.111 15.163 0.080 -1.246 2.998 0.080 -1.246 -3.737 0.240 -0.100 5.275 1.873 + 590.90 14.979 14.979 15.030 -0.042 -1.231 2.866 -0.042 -1.231 -3.528 -0.121 0.052 4.866 1.765 + 590.95 14.944 14.946 15.027 0.208 -1.559 2.831 0.208 -1.559 -4.414 0.588 -0.324 5.245 2.232 + 591.00 15.011 15.036 15.141 0.856 -1.779 2.899 0.856 -1.779 -5.155 2.482 -1.523 6.149 2.960 + 591.05 14.927 14.951 15.052 0.847 -1.739 2.814 0.847 -1.739 -4.895 2.384 -1.473 5.832 2.820 + 591.10 14.918 14.931 14.984 0.628 -1.256 2.805 0.628 -1.256 -3.522 1.762 -0.789 4.919 2.008 + 591.15 14.740 14.750 14.782 0.533 -0.976 2.627 0.533 -0.976 -2.564 1.400 -0.520 4.070 1.484 + 591.20 15.054 15.057 15.077 0.292 -0.782 2.941 0.292 -0.782 -2.301 0.859 -0.229 4.675 1.234 + 591.25 15.120 15.123 15.140 0.300 -0.717 3.007 0.300 -0.717 -2.157 0.902 -0.215 4.824 1.174 + 591.30 15.190 15.194 15.205 0.322 -0.575 3.078 0.322 -0.575 -1.771 0.990 -0.185 4.953 1.019 + 591.35 15.389 15.395 15.408 0.448 -0.616 3.276 0.448 -0.616 -2.019 1.467 -0.276 5.657 1.256 + 591.40 15.653 15.663 15.683 0.553 -0.795 3.540 0.553 -0.795 -2.813 1.959 -0.440 6.736 1.728 + 591.45 15.461 15.489 15.500 0.941 -0.593 3.348 0.941 -0.593 -1.984 3.149 -0.557 6.222 1.882 + 591.50 15.482 15.499 15.523 0.737 -0.848 3.369 0.737 -0.848 -2.858 2.484 -0.625 6.307 1.919 + 591.55 15.190 15.215 15.217 0.873 -0.251 3.077 0.873 -0.251 -0.772 2.686 -0.219 5.148 1.402 + 591.60 15.483 15.497 15.497 0.655 -0.170 3.370 0.655 -0.170 -0.574 2.207 -0.112 5.907 1.142 + 591.65 15.430 15.441 15.448 0.601 -0.442 3.317 0.601 -0.442 -1.466 1.994 -0.266 5.779 1.245 + 591.70 15.108 15.120 15.139 0.597 -0.749 2.996 0.597 -0.749 -2.243 1.789 -0.447 4.945 1.452 + 591.75 15.466 15.475 15.490 0.536 -0.669 3.353 0.536 -0.669 -2.244 1.796 -0.359 5.990 1.448 + 591.80 15.317 15.329 15.329 0.594 -0.157 3.204 0.594 -0.157 -0.502 1.902 -0.093 5.322 0.985 + 591.85 15.080 15.119 15.119 1.077 -0.110 2.968 1.077 -0.110 -0.326 3.195 -0.118 4.989 1.607 + 591.90 14.995 15.058 15.058 1.377 0.015 2.882 1.377 0.015 0.044 3.970 0.021 5.102 1.985 + 591.95 15.168 15.250 15.250 1.571 0.152 3.056 1.571 0.152 0.465 4.800 0.239 5.914 2.414 + 592.00 15.121 15.206 15.207 1.603 0.214 3.008 1.603 0.214 0.645 4.822 0.344 5.832 2.439 + 592.05 14.972 15.068 15.069 1.698 0.168 2.859 1.698 0.168 0.480 4.856 0.285 5.544 2.444 + 592.10 15.196 15.304 15.304 1.815 -0.095 3.083 1.815 -0.095 -0.292 5.595 -0.172 6.404 2.803 + 592.15 14.878 14.950 14.951 1.473 -0.140 2.765 1.473 -0.140 -0.387 4.073 -0.206 4.917 2.048 + 592.20 14.683 14.755 14.759 1.462 -0.346 2.570 1.462 -0.346 -0.889 3.757 -0.505 4.431 1.947 + 592.25 14.666 14.727 14.728 1.340 -0.124 2.553 1.340 -0.124 -0.315 3.422 -0.166 4.166 1.720 + 592.30 14.755 14.839 14.841 1.581 -0.218 2.642 1.581 -0.218 -0.576 4.177 -0.345 4.764 2.116 + 592.35 14.807 14.882 14.890 1.490 -0.496 2.695 1.490 -0.496 -1.335 4.015 -0.738 4.863 2.148 + 592.40 14.683 14.734 14.737 1.218 -0.297 2.570 1.218 -0.297 -0.764 3.132 -0.362 4.090 1.622 + 592.45 14.480 14.540 14.541 1.321 -0.143 2.367 1.321 -0.143 -0.338 3.128 -0.189 3.685 1.576 + 592.50 14.664 14.730 14.731 1.398 -0.169 2.551 1.398 -0.169 -0.430 3.566 -0.236 4.245 1.800 + 592.55 14.510 14.581 14.582 1.433 -0.168 2.397 1.433 -0.168 -0.404 3.437 -0.241 3.915 1.734 + 592.60 14.347 14.417 14.418 1.428 0.044 2.234 1.428 0.044 0.099 3.189 0.063 3.515 1.595 + 592.65 14.276 14.375 14.381 1.682 -0.417 2.163 1.682 -0.417 -0.902 3.639 -0.702 3.842 1.907 + 592.70 14.447 14.502 14.507 1.267 -0.367 2.334 1.267 -0.367 -0.857 2.958 -0.465 3.594 1.557 + 592.75 14.183 14.215 14.219 0.946 -0.321 2.071 0.946 -0.321 -0.664 1.960 -0.303 2.643 1.046 + 592.80 13.904 13.948 13.954 1.114 -0.398 1.791 1.114 -0.398 -0.713 1.995 -0.443 2.303 1.082 + 592.85 13.841 13.870 13.880 0.900 -0.519 1.728 0.900 -0.519 -0.896 1.555 -0.467 2.033 0.927 + 592.90 13.811 13.842 13.850 0.927 -0.447 1.698 0.927 -0.447 -0.760 1.575 -0.415 1.972 0.899 + 592.95 14.436 14.448 14.462 0.582 -0.641 2.323 0.582 -0.641 -1.489 1.353 -0.373 3.074 1.023 + 593.00 14.530 14.533 14.541 0.257 -0.493 2.418 0.257 -0.493 -1.193 0.621 -0.127 3.077 0.675 + 593.05 14.222 14.224 14.224 0.189 0.012 2.110 0.189 0.012 0.025 0.398 0.002 2.243 0.200 + 593.10 14.465 14.468 14.468 0.283 0.051 2.352 0.283 0.051 0.120 0.666 0.014 2.808 0.339 + 593.15 14.183 14.184 14.184 0.135 -0.054 2.071 0.135 -0.054 -0.112 0.279 -0.007 2.154 0.150 + 593.20 14.318 14.318 14.319 0.039 0.189 2.205 0.039 0.189 0.416 0.087 0.007 2.449 0.213 + 593.25 14.150 14.151 14.158 0.101 0.454 2.038 0.101 0.454 0.925 0.206 0.046 2.184 0.474 + 593.30 14.141 14.141 14.141 0.113 -0.026 2.028 0.113 -0.026 -0.053 0.229 -0.003 2.063 0.117 + 593.35 13.919 13.919 13.919 -0.027 -0.061 1.807 -0.027 -0.061 -0.111 -0.048 0.002 1.634 0.060 + 593.40 14.281 14.281 14.282 -0.043 -0.037 2.169 -0.043 -0.037 -0.080 -0.094 0.002 2.353 0.061 + 593.45 13.956 13.958 13.958 -0.252 -0.047 1.843 -0.252 -0.047 -0.087 -0.465 0.012 1.731 0.237 + 593.50 14.194 14.215 14.215 -0.781 -0.059 2.081 -0.781 -0.059 -0.123 -1.625 0.046 2.472 0.815 + 593.55 14.225 14.257 14.259 -0.965 -0.183 2.112 -0.965 -0.183 -0.387 -2.038 0.177 2.712 1.041 + 593.60 14.223 14.233 14.238 -0.544 -0.361 2.110 -0.544 -0.361 -0.761 -1.147 0.196 2.439 0.695 + 593.65 14.280 14.289 14.298 -0.498 -0.531 2.167 -0.498 -0.531 -1.150 -1.079 0.264 2.613 0.800 + 593.70 14.422 14.435 14.461 -0.607 -0.873 2.309 -0.607 -0.873 -2.015 -1.403 0.530 3.231 1.256 + 593.75 14.357 14.359 14.377 -0.199 -0.715 2.245 -0.199 -0.715 -1.606 -0.447 0.142 2.795 0.836 + 593.80 14.552 14.555 14.576 -0.295 -0.779 2.440 -0.295 -0.779 -1.900 -0.720 0.230 3.323 1.022 + 593.85 14.545 14.555 14.568 -0.547 -0.601 2.432 -0.547 -0.601 -1.463 -1.331 0.329 3.288 1.002 + 593.90 14.425 14.434 14.458 -0.536 -0.830 2.312 -0.536 -0.830 -1.920 -1.239 0.445 3.160 1.164 + 593.95 14.676 14.680 14.706 -0.342 -0.877 2.563 -0.342 -0.877 -2.248 -0.876 0.300 3.728 1.216 + 594.00 14.581 14.586 14.619 -0.403 -0.977 2.468 -0.403 -0.977 -2.412 -0.995 0.394 3.604 1.320 + 594.05 14.356 14.365 14.384 -0.506 -0.749 2.243 -0.506 -0.749 -1.681 -1.135 0.379 2.924 1.032 + 594.10 14.286 14.298 14.317 -0.586 -0.731 2.173 -0.586 -0.731 -1.590 -1.274 0.429 2.801 1.041 + 594.15 14.254 14.261 14.280 -0.469 -0.724 2.141 -0.469 -0.724 -1.551 -1.005 0.340 2.664 0.940 + 594.20 14.179 14.189 14.203 -0.527 -0.621 2.066 -0.527 -0.621 -1.284 -1.089 0.328 2.467 0.858 + 594.25 14.073 14.087 14.092 -0.619 -0.372 1.961 -0.619 -0.372 -0.729 -1.214 0.230 2.183 0.717 + 594.30 14.099 14.113 14.117 -0.632 -0.358 1.986 -0.632 -0.358 -0.711 -1.256 0.227 2.236 0.730 + 594.35 14.189 14.196 14.201 -0.417 -0.411 2.077 -0.417 -0.411 -0.853 -0.867 0.172 2.328 0.614 + 594.40 14.287 14.287 14.303 -0.023 -0.664 2.174 -0.023 -0.664 -1.443 -0.050 0.015 2.584 0.722 + 594.45 14.232 14.235 14.243 -0.264 -0.481 2.119 -0.264 -0.481 -1.019 -0.560 0.127 2.396 0.585 + 594.50 13.878 13.886 13.920 -0.473 -0.976 1.765 -0.473 -0.976 -1.722 -0.835 0.462 2.146 0.984 + 594.55 14.014 14.015 14.073 -0.211 -1.277 1.901 -0.211 -1.277 -2.427 -0.400 0.269 2.644 1.237 + 594.60 14.448 14.453 14.541 -0.389 -1.597 2.335 -0.389 -1.597 -3.729 -0.908 0.621 4.077 1.944 + 594.65 14.580 14.580 14.706 -0.112 -1.920 2.467 -0.112 -1.920 -4.737 -0.276 0.215 4.892 2.375 + 594.70 14.686 14.687 14.838 0.199 -2.109 2.573 0.199 -2.109 -5.427 0.511 -0.419 5.554 2.733 + 594.75 14.498 14.502 14.702 0.336 -2.419 2.385 0.336 -2.419 -5.771 0.801 -0.812 5.828 2.941 + 594.80 14.508 14.516 14.736 0.480 -2.535 2.396 0.480 -2.535 -6.072 1.149 -1.216 6.196 3.149 + 594.85 14.298 14.310 14.460 0.600 -2.076 2.185 0.600 -2.076 -4.536 1.311 -1.246 4.722 2.441 + 594.90 14.249 14.250 14.399 0.204 -2.063 2.136 0.204 -2.063 -4.406 0.436 -0.421 4.430 2.224 + 594.95 13.883 13.889 14.057 0.396 -2.166 1.771 0.396 -2.166 -3.834 0.701 -0.857 3.991 1.995 + 595.00 13.795 13.801 13.927 0.381 -1.871 1.683 0.381 -1.871 -3.149 0.640 -0.712 3.239 1.646 + 595.05 13.543 13.543 13.691 -0.082 -2.009 1.430 -0.082 -2.009 -2.873 -0.118 0.165 3.043 1.440 + 595.10 13.559 13.559 13.724 0.032 -2.124 1.446 0.032 -2.124 -3.071 0.046 -0.068 3.301 1.536 + 595.15 13.656 13.658 13.807 0.183 -2.023 1.544 0.183 -2.023 -3.123 0.282 -0.370 3.255 1.579 + 595.20 13.559 13.564 13.712 0.351 -2.008 1.446 0.351 -2.008 -2.904 0.508 -0.706 3.124 1.516 + 595.25 13.642 13.642 13.713 -0.087 -1.397 1.529 -0.087 -1.397 -2.135 -0.132 0.121 2.148 1.071 + 595.30 13.684 13.684 13.740 -0.089 -1.235 1.571 -0.089 -1.235 -1.940 -0.140 0.110 2.001 0.974 + 595.35 13.884 13.884 13.936 -0.017 -1.201 1.771 -0.017 -1.201 -2.128 -0.031 0.021 2.290 1.064 + 595.40 13.853 13.858 13.906 0.361 -1.165 1.740 0.361 -1.165 -2.027 0.629 -0.421 2.257 1.082 + 595.45 13.465 13.468 13.499 0.300 -0.918 1.352 0.300 -0.918 -1.242 0.406 -0.276 1.381 0.668 + 595.50 13.788 13.789 13.866 0.077 -1.460 1.676 0.077 -1.460 -2.447 0.129 -0.112 2.473 1.226 + 595.55 14.072 14.073 14.212 0.088 -1.981 1.960 0.088 -1.981 -3.882 0.173 -0.175 3.886 1.945 + 595.60 13.719 13.722 13.852 0.275 -1.893 1.607 0.275 -1.893 -3.041 0.442 -0.521 3.120 1.559 + 595.65 13.707 13.721 13.845 0.617 -1.849 1.595 0.617 -1.849 -2.948 0.983 -1.140 3.171 1.655 + 595.70 13.639 13.651 13.723 0.560 -1.407 1.527 0.560 -1.407 -2.148 0.855 -0.788 2.312 1.221 + 595.75 13.452 13.455 13.490 0.300 -0.965 1.339 0.300 -0.965 -1.293 0.402 -0.290 1.408 0.692 + 595.80 13.090 13.094 13.107 0.322 -0.581 0.977 0.322 -0.581 -0.568 0.315 -0.187 0.698 0.338 + 595.85 13.167 13.169 13.180 0.228 -0.531 1.055 0.228 -0.531 -0.560 0.240 -0.121 0.723 0.310 + 595.90 13.088 13.091 13.101 0.256 -0.507 0.976 0.256 -0.507 -0.494 0.249 -0.130 0.637 0.284 + 595.95 13.055 13.061 13.072 0.405 -0.536 0.942 0.405 -0.536 -0.505 0.381 -0.217 0.670 0.335 + 596.00 12.746 12.750 12.766 0.319 -0.635 0.633 0.319 -0.635 -0.402 0.202 -0.203 0.453 0.247 + 596.05 12.777 12.780 12.796 0.287 -0.637 0.664 0.287 -0.637 -0.423 0.190 -0.183 0.464 0.249 + 596.10 13.030 13.032 13.064 0.218 -0.916 0.917 0.218 -0.916 -0.840 0.200 -0.200 0.864 0.443 + 596.15 12.882 12.883 12.913 0.095 -0.885 0.770 0.095 -0.885 -0.681 0.073 -0.084 0.692 0.345 + 596.20 13.074 13.074 13.102 -0.009 -0.853 0.961 -0.009 -0.853 -0.820 -0.009 0.008 0.826 0.410 + 596.25 13.081 13.083 13.130 0.178 -1.114 0.969 0.178 -1.114 -1.079 0.173 -0.199 1.106 0.555 + 596.30 13.108 13.114 13.163 0.407 -1.129 0.995 0.407 -1.129 -1.123 0.405 -0.460 1.215 0.640 + 596.35 13.148 13.172 13.206 0.783 -0.956 1.036 0.783 -0.956 -0.990 0.811 -0.748 1.299 0.741 + 596.40 13.117 13.137 13.177 0.731 -1.026 1.004 0.731 -1.026 -1.030 0.734 -0.750 1.297 0.735 + 596.45 13.406 13.441 13.470 0.963 -0.881 1.294 0.963 -0.881 -1.139 1.246 -0.848 1.688 0.945 + 596.50 13.557 13.600 13.621 1.079 -0.763 1.444 1.079 -0.763 -1.101 1.559 -0.823 1.916 1.039 + 596.55 13.733 13.775 13.821 1.082 -1.123 1.620 1.082 -1.123 -1.819 1.754 -1.215 2.528 1.402 + 596.60 13.643 13.674 13.727 0.908 -1.205 1.531 0.908 -1.205 -1.845 1.390 -1.095 2.310 1.278 + 596.65 13.605 13.652 13.739 1.132 -1.540 1.493 1.132 -1.540 -2.299 1.689 -1.743 2.941 1.672 + 596.70 13.455 13.484 13.565 0.888 -1.481 1.342 0.888 -1.481 -1.988 1.192 -1.316 2.393 1.333 + 596.75 13.662 13.681 13.790 0.730 -1.727 1.549 0.730 -1.727 -2.674 1.130 -1.260 2.956 1.582 + 596.80 13.459 13.483 13.596 0.802 -1.752 1.346 0.802 -1.752 -2.359 1.080 -1.405 2.762 1.475 + 596.85 13.491 13.528 13.619 0.999 -1.575 1.378 0.999 -1.575 -2.170 1.377 -1.573 2.688 1.507 + 596.90 13.449 13.487 13.536 1.009 -1.160 1.336 1.009 -1.160 -1.550 1.349 -1.172 2.075 1.183 + 596.95 13.329 13.346 13.368 0.671 -0.761 1.217 0.671 -0.761 -0.926 0.816 -0.511 1.255 0.668 + 597.00 13.379 13.382 13.396 0.290 -0.607 1.266 0.290 -0.607 -0.768 0.367 -0.176 1.028 0.435 + 597.05 13.701 13.709 13.725 0.476 -0.673 1.588 0.476 -0.673 -1.069 0.756 -0.321 1.600 0.674 + 597.10 13.657 13.657 13.674 -0.125 -0.671 1.544 -0.125 -0.671 -1.036 -0.192 0.084 1.425 0.529 + 597.15 13.692 13.692 13.715 0.025 -0.801 1.579 0.025 -0.801 -1.264 0.039 -0.020 1.567 0.633 + 597.20 13.748 13.751 13.780 0.280 -0.886 1.636 0.280 -0.886 -1.449 0.458 -0.248 1.769 0.770 + 597.25 13.619 13.619 13.632 0.064 -0.598 1.506 0.064 -0.598 -0.901 0.096 -0.038 1.315 0.453 + 597.30 13.568 13.568 13.604 -0.142 -0.978 1.455 -0.142 -0.978 -1.423 -0.206 0.139 1.547 0.722 + 597.35 13.502 13.503 13.553 -0.189 -1.158 1.389 -0.189 -1.158 -1.609 -0.263 0.219 1.654 0.823 + 597.40 13.339 13.340 13.372 0.115 -0.933 1.226 0.115 -0.933 -1.144 0.141 -0.107 1.193 0.579 + 597.45 13.729 13.730 13.777 0.170 -1.147 1.616 0.170 -1.147 -1.853 0.275 -0.195 1.977 0.942 + 597.50 13.821 13.821 13.837 -0.018 -0.659 1.708 -0.018 -0.659 -1.125 -0.031 0.012 1.676 0.563 + 597.55 14.277 14.278 14.302 0.161 -0.835 2.164 0.161 -0.835 -1.808 0.349 -0.135 2.704 0.923 + 597.60 14.225 14.225 14.258 0.012 -0.976 2.112 0.012 -0.976 -2.061 0.026 -0.012 2.706 1.031 + 597.65 14.203 14.209 14.236 0.399 -0.879 2.090 0.399 -0.879 -1.838 0.835 -0.351 2.651 1.025 + 597.70 14.141 14.141 14.174 0.003 -0.970 2.028 0.003 -0.970 -1.968 0.006 -0.003 2.528 0.984 + 597.75 13.946 13.948 13.956 0.251 -0.480 1.833 0.251 -0.480 -0.880 0.460 -0.120 1.826 0.500 + 597.80 14.076 14.083 14.090 0.449 -0.436 1.963 0.449 -0.436 -0.856 0.882 -0.196 2.123 0.622 + 597.85 13.809 13.812 13.815 -0.276 -0.303 1.696 -0.276 -0.303 -0.514 -0.468 0.084 1.523 0.350 + 597.90 13.588 13.588 13.590 -0.069 -0.226 1.475 -0.069 -0.226 -0.333 -0.102 0.016 1.116 0.174 + 597.95 13.428 13.429 13.432 0.123 0.307 1.315 0.123 0.307 0.404 0.162 0.038 0.920 0.219 + 598.00 13.368 13.369 13.377 0.094 0.471 1.256 0.094 0.471 0.591 0.117 0.044 0.903 0.302 + 598.05 13.157 13.158 13.170 0.082 0.578 1.045 0.082 0.578 0.603 0.086 0.047 0.716 0.306 + 598.10 13.144 13.144 13.145 0.111 0.106 1.031 0.111 0.106 0.109 0.114 0.012 0.543 0.079 + 598.15 13.034 13.034 13.037 0.090 -0.276 0.921 0.090 -0.276 -0.254 0.083 -0.025 0.466 0.134 + 598.20 13.067 13.067 13.068 0.057 -0.145 0.954 0.057 -0.145 -0.138 0.055 -0.008 0.467 0.074 + 598.25 13.058 13.059 13.062 0.135 -0.267 0.945 0.135 -0.267 -0.252 0.128 -0.036 0.492 0.143 + 598.30 12.987 12.989 12.993 0.201 -0.338 0.875 0.201 -0.338 -0.295 0.176 -0.068 0.460 0.175 + 598.35 13.060 13.061 13.061 0.148 -0.044 0.947 0.148 -0.044 -0.042 0.140 -0.007 0.461 0.073 + 598.40 13.128 13.128 13.129 0.044 0.140 1.015 0.044 0.140 0.142 0.045 0.006 0.526 0.074 + 598.45 13.284 13.284 13.286 0.124 0.183 1.171 0.124 0.183 0.214 0.145 0.023 0.710 0.130 + 598.50 12.978 12.980 12.982 -0.208 -0.221 0.865 -0.208 -0.221 -0.192 -0.180 0.046 0.421 0.134 + 598.55 12.766 12.774 12.777 -0.457 -0.286 0.653 -0.457 -0.286 -0.187 -0.299 0.131 0.359 0.188 + 598.60 12.845 12.852 12.852 -0.411 -0.064 0.732 -0.411 -0.064 -0.047 -0.301 0.026 0.354 0.153 + 598.65 13.055 13.063 13.063 -0.457 -0.022 0.942 -0.457 -0.022 -0.021 -0.431 0.010 0.548 0.216 + 598.70 12.853 12.856 12.858 -0.279 0.256 0.740 -0.279 0.256 0.189 -0.206 -0.071 0.345 0.144 + 598.75 12.769 12.771 12.776 -0.199 0.341 0.657 -0.199 0.341 0.224 -0.131 -0.068 0.294 0.134 + 598.80 12.925 12.926 12.937 -0.194 0.536 0.812 -0.194 0.536 0.435 -0.157 -0.104 0.492 0.237 + 598.85 13.102 13.106 13.110 -0.328 0.336 0.989 -0.328 0.336 0.332 -0.324 -0.110 0.599 0.239 + 598.90 13.128 13.143 13.143 -0.612 -0.094 1.016 -0.612 -0.094 -0.096 -0.621 0.058 0.707 0.315 + 598.95 12.914 12.924 12.928 -0.517 0.312 0.801 -0.517 0.312 0.250 -0.414 -0.161 0.503 0.255 + 599.00 13.133 13.138 13.138 -0.368 -0.001 1.020 -0.368 -0.001 -0.002 -0.375 0.001 0.588 0.188 + 599.05 13.246 13.252 13.254 -0.389 0.197 1.134 -0.389 0.197 0.223 -0.441 -0.077 0.738 0.250 + 599.10 13.277 13.277 13.278 -0.097 0.044 1.164 -0.097 0.044 0.052 -0.113 -0.004 0.683 0.062 + 599.15 13.725 13.725 13.725 -0.022 0.159 1.612 -0.022 0.159 0.256 -0.035 -0.003 1.312 0.129 + 599.20 13.804 13.805 13.805 -0.174 -0.070 1.691 -0.174 -0.070 -0.118 -0.294 0.012 1.448 0.159 + 599.25 13.764 13.765 13.765 -0.193 -0.089 1.651 -0.193 -0.089 -0.148 -0.319 0.017 1.385 0.176 + 599.30 14.144 14.145 14.154 -0.189 -0.494 2.031 -0.189 -0.494 -1.003 -0.384 0.093 2.203 0.539 + 599.35 13.987 13.987 14.023 0.111 -0.991 1.874 0.111 -0.991 -1.857 0.209 -0.110 2.253 0.936 + 599.40 13.701 13.701 13.735 0.076 -0.961 1.588 0.076 -0.961 -1.526 0.121 -0.073 1.726 0.766 + 599.45 13.692 13.692 13.707 0.134 -0.646 1.579 0.134 -0.646 -1.019 0.211 -0.086 1.464 0.522 + 599.50 13.436 13.442 13.460 0.410 -0.709 1.323 0.410 -0.709 -0.937 0.543 -0.291 1.210 0.561 + 599.55 13.435 13.435 13.447 0.131 -0.567 1.322 0.131 -0.567 -0.749 0.174 -0.075 1.043 0.386 + 599.60 13.671 13.672 13.696 0.198 -0.813 1.558 0.198 -0.813 -1.267 0.309 -0.161 1.564 0.657 + 599.65 13.594 13.598 13.613 0.299 -0.655 1.481 0.299 -0.655 -0.970 0.443 -0.196 1.356 0.542 + 599.70 13.668 13.677 13.696 0.506 -0.720 1.555 0.506 -0.720 -1.119 0.787 -0.364 1.596 0.708 + 599.75 13.388 13.399 13.411 0.544 -0.562 1.276 0.544 -0.562 -0.716 0.693 -0.305 1.119 0.521 + 599.80 13.403 13.440 13.445 0.994 -0.356 1.290 0.994 -0.356 -0.459 1.283 -0.354 1.390 0.704 + 599.85 13.466 13.486 13.492 0.738 -0.416 1.353 0.738 -0.416 -0.563 0.998 -0.307 1.274 0.593 + 599.90 13.488 13.501 13.505 0.594 -0.346 1.375 0.594 -0.346 -0.476 0.817 -0.206 1.182 0.484 + 599.95 13.519 13.522 13.529 0.254 -0.430 1.406 0.254 -0.430 -0.605 0.357 -0.109 1.114 0.355 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py new file mode 100644 index 0000000000..3b57e7b111 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py @@ -0,0 +1,6 @@ +"""Initialize everything""" +# import os +# ROOT = os.path.abspath(os.path.dirname(__file__)) +# with open(os.path.join(ROOT, "..", "VERSION")) as version_file: +# VERSION = version_file.read().strip() +# __version__ = VERSION diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py new file mode 100644 index 0000000000..05f369f9dd --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py @@ -0,0 +1,86 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from parse import * +import re, os, platform +from pyFAST.input_output.fast_output_file import FASTOutputFile + +######################################################################################################################################### +## User inputs +# Save plot and/or data? +save_fig = False +save_data = False +fig_ext = '.png' + +# Number of revolutions (n) to average spectra +n = 1 + +######################################################################################################################################### +## Paths to files +if platform.system() == 'Windows': + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +else: + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_1.out' +OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' +locfilename = FAST_directory + os.sep + 'AA_ObserverLocations_Map.dat' +output_dir = os.path.dirname( os.path.realpath(__file__) ) +outputfilename = output_dir + os.sep + "data_output1" + +######################################################################################################################################### +## Read in data, manipulate it, and plot it +# reads in file data +AA_1 = FASTOutputFile(AAfilename).toDataFrame() +OF = FASTOutputFile(OFfilename).toDataFrame() +location = pd.read_csv(locfilename,delimiter='\s+',skiprows=[0,1],names=['x','y','z']) + +# determine number of observers +num_obs = AA_1.shape[1]-1 + +# calculate sample time for n revolutions +rpm = OF[["RotSpeed_[rpm]"]].mean()[0] +yaw = OF[["YawPzn_[deg]"]].mean()[0] / 180. * np.pi +time_revs = n*60/rpm +tot_time = AA_1["Time_[s]"].max() +if time_revs < tot_time: + sample_time = tot_time - time_revs +else: + print("Error: Time for number of revolutions exceeds simulation time. Reduce n.") + raise SystemExit('') + +# slice AA dataframe for t > sample_time +AA_1 = AA_1[AA_1["Time_[s]"] > sample_time] +AA_1=AA_1.drop("Time_[s]",axis=1) + +# average P over rotor revolution +AA_1 = AA_1.mean() + +# merge location info with SPL info +AA_1=AA_1.reset_index() +AA_1=AA_1.drop("index",axis=1) +AA_1=pd.merge(location,AA_1,left_index=True,right_index=True) +AA_1=AA_1.rename(index=str,columns={0:"SPL"}) + +# contour plot of SPL for each location +if num_obs < 3: + print("Error: Need at least 3 observers to generate contour.") +else: + x=AA_1['x']; + y=AA_1['y']; + z=AA_1['SPL']; + fs = 10 + fig,ax=plt.subplots() + ax.set_aspect('equal') + ax.set_xlabel('x [m]', fontsize=fs+2, fontweight='bold') + ax.set_ylabel('y [m]', fontsize=fs+2, fontweight='bold') + tcf=ax.tricontourf(x,y,z, range(58, 84, 1)) + fig.colorbar(tcf,orientation="vertical").set_label(label = 'Overall SPL [dB]', fontsize=fs+2,weight='bold') + if save_fig == True: + fig_name = 'directivity_map' + fig.savefig(output_dir + os.sep + fig_name + fig_ext) + plt.show() + +# export to csv +if save_data == True: + AA_1.to_csv(r'{}-data.csv'.format(outputfilename)) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py new file mode 100644 index 0000000000..ec1f928f54 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py @@ -0,0 +1,112 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from parse import * +import re, os, platform +from pyFAST.input_output.fast_output_file import FASTOutputFile + +######################################################################################################################################### +## User inputs +# Save plot and/or data? +save_fig = False +save_data = False +fig_ext = '.png' + +# Number of revolutions (n) to average spectra +n = 1 + +######################################################################################################################################### +## Paths to files +if platform.system() == 'Windows': + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +else: + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_3.out' +OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' +output_dir = os.path.dirname( os.path.realpath(__file__) ) +outputfilename = output_dir + os.sep + "data_output2" + +######################################################################################################################################### +## Read in data, manipulate it, and plot it + +# Read in file data +AA_3 = FASTOutputFile(AAfilename).toDataFrame() +OF = FASTOutputFile(OFfilename).toDataFrame() + +# Determine number of observers +num_obs = int((AA_3.shape[1]-1)/(7*34)) + +# Calculate sample time for n revolutions +rpm = OF[["RotSpeed_[rpm]"]].mean()[0] +time_revs = n*60/rpm +tot_time = AA_3["Time_[s]"].max() +if time_revs < tot_time: + sample_time = tot_time - time_revs +else: + print("Error: Time for number of revolutions exceeds simulation time. Reduce n.") + raise SystemExit('') + +# Slice AA dataframe for t > sample_time +AA_3 = AA_3[AA_3["Time_[s]"] > sample_time] +AA_3=AA_3.drop("Time_[s]",axis=1) + +# Average SPL for each observer +AA_3 = AA_3.mean() + +# Manipulate PD dataframes +# convert to dataframe with appropriate columns +cols = ['Observer','Mechanism','Frequency (Hz)','SPL (dB)'] +aa_3 = pd.DataFrame(columns=cols) +for i in AA_3.index: + nums = re.findall(r"[-+]?\d*\.\d+|\d+",i) + aa_3.loc[len(aa_3)] = [nums[0],nums[2],nums[1],AA_3[i]] + +AA_3 = aa_3 + +# rename mechanism for legend +for i in range(0,AA_3.last_valid_index()+1): + if AA_3.loc[i,"Mechanism"]=='1': + AA_3.loc[i,"Mechanism"]="LBL-VS" + if AA_3.loc[i,"Mechanism"]=='2': + AA_3.loc[i,"Mechanism"]="TBL-TE-PS" + if AA_3.loc[i,"Mechanism"]=='3': + AA_3.loc[i,"Mechanism"]="TBL-TE-SS" + if AA_3.loc[i,"Mechanism"]=='4': + AA_3.loc[i,"Mechanism"]="TBL-TE-AoA" + if AA_3.loc[i,"Mechanism"]=='5': + AA_3.loc[i,"Mechanism"]="TE Bluntness" + if AA_3.loc[i,"Mechanism"]=='6': + AA_3.loc[i,"Mechanism"]="Tip Vortex" + if AA_3.loc[i,"Mechanism"]=='7': + AA_3.loc[i,"Mechanism"]="TI" + +AA_3["Observer"]=AA_3["Observer"].apply(pd.to_numeric) +AA_3["Frequency (Hz)"]=AA_3["Frequency (Hz)"].apply(pd.to_numeric) +AA_3["SPL (dB)"]=AA_3["SPL (dB)"].apply(pd.to_numeric) + + +# Plot spectra +fs = 10 +for j in range(num_obs): + fig,ax=plt.subplots() + plt.xscale('log') + ax.set_xlabel('Frequency (Hz)', fontsize=fs+2, fontweight='bold') + ax.set_ylabel('SPL (dB)', fontsize=fs+2, fontweight='bold') + for i in range(7): + plt.plot(AA_3["Frequency (Hz)"][j*34*7 + i : j*34*7 + i + 34 * 7:7], AA_3["SPL (dB)"][j*34*7 + i : j*34*7 + i + 34 * 7:7], label = AA_3.loc[i,"Mechanism"]) + ax.set_title('Observer ' + str(j), fontsize=fs+2, fontweight='bold') + plt.grid(color=[0.8,0.8,0.8], linestyle='--') + ax.set_ylim(0,) + ax.legend() + if save_fig == True: + fig_name = 'spectra_Obs' + str(j) + fig_ext + fig.savefig(output_dir + os.sep + fig_name) + plt.show() + +# Export to csv +if save_data == True: + AA_3.to_csv(r'{}-data.csv'.format(outputfilename)) + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py new file mode 100644 index 0000000000..bc7b0a2966 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py @@ -0,0 +1,92 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from parse import * +import re, os, platform +import matplotlib.colors +from pyFAST.input_output.fast_output_file import FASTOutputFile + +######################################################################################################################################### +## User inputs +# Save plot and/or data? +save_fig = False +save_data = False +fig_ext = '.png' +R = 65. +R_hub = 2. + +# Number of revolutions (n) to average spectra +n = 1 + +######################################################################################################################################### +## Paths to files +if platform.system() == 'Windows': + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +else: + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_4.out' +OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' +locfilename = FAST_directory + os.sep + 'AA_ObserverLocations.dat' +output_dir = os.path.dirname( os.path.realpath(__file__) ) +outputfilename = output_dir + os.sep + "data_output4" + +######################################################################################################################################### + + +location = pd.read_csv(locfilename,delimiter='\s+',skiprows=[0,1],names=['x','y','z']) + + +AA_1 = FASTOutputFile(AAfilename).toDataFrame() +OF = FASTOutputFile(OFfilename).toDataFrame() + + +with open(AAfilename, 'r') as f: + f.readline() + f.readline() + f.readline() + n_obs = int(f.readline().split()[-1]) + n_blades = int(f.readline().split()[-1]) + n_nodes = int(f.readline().split()[-1]) +f.close() + +k = np.ones(n_obs) +for i in range(n_obs): + if location['x'][i] < 0: + k[i] = -1 + +phi = OF['Azimuth_[deg]'] / 180. * np.pi +phi_interp = np.interp(AA_1['Time_[s]'], OF['Time_[s]'], phi) +index = [] +for i in range(1, len(phi_interp)): + if phi_interp[i] < phi_interp[i-1]: + index.append(i) + +y_b = np.linspace(R_hub, R, n_nodes) +x_b = np.zeros_like(y_b) + +n_pts = index[-1] - index[-2] + +for j in range(n_obs): + x = np.zeros((n_pts,n_nodes)) + y = np.zeros((n_pts,n_nodes)) + + for i in range(n_pts): + x[i,:] = x_b * np.cos(k[j]*phi_interp[i + index[-2]]) - y_b * np.sin(k[j]*phi_interp[i + index[-2]]) + y[i,:] = x_b * np.sin(k[j]*phi_interp[i + index[-2]]) + y_b * np.cos(k[j]*phi_interp[i + index[-2]]) + + z = np.array(AA_1)[index[-2]:index[-1], 1+j:1 + 30*n_obs + j:n_obs] + fs = 10 + fig,ax=plt.subplots() + ax.set_aspect('equal') + ax.set_xlabel('y [m]', fontsize=fs+2, fontweight='bold') + ax.set_ylabel('z [m]', fontsize=fs+2, fontweight='bold') + ax.set_title('Observer ' + str(j), fontsize=fs+2, fontweight='bold') + tcf=ax.tricontourf(x.flatten(),y.flatten(),z.flatten(), range(20,75)) + fig.colorbar(tcf,orientation="vertical").set_label(label = 'Overall SPL [dB]', fontsize=fs+2,weight='bold') + if save_fig == True: + fig_name = 'rotor_map_Obs' + str(j) + fig_ext + fig.savefig(output_dir + os.sep + fig_name) + plt.show() + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py new file mode 100644 index 0000000000..d5fc2afaae --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py @@ -0,0 +1,87 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from parse import * +import re, os, platform +from pyFAST.input_output.fast_output_file import FASTOutputFile + +######################################################################################################################################### +## User inputs +# Save plot and/or data? +save_fig = False +save_data = False +fig_ext = '.png' + +# Number of revolutions (n) to average spectra +n = 1 + +######################################################################################################################################### +## Paths to files +if platform.system() == 'Windows': + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +else: + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_2.out' +OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' +output_dir = os.path.dirname( os.path.realpath(__file__) ) +outputfilename = output_dir + os.sep + "data_output2" + +######################################################################################################################################### +## Read in data, manipulate it, and plot it + +# Read in file data +AA_2 = FASTOutputFile(AAfilename).toDataFrame() +OF = FASTOutputFile(OFfilename).toDataFrame() + +# Determine number of observers +num_obs = int((AA_2.shape[1]-1)/34) + +# Calculate sample time for n revolutions +rpm = OF[["RotSpeed_[rpm]"]].mean()[0] +time_revs = n*60/rpm +tot_time = AA_2["Time_[s]"].max() +if time_revs < tot_time: + sample_time = tot_time - time_revs +else: + print("Error: Time for number of revolutions exceeds simulation time. Reduce n.") + raise SystemExit('') + +# Slice AA dataframe for t > sample_time +AA_2 = AA_2[AA_2["Time_[s]"] > sample_time] +AA_2=AA_2.drop("Time_[s]",axis=1) + +# Average SPL for each observer +AA_2 = AA_2.mean() + +# Manipulate PD dataframes +cols = ['Observer','Frequency (Hz)','SPL (dB)'] +aa_2 = pd.DataFrame(columns=cols) +for i in AA_2.index: + nums = re.findall(r"[-+]?\d*\.\d+|\d+",i) + aa_2.loc[len(aa_2)] = [nums[0],nums[1],AA_2[i]] +AA_2 = aa_2 +AA_2["Frequency (Hz)"]=AA_2["Frequency (Hz)"].apply(pd.to_numeric) +AA_2["SPL (dB)"]=AA_2["SPL (dB)"].apply(pd.to_numeric) + +# Plot spectra +fs = 10 +fig,ax=plt.subplots() +plt.xscale('log') +ax.set_xlabel('Frequency (Hz)', fontsize=fs+2, fontweight='bold') +ax.set_ylabel('SPL (dB)', fontsize=fs+2, fontweight='bold') +for i in range(num_obs): + plt.plot(AA_2["Frequency (Hz)"][i*34:i*34 + 34], AA_2["SPL (dB)"][i*34:i*34 + 34], label = 'Observer ' + str(i)) +plt.grid(color=[0.8,0.8,0.8], linestyle='--') +ax.legend() +if save_fig == True: + fig_name = 'spectra' + fig_ext + fig.savefig(output_dir + os.sep + fig_name) +plt.show() + +# Export to csv +if save_data == True: + AA_2.to_csv(r'{}-data.csv'.format(outputfilename)) + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py new file mode 100644 index 0000000000..f3c47be7b8 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py @@ -0,0 +1,18 @@ +import os +import platform +import subprocess + +if platform.system() == 'Windows': + FAST_exe = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'build' + os.sep + 'glue-codes' + os.sep + 'openfast_x64.exe' + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +else: + FAST_exe = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'build' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'openfast' + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' + + +FAST_InputFile = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.fst' +exec_str = [] +exec_str.append(FAST_exe) +exec_str.append(FAST_InputFile) + +subprocess.call(exec_str) \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py new file mode 100644 index 0000000000..ba371bcd9d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py @@ -0,0 +1,144 @@ +import numpy as np +import os, shutil, platform + +# Path to XFoil +path2xfoil = 'Xfoil/bin/xfoil' + +## inputs +if platform.system() == 'Windows': + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +else: + FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' +folder_inputs = FAST_directory + os.sep + 'Airfoils' +folder_outputs = folder_inputs +n_stations = 30 +aoa = np.linspace(-5., 25., 30) # List of angles of attack +Re = np.array([0.5e+06, 1.e+06, 5.e+06, 10.e+06]) # List of Reynolds numbers +TEoffset = 1 # Number of nodes away from the TE where the BL properties are extracted, TEoffset = 0 is prone to convergence issues +trip = 0 # Flag to set free (0) or force (1) +TEAngle = 10.*np.ones(n_stations) # Distribution of trailing edge angles for BPM trailing edge bluntness noise model +TEThick = 0.005*np.ones(n_stations) # Distribution of trailing edge angles for BPM trailing edge bluntness noise model + +## code + +inputs_list = [] +outputs_list = [] +for i in range(n_stations): + if i < 10: + inputs_list.append(folder_inputs + os.sep + 'AF0' + str(i) + '_Coords.txt') # List of files containing the airfoil coordinates + else: + inputs_list.append(folder_inputs + os.sep + 'AF' + str(i) + '_Coords.txt') # List of files containing the airfoil coordinates + outputs_list.append(folder_outputs + os.sep + 'AF' + str(i) + '_BL.txt') # List of files containing the boundary layer characteristics + + +for id in range(5,len(inputs_list)): + print('Compute BL properties station ' + str(id)) + filename = inputs_list[id] + coord = np.loadtxt(filename, skiprows = 9) + np.savetxt('airfoil.dat', coord) + Ue_Vinf_SS = np.zeros((len(aoa),len(Re))) + Ue_Vinf_PS = np.zeros((len(aoa),len(Re))) + Dstar_SS = np.zeros((len(aoa),len(Re))) + Dstar_PS = np.zeros((len(aoa),len(Re))) + Theta_SS = np.zeros((len(aoa),len(Re))) + Theta_PS = np.zeros((len(aoa),len(Re))) + Cf_SS = np.zeros((len(aoa),len(Re))) + Cf_PS = np.zeros((len(aoa),len(Re))) + H_SS = np.zeros((len(aoa),len(Re))) + H_PS = np.zeros((len(aoa),len(Re))) + + + for k in range(len(Re)): + fid = open('inputxfoil.vbs','w') + fid.write('\n') + fid.write('load airfoil.dat\n') + fid.write('pane\n') + fid.write('plop\n') + fid.write('g\n') + fid.write('%f\n' % 0.8) + fid.write('\n') + fid.write('oper\n') + fid.write('visc %1.3e\n' % (Re[k])) + fid.write('iter\n') + fid.write('%u\n' % 200) + + if trip == 1: + fid.write('vpar\n') + fid.write('xtr 0.05 0.1\n') + fid.write('\n') + + for j in range(len(aoa)): + fid.write('alfa %3.2f\n' % aoa[j]) + fid.write('dump airfoil.bl%u\n' % j) + fid.write('\n') + fid.write('quit\n') + fid.close() + + os.system(path2xfoil + ' < inputxfoil.vbs') + + os.remove('inputxfoil.vbs') + + + for j in range(len(aoa)): + s_counter=0 + i_TE_PS = [] + bl_data = np.array([]) + text_file = 'airfoil.bl' + str(j) + with open(text_file) as xfile: + xfile.readline() + for line in xfile: + data = np.array([float(x) for x in line.strip().split()]) + if s_counter==0: + bl_data = data + else: + if len(data) == 12: + bl_data = np.vstack((bl_data,data)) + elif len(data) == 8: + data = np.hstack((data, np.zeros(4))) + if i_TE_PS == []: + i_TE_PS = s_counter - 1 + else: + pass + + s_counter +=1 + + + Ue_Vinf_SS[j,k] = bl_data[0 + TEoffset , 3] + Ue_Vinf_PS[j,k] = bl_data[i_TE_PS - TEoffset , 3] + Dstar_SS[j,k] = bl_data[0 + TEoffset , 4] + Dstar_PS[j,k] = bl_data[i_TE_PS - TEoffset , 4] + Theta_SS[j,k] = bl_data[0 + TEoffset , 5] + Theta_PS[j,k] = bl_data[i_TE_PS - TEoffset , 5] + Cf_SS[j,k] = bl_data[0 + TEoffset , 6] + Cf_PS[j,k] = bl_data[i_TE_PS - TEoffset , 6] + H_SS[j,k] = bl_data[0 + TEoffset , 7] + H_PS[j,k] = bl_data[i_TE_PS - TEoffset , 7] + + os.remove('airfoil.bl' + str(j)) + + os.remove('airfoil.dat') + + # Compute Delta (nominal boundary layer thickness) from Dstar (boundary layer displacement thickness), Theta (boundary layer momentum thickness), and H (kinematic shape factor) + Delta_SS = Theta_SS*(3.15+1.72/(H_SS-1.))+Dstar_SS + Delta_PS = Theta_PS*(3.15+1.72/(H_PS-1.))+Dstar_PS + + fid=open(outputs_list[id],'w') + fid.write('! Boundary layer characteristics at the trailing edge for the airfoil coordinates of %s\n' % filename) + fid.write('! Legend: aoa - angle of attack (deg), Re - Reynolds number (-, millions), PS - pressure side, SS - suction side, Ue_Vinf - edge velocity (-), Dstar - displacement thickness (-), Delta - nominal boundary layer thickness (-) Cf - friction coefficient (-)\n') + fid.write('%u \t ReListBL - Number of Reynolds numbers (it corresponds to the number of tables)\n' % len(Re)) + fid.write('%u \t aoaListBL - Number of angles of attack (it corresponds to the number of rows in each table)\n' % len(aoa)) + for k in range(len(Re)): + fid.write('%1.2f \t - Re\n' % (Re[k]*1.e-6)) + fid.write('aoa \t \t Ue_Vinf_SS \t Ue_Vinf_PS \t Dstar_SS \t \t Dstar_PS \t \t Delta_SS \t \t Delta_PS \t \t Cf_SS \t \t Cf_PS\n') + fid.write('(deg) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-)\n') + for j in range(len(aoa)): + fid.write('%1.5f \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \n' % (aoa[j], Ue_Vinf_SS[j,k], Ue_Vinf_PS[j,k], Dstar_SS[j,k], Dstar_PS[j,k], Delta_SS[j,k], Delta_PS[j,k], Cf_SS[j,k], Cf_PS[j,k])) + + fid.write('\n') + fid.write('! Inputs to trailing edge bluntness noise model\n') + fid.write('%1.5f \t TEAngle - Angle of the trailing edge (deg)\n'%TEAngle[id]) + fid.write('%1.5f \t TEThick - Finite thickness of the trailing edge (deg)\n'%TEThick[id]) + + fid.close() + + \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py new file mode 100644 index 0000000000..9b3d5a975c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py @@ -0,0 +1,506 @@ +import numpy as np +import pandas as pd +from .Polar import Polar as Pol + + +# --------------------------------------------------------------------------------} +# --- Wagner function +# --------------------------------------------------------------------------------{ +A1_Jones, A2_Jones, b1_Jones, b2_Jones = 0.165 , 0.335 , 0.0455 , 0.3 +A1_FAST, A2_FAST, b1_FAST, b2_FAST = 0.3 , 0.7 , 0.14 , 0.53 + +def wagner(tau_t, constants=None, A1=None, A2=None, b1=None, b2=None): + """ + Lift coefficient, Cl, from Wagner function + INPUTS: + - tau_t: dimensionless time + - constants: string in ['Jones', 'OpenFAST'] or None + - A1, A2, b1, b2 : wagner constants, should be provided if constants is None + + Reference: Wagner - R.T Jones approximation (Jones 1938) + """ + if constants in ['Jones','HAWC2']: # R.T Jones approximation to Wagner's function (Jones 1938) + A1, A2, b1, b2 = A1_Jones, A2_Jones, b1_Jones, b2_Jones + elif constants=='OpenFAST': + A1, A2, b1, b2 = A1_FAST, A2_FAST, b1_FAST, b2_FAST + elif constants is None: + if all([A1, A2, b1, b2]): + pass # all good + else: + raise Exception('Provide A1, A2, b1, b2 if constants is None') + + + else: + raise NotImplementedError('Constants {}'.format(constants)) + + Cl = 1-A1_Jones*np.exp(-b1_Jones*tau_t)-A2_Jones*np.exp(-b2_Jones*tau_t) + + return Cl + + +# --------------------------------------------------------------------------------} +# --- MHH dynamic stall +# --------------------------------------------------------------------------------{ +def dynstall_mhh_sim(time, u, p, x0=None, prefix='', method='continuous'): + """ Perform simulation using the MHH/HGM dynamic stall model + Reference: + Hansen Gaunaa Madsen - Riso-R-1354 (2004) A Beddoes-Lieshman type dynamic stall model + + INPUTS: + - time: time vector + - u: dictionary of input functions of time + - p: dictionary of parameters + - x0: initial conditions for the 4 states of the model. If None, the steady steady values are used + - method: 'continuous' or 'discrete' to chose a formulation + - prefix: prefix used for channel names of the dataframe. Use 'AB1N001' to match OpenFAST. + OUTPUTS: + - df: dataframe with outputs similar to UA module of OpenFAST + """ + from scipy.integrate import solve_ivp + + # --- Initial conditions for states + if x0 is None: + # x0 = [0,0,0,0] + x0 = dynstall_mhh_steady(0,u,p) + + # --- Time Integration of states + if method=='continuous': + sol = solve_ivp(lambda t,x: dynstall_mhh_dxdt(t,x,u,p), t_span=[time[0],time[-1]], y0=x0, t_eval=time) + y = sol.y + elif method=='discrete': + y = np.zeros((8,len(time))) + xd = np.zeros(8) + xd[:4] = x0 + xd[4] = u['alpha_34'](time[0]) + xd[5] = 0 # Cl_p + xd[6] = 1.0 # fp + xd[7] = u['U'](time[0]) # U + y[:,0] = xd + for it,t in enumerate(time[1:]): + dt = t - time[it] # Note: time[it] is in fact t-dt + xd = dynstall_mhh_update_discr(t, dt, xd, u, p) + y[:,it+1] = xd + else: + raise NotImplementedError('Method: {}'.format(method)) + + # --- Compute outputs + df=pd.DataFrame() + #print('>>> HACK time 0.002') + df['Time_[s]'] = time + df[prefix + 'Vrel_[m/s]'] = np.zeros(len(time)) + df[prefix + 'alpha_34_[deg]'] = np.zeros(len(time)) + df[prefix + 'Cl_[-]'] = np.zeros(len(time)) + df[prefix + 'Cd_[-]'] = np.zeros(len(time)) + df[prefix + 'Cm_[-]'] = np.zeros(len(time)) + df[prefix + 'Tu_[-]'] = np.zeros(len(time)) + df[prefix + 'alphaE_[deg]'] = np.zeros(len(time)) + df[prefix + 'alphaF_[deg]'] = np.zeros(len(time)) + df[prefix + 'Clp_[-]'] = np.zeros(len(time)) + df[prefix + 'fs_aE_[-]'] = np.zeros(len(time)) + df[prefix + 'fs_aF_[-]'] = np.zeros(len(time)) + df['torsrate'] = np.zeros(len(time)) + df['alpha_34'] = np.zeros(len(time)) + df['U'] = np.zeros(len(time)) + df['T_0'] = np.zeros(len(time)) + df['x1'] = y[0,:] + df['x2'] = y[1,:] + df['x3'] = y[2,:] + df['x4'] = y[3,:] + df['alphaE'] = np.zeros(len(time)) + df['alphaF'] = np.zeros(len(time)) + df['ClP'] = np.zeros(len(time)) + for it,t in enumerate(time): + Cl, Cd, Cm, alphaE, Tu, fs_aE, Cl_fs, alpha_34, omega, U, alphaF, Clp, fs_aF = dynstall_mhh_outputs(t, y[:,it], u, p, calcOutput=True) + df.loc[it,prefix + 'Vrel_[m/s]'] = U + df.loc[it,prefix + 'alpha_34_[deg]'] = alpha_34*180/np.pi + df.loc[it,prefix + 'Cl_[-]'] = Cl + df.loc[it,prefix + 'Cd_[-]'] = Cd + df.loc[it,prefix + 'Cm_[-]'] = Cm + df.loc[it,prefix + 'Tu_[-]'] = Tu + df.loc[it,prefix + 'alphaE_[deg]'] = alphaE*180/np.pi + df.loc[it,prefix + 'alphaF_[deg]'] = alphaF*180/np.pi + df.loc[it,prefix + 'omega_[deg/s]'] = omega*180/np.pi + df.loc[it,prefix + 'Clp_[-]'] = Clp + df.loc[it,prefix + 'fs_aF_[-]'] = fs_aF + df.loc[it,prefix + 'fs_aE_[-]'] = fs_aE + df.loc[it,'U'] = U + df.loc[it,'alpha_34'] = alpha_34 + df.loc[it,'T_0'] = Tu + df.loc[it,'torsrate'] = omega + df.loc[it,'alphaE'] = alphaE + df.loc[it,'ClP'] = Clp + df.loc[it,'alphaF'] = alphaF + df[prefix + 'x1_[rad]'] = y[0,:] + df[prefix + 'x2_[rad]'] = y[1,:] + df[prefix + 'x3_[-]'] = y[2,:] + df[prefix + 'x4_[-]'] = y[3,:] + return df + + +def dynstall_mhh_param_from_polar(P, chord, Tf0=6.0, Tp0=1.5, A1=A1_Jones, A2=A2_Jones, b1=b1_Jones, b2=b2_Jones, constants='Jones', p=None): + if not isinstance(P,Pol): + raise Exception('Input should be an instance of the `Polar` class') + if not P._radians : + raise Exception('MHH dynamic stall implemented for polars in radians only') + + if constants in ['Jones','HAWC2']: + A1, A2, b1, b2 = A1_Jones, A2_Jones, b1_Jones, b2_Jones + Tf0 = 6.0 + Tp0 = 1.5 + elif constants=='OpenFAST': + A1, A2, b1, b2 = A1_FAST, A2_FAST, b1_FAST, b2_FAST + Tf0 = 3.0 + Tp0 = 1.7 + else: + raise NotImplementedError('Constants {}'.format(constants)) + + if p is None: + p=dict() + # Airfoil parameters + p['alpha0'] = P._alpha0 # TODO TODO requires compute params + p['Cla'] = P._linear_slope + if p['alpha0'] is None: + raise Exception('>>>> TODO need to compute params on polar for MHH dyn stall model') + if p['Cla'] is None: + raise Exception('>>>> TODO need to compute params on polar for MHH dyn stall model') + p['chord'] = chord + # Polar functions + p['F_st'] = P.fs_interp + p['Cl_fs'] = P.cl_fs_interp + p['Cl'] = P.cl_interp + p['Cd'] = P.cd_interp + p['Cm'] = P.cm_interp + # Dynamics constants + p['Tf0'] = Tf0 + p['Tp0'] = Tp0 + p['A1'] = A1 + p['A2'] = A2 + p['b1'] = b1 + p['b2'] = b2 + p['alpha0_in_x1x2'] = True + p['U_in_x1x2'] = False + p['scale_x1_x2'] = False + p['old_ClCd_dyn'] = True + return p + +def dynstall_mhh_dxdt(t,x,u,p): + """ Time derivative of states for continous formulation """ + # Inputs + U = u['U'](t) + U_dot = u['U_dot'](t) + omega = u['omega'](t) + alpha_34 = u['alpha_34'](t) + return dynstall_mhh_dxdt_simple(t, x, U, U_dot, omega, alpha_34, p) + +def dynstall_mhh_dxdt_simple(t, x, U, U_dot, omega, alpha_34, p): + """ Time derivative of states for continous formulation """ + # States + x1=x[0] # Downwash memory term 1 + x2=x[1] # Downwash memory term 2 + x3=x[2] # Clp', Lift coefficient with a time lag to the attached lift coeff + x4=x[3] # f'' , Final separation point function + # Parameters + alpha0 = p['alpha0'] + Cla = p['Cla'] + c = p['chord'] + A1 = p['A1'] + A2 = p['A2'] + b1 = p['b1'] + b2 = p['b2'] + F_st = p['F_st'] + # Variables derived from inputs + U = max(U, 0.01) + Tu = max(c/(2*U), 1e-4) # Eq. 23 + Tf = p['Tf0']*Tu # OLD was twice: Tf = p['Tf0']*c/U + Tp = p['Tp0']*Tu # OLD was twice: Tp = p['Tp0']*c/U + # Variables derived from states + if p['alpha0_in_x1x2']: + alphaE = alpha_34*(1-A1-A2)+ x1 + x2 # Eq. 12 + else: + alphaE = (alpha_34-alpha0)*(1-A1-A2)+ x1 + x2 + alpha0 # Eq. 12 + +# alphaE = u['alphaE'](t) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HACK HACK TODO TODO TODO TODO TODO + + Clp = Cla * (alphaE-alpha0) + np.pi * Tu * omega # Eq. 13 + alphaF = x3/Cla+alpha0 # p. 13 + fs_aF = F_st(alphaF) # p. 13 + if(fs_aF<0): + print('Problematic fs:',fs_aF) + x4 = np.clip(x4, 1e-16, 1.0) # Constraining x4 between 0 and 1 increases numerical stability + # State equation + xdot = [0]*4 + if p['alpha0_in_x1x2']: + xdot[0] = -1/Tu * (b1 + c * U_dot/(2*U**2)) * x1 + b1 * A1 / Tu * alpha_34 + xdot[1] = -1/Tu * (b2 + c * U_dot/(2*U**2)) * x2 + b2 * A2 / Tu * alpha_34 + else: + xdot[0] = -1/Tu * (b1 + c * U_dot/(2*U**2)) * x1 + b1 * A1 / Tu * (alpha_34-alpha0) + xdot[1] = -1/Tu * (b2 + c * U_dot/(2*U**2)) * x2 + b2 * A2 / Tu * (alpha_34-alpha0) + xdot[2] = -1/Tp * x3 + 1/Tp * Clp + xdot[3] = -1/Tf * x4 + 1/Tf * fs_aF + return xdot + + + +def dynstall_mhh_update_discr(t, dt, xd_old, u, p): + """ Update discrete states + NOTE: discrete states include additional discrete states + """ + # States + x1_old = xd_old[0] # Downwash memory term 1 + x2_old = xd_old[1] # Downwash memory term 2 + x3_old = xd_old[2] # Clp', Lift coefficient with a time lag to the attached lift coeff + x4_old = xd_old[3] # f'' , Final separation point function + alpha_34_old = xd_old[4] # + Cl_p_old = xd_old[5] # + fs_aF_old = xd_old[6] # + U_old = xd_old[7] # + xd = xd_old.copy() + # Inputs + U = u['U'](t) + U_dot = u['U_dot'](t) + omega = u['omega'](t) + alpha_34 = u['alpha_34'](t) + # Parameters + alpha0 = p['alpha0'] + Cla = p['Cla'] + c = p['chord'] + A1 = p['A1'] + A2 = p['A2'] + b1 = p['b1'] + b2 = p['b2'] + F_st = p['F_st'] + Cl_fs = p['Cl_fs'] + Cd = p['Cd'] + # Variables derived from inputs + U = max(U, 0.01) + Tu = max(c/(2*U), 1e-4) # Eq. 23 + T1 = Tu/b1 + T2 = Tu/b2 + Tp = p['Tp0']*Tu + Tf = p['Tf0']*Tu + # Temporarily remove alpha0 (not necessary) + if p['alpha0_in_x1x2']: + alphaQS_old = alpha_34_old + alphaQS = alpha_34 + else: + alphaQS_old = alpha_34_old - alpha0 + alphaQS = alpha_34 - alpha0 + + eps=1e-4 + exp_val1=np.exp( np.clip(-dt/T1, np.log(eps), 0 )) + exp_val2=np.exp( np.clip(-dt/T2, np.log(eps), 0 )) + exp_val3=np.exp( np.clip(-dt/Tp, np.log(eps), 0 )) + exp_val4=np.exp( np.clip(-dt/Tf, np.log(eps), 0 )) + if ['scale_x1_x2']: + xd[0] = x1_old*exp_val1 + (alpha_34*U-alpha_34_old*U_old) * A1/b1*Tu/dt*(1-exp_val1) * x4_old + xd[1] = x2_old*exp_val2 + (alpha_34*U-alpha_34_old*U_old) * A2/b2*Tu/dt*(1-exp_val2) * x4_old + # x1_ = x1_old*exp + (alpha*U -alpha_old*U_old ) *A1/b1*Tu/dt*(1-exp)*x4 + + else: + if p['U_in_x1x2']: + xd[0] = x1_old*exp_val1 + 0.5*(alphaQS_old+alphaQS) * A1*U*(1-exp_val1) + xd[1] = x2_old*exp_val2 + 0.5*(alphaQS_old+alphaQS) * A2*U*(1-exp_val2) + else: + xd[0] = x1_old*exp_val1 + 0.5*(alphaQS_old+alphaQS) * A1*(1-exp_val1) + xd[1] = x2_old*exp_val2 + 0.5*(alphaQS_old+alphaQS) * A2*(1-exp_val2) + # Effective angle of attack + if ['scale_x1_x2']: + alphaE = alpha_34 - (xd[0]+xd[1])/U + else: + if p['U_in_x1x2']: + alphaE = alphaQS*(1-A1-A2) + (xd[0]+xd[1])/U + else: + alphaE = alphaQS*(1-A1-A2) + (xd[0]+xd[1]) + if p['alpha0_in_x1x2']: + pass + else: + alphaE += alpha0 + alphaQS += alpha0 + +# alphaE = u['alphaE'](t) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HACK HACK TODO TODO TODO TODO TODO + + Cl_p = Cla*(alphaE-alpha0)+np.pi*Tu*omega + xd[2] = x3_old*exp_val3 + 0.5*(Cl_p_old+Cl_p)*(1-exp_val3) + alphaF = xd[2]/Cla + alpha0 + fs_aF = F_st(alphaF) # p. 13 + xd[3] = x4_old*exp_val4 + 0.5*(fs_aF_old + fs_aF)*(1-exp_val4) + # Store "old" values + xd[4] = alpha_34 + xd[5] = Cl_p + xd[6] = fs_aF + xd[7] = U + return xd + +def dynstall_mhh_steady(t, u, p): + """ Return steady state values for the 4 states of the MHH/HGM model""" + # Inputs + U = u['U'](t) + alpha_34 = u['alpha_34'](t) + return dynstall_mhh_steady_simple(U, alpha_34, p) + +def dynstall_mhh_steady_simple(U, alpha_34, p): + # Parameters + c = p['chord'] + alpha0 = p['alpha0'] + Cla = p['Cla'] + A1 = p['A1'] + A2 = p['A2'] + b1 = p['b1'] + b2 = p['b2'] + F_st = p['F_st'] + # Variables derived from inputs + U = max(U, 0.01) + Tu = max(c/(2*U), 1e-4) # Eq. 23 + # Steady states + if p['alpha0_in_x1x2']: + x1 = A1*alpha_34 + x2 = A2*alpha_34 + alphaE = alpha_34*(1-A1-A2) + x1 + x2 # Eq. 12 + else: + x1 = A1*(alpha_34 - alpha0) + x2 = A2*(alpha_34 - alpha0) + alphaE = (alpha_34-alpha0)*(1-A1-A2) + x1 + x2 + alpha0 # Eq. 12 + x3 = Cla * (alphaE-alpha0) + alphaF = x3/Cla+alpha0 # p. 13 + x4 = F_st(alphaF) + return [x1,x2,x3,x4] + +def dynstall_mhh_outputs(t, x, u, p, calcOutput=False): + # Inputs + U = u['U'](t) + U_dot = u['U_dot'](t) + alpha = u['alpha'](t) + omega = u['omega'](t) + alpha_34 = u['alpha_34'](t) + return dynstall_mhh_outputs_simple(t, x, U, U_dot, omega, alpha_34, p, calcOutput=calcOutput) + +def dynstall_mhh_outputs_simple(t, x, U, U_dot, omega, alpha_34, p, calcOutput=False): + # States + x1=x[0] # Downwash memory term 1 + x2=x[1] # Downwash memory term 2 + x3=x[2] # Clp', Lift coefficient with a time lag to the attached lift coeff + x4=x[3] # f'' , Final separation point function + # Parameters + alpha0 = p['alpha0'] + Cla = p['Cla'] + c = p['chord'] + A1 = p['A1'] + A2 = p['A2'] + b1 = p['b1'] + b2 = p['b2'] + F_st = p['F_st'] + Cl_fs = p['Cl_fs'] + Cl = p['Cl'] + Cd = p['Cd'] + Cm = p['Cm'] + + #Cd0 = fCd(alpha0) + #a_st = ?? + # Variables derived from inputs + U = max(U, 0.01) + Tu = max(c/(2*U), 1e-4) # Eq. 23 + + # Variables derived from states + if p['scale_x1_x2']: + alphaE = alpha_34 - (x[0]+x[1])/U + else: + if p['alpha0_in_x1x2']: + if p['U_in_x1x2']: + alphaE = alpha_34*(1-A1-A2)+ (x1 + x2)/U # Eq. 12 + else: + alphaE = alpha_34*(1-A1-A2)+ (x1 + x2) # Eq. 12 + else: + if p['U_in_x1x2']: + alphaE = (alpha_34-alpha0)*(1-A1-A2) + (x1 + x2)/U + alpha0# Eq. 12 + else: + alphaE = (alpha_34-alpha0)*(1-A1-A2) + x1 + x2 + alpha0# Eq. 12 + +# alphaE = u['alphaE'](t) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HACK HACK TODO TODO TODO TODO TODO + + fs_aE = F_st(alphaE) + Cl_sep_e = Cl_fs(alphaE) + Cd_e = Cd(alphaE) + Cm_e = Cm(alphaE) + x4 = np.clip(x4,0,1) + DeltaCdfpp = (np.sqrt(fs_aE)-np.sqrt(x4))/2 - (fs_aE-x4) /4 + + #ast_x4 = (fCm(x4) - fCm(alpha0))/Cl(x4) + #ast_faE = (fCm(fs_aE) - fCm(alpha0))/Cl(fs_aE) + #DeltaCmfpp = (fa_st(x4) - fa_st(fs_aE)) + DeltaCmfpp = 0 # <<<<<<<<0 and nLocks<3: + raise Exception("For now, input files are assumed to have all or none of the columns: (fs, cl_fs, and cl_inv). Otherwise, we\'ll have to ensure consitency, and so far we dont...") + + self.Re = Re + self.alpha = np.array(alpha) + if cl is None: + cl = np.zeros_like(self.alpha) + if cd is None: + cd = np.zeros_like(self.alpha) + if cm is None: + cm = np.zeros_like(self.alpha) + self.cl = np.array(cl) + self.cd = np.array(cd) + self.cm = np.array(cm) + if radians is None: + # If the max alpha is above pi, most likely we are in degrees + self._radians = np.mean(np.abs(self.alpha)) <= np.pi / 2 + else: + self._radians = radians + + # NOTE: method needs to be in harmony for linear_slope and the one used in cl_fully_separated + if compute_params: + self._linear_slope, self._alpha0 = self.cl_linear_slope(method=cl_lin_method) + if not self._cl_fs_lock: + self.cl_fully_separated(method=cl_lin_method) + if not self._cl_inv_lock: + self.cl_inv = self._linear_slope * (self.alpha - self._alpha0) + + def __repr__(self): + s='<{} object>:\n'.format(type(self).__name__) + sunit = 'deg' + if self._radians: + sunit = 'rad' + s+='Parameters:\n' + s+=' - alpha, cl, cd, cm : arrays of size {}\n'.format(len(self.alpha)) + s+=' - Re : {} \n'.format(self.Re) + s+=' - _radians: {} (True if alpha in radians)\n'.format(self._radians) + s+=' - _alpha0: {} [{}]\n'.format(self._alpha0, sunit) + s+=' - _linear_slope: {} [1/{}]\n'.format(self._linear_slope, sunit) + s+='Derived parameters:\n' + s+=' * cl_inv : array of size {} \n'.format(len(self.alpha)) + s+=' * cl_fs : array of size {} \n'.format(len(self.alpha)) + s+=' * fs : array of size {} \n'.format(len(self.alpha)) + s+=' * cl_lin (UNSURE) : array of size {} \n'.format(len(self.alpha)) + s+='Functional parameters:\n' + s+=' * alpha0 : {} [{}]\n'.format(self.alpha0(),sunit) + s+=' * cl_linear_slope : {} [1/{}]\n'.format(self.cl_linear_slope()[0],sunit) + s+=' * cl_max : {} \n'.format(self.cl_max()) + s+=' * unsteadyParams : {} \n'.format(self.unsteadyParams()) + s+='Useful functions: cl_interp, cd_interp, cm_interp, fs_interp \n' + s+=' cl_fs_interp, cl_inv_interp, \n' + s+=' interpolant \n' + s+=' plot, extrapolate\n' + return s + + + # --- Potential read only properties + @property + def cl_inv(self): + if self._cl_inv is None: + self.cl_fully_separated() # computes cl_fs, cl_inv and fs + return self._cl_inv + @cl_inv.setter + def cl_inv(self, cl_inv): + if self._cl_inv_lock: + raise Exception('Cl_inv was set by user, cannot modify it') + else: + self._cl_inv = cl_inv + + @property + def cl_fs(self): + if self._cl_fs is None: + self.cl_fully_separated() # computes cl_fs, cl_inv and fs + return self._cl_fs + @cl_fs.setter + def cl_fs(self, cl_fs): + if self._cl_fs_lock: + raise Exception('cl_fs was set by user, cannot modify it') + else: + self._cl_fs = cl_fs + + @property + def fs(self): + if self._fs is None: + self.cl_fully_separated() # computes fs, cl_inv and fs + return self._fs + @fs.setter + def fs(self, fs): + if self._fs_lock: + raise Exception('fs was set by user, cannot modify it') + else: + self._fs = fs + + + # --- Interpolants + def cl_interp(self, alpha): + return np.interp(alpha, self.alpha, self.cl) + + def cd_interp(self, alpha): + return np.interp(alpha, self.alpha, self.cd) + + def cm_interp(self, alpha): + return np.interp(alpha, self.alpha, self.cm) + + def cn_interp(self, alpha): + return np.interp(alpha, self.alpha, self.cn) + + def fs_interp(self, alpha): + return np.interp(alpha, self.alpha, self.fs) + + def cl_fs_interp(self, alpha): + return np.interp(alpha, self.alpha, self.cl_fs) + + def cl_inv_interp(self, alpha): + return np.interp(alpha, self.alpha, self.cl_inv) + + def interpolant(self, variables=['cl', 'cd', 'cm'], radians=None): + """ + Create an interpolant `f` for a set of requested variables with alpha as input variable: + var_array = f(alpha) + + This is convenient to quickly interpolate multiple polar variables at once. + The interpolant returns an array corresponding to the interpolated values of the + requested `variables`, in the same order as they are requested. + + When alpha is a scalar, f(alpha) is of length nVar = len(variables) + When alpha is an array of length n, f(alpha) is of shape (nVar x n) + + INPUTS: + - variables: list of variables that will be returned by the interpolant + Allowed values: ['alpha', 'cl', 'cd', 'cm', 'fs', 'cl_inv', 'cl_fs'] + - radians: enforce whether `alpha` is in radians or degrees + + OUTPUTS: + - f: interpolant + + """ + from scipy.interpolate import interp1d + + MAP = {'alpha':self.alpha, 'cl':self.cl, 'cd':self.cd, 'cm':self.cm, + 'cl_inv':self.cl_inv, 'cl_fs':self.cl_fs, 'fs':self.fs} + + if radians is None: + radians = self._radians + + # Create a Matrix with columns requested by user + #polCols = polar.columns.values[1:] + M = self.alpha # we start by alpha for convenience + for v in variables: + v = v.lower().strip() + if v not in MAP.keys(): + raise Exception('Polar: cannot create an interpolant for variable `{}`, allowed variables: {}'.format(v, MAP.keys())) + M = np.column_stack( (M, MAP[v]) ) + # We remove alpha + M = M[:,1:] + # Determine the "x" value for the interpolant (alpha in rad or deg) + if radians == self._radians: + alpha = self.alpha # the user requested the same as what we have + else: + if radians: + alpha = np.radians(self.alpha) + else: + alpha = np.degrees(self.alpha) + # Create the interpolant for requested variables with alpha as "x" axis + f = interp1d(alpha, M.T) + return f + + @property + def cn(self): + """ returns : Cl cos(alpha) + Cd sin(alpha) + NOT: Cl cos(alpha) + (Cd-Cd0) sin(alpha) + """ + if self._radians: + return self.cl * np.cos(self.alpha) + self.cd * np.sin(self.alpha) + else: + return self.cl * np.cos(self.alpha * np.pi / 180) + self.cd * np.sin(self.alpha * np.pi / 180) + + @property + def cl_lin(self): # TODO consider removing + print('[WARN] Polar: cl_lin is a bit of a weird property. Not sure if it will be kept') + if self.cl_inv is None: + self.cl_fully_separated() # computes cl_fs, cl_inv and fs + return self.cl_inv + #if (self._linear_slope is None) and (self._alpha0 is None): + # self._linear_slope,self._alpha0=self.cl_linear_slope() + #return self._linear_slope*(self.alpha-self._alpha0) + + @classmethod + def fromfile(cls, filename, fformat='auto', compute_params=False, to_radians=False): + """Constructor based on a filename + # NOTE: this is legacy + """ + print('[WARN] Polar: "fromfile" is depreciated and will be removed in a future release') + return cls(filename, fformat=fformat, compute_params=compute_params, radians=to_radians) + + def correction3D( + self, + r_over_R, + chord_over_r, + tsr, + lift_method="DuSelig", + drag_method="None", + blending_method="linear_25_45", + max_cl_corr=0.25, + alpha_max_corr=None, + alpha_linear_min=None, + alpha_linear_max=None, + ): + """Applies 3-D corrections for rotating sections from the 2-D data. + + Parameters + ---------- + r_over_R : float + local radial position / rotor radius + chord_over_r : float + local chord length / local radial location + tsr : float + tip-speed ratio + lift_method : string, optional + flag switching between Du-Selig and Snel corrections + drag_method : string, optional + flag switching between Eggers correction and None + blending_method: string: + blending method used to blend from 3D to 2D polar. default 'linear_25_45' + max_cl_corr: float, optional + maximum correction allowed, default is 0.25. + alpha_max_corr : float, optional (deg) + maximum angle of attack to apply full correction + alpha_linear_min : float, optional (deg) + angle of attack where linear portion of lift curve slope begins + alpha_linear_max : float, optional (deg) + angle of attack where linear portion of lift curve slope ends + + Returns + ------- + polar : Polar + A new Polar object corrected for 3-D effects + + Notes + ----- + The Du-Selig method :cite:`Du1998A-3-D-stall-del` is used to correct lift, and + the Eggers method :cite:`Eggers-Jr2003An-assessment-o` is used to correct drag. + + """ + + if alpha_max_corr == None and alpha_linear_min == None and alpha_linear_max == None: + alpha_linear_region, _, cl_slope, alpha0 = self.linear_region() + alpha_linear_min = alpha_linear_region[0] + alpha_linear_max = alpha_linear_region[-1] + _, alpha_max_corr = self.cl_max() + find_linear_region = False + elif alpha_max_corr * alpha_linear_min * alpha_linear_max == None: + raise Exception( + "Define all or none of the keyword arguments alpha_max_corr, alpha_linear_min, and alpha_linear_max" + ) + else: + find_linear_region = True + + # rename and convert units for convenience + if self._radians: + alpha = alpha + else: + alpha = np.radians(self.alpha) + cl_2d = self.cl + cd_2d = self.cd + alpha_max_corr = np.radians(alpha_max_corr) + alpha_linear_min = np.radians(alpha_linear_min) + alpha_linear_max = np.radians(alpha_linear_max) + + # parameters in Du-Selig model + a = 1 + b = 1 + d = 1 + lam = tsr / (1 + tsr ** 2) ** 0.5 # modified tip speed ratio + if np.abs(r_over_R)>1e-4: + expon = d / lam / r_over_R + else: + expon = d / lam / 1e-4 + + # find linear region with numpy polyfit + if find_linear_region: + idx = np.logical_and(alpha >= alpha_linear_min, alpha <= alpha_linear_max) + p = np.polyfit(alpha[idx], cl_2d[idx], 1) + cl_slope = p[0] + alpha0 = -p[1] / cl_slope + else: + cl_slope = np.degrees(cl_slope) + alpha0 = np.radians(alpha0) + + if lift_method == "DuSelig": + # Du-Selig correction factor + if np.abs(cl_slope)>1e-4: + fcl = ( + 1.0 + / cl_slope + * (1.6 * chord_over_r / 0.1267 * (a - chord_over_r ** expon) / (b + chord_over_r ** expon) - 1) + ) + # Force fcl to stay non-negative + if fcl < 0.: + fcl = 0. + else: + fcl=0.0 + elif lift_method == "Snel": + # Snel correction + fcl = 3.0 * chord_over_r ** 2.0 + else: + raise Exception("The keyword argument lift_method (3d correction for lift) can only be DuSelig or Snel.") + + # 3D correction for lift + cl_linear = cl_slope * (alpha - alpha0) + cl_corr = fcl * (cl_linear - cl_2d) + # Bound correction +/- max_cl_corr + cl_corr = np.clip(cl_corr, -max_cl_corr, max_cl_corr) + # Blending + if blending_method == "linear_25_45": + # We adjust fully between +/- 25 deg, linearly to +/- 45 + adj_alpha = np.radians([-180, -45, -25, 25, 45, 180]) + adj_value = np.array([0, 0, 1, 1, 0, 0]) + adj = np.interp(alpha, adj_alpha, adj_value) + elif blending_method == "heaviside": + # Apply (arbitrary!) smoothing function to smoothen the 3D corrections and zero them out away from alpha_max_corr + delta_corr = 10 + y1 = 1.0 - smooth_heaviside(alpha, k=1, rng=(alpha_max_corr, alpha_max_corr + np.deg2rad(delta_corr))) + y2 = smooth_heaviside(alpha, k=1, rng=(0.0, np.deg2rad(delta_corr))) + adj = y1 * y2 + else: + raise NotImplementedError("blending :", blending_method) + cl_3d = cl_2d + cl_corr * adj + + # Eggers 2003 correction for drag + if drag_method == "Eggers": + delta_cd = cl_corr * (np.sin(alpha) - 0.12 * np.cos(alpha)) / (np.cos(alpha) + 0.12 * np.sin(alpha)) * adj + elif drag_method == "None": + delta_cd = 0.0 + else: + raise Exception("The keyword argument darg_method (3d correction for drag) can only be Eggers or None.") + + cd_3d = cd_2d + delta_cd + + return type(self)(Re=self.Re, alpha=np.degrees(alpha), cl=cl_3d, cd=cd_3d, cm=self.cm, radians=False) + + def extrapolate(self, cdmax, AR=None, cdmin=0.001, nalpha=15): + """Extrapolates force coefficients up to +/- 180 degrees using Viterna's method + :cite:`Viterna1982Theoretical-and`. + + Parameters + ---------- + cdmax : float + maximum drag coefficient + AR : float, optional + aspect ratio = (rotor radius / chord_75% radius) + if provided, cdmax is computed from AR + cdmin: float, optional + minimum drag coefficient. used to prevent negative values that can sometimes occur + with this extrapolation method + nalpha: int, optional + number of points to add in each segment of Viterna method + + Returns + ------- + polar : Polar + a new Polar object + + Notes + ----- + If the current polar already supplies data beyond 90 degrees then + this method cannot be used in its current form and will just return itself. + + If AR is provided, then the maximum drag coefficient is estimated as + + >>> cdmax = 1.11 + 0.018*AR + + + """ + + if cdmin < 0: + raise Exception("cdmin cannot be < 0") + + # lift coefficient adjustment to account for assymetry + cl_adj = 0.7 + + # estimate CD max + if AR is not None: + cdmax = 1.11 + 0.018 * AR + self.cdmax = max(max(self.cd), cdmax) + + # extract matching info from ends + alpha_high = np.radians(self.alpha[-1]) + cl_high = self.cl[-1] + cd_high = self.cd[-1] + cm_high = self.cm[-1] + + alpha_low = np.radians(self.alpha[0]) + cl_low = self.cl[0] + cd_low = self.cd[0] + + if alpha_high > np.pi / 2: + raise Exception("alpha[-1] > pi/2") + return self + if alpha_low < -np.pi / 2: + raise Exception("alpha[0] < -pi/2") + return self + + # parameters used in model + sa = np.sin(alpha_high) + ca = np.cos(alpha_high) + self.A = (cl_high - self.cdmax * sa * ca) * sa / ca ** 2 + self.B = (cd_high - self.cdmax * sa * sa) / ca + + # alpha_high <-> 90 + alpha1 = np.linspace(alpha_high, np.pi / 2, nalpha) + alpha1 = alpha1[1:] # remove first element so as not to duplicate when concatenating + cl1, cd1 = self.__Viterna(alpha1, 1.0) + + # 90 <-> 180-alpha_high + alpha2 = np.linspace(np.pi / 2, np.pi - alpha_high, nalpha) + alpha2 = alpha2[1:] + cl2, cd2 = self.__Viterna(np.pi - alpha2, -cl_adj) + + # 180-alpha_high <-> 180 + alpha3 = np.linspace(np.pi - alpha_high, np.pi, nalpha) + alpha3 = alpha3[1:] + cl3, cd3 = self.__Viterna(np.pi - alpha3, 1.0) + cl3 = (alpha3 - np.pi) / alpha_high * cl_high * cl_adj # override with linear variation + + if alpha_low <= -alpha_high: + alpha4 = [] + cl4 = [] + cd4 = [] + alpha5max = alpha_low + else: + # -alpha_high <-> alpha_low + # Note: this is done slightly differently than AirfoilPrep for better continuity + alpha4 = np.linspace(-alpha_high, alpha_low, nalpha) + alpha4 = alpha4[1:-2] # also remove last element for concatenation for this case + cl4 = -cl_high * cl_adj + (alpha4 + alpha_high) / (alpha_low + alpha_high) * (cl_low + cl_high * cl_adj) + cd4 = cd_low + (alpha4 - alpha_low) / (-alpha_high - alpha_low) * (cd_high - cd_low) + alpha5max = -alpha_high + + # -90 <-> -alpha_high + alpha5 = np.linspace(-np.pi / 2, alpha5max, nalpha) + alpha5 = alpha5[1:] + if alpha_low == -alpha_high: + alpha5 = alpha5[:-1] + cl5, cd5 = self.__Viterna(-alpha5, -cl_adj) + + # -180+alpha_high <-> -90 + alpha6 = np.linspace(-np.pi + alpha_high, -np.pi / 2, nalpha) + alpha6 = alpha6[1:] + cl6, cd6 = self.__Viterna(alpha6 + np.pi, cl_adj) + + # -180 <-> -180 + alpha_high + alpha7 = np.linspace(-np.pi, -np.pi + alpha_high, nalpha) + cl7, cd7 = self.__Viterna(alpha7 + np.pi, 1.0) + cl7 = (alpha7 + np.pi) / alpha_high * cl_high * cl_adj # linear variation + + alpha = np.concatenate((alpha7, alpha6, alpha5, alpha4, np.radians(self.alpha), alpha1, alpha2, alpha3)) + cl = np.concatenate((cl7, cl6, cl5, cl4, self.cl, cl1, cl2, cl3)) + cd = np.concatenate((cd7, cd6, cd5, cd4, self.cd, cd1, cd2, cd3)) + + cd = np.maximum(cd, cdmin) # don't allow negative drag coefficients + + # Setup alpha and cm to be used in extrapolation + cm1_alpha = np.floor(self.alpha[0] / 10.0) * 10.0 + cm2_alpha = np.ceil(self.alpha[-1] / 10.0) * 10.0 + if cm2_alpha == self.alpha[-1]: + self.alpha = self.alpha[:-1] + self.cm = self.cm[:-1] + alpha_num = abs(int((-180.0 - cm1_alpha) / 10.0 - 1)) + alpha_cm1 = np.linspace(-180.0, cm1_alpha, alpha_num) + alpha_cm2 = np.linspace(cm2_alpha, 180.0, int((180.0 - cm2_alpha) / 10.0 + 1)) + alpha_cm = np.concatenate( + (alpha_cm1, self.alpha, alpha_cm2) + ) # Specific alpha values are needed for cm function to work + cm1 = np.zeros(len(alpha_cm1)) + cm2 = np.zeros(len(alpha_cm2)) + cm_ext = np.concatenate((cm1, self.cm, cm2)) + if np.count_nonzero(self.cm) > 0: + cmCoef = self.__CMCoeff(cl_high, cd_high, cm_high) # get cm coefficient + cl_cm = np.interp(alpha_cm, np.degrees(alpha), cl) # get cl for applicable alphas + cd_cm = np.interp(alpha_cm, np.degrees(alpha), cd) # get cd for applicable alphas + alpha_low_deg = self.alpha[0] + alpha_high_deg = self.alpha[-1] + for i in range(len(alpha_cm)): + cm_new = self.__getCM(i, cmCoef, alpha_cm, cl_cm, cd_cm, alpha_low_deg, alpha_high_deg) + if cm_new is None: + pass # For when it reaches the range of cm's that the user provides + else: + cm_ext[i] = cm_new + cm = np.interp(np.degrees(alpha), alpha_cm, cm_ext) + return type(self)(self.Re, np.degrees(alpha), cl, cd, cm) + + + + + def __Viterna(self, alpha, cl_adj): + """private method to perform Viterna extrapolation""" + + alpha = np.maximum(alpha, 0.0001) # prevent divide by zero + + cl = self.cdmax / 2 * np.sin(2 * alpha) + self.A * np.cos(alpha) ** 2 / np.sin(alpha) + cl = cl * cl_adj + + cd = self.cdmax * np.sin(alpha) ** 2 + self.B * np.cos(alpha) + + return cl, cd + + def __CMCoeff(self, cl_high, cd_high, cm_high): + """private method to obtain CM0 and CMCoeff""" + + found_zero_lift = False + + for i in range(len(self.cm) - 1): + if abs(self.alpha[i]) < 20.0 and self.cl[i] <= 0 and self.cl[i + 1] >= 0: + p = -self.cl[i] / (self.cl[i + 1] - self.cl[i]) + cm0 = self.cm[i] + p * (self.cm[i + 1] - self.cm[i]) + found_zero_lift = True + break + + if not found_zero_lift: + p = -self.cl[0] / (self.cl[1] - self.cl[0]) + cm0 = self.cm[0] + p * (self.cm[1] - self.cm[0]) + self.cm0 = cm0 + alpha_high = np.radians(self.alpha[-1]) + XM = (-cm_high + cm0) / (cl_high * np.cos(alpha_high) + cd_high * np.sin(alpha_high)) + cmCoef = (XM - 0.25) / np.tan((alpha_high - np.pi / 2)) + return cmCoef + + def __getCM(self, i, cmCoef, alpha, cl_ext, cd_ext, alpha_low_deg, alpha_high_deg): + """private method to extrapolate Cm""" + + cm_new = 0 + if alpha[i] >= alpha_low_deg and alpha[i] <= alpha_high_deg: + return + if alpha[i] > -165 and alpha[i] < 165: + if abs(alpha[i]) < 0.01: + cm_new = self.cm0 + else: + if alpha[i] > 0: + x = cmCoef * np.tan(np.radians(alpha[i]) - np.pi / 2) + 0.25 + cm_new = self.cm0 - x * ( + cl_ext[i] * np.cos(np.radians(alpha[i])) + cd_ext[i] * np.sin(np.radians(alpha[i])) + ) + else: + x = cmCoef * np.tan(-np.radians(alpha[i]) - np.pi / 2) + 0.25 + cm_new = -( + self.cm0 + - x * (-cl_ext[i] * np.cos(-np.radians(alpha[i])) + cd_ext[i] * np.sin(-np.radians(alpha[i]))) + ) + else: + if alpha[i] == 165: + cm_new = -0.4 + elif alpha[i] == 170: + cm_new = -0.5 + elif alpha[i] == 175: + cm_new = -0.25 + elif alpha[i] == 180: + cm_new = 0 + elif alpha[i] == -165: + cm_new = 0.35 + elif alpha[i] == -170: + cm_new = 0.4 + elif alpha[i] == -175: + cm_new = 0.2 + elif alpha[i] == -180: + cm_new = 0 + else: + print("Angle encountered for which there is no CM table value " "(near +/-180 deg). Program will stop.") + return cm_new + + def unsteadyParams(self, window_offset=None, nMin=720): + """compute unsteady aero parameters used in AeroDyn input file + + TODO Questions to solve: + - Is alpha 0 defined at zero lift or zero Cn? + - Are Cn1 and Cn2 the stall points of Cn or the regions where Cn deviates from the linear region? + - Is Cd0 Cdmin? + - Should Cd0 be used in cn? + - Should the TSE points be used? + - If so, should we use the linear points or the points on the cn-curve + - Should we prescribe alpha0cn when determining the slope? + NOTE: + alpha0Cl and alpha0Cn are usually within 0.005 deg of each other, less thatn 0.3% difference, with alpha0Cn > alpha0Cl. The difference increase thought towards the root of the blade + + Using the f=0.7 points doesnot change much for the lower point + but it has quite an impact on the upper point + % + + Parameters + ---------- + window_dalpha0: the linear region will be looked for in the region alpha+window_offset + + Returns + ------- + alpha0 : lift or 0 cn (TODO TODO) angle of attack (deg) + alpha1 : angle of attack at f=0.7 (approximately the stall angle) for AOA>alpha0 (deg) + alpha2 : angle of attack at f=0.7 (approximately the stall angle) for AOA= alpha_linear_min, + alpha <= alpha_linear_max) + + # checks for inppropriate data (like cylinders) + if len(idx) < 10 or len(np.unique(cl)) < 10: + return 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,0.0 + + # linear fit + p = np.polyfit(alpha[idx], cn[idx], 1) + m = p[0] + alpha0 = -p[1]/m + + # find cn at "stall onset" locations, when cn deviates from the linear region + alphaUpper = np.radians(np.arange(40.0)) + alphaLower = np.radians(np.arange(5.0, -40.0, -1)) + cnUpper = np.interp(alphaUpper, alpha, cn) + cnLower = np.interp(alphaLower, alpha, cn) + cnLinearUpper = m*(alphaUpper - alpha0) + cnLinearLower = m*(alphaLower - alpha0) + deviation = 0.05 # threshold for cl in detecting stall + + alphaU = np.interp(deviation, cnLinearUpper-cnUpper, alphaUpper) + alphaL = np.interp(deviation, cnLower-cnLinearLower, alphaLower) + + # compute cn at stall according to linear fit + cnStallUpper = m*(alphaU-alpha0) + cnStallLower = m*(alphaL-alpha0) + + # find min cd + minIdx = cd.argmin() + + # return: control setting, stall angle, alpha for 0 cn, cn slope, + # cn at stall+, cn at stall-, alpha for min CD, min(CD) + return (0.0, np.degrees(alphaU), np.degrees(alpha0), m, + cnStallUpper, cnStallLower, alpha[minIdx], cd[minIdx]) + + def plot(self): + """plot cl/cd/cm polar + + Returns + ------- + figs : list of figure handles + + """ + import matplotlib.pyplot as plt + + p = self + + figs = [] + + # plot cl + fig = plt.figure() + figs.append(fig) + ax = fig.add_subplot(111) + plt.plot(p.alpha, p.cl, label="Re = " + str(p.Re / 1e6) + " million") + ax.set_xlabel("angle of attack (deg)") + ax.set_ylabel("lift coefficient") + ax.legend(loc="best") + + # plot cd + fig = plt.figure() + figs.append(fig) + ax = fig.add_subplot(111) + ax.plot(p.alpha, p.cd, label="Re = " + str(p.Re / 1e6) + " million") + ax.set_xlabel("angle of attack (deg)") + ax.set_ylabel("drag coefficient") + ax.legend(loc="best") + + # plot cm + fig = plt.figure() + figs.append(fig) + ax = fig.add_subplot(111) + ax.plot(p.alpha, p.cm, label="Re = " + str(p.Re / 1e6) + " million") + ax.set_xlabel("angle of attack (deg)") + ax.set_ylabel("moment coefficient") + ax.legend(loc="best") + + return figs + + def alpha0(self, window=None): + """ Finds alpha0, angle of zero lift """ + if window is None: + if self._radians: + window = [np.radians(-30), np.radians(30)] + else: + window = [-30, 30] + window = _alpha_window_in_bounds(self.alpha, window) + # print(window) + # print(self.alpha) + # print(self._radians) + # print(self.cl) + # print(window) + + return _find_alpha0(self.alpha, self.cl, window) + + def linear_region(self, delta_alpha0=4, method_linear_fit="max"): + cl_slope, alpha0 = self.cl_linear_slope() + alpha_linear_region = np.asarray(_find_TSE_region(self.alpha, self.cl, cl_slope, alpha0, deviation=0.05)) + cl_linear_region = (alpha_linear_region - alpha0) * cl_slope + + return alpha_linear_region, cl_linear_region, cl_slope, alpha0 + + def cl_max(self, window=None): + """ Finds cl_max , returns (Cl_max,alpha_max) """ + if window is None: + if self._radians: + window = [np.radians(-40), np.radians(40)] + else: + window = [-40, 40] + + # Constant case or only one value + if np.all(self.cl == self.cl[0]) or len(self.cl) == 1: + return self.cl, self.alpha + + # Ensuring window is within our alpha values + window = _alpha_window_in_bounds(self.alpha, window) + + # Finding max within window + iwindow = np.where((self.alpha >= window[0]) & (self.alpha <= window[1])) + alpha = self.alpha[iwindow] + cl = self.cl[iwindow] + i_max = np.argmax(cl) + if i_max == len(iwindow): + raise Exception( + "Max cl is at the window boundary ([{};{}]), increase window (TODO automatically)".format( + window[0], window[1] + ) + ) + pass + cl_max = cl[i_max] + alpha_cl_max = alpha[i_max] + # alpha_zc,i_zc = _zero_crossings(x=alpha,y=cl,direction='up') + # if len(alpha_zc)>1: + # raise Exception('Cannot find alpha0, {} zero crossings of Cl in the range of alpha values: [{} {}] '.format(len(alpha_zc),window[0],window[1])) + # elif len(alpha_zc)==0: + # raise Exception('Cannot find alpha0, no zero crossing of Cl in the range of alpha values: [{} {}] '.format(window[0],window[1])) + # + # alpha0=alpha_zc[0] + return cl_max, alpha_cl_max + + + def cl_linear_slope(self, window=None, method="optim", radians=False): + """Find slope of linear region + Outputs: a 2-tuplet of: + slope (in inverse units of alpha, or in radians-1 if radians=True) + alpha_0 in the same unit as alpha, or in radians if radians=True + """ + return cl_linear_slope(self.alpha, self.cl, window=window, method=method, inputInRadians=self._radians, radians=radians) + + def cl_fully_separated(self, method='max'): + alpha0 = self.alpha0() + cla,_, = self.cl_linear_slope(method=method) + if cla == 0: + cl_fs = self.cl # when fs ==1 + fs = self.cl * 0 + else: + cl_ratio = self.cl / (cla * (self.alpha - alpha0)) + cl_ratio[np.where(cl_ratio < 0)] = 0 + if self._fs_lock: + fs = self.fs + else: + fs = (2 * np.sqrt(cl_ratio) - 1) ** 2 + fs[np.where(fs < 1e-15)] = 0 + # Initialize to linear region (in fact only at singularity, where fs=1) + cl_fs = self.cl / 2.0 # when fs ==1 + # Region where fs<1, merge + I = np.where(fs < 1) + cl_fs[I] = (self.cl[I] - cla * (self.alpha[I] - alpha0) * fs[I]) / (1.0 - fs[I]) + # Outside region, use steady data + iHig = np.ma.argmin(np.ma.MaskedArray(fs, self.alpha < alpha0)) + iLow = np.ma.argmin(np.ma.MaskedArray(fs, self.alpha > alpha0)) + cl_fs[0 : iLow + 1] = self.cl[0 : iLow + 1] + cl_fs[iHig + 1 : -1] = self.cl[iHig + 1 : -1] + + # Ensuring everything is consistent (but we cant with user provided values..) + cl_inv = cla * (self.alpha - alpha0) + if not self._fs_lock: + fs = (self.cl - cl_fs) / (cl_inv - cl_fs + 1e-10) + fs[np.where(fs < 1e-15)] = 0 + fs[np.where(fs > 1)] = 1 + # Storing + self.fs = fs + self.cl_fs = cl_fs + if not self._cl_inv_lock: + self.cl_inv = cl_inv + return cl_fs, fs + + def dynaStallOye_DiscreteStep(self, alpha_t, tau, fs_prev, dt): + # compute aerodynamical force from aerodynamic data + # interpolation from data + fs = self.fs_interp(alpha_t) + Clinv = self.cl_inv_interp(alpha_t) + Clfs = self.cl_fs_interp(alpha_t) + # dynamic stall model + fs_dyn = fs + (fs_prev - fs) * np.exp(-dt / tau) + Cl = fs_dyn * Clinv + (1 - fs_dyn) * Clfs + return Cl, fs_dyn + + def toAeroDyn(self, filenameOut=None, templateFile=None, Re=1.0, comment=None, unsteadyParams=True): + from pyFAST.input_output.fast_input_file import ADPolarFile + cleanComments=comment is not None + # Read a template file for AeroDyn polars + if templateFile is None: + MyDir=os.path.dirname(__file__) + templateFile = os.path.join(MyDir,'../../data/NREL5MW/5MW_Baseline/Airfoils/Cylinder1.dat') + cleanComments=True + if isinstance(templateFile, ADPolarFile): + ADpol = templateFile + else: + ADpol = ADPolarFile(templateFile) + + + + # --- Updating the AD polar file + ADpol['Re'] = Re # TODO UNKNOWN + + # Compute unsteady parameters + if unsteadyParams: + (alpha0,alpha1,alpha2,cnSlope,cn1,cn2,cd0,cm0)=self.unsteadyParams() + + # Setting unsteady parameters + if np.isnan(alpha0): + ADpol['alpha0'] = 0 + else: + ADpol['alpha0'] = np.around(alpha0, 4) + ADpol['alpha1'] = np.around(alpha1, 4) # TODO approximate + ADpol['alpha2'] = np.around(alpha2, 4) # TODO approximate + ADpol['C_nalpha'] = np.around(cnSlope ,4) + ADpol['Cn1'] = np.around(cn1, 4) # TODO verify + ADpol['Cn2'] = np.around(cn2, 4) + ADpol['Cd0'] = np.around(cd0, 4) + ADpol['Cm0'] = np.around(cm0, 4) + + # Setting polar + PolarTable = np.column_stack((self.alpha, self.cl, self.cd, self.cm)) + ADpol['NumAlf'] = self.cl.shape[0] + ADpol['AFCoeff'] = np.around(PolarTable, 5) + + # --- Comment + if cleanComments: + ADpol.comment='' # remove comment from template + if comment is not None: + ADpol.comment=comment + + if filenameOut is not None: + ADpol.write(filenameOut) + return ADpol + + + + +def blend(pol1, pol2, weight): + """Blend this polar with another one with the specified weighting + + Parameters + ---------- + pol1: (class Polar or array) first polar + pol2: (class Polar or array) second polar + weight: (float) blending parameter between 0 (first polar) and 1 (second polar) + + Returns + ------- + polar : (class Polar or array) a blended Polar + """ + bReturnObject = False + if hasattr(pol1, "cl"): + bReturnObject = True + alpha1 = pol1.alpha + M1 = np.zeros((len(alpha1), 4)) + M1[:, 0] = pol1.alpha + M1[:, 1] = pol1.cl + M1[:, 2] = pol1.cd + M1[:, 3] = pol1.cm + else: + alpha1 = pol1[:, 0] + M1 = pol1 + if hasattr(pol2, "cl"): + bReturnObject = True + alpha2 = pol2.alpha + M2 = np.zeros((len(alpha2), 4)) + M2[:, 0] = pol2.alpha + M2[:, 1] = pol2.cl + M2[:, 2] = pol2.cd + M2[:, 3] = pol2.cm + else: + alpha2 = pol2[:, 0] + M2 = pol2 + # Define range of alpha, merged values and truncate if one set beyond the other range + alpha = np.union1d(alpha1, alpha2) + min_alpha = max(alpha1.min(), alpha2.min()) + max_alpha = min(alpha1.max(), alpha2.max()) + alpha = alpha[np.logical_and(alpha >= min_alpha, alpha <= max_alpha)] + # alpha = np.array([a for a in alpha if a >= min_alpha and a <= max_alpha]) + + # Creating new output matrix to store polar + M = np.zeros((len(alpha), M1.shape[1])) + M[:, 0] = alpha + + # interpolate to new alpha and linearly blend + for j in np.arange(1, M.shape[1]): + v1 = np.interp(alpha, alpha1, M1[:, j]) + v2 = np.interp(alpha, alpha2, M2[:, j]) + M[:, j] = (1 - weight) * v1 + weight * v2 + if hasattr(pol1, "Re"): + Re = pol1.Re + weight * (pol2.Re - pol1.Re) + else: + Re = np.nan + + if bReturnObject: + return type(pol1)(Re=Re, alpha=M[:, 0], cl=M[:, 1], cd=M[:, 2], cm=M[:, 3]) + else: + return M + + +def thicknessinterp_from_one_set(thickness, polarList, polarThickness): + """Returns a set of interpolated polars from one set of polars at known thicknesses and a list of thickness + The nearest polar is used when the thickness is beyond the range of values of the input polars. + """ + thickness = np.asarray(thickness) + polarThickness = np.asarray(polarThickness) + polarList = np.asarray(polarList) + tmax_in = np.max(thickness) + tmax_pol = np.max(polarThickness) + if (tmax_in > 1.2 and tmax_pol <= 1.2) or (tmax_in <= 1.2 and tmax_pol > 1.2): + raise Exception( + "Thicknesses of polars and input thickness need to be both in percent ([0-120]) or in fraction ([0-1.2])" + ) + + # sorting thickness + Isort = np.argsort(polarThickness) + polarThickness = polarThickness[Isort] + polarList = polarList[Isort] + + polars = [] + for it, t in enumerate(thickness): + ihigh = len(polarThickness) - 1 + for ip, tp in enumerate(polarThickness): + if tp > t: + ihigh = ip + break + ilow = 0 + for ip, tp in reversed(list(enumerate(polarThickness))): + if tp < t: + ilow = ip + break + + if ihigh == ilow: + polars.append(polarList[ihigh]) + print("[WARN] Using nearest polar for section {}, t={} , t_near={}".format(it, t, polarThickness[ihigh])) + else: + if (polarThickness[ilow] > t) or (polarThickness[ihigh] < t): + raise Exception("Implementation Error") + weight = (t - polarThickness[ilow]) / (polarThickness[ihigh] - polarThickness[ilow]) + # print(polarThickness[ilow],'<',t,'<',polarThickness[ihigh],'Weight',weight) + pol = blend(polarList[ilow], polarList[ihigh], weight) + polars.append(pol) + # import matplotlib.pyplot as plt + # fig=plt.figure() + # plt.plot(polarList[ilow][: ,0],polarList[ilow][: ,2],'b',label='thick'+str(polarThickness[ilow])) + # plt.plot(pol[:,0],pol[:,2],'k--',label='thick'+str(t)) + # plt.plot(polarList[ihigh][:,0],polarList[ihigh][:,2],'r',label='thick'+str(polarThickness[ihigh])) + # plt.legend() + # plt.show() + return polars + + +def _alpha_window_in_bounds(alpha, window): + """Ensures that the window of alpha values is within the bounds of alpha + Example: alpha in [-30,30], window=[-20,20] => window=[-20,20] + Example: alpha in [-10,10], window=[-20,20] => window=[-10,10] + Example: alpha in [-30,30], window=[-40,10] => window=[-40,10] + """ + IBef = np.where(alpha <= window[0])[0] + if len(IBef) > 0: + im = IBef[-1] + else: + im = 0 + IAft = np.where(alpha >= window[1])[0] + if len(IAft) > 0: + ip = IAft[0] + else: + ip = len(alpha) - 1 + window = [alpha[im], alpha[ip]] + return window + + +def _find_alpha0(alpha, coeff, window, direction='up', value_if_constant = np.nan): + """Finds the point where coeff(alpha)==0 using interpolation. + The search is narrowed to a window that can be specified by the user. The default window is yet enough for cases that make physical sense. + The angle alpha0 is found by looking at a zero up crossing in this window, and interpolation is used to find the exact location. + """ + # Constant case or only one value + if np.all(abs((coeff - coeff[0])<1e-8)) or len(coeff) == 1: + if coeff[0] == 0: + return 0 + else: + return value_if_constant + # Ensuring window is within our alpha values + window = _alpha_window_in_bounds(alpha, window) + + # Finding zero up-crossing within window + iwindow = np.where((alpha >= window[0]) & (alpha <= window[1])) + alpha = alpha[iwindow] + coeff = coeff[iwindow] + alpha_zc, i_zc, s_zc = _zero_crossings(x=alpha, y=coeff, direction=direction) + + if len(alpha_zc) > 1: + print('WARN: Cannot find alpha0, {} zero crossings of Coeff in the range of alpha values: [{} {}] '.format(len(alpha_zc),window[0],window[1])) + print('>>> Using second zero') + alpha_zc=alpha_zc[1:] + #raise Exception('Cannot find alpha0, {} zero crossings of Coeff in the range of alpha values: [{} {}] '.format(len(alpha_zc),window[0],window[1])) + elif len(alpha_zc) == 0: + raise NoCrossingException('Cannot find alpha0, no zero crossing of Coeff in the range of alpha values: [{} {}] '.format(window[0],window[1])) + + alpha0 = alpha_zc[0] + return alpha0 + + +def _find_TSE_region(alpha, coeff, slope, alpha0, deviation): + """Find the Trailing Edge Separation points, when the coefficient separates from its linear region + These points are defined as the points where the difference is equal to +/- `deviation` + Typically deviation is about 0.05 (absolute value) + The linear region is defined as coeff_lin = slope (alpha-alpha0) + + returns: + a_TSE: values of alpha at the TSE point (upper and lower) + + """ + # How off are we from the linear region + DeltaLin = slope * (alpha - alpha0) - coeff + + # Upper and lower regions + bUpp = alpha >= alpha0 + bLow = alpha <= alpha0 + + # Finding the point where the delta is equal to `deviation` + a_TSEUpp = np.interp(deviation, DeltaLin[bUpp], alpha[bUpp]) + a_TSELow = np.interp(-deviation, DeltaLin[bLow], alpha[bLow]) + return a_TSELow, a_TSEUpp + + +def _find_max_points(alpha, coeff, alpha0, method="inflections"): + """Find upper and lower max points in `coeff` vector. + if `method` is "inflection": + These point are detected from slope changes of `coeff`, positive of negative inflections + The upper stall point is the first point after alpha0 with a "hat" inflection + The lower stall point is the first point below alpha0 with a "v" inflection + """ + if method == "inflections": + dC = np.diff(coeff) + IHatInflections = np.where(np.logical_and.reduce((dC[1:] < 0, dC[0:-1] > 0, alpha[1:-1] > alpha0)))[0] + IVeeInflections = np.where(np.logical_and.reduce((dC[1:] > 0, dC[0:-1] < 0, alpha[1:-1] < alpha0)))[0] + if len(IHatInflections) <= 0: + raise NoStallDetectedException("Not able to detect upper stall point of curve") + if len(IVeeInflections) <= 0: + raise NoStallDetectedException("Not able to detect lower stall point of curve") + a_MaxUpp = alpha[IHatInflections[0] + 1] + c_MaxUpp = coeff[IHatInflections[0] + 1] + a_MaxLow = alpha[IVeeInflections[-1] + 1] + c_MaxLow = coeff[IVeeInflections[-1] + 1] + elif method == "minmax": + iMax = np.argmax(coeff) + iMin = np.argmin(coeff) + a_MaxUpp = alpha[iMax] + c_MaxUpp = coeff[iMax] + a_MaxLow = alpha[iMin] + c_MaxLow = coeff[iMin] + else: + raise NotImplementedError() + return (a_MaxUpp, c_MaxUpp, a_MaxLow, c_MaxLow) + + + + +# --------------------------------------------------------------------------------} +# --- Low-level functions +# --------------------------------------------------------------------------------{ +def fn_fullsep(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl): + """ Function that is zero when f=0 from the Kirchhoff theory """ + cl_linear = cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl) + return cl_linear - 0.25* dclda*(alpha-alpha0) + +def cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl): + """ Linear Cl """ + if alpha > alpha_sl_neg and alpha < alpha_sl_pos : + cl = dclda*(alpha-alpha0) + else: + cl=np.interp(alpha, valpha, vCl) + return cl + +def cl_fullsep(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl, alpha_fs_l, alpha_fs_u): + """ fully separated lift coefficient""" + cl_linear = cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl) + if alpha > alpha_sl_neg and alpha < alpha_sl_pos : + cl = cl_linear*0.5 + else: + fp = f_point(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl, alpha_fs_l, alpha_fs_u) + cl=(cl_linear- dclda*(alpha-alpha0)*fp)/(1-fp) + return cl + +def f_point(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl, alpha_fs_l, alpha_fs_u): + """ separation function + # TODO harmonize with cl_fully_separated maybe? + """ + if dclda==0: + return 0 + if alpha < alpha_fs_l or alpha > alpha_fs_u: + return 0 + else: + cl_linear = cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl) + xx=cl_linear/(dclda*(alpha-alpha0) + np.sign(cl_linear)*1e-15) + return (2*np.sqrt(xx)-1)**2 + + +def polar_params(alpha, cl, cd, cm): + """ + - alpha in radians + """ + # Treat zero-lift sections separately + zero_offset=1e-15 + x1 = -7*np.pi/180 + x2 = 7*np.pi/180 + y1 = np.interp(x1, alpha, cl) + y2 = np.interp(x2, alpha, cl) + + if (y1maxclp: + alpha_maxclp=alpha_sl_pos + maxclp=dclda + relerr=0. + for k in np.arange(nobs): + x1 = alpha0+(k+1)*dalpha + y1 = np.interp(x1, alpha, cl) + y2 = dclda*(x1-alpha0) + relerr=relerr+(y1-y2)/y2 + relerr=relerr/nobs + move_up= relerr>1e-2 + if move_up: + alpha_sl_pos=alpha_sl_pos-dalpha + alpha_sl_pos=max(alpha_maxclp, alpha_sl_pos) + + # Find negative angle of attack stall limit alpha_sl_neg + alpha_sl_neg=-20*np.pi/180 + move_down=True + maxclp=0. + while move_down: + dalpha=(alpha0-alpha_sl_neg)/nobs + y1=np.interp(alpha_sl_neg, alpha, cl) + dclda=y1/(alpha_sl_neg-alpha0) + if dclda>maxclp: + alpha_maxclp=alpha_sl_neg + maxclp=dclda + relerr=0. + for k in np.arange(nobs): + x1=alpha_sl_neg+(k+1)*dalpha + y1 = np.interp(x1, alpha, cl) + y2=dclda*(x1-alpha0) + relerr=relerr+(y1-y2)/y2 + relerr=relerr/nobs + move_down=relerr>1e-2 + if move_down: + alpha_sl_neg=alpha_sl_neg+dalpha + alpha_sl_neg=min(alpha_maxclp, alpha_sl_neg) + + # Compute the final alpha and dclda (linear lift coefficient slope) values + y1=np.interp(alpha_sl_neg, alpha, cl) + y2=np.interp(alpha_sl_pos, alpha, cl) + alpha0=(y1*alpha_sl_pos-y2*alpha_sl_neg)/(y1-y2) + dclda =(y1-y2)/(alpha_sl_neg-alpha_sl_pos) + + # Find Cd0 and Cm0 + Cd0 = np.interp(alpha0, alpha, cd) + Cm0 = np.interp(alpha0, alpha, cm) + # Find upper surface fully stalled angle of attack alpha_fs_u (Upper limit of the Kirchhoff flat plate solution) + y1=-1. + y2=-1. + delta = np.pi/180 + x2=alpha_sl_pos + delta + while y1*y2>0. and x2+delta0. and x2-delta>-np.pi: + x1=x2 + x2=x1-delta + y1=fn_fullsep(x1, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl) + y2=fn_fullsep(x2, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl) + if y1*y2<0: + alpha_fs_l=(0.-y2)/(y1-y2)*x1+(0.-y1)/(y2-y1)*x2 + else: + alpha_fs_l=-np.pi + + # --- Compute values at all angle of attack + Cl_fully_sep = np.zeros(alpha.shape) + fs = np.zeros(alpha.shape) + Cl_linear = np.zeros(alpha.shape) + for i,al in enumerate(alpha): + Cl_fully_sep[i] = cl_fullsep(al, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl, alpha_fs_l, alpha_fs_u) + fs [i] = f_point (al, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl, alpha_fs_l, alpha_fs_u) + Cl_linear [i] = cl_lin (al, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl) + + p=dict() + p['alpha0'] = alpha0 + p['Cd0'] = Cd0 + p['Cm0'] = Cm0 + p['dclda'] = dclda + p['alpha_fs_l'] = alpha_fs_l + p['alpha_fs_u'] = alpha_fs_u + p['alpha_sl_neg'] = alpha_sl_neg + p['alpha_sl_pos'] = alpha_sl_pos + + return p, Cl_linear, Cl_fully_sep, fs + + + +def cl_linear_slope(alpha, cl, window=None, method="max", nInterp=721, inputInRadians=False, radians=False): + """ + Find slope of linear region + Outputs: a 2-tuplet of: + slope (in inverse units of alpha, or in radians-1 if radians=True) + alpha_0 in the same unit as alpha, or in radians if radians=True + + + INPUTS: + - alpha: angle of attack in radians + - Cl : lift coefficient + - window: [alpha_min, alpha_max]: region when linear slope is sought + - method: 'max', 'optim', 'leastsquare', 'leastsquare_constraint' + + OUTPUTS: + - Cl_alpha, alpha0: lift slope (1/rad) and angle of attack (rad) of zero lift + """ + # --- Return function + def myret(sl, a0): + # wrapper function to return degrees or radians # TODO this should be a function of self._radians + if radians: + if inputInRadians: + return sl, a0 + else: + return np.rad2deg(sl), np.deg2rad(a0) # NOTE: slope needs rad2deg, alpha needs deg2rad + else: + return sl, a0 + + # finding alpha0 # TODO TODO TODO THIS IS NOT NECESSARY + if inputInRadians: + windowAlpha0 = [np.radians(-30), np.radians(30)] + else: + windowAlpha0 = [-30, 30] + windowAlpha0 = _alpha_window_in_bounds(alpha, windowAlpha0) + alpha0 = _find_alpha0(alpha, cl, windowAlpha0) + + # Constant case or only one value + if np.all(cl == cl[0]) or len(cl) == 1: + return myret(0, alpha0) + + if window is None: + if np.nanmin(cl) > 0 or np.nanmax(cl) < 0: + window = [alpha[0], alpha[-1]] + else: + # define a window around alpha0 + if inputInRadians: + window = alpha0 + np.radians(np.array([-5, +20])) + else: + window = alpha0 + np.array([-5, +20]) + + # Ensuring window is within our alpha values + window = _alpha_window_in_bounds(alpha, window) + + if method in ["max", "leastsquare"]: + slope, off = _find_slope(alpha, cl, xi=alpha0, window=window, method=method) + + elif method == "leastsquare_constraint": + slope, off = _find_slope(alpha, cl, x0=alpha0, window=window, method="leastsquare") + + elif method == "optim": + # Selecting range of values within window + idx = np.where((alpha >= window[0]) & (alpha <= window[1]) & ~np.isnan(cl))[0] + cl, alpha = cl[idx], alpha[idx] + # Selecting within the min and max of this window to improve accuracy + imin = np.where(cl == np.min(cl))[0][-1] + idx = np.arange(imin, np.argmax(cl) + 1) + window = [alpha[imin], alpha[np.argmax(cl)]] + cl, alpha = cl[idx], alpha[idx] + # Performing minimization of slope + slope, off = _find_slope(alpha, cl, x0=alpha0, window=None, method="optim") + + else: + raise Exception("Method unknown for lift slope determination: {}".format(method)) + + # --- Safety checks + if len(cl) > 10: + # Looking at slope around alpha 0 to see if we are too far off + slope_FD, off_FD = _find_slope(alpha, cl, xi=alpha0, window=window, method="finitediff_1c") + if abs(slope - slope_FD) / slope_FD * 100 > 50: + #raise Exception('Warning: More than 20% error between estimated slope ({:.4f}) and the slope around alpha0 ({:.4f}). The window for the slope search ([{} {}]) is likely wrong.'.format(slope,slope_FD,window[0],window[-1])) + print('[WARN] More than 20% error between estimated slope ({:.4f}) and the slope around alpha0 ({:.4f}). The window for the slope search ([{} {}]) is likely wrong.'.format(slope,slope_FD,window[0],window[-1])) +# print('slope ',slope,' Alpha range: {:.3f} {:.3f} - nLin {} nMin {} nMax {}'.format(alpha[iStart],alpha[iEnd],len(alpha[iStart:iEnd+1]),nMin,len(alpha))) + return myret(slope, off) + +# --------------------------------------------------------------------------------} +# --- Generic curve handling functions +# --------------------------------------------------------------------------------{ +def _find_slope(x, y, xi=None, x0=None, window=None, method="max", opts=None, nInterp=721): + """Find the slope of a curve at x=xi based on a given method. + INPUTS: + x: array of x values + y: array of y values + xi: point where the slope is to be computed + x0: point where y(x0)=0 + if provided the constraint y(x0)=0 is added. + window: + If a `window` is provided the search is restrained to this region of x values. + Typical windows for airfoils are: window=[alpha0,Clmax], or window=[-5,5]+alpha0 + If window is None, the whole extent is used (window=[min(x),max(x)]) + + The methods available are: + 'max' : returns the maximum slope within the window. Needs `xi` + 'leastsquare': use leastsquare (or polyfit), to fit the curve within the window + 'finitediff_1c': first order centered finite difference. Needs `xi` + 'optim': find the slope by looking at all possible slope values, and try to find an optimal where the length of linear region is maximized. + + returns: + (a,x0): such that the slope is a(x-x0) + (x0=-b/a where y=ax+b) + """ + if window is not None: + x_=x + y_=y + if nInterp is not None: + x_ = np.linspace(x[0], x[-1], max(nInterp,len(x))) # using 0.5deg resolution at least + y_ = np.interp(x_, x, y) + I = np.where(np.logical_and(x_>=window[0],x_<=window[1])) + x = x_[I] + y = y_[I] + + + if len(y) <= 1: + raise Exception('Cannot find slope, two points needed ({} after window selection)'.format(len(y))) + + + if len(y)<4 and method=='optim': + method='leastsquare' + #print('[WARN] Not enought data to find slope with optim method, using leastsquare') + + + if method == "max": + if xi is not None: + I = np.nonzero(x - xi) + yi = np.interp(xi, x, y) + a = max((y[I] - yi) / (x[I] - xi)) + x0 = xi - yi / a + else: + raise Exception("For now xi needs to be set to find a slope with the max method") + + elif method == "finitediff_1c": + # First order centered finite difference + if xi is not None: + # First point strictly before xi + im = np.where(x < xi)[0][-1] + dx = x[im + 1] - x[im - 1] + if np.abs(dx) > 1e-7: + a = (y[im + 1] - y[im - 1]) / dx + yi = np.interp(xi, x, y) + x0 = xi - yi / a + else: + a = np.inf + x0 = xi + #print('a',a) + #print('x0',x0) + #print('yi',yi) + dx=(x[im+1]-x[im]) + if np.abs(dx)>1e-7: + a = ( y[im+1] - y[im] ) / dx + yi = np.interp(xi,x,y) + x0 = xi - yi/a + else: + a=np.inf + x0 = xi + #print('a',a) + #print('x0',x0) + #print('yi',yi) + else: + raise Exception("For now xi needs to be set to find a slope with the finite diff method") + + elif method == "leastsquare": + if x0 is not None: + try: + a = np.linalg.lstsq((x - x0).reshape((-1, 1)), y.reshape((-1, 1)), rcond=None)[0][0][0] + except: + a = np.linalg.lstsq((x - x0).reshape((-1, 1)), y.reshape((-1, 1)))[0][0][0] + else: + p = np.polyfit(x, y, 1) + a = p[0] + x0 = -p[1] / a + elif method == "optim": + if opts is None: + nMin = max(3, int(len(x) / 2)) + else: + nMin = opts["nMin"] + + a, x0, iStart, iEnd = _find_linear_region(x, y, nMin, x0) + + else: + raise NotImplementedError() + return a, x0 + +def _find_linear_region(x, y, nMin, x0=None): + """Find a linear region by computing all possible slopes for all possible extent. + The objective function tries to minimize the error with the linear slope + and maximize the length of the linear region. + nMin is the mimum number of points to be present in the region + If x0 is provided, the function a*(x-x0) is fitted + + returns: + slope : + offset: + iStart: index of start of linear region + iEnd : index of end of linear region + """ + if x0 is not None: + x = x.reshape((-1, 1)) - x0 + y = y.reshape((-1, 1)) + n = len(x) - nMin + 1 + err = np.zeros((n, n)) * np.nan + slp = np.zeros((n, n)) * np.nan + off = np.zeros((n, n)) * np.nan + spn = np.zeros((n, n)) * np.nan + for iStart in range(n): + for j in range(iStart, n): + iEnd = j + nMin + if x0 is not None: + sl = np.linalg.lstsq(x[iStart:iEnd], y[iStart:iEnd], rcond=None)[0][0] + slp[iStart, j] = sl + off[iStart, j] = x0 + y_lin = x[iStart:iEnd] * sl + else: + coefs = np.polyfit(x[iStart:iEnd], y[iStart:iEnd], 1) + slp[iStart, j] = coefs[0] + off[iStart, j] = -coefs[1] / coefs[0] + y_lin = x[iStart:iEnd] * coefs[0] + coefs[1] + err[iStart, j] = np.mean((y[iStart:iEnd] - y_lin) ** 2) + spn[iStart, j] = iEnd - iStart + spn = 1 / (spn - nMin + 1) + err = (err) / (np.nanmax(err)) + obj = np.multiply(spn, err) + obj = err + (iStart, j) = np.unravel_index(np.nanargmin(obj), obj.shape) + iEnd = j + nMin - 1 # note -1 since we return the index here + return slp[iStart, j], off[iStart, j], iStart, iEnd + + +def _zero_crossings(y, x=None, direction=None): + + """ + Find zero-crossing points in a discrete vector, using linear interpolation. + direction: 'up' or 'down', to select only up-crossings or down-crossings + Returns: + x values xzc such that y(yzc)==0 + indexes izc, such that the zero is between y[izc] (excluded) and y[izc+1] (included) + if direction is not provided, also returns: + sign, equal to 1 for up crossing + """ + y = np.asarray(y) + if x is None: + x = np.arange(len(y)) + + deltas = x[1:] - x[0:-1] + if np.any( deltas == 0.0): + I=np.where(deltas==0)[0] + print("[WARN] Some x values are repeated at index {}. Removing them.".format(I)) + x=np.delete(x,I) + y=np.delete(x,I) + if np.any(deltas<0): + raise Exception("x values need to be in ascending order") + + # Indices before zero-crossing + iBef = np.where(y[1:] * y[0:-1] < 0.0)[0] + + # Find the zero crossing by linear interpolation + xzc = x[iBef] - y[iBef] * (x[iBef + 1] - x[iBef]) / (y[iBef + 1] - y[iBef]) + + # Selecting points that are exactly 0 and where neighbor change sign + iZero = np.where(y == 0.0)[0] + iZero = iZero[np.where((iZero > 0) & (iZero < x.size - 1))] + iZero = iZero[np.where(y[iZero - 1] * y[iZero + 1] < 0.0)] + + # Concatenate + xzc = np.concatenate((xzc, x[iZero])) + iBef = np.concatenate((iBef, iZero)) + + # Sort + iSort = np.argsort(xzc) + xzc, iBef = xzc[iSort], iBef[iSort] + + # Return up-crossing, down crossing or both + sign = np.sign(y[iBef + 1] - y[iBef]) + if direction == "up": + I = np.where(sign == 1)[0] + return xzc[I], iBef[I], sign[I] + elif direction == "down": + I = np.where(sign == -1)[0] + return xzc[I], iBef[I], sign[I] + elif direction is not None: + raise Exception("Direction should be either `up` or `down`") + return xzc, iBef, sign + + +def _intersections(x1, y1, x2, y2, plot=False, minDist=1e-6, verbose=False): + """ + INTERSECTIONS Intersections of curves. + Computes the (x,y) locations where two curves intersect. The curves + can be broken with NaNs or have vertical segments. + + Written by: Sukhbinder, https://github.com/sukhbinder/intersection + adapted by E.Branlard to allow for minimum distance between points + License: MIT + usage: + x,y=intersection(x1,y1,x2,y2) + + Example: + a, b = 1, 2 + phi = np.linspace(3, 10, 100) + x1 = a*phi - b*np.sin(phi) + y1 = a - b*np.cos(phi) + + x2=phi + y2=np.sin(phi)+2 + x,y=intersections(x1,y1,x2,y2) + + plt.plot(x1,y1,c='r') + plt.plot(x2,y2,c='g') + plt.plot(x,y,'*k') + plt.show() + + """ + + def _rect_inter_inner(x1, x2): + n1 = x1.shape[0] - 1 + n2 = x2.shape[0] - 1 + X1 = np.c_[x1[:-1], x1[1:]] + X2 = np.c_[x2[:-1], x2[1:]] + S1 = np.tile(X1.min(axis=1), (n2, 1)).T + S2 = np.tile(X2.max(axis=1), (n1, 1)) + S3 = np.tile(X1.max(axis=1), (n2, 1)).T + S4 = np.tile(X2.min(axis=1), (n1, 1)) + return S1, S2, S3, S4 + + def _rectangle_intersection_(x1, y1, x2, y2): + S1, S2, S3, S4 = _rect_inter_inner(x1, x2) + S5, S6, S7, S8 = _rect_inter_inner(y1, y2) + + C1 = np.less_equal(S1, S2) + C2 = np.greater_equal(S3, S4) + C3 = np.less_equal(S5, S6) + C4 = np.greater_equal(S7, S8) + + ii, jj = np.nonzero(C1 & C2 & C3 & C4) + return ii, jj + + ii, jj = _rectangle_intersection_(x1, y1, x2, y2) + n = len(ii) + + dxy1 = np.diff(np.c_[x1, y1], axis=0) + dxy2 = np.diff(np.c_[x2, y2], axis=0) + + T = np.zeros((4, n)) + AA = np.zeros((4, 4, n)) + AA[0:2, 2, :] = -1 + AA[2:4, 3, :] = -1 + AA[0::2, 0, :] = dxy1[ii, :].T + AA[1::2, 1, :] = dxy2[jj, :].T + + BB = np.zeros((4, n)) + BB[0, :] = -x1[ii].ravel() + BB[1, :] = -x2[jj].ravel() + BB[2, :] = -y1[ii].ravel() + BB[3, :] = -y2[jj].ravel() + + for i in range(n): + try: + T[:, i] = np.linalg.solve(AA[:, :, i], BB[:, i]) + except: + T[:, i] = np.NaN + + in_range = (T[0, :] >= 0) & (T[1, :] >= 0) & (T[0, :] <= 1) & (T[1, :] <= 1) + + xy0 = T[2:, in_range] + xy0 = xy0.T + + x = xy0[:, 0] + y = xy0[:, 1] + + # --- Remove "duplicates" + if minDist is not None: + pointKept=[(x[0],y[0])] + pointSkipped=[] + for p in zip(x[1:],y[1:]): + distances = np.array([np.sqrt((p[0]-pk[0])**2 + (p[1]-pk[1])**2) for pk in pointKept]) + if all(distances>minDist): + pointKept.append((p[0],p[1])) + else: + pointSkipped.append((p[0],p[1])) + if verbose: + if len(pointSkipped)>0: + print('Polar:Intersection:Point Kept :', pointKept) + print('Polar:Intersection:Point Skipped:', pointSkipped) + + M = np.array(pointKept) + x = M[:,0] + y = M[:,1] + if plot: + import matplotlib.pyplot as plt + plt.plot(x1,y1,'.',c='r') + plt.plot(x2,y2,'',c='g') + plt.plot(x,y,'*k') + + return x, y + + +def smooth_heaviside(x, k=1, rng=(-np.inf, np.inf), method="exp"): + r""" + Smooth approximation of Heaviside function where the step occurs between rng[0] and rng[1]: + if rng[0]=rng[1])=1 + if rng[0]>rng[1]: then f(=rng[0])=0 + exp: + rng=(-inf,inf): H(x)=[1 + exp(-2kx) ]^-1 + rng=(-1,1): H(x)=[1 + exp(4kx/(x^2-1) ]^-1 + rng=(0,1): H(x)=[1 + exp(k(2x-1)/(x(x-1)) ]^-1 + INPUTS: + x : scalar or vector of real x values \in ]-infty; infty[ + k : float >=1, the higher k the "steeper" the heaviside function + rng: tuple of min and max value such that f(<=min)=0 and f(>=max)=1. + Reversing the range makes the Heaviside function from 1 to 0 instead of 0 to 1 + method: smooth approximation used (e.g. exp or tan) + NOTE: an epsilon is introduced in the denominator to avoid overflow of the exponentail + """ + if k < 1: + raise Exception("k needs to be >=1") + eps = 1e-2 + mn, mx = rng + x = np.asarray(x) + H = np.zeros(x.shape) + if mn < mx: + H[x <= mn] = 0 + H[x >= mx] = 1 + b = np.logical_and(x > mn, x < mx) + else: + H[x <= mx] = 1 + H[x >= mn] = 0 + b = np.logical_and(x < mn, x > mx) + x = x[b] + if method == "exp": + if np.abs(mn) == np.inf and np.abs(mx) == np.inf: + # Infinite support + x[k * x > 100] = 100.0 / k + x[k * x < -100] = -100.0 / k + if mn < mx: + H[b] = 1 / (1 + np.exp(-k * x)) + else: + H[b] = 1 / (1 + np.exp(k * x)) + elif np.abs(mn) != np.inf and np.abs(mx) != np.inf: + n = 4.0 + # Compact support + s = 2.0 / (mx - mn) * (x - (mn + mx) / 2.0) # transform compact support into ]-1,1[ + x = -n * s / (s ** 2 - 1.0) # then transform ]-1,1[ into ]-inf,inf[ + x[k * x > 100] = 100.0 / k + x[k * x < -100] = -100.0 / k + H[b] = 1.0 / (1 + np.exp(-k * x)) + else: + raise NotImplementedError("Heaviside with only one bound infinite") + else: + # TODO tan approx + raise NotImplementedError() + return H + + +if __name__ == "__main__": + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py new file mode 100644 index 0000000000..ed2833a2c2 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py @@ -0,0 +1,2 @@ +from .Polar import * +from .DynamicStall import * diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv new file mode 100644 index 0000000000..11fc9e4578 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv @@ -0,0 +1,152 @@ +#Alpha_[deg] Cl_[-] Cd_[-] Cm_[-] +-180 0 0.01 0 +-175 0.32314 -0.00353 0.32311 +-170 0.54698 0.01 0.4 +-165 0.67904 0.04941 0.33924 +-160 0.72682 0.11352 0.24942 +-155 0.70579 0.20019 0.21399 +-150 0.66314 0.30328 0.21602 +-145 0.64074 0.41646 0.2214 +-140 0.62742 0.53657 0.22794 +-135 0.60342 0.66092 0.23986 +-130 0.56773 0.78571 0.25508 +-125 0.52323 0.90699 0.27055 +-120 0.4696 1.0213 0.28536 +-115 0.40619 1.1252 0.29905 +-110 0.3342 1.2155 0.31072 +-105 0.25541 1.2893 0.31947 +-100 0.17213 1.3458 0.32503 +-95 0.08657 1.3833 0.32702 +-90 0 1.3971 0.32417 +-85 -0.08656 1.3833 0.31555 +-80 -0.17213 1.3458 0.30236 +-75 -0.25546 1.2893 0.2861 +-70 -0.3342 1.2155 0.26733 +-65 -0.40601 1.1252 0.24646 +-60 -0.4696 1.0213 0.22406 +-55 -0.52392 0.90698 0.20089 +-50 -0.56773 0.78571 0.17812 +-45 -0.60083 0.66096 0.15651 +-40 -0.62742 0.53657 0.13462 +-35 -0.65043 0.41631 0.1123 +-30 -0.66314 0.30328 0.09674 +-25 -0.66962 0.20078 0.08937 +-21 -0.70796 0.12951 0.07031 +-20 -0.72682 0.11352 0.06129 +-19 -0.75 0.09836 0.05014 +-18 -0.77544 0.08411 0.0374 +-17 -0.80056 0.07088 0.02375 +-16 -0.82279 0.05876 0.00988 +-15 -0.83954 0.04787 -0.00351 +-14 -0.84824 0.03829 -0.01574 +-13 -0.84632 0.03013 -0.02611 +-12 -0.83119 0.0235 -0.03394 +-11 -0.80027 0.0185 -0.03853 +-10 -0.751 0.01522 -0.0392 +-9.5 -0.71909 0.01422 -0.03799 + -9 -0.6841 0.01346 -0.0364 +-8.5 -0.64783 0.01275 -0.03504 + -8 -0.6106 0.01207 -0.0339 +-7.5 -0.57249 0.01141 -0.03279 + -7 -0.53411 0.01081 -0.03158 +-6.5 -0.4962 0.01028 -0.03012 + -6 -0.4595 0.00986 -0.0283 +-5.5 -0.42412 0.00956 -0.02608 + -5 -0.3876 0.00935 -0.0239 +-4.5 -0.3471 0.00918 -0.02225 + -4 -0.3007 0.00907 -0.0215 +-3.5 -0.24776 0.00901 -0.0218 + -3 -0.1918 0.00897 -0.0226 +-2.5 -0.13644 0.00891 -0.02334 + -2 -0.0816 0.00885 -0.024 +-1.5 -0.02642 0.00884 -0.0247 + -1 0.0294 0.00885 -0.0255 +-0.5 0.08586 0.00886 -0.0264 + 0 0.1423 0.00886 -0.0273 +0.5 0.19775 0.00886 -0.02807 + 1 0.2507 0.0089 -0.0284 +1.5 0.29998 0.00899 -0.02807 + 2 0.3462 0.00907 -0.0272 +2.5 0.39032 0.00912 -0.02601 + 3 0.4328 0.00927 -0.0247 +3.5 0.4744 0.00961 -0.02349 + 4 0.5176 0.01002 -0.0227 +4.5 0.56413 0.01037 -0.02249 + 5 0.6109 0.01072 -0.0224 +5.5 0.65458 0.01119 -0.02194 + 6 0.6956 0.01176 -0.0212 +6.5 0.73547 0.01241 -0.02041 + 7 0.7762 0.01307 -0.0198 +7.5 0.81879 0.0137 -0.01946 + 8 0.8598 0.0144 -0.019 +8.5 0.896 0.01528 -0.01806 + 9 0.9295 0.01629 -0.0169 +9.5 0.96294 0.01737 -0.01587 + 10 0.9957 0.01856 -0.0149 +10.5 1.0268 0.01989 -0.01389 + 11 1.0569 0.02131 -0.0129 +11.5 1.0864 0.02282 -0.01196 + 12 1.1121 0.02457 -0.0108 +12.5 1.1312 0.02672 -0.00919 + 13 1.1447 0.02927 -0.0074 +13.5 1.1545 0.03216 -0.00568 + 14 1.1622 0.03527 -0.0038 +14.5 1.1686 0.03854 -0.00171 + 15 1.1721 0.04229 -0.0007 +15.5 1.1708 0.04684 -0.00206 + 16 1.1648 0.05218 -0.00574 +16.5 1.155 0.05824 -0.01141 + 17 1.1421 0.06492 -0.01869 +17.5 1.1267 0.07215 -0.02722 + 18 1.1096 0.07984 -0.03664 +18.5 1.0915 0.0879 -0.0466 + 19 1.0731 0.09626 -0.05673 +19.5 1.0551 0.10483 -0.06667 + 20 1.0383 0.11352 -0.07607 +20.5 1.0232 0.12227 -0.08463 + 21 1.0099 0.13107 -0.09233 +21.5 0.99831 0.13992 -0.09923 + 22 0.9882 0.14882 -0.10538 +22.5 0.97954 0.15779 -0.11084 + 23 0.9722 0.16683 -0.11566 +23.5 0.96608 0.17593 -0.11989 + 24 0.96106 0.18512 -0.12359 +24.5 0.95704 0.19439 -0.1268 + 25 0.95391 0.20374 -0.12959 +25.5 0.95156 0.21319 -0.132 + 26 0.94987 0.22274 -0.1341 +26.5 0.94875 0.23239 -0.13592 + 27 0.94808 0.24215 -0.13753 +27.5 0.94774 0.25202 -0.13899 + 28 0.94764 0.26202 -0.14033 + 30 0.94734 0.30328 -0.1457 + 35 0.92992 0.41551 -0.16709 + 40 0.89632 0.53657 -0.1936 + 45 0.8581 0.66117 -0.21672 + 50 0.81105 0.78571 -0.23738 + 55 0.74863 0.90692 -0.25819 + 60 0.67085 1.0213 -0.27886 + 65 0.57957 1.1252 -0.29854 + 70 0.47743 1.2155 -0.31693 + 75 0.36653 1.2893 -0.33391 + 80 0.24591 1.3458 -0.34957 + 85 0.11777 1.3833 -0.36364 + 90 0 1.3971 -0.37438 + 95 -0.09246 1.3833 -0.38013 +100 -0.17213 1.3458 -0.38128 +105 -0.25384 1.2893 -0.3786 +110 -0.3342 1.2155 -0.37248 +115 -0.40661 1.1252 -0.3633 +120 -0.4696 1.0213 -0.3519 +125 -0.52312 0.90699 -0.33918 +130 -0.56773 0.78571 -0.32579 +135 -0.60345 0.66092 -0.31277 +140 -0.62742 0.53657 -0.30302 +145 -0.64073 0.41646 -0.29879 +150 -0.66314 0.30328 -0.29801 +155 -0.70579 0.20019 -0.30444 +160 -0.72682 0.11352 -0.34975 +165 -0.67904 0.04941 -0.44614 +170 -0.54698 0.01 -0.5 +175 -0.32314 -0.00353 -0.3913 +180 0 0.01 0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv new file mode 100644 index 0000000000..ad08cdbed3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv @@ -0,0 +1,4 @@ +#Alpha_[deg] Cl_[-] Cd_[-] Cm_[-] +-180.0 0.0 0.5 0.0 + 0.0 0.0 0.5 0.0 + 180.0 0.0 0.5 0.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat new file mode 100644 index 0000000000..1ba7334541 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat @@ -0,0 +1,5 @@ +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.5000 0.0 + 0.00 0.000 0.5000 0.0 + 180.00 0.000 0.5000 0.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv new file mode 100644 index 0000000000..4a05f7e7ba --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv @@ -0,0 +1,147 @@ +! Table of aerodynamics coefficients +! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! (deg) (-) (-) (-) + -180.00 0.000 0.0185 0.0000 + -175.00 0.394 0.0332 0.1978 + -170.00 0.788 0.0945 0.3963 + -160.00 0.670 0.2809 0.2738 + -155.00 0.749 0.3932 0.3118 + -150.00 0.797 0.5112 0.3413 + -145.00 0.818 0.6309 0.3636 + -140.00 0.813 0.7485 0.3799 + -135.00 0.786 0.8612 0.3911 + -130.00 0.739 0.9665 0.3980 + -125.00 0.675 1.0625 0.4012 + -120.00 0.596 1.1476 0.4014 + -115.00 0.505 1.2206 0.3990 + -110.00 0.403 1.2805 0.3943 + -105.00 0.294 1.3265 0.3878 + -100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat new file mode 100644 index 0000000000..32b5a57099 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat @@ -0,0 +1,106 @@ +#alpha_[deg] Cl_[-] Cd_[-] Cm_[-] +-180.00000 0.00000 0.00000 0.00000 +-175.00000 0.17360 0.01140 0.02180 +-170.00000 0.34200 0.04520 0.04340 +-165.00000 0.50000 0.10050 0.06470 +-160.00000 0.64280 0.17550 0.08550 +-155.00000 0.76600 0.26790 0.10570 +-150.00000 0.86600 0.37500 0.12500 +-145.00000 0.93970 0.49350 0.14340 +-140.00000 0.98480 0.61970 0.16070 +-135.00000 1.00000 0.75000 0.17680 +-130.00000 0.98480 0.88030 0.19150 +-125.00000 0.93970 1.00650 0.20480 +-120.00000 0.86600 1.12500 0.21650 +-115.00000 0.76600 1.23210 0.22660 +-110.00000 0.64280 1.32450 0.23490 +-105.00000 0.50000 1.39950 0.24150 +-100.00000 0.34200 1.45480 0.24620 + -95.00000 0.17360 1.48860 0.24900 + -90.00000 0.00000 1.50000 0.25000 + -85.00000 -0.17360 1.48860 0.24900 + -80.00000 -0.34200 1.45480 0.24620 + -75.00000 -0.50000 1.39950 0.24150 + -70.00000 -0.64280 1.32450 0.23490 + -65.00000 -0.76600 1.23210 0.22660 + -60.00000 -0.86600 1.12500 0.21650 + -55.00000 -0.93970 1.00650 0.20480 + -50.00000 -0.98480 0.86030 0.19150 + -45.00000 -1.01200 0.71200 0.17080 + -40.00000 -1.03760 0.54750 0.14160 + -39.00000 -1.04190 0.51650 0.13460 + -38.00000 -1.04620 0.48160 0.12760 + -37.00000 -1.05250 0.44870 0.11850 + -36.00000 -1.05680 0.41770 0.10950 + -35.00000 -1.06110 0.38480 0.10050 + -34.00000 -1.06540 0.35580 0.08940 + -33.00000 -1.07170 0.32890 0.08240 + -32.00000 -1.07650 0.30310 0.06780 + -30.00000 -1.08890 0.25600 0.05080 + -28.00000 -1.09930 0.20900 0.03370 + -26.00000 -1.11680 0.17560 0.02060 + -24.00000 -1.12820 0.14230 0.00750 + -22.00000 -1.12150 0.11830 -0.00080 + -20.00000 -1.11480 0.09430 -0.00910 + -18.00000 -1.09190 0.07650 -0.01230 + -16.00000 -1.06910 0.05870 -0.01560 + -14.00000 -1.03790 0.04540 -0.01560 + -12.00000 -1.00670 0.03210 -0.01550 + -10.00000 -0.84790 0.02300 -0.03180 + -8.00000 -0.68920 0.01380 -0.04800 + -6.00000 -0.42780 0.01180 -0.06110 + -4.00000 -0.16650 0.00980 -0.07420 + -2.00000 0.08630 0.00950 -0.08110 + 0.00000 0.33910 0.00920 -0.08800 + 2.00000 0.58670 0.00940 -0.09330 + 4.00000 0.83010 0.00990 -0.09770 + 6.00000 1.06560 0.01090 -0.10080 + 8.00000 1.29140 0.01240 -0.10260 + 10.00000 1.50120 0.01440 -0.10240 + 12.00000 1.68860 0.01730 -0.09980 + 14.00000 1.81030 0.02260 -0.09410 + 16.00000 1.81390 0.03540 -0.08740 + 18.00000 1.75450 0.06470 -0.08500 + 20.00000 1.60710 0.10350 -0.09130 + 22.00000 1.52570 0.14370 -0.10260 + 24.00000 1.44280 0.18410 -0.11400 + 26.00000 1.38260 0.22900 -0.12820 + 28.00000 1.32180 0.27380 -0.14230 + 30.00000 1.25830 0.32780 -0.15820 + 32.00000 1.19440 0.38160 -0.17390 + 33.00000 1.17340 0.42090 -0.17900 + 34.00000 1.15680 0.45040 -0.18310 + 35.00000 1.13790 0.48150 -0.18730 + 36.00000 1.12480 0.51050 -0.19140 + 37.00000 1.11770 0.54500 -0.19530 + 38.00000 1.10240 0.57370 -0.19930 + 39.00000 1.08910 0.59990 -0.20320 + 40.00000 1.07550 0.62800 -0.20710 + 45.00000 1.01750 0.75780 -0.21610 + 50.00000 0.97160 0.88200 -0.21840 + 55.00000 0.92680 1.01040 -0.22140 + 60.00000 0.86600 1.12500 -0.22550 + 65.00000 0.76600 1.23210 -0.23060 + 70.00000 0.64280 1.32450 -0.23490 + 75.00000 0.50000 1.39950 -0.24150 + 80.00000 0.34200 1.45480 -0.24620 + 85.00000 0.17360 1.48860 -0.24900 + 90.00000 0.00000 1.50000 -0.25000 + 95.00000 -0.17360 1.48860 -0.24900 + 100.00000 -0.34200 1.45480 -0.24620 + 105.00000 -0.50000 1.39950 -0.24150 + 110.00000 -0.64280 1.32450 -0.23490 + 115.00000 -0.76600 1.23210 -0.22660 + 120.00000 -0.86600 1.12500 -0.21650 + 125.00000 -0.93970 1.00650 -0.20480 + 130.00000 -0.98480 0.88030 -0.19150 + 135.00000 -1.00000 0.75000 -0.17680 + 140.00000 -0.98480 0.61970 -0.16070 + 145.00000 -0.93970 0.49350 -0.14340 + 150.00000 -0.86600 0.37500 -0.12500 + 155.00000 -0.76600 0.26790 -0.10570 + 160.00000 -0.64280 0.17550 -0.08550 + 165.00000 -0.50000 0.10050 -0.06470 + 170.00000 -0.34200 0.04520 -0.04340 + 175.00000 -0.17360 0.01140 -0.02180 + 180.00000 0.00000 0.00000 0.00000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py new file mode 100644 index 0000000000..6528f27093 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py @@ -0,0 +1,43 @@ +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +# Local +from pyFAST.airfoils.Polar import Polar + +MyDir=os.path.dirname(__file__) + + +def main_correction3D(test=False): + polarFile_in = os.path.join(MyDir,'../data/DU21_A17.csv') + + r_over_R = 0.2 # spanwise location [-] + chord_over_r = 3./5. # chord divided by local radius [-] + tsr = 10 # tip speed ratio [-] + + polar = Polar(polarFile_in, compute_params=True, verbose=False) + #ADpol = polar.toAeroDyn(polarFile_AD) # Optional, write to AeroDyn format + polar3D= polar.correction3D(r_over_R, chord_over_r, tsr) + + # --- Plot + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + ax.plot(polar.alpha, polar.cl ,'k-' , label= r'2D polar') + ax.plot(polar3D.alpha, polar3D.cl , '-' , label= r'3D corrected') + ax.plot(polar.alpha, polar.cl_inv ,'k--' , label= r'inviscid') + ax.tick_params(direction='in', top=True, right=True) + ax.set_xlabel(r'Angle of attack, $\alpha$ [deg]') + ax.set_ylabel(r'Lift coefficient, $C_l$ [-]') + ax.set_title(r'Airfoils - 3D correction') + ax.set_xlim([-50,50]) + ax.set_ylim([-1.5,2]) + ax.legend() + + return polar, polar3D + +polar,polar3D = main_correction3D() + +if __name__ == '__main__': + plt.show() +if __name__ == '__test__': + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py new file mode 100644 index 0000000000..fe560ca420 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py @@ -0,0 +1,118 @@ +""" +Example to generate an AeroDyn polar file from a set of Cl-Cd data + - The various parameters (e.g. unsteady parameters) are computed and updated + - The AD file is written +""" +import numpy as np +import os + +from pyFAST.airfoils.Polar import Polar +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.input_output.csv_file import CSVFile + +# Get current directory so this script can be called from any location +scriptDir=os.path.dirname(__file__) + + +def main_ReWriteADFile(): + """ + Example 1: + - open an existing AeroDyn polar file + - rewrite it (unsteady parameters are recomputed) + """ + AD_polarFile_in = os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Baseline/Airfoils/Cylinder1.dat') + AD_polarFile_out = '_Polar_out.dat.ignore' + + # Open an existing AeroDyn polar file + polar = Polar(AD_polarFile_in, fformat='ADPolar') + # Rewrite it (unsteady parameters are recomputed) + # NOTE: you can provide templateFile=AD_polarFile_in to the function below + # to ensure that the file will look the same + comment = 'Cylinder at Re=6Million\nUpdated unsteady parameters' # Optional comment + Re = 6 # Reynolds number in Million (Optional) + ADpol = polar.toAeroDyn(AD_polarFile_out, Re=6, comment=comment) + + return ADpol, polar + + +def main_WriteADPolar(): + """ + Example 2: + - Open a tabulated file with alpha,Cl,Cd,Cm + - Write an AeroDyn file from it (unsteady parameters are computed) + """ + polarFile_in = os.path.join(scriptDir,'../data/DU21_A17.csv') + polarFile_AD_out = '_Polar_out.dat.ignore' + + # Open a tabulated file with alpha,Cl,Cd,Cm + polar = Polar(polarFile_in, fformat='delimited') + # Write an AeroDyn file from it (unsteady parameters are computed) + # NOTE: you can provide templateFile='ADTemplate.dat' to the function below + # to ensure that the AD file will look the same as the template. + ADpol = polar.toAeroDyn(polarFile_AD_out) + + return ADpol, polar + +def main_WriteADPolarLowLevel(): + """ + Example 3: Same as Example 2, but with low level interface. + """ + # --- Reading an existing AD file, just as a template, we'll replace things in it + templateADFile = os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Baseline/Airfoils/Cylinder1.dat') + ADpol = FASTInputFile(templateADFile) + + # --- Creating a Polar object from Cl-Cd data + polarFile = os.path.join(scriptDir,'../data/DU21_A17.csv') + p=CSVFile(polarFile).toDataFrame().values + polar= Polar(alpha=p[:,0],cl=p[:,1],cd=p[:,2],cm=p[:,3]) + (alpha0,alpha1,alpha2,cnSlope,cn1,cn2,cd0,cm0)=polar.unsteadyParams() + + # --- Updating the AD polar file + # Setting unsteady parameters + ADpol['Re'] = 1.0000 # TODO UNKNOWN + if np.isnan(alpha0): + ADpol['alpha0'] = 0 + else: + ADpol['alpha0'] = np.around(alpha0, 4) + ADpol['alpha1'] = np.around(alpha1, 4) # TODO approximate + ADpol['alpha2'] = np.around(alpha2, 4) # TODO approximate + ADpol['C_nalpha'] = np.around(cnSlope ,4) + ADpol['Cn1'] = np.around(cn1, 4) # TODO verify + ADpol['Cn2'] = np.around(cn2, 4) + ADpol['Cd0'] = np.around(cd0, 4) + ADpol['Cm0'] = np.around(cm0, 4) + + # Setting polar + PolarTable = np.column_stack((polar.alpha,polar.cl,polar.cd,polar.cm)) + ADpol['NumAlf'] = polar.cl.shape[0] + ADpol['AFCoeff'] = np.around(PolarTable, 5) + + filename='_Polar_out.dat.ignore' + ADpol.write(filename) + #print('Writing polar to file:',filename,' thick={}'.format(t)) + + return ADpol, polar + + + +ADpol,polar = main_ReWriteADFile() +ADpol,polar = main_WriteADPolar() +ADpol,polar = main_WriteADPolarLowLevel() + +if __name__ == '__main__': + print(polar) + import matplotlib.pyplot as plt + plt.plot(polar.alpha ,polar.cl , '-' , label= 'cl') + plt.plot(polar.alpha ,polar.cl_lin , '--', label= 'cl_lin') + plt.ylim([-2,2]) + plt.legend() + plt.show() + +if __name__ == '__test__': + ADpol,polar = main_ReWriteADFile() + ADpol,polar = main_WriteADPolar() + ADpol,polar = main_WriteADPolar() + try: + os.remove('_Polar_out.dat.ignore') + except: + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py new file mode 100644 index 0000000000..c1b88d6b63 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py @@ -0,0 +1,65 @@ +""" + - Create an AeroDyn polar from a CSV file + - (optional) Read the AeroDyn polar back + - Plot unsteady aerodynamic parameters +""" +import os +import matplotlib.pyplot as plt + +# Get current directory so this script can be called from any location +scriptDir=os.path.dirname(__file__) + +# --- Create an AeroDyn polar from a CSV file +from pyFAST.airfoils.Polar import Polar +polarFile_in = os.path.join(scriptDir,'../data/DU21_A17.csv') +polar = Polar(polarFile_in, fformat='delimited') +ADpol = polar.toAeroDyn('_AeroDyn_Polar_DU21_A17.dat') + + +fig = plt.figure() +plt.plot(polar.alpha, polar.cl, label='Cl') +plt.plot(polar.alpha, polar.cl_lin, label='Cl_lin') +plt.xlabel(r'Angle of attack $\alpha$ [deg]') +plt.ylabel(r'Lift coefficient $C_l$ [-]') +plt.ylim([-1.5,1.9]) +plt.legend() + +# --- Optional: read the AeroDyn polar +from pyFAST.input_output import FASTInputFile +ADpol = FASTInputFile('_AeroDyn_Polar_DU21_A17.dat') + +# --- Plot important data for unsteady aerodynamics +df = ADpol.toDataFrame() +print(df.keys()) +fig = plt.figure() +plt.plot(df['Alpha_[deg]'], df['Cn_[-]'] , label='Cn') +plt.plot(df['Alpha_[deg]'], df['Cn_pot_[-]'], label='Cn_lin') +plt.plot(df['Alpha_[deg]'], df['Cn_012_[-]'],'--', label='Cn_2,0,1') +plt.xlabel(r'Angle of attack $\alpha$ [deg]') +plt.ylabel(r'Normal coefficient $C_n$ [-]') +plt.ylim([-1.5,1.9]) +plt.legend() + + +# --- Alternative using class Polar (latest python toolbox) +try: + fig = plt.figure() + plt.plot(polar.alpha, polar.cn , label='Cn') + plt.plot(polar.alpha, polar.cn_lin, label='Cn_lin') + plt.plot(polar.alpha_201, polar.cn_201 ,'o', label='Cn_2,0,1') + plt.xlabel(r'Angle of attack $\alpha$ [deg]') + plt.ylabel(r'Normal coefficient $C_n$ [-]') + plt.ylim([-1.5,1.9]) + plt.legend() +except: + pass + + +if __name__ == '__main__': + plt.show() + +if __name__ == '__test__': + try: + os.remove('_AeroDyn_Polar_DU21_A17.dat') + except: + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py new file mode 100644 index 0000000000..6d4c746905 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py @@ -0,0 +1,291 @@ +""" +This module contains: + - PolarFile: class to read different kind of polar formats + + - +""" + +import os +import numpy as np +import pandas as pd + +# --- Welib polar readers +try: + from pyFAST.input_output.csv_file import CSVFile +except: + CSVFile=None +try: + from pyFAST.input_output.fast_input_file import ADPolarFile +except: + ADPolarFile=None +try: + from pyFAST.input_output.hawc2_ae_file import HAWC2AEFile +except: + HAWC2AEFile=None + +class WrongPolarFormatError(Exception): pass +class BrokenPolarFormatError(Exception): pass + + +# List of columns used to "unify" the dataframes coming out of "PolarFile" +DEFAULT_COLUMNS={'alpha':'Alpha', 'cl':'Cl', 'cd':'Cd', 'cm':'Cm'} +DEFAULT_COLUMNS_EXT={ + 'clinv':'Cl_inv', 'clfs':'Cl_fs', 'fs':'fs', + 'cn':'Cn', 'cnpot':'Cn_pot', 'cnz12':'Cn_012', 'cnf':'Cn_f', 'cncd0off':'Cn_Cd0off' + } + + +# -------------------------------------------------------------------------------- +# --- Small Helper functions +# -------------------------------------------------------------------------------- +def _load_txt(filename, commentChars, skiprows=0, **kwargs): + """ + Similar to np.loadtxt but also works if comments are present anywhere in the file (e.g. end of file) + """ + with open(filename) as f: + lines = (line for iline, line in enumerate(f) if not line.startswith(commentChars) and iline>=skiprows) + Lines = list(lines) + if len(Lines)==0: + raise Exception('Zero lines') + else: + return np.loadtxt(Lines, **kwargs) + + +# --------------------------------------------------------------------------------} +# --- Simple classes +# --------------------------------------------------------------------------------{ +class BasePolarFile(dict): + def __init__(self, filename=None): + super().__init__() + self.COMMENT_CHARS=('#','!','%') + self['header'] = '' + self['columns'] = [] + self['data'] = np.array([[]]) + self['nPolars'] = 0 + if filename is not None: + self.read(filename) + + def __repr__(self): + s='<{} object>:\n'.format(type(self).__name__) + s+='- header: {}\n'.format(self['header']) + s+='- columns: {}\n'.format(self['columns']) + s+='- nPolars:{}\n'.format(self['nPolars']) + s+='- data: shape {}\n'.format(self['data'].shape) + s+=' first: {}\n'.format(self['data'][0,:]) + s+=' last: {}\n'.format(self['data'][-1,:]) + return s + + @staticmethod + def formatName(): raise NotImplementedError() + + def toDataFrame(self): + if self['nPolars']==1: + return pd.DataFrame(data=self['data'], columns=self['columns']) + else: + raise NotImplementedError() + +class PolarFile_OneLineHeader(BasePolarFile): + """ Polar file with exatcly one line of header. + Column names in header can be separated by spaces or commas. + Header may start with the following comment characters: ['#','!','%'] + Data may be space or column separated + """ + @staticmethod + def formatName(): return 'Polar file one header line' + + def read(self, filename): + super().__init__() + with open(filename) as f: + header = f.readline().strip() + second = f.readline() + self['header'] = header + for c in self.COMMENT_CHARS: + header = header.lstrip(c) + sep=',' + try: + self['data'] = np.loadtxt(filename, delimiter=sep, skiprows=1) + except: + sep=None + self['data'] = np.loadtxt(filename, delimiter=sep, skiprows=1) + self['nPolars']=1 + + # --- Detect columns + nCols = self['data'].shape[1] + # First, if all values are numeric, abort + onestring = header.replace(',',' ') + try: + vals = np.array(onestring.split()).astype(float) # This should fail + except: + pass # Great, it actually failed, the first line is not made of floats + else: + raise WrongPolarFormatError('The first line is all numeric, it should contain column names') + # Then, try to split by commas or space + colsComma = header.split(',') + colsSpace = header.split() + if len(colsComma)==nCols: + cols = [c.strip() for c in colsComma] + elif len(colsSpace)==nCols: + cols = colsSpace + else: + raise BrokenPolarFormatError('The number of header columns ({}) does not match the number of columns in the data ({})'.format(len(cols),nCols)) + self['columns'] = cols + +class PolarFile_NoHeader(BasePolarFile): + """ + Polar file with no header, or some "meaningless" comments that starts with ['#','!','%'] + Data may be space or column separated + """ + @staticmethod + def formatName(): return 'Polar file no header' + + def read(self, filename): + self['data'] = _load_txt(filename, self.COMMENT_CHARS) + self['nPolars'] = 1 + # --- Detect columns + nCols = self['data'].shape[1] + d = [DEFAULT_COLUMNS['alpha'], DEFAULT_COLUMNS['cl'], DEFAULT_COLUMNS['cd'], DEFAULT_COLUMNS['cm']] + n2col = {2:d[0:2], 3:d[0:3], 4:d[0:4] } + if nCols in n2col.keys(): + self['columns'] = n2col[nCols] + else: + raise BrokenPolarFormatError('The number of columns in the data ({}) is not amongst the supported ones ({}).'.format(nCols, n2col.keys())) + +class PolarFile_AD_Basic(BasePolarFile): + """ + Reads a basic AeroDyn file + """ + @staticmethod + def formatName(): return 'Polar AeroDyn file basic' + + def read(self, filename): + self['data'] = _load_txt(filename, self.COMMENT_CHARS, skiprows = 53) + self['nPolars'] = 1 + # import pandas as pd + # df=pd.read_csv(filename, skiprows = 53, header=None, delim_whitespace=True, names=['Alpha','Cl','Cd','Cm']).values + # --- Detect columns + nCols = self['data'].shape[1] + n2col = {2:['Alpha','Cl'], 3:['Alpha','Cl', 'Cm'], 4:['Alpha','Cl', 'Cm', 'Cd'] } + if nCols in n2col.keys(): + self['columns'] = n2col[nCols] + else: + raise BrokenPolarFormatError('The number of columns in the data ({}) is not amongst the supported ones ({}).'.format(nCols, n2col.keys())) + + +class PolarFile(BasePolarFile): + """ """ + @staticmethod + def formatName(): return 'Polar file' + + +def loadPolarFile(filename, fformat='auto', to_radians=False, standardizeCols=True, verbose=False): + """ + Loads a PolarFile, return a dataFrame + """ + if not os.path.exists(filename): + raise Exception('File not found:',filename) + print('[WARN] Not all file formats supported ') + + allReaders = [ADPolarFile, PolarFile_OneLineHeader, PolarFile_NoHeader, PolarFile_AD_Basic, CSVFile] + delimReaders = [PolarFile_OneLineHeader, PolarFile_AD_Basic, CSVFile] + + def tryReading(f, reader): + if f is not None: + return f + if reader is None: + return None + try: + if verbose: + print('') + print('PolarFile: trying to read with format: {}'.format(reader.formatName())) + return reader(filename) + except: + if verbose: + print('>>> PolarFile: Failed to read with format: {}'.format(reader.formatName())) + pass + f = None + Re = np.nan # TODO + + if fformat==None: + fformat = 'auto' + + if fformat=='ADPolar': + f = ADPolarFile(filename) + + elif fformat=='delimited': + + for reader in delimReaders: + f = tryReading(f, reader) + if f is not None: + break + + elif fformat=='auto': + + for reader in allReaders: + f = tryReading(f, reader) + if f is not None: + break + + if f is None: + raise Exception('Unable to read the polar {} using the fileformat {}. Use a supported fileformat'.format(filename, fformat)) + + # --- Store in DataFrame + df = f.toDataFrame() + if verbose: + print('PolarFile: Columns before: ',df.columns.values) + + # --- Rename columns - Standardize column names + if standardizeCols: + COLS_TODO= {**DEFAULT_COLUMNS,**DEFAULT_COLUMNS_EXT} + for ic, col in enumerate(df.columns): + c = col.strip().lower().replace('_','') + c = c.replace('aoa','alpha') + c = c.replace('fst','fs') + c = c.replace('012','z12') + c = c.replace('cllin','clinv') + c = c.replace('clpot','clinv') + known_keys = reversed(sorted(list(COLS_TODO.keys()))) + found=False + for kk in known_keys: + if c.startswith(kk): + cnew = COLS_TODO.pop(kk) + #print('changing {} to {}'.format(c, cnew)) + df.columns.values[ic] = cnew # rename column + found=True + break + if not found: + print('[WARN] PolarFile: The following column was not understood: {}'.format(col)) + + # --- Standardize data + for k,v in DEFAULT_COLUMNS.items(): + if v not in df.columns: + df[v] = np.nan + if verbose: + print('PolarFile: Columns after: ',df.columns.values) + + if standardizeCols: + cAlpha = DEFAULT_COLUMNS['alpha'] + if cAlpha not in df.columns: + raise Exception('Angle of attack was not detected as part of the columns') + else: + cAlpha = df.columns.values[0] + + if to_radians: + # First, check the data, if the max alpha is above pi, most likely we are in degrees + _radians = np.mean(np.abs(df[cAlpha])) <= np.pi / 2 + if _radians: + raise Exception('PolarFile: Asked to convert input to radian, but the data is likely already in radians.') + df[cAlpha]*=np.pi/180 + + Re = np.nan + return df, Re + +if __name__ == "__main__": + from welib.tools.clean_exceptions import * +# PolarFile_OneLineHeader('data/63-235.csv') + #f = PolarFile_NoHeader('data/63-235.csv') +# f = loadPolarFile('data/63-235.csv') + f = loadPolarFile('data/FFA-W3-241-Re12M.dat', verbose=True) + #f = loadPolarFile('data/Cylinder.dat') + #f = loadPolarFile('../../data/NREL5MW/5MW_Baseline/Airfoils/DU21_A17.dat') + print(f) + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py new file mode 100644 index 0000000000..7f2108bbfa --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py @@ -0,0 +1,47 @@ +import unittest +import numpy as np +import os +MyDir=os.path.dirname(__file__) +from pyFAST.airfoils.Polar import * + +# --------------------------------------------------------------------------------} +# --- +# --------------------------------------------------------------------------------{ +class TestPolarInterp(unittest.TestCase): + + def test_interp(self): + # --- Interpolation of self is self + P1=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) + P2=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) + P3= blend(P1,P2,0.5) + np.testing.assert_equal(P3.alpha,P1.alpha) + np.testing.assert_equal(P3.cl,P1.cl) + np.testing.assert_equal(P3.cd,P1.cd) + np.testing.assert_equal(P3.cm,P1.cm) + P2.cl=P2.cl+0.3 + P2.cd=P2.cd+0.3 + P2.cm=P2.cm+0.3 + + # --- Interpolation with weight 0 is first + P3= blend(P1,P2,0.0) + np.testing.assert_equal(P3.cl,P1.cl) + np.testing.assert_equal(P3.cd,P1.cd) + np.testing.assert_equal(P3.cm,P1.cm) + # --- Interpolation with weight 1 is second + P3= blend(P1,P2,1.0) + np.testing.assert_equal(P3.cl,P2.cl) + np.testing.assert_equal(P3.cd,P2.cd) + np.testing.assert_equal(P3.cm,P2.cm) + + # --- Interpolation, weight=0.5, same alpha on both + P1.cl=P1.cl*0+1.0 + P1.cd=P1.cl*0+1.0 + P1.cm=P1.cl*0+1.0 + P2.cl=P1.cl*0+2.0 + P2.cd=P1.cl*0+2.0 + P2.cm=P1.cl*0+2.0 + P3= blend(P1,P2,0.5) + np.testing.assert_equal(P3.cl,P2.cl*0+1.5) + np.testing.assert_equal(P3.cd,P2.cl*0+1.5) + np.testing.assert_equal(P3.cm,P2.cl*0+1.5) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py new file mode 100644 index 0000000000..327a23c54b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py @@ -0,0 +1,23 @@ +import unittest +import numpy as np +import os +MyDir=os.path.dirname(__file__) +from pyFAST.airfoils.Polar import * + +# --------------------------------------------------------------------------------} +# --- +# --------------------------------------------------------------------------------{ +class TestPolarManip(unittest.TestCase): + def assertNaN(self,x): + self.assertTrue(np.isnan(x)) + + def test_read(self): + P=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) + self.assertEqual(P.alpha[-1],180) + self.assertEqual(P.cl[-1],0) + + P=Polar(os.path.join(MyDir,'../data/Cylinder.dat')) + self.assertEqual(P.cl.size,3) + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py new file mode 100644 index 0000000000..e117d57e8c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py @@ -0,0 +1,256 @@ +import unittest +import numpy as np +import os +MyDir=os.path.dirname(__file__) +from pyFAST.airfoils.Polar import * + +# --------------------------------------------------------------------------------} +# --- +# --------------------------------------------------------------------------------{ +class TestPolarParams(unittest.TestCase): + def setUp(self): + self.P235 = Polar(os.path.join(MyDir,'../data/63-235.csv')) + self.PFFA = Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) + self.PCyl = Polar(os.path.join(MyDir,'../data/Cylinder.csv')) + self.PFFA_rad = Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat'), radians=True) + + def assertNaN(self,x): + self.assertTrue(np.isnan(x)) + + def test_alpha0(self): + # --- Polar with one Cl value + # non zero cl, alpha0 is nan + self.assertNaN (Polar(None,[100],[0.1],[],[]).alpha0()) + # cl value is 0, alpha0 is arbitrarily 0 + self.assertEqual(Polar(None,[100],[0.0],[],[]).alpha0(), 0) + + # --- Polar with one zero crossing + P=Polar(None,[-10,10],[-0.1,0.1],[],[]) + # Alpha0 is found as long as the window holds it + self.assertEqual(P.alpha0(window=[-50,50]),0.0) + self.assertEqual(P.alpha0(window=[-10,10]),0.0) + self.assertEqual(P.alpha0(window=[ -2, 2]),0.0) + # Error when window outside, no crossing found + self.assertRaises(Exception,P.alpha0, window=[-100,-50]) + + # --- Polar with many zero crossing + P=Polar(None,[-10,-5,0,5,10],[-0.1,0.1,-0.1,0.1,0.2],[],[]) + self.assertEqual(P.alpha0(window=[-10,-5]), -7.5) + # Error when several zero crossing are found + #self.assertRaises(Exception,P.alpha0, window=[-10,10]) + print('\n\n>>>>> TODO alpha0 with no zero crossing was commented!!\n\n') + + # --- Polar with constant values + # non zero cl, alpha0 is nan + self.assertNaN (Polar(None,[-10,10],[0.1,0.1],[],[]).alpha0()) + # cl is 0, alpha0 is arbitrarily 0 + self.assertEqual(Polar(None,[-10,10],[0.0,0.0],[],[]).alpha0(), 0) + + # --- Real Polars + np.testing.assert_almost_equal(self.P235.alpha0(),-1.26, decimal=2) + np.testing.assert_almost_equal(self.PFFA.alpha0(),-2.68, decimal=2) + np.testing.assert_almost_equal(self.PCyl.alpha0(),0.00, decimal=2) + + + def test_slope(self): + alpha0 = 10 + # --- Polar with two points + P=Polar(None,np.array([-1,1])+alpha0,[-1,1],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,1.0) + np.testing.assert_almost_equal(a0, alpha0) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,1.0) + np.testing.assert_almost_equal(a0,alpha0) + # --- Polar three points lin + P=Polar(None,np.array([-1,0,1])+alpha0,[-1,0,1],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,1.0) + np.testing.assert_almost_equal(a0,alpha0) + # --- Polar three points cst + P=Polar(None,np.array([-1,0,2])+alpha0,[1,1,1],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,0.0) + np.testing.assert_almost_equal(a0,np.nan) # for constant Cl/=0, we return nan + # --- Polar with sine shape + P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2,-1,0,1,0,0],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,1.0) + np.testing.assert_almost_equal(a0,0.0) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,1.0) + np.testing.assert_almost_equal(a0,0.0) + # --- Polar sine with plateaux + P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2,-2,-1,0,1,1],[],[],radians=False) + P.alpha0() + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,1.0) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,1.0) + # --- Polar sine-line - Difficult to evaluate + P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2.1,-2,-1.1,0,1.1,1.2],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,1.0,decimal=1) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,1.0,decimal=1) + # --- Polar with a kink - Difficult + P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2,-2,-2,0,1,1],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,1.5,decimal=1) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,2.0) + # --- Polar step function + P=Polar(None,np.array([-3,-2,-1,0,1,2,3])+alpha0,[-.5,-.5,-.5,-.5,.5,.5,.5],[],[]) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(a0,10.5) + np.testing.assert_almost_equal(sl,1.0) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,1.0) + np.testing.assert_almost_equal(a0,10.5) + # --- Sine + alpha = np.linspace(-50,50,100) + Cl = np.sin(alpha*np.pi/180.)*180/np.pi + P=Polar(None,alpha,Cl,[],[]) + sl,a0=P.cl_linear_slope(window=[-10,10]) + np.testing.assert_almost_equal(sl,1.0, decimal=2) + sl,a0=P.cl_linear_slope(window=[-10,10],method='max') + np.testing.assert_almost_equal(sl,1.0, decimal=2) + # --- Real Polars + P=self.PFFA + sl,a0=P.cl_linear_slope(method='optim', radians=True) # Requesting radians outputs + np.testing.assert_almost_equal(sl,7.091, decimal=3) + np.testing.assert_almost_equal(a0,-0.04682, decimal=3) + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,0.123, decimal=3) + np.testing.assert_almost_equal(a0,-2.683, decimal=3) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,0.13, decimal=3) + # --- Real Polars, with alpha already in radians + P=self.PFFA_rad + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,7.091, decimal=3) # This polar is already in radians + np.testing.assert_almost_equal(a0,-0.04682, decimal=3) + sl,a0=P.cl_linear_slope(method='optim', radians=True) + np.testing.assert_almost_equal(sl,7.091, decimal=3) # This polar is already in radians + np.testing.assert_almost_equal(a0,-0.04682, decimal=3) + # --- Cylinder + P=self.PCyl + sl,a0=P.cl_linear_slope(method='optim') + self.assertEqual(sl,0.0) + # --- Real Polars + P=self.P235 + sl,a0=P.cl_linear_slope(method='optim') + np.testing.assert_almost_equal(sl,0.102, decimal=3) + sl,a0=P.cl_linear_slope(method='max') + np.testing.assert_almost_equal(sl,0.113, decimal=3) + # --- Default method (NOTE: Might change in the future!) + sl,a0=P.cl_linear_slope() + np.testing.assert_almost_equal(sl,0.102, decimal=3) + + ##print(sl,a0) + #import matplotlib.pyplot as plt + #fig=plt.figure() + #ax = fig.add_subplot(111) + ## deg + #ax.plot(P.alpha, P.cl) + #ax.plot(WinLin,(np.array(WinLin)-a0)*sl,'o') + #ax.plot(a0,0,'ko') + #ax.plot(WinSearch[0],0,'ko') + #ax.plot(WinSearch[1],0,'ko') + #ax.plot(P.alpha,(P.alpha-a0)*sl,'--') + #ax.set_xlim(np.array(WinLin)+[-20,+20]) + ## rad + ##ax.plot(np.deg2rad(P.alpha), P.cl) + ##ax.plot(WinLin,(np.array(WinLin)-a0)*sl,'o') + ##ax.plot(np.deg2rad(P.alpha),(np.deg2rad(P.alpha)-a0)*sl,'--') + #ax.set_ylim([-3,2.0]) + #plt.show() + + def test_linear_region(self): + + P=self.PCyl + a_lin,cl_lin,slope,alpha0 = P.linear_region() + np.testing.assert_almost_equal(a_lin[0],-180, decimal=1) + np.testing.assert_almost_equal(a_lin[1], 180, decimal=1) + + P=self.P235 + a_lin,cl_lin,slope,alpha0 = P.linear_region() + np.testing.assert_almost_equal(a_lin[0],-6.9, decimal=1) + np.testing.assert_almost_equal(a_lin[1], 6.2, decimal=1) + + P=self.PFFA + a_lin,cl_lin,slope,alpha0 = P.linear_region() + np.testing.assert_almost_equal(a_lin[0],-9.8, decimal=1) + np.testing.assert_almost_equal(a_lin[1], 9.0, decimal=1) + + + #import matplotlib.pyplot as plt + #fig=plt.figure() + #ax = fig.add_subplot(111) + #ax.plot(P.alpha, P.cl) + #ax.plot(P.alpha, slope*(P.alpha-alpha0),'--') + #ax.plot(a_lin,cl_lin) + #ax.plot(a0,0,'ko') + #ax.plot(WinSearch[0],0,'ko') + #ax.plot(WinSearch[1],0,'ko') + #ax.plot(P.alpha,(P.alpha-a0)*sl,'--') + #ax.set_xlim(np.array(WinLin)+[-20,+20]) + #ax.set_ylim([-3,3.0]) + #plt.show() + + def test_fully_sep(self): + # --- 63-235, for that polar + # merging occurs at i=31 and i=120 + # at i=63 there is a singularity (f_st==1, cl_fs=cl/2) + P=self.P235 + cl_fs,f_st=P.cl_fully_separated() + # Below and above merging, fully sep polar is the same as original + np.testing.assert_almost_equal(cl_fs[30] ,P.cl[30]) + np.testing.assert_almost_equal(cl_fs[121],P.cl[121]) + # Singularity at i=63 + np.testing.assert_almost_equal(cl_fs[63],P.cl[63]/2) + np.testing.assert_almost_equal(f_st[63],1.0) + #np.testing.assert_almost_equal(f_st[63],1.0023744) + # Close to singularity, should be not far from cl/2 + np.testing.assert_almost_equal(cl_fs[64],P.cl[64]/2*1.004,decimal=4) + np.testing.assert_almost_equal(cl_fs[62],P.cl[62]/2*0.998,decimal=4) + + # TODO TODO TODO Ensure harmony between f_st if computed with slope that is not max + #P=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat'),compute_params=True) + #cl_fs,f_st0=P.cl_fully_separated() + #f_st=(P.cl-cl_fs)/(P.cl_inv-cl_fs); + + #import matplotlib.pyplot as plt + #fig=plt.figure() + #ax = fig.add_subplot(111) + #ax.plot(P.alpha , f_st0 ) + #ax.plot(P.alpha , f_st ) + #plt.show() + + #import matplotlib.pyplot as plt + #fig=plt.figure() + #ax = fig.add_subplot(111) + #ax.plot(P.alpha,P.cl,label='Cl') + #ax.plot(P.alpha,cl_fs,'--',label='Cl_fs') + #ax.plot(P.alpha,f_st,label='f_st') + #plt.xlim([-50,50]) + #plt.ylim([-3,3]) + #plt.legend() + #plt.show() + #print(f_st) +# +# P=Polar(os.path.join(MyDir,'../data/Cylinder.dat')) +# sl,offset=P.cl_linear_slope() +# +# plt.show() + +# P=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) +# P=Polar(os.path.join(MyDir,'../data/63-235.csv')) +# P=Polar(os.path.join(MyDir,'../data/Cylinder.csv')) +# P=Polar(os.path.join(MyDir,'../data/AD_3-63-224_mod.csv')) +# P=Polar(os.path.join(MyDir,'../data/AD_4-63-218_mod.csv')) +# P=Polar(os.path.join(MyDir,'../data/AD_5_63-214_mod.csv')) + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py new file mode 100644 index 0000000000..1b801be85d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py @@ -0,0 +1,51 @@ + +import unittest +import numpy as np +import os +import matplotlib.pyplot as plt +MyDir=os.path.dirname(__file__) +from pyFAST.airfoils.Polar import _intersections + +# --------------------------------------------------------------------------------} +# --- +# --------------------------------------------------------------------------------{ + + +class TestPolarSubFunctions(unittest.TestCase): + + + def test_intersection1(self): + a, b = 1, 2 + phi = np.linspace(3, 10, 100) + x1 = a*phi - b*np.sin(phi) + y1 = a - b*np.cos(phi) + + x2=phi + y2=np.sin(phi)+2 + x,y=_intersections(x1,y1,x2,y2, plot=False) + + np.testing.assert_almost_equal(x,[6.10766,8.3648], decimal=4) + np.testing.assert_almost_equal(y,[1.825397,2.87209], decimal=4) + + def test_intersection2(self): + + alpha = np.linspace(-180,180,121) + Cl = alpha*np.pi/180 * 2*np.pi + Cn = Cl*np.cos(alpha*np.pi/180) + Cn_lin = 0.10876153755016482* (alpha) #*np.pi/180) + Cn_f = Cn_lin * ((1 + np.sqrt(0.7)) / 2) ** 2 + + x1 = alpha + y1 = Cn + + x2 = alpha + y2 = Cn_f + + x,y=_intersections(x1,y1,x2,y2, plot=False, verbose=False) + + np.testing.assert_almost_equal(x,[-33.2116, 0, 33.2116 ], decimal=3) + np.testing.assert_almost_equal(y,[-3.046 , 0 , 3.04623], decimal=3) + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py new file mode 100644 index 0000000000..c7051864e5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py @@ -0,0 +1,33 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) + import matplotlib.pyplot as plt + print('\n--------------------------------------------------------------') + for f in files: + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + plt.close('all') + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst new file mode 100644 index 0000000000..000b67d7c3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst @@ -0,0 +1,3 @@ + +More details coming soon! +------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py new file mode 100644 index 0000000000..1aef8194b3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py @@ -0,0 +1,673 @@ +import os +import collections +import glob +import pandas as pd +import numpy as np +import shutil +import stat +import re + +# --- Misc fast libraries +import pyFAST.input_output.fast_input_file as fi +import pyFAST.case_generation.runner as runner +import pyFAST.input_output.postpro as postpro +from pyFAST.input_output.fast_wind_file import FASTWndFile from pyFAST.input_output.rosco_performance_file import ROSCOPerformanceFile from pyFAST.input_output.csv_file import CSVFile +# --------------------------------------------------------------------------------} +# --- Template replace +# --------------------------------------------------------------------------------{ +def handleRemoveReadonlyWin(func, path, exc_info): + """ + Error handler for ``shutil.rmtree``. + If the error is due to an access error (read only file) + it attempts to add write permission and then retries. + Usage : ``shutil.rmtree(path, onerror=onerror)`` + """ + if not os.access(path, os.W_OK): + # Is the error an access error ? + os.chmod(path, stat.S_IWUSR) + func(path) + else: + raise + + +def forceCopyFile (sfile, dfile): + # ---- Handling error due to wrong mod + if os.path.isfile(dfile): + if not os.access(dfile, os.W_OK): + os.chmod(dfile, stat.S_IWUSR) + #print(sfile, ' > ', dfile) + shutil.copy2(sfile, dfile) + +def copyTree(src, dst): + """ + Copy a directory to another one, overwritting files if necessary. + copy_tree from distutils and copytree from shutil fail on Windows (in particular on git files) + """ + def forceMergeFlatDir(srcDir, dstDir): + if not os.path.exists(dstDir): + os.makedirs(dstDir) + for item in os.listdir(srcDir): + srcFile = os.path.join(srcDir, item) + dstFile = os.path.join(dstDir, item) + forceCopyFile(srcFile, dstFile) + + def isAFlatDir(sDir): + for item in os.listdir(sDir): + sItem = os.path.join(sDir, item) + if os.path.isdir(sItem): + return False + return True + + for item in os.listdir(src): + s = os.path.join(src, item) + d = os.path.join(dst, item) + if os.path.isfile(s): + if not os.path.exists(dst): + os.makedirs(dst) + forceCopyFile(s,d) + if os.path.isdir(s): + isRecursive = not isAFlatDir(s) + if isRecursive: + copyTree(s, d) + else: + forceMergeFlatDir(s, d) + + +def templateReplaceGeneral(PARAMS, templateDir=None, outputDir=None, main_file=None, removeAllowed=False, removeRefSubFiles=False, oneSimPerDir=False, dryRun=False): + """ Generate inputs files by replacing different parameters from a template file. + The generated files are placed in the output directory `outputDir` + The files are read and written using the library `weio`. + The template file is read and its content can be changed like a dictionary. + Each item of `PARAMS` correspond to a set of parameters that will be replaced + in the template file to generate one input file. + + For "FAST" input files, parameters can be changed recursively. + + + INPUTS: + PARAMS: list of dictionaries. Each key of the dictionary should be a key present in the + template file when read with `weio` (see: weio.read(main_file).keys() ) + + PARAMS[0]={'DT':0.1, 'EDFile|GBRatio':1, 'ServoFile|GenEff':0.8} + + templateDir: if provided, this directory and its content will be copied to `outputDir` + before doing the parametric substitution + + outputDir : directory where files will be generated. + """ + # --- Helper functions + def rebase_rel(wd,s,sid): + split = os.path.splitext(s) + return os.path.join(wd,split[0]+sid+split[1]) + + def get_strID(p) : + if '__name__' in p.keys(): + strID=p['__name__'] + else: + raise Exception('When calling `templateReplace`, provide the key `__name_` in the parameter dictionaries') + return strID + + def splitAddress(sAddress): + sp = sAddress.split('|') + if len(sp)==1: + return sp[0],[] + else: + return sp[0],sp[1:] + + def rebaseFileName(org_filename, workDir, strID): + new_filename_full = rebase_rel(workDir, org_filename,'_'+strID) + new_filename = os.path.relpath(new_filename_full,workDir).replace('\\','/') + return new_filename, new_filename_full + + def replaceRecurse(templatename_or_newname, FileKey, ParamKey, ParamValue, Files, strID, workDir, TemplateFiles): + """ + FileKey: a single key defining which file we are currently modifying e.g. :'AeroFile', 'EDFile','FVWInputFileName' + ParamKey: the address key of the parameter to be changed, relative to the current FileKey + e.g. 'EDFile|IntMethod' (if FileKey is '') + 'IntMethod' (if FileKey is 'EDFile') + ParamValue: the value to be used + Files: dict of files, as returned by weio, keys are "FileKeys" + """ + # --- Special handling for the root + if FileKey=='': + FileKey='Root' + # --- Open (or get if already open) file where a parameter needs to be changed + if FileKey in Files.keys(): + # The file was already opened, it's stored + f = Files[FileKey] + newfilename_full = f.filename + newfilename = os.path.relpath(newfilename_full,workDir).replace('\\','/') + + else: + templatefilename = templatename_or_newname + templatefilename_full = os.path.join(workDir,templatefilename) + TemplateFiles.append(templatefilename_full) + if FileKey=='Root': + # Root files, we start from strID + ext = os.path.splitext(templatefilename)[-1] + newfilename_full = os.path.join(wd,strID+ext) + newfilename = strID+ext + if dryRun: newfilename = os.path.join(workDir, newfilename) obj=type('DummyClass', (object,), {'filename':newfilename}) return newfilename, {'Root':obj} else: + newfilename, newfilename_full = rebaseFileName(templatefilename, workDir, strID) + #print('--------------------------------------------------------------') + #print('TemplateFile :', templatefilename) + #print('TemplateFileFull:', templatefilename_full) + #print('NewFile :', newfilename) + #print('NewFileFull :', newfilename_full) + shutil.copyfile(templatefilename_full, newfilename_full) + f= fi.FASTInputFile(newfilename_full) # open the template file for that filekey + Files[FileKey]=f # store it + + # --- Changing parameters in that file + NewFileKey_or_Key, ChildrenKeys = splitAddress(ParamKey) + if len(ChildrenKeys)==0: + # A simple parameter is changed + Key = NewFileKey_or_Key + #print('Setting', FileKey, '|',Key, 'to',ParamValue) + if Key=='OutList': + if len(ParamValue)>0: + if len(ParamValue[0])==0: + f[Key] = ParamValue # We replace + else: + OutList=f[Key] + f[Key] = addToOutlist(OutList, ParamValue) # we insert + else: + f[Key] = ParamValue + else: + # Parameters needs to be changed in subfiles (children) + NewFileKey = NewFileKey_or_Key + ChildrenKey = '|'.join(ChildrenKeys) + child_templatefilename = f[NewFileKey].strip('"') # old filename that will be used as a template + baseparent = os.path.dirname(newfilename) + #print('Child templatefilename:',child_templatefilename) + #print('Parent base dir :',baseparent) + workDir = os.path.join(workDir, baseparent) + + # + newchildFilename, Files = replaceRecurse(child_templatefilename, NewFileKey, ChildrenKey, ParamValue, Files, strID, workDir, TemplateFiles) + #print('Setting', FileKey, '|',NewFileKey, 'to',newchildFilename) + f[NewFileKey] = '"'+newchildFilename+'"' + + return newfilename, Files + + + # --- Safety checks + if templateDir is None and outputDir is None: + raise Exception('Provide at least a template directory OR an output directory') + + if templateDir is not None: + if not os.path.exists(templateDir): + raise Exception('Template directory does not exist: '+templateDir) + + # Default value of outputDir if not provided + if templateDir[-1]=='/' or templateDir[-1]=='\\' : + templateDir=templateDir[0:-1] + if outputDir is None: + outputDir=templateDir+'_Parametric' + + # --- Main file use as "master" + if templateDir is not None: + main_file=os.path.join(outputDir, os.path.basename(main_file)) + else: + main_file=main_file + + # Params need to be a list + if not isinstance(PARAMS,list): + PARAMS=[PARAMS] + + if oneSimPerDir: + workDirS=[os.path.join(outputDir,get_strID(p)) for p in PARAMS] + else: + workDirS=[outputDir]*len(PARAMS) + # --- Creating outputDir - Copying template folder to outputDir if necessary + # Copying template folder to workDir + for wd in list(set(workDirS)): + if removeAllowed: + removeFASTOuputs(wd) + if os.path.exists(wd) and removeAllowed: + shutil.rmtree(wd, ignore_errors=False, onerror=handleRemoveReadonlyWin) + templateDir = os.path.normpath(templateDir) + wd = os.path.normpath(wd) + # NOTE: need some special handling if path are the sames + if templateDir!=wd: + copyTree(templateDir, wd) + if removeAllowed: + removeFASTOuputs(wd) + + + TemplateFiles=[] + files=[] + nTot=len(PARAMS) + for ip,(wd,p) in enumerate(zip(workDirS,PARAMS)): + if np.mod(ip+1,1000)==0: + print('File {:d}/{:d}'.format(ip,nTot)) + if '__index__' not in p.keys(): + p['__index__']=ip + + main_file_base = os.path.basename(main_file) + strID = get_strID(p) + # --- Setting up files for this simulation + Files=dict() + for k,v in p.items(): + if k =='__index__' or k=='__name__': + continue + new_mainFile, Files = replaceRecurse(main_file_base, '', k, v, Files, strID, wd, TemplateFiles) + if dryRun: break + # --- Writting files + for k,f in Files.items(): + if k=='Root': + files.append(f.filename) + if not dryRun: f.write() + # --- Remove extra files at the end + if removeRefSubFiles: + TemplateFiles, nCounts = np.unique(TemplateFiles, return_counts=True) + if not oneSimPerDir: + # we can only detele template files that were used by ALL simulations + TemplateFiles=[t for nc,t in zip(nCounts, TemplateFiles) if nc==len(PARAMS)] + for tf in TemplateFiles: + try: + os.remove(tf) + except: + print('[FAIL] Removing '+tf) + pass + return files + +# def templateReplace(PARAMS, *args, **kwargs): +def templateReplace(PARAMS, templateDir, outputDir=None, main_file=None, removeAllowed=False, removeRefSubFiles=False, oneSimPerDir=False, dryRun=False): + """ + see templateReplaceGeneral + + Replace parameters in a fast folder using a list of dictionaries where the keys are for instance: + 'DT', 'EDFile|GBRatio', 'ServoFile|GenEff' + """ + # --- For backward compatibility, remove "FAST|" from the keys + for p in PARAMS: + old_keys=[ k for k,_ in p.items() if k.find('FAST|')==0] + for k_old in old_keys: + k_new=k_old.replace('FAST|','') + p[k_new] = p.pop(k_old) + +# return templateReplaceGeneral(PARAMS, *args, **kwargs) + return templateReplaceGeneral(PARAMS, templateDir, outputDir=outputDir, main_file=main_file, + removeAllowed=removeAllowed, removeRefSubFiles=removeRefSubFiles, oneSimPerDir=oneSimPerDir, dryRun=dryRun) + +def addToOutlist(OutList, Signals): + if not isinstance(Signals,list): + raise Exception('Signals must be a list') + if len(Signals)==0: + return + for s in Signals: + if len(s)>0: + ss=s.split()[0].strip().strip('"').strip('\'') + AlreadyIn = any([o.find(ss)==1 for o in OutList ]) + if not AlreadyIn: + OutList.append(s) + if len(OutList[0])>0: + OutList=['']+OutList # ensuring first element has zero length (fast_input_file limitation for now) + return OutList + +def removeFASTOuputs(workDir): + # Cleaning folder + for f in glob.glob(os.path.join(workDir,'*.out')): + os.remove(f) + for f in glob.glob(os.path.join(workDir,'*.outb')): + os.remove(f) + for f in glob.glob(os.path.join(workDir,'*.ech')): + os.remove(f) + for f in glob.glob(os.path.join(workDir,'*.sum')): + os.remove(f) + +# --------------------------------------------------------------------------------} +# --- Tools for template replacement +# --------------------------------------------------------------------------------{ +def paramsSteadyAero(p=None): + p = dict() if p is None else p + p['AeroFile|AFAeroMod']=1 # remove dynamic effects dynamic + p['AeroFile|WakeMod']=1 # remove dynamic inflow dynamic + p['AeroFile|TwrPotent']=0 # remove tower shadow + p['AeroFile|TwrAero']=False # remove tower shadow + return p + +def paramsNoGen(p=None): + p = dict() if p is None else p + p['EDFile|GenDOF' ] = 'False' + return p + +def paramsGen(p=None): + p = dict() if p is None else p + p['EDFile|GenDOF' ] = 'True' + return p + +def paramsNoController(p=None): + p = dict() if p is None else p + p['ServoFile|PCMode'] = 0; + p['ServoFile|VSContrl'] = 0; + p['ServoFile|YCMode'] = 0; + return p + +def paramsControllerDLL(p=None): + p = dict() if p is None else p + p['ServoFile|PCMode'] = 5; + p['ServoFile|VSContrl'] = 5; + p['ServoFile|YCMode'] = 5; + p['EDFile|GenDOF'] = 'True'; + return p + + +def paramsStiff(p=None): + p = dict() if p is None else p + p['EDFile|FlapDOF1'] = 'False' + p['EDFile|FlapDOF2'] = 'False' + p['EDFile|EdgeDOF' ] = 'False' + p['EDFile|TeetDOF' ] = 'False' + p['EDFile|DrTrDOF' ] = 'False' + p['EDFile|YawDOF' ] = 'False' + p['EDFile|TwFADOF1'] = 'False' + p['EDFile|TwFADOF2'] = 'False' + p['EDFile|TwSSDOF1'] = 'False' + p['EDFile|TwSSDOF2'] = 'False' + p['EDFile|PtfmSgDOF'] = 'False' + p['EDFile|PtfmSwDOF'] = 'False' + p['EDFile|PtfmHvDOF'] = 'False' + p['EDFile|PtfmRDOF'] = 'False' + p['EDFile|PtfmPDOF'] = 'False' + p['EDFile|PtfmYDOF'] = 'False' + return p + +def paramsWS_RPM_Pitch(WS, RPM, Pitch, baseDict=None, flatInputs=False, tMax_OneRotation=True, nPerRot=60, dtMax=0.2): + """ + Generate OpenFAST "parameters" (list of dictionaries with "address") + chaing the inputs in ElastoDyn, InflowWind for different wind speed, RPM and Pitch + """ + # --- Ensuring everythin is an iterator + def iterify(x): + if not isinstance(x, collections.Iterable): x = [x] + return x + WS = iterify(WS) + RPM = iterify(RPM) + Pitch = iterify(Pitch) + # --- If inputs are not flat but different vectors to length through, we flatten them (TODO: meshgrid and ravel?) + if not flatInputs : + WS_flat = [] + Pitch_flat = [] + RPM_flat = [] + for pitch in Pitch: + for rpm in RPM: + for ws in WS: + WS_flat.append(ws) + RPM_flat.append(rpm) + Pitch_flat.append(pitch) + else: + WS_flat, Pitch_flat, RPM_flat = WS, Pitch, RPM + + # --- Defining the parametric study + PARAMS=[] + i=0 + for ws,rpm,pitch in zip(WS_flat,RPM_flat,Pitch_flat): + if baseDict is None: + p=dict() + else: + p = baseDict.copy() + if tMax_OneRotation: + # Ensure that tMax is large enough to cover one full rotation + omega = rpm/60*2*np.pi + T = 2*np.pi/omega + dt = min(dtMax, T/nPerRot) + p['DT'] = dt + p['TMax'] = T+3*dt # small buffer + p['DT_Out'] = 'default' + + p['EDFile|RotSpeed'] = rpm + p['InflowFile|HWindSpeed'] = ws + p['InflowFile|WindType'] = 1 # Setting steady wind + p['EDFile|BlPitch(1)'] = pitch + p['EDFile|BlPitch(2)'] = pitch + p['EDFile|BlPitch(3)'] = pitch + + p['__index__'] = i + #p['__name__'] = '{:03d}_ws{:04.1f}_pt{:04.2f}_om{:04.2f}'.format(p['__index__'],p['InflowFile|HWindSpeed'],p['EDFile|BlPitch(1)'],p['EDFile|RotSpeed']) + p['__name__'] = 'ws{:04.1f}_pt{:04.2f}_om{:04.2f}'.format(p['InflowFile|HWindSpeed'],p['EDFile|BlPitch(1)'],p['EDFile|RotSpeed']) + i=i+1 + PARAMS.append(p) + return PARAMS + +def paramsLinearTrim(p=None): + p = dict() if p is None else p + + # Set a few DOFs, move this to main file + p['Linearize'] = True + p['CalcSteady'] = True + p['TrimGain'] = 1e-4 + p['TrimTol'] = 1e-5 + p['CompMooring'] = 0 + p['CompHydro'] = 0 + p['LinOutJac'] = False + p['LinOutMod'] = False + p['OutFmt'] = '"ES20.12E3"' # Important for decent resolution + + p['AeroFile|AFAeroMod'] = 1 + p['AeroFile|CavitCheck'] = 'False' + p['AeroFile|CompAA'] = 'False' + + p['ServoFile|PCMode'] = 0 + p['ServoFile|VSContrl'] = 1 + + p['ServoFile|CompNTMD'] = 'False' + p['ServoFile|CompTTMD'] = 'False' + + # Set all DOFs off, enable as desired + p['EDFile|FlapDOF1'] = 'False' + p['EDFile|FlapDOF2'] = 'False' + p['EDFile|EdgeDOF'] = 'False' + p['EDFile|TeetDOF'] = 'False' + p['EDFile|DrTrDOF'] = 'False' + p['EDFile|GenDOF'] = 'False' + p['EDFile|YawDOF'] = 'False' + p['EDFile|TwFADOF1'] = 'False' + p['EDFile|TwFADOF2'] = 'False' + p['EDFile|TwSSDOF1'] = 'False' + p['EDFile|TwSSDOF2'] = 'False' + p['EDFile|PtfmSgDOF'] = 'False' + p['EDFile|PtfmSwDOF'] = 'False' + p['EDFile|PtfmHvDOF'] = 'False' + p['EDFile|PtfmRDOF'] = 'False' + p['EDFile|PtfmPDOF'] = 'False' + p['EDFile|PtfmYDOF'] = 'False' + + + return p + +# --------------------------------------------------------------------------------} +# --- +# --------------------------------------------------------------------------------{ +def createStepWind(filename,WSstep=1,WSmin=3,WSmax=25,tstep=100,dt=0.5,tmin=0,tmax=999): + f = FASTWndFile() + Steps= np.arange(WSmin,WSmax+WSstep,WSstep) + print(Steps) + nCol = len(f.colNames) + nRow = len(Steps)*2 + M = np.zeros((nRow,nCol)); + M[0,0] = tmin + M[0,1] = WSmin + for i,s in enumerate(Steps[:-1]): + M[2*i+1,0] = tmin + (i+1)*tstep-dt + M[2*i+2,0] = tmin + (i+1)*tstep + M[2*i+1,1] = Steps[i] + if i0: + main_fastfile=os.path.basename(main_fastfile) + + # --- Reading main fast file to get rotor radius + fst = fi.FASTInputFile(os.path.join(refdir,main_fastfile)) + ed = fi.FASTInputFile(os.path.join(refdir,fst['EDFile'].replace('"',''))) + R = ed['TipRad'] + + # --- Making sure we have + if (Omega is not None): + if (Lambda is not None): + WS = np.ones(Omega.shape)*WS_default + elif (WS is not None): + if len(WS)!=len(Omega): + raise Exception('When providing Omega and WS, both vectors should have the same dimension') + else: + WS = np.ones(Omega.shape)*WS_default + else: + Omega = WS_default * Lambda/R*60/(2*np.pi) #[rpm] TODO, use more realistic combinations of WS and Omega + WS = np.ones(Omega.shape)*WS_default + + + # --- Defining flat vectors of operating conditions + WS_flat = [] + RPM_flat = [] + Pitch_flat = [] + for pitch in Pitch: + for (rpm,ws) in zip(Omega,WS): + WS_flat.append(ws) + RPM_flat.append(rpm) + Pitch_flat.append(pitch) + # --- Setting up default options + baseDict={'TMax': TMax, 'DT': 0.01, 'DT_Out': 0.1, 'OutFileFmt':2} # NOTE: Tmax should be at least 2pi/Omega + baseDict['AeroFile|OutList'] = ['', '"RtAeroCp"', '"RtAeroCt"','"RtVAvgxh"'] + baseDict['EDFile|OutList'] = ['', '"Azimuth"' ,'"RotSpeed"', '"BldPitch1"'] + baseDict['InflowFile|PLexp'] = 0 + baseDict['InflowFile|RefHt'] = 90 # Arbitrary + baseDict['InflowFile|NWindVel'] =1 + baseDict['InflowFile|WindVxiList']=0 + baseDict['InflowFile|WindVyiList']=0 + baseDict['InflowFile|WindVziList']=90 # should be same as RefHt + baseDict['InflowFile|OutList'] = ['', '"Wind1VelX"'] + + baseDict = paramsNoController(baseDict) + if bStiff: + baseDict = paramsStiff(baseDict) + if bNoGen: + baseDict = paramsNoGen(baseDict) + if bSteadyAero: + baseDict = paramsSteadyAero(baseDict) + + # --- Creating set of parameters to be changed + PARAMS = paramsWS_RPM_Pitch(WS_flat, RPM_flat, Pitch_flat, baseDict=baseDict, flatInputs=True, tMax_OneRotation=True) + + # --- Generating all files in a workDir + if workDir is None: + workDir = refdir.strip('/').strip('\\')+'_CPLambdaPitch' + print('>>> Generating {} inputs files in {}'.format(len(PARAMS), workDir)) + RemoveAllowed=reRun # If the user want to rerun, we can remove, otherwise we keep existing simulations + fastFiles=templateReplace(PARAMS, refdir, outputDir=workDir,removeRefSubFiles=True,removeAllowed=RemoveAllowed,main_file=main_fastfile, dryRun=skipWrite) + + # --- Creating a batch script just in case + batchFile = os.path.join(workDir,'_RUN_ALL.bat') + runner.writeBatch(batchFile, fastFiles, fastExe=fastExe, nBatches=nCores) + print('>>> Batch script created (if preferred):', batchFile) + + # --- Running fast simulations + print('>>> Running {} simulations...'.format(len(fastFiles))) + runner.run_fastfiles(fastFiles, showOutputs=showOutputs, fastExe=fastExe, nCores=nCores, reRun=reRun) + + # --- Postpro - Computing averages at the end of the simluation + print('>>> Postprocessing...') + outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] + # outFiles = glob.glob(os.path.join(workDir,'*.outb')) + ColKeepStats = ['RotSpeed_[rpm]','BldPitch1_[deg]','RtAeroCp_[-]','RtAeroCt_[-]','Wind1VelX_[m/s]'] + ColSort='RotSpeed_[rpm]' + try: + result = postpro.averagePostPro(outFiles, avgMethod='periods', avgParam=1, ColKeep=ColKeepStats, ColSort=ColSort ) + except: + result = postpro.averagePostPro(outFiles, avgMethod='constantwindow', avgParam=None, ColKeep=ColKeepStats, ColSort=ColSort) + + # --- Adding lambda, sorting and keeping only few columns + result['lambda_[-]'] = result['RotSpeed_[rpm]']* R*2*np.pi/60/result['Wind1VelX_[m/s]'] + result.sort_values(['lambda_[-]','BldPitch1_[deg]'], ascending=[True,True], inplace=True) + ColKeepFinal = ['lambda_[-]','BldPitch1_[deg]','RtAeroCp_[-]','RtAeroCt_[-]'] + result = result[ColKeepFinal] + + # --- Converting to matrices + CP = result['RtAeroCp_[-]'].values + CT = result['RtAeroCt_[-]'].values + MCP = CP.reshape((len(Lambda),len(Pitch))) + MCT = CT.reshape((len(Lambda),len(Pitch))) + + # --- Create a ROSCO PerformanceFile for convenience + turbname = os.path.basename(exportBase) + rs = ROSCOPerformanceFile(pitch=Pitch, tsr=Lambda, CP=MCP, CT=MCT, name=turbname) + + if exportBase is not None: + if exportFmt.lower()=='rosco': + # Write a ROSCO performance file + aeroMapFile = exportBase+'_CPCTCQ.txt' + rs.write(aeroMapFile) + elif exportFmt.lower()=='csv': + # Write individual CSV files + np.savetxt(exportBase+'_Lambda.csv',Lambda,delimiter = ',') + np.savetxt(exportBase+'_Pitch.csv' ,Pitch ,delimiter = ',') + np.savetxt(exportBase+'_CP.csv' ,MCP ,delimiter = ',') + np.savetxt(exportBase+'_CT.csv' ,MCT ,delimiter = ',') + else: + raise NotImplementedError(exportFmt) + + fig = None + if plot is True: + # --- Plotting matrix of CP values + fig = rs.plotCP3D() + return rs, result, fig + + +if __name__=='__main__': + # --- Test of templateReplace + PARAMS = {} + PARAMS['TMax'] = 10 + PARAMS['__name__'] = 'MyName' + PARAMS['DT'] = 0.01 + PARAMS['DT_Out'] = 0.1 + PARAMS['EDFile|RotSpeed'] = 100 + PARAMS['EDFile|BlPitch(1)'] = 1 + PARAMS['EDFile|GBoxEff'] = 0.92 + PARAMS['ServoFile|VS_Rgn2K'] = 0.00038245 + PARAMS['ServoFile|GenEff'] = 0.95 + PARAMS['InflowFile|HWindSpeed'] = 8 + templateReplace(PARAMS,refDir,RemoveRefSubFiles=True) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore new file mode 100644 index 0000000000..34e7effc2a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore @@ -0,0 +1,4 @@ +NREL5MW/ +NREL5MW_* +*.csv +_* diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py new file mode 100644 index 0000000000..a7b98b54eb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py @@ -0,0 +1,48 @@ +import numpy as np +import os +import matplotlib.pyplot as plt + +import pyFAST.case_generation.case_gen as case_gen +import pyFAST.input_output.postpro as postpro + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + +def CPLambdaExample(): + """ Example to determine the CP-CT Lambda Pitch matrices of a turbine. + This script uses the function CPCT_LambdaPitch which basically does the same as Parametric Examples given in this folder + """ + FAST_EXE = os.path.join(MyDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) + ref_dir = os.path.join(MyDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) + main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template + + # --- Computing CP and CT matrices for range of lambda and pitches + Lambda = np.linspace(0.1,10,3) + Pitch = np.linspace(-10,10,4) + + CP,CT,Lambda,Pitch,MaxVal,result = case_gen.CPCT_LambdaPitch(ref_dir,main_file,Lambda,Pitch,fastExe=FAST_EXE,showOutputs=False,nCores=4,TMax=10) + + print('CP max',MaxVal) + + # --- Plotting matrix of CP values + from mpl_toolkits.mplot3d import Axes3D + from matplotlib import cm + fig = plt.figure() + ax = fig.gca(projection='3d') + LAMBDA, PITCH = np.meshgrid(Lambda, Pitch) + CP[CP<0]=0 + surf = ax.plot_surface(LAMBDA, PITCH, np.transpose(CP), cmap=cm.coolwarm, linewidth=0, antialiased=True,alpha=0.8) + ax.scatter(MaxVal['lambda_opt'],MaxVal['pitch_opt'],MaxVal['CP_max'],c='k',marker='o',s=20) + ax.set_xlabel('lambda') + ax.set_ylabel('pitch') + ax.set_zlabel('CP') + fig.colorbar(surf, shrink=0.5, aspect=5) + + + +if __name__=='__main__': + CPLambdaExample() + plt.show() +if __name__=='__test__': + # Need openfast.exe, doing nothing + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py new file mode 100644 index 0000000000..daca408d07 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py @@ -0,0 +1,57 @@ +""" +Generate, run and postprocess openfast cases using an Excelfile which defines the parameters to change for each simulation +""" +import os +import pandas as pd + +import pyFAST.case_generation.case_gen as case_gen +import pyFAST.case_generation.runner as runner +import pyFAST.input_output.postpro as postpro +import pyFAST.input_output as io + +# Get current directory so this script can be called from any location +scriptDir=os.path.dirname(__file__) + + +def main(run=True): + # --- Main Parameters + ref_dir = os.path.join(scriptDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) + FAST_EXE = os.path.join(scriptDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) + main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template + work_dir = os.path.join(scriptDir, '_NREL5MW_ParametricExcel/') # Output folder (will be created) + parametricFile = os.path.join(scriptDir, 'ParametricExcel.xlsx') # Excel file containing set of parameters + + # --- Reading Excel file, converting it to a list of dictionaries, and generate input files + dfs = io.excel_file.ExcelFile(parametricFile).toDataFrame() + if isinstance(dfs, dict): + df = dfs[list(dfs.keys())[0]] + else: + df = dfs + PARAMS = df.to_dict('records') + fastFiles=case_gen.templateReplace(PARAMS, ref_dir, outputDir=work_dir, removeRefSubFiles=True, removeAllowed=False, main_file=main_file) + + if run: + # --- Running fast simulations + print('>>> Running {} simulations in {} ...'.format(len(fastFiles), work_dir)) + runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'),fastFiles,fastExe=FAST_EXE) + runner.run_fastfiles(fastFiles, showOutputs=True, fastExe=FAST_EXE, nCores=4) + + # --- Postpro - Computing averages at the end of the simluation + print('>>> Postprocessing...') + outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] + ColKeepStats = ['RotSpeed_[rpm]','BldPitch1_[deg]','RtAeroCp_[-]','RtAeroCt_[-]','Wind1VelX_[m/s]'] + result = postpro.averagePostPro(outFiles,avgMethod='constantwindow',avgParam=5,ColKeep=ColKeepStats,ColSort='RotSpeed_[rpm]') + csv_file = '_ParametricExcel_Summary.csv' + result.to_csv(csv_file ,sep='\t',index=False) + print('Average values saved to _ParametricExcel_Summary.csv') + return work_dir + +if __name__=='__main__': + main() + +if __name__=='__test__': + work_dir = main(run=False) # Need openfast.exe, not running + import shutil + shutil.rmtree(work_dir) + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py new file mode 100644 index 0000000000..1e3e82f4ee --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py @@ -0,0 +1,112 @@ +""" Example to run a set of OpenFAST simulations (parametric study) + +This script uses a reference directory (`ref_dir`) which contains a reference input file (.fst) +1) The reference directory is copied to a working directory (`work_dir`). +2) All the fast input files are generated in this directory based on a list of dictionaries (`PARAMS`). +For each dictionary in this list: + - The keys are "path" to a input parameter, e.g. `EDFile|RotSpeed` or `FAST|TMax`. + These should correspond to the variables used in the FAST inputs files. + - The values are the values corresponding to this parameter +For instance: + PARAMS[0]['EDFile|RotSpeed'] = 5 + PARAMS[0]['InflowFile|HWindSpeed'] = 10 + +3) The simulations are run, successively distributed on `nCores` CPUs. +4) The output files are read, and averaged based on a method (e.g. average over a set of periods, + see averagePostPro in postpro for the different averaging methods). + A pandas DataFrame is returned + +""" +import numpy as np +import os +import pyFAST.case_generation.case_gen as case_gen +import pyFAST.case_generation.runner as runner +import pyFAST.input_output.postpro as postpro +from pyFAST.input_output.fast_input_file import FASTInputFile + +# Get current directory so this script can be called from any location +scriptDir=os.path.dirname(__file__) + +# --- Parameters for this script +FAST_EXE = os.path.join(scriptDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) +ref_dir = os.path.join(scriptDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) +main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template +work_dir = '_NREL5MW_Parametric/' # Output folder (will be created) + + +# --- Reading some reference files/tables to be able to modify tables +# BDBld_ref = FASTInputFile('BeamDyn_Blade_ref.dat') +# print(BDBld_ref.keys()) +# BP_ref = BDBld_ref['BeamProperties'] +# +# HD_ref = FASTInputFile('HD_ref.dat') +# print(HD_ref.keys()) +# SmplProp_ref = HD_ref['SmplProp'] + +# --- Defining the parametric study (list of dictionnaries with keys as FAST parameters) +WS = [4 , 5 , 10 , 12 , 14 , 16] +RPM = [2.5 , 7.5 , 11.3 , 12.1 , 12.1, 12.1] +PITCH = [0 , 0 , 0 , 0 , 8.7 , 10.4] +BaseDict = {'TMax': 10, 'DT': 0.01, 'DT_Out': 0.1} +BaseDict = case_gen.paramsNoController(BaseDict) # Remove the controller +#BaseDict = case_gen.paramsControllerDLL(BaseDict) # Activate the controller +#BaseDict = case_gen.paramsStiff(BaseDict) # Make the turbine stiff (except generator) +#BaseDict = case_gen.paramsNoGen(BaseDict) # Remove the Generator DOF +PARAMS=[] +for i,(wsp,rpm,pitch) in enumerate(zip(WS,RPM,PITCH)): # NOTE: same length of WS and RPM otherwise do multiple for loops + p=BaseDict.copy() + + # --- Changing typical parameters (operating ocnditions) + p['EDFile|RotSpeed'] = rpm + p['EDFile|BlPitch(1)'] = pitch + p['EDFile|BlPitch(2)'] = pitch + p['EDFile|BlPitch(3)'] = pitch + p['InflowFile|HWindSpeed'] = wsp + p['InflowFile|WindType'] = 1 # Setting steady wind + # Defining name for .fst file + p['__name__']='{:03d}_ws{:04.1f}_om{:04.2f}'.format(i,p['InflowFile|HWindSpeed'],p['EDFile|RotSpeed']) + + # --- Examples to change other parameters + # p['AeroFile|TwrAero'] = True + # p['EDFile|BldFile(1)|AdjBlMs'] =1.1 + # p['EDFile|BldFile(2)|AdjBlMs'] =1.1 + # p['EDFile|BldFile(3)|AdjBlMs'] =1.1 + # Changing BeamDyn properties + # BP = BP_ref.copy() # Make a copy to be safe + # BP['K']= BP['K']*i # Modify stiffness + # p['BDBldFile(1)|BldFile|BeamProperties'] = BP # Use the updated stiffness for this case + # Changing HydroDyn properties + # SmplProp = SmplProp_ref.copy() # Make a copy to be safe + # SmplProp[0,0] = Cd[i] # Change Cd value + # p['HDFile|SmplProp'] = SmplProp # Use the updated table for this case,s + + PARAMS.append(p) + +# --- Generating all files in a workdir +fastFiles=case_gen.templateReplace(PARAMS, ref_dir, outputDir=work_dir, removeRefSubFiles=True, main_file=main_file, oneSimPerDir=False) +print('Main input files:') +print(fastFiles) + +# --- Creating a batch script just in case +runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'),fastFiles,fastExe=FAST_EXE) + +if __name__=='__main__': + # --- Running the simulations + runner.run_fastfiles(fastFiles, fastExe=FAST_EXE, parallel=True, showOutputs=False, nCores=4) + + # --- Simple Postprocessing + outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] + avg_results = postpro.averagePostPro(outFiles,avgMethod='periods',avgParam=1, ColMap = {'WS_[m/s]':'Wind1VelX_[m/s]'},ColSort='WS_[m/s]') + print('>> Average results:') + print(avg_results) + + import matplotlib.pyplot as plt + plt.plot(avg_results['WS_[m/s]'], avg_results['RtAeroCp_[-]']) + plt.xlabel('Wind speed [m/s]') + plt.ylabel('Power coefficient [-]') + plt.show() + +if __name__=='__test__': + # Need openfast.exe, not running + import shutil + shutil.rmtree(work_dir) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py new file mode 100644 index 0000000000..8282cfc546 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py @@ -0,0 +1,123 @@ +import numpy as np +import os + +import pyFAST.case_generation.case_gen as case_gen +import pyFAST.case_generation.runner as runner +import pyFAST.input_output.postpro as postpro + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + +def PowerCurveParametricExample1(): + """ Example to run a set of FAST simulations to determine a power curve. + In this example, the WS, RPM and Pitch are set within a for loop. + If the controller and generator are active, these are just "initial conditions". + Additional parameters may be set by adjusting the BaseDict. + + This script is based on a reference directory which contains a reference main input file (.fst) + Everything is copied to a working directory. + The different fast inputs are generated based on a list of dictionaries, named `PARAMS`. + For each dictionary: + - they keys are "path" to a input parameter, e.g. `EDFile|RotSpeed` or `TMax`. + These should correspond to whater name of the variable is used in the FAST inputs files. + - they values are the values corresponding to this parameter + """ + # --- Parameters for this script + FAST_EXE = os.path.join(MyDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) + ref_dir = os.path.join(MyDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) + main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template + work_dir = '_NREL5MW_PowerCurveParametric/' # Output folder (will be created) + + # --- Defining the parametric study (list of dictionnaries with keys as FAST parameters) + WS = [3,5,7,9 ,11,13,15] + RPM = [5,6,7,10,10,10,10] # initial conditions + PITCH = [0,0,0,0 ,5 ,10,15] # initial conditions + BaseDict = {'TMax': 100, 'DT': 0.01, 'DT_Out': 0.1} + #BaseDict = case_gen.paramsNoController(BaseDict) + #BaseDict = case_gen.paramsStiff(BaseDict) + #BaseDict = case_gen.paramsNoGen(BaseDict) + PARAMS=[] + for wsp,rpm,pitch in zip(WS,RPM,PITCH): # NOTE: same length of WS and RPM otherwise do multiple for loops + p=BaseDict.copy() + p['EDFile|RotSpeed'] = rpm + p['EDFile|BlPitch(1)'] = pitch + p['EDFile|BlPitch(2)'] = pitch + p['EDFile|BlPitch(3)'] = pitch + p['InflowFile|HWindSpeed'] = wsp + p['InflowFile|WindType'] = 1 # Setting steady wind + p['__name__'] = 'ws{:04.1f}'.format(p['InflowFile|HWindSpeed']) + PARAMS.append(p) + + # --- Generating all files in a workdir + fastFiles=case_gen.templateReplace(PARAMS, ref_dir, work_dir, removeRefSubFiles=True, main_file=main_file) + print(fastFiles) + + # --- Creating a batch script just in case + runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'), fastFiles,fastExe=FAST_EXE) + # --- Running the simulations + print('>>> Running {} simulations in {} ...'.format(len(fastFiles), work_dir)) + runner.run_fastfiles(fastFiles, fastExe=FAST_EXE, parallel=True, showOutputs=False, nCores=2) + + # --- Simple Postprocessing + outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] + + avg_results = postpro.averagePostPro(outFiles,avgMethod='constantwindow',avgParam=10, ColMap = {'WS_[m/s]':'Wind1VelX_[m/s]'},ColSort='WS_[m/s]') + print('>>> Average results:') + print(avg_results) + avg_results.to_csv('_PowerCurve1.csv',sep='\t',index=False) + + +def PowerCurveParametricExample2(): + """ Example to run a set of FAST simulations to determine a power curve. + In this example, the WS, RPM and Pitch are set within a for loop. + If the controller and generator are active, these are just "initial conditions". + Additional parameters may be set by adjusting the BaseDict. + + This script is based on a reference directory which contains a reference main input file (.fst) + Everything is copied to a working directory. + The different fast inputs are generated based on a list of dictionaries, named `PARAMS`. + For each dictionary: + - they keys are "path" to a input parameter, e.g. `EDFile|RotSpeed` or `TMax`. + These should correspond to whater name of the variable is used in the FAST inputs files. + - they values are the values corresponding to this parameter + """ + # --- Parameters for this script + FAST_EXE = os.path.join(MyDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) + ref_dir = os.path.join(MyDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) + main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template + work_dir = '_NREL5MW_PowerCurveParametric2/' # Output folder (will be created) + out_Ext = '.outb' # Output extension + + # --- Defining the parametric study (list of dictionnaries with keys as FAST parameters) + WS = [3,5,7,9 ,11,13,15] + RPM = [5,6,7,10,10,10,10] + PITCH = [0,0,0,0 ,5 ,10,15] + BaseDict = {'TMax': 10, 'DT': 0.01, 'DT_Out': 0.1} + PARAMS = case_gen.paramsWS_RPM_Pitch(WS, RPM, PITCH, baseDict=BaseDict, flatInputs=True) + + # --- Generating all files in a workdir + fastFiles = case_gen.templateReplace(PARAMS, ref_dir, work_dir, removeRefSubFiles=True, removeAllowed=True, main_file=main_file) + + # --- Creating a batch script just in case + runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'), fastFiles,fastExe=FAST_EXE) + + # --- Running the simulations + runner.run_fastfiles(fastFiles, fastExe=FAST_EXE, parallel=True, showOutputs=False, nCores=2) + + # --- Simple Postprocessing + outFiles = [os.path.splitext(f)[0]+out_Ext for f in fastFiles] + avg_results = postpro.averagePostPro(outFiles,avgMethod='constantwindow',avgParam=10, ColMap = {'WS_[m/s]':'Wind1VelX_[m/s]'},ColSort='WS_[m/s]') + print('>>> Average results:') + print(avg_results) + avg_results.to_csv('_PowerCurve2.csv',sep='\t',index=False) + + + +if __name__=='__main__': + PowerCurveParametricExample1() + PowerCurveParametricExample2() + +if __name__=='__test__': + # Need openfast.exe, doing nothin + pass + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/ParametricExcel.xlsx b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/ParametricExcel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ae1171b179964e3a93ddd7a454f69be6df3e9606 GIT binary patch literal 11500 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 literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md new file mode 100644 index 0000000000..57ff0d4f9a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md @@ -0,0 +1,7 @@ +This folder contains examples of OpenFAST postprocessing: + +- CPLambdaPitch: determine the CP-CT Lambda Pitch matrices of a turbine. +- ExcelFile: Generate, run and postprocess OpenFAST cases using an Excelfile which defines the parameters to change for each simulation +- ParametricStudy: Generate, run and postprocess OpenFAST simulations where the parameters of each cases are defined within a python loop +- PowerCurve: run a set of OpenFAST simulations to determine a power curve. + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py new file mode 100644 index 0000000000..c584c2c10f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py @@ -0,0 +1,319 @@ +# --- For cmd.py +import os +import subprocess +import multiprocessing + +import collections +import glob +import pandas as pd +import numpy as np +import shutil +import stat +import re + +# --- Fast libraries +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.input_output.fast_output_file import FASTOutputFile + +FAST_EXE='openfast' + +# --------------------------------------------------------------------------------} +# --- Tools for executing FAST +# --------------------------------------------------------------------------------{ +# --- START cmd.py +def run_cmds(inputfiles, exe, parallel=True, showOutputs=True, nCores=None, showCommand=True, flags=[], verbose=True): + """ Run a set of simple commands of the form `exe input_file` + By default, the commands are run in "parallel" (though the method needs to be improved) + The stdout and stderr may be displayed on screen (`showOutputs`) or hidden. + A better handling is yet required. + """ + Failed=[] + def _report(p): + if p.returncode==0: + if verbose: + print('[ OK ] Input : ',p.input_file) + else: + Failed.append(p) + if verbose: + print('[FAIL] Input : ',p.input_file) + print(' Directory: '+os.getcwd()) + print(' Command : '+p.cmd) + print(' Use `showOutputs=True` to debug, or run the command above.') + #out, err = p.communicate() + #print('StdOut:\n'+out) + #print('StdErr:\n'+err) + ps=[] + iProcess=0 + if nCores is None: + nCores=multiprocessing.cpu_count() + if nCores<0: + nCores=len(inputfiles)+1 + for i,f in enumerate(inputfiles): + if len(flags)>0: + f=flags + [f] + #print('Process {}/{}: {}'.format(i+1,len(inputfiles),f)) + ps.append(run_cmd(f, exe, wait=(not parallel), showOutputs=showOutputs, showCommand=showCommand)) + iProcess += 1 + # waiting once we've filled the number of cores + # TODO: smarter method with proper queue, here processes are run by chunks + if parallel: + if iProcess==nCores: + for p in ps: + p.wait() + for p in ps: + _report(p) + ps=[] + iProcess=0 + # Extra process if not multiptle of nCores (TODO, smarter method) + for p in ps: + p.wait() + for p in ps: + _report(p) + # --- Giving a summary + if len(Failed)==0: + if verbose: + print('[ OK ] All simulations run successfully.') + return True, Failed + else: + print('[FAIL] {}/{} simulations failed:'.format(len(Failed),len(inputfiles))) + for p in Failed: + print(' ',p.input_file) + return False, Failed + +def run_cmd(input_file_or_arglist, exe, wait=True, showOutputs=False, showCommand=True): + """ Run a simple command of the form `exe input_file` or `exe arg1 arg2` """ + # TODO Better capture STDOUT + if not os.path.exists(exe): + raise Exception('Executable not found: {}'.format(exe)) + if isinstance(input_file_or_arglist, list): + input_file = ' '.join(input_file_or_arglist) + args= [exe] + input_file_or_arglist + else: + input_file=input_file_or_arglist + args= [exe,input_file] + args = [a.strip() for a in args] # No surounding spaces, could cause issue + shell=False + if showOutputs: + STDOut= None + else: + STDOut= open(os.devnull, 'w') + if showCommand: + print('Running: '+' '.join(args)) + if wait: + class Dummy(): + pass + p=Dummy() + p.returncode=subprocess.call(args , stdout=STDOut, stderr=subprocess.STDOUT, shell=shell) + else: + p=subprocess.Popen(args, stdout=STDOut, stderr=subprocess.STDOUT, shell=shell) + # Storing some info into the process + p.cmd = ' '.join(args) + p.args = args + p.input_file = input_file + p.exe = exe + return p + +def runBatch(batchfiles, showOutputs=True, showCommand=True, verbose=True): + """ + Run one or several batch files + TODO: error handling, status, parallel + """ + + if showOutputs: + STDOut= None + else: + STDOut= open(os.devnull, 'w') + + curDir = os.getcwd() + print('Current directory', curDir) + + def runOneBatch(batchfile): + batchfile = batchfile.strip() + batchfile = batchfile.replace('\\','/') + batchDir = os.path.dirname(batchfile) + if showCommand: + print('>>>> Running batch file:', batchfile) + print(' in directory:', batchDir) + try: + os.chdir(batchDir) + returncode=subprocess.call([batchfile], stdout=STDOut, stderr=subprocess.STDOUT, shell=shell) + except: + os.chdir(curDir) + returncode=-10 + return returncode + + shell=False + if isinstance(batchfiles,list): + returncodes = [] + Failed=[] + for batchfile in batchfiles: + returncode = runOneBatch(batchfile) + if returncode!=0: + Failed.append(batchfile) + if len(Failed)>0: + returncode=1 + print('[FAIL] {}/{} Batch files failed.'.format(len(Failed),len(batchfiles))) + print(Failed) + else: + returncode=0 + if verbose: + print('[ OK ] {} batch filse ran successfully.'.format(len(batchfiles))) + # TODO + else: + returncode = runOneBatch(batchfiles) + if returncode==0: + if verbose: + print('[ OK ] Batch file ran successfully.') + else: + print('[FAIL] Batch file failed:',batchfiles) + + return returncode + + +# --- END cmd.py + +def run_fastfiles(fastfiles, fastExe=None, parallel=True, showOutputs=True, nCores=None, showCommand=True, reRun=True, verbose=True): + if fastExe is None: + fastExe=FAST_EXE + if not reRun: + # Figure out which files exist + newfiles=[] + for f in fastfiles: + base=os.path.splitext(f)[0] + if os.path.exists(base+'.outb') or os.path.exists(base+'.out'): + print('>>> Skipping existing simulation for: ',f) + pass + else: + newfiles.append(f) + fastfiles=newfiles + + return run_cmds(fastfiles, fastExe, parallel=parallel, showOutputs=showOutputs, nCores=nCores, showCommand=showCommand, verbose=verbose) + +def run_fast(input_file, fastExe=None, wait=True, showOutputs=False, showCommand=True): + if fastExe is None: + fastExe=FAST_EXE + return run_cmd(input_file, fastExe, wait=wait, showOutputs=showOutputs, showCommand=showCommand) + + +def writeBatch(batchfile, fastfiles, fastExe=None, nBatches=1, pause=False, flags='', flags_after='', + run_if_ext_missing=None, + discard_if_ext_present=None, + dispatch=False, + stdOutToFile=False, + echo=True): + """ Write one or several batch file, all paths are written relative to the batch file directory. + The batch file will consist of lines of the form: + [CONDITION] EXE [FLAGS] FILENAME [FLAGS_AFTER] + + INPUTS: + - batchfile: path of the batch file to be written. + If several files are requested (using nBatches) _i is inserted before the extension + - nBatches: split into nBatches files. + - pause: insert a pause statement at the end so that batch file is not closed after execution + - flags: flags (string) to be placed between the executable and the filename + - flags_after: flags (string) to be placed after the filename + - run_if_ext_missing: add a line in the batch file so that the command is only run if + the file `f.EXT` is missing, where .EXT is specified in run_if_ext_missing + If None, the command is always run + - discard_if_ext_present: similar to run_if_ext_missing, but this time, the lines are not written to the batch file + The test for existing outputs is done before writing the batch file + - dispatch: if True, the input files are dispatched (the first nBatches files are dispathced on the nBatches) + - stdOutToFile: if True, the output of the command is redirected to filename.stdout + + example: + writeBatch('dir/MyBatch.bat', ['dir/c1.fst','dir/c2.fst'], 'op.exe', flags='-v', run_if_ext_missing='.outb') + + will generate a file with the following content: + if not exist c1.outb (../of.exe c1.fst) else (echo "Skipping c1.fst") + if not exist c2.outb (../of.exe c2.fst) else (echo "Skipping c2.fst") + + + """ + if fastExe is None: + fastExe=FAST_EXE + fastExe_abs = os.path.abspath(fastExe) + batchfile_abs = os.path.abspath(batchfile) + batchdir = os.path.dirname(batchfile_abs) + fastExe_rel = os.path.relpath(fastExe_abs, batchdir) + if len(flags)>0: + flags=' '+flags + if len(flags_after)>0: + flags_after=' '+flags_after + + # Remove commandlines if outputs are already present + if discard_if_ext_present: + outfiles = [os.path.splitext(f)[0] + discard_if_ext_present for f in fastfiles] + nIn=len(fastfiles) + fastfiles =[f for f,o in zip(fastfiles,outfiles) if not os.path.exists(o)] + nMiss=len(fastfiles) + if nIn>nMiss: + print('[INFO] WriteBatch: discarding simulations, only {}/{} needed'.format(nMiss, nIn)) + + + def writeb(batchfile, fastfiles): + with open(batchfile,'w') as f: + if not echo: + if os.name == 'nt': + f.write('@echo off\n') + for ff in fastfiles: + ff_abs = os.path.abspath(ff) + ff_rel = os.path.relpath(ff_abs, batchdir) + cmd = fastExe_rel + flags + ' '+ ff_rel + flags_after + if stdOutToFile: + stdout = os.path.splitext(ff_rel)[0]+'.stdout' + cmd += ' > ' +stdout + if run_if_ext_missing is not None: + # TODO might be windows only + ff_out = os.path.splitext(ff_rel)[0] + run_if_ext_missing + if os.name == 'nt': + cmd = 'if not exist {} ({}) else (echo Skipping {})'.format(ff_out, cmd, ff_rel) + else: + cmd = 'if [[ ! -f {} ]] ; then {}; else echo Skipping {} ; fi'.format(ff_out, cmd, ff_rel) + f.write("{:s}\n".format(cmd)) + if pause: + f.write("pause\n") # might be windows only.. + + + + if nBatches==1: + writeb(batchfile, fastfiles) + return batchfile + else: + + if dispatch: + # TODO this can probably be done with a one liner + fastfiles2=[] + for i in range(nBatches): + fastfiles2+=fastfiles[i::nBatches] + fastfiles = fastfiles2 + + splits = np.array_split(fastfiles,nBatches) + base, ext = os.path.splitext(batchfile) + batchfiles=[] + for i in np.arange(nBatches): + batchfile = base+'_{:d}'.format(i+1) + ext + batchfiles.append(batchfile) + writeb(batchfile, splits[i]) + return batchfiles + + + + + + +def removeFASTOuputs(workDir): + # Cleaning folder + for f in glob.glob(os.path.join(workDir,'*.out')): + os.remove(f) + for f in glob.glob(os.path.join(workDir,'*.outb')): + os.remove(f) + for f in glob.glob(os.path.join(workDir,'*.ech')): + os.remove(f) + for f in glob.glob(os.path.join(workDir,'*.sum')): + os.remove(f) + +if __name__=='__main__': + run_cmds(['main1.fst','main2.fst'], './Openfast.exe', parallel=True, showOutputs=False, nCores=4, showCommand=True) + pass + # --- Test of templateReplace + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py @@ -0,0 +1 @@ + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py new file mode 100644 index 0000000000..c7051864e5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py @@ -0,0 +1,33 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) + import matplotlib.pyplot as plt + print('\n--------------------------------------------------------------') + for f in files: + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + plt.close('all') + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py new file mode 100644 index 0000000000..970b03175f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py @@ -0,0 +1,3 @@ + +class PYFASTException(Exception): + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore new file mode 100644 index 0000000000..4a1c923a40 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore @@ -0,0 +1,10 @@ +*.pyc +*.egg-info +build +dist +_* +!__init__.py +*.spec +*.pdf +*.png + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md new file mode 100644 index 0000000000..b284d55c8a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md @@ -0,0 +1,4 @@ +Scripts to convert hawc2 and openfast models, in particular BeamDyn blades. + +See examples folder for examples +See doc folder for some ressources diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py new file mode 100644 index 0000000000..71bd18fe66 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py @@ -0,0 +1,590 @@ +""" +Set of tools for stiffness and mass matrix of a beam section +""" + +import numpy as np +from numpy import cos, sin + +# --------------------------------------------------------------------------------} +# --- Functions for 6x6 rigid body mass matrices +# --------------------------------------------------------------------------------{ +def identifyRigidBodyMM(MM): + """ + Based on a 6x6 mass matrix at a reference point: + - Identify the position of the center of mass + - Compute the inertia at the center of mass + """ + mass = MM[0,0] + # Using average of two coeffs to get estimate of COG + xCM = 0.5*( MM[1,5]-MM[2,4])/mass + zCM = 0.5*( MM[0,4]-MM[1,3])/mass + yCM = 0.5*(-MM[0,5]+MM[2,3])/mass + # Destance from refopint to COG + Ref2COG=np.array((xCM,yCM,zCM)) + # Inertia at ref oint + J_P = MM[3:6,3:6].copy() + # Inertia at COG + J_G = translateInertiaMatrixToCOG(J_P, mass, r_PG=Ref2COG ) + return mass, J_G, Ref2COG + +def translateInertiaMatrixToCOG(I_P, Mass, r_PG): + """ Transform inertia matrix with respect to point P to the inertia matrix with respect to the COG + NOTE: the vectors and the inertia matrix needs to be expressed in the same coordinate system. + + INPUTS: + I_G : Inertia matrix 3x3 with respect to COG + Mass : Mass of the body + r_PG: vector from P to COG + """ + I_G = I_P + Mass * np.dot(skew(r_PG), skew(r_PG)) + return I_G + +def translateInertiaMatrixFromCOG(I_G, Mass, r_GP): + """ + Transform inertia matrix with respect to COG to the inertia matrix with respect to point P + NOTE: the vectors and the inertia matrix needs to be expressed in the same coordinate system. + INPUTS: + I_G : Inertia matrix 3x3 with respect to COG + Mass : Mass of the body + r_GP: vector from COG of the body to point P + """ + I_P = I_G - Mass * np.dot(skew(r_GP),skew(r_GP)) + return I_P + +def rigidBodyMassMatrixAtP(m=None, J_G=None, Ref2COG=None): + """ + Rigid body mass matrix (6x6) at a given reference point: + the center of gravity (if Ref2COG is None) + + + INPUTS: + - m/tip: (scalar) body mass + default: None, no mass + - J_G: (3-vector or 3x3 matrix), diagonal coefficients or full inertia matrix + with respect to COG of body! + The inertia is transferred to the reference point if Ref2COG is not None + default: None + - Ref2COG: (3-vector) x,y,z position of center of gravity (COG) with respect to a reference point + default: None, at first/last node. + OUTPUTS: + - M66 (6x6) : rigid body mass matrix at COG or given point + """ + # Default values + if m is None: m=0 + if Ref2COG is None: Ref2COG=(0,0,0) + if J_G is None: J_G=np.zeros((3,3)) + if len(J_G.flatten()==3): J_G = np.eye(3).dot(J_G) + + M66 = np.zeros((6,6)) + x,y,z = Ref2COG + Jxx,Jxy,Jxz = J_G[0,:] + _ ,Jyy,Jyz = J_G[1,:] + _ ,_ ,Jzz = J_G[2,:] + M66[0, :] =[ m , 0 , 0 , 0 , z*m , -y*m ] + M66[1, :] =[ 0 , m , 0 , -z*m , 0 , x*m ] + M66[2, :] =[ 0 , 0 , m , y*m , -x*m , 0 ] + M66[3, :] =[ 0 , -z*m , y*m , Jxx + m*(y**2+z**2) , Jxy - m*x*y , Jxz - m*x*z ] + M66[4, :] =[ z*m , 0 , -x*m , Jxy - m*x*y , Jyy + m*(x**2+z**2) , Jyz - m*y*z ] + M66[5, :] =[ -y*m , x*m , 0 , Jxz - m*x*z , Jyz - m*y*z , Jzz + m*(x**2+y**2) ] + return M66 + +def skew(x): + x=np.asarray(x).ravel() + """ Returns the skew symmetric matrix M, such that: cross(x,v) = M v """ + return np.array([[0, -x[2], x[1]],[x[2],0,-x[0]],[-x[1],x[0],0]]) + + +# --------------------------------------------------------------------------------} +# --- Bauchau +# --------------------------------------------------------------------------------{ +def K_sheartorsion_xbeam(J,K22,K23,K33,x2,x3): + """ Returns Shear-torsion stiffness matrix. See Eq.(13) of DyMore manual """ + return np.array( [ + [J + K22*x3**2 + 2*K23*x2*x3 + K33*x2**2, -K22*x3 - K23*x2, K23*x3 + K33*x2], + [-K22*x3 - K23*x2, K22, -K23], + [K23*x3 + K33*x2, -K23, K33]]) + +def K_axialbending_xbeam(S,H22,H23,H33,x2,x3): + """ Returns Axial-Bending stiffness matrix. See Eq.(20) of DyMore manual """ + return np.array([ + [S, S*x3, -S*x2], + [S*x3, H22 + S*x3**2, -H23 - S*x2*x3], + [-S*x2, -H23 - S*x2*x3, H33 + S*x2**2]]) + +# --------------------------------------------------------------------------------} +# --- BeamDyn +# --------------------------------------------------------------------------------{ +def K_axialbending(EA, EI_x, EI_y, x_C=0, y_C=0, theta_p=0): + """ + Axial bending problem. See KK for notations. + """ + H_xx = EI_x*cos(theta_p)**2 + EI_y*sin(theta_p)**2 + H_yy = EI_x*sin(theta_p)**2 + EI_y*cos(theta_p)**2 + H_xy = (EI_y-EI_x)*sin(theta_p)*cos(theta_p) + return np.array([ + [EA , EA*y_C , -EA*x_C ] , + [EA*y_C , H_xx + EA*y_C**2 , -H_xy - EA*x_C*y_C ] , + [-EA*x_C , -H_xy - EA*x_C*y_C , H_yy + EA*x_C**2 ] + ]) + +def K_sheartorsion(GKt, GA, kxs, kys, x_S=0, y_S=0, theta_s=0): + """ + Shear torsion problem. See KK for notations. + """ + K_xx = GA * ( kxs*cos(theta_s)**2 + kys*sin(theta_s)**2 ) + K_yy = GA * ( kxs*sin(theta_s)**2 + kys*cos(theta_s)**2 ) + K_xy = GA * ( (kys-kxs)*sin(theta_s)*cos(theta_s) ) + return np.array([ + [K_xx , -K_xy , -K_xx*y_S - K_xy*x_S ] , + [-K_xy , K_yy , K_xy*y_S + K_yy*x_S ] , + [-K_xx*y_S - K_xy*x_S , K_xy*y_S + K_yy*x_S , GKt + K_xx*y_S**2 + 2*K_xy*x_S*y_S + K_yy*x_S**2 ] + ]) + + +# --------------------------------------------------------------------------------} +# --- Beam stiffness and mass matrix as function of "beam" properties +# --------------------------------------------------------------------------------{ +def KK(EA, EI_x, EI_y, GKt, GA, kxs, kys, x_C=0, y_C=0, theta_p=0, x_S=0, y_S=0, theta_s=0): + """ + Returns 6x6 stiffness matrix at the cross section origin O, based on inputs at centroid and shear center. + INPUTS: + - EA, EI_x, EI_y: diagonal terms for the axial bending expressed at the centroid and in the principal axis frame + - GKt, GA*kxs, GA*kys: diagonal terms for the shear/torsion expressed at the shear center and in the princial shear direction frame + - kxs, kys: dimensionless shear parameters + - x_C, y_C: coordinates of the centroid (elastic center/ neutral axis), expressed FROM the origin of the cross section O + - x_S, y_S: " shear center " " + - theta_p : angle (around z) FROM the reference axes to the principal axes [rad] + - theta_s : " " " principal shear axes [rad] + """ + H_xx = EI_x*cos(theta_p)**2 + EI_y*sin(theta_p)**2 + H_yy = EI_x*sin(theta_p)**2 + EI_y*cos(theta_p)**2 + H_xy = (EI_y-EI_x)*sin(theta_p)*cos(theta_p) + K_xx = GA * ( kxs*cos(theta_s)**2 + kys*sin(theta_s)**2 ) + K_yy = GA * ( kxs*sin(theta_s)**2 + kys*cos(theta_s)**2 ) + K_xy = GA * ( (kys-kxs)*sin(theta_s)*cos(theta_s) ) + return np.array([ + [K_xx , -K_xy , 0*EA , 0*EA , 0*EA , -K_xx*y_S - K_xy*x_S ] , + [-K_xy , K_yy , 0*EA , 0*EA , 0*EA , K_xy*y_S + K_yy*x_S ] , + [0*EA , 0*EA , EA , EA*y_C , -EA*x_C , 0*EA ] , + [0*EA , 0*EA , EA*y_C , H_xx + EA*y_C**2 , -H_xy - EA*x_C*y_C , 0*EA ] , + [0*EA , 0*EA , -EA*x_C , -H_xy - EA*x_C*y_C , H_yy + EA*x_C**2 , 0*EA ] , + [-K_xx*y_S - K_xy*x_S , K_xy*y_S + K_yy*x_S , 0*EA , 0*EA , 0*EA , GKt + K_xx*y_S**2 + 2*K_xy*x_S*y_S + K_yy*x_S**2 ] + ]) + +def MM(m,I_x,I_y,I_p,x_G=0,y_G=0,theta_i=0): + """ + Returns the mass matrix at a given point O and with respect to given orientation axes based + on the values at the center of gravity and in the inertia axis frame. + The convention is such that: + - x_G,y_G : the distaances FROM point O to point G + - theta_i : angle (around z) FROM the reference axes to the inertial axes + - I_x, I_y, I_p: "diagonal" inertias for the body expressed in the inertial frame and at point G + """ + Ixx = I_x*cos(theta_i)**2 + I_y*sin(theta_i)**2 + Iyy = I_x*sin(theta_i)**2 + I_y*cos(theta_i)**2 + Ixy = (I_y-I_x)*sin(theta_i)*cos(theta_i) + + return np.array([ + [m , 0*m , 0*m , 0*m , 0*m , -m*y_G] , + [0*m , m , 0*m , 0*m , 0*m , m*x_G] , + [0*m , 0*m , m , m*y_G , -m*x_G , 0*m] , + [0*m , 0*m , m*y_G , Ixx + m*y_G**2 , -Ixy - m*x_G*y_G , 0*m] , + [0*m , 0*m , -m*x_G , -Ixy - m*x_G*y_G , Iyy + m*x_G**2 , 0*m] , + [-m*y_G , m*x_G , 0*m , 0*m , 0*m , I_p + m*x_G**2 + m*y_G**2] + ]) + +# --------------------------------------------------------------------------------} +# --- Tools to manipulate 6x6 stiffness and mass matrix +# --------------------------------------------------------------------------------{ +class TransformCrossSectionMatrix(object): + + def CrossSectionTranslationMatrix(self, x, y): + T = np.eye(6) + T[0,5] = y + T[1,5] = -x + T[2,3] = -y + T[2,4] = x + return T + + def CrossSectionRotationMatrix(self, alpha): + c=np.cos(alpha) + s=np.sin(alpha) + R1=[[c,s,0], + [-s,c,0], + [0,0,1]] + R=np.vstack((np.hstack((R1, np.zeros((3,3)))), + np.hstack((np.zeros((3,3)), R1)))) + return R + + def CrossSectionRotoTranslationMatrix(self, M1, x, y, alpha): + # Translation + T = self.CrossSectionTranslationMatrix(x, y) + M2 = T.T @ M1 @ T + # Rotation + R = self.CrossSectionRotationMatrix(alpha) + M3 = R @ M2 @ R.T + return M3 + +class ComputeStiffnessProps(object): + + def ComputeShearCenter(self, K): # shear center equiv. to elastic axes + """ + Shear center location for a 6x6 cross section matrix of a beam oriented along "z" + NOTE: works for BeamDyn or Hawc2 convention + """ + K1 = np.array([[K[i, j] for j in range(3)] for i in range(3)]) + K3 = np.array([[K[i, j+3] for j in range(3)] for i in range(3)]) + Y = np.linalg.solve(K1, -K3) + return [-Y[1,2], Y[0,2]] + + def ComputeTensionCenter(self, K): # tension center equiv. to neutral axes + """ + Tension center (also called elastic center) location for a 6x6 cross section matrix of a beam oriented along "z" + NOTE: works for BeamDyn or Hawc2 convention + """ + K1 = np.array([[K[i, j] for j in range(3)] for i in range(3)]) + K3 = np.array([[K[i, j+3] for j in range(3)] for i in range(3)]) + Y = np.linalg.solve(K1, -K3) + return [Y[2,1], -Y[2,0]] + + def OrientationPrincipalAxesBecas(self, K): + ksub=K[3:5,3:5] + [ val, mod ] = np.linalg.eig(ksub) + val = np.sort(np.diag(val)) + ind = np.argsort(np.diag(val)) + mod = mod[:,ind] + Delta = np.arctan(mod[1,0]/mod[0,0]) + return Delta + + def DecoupleStiffness(self, K): + K1 = np.array([[K[i, j] for j in range(3)] for i in range(3)]) + K3 = np.array([[K[i, j+3] for j in range(3)] for i in range(3)]) + Y = np.linalg.solve(K1, -K3) + I3 = np.eye(3) + Z3 = np.zeros((3,3)) + TL = np.block([[I3, Z3], [Y.T, I3]]) + TR = np.block([[I3, Y], [Z3, I3]]) + return TL @ K @ TR + + def PrincipalAxesRotationAngle(self, decoupledK): + K1 = np.array([[decoupledK[i, j] for j in range(3)] for i in range(3)]) + K3 = np.array([[decoupledK[i+3, j+3] for j in range(3)] for i in range(3)]) + (w1, v1) = np.linalg.eig(K1) + (w3, v3) = np.linalg.eig(K3) + if np.abs(v3[0,0]) < np.abs(v3[0,1]): + angle = np.arccos(v3[0,0]) + else: + angle = -np.arcsin(v3[0,1]) + return angle + +class ComputeInertiaProps(object): + + def ComputeMassCenter(self, M): + """ + Mass center location for a 6x6 cross section matrix of a beam oriented along "z" + NOTE: works for BeamDyn or Hawc2 convention + """ + M1 = np.array([[M[i, j] for j in range(3)] for i in range(3)]) + M3 = np.array([[M[i, j+3] for j in range(3)] for i in range(3)]) + Y = np.linalg.solve(M1, -M3) + return [Y[2,1], -Y[2,0]] + + def Translate(self, M, x, y): + return TranslateSectionMassMatrix(M, x ,y) + + +def TranslateSectionMassMatrix(M, x, y): + """ + Translate a 6x6 section mass matrix to a different point + """ + # First identify main properties (mass, inertia, location of center of mass from previous ref point) + mass, J_G, Ref2COG = identifyRigidBodyMM(M) + # New COG location from new (x,y) ref point + Ref2COG[0] -= x + Ref2COG[1] -= y + Ref2COG[2] = 0 # for sanity + # Compute mass matrix (NOTE: using 6x6 of rigid body here, could use MM but this interface is simpler) + M_new = rigidBodyMassMatrixAtP(mass, J_G, Ref2COG) + return M_new + + +# --------------------------------------------------------------------------------} +# --- Functions to extract "beam" properties from 6x6 matrices +# --------------------------------------------------------------------------------{ +def solvexytheta(Hxx,Hyy,Hxy): + """ + Solve for a system of three unknown, used to get: + - EIy, EIx and thetap given Hxx,Hyy,Hxy + - kxs*GA, kys*GA and thetas given Kxx,Kyy,Kxy + - I_x, I_y and theta_is given Ixx,Iyy,Ixy + """ + from scipy.optimize import fsolve + def residual(x): + EI_x, EI_y, theta_p =x + res=np.array([ + Hxx - EI_x*np.cos(theta_p)**2 - EI_y*np.sin(theta_p)**2 , + Hyy - EI_x*np.sin(theta_p)**2 - EI_y*np.cos(theta_p)**2, + Hxy - (EI_y-EI_x)*np.sin(theta_p)*np.cos(theta_p)] + ).astype(float) + return res + x0 = [Hxx,Hyy,0] + x_opt = fsolve(residual, x0) + EI_x,EI_y,theta_p = x_opt + theta_p = np.mod(theta_p,2*np.pi) + return EI_x, EI_y, theta_p + + +def M66toPropsDecoupled(M, convention='BeamDyn'): + """ + Convert mass properties of a 6x6 section to beam properties + This assumes that the axial and bending loads are decoupled. + Has been tested for BeamDyn coordinate system + + INPUTS: + - M : 6x6 array of mass elements. Each element may be an array (e.g. for all spanwise values) + OUTPUTS: + - m: section mass + - Ixx, Iyy, Ixy: area moment of inertia + - x_G, y_G + """ + M11=M[0,0] + M44=M[3,3] + M55=M[4,4] + M66=M[5,5] + M16=M[0,5] + M26=M[1,5] + M45=M[3,4] + + Mlist = flat2matlist(M) + inertia = ComputeInertiaProps() + + m=M11 + if convention=='BeamDyn': + if np.all(np.abs(m)<1e-16): + Ixi = Iyi = Ipp = x_G = y_G = theta_i = m*0 + return m, Ixi, Iyi, Ipp, x_G, y_G, theta_i + y_G= -M16/m + x_G= M26/m + # sanity + np.testing.assert_array_almost_equal([M[0,3],M[0,4]],[0*M[0,3],0*M[0,3]]) + np.testing.assert_array_almost_equal([M[1,3],M[1,4]],[0*M[0,3],0*M[0,3]]) + np.testing.assert_array_almost_equal([M[3,5],M[4,5]],[0*M[0,3],0*M[0,3]]) + + Ixx = M44-m*y_G**2 + Iyy = M55-m*x_G**2 + Ixy = -M45-m*x_G*y_G + Ipp = M66-m*(x_G**2 + y_G**2) + + if np.all(np.abs(Ixy)<1e-16): + # NOTE: Assumes theta_i ==0 + #print('>>> Assume theta_i 0') + Ixi = Ixx + Iyi = Iyy + theta_i = Ixx*0 + else: + if len(Mlist)==1: + Ixi,Iyi,theta_i = solvexytheta(Ixx,Iyy,Ixy) + else: + #print('>>> Minimize theta_i') + Ixi = np.zeros(Ixx.shape) + Iyi = np.zeros(Ixx.shape) + theta_i = np.zeros(Ixx.shape) + for i, (hxx, hyy, hxy) in enumerate(zip(Ixx,Iyy,Ixy)): + Ixi[i],Iyi[i],theta_i[i] = solvexytheta(hxx,hyy,hxy) + + MM2= MM(m[i],Ixi[i],Iyi[i],Ipp[i],x_G[i],y_G[i],theta_i[i]) + + np.testing.assert_allclose(MM2[3,3], M[3,3][i], rtol=1e-3) + np.testing.assert_allclose(MM2[4,4], M[4,4][i], rtol=1e-3) + np.testing.assert_allclose(MM2[5,5], M[5,5][i], rtol=1e-3) + np.testing.assert_allclose(MM2[3,4], M[3,4][i], rtol=1e-3) + + np.testing.assert_array_almost_equal(Ipp, Ixx+Iyy, 2) + np.testing.assert_array_almost_equal(Ipp, Ixi+Iyi, 2) + + else: + raise NotImplementedError() + + return m, Ixi, Iyi, Ipp, x_G, y_G, theta_i + + + +def K66toPropsDecoupled(K, theta_p_in=None, convention='BeamDyn'): + """ + Convert stiffness properties of a 6x6 section to beam properties + This assumes that the axial and bending loads are decoupled. + Has been tested for BeamDyn coordinate system + + INPUTS: + - K : 6x6 array of stiffness elements. Each element may be an array (e.g. for all spanwise values) + INPUTS OPTIONAL: + - theta_p_in : angle from section to principal axis [rad], positive around z + - convention : to change coordinate systems in the future + OUTPUTS: + - EA, EIx, EIy: axial and bending stiffnesses + - kxGA, kyGA, GKt: shear and torsional stiffness + - xC,yC : centroid + - xS,yS : shear center + - theta_p, theta_s: angle to principal axes and shear axes [rad] + """ + K11=K[0,0] + K22=K[1,1] + K33=K[2,2] + K44=K[3,3] + K55=K[4,4] + K66=K[5,5] + + K12=K[0,1] + K16=K[0,5] + K26=K[1,5] + K34=K[2,3] + K35=K[2,4] + K45=K[3,4] + + Klist = flat2matlist(K) + stiff = ComputeStiffnessProps() + + if convention=='BeamDyn': + # --------------------------------------------------------------------------------} + # --- Axial/bending problem + # --------------------------------------------------------------------------------{ + # Find: EA, EI, position of axial strain centroid (tension center, elastic center), principal axes + EA = K33 + # xC yC - method 1 + yC = K34/EA + xC = -K35/EA + # xC yC - method 2, more general + if len(Klist)==1: + xC2, yC2 = stiff.ComputeTensionCenter(Klist[0]) # tension center + else: + xC2 = np.zeros(xC.shape) + yC2 = np.zeros(yC.shape) + for i,Kloc in enumerate(Klist): + xs, ys = stiff.ComputeTensionCenter(Kloc) # tension center + xC2[i] = xs + yC2[i] = ys + # Sanity checks, comment in future + np.testing.assert_allclose(xC2, xC, rtol=1e-3) + np.testing.assert_allclose(yC2, yC, rtol=1e-3) + + # --- Find EI and theta_p (principal axes) + Hxx= K44-EA*yC**2 + Hyy= K55-EA*xC**2 + Hxy= -K45-EA*xC*yC + if theta_p_in is not None: + theta_p=theta_p_in + print('>>> theta_p given') + C2=np.cos(theta_p)**2 + S2=np.sin(theta_p)**2 + C4=np.cos(theta_p)**4 + S4=np.sin(theta_p)**4 + EIxp = (Hxx*C2 - Hyy*S2)/(C4-S4) + EIyp = (Hxx*S2 - Hyy*C2)/(S4-C4) + Hxyb = (EIyp-EIxp)*np.sin(theta_p)*np.cos(theta_p) + + bNZ=np.logical_and(Hxy!=0, Hxyb!=0) + np.testing.assert_allclose(Hxy[bNZ], Hxyb[bNZ], rtol=1e-3) + np.testing.assert_allclose(EIxp+EIyp, Hxx+Hyy, rtol=1e-3) + + else: + if np.all(np.abs(Hxy)<1e-16): + #print('>>>> assume theta_p=0') + # NOTE: Assumes theta_p ==0 + EIxp = Hxx + EIyp = Hyy + theta_p=0*EA + else: + #print('>>> Minimization for theta_p') + if len(Klist)==1: + EIxp,EIyp,theta_p = solvexytheta(Hxx,Hyy,Hxy) + theta_p=np.asarray(theta_p) + if theta_p>np.pi: + theta_p-=2*np.pi + else: + EIxp= np.zeros(Hxx.shape) + EIyp= np.zeros(Hxx.shape) + theta_p = np.zeros(Hxx.shape) + for i, (hxx, hyy, hxy) in enumerate(zip(Hxx,Hyy,Hxy)): + EIxp[i],EIyp[i],theta_p[i] = solvexytheta(hxx,hyy,hxy) + + theta_p[theta_p>np.pi]=theta_p[theta_p>np.pi]-2*np.pi + + # --------------------------------------------------------------------------------} + # ---Torsion/shear problem + # --------------------------------------------------------------------------------{ + # Find: Torsion, shear terms, shear center + Kxx = K11 + Kxy = -K12 + Kyy = K22 + # Method 1 + yS = (Kyy*K16+Kxy*K26)/(-Kyy*Kxx + Kxy**2) + xS = (Kxy*K16+Kxx*K26)/( Kyy*Kxx - Kxy**2) + # Method 2, more general + if len(Klist)==1: + xS2, yS2 = stiff.ComputeShearCenter(Klist[0]) # shear center + else: + xS2 = np.zeros(xC.shape) + yS2 = np.zeros(yC.shape) + for i,Kloc in enumerate(Klist): + xS2[i], yS2[i] = stiff.ComputeShearCenter(Kloc) # shear center + # Sanity check, comment in future + np.testing.assert_allclose(xS2, xS, rtol=1e-3) + np.testing.assert_allclose(yS2, yS, rtol=1e-3) + + # --- Find shear coefficients and main direction + GKt = K66 - Kxx*yS**2 -2*Kxy*xS*yS - Kyy*xS**2 + if np.all(np.abs(Kxy)<1e-16): + # Assumes theta_s=0 + kxsGA = Kxx # Kxx = kxs*GA + kysGA = Kyy + theta_s=0*EA + else: + if len(Klist)==1: + kxsGA,kysGA,theta_s = solvexytheta(Kxx,Kyy,Kxy) + if theta_s>np.pi: + theta_s-=2*np.pi + else: + kxsGA = np.zeros(Kxx.shape) + kysGA = np.zeros(Kxx.shape) + theta_s = np.zeros(Hxx.shape) + for i, (kxx, kyy, kxy) in enumerate(zip(Kxx,Kyy,Kxy)): + kxsGA[i],kysGA[i],theta_s[i] = solvexytheta(kxx,kyy,kxy) + + theta_s[theta_s>np.pi]=theta_s[theta_s>np.pi]-2*np.pi + + # Sanity checks, comment in future + KK2= KK(EA, EIxp, EIyp, GKt, EA*0+1, kxsGA, kysGA, xC, yC, theta_p, xS, yS, theta_s) + np.testing.assert_allclose(KK2[0,0], K[0,0], rtol=1e-2) + np.testing.assert_allclose(KK2[1,1], K[1,1], rtol=1e-2) + np.testing.assert_allclose(KK2[2,2], K[2,2], rtol=1e-2) + np.testing.assert_allclose(KK2[3,3], K[3,3], rtol=1e-1) +# np.testing.assert_allclose(KK2[4,4], K[4,4], rtol=1e-2) + np.testing.assert_allclose(KK2[5,5], K[5,5], rtol=1e-1) + np.testing.assert_allclose(KK2[2,3], K[2,3], rtol=1e-2) + np.testing.assert_allclose(KK2[2,4], K[2,4], rtol=1e-2) + + np.testing.assert_allclose(K16, -Kxx*yS-Kxy*xS) +# np.testing.assert_allclose(KK2[0,5], K[0,5],rtol=1e-3) +# np.testing.assert_allclose(KK2[1,5], K[1,5],rtol=5e-2) # Kxy harder to get + #np.testing.assert_allclose(KK2[3,4], K[3,4]) # <<< hard to match + + else: + raise NotImplementedError() + + return EA, EIxp, EIyp, kxsGA, kysGA, GKt, xC, yC, xS, yS, theta_p, theta_s + +def flat2matlist(M): + """ + Convert a matrix of size 6x6 where each element is an array of size n + into a list of n 6x6 matrices + """ + Mlist=[] + if not hasattr(M[0,0],'__len__'): + return [M] + for iSpan in np.arange(len(M[0,0])): + Mloc = np.zeros((6,6)) + for i in np.arange(6): + for j in np.arange(6): + Mloc[i,j] = M[i,j][iSpan] + Mlist.append(Mloc) + return Mlist diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py new file mode 100644 index 0000000000..d5960591ab --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py @@ -0,0 +1,500 @@ +import numpy as np +from numpy import cos, sin +import pandas as pd +import os +# from weio.hawc2_htc_file import HAWC2HTCFile +# from weio.csv_file import CSVFile +# from weio.fast_input_file import FASTInputFile +from pyFAST.input_output.hawc2_htc_file import HAWC2HTCFile +from pyFAST.input_output.csv_file import CSVFile +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.converters.beam import ComputeStiffnessProps, TransformCrossSectionMatrix +from pyFAST.input_output.fast_input_deck import FASTInputDeck + +from .beam import * +from .hawc2 import dfstructure2stfile + + +def arc_length(points): + """ + Compute the distances between points along a curve and return those + cumulative distances as a flat array. + + This function works for 2D, 3D, and N-D arrays. + + Parameters + ---------- + points : numpy array[n_points, n_dimensions] + Array of coordinate points that we compute the arc distances for. + + Returns + ------- + arc_distances : numpy array[n_points] + Array, starting at 0, with the cumulative distance from the first + point in the points array along the arc. + + See Also + -------- + wisdem.commonse.utilities.arc_length_deriv : computes derivatives for + the arc_length function + + Examples + -------- + Here is a simple example of how to use this function to find the cumulative + distances between points on a 2D curve. + + >>> x_values = numpy.linspace(0., 5., 10) + >>> y_values = numpy.linspace(2., 4., 10) + >>> points = numpy.vstack((x_values, y_values)).T + >>> arc_length(points) + array([0. , 0.59835165, 1.19670329, 1.79505494, 2.39340658, + 2.99175823, 3.59010987, 4.18846152, 4.78681316, 5.38516481]) + """ + cartesian_distances = np.sqrt(np.sum(np.diff(points, axis=0) ** 2, axis=1)) + arc_distances = np.r_[0.0, np.cumsum(cartesian_distances)] + + return arc_distances + + +# --------------------------------------------------------------------------------} +# ---beamDynToHawc2 +# --------------------------------------------------------------------------------{ +def beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile=None, H2_stfile=None, bodyname=None, A=None, E=None, G=None, fstIn=None, theta_p_in=None, FPM=False, verbose=False): + """ + + FPM: fully populated matrix, if True, use the FPM format of hawc2 + """ + # --- Read BeamDyn files + if isinstance(BD_mainfile, str): + BD_mainfile = FASTInputFile(BD_mainfile) + if isinstance(BD_bladefile, str): + BD_bladefile = FASTInputFile(BD_bladefile) + bdLine = BD_mainfile.toDataFrame() + prop = BD_bladefile.toDataFrame() + + # Define BeamDyn reference axis + r_bar = prop['Span'].values + + kp_x_raw = bdLine['kp_xr_[m]'].values + kp_y_raw = bdLine['kp_yr_[m]'].values + kp_z_raw = bdLine['kp_zr_[m]'].values + twist_raw = bdLine['initial_twist_[deg]'].values*np.pi/180 # BeamDyn convention + + myarc = arc_length(np.array([kp_x_raw, kp_y_raw, kp_z_raw]).T) + s_coord = myarc/myarc[-1] + + kp_x = np.interp(r_bar, s_coord, kp_x_raw) + kp_y = np.interp(r_bar, s_coord, kp_y_raw) + kp_z = np.interp(r_bar, s_coord, kp_z_raw) + twist = np.interp(r_bar, s_coord, twist_raw) + + # Create K and M matrices + K = np.zeros((6,6),dtype='object') + M = np.zeros((6,6),dtype='object') + for i in np.arange(6): + for j in np.arange(6): + K[i,j]=prop['K{}{}'.format(i+1,j+1)].values + M[i,j]=prop['M{}{}'.format(i+1,j+1)].values + + if fstIn != None: + fst = FASTInputDeck(fstIn, verbose=True) + Bld = fst.fst_vt['AeroDynBlade'] + AF = fst.fst_vt['af_data'] + BlSpn = Bld['BldAeroNodes'][:,0] + n_span = len(BlSpn) + le2ac_raw = np.zeros(n_span) + for iSpan in range(n_span): + le2ac_raw[iSpan] = fst.fst_vt['ac_data'][iSpan]['AirfoilRefPoint'][0] + # Define axis of aero centers + BlCrvAC = Bld['BldAeroNodes'][:,1] + BlSwpAC = Bld['BldAeroNodes'][:,2] + chord = Bld['BldAeroNodes'][:,5] + s_aero = BlSpn/BlSpn[-1] + ac_x = np.interp(r_bar, s_aero, BlCrvAC) + ac_y = np.interp(r_bar, s_aero, BlSwpAC) + le2ac = np.interp(r_bar, s_aero, le2ac_raw) # Leading edge to aerodynamic center (in chord) + + # Get x and y coordinates of c2 axis + ac2c2 = (0.5 - le2ac) * chord + c2_x = ac_x + ac2c2 * np.sin(twist) + c2_y = ac_y + ac2c2 * np.cos(twist) + # Get offsets from BD axis to c2 axis along the twisted frame of reference + c2BD_y = np.sqrt( (c2_y - kp_y)**2 + (c2_x - kp_x)**2 ) + c2BD_x = np.zeros_like(c2BD_y) # no x translation, we should be translating along the twisted chord + + # Translate matrices from BD to c2 axis (translate along chord, x and twist are 0) + transform = TransformCrossSectionMatrix() + for iSpan in np.arange(len(K[0,0])): + K_bd_temp = np.zeros((6,6)) + M_bd_temp = np.zeros((6,6)) + for i in np.arange(6): + for j in np.arange(6): + K_bd_temp[i,j] = K[i,j][iSpan] + M_bd_temp[i,j] = M[i,j][iSpan] + K_c2_temp = transform.CrossSectionRotoTranslationMatrix(K_bd_temp, 0., c2BD_y[iSpan], 0.) + M_c2_temp = transform.CrossSectionRotoTranslationMatrix(M_bd_temp, 0., c2BD_y[iSpan], 0.) + for i in np.arange(6): + for j in np.arange(6): + K[i,j][iSpan]=K_c2_temp[i,j] + M[i,j][iSpan]=M_c2_temp[i,j] + + # Update BeamDyn axis to c2 axis + kp_x = c2_x + kp_y = c2_y + + # Map 6x6 data to "beam" data + # NOTE: theta_* are in [rad] + EA, EIx, EIy, kxsGA, kysGA, GKt, x_C, y_C, x_S, y_S, theta_p, theta_s = K66toPropsDecoupled(K, theta_p_in) + m, Ixi, Iyi, Ip, x_G, y_G, theta_i = M66toPropsDecoupled(M) +# print('kxGA {:e}'.format(np.mean(kxsGA))) +# print('kyGA {:e}'.format(np.mean(kysGA))) +# print('EA {:e}'.format(np.mean(EA))) +# print('EIx {:e}'.format(np.mean(EIx))) +# print('EIy {:e}'.format(np.mean(EIy))) +# print('GKt {:e}'.format(np.mean(GKt))) +# print('xC ',np.mean(x_C)) +# print('yC ',np.mean(y_C)) +# print('xS ',np.mean(x_S)) +# print('yS ',np.mean(y_S)) +# print('thetap',np.mean(theta_p)) +# print('thetas',np.mean(theta_s)) +# print('m ',np.mean(m)) +# print('Ixi ',np.mean(Ixi)) +# print('Iyi ',np.mean(Iyi)) +# print('Ip ',np.mean(Ip)) +# print('x_G ',np.mean(x_G)) +# print('y_G ',np.mean(y_G)) +# print('thetai',np.mean(theta_i)) + + # Convert to Hawc2 system + if FPM: + dfMeanLine , dfStructure = beamDyn2Hawc2FPM_raw(r_bar, + kp_x, kp_y, kp_z, twist, # BeamDyn convention, twist around -z [in rad] + m, Ixi, Iyi, x_G, y_G, theta_i, # theta_i/p around z (in rad) + x_C, y_C, theta_p, K, M) + + else: + + dfMeanLine , dfStructure = beamDyn2Hawc2_raw(r_bar, + kp_x, kp_y, kp_z, twist, + m, Ixi, Iyi, x_G, y_G, theta_i, + EA, EIx, EIy, GKt, kxsGA, kysGA, x_C, y_C, theta_p, x_S, y_S, theta_s, + A=A, E=E, G=G) + + # --- Rewrite st file + if H2_stfile is not None: + try: + os.makedirs(os.path.dirname(H2_stfile)) + except: + pass + if verbose: + print('Writing: ',H2_stfile) + + dfstructure2stfile(dfStructure, H2_stfile) + #with open(H2_stfile, 'w') as f: + # f.write('%i ; number of sets, Nset\n' % 1) + # f.write('-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n') + # f.write('#%i ; set number\n' % 1) + # if FPM: + # cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] + # else: + # cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]', 'x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] + # f.write('\t'.join(['{:20s}'.format(s) for s in cols])+'\n') + # f.write('$%i %i\n' % (1, dfStructure.shape[0])) + # f.write('\n'.join('\t'.join('%19.13e' %x for x in y) for y in dfStructure.values)) + + # --- Rewrite htc file + if H2_htcfile is not None: + def readToMarker(lines, marker, i, nMax=None, noException=False): + l_sel=[] + if nMax is None: nMax=len(lines) + while i=0: + break + l_sel.append(line.strip()) + i+=1 + if line.strip().replace(' ','').lower().find(marker)<0: + if noException: + return None, None, None + else: + raise Exception('Marker not found '+ marker) + return l_sel, line, i + + with open(H2_htcfile, 'r') as f: + lines_in = f.readlines() + lines_out = [] + bodyNotFound=True + iBodyEnd=0 + nBodies=0 + while bodyNotFound and nBodies<10: + _, line, iBodyStart = readToMarker(lines_in, 'beginmain_body',iBodyEnd) + _, line, iBodyEnd = readToMarker(lines_in, 'endmain_body', iBodyStart) + _, line, iBody = readToMarker(lines_in, 'name'+bodyname, iBodyStart, iBodyEnd, True) + nBodies+=1 + if line is None: + iBody=-1 + else: + #print('Body {} found between lines {} and {} '.format(bodyname, iBodyStart+1, iBodyEnd+1)) + bodyNotFound=False + if nBodies>=10: + raise Exception('Body {} not found in file'.format(bodyname)) + + _, line, iC2Start = readToMarker(lines_in, 'beginc2_def', iBodyStart, iBodyEnd) + _, line, iC2End = readToMarker(lines_in, 'endc2_def' , iC2Start, iBodyEnd) + + _, line, iTIStart = readToMarker(lines_in, 'begintimoschenko_input', iBodyStart, iBodyEnd) + _, line, iTIEnd = readToMarker(lines_in, 'endtimoschenko_input' , iTIStart, iBodyEnd) + + + simdir = os.path.dirname(H2_htcfile) + H2_stfile_rel = os.path.relpath(H2_stfile, simdir) + + lines_out = lines_in[:iTIStart+1] + lines_out += [' filename {};\n'.format(H2_stfile_rel)] + if FPM: + lines_out += [' FPM 1 ;\n'] + # lines_out += [' FPM 0 ;\n'] + lines_out += [' set 1 1 ;\n'] + lines_out += lines_in[iTIEnd:iC2Start+1] + lines_out += [' nsec {} ;\n'.format(dfMeanLine.shape[0])] + for i, row in dfMeanLine.iterrows(): + lines_out += [' sec {:4d}\t{:13.6e}\t{:13.6e}\t{:13.6e}\t{:13.6e};\n'.format(i+1, row['x_[m]'],row['y_[m]'],row['z_[m]'],row['twist_[deg]'])] + lines_out += lines_in[iC2End:] + + + if verbose: + print('ReWriting: ',H2_htcfile) + with open(H2_htcfile, 'w') as f: + f.write(''.join(lines_out)) + + return dfMeanLine, dfStructure + + +def beamDyn2Hawc2FPM_raw(r_bar, kp_x, kp_y, kp_z, twist, + m, Ixi, Iyi, x_G, y_G, theta_i, # TODO remove in the future + x_C, y_C, theta_p, # TODO remove in the future + K, M): + """ + Convert spanwise quantities from BeamDyn to Hawc2 + - kp_x, kp_y, kp_z, twist: keypoints positions/orientation as defined in BeamDyn "main" file + + NOTE: all angles are in radians + + """ + import scipy.linalg + nSpan = len(K[0,0]) + # --- BeamDyn to Hawc2 Structural data + # Hawc2 = BeamDyn + x_g = -y_G + y_g = x_G + x_e = -y_C + y_e = x_C + pitch = theta_p*180/np.pi # [deg] NOTE: could use theta_p, theta_i or theta_s + if np.all(np.abs(m)<1e-16): + ri_y = m*0 + ri_x = m*0 + else: + ri_y = np.sqrt(Ixi/m) # [m] + ri_x = np.sqrt(Iyi/m) # [m] + + # Curvilinear position of keypoints (only used to get max radius...) + dr= np.sqrt((kp_x[1:]-kp_x[0:-1])**2 +(kp_y[1:]-kp_y[0:-1])**2 +(kp_z[1:]-kp_z[0:-1])**2) + r_p= np.concatenate(([0],np.cumsum(dr))) + r=r_bar * r_p[-1] + + # From Hawc2/ANBA4 to BeamDyn + RotMat_H2_BD=np.array([ + [ 0, 1, 0], + [-1, 0, 0], + [ 0, 0, 1]]) + RR_H2_BD = scipy.linalg.block_diag(RotMat_H2_BD,RotMat_H2_BD) + # From BeamDyn to Hawc2/ANBA4 + RR_BD_H2 = RR_H2_BD.T + + stiff = ComputeStiffnessProps() + inertia = ComputeInertiaProps() + transform = TransformCrossSectionMatrix() + + # --- Spanwise quantities for HAWC2 input file + x_e_h2 = np.zeros(nSpan) # Point where radial force (z) does not contribute to beanding around x or y + y_e_h2 = np.zeros(nSpan) + x_g_h2 = np.zeros(nSpan) + y_g_h2 = np.zeros(nSpan) + m_h2 = np.zeros(nSpan) + ri_x_h2 = np.zeros(nSpan) + ri_y_h2 = np.zeros(nSpan) + pitch_h2 = np.zeros(nSpan) # angle between xc2 axis and principal axis xe + KH2=np.zeros((6,6,nSpan)) + for iSpan in np.arange(nSpan): + K_bd = np.zeros((6,6)) + M_bd = np.zeros((6,6)) + for i in np.arange(6): + for j in np.arange(6): + K_bd[i,j] = K[i,j][iSpan] + M_bd[i,j] = M[i,j][iSpan] + + # Rotate BD stiffness matrix to Hawc2 reference system + K_h2 = (RR_BD_H2).dot(K_bd).dot(RR_BD_H2.T) + M_h2 = (RR_BD_H2).dot(M_bd).dot(RR_BD_H2.T) + # Compute coordinates of main points + xt , yt = stiff.ComputeTensionCenter(K_h2) # tension/elastic center + xs , ys = stiff.ComputeShearCenter(K_h2) # shear center + xm , ym = inertia.ComputeMassCenter(M_h2) # inertia + x_g_h2[iSpan] = xm + y_g_h2[iSpan] = ym + x_e_h2[iSpan] = xt + y_e_h2[iSpan] = yt + # Inertia properties + m_h2[iSpan] = M_h2[0,0] + #ri_x_h2[iSpan] = TODO + #ri_x_h2[iSpan] = TODO + + # Compute stiffness matrix with decoupled forces and moments + Kdec = stiff.DecoupleStiffness(K_h2) + # Compute Delta, the rotation angle of principal axes (rad) + #Delta = stiff.PrincipalAxesRotationAngle(Kdec) + Delta = - stiff.OrientationPrincipalAxesBecas(Kdec) # appears more robust + pitch_h2[iSpan]=Delta + # Translate K matrix into EC and rotate it by -Delta + Kh2 = transform.CrossSectionRotoTranslationMatrix(K_h2, xt, yt, -Delta) + + for i in np.arange(6): + for j in np.arange(6): + KH2[i,j][iSpan]=Kh2[i,j] + + pitch_h2 *=180/np.pi # [deg] + + # sanity checks between previous method and new (general) method + np.testing.assert_allclose(m , m_h2, rtol=1e-3) + np.testing.assert_allclose(x_e, x_e_h2, rtol=1e-3) + np.testing.assert_allclose(y_e, y_e_h2, rtol=1e-3) + np.testing.assert_allclose(x_g, x_g_h2, rtol=1e-3) + np.testing.assert_allclose(y_g, y_g_h2, rtol=1e-3) + np.testing.assert_allclose(theta_p*180/np.pi, -pitch_h2, rtol=1e-3) + + # Using new values (remove in the future) + pitch = -pitch_h2 + x_e = x_e_h2 + y_e = y_e_h2 + x_g = x_g_h2 + y_g = y_g_h2 + m = m_h2 + if np.mean(pitch)>0: + print('Pitch (delta) is mostly positive') + else: + print('Pitch (delta) is mostly negative') + + + K11 = KH2[0,0] + K22 = KH2[1,1] + K33 = KH2[2,2] + K44 = KH2[3,3] + K55 = KH2[4,4] + K66 = KH2[5,5] + + K12 = KH2[0,1] + K13 = KH2[0,2] + K14 = KH2[0,3] + K15 = KH2[0,4] + K16 = KH2[0,5] + K23 = KH2[1,2] + K24 = KH2[1,3] + K25 = KH2[1,4] + K26 = KH2[1,5] + K34 = KH2[2,3] + K35 = KH2[2,4] + K36 = KH2[2,5] + K44 = KH2[3,3] + K45 = KH2[3,4] + K46 = KH2[3,5] + K55 = KH2[4,4] + K56 = KH2[4,5] + + # --- Create a data frame with spanwise beam data + columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] + data = np.column_stack((r, m, x_g, y_g, ri_x, ri_y, pitch, x_e, y_e, K11,K12,K13,K14,K15,K16,K22,K23,K24,K25,K26,K33,K34,K35,K36,K44,K45,K46,K55,K56,K66)) + dfStructure = pd.DataFrame(data=data, columns=columns) + + # --- BeamDyn to Hawc2 Reference axis + X_H2 = -kp_y + Y_H2 = kp_x + Z_H2 = kp_z + twist_H2 = - twist*180/np.pi # -negative of BeamDyn twist [deg] + columns=['x_[m]', 'y_[m]', 'z_[m]', 'twist_[deg]'] + data = np.column_stack((X_H2, Y_H2, Z_H2, twist_H2)) + dfMeanLine = pd.DataFrame(data=data, columns=columns) + + return dfMeanLine, dfStructure + + + +def beamDyn2Hawc2_raw(r_bar, kp_x, kp_y, kp_z, twist, + m, Ixi, Iyi, x_G, y_G, theta_i, + EA, EIx, EIy, GKt, kxsGA, kysGA, x_C, y_C, theta_p, x_S, y_S, theta_s, + A=None, E=None, G=None): + """ + NOTE: all angles are in radians + """ + # --- BeamDyn to Hawc2 Structural data + if A is None: A = np.ones(x_G.shape) + if E is None: E = EA/A + if G is None: G = E/2/(1+0.3) # Young modulus + # Hawc2 = BeamDyn + x_cg = -y_G + y_cg = x_G + x_sh = -y_S + y_sh = x_S + x_e = -y_C + y_e = x_C + I_y = EIx/E # [m^4] Hawc2 Iy is wrt to principal bending ye axis + I_x = EIy/E # [m^4] Hawc2 Ix is wrt to principal bending xe axis + I_p = GKt/G # [m^4] + k_y = kxsGA/(G*A) + k_x = kysGA/(G*A) + pitch = theta_p*180/np.pi # [deg] NOTE: could use theta_p, theta_i or theta_s + if np.all(np.abs(m)<1e-16): + ri_y = m*0 + ri_x = m*0 + else: + ri_y = np.sqrt(Ixi/m) # [m] + ri_x = np.sqrt(Iyi/m) # [m] + # Curvilinear position of keypoints (only used to get max radius...) + dr= np.sqrt((kp_x[1:]-kp_x[0:-1])**2 +(kp_y[1:]-kp_y[0:-1])**2 +(kp_z[1:]-kp_z[0:-1])**2) + r_p= np.concatenate(([0],np.cumsum(dr))) + r=r_bar * r_p[-1] + + columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] + data = np.column_stack((r,m,x_cg,y_cg,ri_x, ri_y, x_sh, y_sh, E, G, I_x, I_y, I_p, k_x, k_y, A, pitch, x_e, y_e)) + dfStructure = pd.DataFrame(data=data, columns=columns) + + # --- BeamDyn to Hawc2 Reference axis + X_H2 = -kp_y + Y_H2 = kp_x + Z_H2 = kp_z + twist_H2 = - twist*180/np.pi # -[deg] + columns=['x_[m]', 'y_[m]', 'z_[m]', 'twist_[deg]'] + data = np.column_stack((X_H2, Y_H2, Z_H2, twist_H2)) + dfMeanLine = pd.DataFrame(data=data, columns=columns) + + return dfMeanLine, dfStructure + + + +if __name__=='__main__': + np.set_printoptions(linewidth=300) + + # --- BeamDyn 2 Hawc 2 + BD_mainfile = 'solid_beam_BeamDyn.dat' + BD_bladefile = '../solid_beam_BeamDyn_Blade.dat' + H2_htcfile_old = './_template.htc' + H2_htcfile_new = './solid_beam_hawc2.htc' + H2_stfile = './solid_beam_st.dat' + + from shutil import copyfile + copyfile(H2_htcfile_old, H2_htcfile_new) + + beamDyn2Hawc2(BD_mainfile, BD_bladefile, H2_htcfile_new, H2_stfile, 'beam_1', A=None, E=None, G=None) + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py new file mode 100644 index 0000000000..5d6dac99ec --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py @@ -0,0 +1,2 @@ +from .beamDynToHawc2 import * +from .hawc2ToBeamDyn import * diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore new file mode 100644 index 0000000000..1d38ccefe1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore @@ -0,0 +1,11 @@ +*.aux +*.bbl +*.blg +*.toc +*.log +*.out +*.pdf +*.gz +figs_svgtex/ +tags +_misc* diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex new file mode 100644 index 0000000000..39b454f307 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex @@ -0,0 +1,950 @@ +\documentclass[11pt]{article} +% --------------------------------------------------------------------------------} +% --- Preamble +% --------------------------------------------------------------------------------{ +\usepackage{ifpdf} +\ifpdf + \usepackage{graphicx} + \usepackage{epstopdf} %don't forget the shell-escape command for pdflatex + \usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolor=red,urlcolor=red]{hyperref} +\else + \usepackage{graphicx} + \usepackage[dvips,colorlinks,bookmarksopen,bookmarksnumbered,citecolor=red,urlcolor=red]{hyperref} +\fi +\usepackage{type1cm} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{stmaryrd} %[| |] \llbracket +\usepackage{mhsetup} +\usepackage{mathtools} +\usepackage{relsize} +\usepackage{color} +\usepackage[table]{xcolor} %lots of tools for colors +\usepackage{import} +\usepackage{listings} % for lstlistings +\usepackage{fullpage} +\usepackage{pdflscape} + +\hypersetup{ + colorlinks = false, + linkcolor =[rgb]{0.2,0.2,0.2}, + linkbordercolor =[rgb]{0.7,0.7,0.7} +} + +\setlength{\itemsep}{-10em} +\DeclareGraphicsExtensions{.pdf,.PDF,.png,.jpg,.PNG,.JPG,.eps,.EPS,.Eps} +\graphicspath{{figs/}{figs_svg/}{figs_raw/}} +% --- svgtex +\newcommand{\svgtex}[4]{\begin{figure}[!htb]% + \centering% + \def\svgwidth{#3\columnwidth}% used to be a scalebox + \scalebox{#4}{\import{figs_svgtex/}{#1}}% + \caption{#2}\label{fig:#1}% + \end{figure}% +} +% --- svg +\newcommand{\svg}[3]{\begin{figure}[!htb] + \centering% + \includegraphics[width=#3\textwidth]{#1} + \caption{#2}\label{fig:#1} + \end{figure} +} + +\renewcommand{\v}[1]{\boldsymbol{#1}} +\newcommand{\m}[1]{\boldsymbol{#1}} +\newcommand{\eqdef}{\stackrel{\mathsmaller{\mathsmaller{\mathsmaller{\triangle}}}}{=}} +\newcommand{\weird}[1]{{\color{red}{!!!#1!!!}}} + + +% ---- Commands specific to this project +\newcommand{\sh}{{S}} +\newcommand{\cent}{{C}} +\newcommand{\xsh}{x_\text{sh}} +\newcommand{\ysh}{y_\text{sh}} +\newcommand{\zsh}{z_\text{sh}} +\newcommand{\EA}{{E\!A}\,} +\newcommand{\EI}{E\!I} +\newcommand{\GK}{G\!K_t} +\newcommand{\GA}{G\!A} +\newcommand{\rhotil}{\m{\tilde{\rho}}} +\newcommand{\stil} {\m{\tilde{s}}} + +% --------------------------------------------------------------------------------} +% --- Document +% --------------------------------------------------------------------------------{ +\begin{document} +\title{BeamDyn inputs from sectional beam properties} +\author{E. Branlard, J. Jonkman} +\maketitle + + +\section{Coordinate system} +The coordinate system assumed for BeamDyn in this document is illustrated in \autoref{fig:BeamDynSectionCoord}. +This coordinate system is similar to the one used by OpenFAST, with the exception that in this document angles are assumed positive around $z$, while in OpenFAST the angles are negative around $z$. As a result of this, all angles $\theta$ used in this document, need to be multiplied by $-1$ for applications with OpenFAST or BeamDyn. The OpenFAST coordinate system together with other aero-elastic codes coordinate systems are shown in \autoref{fig:AeroElastCodesCoordConvention}. +% +% -------------------------------------------------------------------------------- +\svgtex{BeamDynSectionCoord}{Coordinate system assumed in this document for BeamDyn. Coordinates $x_b$,$y_b$,$z_b$ are the coordinates at the root of the blade, used to define the reference axis of the beam. Coordinates $x,y,z$ are used for a typical cross section, with $z$ normal to the cross section, tangent to the reference axis. Point $O$ is the origin of the cross section (defined by the reference axis), point $C$ the centroid, point $S$ the shear center and point $G$ the center of gravity. The coordinates of each points are expressed with respect to the origin of the cross section.}{1.0}{0.90} +% -------------------------------------------------------------------------------- +The blade coordinate system includes rigid-body pitch rotation relative to the coned coordinate system. +The position/orientation, velocity, and acceleration of the blade coordinate system are passed from ElastoDyn to BeamDyn at every time step. + + +\section{Stiffness matrix} +The results presented in this section are inspired by the expressions given in the \textit{Dymore} manual~\cite{dymore} but for a different coordinate system\footnote{Note that the signs in equation (11) of \cite{dymore} are erroneous and have to be reversed. Apart from that, the coordinate mapping from this reference to the current document is simply $1\to z$, $2\to x$, $3\to y$.}. + +\subsection{Introduction} +The stiffness matrix that relates the cross-section strains to the loads is assumed to take the following form (valid for orthotropic layups, that is, with no off-axis plies): +\begin{align} + \begin{bmatrix} + F_x \\ F_y\\ F_z \\ M_x \\ M_y\\ M_z\\ + \end{bmatrix} +&= + \begin{bmatrix} +K_{11} & K_{12} & 0 & 0 & 0 & K_{16} \\ +K_{21} & K_{22} & 0 & 0 & 0 & K_{26} \\ +0 & 0 & K_{33} & K_{34} & K_{35} & 0 \\ +0 & 0 & K_{43} & K_{44} & K_{45} & 0 \\ +0 & 0 & K_{53} & K_{54} & K_{55} & 0 \\ +K_{61} & K_{62} & 0 & 0 & 0 & K_{66} \\ +\end{bmatrix} + \begin{bmatrix} + \gamma_{x} \\ \gamma_{y} \\ \epsilon_z \\ \kappa_x \\ \kappa_y\\ \kappa_z \\ + \end{bmatrix} + \quad + \begin{matrix} + \text{(flapwise shear)}\\ + \text{(edgewise shear)}\\ + \text{(axial strain)}\\ + \text{(edgewise bending curvature)}\\ + \text{(flapwise bending curvature)}\\ + \text{(torsion)}\\ + \end{matrix} +\end{align} +where the text in parenthesis follows the convention used in \autoref{fig:BeamDynSectionCoord} to draw the airfoil. +When the stiffness matrix takes such form, the elements of the matrix involved in the axial and bending loads ($F_z,M_x,M_y$) and the elements of the matrix involved in the shear-torsion loads ($F_x,F_y,M_z$) may be determined independently. The two following sections consider these two independent problems. The elements of the matrix for both problems are expressed by considering the centroid and the principal axes of bending for the first problem, and the shear center and the principal shear directions for the second problem. + + + +% \section*{Introduction} +% +% \tableofcontents +% \clearpage +\subsection{Axial force and bending moments} +The axial force is decoupled from the bending moments at the centroid (also referred to as the neutral axis or elastic axis) of the cross section. +Futher, the bending moments are decoupled when expressed about the principal axes. +In this paragraph, the axial forces and bending moments are first expressed with respect to the centroid and the principal axes, then they are rotated to the cross section axis, and last translated to the origin of the cross section. +% +The coordinates of the centroid, expressed from the origin of the cross sections are written $(x_\cent,y_\cent)$. +The principal axes, noted $\hat{x}_p,\hat{y}_p$, are rotated compared to the cross section axis with an angle $\theta_p$. +% +The axial loads and bending moments about the centroid, and with respect to the principal axes of the cross section are: +\begin{align} + \begin{bmatrix}F_z^\cent \\ M_{x_p}^\cent \\ M_{y_p}^\cent\\ \end{bmatrix} + = + \begin{bmatrix}\EA & 0 & 0\\0 & \EI_{x_p} & 0\\0 & 0& \EI_{y_p}\end{bmatrix} + \begin{bmatrix}\epsilon_z^\cent \\ \kappa_{x_p}^\cent \\ \kappa_{y_p}^\cent\\ \end{bmatrix} +\end{align} +where the superscript $\cent$ indicates that the loads, stress and curvature are expressed at the centroid and the subscript $p$ indicates that the values are expressed in the frame of the princpal axes. +The transformation between the principal axes and the cross-section axis is such that: +\begin{align} + \begin{bmatrix}F_z^\cent \\ M_{x}^\cent \\ M_{y}^\cent\\ \end{bmatrix} + &= + \m{T} + \begin{bmatrix}\EA & 0 & 0\\0 & \EI_{x_p} & 0\\0 & 0& \EI_{y_p}\end{bmatrix} + \m{T}^T + \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix} + = + \begin{bmatrix}\EA & 0 & 0\\0 & H_{xx} & - H_{xy}\\0 & - H_{xy} & H_{yy}\end{bmatrix} + \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix} + , + \label{eq:AxialBendingAtCentroid} + \\ +\shortintertext{with} + \m{T}&=\begin{bmatrix}1 & 0 & 0\\0 & \cos\theta_p & -\sin\theta_p\\0 & \sin\theta_p& \cos\theta_p\end{bmatrix} +\end{align} +and where the variables $H_{xx},H_{xy},H_{yy}$ represent the bending stiffnesses in the cross-section coordinates system, obtained from the principal axis stiffnesses as: +\begin{align} +H_{xx} &= \EI_{x_p} \cos^{2}\theta_p + \EI_{y_p} \sin^{2}\theta_p \\ +H_{yy} &= \EI_{x_p} \sin^{2}\theta_p + \EI_{y_p} \cos^{2}{\theta_p} \\ +H_{xy} &= -\EI_{x_p} \sin\theta_p \cos\theta_p + \EI_{y_p} \sin\theta_p \cos\theta_p +\end{align} +% +% +% The axial loads and the bending moments are decoupled , that is: +% \begin{align} +% \begin{bmatrix}F_z^\cent \\ M_x^\cent \\ M_y^\cent\\ \end{bmatrix}= +% \begin{bmatrix}\EA & 0 & 0\\0 & H_{xx} & - H_{xy}\\0 & - H_{xy} & H_{yy}\end{bmatrix} +% \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix} +% \label{eq:AxialBendingAtCentroid} +% \end{align} + +% +% +% +% +% +% +The transformation of the loads, axial stress and curvatures between the origin of the section and the centroid are such that: +\begin{align} + \begin{bmatrix}F_z \\ M_x \\ M_y\\ \end{bmatrix} + = + \begin{bmatrix}1 & 0 & 0\\y_{\cent} & 1 & 0\\- x_{\cent} & 0 & 1\end{bmatrix} + \begin{bmatrix}F_z^\cent \\ M_x^\cent \\ M_y^\cent\\ \end{bmatrix} + %\label{eq:} + ,\qquad + \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix}= + \begin{bmatrix}1 & y_{\cent} & - x_{\cent}\\0 & 1 & 0\\0 & 0 & 1\end{bmatrix} + \begin{bmatrix}\epsilon_z \\ \kappa_x \\ \kappa_y\\ \end{bmatrix} + \label{eq:AxialBendingCoordTrans} +\end{align} +% +% +Using \autoref{fig:StiffnessMatrixAxialBending}, the signs can be verified as follows: a positive axial force at point $\cent$ ($F_z^\cent>0$), leads to a negative moment about $y$ and a positive moment about $x$ at the origin; a positive $x$-curvature of the beam at the origin ($\kappa_x>0$), leads to an elongation of the fibers at $\cent$, whereas a positive $y$-curvature of the beam at the origin implies a compression of the fibers at point $\cent$ ($\epsilon_z^\cent<0)$ +% +% -------------------------------------------------------------------------------- +\svgtex{StiffnessMatrixAxialBending}{Strain and loads transformation between the centroid $C$ and the origin $O$.}{1.1}{0.85} +% -------------------------------------------------------------------------------- +% +% +Combining \autoref{eq:AxialBendingCoordTrans} and \autoref{eq:AxialBendingAtCentroid} leads to: +\begin{align} + \begin{bmatrix}F_z \\ M_x \\ M_y\\ \end{bmatrix} + = + \begin{bmatrix} + \EA & \EA y_{\cent} & - \EA x_{\cent}\\ + \EA y_{\cent} & H_{xx} + \EA y_{\cent}^{2} & - H_{xy} - \EA x_{\cent} y_{\cent}\\ + - \EA x_{\cent} & - H_{xy} - \EA x_{\cent} y_{\cent} & H_{yy} + \EA x_{\cent}^{2}\end{bmatrix} + \begin{bmatrix}\epsilon_z \\ \kappa_x \\ \kappa_y\\ \end{bmatrix} + \label{eq:AxialBendingOrigin} +\end{align} + + + +% --------------------------------------------------------------------------------} +% --- +% --------------------------------------------------------------------------------{ +\subsection{Twisting moment and shear-forces} +The torsional moment and the shear forces are decoupled at the shear-center of the cross section, noted $\sh$, and of coordinates $(x_\sh, y_\sh)$ with respect to the origin of the cross section. +Further, the shear forces are independent when expressed with respect to the principal shear directions (usually taken as the principal axes direction), which are the axes, noted $\hat{x}_s, \hat{y}_s$, obtained by rotating the cross section axes $\hat{x}$, $\hat{y}$ by an angle $\theta_s$ about the $z$-axis. +The stiffness matrix about the shear center and in the principal shear directions is then: +\begin{align} + \begin{bmatrix} F_{x_s}^\sh \\ F_{y_s}^\sh\\M_z^\sh \\ \end{bmatrix} + = + \begin{bmatrix} + k_x \GA & 0 & 0\\ + 0 & k_y \GA &0 \\ + 0 & 0 & \GK\\ + \end{bmatrix} + \begin{bmatrix}\gamma_{x_s}^\sh \\ \gamma_{y_s}^\sh \\ \kappa_{z}^\sh \end{bmatrix} + \label{eq:ShearTorsionAtShearCenterInShearDirections} +\end{align} +where the superscript $\sh$ indicates that the quantities are expressed at the shear center while the subscript $s$ indicates that the values are related to the principal shear directions. The variables $k_x$ and $k_y$ are the dimensionless shear factor related to shear forces in the $\hat{x}_s$ and $\hat{y}_s$ direction respectively. + The stiffness matrix at the shear center is transformed to the cross-section frame leading to: +\begin{align} + \begin{bmatrix} F_x^\sh \\ F_y^\sh\\M_z^\sh \\ \end{bmatrix} + &= + \begin{bmatrix} + K_{xx} & - K_{xy} & 0\\ + - K_{xy} & K_{yy} &0 \\ + 0 & 0 & \GK\\ + \end{bmatrix} + \begin{bmatrix}\gamma_{x}^\sh \\ \gamma_{y}^\sh \\ \kappa_z^\sh \end{bmatrix} + \label{eq:ShearTorsionAtShearCenter} + \shortintertext{with} +K_{xx}/\GA &= k_{x_s} \cos^{2}\theta_s + k_{y_s} \sin^{2}\theta_s \\ +K_{yy}/\GA &= k_{x_s} \sin^{2}\theta_s + k_{y_s} \cos^{2}{\theta_s} \\ +K_{xy}/\GA &= (k_{y_s}-k_{x_s}) \sin\theta_s \cos\theta_s +% +\end{align} +% The shear center has the coordinates $(x_\sh,y_\sh)$ with respect to the origin of the cross section. +The loads, strains and twisting rate are transferred from the origin to the shear center as follows: +% +\begin{align} + \begin{bmatrix}F_x \\ F_y\\ M_z\\ \end{bmatrix} + = + \begin{bmatrix} + 1 & 0 &0 \\ + 0 & 1 & 0 \\ + - y_{\sh} & x_{\sh}& 1\\ + \end{bmatrix} + \begin{bmatrix} F_x^\sh \\ F_y^\sh\\M_z^\sh \\ \end{bmatrix} +,\qquad + \begin{bmatrix}\gamma_{x}^\sh \\ \gamma_{y}^\sh \\ \kappa_z^\sh \end{bmatrix} + = + \begin{bmatrix}1 & 0 & - y_{\sh}\\0 & 1 & x_{\sh}\\0 & 0 & 1\end{bmatrix} + \begin{bmatrix}\gamma_{x} \\ \gamma_{y} \\ \kappa_z \end{bmatrix} + \label{eq:ShearTorsionCoordTrans} +\end{align} +% The signs can be verified as follows: +% +Combining \autoref{eq:ShearTorsionAtShearCenter} with \autoref{eq:ShearTorsionCoordTrans} leads to: +% +\begin{align} + \begin{bmatrix}F_x \\ F_y\\ M_z\\ \end{bmatrix} + &= + \begin{bmatrix} +K_{xx} & - K_{xy} & - K_{xx} y_{\sh} - K_{xy} x_{\sh}\\- K_{xy} & K_{yy} & K_{xy} y_{\sh} + K_{yy} x_{\sh}\\- K_{xx} y_{\sh} - K_{xy} x_{\sh} & K_{xy} y_{\sh} + K_{yy} x_{\sh} & \GK + K_{xx} y_{\sh}^{2} + 2 K_{xy} x_{\sh} y_{\sh} + K_{yy} x_{\sh}^{2}\end{bmatrix} + \begin{bmatrix}\gamma_{x} \\ \gamma_{y} \\ \kappa_z \end{bmatrix} + \label{eq:ShearTorsionOrigin} +\end{align} + + + + + +\subsection{Summary} +The results given in \autoref{eq:ShearTorsionOrigin} and \autoref{eq:AxialBendingOrigin} are combined below to form the $6\times 6$ stiffness matrix expressed at the origin of the cross section: +\begin{align} + \begin{bmatrix} + F_x \\ F_y\\ F_z \\ M_x \\ M_y\\ M_z\\ + \end{bmatrix} +&= + \begin{bmatrix} +K_{11} & K_{12} & 0 & 0 & 0 & K_{16} \\ +K_{21} & K_{22} & 0 & 0 & 0 & K_{26} \\ +0 & 0 & K_{33} & K_{34} & K_{35} & 0 \\ +0 & 0 & K_{43} & K_{44} & K_{45} & 0 \\ +0 & 0 & K_{53} & K_{54} & K_{55} & 0 \\ +K_{61} & K_{62} & 0 & 0 & 0 & K_{66} \\ +\end{bmatrix} +% + \begin{bmatrix} + \gamma_{x} \\ \gamma_{y} \\ \epsilon_z \\ \kappa_x \\ \kappa_y\\ \kappa_z \\ + \end{bmatrix} + \\ + \begin{bmatrix} +K_{11} & K_{12} & K_{16} \\ +K_{21} & K_{22} & K_{26} \\ +K_{61} & K_{62} & K_{66} \\ +\end{bmatrix} +&= + \begin{bmatrix} +K_{xx} & - K_{xy} & - K_{xx} y_{\sh} - K_{xy} x_{\sh}\\- K_{xy} & K_{yy} & K_{xy} y_{\sh} + K_{yy} x_{\sh}\\- K_{xx} y_{\sh} - K_{xy} x_{\sh} & K_{xy} y_{\sh} + K_{yy} x_{\sh} & \GK + K_{xx} y_{\sh}^{2} + 2 K_{xy} x_{\sh} y_{\sh} + K_{yy} x_{\sh}^{2} +\end{bmatrix} +\nonumber +\\ + \begin{bmatrix} +K_{33} & K_{34} & K_{35} \\ +K_{43} & K_{44} & K_{45} \\ +K_{53} & K_{54} & K_{55} \\ +\end{bmatrix} +&= + \begin{bmatrix}\EA & \EA y_{\cent} & - \EA x_{\cent}\\\EA y_{\cent} & H_{xx} + \EA y_{\cent}^{2} & - H_{xy} - \EA x_{\cent} y_{\cent}\\- \EA x_{\cent} & - H_{xy} - \EA x_{\cent} y_{\cent} & H_{yy} + \EA x_{\cent}^{2}\end{bmatrix} +\nonumber + \\ +H_{xx} &= \EI_{x_p} \cos^{2}\theta_p + \EI_{y_p} \sin^{2}\theta_p \nonumber \\ +H_{yy} &= \EI_{x_p} \sin^{2}\theta_p + \EI_{y_p} \cos^{2}{\theta_p} \nonumber \\ +H_{xy} &= (\EI_{y_p}-\EI_{x_p}) \sin\theta_p \cos\theta_p \nonumber \\ +K_{xx}/\GA &= k_{x_s} \cos^{2}\theta_s + k_{y_s} \sin^{2}\theta_s \nonumber\\ +K_{yy}/\GA &= k_{x_s} \sin^{2}\theta_s + k_{y_s} \cos^{2}{\theta_s} \nonumber \\ +K_{xy}/\GA &= (k_{y_s}-k_{x_s}) \sin\theta_s \cos\theta_s \nonumber +\end{align} + + + + + +\clearpage +% --------------------------------------------------------------------------------} +% --- +% --------------------------------------------------------------------------------{ +\section{Mass matrix} + +\subsection{General form for a rigid body} +The mass matrix of a rigid body expressed at its center of mass is +\begin{align} +\m{M}^G= + \begin{bmatrix} + M\m{I}_3 & 0 \\ + 0 & \m{J}^{G} \\ + \end{bmatrix} +\end{align} +The general form of the mass matrix of a rigid body expressed at a given point $O$ is: +\begin{align} +\m{M}^O= + \begin{bmatrix} + M\m{I}_3 & -M \rhotil \\ + M \rhotil & \m{J}^{O} \\ + \end{bmatrix} +\end{align} +where +$\v{\rho}\eqdef \v{r}_{{O}G}$ is the distance from point $O$ to point $G$ and +$\m{J}^{O}$ is the inertia tensor of the body at $O$, related to the inertia tensor at the COG by: +% \begin{align} +$ + \m{J}^{O}\eqdef - \int \stil_{P}\, \stil_{P}\, dm +=\m{J}_G-M \rhotil\rhotil +$ +, $\v{s}_P=\v{r}_{OP}$ is a point of the body +and where the tilde notation refer to the \textit{skew symmetric matrix}. +Given two vectors $\v{u}$ and $\v{t}$, the skew symmetric matrix is such that $\tilde{\v{u}}\; \v{t} =\v{u}\times\v{t}$. +which is written in matricial form as follows: +\begin{align} +% \text{Skew}(\v{u}) \eqdef + \v{\tilde{u}} \eqdef + \begin{bmatrix} + 0 & -u_z & u_y \\ + u_z & 0 & -u_x \\ + -u_y & u_x & 0 \\ + \end{bmatrix} %\label{eq:} +\end{align} + + + +\subsection{Mass matrix of a cross section} + +Mass matrix about center of mass $G$, and about the principal inertia directions: +\begin{align} +\m{M}_i^G = + \begin{bmatrix} + m & 0 & 0 & 0 & 0 &0 \\ + 0 & m & 0 & 0 & 0 &0 \\ + 0 & 0 & m & 0 & 0 &0 \\ + 0 & 0 & 0 & I_{x_i} & 0 &0 \\ + 0 & 0 & 0 & 0 & I_{y_i} & \\ + 0 & 0 & 0 & 0 & 0 & I_p \\ + \end{bmatrix} + ,\qquad +\end{align} +where $I_p=I_{x_i} + I_{y_i}$. +Rotated to be expressed about the cross section axis, this becomes: +\begin{align} +\m{M}^G &= + \begin{bmatrix} + m & 0 & 0 & 0 & 0 & 0 \\ + 0 & m & 0 & 0 & 0 & 0 \\ + 0 & 0 & m & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{xx} & -I_{xy} & 0 \\ + 0 & 0 & 0 & -I_{xy} & I_{yy} & \\ + 0 & 0 & 0 & 0 & 0 & I_p \\ + \end{bmatrix} + ,\qquad + \shortintertext{with} + I_{xx} &= I_{x_i} \cos^2\theta_i + I_{y_i} \sin^2\theta_i\\ + I_{yy} &= I_{x_i} \sin^2\theta_i + I_{y_i} \cos^2\theta_i\\ + I_{xy} &= (I_{y_i}-I_{x_i}) \sin\theta_i \cos\theta_i +\end{align} +Transferred to the origin: +\begin{align} +\m{M}^O= +\begin{bmatrix} +m & 0 & 0 & 0 & 0 & - m y_G\\0 & m & 0 & 0 & 0 & m x_G\\0 & 0 & m & m y_G & - m x_G & 0\\0 & 0 & m y_G & I_{xx} + m y_G^{2} & - I_{xy} - m x_G y_G & 0\\0 & 0 & - m x_G & - I_{xy} - m x_G y_G & I_{yy} + m x_G^{2} & 0\\- m y_G & m x_G & 0 & 0 & 0 & I_{p} + m x_G^{2} + m y_G^{2} +\end{bmatrix} +\end{align} + + + + +% +% +% \subsection{Old} +% % \weird{TODO} +% Example of mass matrix , beam directed along $x$ +% % See DeFriasLopez p 17 +% \begin{align} +% \begin{bmatrix} +% m & 0 & 0 & 0 & 0 & 0 \\ +% 0 & m & 0 & z_G m & 0 & 0 \\ +% 0 & 0 & m & -y_G m & 0 & 0 \\ +% 0 & z_G m & -y_G m & \rho_t & 0 & 0 \\ +% 0 & 0 & 0 & \rho_t & 0 & 0 \\ +% 0 & 0 & 0 & 0 & \rho_y & 0 \\ +% 0 & 0 & 0 & 0 & 0 & \rho_z \\ +% \end{bmatrix} +% \end{align} +% +% +% \weird{TODO} +% Example of mass matrix , beam directed along $x$ +% % See FAST documentation +% % https://openfast.readthedocs.io/en/master/source/user/beamdyn/input_files.html#equation-Stiffness +% \begin{align} +% \begin{bmatrix} +% m & 0 & 0 & 0 & 0 & -y_G m \\ +% 0 & m & 0 & 0 & 0 & x_G m \\ +% 0 & 0 & m & y_G m & -m x_G & 0 \\ +% 0 & 0 & y_G m & \rho_t & 0 & 0 \\ +% 0 & 0 & -x_G m & i_\text{Edg} & -i_\text{cp} & 0 \\ +% 0 & 0 & 0 & -i_\text{cp} & i_\text{Flp} & 0 \\ +% -y_G m & m x_G & 0 & 0 & 0 & i_\text{plr} \\ +% \end{bmatrix} +% ,\qquad +% \end{align} +% \weird{$i_\text{plr}=i_\text{Edg}+i_\text{Flp}$, when\ldots} +% +% +% \clearpage +% --------------------------------------------------------------------------------} +% --- +% --------------------------------------------------------------------------------{ +\section{Setting BeamDyn inputs from HAWC2 inputs} +To setup a BeamDyn model based on a HAWC2 model, it is convenient to use the mid-chord as a reference line of the beam. This is indeed the reference used in HAWC2, referred to as the ``c2\_def''-coordinate system. +% The definition of the mean line in BeamDyn and HAWC2 is given in \autoref{tab:MeanLineHAWC2}. +% +The structural file of HAWC2 contains the location of the center of gravity, shear center, and centroid. The centroid is yet referred to as ``elastic-center'' (defined as the point where the axial force is decoupled from the bending around $x$ and $y$). +% +The bending stiffness properties of HAWC2 are defined with respect to the principal axes, rotated by an structural pitch angle $\theta_s$ around $z$, compared to the axis of the cross section. The principal axes and principal shear axis are assumed to be the same. +% +The correspondence between the notations of the current document and HAWC2 is given in \autoref{tab:MeanLineHawc2}. +% ----------------------------------- TABLE -------------------------------------- +% \begin{landscape} +\begin{table}[!h]\centering + \caption{Correspondence between the current definitions and the inputs from HAWC2 for the mean line, section coordinates and stiffness properties} + \label{tab:MeanLineHawc2} +\begin{tabular}{rcl} + \textbf{Current} & & \textbf{HAWC2} \\ + \hline +(\tt{kp\_xr}) $x_O$ & = & $ y_{c2}$ (\tt{y-pos}) \\ +(\tt{kp\_yr}) $y_O$ & = & $ -x_{c2}$ (``-''\tt{x-pos}) \\ +(\tt{kp\_zr}) $z_O$ & = & $ z_{c2}$ (\tt{z-pos}) \\ +(\tt{initial\_twist}) $\theta_{z}$ & = & $ \theta_{z}$(\tt{theta\_z}) \\ + \hline + $x_G$ & = & $ y_{m}$ \\ + $y_G$ & = & $ -x_{m}$ \\ + $x_\sh$ & = & $ y_{s}$ \\ + $y_\sh$ & = & $ -x_{s}$ \\ + $x_\cent$ & = & $ y_{e}$ \\ + $y_\cent$ & = & $ -x_{e}$ \\ +\hline + $\EA$ & = & $ E\, A$ \\ + $\GK$ & = & $ G\, K$ \\ + $k_{x_s}$ & = & $ k_y $ \\ + $k_{y_s}$ & = & $ k_x $ \\ + $\EI_{x_p}$ & = & $ E I_y $ \\ + $\EI_{y_p}$ & = & $ E I_x $ \\ + $\theta_s$ & = & $ \theta_s$ \\ + $\theta_p$ & = & $ \theta_s$ \\ +\hline + $\theta_i$ & = & $ \theta_p$ \\ + $m$ & = & $m$ \\ + $I_{x_i}$ & = & $r_{iy}^2 m$ \\ + $I_{y_i}$ & = & $r_{ix}^2 m$ \\ + $I_{p}$ & = & $K m / A$\\ +\hline + \end{tabular} +\end{table} +% \end{landscape} +% -------------------------------------------------------------------------------- +% ----------------------------------- TABLE -------------------------------------- +% % \begin{landscape} +% \begin{table}[!h]\centering +% \caption{Correspondence of section coordinates between the current document and hawc2} +% \label{tab:SecCoord} +% \begin{tabular}{rcl} +% \textbf{Current} & & \textbf{Hawc2} \\ +% \hline +% $x_G$ & = & $ y_{m}$ \\ +% $y_G$ & = & $ -x_{m}$ \\ +% $x_\sh$ & = & $ y_{s}$ \\ +% $y_\sh$ & = & $ -x_{s}$ \\ +% $x_\cent$ & = & $ y_{e}$ \\ +% $y_\cent$ & = & $ -x_{e}$ \\ +% \hline +% \end{tabular} +% \end{table} +% % \end{landscape} +% -------------------------------------------------------------------------------- +% ----------------------------------- TABLE -------------------------------------- +% % \begin{landscape} +% \begin{table}[!h]\centering +% \caption{Correspondence of stiffness properties between the current document and hawc2} +% \label{tab:StiffHawc2} +% \begin{tabular}{rcl} +% \textbf{Current} & & \textbf{Hawc2} \\ +% \hline +% $\EA$ & = & $ E\, A$ \\ +% $\GK$ & = & $ G\, K$ \\ +% $k_x$ & = & $ k_y $ \\ +% $k_y$ & = & $ k_x $ \\ +% $\EI_{x_p}$ & = & $ E I_y $ \\ +% $\EI_{y_p}$ & = & $ E I_x $ \\ +% $\theta_s$ & = & $ \theta_s$ \\ +% $\theta_p$ & = & $ \theta_s$ \\ +% \hline +% \end{tabular} +% \end{table} +% % \end{landscape} +% -------------------------------------------------------------------------------- + + + + + + + + +% \clearpage +% +% \section{6x6 matrices and element matrices} +% \weird{TODO} +% % See DeFriasLopez p 15 +% \begin{align} +% k_e = \int_{0}^L \m{B_k}^T \m{C} \m{B_k} dx \\ +% m_e = \int_{0}^L \m{B_m}^T \m{\rho} \m{B_m} dx \\ +% \end{align} +% where $\m{B_k}$ and $\m{B_m}$ are usually taken as the Hermit or cubic polynomial matrices. +% +% +% + + + +\appendix + + + + +\clearpage +% --------------------------------------------------------------------------------} +% --- +% --------------------------------------------------------------------------------{ +\section{Typical coordinate systems for different aero-elastic codes} +The OpenFAST coordinate system together with other aero-elastic codes coordinate systems are shown in \autoref{fig:AeroElastCodesCoordConvention}. The OpenFAST coordinate system follows the IEC wind turbine convention. Angles are negative about $z$. +% -------------------------------------------------------------------------------- +\svgtex{AeroElastCodesCoordConvention}{Coordinate systems for three aeroelastic codes: OpenFAST, HAWC2 and Flex. The airfoil cross section is drawn for a typical bending and sweep of an upwind turbine.}{1.3}{0.75} +% -------------------------------------------------------------------------------- +\clearpage + + + + + + +% +% +% \section{3D Beam representation - Timoshenko beam and 3D frames} +% +% +% +% +% +% +% % --------------------------------------------------------------------------------} +% % --- Frame +% % --------------------------------------------------------------------------------{ +% \subsection{3D frame element} +% The 3D frame element stiffness matrix for an element directed along $x$ is directly obtained from the more general Timoshenko element with zero shear deformation parameters ($\Phi_y=\Phi_z=0$) and a shear center at zero ($\ysh=\zsh=0$) in \autoref{eq:KTimoshenkoOffsets}. +% If the frame is directed along $z$, the stiffness matrix from \autoref{eq:KTimoshenkoOffsetsAlongZ} can similarly be used. +% +% % % --- Stiffness matrix +% % a = EA / L ; % a1 +% % b = 12 * EIz / L^3 ; % b1 +% % c = 6 * EIz / L^2 ; % b2 +% % d = 12 * EIy / L^3 ; % c1 +% % e = 6 * EIy / L^2 ; % c2 +% % f = G*Kv / L ; % a2 = G*J/L +% % g = 2 * EIy / L ; % c3 +% % h = 2 * EIz / L ; % b3 +% % +% % % NOTE: OK with +% % % - Serano beam3e function +% % % - Matlab FEM Book +% % % - frame3d_6j +% % % - Panzer-Hubele +% % % NOTE: compatible with by Timoshenko with shear offsets +% % % ux1 uy1 uz1 tx1 ty1 tz1 ux2 uy2 yz2 tx2 ty2 tz2 +% % ke = [ a 0 0 0 0 0 -a 0 0 0 0 0 ;% ux1 +% % 0 b 0 0 0 c 0 -b 0 0 0 c ;% uy1 +% % 0 0 d 0 -e 0 0 0 -d 0 -e 0 ;% uz1 +% % 0 0 0 f 0 0 0 0 0 -f 0 0 ;% tx1 +% % 0 0 -e 0 2*g 0 0 0 e 0 g 0 ;% ty1 +% % 0 c 0 0 0 2*h 0 -c 0 0 0 h ;% tz1 +% % +% % -a 0 0 0 0 0 a 0 0 0 0 0 ;% ux2 +% % 0 -b 0 0 0 -c 0 b 0 0 0 -c ;% uy2 +% % 0 0 -d 0 e 0 0 0 d 0 e 0 ;% yz2 +% % 0 0 0 -f 0 0 0 0 0 f 0 0 ;% tx2 +% % 0 0 -e 0 g 0 0 0 e 0 2*g 0 ;% ty2 +% % 0 c 0 0 0 h 0 -c 0 0 0 2*h];% tz2 +% +% % % SOURCE: What-When-How-FEM-For-Frames. NOTE: the sign was reveresed in front of 35*r2!!!, to be consistent with Panzer-Hubele with Iy and Iz=0 +% % a = L/2 ; a2 = a^2 ; r2 = EIx/E/A; +% % me = Mass/2/105 * [ +% % %ux1 uy1 uz1 tx1 ty1 tz1 ux2 uy2 yz2 tx2 ty2 tz2 +% % 70 0 0 0 0 0 35 0 0 0 0 0 ;% ux1 +% % 0 78 0 0 0 22*a 0 27 0 0 0 -13*a ;% uy1 +% % 0 0 78 0 -22*a 0 0 0 27 0 13*a 0 ;% uz1 +% % 0 0 0 70*r2 0 0 0 0 0 35*r2 0 0 ;% tx1 +% % 0 0 -22*a 0 8*a2 0 0 0 -13*a 0 -6*a2 0 ;% ty1 +% % 0 22*a 0 0 0 8*a2 0 13*a 0 0 0 -6*a2 ;% tz1 +% % % +% % 35 0 0 0 0 0 70 0 0 0 0 0 ;% ux2 +% % 0 27 0 0 0 13*a 0 78 0 0 0 -22*a ;% uy2 +% % 0 0 27 0 -13*a 0 0 0 78 0 22*a 0 ;% yz2 +% % 0 0 0 35*r2 0 0 0 0 0 70*r2 0 0 ;% tx2 +% % 0 0 13*a 0 -6*a2 0 0 0 22*a 0 8*a2 0 ;% ty2 +% % 0 -13*a 0 0 0 -6*a2 0 -22*a 0 0 0 8*a2 ];% tz2 +% +% +% +% +% +% +% +% +% % --------------------------------------------------------------------------------} +% % --- Timoshenko along x +% % --------------------------------------------------------------------------------{ +% \subsection{Timoshenko beam with shear center offsets - Beam along x} +% \label{sec:TimoshenkoBeamAlongX} +% +% The formulation for a Timoshenko beam is found e.g. in the book of Przemieniecki~\cite[p.79]{przemieniecki:book} (see also \cite{panzer:2009}) for $\ysh=\zsh=0$. +% +% % SEE ALSO: - Generating a Parametric Finite Element Model of a 3D Cantilever Timoshenko Beam Using Matlab +% % NOTE: compatible with above +% The general formulation with shear offsets is given below. +% The shear-deformation parameters $\Phi_y$ and $\Phi_z$ are defined as: +% \begin{align} +% \Phi_y +% &= \frac{12 EI_z}{k_y A G L^2} +% = \frac{12 EI_z}{{A_{s_y}} G L^2} +% = 24 ( 1+\nu) \frac{A}{A_{s_y}}\left(\frac{r_z}{L}\right)^2 \nonumber\\ +% \Phi_z +% &= \frac{12 EI_y}{k_z A G L^2} +% = \frac{12 EI_y}{{A_{s_z}} G L^2} +% = 24 ( 1+\nu) \frac{A}{A_{s_z}}\left(\frac{r_y}{L}\right)^2 +% \label{eq:ShearDeformationParams} +% \end{align} +% where the last equality assumes an isotropic linear elastic material such that $G=E/(2\nu +1)$ with $\nu$ the Poisson's ratio, +% where $r_y$ and $r_z$ are the radii of gyration, +% $A_{s_y}$ and $A_{s_y}$ are the effective area of shear (for a rectangular cross section they are both equal to $5/6 th$) +% $k_y$ and $k_z$ are the dimensionless shear factors for the force in the principal bending axis direction $y$ and $z$ respectively. The following notations are sometimes adopted by some authors: $\eta_y=\Phi_z/12$, $\eta_z=\Phi_y/12$, $\rho_y=1/(1+\Phi_z)$, $\rho_z=1/(1+\Phi_y)$ (note the inversion between $y$ and $z$ in these definitions). +% % +% The shear-deformation parameters $\Phi_y$ and $\Phi_z$ are $0$ for a Euler-Bernoulli beam. +% % +% The stiffness matrix for a Timoshenko beam along the $x$ direction, with shear center offsets $\ysh$, $\zsh$ is given in \autoref{eq:KTimoshenkoOffsets}, where the following notation was introduced: +% \begin{align} +% K_\text{sh} = \frac{12E}{L^3}\left[\frac{I_y \ysh^2}{1+\Phi_z} + \frac{I_z \zsh^2}{1+\Phi_y} \right] \label{eq:Ksh} +% \end{align} +% and the notation $k_{ij}$ is used to denote the element of row $i$ and column $j$ of the matrix. +% +% \renewcommand*{\arraystretch}{1.9} +% \begin{align} +% \setcounter{MaxMatrixCols}{20} +% % \m{K}&=\\ +% &\text{Stiffness matrix for a Timoshenko beam element along $x$ with shear center offsets}\label{eq:KTimoshenkoOffsets}\\ +% &\!\! \begin{bmatrix} +% \frac{EA}{L} & & & & & & & & & & & \\ +% 0 & \frac{12 E I_z}{L^3(1+\Phi_y)} & & & & & & & & & & \\ +% 0 & 0 & \frac{12 E I_y}{L^3(1+\Phi_z)} & & & \text{sym.} & & & & & & \\ +% 0 & -k_{22}\,\zsh & k_{33}\,\ysh & \frac{GI_x}{L} + K_\text{sh} & & & & & & & & \\ +% 0 & 0 & -\frac{6EI_y}{L^2(1+\Phi_y)} & k_{53}\,\ysh & \frac{EI_y(4+\Phi_z)}{L(1+\Phi_z)} & & & & & & & \\ +% 0 & \frac{6 EI_z}{L^2(1+\Phi_y)} & 0 & -k_{62}\,\zsh & 0 & \frac{EI_z(4+\Phi_y)}{L(1+\Phi_y)} & & & & & & \\ +% % +% -k_{11} & 0 & 0 & 0 & 0 & 0 & k_{11} & & & & & \\ +% 0 & -k_{22} & 0 & k_{22}\,\zsh & 0 & -k_{62} & 0 & k_{22} & & & & \\ +% 0 & 0 & -k_{33} & -k_{33}\,\ysh & -k_{53} & 0 & 0 & 0 & k_{33} & & & \\ +% 0 & k_{22}\, \zsh & -k_{33}\,\ysh & -k_{44} & -k_{53}\,\ysh & k_{62}\,\zsh & 0 & k_{42} & k_{43} & k_{44} & & \\ +% 0 & 0 & k_{53} & k_{53}\,\ysh & \frac{EI_y(2-\Phi_z)}{L(1+\Phi_z)} & 0 & 0 & 0 & -k_{53} & -k_{54} & k_{55} & \\ +% 0 & k_{62} & 0 & -k_{62}\,\zsh & 0 & \frac{EI_z(2-\Phi_y)}{L(1+\Phi_y)} & 0 & -k_{62} & 0 & -k_{64} & 0 & k_{66} \\ +% \end{bmatrix} +% \nonumber\\ +% &\text{(to be used with the definitions from \autoref{eq:ShearDeformationParams} and \autoref{eq:Ksh})} \nonumber +% \end{align} +% \renewcommand*{\arraystretch}{1} +% +% +% +% +% % --------------------------------------------------------------------------------} +% % --- +% % --------------------------------------------------------------------------------{ +% \subsection{Timoshenko beam with shear center offsets - Beam along z} +% \label{sec:TimoshenkoBeamAlongZ} +% The equations presented in this section are similar to the ones presented in \autoref{sec:TimoshenkoBeamAlongX} but the coordinate system is rotated leading to different definitions. The notations are yet kept the same so the reader should not mix equations from the two sections. +% The coordinates $(x,y,z)$ of \autoref{sec:TimoshenkoBeamAlongZ} are now permuted to $(y,z,x)$. +% The $\Phi_x$, $\Phi_y$ and $K_{sh}$ are then defined as +% \begin{align} +% \Phi_x +% &= \frac{12 EI_y}{k_x A G L^2} +% = \frac{12 EI_y}{{A_{s_x}} G L^2} +% = 24 ( 1+\nu) \frac{A}{A_{s_x}}\left(\frac{r_y}{L}\right)^2 \nonumber\\ +% \Phi_y +% &= \frac{12 EI_x}{k_y A G L^2} +% = \frac{12 EI_x}{{A_{s_y}} G L^2} +% = 24 ( 1+\nu) \frac{A}{A_{s_y}}\left(\frac{r_x}{L}\right)^2 +% \label{eq:ShearDeformationParamsAlongZ} \\ +% K_\text{sh} &= \frac{12E}{L^3}\left[\frac{I_x \xsh^2}{1+\Phi_y} + \frac{I_y \ysh^2}{1+\Phi_x} \right] \label{eq:KshAlongZ} +% \end{align} +% % with the following notation introduced by some authors: $\eta_x=\Phi_y/12$, $\eta_y=\Phi_x/12$, $\rho_x=1/(1+\Phi_y)$, $\rho_y=1/(1+\Phi_x)$ (note the inversion between $x$ and $y$ in these definitions). +% % +% The stiffness matrix for a Timoshenko beam element directed along the $z$ direction, with shear center offsets $\xsh$, $\ysh$ is given in \autoref{eq:KTimoshenkoOffsetsAlongZ}. +% % , where the following notation was introduced: +% % \begin{align} +% % \end{align} +% % and the notation $k_{ij}$ is used to denote the element of row $i$ and column $j$ of the matrix. +% +% \renewcommand*{\arraystretch}{1.9} +% \begin{align} +% \setcounter{MaxMatrixCols}{20} +% % \m{K}&=\\ +% &\text{Stiffness matrix for a Timoshenko beam element along $z$ with shear center offsets}\label{eq:KTimoshenkoOffsetsAlongZ}\\ +% &\!\! \begin{bmatrix} +% \frac{12 E I_y}{L^3(1+\Phi_x)} & & & & & & & & & & & \\ +% 0 & \frac{12 E I_x}{L^3(1+\Phi_y)} & & & & \text{sym.} & & & & & & \\ +% 0 & 0 & \frac{EA}{L} & & & & & & & & & \\ +% 0 & -\frac{6EI_x}{L^2(1+\Phi_y)} & 0 & \frac{EI_x(4+\Phi_y)}{L(1+\Phi_y)} & & & & & & & & \\ +% \frac{6 EI_y}{L^2(1+\Phi_x)} & 0 & 0 & 0 & \frac{EI_y(4+\Phi_z)}{L(1+\Phi_x)} & & & & & & & \\ +% -k_{11}\,\ysh & k_{22}\,\xsh & 0 & k_{42}\,\xsh & -k_{51}\,\ysh & \frac{GI_z}{L} + K_\text{sh} & & & & & & \\ +% -k_{11} & 0 & 0 & 0 & -k_{51} & k_{11}\,\ysh & k_{11} & & & & & \\ +% 0 & -k_{22} & 0 & -k_{42} & 0 & -k_{22}\,\xsh & 0 & k_{22} & & & & \\ +% 0 & 0 & -k_{33} & 0 & 0 & 0 & 0 & 0 & k_{23} & & & \\ +% 0 & k_{42} & 0 & \frac{EI_x(2-\Phi_y)}{L(1+\Phi_y)} & 0 & k_{42}\,\xsh & 0 & -k_{42} & 0 & k_{44} & & \\ +% k_{51} & 0 & 0 & 0 & \frac{EI_y(2-\Phi_x)}{L(1+\Phi_x)} & -k_{51}\,\ysh & -k_{51} & 0 & 0 & 0 & k_{55} & \\ +% k_{11}\, \ysh & -k_{22}\,\xsh & 0 & -k_{42}\,\xsh & k_{51}\,\ysh & -k_{66} & k_{61} & k_{62} & 0 & -k_{64} & -k_{65} & k_{66} \\ +% \end{bmatrix} +% \nonumber +% \\ +% &\text{(to be used with the definitions from \autoref{eq:ShearDeformationParamsAlongZ} and \autoref{eq:KshAlongZ})} \nonumber +% \end{align} +% \renewcommand*{\arraystretch}{1} +% +% +% +% \begin{lstlisting} +% real*8 :: z=0.0d0, & ! curved distance +% m=0.0d0, & ! mass distribution +% x_cg=0.0d0, & ! Center of gravity related to centerline +% y_cg=0.0d0, & ! Center of gravity related to centerline +% ri_x=0.0d0, & ! Radius of gyration related to centeline +% ri_y=0.0d0, & ! Radius of gyration related to centeline +% x_sh=0.0d0, & ! Shear center related to centerline +% y_sh=0.0d0, & ! Shear center related to centerline +% E=0.0d0, & ! Modulus of elasticity +% G=0.0d0, & ! Shear modulus of elasticity +% I_x=0.0d0, & ! Areal moment of inertia related to 1st principal bending axes +% I_y=0.0d0, & ! Areal moment of inertia related to 2nd principal bending axes +% I_p=0.0d0, & ! Torsional stiffness constant +% k_x=0.0d0, & ! Shear parameter +% k_y=0.0d0, & ! Shear parameter +% A=0.0d0, & ! Cross sectional area +% theta_z=0.0d0,& ! Angle between 1st principal bending axe and aerodyn chord +% x_e=0.0d0, & ! Elastic axe center related to chord midpoint +% y_e=0.0d0, & ! Elastic axe center related to chord midpoint +% \end{lstlisting} +% +% +% \begin{align} +% \eta_x = \frac{E I_x}{k_y G A L^2} +% ,\qquad +% \eta_y = \frac{E I_y}{k_x G A L^2} \\ +% \rho_x = \frac{1}{1+12\eta_x} +% ,\qquad +% \rho_y = \frac{1}{1+12\eta_y}\\ +% K_{11} = +% \begin{pmatrix} +% \frac{12 E I_y \rho_y}{L^3} & 0 & 0 & 0 \\ +% \end{pmatrix} +% \end{align} +% % --- +% % Code taken from Timoshenko.f90, ELSTIF +% % --- +% \begin{lstlisting} +% ! Calculates the element stiffness matrix. * +% ETAX = EMOD*IX/(KY*G*A*L**2) +% ETAY = EMOD*IY/(KX*G*A*L**2) +% ROX = 1/(1+12*ETAX) +% ROY = 1/(1+12*ETAY) +% KK = 0.0D0 +% KK( 1, 1) = 12*E*IY*ROY/L**3 +% KK( 1, 5) = 6*E*IY*ROY/L**2 +% KK( 1, 6) = -KK(1,1)*YSH +% KK( 1, 7) = -KK(1,1) +% KK( 1,11) = KK(1,5) +% KK( 1,12) = -KK(1,6) +% KK( 2, 2) = 12*E*IX*ROX/L**3 +% KK( 2, 4) = -6*E*IX*ROX/L**2 +% KK( 2, 6) = KK(2,2)*XSH +% KK( 2, 8) = -KK(2,2) +% KK( 2,10) = KK(2,4) +% KK( 2,12) = -KK(2,6) +% KK( 3, 3) = E*A/L +% KK( 3, 9) = -KK(3,3) +% KK( 4, 4) = 4*E*IX*(1+3*ETAX)*ROX/L +% KK( 4, 6) = KK(2,4)*XSH +% KK( 4, 8) = -KK(2,4) +% KK( 4,10) = 2*E*IX*(1-6*ETAX)*ROX/L +% KK( 4,12) = -KK(4,6) +% KK( 5, 5) = 4*E*IY*(1+3*ETAY)*ROY/L +% KK( 5, 6) = -KK(1,5)*YSH +% KK( 5, 7) = -KK(1,5) +% KK( 5,11) = 2*E*IY*(1-6*ETAY)*ROY/L +% KK( 5,12) = -KK(5,6) +% KK( 6, 6) = G*IZ/L +12*E*(IX*XSH**2*ROX+IY*YSH**2*ROY)/L**3 +% KK( 6, 7) = KK(1,12) +% KK( 6, 8) = KK(2,12) +% KK( 6,10) = -KK(4,12) +% KK( 6,11) = -KK(5,12) +% KK( 6,12) = -KK(6,6) +% KK( 7, 7) = KK(1,1) +% KK( 7,11) = -KK(1,5) +% KK( 7,12) = KK(1,6) +% KK( 8, 8) = KK(2,2) +% KK( 8,10) = -KK(2,4) +% KK( 8,12) = KK(2,6) +% KK( 9, 9) = KK(3,3) +% KK(10,10) = KK(4,4) +% KK(10,12) = -KK(4,6) +% KK(11,11) = KK(5,5) +% KK(11,12) = -KK(5,6) +% KK(12,12) = KK(6,6) +% \end{lstlisting} + + + +% --------------------------------------------------------------------------------} +% --- HAWC2 BeamDyn +% --------------------------------------------------------------------------------{ +% \subsection{HAWC2 - BeamDyn} + + + + +% --------------------------------------------------------------------------------} +% --- +% --------------------------------------------------------------------------------{ +% \section{} + + +% \begin{itemize}\tightlist +% \item +% \end{itemize} +% ----------------------------------- TABLE -------------------------------------- +% \begin{landscape} +% \begin{table}[!htb]\centering +% \caption{} +% \label{tab:Symbols} +% \begin{tabular}{cc} +% \textbf{Symbol} & \textbf{Value} \\ +% x & 2\\ +% \hline +% \end{tabular} +% \end{table} +% \end{landscape} +% -------------------------------------------------------------------------------- +% ---------------------------------- FIGURE -------------------------------------- +% From script: Main*, from folder: , 30-Nov-2016 +% \noindent\begin{figure}[!htbp]\centering% +% \includegraphics[width=0.60\textwidth]{FigureExample} +% \caption{Figure caption} +% \label{fig:Contour}% +% \end{figure} +% -------------------------------------------------------------------------------- +% ---------------------------- SKETCH -------------------------------------------- +% \svgtex{FASTAirfoilSystem}{Sketch title}{0.6}{0.90} +% -------------------------------------------------------------------------------- +% \python +% \begin{lstlisting} +% \end{lstlisting} + + + + +% --------------------------------------------------------------------------------} +% --- BIBLIO +% --------------------------------------------------------------------------------{ +\bibliographystyle{unsrt} +\bibliography{Bibliography} + +\end{document} diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib new file mode 100644 index 0000000000..f3df188856 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib @@ -0,0 +1,15788 @@ +% -------------------------------------------------------------------------------- +% --- My papers +% --------------------------------------------------------------------------------{ +@book{branlard:2009, + author = {E. Branlard}, + title = {On the statistics of gusts and their propagation through a wind farm}, + year = {2009}, + month = {February}, + publisher= {ECN - Wind-Memo-09-005} +} +@book{branlard:arctic, + author = {E. Branlard}, + title = {Wind power in arctic conditions: The experience of Greenland}, + year = {2010}, + month = {December}, + publisher= {Ris{\o}-DTU - Arctic Technologies} +} + +@TECHREPORT{branlard:2009fermi, + author = {E. Branlard}, + title = {On the implementation of a 3D space charge algorithm to understand and further study the physics of linear accelerators}, + institution = {Fermilab-Supaero technical report}, + year = {2009}, + month = {August} +} + +@ARTICLE{branlard:diffcalculus, + author = {E. Branlard}, + title = {Useful relations of differential calculus}, + journal = {http://emmanuel.branlard.free.fr}, + year = {2012} +} + +@ARTICLE{branlard:biotsavart, + author = {E. Branlard}, + title = {Biot-savart law}, + journal = {Online}, + year = {2012}, + otherinfo = {} +} + +@TECHREPORT{branlard:spectrum, + author={E. Branlard}, + title={Generation of time series from a spectrum: Generation of Wind times series from the Kaimal spectrum. Generation of wave times series from the JONSWAP spectrum}, + month={February}, + institution={DTU Wind energy, Ris{\o} DTU National Laboratory for Sustainable Energy}, + year=2010, +} + +@mastersthesis{branlard:2011tiploss, + author = {E. Branlard}, + title = {Wind turbine tip-loss corrections: Review, implementation and investigation of new models}, + year = {2011}, + month = {September}, + school={Ris{\o}-DTU, Siemens Energy Inc. (available at DTU's library)}, +} + +@INPROCEEDINGS{branlard:2012ewea, + title = "An improved tip-loss correction based on vortex code results", + publisher = "EWEA - The European Wind Energy Association", + author = "E. Branlard and K. Dixon and M. Gaunaa", + year = "2012", + booktitle = "Proceedings", +} + +@article{branlard:2012torque, + author = {E. Branlard and M. Gaunaa}, + title = {Development of new tip-loss corrections based on vortex theory and vortex methods}, + publisher = "Institute of Physics Publishing", + year = "2014", + doi = "10.1088/1742-6596/555/1/012012", + volume = "555", + pages ={1-8}, + journal = "Journal of Physics: Conference Series (Online)", + issn = "1742-6596" +} + +@article{branlard:2013iet, + title = "Vortex methods to answer the need for improved understanding and modelling of tip-loss factors", + publisher = "The/Institution of Engineering and Technology", + author = "E. Branlard and K. Dixon and M. Gaunaa", + year = "2013", + volume = "7", + number = "4", + pages = "311--320", + journal = "{IET} Renewable Power Generation", + issn = "1752-1416", +} + +@article{branlard:2013amt, + title = "Retrieving wind statistics from average spectrum of continuous-wave lidar", + publisher = "Copernicus GmbH", + author = "Branlard, {Emmanuel} and Pedersen, {Anders Tegtmeier} and Jakob Mann and Nikolas Angelou and Andreas Fischer and Torben Mikkelsen and M. Harris and C. Slinger and Montes, {B. F.}", + year = "2013", + volume = "6", + number = "1", + pages = "1943--1977", + journal = "Atmospheric Measurement Techniques", + issn = "1867-8610", +} + +@INPROCEEDINGS{branlard:2014ewea, + title = "Validation of vortex code viscous models using lidar wake measurements and {CFD}", + publisher = "EWEA - The European Wind Energy Association", + author = "E. Branlard and E. Machefaux and M. Gaunaa and H.H. {Brandenborg S{\o}rensen} and N. Troldborg", + year = "2014", + booktitle = "Proceedings", +} + +@article{branlard:2014yawtorque, + title = "Investigation of a new model accounting for rotors of finite tip-speed ratio in yaw or tilt", + publisher = "Institute of Physics Publishing", + author = "E. Branlard and M. Gaunaa and E. Machefaux", + year = "2014", + doi = "10.1088/1742-6596/524/1/012124", + pages = {1-11}, + volume = "524", + number = "1", + journal = "Journal of Physics: Conference Series (Online)", + issn = "1742-6596", +} + +@article{branlard:2014right, + title = {Cylindrical vortex wake model: right cylinder}, + author = {E. Branlard and M. Gaunaa}, + journal = {Wind Energy}, + pages = {1-15 (Online)}, + year = {2014}, + volume = {524}, + number = {1}, + issn = {10954244, 10991824}, + doi = {10.1002/we.1800} +} + +@article{branlard:2015skew, + title = {Cylindrical vortex wake model: skewed cylinder, application to yawed or tilted rotors}, + author = {E. Branlard and M. Gaunaa}, + journal = {Wind Energy}, + year = "2015", + issn = {1099-1824}, + doi = {10.1002/we.1838}, + pages = {(Online)} +} + +@article{branlard:2015wakerot, + title = {Superposition of vortex cylinders for steady and unsteady simulation of rotors of finite tip-speed ratio}, + author = {E. Branlard and M. Gaunaa}, + journal = {Wind Energy}, + year = "2015", + issn = {1099-1824}, + url = {http://dx.doi.org/10.1002/we.1899}, + doi = {10.1002/we.1899} +} + +@misc{branlard:2015turb, + title = {Impact of a wind turbine on turbulence: un-freezing the turbulence by means of a simple vortex particle approach}, + author = {E. Branlard and M. Gaunaa}, + journal = {Journal of Wind Engineering and Industrial Aerodynamics}, + year = "2016", + volume={151}, + pages={37--7} +} + + +@article{branlard:2015elast, + title = {Aeroelastic large eddy simulations using vortex methods: unfrozen turbulent and sheared inflow}, + author = {E. Branlard and G. Papadakis and M. Gaunaa and G. Winckelmans and T. J. Larsen}, + journal = "Journal of Physics: Conference Series (Online)", + year = "2015", + doi = "10.1088/1742-6596/625/1/012019", + volume = "625", + issn = "1742-6596", +} + +@INPROCEEDINGS{branlard:2015induction, + title = "Using a cylindrical vortex model to assess the induction zone infront of aligned and yawed rotors", + author = "E. Branlard and A. {Meyer Forsting}", + year = "2015", + booktitle = "Proceedings of EWEA Offshore 2015 Conference" +} + +@INPROCEEDINGS{branlard:2015ad, + title = "A vortex based BEM-like algorithm accounting for wake rotation", + author = "E. Branlard and N. Troldborg and M. Gaunaa", + year = "2015", + booktitle = "Proceedings of EWEA Offshore 2015 Conference" +} + + + +@misc{gaunaa:2015, + title = {Modelling the influence of wind shear using a simple vortex rotor model}, + author = {M. Gaunaa and N. Troldborg and E. Branlard}, + journal = {Wind Energy}, + year={2015}, + note={(To appear in \textit{Wind Energy})} +} + +@misc{branlard:vortexbookOnline, + title = {{Vortex theory and vortex methods for wind energy. Annex to PhD thesis}}, + author = {E. Branlard}, + year={2015}, + note={(Avaible upon request)}, + howpublished={\url{https://github.com/elmanuelito/vortex-theory-and-methods-for-wind-energy}} +} + +@PHDthesis{branlard:2015phdthesis, + title = {Analysis of wind turbine aerodynamics and aeroelasticity using vortex-based methods}, + author = {E. Branlard}, + year={2015}, + institution ={Technical University of Denmark (DTU), Wind Energy Department}, + school ={Technical University of Denmark (DTU), Wind Energy Department} +} + +@book{branlard:book, + author = {E. Branlard}, + title = {Wind Turbine Aerodynamics and Vorticity-Based Methods}, + year = {2017}, + publisher= {Springer} +} + + +% ------------------------------------------------------------------------------} +% --- My Online ressources +% --------------------------------------------------------------------------------{ +@misc{YAMSgithub, + author={E. Branlard}, + title={YAMS GitHub repository \url{http://github.com/ebranlard/YAMS/}}, +} + + +% --------------------------------------------------------------------------------} +% --- AOA ANGLE OF ATTACK stuff +% --------------------------------------------------------------------------------{ +@CONFERENCE{guntur:2012, + author = {S. Guntur and N. N. S{\o}rensen}, + title = {An evaluation of several methods of determining the local angle of attack on wind turbine blades}, + booktitle = {Science of Making torque from the Wind, Oldenburg}, + pages={1-6}, + year = {2012}, +} +@CONFERENCE{troldborg:2013ewea, + author = {Niels Troldborg and Christian Bak and Helge A Madsen and Srinivas Guntur and Niels S{\o}rensen and Frederik Zahle}, + title = {EXPERIMENTAL AND NUMERICAL INVESTIGATION OF {3D} AIRFOIL CHARACTERISTICS ON {MW} WIND TURBINE}, + booktitle = {European Wind Energy Conference, Vienna}, + year = {2013}, +} + +@INPROCEEDINGS{bak:2011ewea, + author = {C. Bak and N. Troldborg and H. Madsen}, + title = {DAN-AERO MW: Measured airoil characterisics for a {MW} rotor in atmospheric conditions}, + booktitle = {Europen Wind Energy Conference}, + year = {2011}, +} + +@inbook{shen:2006, +title = "Determination of Angle of Attack (AOA) for Rotating Blades", +publisher = "Springer-Verlag", +author = "Shen, {W. Z.} and Hansen, {M. O. L.} and S{\o}rensen, {J. N.}", +year = "2006", +isbn = "978-3-540-33865-9", +pages = "205-209", +booktitle = "Wind Energy", +} + +@techreport{tani:1934, + author = {I. Tani}, + title = {A simple method of calculating the induced velocity of a monoplane wing - Rep. No. 111 (vol. 9,3)}, + institution = {Aero. Res. Inst., Tokyo Imperial University}, + year = {1934}, + otherinfo = {} +} + +@INPROCEEDINGS{mukherjee:2003, + author = {R. Mukherjee and A. Gopalarathnam}, + title = {An iterative decambering approach for post-stall prediction of wing characteristics using section data}, + year = {2003}, + booktitle = {AIAA 2003-1097}, + otherinfo = {} +} + +@article{nsorensen:2000, +title = "Evaluation of 3D effects from 3D CFD computations", +author = "S{\o}rensen, {Niels N.}", +year = "2000", +journal = "{IEA} Joint Action Committee on Aerodynamics {Annex IV} Aero Experts meeting, Boulder, CO (US), 4-5 Dec", +} + + + +@article{taylor:1926, + author={G. I. Taylor}, + title={Note on the connection between the lift on an Aerofoil in a wind and the circulation round it}, + year={1926}, + journal={Phil. Trans. R. Soc. Lond. A.}, + number={225}, + pages={238-245}, + doi={10.1098/rsta.1926.0005} +} +@article{bryant:1926, + author={L. W. Bryant, D. H. Williams }, + title={An Investigation of the Flow of Air around an Aerofoil of Infinite Span}, + journal={Phil. Trans. R. Soc. Lond. A.}, + year={1926}, + number={225}, + pages={199-237}, + doi={10.1098/rsta.1926.0005} +} + + +% --------------------------------------------------------------------------------} +% --- MATHS - NUMERICAL METHODS +% --------------------------------------------------------------------------------{ +@BOOK{wastonbessel, + author = {G.N. Watson}, + title = {A treatise on the theory of Bessel functions}, + publisher = {Cambridge at the University Press}, + year = {1922} +} + +@MISC{dlmf, + author = {NIST}, + title={Digital Library of Mathematical Functions from http://dlmf.nist.gov/ - Release 2010-05-07}, + publisher={National Institute of Standards and Technology} +} +@BOOK{nist, + title={NIST Handbook of Mathematical functions}, + author = {F.W.J. Olver and D.W. Lozier and R.F. Boisvert and C.W. Clark}, + publisher = {Cambrideg University Press}, + year = {2010}, +} +@BOOK{abramovitz, + author = {M. Abramowitz and I.A. Stegun}, + title = { Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables}, + publisher = {Dover, New York}, + year = {1964} +} +@BOOK{peirce:1899, + title = {A Short table of integrals}, + author = {B.O. Peirce}, + publisher = {Ginn \& Company, Boston, U.S.A.}, + year = {1899}, + edition = {{R}evised} +} + +@BOOK{calcultensoriel, + author = {P. Pern\`es}, + title = {Introduction \`a la m\'ecanique des milieux d\'eformables - El\'ements de calcul tensoriel}, + publisher = {Cemagref Editions, Engees}, + year = {2003} +} +@BOOK{king:2009, + author = {F.W. Kink}, + title = {Hilbert Transforms}, + publisher = {Cambridge University Press}, + year = {2009}, + otherinfo = {} +} + +@BOOK{euler:maths, + author = {L. Euler}, + title = {Institutionum Calculi Intergralis - Volume 1-3}, + publisher = {Impenfis Academiae Imperialis Scientiarum}, + year = {1792} +} + +@ARTICLE{runge:1895, + author = {C. Runge}, + title = {Ueber die numerische Aufl\"osung von Differentialgleichungen}, + journal = {Math. Ann.}, + year = {1895}, + volume = {46}, + pages = {167-178} +} + +@ARTICLE{kutta:1901, + author = {W. Kutta}, + title = {Beitrag zur n{\"a}herungsweisen Integration totaler Differentialgleichungen}, + journal = {Zeitschr. f{\"u}r Math. u. Phys.}, + year = {1901}, + volume = {46}, + pages = {453} +} + +@BOOK{adamsbashforth, + author = {F. Bashforth and J.C. Adams}, + title = {An Attempt to Test the Theories of Capillary Action by Comparing the Theoretical and Measured Forms of Drops of Fluid, with an Explanation of the Method of Integration Employed in Constructing the Tables which Give the Theoretical Forms of Such Drops}, + publisher = {Cambridge Univestiy Press}, + year = {1883} +} + + + +@BOOK{butcher:ode, + author = {J.C. Butcher}, + title = {Numerical Methods for Ordinary Differential Equations, Second Edition}, + publisher = {Jogn Wiley \& Sons}, + year = {2008} +} +@BOOK{hairer:ode, + author = {E. Hairer and S.P. N{\o}rsett and G. Wanner}, + title = {Solving Ordinary Differential Equations I, Corrected 2nd Edition}, + publisher = {Springer}, + year = {2008} +} + +@book{strang:bookCSE, + title = {Computational science and engineering}, + publisher = {Wellesley-Cambridge Press}, + author = {Strang, Gilbert.}, + pages = {716 s}, + year = {2007}, + isbn = {9780961408817} +} + +@book{riley:2005:book, + title={Mathematical Methods for Physics and Engineering: A Comprehensive Guide}, + author={Riley, K.F. and Hobson, P. and Bence, S.J.}, + isbn={9781139450997}, + year={2006}, + publisher={Cambridge University Press} +} +@MISC{wikidel, + author={Wikipedia}, + title={Del in cylindrical and polar coordinates}, + year={2015}, + howpublished = {\url{http://en.wikipedia.org/wiki/Del_in_cylindrical_and_spherical_coordinates}}, +} + +@Article{carlson:1979, +author="B.C. Carlson", +title="Computing elliptic integrals by duplication", +journal="Numerische Mathematik", +year="1979", +volume="33", +number="1", +pages="1--16", +issn="0945-3245", +doi="10.1007/BF01396491", +url="http://dx.doi.org/10.1007/BF01396491" +} + +@book{chapra2010, + author = "Chapra, S.C. and Canale, R.P. ", + title = "Numerical Methods for Engineers", + year = "2010", + publisher = "McGraw-Hill Science/Engineering/Mat" +} + +% --------------------------------------------------------------------------------} +% --- MECANICS - DYNAMICS - AEROELASTICITY - BOOKS +% --------------------------------------------------------------------------------{ + + +@book{nikravesh:book, + title={Computer-aided analysis of mechanical systems}, + author={Nikravesh, P.E.}, + isbn={9780131642201}, + year={1988}, + publisher={Prentice-Hall} +} + +@book{shabana:book, + title={Dynamics of Multibody Systems}, + author={Shabana, A.A.}, + isbn={9781107042650}, + series={Dynamics of Multibody Systems}, + year={2013}, + publisher={Cambridge University Press} +} + +@book{huston:book, + title={Multibody Dynamics}, + author={Huston, R.L.}, + year={1990}, + publisher={Butterworth-Heinemann}, + isbn = {0409900419, 9780409900415} +} + +@book{handbookrobotics, + title={Springer Handbook of Robotics}, + author={Siciliano, B. and Khatib, O.}, + isbn={9783319325521}, + series={Springer Handbooks}, + year={2016}, + publisher={Springer International Publishing} +} + +@book{amirouche:book, + title = {Fundamentals of multibody dynamics: Theory and applications}, + author = {Amirouche, Farid}, + language = {eng}, + publisher = {Birkhauser Boston}, + pages = {1-684}, + year = {2006}, + isbn = {0817642366, 9780817642365}, + abstract = {Because of its versatility in analyzing a broad range of applications, multibody dynamics has grown in the past two decades to be an important tool for designing, prototyping, and simulating complex articulated mechanical systems. This textbook-a result of the author's many years of research and teaching-brings together diverse concepts of dynamics, combining the efforts of many researchers in the field of mechanics. Bridging the gap between dynamics and engineering applications such as microrobotics, virtual reality simulation of interactive mechanical systems, nanomechanics, flexible biosystems, crash simulation, and biomechanics, the book puts into perspective the importance of modeling in the dynamic simulation and solution of problems in these fields. To help engineering students and practicing engineers understand the rigid-body dynamics concepts needed for the book, the author presents a compiled overview of particle dynamics and Newton's second law of motion in the first chapter. A particular strength of the work is its use of matrices to generate kinematic coefficients associated with the formulation of the governing equations of motion. Additional features of the book include: * numerous worked examples at the end of each section * introduction of boundary-element methods (BEM) in the description of flexible systems * up-to-date solution techniques for rigid and flexible multibody dynamics using finite- element methods (FEM) * inclusion of MATLAB-based simulations and graphical solutions * in-depth presentation of constrained systems * presentation of the general form of equations of motion ready for computer implementation * two unique chapters on stability and linearization of the equations of motion Junior/senior undergraduates and first-year graduate engineering students taking a course in dynamics, physics, control, robotics, or biomechanics will find this a useful book with a strong computer orientation towards the subject. The work may also be used as a slf-study resource or research reference for practitioners in the above-mentioned fields. © 2006 Birkhäuser Boston.}, + doi = {10.1007/b137682}, +} + + +@book{boresi:book, + title = {Elasticity in engineering mechanics}, + year = {2000}, + isbn = {0471316148}, + author = {Boresi, A.P. and Lynn, P.P.} +} + +@book{pian:book, + title={Statics of Deformable Solids}, + author={T. H.H. Pian and R. L. Bisplinghoff and J. W. Mar}, + isbn={10 0486789934}, + year = 1965, + publisher={Dover}} +} + +@book{bisplinghoff:bookprinciples, + title={Principles of Aeroelasticity}, + author={Bisplinghoff, R.L. and Ashley, H.}, + isbn={9780486495002}, + lccn={2002019479}, + series={Dover Books on Engineering Series}, + year={1962}, + publisher={Dover Publications} +} + + +@BOOK{bower:book, + author = {A. F. Bower}, + title = {Applied Mechanics of Solid}, + publisher = {CRC PRess,Freely available at http://solidmechanics.org/}, + year = {2009} +} + +@book{roarksformulas, + title={Roark's Formulas for Stress and Strain}, + author={Young, W.C. and Budynas, R.G.}, + isbn={9780071501811}, + series={McGraw Hill professional}, + year={2001}, + publisher={McGraw-Hill Education} +} + +@book{bielawa:2006:book, + title={Rotary wing structural dynamics and aeroelasticity}, + author={Bielawa, R.L.}, + isbn={9781563476983}, + lccn={20067635}, + series={AIAA education series}, + year={2006}, + publisher={American Institute of Aeronautics and Astronautics} +} +@book{bisplinghoff:1996:book, + title={Aeroelasticity}, + author={Bisplinghoff, R.L. and Ashley, H. and Halfman, R.L.}, + isbn={9780486691893}, + lccn={96005412}, + series={Dover Books on Aeronautical Engineering Series}, + year={1996}, + publisher={Dover Publications} +} +@book{bisplinghoff:2013:book, + title={Principles of Aeroelasticity}, + author={Bisplinghoff, R.L. and Ashley, H.}, + isbn={9780486783161}, + series={Dover Books on Engineering}, + year={2013}, + publisher={Dover Publications} +} + +@misc{dymore, + title={Dymore manual}, + author={Bauchau}, +} + +% ------------------------------------------------------------------------------} +% --- DYNAMICS - ARTICLES +% --------------------------------------------------------------------------------{ +@article{kane:1965, + title = {On the Derivation of Equations of Motion}, + language = {eng}, + journal = {Journal of the Society for Industrial and Applied Mathematics}, + volume = {13}, + number = {2}, + pages = {487-492}, + year = {1965}, + issn = {21683484, 03684245}, + doi = {10.1137/0113030}, + author = {Kane, T. R. and Wang, C. F.} +} + +@article{book1984, + author = {W. J. Book}, + title ={Recursive Lagrangian Dynamics of Flexible Manipulator Arms}, + journal = {The International Journal of Robotics Research}, + volume = {3}, + number = {3}, + pages = {87-101}, + year = {1984}, + doi = {10.1177/027836498400300305} +} + + +@Inbook{huston:1994, + author="Huston, R. L. and Wang, Y.", + editor="Seabra Pereira, Manuel F. O. and Ambr{\'o}sio, Jorge A. C.", + title="Flexibility Effects in Multibody Systems", + bookTitle="Computer-Aided Analysis of Rigid and Flexible Mechanical Systems", + year="1994", + publisher="Springer Netherlands", + address="Dordrecht", + pages="351--376", + ISBN={978-94-011-1166-9} +} +@article{kane:1987, + author = {KANE, T. R. and RYAN, R. and BANERJEE, A. K.}, + title = {Dynamics of a cantilever beam attached to a moving base}, + language = {eng}, + journal = {Journal of Guidance, Control, and Dynamics}, + volume = {10}, + number = {2}, + pages = {139-151}, + year = {1987}, + issn = {15333884, 07315090}, + doi = {10.2514/3.20195} +} +@article{shabana:1990, + title = {Dynamics of Flexible Bodies Using Generalized Newton-Euler Equations}, + language = {eng}, + journal = {Journal of Dynamic Systems, Measurement, and Control}, + volume = {112}, + number = {3}, + pages = {496}, + year = {1990}, + issn = {15289028, 00220434}, + doi = {10.1115/1.2896170}, + author = {Shabana, A. A.} +} + +@article{nikravesh:1990, +title = "Systematic reduction of multibody equations of motion to a minimal set", +journal = "International Journal of Non-Linear Mechanics", +volume = "25", +number = "2", +pages = "143 - 151", +year = "1990", +issn = "0020-7462", +doi = "https://doi.org/10.1016/0020-7462(90)90046-C", +url = "http://www.sciencedirect.com/science/article/pii/002074629090046C", +author = "Parviz E. Nikravesh" +} +@article{nikravesh:1993, + author = {Nikravesh PE, Gim G. }, + title = {Systematic Construction of the Equations of Motion for Multibody Systems Containing Closed Kinematic Loops}, + journal={ASME. J. Mech. Des.}, + year ={1993}, + volume ={115}, + number ={1}, + pages ={143-149}, + doi={10.1115/1.2919310} +} +% ------------------------------------------------------------------------------} +% --- GEOMETRICAL STIFFENING +% ------------------------------------------------------------------------------{ +@article{berzeri:2002, + title = {Study of the centrifugal stiffening effect using the finite element absolute nodal coordinate formulation}, + language = {eng}, + publisher = {SPRINGER}, + journal = {Multibody System Dynamics}, + volume = {7}, + number = {4}, + pages = {357-387}, + year = {2002}, + issn = {1573272x, 13845640}, + abstract = {The finite element absolute nodal coordinate formulation is used in this investigation to study the centrifugal stiffening effect on rotating two-dimensional beams. It is demonstrated that the geometric stiffening effect can be automatically accounted for in the above mentioned finite element formulation by using an expression for the elastic forces obtained with a general continuum mechanics approach. The Hill equation that governs the vibration of the rotating beam is obtained in terms of a set of generalized coordinates that describe the beam displacements and slopes. Under the assumption of small deformation, the Hill equation is linearized, and the complete solution is obtained and used to demonstrate analytically that such a solution does not exhibit instabilities as the angular velocity of the beam increases. The results obtained using this finite element procedure are compared with the results reported in the literature.}, + doi = {10.1023/A:1015567829908}, + author = {Berzeri, M and Shabana, AA} +} +@article{wallrapp:1991, + title = {REPRESENTATION OF GEOMETRIC STIFFENING IN MULTIBODY SYSTEM SIMULATION}, + language = {eng}, + publisher = {JOHN WILEY & SONS LTD}, + journal = {International Journal for Numerical Methods in Engineering}, + volume = {32}, + number = {8}, + pages = {1833-1850}, + year = {1991}, + issn = {10970207, 00295981}, + abstract = {Geometric, rotational or dynamic stiffening is a well and long known phenomenon in the analysis of flexible bodies. In multibody dynamics the effect has attracted attention only recently. The objective of this paper is to contribute to the understanding of the modelling of geometric stiffening in multibody system simulation. Today's methods for modelling the effect assume that the (applied) stresses in a flexible system body are zero in its reference configuration, in which it performs large overall motions. The corresponding inertial loads are shown to be balanced by constraint stresses. This can be seen easily when formulating the system equations of motion for non-zero reference stresses. As a result one obtains an efficient alternative to compute the geometric stiffening terms. The method increases the generality of flexible body models for multibody system simulation.}, + doi = {10.1002/nme.1620320818, 10.1002/(ISSN)1097-0207}, + author = {WALLRAPP, O and SCHWERTASSEK, R} +} + +% ------------------------------------------------------------------------------} +% --- Craig Bampton +% --------------------------------------------------------------------------------{ +@TECHREPORT{dnvgl:CB, + author = {{DNV GL}}, + title = {IMPLEMENTING AN INTERFACE BETWEEN BLADED AND SESAM - Verification report of Sesam's Bladed interface}, + institution = {Ris{\o}-DTU}, + year = {2017}, + number={2016-0866, Rev. 1} +} + author={R. Damiani, F. Wendt, W. Musial, Z. Finucane, L. Hulliger, S. Chilka, D. Dolan,}, +@TECHREPORT{damiani:guyan, + title = {Fully vs. Sequentially Coupled Loads Analysis of Offshore Wind Turbines}, + author={R. Damiani and F. Wendt and W. Musial and Z. Finucane and L. Hulliger and S. Chilka and D. Dolan and J. Cushing and D. {O'Connell} and S. Falk}, + institution={NREL}, + number={68368}, + year={2013} +} + + + + + +% --------------------------------------------------------------------------------} +% --- PHYSICS PURE +% --------------------------------------------------------------------------------{ + +@book{einstein:1956, +author = {Einstein, A.}, +title = {{Investigations on the theory of brownian movement}}, +publisher={Dover Publications, Inc}, +year={1956}, +isbn={486-60304-0} +} + +@book{crank:book, + title={The Mathematics of Diffusion}, + author={Crank, J.}, + isbn={9780198534112}, + lccn={75318921}, + series={Oxford science publications}, + year={1979}, + publisher={Clarendon Press} +} + + +@book{davidson:2004:book, + title={Turbulence: An Introduction for Scientists and Engineers}, + author={Davidson, P.A.}, + isbn={9780191589850}, + year={2004}, + publisher={OUP Oxford} +} + +% --------------------------------------------------------------------------------} +% --- ELECTROMAGNETISM +% --------------------------------------------------------------------------------{ +@TECHREPORT{pearson:lecturenotes, + author = {J. Pearson}, + title = {Electrodynamics}, + institution = {University of Manchester}, + year = {2008}, +} + +@TECHREPORT{kambe:fluidmaxwell, + author = {On Fluid Maxwell equations}, + title = {T. Kambe}, + institution = {University of Tokyo}, + year = {2010}, + otherinfo = {} +} +@MISC{mccabe:electrofluid, + author={G. McCabe}, + title = {Electromagnetism, fluid mechanics, and the mathematical universe}, + year={2015}, + note={\url{http://mccabism.blogspot.dk/2012/03/electromagnetism-fluid-mechanics-and.html}} +} + +@MISC{rousseaux:elctrofluid, + author={G. Rousseaux and A. Domps}, + title={Remarques supplémentaires sur l'approximation des régimes quasi-stationnaires en électromagnétisme}, + institution={Union des professeurs de physique et de chimie}, + volume={98}, + year={2004} +} + + + +% --------------------------------------------------------------------------------} +% --- FLUID MECHANICS - REFERENCE BOOKS +% --------------------------------------------------------------------------------{ +@ARTICLE{bonnetportance, + author = {A. Bonnet}, + title = {La Portance ou comment tuer un mythe}, + journal = {I.S.A.E. - SUPAERO}, + year = {2005}, + otherinfo = {}, + note={(in French)} +} +@BOOK{lamb:1916:book, + author = {H. Lamb}, + title = {Hydrodynamics}, + publisher = {Cambridge University Press, Fourth Edition}, + year = {1916}, +} + +@BOOK{lamb:1932:book, + author = {H. Lamb}, + title = {Hydrodynamics}, + publisher = {Cambridge University Press, Sixth Edition}, + year = {1932}, +} + +@BOOK{batchelor:book, + author = {G. K. Batchelor}, + title = {An introduction to fluid dynamics}, + publisher = {Cambridge University Press}, + year = {1967}, +} + + +@BOOK{twaites:1960:book, + author = {B. Twaites}, + title = {Incompressible Aerodynamics}, + publisher = {Oxford University Press}, + year = {1960}, + otherinfo = {} +} + +@BOOK{ashley:1965, + author = {H Ashley and M. Landahl}, + title = {Aerodynamics of Wings and Bodies}, + publisher = {Dover Publications, reprint 1985}, + year = {1965}, + otherinfo = {} +} + + +@book{tennekes:1972:book, + title={A First Course in Turbulence}, + author={Tennekes, H. and Lumley, J.L.}, + isbn={9780262200196}, + lccn={lc77165072}, + year={1972}, + publisher={Pe Men Book Company} +} + +@BOOK{vandyke:1975:book, + author = {M. Van Dyke}, + title = {Perturbation Methods in Fluid Mechanics}, + publisher = {Parabolic Press}, + year = {1975} +} +@BOOK{newman:1977:book, + author = {J.N. Newman}, + publisher = {M.I.T}, + title = {Marine hydrodynamics}, + year = {1977} +} + +@TECHREPORT{rieutord:1985, + author = {R. Rieutord}, + title = {Mecanique des fluides}, + institution = {INSA de Lyon}, + year = {1985}, + otherinfo = {} +} + +@book{bonnetluneau, +author = {A. Bonnet and J. Luneau}, +title = {Aerodynamique: Theorie de la dynamique des fluides}, +year = {1989}, +publisher= {Cepades Edition - SUPAERO}, +note={(in French)} +} + +@book{viscousfluidflow, +author = {F.M. White}, +title = {Viscous fluid flow - Third Edition}, +year = {1991}, +publisher= {Mc Graw Hill} +} +@BOOK{phillipps:2004, + author = {W.F. Phillipps}, + title = {Mechanics of Flight}, + publisher = {John Wiley and Sons}, + year = {2004} +} + +@book{acheson:1990:book, + title={Elementary Fluid Dynamics}, + author={Acheson, D.J.}, + isbn={9780198596790}, + lccn={89022947}, + series={Oxford Applied Mathematics and Computing Science Series}, + year={1990}, + publisher={Clarendon Press} +} +@BOOK{saffman:book, + author = {P.G. Saffman}, + title = {Vortex Dynamics}, + publisher = {Cambridge University Press}, + year = {1992}, +} + +@BOOK{chorin:1992:book, + author = {A.J. Chorin and J.E. Marsden}, + title = {A mathematical introduction to fluid mechanics}, + publisher = {Springer}, + year = {1992}, +} +@book{fay:1994:book, + title={Introduction to Fluid Mechanics}, + author={Fay, J.A.}, + isbn={9780262061650}, + lccn={lc93034567}, + year={1994}, + publisher={MIT Press} +} +@ARTICLE{drela:1998, + author = {M. Drela}, + title = {Assorted views on teaching of aerodynamics}, + journal = {AIAA Paper 98-2792}, + year = {1998} +} + +@TECHREPORT{kerwin:lecturenotes, + author = {J. Kerwin}, + title = {Lecture Notes Hydrofoil and propellers}, + institution = {M.I.T.}, + year = {2000} +} +@TECHREPORT{mcintyre:lecturenotes, + author = {M. E. McIntyre}, + title = {IB lecture notes on fluid dynamics}, + institution = {University of Cambridge}, + year = {2003}, + otherinfo = {\url{http://www.atm.damtp.cam.ac.uk/people/mem/FLUIDS-IB/}} +} +@TECHREPORT{skinner:lecturenotes, + author = {D. Skinner}, + title = {Mathematical Methods}, + institution = {University of Cambridge}, + year = {2014}, + otherinfo = {\url{http://www.atm.damtp.cam.ac.uk/user/dbs26/}} +} +@BOOK{anderson:2001:book, + author = {J.D. Anderson}, + title = {Fundamentals of aerodynamics - Third Edition}, + publisher = {Mc Graw Hill}, + year = {2001}, +} +@book{pozrikidis:2001:book, + title={Introduction to Theoretical and Computational Fluid Dynamics}, + author={Pozrikidis, C.}, + isbn={9780195093209}, + lccn={96026420}, + year={1997}, + publisher={OUP USA} +} +@BOOK{appliedaero, + author = {I. Kroo et al.}, + title = {Applied aerodynamics: a digital textbook}, + publisher = {Desktop Aeronautics}, + year = {1996-2007}, + otherinfo = {Available online at http://www.desktop.aero/appliedaero/} +} + +@BOOK{huerre:2006, + author = {P. Huerre}, + publisher = {Ecole Polytechnique - France}, + title = {M\'ecanique des Fluides - Tome 1}, + year = {2006}, + note={(in French)} +} +@book{pernes:book, + title={M{\'e}canique des milieux continus d{\'e}formables: application {\`a} la m{\'e}canique des liquides parfaits et des liquides newtoniens}, + author={Pern{\`e}s, P.}, + isbn={9782853626132}, + url={https://books.google.dk/books?id=PjyO9Je34LIC}, + year={2003}, + publisher={Cemagref} +} + + +@book{White:2006, +author = {F.M. White}, +title = {Viscous fluid flow, Third Edition}, +publisher = {McGraw Hill International Edition}, +year = 2006, +address = {New York}, +} + + +@BOOK{bertin:2009:book, + author = {J.J. Bertin and R.M. Cummings}, + publisher = {Pearson Prentice Hall}, + title = {Aerodynamics for engineers - 5th Edition}, + year = {2009} +} +@book{drela:2014:book, + title={Flight Vehicle Aerodynamics}, + author={Drela, M.}, + isbn={9780262319935}, + year={2014}, + publisher={MIT Press} +} + +@book{milnethomson:hydrodynamics, + title={Theoretical Hydrodynamics}, + author={Milne-Thomson, L.M.}, + isbn={9780486318691}, + series={Dover Books on Physics}, + year={1968}, + publisher={Dover Publications} +} + +@book{milnethomson:aerodynamics, + title={Theoretical Aerodynamics}, + author={Milne-Thomson, L.M.}, + isbn={9780486619804}, + lccn={lc73085109}, + series={Dover Books on Aeronautical Engineering Series}, + year={1966}, + publisher={Dover Publications} +} + +% --------------------------------------------------------------------------------} +% --- POTENTIAL FLOWS +% --------------------------------------------------------------------------------{ +@article{costi:1974, + title = {Incompressible, inviscid, symmetrical flow about ellipsoids - comparison of an approximate theory with exact results}, + author = {Costi, S. and Portnoy, H.}, + journal = {Technion Israel Inst Technol TAE Rep}, + number = {233}, + year = {1974}, + issn = {00729302, 04383893}, + abstract = {In an earlier report, a first-order theory for thin lifting wings was developed which is uniformly valid near the rounded wing-leading-edges and tips and is also uniformly valid near the effectively rounded edges of the wing wake (assuming an effective displacement boundary to the wake). In this report the method is applied to find the flow on the surface of a thin ellipsoid, without wake, at zero angle of attack and yaw and the results are compared with those obtained from the classical exact potential theory for ellipsoids.} +} +@TECHREPORT{zahm:1979, + author = {A. F. Zahm}, + title = {Flow and drag formulas for simple quadrics}, + institution = {{NACA} Report No. 253}, + year = {1979}, +} +@PHDTHESIS{clarke:2009:phdthesis, + author = {D. B. Clarke}, + title = {Experimental and computational investigation of flow about low aspect ratio ellipsoids at transcritical Reynolds numbers}, + school = {University of Tasmania}, + year = {2009} +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX/VORTICITY - REFERENCE BOOKS +% --------------------------------------------------------------------------------{ +@book{majda:book, +author = {A. J. Majda and Andrea. L. Bertozzi}, +title = {{Vorticity and Incompressible Flow}}, +publisher={Cambridge texts in applied mathematics}, +year={2002}, +} + +@book{wu:book, +author = {Wu, J.-Z. and Ma, H.-Y. and Zhou, M.D.}, +booktitle = {New York}, +isbn = {9783540290278}, +publisher = {Springer}, +title = {{Vorticity and Vortex Dynamics}}, +year = {2005} +} + +@book{hill:book, + author = {M. J. M. Hill}, + booktitle = {On a spherical vortex}, + publisher = {the Royal Society}, + title = {On a spherical vortex}, + year = {1894} +} +@article{amick:1986, + title = {THE UNIQUENESS OF HILL SPHERICAL VORTEX}, + language = {English}, + publisher = {SPRINGER VERLAG}, + author = {Amick, CJ and Fraenkel, LE}, + journal = {Archive for Rational Mechanics and Analysis}, + volume = {92}, + number = {2}, + pages = {91-119}, + year = {1986}, + issn = {00039527, 14320673}, + doi = {10.1007/BF00251252} +} +@article{norbury:1972, + title = {A steady vortex ring close to Hill's spherical vortex}, + author = {Norbury, J.}, + journal = {Mathematical Proceedings of the Cambridge Philosophical Society}, + volume = {72}, + number = {02}, + pages = {253}, + year = {1972}, + issn = {03050041, 14698064}, + doi = {10.1017/S0305004100047083} +} +@article{wan:1988, + title = {VARIATIONAL-PRINCIPLES FOR HILL SPHERICAL VORTEX AND NEARLY SPHERICAL VORTICES}, + language = {English}, + publisher = {AMER MATHEMATICAL SOC}, + author = {WAN, YH}, + journal = {TRANSACTIONS OF THE AMERICAN MATHEMATICAL SOCIETY}, + volume = {308}, + number = {1}, + pages = {299-312}, + year = {1988}, + issn = {00029947, 10886850} +} + +@article{moffatt:1969, +author = {Moffatt,H. K.}, +title = {The degree of knottedness of tangled vortex lines}, +journal = {Journal of Fluid Mechanics}, +volume = {null}, +issue = {01}, +month = {1}, +year = {1969}, +issn = {1469-7645}, +pages = {117--129}, +numpages = {13}, +doi = {10.1017/S0022112069000991}, +URL = {http://journals.cambridge.org/article_S0022112069000991}, +} + +@article{moffatt:1978, + title = {Response of Hills spherical vortex to a small axisymmetric disturbance}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {Moffatt, HK and Moore, DW}, + journal = {Journal Of Fluid Mechanics}, + volume = {87}, + number = {AUG}, + pages = {749-760}, + year = {1978}, + issn = {00221120, 14697645} +} + +@article{batishch:1971, + title = {DIFFUSION OF HILLS SPHERICAL VORTEX UNDER CONDITIONS OF VANISHING VISCOSITY}, + language = {Russian}, + publisher = {MEZHDUNARODNAYA KNIGA}, + author = {BATISHCH.VA and SRUBSHCH.LS}, + journal = {DOKLADY AKADEMII NAUK SSSR}, + volume = {197}, + number = {5}, + pages = {1038}, + year = {1971}, + issn = {00023264} +} +@article{moffatt:1986, + title = {On the existence of localized rotational disturbances which propagate without change of structure in an inviscid fluid}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {Moffatt, HK}, + journal = {Journal Of Fluid Mechanics}, + volume = {173}, + pages = {289-302}, + year = {1986}, + issn = {00221120, 14697645} +} + + +@article{hunt:1988, + title = {Eddies, streams, and convergence zones in turbulent flows}, + author = {J. C. R. Hunt and A. A. Wray and P. Moin}, + journal = {CASI}, + year = {1988}, + abstract = {Recent studies of turbulent shear flows have shown that many of their important kinematical and dynamical properties can be more clearly understood by describing the flows in terms of individual events or streamline patterns. These events or flow regions are studied because they are associated with relatively large contributions to certain average properties of the flow, for example kinetic energy, Reynolds stress, or to particular processes in the flow, such as mixing and chemical reactions, which may be concentrated at locations where streamlines converge for fast chemical reactions (referred to as convergence or C regions), or in recirculating eddying regions for slow chemical reactions. The aim of this project was to use the numerical simulations to develop suitable criteria for defining these eddying or vortical zones. The C and streaming (S) zones were defined in order to define the whole flow field. It is concluded that homogeneous and sheared turbulent flow fields are made up of characteristic flow zones: eddy, C, and S zones. A set of objective criteria were found which describe regions in which the streamlines circulate, converge or diverge, and form high streams of high velocity flow.} +} + +@article{jeong:1995, + title = {ON THE IDENTIFICATION OF A VORTEX}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {Jeong, J. and Hussain, F.}, + journal = {Journal Of Fluid Mechanics}, + volume = {285}, + pages = {69-94}, + year = {1995}, + issn = {00221120, 14697645}, + abstract = {Considerable confusion surrounds the longstanding question of what constitutes a vortex, especially in a turbulent how. This question, frequently misunderstood as academic, has recently acquired particular significance since coherent structures (CS) in turbulent flows are now commonly regarded as vortices. An objective definition of a vortex should permit the use of vortex dynamics concepts to educe CS, to explain formation and evolutionary dynamics of CS, to explore the role of CS in turbulence phenomena, and to develop viable turbulence models and control strategies for turbulence phenomena. We propose a definition of a vortex in an incompressible flow in terms of the eigenvalues of the symmetric tenser S-2+Omega(2); here S and Omega are respectively the symmetric and antisymmetric parts of the velocity gradient tenser del u. This definition captures the pressure minimum in a plane perpendicular to the vortex axis at high Reynolds numbers, and also accurately defines vortex cores at low Reynolds numbers, unlike a pressure-minimum criterion. We compare our definition with prior schemes/definitions using exact and numerical solutions of the Euler and Navier-Stokes equations for a variety of laminar and turbulent flows. In contrast to definitions based on the positive second invariant of del u or the complex eigenvalues of del u, our definition accurately identifies the vortex core in flows where the vortex geometry is intuitively clear.} +} +@article{moore:1998, + title = {On steady compressible flows with compact vorticity; the compressible Hill's spherical vortex}, + language = {eng}, + author = {Moore, D. W. and Pullin, D. I.}, + journal = {Journal of Fluid Mechanics, J. Fluid Mech}, + volume = {374}, + pages = {285-303}, + year = {1998}, + issn = {00221120} +} + +@book{akhmetov:book, + title = {Vortex rings}, + language = {English}, + publisher = {Springer}, + author = {D. G. Akhmetov}, + pages = {1 vol. (X-149 p.)}, + year = {2009}, + isbn = {3642050158, 9783642050152} +} + + +@book{alekseenko:2007:book, + title={Theory of Concentrated Vortices: An Introduction}, + author={Alekseenko, S.V. and Kuibin, P.A. and Okulov, V.L.}, + isbn={9783540733768}, + year={2007}, + publisher={Springer London, Limited} +} + + + + + + + + + + + + + +} +% editor = {Stein, Erwin. and Borst, R. de. and Hughes, Thomas J. R.}, +@INBOOK{winckelmans:bookchapter, + author={G. S. Winckelmans} , + title={Encyclopedia of computational mechanics - Volume 1. Chapter 5: Vortex Methods} , + chapter = {5}, + publisher= {J. Wiley \& Sons, New-York, N.Y.}, + year = {2004}, + isbn = {0470846992, 9780470846995}, + abstract = {Vol. 1. Fundamentals -- Vol. 2. Solids and structures -- Vol. 3. Fluids} +} + +@book{stein:2004a, + title = {Encyclopedia of computational mechanics}, + pages = {3 bd}, + editor = {Stein, Erwin. and Borst, R. de. and Hughes, Thomas J. R.}, + title={Encyclopedia of computational mechanics}, + chapter = {5}, + publisher= {J. Wiley \& Sons, New-York, N.Y.}, + year = {2004}, + isbn = {0470846992, 9780470846995}, + abstract = {Vol. 1. Fundamentals -- Vol. 2. Solids and structures -- Vol. 3. Fluids} +} +@article{haller:2005, + title = {An objective definition of a vortex}, + language = {English}, + publisher = {Cambridge University Press}, + author = {Haller, G.}, + journal = {Journal of Fluid Mechanics}, + volume = {525}, + pages = {1-26}, + year = {2005}, + issn = {00221120, 14697645}, + abstract = {The most widely used definitions of a vortex are not objective: they identify different structures as vortices in frames that rotate relative to each other. Yet a frame-independent vortex definition is essential for rotating flows and for flows with interacting vortices. Here we define a vortex as a set of fluid trajectories along which the strain acceleration tensor is indefinite over directions of zero strain. Physically, this objective criterion identifies vortices as material tubes in which material elements do not align with directions suggested by the strain eigenvectors. We show using examples how this vortex criterion outperforms earlier frame-dependent criteria. As a side result, we also obtain an objective criterion for hyperbolic Lagrangian structures.} +} + + +@MISC{brenner:rayleighstability, + author={Brenner}, + title={Rayleigh stability criterion}, + year={2015}, + howpublished = {\url{http://www.seas.harvard.edu/brenner/taylor/handouts/taylor\_couette/node2.html}}, +} + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - REFERENCE BOOKS +% --------------------------------------------------------------------------------{ +@BOOK{cottet:book, + author = {G.-H. Cottet and P. Koumoutsakos}, + title = {Vortex methods: theory and practice}, + publisher = {Cambridge University Press}, + year = {2000} +} +@book{lewis:book, +author = "R. I. Lewis", +title = {Vortex Element Methods for Fluid Dynamic Analysis of Engineering Systems}, +publisher = {Cambridge University Press}, +year = {1991}, +isbn = {9780511529542}, +note = {Cambridge Books Online}, +url = {http://dx.doi.org/10.1017/CBO9780511529542} +} + +@BOOK{katzplotkin:book, + author = {J. Katz and A. Plotkin}, + title = {Low-Speed Aerodynamics, 2nd Edition}, + publisher = {Cambridge University Press}, + year = {2001}, + month={February}, + series= {Cambridge Aerospace Series(No. 13)}, + ISBN={9780521665520} +} + +@misc{stock:2007, +author = {M. J. Stock}, +title = {{Summary of Vortex Methods Literature ( A living document rife with opinion )}}, +year= {2007}, +note={http://markjstock.org/research/} +} +% --------------------------------------------------------------------------------} +% --- HELMOTZ DECOMPOSITION +% --------------------------------------------------------------------------------{ +@article{petronetto:2008, + author = {Fabiano Petronetto and Afonso Paiva and Marcos Lage and Geovan Tavares and Hélio Lopes and Thomas Lewiner}, + title = {Meshless {H}elmholtz-{H}odge decomposition}, + year = {2010}, + month = {march}, + journal = {Transactions on Visualization and Computer Graphics}, + volume = {16}, + number = {2}, + pages = {338--342}, + publisher = {IEEE}, +} +% --------------------------------------------------------------------------------} +% --- Aero and WT - Propellers or helicopters +% --------------------------------------------------------------------------------{ +@book{martin:book, +author = {M. O. L. Hansen}, +title = {Aerodynamics of Wind Turbines - Second Edition}, +year = {2008}, +address = {London, Sterling, VA}, +publisher= {Earthscan}, +isbn = {978-1-84407-438-9}, +} + + + +@article{hansen:2006, +author = {Hansen, M. O. L. and S{\o}rensen, J. N. and Voutsinas, S. and S{\o}rensen, N. and Madsen, H. Aa.}, +doi = {10.1016/j.paerosci.2006.10.002}, +journal = {Progress in Aerospace Sciences}, +keywords = {aeroelasticity,wind turbines}, +pages = {285--330}, +title = {{State of the art in wind turbine aerodynamics and aeroelasticity}}, +volume = {42}, +year = {2006} +} + +@book{windenergyexplained, +author = {J.F. Manwell and J.G. McGowan and A.L. Rogers}, +title = {Wind Energy Explained}, +month={August}, +year = {2003}, +publisher= {J. Wiley and Sons, LTD} +} +@book{windenergyhandbook, +author = {T. Burton and D. Sharpe and N. Jenkins and E. Bossanyi}, +title = {Wind Energy Handbook}, +year = {2002}, +publisher= {J. Wiley \& Sons, New-York, N.Y.}, +edition={first}, +ISBN={9780471489979}, +url={http://dx.doi.org/10.1002/0470846062}, +doi={10.1002/0470846062}, +} +@book{windenergyhandbooksecond, +author = {T. Burton and D. Sharpe and N. Jenkins and E. Bossanyi}, +title = {Wind Energy Handbook, New-York, N.Y.}, +year = {2011}, +publisher= {J. Wiley \& Sons}, +edition={second}, +ISBN={9780470699751}, +} + +# url={http://dx.doi.org/10.1002/0470846062}, +# doi={10.1002/0470846062}, +#AUTHOR - Burton, Tony +#AUTHOR - Sharpe, David +#AUTHOR - Jenkins, Nick +#AUTHOR - Bossanyi, Ervin + +@book{hau, +author = {E. Hau}, +title = {Wind Turbines - Fundamentals, Technologies, Appplications, Economics}, +year = {2006}, +publisher= {Springer} +} + +@BOOK{rotarywings:book, + author = {W.Z. Stepniewski and C.N. Keys}, + title = {Rotary-Wings Aerodynamics}, + publisher = {Dover Publication}, + year = {1984} +} + +@TECHREPORT{lindenburg:2003, + author = {C. Lindenburg}, + title = {Investigation into Rotor Blade Aerodynamics}, + institution = {ECN}, + year = {2003}, + number={ECN-C-03-025} +} + +@BOOK{leishman:book, + author = {J. G. Leishman}, + title = {Principles of Helicopter Aerodynamics - Second Edition}, + publisher = {Cambridge University Press}, + year = {2006}, + month={april}, + series={Cambridge Aerospace Series(No. 12)}, + isbn={ 9780521858601} +} + +@BOOK{bramwell:book, + author = {A. R. S. Bramwell and G. Done and D. Balmford}, + title = {Bramwell's Helicopter Dynamics, Second Edition}, + publisher = {Butterworth Heinemann}, + year = {2001}, + isbn = {0750650753}, +} + + + +@book{breslin, + author = {John P. Breslin and Poul Andersen}, + title = {Hydrodynamics of Ship Propellers}, + publisher = {Cambridge University Press}, + year = {1993}, +} + +@PHDTHESIS{schepers:phdthesis, + author = {G. Schepers}, + title = {Engineering models in wind energy aerodynamics. Development, implementation and analysis using dedicated aerodynamic measurements}, + school = {Technical University of Delft}, + year = {2012}, +} + +@book{schaffarczyk:2014:book, + title={Introduction to Wind Turbine Aerodynamics}, + author={Schaffarczyk, A.P.}, + isbn={9783642364082}, + series={Green Energy and Technology}, + year={2014}, + publisher={Springer Berlin Heidelberg} +} +@incollection{sorensen:2012:bookchapter, +title = "2.08 - Aerodynamic Analysis of Wind Turbines ", +editor = "Sayigh, Ali ", +booktitle = "Comprehensive Renewable Energy ", +publisher = "Elsevier", +edition = "", +address = "Oxford", +year = "2012", +pages = "225 - 241", +isbn = "978-0-08-087873-7", +doi = "http://dx.doi.org/10.1016/B978-0-08-087872-0.00209-2", +author = "J. N. S{\o}rensen", +abstract = "Abstract The aerodynamics of wind turbines concerns modelling and prediction of the aerodynamic forces on wind turbines. Wind turbine aerodynamics is the most central discipline for design and construction of wind turbine blades. Here we give a status of the most important research areas within the aerodynamics of wind turbines, rotor wakes, and wind farms. This includes an introduction to basic rotor models, such as the blade-element momentum theory, vortex models, numerical actuator disk models, and computational fluid dynamics. Furthermore, a description is given of the optimization of wind turbine rotors with respect to minimizing the cost of energy produced by wind turbines. Finally, an introduction to the prediction of aerodynamic noise from wind turbine rotors is carried out. " +} + +% --------------------------------------------------------------------------------} +% --- BEM +% --------------------------------------------------------------------------------{ +@ARTICLE{madsen:2007, + author = {H. Madsen and R. Mikkelsen and S. {\O}ye and C. Bak and J. Johansen}, + title = {A Detailed investigation of the Blade Element Momentum (BEM) model based on analytical and numerical results and proposal for modifications of the BEM model}, + journal = {Journal of Physics: Conference Series 75}, + year = {2007} +} +@TECHREPORT{bak:2007aeroelasticity, + author = {C. Bak}, + title = {Research in Aeroelasticity EFP-2007}, + institution = {Ris{\o}-DTU}, + year = {2007}, + number={Ris{\o}-R-1649} +} +@TECHREPORT{bak:2007aeroelasticityChapter2, + editor = {C. Bak}, + author= {R. Mikkelsen and H. A. Madsen and M. Hansen and W.Z. Shen and S. {\O}ye}, + title = {Research in Aeroelasticity EFP-2007 - Chapter 2: Analysis of induction near tip}, + institution = {Ris{\o}-DTU}, + year = {2007}, + number={Ris{\o}-R-1649} +} +@ARTICLE{madsen:2009, + author = {H. Madsen and C. Bak and M. D{\o}ssing and R. Mikkelsen and S. {\O}ye}, + title = {Validation and modification of the Blade Element Momentum theory based on comparisons with actuator disc simulations}, + journal = {Wind Energy}, + volume={13}, + year = {2010}, + pages={p373-389} +} +@TECHREPORT{harman:1994, + author = {C. R. Harman}, + title = {{PROPX: Definitions, Derivations, and data Flow}}, + institution = {Oregon State University, Corvallis}, + year = {1994}, + otherinfo = {} +} + + + + + + +% --------------------------------------------------------------------------------} +% --- AERO - OLD REFERENCES +% --------------------------------------------------------------------------------{ +@ARTICLE{prandtl:1904, + author = {L. Prandtl}, + title = {Uber Flussigkeiibewegung bei sehr kleiner Reibung}, + journal = {Proceedings of 4th Mathematics Congress, Heidelberg}, + year = {1904}, + pages = {p484-493}, + note={(in German)} +} + +@ARTICLE{prandtl:1918, + author = {L. Prandtl}, + title = {Tragfl\"ugeltheorie}, + journal = {G{\"o}ttinger Klassiker der Str{\"o}mungsmechanik Bd. 3}, + editor={A. Dillmann}, + institution={Universit{\"a}tsverlag G{\"o}ttingen}, + year = {1918}, + otherinfo = {Reprint 2010}, + note={(in German)} +} + + + +% --------------------------------------------------------------------------------} +% --- OPTIMUM CIRCULATION - TIP LOSSES +% --------------------------------------------------------------------------------{ +@ARTICLE{betz:1919, + author = {A. Betz}, + title = {Schraubenpropeller mit geringstem Energieverlust - Mit einem Zusatz von {L}. {P}randtl}, + journal = {G{\"o}ttinger Klassiker der Str{\"o}mungsmechanik Bd. 3}, + editor={A. Dillmann}, + institution={Universit{\"a}tsverlag G{\"o}ttingen}, + year = {1919}, + pages={p68-88}, + otherinfo = {Reprint 2010}, + note={(in German)} +} +@ARTICLE{prandtl:1919, + author = {L. Prandtl}, + title = {Appendix to {B}etz's article: Schraubenpropeller mit geringstem Energieverlust - Mit einem Zusatz von {L}. {P}randtl}, + journal = {G{\"o}ttinger Klassiker der Str{\"o}mungsmechanik Bd. 3}, + editor={A. Dillmann}, + institution={Universit{\"a}tsverlag G{\"o}ttingen}, + year = {1919}, + pages={p89-92}, + otherinfo = {Reprint 2010}, + note={(in German)} +} +@ARTICLE{betz:1926, + author = {A. Betz}, + title = {Wind Energie und ihre Ausnutzug durch Windm\"ulen (Wind energy and its extraction through wind mills)}, + journal = {Vandenhoeck and Ruprecht}, + institution={Universit{\"a}tsverlag G{\"o}ttingen}, + year = {1926}, + note={(in German)} +} + +@BOOK{prandtlnaca116, + author = {L. Prandtl}, + title = {Applications of modern hydrodynamics to aeronautics}, + publisher = {{NACA} report No. 116}, + year = {1921} +} + +@BOOK{munknaca121, + author = {M. Munk}, + title = {The minimum induced drag of aerofoils}, + publisher = {{NACA} report No. 121}, + year = {1923} +} +@ARTICLE{lock:1925, + author = {C. N. H. Lock and H. Bateman and H. C. H. Townend}, + title = {An extension of the vortex theory of airscrew with applications to airscrews of small pitch, including experimental results}, + journal = {Report and Memoranda}, + volume = {1014}, + year = {1925}, + month ={September}, + publisher = {His majesty's stationery office} +} + +@ARTICLE{helmbold:1924, + author = {H.B. Helmbold}, + title = {Zur Aerodynamik der Treibschraube}, + journal = {Zeitschrift f\:ur Flugtechnik und Motorluftschiffahrt (ZFM)}, + year = {1924}, + volume={15}, + pages={150}, + note={(in German)} +} + +helmbold +@TECHREPORT{goldstein:1929, + author = {S. Goldstein}, + title = {On the vortex theory of screw propellers}, + institution = {St. John's College, Cambridge}, + year = {1929}, + month = {January} +} +@TECHREPORT{goldsteintable, + author = {C.K. Tibery and J.W. Wrench}, + title = {Tables of {G}oldstein factor}, + institution = {Applied mathematics laboratory - Department of the navy - report 1534}, + year = {1964} +} + +@TECHREPORT{nacatm884, + author = {K.N. Kramer }, + title = {The induced efficiency of optimum propellers having a finite number of blades}, + institution = {{NACA - TM - 884}}, + year = {1939} +} +@TECHREPORT{nacatm921, + author = {G.l Sissingh}, + title = {Contribution to the aerodynamics of rotating-wing aircraft}, + institution = {{NACA - TM - 921}}, + year = {1939} +} + +@TECHREPORT{theodorsen:1944, + author = {T. Theodorsen}, + title = {The theory of propellers I-IV}, + institution = {{NACA} reports 775-778}, + year = {1944} +} + +@TECHREPORT{naca924, + author = {C. Crigler}, + title = {Application of Theodorsen's theory to propeller design}, + institution = {{NACA} report 924}, + year = {1949} +} +@BOOK{theodorsen:1948, + author = {T. Theodorsen}, + title = {Theory of propellers}, + publisher = {McGraw-Hill Book Company, New-York}, + year = {1948}, + series={McGraw-Hill publications in aeronautical science}, +} + + + +@UNPUBLISHED{moffitt:2007, + author = {B.A. Moffitt and T.H. Bradley and D.E. Parekh and D.Mavris}, + title = {Validation of vortex propeller theory for UAV design with uncertainty analysis}, + note = {unpublished} +} + + +@ARTICLE{devries:1979, + author = {O. {De Vries}}, + title = {Fluid dynamic aspects of wind energy conversion}, + journal = {AGARD report, Brussels, Belgium}, + volume={AG-243}, + year = {1979}, + chapter={4}, + pages={1-50} +} + +@ARTICLE{larrabee:1983, + author = {E. E. Larrabee and S. E. French}, + title = {Minimum Induced Loss Windmills and Propellers}, + journal = {Journal of wind Engineering and Industrial Aerodynamics}, + year = {1983}, + volume = {15}, + pages={p317-327}, + month={December} +} + +@MASTERSTHESIS{mithelicopter:1991, + author = {K. Y-L. Yang}, + title = {Helicopter Rotor Lift Distribution for minimum Induced Power Loss}, + school = {M.I.T.}, + year = {1991} +} + +@ARTICLE{shen:2005, + author = {W. Z. Shen and R. Mikkelsen and J. N. S{\o}rensen and C. Bak}, + title = {Tip loss corrections for wind turbine computations}, + journal = {Wind Energy}, + year = {2005}, + volume = {8}, + pages = {p457-475} +} + +@TECHREPORT{sankar:2001, + author = {L.N. Sankar}, + title = {Computational studies of horizontal axis wind turbines - Annual status report 2000-2001}, + institution = {NREL - Georgia institute of technology}, + year = {2001} +} +@ARTICLE{okulov:2007, + title = {Optimum operating regimes for the ideal wind turbine}, + author = {V.L. Okulov and J.N. S{\o}rensen}, + journal = {Journal of Physics - Conference series 75}, + year = {2007}, + doi = {10.1088/1742-6596/75/1/012009}, + volume = {75} +} +@article{okulov:2007stability, +author = {Okulov, Valery L and S\o rensen, Jens N}, +title = {{Stability of the Tip Vortices in the Far Wake behind a Wind Turbine}}, +journal = {Progress in Aerospace Sciences}, +pages = {2--5}, +year = 2007 +} +@ARTICLE{okulov:2008, + author = {V.L. Okulov and J.N. S{\o}rensen}, + title = {An Ideal Wind Turbine with a Finite Number of Blades}, + journal = {Doklady Physics}, + year = {2008}, + volume={53}, + pages={p337-342} +} +@article{okulov:2010helicaldynamics, +author = {Okulov, Valery L and S\o rensen, Jens N}, +title = {{Applications of 2D helical vortex dynamics}}, +doi = {10.1007/s00162-009-0136-3}, +journal = {Control}, +keywords = {helical vortices,instability of far wakes,vortex breakdown,vortex theory of rotors}, +pages = {395--401}, +year = {2010} +} +@article{okulov:2010, + title = {{Maximum efficiency of wind turbine rotors using Joukowsky and Betz approaches}}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {V.L. Okulov and J.N. S{\o}rensen}, + journal = {Journal of Fluid Mechanics}, + volume = {649}, + pages = {497-508}, + year = {2010}, + issn = {00221120, 14697645}, + abstract = {On the basis of the concepts outlined by Joukowsky nearly a century ago, an analytical aerodynamic optimization model is developed for rotors with a finite number of blades and constant circulation distribution. In the paper, we show the basics of the new model and compare its efficiency with results for rotors designed using the optimization model of Betz.}, + doi = {10.1017/S0022112010000509} +} +@article{okulov:2012, +title = {{Limit cases for rotor theories with Betz optimization}}, +publisher = "Institute of Physics Publishing", +author = "Valery Okulov", +year = "2014", +doi = "10.1088/1742-6596/524/1/012129", +volume = "524", +pages = "1-7", +number = "1", +journal = "Journal of Physics: Conference Series (Online)", +issn = "1742-6596", +} + + + +@ARTICLE{fukumoto:2005, + author = {Y. Fukumoto and V.L. Okulov}, + title = {The velocity field induced by a helical vortex tube}, + journal = {Physics of fluids}, + year = {2005}, + volume={17} +} + +@article{sorensen:2014, + title = {A New Tip Correction Based on the Decambering Approach}, + language = {English}, + author = {J. N. S{\o}rensen and K. O. Dag and N. Ramos-Garcia}, + journal = {Journal of Physics: Conference Series}, + volume = {524}, + number = {1}, + pages = {012097}, + year = {2014}, + issn = {17426588, 17426596}, + abstract = {A limitation of the standard Blade Element Momentum (BEM) technique is that it represents the surface loading by an averaged value determined by locally computed airfoil characteristics. Thus, it does not take into account the chord wise distribution of the induction. Likewise, lifting line methods suffer from the problem that the induction from the free wake vortices is only evaluated along a line representing the center of pressure. Hence, the effect from the chord wise distribution of the induction is neglected. As a consequence, the loading in the proximity of the tip is generally found to be overestimated. To remedy this problem, a correction has been developed, which modifies the circulation by taking into account the additional influence of the induction of the free wake vortices. This is done by correcting the circulation, using the so-called decambering effect and thin-airfoil theory. The correction is implemented as an additional correction to the Prandtl tip correction. Where the Prandtl tip correction serves to correct the axisymmetric momentum theory for a finite number of blades (see Goldstein, 1929), the new model further corrects the blade element model to represent the line distribution by a surface loading. Comparing computations of the new model with results from a 'standard' BEM model and computations using a 3D panel code, show that the inclusion of the correction greatly improves the results. The new model also explains some of the discrepancies that earlier on have been observed when using a BEM technique based alone upon standard tip corrections (Shen et al., 2005).}, + doi = {10.1088/1742-6596/524/1/012097} +} + + + + + +% --------------------------------------------------------------------------------} +% --- WAKES +% --------------------------------------------------------------------------------{ +@ARTICLE{okulov:2004, + author = {V.L. Okulov and J.N. S{\o}rensen}, + title = {Instability of a Vortex Wake behind Wind Turbines}, + journal = {Doklady Physics}, + year = {2004}, + volume={49}, + pages={p772-777} +} +@article{sorensen:2011, + title = {Multiple helical modes of vortex breakdown}, + language = {eng}, + publisher = {Cambridge University Press}, + author = {J. N. S{\o}rensen and I. V. Naumov and V. Okulov}, + journal = {Journal of Fluid Mechanics}, + volume = {683}, + pages = {430-441}, + year = {2011}, + issn = {00221120, 14697645}, + abstract = {Experimental observations of vortex breakdown in a rotating lid-driven cavity are presented. The results show that vortex breakdown for cavities with high aspect ratios is associated with the appearance of stable helical vortex multiplets. By using results from stability theory generalizing Kelvin’s problem on vortex polygon stability, and systematically exploring the cavity flow, we succeeded in identifying two new stable vortex breakdown states consisting of triple and quadruple helical multiplets.}, + doi = {10.1017/jfm.2011.308} +} + + + +@ARTICLE{vermeer:2003, + author = {L.J. Vermeer and J.N. S{\o}rensen and A. Crespo}, + title = {Wind turbine wake aerodynamics}, + journal = {Progress in Aerospace Sciences}, + year = {2003}, + number={39}, + pages={p467-510} +} +@ARTICLE{shen:1998, + author = {J.N. S{\o}rensen and W.Z. Shen and X. Munduate}, + title = {Analysis of Wake States by a Full-field Actuator Disc Model}, + journal = {Wind Energ.}, + year = {1998}, + volume ={1}, + pages = {73-88} +} +@article{sanderse:2011, +author = {B. Sanderse}, +doi = {10.1002/we}, +journal = {Wind Energy}, +keywords = {cfd,rotor modelling,turbulence modeling,wake aerodynamics,wind energy}, +title = {{Review of computational fluid dynamics for wind turbine wake aerodynamics}}, +year = {2011} +} + +@article{Frandsen2006, + author = "Frandsen, S. and Barthelmie, R. and Pryor, S. and Rathmann, O. and Larsen, S. and H{\o}jstrup, J. and Th{\o}gersen, M.", + title = "Analytical modelling of wind speed deficit in large offshore wind farms", + journal = "Wind Energy", + volume = "9", + number = "1--2", + pages = "39--53", + year = "2006", +} + +@ARTICLE{rathmann:2006, + author = {O. Rathmann and R. Barthelmie and S. Frandsen}, + title = {Turbine Wake Model for Wind Resource Software}, + journal = {Proceedings of EWEC}, + year = {2006}, + otherinfo = {} +} +@article{lissaman:1979, + author = "Lissaman, P.B.S.", + title = "{Energy effectiveness of arbitrary arrays of wind turbines}", + journal = "Journal of Energy", + volume = "3", + number = "6", + pages = "323--328", + year = "1979", +} + + +% ---------------------------------------------------------} +% --- VORTEX METHOD - VISCOUS CORE +% --------------------------------------------------------------------------------{ +@ARTICLE{squire:1965, + author = {H. B. Squire}, + title = {The growth of a vortex in a turbulent flow}, + journal = {Aeronautical Quaterly}, + volume=16, + pages={302-306}, + year = {1965} +} + +@ARTICLE{hoydonck:2012, + author = {W. R. M. {Van Hoydonck} and M.J.L. {van Tooren}}, + title = {Validity of Viscous Core Correction Models for Self-Induced Velocity Calculations}, + year = 2012, + journal = {ArXiv e-prints}, + volume={1204.2378} +} + +@article{ananthan:2002, + title = {The role of filament stretching in the free-vortex modeling of rotor wakes}, + language = {English}, + publisher = {American helicopter society, inc}, + author = {Ananthan, S. and Leishman, J. G. and Ramasamy, M.}, + journal = {Annual forum proceedings- {American Helicopter Society}}, + volume = {58}, + number = {PART 2}, + pages = {2005-2022}, + year = {2002}, + issn = {0733-4249, 07334249} +} + +@CONFERENCE{uzol:2012, + author = {O. Uzol}, + title = {Free-Wake Calculations of Wind Turbine Wake-Rotor Interactions: The Effect of Vortex Filament Core Size, Expansion and Stretching on Performance Prediction}, + booktitle = {Science of making torque from the wind - {Oldenburg}}, + year = {2012}, +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX THEORY AND METHOD - not vortexcodes +% --------------------------------------------------------------------------------{ +@TECHREPORT{risorgaunaa:2011, + author = {M. Gaunaa and P.-E. Rh\'etor\'e and N.S. S{\o}rensen}, + title = {Ris{\o} contributions to final report EFP-Vingetipper}, + institution = {Ris\o-DTU}, + year = {2011}, + number = {Riso-R-xxxx} +} + +@INPROCEEDINGS{oye:1990, + author = {S. {\O}ye}, + title = {A simple vortex model of a turbine rotor}, + booktitle = {Proc. of the third IEA Symposium on the Aerodynamics of Wind Turbines, ETSU, Harwell}, + year = {1990}, + pages={4.1-1.15}, + otherinfo = {} +} + +% ---------------------------------------------------------} +% --- VORTEX CODES - Theoretical derivations +% --------------------------------------------------------------------------------{ +@ARTICLE{james:1972, + author = {R.M. James}, + title = {On the remarkable accuracy of the Vortex Lattice Method}, + journal = {Comput. Methods. Appli. Meth. Eng.}, + year = {1972}, + volume = {1}, +} +@ARTICLE{lan:1974, + author = {C.E. Lan}, + title = {A Quasi-Vortex Lattice Method in Thin Wing Theory}, + journal = {Journal of Aircraft}, + year = {1974}, + volume = {11}, + number = {9} +} +@ARTICLE{stark:1970, + author = {V.J.E. Stark}, + title = {A Generalized Quadrature Formula for Cauchy Integrals}, + journal = {AIAA Journal}, + year = {1970}, + volume = {9}, + number = {9} +} +@TECHREPORT{mangler:1952, + author = {K.W. Mangler}, + title = {Improper Integrals in Theoretical Aerodynamics}, + institution = {Aeronautical Research Council Technical Report no. 94}, + year = {1952}, +} + +@article{voutsinas:1990, + title = {Numerical calculation of singular integrals appearing in three-dimensional potential flow problems}, + language = {English}, + author = {Voutsinas, S. and Bergeles, G.}, + journal = {Applied Mathematical Modelling}, + volume = {14}, + number = {12}, + pages = {618-629}, + year = {1990}, + issn = {0307904x, 18728480}, + abstract = {Two approximate methods for calculating singular integrals appearing in the numerical solution of three-dimensional potential flow problems are presented. The first method is a self-adaptive, fully numerical method based on special copy formulas of Gaussian quadrature rules. The singularity is treated by refining the partitions of the copy formula in the vicinity of the singular point. The second method is a semianalytic method based on asymptotic considerations. Under the small curvature hypothesis, asymptotic expansions are derived for the integrals that are involved in the calculation of the scalar potential, the velocity as well as the deformation field induced from curved quadrilateral surface elements. Compared to other methods, the proposed integration schemes, when applied to practical flow field calculations, require less computational effort.} +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX CODES - EXAMP +% --------------------------------------------------------------------------------{ +@TECHREPORT{vsaero, + author = {B. Maskew}, + title = {Program {VSAero} Theory Document}, + institution = {{NASA} contractor report 4023}, + year = {1987}, +} +@TECHREPORT{hess:1962, + author = {J. L. Hess and A. M. O. Smith}, + title = {Calculation of non-lifting potential flow about arbitrary three-dimensional bodies}, + institution = {Douglas Aircraft Division, Report No. E.S. 40622, AD0282255}, + year = {1962}, +} + +@TECHREPORT{hess:1972, + author = {J. L. Hess}, + title = {Calculation of potential flow about arbitrary three-dimension lifting bodies}, + institution = {Douglas Aircraft Division, Report No. MDC J5679-01, AD0755480}, + year = {1972}, +} + +@PHDTHESIS{walther:1994phdthesis, + author = {J. H. Walther}, + title = {Discrete Vortex Method for Two-dimensional Flow past Bodies of arbitrary Shape undergoing Prescribed Rotary and + Translational Motion}, + school = {Technical University of Denmark - DTU}, + year = {1994} +} + +@article{sbalzarini:2006, +author = {Sbalzarini, I. F. and Walther, J. H. and Bergdorf, M. and Hieber, S. E. and Kotsalis, E. M. and Koumoutsakos, P.}, +doi = {10.1016/j.jcp.2005.11.017}, +journal = {Journal of Computational Physics}, +keywords = {mesh,parallel library,particle,smooth particle hydrodynamics,vortex methods}, +pages = {566--588}, +title = {{PPM - A highly efficient parallel particle - mesh library for the simulation of continuum systems}}, +volume = {215}, +year = {2006} +} +@article{dixon:2008, + title = {A 3D unsteady panel method for vertical axis wind turbines}, + publisher = {European Wind Energy Association}, + author = {Dixon, Kristian and Sim\~{a}o Ferreira, Carlos and Hofemann, Claudia and Van Bussel, Gerard and Van Kuik, Gijs}, + journal = {European Wind Energy Conference and Exhibition 2008}, + volume = {6}, + pages = {2981-2990}, + year = {2008}, + isbn = {9781615671151}, + abstract = {A 3D, unsteady, multi-body, free-wake panel method is developed to model a vertical axis wind turbine of arbitrary configuration. The panel code is intended as a design and research tool to capture the 3D nature of a VAWT and its wake. The model contains methods to realistically treat blade-wake interactions, vortex stretching/contraction and viscous diffusion. Validation is demonstrated by comparison with 3D-stereo Particle Image Velocimetry (PIV) and smoke trail studies for a straight-bladed VAWT. New insight into the near wake structure of a VAWT is developed in addition to how this structure changes as a function of tip speed ratio and height-diameter ratio. Tip vortex dynamics are also discussed.} +} +@inbook{garcia:2013miras, +title = "Development of a Three-Dimensional Viscous-Inviscid coupling Method for Wind Turbine Computations", +publisher = "Technical University of Denmark", +author = "{Ramos Garc\'ia}, N\'estor and S{\o}rensen, {Jens N{\o}rk{\ae}r} and Shen, {Wen Zhong}", +year = "2013", +pages = "69-81", +booktitle = "Proceedings of the 2013 International Conference on aerodynamics of Offshore Wind Energy Systems and wakes (ICOWES2013)", +} + +% ---------------------------------------------------------} +% --- VORTEX RINGS +% --------------------------------------------------------------------------------{ + +@ARTICLE{muller:1926, +author = {K. F. M\"uller}, +title = {Berechnung des Induktivit\"at von Spulen}, +journal = {Archiv f\"ur Elektrotechnik}, +year = {1926}, +volume = {17}, +number = {5}, +pages = {336-353}, +} + +@ARTICLE{foelsch:1936, +author = {K. Foelsch}, +title = {Magnefeld und Indukticit\"at einer zylindrischen Spule}, +journal = {Archiv f\"ur Elektrotechnik}, +year = {1936}, +volume = {30}, +number = {3}, +pages = {139-157}, +} + + +@article{paxton:1959, +title ={Solid angle calculation for a circular disk}, +author = {Paxton, F}, +doi = {10.1063/1.1716590}, +journal = {Review of Scientific Instruments}, +volume = {254}, +year = {1959} +} + +@article{yoon:2004, +author = {Yoon, Sam S and Heister, Stephen D}, +journal = {International Journal for Numerical Methods in Fluids}, +keywords = {biot,savart law,streamfunction,vortex ring}, +number = {October 2003}, +pages = {665--672}, +title = {{Analytical formulas for the velocity field induced by an infinitely thin vortex ring}}, +volume = {672}, +year = {2004} +} +@ARTICLE{nitschekrasny:1994, + author = {Nitsche, M. and Krasny, R.}, + title = {A numerical study of vortex rings formation at the edge of a circular tube}, + journal = {Journal of Fluid. Mech.}, + year = {1994}, + volume={276}, + pages={139-161}, +} + +% ---------------------------------------------------------} +% --- VORTEX CYLINDER +% --------------------------------------------------------------------------------{ +@ARTICLE{george:1980, + author = {M. F. George}, + title = {On the Velocity Induced by a Vortex Elliptic Cylinder}, + journal = {Journal of Ship Research}, + year = {1980}, + volume={24}, + number={1}, + pages={1--7} +} + +@article{gibson:1974, + Author = {I. S. Gibson}, + Title = {Velocity induced by a semi-infinite vortex cylinder - with extension to short solenoid}, + Year = {1974}, + Volume = {78}, + Number = {762}, + Pages = {262-268}, + journal = {Royal aeronautical soc.}, + ISSN = {0001-9240} +} +@TECHREPORT{callaghan:1960, + author = {E. E. Callaghan and S. H. Maslen}, + title = {The magnetic field of a finite solenoid}, + institution = {NASA technical note D-456, Lewis Research Center, Cleveland, Ohio}, + year = {1960}, +} + +@article{rinkel:1925, + title = {Das magnetische Feld von Spulen (The Magnetic field of coils)}, + language = {German}, + author = {Rinkel, R.}, + journal = {Zeitschrift Fur Technische Physik}, + volume = {6}, + number = {1}, + pages = {27-35}, + year = {1925}, + issn = {03730093}, + abstract = {Method of determining self-inductance of cylindrical coil consisting of summation process based on knowledge of field distribution due to single turn of coil; since it is only axial component of magnetic intensity which contributes to self-inductance, it is sufficient to determine this component only.} +} + +@article{protheroe:1996, + title = {The transient magnetic field outside an infinite solenoid}, + language = {English}, + publisher = {AMER INST PHYSICS}, + author = {Protheroe, RJ and Koks, D.}, + Journal = {American Journal Of Physics}, + volume = {64}, + number = {11}, + pages = {1389-1393}, + year = {1996}, + issn = {00029505, 19432909, 00029595}, + abstract = {The electromotive force (emf) in a loop outside an infinite solenoid with changing current is usually calculated using the vector potential because the magnetic field outside an infinite solenoid is supposed to be zero. However, the magnetic field will only be zero for steady currents. A change in the applied voltage will give rise to a change in the current, which will propagate along the solenoid in the same way as a wave on a transmission line. This gives rise to a transient magnetic field outside the solenoid. It is quite possible to calculate this transient magnetic field and use it in Faraday's law to calculate the emf directly without using the vector potential. In practice, it is usually simpler to use the vector potential. However, care should be taken to ensure that students are not given the impression that there is no magnetic field and that it is the vector potential that acts on charges in the loop. We give examples of the magnetic field configuration outside an infinite solenoid for a steplike change in driving voltage and for an ac driving voltage. (C) 1996 American Teachers.} +} + + +% ---------------------------------------------------------} +% --- VORTEX SHEET +% --------------------------------------------------------------------------------{ +@article{birkhoff:1959, + author={Birkhoff, G. and Fisher, J.}, + title={Do vortex sheets roll up?}, + year={1959}, + issn={0009-725X}, + journal={Rendiconti del Circolo Matematico di Palermo}, + volume={8}, + number={1}, + doi={10.1007/BF02843773}, + url={http://dx.doi.org/10.1007/BF02843773}, + publisher={Springer-Verlag}, + pages={77-90}, +} +@INPROCEEDINGS{birkhoff:1962, + author={Birkhoff, G.}, + title={Helmholtz and Taylor instability}, + year={1962}, + booktitle={Proc. Symp. Appl. Math.}, + publisher={Amer. Math. Soc.}, + pages={55-76}, +} +@article{rosenhead:1931, + author = {Rosenhead, L.}, + title = {The Formation of Vortices from a Surface of Discontinuity}, + jstor_articletype = {research-article}, + journal = {Proceedings of the Royal Society of London. Series A, Containing Papers of a Mathematical and Physical Character}, + jstor_issuetitle = {}, + volume = {134}, + number = {823}, + jstor_formatteddate = {Nov. 3, 1931}, + pages = {pp. 170-192}, + url = {http://www.jstor.org/stable/95835}, + ISSN = {09501207}, + abstract = {}, + language = {English}, + year = {1931}, + publisher = {The Royal Society}, + copyright = {Copyright © 1931 The Royal Society}, +} + +@INPROCEEDINGS{nakamura:1982, + title = {Vortex simulation of an inviscid shear layer}, + author = {Nakamura, Y. and Leonard, A. and Spalart, P. R.}, + year = {1982}, + booktitle= {Third Joint Thermophysics, Fluids, Plasma and Heat Transfer Conference, Fluid Dynamics and Co-located Conferences}, + abstract = {The accuracy of the vortex-blob method was tested by simulating a free-shear-layer instability, Kirchhoff's elliptical vortex, and a circular vortex. The main numerical parameters in the vortex-blob method are the density of the vortices, and the distribution of vorticity within each vortex core. The growth rate of a periodic unstable mode of the shear layer was calculated numerically and compared with the exact result. The error is only a few percent for about 10 rows of vortex blobs. The error is reduced by decreasing the spacing between vortices and, correspondingly, the core size. In the simulation of the motion of the elliptical vortex, the rotation of the boundary, without change of shape, and the circular particle paths of the vortical fluid were well simulated. For the circular vortex, optimum sets of parameters were obtained by comparing them with the exact velocity. The results are consistent with convergence theories of the vortex-blob method. In particular, second-order convergence is observed with a Gaussian core from velocity calculation.} +} +@article{krasny:1986a, + title = {Desingularization of periodic vortex sheet roll-up}, + author = {Krasny, R.}, + year = {1986}, + volume={65}, + pages={292-313}, + journal={Journal of Computational Physics}, + abstract = {An analytical approach is used in an attempt to model the evolution of a vortex sheet past the critical time by means of a desingularization method. Evolution of the sheet, which is embedded in a two-dimensional flow, is described by approximating the total circulation between a fixed material point and an imaginary point on the curve of the flow. A linear dispersion relation is defined which shows that the short wavelength modes of the sheet are not unstable and therefore do adversely effect the computations as artifacts of round-off errors. The desingularization approach is demonstrated to converge beyond the critical time for the vortex sheet. Application of the technique for the study of the vortex sheet shed from an elliptically loaded wing is indicated.} +} + +% ---------------------------------------------------------} +% --- VORTEX HELICAL FILAMENTS +% --------------------------------------------------------------------------------{ +@article{hardin:1982, +author = {Hardin, Jay C}, +title = {{The velocity field induced by a helical vortex filament}}, +doi = {10.1063/1.863684}, +year = {1982}, +pages = {1949-1952}, +journal={Phys. Fluids}, +volume = {25}, +} +@ARTICLE{kawada:1936, + author = {S. Kawada}, + title = {Induced velocities of helical vortices}, + journal = {Journal of Aeronautical Sciences}, + year = {1936}, + volume=3, + otherinfo = {Also in Report of the Aeronautical Research Institute, Tokyo, Imperial University, No. 172, 1939.} +} + +@ARTICLE{lerbs:1952, + author = {Lerbs,H. W.}, + title = {Moderately Loaded Propellers with a Finite Number of Blades and an Arbitrary Distribution of Circulation}, + journal = {Transactions of the Society of Naval Architects and Marine Engineer}, + year = {1952}, + volume ={60}, + pages={73-117} +} +@ARTICLE{wrench:1957, + author = {Wrench, J. W.}, + title = {The calculation of propeller induction factors}, + journal = {Reprint of Applied Mathematics Laboratory Tecnical Report 13}, + year = {1957}, +} +@ARTICLE{okulov:1995, + author = {V. L. Okulov}, + title = {The velocity induced by vortex filaments with cylindrical and conic supporting surface.}, + journal = {Russian Journal of Engineering Thermophysics}, + year = {1995}, + volume={5}, + pages={63-75} +} + + +Okulov, V. L. 1995 The velocity field induced by vortex filaments with cylindrical and conic +supporting surface. Russian J. Engng Thermophys. 5, 63–75 + + +% --------------------------------------------------------------------------------} +% --- Vorticity transport +% --------------------------------------------------------------------------------{ +@article{fletcher:2009, +author = {T. M. Fletcher and R. E. Brown }, +doi = {10.1002/we}, +journal = {Wind Energy}, +keywords = {interaction,vtm,wake instability,wind turbine}, +title = {{Simulation of wind turbine wake interaction using the vorticity transport model}}, +year = {2009} +} +% --------------------------------------------------------------------------------} +% --- VORTEX CODE _ NOT LIFTING LINE +% --------------------------------------------------------------------------------{ + +@article{kamemoto:2004, +author = {Kamemoto, K}, +title = {On Contribution of Advanced Vortex Element Methods Toward Virtual Reality of Unsteady Vortical Flows in the New Generation of CFD}, +journal = {Sciences-New York}, +keywords = {bluff body fluid,dynamics,machinery,numerical calculation,unsteady flows,virtual operation of fluid,vortex method}, +number = {4}, +volume = {XXVI}, +year = {2004} +} +@article{leishman:2002, +author = {J. G. Leishman}, +number = {5}, +journal = {Journal of aircraft}, +title = {{Free-Vortex Filament Methods for the Analysis of Helicopter Rotor Wakes}}, +volume = {39}, +year = {2002} +} + + + +@article{marion:2014, + author={L Marion and N Ramos-García and J N Sørensen}, + title={Inviscid double wake model for stalled airfoils}, + journal={Journal of Physics: Conference Series}, + volume={524}, + number={1}, + pages={012132}, + url={http://stacks.iop.org/1742-6596/524/i=1/a=012132}, + year={2014}, + abstract={An inviscid double wake model based on a steady two-dimensional panel method has been developed to predict aerodynamic loads of wind turbine airfoils in the deep stall region. The separated flow is modelled using two constant vorticity sheets which are released at the trailing edge and at the separation point. A calibration of the code through comparison with experiments has been performed using one set of airfoils. A second set of airfoils has been used for the validation of the calibrated model. Predicted aerodynamic forces for a wide range of angles of attack (0 to 90 deg) are in overall good agreement with wind tunnel measurements.} +} +@article {riziotis:2008, +author = {Riziotis, Vasilis A. and Voutsinas, Spyros G.}, +title = {Dynamic stall modelling on airfoils based on strong viscous–inviscid interaction coupling}, +journal = {International Journal for Numerical Methods in Fluids}, +volume = {56}, +number = {2}, +publisher = {John Wiley \& Sons, Ltd.}, +issn = {1097-0363}, +url = {http://dx.doi.org/10.1002/fld.1525}, +doi = {10.1002/fld.1525}, +pages = {185--208}, +keywords = {dynamic stall, boundary layer methods, panel methods, viscous–inviscid interaction}, +year = {2008}, +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - REVIEWS +% --------------------------------------------------------------------------------{ +@techreport{spalart:1988, + title = {Vortex methods for separated flows}, + author = {Spalart, Philippe R.}, + year = {1988}, + institution={NASA-TM-100068}, + abstract = {The numerical solution of the Euler or Navier-Stokes equations by Lagrangian vortex methods is discussed. The mathematical background is presented and includes the relationship with traditional point-vortex studies, convergence to smooth solutions of the Euler equations, and the essential differences between two and three-dimensional cases. The difficulties in extending the method to viscous or compressible flows are explained. Two-dimensional flows around bluff bodies are emphasized. Robustness of the method and the assessment of accuracy, vortex-core profiles, time-marching schemes, numerical dissipation, and efficient programming are treated. Operation counts for unbounded and periodic flows are given, and two algorithms designed to speed up the calculations are described.} +} + +@article{sarpkaya:1989, + title = {Computational methods with vortices - the 1988 freeman scholar lecture}, + language = {English}, + publisher = {ASME-AMER SOC MECHANICAL ENG}, + author = {Sarpkaya, T.}, + journal = {Journal of fluids engineering-transactions of the asme}, + volume = {111}, + number = {1}, + pages = {5-52}, + year = {1989}, + issn = {00982202, 1528901x}, + abstract = {A comprehensive review is presented of the computational methods based upon Helmholtz's powerful concepts of vortex dynamics, making use of Lagrangian or mixed Lagrangian-Eulerian schemes, the Biot-Savart law or the Vortex-in-Cell methods. The approximations and smoothing schemes developed in search of predictive models, qualitative solutions, new insights, or just some inspiration in the simulation of often two-dimensional, occasionally three-dimensional, and almost always incompressible fluids are described in detail. One is forewarned at the onset that chaos awaits at the end of the road. The challenge is to produce results in the face of ever accumulating errors within a time scale appropriate for the investigation. The review is organized around two major sections: Theoretical foundations and practical applications of vortex methods.} +} + +@article{leonard:1980, + author = {A. Leonard}, + title = {Vortex methods for flow simulation}, + journal = {Journal of computational physics}, + year = {1980}, + volume = {37}, + pages = {289-335}, + issn={0021-9997/80/120289} +} + + +@article{leonard:1985, + author = {A. Leonard}, + title = {Computing three-dimensional incompressible flows with vortex elements}, + journal = {Annual Review of Fluid Mechanics}, + year = {1985}, + volume = {17}, + pages = {523-559}, +} + +@article{voutsinas:2012seminar, +author = {Voutsinas, Spyros}, +journal = {TU-Delft - NTUA}, +title = {{Lecture notes: PhD Course in vortex methods}}, +year = {2012} +} + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - THEORY +% --------------------------------------------------------------------------------{ +@article{prager:1928, + author = {W. Pr{\"a}ger}, + title = {Die Drickverteilung an K{\"o}rpern in ebener Potential str{\"omung}}, + journal = {Physik. Zeitschr.}, + year = {1928}, + volume = {29}, + pages = {865-869}, +} +@ARTICLE{voutsinas:2006, + author = {S. G. Voutsinas}, + title = {Vortex methods in aeronautics: how to make things work}, + journal = {International Journal of Computational Fluid Dynamics}, + year = {2006}, + otherinfo = {} +} + +@article{wu:1973, + title = {Numerical solutions of time-dependent incompressible Navier-Stokes equations using an integro-differential formulation}, + language = {English}, + author = {Wu, J. C. and Thompson, J. F.}, + journal = {Computers and Fluids}, + volume = {1}, + number = {2}, + pages = {197-215}, + year = {1973}, + issn = {00457930, 18790747}, + abstract = {A numerical method for the solution of the Navier-Stokes equations is developed using an integro-differential formulation of the equations. The method permits the actual computations to be confined to the viscous region of the flow and offers a drastic reduction in the number of data points required in the numerical procedure. The integro- differential formulation is presented along with discussions of the kinetic and kinematic aspects of the problem and the interplay between the two aspects. Results for several parallel flow problems and for the flow past a circular cylinder are presented. For the circular cylinder, it is shown that the introduction of a splitter plate behind the cylinder suppresses vortex shedding.} +} +@ARTICLE{richardson:1977, + author = {S. M. Richardson and A. R. H. Cornish}, + title = {Solution of three dimensional incompressible flow problems}, + journal = {Journal of Fluid Mechanics}, + year = {1977}, + volume = {82}, + pages = {pp. 309-319}, + doi = {10.1017/S0022112077000688} +} + + +@ARTICLE{hald:1978, + author = {O. H. Hald and V. M. {Del Prete}}, + title = {Convergence of Vortex methods for {E}uler's equation}, + journal = {Mathematics of Computation}, + year = {1978}, + volume = {32}, + number = {143}, + pages = {791--809}, +} + + + +@ARTICLE{hald:1979, + author = {O. H. Hald}, + title = {Convergence of Vortex methods for {E}uler's equation. II}, + journal = {SIAM J. Numer. Anal.}, + year = {1979}, + volume = {16}, + number = {5}, + pages = {726--756}, +} + + + + +@article{beale:1981, +author = {J. T. Beale and A. Majda}, +journal = {Mathematics of Computation}, +pages = {243--259}, +title = {Rates of Convergence for Viscous Splitting of the Navier-Stokes Equations}, +volume = {37}, +year = {1981} +} +@article{beale:1982a, +author = {J. T. Beale and A. Majda}, +title = {{Vortex Methods . I : Convergence in Three Dimensions}}, +journal = {Mathematics of Computation}, +number = {159}, +pages = {1--27}, +volume = {39}, +year = {1982} +} +@article{beale:1982b, +author = {J. T. Beale and A. Majda}, +title = {{Vortex Methods . II : Higher Order Accuracy in Two and Three Dimensions}}, +journal = {Mathematics of Computation}, +number = {159}, +pages = {29--52}, +volume = {39}, +year = {1982} +} +@article{beale:1985, +author = {J. T. Beale and A. Majda}, +journal = {Journal of Computational Physics}, +pages = {188--208}, +title = {{High Order Accurate Vortex Methods with Explicit Velocity Kernels}}, +volume = {208}, +year = {1985} +} + +@article{perlman:1985, +author = {Perlman, Mirta}, +pages = {200--223}, +title = {{On the Accuracy of Vortex Methods}}, +volume = {123}, +journal ={Journal of Computational Physics}, +year = {1985} +} + +@TECHREPORT{cottet:1984, + author = {G. H. Cottet}, + title = {A particle method to solve transport-diffusion equation - Part 1: The linear case}, + institution = {Centre de Mathematiques Appliquees, Ecole Polytechnique, France}, + year = {1984} +} + +@article{monaghan:1985, + title = {Extrapolating B splines for interpolation}, + language = {English}, + author = {Monaghan, J.J}, + journal = {Journal of Computational Physics}, + volume = {60}, + number = {2}, + pages = {253-262}, + year = {1985}, + issn = {00219991, 10902716}, + abstract = {A limit form of Richardson extrapolation is used to obtain interpolation formulae with accuracy of a higher degree than that obtained with the variation diminishing spline approximation.} +} + +@article{monaghan:1989, + title = {ON THE PROBLEM OF PENETRATION IN PARTICLE METHODS}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Monaghan, JJ}, + journal = {Journal Of Computational Physics}, + volume = {82}, + number = {1}, + pages = {1-15}, + year = {1989}, + issn = {00219991, 10902716}, + abstract = {A method is described which prevents penetration when particle methods are used to simulate streams of fluid impinging on each other. The method does not produce dissipation but it does produce extra dispersion.} +} + +@TECHREPORT{cottet:1987, + author = {G. H. Cottet}, + title = {A particle method to solve transport-diffusion equation - Part 2: The Navier-Stokes equation}, + institution = {Centre de Mathematique Appliquees, Ecole Polytechnique, France}, + year = {1987} +} + + + +@ARTICLE{degond:1989a, + author = {P. Degond and S. Mas-Gallic}, + title = {The Weighted Particle Method for Convection-Diffusion Equations. Part 1: The Case of an Isotropic Viscosity}, + journal = {Mathematics of Computation}, + year = {1989}, + volume = {53}, + number = {188}, + pages = {485--507} +} + +@ARTICLE{degond:1989b, + author = {P. Degond and S. Mas-Gallic}, + title = {The Weighted Particle Method for Convection-Diffusion Equations. Part 1: The Anisotropic Case}, + journal = {Mathematics of Computation}, + year = {1989}, + volume = {53}, + number = {188}, + pages = {509--525} +} +@article{nordmark:1991, + title = {Rezoning for higher-order vortex methods}, + language = {English}, + publisher = {Academic press inc jnl-comp subscriptions}, + author = {Nordmark, H}, + journal = {Journal of computational physics}, + volume = {97}, + number = {2}, + pages = {366-397}, + year = {1991}, + issn = {00219991, 10902716} +} +@article{winckelmans:1993, + title = {Contributions to vortex particle methods for the computation of 3-dimensional incompressible unsteady flows}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {G. S. Winckelmans and A. Leonard}, + journal = {Journal Of Computational Physics}, + volume = {109}, + number = {2}, + pages = {247-273}, + year = {1993}, + issn = {00219991, 10902716}, + abstract = {Recent contributions to vortex particle methods for the computation of three-dimensional incompressible unsteady flows are presented. Both singular and regularized vortex particle methods are reviewed, along with an investigation of different evolution equations for the particle strength vector. For the regularized method, a new algebraic smoothing is presented with convergence properties equal to those of Gaussian smoothing. A version of the regularized method which can account for viscous diffusion is developed using a scheme that redistributes the particle strength vectors. Finally, particle methods are investigated with respect to conservation laws, and new expressions for the quadratic diagnostics, energy, helicity, and enstrophy are derived.}, + doi = {10.1006/jcph.1993.1216} +} +@article{cottet:2000, + title = {Vortex methods with spatially varying cores}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {G.-H. Cottet and P. Koumoutsakos and M. L. O Salihi}, + journal = {Journal Of Computational Physics}, + volume = {162}, + number = {1}, + pages = {164-185}, + year = {2000}, + issn = {00219991, 10902716}, + abstract = {The accuracy of vortex methods employing smooth vortex particles/blobs is determined by the blob size, which can be viewed as a mollifier of the vorticity field. For computational efficiency, this core size needs to be spatially variable as particles are used to discretize different parts of the flow field, such as the boundary layer and the wake in bluff body flows. We derive here a consistent approximation for the viscous Navier-Stokes equations using variable size vortex particles. This derivation is based on the implementation of mappings that allow the consistent formulation of the diffusion and convection operators of the Navier-Stokes equations in the context of vortex methods. Several local mappings can be combined giving the capability of "mesh-embedding" to vortex methods. It is shown that the proposed variable method offers a significant improvement on the computational efficiency of constant core size methods while maintaining the adaptive character of the method. The method is ideally suited to flows such as wakes and shear layers and the validity of the approach is illustrated by showing results from cylinder flows and wall-vortex interactions. Using this scheme, previously unattainable simulations of cylinders undergoing rotary oscillations at high Reynolds numbers reveal an interesting mechanism for drastic drag reduction. (C) 2000 Academic Press.}, + doi = {10.1006/jeph.2000.6531} +} +@article{cocle:2008, + title = {Combining the vortex-in-cell and parallel fast multipole methods for efficient domain decomposition simulations}, + language = {English}, + publisher = {Academic Press Inc.}, + author = {Cocle, Roger and Winckelmans, Gr and Daeninck, Go}, + journal = {Journal of Computational Physics}, + volume = {227}, + number = {4}, + pages = {2263-2292}, + year = {2008}, + issn = {00219991, 10902716}, + abstract = {A new combination of vortex-in-cell and parallel fast multipole methods is presented which allows to efficiently simulate, in parallel, unbounded and half-unbounded vortical flows (flows with one flat wall). In the classical vortex-in-cell (VIC) method, the grid used to solve the Poisson equation is typically taken much larger than the vorticity field region, so as to be able to impose suitable far-field boundary conditions and thus approximate the truly unbounded (or half-unbounded) flow; an alternative is to assume periodicity. This approach leads to a solution that depends on the global grid size and, for large problems, to unmanageable memory and CPU requirements. The idea exploited here is to work on a domain that contains tightly the vorticity field and that can be decomposed in several subdomains on which the exact boundary conditions are obtained using the parallel fast multipole (PFM) method. This amounts to solving a 3-D Poisson equation without requiring any iteration between the subdomains (e.g., no Schwarz iteration required): this is so because the PFM method has a global view of the entire vorticity field and satisfies the far-field condition. The solution obtained by this VIC–PFM combination then corresponds to the simulation of a truly unbounded (or half-unbounded) flow. It requires far less memory and leads to a far better computational efficiency compared to simulations done using either (1) the VIC method alone, or (2) the vortex particle method with PFM solver alone. 3-D unbounded flow validation results are presented: instability, non-linear evolution and decay of a vortex ring (first at a moderate Reynolds number using the sequential version of the method, then at a high Reynolds number using the parallel version); instability and non-linear evolution of a two vortex system in ground effect. Finally, a space-developing simulation of an aircraft vortex wake in ground effect is also presented.[All rights reserved Elsevier].} +} +@article{rees:2011, + title = {A comparison of vortex and pseudo-spectral methods for the simulation of periodic vortical flows at high Reynolds numbers}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {van Rees, Wim M. and Leonard, Anthony and Pullin, D. I. and Koumoutsakos, Petros}, + journal = {Journal Of Computational Physics}, + volume = {230}, + number = {8}, + pages = {2794-2805}, + year = {2011}, + issn = {00219991, 10902716}, + abstract = {We present a validation study for the hybrid particle-mesh vortex method against a pseudo-spectral method for the Taylor-Green vortex at Re-Gamma = 1600 as well as in the collision of two antiparallel vortex tubes at Re-Gamma = 10,000. In this study we present diagnostics such as energy spectra and enstrophy as computed by both methods as well as point-wise comparisons of the vorticity field. Using a fourth order accurate kernel for interpolation between the particles and the mesh, the results of the hybrid vortex method and of the pseudo-spectral method agree well in both flow cases. For the Taylor-Green vortex, the vorticity contours computed by both methods around the time of the energy dissipation peak overlap. The energy spectrum shows that only the smallest length scales in the flow are not captured by the vortex method. In the second flow case, where we compute the collision of two anti-parallel vortex tubes at Reynolds number 10,000, the vortex method results and the pseudo-spectral method results are in very good agreement up to and including the first reconnection of the tubes. The maximum error in the effective viscosity is about 2.5% for the vortex method and about 1% for the pseudo-spectral method. At later times the flows computed with the different methods show the same qualitative features, but the quantitative agreement on vortical structures is lost. (C) 2010 Elsevier Inc. All rights reserved.}, + doi = {10.1016/j.jcp.2010.11.031} +} + +@article{eldredge:2002derivatives, + title = {A general deterministic treatment of derivatives in particle methods}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Eldredge, JD and Leonard, A. and Colonius, T.}, + journal = {Journal Of Computational Physics}, + volume = {180}, + number = {2}, + pages = {686-709}, + year = {2002}, + issn = {00219991, 10902716}, + abstract = {A unified approach to approximating spatial derivatives in particle methods using integral operators is presented. The approach is an extension of particle strength exchange, originally developed for treating the Laplacian in advection-diffusion problems. Kernels of high order of accuracy are constructed that can be used to approximate derivatives of any degree. A new treatment for computing derivatives near the edge of particle coverage is introduced, using "one-sided" integrals that only look for information where it is available. The use of these integral approximations in wave propagation applications is considered and their error is analyzed in this context using Fourier methods. Finally, simple tests are performed to demonstrate the characteristics of the treatment, including an assessment of the effects of particle dispersion, and their results are discussed. (C) 2002 Elsevier Science (USA).}, + doi = {10.1006/jcph.2002.7112} +} +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - RANDOM WALKS +% --------------------------------------------------------------------------------{ +@article{chorin:1973, +author = {A. J. Chorin}, +pages = {785--796}, +title = {Numerical study of slightly viscous flow}, +volume = {57}, +year = {1973}, +journal={Journal of Fluid Mechanics} +} +@ARTICLE{roberts:1985, + author = {S. Roberts}, + title = {Accuracy of the random vortex method for a problem with a nonsmooth initial condition}, + journal = {Journal of Computational Physics}, + year = {1989}, + volume = {58}, + pages = {29--43} +} + +@TECHREPORT{spalart:1983phdthesis, + author = {P. R. Spalart and A. Leonard and D. Baganoff}, + title = {Numerical simulation of separated flows}, + institution = {PhD Thesis, also NASA Technical Memorandum 84328}, + year = {1983}, +} +@ARTICLE{deffenbaugh:1976, + author = {F. D. Deffenbaugh and F.J. Marshall}, + title = {Time development of the flow about an impulsively started cylinder}, + journal = {AIAA Journal}, + year = {1976}, + volume = {14}, + pages = {908--913} +} + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - POINT VORTICES +% --------------------------------------------------------------------------------{ +@ARTICLE{kuwahara:1973, + author = {K. Kuwahara and Hideo Takami}, + title = {Numerical Studies of Two-dimensional vortex motion by a system of point vortices}, + journal = {Journal of the physical society of Japan}, + year = {1973}, + volume = {34}, + number = {1}, + pages = {247-253} +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - VISCOSITY - VORTICITY AT BOUNDARIES +% --------------------------------------------------------------------------------{ +@article{koumoutsakos:1994, + title = {Boundary conditions for viscous vortex methods}, + language = {English}, + author = {Koumoutsakos and A. Leonard and Pepin}, + journal = {Journal of Computational Physics}, + volume = {113}, + number = {1}, + pages = {52-61}, + year = {1994}, + issn = {00219991, 10902716}, + abstract = {This paper presents a Neumann-type vorticity boundary condition for the vorticity formulation of the Navier-Stokes equations. The vorticity creation process at the boundary, due to the no-slip condition, is expressed in terms of a vorticity flux. The scheme is incorporated then into a Lagrangian vortex blob method that uses a particle strength exchange algorithm for viscous diffusion. The no-slip condition is not enforced by the generation of new vortices at the boundary but instead by modifying the strength of the vortices in the vicinity of the boundary}, + doi = {10.1006/jcph.1994.1117} +} + +@article{koumoutsakos:1995, + title = {High-resolution simulations of the flow around an impulsively started cylinder using vortex methods}, + language = {English}, + publisher = {Cambridge Univ Press}, + author = {Koumoutsakos, P. and Leonard, A.}, + journal = {Journal of Fluid Mechanics}, + volume = {296}, + pages = {1-38}, + year = {1995}, + issn = {00221120, 14697645}, + abstract = {The development of a two-dimensional viscous incompressible flow generated from a circular cylinder impulsively started into rectilinear motion is studied computationally. An adaptive numerical scheme, based on vortex methods, is used to integrate the vorticity/velocity formulation of the Navier-Stokes equations for a wide range of Reynolds numbers (Re = 40 to 9500). A novel technique is implemented to resolve diffusion effects and enforce the no-slip boundary condition. The Biot-Savart law is employed to compute the velocities, thus eliminating the need for imposing the far-field boundary conditions. An efficient fast summation algorithm was implemented that allows a large number of computational elements, thus producing unprecedented high-resolution simulations. Results are compared to those from other theoretical, experimental and computational works and the relation between the unsteady vorticity field and the forces experienced by the body is discussed.} +} +@article{greengard:1985, + title = {THE CORE SPREADING VORTEX METHOD APPROXIMATES THE WRONG EQUATION}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Greengard, C.}, + journal = {Journal of computational physics}, + volume = {61}, + number = {2}, + pages = {345-348}, + year = {1985}, + issn = {00219991, 10902716}, + abstract = {Points out that the core spreading algorithm is physically wrong and, indeed, converges to a system of equations different from the Navier-Stokes equations. In the core spreading algorithm, vorticity is correctly diffused, but incorrectly convected, even in the limit of infinitely many vortices. The author restricts attention to the simplest case, that is, 2-dimensional flow without boundaries. The viscosity is taken to have value one and denote by η. the vorticity at time t =0, which is assumed to be smooth and of compact support} +} + + +@article{morton:1984, + title = {THE GENERATION AND DECAY OF VORTICITY}, + language = {English}, + publisher = {GORDON BREACH SCI PUBL LTD}, + author = {Morton, B. R.}, + journal = {Geophysical and astrophysical fluid dynamics}, + volume = {28}, + number = {3-4}, + pages = {277-308}, + year = {1984}, + issn = {03091929, 10290419}, + abstract = {This treatment discusses the generation of vorticity at rigid boundaries and its subsequent decay. It is intended to provide a consistent and very broadly applicable framework within which a wide range of questions can be answered explicitly. The rate of generation of vorticity is shown to be the relative tangential acceleration of fluid and boundary without taking viscosity into account and the generating mechanism therefore involves the tangential pressure gradient within the fluid and the external acceleration of the boundary only. The mechanism is inviscid in nature and independent of the no-slip condition at the boundary, although viscous diffusion acts immediately after generation to spread vorticity outward from boundaries. Vorticity diffuses neither out of boundaries nor into them, and the only means of decay is by cross-diffusive annihilation within the fluid} +} + +@incollection{lighthill:1963, +author={M. J. Lighhill}, +title={Introduction: Boundary Layer theory}, +pages={46-113}, +booktitle = {Laminar Boundary Layers}, +editor = {L. Rosenhead}, +publisher = {Oxford University Press}, +year = 1963 +} + +@book{ rosenhead:1963:book, +booktitle = {Laminar Boundary Layers}, +editor = {L. Rosenhead}, +publisher = {Oxford University Press}, +year = 1963 +} + +@article{chorin:1978, + title = {Vortex sheet approximation of boundary-layers}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {A. J. Chorin}, + journal = {Journal Of Computational Physics}, + volume = {27}, + number = {3}, + pages = {428-442}, + year = {1978}, + issn = {00219991, 10902716} +} + +@article{fishelov:1990, + title = {Vortex methods for slightly viscous three-dimensional flow}, + language = {English}, + author = {Fishelov, D.}, + journal = {SIAM Journal on Scientific and Statistical Computing}, + volume = {11}, + number = {3}, + pages = {399-424}, + year = {1990}, + issn = {01965204, 21683417}, + abstract = {Vortex methods have been used extensively for two-dimensional problems, though their most efficient extension to three-dimensional problems is still under investigation. A method that evaluates the vorticity by exactly differentiating an approximate velocity field is applied. Numerical results are presented for a flow past a semi-infinite plate, and they demonstrate three-dimensional features of the flow and transition to turbulence.} +} +@article{chang:1991, + title = {A numerical study of flow around an impulsively started circular cylinder by a deterministic vortex method}, + language = {English}, + author = {Chang, C.-{C}.h and Chern, R.-L.}, + journal = {Journal of Fluid Mechanics}, + volume = {233}, + pages = {243-263}, + year = {1991}, + issn = {00221120, 14697645}, + abstract = {Impulsively started flow around a circular cylinder at various Reynolds numbers is studied by a deterministic hybrid vortex method. The key feature of the method consists in solving the viscous vorticity equation by interlacing a finite-difference method for diffusion and a vortex-in-cell method for convection. The vorticity is updated along the surface of the cylinder to satisfy the no-slip condition. The present method is basically different from previous applications of vortex methods, which are primarily in the context of random vortex algorithms. The Reynolds numbers of the flows under investigation range from 300 to 106. Numerical results are compared with analytical solutions at small times, and compared with finite-difference solutions and flow visualization results at relatively long times} +} + +@article{shankar:1996, + title = {A new diffusion procedure for vortex methods}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Shankar, S. and VanDommelen, L.}, + journal = {JOURNAL OF COMPUTATIONAL PHYSICS}, + volume = {127}, + number = {1}, + pages = {88-109}, + year = {1996}, + issn = {00219991, 10902716}, + abstract = {A new method is proposed for simulating diffusion in vortex methods for two-dimensional incompressible Rows. The method resolves length scales up to the spacing of the vortices. The grid-free nature of vortex methods is fully retained and the distribution of the vortices can be irregular. It is shown for the Stokes equations that in principle, the method can have any order of accuracy. It also conserves circulation, linear, and angular momentum. The method is based on exchanging a conserved quantity between arbitrary computational points. This suggests that extensions to more general flows may be possible. For the two-dimensional incompressible flows studied, circulation is exchanged between vortices to simulate diffusion. The amounts of circulation exchanged must satisfy a linear system of equations. Based on stability considerations, the exchanged amounts should further be positive. A procedure to find a solution to this problem is formulated using linear programming techniques. To test the method, the decay processes of a single point Vortex and of a counterrotating pair of point vortices are computed. Current limitations of the method are discussed. (C) 1996 Academic Press, Inc.}, + doi = {10.1006/jcph.1996.0160} +} +@article{garcia:2013, +title = "A strong viscous-inviscid interaction model for rotating airfoils", +publisher = "John/Wiley \& Sons Ltd.", +author = "{Ramos Garc\'ia}, N\'estor and S{\o}rensen, {Jens N{\o}rk{\ae}r} and Shen, {Wen Zhong}", +year = "2013", +journal = "Wind Energy", +issn = "1095-4244", +} + +@article{prochazka:1998, + title = {Structure and stability of non-symmetric Burgers vortices}, + author = {Pullin, D. I. and Prochazka, Aurelius}, + journal = {Journal of Fluid Mechanics}, + volume = {363}, + pages = {199-228}, + year = {1998}, + issn = {00221120, 14697645} +} +@article{buntine:1989, + title = {Merger and cancellation of strained vortices}, + language = {English}, + author = {Buntine, James D. and Pullin, D.I.}, + journal = {Journal of Fluid Mechanics}, + volume = {205}, + pages = {263-295}, + year = {1989}, + issn = {00221120, 14697645}, + abstract = {Authors study numerically the behaviour of and interaction between Burgers vortices - a known equilibrium solution to the Navier-Stokes equations which incorporates a balance between viscous diffusion and strain intensification of vorticity. A hybrid spectral/finite-difference method is employed to solve the Navier-Stokes equations in vorticity-stream function form for a unidirectional vorticity field on an infinite domain in the presence of a uniform three-dimensional strain field, one principal axis of which is parallel to the vorticity. Merging of two strained vortices is studied over a range of Reynolds numbers Re = Γ/2Ï€v = 10-1280, and the results are used to calculate an energy spectrum for three-dimensional, homogeneous turbulence. The cancellation of two strained vortices with opposing circulation is investigated for Reynolds numbers Re = Γ0/2Ï€v = 0.1-160 (Γ0 is the circulation about one vortex), over a range of strain rates in the direction parallel to the line joining the vortex centres. A solution of the Navier-Stokes equations describing vorticity cancellation in the strain-induced collision of vortex layers (Kambe 1984) is used to estimate the asymptotic, timewise decay of circulation for each vortex. Good agreement with the present numerical results is obtained. Vortex core pressures calculated during the cancellation event are compared to a simple analytical model based on Moore & Saffman (1971).} +} +@article{ledizes:2002, + title = {Viscous interactions of two co-rotating vortices before merging}, + language = {English}, + publisher = {Cambridge University Press}, + author = {Le Dizes, S. and Verga, A.}, + journal = {Journal of Fluid Mechanics}, + volume = {467}, + pages = {389-410}, + year = {2002}, + issn = {00221120, 14697645} +} + + + +@INPROCEEDINGS{spalart:1984, + title = {Two recent extensions of the vortex method}, + booktitle={AIAA 22nd Aerospace Sciences Meeting}, + author = {Spalart, P. R.}, + year = {1984}, + abstract = {The vortex method, coupled to an integral boundary-layer solver, is applied to the numerical simulation of high-Reynolds-number, separated flows in two new cases: a bluff body in a wind tunnel and flow in a cascade. In the bluff body case, the blockage effect of the tunnel walls is included approximately, assuming an inviscid boundary condition at the walls. The resulting increase in drag is computed, and compares well with a small-disturbance theory and with experiments. The results for flow in a cascade are compared with results from two finite-difference codes for a single-blade case, and good agreement is found. When a staggered cascade is treated with five independent blades, the simulation predicts rotating stall, depending on the angle of attack, and the essential features of the flow are correct. The sensitivity of this phenomenon to various parameters is studied and the stall boundary is found.} +} +@article{ploumhans:2000, +title = {{Vortex Methods for High-Resolution Simulations of Viscous Flow Past Bluff Bodies of General Geometry}}, +author = {Ploumhans, P and Winckelmans, G S}, +doi = {10.1006/jcph.2000.6614}, +journal = {Journal of Computational Physics}, +keywords = {general geometry,particle redistribution,viscous flow,vortex methods}, +pages = {354--406}, +volume = {406}, +year = {2000} +} + +@article{ploumhans:2002, + title = {Vortex methods for direct numerical simulation of three-dimensional bluff body flows: Application to the sphere at Re=300, 500, and 1000}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Ploumhans, P. and Winckelmans, GS and Salmon, JK and Leonard, A. and Warren, MS}, + journal = {Journal Of Computational Physics}, + volume = {178}, + number = {2}, + pages = {427-463}, + year = {2002}, + issn = {00219991, 10902716}, + abstract = {Recent contributions to the 3-D vortex methods are presented. Following Cottet, the particles strength exchange (PSE) scheme for diffusion is modified in the vicinity of solid boundaries to avoid a spurious vorticity flux and to enforce a zero-normal component of vorticity during the convection/PSE step. The vortex sheet algorithm used to enforce the no-slip boundary condition through a vorticity flux at the boundary and the technique used to perform accurate redistributions in the presence of bodies of general geometry are extended from their 2-D counterpart. To perform simulations with nonuniform resolution, a mapping of the redistribution lattice is used. Computational efficiency is attained through the use of parallel tree codes based on multipole expansions of vortex particles and of vortex panels. The method is validated, by comparisons with other authors' results, on the flow past a sphere at Re = 300. It is then applied to compute the flow at Re = 500 and 1000. (C) 2002 Elsevier Science (USA).}, + doi = {10.1006/jcph.2002.7035} +} + + +@article{ploumhans:2004, +author = {Ploumhans, P and Daeninck, G and Winckelmans, G}, +title = {{Simulation of Three-Dimensional Bluff-Body Flows Using the Vortex Particle and Boundary Element Methods}}, +journal = {Systems Engineering}, +keywords = {3-d bluff-body flows,boundary element method,dns,les,vortex element method}, +number = {i}, +pages = {117--131}, +year = {2004} +} + +@PHDTHESIS{daeninck:phdthesis, +author = {G. Daeninck}, +title = {{Developments in hybrid approaches: +Vortex method with known separation location Vortex method with near-wall Eulerian solver +RANS-LES coupling}}, +school = {Universit\'e catholique de Louvain, Facult\'e des sciences appliiqu\'ees}, +year = {2006} +} + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - COMPRESSIBILITY and ADVANCED FLUDYN +% --------------------------------------------------------------------------------{ + +@TECHREPORT{morino:1974, + author = {L. Morino}, + title = {A General theory of unsteady compressible potential aerodynamics}, + institution = {NASA-CR-2464}, + year = {1974}, + otherinfo = {} +} +@article{eldredge:2002, + title = {A vortex particle method for two-dimensional compressible flow}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Eldredge, JD and Colonius, T. and Leonard, A.}, + journal = {Journal of computational physics}, + volume = {179}, + number = {2}, + pages = {371-399}, + year = {2002}, + issn = {00219991, 10902716}, + abstract = {A vortex particle method is developed for simulating two-dimensional, unsteady compressible The method uses the Helmholtz decomposition of the velocity field to separately treat the irrotational and solenoidal portions of the Now, and the particles are allowed to change volume to conserve mass. In addition to having vorticity and dilatation properties, the particles also carry density, enthalpy, and entropy. The resulting evolution equations contain terms that are computed with techniques used in some incompressible methods. Truncation of unbounded domains via a nonreflecting boundary condition is also considered. The fast multipole method is adapted to compressible particles in order to make the method computationally efficient. The new method is applied to several problems, including sound generation by corotating vortices and generation of vorticity by baroclinic torque. (C) 2002 Elsevier Science (USA).}, + doi = {10.1006/jcph.2002.7060} +} + +@article{nitsche:2002, + title = {Extension of the gridless vortex method into the compressible flow regime}, + language = {English}, + publisher = {TAYLOR \& FRANCIS LTD}, + author = {Nitsche, M. and Strickland, JH}, + journal = {Journal of turbulence}, + volume = {3}, + pages = {-}, + year = {2002}, + issn = {14685248}, + abstract = {This paper proposes an extension of the gridless vortex method into the compressible flow regime. The proposed method consists of tracking particles in the flow that carry vorticity, divergence, temperature and density. The particle velocity is given by the Helmholtz decomposition law, which is approximated using the trapezoid rule. The evolution equations for the particle vorticity, divergence, temperature and density are evaluated using finite differences or least squares approximations for all derivatives. The method is applied to an isentropic model problem and compared to solutions obtained using an Eulerian scheme. Difficulties with the least squares approximation and with boundary conditions are discussed.} +} + +@article{knio:1992, + title = {Vortex simulation of a 3-dimensional reacting shear-layer with infinite-rate kinetics}, + language = {English}, + publisher = {AMER INST AERONAUT ASTRONAUT}, + author = {Knio, OM and Ghoniem, AF}, + journal = {AIAA Journal}, + volume = {30}, + number = {1}, + pages = {105-116}, + year = {1992}, + issn = {00011452, 1533385x}, + abstract = {The three-dimensional transport element method is extended to solve the conservation equations for reacting flow. The numerical scheme belongs to an adaptive, Lagrangian class of field methods in which computational effort is concentrated in zones of finite vorticity and chemical reaction. We use the low Mach number approximation of combustion and restrict our attention to the case of diffusion flames with no heat release. A single-step, second-order, infinite-rate kinetics chemical reaction model is employed. The scheme is applied to study the effect of flow-induced instabilities on the reaction field in a temporal shear layer. Results are obtained in the high Peclet number regime for a wide range of Damkohler numbers. Changes in the reaction field are related to either the entrainment or the strain field associated with the saturation of the instabilities. With increasing Damkohler number, the reaction region changes from a distributed zone embedded within spanwise and streamwise vortices to a thin sheet surrounding their cores. The product concentration always exhibits strong similarity to the vorticity distribution, realizing its highest values in zones of high vorticity and falling rapidly in regions where the vorticity is small. Variation of the Peclet number yields minor changes in the product distribution and in the reaction zone structure, but strongly affects product formation rates.} +} + + + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - REDISTRIBUTION - MERGING - DIV-FREE +% --------------------------------------------------------------------------------{ +@article{rossi:1997, +author = {Rossi, L.}, +title = {Merging Computational Elements in Vortex Simulations}, +journal = {SIAM Journal on Scientific Computing}, +volume = {18}, +number = {4}, +pages = {1014-1027}, +year = {1997}, +doi = {10.1137/S1064827595285287}, +URL = {http://epubs.siam.org/doi/abs/10.1137/S1064827595285287}, +eprint = {http://epubs.siam.org/doi/pdf/10.1137/S1064827595285287} +} +@article{rossi:1996, + title = {Resurrecting core spreading vortex methods: A new scheme that is both deterministic and convergent}, + language = {English}, + publisher = {SIAM PUBLICATIONS}, + author = {Rossi, L.}, + Journal = {SIAM Journal On Scientific Computing}, + volume = {17}, + number = {2}, + pages = {370-397}, + year = {1996}, + issn = {10648275, 10957197}, + abstract = {A basic core spreading vortex scheme is inconsistent but can be corrected with a splitting algorithm, yielding a deterministic and efficient grid-free method for viscous flows. The splitting algorithm controls the consistency error by maintaining small vortex core sizes. Routine analysis will show that the core spreading method coupled to this splitting process is convergent in L(p) spaces. Analysis of the linearized residual operator establishes the uniform convergence of this method when the exact flow field is known. A sequence of examples demonstrates the sensitivity of the method to numerical parameters as the computed solution converges to the exact solution. These experimental results agree with the linear convergence theory. Finally, direct comparisons between the traditional random walk vortex method and the new method indicate that the new method has several advantages while requiring the same computational effort.} +} + + +@article{cottet:1999, + title = {Multi-purpose regridding in vortex methods}, + language = {English}, + author = {Cottet, G.-H. and Ould Salihi, M.-L. and El Hamroui, M.}, + journal = {ESAIM: Proceedings}, + volume = {7}, + pages = {94-103}, + year = {1999}, + issn = {1270900x}, + doi = {10.1051/proc:1999009} +} + +@article{pedrizzetti:1992, + title = {Insight into singular vortex flows}, + language = {English}, + publisher = {ELSEVIER SCIENCE BV}, + author = {Pedrizzetti, G.}, + journal = {Fluid Dynamics Research}, + volume = {10}, + number = {2}, + pages = {101-115}, + year = {1992}, + issn = {01695983, 18737005}, + abstract = {The method of three-dimensional vortex singularities is analyzed. The fact that it does not represent a weak solution of the Euler equations has little bearing on its validity as an operative model. Other evolution inconsistencies are a major problem. The non-solenoidality of the vortex field is analyzed and a linear filtering feedback procedure, requiring no additional computations, is introduced to allow alignment with the reconstructed solenoidal vorticity field. A rough estimation of the dissipative effect during Vortex reconnection has shown a finite viscous effect that is implicitly present in the model, growing with stretching, representing the mechanism of shifting to reconnected topologies without observing strong velocity gradients. The dividing vorton method is rearranged in order to allow the quantized reproduction of a predefined core evolution law, an error estimation, due to the corpuscularity of the field, is given. Two different numerical computations are performed corresponding to a weak and a strong vortex interaction. The improvements are tested, and confrontations with existing numerical and experimental results are performed showing good agreement. The possibility of the singular vortex flow serving as a rough, but simple, model for verv high Reynolds number complex flows is discussed.}, + doi = {10.1016/0169-5983(92)90011-K} +} +@article{knio:1990, + title = {Numerical study of a three-dimensional vortex method}, + language = {English}, + author = {Knio, O. M. and Ghoniem, A. F.}, + journal = {Journal of Computational Physics}, + volume = {86}, + number = {1}, + pages = {75-106}, + year = {1990}, + issn = {00219991, 10902716}, + abstract = {A three-dimensional vortex method based on the discretization of the vorticity field into vortex vector elements of finite spherical cores is constructed for the simulation of inviscid incompressible flow. The velocity is obtained by summing the contribution of individual elements using the Biot-Savart law desingularized according to the vorticity cores. Vortex elements are transported in Lagrangian coordinates, and vorticity is redistributed, when necessary, among larger number of elements arranged along its direction. The accuracy and convergence of the method are investigated by comparing numerical solutions to analytical results on the propagation and stability of vortex rings. Accurate discretization of the initial vorticity field is shown to be essential for the prediction of the linear growth of azimuthal instability waves on vortex rings. The unstable mode frequency, growth rate and shape are in agreement with analytical results. The late stages of evolution of the instability show the generation of small scales in the form of hair-pin vortex structures. The behavior of the turbulent vortex ring is in good qualitative agreement with experimental data.} +} + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - TURBULENCE - LES +% --------------------------------------------------------------------------------{ + +@article{synge:1943, + title = {On a statistical model of isotropic turbulence}, + author = {Synge and Lin}, + journal = {Transactions of the Royal Society of Canada}, + volume = {37}, + pages = {45-79}, + year = {1943}, + issn = {00359122}, + abstract = {A statistical theory of homogeneous isotropic turbulence is developed by regarding the turbulent fluctuations as due to Hill's vortices moving about chaotically. The calculated velocity correlation tensor of the second order satisfies the general relations of von Kaacutermaacuten, and the shape of the correlation function is in general agreement with experimental results.} +} + +@article{saffman:1997, + title = {Vortex models of isotropic turbulence}, + language = {English}, + publisher = {ROYAL SOC}, + author = {Saffman, PG}, + journal = {Philosophical transactions of the royal society a-mathematical physical and engineering sciences}, + volume = {355}, + number = {1731}, + pages = {1949-1956}, + year = {1997}, + issn = {1364503x, 14712962, 1364503X}, + abstract = {The prospects of vortex models of the fine scales of isotropic turbulence are surveyed. These begin with the calculation by Synge \& Lin in 1943 of longitudinal velocity correlations, using an ensemble of Hill spherical vortices, and are followed by the work of Townsend (1951) employing Burgers vortices to study dissipation range scales. Recent developments by the author and Professor D. I. Pullin based on Lundgren's (1982) work on randomly orientated stretched spiral vortex solutions of the Navier-Stokes equations, for the calculation of higher order moments of one-point velocity gradient statistics and longitudinal velocity correlation functions, will be considered.} +} + +@article{meneveau:1996, + title = {A Lagrangian dynamic subgrid-scale model of turbulence}, + author = {Meneveau, Charles and Lund, Thomas S. and Cabot, William H.}, + journal = {Journal of Fluid Mechanics, J. Fluid Mech}, + volume = {319}, + pages = {353-385}, + year = {1996}, + issn = {00221120}, + abstract = {The dynamic model for large-eddy simulation of turbulence samples information from the resolved velocity field in order to optimize subgrid-scale model coefficients. When the method is used in conjunction with the Smagorinsky eddy-viscosity model, and the sampling process is formulated in a spatially local fashion, the resulting coefficient field is highly variable and contains a significant fraction of negative values. Negative eddy viscosity leads to computational instability and as a result the model is always augmented with a stabilization mechanism. In most applications the model is stabilized by averaging the relevant equations over directions of statistical homogeneity. While this approach is effective, and is consistent with the statistical basis underlying the eddy-viscosity model, it is not applicable to complex-geometry inhomogeneous flows. Existing local formulations, intended for inhomogeneous flows, are most commonly stabilized by artificially constraining the coefficient to be positive. In this paper we introduce a new dynamic model formulation, that combines advantages of the statistical and local approaches. We propose to accumulate the required averages over flow pathlines rather than over directions of statistical homogeneity. This procedure allows the application of the dynamic model with averaging to inhomogeneous flows in complex geometries. We analyse direct numerical simulation data to document the effects of such averaging on the Smagorinsky coefficient. The characteristic Lagrangian time scale over which the averaging is performed is chosen based on measurements of the relevant Lagrangian autocorrelation functions, and on the requirement that the model be purely dissipative, guaranteeing numerical stability when coupled with the Smagorinsky model. The formulation is tested in forced and decaying isotropic turbulence and in fully developed and transitional channel flow. In homogeneous flows, the results are similar to those of the volume-averaged dynamic model, while in channel flow, the predictions are slightly superior to those of the spatially (planar) averaged dynamic model. The relationship between the model and vortical structures in isotropic turbulence, as well as ejection events in channel flow, is investigated. Computational overhead is kept small (about 10% above the CPU requirements of the spatially averaged dynamic model) by using an approximate scheme to advance the Lagrangian tracking through first-order Euler time integration and linear interpolation in space.} +} +@article{meneveau:1997, + title = {The dynamic Smagorinsky model and scale-dependent coefficients in the viscous range of turbulence}, + language = {English}, + publisher = {AMER INST PHYSICS}, + author = {Meneveau, C. and Lund, TS}, + journal = {PHYSICS OF FLUIDS}, + volume = {9}, + number = {12}, + pages = {3932-3934}, + year = {1997}, + issn = {10706631, 10897666}, + abstract = {The standard dynamic procedure is based on the scale-invariance assumption that the model coefficient C is the same at the grid and test-filter levels. In many applications this condition is not met. We consider the case when the filter-length, Delta, approaches the Kolmogorov scale, eta, and C(Delta --> eta) --> 0. Using filtered direct numerical simulation data, we show that the standard dynamic model yields the coefficient corresponding to the test-filter-scale (alpha Delta)instead of the grid scale (Delta). Several approaches to account for scale dependence in the dynamic Smagorinsky model are considered, and the most robust of these is tested in large eddy simulation of forced isotropic turbulence at various Reynolds numbers. (C) 1997 American Institute of Physics. [S1070-6631(97)01412-8].}, + doi = {10.1063/1.869493} +} +@article{aivazis:2001, + title = {On velocity structure functions and the spherical vortex model for isotropic turbulence}, + language = {English}, + publisher = {AMER INST PHYSICS}, + author = {Aivazis, KA and Pullin, DI}, + journal = {Physics of Fluids}, + volume = {13}, + number = {7}, + pages = {2019-2029}, + year = {2001}, + issn = {10706631, 10897666}, + abstract = {We investigate a stochastic model for homogeneous, isotropic turbulence based on Hill's spherical vortex. This is an extension of the method of Synge and Lin [Trans. R. Soc. Can. 37, 45 (1943)], to the calculation of higher even-order velocity structure functions. Isotropic turbulence is represented by a homogeneous distribution of eddies, each modeled by a spherical vortex. The cascade process of eddy breakdown is incorporated into the statistical model through an average over an assumed log-normal distribution of vortex radii. We calculate the statistical properties of the model, in particular order-n velocity structure functions defined by rank-n tensors for the ensemble average of a set of incremental differences in velocity components. We define D-i...s=< (u(i)(x+xi)-u(i)(x))...(u(s)(x+xi)-u(s)(x))>, where <...> denotes the ensemble average. Specifically D-ij, D-ijkl, and the longitudinal component of D-ijklmn are calculated directly from the spherical vortex ensemble. Matching the longitudinal components of D-ij and D-ijkl with experimental results fixes two independent model parameters. The lateral and mixed components of D-ijkl and the longitudinal component of D-ijklmn are then model predictions. (C) 2001 American Institute of Physics.}, + doi = {10.1063/1.1367870} +} + + + @article{albukrek:2002, + title = {Divergence-Free Wavelet Analysis of Turbulent Flows}, + language = {English}, + publisher = {SPRINGER/PLENUM PUBLISHERS}, + author = {Albukrek, Cem M. and Urban, Karsten and Rempfer, Dietmar and Lumley, John L.}, + Journal = {Journal Of Scientific Computing}, + volume = {17}, + number = {1-4}, + pages = {49-66}, + year = {2002}, + issn = {08857474, 15737691}, + abstract = {In this paper we study the application of divergence-free wavelet bases for the analysis of incompressible turbulent flows and perform several experiments. In particular, we analyze various nominally incompressible fields and study the influence of compressible perturbations due to experimental and computational errors. In addition, we investigate the multiscale structure of modes obtained from the Proper Orthogonal Decomposition (POD) method. Finally, we study the divergence-free wavelet compression of turbulent flow data and present results on the energy recovery. Moreover, we utilize wavelet decompositions to investigate the regularity of turbulent flow fields in certain non-classical function spaces, namely Besov spaces. In our experiments, we have observed significantly higher Besov regularity than Sobolev regularity, which indicates the potential for adaptive numerical simulations.}, + doi = {10.1023/A:1015184110888} +} +@article{henshaw:1989, + title = {On the smallest scale for the incompressible Navier-Stokes equations}, + language = {English}, + publisher = {Springer-Verlag}, + author = {Henshaw, W. D. and Kreiss, H. O. and Reyna, L. G.}, + journal = {Theoretical and Computational Fluid Dynamics}, + volume = {1}, + number = {2}, + pages = {65-95}, + year = {1989}, + issn = {09354964, 14322250}, + abstract = {We prove that, for solutions to the two- and three-dimensional incompressible Navier-Stokes equations, the minimum scale is inversely proportional to the square root of the Reynolds number based on the kinematic viscosity and the maximum of the velocity gradients. The bounds on the velocity gradients can be obtained for two-dimensional flows, but have to be assumed in three dimensions. Numerical results in two dimensions are given which illustrate and substantiate the features of the proof. Implications of the minimum scale result, to the decay rate of the energy spectrum are discussed.}, + doi = {10.1007/BF00272138} +} +@article{feynman:1957, + title = {Application of Quantum Mechanics to Liquid Helium}, + language = {English}, + author = {Feynamn, R.P.}, + journal = {Progress of Low Temperature Physics}, + volume = {1}, + pages = {26-53}, + year = {1957} +} +@article{smith:1989, + title = {Postcritical flow around a circular cylinder by the vortex method}, + language = {English}, + author = {Smith, P.A. and Stansby, P.K.}, + journal = {Journal of Fluids and Structures}, + volume = {3}, + number = {3}, + pages = {275-291}, + year = {1989}, + issn = {08899746, 10958622}, + abstract = {Unsteady flow around a circular cylinder at postcritical Reynolds numbers is simulated by the vortex method with a boundary-layer turbulence model. In the fractional step scheme, the vortex-in-cell method with a polar mesh is used for the convection of point vortices and random walks are superimposed to simulate turbulent mixing in the boundary region. The eddy viscosity is determined from the vorticity distribution through an algebraic turbulence model. Transport of vorticity, in a spatially varying viscosity field, requires theoretical development of the random-walk method. Convergence tests for the symmetric early stages of impulsively started flow are used to determine appropriate numerical parameters. The computation is then advanced to longer times, allowing the flow to reach a stationary, nearly periodic state. The mean pressure distribution and the vortex shedding frequency compare reasonably with experimental data.} +} +@article{chorin:1990, + title = {Hairpin removal in vortex interactions}, + language = {English}, + author = {A. J. Chorin}, + journal = {Journal of Computational Physics}, + volume = {87}, + number = {2}, + pages = {496}, + year = {1990}, + issn = {00219991, 10902716} +} +@article{chorin:1993, + title = {Hairpin removal in vortex interactions. II}, + language = {English}, + author = {Chorin, A. J.}, + journal = {Journal of Computational Physics}, + volume = {107}, + number = {1}, + pages = {1-9}, + year = {1993}, + issn = {00219991, 10902716}, + abstract = {For pt.I, see ibid., vol.91, p.1 (1990). A vortex method in three dimensions is simplified through the removal of small folds (`hairpins'). The procedure is justified as a real-space renormalization, within a framework provided by recent results on the statistical equilibria of vortex filaments. An application to a vortex ring is carried out. Applications to other numerical methods as well as open questions are discussed.}, + doi = {10.1006/jcph.1993.1120} +} +@article{cottet:1996, + title = {Artificial viscosity models for vortex and particle methods}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Cottet, GH}, + Journal = {Journal Of Computational Physics}, + volume = {127}, + number = {2}, + pages = {299-308}, + year = {1996}, + issn = {00219991, 10902716}, + abstract = {The analysis of the truncation error produced by particle methods leads to artificial viscosity schemes. For vortex methods, they can be seen as eddy viscosity models, with anisotropic non-linear diffusion tensors. Numerical experiments on decaying incompressible 20 turbulence illustrate the efficiency of the method, and in particular the fact that the diffusion stops acting in large coherent eddies. For compressible flows, this approach allows us to understand the oscillations produced by particle methods and to derive new artificial viscosity schemes. (C) 1996 Academic Press, Inc.}, + doi = {10.1006/jcph.1996.0176} +} + +@article{borue:1998, + title = {Local energy flux and subgrid-scale statistics in three-dimensional turbulence}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {Borue, V. and Orszag, SA}, + Journal = {Journal Of Fluid Mechanics}, + volume = {366}, + pages = {1-31}, + year = {1998}, + issn = {00221120, 14697645}, + abstract = {Statistical properties of the subgrid-scale stress tensor, the local energy flux and filtered velocity gradients are analysed in numerical simulations of forced three-dimensional homogeneous turbulence. High Reynolds numbers are achieved by using hyperviscous dissipation. It is found that in the inertial range the subgrid-scale stress tensor and the local energy flux allow simple parametrization based on a tensor eddy viscosity. This parametrization underlines the role that negative skewness of filtered velocity gradients plays in the local energy transfer. It is found that the local energy flux only weakly correlates with the locally averaged energy dissipation rate. This fact reflects basic difficulties of large-eddy simulations of turbulence, namely the possibility of predicting the locally averaged energy dissipation rate through inertial-range quantities such as the local energy flux is limited. Statistical properties of subgrid-scale velocity gradients are systematically studied in an attempt to reveal the mechanism of local energy transfer.} +} +@article{mansfield:1998, + title = {A dynamic LES scheme for the vorticity transport equation: Formulation and a priori tests}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Mansfield, JR and Knio, OM and Meneveau, C.}, + journal = {Journal Of Computational Physics}, + volume = {145}, + number = {2}, + pages = {693-730}, + year = {1998}, + issn = {00219991, 10902716}, + abstract = {This work aims at the development of a Lagrangian large eddy simulation (LES) scheme. The scheme is based on the filtered vorticity transport equation and on modeling the effects of subfilter scale (SFS) velocity and vorticity fluctuations using a dynamic eddy diffusivity model. The dynamic implementation of the model relies on multiple filtering in order to determine model coefficients from the resolved data. The performance of the dynamic SFS model is examined using a priori tests that are based on direct numerical simulations of forced, homogeneous, isotropic turbulence. The tests show a fair correlation of the model with SFS convection of vorticity. In addition, the computed value of the dynamic model coefficient is in good agreement with predictions based on enstrophy balances. Finally, the direct numerical simulation data is used to compare a three-dimensional particle representation of the model with spectral evaluations. The tests show that when the particle representation is sufficiently resolved, the Lagrangian model predictions are in good agreement with spectral results. (C) 1998 Academic Press.}, + doi = {10.1006/jcph.1998.6051} +} + + +@article{mansfield:1999, + title = {Dynamic LES of colliding vortex rings using a 3D vortex method}, + language = {English}, + publisher = {ACADEMIC PRESS INC}, + author = {Mansfield, JR and Knio, OM and Meneveau, C.}, + Journal = {Journal Of Computational Physics}, + volume = {152}, + number = {1}, + pages = {305-345}, + year = {1999}, + issn = {00219991, 10902716}, + abstract = {A Lagrangian particle method is used to simulate the collision of coaxial vortex rings in three dimensions. The scheme combines a 3D, adaptive, viscous, vortex element method with a dynamic eddy viscosity model of the subfilter scale stresses. The vortex method is based on discretization of the vorticity field into Lagrangian vortex elements and transport of the elements along particle trajectories. The computations incorporate a mesh redistribution algorithm which creates new elements in regions of high strain and locally redistributes the vorticity field into a smaller number of elements when particles tend to cluster. The subfilter scale vorticity model consists of approximating the effect of unresolved vorticity stresses using a gradient-diffusion eddy viscosity model, following the development in Part I (J. R. Mansfield, O. M. Knio, and C. Meneveau, J. Comput. Phys. 145, 693 (1998)). Dynamic implementation of the model relies on determining model coefficients through test-filtering the Lagrangian particle representation of the filtered vorticity field. Computations of ring collisions show that, combined, the mesh redistribution scheme and subfilter scale model result in a robust scheme that can be extended into the late stages of evolution of the flow. In addition, it is shown that the Lagrangian LES scheme captures several experimentally observed features of the ring collisions, including turbulent breakdown into small-scale structures and the generation of small-scale radially propagating vortex rings. (C) 1999 Academic Press.}, + doi = {10.1006/jcph.1999.6258} +} + +@article{nicoud:1999, + title = {Subgrid-scale stress modelling based on the square of the velocity gradient tensor}, + language = {English}, + publisher = {SPRINGER}, + author = {Nicoud, F. and Ducros, F.}, + journal = {FLOW TURBULENCE AND COMBUSTION}, + volume = {62}, + number = {3}, + pages = {183-200}, + year = {1999}, + issn = {13866184, 15731987}, + abstract = {A new subgrid scale model is proposed for Large Eddy Simulations in complex geometries. This model which is based on the square of the velocity gradient tensor accounts for the effects of both the strain and the rotation rate of the smallest resolved turbulent fluctuations. Moreover it recovers the proper y(3) near-wall scaling for the eddy viscosity without requiring dynamic procedure. It is also shown from a periodic turbulent pipe flow computation that the model can handle transition.}, + doi = {10.1023/a:1009995426001} +} +@article{daeninck:2002, + title = {Simulation of three-dimensional bluff-body flows using vortex methods: from direct numerical simulation towards large-eddy simulation modelling}, + language = {English}, + publisher = {IOP}, + author = {Daeninck, G. and Ploumhans, P. and Winckelmans, G. S.}, + journal = {Journal of Turbulence}, + volume = {3}, + year = {2002}, + issn = {14685248}, + abstract = {Recent contributions to the three-dimensional vortex method for bluff-body flows are presented. The numerical method - a vortex method combined with a boundary element method - is briefly reviewed. It is applied to direct numerical simulation of the flow past a sphere (Re 300 and 1000). The on-going work to extend the method towards vortex-based large-eddy simulation for high Reynolds number flows is also presented. Preliminary results for the flow past a hemisphere are discussed.} +} + +@article{cottet:2002, + title = {A comparison of spectral and vortex methods in three-dimensional incompressible flows}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Cottet, GH and Michaux, B. and Ossia, S. and VanderLinden, G.}, + journal = {Journal Of Computational Physics}, + volume = {175}, + number = {2}, + pages = {702-712}, + year = {2002}, + issn = {00219991, 10902716, 01617389}, + abstract = {We present a comparison of the performance of vortex and pseudospectral methods in two reference flows: a homogeneous turbulent flow at low Reynolds number and a vortex reconnection case at a moderate Reynolds number. The results should contribute to a better understanding of the accuracy of vortex methods in both resolved and underresolved simulations. (C) 2002 Elsevier Science (USA).}, + doi = {10.1006/jcph.2001.6963} +} + +@article{cottet:2003, + title = {Vorticity dynamics and turbulence models for Large-Eddy Simulations}, + language = {eng}, + author = {Cottet, Georges Henri and Jiroveanu, Delia and Michaux, Bertrand}, + journal = {Mathematical Modelling and Numerical Analysis, Math. Model. Numer. Anal}, + volume = {37}, + number = {1}, + pages = {187-207}, + year = {2003}, + issn = {0764583x}, + abstract = {We consider in this paper the problem of finding appropriate models for Large Eddy Simulations of turbulent incompressible flows from a mathematical point of view. The Smagorinsky model is analyzed and the vorticity formulation of the Navier-Stokes equations is used to explore more efficient subgrid-scale models as minimal regularizations of these equations. Two classes of variants of the Smagorinsky model emerge from this approach: a model based on anisotropic turbulent viscosity and a selective model based on vorticity angles. The efficiency of these models is demonstrated by comparisons with reference results on decaying turbulence experiments.}, + doi = {10.1051/m2an:2003013} +} + +@article{koumoutsakos:2005, + title = {Multiscale flow simulations using particles}, + language = {English}, + publisher = {ANNUAL REVIEWS}, + author = {Koumoutsakos, P.}, + journal = {ANNUAL REVIEW OF FLUID MECHANICS}, + volume = {37}, + pages = {457-487}, + year = {2005}, + issn = {00664189, 15454479}, + abstract = {Flow simulations are one of the archetypal multiscale problems. Simulations of turbulent and unsteady separated flows have to resolve a multitude of interacting scales, whereas molecular phenomena determine the structure of shocks and the validity of the no-slip boundary condition. Particle simulations of continuum and molecular phenomena can be formulated by following the motion of interacting particles that carry the physical properties of the flow. In this article we review Lagrangian, multiresolution, particle methods such as vortex methods and smooth particle hydrodynamics for the simulation of continuous flows and molecular dynamics for the simulation of flows at the atomistic scale. We review hybrid molecular-continuum simulations with an emphasis on the computational aspects of the problem. We identify the common computational characteristics of particle methods and discuss their properties that enable the formulation of a systematic framework for multiscale flow simulations.}, + doi = {10.1146/annurev.fluid.37.061903.175753} +} + + + +@article{winckelmans:2005, +title = {{Vortex methods and their application to trailing wake vortex simulations}}, +author = {Winckelmans, Gr\'{e}goire and Cocle, Roger and Dufresne, Louis and Capart, Rapha\"{e}l}, +doi = {10.1016/j.crhy.2005.05.001}, +keywords = {direct numerical,lagrangian methods,large-eddy simulation,mots-cl\'{e}s,m\'{e}thodes de particules tourbillon,m\'{e}thodes lagrangiennes,m\'{e}thodes particules-grille,simulation,simulation des grandes \'{e}chelles,simulation num\'{e}rique directe,turbulent flows,unsteady flows,vortex particle methods,vortex-in-cell methods,\'{e}coulements instationnaires,\'{e}coulements turbulents}, +pages = {467--486}, +volume = {6}, +year = {2005}, +journal ={C. R. Physique} +} + +@article{jeanmart:2007, + title = {Investigation of eddy-viscosity models modified using discrete filters: A simplified "regularized variational multiscale model" and an "enhanced field model"}, + language = {English}, + publisher = {AMER INST PHYSICS}, + author = {Jeanmart, H. and Winckelmans, G.}, + journal = {Physics Of Fluids}, + volume = {19}, + number = {5}, + pages = {-}, + year = {2007}, + issn = {10706631, 10897666}, + abstract = {Subgrid-scale (SGS) models for large-eddy simulation (LES) having the formalism of an effective eddy-viscosity model, but that operates on a modified velocity field, are further evaluated and new ones are proposed. The modified field is obtained using regular filtering of the LES field carried out in physical space. This is actually done by using a discrete and compact operator (only using nearest neighbors values), eventually iterated; this ensures that the proper filtering behavior is preserved, even for near wall points. The first model investigated here is inspired by the variational multiscale approach originally proposed by T. J. Hughes [Phys. Fluids 13, 505 (2001)]. Here, the modelling is simplified, leading to a SGS viscosity effect operating on the "small-scale LES field" that is obtained by subtracting the LES field from its filtered counterpart. Such a model (here called RVMM for short) was already proposed and partially evaluated {e.g., see G. S. Winckelmans and H. Jeanmart [Direct and Large-Scale Eddy Simulation IV (Kluwer, Dordrecht, 2001)] and H. Jeanmart and G. S. Winckelmans (CTR Proceedings of the Summer Program, 2002), the "model M2" of A. W. Vreman [Phys. Fluids 15, L61 (2003)], the "high-pass filtered Smagorinsky model" of S. Stolz [Direct and Large-Eddy Simulation V (Kluwer, Dordrecht, 2004) and Phys. Fluids 17, 065103 (2005)]}. The other model investigated here is an "enhanced field model" (EFM). The SGS viscosity model then operates on a LES field that is artificially enhanced at the small scales; that obtained by adding to the LES field the small-scale field. The two model families are presented in a unified way; they have a behavior that combines viscous and hyperviscous effects, while remaining simple and practical. They however do not naturally have the proper y(3) near wall behavior for the SGS dissipation; hence, they need some near wall damping. To ensure the proper near-wall behavior, we use here the dynamic procedure (self-consistent for each model). The performance of both models is compared to that of other models (also dynamic): the Smagorinsky model, hyperviscosity models, and a hybrid model combining explicitly a Smagorinsky term and a hyperviscosity term. The cases here investigated are LES of decaying isotropic turbulence starting at Re-lambda=90 and LES of turbulent channel flow at Re-tau=395. A good behavior of the RVMM and EFM, as compared to the others, is observed in all cases. They constitute an easily implemented and better alternative than the dynamic Smagorinsky model. (C) 2007 American Institute of Physics.}, + doi = {10.1063/1.2728935} +} +@article{yokota:2007, + title = {Calculation of isotropic turbulence using a pure Lagrangian vortex method}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Yokota, R. and Sheel, T. K. and Obi, S.}, + journal = {Journal Of Computational Physics}, + volume = {226}, + number = {2}, + pages = {1589-1606}, + year = {2007}, + issn = {10902716, 00219991}, + abstract = {The vortex method is applied to the calculation of a decaying homogeneous isotropic turbulence of Re-lambda = 25,50 and the results are compared with a spectral method calculation. Vortex method calculations were accelerated by the use of a fast multipole method for periodic boundary conditions. The core spreading method and particle strength exchange were selected as the viscous diffusion scheme. The effect of spatial resolution was examined along with Reynolds number dependence and the effect of spatial adaption of elements. (c) 2007 Elsevier Inc. All rights reserved.}, + doi = {10.1016/j.jcp.2007.06.003} +} +@article{cocle:2009, + author = {Cocle, R. and Bricteux, L. and Winckelmans, G.}, + title = {Scale dependence and asymptotic very high Reynolds number spectral behavior of multiscale subgrid models}, + language = {English}, + publisher = {American Institute of Physics}, + journal = {Physics of Fluids}, + volume = {21}, + number = {8}, + pages = {-}, + year = {2009}, + issn = {10706631, 10897666}, + abstract = {This paper investigates the spectral response of recent multiscale subgrid models, all of eddy viscosity type, in large-eddy simulation (LES) of fully developed turbulence, from moderate to very high Reynolds (Re) number. The objective of this work is to provide useful results about the behavior of the subgrid scale (SGS) models and, in particular, their asymptotic behavior. Such information is indeed important for practitioners using LES to simulate truly high Reynolds number flows. Specifically, we consider LES of homogeneous isotropic turbulence at very high Re and where the LES cutoff (here the grid Δ) is taken well into the inertial range (i.e., Δ/η≥100 with η the Kolmogorov scale). Large LES grids (1283 and 2563) are also used in order to compare and attain the true asymptotic behavior of each SGS model, something not fully observable in LES on smaller grids. An analysis is also carried out to obtain the scale dependence of each model coefficient in the viscous range of turbulence using LES run on several grids and compared to direct numerical simulation. The results provide C for each model and for various Δ/ η. A convenient fit then also provides C/C∞ as a function of Δ/η, where C∞ is the asymptotic coefficient. The comparisons are supported using the evolution of resolved energy (global and spectrum), resolved enstrophy, and effective dissipation. It is shown that the multiscale models acting on the high wavenumber part of the LES field are indeed able to provide a significant k-5/3 inertial subrange, yet it is always followed by an energy pileup effect also called "bottleneck." This effect is also characterized for the various models. © 2009 American Institute of Physics.}, + doi = {10.1063/1.3194302} +} + +@article{rasmussen:2010, + title = {Discrete vortex method simulations of the aerodynamic admittance in bridge aerodynamics}, + author = {J. T. Rasmussen and M. M. Hejlesen and A. Larsen and J-H. Walther}, + journal = {Journal of Wind Engineering and Industrial Aerodynamics}, + volume = {98}, + number = {12}, + pages = {754-766}, + year = {2010}, + issn = {18728197, 01676105}, + abstract = {We present a novel method for the simulation of the aerodynamic admittance in bluff body aerodynamics. The method introduces a model for describing oncoming turbulence in two-dimensional discrete vortex method simulations by seeding the upstream flow with vortex particles. The turbulence is generated prior to the simulations and is based on analytic spectral densities of the atmospheric turbulence and a coherence function deï¬ning the spatial correlation of the flow. The method is validated by simulating the turbulent flow past a flat plate and past the Great Belt East bridge. The results are generally found in good agreement with the potential flow solution due to Liepmann.}, + doi = {10.1016/j.jweia.2010.06.011} +} +@article{kleinhans:2010, + title = {Synthetic Turbulence Models for Wind Turbine Applications}, + language = {English}, + publisher = {SPRINGER-VERLAG BERLIN}, + author = {Kleinhans, D. and Friedrich, R. and Schaffarczyk, A. P. and Peinke, J.}, + journal = {Progress In Turbulence III}, + volume = {131}, + pages = {111-114}, + year = {2010}, + issn = {09308989}, + isbn = {9783642022241}, + abstract = {Wind energy converters such as wind turbines permanently work in the atmospheric boundary layer. For the modelling of the dynamics and for the optimisation of design and material of wind turbines synthetic models for atmospheric turbulence are applied already for a long time. The main purpose of these models is to provide fast and efficient methods for numerical simulation of random fields, that show some characteristic features of atmospheric turbulence. Typically they only have a partial connection to the fundamental equations of fluid dynamics. After a short overview summarizing widespread models by Veers and Mann, that are based on the simulation of random fields in the Fourier domain, advanced models for the simulation of velocity fields are discussed.} +} +@article{chatelain:2013, + title = {Large Eddy Simulation of Wind Turbine Wakes}, + language = {English}, + publisher = {SPRINGER}, + author = {P. Chatelain and S. Backaert and G. Winckelmans and S. Kern}, + journal = {Flow Turbulence And Combustion}, + volume = {91}, + number = {3}, + pages = {587-605}, + year = {2013}, + issn = {13866184, 15731987}, + abstract = {We present the coupling of a vortex particle-mesh method with immersed lifting lines for the Large Eddy Simulation of wind turbine wakes. The method relies on the Lagrangian discretization of the Navier-Stokes equations in vorticity-velocity formulation. Advection is handled by the particles while the mesh allows the evaluation of the differential operators and the use of fast Poisson solvers. We use a Fourier-based fast Poisson solver which simultaneously allows unbounded directions and inlet/outlet boundaries. The method also allows the feeding of a turbulent incoming flow. We apply this methodology to the study of large scale aerodynamics and wake behavior of tandem wind turbines. We analyze the generators performance, unsteady power, loads and aerodynamics they are subjected to. The average flow field of the wakes is also computed and turbulence statistics are extracted. In particular, we investigate the influence of the type of turbulent inflow used-precomputed or synthetic-, and study wake meandering.}, + doi = {10.1007/s10494-013-9474-8} +} + +@article{devissher:2013, + title = {Aircraft Vortices in Stably Stratified and Weakly Turbulent Atmospheres: Simulation and Modeling}, + language = {English}, + publisher = {AMER INST AERONAUT ASTRONAUT}, + author = {De Visscher, I. and Bricteux, L. and Winckelmans, G.}, + journal = {AIAA Journal}, + volume = {51}, + number = {3}, + pages = {551-566}, + year = {2013}, + issn = {00011452, 1533385x}, + abstract = {This study investigates the influence, on aircraft wake vortex behavior, of atmospheres that are stably stratified (neutral to very strong) and weakly turbulent, by means of large-eddy simulations at very high Reynolds number and on relatively fine grids. The atmospheric fields are first generated using large-eddy simulations of forced and stratified turbulence reaching a statistically stationary state. The obtained fields are shown to be realistic and consistent with the literature. A pair of counter-rotating vortices, with relatively tight cores, is then put in the obtained fields and evolved. The evolution of the wake vortex topology, transport, and decay is analyzed in depth by measuring the wake vortex characteristics in all cross planes. The vortex transport and deformation are related to the stratification and turbulence levels. Stratification combined with weak turbulence is seen to strongly affect the Crow instability development. Different decay mechanisms are identified, related to the interactions with the turbulence, the turbulent baroclinic vorticity, and/or between the vortices themselves. Finally, improved simplified models of vortex altitude evolution and of vortex decay (with two phases) are proposed and calibrated on the present results. They yield good agreement with the large-eddy simulation results and are usefully integrated in our operational models.}, + doi = {10.2514/1.J051742} +} + +@article{yokota:2011, + title = {Vortex methods for the simulation of turbulent flows: review}, + language = {English}, + publisher = {Japan Society of Mechanical Engineers}, + author = {R. Yokota and S. Obi}, + journal = {Journal of Fluid Science and Technology}, + volume = {6}, + number = {1}, + pages = {14-29}, + year = {2011}, + issn = {18805558}, + abstract = {Vortex methods are a group of Lagrangian and semi-Lagrangian methods based on the vorticity-streamfunction or vorticity-velocity formulation of the Navier-Stokes equation, and provide an interesting alternative to grid based methods for external flows dominated by unsteady vortical motion. In the present review article, we will assess the advantages and disadvantages of vortex methods for the simulation of incompressible turbulent flows, based on the speed and accuracy benchmarks that have been performed recently. Our goal is to objectively and quantitatively evaluate the performance of this non-standard method, by directly comparing it’s speed and accuracy against finite difference and pseudo-spectral DNS codes under identical calculation conditions. We also present examples of vortex methods in engineering applications of turbulent flows.} +} + +@CONFERENCE{sale:2014, + author = {D. Sale and A. Aliseda and Y. Lic}, + title = {Simulation of Hydrokinetic Turbines in Turbulent Flow Using Vortex Particle Methods}, + booktitle = {Proceedings of the 2nd Marine Energy Technology Symposium: METS2014-April 15-18, 2014, Seattle, WA}, + year = {2014}, + otherinfo = {http://hdl.handle.net/10919/49216} +} +@incollection{backaert:2014, +author={S. Backaert and P. Chatelain and G. Winckelmans and I. De Visscher}, +title={Vortex Particle-Mesh Simulations of Atmospheric Turbulence Effects on Wind Turbine Blade Loading and Wake Dynamics}, +year={2014}, +isbn={978-3-642-54695-2}, +booktitle={Wind Energy - Impact of Turbulence}, +volume={2}, +series={Research Topics in Wind Energy}, +editor={M. H{\"o}lling and J. Peinke and S. Ivanell}, +doi={10.1007/978-3-642-54696-9_20}, +url={http://dx.doi.org/10.1007/978-3-642-54696-9_20}, +publisher={Springer Berlin Heidelberg}, +pages={135-140}, +language={English} +} + +@article{thormann:2014, + title = {Decay of homogeneous, nearly isotropic turbulence behind active fractal grids.}, + author = {A. Thormann and C. Meneveau}, + journal = {Physics of Fluids}, + volume = {26}, + number = {2}, + pages = {1}, + year = {2014}, + issn = {10706631, 10897666}, + abstract = {The study of decaying isotropic turbulent flow is an important point of reference for turbulence theories and numerical simulations. For the past several decades, most experimental results appear to favor power-law decay with exponents between -1.2 and -1.4, approximately. More recently, studies of fractal-generated turbulence with multi-scale passive grids have shown increased Reynolds numbers and exponential or very fast power-law decays following an increase of kinetic energy close to the grid. Other recent studies have confirmed that such non-classical decay is limited to the region near the grid. In order to generate turbulence with multi-scale injection of kinetic energy at more elevated Reynolds numbers and with more spatially homogeneous distributions than available in prior experiments, we use an activegrid consisting of winglets with fractal shapes. We consider various types of fractal winglets, namely, Sierpinski triangle, space-filling squares, and Apollonian gasket type fractal shapes. Regular non-fractal winglets are also considered. Passive fractal grids are studied by keeping the winglets locked in place. Data are acquired using X-wire thermal anemometry and the decay is analyzed between 15 < x/M < 50 (M is the mesh-size). Results exhibit power-law decay with decay exponent approximately between -1.0 and -1.3. The precise values of the decay exponent and the coefficient Cε = εℓ/urms³ depend on the geometry of the initial condition, although it is not possible to discern systematic or monotonic trends with respect to ReMsub>λ, component anisotropy, grid fractal dimension, or blockage ratio.} +} + +@book{progressinturbulence:book, + title = {Progress In Turbulence III}, + publisher = {SPRINGER-VERLAG BERLIN}, + author = {Kleinhans, D. and Friedrich, R. and Schaffarczyk, A. P. and Peinke, J.}, + volume = {131}, + year = {2010}, + issn = {09308989}, + language = {English}, + isbn = {9783642022241} +} + +@book{impactofturbulence:book, +title={Wind Energy - Impact of Turbulence}, +volume={2}, +series={Research Topics in Wind Energy}, +editor={M. H{\"o}lling and J. Peinke and S. Ivanell}, +doi={10.1007/978-3-642-54696-9_20}, +url={http://dx.doi.org/10.1007/978-3-642-54696-9_20}, +publisher={Springer Berlin Heidelberg}, +year={2014}, +isbn={978-3-642-54695-2}, +language={English} +} + +@article{simley:2014, + title = {Investigation of the Impact of the Upstream Induction Zone on LIDAR Measurement Accuracy for Wind Turbine Control Applications using Large-Eddy Simulation}, + language = {English}, + author = {E. Simley and L. Y. Pao and P. Gebraad and M. Churchfield}, + journal = {Journal of Physics: Conference Series}, + volume = {524}, + number = {1}, + pages = {012003}, + year = {2014}, + issn = {17426588, 17426596}, + abstract = {Several sources of error exist in lidar measurements for feedforward control of wind turbines including the ability to detect only radial velocities, spatial averaging, and wind evolution. This paper investigates another potential source of error: the upstream induction zone. The induction zone can directly affect lidar measurements and presents an opportunity for further decorrelation between upstream wind and the wind that interacts with the rotor. The impact of the induction zone is investigated using the combined CFD and aeroelastic code SOWFA. Lidar measurements are simulated upstream of a 5 MW turbine rotor and the true wind disturbances are found using a wind speed estimator and turbine outputs. Lidar performance in the absence of an induction zone is determined by simulating lidar measurements and the turbine response using the aeroelastic code FAST with wind inputs taken far upstream of the original turbine location in the SOWFA wind field. Results indicate that while measurement quality strongly depends on the amount of wind evolution, the induction zone has little effect. However, the optimal lidar preview distance and circular scan radius change slightly due to the presence of the induction zone.}, + doi = {10.1088/1742-6596/524/1/012003} +} + +% --------------------------------------------------------------------------------} +% --- FAST MULTIPOLE METHOD FMM - TREE code +% --------------------------------------------------------------------------------{ +@article{cline:2010, +author = {S. Cline and C. Crawford}, +journal = {AIAA Aerospace Sciences Meeting}, +volume = {48th}, +title = {{Comparison of Potential Flow Wake Models for Horizontal-Axis Wind Turbine Rotors}}, +year = {2010} +} + +@MASTERSTHESIS{cline:2011, + author = {Cline, S.}, + title = {Potential Flow Modelling of Wind Turbines}, + school = {University of Victoria}, + year = {2011}, +} + + +@techreport{multipoleshortcourse, +author = {R. Beatson and L. Greengard}, +institution = {University of Canterbury - New York University}, +title = {{A short course on fast multipole methods}}, +year ={2012} +} + +@article{greengard:1987, + title = {A FAST ALGORITHM FOR PARTICLE SIMULATIONS}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Greengard, L. and Rokhlin, V.}, + journal = {Journal of computational physics}, + volume = {73}, + number = {2}, + pages = {325-348}, + year = {1987}, + issn = {00219991, 10902716}, + abstract = {An algorithm is presented for the rapid evaluation of the potential and force fields in systems involving large numbers of particles whose interactions are Coulombic or gravitational in nature. For a system of N particles, an amount of work of the order O (N2) has traditionally been required to evaluate all pairwise interactions, unless some approximation or truncation method is used. The algorithm of the present paper requires an amount of work proportional to N to evaluate all interactions within roundoff error, making it considerably more practical for large-scale problems encountered in plasma physics, fluid dynamics, molecular dynamics, and celestial mechanics} +} +@ARTICLE{salmon:1994, + author = {J. K. Salmon and M.S. Warren and G.S. Winckelmans}, + title = {Fast parallel tree codes for gravitational and fluid dynamical N-body problems}, + journal = {Intl. J. Supercomput. Appl. High Perf. Comp.}, + year = {1994}, + volume = {8}, + number = {2}, + pages = {192-142}, +} +@article{salmon:1996, +author = {Salmon, J K and Winckelmans, G S and Louvain, Universite Catholique De and Leonard, A and Warren, M S and Astrophysics, Theoretical and Laboratories, Los Alamos National and Alamos, Los and Jodoin, B and Sherbrooke, Universite De}, +pages = {225--240}, +title = {{Application of Fast Parallel and Sequential Tree Codes to Computing Three-Dimensional Flows with the Vortex Element and Boundary Element Methods}}, +volume = {1}, +year = {1996} +} + + +@INPROCEEDINGS{spalart:1981, + title = {Computation of separated flows by a vortex-tracing algorithm}, + author = {Spalart, P. R. and Leonard, A.}, + booktitle = {14th Fluid and Plasma Dynamics Conference}, + year = {1981}, + abstract = {Numerical solutions for two-dimensional, time-dependent, separated flows around bodies are obtained, using a new version of the vortex method. This method provides an efficient representation of flows involving large regions of separation. The modifications incorporated in the new version, which improve its accuracy, versatility, and computing speed, are described. The computer cost is only of the order of the 3/2 power on N, instead of N-squared, for each step with N vortices. Arbitrary shapes can be treated; a conformal mapping is not required. Special attention is paid to the viscous character of the solution and to the accurate computation of the pressure distribution at the body surface. The vortex solution for the outer flow is coupled to an inner solution for the attached part of the boundary layer. Numerical results are presented for several bluff bodies exhibiting dependence on Reynolds number, for stationary airfoils under steady or transient conditions and for oscillating airfoils, including dynamic stalls. These results are compared with other available results, analytical or experimental, and demonstrate the enhanced reliability and accuracy of the improved method.} +} +@article{lambert:1996, + title = {A multipole-based algorithm for efficient calculation of forces and potentials in macroscopic periodic assemblies of particles}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Lambert, CG and Darden, TA and Board, JA}, + journal = {Journal Of Computational Physics}, + volume = {126}, + number = {2}, + pages = {274-285}, + year = {1996}, + issn = {00219991, 10902716}, + abstract = {A new and efficient algorithm based on multipole techniques is presented which calculates the electrostatic forces and potentials in macroscopic periodic assemblies of particles, The fast multipole algorithm (FMA) can be used to compute forces within the n-particle unit cell in O(n) time. For the cubic lattice, forces due to a 3(k) x 3(k) x 3(k) lattice of images of the unit cell, containing 3(3k) n particles, can be computed in O(nk(2) + k(3) log k) time to arbitrary precision. The algorithm was readily added onto an existing FMA implementation, and computational results are presented. Accurate electrostatic computations were done on a 3(8) x 3(8) x 3(8) region of 100000-particle unit cells, giving a volume of 28 quadrillion particles at less than a twofold cost over computing the forces and potentials in the unit cell alone. In practice, a k = 4 ... 6 simulation approximates the true infinite lattice Ewald sum forces (including the shape-dependent dipole correction) to high accuracy, taking 25-30 % more time to compute than only the unit cell. The method extends to noncubic unit cell shapes, and noncubic macroscopic shapes. Simple code modifications allowed computation of forces within macroscopic spheres and ellipsoids, and within near-infinite square, circular, and elliptical surfaces formed of unit cubes replicated along Two of the three axes. In addition to efficient periodic simulations, the method provides a powerful tool to study limiting behavior of various finite crystal shapes, as well as surface phenomena in molecular dynamics simulations. (C) 1996 Academic Press, Inc.}, + doi = {10.1006/jcph.1996.0137} +} + + + +@article{willis:2007, + title = {A combined pFFT-multipole tree code, unsteady panel method with vortex particle wakes}, + language = {eng}, + author = {Willis, David J. and Peraire, Jaime and White, Jacob K.}, + journal = {International Journal for Numerical Methods in Fluids, Int. J. Numer. Methods Fluids}, + volume = {53}, + number = {8}, + pages = {1399-1422}, + year = {2007}, + issn = {10970363, 02712091}, + abstract = {Potential flow solvers for 3-D aerodynamic flows are commonly used in industrial applications. Two main difficulties preventing the even more widespread use of these codes are the limitations on the number of discretization elements and the user expertise and effort required to specify the wake location. In the paper we present an automatic wake generation strategy for a potential flow solver, and accelerate the method using a pFFT-Fast Multipole Tree algorithm. The combined method can be used to simulate both steady and unsteady flows. The steady state solution is achieved by running an unsteady flow simulation until it reaches a steady state. Computation results are given to demonstrate that the method is fast enough to automatically simulate entire heaving and flapping wing crafts in under and hour on a desktop computer. Copyright © 2006 John Wiley \& Sons, Ltd.}, + doi = {10.1002/fld.1240} +} + + +@TECHREPORT{mercier:2014, + author = {P. Mercier}, + title = {Fast vortex method for large scale wind energy simulations}, + institution = {Institut Sup\'erieur de l'A\'eronautique et de l'Espace}, + year = {2014}, + otherinfo = {Student Project} +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - VORTEX IN CELL - HIGH ORDER +% --------------------------------------------------------------------------------{ +@article{birdsall:1969, + title = {Clouds-in-clouds, clouds-in-cells physics for many-body plasma simulation}, + language = {English}, + author = {Birdsall, C. K. and Fuss, D.}, + journal = {Journal of Computational Physics}, + volume = {3}, + number = {4}, + pages = {494-511}, + year = {1969}, + issn = {00219991, 10902716}, + abstract = {A clouds-interacting-with-clouds, clouds-in-cells method (CIC) is presented for many-body nonlinear plasma problems. Density and force are obtained by assuming that the particles have finite size, are tenuous, and may pass through one another; the particles are thus called clouds. They obey a Coulomb force (∼1/r or 1/r2) when separated and a linear force (∼r) when overlapping, allowing simple harmonic oscillations at small separation. CIC is contrasted with the zero-size particle and nearest-grid-point approach, ZSP-NGP.} +} +@article{christiansen:1973, + title = {Numerical simulation of hydrodynamics by the method of point vortices}, + language = {English}, + author = {Christiansen}, + journal = {Journal of Computational Physics}, + volume = {13}, + number = {3}, + pages = {363-379}, + year = {1973}, + issn = {00219991, 10902716}, + abstract = {The motion of a two-dimensional incompressible inviscid and homogeneous fluid can be thought of in terms of the gradual evolution of a continuous vorticity distribution, each scalar vortex element interacting with every other by an instantaneous action at a distance law. This model can be expressed in Hamiltonian form and that it shows many analogies with similar systems in plasma physics. In addition to the standard mesh techniques, a computational description can be obtained if the continuous vorticity distribution is replaced by a finite set of point vortices interacting through a stream function which satisfies Poisson's equation. The point vortices move in a velocity field given on a Cartesian mesh such that there is a close resemblance to particle models used in plasma simulations. The point vortex model is presented with a calculation on a test model and the sources of numerical errors are explained. It is concluded that the point vortex model is useful and versatile for a variety of problems in hydrodynamics as well as in plasma physics} +} + +@article{couet:1981, + title = {Simulation of three-dimensional incompressible flows with a vortex-in-cell method}, + language = {English}, + author = {Couet and Buneman and Leonard}, + journal = {Journal of Computational Physics}, + volume = {39}, + number = {2}, + pages = {305-328}, + year = {1981}, + issn = {00219991, 10902716}, + abstract = {A new method for the numerical simulation of three-dimensional incompressible flows is described. The authors' vortex-in-cell (VIC) method traces the motion of the vortex filaments in the velocity field which these filaments create. The velocity field is not calculated directly by the Biot-Savart law of interaction but by creating a mesh-record of the vorticity field, then integrating a Poisson's equation via the fast Fourier transform to generate a mesh-record of the velocity field. The computed scales of motion are assumed to be essentially inviscid. Results of tracing a periodic array of single vortex rings are compared with a Green's function calculation. The agreement is very good} +} +@article{cottet:1987vic, + title = {Convergence of a vortex in cell method for the two-dimensional {E}uler equations}, + publisher = {amer mathematical soc}, + author = {Cottet, G}, + journal = {mathematics of computation}, + volume = {49}, + number = {180}, + pages = {407-425}, + year = {1987}, + issn = {00255718, 10886842}, + abstract = {a vortex in cell method in which the assignment function used to compute vorticity values at the grid points from particles is twice differentiable, while the velocity need only be continuous, is described. the author proves an error estimate for the velocity in terms of the meshsize, the interparticle distance and the size of the computational domain} +} + +@article{brecht:1990, + title = {Vortex-in-cell calculations in three dimensions}, + language = {English}, + author = {Brecht and Ferrante}, + journal = {Computer Physics Communications}, + volume = {58}, + number = {1-2}, + pages = {25-54}, + year = {1990}, + issn = {00104655, 18792944}, + abstract = {The traditional vortex-in-cell approach has been extended to three dimensions. In this paper the authors discuss the numerical techniques used in constructing the three dimensional vortex-in-cell code, VINCE3D. The discussion covers the equations solved, the numerical methods used, and boundary conditions which were applied. It is found that the code reproduces linear theory and the scaling inherent in the equations being solved. A discussion of the strengths and weaknesses of this formulation is presented. It is found that the code is robust even in situations where the Boussinesq approximation must be abandoned}, + doi = {10.1016/0010-4655(90)90133-L} +} + + +@article{bartholomew:1988, + title = {Velocity field estimates and three-dimensional discrete vortex methods}, + language = {English}, + author = {Bartholomew, R.W.}, + journal = {Computer Methods in Applied Mechanics and Engineering}, + volume = {71}, + number = {1}, + pages = {15-29}, + year = {1988}, + issn = {03742830}, + abstract = {A general three-dimensional vortex-in-cell algorithm is presented. The algorithm uses vortex spreading and velocity interpolation techniques which are performed in real space. This allows the use of an efficient and portable solver for the elliptic boundary value problem that is a result of the formulation. The trade-off that is made is that the representation of the velocity field used to update the position of the vortex markers becomes a sensitive issue. This is illustrated through a number of numerical examples and suggestions are made for the improvement of the velocity field representation.} +} +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - POISSON SOLVER +% --------------------------------------------------------------------------------{ +@article{chatelain:2010, + title = {A Fourier-based elliptic solver for vortical flows with periodic and unbounded directions}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {P. Chatelain and P. Koumoutsakos}, + Journal = {Journal Of Computational Physics}, + volume = {229}, + number = {7}, + pages = {2425-2431}, + year = {2010}, + issn = {00219991, 10902716}, + abstract = {We present a computationally efficient, adaptive solver for the Solution of the Poisson and Helmholtz equation used in flow simulations in domains with combinations Of unbounded and periodic directions The method relies on using FFTs oil art extended domain and it is based oil the method proposed by Hockney and Eastwood for plasma simulations The method is well-suited to problems with dynamically growing domains and in particular flow simulations using vortex particle methods. The efficiency of the method is demonstrated in simulations of trading vortices (C) 2010 Elsevier Inc All rights reserved}, + doi = {10.1016/j.jcp.2009.12.035} +} +@article{chatelain:2008, +author = {P. Chatelain and A. Curioni and M. Bergdorf and D. Rossinelli and W. Andreoni and P. Koumoutsakos}, +doi = {10.1016/j.cma.2007.11.016}, +journal = {Methods}, +keywords = {particle method,vortex method,wake vortices}, +pages = {1296--1304}, +title = {{Billion vortex particle direct numerical simulations of aircraft wakes}}, +volume = {197}, +year = {2008} +} + +@article{hejlesen:2013, + title = {A high order solver for the unbounded Poisson equation}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {M. N. Hejlesen and J. T. Rasmussen and P. Chatelain and J-H. Walther}, + journal = {Journal of Computational Physics}, + volume = {252}, + pages = {458-467}, + year = {2013}, + issn = {00219991, 10902716}, + abstract = {A high order converging Poisson solver is presented, based on the Greenʼs function solution to Poissonʼs equation subject to free-space boundary conditions. The high order convergence is achieved by formulating regularised integration kernels, analogous to a smoothing of the solution field. The method is extended to directly solve the derivatives of the solution to Poissonʼs equation. In this way differential operators such as the divergence or curl of the solution field can be solved to the same high order convergence without additional computational effort. The method, is applied and validated, however not restricted, to the equations of fluid mechanics, and can be used in many applications to solve Poissonʼs equation on a rectangular unbounded domain.}, + doi = {10.1016/j.jcp.2013.05.050} +} + +@article{swartztrauber:1975, + title = {Efficient FORTRAN subprograms for the solution of elliptic partial differential equations (Fishpack)}, + language = {English}, + author = {Swartztrauber, P. and Sweet, R.}, + journal = {SIGNUM Newsletter}, + volume = {10}, + number = {4}, + pages = {30}, + year = {1975}, + issn = {01635778, 15580237}, + abstract = {The purpose of this paper is to describe technical note, NCAR TN/IA-109, which is intended to provide scientists with a package of computer programs which make use of current methods for solving elliptic partial differential equations. Five subroutines for solving a Helmholtz equation in various coordinate systems are described: they are, Cartesian coordinates x and y; polar coordinates r and θ; cylindrical coordinates r and z; interior spherical coordinates r and θ; and surface spherical coordinates θ and 0. An extensive description of two subroutines which can be used to solve elliptic partial differential equations that cannot be solved by the other programs is given.} +} +@article{anderson:1986method, + title={A method of local corrections for computing the velocity field due to a distribution of vortex blobs}, + author={C. R. Anderson}, + journal={Journal of Computational Physics}, + volume={62}, + number={1}, + pages={111--123}, + year={1986}, + publisher={Elsevier}} + +@PHDTHESIS{almgren:1991:phdthesis, + author = {A. Almgren}, + title = {A Fast Adaptive Vortex Method Using Local Correction}, + school = {University of California at Berkeley}, + year = {1991}, + otherinfo = {Center for Pure and Applied Mathematics Technical Report 527} +} + + +@article{adams:1989, + title = {MUDPACK: multigrid portable FORTRAN software for the efficient solution of linear elliptic partial differential equations}, + language = {English}, + author = {Adams, J. C.}, + journal = {Applied Mathematics and Computation}, + volume = {34}, + number = {2}, + pages = {113-146}, + year = {1989}, + issn = {00963003, 18735649}, + abstract = {MUDPACK is a package of portable FORTRAN subprograms which use multigrid iteration for solving real or complex elliptic partial differential equations. The solution regions are rectangles in two dimensions and boxes in three dimensions. Any combination of periodic, Dirichlet, and mixed-derivative boundary conditions is allowed. The equations are automatically discretized using second-order finite differencing. The package vectorizes on Cray computers. Examples are given which demonstrate ease of use, efficiency, and applicability to a wide range of problems.} +} + +@MISC{demmel:1996, + author = {J. Demmel}, + year = {1996}, + title = {{Solving the Discrete Poisson Equation using Jacobi, SOR, Conjugate Gradients and the FFT - Lectures 15 and 16}}, + institution = {U.C. Berkeley}, + note = {www.cs.berkeley.edu/~demmel/cs267/} +} + + + +@article{balls:2002, + title = {A finite difference domain decomposition method using local corrections for the solution of Poisson's equation}, + language = {English}, + publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, + author = {Balls, GT and Colella, P.}, + journal = {Journal Of Computational Physics}, + volume = {180}, + number = {1}, + pages = {25-53}, + year = {2002}, + issn = {00219991, 10902716}, + abstract = {We present a domain decomposition method for computing finite difference solutions to the Poisson equation with infinite domain boundary conditions. Our method is a finite difference analogue of Anderson's Method of Local Corrections. The solution is computed in three steps. First, fine-grid solutions are computed in parallel using, infinite domain boundary conditions on each subdomain. Second, information is transferred globally through a coarse-grid representation of the charge, and a global coarse-grid solution is found. Third, a fine-grid solution is computed on each subdomain using boundary conditions set with the global coarse solution, corrected locally with fine-grid information from nearby subdomains. There are three important features of our algorithm. First, our method requires only a single iteration between the local fine-grid solutions and the global coarse representation. Second, the error introduced by the domain decomposition is small relative to the solution error obtained in a single-grid calculation. Third, the computed solution is second-order accurate and only weakly dependent on the coarse-grid spacing and the number of subdomains. As a result of these features, we are able to compute accurate solutions in parallel with a much smaller ratio of communication to computation than more traditional domain decomposition methods. We present results to verify the overall accuracy, confirm the small communication costs, and demonstrate the parallel scalability of the method. (C) 2002 Elsevier Science (USA).}, + doi = {10.1006/jcph.2002.7068} +} + +@article{greenbaum:1993, + title = {LAPLACE EQUATION AND THE DIRICHLET-NEUMANN MAP IN MULTIPLY CONNECTED DOMAINS}, + language = {English}, + publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, + author = {Greenbaum, A. and Greengard, L. and Mcfadden, GB}, + journal = {Journal Of Computational physics}, + volume = {105}, + number = {2}, + pages = {267-278}, + year = {1993}, + issn = {00219991, 10902716}, + abstract = {A variety of problems in materials science and fluid dynamics require the solution of Laplace's equation in multiply connected domains. Integral equation methods are natural candidates for such problems, since they discretize the boundary alone, require no special effort for free boundaries, and achieve superalgebraic convergence rates on sufficiently smooth domains in two space dimensions, regardless of shape. Current integral equation methods for the Dirichlet problem, however, require the solution of M independent problems of dimension N, where M is the number of boundary components and N is the total number of points in the discretization. The authors present a new boundary integral equation approach, valid for both interior and exterior problems, which requires the solution of a single linear system of dimension N+M. They solve this system by making use of an iterative method (GMRES) combined with the fast multipole method for the rapid calculation of the necessary matrix vector products.}, + doi = {10.1006/jcph.1993.1073} +} +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - AND CFD +% --------------------------------------------------------------------------------{ +@article{ould:2000, + title = {Blending finite-difference and vortex methods for incompressible flow computations.}, + author = {Ould-Salihi, M. L. and Cottet, G. -H. and El Hamraoui, M.}, + journal = {SIAM Journal on Scientific Computing}, + volume = {22}, + number = {5}, + pages = {1665}, + year = {2000}, + issn = {10648275, 10957197}, + abstract = {We describe and illustrate numerical procedures that combine grid and particle solvers for the solution of the incompressible Navier­Stokes equations. These procedures include vortex in cell (VIC) and domain decomposition schemes. Numerical comparisons with pure finite-difference methods demonstrate the effectiveness of these techniques for various flow geometries, bounded or unbounded.} +} + +@article{stock:2010, + title = {Modeling rotor wakes with a hybrid OVERFLOW-vortex method on a GPU cluster}, + publisher = {American Institute of Aeronautics and Astronautics Inc.}, + author = {Stock, Mark J. and Gharakhani, Adrin and Stone, Christopher P.}, + journal = {28th AIAA Applied Aerodynamics Conference}, + pages = {2010-4553}, + year = {2010}, + isbn = {9781617389269}, + abstract = {The vortex core shed from rotorcraft blades maintains coherency - and thus dynamic relevance - many blade turns after its creation. This presents a challenge to traditional Eulerian computational methods, as fine grids are required to suppress numerical diffusion which would weaken the vortex cores after a small number of revolutions. Vortex methods have been used in the past to overcome these problems, as they require computational elements only in vorticity-containing regions, but suffer from greater computational cost per element. In the present work, we will solve these problems with a hybrid Eulerian-Lagrangian method for modeling rotor wakes. An Eulerian OVERFLOW overset grid method computes the near-body flow, while a Lagrangian particle vortex method tracks the wake. The vortex method uses an anisotropic LES model to handle subgrid-scale dissipation explicitly. The computational cost of vortex methods is alleviated by using a parallel adaptive treecode on a cluster of machines each with multi-core CPUs and multiple cost-efficient graphics processing units (GPUs). Simulations of a low-Re sphere, finite wing, and 4-bladed rotor model are presented and are validated by comparisons with computational and experimental data. © 2010 by Applied Scientific Research, Inc.} +} + + +@article{papadakis:2014, + title = {{In view of accelerating CFD simulations through coupling with vortex particle approximations}}, + language = {English}, + author = {G. Papadakis and S. G. Voutsinas}, + journal = {Journal of Physics: Conference Series}, + volume = {524}, + number = {1}, + pages = {012126}, + year = {2014}, + issn = {17426588, 17426596}, + abstract = {In order to exploit the capabilities of Computational Fluid Dynamics in aerodynamic design, the cost should be reduced without compromising accuracy and consistency. In this direction a hybrid methodology is formulated within the context of domain decomposition. The strategy is to choose in each sub-domain the best performing method. Close to solid boundaries a grid-based Eulerian flow solver is used while in the far field the flow is described in Lagrangian coordinates using particle approximations. Aiming at consistently including compressible effects, particles carry mass, dilatation, vorticity and energy and the complete set of conservation laws is solved in Lagrangian coordinates. At software level, the URANS solver MaPFlow is coupled to the vortex code GENUVP. In the present paper the two dimensional formulation is given alongside with validation tests around airfoils in steady and inherently unsteady conditions. It is verified that: purely Eulerian and hybrid simulations are equivalent; the Eulerian domain in the hybrid solver can be effectively restricted to a layer 1.5 chord lengths wide; significant cost reduction reaching up to 1:3 ratio is achieved.}, + doi = {10.1088/1742-6596/524/1/012126} +} +@PHDTHESIS{papadakis:phdthesis, + author = {Papadakis, Giorgos}, + title = {Development of a hybrid compressible vortex particle method and application to external problems including helicopter flows}, + school = {National Technical University of Athens}, + year = {2014}, +} + + +% --------------------------------------------------------------------------------} +% --- VORTEX METHODS - AEROELASTICITY +% --------------------------------------------------------------------------------{ +@article{manolas:2014, + title = {Assessment of 3D aerodynamic effects on the behaviour of floating wind turbines}, + language = {English}, + author = {Manolas, D. and Riziotis, V. and Voutsinas, S.}, + journal = {Journal of Physics: Conference Series}, + volume = {555}, + number = {1}, + pages = {012067}, + year = {2014}, + issn = {17426596, 17426588}, + abstract = {Current state-of-art models for floating wind turbines are built by merging separate modules addressing the four basic aspects leading to a compound hydro-servo-aero-elastic time domain solver. While current state-of-the-art models differ in many aspects, they all use the blade element momentum (BEM) aerodynamic modelling. Due to its low cost, BEM is the standard choice for design purposes. However the use of BEM entails several semi-empirical corrections and add-ons that need reconsideration and recalibration when new features appear. For floating wind turbines, the effect of the floater motions is such a new feature. In the present paper, this aspect is investigated by comparing BEM based results against 3D free-wake simulations. Deterministic as well as stochastic simulations are presented in pure aerodynamic and full aeroelastic context. It is confirmed that asymmetric inflow originating from yaw misalignment and shear give significant differences reflected on mean values and amplitudes.}, + doi = {10.1088/1742-6596/555/1/012067} +} + + +@article{riziotis:2011, + title = {Free-wake Aeroelastic Modelling of Swept Rotor Blades}, + author = {Riziotis, V. A. and Manolas, D. I. and Voutsinas, S. G. }, + journal = {European Wind Energy Conference and Exhibition 2011, {EWEC} 2011}, + year = {2011}, +} + + +@article{devaal:2012, + author={J. B. de Vaal and M. O. L. Hansen and T. Moan}, + title={Validation of a vortex ring wake model suited for aeroelastic simulations of floating wind turbines}, + journal={Journal of Physics: Conference Series}, + volume={555}, + number={1}, + pages={012025}, + url={http://stacks.iop.org/1742-6596/555/i=1/a=012025}, + year={2014}, + abstract={In order to evaluate aerodynamic loads on floating offshore wind turbines, advanced dynamic analysis tools are required. As a unified model that can represent both dynamic inflow and skewed inflow effects in it basic formulation, a wake model based on a vortex ring formulation is discussed. Such a model presents a good intermediate solution between computationally efficient but simple momentum balance methods and computationally expensive but complete computational fluid dynamics models. The model introduced is shown to be capable of modelling typical steady and unsteady test cases with reasonable accuracy.} +} + + +% --------------------------------------------------------------------------------} +% --- Distributed vortex elements +% --------------------------------------------------------------------------------{ +@article{basom:2011, +author = {B.J. Basom and M.D. Maughmer}, +title = {{Inviscid Analysis of Horizontal-Axis Wind Turbines Using Distributed Vorticity Elements}}, +year = {2011}, +journal={AIAA Aerospace Sciences Meeting} +} +@article{bramesfeld:2008, +author={G. Bramesfeld and M.D. Maughmer}, +title = {Relaxed-Wake Vortex-Lattive Method Using Distributed Vorticity Elements}, +doi = {10.2514/1.31665}, +journal ={Journal of aircraft}, +number = {2}, +volume = {45}, +year = {2008} +} + + + + + + +% --------------------------------------------------------------------------------} +% --- LIFTING LINE - THEORY and CODES +% --------------------------------------------------------------------------------{ +@TECHREPORT{ecnAWSM:2003, + author = {A. {van Garrel}}, + title = {Development of a wind turbine aerodynamics simulation module}, + institution = {ECN}, + year = {2003}, + number = {ECN-C--03-079} +} + +@ARTICLE{chattot:2002, + author = {J-J. Chattot}, + title = {Optimization of propellers using helicoidal vortex model}, + journal = {Computational Fluid Dynamics Journal}, + year = {2001} +} + +@ARTICLE{chattot:2002wt, + author = {J-J. Chattot}, + title = {Design and analysis of wind turbines using helicoidal vortex model}, + journal = {Computational Fluid Dynamics Journal}, + year = {2002} +} +@ARTICLE{schmitz:2005, + author = { S. Schmitz and J.-J. Chattot}, + title = {Influence of the vortical wake behind wind turbines using a coupled Navier-Stokes/vortex-panel methodology}, + journal = { Third MIT Conference on Computational Fluid and Solid Mechanics}, + year = {2005}, + pages={p832-836} +} + + + + +@PHDTHESIS{olsen:2001, + author = {A.S. Olsen}, + title = {Optimisation of propellers using the vortex-lattice method}, + school = {Technical University of Denmark - DTU}, + year = {2001} +} +@MASTERSTHESIS{reuventhesis, + author = {R. Shenkar}, + title = {Design and optimization of planar and non planar wind turbine blades using vortex methods}, + school = {Technical University of Denmark - DTU}, + year = {2010}, + month ={September} +} + +@MASTERSTHESIS{kloostermanthesis, + author = {M.H.M. Kloosterman}, + title = {Development of the Near Wake behind a Horizontal Axis Wind Turbine}, + school = {Delft University of Technology}, + year = {2009} +} + + + +@TECHREPORT{ecnAWSM:2011, + author = {F. Grasso and A. {van Garrel} and G. Schepers}, + title = {Development and Validation of Generalized Lifting Line Based Code for Wind Turbine Aerodynamics }, + institution = {ECN}, + year = {2011}, + number = {ECN-M--11-004} +} + +@ARTICLE{sant:2006, + author = {T. Sant and G. van Kuik and G.J.W. van Bussel}, + title = {Estimating the angle of attack from Blade pressure measurements on the NREL Phase VI rotor using a free wake vortex model: axial conditions}, + journal = {Wind energy}, + year = {2006}, + volume={9}, + pages={549-577} +} + +@PHDTHESIS{sant:2007, + author = {T. Sant}, + title = {Improving BEM-based aerodynamics models in Wind turbine design codes}, + school = {DU Wind - Delft University of Technology}, + year = {2007}, +} +@PHDTHESIS{crawford:2006, + author = {C. Crawford}, + title = {Advanced engineering models for wind turbines with application to the design of a coning rotor concept}, + school = {Trinity College, Department of Engineering, University of Cambridge}, + year = {2006} +} + +crawford advanced engineering models for wind turbines + +@ARTICLE{gupta:2005, + author = {S. Gupta and J.G. Leishman}, + title = {Comparison of momentum and vortex methods for the aerodynamic analysis of wind turbines}, + journal = {43rd AIAA Aerospace Scieces and Exhibit}, + year = {2005} +} + + +@MASTERSTHESIS{komninos:2008, + title = {Modeling considerations of the optimum rotor using vortex method}, + author = {Konstantinos Komninos}, + school = {DTU}, + year = {2007}, + otherinfo = {} +} + +% --------------------------------------------------------------------------------} +% --- VORTEX LATTICE +% --------------------------------------------------------------------------------{ +@TECHREPORT{kerwin:1961, + author = {J. Kerwin}, + title = {The Solution of Propeller lifting surface problems by vortex lattice methods}, + institution = {Massachusetts Institute of Technology}, + year = {1961}, + otherinfo = {} +} + +@TECHREPORT{falkner:1943, + author = {V.M. Falkner}, + title = {The calculation of aerodynamics loading on surfaces of any shape}, + institution = {Aeronautical Research Concil R\&M No. 1910}, + year = {1934}, +} +@TECHREPORT{falkner:1947, + author = {V.M. Falkner}, + title = {The solution of lifting-plane problems by vortex lattice theory}, + institution = {Aeronautical Research Concil R\&M No. 2591}, + year = {1972}, +} +@ARTICLE{rehbach:1973, + author = {C. Rehbach}, + title = {Calcul d'ecoulements autour d'ailes sans epaisseur avec nappes tourbillonnaires evolutives}, + journal = {La Recherche Aerospatiale}, + year = {1972}, + volume = {2}, + pages = {53--61} +} + +@article{rehbach:1977, + title = {Numerical calculation of three-dimensional unsteady flows with vortex sheets}, + language = {French}, + author = {Rehbach, C.}, + journal = {Recherche Aerospatiale}, + number = {5}, + pages = {289-298}, + year = {1977}, + issn = {00341223}, + abstract = {Taking into account the vortex sheets generated by lifting obstacles in an incompressible flow with evanescing viscosity raises an important problem in the development of numerical methods for calculating three-dimensional, high Reynolds number, separated flows. The approach proposed is based on a volume discretization of the vortex vector which, in three-dimensional flow, will vary with time as a function of the local distortions of the velocity field in order to respect the conservation theorems pertaining to vortex flows. The Lagrangian integro-differential formulation is established that allows the evolution in time to be followed of a discrete distribution of fluid particles, each carrying a vortex vector. The numerical process is applied to the calculation of the sheet and of the aerodynamic coefficients of a low aspect ratio, rectangular flat plate.} +} + + + +% --------------------------------------------------------------------------------} +% --- LIFTING SURFACE - THEORY and CODES +% --------------------------------------------------------------------------------{ +@ARTICLE{kida:1980, + author = {T. Kida}, + title = {A Theoretical Treatment of Lifting Surface Theory of an Elliptic Wing}, + journal = {ZAMM}, + year = {1980}, + volume = {60}, + pages ={p645-651} +} + +@article{hauptman:1986, + title = {On the exact solution of the linearized lifting-surface problem of an elliptic wing}, + language = {English}, + author = {Hauptman, A. and Miloh, T.}, + journal = {Quarterly Journal of Mechanics and Applied Mathematics}, + volume = {39}, + number = {1}, + pages = {41-66}, + year = {1986}, + issn = {00335614, 14643855}, + abstract = {An analytic solution is presented for the lifting-surface problem of a thin circular or elliptic wing in steady incompressible potential flow. The analysis is based on expansion of the acceleration potential in an infinite series of ellipsoidal harmonics. Unlike previous analyses, which involve inversion of infinite sets of linear equations or the numerical solution of integral equations, the present method leads to rather simple explicit expressions for the lift and moment coefficients in terms of the aspect ratio. These expressions are valid in the whole range of aspect ratios from the two-dimensional airfoil through the circular wing to the slender wind.} +} + +@article{hill:1978, + title = {A surface vorticity theory for propeller ducts and turbofan engine cowls in non-axisymmetric incompressible flow}, + author = {V.P. Hill}, + journal = {I. Mech. E., J. Mech. Eng. Sci.}, + volume = {20}, + number = {4}, + year = {1978} +} + +@ARTICLE{tuck:1993, + author = {E.O. Tuck}, + title = {Some Accurate Solutions of the lifting surface integral equation}, + journal = {J. Austral. Math. Soc. Ser. B}, + year = {1993}, + volume = {35}, + pages={p127-144} +} + +@MASTERSTHESIS{tornado, + author = {T. Melin}, + title = {A vortex lattice MATLAB Implementation for linear Aerodynamic Wing applications}, + school = {Royal Institude of Technology (KTH)}, + year = {2000}, + month={December} +} +@ARTICLE{donadon:2009, + author = {M.V. Donadon and L. Iannucci}, + title = {A vortex lattice program for steady state aerodynamic analysis of flapped and twisted UAV wing planforms}, + journal = {Brazilian Symposium on Aerospace Eng. \& Applications}, + year = {2009} +} + +@article{mctavish:2014, + title = {An investigation of in-field blockage effects in closely spaced lateral wind farm configurations}, + author = {McTavish, S. and Rodrigue, S. and Feszty, D. and Nitzsche, F.}, + journal = {Wind Energy}, + pages = {n/a}, + year = {2014}, + issn = {10954244, 10991824}, + doi = {10.1002/we.1806} +} + + +% --------------------------------------------------------------------------------} +% --- AIRFOILS and AIRFOILS CORRECTIONS +% --------------------------------------------------------------------------------{ + +@book{naca460, +author = {E.N. Jacobs and K.E. Ward and R.M. Pinkerton}, +title = {The Characteristics of 78 related airfoil sections from tests in the variable-density tunnel}, +year = {1933}, +publisher= {National Advisory Committee For Aeronautics}, +note={{NACA} Report 460}, +} + + +@book{theoryofwingsections, +author = {I.H. Abbott and A.E. {Von Doenhoff}}, +title = {Theory of wing sections - Including a summary of airfoil data}, +year = {1959}, +publisher= {Dover Publications Inc, New York} +} +@CONFERENCE{bakadwt1, + author = {C. Bak}, + title = {Aerodynamic airfoil characteristics for wind turbines - 2D and 3D}, + booktitle = {DTU courses}, + year = {2010} +} +@UNPUBLISHED{bak:2010, + author = {C. Bak}, + title = {Aerodynamic design of wind turbine rotors}, + note = {Ris{\o}-I-Report}, + year={2010}, + month={October} +} + +@ARTICLE{bak:2006, + author = {C. Bak and J. Johansen and P.B. Andersen}, + title = {Three-Dimensional Corrections of Airfoil Characteristics Based on Pressure Distributions }, + journal = {European Wind Energy Conference \& Exhibition - Athens, Greece }, + year = {2006} +} +@TECHREPORT{snel:1993RotatingEffect, + author = {H. Snel and R. Houwink and J. Bosschers}, + title = {Sectional prediction of lift coefficient on rotating wind turbine blades in stall}, + institution = {ECN}, + year = {1993}, + number={ECN-C-93-052} +} + + +@ARTICLE{lindenburg:2004, + author = {C. Lindenburg}, + title = {Modelling of Rotational Augmentation Based on Engineering Considerations and Measurements}, + journal = {European Wind Energy Conference - London }, + year = {2004} +} +@ARTICLE{chaviaropoulos:2000, + author = {P.K. Chaviaropoulos and M.O.L. Hansen}, + title = {Investigating three-dimensional and rotational effects on wind turbine blades by means of quasi-3D Navier Stokes solver}, + journal = {J. Fluids Engineering}, + year = {2000}, + volume= {122}, + pages={p330-336}, + month={June} +} +@PHDTHESIS{himmelskamp:1945, + author = {H. Himmelskamp}, + title = {Profile investigations on a rotating airscrew}, + school = {MAP Volkenrode, Translation 832}, + year = {1947} +} +@ARTICLE{rasmussen:1988, + author = {F. Rasmussen and S.M. Petersen and G. Larsen and A. Kretz and P.D. Andersen}, + title = {Investigations of aerodynamics, structural dynamics and fatigue on Danwin 180 kW}, + journal = {Riso-M-2727}, + year = {1988} +} + +@ARTICLE{madsen:1988, + author = {H.A. Madsen and F. Rasmussen}, + title = {Derivation of three-dimensional airfoil data on the basis of experiment and theory}, + journal = {AWEA Conference}, + year = {1988} +} +@ARTICLE{madsen:1995, + author = {H.A. Madsen}, + title = {A CFD analysis of the actuator disc flow compared with momentum theory results}, + journal = {10th IEA Meeting, Edingburg}, + year = {1995} +} + + +@ARTICLE{ronsten:1991, + author = {G. Ronsten}, + title = {Static pressure measurements on a rotating and a non-rotating 2,375m wind turbine blade}, + journal = {EWEC}, + year = {1991} +} +@ARTICLE{bruining:1993, + author = {A. Bruining}, + title = {Pressure measurements on a rotating wind turbine blade on the open air rotor research facility of the Delft Technical University}, + journal = {EWEC}, + year = {1993} +} + + + + + + +@ARTICLE{savino:1985, + author = {J.M. Savino and T.W. Nyland}, + title = {Wind turbine flow visualization studies}, + journal = {NASA lewis Research Center, Cleeveland, Ohio}, + year = {1985} +} + +@ARTICLE{corrigan:1994, + author = {J.J. Corrigan and J.J. Schillings}, + title = {Empirical model for stall delay due to rotation}, + journal = {American Helicopter Society Aeromechanics Specialists conference}, + year = {1994} +} + +@ARTICLE{viterna:1981, + author = {L.A. Viterna and R.D. Corrigan}, + title = {Fixed pitch rotor performance of large horizontal axis wind turbines}, + journal = {DOE/NASA Workshop on large horizontal axis wind turbines}, + year = {1981} +} + +@ARTICLE{du:1998, + author = {Z. Du and M.S. Selig}, + title = {A 3-D stall delay model for horizontal axis wind turbie performance predictio}, + journal = {AIAA}, + year = {1998}, + pages={p9-19} +} +@TECHREPORT{lindenburg:2001, + author = {C. Lindenburg}, + title = {Stall coefficients - Aerodynamic airfoil coefficients at large angles of attack}, + institution = {ECN - RX01004}, + year = {2001} +} + +@TECHREPORT{tangler:2005, + author = {J. Tangler and J. David kocurek}, + title = {Wind turbines post-stall airfoil performance characteristics guidelines for blade-element momentum methods}, + institution = {NREL}, + year = {2005} +} + + +@book{montgomerie:1996, + title={Drag coefficient distribution on a wing at 90 degrees to the wind}, + author={Montgomerie, B.}, + series={ECN-C}, + year={1996}, + publisher={Netherlands Energy Research Foundation} +} + + + + +% --------------------------------------------------------------------------------} +% --- MOMENTUM THEORY - ACTUATOR DISC +% --------------------------------------------------------------------------------{ +@article{rankine:1865, +author = {W. J. Rankine}, +title = {on the mechanical principles of the action of propellers.}, +year = {1865}, +journal= {Transactions of the Institute of Naval Architects}, +volume=6, +pages={p13} +} + +@article{froude:1878, +author = {W. Froude}, +title = {On the mechanical principles of the action of propellers}, +year = {1878}, +journal= {Transactions of the Institute of Naval Architects}, +volume=19, +pages={p47} +} + +@article{froude:1889, +author = {R.E. Froude}, +title = {On the part played in propulsion by differences of fluid pressure}, +year = {1889}, +journal= {Transactions of the Institute of Naval Architects}, +volume=30, +pages={p390-405} +} + + + +@article{drzewiecki:1892, +author = {S. Drzewiecki}, +title = {M\'ethode pour la d\'etermination des \'el\'ements m\'ecaniques des propulseurs h\'elico\"idaux}, +year = {1893}, +journal= {Bulletin de l'Association Technique Maritime No. 3 - Session de 1892}, +publisher={Imprimerie Gauthier-Villars et Fils - Paris}, +pages={p11-31}, +note={(in French)} +} + +@article{lanchester:1915, +author = {F.W. Lanchester}, +title = {A contribution to the theory of propulsion and the screw propeller}, +year = {1920}, +journal= {Transactions of the Institution of Naval Architects}, +volume=57, +pages={p98-116} +} + +@techreport{joukowski:1918, +author = {N. E. Joukowski }, +title = {Travaux du Bureau des Calculs et Essais Aeronautiques}, +year = {1918}, +institution= {Ecole Superieure Technique de Moscou}, +note={Republished by editions Gauthier-Villars in ``Th\'eorie Tourbillonaire de l'h\'elice Propulsive'', Paris 1929 (in French). } +} + +@article{thoma:1925, + title = {Grundsatzliches zur einfachen Strahltheorie der Schraube.}, + author={D. Thoma}, + journal= {Zeitschrift fur Fl\:ugtechnik und Mot.}, + year= 1925, + volume=16, + number=10, + pages={206-208}, +} + +@book{joukowski:1929, + title = {Théorie tourbillonnaire de l'hélice propulsive}, + publisher = {Gauthier-Villars}, + author = {Joukowski, N. E.} , + pages = {204}, + year = {1929} +} + +@ARTICLE{joukowski:propeller1, +author={Joukowski, N. E. }, +title={{Vortex theory of screw propeller, I.}}, +journal={Trudy Otdeleniya Fizicheskikh Nauk Obshchestva Lubitelei Estestvoznaniya}, +year={1912}, +volume={16}, +number={1}, +pages={1-31}, +note={{(in Russian). French translation in: Th\'eorie tourbillonnaire de l'h\'elice propulsive. Gauthier-Villars: Paris, 1929; 1: 1-47.}} +} + +@article{joukowski:1920, +author = {N.E. Joukowski }, +title = {Windmill of the NEJ type}, +year = {1920}, +journal= {Transactions of the Central Institute for Aero-Hydrodynamics of Moscow}, +note={Also published in Joukowski NE. Collected Papers Vol VI. The Joukowski Institute for AeroHydrodynamics, +Moscow: vol VI, 405-409, 1937 (in Russian)} +} + +@article{betz:1920, +author = {A. Betz}, +title = {Das Maximum der theoretisch m\"oglichen Ausn\"utzung des Windes durch Windmotoren}, +year = {1920}, +journal= {Zeitschrift f\"ur das gesante Turbinewesen}, +volume=26, +pages={p307-309}, +note={(in German)} +} + +@TECHREPORT{glauert:1926, + author = {H. Glauert}, + title = {A general theory of the autogyro}, + institution = {{NACA} Reports and Memoranda No. 111}, + year = {1926}, +} + + + +@book{glauert:1935, +author = {H. Glauert}, +title = {Airplane propellers, {D}ivision {L}}, +year = {1935}, +journal= {Aerodynamic Theory}, +edition={{W.F. Durand (ed)}}, +publisher={Julius Springer, Berlin}, +volume={4}, +pages={p169-360} +} + +#Reference 5: +#Title: "Airplane propellers", In: Division L of Aerodynamic Theory, edited by W.F. Durand + +@techreport{wilsonlissaman:1974, +author = {R.E. Wilson and P.B.S. Lissaman}, +title = {Applied Aerodynamics of Wind Power Machines}, +year = {1974}, +month = {May}, +institution={Oregon State University, Corvallis} +} + +@techreport{wilsonlissaman:1976, +author = {R.E. Wilson and P.B.S. Lissaman and S.N. Walker}, +title = {Aerodynamic performance of wind turbines}, +year = {1976}, +month = {June}, +institution={Oregon State University, Corvallis} +} + + +@article{bergey:1979, +author = {K.H. Bergey}, +title = {The Lanchester-Betz Limit}, +year = {1979}, +journal= {Journal of Energy}, +volume={3}, +pages={p382-384} +} + +@article{conway:1995, + title = {Analytical solutions for the actuator disk with variable radial distribution of load}, + language = {English}, + publisher = {Cambridge Univ Press}, + author = {Conway, John T.}, + journal = {Journal of Fluid Mechanics}, + volume = {297}, + pages = {327-355}, + year = {1995}, + issn = {00221120, 14697645}, + abstract = {An analytical method somewhat analogous to finite wing theory has been developed which enables the flow induced by a linearized propeller actuator disk with variable radial distribution of load to be solved in closed form for the first time. Analytical solutions are given for various load distributions including the case of an arbitrary polynomial loading. As in finite wing theory, the case of elliptic loading is exceptionally simple and the induced velocities and stream function are simple expressions of elementary functions. Results are also given for a practical propeller load distribution with finite hub. The method can also be used to solve a wide range of analogous electromagnetic problems.} +} +@article{conway:1998, + title = {Exact actuator disk solutions for non-uniform heavy loading and slipstream contraction}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {Conway, J. T.}, + journal = {Journal Of Fluid Mechanics}, + volume = {365}, + pages = {235-267}, + year = {1998}, + issn = {00221120, 14697645}, + abstract = {A semi-analytical method has been developed to solve for the inviscid incompressible flow induced by a heavily loaded actuator disk with non-uniform loading. The solution takes the contraction of the slipstream fully into account. The method is an extension of the analytical theory of Conway (1995) for the linearized actuator disk and is exact for an incompressible perfect fluid. The solutions for the velocities and stream function are given as one-dimensional integrals of expressions containing complete elliptic integrals. Any load distribution with bounded radial gradient can be treated. Results are presented here for both contra-rotating and normal propellers. For the special case of a contra-rotating propeller with a parabolic velocity profile in the ultimate wake, the vorticity in the slipstream is shown to be the same as in the analytically tractable spherical vortex of Hill (1894) and the related family of steady vortices explored by Fraenkel (1970, 1972) and Norbury (1973).} +} + +@INPROCEEDINGS{conway:2000, + author = {J. T. Conway and F. Tezok}, + title = {Unsteady three-dimensional vortex sheet panel solutions for oscillating wings}, + booktitle = {Third International Conference On Nonlinear Problems in Aviation and Aerospace}, + year = {2000}, +} + + +@INPROCEEDINGS{schaffarczyk:2000, + author = {A. P. Schaffarczyk and J. T. Conway}, + title = {Application of Nonlinear Actuator Disk Theory to Wind Turbines}, + booktitle = {14th Symposium IEA Joing Action on Aerodynamics of Wind Turbines, NREL, Boulder, Colorado}, + year = {2000}, +} + +@article{schaffarczyk:2000viscous, + title = {Comparison of a nonlinear actuator disk theory with numerical integration including viscous effects}, + language = {eng}, + publisher = {CASI}, + author = {A. P. Schaffarczyk and J. T. Conway}, + journal = {Canadian Aeronautics and Space Journal, Can Aeronaut Space J}, + volume = {46}, + number = {4}, + pages = {209-215}, + year = {2000}, + issn = {00082821}, + abstract = {The nonlinear inviscid actuator disk theory of Conway has been compared with a numerical solution of the Navier-Stokes equations for the equivalent disk discontinuity problem in the presence of viscosity. Good agreement between these two different approaches was obtained, confirming that viscous effects are small for the isolated actuator disk, which has no solid boundaries and hence does not have a no-slip boundary condition.} +} + +@INPROCEEDINGS{conway:2002, + author = {J. T. Conway}, + title = {Application of an exact nonlinear actuator disk theory to wind turbines}, + booktitle = {Proceedings of ICNPAA, Melbourne Florida}, + year = {2002}, +} + + + +@INPROCEEDINGS{conway:2003, + author = {J. T. Conway}, + title = {Analytical Solutions for the General Non-Axisymmetric Linearized Actuator Disk}, + booktitle = {Proceedings of AIAA Orlando}, + year = {2003}, +} + + +@article{sharpe:2004, + title = {A general momentum theory applied to an energy-extracting actuator disc}, + language = {English}, + publisher = {JOHN WILEY \& SONS LTD}, + author = {Sharpe, DJ}, + journal = {Wind Energy}, + volume = {7}, + number = {3}, + pages = {177-188}, + year = {2004}, + issn = {10954244, 10991824}, + abstract = {A general momentum theory for an energy-extracting actuator disc modelling a rotor with a multiplicity of blades having radially uniform circulation is presented that includes the effects of wake rotation and expansion. A parallel theory directed at the propeller has been published elsewhere, but not one intended for the wind turbine. The rotation of the wake is shown to be accompanied by a fall in static pressure that is additional to that which occurs across the actuator disc and accounts for the energy extraction from the wind. Energy extraction is recognized in the fully developed wake by the flow regaining the static pressure of the undisturbed wind at the expense of the kinetic energy in the wake. Because the wake is still rotating in the fully developed wake, the additional fall in static pressure appears there also and so does not augment the energy extraction. However, the additional fall in pressure would cause a discontinuity in pressure across the fully developed wake but is prevented by a further slowing down of the wake. The additional slowing down extracts a little more energy from the flow than that predicted by the simple momentum theory, which does not include wake rotation. The overall effect of wake rotation on energy extraction is very small for wind turbines operating at high tip speed ratios but can significantly increase the predicted power output for turbines operating at low tip speed ratios. Copyright (C) 2004 John Wiley Sons, Ltd.}, + doi = {10.1002/we.118} +} + + + +@article{kuik:2004, + title = {An inconsistency in the actuator disc momentum theory}, + language = {English}, + publisher = {JOHN WILEY \& SONS LTD}, + author = {van Kuik, GAM}, + journal = {Wind Energy}, + volume = {7}, + number = {1}, + pages = {9-19}, + year = {2004}, + issn = {10954244, 10991824}, + abstract = {The classical momentum theory for actuator discs with a constant normal load Deltap addresses only the axial momentum balance. Now the radial balance is also derived, which, in the absence of a radial disc load, leads to the requirement that the integral of the static pressure along the disc centre line must be zero. The axial and radial balances appear to be mutually inconsistent. the axial balance provides the well-known results, but the radial balance cannot be satisfied. The inconsistency can be removed by assuming that the actuator disc force held is composed of more than the constant normal load Deltap. It is shown that the modelling by Lee and Greenberg (Journal of Fluid Mechanics 1984, 745:287) of the load and flow of an actuator strip in hover implies the existence of a singular suction force at the edge. Their results deviate, without explanation so for, from the predictions of classical momentum theory. Addition of this edge force to the radial and axial momentum balances provides consistent results. A more general explanation or solution for the inconsistency is not yet ore cable. Comparison the present inviscid analysis with a Navier-Stokes calculation by Mikkelsen et al. (Wind Energy 200 1; 4:12 1) shows that the integrated pressure along the disc centre line is indeed non-zero, but that the radial balance is still satisfied. It is not clear why this deviates from the analysis. Copyright (C) 2004 John Wiley Sons, Ltd.}, + doi = {10.1002/we.104} +} + +@ARTICLE{wald:2006, + author = {Q. R. Wald}, + title = {The aerodynamics of propellers}, + journal = {Progress in Aerospace Science}, + year = {2006}, + volume={42}, + doi = {10.1016/j.paerosci.2006.04.001}, + pages = {85--128}, + otherinfo = {} +} + + + +@article{kuik:2007, +author = {G. A. M. {van Kuik}}, +title = {The Lanchester-Betz-Joukowsky limit}, +year = {2007}, +journal= {Wind Energy}, +publisher={Wiley}, +volume={10}, +pages={p289-291} +} + +@INPROCEEDINGS{kuik:2011, +author = {G. A. M. {van Kuik}}, +title = {The ideal wake of an ideal actuator disc}, +year = {2011}, +pages = {127--132}, +booktitle= {Proceedings of the Wake Conference, Visby} +} + +@ARTICLE{kuik:2014, + author = {G. A. M. {van Kuik}}, + title = {On the generation of vorticity by force fields in rotor- and actuator flows}, + journal = {Renewable Energy}, + year = {2014}, + volume = {70}, + pages={124--128}, + url = {http://dx.doi.org/10.1016/j.renene.2014.02.056} +} + + +@ARTICLE{kuik:2015, + author = {G. A. M. {van Kuik} and L. E. M. Lignarolo}, + title = {Potential flow solutions for energy extracting actuator disc flows}, + journal = {Submitted to Wind Energy}, + year = {2015}, +} +% volume = {70}, +% pages={124--128}, +% url = {http://dx.doi.org/10.1016/j.renene.2014.02.056} + +@article{morino:1986, + title = {Helmholtz decomposition revisited: Vorticity generation and trailing edge condition}, + language = {English}, + publisher = {Springer-Verlag}, + author = {Morino, L.}, + journal = {Computational Mechanics}, + volume = {1}, + number = {1}, + pages = {65-90}, + year = {1986}, + issn = {01787675, 14320924}, + abstract = {The use of the Helmholtz decomposition for exterior incompressible viscous flows is examined, with special emphasis on the issue of the boundary conditions for the vorticity. The problem is addressed by using the decomposition for the infinite space; that is, by using a representation for the velocity that is valid for both the fluid region and the region inside the boundary surface. The motion of the boundary is described as the limiting case of a sequence of impulsive accelerations. It is shown that at each instant of velocity discontinuity, vorticity is generated by the boundary condition on the normal component of the velocity, for both inviscid and viscous flows. In viscous flows, the vorticity is then diffused into the surroundings: this yields that the no-slip conditions are thus automatically satisfied (since the presence of a vortex layer on the surface is required to obtain a velocity slip at the boundary). This result is then used to show that in order for the solution to the Euler equations to be the limit of the solution to the Navier-Stokes equations, a trailing-edge condition (that the vortices be shed as soon as they are formed) must be satisfied. The use of the results for a computational scheme is also discussed. Finally, Lighthill's transpiration velocity is interpreted in terms of Helmholtz decomposition, and extended to unsteady compressible flows.}, + doi = {10.1007/BF00298638} +} + + +@article{okulov:2011, +author = {V. L. Okulov and G. A. M. {van Kuik}}, +title = {The Betz-Joukowsky limit: on the contribution to rotor aerodynamics by the British, German and Russian scientific schools}, +year = {2011}, +journal= {Wind Energy}, +publisher={Wiley}, +volume={464} +} + +@article{sorensen:2010, + author = {J. N. S{\o}rensen and G. A. M. {van Kuik}}, + title = {General momentum theory for wind turbines at low tip speed ratios}, + publisher = {John Wiley \& Sons Ltd.}, + journal = {Wind Energy}, + volume = {14}, + number = {7}, + pages = {821-839}, + year = {2011}, + issn = {10991824, 10954244}, + doi = {10.1002/we.423} +} + +@book{sorensen:book, + title = {General momentum theory for horizontal axis wind turbines}, + author = {J. N. S{\o}rensen}, + publisher = {Springer}, + year = "2016", + isbn = "978-3-319-22113-7" +} + + + +@article{kuik:2015:joukowski, +title = "Rotor theories by Professor Joukowsky: Momentum theories ", +author = "G. A. M. van Kuik and J. N. S{\o}rensen and V. L. Okulov", +journal = "Progress in Aerospace Sciences ", +volume = "73", +number = "0", +pages = "1 - 18", +year = "2015", +issn = "0376-0421", +doi = "http://dx.doi.org/10.1016/j.paerosci.2014.10.001", +abstract = "Abstract This paper is the first of two papers on the history of rotor aerodynamics with special emphasis on the role of Joukowsky. The present one focuses on the development of the momentum theory while the second one surveys the development of vortex theory for rotors. Joukowsky has played a major role in these developments. Although he cooperated with other famous aerodynamicists like Prandtl, his contribution is not well recognized as most of his publications are in Russian. The paper discusses the role of the English, Russian and German research schools in the beginning of the Twentieth Century, and the contributions by individual researchers like Lanchester, Prandtl, Betz and Joukowsky himself. After the one-dimensional momentum theory was well established, the introduction of torque and angular momentum was the next step. Joukowsky has led the basis for this step, but Glauert׳s Blade Element Momentum still is the basis of current rotor design codes. He applied some assumptions limiting the validity to moderate and high tip speed ratios. S{\o}rensen and van Kuik published a solution for wind turbines with very low tip speed ratios, which is now expanded to propellers as well, with one remaining assumption of inviscid flow. For very low tip speed ratios the general momentum theory gives unphysical results which disappear after applying a perturbation parameter representing phenomena not captured by the Euler equations. " +} +@article{okulov:2015:joukowski, +title = "The rotor theories by Professor Joukowsky: Vortex theories ", +author = "V. L. Okulov and J. N. S{\o}rensen and D. H. Wood", +journal = "Progress in Aerospace Sciences ", +volume = "73", +number = "0", +pages = "19 - 46", +year = "2015", +issn = "0376-0421", +doi = "http://dx.doi.org/10.1016/j.paerosci.2014.10.002", +abstract = "Abstract This is the second of two articles with the main, and largely self-explanatory, title “Rotor theories by Professor Joukowskyâ€. This article considers rotors with finite number of blades and is subtitled “Vortex theoriesâ€. The first article with subtitle “Momentum theoriesâ€, assessed the starring role of Joukowsky in aerodynamics in the historical context of rotor theory. The main focus in both articles is on wind turbine rotors, but much of the basic theory applies to propellers and helicopters as well. Thus this second article concentrates on the so-called blade element theory, the Kutta–Joukowsky theorem, and the development of the rotor vortex theory of Joukowsky. This article is to a large extent based on our own work, which constitutes the first successful completion and further development of Joukowsky׳s work by deriving the first analytical solution of his rotor. This rotor has a finite number of blades and will be compared with the rotor analysis of Betz and of others of the German school of aerodynamics. " +} + + + + + + +@article{xiros:2007, + title = {Remarks on wind turbine power absorption increase by including the axial force due to the radial pressure gradient in the general momentum theory}, + language = {English}, + publisher = {JOHN WILEY \& SONS LTD}, + author = {Xiros, M. I. and Xiros, N. I.}, + journal = {Wind Energy}, + volume = {10}, + number = {1}, + pages = {99-102}, + year = {2007}, + issn = {10954244, 10991824}, + abstract = {It is shown that the general momentum theory, in the form that it has been published previously, underestimates the axial force and the absorbed power, possibly by a large amount if the expansion of the wake is large. Consequently, the Betz limit, theoretically, can probably be exceeded by a correspondingly large amount. Copyright (c) 2006 John Wiley \& Sons, Ltd.}, + doi = {10.1002/we.203} +} + +@article{mccutchen:1985, + title = {A THEOREM ON SWIRL LOSS IN PROPELLER WAKES}, + language = {English}, + publisher = {AMER INST AERONAUT ASTRONAUT}, + author = {{Mccutchen, CW}}, + journal = {Journal Of Aircraft}, + volume = {22}, + number = {4}, + pages = {344-346}, + year = {1985}, + issn = {00218669, 15333868}, + abstract = {The wake of a propeller has tangential as well as longitudinal velocity relative to still air. The coarser the spiral the propeller carves in the air, the greater is the ratio of tangential to longitudinal wake velocity. As aircraft with propellers go faster, designers must use higher and higher ratios of pitch to diameter to keep the propeller tips below, or not too far above, the speed of sound. The higher thrusts required for higher speeds demand higher loading. All wake energy losses will rise, the swirl component more than the longitudinal component. If the longitudinal component of velocity is uniform across a propeller wake, the swirl energy in the wake is exactly paid for by the work done by wake suction. For lightly loaded propellers the longitudinal velocity is always fairly uniform, and the relation between swirl energy and wake suction is a good approximation. Either swirl energy or wake suction may be used to measure swirl loss, but not both at once. It is not their sum.} +} +@article{wood:2007, + title = {Including swirl in the actuator disk analysis of wind turbines}, + language = {eng}, + publisher = {Multi-Science Publishing Co. Ltd.}, + author = {Wood, David H.}, + journal = {Wind Engineering, Wind Eng}, + volume = {31}, + number = {5}, + pages = {317-323}, + year = {2007}, + issn = {0309524x, 2048402x}, + abstract = {It is shown that the presence of swirl in the wake of a wind turbine complicates the simple actuator disk analysis that provides such basic results as the Lanchester-Betz limit on the power coefficient. The simple analysis remains valid at high tip speed ratio for a sufficiently small core radius of the hub vortex. As the tip speed ratio decreases, the present analysis eventually becomes invalid. It is, however, reasonable to conclude that including the effects of the hub vortex causes the maximum power coefficient to increase above the Lanchester-Betz limit with decreasing tip speed ratio. The extent to which this conclusion depends on the assumed vortex model was investigated briefly by considering a more general model for the hub vortex. The results strongly imply that some account of the vortex structure of the wake will be required to resolve fully the effects of swirl. Unfortunately there are no measurements currently available for the hub vortex.}, + doi = {10.1260/030952407783418766} +} + +@techreport{houlsbyoldfiled2008, +author = {G.T. Houlsby, S. Draper and M.L.G. Oldfield}, +title = {Application of Linear Momentum Actuator Disc Theory to Open Channel Flow}, +year = {2008}, +institution= {University of Oxford, Department of Engineering Science}, +note={Report No. OUEL 2296/08} +} + +@ARTICLE{troldborg:2010, + author = {N. Troldborg and M. Gaunaa and R. Mikkelsen}, + title = {Actuator disc simulations of influence of wind shear on power production of wind turbines}, + journal = {Torque 2010, The science of making torque from wind, EWEA}, + pages ={p271-297}, + year = {2010} +} + + +@TECHREPORT{bak:2005chapter3, + title = {Inboard rotor/blade aerodynamics and its influence on blade design}, + year = {2005}, + institution={Ris{\o} Laboratory for Sustainable Energy, Roskilde}, + author={H.A. Madsen and R. Mikkelsen and J. Johansen and C. Bak and S. {\O}ye and N.N. S{\o}rensen}, + editor={C. Bak}, + number={Riso-R-1559 - Chapter 3} +} + + + + +% --------------------------------------------------------------------------------} +% --- DYNAMIC INFLOW +% --------------------------------------------------------------------------------{ +@TECHREPORT{snel:1993dynamicinflow, +author = {H. Snel and J. G. Schepers}, +title = {{Investigation and modelling of dynamic inflow effects}}, +institution = {ECN-RX--93-029}, +year = {1993} +} + +@TECHREPORT{snel:1995, +author = {H. Snel and J. G. Schepers}, +title = {Joint investigation of dynamic inflow effects and implementation of an engineering method}, +institution = {ECN-C--94-107, Energy Research Centre of the Netherlands, Petten }, +year = {1995} +} + +@article{snel:1992, + title = {Engineering models for dynamic inflow phenomena}, + language = {English}, + author = {H. Snel and J. G. Schepers}, + journal = {Journal of Wind Engineering and Industrial Aerodynamics}, + volume = {39}, + number = {1-3}, + pages = {267-281}, + year = {1992}, + issn = {01676105}, + abstract = {Within the CEC Joule program, a joint investigation project was started up concerning dynamic inflow effects. These effects describe the wake-induced unsteadiness of the flow in the rotor plane. Aim of the projects is the definition and implementation of engineering models within the current state-of-the-art computer codes for dynamic load calculations. These models are to be qualified by means of comparison with both existing sophisticated models (dynamic vortex wake calculations) and with experiments to be carried out on the Danish Tjaereborg 2 MW turbine. The paper discusses the first results of the project. Proposed engineering models are presented. Comparisons between results of the proposed models and the free vortex wake model of the University of the Bundeswehr, Munich are shown, for simplified cases, viz. a step on the wind speed and simple pitching transients. Finally, measurements for a pitching transient are shown and compared with calculations. Both measurements and calculations show important effects of dynamic inflow, resulting in large overshoots of loads compared to stationary values. The agreement between measurements and calculations is very encouraging} +} + + +% editor = "C. Bak", +@inbook{madsen:2007shear, + title = "Influence of wind shear on rotor aerodynamics, power and loads", + author = "{Madsen Aagaard}, Helge and R. Mikkelsen and S\o{}rensen, {Niels N.} and M.O.L. Hansen and S. \O{}ye and Jeppe Johansen", + year = "2007", + isbn = "978-87-550-3610-9", + series = "Risoe-R-1611", + pages = "101-116", + booktitle = "Research in aeroelasticity EFP-2006 - Editor: C. Bak", + publisher = {Forskningscenter Risoe.} +} + + +@article{larsen:2013, + title = {Validation of the dynamic wake meander model for loads and power production in the Egmond aan Zee wind farm}, + language = {English}, + publisher = {WILEY-BLACKWELL}, + author = {Larsen, Torben J. and Madsen, Helge Aa. and Larsen, Gunner C. and Hansen, Kurt S.}, + journal = {Wind Energy}, + volume = {16}, + number = {4}, + pages = {605-624}, + year = {2013}, + issn = {10954244, 10991824}, + abstract = {This paper investigates wake effects on load and power production by using the dynamic wake meander (DWM) model implemented in the aeroelastic code HAWC2. The instationary wind farm flow characteristics are modeled by treating the wind turbine wakes as passive tracers transported downstream using a meandering process driven by the low frequent cross-wind turbulence components. The model complex is validated by comparing simulated and measured loads for the Dutch Egmond aan Zee wind farm consisting of 36 Vestas V90 turbine located outside the coast of the Netherlands. Loads and production are compared for two distinct wind directionsa free wind situation from the dominating southwest and a full wake situation from northwest, where the observed turbine is operating in wake from five turbines in a row with 7D spacing. The measurements have a very high quality, allowing for detailed comparison of both fatigue and minmeanmax loads for blade root flap, tower yaw and tower bottom bending moments, respectively. Since the observed turbine is located deep inside a row of turbines, a new method on how to handle multiple wakes interaction is proposed. The agreement between measurements and simulations is excellent regarding power production in both free and wake sector, and a very good agreement is seen for the load comparisons too. This enables the conclusion that wake meandering, caused by large scale ambient turbulence, is indeed an important contribution to wake loading in wind farms. Copyright (c) 2012 John Wiley & Sons, Ltd.}, + doi = {10.1002/we.1563} +} + + +@inproceedings{pirrung:2012torque, + title={Improvement of a near wake model for trailing vorticity}, + booktitle={Proceedings of the science of making torque from wind, Oldenburg}, + author={G.~R. Pirrung and M.~H. Hansen and H.~Aa. Madsen}, + year={2012} +} + +@ARTICLE{beddoes:1987, + author = {T.~S. Beddoes}, + title = {A near wake dynamic model }, + journal = {proc. of the AHS national specialist +meeting on aerodynamics and aeroacoustics}, + year = {1987}, +} + + + + +@ARTICLE{madsen:2004, + author = {H.~Aa. Madsen and F. Rasmussen}, + title = {A near wake model for trailing vorticity compared with the blade element momentum theory}, + journal = {Wind Energy}, + year = {2004}, + volume = {7}, + pages = {325-341} +} +% --------------------------------------------------------------------------------} +% --- YAW +% --------------------------------------------------------------------------------{ +@article{coleman:1945, +author = {R. P. Coleman and A. M. Feingold and C. W. Stempin}, +title = {Evaluation of the induced-velocity field of an idealized helicopter rotor}, +year ={1945}, +journal = {{NACA} ARR No. L5E10}, + pages = {1--28} +} +@ARTICLE{drees:1949, + author = {M. Drees}, + title = {A Theory of airflow through rotors and its application to some helicopter problems}, + journal = {Journal of the Helicopter Association of Great Britain}, + year = {1949}, + pages= {79--104}, + volume = {3}, + number = {2}, +} + + + +@TECHREPORT{mangler:1950, +author = {K. W. Mangler and H. B. Squire}, +title = {The induced velocity field of a rotor}, +institution = {Aeronautical Research Council - R.\&M. No. 2642}, +year ={1950} +} +@TECHREPORT{castles:1954, +author = {W. Castles and J. H. {De Leeuw}}, +title = {The Normal Component of the induced velocity in the vicinity of a lifting rotor and some examples of its application}, +institution= {{NACA} Report No. 1184, Giorgia Institute of Technology, Atlanta}, +year= {1954} +} +@TECHREPORT{castles:1956, +author = {W. Castles and H. L. Durham}, +title = {Distribution of normal component of induced velocity in lateral plane of a lifting rotor}, +institution= {{NACA TN-3841}}, +year= {1956} +} +@TECHREPORT{heyson:1956, +author = {H. Heyson and S. Katzoff}, +title = {Normal component of induced velocity field in the vicinity of a lifting rotor with a nonuniform disk loading}, +institution= {{NACA TN-3690}, Langley Aeronautical Laboratory, Langley Field}, +year= {1956} +} +@TECHREPORT{heyson:1957, +author = {H. Heyson and S. Katzoff}, +title = {Induced velocities near a lifting rotor with nonuniform disk loading}, +institution= {{NACA} report 1319}, +year= {1957} +} +@ARTICLE{willmer:1959, + author = {M. A. P. Willmer}, + title = {The loading of helicopter rotor blades in forward flight}, + publisher = {HMSO}, + journal = {Aeronautic Research Council/Report and Memoranda(ARC/R\&M)}, + volume = {3318}, + year = {1959}, + otherinfo={RAE Naval Report Vo. 2-N-76935 April 1959, Report#2-N-76935 + RAE Naval Report, Vol. 2-N-76935, Apr. 1959, Report # 2-N-76935. Lehman +http://discovery.nationalarchives.gov.uk/SearchUI/Details?uri=C2441282 + }, +} + + + +@ARTICLE{pitt:1981, + author = {D. M. Pitt and D. Al. Peters}, + title = {Theoretical Prediction of dynamic-inflow derivatives}, + journal = {Vertica}, + year = {1981}, + volume = {5}, + pages = {21--34}, +} + + + + +@TECHREPORT{bramwell:1974, +author = {Bramwell}, +title = {{Some Remarks on the Induced Velocity Field of a Lifting Rotor and on Glauert's Formula}}, +institution= {Aeronautical Research Council - C.P. No. 1301}, +year= {1974} +} +@TECHREPORT{egolf:1983, + author = {Egolf, A. and Landgrebe, A. J.}, + title = {Helicopter Rotor Wake Geometry and Its Influence in Forward Flight}, + institution = {{NASA} CR-3726}, + year = {1983} +} + +@TECHREPORT{hansen:1992, +author = {A.C. Hansen}, +title = {Yaw Dynamics of horizontal axis wind turbines}, +institution= {{NREL- TP-440-4822}}, +year = {1992} +} +@ARTICLE{oye:1992, + author = {S. {\O}ye}, + title = {Induced velocities for rotors in yaw - An extension of the blade element momentum method}, + journal = {Sixth IEA Symposium on the Aerodynamics of Wind Turbines, ECN, Petten}, + pages = {1--5}, + year = {1992} +} + + +@article{chaney:2001, +author = {K. Chaney and A. J. Eggers and P. J. Moriarty and W. E. Holley}, +doi = {10.1115/1.1410109}, +title = {Skewed Wake Induction Effects on Thrust Distribution on Small Wind Turbine Rotors}, +year= {2001}, +journal={J. Sol. Energy Eng.}, +volume={123}, +number={4}, +pages={290-295} +} + + +@ARTICLE{chaney:2002, + author = {K. Chaney and A. J. Eggers}, + title = {Expanding Wake induction effects on thrust distribution on a rotor disc}, + journal = {Wind Energy}, + year = {2002}, + volume = {5}, + pages = {213-226}, +} + +@MISC{schepers:wp8, + author={J. G. Shepers and R. J. Barthelmie and E. S. Politis}, + year={2010}, + title={Upwind Wp8: Deliverable D8.5, Wake reducing concepts} +} +@book{schepers:1998yaw, + title={An Engineering Model for Yawed Conditions, Developed on the Basis of Wind Tunnel Measurements}, + author={Schepers, J.G.}, + series={ECN-RX-98-057}, + year={1998}, + publisher={Netherlands Energy Research Foundation ECN, Petten} +} + +@ARTICLE{mcwilliam:2011, + author = {M. K. {McWilliam} and S. Lawton and S.Cline and C. Crawford}, + title = {A corrected blade element momentum method for simulating wind turbines in yawed flow}, + journal = {Proceedings of 49th AIAA Meeting, Orlando}, + year = {2011}, + pages={1--10} +} + + +@article{mcwilliam:2014, + author={Michael K McWilliam and Curran Crawford}, + title={Finite Element Based Lagrangian Vortex Dynamics Model for Wind Turbine Aerodynamics}, + journal={Journal of Physics: Conference Series}, + volume={524}, + number={1}, + pages={012127}, + url={http://stacks.iop.org/1742-6596/524/i=1/a=012127}, + year={2014} +} + +Haans, W. "Wind turbine aerodynamics in yaw - unravelling the measured rotor wake" Delft, 271 p. +@PHDTHESIS{haans:2011, + author = {W. Haans}, + title = {Wind turbine aerodynamics in yaw - unravelling the measured rotor wake}, + school = {DU Wind - Delft University of Technology}, + year = {2011} +} + + + + +@INPROCEEDINGS{guntur:2012yaw, +author = {S. Guntur and N. Troldborg and M. Gaunaa}, +title = {Application of engineering models to predict wake deflection due to a tilted wind turbine}, +booktitle = {EWEC, Copenhagen}, +year={2012}, +} + +@INPROCEEDINGS{troldborg:2012, +author = {N. Troldborg and M. Gaunaa and S. Guntur}, +title = {{Modelling the influence of yaw using a simple vortex rotor model}}, +booktitle = {EWEC, Copenhagen}, +year = {2012}, +pages={1--5}, +} + +@article {jimenez:2010, +author = {\'A. Jim\'enez and A. Crespo and E. Migoya}, +title = {Application of a {LES} technique to characterize the wake deflection of a wind turbine in yaw}, +journal = {Wind Energy}, +volume = {13}, +number = {6}, +publisher = {John Wiley \& Sons, Ltd.}, +issn = {1099-1824}, +url = {http://dx.doi.org/10.1002/we.380}, +doi = {10.1002/we.380}, +pages = {559--572}, +keywords = {wind turbine wake, wind turbine in yaw, large-eddy simulation, wake deflection, active control in wind farms}, +year = {2010}, +} +@article{coton:1999, + title = {The prediction of horizontal axis wind turbine performance in yawed flow using an unsteady prescribed wake model}, + language = {English}, + publisher = {MECHANICAL ENGINEERS PUBLICATIONS LTD}, + author = {Coton, F. N. and Wang, T.}, + Journal = {Proceedings- Institution Of Mechanical Engineers Part A Journal Of Power And Energy}, + volume = {213}, + number = {1}, + pages = {33-44}, + year = {1999}, + issn = {0957-6509} +} +@article {coton:2002, +author = {Coton, Frank N. and Wang, Tongguang and Galbraith, Roderick A. McD.}, +title = {An examination of key aerodynamic modelling issues raised by the NREL blind comparison}, +journal = {Wind Energy}, +volume = {5}, +number = {2-3}, +publisher = {John Wiley \& Sons, Ltd.}, +issn = {1099-1824}, +url = {http://dx.doi.org/10.1002/we.58}, +doi = {10.1002/we.58}, +pages = {199--212}, +keywords = {wind turbine, modelling, vortex wake model, prescribed wake}, +year = {2002}, +} + +@article {pereira:2013, +author = {Pereira, Ricardo and Schepers, Gerard and Pavel, Marilena D.}, +title = {Validation of the Beddoes–Leishman dynamic stall model for horizontal axis wind turbines using MEXICO data}, +journal = {Wind Energy}, +volume = {16}, +number = {2}, +issn = {1099-1824}, +url = {http://dx.doi.org/10.1002/we.541}, +doi = {10.1002/we.541}, +pages = {207--219}, +keywords = {HAWT, dynamic stall, Beddoes-Leishman, MEXICO}, +year = {2013}, +} +@article{kominer:2013, + title = {New Actuator-Disk Model for a Skewed Flow}, + language = {English}, + publisher = {AMER INST AERONAUTICS ASTRONAUTICS}, + author = {Kominer, Sivan and Rosen, Aviv}, + journal = {AIAA Journal}, + volume = {51}, + number = {6}, + pages = {1382-1393}, + year = {2013}, + issn = {00011452, 1533385x}, + abstract = {In a previous paper, a novel approach to axisymmetric actuator-disk modeling was presented. In the present paper, this modeling is extended to include the case of a skewed flow, which is asymmetric. Similar to the axisymmetric case, it is assumed that the pressure difference between both sides of each point of the disk is a time average of the pressure difference between both sides of the blade elements that pass through the same point. The influence of the loaded disk on the flowfield is modeled by a distribution of sinks/sources over the disk plane. Closed-form integral expressions are obtained for the induced velocity through and upstream of the disk. By using Bernoulli's equation, which relates between the flow far upstream and the flow just before crossing the disk plane, an additional nonlinear algebraic equation for the induced-velocity distribution over the disk is obtained. Discretization of the integral equations results in a system of nonlinear algebraic equations. An iterative procedure leads to the final solution. The model is efficient, stable, easy to apply, and solve. Comparisons with results of another method from the literature exhibit a very good agreement.}, + doi = {10.2514/1.J052057} +} + + +% --------------------------------------------------------------------------------} +% --- SHEAR +% --------------------------------------------------------------------------------{ +@article{zahle:2008, + title = {Rotor Aerodynamics in Atmospheric Shear Flow}, + publisher = {EWEA}, + author = {Zahle, Frederik and S{\o}rensen, Niels}, + journal = {{EWEC} 2008 Conference Proceedings}, + pages = {120-124}, + year = {2008} +} +@article{ZahleF2010, + author ={F. Zahle and N.N. S{\o}rensen}, + title ={{Navier-Stokes} Rotor Flow Simulations with Dynamic Inflow.}, + journal={Torque Conference,Crete, Greece}, + year = {2010} +} +@article{MicallefD2010, + Author = {Micallef, D. and Ferreira, C.S. and Sant, T. and van Bussel, G.}, + Journal = {3rd Conference on The science of making Torque from Wind, Crete, Greece}, + Year ={2010}, + Title = {{An Analytical Model of Wake Deflection Due to Shear Flow}}, + Pages ={337-347} + } +@techreport{grasso:2010, + author = {Grasso, F.}, + Title = {{Ground and Wind Shear Effects in Aerodynamic Calculations}}, + Institution = {Energy research center of the Netherlands (ECN)}, + Number = {ECN-E--10-016}, + Year = {2010} + } + +@article{ShenX2011, + Author = {X. Shen and X. Zhu and Z. Du}, + Journal = {Energy}, + Volume = {36}, + pages = {1424-1434}, + Title = {{Wind turbine aerodynamics and loads control in wind shear flow}}, + Year = {2011} + } + +@article{madsen:2012, + Author = {Madsen, H.Aa. and Riziotis, V. and , Zahle, F. and Hansen, M.O.L. and Snel, H. and Grasso, F. and Larsen, T.J. and Politis, E. and Rasmussen, F.}, + Title = {Blade element momentum modeling of inflow with shear in comparison with advanced model results}, + Journal = {Wind Energy}, + Volume = {15}, + Pages = {63-81}, + Year = {2012} +} + +@article{SezerUzolN2013, + Author = {Sezer-Uzol, N. and Uzol, O.}, + Journal = {Wind Energy}, + Volume = {16}, + Title = {Effect of steady and transient wind shear on the wake structure and performance of a horizontal axis wind turbine rotor}, + Year = {2013}, + Pages = {1-17} +} +% --------------------------------------------------------------------------------} +% --- ACCELERATION POTENTIAL +% --------------------------------------------------------------------------------{ +% Acceleration potential +@article{vanbussel:1992, +author = {G. J. W. {Van Bussel}}, +pages = {161--172}, +title = {{The use of the asymptotic acceleration potential method for horizontal axis windturbine rotor aerodynamics}}, +journal={Journal of Wind Engineering and Industrial Aerodynamics}, +volume = {39}, +year = {1992} +} + + + +% --------------------------------------------------------------------------------} +% --- DYNAMIC STALL +% --------------------------------------------------------------------------------{ +@TECHREPORT{theodorsen:1935, + title={General theory of aerodynamic instability and the mechanism of flutter}, + author={T. Theodorsen}, + year={1935}, + institution={NACA report no 496, National Advisory Committee for Aeronautics}, + pages={p413–433} +} + +@article{leishmanbeddoes1989, + author = {J. G. Leishman and T.S. Beddoes}, + title = {A semi-empirical model for dynamic stall}, + year = {1989}, + journal= {Journal of the American Helicopter Society}, + volume={34}, + number={3}, + pages={p3-17} +} + +@article{petot:1989a, + title = {Differential equation modeling of dynamic stall}, + language = {English}, + author = {Petot, D.}, + journal = {Recherche Aerospatiale Technical Translation}, + number = {5}, + pages = {59-72}, + year = {1989}, + issn = {0379380x}, + abstract = {This study concerns dynamic stall in a two-dimensional flow, and more precisely the modeling of the global aerodynamic forces by means of differentiel equations derived from wind tunnel tests. The equations were arrived at first by measuring the aerodynamic coefficients on an airfoil subjected to low-amplitude vibrations. When the model took its final form, it was possible to calculate its parameters directly from large-amplitude measurements. The formula proposed here finds the lift, moment and drag for pitching and heaving actions and for a wind speed variation, and has been verified by wind tunnel tests whenever possible. The model equations have a very similar formulation for the three aerodynamic coefficients and are remarkably insensitive to the type of airfoil. They seem to have a character that is both necessary and sufficient for reconstructing the experiment. All of these points conspire to give great confidence in this method, based on experimental data, despite the dispersion encountered in this type of measurement.} +} + +@article{oye:1991, + author = {S. {\O}ye}, + title = {Dynamic stall, simulated as a time lag of separation}, + year = {1991}, + journal= {Proceedings of the 4th IEA Symposium on the Aerodynamics of Wind Turbines}, + publisher={ETSU-N-118, Harwell Laboratory, UK} +} +@article{larsen2007, + author = {J.W. Larsen and S.R.K. Nielsen and S. Krenk}, + title = {Dynamic stall model for wind turbine airfoils}, + journal = {Journal of Fluids and Structures}, + volume = {23}, + number = {7}, + pages = {p959 - 982}, + year = {2007}, + issn = {0889-9746} +} + +@techreport{hansen:2004dynastall, + title = {A Beddoes-Leishman type dynamic stall model in state-space and indicial formulations}, + author = {Hansen, M.H. and Gaunaa, Mac and Aagaard Madsen, Helge}, + year = {2004}, + issn = {01062840}, + isbn = {8755030904}, + institution={Ris{\o} National Laboratory}, + address={Roskilde, Denmark} +} + +@techreport{bergami:2012, + title = {ATEFlap Aerodynamic Model, a dynamic stall model including the effects of trailing edge flap deflection}, + author = {Bergami, Leonardo and Gaunaa, Mac}, + year = {2012}, + issn = {01062840}, + isbn = {9788755039346}, + institution={DTU - Ris{\o} National Laboratory} +} + +@article{holierhoek:2013a, + title = {Comparing different dynamic stall models}, + language = {English}, + publisher = {WILEY-BLACKWELL}, + author = {Holierhoek, J. G. and de Vaal, J. B. and van Zuijlen, A. H. and Bijl, H.}, + journal = {Wind Energy}, + volume = {16}, + number = {1}, + pages = {139-158}, + year = {2013}, + issn = {10954244, 10991824}, + abstract = {The dynamic stall phenomenon and its importance for load calculations and aeroelastic simulations is well known. Different models exist to model the effect of dynamic stall; however, a systematic comparison is still lacking. To investigate if one is performing better than another, three models are used to simulate the Ohio State University measurements and a set of data from the National Aeronautics and Space Administration Ames experimental study of dynamic stall and compare results. These measurements were at conditions and for aerofoils that are typical for wind turbines, and the results are publicly available. The three selected dynamic stall models are the ONERA model, the BeddoesLeishman model and the Snel model. The simulations show that there are still significant differences between measurements and models and that none of the models is significantly better in all cases than the other models. Especially in the deep stall regime, the accuracy of each of the dynamic stall models is limited. Copyright (C) 2012 John Wiley \& Sons, Ltd.}, + doi = {10.1002/we.548} +} + + +% --------------------------------------------------------------------------------} +% --- Tip vortex +% --------------------------------------------------------------------------------{ +@PHDTHESIS{bailey:2006, + author = {S.C.C. Bailey}, + title = {The interaction of a Wing-Tip Vortex and Free-Stream Turbulence}, + school = {University of Ottawa}, + year = {2006} +} + +@ARTICLE{hansen:2004, + author = {M. O. L. Hansen and J. Johansen}, + title = {Tip Studies Using CFD and Comparison with Tip Loss models}, + journal = {Wind Energy}, + year = {2004}, + volume={7}, + pages = {343-356} +} + + +@article{spalart:1998, +author = {Spalart, Philippe R}, +title = {{Airplane trailing vortices}}, +journal ={Annual Reviews of Fluid Mechanics}, +year = {1998}, +volume ={30} +} + +% --------------------------------------------------------------------------------} +% --- Winglets +% --------------------------------------------------------------------------------{ +@ARTICLE{gaunaa:2011, + author = {M. Gaunaa and N.N. S{\o}rensen and M. D{\o}ssing}, + title = {Prediction of steady aerodynamic performance of rotors with winglets using simple prescribed ake methods}, + journal = {AIAA Aerospace Sciences Meeting}, + year = {2011}, + volume={543}, + otherinfo = {Orlando, Florida} +} + + + + +% --------------------------------------------------------------------------------} +% --- CFD +% --------------------------------------------------------------------------------{ +@PHDTHESIS{sorensen:1986, + author = {J. N. S{\o}rensen}, + title = {Three-level, viscous-inviscid interaction technique for the prediction of separated flow past rotating wing}, + school = {Technical University of Denmark - DTU}, + year = {1986} +} + + +@PHDTHESIS{ellipsys, + author={N. N. S{\o}rensen}, + school={Ris{\o}-DTU}, + year=1995, + title={General purpose flow solver applied to flow over hills} +} + +@phdthesis{Michelsen:1992, + author = {Michelsen, J. A.}, + title = {{Basis3D - a Platform for Development of Multiblock PDE Solvers}}, + school = {Technical University of Denmark (DTU) - Deparment of Fluid Mechanics}, + year = {1992} +} +@book{Michelsen:1994-2, + author = {Michelsen, J. A.}, + title = {{B}lock {S}tructured {M}ultigrid Solution of 2{D} and 3{D} elliptic + {PDE}'s.}, + year = {1994}, + publisher={AFM 94-05 - Department of Fluid Mechanics, Technical University of Denmark} +} +@phdthesis{Sorensen:1995, + author = {S{\o}rensen, N. N.}, + title = {General Purpose Flow Solver Applied to Flow over Hills}, + school = {{R}is{\o} {N}ational {L}aboratory.}, + year = {1995} +} + +% AL +@article{sorensenshen:2002, +title = "Numerical Modelling of Wind Turbine Wakes", +publisher = "A S M E International", +author = "S{\o}rensen, {Jens N{\o}rk{\ae}r} and Shen, {Wen Zhong}", +year = "2002", +volume = "124", +number = "2", +pages = "393--399", +journal = "Journal of Fluids Engineering", +issn = "0098-2202", +doi = {10.1115/1.1471361}, +} + +% AD +@PHDTHESIS{mikkelsen:2004, + title = "Actuator Disc Methods Applied to Wind Turbines", + author = "R. F. Mikkelsen", + year = "2004", + series = "MEK-FM-PHD", + school = "DTU-MEK", + isbn = {8774752960} +} +BOOK{mikkelsen2003, + title = {{Actuator Disc Methods Applied to Wind Turbines}}, + year = {2003}, + author = {Mikkelsen, Robert}, + booktitle = {Wind Energy}, +} +@PHDTHESIS{troldborg:2008phdthesis, +title = {{Actuator Line Modeling of Wind Turbine Wakes}}, +author = {N. Troldborg}, +school = {DTU-MEK}, +isbn = {9788789502809}, +year = {2008} +} + + +@ARTICLE{zahle:2007, + author = {F. Zahle and N. N. S{\o}rensen}, + title = {On the Influence of Far-Wake Resolution on Wind Turbine Flow Simulations}, + journal = {Journal of Physics - Conference Series 75}, + year = {2007} +} +@ARTICLE{shen:2007, + title = {Determination of Angle of Attack for Rotating Blades}, + year = {2007}, + journal={Proceedings of the Euromech colloquium - DTU}, + author={W. Z. Shen and M. O. L Hansen and J. N. S{\o}rensen}, + volume={37} +} +@TECHREPORT{bak:2005chapter2, + title = {Advanced rotor aerodynamics including tip and root aerodynamics}, + year = {2005}, + institution={Ris{\o} - DTU}, + author={J. Johansen and N.N. S{\o}rensen and H.A. Madsen and W. Z. Shen and V. Okulov}, + editor={C. Bak}, + number={Riso-R-1559 - Chapter 2} +} + +@ARTICLE{johansen:2004, + author = {Johansen, Jeppe and S{\o}rensen, Niels N.}, + title = {Aerofoil characteristics from 3D CFD rotor computations}, + journal = {Wind Energy}, + volume = {7}, + number = {4}, + publisher = {John Wiley \& Sons, Ltd.}, + pages = {283-294}, + year = {2004}, +} + + +@article{kondo:1997, +author = {Kondo, K. and Murakami, S. and Mochida, A.}, +title = {{Generation of velocity fluctuations for inflow boundary condition of LES}}, +journal = {Journal of Wind Engineering and Industrial Aerodynamics}, +volume={67\&68}, +pages={51-64}, +year = {1997} +} +@article{troldborg:2007, + title = {Actuator line simulation of wake of wind turbine operating in turbulent inflow}, + language = {English}, + publisher = {IOP PUBLISHING LTD}, + author = {N. Troldborg and J. N. Sorensen and R. Mikkelsen}, + journal = {Science Of Making Torque From Wind}, + volume = {75}, + number = {1}, + pages = {-}, + year = {2007}, + issn = {17426596, 17426588}, + abstract = {The wake of a wind turbine operating in an atmospheric turbulent inflow without mean shear is simulated using a numerical method, which combines large eddy simulations with an actuator line technique. A turbulent inflow with the same spectral characteristics as the atmosphere is produced by introducing time varying body forces in a plane upstream the rotor. The results of the simulation are compared to those obtained on a wind turbine in uniform inflow at the same mean wind speed and from this comparison a number of features of the influence of inflow turbulence on wake dynamics are deduced. Furthermore, the results are used to verify the validity of some of the basic assumptions employed in simpler engineering models and to study their bounds of application. The large amount of data from the wake simulation can easily be used in simple engineering methods to model a wind turbine operating in the wake of an upstream turbine.}, + doi = {10.1088/1742-6596/75/1/012063} +} + +@PHDTHESIS{heinz:2013, + author = {J. C. Heinz}, + title = {Partitioned Fluid-Structure Interaction for Full rotor computations using CFD} , + school = {Technical University of Denmark}, + year = {2013}, +} + + +@article{troldborg:2014, + title = {A simple atmospheric boundary layer model applied to large eddy simulations of wind turbine wakes}, + language = {eng}, + publisher = {John Wiley and Sons Ltd}, + author = {N. Troldborg and J. N. S{\o}rensen and R. F. Mikkelsen and N. N. S{\o}rensen}, + journal = {Wind Energy}, + volume = {17}, + number = {4}, + pages = {657-669}, + year = {2014}, + issn = {10991824, 10954244}, + abstract = {A simple model for including the influence of the atmospheric boundary layer in connection with large eddy simulations of wind turbine wakes is presented and validated by comparing computed results with measurements as well as with direct numerical simulations. The model is based on an immersed boundary type technique where volume forces are used to introduce wind shear and atmospheric turbulence. The application of the model for wake studies is demonstrated by combining it with the actuator line method, and predictions are compared with field measurements. Copyright © 2013 John Wiley \& Sons, Ltd.}, + doi = {10.1002/we.1608} +} + + +@article{rethore:2012, + Author = {R\'{e}thor\'{e}, P.-E. and S\o{}rensen, N. N.}, + Journal = {Wind Energy}, + Title = {{A discrete force allocation algorithm for modelling wind turbines in computational fluid dynamics}}, + Volume = {15}, + Pages = {915--926}, + Year = {2012} +} +@article{rethore:2013, + Author = {R\'{e}thor\'{e}, P.-E. and van der Laan, P. and Troldborg, N. and Zahle, F. and S\o{}rensen, N. N.}, + Journal = {Wind Energy}, + Title = {{Verification and validation of an actuator disc model}}, + Volume = {17}, + Pages = {919--937}, + Year = {2013} +} +@article{troldborg:2015, + title = "A consistent method for finite volume discretization of body forces on collocated grids applied to flow through an actuator disk", + keywords = "CFD, Actuator disk, Collocated grid, Finite volume, Discrete body force", + publisher = "Pergamon", + author = "Niels Troldborg and S{\o}rensen, {Niels N.} and Pierre-Elouan R\'ethor\'e and {van der Laan}, Paul", + year = "2015", + doi = "10.1016/j.compfluid.2015.06.028", + volume = "119", + pages = "197--203", + journal = "Computers \& Fluids", + issn = "0045-7930", +} +% --------------------------------------------------------------------------------} +% --- WT CODES +% --------------------------------------------------------------------------------{ +@book{flexoye, + author={S. {\O} ye}, + title={Fix Dynamisk, aeroelastisk beregning af vindm\o llevinger}, + publisher={Report AFM83-08, Fluid Mechanics, DTU}, + year={1983} +} + +@misc{flex4methoder, + author={S. {\O}ye}, + title={Flex4 Metoder}, + year={1990} +} + +@book{flex, + author={S. {\O}ye}, + title={FLEX - http://www.fluid.dtu.dk/}, + year={} +} + +@MANUAL{aerodyntheorymanual, + title = {AeroDyn Theory Manual}, + author = {P. J. Moriarty and A.C. Hansen}, + publisher={NREL}, + year=2005 +} + +@book{xfoil, + author={M. Drela}, + title={XFOIL - http://raphael.mit.edu/xfoil/}, + publisher={MIT}, + year={2000} +} +@INPROCEEDINGS{xfoil:article, + author={M. Drela}, + title={XFOIL: an analysis and design system for low Reynolds number airfoils}, + booktitle={Conference on Low Reynolds Number Aerodynamics}, + publisher={University Notre Dame }, + year = 1989 +} + +@book{bladed, + author={Garrad Hassan}, + title={BLADED - http://www.garradhassan.com/}, + publisher={}, + year={2010} +} + + +@book{hawc, + author={T. J. Larsen and A. M. Hansen}, + title={HAWC2 - User manual}, + year={2007}, + publisher={DTU-Ris\o-R-1597} +} +@book{hawc2, + author={T. J. Larsen and A. M. Hansen}, + title={HAWC2 - User manual}, + year={2007}, + publisher={DTU-Ris\o-R-1597} +} + + +@book{wasp, +author = {WAsP the Wind Atlas Analysis and Application Program}, +title = {http://www.wasp.dk/}, +year = {2010}, +publisher= {RIS\O} +} + + +@TECHREPORT{propdynamic:manual, + title={HAWT Performance With Dynamic Stall}, + author={B. D. Hibbs}, + institution={Solar Energy Research Institute}, + year={1986} +} + +@TECHREPORT{aerodyn:assessment, + title={Assessment of AeroDyn Theory Basis Including Unsteady Aerodynamics Modules}, + author={J. Gordon Leishman}, + institution={Rotor Systems Research LLC}, + year={2011} +} + + +% --- FAST and NREL tools +@MISC{openfast, + author = {OpenFAST}, + title={Available at \url{http://github.com/OpenFAST/OpenFAST/}}, +} +@TECHREPORT{fastuser, + author = {J. M. Jonkman and M. L. Buhl}, + title = {FAST User's Guide}, + institution = {National Renewable Energy Laboratory}, + year = {2005}, + number={NREL/EL-500-38230} +} +@TECHREPORT{jonkman:2013modul, + author = {J. Jonkman}, + title = {The New Modularization Framework for the FAST Wind Turbine CAE Tool}, + institution={National Renewable Energy Laboratory}, + year = {2013}, + number={ NREL/CP-5000-57228} +} +@article{jonkman:2013a, + author = {J. Jonkman}, + title = {The new modularization framework for the FAST wind turbine CAE tool}, + journal = {51st Aiaa Aerospace Sciences Meeting Including the New Horizons Forum and Aerospace Exposition 2013}, + address ={Grapevine, Texas}, + year = {2013}, + isbn = {9781624101816}, +} + +@TECHREPORT{sprague:2015modul, + title={FAST Modular Framework for Wind Turbine Simulation: New Algorithms and Numerical Examples}, + author={Michael A. Sprague, Jason M. Jonkman and Bonnie J. Jonkman}, + institution={National Renewable Energy Laboratory}, + number={NREL/CP-2C00-63203}, + year={2015} +} + +@TECHREPORT{subdyn:manual, + title={SubDyn User's Guide and Theory Manual}, + author={R. Damiani, J. Jonkman and G. Hayman}, + institution={National Renewable Energy Laboratory}, + number={NREL/TP-5000-63062}, + year=2015 +} + +@TECHREPORT{aerodyn:manual, + title = {AeroDyn Theory Manual}, + author = {P. J. Moriarty and A. Craig Hansen}, + institution = {National Renewable Energy Laboratory}, + year = 2005, + month = {December}, + note = {NREL/EL-500-36881} +} + +@TECHREPORT{aerodyn:manualUnsteadyRick, + title = {The Unsteady Aerodynamics Module for FAST 8}, + author = {R. Damiani and G. Hayman}, + year = 2017, + institution = {National Renewable Energy Laboratory}, +} + + +@article{wang:2015, + title = {Beamdyn: A high-fidelity wind turbine blade solver in the FAST modular framework}, + language = {eng}, + publisher = {American Institute of Aeronautics and Astronautics Inc.}, + journal = {33rd Wind Energy Symposium}, + pages = {17 pp., 17 pp.}, + year = {2015}, + isbn = {9781624103445}, + address = {Kissimmee, Florida}, + abstract = {BeamDyn, a Legendre-spectral-finite-element implementation of geometrically exact beam theory (GEBT), was developed to meet the design challenges associated with highly flexible composite wind turbine blades. In this paper, the governing equations of GEBT are reformulated into a nonlinear state-space form to support its coupling within the modular framework of the FAST wind turbine computer-aided engineering (CAE) tool. Different time integration schemes (implicit and explicit) were implemented and examined for wind turbine analysis. Numerical examples are presented to demonstrate the capability of this new beam solver. An example analysis of a realistic wind turbine blade, the CX-100, is also presented as validation.}, + author = {Wang, Qi and Johnson, Nick and Sprague, Michael A. and Jonkman, Jason} +} + + + + + +% --------------------------------------------------------------------------------} +% --- REFERENCE TURBINES (NREL5MW, DTU10MW) - EXPERIMENTS (MEXICO, DANAERO) +% --------------------------------------------------------------------------------{ +@TECHREPORT{danaerofinal, + author = {{Madsen et al.}}, + title = {The DAN-AERO MW Experiments - Final Report}, + institution = {Ris{\o}-DTU}, + year = {2010}, + number={Riso-R-1726} +} + + +@article{breton:2010, +author = {Breton, S}, +number = {January}, +pages = {1--11}, +title = {{Using the Actuator Surface Method to Model the Three-Bladed MEXICO Wind Turbine}}, +year = {2010} +} + +@MASTERSTHESIS{pauvretype, + author = {L. Pascal}, + title = {Mexico project data analysis }, + school = {ISAE-Supaero - ECN Wind Memo-09-010}, + year = {2008}, +} +% otherinfo = {ECN Wind Memo-09-010 - ISAE Supaero Master Thesis} + +@article{guntur:2011, +author = {Guntur, Srinivas and Bak, Christian and S\o rensen, Niels N}, +journal = {Analysis}, +number = {1}, +title = {{Analysis of 3D Stall Models for Wind Turbine Blades Using Data from the MEXICO Experiment}}, +year = {2011} +} + +@phdthesis{guntur:phd, + author = {S. Guntur}, + title = "A Detailed Study of the Rotational Augmentation and Dynamic Stall Phenomena for Wind Turbines", + year = "2013", + school = "DTU Wind Energy", + address = "Denmark", +} + + + +@article{micallef:2009, +author = {Micallef, D and Kloosterman, M and Ferreira, C and Sant, T and Bussel, G Van}, +journal = {Simulation}, +number = {October}, +pages = {46--48}, +title = {{Comparison and Validation of BEM and Free Wake Unsteady Panel Model with the MEXICO Rotor Experiment}}, +year = {2009} +} + +@TECHREPORT{schepers:ieatask29, + author = {J. G. Schepers and K. Boorsma and {et al.}}, + title = {{Final report of IEA Task 29, Mexnext (Phase 1): Analysis of Mexico wind tunnel measurementsc}}, + institution = {IEA Wind - ECN}, + year = {2012}, + otherinfo = {ECN-E–12-004} +} + + +@INPROCEEDINGS{schepers:2012, + author = {J.G. Schepers and K. Boorsma and X. Munduate}, + title = {Final Results from Mexnext-I: "Analysis of detailed aerodynamic measurements on a 4.5 m diameter rotor placed in the large German Dutch Wind Tunnel DNW"}, + booktitle = {The Science of Making Torque from the Wind, Oldenburg}, + year = {2012}, + otherinfo = {} +} + +@article{sorensen:2014mexico, + title = {Near wake Reynolds-averaged Navier-Stokes predictions of the wake behind the MEXICO rotor in axial and yawed flow conditions}, + language = {English}, + publisher = {John Wiley and Sons Ltd}, + author = {S{\o}rensen, N. N. and Bechmann, A. and R\'ethor\'e, P. E. and Zahle, F.}, + journal = {Wind Energy}, + volume = {17}, + number = {1}, + pages = {75-86}, + year = {2014}, + issn = {10954244, 10991824}, + abstract = {In the present paper, Reynolds-averaged Navier-Stokes predictions of the flow field around the MEXICO rotor in yawed conditions are compared with measurements. The paper illustrates the high degree of qualitative and quantitative agreement that can be obtained for this highly unsteady flow situation, by comparing measured and computed velocity profiles for all three Cartesian velocity components along four axial transects and several radial transects}, + doi = {10.1002/we.1559} +} + +@article{shen:2011mexico, + title = {Actuator Line/Navier-Stokes Computations for Flows past the Yawed MEXICO Rotor}, + language = {English}, + author = {Shen, W. Z. and S{\o}rensen, J. N. and Yang, H.}, + journal = {Proceedings of the Wake Conference}, + year = {2011}, + abstract = {In the paper the Actuator Line/Navier-Stokes model has been used to simulate flows past the yawed MEXICO rotor. The computed loads as well as the velocity field behind the yawed rotor are compared to detailed pressure and PIV measurements which were carried out in the EU funded MEXICO project. The computed loading follows in general the experimental counterpart in a period of rotation with a slight overprediction on the mean loading which probably is caused by the inaccuracy of the airfoil data. The predicted wake velocity agrees well with the experiments in the near wake region. Computations with the DNW wind tunnel for the yawed rotor are also performed and show that the tunnel effects are very small in the loading and in the near wake field behind the rotor whereas in the far wake region (>1D) the influence becomes important.} +} + +@techreport{schepers:2007mexico, +author = {J.G. Schepers and H. Snel}, +title = {{Model Experiments in Controlled Conditions}}, +institution = {ECN - ECN-E--07-042}, +year={2007} +} + + +@article{shen:2012mexico, + title = {Actuator line/Navier-Stokes computations for the MEXICO rotor: comparison with detailed measurements}, + language = {English}, + publisher = {WILEY-BLACKWELL}, + author = {Shen, Wen Zhong and Zhu, Wei Jun and Sorensen, Jens Norkaer}, + journal = {Wind Energy}, + volume = {15}, + number = {5}, + pages = {811-825}, + year = {2012}, + issn = {10954244, 10991824}, + abstract = {In the European collaborative MEXICO (Model Experiments in Controlled Conditions) project, a series of experiments was carried out on a 4.5?m diameter wind turbine rotor to validate numerical diagnostics tools. Here, some of the measured data are compared with computations of the combined actuator line/NavierStokes (AL/NS) model developed at the Technical University of Denmark. The AL/NS model was combined with a large eddy simulation technique and used to compute the flow past the MEXICO rotor in free air and in the DNW German-Dutch wind tunnel for three commonly defined test cases at wind speeds of 10, 15 and 24?m?s -1. Two sets of airfoil data were used. Comparisons of blade loadings showed that the AL/NS technique with the modified airfoil data is in better agreement with the measurements than with the original 2D airfoil data. Comparisons of detailed near-wake velocities showed good agreement with the measurements. Computations including the influence of the geometry of the wind tunnel showed that tunnel effects are not significant and the effect of the geometry of the wind tunnel only results in a speedup of 3\% at a thrust coefficient of CT ?=}, + doi = {10.1002/we.510} +} + +@TECHREPORT{nrel5mw, + title ={Definition of a 5MW Reference Wind Turbine for Offshore System Development}, + author = {J. Jonkman and S. Butterfield and W. Musial and G. Scott}, + institution = {National Renewable Energy Laboratory}, + year = {2009}, + number={NREL/TP-500-38060} +} + + + +% --------------------------------------------------------------------------------} +% --- WIND ENERGY - INDUSTRY - WEB SITES and ASSOCIATIONS +% --------------------------------------------------------------------------------{ +@INPROCEEDINGS{siemensperspective:2013, + author = {E. Mayda and J. Obrecht and K. Dixon and A. Zamora and L. Mailly and R. Sievers and M. Singh}, + title = {Wind Turbine Rotor R\&D; an OEM Perspective}, + booktitle = { Conference: International Conference on Future Technologies for Wind Energy, At University of Wyoming }, + year = {2013}, +} + + @book{winddata, +author = {K. Hansen}, +title = {http://www.winddata.dk/}, +year = {2010}, +publisher= {} +} + +@book{nwtcmast, +author = {NWTC M2 tower}, +title = {http://www.nrel.gov/midc/nwtc\_m2}, +year = {2010}, +publisher= {NREL} +} + +@book{windpoweringamerica, +author = {Wind Powering America}, +title = {http://www.windpoweringamerica.gov}, +year = {2010}, +publisher= {DOE} +} + + +@book{nasasrtm, +author = {SRTM NASA Database}, +title = {http://www2.jpl.nasa.gov/srtm}, +year = {2010}, +publisher= {} +} + +@book{ngdc, +author = {National Geophysical Data Center}, +title = {http://www.ngdc.noaa.gov}, +year = {2010}, +publisher= {NOAA} +} +@book{unep, +author = {UNEP}, +title = {Insurance Risk Management for Renewable Energy Projects}, +year = {2010}, +publisher= {UNEP} +} + +% --------------------------------------------------------------------------------} +% --- WAKES +% ---------------------------------------------------------------------------------{ +@inproceedings{Rettenmeier:2010, + author = {Rettenmeier, A. and Bischoff, O. and Hofs\"{a}{\ss}, M. and Schlipf, + D. and Trujillo, J. J.}, + title = {{W}ind {F}ield {A}nalysis {U}sing {A} {N}acelle-{B}ased {L}idar {S}ystem}, + publisher = {EWEC 2010 Warsaw}, + booktitle={Scientific proceedings}, + year = {2010} +} +@ARTICLE{Rettenmeier:2012b, + author = {Rettenmeier, A. and Bischoff, O. and Schlipf, D. and Anger, J. and + Hofs\"{a}{\ss} , M. and Cheng, P.W. and Wagner, R. and Courtney, + M. and Mann, J.}, + title = {Turbulence and wind speed investigations using a nacelle-based Lidar + scanner and a met mast}, + journal = {Presentation Proceedings of EWEA 2012 conference, Copenhagen}, + year = {2012} +} + +@ARTICLE{Rettenmeier:2012, + author = {Rettenmeier, A. and Anger, J. and Bischoff, O. and Hofs\"{a}{\ss}, + M. and Schlipf, D. and W\"{u}rth, I.}, + title = {{Nacelle-Based Lidar Systems}}, + journal = {Summer School in Remote Sensing for Wind Energy, Boulder, Colorado, + 2012}, + year = {2012} +} + +@inproceedings{machefaux:2013, + author = {Machefaux, E. and Larsen, G. C. and Troldborg, N. and Rettenmeier, + A.}, + title = {{S}ingle {W}ake {M}eandering, {A}dvection and {E}xpansion - An analysis + using an adapted {P}ulse {L}idar and {CFD} {LES}-{ACL} simulations}, + publisher = {EWEC 2013 Vienna}, + booktitle={Scientific proceedings}, + year = {2013}, + pages = {50-55} +} + +@ARTICLE{Machefaux:2014b, + author = {Machefaux, E. and Larsen, G. C. and Troldborg, N. and Gaunnaa, M. and Rettenmeier, A.}, + title = {Empirical Modelling of Single Wake Advection and Expansion using + Full Scale Pulsed Lidar based Measurements}, + journal = {Journal of Wind Energy}, + year = {2015} +} +@ARTICLE{machefaux:2015, + title={Experimental and numerical study of the atmospheric stability impact on wind turbine wake}, + author={E. Machefaux and G.C. Larsen and T. Koblitz and N. Troldborg and M. Kelly and Abhijit Chougule and K.S. Hansen and J.S. Rodrigo}, + year={2015}, + note={Submitted to the journal {Wind Energy} in December 2014}, + journal={Wind Energy} +} + + +@article {mctavish:2015, +author = {S. McTavish and S. Rodrigue and D. Feszty and F. Nitzsche}, +title = {An investigation of in-field blockage effects in closely spaced lateral wind farm configurations}, +journal = {Wind Energy}, +volume = {18}, +number = {11}, +issn = {1099-1824}, +url = {http://dx.doi.org/10.1002/we.1806}, +doi = {10.1002/we.1806}, +pages = {1989--2011}, +keywords = {in-field blockage, wind farm experiment, lateral separation, boundary layer wind tunnel, vortex particle method}, +year = {2015}, +} + +% ------------------------------------------------------------------------------} +% --- INDUCTION ZONE +% ---------------------------------------------------------------------------------{ +@article{forsting:2017, + title = "The flow upstream of a row of aligned wind turbine rotors and its effect on power production", + author = "A. R. {Meyer Forsting} and N. Troldborg and M. Gaunaa", + year = "2017", + doi = "10.1002/we.1991", + volume = "20", + pages = "63–77", + journal = "Wind Energy", + issn = "1095-4244", + publisher = "John/Wiley \& Sons Ltd.", + number = "1", +} +@ARTICLE{troldborg:2017, + author = {N. Troldborg, A. R. Meyer Forsting}, + title = {Simulations of wind turbine induction in uniform inflow}, + journal = {Journal of Wind Energy}, + year = {2017} +} + + + +% --------------------------------------------------------------------------------} +% --- WIND FARM +% --------------------------------------------------------------------------------{ +@book{NWTCdesign, +author = {W. Johnson and N. Kelley}, +title = {Design Specifications for the Development of the Initial Validation Software for Processing of NWTC 80-Meter Meteorological Tower Data}, +year = {2000}, +month= {January}, +publisher= {NREL/TP-500-27104} +} + +@book{nwtcea, +author = {DOE-NREL}, +title = {Site-Wide Environmental Assessment of National Renewable Energy Laboratorys National Wind Technology Center}, +year = {2002}, +month= {May}, +publisher= {EA1378} +} + +@book{baoweb, +author = {BAO tower}, +title = {http://www.esrl.noaa.gov/psd/technology/bao}, +year = {2010}, +publisher= {NOAA} +} + +@book{BAOdesign, +author = {NOAA/ERL wave propagation laboratory}, +title = {Turbulence statistics for design of wind turbine generator}, +year = {1980}, +month= {December}, +publisher= {Report to DOE} +} +@book{nrelwest, +author = {Western Wind Ressource Dataset}, +title = {http://wind.nrel.gov/Web\_nrel/}, +year = {2010}, +publisher= {NREL} +} +@book{nrelatlas, +author = {Wind Energy Ressource Atlas of the United States}, +title = {http://rredc.nrel.gov/wind/pubs/atlas/}, +year = {2010}, +publisher= {NREL} +} + + +@book{chicagotribunesmart, +author = {Judith Kohler }, +title = {Boulder on track to become first smart grid city}, +year = {2009}, +month={February}, +day={7}, +publisher= {Chicago Tribune} +} +@book{xcelsmart, +author = {Xcel Energy's}, +title = {Design Plan for Boulder, Colorado}, +year = {2008}, +publisher= {Utility Innovations} +} + +@book{autoblog, +author = {Domenick Yoney}, +title = {http://green.autoblog.com/2008/03/13/boulder-to-become-first-smart-grid-city/ +}, +year = {2008}, +} + +@book{v80, +author = {Vestas Wind Systems A/S}, +title = {Vestas V80 - 2MW - Product brochure}, +year = {2010}, +} + +@book{fluctuwind, +author = {Carsten Albrecht}, +title = {Fluctuations in annual wind energy potential - A method for risk analysis and long term correlation}, +year = {2006}, +publisher={ewec}, +} + +@book{icethrow, +author = {Colin Morgan and Ervin Bossanyi and Mr Henry Seifert}, +title = {Assessment of safety risks arising from wind turbine icing}, +year = {1998}, +publisher={BOREAS IV - Deutsches Windenergie-Institut}, +} + +@book{riskseisme, +author = {Ian Prowell and Paul Veers }, +title = {Assessment of Wind Turbine Seismic Risk}, +year = {2009}, +month={march}, +publisher={Sandia report }, +} + + +@book{coldclim, +author = {Holttinen, Hannele, Morgan, Seifert, and Sntti}, +title = {Wind Energy Production in Cold Climate : Tammelin, Cavaliere}, +year = {1997}, +} + +@inbook{witold:ewea2014, + title = "Parametric approximation of airfoil aerodynamic coefficients at high angles of attack", + keywords = "Aerodynamic coefficients, Lift, Drag, Moment, high angles of attack, Separation, Modelling, Harmonic functions, Even sine, Even cosine", + author = "W.R. Skrzypinski and F. Zahle and C. Bak", + year = "2014", + booktitle = "Proceedings of EWEA 2014", + publisher = "European Wind Energy Association (EWEA)", +} + +@misc{witold:presentationCl, + title = {Increase in the Annual Energy Production due to a Retrofit of Vortex Generators on Blades}, + author = {W.R. Skrzypinski and M. Gaunaa and C. Bak and N. Fiil Br{\o}nnum and E. {Brink Kruse Olsen}}, + institution={DTU}, + year = "2015" +} + +@book{weco, +title={Wind Energy Production in Cold Climate (WECO)}, +author={B. Tammelin and M. Cavaliere and H. Holttinen and C. Morgan and H. Seifert and K. Santti }, +publisher={JOR3-CT95-0014}, +month={December}, +year={1998} +} + + +@book{REDIsummary, +author = { Governor's Energy Office of Colorado}, +title = {Renewable Energy Development Infracture Executive Summary}, +year = {2009}, +publisher= { Government of Colorado} +} + +@book{Chapter3-8, +author = {DOE-NRE}, +title = {Final Site-Wide Environmental Assessment of National Renewable Energy Laboratory's National Wind Technology Center- Chapter 3.8 }, +year = {2002}, +month = {May}, +publisher= {DOE/EA-1378} +} + +@book{nwtcea, +author = {DOE-NREL}, +title = {Site-Wide Environmental Assessment of National Renewable Energy Laboratory - National Wind Technology Center}, +year = {2002}, +month= {May}, +publisher= {EA1378} +} + + + + + +% --------------------------------------------------------------------------------} +% --- TURBULENCE +% --------------------------------------------------------------------------------{ +@article{taylor:1938, + title = {The spectrum of turbulence}, + language = {English}, + publisher = {ROYAL SOC LONDON}, + author = {G. I. Taylor}, + journal = {Proceedings of The Royal Society of London Series A-Mathematical And Physical Sciences}, + volume = {164}, + number = {A919}, + pages = {0476-0490}, + year = {1938}, + issn = {00804630} +} + +@article{karman:1937, + title={On the statistical theory of isotropic turbulence}, + author={T. de K\'arm\'an and L. Howarth}, + year={1937}, + journal = {Proceedings of The Royal Society of London Series A-Mathematical And Physical Sciences}, + volume = {164}, + number = {917}, + pages = {192-215}, +} + + +@article{kaimal:1972, + title = {SPECTRAL CHARACTERISTICS OF SURFACE-LAYER TURBULENCE}, + language = {English}, + publisher = {ROYAL METEOROLOGICAL SOC}, + author = {J. C. Kaimal and Y. Izumi and J. C. Wyngaard and R. Cote}, + journal = {Quarterly Journal Of The Royal Meteorological Society}, + volume = {98}, + number = {417}, + pages = {563-589}, + year = {1972}, + issn = {00359009, 1477870x} +} +@article{kristensen:1979, + title = {On Longitudinal Spectral Coherence}, + author = {Kristensen, L.}, + journal = {Boundary-Layer Meteorology}, + volume = {16}, + number = {3}, + pages = {145-153}, + year = {1979}, + issn = {00068314, 15731472}, + doi = {10.1007/BF03335363} +} + +@article{batchelor:1947, + author = {Batchelor, G. K. and Townsend, A. A.}, + title = {Decay of Vorticity in Isotropic Turbulence}, + volume = {190}, + number = {1023}, + pages = {534--550}, + year = {1947}, + doi = {10.1098/rspa.1947.0095}, + publisher = {The Royal Society}, + abstract = {G. K. Batchelor and A. A. TownsendAbstract + The equation describing the rate of change of the mean square vorticity in homogeneous isotropic turbulence is obtained and the terms occurring therein are discussed. A negative contribution to $\overline{d\omega ^{2}}$/dt arises from the effect of viscosity, while a positive contribution is produced by the tendency for the random diffusive motion to extend the vortex lines. This latter contribution can be related to the skewness of the probability distribution of the rate of extension of line elements of the fluid aligned in any given direction. The results of direct measurements of each of the factors appearing in the vorticity equation are then described. The measurements were made by analyzing electrically the output from a hot-wire anemometer placed downstream from a grid in a uniform stream. Both U$^{2}$/$\overline{u^{2}}$ and $\lambda ^{2}$ are found to increase approximately linearly with time during decay of the turbulence and their rates of change are consistent with the energy equation. The skewness factor mentioned above is approximately constant during decay, with the same value at all Reynolds numbers. It follows that the rate of increase of $\overline{\omega ^{2}}$ due to vortex extension is proportional to ($\overline{\omega ^{2}}$)$^{\frac{3}{2}}$, and further measurements show that the effect of viscosity has a similar dependence, so that the ratio of the two contributions to $\overline{d\omega ^{2}}$/dt remains the same throughout the decay. The viscous contribution is always the greater but the contributions tend to equality as the grid Reynolds number increases. The measurements of all terms in the vorticity equation are shown to satisfy the equation with sufficient accuracy. One of the deductions from the measurements is that the double velocity correlation function tends to a cusp at the origin as the Reynolds number increases indefinitely.}, + issn = {0080-4630}, + journal = {Proceedings of the Royal Society of London A: Mathematical, Physical and Engineering Sciences} +} + +@article{karman:1948, +title={Progress in the statistical theory of turbulence}, +author={T. von K\'arm\'an}, +year={1948}, +journal={Proc. Nat. Akad. Sci.}, +pages={p530-539} +} + + +@article{mcwilliams:1984, + title = {THE EMERGENCE OF ISOLATED COHERENT VORTICES IN TURBULENT-FLOW}, + language = {English}, + publisher = {CAMBRIDGE UNIV PRESS}, + author = {J. C. {McWilliams}}, + journal = {Journal Of Fluid Mechanics}, + volume = {146}, + number = {SEP}, + pages = {21-43}, + year = {1984}, + issn = {00221120, 14697645} +} + +@book{Jensen:1989, +author={Jensen B. L. and Sumer B. M. and Fredse J.}, +title={Turbulent oscillatory boundary layers at high Reynolds numbers}, +publisher={Journal of Fluid Mechan- +ics, Vol. 206, p. 265}, +year={1989} +} + +@book{chorin:1994:bookturb, + title = "Vorticity and turbulence", + author = "Chorin, Alexandre Joel", + series = "Applied mathematical sciences", + publisher = "Springer-Verlag", + address = "New York, Berlin, Paris", + url = "http://opac.inria.fr/record=b1077437", + isbn = "3-540-94197-5", + year = 1994 +} +@book{Sumer:2007, +author = {B. Mutlu Sumer}, +title = {Lecture notes on turbulence}, +year = {2007}, +publisher= {DTU} +} + +@book{monin:1971, + title = "Statistical fluid mechanics mechanics of turbulence. vol. 1", + author = "A. S. Monin and A. M. Yaglom", + publisher = "MIT press", + address = "Cambridge", + isbn={978-0-262-13062-2}, + year = 1971 +} + +@book{eckelmann:1974, +author = {H. Ekelmann}, +title = {The structure of the viscous sublayer and the adjacent wall region in a turbulent channel flow}, +year = {1974}, +publisher= {Journal of Fluid Mechanics, vol 65} +} +@book{Laufer:1954, +author = {J. Laufer}, +title = {The Structure of Turbulence in Fully Developed Pipe Flow}, +year = {1954}, +publisher= {NACA, Report No. 1174} +} +@article{Laufer:1949, + author = {Laufer, J.}, + title = {Investigation of turbulent flow in a two-dimensional channel}, + year = 1949, + journal = {National advisory committee for aeronautics}, + pages = {p1247-1266} +} + +@unpublished{Kollgaard:2010, +author = {Lars Kollgaard}, +title = {Note on turbulence and turbulence models, for course 41323 Advanced Fluid Mechanics DTU}, +year = {2010}, +pages = {} +} + + +@book{turboral, +author = {D. R. Fuhrman}, +title = {Statistical and spectral analysis}, +year = {2007}, +publisher= {DTU} +} + + +% +@article{mann:1994, + title={The spatial structure of neutral atmospheric surface-layer turbulence}, + author={J. Mann}, + year={1994}, + journal={Journal of Fluid Mechanics}, + volume = {273}, + pages={p141-168} +} + + +% +@article{mann:1998, + title={Wind field simulation}, + author={J. Mann}, + year={1998}, + journal={Prob. Engng. Mech.}, + volume = {13}, + number = {4}, + pages={p269-282} +} + +@article{veers:1988, + title = {Three-dimensional wind simulation}, + language = {English}, + publisher = {Publ by American Soc of Mechanical Engineers (ASME)}, + author = {Veers, P.S.}, + journal = {American Society of Mechanical Engineers, Solar Energy Division (Publication) SED}, + volume = {7}, + pages = {23-31}, + year = {1988}, + abstract = {A method for numerically simulating a three-dimensional field of turbulent wind-speed (the 'Sandia method') for use in the aerodynamic and structural analyses of wind turbines is presented. The required inputs are single point power spectral densities (PSDs) and the coherence function. Suggestions for appropriate inputs and an example calculation are included. The simulation method is used to obtain 'rotationally sampled' PSDs, which are compared with measurements obtained by Pacific Northwest Laboratories. The results show that the Sandia method is capable of producing simulations that agree with the measurements, especially when the coherence function is augmented from the usual form to include the ratio of spatial separation over height, raised to the 0.25 power.} +} +@article{derbyshire1993, +title={Structure of turbulence in stably stratified atmospheric boundary layers; comparison of large eddy simulation and theoretical models}, +author={S.H. Derbyshire and P.A. Durbin}, +year={1993}, +journal={Waves and Turbulence in Stably Stratified Flows}, +publisher={Clarendon}, +pages={p23-59} +} + + + +@article{bossanyi:2013, + title = {Un-freezing the turbulence: application to LiDAR-assisted wind turbine control}, + language = {English}, + publisher = {INST ENGINEERING TECHNOLOGY-IET}, + author = {E. Bossanyi}, + journal = {IET Renewable Power Generation}, + volume = {7}, + number = {4}, + pages = {321-329}, + year = {2013}, + issn = {17521424, 17521416}, + abstract = {Recent developments in LiDAR technology have led to much interest in the possibility of improving turbine control by using a turbine-mounted LiDAR, to provide advance information about the approaching wind field. This could significantly reduce turbine loads, bringing improved cost-effectiveness, especially for large turbines. There have also been claims of direct increases in energy capture as a result of using such preview information. This study reports on an independent study employing detailed analytical methods to evaluate the likely benefits of LiDAR-assisted control and advise LiDAR manufacturers about the characteristics of their systems, which are most likely to be useful for this application. Accurate simulation models are vital for assessing the performance of LiDARs and controllers which use them. Current models use Taylor's frozen turbulence hypothesis, but this is not strictly valid when LiDAR is used to measure upstream wind speeds, as the measured wind cannot be assumed to convect unchanged to the turbine. A method for avoiding the frozen turbulence assumption is proposed, and simulation results are presented to illustrate the effect on fatigue load reductions which LiDAR-assisted control might achieve. A detailed assessment of possible LiDAR benefits is made using the UPWIND generic 5 MW turbine as an example.}, + doi = {10.1049/iet-rpg.2012.0260} +} + +@article{larsen:2008, + title = {Wake meandering}, + language = {eng}, + author = {G. C. Larsen and H. A. Madsen and K. Thomsen and T. J. Larsen}, + journal = {Wind Energy}, + volume = {11}, + number = {4}, + pages = {377-395}, + year = {2008}, + issn = {10991824, 10954244}, + abstract = {The phenomenon of wake meandering is long known empirically, but has so far not been treated in a satisfactory manner on the wind turbine load modelling side. We present a consistent, physically based theory for wake meandering, which we consider of crucial importance for the overall description of wind turbine loadings in wind farms. In its present version, the model is confined to single wake situations - including a simple heuristic description of wake interaction with a reflecting surface. Contrary to previous attempts to model wind turbine wake loading, the present approach opens for a unifying description in the sense that turbine power and load aspects can be treated simultaneously. This capability is a direct and attractive consequence of the model being based on the underlying physical process, and it potentially opens for optimization of wind farm topology, wind farm operation, as well as control strategies for the individual turbine. The application of the proposed dynamic wake meandering methodology with existing aeroelastic codes is straightforward and does not involve any code modifications. The strategy is simply to embed the combined effect of atmospheric turbulence, added wake turbulence and the intermittent 'turbulence contribution', caused by wake meandering, in files replacing the traditional turbulence file input to aeroelastic computations. Copyright © 2008 John Wiley & Sons, Ltd.}, + doi = {10.1002/we.267} +} +% --------------------------------------------------------------------------------{ +% --- Wind Ressources ad Loads +% --------------------------------------------------------------------------------} +@book{windloads, +author = {C. Dyrbye and S. O. Hansen}, +title = {Wind loads on structures}, +year = {1997}, +publisher= {John Wiley \& Sons} +} + + +@book{forecastingmarkov, +author = {P. Pinson, H. Madsen}, +title = {Adaptive modelling and forecasting of offshore wind power fluctuations with Markov-switching autoregressive models}, +year = {2009}, +publisher= {Journal of Forecasting} +} + +@book{mannwral, +author = {J. Mann}, +title = {Wind profiles and turbulence spectra}, +year = {2010}, +publisher= {Ris\o\ DTU - Course 45701} +} + + + + + + +% --------------------------------------------------------------------------------{ +% --- FEM +% --------------------------------------------------------------------------------} +@book{topopt, +author = {}, +title = {http://www.topopt.dtu.dk/41525/}, +year = {2009}, +publisher= {DTU} +} +@book{optpauli, +author = {Pauli Pedersen}, +title = {Optimal Designs - Structure and Materials - Problems and Tools}, +year = {2003}, +publisher= {Pre-Print DTU} +} +@book{femlecturenotes, +author = {Ole Sigmund}, +title = {Notes and Exercises for the course: FEM-Heavy}, +month={August}, +year = {2009}, +publisher= {Technical University of Denmark} +} +@book{cook:book, + author = {Robert D. Cook }, + title = {Concepts and Applications of Finite Element Analysis}, + year = {2001}, + publisher= {John Wiley \& Sons} +} +@book{ganguli:book, + title={Finite Element Analysis of Rotating Beam}, + author={R. Ganguli}, + year={2017}, + doi={10.1007/978-981-10-1902-9}, + isbn={978-981-10-1901-2}, + publisher={Springer Singapore} +} + +@book{kwonbang:book, + title={The Finite Element Method Using MATLAB, 2nd edition}, + author={Young W. Kwon and Hyochoong Bang}, + publisher={CRC Press}, + year = {2000}, + isbn={9780849300967} +} +@book{ferreira:book, + title={MATLAB Codes for Finite Element Analysis}, + author={A.J.M. Ferreira}, + publisher={Springer}, + year = {2009}, + isbn={978-1-4020- 9199-5} +} + +@techreport{felippa:book, + title={Introduction to finite element methods - Lecture notes (ASEN 5007)}, + author={Carlos A. Felippa}, + institution={{Department of Aerospace Engineering Sciences and Center for Aerospace Structures, University of Colorado, Boulder, CO, USA}}, + year={2004} +} + +@book{przemieniecki:book, + title={Theory of Matrix Structural Analysis}, + author={Przemieniecki, J.S.}, + isbn={9780486649481}, + lccn={67019151}, + series={Dover Civil and Mechanical Engineering}, + url={https://books.google.com/books?id=Jd6i0k4wvtQC}, + year={1985}, + publisher={Dover} +} + +@TECHREPORT{panzer:2009, + author={Heiko Panzer and J{\:o}rg Hubele and Rudy Eid and Boris Lohmann}, + title={Generating a Parametric Finite Element Model of a 3D Cantilever Timoshenko Beam Using Matlab}, + year=2009, + institution={Techical University of Munich, UM Vol. TRAC-4, Nov. 2009} +} + + +% --------------------------------------------------------------------------------{ +% --- ECN - Gusts +% --------------------------------------------------------------------------------} + + +@book{ECNannualreport, +author = {}, +title = {ECN annual report}, +year = {2007}, +publisher= {ECN} +} + + +@book{riso_meangustshape, +author = {G.Cr. Larsen, W. Bierbooms and K.S. Hansen}, +title = {Mean Gust Shapes}, +month={December}, +year = {2003}, +publisher={Ris\o -R-1133(EN) - Ris\o\ National Laboratory, Roskilde, Denmark} +} +@article{stochasticgustmodel, +title = {Stochastic gust model for design calculation of wind turbines}, +author = {W. Bierbooms, Po-Wen Cheng}, +journal = {Journal of wind energineering and industrial aerodynamics}, +volume=90, +pages={p1237-1251}, +year = {2002} +} + +@book{areliabilitybased, +author = {Po Wen Cheng}, +title = {A reliability based methodology for extreme responses of offshore wind turbines}, +year = {2002}, +publisher= {DU Wind, Delft University wind Energy Research Institute} +} + + +@book{EWTWmeteo, +author = {P.J. Eecen and J.P. Verhoef}, +title = {EWTW Meteorological database. Description June 2003 - May 2006}, +month={September}, +year = {2006}, +publisher= {ECN-E--06-004} +} + +@book{LTVMstats, +author = {P.J. Eecen, L.A.H. Machielse, H. Braam and J.P. Verhoef}, +title = {EWTW statistics}, +month={September}, +year = {2005}, +publisher= {ECN-CX--05-084 Confidential} +} + + + +@article{verificationmeanshape, +title = {Verification of the mean shape of extreme gusts}, +author = {W. Bierbooms, J. B. Dragt and H. Cleijne}, +journal = {Wind Energy, 2, 137-150}, +month={August}, +year = {1999} +} + +@article{agustmodel, +title = {A gust model for wind turbine design}, +author = {W. Bierbooms}, +journal = {JSME International Journal, Series B, Vol.47, No.2}, +year = {2004} +} + + +@article{specificgustshapes, +title = {Specific gust shapes leading to extreme response of Pitch-regulated wind turbines}, +author = {W. Bierbooms}, +journal = {Journal of physics : Conference series 75}, +year = {2007} +} + + +@article{onthestatistics, +title = {On the statistics of wind gusts}, +author = {F. Boettcher, Ch. Renner, H.-P. Waldl and J. Peinke}, +journal = {Boundary layer meteorology, Vol. 108}, +month={August}, +year = {2002} +} + +@article{smallandlargescale, +title = {Smale and large scale fluctuations in atmospheric wind speed}, +author = {F. Boettcher, St. Barth and J. Peinke}, +journal = {}, +month={June}, +year = {2005} +} + +@article{constrainedsimulation, +title = {Constrained simulation of critical wind speed gusts by means of wavelets}, +author = {Gunner Chr. Larsen, Kurt S. Hansen and Bo Juul Pedersen}, +journal = {}, +month={}, +year = {} +} + +@article{wavelet, +title = {A wavelet tour of signal processing}, +author = {S. Mallat}, +journal = {Academic Press}, +month={}, +year = {1998} +} + +@article{smallandlarge, +title = {Small and large scale fluctuations in atmospheric wind speeds}, +author = {F. Bottcher, St. Barth and J. Peinke}, +journal = {}, +month={}, +year = {2006} +} +@article{castaing, +title = {}, +author = {B. Castaing, Y. Gagne, E.J. Hopfinger}, +journal = {Physica D 46,177}, +year = {1990} +} + +@article{turbulenceEWTW, +title = {Turbulence Intensity EWTW according to IEC 61400-1}, +author = {P.J. Eecen}, +journal = {ECN report} +} + +@article{eigenfrequencies, +title = {Kwantificeren invloed mastbewegig op gemeten windsnelheid}, +author = {A.J. Brand and J.J. Heijdra}, +journal = {}, +number = {117}, +month={oktober}, +year = {2001} +} + + +@book{tomtom, +title = {Using Operational Experience for Optimizing O\&M of Offshore Wind Farms}, +author = {T.S. Obdam}, +publisher = {ECN-Wind Memo-07-034}, +year = {2007} +} + + +@article{hourlywindspeed, +title = {Determining wind gusts using mean hourly wind speed}, +author = {Lidija Cvitan}, +journal = {Geofizika Vol.20 - UDC 551.509.52}, +month={August}, +year = {2003} +} + +@article{zhou, +title = {Definition of wind profiles}, +author = {Y. Zhou and A. Kareem}, +journal = {J. Struct. Eng. - ASCE, 128, 1082-1086}, +year = {2002} +} + +@book{extremewind, +author = {P.J. Eecen and S.A.M. Barhorst }, +title = {Extreme wind conditions - Measurements at 50m Meteorological Mast at ECN, Petten}, +month={February}, +year = {2004}, +publisher= {ECN-C--04-019} +} + +% --------------------------------------------------------------------------------} +% --- Helicopters +% --------------------------------------------------------------------------------{ +@book{johnson:1994helicopter, + title={{Helicopter theory, Second edition}}, + author={Johnson, W.}, + series={Dover books on physics}, + year={1994}, + isbn={9780486682303}, + publisher={Dover Publications, Mineola, N.Y.} +} + +@book{johnson:2013rotorcraft, + title = {Rotorcraft aeromechanics}, + publisher = {Cambridge University Press, Cambridge}, + author = {Johnson, W.}, + year = {2013}, + isbn = {1107357780, 9781107028074, 9781107357785} +} + + +% --------------------------------------------------------------------------------} +% --- STANDARDS +% --------------------------------------------------------------------------------{ +@book{IEC61400-1AF, +author = {TC88 WG1}, +title = {IEC 61400-1 Annex F : Statistical extrapolation of loads for ultimate strength analysis}, +year = {2005}, +publisher= {} +} + +@book{IEC61400-3, +author = {TC88 WG3}, +title = {IEC 61400-3 Wind turbines : Design requirements for offshore wind turbines}, +year = {2005}, +publisher= {} +} + +@book{IEC61400-3AG, +author = {TC88 WG3}, +title = {IEC 61400-3 Annex G : Characteristic offshore wind turbine loads for ultimate strength analysis}, +year = {2005}, +publisher= {} +} +@book{IEC61400-1, +author = {TC88 WG1}, +title = {IEC 61400-1 Wind turbines : Design requirements}, +year = {2005}, +publisher= {} +} + +@book{IEC61400-12-1, +author = {{International Standard IEC}}, +title = {IEC 61400-12 Power performance measurements of electricity producing wind turbines}, +year = {2005}, +publisher= {International Electrotechnical Commission, Geneva}, +iSBN={ 2831883334} +} + + +@book{germanischerlloyd, +author={Germanischer Lloyd}, +title={Rules and Guidelines - Industrial Services - Guidelines for the certification of wind turbines}, +publisher={Germanischer Lloyd Wind Energy GmbH}, +year={2003} +} + +@book{risoeguidelines, +author = {DNV and Ris\o wind department}, +title = {Guidelines for design of wind turbines}, +year = {2001}, +publisher= {DNV/Ris\o} +} + + +% --------------------------------------------------------------------------------} +% --- NOT MINE +% --------------------------------------------------------------------------------{ +@article{Michelsen1994, +author = {J. A. Michelsen}, +title = {Block structured Multigrid solution of 2D and 3D elliptic PDE's}, +journal = {Technical Report AFM 94-06, Technical University of Denmark}, +year =1994 +} + +@article{Grass1971, +author = {A.J. Grass}, +title = {Structural features of turbulent flow over smooth and rough boundaries}, +journal = {J. Fluid Mech.}, +year={1971}, +vol = 50, +pages ={p223} +} + + +@book{Monin1973, +author = {A. S. Monin and A. M. Yaglom}, +title = {Statistical Fluid Mechanics: Mechanics of Turbulence}, +publisher = {MIT Press}, +year = {1973}, +address = {Cambridge, Mass.} +} + + + +@book{Bingham:2009, +author = {H. B. Bingham and P. S. Larsen and V. A. Barker}, +title = {Computational Fluid Dynamics Lecture Note for Course no. 41319}, +publisher = {Technical University of Denmark}, +year = 2009, +address = {Lyngby, Denmark}, +annote = {183p} +} + + + + +@article{Capp:1983, + author = {Capp, S.P.}, + title = {Experimental investigation of the turbulent axisymmetric jet, PhD dissertation. University at Buffalo, SUNY.}, + year = {1983} +} + +@article{Hussein:1994, + author = {Hussein, J. H., et al}, + title = {Velocity measurements in a high Reynolds number, momentum conserving, axisymmetric, turbulent jet.}, + year = 1994, + publisher = {J. Fluid Mech, vol 258, pp 31-75.} +} + + +@article{Pedersen:2002, + author = {Pedersen, Meyer.}, + title = {POD analysis of flow structures in a scale model of a ventilated room.}, + year = 2002, + journal = {Experiments in Fluids 33 (2002).} +} + + +% --------------------------------------------------------------------------------} +% --- POWER CURVE +% --------------------------------------------------------------------------------{ + +@book{rozennPhD, +author = {R. Wagner}, +title = {Accounting for the speed shear in wind turbine power performance measurement}, +year = {2010}, +month = April, +publisher= {Ris\o\-PhD-Report-58} +} + + +@article{remote_sens_power_curve, +author = {R. Wagner}, +title = {Remote sensing used for power curves}, +year = {2008}, +publisher= {IOP Conf. Series: Earth and Environmental Science} +} + + +@book{power_perf_complex, +author = {T. Pedersen and S. Gjerding and P. Ingham and P. Enevoldsen and J. Kjaer Hansen and H. Kanstrup J\o rgensen}, +title = {Wind Turbine Power Performance Verification in Complex Terrain and Wind Farms}, +year = {2002}, +month ={April}, +publisher= {Ris\o\ National Laboratory, Roskilde} +} + + +@article{power_curve_farm, +author = {S. Frandsen, et.al.}, +title = {Redefinition of Power Curve for More Accurate Performance Assessment of Wind Farms}, +year = {2002}, +month ={April}, +publisher= {Wind Energy, John Wiley & Sons, 3 2000, pp81-111} +} + + +@book{power_curve_accuracy, +author = {C. J. Christensen et.al.}, +title = {Accuracy of Power Curve Measurements}, +year = {1986}, +month ={November}, +publisher= {Ris\o\ National Laboratory, Roskilde} +} + +@book{power_perf_test, +author={IEA}, +title={Power Performance testing}, +publisher={ IEA Recommendation No. 1}, +year={1990} +} + +@book{power_perf_procedure, +author={IEA}, +title={MEASNET Power Performance Measurement Procedure}, +publisher={ MEASNET}, +year={2009}, +month={November} +} + + + + +% --------------------------------------------------------------------------------} +% --- Lidars +% --------------------------------------------------------------------------------{ + +@article{Mann2010, +author = {J. Mann and A. Pena and F. Bingol and R. Wagner and M.S. Courtney}, +title = {Lidar Scanning of Momentum Flux in and above the Atmospheric Surface Layer}, +year = {2010}, +month={reviewing}, +publisher= {American Meteorological Society} +} + +% from spectra to wind speed by multiplying by lambda/2 +% comparisons cup and lidars at different heights +% no calibration needed +% discussion on non uniform back scatter +@article{lidarSmith2006, +title={Wind Lidar Evaluation at the Danish Wind Test Site in H\o vs\o re}, +author={David A. Smith and Michael Harris and Adrian S. Coffey and Torben Mikkelsen and Hans E. J\o rgensen and Jakob Mann and R\'egis Danielian}, +publisher={John Wiley \& Sons}, +year={2006}, +journal={Wind Energy 9}, +pages={p87-97} +} + +% Now lasers wavelengths compliant with fiber optic components (so-called fiber lasers). +% Rotation, Spectrum and averaging well explained +@article{lidarCourtney2008, +title={Testing and comparison of lidars for profile and turbulence measurements in wind energy}, +author={Michael Courtney and Rozenn Wagner and Petter Lindel\"o w}, +publisher={IOP Publishing}, +year={2008}, +journal={14th International Symposium for the Advancement of Boundary Layer Remote Sensing } +} + +% complex terrain, slope with heights +@article{lidarFoussekis, +title={Wind profile Measurements using a Lidar and a 100m Mast}, +author={D. Foussekis and F. Moussakis and P. Papadopoulos and P. Vionis}, +publisher={}, +year={}, +journal={} +} + + +% Gusts, lidars on nacelles +@article{lidarHarris, +title={Laser Anemometry in Wind Energy Applications}, +author={M. Harris}, +publisher={}, +year={}, +journal={} +} + + +% Theoretical derivation of the spectrum measured by a lidar with a weighting function and turbulence model +@article{lidarMann2009, +title={Comparison of 3D turbulence measurements using three staring wind lidars and a sonic anemometer}, +author={J. Mann et al}, +year={2009}, +journal={Meteorologische Zeitschrift}, +volume = {18}, +number = {2}, +pages={p135-140} +} + + + +% Meaning of the fourier transform of the phi function as the : +% ratio between WS measured by lidar oriented along the wind speed and a sonic one. +% Comparison between lidar-measured spectra and spectra predicted by applying a theoretical lidar sampling filter to +% the three-dimensional turbulence structure +@article{lidarSjoholm2009, +title={Spatial averaging-effects on turbulence measured by a continuous-wave coherent lidar}, +author={MIKAEL SJ\" OHOLM. and TORBEN MIKKELSEN and JAKOB MANN and KAREN ENEVOLDSEN and MICHAEL COURTNEY}, +year={2009}, +journal={Meteorologische Zeitschrift}, +volume = {18}, +number = {3}, +pages={p281-287} +} + + + + + + +% --------------------------------------------------------------------------------} +% --- DIVERS +% --------------------------------------------------------------------------------{ +@book{faopumps, +author = {P.L. Fraenkel}, +title = {Les Machines Elevatoires - Bulletin FAO d'irrigation et de drainage}, +year = {1994}, +publisher= {FAO - Bulletin 43,ISBN 92-5-202515-4} +} + +@book{techniqueseoliennes, +author = {P. Leconte and M. Rapin and E. Szechenyi}, +title = {\'Eolienne}, +year = {2001}, +publisher= {Techniques de l'Ing\'enieur - BM 4640} +} + + +@book{techniquesenergieseoliennes, +author = {J. Martin}, +title = {\'Energies eoliennes}, +year = {1997}, +publisher= {Techniques de l'Ing\'enieur - BM 8585} +} + + + + + + + + + +% --------------------------------------------------------------------------------} +% --- Typical WT designs +% --------------------------------------------------------------------------------{ + +@book{tjaereborgloads, +author={WEGA measurement project}, +title={Tjaereborg wind turbine: Loads during normal operation mode}, +publisher={Elsamprojekt EP92/456}, +year={1994}, +month={June} +} +@book{tjaereborggeom, +author={S. \O ye}, +title={Tjaereborg wind turbine: Geometric and operational data}, +publisher={AFM notat VK-184, Fluid Mechanics, DTU}, +year={1990} +} +@book{tjaereborgstruct, +author={S. \O ye}, +title={Tjaereborg wind turbine: Structural dynamic data}, +publisher={AFM notat VK-186, Fluid Mechanics, DTU}, +year={1991} +} + +@book{nordtankdescr, +author = {K.S. Hansen}, +title = {Description of Nordtank 500/41 at Ris\o National Laboratories}, +year = {2003}, +publisher= {Ris\o} +} + +@TECHREPORT{nrelphasesix, + author = {M.M. Hand and D.A. Simms and L.J. Fingersh and D.W. Jager and J.R. Cotrell and S. Schreck and and S.M. Larwood}, + title = {Unsteady Aerodynamics Experiments Phase VI: Wind Tunnel Test Configurations and Available Data Campaigns}, + institution = {NREL - TP-500-29955}, + year = {2001} +} + +@TECHREPORT{nrelrotor, + author = {P. Giguiere and M.S. Selig}, + title = {Design of a tapered and twisted blade for the NREL combined experiment rotor}, + institution = {NREL}, + year = {1999} +} + + +@MASTERSTHESIS{ewanthesis, + author = {E. Machevaux}, + title = {Analysis of airfoil characteristics from pressure distribution}, + school = {DTU - Siemens}, + year = {2011} +} + +% Giguere? P.,? Selig? M.S.,? ?Design? of? a? Tapered? and? Twisted? Blade? for? the? NREL? +%combined?Experiment?Rotor?,?NREL/SR-500-26173,?NREL,?Golden,?CO,?1999.? + + +%Hand?M.M,?Simms,?Fingersh?L.J.,?Jager?D.W.,?Cortell?J.R.,?Schreck?S.?and?Larwood? +%S.M.,? ??,?NREL?Technical?Report?NREL/TP- +%500-29955,?Golden,?Colorado,?Dec?2001. + +@article{zahle:2014, + title = {{Comprehensive Aerodynamic Analysis of a 10 MW Wind Turbine Rotor Using 3D CFD}}, + language = {English}, + publisher = {American Society of Mechanical Engineers}, + author = {F. Zahle and C. Bak and N. N. S{\o}rensen and S. Guntur and N. Troldborg}, + journal = {Proceedings of 32nd ASME Wind Energy Symposium, National Harbor, Maryland}, + year = {2014}, + pages = {1-14} +} + + + +% --------------------------------------------------------------------------------} +% --- PROGRAMS - SOFTWARE +% --------------------------------------------------------------------------------{ + +@book{rmanual, +author = {W. N. Venables, D. M. Smith and the R Development Core Team}, +title = {An Introduction to R : A Programming Environment for Data Analysis and Graphics}, +year = {2008-10-20} +} + +@book{rwebsite, +author = {CRAN}, +title = {The R project - http://www.r-project.org/}, +} + +@misc{matlab, +author={{MathWorks}}, +title={{MATLAB 8.0 and Statistics Toolbox 8.1}}, +publisher={{The MathWorks, Inc., Natick, Massachusetts, United States.}}, +year={2017}, +} + + +@book{Deitel:2002, +author = {H. M. Deitel and P. J. Deitel and T. R. Nieto}, +title = {Internet \& World Wide Web, How to Program}, +publisher = {Prentice Hall}, +year = 2002, +address = {Upper Saddle River, New Jersey, USA}, +annote = {1366p} +} + + +@book{mathworld, +author = {Mathworld }, +title = {http://www.mathworld.wolfram.com/}, +year = {2011 }, +publisher= {Wolfram } +} + + + + + + + + +% --------------------------------------------------------------------------------} +% --- N-BODY PROBLEM +% --------------------------------------------------------------------------------{ +@article{belhadj:1991, + title = {Molecular dynamics simulations of water with Ewald summation for the long range electrostatic interactions}, + language = {English}, + author = {Belhadj, M. and Alper, H. E. and Levy, R. M.}, + journal = {Chemical Physics Letters}, + volume = {179}, + number = {1-2}, + pages = {13-20}, + year = {1991}, + issn = {00092614, 18734448}, + abstract = {The use of a partial charge version of the Ewald sum method to treat long range electrostatic interactions in molecular dynamics simulations of water has been investigated. The orientational structure and energetic properties of the liquid have been studied for several choices of Ewald sum parameters. The results, including the dielectric constant ε, the radial-dependent Kirkwood factor GK(r), the orientational projection HΔ(r), and the average dipole interaction energy, are compared with those from molecular dynamics simulations of water using the reaction field method. While the orientational structure of the liquid obtained from simulations which treat long range interactions by Ewald summation is different from corresponding results obtained from simulations with a reaction field, consistent values are calculated for the dielectric constant. The sensitivity of the results to variations in the convergence parameter α, the real-space cutoff Rc, and the number of vectors used in the reciprocal space sum was also analyzed.} +} + +@INPROCEEDINGS{flottmann:2003, + title = {Recent improvements to the Astra particle tracking code}, + language = {English}, + publisher = {IEEE}, + author = {Flottmann, K. and Lidia, SM and Piot, P.}, + booktitle = {Proceedings of the 2003 particle accelerator conference, vols 1-5}, + pages = {3500-3502}, + year = {2003}, + isbn = {0780377389}, + abstract = {The Astra simulation code has been successfully used in the design of linac and rf photoinjector systems utilizing beams with azimuthal symmetry. We present recently implemented changes to Astra that allow tracking of beams in beamlines without the assumption of any symmetry. The changes especially include a 3D mesh space charge algorithm and the possibility to import 3D electromagnetic field maps from eigensolver programs.} +} + + + +% --------------------------------------------------------------------------------} +% --- ALL REFERENCES +% -------------------------------------------------------------------------------- + +@article{Lawhite2007, +author = {Lawhite, Niels and Cohn, Ken}, +journal = {Wind Energy}, +number = {May 2002}, +pages = {40019}, +title = {{Characterizing Wind Speed and Direction Shear with SoDAR Data}}, +year = {2007} +} +@article{Lawhite, +author = {Lawhite, Niels and Walls, Elizabeth and Cohn, Ken}, +title = {{Characterizing Wind Speed and Direction Shear with SoDAR Data}} +} +@article{European2007, +author = {European, E L Petersen}, +isbn = {8755014828}, +journal = {Weather}, +number = {1989}, +title = {{European Wind Atlas}}, +year = {2007} +} +@article{Moore, +author = {Moore, Kathleen E and Box, P O and Bailey, Bruce H and Truewind, A W S}, +journal = {Wind Energy}, +pages = {1--11}, +title = {{Classifying Rotor Span Shear Profile Variability and Improving Wind Turbine Production Prediction}} +} + +@article{Landberg2007, +author = {Landberg, L and Bezroukikh, P P}, +isbn = {5754200676}, +number = {2000}, +title = {{Russian Wind Atlas}}, +year = {2007} +} +@book{Hasager2007, +author = {Hasager, C B and Astrup, P and Nielsen, M and Christiansen, M B and Ris\o, Badger and Emd, P Nielsen and Dong, P B S\o rensen}, +isbn = {8755035701}, +number = {April}, +title = {{SAT-WIND project Final report}}, +volume = {1586}, +year = {2007} +} +@article{Delft, +author = {Delft, Technische Universiteit and Prof, Rector Magnificus}, +title = {{A RELIABILITY BASED DESIGN METHODOLOGY FOR EXTREME RESPONSES OF OFFSHORE WIND TURBINES}} +} +@article{Pinson2009, +author = {Pinson, Pierre and Madsen, Henrik}, +journal = {Journal of Forecasting}, +keywords = {adaptive estimation,interval,point forecasting,regime-switching,wind power forecasting}, +pages = {1--41}, +title = {{Adaptive modelling and forecasting of offshore wind power fluctuations with Markov-switching autore- gressive models}}, +year = {2009} +} + +@article{Mann2006, +author = {Mann, Jakob and Width, Spectral}, +journal = {English}, +pages = {8--9}, +title = {{Estimation of energy dissipation from the doppler laser}}, +year = {2006} +} +@article{Angelou2010, +author = {Angelou, Nikolas and Mann, Jakob and Courtney, Mike and Sj\"{o}holm, Mikael and Angelou, Author Nikolas and Mann, Jakob and Courtney, Mike and Sj\"{o}holm, Mikael}, +number = {September}, +title = {{Doppler lidar mounted on a wind turbine nacelle Ris\o-R-Report}}, +year = {2010} +} +@article{Article2009, +author = {Article, Open Access and Divison, Wind Energy}, +doi = {10.1127/0941-2948/2009/0379}, +journal = {Wind Energy}, +number = {3}, +pages = {281--287}, +title = {{Spatial averaging-effects on turbulence measured by a continuous-wave coherent lidar}}, +volume = {18}, +year = {2009} +} +@article{Smith2006, +author = {Smith, David A and Harris, Michael and Coffey, Adrian S and Park, Technology}, +doi = {10.1002/we}, +journal = {Evaluation}, +number = {January}, +pages = {87--93}, +title = {{Wind Test Site in H\o vs\o re}}, +year = {2006} +} +@article{Angelou, +author = {Angelou, Nikolas and Mann, Jakob and Courtney, Mike and Sj\"{o}holm, Mikael and Angelou, Author Nikolas and Mann, Jakob and Courtney, Mike}, +title = {{Doppler lidar mounted on a wind turbine nacelle Ris\o-R-Report}} +} +@article{Bischoff2010, +author = {Bischoff, Oliver and Kuhn, Martin}, +journal = {Wind Energy}, +number = {May}, +title = {{Remote Sensing for Wind Energy}}, +volume = {3068}, +year = {2010} +} +@article{Wagner2009, +author = {Wagner, Rozenn and Mikkelsen, Torben and Courtney, Michael and Wagner, Author Rozenn and Mikkelsen, Torben and Courtney, Michael}, +isbn = {9788755037366}, +number = {March}, +title = {{Investigation of turbulence measurements with a continuous wave , conically scanning LiDAR Ris\o-R-Report}}, +volume = {1682}, +year = {2009} +} + +@article{Dellwik2010, +author = {Dellwik, Ebba and Mann, Jakob and Bing, Ferhat}, +number = {January}, +title = {{Flow tilt angles near forest edges , II : lidar anemometry}}, +year = {2010} +} +@article{Courtney2008, +author = {Courtney, Michael and Wagner, Rozenn and Lindel\"{o}w, Petter}, +doi = {10.1088/1755-1307/1/1/012021}, +journal = {Science}, +title = {{Testing and comparison of lidars for profile and turbulence measurements in wind energy}}, +volume = {012021}, +year = {2008} +} +@article{Project2006, +author = {Project, Master Thesis}, +number = {October}, +title = {{M . Sc . Program in Wind Energy Technical University of Denmark Ashikaga Institute of Technology Collaborative Research Center Investigation of the Savonius †type Magnus Wind Turbine}}, +year = {2006} +} +@article{Mill2005, +author = {Mill, Savonius Wind}, +journal = {Engineering}, +pages = {1--9}, +title = {{WIND ENERGY FOR EARTHKEEPERS}}, +year = {2005} +} +@article{Rahai2005, +author = {Rahai, Hamid R}, +number = {May}, +title = {{DEVELOPMENT OF OPTIMUM DESIGN CONFIGURATION AND PERFORMANCE FOR}}, +year = {2005} +} +@article{Deluxe, +author = {Deluxe, Picoturbine and Plans, Windmill}, +journal = {Construction}, +title = {{PicoTurbine Deluxe Windmill Plans}} +} +@article{Decoste2004, +author = {Decoste, Josh}, +journal = {Constraints}, +title = {{SELF-STARTING DARRIEUS WIND TURBINE}}, +year = {2004} +} +@article{Zhang2004, +author = {Zhang, Jianhui}, +journal = {Mechanical Engineering}, +title = {{Numerical Modeling of Vertical Axis Wind Turbine (VAWT) Master thesis}}, +year = {2004} +} +@article{El-sayed1995, +author = {El-sayed, A F Abdel Azim}, +journal = {Machinery}, +keywords = {aerodynamics,aeroelasticity,darrieus,dynamics,vertical axis}, +number = {1}, +pages = {33--41}, +title = {{Dynamics of Vertical Axis Wind Turbines ( Darrieus Type )}}, +volume = {2}, +year = {1995} +} + +@article{Cooper, +author = {Cooper, Paul and Kennedy, Oliver}, +journal = {Development}, +title = {{Development and Analysis of a Novel Vertical Axis Wind Turbine}} +} +@article{Ajdehak, +author = {Ajdehak, Esmaeil}, +keywords = {a,aerodynamic,airfoil cord length,and airfoil cord,ar,c,interference factor,power fluctuation,ratio between wing length,vertical axis wind turbine}, +title = {{Analysing power generation in Vertical Axis Wind Turbines ( VAWT )}} +} + + +@article{Kist2006, +author = {Kist, E C N G}, +title = {{INTERNATIONAL}}, +volume = {2005}, +year = {2006} +} +@article{Wind2002, +author = {Wind, Gamesa and Aps, Engineering}, +journal = {Measurement}, +title = {{COPYRIGHT © Danish Standards . NOT FOR COMMERCIAL USE OR REPRODUCTION Elproducerende vindm\o ller – Del 13 : M\aa ling af mekaniske laster Wind turbine generator systems – Part 13 : Measurement of mechanical loads Deskriptorer :}}, +year = {2002} +} + + +@article{Draft2008, +author = {Draft, Final and Standard, International and Final, Projet and Internationale, D E Norme}, +journal = {Distribution}, +title = {88/329/fdis}, +year = {2008} +} + +@article{Store2005, +author = {Store, Lica Ansi}, +journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, +title = {{INTERNATIONAL STANDARD}}, +volume = {2005}, +year = {2005} +} +@article{English-language2001, +author = {English-language, This}, +journal = {Measurement}, +title = {{INTERNATIONAL STANDARD INTERNATIONAL STANDARD}}, +volume = {2001}, +year = {2001} +} + +@article{En2005, +author = {En, B S}, +journal = {Terrain}, +title = {{Wind turbines —}}, +volume = {3}, +year = {2005} +} + +@article{Krogh2005, +author = {Krogh, Thomas}, +journal = {Wind Energy}, +pages = {1--2}, +title = {{Coordinate system}}, +year = {2005} +} + +@article{Guide, +author = {Guide, Practical and About, Ranchers}, +journal = {Director}, +title = {{Wind Energy in Colorado}} +} +@article{Specifications, +author = {Specifications, Turbine and Height, Tower and Diameter, Rotor and Area, Swept and Height, Total and Height, Met Tower and Height, Tower and Diameter, Rotor and Area, Swept and Height, Total and Height, Met Tower and Facts, Quick}, +isbn = {3032754097}, +title = {{Multi-Megawatt Turbine Installation at the NWTC}} +} + +@article{Cotrell2007, +author = {Cotrell, Jason}, +pages = {1--13}, +title = {{The DOE / NREL Wind Program}}, +year = {2007} +} +@article{Johnson2000, +author = {Johnson, W and Kelley, N}, +journal = {Contract}, +keywords = {January 2000,NREL/TP-500-27104,Wind energy, Initial Validation Software, Meteorological Tower Data}, +number = {January}, +title = {{Design Specifications for the Development of the Initial Validation Software ( Version 3 . 0 ) for Processing of NWTC 80-Meter Meteorological Tower Data Design Specifications for the Development of the Initial Validation Software ( Version 3 . 0 ) for Processing of NWTC 80-Meter Meteorological Tower Data}}, +year = {2000} +} + +@article{Adel, +author = {Adel, A L I and Mahmoud, S}, +journal = {Synthesis}, +title = {{TESTING \& INSTALLATION By}} +} + +@article{Gale2009, +author = {Gale, T and Range, Operating}, +pages = {2009}, +title = {{GALE T1 Vertical Axis Wind Turbine}}, +year = {2009} +} +@article{Writer2010, +author = {Writer, Associated Press and Energy, Xcel and Xcel, Minneapolis-based}, +title = {chicagotribune.com}, +year = {2010} +} +@article{Mast, +author = {Mast, Self-supporting}, +journal = {Concrete}, +pages = {6000}, +title = {{Proven WT6000 6kW Wind Turbine Proven TM900 9m ( or TM1500 15m )}} +} +@article{Scope2009, +author = {Scope, Project}, +journal = {Energy}, +pages = {1--7}, +title = {{SmartGridCity â„¢ : Design Plan for Boulder , Colo .}}, +year = {2009} +} +@article{Corporation2010, +author = {Corporation, Enernex}, +journal = {Contract}, +keywords = {January 2010,NREL/SR-550-47086,transmission study,utility grid,wind energy integration: wind energy interconnection}, +number = {January}, +title = {{EASTERN WIND INTEGRATION AND TRANSMISSION STUDY : Executive Summary and Project Overview}}, +year = {2010} +} +@article{Designated, +author = {Designated, The and Bedrock, Dipping and County, Jefferson}, +journal = {Building}, +title = {{Designated Dipping Bedrock Area Guide}} +} + +@article{Farms, +author = {Farms, Wind}, +journal = {Development}, +title = {{Wind farm project in Boulder , Colorado Freasibility Report}} +} + +@article{Bell1991, +author = {Bell, M J and Republic, Slovak and Feitosa, E A and Republic, Slovak and Republic, Czech and Republic, Slovak and Troen, I and Frandsen, S and Landberg, L and Rathmann, O and Authority, Energy and Authority, Egyptian Meteorological}, +isbn = {8755021433}, +journal = {Central European}, +title = {{Wind Atlases of the World}}, +year = {1991} +} +@article{Engineering2009, +author = {Engineering, Wasp}, +journal = {Assessment}, +pages = {0--1}, +title = {{WAsP Engineering 2.0}}, +year = {2009} +} +@article{Madsen2009, +author = {Madsen, Peter Hauge}, +title = {{The Wind Energy Division}}, +year = {2009} +} +@article{Division, +author = {Division, Wind Energy}, +title = {{Offshore Wind Energy}} +} +@article{Spallino2010, +author = {Spallino, Roberto}, +journal = {Wind Energy}, +number = {November}, +title = {{Type and Project Certification}}, +year = {2010} +} +@article{Division2008, +author = {Division, Wind Energy}, +journal = {System}, +title = {{Introducing WAsP 9.0}}, +year = {2008} +} +@article{Larsen2010, +author = {Larsen, Torben}, +journal = {Wind Energy}, +title = {{Offshore Wind Turbine Loads and Design}}, +year = {2010} +} +@article{Johnsen2010, +author = {Johnsen, David T}, +journal = {Wind Energy}, +number = {November}, +title = {{Electrical Grid Integration \& Control}}, +year = {2010} +} +@article{Mortensen, +author = {Mortensen, Niels G and Barthelmie, Rebecca J}, +journal = {Offshore (Conroe, TX)}, +title = {{Afternoon program}} +} +@article{Turbines, +author = {Turbines, Seven Wind}, +journal = {Transport}, +title = {{Sprog\o Offshore Wind Farm}} +} +@article{Study1999, +author = {Study, Case}, +number = {6}, +title = {{Tun\o Knob Offshore Wind Farm}}, +year = {1999} +} +@article{Hasager2010, +author = {Hasager, Charlotte Bay and Badger, Merete and Astrup, Poul and Karagali, Ioanna and Badger, Jake and Bing\"{o}l, Ferhat and Nielsen, Morten}, +journal = {Offshore (Conroe, TX)}, +number = {November}, +title = {{Satellite offshore}}, +year = {2010} +} +@article{Badger, +author = {Badger, Jake}, +title = {{Mesoscale modelling for offshore f ff h wind i d energy}} +} +@article{Mikkelsen, +author = {Mikkelsen, Torben and Division, Wind Energy}, +title = {{Remote Sensing-based Research : Wind and Turbulence , Flow around Huge Wind Turbines , On and Offshore Turbines}} +} +@article{Hasager, +author = {Hasager, Charlotte Bay}, +title = {{Offshore wind climates Charlotte Bay Hasager with thanks to Rebecca Barthelmie}} +} +@article{Clausen, +author = {Clausen, Niels-erik}, +title = {{Offshore Wind Energy Technology gy}} +} +@article{Energy, +author = {Energy, Sustainable}, +journal = {Small}, +title = {{Offshore Wind Energy Ris\o DTU}} +} +@article{Karen2010, +author = {Karen, E and Vesth, Allan}, +journal = {Wind Energy}, +number = {November}, +title = {{Offshore Measurement techniques Research and development}}, +year = {2010} +} +@article{Mikkelsen2010, +author = {Mikkelsen, Torben}, +journal = {Wind Energy}, +title = {{LIDAR and SODAR : Introduction t S Sensing i ( RS ) of f Wind Wi d S Speed : d}}, +year = {2010} +} +@article{Mikkelsena, +author = {Mikkelsen, Torben and Division, Wind Energy}, +journal = {Wind Energy}, +title = {{Remote Sensing of Wind}} +} +@article{Gryning2010, +author = {Gryning, Sven-erik}, +journal = {Wind Energy}, +title = {{Lidar and sodar – offshore}}, +year = {2010} +} +@article{Hasager2010a, +author = {Hasager, Charlotte and Clausen, Niels-erik and Division, Wind Energy}, +journal = {Wind Energy}, +number = {November}, +title = {{RIS\O Offshore Off h Wind Wi d Energy}}, +year = {2010} +} +@article{Wind2010, +author = {Wind, Offshore and Course, Energy}, +journal = {Wind Energy}, +title = {{Lidar and sodar – offshore}}, +year = {2010} +} +@article{Renewables2010, +author = {Renewables, Dong Energy}, +journal = {Strategies}, +number = {November}, +title = {{Dong Energy approach to Offshore O \& M}}, +year = {2010} +} +@article{Foundations2010, +author = {Foundations, Offshore}, +journal = {Test}, +number = {November}, +title = {{Ris\o Offshore Wind Energy Course Title : Date :}}, +year = {2010} +} +@article{Wind2010a, +author = {Wind, Offshore and Course, Energy}, +journal = {Offshore (Conroe, TX)}, +number = {November}, +title = {{Environmental Impact Assessment of Offshore Wind Farms Niels-Erik Clausen Ris\o DTU}}, +year = {2010} +} +@article{Selig1999, +author = {Selig, M S}, +journal = {Engineering}, +number = {April}, +title = {{Design of a Tapered and Twisted Blade for the NREL Combined Experiment Rotor Design of a Tapered and Twisted Blade for the NREL Combined Experiment Rotor}}, +year = {1999} +} +@article{Clausen2010, +author = {Clausen, Niels-erik}, +journal = {Nature}, +number = {November}, +pages = {1--3}, +title = {{Offshore wind energy course 11 November 2010 Wrap up Feasibility assessment The four five cornerstones of WF planning}}, +year = {2010} +} +@article{June2004, +author = {June, S E}, +number = {June}, +title = {{Investigation of the NREL NASA/Ames Wind Turbine Aerodynamics Database}}, +year = {2004} +} +@article{Tangler2000, +author = {Tangler, James L}, +journal = {Wind Energy}, +number = {July}, +title = {{The Evolution of Rotor and Blade Design}}, +year = {2000} +} +@article{Johansen2009, +author = {Johansen, Jeppe and Gaunaa, Mac and Bak, Christian}, +doi = {10.1002/we}, +journal = {Design}, +number = {September 2008}, +pages = {261--273}, +title = {{Design of a Wind Turbine Rotor for Maximum Aerodynamic Efficiency}}, +year = {2009} +} +@article{Lee1995, +author = {Lee, Andrew T and Hons, B E and Flay, Richard G J and Hons, B E}, +journal = {October}, +keywords = {aeodynamics,blades - fibre-reinforced composites,wind turbines - compliant}, +pages = {7--12}, +title = {{Compliant blades for wind turbines}}, +year = {1995} +} +@article{Thesis2005, +author = {Thesis, M Sc}, +journal = {Mechanical Engineering}, +number = {June}, +title = {{Load Alleviation on Wind Turbine Blades using Variable Airfoil Geometry ( 2D and 3D study ) Section of Fluid Mechanics}}, +year = {2005} +} +@article{Vermeer2003, +author = {Vermeer, L J and S, J N and Crespo, A}, +doi = {10.1016/S0376-0421(03)00078-2}, +journal = {Progress in Aerospace Sciences}, +pages = {467--510}, +title = {{Wind turbine wake aerodynamics}}, +volume = {39}, +year = {2003} +} + +@article{Sorensen, +author = {S\o rensen, Jens N and Okulov, Valery L}, +journal = {Science}, +pages = {1--4}, +title = {{Modeling of the Far Wake behind a Wind Turbine}} +} +@article{Larsen2008, +author = {Larsen, Gunner C and Madsen, Helge Aa and Torben, J and Troldborg, Niels and Troldborg, Niels}, +journal = {Wind Energy}, +number = {July}, +title = {{Wake modeling and simulation}}, +volume = {1653}, +year = {2008} +} +@article{Simos2008, +author = {Simos, Alexandre N}, +keywords = {potential flow,sector vortex-rings,three-dimensional,variational method}, +number = {2}, +pages = {118--132}, +title = {{A Family of Vortex Rings and a Variational Application to Potential Flows Around Three-dimensional Bodies}}, +volume = {XXX}, +year = {2008} +} +@article{Zhu2004, +author = {Zhu, Baoshan and Kamemoto, Kyoji}, +doi = {10.1016/j.expthermflusci.2004.02.009}, +journal = {Experimental Thermal and Fluid Science}, +keywords = {flow visualization,lock-in boundary,self-oscillation,unsteady flow,vortex shedding}, +pages = {129--135}, +title = {{Probability of self-oscillation induced by vortex shedding from a thin cambered blade}}, +volume = {29}, +year = {2004} +} +@article{Sahin2000, +author = {Sahin, M and Kamemoto, K}, +journal = {Mechanical Engineering}, +keywords = {airfoils,integral equation formulation,non-linear compressibility effect}, +pages = {441--445}, +title = {{A fast higher-order integral equation method for solution of the full potential equation around airfoils}}, +volume = {24}, +year = {2000} +} +@article{Tsutsui1997, +author = {Tsutsui, Takayuki and Igarashi, Tamotsu and Kamemoto, Kyoji}, +journal = {Journal of Wind Engineering and Industrial Aerodynamics}, +keywords = {boundary layer,coanda effect,numerical analysis,separation,vortex method}, +pages = {279--291}, +title = {{Interactive flow around two circular cylinders of different diameters at close proximity . Experiment and numerical analysis by vortex method}}, +volume = {71}, +year = {1997} +} +@article{Kamemoto1994, +author = {Kamemoto, K}, +journal = {October}, +keywords = {flow visualization,lock-in,oscillating,uniform flow,vortex}, +pages = {121--127}, +title = {{Vortex Shedding from an Oscillating Circular Cylinder in a Uniform Flow}}, +year = {1994} +} +@article{Gamst2012, +author = {Gamst, M and Petersen, B}, +doi = {10.1016/j.ejor.2011.10.001}, +issn = {0377-2217}, +journal = {European Journal of Operational Research}, +number = {2}, +pages = {278--286}, +publisher = {Elsevier B.V.}, +title = {{Comparing branch-and-price algorithms for the Multi-Commodity k-splittable Maximum Flow Problem}}, +url = {http://dx.doi.org/10.1016/j.ejor.2011.10.001}, +volume = {217}, +year = {2012} +} +@article{Nakanishi1993, +author = {Nakanishi, Y and Kamemoto, K}, +pages = {363--369}, +title = {{Numerical Simulation of Flow around a Sphere with Vortex Blobs}}, +volume = {47}, +year = {1993} +} +@article{Vries2005, +author = {Vries, De}, +doi = {10.1002/we.153}, +journal = {Online}, +number = {December 2004}, +pages = {457--475}, +title = {{Turbine Computations}}, +year = {2005} +} +@article{Chow, +author = {Chow, Raymond}, +title = {{A Focus on the Flow in the Inboard Part of the Blade}} +} +@article{Moffitt, +author = {Moffitt, Blake A and Bradley, Thomas H and Parekh, David E and Mavris, Dimitri}, +journal = {Aerospace}, +pages = {1--19}, +title = {{Validation of Vortex Propeller Theory for UAV Design with Uncertainty Analysis}} +} +@article{Of, +author = {Of, Tables and Goldstein, T H E}, +number = {December 1964}, +title = {{HYDROMECHANICS TABLES OF THE GOLDSTEIN FACTOR AERODYNAMICS by}} +} +@article{Calculating, +author = {Calculating, F O R and Interference, T H E Axial}, +journal = {Evaluation}, +number = {776}, +title = {{REPORT No. 776}}, +volume = {1} +} +@article{Larrabee, +author = {Larrabee, E Eugene}, +pages = {285--303}, +title = {{DESIGN OF PROPELLERS FOR MOTORSOARERS E. Eugene Larrabee Massachusetts Institute of Technology}} +} +@book{Prandtl, +author = {Prandtl, Ludwig and Hg, Albert Betz}, +isbn = {9783941875425}, +keywords = {Str\"{o}mungsmechanik}, +title = {{Ergebnisse der Aerodynamischen Versuchsanstalt zu G\"{o}ttingen}} +} +@article{Prandtla, +author = {Prandtl, Ludwig and Betz, Albert}, +keywords = {Aerodynamik,Hydrodynamik}, +title = {{Vier Abhandlungen zur Hydrodynamik und Aerodynamik}} +} +@article{War2007, +author = {War, First World}, +doi = {10.1002/we}, +number = {February}, +pages = {289--291}, +title = {{The Lanchester – Betz – Joukowsky Limit}}, +year = {2007} +} +@article{Kuik2004, +author = {Kuik, Gijs A M Van}, +doi = {10.1002/we.104}, +journal = {Control}, +pages = {9--19}, +title = {{Momentum Theory}}, +volume = {19}, +year = {2004} +} +@article{Kuik2003, +author = {Kuik, Gijs A M Van}, +journal = {American Society of Mechanical Engineers}, +title = {{THE EDGE S INGULARITY OF AN ACTUATOR DIS C WITH A CONSTANT}}, +year = {2003} +} + +@article{Okulov2011, +author = {Okulov, Valery L and Kuik, Gijs A M Van}, +doi = {10.1002/we}, +journal = {Wind Energy}, +keywords = {actuator disc theory,betz limit,vortex theory,wind turbine}, +title = {{The Betz – Joukowsky limit : on the contribution to rotor aerodynamics by the British , German and}}, +volume = {1}, +year = {2011} +} +@article{Houlsby, +author = {Houlsby, G T and Draper, S}, +title = {{Application of Linear Momentum Actuator Disc Theory to Open Channel Flow by}} +} +@article{Ragheb2010, +author = {Ragheb, M}, +title = {{FLOW SYSTEM ASYMETRIES AND ENERGY EXTRACTION}}, +year = {2010} +} +@article{Supply1954, +author = {Supply, Ministry O F}, +journal = {Methods}, +number = {2914}, +title = {{A Simple Method of Computing CD from Wake Traverses at High- subsonic Speeds A Simple Method of Computing CD from Wake Traverses at High-subsonic Speeds}}, +volume = {2914}, +year = {1954} +} +@article{S1920, +author = {S, P}, +journal = {Arbeit}, +title = {{K ml Das Maximum der theoretisch m\"{o}g lichen Ausn\"{u}tzung .. des ` Windes durch}}, +year = {1920} +} +@article{Jr, +author = {Jr, Marshall L Buhl}, +journal = {Renewable Energy}, +pages = {1--11}, +title = {{The NWTC Design-Codes Suite : An Overview}} +} +@article{Gaunaa2011, +author = {Gaunaa, Mac and Bergami, Leonardo and Heinz, Joachim}, +journal = {Leonardo}, +number = {January}, +title = {{Indicial response function for finite-thickness airfoils , a semi-empirical approach}}, +year = {2011} +} +@article{Sale2009, +author = {Sale, D}, +journal = {Energy}, +keywords = {August 2009,NREL/CP-500-45021,design code,hydrodynamic efficiency,hydrokinetic turbine,low-cost,mechanical power output,optimization method,stall-regulated rotors,wind energy}, +number = {August}, +title = {{Hydrodynamic Optimization Method and Design Code for Stall-Regulated Hydrokinetic Turbine Rotors}}, +year = {2009} +} +@article{Petrone2011, +author = {Petrone, Giovanni and Nicola, Carlo De and Quagliarella, Domenico and Italiano, Centro and Aerospaziali, Ricerche}, +journal = {Mechanical Engineering}, +number = {January}, +title = {{Wind Turbine Performance Analysis Under Uncertainty}}, +year = {2011} +} +@article{Hepperle, +author = {Hepperle, Martin}, +journal = {Design}, +number = {1}, +title = {{A Procedure for Propeller Design by Inverse Methods}} +} +@article{Yang1993, +author = {Yang, Kyle Yi-ling}, +journal = {Technology}, +number = {1991}, +title = {{Helicopter Rotor Lift Distributions for Minimum Induced Power Loss by}}, +year = {1993} +} +@article{Air2009, +author = {Air, Naval and Command, Training}, +journal = {Contract}, +title = {{WORKBOOK INTRODUCTION TO TH-57}}, +volume = {401}, +year = {2009} +} +@article{Aeronautics, +author = {Aeronautics, National}, +journal = {Analysis}, +number = {September 1985}, +title = {{AN ANALYSIS OF BLADE VORTEX INTERACTION AERODYNAMICS AND ACOUSTICS Stanford University Department of Aeronautics and Astronautics Stanford , CA 94305}} +} +@article{Neill2002, +author = {Neill, Charles O}, +title = {{Helicopter Rotor Unsteady Aerodynamics}}, +year = {2002} +} +@article{Fukumoto2005, +author = {Fukumoto, Y and Okulov, V L}, +doi = {10.1063/1.2061427}, +pages = {1--19}, +title = {{The velocity field induced by a helical vortex tube}}, +year = {2005} +} +@article{Johansen2009a, +author = {Johansen, Nicholas Alan}, +number = {July}, +title = {{Verification of simulated fatigue loads on wind turbines operating in wakes}}, +year = {2009} +} +@article{Murakami2008, +author = {Murakami, Y and Houston, S S}, +number = {3121}, +pages = {47--53}, +title = {{Dynamic inflow modelling for autorotating rotors}}, +year = {2008} +} +@article{Velocity, +author = {Velocity, Induced and Along, Profile}, +journal = {October}, +pages = {2--4}, +title = {{Figure 1 Induced Velocity Profile Along Blade}}, +volume = {05} +} +@book{Gaunaa2002, +author = {Gaunaa, Mac}, +booktitle = {Mechanical Engineering}, +isbn = {8774752588}, +title = {{Unsteady Aerodynamic Forces on NACA 0015 Airfoil in Harmonic Translatory Motion by}}, +year = {2002} +} +@book{Madsen2010, +author = {Madsen, Helge Aagaard and Bak, Christian and Paulsen, Uwe Schmidt and Gaunaa, Mac and Dtu, Ris\o and Fuglsang, Peter and Glasfiber, L M and Romblad, Jonas and Olesen, Niels A and Wind, Vestas and Madsen, Helge Aagaard and Bak, Christian and Schmidt, Uwe and Gaunaa, Mac and Dtu, Ris\o and Lm, Peter Fuglsang}, +isbn = {9788755038097}, +keywords = {September 2010}, +number = {September}, +title = {{The DAN-AERO MW Experiments Final report Ris\o-R-Report}}, +volume = {1726}, +year = {2010} +} +@article{Hand2001, +author = {Hand, M M and Simms, D A and Fingersh, L J and Jager, D W and Cotrell, J R and Schreck, S and Larwood, S M}, +journal = {Data Processing}, +keywords = {December 2001,NASA Ames Wind Tunnel,NREL/TP-500-29955,Unsteady aerodynamics experiment,horizontal-axis wind turbines}, +number = {December}, +title = {{Unsteady Aerodynamics Experiment Phase VI : Wind Tunnel Test Configurations and Available Data Campaigns Unsteady Aerodynamics Experiment Phase VI : Wind Tunnel Test Configurations and Available Data Campaigns}}, +year = {2001} +} +@article{Musial1992, +author = {Musial, W P}, +journal = {October}, +number = {October}, +title = {{Combined Experiment Phase I Final Report Combined Experiment Phase I Final Report}}, +year = {1992} +} +@book{Schepers, +author = {Schepers, J G}, +booktitle = {Analysis}, +isbn = {2020021110}, +title = {{IEA Annex XX : Comparison between calculations and measurements on a wind turbine in the NASA-Ames windtunnel}} +} +@article{Bak, +author = {Bak, Christian and Madsen, Helge A and Paulsen, Uwe Schmidt and Gaunaa, Mac and Fuglsang, Peter and Romblad, Jonas and Olesen, Niels A and Jensen, Leo}, +journal = {Power}, +pages = {1--10}, +title = {{DAN-AERO MW : Detailed aerodynamic measurements on a full scale MW wind turbine}} +} +@article{Field, +author = {Field, Mofett}, +title = {{No Title}} +} +@article{Zahle2007, +author = {Zahle, Frederik and S\o rensen, Niels N}, +doi = {10.1088/1742-6596/75/1/012042}, +pages = {1--9}, +title = {{On the Influence of Far-Wake Resolution on Wind Turbine Flow Simulations}}, +volume = {75}, +year = {2007} +} +@book{Bak2007, +author = {Bak, Christian}, +isbn = {9788755036109}, +number = {July}, +title = {{Research in Aeroelasticity EFP-2006}}, +volume = {1611}, +year = {2007} +} +@article{Døssing2011, +author = {D\o ssing, Mads and Madsen, Helge Aa and Bak, Christian}, +doi = {10.1002/we}, +journal = {Wind Energy}, +keywords = {aerodynamics,blade element momentum method,optimization,wake expansion,wake rotation,wind turbine}, +title = {{Aerodynamic optimization of wind turbine rotors using a blade element momentum method with corrections for wake rotation and expansion}}, +year = {2011} +} +@article{Madsen2007, +author = {Madsen, H Aa and Mikkelsen, R and \O ye, S and Bak, C and Johansen, J}, +doi = {10.1088/1742-6596/75/1/012016}, +pages = {1--11}, +title = {{A Detailed investigation of the Blade Element Momentum ( BEM ) model based on analytical and numerical results and proposal for modifications of the BEM model}}, +volume = {75}, +year = {2007} +} +@book{Bak2008, +author = {Bak, Christian}, +booktitle = {Wind Energy}, +isbn = {9788755036857}, +number = {July}, +title = {{Research in Aeroelasticity EFP-2007}}, +volume = {1649}, +year = {2008} +} +@article{Hansen, +author = {Hansen, A Craig}, +title = {{USER ' S GUIDE to the Wind Turbine Aerodynamics Computer Software}} +} +@article{Moriarty2005, +author = {Moriarty, Patrick J and Hansen, A Craig and Moriarty, Patrick J and Hansen, A Craig}, +journal = {Renewable Energy}, +number = {December}, +title = {{AeroDyn Theory Manual AeroDyn Theory Manual}}, +year = {2005} +} + + + +@article{Jonkman2010, +author = {Jonkman, B J and Jonkman, J M}, +journal = {Contract}, +number = {March}, +title = {{Documentation of Updates to FAST , A2AD , and AeroDyn Including the Revised AeroDyn Interface ALPHA VERSION Documentation of Updates to FAST , A2AD , and AeroDyn Including the Revised AeroDyn Interface ALPHA VERSION}}, +year = {2010} +} +@article{Hansen2004, +author = {Hansen, Martin O L and Technical, The and Mechanics, Fluid}, +doi = {10.1002/we.126}, +number = {April}, +pages = {343--356}, +title = {{Tip Studies Using CFD and Comparison with Tip Loss Models}}, +volume = {356}, +year = {2004} +} +@article{Mauclere2009, +author = {Maucl\`{e}re, Xavier}, +journal = {Evaluation}, +number = {August}, +title = {{Master Thesis}}, +year = {2009} +} +@article{Klausmeyer1997, +author = {Klausmeyer, Steven M and Lin, John C}, +journal = {Nasa Technical Memorandum}, +number = {May}, +title = {{Comparative Results From a CFD Challenge Over a 2D Three-Element High-Lift Airfoil}}, +year = {1997} +} +@article{Sørensen2004, +author = {S\o rensen, N N}, +doi = {10.1115/1.1807854}, +journal = {Journal of Solar Energy Engineering}, +number = {November}, +pages = {1011--1016}, +title = {{Drag Prediction for Blades at High Angle of Attack Using CFD}}, +volume = {126}, +year = {2004} +} +@article{Baka, +author = {Bak, Christian and Scientist, Senior}, +journal = {Design}, +title = {{Aerodynamic airfoil characteristics for wind turbines – 2D and 3D}} +} +@article{Hansen2010, +author = {Hansen, Morten Hartvig}, +pages = {16--17}, +title = {{Airfoil modelling in HAWC2 Black board picture for next years ’ slides Black board picture for next years ’ slides}}, +year = {2010} +} +@article{Kocurek2005, +author = {Kocurek, J David}, +journal = {Power}, +keywords = {NREL/CP-500-36900,October 2004,airfoil,airfoil performance,blade-element momentum,wind energy,wind turbine}, +number = {October 2004}, +title = {{Wind Turbine Post-Stall Airfoil Performance Characteristics Guidelines for Blade-Element Momentum Methods}}, +year = {2005} +} +@article{Gaunaa2010, +author = {Gaunaa, Mac and S\o rensen, Niels N and Bak, Christian}, +journal = {Wind Energy}, +pages = {135--152}, +title = {{Thick Multiple Element Airfoils for use on the Inner Part of Wind Turbine Rotors 1 Introduction}}, +year = {2010} +} +@article{Moriarty2005a, +author = {Moriarty, P J}, +journal = {Renewable Energy}, +number = {January}, +title = {{AeroDyn Theory Manual}}, +year = {2005} +} + +@article{Somers2005, +author = {Somers, D M}, +journal = {Contract}, +number = {January}, +title = {{Airfoils October 1992 – November 1993 The S819 , S820 , and S821 Airfoils}}, +year = {2005} +} +@article{Matilda2003, +author = {Matilda, Port}, +journal = {Contract}, +number = {June}, +title = {{Theoretical Aerodynamic Analyses of Six Airfoils for Use on Small Wind Turbines Period of Performance : Theoretical Aerodynamic Analyses of Six Airfoils for Use on Small Wind Turbines Period of Performance :}}, +year = {2003} +} +@article{Somers2005a, +author = {Somers, D M}, +journal = {Contract}, +number = {January}, +pages = {1994--1995}, +title = {{The S827 and S828 Airfoils Period of Performance : 1994 – 1995 The S827 and S828 Airfoils}}, +year = {2005} +} +@article{Somers2004, +author = {Somers, D M}, +journal = {Contract}, +number = {December}, +title = {{Airfoils October 1991 – July 1992 The S816 , S817 , and S818 Airfoils}}, +year = {2004} +} +@article{Janiszewska1996, +author = {Janiszewska, J M}, +journal = {Matrix}, +number = {July}, +title = {{Wind Tunnel Testing of Three S809 Aileron Configurations for use on Horizontal Axis Wind Turbines}}, +year = {1996} +} +@article{Dahl1998, +author = {Dahl, Kristian S and Fuglsang, Peter}, +journal = {Design}, +number = {December}, +title = {{Design of the Wind Turbine Airfoil Family RIS A XX}}, +year = {1998} +} +@article{Oerlemans, +author = {Oerlemans, S}, +keywords = {aerodynamics,noise,test methods}, +pages = {2--5}, +title = {{No Title}} +} +@book{Oerlemans2004, +author = {Oerlemans, Stefan and Oerlemans, Stefan}, +booktitle = {Contract}, +isbn = {3033846963}, +number = {August}, +title = {{Wind Tunnel Aeroacoustic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance : Wind Tunnel Aeroacoustic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance :}}, +year = {2004} +} +@book{Selig2004, +author = {Selig, Michael S and Mcgranahan, Bryan D and Selig, Michael S and Mcgranahan, Bryan D}, +booktitle = {October}, +isbn = {3033846963}, +keywords = {NREL/SR-500-34515,Revised October 2004,University of Illinois,aerodynamic tests,airfoils,small wind turbines,wind tunnel}, +number = {October}, +title = {{Wind Tunnel Aerodynamic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance : Wind Tunnel Aerodynamic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance :}}, +year = {2004} +} +@article{Reuss1995, +author = {Reuss, R L and Hoffmann, M J and Gregorek, G M}, +journal = {Renewable Energy}, +number = {December}, +title = {{Effects of Surface Roughness and Vortex Generators on the NACA 4415 Airfoil}}, +year = {1995} +} +@article{Bertagnolio2005, +author = {Bertagnolio, F and Rasmussen, F}, +doi = {10.1115/1.1861927}, +journal = {Wind Energy}, +keywords = {aerodynamic damping,aerodynamics,aeroelasticity,airfoil,computational fluid dynamics,engineering model,tunnel,wind}, +number = {May}, +title = {{New Insight Into the Flow Around a Wind Turbine Airfoil Section 1}}, +volume = {127}, +year = {2005} +} +@article{Timmer2003, +author = {Timmer, W A and Rooij, R P J O M Van}, +journal = {Civil Engineering}, +title = {{No Title}}, +year = {2003} +} +@article{Workshops2008, +author = {Workshops, Dutch Wind}, +journal = {October}, +number = {October}, +title = {{The DUWIND airfoils}}, +year = {2008} +} +@book{Fuglsang2003, +author = {Fuglsang, Peter and Bak, Christian and Gaunaa, Mac}, +isbn = {8755031390}, +number = {January}, +title = {{Wind Tunnel Tests of Ris\o-B1-18 and}}, +volume = {1375}, +year = {2003} +} +@article{Timmer2003a, +author = {Timmer, W A and Rooij, R P J O M Van}, +journal = {Civil Engineering}, +number = {January}, +pages = {2003}, +title = {{Aiaa 2003-352}}, +year = {2003} +} +@article{Timmer2003b, +author = {Timmer, W A}, +journal = {American Society of Mechanical Engineers}, +pages = {1--10}, +title = {{ROUGHNESS SENSITIVITY CONSIDERATIONS FOR THICK ROTOR BLADE}}, +year = {2003} +} +@article{Timmer, +author = {Timmer, W A and Schaffarczyk, A P and Schleswig-holstein, Technologiestiftung}, +journal = {Test}, +keywords = {airfoil characteristics,effects,high reynolds,leading edge roughness adds,numbers,performance due to roughness,roughness sensitivity,thick airfoils,thickness to the}, +title = {{The effect of roughness at high Reynolds numbers on the performance of DU 97-W-300Mod .}} +} +@article{Rooij2004, +author = {Rooij, Ruud Van}, +journal = {Production}, +pages = {1--31}, +title = {{Design of Airfoils for Wind Turbine Blades Nando Timmer Delft University of Technology Faculties :}}, +year = {2004} +} +@article{Holm2000, +author = {Holm, R and Gustavsson, J and Bj, A}, +journal = {Symposium A Quarterly Journal In Modern Foreign Literatures}, +keywords = {2-d airfoil,piv,separated flow,stall,wind tunnel test,wind turbine}, +pages = {1--8}, +title = {{A PIV STUDY OF SEPARATED FLOW AROUND A 2-D AIRFOIL}}, +year = {2000} +} +@article{Holm1999, +author = {Holm, Richard and Gustavsson, Jonas}, +title = {{\$ 3 , 9 6WXG \backslash RI 6HSDUDWHG ) ORZ DURXQG D ' \$ LUIRLO DW + LJK \$ QJOHV RI \$ WWDFN LQ D / RZ 6SHHG : LQG 7XQQHO}}, +year = {1999} +} +@article{Fuglsang2004, +author = {Fuglsang, Peter and Bak, Christian and Box, P O}, +doi = {10.1002/we.117}, +pages = {145--162}, +title = {{Turbine Airfoils}}, +volume = {162}, +year = {2004} +} +@article{Timmer2010, +author = {Timmer, W A}, +journal = {Aerospace Engineering}, +keywords = {airfoil characteristics,airfoils performance at delft,drag ratio,high angles of attack,lift-to-,map the du,uncertainties and to further,university of}, +number = {1}, +pages = {71--80}, +title = {{Aerodynamic characteristics of wind turbine blade airfoils at high angles-of-attack}}, +year = {2010} +} +@article{Timmer2009, +author = {Timmer, W A}, +journal = {Wind Energy}, +number = {January}, +pages = {1--13}, +title = {{An overview of NACA 6-digit airfoil series characteristics with reference to airfoils for large wind turbine blades.}}, +year = {2009} +} +@article{June2004a, +author = {June, S E}, +journal = {Methods}, +number = {June}, +title = {{Methods for Root Effects, Tip Effects and Extending the Angle of Attack Range to ±180°, with Application to Aerodynamics for Blades on Wind Turbines and Propellers}}, +year = {2004} +} +@article{Data, +author = {Data, Aerofoil}, +pages = {397--402}, +title = {{7 . Guidelines for Improving the Reliability of}} +} +@article{Aerodynamics, +author = {Aerodynamics, Airfoil}, +title = {{4 . ROTATIONAL EFFECTS ON THE AERODYNAMIC COEFFICIENTS}} +} +@article{Lindenburg, +author = {Lindenburg, C}, +keywords = {airfoil coefficients}, +title = {{Modelling of rotational augmentation based on engineering considerations and measurements}} +} +@article{Lindenburg2004, +author = {Lindenburg, C}, +journal = {Wind Energy}, +number = {November}, +pages = {22--25}, +title = {{MODELLING OF ROTATIONAL AUGMENTATION BASED ON ENGINEERING CONSIDERATIONS AND MEASUREMENTS}}, +year = {2004} +} +@article{Chaviaropoulos2000, +author = {Chaviaropoulos, P. K. and Hansen, M. O. L.}, +journal = {October}, +number = {June}, +title = {{Investigating Three-Dimensional and Rotational Effects on Wind Turbine Blades by Means of a}}, +volume = {122}, +year = {2000} +} +@article{Bak2006, +author = {Bak, Christian and Johansen, Jeppe and Andersen, Peter B}, +journal = {Wind Energy}, +keywords = {2006,Ris\o National Laboratory,ewec}, +pages = {1--10}, +title = {{Three-Dimensional Corrections of Airfoil Characteristics Based on Pressure Distributions}}, +year = {2006} +} +@book{Hartvig2011, +author = {Hartvig, Morten and Ed, Hansen and Morten, Author and Hansen, Hartvig}, +booktitle = {Design}, +isbn = {9788755039407}, +keywords = {October 2011}, +number = {October}, +title = {{Presentations from Aeroelastic Workshop 2 – latest results from AeroOpt Ris\o-R-Report}}, +volume = {1796}, +year = {2011} +} +@book{Hansen2011, +author = {Hansen, Morten Hartvig}, +booktitle = {Contract}, +isbn = {9788755038851}, +keywords = {February 2011}, +number = {February}, +title = {{Presentations from the Aeroelastic Workshop – latest results from AeroOpt}}, +volume = {1769}, +year = {2011} +} +@book{Thomas2009, +author = {Thomas, Author}, +booktitle = {Wind Energy}, +isbn = {9788755037595}, +number = {June}, +title = {{Ris\o-R-Report}}, +volume = {1698}, +year = {2009} +} +@book{Zahle2002, +author = {Zahle, Frederik and S\o rensen, Niels N and Johansen, Jeppe}, +isbn = {8755031269}, +number = {September}, +title = {{CFD Study of a NACA 63-415 Aerofoil Fitted with Stall Strips}}, +volume = {1370}, +year = {2002} +} +@article{Mortensen2008, +author = {Mortensen, Kasper}, +number = {August}, +title = {{CFD Simulations of an Airfoil With Leading Edge Ice Accretion}}, +year = {2008} +} +@article{Tangler1995, +author = {Tangler, J L and Drive, Rose and Matilda, Port}, +journal = {Wind Energy}, +number = {1}, +pages = {1--12}, +title = {{NREL Airfoil Families for HAWTs}}, +year = {1995} +} +@article{Zhang, +author = {Zhang, Mingming}, +journal = {Test}, +title = {{Introduction to R\&D at IET}} +} +@article{Bakb, +author = {Bak, Christian and Olesen, Niels A and Jensen, Leo}, +journal = {Power}, +title = {{DAN-AERO MW : Comparisons of airfoil characteristics for two airfoils tested in three different wind tunnels}} +} +@article{Abbott, +author = {Abbott, By I R A H}, +journal = {New York}, +title = {{THEORY OF Including a Summary of Airfoil Data}} +} +@article{Al, +author = {Al, Subcourse}, +title = {{BASIC AERODYNAMICS}} +} +@article{Fukudome, +author = {Fukudome, Keiko and Watanabe, Masashi and Iida, Akiyoshi and Mizuno, Akisato}, +journal = {Mechanical Engineering}, +keywords = {a thin tripping,abstract,an angle of attack,axis wind turbine,broadly,flow control,flow visualization,investigation is to develop,of turbine blades in,plus to a minus,separation,symmetric vortex generators are,the aim of this,the high performance vertical,the turbulence promoters for,therefore required to develop,turbulence promoters,vawt,vawt changes from a,wind turbine,with}, +pages = {2--5}, +title = {{Separation Control of High Angle of Attack Airfoil for Vertical Axis Wind Turbines}} +} +@book{Loslaten, +author = {Loslaten, Het}, +isbn = {9039325820}, +title = {{No Title}} +} +@article{Jens1992, +author = {Jens, N S and Myken, Asger}, +journal = {Science}, +pages = {139--149}, +title = {{Unsteady actuator disc model for horizontal axis wind turbines}}, +volume = {39}, +year = {1992} +} +@article{Group, +author = {Group, Advisory and Aerospace, F O R and Report, Agard}, +journal = {Methods}, +title = {{A Comparison of Methods Used in Lifting Surface Theory}} +} +@article{Supply, +author = {Supply, O F}, +journal = {Director}, +number = {2884}, +title = {{Methods for Calculating the Lift Distribution of Wings ( Subsonic Lifting-Surface Theory ) Methods for Calculating the Lift Distribution of Wings}}, +volume = {2884} +} +@article{Johansen2004, +author = {Johansen, Jeppe}, +doi = {10.1002/we.127}, +number = {April}, +pages = {283--294}, +title = {{Rotor Computations}}, +volume = {294}, +year = {2004} +} +@article{Larrabee1983, +author = {Larrabee, E Eugene and French, Susan E}, +journal = {Journal of Wind Engineering}, +pages = {317--327}, +title = {{Journal of Wind Engineering and Industrial Aerodynamics, 15 (1983) 317--327}}, +volume = {15}, +year = {1983} +} +@book{Bak2007a, +author = {Bak, Christian}, +isbn = {9788755036109}, +number = {July}, +title = {{Research in Aeroelasticity EFP-2006}}, +volume = {1611}, +year = {2007} +} +@book{Bak2006a, +author = {Bak, Christian}, +isbn = {8755035213}, +number = {May}, +title = {{Research in Aeroelasticity EFP-2005}}, +volume = {1559}, +year = {2006} +} +@book{Group2006, +author = {Group, Francis}, +booktitle = {Group}, +isbn = {9780849315701}, +title = {{Wind and Solar Power Systems}}, +year = {2006} +} +@article{Mcnames2006, +author = {Mcnames, James}, +journal = {IEEE Signal Processing Magazine}, +number = {January}, +pages = {82--87}, +title = {{An Effective Color Scale for Simultaneous Color and Gray-Scale Publications}}, +year = {2006} +} +@article{Frontmatter2000, +author = {Frontmatter, Carl W}, +journal = {Engineering and Technology}, +title = {{Hall, Carl W. "Frontmatter"}}, +year = {2000} +} +@article{Kusiak2010, +author = {Kusiak, Andrew and Song, Zhe}, +doi = {10.1016/j.renene.2009.08.019}, +issn = {0960-1481}, +journal = {Renewable Energy}, +number = {3}, +pages = {685--694}, +publisher = {Elsevier Ltd}, +title = {{Design of wind farm layout for maximum wind energy capture}}, +url = {http://dx.doi.org/10.1016/j.renene.2009.08.019}, +volume = {35}, +year = {2010} +} +@book{Cardarelli, +author = {Cardarelli, Francois}, +booktitle = {English}, +isbn = {185233682X}, +title = {{Encyclopaedia of Scientific Units , Weights and Measures}} +} +@book{Schmitt, +author = {Schmitt, Ron}, +booktitle = {Time}, +isbn = {0750674032}, +title = {{EXPLAINED}} +} +@article{Harrison, +author = {Harrison, H R}, +journal = {New York}, +title = {{Advanced Engineering Dynamics}} +} +@book{Cheat, +author = {Cheat, Free}, +booktitle = {Director}, +isbn = {9780470496374}, +title = {{Get More and Do More at Dummies . com ®}} +} +@book{Energya, +author = {Energy, Green}, +booktitle = {Outlook}, +isbn = {9783540687627}, +title = {{No Title}} +} +@book{Groupa, +author = {Group, Francis}, +booktitle = {Wind Energy}, +isbn = {9781420075687}, +title = {{WIND}} +} +@article{Smulders2004, +author = {Smulders, P T}, +journal = {Wind Energy}, +number = {January}, +title = {{ROTORS for WIND POWER ROTORS for WIND POWER}}, +year = {2004} +} +@article{Technology, +author = {Technology, Alternative and Course, Windpower and Piggott, Hugh and Nybroe, Claus and Piggott, Hugh and Ian, Thanks and Workshop, Windpower}, +title = {{Small Wind Turbine Design Notes Defining drag vs lift forces}} +} +@article{Lindenburg2003, +author = {Lindenburg, C}, +keywords = {airfoil coefficients,deep stall,rotational augmentation,rotor aerodynamics,tip-loss models,wind turbine}, +number = {July}, +title = {{Investigation into Rotor Blade Aerodynamics Analysis of the stationary measurements on the UAE phase-VI rotor in the NASA-Ames wind tunnel}}, +year = {2003} +} +@article{Power2001, +author = {Power, Wind Turbine and Systems, Wind Energy and Johnson, Gary L}, +journal = {Wind Energy}, +pages = {1--54}, +title = {{WIND TURBINE POWER , ENERGY , AND TORQUE}}, +year = {2001} +} +@article{Ii2001, +author = {Ii, World War and States, United and Systems, Wind Energy and Johnson, Gary L}, +journal = {Wind Energy}, +pages = {1--23}, +title = {{Chapter 1—Introduction 1–1}}, +year = {2001} +} +@book{Delft2008, +author = {Delft, Technische Universiteit and Magnificus, Rector}, +booktitle = {Transformation}, +isbn = {9789090236278}, +number = {november}, +title = {{Aeroelasticity of Large Wind Turbines}}, +year = {2008} +} +@book{Turbinesa, +author = {Turbines, Wind and Edition, Second}, +isbn = {8755028705}, +title = {{for Design of Wind Turbines}} +} +@article{Hansen2006, +author = {Hansen, M.O.L. and S\o rensen, J N and Voutsinas, S and S\o rensen, N and Madsen, H Aa}, +doi = {10.1016/j.paerosci.2006.10.002}, +journal = {Progress in Aerospace Sciences}, +keywords = {aeroelasticity,wind turbines}, +pages = {285--330}, +title = {{State of the art in wind turbine aerodynamics and aeroelasticity}}, +volume = {42}, +year = {2006} +} +@article{Sørensena, +author = {S\o rensen, Jens N\o rk\ae r}, +journal = {Wind Energy}, +title = {{The Aerodynamics of Wind Turbines by}} +} +@article{Mikkelsenb, +author = {Mikkelsen, Robert and Troldborg, Niels and Ivanell, Stefan and Shen, Wen Zhong}, +title = {{Wakes and Wind Farms}} +} +@article{Bakc, +author = {Bak, Christian}, +journal = {Contract}, +keywords = {October 2010}, +title = {{Aerodynamic design of wind turbine rotors}} +} +@article{Resources, +author = {Resources, Wind Energy}, +journal = {Wind Energy}, +title = {{Guided Tour on Wind Energy}} +} +@article{Energyb, +author = {Energy, Capturing Wind}, +journal = {Wind Energy}, +pages = {1--3}, +title = {{Wind Energy}} +} +@article{Overview, +author = {Overview, Wind Energy and Overview, Technology and Systems, Wind Energy and Power, Wind and Wind, Iowa and Data, Energy and Energy, Wind and Overview, Issues and Issues, Legal and Issues, Environmental and Agencies, Government and Tables, Conversion}, +title = {{Wind Energy Manual : Table of Contents}} +} +@article{Decoste2006, +author = {Decoste, Jon}, +title = {{Self-Starting Vertical Axis Wind Turbine Group Members}}, +year = {2006} +} +@article{Energyc, +author = {Energy, Wind}, +title = {{No Title}} +} +@article{Woofenden2007, +author = {Woofenden, Ian and Piggott, Hugh}, +number = {january}, +title = {{R T R ( Blades \& Hub )}}, +year = {2007} +} +@article{Piggott2001, +author = {Piggott, Hugh}, +journal = {Contract}, +number = {July}, +title = {{SMALL WIND SYSTEMS FOR BATTERY CHARGING Contract R 7105 By Simon Dunnett , Smail Khennas and}}, +year = {2001} +} +@article{Wind, +author = {Wind, Power From}, +title = {{Presentation on :}} +} +@book{Twidell, +author = {Twidell, John and Weir, Tony}, +booktitle = {Management}, +isbn = {0419219900}, +title = {{Renewable Energy Resources}} +} +@book{Energyd, +author = {Energy, Renewable}, +booktitle = {Technology}, +isbn = {9783540709473}, +title = {{No Title}} +} +@article{Wind2006, +author = {Wind, G E and Llc, Energy}, +journal = {Power Quality}, +keywords = {Advanced Wind Turbine Program,GE Wind Energy LLC,May 2006,NREL/SR-500-38752,Next Generation Turbine Development project,wind,wind power}, +number = {May}, +title = {{Advanced Wind Turbine Program Next Generation Turbine Development Project Advanced Wind Turbine Program Next Generation Turbine Development Project}}, +year = {2006} +} +@article{Epri1998, +author = {Epri, Energy and Turbine, Wind}, +journal = {Power}, +number = {December}, +title = {{Wisconsin Low Wind Speed Turbine Project Development}}, +year = {1998} +} +@book{Larsson2000, +author = {Larsson, \AA K E}, +booktitle = {Power}, +isbn = {9171979700}, +title = {{The Power Quality of Wind Turbines Department of Electric Power Engineering}}, +year = {2000} +} +@book{Hansen2001, +author = {Hansen, L H and Helle, L and Blaabjerg, F and Ritchie, E and Bindner, H and S\o rensen, P}, +booktitle = {Design}, +isbn = {8755027431}, +number = {December}, +title = {{Conceptual survey of Generators and Power Electronics for Wind Turbines}}, +volume = {1205}, +year = {2001} +} +@book{Zhu2007, +author = {Zhu, Wei Jun}, +booktitle = {Mechanical Engineering}, +isbn = {9788774753483}, +title = {{Aero-Acoustic Computations of}}, +year = {2007} +} +@article{Zhu2004a, +author = {Zhu, Wei Jun}, +title = {{Modelling Of Noise From Wind Turbines}}, +year = {2004} +} +@article{Zhu2011, +author = {Zhu, Wei Jun and Shen, Wen Zhong and S\o rensen, Jens N\o rk\ae r}, +doi = {10.1002/fld}, +journal = {Methods}, +keywords = {acoustics splitting method,computational aeroacoustics,flow,high-order schemes}, +number = {January 2010}, +pages = {17--37}, +title = {{High-order numerical simulations of flow-induced noise}}, +year = {2011} +} +@article{Sørensen2006, +author = {S\o rensen, Jens N}, +journal = {Optimization}, +number = {November}, +title = {{Optimization of Wind Turbines with respect to Noise}}, +year = {2006} +} +@book{Laakso, +author = {Laakso, Timo and Baring-gould, Ian and Durstewitz, Michael and Horbaty, Robert and Lacroix, Antoine and Peltola, Esa and Ronsten, G\"{o}ran and Tallhaug, Lars and Wallenius, Tomas}, +booktitle = {English}, +isbn = {9789513874933}, +keywords = {Wind energy, cold climate, atmospheric icing, ice detection, anti-icing, icing modelling}, +title = {{State-of-the-art of wind energy in cold climates}} +} +@article{Kocurek2005a, +author = {Kocurek, J David}, +journal = {Power}, +number = {October 2004}, +title = {{Wind Turbine Post-Stall Airfoil Performance Characteristics Guidelines for Blade-Element Momentum Methods}}, +year = {2005} +} +@article{Guide2004, +author = {Guide, Buyers and Issue, In This and Exclusives, Web and Paper, Technical}, +journal = {Power Engineering}, +pages = {9--11}, +title = {{Ion Plasma Generator Reduces Wind Turbine Lightning Strikes}}, +volume = {210663}, +year = {2004} +} +@book{Papers, +author = {Papers, V T T Working}, +isbn = {9789513874926}, +title = {{Recommendations for wind energy projects in cold climates}} +} +@article{Danyluk2009, +author = {Danyluk, Ryan}, +journal = {Engineering}, +number = {June}, +title = {{Wind Turbine Blades Master Thesis}}, +year = {2009} +} +@article{Homola2005, +author = {Homola, Matthew Carl}, +journal = {Work}, +number = {November}, +title = {{Impacts and Causes of Icing on Wind Turbines}}, +year = {2005} +} +@book{Report2009, +author = {Report, Annual}, +isbn = {0978638344}, +title = {{IEA WIND ENERGY}}, +year = {2009} +} +@article{Jacob1999, +author = {Jacob, Daniel J}, +journal = {Solutions}, +number = {January}, +title = {{INTRODUCTION TO ATMOSPHERIC CHEMISTRY}}, +year = {1999} +} +@article{Study2009, +author = {Study, Expert Group and Projects, Wind Energy and Climates, Cold}, +journal = {Offshore (Conroe, TX)}, +number = {October}, +title = {{IEA Wind Task 19}}, +year = {2009} +} +@article{Laakso2009, +author = {Laakso, T and Durstewitz, M and Horbaty, R and Lacroix, A and Peltola, E and Ronsten, G and Tallhaug, L and Wallenius, T}, +journal = {Atlantic}, +title = {{State-of-the-art of wind energy in cold climates}}, +year = {2009} +} +@article{For2009, +author = {For, Recommendations}, +journal = {Wind Energy}, +pages = {1--46}, +title = {{RECOMMENDATIONS FOR WIND ENERGY PROJECTS IN COLD CLIMATES Edited by}}, +year = {2009} +} +@article{Seifert, +author = {Seifert, Henry and Westerhellweg, Annette and Kr\"{o}ning, J\"{u}rgen}, +journal = {Boreas}, +number = {April 2003}, +pages = {1--9}, +title = {{Risk analysis of ice throw from wind turbines}} +} +@article{Frohboese2007, +author = {Frohboese, Peter and Anders, Andreas}, +doi = {10.1088/1742-6596/75/1/012061}, +journal = {Business}, +title = {{Effects of Icing on Wind Turbine Fatigue Loads}}, +volume = {012061}, +year = {2007} +} +@article{Durstewitz, +author = {Durstewitz, M and Dobesch, H and Kury, G and Laakso, T and Ronsten, G}, +keywords = {cold climate,downtime,icing,offshore,sensors,wind measurements}, +title = {{European experience with wind turbines in icing conditions}} +} +@article{Turbine2007, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{CLASS IX EMERGING SOLUTIONS FOR IPSs}}, +year = {2007} +} +@article{Turbine2008, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VIII}}, +year = {2008} +} +@article{Turbine2008a, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VI}}, +year = {2008} +} +@article{Of2008, +author = {Of, Modeling and Iced, A N}, +journal = {Database}, +title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VI}}, +year = {2008} +} +@article{Turbine2008b, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VII IPS - INTRODUCTION IPS - DEFINITIONS The ICING refers to the formation of any type of ice on}}, +year = {2008} +} +@article{Turbine2008c, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{CLASS VI}}, +year = {2008} +} +@article{Turbine2009, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{CLASS II EFFECT OF AIR PRESSURE AND TEMPERATURE ON DESIGN}}, +year = {2009} +} +@article{Turbine2009a, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +number = {June}, +pages = {1--73}, +title = {{Class iii basics on icing for wind turbines}}, +year = {2009} +} +@article{Xii2008, +author = {Xii, Class and Of, Relevance and Prevention, I C E and For, Systems}, +journal = {Wind Energy}, +title = {{Break even analysis for IPS equipped wind turbines RELEVANCE OF ICE PREVENTION SYSTEMS FOR WECS}}, +year = {2008} +} +@article{Turbine2008d, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Engineering}, +title = {{CLASS XI REVIEW OF TECHNICAL SOLUTION IN USE FOR WIND REVIEW OF TECHNICAL SOLUTION IN USE FOR WIND G EXPLOITATION O IN COLD CO CLIMATES CONSEQUENCES OF ICING ON WT - control t l system t CONSEQUENCES OF ICING ON WECs - control t l system t}}, +year = {2008} +} +@article{Turbine2009b, +author = {Turbine, Wind and In, Operations and Climates, Cold}, +journal = {Wind Energy}, +title = {{WIND TURBINE OPERATIONS IN COLD CLIMATES CLASS I WIND ENERGY EXPLOITATION IN COLD CLIMATES}}, +year = {2009} +} +@article{Ing2008, +author = {Ing, Prof and Battisti, Lorenzo}, +journal = {Engineering}, +title = {{CLASS X EXISTING STANDARDS AND RECOMMENDATIONS IEC recommendation for icing conditions}}, +year = {2008} +} +@article{Hotel2001, +author = {Hotel, Le Drift}, +journal = {Power}, +pages = {1--38}, +title = {{Wind Power Systems Compiled by Tracy Dahl}}, +year = {2001} +} +@article{Points, +author = {Points, Credit and St, Structural}, +journal = {Evaluation}, +title = {{Wind Turbine Ice Prevention Systems Selection and Design Given by • Lecture general objectives ( punch lines ) • Lecture organization • Lecture content and details}} +} +@article{Turbine2009c, +author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, +journal = {Database}, +title = {{PROBLEM COMPUTATION OF THE POWER CURVE OF AN ICED}}, +year = {2009} +} +@book{Lindquist2004, +author = {Lindquist, Anna}, +booktitle = {Polar Research}, +isbn = {9197518301}, +title = {{Wind power in Antarctica – a feasibility study for Wasa}}, +year = {2004} +} +@article{Barzanji2008, +author = {Barzanji, Abdulkadir}, +number = {September}, +title = {{Scheme for Installation of Wind Turbines in Small Isolated Power Systems}}, +year = {2008} +} +@article{Dahl, +author = {Dahl, Tracy and Services, C H M Hill Polar}, +journal = {PoLAR}, +title = {{Summit Station Wind Power Pilot Project}} +} +@article{Universitet2009, +author = {Universitet, Danmarks Tekniske}, +title = {{Simulering af energiforsyningen i Sarfannguaq}}, +year = {2009} +} +@article{Garcia2009, +author = {Garc\'{\i}a, Cristina Garc\'{\i}a and Villumsen, Arne}, +journal = {Technology}, +title = {{Heating of Tourist Cottage in the Arctic Supervisor :}}, +year = {2009} +} +@article{Rodr2009, +author = {Rodr, Miguel Goberna}, +number = {July}, +title = {{Energy supply for an Arctic cottage Assaqutaq hybrid system}}, +year = {2009} +} +@article{Testarmata2010, +author = {Testarmata, Margaret}, +journal = {Technology}, +title = {{Performance and Efficiency of a Micro Hybrid Energy System at Assaqutaq , Greenland Technical University of Denmark Arctic Technology Field Course Summer University 2010}}, +year = {2010} +} +@article{Vaillant2009, +author = {Vaillant, Le}, +journal = {Technology}, +title = {{Building Renovation in Assaqutaq}}, +year = {2009} +} +@article{Prof2008, +author = {Prof, Assoc and Hansen, Martin O L}, +journal = {Energy}, +number = {March}, +pages = {1--3}, +title = {{Experience with Wind Turbines in Arctic Environment}}, +year = {2008} +} +@article{Tammelin1998, +author = {Tammelin, B and Cavaliere, M and Holttinen, H and Morgan, C and Seifert, H}, +journal = {Production}, +number = {January 1996}, +pages = {1--38}, +title = {{WIND ENERGY PRODUCTION IN COLD CLIMATE ( WECO )}}, +year = {1998} +} + +@article{Maissan2001, +author = {Maissan, John F and Services, Technical and Corporation, Yukon Energy and Climate, Circumpolar and Summit, Change}, +journal = {October}, +title = {{WIND POWER DEVELOPMENT IN SUB-ARCTIC CONDITIONS WITH SEVERE RIME ICING by}}, +year = {2001} +} +@article{Levinson1999, +author = {Levinson, Laurie H and Potapczuk, Mark G and Mellor, Pamela A}, +number = {January}, +title = {{Software Development Processes Applied to Computational Icing Simulation}}, +year = {1999} +} +@article{Tammelin2001, +author = {Tammelin, Bengt and Seifert, Henry}, +journal = {Boreas}, +keywords = {frost,high terrain,icing,mountains,safety}, +pages = {5--8}, +title = {{Large wind turbines go into cold climate regions}}, +year = {2001} +} +@article{Tammelin1998a, +author = {Tammelin, Bengt}, +journal = {Boreas}, +number = {April}, +pages = {125--132}, +title = {{Icing in europe}}, +year = {1998} +} +@article{Aigoual, +author = {Aigoual, Mont and Aigoual, Mont and Aigoual, Mont}, +title = {{EUMETNET / SWS SITE}} +} +@article{Frohboese2007a, +author = {Frohboese, Peter and Anders, Andreas}, +doi = {10.1088/1742-6596/75/1/012061}, +journal = {Business}, +title = {{Effects of Icing on Wind Turbine Fatigue Loads}}, +volume = {012061}, +year = {2007} +} +@article{Helsinki, +author = {Helsinki, Rovaniemi}, +title = {{EUMETNET SWS II site at Luosto fell in Finland}} +} +@article{Araujo2007, +author = {Ara\'{u}jo, Guilherme and Silvares, Ot\'{a}vio De Mattos and Jorge, Euryale and Jesus, Godoy De and Polit\'{e}cnica, Escola and Paulo, S\~{a}o and Paulo, S\~{a}o}, +doi = {10.2514/1.544}, +journal = {Simulation}, +number = {2}, +title = {{Numerical Simulation of Airfoil Thermal Anti-Ice Operation}}, +volume = {44}, +year = {2007} +} +@article{Peltola2008, +author = {Peltola, Esa}, +journal = {Wind Energy}, +title = {{R \& D and Market Review of Wind Turbines in Cold and Icing Climates}}, +year = {2008} +} +@article{Quality2008, +author = {Quality, Electrical Power and Magazine, Utilization}, +journal = {Power Quality}, +number = {2}, +title = {{Electrical Power Quality \& Utilization Magazine Volume 3 , Issue 2 Grid Connection Requirements for Wind Turbine Systems in selected Countries - Comparison to Turkey EPQU Magazine}}, +volume = {3}, +year = {2008} +} +@article{Chen2001, +author = {Chen, Z and Member, Senior and Spooner, E and Member, Senior}, +journal = {Energy}, +number = {2}, +pages = {148--154}, +title = {{Grid Power Quality with Variable Speed Wind Turbines}}, +volume = {16}, +year = {2001} +} +@article{Thiringer, +author = {Thiringer, T and Hesse, W and Grauers, A and Ottersten, R and Petru, T}, +journal = {Power Engineering}, +title = {{Grid Impact of a 20 kW Variable Speed Wind Turbine}} +} +@article{Standard, +author = {Standard, American National}, +title = {{Agma standarc}}, +volume = {1} +} +@article{Loss, +author = {Loss, C Loss C and Loss, C}, +pages = {1--6}, +title = {{POWER QUALITY ISSUES IN A WIND TURBINE DRIVEN INDUCTION GENERATOR AND}} +} +@article{California, +author = {California, In}, +isbn = {2023832500}, +journal = {Wind Energy}, +title = {{S m al l w i n d}} +} +@article{Free2001, +author = {Free, G N U and License, Documentation}, +number = {c}, +title = {{Wind turbine blade profiles , Scale drawings from Hugh Piggott ’ s " Brakedrum Windmill Plans Year 2000 edition "*}}, +year = {2001} +} +@article{Turbine, +author = {Turbine, Wind}, +title = {{Build Your Own}} +} +@article{Teodoro, +author = {Teodoro, By and Campos, Sanchez and Fernando, Sunith and Piggott, Hugh}, +journal = {Contract}, +title = {{Wind rotor blade construction}} +} +@article{Deluxea, +author = {Deluxe, Picoturbine and Plans, Windmill}, +journal = {Construction}, +title = {{PicoTurbine Deluxe Windmill Plans}} +} +@article{Notes, +author = {Notes, Technical}, +journal = {Notes}, +pages = {1--16}, +title = {{PicoTurbine Windmill Direct Current Experiments}} +} +@article{Notesa, +author = {Notes, Technical}, +journal = {Power}, +pages = {1--28}, +title = {{PicoTurbine Windmill Plans and Experiments}} +} +@article{Sanchez2009, +author = {Sanchez, Justine}, +journal = {Power}, +number = {131}, +title = {{TURBINE What to Know Tracking the Sun}}, +year = {2009} +} +@article{Notesb, +author = {Notes, Technical}, +journal = {October}, +title = {{PicoTurbine 250 Plans Part 1: Blade Design}} +} +@article{Up2007, +author = {Up, Home Sign and Submit, Explore Community}, +journal = {Assembly}, +title = {{Faroun Savonius Wind Turbine}}, +year = {2007} +} +@article{Turbinea, +author = {Turbine, Wind}, +title = {{Build Your Own}} +} +@article{Piggott2001a, +author = {Piggott, Hugh and Electric, Scoraig Wind}, +number = {February}, +pages = {1--49}, +title = {{PMG construction manual}}, +year = {2001} +} +@article{Dellaport2005, +author = {Dellaport, John}, +title = {{Building a Home - Scale Vertical Axis Wind Turbine}}, +year = {2005} +} +@book{Kozlowski2005, +author = {Kozlowski, Jozef A}, +isbn = {0866190627}, +pages = {1--73}, +title = {{Home - English - French - German - Italian - Portuguese - Spanish}}, +year = {2005} +} +@article{Type2006, +author = {Type, Darrieus}, +pages = {1--5}, +title = {{Darrieus Type}}, +year = {2006} +} +@article{Mussell2006, +author = {Mussell, Dave}, +title = {{Wind Turbine}}, +year = {2006} +} +@article{Machine, +author = {Machine, Building A Wind}, +title = {{http://www.HomeBrewPower.co.uk}} +} +@article{Didcot, +author = {Didcot, Chilton and Kingdom, United}, +doi = {10.1106/089270502021455}, +number = {May 2002}, +pages = {267--277}, +title = {{Design, Fatigue Test and NDE of a Sectional Wind Turbine Rotor Blade}}, +volume = {15} +} +@book{Control, +author = {Control, Industrial}, +booktitle = {Engineering}, +isbn = {9781846284922}, +title = {{No Title}} +} +@book{Tom2003, +author = {Tom, A}, +isbn = {9172913061}, +title = {{Modeling of Wind Turbines for Power System Studies Department of Electric Power Engineering}}, +year = {2003} +} +@book{Controla, +author = {Control, Industrial}, +booktitle = {Engineering}, +isbn = {9781846284922}, +title = {{No Title}} +} +@article{Petersson2005, +author = {Petersson, Andreas}, +journal = {Knowledge Creation Diffusion Utilization}, +title = {{Control of a Variable-Speed Pitch-Regulated Wind Turbine}}, +year = {2005} +} +@article{Overview2009, +author = {Overview, Xblade Externals and Generation, Power}, +journal = {Distribution}, +pages = {1--2}, +title = {{Code Name Author Affiliation Language source Source modified Source Description integrated in Xblade executable (*) if not , this means that the external code executable is called as a separate stand-alone *. exe or}}, +year = {2009} +} +@article{Memo2009, +author = {Memo, Internal}, +journal = {Distribution}, +pages = {1--2}, +title = {{B58.5 FAST BHawC comparison Internal Memo E R WP EN 431}}, +year = {2009} +} +@article{Hjort, +author = {Hjort, S\o ren and Laursen, Jesper and Enevoldsen, Peder B}, +journal = {Power}, +title = {{Aerodynamic Winglet Optimization}} +} +@article{Hjorta, +author = {Hjort, S\o ren and Dixon, Kristian and Gineste, Michael and Olsen, Anders S}, +journal = {Design}, +title = {{Fast Prototype Blade Design}} +} +@article{Hjortb, +author = {Hjort, S\o ren}, +journal = {Test}, +number = {00 45}, +pages = {0--8}, +title = {{Noise Optimization of a Siemens Multi-MegaWatt Turbine}} +} +@article{Gibescu2010, +author = {Gibescu, Madeleine and Hendriks, Ralph L}, +journal = {Design}, +pages = {1--22}, +title = {{Why this lecture ?}}, +year = {2010} +} +@article{Bosgra2008, +author = {Bosgra, Okko H}, +journal = {Control}, +title = {{Design Methods for Control Systems}}, +year = {2008} +} +@article{Joosse2010, +author = {Joosse, Peter}, +journal = {Production}, +number = {January}, +title = {{Structural design and production of large rotor blades CTC Customers : Lecture topics â— General introduction}}, +year = {2010} +} +@article{Veldkamp2010, +author = {Veldkamp, Dick}, +journal = {Wind Energy}, +number = {March}, +title = {{27 January 2010 1}}, +year = {2010} +} +@article{Bussel2010, +author = {Bussel, Gerard Van}, +number = {February}, +pages = {1--21}, +title = {{Wind turbine wakes Wakes in windfarms WASP and Windfarmer}}, +year = {2010} +} +@article{Nijssen2010, +author = {Nijssen, Rogier}, +journal = {History}, +title = {{Blade Material Structural Properties Wind turbine Materials \& Constructions}}, +year = {2010} +} +@article{Timmera, +author = {Timmer, Nando}, +journal = {Design}, +pages = {1--64}, +title = {{Wind Turbine Design}} +} +@article{Energye, +author = {Energy, Wind}, +journal = {Design}, +pages = {1--26}, +title = {{Deterministic wind field for load calculations I}} +} +@article{Jong2010, +author = {Jong, Peter De and Otto, Luke}, +journal = {Wind Energy}, +number = {December 2009}, +title = {{Introduction to Wind Energy AE-W02 Assignment 5 : Control}}, +year = {2010} +} +@article{Energyf, +author = {Energy, Wind}, +journal = {Wind Energy}, +title = {{Module 7}} +} +@article{Control2009, +author = {Control, The}, +journal = {Control}, +pages = {1--4}, +title = {{R + G ( s ) G ( s )}}, +year = {2009} +} +@article{Jong2010a, +author = {Jong, Peter De and Otto, Luke}, +journal = {Wind Energy}, +number = {October 2009}, +title = {{Introduction to Wind Energy AE-W02 Assignment 2 : Electrical conversion system}}, +year = {2010} +} +@article{Commission, +author = {Commission, European}, +journal = {Technology}, +title = {{Directorate-General for Energy WIND ENERGY - THE FACTS}}, +volume = {1} +} +@article{Petersen1998, +author = {Petersen, Erik L and Mortensen, Niels G and Landberg, Lars and H\`{u}jstrup, J\`{u}rgen and Frank, Helmut P}, +journal = {Atmospheric Research}, +pages = {55--72}, +title = {{Wind Power Meteorology . Part II : Siting and Models}}, +volume = {72}, +year = {1998} +} +@article{Brande2004, +author = {Brande, Dk-}, +journal = {Wind Energy}, +pages = {1--8}, +title = {{The market for wind turbines is booming. Private investors can share the risks and the profits. But most of the companies are not listed on the stock exchange.The sector is divided into listed and unlisted enterprises, together with subsidiaries of conglomerates.}}, +year = {2004} +} +@article{Petersen1998a, +author = {Petersen, Erik L and Mortensen, Niels G and Landberg, Lars and H\`{u}jstrup, J\`{u}rgen and Frank, Helmut P}, +journal = {Wind Energy}, +pages = {2--22}, +title = {{Wind Power Meteorology . Part I : Climate and Turbulence}}, +volume = {22}, +year = {1998} +} +@article{Monaldo1960, +author = {Monaldo, Frank M and Beal, Robert}, +journal = {Applied Physics}, +pages = {305--320}, +title = {{Chapter 13 . Wind Speed and Direction}}, +year = {1960} +} +@article{Draft2005, +author = {Draft, Final and Standard, International and Final, Projet and Internationale, D E Norme and Voting, Parallel}, +journal = {Terrain}, +title = {88/228/fdis}, +year = {2005} +} +@article{Winda, +author = {Wind, Offshore and Aspects, Farm}, +title = {{Wim Bierbooms}} +} +@article{Heights, +author = {Heights, Design and Load, Extreme}, +journal = {Offshore (Conroe, TX)}, +pages = {1--8}, +title = {{Environmental Loads : Offshore}} +} +@article{Oberink2010, +author = {Oberink, Bart}, +number = {February}, +title = {{Offshore Wind farm project development : finding the optimal development strategy}}, +year = {2010} +} +@article{Bierbooms, +author = {Bierbooms, Wim}, +journal = {Group}, +pages = {1--51}, +title = {{Wind climate}} +} +@article{Design2010, +author = {Design, Overview and Gravity, Monopile and Floating, Tripod Tripile}, +journal = {Source}, +number = {March}, +pages = {1--12}, +title = {{PART I: Introduction Support Structure Design}}, +year = {2010} +} +@article{Diepeveen2010, +author = {Diepeveen, N F B}, +journal = {Offshore (Conroe, TX)}, +title = {{OE5662 Offshore Turbine Selection Review of topics so far What you should have by now : This Lecture : Overview of the Offshore Wind Turbine Market WE Market Shares – Offshore ( > 2001 ) Offshore Wind Turbine Selection Criteria What do we want ? Turbine Selection Criteria • Energy Yield ( of entire wind farm ) Bigger is Better ? • Greater energy yield Overview of Available Turbines • Relatively higher cost of installation}}, +year = {2010} +} +@article{Bussel2010a, +author = {Bussel, Gerard Van}, +journal = {Offshore (Conroe, TX)}, +number = {March}, +pages = {1--33}, +title = {{Operation and Maintenance}}, +year = {2010} +} +@article{Heightsa, +author = {Heights, Design and Load, Extreme}, +journal = {Spectrum}, +pages = {1--7}, +title = {{Environmental Loads : Offshore}} +} +@article{March2010, +author = {March, Segeren and Wind, Offshore and Design, Farm}, +journal = {Offshore (Conroe, TX)}, +title = {{OE5662 – Fabrication}}, +year = {2010} +} +@article{Gibescu2010a, +author = {Gibescu, Madeleine}, +journal = {System}, +pages = {1--18}, +title = {{Electrical Infrastructure Design for Offshore Wind Farms Interconnected power systems Visions for wind power developments in the North Sea Connection solutions for large offshore wind farms Voltage levels in the Dutch system Importance of interconnection capacity for allowing aggregation • A strongly interconnected}}, +year = {2010} +} +@article{Loading, +author = {Loading, Aerodynamic and Loads, Environmental and Loads, Environmental and Forces, Aerodynamic and Loads, Aerodynamic}, +pages = {1--4}, +title = {{Environmental Loads : Offshore Wind Speed Variations in Height}} +} +@article{Not2010, +author = {Not, Links Interactions and Array, London}, +title = {{Design Consideration}}, +year = {2010} +} +@article{Berkel2010, +author = {Berkel, Ed}, +journal = {Change}, +pages = {1--9}, +title = {{Offshore Wind Energy •}}, +year = {2010} +} +@article{Diepeveen2010a, +author = {Diepeveen, N F B}, +journal = {Offshore (Conroe, TX)}, +title = {{OE5662 Offshore Wind Farms Why Offshore Wind ? Nogersund Vindeby Lely Dronten ( Irene Vorrink )}}, +year = {2010} +} +@article{Diepeveen2010b, +author = {Diepeveen, N F B}, +journal = {Offshore (Conroe, TX)}, +title = {{Prerequisites \& Follow-up Course Schedule – Week 1 Course Schedule – Week 2}}, +year = {2010} +} +@article{Barrau, +author = {Barrau, Jean-jacques and Sudre, Michel}, +journal = {Techniques}, +pages = {1--13}, +title = {{Mod\'{e}lisation des structures par \'{e}l\'{e}ments finis}} +} +@article{Solaire2004, +author = {Solaire, Construire}, +pages = {1--3}, +title = {{Construire Solaire Conception et fabrication d ' un capteur exp\'{e}rimental Capteur fabrication}}, +year = {2004} +} +@article{Solaire2004a, +author = {Solaire, Construire}, +pages = {1--3}, +title = {{Construire Solaire Conception et fabrication d ' un capteur exp\'{e}rimental Capteur fabrication}}, +year = {2004} +} +@article{Courbon, +author = {Courbon, Jean}, +journal = {Techniques}, +pages = {1--33}, +title = {{Calcul des structures Voiles minces}} +} +@article{Generators2001, +author = {Generators, Asynchronous and States, United and States, United and Systems, Wind Energy and Johnson, Gary L}, +journal = {Wind Energy}, +pages = {1--44}, +title = {{WIND TURBINES WITH ASYNCHRONOUS}}, +year = {2001} +} +@article{Vermeer2003a, +author = {Vermeer, L J and S, J N and Crespo, A}, +doi = {10.1016/S0376-0421(03)00078-2}, +journal = {Progress in Aerospace Sciences}, +pages = {467--510}, +title = {{Wind turbine wake aerodynamics}}, +volume = {39}, +year = {2003} +} +@article{Miller2003, +author = {Miller, Nicholas W and Price, William W and Sanchez-gasca, Juan J}, +journal = {October}, +title = {{Dynamic Modeling of GE 1 . 5 and Prepared by :}}, +year = {2003} +} +@article{Rasila2003, +author = {Rasila, Mika}, +journal = {Power Engineering}, +title = {{Torque- and Speed Control of a Pitch Regulated Wind Turbine}}, +year = {2003} +} +@article{Schreiber2001, +author = {Schreiber, Dejan}, +journal = {Power}, +keywords = {igbt,power electronics,wind power}, +title = {{State of the Art of Variable Speed Wind Turbines}}, +year = {2001} +} +@article{Di, +author = {Di, By and Meschik, Martin}, +title = {{Savonius turbine with synchron generator using parts from old computers ( for education in technical schools ) Adapting the “ floppy generator â€}} +} +@article{Erdman, +author = {Erdman, W and Behnke, M Benhke and Engineering, Whitaker B E W and Ramon, San}, +journal = {Contract}, +keywords = {COE,NREL/SR-500-38686,November 2005,cost of energy,low wind speed,low wind speed turbine project,variable speed,wind energy,wind turbines}, +title = {{Low Wind Speed Turbine Project Phase II: The Application of Medium-Voltage Electrical Apparatus to the Class of Variable Speed Multi-Megawatt Low Wind Speed Turbines; 15 June 2004--30 April 2005}} +} +@article{Muljadi1998, +author = {Muljadi, E and Pierce, K and Migliore, P}, +journal = {Power}, +number = {April}, +title = {{Control Strategy for Variable-Speed , Stall-Regulated Wind Turbines}}, +year = {1998} +} +@article{Rahimp1995, +author = {Rahimp, M T B and Allet, A and Paraschivoiu, I}, +journal = {Machinery}, +keywords = {advanced technology,aerodynamics,as a result,atmospheric turbulence,come an important commercial,dynamic stall,navier-stokes equations,option for large-,scale power production,there are now more,wind turbine has be-,wind turbines}, +number = {1}, +pages = {15--21}, +title = {{Aerodynamic Analysis Models for Vertical-Axis Wind Turbines}}, +volume = {2}, +year = {1995} +} +@article{Muller2000, +author = {M\"{u}ller, S and Deicke, M and Ieee, Member}, +isbn = {078036404X}, +journal = {System}, +number = {C}, +pages = {4--9}, +title = {{Adjustable Speed Generators for Wind Turbines based on Doubly-fed Induction Machines and 4-Quadrant IGBT Converters Linked to the Rotor}}, +volume = {00}, +year = {2000} +} +@article{Code2006, +author = {Code, Price}, +journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, +title = {{INTERNATIONAL STANDARD}}, +year = {2006} +} +@article{Wind2002a, +author = {Wind, Gamesa and Aps, Engineering}, +journal = {Wind Engineering}, +title = {{COPYRIGHT © Danish Standards . NOT FOR COMMERCIAL USE OR REPRODUCTION Elproducerende vindm\o ller – Del 23 : Strukturpr\o vning i fuld skala af rotorblade Wind turbine generator systems – Part 23 : Full-scale structural testing of rotor blades Deskriptorer :}}, +year = {2002} +} +@article{Norm2002, +author = {Norm, Deutsche}, +journal = {Informationstechnik}, +number = {0127005}, +title = {{En 61400-21}}, +volume = {21}, +year = {2002} +} +@article{Ag, +author = {Ag, Kisssoft}, +pages = {1--60}, +title = {{Wind turbine gearboxes Gear analysis for the gear buyer}} +} +@article{Installation2004, +author = {Installation, First}, +title = {{DERMOND WIND TURBINE}}, +year = {2004} +} +@article{Buhl1998, +author = {Buhl, Marshall L and Wright, Alan D and Tangler, James L}, +journal = {Wind Energy}, +number = {December 1997}, +title = {{W IND T URBINE D ESIGN C ODES : A P RELIMINARY C OMPARISON OF THE A ERODYNAMICS}}, +year = {1998} +} +@article{Savage2006, +author = {Savage, Dave}, +journal = {Administrator}, +title = {{Final Report - 2006 Minnesota Wind Integration Study}}, +volume = {I}, +year = {2006} +} +@article{Minnesota2006, +author = {Minnesota, The and Utilities, Public}, +journal = {Administrator}, +number = {651}, +title = {{Final Report - 2006 Minnesota Wind Integration Study}}, +volume = {II}, +year = {2006} +} +@article{Smith, +author = {Smith, J Charles and Demeo, Edgar A and Parsons, Brian}, +journal = {Group}, +number = {303}, +title = {{WIND POWER IMPACTS ON ELECTRIC POWER SYSTEM OPERATING COSTS : SUMMARY AND PERSPECTIVE ON WORK TO DATE}}, +volume = {80401} +} +@article{Committee2005, +author = {Committee, Development and Meeting, Luncheon}, +journal = {Development}, +title = {{Outline for Today}}, +year = {2005} +} +@article{Holland2006, +author = {Holland, In}, +journal = {Wind Energy}, +pages = {26--27}, +title = {{The sun makes the wind blow.}}, +year = {2006} +} +@article{Margolick2003, +author = {Margolick, Michael and Kun, Nai and Development, Wind}, +journal = {East Asia}, +title = {{Wind energy Technology trends and applications in East Asia Mayflower – Offshore turbine installation vessel}}, +year = {2003} +} +@article{Justus2005, +author = {Justus, Debra and Co-operation, Organisation Economic}, +journal = {Wind Energy}, +title = {{OECD ENVIRONMENT DIRECTORATE INTERNATIONAL ENERGY AGENCY INTERNATIONAL ENERGY TECHNOLOGY Case Study 5 : Wind Power Integration into Electricity Systems}}, +year = {2005} +} +@article{Barsoor, +author = {Barsoor, The and Drdo, At Girola and Drdo, Girola and Svc, Mvar and The, V}, +title = {{1. Introduction}} +} +@article{Flowers2006, +author = {Flowers, Larry}, +journal = {Energy}, +title = {{Wind Energy Update Capacity \& Cost Trends People Want Renewable Energy !}}, +year = {2006} +} +@article{Smitha, +author = {Smith, Paul}, +title = {{Assessing the Impact of Wind Generation on Power System Stability}} +} +@article{Jenkins2006, +author = {Jenkins, Prof Nick and Strbac, Prof Goran and Thornley, Vincent}, +journal = {Energy}, +pages = {1--32}, +title = {{Integration of renewable energy into electric power systems}}, +year = {2006} +} +@article{Sasse, +author = {Sasse, Christian and Manager, General}, +journal = {Technology}, +title = {{No Title}} +} +@article{Farmer2001, +author = {Farmer, Richard G}, +journal = {System}, +title = {{Dynamics and Stability}}, +year = {2001} +} +@article{Course, +author = {Course, Web}, +journal = {Science}, +number = {2}, +title = {{Sample Questions}}, +volume = {1} +} +@article{Systems2007, +author = {Systems, Non-conventional Energy}, +journal = {Science}, +title = {{Syllabus for this chapter 1.}}, +year = {2007} +} +@article{Pacific, +author = {Pacific, Asia and Flats, Kentish}, +journal = {Middle East}, +title = {{VestasGlobal}} +} +@article{Erdman2006, +author = {Erdman, William L and Ramo, San}, +journal = {Offshore (Conroe, TX)}, +title = {{Reductions in the Cost Wind Generated Electricity : The Role of Power Conversion Systems California ’ s Wind Rush of 1980 ’ s}}, +year = {2006} +} +@article{Market, +author = {Market, National Electricity and Limited, Management Company}, +journal = {Power}, +title = {{Assessment of Potential Security Risks due to High Levels of Wind Generation in South Australia - Summary of DIgSILENT Studies ( Stage1 )}} +} +@article{Windb, +author = {Wind, Federal}, +journal = {Secretary}, +title = {{No Title}} +} +@article{Juan, +author = {Juan, M}, +journal = {Wind Energy}, +keywords = {chord and twist distributions,computational fluid dynamics,energy systems,evolutionary algorithms,genetic algorithms,in wind,method to obtain optimal,optimal design,the distributions are computed,this paper shows a,to maxi-,turbine blades by using,wind power}, +title = {{Wind blade chord and twist angle optimization by using genetic algorithms}} +} +@book{Stenberg2009, +author = {Stenberg, Anders and Holttinen, Hannele}, +isbn = {9789513874865}, +keywords = {Wind energy, wind power, power production, statistics, production statistics, failures}, +title = {{Tuulivoiman tuotantotilastot}}, +year = {2009} +} +@article{Bell2007, +author = {Bell, M J and Republic, Slovak and Feitosa, E A and Republic, Slovak and Republic, Czech and Republic, Slovak and Troen, I and Frandsen, S and Landberg, L and Rathmann, O and Authority, Energy and Authority, Egyptian Meteorological}, +isbn = {8755021433}, +journal = {Wind Energy}, +title = {{Wind Atlases of the World}}, +year = {2007} +} +@article{Shen2009, +author = {Shen, Wen Zhong and Hansen, Martin O L and S\o rensen, Jens N\o rk\ae r}, +doi = {10.1002/we}, +keywords = {airfoil,characteristics,wind}, +number = {May 2008}, +pages = {91--98}, +title = {{on Rotor Blades}}, +year = {2009} +} +@article{Xudong2009, +author = {Xudong, Wang and Shen, Wen Zhong and Zhu, Wei Jun and Jin, Chen}, +doi = {10.1002/we}, +journal = {Optimization}, +number = {April}, +pages = {781--803}, +title = {{Shape Optimization of Wind Turbine Blades}}, +year = {2009} +} +@book{Holttinen2008, +author = {Holttinen, Hannele}, +isbn = {9789513871673}, +keywords = {wind energy, wind power, power production, statistics, production statistics, failures}, +title = {{Tuulivoiman tuotantotilastot Vuosiraportti 2007}}, +year = {2008} +} +@article{Okulov2008b, +author = {Okulov, Valery L and S\o rensen, Jens N and Engineering, Mechanical}, +doi = {10.1002/we}, +journal = {Bernoulli}, +keywords = {betz limit,turbine,wind}, +number = {April}, +pages = {415--426}, +title = {{Finite Number of Blades}}, +year = {2008} +} +@article{Sant2009, +author = {Sant, Tonio and Kuik, Gijs Van and Bussel, G J W Van}, +doi = {10.1002/we}, +keywords = {wind}, +number = {April 2006}, +pages = {1--32}, +title = {{Blade Pressure Measurements on a Free Wake Vortex Model : Yawed Conditions}}, +year = {2009} +} +@article{Office, +author = {Office, Paris}, +journal = {Area}, +title = {{National advisory committee foe aj3ronau’jncs. on the elementary relation betw3en pitch, slip, and propul9tion efficiency.}} +} +@article{Fluides, +author = {Fluides, Mecanique D E S}, +pages = {1--14}, +title = {{Physique de Laboratoire et Proc\'{e}d\'{e}s Industriels}} +} +@article{Niepraschk2008, +author = {Niepraschk, Rolf}, +pages = {1--19}, +title = {{The pst-pdf package ∗}}, +year = {2008} +} + + + +@article{Aslaksen2010, +author = {Aslaksen, Helmer}, +journal = {I Can}, +pages = {1--19}, +title = {{Various TEX tricks}}, +year = {2010} +} +@article{Robertson2009, +author = {Robertson, Will and Gro\ss e, Johannes}, +pages = {1--10}, +title = {{The auto-pst-pdf package}}, +year = {2009} +} +@article{Tobias2004, +author = {Tobias, N}, +title = {{Short introduction to PSTricks}}, +year = {2004} +} +@article{Sørensen2009, +author = {S\o rensen, Jens N\o rk\ae r and Kuik, Gijs Van}, +journal = {Power}, +number = {October}, +pages = {1978--1979}, +title = {{Actuator disc momentum theory for low lambda rotors}}, +year = {2009} +} +@article{Kuik2009, +author = {Kuik, G. A. M. Van and Zuylen, A H Van}, +journal = {Interpretation A Journal Of Bible And Theology}, +number = {October}, +pages = {26--28}, +title = {{On actuator disc force fields generating wake vorticity}}, +year = {2009} +} +@article{Nrel2008, +author = {Nrel, S Schreck}, +journal = {Renewable Energy}, +keywords = {December 2008,Horizontal axis wind turbines,International Energy Agency Wind Annex XX research results,NREL/TP-500-43508,wind turbine aerodynamics}, +number = {December}, +title = {{December 2008 IEA Wind Annex XX HAWT Aerodynamics and Models Final Report}}, +year = {2008} +} +@book{Frandsen2007, +author = {Frandsen, Sten}, +isbn = {8755034586}, +number = {January}, +title = {{Turbulence and turbulence- generated structural loading in wind turbine clusters}}, +volume = {1188}, +year = {2007} +} +@article{Okulov2008c, +author = {Okulov, V L and S\o rensen, J N}, +doi = {10.1134/S1028335808060128}, +isbn = {1028335808060}, +journal = {Text}, +number = {6}, +pages = {478--483}, +title = {{An Ideal Wind Turbine with a Finite Number of Blades}}, +volume = {53}, +year = {2008} +} +@article{Battisti2007, +author = {Battisti, L and Soraperra, G and Fedrizzi, R and Zanne, L}, +doi = {10.1088/1742-6596/75/1/012013}, +pages = {1--14}, +title = {{Inverse design-momentum , a method for the preliminary design of horizontal axis wind turbines}}, +volume = {75}, +year = {2007} +} +@article{Of2004, +author = {Of, Epartment and For, Nstitute and In, Eport and Of, Ulfilment and Requirements, T H E and The, O F}, +title = {{A F UNCTIONAL R E - EXAMINATION OF}}, +year = {2004} +} +@article{Kelley1999, +author = {Kelley, Neil D}, +journal = {Design}, +number = {July}, +title = {{A Case for Including Atmospheric Thermodynamic Variables in Wind Turbine Fatigue Loading Parameter Identification}}, +year = {1999} +} +@book{Mattingly1801, +author = {Mattingly, Jack D and Heiser, William H and Pratt, David T}, +booktitle = {Springs}, +isbn = {1563475383}, +title = {{Second Edition dA- \~{} A4-}}, +year = {1801} +} +@article{Shen2009a, +author = {Shen, Wen Zhong and Zhang, Jian Hui}, +doi = {10.1115/1.3027502}, +journal = {Journal of Solar Energy Engineering}, +number = {February}, +pages = {1--9}, +title = {{The Actuator Surface Model : A New Navier – Stokes Based}}, +volume = {131}, +year = {2009} +} +@book{Faculty2007, +author = {Faculty, Mechanical Engineering}, +isbn = {9789993204831}, +title = {{Improving BEM †based Aerodynamic Models in Wind Turbine Design Codes Improving BEM †based Aerodynamic Models Tonio Sant Tonio Sant Improving BEM-based Aerodynamic Models in Wind Turbine Design Codes}}, +year = {2007} +} +@article{Akay, +author = {Akay, B and Sim, C}, +title = {{Experimental and Numerical Investigation of the Effect of Rotor Blockage on Wake Expansion}} +} +@article{Desmet2001, +author = {Desmet, M B and Billard, M J Y and Rey, M R and Caignaert, M G and Bakir, M F}, +title = {{\'{E}COLE NATIONALE SUP\'{E}RIEURE D ’ ARTS ET M\'{E}TIERS CENTRE DE PARIS MODELISATION EN REGIME NOMINAL ET PARTIEL DE L ’ ECOULEMENT M\'{E}RIDIEN DANS LES TURBOMACHINES}}, +year = {2001} +} +@article{Dixon, +author = {Dixon, S L}, +title = {{Fluid Mechanics , Thermodynamics of Turbomachinery}} +} +@article{Vogt2007, +author = {Vogt, Damian}, +journal = {Control}, +pages = {1--7}, +title = {{Review of Basic Laws of Turbomachinery Turbomachine System Discretization}}, +year = {2007} +} +@article{Droits2007, +author = {Droits, Tous and Le, I E}, +title = {{Technique 2007 © 2001/2006,}}, +year = {2007} +} +@article{Gte, +author = {Gte, I U T}, +pages = {1--28}, +title = {{IUT GTE}} +} +@article{Cace, +author = {Cace, Jadranka and Horst, Emil and Syngellakis, Katerina and Power, I T and Niel, Ma\'{\i}te and Clement, Patrick and Heppener, Renate}, +journal = {Power}, +title = {{URBAN WIND TURBINES Wind Energy Integration in the Urban Environment}} +} +@article{Services, +author = {Services, Industrial and Energy, I Wind}, +title = {{Store of Power Ja \~{} od to aaols}} +} +@article{Sutherland2004, +author = {Sutherland, Herbert J and Mandell, John F}, +journal = {Science}, +keywords = {2,and a three-parameter model,blades,doe fatigue data base,fatigue,fiberglass,formulation uses the msu,spectral,their,to describe the mean,turbine blades,typically used in wind,wind}, +pages = {546--555}, +title = {{The Effect of Mean Stress on Damage Predictions for Spectral Loading of Fiberglass Composite Coupons 1 Abstract :}}, +year = {2004} +} +@article{Ashwill2007, +author = {Ashwill, Tom and Kanaby, Gary}, +title = {{Sweep-Twist Adaptive Blade}}, +year = {2007} +} +@article{Ashwill2007a, +author = {Ashwill, Thomas D and Paquette, Joshua A}, +journal = {Wind Energy}, +keywords = {carbon fiber composites,epoxy,evaluation,failure criteria,failure mechanisms,fatigue,glass fiber composites,materials,polyester,prepreg materials,prepreg properties,resins,resistance,testing,vinyl ester,wind turbine blade}, +number = {March}, +pages = {1--25}, +title = {{COMPOSITE MATERIALS FOR INNOVATIVE WIND TURBINE BLADES *}}, +year = {2007} +} +@article{Rumsey, +author = {Rumsey, Mark A and Paquette, Joshua A}, +isbn = {5058443910}, +journal = {Test}, +keywords = {1,244 megawatts,5,acoustic emission,and injected an investment,expanded the nation,fatigue testing,generating capacity by 45,in 2007,in a single calendar,in the united states,macro-fiber composite,mw,of electric generation from,s total wind power,state of wind energy,technology,this,wind energy was installed,wind turbine blades,year}, +title = {{Structural Health Monitoring of Wind Turbine Blades *}} +} +@article{Mandell, +author = {Mandell, John F and Samborsky, Daniel D and Wahl, Neil K and Sutherland, Herbert J}, +journal = {Analysis}, +title = {{Testing and Analysis of Low Cost Composite Materials Under Spectrum Loading and High Cycle Fatigue Conditions}} +} +@article{Sutherland, +author = {Sutherland, Herbert J and Mandell, John F}, +journal = {Cycle}, +pages = {1--12}, +title = {{UPDATED GOODMAN DIAGRAMS FOR FIBERGLASS COMPOSITE MATERIALS USING THE DOE / MSU FATIGUE DATABASE by}} +} +@article{Sutherland1994, +author = {Sutherland, Herbert J}, +journal = {Wind Energy}, +number = {April}, +pages = {1--6}, +title = {{FATIGUE CASE STUDY AND LOADING SPECTRA FOR WIND TURBINES * STUDY : TURBINES FATIGUE OF Example Problem for the Case Study}}, +year = {1994} +} +@article{Box2003, +author = {Box, P O and Ne, Lakeview}, +journal = {Data Processing}, +number = {February}, +title = {{Sandia National Laboratories New Mexico Wind Resource Assessment Lee Ranch Data Summary and Transmittal for September – December 2002 Annual Analysis for January – December 2002 Prepared for : Sandia National Laboratories Prepared by : Global Energy Concepts , LLC}}, +year = {2003} +} +@article{Sutherland1996, +author = {Sutherland, Herbert J}, +journal = {Wind Energy}, +pages = {1--8}, +title = {{DAMAGE ESTIMATES FOR EUROPEAN AND U . S . SITES USING THE U . S . HIGH-CYCLE FATIGUE DATA BASE}}, +year = {1996} +} +@article{Berg, +author = {Berg, Dale E and Wilson, David G and Barone, Matthew F and Resor, Brian R and Berg, Jonathan C and Paquette, Joshua A and Zayas, Jose R}, +journal = {Wind Energy}, +title = {{The Impact of Active Aerodynamic Load Control on Fatigue and Energy Capture at Low Wind Speed Sites *}} +} +@article{Mandell1999, +author = {Mandell, John F and Samborsky, Daniel D}, +journal = {Database}, +keywords = {0,and c,b is then the,close to 1,composites,data bases,fatigue,fatigue coefficient,fiber reinforced plastics,frp,s-n curve,slope of the,termed the,the log-log,the single-cycle ultimate strength,typically has a value,where $\sigma$ o is}, +title = {{Presented at 1999 EWEC Effects of Materials Parameters and Design Details on the Fatigue of Composite Materials for Wind Turbine Blades}}, +year = {1999} +} +@article{Lobitz1984, +author = {Lobitz, Don W}, +journal = {Energy}, +number = {May}, +title = {{A Nastran-Based Computer Program For Structural Dynamic Analysis Of Horizontal Axis Wind Turbines *}}, +year = {1984} +} +@article{Lobitz, +author = {Lobitz, Don W}, +journal = {Wind Energy}, +pages = {1--10}, +title = {{Parameter Sensitivities Affecting the Flutter Speed of a MW-Sized Blade}} +} +@article{Veers1995, +author = {Veers, Paul S}, +journal = {Wind Energy}, +title = {{ALL WIND FARM UNCERTAINTY IS NOT THE SAME : THE ECONOMICS OF COMMON VERSUS INDEPENDENT CAUSES *}}, +year = {1995} +} +@article{Ashwill2006, +author = {Ashwill, Tom}, +journal = {Baseline}, +number = {June}, +pages = {1--12}, +title = {{Blade Technology Innovations for Utility-Scale Turbines}}, +year = {2006} +} +@article{Lobitza, +author = {Lobitz, Don W}, +journal = {Analysis}, +title = {{Flutter Speed Predictions for MW-Sized Wind Turbine Blades}} +} +@article{Paquette, +author = {Paquette, J A}, +journal = {Test}, +keywords = {acoustic emissions,carbon fiber,evaluated in this program,flat-back airfoils,including a passive twist-,structural testing,were constructed and,while three blade designs,wind turbine blade}, +title = {{Increased Strength in Wind Turbine Blades through Innovative Structural Design * Abstract :}} +} +@article{Veers1998, +author = {Veers, Paul and Laboratories, Sandia National and Bir, Gunjit and Renewable, National and Wind, National and Lobitz, Donald and Laboratories, Sandia National}, +journal = {Wind Energy}, +number = {1981}, +title = {{AEROELASTIC TAILORING IN WIND-TURBINE BLADE APPLICATIONS}}, +year = {1998} +} +@article{Sutherland1995, +author = {Sutherland, H J}, +title = {{ENVIRONMENTS}}, +year = {1995} +} +@article{Wilson2009, +author = {Wilson, David G and Berg, Dale E and Resor, Brian R and Barone, Matthew F and Berg, Jonathan C and National, Sandia and Box, Laboratories P O}, +journal = {Fluid Dynamics}, +keywords = {active aerodynamic,independent pitch control,trailing edge devices,wind turbine control}, +pages = {1--12}, +title = {{Combined Individual Pitch Control and Active Aerodynamic Load Controller Investigation for the 5MW UpWind Turbine}}, +year = {2009} +} +@article{Sutherland1992, +author = {Sutherland, Herbert J and Osgood, Richard M}, +journal = {Energy}, +pages = {1--8}, +title = {{Proceedings of WindPower 92, AWEA, Washington, D.C., 1992.}}, +year = {1992} +} +@article{Berga, +author = {Berg, Dale E and Wilson, David G and Resor, Brian R and Barone, Matthew F and Berg, Jon C and Kota, Sridhar and Ervin, Gregory and Arbor, Ann}, +journal = {Baseline}, +pages = {1--12}, +title = {{Active Aerodynamic Blade Load Control Impacts on Utility-Scale Wind}} +} +@article{Berg2008, +author = {Berg, Dale E and Barone, Matthew}, +journal = {Test}, +pages = {4--13}, +title = {{Aerodynamic and Aeroacoustic Properties of a Flatback Airfoil ( Will it Rumble or Whisper ?)}}, +year = {2008} +} +@article{Wilson2008, +author = {Wilson, David G and Berg, Dale E and Lobitz, Don W and Zayas, Jose R and Laboratories, Sandia National and Box, P O}, +journal = {Wind Energy}, +keywords = {fatigue load reduction,trailing edge microtabs,wind turbine control}, +pages = {1--7}, +title = {{Optimized Active Aerodynamic Blade Control for Load Alleviation on Large Wind Turbines}}, +year = {2008} +} +@article{Sutherland1998, +author = {Sutherland, Herbert J and Carlin, Palmer W}, +journal = {Power}, +title = {{AIAA-98-0064 DAMAGE MEASUREMENTS ON THE NWTC DIRECT-DRIVE ,}}, +year = {1998} +} +@article{Metzinger, +author = {Metzinger, K E and Guess, T R and Laboratories, Sandia National}, +pages = {1--10}, +title = {{Aiaa 98-0063}} +} +@article{Metzingera, +author = {Metzinger, K E and Guess, T R}, +journal = {Composites Technology}, +pages = {1--9}, +title = {{HOW GEOMETRIC DETAILS CAN AFFECT THE STRENGTH OF ADHESIVE LAP JOINTS}} +} +@article{Kelley1997, +author = {Kelley, Neil D and Sutherland, Herbert J}, +journal = {Wind Energy}, +pages = {1--10}, +title = {{DAMAGE ESTIMATES FROM LONG-TERM STRUCTURAL ANALYSIS OF A WIND TURBINE IN A U . S . WIND FARM ENVIRONMENT *†}}, +year = {1997} +} +@article{Berg1989, +author = {Berg, D E and Iuimas, P C}, +journal = {Wind Energy}, +number = {January}, +title = {{OF A VAWT BLADE MATERIAL *}}, +year = {1989} +} +@article{Lobitzb, +author = {Lobitz, Don W and Laino, David J}, +title = {{No Title}} +} +@article{Sutherland1996a, +author = {Sutherland, Herbert J and Mandell, John F}, +journal = {Chemical Engineering}, +number = {1992}, +title = {{APPLICATION OF THE U . S . HIGH CYCLE FATIGUE DATA BASE TO WIND TURBINE BLADE LIFETIME PREDICTIONS}}, +year = {1996} +} +@article{Lobitzc, +author = {Lobitz, Don W and Veers, Paul S}, +pages = {1--9}, +title = {{AEROELASTIC BEHAVIOR OF TWIST-COUPLED HAWT BLADES}} +} +@article{Lobitz1987, +author = {Lobitz, D W and Veers, P S and Laboratories, Sandia National and Migliore, P G and Renewable, National}, +journal = {Renewable Energy}, +title = {{Enhanced Performance of HAWTs Using Adaptive Blades}}, +year = {1987} +} +@article{Sutherland1995a, +author = {Sutherland, Herbert J and Burwinkle, Daniel P}, +journal = {Wind Energy}, +pages = {91--97}, +title = {{THE SPECTRAL CONTENT OF THE TORQUE LOADS ON A TURBINE GEAR TOOTH 1 University of New Mexico}}, +volume = {16}, +year = {1995} +} +@article{Veers1997, +author = {Veers, Paul S and Winterstein, Steven R}, +journal = {Wind Energy}, +pages = {1--10}, +title = {{APPLICATION OF MEASURED LOADS TO WIND TURBINE FATIGUE AND RELIABILITY ANALYSIS *}}, +year = {1997} +} +@article{Sutherland1995b, +author = {Sutherland, Herbert J and Veers, Paul S}, +journal = {Wind Energy}, +pages = {83--90}, +title = {{ON FATIGUE LIFE PREDICTIONS 1}}, +volume = {16}, +year = {1995} +} +@article{Sutherland2000, +author = {Sutherland, Herbert J and Veers, Paul S}, +pages = {1--11}, +title = {{The development of confidence limits for fatigue strength data *†}}, +year = {2000} +} +@article{Laird, +author = {Laird, Daniel L and Carne, Thomas G}, +journal = {Contract}, +title = {{ESTIMATION OF UNCERTAIN MATERIAL PARAMETERS AIAA-98-0049}} +} +@article{Berg2002, +author = {Berg, Dale E and Zayas, Jose R}, +journal = {Wind Energy}, +pages = {1--12}, +title = {{Aerodynamic and Aeroacoustic Properties of Flatback Airfoils}}, +year = {2002} +} +@article{Ochs1996, +author = {Ochs, Stuart S}, +journal = {Engineering Sciences}, +pages = {1--8}, +title = {{CFD Calculations of S809}}, +year = {1996} +} +@article{Bergb, +author = {Berg, Dale E and Zayas, Jose R}, +journal = {Wind Energy}, +title = {{Aerodynamic and Aeroacoustic Properties of Flatback Airfoils}} +} +@article{Blades, +author = {Blades, Wind Turbine and Rumsey, Mark A and Paquette, Joshua and Beattie, Alan G}, +journal = {Design Engineering}, +pages = {1--14}, +title = {{Experimental Results of Structural Health Monitoring of}} +} +@article{Paquette2002, +author = {Paquette, Joshua and Dam, Jeroen Van and Hughes, Scott and Assisted, Vacuum and Transfer, Resin and Laboratories, Sandia National and Wind, National and Pressure, High and Pressure, Low and Introduction, I and Engineering, Dynamic Design}, +journal = {Contract}, +number = {425}, +pages = {1--11}, +title = {{Structural Testing of 9 m Carbon Fiber Wind Turbine Research Blades *}}, +year = {2002} +} +@article{Ashwill2007b, +author = {Ashwill, Thomas and Laird, Daniel}, +journal = {Wind Energy}, +number = {January}, +pages = {1--13}, +title = {{Concepts to Facilitate Very Large Blades}}, +year = {2007} +} +@article{Paquette2005, +author = {Paquette, Joshua and Laird, Daniel and Griffith, D Todd and Rip, Laura and Laboratories, Sandia National and Renewable, National and Concepts, Global Energy and Function, Frequency Response and Analysis, Finite Element and Renewable, National}, +journal = {Renewable Energy}, +pages = {1--13}, +title = {{Modeling and Testing of 9m Research Blades *}}, +year = {2005} +} +@article{Sutherland2004a, +author = {Sutherland, Herbert J and Mandell, John F}, +journal = {Wind Energy}, +pages = {1--13}, +title = {{EFFECT OF MEAN STRESS ON THE DAMAGE OF WIND TURBINE BLADES *† R =}}, +year = {2004} +} +@article{Nelson2003, +author = {Nelson, Luke D and Manuel, Lance and Sutherland, Herbert J and Veers, Paul S}, +journal = {Renewable Energy}, +title = {{STATISTICAL ANALYSIS OF INFLOW AND STRUCTURAL RESPONSE DATA FROM THE LIST PROGRAM *†}}, +year = {2003} +} +@article{Malcolm2003, +author = {Malcolm, David J and Laird, Daniel L}, +journal = {Energy}, +title = {{Modeling of blades as equivalent beams for aeroelastic analysis by Abstract Introduction}}, +year = {2003} +} +@article{Pandey2003, +author = {Pandey, M D}, +journal = {Renewable Energy}, +title = {{PROBABILISTIC ANALYSIS OF LIST DATA FOR THE ESTIMATION OF EXTREME DESIGN LOADS FOR WIND TURBINE COMPONENTS *†}}, +year = {2003} +} +@article{Veers2001, +author = {Veers, Paul S}, +journal = {Wind Energy}, +pages = {1--12}, +title = {{PARAMETRIC MODELS FOR ESTIMATING WIND TURBINE FATIGUE LOADS FOR DESIGN}}, +year = {2001} +} +@article{Sutherland2003, +author = {Sutherland, Herbert J and Kelley, Neil D and Hand, M Maureen}, +journal = {Renewable Energy}, +title = {{INFLOW AND FATIGUE RESPONSE OF THE NWTC ADVANCED}}, +year = {2003} +} +@article{Griffin2003, +author = {Griffin, Dayton A and Ne, Lakeview Drive}, +journal = {Wind Energy}, +pages = {1--11}, +title = {{No Title}}, +year = {2003} +} +@article{Fitzwater2001, +author = {Fitzwater, Leroy M and Winterstein, Steven R}, +journal = {Environmental Engineering}, +pages = {1--11}, +title = {{PREDICTING DESIGN WIND TURBINE LOADS FROM LIMITED DATA : COMPARING RANDOM PROCESS AND RANDOM PEAK MODELS}}, +year = {2001} +} +@article{Ashwill2012, +author = {Ashwill, Thomas D}, +journal = {Wind Energy}, +pages = {1--20}, +title = {{Materials and Innovations for Large Blade Structures : Research Opportunities in Wind Energy Technology}}, +year = {2012} +} +@article{Butterfield2001, +author = {Butterfield, Sandy}, +journal = {Design}, +title = {{Extreme Load Estimation for Wind Turbines : Issues and Opportunities for Improved Practice}}, +year = {2001} +} +@article{Doren1999, +author = {Doren, Neal E}, +journal = {October}, +number = {October}, +title = {{Sandia National laboratories}}, +year = {1999} +} +@article{Tsai1999, +author = {Tsai, Stephen W}, +journal = {Distribution}, +number = {June}, +title = {{Bend-Twist D-spar @ I}}, +year = {1999} +} +@article{Gross, +author = {Gross, Erik and Zadoks, Rick I}, +journal = {Techniques}, +pages = {1--6}, +title = {{ALAA 99-0047 Application of Damage Detection Techniques using Wind Turbine Modal Data *}} +} +@article{Government2010, +author = {Government, U S}, +journal = {Database}, +title = {{DOE / MSU COMPOSITE MATERIAL FATIGUE DATABASE}}, +year = {2010} +} +@article{Eisler1998, +author = {Eisler, G Richard and Veers, Paul S}, +journal = {Wind Energy}, +number = {December}, +title = {a}, +year = {1998} +} +@article{Government2009, +author = {Government, U S}, +journal = {Database}, +title = {{DOE / MSU COMPOSITE MATERIAL FATIGUE DATABASE}}, +year = {2009} +} +@article{Mandell1997, +author = {Mandell, John F and Samborsky, Daniel D}, +journal = {Chemical Engineering}, +number = {December}, +title = {{DOE / MSU Composite Material Fatigue Database : Test Methods , Materials , and Analysis}}, +year = {1997} +} +@article{Rumseya, +author = {Rumsey, Mark and Gross, Erik}, +pages = {1--10}, +title = {{AIAA 98-0048}} +} +@article{Lange1996, +author = {Lange, Clifford H}, +journal = {Civil Engineering}, +number = {May}, +title = {{Probabilistic Fatigue Methodology and Wind Turbine Reliability}}, +year = {1996} +} +@article{Street1996, +author = {Street, A and Rafael, San}, +journal = {Evaluation}, +title = {{Final Project Report : Highenergy Rotor Development , Test and Evaluation FloWind Corporation}}, +year = {1996} +} +@article{Ill1996, +author = {Ill, George H James}, +journal = {Distribution}, +number = {April}, +title = {{Development of Structural Health Monitoring Techniques Using Dynamics Testing}}, +year = {1996} +} +@article{Guess1995, +author = {Guess, T R and Reedy, E D and Stavig, M E}, +journal = {Distribution}, +number = {February}, +title = {{Mechanical Properties of Hysol EA-9394 Structural Adhesive}}, +year = {1995} +} +@article{Winterstein, +author = {Winterstein, S R}, +journal = {Civil Engineering}, +title = {{Probability to Fit Four-Moment Distributions to Data}} +} +@article{Wintersteina, +author = {Winterstein, Steven R and Veers, Paul S}, +journal = {Wind Energy}, +number = {January 2000}, +title = {{Analysis of the Fatigue and Reliability of Wind Turbine i I ’ I}} +} +@article{Mandell1992, +author = {Mandell, John F and Reed, Robert M and Samborsky, Daniel D and Hall, Cobleigh}, +journal = {Chemical Engineering}, +number = {August}, +title = {{Fatigue of Fiberglass Wind Turbine Blade Materials}}, +year = {1992} +} +@article{Ashwill1992, +author = {Ashwill, Tom D}, +journal = {Distribution}, +number = {July}, +title = {{Measured Data for the Sandia Vertical Axis Wind Turbine}}, +year = {1992} +} +@article{Ill1993, +author = {Ill, George H James and Carrie, Thomas G and Lauffer, James P}, +journal = {System}, +title = {{The Natural Excitation Technique ( NExT ) for Modal Parameter Extraction From Operating Wind Turbines}}, +year = {1993} +} +@article{Homicz1991, +author = {Homicz, Gregory F}, +journal = {Power}, +title = {{Numerical Simulation of VAWT Stochastic Aerodynamic Loads Produced by Atmospheric Turbulence : VAWT-SAL Code}}, +year = {1991} +} +@article{Validation1990, +author = {Validation, Model}, +journal = {Test}, +number = {February}, +title = {{Initial Structural Response Measurements a Model Validation the Sandia 34-Meter VAWT Test Bed}}, +year = {1990} +} +@article{Release1988, +author = {Release, Unlimited}, +journal = {Distribution}, +title = {{Three-Dimensional nd Simulation}}, +year = {1988} +} +@article{Lauffer1988, +author = {Lauffer, James P and Carrie, Thomas G and Ashwill, Thomas D}, +journal = {Wind Energy}, +number = {April}, +title = {{Modal Testing in the Design Evaluation of Wind Turbines}}, +year = {1988} +} +@article{Carrie1988, +author = {Carrie, G and Lauffer, P and Gomez, J}, +journal = {Distribution}, +number = {April}, +title = {{Modal Testing the EOLE}}, +year = {1988} +} +@article{Lobitz1986, +author = {Lobitz, D W and Ashwill, T D}, +journal = {Contract}, +number = {April}, +title = {{Aeroelastic Effects in the Structural Dynamic Analysis of Vertical Axis Wind Turbines}}, +volume = {29000}, +year = {1986} +} +@article{Berg1985, +author = {Berg, Dale E}, +journal = {Design}, +number = {April}, +title = {{Structural Design of the Sandia 34-Meter Vertical-Axis Wind Turbine}}, +volume = {29}, +year = {1985} +} +@article{Oler1983, +author = {Oler, J W and Strickland, J H and Im, B J and Graham, G H}, +journal = {Power}, +number = {August}, +title = {{Dynamic Stall Regulation of the Darrieus Turbine}}, +year = {1983} +} +@article{Popelka1984, +author = {Popelka, David}, +number = {February 1982}, +title = {{Aeroelastic Stability Analysis of a Darrieus Wind Turbine}}, +year = {1984} +} +@article{Report1984, +author = {Report, Sandia}, +number = {September}, +title = {{Modeling Stochastic Wind Loads , on Vertical Axis Wind Turbines}}, +year = {1984} +} +@article{Veers1983, +author = {Veers, Paul S}, +journal = {Contract}, +number = {October}, +title = {{A General Method for Fatigue Analysis of Vertical Axis Wind Turbine Blades *}}, +year = {1983} +} +@article{Carrie1983, +author = {Carrie, Thomas G and Nord, Arlo R}, +journal = {Contract}, +number = {June}, +title = {{Modal Testing of a Rotating . Wind Turbine}}, +year = {1983} +} +@article{Carrie1982, +author = {Carrie, Thomas G and Lobitz, Donald W and Nerd, Arlo R and Watson, Robert A}, +journal = {October}, +title = {{Finite Element Analysis and Modal Testing of a Rotating Wind Turbine .}}, +year = {1982} +} +@article{Carrie, +author = {Carrie, Thomas G}, +journal = {Energy}, +title = {{Guy Cable Design and Damping for Vertical Axis Wind Turbines}} +} +@article{Sheldahl, +author = {Sheldahl, Robert E}, +journal = {Distribution}, +title = {{k Comparison of Field and Wind Tunnel Darrieus Wind Turbine Data}} +} +@article{Clauss, +author = {Clauss, David B and Carrie, Thomas G}, +journal = {Energy}, +title = {{Vertical Axis Wind Turbine Train Transient Dynamics Drive Printed in the United States of America Available from : National Technical Information Service NTIS Price Codes :}} +} +@article{Laboratories, +author = {Laboratories, Sandiss National and Dep, Ufited States and Government, United States and Govemrnent, United States and Government, United States and Government, United States and States, United and Available, America}, +journal = {Seven}, +title = {{No Title}} +} +@article{Sheldahla, +author = {Sheldahl, Robert E and Klimas, Paulc and Feltz, Louisv}, +title = {{Aerodynamic Performance of a 5-Metre- Diameter Darrieus Turbine With Extruded Aluminum NACA-0015 Blades}} +} +@article{Worstell1982, +author = {Worstell, Mark H}, +number = {August}, +title = {{Aerodynamic Performance of the 17-M-Diameter Darrieus Wind Turbine in the Three-Bladed Configuration : An Addendum}}, +year = {1982} +} +@article{Kaldlec1982, +author = {Kaldlec, Emil G}, +number = {November}, +title = {{Characteristics of Future Vertical Axis Wind Turbines}}, +year = {1982} +} +@article{Worstell1978, +author = {Worstell, Mark H}, +number = {September}, +title = {{Aerodynamic Performance of the 17 Meter Diameter Darrieus Wind Turbine}}, +year = {1978} +} +@article{Reuter1978, +author = {Reuter, Robert C and Worstell, Mark H}, +journal = {Energy}, +number = {April}, +title = {{Torque RippIe in a Vertical Axis Wind Turbine}}, +year = {1978} +} +@article{Reuter1984, +author = {Reuter, Robert C}, +journal = {October}, +number = {December 1977}, +title = {{VERTICALAXIS WIND TURBINETIE-DONN DESIGNWITH AN EXAMPLE Printed December 1977}}, +year = {1984} +} +@article{Laboratoriesa, +author = {Laboratories, Sandia and States, United and Energy, Atomic and Corporation, Sandia and Atomic, States States and Energy, Neither and Government, United and Commisson, United}, +journal = {Atomic Energy}, +title = {{No Title}} +} +@article{Release, +author = {Release, Unlimited}, +title = {{Practical Approximations to a Troposkien}} +} +@article{Robinett, +author = {Robinett, Rush D and Wilson, David G}, +journal = {Nonlinear Dynamics}, +pages = {1--6}, +title = {{Maximizing the Performance of Wind Turbines with Nonlinear Aeroservoelastic Power Flow Control}} +} +@article{Wilson, +author = {Wilson, David G and Resor, Brian R and Berg, Dale E and Laboratories, Sandia National and Box, P O}, +journal = {System}, +pages = {1--10}, +title = {{Active Aerodynamic Blade Distributed Flap Control Design Procedure for Load Reduction on the UpWind 5MW Wind Turbine}} +} +@article{Group2010, +author = {Group, Carver Wind}, +journal = {Group}, +number = {January}, +title = {{Sweep-Twist Adaptive Rotor Blade : Final Project Report}}, +year = {2010} +} +@article{Barone2009, +author = {Barone, Matthew F and Laboratories, Sandia National and Berg, Dale E and Laboratories, Sandia National}, +journal = {Leonardo}, +number = {August}, +title = {{Aerodynamic and Aeroacoustic Tests of a Flatback Version of the DU97-W-300 Airfoil}}, +year = {2009} +} +@article{Wilson2009a, +author = {Wilson, David G and Berg, Dale E and Resor, Brian R and Barone, Matthew F and Berg, Jonathan C and National, Sandia and Box, Laboratories P O}, +journal = {Fluid Dynamics}, +keywords = {active aerodynamic,independent pitch control,trailing edge devices,wind turbine control}, +pages = {1--12}, +title = {{Combined Individual Pitch Control and Active Aerodynamic Load Controller Investigation for the 5MW UpWind Turbine}}, +year = {2009} +} +@article{Griffin2009, +author = {Griffin, Dayton and Ashwill, Tom and Manager, Sandia Technical}, +journal = {Energy}, +number = {May}, +title = {{Blade System Design Study Part II : Final Project Report ( GEC )}}, +year = {2009} +} +@article{Exergy2008, +author = {Exergy, Utilizing and Robinett, Rush D and Wilson, David G}, +journal = {Agenda}, +title = {{Nonlinear Power Flow Control Design :}}, +year = {2008} +} +@article{Wilson2009b, +author = {Wilson, David G and Berg, Dale E and Barone, Mathew F and Berg, Jonathan C and Resor, Brian R and Lobitz, Don W}, +journal = {Wind Energy}, +number = {March}, +title = {{ACTIVE AERODYNAMIC BLADE CONTROL DESIGN FOR LOAD REDUCTION ON}}, +year = {2009} +} +@article{Johnson2008, +author = {Johnson, Scott J and Dam, C P Case Van and Berg, Dale E}, +journal = {Contract}, +keywords = {Sandia, Active Load Control, Smart Systems,}, +number = {August}, +title = {{Active Load Control Techniques for Wind Turbines}}, +year = {2008} +} +@article{Baker2008, +author = {Baker, Jonathon P and Dam, C P Case Van and Gilbert, Benson L}, +journal = {Contract}, +number = {April}, +title = {{Flatback Airfoil Wind Tunnel Experiment}}, +year = {2008} +} +@article{Dam2008, +author = {Dam, C P Case Van and Mayda, Edward A and Chao, David D and Berg, Dale E}, +journal = {Contract}, +number = {March}, +title = {{Computational Design and Analysis of Flatback Airfoil Wind Tunnel Experiment}}, +year = {2008} +} +@article{Dam2008a, +author = {Dam, C P Case Van and Kahn, Daniel L and Berg, Dale E}, +journal = {Contract}, +number = {March}, +title = {{Trailing Edge Modifications for Flatback Airfoils}}, +year = {2008} +} +@article{Chao2008, +author = {Chao, David D and Dam, C P Case Van}, +journal = {Manager}, +number = {April}, +title = {{CFD Analysis of Rotating Two-Bladed Flatback Wind Turbine Rotor}}, +year = {2008} +} +@article{Berry2007, +author = {Berry, Derek and Ashwill, Tom and Manager, Sandia Technical}, +journal = {Vacuum}, +number = {November}, +title = {{TX-100 Manufacturing Final Project Report}}, +year = {2007} +} +@article{Berry2007a, +author = {Berry, Derek S}, +journal = {Composites}, +number = {November}, +title = {{CX-100 Manufacturing Final Project Report}}, +year = {2007} +} +@article{Zayas2008, +author = {Zayas, Jose R and Johnson, Wesley D}, +journal = {Wind Energy}, +number = {March}, +title = {{3X-100 Blade Field Test}}, +year = {2008} +} +@article{Robinett2007, +author = {Robinett, Rush D and Wilson, David G}, +journal = {Analysis}, +number = {April}, +title = {{Collective Systems : Physical and Information Exergies}}, +year = {2007} +} +@article{Berry2007b, +author = {Berry, Derek and Investigator, Principal and Ashwill, Tom and Monitor, Sandia Technical}, +journal = {Design}, +number = {September}, +title = {{Design of 9-Meter Carbon-Fiberglass Prototype Blades : CX-100 and TX-100}}, +year = {2007} +} +@article{Release2007, +author = {Release, Unlimited and Mastbergen, Daniel Blair}, +journal = {October}, +number = {October}, +title = {{Simulation and Testing of Resin Infusion Manufacturing Processes for Large Composite Structures}}, +year = {2007} +} +@article{Release2007a, +author = {Release, Unlimited and Larsen, Eric Barnholt}, +journal = {Organization}, +number = {October}, +title = {{Pressure Bag Molding : Manufacturing , Mechanical Testing , Non-Destructive Evaluation , and Analysis}}, +year = {2007} +} +@book{Release2007b, +author = {Release, Unlimited}, +booktitle = {Knowledge Creation Diffusion Utilization}, +isbn = {9789090212210}, +number = {October}, +title = {{Fatigue Life Prediction and Strength Degradation of Wind Turbine Rotor Blade Composites}}, +year = {2007} +} +@article{Walford2006, +author = {Walford, Christopher A}, +journal = {Energy}, +number = {March}, +title = {{Wind Turbine Reliability : Understanding and Minimizing Wind Turbine Operation and Maintenance Costs}}, +year = {2006} +} +@article{Zayas2005, +author = {Zayas, Jose R and Jones, Perry L and Holman, Adam}, +journal = {Contract}, +number = {December}, +title = {{CX-1100 and TX-100 Blade Field Tests}}, +year = {2005} +} +@article{Hermann2006, +author = {Hermann, Thomas M and Locke, James E and Wetzel, Kyle K}, +journal = {Test}, +keywords = {anisotropic,laminate,hybrid}, +number = {November}, +title = {{Fabrication , Testing , and Analysis of Anisotropic Carbon / Glass Hybrid Composites Volume 2 : Test Data}}, +year = {2006} +} +@article{Hermann2006a, +author = {Hermann, Thomas M and Locke, James E and Wetzel, Kyle K}, +journal = {Composites}, +keywords = {anisotropic,laminate,hybrid}, +number = {November}, +title = {{Fabrication , Testing , and Analysis of Anisotropic Carbon / Glass Hybrid Composites Volume 1 : Technical Report}}, +year = {2006} +} +@article{Ashwill, +author = {Ashwill, Thomas D}, +journal = {Wind Energy}, +title = {{DEVELOPMENTS IN LARGE BLADES}} +} +@article{Sutherlanda, +author = {Sutherland, Herbert J and Mandell, John F}, +journal = {Renewable Energy}, +pages = {1--37}, +title = {{No Title}} +} +@article{Release2004, +author = {Release, Unlimited}, +journal = {System}, +number = {June}, +pages = {3--180}, +title = {{PRINTED JUNE 2004 FLUID FLOW MODELING OF RESIN TRANSFER MOLDING FOR COMPOSITE MATERIAL WIND TURBINE}}, +year = {2004} +} +@article{Street2004, +author = {Street, Market}, +journal = {Analysis}, +number = {May}, +title = {{INNOVATIVE DESIGN APPROACHES FOR LARGE WIND TURBINE BLADES WindPACT Blade System Design Studies}}, +year = {2004} +} +@article{Griffin2004, +author = {Griffin, Dayton A}, +journal = {Design}, +number = {June}, +pages = {3--75}, +title = {{Blade System Design Studies Volume II : Preliminary Blade Designs and Recommended Test Matrix}}, +volume = {II}, +year = {2004} +} +@article{Fitzwater2004, +author = {Fitzwater, Leroy M}, +journal = {Energy}, +number = {January}, +title = {{SANDIA REPORT Estimation Of Fatigue And Extreme Load Distributions From Limited Data With Application To Wind Energy Systems}}, +year = {2004} +} +@article{Composites2003, +author = {Composites, T P I}, +journal = {Power}, +number = {May}, +title = {{Cost Study for Large Wind Turbine Blades : WindPACT Blade System Design Studies}}, +year = {2003} +} +@article{Composites2003a, +author = {Composites, T P I}, +journal = {Design}, +number = {March}, +title = {{Innovative Design Approaches for Large Wind Turbine Blades}}, +year = {2003} +} +@article{Composites2003b, +author = {Composites, T P I}, +journal = {Test}, +number = {May}, +title = {{Blade Manufacturing Improvements Remote Blade Manufacturing Demonstration}}, +year = {2003} +} +@article{Kuraishi2002, +author = {Kuraishi, Akira and Tsai, Stephen W and Wang, Julie}, +journal = {Contract}, +number = {December}, +title = {{Material Characterization of Glass , Carbon , and Hybrid-Fiber SCRIMP Panels}}, +year = {2002} +} +@article{Sherwood2002, +author = {Sherwood, Kent and Investigator, Principal}, +journal = {East}, +number = {October}, +title = {{Blade Manufacturing Improvement Project : Final Report}}, +year = {2002} +} +@article{Release2002, +author = {Release, Unlimited}, +journal = {Transition}, +number = {August}, +title = {{PARAMETRIC STUDY FOR LARGE WIND TURBINE BLADES}}, +year = {2002} +} +@article{Zuteck2002, +author = {Zuteck, Mike}, +journal = {Contract}, +number = {October}, +title = {{Adaptive Blade Concept Assessment : Curved Planform Induced Twist Investigation}}, +year = {2002} +} +@article{Engineering, +author = {Engineering, Aerospace}, +journal = {Aerospace Engineering}, +title = {{Braided gn of a @ Sandia National laboratories}} +} +@article{Report2002, +author = {Report, Sand}, +journal = {Contract}, +number = {August}, +title = {{Evaluation of Design Concepts}}, +year = {2002} +} +@article{Griffin2002, +author = {Griffin, Dayton A}, +journal = {Energy}, +number = {July}, +title = {{Blade System Design Studies Volume I : Composite Technologies for Large Wind Turbine Blades}}, +volume = {I}, +year = {2002} +} +@article{Mandall2002, +author = {Mandall, John F and Samborsky, Daniel D and Cairns, Douglas S}, +journal = {Online}, +number = {March}, +title = {{FATIGUE OF COMPOSITE MATERIALS AND SUBSTRUCTURES FOR WIND TURBINE BLADES}}, +year = {2002} +} +@article{Release2001, +author = {Release, Unlimited and Fitzwater, Leroy M and Winterstein, Steven R}, +journal = {Civil Engineering}, +number = {December}, +title = {{Estimation of Extremes from Limited Time Histories: The Routine MaxFits With Wind Turbine Examples}}, +year = {2001} +} +@article{Mckittrick2001, +author = {Mckittrick, Ladean R and Cairns, Douglas S and Mandell, John and Combs, David C and Rabern, Donald A and Luchene, R Daniel Van}, +journal = {Montana The Magazine Of Western History}, +number = {May}, +title = {{Analysis of a Composite Blade Design for the AOC 15 / 50 Wind Turbine Using a Finite Element Model}}, +year = {2001} +} +@article{Report2001, +author = {Report, Final Project}, +journal = {Online}, +number = {May}, +title = {{Blade Manufacturing Improvements Development of the ERS-100 Blade Final Project Report}}, +year = {2001} +} +@article{Cairns2000, +author = {Cairns, Douglas S and Skramstad, Jon D}, +journal = {Hand, The}, +number = {June}, +title = {{Evaluation of Hand Lay-Up and Resin Transfer Molding in Composite Wind Turbine Blade Manufacturing}}, +year = {2000} +} +@article{Ong, +author = {Ong, Cheng-huat and Tsai, Stephen W}, +journal = {Carbon}, +title = {{THE USE OF CARBON FIBERS IN WIND TURBINE BLADE DESIGN : The Use of Carbon Fibers in Wind Turbine Blade Design : a}} +} +@book{Bowen2004, +author = {Bowen, Anthony J and Mortensen, Niels G}, +booktitle = {Wind Energy}, +isbn = {8755023207}, +number = {December}, +title = {{WAsP prediction errors due to site orography}}, +volume = {995}, +year = {2004} +} +@book{Fuglsang1998, +author = {Fuglsang, Peter and Antoniou, Ioannis and Bak, Christian and Madsen, Helge Aa}, +booktitle = {Test}, +isbn = {8755023290}, +number = {May}, +pages = {1--43}, +title = {{Wind Tunnel Test of the RIS\O-1 Airfoil}}, +volume = {999}, +year = {1998} +} +@book{Fuglsang1998a, +author = {Fuglsang, Peter and Thomsen, Kenneth}, +isbn = {8755023312}, +number = {February}, +title = {{Cost Optimization of Wind Turbines for Large-scale Off-shore Wind Farms}}, +volume = {1000}, +year = {1998} +} +@book{Fuglsang1998b, +author = {Fuglsang, Peter and Antoniou, Ioannis and S\o rensen, Niels N and Madsen, Helge Aa}, +isbn = {8755023002}, +number = {April}, +title = {{Validation of a Wind Tunnel Testing Facility for Blade Surface Pressure Measurements}}, +volume = {981}, +year = {1998} +} +@book{Angelou2010a, +author = {Angelou, Nikolas and Mikkelsen, Torben and Hansen, Kasper H and Sj\"{o}holm, Mikael}, +booktitle = {Contract}, +isbn = {9788755038363}, +number = {August}, +title = {{LIDAR Wind Speed Measurements from a Rotating Spinner : “ SpinnerEx 2009 †Ris\o-R-Report}}, +volume = {1741}, +year = {2010} +} +@book{Lund2010, +author = {Lund, E and Garm, J H}, +booktitle = {Wind Energy}, +isbn = {9788755038257}, +number = {June}, +title = {{Improved design for large wind turbine blades of fibre composites ( Phase 4 ) - Summary report}}, +volume = {1734}, +year = {2010} +} +@book{Data2010, +author = {Data, L T T and Nielsen, Magda and Jensen, Find M and Nielsen, Per H and Martyniuk, Karolina and Roczek, Agnieszka and Sieradzan, Tomasz and Roudnitski, Vatslav and Kucio, Piotr and Bitsche, Robert and Andresen, Peter and Lukassen, Troels and Andrlov\'{a}, Zuzana and Branner, Kim and Bak, Christian and Mcgugan, Malcolm and Knudsen, Henrik and Rasmussen, Anders B and Rasmussen, Jens Jakob and Wedel-heinen, Vestas Jakob and Nielsen, Author Magda and Jensen, Find M and Per, H and Bitsche, Robert and Andresen, Peter and Andrlov\'{a}, Zuzana and Branner, Kim and Kalles\o e, Bjarne and Mcgugan, Malcolm and Lindby, Torben and S\o rensen, Flemming and Jensen, Christian and Knudsen, Henrik and Uldahl, Ulla and Rasmussen, B and Rasmussen, Jens Jakob}, +booktitle = {Contract}, +isbn = {9788755037946}, +number = {January}, +title = {{Ris\o-R-Report}}, +volume = {1718}, +year = {2010} +} +@article{Sørensen2009a, +author = {S\o rensen, B F and Branner, K and Lund, E and S\o rensen, B F and Branner, K and Lund, E}, +isbn = {9788755037618}, +journal = {Wind Energy}, +keywords = {Ris\o National Laboratory for Sustainable Energy 2009}, +number = {June}, +pages = {1--30}, +title = {{Improved design for large wind turbine blades of fibre composites ( Phase 3 ) - Summary report}}, +volume = {1699}, +year = {2009} +} +@article{Lawaetz2009, +author = {Lawaetz, Henrik}, +isbn = {9788755037427}, +keywords = {Marts 2009}, +title = {{Vindm\o ller i en dansk skov}}, +volume = {1687}, +year = {2009} +} +@book{Lemming2008, +author = {Lemming, J\o rgen and Morthorst, Poul Erik and Clausen, Niels-erik and En, Ris\o-r- and Lemming, Author J\o rgen and Morthorst, Poul Erik and Clausen, Niels-erik and Jensen, Peter Hjuler}, +booktitle = {Technology}, +isbn = {9788755037267}, +keywords = {January 2008}, +number = {January}, +title = {{Contribution to the Chapter on Wind Power Energy Technology Perspectives 2008}}, +volume = {1674}, +year = {2008} +} +@book{Bindslev2009, +author = {Bindslev, Henrik}, +isbn = {9788755037588}, +keywords = {Targets and road maps from Workshop on Sustainable Energies, Technical University of Denmark, 14-15 January 2009}, +number = {August}, +pages = {14--15}, +title = {{How ambitious can we be in contributing to the world ’ s energy needs with bioenergy , wind , solar and storage ?}}, +volume = {1697}, +year = {2009} +} +@book{Jensen2008, +author = {Jensen, Find M and Branner, Kim and Nielsen, Per H and Berring, Peter and Antvorskov, Troels S and Nielsen, Magda and Lindahl, Morten and Lund, Brian and Jensen, Christian and Reffs, Joan H and Nielsen, Rune F and Jensen, Peter H and Hansen, Rene S and Laursen, Jeppe H and Klein, Marcus and Stang, Henrik and Wedel-heinen, Jakob}, +booktitle = {Test}, +isbn = {9788755036369}, +number = {March}, +title = {{Full Scale Test of a SSP 34m box girder 1 . Data report}}, +volume = {1622}, +year = {2008} +} +@book{Clausen2008, +author = {Clausen, Niels-erik and Lawaetz, Henrik and Lemming, J\o rgen and Erik, Poul}, +booktitle = {Wind Energy}, +isbn = {9788755036635}, +number = {December}, +title = {{Technologies for production of Electricity and Heat in Sweden Wind Energy – in perspective of international development}}, +year = {2008} +} +@book{Jensen, +author = {Jensen, Find M and Branner, Kim and Nielsen, Per H and Berring, Peter and Antvorskov, Troels S and Nielsen, Magda and Lindahl, Morten and Reffs, Joan H and Jensen, Peter H and Mcgugan, Malcolm}, +booktitle = {Wind Energy}, +isbn = {9788755035744}, +keywords = {Udgivelsesdato f.eks. Januar 2007}, +number = {May 2008}, +title = {{Full Scale Test of a SSP 34m box girder 2 . Data report}}, +volume = {1588} +} +@book{Bertagnolio2006, +author = {Bertagnolio, Franck and S\o rensen, Niels N and Johansen, Jeppe}, +isbn = {8755035639}, +number = {December}, +title = {{Profile Catalogue for Airfoil Sections Based on 3D Computations}}, +volume = {1581}, +year = {2006} +} +@book{Buhl2006, +author = {Buhl, Edited T and Thomsen, K and Risoe, H Markou and Cres, E S Politis}, +booktitle = {Design}, +isbn = {8755035507}, +number = {December}, +title = {{Design guidelines for integrated aeroelastic control of wind turbines – Task-12 Report}}, +volume = {1577}, +year = {2006} +} +@article{Mann2006a, +author = {Mann, Jakob and Broe, Brian Riget}, +isbn = {8755035272}, +number = {July}, +title = {{Conversion of contours to Cartesian grids}}, +volume = {1564}, +year = {2006} +} +@article{Pedersen, +author = {Pedersen, Troels Friis and Dahlberg, Jan-\aa ke and Busche, Peter and Sanz-andres, Angel}, +isbn = {8755035264}, +keywords = {July 2006}, +number = {July 2006}, +title = {{ACCUWIND - Accurate Wind Speed Measurements in Wind Energy Summary Report}}, +volume = {1563} +} +@book{Pedersen2006, +author = {Pedersen, T F and Dahlberg, J and Busche, Peter}, +isbn = {8755035167}, +number = {May}, +title = {{ACCUWIND - Classification of Five Cup Anemometers According to IEC61400-12-1}}, +volume = {1556}, +year = {2006} +} +@book{Dahlberg, +author = {Dahlberg, J and Pedersen, T F and Busche, Peter}, +booktitle = {Methods}, +isbn = {8755035140}, +number = {May 2006}, +title = {{ACCUWIND - Methods for Classification of Cup Anemometers}}, +volume = {1555} +} +@book{Gryning2005, +author = {Gryning, Sven-erik}, +booktitle = {Management Services}, +isbn = {8755034780}, +number = {November}, +title = {{The height of the atmospheric boundary layer during unstable conditions}}, +volume = {1536}, +year = {2005} +} +@article{Johansen2006, +author = {Johansen, Jeppe and S\o rensen, Niels N}, +isbn = {8755034977}, +journal = {Contract}, +keywords = {AERODYNAMICS,MODIFICATIONS,OPTIMIZATION,TURBINE BLADES,WIND TURBINES}, +number = {February}, +title = {{Aerodynamic investigation of Winglets on Wind Turbine Blades using CFD}}, +volume = {1543}, +year = {2006} +} +@book{Sørensen2005, +author = {S\o rensen, Poul and Hansen, Anca D and Thomsen, Kenneth and Morthorst, Poul Erik and Nielsen, Lars Henrik and Iov, Florin and Blaabjerg, Frede and Nielsen, Henrik Aalborg and Madsen, Henrik and Donovan, Martin H and S\o rensen, Author Poul and Hansen, Anca D and Thomsen, Kenneth and Buhl, Thomas and Morthorst, Poul Erik and Nielsen, Lars Henrik and Iov, Florin and Blaabjerg, Frede and Nielsen, Henrik Aalborg and Madsen, Henrik and Donovan, Martin H}, +isbn = {8755034691}, +keywords = {September 2005}, +number = {September}, +title = {{Operation and control of large wind turbines and wind farms - Final report}}, +volume = {1532}, +year = {2005} +} +@article{Frandsen2004, +author = {Frandsen, Sten and Barthelmie, Rebecca and Pryor, Sara and Larsen, S\o ren and H\o jstrup, J\o rgen and Frandsen, Sten and Barthelmie, Rebecca and Pryor, Sara}, +isbn = {8755034470}, +journal = {Wind Energy}, +keywords = {August 2004 +WIND TURBINE ARRAYS,DISTANCE,FLOW MODELS,OFFSHORE SITES,SITE SELECTION,WIND}, +number = {August}, +title = {{The necessary distance between large wind farms offshore - study}}, +volume = {1518}, +year = {2004} +} +@book{Sørensenb, +author = {S\o rensen, Bent F and Branner, Kim and Stang, Henrik and Henrik, M}, +booktitle = {Materials Research}, +isbn = {8755034624}, +keywords = {August 2005}, +number = {August 2005}, +title = {{Improved design of large wind turbine blades of fibre composites ( Phase 2 ) - Summary Report}}, +volume = {1526} +} +@book{Hansen2005, +author = {Hansen, Morten H and Hansen, Anca and Larsen, Torben J and \O ye, Stig and S\o rensen, Poul and Fuglsang, Peter}, +booktitle = {Control}, +isbn = {8755034098}, +number = {January}, +title = {{Control design for a pitch-regulated , vari- able speed wind turbine}}, +volume = {1500}, +year = {2005} +} +@article{Sørensen2005a, +author = {S\o rensen, N N and Johansen, J and Conway, S and Voutsinas, S and Hansen, M O L and St, A}, +journal = {Methods}, +number = {January}, +title = {{KNOW-BLADE Tip Shape Study revised version}}, +volume = {1495}, +year = {2005} +} +@book{Politis2005, +author = {Politis, E S and Nikolaou, I G and Chaviaropoulos, P K}, +booktitle = {Wind Energy}, +isbn = {8755033954}, +number = {January}, +title = {{KNOW-BLADE Task-4 report ; Navier- Stokes Aeroelasticity}}, +volume = {1492}, +year = {2005} +} +@book{Johansen2005, +author = {Johansen, Jeppe and S\o rensen, Niels N and Reck, Mads and Hansen, O L and Stuermer, Arne and Ramboer, Jan and Ekaterinaris, John and Voutsinas, Spyros and Johansen, Jeppe and S\o rensen, Niels N and Reck, Mads and Hansen, O L and Stuermer, Arne and Ramboer, Jan and Hirsch, Charles}, +booktitle = {Contract}, +isbn = {8755033865}, +number = {January}, +title = {{KNOW-BLADE Task-3 . 3 report ; Rotor Blade Computations with 3D Vortex Generators}}, +volume = {1486}, +year = {2005} +} +@book{Johansen2004a, +author = {Johansen, Jeppe and S\o rensen, Niels N and Zahle, Frederik and Nikolaou, Ilias and Politis, Evangelos S and Panagiotis, K and Ekaterinaris, John and Nikolaou, Ilias and Politis, Evangelos S and Panagiotis, K}, +booktitle = {October}, +isbn = {8755033792}, +number = {October}, +title = {{KNOW-BLADE Task-2 report ; Aerodynamic Accessories}}, +volume = {1482}, +year = {2004} +} +@article{Gaunaa2006, +author = {Gaunaa, Mac}, +number = {July}, +title = {{Unsteady 2D Potential-flow Forces on a Thin Variable Geometry Airfoil Undergoing Arbitrary Motion}}, +volume = {1478}, +year = {2006} +} +@book{Pryor2004, +author = {Pryor, S C and Barthelmie, R J}, +booktitle = {Wind Energy}, +isbn = {8755033687}, +keywords = {Climate change, wind energy, near-surface flow, Regional Climate Model}, +number = {August}, +title = {{Use of RCM simulations to assess the impact of climate change on wind energy availability}}, +volume = {1477}, +year = {2004} +} +@book{Krogh2004, +author = {Krogh, Thomas}, +booktitle = {Offshore (Conroe, TX)}, +isbn = {8755033644}, +number = {June}, +title = {{HAWC Load Simulation of Generic 5MW Offshore Wind Turbine Model}}, +volume = {1475}, +year = {2004} +} +@book{Larsen2004, +author = {Larsen, Gunner C and Hansen, Kurt S}, +booktitle = {Management Services}, +isbn = {8755033598}, +keywords = {DATA ANALYSIS,FATIGUE,GUSTS,IMPACT STRENGTH,INFORMATION SYSTEMS,SHEAR,STORMS,TIME-SERIES ANALYSIS,TURBULENCE,VELOCITY,WIND,WIND LOADS,WIND TURBINES}, +number = {June}, +title = {{Database on Wind Characteristics Analyses of Wind Turbine Design Loads}}, +volume = {1473}, +year = {2004} +} +@book{Sørensen2005b, +author = {S\o rensen, Poul and Hansen, Anca D and Iov, Florin and Blaabjerg, Frede and Donovan, Martin H and S\o rensen, Poul and Hansen, Anca D and Iov, Florin and Blaabjerg, Frede and Donovan, Martin H}, +isbn = {8755033229}, +keywords = {August 2005,Ris\o-R-1464(EN)}, +number = {August}, +title = {{Wind farm models and control strategies}}, +volume = {1464}, +year = {2005} +} +@article{Rathmann2004, +author = {Rathmann, Ole and N\o rg\aa rd, Per and Frandsen, Sten}, +isbn = {8755032966}, +keywords = {CZECH REPUBLIC,DENMARK,RESOURCE ASSESSMENT,TECHNOLOGY TRANSFER,WIND POWER}, +number = {June}, +title = {{Danish-Czech Wind Resource Know- how Transfer Project Final Report}}, +volume = {1447}, +year = {2004} +} +@book{Deliverable2004, +author = {Deliverable, D}, +isbn = {8755032907}, +number = {June}, +title = {{Fluctuations and predictability of wind and hydropower Fluctuations and predictability of wind and hydropower}}, +volume = {1443}, +year = {2004} +} +@book{Pedersen2003, +author = {Pedersen, Henrik Broen and Jesper, Ole and Kristensen, Dahl}, +isbn = {8755031692}, +number = {February}, +title = {{Applied Modal Analysis of Wind Turbine Blades}}, +volume = {1388}, +year = {2003} +} +@book{Clausen2004, +author = {Clausen, Niels-erik and Mortensen, Niels G and Carsten, Jens and Clausager, Ib and Jensen, Flemming Pagh and Said, Usama Said}, +booktitle = {Environmental Research}, +isbn = {8755031676}, +number = {November}, +title = {{Wind Farm Planning at the Gulf of Suez}}, +volume = {1387}, +year = {2004} +} +@article{Sørensen2002, +author = {S\o rensen, Niels N}, +isbn = {8755031412}, +number = {November}, +title = {{3D Background Aerodynamics using CFD}}, +volume = {1376}, +year = {2002} +} +@book{Pedersen2004, +author = {Pedersen, Troels Friis}, +isbn = {8755033199}, +keywords = {ANEMOMETERS,CALIBRATION,CLASSIFICATION,PERFORMANCE TESTING,SPECIFICATIONS}, +number = {March}, +title = {{Characterisation and Classification of RIS\O P2546 Cup Anemometer Ris\o National Laboratory , Roskilde}}, +volume = {1364}, +year = {2004} +} +@book{Fuglsang2002, +author = {Fuglsang, Peter and Sangill, Ole and Norwin, A S and Hansen, Peter and S, L M Glasfiber A}, +booktitle = {Power}, +isbn = {8755031374}, +number = {December}, +pages = {1--58}, +title = {{Design of a 21 m Blade with Ris\o-A1 Airfoils for Active Stall Controlled Wind Turbines}}, +volume = {1374}, +year = {2002} +} +@article{Mann2002, +author = {Mann, Jakob and Ott, S\o ren and J\o rgensen, Bo Hoffmann and Frank, P}, +journal = {Engineering}, +number = {August}, +title = {{WAsP Engineering 2000}}, +volume = {1356}, +year = {2002} +} +@article{Johansen2002, +author = {Johansen, Jeppe and S\o rensen, Niels N}, +isbn = {8755030874}, +number = {August}, +title = {{Numerical Investigation of Three Wind Turbine Blade Tips}}, +volume = {1353}, +year = {2002} +} +@article{Baumgart2002, +author = {Baumgart, Andreas and Larsen, Gunner C and Eds, Morten H Hansen}, +journal = {Word Journal Of The International Linguistic Association}, +number = {February}, +title = {{Models for Wind Turbines – a Collection}}, +volume = {1352}, +year = {2002} +} +@article{Ott2002, +author = {Ott, S}, +journal = {Simulation}, +number = {May}, +title = {{in Gas Releases by Industrial Accidents Final Report}}, +volume = {1329}, +year = {2002} +} +@article{Kristensen2002, +author = {Kristensen, Leif and Hansen, Ole Frost}, +journal = {Management Services}, +number = {April}, +title = {{Distance Constant of the Ris\o Cup Anemometer}}, +volume = {1320}, +year = {2002} +} +@book{Larsen2001, +author = {Larsen, Gunner C and Hansen, Kurt S}, +booktitle = {Management Services}, +isbn = {8755029647}, +number = {November}, +title = {{Database on Wind Characteristics Contents of Database Bank}}, +volume = {1301}, +year = {2001} +} +@book{Larsen2001a, +author = {Larsen, Gunner C and Hansen, Kurt S}, +booktitle = {Structure}, +isbn = {8755029604}, +number = {November}, +title = {{Database on Wind Characteristics Structure and Philosophy}}, +volume = {1299}, +year = {2001} +} +@book{Larsen2001b, +author = {Larsen, Gunner C and Hansen, Kurt S}, +booktitle = {Management Services}, +isbn = {8755029620}, +number = {November}, +title = {{Database on Wind Characteristics Users Manual}}, +volume = {1300}, +year = {2001} +} +@book{Hasager2002, +author = {Hasager, Charlotte Bay and Astrup, Poul and Barthelmie, Rebecca and Dellwik, Ebba and J\o rgensen, Bo Hoffmann and Gylling, Niels and Nielsen, Morten and Pryor, Sara and Rathmann, Ole}, +booktitle = {Processing}, +isbn = {8755029590}, +number = {May}, +title = {{Validation of Satellite SAR Offshore Wind Speed Maps to In-Situ Data , Microscale and Mesoscale Model Results}}, +volume = {1298}, +year = {2002} +} +@article{Larsen2001c, +author = {Larsen, Torben J}, +number = {September}, +title = {{Description of the DLL Regulation Interface in HAWC}}, +volume = {1290}, +year = {2001} +} +@book{Sørensen2001, +author = {S\o rensen, Poul and Hansen, Anca and Janosi, Lorand and Bech, John and Bak-jensen, Birgitte}, +isbn = {8755029124}, +number = {December}, +title = {{Simulation of Interaction between Wind Farm and Power System}}, +volume = {1281}, +year = {2001} +} +@book{Lange2001, +author = {Lange, Bernhard and Barthelmie, Rebecca and H\o jstrup, J\o rgen}, +booktitle = {Control}, +isbn = {8755028853}, +number = {May}, +title = {{Description of the R\o dsand field measurement}}, +volume = {1268}, +year = {2001} +} +@book{Clausen2001, +author = {Clausen, Niels-erik and Bindner, Henrik and Frandsen, Sten and Hansen, Jens Carsten and Hansen, Lars Henrik and Lundsager, Per}, +isbn = {8755028608}, +number = {June}, +title = {{Isolated Systems with Wind Power An Implementation Guideline}}, +volume = {1257}, +year = {2001} +} +@book{Lundsager2001, +author = {Lundsager, Per and Bindner, Henrik and Clausen, Niels-erik and Hansen, Lars Henrik and Hansen, Jens Carsten}, +isbn = {8755028586}, +number = {June}, +title = {{Isolated Systems with Wind Power Main Report}}, +volume = {1256}, +year = {2001} +} +@book{Frank2001, +author = {Frank, Helmut P and Rathmann, Ole and Mortensen, Niels G}, +isbn = {8755029094}, +number = {June}, +title = {{the KAMM / W AsP Method}}, +volume = {1252}, +year = {2001} +} +@book{Risø2001, +author = {Ris\o, Henrik Bindner and Saleh, Laila and Hafiez, Salah Abdel and Nrea, Sayed Mansour}, +isbn = {8755028225}, +number = {June}, +title = {{Isolated Systems with Wind Power Results of Measurements in Egypt}}, +volume = {1240}, +year = {2001} +} +@article{Frank2001a, +author = {Frank, Helmut P}, +journal = {Wind Energy}, +number = {May}, +title = {{Extreme Winds over Denmark from the NCEP / NCAR Reanalysis}}, +volume = {1238}, +year = {2001} +} +@book{Larsen2001d, +author = {Larsen, S\o ren E and Skrumsager, Birthe}, +booktitle = {Wind Energy}, +isbn = {8755028004}, +number = {May}, +title = {{Annual Progress Report for 2000 Wind Energy and Atmospheric Physics Department}}, +volume = {1231}, +year = {2001} +} +@book{Hansen2000, +author = {Hansen, Anca D and S\o rensen, Poul and Hansen, Lars H}, +isbn = {8755027741}, +number = {December}, +title = {{Models for a Stand-Alone PV System}}, +volume = {1219}, +year = {2000} +} +@article{Kristensen2001, +author = {Kristensen, Leif and Jensen, Gunnar and Hansen, Arent and Kirkegaard, Peter}, +number = {January}, +title = {{Field Calibration of Cup Anemome- ters}}, +volume = {1218}, +year = {2001} +} +@article{Ott2002a, +author = {Ott, S\o ren and J\o rgensen, Hans E}, +journal = {Environment}, +number = {May}, +title = {{Meteorology and lidar data from the URAHFREP field trials}}, +volume = {1212}, +year = {2002} +} +@book{Lee, +author = {Lee, Wai Kong}, +booktitle = {Measurement}, +isbn = {8755027520}, +number = {January 2001}, +pages = {1--120}, +title = {{European Wind Turbine Testing Procedure Developments Task 1 : Measurement Method to Verify Wind Turbine Performance Character- istics Task coordinator}}, +volume = {1209} +} +@book{Hansen2001a, +author = {Hansen, L H and Helle, L and Blaabjerg, F and Ritchie, E and Bindner, H and S\o rensen, P}, +booktitle = {Design}, +isbn = {8755027431}, +number = {December}, +title = {{Conceptual survey of Generators and Power Electronics for Wind Turbines}}, +volume = {1205}, +year = {2001} +} +@book{Pereira2000, +author = {Pereira, Alexandre De Lemos}, +isbn = {8755027369}, +number = {June}, +title = {{Modular supervisory controller for hybrid power systems}}, +volume = {1202}, +year = {2000} +} +@book{Kozine2000, +author = {Kozine, Igor and Christensen, Palle and Winther-jensen, Martin}, +booktitle = {System}, +isbn = {8755027326}, +number = {January}, +title = {{Failure Database and Tools for Wind Turbine Availability and Reliability Analyses Wind Turbines}}, +volume = {1200}, +year = {2000} +} +@book{Bak2000, +author = {Bak, Christian and Fuglsang, Peter and Johansen, Jeppe}, +isbn = {8755027164}, +number = {December}, +title = {{Wind Tunnel Tests of the NACA 63-415 and a Modified NACA 63-415 Airfoil}}, +volume = {1193}, +year = {2000} +} +@article{Larsen2002, +author = {Larsen, Gunner C and Hansen, Morten H and Carl, Ingemar}, +journal = {Modal Analysis}, +number = {February}, +title = {{Modal Analysis of Wind Turbine Blades}}, +volume = {1181}, +year = {2002} +} +@article{Giebel2000, +author = {Giebel, Gregor}, +isbn = {8755026982}, +number = {May}, +title = {{Equalizing Effects of the Wind Energy Production in Northern Europe Determined from Reanalysis Data}}, +volume = {1182}, +year = {2000} +} +@article{Mann2000, +author = {Mann, Jakob and Astrup, Poul and Kristensen, Leif and Rathmann, Ole and Madsen, Peter Hauge and Heathfield, Duncan}, +number = {May}, +title = {{WAsP Engineering DK}}, +volume = {1179}, +year = {2000} +} +@book{Sørensen2000, +author = {S\o rensen, Poul and Madsen, Peter Hauge and Vikkels\o, Anders and Jensen, K K\o lb\ae k and Fathima, K A and Unnikrishnan, A K and Dci, T}, +booktitle = {Measurement}, +isbn = {8755026761}, +number = {April}, +title = {{Power Quality and Integration of Wind Farms in Weak Grids in India}}, +volume = {1172}, +year = {2000} +} +@book{Graziani2000, +author = {Graziani, Giovanni and Galmarini, Stefano and Ispra, J R C}, +isbn = {8755026826}, +number = {January}, +title = {{RTMOD : Real-Time MODel Evaluation}}, +volume = {1174}, +year = {2000} +} +@book{Larsen2000, +author = {Larsen, S\o ren E and Skrumsager, Birthe}, +booktitle = {Wind Energy}, +isbn = {8755026575}, +number = {June}, +title = {{Annual Progress Report for 1999 Wind Energy and Atmospheric Physics Department}}, +volume = {1161}, +year = {2000} +} +@article{Kristensen1999, +author = {Kristensen, Leif and Jensen, Gunnar}, +journal = {Analysis}, +keywords = {ATMOSPHERIC PRESSURE,BAROMETERS,DENMARK,DRAG,GEODESY,VELOCITY,WIND}, +number = {November}, +title = {{in Denmark : a preliminary study}}, +volume = {1145}, +year = {1999} +} +@article{Ed1999, +author = {Ed, Henrik Bindner}, +isbn = {8755025463}, +number = {March}, +title = {{Power Control for Wind Turbines in Weak Grids : Project summary}}, +volume = {1117}, +year = {1999} +} +@article{Hans1999, +author = {Hans, E J and Nielsen, Morten}, +journal = {Transformation}, +number = {June}, +title = {{Lidar data used in the COFIN project}}, +volume = {1127}, +year = {1999} +} +@book{Bindner1999, +author = {Bindner, Henrik}, +booktitle = {Control}, +isbn = {8755025501}, +number = {March}, +title = {{Power Control for Wind Tur- bines in Weak Grids : Concepts Development}}, +volume = {1118}, +year = {1999} +} +@article{Johansen1999, +author = {Johansen, Jeppe}, +journal = {October}, +number = {October}, +title = {{Unsteady Airfoil Flows with Application to Aeroelastic Stability}}, +volume = {1116}, +year = {1999} +} +@book{Airfoils1999, +author = {Airfoils, Ris\o-a- and Fuglsang, Peter and Dahl, Kristian S and Antoniou, Ioannis and Morbech, Kaj and Slot, Mark}, +isbn = {8755025382}, +number = {June}, +pages = {1--102}, +title = {{FINAL}}, +volume = {1112}, +year = {1999} +} +@book{Larsen1999, +author = {Larsen, Gunner Chr and Ronold, Knut and J\o rgensen, Hans E}, +isbn = {8755025366}, +number = {April}, +title = {{Ultimate Loading of Wind Turbines}}, +volume = {1111}, +year = {1999} +} +@book{Sørensen2001a, +author = {S\o rensen, Poul and Koulouvari, Maria and Larsson, \AA ke}, +booktitle = {Power Quality}, +isbn = {8755024947}, +number = {May}, +title = {{European Wind Turbine Testing Procedure Developments Task 2 : Power Quality Task coordinator Project coordinator Ris\o National Laboratory , Roskilde}}, +volume = {1093}, +year = {2001} +} +@article{Kristensen1999a, +author = {Kristensen, Leif and Rathmann, Ole and Hansen, Svend Ole}, +journal = {Analysis}, +number = {February}, +title = {{Extreme Winds in Denmark}}, +year = {1999} +} +@article{Dp, +author = {Dp, Uddp Y D Q}, +isbn = {8755024653}, +title = {{0HWKRGV IRU 3UREDELOLVWLF ' HVLJQ RI : LQG 7XUELQHV}}, +volume = {5} +} +@book{Bak1999, +author = {Bak, Christian and Fuglsang, Peter and S\o rensen, Niels N and Shen, Wen Zhong and S\o rensen, Jens N\o rk\ae r}, +isbn = {8755024157}, +number = {March}, +title = {{Airfoil Characteristics for Wind Turbines}}, +volume = {1065}, +year = {1999} +} +@article{Aaa, +author = {\'{A}\^{a}\~{a}, \~{A} \AA \AE \"{A} \~{A} \"{A}}, +title = {{No Title}} +} +@book{Bak1998, +author = {Bak, Christian and Madsen, Helge Aagaard and Fuglsang, Peter and Rasmussen, Flemming}, +isbn = {8755023797}, +number = {June}, +title = {{Double Stall}}, +volume = {1043}, +year = {1998} +} +@book{Fuglsang1998c, +author = {Fuglsang, Peter and Antoniou, Ioannis and Dahl, Kristian S and Madsen, Helge Aa}, +isbn = {8755023770}, +number = {December}, +title = {{Wind Tunnel Tests of the FFA-W3-241 , FFA-W3-301 and NACA 63-430 Airfoils}}, +volume = {1041}, +year = {1998} +} +@article{Mann1999, +author = {Mann, Jakob and Ott, S\o ren and Andersen, Jacob Sparre}, +journal = {Design}, +number = {September}, +title = {{Experimental Study of Relative , Turbulent Diffusion}}, +volume = {1036}, +year = {1999} +} +@article{Search2008, +author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Conf, I O P and Environ, Earth and Address, I P}, +doi = {10.1088/1755-1307/1/1/012059}, +journal = {Science}, +title = {{Remote sensing used for power curves}}, +volume = {012059}, +year = {2008} +} +@book{Rethore2009, +author = {R\'{e}thor\'{e}, Pierre-elouan}, +booktitle = {October}, +isbn = {9788755037854}, +keywords = {AAU-DCE thesis no. 22}, +number = {22}, +title = {{Wind Turbine Wake in Atmospheric Turbulence Ris\o-PhD-Report}}, +volume = {53}, +year = {2009} +} +@book{Jensen2008a, +author = {Jensen, Find M\o lholt}, +isbn = {9788755036345}, +number = {May}, +title = {{Ultimate strength of a large wind turbine blade}}, +volume = {34}, +year = {2008} +} +@article{Pedersena, +author = {Pedersen, Troels F}, +title = {{No Title}} +} +@article{Verelst2010, +author = {Verelst, Author David R S and Larsen, Torben J}, +isbn = {9788755038059}, +keywords = {Wind Energy Division, August 2010}, +number = {August}, +title = {{Load Consequences when Sweeping Blades - A Case Study of a 5 MW Pitch Controlled Wind Turbine Ris\o-R-Report}}, +volume = {1724}, +year = {2010} +} +@book{Rozenn2010, +author = {Rozenn, Wagner and Michael, Courtney S and Torben, Larsen J and Uwe, Paulsen S and Rozenn, Author Wagner and Michael, Courtney S and Torben, Larsen J and Uwe, Paulsen S}, +booktitle = {Wind Energy}, +isbn = {9788755038011}, +number = {January}, +title = {{Simulation of shear and turbulence impact on wind turbine performance Ris\o-R-Report}}, +volume = {1722}, +year = {2010} +} +@book{Hasager2009, +author = {Hasager, Charlotte and Pe\~{n}a, Alfredo and Mikkelsen, Torben and Courtney, Mike and S\o rensen, Paul B and Hasager, Charlotte and Pe\~{n}a, Alfredo and Mikkelsen, Torben and Gryning, Erik and Courtney, Mike and S\o rensen, Paul B}, +booktitle = {October}, +isbn = {9788755037465}, +keywords = {June 2009,Ris\o Naitonal Laboratory for Sustainable Eenrgy}, +number = {June}, +title = {{12MW : final report Ris\o-R-Report}}, +volume = {1690}, +year = {2009} +} +@book{Wagner2009a, +author = {Wagner, Rozenn and Courtney, Michael and Wagner, Author Rozenn and Courtney, Michael}, +isbn = {9788755037328}, +keywords = {February 2009}, +number = {February}, +title = {{Multi-MW wind turbine power curve measurements using remote sensing instruments – the first H\o vs\o re campaign Ris\o-R-Report}}, +volume = {1679}, +year = {2009} +} +@article{Lemming2008a, +author = {Lemming, J\o rgen and Morthorst, Poul Erik and Clausen, Niels-erik and En, Ris\o-r- and Morthorst, Poul Erik and Clausen, Niels-erik}, +isbn = {9788755037250}, +journal = {Power}, +keywords = {January 2008}, +number = {January}, +title = {{Offshore Wind Power Experiences , Potential and Key Issues for Deployment}}, +volume = {1673}, +year = {2008} +} +@book{Andersen2010, +author = {Andersen, Peter Bj\o rn}, +booktitle = {Wind Energy}, +isbn = {9788755038240}, +keywords = {February 2010}, +number = {February}, +title = {{Advanced Load Alleviation for Wind Turbines using Adaptive Trailing Edge Flaps : Sensoring and Control Ris\o-PhD-Report}}, +volume = {61}, +year = {2010} +} +@book{Pedersen2002, +author = {Pedersen, Troels Friis and Ingham, Peter and J\o rgensen, Henrik Kanstrup}, +isbn = {8755030289}, +number = {April}, +title = {{Wind Turbine Power Performance Verification in Complex Terrain and Wind Farms Ris\o National Laboratory , Roskilde}}, +volume = {1330}, +year = {2002} +} +@book{Wagner2010, +author = {Wagner, Rozenn}, +booktitle = {Network}, +isbn = {9788755038165}, +number = {April}, +title = {{turbine power performance measurement Ris\o-PhD-Report}}, +volume = {58}, +year = {2010} +} +@book{Rethore2009a, +author = {R\'{e}thor\'{e}, Pierre-elouan}, +booktitle = {October}, +isbn = {9788755037854}, +keywords = {AAU-DCE thesis no. 22}, +number = {22}, +title = {{Wind Turbine Wake in Atmospheric Turbulence Ris\o-PhD-Report}}, +volume = {53}, +year = {2009} +} +@book{Bingol2009, +author = {Bing\"{o}l, Ferhat}, +isbn = {9788755037755}, +keywords = {Wind Energy Division, Ris\o National Laboratory for Sustainable Energy}, +number = {August}, +title = {{Ris\o-PhD-Report}}, +volume = {52}, +year = {2009} +} +@book{Broe2009, +author = {Broe, Brian Riget}, +booktitle = {Energy}, +isbn = {9788755037274}, +keywords = {December 2009,Ris\o National Laboratory for Sustainable Energy}, +title = {{Wind Turbines : Unsteady Aerodynamics and Inflow Noise Ris\o-PhD-Report}}, +volume = {47}, +year = {2009} +} +@book{Jensen2008b, +author = {Jensen, Find M\o lholt}, +isbn = {9788755036345}, +number = {May}, +title = {{Ultimate strength of a large wind turbine blade}}, +volume = {34}, +year = {2008} +} +@book{Christensen1986, +author = {Christensen, C J and Dragt, J B and Carlson, O and Derdelinkx, I R and Hunter, R and Infield, D and Lodge, M A and Meel, J Van and Lysen, E and Kieft, K and Molly, J P and Paulsen, U S}, +booktitle = {Communities}, +isbn = {8755013074}, +number = {November}, +title = {{Accuracy of Power Curve Measurements}}, +year = {1986} +} +@article{Rethore2010, +author = {R\'{e}thor\'{e}, P and S\o rensen, N N and Zahle, F}, +journal = {Wind Energy}, +number = {April}, +pages = {4000}, +title = {{Validation of an Actuator Disc Model}}, +year = {2010} +} +@article{Rathmann, +author = {Rathmann, Ole and Frandsen, Sten and Nielsen, Morten}, +pages = {1--16}, +title = {{Wake decay for the infinite wind turbine array}} +} +@article{Castellani, +author = {Castellani, Francesco and Faina, Nicola and Franceschini, Giordano}, +journal = {Wind Energy}, +keywords = {annual energy production,power curve,turbine operation}, +title = {{: annual energy production, power curve, turbine operation. S}} +} +@article{Devices2005, +author = {Devices, Monitoring}, +journal = {Wind Energy}, +title = {{Rules and Guidelines Industrial Services Guideline for the Certification of Offshore Wind Turbines Safety System , Protective and Monitoring Devices}}, +year = {2005} +} +@article{Johansen2009b, +author = {Johansen, Nick A and Frandsen, Sten T and Hansen, Barthelmie Kurt S and Jensen, Leo E and Kristoffersen, R}, +journal = {Wind Energy}, +pages = {1--10}, +title = {{Systematic wind farm measurement data reinforcement tool for wake model calibration .}}, +year = {2009} +} +@book{Troldborg2008a, +author = {Troldborg, Niels}, +isbn = {9788789502809}, +title = {{Actuator Line Modeling of Wind Turbine Wakes by}}, +year = {2008} +} + +@article{Barthelmie2010, +author = {Barthelmie, R J and Dtu, Ris\o}, +journal = {Wind Energy}, +number = {April}, +pages = {828655}, +title = {{Universal benchmarks for wind turbine wake and wind farm models Abstract The Virtual Wakes Laboratory Types of wake data Benchmarks for single wakes Access Benchmarks for multiple wakes Exercise variables}}, +year = {2010} +} +@article{Gilling2008, +author = {Gilling, Lasse}, +journal = {Methods}, +keywords = {actuator,airfoil,detached eddy simulation,forcing,freestream resolved turbulence}, +pages = {1--9}, +title = {{Imposing Resolved Turbulence by an Actuator in a Detached Eddy Simulation of an Airfoil}}, +year = {2008} +} +@article{Bechmann, +author = {Bechmann, Andreas and Zhale, Frederik}, +journal = {Wind Energy}, +pages = {1--9}, +title = {{Study of the atmospheric wake turbulence of a CFD actuator disc model}} +} +@article{Nielsen2009, +author = {Nielsen, Morten and J\o rgensen, Hans E and Frandsen, Sten T}, +journal = {Wind Energy}, +title = {{Wind and wake models for IEC 61400-1 site assessment}}, +year = {2009} +} +@article{Ott, +author = {Ott, S\o ren and Sogachev, Andrey and Mann, Jakob and J\o rgensen, Hans E and Frandsen, Sten T}, +journal = {Wind Energy}, +title = {{Applying Flow Models of Different Complexity for Estimation of Turbine Wakes .}} +} +@article{Rethorea, +author = {R\'{e}thor\'{e}, Pierre-elouan and Zahle, Frederik and S\o rensen, Niels N}, +title = {{Comparison of an actuator disc model with a full Rotor CFD model under uniform and shear inflow condition Comparison p of an Actuator Disc model with a Full rotor computation}} +} +@article{Farm1995, +author = {Farm, Wind}, +journal = {Wind Energy}, +title = {6 0 6\&}, +year = {1995} +} +@article{Prowell2009, +author = {Prowell, Ian and Veers, Paul}, +journal = {Power}, +number = {March}, +title = {{Assessment of Wind Turbine Seismic Risk : Existing Literature and Simple Study of Tower Moment Demand}}, +year = {2009} +} +@article{Wahl, +author = {Wahl, David}, +journal = {Energy}, +title = {{Ice Shedding and Ice Throw – Risk and Mitigation}} +} +@article{Iv1998, +author = {Iv, Boreas}, +journal = {Boreas}, +number = {April}, +pages = {113--121}, +title = {{BOREAS IV 31 March - 2 April 1998, Hetta, Finland 113}}, +year = {1998} +} +@article{Coursea, +author = {Course, Learning}, +journal = {Renewable Energy}, +title = {{Insurance Risk Management for Renewable Energy Projects Module 3 – Underwriting Guidelines and Policy}} +} +@article{Inf2006, +author = {Inf, Dipl and Albrecht, Carsten and Gmbh, Al-pro and Kg, Co and Gro\ss heide, D-}, +journal = {World}, +pages = {1--5}, +title = {{FLUCTUATIONS IN ANNUAL WIND ENERGY POTENTIAL A METHOD FOR RISK ANALYSIS AND LONG TERM CORRELATION}}, +year = {2006} +} +@article{Courseb, +author = {Course, Learning}, +journal = {Renewable Energy}, +title = {{Insurance Risk Management for Renewable Energy Projects Module 6 – Case Study Risk Assessment for a 100 . 5 MW Wind Farm in Jilin Province , China Overview}} +} +@article{Abdelli2007, +author = {Abdelli, Abdenour}, +journal = {System}, +keywords = {Cha\^{\i}ne \'{e}olienne de petite puissance - Approche syst\`{e}me - Optimisation - Algorithmes g\'{e}n\'{e}tiques - Mod\`{e}les moyens - Sensibilit\'{e} - Profil du vent - Robustesse. KEYWORDS : Small Wind Turbine - System Approach - Optimization - Genetic Algorithms - Sensitivity}, +title = {{Abdenour ABDELLI Optimisation multicrit\`{e}re d ’ une cha\^{\i}ne \'{e}olienne passive Remerciements}}, +year = {2007} +} +@article{Notesc, +author = {Notes, Technical}, +journal = {Power}, +title = {{PicoTurbine Windmill Plans and Experiments}} +} +@article{Mirecki2005, +author = {Mirecki, Adam}, +journal = {Recherche}, +keywords = {Eolien – MPPT – Mod\'{e}lisation - Gestion d’\'{e}nergie – Architecture}, +title = {{Etude comparative de cha\^{\i}nes de conversion d’\'{e}nergie d\'{e}di\'{e}es \`{a} une \'{e}olienne de petite puissance}}, +year = {2005} +} +@article{De2007, +author = {De, L E Titre D E Docteur}, +keywords = {Macrosimulation OES - Turbulence - Instationnarit\'{e} forc\'{e}e - D\'{e}collement - Eolienne - +Mod\'{e}lisation hybride - Cylindre - Corps de Ahmed - Profil d'aile. KEYWORDS : Macrosimulation OES - Turbulence - Forced unsteadyness - Detachment - Wind +turbine - Hybrid}, +title = {{Analyse physique et mod\'{e}lisation d ’ \'{e}coulements instationnaires turbulents autour de profils oscillants et d ’ \'{e}oliennes}}, +year = {2007} +} +@article{Akoury2007, +author = {Akoury, Rajaa El}, +keywords = {Rotation – Turbulence – P.O.D. – Macrosimulation OES – Analyse num\'{e}rique – Mod\'{e}lisation – A\'{e}ronautique – Machines tournantes}, +title = {{Analyse physique des effets de rotation de paroi en \'{e}coulements transitionnels et mod\'{e}lisation d'\'{e}coulements turbulents autour de structures portantes}}, +year = {2007} +} +@article{Lindholm, +author = {Lindholm, Morten}, +title = {{Doubly Fed Drives for Variable Speed Wind Turbines}} +} +@article{Cehlin2009, +author = {Cehlin, Mathias and Mechanics, Fluid}, +title = {{CFD applications at Vattenfall R \& D}}, +year = {2009} +} +@article{Olsen2004, +author = {Olsen, T and Lang, E and Hansen, A C and Cheney, M C and Quandt, G and Vandenbosche, J and Meyer, T and Renewable, National}, +journal = {Baseline}, +number = {December}, +title = {{Low Wind Speed Turbine Project Conceptual Design Study : Advanced Independent Pitch Control Low Wind Speed Turbine Project Conceptual Design Study : Advanced Independent Pitch Control}}, +year = {2004} +} +@article{Systems2008, +author = {Systems, Northern Power}, +isbn = {3033847102}, +journal = {Renewable Energy}, +number = {March 2006}, +pages = {102006}, +title = {{Low Wind Speed Technology Phase II : Development of a 2-MW Direct-Drive Wind Turbine for Low Wind Speed Sites}}, +year = {2008} +} +@article{Technology2006, +author = {Technology, Clipper Windpower}, +isbn = {8056903275}, +journal = {Renewable Energy}, +number = {March}, +pages = {102006}, +title = {{Low Wind Speed Technology Phase I : Clipper Turbine Development Project}}, +year = {2006} +} +@article{Shoufan1985, +author = {Shoufan, Gao and Jianguo, Yin}, +journal = {Irrigation and Drainage}, +number = {1}, +pages = {374--380}, +title = {{Bibliographie}}, +volume = {9}, +year = {1985} +} +@article{Monde, +author = {Monde, Tiers}, +title = {{Energie solaire}} +} +@article{Vert1900, +author = {Vert, Cap}, +title = {{ENERGIE EOLIENNE}}, +year = {1900} +} +@article{Gpl1979, +author = {Gpl, Le}, +title = {{Moteurs a combustion interne}}, +year = {1979} +} +@article{Mondiale1986, +author = {Mondiale, Banque}, +pages = {214--222}, +title = {{Energie electrique}}, +year = {1986} +} +@article{Machines, +author = {Machines, L E S and En, Motrice and Qu, Tant and Une, Element D and Pompage, Installation D E}, +pages = {157--168}, +title = {{Chapitre 4 Alimentation en \'{e}nergie des installations de pompage}} +} +@article{Project, +author = {Project, Water Buffalo and Persane, Roue and Indes, Aux}, +pages = {184--192}, +title = {{Force motrice animale}} +} +@article{De, +author = {De, Pompes}, +pages = {111--137}, +title = {{POMPES ROTO-DYNAMIQUES}} +} +@article{Elevation, +author = {Elevation, Principes D and Ecoulement, E T D and Eaux, D E S}, +title = {{Chapitre 3 Rappel des types de pompes et des techniques d ' \'{e}l\'{e}vation de l ' eau}} +} +@article{Humphrey, +author = {Humphrey, Pompe}, +title = {{Pompes volumetriques rotatives}} +} +@article{Generaux, +author = {Generaux, Principes and Eau, D Elevation D E L}, +journal = {Techniques}, +title = {{Chapitre 2 Techniques d ' \'{e}l\'{e}vation de l ' eau pour l ' irrigation}} +} +@article{Fraenkel, +author = {Fraenkel, P L and Technology, Intermediate}, +isbn = {9252025154}, +journal = {Reading}, +title = {{ii BULLETIN FAO D ' IRRIGATION ET DE DRAINAGE 43 Les machines \'{e}l\'{e}vatoires Organisation des Nations Unies pour l ' alimentation et l ' agriculture Rome ,}} +} +@article{Et1956, +author = {Et, L Objet and Portee, L A and Bulletin, D E C E and Irrigation, L Importance Accrue D E L}, +pages = {1--5}, +title = {{Chapitre 1 Introduction L ' OBJET ET LA PORTEE DE CE BULLETIN L ' IMPORTANCE ACCRUE DE L ' IRRIGATION L ' IRRIGATION ET LA CRISE DE L ' ENERGIE}}, +year = {1956} +} +@article{Calculation, +author = {Calculation, Data and Windpump, O F and Using, Output and Wind, Windspeed and Total, Annual}, +pages = {238--259}, +title = {{Windpump Performance Estimation}}, +volume = {130} +} +@article{Per, +author = {Per, Power and Area, Unit and Wind, O F}, +pages = {212--227}, +title = {{Principles of Wind Energy Conversion}} +} + + + +@book{Hansen2001b, +author = {Hansen, L H and Helle, L and Blaabjerg, F and Ritchie, E and Bindner, H and S\o rensen, P}, +booktitle = {Design}, +isbn = {8755027431}, +number = {December}, +title = {{Conceptual survey of Generators and Power Electronics for Wind Turbines}}, +volume = {1205}, +year = {2001} +} +@article{The1900, +author = {The, Background and Verde, Cape and American, The and American, North and Plains, Great and Us, The}, +pages = {199--211}, +title = {199 4.7}, +year = {1900} +} +@article{Report2009a, +author = {Report, Global Wind}, +title = {{Global wind 2009 report}}, +year = {2009} +} +@article{Pedersen2006a, +author = {Pedersen, T F}, +journal = {Renewable Energy}, +number = {March}, +title = {{Evaluation and Classification of Cup and Sonic Anemometry}}, +year = {2006} +} +@article{Engelen2006, +author = {Engelen, T G Van}, +journal = {Wind Energy}, +keywords = {control design model,higher harmonics control,individual pitch control,rotational modes}, +number = {March}, +title = {{Design model and load reduction assessment for multi-rotational mode individual pitch control ( higher harmonics control )}}, +year = {2006} +} +@article{Vebruggen2004, +author = {Vebruggen, T W and Werff, P A Van Der and Korterink, H and Richon, D and Rey, P and Lancon, F}, +number = {November}, +pages = {22--25}, +title = {{FIBER OPTIC BLADE MONITORING}}, +year = {2004} +} +@article{Hooft, +author = {Hooft, E L Van Der and Engelen, T G Van and Schaak, P and Wiggelinkhuizen, E J}, +journal = {Design}, +title = {{Design tool for wind turbine control algorithms}} +} +@article{Eecen2006, +author = {Eecen, P J and Braam, H}, +journal = {Wind Energy}, +number = {March}, +title = {{DEVELOPEMENT OF OPERATIONS AND MAINTENANCE COST ESTIMATOR}}, +year = {2006} +} +@article{Schaak2004, +author = {Schaak, P and Engelen, T G Van}, +journal = {Wind Energy}, +keywords = {control,converter,generator,power,torque,variable speed,wind turbine}, +number = {November}, +pages = {22--25}, +title = {{TORQUE CONTROL FOR VARIABLE SPEED WIND TURBINES}}, +year = {2004} +} +@article{Engelen2004, +author = {Engelen, T G Van}, +journal = {Wind Energy}, +number = {November}, +pages = {22--25}, +title = {{FREQUENCY DOMAIN LOAD CALCULATION FOR OFFSHORE WIND TURBINES ( TURBU OFFSHORE )}}, +year = {2004} +} +@article{Corten2004, +author = {Corten, G P and Brand, A J}, +journal = {Wind Energy}, +number = {November}, +pages = {22--25}, +title = {{RESOURCE DECREASE BY LARGE SCALE WIND FARMING}}, +year = {2004} +} +@article{Corten2004a, +author = {Corten, G P and Schaak, P and Hegberg, T}, +journal = {Wind Energy}, +number = {November}, +pages = {22--25}, +title = {{VELOCITY PROFILES MEASURED ABOVE A SCALED WIND FARM}}, +year = {2004} +} +@article{Production, +author = {Production, Wind Farm and Induction, Axial and Corten, P}, +journal = {Wind Energy}, +title = {{Heat and Flux}} +} +@article{Corten2004b, +author = {Corten, G P and Schaak, P}, +journal = {Wind Energy}, +number = {November}, +pages = {22--25}, +title = {{MORE POWER AND LESS LOADS IN WIND FARMS : " HEAT AND FLUX '}}, +year = {2004} +} +@article{Snel2004, +author = {Snel, H}, +journal = {Wind Energy}, +number = {November}, +pages = {22--25}, +title = {{APPLICATION OF A MODIFIED THEODORSEN MODEL TO THE ESTIMATION OF AERODYNAMIC FORCES AND AEROELASTIC STABILITY}}, +year = {2004} +} +@article{Lindenburga, +author = {Lindenburg, C and Snel, H}, +journal = {Analysis}, +keywords = {aerodynamic damping,blade vibrations,bladmode,eigenmodes,rotor blade,wind turbine}, +title = {{Aero-elastic stability analysis tools for large wind turbine rotor blades}} +} +@article{Bulder, +author = {Bulder, B H and Henderson, A and Huijsmans, R H M and Peeringa, J M}, +journal = {Structure}, +title = {{Floating OffShore Wind Turbines for Shallow waters}} +} +@article{Lindenburgb, +author = {Lindenburg, C}, +journal = {Engineering}, +keywords = {buckling,crostab,rotor blade,structural design,wind turbine}, +pages = {1--4}, +title = {{Programs for buckling strength prediction of rotor blades}} +} +@article{Schepers2003, +author = {Schepers, J G and Rooij, R Van and Bruining, A}, +journal = {Database}, +keywords = {aerodynamic modelling,experiments,wind turbines}, +pages = {1--8}, +title = {{Detailed aerodynamic measurements on wind turbines : Analyses of results}}, +year = {2003} +} +@article{Buldera, +author = {Bulder, B H and Schepers, J G}, +journal = {Wind Energy}, +keywords = {design tool,optimisation,wind turbine}, +pages = {1--3}, +title = {{A NALYSIS}} +} +@article{Corten2001, +author = {Corten, Gustave P}, +journal = {Energy}, +keywords = {1,boundary layer,heuristics of 3d-flow separation,stall rotation effects,three-dimensional flow effects}, +title = {{Inviscid Stall Model}}, +year = {2001} +} +@article{Centre2001, +author = {Centre, Energy and Petten, N L Z G}, +journal = {Behaviour}, +keywords = {double stall,insect accumulation,stall flags}, +pages = {2--5}, +title = {{Insects Cause Double Stall}}, +year = {2001} +} +@article{Lindenburg2001, +author = {Lindenburg, C}, +number = {January}, +pages = {1--18}, +title = {{Aerodynamic airfoil coefficients at large angeles of attrak}}, +year = {2001} +} +@article{Ozdemir2010, +author = {Ozdemir, H}, +number = {September}, +pages = {13--16}, +title = {{Development of a discontinuous Galerkin method for the unsteady integral boundary layer equations}}, +year = {2010} +} +@article{Engels2010, +author = {Engels, W P and Kanev, S K and Engelen, T G Van}, +journal = {Control}, +number = {October}, +title = {{Distributed Blade Control}}, +year = {2010} +} +@book{Brand2010, +author = {Brand, A J and Wagenaar, J W}, +booktitle = {Brand}, +isbn = {8755028705}, +number = {June}, +title = {{Validation of a quasi-steady wind farm flow model in the context of distributed control of the wind farm}}, +year = {2010} +} +@article{Bot2010, +author = {Bot, E T G}, +journal = {Wind Energy}, +number = {April}, +title = {{Improvements to the ECN wind farm optimisation software ‘ FarmFlow ’ ECN wind farm optimisation software ‘ FarmFlow ’}}, +year = {2010} +} +@article{Sanderse2009, +author = {Sanderse, B}, +journal = {Simulation}, +number = {October}, +pages = {20--22}, +title = {{Energy preservation in the numerical calculation of wind turbine wakes}}, +year = {2009} +} +@article{Brand2009, +author = {Brand, A J}, +journal = {Brand}, +number = {September}, +pages = {14--16}, +title = {{Wind farm design - When other wind farms are close}}, +year = {2009} +} +@article{Wagenaar2010, +author = {Wagenaar, J W}, +journal = {Renewable Energy}, +number = {February}, +title = {{SODARs and WISE guys}}, +year = {2010} +} +@article{Peeringa2009, +author = {Peeringa, J}, +journal = {Wind Energy}, +number = {March}, +pages = {16--19}, +title = {{Comparison of extreme load extrapolations using measured and calculated loads of a MW wind turbine}}, +year = {2009} +} +@article{Braam2009, +author = {Braam, H and Obdam, T S}, +journal = {Offshore (Conroe, TX)}, +pages = {14--16}, +title = {{Operation and maintenance cost estimator ( OMCE ) to estimate the future O \& M costs of offshore wind farms}}, +year = {2009} +} +@article{Kanvev2009, +author = {Kanvev, S K and Engelen, T G Van}, +journal = {Wind Energy}, +number = {March}, +pages = {16--19}, +title = {{Exploring the Limits in Individual Pitch Control}}, +year = {2009} +} +@article{Bijleveld2009, +author = {Bijleveld, H A}, +journal = {Wind Energy}, +pages = {1--6}, +title = {{Quasi-simultaneous interaction for prediction of aerodynamic flow over wind turbine blades}}, +year = {2009} +} +@article{Braam2008, +author = {Braam, H and Obdam, T S}, +keywords = {cost estimation,offshore wind energy,operation and maintenance}, +pages = {1--10}, +title = {{Estimating costs of operation \& maintenance for offshore wind farms}}, +volume = {2008}, +year = {2008} +} +@article{Brand2009a, +author = {Brand, A J}, +journal = {Wind Energy}, +number = {February}, +pages = {16--19}, +title = {{The effect of wind farming on mesocale flow Validation and prediction}}, +year = {2009} +} +@article{Obdam2008, +author = {Obdam, T S and Lloyd, P Frohb\"{o}se Germanischer and Hamburg, N Kruse H A W}, +title = {{Tools for estimating operation and maintenance costs of offshore wind farms : State of the Art}}, +volume = {2008}, +year = {2008} +} + + +@article{Engelen2008, +author = {Engelen, T G Van}, +journal = {Signal Processing}, +keywords = {aero-elastic modeling,load reduction,wind turbine control}, +title = {{Modern wind turbine controller design}}, +year = {2008} +} +@article{Obdam2007, +author = {Obdam, Tom}, +journal = {Wind Energy}, +title = {{Estimating Costs of Operation \& Maintenance for Offshore Wind Farms}}, +year = {2007} +} +@article{Schepers2007, +author = {Schepers, J G and Curvers, A and Oerlemans, S and Braun, K and Lutz, T and Herrig, A and Wuerz, W and Mantesanz, A and Fischer, M and Koegler, K and Maeder, T}, +journal = {Aerospace}, +title = {{SIROCCO : Silent rotors by acoustic optimisation}}, +year = {2007} +} +@article{Wiggelinkhuizen, +author = {Wiggelinkhuizen, E J and Boon, H J Den and Project, E-connection and Dirksen, S and Waardenburg, Bureau}, +journal = {Test}, +pages = {1--4}, +title = {{WT-BIRD ® : BIRD COLLISION MONITORING SYSTEM FOR MULTI-MEGAWATT WIND TURBINES}} +} +@article{Eecen, +author = {Eecen, P J and Braam, H and Obdam, T S}, +pages = {7--10}, +title = {{Estimating costs of operations and maintenance of offshore wind farms}} +} +@article{Snel2007, +author = {Snel, Herman}, +title = {{A short history of wind turbine aerodynamics , or : From Betz to Better}}, +year = {2007} +} +@article{Eecena, +author = {Eecen, P J and Korterink, H and Pijl, S P Van Der and Schepers, J G}, +journal = {Test}, +pages = {7--10}, +title = {{ECN test farm measurements for validation of wake models}} +} +@article{Herman2002, +author = {Herman, S A}, +keywords = {cost model,offshore,owecop,probabilistic model,risk,wind energy}, +number = {May}, +title = {{PROBABILISTIC COST MODEL FOR ANALYSIS OF OFFSHORE WIND ENERGY COSTS AND POTENTIAL}}, +year = {2002} +} +@article{Herman2002a, +author = {Herman, S A}, +keywords = {cable,cost model,costs,foundation,installation,offshore,removal,scour,sea state,soil,transport,vessels,weather window,weibull,wind energy}, +title = {{Analysis of Transport and Installation Costs}}, +year = {2002} +} +@article{Practices2010, +author = {Practices, Recommended and Train, Drive}, +journal = {Framework}, +number = {September}, +pages = {1--81}, +title = {{Recommended Practices for Measuring in Situ the}}, +year = {2010} +} +@article{Engels2009, +author = {Engels, Wouter and Obdam, Tom and Savenije, Feike}, +journal = {Current}, +title = {{Current developments in wind - 2009}}, +year = {2009} +} +@article{Variables2010, +author = {Variables, Critical Design}, +journal = {Design}, +number = {January}, +title = {{Determination of Load Cases and Critical Design Variables}}, +year = {2010} +} +@article{Manuala, +author = {Manual, User}, +title = {{Blade Optimization Tool}} +} +@article{Rademakers, +author = {Rademakers, L W M M}, +journal = {Distribution}, +title = {{Flight Leader Concept for Wind Farm Load Counting Final Report}} +} +@article{Verbruggen, +author = {Verbruggen, T W}, +title = {{Load monitoring for wind turbines Fibre optic sensing and data processing}} +} +@article{Sea, +author = {Sea, Turbu and Savenije, F J}, +title = {{Aero-elastic simulation of offshore wind turbines in the frequency domain}} +} +@article{Schepersa, +author = {Schepers, J G}, +journal = {Framework}, +title = {{Analysis of 4.5 years EWTW wake measurements}} +} +@article{Sea-project2007, +author = {Sea-project, We}, +journal = {Energy}, +title = {{Extreme loads using measured and calculated responses for offshore applications}}, +year = {2007} +} +@article{Brand, +author = {Brand, A J}, +journal = {Brand}, +title = {{Wind Power Plant North Sea - Wind Farm Interaction The effect of wind farming on mesoscale fl ow}} +} +@article{Reporta, +author = {Report, Final}, +title = {{Operation and Maintenance Cost Estimator ( OMCE )}} +} +@article{Eecen2009, +author = {Eecen, P J}, +journal = {Contract}, +number = {December}, +title = {{Measurements of Wind , Wave and Currents at the Offshore Wind Farm Egmond aan Zee}}, +year = {2009} +} +@book{Windc, +author = {Wind, I E A and Xx, Task}, +booktitle = {Energy}, +isbn = {2020021110005}, +title = {{Analysis of aerodynamic measurements on a model wind turbine placed in the NASA-Ames tunnel ECN ’ s and TUD ’ s contribution to IEA Wind Task XX}} +} +@article{Engelen, +author = {Engelen, Tim Van}, +keywords = {blade-effective wind speeds,extreme event,wind direction estimation,wind speed estimation,wind speed estimation, wind direction estimation, blade-effective wind speeds, extreme event recognition, extreme event control, load reduction.}, +title = {{Wind Turbine Extreme Gust Control Recognition and Control of extreme operation gusts and wind direction changes}} +} +@article{Pierik, +author = {Pierik, J T G and Bauer, P}, +journal = {Power}, +keywords = {farm models,offshore wind,offshore wind farm control,offshore wind farm dynamics,offshore wind farm electrical,systems}, +title = {{Wind Farm as Power Plant Dynamic modelling studies}} +} +@article{Barth, +author = {Barth, S and Bot, E T G and Hendriks, H B}, +title = {{Evaluation of “ Heat and Flux †Farm Control - Final Report -}} +} +@article{Rotors2002, +author = {Rotors, Silent and Optimisation, Acoustic and Ustutt, Stuttgart}, +number = {September 2007}, +pages = {1--15}, +title = {{Inal eport}}, +year = {2002} +} +@article{Selvam, +author = {Selvam, Kausihan}, +title = {{Individual Pitch Control for Large scale wind turbines Multivariable control approach}} +} +@article{Hooft2007, +author = {Hooft, E L Van Der and Engelen, T G Van and Schaak, P}, +journal = {Control}, +keywords = {control,modelling,simulation,wind energy,wind turbine}, +number = {June}, +title = {{Real-time Process Simulator for Evaluation of Wind Turbine Control Systems}}, +year = {2007} +} +@article{Manual2006, +author = {Manual, User}, +number = {December}, +title = {{ECN Educational Wind Turbine Control Toolbox}}, +year = {2006} +} +@article{Lindenburgc, +author = {Lindenburg, C}, +journal = {Design}, +title = {{Buckling load prediction tools for rotor blades}} +} +@article{Schaak, +author = {Schaak, P}, +title = {{Heat \& Flux Enabling the Wind Turbine controller}} +} +@article{Eecen2005, +author = {Eecen, P J and Noord, M De}, +journal = {Contract}, +number = {June}, +title = {{Uncertainties in Cup Anemometer Calibrations Type A and Type B uncertainties}}, +year = {2005} +} +@article{Rooij2005, +author = {Rooij, Van}, +number = {June}, +title = {{Final report of the Annexlyse project Analysis of aerodynamic field measurements on}}, +year = {2005} +} +@article{Bladknik, +author = {Bladknik, Dutch}, +journal = {Design}, +title = {{State of the art of rotor blade buckling tools Inventory of the Dutch BLADKNIK project}} +} +@article{Curvers2005, +author = {Curvers, A and Antoniou, I and Bradley, S}, +number = {April}, +title = {{Sodar Power Performance measurements}}, +year = {2005} +} +@article{Schepers2004, +author = {Schepers, J G}, +journal = {Analysis}, +keywords = {design codes,turbines,validation of wind turbine,yaw aerodynamics of wind}, +number = {September}, +title = {{ANNEXLYSE : VALIDATION OF YAW MODELS , ON BASIS OF DETAILED AERODYNAMIC MEASUREMENTS ON WIND TURBINE BLADES}}, +year = {2004} +} +@article{Report2004, +author = {Report, Final Project}, +isbn = {2020021110}, +number = {June}, +title = {{IEA ANNEX XVII INTERNATIONAL DATABASE ON Final Project Report}}, +year = {2004} +} +@article{Pierik2004, +author = {Pierik, G and Morren, J and Wiggelinkhuizen, J and Bozelie, J}, +journal = {Offshore (Conroe, TX)}, +number = {March}, +pages = {1--133}, +title = {{Electrical and Control Aspects of Offshore Wind Farms II ( Erao II )}}, +volume = {2}, +year = {2004} +} +@article{Ecn2004, +author = {Ecn, J T G Pierik}, +journal = {Distribution}, +number = {June}, +title = {{Electrical and Control Aspects of Offshore Wind Farms II ( Erao II )}}, +volume = {1}, +year = {2004} +} +@article{Measurements2004, +author = {Measurements, Wind Tunnel}, +number = {August}, +title = {{TURBINE INTERACTION IN LARGE}}, +year = {2004} +} +@article{Verhoef2004, +author = {Verhoef, J P and Eecen, P J and Nijdam, R J and Korterink, H and Scholtens, H H}, +number = {April}, +title = {{WT-Bird A Low Cost Solution for Detecting Bird Collisions}}, +year = {2004} +} +@article{Farm2004, +author = {Farm, Wind}, +journal = {Offshore (Conroe, TX)}, +number = {August}, +title = {{Turbine Interaction in Large Offshore Wind Farms}}, +year = {2004} +} + + + +@book{Eecen2004, +author = {Eecen, P J}, +booktitle = {October}, +isbn = {2020021110}, +number = {February}, +pages = {1--231}, +title = {{Measurements at 50m Meteorological Mast at ECN , Petten}}, +year = {2004} +} +@article{Engelena, +author = {Engelen, T G Van and Hooft, E L Van Der}, +title = {{Individual Pitch Control Inventory}} +} +@article{Peeringa2003, +author = {Peeringa, J M}, +number = {December}, +title = {{Extrapolation of extreme responses of a multi megawatt wind turbine}}, +year = {2003} +} +@article{Survey2003, +author = {Survey, A Literature}, +isbn = {2020021320008}, +journal = {Time}, +number = {December}, +title = {{INTEGRAL BOUNDARY LAYER METHODS FOR WIND TURBINE AERODYNAMICS A Literature Survey}}, +year = {2003} +} +@article{Hooft2003, +author = {Hooft, E L Van Der and Schaak, P and Engelen, T G Van}, +number = {December}, +title = {{Wind turbine control algorithms}}, +year = {2003} +} +@article{Eecen2003, +author = {Eecen, P J}, +number = {September}, +title = {{Forces due to waves on offshore wind turbines}}, +year = {2003} +} +@article{Garrel2003, +author = {Garrel, A Van}, +journal = {Energy}, +number = {August}, +title = {{DEVELOPMENT OF A WIND TURBINE AERODYNAMICS SIMULATION MODULE}}, +year = {2003} +} +@article{Lindenburg2003a, +author = {Lindenburg, C}, +keywords = {airfoil coefficients,deep stall,rotational augmentation,rotor aerodynamics,tip-loss models,wind turbine}, +number = {July}, +title = {{Investigation into Rotor Blade Aerodynamics Analysis of the stationary measurements on the UAE phase-VI rotor in the NASA-Ames wind tunnel}}, +year = {2003} +} +@article{Lindenburg2003b, +author = {Lindenburg, C}, +journal = {Analysis}, +keywords = {aeroelastic stability}, +number = {June}, +title = {{Aeroelastic Analysis of the LMH64-5 Blade Concept}}, +year = {2003} +} +@article{Bv2002, +author = {Bv, Genius Vos}, +number = {June}, +title = {{Lightning Damage of OWECS Part 3 : “ Case Studies â€}}, +year = {2002} +} +@article{Ecn, +author = {Ecn, Frans Van Hulle and Ecn, Gwen Van Roekel and Arrakis, Jan De Jongh and Borchgrevink, Jan and Carlos, Juan and Nordteco, L\'{o}pez and Rica, Costa}, +journal = {Power}, +title = {{Evaluation of the environmental impact of the 20 MW wind power project in Tejona , Costa Rica Report of Phase 2 of the Tejona Wind Power Project ( TWPP )}} +} +@article{Lindenburg2003c, +author = {Lindenburg, C}, +number = {July}, +title = {{Program for Rotor Blade Mode Analysis}}, +year = {2003} +} +@article{Bv2002a, +author = {Bv, Genius Vos}, +number = {June}, +title = {{Lightning Damage of OWECS Part 1 : “ Parameters Relevant for Cost Modelling â€}}, +year = {2002} +} +@article{Report2001a, +author = {Report, Publishable Final}, +journal = {Contract}, +number = {November}, +pages = {1--20}, +title = {{PROBABILITY DISTRIBUTION OF FATIGUE STRENGTH OF ROTOR BLADES ( PROFAR ) Publishable Final Report}}, +year = {2001} +} +@article{Barhorst2001, +author = {Barhorst, S A M and Schepers, J G and Hagg, F}, +number = {August}, +title = {{Energy Research Centre of the Netherlands ECN by : * Stork Product Engineering}}, +year = {2001} +} +@article{Werff2001, +author = {Werff, P A Van Der}, +journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, +number = {October}, +title = {{Identification of Variables for Site Calibration and Power Curve Assessment in Complex Terrain SiteParIden}}, +year = {2001} +} +@book{Delft2010, +author = {Delft, T U}, +booktitle = {Brand}, +isbn = {9789537619817}, +number = {July}, +title = {{Variability and Predictability of Large-Scale Wind Eergy in the Netherlands}}, +year = {2010} +} +@article{Nqi1988, +author = {Nqi, Certtl and Livkovi, I}, +title = {{V v -1-}}, +year = {1988} +} +@article{Release2004a, +author = {Release, Unlimited and Locke, James and Valencia, Ulyses}, +journal = {Design}, +number = {June}, +title = {{DESIGN STUDIES FOR TWIST-COUPLED WIND TURBINE}}, +year = {2004} +} +@article{Lim2007, +author = {Lim, Kim Kiat}, +journal = {Design}, +pages = {1--69}, +title = {{Design of Wind Turbine}}, +year = {2007} +} +@article{Vihri2002, +author = {Vihri, Harri}, +journal = {October}, +keywords = {a variable speed,control,feed forward control,fixed pitch wind turbine,fuzzy,is,is difficult to control,it is,kalman filter,nonlinear control,stable at below rated,unstable as power output,variable speed,wind power plants,wind speeds but becomes,wind turbines}, +title = {{Control of Variable Speed Wind Turbines}}, +year = {2002} +} +@article{Riley2002, +author = {Riley, Autores William F and Sturges, Leroy D}, +pages = {1--2}, +title = {{Bibliograf\'{\i}a}}, +year = {2002} +} +@article{Dea, +author = {De, Ing\'{e}nieur and Nationale, \'{E}cole and \'{E}cole, De and De, Ing\'{e}nieur and Nationale, \'{E}cole and De, Directeur and A\'{e}rotechnique, Institut}, +journal = {Techniques}, +pages = {1--24}, +title = {{Philippe LECONTE}} +} +@book{Destruction, +author = {Destruction, N O T F O R}, +booktitle = {Fluid Dynamics}, +isbn = {9283600150}, +title = {{Agard 7}}, +volume = {10} +} +@article{Bia, +author = {Bia, Aerodynamique}, +pages = {1--8}, +title = {{Aerodynamique - 1 -}} +} +@article{Trajectoires, +author = {Trajectoires, Laminaire}, +title = {{Introduction \`{a} l ’ a\'{e}rodynamique Types de l ’ \'{e}coulement de l ’ air}} +} +@article{Blackwell1977, +author = {Blackwell, Ben F and Sheldahl, Robert E and Feltz, Louis V}, +title = {{Wind Tunnel Performance Data for TWO- and Three-Bucket Savonius Rotors}}, +year = {1977} +} +@article{Buhl2006a, +author = {Buhl, M L}, +journal = {Renewable Energy}, +keywords = {ADAMS,FAST,January 2006,NREL/CP-500-39113,design codes,wind turbine certification}, +title = {{A Comparison of Wind Turbine Aeroelastic Codes Used for Certification Preprint}}, +year = {2006} +} +@article{One, +author = {One, Chapter}, +pages = {1--138}, +title = {{Chapter one 1.0}} +} +@article{Patil, +author = {Patil, Yogesh M and Upadhyay, Sachinam H and Sangvikar, Neha S}, +title = {{Vertical Axis Wind Turbine Axial Field Generator}} +} +@article{Equations, +author = {Equations, Euler Turbine and Flow, Axial and Turbines, Gas and Compressors, Axial Flow and Temperature, Total}, +title = {{Velocity Vectors}} +} +@article{Gunnerson2009, +author = {Gunnerson, Fred}, +journal = {System}, +title = {{Energy gy \& Momentum}}, +year = {2009} +} +@article{Equationsa, +author = {Equations, Euler Turbine and Flow, Axial and Turbines, Gas and Compressors, Axial Flow and Flow, Free-vortex and Stresses, Blade}, +title = {{AXIAL-FLOW MACHINES Stator Rotor Stator}} +} +@article{Pedersen2008, +author = {Pedersen, Pauli}, +journal = {Building}, +title = {{The basic matrix approach for three simple finite elements}}, +year = {2008} +} +@book{Pedersen2003a, +author = {Pedersen, Pauli}, +booktitle = {Design}, +isbn = {8790416066}, +title = {{- Structures and Materials - Problems and Tools -}}, +year = {2003} +} +@article{Properties, +author = {Properties, Their}, +title = {{No Title}} +} +@article{Shannon2007, +author = {Shannon, Claude}, +journal = {Illinois Research}, +pages = {9--13}, +title = {{4.2 Entropie et d\'{e}sordre}}, +year = {2007} +} +@article{Fourier, +author = {Fourier, Loi De}, +pages = {96--111}, +title = {{3.5 Thermocin\'{e}tique des processus irr\'{e}versibles}} +} +@article{Callen2007, +author = {Callen, Selon}, +pages = {1--15}, +title = {{4 Th\'{e}orie cin\'{e}tique 4 . 1 Distribution de Boltzmann}}, +year = {2007} +} +@article{Phases2007, +author = {Phases, Transitions De}, +journal = {Entropie}, +pages = {83--96}, +title = {{Transitions de phases}}, +year = {2007} +} +@article{Lieb2007, +author = {Lieb, E H and Yngvason, J and April, Physics Today and Yngvason, J}, +journal = {Physics Today}, +number = {April 2000}, +pages = {49--59}, +title = {{3.1 Thermocin\'{e}tique}}, +volume = {310}, +year = {2007} +} +@article{Il, +author = {Il, Exemples Eau}, +journal = {Notes}, +pages = {6--15}, +title = {{2.1 Bilans}}, +volume = {L} +} +@article{Gibbs1873, +author = {Gibbs, W}, +journal = {No\^{u}s}, +pages = {14--23}, +title = {{2.2 Chaleur : temp\'{e}rature et entropie}}, +year = {1873} +} + + +@article{Thermiques, +author = {Thermiques, Machines}, +journal = {No\^{u}s}, +pages = {23--31}, +title = {350 393} +} +@article{Mara2008, +author = {Mara, Thierry Alex}, +pages = {1--16}, +title = {{Travaux Dirig\'{e}s de M\'{e}canique Analytique}}, +year = {2008} +} +@article{Tensors, +author = {Tensors, A}, +journal = {Tensor}, +pages = {155--159}, +title = {{Tensor calculus}} +} +@article{Ansermet2007, +author = {Ansermet, J-ph}, +pages = {2007}, +title = {{Introduction aux principes de la Thermodynamique}}, +year = {2007} +} +@article{St-louis2010, +author = {St-louis, Nicole and Boudreault, Olivier and Marion, De}, +title = {{PHY 1651 ï¶ M\'{e}canique classique I Hiver 2010 – Plan de cours}}, +year = {2010} +} +@article{Lawrence2006, +author = {Lawrence, Philippe}, +journal = {Structure}, +pages = {1--22}, +title = {{APPLICATION DU VIRTUELS AU CALCUL DES STRUCTURES ISOSTATIQUES}}, +year = {2006} +} +@article{Fabrice2003, +author = {Fabrice, Michel}, +title = {{Table des mati\`{e}res}}, +year = {2003} +} +@article{Liberte, +author = {Liberte, Degres D E and Coordonnees, E T}, +pages = {6--7}, +title = {{Equations de lagrange}} +} +@article{Collot, +author = {Collot, Johann}, +title = {{M\'{e}canique Analytique : Formalismes lagrangien et hamiltonien et principe de moindre action}} +} +@article{Elassus1912, +author = {Elassus, E D}, +journal = {No\^{u}s}, +pages = {244--265}, +title = {{S. m. f.}}, +volume = {40}, +year = {1912} +} +@article{Baruh2000, +author = {Baruh, H}, +journal = {Aerospace Engineering}, +pages = {1--16}, +title = {{Another Look at the Describing Equations of D ’ Alembert ’ s Principle}}, +year = {2000} +} +@article{Hautcoeur, +author = {Hautcoeur, Philippe}, +title = {{INTRODUCTION A LA MECANIQUE ANALYTIQUE Formalisme de Lagrange}} +} +@article{Lawrence2006a, +author = {Lawrence, Philippe}, +journal = {Structure}, +title = {{APPLICATION DU VIRTUELS AU CALCUL DES STRUCTURES ISOSTATIQUES Exercice n Ëš 1}}, +year = {2006} +} +@article{Udwadia2006, +author = {Udwadia, Firdaus E and Phohomsiri, Phailaung}, +doi = {10.1098/rspa.2006.1662}, +journal = {Society}, +title = {{Explicit equations of motion for constrained mechanical systems with singular mass matrices and applications to multi-body dynamics mechanical systems with singular mass}}, +year = {2006} +} +@article{Marleau, +author = {Marleau, L}, +title = {{Introduction \`{a} la physique des particules}} +} +@article{Jong2005, +author = {Jong, Ing Chang}, +journal = {Engineering Education}, +title = {{Kindling Students’ Interest in Virtual Work Method:}}, +year = {2005} +} +@article{Udwadia2007, +author = {Udwadia, Firdaus E and Phohomsiri, Phailaung}, +doi = {10.1098/rspa.2007.1825}, +journal = {Society}, +pages = {1421--1434}, +title = {{Explicit Poincar\'{e} equations of motion for general constrained systems . Part I . Analytical results ´ equations of motion for Explicit Poincare general constrained systems . Part I .}}, +year = {2007} +} +@article{Marleaua, +author = {Marleau, P Amiot L}, +title = {{M\'{e}canique Classique II}} +} +@article{Marleaub, +author = {Marleau, L}, +title = {{Tableau des particules et collisionneurs}} +} +@article{Marleauc, +author = {Marleau, L}, +title = {{M\'{e}canique classique I}} +} +@article{Marleaud, +author = {Marleau, L}, +title = {{Unit\'{e}s et constantes fondamentales en physique}} +} +@article{Table2012, +author = {Table, Rappels}, +pages = {2--7}, +title = {{0.1.1.1 vecteur en 2D}}, +year = {2012} +} +@book{Systems, +author = {Systems, O F and Flexible-chain, Containing}, +isbn = {0444823735}, +title = {{Thermodynamic s}} +} +@book{Linder, +author = {Linder, Bruno}, +booktitle = {Work}, +isbn = {9786468600}, +title = {{THERMODYNAMICS AND INTRODUCTORY STATISTICAL MECHANICS}} +} +@article{Microscopic, +author = {Microscopic, From and Behavior, Macroscopic and Problems, Additional and Reading, Further and Concepts, Thermodynamic}, +journal = {Reading}, +title = {{Contents 1}} +} +@book{Nishimori2001, +author = {Nishimori, Hidetoshi}, +booktitle = {Physics}, +isbn = {0198509413}, +title = {{Statistical Physics of Spin Glasses and Information Processing An Introduction}}, +year = {2001} +} +@book{Ehlers, +author = {Ehlers, J and Frisch, U and Hepp, K and Imboden, D}, +booktitle = {Lecture Notes in Physics}, +isbn = {354067750X}, +title = {{Lecture Notes in Physics}} +} +@article{Eliezer, +author = {Eliezer, Shalom and Eliezer, Yaffa}, +journal = {Plasma Physics}, +title = {{No Title}} +} +@book{Introduction, +author = {Introduction, An}, +isbn = {3527302573}, +title = {{No Title}} +} +@book{Principles, +author = {Principles, Basic}, +booktitle = {Library}, +isbn = {0072321075}, +title = {{Semiconductor Physics and Devices}} +} +@article{Walet2003, +author = {Walet, Niels}, +journal = {Representations}, +title = {{P615 : Nuclear and Particle Physics}}, +year = {2003} +} +@article{Fitzpatrick, +author = {Fitzpatrick, Richard}, +journal = {Langmuir}, +title = {{Introduction to Plasma Physics : A graduate level course}} +} +@article{Galperin, +author = {Galperin, Yuri M}, +title = {{Introduction to Modern Solid State Physics}} +} +@article{Bellan, +author = {Bellan, Paul M}, +title = {{Fundamentals of Plasma Physics}} +} +@article{Ofa, +author = {Of, Lectrodynamics and Of, Roperties}, +title = {{No Title}} +} +@article{Computing2005, +author = {Computing, Scientific}, +title = {{THE THIRD BRANCH Essays on Scientific Computing}}, +year = {2005} +} +@article{Oad, +author = {Oad, T H E R and Eality, T O R}, +journal = {Physics}, +title = {{No Title}} +} +@book{Chaos, +author = {Chaos, Quantum}, +isbn = {0306471213}, +title = {{No Title}} +} +@book{Hartmann, +author = {Hartmann, Alexander K and Rieger, Heiko}, +isbn = {3527403078}, +title = {{No Title}} +} +@article{Schulten2000, +author = {Schulten, K and Kosztin, I and Street, N Mathews}, +title = {{Lectures in Theoretical Biophysics}}, +year = {2000} +} +@article{Theories, +author = {Theories, Gauge}, +journal = {Energy}, +title = {{GRAVITY , GAUGE THEORIES AND GEOMETRIC ALGEBRA Anthony Lasenby , Chris Doran and}} +} +@article{Illustrations, +author = {Illustrations, List O F}, +journal = {Quantum}, +title = {{Dear Reader :}} +} +@article{Polchinski, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-th/9411028}, +author = {Polchinski, Joseph}, +eprint = {9411028}, +primaryClass = {arXiv:hep-th}, +title = {{arXiv : hep-th / 9411028 v1 3 Nov 1994 WHAT IS STRING THEORY ?}} +} +@article{Kiritsis, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-th/9709062}, +author = {Kiritsis, Elias}, +eprint = {9709062}, +number = {March 1997}, +primaryClass = {arXiv:hep-th}, +title = {{Introduction to superstring theory}} +} +@book{Siegel, +author = {Siegel, Warren}, +isbn = {9971507315}, +title = {{INTRODUCTION to STRING FIELD THEORY}} +} +@article{Hooft2004, +author = {Hooft, Gerard}, +journal = {Outlook}, +title = {{Introduction to string theory ∗}}, +year = {2004} +} +@book{Gauglitz2003, +author = {Gauglitz, Edited G}, +isbn = {3527297820}, +title = {{Handbook of Spectroscopy Near-Infrared Spectroscopy Handbook of Analytical Techniques In-situ Spectroscopy in Heterogeneous Catalysis}}, +year = {2003} +} + + + + + + +@article{Skagerstam1998, +archivePrefix = {arXiv}, +arxivId = {arXiv:quant-ph/9909086}, +author = {Skagerstam, Bo-sture}, +eprint = {9909086}, +journal = {Science}, +primaryClass = {arXiv:quant-ph}, +title = {{Topics in Modern Quantum Optics}}, +year = {1998} +} +@book{Crc2001, +author = {Crc, Hall and Crc, Hall and Raton, Boca and New, London and Washington, York}, +booktitle = {New York}, +isbn = {1584881976}, +title = {{QUANTUM AND CLASSICAL MECHANICS}}, +year = {2001} +} +@article{Saltsidis1999, +author = {Saltsidis, P}, +journal = {Quantum}, +title = {{Solutions to Problems in Quantum Mechanics}}, +year = {1999} +} +@article{Rae, +author = {Rae, Alastair I M}, +journal = {Text}, +title = {{Quantum Mechanics}} +} +@article{Norbury2000, +author = {Norbury, John W}, +journal = {Differential Equations}, +title = {{Professor John W. Norbury}}, +year = {2000} +} +@article{Timpson2004, +archivePrefix = {arXiv}, +arxivId = {arXiv:quant-ph/0412063}, +author = {Timpson, Christopher Gordon}, +eprint = {0412063}, +primaryClass = {arXiv:quant-ph}, +title = {{Quantum Information Theory and The Foundations of Quantum Mechanics}}, +year = {2004} +} +@article{Schulten2000a, +author = {Schulten, K and Street, N Mathews}, +title = {{Notes on Quantum Mechanics}}, +year = {2000} +} +@article{Alexandrov, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-th/0311273}, +author = {Alexandrov, Sergei}, +eprint = {0311273}, +primaryClass = {arXiv:hep-th}, +title = {{Matrix Quantum Mechanics and Two-dimensional String Theory in Non-trivial Backgrounds}} +} +@article{Teschl, +author = {Teschl, Gerald}, +title = {{Mathematical Methods in Quantum Mechanics}} +} +@article{Cable2005, +archivePrefix = {arXiv}, +arxivId = {arXiv:quant-ph/0602107}, +author = {Cable, Hugo Vaughan}, +eprint = {0602107}, +journal = {October}, +number = {October}, +primaryClass = {arXiv:quant-ph}, +title = {{Localising Relational Degrees of Freedom in Quantum Mechanics by}}, +year = {2005} +} +@article{Landsman1998, +author = {Landsman, N P}, +journal = {Group}, +number = {April}, +title = {{Lecture Notes on C -Algebras and Quantum Mechanics}}, +year = {1998} +} +@book{Kitoh2001, +author = {Kitoh, Tsutomu}, +isbn = {0471406341}, +title = {{ANALYSIS INTRODUCTION TO Solving Maxwell ' s Equations and \`{E} dinger Equation the Schro}}, +volume = {1}, +year = {2001} +} +@article{Fuchs2006, +archivePrefix = {arXiv}, +arxivId = {arXiv:quant-ph/0012089}, +author = {Fuchs, C A and Onofrio, R and Peres, A and Santos, E and Serra, C and Simonius, M and Stomphorst, R G}, +eprint = {0012089}, +primaryClass = {arXiv:quant-ph}, +title = {quantum information}, +volume = {239}, +year = {2006} +} +@book{Ehlersa, +author = {Ehlers, J and Frisch, U and Hepp, K}, +booktitle = {Lecture Notes in Physics}, +isbn = {3540669108}, +title = {{Lecture Notes in Physics}} +} +@article{Clarkson2003, +author = {Clarkson, R}, +journal = {Solutions}, +title = {{Quantum Field Theory 1}}, +year = {2003} +} +@article{Feng, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-ph/0405215}, +author = {Feng, Jonathan L}, +eprint = {0405215}, +primaryClass = {arXiv:hep-ph}, +title = {{Supersymmetry and cosmology}} +} +@book{Gates, +author = {Gates, S James and Grisaru, Marcus T and Siegel, Warren}, +isbn = {0805331603}, +title = {{or One thousand and one}} +} +@article{Edition, +author = {Edition, Second}, +title = {{No Title}} +} +@book{Humphries1999, +author = {Humphries, Stanley}, +booktitle = {Computer Engineering}, +isbn = {0471878782}, +title = {{Particle Acceleration Preface to the Digital Edition Preface to the 1986 Edition}}, +year = {1999} +} +@book{Blin-stoyle, +author = {Blin-stoyle, Roger J}, +booktitle = {Media}, +isbn = {0750304154}, +title = {{Matter and the Universe EUREKA !}} +} +@book{Theory, +author = {Theory, Kinematical}, +booktitle = {Development}, +isbn = {0306471337}, +title = {{No Title}} +} +@article{Humphries2002, +author = {Humphries, Stanley}, +journal = {Computer Engineering}, +title = {{Charged Particle Beams}}, +year = {2002} +} +@book{Ofb, +author = {Of, Locks}, +isbn = {8007624058}, +title = {{B LOCKS OF}} +} +@book{Board, +author = {Board, Editorial}, +booktitle = {Lecture Notes in Physics}, +isbn = {3540214224}, +title = {{Lecture Notes in Physics}} +} +@article{Naturwissenschaften1977, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-th/0603098}, +author = {Naturwissenschaften, Doktor Der}, +eprint = {0603098}, +number = {April}, +primaryClass = {arXiv:hep-th}, +title = {{Aspects of Twistor Geometry and Supersymmetric Field Theories within Superstring Theory}}, +year = {1977} +} +@book{Boarda, +author = {Board, Editorial}, +isbn = {3540231250}, +title = {{Lecture Notes in Physics}} +} +@article{Palamodov2002, +author = {Palamodov, Prof V}, +journal = {Spring}, +title = {{Topics in Mathematical Physics}}, +year = {2002} +} +@article{Seiberg, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-th/9908142}, +author = {Seiberg, Nathan and Witten, Edward}, +eprint = {9908142}, +primaryClass = {arXiv:hep-th}, +title = {{String Theory and Noncommutative Geometry}} +} + +@article{Part, +author = {Part, Introduction and Dirichlet, The and Neumann, The and Chapter, Notes and Dirichlet, The and Dirichlet, The and Chapter, Notes and Neumann, The and Neumann, The and Chapter, Notes and Dirichlet, The}, +title = {$\nu$ 3.5.} +} +@book{Prilepko, +author = {Prilepko, I and Orlovsky, Dmitry G and Vasin, Igor A}, +booktitle = {Physics}, +isbn = {0824719875}, +title = {{METHODS FOR SOLVING INVERSE PROBLEMS IN MATHEMATICAL}} +} +@article{Atomic, +author = {Atomic, International and Agency, Energy}, +journal = {Atomic Energy}, +title = {{Manual on mathematical models in isotope hydrogeology »}} +} +@article{Hints, +author = {Hints, Exercises}, +journal = {Change}, +title = {{Preliminary calculus}} +} +@article{Chowa, +author = {Chow, T A I L}, +title = {{Mathematical Methods for Physicists : A concise introduction Mathematical Methods for Physicists}} +} +@article{Firk2000, +author = {Firk, Frank W K}, +title = {{Introduction to Groups , Invariants and}}, +year = {2000} +} +@article{Dips1998, +archivePrefix = {arXiv}, +arxivId = {arXiv:math.DG/9808130}, +author = {Dips, Preprint and Krasil, Joseph and Verbovetsky, Alexander}, +eprint = {9808130}, +journal = {Evolution}, +pages = {1--150}, +primaryClass = {arXiv:math.DG}, +title = {{Homological methods in equations of mathematical physics 1}}, +year = {1998} +} +@article{Raymond2004, +author = {Raymond, The and Kashdan, Eugene}, +journal = {Performance Computing}, +number = {June}, +title = {{HIGH-ORDER ACCURATE METHODS FOR MAXWELL EQUATIONS}}, +year = {2004} +} +@article{Doran1994, +author = {Doran, Chris J L}, +journal = {October}, +number = {February}, +title = {{Geometric Algebra and its Application to Mathematical Physics}}, +year = {1994} +} +@article{Collins2003, +author = {Collins, George W}, +journal = {Matrix}, +title = {by}, +year = {2003} +} +@article{Evans, +author = {Evans, Lawrence C}, +journal = {Entropy}, +title = {{Entropy and Partial Differential Equations}} +} +@article{Lee2000, +author = {Lee, Jeffrey M}, +journal = {Physics}, +title = {{Differential Geometry , Analysis and Physics}}, +year = {2000} +} +@article{Vein, +author = {Vein, Robert and Dale, Paul}, +title = {{Determinants and Their Applications in Mathematical Physics}} +} +@article{Cvitanovi2006, +author = {Cvitanovi, Predrag}, +title = {{Chaos : Classical and Quantum Part I : Deterministic Chaos}}, +year = {2006} +} +@book{Gmbh, +author = {Gmbh, Wiley-vch Verlag and Kgaa, Co}, +booktitle = {Library}, +isbn = {3527405348}, +title = {{Applied Mathematical Methods in Theoretical Physics}} +} +@article{Snieder1998, +author = {Snieder, Roel}, +title = {{A Guided Tour of Mathematical Physics}}, +year = {1998} +} +@book{Bass, +author = {Bass, Michael}, +isbn = {0387955909}, +title = {{Solid-State Lasers : A Graduate Text}} +} +@book{Dn, +author = {Dn, Team Yyepg and Yyepg, Team and Yyepg, Team and Yyepg, Team}, +isbn = {9780521642293}, +title = {{TeAM YYeP}} +} +@article{Notation, +author = {Notation, New and Number, Atomic and States, Oxidation}, +journal = {Engineering}, +title = {{No}} +} +@article{Einstein, +author = {Einstein, Albert}, +title = {{Relativity: The Special and General Theory}} +} +@article{Sternberg2003, +author = {Sternberg, Shlomo}, +title = {{Semi-Riemann Geometry and General Relativity}}, +year = {2003} +} +@article{Carroll1997, +archivePrefix = {arXiv}, +arxivId = {arXiv:gr-qc/9712019}, +author = {Carroll, Sean M}, +eprint = {9712019}, +primaryClass = {arXiv:gr-qc}, +title = {{Lecture Notes on General Relativity}}, +year = {1997} +} +@article{Bertschinger2000, +author = {Bertschinger, Edmund}, +journal = {Time}, +title = {{Introduction to Tensor Calculus for General Relativity}}, +year = {2000} +} +@article{Waner2005, +author = {Waner, Stefan}, +number = {January}, +title = {{Introduction to Differential Geometry}}, +year = {2005} +} +@article{Lomax1999, +author = {Lomax, Harvard and Pulliam, Thomas H and Zingg, David W}, +journal = {Matrix}, +title = {{Fundamentals of Computational Fluid Dynamics}}, +year = {1999} +} +@book{Dynamics, +author = {Dynamics, Computational Fluid}, +isbn = {0080439446}, +title = {{J. Blazek}} +} +@article{Gallavotti1999, +author = {Gallavotti, Giovanni}, +journal = {Distribution}, +title = {{Statistical mechanics}}, +year = {1999} +} +@book{Bonet, +author = {Bonet, Javier and Wood, Richard D}, +isbn = {052157272X}, +title = {{NONLINEAR CONTINUUM MECHANICS FOR FINITE ELEMENT ANALYSIS}} +} +@article{Lewis2003, +author = {Lewis, Andrew D}, +journal = {Notes}, +number = {April}, +title = {{Math 439 Course Notes Lagrangian Mechanics, Dynamics, and Control}}, +year = {2003} +} +@article{Marsden1998, +author = {Marsden, Jerrold E}, +number = {July}, +title = {{Introduction to Mechanics and Symmetry}}, +year = {1998} +} +@article{Brizard2004, +author = {Brizard, Alain J}, +journal = {Physics}, +title = {{LAGRANGIAN AND HAMILTONIAN MECHANICS}}, +year = {2004} +} +@article{Ruina2002, +author = {Ruina, Andy and Pratap, Rudra}, +journal = {Most}, +number = {January}, +title = {{S TATICS}}, +year = {2002} +} +@book{Takens1861, +author = {Takens, F and Teissier, B and Fondazione, C I M E}, +booktitle = {Lecture Notes in Mathematics}, +isbn = {3540240640}, +title = {{Lecture Notes in Mathematics}}, +year = {1861} +} +@article{Norbury2000a, +author = {Norbury, John W}, +journal = {Physics}, +title = {thermodynamics}, +year = {2000} +} +@article{Mechanics2000, +author = {Mechanics, Elementary}, +journal = {World}, +title = {{ELEMENTARY MECHANICS \& THERMODYNAMICS Professor John W . Norbury}}, +year = {2000} +} +@article{Mechanics, +author = {Mechanics, Continuum}, +journal = {Architectural Engineering}, +title = {{Continuum mechanics}} +} +@article{Ciarlet, +author = {Ciarlet, Philippe G}, +journal = {City}, +title = {{AN INTRODUCTION TO DIFFERENTIAL GEOMETRY WITH}} +} +@article{Claerbout2006, +author = {Claerbout, Jon F}, +journal = {differences}, +title = {{IMAGE ESTIMATION BY EXAMPLE : Geophysical soundings image construction Multidimensional autoregression}}, +year = {2006} +} +@book{Milsom, +author = {Milsom, John}, +isbn = {0470843470}, +title = {{No Title}} +} +@book{Basu2001, +author = {Basu, Dipak}, +booktitle = {Astronomy}, +isbn = {0849328918}, +title = {{GEOPHYSICS , ASTROPHYSICS ,}}, +year = {2001} +} +@article{Ahrens, +author = {Ahrens, J and Best, Myron G and Mclennan, Scott M and Winkler, W and Ahrens, Thomas J and Johnson, Mary L and Bowers, Teresa S and Element, Trace and Jones, John H and Conductivity, Thermal and Huenges, Ernst and Lockner, Duvid A and Evans, Brian and Kohlstedt, David L and Equilibria, Phase and Herzberg, Claude and Spectra, Reflectance and Clark, Roger N and Hunt, P and Moskowitz, Bruce M and Berryman, James G and Banerjee, Subir K}, +journal = {Rheology}, +title = {{No Title}} +} +@article{Anderson1995, +author = {Anderson, Orson L and Isaak, Donald G}, +journal = {Spectroscopy}, +title = {{Published under the aegis of the AGU Books Board}}, +year = {1995} +} +@book{Copyright2004, +author = {Copyright, Panamerican and House, Random and House, Random}, +booktitle = {Quantum}, +isbn = {0375412883}, +title = {{O 2004}}, +year = {2004} +} +@book{Kong2000, +author = {Kong, Jin Au}, +booktitle = {New York}, +isbn = {0471387991}, +title = {{SCATTERING OF ELECTROMAGNETIC WAVES}}, +volume = {1}, +year = {2000} +} +@book{Drillon2002, +author = {Drillon, Marc}, +booktitle = {Molecules}, +isbn = {3527304290}, +title = {{Further Titles of Interest}}, +volume = {0}, +year = {2002} +} +@book{Dorf, +author = {Dorf, Richard C and Editor, Series}, +booktitle = {America}, +isbn = {084931397X}, +title = {{No Title}} +} +@article{Magyar2001, +author = {Magyar, Rudolph J}, +title = {{A Companion to Classical Electrodynamics 3 rd Edition by J . D . Jackson}}, +year = {2001} +} +@article{Norbury1997, +author = {Norbury, John W}, +journal = {Work}, +title = {{for Undergraduates}}, +year = {1997} +} +@book{Waynant, +author = {Waynant, Ronald W and Ediger, Marwood N}, +booktitle = {New York}, +isbn = {0070687161}, +title = {{HANDBOOK}} +} +@article{Marion1997, +author = {Marion, J B and Leighton, R B}, +journal = {Reading}, +title = {{PHY 352K Classical Electromagnetism an upper-division undergraduate level lecture course given by Richard Fitzpatrick The University of Texas at Austin Major sources}}, +volume = {II}, +year = {1997} +} +@book{License, +author = {License, Alike}, +isbn = {0970467087}, +title = {{Light and Matter}} +} +@article{Collins2003a, +author = {Collins, George W}, +title = {{In}}, +year = {2003} +} +@article{Collins2003b, +author = {Collins, George W}, +journal = {Transport}, +title = {{Stellar Astrophysics}}, +year = {2003} +} +@article{Edition2003, +author = {Edition, Second}, +journal = {Leonardo}, +title = {{Handbook of Space Astronomy and Astrophysics Second Edition}}, +year = {2003} +} +@article{Miller1998, +author = {Miller, Diane Fisher}, +number = {April}, +title = {{Basics of Radio Astronomy for the Basics of Radio Astronomy Prepared by}}, +year = {1998} +} +@article{Road2001, +author = {Road, Brunel}, +journal = {Physics}, +number = {785998}, +title = {{( Opik ), Ernst Julius ( 1893 – 1985 )}}, +year = {2001} +} +@article{Bartelmann, +archivePrefix = {arXiv}, +arxivId = {arXiv:astro-ph/9912508}, +author = {Bartelmann, Matthias and Schneider, Peter}, +eprint = {9912508}, +number = {July 2006}, +primaryClass = {arXiv:astro-ph}, +title = {{Weak Gravitational Lensing}} +} +@book{Boardb, +author = {Board, Editorial}, +isbn = {3540227121}, +title = {{Lecture Notes in Physics}} +} +@article{Elvis, +author = {Elvis, M and Natta, A}, +title = {{No Title}} +} +@article{Weinberg, +author = {Weinberg, Steven}, +title = {{The First Three Minutes}} +} + + +@article{Linde1990, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-th/0503203}, +author = {Linde, Andrei}, +eprint = {0503203}, +primaryClass = {arXiv:hep-th}, +title = {{AND INFLATIONARY COSMOLOGY 1}}, +year = {1990} +} +@article{Dolgov2002, +archivePrefix = {arXiv}, +arxivId = {arXiv:hep-ph/0202122}, +author = {Dolgov, A D}, +eprint = {0202122}, +journal = {Direct}, +primaryClass = {arXiv:hep-ph}, +title = {{Neutrinos in cosmology}}, +year = {2002} +} +@article{Cosmology, +author = {Cosmology, Modern}, +journal = {Energy}, +title = {{No Title}} +} +@article{Norbury1997a, +author = {Norbury, John W}, +journal = {Tensor}, +title = {{for Undergraduates}}, +year = {1997} +} +@article{Coles, +author = {Coles, Peter}, +journal = {Physics}, +title = {{No Title}} +} +@article{Group1965, +author = {Group, Theoretical Physics and Road, Prince Consort}, +title = {{Astrophysics and cosmology}}, +year = {1965} +} +@article{Editiona, +author = {Edition, Second}, +title = {{No Title}} +} +@book{Editionb, +author = {Edition, Third}, +isbn = {0470849096}, +title = {{No Title}} +} +@article{Collins2004, +author = {Collins, George W}, +title = {{The Foundations Of Celestial Mechanics By}}, +year = {2004} +} +@book{Nardo, +author = {Nardo, Don}, +booktitle = {New York}, +isbn = {1590181018}, +title = {{Holes by Don Nardo}} +} +@book{Susskind, +author = {Susskind, Leonard and Lindesay, James}, +isbn = {9812560831}, +title = {{No Title}} +} +@book{The, +author = {The, Atlas O F}, +isbn = {9780540087914}, +title = {{REVISED EDITION}} +} +@article{Ofc, +author = {Of, Tory and Of, Iscovery}, +title = {{No Title}} +} +@book{Editionc, +author = {Edition, Second}, +booktitle = {Observatory}, +isbn = {1592570038}, +title = {{No Title}} +} +@article{Halzen, +archivePrefix = {arXiv}, +arxivId = {arXiv:astro-ph/0204527}, +author = {Halzen, Francis and Hooper, Dan}, +eprint = {0204527}, +primaryClass = {arXiv:astro-ph}, +title = {{High-energy Neutrino Astronomy: The Cosmic Ray Connection}} +} +@article{Mediterranean, +author = {Mediterranean, The and Ages, Dark and Europe, Post-roman}, +journal = {Moon}, +title = {{No Title}} +} +@article{Wevers, +author = {Wevers, By J C A}, +title = {{Physics Formulary}} +} +@article{Huggins2000, +author = {Huggins, E R}, +journal = {System}, +title = {{Physics 2000}}, +year = {2000} +} +@article{Schiller, +author = {Schiller, Christoph}, +title = {{Motion mountain}} +} +@book{Physics, +author = {Physics, T O}, +booktitle = {Quantum}, +isbn = {0306484013}, +title = {{No Title}} +} +@book{Physicsa, +author = {Physics, T O}, +isbn = {0306484005}, +title = {{TO PHYSICS}} +} +@article{Bailly2009, +author = {Bailly, Christophe}, +title = {{Plan du cours}}, +year = {2009} +} +@book{Flannery, +author = {Flannery, Brian P}, +isbn = {0521431085}, +title = {{No Title}} +} +@article{Lekien2005, +author = {Lekien, F and Marsden, J}, +doi = {10.1002/nme.1296}, +journal = {Online}, +keywords = {computational dynamics,interpolation,tricubic}, +number = {December 2004}, +pages = {455--471}, +title = {{Tricubic interpolation in three dimensions}}, +year = {2005} +} +@article{Statistics, +author = {Statistics, Applied Multivariate and Handbook, The}, +journal = {Psychology}, +title = {{No Title}} +} +@article{Ii1968, +author = {Ii, Part and Executor, Literary and Fisher, Sir Ronald A and Yates, Frank and Iii, Table and Menti, Nicola and Hayden, Henry and Margolin, Jack}, +title = {r e f}, +year = {1968} +} +@article{Av2002, +author = {Av, Maths and On, K}, +pages = {1--17}, +title = {{On consid` ere les trois normes sur E, dites classiques, d´ ependantes de}}, +year = {2002} +} +@article{Bar-hen, +author = {Bar-hen, Avner}, +title = {{DEA Environnement Marin : processus stochastiques}} +} +@article{Fonction, +author = {Fonction, D U N E}, +pages = {0--1}, +title = {x → x 0 −} +} +@article{Bar-hen2002, +author = {Bar-hen, Avner}, +title = {{DEA Environnement Marin : Table des mati ` eres}}, +year = {2002} +} +@book{Editiond, +author = {Edition, Fourth}, +isbn = {9780123742889}, +title = {{No Title}} +} +@article{Foundation1954, +author = {Foundation, National Science}, +journal = {Science}, +title = {{Preface ’ Preface to the Ninth Printing}}, +volume = {i}, +year = {1954} +} +@article{Tx, +author = {Tx, Austin and Tx, Houston}, +title = {{Global offices of CD-adapco}} +} +@article{Management, +author = {Management, Vehicle Thermal}, +number = {3}, +title = {{issue 3.01 integrate. automate. innovate. Features}} +} +@article{Thinking2008, +author = {Thinking, Alternative and Computer, About}, +number = {october}, +title = {{To achieve precise simulations, sharpen your tools.}}, +year = {2008} +} +@article{Officea, +author = {Office, Melville}, +journal = {Development}, +title = {{Global offices - CD-adapco}} +} +@article{To, +author = {To, Cool and Core, The}, +journal = {Electromagnetics}, +title = {{Three new releases}} +} +@article{Nagy, +author = {Nagy, Dennis}, +journal = {Engineering}, +pages = {1--32}, +title = {{CFD is changing From “ Hero Mountain †to “ Payback Meadow â€}} +} +@article{Arienti, +author = {Arienti, Marco}, +journal = {Electronics}, +title = {{New corporate image for CD-adapco}} +} +@article{Concepts, +author = {Concepts, Tome I and Ii, Tome and Milieux, Tome I I I}, +title = {{PO PO PO PO PO}} +} +@article{Conceptsa, +author = {Concepts, Tome I and Ii, Tome and Milieux, Tome I I I}, +title = {{PO PO PO PO PO}} +} +@article{Conceptsb, +author = {Concepts, Tome I and Ii, Tome and Milieux, Tome I I I}, +title = {{PO PO PO PO PO}} +} +@article{Prieve2000, +author = {Prieve, Dennis C}, +journal = {Time}, +title = {{A Course in Fluid Mechanics with Vector Field Theory by}}, +year = {2000} +} +@article{Edition2006, +author = {Edition, Fifth and Poling, Bruce E and Prausnitz, M}, +journal = {Library}, +title = {{CHAPTER ONE THE ESTIMATION OF PHYSICAL}}, +year = {2006} +} +@article{Nakayama, +author = {Nakayama, Y}, +journal = {Image (Rochester, N.Y.)}, +title = {{Fluid Mechanics}} +} +@book{Editione, +author = {Edition, Second}, +isbn = {0121782514}, +title = {{Pijush k. kundu 0 ira m. cohen}} +} +@book{Sirovich, +author = {Sirovich, Antman J E Marsden L and Holmes, Hale P and Keller, J Keener J and Mielke, B J Matkowsky A and Sreenivasan, C S Peskin K R S}, +booktitle = {Applied Mathematical Sciences}, +isbn = {0387404376}, +title = {{Applied Mathematical Sciences}} +} +@article{Ooa, +author = {\`{O}\`{o}, \'{O} \'{U} and Ã\`{u}, \AA}, +title = {{Ãà \'{U}\'{O}\O\O \`{O} ×}} +} +@article{Zienkiewicz, +author = {Zienkiewicz, O C and Emeritus, Freng}, +journal = {Fluid Dynamics}, +title = {{The Finite Element Method Fifth edition Volume 3 : Fluid Dynamics}}, +volume = {3} +} +@article{Lomax1999a, +author = {Lomax, Harvard and Pulliam, Thomas H and Zingg, David W}, +journal = {Matrix}, +title = {{Fundamentals of Computational Fluid Dynamics}}, +year = {1999} +} +@article{Zamouri2007, +author = {Zamouri, S and Tavoularis, S and Bailey, S}, +journal = {Aerospace Engineering}, +pages = {1--2}, +title = {{FLOW VISUALIZATION OF THE INTERACTION BETWEEN A WING-TIP VORTEX AND FREE-STREAM TURBULENCE}}, +year = {2007} +} +@article{Mechanics1999, +author = {Mechanics, Applied and Grounds, Aberdeen Proving}, +pages = {353--396}, +title = {{Mechanisms for generating coherent packets of hairpin vortices in channel flow}}, +volume = {387}, +year = {1999} +} +@article{Willert1997, +author = {Willert, Christian}, +journal = {Image (Rochester, N.Y.)}, +title = {{Stereoscopic digital particle image velocimetry for application in wind tunnel flows}}, +volume = {1465}, +year = {1997} +} +@article{Wittmer1998, +author = {Wittmer, K S and Devenport, W J and Zsoldos, J S}, +journal = {Sensors (Peterborough, NH)}, +title = {{A four-sensor hot-wire probe system for three-component velocity measurement}}, +volume = {24}, +year = {1998} +} +@article{Wallace1995, +author = {Wallace, James M and Foss, John F}, +keywords = {angular velocity,experimental methods,internal rotation,velocity}, +title = {{VORTICITY IN TURBULENT FLOWS}}, +year = {1995} +} +@article{Search2002, +author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Address, I P}, +keywords = {article are in colour,fluid flow velocity,only in the electronic,particle image velocimetry,some figures in this,three-dimensional,velocity,version,wind tunnel}, +title = {{Two-axes Scheimpflug focusing for particle image velocimetry}}, +volume = {1}, +year = {2002} +} +@article{Vanderwel2009, +author = {Vanderwel, Christina M}, +journal = {Scanning}, +number = {December}, +title = {{COHERENT STRUCTURES IN by}}, +year = {2009} +} +@article{Vanderwel2009a, +author = {Vanderwel, Christina}, +journal = {Mechanical Engineering}, +pages = {2--7}, +title = {{Considerations for the implementation of PIV in a plane normal to the flow direction}}, +year = {2009} +} +@article{Doorne, +author = {Doorne, C W H Van and Westerweel, J and Nieuwstadt, F T M}, +journal = {Technology}, +number = {1999}, +title = {{Measurement Uncertainty of Stereoscopic-PIV for Flow with Large Out-of-plane Motion .}} +} +@article{Westerweel2007, +author = {Westerweel, C W H Van Doorne \AE J}, +doi = {10.1007/s00348-006-0235-5}, +isbn = {0034800602355}, +journal = {Experiments in Fluids}, +pages = {259--279}, +title = {{Measurement of laminar , transitional and turbulent pipe flow using Stereoscopic-PIV}}, +year = {2007} +} +@article{Takahashi2005, +author = {Takahashi, Naoya and Ishii, Hiroyuki and Miyazaki, Takeshi and Introduction, I}, +doi = {10.1063/1.1858532}, +journal = {Physics of Fluids}, +pages = {1--14}, +title = {{The influence of turbulence on a columnar vortex}}, +year = {2005} +} +@article{Diagnostics, +author = {Diagnostics, Laser}, +title = {{Seed Particles for LDV and PIV}} +} + +@article{Prasad2000, +author = {Prasad, A K}, +journal = {Mechanical Engineering}, +number = {February}, +title = {{Stereoscopic particle image velocimetry}}, +volume = {29}, +year = {2000} +} +@article{Prasad1995, +author = {Prasad, Ajay K and Jensen, Kirk}, +journal = {Applied Optics}, +keywords = {of,particle image velocimetry,r 1995 optical society,scheimpflug,stereocamera}, +title = {{Scheimpflug stereocamera for particle image velocimetry in liquid flows}}, +year = {1995} +} +@article{Operation, +author = {Operation, Reliable}, +journal = {Business}, +title = {{Nd : YAG Laser Systems}} +} +@article{Soria2005, +author = {Soria, K Parker \AE K D Von Ellenrieder \AE J}, +doi = {10.1007/s00348-005-0971-y}, +journal = {Nature}, +pages = {281--298}, +title = {{Using stereo multigrid DPIV ( SMDPIV ) measurements to investigate the vortical skeleton behind a finite-span flapping wing}}, +year = {2005} +} +@article{Society2010, +author = {Society, The Royal and Society, Royal and Sciences, Physical}, +journal = {Society}, +number = {1595}, +pages = {491--508}, +title = {{Axial flow in laminar trailing vortices}}, +volume = {333}, +year = {2010} +} +@article{Physics2000, +author = {Physics, Theoretical and Street, Silver}, +pages = {349--378}, +title = {{Linear and nonlinear interactions between a columnar vortex and external turbulence}}, +volume = {402}, +year = {2000} +} +@article{Annuli2010, +author = {Annuli, Vertical Open-ended Exentric}, +number = {April}, +title = {{Research Internship Report Natural , Mixed and Forced Heat Convection in Supervisor :}}, +year = {2010} +} +@article{City2005, +author = {City, Iowa}, +doi = {10.1017/S002211200500580X}, +pages = {221--245}, +title = {{External turbulence interaction with a columnar vortex}}, +volume = {540}, +year = {2005} +} +@article{City1997, +author = {City, Iowa}, +journal = {Mechanical Engineering}, +pages = {1--30}, +title = {{The flow induced by periodic vortex rings wrapped around a columnar vortex core}}, +year = {1997} +} +@article{Diz2010, +author = {Diz, Le and Fabre, David}, +doi = {10.1007/s00162-009-0146-1}, +keywords = {15,20,32,47,breakdown,cd,fe,gv,instability,pacs 47,q-vortex,ring mode,swirling jet,viscosity,vortex}, +pages = {349--361}, +title = {{Viscous ring modes in vortices with axial jet}}, +year = {2010} +} +@article{Iungo2006, +author = {Iungo, Giacomo Valerio and Skinner, Peter}, +journal = {Security}, +number = {June}, +pages = {19--21}, +title = {{Wandering Smoothing Effects on Wing-tip Vortex Eulerian Measurements}}, +year = {2006} +} +@article{Park2008, +author = {Park, Joel T and Ph, D and Aouat, Ahmed Derradji and Ph, D}, +number = {September}, +pages = {0--16}, +title = {{Specialist Committee on Uncertainty Analysis}}, +year = {2008} +} +@article{Park2005, +author = {Park, Joel T and Derradji-aouat, Ahmed and Nishio, Shigeru and Wu, Baoshan}, +number = {Ldv}, +pages = {433--471}, +title = {{The Specialist Committee on Uncertainty Analysis Final Report and Recommendations to the 25th ITTC}}, +volume = {II}, +year = {2005} +} +@article{Igarashi2010, +author = {Igarashi, Hirofumi and Durbin, Paul A and Ma, Hongwei and Hu, Hui}, +journal = {New Horizons}, +number = {January}, +pages = {1--13}, +title = {{A Stereoscopic PIV Study of a Near-field Wingtip Vortex}}, +year = {2010} +} +@article{Confidentiel, +author = {Confidentiel, N O N}, +journal = {Recherche}, +title = {{RAPPORT DE STAGE DE RECHERCHE PIV MEASUREMENTS OF VORTEX WANDERING IN TURBULENT FLOWS}} +} +@article{Holzapfel2003, +author = {Holz\"{a}pfel, Frank and Hofbauer, Thomas and Darracq, Denis and Moet, Henri and Garnier, Fran\c{c}ois and Ferreira, Cecile}, +doi = {10.1016/S1270-9638(03)00026-9}, +journal = {Aerospace Science and Technology}, +keywords = {exhaust jet,numerical simulation,numerische simulation,scherung,schl\"{u}sselw\"{o}rter,secondary vorticity structures,sekund\"{a}rwirbelstrukturen,shear,stabile schichtung,stable stratification,triebwerksstrahl,turbulence,turbulenz,wake vortices,wirbelschleppe}, +pages = {263--275}, +title = {{Analysis of wake vortex decay mechanisms in the atmosphere ✩ Analyse der Zerfallsmechanismen von Wirbelschleppen in der Atmosph\"{a}re}}, +volume = {7}, +year = {2003} +} +@article{Gerz2002, +author = {Gerz, Thomas and Holz, Frank and Darracq, Denis}, +journal = {Progress in Aerospace Sciences}, +pages = {181--208}, +title = {{Commercial aircraft wake vortices}}, +volume = {38}, +year = {2002} +} +@article{Herpin2008, +author = {Herpin, Sophie and Yau, \AE Chong}, +doi = {10.1007/s00348-008-0533-1}, +journal = {Experiments in Fluids}, +pages = {745--763}, +title = {{Stereoscopic PIV measurements of a turbulent boundary layer with a large spatial dynamic range}}, +year = {2008} +} +@article{Pino2010, +author = {Pino, Carlos and Parras, Luis and Felli, Mario and Fernandez-feria, Ram\'{o}n}, +journal = {Insight}, +number = {2001}, +pages = {5--8}, +title = {{PIV measurements of the structure of wing-tip trailing vortices and their comparison with theoretical models}}, +year = {2010} +} +@article{Czech2005, +author = {Czech, Michael and Miller, Gregory and Crouch, Jeffrey and Strelets, Michail}, +doi = {10.1016/j.crhy.2005.05.005}, +keywords = {cfd,fusion de tourbillons,mesures,mots-cl\'{e}s,rans,tourbillons,turbulence,vortex merger,vortices,wake survey}, +pages = {451--466}, +title = {{Predicting the near-field evolution of airplane trailing vortices}}, +volume = {6}, +year = {2005} +} +@article{Cameron2008, +author = {Cameron, Andrew William}, +number = {February}, +title = {{Structure of a Low-Momentum Elevated Jet in a Cross-Flow}}, +year = {2008} +} +@article{Spillers2010, +author = {Spillers, Russell W}, +doi = {10.1007/s00348-010-0825-0}, +journal = {Experiments in Fluids}, +title = {{Meander of a fin trailing vortex and the origin of its turbulence}}, +year = {2010} +} +@article{Univer-2008, +author = {Univer-, Princeton}, +journal = {Aerospace}, +title = {{Measurements of the velocity field of a wing-tip vortex , wandering in grid turbulence}}, +year = {2008} +} +@article{Beninati2005, +author = {Beninati, M L and Marshall, J S}, +doi = {10.1007/s00348-004-0904-1}, +isbn = {0034800409}, +journal = {Experiments in Fluids}, +pages = {244--257}, +title = {{An experimental study of the effect of free-stream turbulence on a trailing vortex}}, +volume = {38}, +year = {2005} +} +@article{Bailey2004, +author = {Bailey, Sean C C}, +number = {May}, +title = {{The Effect of Free-Stream Turbulence and Shear on a Trailing Vortex by}}, +year = {2004} +} +@article{Bailey2006, +author = {Bailey, Sean C C}, +number = {December}, +title = {{The Interaction of a Wing-Tip Vortex and Free-Stream Turbulence by}}, +year = {2006} +} +@article{Adrian2000, +author = {Adrian, R J and Christensen, K T and Liu, Z}, +journal = {Experiments in Fluids}, +number = {95}, +title = {{Analysis and interpretation of instantaneous turbulent velocity fields}}, +volume = {29}, +year = {2000} +} +@book{Nationale, +author = {Nationale, Ecole and Grenoble, Hydraulique De}, +isbn = {030648384X}, +title = {{AN INFORMAL INTRODUCTION TO TURBULENCE Volume 63 Series Editor : R . MOREAU}} +} +@book{Fluids, +author = {Fluids, Turbulence I N}, +booktitle = {Fluid Mechanics and its Applications}, +isbn = {9781402064340}, +title = {{No Title}} +} +@article{Society2010a, +author = {Society, The Royal and Memoirs, Biographical and Society, Royal}, +journal = {Society}, +pages = {335--365}, +title = {{Author ( s ): S . Goldstein Source : Biographical Memoirs of Fellows of the Royal Society , Vol . 12 ( Nov ., 1966 ), pp . 335-365 Published by : The Royal Society Stable URL : http://www.jstor.org/stable/769538}}, +volume = {12}, +year = {2010} +} +@article{Mathematics2010, +author = {Mathematics, Applied and Review, Siam}, +journal = {Society}, +number = {2}, +pages = {447--452}, +title = {{Memories of Von Karman Author ( s ): Geoffrey I . Taylor Source : SIAM Review , Vol . 15 , No . 2 , Part 2 : Anniversary Supplement ( Apr ., 1973 ), pp . 447-452 Published by : Society for Industrial and Applied Mathematics Stable URL : http://www.jstor.org/stable/2028678}}, +volume = {15}, +year = {2010} +} +@article{Smith1998, +author = {Smith, Leslie M and Woodruff, Stephen L}, +journal = {Current}, +keywords = {renormalization-group theory,renormalized perturbation theory,the $\epsilon$ expansion}, +pages = {275--310}, +title = {{RENORMALIZATION-GROUP ANALYSIS OF TURBULENCE}}, +year = {1998} +} +@article{Aerospace1996, +author = {Aerospace, Proo and Vol, Sci and Simpson, Roger L}, +journal = {Science}, +number = {9}, +pages = {457--521}, +title = {{Pergamon ASPECTS OF TURBULENT BOUNDARY-LAYER SEPARATION}}, +volume = {32}, +year = {1996} +} +@article{Armentier2009, +author = {Armentier, M Y P}, +doi = {10.1127/0941-2948/2009/0370}, +isbn = {2007120518}, +journal = {Energy}, +number = {2}, +pages = {135--140}, +title = {{Comparison of 3D turbulence measurements using three staring wind lidars and a sonic anemometer}}, +volume = {18}, +year = {2009} +} +@article{Pedersen2002a, +author = {Pedersen, J M and Meyer, K E}, +doi = {10.1007/s00348-002-0514-8}, +journal = {Experiments in Fluids}, +pages = {940--949}, +title = {{POD analysis of flow structures in a scale model of a ventilated room}}, +volume = {33}, +year = {2002} +} +@article{Mann1998, +author = {Mann, Jakob}, +journal = {Science}, +number = {4}, +pages = {269--282}, +title = {{Wind field simulation}}, +volume = {13}, +year = {1998} +} +@article{Kawahara2005, +author = {Kawahara, Genta and Introduction, I}, +doi = {10.1063/1.1897011}, +pages = {1--13}, +title = {{Energy dissipation in spiral vortex layers wrapped around a straight vortex tube}}, +year = {2005} +} +@article{Hunt2000, +author = {Hunt, Julian C R and Morrison, Jonathan F}, +journal = {Engineering}, +pages = {673--694}, +title = {{Eddy structure in turbulent boundary layers}}, +volume = {19}, +year = {2000} +} +@article{Taylor1920, +author = {Taylor, By G I and May, Received and June, Read}, +title = {196 g. i.}, +volume = {6}, +year = {1920} +} +@article{Amiot, +author = {Amiot, P}, +title = {{P. Amiot}} +} +@article{Allaire2010, +author = {Allaire, G}, +pages = {1--46}, +title = {{ANALYSE NUMERIQUE ET OPTIMISATION Une introduction ` a la mod ´ elisation math ´ ematique et ` a la simulation num ´ erique Introduction ` a la mod ´ elisation math ´ ematique et ` a la simulation num ´ erique}}, +year = {2010} +} +@article{Manual2005, +author = {Manual, Tutorial}, +number = {August}, +title = {{Ansys icemcfd 10.0}}, +year = {2005} +} +@article{Training2006, +author = {Training, Introductory Fluent}, +journal = {Notes}, +title = {{Solver Basics}}, +year = {2006} +} +@article{Training2006a, +author = {Training, Introductory Fluent}, +journal = {Convergence}, +title = {{Solver Settings}}, +year = {2006} +} +@article{Multigrid2006, +author = {Multigrid, Use Full}, +journal = {Read}, +pages = {1--32}, +title = {{Modeling External Compressible Flow}}, +year = {2006} +} +@article{Training2006b, +author = {Training, Introductory Fluent}, +journal = {Notes}, +title = {{Modeling Turbulent Flows What is Turbulence ?}}, +year = {2006} +} +@article{Training2006c, +author = {Training, Introductory Fluent}, +journal = {Notes}, +title = {{Introduction to CFD Analysis What is CFD ?}}, +year = {2006} +} +@article{Training2006d, +author = {Training, Introductory Fluent}, +journal = {Notes}, +title = {{Boundary Conditions}}, +year = {2006} +} +@article{Jacquin2006, +author = {Jacquin, Laurent and Tabeling, Patrick}, +title = {{E u q i}}, +year = {2006} +} +@book{Raffel, +author = {Raffel, Markus and Willert, Christian E and Wereley, Steve T and Kompenhans, J\"{u}rgen}, +isbn = {9783540723073}, +title = {{No Title}} +} +@article{Hysique2007, +author = {Hysique, P Arcours D E P and Iquides, D E S L}, +title = {{Marc Rabaud}}, +year = {2007} +} +@article{Drotz2007, +author = {Drotz, Docteur Alain and Habisreutinger, Marc A}, +title = {{M e}}, +year = {2007} +} +@book{Clark2003, +author = {Clark, Douglas N}, +isbn = {1584880538}, +title = {{Applied math for engineers and scientists of Mathematics}}, +year = {2003} +} +@article{Pelletier2010, +author = {Pelletier, Dominique}, +title = {{FEDSM-ICNMM2010-30033}}, +year = {2010} +} +@article{Celi, +author = {Celi, Roberto}, +pages = {1--39}, +title = {{HELICOPTER FLIGHT DYNAMIC SIMULATION WITH REFINED}} +} +@article{Ilts2008, +author = {Ilts, Dess}, +title = {{A \'{e} rodynamique de l ' h \'{e} licopt \`{e} re Plan de la pr \'{e} sentation}}, +year = {2008} +} +@article{History2006, +author = {History, Early Helicopter and History, Modern Helicopter and Hinges, Flapping and Speed, Maximum Forward and Flight, Forward and Wake, Rotor}, +journal = {Leonardo}, +number = {Tgg}, +title = {{Aerodynamics of a Helicopter Rotor in Forward Flight Early Helicopter History}}, +volume = {2000}, +year = {2006} +} +@article{Gimonet1998, +author = {Gimonet, B}, +journal = {Forum American Bar Association}, +number = {May}, +pages = {5--7}, +title = {{Identification du mod\`{e}le de m\'{e}canique du vol d ’ un h\'{e}licopt\`{e}re aux basses vitesses}}, +volume = {d}, +year = {1998} +} +@article{Brown2000, +author = {Brown, R E}, +number = {4}, +title = {{Comparison of Induced Velocity Models for Helicopter Flight Mechanics}}, +volume = {37}, +year = {2000} +} +@article{Bragg2003, +author = {Bragg, Mike and Loth, Eric and Broeren, Andy and Lee, Sam and Cri, Holly Gurbachi and Hutchison, Tim and Pokhariyal, Devesh and Oltman, Ryan and Merret, Jason and Pan, Jianping and Students, Undergraduate and Lamarre, Chris and Blumenthal, Leia}, +journal = {Test}, +pages = {1--28}, +title = {{Aerodynamics and Flight Mechanics}}, +year = {2003} +} +@article{Bruyere, +author = {Bruyere, Philippe and Vence, Eric}, +title = {{LA DYNAMIQUE DE VOL DE L ’ HELICOPTERE}}, +volume = {D} +} +@article{Masse, +author = {Masse, Nom}, +title = {{Chimie des solutions Thermodynamique}} +} +@article{Normale2000, +author = {Normale, Ecole and Lyon, Sup\'{e}rieure De and Rigaut, Matthieu}, +journal = {No\^{u}s}, +title = {{M\'{e}canique des Fluides Pr\'{e}face}}, +year = {2000} +} +@article{Chatellier2006, +author = {Chatellier, L}, +title = {{M\'{e}canique des fluides instationnaires}}, +year = {2006} +} +@article{Faure2006, +author = {Faure, Th}, +journal = {Sciences-New York}, +pages = {1--204}, +title = {{A\'{e}rodynamique appliqu\'{e}e}}, +year = {2006} +} +@article{Bushnell1991, +author = {Bushnell, D M and Moore, K J}, +journal = {Bone}, +keywords = {flying,resistance minimization,swimming}, +pages = {65--79}, +title = {{DRAG REDUCTION IN NATURE !}}, +year = {1991} +} +@article{Emanuel1991, +author = {Emanuel, Kerry A}, +journal = {Atlantic}, +keywords = {convection,finite-amplitude,moist convection,tropical cyclones}, +number = {1982}, +pages = {179--196}, +title = {{The theory of hurricanes}}, +year = {1991} +} +@article{Jenkinson, +author = {Jenkinson, Lloyd R and Simpkin, Paul and Rhodes, Darren}, +journal = {Analysis}, +title = {{Civil Jet Aircraft Design}} +} +@article{Dirisoft2007, +author = {Dirisoft, Journ\'{e}es}, +title = {{Journ\'{e}es Dirisoft - 6 et 7 D\'{e}cembre 2007 - Mantes la Jolie}}, +year = {2007} +} +@article{Ottavy, +author = {Ottavy, Xavier}, +title = {{Cours de turbomachine \`{a} fluide compressible}} +} +@article{Forme, +author = {Forme, I}, +pages = {2--5}, +title = {{Determination de l' equation d'euler}} +} +@article{En, +author = {En, Exprimees and Fixe, Repere and Mobile, O U}, +title = {{Rappel des equations de conservation locales ou integrales exprimees en repere fixe ou mobile}} +} +@article{Bailly, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation A short introduction to turbulent flows}} +} +@article{Baillya, +author = {Bailly, Christophe and Marsden, Olivier}, +journal = {Wire}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyb, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyc, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyd, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillye, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyf, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyg, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyh, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation}} +} +@article{Baillyi, +author = {Bailly, Christophe and Marsden, Olivier}, +title = {{Turbulence : description physique \& mod\'{e}lisation A short introduction to turbulent flows}} +} +@article{Mary2005, +author = {Mary, Queen}, +doi = {10.1017/S0022112005004453}, +pages = {65--100}, +title = {{The generation of streaks and hairpin vortices from a localized vortex disturbance embedded in unbounded uniform shear flow}}, +volume = {535}, +year = {2005} +} +@article{Spohn, +author = {Spohn, A}, +journal = {Topology}, +keywords = {ahmed body,flow separation,vortex flow,wake flow}, +title = {{Flow Separations Generated by a Simplified Geometry of an Automotive Vehicle}} +} +@article{Gillie2008, +author = {Gillie, Patrick}, +doi = {10.1016/j.compfluid.2008.01.009}, +journal = {Computers \& Fluids}, +pages = {1--11}, +title = {{Analysis and control of the near-wake flow over a square-back geometry}}, +year = {2008} +} +@article{Deb, +author = {De, L E Titre D E Docteur}, +title = {{N° d’ordre 2348}} +} +@article{Lienhart, +author = {Lienhart, H and Stoots, C and Becker, S}, +number = {Figure 3}, +title = {{Flow and Turbulence Structures in the Wake of a Simplified Car Model ( Ahmed Model )}} +} +@article{Fluides2008, +author = {Fluides, Dynamique and Du, L Aide and Actif, Controle and Jet, P A R}, +title = {{N° d’ordre : \ldots\ldots.}}, +year = {2008} +} +@article{Kim2004, +author = {Kim, Jeonglae and Hahn, Seonghyeon and Kim, Jinsung and Lee, Dong-kon and Choi, Jin and Jeon, Woo-pyung and Choi, Haecheon}, +doi = {10.1088/1468-5248/5/1/019}, +journal = {Journal of Turbulence}, +number = {04}, +pages = {1--12}, +title = {{Active control of turbulent flow over a model vehicle for drag reduction *}}, +volume = {5248}, +year = {2004} +} +@article{Amandine, +author = {Amandine, Hamel}, +journal = {System}, +title = {{PROMOTION X2005 Flow visualization and PIV measurements in the wake of a Sport Utility Vehicle Department of Mechanical Engineering}} +} +@article{Guilmineau2007, +author = {Guilmineau, E}, +title = {{Experimental and Numerical Analysis of The Effect of Side Wind on a Simplified Car Model}}, +year = {2007} +} +@article{Gohlke2007, +author = {Gohlke, M and Beaudoin, J F and Amielh, M and Anselmet, F}, +number = {1993}, +pages = {27--31}, +title = {{Structures tourbillonnaires et leur influence sur les efforts subis par un corps 3D en d\'{e}rapage}}, +year = {2007} +} +@article{Anselmet2007, +author = {Anselmet, F}, +doi = {10.1007/s00348-007-0341-z}, +journal = {Experiments in Fluids}, +pages = {579--594}, +title = {{Experimental analysis of flow structures and forces on a 3D-bluff-body in constant cross-wind}}, +year = {2007} +} +@article{Gohlke2008, +author = {Gohlke, M}, +journal = {Control}, +title = {{Drag reduction by flow control at PSA}}, +year = {2008} +} +@article{Fares2006, +author = {Fares, Ehab}, +doi = {10.1016/j.compfluid.2005.04.011}, +journal = {Computers \& Fluids}, +pages = {940--950}, +title = {{Unsteady flow simulation of the Ahmed reference body using a lattice Boltzmann approach}}, +volume = {35}, +year = {2006} +} +@article{Chometon2004, +author = {Chometon, F and Strzelecki, A and National, Conservatoire}, +journal = {Image (Rochester, N.Y.)}, +number = {i}, +title = {{Aerodynamic Characteristics of a New Simple Car Model for Experimental Analysis of Unsteady Wakes}}, +year = {2004} +} +@article{Brunn2007, +author = {Brunn, A and Wassen, E and Sperber, D and Nitsche, W and Thiele, F}, +pages = {247--259}, +title = {{Active Drag Control for a Generic Car Model}}, +year = {2007} +} +@article{Ancey2010, +author = {Ancey, Christophe}, +title = {{\'{E}C O L E P O L Y T E C H N I Q U E Hydraulique \`{a} surface libre Ph\'{e}nom\`{e}nes de propagation : ondes et ruptures de barrage Bases math\'{e}matiques , outils de simulations , applications}}, +year = {2010} +} +@article{National, +author = {National, Centre and Recherche, D E L A}, +journal = {Physics}, +number = {November 2011}, +title = {{The Meso-NH Atmospheric Simulation System : Scientific Documentation Part III : Physics}} +} +@article{National2011, +author = {National, Centre and Recherche, D E L A}, +number = {November}, +title = {{The Meso-NH Atmospheric Simulation System : Scientific Documentation Part II : Model Setup}}, +year = {2011} +} +@article{Nationala, +author = {National, Centre and Recherche, D E L A}, +number = {November 2011}, +title = {{The Meso-NH Atmospheric Simulation System : Scientific Documentation Part I : Dynamics}} +} +@article{Album, +author = {Album, An and Mo-, Fluid}, +journal = {Fluid Dynamics}, +title = {{ME 563 - Intermediate Fluid Dynamics - Su Lecture 0 - Visual fluids examples}} +} +@article{Holman, +author = {Holman, Jack P and Lloyd, John}, +journal = {Refrigeration And Air Conditioning}, +title = {{Fluid Mechanics}} +} +@article{Kapania2008, +author = {Kapania, Nitin R and Terracciano, Katherine and Taylor, Shannon}, +pages = {70--99}, +title = {{Modeling the Fluid Flow around Airfoils Using Conformal Mapping}}, +year = {2008} +} +@article{Randall2006, +author = {Randall, David A}, +journal = {Science}, +number = {1}, +title = {{Reynolds Averaging}}, +year = {2006} +} +@article{Mouvement, +author = {Mouvement, A and Mouvements, B}, +pages = {111--148}, +title = {{\'{E}coulements \`{a} potentiel de fluide incompressible homog\`{e}ne}} +} +@article{Grandeurs, +author = {Grandeurs, A B C D E F G H I J K L}, +title = {de fluides} +} +@article{Notion, +author = {Notion, A and Variables, B and Analyse, C and Flux, E and Classes, J}, +title = {des mouvements} +} +@article{Mouvementa, +author = {Mouvement, A and Mouvements, B}, +pages = {111--148}, +title = {{\'{E}coulements \`{a} potentiel de fluide incompressible homog\`{e}ne}} +} +@article{Grandeursa, +author = {Grandeurs, A B C D E F G H I J K L}, +title = {{\'{E}quations de bilans du mouvement de fluides}} +} +@article{Notiona, +author = {Notion, A and Variables, B and Analyse, C and Flux, E and Classes, J}, +journal = {Solutions}, +title = {des mouvements} +} +@article{Units, +author = {Units, Graphic Processor and Method, Vortex Element}, +journal = {Challenge}, +title = {{Gpu \& vem}} +} +@article{Muskulus2012, +author = {Muskulus, Michael}, +journal = {Science And Technology}, +title = {{A fast vortex method for wind turbine aerodynamics}}, +year = {2012} +} +@article{Hoydonck2011, +author = {Hoydonck, Wim Van and Workshop, Vortex Methods}, +journal = {Methods}, +pages = {13--17}, +title = {{NURBS-based vortex filament method}}, +year = {2011} +} +@article{Gaunaa2012, +author = {Gaunaa, Mac}, +journal = {Wind Energy}, +title = {{Mac ’ s Selection of Assorted Vortex Based Aerodynamic Goodies}}, +year = {2012} +} +@article{Muskulus, +author = {Muskulus, Michael}, +journal = {Seminar}, +title = {{Panel Vortex Code on GPU Where do I come from ?}} +} +@article{Renewable, +author = {Renewable, National and Centre, Energy}, +title = {{Panel code for unsteady modelling of deformable airfoils (ADAPTFOIL)}} +} +@article{Burtscher, +author = {Burtscher, Martin}, +title = {{An Efficient GPU Implementation of the Irregular Barnes Hut N-Body Algorithm High-End CPU and GPU Dies}} +} +@article{Voutsinas2012, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course}}, +year = {2012} +} +@article{Voutsinas2012a, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course Extension to compressible and viscous flows}}, +year = {2012} +} +@article{Voutsinas2012b, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{Fluid-structure interaction using vortex methods : The Wind Turbine problem}}, +year = {2012} +} +@article{Voutsinas2012c, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course Particle \& Vortex Methods}}, +year = {2012} +} +@article{Voutsinas2012d, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course}}, +year = {2012} +} +@article{Voutsinas2012e, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course Vortex methods in 2D airfoil aerodynamics}}, +year = {2012} +} +@article{Voutsinas2012f, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course Formulation of flow problems using vorticity}}, +year = {2012} +} +@article{Voutsinas2012g, +author = {Voutsinas, Spyros}, +title = {{PhD Course From theory to engineering practice Potential flow theory \& elementary flow-fields}}, +year = {2012} +} +@article{Voutsinas2012h, +author = {Voutsinas, Spyros}, +journal = {Mechanical Engineering}, +title = {{PhD Course}}, +year = {2012} +} +@article{Stone2010, +author = {Stone, Christopher P and Duque, Earl P N and Hennes, Christopher C}, +number = {January}, +pages = {2010}, +title = {{Rotor wake modeling with a coupled Eulerian and Vortex Particle Method}}, +year = {2010} +} +@article{Matthies, +author = {Matthies, Hermann G and Niekamp, Rainer and Srisupattarawanit, Tarin}, +journal = {Computing}, +title = {{Fluid-Structure Interaction with Software Components}} +} +@article{Gibbons1998, +author = {Gibbons, Jeremy and Lane, Gipsy}, +number = {1}, +pages = {63--65}, +title = {{‘ Hey — it works !’}}, +volume = {19}, +year = {1998} +} +@article{Veldhuizen2000, +author = {Veldhuizen, Todd}, +journal = {Science}, +number = {August}, +title = {{Techniques for Scienti c C ++ Todd Veldhuizen}}, +year = {2000} +} +@article{This2002, +author = {This, Introduction and Society, American Mathematical}, +journal = {Environments}, +pages = {1--17}, +title = {{Short Math Guide for L TEX Michael Downes}}, +year = {2002} +} +@article{Duffy2010, +author = {Duffy, Austen and Sussman, Mark}, +title = {{A GPU Accelerated PCG Pressure Projection Solver on Dynamic Adaptive Grids}}, +year = {2010} +} +@article{Veldhuizen1997, +author = {Veldhuizen, Todd}, +journal = {Science}, +number = {July}, +title = {{Scientific Computing : C ++ versus Fortran 2 : Why C ++ programs are much faster than they used to be}}, +year = {1997} +} +@article{Beazley, +author = {Beazley, David M}, +journal = {Notes}, +title = {{Interfacing C/C++ and Python with SWIG}} +} +@article{Cupido2002, +author = {Cupido, Noemi Sanchez}, +title = {{Nataci\'{o}n con aletas Resultados}}, +year = {2002} +} +@article{Velte2012, +author = {Velte, Clara M and Okulov, Valery L and Hansen, Martin O L}, +doi = {10.1063/1.3592800}, +journal = {Chaos}, +number = {2011}, +title = {{Alteration of helical vortex core without change in flow topology Alteration of helical vortex core without change in flow topology}}, +volume = {051707}, +year = {2012} +} +@article{Cl, +author = {Cl, Mots}, +pages = {293--348}, +title = {{\'{E}l\'{e}ments de calcul tensoriel}} +} +@article{Burkardt1995, +author = {Burkardt, John and Puglielli, Paul}, +pages = {1--40}, +title = {{MATMUL : An Interactive Matrix Multiplication Benchmark}}, +year = {1995} +} +@article{Leonard1989, +author = {Leonard, A and Chua, K}, +journal = {In Practice}, +pages = {490--496}, +title = {{u ( x ) = -T f Ix- x ' 13}}, +volume = {37}, +year = {1989} +} +@article{Thea, +author = {The, Motivation}, +journal = {Methods}, +pages = {1--8}, +title = {{Solutions of Laplace ’ s equation in 3d}} +} +@article{Simon2010, +author = {Simon, Emmanuel and Branlard, Pierre and Vej, Anker Engelunds}, +number = {61}, +pages = {25182}, +title = {{Danske Bank}}, +year = {2010} +} +@article{Stock2008, +author = {Stock, Mark J and Dahm, J A}, +keywords = {density discontinuity,stratified flow,vortex methods,vortex sheet dynamics,vortex-in-cell}, +number = {June}, +title = {{Impact of a vortex ring on a density interface using a regularized inviscid vortex sheet method}}, +year = {2008} +} +@article{Copy, +author = {Copy, Retention}, +journal = {Energy}, +title = {{F “â€}} +} +@article{Sanderse, +author = {Sanderse, B}, +title = {{Aerodynamics of wind turbine wakes Literature review}} +} +@article{Greengard1995, +author = {Greengard, Leslie and Lee, June-yub}, +journal = {Strain}, +pages = {1--24}, +title = {{A Direct Adaptive Poisson Solver of Arbitrary Order Accuracy}}, +year = {1995} +} +@article{Jackson2005, +author = {Jackson, Kevin J}, +journal = {Design}, +number = {July}, +title = {{Wind Power Generation Trends}}, +year = {2005} +} +@article{Concept2006, +author = {Concept, Coning Rotor}, +journal = {Structures and Materials}, +pages = {1--3}, +title = {{Urran rawford}}, +year = {2006} +} +@article{Jain2011, +author = {Jain, Kartik}, +journal = {German Research}, +title = {{The Computer Language Benchmarks Game}}, +year = {2011} +} +@article{Areias2011, +author = {Areias, P}, +journal = {Memory}, +title = {{Basic considerations}}, +year = {2011} +} +@article{Duffy2008, +author = {Duffy, Austen}, +journal = {Performance Computing}, +title = {{CFD : Compressible Flows High Performance Computing Seminar CFD : Compressible Flows What is a Compressible Flow ?}}, +year = {2008} +} +@article{Teske, +author = {Teske, E}, +journal = {Contractor}, +title = {{E. Teske, HI/02 Uncl\_s 0003611}} +} +@article{Gumerov, +author = {Gumerov, Nail A and Duraiswami, Ramani}, +journal = {Techniques}, +title = {{FMM accelerated BEM for 3D Laplace \& Helmholtz Equations}} +} +@article{Mobile2009, +author = {Mobile, Windows}, +journal = {Notes}, +title = {{Release Notes for Cisco AnyConnect VPN Client ,}}, +year = {2009} +} +@article{Kamemoto2009, +author = {Kamemoto, Kyoji}, +number = {June}, +pages = {1--34}, +title = {{Prospective Characteristics of a Lagrangian Vortex Method in Application into Vortex Flows of Moving Boundary Problems}}, +year = {2009} +} +@article{Ramasamy2004, +author = {Ramasamy, Manikandan and Leishman, J Gordon and Gessow, Alfred}, +journal = {Writing}, +title = {{A G ENERALIZED M ODEL FOR}}, +year = {2004} +} +@article{De2011, +author = {De, Echniques}, +journal = {Techniques}, +title = {{DE L ’ ADEME L ’ \'{e}olien en mer}}, +year = {2011} +} +@article{Conlisk, +author = {Conlisk, A T}, +keywords = {blade-vortex interaction,computational fluid dynamics,dynamic stall,experiments,rotor aerodynamics,tip-vortex,vortex wakes}, +title = {{MODERN HELICOPTER AERODYNAMICS}} +} +@article{Vasilescu2004, +author = {Vasilescu, Roxana}, +number = {November}, +title = {{HELICOPTER BLADE TIP VORTEX MODIFICATIONS IN HOVER USING PIEZOELECTRICALLY MODULATED BLOWING by HELICOPTER BLADE TIP VORTEX MODIFICATIONS IN HOVER USING PIEZOELECTRICALLY MODULATED}}, +year = {2004} +} +@article{On, +author = {On, Academic Program and Technology, Manufacturing and Bandyopadhyay, G}, +journal = {Aerospace Engineering}, +title = {{LECTURE NOTES ON}} +} +@article{Schmitz2005, +author = {Schmitz, Sven}, +doi = {10.1115/1.2035707}, +journal = {Journal of Solar Energy Engineering}, +number = {November}, +pages = {475--487}, +title = {{A Parallelized Coupled Navier-Stokes/Vortex-Panel Solver}}, +volume = {127}, +year = {2005} +} +@article{Carpenter, +author = {Carpenter, Paul I}, +title = {{NATIONAL ADV ! S \_ ORYCOMMITTEE FOR AERONAUTICS}} +} +@article{Mccombes2009, +author = {Mccombes, T and Johnstone, C and Grant, A}, +keywords = {elling,marine current turbine,unsteady mod-,vorticity transport,wake}, +title = {{Unsteady 3D Wake Modelling for Marine Current Turbines}}, +year = {2009} +} +@article{Laserjet, +author = {Laserjet, H P}, +title = {{HP LaserJet 4350 series printer}} +} +@article{Stepniewski, +author = {Stepniewski, W Z and Tarczynski, T and Aeronautics, National}, +journal = {Contractor}, +number = {September 1992}, +title = {{Open Airscrew VTOL Concepts}} +} +@article{Beebe1990, +author = {Beebe, Nelson H F}, +journal = {Matrix}, +number = {3}, +title = {{High-Performance Matrix Multiplication}}, +year = {1990} +} +@article{Tuck1993, +author = {Tuck, E O}, +number = {December 1991}, +pages = {127--144}, +title = {{SOME ACCURATE SOLUTIONS OF THE LIFTING SURFACE INTEGRAL EQUATION}}, +volume = {35}, +year = {1993} +} +@article{Sezer-uzol, +author = {Sezer-uzol, Nilay}, +journal = {Methodology}, +pages = {1--10}, +title = {{Effect of Steady and Transient Wind Shear on the Wake Structure and Performance of a Horizontal Axis Wind Turbine Rotor}} +} +@book{Faculty2007a, +author = {Faculty, Mechanical Engineering}, +isbn = {9789993204831}, +title = {{Improving BEM †based Aerodynamic Models in Wind Turbine Design Codes Improving BEM †based Aerodynamic Models Tonio Sant Tonio Sant Improving BEM-based Aerodynamic Models in Wind Turbine Design Codes}}, +year = {2007} +} +@article{Sant2006, +author = {Sant, Tonio and Kuik, Gijs Van and Bussel, G J W Van}, +doi = {10.1002/we}, +number = {September}, +pages = {549--577}, +title = {{Blade Pressure Measurements on the Wake Vortex Model : Axial Conditions}}, +year = {2006} +} +@book{Døssing2007, +author = {D\o ssing, Mads}, +isbn = {9788755036338}, +keywords = {August 2007}, +number = {August}, +title = {{Vortex Lattice Modelling of Winglets on Wind Turbine Blades}}, +volume = {1621}, +year = {2007} +} +@article{Shenkar2010, +author = {Shenkar, Reuven}, +number = {September}, +title = {{Design and Optimization of Planar and Nonplanar Wind Turbine Blades Using Vortex Methods}}, +year = {2010} +} +@book{Olsen2001, +author = {Olsen, Anders Sm\ae rup}, +booktitle = {Maritime Engineering}, +isbn = {8789502582}, +number = {December}, +title = {{Optimisation of Propellers Using the Vortex-Lattice Method}}, +year = {2001} +} +@article{Herbert, +author = {Herbert, Henry E and Lamar, John E}, +journal = {Nasa Technical Memorandum}, +number = {April 1982}, +title = {{Technical Memorandum}} +} +@article{Lamar, +author = {Lamar, John E}, +journal = {Program}, +title = {{No Title}} +} +@article{Lamar1971, +author = {Lamar, E}, +journal = {Security}, +number = {February}, +title = {{Nasa tn d-6142}}, +year = {1971} +} +@article{Micallef2010, +author = {Micallef, Daniel and Sant, Tonio}, +journal = {New Horizons}, +number = {January}, +pages = {1--10}, +title = {{Aiaa 2010-462}}, +year = {2010} +} +@article{Sc2008, +author = {Sc, K R Dixon B A}, +journal = {Technology}, +keywords = {Darrieus, Vertical Axis Wind Turbine, Vorticity, U}, +title = {{The Near Wake Structure of a Vertical Axis Wind Turbine}}, +year = {2008} +} +@article{Komninos2008, +author = {Komninos, Konstantinos}, +title = {{Modeling considerations of the optimum rotor using vortex method}}, +year = {2008} +} +@article{Kloosterman2009, +author = {Kloosterman, M H M}, +keywords = {intership, msc, subject}, +title = {{Development of the Near Wake}}, +year = {2009} +} +@article{Krua1980, +author = {Krua, T}, +journal = {Arbeit}, +title = {{No Title}}, +volume = {651}, +year = {1980} +} +@article{Leishman2005, +author = {Leishman, J Gordon}, +journal = {Methodology}, +number = {January}, +pages = {1--24}, +title = {{COMPARISON OF MOMENTUM AND VORTEX METHODS FOR THE AERODYNAMIC}}, +year = {2005} +} +@article{Ichikawa1996, +author = {Ichikawa, Masami}, +journal = {Notes}, +number = {3}, +pages = {632--634}, +title = {{Analytical Expression of Induced Drag for a Finite Elliptic Wing}}, +volume = {33}, +year = {1996} +} +@article{Zioutis, +author = {Zioutis, Christos K}, +journal = {International Journal of Engineering}, +number = {3}, +pages = {521--537}, +title = {{Influence of Helicopter Rotor Wake Modeling on Blade Airload Predictions}} +} +@article{Yokota2009, +author = {Yokota, R and Narumi, T and Sakamaki, R and Kameoka, S and Obi, S and Yasuoka, K}, +doi = {10.1016/j.cpc.2009.06.009}, +issn = {0010-4655}, +journal = {Computer Physics Communications}, +keywords = {fast multipole method,graphics processing unit,pseudo-particle method}, +number = {11}, +pages = {2066--2078}, +publisher = {Elsevier B.V.}, +title = {{Fast multipole methods on a cluster of GPUs for the meshless simulation of turbulence D $\omega$ D $\omega$}}, +url = {http://dx.doi.org/10.1016/j.cpc.2009.06.009}, +volume = {180}, +year = {2009} +} +@article{Wie2010, +author = {Wie, Seong Yong and Lee, Jae Hoon and Kwon, Jang Hyuk and Lee, Duck Joo}, +doi = {10.1115/1.4002110}, +journal = {Journal of Fluids Engineering}, +number = {August}, +pages = {1--6}, +title = {{Far-Field Boundary Condition Effects of CFD and Free-Wake Coupling Analysis for Helicopter Rotor}}, +volume = {132}, +year = {2010} +} +@article{Mathematik2006, +author = {Mathematik, Fachbereich and Geometrie, Arbeitsgruppe and Visualisierung, Fachgebiet Mathematische}, +journal = {Group}, +title = {{Real time simulation of fluid flow}}, +year = {2006} +} +@article{Vetter2008, +author = {Vetter, Daniel}, +journal = {Most}, +number = {May}, +title = {{Fast Multipole Algorithm ( FMA ) Seminar Top Ten Algorithms “ Potential Fields in 2D The Fast Multipole Algorithm in 2D Advanced Topics FMA in 3D}}, +year = {2008} +} +@article{Honor1997, +author = {Honor, Jens and Larsen, Allan}, +journal = {Journal of Wind Engineering and Industrial Aerodynamics}, +keywords = {aerodynamic derivatives,conservation of vorticity,discrete vortex method,flow past a flat,moments,plate,vorticity boundary condition}, +pages = {183--193}, +title = {{Two dimensional discrete vortex method for application to bluff body aerodynamics d ¢ S}}, +volume = {68}, +year = {1997} +} +@article{Mitreva, +author = {Mitreva, Makedonka}, +journal = {Nature}, +title = {{The Human Body : An extended community}} +} +@article{Reconstruction, +author = {Reconstruction, Quantitative M R I}, +pages = {2006--2008}, +title = {{Application Case Study – Quantitative MRI Reconstruction}} +} +@article{Visualization2009, +author = {Visualization, Molecular}, +pages = {2007--2009}, +title = {{ECE 498AL Lecture 21-22 : Application Performance Case Studies : Molecular Visualization and Analysis VMD – “ Visual Molecular Dynamics â€}}, +year = {2009} +} +@article{Format2008, +author = {Format, Floating Point}, +number = {1}, +pages = {2006--2008}, +title = {{Floating Point Considerations}}, +volume = {0}, +year = {2008} +} +@article{Execution, +author = {Execution, Thread}, +journal = {Imagine}, +pages = {1--19}, +title = {{Performance Considerations}} +} +@article{Hwu, +author = {Hwu, Wen-mei}, +journal = {Memory}, +pages = {2006--2008}, +title = {{Chapter 4 CUDA Memories}} +} +@article{Hwu2008, +author = {Hwu, Wen-mei}, +pages = {2006--2008}, +title = {{Introduction}}, +year = {2008} +} +@article{Tryggvason1989, +author = {Tryggvason, Grbtar}, +journal = {Journal of Computational Physics}, +title = {{Simulation of Vortex Sheet Roil-up by Vortex Methods}}, +volume = {16}, +year = {1989} +} +@article{Totsuka2007, +author = {Totsuka, Yoshitaka and Obi, Shinnosuke}, +doi = {10.1299/jfst.2.248}, +journal = {Methods}, +keywords = {computational fluid dynamics,fmm,grid-free vortex,method,mps,turbulent flow,viscous dissipation process,vortex}, +number = {1}, +pages = {23--29}, +title = {{Science and A Validation of the Viscous Dissipation Model for Fast Vortex Methods in Simulations of Decaying Turbulence ∗}}, +volume = {2}, +year = {2007} +} +@article{Tchieu2010, +author = {Tchieu, Andrew A}, +journal = {Control}, +title = {{The Development of Low-Order Models for the Study of Fluid-Structure Interactions Thesis by}}, +volume = {2010}, +year = {2010} +} +@article{Tanaka2002, +author = {Tanaka, Nobuatsu}, +journal = {Fluid Dynamics}, +keywords = {discrete vortex method,hamiltonian,symplectic integrator,time integration}, +number = {3}, +pages = {2002}, +title = {{APPLICATION OF SYMPLECTIC INTEGRATORS}}, +volume = {11}, +year = {2002} +} +@article{Tutty1997, +author = {Tutty, O R}, +journal = {Exchange Organizational Behavior Teaching Journal}, +pages = {1--11}, +title = {{No Title}}, +year = {1997} +} +@article{Stone2010a, +author = {Stone, Christopher P and Duque, Earl P N and Hennes, Christopher C}, +number = {January}, +title = {{Rotor wake modeling with a coupled Eulerian and Vortex Particle Method}}, +year = {2010} +} +@article{Stock, +author = {Stock, Mark J and Gharakhani, Adrin}, +pages = {1--13}, +title = {{Toward efficient GPU-accelerated N -body simulations}} +} +@article{Stockb, +author = {Stock, Mark J and Stone, Christopher P and Science, Computational}, +pages = {1--12}, +title = {{Modeling Rotor Wakes with a Hybrid OVERFLOW-Vortex Method on a GPU Cluster}} +} +@article{Stock2006, +author = {Stock, Mark Joseph}, +title = {{A Regularized Inviscid Vortex Sheet Method for Three Dimensional Flows With Density Interfaces by}}, +year = {2006} +} +@article{Stockc, +author = {Stock, Mark J and Stone, Christopher P and Science, Computational}, +pages = {1--12}, +title = {{Modeling Rotor Wakes with a Hybrid OVERFLOW-Vortex Method on a GPU Cluster}} +} +@article{Sheel2008, +author = {Sheel, Tarun Kumar}, +journal = {Engineering}, +number = {March}, +title = {{Development of a Fast Vortex Method for Fluid Flow Simulation using Special-Purpose Computers}}, +year = {2008} +} +@article{Stock2010, +author = {Stock, Mark J and Gharakhani, Adrin}, +pages = {1--12}, +title = {{A GPU-accelerated Boundary Element Method and Vortex Particle Method}}, +year = {2010} +} +@article{Selle2004, +author = {Selle, Andrew}, +journal = {Work}, +keywords = {explosions,fluids,smoke,vortex methods,water}, +title = {{A Vortex Particle Method for Smoke , Water and Explosions}}, +year = {2004} +} +@article{No1996, +author = {No, Article}, +pages = {88--109}, +title = {{A New Diffusion Procedure for Vortex Methods}}, +volume = {109}, +year = {1996} +} +@article{Schmitz, +author = {Schmitz, Sven and Chattot, Jean-jacques}, +journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, +number = {1}, +title = {{A Coupled Navier-Stokes / Vortex-Panel Solver for the Numerical Analysis of Wind Turbines}} +} +@article{Schmitza, +author = {Schmitz, Sven and Chattot, Jean-jacques}, +journal = {Science}, +pages = {832--836}, +title = {{Influence of the vortical wake behind wind turbines using a coupled Navier-Stokes / Vortex-Panel methodology}} +} +@article{Scheurich2011, +author = {Scheurich, Frank}, +title = {{Modelling the Aerodynamics of Vertical-Axis Wind Turbines}}, +year = {2011} +} +@article{Sbalzarini:2007, +author = {Sbalzarini, Ivo F}, +title = {{Introduction to Particle Methods for the Simulation of Continuous Systems}}, +year = {2007} +} +@article{Sakajo2007, +author = {Sakajo, Takashi}, +keywords = {fast tree-code algorithms,flows on sphere,vortex,vortex method}, +pages = {1--19}, +title = {{A fast tree-code algorithm for the vortex method}}, +year = {2007} +} +@article{Rubel2007, +author = {Rubel, Michael T}, +title = {{A THEORY OF STATIONARITY AND ASYMPTOTIC APPROACH IN DISSIPATIVE SYSTEMS Thesis by}}, +volume = {2007}, +year = {2007} +} +@article{Rossinelli2010, +author = {Rossinelli, Diego and Bergdorf, Michael and Cottet, Georges-henri and Koumoutsakos, Petros}, +doi = {10.1016/j.jcp.2010.01.004}, +issn = {0021-9991}, +journal = {Journal of Computational Physics}, +number = {9}, +pages = {3316--3333}, +publisher = {Elsevier Inc.}, +title = {{GPU accelerated simulations of bluff body flows using vortex particle methods}}, +url = {http://dx.doi.org/10.1016/j.jcp.2010.01.004}, +volume = {229}, +year = {2010} +} +@article{Rowley, +author = {Rowley, Clarence W and Marsden, Jerrold E}, +journal = {ReCALL}, +pages = {1--7}, +title = {{Variational integrators for degenerate Lagrangians , with application to point vortices}} +} +@article{Society2011, +author = {Society, The Royal and Sciences, Physical}, +journal = {Society}, +number = {1886}, +pages = {481--494}, +title = {{Long-time symplectic integration : the example of four-vortex motion}}, +volume = {432}, +year = {2011} +} +@article{Oxley2009, +author = {Oxley, Gregory S and Eng, B}, +journal = {Simulation}, +number = {July}, +title = {{A 2-D Hybrid Euler-Compressible Vortex Particle Method For Transonic Rotorcraft Flows Doctorate of Philosophy A 2-D Hybrid Euler-Compressible Vortex Particle Method For Transonic Rotorcraft Flows}}, +year = {2009} +} +@article{Oberkampf2002, +author = {Oberkampf, William L and Trucano, Timothy G}, +journal = {Aerospace}, +number = {March}, +title = {{Verification and Validation in Computational Fluid Dynamics 1}}, +year = {2002} +} +@article{Musgrave2009, +author = {Musgrave, Ruth and Moghaddami, Mostafa and Avsarkisov, Victor and Wang, Ruoqian}, +title = {{Point Vortex Dynamics in Two Dimensions}}, +year = {2009} +} +@article{Nyland, +author = {Nyland, Lars and Prins, Jan}, +journal = {Simulation}, +pages = {677--696}, +title = {{Fast N-Body Simulation with CUDA}} +} +@article{Search2005, +author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Address, I P}, +doi = {10.1088/0034-4885/68/8/R01}, +journal = {Online}, +title = {{Smoothed particle hydrodynamics}}, +volume = {1703}, +year = {2005} +} +@article{Moffatt1998, +author = {Moffatt, H K}, +journal = {Advances}, +title = {{www.moffatt.tc FORMATION AND DISRUPTION OF CONCENTRATED VORTICES IN TURBULENCE}}, +year = {1998} +} +@article{Mcwilliams1984, +author = {Mcwilliams, By James C}, +title = {w}, +volume = {146}, +year = {1984} +} +@article{Ii2009, +author = {Ii, Federico and Napoli, Napoli}, +journal = {Notes}, +pages = {1--109}, +title = {{Stallo dinamico}}, +year = {2009} +} +@article{Marichal2011, +author = {Marichal, Y}, +journal = {Engineering}, +number = {November}, +pages = {2011}, +title = {{Development of a coupled vortex particle - finite volume method and application to the flow past a rectangular wing}}, +volume = {2011}, +year = {2011} +} + +@article{Lezar2011, +author = {Lezar, Evan}, +number = {March}, +title = {{GPU Acceleration of Matrix-based Methods in Computational Electromagnetics}}, +year = {2011} +} +@article{Computational1980, +author = {Computational, O F}, +journal = {Journal of Computational Physics}, +pages = {289--335}, +title = {{for Flow Simulation}}, +volume = {335}, +year = {1980} +} +@article{Lee2008, +author = {Lee, E and Moulinec, C and Xu, R and Violeau, D and Laurence, D and Stansby, P}, +doi = {10.1016/j.jcp.2008.06.005}, +journal = {Journal of Computational Physics}, +pages = {8417--8436}, +title = {{Comparisons of weakly compressible and truly incompressible algorithms for the SPH mesh free particle method}}, +volume = {227}, +year = {2008} +} +@article{E2002, +author = {E, Phane L E D I Z and Verga, Alberto}, +journal = {Framework}, +title = {{Viscous interactions of two co-rotating vortices before merging}}, +year = {2002} +} +@article{Koumoutsakos1997, +author = {Koumoutsakos, P}, +keywords = {inviscid vortical flows,vortex methods,vorticity axisymmetri-}, +pages = {821--857}, +title = {{Inviscid Axisymmetrization of an Elliptical Vortex}}, +volume = {857}, +year = {1997} +} +@article{Klamo2007, +author = {Klamo, Joseph Thomas}, +number = {September 2006}, +title = {{Effects of Damping and Reynolds Number on Vortex-Induced Vibrations Thesis by}}, +volume = {2007}, +year = {2007} +} +@article{Jones1996, +author = {Jones, K D and Dohring, C M and Platzer, M F}, +journal = {Methods}, +title = {{AIAA 96 − 0078 WAKE STRUCTURES BEHIND PLUNGING AIRFOILS : A COMPARISON OF NUMERICAL AND EXPERIMENTAL RESULTS Naval Postgraduate School Monterey , CA 34th Aerospace Sciences Meeting \& Exhibit}}, +year = {1996} +} +@article{Hunter2006, +author = {Hunter, John K}, +pages = {1--25}, +title = {{An Introduction to the Incompressible Euler Equations}}, +year = {2006} +} +@article{Ilie2009, +author = {Ilie, Marcel}, +doi = {10.1016/j.compstruc.2008.11.011}, +issn = {0045-7949}, +journal = {Computers and Structures}, +keywords = {helicopter blade,large-eddy simulation,vortex interaction}, +number = {11-12}, +pages = {758--768}, +publisher = {Elsevier Ltd}, +title = {{Numerical study of helicopter blade – vortex mechanism of interaction using large-eddy simulation}}, +url = {http://dx.doi.org/10.1016/j.compstruc.2008.11.011}, +volume = {87}, +year = {2009} +} +@article{Vortex1979, +author = {Vortex, O F}, +journal = {Society}, +number = {5}, +pages = {726--755}, +title = {{Convergence methods ii*}}, +volume = {16}, +year = {1979} +} +@article{Prete2011, +author = {Prete, Del}, +journal = {Society}, +number = {143}, +pages = {791--809}, +title = {{Convergence of Vortex Methods for Euler ' s Equations}}, +volume = {32}, +year = {2011} +} +@article{Gumerov2008, +author = {Gumerov, Nail A and Duraiswami, Ramani}, +doi = {10.1016/j.jcp.2008.05.023}, +journal = {Journal of Computational Physics}, +pages = {8290--8313}, +title = {{Fast multipole methods on graphics processors}}, +volume = {227}, +year = {2008} +} +@article{Graziani1995, +author = {Graziani, G and Ranucci, M and Piva, R}, +journal = {Computational Mechanics}, +title = {method for viscous flows}, +volume = {5}, +year = {1995} +} +@article{Graziani2002, +author = {Graziani, Giorgio and Bassanini, Piero}, +keywords = {forces,viscous flow,vortex shedding}, +pages = {283--303}, +title = {{Unsteady Viscous Flows about Bodies : Vorticity Release and Forces}}, +year = {2002} +} +@article{Publishers1994, +author = {Publishers, Kluweracademic and Sapienza, La}, +journal = {Structure}, +keywords = {viscous flow,vortex dynamics,vorticity structures}, +pages = {465--478}, +title = {{Viscous vs . Inviscid Interaction of a Vorticity Structure with a Circular Cylinder}}, +year = {1994} +} +@article{Getreuer2010, +author = {Getreuer, Pascal}, +number = {April}, +title = {{Writing M ATLAB C / MEX Code}}, +year = {2010} +} +@article{Gallizio, +author = {Gallizio, Federico and Torino, Politecnico}, +title = {model separated flows} +} +@article{Fuentes2003, +author = {Fuentes, O U Velasco and Vela, F A and Introduction, I}, +doi = {10.1063/1.1556293}, +journal = {Physics of Fluids}, +number = {4}, +title = {{Interaction of two equal vortices on a ⤠plane ´}}, +volume = {15}, +year = {2003} +} +@article{Ferreira, +author = {Ferreira, Carlos Sim\~{a}o}, +title = {{The near wake of the VAWT 2D and 3D views of the VAWT aerodynamics}} +} +@article{Deglaire2009, +author = {Deglaire, P and Engblom, S and \AA gren, O and Bernhoff, H}, +doi = {10.1016/j.euromechflu.2008.11.004}, +issn = {0997-7546}, +journal = {European Journal of Mechanics B/Fluids}, +keywords = {vertical axis turbine}, +number = {4}, +pages = {506--520}, +publisher = {Elsevier Masson SAS}, +title = {{European Journal of Mechanics B / Fluids Analytical solutions for a single blade in vertical axis turbine motion in two-dimensions}}, +url = {http://dx.doi.org/10.1016/j.euromechflu.2008.11.004}, +volume = {28}, +year = {2009} +} +@article{Taylor2011, +author = {Taylor, Publisher}, +journal = {Journal of Turbulence}, +number = {September}, +pages = {37--41}, +title = {{Simulation of three-dimensional bluff-body flows using vortex methods :}}, +year = {2011} +} +@article{Dushaw2008, +author = {Dushaw, Brian}, +journal = {Applied Physics}, +pages = {1--25}, +title = {{Matlab and CUDA}}, +year = {2008} +} +@article{Aeninck2006, +author = {Aeninck, R I C D}, +journal = {Movie}, +title = {{D EVELOPMENTS IN HYBRID APPROACHES Vortex method with known separation location Vortex method with near-wall Eulerian solver RANS-LES coupling}}, +year = {2006} +} +@article{Cruz, +author = {Cruz, Felipe A}, +journal = {Evaluation}, +pages = {1--23}, +title = {{Fast summation methods on the GPU with an application to the Adaptive Vortex Method}} +} +@article{Cnndilinnaa, +author = {Cnndilinnaa, Bnunclnry and Properties, Lurmervzaliun}, +journal = {Methods}, +title = {{Cemrerzrs}} +} +@article{No1996a, +author = {No, Article}, +journal = {Interpretation A Journal Of Bible And Theology}, +pages = {299--308}, +title = {{Artificial Viscosity Models for Vortex and Particle Methods}}, +volume = {308}, +year = {1996} +} +@article{Lmc-imag, +author = {Lmc-imag, Cottet and Outline, Joseph Fourier}, +title = {{Particle methods in CFD}} +} +@article{Cottet2002, +author = {Cottet, Georges-henri and Michaux, Bertrand and Ossia, Sepand}, +doi = {10.1006/jcph.2001.6963}, +journal = {Time}, +keywords = {isotropic turbulence,spectral method,vortex and particle method,vortex reconnection}, +title = {{A Comparison of Spectral and Vortex Methods in Three-Dimensional Incompressible Flows}}, +year = {2002} +} +@book{Chorin, +author = {Chorin, Alexandre J}, +isbn = {0387941975}, +title = {{Turbulence Vorticity and Turbulence}} +} +@article{Clarke1994, +author = {Clarke, N R and Tutty, O R}, +journal = {Science}, +number = {6}, +pages = {751--783}, +title = {{Pergamon}}, +volume = {23}, +year = {1994} +} +@article{Chen1998, +author = {Chen, Shiyi and Doolen, Gary D}, +keywords = {fluid flow simulation,lattice boltzmann method,mesoscopic approach}, +number = {Kadanoff 1986}, +title = {{LATTICE BOLTZMANN METHOD}}, +year = {1998} +} +@article{He2009, +author = {He, Chengjian and Zhao, Jinggen and Technology, Advanced Rotorcraft and View, Mountain}, +doi = {10.2514/1.36466}, +journal = {AIAA Journal}, +number = {4}, +title = {{Modeling Rotor Wake Dynamics with Viscous}}, +volume = {47}, +year = {2009} +} +@article{Cheng1997, +author = {Cheng, M and Chew, Y T and Luo, S C}, +journal = {International Journal}, +keywords = {bluff body,hybrid vortex method}, +number = {April 1996}, +pages = {253--274}, +title = {{A hybrid vortex method for flows over a bluff body}}, +volume = {24}, +year = {1997} +} +@article{Chatelain, +author = {Chatelain, Philippe and Curioni, Alessandro and Bergdorf, Michael and Rossinelli, Diego and Andreoni, Wanda and Koumoutsakos, Petros}, +pages = {479--489}, +title = {{Vortex Methods for Massively Parallel Computer Architectures}} +} +@article{Chatelain2010, +author = {Chatelain, Philippe and Bricteux, Laurent and Winckelmans, Gr\'{e}goire}, +journal = {Civil Engineering}, +number = {December}, +title = {{Vortex methods with immersed lifting lines applied to LES of wind turbine wakes Wake crisis}}, +year = {2010} +} +@article{Of2002, +author = {Of, O U R N A L}, +journal = {Journal of Turbulence}, +number = {March}, +pages = {17--20}, +title = {{Face-centred cubic lattices and particle redistribution in vortex methods † Philippe Chatelain and Anthony Leonard}}, +volume = {5248}, +year = {2002} +} +@article{Chatelain2005, +author = {Chatelain, Philippe}, +title = {{Contributions to the Three-Dimensional Vortex Element Method and Spinning Bluff Body Flows Thesis by}}, +volume = {2005}, +year = {2005} +} +@article{Casciola1996, +author = {Casciola, C M and Piva, R}, +journal = {Representations}, +pages = {345--356}, +title = {{Vorticity Generation on a Flat Surface in 3D Flows}}, +volume = {356}, +year = {1996} +} +@article{Search1990, +author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Address, I P}, +journal = {Nuclear Physics}, +title = {{Symplectic integration of Hamiltonian systems *}}, +volume = {231}, +year = {1990} +} +@article{Miocchi1998, +author = {Miocchi, P}, +pages = {29--48}, +title = {{A Comparison between the Fast Multipole Algorithm and the Tree-Code to Evaluate Gravitational Forces in 3-D}}, +volume = {48}, +year = {1998} +} +@article{Birdsall1997, +author = {Birdsall, Charles K and Fuss, Dieter}, +journal = {Atomic Energy}, +pages = {141--148}, +title = {{Clouds-in-Clouds , Clouds-in-Cells Physics for Many-Body Plasma Simulation 1}}, +volume = {148}, +year = {1997} +} +@article{Berkman1997, +author = {Berkman, Mert E and Berezin, Charles R and Torok, Michael S}, +journal = {Society}, +number = {c}, +title = {{No Title}}, +year = {1997} +} + + + +@article{Barba2005, +author = {Barba, L A and Leonard, A and Allen, C B}, +journal = {International Journal for Numerical Methods in Fluids}, +keywords = {core spreading,meshless cfd,viscous vortex interactions,vortex method}, +number = {April 2004}, +pages = {841--848}, +title = {{Vortex method with meshless spatial adaption for accurate simulation of viscous , unsteady vortical ows}}, +year = {2005} +} +@article{Bassanini1999, +author = {Bassanini, P and Casciola, C M and Lancia, M R and Piva, R and La, Roma and Matematica, Dipartimento and Moro, Ple A}, +journal = {Most}, +keywords = {aerodynamics,boundary integral equations,edge singularities,fluid dynamics,kutta condition}, +pages = {199--229}, +title = {{Edge Singularities and Kutta Condition in 3D Aerodynamics}}, +year = {1999} +} +@PHDTHESIS{barba:2004thesis, +author = {Barba, L. A.}, +title = {{Vortex Method for computing high-Reynolds number flows : Increased accuracy with a fully mesh-less formulation}}, +school = {California Institute of technology}, +year = {2004} +} +@article{Introduction1982, +author = {Introduction, An}, +pages = {1--72}, +title = {{6 . Aerodynamics of 3D Lifting Surfaces through Vortex Lattice Methods}}, +year = {1982} +} +@article{Anderson1985, +author = {Anderson, Christopher}, +journal = {Society}, +number = {3}, +pages = {413--440}, +title = {{ON VORTEX METHODS *}}, +volume = {22}, +year = {1985} +} +@book{Users, +author = {Users, Information T O}, +booktitle = {Engineering}, +isbn = {0612552942}, +title = {{Information to users}} +} +@article{Gaunaa2011a, +author = {Gaunaa, Mac and Rh, Pierre-elouan}, +journal = {Wind Energy}, +number = {February}, +title = {{Ris\o contributions to final report}}, +year = {2011} +} +@article{Gaunaa2011b, +author = {Gaunaa, Mac and S\o rensen, Niels N and D\o ssing, Mads}, +journal = {Wind Energy}, +number = {January}, +title = {{Prediction of steady aerodynamic performance of rotors with winglets using simple prescribed wake methods}}, +year = {2011} +} +@article{Garrel2003a, +author = {Garrel, A Van}, +journal = {Energy}, +number = {August}, +title = {{DEVELOPMENT OF A WIND TURBINE AERODYNAMICS SIMULATION MODULE}}, +year = {2003} +} +@article{Grasso2011, +author = {Grasso, F and Garrel, A Van and Schepers, J G}, +journal = {Wind Energy}, +number = {January}, +pages = {4--7}, +title = {{Development and Validation of Generalized Lifting Line Based Code for Wind Turbine Aerodynamics}}, +year = {2011} +} +@article{Currin2009, +author = {Currin, Prof Hugh and Long, Prof James}, +journal = {Systems Engineering}, +pages = {1--11}, +title = {{Horizontal Axis Wind Turbine Free Wake Model for AeroDyn}}, +year = {2009} +} +@article{Chattot2004, +author = {Chattot, Jean-jacques}, +journal = {Fluid Dynamics}, +number = {October}, +pages = {1--9}, +title = {{ANALYSIS AND DESIGN OF WINGS AND WING / WINGLET COMBINATIONS AT LOW SPEEDS}}, +volume = {13}, +year = {2004} +} +@article{Chattot2002, +author = {Chattot, Jean-jacques}, +journal = {Fluid Dynamics}, +number = {1}, +pages = {1--5}, +title = {{DESIGN AND ANALYSIS OF WIND TURBINES USING HELICOIDAL VORTEX MODEL Key Words :}}, +volume = {11}, +year = {2002} +} +@article{Chattot2001, +author = {Chattot, Jean-jacques}, +journal = {Fluid Dynamics}, +number = {2}, +title = {{OPTIMIZATION OF PROPELLERS USING HELICOIDAL VORTEX MODEL Key Words :}}, +volume = {9}, +year = {2001} +} +@article{Basom2011, +author = {Basom, Blair J and Maughmer, Mark D}, +number = {January}, +pages = {1--21}, +title = {{Inviscid Analysis of Horizontal-Axis Wind Turbines Using}}, +year = {2011} +} +@article{Introduction1982a, +author = {Introduction, An}, +pages = {1--72}, +title = {{6 . Aerodynamics of 3D Lifting Surfaces through Vortex Lattice Methods}}, +year = {1982} +} +@article{Mal2009, +author = {Mal, Pra\c{c}a and Gomes, Eduardo and Campos-sp, S\~{a}o Jos\'{e}}, +journal = {Control}, +keywords = {aerodynamics,uav,vortex lattice method}, +title = {{A VORTEX LATTICE PROGRAM FOR STEADY STATE AERODYNAMIC}}, +year = {2009} +} diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile new file mode 100644 index 0000000000..94452d9c98 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile @@ -0,0 +1,41 @@ +MAIN=BeamDynInput + +SVGTEXDIR=svgtex +SVGTEXOUTDIR=figs_svgtex +SVGTEXS=$(notdir $(wildcard $(SVGTEXDIR)/*.svg)) +SVGTEXS2PDFS=$(patsubst %,$(SVGTEXOUTDIR)/%,$(SVGTEXS:.svg=.pdf)) + + +INKSCAPE=inkscape +RM=rm -f +MV=mv +SLASH="/" +ifdef OS + # Windows specific + # INKSCAPE="C:/Program Files/Inkscape/inkscape.exe" + RM=del + MV=move /Y + SLASH="\\" +endif + +all: figspdf pdf + +pdf: figspdf + pdflatex -synctex=1 --file-line-error-style --shell-escape --interaction=nonstopmode $(MAIN) + bibtex $(MAIN).aux + +bibtex: + bibtex $(MAIN).aux + +figspdf: $(SVGTEXOUTDIR) $(SVGTEXS2PDFS) + +$(SVGTEXOUTDIR)/%.pdf:$(SVGTEXDIR)/%.svg + $(INKSCAPE) -z -D -o "$(SVGTEXOUTDIR)/$*.pdf" --export-latex "$<" + $(MV) "$(SVGTEXOUTDIR)$(SLASH)$*.pdf_tex" "$(SVGTEXOUTDIR)$(SLASH)$*.tex" +# $(INKSCAPE) -z -D --file="$<" --export-pdf="$(SVGTEXOUTDIR)/$*.pdf" --export-latex + +$(SVGTEXOUTDIR): + mkdir $@ + +clean: + $(RM) *.log *.aux *.out *.bbl *.blg *.toc diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg new file mode 100644 index 0000000000..c95ac3ba07 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg @@ -0,0 +1,1798 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + $z_0<0$ + $y_0<0$ + $z_{Fl}$ + $x_{Fl}$ + $y_{Fl}$ + + + + + + + + +   + + + + + + + + + $y_{c/2}<0$ + $x_{c/2}<0$ + $y_H$ + $z_H$ + $x_H$ + + + + + + + + +   + + + + + + + + + + $z_F$ + $x_F$ + $y_F$ + + + + + + + + +   + + + + + + - + + OpenFAST + HAWC2 + Flex + + + + + + + + + $x_F$ + $z_F$ + $y_F$ + $\Omega$ + + + + + + + + + + $y_H$ + $z_H$ + $x_H$ + $\Omega$ + + + + + + + + + $z_{Fl}$ + $x_{Fl}$ + $y_{Fl}$ + $\Omega$ + + + BlCrvAC$<0$ + BlSwpAC$>0$ + Pointing down for $\psi =0$ OpenFAST + HAWC2 + Flex + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg new file mode 100644 index 0000000000..b786bf85e6 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg @@ -0,0 +1,1283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + $z$ + $x$ + $y$ + + + + + + + +   + + + + + + + + + + + + + + + + $O$ + $C$ + $S$ + + + + + + $G$ + $y_S$ + $x_S$ + + + + + + + + + $z$ + $x$ + $y$ + $z_b$ + $x_b$ + $y_b$ + $O$ + - + + (OpenFAST, BeamDyn) + (Document) + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg new file mode 100644 index 0000000000..0ddccc8d77 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg @@ -0,0 +1,844 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg new file mode 100644 index 0000000000..d239bf0bbc --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg @@ -0,0 +1,1263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + $C$ + + + $z$ + $y$ + + + + $x$ + + + + $\kappa_x>0$ + + + + + + + + + + + $C$ + + + $z$ + $x$ + + + + $y$ + + + + $\kappa_y>0$ + + + + + $O$ + $O$ + + + + + + + + $F_z^c>0$ + + $F_z^c>0$ + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py new file mode 100644 index 0000000000..506af9db23 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py @@ -0,0 +1,79 @@ +import numpy as np +import pandas as pd + + +def elastodynBlade2Hawc2_raw(dfBld, R, E=3e10): + """ + INPUTS: + - dfBld: dataframe resulting from reading an ElastoDyn blade file + with columns: [ 'BlFract_[-]', 'PitchAxis_[-]', 'StrcTwst_[deg]', 'BMassDen_[kg/m]', 'FlpStff_[Nm^2]', 'EdgStff_[Nm^2]' + - R : rotor radius [m] + OUTPUTS: + - dfMeanLine: hawc2 c2def as DataFrame with columns ['x_[m]','y_[m]','z_[m]','twist_[deg]'] + - dfStructure: hawc2 stdata as Dataframe + """ + r = dfBld['BlFract_[-]'].values*R + twist = dfBld['StrcTwst_[deg]'].values + m = dfBld['BMassDen_[kg/m]'].values + EIflap = dfBld['FlpStff_[Nm^2]'].values + EIedge = dfBld['EdgStff_[Nm^2]'].values + + + # --- ElastoDyn 2 Hawc2 Structural data + columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] + nr = len(r) + dfStructure = pd.DataFrame(data=np.zeros((nr,len(columns))), columns=columns) + dfStructure['r_[m]'] = r + dfStructure['m_[kg/m]'] = m + # 'x_cg_[m]','y_cg_[m]' = 0 + # 'ri_x_[m]','ri_y_[m]' # TODO + # 'x_sh_[m]','y_sh_[m]','E_[N/m^2]', + # dfStructure['x_sh_[m]'] = 0 + # dfStructure['y_sh_[m]']= 0 + dfStructure['E_[N/m^2]'] = E # Arbitrary value + dfStructure['G_[N/m^2]'] = R/2/(1+0.3)*100 # Arbitrary value, but large (ElastoDyn stiff in torsion) + dfStructure['I_x_[m^4]'] = EIedge / E + dfStructure['I_y_[m^4]'] = EIflap / E + dfStructure['I_p_[m^4]'] = np.mean(EIflap+EIedge)/2*E*100 # Ip approximated as mean value of Ix+Iy, large value (ElastoDyn stiff in torsion) + dfStructure['k_x_[-]'] = 0 + dfStructure['k_y_[-]'] = 0 + dfStructure['A_[m^2]'] = 1 # Arbitrary value + dfStructure['pitch_[deg]']= -twist # TODO Taken as structural twist + # 'x_e_[m]','y_e_[m]' =0 + # Hawc2 = BeamDyn + # x_cg = -y_G + # y_cg = x_G + # x_sh = -y_S + # y_sh = x_S + # x_e = -y_C + # y_e = x_C + # I_y = EIx/E # [m^4] Hawc2 Iy is wrt to principal bending ye axis + # I_x = EIy/E # [m^4] Hawc2 Ix is wrt to principal bending xe axis + # I_p = GKt/G # [m^4] + # k_y = kxsGA/(G*A) + # k_x = kysGA/(G*A) + # pitch = theta_p*180/np.pi # [deg] NOTE: could use theta_p, theta_i or theta_s + # if np.all(np.abs(m)<1e-16): + # ri_y = m*0 + # ri_x = m*0 + # else: + # ri_y = np.sqrt(Ixi/m) # [m] + # ri_x = np.sqrt(Iyi/m) # [m] + # # Curvilinear position of keypoints (only used to get max radius...) + # dr= np.sqrt((kp_x[1:]-kp_x[0:-1])**2 +(kp_y[1:]-kp_y[0:-1])**2 +(kp_z[1:]-kp_z[0:-1])**2) + # r_p= np.concatenate(([0],np.cumsum(dr))) + # r=r_bar * r_p[-1] + + + # --- Defining "c2def" meanline (NOTE: ElastoDyn has no prebend or presweep, so x&y are set to zero for now + MMeanLine = np.column_stack((r*0, r*0, r, -twist)) + dfMeanLine = pd.DataFrame(data = MMeanLine, columns=['x_[m]','y_[m]','z_[m]','twist_[deg]']) + # BeamDyn: + # Y_H2 = kp_x + # Z_H2 = kp_z + # twist_H2 = - twist*180/np.pi # -[deg] + # columns=['x_[m]', 'y_[m]', 'z_[m]', 'twist_[deg]'] + # data = np.column_stack((X_H2, Y_H2, Z_H2, twist_H2)) + # dfMeanLine = pd.DataFrame(data=data, columns=columns) + + return dfMeanLine, dfStructure diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore new file mode 100644 index 0000000000..57604f7968 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore @@ -0,0 +1,2 @@ +_* +data diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py new file mode 100644 index 0000000000..4946652957 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py @@ -0,0 +1,77 @@ +""" +Convert a BeamDyn blade to a HAWC2 blade. +The part of the htc file defining the c2def line is written based on a template htc file +A new hawc2 "st" is written for the blade, using either: + - "Fully Populated Matrix" (FPM) + - Timoshenko beam peoperties +""" +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +# Local +from shutil import copyfile +np.set_printoptions(linewidth=1500) +import pyFAST.converters.beamdyn as bd + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + +# --- Parameters +FPM = True # Use fully populated matrix or regular st file +ConvertBackAndForth = False # True to check how the model is converted back and forth between hawc2 and beamdyn +# Optional give some values for those, otherwise inferred by minimization... +E = None +G = None +A = None +theta_p = None # Principal axis direction +# TODO Elastic Center location for FPM + +# Derived parameters +suffix='_FPM' if FPM else '' + +# --- BeamDynToHawc2 +htc_template = os.path.join(MyDir,'../../../data/templates/hawc2_template.htc') # readonly +BD_mainfile = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_BeamDyn.dat') # readonly +BD_bladefile = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_BeamDyn_Blade.dat') # readonly +H2_htcfile_new = '_NREL5MW{}.htc'.format(suffix) # will be created +H2_stfile = '_blade_st{}.st'.format(suffix) # will be created +copyfile(htc_template, H2_htcfile_new) # Backup template +df_c2, df_st = bd.beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile_new, H2_stfile, 'blade1', A=A, E=E, G=G, theta_p_in = theta_p, FPM=FPM, verbose=True) + +if ConvertBackAndForth: + # NOTE: beamdyn uses stiffness proportional damping + # Mu = 2 zeta / omega, with omega the blade mode frequencies, zeta damping ratio + # flap edge torsion "edge" "flap" "torsion" + Mu=[0.021955, 0.012818, 0.012818, 0.012818, 0.021955, 0.012818] + + # --- Htc2BeamDyn + H2_htcfile = H2_htcfile_new # readonly + BDMainTemplate = BD_mainfile # readonly, for template + BD_mainfile = '_NREL5MW_BeamDyn_2.dat' # will be created + BD_bladefile = '_NREL5MW_BeamDyn_Blade_2.dat' # will be created + fig = bd.htcToBeamDyn(H2_htcfile_new, 'blade1', BD_bladefile, BD_mainfile, BDMainTemplate, Mu=Mu, poly_exp=[2,3,4,5,6], ref_axis='c2def', bPlot=False) + + # --- BeamDynToHawc2 + H2_htcfile_new2 = '_NREL5MW_2.htc' + H2_stfile2 = '_blade_st_2.st' + copyfile(H2_htcfile_new, H2_htcfile_new2) + bd.beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile_new2, H2_stfile2, 'blade1', A=A, E=E, G=G, FPM=False, verbose=True) + + +if __name__ == '__test__': + # NOTE: NREL5MW is too simple of a tests since straight + np.testing.assert_almost_equal(df_c2['z_[m]'].values[-1] , 61.5 ) + np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[-1], 0 ) + np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[0] , -13.308 ) + np.testing.assert_almost_equal(df_st['x_cg_[m]'].values[10] , 0.0 ) + np.testing.assert_almost_equal(df_st['x_e_[m]'].values[10] , 0.0 ) + np.testing.assert_almost_equal(df_st['pitch_[deg]'].values[10], 0.0 ) + np.testing.assert_almost_equal(df_st['K11'].values[10] , 403729000.0 ) + np.testing.assert_almost_equal(df_st['K44'].values[10] , 4936840000.0 ) + np.testing.assert_almost_equal(df_st['K55'].values[10] , 7009180000.0 ) + np.testing.assert_almost_equal(df_st['K66'].values[10] , 1002120000.0 ) + np.testing.assert_almost_equal(df_st['K11'] , df_st['K22'].values) + + os.remove(H2_htcfile_new) + os.remove(H2_stfile) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py new file mode 100644 index 0000000000..51177909cf --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py @@ -0,0 +1,45 @@ +""" +Convert HAWC2 aerodynamic data to AeroDyn + +NOTE: + - Position of aerodynamic center assumed to be at c/4 from c2def. TODO +""" +import os +import numpy as np +import pandas as pd + +from pyFAST.converters.hawc2ToOpenfast import hawc2toAD +import matplotlib.pyplot as plt + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + +def main(): + np.set_printoptions(linewidth=300) + + # --- Hawc2 aero to AeroDyn + # See documentation in hawc2ToOpenfast.py + + # --- hawc2toAD + htcFilename = os.path.join(MyDir,'../../../data/NREL5MW/hawc2/NREL_5MW_reference_wind_turbine_hs2.htc') # readonly, hawc2 model file + ADbldFilename_out = '_NREL5MW_AD_bld.dat' # full path of AeroDyn blade file to be written + polarFilebase_out = '_Polars/_Polar_' # base path where polars will be written + correction3D = True # Apply 3D correction to polar data + tsr = 9 # Tip speed ratio used for 3D correction + r_AD=None # Radial position for AeroDyn. None = same as HAWC2 + #r_AD=[0.000000 , 2.625000 , 5.250000 , 7.875000 , 10.500000, 13.125000, 15.750000, 18.375000, 21.000000, 23.625000, 26.250000, 28.875000, 31.500000, 34.125000, 36.750000, 39.375000, 42.000000, 44.625000, 47.250000, 49.875000, 52.500000, 55.125000, 57.750000, 60.375000, 63.000000, 63.100000, 63.200000, 63.300000, 63.400000, 63.438000] + + # Convert + return hawc2toAD(htcFilename, r_AD=r_AD, ADbldFilename_out=ADbldFilename_out, polarFilebase_out=polarFilebase_out, correction3D=correction3D, tsr=tsr) + +if __name__=='__main__': + aeroNodes, polars, polarFilenames = main() + print('Polar files: ',polarFilenames) + print(aeroNodes) + plt.show() + +if __name__=='__test__': + main() + import shutil + os.remove('_NREL5MW_AD_bld.dat') + shutil.rmtree('_Polars') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py new file mode 100644 index 0000000000..ee5e65c6e7 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py @@ -0,0 +1,46 @@ +""" +Convert a HAWC2 blade data to BeamDyn +""" +import os +import numpy as np +import pandas as pd + +import pyFAST.converters.beamdyn as bd +import matplotlib.pyplot as plt + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + +def main(): + np.set_printoptions(linewidth=300) + + # --- Hawc2 to BeamDyn + # See documentation in hawc2ToBeamDyn.py + # ref_axis: string defining how the main axis of beamdyn will be defined. + # 'c2def': the reference axis is taken directly as Hawc2 c2def + # 'c2def-polyfit': the reference axis is Hawc2 c2def, smoothened out using a polyfit (see poly_exp) + # 'straight': the reference axis is straight (prebend and sweep are still included as offsets) + + # NOTE: beamdyn uses stiffness proportional damping + # Mu = 2 zeta / omega, with omega the blade mode frequencies, zeta damping ratio + # flap, edge, torsion, "edge" "flap" "torsion" + Mu=[1.0E-03, 1.0E-03, 1.0E-03, 0.0014, 0.0022, 0.0022] + + # --- Htc2BeamDyn + H2_htcfile = os.path.join(MyDir,'../../../data/NREL5MW/hawc2/NREL_5MW_reference_wind_turbine_hs2.htc') # readonly, hawc2 model file + BDMainTemplate = os.path.join(MyDir,'../../../data/templates/BeamDyn.dat') # readonly, template file to write main BD file + BD_mainfile = '_NREL5MW_BeamDyn_Created.dat' # Name of BeamDyn file to be writen + BD_bladefile = '_NREL5MW_BeamDyn_Blade_Created.dat' # Name of BeamDyn blade file to be written + fig = bd.htcToBeamDyn(H2_htcfile, 'blade1', BD_bladefile, BD_mainfile, BDMainTemplate, Mu=Mu, poly_exp=[2,3,4,5,6], ref_axis='c2def', bPlot=True, interpCurvilinear=False) + + return BD_mainfile, BD_bladefile + + +if __name__=='__main__': + main() + plt.show() + +if __name__=='__test__': + BD, BDbld = main() + os.remove(BD) + os.remove(BDbld) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py new file mode 100644 index 0000000000..5afa566698 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py @@ -0,0 +1,47 @@ +""" +Converts an OpenFAST model to HAWC2 for a horizontal axis wind turbine. +A template "htc" file is used, and modified: + - geometry of bodies (tower, towertop/nacelle, shaft, hub, blades) + - orientations + - structural files (blade only, tower todo) + - aerodynamic files (pc-ae) generated + - wind and aero options + - hawcstab2 inputs +""" + +import numpy as np +import pandas as pd +import os +from pyFAST.converters.openfastToHawc2 import FAST2Hawc2 + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + + +htcTemplate = os.path.join(MyDir,'../../../data/templates/hawc2_template.htc') +fstIn = os.path.join(MyDir,'../../../data/NREL5MW/Main_Onshore_OF2_BD.fst') +htcOut = os.path.join(MyDir,'_NREL5MW_from_OF.htc') # will be created +OPfile = None + +# htcTemplate = 'data/templates/hawc2_template.htc' +# fstIn = 'data/BAR0_OF/BAR0.fst' +# htcOut = 'data/BAR0_hawc2/BAR0_from_OF.htc' # will be created +# OPfile = 'data/BAR0_OF/Performance/ccblade.dat' # Optional oper. file + +# htcTemplate = 'templates/hawc2_template.htc' +# fstIn = './IEA-15-240-RWT/IEA-15-240-RWT-Monopile/IEA-15-240-RWT-Monopile_BD.fst' +# htcOut = './IEA-15-240-RWT/IEA_15MW_RWT_from_OF.htc' +# OPfile = None + + +FAST2Hawc2(fstIn, htcTemplate, htcOut, OPfile=OPfile, TwrFAFreq=0.1, TwrSSFreq=0.1, SftTorFreq=4, FPM = False) + + + +if __name__ == '__main__': + pass +if __name__ == '__test__': + try: + os.remove(htc_out) + except: + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py new file mode 100644 index 0000000000..8caedb9be9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py @@ -0,0 +1,32 @@ + + + +def dfstructure2stfile(dfStructure, H2_stfile): + """ + Write a HAWC2 st file from a pandas dataframe of structural data. + + For fully populated matrices, the columns are: + ['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] + For Timoshenko: + ['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] + + + TODO: + - make the input independent of column order + - use hawc2_st_file.py instead + + """ + + FPM = 'K11' in dfStructure + if FPM: + cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] + else: + cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]', 'x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] + + with open(H2_stfile, 'w') as f: + f.write('%i ; number of sets, Nset\n' % 1) + f.write('-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n') + f.write('#%i ; set number\n' % 1) + f.write('\t'.join(['{:20s}'.format(s) for s in cols])+'\n') + f.write('$%i %i\n' % (1, dfStructure.shape[0])) + f.write('\n'.join('\t'.join('%19.13e' %x for x in y) for y in dfStructure.values)) # TODO: this assumes a column order diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py new file mode 100644 index 0000000000..09c2705b11 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py @@ -0,0 +1,458 @@ +import numpy as np +from numpy import cos, sin +import pandas as pd +import os +from pyFAST.input_output.hawc2_htc_file import HAWC2HTCFile +from pyFAST.input_output.csv_file import CSVFile +from pyFAST.input_output.fast_input_file import FASTInputFile, BDFile + +from pyFAST.tools.pandalib import pd_interp1 + + +from .beam import * + +# --------------------------------------------------------------------------------} +# --- Writer function +# --------------------------------------------------------------------------------{ +def write_beamdyn_sections(filename,span,lK,lM,Mu=None,Label=''): + """ Write a BeamDyn section file, + span : list of nSpan span values from 0 to 1 + lK : list of nSpan 6*6 stiffness matrices + lM : list of nSpan 6*6 mass matrices + Mu : damping coefficient + """ + if (Mu is None): + Mu=[0]*6 + damp_type=0 + elif not hasattr(Mu, '__len__'): + Mu=np.asarray([Mu]*6) + Mu = np.asarray(Mu) + if len(Mu)==6: + damp_type=1 + + # --- Helper functions + def mat_tostring(M,fmt='.5e'): + return '\n'.join([' '+' '.join(['{:.6E}'.format(m) for m in M[i,:]]) for i in range(np.size(M,1))]) + def beamdyn_section_mat_tostring(x,K,M): + s='' + s+='{:.6f}\n'.format(x) + s+=mat_tostring(K) + #s+=np.array2string(K) + s+='\n' + s+='\n' + s+=mat_tostring(M) + #s+=np.array2string(M) + s+='\n' + s+='\n' + return s + + # --- Writing + with open(filename, 'w') as f: + f.write('------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE --------------------------\n') + f.write('! {} - Written using {} \n'.format(Label,os.path.basename(__file__))) + f.write('---------------------- BLADE PARAMETERS --------------------------------------\n') + f.write('{:5d} station_total - Number of blade input stations (-)\n'.format(len(span))) + f.write('{:5d} damp_type - Damping type (switch): 0: no damping; 1: viscous damping\n'.format(damp_type)) + f.write('---------------------- DAMPING COEFFICIENT------------------------------------\n') + f.write(' mu1 mu2 mu3 mu4 mu5 mu6\n') + f.write(' (s) (s) (s) (s) (s) (s)\n') + f.write(' {} {} {} {} {} {} \n'.format(*[Mu[i] for i in range(6)])) + f.write('---------------------- DISTRIBUTED PROPERTIES---------------------------------\n') + for s,K,M in zip(span,lK,lM): + f.write(beamdyn_section_mat_tostring(s,K,M)) + +# --------------------------------------------------------------------------------} +# --- Hawc2 to BeamDyn +# --------------------------------------------------------------------------------{ +def mypolyfit(x,y,exponents=[0,1,2,3]): + X_poly=np.array([]) + for i,c in enumerate(exponents): + if i==0: + X_poly = x**c + else: + X_poly = np.vstack((X_poly,x**c)) + try: + coeffs = np.linalg.lstsq(X_poly.T, y, rcond=None)[0] + except: + coeffs = np.linalg.lstsq(X_poly.T, y) + #print('Poly fit coeffs: ' + '+'.join(['{:.5f}^{}'.format(p,c) for p,c in zip(coeffs,exponents)])) + return np.dot(coeffs, X_poly) + +def htcToBeamDyn(HTCFile, bodyname, BDBldFileOut, BDMainFileOut=None, BDMainTemplate=None, Mu = 1.0e-03, + ref_axis='c2def-polyfit', poly_exp=[2,3,4,5], zref=None, Label='', bPlot=False, + bNoOffset=False, bNoPreSweep=False, nRootZeros=0, bCGOnMeanLine=False, interpCurvilinear=True): # Experimental options + """ + Writes BeamDyn inputs files from a HAWC2 htc file and the blade body name + INPUTS: + - HTCFile: path to a htc file + - bodyname + OTHER INPUTS: + see hawc2tobeamdyn + """ + htc = HAWC2HTCFile(HTCFile) + dfs = htc.toDataFrame() + H2MeanLine = dfs[bodyname+'_c2'] + H2Structure = dfs[bodyname+'_st'] + H2MeanLine = H2MeanLine[['x_[m]','y_[m]','z_[m]','twist_[deg]']] # Changing order + if len(Label)==0: + Label='Converted by hawc2ToBeamDyn.py from {}'.format(HTCFile) + + + return hawc2ToBeamDyn(H2MeanLine, H2Structure, BDBldFileOut, BDMainFileOut=BDMainFileOut, BDMainTemplate=BDMainTemplate, Mu=Mu, + ref_axis=ref_axis, poly_exp=poly_exp, zref=zref, Label=Label, bPlot=bPlot, + bNoOffset=bNoOffset, bNoPreSweep=bNoPreSweep, nRootZeros=nRootZeros, bCGOnMeanLine=bCGOnMeanLine, interpCurvilinear=interpCurvilinear) + +def hawc2ToBeamDyn(H2MeanLine, H2Structure, BDBldFileOut, BDMainFileOut=None, BDMainTemplate=None, Mu = 1.0e-03, + ref_axis='c2def-polyfit', poly_exp=[2,3,4,5], zref=None, Label='', bPlot=False, + bNoOffset=False, bNoPreSweep=False, nRootZeros=0, bCGOnMeanLine=False, interpCurvilinear=True): # Experimental options + """ + Writes BeamDyn inputs files from two csv files derived from "Hawc2" inputs + + INPUTS: + - H2MeanLine : dataframe or csv file with one header line, containing c2 def definition, (Hawc2 coordinates) + Column order has to be: ['x_[m]','y_[m]','z_[m]','twist_[deg]'] + - H2Structure: dataframe or csv that contains Hawc2 beam structural properties (typically found in a hawc2 st file) + Colums order has to be: ['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]',... ,'pitch_[deg]','x_e_[m]','y_e_[m]'] + - BDBldFileOut: filepath of the BeamDyn Blade file to be written + + OPTIONAL INPUTS: + - BDMainFileOut: filepath of the BeamDyn main file to be written + The file will contain the mean line definition. Requires BDMainTemplate + - BDMainTemplate: filepath of a BeamDyn main file, will be used as template for BDMainFileOut + - Mu : list of the 6 damping coeffficients to be used in the blade file + - ref_axis: string defining how the main axis of beamdyn will be defined. + 'c2def': the reference axis is taken directly as Hawc2 c2def + 'c2def-polyfit': the reference axis is Hawc2 c2def, smoothened out using a polyfit (see poly_exp) + 'straight': the reference axis is straight (prebend and sweep are still included as offsets) + - poly_exp: list of exponents used to perform the polyfit of Hawc2 c2def line + - zref: specifies "z" locations where sections have to be interpolated to. If "None", hawc2 mean line sections are used + - Label : string used as a label for the blade file + - bPlot : boolean, if true, a plot is generated + + EXPERIMENTAL INPUTS (not recommended, keep as default): + - bNoOffset: do not use offsets from mean line + If used with ref_axis='straight', this results in fully straight blade). + - bCBOnMeanLine: assumes CB on the mean axis + - bNoPreSweep: remove presweep + - nRootZeros: number of points that are set to have zero x and y at the root + """ + # --- Mean line definition (position and orientation) - Hawc2 "c2-def file", BeanDyn point "O" + if isinstance(H2MeanLine, pd.DataFrame): + c2def = H2MeanLine + else: + c2def = CSVFile(H2MeanLine).toDataFrame() + # For the equations below to be generic we force the column names + c2def.columns.values[0:4]=['x_[m]','y_[m]','z_[m]','twist_[deg]'] + + # --- If necessary, interpolate mean line to user defined positions + c2def_old = c2def.copy() + if zref is None: + # we dont interpolate + zref=c2def['z_[m]'].values + else: + z_old = c2def_old['z_[m]'].values + # safety checks + zref=np.asarray(zref) + if z_old[0]!=zref[0]: + raise Exception('`zref` start value should be {} to match input'.format(z_old[0])) + if z_old[-1]!=zref[-1]: + raise Exception('`zref` end value should be {} to match input'.format(z_old[-1])) + # interpolating to zref values + c2def = c2def[0:0] # emptying + for c in c2def_old.columns: + c2def[c] = np.interp(zref, z_old, c2def_old[c]) + + # --- Hawc2 ref axis (in BeamDyn system) + x_O_h2 = c2def['y_[m]'].values # kp_xr + y_O_h2 = - c2def['x_[m]'].values # kp_yr + z_O_h2 = c2def['z_[m]'].values # kp_zr + twist = - c2def['twist_[deg]'].values # initial_twist [deg] Hawc2 angle is positive around z, unlike the "twist" + + # --- Compute r_ref, curvilinear position of keypoints (for st file) + if interpCurvilinear: + dr= np.sqrt((x_O_h2[1:]-x_O_h2[0:-1])**2 +(y_O_h2[1:]-y_O_h2[0:-1])**2 +(z_O_h2[1:]-z_O_h2[0:-1])**2) + r_ref = np.concatenate(([0],np.cumsum(dr))) + else: + r_ref = np.abs(z_O_h2) + + + # --- BeamDyn ref axis + # Default: taken as c2def + x_O = x_O_h2.copy() # kp_xr + y_O = y_O_h2.copy() # kp_yr + z_O = z_O_h2.copy() # kp_zr + x_O[:nRootZeros] = 0 + y_O[:nRootZeros] = 0 + if ref_axis=='c2def': + # (see above) + pass + elif ref_axis=='straight': + # straight axis, with everything as offsets + x_O = 0*x_O_h2 # kp_xr + y_O = 0*y_O_h2 # kp_yr + elif ref_axis=='y-straight-polyfit': + # y-axis straight, x-axis poly fitted, with everything as offsets + y_O = 0*y_O_h2 # kp_yr + x_O = mypolyfit(z_O_h2, x_O, poly_exp) # kp_xr NOTE: we fit x_O (where nRoot was already inforced + x_O[:nRootZeros] =0 # enforcing zero displacements at root + elif ref_axis=='c2def-polyfit': + # Smooth mean line definition (position and orientation) + x_O = mypolyfit(z_O_h2, x_O, poly_exp) # kp_xr NOTE: we fit x_O (where nRoot was already inforced + y_O = mypolyfit(z_O_h2, y_O, poly_exp) # kp_yr + x_O[:nRootZeros] =0 # enforcing zero displacements at root + y_O[:nRootZeros] =0 + else: + raise NotImplementedError('ref_axis: {}'.format(ref_axis)) + + # difference between input_axis and smooth axis in global (blade root, BeamDyn convention) + x_off_g = (x_O_h2-x_O) + y_off_g = (y_O_h2-y_O) + + if bNoOffset: + x_off_g = 0*x_off_g # no offsets + y_off_g = 0*y_off_g + + # transform offset from global to local axis orientation + theta_z = -twist + x_off_s = x_off_g * np.cos(theta_z) + y_off_g * np.sin(theta_z) + y_off_s = -x_off_g * np.sin(theta_z) + y_off_g * np.cos(theta_z) + + + + + # --- Cross section properties + if isinstance(H2Structure, pd.DataFrame): + hwc_in = H2Structure + else: + hwc_in = CSVFile(H2Structure).toDataFrame() + # For the equations below to be generic we force the column names + hwc_in.columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] + # --- Interpolating to match c2def positions + hwc = pd_interp1(r_ref, 'r_[m]', hwc_in) + #if r_old[-1]1e-9): + raise Exception('Interpolation failed, radial position mismatch. Debug me.') + + # --- Setting Mass and stiffness matrices of each cross section + lM=[]; lK=[] + vx_G=[]; vy_G=[]; + vx_S=[]; vy_S=[]; + vx_C=[]; vy_C=[]; + for i,row in hwc.iterrows(): + if i=0, j< len(xp)-1) + bLower =j<0 + bUpper =j>=len(xp)-1 + jOK = j[bOK] + dd[bOK] = (x[bOK] - xp[jOK]) / (xp[jOK + 1] - xp[jOK]) + jBef=j + jAft=j+1 + # + # Use first and last values for anything beyond xp + jAft[bUpper] = len(xp)-1 + jBef[bUpper] = len(xp)-1 + jAft[bLower] = 0 + jBef[bLower] = 0 + if extrap=='bounded': + pass + # OK + elif extrap=='nan': + dd[~bOK] = np.nan + else: + raise NotImplementedError() + + return (1 - dd) * fp[:,jBef] + fp[:,jAft] * dd + + +def interpH2Polar(ae, pc, radius, alpha=None, ae_set_nr=1): + """ + Interpolate hawc2 polar to a given radial station + ae: an AEFile instance from wetb + pc: an PCFile instance from wetb + radius: (scalar) radial position where the polar is to be computed + + """ + r_ae = ae.ae_sets[ae_set_nr][:,0] + r_min = np.min(r_ae) + r_max = np.max(r_ae) + if radiusr_max: + raise Exception('Radius ({}) needs to be between {} and {}'.format(radius, r_min, r_max)) + + thickness = ae.thickness(radius, ae_set_nr) + pc_set_nr = ae.pc_set_nr(radius, ae_set_nr) + thicknesses, profiles = pc.pc_sets[pc_set_nr] + index = np.searchsorted(thicknesses, thickness) + if index == 0: + index = 1 + Cx0, Cx1 = profiles[index - 1:index + 1] + alpha0 = Cx0[:, 0] + alpha1 = Cx1[:, 0] + if alpha is None: + alpha = alpha1 + Cxi0 = multiInterp(alpha, alpha0, Cx0.T, extrap='bounded').T + Cxi1 = multiInterp(alpha, alpha1, Cx1.T, extrap='bounded').T + th0, th1 = thicknesses[index - 1:index + 1] + M = Cxi0 + (Cxi1 - Cxi0) * (thickness - th0) / (th1 - th0) + M[:,0] = alpha # to avoid numerics + return M, thickness, pc_set_nr, [th0, th1] + + + +# --------------------------------------------------------------------------------} +# --- From HAWC2 to AeroDyn +# --------------------------------------------------------------------------------{ +def AE_PC_C2_toAD(ae_filename, pc_filename, blade_c2def, r_AD=None, ADbldFilename_out=None, polarFilebase_out='Polar_', ae_set_nr=1, correction3D=True, tsr=9): + """ + Convert aerodynamic data from a hawc2 model (AE, PC, balde C2def) + to AeroDyn (AD) files. + + """ + # --- Read AE and PC file + ae = HAWC2AEFile(ae_filename) + pc = HAWC2PCFile(pc_filename) + ae_base = os.path.basename(ae_filename) + pc_base = os.path.basename(pc_filename) + #print(ae) + #print(pc) + + # --- Setting mean line + # C2def + if blade_c2def.shape[1]==4: + iOff=0 + elif blade_c2def.shape[1]==5: + iOff=1 + else: + raise Exception('blade_c2_def should have 4 or 5 columns') + xC2 = blade_c2def[:,0+iOff] + yC2 = blade_c2def[:,1+iOff] + zC2 = blade_c2def[:,2+iOff] + twistC2 = blade_c2def[:,3+iOff] # [deg] + + ae_set = ae.data.ae_sets[ae_set_nr] + radius_H2 = ae_set[:,0] + + # --- Default radius if user does not provided one + if r_AD is None: + r_AD = radius_H2 + + # --- Aerodynamic spanwise data + # Interpolating AE data to user requested positions + chord_H2 = np.interp(r_AD, ae_set[:,0], ae_set[:,1]) + trel_H2 = np.interp(r_AD, ae_set[:,0], ae_set[:,2]) + pcset_H2 = np.interp(r_AD, ae_set[:,0], ae_set[:,3]) + twist_H2 = np.interp(r_AD, zC2, twistC2) #[deg] + x_H2 = np.interp(r_AD, zC2, xC2) # sweep + y_H2 = np.interp(r_AD, zC2, yC2) # prebend + # Aerodynamic Center + dx_H2 = chord_H2/4 * np.cos(twist_H2*np.pi/180) + dy_H2 = chord_H2/4 * np.sin(twist_H2*np.pi/180) + xAC_H2=(x_H2+dx_H2) + yAC_H2=(y_H2+dy_H2) + + # --- AeroDyn nodes + # BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + aeroNodes = np.zeros((len(r_AD), 7)) + aeroNodes[:,0] = r_AD + aeroNodes[:,1] = yAC_H2 # BlCrvAC # NOTE: not c2def but AC + aeroNodes[:,2] = -xAC_H2 # BlSwpAC (positive along yOF, negative xH2) # NOTE: not c2def but AC + dr = np.gradient(aeroNodes[:,0]) + dx = np.gradient(aeroNodes[:,1]) + aeroNodes[:,3] = np.degrees(np.arctan2(dx,dr)) + aeroNodes[:,4] = -twist_H2 # [deg] + aeroNodes[:,5] = chord_H2 + aeroNodes[:,6] = (np.arange(len(r_AD))+1).astype(int) # One polar per radius.. + # Write to disk if needed + if ADbldFilename_out is not None: + Bld = ADBladeFile() + Bld.comment='Generated using HAWC2 inputs: AE:{} PC:{}'.format(ae_base, pc_base) + Bld['BldAeroNodes'] = aeroNodes + Bld.write(ADbldFilename_out) + aeroNodes = pd.DataFrame(data=aeroNodes, columns=['BlSpn_[m]', 'BlCrvAC_[m]', 'BlSwpAC_[m]', 'BlCrvAng_[deg]', 'BlTwist_[deg]', 'BlChord_[m]', 'BlAFID_[-]']) + + + # --- Write Polars for each radial station, interpolating on thickness + polarFilenames=[] + polars=[] + vAlpha = np.arange(361)-180 # make it an argument + nAlpha = len(vAlpha) + + writePolars = polarFilebase_out is not None + if writePolars: + baseDir = os.path.dirname(polarFilebase_out) + try: + os.makedirs(baseDir, exist_ok=True) + except: + pass + # Create a default polar file + pol = ADPolarFile() + + r_max = np.max(r_AD) + for ir, (r,c) in enumerate(zip(r_AD, chord_H2)): + M, t, pc_set, thicknesses = interpH2Polar(ae.data, pc.data, r, alpha=vAlpha, ae_set_nr=ae_set_nr) + comment = 'Thickness: {} - pc_set:{} - thicknesses:{}\nGenerated using HAWC2 inputs: AE:{} PC:{}'.format(t, pc_set, thicknesses, ae_base, pc_base) + Re = 1.0 # TODO + # Ensure that first value match last value + M[-1,1:] = M[0,1:] + # Create an instance of Polar class for convenience + P = Polar(Re=Re, alpha=vAlpha, cl=M[:,1], cd=M[:,2], cm=M[:,3], radians=False) + # Apply 3D correction + if r>0 and correction3D: + try: + P = P.correction3D( + r_over_R = r/r_max, + chord_over_r = c/r, + tsr=tsr, + lift_method="DuSelig", drag_method="None", blending_method="linear_25_45", + max_cl_corr=0.25) + except: + print('3D correction not applied at station ', ir) + + # Store polars + M = np.column_stack((P.alpha, P.cl, P.cd, P.cm)) + polars.append(M) + + # Write polar to disk + if writePolars: + polarFilename_out = polarFilebase_out+'{:03d}.dat'.format(ir+1) + P.toAeroDyn(filenameOut=polarFilename_out, templateFile=pol, Re=Re, comment=comment) + #(alpha0,alpha1,alpha2,cnSlope,cn1,cn2,cd0,cm0)=P.unsteadyParams() + #pol['AFCoeff']= M + #pol.comment= comment + #pol.write(polarFilename_out) + polarFilenames.append(polarFilename_out) + + return aeroNodes, polars, polarFilenames + + +def hawc2toAD(htc, r_AD=None, ADbldFilename_out=None, polarFilebase_out='Polar_', bladeBodyName='blade1', correction3D=True, tsr=9): + """ + Convert aerodynamic data from a hawc2 model (taken using an htc file as input) + to AeroDyn (AD) files. + + INPUTS: + - htc: filename of main htc file, or instance of HAWC2HTCFile + - r_AD: radial positions for AeroDyn file. If None, use hawc2 AE stations + - ADbldFilename_out: filename for AeroDyn blade. If None: nothing is written. + - polarFilebase_out: filebase, used to write the polar files. If None: nothing is written + - bladeBodyName: body name of blade in htc file + + TODO: + - Position of aerodynamic center assuemd to be at c/4 from c2def. TODO + """ + if isinstance(htc, HAWC2HTCFile): + pass + else: + # Read htc file + htc = HAWC2HTCFile(htc) + # Extra c2 def of blade + bdy = htc.bodyByName(bladeBodyName) + c2def = htc.bodyC2(bdy) + # Extract ae and pc filenames + if 'aero' not in htc.data.keys(): + raise Exception('Aero section not found in htc file: '.format(htcFilename)) + aero = htc.data['aero'] + ae_filename = os.path.join(htc.data.modelpath, aero.ae_filename[0]) + pc_filename = os.path.join(htc.data.modelpath, aero.pc_filename[0]) + + # Convert to AeroDyn + return AE_PC_C2_toAD(ae_filename, pc_filename, c2def, r_AD=r_AD, ADbldFilename_out=ADbldFilename_out, polarFilebase_out=polarFilebase_out, correction3D=correction3D, tsr=9) + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py new file mode 100644 index 0000000000..d045e03262 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py @@ -0,0 +1,364 @@ +import os +import numpy as np +import pandas as pd + +from pyFAST.input_output.hawc2_htc_file import HAWC2HTCFile +from pyFAST.input_output.hawc2_ae_file import HAWC2AEFile +from pyFAST.input_output.hawc2_pc_file import HAWC2PCFile +from pyFAST.input_output.csv_file import CSVFile +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.input_output.fast_input_deck import FASTInputDeck + +import pyFAST.converters.beamdyn as bd +import pyFAST.converters.elastodyn as ed +import pyFAST.converters.hawc2 as h2 + + +def FAST2Hawc2(fstIn, htcTemplate, htcOut, OPfile=None, TwrFAFreq=0.1, TwrSSFreq=0.1, SftTorFreq=4, FPM = False, Bld_E=None, Bld_G=None, Bld_A=None, Bld_theta_p=None): + """ + Write a Hawc2 and hawcstab2 model from an openfat model + """ + + # --- OpenFAST + fst = FASTInputDeck(fstIn, verbose=True) + IW = fst.fst_vt['InflowWind'] + ED = fst.fst_vt['ElastoDyn'] + AD = fst.fst_vt['AeroDyn15'] + Bld = fst.fst_vt['AeroDynBlade'] + AF = fst.fst_vt['af_data'] + twrOF = fst.fst_vt['ElastoDynTower'] + BD = fst.fst_vt['BeamDyn'] + BDbld = fst.fst_vt['BeamDynBlade'] + EDbld = fst.fst_vt['ElastoDynBlade'] + + # print(fst.ED.keys()) + # print(fst.ED['TwrFile']) + # print(fst.AD.keys()) + + # --- Derived parameters + outDir = os.path.dirname(htcOut) + if os.path.basename(outDir)=='htc': + outDir=os.path.dirname(outDir) # we go one more level up + outDataDir = os.path.join(outDir, 'data') + + try: + os.mkdir(outDir) + except: + pass + try: + os.mkdir(outDataDir) + except: + pass + + + # --- Read template htc file + htc = HAWC2HTCFile(htcTemplate) + # --------------------------------------------------------------------------------} + # --- Tower + # --------------------------------------------------------------------------------{ + # Damping + bdy = htc.bodyByName('tower') + bdy.damping_posdef.values[3] = (2*twrOF['TwrFADmp(1)']/100) / (TwrFAFreq*2*np.pi) # 2 zeta / omega + bdy.damping_posdef.values[4] = (2*twrOF['TwrSSDmp(1)']/100) / (TwrSSFreq*2*np.pi) # 2 zeta / omega + bdy.damping_posdef.values[5] = 0.01 # TODO TODO + # Mean line + val = htc.bodyC2(bdy) + val[:,3] = np.linspace(0., -ED['TowerHt'], val.shape[0]) + htc.setBodyC2(bdy, val) + + # --------------------------------------------------------------------------------} + # --- Towertop/nacelle + # --------------------------------------------------------------------------------{ + bdy = htc.bodyByName('towertop') + # Option 1, at node 2 + # bdy.concentrated_mass.values[0] = 2 + # bdy.concentrated_mass.values[1] = np.around(ED['NacCMyn'],4) + # bdy.concentrated_mass.values[2] = np.around(ED['NacCMxn'],4) + # bdy.concentrated_mass.values[3] = np.around(ED['Twr2Shft']-ED['NacCMzn'],4) # z distance from last towertopnode to NacCOG. NOTE: z hawc2 negative + # bdy.concentrated_mass.values[4] = np.around(ED['NacMass'] ,4) + # bdy.concentrated_mass.values[7] = np.around(ED['NacYIner']-ED['NacMass']*ED['NacCMxn']**2,2) # Jz at CM + # bdy.concentrated_mass.values[5] = bdy.concentrated_mass.values[7] # Jx ~ Jz + # bdy.concentrated_mass.values[6] = bdy.concentrated_mass.values[7]/10 # Jy ~ Jz /10 ? TODO + # Option 2, at node 1 + bdy.concentrated_mass.values[0] = 1 + bdy.concentrated_mass.values[1] = np.around(ED['NacCMyn'],4) + bdy.concentrated_mass.values[2] = np.around(ED['NacCMxn'],4) + bdy.concentrated_mass.values[3] = np.around(ED['NacCMzn'],4) + bdy.concentrated_mass.values[4] = np.around(ED['NacMass'] ,4) + NacInerZ = ED['NacYIner'] # TODO + NacInerFA = NacInerZ # TODO + NacInerSS = NacInerZ/10 # TODO + bdy.concentrated_mass.values[5] = NacInerFA + bdy.concentrated_mass.values[6] = NacInerSS + bdy.concentrated_mass.values[7] = NacInerZ + + # Mean line + val = htc.bodyC2(bdy) + val[:,3] = np.linspace(0, -ED['Twr2Shft'], val.shape[0]) + htc.setBodyC2(bdy, val) + # print(bdy) + + # --------------------------------------------------------------------------------} + # --- Shaft + # --------------------------------------------------------------------------------{ + bdy = htc.bodyByName('shaft') + # Torsion + SftOmega = SftTorFreq * 2 * np.pi + SftMass = ED['DTTorSpr']/SftOmega # Shaft omega = sqrt(k/m) + if SftMass >0: + SftZeta = ED['DTTorDmp']*SftOmega/(2*ED['DTTorSpr']) # zeta = c*omega/(2*) + SftBetaTors = 2*SftZeta / SftOmega # beta = 2 zeta/omega + else: + SftBetaTors = 1e-3 + SftBetaBending = 4e-4 # TODO + # Damping + bdy.damping_posdef.values[3] = SftBetaBending + bdy.damping_posdef.values[4] = SftBetaBending + bdy.damping_posdef.values[5] = SftBetaTors + # Mass and inertia + bdy.concentrated_mass.values[7] = np.around(ED['GenIner']*ED['GBRatio']**2, 2) + bdy.concentrated_mass__2.values[7] = np.around(ED['HubIner'],2) + bdy.concentrated_mass__2.values[4] = np.around(ED['HubMass'],2) + # Mean line + val = htc.bodyC2(bdy) + val[:,3] = np.linspace(0, -ED['OverHang'], val.shape[0]) + htc.setBodyC2(bdy, val) + # print(bdy) + + # --------------------------------------------------------------------------------} + # --- Hub + # --------------------------------------------------------------------------------{ + bdy = htc.bodyByName('hub1') + # Mean line + val = htc.bodyC2(bdy) + val[:,3] = np.linspace(0, ED['HubRad'], val.shape[0]) + htc.setBodyC2(bdy, val) + # print(bdy) + + # --------------------------------------------------------------------------------} + # --- Blade + # --------------------------------------------------------------------------------{ + # Mean line + # val[:,3] = np.linspace(0, ED['HubRad'], val.shape[0]) + + st_filefull = os.path.join(outDataDir, 'blade_st.st') # Full path of blade st file + st_file = os.path.relpath(st_filefull, outDir) # Relative to output dir + dfStructure = None + dfMeanLine = None + damp=[0, 0, 0] + if BD is not None: + # --- Convert from BeamDyn to HAWC2 c2def and st data + # also writes st file + # TODO A, E, G, theta_p + dfMeanLine, dfStructure = bd.beamDynToHawc2(BD, BDbld, H2_stfile=st_filefull, A=Bld_A, E=Bld_E, G=Bld_G, theta_p_in = Bld_theta_p, FPM=FPM, verbose=True) + + # --- Damping + damp[0] = BDbld['DampingCoeffs'][0,1] # TODO Check order + damp[1] = BDbld['DampingCoeffs'][0,0] # TODO + damp[2] = BDbld['DampingCoeffs'][0,2] # TODO + + elif EDbld is not None: + print('[WARN] Blade with ElastoDyn is not fully implemented') + if FPM: + print('[WARN] Cannot do FPM with ElastoDyn for now') + FPM = False # Cannot do FPM with ElastoDyn + + # --- ElastoDyn blade properties + M = EDbld['BldProp'] + dfBld = EDbld.toDataFrame() # r/R, PitchAxis(unused), StructuralTwist, m, EIflap, EIdge + R = ED['TipRad'] - ED['HubRad'] + + # --- Convert from ElastoDyn to HAWC2 c2def and st data + dfMeanLine, dfStructure = ed.elastodynBlade2Hawc2_raw(dfBld, R) + # Write st file + h2.dfstructure2stfile(dfStructure, st_filefull) + + # --- + # TODO TODO TODO Damping is completely wrong here + print('[WARN] Damping values for blades are wrong when using ElastoDyn blade') + damp[0] = EDbld['BldFlDmp(1)']/100 # + damp[1] = EDbld['BldFlDmp(2)']/100 + damp[2] = EDbld['BldEdDmp(1)']/100 + + + else: + raise Exception('No BeamDyn or ElastoDyn blade present') + # or throw a warning and skip the section below.. + + # --- Setup HAWC2 "body" data + bdy = htc.bodyByName('blade1') + bdy.nbodies = dfMeanLine.shape[0]-1 # One body per station -1 + bdy.timoschenko_input.ts_filename = st_file + bdy.timoschenko_input.set.values = [1,1] + + if FPM: + bdy.timoschenko_input.fpm = 1 + # Damping + #bdy['damping_aniso'] = bdy.damping_posdef.copy() + bdy.damping_posdef.name_='damping_aniso' + bdy.damping_posdef.name_='damping_aniso' + bdy.damping_posdef.values[0]=0 # no mass proportional damping + bdy.damping_posdef.values[1]=0 # no mass proportional damping + bdy.damping_posdef.values[2]=0 # no mass proportional damping + bdy.damping_posdef.values[3] = damp[0] + bdy.damping_posdef.values[4] = damp[1] + bdy.damping_posdef.values[5] = damp[2] + #raise NotImplementedError('Damping for FPM') + print('>>>> TODO TODO TODO DAMPING ') + else: + bdy.timoschenko_input.fpm = 0 + # Damping + bdy.damping_posdef.values[3] = damp[0] + bdy.damping_posdef.values[4] = damp[1] + bdy.damping_posdef.values[5] = damp[2] + + # Meanline + c2_def = htc.bodyC2(bdy) + c2_def = np.column_stack((np.arange(1,len(dfMeanLine)+1), dfMeanLine.values)) + c2_def = np.around(c2_def, 5) + htc.setBodyC2(bdy, c2_def) + + #print(bdy) + + + # --- Orientation + sec = htc.data.new_htc_structure.orientation + # tower top 2 shaft + #print(sec.relative__2.body2_eulerang__2) + sec.relative__2.body2_eulerang__2.values[0] = -ED['ShftTilt'] + sec.relative__2.body2_ini_rotvec_d1.values[3] = ED['RotSpeed']/60.*2*np.pi + # shaft 2 hubs + sec.relative__3.body2_eulerang__3.values[0] = - ED['PreCone(1)'] + sec.relative__4.body2_eulerang__3.values[0] = - ED['PreCone(2)'] + sec.relative__5.body2_eulerang__3.values[0] = - ED['PreCone(3)'] + # hubs 2 shaft + # sec.relative__6.body2_eulerang.values[2] = - np.around(ED['BlPitch(1)'],4) # TODO sign + # sec.relative__7.body2_eulerang.values[2] = - np.around(ED['BlPitch(2)'],4) # TODO sign + # sec.relative__8.body2_eulerang.values[2] = - np.around(ED['BlPitch(3)'],4) # TODO sign + #print(sec) + + # --------------------------------------------------------------------------------} + # --- Wind + # --------------------------------------------------------------------------------{ + sec = htc.data.wind + sec.density = AD['AirDens'] + sec.wsp = IW['HWindSpeed'] + sec.center_pos0.values[2] = -IW['RefHt'] + sec.shear_format.values[1] = IW['PLexp'] + sec.tower_shadow_method = min(AD['TwrPotent'], 1) + sec.tower_shadow_potential.radius.values[0:2] = [0, AD['TowProp'][0, 1]/2] + sec.tower_shadow_potential.radius__2.values[0:2] = [-AD['TowProp'][-1,0], AD['TowProp'][-1,1]/2] + sec.tower_shadow_potential_2.radius.values[0:2] = [0, AD['TowProp'][0, 1]/2] + sec.tower_shadow_potential_2.radius__2.values[0:2] = [ AD['TowProp'][-1,0], AD['TowProp'][-1,1]/2] + # print(sec) + + # --------------------------------------------------------------------------------} + # --- AeroDynamics + ## --- AE File + radius = Bld['BldAeroNodes'][:,0] + twist = Bld['BldAeroNodes'][:,4] + chord = Bld['BldAeroNodes'][:,5] + polar_id = Bld['BldAeroNodes'][:,6].astype(int) + pc_set_id = np.ones(chord.shape).astype(int) # Only one set + thickness = np.around((1-(polar_id-np.min(polar_id))/(np.max(polar_id)+1-np.min(polar_id)))*100,2) # fake thickness + #print(thickness) + ae = HAWC2AEFile() + ae.add_set(radius=radius, chord=chord, thickness=thickness, pc_set_id= pc_set_id) + ae_filenamefull = os.path.join(outDataDir, 'ae_file.ae') + ae.write(ae_filenamefull) + ae_filename = os.path.relpath(ae_filenamefull, outDir) + + # --- PC File + pc = HAWC2PCFile() + upolar_id, indices = np.unique(polar_id, return_index=True) + uthickness = np.flip(thickness[indices]) # NOTE: we flip + polars = [AF[i-1]['AFCoeff'] for i in np.flip(upolar_id)] # NOTE: we flip + + thicknesses = uthickness + pc.add_set(1, thicknesses, polars) + pc_filenamefull = os.path.join(outDataDir, 'pc_file.pc') + pc.write(pc_filenamefull) + pc_filename = os.path.relpath(pc_filenamefull, outDir) + + # --- Aero HTC + sec = htc.data.aero + sec.pc_filename = pc_filename + sec.ae_filename = ae_filename + sec.induction_method + sec.induction_method = AD['WakeMod'] + sec.tiploss_method = 1 if AD['TipLoss'] else 0 + sec.aerosections = Bld['BldAeroNodes'].shape[0] + + if AD['AFAeroMod']==2: + sec.dynstall_method= 2 + if AD['UAMod']==6: + sec.dynstall_method= 1 + else: + sec.dynstall_method = 0 + # print(sec) + + # print(htc.data) + + + # --------------------------------------------------------------------------------} + # --- Hawcstab2 + # --------------------------------------------------------------------------------{ + # Write operating point file + if OPfile is not None: + dfOP = CSVFile(OPfile).toDataFrame() + WS0=dfOP['Wind Speed (m/s)'] + WS0,Pitch0,RPM0,P0,T0 = dfOP['Wind Speed (m/s)'], dfOP['Pitch Angle (deg)'], dfOP['Rotor Speed (rpm)'], dfOP['Aerodynamic Power (W)']/1000, dfOP['Thrust (N)']/1000 + + # interpolating data to less points + WS=np.arange(np.min(dfOP['Wind Speed (m/s)']),np.max(dfOP['Wind Speed (m/s)'])+0.5,1) + Pitch = np.interp(WS, WS0, Pitch0) + RPM = np.interp(WS, WS0, RPM0) + P = np.interp(WS, WS0, P0) + T = np.interp(WS, WS0, T0) + + op_filenamefull = os.path.join(outDataDir, 'operational_data.opt') + op_filename = os.path.relpath(op_filenamefull, outDir) + with open(op_filenamefull, 'w') as f: + colnames=['Wind speed [m/s]','Pitch [deg]','Rot. speed [rpm]','Aero power [kW]','Aero thrust [kN]'] + f.write('{}\t{}\n'.format(len(WS), '\t'.join(colnames))) + for (ws,pi,rpm,p,t) in zip(WS,Pitch,RPM,P,T): + f.write('{}\t{}\t{}\t{}\t{}\n'.format(ws,pi,rpm,p,t)) + + sec=htc.data.hawcstab2 + sec.operational_data_filename = op_filename + + + # --- Write htc for hawc2 + htc.write(htcOut) + + # --- Write htc for hawcstab2 + del htc.data.output + del htc.data.simulation + del htc.data.dll + del htc.data.output + del htc.data.wind.tower_shadow_potential_2 # hawcstab2 can't handle this subblock + del htc.data.wind.mann + del htc.data.aerodrag # can't handle this either fuck annoying + del htc.data.wind.tower_shadow_potential + del htc.data.wind.tower_shadow_potential_2 + htc.data.wind.turb_format = 0 + htc.data.wind.tower_shadow_method = 0 + htc.data.wind.shear_format.values[0] = 1 + + # interpolate blde to less stations + bdy = htc.bodyByName('blade1') + bdy.nbodies = 24 + c2_def = htc.bodyC2(bdy) + z0 = dfMeanLine['z_[m]'].values + z2 = np.linspace(z0[0],z0[-1],25) + dfMeanLine2 = pd.DataFrame(columns=dfMeanLine.columns) + dfMeanLine2['z_[m]'] = z2 + dfMeanLine2['x_[m]'] = np.interp(z2, z0, dfMeanLine['x_[m]'].values) + dfMeanLine2['y_[m]'] = np.interp(z2, z0, dfMeanLine['y_[m]'].values) + dfMeanLine2['twist_[deg]'] = np.interp(z2, z0, dfMeanLine['twist_[deg]'].values) + c2_def = np.column_stack((np.arange(1,len(dfMeanLine2)+1), dfMeanLine2.values)) + c2_def = np.around(c2_def, 5) + htc.setBodyC2(bdy, c2_def) + + htc.write(htcOut.replace('.htc','_hs2.htc')) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py new file mode 100644 index 0000000000..11762411cc --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py @@ -0,0 +1,152 @@ +import unittest +import os +import numpy as np +from pyFAST.converters.beam import ComputeStiffnessProps, ComputeInertiaProps, TransformCrossSectionMatrix +from pyFAST.converters.beam import MM, KK +from pyFAST.converters.beam import K66toPropsDecoupled, M66toPropsDecoupled + + +class Test(unittest.TestCase): + + def test_BD_H2(self): + + K = np.array([[ 3.22114734e+09, 3.25671541e+07, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, -4.99668423e+07], + [ 3.25671541e+07, 2.43648638e+09, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.71784304e+07], + [ 0.00000000e+00, 0.00000000e+00, 2.44325680e+10, 1.90703565e+08, 1.78086138e+09, 0.00000000e+00], + [ 0.00000000e+00, 0.00000000e+00, 1.90703565e+08, 4.84065153e+10, 4.60061848e+09, 0.00000000e+00], + [ 0.00000000e+00, 0.00000000e+00, 1.78086138e+09, 4.60061848e+09, 5.23688767e+10, 0.00000000e+00], + [-4.99668423e+07, 3.71784304e+07, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 2.33148898e+10]]) + + I = np.array([[1439.88989372 , 0. , 0. , 0. , 0. , -5.92729626], + [ 0. , 1439.88989372 , 0. , 0. , 0. , -68.63720816], + [ 0. , 0. , 1439.88989372 , 5.92729626 , 68.63720816 , 0. ], + [ 0. , 0. , 5.92729626 , 2594.38760678 , 47.71380715 , 0. ], + [ 0. , 0. , 68.63720816 , 47.71380715 , 3434.04030538 , 0. ], + [ -5.92729626 , -68.63720816 , 0. , 0. , 0. , 6028.42791216]]) + + stiff = ComputeStiffnessProps() + inertia = ComputeInertiaProps() + transform = TransformCrossSectionMatrix() + xs , ys = stiff.ComputeShearCenter(K) + xt , yt = stiff.ComputeTensionCenter(K) + xm , ym = inertia.ComputeMassCenter(I) + + # Approach BECAS + # Translate to tension (elastic) center + Kel = transform.CrossSectionRotoTranslationMatrix(K, xt, yt, 0.) + # Find delta + DeltaBecas = stiff.OrientationPrincipalAxesBecas(Kel) + # Rotate by delta + Kel_DeltaBecas = transform.CrossSectionRotoTranslationMatrix(Kel, 0., 0., DeltaBecas) + + # Approach ANBA4 + # Translate to tension (elastic) center + Kdec = stiff.DecoupleStiffness(K) + # Find delta + DeltaANBA4 = stiff.PrincipalAxesRotationAngle(Kdec) + # Rotate by delta + Kel_DeltaANBA4 = transform.CrossSectionRotoTranslationMatrix(Kdec, 0., 0., -DeltaANBA4) + + #print(stiff.ComputeTensionCenter(Kel_DeltaBecas)) + #print(stiff.ComputeTensionCenter(Kel_DeltaANBA4)) + #print(stiff.OrientationPrincipalAxesBecas(Kel_DeltaBecas)) + #print(stiff.OrientationPrincipalAxesBecas(Kel_DeltaANBA4)) + #print(stiff.PrincipalAxesRotationAngle(Kel_DeltaBecas)) + #print(stiff.PrincipalAxesRotationAngle(Kel_DeltaANBA4)) + + np.testing.assert_almost_equal(xs, 0.015468467117843322, 6) + np.testing.assert_almost_equal(ys, 0.015668518364738194, 6) + np.testing.assert_almost_equal(xt, -0.07288883346195946, 6) + np.testing.assert_almost_equal(yt, 0.0078053017185913485, 6) + np.testing.assert_almost_equal(xm, -0.04766837274110846, 6) + np.testing.assert_almost_equal(ym, 0.004116492716458095, 6) + np.testing.assert_almost_equal(DeltaBecas, -0.5874557755802033, 6) + np.testing.assert_almost_equal(DeltaANBA4, 0.5874557755802033, 6) + + # --- Using decoupled methods + EA2, EIx2, EIy2, kxsGA2, kysGA2, GKt2, x_C2, y_C2, x_S2, y_S2, theta_p2, theta_s2 = K66toPropsDecoupled(K) + m2, Ixi2, Iyi2, Ip2, x_G2, y_G2, theta_i2 = M66toPropsDecoupled(I) + + np.testing.assert_almost_equal(x_C2, xt, 6) + np.testing.assert_almost_equal(y_C2, yt, 6) + np.testing.assert_almost_equal(x_S2, xs, 6) + np.testing.assert_almost_equal(y_S2, ys, 6) + np.testing.assert_almost_equal(DeltaANBA4, -theta_p2, 6) + + + + + def test_decoupleMat(self): + # Test the detection of main points (center of mass, tension and shear center) + # for a simple (decoupled) beam cross section matrix in BeamDyn coordinates + + # Main points + x_G = 0.175 + y_G = -0.1 + x_C = 0.164 + y_C = -0.13 + x_S = 0.18 + y_S = -0.136 + # Inertia param + m = 262. + Ixi = 163. + Iyi = 54. + I_p = 217. + theta_i = -0.1 + # Stiffness param + EA = 4.1e10 + EIxp = 2.1e9 + EIyp = 0.9e9 + GKt = 2.3e8 + GA = 3.75e9 + kxs = 0.5 + kys = 0.5 + theta_p = -0.1 + theta_s = -0.1 + # Mass and stiffness matrix for simple beam + M = MM(m, Ixi, Iyi, I_p, x_G, y_G, theta_i) # NOTE: theta_i in rad + K = KK(EA, EIxp, EIyp, GKt, GA, kxs, kys, x_C, y_C, theta_p, x_S, y_S, theta_s) # Note theta_p/s in rad + + # --- Using general methods + stiff = ComputeStiffnessProps() + inertia = ComputeInertiaProps() + xs , ys = stiff.ComputeShearCenter(K) + xt , yt = stiff.ComputeTensionCenter(K) + xm , ym = inertia.ComputeMassCenter(M) + + np.testing.assert_almost_equal(xs, x_S, 6) + np.testing.assert_almost_equal(ys, y_S, 6) + np.testing.assert_almost_equal(xm, x_G, 6) + np.testing.assert_almost_equal(ym, y_G, 6) + np.testing.assert_almost_equal(xt, x_C, 6) + np.testing.assert_almost_equal(yt, y_C, 6) + + # --- Using decoupled methods + EA2, EIx2, EIy2, kxsGA2, kysGA2, GKt2, x_C2, y_C2, x_S2, y_S2, theta_p2, theta_s2 = K66toPropsDecoupled(K) + m2, Ixi2, Iyi2, Ip2, x_G2, y_G2, theta_i2 = M66toPropsDecoupled(M) + + np.testing.assert_almost_equal(x_S2 ,x_S ,6) + np.testing.assert_almost_equal(y_S2 ,y_S ,6) + np.testing.assert_almost_equal(x_G2 ,x_G ,6) + np.testing.assert_almost_equal(y_G2 ,y_G ,6) + np.testing.assert_almost_equal(x_C2 ,x_C ,6) + np.testing.assert_almost_equal(y_C2 ,y_C ,6) + np.testing.assert_almost_equal(EA2 ,EA ,6) + np.testing.assert_almost_equal(EIx2/1e9,EIxp/1e9,6) + np.testing.assert_almost_equal(EIy2/1e9,EIyp/1e9,6) + np.testing.assert_almost_equal(kxsGA2 ,kxs*GA ,6) + np.testing.assert_almost_equal(kysGA2 ,kys*GA ,6) + np.testing.assert_almost_equal(GKt2/1e9,GKt/1e9 ,6) + np.testing.assert_almost_equal(theta_p2,theta_p ,6) + #np.testing.assert_almost_equal(theta_s2,theta_s ,6) # .... + np.testing.assert_almost_equal(m2 ,m ,6) + np.testing.assert_almost_equal(Ixi2 ,Ixi ,6) + np.testing.assert_almost_equal(Iyi2 ,Iyi ,6) + np.testing.assert_almost_equal(Ip2 ,I_p ,6) + + + + +if __name__ == '__main__': + + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py new file mode 100644 index 0000000000..b5b87d918b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py @@ -0,0 +1,52 @@ +import unittest +import os +import numpy as np +from pyFAST.converters.beam import * + + +class Test(unittest.TestCase): + + def test_MM_translate(self): + + # Inertia param + m = 262. + I_x = 163. + I_y = 54. + I_p = 217. + theta_i = -0.1 + x_G = 0.175 + y_G = -0.1 + x_A = -1 + y_A = 1 + # Referenec values - Mass and stiffness matrix for simple beam + M = MM(m, I_x, I_y, I_p, x_G, y_G, theta_i) # NOTE: theta_i in rad + M_G_ref = MM(m, I_x, I_y, I_p, 0, 0 , theta_i) + M_A_ref = MM(m, I_x, I_y, I_p, x_G-x_A, y_G-y_A, theta_i) # NOTE: theta_i in rad + J_G_ref = M_G_ref[3:6, 3:6] # Inertia at COG + + # Functions to compute inertial properties + inertia = ComputeInertiaProps() + xm , ym = inertia.ComputeMassCenter(M) + mass, J_G, Ref2COG = identifyRigidBodyMM(M) + + np.testing.assert_almost_equal(xm, x_G, 6) + np.testing.assert_almost_equal(ym, y_G, 6) + np.testing.assert_almost_equal(mass, m, 6) + np.testing.assert_almost_equal(Ref2COG[0], x_G, 6) + np.testing.assert_almost_equal(Ref2COG[1], y_G, 6) + np.testing.assert_almost_equal(Ref2COG[2], 0, 6) + np.testing.assert_almost_equal(J_G, J_G_ref, 6) + + + # Translating to the COG + M_G = TranslateSectionMassMatrix(M, x_G, y_G) + np.testing.assert_almost_equal(M_G, M_G_ref, 6) + + # Translating to another point + M_A = TranslateSectionMassMatrix(M, x_A, y_A) + np.testing.assert_almost_equal(M_A, M_A_ref, 6) + + +if __name__ == '__main__': + + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py new file mode 100644 index 0000000000..f7daf39c3d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py @@ -0,0 +1,60 @@ +import unittest +import os +import numpy as np +from shutil import copyfile +import pyFAST.converters.beamdyn as bd + +class Test(unittest.TestCase): + + def test_BAR0(self): + + # Get current directory so this script can be called from any location + MyDir=os.path.dirname(__file__) + # --- BeamDynToHawc2 + htc_template = os.path.join(MyDir,'../../../data/templates/hawc2_template.htc') # readonly + BD_mainfile = os.path.join(MyDir,'../../../data/BAR0/BAR0_BeamDyn.dat') # readonly + BD_bladefile = os.path.join(MyDir,'../../../data/BAR0/BAR0_BeamDyn_Blade.dat') # readonly + H2_htcfile_new = '_BAR0.htc' # will be created + H2_stfile = '_BAR0_st.st' # will be created + copyfile(htc_template, H2_htcfile_new) # Backup template + df_c2, df_st = bd.beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile_new, H2_stfile, 'blade1', FPM=True, verbose=True) + + # NOTE: NREL5MW is too simple of a tests since straight + np.testing.assert_almost_equal(df_c2['x_[m]'].values[10] , 0.0 ,3) + np.testing.assert_almost_equal(df_c2['y_[m]'].values[-1] , -4.0 ,3) + np.testing.assert_almost_equal(df_c2['z_[m]'].values[-1] ,99.9963 ,3) + np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[-1],2.57534 ,3) + np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[0] ,-20.0020 ,3) + + + np.testing.assert_almost_equal(df_st['m_[kg/m]'].values[10] ,694.6133 ,3) + + np.testing.assert_almost_equal(df_st['x_cg_[m]'].values[10] ,-0.74337 ,3) + np.testing.assert_almost_equal(df_st['y_cg_[m]'].values[10] , 0.01759 ,3) + + np.testing.assert_almost_equal(df_st['x_e_[m]'].values[10] ,-0.75435 ,3) + np.testing.assert_almost_equal(df_st['y_e_[m]'].values[10] , 0.01374 ,3) + + np.testing.assert_almost_equal(df_st['pitch_[deg]'].values[10],-1.48000 ,3) + + np.testing.assert_almost_equal(df_st['ri_x_[m]'].values[10] , 0.57088 ,3) + np.testing.assert_almost_equal(df_st['ri_y_[m]'].values[10] , 1.4513 ,3) + + np.testing.assert_almost_equal(df_st['K11'].values[10]/1e8 ,5.694503 ,3) + np.testing.assert_almost_equal(df_st['K22'].values[10]/1e8 ,2.467721 ,3) + np.testing.assert_almost_equal(df_st['K33'].values[10]/1e8 ,125.1373 ,3) + np.testing.assert_almost_equal(df_st['K44'].values[10]/1e8 ,44.0502 ,3) + np.testing.assert_almost_equal(df_st['K55'].values[10]/1e8 ,274.3825 ,3) + np.testing.assert_almost_equal(df_st['K66'].values[10]/1e8 ,8.232813 ,3) + + np.testing.assert_almost_equal(df_st['K12'].values[10]/1e6 , 1.20013 ,3) + np.testing.assert_almost_equal(df_st['K16'].values[10]/1e6 ,-33.9432 ,3) + np.testing.assert_almost_equal(df_st['K26'].values[10]/1e6 ,211.6052 ,3) + + os.remove(H2_htcfile_new) + os.remove(H2_stfile) + + +if __name__ == '__main__': + + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py new file mode 100644 index 0000000000..c4c22baf62 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py @@ -0,0 +1,33 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) + import matplotlib.pyplot as plt + plt.close('all') + print('\n--------------------------------------------------------------') + for f in files: + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore new file mode 100644 index 0000000000..305dbd7d64 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore @@ -0,0 +1,3 @@ +*.sum +*.bts +*.pdf diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py new file mode 100644 index 0000000000..a1718524a0 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py @@ -0,0 +1,577 @@ +import numpy as np +import os + +from pyFAST.fastfarm.FASTFarmCaseCreation import getMultipleOf + +class AMRWindSimulation: + ''' + This class is used to help prepare sampling planes for an AMR-Wind + simulation. The sampling planes will be used to generate inflow + data for FAST.Farm simulations. + Specifically, this class contains info from the AMR-Wind input file, + and it carries out simple calculations about the AMR-Wind + simulation + For reference, see https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html + ''' + + def __init__(self, wts:dict, + dt: float, prob_lo: tuple, prob_hi: tuple, + n_cell: tuple, max_level: int, + incflo_velocity_hh: tuple, + postproc_name='sampling', + buffer_lr = [3,6,3,3,2], + buffer_hr = 0.6, + ds_hr = None, ds_lr = None, + dt_hr = None, dt_lr = None, + mod_wake = None): + ''' + Values from the AMR-Wind input file + Inputs: + * dt: this should be a fixed dt value from the LES run + * incflo_velocity_hh: velocity vector, specifically at hub height + * buffer_lr: buffer for [xmin, xmax, ymin, ymax, zmax] in low-res box, in D + * buffer_hr: buffer for all directions (constant) in high-res box, in D + * mod_wake: Wake formulations within FAST.Farm. 1:polar; 2:curl; 3:cartesian. + ''' + # Process inputs + self.wts = wts + self.dt = dt + self.prob_lo = prob_lo + self.prob_hi = prob_hi + self.n_cell = n_cell + self.max_level = max_level + self.incflo_velocity_hh = incflo_velocity_hh + self.postproc_name_lr = f"{postproc_name}_lr" + self.postproc_name_hr = f"{postproc_name}_hr" + self.buffer_lr = buffer_lr + self.buffer_hr = buffer_hr + self.ds_hr = ds_hr + self.ds_lr = ds_lr + self.dt_hr = dt_hr + self.dt_lr = dt_lr + self.mod_wake = mod_wake + + # Placeholder variables, to be calculated by FFCaseCreation + self.output_frequency_lr = None + self.output_frequency_hr = None + self.sampling_labels_lr = None + self.sampling_labels_hr = None + self.nx_lr = None + self.ny_lr = None + self.nz_lr = None + self.xlow_lr = None + self.xhigh_lr = None + self.ylow_lr = None + self.yhigh_lr = None + self.zlow_lr = None + self.zhigh_lr = None + self.zoffsets_lr = None + self.hr_domains = None + + # Run extra functions + self._checkInputs() + self._calc_simple_params() + self._calc_sampling_params() + + + def __repr__(self): + s = f'<{type(self).__name__} object>\n' + s += f'Requested parameters:\n' + s += f' - Wake model: {self.mod_wake} (1:Polar; 2:Curl; 3:Cartesian)\n' + s += f' - Extent of high-res boxes: {self.extent_high} D to each side\n' + s += f' - Extent of low-res box: xmin={self.extent_low[0]} D, xmax={self.extent_low[1]} D, ymin={self.extent_low[2]} D, ymax={self.extent_low[3]} D, zmax={self.extent_low[4]} D\n' + + s += f'\n' + s += f'LES parameters:\n' + s += f' - velocity hub height: {self.incflo_velocity_hh} m/s\n' + s += f' - ds LES: ({self.dx0}, {self.dy0}, {self.dz0}) m\n' + s += f' - dt LES: {self.dt} s\n' + s += f' - Extents: ({self.prob_hi[0]-self.prob_lo[0]}, {self.prob_hi[1]-self.prob_lo[1]}, {self.prob_hi[2]-self.prob_lo[2]}) m\n' + s += f' - x: {self.prob_lo[0]}:{self.dx0}:{self.prob_hi[0]} m,\t ({self.n_cell[0]} points)\n' + s += f' - y: {self.prob_lo[1]}:{self.dy0}:{self.prob_hi[1]} m,\t ({self.n_cell[1]} points)\n' + s += f' - z: {self.prob_lo[2]}:{self.dz0}:{self.prob_hi[2]} m,\t ({self.n_cell[2]} points)\n' + + s += f'\n' + s += f'Low-res domain: \n' + s += f' - ds low: {self.ds_low_les} m\n' + s += f' - dt low: {self.dt_low_les} s (with LES dt = {self.dt} s, output frequency is {self.output_frequency_lr})\n' + s += f' - Sampling labels: {self.sampling_labels_lr}\n' + s += f' - Extents: ({self.xdist_lr}, {self.ydist_lr}, {self.zdist_lr}) m\n' + s += f' - x: {self.xlow_lr}:{self.ds_low_les}:{self.xhigh_lr} m,\t ({self.nx_lr} points)\n' + s += f' - y: {self.ylow_lr}:{self.ds_low_les}:{self.yhigh_lr} m,\t ({self.ny_lr} points)\n' + s += f' - z: {self.zlow_lr}:{self.ds_low_les}:{self.zhigh_lr} m,\t ({self.nz_lr} points)\n' + + s += f'\n' + s += f'High-res domain: \n' + s += f' - ds high: {self.ds_high_les} m\n' + s += f' - dt high: {self.dt_high_les} s (with LES dt = {self.dt} s, output frequency is {self.output_frequency_hr})\n' + s += f' - Sampling labels: {self.sampling_labels_hr}\n' + for t in np.arange(len(self.hr_domains)): + s += f" - Turbine {t}\n" + s += f" - Extents: ({self.hr_domains[t]['xdist_hr']}, {self.hr_domains[t]['ydist_hr']}, {self.hr_domains[t]['zdist_hr']}) m\n" + s += f" - x: {self.hr_domains[t]['xlow_hr']}:{self.ds_high_les}:{self.hr_domains[t]['xhigh_hr']} m,\t ({self.hr_domains[t]['nx_hr']} points)\n" + s += f" - y: {self.hr_domains[t]['ylow_hr']}:{self.ds_high_les}:{self.hr_domains[t]['yhigh_hr']} m,\t ({self.hr_domains[t]['ny_hr']} points)\n" + s += f" - z: {self.hr_domains[t]['zlow_hr']}:{self.ds_high_les}:{self.hr_domains[t]['zhigh_hr']} m,\t ({self.hr_domains[t]['nz_hr']} points)\n" + return s + + + def _checkInputs(self): + ''' + Check that the AMR-Wind inputs make sense + ''' + if len(self.prob_lo) != 3: + raise ValueError(f"prob_lo must contain 3 elements, but it has {len(self.prob_lo)}") + if len(self.prob_hi) != 3: + raise ValueError(f"prob_hi must contain 3 elements, but it has {len(self.prob_hi)}") + if len(self.incflo_velocity_hh) != 3: + raise ValueError(f"incflo_velocity_hh must contain 3 elements, but it has {len(self.incflo_velocity_hh)}") + if (self.prob_lo[0] >= self.prob_hi[0]): + raise ValueError("x-component of prob_lo larger than x-component of prob_hi") + if (self.prob_lo[1] >= self.prob_hi[1]): + raise ValueError("y-component of prob_lo larger than y-component of prob_hi") + if (self.prob_lo[2] >= self.prob_hi[2]): + raise ValueError("z-component of prob_lo larger than z-component of prob_hi") + if self.mod_wake not in [1,2,3]: + raise ValueError (f'mod_wake parameter can only be 1 (polar), 2 (curl), or 3 (cartesian). Received {self.mod_wake}.') + + def _calc_simple_params(self): + ''' + Calculate simulation parameters, given only AMR-Wind inputs + ''' + # Grid resolution at Level 0 + self.dx0 = (self.prob_hi[0] - self.prob_lo[0]) / self.n_cell[0] + self.dy0 = (self.prob_hi[1] - self.prob_lo[1]) / self.n_cell[1] + self.dz0 = (self.prob_hi[2] - self.prob_lo[2]) / self.n_cell[2] + self.ds0_max = max(self.dx0, self.dy0, self.dz0) + + # Grid resolution at finest refinement level + self.dx_refine = self.dx0/(2**self.max_level) + self.dy_refine = self.dy0/(2**self.max_level) + self.dz_refine = self.dz0/(2**self.max_level) + self.ds_refine_max = max(self.dx_refine, self.dy_refine, self.dz_refine) + + # Hub height wind speed + self.vhub = np.sqrt(self.incflo_velocity_hh[0]**2 + self.incflo_velocity_hh[1]**2) + + def _calc_sampling_params(self): + ''' + Calculate parameters for sampling planes + ''' + + self._calc_sampling_labels() + self._calc_sampling_time() + self._calc_grid_resolution() + self._calc_grid_placement() + + def _calc_sampling_labels(self): + ''' + Calculate labels for AMR-Wind sampling + ''' + sampling_labels_lr = ["Low"] + self.sampling_labels_lr = sampling_labels_lr + + sampling_labels_hr = [] + for turbkey in self.wts: + if 'name' in self.wts[turbkey].keys(): + wt_name = self.wts[turbkey]['name'] + else: + wt_name = f'T{turbkey+1}' + sampling_labels_hr.append(f"High{wt_name}_inflow0deg") + + self.sampling_labels_hr = sampling_labels_hr + + def _calc_sampling_time(self): + ''' + Calculate timestep values and AMR-Wind plane sampling frequency + ''' + + ## High resolution domain, dt_high_les + fmax_max = 0 + for turbkey in self.wts: + fmax_max = max(0, self.wts[turbkey]['fmax']) + if self.dt_hr is None: + # Calculate dt of high-res per guidelines + dt_hr_max = 1 / (2 * fmax_max) + self.dt_high_les = getMultipleOf(dt_hr_max, multipleof=self.dt) # Ensure dt_hr is a multiple of the AMR-Wind timestep + else: + # dt of high-res is given + self.dt_high_les = self.dt_hr + + if self.dt_high_les < self.dt: + raise ValueError(f"AMR-Wind timestep {self.dt} too coarse for high resolution domain! AMR-Wind timestep must be at least {self.dt_high_les} sec.") + + ## Low resolution domain, dt_low_les + cmeander_min = float("inf") + Dwake_min = float("inf") + for turbkey in self.wts: + cmeander_min = min(cmeander_min, self.wts[turbkey]['Cmeander']) + Dwake_min = min(Dwake_min, self.wts[turbkey]['D']) # Approximate D_wake as D_rotor + + cmax_min = float("inf") + for turbkey in self.wts: + self.cmax_min = min(cmax_min, self.wts[turbkey]['cmax']) + + if self.mod_wake == 1: + self.dr = self.cmax_min + dt_lr_max = cmeander_min * Dwake_min / (10 * self.vhub) + else: # mod_wake == 2 or 3 + self.dr = Dwake_min/10 + dt_lr_max = self.dr / (2* self.vhub) + + + if self.dt_lr is None: + # Calculate dt of low-res per guidelines + self.dt_low_les = getMultipleOf(dt_lr_max, multipleof=self.dt_high_les) # Ensure that dt_lr is a multiple of the high res sampling timestep + else: + # dt of low-res is given + self.dt_low_les = self.dt_lr + + + if self.dt_low_les < self.dt: + raise ValueError(f"AMR-Wind timestep {self.dt} too coarse for low resolution domain! AMR-Wind timestep must be at least {self.dt_low_les} sec.") + if self.dt_high_les > self.dt_low_les: + raise ValueError(f"Low resolution timestep ({self.dt_low_les}) is finer than high resolution timestep ({self.dt_high_les})!") + + ## Sampling frequency + self.output_frequency_hr = int(np.floor(round(self.dt_high_les/self.dt,4))) + self.output_frequency_lr = getMultipleOf(self.dt_low_les/self.dt, multipleof=self.output_frequency_hr) + + if self.output_frequency_lr % self.output_frequency_hr != 0: + raise ValueError(f"Low resolution output frequency of {self.output_frequency_lr} not a multiple of the high resolution frequency {self.output_frequency_hr}!") + + def _calc_grid_resolution(self): + ''' + Calculate sampling grid resolutions + ''' + + ## High resolution domain, ds_hr + # ASSUME: FAST.Farm HR zone lies within the region of maxmum AMR-Wind grid refinement + # NOTE: ds_hr is calculated independent of any x/y/z requirements, + # just blade chord length requirements + ds_hr_max = self.cmax_min + + if self.ds_hr is None: # Calculate ds_hr if it is not specified as an input + if ds_hr_max < self.ds_refine_max: + raise ValueError(f"AMR-Wind grid spacing of {self.ds_refine_max} is too coarse for high resolution domain! The high-resolution domain requires "\ + f"AMR-Wind grid spacing to be at least {ds_hr_max} m. If a coarser high-res domain is acceptable, then manually specify the "\ + f"high-resolution grid spacing to be at least {self.ds_refine_max} with ds_hr = {self.ds_refine_max}.") + self.ds_high_les = getMultipleOf(ds_hr_max, multipleof=self.ds_refine_max) # Ensure that ds_hr is a multiple of the refined AMR-Wind grid spacing + + self.ds_hr = self.ds_high_les + else: + self.ds_high_les = self.ds_hr + + if self.ds_high_les < self.ds_refine_max: + raise ValueError(f"AMR-Wind fine grid spacing {self.ds_refine_max} too coarse for high resolution domain! AMR-Wind grid spacing must be at least {self.ds_high_les} m.") + + ## Low resolution domain, ds_lr (s = x/y/z) + # ASSUME: FAST.Farm LR zone uses Level 0 AMR-Wind grid spacing + # NOTE: ds_lr is calculated independent of any x/y/z requirements, + # just time step and velocity requiements + if self.ds_lr is None: + ds_lr_max = self.dt_low_les * self.vhub**2 / 15 + self.ds_low_les = getMultipleOf(ds_lr_max, multipleof=self.ds_hr) # ds_hr is already a multiple of the AMR-Wind grid spacing, so here we need to make sure ds_lr is a multiple of ds_hr + self.ds_lr = self.ds_low_les + else: + self.ds_low_les = self.ds_lr + + if self.ds_low_les < self.ds0_max: + raise ValueError(f"AMR-Wind coarse grid spacing {self.ds0_max} too coarse for high resolution domain! AMR-Wind grid spacing must be at least {self.ds_low_les} m.") + if self.ds_low_les % self.ds_high_les != 0: + raise ValueError(f"Low resolution grid spacing of {self.ds_low_les} not a multiple of the high resolution grid spacing {self.ds_high_les}!") + + def _calc_grid_placement(self): + ''' + Calculate placement of sampling grids + ''' + + self._calc_hr_grid_placement() + self._calc_lr_grid_placement() + + def _calc_hr_grid_placement(self): + ''' + Calculate placement of high resolution grids + ''' + ### ~~~~~~~~~ Calculate high resolution grid placement ~~~~~~~~~ + hr_domains = {} + for turbkey in self.wts: + wt_x = self.wts[turbkey]['x'] + wt_y = self.wts[turbkey]['y'] + wt_z = self.wts[turbkey]['zhub'] + wt_D = self.wts[turbkey]['D'] + + # Calculate minimum/maximum HR domain extents + xlow_hr_min = wt_x - self.buffer_hr * wt_D + xhigh_hr_max = wt_x + self.buffer_hr * wt_D + ylow_hr_min = wt_y - self.buffer_hr * wt_D + yhigh_hr_max = wt_y + self.buffer_hr * wt_D + zhigh_hr_max = wt_z + self.buffer_hr * wt_D + + # Calculate the minimum/maximum HR domain coordinate lengths & number of grid cells + xdist_hr_min = xhigh_hr_max - xlow_hr_min # Minumum possible length of x-extent of HR domain + xdist_hr = self.ds_high_les * np.ceil(xdist_hr_min/self.ds_high_les) + nx_hr = int(xdist_hr/self.ds_high_les) + 1 + + ydist_hr_min = yhigh_hr_max - ylow_hr_min + ydist_hr = self.ds_high_les * np.ceil(ydist_hr_min/self.ds_high_les) + ny_hr = int(ydist_hr/self.ds_high_les) + 1 + + zdist_hr = self.ds_high_les * np.ceil(zhigh_hr_max/self.ds_high_les) + nz_hr = int(zdist_hr/self.ds_high_les) + 1 + + # Calculate actual HR domain extent + # NOTE: Sampling planes should measure at AMR-Wind cell centers, not cell edges + xlow_hr = getMultipleOf(xlow_hr_min, multipleof=self.ds_high_les) - 0.5*self.dx_refine + self.prob_lo[0]%self.ds_high_les + xhigh_hr = xlow_hr + xdist_hr + ylow_hr = getMultipleOf(ylow_hr_min, multipleof=self.ds_high_les) - 0.5*self.dy_refine + self.prob_lo[1]%self.ds_high_les + yhigh_hr = ylow_hr + ydist_hr + zlow_hr = 0.5 * self.dz0 / (2**self.max_level) + zhigh_hr = zlow_hr + zdist_hr + zoffsets_hr = np.arange(zlow_hr, zhigh_hr+self.ds_high_les, self.ds_high_les) - zlow_hr + + # Check domain extents + if xhigh_hr > self.prob_hi[0]: + raise ValueError(f"HR domain point {xhigh_hr} extends beyond maximum AMR-Wind x-extent!") + if xlow_hr < self.prob_lo[0]: + raise ValueError(f"HR domain point {xlow_hr} extends beyond minimum AMR-Wind x-extent!") + if yhigh_hr > self.prob_hi[1]: + raise ValueError(f"HR domain point {yhigh_hr} extends beyond maximum AMR-Wind y-extent!") + if ylow_hr < self.prob_lo[1]: + raise ValueError(f"HR domain point {ylow_hr} extends beyond minimum AMR-Wind y-extent!") + if zhigh_hr > self.prob_hi[2]: + raise ValueError(f"HR domain point {zhigh_hr} extends beyond maximum AMR-Wind z-extent!") + if zlow_hr < self.prob_lo[2]: + raise ValueError(f"HR domain point {zlow_hr} extends beyond minimum AMR-Wind z-extent!") + + # Save out info for FFCaseCreation + self.extent_high = self.buffer_hr*2 + + hr_turb_info = {'nx_hr': nx_hr, 'ny_hr': ny_hr, 'nz_hr': nz_hr, + 'xdist_hr': xdist_hr, 'ydist_hr': ydist_hr, 'zdist_hr': zdist_hr, + 'xlow_hr': xlow_hr, 'ylow_hr': ylow_hr, 'zlow_hr': zlow_hr, + 'xhigh_hr': xhigh_hr, 'yhigh_hr': yhigh_hr, 'zhigh_hr': zhigh_hr, + 'zoffsets_hr': zoffsets_hr} + hr_domains[turbkey] = hr_turb_info + self.hr_domains = hr_domains + + def _calc_lr_grid_placement(self): + ''' + Calculate placement of low resolution grid + ''' + + ### ~~~~~~~~~ Calculate low resolution grid placement ~~~~~~~~~ + # Calculate minimum/maximum LR domain extents + wt_all_x_min = float("inf") # Minimum x-value of any turbine + wt_all_x_max = -1*float("inf") + wt_all_y_min = float("inf") + wt_all_y_max = -1*float("inf") + wt_all_z_max = -1*float("inf") # Tallest rotor disk point of any turbine + Drot_max = -1*float("inf") + for turbkey in self.wts: + wt_all_x_min = min(wt_all_x_min, self.wts[turbkey]['x']) + wt_all_x_max = max(wt_all_x_max, self.wts[turbkey]['x']) + wt_all_y_min = min(wt_all_y_min, self.wts[turbkey]['y']) + wt_all_y_max = max(wt_all_y_min, self.wts[turbkey]['y']) + wt_all_z_max = max(wt_all_z_max, self.wts[turbkey]['zhub'] + 0.5*self.wts[turbkey]['D']) + Drot_max = max(Drot_max, self.wts[turbkey]['D']) + + xlow_lr_min = wt_all_x_min - self.buffer_lr[0] * Drot_max + xhigh_lr_max = wt_all_x_max + self.buffer_lr[1] * Drot_max + ylow_lr_min = wt_all_y_min - self.buffer_lr[2] * Drot_max + yhigh_lr_max = wt_all_y_max + self.buffer_lr[3] * Drot_max + zhigh_lr_max = wt_all_z_max + self.buffer_lr[4] * Drot_max + + # Calculate the minimum/maximum LR domain coordinate lengths & number of grid cells + xdist_lr_min = xhigh_lr_max - xlow_lr_min # Minumum possible length of x-extent of LR domain + self.xdist_lr = self.ds_low_les * np.ceil(xdist_lr_min/self.ds_low_les) # The `+ ds_lr` comes from the +1 to NS_LOW in Sec. 4.2.15.6.4.1.1 + # TODO: adjust xdist_lr calculation by also using `inflow_deg` + self.nx_lr = int(self.xdist_lr/self.ds_low_les) + 1 + + ydist_lr_min = yhigh_lr_max - ylow_lr_min + self.ydist_lr = self.ds_low_les * np.ceil(ydist_lr_min/self.ds_low_les) + # TODO: adjust ydist_lr calculation by also using `inflow_deg` + self.ny_lr = int(self.ydist_lr/self.ds_low_les) + 1 + + self.zdist_lr = self.ds_low_les * np.ceil(zhigh_lr_max/self.ds_low_les) + self.nz_lr = int(self.zdist_lr/self.ds_low_les) + 1 + + ## Calculate actual LR domain extent + # NOTE: Sampling planes should measure at AMR-Wind cell centers, not cell edges + # NOTE: Should we use dx/dy/dz values here or ds_lr? + # - AR: I think it's correct to use ds_lr to get to the xlow values, + # but then offset by 0.5*amr_dx0 if need be + self.xlow_lr = getMultipleOf(xlow_lr_min, multipleof=self.ds_low_les) - 0.5*self.dx0 + self.prob_lo[0]%self.ds_low_les + self.xhigh_lr = self.xlow_lr + self.xdist_lr + self.ylow_lr = getMultipleOf(ylow_lr_min, multipleof=self.ds_low_les) - 0.5*self.dy0 + self.prob_lo[1]%self.ds_low_les + self.yhigh_lr = self.ylow_lr + self.ydist_lr + self.zlow_lr = 0.5 * self.dz0 # Lowest z point is half the height of the lowest grid cell + self.zhigh_lr = self.zlow_lr + self.zdist_lr + self.zoffsets_lr = np.arange(self.zlow_lr, self.zhigh_lr+self.ds_low_les, self.ds_low_les) - self.zlow_lr + + ## Check domain extents + if self.xhigh_lr > self.prob_hi[0]: + raise ValueError(f"LR domain point {self.xhigh_lr} extends beyond maximum AMR-Wind x-extent!") + if self.xlow_lr < self.prob_lo[0]: + raise ValueError(f"LR domain point {self.xlow_lr} extends beyond minimum AMR-Wind x-extent!") + if self.yhigh_lr > self.prob_hi[1]: + raise ValueError(f"LR domain point {self.yhigh_lr} extends beyond maximum AMR-Wind y-extent!") + if self.ylow_lr < self.prob_lo[1]: + raise ValueError(f"LR domain point {self.ylow_lr} extends beyond minimum AMR-Wind y-extent!") + if self.zhigh_lr > self.prob_hi[2]: + raise ValueError(f"LR domain point {self.zhigh_lr} extends beyond maximum AMR-Wind z-extent!") + if self.zlow_lr < self.prob_lo[2]: + raise ValueError(f"LR domain point {self.zlow_lr} extends beyond minimum AMR-Wind z-extent!") + + ## Check grid placement + self._check_grid_placement() + + ## Save out info for FFCaseCreation + self.extent_low = self.buffer_lr + + def _check_grid_placement(self): + ''' + Check the values of parameters that were calculated by _calc_sampling_params + ''' + + ## Check that sampling grids are at cell centers + # Low resolution grid + amr_xgrid_level0 = np.arange(self.prob_lo[0], self.prob_hi[0], self.dx0) + amr_ygrid_level0 = np.arange(self.prob_lo[1], self.prob_hi[1], self.dy0) + amr_zgrid_level0 = np.arange(self.prob_lo[2], self.prob_hi[2], self.dz0) + + amr_xgrid_level0_cc = amr_xgrid_level0 + 0.5*self.dx0 # Cell-centered AMR-Wind x-grid + amr_ygrid_level0_cc = amr_ygrid_level0 + 0.5*self.dy0 + amr_zgrid_level0_cc = amr_zgrid_level0 + 0.5*self.dz0 + + sampling_xgrid_lr = self.xlow_lr + self.ds_lr*np.arange(self.nx_lr) + sampling_ygrid_lr = self.ylow_lr + self.ds_lr*np.arange(self.ny_lr) + sampling_zgrid_lr = self.zlow_lr + self.zoffsets_lr + + # TODO: These for loops could be replaced with a faster operation + for coord in sampling_xgrid_lr: + if coord not in amr_xgrid_level0_cc: + raise ValueError("Low resolution x-sampling grid is not cell cenetered with AMR-Wind's grid!") + for coord in sampling_ygrid_lr: + if coord not in amr_ygrid_level0_cc: + raise ValueError("Low resolution y-sampling grid is not cell cenetered with AMR-Wind's grid!") + for coord in sampling_zgrid_lr: + if coord not in amr_zgrid_level0_cc: + raise ValueError("Low resolution z-sampling grid is not cell cenetered with AMR-Wind's grid!") + + # High resolution grids (span the entire domain to make this check easier) + amr_xgrid_refine = np.arange(self.prob_lo[0], self.prob_hi[0], self.dx_refine) + amr_ygrid_refine = np.arange(self.prob_lo[1], self.prob_hi[1], self.dy_refine) + amr_zgrid_refine = np.arange(self.prob_lo[2], self.prob_hi[2], self.dz_refine) + + amr_xgrid_refine_cc = amr_xgrid_refine + 0.5*self.dx_refine + amr_ygrid_refine_cc = amr_ygrid_refine + 0.5*self.dy_refine + amr_zgrid_refine_cc = amr_zgrid_refine + 0.5*self.dz_refine + + for turbkey in self.hr_domains: + nx_hr = self.hr_domains[turbkey]['nx_hr'] + ny_hr = self.hr_domains[turbkey]['ny_hr'] + xlow_hr = self.hr_domains[turbkey]['xlow_hr'] + ylow_hr = self.hr_domains[turbkey]['ylow_hr'] + + sampling_xgrid_hr = xlow_hr + self.ds_hr*np.arange(nx_hr) + sampling_ygrid_hr = ylow_hr + self.ds_hr*np.arange(ny_hr) + sampling_zgrid_hr = self.hr_domains[turbkey]['zlow_hr'] + self.hr_domains[turbkey]['zoffsets_hr'] + + # TODO: These for loops could be replaced with a faster operation + for coord in sampling_xgrid_hr: + if coord not in amr_xgrid_refine_cc: + raise ValueError("High resolution x-sampling grid is not cell cenetered with AMR-Wind's grid!") + for coord in sampling_ygrid_hr: + if coord not in amr_ygrid_refine_cc: + raise ValueError("High resolution y-sampling grid is not cell cenetered with AMR-Wind's grid!") + for coord in sampling_zgrid_hr: + if coord not in amr_zgrid_refine_cc: + raise ValueError("High resolution z-sampling grid is not cell cenetered with AMR-Wind's grid!") + + + + def write_sampling_params(self, outdir=None): + ''' + Write out text that can be used for the sampling planes in an + AMR-Wind input file + + outdir: str + Input file to be written. If None, result is written to screen + ''' + + # Write high-level info for sampling + sampling_labels_lr_str = " ".join(str(item) for item in self.sampling_labels_lr) + sampling_labels_hr_str = " ".join(str(item) for item in self.sampling_labels_hr) + s = f"# Sampling info generated by AMRWindSamplingCreation.py\n" + s += f"incflo.post_processing = {self.postproc_name_lr} {self.postproc_name_hr} # averaging\n\n\n" + + s += f"# ---- Low-res sampling parameters ----\n" + s += f"{self.postproc_name_lr}.output_format = netcdf\n" + s += f"{self.postproc_name_lr}.output_frequency = {self.output_frequency_lr}\n" + s += f"{self.postproc_name_lr}.fields = velocity # temperature tke\n" + s += f"{self.postproc_name_lr}.labels = {sampling_labels_lr_str}\n\n" + + # Write out low resolution sampling plane info + zoffsets_lr_str = " ".join(str(item) for item in self.zoffsets_lr) + + s += f"# Low sampling grid spacing = {self.ds_lr} m\n" + s += f"{self.postproc_name_lr}.Low.type = PlaneSampler\n" + s += f"{self.postproc_name_lr}.Low.num_points = {self.nx_lr} {self.ny_lr}\n" + s += f"{self.postproc_name_lr}.Low.origin = {self.xlow_lr:.4f} {self.ylow_lr:.4f} {self.zlow_lr:.4f}\n" # Round the float output + s += f"{self.postproc_name_lr}.Low.axis1 = {self.xdist_lr:.4f} 0.0 0.0\n" # Assume: axis1 oriented parallel to AMR-Wind x-axis + s += f"{self.postproc_name_lr}.Low.axis2 = 0.0 {self.ydist_lr:.4f} 0.0\n" # Assume: axis2 oriented parallel to AMR-Wind y-axis + s += f"{self.postproc_name_lr}.Low.normal = 0.0 0.0 1.0\n" + s += f"{self.postproc_name_lr}.Low.offsets = {zoffsets_lr_str}\n\n\n" + + s += f"# ---- High-res sampling parameters ----\n" + s += f"{self.postproc_name_hr}.output_format = netcdf\n" + s += f"{self.postproc_name_hr}.output_frequency = {self.output_frequency_hr}\n" + s += f"{self.postproc_name_hr}.fields = velocity # temperature tke\n" + s += f"{self.postproc_name_hr}.labels = {sampling_labels_hr_str}\n" + + # Write out high resolution sampling plane info + for turbkey in self.hr_domains: + wt_x = self.wts[turbkey]['x'] + wt_y = self.wts[turbkey]['y'] + wt_D = self.wts[turbkey]['D'] + if 'name' in self.wts[turbkey].keys(): + wt_name = self.wts[turbkey]['name'] + else: + wt_name = f'T{turbkey+1}' + sampling_name = f"High{wt_name}_inflow0deg" + nx_hr = self.hr_domains[turbkey]['nx_hr'] + ny_hr = self.hr_domains[turbkey]['ny_hr'] + xlow_hr = self.hr_domains[turbkey]['xlow_hr'] + ylow_hr = self.hr_domains[turbkey]['ylow_hr'] + zlow_hr = self.hr_domains[turbkey]['zlow_hr'] + xdist_hr = self.hr_domains[turbkey]['xdist_hr'] + ydist_hr = self.hr_domains[turbkey]['ydist_hr'] + zoffsets_hr = self.hr_domains[turbkey]['zoffsets_hr'] + zoffsets_hr_str = " ".join(str(item) for item in zoffsets_hr) + + s += f"\n# Turbine {wt_name} at (x,y) = ({wt_x}, {wt_y}), with D = {wt_D}, grid spacing = {self.ds_hr} m\n" + s += f"{self.postproc_name_hr}.{sampling_name}.type = PlaneSampler\n" + s += f"{self.postproc_name_hr}.{sampling_name}.num_points = {nx_hr} {ny_hr}\n" + s += f"{self.postproc_name_hr}.{sampling_name}.origin = {xlow_hr:.4f} {ylow_hr:.4f} {zlow_hr:.4f}\n" # Round the float output + s += f"{self.postproc_name_hr}.{sampling_name}.axis1 = {xdist_hr:.4f} 0.0 0.0\n" # Assume: axis1 oriented parallel to AMR-Wind x-axis + s += f"{self.postproc_name_hr}.{sampling_name}.axis2 = 0.0 {ydist_hr:.4f} 0.0\n" # Assume: axis2 oriented parallel to AMR-Wind y-axis + s += f"{self.postproc_name_hr}.{sampling_name}.normal = 0.0 0.0 1.0\n" + s += f"{self.postproc_name_hr}.{sampling_name}.offsets = {zoffsets_hr_str}\n" + + + if outdir is None: + print(s) + else: + outfile = os.path.join(outdir, 'sampling_config.i') + if not os.path.exists(outdir): + print(f'Path {outdir} does not exist. Creating it') + os.makedirs(outdir) + if os.path.isfile(outfile): + raise FileExistsError(f"{str(outfile)} already exists! Aborting...") + + with open(outfile,"w") as out: + out.write(s) + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py new file mode 100644 index 0000000000..54f9c81f7f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py @@ -0,0 +1,2244 @@ +import pandas as pd +import numpy as np +import os, sys, shutil +import subprocess +import numpy as np +import xarray as xr + +from pyFAST.input_output import FASTInputFile, FASTOutputFile, TurbSimFile, VTKFile +from pyFAST.fastfarm import writeFastFarm, fastFarmTurbSimExtent, plotFastFarmSetup +from pyFAST.fastfarm.TurbSimCaseCreation import TSCaseCreation, writeTimeSeriesFile + +def cosd(t): return np.cos(np.deg2rad(t)) +def sind(t): return np.sin(np.deg2rad(t)) +def checkIfExists(f): + if os.path.isfile(f): + return True + else: + print(f'File {f} does not exist.') + return False + +def shutilcopy2_untilSuccessful(src, dst): + shutil.copy2(src, dst) + if not checkIfExists(dst): + print(f'File {dst} not created. Trying again.\n') + shutilcopy2_untilSuccessful(src,dst) + +def getMultipleOf(val, multipleof): + ''' + Get integer multiple of a quantity. + The val/multipleof quantity can be within numerical error of an integer + and so additional care must be take + ''' + valmult = int(round(val/multipleof,6))*multipleof + return round(valmult, 4) + +def modifyProperty(fullfilename, entry, value): + ''' + Modify specific properties of certain files + + Inputs + ====== + fullfilename: str + Full filepath of the file. + entry: str + Entry in the input file to be modified + value: + Value to go on the entry. No checks are made + + ''' + # Open the proper file + f = FASTInputFile(fullfilename) + # Change the actual value + f[entry] = value + # Save the new file + f.write(fullfilename) + return + + + +class FFCaseCreation: + + def __init__(self, + path, + wts, + tmax, + zbot, + vhub, + shear, + TIvalue, + inflow_deg, + dt_high_les = None, + ds_high_les = None, + extent_high = None, + dt_low_les = None, + ds_low_les = None, + extent_low = None, + ffbin = None, + mod_wake = 1, + yaw_init = None, + ADmodel = None, + EDmodel = None, + nSeeds = 6, + seedValues = None, + LESpath = None, + sweepWakeSteering = False, + sweepYawMisalignment = False, + refTurb_rot = 0, + verbose = 0): + ''' + Full setup of a FAST.Farm simulations, can create setups for LES- or TurbSim-driven scenarios. + + Inputs + ------ + path: str + Full path for the target case directory + wts: dictionary + Wind farm layout and turbine parameters in dictionary form + tmax: scalar + Max simulation time given in seconds + vhub: list of scalars or single scalar + Wind speeds at hub height to sweep on. Accepts a list or single value + shear: list of scalars or single scalar + Shear values (power-law exponents) to sweep on. Accepts a list or single value + TIvalue: list of scalars or single scalar + TI values at hub height to sweep on. Accepts a list or single value + inflow_deg: list of scalars or single scalar + Inflow angles to sweep on. Accepts a list or single value + dt_high_les: scalar + Time step of the desired high-resolution box. If LES boxes given, should + match LES box; otherwise desired TurbSim boxes. Default values as given in the + modeling guidances are used if none is given + ds_high_les: scalar + Grid resolution of the desired high-resolution box. If LES boxes given, should + match LES box; otherwise desired TurbSim boxes. Default values as given in the + modeling guidances are used if none is given + dt_low_les: scalar + Time step of the desired low-resolution box. If LES boxes given, should match + match LES box; otherwise desired TurbSim boxes. Default values as given in the + modeling guidances are used if none is given + ds_low_les: scalar + Grid resolution of the desired low-resolution box. If LES boxes given, should + match LES box; otherwise desired TurbSim boxes. Default values as given in the + modeling guidances are used if none is given + ff_bin: str + Full path of the FAST.Farm binary to be used. If not specified, the one available + in the $PATH will be used + mod_wake: int + Wake model to be used on the computation of high- and low-res boxes temporal and + spatial resolutions if those are not specified + yaw_init: list of scalars or single scalar + List of yaw to sweep on. Given as a 2-D array if len(inflow_deg)>1. One row of yaw + per wind direction given in inflow_deg. Each row has nTurbines values + ADmodel: list of strings + List of AeroDyn/AeroDisk models to use for each case + EDmodel: list of strings + List of ElastoDym/SimplifiedElastoDyn models to use for each case + nSeeds: int + Number of seeds used for TurbSim simulations. If changing this value, give seedValues + seedValues: list of int + Seed value for each seed of requested TurbSim simulations if nSeeds!=6 + LESpath: str or list of strings + Full path of the LES data, if driven by LES. If None, the setup will be for TurbSim inflow. + LESpath can be a single path, or a list of paths of the same length as the sweep in conditions. + For example, if TIvalue=[8,10,12], then LESpath can be 3 paths, related to each condition. + sweepWakeSteering: bool + Whether or not to perform a sweep with wake steering + sweepYawMisalignment: bool + Whether or not to perform a sweep with and without yaw misalignment perturbations + refTurb_rot: int + Index of reference turbine which the rotation of the farm will occur. Default is 0, the first one. + Not fully tested. + verbose: int + Verbosity level, given as integers <5 + + ''' + + self.path = path + self.wts = wts + self.tmax = tmax + self.zbot = zbot + self.vhub = vhub + self.shear = shear + self.TIvalue = TIvalue + self.inflow_deg = inflow_deg + self.dt_high_les = dt_high_les + self.ds_high_les = ds_high_les + self.dt_low_les = dt_low_les + self.ds_low_les = ds_low_les + self.extent_low = extent_low + self.extent_high = extent_high + self.ffbin = ffbin + self.mod_wake = mod_wake + self.yaw_init = yaw_init + self.ADmodel = ADmodel + self.EDmodel = EDmodel + self.nSeeds = nSeeds + self.LESpath = LESpath + self.sweepWS = sweepWakeSteering + self.sweepYM = sweepYawMisalignment + self.seedValues = seedValues + self.refTurb_rot = refTurb_rot + self.verbose = verbose + self.mod_wake = mod_wake + self.attempt = 1 + + + if self.verbose>0: print(f'Checking inputs...', end='\r') + self._checkInputs() + if self.verbose>0: print(f'Checking inputs... Done.') + + + if self.verbose>0: print(f'Setting rotor parameters...', end='\r') + self._setRotorParameters() + if self.verbose>0: print(f'Setting rotor parameters... Done.') + + + if self.verbose>0: print(f'Creating auxiliary arrays for all conditions and cases...', end='\r') + self.createAuxArrays() + if self.verbose>0: print(f'Creating auxiliary arrays for all conditions and cases... Done.') + + + if self.verbose>0: print(f'Creating directory structure and copying files...', end='\r') + self._create_dir_structure() + if self.verbose>0: print(f'Creating directory structure and copying files... Done.') + + + def __repr__(self): + s = f'Requested parameters:\n' + s += f' - Case path: {self.path}\n' + s += f' - Wake model: {self.mod_wake} (1:Polar; 2:Curl; 3:Cartesian)\n' + if self.LESpath is None: + s += f' - Number of TurbSim seeds: {self.nSeeds}\n' + s += f' - End time: {self.tmax} s\n' + s += f'Requested farm:\n' + s += f' - Number of turbines: {self.nTurbines}\n' + s += f' - Diameter: {self.D} m\n' + s += f' - Hub height: {self.zhub} m\n' + s += f' - Max chord: {self.cmax} m\n' + s += f' - Max excitation freq: {self.fmax:.3f} Hz\n' + s += f' - Meandering constant: {self.Cmeander}\n' + s += f'Requested sweeps:\n' + s += f' - Wind speeds at hub height (m/s): {self.vhub}\n' + s += f' - Shear exponent: {self.shear}\n' + s += f' - TI (%): {self.TIvalue}\n' + s += f'\nCase details:\n' + s += f' - Number of conditions: {self.nConditions}\n' + for c in self.condDirList: + s += f" {c}\n" + s += f' - Number of cases for each condition: {self.nCases}\n' + if self.nCases < 11: + for c in self.caseDirList: + s += f" {c}\n" + else: + for c in self.caseDirList[:5]: + s += f" {c}\n" + s += f" ...\n" + for c in self.caseDirList[-5:]: + s += f" {c}\n" + s += f"\n\n" + + + if self.LESpath is None: + s += f'Turbulence boxes: TurbSim\n' + s += f'TurbSim turbulence boxes details:\n' + else: + s += f'Turbulence boxes: LES\n' + s += f'LES turbulence boxes details:\n' + s += f' Path: {self.LESpath}\n' + + + if self.TSlowBoxFilesCreatedBool or self.LESpath is not None: + s += f' Low-resolution domain: \n' + s += f' - ds low: {self.ds_low_les} m\n' + s += f' - dt low: {self.dt_low_les} s\n' + s += f' - Extent of low-res box (in D): xmin = {self.extent_low[0]}, xmax = {self.extent_low[1]}, ' + s += f'ymin = {self.extent_low[2]}, ymax = {self.extent_low[3]}, zmax = {self.extent_low[4]}\n' + else: + s += f'Low-res boxes not created yet.\n' + + + if self.TShighBoxFilesCreatedBool or self.LESpath is not None: + s += f' High-resolution domain: \n' + s += f' - ds high: {self.ds_high_les} m\n' + s += f' - dt high: {self.dt_high_les} s\n' + s += f' - Extent of high-res boxes: {self.extent_high} D total\n' + else: + s += f'High-res boxes not created yet.\n' + s += f"\n" + + return s + + + def _checkInputs(self): + + # Create case path is doesn't exist + if not os.path.exists(self.path): + os.makedirs(self.path) + + # Check the wind turbine dict + if not isinstance(self.wts,dict): + raise ValueError (f'`wts` needs to be a dictionary with the following entries for each turbine: x, y, z, D, zhub, cmax, fmax, Cmeander.') + self.nTurbines = len(self.wts) + self.D = self.wts[0]['D'] + self.zhub = self.wts[0]['zhub'] + self.cmax = self.wts[0]['cmax'] + self.fmax = self.wts[0]['fmax'] + self.Cmeander = self.wts[0]['Cmeander'] + + # Check values of each turbine + for t in range(self.nTurbines): + t_x = self.wts[t]['x'] + t_y = self.wts[t]['y'] + t_z = self.wts[t]['z'] + t_D = self.wts[t]['D'] + t_zhub = self.wts[t]['zhub'] + t_cmax = self.wts[t]['cmax'] + t_fmax = self.wts[t]['fmax'] + t_Cmeander = self.wts[t]['Cmeander'] + if t_D != self.D: + raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different diamenter.') + if t_zhub != self.zhub: + raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different hub height.') + if t_cmax != self.cmax: + raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different max chord.') + if t_fmax != self.fmax: + raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different max excitation frequency.') + if t_Cmeander != self.Cmeander: + raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different meandering constant.') + + if not isinstance(t_x,(float,int)): + raise ValueError (f'The `x` value for the turbine {t+1} should be an integer or float. Received {t_x}.') + if not isinstance(t_y,(float,int)): + raise ValueError (f'The `y` value for the turbine {t+1} should be an integer or float. Received {t_y}.') + if not isinstance(t_z,(float,int)): + raise ValueError (f'The `z` value for the turbine {t+1} should be an integer or float. Received {t_z}.') + if not isinstance(t_D,(float,int)): + raise ValueError (f'The `D` value for the turbine {t+1} should be an integer or float. Received {t_D}.') + if not isinstance(t_zhub,(float,int)): + raise ValueError (f'The `zhub` value for the turbine {t+1} should be an integer or float. Received {t_zhub}.') + + # Check general variables + if self.cmax <= 0: raise ValueError('cmax cannot be negative') + if self.fmax <= 0: raise ValueError('fmax cannot be negative') + if self.Cmeander <= 0: raise ValueError('Cmeander cannot be negative') + if self.tmax <= 0: raise ValueError('A positive tmax should be requested') + if self.zbot <= 0: raise ValueError('zbot should be greater than 0 (recommended 1)') + + # Ensure quantities are list + self.vhub = [self.vhub] if isinstance(self.vhub,(float,int)) else self.vhub + self.shear = [self.shear] if isinstance(self.shear,(float,int)) else self.shear + self.TIvalue = [self.TIvalue] if isinstance(self.TIvalue,(float,int)) else self.TIvalue + self.inflow_deg = [self.inflow_deg] if isinstance(self.inflow_deg,(float,int)) else self.inflow_deg + + # Fill turbine parameters arrays if not given + if self.yaw_init is None: + yaw = np.ones((1,self.nTurbines))*0 + self.yaw_init = np.repeat(yaw, len(self.inflow_deg), axis=0) + + # Check TI values if given in percent + for t in self.TIvalue: + if t<0: raise ValueError(f'TI cannot be negative. Received {t}.') + if t<1: raise ValueError(f'TI should be given in percentage (e.g. "10" for a 10% TI). Received {t}.') + + # Set domain extents defaults if needed + default_extent_low = [3,6,3,3,2] + default_extent_high = 1.2 # total extent, half of that to each side. + if self.extent_low is None: + self.extent_low = default_extent_low + if self.extent_high is None: + self.extent_high = default_extent_high + + # Check domain extents + if not (np.array(self.extent_low)>=0).all(): + raise ValueError(f'The array for low-res box extents should be given with positive values') + if not isinstance(self.extent_high, (float,int)): + raise ValueError(f'The extent_high should be a scalar') + if self.extent_high<=0: + raise ValueError(f'The extent of high boxes should be positive') + if self.extent_high<1: + raise ValueError(f'The extent of high boxes is not enough to cover the rotor diameter. '\ + 'The extent high is given as the total extent, and it needs to be greater than 1.') + + + # Check the FAST.Farm binary + if self.ffbin is None: + self.ffbin = shutil.which('FAST.Farm') + if not self.ffbin: + raise ValueError(f'No FAST.Farm binary was given and none could be found in $PATH.') + if self.verbose>1: + print('WARNING: No FAST.Farm binary has been given. Using {self.ffbin}') + elif not os.path.isfile(self.ffbin): + raise ValueError (f'The FAST.Farm binary given does not exist.') + + + # Check turbine conditions arrays for consistency + if len(self.inflow_deg) != len(self.yaw_init): + raise ValueError(f'One row for each inflow angle should be given in yaw_init. '\ + f'Currently {len(self.inflow_deg)} inflow angle(s) and {len(self.yaw_init)} yaw entrie(s)') + if self.ADmodel is None: + self.ADmodel = np.tile(['ADyn'],(1,self.nTurbines)) + if self.EDmodel is None: + self.EDmodel = np.tile(['FED'],(1,self.nTurbines)) + if np.shape(self.ADmodel) != np.shape(self.EDmodel): + raise ValueError('Every case should have the aerodynamic and elastic model selected. The number of cases '\ + '(lines) in `ADmodel` and `EDmodel` should be the same') + if self.nTurbines != np.shape(self.ADmodel)[1]: + raise ValueError(f'The number of turbines in wts ({len(self.wts)}) should match the number of turbines '\ + f'in the ADmodel and EDmodel arrays ({np.shape(self.ADmodel)[1]})') + + # Check on seed parameters + if not isinstance(self.nSeeds,int): + raise ValueError(f'An integer number of seeds should be requested. Got {self.nSeeds}.') + if self.nSeeds > 30: + raise ValueError(f'Number of seeds requested is larger than 30. For the case of {self.nSeeds} seeds, '\ + f'pass seedValues as a {self.nSeeds}-sized array of scalars.') + if self.seedValues is None: + self.seedValues = [2318573, 122299, 123456, 389432, -432443, 9849898, 432425, 894832, 849324, 678095, + 1235456, 435342, 897023, 423800, -898881, 2988900, 798911, 482391, 892111, 899190, + 7693202, 587924, 890090, 435646, -454899, -785138, -78564, -17944, -99021, 389432] + self.seedValues = self.seedValues[:self.nSeeds] + if len(self.seedValues) != self.nSeeds: + raise ValueError(f'The array seedValues has been passed, but its length does not correspond '\ + f'to the number of seeds requested.') + + # Check LES parameters + if self.LESpath is None: + self.inflowStr = 'TurbSim' + else: + if isinstance(self.LESpath,str): self.LESpath = [self.LESpath]*len(self.vhub) + self.inflowStr = 'LES' + for p in self.LESpath: + if not os.path.isdir(p): + raise ValueError (f'The LES path {p} does not exist') + # LES is requested, so domain limits must be given + if None in (self.dt_high_les, self.ds_high_les, self.dt_low_les, self.ds_low_les): + raise ValueError (f'An LES-driven case was requested, but one or more grid parameters were not given. '\ + 'Set `dt_high_les`, `ds_high_les`, `dt_low_les`, and `ds_low_les` based on your LES boxes.') + + + # Check the wake model (1:Polar; 2:Curl; 3:Cartesian) + if self.mod_wake not in [1,2,3]: + raise ValueError(f'Wake model `mod_wake` should be 1 (Polar), 2 (Curl), or 3 (Cartesian). Received {self.mod_wake}.') + + + # Check the ds and dt for the high- and low-res boxes. If not given, call the + # AMR-Wind auxiliary function with dummy domain limits. + if None in (self.dt_high_les, self.ds_high_les, self.dt_low_les, self.ds_low_les): + mod_wake_str = ['','polar', 'curled', 'cartesian'] + print(f'WARNING: One or more temporal or spatial resolution for low- and high-res domains were not given.') + print(f' Estimated values for {mod_wake_str[self.mod_wake]} wake model shown below.') + self._determine_resolutions_from_dummy_amrwind_grid() + + # Check the domain extents + if self.dt_low_les%(self.dt_high_les-1e-15) > 1e-12: + raise ValueError(f'The temporal resolution dT_Low should be a multiple of dT_High') + if self.dt_low_les < self.dt_high_les: + raise ValueError(f'The temporal resolution dT_High should not be greater than dT_Low on the LES side') + if self.ds_low_les < self.ds_high_les: + raise ValueError(f'The grid resolution dS_High should not be greater than dS_Low on the LES side') + + + + # Check the reference turbine for rotation + if self.refTurb_rot >= self.nTurbines: + raise ValueError(f'The index for the reference turbine for the farm to be rotated around is greater than the number of turbines') + + # Set aux variable + self.templateFilesCreatedBool = False + self.TSlowBoxFilesCreatedBool = False + self.TShighBoxFilesCreatedBool = False + + + + def _determine_resolutions_from_dummy_amrwind_grid(self): + + from pyFAST.fastfarm.AMRWindSimulation import AMRWindSimulation + + # Create values and keep variable names consistent across interfaces + dummy_dt = 0.1 + dummy_ds = 1 + prob_lo = (-10005, -10005, 0) # The 5 m offset is such that we + prob_hi = ( 10005, 10005, 1000) # have a cell center at (0,0) + n_cell = ((prob_hi[0]-prob_lo[0])/dummy_ds, + (prob_hi[1]-prob_lo[1])/dummy_ds, + (prob_hi[2]-prob_lo[2])/dummy_ds) + max_level = 0 + incflo_velocity_hh = (max(self.vhub), 0, 0) + buffer_lr = self.extent_low + buffer_hr = self.extent_high + + amr = AMRWindSimulation(self.wts, dummy_dt, prob_lo, prob_hi, + n_cell, max_level, incflo_velocity_hh, + buffer_lr = self.extent_low, + buffer_hr = self.extent_high, + mod_wake = self.mod_wake) + + print(f' High-resolution: ds: {amr.ds_hr} m, dt: {amr.dt_high_les} s') + print(f' Low-resolution: ds: {amr.ds_lr} m, dt: {amr.dt_low_les} s\n') + print(f'WARNING: If the above values are too fine or manual tuning is warranted, specify them manually.') + print(f' To do that, specify, e.g., `dt_high_les = {2*amr.dt_high_les}` to the call to `FFCaseCreation`.') + print(f' `ds_high_les = {2*amr.ds_high_les}`') + print(f' `dt_low_les = {2*amr.dt_low_les}`') + print(f' `ds_low_les = {2*amr.ds_low_les}`') + print(f' If the values above are okay, you can safely ignore this warning.\n') + + self.dt_high_les = amr.dt_high_les + self.ds_high_les = amr.dt_high_les + self.dt_low_les = amr.dt_low_les + self.ds_low_les = amr.dt_low_les + + + + + def _create_dir_structure(self): + # Create directory structure CondXX_*/CaseYY_*/Seed_Z/TurbSim; and CondXX_*/Seed_Y + # Also saves the dir structure on array to write on SLURM script in the future. + condDirList = [] + caseDirList_ = [] + for cond in range(self.nConditions): + # Recover information about current condition for directory naming purposes + Vhub_ = self.allCond['vhub' ].isel(cond=cond).values + shear_ = self.allCond['shear' ].isel(cond=cond).values + tivalue_ = self.allCond['TIvalue' ].isel(cond=cond).values + + # Set current path name string + condStr = f'Cond{cond:02d}_v{Vhub_:04.1f}_PL{shear_}_TI{tivalue_}' + condDirList.append(condStr) + condPath = os.path.join(self.path, condStr) + + for case in range(self.nCases): + # Recover information about current case for directory naming purposes + inflow_deg_ = self.allCases['inflow_deg' ].sel(case=case).values + #wakeSteering_ = self.allCases['wakeSteering' ].sel(case=case).values + misalignment_ = self.allCases['misalignment' ].sel(case=case).values + nADyn_ = self.allCases['nFullAeroDyn' ].sel(case=case).values + nFED_ = self.allCases['nFulllElastoDyn'].sel(case=case).values + yawCase_ = self.allCases['yawCase' ].sel(case=case).values + + # Set current path name string. The case is of the following form: Case00_wdirp10_WSfalse_YMfalse_12fED_12ADyn + ndigits = len(str(self.nCases)) + caseStr = f"Case{case:0{ndigits}d}_wdir{f'{int(inflow_deg_):+03d}'.replace('+','p').replace('-','m')}" + # Add standard sweeps to the case name + if self.sweepWS: + caseStr += f"_WS{str(wakeSteering_).lower()}" + if self.sweepYM: + caseStr += f"_YM{str(misalignment_).lower()}" + if self.sweepEDmodel: + caseStr += f"_{nFED_}fED" + if self.sweepADmodel: + caseStr += f"_{nADyn_}ADyn" + + #caseStr = f"Case{case:0{ndigits}d}_wdir{f'{int(inflow_deg_):+03d}'.replace('+','p').replace('-','m')}"\ + # f"_WS{str(wakeSteering_).lower()}_YM{str(misalignment_).lower()}"\ + # f"_{nFED_}fED_{nADyn_}ADyn" + # If sweeping on yaw, then add yaw case to dir name + if len(np.unique(self.allCases.yawCase)) > 1: + caseStr += f"_yawCase{yawCase_}" + + caseDirList_.append(caseStr) + casePath = os.path.join(condPath, caseStr) + if not os.path.exists(casePath): os.makedirs(casePath) + + for seed in range(self.nSeeds): + seedPath = os.path.join(casePath, f'Seed_{seed}') + if not os.path.exists(seedPath): os.makedirs(seedPath) + turbsimPath = os.path.join(seedPath, 'TurbSim') + if not os.path.exists(turbsimPath): os.makedirs(turbsimPath) + + # The following loop creates the turbsim files for low box. That should really only happen if inflowStr is `TurbSim`. + # It does happen regardless because when the inflow is LES, it will be later on deleted. + for seed in range(self.nSeeds): + seedPath = os.path.join(condPath, f'Seed_{seed}') + if not os.path.exists(seedPath): os.makedirs(seedPath) + + # Get rid of duplicate entries due to the nature of the loop (equiv to only getting the first nCases entries) + self.condDirList = condDirList + self.caseDirList = sorted(list(set(caseDirList_))) + assert self.caseDirList==caseDirList_[:self.nCases] + + + + def copyTurbineFilesForEachCase(self, writeFiles=True): + + if not self.templateFilesCreatedBool: + raise SyntaxError('Template files not set. Call `setTemplateFilename` before calling this function.') + + # Loops on all conditions/cases creating DISCON and *Dyn files + for cond in range(self.nConditions): + print(f'Processing condition {self.condDirList[cond]}') + for case in range(self.nCases): + print(f' Processing case {self.caseDirList[case]}', end='\r') + currPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case]) + + # Recover info about the current CondXX_*/CaseYY_* + Vhub_ = self.allCond.sel(cond=cond)['vhub'].values + + # Update parameters to be changed in the HydroDyn files + if self.HydroDynFile != 'unused': + self.HydroDynFile['WaveHs'] = self.bins.sel(wspd=Vhub_, method='nearest').WaveHs.values + self.HydroDynFile['WaveTp'] = self.bins.sel(wspd=Vhub_, method='nearest').WaveTp.values + self.HydroDynFile['WvHiCOffD'] = 2.0*np.pi/self.HydroDynFile['WaveTp'] + self.HydroDynFile['WvLowCOffS'] = 2.0*np.pi/self.HydroDynFile['WaveTp'] + if writeFiles: + self.HydroDynFile.write(os.path.join(currPath, self.HDfilename)) + + # Write updated DISCON + if writeFiles: + shutilcopy2_untilSuccessful(os.path.join(self.templatePath,self.controllerInputfilename), + os.path.join(currPath,self.controllerInputfilename)) + + # Depending on the controller, the controller input file might need to be in the same level as the .fstf input file. + # The ideal solution would be to give the full path to the controller input file, but we may not have control over + # the compilation process and it is likely that a very long string with the full path will get cut. So we need to + # give the relative path. We give the path as the current one, so here we create a link to ensure it will work + # regardless of how the controller was compiled. There is no harm in having this extra link even if it's not needed. + notepath = os.getcwd(); os.chdir(self.path) + for seed in range(self.nSeeds): + try: + src = os.path.join('../', self.controllerInputfilename) + dst = os.path.join(self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', self.controllerInputfilename) + if writeFiles: + os.symlink(src, dst) + except FileExistsError: + pass + os.chdir(notepath) + + # Write InflowWind files. For FAST.FARM, the IW file needs to be inside the Seed* directories. If running standalone openfast, + # it needs to be on the same level as the fst file. Here, we copy to both places so that the workflow is general + self.InflowWindFile['WindType'] = 3 + self.InflowWindFile['PropagationDir'] = 0 + self.InflowWindFile['Filename_BTS'] = '"./TurbSim"' + if writeFiles: + self.InflowWindFile.write( os.path.join(currPath,self.IWfilename)) + for seed in range(self.nSeeds): + self.InflowWindFile.write( os.path.join(currPath,f'Seed_{seed}',self.IWfilename)) + + + for t in range(self.nTurbines): + # Recover info about the current turbine in CondXX_*/CaseYY_ + yaw_deg_ = self.allCases.sel(case=case, turbine=t)['yaw'].values + yaw_mis_deg_ = self.allCases.sel(case=case, turbine=t)['yawmis'].values + ADmodel_ = self.allCases.sel(case=case, turbine=t)['ADmodel'].values + EDmodel_ = self.allCases.sel(case=case, turbine=t)['EDmodel'].values + + # Quickly check that yaw misaligned value is zero if case does not contain yaw misalignment + if self.allCases.sel(case=case, turbine=t)['misalignment'].values: + assert yaw_mis_deg_ != 0 + else: + assert yaw_mis_deg_ == 0 + + if EDmodel_ == 'FED': + # Update each turbine's ElastoDyn + self.ElastoDynFile['RotSpeed'] = self.bins.sel(wspd=Vhub_, method='nearest').RotSpeed.values + self.ElastoDynFile['BlPitch(1)'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values + self.ElastoDynFile['BlPitch(2)'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values + self.ElastoDynFile['BlPitch(3)'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values + + self.ElastoDynFile['NacYaw'] = yaw_deg_ + yaw_mis_deg_ + self.ElastoDynFile['BldFile1'] = self.ElastoDynFile['BldFile2'] = self.ElastoDynFile['BldFile3'] = f'"{self.bladefilename}"' + self.ElastoDynFile['TwrFile'] = f'"{self.towerfilename}"' + self.ElastoDynFile['Azimuth'] = round(np.random.uniform(low=0, high=360)) # start at a random value + if writeFiles: + if t==0: shutilcopy2_untilSuccessful(os.path.join(self.templatePath,self.bladefilename), os.path.join(currPath,self.bladefilename)) + if t==0: shutilcopy2_untilSuccessful(os.path.join(self.templatePath,self.towerfilename), os.path.join(currPath,self.towerfilename)) + self.ElastoDynFile.write(os.path.join(currPath,f'{self.EDfilename}{t+1}_mod.dat')) + + elif EDmodel_ == 'SED': + # Update each turbine's Simplified ElastoDyn + self.SElastoDynFile['RotSpeed'] = self.bins.sel(wspd=Vhub_, method='nearest').RotSpeed.values + self.SElastoDynFile['BlPitch'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values + + self.SElastoDynFile['BlPitch'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values + self.SElastoDynFile['RotSpeed'] = self.bins.sel(wspd=Vhub_, method='nearest').RotSpeed.values + self.SElastoDynFile['NacYaw'] = yaw_deg_ + yaw_mis_deg_ + if writeFiles: + self.SElastoDynFile.write(os.path.join(currPath,f'{self.SEDfilename}{t+1}_mod.dat')) + + # Update each turbine's ServoDyn + self.ServoDynFile['YawNeut'] = yaw_deg_ + yaw_mis_deg_ + self.ServoDynFile['DLL_FileName'] = f'"{self.DLLfilepath}{t+1}.so"' + if writeFiles: + self.ServoDynFile.write( os.path.join(currPath,f'{self.SrvDfilename}{t+1}_mod.dat')) + + # Update each turbine's OpenFAST input + self.turbineFile['TMax'] = self.tmax + self.turbineFile['CompInflow'] = 1 # 1: InflowWind; 2: OpenFoam (fully coupled; not VTK input to FF) + + if EDmodel_ == 'FED': + self.turbineFile['CompElast'] = 1 # 1: full ElastoDyn; 2: full ElastoDyn + BeamDyn; 3: Simplified ElastoDyn + self.turbineFile['CompSub'] = 1 + self.turbineFile['CompHydro'] = 1 + self.turbineFile['EDFile'] = f'"./{self.EDfilename}{t+1}_mod.dat"' + elif EDmodel_ == 'SED': + self.turbineFile['CompElast'] = 3 # 1: full ElastoDyn; 2: full ElastoDyn + BeamDyn; 3: Simplified ElastoDyn + self.turbineFile['CompSub'] = 0 # need to be disabled with SED + self.turbineFile['CompHydro'] = 0 # need to be disabled with SED + self.turbineFile['IntMethod'] = 3 + self.turbineFile['EDFile'] = f'"./{self.SEDfilename}{t+1}_mod.dat"' + self.turbineFile['BDBldFile(1)'] = f'"{self.BDfilepath}"' + self.turbineFile['BDBldFile(2)'] = f'"{self.BDfilepath}"' + self.turbineFile['BDBldFile(3)'] = f'"{self.BDfilepath}"' + self.turbineFile['InflowFile'] = f'"./{self.IWfilename}"' + if ADmodel_ == 'ADyn': + self.turbineFile['CompAero'] = 2 # 1: AeroDyn v14; 2: AeroDyn v15; 3: AeroDisk + self.turbineFile['AeroFile'] = f'"{self.ADfilepath}"' + elif ADmodel_ == 'ADsk': + # If you use AeroDisk with ElastoDyn, set the blade DOFs to false. + self.turbineFile['CompAero'] = 3 # 1: AeroDyn v14; 2: AeroDyn v15; 3: AeroDisk + self.turbineFile['AeroFile'] = f'"{self.ADskfilepath}"' + if writeFiles: + if t==0: shutilcopy2_untilSuccessful(self.coeffTablefilepath, os.path.join(currPath,self.coeffTablefilename)) + self.turbineFile['ServoFile'] = f'"./{self.SrvDfilename}{t+1}_mod.dat"' + self.turbineFile['HydroFile'] = f'"./{self.HDfilename}"' + self.turbineFile['SubFile'] = f'"{self.SubDfilepath}"' + self.turbineFile['MooringFile'] = f'"unused"' + self.turbineFile['IceFile'] = f'"unused"' + self.turbineFile['TStart'] = 0 # start saving openfast output from time 0 (to see transient) + self.turbineFile['OutFileFmt'] = 3 # 1: .out; 2: .outb; 3: both + + if writeFiles: + self.turbineFile.write( os.path.join(currPath,f'{self.turbfilename}{t+1}.fst')) + + print(f'Done processing condition {self.condDirList[cond]} ') + + # Some files, for some reason, do not get copied properly. This leads to a case crashing due to missing file. + # Let's check if all files have been indded properly copied. If not, the copyTurbineFilesForEachCase will be + # called again until it does (up to 5 times) + if writeFiles: + if self._were_all_turbine_files_copied() == False and self.attempt<=5: + self.attempt += 1 + print(f'Not all files were copied successfully. Trying again. Attempt number {self.attempt}.') + self.copyTurbineFilesForEachCase() + elif self.attempt > 5: + print(f"WARNING: Not all turbine files were copied successfully after 5 tries.") + print(f" Check them manually. This shouldn't occur. Consider finding ") + print(f" and fixing the bug and submitting a PR.") + else: + print(f'Passed check: all files were copied successfully.') + + + def _were_all_turbine_files_copied(self): + ''' + Check if all files created in copyTurbineFilesForEachCase exist + ''' + + for cond in range(self.nConditions): + for case in range(self.nCases): + currPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case]) + + _ = checkIfExists(os.path.join(currPath, self.HDfilename)) + if not _: return False + _ = checkIfExists(os.path.join(currPath,self.controllerInputfilename)) + if not _: return False + _ = checkIfExists( os.path.join(currPath,self.IWfilename)) + if not _: return False + + for seed in range(self.nSeeds): + _ = checkIfExists(os.path.join(currPath,f'Seed_{seed}',self.IWfilename)) + if not _: return False + + for t in range(self.nTurbines): + ADmodel_ = self.allCases.sel(case=case, turbine=t)['ADmodel'].values + EDmodel_ = self.allCases.sel(case=case, turbine=t)['EDmodel'].values + if EDmodel_ == 'FED': + _ = checkIfExists(os.path.join(currPath,self.bladefilename)) + if not _: return False + _ = checkIfExists(os.path.join(currPath,self.towerfilename)) + if not _: return False + _ = checkIfExists(os.path.join(currPath,f'{self.EDfilename}{t+1}_mod.dat')) + if not _: return False + + elif EDmodel_ == 'SED': + _ = checkIfExists(os.path.join(currPath,f'{self.SEDfilename}{t+1}_mod.dat')) + if not _: return False + + _ = checkIfExists(os.path.join(currPath,f'{self.SrvDfilename}{t+1}_mod.dat')) + if not _: return False + + if ADmodel_ == 'ADsk': + _ = checkIfExists(os.path.join(currPath,self.coeffTablefilename)) + if not _: return False + + _ = checkIfExists(os.path.join(currPath,f'{self.turbfilename}{t+1}.fst')) + if not _: return False + + # If we get to this point, all files exist + return True + + + + def setTemplateFilename(self, + templatePath=None, + EDfilename=None, + SEDfilename=None, + HDfilename=None, + SrvDfilename=None, + ADfilename=None, + ADskfilename=None, + SubDfilename=None, + IWfilename=None, + BDfilepath=None, + bladefilename=None, + towerfilename=None, + turbfilename=None, + libdisconfilepath=None, + controllerInputfilename=None, + coeffTablefilename=None, + turbsimLowfilepath=None, + turbsimHighfilepath=None, + FFfilename=None): + ''' + + *filename: str + The filename of the current OpenFAST submodule, no complete path. Assumes it is + inside `templatePath` + *filepath: str + Complete path of the file. May or may not be inside `templatePath` + + ''' + + self.EDfilename = "unused"; self.EDfilepath = "unused" + self.SEDfilename = "unused"; self.SEDfilepath = "unused" + self.HDfilename = "unused"; self.HDfilepath = "unused" + self.SrvDfilename = "unused"; self.SrvDfilepath = "unused" + self.ADfilename = "unused"; self.ADfilepath = "unused" + self.ADskfilename = "unused"; self.ADskfilepath = "unused" + self.SubDfilename = "unused"; self.SubDfilepath = "unused" + self.IWfilename = "unused"; self.IWfilepath = "unused" + self.BDfilepath = "unused"; self.BDfilename = "unused" + self.bladefilename = "unused"; self.bladefilepath = "unused" + self.towerfilename = "unused"; self.towerfilepath = "unused" + + + if templatePath is None: + print(f'--- WARNING: No template files given. Complete setup will not be possible') + return + + if not os.path.isdir(templatePath): + raise ValueError (f'Template path {templatePath} does not seem to exist.') + + self.templatePath = templatePath + + + def checkIfExists(f): + if os.path.basename(f) == 'unused': + return + if not os.path.isfile(f): + raise ValueError (f'File {f} does not exist.') + + if EDfilename is not None and EDfilename != 'unused': + if not EDfilename.endswith('.T'): + raise ValueError (f'Name the template ED file "*.T.dat" and give "*.T" as `EDfilename`') + self.EDfilepath = os.path.join(self.templatePath,f"{EDfilename}.dat") + checkIfExists(self.EDfilepath) + self.EDfilename = EDfilename + + if SEDfilename is not None and SEDfilename != 'unused': + if not SEDfilename.endswith('.T'): + raise ValueError (f'Name the template SED file "*.T.dat" and give "*.T" as `SEDfilename`') + self.SEDfilepath = os.path.join(self.templatePath,f"{SEDfilename}.dat") + checkIfExists(self.SEDfilepath) + self.SEDfilename = SEDfilename + + if HDfilename is not None and HDfilename != 'unused': + if not HDfilename.endswith('.dat'): + raise ValueError (f'The HydroDyn filename should end in `.dat`.') + self.HDfilepath = os.path.join(self.templatePath,HDfilename) + checkIfExists(self.HDfilepath) + self.HDfilename = HDfilename + + if SrvDfilename is not None and SrvDfilename != 'unused': + if not SrvDfilename.endswith('.T'): + raise ValueError (f'Name the template ServoDyn file "*.T.dat" and give "*.T" as `SrvDfilename`') + self.SrvDfilepath = os.path.join(self.templatePath,f"{SrvDfilename}.dat") + checkIfExists(self.SrvDfilepath) + self.SrvDfilename = SrvDfilename + + if ADfilename is not None and ADfilename != 'unused': + if not ADfilename.endswith('.dat'): + raise ValueError (f'The AeroDyn filename should end in `.dat`.') + self.ADfilepath = os.path.join(self.templatePath,ADfilename) + checkIfExists(self.ADfilepath) + self.ADfilename = ADfilename + + if ADskfilename is not None and ADskfilename != 'unused': + if not ADskfilename.endswith('.dat'): + raise ValueError (f'The AeroDisk filename should end in `.dat`.') + self.ADskfilepath = os.path.join(self.templatePath,ADskfilename) + checkIfExists(self.ADskfilepath) + self.ADskfilename = ADskfilename + + if SubDfilename is not None and SubDfilename != 'unused': + if not SubDfilename.endswith('.dat'): + raise ValueError (f'The SubDyn filename should end in `.dat`.') + self.SubDfilepath = os.path.join(self.templatePath,SubDfilename) + checkIfExists(self.SubDfilepath) + self.SubDfilename = SubDfilename + + if IWfilename is not None and IWfilename != 'unused': + if not IWfilename.endswith('.dat'): + raise ValueError (f'The InflowWind filename should end in `.dat`.') + self.IWfilepath = os.path.join(self.templatePath,IWfilename) + checkIfExists(self.IWfilepath) + self.IWfilename = IWfilename + + if BDfilepath is not None and BDfilepath != 'unused': + if not BDfilepath.endswith('.dat'): + raise ValueError (f'The BeamDyn filename should end in `.dat`.') + self.BDfilepath = BDfilepath + checkIfExists(self.BDfilepath) + + if bladefilename is not None: + if not bladefilename.endswith('.dat'): + raise ValueError (f'The blade filename should end in `.dat`.') + self.bladefilepath = os.path.join(self.templatePath,bladefilename) + checkIfExists(self.bladefilepath) + self.bladefilename = bladefilename + + if towerfilename is not None: + if not towerfilename.endswith('.dat'): + raise ValueError (f'The tower filename should end in `.dat`.') + self.towerfilepath = os.path.join(self.templatePath,towerfilename) + checkIfExists(self.towerfilepath) + self.towerfilename = towerfilename + + if turbfilename is not None: + if not turbfilename.endswith('.T'): + raise ValueError (f'Name the template turbine file "*.T.fst" and give "*.T" as `turbfilename`') + self.turbfilepath = os.path.join(self.templatePath,f"{turbfilename}.fst") + checkIfExists(self.turbfilepath) + self.turbfilename = turbfilename + + if libdisconfilepath is not None: + if not libdisconfilepath.endswith('.so'): + raise ValueError (f'The libdiscon `libdisconfilepath` file should end in "*.so"') + self.libdisconfilepath = libdisconfilepath + checkIfExists(self.libdisconfilepath) + self._create_copy_libdiscon() + + if controllerInputfilename is not None: + if not controllerInputfilename.endswith('.IN'): + print(f'--- WARNING: The controller input file typically ends in "*.IN". Currently {controllerInputfilename}. Double check.') + self.controllerInputfilepath = os.path.join(self.templatePath, controllerInputfilename) + checkIfExists(self.controllerInputfilepath) + self.controllerInputfilename = controllerInputfilename + + if coeffTablefilename is not None and coeffTablefilename != 'unused': + if not coeffTablefilename.endswith('.csv'): + raise ValueError (f'The performance table `coeffTablefilename` file should end in "*.csv"') + self.coeffTablefilepath = os.path.join(templatePath, coeffTablefilename) + checkIfExists(self.coeffTablefilepath) + self.coeffTablefilename = coeffTablefilename + + if turbsimLowfilepath is not None: + if not turbsimLowfilepath.endswith('.inp'): + raise ValueError (f'TurbSim file input for low-res box `turbsimLowfilepath` should end in ".inp".') + self.turbsimLowfilepath = turbsimLowfilepath + checkIfExists(self.turbsimLowfilepath) + + if turbsimHighfilepath is not None: + if not turbsimHighfilepath.endswith('.inp'): + raise ValueError (f'TurbSim file input for high-res box `turbsimHighfilepath` should end in ".inp".') + self.turbsimHighfilepath = turbsimHighfilepath + checkIfExists(self.turbsimHighfilepath) + + if FFfilename is not None: + if not FFfilename.endswith('.fstf'): + raise ValueError (f'FAST.Farm input file `FFfilename` should end in ".fstf".') + self.FFfilepath = os.path.join(self.templatePath,FFfilename) + checkIfExists(self.FFfilepath) + self.FFfilename = FFfilename + + self._open_template_files() + + self.templateFilesCreatedBool = True + + return + + + def _create_copy_libdiscon(self): + # Make copies of libdiscon for each turbine if they don't exist + copied = False + for t in range(self.nTurbines): + libdisconfilename = os.path.splitext(os.path.basename(self.libdisconfilepath))[0] + currLibdiscon = os.path.join(os.path.dirname(self.libdisconfilepath), f'{libdisconfilename}.T{t+1}.so') + self.DLLfilepath = os.path.join(os.path.dirname(self.libdisconfilepath), f'{libdisconfilename}.T') + if not os.path.isfile(currLibdiscon): + if self.verbose>0: print(f' Creating a copy of the controller {libdisconfilename}.so in {currLibdiscon}') + shutil.copy2(self.libdisconfilepath, currLibdiscon) + copied=True + + if copied == False and self.verbose>0: + print(f' Copies of the controller {libdisconfilename}.T[1-{self.nTurbines}].so already exists in {os.path.dirname(self.libdisconfilepath)}. Skipped step.') + + + def _open_template_files(self): + + # Open template files + def _check_and_open(f): + if os.path.basename(f) == 'unused': + return 'unused' + else: + return FASTInputFile(f) + + self.ElastoDynFile = _check_and_open(self.EDfilepath) + self.SElastoDynFile = _check_and_open(self.SEDfilepath) + self.HydroDynFile = _check_and_open(self.HDfilepath) + self.ServoDynFile = _check_and_open(self.SrvDfilepath) + self.AeroDiskFile = _check_and_open(self.ADskfilepath) + self.turbineFile = _check_and_open(self.turbfilepath) + self.InflowWindFile = _check_and_open(self.IWfilepath) + + + def print_template_files(self): + raise NotImplementedError (f'Placeholder. Not implemented.') + + + def createAuxArrays(self): + self._rotate_wts() + self._create_all_cond() + self._create_all_cases() + + + def _create_all_cond(self): + + if len(self.vhub)==len(self.shear) and len(self.shear)==len(self.TIvalue): + self.nConditions = len(self.vhub) + + if self.verbose>1: print(f'\nThe length of vhub, shear, and TI are the same. Assuming each position is a condition.', end='\r') + if self.verbose>0: print(f'\nCreating {self.nConditions} conditions') + + self.allCond = xr.Dataset({'vhub': (['cond'], self.vhub ), + 'shear': (['cond'], self.shear ), + 'TIvalue': (['cond'], self.TIvalue)}, + coords={'cond': np.arange(self.nConditions)} ) + + else: + import itertools + self.nConditions = len(self.vhub) * len(self.shear) * len(self.TIvalue) + + if self.verbose>1: print(f'The length of vhub, shear, and TI are different. Assuming sweep on each of them.') + if self.verbose>0: print(f'Creating {self.nConditions} conditions') + + # Repeat arrays as necessary to build xarray Dataset + combination = np.vstack(list(itertools.product(self.vhub,self.shear,self.TIvalue))) + + self.allCond = xr.Dataset({'vhub': (['cond'], combination[:,0]), + 'shear': (['cond'], combination[:,1]), + 'TIvalue': (['cond'], combination[:,2])}, + coords={'cond': np.arange(self.nConditions)} ) + + + + + + def _create_all_cases(self): + # Generate the different "cases" (inflow angle, and misalignment and wakesteer bools). + # If misalignment true, then the actual yaw is yaw[turb]=np.random.uniform(low=-8.0, high=8.0). + + # Set sweep bools and multipliers + nCasesYMmultiplier = 2 if self.sweepYM else 1 + nCasesROmultiplier = len(self.EDmodel) + if len(self.ADmodel) == 1: + self.sweepEDmodel = False + self.sweepADmodel = False + else: + self.sweepEDmodel = True + self.sweepADmodel = True + + # Initialize an empty array to accumulate individual cases + allCases = [] + # Get list of unique yaws, keeping the order + _, ind = np.unique(self.yaw_init, axis=0, return_index=True) + yaw_unique = self.yaw_init[np.sort(ind)] # duplicates removed, same order as original array + + # The main sweep on wind dir and yaw has been given by the user, such that + # only one loop is needed here. + for icase in range(len(self.inflow_deg)): + wdir = self.inflow_deg[icase] + yaw = self.yaw_init[icase] + yaw_case = np.where(np.all(yaw_unique == yaw, axis=1))[0][0]+1 + # Get turbine info + x = self.wts_rot_ds.sel(inflow_deg=wdir)['x'].values + y = self.wts_rot_ds.sel(inflow_deg=wdir)['y'].values + z = self.wts_rot_ds.sel(inflow_deg=wdir)['z'].values + D = self.wts_rot_ds.sel(inflow_deg=wdir)['D'].values + zhub = self.wts_rot_ds.sel(inflow_deg=wdir)['zhub'].values + + oneCase = xr.Dataset({ + 'Tx': (['case','turbine'], [x ]), + 'Ty': (['case','turbine'], [y ]), + 'Tz': (['case','turbine'], [z ]), + 'D': (['case','turbine'], [D ]), + 'zhub': (['case','turbine'], [zhub]), + 'yaw': (['case','turbine'], [yaw] ), + 'inflow_deg': (['case'], [wdir]), + 'yawCase': (['case'], [yaw_case]), + }, + coords={ + 'case': [icase], + 'turbine': np.arange(self.nTurbines), + }, + ) + allCases.append(oneCase) + allCases = xr.concat(allCases, dim='case') + + # ------------------------------------------------------- SWEEP ROM MODELS + # Get the number of cases at before this current sweep + nCases_before_sweep = len(allCases.case) + + # Concat instances of allCases and adjust the case numbering + ds = xr.concat([allCases for i in range(nCasesROmultiplier)], dim='case') + ds['case'] = np.arange(len(ds['case'])) + + # Create an empty array to fill. This way have a generic variable of type object + data = np.empty_like(ds['Tx'].data, dtype=object); data[:] = None + ds['EDmodel'] = (('case','turbine'), data.copy()) + ds['ADmodel'] = (('case','turbine'), data.copy()) + ds['nFulllElastoDyn'] = (('case'), np.zeros_like(ds['inflow_deg']).copy()) + ds['nFullAeroDyn'] = (('case'), np.zeros_like(ds['inflow_deg']).copy()) + + # Now, we fill the array with the new values for the proper sweep + for multi in range(nCasesROmultiplier): + for c in range(nCases_before_sweep): + currCase = nCases_before_sweep*multi + c + currEDmodel = np.array(self.EDmodel)[multi] + currADmodel = np.array(self.ADmodel)[multi] + + ds['EDmodel'].loc[dict(case=currCase, turbine=slice(None))] = currEDmodel + nFED = np.count_nonzero(currEDmodel == 'FED') + ds['nFulllElastoDyn'].loc[dict(case=currCase)] = nFED + + ds['ADmodel'].loc[dict(case=currCase, turbine=slice(None))] = currADmodel + nADyn = np.count_nonzero(currADmodel == 'ADyn') + ds['nFullAeroDyn'].loc[dict(case=currCase)] = nADyn + + allCases = ds.copy() + + # ------------------------------------------------- SWEEP YAW MISALIGNMENT + # Get the number of cases at before this current sweep + nCases_before_sweep = len(allCases.case) + + # Concat instances of allCases and adjust the case numbering + ds = xr.concat([allCases for i in range(nCasesYMmultiplier)], dim='case') + ds['case'] = np.arange(len(ds['case'])) + + # Create an full no-misalignment array to fill when non-aligned + ds['yawmis'] = (('case','turbine'), np.zeros_like(ds['yaw'])) + ds['misalignment'] = (('case'), np.full_like(ds['inflow_deg'], False, dtype=bool)) + + if self.sweepYM: + # Now, we fill the array with the new values on the second half (first half has no misalignment) + for c in range(nCases_before_sweep): + currCase = nCases_before_sweep + c + ds['yawmis'].loc[dict(case=currCase, turbine=slice(None))] = np.random.uniform(size=case.nTurbines,low=-8,high=8) + ds['misalignment'].loc[dict(case=currCase)] = True + + self.allCases = ds.copy() + self.nCases = len(self.allCases['case']) + + + + def _rotate_wts(self): + # Calculate the rotated positions of the turbines wrt the reference turbine + wts_rot={} + for inflow in self.inflow_deg: + for i , turb in self.wts.items(): + ref = self.wts[self.refTurb_rot] + + xori = self.wts[i]['x'] + x = ref['x'] + (self.wts[i]['x']-ref['x'])*cosd(inflow) - (self.wts[i]['y']-ref['y'])*sind(inflow) + yori = self.wts[i]['y'] + y = ref['y'] - (self.wts[i]['x']-ref['x'])*sind(-inflow) + (self.wts[i]['y']-ref['y'])*cosd(-inflow) + z = self.wts[i]['z'] + D = self.wts[i]['D'] + zhub = self.wts[i]['zhub'] + + wts_rot[inflow,i] = {'x':x, 'y':y, 'z':z, + 'D':D, 'zhub':zhub, + } + + self.wts_rot_ds = pd.DataFrame.from_dict(wts_rot, orient='index').to_xarray().rename({'level_0':'inflow_deg','level_1':'turbine'}) + + + + def _setRotorParameters(self): + + if self.D == 220: # 12 MW turbine + self.bins = xr.Dataset({'WaveHs': (['wspd'], [ 1.429, 1.429]), # 1.429 comes from Matt's hydrodyn input file + 'WaveTp': (['wspd'], [ 7.073, 7.073]), # 7.073 comes from Matt's hydrodyn input file + 'RotSpeed': (['wspd'], [ 4.0, 4.0]), # 4 rpm comes from Matt's ED input file + 'BlPitch': (['wspd'], [ 0.0, 0.0]), # 0 deg comes from Matt's ED input file + #'WvHiCOffD': (['wspd'], [0, 0]), # 2nd order wave info. Unused for now + #'WvLowCOffS': (['wspd'], [0, 0]), # 2nd order wave info. Unused for now + }, coords={'wspd': [10, 15]} ) # 15 m/s is 'else', since method='nearest' is used on the variable `bins` + + elif self.D == 240: # IEA 15 MW + self.bins = xr.Dataset({'WaveHs': (['wspd'], [1.172, 1.323, 1.523, 1.764, 2.255]), # higher values on default input from the repository (4.52) + 'WaveTp': (['wspd'], [7.287, 6.963, 7.115, 6.959, 7.067]), # higher values on default input from the repository (9.45) + 'RotSpeed': (['wspd'], [4.995, 6.087, 7.557, 7.557, 7.557]), + 'BlPitch': (['wspd'], [0.315, 0, 0.645, 7.6, 13.8 ]), + #'WvHiCOffD': (['wspd'], [0, 0, 0, 0, 0 ]), # 2nd order wave info. Unused for now. 3.04292 from repo; 0.862 from KS + #'WvLowCOffS': (['wspd'], [0, 0, 0, 0, 0 ]), # 2nd order wave info. Unused for now 0.314159 from repo; 0.862 from KS + }, coords={'wspd': [6.6, 8.6, 10.6, 12.6, 15]} ) # 15 m/s is 'else', since method='nearest' is used on the variable `bins` + + else: + raise ValueError(f'Unknown turbine with diameter {self.D}. Add values to the `_setRotorParameters` function.') + + + + + def TS_low_setup(self, writeFiles=True, runOnce=False): + # Loops on all conditions/seeds creating Low-res TurbSim box (following python-toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py) + + boxType='lowres' + for cond in range(self.nConditions): + for seed in range(self.nSeeds): + seedPath = os.path.join(self.path, self.condDirList[cond], f'Seed_{seed}') + + # ---------------- TurbSim Low boxes setup ------------------ # + # Set file to be created + currentTSLowFile = os.path.join(seedPath, 'Low_stillToBeModified.inp') + + # Get properties needed for the creation of the low-res turbsim inp file + D_ = self.allCases['D' ].max().values + HubHt_ = self.allCases['zhub'].max().values + xlocs_ = self.allCases['Tx' ].values.flatten() # All turbines are needed for proper + ylocs_ = self.allCases['Ty' ].values.flatten() # and consistent extent calculation + Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values + shear_ = self.allCond.sel(cond=cond)['shear' ].values + tivalue_ = self.allCond.sel(cond=cond)['TIvalue'].values + # Coherence parameters + a = 12; b=0.12 # IEC 61400-3 ed4, app C, eq C.16 + Lambda1 = 0.7*HubHt_ if HubHt_<60 else 42 # IEC 61400-3 ed4, sec 6.3.1, eq 5 + + # Create and write new Low.inp files creating the proper box with proper resolution + # By passing low_ext, manual mode for the domain size is activated, and by passing ds_low, + # manual mode for discretization (and further domain size) is also activated + currentTS = TSCaseCreation(D_, HubHt_, Vhub_, tivalue_, shear_, x=xlocs_, y=ylocs_, zbot=self.zbot, cmax=self.cmax, + fmax=self.fmax, Cmeander=self.Cmeander, boxType=boxType, low_ext=self.extent_low, ds_low=self.ds_low_les) + self.TSlowbox = currentTS + if runOnce: + return + currentTS.writeTSFile(self.turbsimLowfilepath, currentTSLowFile, tmax=self.tmax, verbose=self.verbose) + + # Modify some values and save file (some have already been set in the call above) + Lowinp = FASTInputFile(currentTSLowFile) + Lowinp['RandSeed1'] = self.seedValues[seed] + Lowinp['PLExp'] = shear_ + #Lowinp['latitude'] = latitude # Not used when IECKAI model is selected. + Lowinp['InCDec1'] = Lowinp['InCDec2'] = Lowinp['InCDec3'] = f'"{a} {b/(8.1*Lambda1):.8f}"' + # The dt was computed for a proper low-res box but here we will want to compare with the high-res + # and it is convenient to have the same time step. Let's do that change here + Lowinp['TimeStep'] = 1/(2*self.fmax) + if writeFiles: + Lowinp.write( os.path.join(seedPath, 'Low.inp') ) + + # Let's remove the original file + os.remove(os.path.join(seedPath, 'Low_stillToBeModified.inp')) + + self.TSlowBoxFilesCreatedBool = True + + + def TS_low_slurm_prepare(self, slurmfilepath): + + # -------------------------------------------------- + # ----- Prepare SLURM script for Low-res boxes ----- + # -------------------------------------------------- + + if not os.path.isfile(slurmfilepath): + raise ValueError (f'SLURM script for low-res box {slurmfilepath} does not exist.') + self.slurmfilename_low = os.path.basename(slurmfilepath) + + shutil.copy2(slurmfilepath, os.path.join(self.path, self.slurmfilename_low)) + + # Determine memory-per-cpu + memory_per_cpu = int(150000/self.nSeeds) + + # Change job name (for convenience only) + _ = subprocess.call(f"sed -i 's|#SBATCH --job-name=lowBox|#SBATCH --job-name=lowBox_{os.path.basename(self.path)}|g' {self.slurmfilename_low}", cwd=self.path, shell=True) + # Change the path inside the script to the desired one + sed_command = f"sed -i 's|/projects/shellwind/rthedin/Task2_2regis|{self.path}|g' {self.slurmfilename_low}" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Change number of nodes values + _ = subprocess.call(f"sed -i 's|#SBATCH --nodes=2|#SBATCH --nodes={int(np.ceil(self.nConditions*self.nSeeds/6))}|g' {self.slurmfilename_low}", cwd=self.path, shell=True) + # Change memory per cpu + _ = subprocess.call(f"sed -i 's|--mem-per-cpu=25000M|--mem-per-cpu={memory_per_cpu}M|g' {self.slurmfilename_low}", cwd=self.path, shell=True) + # Assemble list of conditions and write it + listtoprint = "' '".join(self.condDirList) + sed_command = f"""sed -i "s|^condList.*|condList=('{listtoprint}')|g" {self.slurmfilename_low}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Change the number of seeds + _ = subprocess.call(f"sed -i 's|nSeeds=6|nSeeds={self.nSeeds}|g' {self.slurmfilename_low}", cwd=self.path, shell=True) + + + if self.nSeeds > 6: + print(f'--- WARNING: The memory-per-cpu on the low-res boxes SLURM script might be too low given {self.nSeeds} seeds.') + + + def TS_low_slurm_submit(self, qos='normal', A=None, t=None, p=None): + # --------------------------------- + # ----- Run turbSim Low boxes ----- + # --------------------------------- + # Submit the script to SLURM + options = f"--qos='{qos}' " + if A is not None: + options += f'-A {A} ' + if t is not None: + options += f'-t {t} ' + if p is not None: + options += f'-p {p} ' + + sub_command = f"sbatch {options}{self.slurmfilename_low}" + print(f'Calling: {sub_command}') + _ = subprocess.call(sub_command, cwd=self.path, shell=True) + + + def TS_low_createSymlinks(self): + # Create symbolic links for all of the time-series and the Low.bts files too + + notepath = os.getcwd() + os.chdir(self.path) + for cond in range(self.nConditions): + for case in range(self.nCases): + for seed in range(self.nSeeds): + try: + src = os.path.join('../../../..', self.condDirList[cond], f'Seed_{seed}', 'Low.bts') + dst = os.path.join(self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim', 'Low.bts') + os.symlink(src, dst) + except FileExistsError: + print(f' File {dst} already exists. Skipping symlink.') + os.chdir(notepath) + + + def getDomainParameters(self): + + # If the low box setup hasn't been called (e.g. LES run), do it once to get domain extents + if not self.TSlowBoxFilesCreatedBool: + if self.verbose>1: print(' Running a TurbSim setup once to get domain extents') + self.TS_low_setup(writeFiles=False, runOnce=True) + + # Figure out how many (and which) high boxes actually need to be executed. Remember that wake steering, yaw misalignment, SED/ADsk models, + # and sweep in yaw do not require extra TurbSim runs + self.nHighBoxCases = len(np.unique(self.inflow_deg)) # some wind dir might be repeated for sweep on yaws + + # Old method to get allHighBoxCases. Doesn't work well if I have weird manual sweeps + allHighBoxCases_old = self.allCases.where(~self.allCases['misalignment'], drop=True).drop_vars('misalignment')\ + .where(self.allCases['nFullAeroDyn']==self.nTurbines, drop=True).drop_vars('ADmodel')\ + .where(self.allCases['nFulllElastoDyn']==self.nTurbines, drop=True).drop_vars('EDmodel')\ + .where(self.allCases['yawCase']==1, drop=True).drop_vars('yawCase') + + # This is a new method, but I'm not sure if it will work always, so let's leave the one above and check it + uniquewdir = np.unique(self.allCases.inflow_deg) + allHighBoxCases = [] + for currwdir in uniquewdir: + # Get first case to have the wind direction currwdir + firstCaseWithInflow_i = self.allCases.where(self.allCases['inflow_deg'] == currwdir, drop=True).isel(case=0) + allHighBoxCases.append(firstCaseWithInflow_i) + self.allHighBoxCases = xr.concat(allHighBoxCases, dim='case') + # But, before I change the algorithm, I want to time-test it, so let's compare both ways + if not allHighBoxCases_old.identical(self.allHighBoxCases): + self.allHighBoxCases_old = allHighBoxCases_old + print(f'!!!!!! WARNING !!!!!!!!!') + print(f'The new method for computing all the high-box cases is not producing the same set of cases as the old algorithm.') + print(f'This should only happen if you have complex sweeps that you modified manually after the code creates the initial arrays') + print(f'Check the variable .allHighBoxCases_old to see the cases using the old algorithm') + print(f'Check the variable .allHighBoxCases to see the cases using the new algorithm') + print(f'You should check which xr.dataset has the correct, unique inflow_deg values. The correct array will only have unique values') + print(f'') + if len(self.allHighBoxCases_old['inflow_deg']) != len(np.unique(self.allHighBoxCases_old['inflow_deg'])): + print(f' Checking the inflow_deg variable, it looks like the old method has non-unique wind directions. The old method is wrong here.') + if len(self.allHighBoxCases['inflow_deg']) != len(np.unique(self.allHighBoxCases['inflow_deg'])): + print(f' Checking the inflow_deg variable, it looks like the new method has non-unique wind directions. The new method is wrong here.') + else: + print(' The new method appears to be correct here! Trust but verify') + print('') + print(f'!!!!!!!!!!!!!!!!!!!!!!!!') + print(f'') + + + if self.nHighBoxCases != len(self.allHighBoxCases.case): + raise ValueError(f'The number of cases do not match as expected. {self.nHighBoxCases} unique wind directions, but {len(self.allHighBoxCases.case)} unique cases.') + + # Determine offsets from turbines coordinate frame to TurbSim coordinate frame + self.yoffset_turbsOrigin2TSOrigin = -( (self.TSlowbox.ymax - self.TSlowbox.ymin)/2 + self.TSlowbox.ymin ) + self.xoffset_turbsOrigin2TSOrigin = - self.extent_low[0]*self.D + + if self.verbose>0: + print(f" The y offset between the turbine ref frame and turbsim is {self.yoffset_turbsOrigin2TSOrigin}") + print(f" The x offset between the turbine ref frame and turbsim is {self.xoffset_turbsOrigin2TSOrigin}") + + if self.verbose>2: + print(f'allHighBoxCases is:') + print(self.allHighBoxCases) + + + def TS_high_get_time_series(self): + + # Loop on all conditions/seeds extracting time series from the Low box at turbines location + boxType='highres' + for cond in range(self.nConditions): + for seed in range(self.nSeeds): + condSeedPath = os.path.join(self.path, self.condDirList[cond], f'Seed_{seed}') + + # Read output .bts for current seed + bts = TurbSimFile(os.path.join(condSeedPath, 'Low.bts')) + bts['t'] = np.round(bts['t'], 6) # rounding single precision read as double precision + bts['dt'] = np.round(bts['dt'], 6) + + for case in range(self.nHighBoxCases): + # Get actual case number given the high-box that need to be saved + case = self.allHighBoxCases.isel(case=case)['case'].values + + caseSeedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim') + + for t in range(self.nTurbines): + # Recover turbine properties of the current case + HubHt_ = self.allCases.sel(case=case, turbine=t)['zhub'].values + xloc_ = self.allCases.sel(case=case, turbine=t)['Tx' ].values + yloc_ = self.allCases.sel(case=case, turbine=t)['Ty' ].values + + # Turbine location in TurbSim reference frame + xt = xloc_ + self.xoffset_turbsOrigin2TSOrigin + yt = yloc_ + self.yoffset_turbsOrigin2TSOrigin + + # Get indices of turbine location in TurbSim files + jTurb, kTurb = bts.closestPoint(y=yt,z=HubHt_) + Hub_series = bts['z'][kTurb] + + # Get indices of the half height position (TurbSim's hub height) + jMid, kMid = bts.iMid + + # Get time series at the box center to get mean vhub and create time array. + #Vhub = bts['u'][0,:,jTurb,kTurb] + Vmid = bts['u'][0,:,jMid,kMid] + time = bts.t + + # The time-series need to be shifted depending on the turbine location, so we need to find how many + # grid points (time steps) the data have convected. We use the mean streamwise component for that + start_time_step = round( (xt/Vmid.mean())/bts.dt ) + + # Get time-series given rolling + uvel = np.roll(bts['u'][0, :, jTurb, kTurb], start_time_step) + vvel = np.roll(bts['u'][1, :, jTurb, kTurb], start_time_step) + wvel = np.roll(bts['u'][2, :, jTurb, kTurb], start_time_step) + + # Checks + assert len(time)==len(uvel) + assert len(uvel)==len(vvel) + assert len(vvel)==len(wvel) + + # Save timeseries as CondXX/Seed_Z/USRTimeSeries_T*.txt. This file will later be copied to CondXX/CaseYY/Seed_Z + timeSeriesOutputFile = os.path.join(caseSeedPath, f'USRTimeSeries_T{t+1}.txt') + + # The reference frame used in the time-series is the inertial frame of the high-res box (local). + # Sometimes the point where we want to place the turbine at exists and then we can set y=0. For example, suppose the low-res + # grid has y = ..., 980, 1000, 1020, ..., and we want to place a turbine at y=1000. The high-res box has 5m resolution. Then, + # the time-series will be pulled from _exactly_ y=1000, and since the low-res grid has a grid point there too, so we can put + # y=0 on the time-series input file. However, if we want the turbine at y=998, we must account for the difference since this + # y value is not a grid point of the low-res box. So we compute an offset between the turbine location and the nearest grid + # point in the low-res box, and then pass this offset to the time-series file. In this example, the offset is 2 m, thus the + # time-series file will have a y of 2 m. + yoffset = bts['y'][jTurb] - yt + if yoffset != 0: + print(f"Seed {seed}, Case {case}: Turbine {t+1} is not at a grid point location. Tubine is at y={yloc_}",\ + f"on the turbine reference frame, which is y={yt} on the low-res TurbSim reference frame. The",\ + f"nearest grid point in y is {bts['y'][jTurb]} so printing y={yoffset} to the time-series file.") + writeTimeSeriesFile(timeSeriesOutputFile, yoffset, Hub_series, uvel, vvel, wvel, time) + + + + + def TS_high_setup(self, writeFiles=True): + + #todo: Check if the low-res boxes were created successfully + + if self.ds_high_les != self.cmax: + print(f'WARNING: The requested ds_high = {self.ds_high_les} m is not actually used. The TurbSim ') + print(f' boxes use the default max chord value ({self.cmax} m here) for the spatial resolution.') + + # Create symbolic links for the low-res boxes + self.TS_low_createSymlinks() + + # Open low-res boxes and extract time-series at turbine locations + self.TS_high_get_time_series() + + # Loop on all conditions/cases/seeds setting up the High boxes + boxType='highres' + for cond in range(self.nConditions): + for case in range(self.nHighBoxCases): + # Get actual case number given the high-box that need to be saved + case = self.allHighBoxCases.isel(case=case)['case'].values + if self.verbose>3: + print(f'Generating high-res box setup for cond {cond} ({self.condDirList[cond]}), case {case} ({self.caseDirList[case]}).') + for seed in range(self.nSeeds): + seedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim') + + for t in range(self.nTurbines): + + # ---------------- TurbSim High boxes setup ------------------ # + currentTSHighFile = os.path.join(seedPath, f'HighT{t+1}_stillToBeModified.inp') + + # Get properties needed for the creation of the high-res turbsim inp file + D_ = self.allCases.sel(case=case, turbine=t)['D' ].values + HubHt_ = self.allCases.sel(case=case, turbine=t)['zhub'].values + xloc_ = self.allCases.sel(case=case, turbine=t)['Tx' ].values + yloc_ = self.allCases.sel(case=case, turbine=t)['Ty' ].values + Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values + shear_ = self.allCond.sel(cond=cond)['shear' ].values + tivalue_ = self.allCond.sel(cond=cond)['TIvalue'].values + + # Coherence parameters + a = 12; b=0.12 # IEC 61400-3 ed4, app C, eq C.16 + Lambda1 = 0.7*HubHt_ if HubHt_<60 else 42 # IEC 61400-3 ed4, sec 6.3.1, eq 5 + + # Create and write new Low.inp files creating the proper box with proper resolution + currentTS = TSCaseCreation(D_, HubHt_, Vhub_, tivalue_, shear_, x=xloc_, y=yloc_, zbot=self.zbot, + cmax=self.cmax, fmax=self.fmax, Cmeander=self.Cmeander, boxType=boxType, high_ext=self.extent_high) + currentTS.writeTSFile(self.turbsimHighfilepath, currentTSHighFile, tmax=self.tmax, turb=t, verbose=self.verbose) + + # Modify some values and save file (some have already been set in the call above) + Highinp = FASTInputFile(currentTSHighFile) + Highinp['RandSeed1'] = self.seedValues[seed] + Highinp['TimeStep'] = 1/(2*self.fmax) + Highinp['TurbModel'] = f'"TIMESR"' + Highinp['UserFile'] = f'"USRTimeSeries_T{t+1}.txt"' + Highinp['RefHt'] = HubHt_ + Highinp['URef'] = Vhub_ + Highinp['PLExp'] = shear_ + #Highinp['latitude'] = latitude # Not used when IECKAI model is selected. + Highinp['InCDec1'] = Highinp['InCDec2'] = Highinp['InCDec3'] = f'"{a} {b/(8.1*Lambda1):.8f}"' + if writeFiles: + Highinp.write( os.path.join(seedPath, f'HighT{t+1}.inp') ) + + # Let's remove the original file + os.remove(os.path.join(seedPath, f'HighT{t+1}_stillToBeModified.inp')) + + self.TShighBoxFilesCreatedBool = True + + + def TS_high_slurm_prepare(self, slurmfilepath): + # --------------------------------------------------- + # ----- Prepare SLURM script for High-res boxes ----- + # --------------------------------------------------- + + if not os.path.isfile(slurmfilepath): + raise ValueError (f'SLURM script for high-res box {slurmfilepath} does not exist.') + self.slurmfilename_high = os.path.basename(slurmfilepath) + + ntasks = self.nConditions*self.nHighBoxCases*self.nSeeds*self.nTurbines + shutil.copy2(slurmfilepath, os.path.join(self.path, self.slurmfilename_high)) + + # Change job name (for convenience only) + _ = subprocess.call(f"sed -i 's|#SBATCH --job-name=highBox|#SBATCH --job-name=highBox_{os.path.basename(self.path)}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) + # Change the path inside the script to the desired one + sed_command = f"sed -i 's|/projects/shellwind/rthedin/Task2_2regis|{self.path}|g' {self.slurmfilename_high}" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Change number of turbines + _ = subprocess.call(f"sed -i 's|nTurbines=12|nTurbines={self.nTurbines}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) + # Change number of seeds + _ = subprocess.call(f"sed -i 's|nSeeds=6|nSeeds={self.nSeeds}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) + # Change number of nodes values + _ = subprocess.call(f"sed -i 's|#SBATCH --nodes=3|#SBATCH --nodes={int(np.ceil(ntasks/36))}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) + # Assemble list of conditions and write it + listtoprint = "' '".join(self.condDirList) + sed_command = f"""sed -i "s|^condList.*|condList=('{listtoprint}')|g" {self.slurmfilename_high}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Assemble list of cases and write it + highBoxesCaseDirList = [self.caseDirList[c] for c in self.allHighBoxCases.case.values] + listtoprint = "' '".join(highBoxesCaseDirList) + sed_command = f"""sed -i "s|^caseList.*|caseList=('{listtoprint}')|g" {self.slurmfilename_high}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + + + + def TS_high_slurm_submit(self, qos='normal', A=None, t=None, p=None): + # ---------------------------------- + # ----- Run turbSim High boxes ----- + # ---------------------------------- + # Submit the script to SLURM + options = f"--qos='{qos}' " + if A is not None: + options += f'-A {A} ' + if t is not None: + options += f'-t {t} ' + if p is not None: + otions += f'-p {p} ' + + sub_command = f"sbatch {options}{self.slurmfilename_high}" + print(f'Calling: {sub_command}') + _ = subprocess.call(sub_command, cwd=self.path, shell=True) + + + def TS_high_create_symlink(self): + + # Create symlink of all the high boxes for the cases with wake steering and yaw misalignment. These are the "repeated" boxes + + if self.verbose>0: + print(f'Creating symlinks for all the high-resolution boxes') + + notepath = os.getcwd() + os.chdir(self.path) + for cond in range(self.nConditions): + for case in range(self.nCases): + # In order to do the symlink let's check if the current case is source (has bts). If so, skip if. If not, find its equivalent source + casematch = self.allHighBoxCases['case'] == case + if len(np.where(casematch)) != 1: + raise ValueError (f'Something is wrong with your allHighBoxCases array. Found repeated case number. Stopping') + + src_id = np.where(casematch)[0] + + if len(src_id) == 1: + # Current case is source (contains bts). Skipping + continue + + # If we are here, the case is destination. Let's find the first case with the same wdir for source + varsToDrop = ['misalignment','yawmis','yaw','yawCase','ADmodel','EDmodel','nFullAeroDyn','nFulllElastoDyn'] + dst_xr = self.allCases.sel(case=case, drop=True).drop_vars(varsToDrop) + currwdir = dst_xr['inflow_deg'] + + src_xr = self.allHighBoxCases.where(self.allHighBoxCases['inflow_deg'] == currwdir, drop=True).drop_vars(varsToDrop) + src_case = src_xr['case'].values[0] + src_xr = src_xr.sel(case=src_case, drop=True) + + # Let's make sure the src and destination are the same case, except yaw misalignment and ROM bools, and yaw angles + # The xarrays we are comparing here contains all self.nTurbines turbines and no info about seed + xr.testing.assert_equal(src_xr, dst_xr) + + # Now that we have the correct arrays, we perform the loop on the turbines and seeds + for t in range(self.nTurbines): + for seed in range(self.nSeeds): + src = os.path.join('../../../..', self.condDirList[cond], self.caseDirList[src_case], f'Seed_{seed}', 'TurbSim', f'HighT{t+1}.bts') + dst = os.path.join(self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim', f'HighT{t+1}.bts') + + try: + os.symlink(src, dst) + except FileExistsError: + if self.verbose>1: print(f' File {dst} already exists. Skipping symlink.') + os.chdir(notepath) + + + def FF_setup(self, outlistFF=None, **kwargs): + ''' + + **kwargs: + seedsToKeep: int + For the LES setup. Often 1, but if you want to run multiple times the same thing, pick a different value + ''' + + if outlistFF is None: + # Output list for FAST.Farm runs. Use 1 at the end for turbines (they will be replicated for all turbines) + outlistFF = [ + "RtAxsXT1 , RtAxsYT1 , RtAxsZT1", + "RtPosXT1 , RtPosYT1 , RtPosZT1", + "YawErrT1", + "TIAmbT1", + 'RtVAmbT1', + 'RtVRelT1', + 'RtSkewT1', + 'RtCtAvgT1', + 'W1VAmbX, W1VAmbY, W1VAmbZ', + "W1VDisX, W1VDisY, W1VDisZ", + "CtT1N01 , CtT1N02 , CtT1N03 , CtT1N04 , CtT1N05 , CtT1N06 , CtT1N07 , CtT1N08 , CtT1N09 , CtT1N10 , CtT1N11 , CtT1N12 , CtT1N13 , CtT1N14 , CtT1N15 , CtT1N16 , CtT1N17 , CtT1N18 , CtT1N19 , CtT1N20", + # "WkAxsXT1D1 , WkAxsXT1D2 , WkAxsXT1D3 , WkAxsXT1D4 , WkAxsXT1D5 , WkAxsXT1D6 , WkAxsXT1D7", + # "WkAxsYT1D1 , WkAxsYT1D2 , WkAxsYT1D3 , WkAxsYT1D4 , WkAxsYT1D5 , WkAxsYT1D6 , WkAxsYT1D7", + # "WkAxsZT1D1 , WkAxsZT1D2 , WkAxsZT1D3 , WkAxsZT1D4 , WkAxsZT1D5 , WkAxsZT1D6 , WkAxsZT1D7", + "WkPosXT1D1 , WkPosXT1D2 , WkPosXT1D3 , WkPosXT1D4 , WkPosXT1D5 , WkPosXT1D6 , WkPosXT1D7 , WkPosXT1D8 , WkPosXT1D9", + "WkPosYT1D1 , WkPosYT1D2 , WkPosYT1D3 , WkPosYT1D4 , WkPosYT1D5 , WkPosYT1D6 , WkPosYT1D7 , WkPosYT1D8 , WkPosYT1D9", + "WkPosZT1D1 , WkPosZT1D2 , WkPosZT1D3 , WkPosZT1D4 , WkPosZT1D5 , WkPosZT1D6 , WkPosZT1D7 , WkPosZT1D8 , WkPosZT1D9", + # "WkDfVxT1N01D1, WkDfVxT1N02D1, WkDfVxT1N03D1, WkDfVxT1N04D1, WkDfVxT1N05D1, WkDfVxT1N06D1, WkDfVxT1N07D1, WkDfVxT1N08D1, WkDfVxT1N09D1, WkDfVxT1N10D1, WkDfVxT1N11D1, WkDfVxT1N12D1, WkDfVxT1N13D1, WkDfVxT1N14D1, WkDfVxT1N15D1, WkDfVxT1N16D1, WkDfVxT1N17D1, WkDfVxT1N18D1, WkDfVxT1N19D1, WkDfVxT1N20D1", + # "WkDfVxT1N01D2, WkDfVxT1N02D2, WkDfVxT1N03D2, WkDfVxT1N04D2, WkDfVxT1N05D2, WkDfVxT1N06D2, WkDfVxT1N07D2, WkDfVxT1N08D2, WkDfVxT1N09D2, WkDfVxT1N10D2, WkDfVxT1N11D2, WkDfVxT1N12D2, WkDfVxT1N13D2, WkDfVxT1N14D2, WkDfVxT1N15D2, WkDfVxT1N16D2, WkDfVxT1N17D2, WkDfVxT1N18D2, WkDfVxT1N19D2, WkDfVxT1N20D2", + # "WkDfVxT1N01D3, WkDfVxT1N02D3, WkDfVxT1N03D3, WkDfVxT1N04D3, WkDfVxT1N05D3, WkDfVxT1N06D3, WkDfVxT1N07D3, WkDfVxT1N08D3, WkDfVxT1N09D3, WkDfVxT1N10D3, WkDfVxT1N11D3, WkDfVxT1N12D3, WkDfVxT1N13D3, WkDfVxT1N14D3, WkDfVxT1N15D3, WkDfVxT1N16D3, WkDfVxT1N17D3, WkDfVxT1N18D3, WkDfVxT1N19D3, WkDfVxT1N20D3", + # "WkDfVxT1N01D4, WkDfVxT1N02D4, WkDfVxT1N03D4, WkDfVxT1N04D4, WkDfVxT1N05D4, WkDfVxT1N06D4, WkDfVxT1N07D4, WkDfVxT1N08D4, WkDfVxT1N09D4, WkDfVxT1N10D4, WkDfVxT1N11D4, WkDfVxT1N12D4, WkDfVxT1N13D4, WkDfVxT1N14D4, WkDfVxT1N15D4, WkDfVxT1N16D4, WkDfVxT1N17D4, WkDfVxT1N18D4, WkDfVxT1N19D4, WkDfVxT1N20D4", + # "WkDfVxT1N01D5, WkDfVxT1N02D5, WkDfVxT1N03D5, WkDfVxT1N04D5, WkDfVxT1N05D5, WkDfVxT1N06D5, WkDfVxT1N07D5, WkDfVxT1N08D5, WkDfVxT1N09D5, WkDfVxT1N10D5, WkDfVxT1N11D5, WkDfVxT1N12D5, WkDfVxT1N13D5, WkDfVxT1N14D5, WkDfVxT1N15D5, WkDfVxT1N16D5, WkDfVxT1N17D5, WkDfVxT1N18D5, WkDfVxT1N19D5, WkDfVxT1N20D5", + # "WkDfVxT1N01D6, WkDfVxT1N02D6, WkDfVxT1N03D6, WkDfVxT1N04D6, WkDfVxT1N05D6, WkDfVxT1N06D6, WkDfVxT1N07D6, WkDfVxT1N08D6, WkDfVxT1N09D6, WkDfVxT1N10D6, WkDfVxT1N11D6, WkDfVxT1N12D6, WkDfVxT1N13D6, WkDfVxT1N14D6, WkDfVxT1N15D6, WkDfVxT1N16D6, WkDfVxT1N17D6, WkDfVxT1N18D6, WkDfVxT1N19D6, WkDfVxT1N20D6", + # "WkDfVxT1N01D7, WkDfVxT1N02D7, WkDfVxT1N03D7, WkDfVxT1N04D7, WkDfVxT1N05D7, WkDfVxT1N06D7, WkDfVxT1N07D7, WkDfVxT1N08D7, WkDfVxT1N09D7, WkDfVxT1N10D7, WkDfVxT1N11D7, WkDfVxT1N12D7, WkDfVxT1N13D7, WkDfVxT1N14D7, WkDfVxT1N15D7, WkDfVxT1N16D7, WkDfVxT1N17D7, WkDfVxT1N18D7, WkDfVxT1N19D7, WkDfVxT1N20D7", + # "WkDfVrT1N01D1, WkDfVrT1N02D1, WkDfVrT1N03D1, WkDfVrT1N04D1, WkDfVrT1N05D1, WkDfVrT1N06D1, WkDfVrT1N07D1, WkDfVrT1N08D1, WkDfVrT1N09D1, WkDfVrT1N10D1, WkDfVrT1N11D1, WkDfVrT1N12D1, WkDfVrT1N13D1, WkDfVrT1N14D1, WkDfVrT1N15D1, WkDfVrT1N16D1, WkDfVrT1N17D1, WkDfVrT1N18D1, WkDfVrT1N19D1, WkDfVrT1N20D1", + # "WkDfVrT1N01D2, WkDfVrT1N02D2, WkDfVrT1N03D2, WkDfVrT1N04D2, WkDfVrT1N05D2, WkDfVrT1N06D2, WkDfVrT1N07D2, WkDfVrT1N08D2, WkDfVrT1N09D2, WkDfVrT1N10D2, WkDfVrT1N11D2, WkDfVrT1N12D2, WkDfVrT1N13D2, WkDfVrT1N14D2, WkDfVrT1N15D2, WkDfVrT1N16D2, WkDfVrT1N17D2, WkDfVrT1N18D2, WkDfVrT1N19D2, WkDfVrT1N20D2", + # "WkDfVrT1N01D3, WkDfVrT1N02D3, WkDfVrT1N03D3, WkDfVrT1N04D3, WkDfVrT1N05D3, WkDfVrT1N06D3, WkDfVrT1N07D3, WkDfVrT1N08D3, WkDfVrT1N09D3, WkDfVrT1N10D3, WkDfVrT1N11D3, WkDfVrT1N12D3, WkDfVrT1N13D3, WkDfVrT1N14D3, WkDfVrT1N15D3, WkDfVrT1N16D3, WkDfVrT1N17D3, WkDfVrT1N18D3, WkDfVrT1N19D3, WkDfVrT1N20D3", + # "WkDfVrT1N01D4, WkDfVrT1N02D4, WkDfVrT1N03D4, WkDfVrT1N04D4, WkDfVrT1N05D4, WkDfVrT1N06D4, WkDfVrT1N07D4, WkDfVrT1N08D4, WkDfVrT1N09D4, WkDfVrT1N10D4, WkDfVrT1N11D4, WkDfVrT1N12D4, WkDfVrT1N13D4, WkDfVrT1N14D4, WkDfVrT1N15D4, WkDfVrT1N16D4, WkDfVrT1N17D4, WkDfVrT1N18D4, WkDfVrT1N19D4, WkDfVrT1N20D4", + # "WkDfVrT1N01D5, WkDfVrT1N02D5, WkDfVrT1N03D5, WkDfVrT1N04D5, WkDfVrT1N05D5, WkDfVrT1N06D5, WkDfVrT1N07D5, WkDfVrT1N08D5, WkDfVrT1N09D5, WkDfVrT1N10D5, WkDfVrT1N11D5, WkDfVrT1N12D5, WkDfVrT1N13D5, WkDfVrT1N14D5, WkDfVrT1N15D5, WkDfVrT1N16D5, WkDfVrT1N17D5, WkDfVrT1N18D5, WkDfVrT1N19D5, WkDfVrT1N20D5", + # "WkDfVrT1N01D6, WkDfVrT1N02D6, WkDfVrT1N03D6, WkDfVrT1N04D6, WkDfVrT1N05D6, WkDfVrT1N06D6, WkDfVrT1N07D6, WkDfVrT1N08D6, WkDfVrT1N09D6, WkDfVrT1N10D6, WkDfVrT1N11D6, WkDfVrT1N12D6, WkDfVrT1N13D6, WkDfVrT1N14D6, WkDfVrT1N15D6, WkDfVrT1N16D6, WkDfVrT1N17D6, WkDfVrT1N18D6, WkDfVrT1N19D6, WkDfVrT1N20D6", + # "WkDfVrT1N01D7, WkDfVrT1N02D7, WkDfVrT1N03D7, WkDfVrT1N04D7, WkDfVrT1N05D7, WkDfVrT1N06D7, WkDfVrT1N07D7, WkDfVrT1N08D7, WkDfVrT1N09D7, WkDfVrT1N10D7, WkDfVrT1N11D7, WkDfVrT1N12D7, WkDfVrT1N13D7, WkDfVrT1N14D7, WkDfVrT1N15D7, WkDfVrT1N16D7, WkDfVrT1N17D7, WkDfVrT1N18D7, WkDfVrT1N19D7, WkDfVrT1N20D7", + ] + self.outlistFF = outlistFF + + + # Planes to save in FAST.Farm. We want the planes through the original farm, so let's get the position of the turbines at wdir=0 + alignedTurbs = self.allCases.where(self.allCases['inflow_deg']==0, drop=True).isel(case=0) + if self.inflowStr == 'TurbSim': + # Turbine location in TurbSim reference frame + xWT = alignedTurbs['Tx'].values + self.xoffset_turbsOrigin2TSOrigin + yWT = alignedTurbs['Ty'].values + self.yoffset_turbsOrigin2TSOrigin + elif self.inflowStr == 'LES': + # Turbine location in LES reference frame + xWT = alignedTurbs['Tx'].values + yWT = alignedTurbs['Ty'].values + + offset=10 + planes_xy = [self.zhub+self.zbot] + planes_yz = np.unique(xWT+offset) + planes_xz = np.unique(yWT) + + # Number of planes must be at most 9 + self.planes_xy = planes_xy[0:9] + self.planes_yz = planes_yz[0:9] + self.planes_xz = planes_xz[0:9] + + + if self.inflowStr == 'LES': + self._FF_setup_LES(**kwargs) + + elif self.inflowStr == 'TurbSim': + # We need to make sure the TurbSim boxes have been executed. Let's check the last line of the logfile + highboxlog_path = os.path.join(self.path, self.condDirList[0], self.caseDirList[0], 'Seed_0', 'TurbSim', 'log.hight1.seed0.txt') + if not os.path.isfile(highboxlog_path): + raise ValueError(f'All TurbSim boxes need to be completed before this step can be done.') + + with open(highboxlog_path) as f: + last = None + for last in (line for line in f if line.rstrip('\n')): pass + + if last is None or 'TurbSim terminated normally' not in last: + raise ValueError(f'All TurbSim boxes need to be completed before this step can be done.') + + self._FF_setup_TS(**kwargs) + + + + def _FF_setup_LES(self, seedsToKeep=1): + + self.seedsToKeep = seedsToKeep + + # Clean unnecessary directories and files created by the general setup + for cond in range(self.nConditions): + for seed in range(self.nSeeds): + currpath = os.path.join(self.path, self.condDirList[cond], f'Seed_{seed}') + if os.path.isdir(currpath): shutil.rmtree(currpath) + + for case in range(self.nCases): + #shutil.rmtree(os.path.join(path, condDirList[cond], caseDirList[case], f'Seed_0','InflowWind.dat')) # needs to exist + for seed in range(seedsToKeep,self.nSeeds): + currpath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}') + if os.path.isdir(currpath): shutil.rmtree(currpath) + + + # Create symlinks for the processed-and-renamed vtk files + LESboxesDirName = 'LESboxes' + + for cond in range(self.nConditions): + for case in range(self.nCases): + for seed in range(self.seedsToKeep): + # Remove TurbSim dir + currpath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim') + if os.path.isdir(currpath): shutil.rmtree(currpath) + # Create LES boxes dir + currpath = os.path.join(self.path,self.condDirList[cond],self.caseDirList[case],f'Seed_{seed}',LESboxesDirName) + if not os.path.isdir(currpath): os.makedirs(currpath) + + # Low-res box + try: + src = os.path.join(self.LESpath[cond], 'Low') + dst = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', LESboxesDirName, 'Low') + os.symlink(src, dst) + except FileExistsError: + print(f'Directory {dst} already exists. Skipping symlink.') + + # High-res boxes + for t in range(self.nTurbines): + try: + src = os.path.join(self.LESpath[cond], f"HighT{t+1}_inflow{str(self.allCases.sel(case=case).inflow_deg.values).replace('-','m')}deg") + dst = os.path.join(self.path,self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', LESboxesDirName, f'HighT{t+1}') + os.symlink(src, dst) + except FileExistsError: + print(f'Directory {dst} already exists. Skipping symlink.') + + + # Loops on all conditions/cases and cases for FAST.Farm + for cond in range(self.nConditions): + for case in range(self.nCases): + for seed in range(seedsToKeep): + seedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}') + + # Recover case properties + D_ = self.allCases['D' ].max().values # Getting the maximum in case different turbines are present + Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values + # Recover turbine properties (array of length nTurbines) + xWT = self.allCases.sel(case=case)['Tx'].values + yWT = self.allCases.sel(case=case)['Ty'].values + zWT = self.allCases.sel(case=case)['Tz'].values + + # --------------- FAST.Farm ----------------- # + templateFSTF = os.path.join(self.templatePath, self.FFfilename) + outputFSTF = os.path.join(seedPath, 'FFarm_mod.fstf') + + # Write the file (mostly for turbine locations here + writeFastFarm(outputFSTF, templateFSTF, xWT, yWT, zWT, FFTS=None, OutListT1=self.outlistFF, noLeadingZero=True) + + # Open saved file and change additional values manually or make sure we have the correct ones + ff_file = FASTInputFile(outputFSTF) + + # Open output file and change additional values manually or make sure we have the correct ones + ff_file['InflowFile'] = f'"./{self.IWfilename}"' + ff_file['Mod_AmbWind'] = 1 # 1: LES boxes; 2: single TurbSim; 3: multiple TurbSim + ff_file['TMax'] = self.tmax + + # LES-related parameters + ff_file['DT_Low-VTK'] = self.dt_low_les + ff_file['DT_High-VTK'] = self.dt_high_les + ff_file['WindFilePath'] = f'''"{os.path.join(seedPath, LESboxesDirName)}"''' + #if checkWindFiles: + # ff_file['ChkWndFiles'] = 'TRUE' + + # Super controller + ff_file['UseSC'] = False + ff_file['SC_FileName'] = '/path/to/SC_DLL.dll' + + # Wake dynamics + ff_file['Mod_Wake'] = self.mod_wake + if self.mod_wake == 1: # Polar model + self.dr = self.cmax + else: # Curled; Cartesian + self.dr = round(self.D/10) + ff_file['dr'] = self.dr + ff_file['NumRadii'] = int(np.ceil(3*D_/(2*self.dr) + 1)) + ff_file['NumPlanes'] = int(np.ceil( 20*D_/(self.dt_low_les*Vhub_*(1-1/6)) ) ) + + # Vizualization outputs + ff_file['WrDisWind'] = 'False' + ff_file['WrDisDT'] = ff_file['DT_Low-VTK'] # default is the same as DT_Low-VTK + ff_file['NOutDisWindXY'] = len(self.planes_xy) + ff_file['OutDisWindZ'] = ', '.join(map(str, self.planes_xy)) + ff_file['NOutDisWindYZ'] = len(self.planes_yz) + ff_file['OutDisWindX'] = ', '.join(map(str, self.planes_yz)) + ff_file['NOutDisWindXZ'] = len(self.planes_xz) + ff_file['OutDisWindY'] = ', '.join(map(str, self.planes_xz)) + + # Modify wake outputs + ff_file['NOutDist'] = 9 + ff_file['OutDist'] = ', '.join(map(str, [d*D_ for d in [0.5,1,1.5,2,3,4,5,6,7]])) + # Mofidy wind output + ff_file['NWindVel'] = len(xWT[:9]) + ff_file['WindVelX'] = ', '.join(map(str, xWT[:9])) + ff_file['WindVelY'] = ', '.join(map(str, yWT[:9])) + ff_file['WindVelZ'] = ', '.join(map(str, zWT[:9]+self.zhub)) + + ff_file.write(outputFSTF) + + # Update the number of seeds variable for the LES case + self.nSeeds = self.seedsToKeep + + + + def _FF_setup_TS(self): + + # Let's first create the symlinks for the high-res boxes. Remember that only the cases with + # unique winddir in self.allHighBoxCases have executed high-res boxes, the rest is all links + self.TS_high_create_symlink() + + # Loops on all conditions/cases and cases for FAST.Farm + for cond in range(self.nConditions): + print(f'Processing condition {self.condDirList[cond]}') + for case in range(self.nCases): + print(f' Processing all {self.nSeeds} seeds of case {self.caseDirList[case]}', end='\r') + for seed in range(self.nSeeds): + seedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}') + + # Recover case properties + D_ = self.allCases['D' ].max().values # Getting the maximum in case different turbines are present + HubHt_ = self.allCases['zhub'].max().values # Getting the maximum in case different turbines are present + Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values + shear_ = self.allCond.sel(cond=cond)['shear' ].values + tivalue_ = self.allCond.sel(cond=cond)['TIvalue'].values + # Recover turbine properties (array of length nTurbines) + xWT = self.allCases.sel(case=case)['Tx'].values + yWT = self.allCases.sel(case=case)['Ty'].values + zWT = self.allCases.sel(case=case)['Tz'].values + + # # Turbine location in TurbSim reference frame + xt = xWT + self.xoffset_turbsOrigin2TSOrigin + yt = yWT + self.yoffset_turbsOrigin2TSOrigin + + + # --------------- FAST.Farm ----------------- # + templateFSTF = os.path.join(self.templatePath, self.FFfilename) + outputFSTF = os.path.join(seedPath, 'FFarm_mod.fstf') + + # Open TurbSim outputs for the Low box and one High box (they are all of the same size) + lowbts = TurbSimFile(os.path.join(seedPath,'TurbSim', 'Low.bts')) + highbts = TurbSimFile(os.path.join(seedPath,'TurbSim', f'HighT1.bts')) + + # Get dictionary with all the D{X,Y,Z,t}, L{X,Y,Z,t}, N{X,Y,Z,t}, {X,Y,Z}0 + d = self._getBoxesParamsForFF(lowbts, highbts, self.dt_low_les, D_, HubHt_, xWT, yt) + + # Write the file + writeFastFarm(outputFSTF, templateFSTF, xWT, yt, zWT, d, OutListT1=self.outlistFF, noLeadingZero=True) + + + # Open saved file and change additional values manually or make sure we have the correct ones + ff_file = FASTInputFile(outputFSTF) + ff_file['InflowFile'] = f'"./{self.IWfilename}"' + #ff_file['DT']=1.0 + ff_file['Mod_AmbWind'] = 3 # 1: LES boxes; 2: single TurbSim; 3: multiple TurbSim + ff_file['TMax'] = self.tmax + + # Super controller + ff_file['UseSC'] = False + ff_file['SC_FileName'] = '/path/to/SC_DLL.dll' + + # Wake dynamics + ff_file['Mod_Wake'] = self.mod_wake + if self.mod_wake == 1: # Polar model + self.dr = self.cmax + else: # Curled; Cartesian + self.dr = round(self.D/10) + ff_file['dr'] = self.dr + ff_file['NumRadii'] = int(np.ceil(3*D_/(2*self.dr) + 1)) + ff_file['NumPlanes'] = int(np.ceil( 20*D_/(self.dt_low_les*Vhub_*(1-1/6)) ) ) + + # Vizualization outputs + ff_file['WrDisWind'] = 'False' + ff_file['WrDisDT'] = ff_file['DT_Low'] # default is the same as DT_Low + ff_file['NOutDisWindXY'] = len(self.planes_xy) + ff_file['OutDisWindZ'] = ', '.join(map(str, self.planes_xy)) + ff_file['NOutDisWindYZ'] = len(self.planes_yz) + ff_file['OutDisWindX'] = ', '.join(map(str, self.planes_yz)) + ff_file['NOutDisWindXZ'] = len(self.planes_xz) + ff_file['OutDisWindY'] = ', '.join(map(str, self.planes_xz)) + + # Modify wake outputs + ff_file['NOutDist'] = 9 + ff_file['OutDist'] = ', '.join(map(str, [1,1.5,2,2.5,3,3.5,4,5,6]*D_)) + # Mofidy wind output + ff_file['NWindVel'] = len(xWT[:9]) + ff_file['WindVelX'] = ', '.join(map(str, xWT[:9])) + ff_file['WindVelY'] = ', '.join(map(str, yWT[:9])) + ff_file['WindVelZ'] = ', '.join(map(str, zWT[:9]+self.zhub)) + + ff_file.write(outputFSTF) + print(f'Done processing condition {self.condDirList[cond]} ') + + return + + + + def _getBoxesParamsForFF(self, lowbts, highbts, dt_low_desired, D, HubHt, xWT, yt): + # Get mean wind speeds at the half height location (advection speed) + _, meanU_High = highbts.midValues() + _, meanU_Low = lowbts.midValues() + + dT_High = np.round(highbts.dt, 4) + # dX_High can sometimes be too high. So get the closest to the cmax, but multiple of what should have been + dX_High = round(meanU_High*dT_High) + if self.verbose>1: + print(f'original dX_High is {dX_High}') + dX_High = round(self.cmax/dX_High) * dX_High + if self.verbose>1: + print(f'after adjusting to closes multiple of cmax, dX_High is {dX_High}') + dY_High = highbts.y[1] - highbts.y[0] + dZ_High = highbts.z[1] - highbts.z[0] + + + # ----- Low + dT_Low = getMultipleOf(dt_low_desired, multipleof=dT_High) + dX_Low = getMultipleOf(meanU_Low*dT_Low, multipleof=dX_High) + dY_Low = lowbts.y[1] - lowbts.y[0] + dZ_Low = lowbts.z[1] - lowbts.z[0] + + LY_Low = lowbts.y[-1]-lowbts.y[0] + LZ_Low = lowbts.z[-1]-lowbts.z[0] + LT_Low = np.round(lowbts.t[-1]-lowbts.t[0], 4) + + X0_Low = np.floor( (min(xWT) - self.extent_low[0]*D )) + X0_Low = getMultipleOf(X0_Low, multipleof=dX_Low) + Y0_Low = np.floor( -LY_Low/2 ) # Starting on integer value for aesthetics + Z0_Low = lowbts.z[0] # we start at lowest to include tower + + XMax_Low = getMultipleOf(max(xWT) + self.extent_low[1]*D, multipleof=dX_Low) + LX_Low = XMax_Low-X0_Low + + nX_Low = int(np.ceil(LX_Low/dX_Low)+1) + nY_Low = len(lowbts.y) + nZ_Low = len(lowbts.z) + + assert nY_Low == int(np.ceil(LY_Low/dY_Low)+1) + assert nZ_Low == int(np.ceil(LZ_Low/dZ_Low)+1) + assert (nY_Low-1)*dY_Low == LY_Low + assert (nZ_Low-1)*dZ_Low == LZ_Low + + + # ----- High + Z0_High = highbts.z[0] # we start at lowest to include tower + + LX_High = self.extent_high*D + LY_High = highbts.y[-1]-highbts.y[0] + LZ_High = highbts.z[-1]-highbts.z[0] + LT_High = np.round(highbts.t[-1]-highbts.t[0], 4) + + nX_High = int(np.ceil(LX_High/dX_High) + 1) # plus 1 from the guidance + nY_High = len(highbts.y) + nZ_High = len(highbts.z) + + assert nY_High == int(np.ceil(LY_High/dY_High)+1) + assert nZ_High == int(np.ceil(LZ_High/dZ_High)+1) + assert (nY_High-1)*dY_High == LY_High + assert (nZ_High-1)*dZ_High == LZ_High + + # --- High-res location per turbine + X0_desired = np.asarray(xWT)-LX_High/2 # high-res is centered on turbine location + Y0_desired = np.asarray(yt)-LY_High/2 # high-res is centered on turbine location + X0_High = X0_Low + np.floor((X0_desired-X0_Low)/dX_High)*dX_High + Y0_High = Y0_Low + np.floor((Y0_desired-Y0_Low)/dY_High)*dY_High + + if self.verbose>2: + print(f' Low Box \t\t High box ') + print(f'dT_Low: {dT_Low}\t\t dT_High: {dT_High}') + print(f'dX_Low: {dX_Low}\t\t dX_High: {dX_High}') + print(f'dY_Low: {dY_Low}\t\t dY_High: {dY_High}') + print(f'dZ_Low: {dZ_Low}\t\t dZ_High: {dZ_High}') + print(f'LX_Low: {LX_Low}\t\t LX_High: {LX_High}') + print(f'LY_Low: {LY_Low}\t\t LY_High: {LY_High}') + print(f'LZ_Low: {LZ_Low}\t\t LZ_High: {LZ_High}') + print(f'LT_Low: {LT_Low}\t\t LT_High: {LT_High}') + print(f'nX_Low: {nX_Low}\t\t nX_High: {nX_High}') + print(f'nY_Low: {nY_Low}\t\t nY_High: {nY_High}') + print(f'nZ_Low: {nZ_Low}\t\t nZ_High: {nZ_High}') + print(f'X0_Low: {X0_Low}\t\t X0_High: {X0_High}') + print(f'Y0_Low: {Y0_Low} \t Y0_High: {Y0_High}') + print(f'Z0_Low: {Z0_Low}\t\t Z0_High: {Z0_High}') + + + # Fill dictionary with all values + d = dict() + d['DT_Low'] = np.around(dT_Low ,4) + d['DT_High'] = np.around(dT_High,4) + d['NX_Low'] = nX_Low + d['NY_Low'] = nY_Low + d['NZ_Low'] = nZ_Low + d['X0_Low'] = np.around(X0_Low,4) + d['Y0_Low'] = np.around(Y0_Low,4) + d['Z0_Low'] = np.around(Z0_Low,4) + d['dX_Low'] = np.around(dX_Low,4) + d['dY_Low'] = np.around(dY_Low,4) + d['dZ_Low'] = np.around(dZ_Low,4) + d['NX_High'] = nX_High + d['NY_High'] = nY_High + d['NZ_High'] = nZ_High + # --- High extent info for turbine outputs + d['dX_High'] = np.around(dX_High,4) + d['dY_High'] = np.around(dY_High,4) + d['dZ_High'] = np.around(dZ_High,4) + d['X0_High'] = np.around(X0_High,4) + d['Y0_High'] = np.around(Y0_High,4) + d['Z0_High'] = np.around(Z0_High,4) + # --- Misc + d['U_mean_Low'] = meanU_Low + d['U_mean_High'] = meanU_High + + + # --- Sanity check: check that the high res is at "almost" an integer location + X_rel = (np.array(d['X0_High'])-d['X0_Low'])/d['dX_High'] + Y_rel = (np.array(d['Y0_High'])-d['Y0_Low'])/d['dY_High'] + dX = X_rel - np.round(X_rel) # Should be close to zero + dY = Y_rel - np.round(Y_rel) # Should be close to zero + + if any(abs(dX)>1e-3): + print('Deltas:',dX) + raise Exception('Some X0_High are not on an integer multiple of the high-res grid') + if any(abs(dY)>1e-3): + print('Deltas:',dY) + raise Exception('Some Y0_High are not on an integer multiple of the high-res grid') + + return d + + + + def FF_slurm_prepare(self, slurmfilepath): + # ---------------------------------------------- + # ----- Prepare SLURM script for FAST.Farm ----- + # ------------- ONE SCRIPT PER CASE ------------ + # ---------------------------------------------- + + if not os.path.isfile(slurmfilepath): + raise ValueError (f'SLURM script for FAST.Farm {slurmfilepath} does not exist.') + self.slurmfilename_ff = os.path.basename(slurmfilepath) + + + for cond in range(self.nConditions): + for case in range(self.nCases): + for seed in range(self.nSeeds): + + fname = f'runFASTFarm_cond{cond}_case{case}_seed{seed}.sh' + shutil.copy2(slurmfilepath, os.path.join(self.path, fname)) + + # Change job name (for convenience only) + sed_command = f"sed -i 's|#SBATCH --job-name=runFF|#SBATCH --job-name=c{cond}_c{case}_s{seed}_runFF_{os.path.basename(self.path)}|g' {fname}" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Change logfile name (for convenience only) + sed_command = f"sed -i 's|#SBATCH --output log.fastfarm_c0_c0_seed0|#SBATCH --output log.fastfarm_c{cond}_c{case}_s{seed}|g' {fname}" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Change the fastfarm binary to be called + sed_command = f"""sed -i "s|^fastfarmbin.*|fastfarmbin='{self.ffbin}'|g" {fname}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Change the path inside the script to the desired one + sed_command = f"sed -i 's|/projects/shellwind/rthedin/Task2_2regis|{self.path}|g' {fname}" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Write condition + sed_command = f"""sed -i "s|^cond.*|cond='{self.condDirList[cond]}'|g" {fname}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Write case + sed_command = f"""sed -i "s|^case.*|case='{self.caseDirList[case]}'|g" {fname}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + # Write seed + sed_command = f"""sed -i "s|^seed.*|seed={seed}|g" {fname}""" + _ = subprocess.call(sed_command, cwd=self.path, shell=True) + + + + def FF_slurm_submit(self, qos='normal', A=None, t=None, p=None, delay=4): + + # ---------------------------------- + # ---------- Run FAST.Farm --------- + # ------- ONE SCRIPT PER CASE ------ + # ---------------------------------- + import time + + for cond in range(self.nConditions): + for case in range(self.nCases): + for seed in range(self.nSeeds): + + # Submit the script to SLURM + fname = f'runFASTFarm_cond{cond}_case{case}_seed{seed}.sh' + + options = f"--qos='{qos}' " + if A is not None: + options += f'-A {A} ' + if t is not None: + options += f'-t {t} ' + if p is not None: + otions += f'-p {p} ' + + sub_command = f"sbatch {options}{fname}" + print(f'Calling: {sub_command}') + _ = subprocess.call(sub_command, cwd=self.path, shell=True) + time.sleep(delay) # Sometimes the same job gets submitted twice. This gets around it. + + + def FF_check_output(self): + ''' + Check all the FF output files and look for the termination string. + ''' + + ff_run_failed = False + for cond in range(self.nConditions): + for case in range(self.nCases): + if self.verbose>1: print(f'Checking {self.condDirList[cond]}, {self.caseDirList[case]}') + for seed in range(self.nSeeds): + # Let's check the last line of the logfile + fflog_path = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', f'log.fastfarm.seed{seed}.txt') + if not os.path.isfile(fflog_path): + print(f'{self.condDirList[cond]}, {self.caseDirList[case]}, seed {seed}: FAST.Farm log file does not exist.') + ff_run_failed=True + + else: + tail_command = ['tail', '-n', '2', fflog_path] + tail = subprocess.check_output(tail_command).decode('utf-8') + if tail.strip() != 'FAST.Farm terminated normally.': + print(f'{self.condDirList[cond]}, {self.caseDirList[case]}, seed {seed}: FAST.Farm did not complete successfully.') + ff_run_failed=True + + if ff_run_failed: + print('') + raise ValueError(f'Not all FAST.Farm runs were successful') + else: + print(f'All cases finished successfully.') + + + + def plot(self, figsize=(15,7), fontsize=14, saveFig=True, returnFig=False, figFormat='png'): + import matplotlib.pyplot as plt + + fig, ax = plt.subplots(figsize=figsize) + + # for plotting different inflow angles + alphas = np.append(1, np.linspace(0.5,0.2, len(self.wts_rot_ds['inflow_deg'])-1)) + + # low-res box + try: + ax.plot([self.TSlowbox.xmin, self.TSlowbox.xmax, self.TSlowbox.xmax, self.TSlowbox.xmin, self.TSlowbox.xmin], + [self.TSlowbox.ymin, self.TSlowbox.ymin, self.TSlowbox.ymax, self.TSlowbox.ymax, self.TSlowbox.ymin],'--k',lw=2,label='Low') + except AttributeError: + print(f'WARNING: The exact limits of the low-res box have not been computed yet. Showing extents given as inputs') + xmin = self.allCases['Tx'].min()-self.extent_low[0]*self.D + xmax = self.allCases['Tx'].max()+self.extent_low[1]*self.D + ymin = self.allCases['Ty'].min()-self.extent_low[2]*self.D + ymax = self.allCases['Ty'].max()+self.extent_low[3]*self.D + ax.plot([xmin, xmax, xmax, xmin, xmin], + [ymin, ymin, ymax, ymax, ymin],'--k',lw=2,label='Low') + + + for j, inflow in enumerate(self.wts_rot_ds['inflow_deg']): + ax.set_prop_cycle(None) # Reset the colormap for every inflow + for i, currTurbine in enumerate(self.wts_rot_ds.turbine): + color = next(ax._get_lines.prop_cycler)['color'] + + dst = self.wts_rot_ds.sel(turbine=currTurbine, inflow_deg=inflow) + + # plot high-res boxes + xmin, xmax = [dst.x-self.extent_high*dst.D/2, dst.x+self.extent_high*dst.D/2] + ymin, ymax = [dst.y-self.extent_high*dst.D/2, dst.y+self.extent_high*dst.D/2] + # Only add label entry on first (darker) curves + if j==0: + ax.plot([xmin, xmax, xmax, xmin, xmin], + [ymin, ymin, ymax, ymax, ymin], c=color, alpha=alphas[j], label=f'HighT{i+1}') + else: + ax.plot([xmin, xmax, xmax, xmin, xmin], + [ymin, ymin, ymax, ymax, ymin], c=color, alpha=alphas[j]) + + # plot turbine location + ax.scatter(dst.x, dst.y, s=dst.D/6, c=color, marker='o') #, label=f'WT{i+1}') + + # plot turbine disk accoding to all yaws in current wdir + allyaw_currwdir = self.allCases.where(self.allCases['inflow_deg']==inflow,drop=True).sel(turbine=currTurbine)['yaw'] + _, ind = np.unique(allyaw_currwdir, axis=0, return_index=True) + yaw_currwdir = allyaw_currwdir[np.sort(ind)].values # duplicates removed, same order as original array + for yaw in yaw_currwdir: + ax.plot([dst.x.values-(dst.D.values/2)*sind(yaw), dst.x.values+(dst.D.values/2)*sind(yaw)], + [dst.y.values-(dst.D.values/2)*cosd(yaw), dst.y.values+(dst.D.values/2)*cosd(yaw)], c=color, alpha=alphas[j]) + + # plot convex hull of farm (or line) for given inflow + turbs = self.wts_rot_ds.sel(inflow_deg=inflow)[['x','y']].to_array().transpose() + try: + hull = ConvexHull(turbs) + for simplex in hull.simplices: + ax.plot(turbs[simplex, 0], turbs[simplex, 1], 'gray', alpha=alphas[j], label=f'Inflow {inflow.values} deg') + except: + # All turbines are in a line. Plotting a line instead of convex hull + ax.plot(turbs[:,0], turbs[:,1], 'gray', alpha=alphas[j], label=f'Inflow {inflow.values} deg') + + + # Remove duplicate entries from legend + handles, labels = plt.gca().get_legend_handles_labels() + by_label = dict(zip(labels, handles)) + plt.legend(by_label.values(), by_label.keys(), loc='upper left', bbox_to_anchor=(1.02,1.015), fontsize=fontsize) + + ax.set_xlabel("x [m]", fontsize=fontsize) + ax.set_ylabel("y [m]", fontsize=fontsize) + ax.tick_params(axis='both', which='major', labelsize=fontsize) + ax.grid() + ax.set_aspect('equal') + + if saveFig: + if figFormat == 'png': + fig.savefig(os.path.join(self.path,'farm.png'), bbox_inches='tight', facecolor='white', transparent=False) + elif figFormat == 'pdf': + fig.savefig(os.path.join(self.path,'farm.pdf'), bbox_inches='tight', facecolor='white', transparent=False) + else: + raise ValueError (f'Figure format not recognized. Options are png and pdf.') + + if returnFig: + return fig, ax + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md new file mode 100644 index 0000000000..055d0b6dc9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md @@ -0,0 +1,8 @@ +#Set of tools to work with FAST.Farm + + +NOTE: the interface of these scripts is still in a preliminary phase and might be updated in the future. + +Look at the folder [examples](examples) for application examples. + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py new file mode 100644 index 0000000000..99644cfe68 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py @@ -0,0 +1,399 @@ +# -*- coding: utf-8 -*- +""" + - The x-y extents of the box are large enough to accomodate all turbines + - The z extent is large enough to include the rotor, start from the user specified `zbot`, + and accomodates for the meandering in the vertical direction . + - The dy and dz resolution is set of the maximum chord of the turbine + - The dt resolution is set based on the maximum frequency expected to be relevant for dynamics + +@author: kshaler +""" +import os, glob, struct +import numpy as np + +class TSCaseCreation: + + def __init__(self, D, HubHt, Vhub, TI, PLexp, x, y, z=None, zbot=1.0, cmax=5.0, fmax=5.0, + Cmeander=1.9, boxType='highres', high_ext=1.2, low_ext=None, ds_low=None): + """ + Instantiate the object. + + Parameters + ---------- + D : float, + rotor diameter (m) + HubHt : float, + turbine hub height (m) + Vhub : float, + mean wind speed at hub height (m/s) + TI : float, + turbulence intensity at hub height + PLexp : float, + power law exponent for shear (-) + x, y, z : float, + x-, y-, and z-location of turbine, respectively + if z is None, z is set to 0 + cmax : float, + maximum blade chord (m). If not specified, set to NREL 5MW value. + fmax : float, + maximum excitation frequency (Hz). If not specified set to NREL 5MW tower value. + boxType : str, + box type, either 'lowres' or 'highres'. Sets the appropriate dt, dy, and dz for discretization + Defaults to `highres` for backward compatibility + high_ext : float + extent of the high-res box around individual turbines (in D). This is the total length + low_ext : list of floats [xmin, xmax, ymin, ymax, zabovehub] + extents for the low-res box. All values should be positive If not specified, resorts to + computations by the manual + """ + + # Perform some checks on the input + if low_ext is not None and len(low_ext) != 5: + raise ValueError('low_ext not defined properly. It should be [xmin, xmax, ymin, ymax, zabovehub]') + + if low_ext is None: + manual_mode = False + else: + manual_mode = True + + if ds_low is None: + manual_ds_low = False + else: + manual_ds_low = True + + # Set parameters for convenience + self.Cmeander = Cmeander + self.boxType = boxType + self.high_ext = high_ext + self.low_ext = low_ext + self.ds_low = ds_low + # Turbine parameters + self.Turb(D, HubHt, cmax, fmax) + # Turbine location + self.turbLocs(x,y,z) + # Discretization + self.discretization(Vhub, TI, PLexp, manual_ds_low) + # Setup domain size + self.domainSize(zbot=zbot, manual_mode=manual_mode) + # Determine origin + # self.originLoc() + + def Turb(self, D, HubHt, cmax=5.0, fmax=5.0): + """ + Define turbine parameters + + Parameters + __________ + D : float, + rotor diameter (m) + HubHt : float, + turbine hub height (m) + tpath : string, + path to base turbine location (.fst) + cmax : float, + maximum blade chord (m). If not specified, set to NREL 5MW value. + fmax : float, + maximum excitation frequency (Hz). If not specified set to NREL 5MW tower value. + """ + + self.D = D + self.RefHt = HubHt + self.cmax = cmax + self.fmax = fmax + + def turbLocs(self,x,y,z=None): + """ + Specify turbine locations + + Parameters + ---------- + x, y, z : float, + x-, y-, and z-location of turbine, respectively + """ + self.x = np.asarray(x) + self.y = np.asarray(y) + if z is None: + self.z = np.asarray(y)*0 + else: + self.z = np.asarray(z) + + def discretization(self, Vhub, TI, Shear, manual_ds_low=False): + ''' + Specify discretization for both the high-res and low-res boxes. Follows guidelines present at + https://openfast.readthedocs.io/en/main/source/user/fast.farm/ModelGuidance.html#low-resolution-domain + + ''' + + self.URef = Vhub + self.TI = TI + self.PLexp = Shear + + # Derived properties + if self.boxType == 'lowres': + self.dt = self.Cmeander*self.D/(10*Vhub) + ds_low = self.Cmeander*self.D*Vhub/150 + if manual_ds_low: + ds_low = self.ds_low + ds_high = self.cmax + self.dy = np.floor(ds_low/ds_high)*ds_high + self.dz = np.floor(ds_low/ds_high)*ds_high + #self.dt = 1.0/(2.0*self.fmax) + #self.dy = self.cmax + #self.dz = self.cmax + + elif self.boxType == 'highres': + self.dt = 1.0/(2.0*self.fmax) + self.dy = self.cmax + self.dz = self.cmax + + else: + raise ValueError("boxType can only be 'lowres' or 'highres'. Stopping.") + + def domainSize(self, zbot, manual_mode=False): + + # Set default + self.ymin = None + self.ymax = None + + if self.boxType == 'lowres': + if manual_mode: + self.ymin = min(self.y) - self.low_ext[2]*self.D + self.ymax = max(self.y) + self.low_ext[3]*self.D + Zdist_Low = self.RefHt + self.low_ext[4]*self.D + else: + self.ymin = min(self.y)-2.23313*self.Cmeander*self.D/2 # JJ: I don't recall where these recommendations came from. I can't find them on the modelling guidance document + self.ymax = max(self.y)+2.23313*self.Cmeander*self.D/2 # JJ: I only see the y0_Low <= WT_Y_min -3*D recommendation + Zdist_Low = self.RefHt + self.D/2 + 2.23313*self.Cmeander*self.D/2 # JJ: ditto + + Ydist_Low = self.ymax - self.ymin + + self.ny = np.ceil(Ydist_Low/self.dy)+1 + self.nz = np.ceil(Zdist_Low/self.dz)+1 + + # We need to make sure the number of points is odd. + if self.ny%2 == 0: + self.ny += 1 + if self.nz%2 == 0: + self.nz += 1 + + + self.Width = self.dy*(self.ny-1) + self.Height = self.dz*(self.nz-1) + + Dgrid=min(self.Height,self.Width) + + # Set the hub height using half of the total grid height + self.HubHt_for_TS = zbot - 0.5*Dgrid + self.Height + + elif self.boxType=='highres': + Ydist_high = self.high_ext*self.D + Zdist_high = self.RefHt + self.high_ext*self.D/2 - zbot + + self.ny = np.ceil(Ydist_high/self.dy)+1 + self.nz = np.ceil(Zdist_high/self.dz)+1 + + # We need to make sure the number of points is odd. + if self.ny%2 == 0: + self.ny += 1 + if self.nz%2 == 0: + self.nz += 1 + + self.Width = self.dy*(self.ny-1) + self.Height = self.dz*(self.nz-1) + + Dgrid = min(self.Height,self.Width) + + # Set the hub height using half of the total grid height + self.HubHt_for_TS = zbot - 0.5*Dgrid + self.Height + + else: + raise ValueError("boxType can only be 'lowres' or 'highres'. Stopping.") + + + def originLoc(self): + raise NotImplementedError + + + + def plotSetup(self, fig=None, ax=None): + """ Plot a figure showing the turbine locations and the extent of the turbulence box""" + if fig is None: + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(6,5)) + ax = fig.add_subplot(111,aspect="equal") + xmin = min(self.x)-self.D + xmax = max(self.x)+self.D + + # high-res boxes + for wt in range(len(self.x)): + ax.plot(self.x[wt],self.y[wt],'x',ms=8,mew=2,label=f"WT{wt+1}") + + # low-res box + # ax.plot([xmin,xmax,xmax,xmin,xmin], + # [ymin,ymin,ymax,ymax,ymin],'--k',lw=2,label='Low') + if self.ymin is not None: + ax.axhline(self.ymin, ls='--', c='k', lw=2, label='Low') + if self.ymax is not None: + ax.axhline(self.ymax, ls='--', c='k', lw=2) + + ax.legend(bbox_to_anchor=(1.05,1.015),frameon=False) + ax.set_xlabel("x-location [m]") + ax.set_ylabel("y-location [m]") + fig.tight_layout + return fig, ax + + def writeTSFile(self, fileIn, fileOut, NewFile=True, tpath=None, tmax=50, turb=None, verbose=0): + """ Write a TurbSim primary input file, + See WriteTSFile below. + """ + WriteTSFile(fileIn, fileOut, self, NewFile=NewFile, tpath=tpath, tmax=tmax, turb=turb, verbose=verbose) + + + +def WriteTSFile(fileIn, fileOut, params, NewFile=True, tpath=None, tmax=50, turb=None, verbose=0): + """ Write a TurbSim primary input file, + + tpath: string, + path to base turbine location (.fst) + only used if NewFile is False + boxType: string, + Box type, either 'lowres' or 'highres'. Writes the proper `TurbModel` + if boxType=='highres', `turb` needs to be specified + turb: int, + turbine number to be printed on the time series file. Only needed + if boxType='highres' + + """ + + if params.boxType=='highres' and not isinstance(turb, int): + raise ValueError("turb needs to be an integer when boxType is 'highres'") + if params.boxType=='lowres' and turb is not None: + print("WARNING: `turb` is not used when boxType is 'lowres'. Remove `turb` to dismiss this warning.") + + if NewFile == True: + if verbose>1: print(f'Writing a new {fileOut} file from scratch') + # --- Writing FFarm input file from scratch + with open(fileOut, 'w') as f: + f.write(f'--------TurbSim v2.00.* Input File------------------------\n') + f.write(f'for Certification Test #1 (Kaimal Spectrum, formatted FF files).\n') + f.write(f'---------Runtime Options-----------------------------------\n') + f.write(f'False\tEcho\t\t- Echo input data to .ech (flag)\n') + f.write(f'123456\tRandSeed1\t\t- First random seed (-2147483648 to 2147483647)\n') + f.write(f'RanLux\tRandSeed2\t\t- Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW"\n') + f.write(f'False\tWrBHHTP\t\t- Output hub-height turbulence parameters in binary form? (Generates RootName.bin)\n') + f.write(f'False\tWrFHHTP\t\t- Output hub-height turbulence parameters in formatted form? (Generates RootName.dat)\n') + f.write(f'False\tWrADHH\t\t- Output hub-height time-series data in AeroDyn form? (Generates RootName.hh)\n') + f.write(f'True\tWrADFF\t\t- Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts)\n') + f.write(f'False\tWrBLFF\t\t- Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd)\n') + f.write(f'False\tWrADTWR\t\t- Output tower time-series data? (Generates RootName.twr)\n') + f.write(f'False\tWrFMTFF\t\t- Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w)\n') + f.write(f'False\tWrACT\t\t- Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts)\n') + f.write(f'True\tClockwise\t\t- Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn)\n') + f.write(f'0\tScaleIEC\t\t- Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales]\n') + f.write(f'\n') + f.write(f'--------Turbine/Model Specifications-----------------------\n') + f.write(f'{params.nz:.0f}\tNumGrid_Z\t\t- Vertical grid-point matrix dimension\n') + f.write(f'{params.ny:.0f}\tNumGrid_Y\t\t- Horizontal grid-point matrix dimension\n') + f.write(f'{params.dt:.6f}\tTimeStep\t\t- Time step [seconds]\n') + f.write(f'{tmax:.4f}\tAnalysisTime\t\t- Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) )\n') + f.write(f'"ALL"\tUsableTime\t\t- Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL")\n') + f.write(f'{params.HubHt_for_TS:.3f}\tHubHt\t\t- Hub height [m] (should be > 0.5*GridHeight)\n') + f.write(f'{params.Height:.3f}\tGridHeight\t\t- Grid height [m]\n') + f.write(f'{params.Width:.3f}\tGridWidth\t\t- Grid width [m] (should be >= 2*(RotorRadius+ShaftLength))\n') + f.write(f'0\tVFlowAng\t\t- Vertical mean flow (uptilt) angle [degrees]\n') + f.write(f'0\tHFlowAng\t\t- Horizontal mean flow (skew) angle [degrees]\n') + f.write(f'\n') + f.write(f'--------Meteorological Boundary Conditions-------------------\n') + if params.boxType=='lowres': + f.write(f'"IECKAI"\tTurbModel\t\t- Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","IECKAI","TIMESR", or "NONE")\n') + f.write(f'"unused"\tUserFile\t\t- Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "IECKAI" and "TIMESR" models)\n') + elif params.boxType=='highres': + f.write(f'"TIMESR"\tTurbModel\t\t- Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","TIMESR", or "NONE")\n') + f.write(f'"USRTimeSeries_T{turb}.txt"\tUserFile\t\t- Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "IECKAI" and "TIMESR" models)\n') + else: + raise ValueError("boxType can only be 'lowres' or 'highres'. Stopping.") + f.write(f'1\tIECstandard\t\t- Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") )\n') + f.write(f'"{params.TI:.3f}\t"\tIECturbc\t\t- IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models)\n') + f.write(f'"NTM"\tIEC_WindType\t\t- IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3)\n') + f.write(f'"default"\tETMc\t\t- IEC Extreme Turbulence Model "c" parameter [m/s]\n') + f.write(f'"PL"\tWindProfileType\t\t- Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"PL";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default")\n') + f.write(f'"unused"\tProfileFile\t\t- Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-]\n') + f.write(f'{params.RefHt:.3f}\tRefHt\t\t- Height of the reference velocity (URef) [m]\n') + f.write(f'{params.URef:.3f}\tURef\t\t- Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds]\n') + f.write(f'350\tZJetMax\t\t- Jet height [m] (used only for JET velocity profile, valid 70-490 m)\n') + f.write(f'"{params.PLexp:.3f}"\tPLExp\t\t- Power law exponent [-] (or "default")\n') + f.write(f'"default"\tZ0\t\t- Surface roughness length [m] (or "default")\n') + f.write(f'\n') + f.write(f'--------Non-IEC Meteorological Boundary Conditions------------\n') + f.write(f'"default"\tLatitude\t\t- Site latitude [degrees] (or "default")\n') + f.write(f'0.05\tRICH_NO\t\t- Gradient Richardson number [-]\n') + f.write(f'"default"\tUStar\t\t- Friction or shear velocity [m/s] (or "default")\n') + f.write(f'"default"\tZI\t\t- Mixing layer depth [m] (or "default")\n') + f.write(f'"default"\tPC_UW\t\t- Hub mean u\'w\' Reynolds stress [m^2/s^2] (or "default" or "none")\n') + f.write(f'"default"\tPC_UV\t\t- Hub mean u\'v\' Reynolds stress [m^2/s^2] (or "default" or "none")\n') + f.write(f'"default"\tPC_VW\t\t- Hub mean v\'w\' Reynolds stress [m^2/s^2] (or "default" or "none")\n') + f.write(f'\n') + f.write(f'--------Spatial Coherence Parameters----------------------------\n') + f.write(f'"IEC"\tSCMod1\t\t- u-component coherence model ("GENERAL","IEC","API","NONE", or "default")\n') + f.write(f'"IEC"\tSCMod2\t\t- v-component coherence model ("GENERAL","IEC","NONE", or "default")\n') + f.write(f'"IEC"\tSCMod3\t\t- w-component coherence model ("GENERAL","IEC","NONE", or "default")\n') + f.write(f'"12.0 {0.12/(8.1*42):.8f}"\tInCDec1\t- u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n') + f.write(f'"12.0 {0.12/(8.1*42):.8f}"\tInCDec2\t- v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n') + f.write(f'"12.0 {0.12/(8.1*42):.8f}"\tInCDec3\t- w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n') + f.write(f'"0.0"\tCohExp\t\t- Coherence exponent for general model [-] (or "default")\n') + f.write(f'\n') + f.write(f'--------Coherent Turbulence Scaling Parameters-------------------\n') + f.write(f'".\\EventData"\tCTEventPath\t\t- Name of the path where event data files are located\n') + f.write(f'"random"\tCTEventFile\t\t- Type of event files ("LES", "DNS", or "RANDOM")\n') + f.write(f'true\tRandomize\t\t- Randomize the disturbance scale and locations? (true/false)\n') + f.write(f'1\tDistScl\t\t- Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.)\n') + f.write(f'0.5\tCTLy\t\t- Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.)\n') + f.write(f'0.5\tCTLz\t\t- Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.)\n') + f.write(f'30\tCTStartTime\t\t- Minimum start time for coherent structures in RootName.cts [seconds]\n') + f.write(f'\n') + f.write(f'====================================================\n') + f.write(f'! NOTE: Do not add or remove any lines in this file!\n') + f.write(f'====================================================\n') + + else: + print(f'Modifying {fileIn} to be {fileOut}') + + NewPars = [int(params.nz), int(params.ny), int(params.dt), format(params.HubHt,'.2f'), format(params.Height,'.2f'), format(params.Width,'.2f'), format(params.TI,'.2f'), format(params.RefHt,'.2f'), format(params.URef,'.2f'), int(params.PLexp)] + ModVars = ['NumGrid_Z','NumGrid_Y','TimeStep','HubHt','GridHeight','GridWidth','IECturb','RefHt','URef','PLExp'] + wt=0 + with open(fileOut, 'w+') as new_file: + with open(fileIn) as old_file: + for line in old_file.readlines(): + newline = line + for index,tmpVar in enumerate(ModVars): + if tmpVar in line: + newline = str(NewPars[index])+'\t!!Orig is: '+line + if '.fst' in line: + newline =str('{params.x[wt]:.3f}\t\t{params.y[wt]:.3f}\t\t{params.z[wt]:.3f}\t\t{tpath}_WT{wt+1:d}.fst"\t{params.X0_High[wt]:.3f}\t\t{params.Y0_High[wt]:.3f}\t\t{params.Z0_High:.3f}\t\t{params.dX_High:.3f}\t\t{params.dY_High:.3f}\t\t{params.dZ_High:.3f}\n') + wt+=1 + new_file.write(newline) + + +def writeTimeSeriesFile(fileOut,yloc,zloc,u,v,w,time): + """ Write a TurbSim primary input file, + + """ + + print(f'Writing {fileOut}') + # --- Writing TurbSim user-defined time series file + with open(fileOut, 'w') as f: + f.write( '--------------TurbSim v2.00.* User Time Series Input File-----------------------\n') + f.write( ' Time series input from low-res turbsim run\n') + f.write( '--------------------------------------------------------------------------------\n') + f.write( ' 3 nComp - Number of velocity components in the file\n') + f.write( ' 1 nPoints - Number of time series points contained in this file (-)\n') + f.write( ' 1 RefPtID - Index of the reference point (1-nPoints)\n') + f.write( ' Pointyi Pointzi ! nPoints listed in order of increasing height\n') + f.write( ' (m) (m)\n') + f.write(f' {yloc:.5f} {zloc:.5f}\n') + f.write( '--------Time Series-------------------------------------------------------------\n') + f.write( 'Elapsed Time Point01u Point01v Point01w\n') + f.write( ' (s) (m/s) (m/s) (m/s)\n') + for i in range(len(time)): + f.write(f'\t{time[i]:.2f}\t\t\t {u[i]:.5f}\t\t\t {v[i]:.5f}\t\t\t {w[i]:.5f}\n') + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py new file mode 100644 index 0000000000..c09f2f9cb4 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py @@ -0,0 +1,4 @@ + +from .fastfarm import * +from .TurbSimCaseCreation import TSCaseCreation + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py new file mode 100644 index 0000000000..c5fad1495f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py @@ -0,0 +1,55 @@ +""" +Create a TurbSim input file for a FAST.Farm simulation: + - The x-y extents of the box are large enough to accomodate all turbines + - The z extent is large enough to include the rotor, start from the user specified `zbot`, + and accomodates for the meandering in the vertical direction . + - The dy and dz resolution is set of the maximum chord of the turbine + - The dt resolution is set based on the maximum frequency expected to be relevant for dynamics +""" +import os, sys +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +# Local +from pyFAST.fastfarm.TurbSimCaseCreation import TSCaseCreation + +MyDir=os.path.dirname(__file__) + +# --- Define parameters necessary for this script +OldTSFile = os.path.join(MyDir, 'SampleFiles/TestCase.inp' ) # Template file used for TurbSim, need to exist +NewTSFile = os.path.join(MyDir, 'SampleFiles/_TestCase_mod.inp') # New file that will be written +D = 77.0 # Turbine diameter (m) +HubHt = 78.045 # Hub Height (m) +Vhub = 6 # mean wind speed at hub height (m/s) +TI = 10 # turbulence intensity at hub height +PLExp = 0.2 # power law exponent for shear (-) +xlocs = [0.0, 265.643] # x positions of turbines +ylocs = [0.0, 50.0 ] # y postitions of turbines + +# --- "Optional" inputs +cmax = 5 # maximum blade chord (m). Turbine specific. +fmax = 5.0 # maximum excitation frequency (Hz). Turbine specific, 5Hz is satisfactory for modern multi-MW turbine. +zbot = 1.0 # vertical start of the turbulence box (m). Depend on hub height and expected vertical meandering of wakes. +Cmeander = 1.9 # Meandering constant (-) + +# --- Use TurbSim Case Creation class to write a new TurbSim file +Case = TSCaseCreation(D, HubHt, Vhub, TI, PLExp, x=xlocs, y=ylocs, zbot=zbot, cmax=cmax, fmax=fmax, Cmeander=Cmeander) +# Rewrite TurbSim Input File +Case.writeTSFile(OldTSFile, NewTSFile, tmax=5, turb=1) +print('NOTE: run TurbSim to generate this new BTS file.') + +# --- Visualize low extent and turbine positions +fig, ax = Case.plotSetup() + + + + +if __name__ == '__main__': + plt.show() + +if __name__ == '__test__': + pass + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py new file mode 100644 index 0000000000..2639140c45 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py @@ -0,0 +1,73 @@ +""" +Setup a FAST.Farm input file based on a TurbSim box. + +The extent of the high res and low res domain are setup according to the guidelines: + https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html + +NOTE: the box SampleFiles/TestCase.bts is not provided as part of this repository + Run TurbSim on SampleFiles/TestCase.inp to generate the box before running this example. + +""" +import os, sys +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd +# Local packages +from pyFAST.fastfarm import fastFarmTurbSimExtent, writeFastFarm, plotFastFarmSetup +from pyFAST.input_output.fast_input_file import FASTInputFile + +MyDir=os.path.dirname(__file__) + +if __name__ == '__main__': + # --- FAST Farm input files + templateFSTF = os.path.join(MyDir,'SampleFiles/TestCase.fstf') # template file used for FastFarm input file, need to exist + outputFSTF = os.path.join(MyDir,'SampleFiles/_TestCase_mod.fstf')# new file that will be written + # --- Parameters for TurbSim Extent + D = 77.0 # Turbine diameter (m) + hubHeight = 78.045 # Hub Height (m) + extent_X_high = 1.2 # x-extent of high res box in diamter around turbine location + extent_YZ_high = 1.2 # y-extent of high res box in diamter around turbine location + chord_max = 5 # maximum blade chord (m). Turbine specific. + Cmeander = 1.9 # Meandering constant (-) + BTSFilename = os.path.join(MyDir,'SampleFiles/TestCase.bts') # TurbSim Box to be used in FAST.Farm simulation, need to exist. + # --- Layout + xWT = [0.0, 265.] # x positions of turbines + yWT = [0.0, 50.0] # y postitions of turbines + zWT = [0.0, 0.0 ] # z postitions of turbines + # --- Output list for turbine 1 (will be replicated for other turbines) + #OutList_Sel=[ + # 'RtAxsXT1, RtAxsYT1, RtAxsZT1', + # 'RtPosXT1, RtPosYT1, RtPosZT1', + # 'RtDiamT1', + # 'YawErrT1', + # "TIAmbT1", + # 'RtVAmbT1', + # 'RtVRelT1', + # 'W1VAmbX, W1VAmbY, W1VAmbZ'] + OutList_Sel=None + + # --- Get box extents + FFTS = fastFarmTurbSimExtent(BTSFilename, hubHeight, D, xWT, yWT, Cmeander=Cmeander, chord_max=chord_max, extent_X=extent_X_high, extent_YZ=extent_YZ_high, meanUAtHubHeight=True) + + # --- Write Fast Farm file with layout and Low and High res extent + writeFastFarm(outputFSTF, templateFSTF, xWT, yWT, zWT, FFTS=FFTS, OutListT1=OutList_Sel) + print('Output file:',outputFSTF) + + # --- Visualize low&high extent and turbine positions + fig = plotFastFarmSetup(outputFSTF, grid=True, D=D, hubHeight=hubHeight, plane='XY') + fig = plotFastFarmSetup(outputFSTF, grid=True, D=D, hubHeight=hubHeight, plane='XZ') + fig = plotFastFarmSetup(outputFSTF, grid=True, D=D, hubHeight=hubHeight, plane='YZ') + + # --- Finer tuning + #fst = FASTInputFile(outputFSTF) + #fst['InflowFile']='"../Inflow/{}_IW.dat"'.format(Case) + #fst['WrDisDT']=1.0 + #fst['DT']=1.0 + #fst.write(outputFile) + plt.show() + + + +if __name__ == '__test__': + # This example cannot be run as a test case because the BTS file is not provided in the repository + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py new file mode 100644 index 0000000000..91c568cae0 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py @@ -0,0 +1,161 @@ +""" +Setup a FAST.Farm suite of cases based on input parameters. + +The extent of the high res and low res domain are setup according to the guidelines: + https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html + +NOTE: If driving FAST.Farm using TurbSim inflow, the resulting boxes are necessary to + build the final FAST.Farm case and are not provided as part of this repository. + If driving FAST.Farm using LES inflow, the VTK boxes are not necessary to exist. + +""" + +from pyFAST.fastfarm.FASTFarmCaseCreation import FFCaseCreation + +def main(): + + # ----------------------------------------------------------------------------- + # USER INPUT: Modify these + # For the d{t,s}_{high,low}_les paramters, use AMRWindSimulation.py + # ----------------------------------------------------------------------------- + + # ----------- Case absolute path + path = '/complete/path/of/your/case' + + # ----------- General hard-coded parameters + cmax = 5 # maximum blade chord (m) + fmax = 10/6 # maximum excitation frequency (Hz) + Cmeander = 1.9 # Meandering constant (-) + + # ----------- Wind farm + D = 240 + zhub = 150 + wts = { + 0 :{'x':0.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 1 :{'x':1852.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 2 :{'x':3704.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 3 :{'x':5556.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 4 :{'x':7408.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 5 :{'x':1852.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 6 :{'x':3704.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 7 :{'x':5556.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 8 :{'x':7408.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 9 :{'x':3704.0, 'y':3704.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 10:{'x':5556.0, 'y':3704.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + 11:{'x':7408.0, 'y':3704.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, + } + refTurb_rot = 0 + + # ----------- Additional variables + tmax = 1800 # Total simulation time + nSeeds = 6 # Number of different seeds + zbot = 1 # Bottom of your domain + mod_wake = 1 # Wake model. 1: Polar, 2: Curl, 3: Cartesian + + # ----------- Desired sweeps + vhub = [10] + shear = [0.2] + TIvalue = [10] + inflow_deg = [0] + + # ----------- Turbine parameters + # Set the yaw of each turbine for wind dir. One row for each wind direction. + yaw_init = [ [0,0,0,0,0,0,0,0,0,0,0,0] ] + + # ----------- Low- and high-res boxes parameters + # Should match LES if comparisons are to be made; otherwise, set desired values + # For an automatic computation of such parameters, omit them from the call to FFCaseCreation + # High-res boxes settings + dt_high_les = 0.6 # sampling frequency of high-res files + ds_high_les = 10.0 # dx, dy, dz that you want these high-res files at + extent_high = 1.2 # high-res box extent in y and x for each turbine, in D. + # Low-res boxes settings + dt_low_les = 3 # sampling frequency of low-res files + ds_low_les = 20.0 # dx, dy, dz of low-res files + extent_low = [3, 8, 3, 3, 2] # extent in xmin, xmax, ymin, ymax, zmax, in D + + + # ----------- Execution parameters + ffbin = '/full/path/to/your/binary/.../bin/FAST.Farm' + + # ----------- LES parameters. This variable will dictate whether it is a TurbSim-driven or LES-driven case + LESpath = '/full/path/to/the/LES/case' + #LESpath = None # set as None if TurbSim-driven is desired + + + # ----------------------------------------------------------------------------- + # ----------- Template files + templatePath = '/full/path/where/template/files/are' + + # Put 'unused' to any input that is not applicable to your case + # Files should be in templatePath + EDfilename = 'ElastoDyn.T' + SEDfilename = 'SimplifiedElastoDyn.T' + HDfilename = 'HydroDyn.dat' + SrvDfilename = 'ServoDyn.T' + ADfilename = 'AeroDyn.dat' + ADskfilename = 'AeroDisk.dat' + SubDfilename = 'SubDyn.dat' + IWfilename = 'InflowWind.dat' + BDfilepath = 'unused' + bladefilename = 'Blade.dat' + towerfilename = 'Tower.dat' + turbfilename = 'Model.T' + libdisconfilepath = '/full/path/to/controller/libdiscon.so' + controllerInputfilename = 'DISCON.IN' + coeffTablefilename = 'CpCtCq.csv' + FFfilename = 'Model_FFarm.fstf' + + # TurbSim setups + turbsimLowfilepath = './SampleFiles/template_Low_InflowXX_SeedY.inp' + turbsimHighfilepath = './SampleFiles/template_HighT1_InflowXX_SeedY.inp' + + # SLURM scripts + slurm_TS_high = './SampleFiles/runAllHighBox.sh' + slurm_TS_low = './SampleFiles/runAllLowBox.sh' + slurm_FF_single = './SampleFiles/runFASTFarm_cond0_case0_seed0.sh' + + + # ----------------------------------------------------------------------------- + # END OF USER INPUT + # ----------------------------------------------------------------------------- + + + # Initial setup + case = FFCaseCreation(path, wts, tmax, zbot, vhub, shear, TIvalue, inflow_deg, + dt_high_les, ds_high_les, extent_high, + dt_low_les, ds_low_les, extent_low, + ffbin, mod_wake, yaw_init, + nSeeds=nSeeds, LESpath=LESpath, + verbose=1) + + case.setTemplateFilename(templatePath, EDfilename, SEDfilename, HDfilename, SrvDfilename, ADfilename, + ADskfilename, SubDfilename, IWfilename, BDfilepath, bladefilename, towerfilename, + turbfilename, libdisconfilepath, controllerInputfilename, coeffTablefilename, + turbsimLowfilepath, turbsimHighfilepath, FFfilename) + + # Get domain paramters + case.getDomainParameters() + + # Organize file structure + case.copyTurbineFilesForEachCase() + + # TurbSim setup + if LESpath is None: + case.TS_low_setup() + case.TS_low_slurm_prepare(slurm_TS_low) + #case.TS_low_slurm_submit() + + case.TS_high_setup() + case.TS_high_slurm_prepare(slurm_TS_high) + #case.TS_high_slurm_submit() + + # Final setup + case.FF_setup() + case.FF_slurm_prepare(slurm_FF_single) + #case.FF_slurm_submit() + + +if __name__ == '__main__': + # This example cannot be fully run. + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py new file mode 100644 index 0000000000..58b9ff7170 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py @@ -0,0 +1,52 @@ +""" +Set up sampling planes for AMR-Wind to use for inflow winds. +""" + +from pyFAST.fastfarm.AMRWindSimulation import AMRWindSimulation + +def main(): + # ----------------------------------------------------------------------------- + # USER INPUT: Modify these + # ----------------------------------------------------------------------------- + + # ----------- Wind farm + wts = { + 0 :{'x':1280.0, 'y':2560, 'z':0.0, 'D':126.9, 'zhub':86.5, 'cmax':5, 'fmax':10/6, 'Cmeander':1.9, 'name':'T0'}, + 1 :{'x':1280.0, 'y':3200, 'z':0.0, 'D':126.9, 'zhub':86.5, 'cmax':5, 'fmax':10/6, 'Cmeander':1.9, 'name':'T1'}, + 2 :{'x':1280.0, 'y':3840, 'z':0.0, 'D':126.9, 'zhub':86.5, 'cmax':5, 'fmax':10/6, 'Cmeander':1.9, 'name':'T2'}, + } + + # ----------- AMR-Wind parameters + fixed_dt = 0.25 + prob_lo = (0.0, 0.0, 0.0) + prob_hi = (2560.0, 6400.0, 1280.0) + n_cell = (256, 640, 128) + max_level = 1 # Number of grid refinement levels + + incflo_velocity_hh = (0.0, 10.0, 0.0) # Hub-height velocity + postproc_name = 'sampling' + + # ----------- Wake model (1: Polar; 2: Curl; 3: Cartesian) + mod_wake = 1 + + # ----------------------------------------------------------------------------- + # END OF USER INPUT + # ----------------------------------------------------------------------------- + + # Initial setup + amr = AMRWindSimulation(wts, fixed_dt, prob_lo, prob_hi, + n_cell, max_level, incflo_velocity_hh, + postproc_name, + mod_wake = wake_mod) + + # You can print the complete instance by simply + print(amr) + + # The output of AMRWindSimulation can be directly used as input to FFCaseCreation: + # FFCaseCreation(..., dt_high_les=amr.dt_high_les, ds_high_les=amr.ds_high_les, + # dt_low_les=amr.dt_low_les, ds_low_les=amr.ds_low_les, + # extent_high=amr.extent_high, extent_low=amr.extent_low, + # ...) + +if __name__ == '__main__': + main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md new file mode 100644 index 0000000000..d3df9f6c3b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md @@ -0,0 +1,10 @@ + + +Example 1: Create a TurbSim input file for a FAST.Farm simulation, with proper box extent parameters. + +Example 2: Setup the high and low res parameters of FAST.Farm input using a TurbSim box + +Example 3: Creation of complete setup of FAST.Farm, including TurbSim inputs for high- and low-res boxes. Combination of Examples 1 and 2 above. + + +NOTE: the interface of these scripts is still in a preliminary phase and might be updated in the future. diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf new file mode 100644 index 0000000000..c65111ddd1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf @@ -0,0 +1,112 @@ +FAST.Farm v1.00.* INPUT FILE +Sample FAST.Farm input file +--- SIMULATION CONTROL --- +False Echo Echo input data to .ech? (flag) +FATAL AbortLevel Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +2000.0 TMax Total run time (s) [>=0.0] +False UseSC Use a super controller? (flag) +2 Mod_AmbWind Ambient wind model (-) (switch) {1: high-fidelity precursor in VTK format, 2: InflowWind module} +--- SUPER CONTROLLER --- [used only for UseSC=True] +"SC_DLL.dll" SC_FileName Name/location of the dynamic library {.dll [Windows] or .so [Linux]} containing the Super Controller algorithms (quoated string) +--- AMBIENT WIND: PRECURSOR IN VTK FORMAT --- [used only for Mod_AmbWind=1] +2.0 DT_Low-VTK Time step for low -resolution wind data input files; will be used as the global FAST.Farm time step (s) [>0.0] +0.1 DT_High-VTK Time step for high-resolution wind data input files (s) [>0.0] +"unused" WindFilePath Path name to wind data files from precursor (string) +False ChkWndFiles Check all the ambient wind files for data consistency? (flag) +--- AMBIENT WIND: INFLOWWIND MODULE --- [used only for Mod_AmbWind=2 or 3] +2.0 DT_Low Time step for low -resolution wind data interpolation; will be used as the global FAST.Farm time step (s) [>0.0] +0.3333333 DT_High Time step for high-resolution wind data interpolation (s) [>0.0] +133 NX_Low Number of low -resolution spatial nodes in X direction for wind data interpolation (-) [>=2] +158 NY_Low Number of low -resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] +18 NZ_Low Number of low -resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] +-231.0 X0_Low Origin of low -resolution spatial nodes in X direction for wind data interpolation (m) +-714.55 Y0_Low Origin of low -resolution spatial nodes in Y direction for wind data interpolation (m) +1.0 Z0_Low Origin of low -resolution spatial nodes in Z direction for wind data interpolation (m) +10.0 dX_Low Spacing of low -resolution spatial nodes in X direction for wind data interpolation (m) [>0.0] +9.01 dY_Low Spacing of low -resolution spatial nodes in Y direction for wind data interpolation (m) [>0.0] +9.0 dZ_Low Spacing of low -resolution spatial nodes in Z direction for wind data interpolation (m) [>0.0] +29 NX_High Number of high-resolution spatial nodes in X direction for wind data interpolation (-) [>=2] +32 NY_High Number of high-resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] +54 NZ_High Number of high-resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] +"InflowWind.dat" InflowFile Name of file containing InflowWind module input parameters (quoted string) +--- WIND TURBINES --- +2 NumTurbines Number of wind turbines (-) [>=1] [last 6 columns used only for Mod_AmbWind=2] +WT_X WT_Y WT_Z WT_FASTInFile X0_High Y0_High Z0_High dX_High dY_High dZ_High +(m) (m) (m) (string) (m) (m) (m) (m) (m) (m) +16.926 -420.606 0.0 "../turbineModel/Test18_WT1.fst" -30.0 -507.39 1.0 3.33 3.0 3.0 +0.0 0.866 0.0 "../turbineModel/Test18_WT2.fst" -40.0 -45.03 1.0 3.33 3.0 3.0 +--- WAKE DYNAMICS --- +3.0 dr Radial increment of radial finite-difference grid (m) [>0.0] +50 NumRadii Number of radii in the radial finite-difference grid (-) [>=2] +44 NumPlanes Number of wake planes (-) [>=2] +DEFAULT f_c Cutoff (corner) frequency of the low-pass time-filter for the wake advection, deflection, and meandering model (Hz) [>0.0] or DEFAULT [DEFAULT=0.0007] +DEFAULT C_HWkDfl_O Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor (m ) or DEFAULT [DEFAULT= 0.0 ] +DEFAULT C_HWkDfl_OY Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor scaled with yaw error (m/deg) or DEFAULT [DEFAULT= 0.3 ] +DEFAULT C_HWkDfl_x Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance (- ) or DEFAULT [DEFAULT= 0.0 ] +DEFAULT C_HWkDfl_xY Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance and yaw error (1/deg) or DEFAULT [DEFAULT=-0.004] +DEFAULT C_NearWake Calibrated parameter for the near-wake correction (-) [>1.0 and <2.5] or DEFAULT [DEFAULT=1.8] +DEFAULT k_vAmb Calibrated parameter for the influence of ambient turbulence in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.05 ] +DEFAULT k_vShr Calibrated parameter for the influence of the shear layer in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.016] +DEFAULT C_vAmb_DMin Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 0.0 ] +DEFAULT C_vAmb_DMax Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vAmb_DMin ] or DEFAULT [DEFAULT= 1.0 ] +DEFAULT C_vAmb_FMin Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 1.0 ] +DEFAULT C_vAmb_Exp Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.01] +DEFAULT C_vShr_DMin Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 3.0 ] +DEFAULT C_vShr_DMax Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vShr_DMin ] or DEFAULT [DEFAULT=25.0 ] +DEFAULT C_vShr_FMin Calibrated parameter in the eddy viscosity filter function for the shear layer defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 0.2 ] +DEFAULT C_vShr_Exp Calibrated parameter in the eddy viscosity filter function for the shear layer defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.1 ] +DEFAULT Mod_WakeDiam Wake diameter calculation model (-) (switch) {1: rotor diameter, 2: velocity based, 3: mass-flux based, 4: momentum-flux based} or DEFAULT [DEFAULT=1] +DEFAULT C_WakeDiam Calibrated parameter for wake diameter calculation (-) [>0.0 and <0.99] or DEFAULT [DEFAULT=0.95] [unused for Mod_WakeDiam=1] +DEFAULT Mod_Meander Spatial filter model for wake meandering (-) (switch) {1: uniform, 2: truncated jinc, 3: windowed jinc} or DEFAULT [DEFAULT=3] +DEFAULT C_Meander Calibrated parameter for wake meandering (-) [>=1.0] or DEFAULT [DEFAULT=1.9] +--- VISUALIZATION --- +False WrDisWind Write low- and high-resolution disturbed wind data to .Low.Dis.t.vtk etc.? (flag) +1 NOutDisWindXY Number of XY planes for output of disturbed wind data across the low-resolution domain to .Low.DisXY.t.vtk (-) [0 to 9] +80.0 OutDisWindZ Z coordinates of XY planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXY] [unused for NOutDisWindXY=0] +0 NOutDisWindYZ Number of YZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisYZ.t.vtk (-) [0 to 9] +748.0, 1252.0, 1378.0, 1504.0, 1630.0, 1756.0, 1882.0, 2008.0 OutDisWindX X coordinates of YZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindYZ] [unused for NOutDisWindYZ=0] +0 NOutDisWindXZ Number of XZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisXZ.t.vtk (-) [0 to 9] +0.0 OutDisWindY Y coordinates of XZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXZ] [unused for NOutDisWindXZ=0] +DEFAULT WrDisDT Time step for disturbed wind visualization output (s) [>0.0] or DEFAULT [DEFAULT=DT_Low or DT_Low-VTK] [unused for WrDisWind=False and NOutDisWindXY=NOutDisWindYZ=NOutDisWindXZ=0] +--- OUTPUT --- +True SumPrint Print summary data to .sum? (flag) +99999.9 ChkptTime Amount of time between creating checkpoint files for potential restart (s) [>0.0] +200.0 TStart Time to begin tabular output (s) [>=0.0] +1 OutFileFmt Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both} +True TabDelim Use tab delimiters in text tabular output file? (flag) {uses spaces if False} +"ES10.3E2" OutFmt Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +20 NOutRadii Number of radial nodes for wake output for an individual rotor (-) [0 to 20] +0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15, 16, 17, 18, 19, 21, 24, 28, 33, 39 OutRadii List of radial nodes for wake output for an individual rotor (-) [1 to NOutRadii] [unused for NOutRadii=0] +7 NOutDist Number of downstream distances for wake output for an individual rotor (-) [0 to 9 ] +252.0, 378.0, 504.0, 630.0, 756.0, 882.0, 1008.0 OutDist List of downstream distances for wake output for an individual rotor (m) [1 to NOutDist ] [unused for NOutDist =0] +1 NWindVel Number of points for wind output (-) [0 to 9] +0.0 WindVelX List of coordinates in the X direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] +0.0 WindVelY List of coordinates in the Y direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] +80.0 WindVelZ List of coordinates in the Z direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] + OutList The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels (quoted string) +"RtAxsXT1 , RtAxsYT1 , RtAxsZT1" +"RtPosXT1 , RtPosYT1 , RtPosZT1" +"YawErrT1" +"TIAmbT1" +"CtT1N01 , CtT1N02 , CtT1N03 , CtT1N04 , CtT1N05 , CtT1N06 , CtT1N07 , CtT1N08 , CtT1N09 , CtT1N10 , CtT1N11 , CtT1N12 , CtT1N13 , CtT1N14 , CtT1N15 , CtT1N16 , CtT1N17 , CtT1N18 , CtT1N19 , CtT1N20" +"WkAxsXT1D1 , WkAxsXT1D2 , WkAxsXT1D3 , WkAxsXT1D4 , WkAxsXT1D5 , WkAxsXT1D6 , WkAxsXT1D7" +"WkAxsYT1D1 , WkAxsYT1D2 , WkAxsYT1D3 , WkAxsYT1D4 , WkAxsYT1D5 , WkAxsYT1D6 , WkAxsYT1D7" +"WkAxsZT1D1 , WkAxsZT1D2 , WkAxsZT1D3 , WkAxsZT1D4 , WkAxsZT1D5 , WkAxsZT1D6 , WkAxsZT1D7" +"WkPosXT1D1 , WkPosXT1D2 , WkPosXT1D3 , WkPosXT1D4 , WkPosXT1D5 , WkPosXT1D6 , WkPosXT1D7" +"WkPosYT1D1 , WkPosYT1D2 , WkPosYT1D3 , WkPosYT1D4 , WkPosYT1D5 , WkPosYT1D6 , WkPosYT1D7" +"WkPosZT1D1 , WkPosZT1D2 , WkPosZT1D3 , WkPosZT1D4 , WkPosZT1D5 , WkPosZT1D6 , WkPosZT1D7" +"WkDfVxT1N01D1, WkDfVxT1N02D1, WkDfVxT1N03D1, WkDfVxT1N04D1, WkDfVxT1N05D1, WkDfVxT1N06D1, WkDfVxT1N07D1, WkDfVxT1N08D1, WkDfVxT1N09D1, WkDfVxT1N10D1, WkDfVxT1N11D1, WkDfVxT1N12D1, WkDfVxT1N13D1, WkDfVxT1N14D1, WkDfVxT1N15D1, WkDfVxT1N16D1, WkDfVxT1N17D1, WkDfVxT1N18D1, WkDfVxT1N19D1, WkDfVxT1N20D1" +"WkDfVxT1N01D2, WkDfVxT1N02D2, WkDfVxT1N03D2, WkDfVxT1N04D2, WkDfVxT1N05D2, WkDfVxT1N06D2, WkDfVxT1N07D2, WkDfVxT1N08D2, WkDfVxT1N09D2, WkDfVxT1N10D2, WkDfVxT1N11D2, WkDfVxT1N12D2, WkDfVxT1N13D2, WkDfVxT1N14D2, WkDfVxT1N15D2, WkDfVxT1N16D2, WkDfVxT1N17D2, WkDfVxT1N18D2, WkDfVxT1N19D2, WkDfVxT1N20D2" +"WkDfVxT1N01D3, WkDfVxT1N02D3, WkDfVxT1N03D3, WkDfVxT1N04D3, WkDfVxT1N05D3, WkDfVxT1N06D3, WkDfVxT1N07D3, WkDfVxT1N08D3, WkDfVxT1N09D3, WkDfVxT1N10D3, WkDfVxT1N11D3, WkDfVxT1N12D3, WkDfVxT1N13D3, WkDfVxT1N14D3, WkDfVxT1N15D3, WkDfVxT1N16D3, WkDfVxT1N17D3, WkDfVxT1N18D3, WkDfVxT1N19D3, WkDfVxT1N20D3" +"WkDfVxT1N01D4, WkDfVxT1N02D4, WkDfVxT1N03D4, WkDfVxT1N04D4, WkDfVxT1N05D4, WkDfVxT1N06D4, WkDfVxT1N07D4, WkDfVxT1N08D4, WkDfVxT1N09D4, WkDfVxT1N10D4, WkDfVxT1N11D4, WkDfVxT1N12D4, WkDfVxT1N13D4, WkDfVxT1N14D4, WkDfVxT1N15D4, WkDfVxT1N16D4, WkDfVxT1N17D4, WkDfVxT1N18D4, WkDfVxT1N19D4, WkDfVxT1N20D4" +"WkDfVxT1N01D5, WkDfVxT1N02D5, WkDfVxT1N03D5, WkDfVxT1N04D5, WkDfVxT1N05D5, WkDfVxT1N06D5, WkDfVxT1N07D5, WkDfVxT1N08D5, WkDfVxT1N09D5, WkDfVxT1N10D5, WkDfVxT1N11D5, WkDfVxT1N12D5, WkDfVxT1N13D5, WkDfVxT1N14D5, WkDfVxT1N15D5, WkDfVxT1N16D5, WkDfVxT1N17D5, WkDfVxT1N18D5, WkDfVxT1N19D5, WkDfVxT1N20D5" +"WkDfVxT1N01D6, WkDfVxT1N02D6, WkDfVxT1N03D6, WkDfVxT1N04D6, WkDfVxT1N05D6, WkDfVxT1N06D6, WkDfVxT1N07D6, WkDfVxT1N08D6, WkDfVxT1N09D6, WkDfVxT1N10D6, WkDfVxT1N11D6, WkDfVxT1N12D6, WkDfVxT1N13D6, WkDfVxT1N14D6, WkDfVxT1N15D6, WkDfVxT1N16D6, WkDfVxT1N17D6, WkDfVxT1N18D6, WkDfVxT1N19D6, WkDfVxT1N20D6" +"WkDfVxT1N01D7, WkDfVxT1N02D7, WkDfVxT1N03D7, WkDfVxT1N04D7, WkDfVxT1N05D7, WkDfVxT1N06D7, WkDfVxT1N07D7, WkDfVxT1N08D7, WkDfVxT1N09D7, WkDfVxT1N10D7, WkDfVxT1N11D7, WkDfVxT1N12D7, WkDfVxT1N13D7, WkDfVxT1N14D7, WkDfVxT1N15D7, WkDfVxT1N16D7, WkDfVxT1N17D7, WkDfVxT1N18D7, WkDfVxT1N19D7, WkDfVxT1N20D7" +"WkDfVrT1N01D1, WkDfVrT1N02D1, WkDfVrT1N03D1, WkDfVrT1N04D1, WkDfVrT1N05D1, WkDfVrT1N06D1, WkDfVrT1N07D1, WkDfVrT1N08D1, WkDfVrT1N09D1, WkDfVrT1N10D1, WkDfVrT1N11D1, WkDfVrT1N12D1, WkDfVrT1N13D1, WkDfVrT1N14D1, WkDfVrT1N15D1, WkDfVrT1N16D1, WkDfVrT1N17D1, WkDfVrT1N18D1, WkDfVrT1N19D1, WkDfVrT1N20D1" +"WkDfVrT1N01D2, WkDfVrT1N02D2, WkDfVrT1N03D2, WkDfVrT1N04D2, WkDfVrT1N05D2, WkDfVrT1N06D2, WkDfVrT1N07D2, WkDfVrT1N08D2, WkDfVrT1N09D2, WkDfVrT1N10D2, WkDfVrT1N11D2, WkDfVrT1N12D2, WkDfVrT1N13D2, WkDfVrT1N14D2, WkDfVrT1N15D2, WkDfVrT1N16D2, WkDfVrT1N17D2, WkDfVrT1N18D2, WkDfVrT1N19D2, WkDfVrT1N20D2" +"WkDfVrT1N01D3, WkDfVrT1N02D3, WkDfVrT1N03D3, WkDfVrT1N04D3, WkDfVrT1N05D3, WkDfVrT1N06D3, WkDfVrT1N07D3, WkDfVrT1N08D3, WkDfVrT1N09D3, WkDfVrT1N10D3, WkDfVrT1N11D3, WkDfVrT1N12D3, WkDfVrT1N13D3, WkDfVrT1N14D3, WkDfVrT1N15D3, WkDfVrT1N16D3, WkDfVrT1N17D3, WkDfVrT1N18D3, WkDfVrT1N19D3, WkDfVrT1N20D3" +"WkDfVrT1N01D4, WkDfVrT1N02D4, WkDfVrT1N03D4, WkDfVrT1N04D4, WkDfVrT1N05D4, WkDfVrT1N06D4, WkDfVrT1N07D4, WkDfVrT1N08D4, WkDfVrT1N09D4, WkDfVrT1N10D4, WkDfVrT1N11D4, WkDfVrT1N12D4, WkDfVrT1N13D4, WkDfVrT1N14D4, WkDfVrT1N15D4, WkDfVrT1N16D4, WkDfVrT1N17D4, WkDfVrT1N18D4, WkDfVrT1N19D4, WkDfVrT1N20D4" +"WkDfVrT1N01D5, WkDfVrT1N02D5, WkDfVrT1N03D5, WkDfVrT1N04D5, WkDfVrT1N05D5, WkDfVrT1N06D5, WkDfVrT1N07D5, WkDfVrT1N08D5, WkDfVrT1N09D5, WkDfVrT1N10D5, WkDfVrT1N11D5, WkDfVrT1N12D5, WkDfVrT1N13D5, WkDfVrT1N14D5, WkDfVrT1N15D5, WkDfVrT1N16D5, WkDfVrT1N17D5, WkDfVrT1N18D5, WkDfVrT1N19D5, WkDfVrT1N20D5" +"WkDfVrT1N01D6, WkDfVrT1N02D6, WkDfVrT1N03D6, WkDfVrT1N04D6, WkDfVrT1N05D6, WkDfVrT1N06D6, WkDfVrT1N07D6, WkDfVrT1N08D6, WkDfVrT1N09D6, WkDfVrT1N10D6, WkDfVrT1N11D6, WkDfVrT1N12D6, WkDfVrT1N13D6, WkDfVrT1N14D6, WkDfVrT1N15D6, WkDfVrT1N16D6, WkDfVrT1N17D6, WkDfVrT1N18D6, WkDfVrT1N19D6, WkDfVrT1N20D6" +"WkDfVrT1N01D7, WkDfVrT1N02D7, WkDfVrT1N03D7, WkDfVrT1N04D7, WkDfVrT1N05D7, WkDfVrT1N06D7, WkDfVrT1N07D7, WkDfVrT1N08D7, WkDfVrT1N09D7, WkDfVrT1N10D7, WkDfVrT1N11D7, WkDfVrT1N12D7, WkDfVrT1N13D7, WkDfVrT1N14D7, WkDfVrT1N15D7, WkDfVrT1N16D7, WkDfVrT1N17D7, WkDfVrT1N18D7, WkDfVrT1N19D7, WkDfVrT1N20D7" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp new file mode 100644 index 0000000000..a24cedbe28 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp @@ -0,0 +1,74 @@ +--------TurbSim v2.00.* Input File------------------------ +for Certification Test #1 (Kaimal Spectrum, formatted FF files). +---------Runtime Options----------------------------------- +False Echo - Echo input data to .ech (flag) +123456 RandSeed1 - First random seed (-2147483648 to 2147483647) +RanLux RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" +False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) +False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) +False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) +True WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) +False WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) +False WrADTWR - Output tower time-series data? (Generates RootName.twr) +False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) +False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) +True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) +0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] + +--------Turbine/Model Specifications----------------------- +57 NumGrid_Z - Vertical grid-point matrix dimension +76 NumGrid_Y - Horizontal grid-point matrix dimension +0.100000 TimeStep - Time step [seconds] +5.0000 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) +"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") +141.000 HubHt - Hub height [m] (should be > 0.5*GridHeight) +280.000 GridHeight - Grid height [m] +375.000 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) +0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] +0 HFlowAng - Horizontal mean flow (skew) angle [degrees] + +--------Meteorological Boundary Conditions------------------- +"IECKAI" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","USRVKM","TIMESR", or "NONE") +"unused" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models) +1 IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) +"10.000 " IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) +"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) +"default" ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] +"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"PL";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") +"PowerLaw_6ms02.dat" ProfileFile - Name of the file that contains input profiles for WindProfileType="PL" and/or TurbModel="USRVKM" [-] +78.045 RefHt - Height of the reference velocity (URef) [m] +6.000 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] +350 ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) +"0.200" PLExp - Power law exponent [-] (or "default") +"default" Z0 - Surface roughness length [m] (or "default") + +--------Non-IEC Meteorological Boundary Conditions------------ +"default" Latitude - Site latitude [degrees] (or "default") +0.05 RICH_NO - Gradient Richardson number [-] +"default" UStar - Friction or shear velocity [m/s] (or "default") +"default" ZI - Mixing layer depth [m] (or "default") +"default" PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") +"default" PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") +"default" PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") + +--------Spatial Coherence Parameters---------------------------- +"IEC" SCMod1 - u-component coherence model ("GENERAL","IEC","API","NONE", or "default") +"IEC" SCMod2 - v-component coherence model ("GENERAL","IEC","NONE", or "default") +"IEC" SCMod3 - w-component coherence model ("GENERAL","IEC","NONE", or "default") +"12.0 0.000659" InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"12.0 0.000659" InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"12.0 0.000659" InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"0.0" CohExp - Coherence exponent for general model [-] (or "default") + +--------Coherent Turbulence Scaling Parameters------------------- +".\EventData" CTEventPath - Name of the path where event data files are located +"random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") +true Randomize - Randomize the disturbance scale and locations? (true/false) +1 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) +0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) +0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) +30 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] + +==================================================== +! NOTE: Do not add or remove any lines in this file! +==================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf new file mode 100644 index 0000000000..40492632a8 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf @@ -0,0 +1,113 @@ +FAST.Farm v1.00.* - INPUT FILE +Sample FAST.Farm - input file +--- SIMULATION CONTROL --- +False Echo - Echo input data to .ech? (flag) +FATAL AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +2000.0 TMax - Total run time (s) [>=0.0] +False UseSC - Use a super controller? (flag) +2 Mod_AmbWind - Ambient wind model (-) (switch) {1: high-fidelity precursor in VTK format, 2: InflowWind module} +--- SUPER CONTROLLER --- [used only for UseSC=True] +"SC_DLL.dll" SC_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} containing the Super Controller algorithms (quoated string) +--- AMBIENT WIND: PRECURSOR IN VTK FORMAT --- [used only for Mod_AmbWind=1] +2.0 DT_Low-VTK - Time step for low -resolution wind data input files; will be used as the global FAST.Farm time step (s) [>0.0] +0.1 DT_High-VTK - Time step for high-resolution wind data input files (s) [>0.0] +"unused" WindFilePath - Path name to wind data files from precursor (string) +False ChkWndFiles - Check all the ambient wind files for data consistency? (flag) +--- AMBIENT WIND: INFLOWWIND MODULE --- [used only for Mod_AmbWind=2 or 3] +2.4 DT_Low - Time step for low -resolution wind data interpolation; will be used as the global FAST.Farm time step (s) [>0.0] +0.1 DT_High - Time step for high-resolution wind data interpolation (s) [>0.0] +196 NX_Low - Number of low -resolution spatial nodes in X direction for wind data interpolation (-) [>=2] +75 NY_Low - Number of low -resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] +56 NZ_Low - Number of low -resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] +-51.0 X0_Low - Origin of low -resolution spatial nodes in X direction for wind data interpolation (m) +-188.0 Y0_Low - Origin of low -resolution spatial nodes in Y direction for wind data interpolation (m) +1 Z0_Low - Origin of low -resolution spatial nodes in Z direction for wind data interpolation (m) +4.775 dX_Low - Spacing of low -resolution spatial nodes in X direction for wind data interpolation (m) [>0.0] +5.0 dY_Low - Spacing of low -resolution spatial nodes in Y direction for wind data interpolation (m) [>0.0] +5 dZ_Low - Spacing of low -resolution spatial nodes in Z direction for wind data interpolation (m) [>0.0] +20 NX_High - Number of high-resolution spatial nodes in X direction for wind data interpolation (-) [>=2] +19 NY_High - Number of high-resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] +25 NZ_High - Number of high-resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] +"InflowWind.dat" InflowFile - Name of file containing InflowWind module input parameters (quoted string) +--- WIND TURBINES --- +2 NumTurbines - Number of wind turbines (-) [>=1] [last 6 columns used only for Mod_AmbWind=2] +WT_X WT_Y WT_Z WT_FASTInFile X0_High Y0_High Z0_High dX_High dY_High dZ_High +(m) (m) (m) (string) (m) (m) (m) (m) (m) (m) + 0 0 0 "../turbineModel/Test18_WT1.fst" -4.62254000e+01 -48 1 4.77460000e+00 5 5 + 265 50 0 "../turbineModel/Test18_WT2.fst" 2.16376700e+02 2 1 4.77460000e+00 5 5 +--- WAKE DYNAMICS --- +3.0 dr - Radial increment of radial finite-difference grid (m) [>0.0] +50 NumRadii - Number of radii in the radial finite-difference grid (-) [>=2] +44 NumPlanes - Number of wake planes (-) [>=2] +DEFAULT f_c - Cutoff (corner) frequency of the low-pass time-filter for the wake advection, deflection, and meandering model (Hz) [>0.0] or DEFAULT [DEFAULT=0.0007] +DEFAULT C_HWkDfl_O - Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor (m ) or DEFAULT [DEFAULT= 0.0 ] +DEFAULT C_HWkDfl_OY - Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor scaled with yaw error (m/deg) or DEFAULT [DEFAULT= 0.3 ] +DEFAULT C_HWkDfl_x - Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance (- ) or DEFAULT [DEFAULT= 0.0 ] +DEFAULT C_HWkDfl_xY - Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance and yaw error (1/deg) or DEFAULT [DEFAULT=-0.004] +DEFAULT C_NearWake - Calibrated parameter for the near-wake correction (-) [>1.0 and <2.5] or DEFAULT [DEFAULT=1.8] +DEFAULT k_vAmb - Calibrated parameter for the influence of ambient turbulence in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.05 ] +DEFAULT k_vShr - Calibrated parameter for the influence of the shear layer in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.016] +DEFAULT C_vAmb_DMin - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 0.0 ] +DEFAULT C_vAmb_DMax - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vAmb_DMin ] or DEFAULT [DEFAULT= 1.0 ] +DEFAULT C_vAmb_FMin - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 1.0 ] +DEFAULT C_vAmb_Exp - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.01] +DEFAULT C_vShr_DMin - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 3.0 ] +DEFAULT C_vShr_DMax - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vShr_DMin ] or DEFAULT [DEFAULT=25.0 ] +DEFAULT C_vShr_FMin - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 0.2 ] +DEFAULT C_vShr_Exp - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.1 ] +DEFAULT Mod_WakeDiam - Wake diameter calculation model (-) (switch) {1: rotor diameter, 2: velocity based, 3: mass-flux based, 4: momentum-flux based} or DEFAULT [DEFAULT=1] +DEFAULT C_WakeDiam - Calibrated parameter for wake diameter calculation (-) [>0.0 and <0.99] or DEFAULT [DEFAULT=0.95] [unused for Mod_WakeDiam=1] +DEFAULT Mod_Meander - Spatial filter model for wake meandering (-) (switch) {1: uniform, 2: truncated jinc, 3: windowed jinc} or DEFAULT [DEFAULT=3] +DEFAULT C_Meander - Calibrated parameter for wake meandering (-) [>=1.0] or DEFAULT [DEFAULT=1.9] +--- VISUALIZATION --- +False WrDisWind - Write low- and high-resolution disturbed wind data to .Low.Dis.t.vtk etc.? (flag) +1 NOutDisWindXY - Number of XY planes for output of disturbed wind data across the low-resolution domain to .Low.DisXY.t.vtk (-) [0 to 9] +80.0 OutDisWindZ - Z coordinates of XY planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXY] [unused for NOutDisWindXY=0] +0 NOutDisWindYZ - Number of YZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisYZ.t.vtk (-) [0 to 9] +748.0, 1252.0, 1378.0, 1504.0, 1630.0, 1756.0, 1882.0, 2008.0 OutDisWindX - X coordinates of YZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindYZ] [unused for NOutDisWindYZ=0] +0 NOutDisWindXZ - Number of XZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisXZ.t.vtk (-) [0 to 9] +0.0 OutDisWindY - Y coordinates of XZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXZ] [unused for NOutDisWindXZ=0] +2.4 WrDisDT - Time step for disturbed wind visualization output (s) [>0.0] or DEFAULT [DEFAULT=DT_Low or DT_Low-VTK] [unused for WrDisWind=False and NOutDisWindXY=NOutDisWindYZ=NOutDisWindXZ=0] +--- OUTPUT --- +True SumPrint - Print summary data to .sum? (flag) +99999.9 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) [>0.0] +200.0 TStart - Time to begin tabular output (s) [>=0.0] +1 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if False} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +20 NOutRadii - Number of radial nodes for wake output for an individual rotor (-) [0 to 20] +0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15, 16, 17, 18, 19, 21, 24, 28, 33, 39 OutRadii - List of radial nodes for wake output for an individual rotor (-) [1 to NOutRadii] [unused for NOutRadii=0] +7 NOutDist - Number of downstream distances for wake output for an individual rotor (-) [0 to 9 ] +252.0, 378.0, 504.0, 630.0, 756.0, 882.0, 1008.0 OutDist - List of downstream distances for wake output for an individual rotor (m) [1 to NOutDist ] [unused for NOutDist =0] +1 NWindVel - Number of points for wind output (-) [0 to 9] +0.0 WindVelX - List of coordinates in the X direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] +0.0 WindVelY - List of coordinates in the Y direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] +80.0 WindVelZ - List of coordinates in the Z direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] + OutList The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels (quoted string) +"RtAxsXT1 , RtAxsYT1 , RtAxsZT1" +"RtPosXT1 , RtPosYT1 , RtPosZT1" +"YawErrT1" +"TIAmbT1" +"CtT1N01 , CtT1N02 , CtT1N03 , CtT1N04 , CtT1N05 , CtT1N06 , CtT1N07 , CtT1N08 , CtT1N09 , CtT1N10 , CtT1N11 , CtT1N12 , CtT1N13 , CtT1N14 , CtT1N15 , CtT1N16 , CtT1N17 , CtT1N18 , CtT1N19 , CtT1N20" +"WkAxsXT1D1 , WkAxsXT1D2 , WkAxsXT1D3 , WkAxsXT1D4 , WkAxsXT1D5 , WkAxsXT1D6 , WkAxsXT1D7" +"WkAxsYT1D1 , WkAxsYT1D2 , WkAxsYT1D3 , WkAxsYT1D4 , WkAxsYT1D5 , WkAxsYT1D6 , WkAxsYT1D7" +"WkAxsZT1D1 , WkAxsZT1D2 , WkAxsZT1D3 , WkAxsZT1D4 , WkAxsZT1D5 , WkAxsZT1D6 , WkAxsZT1D7" +"WkPosXT1D1 , WkPosXT1D2 , WkPosXT1D3 , WkPosXT1D4 , WkPosXT1D5 , WkPosXT1D6 , WkPosXT1D7" +"WkPosYT1D1 , WkPosYT1D2 , WkPosYT1D3 , WkPosYT1D4 , WkPosYT1D5 , WkPosYT1D6 , WkPosYT1D7" +"WkPosZT1D1 , WkPosZT1D2 , WkPosZT1D3 , WkPosZT1D4 , WkPosZT1D5 , WkPosZT1D6 , WkPosZT1D7" +"WkDfVxT1N01D1, WkDfVxT1N02D1, WkDfVxT1N03D1, WkDfVxT1N04D1, WkDfVxT1N05D1, WkDfVxT1N06D1, WkDfVxT1N07D1, WkDfVxT1N08D1, WkDfVxT1N09D1, WkDfVxT1N10D1, WkDfVxT1N11D1, WkDfVxT1N12D1, WkDfVxT1N13D1, WkDfVxT1N14D1, WkDfVxT1N15D1, WkDfVxT1N16D1, WkDfVxT1N17D1, WkDfVxT1N18D1, WkDfVxT1N19D1, WkDfVxT1N20D1" +"WkDfVxT1N01D2, WkDfVxT1N02D2, WkDfVxT1N03D2, WkDfVxT1N04D2, WkDfVxT1N05D2, WkDfVxT1N06D2, WkDfVxT1N07D2, WkDfVxT1N08D2, WkDfVxT1N09D2, WkDfVxT1N10D2, WkDfVxT1N11D2, WkDfVxT1N12D2, WkDfVxT1N13D2, WkDfVxT1N14D2, WkDfVxT1N15D2, WkDfVxT1N16D2, WkDfVxT1N17D2, WkDfVxT1N18D2, WkDfVxT1N19D2, WkDfVxT1N20D2" +"WkDfVxT1N01D3, WkDfVxT1N02D3, WkDfVxT1N03D3, WkDfVxT1N04D3, WkDfVxT1N05D3, WkDfVxT1N06D3, WkDfVxT1N07D3, WkDfVxT1N08D3, WkDfVxT1N09D3, WkDfVxT1N10D3, WkDfVxT1N11D3, WkDfVxT1N12D3, WkDfVxT1N13D3, WkDfVxT1N14D3, WkDfVxT1N15D3, WkDfVxT1N16D3, WkDfVxT1N17D3, WkDfVxT1N18D3, WkDfVxT1N19D3, WkDfVxT1N20D3" +"WkDfVxT1N01D4, WkDfVxT1N02D4, WkDfVxT1N03D4, WkDfVxT1N04D4, WkDfVxT1N05D4, WkDfVxT1N06D4, WkDfVxT1N07D4, WkDfVxT1N08D4, WkDfVxT1N09D4, WkDfVxT1N10D4, WkDfVxT1N11D4, WkDfVxT1N12D4, WkDfVxT1N13D4, WkDfVxT1N14D4, WkDfVxT1N15D4, WkDfVxT1N16D4, WkDfVxT1N17D4, WkDfVxT1N18D4, WkDfVxT1N19D4, WkDfVxT1N20D4" +"WkDfVxT1N01D5, WkDfVxT1N02D5, WkDfVxT1N03D5, WkDfVxT1N04D5, WkDfVxT1N05D5, WkDfVxT1N06D5, WkDfVxT1N07D5, WkDfVxT1N08D5, WkDfVxT1N09D5, WkDfVxT1N10D5, WkDfVxT1N11D5, WkDfVxT1N12D5, WkDfVxT1N13D5, WkDfVxT1N14D5, WkDfVxT1N15D5, WkDfVxT1N16D5, WkDfVxT1N17D5, WkDfVxT1N18D5, WkDfVxT1N19D5, WkDfVxT1N20D5" +"WkDfVxT1N01D6, WkDfVxT1N02D6, WkDfVxT1N03D6, WkDfVxT1N04D6, WkDfVxT1N05D6, WkDfVxT1N06D6, WkDfVxT1N07D6, WkDfVxT1N08D6, WkDfVxT1N09D6, WkDfVxT1N10D6, WkDfVxT1N11D6, WkDfVxT1N12D6, WkDfVxT1N13D6, WkDfVxT1N14D6, WkDfVxT1N15D6, WkDfVxT1N16D6, WkDfVxT1N17D6, WkDfVxT1N18D6, WkDfVxT1N19D6, WkDfVxT1N20D6" +"WkDfVxT1N01D7, WkDfVxT1N02D7, WkDfVxT1N03D7, WkDfVxT1N04D7, WkDfVxT1N05D7, WkDfVxT1N06D7, WkDfVxT1N07D7, WkDfVxT1N08D7, WkDfVxT1N09D7, WkDfVxT1N10D7, WkDfVxT1N11D7, WkDfVxT1N12D7, WkDfVxT1N13D7, WkDfVxT1N14D7, WkDfVxT1N15D7, WkDfVxT1N16D7, WkDfVxT1N17D7, WkDfVxT1N18D7, WkDfVxT1N19D7, WkDfVxT1N20D7" +"WkDfVrT1N01D1, WkDfVrT1N02D1, WkDfVrT1N03D1, WkDfVrT1N04D1, WkDfVrT1N05D1, WkDfVrT1N06D1, WkDfVrT1N07D1, WkDfVrT1N08D1, WkDfVrT1N09D1, WkDfVrT1N10D1, WkDfVrT1N11D1, WkDfVrT1N12D1, WkDfVrT1N13D1, WkDfVrT1N14D1, WkDfVrT1N15D1, WkDfVrT1N16D1, WkDfVrT1N17D1, WkDfVrT1N18D1, WkDfVrT1N19D1, WkDfVrT1N20D1" +"WkDfVrT1N01D2, WkDfVrT1N02D2, WkDfVrT1N03D2, WkDfVrT1N04D2, WkDfVrT1N05D2, WkDfVrT1N06D2, WkDfVrT1N07D2, WkDfVrT1N08D2, WkDfVrT1N09D2, WkDfVrT1N10D2, WkDfVrT1N11D2, WkDfVrT1N12D2, WkDfVrT1N13D2, WkDfVrT1N14D2, WkDfVrT1N15D2, WkDfVrT1N16D2, WkDfVrT1N17D2, WkDfVrT1N18D2, WkDfVrT1N19D2, WkDfVrT1N20D2" +"WkDfVrT1N01D3, WkDfVrT1N02D3, WkDfVrT1N03D3, WkDfVrT1N04D3, WkDfVrT1N05D3, WkDfVrT1N06D3, WkDfVrT1N07D3, WkDfVrT1N08D3, WkDfVrT1N09D3, WkDfVrT1N10D3, WkDfVrT1N11D3, WkDfVrT1N12D3, WkDfVrT1N13D3, WkDfVrT1N14D3, WkDfVrT1N15D3, WkDfVrT1N16D3, WkDfVrT1N17D3, WkDfVrT1N18D3, WkDfVrT1N19D3, WkDfVrT1N20D3" +"WkDfVrT1N01D4, WkDfVrT1N02D4, WkDfVrT1N03D4, WkDfVrT1N04D4, WkDfVrT1N05D4, WkDfVrT1N06D4, WkDfVrT1N07D4, WkDfVrT1N08D4, WkDfVrT1N09D4, WkDfVrT1N10D4, WkDfVrT1N11D4, WkDfVrT1N12D4, WkDfVrT1N13D4, WkDfVrT1N14D4, WkDfVrT1N15D4, WkDfVrT1N16D4, WkDfVrT1N17D4, WkDfVrT1N18D4, WkDfVrT1N19D4, WkDfVrT1N20D4" +"WkDfVrT1N01D5, WkDfVrT1N02D5, WkDfVrT1N03D5, WkDfVrT1N04D5, WkDfVrT1N05D5, WkDfVrT1N06D5, WkDfVrT1N07D5, WkDfVrT1N08D5, WkDfVrT1N09D5, WkDfVrT1N10D5, WkDfVrT1N11D5, WkDfVrT1N12D5, WkDfVrT1N13D5, WkDfVrT1N14D5, WkDfVrT1N15D5, WkDfVrT1N16D5, WkDfVrT1N17D5, WkDfVrT1N18D5, WkDfVrT1N19D5, WkDfVrT1N20D5" +"WkDfVrT1N01D6, WkDfVrT1N02D6, WkDfVrT1N03D6, WkDfVrT1N04D6, WkDfVrT1N05D6, WkDfVrT1N06D6, WkDfVrT1N07D6, WkDfVrT1N08D6, WkDfVrT1N09D6, WkDfVrT1N10D6, WkDfVrT1N11D6, WkDfVrT1N12D6, WkDfVrT1N13D6, WkDfVrT1N14D6, WkDfVrT1N15D6, WkDfVrT1N16D6, WkDfVrT1N17D6, WkDfVrT1N18D6, WkDfVrT1N19D6, WkDfVrT1N20D6" +"WkDfVrT1N01D7, WkDfVrT1N02D7, WkDfVrT1N03D7, WkDfVrT1N04D7, WkDfVrT1N05D7, WkDfVrT1N06D7, WkDfVrT1N07D7, WkDfVrT1N08D7, WkDfVrT1N09D7, WkDfVrT1N10D7, WkDfVrT1N11D7, WkDfVrT1N12D7, WkDfVrT1N13D7, WkDfVrT1N14D7, WkDfVrT1N15D7, WkDfVrT1N16D7, WkDfVrT1N17D7, WkDfVrT1N18D7, WkDfVrT1N19D7, WkDfVrT1N20D7" +END +--------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh new file mode 100644 index 0000000000..1d58539251 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh @@ -0,0 +1,53 @@ +#!/bin/bash +#SBATCH --job-name=highBox +#SBATCH --output log.highBox +#SBATCH --nodes=3 +#SBATCH --ntasks-per-node=36 +#SBATCH --time=4:00:00 +#SBATCH --mem=150G +#SBATCH --account=osw + +source $HOME/.bash_profile + +echo "Working directory is" $SLURM_SUBMIT_DIR +echo "Job name is" $SLURM_JOB_NAME +echo "Job ID is " $SLURM_JOBID +echo "Job took the following nodes (SLURM_NODELIST)" $SLURM_NODELIST +echo "Submit time is" $(squeue -u $USER -o '%30j %20V' | grep -e $SLURM_JOB_NAME | awk '{print $2}') +echo "Starting job at: " $(date) + +module purge +module use /nopt/nrel/apps/modules/centos77/modulefiles +module load mkl/2020.1.217 +module load comp-intel/2020.1.217 + +# ********************************** USER INPUT ********************************** # +turbsimbin='/home/rthedin/local/local_openfast_intelCompilers/bin/turbsim' +basepath='/projects/shellwind/rthedin/Task2_2regis' + +condList=('Cond00_v08.6_PL0.2_TI10' 'Cond01_v10.6_PL0.2_TI10' 'Cond02_v12.6_PL0.2_TI10') + +caseList=('Case00_wdirp00_WSfalse_YMfalse' 'Case01_wdirp00_WStrue_YMfalse') + +nSeeds=6 +nTurbines=12 +# ******************************************************************************** # + +rampercpu=$((149000/36)) + +for cond in ${condList[@]}; do + for case in ${caseList[@]}; do + for ((seed=0; seed<$nSeeds; seed++)); do + for ((t=1; t<=$nTurbines; t++)); do + dir=$(printf "%s/%s/%s/Seed_%01d/TurbSim" $basepath $cond $case $seed) + echo "Submitting $dir/HighT$t.inp" + srun -n1 -N1 --exclusive --mem-per-cpu=$rampercpu $turbsimbin $dir/HighT$t.inp > $dir/log.hight$t.seed$seed.txt 2>&1 & + sleep 0.1 + done + done + done +done + +wait + +echo "Ending job at: " $(date) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh new file mode 100644 index 0000000000..4b65c4c55b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh @@ -0,0 +1,50 @@ +#!/bin/bash +#SBATCH --job-name=lowBox +#SBATCH --output log.lowBox +#SBATCH --nodes=2 +#SBATCH --ntasks-per-node=12 +#SBATCH --time=2-00 +#SBATCH --mem=150G +#SBATCH --account=osw + +source $HOME/.bash_profile + +echo "Working directory is" $SLURM_SUBMIT_DIR +echo "Job name is" $SLURM_JOB_NAME +echo "Job ID is " $SLURM_JOBID +echo "Job took the following nodes (SLURM_NODELIST)" $SLURM_NODELIST +echo "Submit time is" $(squeue -u $USER -o '%30j %20V' | grep -e $SLURM_JOB_NAME | awk '{print $2}') +echo "Starting job at: " $(date) + +nodelist=`scontrol show hostname $SLURM_NODELIST` +nodelist=($nodelist) +echo "Formatted list of nodes is: $nodelist" + +module purge +module use /nopt/nrel/apps/modules/centos77/modulefiles +module load mkl/2020.1.217 +module load comp-intel/2020.1.217 + +# ********************************** USER INPUT ********************************** # +turbsimbin='/home/rthedin/local/local_openfast_intelCompilers/bin/turbsim' +basepath='/projects/shellwind/rthedin/Task2_2regis' + +condList=('Cond00_v08.6_PL0.2_TI10' 'Cond01_v10.6_PL0.2_TI10' 'Cond02_v12.6_PL0.2_TI10') + +nSeeds=6 +# ******************************************************************************** # + +nodeToUse=0 +for cond in ${condList[@]}; do + currNode=${nodelist[$nodeToUse]} + for((seed=0; seed<$nSeeds; seed++)); do + dir=$(printf "%s/%s/Seed_%01d" $basepath $cond $seed) + echo "Submitting $dir/Low.inp in node $currNode" + srun -n1 -N1 --exclusive --nodelist=$currNode --mem-per-cpu=25000M $turbsimbin $dir/Low.inp > $dir/log.low.seed$seed.txt 2>&1 & + done + (( nodeToUse++ )) +done + +wait + +echo "Ending job at: " $(date) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh new file mode 100644 index 0000000000..46ba147a5b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh @@ -0,0 +1,42 @@ +#!/bin/bash +#SBATCH --job-name=runFF +#SBATCH --output log.fastfarm_c0_c0_seed0 +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=36 +#SBATCH --time=10-00 +#SBATCH --account=mmc + +source $HOME/.bash_profile + +echo "Working directory is" $SLURM_SUBMIT_DIR +echo "Job name is" $SLURM_JOB_NAME +echo "Job ID is " $SLURM_JOBID +echo "Job took the following nodes (SLURM_NODELIST)" $SLURM_NODELIST +echo "Submit time is" $(squeue -u $USER -o '%30j %20V' | grep -e $SLURM_JOB_NAME | awk '{print $2}') +echo "Starting job at: " $(date) + +nodelist=`scontrol show hostname $SLURM_NODELIST` +nodelist=($nodelist) +echo "Formatted list of nodes is: $nodelist" + +module purge +module use /nopt/nrel/apps/modules/centos77/modulefiles +module load mkl/2020.1.217 +module load comp-intel/2020.1.217 + +# ********************************** USER INPUT ********************************** # +fastfarmbin='/home/rthedin/local/local_openfast_intelCompilers_3.1.0_openmpPrints/bin/FAST.Farm' +basepath='/projects/shellwind/rthedin/Task2_2regis' + +cond='Cond00_v08.6_PL0.2_TI10' +case='Case00_wdirp00_WSfalse_YMfalse_12fED_12ADyn' + +seed=0 +# ******************************************************************************** # + +dir=$(printf "%s/%s/%s/Seed_%01d" $basepath $cond $case $seed) +cd $dir +echo "Submitting $dir/FFarm_mod.fstf" +$fastfarmbin $dir/FFarm_mod.fstf > $dir/log.fastfarm.seed$seed.txt 2>&1 + +echo "Ending job at: " $(date) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp new file mode 100644 index 0000000000..66c01ca7b1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp @@ -0,0 +1,74 @@ +--------TurbSim v2.00.* Input File------------------------ +for Certification Test #1 (Kaimal Spectrum, formatted FF files). +---------Runtime Options----------------------------------- +False Echo - Echo input data to .ech (flag) +1432403720 RandSeed1 - First random seed (-2147483648 to 2147483647) +RanLux RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" +False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) +False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) +False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) +True WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) +False WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) +False WrADTWR - Output tower time-series data? (Generates RootName.twr) +False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) +False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) +True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) +0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] + +--------Turbine/Model Specifications----------------------- +59 NumGrid_Z - Vertical grid-point matrix dimension +60 NumGrid_Y - Horizontal grid-point matrix dimension +0.5000 TimeStep - Time step [seconds] +1750.00 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) +"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") +150.000 HubHt - Hub height [m] (should be > 0.5*GridHeight) +290.000 GridHeight - Grid height [m] +295.000 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) +0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] +0 HFlowAng - Horizontal mean flow (skew) angle [degrees] + +--------Meteorological Boundary Conditions------------------- +"TIMESR" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","IECKAI","TIMESR", or "NONE") +"USRTimeSeries_T1.txt" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "IECKAI" and "TIMESR" models) +1 IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) +"D" IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) +"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) +"default" ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] +"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"PL";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") +"PowerLaw_6ms02.dat" ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-] +148.840 RefHt - Height of the reference velocity (URef) [m] +6.600 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] +350 ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) +"0.100" PLExp - Power law exponent [-] (or "default") +"default" Z0 - Surface roughness length [m] (or "default") + +--------Non-IEC Meteorological Boundary Conditions------------ +"default" Latitude - Site latitude [degrees] (or "default") +0.05 RICH_NO - Gradient Richardson number [-] +"default" UStar - Friction or shear velocity [m/s] (or "default") +"default" ZI - Mixing layer depth [m] (or "default") +"default" PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") +"default" PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") +"default" PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") + +--------Spatial Coherence Parameters---------------------------- +"IEC" SCMod1 - u-component coherence model ("GENERAL","IEC","API","NONE", or "default") +"IEC" SCMod2 - v-component coherence model ("GENERAL","IEC","NONE", or "default") +"IEC" SCMod3 - w-component coherence model ("GENERAL","IEC","NONE", or "default") +"12.0 0.0003527" InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"12.0 0.001058" InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"12.0 0.004329" InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"0.0" CohExp - Coherence exponent for general model [-] (or "default") + +--------Coherent Turbulence Scaling Parameters------------------- +".\EventData" CTEventPath - Name of the path where event data files are located +"random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") +true Randomize - Randomize the disturbance scale and locations? (true/false) +1 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) +0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) +0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) +30 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] + +==================================================== +! NOTE: Do not add or remove any lines in this file! +==================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp new file mode 100644 index 0000000000..3945ea8684 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp @@ -0,0 +1,74 @@ +--------TurbSim v2.00.* Input File------------------------ +for Certification Test #1 (Kaimal Spectrum, formatted FF files). +---------Runtime Options----------------------------------- +False Echo - Echo input data to .ech (flag) +1432403720 RandSeed1 - First random seed (-2147483648 to 2147483647) +RanLux RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" +False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) +False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) +False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) +True WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) +False WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) +False WrADTWR - Output tower time-series data? (Generates RootName.twr) +False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) +False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) +True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) +0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] + +--------Turbine/Model Specifications----------------------- +40 NumGrid_Z - Vertical grid-point matrix dimension +481 NumGrid_Y - Horizontal grid-point matrix dimension +0.5000 TimeStep - Time step [seconds] +1750.00 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) +"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") +395.000 HubHt - Hub height [m] (should be > 0.5*GridHeight) +780.000 GridHeight - Grid height [m] +9600.000 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) +0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] +0 HFlowAng - Horizontal mean flow (skew) angle [degrees] + +--------Meteorological Boundary Conditions------------------- +"IECKAI" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","USRVKM","TIMESR", or "NONE") +"unused" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models) +1 IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) +"D" IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) +"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) +"default" ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] +"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"USR";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") +"PowerLaw_6ms02.dat" ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-] +148.840 RefHt - Height of the reference velocity (URef) [m] +6.600 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] +350 ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) +"0.100" PLExp - Power law exponent [-] (or "default") +"default" Z0 - Surface roughness length [m] (or "default") + +--------Non-IEC Meteorological Boundary Conditions------------ +"default" Latitude - Site latitude [degrees] (or "default") +0.05 RICH_NO - Gradient Richardson number [-] +"default" UStar - Friction or shear velocity [m/s] (or "default") +"default" ZI - Mixing layer depth [m] (or "default") +"default" PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") +"default" PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") +"default" PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") + +--------Spatial Coherence Parameters---------------------------- +"IEC" SCMod1 - u-component coherence model ("GENERAL","IEC","API","NONE", or "default") +"IEC" SCMod2 - v-component coherence model ("GENERAL","IEC","NONE", or "default") +"IEC" SCMod3 - w-component coherence model ("GENERAL","IEC","NONE", or "default") +"12.0 0.0003527" InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"12.0 0.001058" InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"12.0 0.004329" InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +"0.0" CohExp - Coherence exponent for general model [-] (or "default") + +--------Coherent Turbulence Scaling Parameters------------------- +".\EventData" CTEventPath - Name of the path where event data files are located +"random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") +true Randomize - Randomize the disturbance scale and locations? (true/false) +1 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) +0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) +0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) +30 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] + +==================================================== +! NOTE: Do not add or remove any lines in this file! +==================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py new file mode 100644 index 0000000000..6f1b2a1ed0 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py @@ -0,0 +1,648 @@ +import os +import glob +import numpy as np +import pandas as pd +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.input_output.fast_output_file import FASTOutputFile +from pyFAST.input_output.turbsim_file import TurbSimFile +import pyFAST.postpro as fastlib + +# --------------------------------------------------------------------------------} +# --- Small helper functions +# --------------------------------------------------------------------------------{ +def insertTN(s,i,nWT=1000, noLeadingZero=False): + """ insert turbine number in name """ + if nWT<10: + fmt='{:d}' + elif nWT<100: + fmt='{:02d}' + else: + fmt='{:03d}' + + if noLeadingZero: + fmt='{:d}' + + if s.find('T1')>=0: + s=s.replace('T1','T'+fmt.format(i)) + elif s.find('T0')>=0: + print('this should not be printed') + s=s.replace('T0','T'+fmt.format(i)) + else: + sp=os.path.splitext(s) + s=sp[0]+'_T'+fmt.format(i)+sp[1] + return s +def forceCopyFile (sfile, dfile): + # ---- Handling error due to wrong mod + if os.path.isfile(dfile): + if not os.access(dfile, os.W_OK): + os.chmod(dfile, stat.S_IWUSR) + #print(sfile, ' > ', dfile) + shutil.copy2(sfile, dfile) + +# --------------------------------------------------------------------------------} +# --- Tools to create fast farm simulations +# --------------------------------------------------------------------------------{ +def writeFSTandDLL(FstT1Name, nWT): + """ + Write FST files for each turbine, with different ServoDyn files and DLL + FST files, ServoFiles, and DLL files will be written next to their turbine 1 + files, with name Ti. + + FstT1Name: absolute or relative path to the Turbine FST file + """ + + FstT1Full = os.path.abspath(FstT1Name).replace('\\','/') + FstDir = os.path.dirname(FstT1Full) + + fst=FASTInputFile(FstT1Name) + SrvT1Name = fst['ServoFile'].strip('"') + SrvT1Full = os.path.join(FstDir, SrvT1Name).replace('\\','/') + SrvDir = os.path.dirname(SrvT1Full) + SrvT1RelFst = os.path.relpath(SrvT1Full,FstDir) + if os.path.exists(SrvT1Full): + srv=FASTInputFile(SrvT1Full) + DLLT1Name = srv['DLL_FileName'].strip('"') + DLLT1Full = os.path.join(SrvDir, DLLT1Name) + if os.path.exists(DLLT1Full): + servo=True + else: + print('[Info] DLL file not found, not copying servo and dll files ({})'.format(DLLT1Full)) + servo=False + else: + print('[Info] ServoDyn file not found, not copying servo and dll files ({})'.format(SrvT1Full)) + servo=False + + #print(FstDir) + #print(FstT1Full) + #print(SrvT1Name) + #print(SrvT1Full) + #print(SrvT1RelFst) + + for i in np.arange(2,nWT+1): + FstName = insertTN(FstT1Name,i,nWT) + if servo: + # TODO handle the case where T1 not present + SrvName = insertTN(SrvT1Name,i,nWT) + DLLName = insertTN(DLLT1Name,i,nWT) + DLLFullName = os.path.join(SrvDir, DLLName) + + print('') + print('FstName: ',FstName) + if servo: + print('SrvName: ',SrvName) + print('DLLName: ',DLLName) + print('DLLFull: ',DLLFullName) + + # Changing main file + if servo: + fst['ServoFile']='"'+SrvName+'"' + fst.write(FstName) + if servo: + # Changing servo file + srv['DLL_FileName']='"'+DLLName+'"' + srv.write(SrvName) + # Copying dll + forceCopyFile(DLLT1Full, DLLFullName) + + + +def rectangularLayoutSubDomains(D,Lx,Ly): + """ Retuns position of turbines in a rectangular layout + TODO, unfinished function parameters + """ + # --- Parameters + D = 112 # turbine diameter [m] + Lx = 3840 # x dimension of precusor + Ly = 3840 # y dimension of precusor + Height = 0 # Height above ground, likely 0 [m] + nDomains_x = 2 # number of domains in x + nDomains_y = 2 # number of domains in y + # --- 36 WT + nx = 3 # number of turbines to be placed along x in one precursor domain + ny = 3 # number of turbines to be placed along y in one precursor domain + StartX = 1/2 # How close do we start from the x boundary + StartY = 1/2 # How close do we start from the y boundary + # --- Derived parameters + Lx_Domain = Lx * nDomains_x # Full domain size + Ly_Domain = Ly * nDomains_y + DeltaX = Lx / (nx) # Turbine spacing + DeltaY = Ly / (ny) + xWT = np.arange(DeltaX*StartX,Lx_Domain,DeltaX) # Turbine positions + yWT = np.arange(DeltaY*StartY,Ly_Domain,DeltaY) + + print('Full domain size [D] : {:.2f} x {:.2f} '.format(Lx_Domain/D, Ly_Domain/D)) + print('Turbine spacing [D] : {:.2f} x {:.2f} '.format(DeltaX/D,DeltaX/D)) + print('Number of turbines : {:d} x {:d} = {:d}'.format(len(xWT),len(yWT),len(xWT)*len(yWT))) + + XWT,YWT=np.meshgrid(xWT,yWT) + ZWT=XWT*0+Height + + # --- Export coordinates only + M=np.column_stack((XWT.ravel(),YWT.ravel(),ZWT.ravel())) + np.savetxt('Farm_Coordinates.csv', M, delimiter=',',header='X_[m], Y_[m], Z_[m]') + print(M) + + return XWT, YWT, ZWT + + +def fastFarmTurbSimExtent(TurbSimFilename, hubHeight, D, xWT, yWT, Cmeander=1.9, chord_max=3, extent_X=1.1, extent_YZ=1.1, meanUAtHubHeight=False): + """ + Determines "Ambient Wind" box parametesr for FastFarm, based on a TurbSimFile ('bts') + + Implements the guidelines listed here: + https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html + + INPUTS: + - TurbSimFilename: name of the BTS file used in the FAST.Farm simulation + - hubHeight : Hub height [m] + - D : turbine diameter [m] + - xWT : vector of x positions of the wind turbines (e.g. [0,300,600]) + - yWT : vector of y positions of the wind turbines (e.g. [0,0,0]) + - Cmeander : parameter for meandering used in FAST.Farm [-] + - chord_max : maximum chord of the wind turbine blade. Used to determine the high resolution + - extent_X : x-extent of high res box in diamter around turbine location + - extent_YZ : y-extent of high res box in diamter around turbine location + + """ + # --- TurbSim data + ts = TurbSimFile(TurbSimFilename) + + if meanUAtHubHeight: + # Use Hub Height to determine convection velocity + iy,iz = ts.closestPoint(y=0,z=hubHeight) + meanU = ts['u'][0,:,iy,iz].mean() + else: + # Use middle of the box to determine convection velocity + zMid, meanU = ts.midValues() + + return fastFarmBoxExtent(ts.y, ts.z, ts.t, meanU, hubHeight, D, xWT, yWT, Cmeander=Cmeander, chord_max=chord_max, extent_X=extent_X, extent_YZ=extent_YZ) + +def fastFarmBoxExtent(yBox, zBox, tBox, meanU, hubHeight, D, xWT, yWT, + Cmeander=1.9, chord_max=3, extent_X=1.1, extent_YZ=1.1, + extent_wake=8, LES=False): + """ + Determines "Ambient Wind" box parametesr for FastFarm, based on turbulence box parameters + INPUTS: + - yBox : y vector of grid points of the box + - zBox : z vector of grid points of the box + - tBox : time vector of the box + - meanU : mean velocity used to convect the box + - hubHeight : Hub height [m] + - D : turbine diameter [m] + - xWT : vector of x positions of the wind turbines (e.g. [0,300,600]) + - yWT : vector of y positions of the wind turbines (e.g. [0,0,0]) + - Cmeander : parameter for meandering used in FAST.Farm [-] + - chord_max : maximum chord of the wind turbine blade. Used to determine the high resolution + - extent_X : x-extent of high-res box (in diameter) around turbine location + - extent_YZ : y-extent of high-res box (in diameter) around turbine location + - extent_wake : extent of low-res box (in diameter) to add beyond the "last" wind turbine + - LES: False for TurbSim box, true for LES. Perform additional checks for LES. + """ + if LES: + raise NotImplementedError() + # --- Box resolution and extents + dY_Box = yBox[1]-yBox[0] + dZ_Box = zBox[1]-zBox[0] + dT_Box = tBox[1]-tBox[0] + dX_Box = dT_Box * meanU + Z0_Box = zBox[0] + LY_Box = yBox[-1]-yBox[0] + LZ_Box = zBox[-1]-zBox[0] + LT_Box = tBox[-1]-tBox[0] + LX_Box = LT_Box * meanU + + # --- Desired resolution, rules of thumb + dX_High_desired = chord_max + dX_Low_desired = Cmeander*D*meanU/150.0 + dY_Low_desired = dX_Low_desired + dZ_Low_desired = dX_Low_desired + dT_Low_desired = Cmeander*D/(10.0*meanU) + + # --- Suitable resolution for high res + dX_High = int(dX_High_desired/dX_Box)*dX_Box + if dX_High==0: raise Exception('The x-resolution of the box ({}) is too large and cannot satisfy the requirements for the high-res domain of dX~{} (based on chord_max). Reduce DX (or DT) of the box.'.format(dX_Box, dX_High_desired)) + dY_High = dY_Box # TODO? + dZ_High = dZ_Box # TODO? + dT_High = dT_Box # TODO? + + # --- Suitable resolution for Low res + dT_Low = int(dT_Low_desired/dT_Box )*dT_Box + dX_Low = int(dX_Low_desired/dX_High)*dX_High + dY_Low = int(dY_Low_desired/dY_High)*dY_High + dZ_Low = int(dZ_Low_desired/dZ_High)*dZ_High + if dT_Low==0: raise Exception('The time-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dT~{} (based on D & U). Reduce the DT of the box.'.format(dT_Box, dT_Low_desired)) + if dX_Low==0: raise Exception('The X-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dX~{} (based on D & U). Reduce the DX of the box.'.format(dX_Box, dX_Low_desired)) + if dY_Low==0: raise Exception('The Y-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dY~{} (based on D & U). Reduce the DY of the box.'.format(dY_Box, dY_Low_desired)) + if dZ_Low==0: raise Exception('The Z-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dZ~{} (based on D & U). Reduce the DZ of the box.'.format(dZ_Box, dZ_Low_desired)) + + # --- Low-res domain + # NOTE: more work is needed to make sure the domain encompass the turbines + # Also, we need to know the main flow direction to add a buffere with extent_wake + # Origin + nD_Before = extent_X/2 # Diameters before the first turbine to start the domain + X0_Low = np.floor( (min(xWT)-nD_Before*D-dX_Low)) # Starting on integer value for esthetics. With a dX_Low margin. + Y0_Low = np.floor( -LY_Box/2 ) # Starting on integer value for esthetics + Z0_Low = zBox[0] # we start at lowest to include tower + if LES: + if Y0_Low > min(yWT)-3*D: + Y0_Low = np.floor(min(yWT)-3*D) + # Extent NOTE: this assumes main flow about x. Might need to be changed + + XMax_Low = max(xWT) + extent_wake*D + LX_Low = XMax_Low-X0_Low + LY_Low = LY_Box + LZ_Low = LZ_Box + # Number of points + nX_Low = int(np.ceil(LX_Low/dX_Low)) + nY_Low = int(np.ceil(LY_Low/dY_Low)) + nZ_Low = int(np.ceil(LZ_Low/dZ_Low)) + # Make sure we don't exceed box in Y and Z #rt: this essentially gives us 1 less grid point than what is on the inp/bst files + if (nY_Low*dY_Low>LY_Box): nY_Low=nY_Low-1 + if (nZ_Low*dZ_Low>LZ_Box): nZ_Low=nZ_Low-1 + + # --- High-res domain extent and number of points + ZMax_High = hubHeight+extent_YZ*D/2 + Z0_High = zBox[0] # we start at lowest to include tower + LX_High = extent_X*D + LY_High = min(LY_Box, extent_YZ*D ) # Bounding to not exceed the box dimension + LZ_High = min(LZ_Box, ZMax_High-Z0_High) # Bounding to not exceed the box dimension + nX_High = int(np.ceil(LX_High/dX_High)) + nY_High = int(np.ceil(LY_High/dY_High)) + nZ_High = int(np.ceil(LZ_High/dZ_High)) + # Make sure we don't exceed box in Y and Z + if (nY_High*dY_High>LY_Box): nY_High=nY_High-1 + if (nZ_High*dZ_High>LZ_Box): nZ_High=nZ_High-1 + + # --- High-res location per turbine + X0_desired = np.asarray(xWT)-LX_High/2 # high-res is centered on turbine location + Y0_desired = np.asarray(yWT)-LY_High/2 # high-res is centered on turbine location + X0_High = X0_Low + np.floor((X0_desired-X0_Low)/dX_High)*dX_High + Y0_High = Y0_Low + np.floor((Y0_desired-Y0_Low)/dY_High)*dY_High + + d = dict() + d['DT_Low'] = np.around(dT_Low ,4) + d['DT_High'] = np.around(dT_High,4) + d['NX_Low'] = nX_Low + d['NY_Low'] = nY_Low + d['NZ_Low'] = nZ_Low + d['X0_Low'] = np.around(X0_Low,4) + d['Y0_Low'] = np.around(Y0_Low,4) + d['Z0_Low'] = np.around(Z0_Low,4) + d['dX_Low'] = np.around(dX_Low,4) + d['dY_Low'] = np.around(dY_Low,4) + d['dZ_Low'] = np.around(dZ_Low,4) + d['NX_High'] = nX_High + d['NY_High'] = nY_High + d['NZ_High'] = nZ_High + # --- High extent info for turbine outputs + d['dX_High'] = np.around(dX_High,4) + d['dY_High'] = np.around(dY_High,4) + d['dZ_High'] = np.around(dZ_High,4) + d['X0_High'] = np.around(X0_High,4) + d['Y0_High'] = np.around(Y0_High,4) + d['Z0_High'] = np.around(Z0_High,4) + # --- Misc + d['dX_des_High'] = dX_High_desired + d['dX_des_Low'] = dX_Low_desired + d['DT_des'] = dT_Low_desired + d['U_mean'] = meanU + + # --- Sanity check: check that the high res is at "almost" an integer location + X_rel = (np.array(d['X0_High'])-d['X0_Low'])/d['dX_High'] + Y_rel = (np.array(d['Y0_High'])-d['Y0_Low'])/d['dY_High'] + dX = X_rel - np.round(X_rel) # Should be close to zero + dY = Y_rel - np.round(Y_rel) # Should be close to zero + if any(abs(dX)>1e-3): + print('Deltas:',dX) + print('Exception has been raise. I put this print statement instead. Check with EB.') + print('Exception: Some X0_High are not on an integer multiple of the high-res grid') + #raise Exception('Some X0_High are not on an integer multiple of the high-res grid') + if any(abs(dY)>1e-3): + print('Deltas:',dY) + print('Exception has been raise. I put this print statement instead. Check with EB.') + print('Exception: Some Y0_High are not on an integer multiple of the high-res grid') + #raise Exception('Some Y0_High are not on an integer multiple of the high-res grid') + + return d + + +def writeFastFarm(outputFile, templateFile, xWT, yWT, zWT, FFTS=None, OutListT1=None, noLeadingZero=False): + """ Write FastFarm input file based on a template, a TurbSimFile and the Layout + + outputFile: .fstf file to be written + templateFile: .fstf file that will be used to generate the output_file + XWT,YWT,ZWT: positions of turbines + FFTS: FastFarm TurbSim parameters as returned by fastFarmTurbSimExtent + """ + # --- Read template fast farm file + fst=FASTInputFile(templateFile) + # --- Replace box extent values + if FFTS is not None: + fst['Mod_AmbWind'] = 2 + ModVars = ['DT_Low', 'DT_High', 'NX_Low', 'NY_Low', 'NZ_Low', 'X0_Low', 'Y0_Low', 'Z0_Low', 'dX_Low', 'dY_Low', 'dZ_Low', 'NX_High', 'NY_High', 'NZ_High'] + for k in ModVars: + if isinstance(FFTS[k],int): + fst[k] = FFTS[k] + else: + fst[k] = np.around(FFTS[k],3) + fst['WrDisDT'] = FFTS['DT_Low'] + + # --- Set turbine names, position, and box extent + nWT = len(xWT) + fst['NumTurbines'] = nWT + if FFTS is not None: + nCol= 10 + else: + nCol = 4 + ref_path = fst['WindTurbines'][0,3] + WT = np.array(['']*nWT*nCol,dtype='object').reshape((nWT,nCol)) + for iWT,(x,y,z) in enumerate(zip(xWT,yWT,zWT)): + WT[iWT,0]=x + WT[iWT,1]=y + WT[iWT,2]=z + WT[iWT,3]=insertTN(ref_path,iWT+1,nWT,noLeadingZero=noLeadingZero) + if FFTS is not None: + WT[iWT,4]=FFTS['X0_High'][iWT] + WT[iWT,5]=FFTS['Y0_High'][iWT] + WT[iWT,6]=FFTS['Z0_High'] + WT[iWT,7]=FFTS['dX_High'] + WT[iWT,8]=FFTS['dY_High'] + WT[iWT,9]=FFTS['dZ_High'] + fst['WindTurbines']=WT + + fst.write(outputFile) + if OutListT1 is not None: + setFastFarmOutputs(outputFile, OutListT1) + +def setFastFarmOutputs(fastFarmFile, OutListT1): + """ Duplicate the output list, by replacing "T1" with T1->Tn """ + fst = FASTInputFile(fastFarmFile) + nWTOut = min(fst['NumTurbines'],9) # Limited to 9 turbines + OutList=[''] + for s in OutListT1: + s=s.strip('"') + if 'T1' in s: + OutList+=['"'+s.replace('T1','T{:d}'.format(iWT+1))+'"' for iWT in np.arange(nWTOut) ] + elif 'W1VAmb' in s: # special case for ambient wind + OutList+=['"'+s.replace('1','{:d}'.format(iWT+1))+'"' for iWT in np.arange(nWTOut) ] + elif 'W1VDis' in s: # special case for disturbed wind + OutList+=['"'+s.replace('1','{:d}'.format(iWT+1))+'"' for iWT in np.arange(nWTOut) ] + else: + OutList+='"'+s+'"' + fst['OutList']=OutList + fst.write(fastFarmFile) + + +def plotFastFarmSetup(fastFarmFile, grid=True, fig=None, D=None, plane='XY', hubHeight=None, showLegend=True): + """ """ + import matplotlib.pyplot as plt + + def col(i): + Colrs=plt.rcParams['axes.prop_cycle'].by_key()['color'] + return Colrs[ np.mod(i,len(Colrs)) ] + def boundingBox(x, y): + """ return x and y coordinates to form a box marked by the min and max of x and y""" + x_bound = [x[0],x[-1],x[-1],x[0] ,x[0]] + y_bound = [y[0],y[0] ,y[-1],y[-1],y[0]] + return x_bound, y_bound + + + # --- Read FAST.Farm input file + fst=FASTInputFile(fastFarmFile) + + if fig is None: + fig = plt.figure(figsize=(13.5,8)) + ax = fig.add_subplot(111,aspect="equal") + + WT=fst['WindTurbines'] + xWT = WT[:,0].astype(float) + yWT = WT[:,1].astype(float) + zWT = yWT*0 + if hubHeight is not None: + zWT += hubHeight + + if plane == 'XY': + pass + elif plane == 'XZ': + yWT = zWT + elif plane == 'YZ': + xWT = yWT + yWT = zWT + else: + raise Exception("Plane should be 'XY' 'XZ' or 'YZ'") + + if fst['Mod_AmbWind'] == 2: + x_low = fst['X0_Low'] + np.arange(fst['NX_Low']+1)*fst['DX_Low'] + y_low = fst['Y0_Low'] + np.arange(fst['NY_Low']+1)*fst['DY_Low'] + z_low = fst['Z0_Low'] + np.arange(fst['NZ_Low']+1)*fst['DZ_Low'] + if plane == 'XZ': + y_low = z_low + elif plane == 'YZ': + x_low = y_low + y_low = z_low + # Plot low-res box + x_bound_low, y_bound_low = boundingBox(x_low, y_low) + ax.plot(x_bound_low, y_bound_low ,'--k',lw=2,label='Low-res') + # Plot Low res grid lines + if grid: + ax.vlines(x_low, ymin=y_low[0], ymax=y_low[-1], ls='-', lw=0.3, color=(0.3,0.3,0.3)) + ax.hlines(y_low, xmin=x_low[0], xmax=x_low[-1], ls='-', lw=0.3, color=(0.3,0.3,0.3)) + + X0_High = WT[:,4].astype(float) + Y0_High = WT[:,5].astype(float) + Z0_High = WT[:,6].astype(float) + dX_High = WT[:,7].astype(float)[0] + dY_High = WT[:,8].astype(float)[0] + dZ_High = WT[:,9].astype(float)[0] + nX_High = fst['NX_High'] + nY_High = fst['NY_High'] + nZ_High = fst['NZ_High'] + + # high-res boxes + for wt in range(len(xWT)): + x_high = X0_High[wt] + np.arange(nX_High+1)*dX_High + y_high = Y0_High[wt] + np.arange(nY_High+1)*dY_High + z_high = Z0_High[wt] + np.arange(nZ_High+1)*dZ_High + if plane == 'XZ': + y_high = z_high + elif plane == 'YZ': + x_high = y_high + y_high = z_high + + x_bound_high, y_bound_high = boundingBox(x_high, y_high) + ax.plot(x_bound_high, y_bound_high, '-', lw=2, c=col(wt)) + # Plot High res grid lines + if grid: + ax.vlines(x_high, ymin=y_high[0], ymax=y_high[-1], ls='--', lw=0.4, color=col(wt)) + ax.hlines(y_high, xmin=x_high[0], xmax=x_high[-1], ls='--', lw=0.4, color=col(wt)) + + # Plot turbines + for wt in range(len(xWT)): + ax.plot(xWT[wt], yWT[wt], 'x', ms=8, mew=2, c=col(wt),label="WT{}".format(wt+1)) + if plane=='XY' and D is not None: + ax.plot([xWT[wt],xWT[wt]], [yWT[wt]-D/2,yWT[wt]+D/2], '-', lw=2, c=col(wt)) + elif plane=='XZ' and D is not None and hubHeight is not None: + ax.plot([xWT[wt],xWT[wt]], [yWT[wt]-D/2,yWT[wt]+D/2], '-', lw=2, c=col(wt)) + elif plane=='YZ' and D is not None and hubHeight is not None: + theta = np.linspace(0,2*np.pi, 40) + x = xWT[wt] + D/2*np.cos(theta) + y = yWT[wt] + D/2*np.sin(theta) + ax.plot(x, y, '-', lw=2, c=col(wt)) + + #plt.legend(bbox_to_anchor=(1.05,1.015),frameon=False) + if showLegend: + ax.legend() + if plane=='XY': + ax.set_xlabel("x [m]") + ax.set_ylabel("y [m]") + elif plane=='XZ': + ax.set_xlabel("x [m]") + ax.set_ylabel("z [m]") + elif plane=='YZ': + ax.set_xlabel("y [m]") + ax.set_ylabel("z [m]") + fig.tight_layout + # fig.savefig('FFarmLayout.pdf',bbox_to_inches='tight',dpi=500) + + return fig + +# --------------------------------------------------------------------------------} +# --- Tools for postpro +# --------------------------------------------------------------------------------{ + +def spanwiseColFastFarm(Cols, nWT=9, nD=9): + """ Return column info, available columns and indices that contain AD spanwise data""" + FFSpanMap=dict() + for i in np.arange(nWT): + FFSpanMap[r'^CtT{:d}N(\d*)_\[-\]'.format(i+1)]='CtT{:d}_[-]'.format(i+1) + for i in np.arange(nWT): + for k in np.arange(nD): + FFSpanMap[r'^WkDfVxT{:d}N(\d*)D{:d}_\[m/s\]'.format(i+1,k+1) ]='WkDfVxT{:d}D{:d}_[m/s]'.format(i+1, k+1) + for i in np.arange(nWT): + for k in np.arange(nD): + FFSpanMap[r'^WkDfVrT{:d}N(\d*)D{:d}_\[m/s\]'.format(i+1,k+1) ]='WkDfVrT{:d}D{:d}_[m/s]'.format(i+1, k+1) + + return fastlib.find_matching_columns(Cols, FFSpanMap) + +def diameterwiseColFastFarm(Cols, nWT=9): + """ Return column info, available columns and indices that contain AD spanwise data""" + FFDiamMap=dict() + for i in np.arange(nWT): + for x in ['X','Y','Z']: + FFDiamMap[r'^WkAxs{}T{:d}D(\d*)_\[-\]'.format(x,i+1)] ='WkAxs{}T{:d}_[-]'.format(x,i+1) + for i in np.arange(nWT): + for x in ['X','Y','Z']: + FFDiamMap[r'^WkPos{}T{:d}D(\d*)_\[m\]'.format(x,i+1)] ='WkPos{}T{:d}_[m]'.format(x,i+1) + for i in np.arange(nWT): + for x in ['X','Y','Z']: + FFDiamMap[r'^WkVel{}T{:d}D(\d*)_\[m/s\]'.format(x,i+1)] ='WkVel{}T{:d}_[m/s]'.format(x,i+1) + for i in np.arange(nWT): + for x in ['X','Y','Z']: + FFDiamMap[r'^WkDiam{}T{:d}D(\d*)_\[m\]'.format(x,i+1)] ='WkDiam{}T{:d}_[m]'.format(x,i+1) + return fastlib.find_matching_columns(Cols, FFDiamMap) + +def SensorsFARMRadial(nWT=3,nD=10,nR=30,signals=None): + """ Returns a list of FASTFarm sensors that are used for the radial distribution + of quantities (e.g. Ct, Wake Deficits). + If `signals` is provided, the output is the list of sensors within the list `signals`. + """ + WT = np.arange(nWT) + r = np.arange(nR) + D = np.arange(nD) + sens=[] + sens+=['CtT{:d}N{:02d}_[-]'.format(i+1,j+1) for i in WT for j in r] + sens+=['WkDfVxT{:d}N{:02d}D{:d}_[m/s]'.format(i+1,j+1,k+1) for i in WT for j in r for k in D] + sens+=['WkDfVrT{:d}N{:02d}D{:d}_[m/s]'.format(i+1,j+1,k+1) for i in WT for j in r for k in D] + if signals is not None: + sens = [c for c in sens if c in signals] + return sens + +def SensorsFARMDiam(nWT,nD): + """ Returns a list of FASTFarm sensors that contain quantities at different downstream diameters + (e.g. WkAxs, WkPos, WkVel, WkDiam) + If `signals` is provided, the output is the list of sensors within the list `signals`. + """ + WT = np.arange(nWT) + D = np.arange(nD) + XYZ = ['X','Y','Z'] + sens=[] + sens+=['WkAxs{}T{:d}D{:d}_[-]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] + sens+=['WkPos{}T{:d}D{:d}_[m]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] + sens+=['WkVel{}T{:d}D{:d}_[m/s]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] + sens+=['WkDiam{}T{:d}D{:d}_[m]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] + if signals is not None: + sens = [c for c in sens if c in signals] + return sens + + +def extractFFRadialData(fastfarm_out,fastfarm_input,avgMethod='constantwindow',avgParam=30,D=1,df=None): + # LEGACY + return spanwisePostProFF(fastfarm_input,avgMethod=avgMethod,avgParam=avgParam,D=D,df=df,fastfarm_out=fastfarm_out) + + +def spanwisePostProFF(fastfarm_input,avgMethod='constantwindow',avgParam=30,D=1,df=None,fastfarm_out=None): + """ + Opens a FASTFarm output file, extract the radial data, average them and returns spanwise data + + D: diameter TODO, extract it from the main file + + See faslibt.averageDF for `avgMethod` and `avgParam`. + """ + # --- Opening ouputfile + if df is None: + df=FASTOutputFile(fastfarm_out).toDataFrame() + + # --- Opening input file and extracting inportant variables + if fastfarm_input is None: + # We don't have an input file, guess numbers of turbine, diameters, Nodes... + cols, sIdx = fastlib.find_matching_pattern(df.columns.values, r'T(\d+)') + nWT = np.array(sIdx).astype(int).max() + cols, sIdx = fastlib.find_matching_pattern(df.columns.values, r'D(\d+)') + nD = np.array(sIdx).astype(int).max() + cols, sIdx = fastlib.find_matching_pattern(df.columns.values, r'N(\d+)') + nr = np.array(sIdx).astype(int).max() + vr=None + vD=None + D=0 + main = None + else: + main=FASTInputFile(fastfarm_input) + iOut = main['OutRadii'] + dr = main['dr'] # Radial increment of radial finite-difference grid (m) + OutDist = main['OutDist'] # List of downstream distances for wake output for an individual rotor + WT = main['WindTurbines'] + nWT = len(WT) + vr = dr*np.array(iOut) + vD = np.array(OutDist) + nr=len(iOut) + nD=len(vD) + + + # --- Extracting time series of radial data only + colRadial = SensorsFARMRadial(nWT=nWT,nD=nD,nR=nr,signals=df.columns.values) + colRadial=['Time_[s]']+colRadial + dfRadialTime = df[colRadial] # TODO try to do some magic with it, display it with a slider + + # --- Averaging data + dfAvg = fastlib.averageDF(df,avgMethod=avgMethod,avgParam=avgParam) + + # --- Extract radial data + ColsInfo, nrMax = spanwiseColFastFarm(df.columns.values, nWT=nWT, nD=nD) + dfRad = fastlib.extract_spanwise_data(ColsInfo, nrMax, df=None, ts=dfAvg.iloc[0]) + #dfRad = fastlib.insert_radial_columns(dfRad, vr) + if dfRad is not None: + dfRad.insert(0, 'i_[#]', np.arange(nrMax)+1) # For all, to ease comparison + if vr is not None: + dfRad.insert(0, 'r_[m]', vr[:nrMax]) # give priority to r_[m] when available + dfRad['i/n_[-]']=np.arange(nrMax)/nrMax + + # --- Extract downstream data + ColsInfo, nDMax = diameterwiseColFastFarm(df.columns.values, nWT=nWT) + dfDiam = fastlib.extract_spanwise_data(ColsInfo, nDMax, df=None, ts=dfAvg.iloc[0]) + if dfDiam is not None: + dfDiam.insert(0, 'i_[#]', np.arange(nDMax)+1) # For all, to ease comparison + if vD is not None: + dfDiam.insert(0, 'x_[m]', vD[:nDMax]) + dfDiam['i/n_[-]'] = np.arange(nDMax)/nDMax + return dfRad, dfRadialTime, dfDiam + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py new file mode 100644 index 0000000000..1c5f9b4fef --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py @@ -0,0 +1,33 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[A-Za-z][_-a-zA-Z0-9]*.py')) + import matplotlib.pyplot as plt + print('\n--------------------------------------------------------------') + for f in files: + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + plt.close('all') + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py new file mode 100644 index 0000000000..e8a7c9317c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py @@ -0,0 +1,79 @@ +import unittest +import os +import numpy as np + +from pyFAST.fastfarm import * + +MyDir=os.path.dirname(__file__) + +class Test(unittest.TestCase): + + def test_box_extent(self): + # Test the turbulence box extent function + + # --- TurbSim Box paarameters + yBox = np.arange(-187.5,188 ,5 ) + zBox = np.arange(1 ,282 ,5 ) + tBox = np.arange(0 ,4.901,0.1) + meanU = 5.968230471458111 + # --- Parameters for TurbSim Extent + D = 77.0 # Turbine diameter (m) + hubHeight = 78.045 # Hub Height (m) + extent_X_high = 1.2 # x-extent of high res box in diamter around turbine location + extent_Y_high = 1.2 # y-extent of high res box in diamter around turbine location + chord_max = 5 # maximum blade chord (m). Turbine specific. + Cmeander = 1.9 # Meandering constant (-) + # --- Layout + xWT = [0.0, 265.] # x positions of turbines + yWT = [0.0, 50.0] # y postitions of turbines + zWT = [0.0, 0.0 ] # z postitions of turbines + + # --- Determine Box extent for FAST>Farm + FFTS = fastFarmBoxExtent(yBox, zBox, tBox, meanU, hubHeight, D, xWT, yWT, Cmeander=Cmeander, chord_max=chord_max, extent_X=extent_X_high, extent_YZ=extent_Y_high) + + # --- Test values + #print(FFTS) + np.testing.assert_almost_equal(FFTS['DT_Low'] , 2.4 , 5) + np.testing.assert_almost_equal(FFTS['DT_High'] , 0.1 , 5) + np.testing.assert_almost_equal(FFTS['NX_Low'] , 196 , 5) + np.testing.assert_almost_equal(FFTS['NY_Low'] , 75 , 5) + np.testing.assert_almost_equal(FFTS['NZ_Low'] , 56 , 5) + np.testing.assert_almost_equal(FFTS['X0_Low'] ,-51 , 5) + np.testing.assert_almost_equal(FFTS['Y0_Low'] ,-188 , 5) + np.testing.assert_almost_equal(FFTS['Z0_Low'] , 1 , 5) + np.testing.assert_almost_equal(FFTS['dX_Low'] , 4.7746 , 5) + np.testing.assert_almost_equal(FFTS['dY_Low'] , 5.0 , 5) + np.testing.assert_almost_equal(FFTS['dZ_Low'] , 5.0 , 5) + np.testing.assert_almost_equal(FFTS['NX_High'] , 20 , 5) + np.testing.assert_almost_equal(FFTS['NY_High'] , 19 , 5) + np.testing.assert_almost_equal(FFTS['NZ_High'] , 25 , 5) + np.testing.assert_almost_equal(FFTS['dX_High'] , 4.7746, 5) + np.testing.assert_almost_equal(FFTS['dY_High'] , 5 , 5) + np.testing.assert_almost_equal(FFTS['dZ_High'] , 5 , 5) + np.testing.assert_almost_equal(FFTS['X0_High'] , [-46.2254, 216.3767], 5) + np.testing.assert_almost_equal(FFTS['Y0_High'] , [-48 , 2 ], 5) + + # --- Write Fast Farm file with layout and Low and High res extent + templateFSTF = os.path.join(MyDir, '../examples/SampleFiles/TestCase.fstf') # template file used for FastFarm input file, need to exist + outputFSTF = os.path.join(MyDir, '../examples/SampleFiles/_TestCase_mod.fstf') # new file that will be written + writeFastFarm(outputFSTF, templateFSTF, xWT, yWT, zWT, FFTS=FFTS) + #import matplotlib.pyplot as plt + #plotFastFarmSetup(outputFSTF, grid=True) + #plt.show() + + # --- Check that locations are at integer locations + X_rel = (np.array(FFTS['X0_High'])-FFTS['X0_Low'])/FFTS['dX_High'] + Y_rel = (np.array(FFTS['Y0_High'])-FFTS['Y0_Low'])/FFTS['dY_High'] + dX = X_rel - np.round(X_rel) + dY = Y_rel - np.round(Y_rel) + np.testing.assert_almost_equal(dX, [0]*len(dX), 3) + np.testing.assert_almost_equal(dY, [0]*len(dY), 3) + + + +if __name__ == '__main__': + unittest.main() + +if __name__ == '__main__': + unittest.main() + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md new file mode 100644 index 0000000000..5c6f8fd32c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md @@ -0,0 +1,63 @@ + +# Input output file readers + +This package contains readers and writers for typical files used in OpenFAST simulations: +- FAST input file (`.fst, .dat, .txt`), `Class: FASTInputFile, file: fast_input_file.py`. +- FAST output file (`.out, .outb, .elev`), `Class: FASTOutputFile, file: fast_output_file.py`. +- FAST linearization file (`.lin`), `Class: FASTLinearizationFile, file: fast_linearization_file.py`. +- FAST summary file (`.sum.yaml`), `Class: FASTSummaryFile, file: fast_summary_file.py`. +- TurbSim binary file (`.bts`), `Class: TurbSimFile, file: turbsim_file.py`. +- CSV file (`.csv, .dat, .txt`), `Class: CSVFile, file: csv_file.py`. + + +## Main architecture and interface + +A separate python file and class is used for each file format. +The classes inherit from the standard `File` class, present in the file `file.py`. + +The object returned by each class is (or behaves as) a dictionary. +The main methods are: +- `object = class()` : create an instance of a file object +- `object = class(filename)`: create an instance of a file object, and read a given file +- `object.read(filename)`: read the given file +- `object.write(filename)`: write the object to a file (may overwrite) +- `object.toDataFrame()`: attempts to convert object to a pandas DataFrame + +Additional methods may be present depending on the file format. + + +## Examples +Examples scripts are found in this [folder](examples). +Below are simple examples to get started: + + +Read an AeroDyn file, modifies some values and write the modified file: +```python +from pyFAST.input_output import FASTInputFile +filename = 'AeroDyn.dat' +f = FASTInputFile(filename) +f['TwrAero'] = True +f['AirDens'] = 1.225 +f.write('AeroDyn_Changed.dat') +``` + +Read an OpenFAST binary output file and convert it to a pandas DataFrame +```python +from pyFAST.input_output import FASTOutputFile +df = FASTOutputFile('5MW.outb').toDataFrame() +time = df['Time_[s]'] +Omega = df['RotSpeed_[rpm]'] +``` + +Read a TurbSim binary file +```python +from pyFAST.input_output import TurbSimFile +ts = TurbSimFile('Turb.bts') +print(ts.keys()) +print(ts['u'].shape) +``` +For more examples on how to manipulate TurbSim files see +see [examples](examples/Example_TurbSimBox.py) + +TurbSim input file processing (file modification, run and result export) +see [examples](examples/Example_TurbSim_Processing.py). diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py new file mode 100644 index 0000000000..b86f3a63c1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py @@ -0,0 +1,307 @@ +# --- Making main readers available +from .csv_file import CSVFile +from .excel_file import ExcelFile +from .fast_input_deck import FASTInputDeck +from .fast_input_file import FASTInputFile +from .fast_linearization_file import FASTLinearizationFile +from .fast_output_file import FASTOutputFile +from .fast_summary_file import FASTSummaryFile +from .fast_wind_file import FASTWndFile +# from .bmodes_out_file import BModesOutFile +from .hawc2_pc_file import HAWC2PCFile +from .hawc2_ae_file import HAWC2AEFile +from .hawc2_dat_file import HAWC2DatFile +from .hawc2_htc_file import HAWC2HTCFile +from .hawc2_st_file import HAWC2StFile +# from .hawcstab2_pwr_file import HAWCStab2PwrFile +# from .hawcstab2_ind_file import HAWCStab2IndFile +# from .hawcstab2_cmb_file import HAWCStab2CmbFile +from .mannbox_file import MannBoxFile +# from .flex_blade_file import FLEXBladeFile +# from .flex_profile_file import FLEXProfileFile +# from .flex_out_file import FLEXOutFile +# from .flex_doc_file import FLEXDocFile +# from .flex_wavekin_file import FLEXWaveKinFile +# from .turbsim_ts_file import TurbSimTSFile +from .turbsim_file import TurbSimFile +# from .netcdf_file import NetCDFFile +# from .tdms_file import TDMSFile +# from .tecplot_file import TecplotFile +from .vtk_file import VTKFile +# from .bladed_out_file import BladedFile +# from .parquet_file import ParquetFile +# from .cactus_file import CactusFile +# from .rosco_performance_file import ROSCOPerformanceFile +from .raawmat_file import RAAWMatFile + + +# --- Generic reader / fileformat detection +from .file import File, WrongFormatError, BrokenFormatError, FileNotFoundError, EmptyFileError, OptionalImportError +from .file_formats import FileFormat, isRightFormat +import sys +import os +import numpy as np + +class FormatNotDetectedError(Exception): + pass + +class UserFormatImportError(Exception): + pass + + +_FORMATS=None + +def fileFormats(userpath=None, ignoreErrors=False, verbose=False): + """ return list of fileformats supported by the library + If userpath is provided, + + OUTPUTS: + if ignoreErrors is True: + formats, errors + else: + formats + + """ + global _FORMATS + errors=[] + if _FORMATS is not None: + if ignoreErrors: + return _FORMATS, errors + else: + return _FORMATS + # --- Library formats + from .fast_input_file import FASTInputFile + from .fast_output_file import FASTOutputFile + from .csv_file import CSVFile + from .fast_wind_file import FASTWndFile + from .fast_linearization_file import FASTLinearizationFile + from .fast_summary_file import FASTSummaryFile + from .bmodes_out_file import BModesOutFile + from .hawc2_pc_file import HAWC2PCFile + from .hawc2_ae_file import HAWC2AEFile + from .hawc2_dat_file import HAWC2DatFile + from .hawc2_htc_file import HAWC2HTCFile + from .hawc2_st_file import HAWC2StFile + from .hawcstab2_pwr_file import HAWCStab2PwrFile + from .hawcstab2_ind_file import HAWCStab2IndFile + from .hawcstab2_cmb_file import HAWCStab2CmbFile + from .mannbox_file import MannBoxFile + from .flex_blade_file import FLEXBladeFile + from .flex_profile_file import FLEXProfileFile + from .flex_out_file import FLEXOutFile + from .flex_doc_file import FLEXDocFile + from .flex_wavekin_file import FLEXWaveKinFile + from .excel_file import ExcelFile + from .turbsim_ts_file import TurbSimTSFile + from .turbsim_file import TurbSimFile + from .netcdf_file import NetCDFFile + from .tdms_file import TDMSFile + from .tecplot_file import TecplotFile + from .vtk_file import VTKFile + from .bladed_out_file import BladedFile + from .parquet_file import ParquetFile + from .pickle_file import PickleFile + from .cactus_file import CactusFile + from .raawmat_file import RAAWMatFile + from .rosco_discon_file import ROSCODISCONFile + from .rosco_performance_file import ROSCOPerformanceFile + priorities = [] + formats = [] + def addFormat(priority, fmt): + priorities.append(priority) + formats.append(fmt) + addFormat(0, FileFormat(CSVFile)) + addFormat(0, FileFormat(ExcelFile)) + addFormat(10, FileFormat(TecplotFile)) + addFormat(10, FileFormat(BladedFile)) + addFormat(20, FileFormat(FASTInputFile)) + addFormat(20, FileFormat(FASTOutputFile)) + addFormat(20, FileFormat(FASTWndFile)) + addFormat(20, FileFormat(FASTLinearizationFile)) + addFormat(20, FileFormat(FASTSummaryFile)) + addFormat(20, FileFormat(TurbSimTSFile)) + addFormat(20, FileFormat(TurbSimFile)) + addFormat(30, FileFormat(HAWC2DatFile)) + addFormat(30, FileFormat(HAWC2HTCFile)) + addFormat(30, FileFormat(HAWC2StFile)) + addFormat(30, FileFormat(HAWC2PCFile)) + addFormat(30, FileFormat(HAWC2AEFile)) + addFormat(30, FileFormat(HAWCStab2PwrFile)) + addFormat(30, FileFormat(HAWCStab2IndFile)) + addFormat(30, FileFormat(HAWCStab2CmbFile)) + addFormat(30, FileFormat(MannBoxFile)) + addFormat(40, FileFormat(FLEXBladeFile)) + addFormat(40, FileFormat(FLEXProfileFile)) + addFormat(40, FileFormat(FLEXOutFile)) + addFormat(40, FileFormat(FLEXWaveKinFile)) + addFormat(40, FileFormat(FLEXDocFile)) + addFormat(50, FileFormat(BModesOutFile)) + addFormat(50, FileFormat(ROSCODISCONFile)) + addFormat(50, FileFormat(ROSCOPerformanceFile)) + addFormat(60, FileFormat(NetCDFFile)) + addFormat(60, FileFormat(VTKFile)) + addFormat(60, FileFormat(TDMSFile)) + addFormat(60, FileFormat(ParquetFile)) + addFormat(60, FileFormat(PickleFile)) + addFormat(70, FileFormat(CactusFile)) + addFormat(70, FileFormat(RAAWMatFile)) + + # --- User defined formats from user path + UserClasses, UserPaths, UserModules, UserModuleNames, errors = userFileClasses(userpath, ignoreErrors, verbose=verbose) + for cls, f in zip(UserClasses, UserPaths): + try: + ff = FileFormat(cls) + except Exception as e: + s='Error registering a user fileformat.\n\nThe module location was: {}\n\nThe class name was: {}\n\nMake sure the class has `defaultExtensions` and `formatName` as static methods.\n\nThe exception was:\n{}'.format(f, cls.__name__, e) + if ignoreErrors: + errors.append(s) + continue + else: + raise UserFormatImportError(s) + # Use class.priority + try: + priority = cls.priority() + except: + priority=2 + addFormat(priority, ff) + + # --- Sort fileformats by priorities + formats = np.asarray(formats)[np.argsort(priorities, kind='stable')] + + _FORMATS=formats + if ignoreErrors: + return formats, errors + else: + return formats + + + +def userFileClasses(userpath=None, ignoreErrors=False, verbose=True): + """ return list of user file class in UserData folder""" + if userpath is None: + dataDir = defaultUserDataDir() + userpath = os.path.join(dataDir, 'weio') + errors = [] + UserClasses = [] + UserPaths = [] + UserModules = [] + UserModuleNames = [] + if os.path.exists(userpath): + if verbose: + print('>>> Looking for user modules in folder:',userpath) + import glob + from importlib.machinery import SourceFileLoader + import inspect + pyfiles = glob.glob(os.path.join(userpath,'*.py')) + # Loop through files, look for classes of the form ClassNameFile, + for f in pyfiles: + if f in ['__init__.py']: + continue + mod_name = os.path.basename(os.path.splitext(f)[0]) + try: + if verbose: + print('>>> Trying to load user module:',f) + module = SourceFileLoader(mod_name,f).load_module() + except Exception as e: + s='Error importing a user module.\n\nThe module location was: {}\n\nTry importing this module to debug it.\n\nThe Exception was:\n{}'.format(f, e) + if ignoreErrors: + errors.append(s) + continue + else: + raise UserFormatImportError(s) + found=False + for name, obj in inspect.getmembers(module): + if inspect.isclass(obj): + classname = obj.__name__.lower() + if classname!='file' and classname.find('file')>=0 and classname.find('error')<0: + if verbose: + print(' Found File class with name:',obj.__name__) + UserClasses.append(obj) + UserPaths.append(f) + UserModules.append(module) + UserModuleNames.append(mod_name) + found=True # allowing only one class per file for now.. + break + if not found: + s='Error finding a class named "*File" in the user module.\n\nThe module location was: {}\n\nNo class containing the string "File" in its name was found.'.format(f) + if ignoreErrors: + errors.append(s) + else: + raise UserFormatImportError(s) + return UserClasses, UserPaths, UserModules, UserModuleNames, errors + + +def defaultUserDataDir(): + """ + Returns a parent directory path + where persistent application data can be stored. + # linux: ~/.local/share + # macOS: ~/Library/Application Support + # windows: C:/Users//AppData/Roaming + """ + home = os.path.expanduser('~') + ptfm = sys.platform + if ptfm == "win32": + return os.path.join(home , 'AppData','Roaming') + elif ptfm.startswith("linux"): + return os.path.join(home, '.local', 'share') + elif ptfm == "darwin": + return os.path.join(home, 'Library','Application Support') + else: + print('>>>>>>>>>>>>>>>>> Unknown Platform', sys.platform) + return './UserData' + + + +def detectFormat(filename, **kwargs): + """ Detect the file formats by looping through the known list. + The method may simply try to open the file, if that's the case + the read file is returned. """ + import os + import re + global _FORMATS + if _FORMATS is None: + formats=fileFormats() + else: + formats=_FORMATS + ext = os.path.splitext(filename.lower())[1] + detected = False + i = 0 + while not detected and i0: + extPatMatch = [re.match(pat, ext) is not None for pat in extPatterns] + extMatch = any(extPatMatch) + else: + extMatch = False + if extMatch: # we have a match on the extension + valid, F = isRightFormat(myformat, filename, **kwargs) + if valid: + #print('File detected as :',myformat) + detected=True + return myformat,F + + i += 1 + + if not detected: + raise FormatNotDetectedError('The file format could not be detected for the file: '+filename) + +def read(filename, fileformat=None, **kwargs): + F = None + if not os.path.exists(filename): + raise FileNotFoundError('weio cannot read the following file because it does not exist:\n Inp. path: {}\n Abs. path: {}'.format(filename, os.path.abspath(filename))) + # Detecting format if necessary + if fileformat is None: + fileformat,F = detectFormat(filename, **kwargs) + # Reading the file with the appropriate class if necessary + if not isinstance(F, fileformat.constructor): + F=fileformat.constructor(filename=filename) + return F + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py new file mode 100644 index 0000000000..c492779068 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py @@ -0,0 +1,125 @@ +"""Read AMR-Wind NETCDF file + +""" +import xarray as xr +import numpy as np + +class AMRWindFile(dict): + """ + Read a AMR-Wind output file (.nc) + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.nc'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'NetCDF plane sampling file from AMRWind' + + @staticmethod + def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low + + def __init__(self, filename=None, timestep=None, output_frequency=None, **kwargs): + self.filename = filename + self.amrwind_dt = timestep + self.output_dt = timestep * output_frequency + + if filename: + self.read(**kwargs) + + def read(self, group_name): + """ + Parameters + ---------- + + group_name : str, + group name inside netcdf file that you want to read, e.g. p_slice + + TODO: see if group_name can be avoided, and add a read_group function + """ + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise Exception('File is empty:',self.filename) + + + ds = xr.open_dataset(self.filename,group=group_name) + + coordinates = {"x":(0,"axial"), "y":(1,"lateral"),"z":(2,"vertical")} + c = {} + for coordinate,(i,desc) in coordinates.items(): + c[coordinate] = xr.IndexVariable( + dims=[coordinate], + data=np.sort(np.unique(ds['coordinates'].isel(ndim=i))), + attrs={"description":"{0} coordinate".format(desc),"units":"m"} + ) + c["t"] = xr.IndexVariable( + dims=["t"], + data=ds.num_time_steps*self.output_dt, + attrs={"description":"time from start of simulation","units":"s"} + ) + + self.nt = len(c["t"]) + self.nx = len(c["x"]) + self.ny = len(c["y"]) + self.nz = len(c["z"]) + + coordinates = {"x":(0,"axial","u"), "y":(1,"lateral","v"),"z":(2,"vertical","w")} + v = {} + for coordinate,(i,desc,u) in coordinates.items(): + v[u] = xr.DataArray(np.reshape(getattr(ds,"velocity{0}".format(coordinate)).values,(self.nt,self.nx,self.ny,self.nz)), + coords=c, + dims=["t","x","y","z"], + name="{0} velocity".format(desc), + attrs={"description":"velocity along {0}".format(coordinate),"units":"m/s"}) + + ds = xr.Dataset(data_vars=v, coords=v[u].coords) + ds.attrs = {"original file":self.filename} + + self.data = ds + + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + raise NotImplementedError() + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + # --- Example (returning one DataFrame): + # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) + # --- Example (returning dict of DataFrames): + #dfs={} + #cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] + #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) + #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) + # return dfs + raise NotImplementedError() + + # --- Optional functions + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + #s+='|Main keys:\n' + #s+='| - ID: {}\n'.format(self['ID']) + #s+='| - data : shape {}\n'.format(self['data'].shape) + s+='|Main methods:\n' + s+='| - read, write, toDataFrame, keys' + return s + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py new file mode 100644 index 0000000000..d1f0dcd1d2 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py @@ -0,0 +1,398 @@ +import os +import numpy as np +import re +import pandas as pd +import glob +import shlex +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + + +# --------------------------------------------------------------------------------} +# --- Helper functions +# --------------------------------------------------------------------------------{ +def read_bladed_sensor_file(sensorfile): + """ + Extract relevant informations from a bladed sensor file + """ + with open(sensorfile, 'r') as fid: + sensorLines = fid.readlines() + + dat=dict() # relevant info in sensor file + + ## read sensor file line by line (just read up to line 20) + #while i < 17: + for i, t_line in enumerate(sensorLines): + if i>30: + break + t_line = t_line.replace('\t',' ') + + if t_line.startswith('NDIMENS'): + # check what is matrix dimension of the file. For blade & tower, + # the matrix is 3-dimensional. + temp = t_line[7:].strip().split() + dat['NDIMENS'] = int(temp[-1]); + + elif t_line.startswith('DIMENS'): + # check what is the size of the matrix + # for example, it can be 11x52500 or 12x4x52500 + temp = t_line[6:].strip().split() + dat['nSensors'] = int(temp[0]) + dat['nMajor'] = int(temp[dat['NDIMENS']-1]) + if dat['NDIMENS'] == 2: + dat['nSections'] = 1 + dat['SectionList'] = [] + + elif t_line.startswith('FORMAT'): + # precision: n/a, R*4, R*8, I*4 + temp = t_line[7:].strip() + dat['Precision'] = np.float32 + if temp[-1] == '8': + dat['Precision'] = np.float64 + + elif t_line.startswith('GENLAB'): + # category of the file you are reading: + dat['category'] = t_line[6:].strip().replace('\'','') + + elif t_line.startswith('AXIVAL'): + # Section on the 3rd dimension you are reading + # sometimes, the info is written on "AXITICK" + temp = t_line[7:].split() + dat['SectionList'] = np.array(temp, dtype=float) + dat['nSections'] = len(dat['SectionList']) + + elif t_line.startswith('AXITICK'): + # Section on the 3rd dimension you are reading + # sometimes, the info is written on "AXIVAL" + # Check next line, we concatenate if doesnt start with AXISLAB (Might need more cases) + try: + # Combine the strings into one string + combined_string = ''.join(sensorLines) + + # Search everything betwee AXITICK and AXISLAB with a regex pattern + t_line = re.search(r'(?<=AXITICK).+?(?=AXISLAB)', combined_string, flags=re.DOTALL) + t_line=t_line.group(0) + # Replace consecutive whitespace characters with a single space + t_line = re.sub(r'\s+', ' ', t_line) + except: + pass + + temp = t_line.strip() + temp = temp.strip('\'').split('\' \'') + dat['SectionList'] = np.array(temp, dtype=str) + dat['nSections'] = len(dat['SectionList']) + + elif t_line.startswith('VARIAB'): + # channel names, NOTE: either quoted, non-quoted, and a mix of both + # Check next line, we concatenate if doesnt start with AXISLAB (Might need more cases) + try: + nextLine=sensorLines[i+1].strip() + if not nextLine.startswith('VARUNIT'): + t_line = t_line.strip()+' '+nextLine + except: + pass + dat['ChannelName'] = shlex.split(t_line[6:]) + + elif t_line.startswith('VARUNIT'): + # channel units: + # Check next line, we concatenate if doesnt start with AXISLAB (Might need more cases) + try: + nextLine=sensorLines[i+1].strip() + if not nextLine.startswith('AXISLAB'): + t_line = t_line.strip()+' '+nextLine + except: + pass + def repUnits(s): + s = s.replace('TT','s^2').replace('T','s').replace('A','rad') + s = s.replace('P','W').replace('L','m').replace('F','N').replace('M','kg') + return s + dat['ChannelUnit']=[repUnits(s) for s in shlex.split(t_line[7:].strip())] + + elif t_line.startswith('MIN '): + dat['MIN'] = float(t_line[3:].strip()) # Start time? + + elif t_line.startswith('STEP'): + dat['STEP'] = float(t_line[4:].strip()) # DT? + + + NeededKeys=['ChannelName','nSensors','nMajor','nSections'] + if not all(key in dat.keys() for key in NeededKeys): + raise BrokenFormatError('Broken or unsupported format. Some necessary keys where not found in the bladed sensor file: {}'.format(sensorfile)) + + if len(dat['ChannelName']) != dat['nSensors']: + raise BrokenFormatError('Broken or unsupported format. Wrong number of channels while reading bladed sensor file: {}'.format(sensorfile)) + # if number of channel names are not matching with Sensor number then create dummy ones: + #dat['ChannelName'] = ['Channel' + str(ss) for ss in range(dat['nSensors'])] + + + return dat + +def OrgData(data, **info): + """ Flatten 3D field into 2D table""" + # since some of the matrices are 3 dimensional, we want to make all + # to 2d matrix, so I am organizing them here: + if info['NDIMENS'] == 3: + SName = [] + SUnit = [] + dataOut = np.zeros( (info['nMajor'],len(info['SectionList'])*len(info['ChannelName'])) ) + + col_vec = -1 + for isec,sec in enumerate(info['SectionList']): + for ichan,(chan,unit) in enumerate(zip(info['ChannelName'], info['ChannelUnit'])): + try: + SName.append(str(np.around(float(sec),2)) + 'm-' + chan) + except ValueError: + SName.append(str(sec) + '-' + chan) + SUnit.append(unit) + col_vec +=1 + dataOut[:,col_vec] = data[:,isec,ichan] + + data = dataOut + info['ChannelName'] = SName + info['ChannelUnit'] = SUnit + else: + pass # Nothing to do for 2D + + return data, info + + + +def read_bladed_output(sensorFilename, readTimeFilesOnly=False): + """ + read a bladed sensor file and data file, reorganize a 3D file into 2D table + """ + # --- Read sensor file and extract relevant informations + sensorInfo = read_bladed_sensor_file(sensorFilename) + nSensors = sensorInfo['nSensors'] + nMajor = sensorInfo['nMajor'] + nSections = sensorInfo['nSections'] + hasTime = 'MIN' and 'STEP' in sensorInfo.keys() + # --- Return if caller only wants time series + if readTimeFilesOnly and not hasTime: + return [], {} + + # --- Read data file + dataFilename = sensorFilename.replace('%','$') + + if isBinary(dataFilename): # it is binary + + with open(os.path.join(dataFilename), 'rb') as fid_2: + data = np.fromfile(fid_2, sensorInfo['Precision']) + + try: + if sensorInfo['NDIMENS'] == 3: + data = np.reshape(data,(nMajor, nSections, nSensors), order='C') + + elif sensorInfo['NDIMENS'] == 2: + data = np.reshape(data,(nMajor,nSensors), order='C') + except: + print('>>> Failed to reshape binary file {}'.format(dataFilename)) + raise + + + else: + #print('it is ascii', NDIMENS) + if sensorInfo['NDIMENS'] == 2: + try: + # Data is stored as time, signal, we reshape to signal, time + data = np.loadtxt(dataFilename) + except ValueError as e: + # Most likely this was a binary file... + data = np.empty((nMajor, nSensors)) * np.nan + print('>>> Value error while reading 2d ascii file: {}'.format(dataFilename)) + raise e + except: + data = np.empty((nMajor, nSensors)) * np.nan + print('>>> Failed to read 2d ascii file: {}'.format(dataFilename)) + raise + + + elif sensorInfo['NDIMENS'] == 3: + try: + # Data is stored as sections, time, signal, we reshape to signal, section, time + data = np.loadtxt(dataFilename).reshape((nMajor, nSections, nSensors),order='C') + except: + data = np.empty((nMajor, nSections, nSensors)) * np.nan + print('>>> Failed to read 3d ascii file: {}'.format(dataFilename)) + + return OrgData(data, **sensorInfo) + + +class BladedFile(File): + r""" + Read a Bladed out put file (current version is only binary files) + + Main methods: + read: it finds all % and $ files based on selected .$PJ file and calls "DataValue" to read data from all those files + toDataFrame: create Pandas dataframe output + + Main data stored: + self.dataSets: dictionary of datasets, for each "length" of data + + example: + filename = r'h:\004_Loads\Sim\Bladed\003\Ramp_up\Bladed_out_ascii.$04' + f = BladedFile(filename) + print(f.dataSets.keys()) + df = f.toDataFrame() + + """ + @staticmethod + def defaultExtensions(): + return ['.%*', '.$*'] + + @staticmethod + def formatName(): + return 'Bladed output file' + + def __init__(self, filename=None, **kwargs): + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ read self, or read filename if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # Calling children function + self._read(**kwargs) + + def _read(self): + """ + Read a bladed output file, data are in *.$II and sensors in *%II. + - If the file is a *$PJ file, all output files are read + - Otherwise only the current file is read + """ + + basename, ext = os.path.splitext(self.filename) + if ext.lower()=='.$pj': + readTimeFilesOnly=True + searchPattern = basename + '.%[0-9][0-9]*' # find all files in the folder + else: + readTimeFilesOnly=False + searchPattern = basename + ext.replace('$','%') # sensor file name + + # Look for files matching pattern + files = glob.glob(searchPattern) + + # We'll store the data in "dataSets",dictionaries + dataSets={} + + if len(files)==0: + e= FileNotFoundError(searchPattern) + e.filename=(searchPattern) + raise e + elif len(files)==1: + readTimeFilesOnly=False + + files.sort() + + for i,filename in enumerate(files): + + dataFilename = filename.replace('%','$') + try: + # Call "Read_bladed_file" function to Read and store data: + data, info = read_bladed_output(filename, readTimeFilesOnly=readTimeFilesOnly) + except FileNotFoundError as e: + print('>>> Missing datafile: {}'.format(e.filename)) + if len(files)==1: + raise e + continue + except ValueError as e: + print('>>> ValueError while reading: {}'.format(dataFilename)) + if len(files)==1: + raise e + continue + except: + raise + print('>>> Misc error while reading: {}'.format(dataFilename)) + if len(files)==1: + raise + continue + if len(data)==0: + print('>>> Skipping file since no time present {}'.format(filename)) + continue + + # we use number of data as key, but we'll use "name" later + key = info['nMajor'] + + if key in dataSets.keys(): + # dataset with this length are already present, we concatenate + dset = dataSets[key] + dset['data'] = np.column_stack((dset['data'], data)) + dset['sensors'] += info['ChannelName'] + dset['units'] += info['ChannelUnit'] + dset['name'] = 'Misc_'+str(key) + + else: + # We add a new dataset for this length + dataSets[key] = {} + dset = dataSets[key] + # We force a time vector when possible + if 'MIN' and 'STEP' in info.keys(): + time = np.arange(info['nMajor'])*info['STEP'] + info['MIN'] + data = np.column_stack((time, data)) + info['ChannelName'].insert(0, 'Time') + info['ChannelUnit'].insert(0, 's') + + dset['data'] = data + dset['sensors'] = info['ChannelName'] + dset['units'] = info['ChannelUnit'] + dset['name'] = info['category'] + + # Check if we have "many" misc, if only one, replace by "Misc" + keyMisc = [k for k,v in dataSets.items() if v['name'].startswith('Misc_')] + if len(keyMisc)==1: + #dataSets[keyMisc[0]]['name']='Misc' + # We keep only one dataset for simplicity + self.dataSets= {'Misc': dataSets[keyMisc[0]]} + else: + # Instead of using nMajor as key, we use the "name" + self.dataSets= {v['name']: v for (k, v) in dataSets.items()} + + + def toDataFrame(self): + dfs={} + for k,dset in self.dataSets.items(): + BL_ChannelUnit = [ name+' ['+unit+']' for name,unit in zip(dset['sensors'],dset['units'])] + df = pd.DataFrame(data=dset['data'], columns=BL_ChannelUnit) + # remove duplicate columns + df = df.loc[:,~df.columns.duplicated()] + df.columns.name = k # hack for pyDatView when one dataframe is returned + dfs[k] = df + if len(dfs)==1: + return dfs[next(iter(dfs))] + else: + return dfs + + +def isBinary(filename): + with open(filename, 'r') as f: + try: + # first try to read as string + l = f.readline() + # then look for weird characters + for c in l: + code = ord(c) + if code<10 or (code>14 and code<31): + return True + return False + except UnicodeDecodeError: + return True + +if __name__ == '__main__': + pass + #filename = r'E:\Work_Google Drive\Bladed_Sims\Bladed_out_binary.$41' + #Output = BladedFile(filename) + #df = Output.toDataFrame() + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py new file mode 100644 index 0000000000..7d99546750 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py @@ -0,0 +1,152 @@ +""" +Input/output class for the BModes output files +""" +import numpy as np +import pandas as pd +import os + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File=dict + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + +class BModesOutFile(File): + """ + Read/write a BModes output file. The object behaves as a dictionary. + + Main methods + ------------ + - read, write, toDataFrame, keys + + Examples + -------- + f = BModesOutFile('file.out') + print(f.keys()) + print(f.toDataFrame().columns) + + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.out'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'BModes output file' + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # --- Calling (children) function to read + self._read(**kwargs) + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + # Calling (children) function to write + self._write() + + def _read(self): + """ Reads self.filename and stores data into self. Self is (or behaves like) a dictionary""" + # --- Example: + #self['data']=[] + #with open(self.filename, 'r', errors="surrogateescape") as f: + # for i, line in enumerate(f): + # self['data'].append(line) + + with open(self.filename) as f: + self['frequencies'] = [] + self['mode_shapes'] = [] + row_string = f.readline() + if row_string.find('BModes')<0: + raise WrongFormatError('This file was not generated by BModes, "BModes" is not found on first line') + while row_string: + row_string = f.readline() + freq_id = row_string.find('freq = ') + if freq_id > 0: + self['frequencies'].append(float(row_string[freq_id+7:freq_id+19])) + f.readline() + f.readline() + f.readline() + data=[] + while True: + row_data = f.readline() + if len(row_data.strip())==0 or row_data.find('===')==0: + break + else: + data.append(row_data.split()) + self['mode_shapes'].append(np.asarray(data).astype(float)) + + def _write(self): + """ Writes to self.filename""" + # --- Example: + #with open(self.filename,'w') as f: + # f.write(self.toString) + raise NotImplementedError() + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + dfs={} + cols =['span_loc','s-s disp','s-s slope','f-a disp','f-a slope','twist'] + for iMode,mode in enumerate(self['mode_shapes']): + dfs['Mode_{}'.format(iMode+1)]= pd.DataFrame(data=mode,columns=cols) + return dfs + + # --- Optional functions + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + s+='|Main keys:\n' + s+='| - frequencies: {}\n'.format(self['frequencies']) + s+='| - mode_shapes : {} shapes of shape {}x{}\n'.format(len(self['mode_shapes']), *self['mode_shapes'][0].shape) + s+='|Main methods:\n' + s+='| - read, write, toDataFrame, keys' + return s + + def _get_modal_coefficients(x, y, deg=[2, 3, 4, 5, 6]): + # Normalize x input + xn = (x - x.min()) / (x.max() - x.min()) + # Get coefficients to 6th order polynomial + p6 = np.polynomial.polynomial.polyfit(xn, y, deg) + return p6 + + def _identify(self): + """ identify modes""" + pass + + + +if __name__ == '__main__': + f = BModesOutFile('tests/example_files/BModesOut.out') + df = f.toDataFrame() + print(f) + print(df) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py new file mode 100644 index 0000000000..08e7fbf126 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py @@ -0,0 +1,107 @@ +import numpy as np +import pandas as pd +import os + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + File=dict + +class CactusElementFile(File): + + @staticmethod + def defaultExtensions(): + return ['.in'] + + @staticmethod + def formatName(): + return 'CACTUS file' + + def __init__(self,filename=None,**kwargs): + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ read self, or read filename if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # Calling children function + self._read(**kwargs) + + def write(self, filename=None): + """ write self, or to filename if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + # Calling children function + self._write() + + def _read(self): + """ """ + import f90nml + from .csv_file import CSVFile + + filepath = self.filename + basepath = '_'.join(filepath.split('_')[:-1]) + basename = os.path.basename(basepath) + parentdir = os.path.dirname(basepath) + mainfile = parentdir[:-6]+basename+'.in' + print(basename) + print(basepath) + print(parentdir) + print(mainfile) + print(os.path.dirname(basepath)) + + + + +# elemfile= +# if len(df.columns)!=len(cols): +# print('column for rename:',cols) +# print('columns in file :',df.columns) +# print(len(df.columns)) +# print(len(cols)) +# raise Exception('Problem with number of columns') +# df.columns=cols +# +# # --- Read elem +# elemfile = f.replace('TimeData','ElementData') +# dsfile = f.replace('TimeData','DSData') +# dfElem = weio.read(elemfile).toDataFrame() + + #with open(self.filename, 'r', errors="surrogateescape") as f: + # for i, line in enumerate(f): + # data.append(line) + + def _write(self): + """ """ + with open(self.filename,'w') as f: + f.write(self.toString) + + def toDataFrame(self): + #cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] + #dfs[name] = pd.DataFrame(data=..., columns=cols) + #df=pd.DataFrame(data=,columns=) + return + + + def toString(self): + s='' + return s + + def __repr__(self): + s ='Class XXXX (attributes: data)\n' + return s + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py new file mode 100644 index 0000000000..265d0d8dc4 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py @@ -0,0 +1,386 @@ +import numpy as np +import pandas as pd +import os + +try: + from .file import File, WrongFormatError, BrokenFormatError, EmptyFileError +except: + File=dict + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + +class CactusFile(File): + + @staticmethod + def defaultExtensions(): + return ['.in'] + + @staticmethod + def formatName(): + return 'CACTUS file' + + def __init__(self,filename=None,**kwargs): + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ read self, or read filename if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # Calling children function + self._read(**kwargs) + + def write(self, filename=None): + """ write self, or to filename if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + # Calling children function + self._write() + + def _read(self): + """ """ + import f90nml + from .csv_file import CSVFile + + filepath = self.filename + basepath = os.path.splitext(filepath)[0] + basename = os.path.basename(basepath) + parentdir = os.path.dirname(basepath) + + # --- Read main input file + nml = f90nml.read(filepath) + for k in ['configinputs','caseinputs']: + self[k] = nml[k] + + # --- Try to read geometry file + arfoilfile = os.path.join(parentdir, nml['caseinputs']['afdpath']) + geomfile = os.path.join(parentdir, nml['caseinputs']['geomfilepath']) + if os.path.exists(geomfile): + with open(geomfile, 'r', errors="surrogateescape") as fid: + geom=dict() + nMax=10 + for i, line in enumerate(fid): + # remove comment + line = line.strip().split('!')[0] + sp = line.strip().split(':') + key = sp[0].strip().lower() + if len(key)>0: + strvalue = sp[1] + try: + value = np.asarray(strvalue.split()).astype(float) + if len(value)==1: + value = value[0] + except: + value = strvalue + geom[key]=value + if i==nMax: + break + self['geom']=geom + self['geom']['file']=geomfile + else: + print('[FAIL] Geom file not found (quantites will be pooorly scaled):',geomfile) + self['geom']={'nblade':1, 'refr':3.28084, 'refar':2, 'file':None} + + # --- Try to read element time data file + timefile = os.path.join(parentdir, 'output', basename+'_TimeData.csv') + if os.path.exists(timefile): + df = CSVFile(timefile).toDataFrame() + nBlades = list(df.columns).count('Blade Fx Coeff. (-)') + self['geom']['nblade'] = list(df.columns).count('Blade Fx Coeff. (-)') + cols=list(df.columns[:8]) + bldCols=['Blade{:d} Fx Coeff. (-)', 'Blade{:d} Fy Coeff. (-)', 'Blade{:d} Fz Coeff. (-)', 'Blade{:d} Torque Coeff. (-)'] + for ib in range(self['geom']['nblade']): + cols+=[b.format(ib+1) for b in bldCols] + df.columns=cols + self['dfTime']=df + + else: + self['dfTime']=None + print('TimeData file not found:',timefile) + + # --- Try to read element data file + elemfile = os.path.join(parentdir, 'output', basename+'_ElementData.csv') + if os.path.exists(elemfile): + dfElem = CSVFile(elemfile).toDataFrame() + self['dfElem'] = dfElem + else: + self['dfElem'] = None + print('ElementData file not found:',elemfile) + + + # --- Read DS file + dsfile = os.path.join(parentdir, 'output', basename+'_DSData.csv') + try: + dfDS =CSVFile(dsfile).toDataFrame() + self['dfDS'] = dfDS + except (FileNotFoundError, EmptyFileError): + self['dfDS'] = None + print('DSData file not found or empty:',dsfile) + + + @property + def omega(self): + return self['caseinputs']['rpm']*2*np.pi/60 + + @property + def TSR(self): + return self['caseinputs']['ut'] + + @property + def RPM(self): + return self['caseinputs']['rpm'] + + @property + def dt(self): + nRot = self['configinputs']['nr'] + nPerRot = self['configinputs']['nti'] + T = 2*np.pi/(self.omega) + return T/nPerRot + + @property + def R(self): + if self['geom']['file'] is not None: + R = self['geom']['refr']/3.28084 # feet to m + else: + R=1 + return R + + @property + def A(self): + # NOTE: Turbine reference area (for force/torque/power normalization) divided by reference radius squared. + if self['geom']['refar'] is not None: + #A = self['geom']['refar']/(3.28084**2) # feet^2 to m^2 + A = self['geom']['refar']*self['geom']['refr']**2 + A /=(3.28084**2) # feet^2 to m^2 + else: + A = (2*self.R)**2 # D^2 + return A + + @property + def U(self): + return self.omega*self.R/self.TSR + + + @property + def time(self): + nRot = self['configinputs']['nr'] + nPerRot = self['configinputs']['nti'] + timeSteps = np.arange(0,nRot*nPerRot) + T = 2*np.pi/(self.omega) + return timeSteps*self.dt + + + def timeDataToOpenFAST(self, df): + """ Convert to similar labels as OpenFAST""" + if df is None: + return None + nRot = self['configinputs']['nr'] + nPerRot = self['configinputs']['nti'] + TSR = self.TSR + CTExcrM = self['caseinputs']['ctexcrm'] + rho = self['caseinputs']['rho']*1.2/0.0023280000 + + time = self.time + if df.shape[0]>> Inconsistent shape, ',iB,ie) + else: + # TODO x/y/R + uix_g=dfSec['IndU (-)'].values*U + uiy_g=dfSec['IndV (-)'].values*U + uiz_g=dfSec['IndW (-)'].values*U + + uix=-(np.cos(psi)*uiz_g + np.sin(psi)*uix_g) + uiy= (np.cos(psi)*uix_g - np.sin(psi)*uiz_g) + + df.insert(c , 'AB{:d}N{:03d}Alpha_[deg]'.format(iB,ie) , alphaSign*dfSec['AOA25 (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Alpha50_[deg]'.format(iB,ie) , alphaSign*dfSec['AOA50 (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Alpha75_[deg]'.format(iB,ie) , alphaSign*dfSec['AOA75 (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Cl_[-]' .format(iB,ie) , alphaSign*dfSec['CL (-)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Cd_[-]' .format(iB,ie) , dfSec['CD (-)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Cm_[-]' .format(iB,ie) , alphaSign*dfSec['CM25 (-)'].values); c+=1 + + #BladeElemOutData(BladeElemOutRow,24)=CN ! Element normal force coefficient (per span) based on local chord and flow velocity + #BladeElemOutData(BladeElemOutRow,25)=CT ! Element tangential force coefficient (per span) based on local chord and flow velocity + df.insert(c , 'AB{:d}N{:03d}Cn_[-]' .format(iB,ie) , alphaSign*dfSec['CN (-)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Ct_[-]' .format(iB,ie) , alphaSign*dfSec['CT (-)'].values); c+=1 + # CT=-CL5*sin(alpha25)+CD5*cos(alpha25) + # CT=-CL5*sin(alpha50)+CD5*cos(alpha50) + Cl= dfSec['CL (-)'].values; Cd= dfSec['CD (-)'].values; alpha= dfSec['AOA25 (deg)'].values*np.pi/180 + df.insert(c , 'AB{:d}N{:03d}Ct2_[-]' .format(iB,ie) , alphaSign*(-Cl*np.sin(alpha) + Cd*np.cos(alpha))); c+=1 + + df.insert(c , 'AB{:d}N{:03d}Cxg_[-]' .format(iB,ie) , dfSec['Fx (-)'].values); c+=1 # TODO, this is likely coefficients related to global coords + df.insert(c , 'AB{:d}N{:03d}Cyg_[-]' .format(iB,ie) , - dfSec['Fz (-)'].values); c+=1 # TODO + df.insert(c , 'AB{:d}N{:03d}Czg_[-]' .format(iB,ie) , dfSec['Fy (-)'].values); c+=1 # TODO + df.insert(c , 'AB{:d}N{:03d}ClC_[-]' .format(iB,ie) , alphaSign*dfSec['CLCirc (-)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}Re_[-]' .format(iB,ie) , dfSec['Re (-)'].values/1e6); c+=1 + df.insert(c , 'AB{:d}N{:03d}Gam_[m^2/s]'.format(iB,ie) , alphaSign*dfSec['GB (?)'].values*U*R); c+=1 # TODO + df.insert(c , 'AB{:d}N{:03d}Vrel_[m/s]' .format(iB,ie) , dfSec['Ur (-)'].values*U); c+=1 + df.insert(c , 'AB{:d}N{:03d}Vindx_[m/s]'.format(iB,ie) , uix ); c+=1 # TODO + df.insert(c , 'AB{:d}N{:03d}Vindy_[m/s]'.format(iB,ie) , uiy ); c+=1 # TODO + + if dfDS is not None: + dfSecDS = dfBld_DS[dfBld_DS['Element']==ie] + df.insert(c , 'AB{:d}N{:03d}alpha_34_[deg]'.format(iB,ie) , alphaSign*dfSecDS['alpha (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}alphaE_[deg]'.format(iB,ie) , alphaSign*dfSecDS['alrefL (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}alphaED_[deg]'.format(iB,ie) , alphaSign*dfSecDS['alrefD (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}adotnorm_[-]'.format(iB,ie) , alphaSign*dfSecDS['adotnorm (-)'].values); c+=1 + #df.insert(c , 'AB{:d}N{:03d}AlphaDot_[-]'.format(iB,ie) , alphaSign*dfSec['AdotNorm (-)'].values); c+=1 # TODO + try: + df.insert(c , 'AB{:d}N{:03d}activeL_[-]'.format(iB,ie) , dfSecDS['DynamicFlagL'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}activeD_[-]'.format(iB,ie) , dfSecDS['DynamicFlagD'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}alphaLagD_[deg]'.format(iB,ie), alphaSign*dfSecDS['alphaLagD (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}delP_[-]'.format(iB,ie) , dfSecDS['delN'].values); c+=1 # NOTE SWAPPING N AND P!!!! + df.insert(c , 'AB{:d}N{:03d}delN_[-]'.format(iB,ie) , dfSecDS['delP'].values); c+=1 # NOTE SWAPPING N AND P!!!! + df.insert(c , 'AB{:d}N{:03d}transA_[-]'.format(iB,ie) , dfSecDS['transA'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}gammaL_[-]'.format(iB,ie) , dfSecDS['gammaL'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}gammaD_[-]'.format(iB,ie) , dfSecDS['gammaD'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}dalphaL_[deg]'.format(iB,ie) , alphaSign*dfSecDS['dalphaL (deg)'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}dalphaD_[deg]'.format(iB,ie) , alphaSign*(dfSecDS['alpha (deg)'].values -dfSecDS['alrefD (deg)'].values)) + df.insert(c , 'AB{:d}N{:03d}Tu_[s]'.format(iB,ie) , dfSecDS['Tu'].values); c+=1 # TODO TODO WRONG + df.insert(c , 'AB{:d}N{:03d}alphaDot_[rad/s]'.format(iB,ie),alphaSign*dfSecDS['alphadot'].values); c+=1 + df.insert(c , 'AB{:d}N{:03d}alphaDot2_[rad/s]'.format(iB,ie),np.concatenate(([0],np.diff(-dfSecDS['alpha (deg)'].values))))*np.pi/180; c+=1 # TODO TODO WRONG + except: + pass + return df,c + + + def _write(self): + """ """ + with open(self.filename,'w') as f: + f.write(self.toString) + + def toDataFrame(self, format='OpenFAST', alphaSign=-1): + # --- + df,c = self.timeDataToOpenFAST(df = self['dfTime']) + df,c = self.elemDataToOpenFAST(dfElem=self['dfElem'], df=df, c=c, dfDS=self['dfDS'], alphaSign=alphaSign) + return df + + + def toString(self): + s='' + return s + + def __repr__(self): + s ='Class XXXX (attributes: data)\n' + return s + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py new file mode 100644 index 0000000000..99dc276517 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py @@ -0,0 +1,94 @@ +import os + + +# -------------------------------------------------------------------------------- +# --- Writing pandas DataFrame to different formats +# -------------------------------------------------------------------------------- +def writeDataFrameToFormat(df, filename, fformat): + """ + Write a dataframe to disk based on user-specified fileformat + - df: pandas dataframe + - filename: filename + - fformat: fileformat in: ['csv', 'outb', 'parquet'] + """ + + if fformat=='outb': + dataFrameToOUTB(df, filename) + elif fformat=='parquet': + dataFrameToParquet(df, filename) + elif fformat=='csv': + dataFrameToCSV(df, filename, sep=',', index=False) + else: + raise Exception('File format not supported for dataframe export `{}`'.format(fformat)) + +def writeDataFrameAutoFormat(df, filename, fformat=None): + """ + Write a dataframe to disk based on extension + - df: pandas dataframe + - filename: filename + """ + if fformat is not None: + raise Exception() + base, ext = os.path.splitext(filename) + ext = ext.lower() + if ext in ['.outb']: + fformat = 'outb' + elif ext in ['.parquet']: + fformat = 'parquet' + elif ext in ['.csv']: + fformat = 'csv' + else: + print('[WARN] defaulting to csv, extension unknown: `{}`'.format(ext)) + fformat = 'csv' + + writeDataFrameToFormat(df, filename, fformat) + +def writeFileDataFrames(fileObject, writer, extension='.conv', filename=None, **kwargs): + """ + From a fileObejct, extract dataframes and write them to disk. + + - fileObject: object inheriting from weio.File with at least + - the attributes .filename + - the method .toDataFrame() + - writer: function with the interface: writer ( dataframe, filename, **kwargs ) + """ + if filename is None: + base, _ = os.path.splitext(fileObject.filename) + filename = base + extension + else: + base, ext = os.path.splitext(filename) + if len(ext)!=0: + extension = ext + if filename == fileObject.filename: + raise Exception('Not overwritting {}. Specify a filename or an extension.'.format(filename)) + + dfs = fileObject.toDataFrame() + if isinstance(dfs, dict): + for name,df in dfs.items(): + filename = base + name + extension + if filename == fileObject.filename: + raise Exception('Not overwritting {}. Specify a filename or an extension.'.format(filename)) + writeDataFrame(df=df, writer=writer, filename=filename, **kwargs) + else: + writeDataFrame(df=dfs, writer=writer, filename=filename, **kwargs) + +def writeDataFrame(df, writer, filename, **kwargs): + """ + Write a dataframe to disk based on a "writer" function. + - df: pandas dataframe + - writer: function with the interface: writer ( dataframe, filename, **kwargs ) + - filename: filename + """ + writer(df, filename, **kwargs) + +# --- Low level writers +def dataFrameToCSV(df, filename, sep=',', index=False, **kwargs): + df.to_csv(filename, sep=sep, index=index, **kwargs) + +def dataFrameToOUTB(df, filename, **kwargs): + from .fast_output_file import writeDataFrame as writeDataFrameToOUTB + writeDataFrameToOUTB(df, filename, binary=True) + +def dataFrameToParquet(df, filename, **kwargs): + df.to_parquet(path=filename, **kwargs) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py new file mode 100644 index 0000000000..5621f0360d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py @@ -0,0 +1,285 @@ +import os + +from .file import File, WrongFormatError +import pandas as pd + +class CSVFile(File): + """ + Read/write a CSV file. + + Main methods + ------------ + read, write, toDataFrame + + Examples + -------- + + # Read a csv file and convert it to a pandas dataframe + f = CSVFile('test.csv') + df = f.toDataFrame() + + """ + + @staticmethod + def defaultExtensions(): + return ['.csv','.txt'] + + @staticmethod + def formatName(): + return 'CSV file' + + def __init__(self, filename=None, sep=None, colNames=None, commentChar=None, commentLines=None,\ + colNamesLine=None, detectColumnNames=True, header=None, **kwargs): + colNames = [] if colNames is None else colNames + commentLines = [] if commentLines is None else commentLines + self.sep = sep + self.colNames = colNames + self.commentChar = commentChar + self.commentLines = commentLines + self.colNamesLine = colNamesLine + self.detectColumnNames = detectColumnNames + self.data=[] + if header is None: + self.header=[] + else: + if not hasattr(header, '__len__'): + self.header=[header] + else: + self.header=header + self.nHeader=0 + if (len(self.commentLines)>0) and (self.commentChar is not None): + raise Exception('Provide either `commentChar` or `commentLines` for CSV file types') + if (len(self.colNames)>0) and (self.colNamesLine is not None): + raise Exception('Provide either `colNames` or `colNamesLine` for CSV file types') + super(CSVFile, self).__init__(filename=filename,**kwargs) + + def _read(self): + COMMENT_CHAR=['#','!',';'] + # --- Detecting encoding + # NOTE: done by parent class method + + # --- Subfunctions + def readFirstLines(nLines): + lines=[] + with open(self.filename, 'r', encoding=self.encoding, errors="surrogateescape") as fid: + for i, line in enumerate(fid): + lines.append(line.strip()) + if i==nLines: + break + return lines + + def readline(iLine): + with open(self.filename,'r',encoding=self.encoding) as f: + for i, line in enumerate(f): + if i==iLine: + return line.strip() + elif i>iLine: + break + def split(s): + if s is None: + return [] + if self.sep==r'\s+': + return s.strip().split() + else: + return [c.strip() for c in s.strip().split(self.sep)] + def strIsFloat(s): + try: + float(s) + return True + except: + return False + # --- Safety + if self.sep=='' or self.sep==' ': + self.sep=r'\s+' + + iStartLine=0 + + # --- Exclude some files from the CSV reader --- + line=readline(iStartLine) + words=line.split() + if len(words)>1: + try: + int(words[0]) + word0int = True + except: + word0int = False + if word0int and words[1].isalpha(): + raise WrongFormatError('Input File {}: '.format(self.filename) + 'is not likely a CSV file' ) + + # --- Headers (i.e. comments) + # TODO: read few headers lines instead of multiple read below.. + + self.header = [] + if len(self.commentLines)>0: + # We read the lines + with open(self.filename,'r',encoding=self.encoding) as f: + for i in range(max(self.commentLines)+1): + l = f.readline() + if i in self.commentLines: + self.header.append(l.strip()) + elif self.commentChar is not None: + # we detect the comments lines that start with comment char + with open(self.filename,'r',encoding=self.encoding) as f: + n=0 + while n<100: + l = f.readline().strip() + if (not l) or (l+'_dummy')[0] != self.commentChar[0]: + break + self.header.append(l.strip()) + n+=1 + self.commentLines=list(range(len(self.header))) + else: + # We still believe that some characters are comments + line=readline(iStartLine) + line=str(line).strip() + if len(line)>0 and line[0] in COMMENT_CHAR: + self.commentChar=line[0] + # Nasty copy paste from above + with open(self.filename,'r',encoding=self.encoding) as f: + n=0 + while n<100: + l = f.readline().strip() + if (not l) or (l+'_dummy')[0] != self.commentChar[0]: + break + self.header.append(l.strip()) + n+=1 + + iStartLine = len(self.header) + + # --- File separator + if self.sep is None: + # Detecting separator by reading first lines of the file + try: + with open(self.filename,'r',encoding=self.encoding) as f: + dummy=[next(f).strip() for x in range(iStartLine)] + head=[next(f).strip() for x in range(2)] + # comma, semi columns or tab + if head[1].find(',')>0: + self.sep=',' + elif head[1].find(';')>0: + self.sep=';' + elif head[1].find('\t')>0: + self.sep='\t' + else: + self.sep=r'\s+' + except: + # most likely an empty file + pass + + # --- ColumnNames + if self.colNamesLine is not None: + if self.colNamesLine<0: + # The column names are hidden somwhere in the header + line=readline(iStartLine+self.colNamesLine).strip() + # Removing comment if present (should be present..) + if self.commentChar is not None: + if line.find(self.commentChar)==0: + line=line[len(self.commentChar):].strip() + self.colNames = split(line) + else: + line=readline(self.colNamesLine) + self.colNames=split(line) + iStartLine = max(iStartLine,self.colNamesLine+1) + elif len(self.colNames)>0: + pass + elif not self.detectColumnNames: + pass + else: + # Looking at first line of data, if mainly floats -> it's not the column names + colNames = split(readline(iStartLine)) + nFloat = sum([strIsFloat(s) for s in colNames]) + if nFloat ==0 or (len(colNames)>2 and nFloat <= len(colNames)/2): + # We assume that the line contains the column names + self.colNames=colNames + self.colNamesLine = iStartLine + iStartLine = iStartLine+1 + # --- Now, maybe the user has put some units below + first_line = readline(iStartLine) + #print('>>> first line',first_line) + first_cols = split(first_line) + nFloat = sum([strIsFloat(s) for s in first_cols]) + nPa = first_line.count('(')+first_line.count('[') + #if nFloat == 0 or nPa>len(self.colNames)/2: + if nPa>len(self.colNames)/2: + # that's definitely some units + if len(first_cols)==len(self.colNames): + self.colNames=[c.strip()+'_'+u.strip() for c,u in zip(self.colNames, first_cols)] + iStartLine = iStartLine+1 + elif len(self.header)>0: + # Maybe the columns names are in the header + if self.sep is not None: + first_line = readline(iStartLine) + first_cols = split(first_line) + #print('CommentChar:',self.commentChar) + #print('First line:',first_line) + #print('First col :',first_cols) + for l in self.header: + if self.commentChar is not None: + if len(self.commentChar)>0: + l=l[len(self.commentChar):] + cols=split(l) + nFloat = sum([strIsFloat(s) for s in cols]) + if len(cols)==len(first_cols) and nFloat <= len(colNames)-1: + self.colNames = cols + break + # --- Reading data + skiprows = list(range(iStartLine)) + if (self.colNamesLine is not None): + skiprows.append(self.colNamesLine) + if (self.commentLines is not None) and len(self.commentLines)>0: + skiprows = skiprows + self.commentLines + skiprows =list(sorted(set(skiprows))) + if self.sep is not None: + if self.sep=='\t': + self.sep=r'\s+' + #print(skiprows) + try: +# self.data = pd.read_csv(self.filename,sep=self.sep,skiprows=skiprows,header=None,comment=self.commentChar,encoding=self.encoding) + with open(self.filename,'r',encoding=self.encoding) as f: + self.data = pd.read_csv(f,sep=self.sep,skiprows=skiprows,header=None,comment=self.commentChar) + except pd.errors.ParserError as e: + raise WrongFormatError('CSV File {}: '.format(self.filename)+e.args[0]) + + if (len(self.colNames)==0) or (len(self.colNames)!=len(self.data.columns)): + self.colNames=['C{}'.format(i) for i in range(len(self.data.columns))] + self.data.columns = self.colNames; + self.data.rename(columns=lambda x: x.strip(),inplace=True) + + def _write(self): + # --- Safety + if self.sep==r'\s+' or self.sep=='': + self.sep='\t' + # Write + if len(self.header)>0: + with open(self.filename, 'w', encoding='utf-8') as f: + f.write('\n'.join(self.header)+'\n') + with open(self.filename, 'a', encoding='utf-8') as f: + try: + self.data.to_csv(f, sep=self.sep, index=False,header=False, line_terminator='\n') + except TypeError: + print('[WARN] CSVFile: Pandas failed, likely encoding error. Attempting a quick and dirty fix.') + s='' + vals=self.data.values + for l in vals: + sLine=(self.sep).join([str(v) for v in l]) + s+=sLine+'\n' + f.write(s) + else: + self.data.to_csv(self.filename,sep=self.sep,index=False) + + def __repr__(self): + s = 'CSVFile: {}\n'.format(self.filename) + s += 'sep=`{}` commentChar=`{}`\ncolNamesLine={}'.format(self.sep,self.commentChar,self.colNamesLine) + s += ', encoding={}'.format(self.encoding)+'\n' + s += 'commentLines={}'.format(self.commentLines)+'\n' + s += 'colNames={}'.format(self.colNames) + s += '\n' + if len(self.header)>0: + s += 'header:\n'+ '\n'.join(self.header)+'\n' + if len(self.data)>0: + s += 'size: {}x{}'.format(len(self.data),len(self.data.columns)) + return s + + def _toDataFrame(self): + return self.data + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore new file mode 100644 index 0000000000..34e7effc2a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore @@ -0,0 +1,4 @@ +NREL5MW/ +NREL5MW_* +*.csv +_* diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py new file mode 100644 index 0000000000..2663a80679 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py @@ -0,0 +1,15 @@ +""" +Open an AeroDyn input file, change some parameters (air density) and write to a new file. +""" + +import os +from pyFAST.input_output import FASTInputFile + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +filename = os.path.join(scriptDir, '../../../data/NREL5MW/onshore/AeroDyn.dat') +f = FASTInputFile(filename) +f['TwrAero'] = True +f['AirDens'] = 1.225 +# f.write('_AeroDyn_Changed.dat') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py new file mode 100644 index 0000000000..21e75f176f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py @@ -0,0 +1,88 @@ +""" +Example to illustrate how to manipulate different files used within OpenFAST: + - read data from an OpenFAST model + - write modified files + +The main syntax and methods are as follows: +- object = FASTInputFile(filename): read an input file, returns a dictionary-like +- object.keys(): list the available keys +- object.toDataFrame(): attempts to convert object to a pandas DataFrame +- object.write(filename): write the object to a file (may overwrite) + + +""" +import os +import numpy as np +from pyFAST.input_output import FASTInputFile +import matplotlib.pyplot as plt + + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) + + +# --- ElastoDyn file (geometry, inertias, etc.) +# Read some geometrical data, modify them, write a new file +print('------------------- ElastoDyn -------------------------------------') +EDFilename = os.path.join(MyDir,'../../../data/NREL5MW/onshore/ElastoDyn.dat') +ED = FASTInputFile(EDFilename) +print('> Keys:',ED.keys()) +print('> Hub radius: ',ED['HubRad']) +print('> Tip radius: ',ED['TipRad']) +print('> Hub mass: ',ED['HubMass']) +ED['TipRadius'] = 64 # Modifying the data +#ED.write('_NewFile.dat') # write a new file with modified data + + +# --- AeroDyn blade +# Read an AeroDyn blade file, convert to a dataframe for convenience +print('------------------- AeroDyn blade ---------------------------------') +bldFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat') +bld = FASTInputFile(bldFilename) +print('> Keys:',bld.keys()) +data = bld['BldAeroNodes'] # Accessing the blade nodal data directly (numpy array, can be modified) +bld['BldAeroNodes'][:,5] *=2 # Modify (multiply chord by 2) +df = bld.toDataFrame() # Using a dataframe for easy export/manipulation +print('> Dataframe columns:',df.columns.values) +df.plot('BlSpn_[m]','BlChord_[m]') + +# --- Profile file +print('------------------- Profile data ----------------------------------') +PFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/Airfoils/DU21_A17.dat') +P = FASTInputFile(PFilename) +print('> Keys:',P.keys()) +data = P['AFCoeff'] # Accessing the polar data directly (numpy array, can be modified) +df = P.toDataFrame() # Using a dataframe for easy export/manipulation +print('> Dataframe columns:',df.columns.values) +df.plot('Alpha_[deg]','Cl_[-]') + + +# --- ElastoDyn blade file +print('------------------- ElastoDyn blade -------------------------------') +bldFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_Blade.dat') +bld = FASTInputFile(bldFilename) +print('> Keys:',bld.keys()) +data = bld['BldProp'] # Accessing the blade nodal data directly (numpy array, can be modified) +df = bld.toDataFrame() # Using a dataframe for easy export/manipulation +print('> Dataframe columns:',df.columns.values) +df.plot('BlFract_[-]','BMassDen_[kg/m]') + +# --- BeamDyn blade file +print('------------------- BeamDyn blade file ----------------------------') +BDFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_BeamDyn_Blade.dat') +BD = FASTInputFile(BDFilename) +print('> Keys:',BD.keys()) +BP_ref = BD['BeamProperties'] # access data directly (dictionary) +# Modify blade property in for loop, write new files +#for loop: +# BP = BP_ref.copy() +# BP['K']= BP['K']*i # modify some of the dictionary +# BD['BeamProperties'] =BP +# BD.write('newfile') + + + + + +if __name__ == '__main__': + plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py new file mode 100644 index 0000000000..380841ba1b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py @@ -0,0 +1,90 @@ +""" +Example usage for the MannBox class. +""" + +import os +import numpy as np +import matplotlib.pyplot as plt +from pyFAST.input_output.mannbox_file import MannBoxFile + + +scriptDir = os.path.dirname(__file__) + +# --- Inputs +file_u = os.path.join(scriptDir, '../../../data/example_files/MannBox_32x4x8.bin') +dy = 3 # horizontal spacing [m] +dz = 10 # vertical spacing [m] + +# --- Read Mann Box file and display main properties +mb = MannBoxFile(file_u, dy=dy, dz=dz) # create a MannBoxFile object, store it in mb +print(mb) # print misc info about the object +print(mb['field'].shape) # print the shape of your field. +nx, ny, nz = mb['field'].shape # Store the field dimension + + +# --- Plot values of the field at given indices. Note this example has only 2 values in x +# NOTE: can also be obtained directly using: +# u = mb.valuesAt(y=5, z=50) +t = mb.t(dx=1, U=10) +u = mb['field'][:, 3, 5] # Value at indices iy=3, iz=5 +plt.figure(1) +plt.plot(t, u, label='Input') +plt.xlabel('time [s]') +plt.ylabel('u [m/s]') +plt.title('Value of field at chosen location as function of x/t') + + +# --- Plot vertical profile averaged over all x and y +# NOTE: can also be obtained directly using: +# z, means, stds = mb.vertProfile +u_mean_vertical = np.mean(np.mean(mb['field'][:,:,:], axis=0), axis=0) +plt.figure(2) +plt.plot(u_mean_vertical, mb.z, label='Input') +plt.xlabel('u mean [m/s]') +plt.ylabel('z [m]') +plt.title('Average vertical profile for all x and y') + +# --- Compute the mean over all "x" values for each points in the y-z plane +UmeanYZ = np.mean(mb['field'][:,:,:],axis=0) # This has shape ny x nz + +# --- Modify the field (some examples) +mb['field'] -= UmeanYZ # remove the mean of all datapoints along x +mb['field'][:,:,:] *= 2 # multiply the field by 10 everywhere +mb['field'][:,:,:] += UmeanYZ # add the mean again +mb['field'][:,:,:] += 0.5 # add 0.5 everywhere in the field +mb['field'][:,:,0] = 0 # set the velocity to be zero for the first z index + + +# --- Plot value of the field again +u = mb['field'][:, 3, 5] # Value at indices iy=3, iz=5 +plt.figure(1) +plt.plot(t, u, label='Modified') +plt.xlabel('time [s]') +plt.ylabel('u [m/s]') + +# --- Plot the vertical profile again +u_mean_vertical2 = np.mean(np.mean(mb['field'][:,:,:], axis=0), axis=0) +plt.figure(2) +plt.plot(u_mean_vertical2, mb.z, '--', label='Modified') +plt.xlabel('u mean [m/s]') +plt.ylabel('z [m]') + + + + +# --- Write the modified field to disk with another filename +outFile = file_u.replace('.bin','_modified.bin') +mb.write(outFile) +print('File written: ', outFile) + + + +if __name__ == "__main__": + plt.show() + +if __name__=='__test__': + try: + os.remove(outFile) + except: + pass + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py new file mode 100644 index 0000000000..f4107e93fd --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py @@ -0,0 +1,23 @@ +""" +- Open and OpenFAST binary file +- Convert it to a pandas dataframe +- Plot a given output channel +""" +import os +import matplotlib.pyplot as plt +from pyFAST.input_output import FASTOutputFile + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +fastoutFilename = os.path.join(scriptDir, '../../../data/example_files/fastout_allnodes.outb') +df = FASTOutputFile(fastoutFilename).toDataFrame() +print(df.keys()) +time = df['Time_[s]'] +Omega = df['RotSpeed_[rpm]'] +plt.plot(time, Omega) +plt.xlabel('Time [s]') +plt.ylabel('RotSpeed [rpm]') + +if __name__ == '__main__': + plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py new file mode 100644 index 0000000000..3679600361 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py @@ -0,0 +1,20 @@ +""" +- Open an AeroDyn blade file +- Plot the chord as function of span +""" + +import os +import matplotlib.pyplot as plt +from pyFAST.input_output import FASTInputFile + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +df = FASTInputFile(os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat')).toDataFrame() +print(df.keys()) +plt.plot(df['BlSpn_[m]'], df['BlChord_[m]']) +plt.xlabel('Span [m]') +plt.ylabel('Chord [m]') + +if __name__ == '__main__': + plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py new file mode 100644 index 0000000000..7e04d174d3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py @@ -0,0 +1,127 @@ +""" +Example usage for the TurbSimFile class. + +- Read a TurbSim file and display main properties +- Extract time series at a given y, z location and plot it +- Extract a horizontal plane and plot it +- Compute vertical profile/shear and plot it +- Fit vertical profiel with a power law +- Compute cross corelation in y and z directions +- Modify field (add a constant velocity in the streamwise direction) and write to disk +- Write to Mann Box format +- Write time series at given locations to a CSV file + +NOTE: this example uses an extremely small TurbSim box. + Results will be more "physical" on a more realstic box. +""" +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +from pyFAST.input_output import TurbSimFile + +def main(): + MyDir = os.path.dirname(__file__) + + # --- Read a TurbSim file and display main properties + filename = os.path.join(MyDir, '../tests/example_files/TurbSim_WithTwr.bts') + ts = TurbSimFile(filename) + print(ts) + + # --- Extract time series at a given y, z location and plot it + # Method 1 - use object method + u,v,w = ts.valuesAt(y=0, z=90, method='nearest') + # Method 2 - use data directly + iy, iz = ts.closestPoint(y=0, z=90) + u2,v2,w2 = ts['u'][0, :, iy, iz], ts['u'][1, :, iy, iz], ts['u'][2, :, iy, iz] + + fig,ax = plt.subplots(1, 1) + ax.plot(ts.t, u, label='u') + ax.plot(ts.t, v, label='v') + ax.plot(ts.t, w, label='w') + ax.plot(ts.t, u2, 'k--') + ax.plot(ts.t, v2, 'k--') + ax.plot(ts.t, w2, 'k--') + ax.legend() + ax.set_xlabel('Time [s]') + ax.set_ylabel('Velocity [m/s]') + ax.set_title('Velocity at y=0 z=90') + + # --- Extract a horizontal plane and plot it + U, V, W = ts.horizontalPlane(z=90) + T, Y = np.meshgrid(ts.t, ts.y) + fig,ax = plt.subplots(1, 1) + ax.contourf(T, Y, U.T) + ax.set_xlabel('Time [s]') + ax.set_ylabel('y [m]') + ax.set_title('Velocity at z=90') + + # --- Compute vertical profile/shear and plot it + # NOTE: the example file has only three points in y&z + z, u_mean, u_std = ts.vertProfile(y_span='full') + # Fit a power law + u_fit, pfit, model, z_ref = ts.fitPowerLaw() + print('Power law: alpha={:.5f}, u_ref={:.5f}, z_ref={:.5f}'.format(pfit[1],pfit[0],z_ref)) + print('Formula: {} '.format(model['formula'])) + + fig,ax = plt.subplots(1, 1) + ax.plot(u_mean[0,:], z, label='u') + ax.plot(u_mean[1,:], z, label='v') + ax.plot(u_mean[2,:], z, label='w') + ax.plot(u_fit , z, 'k--', label='u fit (power law)') + if 'uTwr' in ts: + ax.plot(np.mean(ts['uTwr'][0,:,:], axis=0), ts['zTwr'], label='u on tower') + ax.legend() + ax.set_xlabel('Velocity [m/s]') + ax.set_ylabel('z [m]') + ax.set_title('Vertical profiles (averaged over y and time)') + + + + + + # --- Compute cross corelation in y and z directions + # NOTE: the example file has only three points in y&z + iy0, iz0 = ts.iMid # Index at middle of the box + y, rho_uu_y, rho_vv_y, rho_ww_y = ts.crosscorr_y(iy0, iz0) + z, rho_uu_z, rho_vv_z, rho_ww_z = ts.crosscorr_z(iy0, iz0) + + fig,ax = plt.subplots(1, 1) + ax.plot(y, rho_uu_y, label=r'rho_uu}') + ax.plot(y, rho_vv_y, label=r'rho_vv}') + ax.plot(y, rho_ww_y, label=r'rho_ww}') + ax.set_xlabel('y [m]') + ax.set_ylabel('Cross correlation') + ax.set_title('Cross correlation in y direction at middle of the box') + ax.legend() + + # --- Convert to "DataFrame" + # Contains relevant time series like vertical profile, midline, coherence, cross correlation + # dfs = ts.toDataFrame() + + # --- Modify field and write to disk + ts['u'][0,:,:,:] += 1 # Adding 1 m/s in the streamwise + ts.makePeriodic() # Make the field periodic by mirroring it in the streamwise direction + ts.write('_MyNewTurbBox.bts') + + # --- Write to Mann Box format + ts.toMannBox() + + # --- Write time series at given locations to a CSV file + ts.writeProbes('_Probes.csv', yProbe=[0], zProbe=[65,115]) + +if __name__ == "__main__": + main() + plt.show() + +if __name__=='__test__': + main() + try: + os.remove('_MyNewTurbBox.bts') + os.remove('_MyNewTurbBox_198x3x4.u') + os.remove('_MyNewTurbBox_198x3x4.v') + os.remove('_MyNewTurbBox_198x3x4.w') + os.remove('_Probes.csv') + except: + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py new file mode 100644 index 0000000000..a20da171fb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py @@ -0,0 +1,38 @@ +from pyFAST.input_output import FASTInputFile +from pyFAST.case_generation import runner +from pyFAST.input_output import TurbSimFile +import pandas as pd +import os + +def main(): + """Modify TurbSim parameters and write""" + MyDir = os.path.dirname(__file__) + filename = os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim.dat') # Name of TurbSim's input file + f = FASTInputFile(filename) + f['WrBLFF'] = False + f['WrADFF'] = True + f['WrADTWR'] = True + f['NumGrid_Z'] = 15 + f['NumGrid_Y'] = 15 + f['AnalysisTime'] = 600 + f.write(os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim_change.dat')) # Modified file name + + """Run TurbSim""" + TurbSim_FILE = os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim_change.dat') # Input file + Turbsim_EXE = os.path.join(MyDir, '../../../../openfast/build/bin/TurbSim_x64.exe') # Change to the path of the TurbSim executable + runner.run_cmd(TurbSim_FILE, Turbsim_EXE, wait=True, showOutputs=False, showCommand=True) + + """Open the turbulence box, containing the wind speed in 3 directions""" + # NOTE: See Example_TurbSimBox for more use cases of the TurbSimFile class + ts = TurbSimFile(os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim_change.bts')) # Output file + print(ts.keys()) + print(ts['info']) + print(ts['u'].shape) + + """Save wind speed data in CSV format""" + fgp_data = pd.DataFrame(ts['u'][:,:,0,0]).T # 3D turbulence data for the first grid point + fgp_data.columns = ['streamwise wind speed', 'transverse wind speed', 'vertical wind speed'] # add columns name + fgp_data.to_csv(os.path.join(MyDir, '../tests/example_files/wind_data_of_first_grid_point.csv')) # save data in CSV format + +if __name__ == "__main__": + main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py new file mode 100644 index 0000000000..2ec04aa5e7 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py @@ -0,0 +1,39 @@ +""" +Reads a VTK file containing a velocity Grid/Plane. +The format is typically used as inputs/outputs of FAST.Farm or outputs of OLAF +""" +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import os +# Local +import pyFAST.input_output as io +import pyFAST.input_output.vtk_file + +# Get current directory so this script can be called from any location +MyDir=os.path.dirname(__file__) +# Read Plane +vtkFileName = os.path.join(MyDir,'../../../data/example_files/Plane.vtk') +vtk = io.vtk_file.VTKFile(vtkFileName) +# Extract field into individual components +u = vtk.point_data_grid['Velocity'][:,:,:,0] +v = vtk.point_data_grid['Velocity'][:,:,:,1] +w = vtk.point_data_grid['Velocity'][:,:,:,2] + + +if __name__ == '__main__': + # Print useful information + print(vtk) + # Plot a cross section + fig,ax = plt.subplots() + im=ax.contourf(vtk.xp_grid, vtk.zp_grid, u[:,0,:].T) + fig.colorbar(im) + ax.set_xlabel('x [m]') + ax.set_ylabel('z [m]') + ax.set_title('Streamwise velocity in vertical plane (simple shear)') + plt.show() + +if __name__=='__test__': + np.testing.assert_array_equal(u.shape, (4,1,6)) + np.testing.assert_almost_equal(u[0,-1,3],10.183994 ) + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md new file mode 100644 index 0000000000..1fabece7a0 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md @@ -0,0 +1,10 @@ +This folder contains examples of OpenFAST postprocessing: + +- RadialInterp: interpolate a timeseries to a given radial location based on OpenFAST radial node outputs. +- RadialPostPro: extract average OpenFAST outputs as function of the radial coordinates +- Remap: remap a dataframe: change names, and perform operations (e.g. change units, scale, combine signals) +- TurbSim\_Processing: read a TurbSim input file, modify it, run TurbSim, and open the output file. +- TurbSimBox: read a TurbSim Box, extract some data, plot them, fit a power law, modify the box, write it to disk, write time series at given locations to a CSV file +- VTKPlanesGrid: Reads a VTK file containing a velocity Grid/Plane. The format is typically used as inputs/outputs of FAST.Farm or outputs of OLAF. + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py new file mode 100644 index 0000000000..7fd79adf2d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py @@ -0,0 +1,43 @@ +""" +- Read a SubDyn summary file and extract the Guyan and Craig Bampton Modes +- Convert the SubDyn file to JSON for 3D visualization +""" +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import os +# Local +from pyFAST.input_output.fast_summary_file import FASTSummaryFile + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + + +# Read SubDyn summary file +filename = os.path.join(scriptDir, '../../../data/example_files/FASTSum_5MW_OC3Mnpl.SD.sum.yaml') +sds = FASTSummaryFile(filename) + +# Optional: Extract Guyan and Craig-Bampton modes +#dispGY, posGY, _, dispCB, posCB, _ = sds.getModes() + +# Extract Guyan and Craig-Bampton modes and store them in a DataFrame +df = sds.toDataFrame() #sortDim=2, removeZero=True) +print(df.keys()) +plt.plot(df['z_[m]'], df['GuyanMode1x_[m]'], 'o') +plt.plot(df['z_[m]'], df['GuyanMode5x_[m]'], 'o') + + +# Store as JSON for 3d visualization with viz3danim +sds.toJSON('_OUT.json') +sds.toGraph().toJSON('_OUT2.json') + +if __name__ == '__main__': + plt.show() +if __name__=='__test__': + np.testing.assert_array_almost_equal(df['z_[m]'].values[::2], [-20. , -13.333, -6.667, 0. , 6.667]) + np.testing.assert_array_almost_equal(df['GuyanMode1x_[m]'].values[::2], [0. , 0.446041, 1.270304, 2.170204, 2.843171]) + try: + os.remove('_OUT.json') + os.remove('_OUT2.json') + except: + pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py new file mode 100644 index 0000000000..d61653e525 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py @@ -0,0 +1,81 @@ +from .file import File, WrongFormatError, BrokenFormatError +import numpy as np +import pandas as pd + +# from pandas import ExcelWriter +from pandas import ExcelFile + +class ExcelFile(File): + + @staticmethod + def defaultExtensions(): + return ['.xls','.xlsx'] + + @staticmethod + def formatName(): + return 'Excel file' + + def _read(self): + self.data=dict() + # Reading all sheets + xls = pd.ExcelFile(self.filename, engine='openpyxl') + dfs = {} + for sheet_name in xls.sheet_names: + # Reading sheet + df = xls.parse(sheet_name, header=None) + # TODO detect sub tables + # Dropping empty rows and cols + df.dropna(how='all',axis=0,inplace=True) + df.dropna(how='all',axis=1,inplace=True) + #print(df.shape) + if df.shape[0]>0: + # Setting first row as header + df=df.rename(columns=df.iloc[0]).drop(df.index[0]).reset_index(drop=True) + #print(df) + self.data[sheet_name]=df + + #def toString(self): + # s='' + # return s + + def _write(self): + # Create a Pandas Excel writer using XlsxWriter as the engine. + writer = pd.ExcelWriter(self.filename, engine='xlsxwriter') + # Convert the dataframe to an XlsxWriter Excel object. + for k,_ in self.data.items(): + df = self.data[k] + df.to_excel(writer, sheet_name=k, index=False) + # # Account info columns (set size) + # worksheet.set_column('B:D', 20) + # # Total formatting + # total_fmt = workbook.add_format({'align': 'right', 'num_format': '$#,##0', + # 'bold': True, 'bottom':6}) + # # Total percent format + # total_percent_fmt = workbook.add_format({'align': 'right', 'num_format': '0.0%', + # 'bold': True, 'bottom':6}) + # workbook = writer.book + # worksheet = writer.sheets['report'] + # Highlight the top 5 values in Green + #worksheet.conditional_format(color_range, {'type': 'top', + # 'value': '5', + # 'format': format2}) + ## Highlight the bottom 5 values in Red + #worksheet.conditional_format(color_range, {'type': 'bottom', + # 'value': '5', + # 'format': format1}) + # Close the Pandas Excel writer and output the Excel file. + writer.save() + + def __repr__(self): + s ='Class ExcelFile (attributes: data)\n' + return s + + + def _toDataFrame(self): + if len(self.data)==1: + # Return a single dataframe + return self.data[list(self.data.keys())[0]] + else: + # Return dictionary + return self.data + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py new file mode 100644 index 0000000000..9228652096 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py @@ -0,0 +1,477 @@ +import os +import numpy as np +import re +import pandas as pd + +from .fast_input_file import FASTInputFile + +__all__ = ['FASTInputDeck'] +# --------------------------------------------------------------------------------} +# --- Full FAST input deck +# --------------------------------------------------------------------------------{ +class FASTInputDeck(dict): + """Container for input files that make up a FAST input deck""" + + def __init__(self, fullFstPath='', readlist=['all'], verbose=False): + """Read FAST master file and read inputs for FAST modules + + INPUTS: + - fullFstPath: + - readlist: list of module files to be read, or ['all'], modules are identified as follows: + ['Fst','ED','AD','BD','BDbld','EDtwr','EDbld','ADbld','AF','AC','IW','HD','SrvD','SD','MD'] + where: + AF: airfoil polars + AC: airfoil coordinates (if present) + + """ + # Sanity + if type(verbose) is not bool: + raise Exception('`verbose` arguments needs to be a boolean') + + # Main Data + self.inputFilesRead = {} + self.filename = fullFstPath + self.verbose = verbose + self.readlist = readlist + if not type(self.readlist) is list: + self.readlist=[readlist] + if 'all' in self.readlist: + self.readlist = ['Fst','ED','AD','BD','BDbld','EDtwr','EDbld','ADbld','AF','AC','IW','HD','SrvD','SD','MD'] + else: + self.readlist = ['Fst']+self.readlist + + + # --- Harmonization with AeroElasticSE + self.FAST_ver = 'OPENFAST' + self.path2dll = None # Path to dll file + + self.fst_vt={} + self.fst_vt['description'] = '' + self.fst_vt['Fst'] = None + self.fst_vt['ElastoDyn'] = None + self.fst_vt['ElastoDynBlade'] = None + self.fst_vt['ElastoDynTower'] = None + self.fst_vt['InflowWind'] = None + self.fst_vt['AeroDyn14'] = None + self.fst_vt['AeroDyn15'] = None + self.fst_vt['AeroDynBlade'] = None + self.fst_vt['AeroDynTower'] = None + self.fst_vt['AeroDynPolar'] = None + self.fst_vt['ServoDyn'] = None + self.fst_vt['DISCON_in'] = None + self.fst_vt['HydroDyn'] = None + self.fst_vt['MoorDyn'] = None + self.fst_vt['SubDyn'] = None + self.fst_vt['MAP'] = None + self.fst_vt['BeamDyn'] = None + self.fst_vt['BeamDynBlade'] = None # Small change of interface + self.fst_vt['af_data'] = [] # Small change of interface + self.fst_vt['ac_data'] = [] # TODO, how is it stored in WEIS? + + + self.ADversion='' + + # Read all inputs files + if len(fullFstPath)>0: + self.read() + + @property + def ED(self): + ED = self.fst_vt['ElastoDyn'] + if ED is None: + if 'ED' not in self.readlist: + self.readlist.append('ED') + if self.verbose: + print('>>> Reading ED', self.ED_path) + self.fst_vt['ElastoDyn'] = self._read(self.fst_vt['Fst']['EDFile'],'ED') + return self.fst_vt['ElastoDyn'] + else: + return ED + + + def readAD(self, filename=None, readlist=None, verbose=False, key='AeroDyn15'): + """ + readlist: 'AD','AF','AC' + """ + if readlist is not None: + readlist_bkp = self.readlist + self.readlist=readlist + if not type(self.readlist) is list: + self.readlist=[readlist] + if 'all' in self.readlist: + self.readlist = ['Fst','ED','AD','BD','BDbld','EDtwr','EDbld','ADbld','AF','AC','IW','HD','SrvD','SD','MD'] + + if filename is None: + filename = self.fst_vt['Fst']['AeroFile'] + baseDir = os.path.dirname(self.fst_vt['Fst']['AeroFile']) + else: + baseDir = os.path.dirname(filename) + + self.verbose = verbose + + self.fst_vt[key] = self._read(filename,'AD') + + if self.fst_vt[key] is not None: + # Blades + bld_file = os.path.join(baseDir, self.fst_vt[key]['ADBlFile(1)']) + self.fst_vt['AeroDynBlade'] = self._read(bld_file,'ADbld') + #self.fst_vt['AeroDynBlade'] = [] + #for i in range(3): + # bld_file = os.path.join(os.path.dirname(self.fst_vt['Fst']['AeroFile']), self.fst_vt[key]['ADBlFile({})'.format(i+1)]) + # self.fst_vt['AeroDynBlade'].append(self._read(bld_file,'ADbld')) + # Polars + self.fst_vt['af_data']=[] # TODO add to "AeroDyn" + for afi, af_filename in enumerate(self.fst_vt['AeroDyn15']['AFNames']): + af_filename = os.path.join(baseDir,af_filename).replace('"','') + try: + polar = self._read(af_filename, 'AF') + except: + polar=None + print('[FAIL] reading polar {}'.format(af_filename)) + self.fst_vt['af_data'].append(polar) + if polar is not None: + coordFile = polar['NumCoords'] + if isinstance(coordFile,str): + coordFile = coordFile.replace('"','') + baseDirCoord=os.path.dirname(af_filename) + if coordFile[0]=='@': + ac_filename = os.path.join(baseDirCoord,coordFile[1:]) + coords = self._read(ac_filename, 'AC') + self.fst_vt['ac_data'].append(coords) + + # --- Backward compatibility + self.AD = self.fst_vt[key] + self.ADversion='AD15' if key=='AeroDyn15' else 'AD14' + + if readlist is not None: + self.readlist=readlist_bkp + + @property + def FAST_InputFile(self): + return os.path.basename(self.filename) # FAST input file (ext=.fst) + @property + def FAST_directory(self): + return os.path.dirname(self.filename) # Path to fst directory files + + + @property + def inputFiles(self): + files=[] + files+=[self.ED_path, self.ED_twr_path, self.ED_bld_path] + files+=[self.BD_path, self.BD_bld_path] + files+=[self.SD_path] + return [f for f in files if f not in self.unusedNames] + + def _relpath(self, k1, k2=None, k3=None): + try: + if k2 is None: + return self.fst_vt['Fst'][k1].replace('"','') + else: + parent = os.path.dirname(self.fst_vt['Fst'][k1]).replace('"','') + if type(k3)==list: + for k in k3: + if k in self.fst_vt[k2].keys(): + child = self.fst_vt[k2][k].replace('"','') + else: + child = self.fst_vt[k2][k3].replace('"','') + return os.path.join(parent, child) + except: + return 'none' + + @property + def ED_path(self): return self._fullpath(self._relpath('EDFile')) + @property + def SD_path(self): return self._fullpath(self._relpath('SubFile')) + @property + def BD_path(self): return self._fullpath(self._relpath('BDBldFile(1)')) + @property + def BD_bld_path(self): return self._fullpath(self._relpath('BDBldFile(1)','BeamDyn','BldFile')) + @property + def ED_twr_path(self): return self._fullpath(self._relpath('EDFile','ElastoDyn','TwrFile')) + @property + def ED_bld_path(self): return self._fullpath(self._relpath('EDFile','ElastoDyn',['BldFile(1)','BldFile1'])) + + + + def _fullpath(self, relfilepath): + relfilepath = relfilepath.replace('"','') + basename = os.path.basename(relfilepath) + if basename.lower() in self.unusedNames: + return 'none' + else: + return os.path.join(self.FAST_directory, relfilepath) + + + def read(self, filename=None): + """ + Read all OpenFAST inputs files, based on the requested list of modules `readlist` + """ + if filename is not None: + self.filename = filename + + # Read main file (.fst, or .drv) and store into key "Fst" + if self.verbose: + print('Reading:', self.FAST_InputFile) + self.fst_vt['Fst'] = self._read(self.FAST_InputFile, 'Fst') + if self.fst_vt['Fst'] is None: + raise Exception('Error reading main file {}'.format(self.filename)) + keys = self.fst_vt['Fst'].keys() + + # Detect driver or OpenFAST version + if 'NumTurbines' in keys: + self.version='AD_driver' + elif 'DynamicSolve' in keys: + self.version='BD_driver' + elif 'InterpOrder' in self.fst_vt['Fst'].keys(): + self.version='OF2' + else: + self.version='F7' + + + if self.version=='AD_driver': + # ---- AD Driver + # InflowWind + if self.fst_vt['Fst']['CompInflow']>0: + self.fst_vt['InflowWind'] = self._read(self.fst_vt['Fst']['InflowFile'],'IW') + + self.readAD(key='AeroDyn15') + + elif self.version=='BD_driver': + # --- BD driver + self.fst_vt['BeamDyn'] = self._read(self.fst_vt['Fst']['InputFile'],'BD') + if self.fst_vt['BeamDyn'] is not None: + # Blades + bld_file = os.path.join(os.path.dirname(self.fst_vt['Fst']['InputFile']), self.fst_vt['BeamDyn']['BldFile']) + print('bld_file', bld_file) + self.fst_vt['BeamDynBlade']= self._read(bld_file,'BDbld') + + del self.fst_vt['af_data'] + del self.fst_vt['ac_data'] + + elif self.version=='OF2': + # ---- Regular OpenFAST file + # ElastoDyn + if 'EDFile' in self.fst_vt['Fst'].keys(): + self.fst_vt['ElastoDyn'] = self._read(self.fst_vt['Fst']['EDFile'],'ED') + if self.fst_vt['ElastoDyn'] is not None: + twr_file = self.ED_twr_path + bld_file = self.ED_bld_path + self.fst_vt['ElastoDynTower'] = self._read(twr_file,'EDtwr') + self.fst_vt['ElastoDynBlade'] = self._read(bld_file,'EDbld') + + # InflowWind + if self.fst_vt['Fst']['CompInflow']>0: + self.fst_vt['InflowWind'] = self._read(self.fst_vt['Fst']['InflowFile'],'IW') + + # AeroDyn + if self.fst_vt['Fst']['CompAero']>0: + key = 'AeroDyn14' if self.fst_vt['Fst']['CompAero']==1 else 'AeroDyn15' + self.readAD(key=key, readlist=self.readlist) + + # ServoDyn + if self.fst_vt['Fst']['CompServo']>0: + self.fst_vt['ServoDyn'] = self._read(self.fst_vt['Fst']['ServoFile'],'SrvD') + # TODO Discon + + # HydroDyn + if self.fst_vt['Fst']['CompHydro']== 1: + self.fst_vt['HydroDyn'] = self._read(self.fst_vt['Fst']['HydroFile'],'HD') + + # SubDyn + if self.fst_vt['Fst']['CompSub'] == 1: + self.fst_vt['SubDyn'] = self._read(self.fst_vt['Fst']['SubFile'], 'SD') + + # Mooring + if self.fst_vt['Fst']['CompMooring']==1: + self.fst_vt['MAP'] = self._read(self.fst_vt['Fst']['MooringFile'],'MD') + if self.fst_vt['Fst']['CompMooring']==2: + self.fst_vt['MoorDyn'] = self._read(self.fst_vt['Fst']['MooringFile'],'MD') + + # BeamDyn + if self.fst_vt['Fst']['CompElast'] == 2: + self.fst_vt['BeamDyn'] = self._read(self.fst_vt['Fst']['BDBldFile(1)'],'BD') + if self.fst_vt['BeamDyn'] is not None: + # Blades + bld_file = os.path.join(os.path.dirname(self.fst_vt['Fst']['BDBldFile(1)']), self.fst_vt['BeamDyn']['BldFile']) + self.fst_vt['BeamDynBlade']= self._read(bld_file,'BDbld') + + # --- Backward compatibility + self.fst = self.fst_vt['Fst'] + self._ED = self.fst_vt['ElastoDyn'] + if not hasattr(self,'AD'): + self.AD = None + if self.AD is not None: + self.AD.Bld1 = self.fst_vt['AeroDynBlade'] + self.AD.AF = self.fst_vt['af_data'] + self.IW = self.fst_vt['InflowWind'] + self.BD = self.fst_vt['BeamDyn'] + self.BDbld = self.fst_vt['BeamDynBlade'] + self.SD = self.fst_vt['SubDyn'] + + @ property + def unusedNames(self): + return ['unused','nan','na','none'] + + def _read(self, relfilepath, shortkey): + """ read any openfast input """ + relfilepath =relfilepath.replace('"','') + basename = os.path.basename(relfilepath) + + # Only read what the user requested to be read + if shortkey not in self.readlist: + if self.verbose: + print('>>> Skipping ',shortkey) + return None + + # Skip "unused" and "NA" + if basename.lower() in self.unusedNames: + if self.verbose: + print('>>> Unused ',shortkey) + return None + + # Attempt reading + if relfilepath.startswith(self.FAST_directory): + fullpath = relfilepath + else: + fullpath = os.path.join(self.FAST_directory, relfilepath) + try: + data = FASTInputFile(fullpath) + if self.verbose: + print('>>> Read: ',fullpath) + self.inputFilesRead[shortkey] = fullpath + return data + except FileNotFoundError: + print('[WARN] File not found '+fullpath) + return None + + + + def write(self, filename=None, prefix='', suffix='', directory=None): + """ Write a standardized input file deck""" + if filename is None: + filename=self.filename # Overwritting + self.filename=filename + if directory is None: + directory = os.path.dirname(filename) + else: + # Making sure filename is within directory + filename = os.path.join(directory, os.path.basename(filename)) + if not os.path.exists(directory): + os.makedirs(directory) + + basename = os.path.splitext(os.path.basename(filename))[0] + + + fst = self.fst_vt['Fst'] + + + if self.version=='AD_driver': + raise NotImplementedError() + + elif self.version=='BD_driver': + # --- BD driver + filename_BD = os.path.join(directory, prefix+'BD'+suffix+'.dat') + filename_BD_bld = os.path.join(directory, prefix+'BD_bld'+suffix+'.dat') + fst['InputFile'] = '"' + os.path.basename(filename_BD) + '"' + fst.write(filename) + BD = self.fst_vt['BeamDyn'] + BD['BldFile'] = '"'+os.path.basename(filename_BD_bld)+'"' + self.fst_vt['BeamDynBlade'].write(filename_BD_bld) # TODO TODO pick up the proper blade file! + BD.write(filename_BD) + + elif self.version=='OF2': + + # Filenames + filename_ED = os.path.join(directory,prefix+'ED'+suffix+'.dat') if fst['CompElast']>0 else 'none' + filename_IW = os.path.join(directory,prefix+'IW'+suffix+'.dat') if fst['CompInflow']>0 else 'none' + filename_BD = os.path.join(directory,prefix+'BD'+suffix+'.dat') if fst['CompElast']==2 else 'none' + filename_AD = os.path.join(directory,prefix+'AD'+suffix+'.dat') if fst['CompAero']>0 else 'none' + filename_HD = os.path.join(directory,prefix+'HD'+suffix+'.dat') if fst['CompHydro']>0 else 'none' + filename_SD = os.path.join(directory,prefix+'SD'+suffix+'.dat') if fst['CompSub']>0 else 'none' + filename_MD = os.path.join(directory,prefix+'MD'+suffix+'.dat') if fst['CompMooring']>0 else 'none' + filename_SvD = os.path.join(directory,prefix+'SvD'+suffix+'.dat') if fst['CompServo']>0 else 'none' + filename_Ice = os.path.join(directory,prefix+'Ice'+suffix+'.dat') if fst['CompIce']>0 else 'none' + filename_ED_bld = os.path.join(directory,prefix+'ED_bld'+suffix+'.dat') if fst['CompElast']>0 else 'none' + filename_ED_twr = os.path.join(directory,prefix+'ED_twr'+suffix+'.dat') if fst['CompElast']>0 else 'none' + filename_BD_bld = os.path.join(directory,prefix+'BD_bld'+suffix+'.dat') if fst['CompElast']>0 else 'none' + # TODO AD Profiles and OLAF + + fst['EDFile'] = '"' + os.path.basename(filename_ED) + '"' + fst['BDBldFile(1)'] = '"' + os.path.basename(filename_BD) + '"' + fst['BDBldFile(2)'] = '"' + os.path.basename(filename_BD) + '"' + fst['BDBldFile(3)'] = '"' + os.path.basename(filename_BD) + '"' + fst['InflowFile'] = '"' + os.path.basename(filename_IW) + '"' + fst['AeroFile'] = '"' + os.path.basename(filename_AD) + '"' + fst['ServoFile'] = '"' + os.path.basename(filename_AD) + '"' + fst['HydroFile'] = '"' + os.path.basename(filename_HD) + '"' + fst['SubFile'] = '"' + os.path.basename(filename_SD) + '"' + fst['MooringFile'] = '"' + os.path.basename(filename_MD) + '"' + fst['IceFile'] = '"' + os.path.basename(filename_Ice)+ '"' + fst.write(filename) + + + ED = self.fst_vt['ElastoDyn'] + if fst['CompElast']>0: + ED['TwrFile'] = '"' + os.path.basename(filename_ED_twr)+ '"' + self.fst_vt['ElastoDynTower'].write(filename_ED_twr) + if fst['CompElast']==1: + if 'BldFile1' in ED.keys(): + ED['BldFile1'] = '"' + os.path.basename(filename_ED_bld)+ '"' + ED['BldFile2'] = '"' + os.path.basename(filename_ED_bld)+ '"' + ED['BldFile3'] = '"' + os.path.basename(filename_ED_bld)+ '"' + else: + ED['BldFile(1)'] = '"' + os.path.basename(filename_ED_bld)+ '"' + ED['BldFile(2)'] = '"' + os.path.basename(filename_ED_bld)+ '"' + ED['BldFile(3)'] = '"' + os.path.basename(filename_ED_bld)+ '"' + self.fst_vt['ElastoDynBlade'].write(filename_ED_bld) + + elif fst['CompElast']==2: + BD = self.fst_vt['BeamDyn'] + BD['BldFile'] = '"'+os.path.basename(filename_BD_bld)+'"' + self.fst_vt['BeamDynBlade'].write(filename_BD_bld) # TODO TODO pick up the proper blade file! + BD.write(filename_BD) + ED.write(filename_ED) + + + if fst['CompInflow']>0: + self.fst_vt['InflowWind'].write(filename_IW) + + if fst['CompAero']>0: + self.fst_vt['AeroDyn15'].write(filename_AD) + # TODO other files + + if fst['CompServo']>0: + self.fst_vt['ServoDyn'].write(filename_SvD) + + if fst['CompHydro']==1: + self.fst_vt['HydroDyn'].write(filename_HD) + + if fst['CompSub']==1: + self.fst_vt['SubDyn'].write(filename_SD) + elif fst['CompSub']==2: + raise NotImplementedError() + + if fst['CompMooring']==1: + self.fst_vt['MAP'].write(filename_MD) + if self.fst_vt['Fst']['CompMooring']==2: + self.fst_vt['MoorDyn'].write(filename_MD) + + return filename + + + + def __repr__(self): + s=''+'\n' + s+='filename : '+self.filename+'\n' + s+='readlist : {}'.format(self.readlist)+'\n' + s+='version : '+self.version+'\n' + s+='AD version : '+self.ADversion+'\n' + s+='fst_vt : dict{'+','.join([k for k,v in self.fst_vt.items() if v is not None])+'}\n' + s+='inputFiles : {}\n'.format(self.inputFiles) + s+='inputFilesRead : {}\n'.format(self.inputFilesRead) + s+='\n' + return s + +if __name__ == "__main__": + fst=FASTInputDeck('NREL5MW.fst') + print(fst) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py new file mode 100644 index 0000000000..97ff36952a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py @@ -0,0 +1,2104 @@ +import numpy as np +import os +import pandas as pd +import re +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + +__all__ = ['FASTInputFile'] + +TABTYPE_NOT_A_TAB = 0 +TABTYPE_NUM_WITH_HEADER = 1 +TABTYPE_NUM_WITH_HEADERCOM = 2 +TABTYPE_NUM_NO_HEADER = 4 +TABTYPE_NUM_BEAMDYN = 5 +TABTYPE_NUM_SUBDYNOUT = 7 +TABTYPE_MIX_WITH_HEADER = 6 +TABTYPE_FIL = 3 +TABTYPE_FMT = 9999 # TODO + + + +class FASTInputFile(File): + """ + Read/write an OpenFAST input file. The object behaves like a dictionary. + A generic reader/writer is used at first. + If a dedicated OpenFAST input file is detected, additional functionalities are added. + See at the end of this file for dedicated class that can be used instead of this generic reader. + + Main methods + ------------ + - read, write, toDataFrame, keys, toGraph + + + Return an object which inherits from FASTInputFileBase + - The generic file reader is run first + - If a specific file format/module is detected, a fixed file format object is returned + The fixed file format have additional outputs, sanity checks and methods + """ + + @staticmethod + def defaultExtensions(): + return ['.dat','.fst','.txt','.fstf','.dvr'] + + @staticmethod + def formatName(): + return 'FAST input file' + + def __init__(self, filename=None, **kwargs): + self._fixedfile = None + self.basefile = FASTInputFileBase(filename, **kwargs) # Generic fileformat + + @property + def fixedfile(self): + if self._fixedfile is not None: + return self._fixedfile + elif len(self.basefile.data)>0: + self._fixedfile=self.fixedFormat() + return self._fixedfile + else: + return self.basefile + + @property + def module(self): + if self._fixedfile is None: + return self.basefile.module + else: + return self._fixedfile.module + + @property + def hasNodal(self): + if self._fixedfile is None: + return self.basefile.hasNodal + else: + return self._fixedfile.hasNodal + + def getID(self, label): + return self.basefile.getID(label) + + @property + def data(self): + return self.basefile.data + + def fixedFormat(self): + # --- Creating a dedicated Child + KEYS = list(self.basefile.keys()) + if 'NumBlNds' in KEYS: + return ADBladeFile.from_fast_input_file(self.basefile) + elif 'rhoinf' in KEYS: + return BDFile.from_fast_input_file(self.basefile) + elif 'NBlInpSt' in KEYS: + return EDBladeFile.from_fast_input_file(self.basefile) + elif 'NTwInpSt' in KEYS: + return EDTowerFile.from_fast_input_file(self.basefile) + elif 'MassMatrix' in KEYS and self.module == 'ExtPtfm': + return ExtPtfmFile.from_fast_input_file(self.basefile) + elif 'NumCoords' in KEYS and 'InterpOrd' in KEYS: + return ADPolarFile.from_fast_input_file(self.basefile) + else: + # TODO: HD, SD, SvD, ED, AD, EDbld, BD, + #print('>>>>>>>>>>>> NO FILEFORMAT', KEYS) + return self.basefile + + def read(self, filename=None): + return self.fixedfile.read(filename) + + def write(self, filename=None): + return self.fixedfile.write(filename) + + def toDataFrame(self): + return self.fixedfile.toDataFrame() + + def toString(self): + return self.fixedfile.toString() + + def keys(self): + return self.fixedfile.keys() + + def toGraph(self, **kwargs): + return self.fixedfile.toGraph(**kwargs) + + @property + def filename(self): + return self.fixedfile.filename + + @property + def comment(self): + return self.fixedfile.comment + + @comment.setter + def comment(self,comment): + self.fixedfile.comment = comment + + def __iter__(self): + return self.fixedfile.__iter__() + + def __next__(self): + return self.fixedfile.__next__() + + def __setitem__(self,key,item): + return self.fixedfile.__setitem__(key,item) + + def __getitem__(self,key): + return self.fixedfile.__getitem__(key) + + def __repr__(self): + return self.fixedfile.__repr__() + #s ='Fast input file: {}\n'.format(self.filename) + #return s+'\n'.join(['{:15s}: {}'.format(d['label'],d['value']) for i,d in enumerate(self.data)]) + + +# --------------------------------------------------------------------------------} +# --- BASE INPUT FILE +# --------------------------------------------------------------------------------{ +class FASTInputFileBase(File): + """ + Read/write an OpenFAST input file. The object behaves like a dictionary. + + Main methods + ------------ + - read, write, toDataFrame, keys + + Main keys + --------- + The keys correspond to the keys used in the file. For instance for a .fst file: 'DT','TMax' + + Examples + -------- + + filename = 'AeroDyn.dat' + f = FASTInputFile(filename) + f['TwrAero'] = True + f['AirDens'] = 1.225 + f.write('AeroDyn_Changed.dat') + + """ + @staticmethod + def defaultExtensions(): + return ['.dat','.fst','.txt','.fstf','.dvr'] + + @staticmethod + def formatName(): + return 'FAST input file Base' + + def __init__(self, filename=None, **kwargs): + self._size=None + self.setData() # Init data + if filename: + self.filename = filename + self.read() + + def setData(self, filename=None, data=None, hasNodal=False, module=None): + """ Set the data of this object. This object shouldn't store anything else. """ + if data is None: + self.data = [] + else: + self.data = data + self.hasNodal = hasNodal + self.module = module + self.filename = filename + + def keys(self): + self.labels = [ d['label'] for i,d in enumerate(self.data) if (not d['isComment']) and (i not in self._IComment)] + return self.labels + + def getID(self,label): + i=self.getIDSafe(label) + if i<0: + raise KeyError('Variable `'+ label+'` not found in FAST file:'+self.filename) + else: + return i + def getIDs(self,label): + I=[] + # brute force search + for i in range(len(self.data)): + d = self.data[i] + if d['label'].lower()==label.lower(): + I.append(i) + if len(I)<0: + raise KeyError('Variable `'+ label+'` not found in FAST file:'+self.filename) + else: + return I + + def getIDSafe(self,label): + # brute force search + for i in range(len(self.data)): + d = self.data[i] + if d['label'].lower()==label.lower(): + return i + return -1 + + # Making object an iterator + def __iter__(self): + self.iCurrent=-1 + self.iMax=len(self.data)-1 + return self + + def __next__(self): # Python 2: def next(self) + if self.iCurrent > self.iMax: + raise StopIteration + else: + self.iCurrent += 1 + return self.data[self.iCurrent] + + # Making it behave like a dictionary + def __setitem__(self, key, item): + I = self.getIDs(key) + for i in I: + if self.data[i]['tabType'] != TABTYPE_NOT_A_TAB: + # For tables, we automatically update variable that stores the dimension + nRows = len(item) + if 'tabDimVar' in self.data[i].keys(): + dimVar = self.data[i]['tabDimVar'] + iDimVar = self.getID(dimVar) + self.data[iDimVar]['value'] = nRows # Avoiding a recursive call to __setitem__ here + else: + pass + self.data[i]['value'] = item + + def __getitem__(self,key): + i = self.getID(key) + return self.data[i]['value'] + + def __repr__(self): + s ='Fast input file base: {}\n'.format(self.filename) + return s+'\n'.join(['{:15s}: {}'.format(d['label'],d['value']) for i,d in enumerate(self.data)]) + + def addKeyVal(self, key, val, descr=None): + i=self.getIDSafe(key) + if i<0: + d = getDict() + else: + d = self.data[i] + d['label']=key + d['value']=val + if descr is not None: + d['descr']=descr + if i<0: + self.data.append(d) + + def addValKey(self,val,key,descr=None): + self.addKeyVal(key, val, descr) + + def addComment(self, comment='!'): + d=getDict() + d['isComment'] = True + d['value'] = comment + self.data.append(d) + + def addTable(self, label, tab, cols=None, units=None, tabType=1, tabDimVar=None): + d=getDict() + d['label'] = label + d['value'] = tab + d['tabType'] = tabType + d['tabDimVar'] = tabDimVar + d['tabColumnNames'] = cols + d['tabUnits'] = units + self.data.append(d) + + @property + def comment(self): + return '\n'.join([self.data[i]['value'] for i in self._IComment]) + + @comment.setter + def comment(self, comment): + splits = comment.split('\n') + for i,com in zip(self._IComment, splits): + self.data[i]['value'] = com + self.data[i]['label'] = '' + self.data[i]['descr'] = '' + self.data[i]['isComment'] = True + + @property + def _IComment(self): + """ return indices of comment line""" + return [1] # Typical OpenFAST files have comment on second line [1] + + + def read(self, filename=None): + if filename: + self.filename = filename + if self.filename: + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + self._read() + else: + raise Exception('No filename provided') + + def _read(self): + + # --- Tables that can be detected based on the "Value" (first entry on line) + # TODO members for BeamDyn with mutliple key point ####### TODO PropSetID is Duplicate SubDyn and used in HydroDyn + NUMTAB_FROM_VAL_DETECT = ['HtFract' , 'TwrElev' , 'BlFract' , 'Genspd_TLU' , 'BlSpn' , 'HvCoefID' , 'AxCoefID' , 'JointID' , 'Dpth' , 'FillNumM' , 'MGDpth' , 'SimplCd' , 'RNodes' , 'kp_xr' , 'mu1' , 'TwrHtFr' , 'TwrRe' , 'WT_X'] + NUMTAB_FROM_VAL_DIM_VAR = ['NTwInpSt' , 'NumTwrNds' , 'NBlInpSt' , 'DLL_NumTrq' , 'NumBlNds' , 'NHvCoef' , 'NAxCoef' , 'NJoints' , 'NCoefDpth' , 'NFillGroups' , 'NMGDepths' , 1 , 'BldNodes' , 'kp_total' , 1 , 'NTwrHt' , 'NTwrRe' , 'NumTurbines'] + NUMTAB_FROM_VAL_VARNAME = ['TowProp' , 'TowProp' , 'BldProp' , 'DLLProp' , 'BldAeroNodes' , 'HvCoefs' , 'AxCoefs' , 'Joints' , 'DpthProp' , 'FillGroups' , 'MGProp' , 'SmplProp' , 'BldAeroNodes' , 'MemberGeom' , 'DampingCoeffs' , 'TowerProp' , 'TowerRe', 'WindTurbines'] + NUMTAB_FROM_VAL_NHEADER = [2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 2 , 2 , 1 , 1 , 2 ] + NUMTAB_FROM_VAL_TYPE = ['num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'mix' , 'num' , 'num' , 'num' , 'num' , 'mix'] + # SubDyn + NUMTAB_FROM_VAL_DETECT += [ 'RJointID' , 'IJointID' , 'COSMID' , 'CMJointID' ] + NUMTAB_FROM_VAL_DIM_VAR += [ 'NReact' , 'NInterf' , 'NCOSMs' , 'NCmass' ] + NUMTAB_FROM_VAL_VARNAME += [ 'BaseJoints' , 'InterfaceJoints' , 'MemberCosineMatrix' , 'ConcentratedMasses'] + NUMTAB_FROM_VAL_NHEADER += [ 2 , 2 , 2 , 2 ] + NUMTAB_FROM_VAL_TYPE += [ 'mix' , 'num' , 'num' , 'num' ] + # AD Driver old and new + NUMTAB_FROM_VAL_DETECT += [ 'WndSpeed' , 'HWndSpeed' ] + NUMTAB_FROM_VAL_DIM_VAR += [ 'NumCases' , 'NumCases' ] + NUMTAB_FROM_VAL_VARNAME += [ 'Cases' , 'Cases' ] + NUMTAB_FROM_VAL_NHEADER += [ 2 , 2 ] + NUMTAB_FROM_VAL_TYPE += [ 'num' , 'num' ] + + # --- Tables that can be detected based on the "Label" (second entry on line) + # NOTE: MJointID1, used by SubDyn and HydroDyn + NUMTAB_FROM_LAB_DETECT = ['NumAlf' , 'F_X' , 'MemberCd1' , 'MJointID1' , 'NOutLoc' , 'NOutCnt' , 'PropD' ] + NUMTAB_FROM_LAB_DIM_VAR = ['NumAlf' , 'NKInpSt' , 'NCoefMembers' , 'NMembers' , 'NMOutputs' , 'NMOutputs' , 'NPropSets' ] + NUMTAB_FROM_LAB_VARNAME = ['AFCoeff' , 'TMDspProp' , 'MemberProp' , 'Members' , 'MemberOuts' , 'MemberOuts' , 'SectionProp' ] + NUMTAB_FROM_LAB_NHEADER = [2 , 2 , 2 , 2 , 2 , 2 , 2 ] + NUMTAB_FROM_LAB_NOFFSET = [0 , 0 , 0 , 0 , 0 , 0 , 0 ] + NUMTAB_FROM_LAB_TYPE = ['num' , 'num' , 'num' , 'mix' , 'num' , 'sdout' , 'num' ] + # MoorDyn Version 1 and 2 (with AUTO for LAB_DIM_VAR) + NUMTAB_FROM_LAB_DETECT += ['Diam' ,'Type' ,'LineType' , 'Attachment'] + NUMTAB_FROM_LAB_DIM_VAR += ['NTypes:AUTO','NConnects' ,'NLines:AUTO' , 'AUTO'] + NUMTAB_FROM_LAB_VARNAME += ['LineTypes' ,'ConnectionProp' ,'LineProp' , 'Points'] + NUMTAB_FROM_LAB_NHEADER += [ 2 , 2 , 2 , 2 ] + NUMTAB_FROM_LAB_NOFFSET += [ 0 , 0 , 0 , 0 ] + NUMTAB_FROM_LAB_TYPE += ['mix' ,'mix' ,'mix' , 'mix'] + # SubDyn + NUMTAB_FROM_LAB_DETECT += ['GuyanDampSize' , 'YoungE' , 'YoungE' , 'EA' , 'MatDens' ] + NUMTAB_FROM_LAB_DIM_VAR += [6 , 'NPropSets', 'NXPropSets', 'NCablePropSets' , 'NRigidPropSets'] + NUMTAB_FROM_LAB_VARNAME += ['GuyanDampMatrix' , 'BeamProp' , 'BeamPropX' , 'CableProp' , 'RigidProp' ] + NUMTAB_FROM_LAB_NHEADER += [0 , 2 , 2 , 2 , 2 ] + NUMTAB_FROM_LAB_NOFFSET += [1 , 0 , 0 , 0 , 0 ] + NUMTAB_FROM_LAB_TYPE += ['num' , 'num' , 'num' , 'num' , 'num' ] + # OLAF + NUMTAB_FROM_LAB_DETECT += ['GridName' ] + NUMTAB_FROM_LAB_DIM_VAR += ['nGridOut' ] + NUMTAB_FROM_LAB_VARNAME += ['GridOutputs'] + NUMTAB_FROM_LAB_NHEADER += [0 ] + NUMTAB_FROM_LAB_NOFFSET += [2 ] + NUMTAB_FROM_LAB_TYPE += ['mix' ] + + FILTAB_FROM_LAB_DETECT = ['FoilNm' ,'AFNames'] + FILTAB_FROM_LAB_DIM_VAR = ['NumFoil','NumAFfiles'] + FILTAB_FROM_LAB_VARNAME = ['FoilNm' ,'AFNames'] + + # Using lower case to be more tolerant.. + NUMTAB_FROM_VAL_DETECT_L = [s.lower() for s in NUMTAB_FROM_VAL_DETECT] + NUMTAB_FROM_LAB_DETECT_L = [s.lower() for s in NUMTAB_FROM_LAB_DETECT] + FILTAB_FROM_LAB_DETECT_L = [s.lower() for s in FILTAB_FROM_LAB_DETECT] + + # Reset data + self.data = [] + self.hasNodal=False + self.module = None + #with open(self.filename, 'r', errors="surrogateescape") as f: + with open(self.filename, 'r', errors="surrogateescape") as f: + lines=f.read().splitlines() + # IF NEEDED> DO THE FOLLOWING FORMATTING: + #lines = [str(l).encode('utf-8').decode('ascii','ignore') for l in f.read().splitlines()] + + # Fast files start with ! or - + #if lines[0][0]!='!' and lines[0][0]!='-': + # raise Exception('Fast file do not start with ! or -, is it the right format?') + + # Special filetypes + if detectAndReadExtPtfmSE(self, lines): + return + if self.detectAndReadAirfoilAD14(lines): + return + + # Parsing line by line, storing each line into a dictionary + i=0 + nComments = 0 + nWrongLabels = 0 + allowSpaceSeparatedList=False + iTab = 0 + + labOffset='' + while i0 \ + or line.upper().find('MESH-BASED OUTPUTS')>0 \ + or line.upper().find('OUTPUT CHANNELS' )>0: # "OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)'" + # TODO, lazy implementation so far, MAKE SUB FUNCTION + parts = re.match(r'^\W*\w+', line) + if parts: + firstword = parts.group(0).strip() + else: + raise NotImplementedError + remainer = re.sub(r'^\W*\w+\W*', '', line) + # Parsing outlist, and then we continue at a new "i" (to read END etc.) + OutList,i = parseFASTOutList(lines,i+1) + d = getDict() + if self.hasNodal and not firstword.endswith('_Nodal'): + d['label'] = firstword+'_Nodal' + else: + d['label'] = firstword + d['descr'] = remainer + d['tabType'] = TABTYPE_FIL # TODO + d['value'] = ['']+OutList + self.data.append(d) + if i>=len(lines): + break + + # --- Here we cheat and force an exit of the input file + # The reason for this is that some files have a lot of things after the END, which will result in the file being intepreted as a wrong format due to too many comments + if i+20 or lines[i+2].lower().find('bldnd_bloutnd')>0): + self.hasNodal=True + else: + self.data.append(parseFASTInputLine('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)',i+1)) + self.data.append(parseFASTInputLine('---------------------------------------------------------------------------------------',i+2)) + break + elif line.upper().find('SSOUTLIST' )>0 or line.upper().find('SDOUTLIST' )>0: + # SUBDYN Outlist doesn not follow regular format + self.data.append(parseFASTInputLine(line,i)) + # OUTLIST Exception for BeamDyn + OutList,i = parseFASTOutList(lines,i+1) + # TODO + for o in OutList: + d = getDict() + d['isComment'] = True + d['value']=o + self.data.append(d) + # --- Here we cheat and force an exit of the input file + self.data.append(parseFASTInputLine('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)',i+1)) + self.data.append(parseFASTInputLine('---------------------------------------------------------------------------------------',i+2)) + break + elif line.upper().find('ADDITIONAL STIFFNESS')>0: + # TODO, lazy implementation so far, MAKE SUB FUNCTION + self.data.append(parseFASTInputLine(line,i)) + i +=1 + KDAdd = [] + for _ in range(19): + KDAdd.append(lines[i]) + i +=1 + d = getDict() + d['label'] = 'KDAdd' # TODO + d['tabType'] = TABTYPE_FIL # TODO + d['value'] = KDAdd + self.data.append(d) + if i>=len(lines): + break + elif line.upper().find('DISTRIBUTED PROPERTIES')>0: + self.data.append(parseFASTInputLine(line,i)); + i+=1; + self.readBeamDynProps(lines,i) + return + elif line.upper().find('OUTPUTS')>0: + if 'Points' in self.keys() and 'dtM' in self.keys(): + OutList,i = parseFASTOutList(lines,i+1) + d = getDict() + d['label'] = 'Outlist' + d['descr'] = '' + d['tabType'] = TABTYPE_FIL # TODO + d['value'] = OutList + self.addComment('------------------------ OUTPUTS --------------------------------------------') + self.data.append(d) + self.addComment('END') + self.addComment('------------------------- need this line --------------------------------------') + return + + # --- Parsing of standard lines: value(s) key comment + line = lines[i] + d = parseFASTInputLine(line,i,allowSpaceSeparatedList) + labelRaw =d['label'].lower() + d['label']+=labOffset + + # --- Handling of special files + if labelRaw=='kp_total': + # BeamDyn has weird space speparated list around keypoint definition + allowSpaceSeparatedList=True + elif labelRaw=='numcoords': + # TODO, lazy implementation so far, MAKE SUB FUNCTION + if isStr(d['value']): + if d['value'][0]=='@': + # it's a ref to the airfoil coord file + pass + else: + if not strIsInt(d['value']): + raise WrongFormatError('Wrong value of NumCoords') + if int(d['value'])<=0: + pass + else: + self.data.append(d); i+=1; + # 3 comment lines + self.data.append(parseFASTInputLine(lines[i],i)); i+=1; + self.data.append(parseFASTInputLine(lines[i],i)); i+=1; + self.data.append(parseFASTInputLine(lines[i],i)); i+=1; + splits=cleanAfterChar(cleanLine(lines[i]),'!').split() + # Airfoil ref point + try: + pos=[float(splits[0]), float(splits[1])] + except: + raise WrongFormatError('Wrong format while reading coordinates of airfoil reference') + i+=1 + d = getDict() + d['label'] = 'AirfoilRefPoint' + d['value'] = pos + self.data.append(d) + # 2 comment lines + self.data.append(parseFASTInputLine(lines[i],i)); i+=1; + self.data.append(parseFASTInputLine(lines[i],i)); i+=1; + # Table of coordinats itself + d = getDict() + d['label'] = 'AirfoilCoord' + d['tabDimVar'] = 'NumCoords' + d['tabType'] = TABTYPE_NUM_WITH_HEADERCOM + nTabLines = self[d['tabDimVar']]-1 # SOMEHOW ONE DATA POINT LESS + d['value'], d['tabColumnNames'],_ = parseFASTNumTable(self.filename,lines[i:i+nTabLines+1],nTabLines,i,1) + d['tabUnits'] = ['(-)','(-)'] + self.data.append(d) + break + + elif labelRaw=='re': + try: + nAirfoilTab = self['NumTabs'] + iTab +=1 + if nAirfoilTab>1: + labOffset ='_'+str(iTab) + d['label']=labelRaw+labOffset + except: + # Unsteady driver input file... + pass + + + #print('label>',d['label'],'<',type(d['label'])); + #print('value>',d['value'],'<',type(d['value'])); + #print(isStr(d['value'])) + #if isStr(d['value']): + # print(d['value'].lower() in NUMTAB_FROM_VAL_DETECT_L) + + + # --- Handling of tables + if isStr(d['value']) and d['value'].lower() in NUMTAB_FROM_VAL_DETECT_L: + # Table with numerical values, + ii = NUMTAB_FROM_VAL_DETECT_L.index(d['value'].lower()) + tab_type = NUMTAB_FROM_VAL_TYPE[ii] + if tab_type=='num': + d['tabType'] = TABTYPE_NUM_WITH_HEADER + else: + d['tabType'] = TABTYPE_MIX_WITH_HEADER + d['label'] = NUMTAB_FROM_VAL_VARNAME[ii]+labOffset + d['tabDimVar'] = NUMTAB_FROM_VAL_DIM_VAR[ii] + nHeaders = NUMTAB_FROM_VAL_NHEADER[ii] + nTabLines=0 + if isinstance(d['tabDimVar'],int): + nTabLines = d['tabDimVar'] + else: + nTabLines = self[d['tabDimVar']] + #print('Reading table {} Dimension {} (based on {})'.format(d['label'],nTabLines,d['tabDimVar'])); + d['value'], d['tabColumnNames'], d['tabUnits'] = parseFASTNumTable(self.filename,lines[i:i+nTabLines+nHeaders], nTabLines, i, nHeaders, tableType=tab_type, varNumLines=d['tabDimVar']) + i += nTabLines+nHeaders-1 + + # --- Temporary hack for e.g. SubDyn, that has duplicate table, impossible to detect in the current way... + # So we remove the element form the list one read + del NUMTAB_FROM_VAL_DETECT[ii] + del NUMTAB_FROM_VAL_DIM_VAR[ii] + del NUMTAB_FROM_VAL_VARNAME[ii] + del NUMTAB_FROM_VAL_NHEADER[ii] + del NUMTAB_FROM_VAL_TYPE [ii] + del NUMTAB_FROM_VAL_DETECT_L[ii] + + elif isStr(labelRaw) and labelRaw in NUMTAB_FROM_LAB_DETECT_L: + ii = NUMTAB_FROM_LAB_DETECT_L.index(labelRaw) + tab_type = NUMTAB_FROM_LAB_TYPE[ii] + # Special case for airfoil data, the table follows NumAlf, so we add d first + doDelete =True + if labelRaw=='numalf': + doDelete =False + d['tabType']=TABTYPE_NOT_A_TAB + self.data.append(d) + # Creating a new dictionary for the table + d = {'value':None, 'label':'NumAlf'+labOffset, 'isComment':False, 'descr':'', 'tabType':None} + i += 1 + nHeaders = NUMTAB_FROM_LAB_NHEADER[ii] + nOffset = NUMTAB_FROM_LAB_NOFFSET[ii] + if nOffset>0: + # Creating a dictionary for that entry + dd = {'value':d['value'], 'label':d['label']+labOffset, 'isComment':False, 'descr':d['descr'], 'tabType':TABTYPE_NOT_A_TAB} + self.data.append(dd) + + d['label'] = NUMTAB_FROM_LAB_VARNAME[ii] + if d['label'].lower()=='afcoeff' : + d['tabType'] = TABTYPE_NUM_WITH_HEADERCOM + else: + if tab_type=='num': + d['tabType'] = TABTYPE_NUM_WITH_HEADER + elif tab_type=='sdout': + d['tabType'] = TABTYPE_NUM_SUBDYNOUT + else: + d['tabType'] = TABTYPE_MIX_WITH_HEADER + # Finding table dimension (number of lines) + tabDimVar = NUMTAB_FROM_LAB_DIM_VAR[ii] + if isinstance(tabDimVar, int): # dimension hardcoded + d['tabDimVar'] = tabDimVar + nTabLines = d['tabDimVar'] + else: + # We either use a variable name or "AUTO" to find the number of rows + tabDimVars = tabDimVar.split(':') + for tabDimVar in tabDimVars: + d['tabDimVar'] = tabDimVar + if tabDimVar=='AUTO': + # Determine table dimension automatically + nTabLines = findNumberOfTableLines(lines[i+nHeaders:], break_chars=['---','!','#']) + break + else: + try: + nTabLines = self[tabDimVar+labOffset] + break + except KeyError: + #print('Cannot determine table dimension using {}'.format(tabDimVar)) + # Hopefully this table has AUTO as well + pass + + d['label'] += labOffset + #print('Reading table {} Dimension {} (based on {})'.format(d['label'],nTabLines,d['tabDimVar'])); + d['value'], d['tabColumnNames'], d['tabUnits'] = parseFASTNumTable(self.filename,lines[i:i+nTabLines+nHeaders+nOffset],nTabLines,i, nHeaders, tableType=tab_type, nOffset=nOffset, varNumLines=d['tabDimVar']) + i += nTabLines+1-nOffset + + # --- Temporary hack for e.g. SubDyn, that has duplicate table, impossible to detect in the current way... + # So we remove the element form the list one read + if doDelete: + del NUMTAB_FROM_LAB_DETECT[ii] + del NUMTAB_FROM_LAB_DIM_VAR[ii] + del NUMTAB_FROM_LAB_VARNAME[ii] + del NUMTAB_FROM_LAB_NHEADER[ii] + del NUMTAB_FROM_LAB_NOFFSET[ii] + del NUMTAB_FROM_LAB_TYPE [ii] + del NUMTAB_FROM_LAB_DETECT_L[ii] + + elif isStr(d['label']) and d['label'].lower() in FILTAB_FROM_LAB_DETECT_L: + ii = FILTAB_FROM_LAB_DETECT_L.index(d['label'].lower()) + d['label'] = FILTAB_FROM_LAB_VARNAME[ii]+labOffset + d['tabDimVar'] = FILTAB_FROM_LAB_DIM_VAR[ii] + d['tabType'] = TABTYPE_FIL + nTabLines = self[d['tabDimVar']] + #print('Reading table {} Dimension {} (based on {})'.format(d['label'],nTabLines,d['tabDimVar'])); + d['value'] = parseFASTFilTable(lines[i:i+nTabLines],nTabLines,i) + i += nTabLines-1 + + + + self.data.append(d) + i += 1 + # --- Safety checks + if d['isComment']: + #print(line) + nComments +=1 + else: + if hasSpecialChars(d['label']): + nWrongLabels +=1 + #print('label>',d['label'],'<',type(d['label']),line); + if i>3: # first few lines may be comments, we allow it + #print('Line',i,'Label:',d['label']) + raise WrongFormatError('Special Character found in Label: `{}`, for line: `{}`'.format(d['label'],line)) + if len(d['label'])==0: + nWrongLabels +=1 + if nComments>len(lines)*0.35: + #print('Comment fail',nComments,len(lines),self.filename) + raise WrongFormatError('Most lines were read as comments, probably not a FAST Input File: {}'.format(self.filename)) + if nWrongLabels>len(lines)*0.10: + #print('Label fail',nWrongLabels,len(lines),self.filename) + raise WrongFormatError('Too many lines with wrong labels, probably not a FAST Input File {}:'.format(self.filename)) + + # --- END OF FOR LOOP ON LINES + + # --- PostReading checks + labels = self.keys() + duplicates = set([x for x in labels if (labels.count(x) > 1) and x!='OutList' and x.strip()!='-']) + if len(duplicates)>0: + print('[WARN] Duplicate labels found in file: '+self.filename) + print(' Duplicates: '+', '.join(duplicates)) + print(' It\'s strongly recommended to make them unique! ') +# except WrongFormatError as e: +# raise WrongFormatError('Fast File {}: '.format(self.filename)+'\n'+e.args[0]) +# except Exception as e: +# raise e +# # print(e) +# raise Exception('Fast File {}: '.format(self.filename)+'\n'+e.args[0]) + self._lines = lines + + + def toString(self): + s='' + # Special file formats, TODO subclass + def toStringVLD(val,lab,descr): + val='{}'.format(val) + lab='{}'.format(lab) + if len(val)<13: + val='{:13s}'.format(val) + if len(lab)<13: + lab='{:13s}'.format(lab) + return val+' '+lab+' - '+descr.strip().lstrip('-').lstrip() + + def toStringIntFloatStr(x): + try: + if int(x)==x: + s='{:15.0f}'.format(x) + else: + s='{:15.8e}'.format(x) + except: + s=x + return s + + def beamdyn_section_mat_tostring(x,K,M): + def mat_tostring(M,fmt='24.16e'): + return '\n'.join([' '+' '.join(['{:24.16E}'.format(m) for m in M[i,:]]) for i in range(np.size(M,1))]) + s='' + s+='{:.6f}\n'.format(x) + s+=mat_tostring(K) + #s+=np.array2string(K) + s+='\n' + s+='\n' + s+=mat_tostring(M) + #s+=np.array2string(M) + s+='\n' + s+='\n' + return s + + for i in range(len(self.data)): + d=self.data[i] + if d['isComment']: + s+='{}'.format(d['value']) + elif d['tabType']==TABTYPE_NOT_A_TAB: + if isinstance(d['value'], list): + sList=', '.join([str(x) for x in d['value']]) + s+=toStringVLD(sList, d['label'], d['descr']) + else: + s+=toStringVLD(d['value'],d['label'],d['descr']) + elif d['tabType']==TABTYPE_NUM_WITH_HEADER: + if d['tabColumnNames'] is not None: + s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) + #s+=d['descr'] # Not ready for that + if d['tabUnits'] is not None: + s+='\n' + s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) + newline='\n' + else: + newline='' + if np.size(d['value'],0) > 0 : + s+=newline + s+='\n'.join('\t'.join( ('{:15.0f}'.format(x) if int(x)==x else '{:15.8e}'.format(x) ) for x in y) for y in d['value']) + elif d['tabType']==TABTYPE_MIX_WITH_HEADER: + s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) + if d['tabUnits'] is not None: + s+='\n' + s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) + if np.size(d['value'],0) > 0 : + s+='\n' + s+='\n'.join('\t'.join(toStringIntFloatStr(x) for x in y) for y in d['value']) + elif d['tabType']==TABTYPE_NUM_WITH_HEADERCOM: + s+='! {}\n'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) + s+='! {}\n'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) + s+='\n'.join('\t'.join('{:15.8e}'.format(x) for x in y) for y in d['value']) + elif d['tabType']==TABTYPE_FIL: + #f.write('{} {} {}\n'.format(d['value'][0],d['tabDetect'],d['descr'])) + label = d['label'] + if 'kbot' in self.keys(): # Moordyn has no 'OutList' label.. + label='' + if len(d['value'])==1: + s+='{} {} {}'.format(d['value'][0], label, d['descr']) # TODO? + else: + s+='{} {} {}\n'.format(d['value'][0], label, d['descr']) # TODO? + s+='\n'.join(fil for fil in d['value'][1:]) + elif d['tabType']==TABTYPE_NUM_BEAMDYN: + # TODO use dedicated sub-class + data = d['value'] + Cols =['Span'] + Cols+=['K{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] + Cols+=['M{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] + for i in np.arange(len(data['span'])): + x = data['span'][i] + K = data['K'][i] + M = data['M'][i] + s += beamdyn_section_mat_tostring(x,K,M) + elif d['tabType']==TABTYPE_NUM_SUBDYNOUT: + data = d['value'] + s+='{}\n'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) + s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) + if np.size(d['value'],0) > 0 : + s+='\n' + s+='\n'.join('\t'.join('{:15.0f}'.format(x) for x in y) for y in data) + else: + raise Exception('Unknown table type for variable {}'.format(d)) + if i0: + print('[WARN] Creating directory: ',dirname) + os.makedirs(dirname) + + self._write() + else: + raise Exception('No filename provided') + + def _writeSanityChecks(self): + """ Sanity checks before write""" + pass + + def _write(self): + self._writeSanityChecks() + with open(self.filename,'w') as f: + f.write(self.toString()) + + def toDataFrame(self): + return self._toDataFrame() + + def _toDataFrame(self): + dfs={} + + for i in range(len(self.data)): + d=self.data[i] + if d['tabType'] in [TABTYPE_NUM_WITH_HEADER, TABTYPE_NUM_WITH_HEADERCOM, TABTYPE_NUM_NO_HEADER, TABTYPE_MIX_WITH_HEADER]: + Val= d['value'] + if d['tabUnits'] is None: + Cols=d['tabColumnNames'] + else: + Cols=['{}_{}'.format(c,u.replace('(','[').replace(')',']')) for c,u in zip(d['tabColumnNames'],d['tabUnits'])] + #print(Val) + #print(Cols) + + # --- Adding some useful tabulated data for some files (Shapefunctions, polar) + + if self.getIDSafe('TwFAM1Sh(2)')>0: + # Hack for tower files, we add the modes + # NOTE: we provide interpolated shape function just in case the resolution of the input file is low.. + x=Val[:,0] + Modes=np.zeros((x.shape[0],4)) + Modes[:,0] = x**2 * self['TwFAM1Sh(2)'] + x**3 * self['TwFAM1Sh(3)'] + x**4 * self['TwFAM1Sh(4)'] + x**5 * self['TwFAM1Sh(5)'] + x**6 * self['TwFAM1Sh(6)'] + Modes[:,1] = x**2 * self['TwFAM2Sh(2)'] + x**3 * self['TwFAM2Sh(3)'] + x**4 * self['TwFAM2Sh(4)'] + x**5 * self['TwFAM2Sh(5)'] + x**6 * self['TwFAM2Sh(6)'] + Modes[:,2] = x**2 * self['TwSSM1Sh(2)'] + x**3 * self['TwSSM1Sh(3)'] + x**4 * self['TwSSM1Sh(4)'] + x**5 * self['TwSSM1Sh(5)'] + x**6 * self['TwSSM1Sh(6)'] + Modes[:,3] = x**2 * self['TwSSM2Sh(2)'] + x**3 * self['TwSSM2Sh(3)'] + x**4 * self['TwSSM2Sh(4)'] + x**5 * self['TwSSM2Sh(5)'] + x**6 * self['TwSSM2Sh(6)'] + Val = np.hstack((Val,Modes)) + ShapeCols = [c+'_[-]' for c in ['ShapeForeAft1','ShapeForeAft2','ShapeSideSide1','ShapeSideSide2']] + Cols = Cols + ShapeCols + + name=d['label'] + + if name=='DampingCoeffs': + pass + else: + dfs[name]=pd.DataFrame(data=Val,columns=Cols) + elif d['tabType'] in [TABTYPE_NUM_BEAMDYN]: + span = d['value']['span'] + M = d['value']['M'] + K = d['value']['K'] + nSpan=len(span) + MM=np.zeros((nSpan,1+36+36)) + MM[:,0] = span + MM[:,1:37] = K.reshape(nSpan,36) + MM[:,37:] = M.reshape(nSpan,36) + Cols =['Span'] + Cols+=['K{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] + Cols+=['M{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] + # Putting the main terms first + IAll = range(1+36+36) + IMain= [0] + [i*6+i+1 for i in range(6)] + [i*6+i+37 for i in range(6)] + IOrg = IMain + [i for i in range(1+36+36) if i not in IMain] + Cols = [Cols[i] for i in IOrg] + data = MM[:,IOrg] + name=d['label'] + dfs[name]=pd.DataFrame(data=data,columns=Cols) + if len(dfs)==1: + dfs=dfs[list(dfs.keys())[0]] + return dfs + + def toGraph(self, **kwargs): + from .fast_input_file_graph import fastToGraph + return fastToGraph(self, **kwargs) + + + +# --------------------------------------------------------------------------------} +# --- SubReaders /detectors +# --------------------------------------------------------------------------------{ + + + def detectAndReadAirfoilAD14(self,lines): + if len(lines)<14: + return False + # Reading number of tables + L3 = lines[2].strip().split() + if len(L3)<=0: + return False + if not strIsInt(L3[0]): + return False + nTables=int(L3[0]) + # Reading table ID + L4 = lines[3].strip().split() + if len(L4)<=nTables: + return False + TableID=L4[:nTables] + if nTables==1: + TableID=[''] + # Keywords for file format + KW1=lines[12].strip().split() + KW2=lines[13].strip().split() + if len(KW1)>nTables and len(KW2)>nTables: + if KW1[nTables].lower()=='angle' and KW2[nTables].lower()=='minimum': + d = getDict(); d['isComment'] = True; d['value'] = lines[0]; self.data.append(d); + d = getDict(); d['isComment'] = True; d['value'] = lines[1]; self.data.append(d); + for i in range(2,14): + splits = lines[i].split() + #print(splits) + d = getDict() + d['label'] = ' '.join(splits[1:]) # TODO + d['descr'] = ' '.join(splits[1:]) # TODO + d['value'] = float(splits[0]) + self.data.append(d) + #pass + #for i in range(2,14): + nTabLines=0 + while 14+nTabLines0 : + nTabLines +=1 + #data = np.array([lines[i].strip().split() for i in range(14,len(lines)) if len(lines[i])>0]).astype(float) + #data = np.array([lines[i].strip().split() for i in takewhile(lambda x: len(lines[i].strip())>0, range(14,len(lines)-1))]).astype(float) + data = np.array([lines[i].strip().split() for i in range(14,nTabLines+14)]).astype(float) + #print(data) + d = getDict() + d['label'] = 'Polar' + d['tabDimVar'] = nTabLines + d['tabType'] = TABTYPE_NUM_NO_HEADER + d['value'] = data + if np.size(data,1)==1+nTables*3: + d['tabColumnNames'] = ['Alpha']+[n+l for l in TableID for n in ['Cl','Cd','Cm']] + d['tabUnits'] = ['(deg)']+['(-)' , '(-)' , '(-)']*nTables + elif np.size(data,1)==1+nTables*2: + d['tabColumnNames'] = ['Alpha']+[n+l for l in TableID for n in ['Cl','Cd']] + d['tabUnits'] = ['(deg)']+['(-)' , '(-)']*nTables + else: + d['tabColumnNames'] = ['col{}'.format(j) for j in range(np.size(data,1))] + self.data.append(d) + return True + + def readBeamDynProps(self,lines,iStart): + nStations=self['station_total'] + #M=np.zeros((nStations,1+36+36)) + M = np.zeros((nStations,6,6)) + K = np.zeros((nStations,6,6)) + span = np.zeros(nStations) + i=iStart; + try: + for j in range(nStations): + # Read span location + span[j]=float(lines[i]); i+=1; + # Read stiffness matrix + K[j,:,:]=np.array((' '.join(lines[i:i+6])).split()).astype(float).reshape(6,6) + i+=7 + # Read mass matrix + M[j,:,:]=np.array((' '.join(lines[i:i+6])).split()).astype(float).reshape(6,6) + i+=7 + except: + raise WrongFormatError('An error occured while reading section {}/{}'.format(j+1,nStations)) + d = getDict() + d['label'] = 'BeamProperties' + d['descr'] = '' + d['tabType'] = TABTYPE_NUM_BEAMDYN + d['value'] = {'span':span, 'K':K, 'M':M} + self.data.append(d) + + +# --------------------------------------------------------------------------------} +# --- Helper functions +# --------------------------------------------------------------------------------{ +def isStr(s): + return isinstance(s, str) + +def strIsFloat(s): + #return s.replace('.',',1').isdigit() + try: + float(s) + return True + except: + return False + +def strIsBool(s): + return s.lower() in ['true','false','t','f'] + +def strIsInt(s): + s = str(s) + if s[0] in ('-', '+'): + return s[1:].isdigit() + return s.isdigit() + +def strToBool(s): + return s.lower() in ['true','t'] + +def hasSpecialChars(s): + # fast allows for parenthesis + # For now we allow for - but that's because of BeamDyn geometry members + return not re.match("^[\"\'a-zA-Z0-9_()-]*$", s) + +def cleanLine(l): + # makes a string single space separated + l = l.replace('\t',' ') + l = ' '.join(l.split()) + l = l.strip() + return l + +def cleanAfterChar(l,c): + # remove whats after a character + n = l.find(c); + if n>0: + return l[:n] + else: + return l + +def getDict(): + return {'value':None, 'label':'', 'isComment':False, 'descr':'', 'tabType':TABTYPE_NOT_A_TAB} + +def _merge_value(splits): + + merged = splits.pop(0) + if merged[0] == '"': + while merged[-1] != '"': + merged += " "+splits.pop(0) + splits.insert(0, merged) + + + + +def parseFASTInputLine(line_raw,i,allowSpaceSeparatedList=False): + d = getDict() + #print(line_raw) + try: + # preliminary cleaning (Note: loss of formatting) + line = cleanLine(line_raw) + # Comment + if any(line.startswith(c) for c in ['#','!','--','==']) or len(line)==0: + d['isComment']=True + d['value']=line_raw + return d + if line.lower().startswith('end'): + sp =line.split() + if len(sp)>2 and sp[1]=='of': + d['isComment']=True + d['value']=line_raw + + # Detecting lists + List=[]; + iComma=line.find(',') + if iComma>0 and iComma<30: + fakeline=line.replace(' ',',') + fakeline=re.sub(',+',',',fakeline) + csplits=fakeline.split(',') + # Splitting based on comma and looping while it's numbers of booleans + ii=0 + s=csplits[ii] + #print(csplits) + while strIsFloat(s) or strIsBool(s) and ii=len(csplits): + raise WrongFormatError('Wrong number of list values') + s = csplits[ii] + #print('[INFO] Line {}: Found list: '.format(i),List) + # Defining value and remaining splits + if len(List)>=2: + d['value']=List + line_remaining=line + # eating line, removing each values + for iii in range(ii): + sValue=csplits[iii] + ipos=line_remaining.find(sValue) + line_remaining = line_remaining[ipos+len(sValue):] + splits=line_remaining.split() + iNext=0 + else: + # It's not a list, we just use space as separators + splits=line.split(' ') + _merge_value(splits) + s=splits[0] + + if strIsInt(s): + d['value']=int(s) + if allowSpaceSeparatedList and len(splits)>1: + if strIsInt(splits[1]): + d['value']=splits[0]+ ' '+splits[1] + elif strIsFloat(s): + d['value']=float(s) + elif strIsBool(s): + d['value']=strToBool(s) + else: + d['value']=s + iNext=1 + + # Extracting label (TODO, for now only second split) + bOK=False + while (not bOK) and iNext comment assumed'.format(i+1)) + d['isComment']=True + d['value']=line_raw + iNext = len(splits)+1 + + # Recombining description + if len(splits)>=iNext+1: + d['descr']=' '.join(splits[iNext:]) + except WrongFormatError as e: + raise WrongFormatError('Line {}: '.format(i+1)+e.args[0]) + except Exception as e: + raise Exception('Line {}: '.format(i+1)+e.args[0]) + + return d + +def parseFASTOutList(lines,iStart): + OutList=[] + i = iStart + while i=len(lines): + print('[WARN] End of file reached while reading Outlist') + #i=min(i+1,len(lines)) + return OutList,iStart+len(OutList) + + +def extractWithinParenthesis(s): + mo = re.search(r'\((.*)\)', s) + if mo: + return mo.group(1) + return '' + +def extractWithinBrackets(s): + mo = re.search(r'\((.*)\)', s) + if mo: + return mo.group(1) + return '' + +def detectUnits(s,nRef): + nPOpen=s.count('(') + nPClos=s.count(')') + nBOpen=s.count('[') + nBClos=s.count(']') + + sep='!#@#!' + if (nPOpen == nPClos) and (nPOpen>=nRef): + #that's pretty good + Units=s.replace('(','').replace(')',sep).split(sep)[:-1] + elif (nBOpen == nBClos) and (nBOpen>=nRef): + Units=s.replace('[','').replace(']',sep).split(sep)[:-1] + else: + Units=s.split() + return Units + + +def findNumberOfTableLines(lines, break_chars): + """ Loop through lines until a one of the "break character is found""" + for i, l in enumerate(lines): + for bc in break_chars: + if l.startswith(bc): + return i + # Not found + print('[FAIL] end of table not found') + return len(lines) + + +def parseFASTNumTable(filename,lines,n,iStart,nHeaders=2,tableType='num',nOffset=0, varNumLines=''): + """ + First lines of data starts at: nHeaders+nOffset + + """ + Tab = None + ColNames = None + Units = None + + + if len(lines)!=n+nHeaders+nOffset: + raise BrokenFormatError('Not enough lines in table: {} lines instead of {}\nFile:{}'.format(len(lines)-nHeaders,n,filename)) + try: + if nHeaders==0: + # Extract number of values from number of numerical values on first line + numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?' + rx = re.compile(numeric_const_pattern, re.VERBOSE) + header = cleanAfterChar(lines[nOffset], '!') + if tableType=='num': + dat= np.array(rx.findall(header)).astype(float) + ColNames=['C{}'.format(j) for j in range(len(dat))] + else: + raise NotImplementedError('Reading FAST tables with no headers for type different than num not implemented yet') + + elif nHeaders>=1: + # Extract column names + i = 0 + sTmp = cleanLine(lines[i]) + sTmp = cleanAfterChar(sTmp,'[') + sTmp = cleanAfterChar(sTmp,'(') + sTmp = cleanAfterChar(sTmp,'!') + sTmp = cleanAfterChar(sTmp,'#') + if sTmp.startswith('!'): + sTmp=sTmp[1:].strip() + ColNames=sTmp.split() + if nHeaders>=2: + # Extract units + i = 1 + sTmp = cleanLine(lines[i]) + sTmp = cleanAfterChar(sTmp,'!') + sTmp = cleanAfterChar(sTmp,'#') + if sTmp.startswith('!'): + sTmp=sTmp[1:].strip() + + Units = detectUnits(sTmp,len(ColNames)) + Units = ['({})'.format(u.strip()) for u in Units] + # Forcing user to match number of units and column names + if len(ColNames) != len(Units): + print(ColNames) + print(Units) + print('[WARN] {}: Line {}: Number of column names different from number of units in table'.format(filename, iStart+i+1)) + + nCols=len(ColNames) + + if tableType=='num': + if n==0: + Tab = np.zeros((n, nCols)) + for i in range(nHeaders+nOffset,n+nHeaders+nOffset): + l = cleanAfterChar(lines[i].lower(),'!') + l = cleanAfterChar(l,'#') + v = l.split() + if len(v) != nCols: + # Discarding SubDyn special cases + if ColNames[-1].lower() not in ['nodecnt']: + print('[WARN] {}: Line {}: number of data different from number of column names. ColumnNames: {}'.format(filename, iStart+i+1, ColNames)) + if i==nHeaders+nOffset: + # Node Cnt + if len(v) != nCols: + if ColNames[-1].lower()== 'nodecnt': + ColNames = ColNames+['Col']*(len(v)-nCols) + Units = Units+['Col']*(len(v)-nCols) + + nCols=len(v) + Tab = np.zeros((n, nCols)) + # Accounting for TRUE FALSE and converting to float + v = [s.replace('true','1').replace('false','0').replace('noprint','0').replace('print','1') for s in v] + v = [float(s) for s in v[0:nCols]] + if len(v) < nCols: + raise Exception('Number of data is lower than number of column names') + Tab[i-nHeaders-nOffset,:] = v + elif tableType=='mix': + # a mix table contains a mixed of strings and floats + # For now, we are being a bit more relaxed about the number of columns + if n==0: + Tab = np.zeros((n, nCols)).astype(object) + for i in range(nHeaders+nOffset,n+nHeaders+nOffset): + l = lines[i] + l = cleanAfterChar(l,'!') + l = cleanAfterChar(l,'#') + v = l.split() + if l.startswith('---'): + raise BrokenFormatError('Error reading line {} while reading table. Is the variable `{}` set correctly?'.format(iStart+i+1, varNumLines)) + if len(v) != nCols: + # Discarding SubDyn special cases + if ColNames[-1].lower() not in ['cosmid', 'ssifile']: + print('[WARN] {}: Line {}: Number of data is different than number of column names. Column Names: {}'.format(filename,iStart+1+i, ColNames)) + if i==nHeaders+nOffset: + if len(v)>nCols: + ColNames = ColNames+['Col']*(len(v)-nCols) + Units = Units+['Col']*(len(v)-nCols) + nCols=len(v) + Tab = np.zeros((n, nCols)).astype(object) + v=v[0:min(len(v),nCols)] + Tab[i-nHeaders-nOffset,0:len(v)] = v + # If all values are float, we convert to float + if all([strIsFloat(x) for x in Tab.ravel()]): + Tab=Tab.astype(float) + elif tableType=='sdout': + header = lines[0] + units = lines[1] + Tab=[] + for i in range(nHeaders+nOffset,n+nHeaders+nOffset): + l = cleanAfterChar(lines[i].lower(),'!') + Tab.append( np.array(l.split()).astype(int)) + else: + raise Exception('Unknown table type') + + ColNames = ColNames[0:nCols] + if Units is not None: + Units = Units[0:nCols] + Units = ['('+u.replace('(','').replace(')','')+')' for u in Units] + if nHeaders==0: + ColNames=None + + except Exception as e: + raise BrokenFormatError('Line {}: {}'.format(iStart+i+1,e.args[0])) + return Tab, ColNames, Units + + +def parseFASTFilTable(lines,n,iStart): + Tab = [] + try: + i=0 + if len(lines)!=n: + raise WrongFormatError('Not enough lines in table: {} lines instead of {}'.format(len(lines),n)) + for i in range(n): + l = lines[i].split() + #print(l[0].strip()) + Tab.append(l[0].strip()) + + except Exception as e: + raise Exception('Line {}: '.format(iStart+i+1)+e.args[0]) + return Tab + + + +# --------------------------------------------------------------------------------} +# --------------------------------------------------------------------------------} +# --------------------------------------------------------------------------------} +# --- Predefined types (may change with OpenFAST version..) +# --------------------------------------------------------------------------------{ +# --------------------------------------------------------------------------------{ +# --------------------------------------------------------------------------------{ + + +# --------------------------------------------------------------------------------} +# --- BeamDyn +# --------------------------------------------------------------------------------{ +class BDFile(FASTInputFileBase): + @classmethod + def from_fast_input_file(cls, parent): + self = cls() + self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='BD') + return self + + def __init__(self, filename=None, **kwargs): + FASTInputFileBase.__init__(self, filename, **kwargs) + if filename is None: + # Define a prototype for this file format + self.addComment('--------- BEAMDYN with OpenFAST INPUT FILE -------------------------------------------') + self.addComment('BeamDyn input file, written by BDFile') + self.addComment('---------------------- SIMULATION CONTROL --------------------------------------') + self.addValKey(False , 'Echo' , 'Echo input data to ".ech"? (flag)') + self.addValKey(True , 'QuasiStaticInit' , 'Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only]') + self.addValKey( 0 , 'rhoinf' , 'Numerical damping parameter for generalized-alpha integrator') + self.addValKey( 2 , 'quadrature' , 'Quadrature method: 1=Gaussian; 2=Trapezoidal (switch)') + self.addValKey("DEFAULT" , 'refine' , 'Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2]') + self.addValKey("DEFAULT" , 'n_fact' , 'Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5]') + self.addValKey("DEFAULT" , 'DTBeam' , 'Time step size (s)') + self.addValKey("DEFAULT" , 'load_retries' , 'Number of factored load retries before quitting the simulation [DEFAULT = 20]') + self.addValKey("DEFAULT" , 'NRMax' , 'Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10]') + self.addValKey("DEFAULT" , 'stop_tol' , 'Tolerance for stopping criterion (-) [DEFAULT = 1E-5]') + self.addValKey("DEFAULT" , 'tngt_stf_fd' , 'Use finite differenced tangent stiffness matrix? (flag)') + self.addValKey("DEFAULT" , 'tngt_stf_comp' , 'Compare analytical finite differenced tangent stiffness matrix? (flag)') + self.addValKey("DEFAULT" , 'tngt_stf_pert' , 'Perturbation size for finite differencing (-) [DEFAULT = 1E-6]') + self.addValKey("DEFAULT" , 'tngt_stf_difftol', 'Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1]') + self.addValKey(True , 'RotStates' , 'Orient states in the rotating frame during linearization? (flag) [used only when linearizing] ') + self.addComment('---------------------- GEOMETRY PARAMETER --------------------------------------') + self.addValKey( 1 , 'member_total' , 'Total number of members (-)') + self.addValKey( 0 , 'kp_total' , 'Total number of key points (-) [must be at least 3]') + self.addValKey( [1, 0] , 'kp_per_member' , 'Member number; Number of key points in this member') + self.addTable('MemberGeom', np.zeros((0,4)), tabType=1, tabDimVar='kp_total', + cols=['kp_xr', 'kp_yr', 'kp_zr', 'initial_twist'], + units=['(m)', '(m)', '(m)', '(deg)']) + self.addComment('---------------------- MESH PARAMETER ------------------------------------------') + self.addValKey( 5 , 'order_elem' , 'Order of interpolation (basis) function (-)') + self.addComment('---------------------- MATERIAL PARAMETER --------------------------------------') + self.addValKey('"undefined"', 'BldFile' , 'Name of file containing properties for blade (quoted string)') + self.addComment('---------------------- PITCH ACTUATOR PARAMETERS -------------------------------') + self.addValKey(False , 'UsePitchAct' , 'Whether a pitch actuator should be used (flag)') + self.addValKey( 1 , 'PitchJ' , 'Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true]') + self.addValKey( 0 , 'PitchK' , 'Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true]') + self.addValKey( 0 , 'PitchC' , 'Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true]') + self.addComment('---------------------- OUTPUTS -------------------------------------------------') + self.addValKey(False , 'SumPrint' , 'Print summary data to ".sum" (flag)') + self.addValKey('"ES10.3E2"' , 'OutFmt' , 'Format used for text tabular output, excluding the time channel.') + self.addValKey( 0 , 'NNodeOuts' , 'Number of nodes to output to file [0 - 9] (-)') + self.addValKey( [1] , 'OutNd' , 'Nodes whose values will be output (-)') + self.addValKey( [''] , 'OutList' , 'The next line(s) contains a list of output parameters. See OutListParameters.xlsx, BeamDyn tab for a listing of available output channels, (-)') + self.addComment('END of OutList (the word "END" must appear in the first 3 columns of this last OutList line)') + self.addComment('---------------------- NODE OUTPUTS --------------------------------------------') + self.addValKey( 99 , 'BldNd_BlOutNd' , 'Blade nodes on each blade (currently unused)') + self.addValKey( [''] , 'OutList_Nodal' , 'The next line(s) contains a list of output parameters. See OutListParameters.xlsx, BeamDyn_Nodes tab for a listing of available output channels, (-)') + self.addComment('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)') + self.addComment('--------------------------------------------------------------------------------') + self.hasNodal=True + #"RootFxr, RootFyr, RootFzr" + #"RootMxr, RootMyr, RootMzr" + #"TipTDxr, TipTDyr, TipTDzr" + #"TipRDxr, TipRDyr, TipRDzr" + + else: + # fix some stuff that generic reader fail at + self.data[1] = {'value':self._lines[1], 'label':'', 'isComment':True, 'descr':'', 'tabType':0} + i = self.getID('kp_total') + listval = [int(v) for v in str(self.data[i+1]['value']).split()] + self.data[i+1]['value']=listval + self.data[i+1]['label']='kp_per_member' + self.data[i+1]['isComment']=False + self.module='BD' + + def _writeSanityChecks(self): + """ Sanity checks before write """ + self['kp_total']=self['MemberGeom'].shape[0] + i = self.getID('kp_total') + self.data[i+1]['value']=[1, self['MemberGeom'].shape[0]] # kp_per_member + self.data[i+1]['label']='kp_per_member' + # Could check length of OutNd + + def _toDataFrame(self): + df = FASTInputFileBase._toDataFrame(self) + # TODO add quadrature points based on trapz/gauss + return df + + @property + def _IComment(self): return [1] + +# --------------------------------------------------------------------------------} +# --- ElastoDyn Blade +# --------------------------------------------------------------------------------{ +class EDBladeFile(FASTInputFileBase): + @classmethod + def from_fast_input_file(cls, parent): + self = cls() + self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='EDBlade') + return self + + def __init__(self, filename=None, **kwargs): + FASTInputFileBase.__init__(self, filename, **kwargs) + if filename is None: + # Define a prototype for this file format + self.addComment('------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE --------------------------') + self.addComment('ElastoDyn blade definition, written by EDBladeFile.') + self.addComment('---------------------- BLADE PARAMETERS ----------------------------------------') + self.addValKey( 0 , 'NBlInpSt' , 'Number of blade input stations (-)') + self.addValKey( 1. , 'BldFlDmp(1)', 'Blade flap mode #1 structural damping in percent of critical (%)') + self.addValKey( 1. , 'BldFlDmp(2)', 'Blade flap mode #2 structural damping in percent of critical (%)') + self.addValKey( 1. , 'BldEdDmp(1)', 'Blade edge mode #1 structural damping in percent of critical (%)') + self.addComment('---------------------- BLADE ADJUSTMENT FACTORS --------------------------------') + self.addValKey( 1. , 'FlStTunr(1)', 'Blade flapwise modal stiffness tuner, 1st mode (-)') + self.addValKey( 1. , 'FlStTunr(2)', 'Blade flapwise modal stiffness tuner, 2nd mode (-)') + self.addValKey( 1. , 'AdjBlMs' , 'Factor to adjust blade mass density (-)') + self.addValKey( 1. , 'AdjFlSt' , 'Factor to adjust blade flap stiffness (-)') + self.addValKey( 1. , 'AdjEdSt' , 'Factor to adjust blade edge stiffness (-)') + self.addComment('---------------------- DISTRIBUTED BLADE PROPERTIES ----------------------------') + self.addTable('BldProp', np.zeros((0,6)), tabType=1, tabDimVar='NBlInpSt', cols=['BlFract', 'PitchAxis', 'StrcTwst', 'BMassDen', 'FlpStff', 'EdgStff'], units=['(-)', '(-)', '(deg)', '(kg/m)', '(Nm^2)', '(Nm^2)']) + self.addComment('---------------------- BLADE MODE SHAPES ---------------------------------------') + self.addValKey( 1.0 , 'BldFl1Sh(2)', 'Flap mode 1, coeff of x^2') + self.addValKey( 0.0 , 'BldFl1Sh(3)', ' , coeff of x^3') + self.addValKey( 0.0 , 'BldFl1Sh(4)', ' , coeff of x^4') + self.addValKey( 0.0 , 'BldFl1Sh(5)', ' , coeff of x^5') + self.addValKey( 0.0 , 'BldFl1Sh(6)', ' , coeff of x^6') + self.addValKey( 0.0 , 'BldFl2Sh(2)', 'Flap mode 2, coeff of x^2') # NOTE: using something not too bad just incase user uses these as is.. + self.addValKey( 0.0 , 'BldFl2Sh(3)', ' , coeff of x^3') + self.addValKey( -13.0 , 'BldFl2Sh(4)', ' , coeff of x^4') + self.addValKey( 27.0 , 'BldFl2Sh(5)', ' , coeff of x^5') + self.addValKey( -13.0 , 'BldFl2Sh(6)', ' , coeff of x^6') + self.addValKey( 1.0 , 'BldEdgSh(2)', 'Edge mode 1, coeff of x^2') + self.addValKey( 0.0 , 'BldEdgSh(3)', ' , coeff of x^3') + self.addValKey( 0.0 , 'BldEdgSh(4)', ' , coeff of x^4') + self.addValKey( 0.0 , 'BldEdgSh(5)', ' , coeff of x^5') + self.addValKey( 0.0 , 'BldEdgSh(6)', ' , coeff of x^6') + else: + # fix some stuff that generic reader fail at + self.data[1] = {'value':self._lines[1], 'label':'', 'isComment':True, 'descr':'', 'tabType':0} + self.module='EDBlade' + + def _writeSanityChecks(self): + """ Sanity checks before write """ + self['NBlInpSt']=self['BldProp'].shape[0] + # Sum of Coeffs should be 1 + for s in ['BldFl1Sh','BldFl2Sh','BldEdgSh']: + sumcoeff=np.sum([self[s+'('+str(i)+')'] for i in [2,3,4,5,6] ]) + if np.abs(sumcoeff-1)>1e-4: + print('[WARN] Sum of coefficients for polynomial {} not equal to 1 ({}). File: {}'.format(s, sumcoeff, self.filename)) + + def _toDataFrame(self): + df = FASTInputFileBase._toDataFrame(self) + # We add the shape functions for EDBladeFile + x=df['BlFract_[-]'].values + Modes=np.zeros((x.shape[0],3)) + Modes[:,0] = x**2 * self['BldFl1Sh(2)'] + x**3 * self['BldFl1Sh(3)'] + x**4 * self['BldFl1Sh(4)'] + x**5 * self['BldFl1Sh(5)'] + x**6 * self['BldFl1Sh(6)'] + Modes[:,1] = x**2 * self['BldFl2Sh(2)'] + x**3 * self['BldFl2Sh(3)'] + x**4 * self['BldFl2Sh(4)'] + x**5 * self['BldFl2Sh(5)'] + x**6 * self['BldFl2Sh(6)'] + Modes[:,2] = x**2 * self['BldEdgSh(2)'] + x**3 * self['BldEdgSh(3)'] + x**4 * self['BldEdgSh(4)'] + x**5 * self['BldEdgSh(5)'] + x**6 * self['BldEdgSh(6)'] + df[['ShapeFlap1_[-]','ShapeFlap2_[-]','ShapeEdge1_[-]']]=Modes + return df + + @property + def _IComment(self): return [1] + +# --------------------------------------------------------------------------------} +# --- ElastoDyn Tower +# --------------------------------------------------------------------------------{ +class EDTowerFile(FASTInputFileBase): + @classmethod + def from_fast_input_file(cls, parent): + self = cls() + self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='EDTower') + return self + + def __init__(self, filename=None, **kwargs): + FASTInputFileBase.__init__(self, filename, **kwargs) + if filename is None: + # Define a prototype for this file format + self.addComment('------- ELASTODYN V1.00.* TOWER INPUT FILE -------------------------------------') + self.addComment('ElastoDyn tower definition, written by EDTowerFile.') + self.addComment('---------------------- TOWER PARAMETERS ----------------------------------------') + self.addValKey( 0 , 'NTwInpSt' , 'Number of blade input stations (-)') + self.addValKey( 1. , 'TwrFADmp(1)' , 'Tower 1st fore-aft mode structural damping ratio (%)') + self.addValKey( 1. , 'TwrFADmp(2)' , 'Tower 2nd fore-aft mode structural damping ratio (%)') + self.addValKey( 1. , 'TwrSSDmp(1)' , 'Tower 1st side-to-side mode structural damping ratio (%)') + self.addValKey( 1. , 'TwrSSDmp(2)' , 'Tower 2nd side-to-side mode structural damping ratio (%)') + self.addComment('---------------------- TOWER ADJUSTMENT FACTORS --------------------------------') + self.addValKey( 1. , 'FAStTunr(1)' , 'Tower fore-aft modal stiffness tuner, 1st mode (-)') + self.addValKey( 1. , 'FAStTunr(2)' , 'Tower fore-aft modal stiffness tuner, 2nd mode (-)') + self.addValKey( 1. , 'SSStTunr(1)' , 'Tower side-to-side stiffness tuner, 1st mode (-)') + self.addValKey( 1. , 'SSStTunr(2)' , 'Tower side-to-side stiffness tuner, 2nd mode (-)') + self.addValKey( 1. , 'AdjTwMa' , 'Factor to adjust tower mass density (-)') + self.addValKey( 1. , 'AdjFASt' , 'Factor to adjust tower fore-aft stiffness (-)') + self.addValKey( 1. , 'AdjSSSt' , 'Factor to adjust tower side-to-side stiffness (-)') + self.addComment('---------------------- DISTRIBUTED TOWER PROPERTIES ----------------------------') + self.addTable('TowProp', np.zeros((0,6)), tabType=1, tabDimVar='NTwInpSt', + cols=['HtFract','TMassDen','TwFAStif','TwSSStif'], + units=['(-)', '(kg/m)', '(Nm^2)', '(Nm^2)']) + self.addComment('---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------') + self.addValKey( 1.0 , 'TwFAM1Sh(2)', 'Mode 1, coefficient of x^2 term') + self.addValKey( 0.0 , 'TwFAM1Sh(3)', ' , coefficient of x^3 term') + self.addValKey( 0.0 , 'TwFAM1Sh(4)', ' , coefficient of x^4 term') + self.addValKey( 0.0 , 'TwFAM1Sh(5)', ' , coefficient of x^5 term') + self.addValKey( 0.0 , 'TwFAM1Sh(6)', ' , coefficient of x^6 term') + self.addValKey( -26. , 'TwFAM2Sh(2)', 'Mode 2, coefficient of x^2 term') # NOTE: using something not too bad just incase user uses these as is.. + self.addValKey( 0.0 , 'TwFAM2Sh(3)', ' , coefficient of x^3 term') + self.addValKey( 27. , 'TwFAM2Sh(4)', ' , coefficient of x^4 term') + self.addValKey( 0.0 , 'TwFAM2Sh(5)', ' , coefficient of x^5 term') + self.addValKey( 0.0 , 'TwFAM2Sh(6)', ' , coefficient of x^6 term') + self.addComment('---------------------- TOWER SIDE-TO-SIDE MODE SHAPES --------------------------') + self.addValKey( 1.0 , 'TwSSM1Sh(2)', 'Mode 1, coefficient of x^2 term') + self.addValKey( 0.0 , 'TwSSM1Sh(3)', ' , coefficient of x^3 term') + self.addValKey( 0.0 , 'TwSSM1Sh(4)', ' , coefficient of x^4 term') + self.addValKey( 0.0 , 'TwSSM1Sh(5)', ' , coefficient of x^5 term') + self.addValKey( 0.0 , 'TwSSM1Sh(6)', ' , coefficient of x^6 term') + self.addValKey( -26. , 'TwSSM2Sh(2)', 'Mode 2, coefficient of x^2 term') # NOTE: using something not too bad just incase user uses these as is.. + self.addValKey( 0.0 , 'TwSSM2Sh(3)', ' , coefficient of x^3 term') + self.addValKey( 27. , 'TwSSM2Sh(4)', ' , coefficient of x^4 term') + self.addValKey( 0.0 , 'TwSSM2Sh(5)', ' , coefficient of x^5 term') + self.addValKey( 0.0 , 'TwSSM2Sh(6)', ' , coefficient of x^6 term') + else: + # fix some stuff that generic reader fail at + self.data[1] = {'value':self._lines[1], 'label':'', 'isComment':True, 'descr':'', 'tabType':0} + self.module='EDTower' + + def _writeSanityChecks(self): + """ Sanity checks before write """ + self['NTwInpSt']=self['TowProp'].shape[0] + # Sum of Coeffs should be 1 + for s in ['TwFAM1Sh','TwFAM2Sh','TwSSM1Sh','TwSSM2Sh']: + sumcoeff=np.sum([self[s+'('+str(i)+')'] for i in [2,3,4,5,6] ]) + if np.abs(sumcoeff-1)>1e-4: + print('[WARN] Sum of coefficients for polynomial {} not equal to 1 ({}). File: {}'.format(s, sumcoeff, self.filename)) + + def _toDataFrame(self): + df = FASTInputFileBase._toDataFrame(self) + # We add the shape functions for EDBladeFile + # NOTE: we provide interpolated shape function just in case the resolution of the input file is low.. + x = df['HtFract_[-]'].values + Modes=np.zeros((x.shape[0],4)) + Modes[:,0] = x**2 * self['TwFAM1Sh(2)'] + x**3 * self['TwFAM1Sh(3)'] + x**4 * self['TwFAM1Sh(4)'] + x**5 * self['TwFAM1Sh(5)'] + x**6 * self['TwFAM1Sh(6)'] + Modes[:,1] = x**2 * self['TwFAM2Sh(2)'] + x**3 * self['TwFAM2Sh(3)'] + x**4 * self['TwFAM2Sh(4)'] + x**5 * self['TwFAM2Sh(5)'] + x**6 * self['TwFAM2Sh(6)'] + Modes[:,2] = x**2 * self['TwSSM1Sh(2)'] + x**3 * self['TwSSM1Sh(3)'] + x**4 * self['TwSSM1Sh(4)'] + x**5 * self['TwSSM1Sh(5)'] + x**6 * self['TwSSM1Sh(6)'] + Modes[:,3] = x**2 * self['TwSSM2Sh(2)'] + x**3 * self['TwSSM2Sh(3)'] + x**4 * self['TwSSM2Sh(4)'] + x**5 * self['TwSSM2Sh(5)'] + x**6 * self['TwSSM2Sh(6)'] + ShapeCols = [c+'_[-]' for c in ['ShapeForeAft1','ShapeForeAft2','ShapeSideSide1','ShapeSideSide2']] + df[ShapeCols]=Modes + return df + + @property + def _IComment(self): return [1] + +# --------------------------------------------------------------------------------} +# --- AeroDyn Blade +# --------------------------------------------------------------------------------{ +class ADBladeFile(FASTInputFileBase): + @classmethod + def from_fast_input_file(cls, parent): + self = cls() + self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='ADBlade') + return self + + def __init__(self, filename=None, **kwargs): + FASTInputFileBase.__init__(self, filename, **kwargs) + if filename is None: + # Define a prototype for this file format + self.addComment('------- AERODYN BLADE DEFINITION INPUT FILE ----------------------------------------------') + self.addComment('Aerodynamic blade definition, written by ADBladeFile') + self.addComment('====== Blade Properties =================================================================') + self.addKeyVal('NumBlNds', 0, 'Number of blade nodes used in the analysis (-)') + self.addTable('BldAeroNodes', np.zeros((0,7)), tabType=1, tabDimVar='NumBlNds', cols=['BlSpn', 'BlCrvAC', 'BlSwpAC', 'BlCrvAng', 'BlTwist', 'BlChord', 'BlAFID'], units=['(m)', '(m)', '(m)', '(deg)', '(deg)', '(m)', '(-)']) + self.module='ADBlade' + + def _writeSanityChecks(self): + """ Sanity checks before write""" + self['NumBlNds']=self['BldAeroNodes'].shape[0] + aeroNodes = self['BldAeroNodes'] + # TODO double check this calculation with gradient + dr = np.gradient(aeroNodes[:,0]) + dx = np.gradient(aeroNodes[:,1]) + crvAng = np.degrees(np.arctan2(dx,dr)) + if np.mean(np.abs(crvAng-aeroNodes[:,3]))>0.1: + print('[WARN] BlCrvAng might not be computed correctly') + + def _toDataFrame(self): + df = FASTInputFileBase._toDataFrame(self) + aeroNodes = self['BldAeroNodes'] + r = aeroNodes[:,0] + chord = aeroNodes[:,5] + twist = aeroNodes[:,4]*np.pi/180 + prebendAC = aeroNodes[:,1] + sweepAC = aeroNodes[:,2] + + # --- IEA 15 + ##'le_location: 'Leading-edge positions from a reference blade axis (usually blade pitch axis). Locations are normalized by the local chord length. Positive in -x direction for airfoil-aligned coordinate system') + ## pitch_axis + ##'1D array of the chordwise position of the pitch axis (0-LE, 1-TE), defined along blade span.') + #grid = [0.0, 0.02040816326530612, 0.04081632653061224, 0.061224489795918366, 0.08163265306122448, 0.1020408163265306, 0.12244897959183673, 0.14285714285714285, 0.16326530612244897, 0.18367346938775508, 0.2040816326530612, 0.22448979591836732, 0.24489795918367346, 0.26530612244897955, 0.2857142857142857, 0.3061224489795918, 0.32653061224489793, 0.3469387755102041, 0.36734693877551017, 0.3877551020408163, 0.4081632653061224, 0.42857142857142855, 0.44897959183673464, 0.4693877551020408, 0.4897959183673469, 0.5102040816326531, 0.5306122448979591, 0.5510204081632653, 0.5714285714285714, 0.5918367346938775, 0.6122448979591836, 0.6326530612244897, 0.6530612244897959, 0.673469387755102, 0.6938775510204082, 0.7142857142857142, 0.7346938775510203, 0.7551020408163265, 0.7755102040816326, 0.7959183673469387, 0.8163265306122448, 0.836734693877551, 0.8571428571428571, 0.8775510204081632, 0.8979591836734693, 0.9183673469387754, 0.9387755102040816, 0.9591836734693877, 0.9795918367346939, 1.0] + #values = [0.5045454545454545, 0.4900186808012221, 0.47270018284548393, 0.4540147730610375, 0.434647782591965, 0.4156278851950606, 0.3979378721273935, 0.38129960745617403, 0.3654920515699109, 0.35160780834472827, 0.34008443128769117, 0.3310670675965599, 0.3241031342163746, 0.3188472934612394, 0.3146895762675238, 0.311488897995355, 0.3088429219529899, 0.3066054031112312, 0.3043613335231313, 0.3018756624023877, 0.2992017656131912, 0.29648581499532917, 0.29397119399704474, 0.2918571873240831, 0.2901098902886204, 0.28880659979944606, 0.28802634398115073, 0.28784151044623507, 0.28794253614539367, 0.28852264941156663, 0.28957685074559625, 0.2911108045758606, 0.2930139151081327, 0.2952412111444283, 0.2977841397364215, 0.300565286724993, 0.3035753776130124, 0.30670446458784534, 0.30988253764299156, 0.3130107259708016, 0.31639042766652853, 0.32021109189825026, 0.32462311714967124, 0.329454188784972, 0.33463306413024474, 0.3401190402144396, 0.3460555975714659, 0.3527211856428439, 0.3600890296396286, 0.36818181818181805] + ##'ref_axis_blade' desc='2D array of the coordinates (x,y,z) of the blade reference axis, defined along blade span. The coordinate system is the one of BeamDyn: it is placed at blade root with x pointing the suction side of the blade, y pointing the trailing edge and z along the blade span. A standard configuration will have negative x values (prebend), if swept positive y values, and positive z values.') + #x_grid = [0.0, 0.02040816326530612, 0.04081632653061224, 0.061224489795918366, 0.08163265306122448, 0.1020408163265306, 0.12244897959183673, 0.14285714285714285, 0.16326530612244897, 0.18367346938775508, 0.2040816326530612, 0.22448979591836732, 0.24489795918367346, 0.26530612244897955, 0.2857142857142857, 0.3061224489795918, 0.32653061224489793, 0.3469387755102041, 0.36734693877551017, 0.3877551020408163, 0.4081632653061224, 0.42857142857142855, 0.44897959183673464, 0.4693877551020408, 0.4897959183673469, 0.5102040816326531, 0.5306122448979591, 0.5510204081632653, 0.5714285714285714, 0.5918367346938775, 0.6122448979591836, 0.6326530612244897, 0.6530612244897959, 0.673469387755102, 0.6938775510204082, 0.7142857142857142, 0.7346938775510203, 0.7551020408163265, 0.7755102040816326, 0.7959183673469387, 0.8163265306122448, 0.836734693877551, 0.8571428571428571, 0.8775510204081632, 0.8979591836734693, 0.9183673469387754, 0.9387755102040816, 0.9591836734693877, 0.9795918367346939, 1.0] + #x_values = [0.0, 0.018400065266506227, 0.04225083661157623, 0.0713435070518306, 0.1036164118664373, 0.13698065932882636, 0.16947761902506267, 0.19850810716711273, 0.22314347791028566, 0.24053558565655847, 0.24886598803245524, 0.2502470372487695, 0.24941257744761433, 0.24756615214432298, 0.24481686563607896, 0.24130290560673967, 0.23698965095246982, 0.23242285078249267, 0.22531163517427788, 0.2110134548882222, 0.18623119147117725, 0.1479307251853749, 0.09847131457569316, 0.04111540547132665, -0.02233952894219675, -0.08884150619038655, -0.15891966620096387, -0.2407441175807782, -0.3366430472730907, -0.44693576549987823, -0.5680658106768092, -0.6975208703059096, -0.8321262196998409, -0.9699653368698024, -1.1090930486685822, -1.255144506570033, -1.4103667735456449, -1.5733007007462756, -1.7434963771088456, -1.9194542609028804, -2.1000907378795275, -2.285501961499942, -2.4756894577736315, -2.6734165188032692, -2.8782701025304545, -3.090085737186208, -3.308459127246535, -3.533712868740941, -3.7641269864926348, -4.0] + #y_grid = [0.0, 1.0] + #y_values = [0.0, 0.0] + #z_grid = [0.0, 0.02040816326530612, 0.04081632653061224, 0.061224489795918366, 0.08163265306122448, 0.1020408163265306, 0.12244897959183673, 0.14285714285714285, 0.16326530612244897, 0.18367346938775508, 0.2040816326530612, 0.22448979591836732, 0.24489795918367346, 0.26530612244897955, 0.2857142857142857, 0.3061224489795918, 0.32653061224489793, 0.3469387755102041, 0.36734693877551017, 0.3877551020408163, 0.4081632653061224, 0.42857142857142855, 0.44897959183673464, 0.4693877551020408, 0.4897959183673469, 0.5102040816326531, 0.5306122448979591, 0.5510204081632653, 0.5714285714285714, 0.5918367346938775, 0.6122448979591836, 0.6326530612244897, 0.6530612244897959, 0.673469387755102, 0.6938775510204082, 0.7142857142857142, 0.7346938775510203, 0.7551020408163265, 0.7755102040816326, 0.7959183673469387, 0.8163265306122448, 0.836734693877551, 0.8571428571428571, 0.8775510204081632, 0.8979591836734693, 0.9183673469387754, 0.9387755102040816, 0.9591836734693877, 0.9795918367346939, 1.0] + #z_values = [0.0, 2.387755102040816, 4.775510204081632, 7.163265306122448, 9.551020408163264, 11.938775510204081, 14.326530612244898, 16.714285714285715, 19.10204081632653, 21.489795918367346, 23.877551020408163, 26.265306122448976, 28.653061224489797, 31.04081632653061, 33.42857142857143, 35.81632653061224, 38.20408163265306, 40.59183673469388, 42.979591836734684, 45.36734693877551, 47.75510204081632, 50.14285714285714, 52.53061224489795, 54.91836734693877, 57.30612244897959, 59.69387755102041, 62.08163265306122, 64.46938775510203, 66.85714285714285, 69.24489795918367, 71.63265306122447, 74.0204081632653, 76.40816326530611, 78.79591836734693, 81.18367346938776, 83.57142857142857, 85.95918367346938, 88.3469387755102, 90.73469387755102, 93.12244897959182, 95.51020408163265, 97.89795918367345, 100.28571428571428, 102.6734693877551, 105.0612244897959, 107.44897959183673, 109.83673469387753, 112.22448979591836, 114.61224489795919, 117.0] + #r_ = [0.0, 0.02, 0.15, 0.245170, 1.0] + #ac = [0.5, 0.5, 0.316, 0.25, 0.25] + #r0 = r/r[-1] + #z = np.interp(r0, z_grid, z_values) + #x = np.interp(r0, x_grid, x_values) + #y = np.interp(r0, y_grid, y_values) + #xp = np.interp(r0, grid, values) + #df['z'] = z + #df['x'] = x + #df['y'] = y + #df['xp'] = xp + #ACloc = np.interp(r0, r_,ac) + + ## Get the absolute offset between pitch axis (rotation center) and aerodynamic center + #ch_offset = inputs['chord'] * (inputs['ac'] - inputs['le_location']) + ## Rotate it by the twist using the AD15 coordinate system + #x , y = util.rotate(0., 0., 0., ch_offset, -np.deg2rad(inputs['theta'])) + ## Apply offset to determine the AC axis + #BlCrvAC = inputs['ref_axis_blade'][:,0] + x + #BlSwpAC = inputs['ref_axis_blade'][:,1] + y + + # --- Adding C2 axis + ACloc = r*0 + 0.25 # distance (in chord) from leading edge to aero center + n=int(len(r)*0.15) # 15% span + ACloc[:n]=np.linspace(0.5,0.25, n) # Root is at 0 + + dx = chord*(0.5-ACloc) * np.sin(twist) # Should be mostly >0 + dy = chord*(0.5-ACloc) * np.cos(twist) # Should be mostly >0 + prebend = prebendAC + dx + sweep = sweepAC + dy + df['c2_Crv_Approx_[m]'] = prebend + df['c2_Swp_Approx_[m]'] = sweep + df['AC_Approx_[-]'] = ACloc + # --- Calc CvrAng + dr = np.gradient(aeroNodes[:,0]) + dx = np.gradient(aeroNodes[:,1]) + df['CrvAng_Calc_[-]'] = np.degrees(np.arctan2(dx,dr)) + return df + + @property + def _IComment(self): return [1] + + +# --------------------------------------------------------------------------------} +# --- AeroDyn Polar +# --------------------------------------------------------------------------------{ +class ADPolarFile(FASTInputFileBase): + @staticmethod + def formatName(): + return 'FAST AeroDyn polar file' + + @classmethod + def from_fast_input_file(cls, parent): + self = cls() + self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='ADPolar') + return self + + def __init__(self, filename=None, hasUA=True, numTabs=1, **kwargs): + FASTInputFileBase.__init__(self, filename, **kwargs) + if filename is None: + # Define a prototype for this file format + self.addComment('! ------------ AirfoilInfo Input File ------------------------------------------') + self.addComment('! Airfoil definition, written by ADPolarFile') + self.addComment('! ') + self.addComment('! ') + self.addComment('! ------------------------------------------------------------------------------') + self.addValKey("DEFAULT", 'InterpOrd' , 'Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=3]') + self.addValKey( 1, 'NonDimArea', 'The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded)') + self.addValKey( 0, 'NumCoords' , 'The number of coordinates in the airfoil shape file. Set to zero if coordinates not included.') + self.addValKey( numTabs , 'NumTabs' , 'Number of airfoil tables in this file. Each table must have lines for Re and Ctrl.') + # TODO multiple tables + for iTab in range(numTabs): + if numTabs==1: + labOffset ='' + else: + labOffset ='_'+str(iTab+1) + self.addComment('! ------------------------------------------------------------------------------') + self.addComment('! data for table {}'.format(iTab+1)) + self.addComment('! ------------------------------------------------------------------------------') + self.addValKey( 1.0 , 'Re' +labOffset , 'Reynolds number in millions') + self.addValKey( 0 , 'Ctrl'+labOffset , 'Control setting') + if hasUA: + self.addValKey(True , 'InclUAdata', 'Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line') + self.addComment('!........................................') + self.addValKey( np.nan , 'alpha0' + labOffset, r"0-lift angle of attack, depends on airfoil.") + self.addValKey( np.nan , 'alpha1' + labOffset, r"Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg)") + self.addValKey( np.nan , 'alpha2' + labOffset, r"Angle of attack at f=0.7, (approximately the stall angle) for AOA1]") + self.addValKey( 0 , 'S2' + labOffset, r"Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1]") + self.addValKey( 0 , 'S3' + labOffset, r"Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1]") + self.addValKey( 0 , 'S4' + labOffset, r"Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1]") + self.addValKey( np.nan , 'Cn1' + labOffset, r"Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers.") + self.addValKey( np.nan , 'Cn2' + labOffset, r"As Cn1 for negative AOAs.") + self.addValKey( "DEFAULT" , 'St_sh' + labOffset, r"Strouhal's shedding frequency constant. [default = 0.19]") + self.addValKey( np.nan , 'Cd0' + labOffset, r"2D drag coefficient value at 0-lift.") + self.addValKey( np.nan , 'Cm0' + labOffset, r"2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0]") + self.addValKey( 0 , 'k0' + labOffset, r"Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1]") + self.addValKey( 0 , 'k1' + labOffset, r"Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1]") + self.addValKey( 0 , 'k2' + labOffset, r"Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1]") + self.addValKey( 0 , 'k3' + labOffset, r"Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1]") + self.addValKey( 0 , 'k1_hat' + labOffset, r"Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1]") + self.addValKey( "DEFAULT" , 'x_cp_bar' + labOffset, r"Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2]") + self.addValKey( "DEFAULT" , 'UACutout' + labOffset, r"Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string 'Default' sets UACutout to 45 degrees]") + self.addValKey( "DEFAULT" , 'filtCutOff'+ labOffset, r"Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5]") + self.addComment('!........................................') + else: + self.addValKey(False , 'InclUAdata'+labOffset, 'Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line') + self.addComment('! Table of aerodynamics coefficients') + self.addValKey(0 , 'NumAlf'+labOffset, '! Number of data lines in the following table') + self.addTable('AFCoeff'+labOffset, np.zeros((0,4)), tabType=2, tabDimVar='NumAlf', cols=['Alpha', 'Cl', 'Cd', 'Cm'], units=['(deg)', '(-)', '(-)', '(-)']) + self.module='ADPolar' + + def _writeSanityChecks(self): + """ Sanity checks before write""" + nTabs = self['NumTabs'] + if nTabs==1: + self['NumAlf']=self['AFCoeff'].shape[0] + else: + for iTab in range(nTabs): + labOffset='_{}'.format(iTab+1) + self['NumAlf'+labOffset] = self['AFCoeff'+labOffset].shape[0] + # Potentially compute unsteady params here + + def _write(self): + nTabs = self['NumTabs'] + if nTabs==1: + FASTInputFileBase._write(self) + else: + self._writeSanityChecks() + Labs=['Re','Ctrl','UserProp','alpha0','alpha1','alpha2','eta_e','C_nalpha','T_f0','T_V0','T_p','T_VL','b1','b2','b5','A1','A2','A5','S1','S2','S3','S4','Cn1','Cn2','St_sh','Cd0','Cm0','k0','k1','k2','k3','k1_hat','x_cp_bar','UACutout','filtCutOff','InclUAdata','NumAlf','AFCoeff'] + # Store all labels + AllLabels=[self.data[i]['label'] for i in range(len(self.data))] + # Removing lab Offset - TODO TEMPORARY HACK + for iTab in range(nTabs): + labOffset='_{}'.format(iTab+1) + for labRaw in Labs: + i = self.getIDSafe(labRaw+labOffset) + if i>0: + self.data[i]['label'] = labRaw + # Write + with open(self.filename,'w') as f: + f.write(self.toString()) + # Restore labels + for i,labFull in enumerate(AllLabels): + self.data[i]['label'] = labFull + + def _toDataFrame(self): + dfs = FASTInputFileBase._toDataFrame(self) + if not isinstance(dfs, dict): + dfs={'AFCoeff':dfs} + + for k,df in dfs.items(): + sp = k.split('_') + if len(sp)==2: + labOffset='_'+sp[1] + else: + labOffset='' + alpha = df['Alpha_[deg]'].values*np.pi/180. + Cl = df['Cl_[-]'].values + Cd = df['Cd_[-]'].values + + # Cn with Cd0 + try: + Cd0 = self['Cd0'+labOffset] + # Cn (with or without Cd0) + Cn1 = Cl*np.cos(alpha)+ (Cd-Cd0)*np.sin(alpha) + df['Cn_Cd0off_[-]'] = Cn1 + except: + pass + + # Regular Cn + Cn = Cl*np.cos(alpha)+ Cd*np.sin(alpha) + df['Cn_[-]'] = Cn + + # Linear Cn + try: + CnLin_ = self['C_nalpha'+labOffset]*(alpha-self['alpha0'+labOffset]*np.pi/180.) + CnLin = CnLin_.copy() + CnLin[alpha<-20*np.pi/180]=np.nan + CnLin[alpha> 30*np.pi/180]=np.nan + df['Cn_pot_[-]'] = CnLin + except: + pass + + # Highlighting points surrounding 0 1 2 Cn points + CnPoints = Cn*np.nan + try: + iBef2 = np.where(alpha0: + if l[0]=='!': + if l.find('!dimension')==0: + self.addKeyVal('nDOF',int(l.split(':')[1])) + nDOFCommon=self['nDOF'] + elif l.find('!time increment')==0: + self.addKeyVal('dt',float(l.split(':')[1])) + elif l.find('!total simulation time')==0: + self.addKeyVal('T',float(l.split(':')[1])) + elif len(l.strip())==0: + pass + else: + raise BrokenFormatError('Unexcepted content found on line {}'.format(i)) + i+=1 + except BrokenFormatError as e: + raise e + except: + raise + + return True + +class ExtPtfmFile(FASTInputFileBase): + @classmethod + def from_fast_input_file(cls, parent): + self = cls() + self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='ExtPtfm') + return self + + def __init__(self, filename=None, **kwargs): + FASTInputFileBase.__init__(self, filename, **kwargs) + if filename is None: + # Define a prototype for this file format + self.addValKey(0 , 'nDOF', '') + self.addValKey(1 , 'dt' , '') + self.addValKey(0 , 'T' , '') + self.addTable('MassMatrix' , np.zeros((0,0)), tabType=0) + self.addTable('StiffnessMatrix', np.zeros((0,0)), tabType=0) + self.addTable('DampingMatrix' , np.zeros((0,0)), tabType=0) + self.addTable('Loading' , np.zeros((0,0)), tabType=0) + self.comment='' + self.module='ExtPtfm' + + + def _read(self): + with open(self.filename, 'r', errors="surrogateescape") as f: + lines=f.read().splitlines() + detectAndReadExtPtfmSE(self, lines) + + def toString(self): + s='' + s+='!Comment\n' + s+='!Comment Flex 5 Format\n' + s+='!Dimension: {}\n'.format(self['nDOF']) + s+='!Time increment in simulation: {}\n'.format(self['dt']) + s+='!Total simulation time in file: {}\n'.format(self['T']) + + s+='\n!Mass Matrix\n' + s+='!Dimension: {}\n'.format(self['nDOF']) + s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['MassMatrix']) + + s+='\n\n!Stiffness Matrix\n' + s+='!Dimension: {}\n'.format(self['nDOF']) + s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['StiffnessMatrix']) + + s+='\n\n!Damping Matrix\n' + s+='!Dimension: {}\n'.format(self['nDOF']) + s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['DampingMatrix']) + + s+='\n\n!Loading and Wave Elevation\n' + s+='!Dimension: 1 time column - {} force columns\n'.format(self['nDOF']) + s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['Loading']) + return s + + def _writeSanityChecks(self): + """ Sanity checks before write""" + assert self['MassMatrix'].shape[0] == self['nDOF'] + assert self['StiffnessMatrix'].shape[0] == self['nDOF'] + assert self['DampingMatrix'].shape[0] == self['nDOF'] + assert self['MassMatrix'].shape[0] == self['MassMatrix'].shape[1] + assert self['StiffnessMatrix'].shape[0] == self['StiffnessMatrix'].shape[1] + assert self['DampingMatrix'].shape[0] == self['DampingMatrix'].shape[1] + # if self['T']>0: + # assert self['Loading'].shape[0] == (int(self['T']/self['dT'])+1 + + def _toDataFrame(self): + # Special types, TODO Subclass + nDOF=self['nDOF'] + Cols=['Time_[s]','InpF_Fx_[N]', 'InpF_Fy_[N]', 'InpF_Fz_[N]', 'InpF_Mx_[Nm]', 'InpF_My_[Nm]', 'InpF_Mz_[Nm]'] + Cols+=['CBF_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] + Cols=Cols[:nDOF+1] + #dfs['Loading'] = pd.DataFrame(data = self['Loading'],columns = Cols) + dfs = pd.DataFrame(data = self['Loading'],columns = Cols) + + #Cols=['SurgeAcc_[m/s]', 'SwayAcc_[m/s]', 'HeaveAcc_[m/s]', 'RollAcc_[rad/s]', 'PitchAcc_[rad/s]', 'YawAcc_[rad/s]'] + #Cols+=['CBQD_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] + #Cols=Cols[:nDOF] + #dfs['MassMatrix'] = pd.DataFrame(data = self['MassMatrix'], columns=Cols) + + #Cols=['SurgeVel_[m/s]', 'SwayVel_[m/s]', 'HeaveVel_[m/s]', 'RollVel_[rad/s]', 'PitchVel_[rad/s]', 'YawVel_[rad/s]'] + #Cols+=['CBQD_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] + #Cols=Cols[:nDOF] + #dfs['DampingMatrix'] = pd.DataFrame(data = self['DampingMatrix'], columns=Cols) + + #Cols=['Surge_[m]', 'Sway_[m]', 'Heave_[m]', 'Roll_[rad]', 'Pitch_[rad]', 'Yaw_[rad]'] + #Cols+=['CBQ_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] + #Cols=Cols[:nDOF] + #dfs['StiffnessMatrix'] = pd.DataFrame(data = self['StiffnessMatrix'], columns=Cols) + return dfs + + + +if __name__ == "__main__": + f = FASTInputFile('tests/example_files/FASTIn_HD_SeaState.dat') + print(f) + pass + #B=FASTIn('Turbine.outb') + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py new file mode 100644 index 0000000000..f38708e5d1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py @@ -0,0 +1,352 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +# Local +# try: +from pyFAST.input_output.tools.graph import * +# except ImportError: +#from welib.FEM.graph import * + + +# --------------------------------------------------------------------------------} +# --- Wrapper to convert a "fast" input file dictionary into a graph +# --------------------------------------------------------------------------------{ +def fastToGraph(data, **kwargs): + if 'BeamProp' in data.keys(): + return subdynToGraph(data, **kwargs) + + if 'SmplProp' in data.keys(): + return hydrodynToGraph(data, **kwargs) + + if 'DOF2Nodes' in data.keys(): + return subdynSumToGraph(data, **kwargs) + + raise NotImplementedError('Graph for object with keys: {}'.format(data.keys())) + +# --------------------------------------------------------------------------------} +# --- SubDyn +# --------------------------------------------------------------------------------{ +def subdynToGraph(sd, propToNodes=False, propToElem=False): + """ + sd: dict-like object as returned by weio + + -propToNodes: if True, the element properties are also transferred to the nodes for convenience. + NOTE: this is not the default because a same node can have two different diameters in SubDyn (it's by element) + """ + type2Color=[ + (0.1,0.1,0.1), # Watchout based on background + (0.753,0.561,0.05), # 1 Beam + (0.541,0.753,0.05), # 2 Cable + (0.753,0.05,0.204), # 3 Rigid + (0.918,0.702,0.125), # 3 Rigid + ] + + Graph = GraphModel() + # --- Properties + if 'BeamProp' in sd.keys(): + BProps = sd['BeamProp'] + Graph.addNodePropertySet('Beam') + for ip,P in enumerate(BProps): + prop= NodeProperty(ID=P[0], E=P[1], G=P[2], rho=P[3], D=P[4], t=P[5] ) + Graph.addNodeProperty('Beam',prop) + + if 'CableProp' in sd.keys(): + CProps = sd['CableProp'] + Graph.addNodePropertySet('Cable') + for ip,P in enumerate(CProps): + Chan = -1 if len(P)<5 else P[4] + prop= NodeProperty(ID=P[0], EA=P[1], rho=P[2], T0=P[3], Chan=Chan) + Graph.addNodeProperty('Cable',prop) + + if 'RigidProp' in sd.keys(): + RProps = sd['RigidProp'] + Graph.addNodePropertySet('Rigid') + for ip,P in enumerate(RProps): + prop= NodeProperty(ID=P[0], rho=P[1]) + Graph.addNodeProperty('Rigid',prop) + + # --- Nodes and DOFs + Nodes = sd['Joints'] + for iNode,N in enumerate(Nodes): + Type= 1 if len(N)<=4 else N[4] + node = Node(ID=N[0], x=N[1], y=N[2], z=N[3], Type=Type) + Graph.addNode(node) + + # --- Elements + Members = sd['Members'].astype(int) + PropSets = ['Beam','Cable','Rigid'] + for ie,E in enumerate(Members): + Type=1 if len(E)==5 else E[5] + #elem= Element(E[0], E[1:3], propset=PropSets[Type-1], propIDs=E[3:5]) + elem= Element(E[0], E[1:3], Type=PropSets[Type-1], propIDs=E[3:5], propset=PropSets[Type-1]) + elem.data['object']='cylinder' + elem.data['color'] = type2Color[Type] + Graph.addElement(elem) + # Nodal prop data + if propToNodes: + # NOTE: this is disallowed by default because a same node can have two different diameters in SubDyn (it's by element) + Graph.setElementNodalProp(elem, propset=PropSets[Type-1], propIDs=E[3:5]) + if propToElem: + Graph.setElementNodalPropToElem(elem) # TODO, this shouldn't be needed + + # --- Concentrated Masses (in global coordinates), node data + for iC, CM in enumerate(sd['ConcentratedMasses']): + #CMJointID, JMass, JMXX, JMYY, JMZZ, JMXY, JMXZ, JMYZ, MCGX, MCGY, MCGZ + nodeID = CM[0] + n = Graph.getNode(nodeID) + M66 = np.zeros((6,6)) + if len(CM)==11: + m = CM[1] + x, y ,z = (CM[8], CM[9], CM[10]) + Jxx = CM[2]; Jyy = CM[3]; Jzz = CM[4] + Jxy = CM[5]; Jxz = CM[6]; Jyz = CM[7]; + else: + raise NotImplementedError('TODO legacy') + m = CM[1] + Jxx = CM[2]; Jyy = CM[3]; Jzz = CM[4] + Jxy = 0; Jyz =0; Jzz = 0; x,y,z=0,0,0 + M66[0, :] =[ m , 0 , 0 , 0 , z*m , -y*m ] + M66[1, :] =[ 0 , m , 0 , -z*m , 0 , x*m ] + M66[2, :] =[ 0 , 0 , m , y*m , -x*m , 0 ] + M66[3, :] =[ 0 , -z*m , y*m , Jxx + m*(y**2+z**2) , Jxy - m*x*y , Jxz - m*x*z ] + M66[4, :] =[ z*m , 0 , -x*m , Jxy - m*x*y , Jyy + m*(x**2+z**2) , Jyz - m*y*z ] + M66[5, :] =[ -y*m , x*m , 0 , Jxz - m*x*z , Jyz - m*y*z , Jzz + m*(x**2+y**2) ] + n.setData({'addedMassMatrix':M66}) + + # Nodal data + for iN,N in enumerate(sd['InterfaceJoints']): + nodeID = int(N[0]) + Graph.setNodalData(nodeID,IBC=N[1:]) + for iN,N in enumerate(sd['BaseJoints']): + NN=[int(n) if i<7 else n for i,n in enumerate(N)] + nodeID = NN[0] + Graph.setNodalData(nodeID,RBC=NN[1:]) + # print('CMass') + # print(sd['ConcentratedMasses']) + + return Graph + + + + + +# --------------------------------------------------------------------------------} +# --- HydroDyn +# --------------------------------------------------------------------------------{ +def hydrodynToGraph(hd, propToNodes=False, propToElem=False): + """ + hd: dict-like object as returned by weio + + -propToNodes: if True, the element properties are also transferred to the nodes for convenience. + NOTE: this is not the default because a same node can have two different diameters in SubDyn (it's by element) + + - propToElem: This might be due to misunderstanding of graph.. + """ + def type2Color(Pot): + if Pot: + return (0.753,0.05,0.204), # Pot flow + else: + return (0.753,0.561,0.05), # Morison + + + Graph = GraphModel() + + # --- Properties + if 'SectionProp' in hd.keys(): + # NOTE: setting it as element property since two memebrs may connect on the same node with different diameters/thicknesses + Graph.addNodePropertySet('Section') + for ip,P in enumerate(hd['SectionProp']): + # PropSetID PropD PropThck + prop= NodeProperty(ID=P[0], D=P[1], t=P[2]) + Graph.addNodeProperty('Section',prop) + + # --- Hydro Coefs - will be stored in AxCoefs, SimpleCoefs, DepthCoefs, MemberCoefs + if 'AxCoefs' in hd.keys(): + Graph.addNodePropertySet('AxCoefs') + for ip,P in enumerate(hd['AxCoefs']): + prop= NodeProperty(ID=P[0], JAxCd=P[1], JAxCa=P[2], JAxCp=P[3]) + Graph.addNodeProperty('AxCoefs',prop) + if 'SmplProp' in hd.keys(): + Graph.addNodePropertySet('SimpleCoefs') + for ip,P in enumerate(hd['SmplProp']): + # SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCd SimplAxCdMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG + if len(P)==12: + prop= NodeProperty(ID=ip+1, Cd=P[0], CdMG=P[1], Ca=P[2], CaMG=P[3], Cp=P[4], CpMG=P[5], AxCd=P[6], AxCdMG=P[7], AxCa=P[8], AxCaMG=P[9], AxCp=P[10], AxCpMG=P[11]) + elif len(P)==10: + prop= NodeProperty(ID=ip+1, Cd=P[0], CdMG=P[1], Ca=P[2], CaMG=P[3], Cp=P[4], CpMG=P[5], AxCa=P[6], AxCaMG=P[7], AxCp=P[8], AxCpMG=P[9]) + else: + raise NotImplementedError() + Graph.addNodeProperty('SimpleCoefs',prop) + if 'DpthProp' in hd.keys(): + Graph.addMiscPropertySet('DepthCoefs') + for ip,P in enumerate(hd['DpthProp']): + # Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCd DpthAxCdMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG + prop= Property(ID=ip+1, Dpth=P[0], Cd=P[1], CdMG=P[2], Ca=P[3], CaMG=P[4], Cp=P[5], CpMG=P[6], AxCd=P[7], AxCdMG=P[8], AxCa=P[9], AxCaMG=P[10], AxCp=P[11], AxCpMG=P[12]) + Graph.addMiscProperty('DepthCoefs',prop) + + if 'MemberProp' in hd.keys(): + # Member-based hydro coefficinet + Graph.addMiscPropertySet('MemberCoefs') + for ip,P in enumerate(hd['MemberProp']): + # MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCd1 MemberAxCd2 MemberAxCdMG1 MemberAxCdMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 + prop = ElemProperty(ID=ip+1, MemberID=P[0], Cd1=P[1], Cd2=P[2], CdMG1=P[3], CdMG2=P[4], Ca1=P[5], Ca2=P[6], CaMG1=P[7], CaMG2=P[8], Cp1=P[9], Cp2=P[10], CpMG1=P[11], CpMG2=P[12], AxCd1=P[14], AxCd2=P[15], axCdMG1=P[16], axCdMG2=P[17], AxCa1=P[18], AxCa2=P[19], AxCaMG1=P[20], AxCaMG2=P[21], AxCp1=P[22], AxCp2=P[23]) + Graph.addMiscProperty('MemberCoefs',prop) + # --- + if 'FillGroups' in hd.keys(): + # Filled members + Graph.addMiscPropertySet('FillGroups') + print('>>> TODO Filled Groups') + #for ip,P in enumerate(hd['FillGroups']): + # # FillNumM FillMList FillFSLoc FillDens + # raise NotImplementedError('hydroDynToGraph, Fill List might not be properly set, verify below') + # prop = MiscProperty(ID=ip+1, FillNumM=P[0], FillMList=P[1], FillFSLoc=P[2], FillDens=P[3]) + # Graph.addMiscProperty('FillGroups',prop) + + if 'MGProp' in hd.keys(): + # Marine Growth + Graph.addMiscPropertySet('MG') + for ip,P in enumerate(hd['MGProp']): + # MGDpth MGThck MGDens + # (m) (m) (kg/m^3) + prop = Property(ID=ip+1, MGDpth=P[0], MGThck=P[1], MGDens=P[2]) + Graph.addMiscProperty('FillGroups',prop) + + # --- Nodes + Nodes = hd['Joints'] + for iNode,N in enumerate(Nodes): + node = Node(ID=N[0], x=N[1], y=N[2], z=N[3]) + Graph.addNode(node) + Graph.setNodeNodalProp(node, 'AxCoefs', N[4]) + + # --- Elements + PropSets=['SimpleCoefs','DepthCoefs','MemberCoefs'] + Members = hd['Members'] + for ie,E in enumerate(Members): + # MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod PropPot + EE = E[:5].astype(int) + Type = int(E[6]) # MCoefMod + Pot = E[7].lower()[0]=='t' + elem= Element(ID=EE[0], nodeIDs=EE[1:3], propIDs=EE[3:5], propset='Section', CoefMod=PropSets[Type-1], DivSize=float(E[5]), Pot=Pot) + elem.data['object']='cylinder' + elem.data['color'] = type2Color(Pot) + Graph.addElement(elem) + # Nodal prop data NOTE: can't do that anymore for memebrs with different diameters at the same node + if propToNodes: + # NOTE: not by default because of feature with members with different diameters at the same node + Graph.setElementNodalProp(elem, propset='Section', propIDs=EE[3:5]) + if propToElem: + Graph.setElementNodalPropToElem(elem) # TODO, this shouldn't be needed + + if Type==1: + # Simple + Graph.setElementNodalProp(elem, propset='SimpleCoefs', propIDs=[1,1]) + else: + print('>>> TODO type DepthCoefs and MemberCoefs') + # NOTE: this is disallowed by default because a same node can have two different diameters in SubDyn (it's by element) + #Graph.setElementNodalProp(elem, propset=PropSets[Type-1], propIDs=E[3:5]) + + return Graph + + +# --------------------------------------------------------------------------------} +# --- SubDyn Summary file +# --------------------------------------------------------------------------------{ +def subdynSumToGraph(data, Graph=None): + """ + data: dict-like object as returned by weio + """ + type2Color=[ + (0.1,0.1,0.1), # Watchout based on background + (0.753,0.561,0.05), # 1 Beam + (0.541,0.753,0.05), # 2 Cable + (0.753,0.05,0.204), # 3 Rigid + (0.918,0.702,0.125), # 3 Rigid + ] + + #print(data.keys()) + DOF2Nodes = data['DOF2Nodes'] + nDOF = data['nDOF_red'] + + if Graph is None: + Graph = GraphModel() + + # --- Nodes and DOFs + Nodes = data['Nodes'] + for iNode,N in enumerate(Nodes): + if len(N)==9: # Temporary fix + #N[4]=np.float(N[4].split()[0]) + N=N.astype(np.float32) + ID = int(N[0]) + nodeDOFs=DOF2Nodes[(DOF2Nodes[:,1]==ID),0] # NOTE: these were reindex to start at 0 + node = Node(ID=ID, x=N[1], y=N[2], z=N[3], Type=int(N[4]), DOFs=nodeDOFs) + Graph.addNode(node) + + # --- Elements + Elements = data['Elements'] + for ie,E in enumerate(Elements): + nodeIDs=[int(E[1]),int(E[2])] + # shear_[-] Ixx_[m^4] Iyy_[m^4] Jzz_[m^4] T0_[N] + D = np.sqrt(E[7]/np.pi)*4 # <<< Approximation basedon area TODO use I as well + elem= Element(int(E[0]), nodeIDs, Type=int(E[5]), Area=E[7], rho=E[8], E=E[7], G=E[8], D=D) + elem.data['object']='cylinder' + elem.data['color'] = type2Color[int(E[5])] + Graph.addElement(elem) + + #print(self.extent) + #print(self.maxDimension) + + # --- Graph Modes + # Very important sortDims should be None to respect order of nodes + dispGy, posGy, InodesGy, dispCB, posCB, InodesCB = data.getModes(sortDim=None) + for iMode in range(dispGy.shape[2]): + Graph.addMode(displ=dispGy[:,:,iMode],name='GY{:d}'.format(iMode+1), freq=1/(2*np.pi)) + + for iMode in range(dispCB.shape[2]): + Graph.addMode(displ=dispCB[:,:,iMode],name='CB{:d}'.format(iMode+1), freq=data['CB_frequencies'][iMode]) + + #print(Graph.toJSON()) + + + return Graph + + + +if __name__ == '__main__': + from .fast_input_file import FASTInputFile + + filename='../../_data/Monopile/MT100_SD.dat' + # filename='../../_data/Monopile/TetraSpar_SubDyn_v3.dat' + + sd = FASTInputFile(filename) +# sd.write('OutMT.dat') + Graph = sd.toGraph() + Graph.divideElements(2) + print(Graph) + print(Graph.sortNodesBy('z')) + # print(Graph.nodalDataFrame(sortBy='z')) + print(Graph.points) + print(Graph.connectivity) + print(Graph) + +# import numpy as np +# import matplotlib.pyplot as plt +# from matplotlib import collections as mc +# from mpl_toolkits.mplot3d import Axes3D +# fig = plt.figure() +# ax = fig.add_subplot(1,2,1,projection='3d') +# +# lines=Graph.toLines(output='coord') +# for l in lines: +# # ax.add_line(l) +# ax.plot(l[:,0],l[:,1],l[:,2]) +# +# ax.autoscale() +# ax.set_xlim([-40,40]) +# ax.set_ylim([-40,40]) +# ax.set_zlim([-40,40]) +# # ax.margins(0.1) +# +# plt.show() + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py new file mode 100644 index 0000000000..e8a13f9269 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py @@ -0,0 +1,615 @@ +import os +import numpy as np +import re +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class BrokenFormatError(Exception): pass + +class SlowReaderNeededError(Exception): + pass + + +_lin_vec = ['x','xd','xdot','u','y','z','header'] +_lin_mat = ['A','B','C','D','dUdu','dUdy', 'StateRotation', 'M'] +_lin_dict = ['x_info','xdot_info','u_info','y_info'] + +class FASTLinearizationFile(File): + """ + Read/write an OpenFAST linearization file. The object behaves like a dictionary. + + Main keys + --------- + - 'x', 'xdot', 'xd', 'u', 'y', 'z', 'A', 'B', 'C', 'D' + + Main methods + ------------ + - read, write, toDataFrame, keys, xdescr, ydescr, udescr + + Examples + -------- + + f = FASTLinearizationFile('5MW.1.lin') + print(f.keys()) + print(f['u']) # input operating point + print(f.udescr()) # description of inputs + + # use a dataframe with "named" columns and rows + df = f.toDataFrame() + print(df['A'].columns) + print(df['A']) + + """ + @staticmethod + def defaultExtensions(): + return ['.lin'] + + @staticmethod + def formatName(): + return 'FAST linearization output' + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, starSub=None, removeStatesPattern=None): + """ Reads the file self.filename, or `filename` if provided + + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + - removeStatesPattern: if None, do nothing + otherwise search for states matching a pattern and remove them + e.g: 'tower|Drivetrain' or '^AD' + see removeStates in this file. + """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + # --- Main Data + self['header']=[] + + # --- StarValues replacement `*****` -> inf + starPattern = re.compile(r"[\*]+") + starSubStr = ' inf ' + starSubFn = lambda si: starPattern.sub(starSubStr, si) + + # Reading function, with slow or fast reader. See sub functions at end of this file + def doRead(slowReader=False): + with open(self.filename, 'r', errors="surrogateescape") as f: + # --- Reader header + self['header'], lastLine=readToMarker(f, 'Jacobians included', 30) + self['header'].append(lastLine) + nx = extractVal(self['header'],'Number of continuous states:' , dtype=int, NA=np.nan, missing=None) + nxd = extractVal(self['header'],'Number of discrete states:' , dtype=int, NA=np.nan, missing=None) + nz = extractVal(self['header'],'Number of constraint states:' , dtype=int, NA=np.nan, missing=None) + nu = extractVal(self['header'],'Number of inputs:' , dtype=int, NA=np.nan, missing=None) + ny = extractVal(self['header'],'Number of outputs:' , dtype=int, NA=np.nan, missing=None) + bJac = extractVal(self['header'],'Jacobians included in this file?', dtype=bool, NA=False, missing=None) + self['Azimuth'] = extractVal(self['header'], 'Azimuth:' , dtype=float, NA=np.nan, missing=None) + self['RotSpeed'] = extractVal(self['header'], 'Rotor Speed:', dtype=float, NA=np.nan, missing=None) # rad/s + self['WindSpeed'] = extractVal(self['header'], 'Wind Speed:' , dtype=float, NA=np.nan, missing=None) + self['t'] = extractVal(self['header'],'Simulation time:' , dtype=float, NA=np.nan, missing=None) + for i, line in enumerate(f): + line = line.strip() + if line.find('Order of continuous states:')>=0: + self['x'], self['x_info'] = readOP(f, nx, 'x', defaultDerivOrder=1, starSubFn=starSubFn, starSub=starSub) + elif line.find('Order of continuous state derivatives:')>=0: + self['xdot'], self['xdot_info'] = readOP(f, nx, 'xdot', defaultDerivOrder=2, starSubFn=starSubFn, starSub=starSub) + elif line.find('Order of discrete states:')>=0: + self['xd'], self['xd_info'] = readOP(f, nxd, 'xd', defaultDerivOrder=2, starSubFn=starSubFn, starSub=starSub) + elif line.find('Order of inputs')>=0: + self['u'], self['u_info'] = readOP(f, nu, 'u', defaultDerivOrder=0, starSubFn=starSubFn, starSub=starSub) + elif line.find('Order of outputs')>=0: + self['y'], self['y_info'] = readOP(f, ny, 'y', defaultDerivOrder=0, starSubFn=starSubFn, starSub=starSub) + elif line.find('Order of constraint states:')>=0: + self['z'], self['z_info'] = readOP(f, nz, 'z', defaultDerivOrder=0, starSubFn=starSubFn, starSub=starSub) + elif line.find('A:')>=0: + self['A'] = readMat(f, nx, nx, 'A', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + elif line.find('B:')>=0: + self['B'] = readMat(f, nx, nu, 'B', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + elif line.find('C:')>=0: + self['C'] = readMat(f, ny, nx, 'C', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + elif line.find('D:')>=0: + self['D'] = readMat(f, ny, nu, 'D', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + elif line.find('dUdu:')>=0: + self['dUdu'] = readMat(f, nu, nu,'dUdu', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + elif line.find('dUdy:')>=0: + self['dUdy'] = readMat(f, nu, ny,'dUdy', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + elif line.find('StateRotation:')>=0: + pass + # TODO + #StateRotation: + elif line.find('ED M:')>=0: + self['EDDOF'] = line[5:].split() + self['M'] = readMat(f, 24, 24,'M', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) + try: + doRead(slowReader=False) + except SlowReaderNeededError: + doRead(slowReader=True) + + if removeStatesPattern is not None: + self.removeStates(pattern=removeStatesPattern) + + def toString(self): + s='' + return s + + def _write(self): + with open(self.filename,'w') as f: + f.write(self.toString()) + + @property + def nx(self): + if 'x' in self.keys(): + return len(self['x']) + return 0 + + @property + def nxd(self): + if 'xd' in self.keys(): + return len(self['xd']) + return 0 + + @property + def nu(self): + if 'u' in self.keys(): + return len(self['u']) + return 0 + + @property + def ny(self): + if 'y' in self.keys(): + return len(self['y']) + return 0 + + @property + def nz(self): + if 'z' in self.keys(): + return len(self['z']) + return 0 + + @property + def u_descr(self): + if self.nu>0: + return self['u_info']['Description'] + else: + return [] + + @property + def x_descr(self): + if self.nx>0: + return self['x_info']['Description'] + else: + return [] + + @property + def xd_descr(self): # Discrete states not derivative! + if self.nxd>0: + return self['xd_info']['Description'] + else: + return [] + + @property + def xdot_descr(self): + if self.nx>0: + return self['xdot_info']['Description'] + else: + return [] + + @property + def y_descr(self): + if self.ny>0: + return self['y_info']['Description'] + else: + return [] + + @property + def z_descr(self): + if self.nz>0: + return self['z_info']['Description'] + else: + return [] + + def __repr__(self): + s='<{} object> with attributes:\n'.format(type(self).__name__) + s+=' - filename: {}\n'.format(self.filename) + s+=' * nx : {}\n'.format(self.nx) + s+=' * nxd : {}\n'.format(self.nxd) + s+=' * nu : {}\n'.format(self.nu) + s+=' * ny : {}\n'.format(self.ny) + s+=' * nz : {}\n'.format(self.nz) + s+='keys:\n' + for k,v in self.items(): + if k in _lin_vec: + s+=' - {:15s}: shape: ({}) \n'.format(k,len(v)) + elif k in _lin_mat: + s+=' - {:15s}: shape: ({} x {})\n'.format(k,v.shape[0], v.shape[1]) + elif k in _lin_dict: + s+=' - {:15s}: dict with keys: {} \n'.format(k,list(v.keys())) + else: + s+=' - {:15s}: {}\n'.format(k,v) + s+='methods:\n' + s+=' - toDataFrame: convert A,B,C,D to dataframes\n' + s+=' - removeStates: remove states\n' + s+=' - eva: eigenvalue analysis\n' + + return s + + def toDataFrame(self): + import pandas as pd + dfs={} + + xdescr_short = short_descr(self.x_descr) + xddescr_short = short_descr(self.xd_descr) + xdotdescr_short = short_descr(self.xdot_descr) + udescr_short = short_descr(self.u_descr) + ydescr_short = short_descr(self.y_descr) + zdescr_short = short_descr(self.z_descr) + + if 'A' in self.keys(): + dfs['A'] = pd.DataFrame(data = self['A'], index=xdescr_short, columns=xdescr_short) + if 'B' in self.keys(): + dfs['B'] = pd.DataFrame(data = self['B'], index=xdescr_short, columns=udescr_short) + if 'C' in self.keys(): + dfs['C'] = pd.DataFrame(data = self['C'], index=ydescr_short, columns=xdescr_short) + if 'D' in self.keys(): + dfs['D'] = pd.DataFrame(data = self['D'], index=ydescr_short, columns=udescr_short) + if 'x' in self.keys(): + dfs['x'] = pd.DataFrame(data = np.asarray(self['x']).reshape((1,-1)), columns=xdescr_short) + if 'xd' in self.keys(): + dfs['xd'] = pd.DataFrame(data = np.asarray(self['xd']).reshape((1,-1))) + if 'xdot' in self.keys(): + dfs['xdot'] = pd.DataFrame(data = np.asarray(self['xdot']).reshape((1,-1)), columns=xdotdescr_short) + if 'u' in self.keys(): + dfs['u'] = pd.DataFrame(data = np.asarray(self['u']).reshape((1,-1)), columns=udescr_short) + if 'y' in self.keys(): + dfs['y'] = pd.DataFrame(data = np.asarray(self['y']).reshape((1,-1)), columns=ydescr_short) + if 'z' in self.keys(): + dfs['z'] = pd.DataFrame(data = np.asarray(self['z']).reshape((1,-1)), columns=zdescr_short) + if 'M' in self.keys(): + dfs['M'] = pd.DataFrame(data = self['M'], index=self['EDDOF'], columns=self['EDDOF']) + if 'dUdu' in self.keys(): + dfs['dUdu'] = pd.DataFrame(data = self['dUdu'], index=udescr_short, columns=udescr_short) + if 'dUdy' in self.keys(): + dfs['dUdy'] = pd.DataFrame(data = self['dUdy'], index=udescr_short, columns=ydescr_short) + + return dfs + + def removeStates(self, pattern=None, Irm=None, verbose=True): + """ + remove states based on pattern or index + + - pattern: e.g: 'tower|Drivetrain' or '^AD' + """ + if self.nx==0: + return + desc = self['x_info']['Description'] + Iall = set(range(len(desc))) + sInfo='' + if pattern is not None: + Irm = [i for i, s in enumerate(desc) if re.search(pattern, s)] + sInfo=' with pattern `{}`'.format(pattern) + if verbose: + print('[INFO] removing {}/{} states{}'.format(len(Irm), len(Iall), sInfo)) + Ikeep = list(Iall.difference(Irm)) + Ikeep.sort() # safety + if len(Ikeep)==0: + raise Exception('All states have been removed{}!'.format(sInfo)) + # Remove states and info in vectors + self['x'] = self['x'][Ikeep] + self['xdot'] = self['xdot'][Ikeep] + for k in self['x_info'].keys(): + self['x_info'][k] = self['x_info'][k][Ikeep] + self['xdot_info'][k] = self['xdot_info'][k][Ikeep] + # Remove states in matrices + if 'A' in self.keys(): + self['A'] = self['A'][np.ix_(Ikeep,Ikeep)] + if 'B' in self.keys(): + self['B'] = self['B'][Ikeep,:] + if 'C' in self.keys(): + self['C'] = self['C'][:, Ikeep] + + + def eva(self, normQ=None, sort=True, discardIm=True): + """ Perform eigenvalue analysis of A matrix and return frequencies and damping """ + # --- Excerpt from welib.tools.eva.eigA + A = self['A'] + n,m = A.shape + if m!=n: + raise Exception('Matrix needs to be square') + # Basic EVA + D,Q = np.linalg.eig(A) + Lambda = np.diag(D) + v = np.diag(Lambda) + + # Selecting eigenvalues with positive imaginary part (frequency) + if discardIm: + Ipos = np.imag(v)>0 + Q = Q[:,Ipos] + v = v[Ipos] + + # Frequencies and damping based on compled eigenvalues + omega_0 = np.abs(v) # natural cylic frequency [rad/s] + freq_d = np.imag(v)/(2*np.pi) # damped frequency [Hz] + zeta = - np.real(v)/omega_0 # damping ratio + freq_0 = omega_0/(2*np.pi) # natural frequency [Hz] + # Sorting + if sort: + I = np.argsort(freq_0) + freq_d = freq_d[I] + freq_0 = freq_0[I] + zeta = zeta[I] + Q = Q[:,I] + + # Normalize Q + if normQ=='byMax': + for j in range(Q.shape[1]): + q_j = Q[:,j] + scale = np.max(np.abs(q_j)) + Q[:,j]= Q[:,j]/scale + return freq_d, zeta, Q, freq_0 + + +def short_descr(slist): + """ Shorten and "unify" the description from lin file """ + def shortname(s): + s=s.strip() + s = s.replace('(m/s)' , '_[m/s]' ); + s = s.replace('(kW)' , '_[kW]' ); + s = s.replace('(deg)' , '_[deg]' ); + s = s.replace('(N)' , '_[N]' ); + s = s.replace('(kN-m)' , '_[kNm]' ); + s = s.replace('(N-m)' , '_[Nm]' ); + s = s.replace('(kN)' , '_[kN]' ); + s = s.replace('(rpm)' , '_[rpm]' ); + s = s.replace('(rad)' , '_[rad]' ); + s = s.replace('(rad/s)' , '_[rad/s]' ); + s = s.replace('(rad/s^2)', '_[rad/s^2]' ); + s = s.replace('(m/s^2)' , '_[m/s^2]'); + s = s.replace('(deg/s^2)','_[deg/s^2]'); + s = s.replace('(m)' , '_[m]' ); + s = s.replace(', m/s/s','_[m/s^2]'); + s = s.replace(', m/s^2','_[m/s^2]'); + s = s.replace(', m/s','_[m/s]'); + s = s.replace(', m','_[m]'); + s = s.replace(', rad/s/s','_[rad/s^2]'); + s = s.replace(', rad/s^2','_[rad/s^2]'); + s = s.replace(', rad/s','_[rad/s]'); + s = s.replace(', rad','_[rad]'); + s = s.replace(', -','_[-]'); + s = s.replace(', Nm/m','_[Nm/m]'); + s = s.replace(', Nm','_[Nm]'); + s = s.replace(', N/m','_[N/m]'); + s = s.replace(', N','_[N]'); + s = s.replace('(1)','1') + s = s.replace('(2)','2') + s = s.replace('(3)','3') + s= re.sub(r'\([^)]*\)','', s) # remove parenthesis + s = s.replace('ED ',''); + s = s.replace('BD_','BD_B'); + s = s.replace('IfW ',''); + s = s.replace('Extended input: ','') + s = s.replace('1st tower ','qt1'); + s = s.replace('2nd tower ','qt2'); + nd = s.count('First time derivative of ') + if nd>=0: + s = s.replace('First time derivative of ' ,''); + if nd==1: + s = 'd_'+s.strip() + elif nd==2: + s = 'dd_'+s.strip() + s = s.replace('Variable speed generator DOF ','psi_rot'); # NOTE: internally in FAST this is the azimuth of the rotor + s = s.replace('fore-aft bending mode DOF ' ,'FA' ); + s = s.replace('side-to-side bending mode DOF','SS' ); + s = s.replace('bending-mode DOF of blade ' ,'' ); + s = s.replace(' rotational-flexibility DOF, rad','-ROT' ); + s = s.replace('rotational displacement in ','rot' ); + s = s.replace('Drivetrain','DT' ); + s = s.replace('translational displacement in ','trans' ); + s = s.replace('finite element node ','N' ); + s = s.replace('-component position of node ','posN') + s = s.replace('-component inflow on tower node','TwrN') + s = s.replace('-component inflow on blade 1, node','Bld1N') + s = s.replace('-component inflow on blade 2, node','Bld2N') + s = s.replace('-component inflow on blade 3, node','Bld3N') + s = s.replace('-component inflow velocity at node','N') + s = s.replace('X translation displacement, node','TxN') + s = s.replace('Y translation displacement, node','TyN') + s = s.replace('Z translation displacement, node','TzN') + s = s.replace('X translation velocity, node','TVxN') + s = s.replace('Y translation velocity, node','TVyN') + s = s.replace('Z translation velocity, node','TVzN') + s = s.replace('X translation acceleration, node','TAxN') + s = s.replace('Y translation acceleration, node','TAyN') + s = s.replace('Z translation acceleration, node','TAzN') + s = s.replace('X orientation angle, node' ,'RxN') + s = s.replace('Y orientation angle, node' ,'RyN') + s = s.replace('Z orientation angle, node' ,'RzN') + s = s.replace('X rotation velocity, node' ,'RVxN') + s = s.replace('Y rotation velocity, node' ,'RVyN') + s = s.replace('Z rotation velocity, node' ,'RVzN') + s = s.replace('X rotation acceleration, node' ,'RAxN') + s = s.replace('Y rotation acceleration, node' ,'RAyN') + s = s.replace('Z rotation acceleration, node' ,'RAzN') + s = s.replace('X force, node','FxN') + s = s.replace('Y force, node','FyN') + s = s.replace('Z force, node','FzN') + s = s.replace('X moment, node','MxN') + s = s.replace('Y moment, node','MyN') + s = s.replace('Z moment, node','MzN') + s = s.replace('FX', 'Fx') + s = s.replace('FY', 'Fy') + s = s.replace('FZ', 'Fz') + s = s.replace('MX', 'Mx') + s = s.replace('MY', 'My') + s = s.replace('MZ', 'Mz') + s = s.replace('FKX', 'FKx') + s = s.replace('FKY', 'FKy') + s = s.replace('FKZ', 'FKz') + s = s.replace('MKX', 'MKx') + s = s.replace('MKY', 'MKy') + s = s.replace('MKZ', 'MKz') + s = s.replace('Nodes motion','') + s = s.replace('cosine','cos' ); + s = s.replace('sine','sin' ); + s = s.replace('collective','coll.'); + s = s.replace('Blade','Bld'); + s = s.replace('rotZ','TORS-R'); + s = s.replace('transX','FLAP-D'); + s = s.replace('transY','EDGE-D'); + s = s.replace('rotX','EDGE-R'); + s = s.replace('rotY','FLAP-R'); + s = s.replace('flapwise','FLAP'); + s = s.replace('edgewise','EDGE'); + s = s.replace('horizontal surge translation DOF','Surge'); + s = s.replace('horizontal sway translation DOF','Sway'); + s = s.replace('vertical heave translation DOF','Heave'); + s = s.replace('roll tilt rotation DOF','Roll'); + s = s.replace('pitch tilt rotation DOF','Pitch'); + s = s.replace('yaw rotation DOF','Yaw'); + s = s.replace('vertical power-law shear exponent','alpha') + s = s.replace('horizontal wind speed ','WS') + s = s.replace('propagation direction','WD') + s = s.replace(' pitch command','pitch') + s = s.replace('HSS_','HSS') + s = s.replace('Bld','B') + s = s.replace('tower','Twr') + s = s.replace('Tower','Twr') + s = s.replace('Nacelle','Nac') + s = s.replace('Platform','Ptfm') + s = s.replace('SrvD','SvD') + s = s.replace('Generator torque','Qgen') + s = s.replace('coll. blade-pitch command','PitchColl') + s = s.replace('wave elevation at platform ref point','WaveElevRefPoint') + s = s.replace('1)','1'); + s = s.replace('2)','2'); + s = s.replace('3)','3'); + s = s.replace(',',''); + s = s.replace(' ',''); + s=s.strip() + return s + return [shortname(s) for s in slist] + + + +def extractVal(lines, key, NA=None, missing=None, dtype=float): + for l in lines: + if l.find(key)>=0: + #l = starPattern.sub(starSubStr, l) + try: + return dtype(l.split(key)[1].split()[0]) + except: + return NA + return missing + +def readToMarker(fid, marker, nMax): + lines=[] + for i, line in enumerate(fid): + if i>nMax: + raise BrokenFormatError('`{}` not found in file'.format(marker)) + if line.find(marker)>=0: + break + lines.append(line.strip()) + return lines, line + +def readOP(fid, n, name='', defaultDerivOrder=1, filename='', starSubFn=None, starSub=None): + OP=[] + Var = {'RotatingFrame': [], 'DerivativeOrder': [], 'Description': []} + colNames=fid.readline().strip() + dummy= fid.readline().strip() + bHasDeriv= colNames.find('Derivative Order')>=0 + for i, line in enumerate(fid): + line = line.strip() + line = starSubFn(line) + sp = line.split() + if sp[1].find(',')>=0: + # Most likely this OP has three values (e.g. orientation angles) + # For now we discard the two other values + OP.append(float(sp[1][:-1])) + iRot=4 + else: + OP.append(float(sp[1])) + iRot=2 + Var['RotatingFrame'].append(sp[iRot]) + if bHasDeriv: + Var['DerivativeOrder'].append(int(sp[iRot+1])) + Var['Description'].append(' '.join(sp[iRot+2:]).strip()) + else: + Var['DerivativeOrder'].append(defaultDerivOrder) + Var['Description'].append(' '.join(sp[iRot+1:]).strip()) + if i>=n-1: + break + OP = np.asarray(OP) + nInf = np.sum(np.isinf(OP)) + if nInf>0: + sErr = 'Some ill-formated/infinite values (e.g. `*******`) were found in the vector `{}`\n\tin linflile: {}'.format(name, filename) + if starSub is None: + raise Exception(sErr) + else: + print('[WARN] '+sErr) + OP[np.isinf(OP)] = starSub + + Var['RotatingFrame'] = np.asarray(Var['RotatingFrame']) + Var['DerivativeOrder'] = np.asarray(Var['DerivativeOrder']) + Var['Description'] = np.asarray(Var['Description']) + return OP, Var + + + +def readMat(fid, n, m, name='', slowReader=False, filename='', starSubFn=None, starSub=None): + if not slowReader: + try: + return np.array([fid.readline().strip().split() for i in np.arange(n)],dtype=float) + except: + print('[INFO] Failed to read some value in matrix {}, trying slower reader'.format(name)) + raise SlowReaderNeededError() + else: + #vals = vals.ravel() + #vals = np.array(list(map(starSubFn, vals))).reshape(n,m) + vals=np.array([starSubFn( fid.readline().strip() ).split() for i in np.arange(n)], dtype=str) + try: + vals = vals.astype(float) # This could potentially fail + except: + raise Exception('Failed to convert into an array of float the matrix `{}`\n\tin linfile: {}'.format(name, filename)) + if vals.shape[0]!=n or vals.shape[1]!=m: + shape1 = vals.shape + shape2 = (n,m) + raise Exception('Shape of matrix `{}` has wrong dimension ({} instead of {})\n\tin linfile: {}'.format(name, shape1, shape2, name, filename)) + + nNaN = np.sum(np.isnan(vals.ravel())) + nInf = np.sum(np.isinf(vals.ravel())) + if nInf>0: + sErr = 'Some ill-formated/infinite values (e.g. `*******`) were found in the matrix `{}`\n\tin linflile: {}'.format(name, filename) + if starSub is None: + raise Exception(sErr) + else: + print('[WARN] '+sErr) + vals[np.isinf(vals)] = starSub + if nNaN>0: + raise Exception('Some NaN values were found in the matrix `{}`\n\tin linfile: `{}`.'.format(name, filename)) + return vals + +if __name__ == '__main__': + f = FASTLinearizationFile('../../data/example_files/StandstillSemi_ForID_EDHD.1.lin') + print(f) + _, zeta1, _, freq1 = f.eva() + f.removeStates(pattern=r'^AD') + print(f) + dfs = f.toDataFrame() + _, zeta2, _, freq2 = f.eva() + print('f',freq1) + print('f',freq2) + print('d',zeta1) + print('d',zeta2) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py new file mode 100644 index 0000000000..df03aac3d8 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py @@ -0,0 +1,651 @@ +""" +Tools to read/write OpenFAST output files + +Main content: + +- class FASTOutputFile() +- data, info = def load_output(filename) +- data, info = def load_ascii_output(filename) +- data, info = def load_binary_output(filename, use_buffer=True) +- def writeDataFrame(df, filename, binary=True) +- def writeBinary(fileName, channels, chanNames, chanUnits, fileID=2, descStr='') + +NOTE: + - load_binary and writeBinary are not "fully reversible" for now. + Some small numerical errors are introduced in the conversion. + Some of the error is likely due to the fact that Python converts to "int" and "float" (double). + Maybe all the operations should be done in single. I tried but failed. + I simply wonder if the operation is perfectly reversible. + + +""" +from itertools import takewhile +import numpy as np +import pandas as pd +import struct +import ctypes +import os +import re +try: + from .file import File, WrongFormatError, BrokenReaderError, EmptyFileError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class WrongReaderError(Exception): pass + class BrokenFormatError(Exception): pass + class EmptyFileError(Exception): pass +try: + from .csv_file import CSVFile +except: + print('CSVFile not available') + + + +FileFmtID_WithTime = 1 # File identifiers used in FAST +FileFmtID_WithoutTime = 2 +FileFmtID_NoCompressWithoutTime = 3 +FileFmtID_ChanLen_In = 4 # Channel length included in file + + +# --------------------------------------------------------------------------------} +# --- OUT FILE +# --------------------------------------------------------------------------------{ +class FASTOutputFile(File): + """ + Read an OpenFAST ouput file (.out, .outb, .elev). + + Main methods + ------------ + - read, write, toDataFrame + + Examples + -------- + + # read an output file, convert it to pandas dataframe, modify it, write it back + f = FASTOutputFile('5MW.outb') + df=f.toDataFrame() + time = df['Time_[s]'] + Omega = df['RotSpeed_[rpm]'] + df['Time_[s]'] -=100 + f.writeDataFrame(df, '5MW_TimeShifted.outb') + + """ + + @staticmethod + def defaultExtensions(): + return ['.out','.outb','.elm','.elev','.dbg','.dbg2'] + + @staticmethod + def formatName(): + return 'FAST output file' + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # --- Calling (children) function to read + self._read(**kwargs) + + def _read(self): + def readline(iLine): + with open(self.filename) as f: + for i, line in enumerate(f): + if i==iLine-1: + return line.strip() + elif i>=iLine: + break + + ext = os.path.splitext(self.filename.lower())[1] + self.info={} + self['binary']=False + try: + if ext in ['.out','.elev','.dbg','.dbg2']: + self.data, self.info = load_ascii_output(self.filename) + elif ext=='.outb': + self.data, self.info = load_binary_output(self.filename) + self['binary']=True + elif ext=='.elm': + F=CSVFile(filename=self.filename, sep=' ', commentLines=[0,2],colNamesLine=1) + self.data = F.data + del F + self.info['attribute_units']=readline(3).replace('sec','s').split() + self.info['attribute_names']=self.data.columns.values + else: + if isBinary(self.filename): + self.data, self.info = load_binary_output(self.filename) + self['binary']=True + else: + self.data, self.info = load_ascii_output(self.filename) + self['binary']=False + except MemoryError as e: + raise BrokenReaderError('FAST Out File {}: Memory error encountered\n{}'.format(self.filename,e)) + except Exception as e: + raise WrongFormatError('FAST Out File {}: {}'.format(self.filename,e.args)) + if self.data.shape[0]==0: + raise EmptyFileError('This FAST output file contains no data: {}'.format(self.filename)) + + if self.info['attribute_units'] is not None: + self.info['attribute_units'] = [re.sub(r'[()\[\]]','',u) for u in self.info['attribute_units']] + + + def _write(self, binary=None, fileID=4): + if binary is None: + binary = self['binary'] + + if binary: + # NOTE: user provide a filename, we allow overwrite + self.toOUTB(filename=self.filename, fileID=fileID, noOverWrite=False) + else: + # ascii output + with open(self.filename,'w') as f: + f.write('\t'.join(['{:>10s}'.format(c) for c in self.info['attribute_names']])+'\n') + f.write('\t'.join(['{:>10s}'.format('('+u+')') for u in self.info['attribute_units']])+'\n') + # TODO better.. + f.write('\n'.join(['\t'.join(['{:10.4f}'.format(y[0])]+['{:10.3e}'.format(x) for x in y[1:]]) for y in self.data])) + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + # --- Example (returning one DataFrame): + # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) + if self.info['attribute_units'] is not None: + if len(self.info['attribute_names'])!=len(self.info['attribute_units']): + cols=self.info['attribute_names'] + print('[WARN] not all columns have units! Skipping units') + else: + cols=[n+'_['+u.replace('sec','s')+']' for n,u in zip(self.info['attribute_names'],self.info['attribute_units'])] + else: + cols=self.info['attribute_names'] + if isinstance(self.data, pd.DataFrame): + df= self.data + df.columns=cols + else: + if len(cols)!=self.data.shape[1]: + raise BrokenFormatError('Inconstistent number of columns between headers ({}) and data ({}) for file {}'.format(len(cols), self.data.shape[1], self.filename)) + df = pd.DataFrame(data=self.data,columns=cols) + + return df + + def writeDataFrame(self, df, filename, binary=True): + writeDataFrame(df, filename, binary=binary) + + def __repr__(self): + s='<{} object> with attributes:\n'.format(type(self).__name__) + s+=' - info ({})\n'.format(type(self.info)) + s+=' - data ({})\n'.format(type(self.data)) + s+='and keys: {}\n'.format(self.keys()) + return s + + # -------------------------------------------------------------------------------- + # --- Converters + # -------------------------------------------------------------------------------- + def toOUTB(self, filename=None, extension='.outb', fileID=4, noOverWrite=True, **kwargs): + #NOTE: we override the File class here + if filename is None: + base, _ = os.path.splitext(self.filename) + filename = base + extension + else: + base, ext = os.path.splitext(filename) + if len(ext)!=0: + extension = ext + if (filename==self.filename) and noOverWrite: + raise Exception('Not overwritting {}. Specify a filename or an extension.'.format(filename)) + + # NOTE: fileID=2 will chop the channels name of long channels use fileID4 instead + channels = self.data + chanNames = self.info['attribute_names'] + chanUnits = self.info['attribute_units'] + descStr = self.info['description'] + if isinstance(descStr, list): + descStr=(''.join(descStr[:2])).replace('\n','') + writeBinary(filename, channels, chanNames, chanUnits, fileID=fileID, descStr=descStr) + + +# -------------------------------------------------------------------------------- +# --- Helper low level functions +# -------------------------------------------------------------------------------- +def isBinary(filename): + with open(filename, 'r') as f: + try: + # first try to read as string + l = f.readline() + # then look for weird characters + for c in l: + code = ord(c) + if code<10 or (code>14 and code<31): + return True + return False + except UnicodeDecodeError: + return True + + + + + +def load_ascii_output(filename, method='numpy', encoding='ascii'): + + + if method in ['forLoop','pandas']: + from .file import numberOfLines + nLines = numberOfLines(filename, method=2) + + with open(filename, encoding=encoding, errors='ignore') as f: + info = {} + info['name'] = os.path.splitext(os.path.basename(filename))[0] + # Header is whatever is before the keyword `time` + header = [] + maxHeaderLines=35 + headerRead = False + for i in range(maxHeaderLines): + l = f.readline() + if not l: + raise Exception('Error finding the end of FAST out file header. Keyword Time missing.') + # Check for utf-16 + if l[:3] == '\x00 \x00': + f.close() + encoding='' + print('[WARN] Attempt to re-read the file with encoding utf-16') + return load_ascii_output(filename=filename, method=method, encoding='utf-16') + first_word = (l+' dummy').lower().split()[0] + in_header= (first_word != 'time') and (first_word != 'alpha') + if in_header: + header.append(l) + else: + info['description'] = header + info['attribute_names'] = l.split() + info['attribute_units'] = [unit[1:-1] for unit in f.readline().split()] + headerRead=True + break + if not headerRead: + raise WrongFormatError('Could not find the keyword "Time" or "Alpha" in the first {} lines of the file'.format(maxHeaderLines)) + + nHeader = len(header)+1 + nCols = len(info['attribute_names']) + + if method=='numpy': + # The most efficient, and will remove empty lines and the lines that starts with "This" + # ("This" is found at the end of some Hydro Out files..) + data = np.loadtxt(f, comments=('This')) + + elif method =='pandas': + # Could probably be made more efficient, but + f.close() + nRows = nLines-nHeader + sep=r'\s+' + cols= ['C{}'.format(i) for i in range(nCols)] + df = pd.read_csv(filename, sep=sep, header=0, skiprows=nHeader, names=cols, dtype=float, na_filter=False, nrows=nRows, engine='pyarrow'); print(df) + data=df.values + + elif method == 'forLoop': + # The most inefficient + nRows = nLines-nHeader + sep=r'\s+' + data = np.zeros((nRows, nCols)) + for i in range(nRows): + l = f.readline().strip() + sp = np.array(l.split()).astype(float) + data[i,:] = sp[:nCols] + + elif method == 'listCompr': + # --- Method 4 - List comprehension + # Data, up to end of file or empty line (potential comment line at the end) + data = np.array([l.strip().split() for l in takewhile(lambda x: len(x.strip())>0, f.readlines())]).astype(float) + else: + raise NotImplementedError() + + return data, info + + +def load_binary_output(filename, use_buffer=True): + """ + 03/09/15: Ported from ReadFASTbinary.m by Mads M Pedersen, DTU Wind + 24/10/18: Low memory/buffered version by E. Branlard, NREL + 18/01/19: New file format for exctended channels, by E. Branlard, NREL + + Info about ReadFASTbinary.m: + % Author: Bonnie Jonkman, National Renewable Energy Laboratory + % (c) 2012, National Renewable Energy Laboratory + % + % Edited for FAST v7.02.00b-bjj 22-Oct-2012 + """ + StructDict = { + 'uint8': ('B', 1, np.uint8), + 'int16':('h', 2, np.int16), + 'int32':('i', 4, np.int32), + 'float32':('f', 4, np.float32), + 'float64':('d', 8, np.float64)} + def fread(fid, n, dtype): + fmt, nbytes, npdtype = StructDict[dtype] + #return np.array(struct.unpack(fmt * n, fid.read(nbytes * n)), dtype=npdtype) + return struct.unpack(fmt * n, fid.read(nbytes * n)) + + def freadRowOrderTableBuffered(fid, n, type_in, nCols, nOff=0, type_out='float64'): + """ + Reads of row-ordered table from a binary file. + + Read `n` data of type `type_in`, assumed to be a row ordered table of `nCols` columns. + Memory usage is optimized by allocating the data only once. + Buffered reading is done for improved performances (in particular for 32bit python) + + `nOff` allows for additional column space at the begining of the storage table. + Typically, `nOff=1`, provides a column at the beginning to store the time vector. + + @author E.Branlard, NREL + + """ + fmt, nbytes = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type_in] + nLines = int(n/nCols) + GoodBufferSize = 4096*40 + nLinesPerBuffer = int(GoodBufferSize/nCols) + BufferSize = nCols * nLinesPerBuffer + nBuffer = int(n/BufferSize) + # Allocation of data + data = np.zeros((nLines,nCols+nOff), dtype = type_out) + # Reading + try: + nIntRead = 0 + nLinesRead = 0 + while nIntRead0: + op,cl = chars + iu=c.rfind(op) + if iu>1: + name = c[:iu] + unit = c[iu+1:].replace(cl,'') + if name[-1]=='_': + name=name[:-1] + + chanNames.append(name) + chanUnits.append(unit) + + if binary: + writeBinary(filename, channels, chanNames, chanUnits, fileID=FileFmtID_ChanLen_In) + else: + NotImplementedError() + + + +if __name__ == "__main__": + B=FASTOutputFile('tests/example_files/FASTOutBin.outb') + df=B.toDataFrame() + B.writeDataFrame(df, 'tests/example_files/FASTOutBin_OUT.outb') + B.toOUTB(extension='.dat.outb') + B.toParquet() + B.toCSV() + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py new file mode 100644 index 0000000000..2fbcb8696c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py @@ -0,0 +1,270 @@ +import numpy as np +import pandas as pd +import os +# Local +from .mini_yaml import yaml_read + +try: + from .file import File, EmptyFileError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + File=dict + +# --------------------------------------------------------------------------------} +# --- Main Class +# --------------------------------------------------------------------------------{ +class FASTSummaryFile(File): + """ + Read an OpenFAST summary file (.sum, .yaml). The object behaves as a dictionary. + NOTE: open new subdyn format supported. + + Main methods + ------------ + - read, toDataFrame + + Examples + -------- + + # read a subdyn summary file + sum = FASTSummaryFile('5MW.SD.sum.yaml') + print(sum['module']) # SubDyn + M = sum['M'] # Mass matrix + K = sum['K'] # stiffness matrix + + """ + + @staticmethod + def defaultExtensions(): + return ['.sum','.yaml'] + + @staticmethod + def formatName(): + return 'FAST summary file' + + def __init__(self,filename=None, **kwargs): + self.filename = None + if filename: + self.read(filename, **kwargs) + + def read(self, filename=None, header_only=False): + """ """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + with open(self.filename, 'r', errors="surrogateescape") as fid: + header= readFirstLines(fid, 4) + if any(['subdyn' in s.lower() for s in header]): + self['module']='SubDyn' + readSubDynSum(self) + else: + raise NotImplementedError('This summary file format is not yet supported') + + def toDataFrame(self): + if 'module' not in self.keys(): + raise Exception(''); + + if self['module']=='SubDyn': + raise Exception('This should not happen since class was added to subdyn object') + # dfs=subDynToDataFrame(self) + + return dfs + + def toGraph(self): + from .fast_input_file_graph import fastToGraph + return fastToGraph(self) + + + +# --------------------------------------------------------------------------------} +# --- Helper functions +# --------------------------------------------------------------------------------{ +def readFirstLines(fid, nLines): + lines=[] + for i, line in enumerate(fid): + lines.append(line.strip()) + if i==nLines: + break + return lines + +# --------------------------------------------------------------------------------} +# --- Sub-reader/class for SubDyn summary files +# --------------------------------------------------------------------------------{ +def readSubDynSum(self): + + # Read data + #T=yaml.load(fid, Loader=yaml.SafeLoader) + yaml_read(self.filename, self) + + # --- Treatement of useful data + if self['DOF2Nodes'].shape[1]==3: + self['DOF2Nodes']=np.column_stack((np.arange(self['DOF2Nodes'].shape[0])+1,self['DOF2Nodes'])) + # NOTE: DOFs are reindexed to start at 0 + self['DOF2Nodes'][:,0]-=1 + self['DOF___L'] -=1 # internal DOFs + self['DOF___B'] -=1 # internal + self['DOF___F'] -=1 # fixed DOFs + + self['CB_frequencies']=self['CB_frequencies'].ravel() + self['X'] = self['Nodes'][:,1].astype(float) + self['Y'] = self['Nodes'][:,2].astype(float) + self['Z'] = self['Nodes'][:,3].astype(float) + + # --- Useful methods that will be added to the class + def NodesDisp(self, IDOF, UDOF, maxDisp=None, sortDim=None): + DOF2Nodes = self['DOF2Nodes'] + # NOTE: SubDyn nodes in the summary files are sorted + # so the position we give are for all Nodes + INodes = list(np.sort(np.unique(DOF2Nodes[IDOF,1]))) # Sort + nShapes = UDOF.shape[1] + disp=np.empty((len(INodes),3,nShapes)); disp.fill(np.nan) + pos=np.empty((len(INodes),3)) ; pos.fill(np.nan) + # TODO + # handle T_red for rigid and joints + for i,iDOF in enumerate(IDOF): + iNode = DOF2Nodes[iDOF,1] + nDOFPerNode = DOF2Nodes[iDOF,2] + nodeDOF = DOF2Nodes[iDOF,3] + iiNode = INodes.index(iNode) + if nodeDOF<=3: + pos[iiNode, 0]=self['X'][iNode-1] + pos[iiNode, 1]=self['Y'][iNode-1] + pos[iiNode, 2]=self['Z'][iNode-1] + for iShape in np.arange(nShapes): + disp[iiNode, nodeDOF-1, iShape] = UDOF[i, iShape] + # Scaling + if maxDisp is not None: + for iShape in np.arange(nShapes): + mD=np.nanmax(np.abs(disp[:, :, iShape])) + if mD>1e-5: + disp[:, :, iShape] *= maxDisp/mD + # Sorting according to a dimension + if sortDim is not None: + I=np.argsort(pos[:,sortDim]) + INodes = np.array(INodes)[I] + disp = disp[I,:,:] + pos = pos[I,:] + return disp, pos, INodes + + def getModes(data, maxDisp=None, sortDim=None): + """ return Guyan and CB modes""" + if maxDisp is None: + #compute max disp such as it's 10% of maxdimension + dx = np.max(self['X'])-np.min(self['X']) + dy = np.max(self['Y'])-np.min(self['Y']) + dz = np.max(self['Z'])-np.min(self['Z']) + maxDisp = np.max([dx,dy,dz])*0.1 + + # NOTE: DOF have been reindexed -1 + DOF_B = data['DOF___B'].ravel() + DOF_F = data['DOF___F'].ravel() + DOF_K = (np.concatenate((DOF_B,data['DOF___L'].ravel(), DOF_F))).astype(int) + + # CB modes + PhiM = data['PhiM'] + Phi_CB = np.vstack((np.zeros((len(DOF_B),PhiM.shape[1])),PhiM, np.zeros((len(DOF_F),PhiM.shape[1])))) + dispCB, posCB, INodesCB = data.NodesDisp(DOF_K, Phi_CB, maxDisp=maxDisp, sortDim=sortDim) + # Guyan modes + PhiR = data['PhiR'] + Phi_Guyan = np.vstack((np.eye(len(DOF_B)),PhiR, np.zeros((len(DOF_F),PhiR.shape[1])))) + dispGy, posGy, INodesGy = data.NodesDisp(DOF_K, Phi_Guyan, maxDisp=maxDisp, sortDim=sortDim) + + return dispGy, posGy, INodesGy, dispCB, posCB, INodesCB + + + def subDynToJson(data, outfile=None): + """ Convert to a "JSON" format + + TODO: convert to graph and use graph.toJSON + + """ + #return data.toGraph().toJSON(outfile) + + dispGy, posGy, _, dispCB, posCB, _ = data.getModes(sortDim=None) # Sorting mess things up + + Nodes = self['Nodes'].copy() + Elements = self['Elements'].copy() + Elements[:,0]-=1 + Elements[:,1]-=1 + Elements[:,2]-=1 + CB_freq = data['CB_frequencies'].ravel() + + d=dict(); + d['Connectivity']=Elements[:,[1,2]].astype(int).tolist(); + d['Nodes']=Nodes[:,[1,2,3]].tolist() + d['ElemProps']=[{'shape':'cylinder','type':int(Elements[iElem,5]),'Diam':np.sqrt(Elements[iElem,7]/np.pi)*4} for iElem in range(len(Elements))] # NOTE: diameter is cranked up + # disp[iiNode, nodeDOF-1, iShape] = UDOF[i, iShape] + + d['Modes']=[ + { + 'name':'GY{:d}'.format(iMode+1), + 'omega':1, + 'Displ':dispGy[:,:,iMode].tolist() + } for iMode in range(dispGy.shape[2]) ] + d['Modes']+=[ + { + 'name':'CB{:d}'.format(iMode+1), + 'omega':CB_freq[iMode]*2*np.pi, #in [rad/s] + 'Displ':dispCB[:,:,iMode].tolist() + } for iMode in range(dispCB.shape[2]) ] + d['groundLevel']=np.min(data['Z']) # TODO + + if outfile is not None: + import json + with open(outfile, 'w', encoding='utf-8') as f: + try: + f.write(unicode(json.dumps(d, ensure_ascii=False))) #, indent=2) + except: + json.dump(d, f, indent=2) + return d + + + def subDynToDataFrame(data, sortDim=2, removeZero=True): + """ Convert to DataFrame containing nodal displacements """ + def toDF(pos,disp,preffix=''): + disp[np.isnan(disp)]=0 + disptot=disp.copy() + columns=[] + for ishape in np.arange(disp.shape[2]): + disptot[:,:,ishape]= pos + disp[:,:,ishape] + sMode=preffix+'Mode{:d}'.format(ishape+1) + columns+=[sMode+'x_[m]',sMode+'y_[m]',sMode+'z_[m]'] + disptot= np.moveaxis(disptot,2,1).reshape(disptot.shape[0],disptot.shape[1]*disptot.shape[2]) + disp = np.moveaxis(disp,2,1).reshape(disp.shape[0],disp.shape[1]*disp.shape[2]) + df= pd.DataFrame(data = disptot ,columns = columns) + dfDisp= pd.DataFrame(data = disp ,columns = columns) + # remove mode components that are fully zero + if removeZero: + df = df.loc[:, (dfDisp != 0).any(axis=0)] + dfDisp = dfDisp.loc[:, (dfDisp != 0).any(axis=0)] + dfDisp.columns = [c.replace('Mode','Disp') for c in dfDisp.columns.values] + return df, dfDisp + + dispGy, posGy, _, dispCB, posCB, _ = data.getModes(sortDim=sortDim) + + columns = ['z_[m]','x_[m]','y_[m]'] + dataZXY = np.column_stack((posGy[:,2],posGy[:,0],posGy[:,1])) + dfZXY = pd.DataFrame(data = dataZXY, columns=columns) + df1, df1d = toDF(posGy, dispGy,'Guyan') + df2, df2d = toDF(posCB, dispCB,'CB') + df = pd.concat((dfZXY, df1, df2, df1d, df2d), axis=1) + return df + + # adding method to class dynamically to give it a "SubDyn Summary flavor" + setattr(FASTSummaryFile, 'NodesDisp' , NodesDisp) + setattr(FASTSummaryFile, 'toDataFrame', subDynToDataFrame) + setattr(FASTSummaryFile, 'toJSON' , subDynToJson) + setattr(FASTSummaryFile, 'getModes' , getModes) + + return self + + +if __name__=='__main__': + T=FASTSummaryFile('../Pendulum.SD.sum.yaml') + df=T.toDataFrame() + print(df) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py new file mode 100644 index 0000000000..e2a75c53ae --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py @@ -0,0 +1,72 @@ +import numpy as np +import pandas as pd +from .csv_file import CSVFile +from .file import isBinary, WrongFormatError + +class FASTWndFile(CSVFile): + + @staticmethod + def defaultExtensions(): + return ['.wnd'] + + @staticmethod + def formatName(): + return 'FAST determ. wind file' + + def __init__(self, *args, **kwargs): + self.colNames=['Time','WindSpeed','WindDir','VertSpeed','HorizShear','VertShear','LinVShear','GustSpeed'] + self.units=['[s]','[m/s]','[deg]','[m/s]','[-]','[-]','[-]','[m/s]'] + Cols=['{}_{}'.format(c,u) for c,u in zip(self.colNames,self.units)] + + header=[] + header+=['!Wind file.'] + header+=['!Time Wind Wind Vert. Horiz. Vert. LinV Gust'] + header+=['! Speed Dir Speed Shear Shear Shear Speed'] + + super(FASTWndFile, self).__init__(sep=' ',commentChar='!',colNames=Cols, header=header, *args, **kwargs) + + def _read(self, *args, **kwargs): + if isBinary(self.filename): + raise WrongFormatError('This is a binary file (turbulence file?) not a FAST ascii determinisctic wind file') + super(FASTWndFile, self)._read(*args, **kwargs) + + def _write(self, *args, **kwargs): + super(FASTWndFile, self)._write(*args, **kwargs) + + + def _toDataFrame(self): + return self.data + + +# --------------------------------------------------------------------------------} +# --- Functions specific to file type +# --------------------------------------------------------------------------------{ + def stepWind(self,WSstep=1,WSmin=3,WSmax=25,tstep=100,dt=0.5,tmin=0,tmax=999): + """ Set the wind file to a step wind + tstep: can be an array of size 2 [tstepmax tstepmin] + + + """ + + Steps= np.arange(WSmin,WSmax+WSstep,WSstep) + if hasattr(tstep,'__len__'): + tstep = np.around(np.linspace(tstep[0], tstep[1], len(Steps)),0) + else: + tstep = len(Steps)*[tstep] + nCol = len(self.colNames) + nRow = len(Steps)*2 + M = np.zeros((nRow,nCol)); + M[0,0] = tmin + M[0,1] = WSmin + for i,s in enumerate(Steps[:-1]): + M[2*i+1,0] = tmin + tstep[i]-dt + M[2*i+2,0] = tmin + tstep[i] + tmin +=tstep[i] + M[2*i+1,1] = Steps[i] + if i14 and code<31): + return True + return False + except UnicodeDecodeError: + return True + + +def numberOfLines(filename, method=1): + + if method==1: + return sum(1 for i in open(filename, 'rb')) + + elif method==2: + def blocks(files, size=65536): + while True: + b = files.read(size) + if not b: break + yield b + with open(filename, "r",encoding="utf-8",errors='ignore') as f: + return sum(bl.count("\n") for bl in blocks(f)) + else: + raise NotImplementedError() + +def ascii_comp(file1,file2,bDelete=False): + """ Compares two ascii files line by line. + Comparison is done ignoring multiple white spaces for now""" + # --- Read original as ascii + with open(file1, 'r') as f1: + lines1 = f1.read().splitlines(); + lines1 = '|'.join([l.replace('\t',' ').strip() for l in lines1]) + lines1 = ' '.join(lines1.split()) + # --- Read second file as ascii + with open(file2, 'r') as f2: + lines2 = f2.read().splitlines(); + lines2 = '|'.join([l.replace('\t',' ').strip() for l in lines2]) + lines2 = ' '.join(lines2.split()) + + if lines1 == lines2: + if bDelete: + os.remove(file2) + return True + else: + return False diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py new file mode 100644 index 0000000000..595d545e23 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py @@ -0,0 +1,31 @@ +from .file import WrongFormatError + +def isRightFormat(fileformat, filename, **kwargs): + """ Tries to open a file, return true and the file if it succeeds """ + #raise NotImplementedError("Method must be implemented in the subclass") + try: + F=fileformat.constructor(filename=filename, **kwargs) + return True,F + except MemoryError: + raise + except WrongFormatError: + return False,None + except: + # We Raise the Exception. + # It's the responsability of all the file classes to Return a WrongFormatError + raise + +class FileFormat(): + def __init__(self,fileclass=None): + self.constructor = fileclass + if fileclass is None: + self.extensions = [] + self.name = '' + else: + self.extensions = fileclass.defaultExtensions() + self.name = fileclass.formatName() + + + def __repr__(self): + return 'FileFormat object: {} ({})'.format(self.name,self.extensions[0]) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py new file mode 100644 index 0000000000..5ce5a0ec89 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py @@ -0,0 +1,139 @@ +import numpy as np +import pandas as pd +import os + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + +class FLEXBladeFile(File): + + @staticmethod + def defaultExtensions(): + return ['.bld','.bla','.00X'] #'.001 etc..' + + @staticmethod + def formatName(): + return 'FLEX blade file' + + def _read(self): + headers_all = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','GKt_[Nm2]','Mass_[kg/m]','Jxx_[kg.m]','PreBendFlap_[m]','PreBendEdge_[m]'\ + ,'Str.Twist_[deg]','PhiOut_[deg]','Ycog_[m]','Yshc_[m]','CalcOutput_[0/1]'\ + ,'Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]','ProfileSet_[#]'] + with open(self.filename, 'r', errors="surrogateescape") as f: + try: + firstline = f.readline().strip() + nSections = int(f.readline().strip().split()[0]) + except: + raise WrongFormatError('Unable to read first two lines of blade file') + try: + self.version=int(firstline[1:4]) + except: + self.version=0 + # --- Different handling depending on version + if self.version==0: + # Version 0 struct has no GKt + # Version 0 aero has no profile set, no TorsionAero + nColsStruct = 8 + nColsAero = 5 + struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','Mass_[kg/m]','Str.Twist_[deg]','CalcOutput_[0/1]','PreBendFlap_[m]','PreBendEdge_[m]'] + aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]'] + elif self.version==1: + # Version 1 struct has GKt + # Version 1 aero has no profile set + nColsStruct = 8 + nColsAero = 6 + struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','Mass_[kg/m]','Str.Twist_[deg]','CalcOutput_[0/1]','PreBendFlap_[m]','PreBendEdge_[m]'] + aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]'] + elif self.version==2: + nColsStruct = 9 + nColsAero = 7 + struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','Mass_[kg/m]','Str.Twist_[deg]','CalcOutput_[0/1]','PreBendFlap_[m]','PreBendEdge_[m]','GKt_[Nm2]'] + aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]','ProfileSet_[#]'] + elif self.version==3: + nColsStruct = 13 + nColsAero = 7 + struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','GKt_[Nm2]','Mass_[kg/m]','Jxx_[kg.m]','PreBendFlap_[m]','PreBendEdge_[m]','Str.Twist_[deg]','PhiOut_[deg]','Ycog_[m]','Yshc_[m]','CalcOutput_[0/1]'] + aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]','ProfileSet_[#]'] + else: + raise BrokenFormatError('Blade format not implemented') + + struct = np.zeros((nSections,nColsStruct)) + aero = np.zeros((nSections,nColsAero)) + + # --- Structural data + try: + for iSec in range(nSections): + vals=f.readline().split() + #if len(vals)>=nColsStruct: + struct[iSec,:]=np.array(vals[0:nColsStruct]).astype(float) + #elif self.version==1: + # # version 1 has either 8 or 9 columns + # nColsStruct=nColsStruct-1 + # struct_headers=struct_headers[0:-1] + # struct =struct[:,:-1] + # struct[iSec,:]=np.array(vals[0:nColsStruct]).astype(float) + except: + raise WrongFormatError('Unable to read structural data') + try: + self.BetaC = float(f.readline().strip().split()[0]) + if self.version==3: + f.readline() + self.FlapDamping = [float(v) for v in f.readline().strip().split(';')[0].split()] + self.EdgeDamping = [float(v) for v in f.readline().strip().split(';')[0].split()] + self.TorsDamping = [float(v) for v in f.readline().strip().split(';')[0].split()] + f.readline() + f.readline() + else: + Damping = [float(v) for v in f.readline().strip().split()[0:4]] + self.FlapDamping = Damping[0:2] + self.EdgeDamping = Damping[2:4] + self.TorsDamping = [] + except: + raise + raise WrongFormatError('Unable to read damping data') + + # --- Aero + try: + for iSec in range(nSections): + vals=f.readline().split()[0:nColsAero] + aero[iSec,:]=np.array(vals).astype(float) + except: + raise WrongFormatError('Unable to read aerodynamic data') + + self.ProfileFile=f.readline().strip() + + # --- Concatenating aero and structural data + self._cols = struct_headers+aero_headers[1:] + data = np.column_stack((struct,aero[:,1:])) + dataMiss=pd.DataFrame(data=data, columns=self._cols) + self._nColsStruct=nColsStruct # to remember where to split + # --- Making sure all columns are present, irrespectively of version + self.data=pd.DataFrame(data=[], columns=headers_all) + for c in self._cols: + self.data[c]=dataMiss[c] + +# def toString(self): +# s='' +# if len(self.ProfileSets)>0: +# prefix='PROFILE SET ' +# else: +# prefix='' +# for pset in self.ProfileSets: +# s+=pset.toString(prefix) +# return s +# +# def _write(self): +# with open(self.filename,'w') as f: +# f.write(self.toString) +# + def __repr__(self): + s ='Class FLEXBladeFile (attributes: data, BetaC, FlapDamping, EdgeDamping, ProfileFile)\n' + return s + + def _toDataFrame(self): + return self.data + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py new file mode 100644 index 0000000000..46eef7b4ee --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py @@ -0,0 +1,208 @@ +import numpy as np +import pandas as pd +import os +import re +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + +class FLEXDocFile(File): + + @staticmethod + def defaultExtensions(): + return ['.out','doc'] + + @staticmethod + def formatName(): + return 'FLEX WaveKin file' + + def _read(self): + with open(self.filename, 'r', errors="surrogateescape") as f: + line1=f.readline().strip() + if line1.find('#Program')!=0: + raise WrongFormatError() + lines=f.read().splitlines()+[line1] + + ArraysHeader=[ + '#Blade_ShapeFunction_DOF1_Shape', + '#Blade_ShapeFunction_DOF2_Shape', + '#Blade_ShapeFunction_DOF3_Shape', + '#Blade_ShapeFunction_DOF4_Shape', + '#Blade_ShapeFunction_DOF5_Shape', + '#Blade_ShapeFunction_DOF6_Shape', + '#Blade_ShapeFunction_DOF7_Shape', + '#Blade_ShapeFunction_DOF8_Shape', + '#Blade_ShapeFunction_DOF9_Shape', + '#Blade_ShapeFunction_DOF10_Shape', + '#Tower_SectionData', + '#Tower_ShapeFunction_DOF1_Shape', + '#Tower_ShapeFunction_DOF2_Shape', + '#Tower_ShapeFunction_DOF3_Shape', + '#Tower_ShapeFunction_DOF4_Shape', + '#Tower_ShapeFunction_DOF5_Shape', + '#Tower_ShapeFunction_DOF6_Shape', + '#Tower_ShapeFunction_DOF7_Shape', + '#Tower_ShapeFunction_DOF8_Shape', + '#Foundation_SectionData', + '#Foundation_ShapeFunction_DOF1_Shape', + '#Foundation_ShapeFunction_DOF2_Shape', + '#Global_Mode1_Shape', + ] + + ArraysNoHeader=[ + '#Blade_IsolatedMassMatrix' + '#Blade_IsolatedStiffnessMatrix', + '#Blade_IsolatedDampingMatrix', + '#Foundation_IsolatedMassMatrix', + '#Foundation_IsolatedStiffnessMatrix', + '#Foundation_IsolatedStiffnessMatrixCorrection', + '#Foundation_IsolatedDampingMatrix', + '#Tower_MassMatrix', + '#Tower_IsolatedMassMatrix', + '#Tower_IsolatedStiffnessMatrix', + '#Tower_IsolatedStiffnessMatrixCorrection', + '#Tower_IsolatedDampingMatrix', + '#EVA_MassMatrix', + '#EVA_StiffnessMatrix', + '#EVA_DampingMatrix', + '#EVA_Eigenvectors', + '#EVA_Eigenfrequencies', + '#EVA_Eigenvalues', + '#EVA_Damping', + '#EVA_LogDec', + ] + + numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?' + rx = re.compile(numeric_const_pattern, re.VERBOSE) + + i=0 + while i0 and lines[i][0]!='#': + array_lines.append(np.array([float(v) if v not in ['Fnd','Twr','COG'] else ['Fnd','Twr','COG'].index(v) for v in lines[i].split()])) + i=i+1 + # --- Process array + M = np.array(array_lines) + # --- Process header + cols=header.split() + try: + ii=int(cols[0]) + header=' '.join(cols[1:]) + except: + pass + if header.find('[')<=0: + cols=header.split() + else: + header=header.replace('rough','rough_[-]') + header=header.replace('n ','n_[-] ') + spcol=header.split(']') + cols= [v.strip().replace(' ','_').replace('[','_[').replace('__','_').replace('__','_')+']' for v in spcol[:-1]] + + if len(cols)!=M.shape[1]: + cols=['C{}'.format(j) for j in range(M.shape[1])] + # --- Store + keys = sp[0].split('_') + keys[0]=keys[0][1:] + if keys[0] not in self.keys(): + self[keys[0]] = dict() + subkey = '_'.join(keys[1:]) + df = pd.DataFrame(data = M, columns = cols) + self[keys[0]][subkey] = df + continue + # --- Array with no header + elif sp[0] in ArraysNoHeader: + array_lines=[] + i=i+1 + header=lines[i] + i=i+1 + while i0 and lines[i][0]!='#': + array_lines.append(np.array([float(v) for v in lines[i].split()])) + i=i+1 + # --- Process array + M = np.array(array_lines) + # --- Store + keys = sp[0].split('_') + keys[0]=keys[0][1:] + if keys[0] not in self.keys(): + self[keys[0]] = dict() + subkey = '_'.join(keys[1:]) + self[keys[0]][subkey] = M + continue + else: + # --- Regular + keys = sp[0].split('_') + key=keys[0][1:] + subkey = '_'.join(keys[1:]) + values= ' '.join(sp[1:]) + try: + dat= np.array(rx.findall(values)).astype(float) + if len(dat)==1: + dat=dat[0] + except: + dat = values + + if len(key.strip())>0: + if len(subkey)==0: + if key not in self.keys(): + self[key] = dat + else: + print('>>> line',i,l) + print(self.keys()) + raise Exception('Duplicate singleton key:',key) + else: + if key not in self.keys(): + self[key] = dict() + self[key][subkey]=dat + i+=1 + + # --- Some adjustements + try: + df=self['Global']['Mode1_Shape'] + df=df.drop('C0',axis=1) + df.columns=['H_[m]','U_FA_[-]','U_SS_[]'] + self['Global']['Mode1_Shape']=df + except: + pass + +# def _write(self): +# with open(self.filename,'w') as f: +# f.write(self.toString) + + def __repr__(self): + s='<{} object> with keys:\n'.format(type(self).__name__) + for k in self.keys(): + if type(self[k]) is dict: + s+='{:15s}: dict with keys {}\n'.format(k, list(self[k].keys())) + else: + s+='{:15s} : {}\n'.format(k,self[k]) + return s + + def _toDataFrame(self): + dfs={} + for k,v in self.items(): + if type(v) is pd.DataFrame: + dfs[k]=v + #if type(v) is np.ndarray: + # if len(v.shape)>1: + # dfs[k]=v + if type(self[k]) is dict: + for k2,v2 in self[k].items(): + if type(v2) is pd.DataFrame: + dfs[k+'_'+k2]=v2 + return dfs + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py new file mode 100644 index 0000000000..86fc617ab2 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py @@ -0,0 +1,205 @@ +import numpy as np +import pandas as pd +import os +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + +# --------------------------------------------------------------------------------} +# --- OUT FILE +# --------------------------------------------------------------------------------{ +class FLEXOutFile(File): + + @staticmethod + def defaultExtensions(): + return ['.res','.int'] + + @staticmethod + def formatName(): + return 'FLEX output file' + + def _read(self): + # --- First read the binary file + dtype=np.float32; # Flex internal data is stored in single precision + try: + self.data,self.tmin,self.dt,self.Version,self.DateID,self.title=read_flex_res(self.filename, dtype=dtype) + except WrongFormatError as e: + raise WrongFormatError('FLEX File {}: '.format(self.filename)+'\n'+e.args[0]) + self.nt = np.size(self.data,0) + self.nSensors = np.size(self.data,1) + self.time = np.arange(self.tmin, self.tmin + self.nt * self.dt, self.dt).reshape(self.nt,1).astype(dtype) + + # --- Then the sensor file + parentdir = os.path.dirname(self.filename) + basename = os.path.splitext(os.path.basename(self.filename))[0] + #print(parentdir) + #print(basename) + PossibleFiles=[] + PossibleFiles+=[os.path.join(parentdir, basename+'.Sensor')] + PossibleFiles+=[os.path.join(parentdir, 'Sensor_'+basename)] + PossibleFiles+=[os.path.join(parentdir, 'sensor')] + # We try allow for other files + Found =False + for sf in PossibleFiles: + if os.path.isfile(sf): + self.sensors=read_flex_sensor(sf) + if len(self.sensors['ID'])!=self.nSensors: + Found = False + else: + Found = True + break + if not Found: + # we are being nice and create some fake sensors info + self.sensors=read_flex_sensor_fake(self.nSensors) + + if len(self.sensors['ID'])!=self.nSensors: + raise BrokenFormatError('Inconsistent number of sensors: {} (sensor file) {} (out file), for file: {}'.format(len(self.sensors['ID']),self.nSensors,self.filename)) + + #def _write(self): # TODO + # pass + + def __repr__(self): + return 'Flex Out File: {}\nVersion:{} - DateID:{} - Title:{}\nSize:{}x{} - tmin:{} - dt:{}]\nSensors:{}'.format(self.filename,self.Version,self.DateID,self.title,self.nt,self.nSensors,self.tmin,self.dt,self.sensors['Name']) + + def _toDataFrame(self): + # Appending time to form the dataframe + names = ['Time'] + self.sensors['Name'] + units = ['s'] + self.sensors['Unit'] + units = [u.replace('(','').replace(')','').replace('[','').replace(']','') for u in units] + data = np.concatenate((self.time, self.data), axis=1) + cols=[n+'_['+u+']' for n,u in zip(names,units)] + return pd.DataFrame(data=data,columns=cols) + +# --------------------------------------------------------------------------------} +# --- Helper Functions +# --------------------------------------------------------------------------------{ +def read_flex_res(filename, dtype=np.float32): + # Read flex file + with open(filename,'rb') as fid: + #_ = struct.unpack('i', fid.read(4)) # Dummy + _ = np.fromfile(fid, 'int32', 1) # Dummy + # --- Trying to get DateID + fid.seek(4) # + DateID=np.fromfile(fid, 'int32', 6) + if DateID[0]<32 and DateID[1]<13 and DateID[3]<25 and DateID[4]<61: + # OK, DateID was present + title = fid.read(40).strip() + else: + fid.seek(4) # + DateID = np.fromfile(fid, 'int32', 1) + title = fid.read(60).strip() + _ = np.fromfile(fid, 'int32', 2) # Dummy + # FILE POSITION <<< fid.seek(4 * 19) + nSensors = np.fromfile(fid, 'int32', 1)[0] + IDs = np.fromfile(fid, 'int32', nSensors) + _ = np.fromfile(fid, 'int32', 1) # Dummy + # FILE POSITION <<< fid.seek(4*nSensors+4*21) + Version = np.fromfile(fid, 'int32', 1)[0] + # FILE POSITION <<< fid.seek(4*(nSensors)+4*22) + if Version == 12: + raise NotImplementedError('Flex out file with version 12, TODO. Implement it!') + # TODO + #fseek(o.fid,4*(21+o.nSensors),-1);% seek to the data from beginning of file + #RL=o.nSensors+5; % calculate the length of each row + #A = fread(o.fid,[RL,inf],'single'); % read whole file + #t=A(2,:);% time vector contained in row 2 + #o.SensorData=A(5:end,:); + # save relevant information + #o.tmin = t(1) ; + #o.dt = t(2)-t(1); + #o.t = t ; + #o.nt = length(t); + elif Version in [0,2,3]: + tmin = np.fromfile(fid, 'f', 1)[0] # Dummy + dt = np.fromfile(fid, 'f', 1)[0] # Dummy + scale_factors = np.fromfile(fid, 'f', nSensors).astype(dtype) + # --- Reading Time series + # FILE POSITION <<< fid.seek(8*nSensors + 48*2) + data = np.fromfile(fid, 'int16').astype(dtype) #data = np.fromstring(fid.read(), 'int16').astype(dtype) + nt = int(len(data) / nSensors) + try: + if Version ==3: + data = data.reshape(nSensors, nt).transpose() + else: + data = data.reshape(nt, nSensors) + except ValueError: + raise WrongFormatError("Flat data length {} is not compatible with {}x{} (nt x nSensors)".format(len(data),nt,nSensors)) + for i in range(nSensors): + data[:, i] *= scale_factors[i] + + return (data,tmin,dt,Version,DateID,title) + + +def read_flex_sensor(sensor_file): + with open(sensor_file, 'r') as fid: + sensor_info_lines = fid.readlines()[2:] + sensor_info = [] + d=dict({ 'ID':[],'Gain':[],'Offset':[],'Unit':[],'Name':[],'Description':[]}); + for line in sensor_info_lines: + line = line.strip().split() + d['ID'] .append(int(line[0])) + d['Gain'] .append(float(line[1])) + d['Offset'] .append(float(line[2])) + d['Unit'] .append(line[5]) + d['Name'] .append(line[6]) + d['Description'] .append(' '.join(line[7:])) + return d + +def read_flex_sensor_fake(nSensors): + d=dict({ 'ID':[],'Gain':[],'Offset':[],'Unit':[],'Name':[],'Description':[]}); + for i in range(nSensors): + d['ID'] .append(i+1) + d['Gain'] .append(1.0) + d['Offset'] .append(0.0) + d['Unit'] .append('(NA)') + d['Name'] .append('S{:04d}'.format(i+1)) + d['Description'] .append('NA') + return d + + + + + + +# def write_flex_file(filename,data,tmin,dt): +# ds = dataset +# # Write int data file +# f = open(filename, 'wb') +# f.write(struct.pack('ii', 0, 0)) # 2x empty int +# title = ("%-60s" % str(ds.name)).encode() +# f.write(struct.pack('60s', title)) # title +# f.write(struct.pack('ii', 0, 0)) # 2x empty int +# ns = len(sensors) +# f.write(struct.pack('i', ns)) +# f.write(struct.pack('i' * ns, *range(1, ns + 1))) # sensor number +# f.write(struct.pack('ii', 0, 0)) # 2x empty int +# time = ds.basis_attribute() +# f.write(struct.pack('ff', time[0], time[1] - time[0])) # start time and time step +# +# scale_factors = np.max(np.abs(data), 0) / 32000 +# f.write(struct.pack('f' * len(scale_factors), *scale_factors)) +# # avoid dividing by zero +# not0 = np.where(scale_factors != 0) +# data[:, not0] /= scale_factors[not0] +# #flatten and round +# data = np.round(data.flatten()).astype(np.int16) +# f.write(struct.pack('h' * len(data), *data.tolist())) +# f.close() +# +# # write sensor file +# f = open(os.path.join(os.path.dirname(filename), 'sensor'), 'w') +# f.write("Sensor list for %s\n" % filename) +# f.write(" No forst offset korr. c Volt Unit Navn Beskrivelse------------\n") +# sensorlineformat = "%3s %.3f %.3f 1.00 0.00 %7s %-8s %s\n" +# +# if isinstance(ds, FLEX4Dataset): +# gains = np.r_[ds.gains[1:], np.ones(ds.shape[1] - len(ds.gains))] +# offsets = np.r_[ds.offsets[1:], np.zeros(ds.shape[1] - len(ds.offsets))] +# sensorlines = [sensorlineformat % ((nr + 1), gain, offset, att.unit[:7], att.name.replace(" ", "_")[:8], att.description[:512]) for nr, att, gain, offset in zip(range(ns), sensors, gains, offsets)] +# else: +# sensorlines = [sensorlineformat % ((nr + 1), 1, 0, att.unit[:7], att.name.replace(" ", "_")[:8], att.description[:512]) for nr, att in enumerate(sensors)] +# f.writelines(sensorlines) +# f.close() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py new file mode 100644 index 0000000000..90c4fb895d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py @@ -0,0 +1,144 @@ +import numpy as np +import pandas as pd +import os +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + +class ProfileSet(): + def __init__(self,header,thickness,polars,polar_headers): + self.header = header + self.polars = polars + self.thickness = thickness + self.polar_headers = polar_headers + + def toString(self,PREFIX=''): + s =PREFIX+self.header+'\n' + s+=' '.join([str(t) for t in self.thickness])+'\n' + s+=str(self.polars[0].shape[0])+'\n' + for ph,t,polar in zip(self.polar_headers,self.thickness,self.polars): + s+=ph+'\n' + s+='\n'.join([' '.join(['{:15.7e}'.format(v) for v in line]) for line in polar]) +# s+=ph+'\n' + return s + + def __repr__(self): + s ='Class ProfileSet (attributes: header, polars, thickness, polar_headers)\n' + s+=' header : '+self.header+'\n' + s+=' thickness : '+str(self.thickness)+'\n' + s+=' Number of polars: '+str(len(self.thickness))+'\n' + s+=' Alpha values : '+str(self.polars[0].shape[0])+'\n' + for ip,(ph,t) in enumerate(zip(self.polar_headers,self.thickness)): + s+= ' Polar: {}, Thickness: {}, Header: {}\n'.format(ip+1,t,ph) + return s + +class FLEXProfileFile(File): + + @staticmethod + def defaultExtensions(): + return ['.pro','.00X'] #'.001 etc..' + + @staticmethod + def formatName(): + return 'FLEX profile file' + + def _read(self): + self.ProfileSets=[] + setNumber=1 + with open(self.filename, 'r', errors="surrogateescape") as f: + def read_header(allow_empty=False): + """ Reads the header of a profile set (4 first lines) + - The first line may start with "Profile set I:" to indicate a set number + - Second line is number of thicknesses + - Third is thicnkesses + - Fourth is number of alpha values + """ + header=[] + for i, line in enumerate(f): + header.append(line.strip()) + if i==3: + break + if len(header)<4: + if allow_empty: + return [],[],'',False + else: + raise WrongFormatError('A Flex profile file needs at leats 4 lines of headers') + try: + nThickness=int(header[1]) + except: + raise WrongFormatError('Number of thicknesses (integer) should be on line 2') + try: + thickness=np.array(header[2].split()).astype(float) + except: + raise WrongFormatError('Number of thicknesses (integer) should be on line 2') + if len(thickness)!=nThickness: + raise WrongFormatError('Number of thicknesses read ({}) different from the number reported ({})'.format(len(thickness),nThickness)) + try: + nAlpha=int(header[3]) + except: + raise WrongFormatError('Number of alpha values (integer) should be on line 4') + if header[0].lower().find('profile set')==0: + header[0]=header[0][11:] + bHasSets=True + else: + bHasSets=False + return nAlpha,thickness,header[0],bHasSets + + def read_polars(nAlpha,thickness): + polars=[] + polar_headers=[] + for it,t in enumerate(thickness): + polar_headers.append(f.readline().strip()) + polars.append(np.zeros((nAlpha,4))) + try: + for ia in range(nAlpha): + polars[it][ia,:]=np.array([f.readline().split()]).astype(float) + except: + raise BrokenFormatError('An error occured while reading set number {}, polar number {}, (thickness {}), value number {}.'.format(setNumber,it+1,t,ia+1)) + + return polars,polar_headers + + # Reading headers and polars + while True: + nAlpha,thickness,Header,bHasSets = read_header(allow_empty=setNumber>1) + if len(thickness)==0: + break + polars,polar_headers = read_polars(nAlpha,thickness) + PSet= ProfileSet(Header,thickness,polars,polar_headers) + self.ProfileSets.append(PSet) + setNumber=setNumber+1 + + def toString(self): + s='' + if len(self.ProfileSets)>0: + prefix='PROFILE SET ' + else: + prefix='' + for pset in self.ProfileSets: + s+=pset.toString(prefix) + return s + + def _write(self): + with open(self.filename,'w') as f: + f.write(self.toString) + + def __repr__(self): + s ='Class FlexProfileFile (attributes: ProfileSets)\n' + s+=' Number of profiles sets: '+str(len(self.ProfileSets))+'\n' + for ps in self.ProfileSets: + s+=ps.__repr__() + return s + + + def _toDataFrame(self): + cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] + dfs = {} + for iset,pset in enumerate(self.ProfileSets): + for ipol,(thickness,polar) in enumerate(zip(pset.thickness,pset.polars)): + name='pc_set_{}_t_{}'.format(iset+1,thickness) + dfs[name] = pd.DataFrame(data=polar, columns=cols) + return dfs + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py new file mode 100644 index 0000000000..d6cdf72b9e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py @@ -0,0 +1,101 @@ +import numpy as np +import pandas as pd +import os +import re +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass +from .csv_file import CSVFile + + +class FLEXWaveKinFile(File): + + @staticmethod + def defaultExtensions(): + return ['.wko'] #'.001 etc..' + + @staticmethod + def formatName(): + return 'FLEX WaveKin file' + + def _read(self): + numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?' + rx = re.compile(numeric_const_pattern, re.VERBOSE) + def extract_floats(s): + v=np.array(rx.findall(s)) + return v + + + try: + csv = CSVFile(self.filename, sep=' ', commentLines=list(np.arange(11)),detectColumnNames=False) + except: + raise WrongFormatError('Unable to parse Flex WaveKin file as CSV with 11 header lines') + + header = csv.header + self['header'] = csv.header[0:2] + self['data'] = csv.data + try: + self['MaxCrestHeight'] = float(extract_floats(header[2])[0]) + self['MaxLongiVel'] = float(extract_floats(header[3])[0]) + self['MaxLongiAcc'] = float(extract_floats(header[4])[0]) + dat = extract_floats(header[5]).astype(float) + self['WaterDepth'] = dat[0] + self['Hs'] = dat[1] + self['Tp'] = dat[2] + self['SpecType'] = dat[3] + except: + raise BrokenFormatError('Unable to parse floats from header lines 3-6') + + try: + nDisp = int(extract_floats(header[6])[0]) + nRelD = int(extract_floats(header[8])[0]) + except: + raise BrokenFormatError('Unable to parse int from header lines 7 and 9') + + try: + displ = extract_floats(header[7]).astype(float) + depth = extract_floats(header[9]).astype(float) + except: + raise BrokenFormatError('Unable to parse displacements or depths from header lines 8 and 10') + if len(displ)!=nDisp: + print(displ) + raise BrokenFormatError('Number of displacements ({}) does not match number provided ({})'.format(nDisp, len(displ))) + if len(depth)!=nRelD: + print(depth) + raise BrokenFormatError('Number of rel depth ({}) does not match number provided ({})'.format(nRelD, len(depth))) + + self['RelDepth'] = depth + self['Displacements'] = displ + + cols=['Time_[s]', 'WaveElev_[m]'] + for j,x in enumerate(displ): + for i,z in enumerate(depth): + cols+=['u_z={:.1f}_x={:.1f}_[m/s]'.format(z*self['WaterDepth']*-1,x)] + for i,z in enumerate(depth): + cols+=['a_z={:.1f}_x={:.1f}_[m/s^2]'.format(z*self['WaterDepth'],x)] + + if len(cols)!=len(self['data'].columns): + raise BrokenFormatError('Number of columns not valid') + self['data'].columns = cols + +# def _write(self): +# with open(self.filename,'w') as f: +# f.write(self.toString) + + def __repr__(self): + s='<{} object> with keys:\n'.format(type(self).__name__) + + for k in ['MaxCrestHeight','MaxLongiVel','MaxLongiAcc','WaterDepth','Hs','Tp','SpecType','RelDepth','Displacements']: + s += '{:15s}: {}\n'.format(k,self[k]) + if len(self['header'])>0: + s += 'header : '+ ' ,'.join(self['header'])+'\n' + if len(self['data'])>0: + s += 'data size : {}x{}'.format(self['data'].shape[0],self['data'].shape[1]) + return s + + def _toDataFrame(self): + return self['data'] + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py new file mode 100644 index 0000000000..950fe6a7ea --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py @@ -0,0 +1,91 @@ +""" +Hawc2 AE file +""" +import os +import numpy as np +import pandas as pd + +try: + from .file import File, WrongFormatError, EmptyFileError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + +from .wetb.hawc2.ae_file import AEFile + +class HAWC2AEFile(File): + + @staticmethod + def defaultExtensions(): + return ['.dat','.ae','.txt'] + + @staticmethod + def formatName(): + return 'HAWC2 AE file' + + def __init__(self,filename=None,**kwargs): + if filename: + self.filename = filename + self.read(**kwargs) + else: + self.filename = None + self.data = AEFile() + + def read(self, filename=None, **kwargs): + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # --- + try: + self.data = AEFile(self.filename) + except Exception as e: + raise WrongFormatError('AE File {}: '.format(self.filename)+e.args[0]) + + def write(self, filename=None): + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + # --- + self.data.save(self.filename) + + def toDataFrame(self): + cols=['radius_[m]','chord_[m]','thickness_[%]','pc_set_[#]'] + nset = len(self.data.ae_sets) + if nset == 1: + return pd.DataFrame(data=self.data.ae_sets[1], columns=cols) + else: + dfs = {} + for iset,aeset in enumerate(self.data.ae_sets): + name='ae_set_{}'.format(iset+1) + dfs[name] = pd.DataFrame(data=self.data.ae_sets[iset+1], columns=cols) + return dfs + + @property + def sets(self): + # Returns a list of ae_sets, otherwise not easy to iterate + sets=[] + for iset,aeset in enumerate(self.data.ae_sets): + sets.append(self.data.ae_sets[iset+1]) + return sets + + # --- Convenient utils + def add_set(self, **kwargs): + self.data.add_set(**kwargs) + + def __repr__(self): + cols=['radius_[m]','chord_[m]','thickness_[%]','pc_set_[#]'] + nRows = [np.asarray(s).shape[0] for s in self.sets] + s='<{} object>\n'.format(type(self).__name__) + s+='| Attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + s+='| - data: AEFile, with attributes `ae_sets`\n' + s+='| Derived attributes:\n' + s+='| * sets: list of {} arrays, length: {}, 4 columns: {}\n'.format(len(self.data.ae_sets), nRows, cols) + s+='| Methods: add_set, toDataFrame\n' + return s diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py new file mode 100644 index 0000000000..7ee37f6371 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py @@ -0,0 +1,144 @@ +import numpy as np +import pandas as pd +import os + +from .file import File, WrongFormatError, FileNotFoundError +from .wetb.hawc2.Hawc2io import ReadHawc2 + + +class HAWC2DatFile(File): + + @staticmethod + def defaultExtensions(): + return ['.dat','.sel'] + + @staticmethod + def formatName(): + return 'HAWC2 dat file' + + def __init__(self, filename=None, **kwargs): + self.info={} + self.data=np.array([]) + self.bHawc=False + super(HAWC2DatFile, self).__init__(filename=filename,**kwargs) + + def _read(self): + try: + res_file = ReadHawc2(self.filename) + self.data = res_file.ReadAll() + self.info['attribute_names'] = res_file.ChInfo[0] + self.info['attribute_units'] = res_file.ChInfo[1] + self.info['attribute_descr'] = res_file.ChInfo[2] + if res_file.FileFormat=='BHAWC_ASCII': + self.bHawc=True + except FileNotFoundError: + raise + #raise WrongFormatError('HAWC2 dat File {}: '.format(self.filename)+' File Not Found:'+e.filename) + except Exception as e: +# raise e + raise WrongFormatError('HAWC2 dat File {}: '.format(self.filename)+e.args[0]) + + #def _write(self): + #self.data.to_csv(self.filename,sep=self.false,index=False) + + def _toDataFrame(self): + import re + + # Simplify output names + names=self.info['attribute_names'] + for i,desc in enumerate(self.info['attribute_descr']): + elem = re.findall(r'E-nr:\s*(\d+)', desc) + zrel = re.findall(r'Z-rel:\s*(\d+.\d+)', desc) + node = re.findall(r'nodenr:\s*(\d+)', desc) + mbdy = re.findall(r'Mbdy:([-a-zA-Z0-9_.]*) ', desc) + s = re.findall(r's=\s*(\d+.\d+)\[m\]', desc) + sS = re.findall(r's/S=\s*(\d+.\d+)', desc) + + pref='' + names[i] = names[i].replace(' ','') + names[i] = names[i].replace('coo:global','g').strip() + names[i] = names[i].replace('Statepos','').strip() + names[i] = names[i].replace('axisangle','rot_').strip() + + if len(mbdy)==1: + names[i] = names[i].replace('coo:'+mbdy[0],'b').strip() + pref += mbdy[0] + + if len(zrel)==1 and len(elem)==1: + ielem=int(elem[0]) + fzrel=float(zrel[0]) + if fzrel==0: + pref+= 'N'+str(ielem) + elif fzrel==1: + pref+='N'+str(ielem+1) + else: + pref+='N'+str(ielem+fzrel) + if len(s)==1 and len(sS)==1: + pref+='r'+str(sS[0]) + + if len(node)==1: + pref+='N'+node[0] + names[i]=pref+names[i] + + if self.info['attribute_units'] is not None: + units = [u.replace('(','').replace(')','').replace('[','').replace(']','') for u in self.info['attribute_units']] + + cols=[n+'_['+u+']' for n,u in zip(names,units)] + else: + cols=names + + return pd.DataFrame(data=self.data,columns=cols) +# + def _write(self): + filename=self.filename + ext = os.path.splitext(filename)[-1].lower() + if ext=='.dat': + datfilename=filename + elif ext=='.sel': + datfilename=filename.replace(ext,'.dat') + else: + datfilename=filename+'.dat' + selfilename=datfilename[:-4]+'.sel' + nScans = self.data.shape[0] + nChannels = self.data.shape[1] + SimTime = self.data[-1,0] #-self.data[0,0] + # --- dat file + np.savetxt(datfilename, self.data, fmt=b'%16.8e') + # --- Sel file + with open(selfilename, 'w') as f: + if self.bHawc: + f.write('BHawC channel reference file (sel):\n') + f.write('+===================== (Name) =================== (Time stamp) ========= (Path) ==========================================================+\n') + f.write('Original BHAWC file : NA.dat 2001.01.01 00:00:00 C:\\\n') + f.write('Channel reference file : NA.sel 2001.01.01 00:00:00 C:\\\n') + f.write('Result file : NA.dat 2001.01.01 00:00:00 C:\\\n') + f.write('+=========================================================================================================================================+\n') + f.write('Scans \tChannels \tTime [sec] \tCoordinate convention: Siemens\n') + f.write('{:19s}\t{:25s}\t{:25s}\n\n'.format(str(nScans),str(nChannels),'{:.3f}'.format(SimTime))) + f.write('{:19s}\t{:25s}\t{:25s}\t{:25s}\n'.format('Channel','Variable descriptions','Labels','Units')) + for chan,(label,descr,unit) in enumerate(zip(self.info['attribute_names'],self.info['attribute_descr'],self.info['attribute_units'])): + unit=unit.replace('(','').replace(')','').replace('[','').replace(']','') + f.write('{:19s}\t{:25s}\t{:25s}\t{:25s}\n'.format(str(chan+1),descr[0:26],label[0:26],'['+unit+']')) + else: + + f.write('________________________________________________________________________________________________________________________\n') + f.write(' Version ID : NA\n') + f.write(' Time : 00:00:00\n') + f.write(' Date : 01:01.2001\n') + f.write('________________________________________________________________________________________________________________________\n') + f.write(' Result file : {:s}\n'.format(os.path.basename(datfilename))) + f.write('________________________________________________________________________________________________________________________\n') + f.write(' Scans Channels Time [sec] Format\n') + f.write('{:12s}{:12s}{:16s}{:s}\n'.format(str(nScans),str(nChannels),'{:.3f}'.format(SimTime),'ASCII')) + f.write('\n') + f.write('{:12s}{:31s}{:11s}{:s}'.format('Channel','Name','Unit','Variable Description\n')) + f.write('\n') + for chan,(label,descr,unit) in enumerate(zip(self.info['attribute_names'],self.info['attribute_descr'],self.info['attribute_units'])): + unit=unit.replace('(','').replace(')','').replace('[','').replace(']','') + f.write('{:12s}{:31s}{:11s}{:s}\n'.format(str(chan+1),label[0:30],unit,descr)) + f.write('________________________________________________________________________________________________________________________\n'); + +class BHAWCDatFile(HAWC2DatFile): + def __init__(self, filename=None, **kwargs): + super(HAWC2DatFile, self).__init__(filename=filename,**kwargs) + self.bHawc=False diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py new file mode 100644 index 0000000000..684db1e15c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py @@ -0,0 +1,136 @@ +""" +Wrapper around wetb to read/write htc files. +TODO: rewrite of c2_def might not be obvious +""" +from .file import File + +import numpy as np +import pandas as pd +import os + +from .wetb.hawc2.htc_file import HTCFile +from .hawc2_st_file import HAWC2StFile + +class HAWC2HTCFile(File): + + @staticmethod + def defaultExtensions(): + return ['.htc'] + + @staticmethod + def formatName(): + return 'HAWC2 htc file' + + def _read(self): + self.data = HTCFile(self.filename) + + def _write(self): + self.data.save(self.filename) + + def __repr__(self): + s='<{} object>\n'.format(type(self).__name__) + s+='| Attributes:\n' + s+='| - data: HTCFile with keys: {}`\n'.format(list(self.data.keys())) + s+='| Derived attributes:\n' + s+='| * bodyNames: {}\n'.format(self.bodyNames) + s+='| * bodyDict: dict with keys bodyNames\n' + s+='| Methods: bodyByName, bodyC2, setBodyC2\n' + return s + + @property + def bodyNames(self): + return list(self.bodyDict.keys()) + + @property + def bodyDict(self): + struct = self.data.new_htc_structure + bodyKeys = [k for k in struct.keys() if k.startswith('main_body')] + #print('>>> keys', struct.keys()) + bdDict={} + for k in bodyKeys: + bodyName = struct[k].name[0] + bdDict[bodyName] = struct[k] + return bdDict + + def bodyByName(self, bodyname): + """ return body inputs given a body name""" + bodyDict= self.bodyDict + if bodyname not in bodyDict.keys(): + raise Exception('No body found with name {} in file {}'.format(bodyname,self.filename)) + return bodyDict[bodyname] + + def bodyC2(self, bdy): + """ return body C2_def given body inputs""" + try: + nsec = bdy.c2_def.nsec[0] + except: + raise Exception('body has no c2_def section') + val = np.array([bdy.c2_def[k].values[0:] for k in bdy.c2_def.keys() if k.startswith('sec')]) + val = val.reshape((-1,5)).astype(float) + val = val[np.argsort(val[:,0]),:] + return val + + def setBodyC2(self, bdy, val): + """ set body C2_def given body inputs and new c2def""" + # TODO different number of section + nsec = bdy.c2_def.nsec[0] + nsec_new = val.shape[0] + sec_keys = [k for k in bdy.c2_def.keys() if k.startswith('sec')] + bdy.c2_def.nsec = nsec_new + if nsec != nsec_new: + if nsec_new -Ly/2 but we flip this to -Ly/2 -> Ly/2 + """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + if N is None: + # try to infer N's from filename with format 'stringN1xN2xN3' + basename = os.path.splitext(os.path.basename(self.filename))[0] + splits = basename.split('x') + temp = re.findall(r'\d+', basename) + res = list(map(int, temp)) + if len(res)>=3: + N=res[-3:] + else: + raise BrokenFormatError('Reading a Mann box requires the knowledge of the dimensions. The dimensions can be inferred from the filename, for instance: `filebase_1024x32x32.u`. Try renaming your file such that the three last digits are the dimensions in x, y and z.') + nx,ny,nz=N + + def _read_buffered(): + data=np.zeros((nx,ny,nz),dtype=np.float32) + with open(self.filename, mode='rb') as f: + for ix in range(nx): + Buffer = np.frombuffer(f.read(4*ny*nz), dtype=np.float32) # 4-bytes + data[ix,:,:] = np.flip(Buffer.reshape((ny,nz)),0) + return data + + def _read_nonbuffered(): + data = np.fromfile(self.filename, np.dtype(' -Ly/2 + # So we flip the y-axis, so that the field is consistent with typical y values + return np.flip(data, 1) # i.e. data=data[:,::-1,:] + +# self['field']= _read_nonbuffered() + self['field']= _read_buffered() + self['dy']=dy + self['dz']=dz + self['y0']=y0 + self['z0']=z0 + self['zMid']=zMid + + def write(self, filename=None): + """ Write mann box """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + nx,ny,nz = self['field'].shape + sfmt='<{:d}f'.format(ny*nz) + with open(self.filename, mode='wb') as f: + for ix in np.arange(nx): + data = np.flip(self['field'][ix,:,:],0).ravel() # We have to flip the y axis again + f.write(struct.pack(sfmt, *data)) + + + def __repr__(self): + s='<{} object> with keys:\n'.format(type(self).__name__) + s+='| - filename: {}\n'.format(self.filename) + s+='| - field: shape {}x{}x{}\n'.format(self['field'].shape[0],self['field'].shape[1],self['field'].shape[2]) + s+='| min: {}, max: {}, mean: {} \n'.format(np.min(self['field']), np.max(self['field']), np.mean(self['field'])) + s+='| - dy, dz: {}, {}\n'.format(self['dy'], self['dz']) + s+='| - y0, z0 zMid: {}, {}, {}\n'.format(self['y0'], self['z0'], self['zMid']) + z=self.z + y=self.y + s+='| * y: [{} ... {}], dy: {}, n: {} \n'.format(y[0],y[-1],self['dy'],len(y)) + s+='| * z: [{} ... {}], dz: {}, n: {} \n'.format(z[0],z[-1],self['dz'],len(z)) + s+='|useful functions:\n' + s+='| - t(dx, U)\n' + s+='| - valuesAt(y,z), vertProfile, fromTurbSim(*), _iMid()\n' + return s + + + @property + def z(self): + zmax = self['z0'] + (self['field'].shape[2]-1+0.1)*self['dz'] + z = np.arange(self['z0'], zmax, self['dz']) + if self['zMid'] is not None: + z+= self['zMid']-np.mean(z) + return z + + @property + def y(self): + if self['y0'] is not None: + ymax = self['y0'] + (self['field'].shape[1]-1+0.1)*self['dy'] + y = np.arange(self['y0'], ymax, self['dy']) + else: + ymax = (self['field'].shape[1]-1+0.1)*self['dy'] + y = np.arange(0, ymax, self['dy']) + y -= np.mean(y) + return y + + def t(self, dx, U): + # 1.5939838 dx - distance (in meters) between points in the x direction (m) + # 99.5 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + # 6.26 URef - Mean u-component wind speed at the reference height (m/s) + dt = dx/U + nt = self['field'].shape[0] + return np.arange(0, dt*(nt-0.5), dt) + + # --------------------------------------------------------------------------------} + # --- Extracting relevant data + # --------------------------------------------------------------------------------{ + def valuesAt(self, y, z, method='nearest'): + """ return wind speed time series at a point """ + if method == 'nearest': + iy, iz = self.closestPoint(y, z) + u = self['field'][:,iy,iz] + else: + raise NotImplementedError() + return u + + def closestPoint(self, y, z): + iy = np.argmin(np.abs(self.y-y)) + iz = np.argmin(np.abs(self.z-z)) + return iy,iz + + def _iMid(self): + _, ny, nz = self['field'].shape + return int(ny/2), int(nz/2) + + @property + def vertProfile(self): + iy, iz = self._iMid() + m = np.mean(self['field'][:,iy,:], axis=0) + s = np.std (self['field'][:,iy,:], axis=0) + return self.z,m,s + + + def toDataFrame(self): + dfs={} + ny = len(self.y) + nz = len(self.z) + # Index at mid box + iy,iz = self._iMid() + + # Mean vertical profile + z, m, s = self.vertProfile + ti = s/m*100 + cols=['z_[m]','vel_[m/s]','sigma_[m/s]','TI_[%]'] + data = np.column_stack((z,m[:],s[:],ti[:])) + dfs['VertProfile'] = pd.DataFrame(data = data ,columns = cols) + + # Mid time series + u = self['field'][:,iy,iz] + cols=['t/T_[-]','vel_[m/s]'] + fake_t = np.linspace(0, 1, len(u)) + data = np.column_stack((fake_t,u[:])) + dfs['ZMidLine'] = pd.DataFrame(data = data ,columns = cols) + + + # ZMin YEnd time series + u = self['field'][:,-1,iz] + cols=['t/T_[-]','vel_[m/s]'] + fake_t = np.linspace(0, 1, len(u)) + data = np.column_stack((fake_t,u[:])) + dfs['ZMidYEndLine'] = pd.DataFrame(data = data ,columns = cols) + + # ZMin YStart time series + u = self['field'][:,0,iz] + cols=['t/T_[-]','vel_[m/s]'] + fake_t = np.linspace(0, 1, len(u)) + data = np.column_stack((fake_t,u[:])) + dfs['ZMidYStartLine'] = pd.DataFrame(data = data ,columns = cols) + + + +# # Mid crosscorr y +# y, rho_uu_y, rho_vv_y, rho_ww_y = self.crosscorr_y() +# cols = ['y_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] +# data = np.column_stack((y, rho_uu_y, rho_vv_y, rho_ww_y)) +# dfs['Mid_xcorr_y'] = pd.DataFrame(data = data ,columns = cols) +# +# # Mid crosscorr z +# z, rho_uu_z, rho_vv_z, rho_ww_z = self.crosscorr_z() +# cols = ['z_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] +# data = np.column_stack((z, rho_uu_z, rho_vv_z, rho_ww_z)) +# dfs['Mid_xcorr_z'] = pd.DataFrame(data = data ,columns = cols) +# +# # Mid csd +# fc, chi_uu, chi_vv, chi_ww = self.csd_longi() +# cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] +# data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) +# dfs['Mid_csd_longi'] = pd.DataFrame(data = data ,columns = cols) +# +# # Mid csd +# fc, chi_uu, chi_vv, chi_ww = self.csd_lat() +# cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] +# data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) +# dfs['Mid_csd_lat'] = pd.DataFrame(data = data ,columns = cols) +# +# # Mid csd +# fc, chi_uu, chi_vv, chi_ww = self.csd_vert() +# cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] +# data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) +# dfs['Mid_csd_vert'] = pd.DataFrame(data = data ,columns = cols) + return dfs + + + + # Useful converters + def fromTurbSim(self, u, icomp=0, removeConstant=None, removeAllMean=False): + """ + Assumes: + u (3 x nt x ny x nz) + Removes the mean of the turbsim file for the "u" component. + """ + if icomp==0: + if removeAllMean is True: + self['field'] = u[icomp, :, : ,: ]-np.mean(u[icomp,:,:,:],axis=0) + elif removeConstant is not None: + self['field'] = u[icomp, :, : ,: ]-removeConstant + else: + self['field'] = u[icomp, :, : ,: ] + else: + self['field'] = u[icomp, :, : ,: ] + return self + +if __name__=='__main__': + mb = MannBoxFile('mini-u_1024x32x32.bin') +# mb = MannBoxFile('mann_bin/mini-u.bin', N=(2,4,8)) +# F1=mb['field'].ravel() +# mb.write('mann_bin/mini-u-out.bin') +# +# mb2= MannBoxFile('mann_bin/mini-u-out.bin', N=(2,4,8)) +# F2=mb2['field'].ravel() +# print(F1-F2) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py new file mode 100644 index 0000000000..13f1cc2c14 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py @@ -0,0 +1,191 @@ +""" +Read/Write Mann Box input file + +""" +import os +import numpy as np +try: + from .file import File, EmptyFileError, BrokenFormatError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + File=dict + +class MannBoxInputFile(File): + def __init__(self, filename=None, **kwargs): + self.filename = None + # Default Init + self['fieldDim'] = None + self['nComp'] = None + self['nx'] = None + self['ny'] = None + self['nz'] = None + self['Lx'] = None + self['Ly'] = None + self['Lz'] = None + self['type'] = None + self['U'] = None + self['z'] = None + self['zNone'] = None + self['spectrum'] = None + # Basic + self['alpha_eps'] = None + self['L'] = None + self['Gamma'] = None + self['seed'] = -1 + self['file_u'] = None + self['file_v'] = None + self['file_w'] = None + for k,v in kwargs.items(): + print('>>> Setting',k,v) + + if filename: + self.read(filename=filename) + + def read(self, filename): + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + with open(self.filename) as f: + print('IO: Reading Mann input file: '+self.filename) + self['fieldDim'] = int(f.readline()) + self['nComp'] = int(f.readline()) + if(self['nComp']==3): + self['nx'] = int(f.readline()) + self['ny'] = int(f.readline()) + self['nz'] = int(f.readline()) + self['Lx'] = float(f.readline()) + self['Ly'] = float(f.readline()) + self['Lz'] = float(f.readline()) + else: + raise Exception('nComp=2') + self['type']=f.readline().strip() + if(self['type']=='basic'): + self['alpha_eps'] = float(f.readline()) + self['L'] = float(f.readline()) + self['Gamma'] = float(f.readline()) + else: + raise Exception('not basic') + self['seed']=int(f.readline()) + if(self['nComp']>=1): + self['file_u']=f.readline().strip() + if(self['nComp']>=2): + self['file_v']=f.readline().strip() + if(self['nComp']>=3): + self['file_w']=f.readline().strip() + + def write(self, filename): + """ Write mann box """ + if filename: + self.filename = filename + + self.defaultFileNames(self.filename) + + with open(self.filename, 'w') as f: + f.write(str(self['fieldDim'])+'\n') + f.write(str(self['nComp'])+'\n') + if(self['nComp']==3): + f.write(str(self['nx'])+'\n') + f.write(str(self['ny'])+'\n') + f.write(str(self['nz'])+'\n') + f.write(str(self['Lx'])+'\n') + f.write(str(self['Ly'])+'\n') + f.write(str(self['Lz'])+'\n') + else: + raise Exception('nComp=2') + + f.write(self['type']+'\n') + if(self['type']=='basic'): + f.write(str(self['alpha_eps'])+'\n'); + f.write(str(self['L'])+'\n'); + f.write(str(self['Gamma'])+'\n'); + else: + raise Exception('not basic') + + f.write(str(self['seed'])+'\n'); + if(self['nComp']>=1): + f.write(self['file_u']+'\n'); + if(self['nComp']>=2): + f.write(self['file_v']+'\n'); + if(self['nComp']>=3): + f.write(self['file_w']+'\n'); + + def defaultFileNames(self, inpfile): + base = os.path.splitext(os.path.basename(inpfile))[0] + nx,ny,nz = self['nx'], self['ny'], self['nz'] + self['file_u'] = base+'_{}x{}x{}.u'.format(nx,ny,nz) + self['file_v'] = base+'_{}x{}x{}.v'.format(nx,ny,nz) + self['file_w'] = base+'_{}x{}x{}.w'.format(nx,ny,nz) + +# def set3Disotropic(self,nx,ny,nz,Lx,Ly,Lz,alpha_eps,L): +# self.fieldDim=3; +# self.NComp=3; +# self.nx=nx; +# self.ny=ny; +# self.nz=nz; +# self.Lx=Lx; +# self.Ly=Ly; +# self.Lz=Lz; +# self.alpha_eps=alpha_eps; +# self.L=L; +# # Isotropic +# self.Gamma=0.0; +# self.type='basic'; +# +# def auto_file_names(self,folder=''): +# if folder is None: +# folder='' +# import os +# if(self.type=='basic' and self.Gamma==0): +# if self.fieldDim==3: +# filenameBase='Isotropic3D_'+str(self.nx)+'_'+str(self.ny)+'_'+str(self.nz)+'_h'+str(int(100*float(self.Lx)/float(self.nx-1))/100.) +# self.filename = os.path.join(folder,filenameBase+'.maninp') +# self.file_u = os.path.join(folder,filenameBase+'_u.dat') +# self.file_v = os.path.join(folder,filenameBase+'_v.dat') +# self.file_w = os.path.join(folder,filenameBase+'_w.dat') +# + + def __repr__(self): + s = '<{} object> with keys:\n'.format(type(self).__name__) + for k,v in self.items(): + s += '{:15s}: {}\n'.format(k,v) + return s + + + +# +# def get_outfile_u(self): +# return self.file_u +# def get_outfile_v(self): +# return self.file_v +# def get_outfile_w(self): +# return self.file_w +# +# if __name__ == "__main__": +# import sys +# if len(sys.argv)>1: +# print 'called with: ', int(sys.argv[1]) +# +# nx=1024; +# ny=256; +# nz=256; +# Lx=100; +# Ly=10; +# Lz=10; +# alpha_eps=0.01 +# L=10; +# +# inp=MannInputFile(); +# inp.set3Disotropic(nx,ny,nz,Lx,Ly,Lz,alpha_eps,L) +# inp.auto_file_names() +# inp.write(); +# # inp2=MannInputFile(inp.filename); +# # inp2.filename='out10.inp' +# # inp2.write() +# diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py new file mode 100644 index 0000000000..2ed922d3c0 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py @@ -0,0 +1,111 @@ +""" +Input/output class for the matlab .mat fileformat +""" +import numpy as np +import pandas as pd +import os +import scipy.io + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File=dict + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + +class MatlabMatFile(File): + """ + Read/write a mat file. The object behaves as a dictionary. + + Main methods + ------------ + - read, write, toDataFrame, keys + + Examples + -------- + f = MatlabMatFile('file.mat') + print(f.keys()) + print(f.toDataFrame().columns) + + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.mat'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'Matlab mat file' + + @staticmethod + def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + mfile = scipy.io.loadmat(self.filename) + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + #with open(self.filename,'w') as f: + # f.write(self.toString) + raise NotImplementedError() + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + # --- Example (returning one DataFrame): + # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) + # --- Example (returning dict of DataFrames): + #dfs={} + #cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] + #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) + #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) + # return dfs + raise NotImplementedError() + + # --- Optional functions + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + #s+='|Main keys:\n' + #s+='| - ID: {}\n'.format(self['ID']) + #s+='| - data : shape {}\n'.format(self['data'].shape) + s+='|Main methods:\n' + s+='| - read, write, toDataFrame, keys' + return s + + def toString(self): + """ """ + s='' + return s + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py new file mode 100644 index 0000000000..0650c0e12b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py @@ -0,0 +1,166 @@ +import numpy as np + +def yaml_read(filename=None, dictIn=None, lines=None, text=None): + """ + read yaml files only supports: + - Key value pairs: + key: value + - Key with lists of lists: + key: + - [0,1] + - [0,1] + - Comments are stripped based on first # found (in string or not) + - Keys are found based on first : found (in string or not) + """ + # --- swtich depending on what the user provided + if filename is not None: + # Read all lines at once + with open(filename, 'r', errors="surrogateescape") as f: + lines=f.read().splitlines() + elif text is not None: + lines = text.split('\n') + elif lines is not None: + # OK + pass + + if dictIn is None: + d=dict() + else: + d=dictIn + + # --- Loop on lines + i=0 + while i0: + for i in np.arange(iStart,iEnd+1): + L,_ = _readInlineList(lines[i].lstrip()[1:], mytype=mytype) + M[i-iStart,:] = L + return M, iEnd+1 + +def _readInlineList(line, mytype=None): + """ + Parse a simple list of int, float or string + [a, b, c] + [a, b, c,] + """ + L = _cleanComment(line.replace(']','').replace('[','')).strip().rstrip(',').strip() + if len(L)==0: + return np.array([]), float + L=L.split(',') + L = np.asarray(L) + if mytype is None: + ## try to detect type + try: + L=L.astype(int) + mytype=int + except: + try: + L=L.astype(float) + mytype=float + except: + try: + L=L.astype(str) + mytype=str + L=np.array([c.strip() for c in L]) + except: + raise Exception('Cannot parse list from string: >{}<'.format(line)) + else: + try: + L = L.astype(mytype) + if mytype==str: + L=np.array([c.strip() for c in L]) + except: + raise Exception('Cannot parse list of type {} from string: >{}<'.format(mytype, line)) + + # + return L, mytype + + +if __name__=='__main__': +# #d=yaml_read('test.SD.sum.yaml') + text = """ +# Comment +IS1: 40567 # int scalar +FS1: 40567.32 # float scalar +FA1: # Array1 + - [ 3.97887E+07, 0.00000E+00, 0.00000E+00] + - [ 0.00000E+00, 3.97887E+07, 0.00000E+00] + - [ 0.00000E+00, 0.00000E+00, 0.00000E+00] +FA2: # Array2 + - [ 1.E+00, 0.E+00, 0.E+00,] + - [ 0.E+00, 1.E+00, 0.E+00,] + - [ 0.E+00, 0.E+00, 1.E+00,] +FL1: [ 0.0, 0.0, 1.0 ] # FloatList1 +FL2: [ 0.0, 0.0, 1.0,] # FloatList2 +SL2: [ aa, bb , cc, dd, ] #string list +""" + text=""" +EL1: [ ] #empty list +EL2: #empty list2 + - [ ] # empty list +""" + d=yaml_read(text=text) + print(d) + for k,v, in d.items(): + if hasattr(v,'__len__'): + if len(v)>0: + print('{:12s} {:20s} {}'.format(k, str(type(v[0]))[6:], v[0])) + else: + print('{:12s} {:20s} {}'.format(k, str(type(v))[6:], v)) + else: + print('{:12s} {:20s} {}'.format(k, str(type(v))[6:], v)) + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py new file mode 100644 index 0000000000..7d69b45e43 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py @@ -0,0 +1,40 @@ +import pandas as pd + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + +class NetCDFFile(File): + + @staticmethod + def defaultExtensions(): + return ['.nc'] + + @staticmethod + def formatName(): + return 'NetCDF file (<=2D)' + + def _read(self): + try: + import xarray as xr + except: + raise Exception('Python module `xarray` not installed') + + self.data=xr.open_dataset(self.filename) + + def _write(self): + self.data.to_netcdf(self.filename) + + def _toDataFrame(self): + dfs={} + for k in self.data.keys(): + # Not pretty... + if len(self.data[k].shape)==2: + dfs[k]=pd.DataFrame(data=self.data[k].values) + elif len(self.data[k].shape)==1: + dfs[k]=pd.DataFrame(data=self.data[k].values) + return dfs + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py new file mode 100644 index 0000000000..7cf8dd159a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py @@ -0,0 +1,48 @@ +import pandas as pd + +from .file import File + + +class ParquetFile(File): + + @staticmethod + def defaultExtensions(): + return ['.parquet'] + + @staticmethod + def formatName(): + return 'Parquet file' + + def __init__(self,filename=None,**kwargs): + self.filename = filename + if filename: + self.read(**kwargs) + + + def _read(self): + """ use pandas read_parquet function to read parquet file""" + self.data=pd.read_parquet(self.filename) + + def _write(self): + """ use pandas DataFrame.to_parquet method to write parquet file """ + self.data.to_parquet(path=self.filename) + + def toDataFrame(self): + #already stored as a data frame in self.data + #just return self.data + return self.data + + def fromDataFrame(self, df): + #data already in dataframe + self.data = df + + def toString(self): + """ use pandas DataFrame.to_string method to convert to a string """ + s=self.data.to_string() + return s + + def __repr__(self): + s ='Class Parquet (attributes: data)\n' + return s + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py new file mode 100644 index 0000000000..97bd289ad1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py @@ -0,0 +1,174 @@ +""" +Input/output class for the pickle fileformats +""" +import numpy as np +import pandas as pd +import os +import pickle +import builtins + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File=dict + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + +class PickleFile(File): + """ + Read/write a pickle file. The object behaves as a dictionary. + + Main methods + ------------ + - read, write, toDataFrame, keys + + Examples + -------- + f = PickleFile('file.pkl') + print(f.keys()) + print(f.toDataFrame().columns) + + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.pkl'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'Pickle file' + + @staticmethod + def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low + + + def __init__(self, filename=None, data=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename and not data: + self.read(**kwargs) + if data: + self._setData(data) + if filename: + self.write() + + def _setData(self, data): + if isinstance(data, dict): + for k,v in data.items(): + self[k] = v + else: + if hasattr(data, '__dict__'): + self.update(data.__dict__) + else: + self['data'] = data + + def addDict(self, data): + self._setData(data) + + def additem(self, key, data): + self[key]=data + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # Reads self.filename and stores data into self. Self is (or behaves like) a dictionary + # If pickle data is a dict we store its keys in self, otherwise with store the pickle in the "data" key + d = pickle.load(open(self.filename, 'rb')) + self._setData(d) + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + with open(self.filename, 'wb') as fid: + pickle.dump(dict(self), fid) + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + dfs={} + for k,v in self.items(): + if isinstance(v, pd.DataFrame): + dfs[k] = v + elif isinstance(v, np.ndarray): + if len(v.shape)==2: + dfs[k] = pd.DataFrame(data=v, columns=['C{}'.format(i) for i in range(v.shape[1])]) + elif len(v.shape)==1: + dfs[k] = pd.DataFrame(data=v, columns=[k]) + if len(dfs)==1: + dfs=dfs[list(dfs.keys())[0]] + return dfs + + # --- Optional functions + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + s+='|Main keys:\n' + for k,v in self.items(): + try: + s+='| - {}: type:{} shape:{}\n'.format(k,type(v),v.shape) + except: + try: + s+='| - {}: type:{} len:{}\n'.format(k,type(v), len(v)) + except: + s+='| - {}: type:{}\n'.format(k,type(v)) + s+='|Main methods:\n' + s+='| - read, write, toDataFrame, keys' + return s + + + # --- Functions speficic to filetype + def toGlobal(self, namespace=None, overwrite=True, verbose=False, force=False) : + #def toGlobal(self, **kwargs): + """ + NOTE: very dangerous, mostly works for global, but then might infect everything + + Inject variables (keys of read dict) into namespace (e.g. globals()). + By default, the namespace of the caller is used + To use the global namespace, use namespace=globals() + """ + import inspect + st = inspect.stack() + if len(st)>2: + if not force: + raise Exception('toGlobal is very dangerous, only use in isolated script. use `force=True` if you really know what you are doing') + else: + print('[WARN] toGlobal is very dangerous, only use in isolated script') + if namespace is None: + # Using parent local namespace + namespace = inspect.currentframe().f_back.f_globals + #namespace = inspect.currentframe().f_back.f_locals # could use f_globals + # Using global (difficult, overwriting won't work) It's best if the user sets namespace=globals() + # import builtins as _builtins + # namespace = _builtins # NOTE: globals() is for the package globals only, we need "builtins" + + gl_keys = list(namespace.keys()) + for k,v in self.items(): + if k in gl_keys: + if not overwrite: + print('[INFO] not overwritting variable {}, already present in global namespace'.format(k)) + continue + else: + print('[WARN] overwritting variable {}, already present in global namespace'.format(k)) + + if verbose: + print('[INFO] inserting in namespace: {}'.format(k)) + namespace[k] = v # OR do: builtins.__setattr__(k,v) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py new file mode 100644 index 0000000000..cedd941105 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py @@ -0,0 +1,2 @@ +from pyFAST.postpro.postpro import * +print('[WARN] pyFAST.input_output.postpro was moved to pyFAST.postpro') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py new file mode 100644 index 0000000000..fc5661e576 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py @@ -0,0 +1,211 @@ +# imports +import pandas as pd +import numpy as np +import os + + +def matfile(path_file,output='pandas',path_key=None): + ''' Function to parse RAAW .mat historical files with specific data structure + + Parameter + --------- + path_file : str + File path to .mat file to read + output : str + Desired output format of 'pandas' or 'xarray' + path_key : str (optional) + File path to .csv channel_key for extra checks and consistent formatting + + Return + ------ + ds : dict + Dict with keys 'data50hz' and 'data1hz' with specified output format + ''' + from scipy.io import loadmat + + # load in the mat file + mfile = loadmat(path_file) + + # flatten the mat file + data = [[row.flat[0] for row in line] for line in mfile['DataCell']] + + # create time column for easy comparison to simulations (0-600 seconds) + time50hz = np.arange(600,step=0.02) + time1hz = np.arange(600,step=1) + names_50hz = ['time'] + names_1hz = ['time'] + dat_50hz = [time50hz] + dat_1hz = [time1hz] + # start data reorganization into lists to be converted into pandas + allnames = [] + for signal in range(mfile['DataCell'].size): + name = data[signal][0][1][0] # get signal name + allnames.append(name) + if data[signal][0][3][0][0] == 0.02: + names_50hz.append(name) + dat_50hz.append(data[signal][0][6].squeeze()) + elif data[signal][0][3][0][0] == 1: + names_1hz.append(name) + dat_1hz.append(data[signal][0][6].squeeze()) + else: + print('ERROR: '+name+' ignored!') + + # create time index for each dataframe + tstamp = np.array2string(data[signal][0][5][0], separator=',') + tstamp = tstamp.replace(' ','').replace('[','').replace(']','') + t0 = pd.to_datetime(tstamp,format='%Y,%m,%d,%H,%M,%S') + tstamp50hz = pd.date_range(start=t0,periods=30000,freq='20ms') + tstamp1hz = pd.date_range(start=t0,periods=600,freq='1s') + + if not path_key==None: + # load in list of channels + channel_key = pd.read_csv(path_key) + list_50hz = channel_key['50hz'].to_list() + list_1hz = channel_key['1hz'].dropna().to_list() + # check if file size matches channel list size + if mfile['DataCell'].size > (len(list_50hz)+len(list_1hz)): + print('WARNING: channel size in file is greater than size of channel names lists!') + # find any missing channels from file + missing50hz = list(set(list_50hz)-set(names_50hz)) + missing1hz = list(set(list_1hz)-set(names_1hz)) + + if output == 'xarray': + import xarray as xr + # add missing columns filled with NaNs + nan50 = np.empty(30000) + nan50[:] = np.nan + nan1 = np.empty(600) + nan1[:] = np.nan + try: + if missing50hz: + for x in missing50hz: dat_50hz.append(nan50) + names_50hz.append(missing50hz) + if missing1hz: + for y in missing1hz: dat_1hz.append(nan1) + names_1hz.append(missing1hz) + except: + pass + # convert lists into xarray + df50hz = xr.DataArray(np.transpose(dat_50hz), dims=('timestamp','channel'),coords={'timestamp':tstamp50hz,'channel':names_50hz}) + df1hz = xr.DataArray(np.transpose(dat_1hz), dims=('timestamp','channel'),coords={'timestamp':tstamp1hz,'channel':names_1hz}) + # store in dict + ds = {'data50hz': df50hz, 'data1hz': df1hz} + return ds + + if output == 'pandas': + # convert lists into pandas + df_50hz = pd.DataFrame(dat_50hz).T + df_50hz.columns = names_50hz + df_1hz = pd.DataFrame(dat_1hz).T + df_1hz.columns = names_1hz + df_50hz.index = tstamp50hz + df_1hz.index = tstamp1hz + try: + # add columns with missing channels filled with NaNs + for x in missing50hz: df_50hz[x] = np.nan + for y in missing1hz: df_1hz[y] = np.nan + except: + pass + # store in dict + ds = {'data50hz': df_50hz, 'data1hz': df_1hz} + return ds + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + File=dict + +class RAAWMatFile(File): + """ + Read a RAAW .mat file. The object behaves as a dictionary. + + Main methods + ------------ + - read, toDataFrame, keys + + Examples + -------- + f = RAAWMatFile('file.mat') + print(f.keys()) + print(f.toDataFrame().columns) + + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.mat'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'RAAW .mat file' + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # --- Calling (children) function to read + self._read(**kwargs) + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + # Calling (children) function to write + self._write() + + def _read(self): + """ Reads self.filename and stores data into self. Self is (or behaves like) a dictionary""" + self['data'] = matfile(self.filename,output='pandas') + + def _write(self): + """ Writes to self.filename""" + # --- Example: + #with open(self.filename,'w') as f: + # f.write(self.toString) + raise NotImplementedError() + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + return self['data'] + + # --- Optional functions + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + #s+='|Main keys:\n' + #s+='| - ID: {}\n'.format(self['ID']) + #s+='| - data : shape {}\n'.format(self['data'].shape) + s+='|Main methods:\n' + s+='| - read, toDataFrame, keys\n' + s+='|Info:\n' + d1=self['data']['data1hz'] + d5=self['data']['data50hz'] + s+='| - data1hz : {} to {} (n:{}, T:{}, dt:{})\n'.format(d1.index[0], d1.index[-1], len(d1), (d1.index[-1]-d1.index[0]).total_seconds(), (d1.index[1]-d1.index[0]).total_seconds()) + s+='| - data50hz: {} to {} (n:{}, T:{}, dt:{})\n'.format(d5.index[0], d5.index[-1], len(d5), (d5.index[-1]-d5.index[0]).total_seconds(), (d5.index[1]-d5.index[0]).total_seconds()) + return s diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py new file mode 100644 index 0000000000..b4de969d52 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py @@ -0,0 +1,265 @@ +""" +Input/output class for the fileformat ROSCO DISCON file +""" +import numpy as np +import pandas as pd +import os +from collections import OrderedDict + +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File=OrderedDict + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + +class ROSCODISCONFile(File): + """ + Read/write a ROSCO DISCON file. The object behaves as a dictionary. + + Main methods + ------------ + - read, write, toDataFrame, keys + + Examples + -------- + f = ROSCODISCONFile('DISCON.IN') + print(f.keys()) + print(f.toDataFrame().columns) + + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.in'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'ROSCO DISCON file' + + @staticmethod + def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low + + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + # --- Calling (children) function to read + _, comments, lineKeys = read_DISCON(self.filename, self) + self.comments=comments + self.lineKeys=lineKeys + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + with open(self.filename, 'w') as f: + f.write(self.toString()) + + + def toDataFrame(self): + """ Returns object into one DataFrame, or a dictionary of DataFrames""" + dfs={} + low_keys = [s.lower() for s in self.keys()] + if 'pc_gs_n' in low_keys: + M = np.column_stack([self['PC_GS_angles']*180/np.pi, self['PC_GS_KP'], self['PC_GS_KI'], self['PC_GS_KD'], self['PC_GS_TF']] ) + cols = ['Pitch_[deg]', 'KP_[-]', 'KI_[s]', 'KD_[1/s]', 'TF_[-]'] + dfs['PitchSchedule'] = pd.DataFrame(data=M, columns=cols) + if 'ps_bldpitchmin_n' in low_keys: + M = np.column_stack([self['PS_WindSpeeds'], self['PS_BldPitchMin']]) + cols = ['WindSpeed_[m/s]', 'Pitch_[deg]'] + dfs['PitchSaturation'] = pd.DataFrame(data=M, columns=cols) + if 'prc_n' in low_keys: + M = np.column_stack([self['PRC_WindSpeeds'], self['PRC_RotorSpeeds']*30/np.pi]) + cols = ['WindSpeed_[m/s]', 'RotorSpeed_[rpm]'] + dfs['PowerTracking'] = pd.DataFrame(data=M, columns=cols) + + return dfs + + # --- Optional functions + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + #s+='|Main keys:\n' + #s+='| - ID: {}\n'.format(self['ID']) + #s+='| - data : shape {}\n'.format(self['data'].shape) + s+='|Main methods:\n' + s+='| - read, write, toDataFrame, keys' + return s + + def toString(self): + """ """ + maxKeyLengh = np.max([len(k) for k in self.keys()]) + maxKeyLengh = max(maxKeyLengh, 18) + fmtKey = '{:' +str(maxKeyLengh)+'s}' + s='' + for l in self.lineKeys: + if len(l)==0: + s+='\n' + elif l.startswith('!'): + s+=l+'\n' + else: + param = l + comment = self.comments[param] + v = self[param] + sparam = '! '+fmtKey.format(param) + # NOTE: could to "param" specific outputs here + FMTs = {} + FMTs['{:<4.6f}']=['F_NotchBetaNumDen', 'F_FlCornerFreq', 'F_FlpCornerFreq', 'PC_GS_angles', 'PC_GS_KP', 'PC_GS_KI', 'PC_GS_KD', 'PC_GS_TF', 'IPC_Vramp', 'IPC_aziOffset'] + FMTs['{:<4.3e}']=['IPC_KP','IPC_KI'] + FMTs['{:<4.3f}']=['PRC_WindSpeeds', 'PRC_RotorSpeed','PS_WindSpeeds'] + FMTs['{:<4.4f}']=['WE_FOPoles_v'] + FMTs['{:<10.8f}']=['WE_FOPoles'] + FMTs['{:<10.3f}']=['PS_BldPitchMin'] + fmtFloat='{:<014.5f}' + for fmt,keys in FMTs.items(): + if param in keys: + fmtFloat=fmt + break + if type(v) is str: + sval='"{:15s}" '.format(v) + elif hasattr(v, '__len__'): + if isinstance(v[0], (np.floating, float)): + sval=' '.join([fmtFloat.format(vi) for vi in v] )+' ' + else: + sval=' '.join(['{}'.format(vi) for vi in v] )+' ' + elif type(v) is int: + sval='{:<14d} '.format(v) + elif isinstance(v, (np.floating, float)): + sval=fmtFloat.format(v) + ' ' + else: + sval='{} '.format(v) + s+='{}{}{}\n'.format(sval, sparam, comment) + return s + + + + + + +# Some useful constants +pi = np.pi +rad2deg = np.rad2deg(1) +deg2rad = np.deg2rad(1) +rpm2RadSec = 2.0*(np.pi)/60.0 +RadSec2rpm = 60/(2.0 * np.pi) + +def write_DISCON(turbine, controller, param_file='DISCON.IN', txt_filename='Cp_Ct_Cq.txt', rosco_vt = {}): + """ + Print the controller parameters to the DISCON.IN input file for the generic controller + + Parameters: + ----------- + turbine: class + Turbine class containing turbine operation information (ref speeds, etc...) + controller: class + Controller class containing controller operation information (gains, etc...) + param_file: str, optional + filename for parameter input file, should be DISCON.IN + txt_filename: str, optional + filename of rotor performance file + """ + + # Get ROSCO var tree if not provided + if not rosco_vt: + rosco_vt = DISCON_dict(turbine, controller, txt_filename) + + print('Writing new controller parameter file parameter file: %s.' % param_file) + # Should be obvious what's going on here... + file = open(param_file,'w') + + # Write Open loop input + if rosco_vt['OL_Mode'] and hasattr(controller, 'OpenLoop'): + write_ol_control(controller) + +def read_DISCON(DISCON_filename, DISCON_in = None): + ''' + Read the DISCON input file. + Adapted from ROSCO_Toolbox, https:github.com/NREL/ROSCO + + Parameters: + ---------- + DISCON_filename: string + Name of DISCON input file to read + + Returns: + -------- + DISCON_in: Dict + Dictionary containing input parameters from DISCON_in, organized by parameter name + ''' + + if DISCON_in is None: + DISCON_in = OrderedDict() + comments={} + lineKeys=[] + with open(DISCON_filename) as discon: + for line in discon: + line=line.strip() + # empty lines + if len(line)==0: + lineKeys.append('') + continue + # Pure comments + if line[0] == '!': + lineKeys.append(line) + continue + + if (line.split()[1] != '!'): # Array valued entries + sps = line.split() + array_length = sps.index('!') + param = sps[array_length+1] + values = np.array( [float(x) for x in sps[:array_length]] ) + else: # All other entries + param = line.split()[2] + value = line.split()[0] + # Remove printed quotations if string is in quotes + if (value[0] == '"') or (value[0] == "'"): + values = value[1:-1] + else: + if value.find('.')>0: + values = float(value) + else: + values = int(value) + DISCON_in[param] = values + lineKeys.append(param) + + sp = line.split('!') + comment = sp[1].strip() + comment = comment[len(param):].strip() + comments [param] = comment + + return DISCON_in, comments, lineKeys + + +if __name__ == '__main__': + filename = 'DISCON.in' + rd = ROSCODISCONFile(filename) + #print(rd.keys()) +# print(rd.toString()) + rd.write(filename+'_WEIO') + print(rd.toDataFrame()) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py new file mode 100644 index 0000000000..c075ef34dc --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py @@ -0,0 +1,438 @@ +""" +Input/output class for the ROSCO performance (Cp,Ct,Cq) fileformat +""" +import numpy as np +import pandas as pd +import os + +try: + from .file import File, EmptyFileError, WrongFormatError, BrokenFormatError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + File=dict + +class ROSCOPerformanceFile(File): + """ + Read/write a ROSCO performance file. The object behaves as a dictionary. + + Main methods + ------------ + - read, write, toDataFrame, keys + + Examples + -------- + f = ROSCOPerformanceFile('Cp_Ct_Cq.txt') + print(f.keys()) + print(f.toDataFrame().columns) + fig = f.plotCP3D() + CPmax, tsr_max, pitch_max = f.CPmax() + CP = fCP([0, 1], [5, 5]) + CT = fCT([0, 1], [5, 5]) + + """ + + @staticmethod + def defaultExtensions(): + """ List of file extensions expected for this fileformat""" + return ['.txt'] + + @staticmethod + def formatName(): + """ Short string (~100 char) identifying the file format""" + return 'ROSCO Performance file' + + def __init__(self, filename=None, pitch=None, tsr=None, WS=None, CP=None, CT=None, CQ=None, name='',**kwargs): + """ Class constructor. If a `filename` is given, the file is read. + Otherwise values may be provided directly + + INPUTS: + - filename: input file for ROSCO Performance file + OR + - pitch: pitch angle [deg], array of length nPitch + - tsr: tip-speed ratio [-], array of length nTSR + - CP,CT,CQ: aerodynamic coefficients, arrays of shape nTSR x nPitch + CQ is optional since CP = tsr*CQ + - name: wind turbine name + """ + self.filename = filename + self.name = name # Turbine name + self['pitch'] = pitch + self['TSR'] = tsr + self['WS'] = WS + self['CP'] = CP + self['CT'] = CT + self['CQ'] = CQ + + if filename: + self.read(**kwargs) + + if self['pitch'] is not None: + self.checkConsistency() + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided + stores data into self. + self is (or behaves like) a dictionary""" + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + pitch, TSR, WS, CP, CT, CQ = load_from_txt(self.filename) + self['pitch'] = pitch + self['TSR'] = TSR + self['WS'] = WS + self['CP'] = CP + self['CT'] = CT + self['CQ'] = CQ + + def write(self, filename=None): + """ Rewrite object to file, or write object to `filename` if provided """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + # Sanity + self.checkConsistency() + # Write + write_rotor_performance(self.filename, self['pitch'], self['TSR'], self['CP'],self['CT'], self['CQ'], self['WS'], TurbineName=self.name) + + def checkConsistency(self): + """ + Check that data makes sense. + in particular, check if CP=lambda CQ + """ + if self['WS'] is not None: + if not hasattr(self['WS'],'__len__' ): + self['WS'] = np.array([self['WS']]).astype(float) + + CQ = self['CQ'] + CP = self['CP'] + tsr = np.asarray(self['TSR']) + TSR = np.tile(tsr.flatten(), (len(self['pitch']),1)).T + if CQ is None and CP is not None: + CQ = CP/TSR + print('[INFO] Computing CQ from CP') + elif CQ is not None and CP is None: + CP = CQ*TSR + print('[INFO] Computing CP from CQ') + elif CQ is not None and CP is not None: + pass + else: + raise Exception('CP and CQ cannot be None') + # Check consistency + CP2 = CQ*TSR + deltaCP = np.abs(CP-CP2)/0.5*100 # relative difference in %, for a mean CP of 0.5 + if np.max(deltaCP)>5: # more than 5% + raise Exception('Inconsitency between power coefficient and torque coefficient') + self['CP'] = CP + self['CQ'] = CQ + + def toDataFrame(self): + """ Returns object into dictionary of DataFrames""" + dfs={} + columns = ['TSR_[-]']+['Pitch_{:.2f}_[deg]'.format(p) for p in self['pitch']] + dfs['CP'] = pd.DataFrame(np.column_stack((self['TSR'], self['CP'])), columns=columns) + dfs['CT'] = pd.DataFrame(np.column_stack((self['TSR'], self['CT'])), columns=columns) + dfs['CQ'] = pd.DataFrame(np.column_stack((self['TSR'], self['CQ'])), columns=columns) + return dfs + + # --- Optional functions + def toAeroDisc(self, filename, R, csv=False, WS=None, omegaRPM=10): + """ Convert to AeroDisc Format + INPUTS: + - filename: filename to be written + - R: rotor radius [m] + - csv: if True write to CSV format, else, use OpenFAST .dat format + either: + - WS: wind speed [m/s] + or + - omegaRPM: rotational speed [rpm] + + Logic to determine wind speed or rotational speed: + - If user provide a wind speed, we use it. Omega is determined from TSR and WS + - If user provide a rotational speed, we use it. WS is determined from TSR and omega + - If ROSCO file contain one wind speed, we use it. + - Otherwise, we don't know what to do so we raise an exception + """ + # --- Logic to determine wind speed or rotational speed + if WS is not None: + WS = WS + elif omegaRPM is not None: + WS = None + omega = omegaRPM*(2*np.pi)/60 + elif self['WS'] is not None and len(self['WS'])==1: + WS = self['WS'][0] + else: + raise Exception('Provide either a wind speed (`WS`) or a rotational speed (`omegaRPM`)') + + with open(filename,'w') as fid: + # Header + if csv: + fid.write("TSR_(-), RtSpd_(rpm) , VRel_(m/s) , Skew_(deg) , Pitch_(deg) , C_Fx_(-) , C_Fy_(-) , C_Fz_(-) , C_Mx_(-) , C_My_(-) , C_Mz_(-)\n") + else: + fid.write(' TSR RtSpd VRel Skew Pitch C_Fx C_Fy C_Fz C_Mx C_My C_Mz\n') + fid.write(' (-) (rpm) (m/s) (deg) (deg) (-) (-) (-) (-) (-) (-)\n') + if csv: + FMT='{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f}\n' + else: + FMT='{:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f}\n' + # Loop on oper + for j,tsr in enumerate(self['TSR']): + if WS is None: + U0 = omega*R/tsr + else: + U0 = WS + omega = tsr*U0/R + omegaRPM = omega*60/(2*np.pi) + for i,p in enumerate(self['pitch']): + CP=self['CP'][j,i] + CT=self['CT'][j,i] + CQ=self['CQ'][j,i] + skew=0 + cfx=CT + cfy=0 + cfz=0 + cmx=CQ + cmy=0 + cmz=0 + fid.write(FMT.format(tsr, omegaRPM, U0, skew, p, cfx,cfy,cfz,cmx,cmy,cmz)) + + def computeWeights(self): + """ Compute interpolant weights for fast evaluation of CP and CT at intermediate values""" + CP = self['CP'].copy() + CT = self['CT'].copy() + CP = CP[CP<0]=0 + CT = CT[CT<0]=0 + self._fCP = interp2d_pairs(self['pitch'], self['TSR'], CP, kind='cubic') + self._fCT = interp2d_pairs(self['pitch'], self['TSR'], CT, kind='cubic') + + def fCP(self, pitch, tsr): + """ Compute CP for given pitch and tsr, where inputs can be scalar, arrays or matrices""" + if self._fCP is None: + self.computeWeights() + return self.fCP(pitch, tsr) + + def fCT(self, pitch, tsr): + """ Compute CT for given pitch and tsr, where inputs can be scalar, arrays or matrices""" + if self._fCT is None: + self.computeWeights() + return self.fCT(pitch, tsr) + + def CPmax(self): + """ return values at CPmax + TODO: interpolation instead of nearest value.. + """ + CP = self['CP'] + i,j = np.unravel_index(CP.argmax(), CP.shape) + CPmax, tsr_max, pitch_max = CP[i,j], self['TSR'][i], self['pitch'][j] + + return CPmax, tsr_max, pitch_max + + def plotCP3D(self, plotMax=True, trajectory=None): + """ + Plot 3D surface of CP + Optionally plot the maximum and a controller trajectory + """ + import matplotlib.pyplot as plt + from mpl_toolkits.mplot3d import Axes3D + from matplotlib import cm + # Data + LAMBDA, PITCH = np.meshgrid(self['TSR'], self['pitch']) + CP = self['CP'].copy() + CP[CP<0]=0 # + CP_max, tsr_max, pitch_max = self.CPmax() + # plot + fig = plt.figure() + ax = fig.gca(projection='3d') + surf = ax.plot_surface(LAMBDA, PITCH, np.transpose(CP), cmap=cm.coolwarm, linewidth=0, antialiased=True,alpha=0.8, label='$C_p$') + if plotMax: + ax.scatter(tsr_max, pitch_max, CP_max, c='k', marker='o', s=50, label=r'$C_{p,max}$') + if trajectory is not None: + if len(trajectory)==3: + tsr_, pitch_, CP_ = trajectory + else: + tsr_, pitch_ = trajectory + CP_ = self.fCP(tsr_, pitch_) + ax.plot_surface(tsr_, pitch_, CP_, 'k-', linewidth=1 ) + #fig.tight_layout() + #fig.colorbar(surf, shrink=0.5, aspect=15) + ax.view_init(elev=20., azim=26) + ax.set_xlabel('TSR [-]') + ax.set_ylabel('Pitch [deg]') + ax.set_zlabel(r'Power coefficient [-]') + return fig + + def __repr__(self): + """ String that is written to screen when the user calls `print()` on the object. + Provide short and relevant information to save time for the user. + """ + s='<{} object>:\n'.format(type(self).__name__) + s+='|Main attributes:\n' + s+='| - filename: {}\n'.format(self.filename) + # --- Example printing some relevant information for user + s+='|Main keys:\n' + s+='| - pitch: {} values: {}\n'.format(len(self['pitch']) if self['pitch'] is not None else 0, self['pitch']) + s+='| - TSR: {} values: {}\n'.format(len(self['TSR'] ) if self['TSR'] is not None else 0, self['TSR'] ) + s+='| - WS: {} values: {}\n'.format(len(self['WS'] ) if self['WS'] is not None else 0, self['WS'] ) + if self['CP'] is not None: + s+='| - CP,CT,CQ : shape {}\n'.format(self['CP'].shape) + s+='|Main methods:\n' + s+='| - read, write, toDataFrame, keys\n' + s+='| - CPmax, plotCP3d, fCP, fCT, toAeroDisc' + return s + + + + +def load_from_txt(txt_filename): + ''' + Adapted from ROSCO_toolbox/utitities.py by Nikhar Abbas + https://github.com/NREL/ROSCO + Apache 2.0 License + + Load rotor performance data from a *.txt file. + Parameters: + ----------- + txt_filename: str + Filename of the text containing the Cp, Ct, and Cq data. This should be in the format printed by the write_rotorperformance function + ''' + + pitch = None + TSR = None + WS = None + + with open(txt_filename) as pfile: + for iline, line in enumerate(pfile): + # Read Blade Pitch Angles (degrees) + if 'Pitch angle' in line: + pitch = np.array([float(x) for x in pfile.readline().strip().split()]) + + # Read Tip Speed Ratios (rad) + elif 'TSR' in line: + TSR = np.array([float(x) for x in pfile.readline().strip().split()]) + + #Read WS + elif 'Wind speed' in line: + WS = np.array([float(x) for x in pfile.readline().strip().split()]) + + # Read Power Coefficients + elif 'Power' in line: + pfile.readline() + Cp = np.empty((len(TSR),len(pitch))) + for tsr_i in range(len(TSR)): + Cp[tsr_i] = np.array([float(x) for x in pfile.readline().strip().split()]) + + # Read Thrust Coefficients + elif 'Thrust' in line: + pfile.readline() + Ct = np.empty((len(TSR),len(pitch))) + for tsr_i in range(len(TSR)): + Ct[tsr_i] = np.array([float(x) for x in pfile.readline().strip().split()]) + + # Read Torque Coefficients + elif 'Torque' in line: + pfile.readline() + Cq = np.empty((len(TSR),len(pitch))) + for tsr_i in range(len(TSR)): + Cq[tsr_i] = np.array([float(x) for x in pfile.readline().strip().split()]) + + if pitch is None and iline>10: + raise WrongFormatError('This does not appear to be a ROSCO performance file, Pitch vector not found') + + return pitch, TSR, WS, Cp, Ct, Cq + + +def write_rotor_performance(txt_filename, pitch, TSR, CP, CT, CQ, WS=None, TurbineName=''): + ''' + Adapted from ROSCO_toolbox/utitities.py by Nikhar Abbas + https://github.com/NREL/ROSCO + Apache 2.0 License + + Write text file containing rotor performance data + Parameters: + ------------ + txt_filename: str, optional + Desired output filename to print rotor performance data. Default is Cp_Ct_Cq.txt + ''' + file = open(txt_filename,'w') + # Headerlines + file.write('# ----- Rotor performance tables for the wind turbine: {} ----- \n'.format(TurbineName)) + file.write('# ------------ Written using weio\n\n') + + # Pitch angles, TSR, and wind speed + file.write('# Pitch angle vector, {} entries - x axis (matrix columns) (deg)\n'.format(len(pitch))) + for i in range(len(pitch)): + file.write('{:0.4} '.format(pitch[i])) + file.write('\n# TSR vector, {} entries - y axis (matrix rows) (-)\n'.format(len(TSR))) + for i in range(len(TSR)): + file.write('{:0.4} '.format(TSR[i])) + if WS is not None: + file.write('\n# Wind speed vector - z axis (m/s)\n') + for i in range(len(WS)): + file.write('{:0.4f} '.format(WS[i])) + file.write('\n') + + # Cp + file.write('\n# Power coefficient\n\n') + for i in range(len(TSR)): + for j in range(len(pitch)): + file.write('{0:.6f} '.format(CP[i,j])) + file.write('\n') + file.write('\n') + + # Ct + file.write('\n# Thrust coefficient\n\n') + for i in range(len(TSR)): + for j in range(len(pitch)): + file.write('{0:.6f} '.format(CT[i,j])) + file.write('\n') + file.write('\n') + + # Cq + file.write('\n# Torque coefficient\n\n') + for i in range(len(TSR)): + for j in range(len(pitch)): + file.write('{0:.6f} '.format(CQ[i,j])) + file.write('\n') + file.write('\n') + file.close() + + +def interp2d_pairs(*args,**kwargs): + """ Same interface as interp2d but the returned interpolant will evaluate its inputs as pairs of values. + Inputs can therefore be arrays + + example: + f = interp2d_pairs(vx, vy, M, kind='cubic') + + vx: array of length nx + vy: array of length ny + M : array of shape nx x ny + f : interpolant function + v = f(x,y) : if x,y are array of length n, v is of length n + with v_i = f(x_i, y_i) + author: E. Branlard + """ + import scipy.interpolate as si + # Internal function, that evaluates pairs of values, output has the same shape as input + def interpolant(x,y,f): + x,y = np.asarray(x), np.asarray(y) + return (si.dfitpack.bispeu(f.tck[0], f.tck[1], f.tck[2], f.tck[3], f.tck[4], x.ravel(), y.ravel())[0]).reshape(x.shape) + # Wrapping the scipy interp2 function to call out interpolant instead + return lambda x,y: interpolant(x,y,si.interp2d(*args,**kwargs)) + + +if __name__ == '__main__': + f = ROSCOPerformanceFile('./tests/example_files/RoscoPerformance_CpCtCq.txt') + print(f) + dfs = f.toDataFrame() + print(dfs['CP']) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py new file mode 100644 index 0000000000..13f3e9f209 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py @@ -0,0 +1,225 @@ +import numpy as np +import pandas as pd +import os + +try: + from .file import File, WrongFormatError, BrokenFormatError, OptionalImportError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + class OptionalImportError(Exception): pass + +class TDMSFile(File): + + @staticmethod + def defaultExtensions(): + return ['.tdms'] + + @staticmethod + def formatName(): + return 'TDMS file' + + def __init__(self, filename=None, **kwargs): + """ Class constructor. If a `filename` is given, the file is read. """ + self.filename = filename + if filename: + self.read(**kwargs) + + def read(self, filename=None, **kwargs): + """ Reads the file self.filename, or `filename` if provided """ + + # --- Standard tests and exceptions (generic code) + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + try: + from nptdms import TdmsFile + except: + raise OptionalImportError('Install the library nptdms to read this file') + + fh = TdmsFile(self.filename, read_metadata_only=False) + # --- OLD, using some kind of old version of tdms and probably specific to one file + # channels_address = list(fh.objects.keys()) + # channels_address = [ s.replace("'",'') for s in channels_address] + # channel_keys= [ s.split('/')[1:] for s in channels_address if len(s.split('/'))==3] + # # --- Setting up list of signals and times + # signals=[] + # times=[] + # for i,ck in enumerate(channel_keys): + # channel = fh.object(ck[0],ck[1]) + # signals.append(channel.data) + # times.append (channel.time_track()) + + # lenTimes = [len(time) for time in times] + # minTimes = [np.min(time) for time in times] + # maxTimes = [np.max(time) for time in times] + # if len(np.unique(lenTimes))>1: + # print(lenTimes) + # raise NotImplementedError('Different time length') + # # NOTE: could use fh.as_dataframe + # if len(np.unique(minTimes))>1: + # print(minTimes) + # raise NotImplementedError('Different time span') + # if len(np.unique(maxTimes))>1: + # print(maxTimes) + # raise NotImplementedError('Different time span') + # # --- Gathering into a data frame with time + # time =times[0] + # signals = [time]+signals + # M = np.column_stack(signals) + # colnames = ['Time_[s]'] + [ck[1] for ck in channel_keys] + # self['data'] = pd.DataFrame(data = M, columns=colnames) + # --- NEW + self['data'] = fh + + #for group in fh.groups(): + # for channel in group.channels(): + # #channel = group['channel name'] + # print('Group:',group.name , 'Chan:',channel.name) + # channel_data = channel[:] + # if len(channel_data)>0: + # print(' ', type(channel_data)) + # #print(' ', len(channel_data)) + # print(' ', channel_data) + # print(' ', channel_data[0]) + # try: + # print(channel.time_track()) + # except KeyError: + # print('>>> No time track') + + def write(self, filename=None, df=None): + """" + Write to TDMS file. + NOTE: for now only using a conversion from dataframe... + """ + if filename is None: + filename = self.filename + if df is None: + df = self.toDataFrame(split=False) + writeTDMSFromDataFrame(filename, df) + + + def groups(self): + return self['data'].groups() + + @property + def groupNames(self): + return [group.name for group in self['data'].groups()] + + def __repr__(self): + s ='Class TDMS (key: data)\n' + s +=' - data: TdmsFile\n' + s +=' * groupNames: {}\n'.format(self.groupNames) + #for group in fh.groups(): + # for channel in group.channels(): + # print(group.name) + # print(channel.name) + return s + + def toDataFrame(self, split=True): + """ Export to one (split=False) or several dataframes (split=True) + Splitting on the group + """ + + def cleanColumns(df): + # Cleanup columns + colnames = df.columns + colnames=[c.replace('\'','') for c in colnames] + colnames=[c[1:] if c.startswith('/') else c for c in colnames] + # If there is only one group, we remove the group key + groupNames = self.groupNames + if len(groupNames)==1: + nChar = len(groupNames[0]) + colnames=[c[nChar+1:] for c in colnames] # +1 for the "/" + df.columns = colnames + + fh = self['data'] + if split: + # --- One dataframe per group. We skip group that have empty data + dfs={} + for group in fh.groups(): + try: + df = group.as_dataframe(time_index=True) + df.insert(0,'Time_[s]', df.index.values) + df.index=np.arange(0,len(df)) + except KeyError: + df = group.as_dataframe(time_index=False) + if len(df)>0: + dfs[group.name] = df + if len(dfs)==1: + dfs=dfs[group.name] + return dfs + else: + # --- One dataframe with all data + try: + df = fh.as_dataframe(time_index=True) + cleanColumns(df) + df.insert(0,'Time_[s]', df.index.values) + df.index=np.arange(0,len(df)) + except KeyError: + df = fh.as_dataframe(time_index=False) + return df + +def writeTDMSFromDataFrame(filename, df, defaultGroupName='default'): + """ + Write a TDMS file from a pandas dataframe + + Example: + # --- Create a TDMS file - One group two channels with time track + time = np.linspace(0,1,20) + colA = np.random.normal(0,1,20) + colB = np.random.normal(0,1,20) + df = pd.DataFrame(data={'Time_[s]':time ,'ColA':colA,'ColB':colB}) + writeTDMSFromDataFrame('out12.tdms', df, defaultGroupName = 'myGroup') + + #--- Create a TDMS file - Two groups, two channels without time track but with timestamp + TS = np.arange('2010-02', '2010-02-21', dtype='datetime64[D]') + df = pd.DataFrame(data={'GroupA/ColTime':time,'GroupA/ColA':colA,'GroupB/ColTimestamp': TS,'GroupB/ColA':colB)}) + writeTDMSFromDataFrame('out22.tdms', df) + + """ + from nptdms import TdmsWriter, ChannelObject + + defaultGroupName = 'default' + + columns =df.columns + + # Check if first column is time + if columns[0].lower().find('time')==0: + t = df.iloc[:,0].values + n = len(t) + dt1 = (np.max(t)-np.min(t))/(n-1) + if n>1: + dt2 = t[1]-t[0] + timeProperties = {'wf_increment':dt1, 'wf_start_offset':t[0]} + columns = columns[1:] # We remove the time column + else: + timeProperties = {} + + with TdmsWriter(filename) as tdms_writer: + + channels=[] + for iCol, col in enumerate(columns): + sp = col.split('/') + if len(sp)==2: + groupName = sp[0] + channelName = sp[1] + else: + groupName = defaultGroupName + channelName = col + data_array = df[col].values + channels.append(ChannelObject(groupName, channelName, data_array, timeProperties)) + tdms_writer.write_segment(channels) + +if __name__ == '__main__': + pass +# f = TDMSFile('TDMS_.tdms') +# dfs = f.toDataFrame(split=True) +# print(f) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py new file mode 100644 index 0000000000..1c9aa2d020 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py @@ -0,0 +1,222 @@ +""" +Read/Write TecPto ascii files +sea read_tecplot documentation below + +Part of weio library: https://github.com/ebranlard/weio + +""" +import pandas as pd +import numpy as np +import os +import struct + +try: + from .file import File, EmptyFileError, WrongFormatError, BrokenFormatError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + File=dict + + + +Keywords=['title','variables','zone','text','geometry','datasetauxdata','customlabels','varauxdata'] +# --------------------------------------------------------------------------------} +# --- Helper functions +# --------------------------------------------------------------------------------{ +def is_number(s): + try: + float(s) + return True + except ValueError: + pass + + try: + import unicodedata + unicodedata.numeric(s) + return True + except (TypeError, ValueError): + pass + + return False + + +def _process_merged_line(line, section, dict_out): + n = len(section) + line = line[n:].strip() + if section=='title': + dict_out[section]=line + elif section=='variables': + line = line.replace('=','').strip() + line = line.replace(',',' ').strip() + line = line.replace(' ',' ').strip() + line = line.replace('[','_[').strip() + line = line.replace('(','_(').strip() + line = line.replace('__','_').strip() + if line.find('"')==0: + line = line.replace('" "',',') + line = line.replace('"','') + sp=line.split(',') + else: + sp=line.split() + dict_out[section]=sp + elif section=='datasetauxdata': + if section not in dict_out.keys(): + dict_out[section]={} # initialixe an empty directory + sp = line.split('=') + key = sp[0] + value = sp[1].replace('"','').strip() + if is_number(value): + value=float(value) + dict_out[section][key]=value + + elif section=='zone': + if section not in dict_out.keys(): + dict_out[section]={} # initialixe an empty directory + sp = line.split('=') + key = sp[0] + value = sp[1].replace('"','').strip() + if is_number(value): + value=float(value) + dict_out[section][key]=value + + else: + print('!!! Reading of section not implemented:') + print('Processing section {}:'.format(section),line) + dict_out[section]=line + +def read_tecplot(filename, dict_out={}): + """ Reads a tecplot file + Limited support: + - title optional + - variables mandatory + - Lines may be continued to next line, stopping when a predefined keyword is detected + For now, assumes that only one section of numerical data is present + """ + + merged_line='' + current_section='' + variables=[] + with open(filename, "r") as f: + dfs = [] # list of dataframes + iline=0 + while True: + line= f.readline().strip() + iline+=1 + if not line: + break + l=line.lower().strip() + # Comment + if l[0]=='#': + continue + new_section = [k for k in Keywords if l.find(k)==0 ] + + if len(new_section)==1: + # --- Start of a new section + # First, process the previous section + if len(merged_line)>0: + _process_merged_line(merged_line, current_section, dict_out) + # Then start the new section + current_section=new_section[0] + merged_line =line + elif len(current_section)==0: + raise WrongFormatError('No section detected') + else: + if current_section=='title' or current_section=='variables': + # OK + pass + else: + if 'variables' not in dict_out.keys(): + raise WrongFormatError('The `variables` section should be present') + sp = l.split() + if is_number(sp[0]): + if len(merged_line)>0: + _process_merged_line(merged_line, current_section, dict_out) + # --- Special case of numerical values outside of zone + f.close() + M = np.loadtxt(filename, skiprows = iline-1) + if M.shape[1]!=len(dict_out['variables']): + raise BrokenFormatError('Number of columns of data does not match number of variables') + dict_out['data']=M + break + else: + # --- Continuation of previous section + merged_line +=' '+line + return dict_out + + +class TecplotFile(File): + + @staticmethod + def defaultExtensions(): + return ['.dat'] + + @staticmethod + def formatName(): + return 'Tecplot ASCII file' + + def __init__(self,filename=None,**kwargs): + self.filename = None + if filename: + self.read(filename=filename,**kwargs) + + def read(self, filename=None): + """ read a tecplot ascii file + sea `read_tecplot` documentation above + """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + try: + read_tecplot(filename,self) + except BrokenFormatError: + raise + except WrongFormatError: + raise + except Exception as e: + raise WrongFormatError('Tecplot dat File {}: '.format(self.filename)+e.args[0]) + + def write(self, filename=None, precision=None): + """ Write tecplot ascii file """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + + with open(self.filename, mode='w') as f: + if 'title' in self.keys(): + f.write('TITLE = {}\n'.format(self['title'])) + f.write('VARIABLES = ' + ','.join(['"{}"'.format(col) for col in self['variables'] ]) + '\n') + for k in Keywords[2:]: + if k in self.keys(): + f.write('{} = {}\n'.format(k,self[k])) + # Data + if 'data' in self.keys(): + for row in self['data']: + srow = np.array2string(row, edgeitems=0, separator=' ', precision=precision) + f.write(srow[1:-1]+'\n') + + + def __repr__(self): + s='<{} object> with keys:\n'.format(type(self).__name__) + for k,v in self.items(): + s+=' - {}: {}\n'.format(k,v) + return s + + def toDataFrame(self): + return pd.DataFrame(data=self['data'],columns=self['variables']) + +if __name__=='__main__': + mb = MannBoxFile('mann_bin/mini-u.bin', N=(2,4,8)) + F1=mb['field'].ravel() + mb.write('mann_bin/mini-u-out.bin') + + mb2= MannBoxFile('mann_bin/mini-u-out.bin', N=(2,4,8)) + F2=mb2['field'].ravel() +# print(F1-F2) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat new file mode 100644 index 0000000000..999e7ce8a5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat @@ -0,0 +1,11 @@ + 0.0000E+0 1.0933E+2 1.5938E+1 2.2311E+1 2.2735E+3 + 4.0000E-2 1.1315E+2 1.5934E+1 2.2311E+1 2.2949E+3 + 8.0000E-2 1.1698E+2 1.6003E+1 2.2311E+1 2.3138E+3 + 1.2000E-1 1.2083E+2 1.6089E+1 2.2311E+1 2.3751E+3 + 1.6000E-1 1.2470E+2 1.6159E+1 2.2311E+1 2.3511E+3 + 2.0000E-1 1.2859E+2 1.6183E+1 2.2311E+1 2.3488E+3 + 2.4000E-1 1.3246E+2 1.6133E+1 2.2311E+1 2.3243E+3 + 2.8000E-1 1.3633E+2 1.6046E+1 2.2311E+1 2.3094E+3 + 3.2000E-1 1.4017E+2 1.5987E+1 2.2311E+1 2.2997E+3 + 3.6000E-1 1.4401E+2 1.5996E+1 2.2312E+1 2.2814E+3 + 4.0000E-1 1.4785E+2 1.6059E+1 2.2321E+1 2.2979E+3 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel new file mode 100644 index 0000000000..cead6ed1b4 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel @@ -0,0 +1,18 @@ + BHawC channel reference file (sel): ++=========================================================================================================================================+ + BHawC command file : NA.btc 2001.01.21 00:00:00 C:\Res\ + Channel reference file : NA.sel 2001.01.01 00:00:00 C:\simdatsel + Result file : NA.dat 2001.01.01 00:00:00 C:\simdatsel + ++=========================================================================================================================================+ + Scans Channels Time [sec] Coordinate convention: Siemens + 11 5 000.400 + +Channel Variable description Label Unit + + 1 Time t [s] + 2 Rotor azimuthal position ang_azi [deg] + 3 Frc Tower Elm..1 Nod..1 CoS Ft_x e.1n1 [kN] + 4 Trn Blade 1 Nod.14 CoB uB1_y n14 [m] + 5 RVel DrivetrG Nod..2 TvG av_brk_dsk. [rpm] ++=========================================================================================================================================+ diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat new file mode 100644 index 0000000000..4c71d8f474 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat @@ -0,0 +1,20 @@ + 0.00000000e+00 1.23885755e+01 0.00000000e+00 1.29639887e+03 1.39557399e+01 -3.29316416e+03 4.47157770e+02 1.27122773e+04 -6.59107884e+01 1.29647398e+03 1.27201394e+04 + 1.00000000e-02 1.23313940e+01 0.00000000e+00 5.48773444e+02 -4.61656524e+01 -3.50884069e+03 7.68303705e+02 7.41623944e+03 -7.40190240e+01 5.50711867e+02 7.45593039e+03 + 2.00000000e-02 1.22742125e+01 0.00000000e+00 -3.34110364e+02 -1.07460319e+02 -4.02048388e+03 1.02675476e+03 7.01185815e+02 -1.09052721e+02 3.50966459e+02 1.24333699e+03 + 3.00000000e-02 1.22170310e+01 0.00000000e+00 -1.31531477e+02 -6.88997364e+01 -4.67534069e+03 4.00864081e+02 2.73182417e+03 -1.44392390e+02 1.48484690e+02 2.76107865e+03 + 4.00000000e-02 1.21598495e+01 0.00000000e+00 6.87298816e+02 2.46828144e+01 -5.36254592e+03 -7.65472350e+02 1.02555504e+04 -1.67646198e+02 6.87741888e+02 1.02840781e+04 + 5.00000000e-02 1.21026681e+01 0.00000000e+00 8.76295272e+02 6.57931084e+01 -6.02247820e+03 -1.55458135e+03 1.30014546e+04 -1.67340226e+02 8.78761706e+02 1.30940652e+04 + 6.00000000e-02 1.20660420e+01 0.00000000e+00 2.62744917e+02 4.12000711e+01 -6.60132539e+03 -1.76409336e+03 8.88131878e+03 -1.45310303e+02 2.65955518e+02 9.05482461e+03 + 7.00000000e-02 1.20294160e+01 0.00000000e+00 -1.73822231e+02 3.31750817e+01 -7.03567481e+03 -2.00720136e+03 5.58009196e+03 -1.16854986e+02 1.76959753e+02 5.93011666e+03 + 8.00000000e-02 1.19927899e+01 0.00000000e+00 1.60696607e+02 8.73539186e+01 -7.27477184e+03 -2.67197874e+03 8.37333931e+03 -1.00944486e+02 1.82904638e+02 8.78932771e+03 + 9.00000000e-02 1.19561639e+01 0.00000000e+00 6.96893982e+02 1.51574150e+02 -7.30063835e+03 -3.36347419e+03 1.31127750e+04 -9.88026876e+01 7.13187174e+02 1.35372755e+04 + 1.00000000e-01 1.19195378e+01 0.00000000e+00 6.56275307e+02 1.60538775e+02 -7.11009452e+03 -3.53515764e+03 1.33661250e+04 -1.01403442e+02 6.75625619e+02 1.38257237e+04 + 1.10000000e-01 1.19152398e+01 0.00000000e+00 1.60053499e+02 1.27143645e+02 -6.70680937e+03 -3.25395654e+03 9.69766867e+03 -9.95676155e+01 2.04407996e+02 1.02290279e+04 + 1.20000000e-01 1.19107550e+01 0.00000000e+00 -6.92272148e+01 1.12510737e+02 -6.12643343e+03 -3.01481657e+03 7.89095074e+03 -8.99295241e+01 1.32102510e+02 8.44726124e+03 + 1.30000000e-01 1.19064571e+01 0.00000000e+00 2.06100002e+02 1.34543904e+02 -5.46056959e+03 -3.00476423e+03 1.02005300e+04 -7.87615769e+01 2.46128570e+02 1.06338807e+04 + 1.40000000e-01 1.19021591e+01 0.00000000e+00 4.86649252e+02 1.50939262e+02 -4.83512600e+03 -2.91799663e+03 1.27839319e+04 -7.58548509e+01 5.09519534e+02 1.31127274e+04 + 1.50000000e-01 1.18976743e+01 0.00000000e+00 3.42567430e+02 1.28916253e+02 -4.34996082e+03 -2.49341737e+03 1.19778184e+04 -8.80936971e+01 3.66021645e+02 1.22345929e+04 + 1.60000000e-01 1.19492498e+01 0.00000000e+00 3.82980612e+00 9.12699103e+01 -4.04341518e+03 -1.91540759e+03 9.40593235e+03 -1.16702000e+02 9.13502268e+01 9.59897648e+03 + 1.70000000e-01 1.20008252e+01 0.00000000e+00 -5.34839413e+01 7.82623166e+01 -3.91090284e+03 -1.53606387e+03 9.00415513e+03 -1.57855121e+02 9.47919943e+01 9.13423789e+03 + 1.80000000e-01 1.20522138e+01 0.00000000e+00 1.98254089e+02 9.08331070e+01 -3.94526921e+03 -1.40564794e+03 1.12932616e+04 -1.97937342e+02 2.18071863e+02 1.13804044e+04 + 1.90000000e-01 1.21037893e+01 0.00000000e+00 3.67339934e+02 9.67045550e+01 -4.15152862e+03 -1.28554888e+03 1.32407295e+04 -2.21344135e+02 3.79855759e+02 1.33029904e+04 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel new file mode 100644 index 0000000000..64014900ad --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel @@ -0,0 +1,21 @@ +BHawC channel reference file (sel): ++===================== (Name) =================== (Time stamp) ========= (Path) ==========================================================+ +Original BHAWC file : NA.dat 2001.01.01 00:00:00 C:\ +Channel reference file : NA.sel 2001.01.01 00:00:00 C:\ +Result file : NA.dat 2001.01.01 00:00:00 C:\ ++=========================================================================================================================================+ +Scans Channels Time [sec] Coordinate convention: Siemens +20 11 0.190 + +Channel Variable descriptions Labels Units +1 Time Time [s] +2 Horizontal wind speed V_hor [m/s] +3 Wave elevation Wave elevation [m] +4 Ff_x interface force Ff_x interface [kN] +5 Ff_y interface force Ff_y interface [kN] +6 Ff_z interface force Ff_z interface [kN] +7 Mf_x interface moment Mf_x interface [kNm] +8 Mf_y interface moment Mf_y interface [kNm] +9 Mf_z interface moment Mf_z interface [kNm] +10 Ff_xy interface force Ff_xy interface [kN] +11 Mf_xy interface moment Mf_xy interface [kNm] diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 new file mode 100644 index 0000000000..dce38fcf8c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 @@ -0,0 +1,200 @@ + 1.8998750e+002 0.0000000e+000 1.8180233e+006 9.1210831e+001 9.2043343e+001 -0.0000000e+000 1.9751873e+004 8.0003691e+000 1.8180233e+006 + 1.9003751e+002 0.0000000e+000 1.8181525e+006 9.1210831e+001 9.2047165e+001 -0.0000000e+000 1.9752469e+004 8.0003691e+000 1.8181525e+006 + 1.9008749e+002 0.0000000e+000 1.8182498e+006 9.1210831e+001 9.2049088e+001 -0.0000000e+000 1.9753117e+004 8.0003691e+000 1.8182498e+006 + 1.9013750e+002 0.0000000e+000 1.8183211e+006 9.1210831e+001 9.2049660e+001 -0.0000000e+000 1.9753770e+004 8.0003691e+000 1.8183211e+006 + 1.9018750e+002 0.0000000e+000 1.8183821e+006 9.1210831e+001 9.2049881e+001 -0.0000000e+000 1.9754379e+004 8.0003691e+000 1.8183821e+006 + 1.9023750e+002 0.0000000e+000 1.8184510e+006 9.1210831e+001 9.2050674e+001 -0.0000000e+000 1.9754953e+004 8.0003700e+000 1.8184510e+006 + 1.9028751e+002 0.0000000e+000 1.8185394e+006 9.1210831e+001 9.2052483e+001 -0.0000000e+000 1.9755527e+004 8.0003700e+000 1.8185394e+006 + 1.9033749e+002 0.0000000e+000 1.8186499e+006 9.1210831e+001 9.2055298e+001 -0.0000000e+000 1.9756127e+004 8.0003700e+000 1.8186499e+006 + 1.9038750e+002 0.0000000e+000 1.8187794e+006 9.1210831e+001 9.2058823e+001 -0.0000000e+000 1.9756783e+004 8.0003700e+000 1.8187794e+006 + 1.9043750e+002 0.0000000e+000 1.8189216e+006 9.1210831e+001 9.2062683e+001 -0.0000000e+000 1.9757510e+004 8.0003700e+000 1.8189216e+006 + 1.9048750e+002 0.0000000e+000 1.8190685e+006 9.1210831e+001 9.2066452e+001 -0.0000000e+000 1.9758303e+004 8.0003700e+000 1.8190685e+006 + 1.9053751e+002 0.0000000e+000 1.8192066e+006 9.1210831e+001 9.2069519e+001 -0.0000000e+000 1.9759150e+004 8.0003700e+000 1.8192066e+006 + 1.9058749e+002 0.0000000e+000 1.8193198e+006 9.1210831e+001 9.2071213e+001 -0.0000000e+000 1.9760016e+004 8.0003700e+000 1.8193198e+006 + 1.9063750e+002 0.0000000e+000 1.8193945e+006 9.1210831e+001 9.2071060e+001 -0.0000000e+000 1.9760854e+004 8.0003700e+000 1.8193945e+006 + 1.9068750e+002 0.0000000e+000 1.8194268e+006 9.1210831e+001 9.2069153e+001 -0.0000000e+000 1.9761602e+004 8.0003710e+000 1.8194268e+006 + 1.9073750e+002 0.0000000e+000 1.8194258e+006 9.1210831e+001 9.2066193e+001 -0.0000000e+000 1.9762213e+004 8.0003710e+000 1.8194258e+006 + 1.9078751e+002 0.0000000e+000 1.8194081e+006 9.1210831e+001 9.2063065e+001 -0.0000000e+000 1.9762676e+004 8.0003710e+000 1.8194081e+006 + 1.9083749e+002 0.0000000e+000 1.8193874e+006 9.1210831e+001 9.2060394e+001 -0.0000000e+000 1.9763010e+004 8.0003710e+000 1.8193874e+006 + 1.9088750e+002 0.0000000e+000 1.8193679e+006 9.1210831e+001 9.2058289e+001 -0.0000000e+000 1.9763238e+004 8.0003719e+000 1.8193679e+006 + 1.9093750e+002 0.0000000e+000 1.8193481e+006 9.1210831e+001 9.2056549e+001 -0.0000000e+000 1.9763391e+004 8.0003719e+000 1.8193481e+006 + 1.9098750e+002 0.0000000e+000 1.8193214e+006 9.1210831e+001 9.2054771e+001 -0.0000000e+000 1.9763475e+004 8.0003729e+000 1.8193214e+006 + 1.9103751e+002 0.0000000e+000 1.8192738e+006 9.1210831e+001 9.2052261e+001 -0.0000000e+000 1.9763488e+004 8.0003729e+000 1.8192738e+006 + 1.9108749e+002 0.0000000e+000 1.8191858e+006 9.1210831e+001 9.2048164e+001 -0.0000000e+000 1.9763398e+004 8.0003738e+000 1.8191858e+006 + 1.9113750e+002 0.0000000e+000 1.8190453e+006 9.1210831e+001 9.2042099e+001 -0.0000000e+000 1.9763154e+004 8.0003738e+000 1.8190453e+006 + 1.9118750e+002 0.0000000e+000 1.8188615e+006 9.1210831e+001 9.2034729e+001 -0.0000000e+000 1.9762719e+004 8.0003738e+000 1.8188615e+006 + 1.9123750e+002 0.0000000e+000 1.8186603e+006 9.1210831e+001 9.2027473e+001 -0.0000000e+000 1.9762066e+004 8.0003738e+000 1.8186603e+006 + 1.9128751e+002 0.0000000e+000 1.8184714e+006 9.1210831e+001 9.2021652e+001 -0.0000000e+000 1.9761248e+004 8.0003738e+000 1.8184714e+006 + 1.9133749e+002 0.0000000e+000 1.8183126e+006 9.1210831e+001 9.2017853e+001 -0.0000000e+000 1.9760330e+004 8.0003738e+000 1.8183126e+006 + 1.9138750e+002 0.0000000e+000 1.8181878e+006 9.1210831e+001 9.2015923e+001 -0.0000000e+000 1.9759385e+004 8.0003729e+000 1.8181878e+006 + 1.9143750e+002 0.0000000e+000 1.8180893e+006 9.1210831e+001 9.2015259e+001 -0.0000000e+000 1.9758461e+004 8.0003729e+000 1.8180893e+006 + 1.9148750e+002 0.0000000e+000 1.8180056e+006 9.1210831e+001 9.2015121e+001 -0.0000000e+000 1.9757590e+004 8.0003719e+000 1.8180056e+006 + 1.9153751e+002 0.0000000e+000 1.8179279e+006 9.1210831e+001 9.2014961e+001 -0.0000000e+000 1.9756787e+004 8.0003719e+000 1.8179279e+006 + 1.9158749e+002 0.0000000e+000 1.8178490e+006 9.1210831e+001 9.2014496e+001 -0.0000000e+000 1.9756033e+004 8.0003710e+000 1.8178490e+006 + 1.9163750e+002 0.0000000e+000 1.8177629e+006 9.1210831e+001 9.2013512e+001 -0.0000000e+000 1.9755313e+004 8.0003700e+000 1.8177629e+006 + 1.9168750e+002 0.0000000e+000 1.8176641e+006 9.1210831e+001 9.2011795e+001 -0.0000000e+000 1.9754607e+004 8.0003700e+000 1.8176641e+006 + 1.9173750e+002 0.0000000e+000 1.8175525e+006 9.1210831e+001 9.2009438e+001 -0.0000000e+000 1.9753896e+004 8.0003691e+000 1.8175525e+006 + 1.9178751e+002 0.0000000e+000 1.8174401e+006 9.1210831e+001 9.2007179e+001 -0.0000000e+000 1.9753160e+004 8.0003691e+000 1.8174401e+006 + 1.9183749e+002 0.0000000e+000 1.8173536e+006 9.1210831e+001 9.2006248e+001 -0.0000000e+000 1.9752420e+004 8.0003691e+000 1.8173536e+006 + 1.9188750e+002 0.0000000e+000 1.8173160e+006 9.1210831e+001 9.2007599e+001 -0.0000000e+000 1.9751729e+004 8.0003681e+000 1.8173160e+006 + 1.9193750e+002 0.0000000e+000 1.8173363e+006 9.1210831e+001 9.2011322e+001 -0.0000000e+000 1.9751166e+004 8.0003681e+000 1.8173363e+006 + 1.9198750e+002 0.0000000e+000 1.8174073e+006 9.1210831e+001 9.2016777e+001 -0.0000000e+000 1.9750789e+004 8.0003681e+000 1.8174073e+006 + 1.9203751e+002 0.0000000e+000 1.8175164e+006 9.1210831e+001 9.2023163e+001 -0.0000000e+000 1.9750629e+004 8.0003681e+000 1.8175164e+006 + 1.9208749e+002 0.0000000e+000 1.8176539e+006 9.1210831e+001 9.2029930e+001 -0.0000000e+000 1.9750695e+004 8.0003681e+000 1.8176539e+006 + 1.9213750e+002 0.0000000e+000 1.8178086e+006 9.1210831e+001 9.2036575e+001 -0.0000000e+000 1.9750977e+004 8.0003681e+000 1.8178086e+006 + 1.9218750e+002 0.0000000e+000 1.8179651e+006 9.1210831e+001 9.2042389e+001 -0.0000000e+000 1.9751447e+004 8.0003691e+000 1.8179651e+006 + 1.9223750e+002 0.0000000e+000 1.8181034e+006 9.1210831e+001 9.2046638e+001 -0.0000000e+000 1.9752051e+004 8.0003691e+000 1.8181034e+006 + 1.9228751e+002 0.0000000e+000 1.8182116e+006 9.1210831e+001 9.2049011e+001 -0.0000000e+000 1.9752723e+004 8.0003691e+000 1.8182116e+006 + 1.9233749e+002 0.0000000e+000 1.8182921e+006 9.1210831e+001 9.2049911e+001 -0.0000000e+000 1.9753402e+004 8.0003691e+000 1.8182921e+006 + 1.9238750e+002 0.0000000e+000 1.8183594e+006 9.1210831e+001 9.2050278e+001 -0.0000000e+000 1.9754051e+004 8.0003691e+000 1.8183594e+006 + 1.9243750e+002 0.0000000e+000 1.8184319e+006 9.1210831e+001 9.2051064e+001 -0.0000000e+000 1.9754666e+004 8.0003700e+000 1.8184319e+006 + 1.9248750e+002 0.0000000e+000 1.8185215e+006 9.1210831e+001 9.2052795e+001 -0.0000000e+000 1.9755268e+004 8.0003700e+000 1.8185215e+006 + 1.9253751e+002 0.0000000e+000 1.8186325e+006 9.1210831e+001 9.2055504e+001 -0.0000000e+000 1.9755896e+004 8.0003700e+000 1.8186325e+006 + 1.9258749e+002 0.0000000e+000 1.8187620e+006 9.1210831e+001 9.2058945e+001 -0.0000000e+000 1.9756570e+004 8.0003700e+000 1.8187620e+006 + 1.9263750e+002 0.0000000e+000 1.8189053e+006 9.1210831e+001 9.2062767e+001 -0.0000000e+000 1.9757314e+004 8.0003700e+000 1.8189053e+006 + 1.9268750e+002 0.0000000e+000 1.8190546e+006 9.1210831e+001 9.2066574e+001 -0.0000000e+000 1.9758127e+004 8.0003700e+000 1.8190546e+006 + 1.9273750e+002 0.0000000e+000 1.8191983e+006 9.1210831e+001 9.2069832e+001 -0.0000000e+000 1.9758994e+004 8.0003700e+000 1.8191983e+006 + 1.9278751e+002 0.0000000e+000 1.8193209e+006 9.1210831e+001 9.2071869e+001 -0.0000000e+000 1.9759891e+004 8.0003700e+000 1.8193209e+006 + 1.9283749e+002 0.0000000e+000 1.8194071e+006 9.1210831e+001 9.2072136e+001 -0.0000000e+000 1.9760766e+004 8.0003700e+000 1.8194071e+006 + 1.9288750e+002 0.0000000e+000 1.8194514e+006 9.1210831e+001 9.2070625e+001 -0.0000000e+000 1.9761559e+004 8.0003710e+000 1.8194514e+006 + 1.9293750e+002 0.0000000e+000 1.8194600e+006 9.1210831e+001 9.2067909e+001 -0.0000000e+000 1.9762221e+004 8.0003710e+000 1.8194600e+006 + 1.9298750e+002 0.0000000e+000 1.8194500e+006 9.1210831e+001 9.2064880e+001 -0.0000000e+000 1.9762748e+004 8.0003710e+000 1.8194500e+006 + 1.9303751e+002 0.0000000e+000 1.8194334e+006 9.1210831e+001 9.2062164e+001 -0.0000000e+000 1.9763135e+004 8.0003710e+000 1.8194334e+006 + 1.9308749e+002 0.0000000e+000 1.8194165e+006 9.1210831e+001 9.2059967e+001 -0.0000000e+000 1.9763412e+004 8.0003719e+000 1.8194165e+006 + 1.9313750e+002 0.0000000e+000 1.8193981e+006 9.1210831e+001 9.2058113e+001 -0.0000000e+000 1.9763600e+004 8.0003719e+000 1.8193981e+006 + 1.9318750e+002 0.0000000e+000 1.8193721e+006 9.1210831e+001 9.2056229e+001 -0.0000000e+000 1.9763717e+004 8.0003729e+000 1.8193721e+006 + 1.9323750e+002 0.0000000e+000 1.8193269e+006 9.1210831e+001 9.2053711e+001 -0.0000000e+000 1.9763756e+004 8.0003729e+000 1.8193269e+006 + 1.9328751e+002 0.0000000e+000 1.8192431e+006 9.1210831e+001 9.2049721e+001 -0.0000000e+000 1.9763691e+004 8.0003738e+000 1.8192431e+006 + 1.9333749e+002 0.0000000e+000 1.8191085e+006 9.1210831e+001 9.2043800e+001 -0.0000000e+000 1.9763480e+004 8.0003738e+000 1.8191085e+006 + 1.9338750e+002 0.0000000e+000 1.8189289e+006 9.1210831e+001 9.2036491e+001 -0.0000000e+000 1.9763076e+004 8.0003738e+000 1.8189289e+006 + 1.9343750e+002 0.0000000e+000 1.8187291e+006 9.1210831e+001 9.2029167e+001 -0.0000000e+000 1.9762455e+004 8.0003738e+000 1.8187291e+006 + 1.9348750e+002 0.0000000e+000 1.8185390e+006 9.1210831e+001 9.2023148e+001 -0.0000000e+000 1.9761664e+004 8.0003738e+000 1.8185390e+006 + 1.9353751e+002 0.0000000e+000 1.8183766e+006 9.1210831e+001 9.2019104e+001 -0.0000000e+000 1.9760756e+004 8.0003738e+000 1.8183766e+006 + 1.9358749e+002 0.0000000e+000 1.8182473e+006 9.1210831e+001 9.2016945e+001 -0.0000000e+000 1.9759813e+004 8.0003729e+000 1.8182473e+006 + 1.9363750e+002 0.0000000e+000 1.8181448e+006 9.1210831e+001 9.2016075e+001 -0.0000000e+000 1.9758889e+004 8.0003729e+000 1.8181448e+006 + 1.9368750e+002 0.0000000e+000 1.8180578e+006 9.1210831e+001 9.2015778e+001 -0.0000000e+000 1.9758014e+004 8.0003719e+000 1.8180578e+006 + 1.9373750e+002 0.0000000e+000 1.8179761e+006 9.1210831e+001 9.2015465e+001 -0.0000000e+000 1.9757199e+004 8.0003719e+000 1.8179761e+006 + 1.9378751e+002 0.0000000e+000 1.8178923e+006 9.1210831e+001 9.2014824e+001 -0.0000000e+000 1.9756432e+004 8.0003710e+000 1.8178923e+006 + 1.9383749e+002 0.0000000e+000 1.8178015e+006 9.1210831e+001 9.2013687e+001 -0.0000000e+000 1.9755691e+004 8.0003710e+000 1.8178015e+006 + 1.9388750e+002 0.0000000e+000 1.8176985e+006 9.1210831e+001 9.2011871e+001 -0.0000000e+000 1.9754961e+004 8.0003700e+000 1.8176985e+006 + 1.9393750e+002 0.0000000e+000 1.8175820e+006 9.1210831e+001 9.2009407e+001 -0.0000000e+000 1.9754225e+004 8.0003691e+000 1.8175820e+006 + 1.9398750e+002 0.0000000e+000 1.8174636e+006 9.1210831e+001 9.2006958e+001 -0.0000000e+000 1.9753459e+004 8.0003691e+000 1.8174636e+006 + 1.9403751e+002 0.0000000e+000 1.8173680e+006 9.1210831e+001 9.2005730e+001 -0.0000000e+000 1.9752684e+004 8.0003691e+000 1.8173680e+006 + 1.9408749e+002 0.0000000e+000 1.8173196e+006 9.1210831e+001 9.2006737e+001 -0.0000000e+000 1.9751947e+004 8.0003681e+000 1.8173196e+006 + 1.9413750e+002 0.0000000e+000 1.8173295e+006 9.1210831e+001 9.2010170e+001 -0.0000000e+000 1.9751336e+004 8.0003681e+000 1.8173295e+006 + 1.9418750e+002 0.0000000e+000 1.8173916e+006 9.1210831e+001 9.2015427e+001 -0.0000000e+000 1.9750902e+004 8.0003681e+000 1.8173916e+006 + 1.9423750e+002 0.0000000e+000 1.8174939e+006 9.1210831e+001 9.2021683e+001 -0.0000000e+000 1.9750695e+004 8.0003681e+000 1.8174939e+006 + 1.9428751e+002 0.0000000e+000 1.8176243e+006 9.1210831e+001 9.2028351e+001 -0.0000000e+000 1.9750707e+004 8.0003681e+000 1.8176243e+006 + 1.9433749e+002 0.0000000e+000 1.8177733e+006 9.1210831e+001 9.2034935e+001 -0.0000000e+000 1.9750936e+004 8.0003681e+000 1.8177733e+006 + 1.9438750e+002 0.0000000e+000 1.8179255e+006 9.1210831e+001 9.2040779e+001 -0.0000000e+000 1.9751355e+004 8.0003691e+000 1.8179255e+006 + 1.9443750e+002 0.0000000e+000 1.8180616e+006 9.1210831e+001 9.2045135e+001 -0.0000000e+000 1.9751914e+004 8.0003691e+000 1.8180616e+006 + 1.9448750e+002 0.0000000e+000 1.8181694e+006 9.1210831e+001 9.2047638e+001 -0.0000000e+000 1.9752555e+004 8.0003691e+000 1.8181694e+006 + 1.9453751e+002 0.0000000e+000 1.8182486e+006 9.1210831e+001 9.2048630e+001 -0.0000000e+000 1.9753203e+004 8.0003691e+000 1.8182486e+006 + 1.9458749e+002 0.0000000e+000 1.8183140e+006 9.1210831e+001 9.2049019e+001 -0.0000000e+000 1.9753826e+004 8.0003691e+000 1.8183140e+006 + 1.9463750e+002 0.0000000e+000 1.8183833e+006 9.1210831e+001 9.2049767e+001 -0.0000000e+000 1.9754416e+004 8.0003700e+000 1.8183833e+006 + 1.9468750e+002 0.0000000e+000 1.8184696e+006 9.1210831e+001 9.2051445e+001 -0.0000000e+000 1.9754992e+004 8.0003700e+000 1.8184696e+006 + 1.9473750e+002 0.0000000e+000 1.8185779e+006 9.1210831e+001 9.2054138e+001 -0.0000000e+000 1.9755594e+004 8.0003700e+000 1.8185779e+006 + 1.9478751e+002 0.0000000e+000 1.8187063e+006 9.1210831e+001 9.2057594e+001 -0.0000000e+000 1.9756252e+004 8.0003700e+000 1.8187063e+006 + 1.9483749e+002 0.0000000e+000 1.8188490e+006 9.1210831e+001 9.2061462e+001 -0.0000000e+000 1.9756982e+004 8.0003700e+000 1.8188490e+006 + 1.9488750e+002 0.0000000e+000 1.8189986e+006 9.1210831e+001 9.2065353e+001 -0.0000000e+000 1.9757779e+004 8.0003700e+000 1.8189986e+006 + 1.9493750e+002 0.0000000e+000 1.8191440e+006 9.1210831e+001 9.2068741e+001 -0.0000000e+000 1.9758637e+004 8.0003700e+000 1.8191440e+006 + 1.9498750e+002 0.0000000e+000 1.8192695e+006 9.1210831e+001 9.2070969e+001 -0.0000000e+000 1.9759525e+004 8.0003700e+000 1.8192695e+006 + 1.9503751e+002 0.0000000e+000 1.8193605e+006 9.1210831e+001 9.2071487e+001 -0.0000000e+000 1.9760398e+004 8.0003700e+000 1.8193605e+006 + 1.9508749e+002 0.0000000e+000 1.8194104e+006 9.1210831e+001 9.2070221e+001 -0.0000000e+000 1.9761205e+004 8.0003710e+000 1.8194104e+006 + 1.9513750e+002 0.0000000e+000 1.8194241e+006 9.1210831e+001 9.2067696e+001 -0.0000000e+000 1.9761879e+004 8.0003710e+000 1.8194241e+006 + 1.9518750e+002 0.0000000e+000 1.8194180e+006 9.1210831e+001 9.2064789e+001 -0.0000000e+000 1.9762420e+004 8.0003710e+000 1.8194180e+006 + 1.9523750e+002 0.0000000e+000 1.8194059e+006 9.1210831e+001 9.2062195e+001 -0.0000000e+000 1.9762834e+004 8.0003710e+000 1.8194059e+006 + 1.9528751e+002 0.0000000e+000 1.8193943e+006 9.1210831e+001 9.2060150e+001 -0.0000000e+000 1.9763135e+004 8.0003719e+000 1.8193943e+006 + 1.9533749e+002 0.0000000e+000 1.8193825e+006 9.1210831e+001 9.2058479e+001 -0.0000000e+000 1.9763357e+004 8.0003719e+000 1.8193825e+006 + 1.9538750e+002 0.0000000e+000 1.8193646e+006 9.1210831e+001 9.2056839e+001 -0.0000000e+000 1.9763506e+004 8.0003729e+000 1.8193646e+006 + 1.9543750e+002 0.0000000e+000 1.8193285e+006 9.1210831e+001 9.2054626e+001 -0.0000000e+000 1.9763580e+004 8.0003729e+000 1.8193285e+006 + 1.9548750e+002 0.0000000e+000 1.8192568e+006 9.1210831e+001 9.2051018e+001 -0.0000000e+000 1.9763566e+004 8.0003738e+000 1.8192568e+006 + 1.9553751e+002 0.0000000e+000 1.8191344e+006 9.1210831e+001 9.2045464e+001 -0.0000000e+000 1.9763410e+004 8.0003738e+000 1.8191344e+006 + 1.9558749e+002 0.0000000e+000 1.8189641e+006 9.1210831e+001 9.2038338e+001 -0.0000000e+000 1.9763068e+004 8.0003738e+000 1.8189641e+006 + 1.9563750e+002 0.0000000e+000 1.8187691e+006 9.1210831e+001 9.2030945e+001 -0.0000000e+000 1.9762516e+004 8.0003738e+000 1.8187691e+006 + 1.9568750e+002 0.0000000e+000 1.8185793e+006 9.1210831e+001 9.2024704e+001 -0.0000000e+000 1.9761771e+004 8.0003738e+000 1.8185793e+006 + 1.9573750e+002 0.0000000e+000 1.8184156e+006 9.1210831e+001 9.2020416e+001 -0.0000000e+000 1.9760904e+004 8.0003738e+000 1.8184156e+006 + 1.9578751e+002 0.0000000e+000 1.8182865e+006 9.1210831e+001 9.2018112e+001 -0.0000000e+000 1.9759992e+004 8.0003729e+000 1.8182865e+006 + 1.9583749e+002 0.0000000e+000 1.8181863e+006 9.1210831e+001 9.2017250e+001 -0.0000000e+000 1.9759092e+004 8.0003729e+000 1.8181863e+006 + 1.9588750e+002 0.0000000e+000 1.8181044e+006 9.1210831e+001 9.2017082e+001 -0.0000000e+000 1.9758244e+004 8.0003719e+000 1.8181044e+006 + 1.9593750e+002 0.0000000e+000 1.8180288e+006 9.1210831e+001 9.2016953e+001 -0.0000000e+000 1.9757455e+004 8.0003719e+000 1.8180288e+006 + 1.9598750e+002 0.0000000e+000 1.8179519e+006 9.1210831e+001 9.2016510e+001 -0.0000000e+000 1.9756721e+004 8.0003710e+000 1.8179519e+006 + 1.9603751e+002 0.0000000e+000 1.8178681e+006 9.1210831e+001 9.2015549e+001 -0.0000000e+000 1.9756020e+004 8.0003710e+000 1.8178681e+006 + 1.9608749e+002 0.0000000e+000 1.8177715e+006 9.1210831e+001 9.2013893e+001 -0.0000000e+000 1.9755326e+004 8.0003700e+000 1.8177715e+006 + 1.9613750e+002 0.0000000e+000 1.8176600e+006 9.1210831e+001 9.2011513e+001 -0.0000000e+000 1.9754621e+004 8.0003700e+000 1.8176600e+006 + 1.9618750e+002 0.0000000e+000 1.8175434e+006 9.1210831e+001 9.2008980e+001 -0.0000000e+000 1.9753896e+004 8.0003691e+000 1.8175434e+006 + 1.9623750e+002 0.0000000e+000 1.8174446e+006 9.1210831e+001 9.2007446e+001 -0.0000000e+000 1.9753150e+004 8.0003691e+000 1.8174446e+006 + 1.9628751e+002 0.0000000e+000 1.8173891e+006 9.1210831e+001 9.2008018e+001 -0.0000000e+000 1.9752430e+004 8.0003681e+000 1.8173891e+006 + 1.9633749e+002 0.0000000e+000 1.8173914e+006 9.1210831e+001 9.2011063e+001 -0.0000000e+000 1.9751814e+004 8.0003681e+000 1.8173914e+006 + 1.9638750e+002 0.0000000e+000 1.8174480e+006 9.1210831e+001 9.2016060e+001 -0.0000000e+000 1.9751379e+004 8.0003681e+000 1.8174480e+006 + 1.9643750e+002 0.0000000e+000 1.8175456e+006 9.1210831e+001 9.2022194e+001 -0.0000000e+000 1.9751146e+004 8.0003681e+000 1.8175456e+006 + 1.9648750e+002 0.0000000e+000 1.8176733e+006 9.1210831e+001 9.2028816e+001 -0.0000000e+000 1.9751137e+004 8.0003681e+000 1.8176733e+006 + 1.9653751e+002 0.0000000e+000 1.8178208e+006 9.1210831e+001 9.2035423e+001 -0.0000000e+000 1.9751346e+004 8.0003681e+000 1.8178208e+006 + 1.9658749e+002 0.0000000e+000 1.8179734e+006 9.1210831e+001 9.2041367e+001 -0.0000000e+000 1.9751748e+004 8.0003691e+000 1.8179734e+006 + 1.9663750e+002 0.0000000e+000 1.8181125e+006 9.1210831e+001 9.2045906e+001 -0.0000000e+000 1.9752301e+004 8.0003691e+000 1.8181125e+006 + 1.9668750e+002 0.0000000e+000 1.8182229e+006 9.1210831e+001 9.2048584e+001 -0.0000000e+000 1.9752934e+004 8.0003691e+000 1.8182229e+006 + 1.9673750e+002 0.0000000e+000 1.8183038e+006 9.1210831e+001 9.2049637e+001 -0.0000000e+000 1.9753586e+004 8.0003691e+000 1.8183038e+006 + 1.9678751e+002 0.0000000e+000 1.8183671e+006 9.1210831e+001 9.2049911e+001 -0.0000000e+000 1.9754211e+004 8.0003691e+000 1.8183671e+006 + 1.9683749e+002 0.0000000e+000 1.8184310e+006 9.1210831e+001 9.2050400e+001 -0.0000000e+000 1.9754795e+004 8.0003691e+000 1.8184310e+006 + 1.9688750e+002 0.0000000e+000 1.8185103e+006 9.1210831e+001 9.2051773e+001 -0.0000000e+000 1.9755361e+004 8.0003700e+000 1.8185103e+006 + 1.9693750e+002 0.0000000e+000 1.8186113e+006 9.1210831e+001 9.2054192e+001 -0.0000000e+000 1.9755943e+004 8.0003700e+000 1.8186113e+006 + 1.9698750e+002 0.0000000e+000 1.8187339e+006 9.1210831e+001 9.2057457e+001 -0.0000000e+000 1.9756580e+004 8.0003700e+000 1.8187339e+006 + 1.9703751e+002 0.0000000e+000 1.8188711e+006 9.1210831e+001 9.2061203e+001 -0.0000000e+000 1.9757275e+004 8.0003700e+000 1.8188711e+006 + 1.9708749e+002 0.0000000e+000 1.8190163e+006 9.1210831e+001 9.2065025e+001 -0.0000000e+000 1.9758037e+004 8.0003700e+000 1.8190163e+006 + 1.9713750e+002 0.0000000e+000 1.8191590e+006 9.1210831e+001 9.2068428e+001 -0.0000000e+000 1.9758865e+004 8.0003700e+000 1.8191590e+006 + 1.9718750e+002 0.0000000e+000 1.8192845e+006 9.1210831e+001 9.2070763e+001 -0.0000000e+000 1.9759730e+004 8.0003700e+000 1.8192845e+006 + 1.9723750e+002 0.0000000e+000 1.8193770e+006 9.1210831e+001 9.2071442e+001 -0.0000000e+000 1.9760586e+004 8.0003700e+000 1.8193770e+006 + 1.9728751e+002 0.0000000e+000 1.8194283e+006 9.1210831e+001 9.2070305e+001 -0.0000000e+000 1.9761379e+004 8.0003710e+000 1.8194283e+006 + 1.9733749e+002 0.0000000e+000 1.8194418e+006 9.1210831e+001 9.2067802e+001 -0.0000000e+000 1.9762047e+004 8.0003710e+000 1.8194418e+006 + 1.9738750e+002 0.0000000e+000 1.8194320e+006 9.1210831e+001 9.2064781e+001 -0.0000000e+000 1.9762574e+004 8.0003710e+000 1.8194320e+006 + 1.9743750e+002 0.0000000e+000 1.8194151e+006 9.1210831e+001 9.2061996e+001 -0.0000000e+000 1.9762975e+004 8.0003710e+000 1.8194151e+006 + 1.9748750e+002 0.0000000e+000 1.8193979e+006 9.1210831e+001 9.2059769e+001 -0.0000000e+000 1.9763252e+004 8.0003719e+000 1.8193979e+006 + 1.9753751e+002 0.0000000e+000 1.8193816e+006 9.1210831e+001 9.2058006e+001 -0.0000000e+000 1.9763445e+004 8.0003719e+000 1.8193816e+006 + 1.9758749e+002 0.0000000e+000 1.8193619e+006 9.1210831e+001 9.2056374e+001 -0.0000000e+000 1.9763574e+004 8.0003729e+000 1.8193619e+006 + 1.9763750e+002 0.0000000e+000 1.8193271e+006 9.1210831e+001 9.2054321e+001 -0.0000000e+000 1.9763629e+004 8.0003729e+000 1.8193271e+006 + 1.9768750e+002 0.0000000e+000 1.8192604e+006 9.1210831e+001 9.2051003e+001 -0.0000000e+000 1.9763607e+004 8.0003738e+000 1.8192604e+006 + 1.9773750e+002 0.0000000e+000 1.8191440e+006 9.1210831e+001 9.2045769e+001 -0.0000000e+000 1.9763449e+004 8.0003738e+000 1.8191440e+006 + 1.9778751e+002 0.0000000e+000 1.8189776e+006 9.1210831e+001 9.2038803e+001 -0.0000000e+000 1.9763117e+004 8.0003738e+000 1.8189776e+006 + 1.9783749e+002 0.0000000e+000 1.8187824e+006 9.1210831e+001 9.2031326e+001 -0.0000000e+000 1.9762578e+004 8.0003738e+000 1.8187824e+006 + 1.9788750e+002 0.0000000e+000 1.8185873e+006 9.1210831e+001 9.2024811e+001 -0.0000000e+000 1.9761838e+004 8.0003738e+000 1.8185873e+006 + 1.9793750e+002 0.0000000e+000 1.8184171e+006 9.1210831e+001 9.2020195e+001 -0.0000000e+000 1.9760967e+004 8.0003738e+000 1.8184171e+006 + 1.9798750e+002 0.0000000e+000 1.8182808e+006 9.1210831e+001 9.2017593e+001 -0.0000000e+000 1.9760039e+004 8.0003729e+000 1.8182808e+006 + 1.9803751e+002 0.0000000e+000 1.8181749e+006 9.1210831e+001 9.2016548e+001 -0.0000000e+000 1.9759115e+004 8.0003729e+000 1.8181749e+006 + 1.9808749e+002 0.0000000e+000 1.8180896e+006 9.1210831e+001 9.2016335e+001 -0.0000000e+000 1.9758240e+004 8.0003719e+000 1.8180896e+006 + 1.9813750e+002 0.0000000e+000 1.8180133e+006 9.1210831e+001 9.2016289e+001 -0.0000000e+000 1.9757428e+004 8.0003719e+000 1.8180133e+006 + 1.9818750e+002 0.0000000e+000 1.8179378e+006 9.1210831e+001 9.2016006e+001 -0.0000000e+000 1.9756674e+004 8.0003710e+000 1.8179378e+006 + 1.9823750e+002 0.0000000e+000 1.8178573e+006 9.1210831e+001 9.2015266e+001 -0.0000000e+000 1.9755961e+004 8.0003710e+000 1.8178573e+006 + 1.9828751e+002 0.0000000e+000 1.8177664e+006 9.1210831e+001 9.2013870e+001 -0.0000000e+000 1.9755275e+004 8.0003700e+000 1.8177664e+006 + 1.9833749e+002 0.0000000e+000 1.8176603e+006 9.1210831e+001 9.2011719e+001 -0.0000000e+000 1.9754584e+004 8.0003700e+000 1.8176603e+006 + 1.9838750e+002 0.0000000e+000 1.8175465e+006 9.1210831e+001 9.2009262e+001 -0.0000000e+000 1.9753871e+004 8.0003691e+000 1.8175465e+006 + 1.9843750e+002 0.0000000e+000 1.8174458e+006 9.1210831e+001 9.2007576e+001 -0.0000000e+000 1.9753139e+004 8.0003691e+000 1.8174458e+006 + 1.9848750e+002 0.0000000e+000 1.8173850e+006 9.1210831e+001 9.2007858e+001 -0.0000000e+000 1.9752420e+004 8.0003681e+000 1.8173850e+006 + 1.9853751e+002 0.0000000e+000 1.8173818e+006 9.1210831e+001 9.2010620e+001 -0.0000000e+000 1.9751805e+004 8.0003681e+000 1.8173818e+006 + 1.9858749e+002 0.0000000e+000 1.8174331e+006 9.1210831e+001 9.2015442e+001 -0.0000000e+000 1.9751346e+004 8.0003681e+000 1.8174331e+006 + 1.9863750e+002 0.0000000e+000 1.8175280e+006 9.1210831e+001 9.2021523e+001 -0.0000000e+000 1.9751098e+004 8.0003681e+000 1.8175280e+006 + 1.9868750e+002 0.0000000e+000 1.8176546e+006 9.1210831e+001 9.2028175e+001 -0.0000000e+000 1.9751070e+004 8.0003681e+000 1.8176546e+006 + 1.9873750e+002 0.0000000e+000 1.8178040e+006 9.1210831e+001 9.2034920e+001 -0.0000000e+000 1.9751271e+004 8.0003681e+000 1.8178040e+006 + 1.9878751e+002 0.0000000e+000 1.8179615e+006 9.1210831e+001 9.2041145e+001 -0.0000000e+000 1.9751666e+004 8.0003691e+000 1.8179615e+006 + 1.9883749e+002 0.0000000e+000 1.8181086e+006 9.1210831e+001 9.2046074e+001 -0.0000000e+000 1.9752223e+004 8.0003691e+000 1.8181086e+006 + 1.9888750e+002 0.0000000e+000 1.8182290e+006 9.1210831e+001 9.2049171e+001 -0.0000000e+000 1.9752875e+004 8.0003691e+000 1.8182290e+006 + 1.9893750e+002 0.0000000e+000 1.8183185e+006 9.1210831e+001 9.2050537e+001 -0.0000000e+000 1.9753557e+004 8.0003691e+000 1.8183185e+006 + 1.9898750e+002 0.0000000e+000 1.8183874e+006 9.1210831e+001 9.2050941e+001 -0.0000000e+000 1.9754215e+004 8.0003691e+000 1.8183874e+006 + 1.9903751e+002 0.0000000e+000 1.8184536e+006 9.1210831e+001 9.2051399e+001 -0.0000000e+000 1.9754832e+004 8.0003691e+000 1.8184536e+006 + 1.9908749e+002 0.0000000e+000 1.8185339e+006 9.1210831e+001 9.2052666e+001 -0.0000000e+000 1.9755430e+004 8.0003700e+000 1.8185339e+006 + 1.9913750e+002 0.0000000e+000 1.8186350e+006 9.1210831e+001 9.2054962e+001 -0.0000000e+000 1.9756037e+004 8.0003700e+000 1.8186350e+006 + 1.9918750e+002 0.0000000e+000 1.8187561e+006 9.1210831e+001 9.2058128e+001 -0.0000000e+000 1.9756678e+004 8.0003700e+000 1.8187561e+006 + 1.9923750e+002 0.0000000e+000 1.8188934e+006 9.1210831e+001 9.2061829e+001 -0.0000000e+000 1.9757383e+004 8.0003700e+000 1.8188934e+006 + 1.9928751e+002 0.0000000e+000 1.8190404e+006 9.1210831e+001 9.2065689e+001 -0.0000000e+000 1.9758158e+004 8.0003700e+000 1.8190404e+006 + 1.9933749e+002 0.0000000e+000 1.8191869e+006 9.1210831e+001 9.2069229e+001 -0.0000000e+000 1.9758998e+004 8.0003700e+000 1.8191869e+006 + 1.9938750e+002 0.0000000e+000 1.8193190e+006 9.1210831e+001 9.2071808e+001 -0.0000000e+000 1.9759881e+004 8.0003700e+000 1.8193190e+006 + 1.9943750e+002 0.0000000e+000 1.8194199e+006 9.1210831e+001 9.2072807e+001 -0.0000000e+000 1.9760760e+004 8.0003700e+000 1.8194199e+006 + 1.9948750e+002 0.0000000e+000 1.8194794e+006 9.1210831e+001 9.2071953e+001 -0.0000000e+000 1.9761582e+004 8.0003710e+000 1.8194794e+006 + 1.9953751e+002 0.0000000e+000 1.8194994e+006 9.1210831e+001 9.2069588e+001 -0.0000000e+000 1.9762295e+004 8.0003710e+000 1.8194994e+006 + 1.9958749e+002 0.0000000e+000 1.8194931e+006 9.1210831e+001 9.2066536e+001 -0.0000000e+000 1.9762865e+004 8.0003710e+000 1.8194931e+006 + 1.9963750e+002 0.0000000e+000 1.8194763e+006 9.1210831e+001 9.2063606e+001 -0.0000000e+000 1.9763295e+004 8.0003710e+000 1.8194763e+006 + 1.9968750e+002 0.0000000e+000 1.8194586e+006 9.1210831e+001 9.2061195e+001 -0.0000000e+000 1.9763609e+004 8.0003719e+000 1.8194586e+006 + 1.9973750e+002 0.0000000e+000 1.8194409e+006 9.1210831e+001 9.2059258e+001 -0.0000000e+000 1.9763822e+004 8.0003719e+000 1.8194409e+006 + 1.9978751e+002 0.0000000e+000 1.8194190e+006 9.1210831e+001 9.2057495e+001 -0.0000000e+000 1.9763953e+004 8.0003729e+000 1.8194190e+006 + 1.9983749e+002 0.0000000e+000 1.8193841e+006 9.1210831e+001 9.2055389e+001 -0.0000000e+000 1.9764021e+004 8.0003729e+000 1.8193841e+006 + 1.9988750e+002 0.0000000e+000 1.8193200e+006 9.1210831e+001 9.2052170e+001 -0.0000000e+000 1.9764006e+004 8.0003738e+000 1.8193200e+006 + 1.9993750e+002 0.0000000e+000 1.8192086e+006 9.1210831e+001 9.2047127e+001 -0.0000000e+000 1.9763861e+004 8.0003738e+000 1.8192086e+006 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 new file mode 100644 index 0000000000..7a3191e9c2 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 @@ -0,0 +1,800 @@ + -2.7539790e+006 5.2066395e+006 5.8901185e+006 1.1140432e+005 1.4636380e+005 1.4788936e+005 2.0807119e+005 4.1174444e+005 + -8.1026569e+005 2.4957093e+006 2.6239465e+006 9.0228570e+004 1.2245208e+005 6.2065863e+004 1.3728322e+005 2.8640097e+005 + -1.0471470e+005 6.4621475e+005 6.5464394e+005 4.1605594e+004 7.0481867e+004 1.7147863e+004 7.2537875e+004 1.1219445e+005 + 1.4410109e-008 5.8071645e-009 1.5536228e-008 -2.1895366e-007 -1.1670807e-009 7.9273569e-008 7.9282160e-008 -1.1795009e-011 + -2.8093123e+006 5.2177755e+006 5.9259950e+006 1.1278297e+005 1.4636638e+005 1.5078955e+005 2.1014425e+005 4.0421269e+005 + -8.2650669e+005 2.5040133e+006 2.6368913e+006 9.1369406e+004 1.2264096e+005 6.3267480e+004 1.3799847e+005 2.8303166e+005 + -1.0693295e+005 6.4920363e+005 6.5795138e+005 4.2152008e+004 7.0692891e+004 1.7445785e+004 7.2813734e+004 1.1116528e+005 + 7.0191528e-009 2.2906042e-009 7.3834525e-009 -3.2959292e-008 3.3155203e-009 1.2058507e-008 1.2506010e-008 -4.0785153e-012 + -2.8558188e+006 5.2286205e+006 5.9576985e+006 1.1406438e+005 1.4639395e+005 1.5328159e+005 2.1195856e+005 3.9656497e+005 + -8.3970044e+005 2.5117085e+006 2.6483535e+006 9.2433344e+004 1.2283001e+005 6.4268613e+004 1.3862780e+005 2.7960753e+005 + -1.0861304e+005 6.5185394e+005 6.6084069e+005 4.2667785e+004 7.0877250e+004 1.7675734e+004 7.3048039e+004 1.1011945e+005 + 1.2991153e-008 -1.6906245e-009 1.3100697e-008 -1.4731847e-007 4.6262443e-009 5.3238381e-008 5.3439006e-008 -2.8137492e-012 + -2.8938458e+006 5.2395495e+006 5.9855845e+006 1.1525708e+005 1.4643584e+005 1.5535908e+005 2.1349450e+005 3.8879013e+005 + -8.5020538e+005 2.5192230e+006 2.6588218e+006 9.3427594e+004 1.2302762e+005 6.5076570e+004 1.3917886e+005 2.7612269e+005 + -1.0988827e+005 6.5431469e+005 6.6347806e+005 4.3153207e+004 7.1050602e+004 1.7849842e+004 7.3258484e+004 1.0905501e+005 + -4.1570338e-009 2.6137075e-009 4.9104374e-009 8.8208566e-008 -5.2987730e-009 -3.1906893e-008 3.2343884e-008 -4.5332627e-012 + -2.9240260e+006 5.2508150e+006 6.0100735e+006 1.1636721e+005 1.4647689e+005 1.5704284e+005 2.1475086e+005 3.8088288e+005 + -8.5830431e+005 2.5269430e+006 2.6687315e+006 9.4356984e+004 1.2323811e+005 6.5706117e+004 1.3966003e+005 2.7257444e+005 + -1.1082500e+005 6.5674356e+005 6.6602875e+005 4.3606418e+004 7.1228086e+004 1.7975273e+004 7.3461219e+004 1.0797120e+005 + -7.4486495e-010 -1.9892736e-009 2.1241549e-009 3.0640723e-007 5.8601486e-008 -1.0657224e-007 1.2162145e-007 -1.9028334e-011 + -2.9470618e+006 5.2625840e+006 6.0315805e+006 1.1740167e+005 1.4651330e+005 1.5836606e+005 2.1574513e+005 3.7286266e+005 + -8.6417031e+005 2.5350985e+006 2.6783418e+006 9.5225688e+004 1.2346061e+005 6.6175016e+004 1.4007731e+005 2.6897084e+005 + -1.1142255e+005 6.5929244e+005 6.6864150e+005 4.4024883e+004 7.1419906e+004 1.8054166e+004 7.3666516e+004 1.0686985e+005 + 4.2688115e-009 -4.2554547e-009 6.0275736e-009 2.8723694e-008 9.1385886e-009 -9.7633190e-009 1.3372966e-008 9.9618092e-012 + -2.9635573e+006 5.2750625e+006 6.0505335e+006 1.1836488e+005 1.4655689e+005 1.5935298e+005 2.1650011e+005 3.6476888e+005 + -8.6797163e+005 2.5437955e+006 2.6878003e+006 9.6036516e+004 1.2369341e+005 6.6499508e+004 1.4043592e+005 2.6532875e+005 + -1.1168195e+005 6.6208531e+005 6.7143863e+005 4.4408836e+004 7.1631375e+004 1.8088959e+004 7.3880070e+004 1.0575482e+005 + 4.6302406e-009 -1.0771313e-009 4.7538764e-009 1.8116037e-007 -2.0623773e-008 -6.5384590e-008 6.8560084e-008 1.8843593e-011 + -2.9739258e+006 5.2886295e+006 6.0674410e+006 1.1926285e+005 1.4662719e+005 1.6000659e+005 2.1702913e+005 3.5663606e+005 + -8.6996800e+005 2.5531498e+006 2.6972983e+006 9.6794188e+004 1.2394257e+005 6.6690648e+004 1.4074588e+005 2.6166375e+005 + -1.1166615e+005 6.6518813e+005 6.7449581e+005 4.4763051e+004 7.1865695e+004 1.8087020e+004 7.4106805e+004 1.0462979e+005 + 1.1662071e-008 4.6299364e-009 1.2547519e-008 2.7310829e-008 -3.5194702e-008 -1.1469176e-008 3.7016335e-008 -8.9244168e-012 + -2.9783815e+006 5.3038325e+006 6.0828770e+006 1.2011208e+005 1.4674016e+005 1.6031534e+005 2.1733311e+005 3.4847856e+005 + -8.7045550e+005 2.5633695e+006 2.7071305e+006 9.7515688e+004 1.2422506e+005 6.6753063e+004 1.4102425e+005 2.5798398e+005 + -1.1148892e+005 6.6859869e+005 6.7783038e+005 4.5099164e+004 7.2126727e+004 1.8059006e+004 7.4353156e+004 1.0349752e+005 + 1.7537638e-009 -2.2744056e-009 2.8720391e-009 -5.9026526e-009 1.2015235e-008 2.6924454e-009 1.2313210e-008 -2.5437430e-012 + -2.9769070e+006 5.3211630e+006 6.0972740e+006 1.2092414e+005 1.4690172e+005 1.6026639e+005 2.1740614e+005 3.4029616e+005 + -8.6958713e+005 2.5746863e+006 2.7175708e+006 9.8213914e+004 1.2456055e+005 6.6685117e+004 1.4128777e+005 2.5429241e+005 + -1.1122984e+005 6.7226050e+005 6.8140025e+005 4.5426742e+004 7.2417828e+004 1.8011617e+004 7.4624125e+004 1.0236066e+005 + -2.9010327e-009 1.1441410e-008 1.1803468e-008 1.9757147e-007 -5.9924602e-008 -7.2211940e-008 9.3837748e-008 -1.6711965e-011 + -2.9692958e+006 5.3408760e+006 6.1107835e+006 1.2168980e+005 1.4711727e+005 1.5986119e+005 2.1725352e+005 3.3210234e+005 + -8.6721069e+005 2.5871728e+006 2.7286475e+006 9.8881406e+004 1.2496066e+005 6.6481297e+004 1.4154480e+005 2.5059811e+005 + -1.1084802e+005 6.7610613e+005 6.8513269e+005 4.5744566e+004 7.2738742e+004 1.7940699e+004 7.4918578e+004 1.0122395e+005 + 9.9090780e-009 -4.0759787e-009 1.0714636e-008 -2.8072881e-007 3.9073313e-009 9.7989378e-008 9.8067247e-008 6.0680350e-012 + -2.9550958e+006 5.3628545e+006 6.1231365e+006 1.2239624e+005 1.4739367e+005 1.5910523e+005 2.1688563e+005 3.2393200e+005 + -8.6291288e+005 2.6006683e+006 2.7400900e+006 9.9506375e+004 1.2542221e+005 6.6131602e+004 1.4178900e+005 2.4691841e+005 + -1.1020171e+005 6.8009019e+005 6.8896088e+005 4.6046055e+004 7.3084594e+004 1.7832840e+004 7.5228773e+004 1.0009359e+005 + 2.3677145e-009 3.3562300e-009 4.1073536e-009 -9.6511990e-008 -5.9000996e-008 3.0594123e-008 6.6461403e-008 -1.2931878e-012 + -2.9335890e+006 5.3866775e+006 6.1336965e+006 1.2302894e+005 1.4773430e+005 1.5798964e+005 2.1630106e+005 3.1582747e+005 + -8.5621244e+005 2.6148690e+006 2.7514795e+006 1.0007623e+005 1.2593021e+005 6.5620344e+004 1.4200158e+005 2.4327253e+005 + -1.0913813e+005 6.8419488e+005 6.9284469e+005 4.6325492e+004 7.3447922e+004 1.7673447e+004 7.5544344e+004 9.8975125e+004 + 4.0071972e-009 5.5601852e-009 6.8537065e-009 -1.3760601e-007 -7.4668378e-009 4.7040309e-008 4.7629239e-008 5.6843419e-013 + -2.9039308e+006 5.4118430e+006 6.1417310e+006 1.2357833e+005 1.4813409e+005 1.5648875e+005 2.1548188e+005 3.0781972e+005 + -8.4672138e+005 2.6294975e+006 2.7624618e+006 1.0058367e+005 1.2646817e+005 6.4928234e+004 1.4216144e+005 2.3967392e+005 + -1.0756305e+005 6.8840919e+005 6.9676181e+005 4.6579895e+004 7.3821992e+004 1.7452750e+004 7.5857008e+004 9.7871945e+004 + 4.8876085e-009 -1.8841284e-009 5.2381921e-009 2.6748818e-008 -8.7486995e-009 -9.5431147e-009 1.2946458e-008 6.4233063e-012 + -2.8652578e+006 5.4378820e+006 6.1465650e+006 1.2403780e+005 1.4857295e+005 1.5456675e+005 2.1439405e+005 2.9991350e+005 + -8.3417369e+005 2.6444120e+006 2.7728615e+006 1.0102379e+005 1.2702523e+005 6.4034223e+004 1.4225256e+005 2.3612438e+005 + -1.0544619e+005 6.9271156e+005 7.0069125e+005 4.6808801e+004 7.4203641e+004 1.7166246e+004 7.6163375e+004 9.6784383e+004 + 9.0584820e-009 4.0002250e-009 9.9024193e-009 5.5520459e-008 -1.8849263e-008 -1.9676847e-008 2.7248360e-008 2.3305802e-012 + -2.8169153e+006 5.4643680e+006 6.1477090e+006 1.2440137e+005 1.4902350e+005 1.5220289e+005 2.1301109e+005 2.9210222e+005 + -8.1831531e+005 2.6595525e+006 2.7825995e+006 1.0139077e+005 1.2759399e+005 6.2921832e+004 1.4226519e+005 2.3262055e+005 + -1.0274879e+005 6.9706600e+005 7.0459800e+005 4.7009910e+004 7.4592586e+004 1.6808455e+004 7.6462922e+004 9.5711680e+004 + 6.0927210e-009 9.6316857e-009 1.1396957e-008 -9.8884854e-008 -1.5040570e-008 3.2825817e-008 3.6107519e-008 -1.3514523e-011 + -2.7585800e+006 5.4908840e+006 6.1448815e+006 1.2465581e+005 1.4946489e+005 1.4940284e+005 2.1133141e+005 2.8438938e+005 + -7.9885250e+005 2.6748090e+006 2.7915530e+006 1.0167033e+005 1.2816579e+005 6.1583348e+004 1.4219345e+005 2.2916259e+005 + -9.9375195e+004 7.0143850e+005 7.0844294e+005 4.7176629e+004 7.4986828e+004 1.6370068e+004 7.6752875e+004 9.4653648e+004 + 8.4780383e-010 7.6529396e-009 7.6997573e-009 1.1463929e-007 -1.6250851e-008 -3.9067217e-008 4.2312379e-008 -7.9012352e-012 + -2.6902010e+006 5.5169820e+006 6.1379370e+006 1.2472601e+005 1.4988717e+005 1.4618327e+005 2.0936980e+005 2.7679784e+005 + -7.7556644e+005 2.6899680e+006 2.7995413e+006 1.0178959e+005 1.2872822e+005 6.0017891e+004 1.4203205e+005 2.2576005e+005 + -9.5235875e+004 7.0579994e+005 7.1219619e+005 4.7266625e+004 7.5381320e+004 1.5842762e+004 7.7028156e+004 9.3613875e+004 + -1.8381495e-009 1.0278107e-009 2.1059887e-009 3.2357352e-008 -3.3155061e-009 -1.0895896e-008 1.1389167e-008 5.0732751e-012 + -2.6120070e+006 5.5423220e+006 6.1269825e+006 1.2461052e+005 1.5029436e+005 1.4255505e+005 2.0714809e+005 2.6935209e+005 + -7.4850463e+005 2.7047413e+006 2.8064008e+006 1.0174961e+005 1.2927111e+005 5.8232234e+004 1.4178156e+005 2.2241875e+005 + -9.0313492e+004 7.1010081e+005 7.1582100e+005 4.7285211e+004 7.5763219e+004 1.5227601e+004 7.7278359e+004 9.2590922e+004 + 2.1068329e-009 4.3254884e-009 4.8112985e-009 -1.5030125e-007 8.0390379e-009 5.0032227e-008 5.0673957e-008 -3.2684966e-012 + -2.5243200e+006 5.5665165e+006 6.1121435e+006 1.2445129e+005 1.5068388e+005 1.3851072e+005 2.0467255e+005 2.6207038e+005 + -7.1800856e+005 2.7189013e+006 2.8121095e+006 1.0168798e+005 1.2978097e+005 5.6234211e+004 1.4144039e+005 2.1914053e+005 + -8.4725258e+004 7.1433581e+005 7.1934275e+005 4.7308543e+004 7.6129898e+004 1.4535749e+004 7.7505156e+004 9.1580242e+004 + 4.4021964e-010 5.6313487e-009 5.6485292e-009 1.6666181e-008 1.3183595e-008 -5.1760480e-009 1.4163285e-008 1.4352963e-012 + -2.4275670e+006 5.5893015e+006 6.0937160e+006 1.2420225e+005 1.5103756e+005 1.3404203e+005 2.0193963e+005 2.5495006e+005 + -6.8450988e+005 2.7324080e+006 2.8168435e+006 1.0155891e+005 1.3025482e+005 5.4032773e+004 1.4101723e+005 2.1592603e+005 + -7.8629539e+004 7.1847344e+005 7.2276319e+005 4.7314051e+004 7.6482289e+004 1.3781252e+004 7.7713984e+004 9.0584344e+004 + 7.9764095e-010 -6.7178947e-009 6.7650827e-009 4.0058374e-008 -6.9047559e-009 -1.3234427e-008 1.4927348e-008 -5.3859139e-012 + -2.3227158e+006 5.6105550e+006 6.0723420e+006 1.2379109e+005 1.5134133e+005 1.2919271e+005 1.9898481e+005 2.4798805e+005 + -6.4830063e+005 2.7452690e+006 2.8207793e+006 1.0128980e+005 1.3069459e+005 5.1650328e+004 1.4053055e+005 2.1277631e+005 + -7.2075273e+004 7.2244119e+005 7.2602763e+005 4.7261078e+004 7.6820281e+004 1.2969188e+004 7.7907352e+004 8.9606797e+004 + 8.6659036e-010 -1.8653976e-009 2.0568633e-009 9.1977057e-009 -2.7646720e-008 -3.3668428e-009 2.7850975e-008 -6.4517280e-012 + -2.2112778e+006 5.6302480e+006 6.0489210e+006 1.2327739e+005 1.5160350e+005 1.2404818e+005 1.9588664e+005 2.4120495e+005 + -6.0964663e+005 2.7573728e+006 2.8239640e+006 1.0093693e+005 1.3109911e+005 4.9123996e+004 1.4000052e+005 2.0969733e+005 + -6.5022023e+004 7.2619694e+005 7.2910206e+005 4.7176410e+004 7.7137086e+004 1.2101045e+004 7.8080508e+004 8.8646688e+004 + 1.2228465e-009 9.9183808e-009 9.9934789e-009 1.2457473e-008 -4.5347008e-008 -4.4008743e-009 4.5560057e-008 -7.6880724e-012 + -2.0944876e+006 5.6483590e+006 6.0241875e+006 1.2271556e+005 1.5183348e+005 1.1864909e+005 1.9269408e+005 2.3463058e+005 + -5.6908606e+005 2.7686203e+006 2.8265028e+006 1.0055424e+005 1.3146622e+005 4.6483082e+004 1.3944191e+005 2.0670106e+005 + -5.7586254e+004 7.2972938e+005 7.3199806e+005 4.7088641e+004 7.7431359e+004 1.1189806e+004 7.8235711e+004 8.7705555e+004 + 2.8429903e-010 6.8638943e-009 6.8697794e-009 -1.9542050e-008 -5.3267840e-008 6.1428267e-009 5.3620862e-008 -3.0127012e-012 + -1.9732024e+006 5.6648230e+006 5.9986455e+006 1.2209016e+005 1.5202734e+005 1.1298541e+005 1.8941492e+005 2.2827852e+005 + -5.2740025e+005 2.7790053e+006 2.8286078e+006 1.0012799e+005 1.3179489e+005 4.3746938e+004 1.3886572e+005 2.0379578e+005 + -5.0039703e+004 7.3302994e+005 7.3473588e+005 4.6994453e+004 7.7701797e+004 1.0261202e+004 7.8376406e+004 8.6787406e+004 + 2.1377278e-010 1.1228979e-008 1.1231013e-008 4.4440931e-009 -6.1776191e-008 -1.2453540e-009 6.1788739e-008 1.3727686e-011 + -1.8481578e+006 5.6795805e+006 5.9727150e+006 1.2155384e+005 1.5217530e+005 1.0705466e+005 1.8605919e+005 2.2214952e+005 + -4.8521088e+005 2.7885890e+006 2.8304873e+006 9.9804898e+004 1.3208380e+005 4.0932020e+004 1.3828073e+005 2.0098258e+005 + -4.2589219e+004 7.3613144e+005 7.3736244e+005 4.6976383e+004 7.7955734e+004 9.3346650e+003 7.8512625e+004 8.5891391e+004 + -2.6785829e-009 8.5059586e-009 8.9177430e-009 2.3864178e-008 -1.5282126e-008 -7.4678894e-009 1.7009196e-008 1.1084467e-012 + -1.7200655e+006 5.6927635e+006 5.9469475e+006 1.2094874e+005 1.5228080e+005 1.0089475e+005 1.8267236e+005 2.1626802e+005 + -4.4268716e+005 2.7974233e+006 2.8322340e+006 9.9432695e+004 1.3233759e+005 3.8054250e+004 1.3770027e+005 1.9828205e+005 + -3.5252578e+004 7.3903194e+005 7.3987225e+005 4.6940188e+004 7.8190445e+004 8.4133350e+003 7.8641781e+004 8.5031953e+004 + -3.2971790e-009 1.0294796e-009 3.4541594e-009 1.5102319e-008 6.8306434e-008 -5.7441483e-009 6.8547529e-008 7.4749096e-012 + -1.5894776e+006 5.7045780e+006 5.9218790e+006 1.2026538e+005 1.5236184e+005 9.4561031e+004 1.7932072e+005 2.1067219e+005 + -3.9970941e+005 2.8054840e+006 2.8338153e+006 9.9005133e+004 1.3256045e+005 3.5126305e+004 1.3713545e+005 1.9571348e+005 + -2.7918963e+004 7.4174088e+005 7.4226613e+005 4.6880547e+004 7.8405141e+004 7.4889946e+003 7.8761992e+004 8.4215664e+004 + -2.7379750e-009 -4.2857229e-009 5.0856590e-009 -1.3306052e-007 1.9913628e-008 4.1606484e-008 4.6126480e-008 8.9954710e-012 + -1.4566204e+006 5.7153280e+006 5.8980265e+006 1.1948437e+005 1.5244255e+005 8.8085258e+004 1.7606175e+005 2.0540466e+005 + -3.5613391e+005 2.8127783e+006 2.8352343e+006 9.8505531e+004 1.3275650e+005 3.2154877e+004 1.3659513e+005 1.9329720e+005 + -2.0496738e+004 7.4425113e+005 7.4453331e+005 4.6794137e+004 7.8599148e+004 6.5544419e+003 7.8871969e+004 8.3448203e+004 + -6.4086256e-009 2.9363330e-009 7.0492931e-009 1.3818320e-007 3.1175787e-008 -4.4226169e-008 5.4109922e-008 -1.7905677e-012 + -1.3212195e+006 5.7256025e+006 5.8760655e+006 1.1862022e+005 1.5254853e+005 8.1450375e+004 1.7293125e+005 2.0048844e+005 + -3.1195231e+005 2.8194435e+006 2.8366488e+006 9.7947961e+004 1.3294472e+005 2.9131635e+004 1.3609905e+005 1.9104459e+005 + -1.3012050e+004 7.4654888e+005 7.4666231e+005 4.6683848e+004 7.8773313e+004 5.6114873e+003 7.8972930e+004 8.2733133e+004 + 4.7522128e-009 1.1027534e-009 4.8784825e-009 -2.3382609e-007 2.7667753e-008 7.2380971e-008 7.7488771e-008 -1.2178702e-011 + -1.1827593e+006 5.7358945e+006 5.8565695e+006 1.1772162e+005 1.5268589e+005 7.4615602e+004 1.6994255e+005 1.9592145e+005 + -2.6718813e+005 2.8257658e+006 2.8383695e+006 9.7374344e+004 1.3313945e+005 2.6044924e+004 1.3566302e+005 1.8895519e+005 + -5.5363257e+003 7.4862369e+005 7.4864413e+005 4.6583449e+004 7.8936461e+004 4.6641563e+003 7.9074141e+004 8.2069586e+004 + -6.7634218e-009 3.7471004e-009 7.7320523e-009 -1.3231187e-007 -1.1631143e-007 4.5549257e-008 1.2491230e-007 9.8054898e-013 + -1.0405062e+006 5.7467260e+006 5.8401635e+006 1.1680978e+005 1.5285766e+005 6.7546328e+004 1.6711664e+005 1.9169675e+005 + -2.2168498e+005 2.8320295e+006 2.8406928e+006 9.6800016e+004 1.3336161e+005 2.2874111e+004 1.3530908e+005 1.8702913e+005 + 1.9165251e+003 7.5048619e+005 7.5048863e+005 4.6490461e+004 7.9095078e+004 3.7115530e+003 7.9182117e+004 8.1460258e+004 + -1.8672162e-008 5.0911595e-009 1.9353799e-008 4.1832752e-007 3.7069896e-008 -1.3169060e-007 1.3680859e-007 6.7785777e-012 + -8.9388494e+005 5.7582595e+006 5.8272275e+006 1.1576860e+005 1.5305959e+005 6.0249801e+004 1.6449097e+005 1.8782111e+005 + -1.7496597e+005 2.8384015e+006 2.8437890e+006 9.6113539e+004 1.3361492e+005 1.9605127e+004 1.3504558e+005 1.8527303e+005 + 9.4911699e+003 7.5217150e+005 7.5223138e+005 4.6346273e+004 7.9252547e+004 2.7392585e+003 7.9299867e+004 8.0910820e+004 + -2.4646134e-008 5.7123186e-009 2.5299457e-008 2.4472433e-007 -6.2410138e-008 -7.2866364e-008 9.5940258e-008 1.8474111e-013 + -7.4266856e+005 5.7701940e+006 5.8177915e+006 1.1456694e+005 1.5327989e+005 5.2773152e+004 1.6211025e+005 1.8430931e+005 + -1.2639058e+005 2.8448695e+006 2.8476758e+006 9.5285758e+004 1.3388314e+005 1.6234767e+004 1.3486388e+005 1.8369106e+005 + 1.7446309e+004 7.5375463e+005 7.5395650e+005 4.6140633e+004 7.9412016e+004 1.7238691e+003 7.9430727e+004 8.0420750e+004 + -1.1306346e-008 7.8836937e-010 1.1333798e-008 1.8136184e-007 -3.9344314e-008 -5.3912053e-008 6.6741926e-008 3.3679726e-012 + -5.8664231e+005 5.7822905e+006 5.8119730e+006 1.1322705e+005 1.5351870e+005 4.5145621e+004 1.6001913e+005 1.8117734e+005 + -7.5557055e+004 2.8512718e+006 2.8522728e+006 9.4340602e+004 1.3416044e+005 1.2754150e+004 1.3476531e+005 1.8228584e+005 + 2.5958828e+004 7.5533113e+005 7.5577706e+005 4.5866500e+004 7.9573000e+004 6.5021387e+002 7.9575656e+004 7.9987711e+004 + -1.0988002e-008 -1.1530641e-008 1.5927707e-008 3.3992114e-007 4.9353872e-008 -1.0768395e-007 1.1845521e-007 -5.2295945e-012 + -4.2568038e+005 5.7941495e+006 5.8097650e+006 1.1174642e+005 1.5376022e+005 3.7355734e+004 1.5823292e+005 1.7843052e+005 + -2.2479926e+004 2.8575715e+006 2.8576600e+006 9.3273672e+004 1.3442814e+005 9.1623936e+003 1.3474003e+005 1.8105500e+005 + 3.5006930e+004 7.5697300e+005 7.5778200e+005 4.5530734e+004 7.9737383e+004 -4.8011081e+002 7.9738828e+004 7.9607461e+004 + -2.7494991e-008 2.9752565e-009 2.7655499e-008 1.7764394e-007 2.5513870e-008 -5.6239593e-008 6.1756367e-008 -1.8047785e-012 + -2.5979608e+005 5.8056580e+006 5.8114680e+006 1.1015441e+005 1.5399361e+005 2.9371732e+004 1.5676967e+005 1.7605830e+005 + 3.2492109e+004 2.8638103e+006 2.8639948e+006 9.2109719e+004 1.3468298e+005 5.4591836e+003 1.3479358e+005 1.7999020e+005 + 4.4435699e+004 7.5871350e+005 7.6001363e+005 4.5150270e+004 7.9907367e+004 -1.6534775e+003 7.9924477e+004 7.9275453e+004 + -2.9039334e-008 2.3885987e-009 2.9137405e-008 4.7589967e-007 -1.0903415e-007 -1.3756019e-007 1.7553134e-007 1.7138291e-011 + -8.9490250e+004 5.8168800e+006 5.8175685e+006 1.0847368e+005 1.5421416e+005 2.1196980e+004 1.5566413e+005 1.7404570e+005 + 8.8997609e+004 2.8700578e+006 2.8714373e+006 9.0865984e+004 1.3492936e+005 1.6556659e+003 1.3493952e+005 1.7908294e+005 + 5.4130605e+004 7.6053538e+005 7.6245931e+005 4.4736652e+004 8.0084125e+004 -2.8588240e+003 8.0135141e+004 7.8988641e+004 + -3.9373496e-008 7.0926403e-009 4.0007219e-008 4.0329775e-007 1.2847067e-008 -1.2396625e-007 1.2463016e-007 -1.6271429e-011 + 8.4148656e+004 5.8279265e+006 5.8285340e+006 1.0670277e+005 1.5442588e+005 1.2890531e+004 1.5496295e+005 1.7238763e+005 + 1.4681231e+005 2.8763285e+006 2.8800728e+006 8.9540391e+004 1.3517308e+005 -2.2226748e+003 1.3519134e+005 1.7832975e+005 + 6.4092273e+004 7.6238569e+005 7.6507500e+005 4.4289488e+004 8.0266047e+004 -4.0939368e+003 8.0370383e+004 7.8745828e+004 + -4.6190296e-009 9.0298391e-009 1.0142654e-008 2.8418345e-008 -1.3708387e-007 3.3232084e-009 1.3712415e-007 -1.4210855e-014 + 2.5982634e+005 5.8389540e+006 5.8447320e+006 1.0485601e+005 1.5464511e+005 4.5248447e+003 1.5471130e+005 1.7109277e+005 + 2.0565230e+005 2.8825308e+006 2.8898575e+006 8.8140656e+004 1.3541897e+005 -6.1454429e+003 1.3555834e+005 1.7773309e+005 + 7.4332266e+004 7.6420675e+005 7.6781325e+005 4.3806902e+004 8.0448625e+004 -5.3566182e+003 8.0626758e+004 7.8546914e+004 + -1.4285209e-008 6.7180048e-009 1.5786030e-008 2.2309673e-007 6.5885644e-009 -6.8138526e-008 6.8456323e-008 1.4608759e-011 + 4.3634097e+005 5.8499975e+006 5.8662480e+006 1.0294448e+005 1.5488433e+005 -3.8602356e+003 1.5493242e+005 1.7017617e+005 + 2.6499713e+005 2.8885638e+006 2.9006938e+006 8.6681578e+004 1.3566786e+005 -1.0084825e+004 1.3604217e+005 1.7729814e+005 + 8.4730461e+004 7.6595131e+005 7.7062356e+005 4.3298914e+004 8.0627242e+004 -6.6337617e+003 8.0899688e+004 7.8392188e+004 + -1.8138719e-008 -5.3862301e-009 1.8921538e-008 2.8926530e-007 -5.9289292e-008 -8.1243613e-008 1.0057706e-007 7.6170181e-012 + 6.1280738e+005 5.8610370e+006 5.8929865e+006 1.0099920e+005 1.5514847e+005 -1.2268222e+004 1.5563277e+005 1.6964536e+005 + 3.2411053e+005 2.8943518e+006 2.9124423e+006 8.5197977e+004 1.3591970e+005 -1.4020963e+004 1.3664097e+005 1.7702806e+005 + 9.5041414e+004 7.6758600e+005 7.7344756e+005 4.2787301e+004 8.0798719e+004 -7.9020098e+003 8.1184203e+004 7.8282445e+004 + 1.0755017e-009 -2.7423637e-009 2.9457192e-009 -6.9885022e-007 -4.2977092e-008 2.1469194e-007 2.1895127e-007 -1.0913936e-011 + 7.8848400e+005 5.8719360e+006 5.9246385e+006 9.9047602e+004 1.5542952e+005 -2.0703334e+004 1.5680231e+005 1.6949625e+005 + 3.8236619e+005 2.8998525e+006 2.9249528e+006 8.3720820e+004 1.3617323e+005 -1.7937281e+004 1.3734955e+005 1.7692311e+005 + 1.0505390e+005 7.6908206e+005 7.7622394e+005 4.2290844e+004 8.0961711e+004 -9.1414502e+003 8.1476156e+004 7.8219453e+004 + -2.1605969e-008 -1.8101209e-009 2.1681661e-008 -6.5260957e-007 -4.0769976e-008 2.0020308e-007 2.0431216e-007 1.7863044e-011 + 9.6262594e+005 5.8824360e+006 5.9606795e+006 9.7105461e+004 1.5571259e+005 -2.9133703e+004 1.5841459e+005 1.6972058e+005 + 4.3950850e+005 2.9050033e+006 2.9380625e+006 8.2263859e+004 1.3642416e+005 -2.1816463e+004 1.3815755e+005 1.7698313e+005 + 1.1472539e+005 7.7041300e+005 7.7890831e+005 4.1814133e+004 8.1115000e+004 -1.0346840e+004 8.1772250e+004 7.8205727e+004 + 2.0387359e-008 -2.2311806e-009 2.0509086e-008 -6.7337686e-007 3.6964806e-008 1.9665285e-007 2.0009682e-007 -2.0321522e-012 + 1.1345435e+006 5.8921735e+006 6.0004080e+006 9.5164922e+004 1.5598441e+005 -3.7498027e+004 1.6042830e+005 1.7031831e+005 + 4.9561047e+005 2.9096710e+006 2.9515785e+006 8.0814422e+004 1.3666320e+005 -2.5642582e+004 1.3904809e+005 1.7721180e+005 + 1.2415364e+005 7.7156369e+005 7.8148875e+005 4.1342461e+004 8.1256313e+004 -1.1525435e+004 8.2069633e+004 7.8244750e+004 + -3.2804817e-008 3.0669796e-009 3.2947874e-008 6.4484783e-007 2.4098441e-008 -1.9515967e-007 1.9664189e-007 -9.6633812e-013 + 1.3037851e+006 5.9006790e+006 6.0430015e+006 9.3214750e+004 1.5623108e+005 -4.5744688e+004 1.6279044e+005 1.7129641e+005 + 5.5081275e+005 2.9136825e+006 2.9652893e+006 7.9361531e+004 1.3687692e+005 -2.9405684e+004 1.3999995e+005 1.7761372e+005 + 1.3344319e+005 7.7253463e+005 7.8397506e+005 4.0869203e+004 8.1382703e+004 -1.2685415e+004 8.2365430e+004 7.8338117e+004 + -2.8462452e-008 6.7588877e-009 2.9253952e-008 5.5130465e-007 -1.1168970e-007 -1.4880807e-007 1.8606029e-007 4.3343107e-012 + 1.4703428e+006 5.9076570e+006 6.0878830e+006 9.1266758e+004 1.5645109e+005 -5.3867824e+004 1.6546506e+005 1.7266466e+005 + 6.0511600e+005 2.9168373e+006 2.9789435e+006 7.7912070e+004 1.3705427e+005 -3.3106504e+004 1.4099614e+005 1.7819361e+005 + 1.4259688e+005 7.7333938e+005 7.8637631e+005 4.0395719e+004 8.1490672e+004 -1.3826977e+004 8.2655398e+004 7.8486891e+004 + 2.4472435e-008 1.9779200e-010 2.4473234e-008 -1.9042171e-006 2.3550584e-008 5.6118262e-007 5.6167653e-007 2.0889956e-012 + 1.6344551e+006 5.9127515e+006 6.1344990e+006 8.9311016e+004 1.5663223e+005 -6.1892207e+004 1.6841705e+005 1.7442948e+005 + 6.5845431e+005 2.9190893e+006 2.9924310e+006 7.6464078e+004 1.3718527e+005 -3.6751273e+004 1.4202272e+005 1.7895458e+005 + 1.5155020e+005 7.7397425e+005 7.8867206e+005 3.9928754e+004 8.1578633e+004 -1.4945316e+004 8.2936336e+004 7.8691953e+004 + 3.2573242e-009 1.6045778e-009 3.6310921e-009 -5.3566862e-007 -7.8229604e-008 1.6994706e-007 1.8708788e-007 -8.9386276e-012 + 1.7963986e+006 5.9160760e+006 6.1827990e+006 8.7365375e+004 1.5678055e+005 -6.9836523e+004 1.7163123e+005 1.7658350e+005 + 7.1083656e+005 2.9204023e+006 3.0056678e+006 7.5024063e+004 1.3727377e+005 -4.0346824e+004 1.4308023e+005 1.7989441e+005 + 1.6028364e+005 7.7441738e+005 7.9083069e+005 3.9470215e+004 8.1645125e+004 -1.6039358e+004 8.3205695e+004 7.8953594e+004 + -1.3976059e-008 1.2627899e-008 1.8835978e-008 -4.0154387e-007 -4.2548763e-008 1.2509206e-007 1.3213031e-007 -4.5616844e-012 + 1.9562043e+006 5.9178060e+006 6.2327490e+006 8.5422203e+004 1.5689867e+005 -7.7684250e+004 1.7507722e+005 1.7911338e+005 + 7.6244594e+005 2.9208350e+006 3.0187085e+006 7.3580922e+004 1.3732777e+005 -4.3894422e+004 1.4417223e+005 1.8100836e+005 + 1.6887108e+005 7.7462481e+005 7.9281844e+005 3.9011789e+004 8.1690109e+004 -1.7115988e+004 8.3463953e+004 7.9271445e+004 + -3.0832027e-008 -9.1869179e-010 3.0845708e-008 1.3367090e-006 -4.8370424e-008 -3.8660363e-007 3.8961784e-007 1.1098678e-011 + 2.1136953e+006 5.9181880e+006 6.2843185e+006 8.3463328e+004 1.5699388e+005 -8.5397844e+004 1.7871728e+005 1.8200778e+005 + 8.1349850e+005 2.9204583e+006 3.0316425e+006 7.2117211e+004 1.3735652e+005 -4.7390762e+004 1.4530209e+005 1.8229150e+005 + 1.7741891e+005 7.7455538e+005 7.9461531e+005 3.8541012e+004 8.1713641e+004 -1.8184586e+004 8.3712594e+004 7.9644234e+004 + -3.6654658e-008 -9.5239105e-010 3.6667029e-008 9.5723379e-008 5.4626526e-009 -2.9103361e-008 2.9611588e-008 2.4868996e-012 + 2.2686448e+006 5.9174470e+006 6.3374225e+006 8.1479695e+004 1.5707666e+005 -9.2951164e+004 1.8251847e+005 1.8526245e+005 + 8.6404163e+005 2.9193213e+006 3.0445040e+006 7.0625703e+004 1.3736642e+005 -5.0831664e+004 1.4646977e+005 1.8374041e+005 + 1.8596259e+005 7.7419381e+005 7.9621488e+005 3.8052199e+004 8.1715805e+004 -1.9248178e+004 8.3952156e+004 8.0070000e+004 + -7.0588847e-008 -1.2657582e-009 7.0600194e-008 -3.9516132e-007 -5.0662109e-008 1.2497365e-007 1.3485200e-007 8.1001872e-013 + 2.4208893e+006 5.9157900e+006 6.3919700e+006 7.9483336e+004 1.5715875e+005 -1.0034666e+005 1.8646266e+005 1.8887600e+005 + 9.1388338e+005 2.9174510e+006 3.0572380e+006 6.9119641e+004 1.3736308e+005 -5.4214816e+004 1.4767484e+005 1.8535213e+005 + 1.9442870e+005 7.7355706e+005 7.9761713e+005 3.7550379e+004 8.1696945e+004 -2.0300172e+004 8.4181281e+004 8.0546617e+004 + -2.4926457e-008 8.3571594e-009 2.6290119e-008 1.5852244e-009 -3.7729023e-008 6.1749148e-009 3.8230993e-008 -1.5106139e-011 + 2.5702413e+006 5.9132500e+006 6.4476870e+006 7.7483555e+004 1.5723941e+005 -1.0759855e+005 1.9053000e+005 1.9284300e+005 + 9.6273013e+005 2.9149228e+006 3.0697923e+006 6.7606734e+004 1.3734227e+005 -5.7535418e+004 1.4890675e+005 1.8712248e+005 + 2.0269916e+005 7.7267594e+005 7.9882106e+005 3.7045457e+004 8.1659289e+004 -2.1330049e+004 8.4399109e+004 8.1072047e+004 + -6.9540540e-008 9.8340216e-009 7.0232431e-008 9.9878980e-007 -4.6311015e-008 -2.8550960e-007 2.8924114e-007 1.6186164e-011 + 2.7163558e+006 5.9099060e+006 6.5042740e+006 7.5499508e+004 1.5731592e+005 -1.1470117e+005 1.9469119e+005 1.9714611e+005 + 1.0103699e+006 2.9118115e+006 3.0821248e+006 6.6101570e+004 1.3730719e+005 -6.0785996e+004 1.5016058e+005 1.8904320e+005 + 2.1071370e+005 7.7158756e+005 7.9984225e+005 3.6541539e+004 8.1605672e+004 -2.2331803e+004 8.4606117e+004 8.1644070e+004 + -2.1259616e-008 6.0397483e-009 2.2100901e-008 2.9481956e-007 -9.1578315e-008 -6.9623212e-008 1.1503904e-007 -1.8403057e-011 + 2.8586423e+006 5.9058030e+006 6.5612760e+006 7.3540383e+004 1.5738156e+005 -1.2161567e+005 1.9889527e+005 2.0176147e+005 + 1.0567313e+006 2.9082005e+006 3.0942383e+006 6.4609391e+004 1.3726145e+005 -6.3953629e+004 1.5142911e+005 1.9110358e+005 + 2.1849920e+005 7.7032438e+005 8.0071319e+005 3.6034410e+004 8.1539023e+004 -2.3306389e+004 8.4804484e+004 8.2259891e+004 + -1.4070102e-008 -5.9605423e-009 1.5280570e-008 -1.8539140e-007 -3.4100708e-008 6.1155490e-008 7.0020370e-008 2.5153213e-012 + 2.9963403e+006 5.9007875e+006 6.6179565e+006 7.1587570e+004 1.5742336e+005 -1.2828906e+005 2.0307683e+005 2.0667134e+005 + 1.1017645e+006 2.9041625e+006 3.1061300e+006 6.3111039e+004 1.3719616e+005 -6.7019188e+004 1.5269039e+005 1.9329538e+005 + 2.2610252e+005 7.6891431e+005 8.0146838e+005 3.5517363e+004 8.1462984e+004 -2.4256547e+004 8.4997633e+004 8.2916555e+004 + -4.4389893e-008 -1.3403322e-008 4.6369298e-008 1.0521391e-006 1.0590171e-008 -3.1203911e-007 3.1221876e-007 -5.0732751e-012 + 3.1288033e+006 5.8948165e+006 6.6737000e+006 6.9661375e+004 1.5744019e+005 -1.3468823e+005 2.0719153e+005 2.1186481e+005 + 1.1452684e+006 2.8996803e+006 3.1176570e+006 6.1627398e+004 1.3711131e+005 -6.9969266e+004 1.5393248e+005 1.9561227e+005 + 2.3349741e+005 7.6739919e+005 8.0213625e+005 3.4992469e+004 8.1377766e+004 -2.5178273e+004 8.5183836e+004 8.3611188e+004 + 3.2332395e-008 -2.8861891e-009 3.2460957e-008 -6.6451543e-007 5.7661964e-010 1.9578076e-007 1.9578161e-007 2.8606451e-011 + 3.2555393e+006 5.8876995e+006 6.7278185e+006 6.7583055e+004 1.5742939e+005 -1.4081055e+005 2.1121464e+005 2.1734094e+005 + 1.1868840e+006 2.8946980e+006 3.1285733e+006 5.9978688e+004 1.3699600e+005 -7.2791695e+004 1.5513392e+005 1.9805245e+005 + 2.4057556e+005 7.6581206e+005 8.0271088e+005 3.4470504e+004 8.1283492e+004 -2.6060947e+004 8.5359117e+004 8.4342008e+004 + -3.7214402e-008 5.1335958e-009 3.7566817e-008 -2.0516029e-007 -4.7831875e-008 7.0491780e-008 8.5187907e-008 9.4644292e-012 + 3.3761150e+006 5.8795275e+006 6.7798965e+006 6.5950969e+004 1.5739588e+005 -1.4665666e+005 2.1513167e+005 2.2308884e+005 + 1.2262600e+006 2.8892113e+006 3.1386710e+006 5.8761699e+004 1.3685463e+005 -7.5476961e+004 1.5628808e+005 2.0061078e+005 + 2.4721602e+005 7.6415738e+005 8.0315144e+005 3.3963922e+004 8.1178539e+004 -2.6892600e+004 8.5517055e+004 8.5107547e+004 + -8.2167475e-008 8.5553582e-009 8.2611670e-008 3.4369043e-007 7.3686550e-009 -1.0308638e-007 1.0334940e-007 1.2391865e-011 + 3.4900800e+006 5.8702550e+006 6.8293890e+006 6.4209316e+004 1.5734041e+005 -1.5221583e+005 2.1891930e+005 2.2909850e+005 + 1.2631825e+006 2.8831785e+006 3.1477528e+006 5.7415406e+004 1.3668472e+005 -7.8013930e+004 1.5738133e+005 2.0328384e+005 + 2.5337819e+005 7.6241556e+005 8.0341650e+005 3.3477359e+004 8.1061195e+004 -2.7668541e+004 8.5653172e+004 8.5907445e+004 + -1.6560584e-008 -6.9480270e-009 1.7959065e-008 -8.3740082e-007 -9.5230916e-009 2.4973616e-007 2.4991766e-007 -3.2542857e-012 + 3.5968543e+006 5.8600600e+006 6.8758755e+006 6.2566227e+004 1.5726780e+005 -1.5744978e+005 2.2253897e+005 2.3534984e+005 + 1.2975949e+006 2.8766378e+006 3.1557563e+006 5.6143113e+004 1.3649409e+005 -8.0388859e+004 1.5840772e+005 2.0606389e+005 + 2.5908842e+005 7.6053350e+005 8.0345381e+005 3.3015629e+004 8.0930148e+004 -2.8389801e+004 8.5765203e+004 8.6739977e+004 + 9.2718926e-009 1.2118219e-008 1.5258415e-008 1.1737892e-007 -8.0950144e-009 -3.2972295e-008 3.3951459e-008 2.6858515e-012 + 3.6959880e+006 5.8491795e+006 6.9190480e+006 6.1061133e+004 1.5718872e+005 -1.6232725e+005 2.2596111e+005 2.4183028e+005 + 1.3294446e+006 2.8696220e+006 3.1626183e+006 5.4981074e+004 1.3629077e+005 -8.2591617e+004 1.5936294e+005 2.0894586e+005 + 2.6436544e+005 7.5847263e+005 8.0322463e+005 3.2596014e+004 8.0786352e+004 -2.9057256e+004 8.5853125e+004 8.7603016e+004 + -5.4834061e-008 1.8935093e-009 5.4866742e-008 -3.3050591e-007 -1.7017655e-008 1.0190965e-007 1.0332075e-007 1.5958790e-011 + 3.7873118e+006 5.8377495e+006 6.9586675e+006 5.9589770e+004 1.5710756e+005 -1.6684209e+005 2.2917041e+005 2.4853206e+005 + 1.3586103e+006 2.8621728e+006 3.1682573e+006 5.3838984e+004 1.3608072e+005 -8.4620180e+004 1.6024523e+005 2.1192967e+005 + 2.6915213e+005 7.5619163e+005 8.0266344e+005 3.2174545e+004 8.0625539e+004 -2.9665850e+004 8.5910070e+004 8.8499805e+004 + 1.5003810e-008 7.3606765e-009 1.6712088e-008 -8.6941969e-007 -7.3838919e-008 2.7544723e-007 2.8517252e-007 1.2406076e-011 + 3.8709580e+006 5.8259310e+006 6.9946970e+006 5.8119613e+004 1.5704356e+005 -1.7101344e+005 2.3218156e+005 2.5545822e+005 + 1.3849684e+006 2.8542148e+006 3.1724878e+006 5.2684910e+004 1.3586559e+005 -8.6478109e+004 1.6105255e+005 2.1501558e+005 + 2.7338353e+005 7.5369719e+005 8.0174681e+005 3.1713813e+004 8.0449734e+004 -3.0211346e+004 8.5935352e+004 8.9429211e+004 + 4.7050072e-008 -5.2962390e-009 4.7347221e-008 -1.5889675e-007 1.6620447e-009 4.6966107e-008 4.6995506e-008 -5.2438054e-012 + 3.9469685e+006 5.8138925e+006 7.0270835e+006 5.6911508e+004 1.5700513e+005 -1.7484008e+005 2.3498864e+005 2.6259778e+005 + 1.4085869e+006 2.8457918e+006 3.1753185e+006 5.1770992e+004 1.3564778e+005 -8.8165281e+004 1.6178206e+005 2.1819716e+005 + 2.7709703e+005 7.5099756e+005 8.0048738e+005 3.1425770e+004 8.0260734e+004 -3.0695818e+004 8.5930313e+004 9.0387930e+004 + -2.8304935e-008 7.8169515e-009 2.9364504e-008 6.8259220e-007 1.5128876e-008 -2.0752506e-007 2.0807579e-007 3.3111291e-012 + 4.0150978e+006 5.8016160e+006 7.0554770e+006 5.5716141e+004 1.5697733e+005 -1.7828584e+005 2.3754520e+005 2.6992147e+005 + 1.4296834e+006 2.8370015e+006 3.1768810e+006 5.0842879e+004 1.3543163e+005 -8.9675664e+004 1.6242983e+005 2.2146558e+005 + 2.8040916e+005 7.4809725e+005 7.9892356e+005 3.1083707e+004 8.0055578e+004 -3.1128650e+004 8.5894633e+004 9.1376609e+004 + -3.5521246e-008 -1.7090809e-009 3.5562337e-008 -2.0968460e-007 -4.3051145e-008 7.3133407e-008 8.4863984e-008 1.1795009e-012 + 4.0751620e+006 5.7891265e+006 7.0796135e+006 5.4594375e+004 1.5695020e+005 -1.8133189e+005 2.3982206e+005 2.7740469e+005 + 1.4483018e+006 2.8279668e+006 3.1772588e+006 4.9958938e+004 1.3521827e+005 -9.1004945e+004 1.6299042e+005 2.2480972e+005 + 2.8335644e+005 7.4502313e+005 7.9708863e+005 3.0745004e+004 7.9839250e+004 -3.1512600e+004 8.5833266e+004 9.2391016e+004 + -5.4373043e-008 -3.5795047e-009 5.4490741e-008 1.3296670e-006 -4.9927806e-008 -3.8756082e-007 3.9076357e-007 -1.1596057e-011 + 4.1272490e+006 5.7763770e+006 7.0993460e+006 5.3550941e+004 1.5692595e+005 -1.8399956e+005 2.4182967e+005 2.8504738e+005 + 1.4642373e+006 2.8186950e+006 3.1763238e+006 4.9129777e+004 1.3500069e+005 -9.2156461e+004 1.6345641e+005 2.2822838e+005 + 2.8582741e+005 7.4185056e+005 7.9500913e+005 3.0414963e+004 7.9615180e+004 -3.1838900e+004 8.5745508e+004 9.3429938e+004 + -1.3088868e-007 1.5385883e-008 1.3178988e-007 6.9784852e-007 3.5368402e-009 -2.1129225e-007 2.1132185e-007 -1.3343993e-011 + 4.1715018e+006 5.7633175e+006 7.1145805e+006 5.2431895e+004 1.5690809e+005 -1.8631747e+005 2.4358644e+005 2.9285338e+005 + 1.4772686e+006 2.8091470e+006 3.1738983e+006 4.8216539e+004 1.3477456e+005 -9.3134906e+004 1.6382397e+005 2.3172728e+005 + 2.8770334e+005 7.3863313e+005 7.9268663e+005 3.0026699e+004 7.9381914e+004 -3.2097488e+004 8.5625563e+004 9.4499289e+004 + -2.5958103e-008 -3.5199150e-009 2.6195666e-008 1.0887020e-007 -7.4997217e-009 -3.1088632e-008 3.1980445e-008 1.7621460e-012 + 4.2076780e+006 5.7498640e+006 7.1249905e+006 5.1438391e+004 1.5689080e+005 -1.8826953e+005 2.4507170e+005 3.0079409e+005 + 1.4874059e+006 2.7993360e+006 3.1699620e+006 4.7407082e+004 1.3453550e+005 -9.3932422e+004 1.6408261e+005 2.3528669e+005 + 2.8902978e+005 7.3538013e+005 7.9014056e+005 2.9681209e+004 7.9140438e+004 -3.2290527e+004 8.5474484e+004 9.5586914e+004 + -1.2456147e-009 1.2673844e-008 1.2734908e-008 -1.4816821e-007 -8.7093383e-008 6.6650131e-008 1.0966995e-007 -4.1922021e-012 + 4.2356305e+006 5.7358915e+006 7.1302885e+006 5.0564754e+004 1.5685191e+005 -1.8982881e+005 2.4624681e+005 3.0882388e+005 + 1.4948230e+006 2.7893498e+006 3.1646435e+006 4.6687801e+004 1.3428536e+005 -9.4545523e+004 1.6422977e+005 2.3888911e+005 + 2.8989528e+005 7.3207394e+005 7.8738269e+005 2.9366572e+004 7.8894688e+004 -3.2425807e+004 8.5298328e+004 9.6689328e+004 + -1.0059883e-007 -2.0849189e-010 1.0059904e-007 1.5264395e-006 -5.2832490e-008 -4.5194076e-007 4.5501838e-007 6.5369932e-013 + 4.2553060e+006 5.7211595e+006 7.1301680e+006 4.9799168e+004 1.5676763e+005 -1.9097447e+005 2.4707758e+005 3.1689859e+005 + 1.4996814e+006 2.7792348e+006 3.1580358e+006 4.6043758e+004 1.3402113e+005 -9.4973352e+004 1.6426077e+005 2.4251633e+005 + 2.9036975e+005 7.2870419e+005 7.8442613e+005 2.9071469e+004 7.8647117e+004 -3.2509775e+004 8.5101438e+004 9.7801898e+004 + -3.7959687e-008 -2.6278411e-009 3.8050537e-008 -7.4332894e-007 -9.2168051e-009 2.2970696e-007 2.2989178e-007 1.3926638e-011 + 4.2667255e+006 5.7053185e+006 7.1242970e+006 4.9136641e+004 1.5662970e+005 -1.9170261e+005 2.4755353e+005 3.2500581e+005 + 1.5020099e+006 2.7688520e+006 3.1500120e+006 4.5472645e+004 1.3373100e+005 -9.5216750e+004 1.6416519e+005 2.4616223e+005 + 2.9046156e+005 7.2528713e+005 7.8128694e+005 2.8794514e+004 7.8395266e+004 -3.2543189e+004 8.4881547e+004 9.8922102e+004 + -3.2744452e-008 2.0485942e-009 3.2808472e-008 -1.5022533e-007 -6.3284659e-008 6.2132301e-008 8.8686924e-008 1.2732926e-011 + 4.2700365e+006 5.6879880e+006 7.1124130e+006 4.8522203e+004 1.5644395e+005 -1.9203038e+005 2.4769008e+005 3.3316125e+005 + 1.5017208e+006 2.7579278e+006 3.1402755e+006 4.4930387e+004 1.3339833e+005 -9.5279320e+004 1.6393066e+005 2.4983367e+005 + 2.9011850e+005 7.2183981e+005 7.7795981e+005 2.8517756e+004 7.8131031e+004 -3.2521381e+004 8.4629180e+004 1.0005235e+005 + 8.3581533e-009 -3.4139855e-009 9.0285113e-009 -3.3174427e-007 -5.8337363e-008 1.1709758e-007 1.3082467e-007 1.9468871e-012 + 4.2654115e+006 5.6689560e+006 7.0944200e+006 4.7910414e+004 1.5622130e+005 -1.9197775e+005 2.4750869e+005 3.4137144e+005 + 1.4987384e+006 2.7462060e+006 3.1285563e+006 4.4377637e+004 1.3301408e+005 -9.5164805e+004 1.6355148e+005 2.5353238e+005 + 2.8929825e+005 7.1834319e+005 7.7440975e+005 2.8232201e+004 7.7845367e+004 -3.2440053e+004 8.4334211e+004 1.0119280e+005 + 3.4378527e-008 -2.6722615e-009 3.4482227e-008 -1.7747884e-006 -4.8753279e-008 5.6212281e-007 5.6423306e-007 9.4644292e-012 + 4.2530135e+006 5.6482210e+006 7.0703980e+006 4.7450457e+004 1.5596245e+005 -1.9155400e+005 2.4701664e+005 3.4960331e+005 + 1.4931059e+006 2.7336245e+006 3.1148143e+006 4.3952191e+004 1.3258063e+005 -9.4876492e+004 1.6303119e+005 2.5724003e+005 + 2.8800713e+005 7.1474069e+005 7.7058575e+005 2.8005203e+004 7.7537555e+004 -3.2300193e+004 8.3996281e+004 1.0233496e+005 + -4.2654587e-008 3.5929499e-009 4.2805642e-008 1.4500404e-008 2.1786903e-008 -1.0050741e-008 2.3993470e-008 1.9397817e-011 + 4.2328945e+006 5.6259895e+006 7.0405365e+006 4.7121367e+004 1.5565700e+005 -1.9074720e+005 2.4619828e+005 3.5780413e+005 + 1.4850153e+006 2.7203300e+006 3.0992685e+006 4.3626242e+004 1.3211366e+005 -9.4415742e+004 1.6238334e+005 2.6093647e+005 + 2.8631606e+005 7.1092975e+005 7.6641894e+005 2.7812002e+004 7.7208273e+004 -3.2108785e+004 8.3618727e+004 1.0347563e+005 + 3.3617187e-008 5.2007465e-010 3.3621209e-008 -4.3370750e-007 2.8151931e-008 1.2849641e-007 1.3154413e-007 -4.9737992e-013 + 4.2049990e+006 5.6024190e+006 7.0049350e+006 4.6904676e+004 1.5529608e+005 -1.8953978e+005 2.4503509e+005 3.6593016e+005 + 1.4746238e+006 2.7064505e+006 3.0821080e+006 4.3376129e+004 1.3162488e+005 -9.3781195e+004 1.6161689e+005 2.6460391e+005 + 2.8429413e+005 7.0683688e+005 7.6186713e+005 2.7637563e+004 7.6859250e+004 -3.1872285e+004 8.3205695e+004 1.0461073e+005 + 4.7877410e-008 -7.9480849e-009 4.8532655e-008 -1.4244058e-006 -1.7717213e-008 4.5244346e-007 4.5279023e-007 2.9871217e-011 + 4.1693295e+006 5.5773805e+006 6.9635110e+006 4.6790250e+004 1.5488002e+005 -1.8793464e+005 2.4353080e+005 3.7397166e+005 + 1.4618843e+006 2.6919110e+006 3.0632485e+006 4.3194328e+004 1.3110930e+005 -9.2973336e+004 1.6072863e+005 2.6823706e+005 + 2.8191475e+005 7.0245831e+005 7.5691713e+005 2.7479279e+004 7.6488078e+004 -3.1588535e+004 8.2754227e+004 1.0573809e+005 + 8.0209883e-010 1.6410056e-009 1.8265437e-009 -7.2091785e-007 -1.6768738e-008 2.3228895e-007 2.3289343e-007 -9.9191766e-012 + 4.1259538e+006 5.5505305e+006 6.9160600e+006 4.6778574e+004 1.5441570e+005 -1.8595255e+005 2.4170759e+005 3.8194009e+005 + 1.4466025e+006 2.6764683e+006 3.0423908e+006 4.3090566e+004 1.3054965e+005 -9.1994063e+004 1.5970634e+005 2.7183897e+005 + 2.7908597e+005 6.9784581e+005 7.5158350e+005 2.7345199e+004 7.6089398e+004 -3.1249221e+004 8.2256375e+004 1.0685737e+005 + -7.4652199e-008 -3.5481289e-009 7.4736469e-008 -1.7449088e-006 5.8766716e-009 5.5391791e-007 5.5394912e-007 2.2708946e-011 + 4.0748835e+006 5.5215450e+006 6.8623710e+006 4.6870250e+004 1.5390608e+005 -1.8360730e+005 2.3958030e+005 3.8983825e+005 + 1.4286433e+006 2.6599203e+006 3.0193040e+006 4.3070836e+004 1.2993030e+005 -9.0843148e+004 1.5853819e+005 2.7540988e+005 + 2.7575294e+005 6.9305219e+005 7.4589613e+005 2.7240432e+004 7.5659102e+004 -3.0848961e+004 8.1706539e+004 1.0796823e+005 + -1.1165940e-007 3.1964316e-009 1.1170515e-007 1.5978018e-006 -4.0643101e-008 -5.0175339e-007 5.0339679e-007 8.9528385e-013 + 4.0159738e+006 5.4903720e+006 6.8023695e+006 4.7059840e+004 1.5334666e+005 -1.8088884e+005 2.3714125e+005 3.9764413e+005 + 1.4080380e+006 2.6422728e+006 2.9940233e+006 4.3127117e+004 1.2924962e+005 -8.9515984e+004 1.5722142e+005 2.7894069e+005 + 2.7195150e+005 6.8808650e+005 7.3987881e+005 2.7159580e+004 7.5197281e+004 -3.0390111e+004 8.1106039e+004 1.0906860e+005 + 4.7709207e-008 5.7036784e-009 4.8048939e-008 -6.6069339e-007 5.5049682e-008 1.9942796e-007 2.0688638e-007 5.5848659e-012 + 3.9489603e+006 5.4572960e+006 6.7361985e+006 4.7339277e+004 1.5273386e+005 -1.7777342e+005 2.3437369e+005 4.0532181e+005 + 1.3848744e+006 2.6237218e+006 2.9667815e+006 4.3245488e+004 1.2852029e+005 -8.8005398e+004 1.5576397e+005 2.8241684e+005 + 2.6774856e+005 6.8291913e+005 7.3353106e+005 2.7092703e+004 7.4707711e+004 -2.9877949e+004 8.0460758e+004 1.1015479e+005 + 9.0334140e-010 7.0833091e-009 7.1406787e-009 -1.5585729e-006 -4.4420787e-008 5.1783422e-007 5.1973598e-007 1.1297629e-011 + 3.8736985e+006 5.4228535e+006 6.6642990e+006 4.7702063e+004 1.5207897e+005 -1.7425570e+005 2.3128567e+005 4.1284703e+005 + 1.3590943e+006 2.6045023e+006 2.9377830e+006 4.3420160e+004 1.2776057e+005 -8.6308328e+004 1.5418136e+005 2.8582784e+005 + 2.6312688e+005 6.7752225e+005 7.2682331e+005 2.7037273e+004 7.4194328e+004 -2.9310895e+004 7.9774219e+004 1.1122348e+005 + -1.1869476e-008 7.6476558e-009 1.4119883e-008 5.8522926e-007 -2.0379034e-008 -1.8677294e-007 1.8788144e-007 -3.2827074e-012 + 3.7902300e+006 5.3876600e+006 6.5873155e+006 4.8144324e+004 1.5140931e+005 -1.7035420e+005 2.2791519e+005 4.2021694e+005 + 1.3304971e+006 2.5847795e+006 2.9071133e+006 4.3655777e+004 1.2698628e+005 -8.4426828e+004 1.5249067e+005 2.8917172e+005 + 2.5798527e+005 6.7189806e+005 7.1972450e+005 2.6999971e+004 7.3659469e+004 -2.8680393e+004 7.9046078e+004 1.1227354e+005 + -1.6360611e-008 -6.5093175e-009 1.7607976e-008 5.1746235e-007 1.7637333e-008 -1.7533149e-007 1.7621636e-007 -9.2370556e-013 + 3.6987363e+006 5.3523185e+006 6.5059940e+006 4.8661238e+004 1.5075667e+005 -1.6609292e+005 2.2430878e+005 4.2743775e+005 + 1.2989464e+006 2.5646795e+006 2.8748640e+006 4.3956785e+004 1.2621039e+005 -8.2365875e+004 1.5070900e+005 2.9245081e+005 + 2.5224188e+005 6.6607319e+005 7.1223550e+005 2.6987148e+004 7.3104813e+004 -2.7979660e+004 7.8276273e+004 1.1330564e+005 + -4.9938883e-008 -8.8077812e-010 4.9946649e-008 6.8548786e-007 -1.2354832e-008 -2.2552848e-007 2.2586664e-007 -4.9311666e-012 + 3.5994725e+006 5.3173655e+006 6.4211040e+006 4.9244840e+004 1.5014039e+005 -1.6148277e+005 2.2049677e+005 4.3450209e+005 + 1.2645489e+006 2.5443943e+006 2.8413073e+006 4.4316828e+004 1.2544618e+005 -8.0130914e+004 1.4885466e+005 2.9566256e+005 + 2.4592283e+005 6.6008163e+005 7.0440456e+005 2.6995930e+004 7.2534625e+004 -2.7211424e+004 7.7470859e+004 1.1431983e+005 + 3.7768579e-008 9.2190389e-009 3.8877452e-008 -1.4707348e-006 -1.6813431e-008 4.9875365e-007 4.9903696e-007 1.3073986e-011 + 3.4927733e+006 5.2831680e+006 6.3333505e+006 4.9963719e+004 1.4955569e+005 -1.5652411e+005 2.1648719e+005 4.4137559e+005 + 1.2276210e+006 2.5242400e+006 2.8069273e+006 4.4795012e+004 1.2470469e+005 -7.7728359e+004 1.4694542e+005 2.9879063e+005 + 2.3914222e+005 6.5397419e+005 6.9632694e+005 2.7057504e+004 7.1960047e+004 -2.6386656e+004 7.6645313e+004 1.1530982e+005 + -6.6865418e-008 -4.0683341e-009 6.6989074e-008 1.8128915e-007 -1.0428082e-008 -5.9084940e-008 5.9998122e-008 4.8316906e-013 + 3.3792310e+006 5.2500395e+006 6.2435660e+006 5.0746203e+004 1.4898998e+005 -1.5123252e+005 2.1229528e+005 4.4801941e+005 + 1.1885020e+006 2.5045615e+006 2.7722490e+006 4.5315480e+004 1.2399732e+005 -7.5171883e+004 1.4500395e+005 3.0182159e+005 + 2.3199275e+005 6.4782369e+005 6.8811056e+005 2.7124592e+004 7.1391047e+004 -2.5514936e+004 7.5813547e+004 1.1627444e+005 + -5.8783067e-010 -1.6216841e-009 1.7249361e-009 6.6215955e-007 -3.6357335e-009 -2.2605430e-007 2.2608353e-007 -8.1286089e-012 + 3.2595470e+006 5.2179975e+006 6.1524100e+006 5.1558051e+004 1.4842870e+005 -1.4563638e+005 2.0794478e+005 4.5440563e+005 + 1.1474420e+006 2.4855740e+006 2.7376453e+006 4.5846125e+004 1.2332195e+005 -7.2478180e+004 1.4304331e+005 3.0474334e+005 + 2.2451466e+005 6.4174619e+005 6.7988600e+005 2.7179797e+004 7.0837734e+004 -2.4601857e+004 7.4988242e+004 1.1720999e+005 + -2.1686837e-008 -2.9614426e-009 2.1888102e-008 -6.0268633e-008 1.9476005e-008 1.6399866e-008 2.5461155e-008 -1.3457679e-011 + 3.1343935e+006 5.1868200e+006 6.0603235e+006 5.2397789e+004 1.4786584e+005 -1.3976473e+005 2.0346619e+005 4.6053006e+005 + 1.1046381e+006 2.4672723e+006 2.7032680e+006 4.6393055e+004 1.2266459e+005 -6.9663180e+004 1.4106581e+005 3.0755184e+005 + 2.1673442e+005 6.3587869e+005 6.7180019e+005 2.7228803e+004 7.0304180e+004 -2.3650865e+004 7.4175742e+004 1.1811359e+005 + -3.9135159e-008 7.9460243e-009 3.9933695e-008 -3.9946053e-007 -3.7260179e-008 1.4775986e-007 1.5238535e-007 5.4996008e-012 + 3.0043583e+006 5.1562695e+006 5.9676865e+006 5.3258590e+004 1.4730322e+005 -1.3363675e+005 1.9888947e+005 4.6639900e+005 + 1.0603378e+006 2.4495538e+006 2.6692003e+006 4.6957406e+004 1.2201035e+005 -6.6740250e+004 1.3907116e+005 3.1024769e+005 + 2.0871477e+005 6.3033056e+005 6.6398681e+005 2.7275246e+004 6.9790734e+004 -2.2668107e+004 7.3379766e+004 1.1898382e+005 + -4.7648193e-008 -1.3322410e-009 4.7666816e-008 6.8546171e-007 1.3752839e-009 -2.4167173e-007 2.4167565e-007 -7.7875484e-012 + 2.8699228e+006 5.1263400e+006 5.8750165e+006 5.4134051e+004 1.4674355e+005 -1.2726236e+005 1.9424052e+005 4.7200609e+005 + 1.0148488e+006 2.4324073e+006 2.6356258e+006 4.7534234e+004 1.2135645e+005 -6.3719523e+004 1.3706773e+005 3.1282650e+005 + 2.0055803e+005 6.2514138e+005 6.5652519e+005 2.7318400e+004 6.9297820e+004 -2.1663100e+004 7.2604945e+004 1.1981820e+005 + -8.6369297e-008 5.4205449e-009 8.6539231e-008 -1.2128030e-008 -7.5884188e-008 2.0549876e-008 7.8617475e-008 3.2116532e-012 + 2.7314763e+006 5.0973515e+006 5.7830750e+006 5.5021359e+004 1.4619061e+005 -1.2065142e+005 1.8954805e+005 4.7732550e+005 + 9.6842563e+005 2.4159845e+006 2.6028503e+006 4.8116844e+004 1.2071575e+005 -6.0609191e+004 1.3507689e+005 3.1527572e+005 + 1.9234530e+005 6.2027775e+005 6.4941606e+005 2.7356447e+004 6.8827609e+004 -2.0643768e+004 7.1856836e+004 1.2061217e+005 + 6.0416113e-008 3.5432581e-009 6.0519923e-008 -2.0450938e-007 -2.4397863e-008 7.8331297e-008 8.2042959e-008 2.0619950e-011 + 2.5893005e+006 5.0698140e+006 5.6927580e+006 5.5923137e+004 1.4565217e+005 -1.1381971e+005 1.8484989e+005 4.8232650e+005 + 9.2115438e+005 2.4005098e+006 2.5711813e+006 4.8705418e+004 1.2010902e+005 -5.7415926e+004 1.3312688e+005 3.1758063e+005 + 1.8408402e+005 6.1567006e+005 6.4260144e+005 2.7392139e+004 6.8382820e+004 -1.9611766e+004 7.1139523e+004 1.2136055e+005 + 5.7699459e-009 -2.6806726e-009 6.3622543e-009 -5.0084344e-007 3.1141099e-009 1.8016655e-007 1.8019347e-007 -6.4659389e-012 + 2.4435568e+006 5.0441605e+006 5.6048660e+006 5.6841305e+004 1.4514122e+005 -1.0678640e+005 1.8019242e+005 4.8699250e+005 + 8.7295594e+005 2.3861235e+006 2.5407945e+006 4.9305129e+004 1.1955227e+005 -5.4144324e+004 1.3124158e+005 3.1973253e+005 + 1.7571556e+005 6.1126038e+005 6.3601506e+005 2.7433168e+004 6.7964438e+004 -1.8562803e+004 7.0453828e+004 1.2206002e+005 + -1.6954678e-008 2.5175639e-009 1.7140573e-008 -3.9308921e-007 5.5077436e-009 1.4191093e-007 1.4201778e-007 2.6375346e-011 + 2.2943353e+006 5.0205380e+006 5.5199435e+006 5.7776387e+004 1.4467013e+005 -9.9567938e+004 1.7562238e+005 4.9132422e+005 + 8.2370719e+005 2.3728113e+006 2.5117180e+006 4.9924418e+004 1.1904895e+005 -5.0797371e+004 1.2943348e+005 3.2173047e+005 + 1.6717045e+005 6.0702975e+005 6.2962775e+005 2.7488674e+004 6.7570914e+004 -1.7491234e+004 6.9798078e+004 1.2270980e+005 + 1.2339199e-009 1.0731323e-008 1.0802030e-008 -3.4705315e-007 -1.0520955e-007 1.4728434e-007 1.8100201e-007 -9.1091579e-012 + 2.1416865e+006 4.9987340e+006 5.4382130e+006 5.8725094e+004 1.4423791e+005 -9.2172102e+004 1.7117322e+005 4.9532519e+005 + 7.7338438e+005 2.3604600e+006 2.4839273e+006 5.0564297e+004 1.1859053e+005 -4.7375848e+004 1.2770351e+005 3.2357531e+005 + 1.5843675e+005 6.0299481e+005 6.2346206e+005 2.7562777e+004 6.7200398e+004 -1.6396057e+004 6.9171703e+004 1.2331015e+005 + -1.0337059e-008 1.6326496e-011 1.0337072e-008 3.0642212e-007 3.3594816e-008 -1.1930398e-007 1.2394374e-007 -7.8159701e-013 + 1.9856834e+006 4.9782445e+006 5.3596510e+006 5.9683266e+004 1.4382398e+005 -8.4601367e+004 1.6686141e+005 4.9898694e+005 + 7.2208556e+005 2.3489570e+006 2.4574390e+006 5.1218590e+004 1.1816127e+005 -4.3879922e+004 1.2604575e+005 3.2526350e+005 + 1.4956003e+005 5.9919213e+005 6.1757544e+005 2.7653174e+004 6.6852695e+004 -1.5281178e+004 6.8576945e+004 1.2386025e+005 + -2.9091686e-008 5.7340817e-009 2.9651405e-008 1.8060152e-007 1.2332293e-008 -6.9313899e-008 7.0402429e-008 1.7791990e-011 + 1.8264499e+006 4.9583840e+006 5.2840790e+006 6.0638957e+004 1.4339325e+005 -7.6860672e+004 1.6269353e+005 5.0228881e+005 + 6.6993519e+005 2.3382108e+006 2.4322918e+006 5.1870164e+004 1.1774148e+005 -4.0310688e+004 1.2445083e+005 3.2678666e+005 + 1.4059464e+005 5.9567013e+005 6.1203738e+005 2.7752721e+004 6.6529977e+004 -1.4151512e+004 6.8018406e+004 1.2435793e+005 + 2.6069257e-008 2.0441480e-009 2.6149277e-008 -3.6594497e-007 -1.4639923e-008 1.3940245e-007 1.4016908e-007 -5.8548721e-012 + 1.6641399e+006 4.9383275e+006 5.2111840e+006 6.1566160e+004 1.4290623e+005 -6.8962023e+004 1.5867563e+005 5.0521116e+005 + 6.1699081e+005 2.3280905e+006 2.4084608e+006 5.2490730e+004 1.1730646e+005 -3.6670059e+004 1.2290443e+005 3.2813722e+005 + 1.3155975e+005 5.9248438e+005 6.0691488e+005 2.7850516e+004 6.6233820e+004 -1.3008952e+004 6.7499273e+004 1.2480120e+005 + -2.4929577e-008 -1.1859864e-009 2.4957771e-008 -1.4474837e-007 1.0739910e-008 5.2735423e-008 5.3817942e-008 1.5859314e-011 + 1.4989420e+006 4.9172015e+006 5.1405930e+006 6.2406934e+004 1.4233409e+005 -6.0922980e+004 1.5482442e+005 5.0774956e+005 + 5.6323325e+005 2.3183303e+006 2.3857675e+006 5.3029574e+004 1.1682696e+005 -3.2961266e+004 1.2138774e+005 3.2931450e+005 + 1.2243842e+005 5.8968950e+005 6.0226644e+005 2.7926428e+004 6.5962109e+004 -1.1852149e+004 6.7018453e+004 1.2519055e+005 + -4.2432578e-008 6.4484889e-009 4.2919769e-008 1.2134848e-007 -7.2064793e-008 -3.4713011e-008 7.9989547e-008 -2.9132252e-012 + 1.3310275e+006 4.8941160e+006 5.0718840e+006 6.3060410e+004 1.4166009e+005 -5.2757813e+004 1.5116538e+005 5.0991444e+005 + 5.0865659e+005 2.3085053e+006 2.3638800e+006 5.3398535e+004 1.1627187e+005 -2.9186527e+004 1.1987911e+005 3.3032525e+005 + 1.1322891e+005 5.8731013e+005 5.9812538e+005 2.7942193e+004 6.5706906e+004 -1.0680646e+004 6.6569313e+004 1.2552979e+005 + -4.0682053e-008 4.5997357e-009 4.0941263e-008 2.5152221e-007 1.2598122e-008 -9.7649078e-008 9.8458393e-008 -2.1742608e-012 + 1.1605350e+006 4.8682140e+006 5.0046330e+006 6.3372004e+004 1.4087630e+005 -4.4473512e+004 1.4772956e+005 5.1171906e+005 + 4.5331241e+005 2.2980598e+006 2.3423430e+006 5.3457027e+004 1.1561357e+005 -2.5347229e+004 1.1835953e+005 3.3117838e+005 + 1.0396022e+005 5.8529544e+005 5.9445650e+005 2.7827160e+004 6.5453422e+004 -9.4965156e+003 6.6138750e+004 1.2582509e+005 + 1.8085162e-008 -4.0633363e-010 1.8089727e-008 1.8887301e-008 3.9258268e-008 -1.2735150e-008 4.1272212e-008 -1.5276669e-011 + 9.8760969e+005 4.8387090e+006 4.9384690e+006 6.3173535e+004 1.3997902e+005 -3.6079188e+004 1.4455392e+005 5.1316500e+005 + 3.9721556e+005 2.2863178e+006 2.3205665e+006 5.3048344e+004 1.1483463e+005 -2.1446875e+004 1.1682021e+005 3.3187719e+005 + 9.4632297e+004 5.8346956e+005 5.9109394e+005 2.7484922e+004 6.5178625e+004 -8.3000078e+003 6.5704977e+004 1.2608195e+005 + -1.8364661e-008 5.3127902e-010 1.8372344e-008 3.2235840e-007 3.4757363e-008 -1.2871995e-007 1.3333003e-007 2.8180125e-011 + 8.1240663e+005 4.8049720e+006 4.8731675e+006 6.2642316e+004 1.3897103e+005 -2.7596719e+004 1.4168461e+005 5.1422506e+005 + 3.4020244e+005 2.2725613e+006 2.2978843e+006 5.2328598e+004 1.1392886e+005 -1.7491648e+004 1.1526380e+005 3.3240188e+005 + 8.5136648e+004 5.8149281e+005 5.8769219e+005 2.6986869e+004 6.4855988e+004 -7.0835601e+003 6.5241672e+004 1.2629011e+005 + 1.4663311e-009 4.8673279e-009 5.0834053e-009 -1.2884315e-007 -5.9561472e-008 5.7288084e-008 8.2640753e-008 3.2684966e-013 + 6.3513931e+005 4.7671595e+006 4.8092840e+006 6.1953035e+004 1.3788136e+005 -1.9067016e+004 1.3919345e+005 5.1486494e+005 + 2.8194106e+005 2.2562495e+006 2.2737970e+006 5.1468832e+004 1.1292789e+005 -1.3492313e+004 1.1373105e+005 3.3272697e+005 + 7.5251664e+004 5.7877900e+005 5.8365050e+005 2.6424240e+004 6.4444723e+004 -5.8296489e+003 6.4707859e+004 1.2643399e+005 + -1.7922325e-008 7.7673148e-009 1.9533072e-008 3.4217550e-007 -5.2978876e-008 -1.2748653e-007 1.3805642e-007 -4.4053650e-013 + 4.5589291e+005 4.7270350e+006 4.7489680e+006 6.2041895e+004 1.3680088e+005 -1.0514382e+004 1.3720434e+005 5.1503394e+005 + 2.2222330e+005 2.2373308e+006 2.2483400e+006 5.1362223e+004 1.1190833e+005 -9.4503721e+003 1.1230665e+005 3.3280638e+005 + 6.4919984e+004 5.7476350e+005 5.7841825e+005 2.6343789e+004 6.3905578e+004 -4.5262729e+003 6.4065672e+004 1.2647440e+005 + -1.3520808e-008 -3.3628096e-009 1.3932723e-008 -3.3893451e-007 2.3731332e-008 1.3102053e-007 1.3315237e-007 2.7000624e-013 + 2.7507328e+005 4.6867850e+006 4.6948505e+006 6.4187887e+004 1.3579631e+005 -1.9355719e+003 1.3581011e+005 5.1472678e+005 + 1.6140692e+005 2.2166745e+006 2.2225433e+006 5.3206805e+004 1.1092953e+005 -5.3719185e+003 1.1105952e+005 3.3262988e+005 + 5.4328313e+004 5.6950594e+005 5.7209144e+005 2.7408621e+004 6.3261145e+004 -3.1847014e+003 6.3341254e+004 1.2639526e+005 + 7.2206414e-009 1.3913182e-009 7.3534636e-009 -3.0649286e-007 2.1517380e-008 1.1998875e-007 1.2190283e-007 1.9667823e-011 + 9.4433219e+004 4.6489140e+006 4.6498730e+006 6.7601734e+004 1.3490747e+005 6.6308018e+003 1.3507033e+005 5.1406563e+005 + 1.0047254e+005 2.1960708e+006 2.1983678e+006 5.6204773e+004 1.1003465e+005 -1.3024308e+003 1.1004236e+005 3.3230744e+005 + 4.3648238e+004 5.6371981e+005 5.6540713e+005 2.8977684e+004 6.2589977e+004 -1.8347250e+003 6.2616863e+004 1.2627910e+005 + 1.1963142e-008 6.0773964e-010 1.1978568e-008 -7.2182424e-008 1.0788668e-008 2.8137741e-008 3.0135158e-008 1.0160761e-011 + -8.3800250e+004 4.6173065e+006 4.6180670e+006 7.1262977e+004 1.3421600e+005 1.5121382e+004 1.3506514e+005 5.1311459e+005 + 4.0509652e+004 2.1778573e+006 2.1782340e+006 5.9343938e+004 1.0930309e+005 2.7031121e+003 1.0933652e+005 3.3189731e+005 + 3.3089988e+004 5.5823350e+005 5.5921338e+005 3.0401730e+004 6.1980336e+004 -5.0855951e+002 6.1982422e+004 1.2616863e+005 + -7.2360085e-010 -1.7635351e-009 1.9062147e-009 -6.1030136e-008 1.4392896e-008 2.3731687e-008 2.7755151e-008 3.1121772e-012 + -2.5779445e+005 4.5962085e+006 4.6034325e+006 7.4489516e+004 1.3382472e+005 2.3468830e+004 1.3586700e+005 5.1186166e+005 + -1.7724371e+004 2.1642385e+006 2.1643110e+006 6.1991012e+004 1.0884046e+005 6.6025015e+003 1.0904054e+005 3.3139113e+005 + 2.2826002e+004 5.5355481e+005 5.5402525e+005 3.1421029e+004 6.1496457e+004 7.7343042e+002 6.1501320e+004 1.2605702e+005 + -1.1528046e-008 8.1843723e-009 1.4137885e-008 -1.6382275e-007 -6.7812806e-008 7.2003225e-008 9.8909254e-008 7.4322770e-012 + -4.2647966e+005 4.5880585e+006 4.6078375e+006 7.7151039e+004 1.3377806e+005 3.1631107e+004 1.3746672e+005 5.1026584e+005 + -7.3765719e+004 2.1567145e+006 2.1579758e+006 6.4073789e+004 1.0870848e+005 1.0373180e+004 1.0920227e+005 3.3075084e+005 + 1.2995375e+004 5.5001400e+005 5.5016750e+005 3.2135262e+004 6.1180184e+004 1.9992084e+003 6.1212840e+004 1.2591616e+005 + -1.5151405e-008 -1.0757351e-009 1.5189546e-008 1.6858542e-007 -3.7946307e-008 -6.7502803e-008 7.7437399e-008 -1.1141310e-011 + -5.8930906e+005 4.5930660e+006 4.6307170e+006 7.9281336e+004 1.3405869e+005 3.9598895e+004 1.3978484e+005 5.0830363e+005 + -1.2726105e+005 2.1557825e+006 2.1595355e+006 6.5646469e+004 1.0890295e+005 1.4002102e+004 1.0979941e+005 3.2995250e+005 + 3.6977095e+003 5.4791525e+005 5.4792769e+005 3.2580852e+004 6.1052281e+004 3.1584578e+003 6.1133926e+004 1.2573148e+005 + -4.4208770e-009 6.1587935e-009 7.5812192e-009 6.3573147e-008 -5.3274917e-008 -2.3700444e-008 5.8308903e-008 1.9738877e-011 + -7.4618625e+005 4.6096385e+006 4.6696425e+006 8.1032477e+004 1.3460200e+005 4.7371227e+004 1.4269453e+005 5.0596563e+005 + -1.7801794e+005 2.1611535e+006 2.1684730e+006 6.6866805e+004 1.0936642e+005 1.7490967e+004 1.1075626e+005 3.2897828e+005 + -4.9514473e+003 5.4754681e+005 5.4756919e+005 3.2854910e+004 6.1115555e+004 4.2433618e+003 6.1262688e+004 1.2548838e+005 + 1.8274269e-009 1.0258830e-008 1.0420321e-008 1.6269145e-007 -9.0042661e-008 -6.3815754e-008 1.1036363e-007 2.4016344e-011 + -8.9732569e+005 4.6352865e+006 4.7213425e+006 8.2558531e+004 1.3531869e+005 5.4944828e+004 1.4604822e+005 5.0324641e+005 + -2.2611809e+005 2.1720990e+006 2.1838370e+006 6.7886828e+004 1.1001913e+005 2.0848537e+004 1.1197710e+005 3.2781653e+005 + -1.2929668e+004 5.4910569e+005 5.4925788e+005 3.3037164e+004 6.1360762e+004 5.2550444e+003 6.1585375e+004 1.2517648e+005 + 3.8062828e-009 3.8454937e-009 5.4106941e-009 1.9156985e-008 1.1087607e-008 -8.3310354e-009 1.3868713e-008 -6.9348971e-012 + -1.0432889e+006 4.6675770e+006 4.7827530e+006 8.3997195e+004 1.3612673e+005 6.2320207e+004 1.4971405e+005 5.0013344e+005 + -2.7193428e+005 2.1877623e+006 2.2045980e+006 6.8827969e+004 1.1078977e+005 2.4090631e+004 1.1337870e+005 3.2645666e+005 + -2.0321857e+004 5.5262281e+005 5.5299631e+005 3.3187012e+004 6.1771168e+004 6.2041299e+003 6.2081949e+004 1.2478851e+005 + -3.8558876e-009 -1.7225137e-009 4.2231414e-009 6.3087093e-008 5.3002054e-008 -2.7468722e-008 5.9697136e-008 1.0857093e-011 + -1.1848374e+006 4.7046485e+006 4.8515520e+006 8.5435906e+004 1.3696714e+005 6.9503469e+004 1.5359273e+005 4.9661100e+005 + -3.1602569e+005 2.2073118e+006 2.2298200e+006 6.9780500e+004 1.1163394e+005 2.7234406e+004 1.1490800e+005 3.2489038e+005 + -2.7300254e+004 5.5791969e+005 5.5858725e+005 3.3350797e+004 6.2322621e+004 7.1084141e+003 6.2726699e+004 1.2432063e+005 + 1.3746807e-009 1.0866037e-009 1.7522713e-009 -2.7745072e-008 -4.7642047e-008 1.2327270e-008 4.9211035e-008 3.6664005e-012 + -1.3226455e+006 4.7454900e+006 4.9263645e+006 8.6993570e+004 1.3782581e+005 7.6500539e+004 1.5763339e+005 4.9267841e+005 + -3.5892647e+005 2.2299338e+006 2.2586350e+006 7.0856688e+004 1.1253783e+005 3.0293518e+004 1.1654381e+005 3.2311828e+005 + -3.4051000e+004 5.6462263e+005 5.6564844e+005 3.3572621e+004 6.2983434e+004 7.9856294e+003 6.3487664e+004 1.2377420e+005 + -2.1874158e-010 6.0223506e-009 6.0263217e-009 -9.9298290e-008 -3.4221912e-008 4.0726754e-008 5.3195940e-008 9.2086339e-012 + -1.4573315e+006 4.7895070e+006 5.0063150e+006 8.8590555e+004 1.3871698e+005 8.3323742e+004 1.6181856e+005 4.8836016e+005 + -4.0094459e+005 2.2548290e+006 2.2901988e+006 7.1992727e+004 1.1350243e+005 3.3283965e+004 1.1828197e+005 3.2115534e+005 + -4.0640637e+004 5.7222931e+005 5.7367069e+005 3.3858660e+004 6.3717750e+004 8.8439805e+003 6.4328590e+004 1.2315598e+005 + -1.5706612e-009 1.5597950e-009 2.2135800e-009 -5.8160765e-010 1.6781570e-008 1.0648904e-010 1.6781907e-008 4.2632564e-013 + -1.5890878e+006 4.8362140e+006 5.0905960e+006 9.0251680e+004 1.3966905e+005 8.9974109e+004 1.6614084e+005 4.8369934e+005 + -4.4215678e+005 2.2811285e+006 2.3235858e+006 7.3208781e+004 1.1452948e+005 3.6211215e+004 1.2011767e+005 3.1902459e+005 + -4.7089039e+004 5.8022813e+005 5.8213581e+005 3.4220387e+004 6.4488180e+004 9.6851953e+003 6.5211414e+004 1.2247612e+005 + -6.8960526e-010 5.4174487e-009 5.4611635e-009 5.4492411e-009 1.0867183e-009 -2.1611086e-009 2.4189557e-009 -1.2875034e-011 + -1.7179148e+006 4.8848655e+006 5.1781410e+006 9.1985461e+004 1.4069519e+005 9.6448703e+004 1.7057986e+005 4.7873494e+005 + -4.8252303e+005 2.3079813e+006 2.3578818e+006 7.4507180e+004 1.1561110e+005 3.9076570e+004 1.2203649e+005 3.1674775e+005 + -5.3379844e+004 5.8818394e+005 5.9060119e+005 3.4659082e+004 6.5260711e+004 1.0507559e+004 6.6101203e+004 1.2174411e+005 + 7.4325990e-011 -5.1914837e-009 5.1920157e-009 -7.7699092e-010 1.5506942e-008 3.6067860e-010 1.5511135e-008 -6.0396133e-012 + -1.8435568e+006 4.9342740e+006 5.2674245e+006 9.3794508e+004 1.4177298e+005 1.0272732e+005 1.7507850e+005 4.7348188e+005 + -5.2205041e+005 2.3346430e+006 2.3922990e+006 7.5888805e+004 1.1672453e+005 4.1873508e+004 1.2400809e+005 3.1433619e+005 + -5.9552566e+004 5.9579375e+005 5.9876269e+005 3.5174246e+004 6.6010531e+004 1.1313232e+004 6.6972977e+004 1.2096643e+005 + 1.3044622e-009 9.2022123e-010 1.5963799e-009 -1.2452483e-008 -1.7902195e-008 4.6658712e-009 1.8500241e-008 9.1944230e-012 + -1.9655459e+006 4.9827740e+006 5.3564360e+006 9.5675219e+004 1.4284458e+005 1.0877906e+005 1.7954792e+005 4.6793953e+005 + -5.6075175e+005 2.3604570e+006 2.4261493e+006 7.7354844e+004 1.1782981e+005 4.4589199e+004 1.2598437e+005 3.1179441e+005 + -6.5675594e+004 6.0290738e+005 6.0647388e+005 3.5764473e+004 6.6721852e+004 1.2106246e+004 6.7811258e+004 1.2014769e+005 + 1.1929806e-009 6.2017902e-009 6.3154895e-009 -2.7280104e-008 -4.4941018e-008 9.8341815e-009 4.6004413e-008 2.2282620e-011 + -2.0832643e+006 5.0284040e+006 5.4428700e+006 9.7615375e+004 1.4383716e+005 1.1457790e+005 1.8389459e+005 4.6211334e+005 + -5.9846006e+005 2.3847800e+006 2.4587253e+006 7.8895648e+004 1.1887268e+005 4.7208141e+004 1.2790356e+005 3.0912913e+005 + -7.1742906e+004 6.0950838e+005 6.1371613e+005 3.6418746e+004 6.7383969e+004 1.2884231e+004 6.8604680e+004 1.1929320e+005 + 4.5066848e-009 -1.5671997e-009 4.7714068e-009 -2.6749262e-008 -2.0504999e-008 9.7753414e-009 2.2715904e-008 1.1297629e-011 + -2.1960210e+006 5.0692770e+006 5.5244980e+006 9.9592859e+004 1.4468677e+005 1.2011207e+005 1.8804566e+005 4.5602641e+005 + -6.3473919e+005 2.4069868e+006 2.4892728e+006 8.0491148e+004 1.1979542e+005 4.9715289e+004 1.2970178e+005 3.0635375e+005 + -7.7618586e+004 6.1566263e+005 6.2053619e+005 3.7118641e+004 6.7988273e+004 1.3634036e+004 6.9341852e+004 1.1840918e+005 + -3.6766603e-009 -2.1752369e-009 4.2719419e-009 -2.7310707e-008 -4.8902820e-009 1.0168058e-008 1.1282919e-008 1.7763568e-011 + -2.3030998e+006 5.1040720e+006 5.5996270e+006 1.0158479e+005 1.4535455e+005 1.2537488e+005 1.9195522e+005 4.4971106e+005 + -6.6903656e+005 2.4266073e+006 2.5171478e+006 8.2114992e+004 1.2055481e+005 5.2096289e+004 1.3132969e+005 3.0348413e+005 + -8.3106953e+004 6.2145038e+005 6.2698275e+005 3.7844590e+004 6.8528414e+004 1.4337706e+004 7.0012234e+004 1.1750094e+005 + 4.0280472e-009 4.3519028e-009 5.9299428e-009 -1.3694139e-008 -1.0889607e-008 4.8117954e-009 1.1905332e-008 -9.0381036e-012 + -2.4036660e+006 5.1323985e+006 5.6673735e+006 1.0356601e+005 1.4583005e+005 1.3033810e+005 1.9558738e+005 4.4318672e+005 + -7.0096181e+005 2.4435045e+006 2.5420585e+006 8.3740094e+004 1.2113745e+005 5.4332664e+004 1.3276414e+005 3.0052941e+005 + -8.8106094e+004 6.2690900e+005 6.3306994e+005 3.8579742e+004 6.9002828e+004 1.4984816e+004 7.0611156e+004 1.1657088e+005 + -9.6791086e-010 -3.1182879e-010 1.0169015e-009 8.5095699e-009 -6.7660721e-010 -3.1779877e-009 3.2492158e-009 3.4816594e-012 + -2.4968790e+006 5.1548235e+006 5.7277055e+006 1.0551141e+005 1.4612553e+005 1.3495648e+005 1.9891186e+005 4.3645284e+005 + -7.3036181e+005 2.4579190e+006 2.5641363e+006 8.5343656e+004 1.2156321e+005 5.6403426e+004 1.3401105e+005 2.9748963e+005 + -9.2637781e+004 6.3201113e+005 6.3876425e+005 3.9314164e+004 6.9415555e+004 1.5575002e+004 7.1141406e+004 1.1561907e+005 + 9.7281143e-009 5.2500226e-010 9.7422701e-009 -3.6569894e-008 -7.0742061e-009 1.3222660e-008 1.4996104e-008 7.9580786e-013 + -2.5820455e+006 5.1725715e+006 5.7812160e+006 1.0739450e+005 1.4627288e+005 1.3919230e+005 2.0191644e+005 4.2950216e+005 + -7.5714913e+005 2.4703173e+006 2.5837458e+006 8.6903656e+004 1.2187373e+005 5.8289871e+004 1.3509594e+005 2.9436178e+005 + -9.6749852e+004 6.3668444e+005 6.4399350e+005 4.0039586e+004 6.9773758e+004 1.6109956e+004 7.1609414e+004 1.1464547e+005 + 4.9168580e-009 2.7774192e-009 5.6470832e-009 -2.8190229e-008 1.1840484e-010 1.0334304e-008 1.0334983e-008 1.0530243e-011 + -2.6587100e+006 5.1870775e+006 5.8287660e+006 1.0918625e+005 1.4631948e+005 1.4303402e+005 2.0461702e+005 4.2234197e+005 + -7.8111494e+005 2.4811710e+006 2.6012210e+006 8.8393961e+004 1.2211430e+005 5.9980078e+004 1.3604967e+005 2.9114841e+005 + -1.0040671e+005 6.4086038e+005 6.4867831e+005 4.0743098e+004 7.0084172e+004 1.6584721e+004 7.2019750e+004 1.1365172e+005 + 7.4371936e-010 3.6650318e-009 3.7397294e-009 -1.0711551e-007 -7.6295848e-008 3.5864474e-008 8.4304908e-008 1.6314061e-011 + -2.7266255e+006 5.1996220e+006 5.8711630e+006 1.1075180e+005 1.4631917e+005 1.4648870e+005 2.0704647e+005 4.1500594e+005 + -8.0196125e+005 2.4908230e+006 2.6167425e+006 8.9689211e+004 1.2232202e+005 6.1468277e+004 1.3689786e+005 2.8786506e+005 + -1.0350608e+005 6.4450638e+005 6.5276488e+005 4.1353977e+004 7.0349633e+004 1.6989396e+004 7.2372023e+004 1.1264488e+005 + 1.2749884e-010 2.7838443e-010 3.0619249e-010 8.0451557e-008 -3.3626876e-008 -3.0700917e-008 4.5533646e-008 -1.9440449e-011 + -2.7856803e+006 5.2111115e+006 5.9089505e+006 1.1217122e+005 1.4631819e+005 1.4955661e+005 2.0922759e+005 4.0752813e+005 + -8.1954144e+005 2.4994955e+006 2.6304230e+006 9.0862563e+004 1.2251593e+005 6.2754152e+004 1.3765259e+005 2.8451994e+005 + -1.0597832e+005 6.4767031e+005 6.5628363e+005 4.1912258e+004 7.0575305e+004 1.7318197e+004 7.2669070e+004 1.1162252e+005 + -4.9149214e-009 -1.4785586e-009 5.1325029e-009 2.6770905e-009 2.0633365e-008 -4.3485215e-012 2.0633365e-008 2.0776270e-011 + -2.8359133e+006 5.2221505e+006 5.9424960e+006 1.1349227e+005 1.4633958e+005 1.5222516e+005 2.1115816e+005 3.9992978e+005 + -8.3398681e+005 2.5074513e+006 2.6425075e+006 9.1957836e+004 1.2270690e+005 6.3839734e+004 1.3832027e+005 2.8111859e+005 + -1.0787148e+005 6.5045513e+005 6.5933913e+005 4.2440387e+004 7.0770586e+004 1.7575510e+004 7.2920328e+004 1.1058342e+005 + -1.1146257e-008 -6.1451892e-009 1.2728016e-008 5.2406683e-009 2.5158755e-008 -6.7350214e-010 2.5167768e-008 -7.3896445e-012 + -2.8775920e+006 5.2331805e+006 5.9721615e+006 1.1472167e+005 1.4638119e+005 1.5448392e+005 2.1282089e+005 3.9220856e+005 + -8.4562369e+005 2.5150818e+006 2.6534348e+006 9.2980383e+004 1.2290436e+005 6.4730801e+004 1.3890845e+005 2.7765863e+005 + -1.0931026e+005 6.5299825e+005 6.6208413e+005 4.2937504e+004 7.0949313e+004 1.7772625e+004 7.3141445e+004 1.0952629e+005 + 1.6385633e-009 -1.0870504e-009 1.9663593e-009 -1.6573747e-008 -8.1881666e-009 5.5509091e-009 9.8923536e-009 1.6200374e-011 + -2.9112228e+006 5.2444830e+006 5.9983180e+006 1.1586763e+005 1.4642716e+005 1.5634008e+005 2.1420348e+005 3.8435353e+005 + -8.5478763e+005 2.5228005e+006 2.6636788e+006 9.3937305e+004 1.2311413e+005 6.5438711e+004 1.3942494e+005 2.7413475e+005 + -1.1040009e+005 6.5545413e+005 6.6468663e+005 4.3403695e+004 7.1127328e+004 1.7919678e+004 7.3349922e+004 1.0844959e+005 + 5.9995181e-010 7.5262694e-009 7.5501445e-009 6.7231419e-008 -3.5225881e-008 -2.5869689e-008 4.3704731e-008 9.1944230e-012 + -2.9374830e+006 5.2562430e+006 6.0213700e+006 1.1693734e+005 1.4646881e+005 1.5782231e+005 2.1531603e+005 3.7637484e+005 + -8.6169538e+005 2.5308908e+006 2.6735608e+006 9.4834094e+004 1.2333686e+005 6.5980023e+004 1.3987617e+005 2.7055103e+005 + -1.1116700e+005 6.5797700e+005 6.6730188e+005 4.3837121e+004 7.1316508e+004 1.8020844e+004 7.3558109e+004 1.0735430e+005 + 7.6134494e-009 4.8804623e-009 9.0434247e-009 1.4420436e-007 -1.6898341e-008 -5.2347914e-008 5.5007799e-008 -1.1453949e-011 + -2.9570160e+006 5.2686285e+006 6.0417210e+006 1.1793512e+005 1.4651270e+005 1.5896027e+005 2.1618125e+005 3.6830681e+005 + -8.6649606e+005 2.5394848e+006 2.6832440e+006 9.5672914e+004 1.2357016e+005 6.6371750e+004 1.4026686e+005 2.6692219e+005 + -1.1160065e+005 6.6070194e+005 6.7006100e+005 4.4236406e+004 7.1523539e+004 1.8077541e+004 7.3772719e+004 1.0624387e+005 + 1.4663188e-009 -4.3314010e-009 4.5728683e-009 7.9280525e-008 2.9500967e-008 -2.6678656e-008 3.9775088e-008 -1.2519763e-011 + -2.9703000e+006 5.2819380e+006 6.0598310e+006 1.1886682e+005 1.4657630e+005 1.5976663e+005 2.1681788e+005 3.6018816e+005 + -8.6938906e+005 2.5486778e+006 2.6928788e+006 9.6458930e+004 1.2381645e+005 6.6626844e+004 1.4060458e+005 2.6326528e+005 + -1.1172891e+005 6.6371581e+005 6.7305425e+005 4.4604246e+004 7.1751977e+004 1.8094299e+004 7.3998313e+004 1.0512230e+005 + 1.3300749e-009 8.6973042e-009 8.7984207e-009 1.1729819e-007 -6.4486017e-009 -4.1888498e-008 4.2381963e-008 -3.9648285e-012 + -2.9776083e+006 5.2966635e+006 6.0762485e+006 1.1973928e+005 1.4667763e+005 1.6023486e+005 2.1723153e+005 3.5204113e+005 + -8.7064644e+005 2.5586395e+006 2.7027135e+006 9.7197477e+004 1.2408887e+005 6.6752070e+004 1.4090381e+005 2.5959136e+005 + -1.1164297e+005 6.6703988e+005 6.7631825e+005 4.4948750e+004 7.2005203e+004 1.8080211e+004 7.4240438e+004 1.0399266e+005 + -3.1253240e-009 1.1092993e-010 3.1272920e-009 -7.1457706e-008 -6.4875707e-008 2.1875302e-008 6.8464487e-008 1.1127099e-011 + -2.9789733e+006 5.3133240e+006 6.0914440e+006 1.2057229e+005 1.4682472e+005 1.6034870e+005 2.1741481e+005 3.4386759e+005 + -8.7048825e+005 2.5696108e+006 2.7130515e+006 9.7909844e+004 1.2440683e+005 6.6747109e+004 1.4118156e+005 2.5590389e+005 + -1.1144613e+005 6.7063338e+005 6.7983038e+005 4.5281387e+004 7.2287141e+004 1.8044244e+004 7.4505203e+004 1.0285723e+005 + 4.6844097e-009 1.2326158e-009 4.8438662e-009 -1.6274483e-007 -4.9798729e-008 5.4599113e-008 7.3898420e-008 1.1951329e-011 + -2.9742495e+006 5.3322855e+006 6.1056880e+006 1.2136424e+005 1.4702336e+005 1.6010298e+005 2.1736797e+005 3.3567469e+005 + -8.6888631e+005 2.5817335e+006 2.7240248e+006 9.8595828e+004 1.2478610e+005 6.6607539e+004 1.4145011e+005 2.5220914e+005 + -1.1114854e+005 6.7443025e+005 6.8352769e+005 4.5605813e+004 7.2598922e+004 1.7986805e+004 7.4793906e+004 1.0171992e+005 + -1.1985347e-009 1.8815371e-008 1.8853505e-008 8.1898783e-008 -6.9199132e-008 -3.2049122e-008 7.6260520e-008 -9.9475983e-014 + -2.9630713e+006 5.3535605e+006 6.1188560e+006 1.2210195e+005 1.4727969e+005 1.5950222e+005 2.1709966e+005 3.2748978e+005 + -8.6551731e+005 2.5949295e+006 2.7354668e+006 9.9243938e+004 1.2522852e+005 6.6324875e+004 1.4170805e+005 2.4852166e+005 + -1.1064383e+005 6.7837663e+005 6.8734044e+005 4.5916410e+004 7.2937461e+004 1.7897699e+004 7.5101273e+004 1.0058653e+005 + -8.7384400e-010 -2.4936417e-009 2.6423195e-009 1.9432814e-008 -7.7480422e-010 -6.7852000e-009 6.8292940e-009 -8.6970431e-012 + -2.9448123e+006 5.3768155e+006 6.1304210e+006 1.2276976e+005 1.4759828e+005 1.5854420e+005 2.1661375e+005 3.1935378e+005 + -8.5990488e+005 2.6089335e+006 2.7469930e+006 9.9840555e+004 1.2572255e+005 6.5885445e+004 1.4194031e+005 2.4486048e+005 + -1.0977427e+005 6.8244656e+005 6.9121900e+005 4.6207176e+004 7.3295992e+004 1.7761959e+004 7.5417438e+004 9.9462977e+004 + 7.9647471e-009 1.1378641e-008 1.3889228e-008 -1.1840703e-007 -8.9944805e-008 3.6623284e-008 9.7115048e-008 6.3664629e-012 + -2.9186883e+006 5.4015665e+006 6.1396790e+006 1.2335656e+005 1.4797833e+005 1.5721223e+005 2.1590106e+005 3.1130466e+005 + -8.5160506e+005 2.6234423e+006 2.7582025e+006 1.0037646e+005 1.2625141e+005 6.5271758e+004 1.4212606e+005 2.4124228e+005 + -1.0841216e+005 6.8662881e+005 6.9513475e+005 4.6473086e+004 7.3667102e+004 1.7567090e+004 7.5732719e+004 9.8353680e+004 + -6.3768972e-009 -8.8694625e-009 1.0923928e-008 7.0914922e-008 1.5507879e-008 -2.3626242e-008 2.8261168e-008 -1.7479351e-012 + -2.8838170e+006 5.4273220e+006 6.1459110e+006 1.2385526e+005 1.4840422e+005 1.5547145e+005 2.1493066e+005 3.0335522e+005 + -8.4031388e+005 2.6382678e+006 2.7688598e+006 1.0084608e+005 1.2680202e+005 6.4462816e+004 1.4224700e+005 2.3767238e+005 + -1.0650903e+005 6.9090675e+005 6.9906819e+005 4.6713129e+004 7.4046484e+004 1.7307063e+004 7.6042203e+004 9.7259766e+004 + 8.1446565e-009 7.5320914e-009 1.1093594e-008 -1.6886463e-007 -3.6136498e-008 5.6021747e-008 6.6665457e-008 -9.2512664e-012 + -2.8394768e+006 5.4536620e+006 6.1485815e+006 1.2425984e+005 1.4885158e+005 1.5329461e+005 2.1367272e+005 2.9550234e+005 + -8.2579100e+005 2.6533308e+006 2.7788658e+006 1.0124430e+005 1.2736645e+005 6.3440684e+004 1.4229172e+005 2.3414897e+005 + -1.0403644e+005 6.9524938e+005 7.0299019e+005 4.6926176e+004 7.4432961e+004 1.6977428e+004 7.6344602e+004 9.6180766e+004 + 2.7300984e-010 4.3140016e-009 4.3226316e-009 -1.1180913e-007 2.4703866e-009 3.7981550e-008 3.8061803e-008 1.1326051e-011 + -2.7852098e+006 5.4801710e+006 6.1473300e+006 1.2456103e+005 1.4929584e+005 1.5067530e+005 2.1211386e+005 2.8774347e+005 + -8.0777563e+005 2.6685540e+006 2.7881323e+006 1.0156088e+005 1.2793714e+005 6.2193879e+004 1.4225327e+005 2.3067000e+005 + -1.0093087e+005 6.9962063e+005 7.0686356e+005 4.7107207e+004 7.4825555e+004 1.6571135e+004 7.6638547e+004 9.5116125e+004 + 3.4520864e-010 3.7134171e-009 3.7294283e-009 2.7257892e-007 -1.4861357e-008 -9.2313698e-008 9.3502294e-008 8.2422957e-012 + -2.7208935e+006 5.5064020e+006 6.1419645e+006 1.2474416e+005 1.4972272e+005 1.4762898e+005 2.1026461e+005 2.8009394e+005 + -7.8601488e+005 2.6837645e+006 2.7964998e+006 1.0178063e+005 1.2850181e+005 6.0719957e+004 1.4212539e+005 2.2724022e+005 + -9.7093656e+004 7.0399700e+005 7.1066094e+005 4.7247426e+004 7.5221453e+004 1.6078933e+004 7.6920734e+004 9.4066570e+004 + -4.0885240e-010 -2.7867575e-010 4.9479332e-010 -7.2056991e-008 -1.7621630e-008 2.3504896e-008 2.9376896e-008 2.6290081e-012 + -2.6466633e+006 5.5320345e+006 6.1325550e+006 1.2467912e+005 1.5013353e+005 1.4417094e+005 2.0814739e+005 2.7258150e+005 + -7.6044019e+005 2.6987038e+006 2.8037958e+006 1.0178080e+005 1.2905280e+005 5.9022715e+004 1.4190950e+005 2.2387169e+005 + -9.2473000e+004 7.0832481e+005 7.1433556e+005 4.7281133e+004 7.5608547e+004 1.5497876e+004 7.7180547e+004 9.3036906e+004 + 4.0854209e-009 1.2677326e-010 4.0873873e-009 -8.8398728e-009 1.0413572e-008 3.2499869e-009 1.0908937e-008 -3.6664005e-012 + -2.5628488e+006 5.5566645e+006 6.1192085e+006 1.2449566e+005 1.5052905e+005 1.4030283e+005 2.0577628e+005 2.6522747e+005 + -7.3129231e+005 2.7130975e+006 2.8099265e+006 1.0168760e+005 1.2957577e+005 5.7110777e+004 1.4160339e+005 2.2056625e+005 + -8.7136180e+004 7.1258219e+005 7.1789000e+005 4.7279219e+004 7.5980203e+004 1.4835416e+004 7.7414992e+004 9.2021844e+004 + 8.3335205e-009 -3.4756225e-009 9.0292591e-009 -8.1198962e-008 -1.9038751e-008 2.6321558e-008 3.2485357e-008 -6.6791017e-012 + -2.4698913e+006 5.5799505e+006 6.1021480e+006 1.2430649e+005 1.5089850e+005 1.3601688e+005 2.0315253e+005 2.5803772e+005 + -6.9900256e+005 2.7268175e+006 2.8149845e+006 1.0160937e+005 1.3006098e+005 5.4994707e+004 1.4121005e+005 2.1732223e+005 + -8.1230039e+004 7.1675600e+005 7.2134425e+005 4.7306094e+004 7.6336633e+004 1.4105302e+004 7.7628867e+004 9.1017406e+004 + 1.2585275e-009 1.3316391e-008 1.3375730e-008 -2.5666758e-009 -7.3394489e-008 -6.8200023e-010 7.3397658e-008 1.0800250e-011 + -2.3683905e+006 5.6017500e+006 6.0818485e+006 1.2395613e+005 1.5122063e+005 1.3132295e+005 2.0028330e+005 2.5100377e+005 + -6.6394788e+005 2.7399013e+006 2.8191995e+006 1.0139225e+005 1.3051283e+005 5.2686711e+004 1.4074617e+005 2.1414253e+005 + -7.4882570e+004 7.2078488e+005 7.2466425e+005 4.7273484e+004 7.6678805e+004 1.3318586e+004 7.7826883e+004 9.0031328e+004 + 3.2734238e-009 -7.2387518e-010 3.3525063e-009 -7.0920549e-008 -4.5501380e-008 2.2408663e-008 5.0720054e-008 2.1174174e-012 + -2.2597488e+006 5.6219950e+006 6.0591495e+006 1.2348430e+005 1.5149575e+005 1.2630058e+005 1.9723792e+005 2.4413530e+005 + -6.2636581e+005 2.7522818e+006 2.8226563e+006 1.0107252e+005 1.3093041e+005 5.0221426e+004 1.4023183e+005 2.1102867e+005 + -6.8053523e+004 7.2461488e+005 7.2780356e+005 4.7203684e+004 7.7004070e+004 1.2475218e+004 7.8008063e+004 8.9062078e+004 + 2.0320405e-009 -6.4096950e-009 6.7240897e-009 3.6549892e-009 -1.4320364e-008 -1.3339374e-009 1.4382358e-008 -1.1084467e-012 + -2.1453668e+006 5.6406250e+006 6.0348365e+006 1.2296604e+005 1.5173425e+005 1.2101633e+005 1.9408306e+005 2.3746355e+005 + -5.8664756e+005 2.7638280e+006 2.8254028e+006 1.0072409e+005 1.3130986e+005 4.7632500e+004 1.3968227e+005 2.0799200e+005 + -6.0780352e+004 7.2822163e+005 7.3075369e+005 4.7130262e+004 7.7306398e+004 1.1582598e+004 7.8169273e+004 8.8110398e+004 + -3.7305270e-011 2.0583979e-009 2.0587358e-009 -1.5388189e-009 -1.8486574e-008 4.0161297e-010 1.8490935e-008 -1.3869794e-011 + -2.0262050e+006 5.6576390e+006 6.0095245e+006 1.2232793e+005 1.5194092e+005 1.1547632e+005 1.9084241e+005 2.3101511e+005 + -5.4548794e+005 2.7744865e+006 2.8276018e+006 1.0027793e+005 1.3165155e+005 4.4941691e+004 1.3911106e+005 2.0504805e+005 + -5.3283160e+004 7.3159475e+005 7.3353250e+005 4.7015844e+004 7.7583211e+004 1.0662077e+004 7.8312414e+004 8.7183695e+004 + -5.1325699e-010 -1.0711894e-009 1.1878044e-009 3.1462740e-008 -3.7234742e-008 -1.0072796e-008 3.8573141e-008 -2.7995384e-012 + -1.9030343e+006 5.6729120e+006 5.9836000e+006 1.2177484e+005 1.5210442e+005 1.0966895e+005 1.8751808e+005 2.2478798e+005 + -5.0362175e+005 2.7843025e+006 2.8294833e+006 9.9932219e+004 1.3195120e+005 4.2167102e+004 1.3852503e+005 2.0219263e+005 + -4.5810883e+004 7.3476081e+005 7.3618750e+005 4.6979324e+004 7.7841320e+004 9.7370674e+003 7.8447953e+004 8.6276117e+004 + 2.5352582e-009 -7.9570208e-009 8.3511509e-009 1.3675010e-008 -1.5271212e-008 -4.2721524e-009 1.5857527e-008 1.3514523e-011 + -1.7765143e+006 5.6865490e+006 5.9575870e+006 1.2121048e+005 1.5222219e+005 1.0361130e+005 1.8413825e+005 2.1879672e+005 + -4.6140378e+005 2.7933573e+006 2.8312080e+006 9.9592297e+004 1.3221422e+005 3.9322563e+004 1.3793791e+005 1.9944178e+005 + -3.8472152e+004 7.3772800e+005 7.3873044e+005 4.6957910e+004 7.8081781e+004 8.8181445e+003 7.8578141e+004 8.5400172e+004 + 8.0130014e-010 -6.0004890e-010 1.0010697e-009 -1.1011966e-007 6.4065546e-008 3.4236351e-008 7.2639672e-008 1.8530955e-011 + -1.6472588e+006 5.6987540e+006 5.9320535e+006 1.2057316e+005 1.5230634e+005 9.7355016e+004 1.8076289e+005 2.1307150e+005 + -4.1878997e+005 2.8016728e+006 2.8328000e+006 9.9199898e+004 1.3244625e+005 3.6422125e+004 1.3736295e+005 1.9681383e+005 + -3.1186992e+004 7.4050088e+005 7.4115731e+005 4.6913461e+004 7.8302805e+004 7.9001782e+003 7.8700328e+004 8.4564797e+004 + -1.8692834e-009 -6.3543597e-009 6.6236026e-009 -7.2603591e-008 2.3948758e-008 2.2549514e-008 3.2894128e-008 9.0096819e-012 + -1.5156321e+006 5.7097635e+006 5.9074985e+006 1.1983847e+005 1.5237930e+005 9.0945992e+004 1.7745597e+005 2.0765758e+005 + -3.7560153e+005 2.8092305e+006 2.8342288e+006 9.8734586e+004 1.3264878e+005 3.3475707e+004 1.3680761e+005 1.9433055e+005 + -2.3836330e+004 7.4307931e+005 7.4346156e+005 4.6841621e+004 7.8504438e+004 6.9733936e+003 7.8813547e+004 8.3776398e+004 + 1.7611590e-009 -9.6365582e-011 1.7637934e-009 -7.5297123e-008 7.0792652e-009 2.3556240e-008 2.4597000e-008 1.0729195e-011 + -1.3815374e+006 5.7200980e+006 5.8845700e+006 1.1901630e+005 1.5247038e+005 8.4387914e+004 1.7426570e+005 2.0258877e+005 + -3.3175688e+005 2.8160958e+006 2.8355703e+006 9.8207875e+004 1.3283722e+005 3.0479545e+004 1.3628914e+005 1.9200780e+005 + -1.6391295e+004 7.4545588e+005 7.4563606e+005 4.6742844e+004 7.8685328e+004 6.0357090e+003 7.8916477e+004 8.3039438e+004 + -3.5522381e-009 -5.4605263e-009 6.5142722e-009 -9.9195887e-008 1.7900803e-008 3.0619546e-008 3.5468229e-008 -7.1054274e-013 + -1.2445448e+006 5.7302770e+006 5.8638695e+006 1.1809988e+005 1.5259363e+005 7.7646438e+004 1.7121269e+005 1.9787575e+005 + -2.8728025e+005 2.8225025e+006 2.8370848e+006 9.7609922e+004 1.3302519e+005 2.7424279e+004 1.3582266e+005 1.8985188e+005 + -8.9151563e+003 7.4760981e+005 7.4766300e+005 4.6622855e+004 7.8850211e+004 5.0909922e+003 7.9014391e+004 8.2356172e+004 + -4.6860968e-009 -3.1912757e-009 5.6695453e-009 1.9854288e-007 5.7990107e-008 -6.4045864e-008 8.6398643e-008 -8.1143980e-012 + -1.1039931e+006 5.7408325e+006 5.8460205e+006 1.1724145e+005 1.5275142e+005 7.0681258e+004 1.6831172e+005 1.9350359e+005 + -2.4211669e+005 2.8287520e+006 2.8390948e+006 9.7082367e+004 1.3323441e+005 2.4291121e+004 1.3543067e+005 1.8785494e+005 + -1.4528032e+003 7.4956250e+005 7.4956388e+005 4.6551098e+004 7.9011609e+004 4.1407183e+003 7.9120031e+004 8.1722234e+004 + 7.8855233e-009 6.2307404e-009 1.0050054e-008 -7.8918099e-009 2.7186076e-009 2.3504185e-009 3.5937855e-009 -1.4040324e-011 + -9.5917094e+005 5.7521375e+006 5.8315600e+006 1.1625158e+005 1.5294377e+005 6.3475898e+004 1.6559283e+005 1.8947817e+005 + -1.9592913e+005 2.8350900e+006 2.8418520e+006 9.6440102e+004 1.3347678e+005 2.1062246e+004 1.3512834e+005 1.8602723e+005 + 6.0560464e+003 7.5131644e+005 7.5134088e+005 4.6425668e+004 7.9169391e+004 3.1778074e+003 7.9233141e+004 8.1148266e+004 + -9.8359489e-009 9.2163761e-009 1.3479150e-008 9.6646033e-008 -3.3082344e-008 -2.8505276e-008 4.3669122e-008 8.9528385e-013 + -8.0974569e+005 5.7640700e+006 5.8206695e+006 1.1511630e+005 1.5316114e+005 5.6066426e+004 1.6310052e+005 1.8580753e+005 + -1.4812008e+005 2.8415738e+006 2.8454315e+006 9.5670234e+004 1.3374459e+005 1.7730744e+004 1.3491478e+005 1.8437056e+005 + 1.3841538e+004 7.5293744e+005 7.5306463e+005 4.6244043e+004 7.9328867e+004 2.1809492e+003 7.9358844e+004 8.0633516e+004 + 6.8482304e-009 1.0398574e-008 1.2451047e-008 -2.9968095e-007 -5.1830341e-008 9.5429350e-008 1.0859625e-007 -1.5489832e-012 + -6.5553938e+005 5.7763340e+006 5.8134125e+006 1.1383513e+005 1.5339939e+005 4.8495977e+004 1.6088267e+005 1.8250953e+005 + -9.8158820e+004 2.8480775e+006 2.8497685e+006 9.4774922e+004 1.3402648e+005 1.4290646e+004 1.3478620e+005 1.8288913e+005 + 2.2133992e+004 7.5451500e+005 7.5483956e+005 4.5995551e+004 7.9490500e+004 1.1300226e+003 7.9498531e+004 8.0176609e+004 + -1.5087707e-008 7.0043162e-009 1.6634283e-008 1.5431202e-007 -6.5155618e-008 -4.3844807e-008 7.8534207e-008 -1.1510792e-012 + -4.9644566e+005 5.7885045e+006 5.8097540e+006 1.1240505e+005 1.5364631e+005 4.0773258e+004 1.5896430e+005 1.7959603e+005 + -4.5880969e+004 2.8545043e+006 2.8548730e+006 9.3750719e+004 1.3430386e+005 1.0740671e+004 1.3473266e+005 1.8158334e+005 + 3.0998594e+004 7.5613413e+005 7.5676925e+005 4.5680617e+004 7.9655156e+004 1.9259068e+001 7.9655164e+004 7.9774047e+004 + 7.5462880e-009 -2.5165718e-009 7.9548474e-009 -5.2105696e-007 -3.3620736e-008 1.6236453e-007 1.6580891e-007 3.4106051e-012 + -3.3240859e+005 5.8003555e+006 5.8098725e+006 1.1085076e+005 1.5388964e+005 3.2870176e+004 1.5736095e+005 1.7706239e+005 + 8.4546387e+003 2.8608490e+006 2.8608615e+006 9.2619164e+004 1.3456861e+005 7.0790815e+003 1.3475467e+005 1.8044689e+005 + 4.0315602e+004 7.5784881e+005 7.5892044e+005 4.5313789e+004 7.9824719e+004 -1.1408463e+003 7.9832875e+004 7.9421148e+004 + -9.9122026e-009 -2.1479174e-009 1.0142253e-008 -2.0026310e-007 2.2898888e-008 5.9744551e-008 6.3982576e-008 -6.9775297e-012 + -1.6372258e+005 5.8118690e+006 5.8141745e+006 1.0920135e+005 1.5412033e+005 2.4770332e+004 1.5609819e+005 1.7489331e+005 + 6.4440176e+004 2.8671790e+006 2.8679030e+006 9.1403563e+004 1.3482203e+005 3.3120532e+003 1.3486270e+005 1.7947044e+005 + 4.9929602e+004 7.5966275e+005 7.6130181e+005 4.4910797e+004 8.0001078e+004 -2.3360852e+003 8.0035180e+004 7.9114055e+004 + -4.0186581e-008 8.7512406e-009 4.1128402e-008 2.9634771e-007 -3.5505664e-008 -8.7731486e-008 9.4643887e-008 2.7142733e-012 + 8.7348770e+003 5.8231305e+006 5.8231370e+006 1.0746359e+005 1.5433733e+005 1.6510428e+004 1.5521794e+005 1.7307805e+005 + 1.2178306e+005 2.8735415e+006 2.8761210e+006 9.0109109e+004 1.3506966e+005 -5.4009314e+002 1.3507073e+005 1.7864797e+005 + 5.9789352e+004 7.6153394e+005 7.6387744e+005 4.4476566e+004 8.0183898e+004 -3.5602024e+003 8.0262898e+004 7.8850898e+004 + -2.3491930e-008 3.3208938e-009 2.3725494e-008 2.1536468e-007 -7.4600919e-008 -5.9234644e-008 9.5257761e-008 2.9132252e-012 + 1.8372070e+005 5.8343070e+006 5.8371990e+006 1.0565055e+005 1.5455436e+005 8.1624155e+003 1.5476975e+005 1.7161991e+005 + 1.8023873e+005 2.8798720e+006 2.8855068e+006 8.8741039e+004 1.3531747e+005 -4.4481055e+003 1.3539056e+005 1.7797986e+005 + 6.9918563e+004 7.6340275e+005 7.6659788e+005 4.4008313e+004 8.0369422e+004 -4.8122031e+003 8.0513359e+004 7.8631375e+004 + -3.8553809e-009 -4.3557247e-010 3.8799080e-009 6.7376163e-007 -1.3370212e-008 -2.0301192e-007 2.0345172e-007 3.8511416e-012 + 3.5992913e+005 5.8454615e+006 5.8565320e+006 1.0376609e+005 1.5478564e+005 -2.1419301e+002 1.5478578e+005 1.7053400e+005 + 2.3941394e+005 2.8860680e+006 2.8959813e+006 8.7305742e+004 1.3556730e+005 -8.3813994e+003 1.3582614e+005 1.7747134e+005 + 8.0265750e+004 7.6521306e+005 7.6941125e+005 4.3509840e+004 8.0552648e+004 -6.0846943e+003 8.0782133e+004 7.8455875e+004 + -2.8478866e-009 -2.7112090e-010 2.8607630e-009 3.9415789e-007 2.4187344e-008 -1.2142260e-007 1.2380822e-007 -1.1425527e-011 + 5.3635650e+005 5.8566115e+006 5.8811205e+006 1.0183555e+005 1.5504113e+005 -8.6071406e+003 1.5527986e+005 1.6983280e+005 + 2.9864103e+005 2.8920325e+006 2.9074110e+006 8.5831742e+004 1.3581963e+005 -1.2317230e+004 1.3637700e+005 1.7712720e+005 + 9.0628352e+004 7.6692450e+005 7.7226075e+005 4.2998758e+004 8.0729492e+004 -7.3577769e+003 8.1064094e+004 7.8325125e+004 + -1.0462410e-008 -9.9576321e-009 1.4443562e-008 2.8619746e-007 -2.2203992e-008 -8.3810050e-008 8.6701448e-008 -2.7426950e-012 + 7.1224125e+005 5.8676825e+006 5.9107515e+006 9.9889727e+004 1.5531850e+005 -1.7026305e+004 1.5624894e+005 1.6951667e+005 + 3.5721384e+005 2.8977143e+006 2.9196490e+006 8.4354055e+004 1.3607420e+005 -1.6238743e+004 1.3703972e+005 1.7694880e+005 + 1.0076095e+005 7.6850438e+005 7.7508175e+005 4.2496941e+004 8.0897867e+004 -8.6084736e+003 8.1354602e+004 7.8240508e+004 + 7.8806037e-009 1.0936482e-008 1.3480006e-008 -9.5171015e-007 -1.4165678e-008 2.8709039e-007 2.8743966e-007 1.1155521e-011 + 8.8686800e+005 5.8784595e+006 5.9449830e+006 9.7946125e+004 1.5560348e+005 -2.5457568e+004 1.5767223e+005 1.6957755e+005 + 4.1471653e+005 2.9030703e+006 2.9325428e+006 8.2891953e+004 1.3632848e+005 -2.0129715e+004 1.3780661e+005 1.7693575e+005 + 1.1054431e+005 7.6992275e+005 7.7781819e+005 4.2014602e+004 8.1056789e+004 -9.8249951e+003 8.1650070e+004 7.8204375e+004 + -7.0574622e-009 -3.7919650e-009 8.0116642e-009 -2.6528991e-007 6.9816991e-008 7.1066232e-008 9.9623399e-008 3.4106051e-013 + 1.0595518e+006 5.8886280e+006 5.9831925e+006 9.6013203e+004 1.5588247e+005 -3.3850969e+004 1.5951563e+005 1.7001067e+005 + 4.7111891e+005 2.9079968e+006 2.9459120e+006 8.1447742e+004 1.3657531e+005 -2.3974047e+004 1.3866352e+005 1.7708961e+005 + 1.2003144e+005 7.7115888e+005 7.8044444e+005 4.1546453e+004 8.1204383e+004 -1.1010584e+004 8.1947453e+004 7.8219688e+004 + 8.6966105e-009 8.7398710e-009 1.2329492e-008 -3.3145980e-008 -7.9073743e-009 1.0873158e-008 1.3444409e-008 -2.2737368e-013 + 1.2297494e+006 5.8977450e+006 6.0245895e+006 9.4074711e+004 1.5614183e+005 -4.2146637e+004 1.6173005e+005 1.7082155e+005 + 5.2658331e+005 2.9123250e+006 2.9595485e+006 8.0003039e+004 1.3680233e+005 -2.7759465e+004 1.3959036e+005 1.7741555e+005 + 1.2934561e+005 7.7220813e+005 7.8296594e+005 4.1077621e+004 8.1337813e+004 -1.2174971e+004 8.2243969e+004 7.8289320e+004 + 1.1074166e-008 1.2298924e-008 1.6549945e-008 1.5878061e-007 -9.6438896e-008 -3.4548762e-008 1.0244060e-007 1.3244517e-011 + 1.3972698e+006 5.9053570e+006 6.0684105e+006 9.2123805e+004 1.5637078e+005 -5.0317000e+004 1.6426692e+005 1.7202025e+005 + 5.8120106e+005 2.9158740e+006 2.9732333e+006 7.8552898e+004 1.3699525e+005 -3.1482348e+004 1.4056613e+005 1.7791861e+005 + 1.3854277e+005 7.7308019e+005 7.8539613e+005 4.0606461e+004 8.1454039e+004 -1.3322716e+004 8.2536391e+004 7.8414391e+004 + -1.8387507e-008 2.4562272e-009 1.8550834e-008 -5.8942305e-008 -5.4846538e-008 2.5040961e-008 6.0292557e-008 5.4001248e-012 + 1.5623234e+006 5.9112730e+006 6.1142460e+006 9.0180016e+004 1.5657086e+005 -5.8379035e+004 1.6710041e+005 1.7361364e+005 + 6.3491631e+005 2.9184800e+006 2.9867448e+006 7.7109977e+004 1.3714617e+005 -3.5148477e+004 1.4157855e+005 1.7860197e+005 + 1.4757995e+005 7.7378644e+005 7.8773431e+005 4.0138086e+004 8.1549930e+004 -1.4450451e+004 8.2820328e+004 7.8595602e+004 + -7.0483495e-008 9.3424202e-010 7.0489691e-008 1.1197767e-007 -4.1227608e-008 -2.7221347e-008 4.9403617e-008 -1.9895197e-012 + 1.7251836e+006 5.9152725e+006 6.1617130e+006 8.8231203e+004 1.5673130e+005 -6.6357445e+004 1.7019991e+005 1.7560084e+005 + 6.8770144e+005 2.9201575e+006 3.0000423e+006 7.5668641e+004 1.3725042e+005 -3.8764742e+004 1.4261972e+005 1.7946583e+005 + 1.5640659e+005 7.7430969e+005 7.8994844e+005 3.9677355e+004 8.1624828e+004 -1.5554724e+004 8.3093695e+004 7.8833438e+004 + -2.4953675e-008 9.9046549e-009 2.6847497e-008 4.5062924e-007 -7.7161445e-008 -1.2161219e-007 1.4402573e-007 1.6243007e-011 + 1.8860090e+006 5.9175650e+006 6.2108455e+006 8.6288055e+004 1.5685870e+005 -7.4252375e+004 1.7354558e+005 1.7796923e+005 + 7.3966331e+005 2.9209198e+006 3.0131170e+006 7.4228500e+004 1.3731583e+005 -4.2335262e+004 1.4369381e+005 1.8050570e+005 + 1.6505653e+005 7.7461544e+005 7.9200550e+005 3.9220371e+004 8.1678086e+004 -1.6638992e+004 8.3355656e+004 7.9127672e+004 + -2.8709245e-008 1.0437747e-008 3.0547788e-008 1.8723102e-006 1.1385310e-009 -5.5270471e-007 5.5270590e-007 -5.5990768e-012 + 2.0446934e+006 5.9183880e+006 6.2616360e+006 8.4336164e+004 1.5695905e+005 -8.2032430e+004 1.7710297e+005 1.8070602e+005 + 7.9102069e+005 2.9208385e+006 3.0260555e+006 7.2773547e+004 1.3735181e+005 -4.5858195e+004 1.4480503e+005 1.8171652e+005 + 1.7363175e+005 7.7465906e+005 7.9387950e+005 3.8755430e+004 8.1709758e+004 -1.7712359e+004 8.3607484e+004 7.9477367e+004 + 2.5570076e-008 -4.2318362e-009 2.5917894e-008 2.8944675e-007 -6.1486247e-009 -8.4321400e-008 8.4545277e-008 -3.5953462e-012 + 2.2009940e+006 5.9179945e+006 6.3140345e+006 8.2360234e+004 1.5704263e+005 -8.9662711e+004 1.8083636e+005 1.8380434e+005 + 8.4190350e+005 2.9199735e+006 3.0389220e+006 7.1290805e+004 1.3736650e+005 -4.9328887e+004 1.4595511e+005 1.8309428e+005 + 1.8220630e+005 7.7441325e+005 7.9555956e+005 3.8273082e+004 8.1719844e+004 -1.8781203e+004 8.3850266e+004 7.9880797e+004 + -3.4810881e-008 5.4654947e-011 3.4810924e-008 -4.5144720e-008 2.4174483e-008 9.2423562e-009 2.5881011e-008 5.3432814e-012 + 2.3546998e+006 5.9166525e+006 6.3679970e+006 8.0369648e+004 1.5712409e+005 -9.7132789e+004 1.8472347e+005 1.8726209e+005 + 8.9220344e+005 2.9183510e+006 3.0516880e+006 6.9791563e+004 1.3736886e+005 -5.2744469e+004 1.4714681e+005 1.8463580e+005 + 1.9074906e+005 7.7388300e+005 7.9704463e+005 3.7774082e+004 8.1708281e+004 -1.9842549e+004 8.4083117e+004 8.0335805e+004 + -2.8014828e-008 3.5586822e-009 2.8239949e-008 1.7033000e-007 7.3167286e-009 -5.1406374e-008 5.1924463e-008 1.5276669e-011 + 2.5055925e+006 5.9143965e+006 6.4232455e+006 7.8362195e+004 1.5720355e+005 -1.0445320e+005 1.8874170e+005 1.9107711e+005 + 9.4163988e+005 2.9160585e+006 3.0643243e+006 6.8273219e+004 1.3735248e+005 -5.6098648e+004 1.4836698e+005 1.8633811e+005 + 1.9914608e+005 7.7309094e+005 7.9832875e+005 3.7267430e+004 8.1677211e+004 -2.0886350e+004 8.4305438e+004 8.0840305e+004 + -3.2399697e-008 3.9032688e-009 3.2633970e-008 -4.6906996e-007 2.0530806e-008 1.3436309e-007 1.3592260e-007 1.2036594e-011 + 2.6533963e+006 5.9113610e+006 6.4795605e+006 7.6365117e+004 1.5728245e+005 -1.1162958e+005 1.9287023e+005 1.9523556e+005 + 9.8992844e+005 2.9131605e+006 3.0767618e+006 6.6759344e+004 1.3732284e+005 -5.9386313e+004 1.4961383e+005 1.8819389e+005 + 2.0729872e+005 7.7207531e+005 7.9942044e+005 3.6760910e+004 8.1629070e+004 -2.1903369e+004 8.4516641e+004 8.1392102e+004 + -2.2805132e-008 6.1363101e-009 2.3616273e-008 4.1133166e-008 -7.2989636e-008 1.3862405e-009 7.3002795e-008 -1.1809220e-011 + 2.7976038e+006 5.9076040e+006 6.5365415e+006 7.4394539e+004 1.5735480e+005 -1.1863648e+005 1.9706634e+005 1.9971511e+005 + 1.0369303e+006 2.9097430e+006 3.0889850e+006 6.5261590e+004 1.3728359e+005 -6.2596434e+004 1.5088108e+005 1.9019308e+005 + 2.1519591e+005 7.7087275e+005 8.0034625e+005 3.6254188e+004 8.1566859e+004 -2.2891422e+004 8.4718180e+004 8.1988625e+004 + -3.9533401e-008 -6.3370402e-009 4.0038078e-008 -7.4479743e-007 -4.0712820e-009 2.2002715e-007 2.2006481e-007 2.2311042e-012 + 2.9374800e+006 5.9029855e+006 6.5934840e+006 7.2432234e+004 1.5740689e+005 -1.2542313e+005 2.0126572e+005 2.0449644e+005 + 1.0826008e+006 2.9058913e+006 3.1010045e+006 6.3759363e+004 1.3722648e+005 -6.5710344e+004 1.5214781e+005 1.9232706e+005 + 2.2288538e+005 7.6951238e+005 8.0114113e+005 3.5740340e+004 8.1494594e+004 -2.3853365e+004 8.4913789e+004 8.2627180e+004 + 6.4493277e-009 1.0770509e-008 1.2553792e-008 -4.5849018e-007 3.4013539e-009 1.3436782e-007 1.3441087e-007 4.0358827e-012 + 3.0723228e+006 5.8974770e+006 6.6497670e+006 7.0495602e+004 1.5743638e+005 -1.3194538e+005 2.0541616e+005 2.0956531e+005 + 1.1268108e+006 2.9016053e+006 3.1127183e+006 6.2270578e+004 1.3715266e+005 -6.8713359e+004 1.5340266e+005 1.9458838e+005 + 2.3037889e+005 7.6803594e+005 8.0184388e+005 3.5217656e+004 8.1412867e+004 -2.4788369e+004 8.5102984e+004 8.3304844e+004 + -4.6711499e-008 6.7774826e-009 4.7200619e-008 -7.9475291e-007 -6.6760208e-008 2.4763733e-007 2.5647842e-007 -7.5175421e-012 + 3.2015418e+006 5.8908865e+006 6.7046560e+006 6.8584672e+004 1.5743817e+005 -1.3818639e+005 2.0948092e+005 2.1491813e+005 + 1.1692649e+006 2.8968575e+006 3.1239340e+006 6.0795043e+004 1.3705095e+005 -7.1590742e+004 1.5462277e+005 1.9697420e+005 + 2.3760147e+005 7.6647719e+005 8.0245981e+005 3.4692785e+004 8.1322984e+004 -2.5688680e+004 8.5283852e+004 8.4019461e+004 + -7.6053848e-009 2.2144864e-009 7.9212263e-009 6.4883181e-007 -3.0335457e-008 -1.8512182e-007 1.8759086e-007 -3.8511416e-012 + 3.3247313e+006 5.8832005e+006 6.7576540e+006 6.6737148e+004 1.5741553e+005 -1.4415063e+005 2.1344567e+005 2.2054870e+005 + 1.2095865e+006 2.8916015e+006 3.1343993e+006 5.9369090e+004 1.3692172e+005 -7.4334250e+004 1.5579839e+005 1.9948080e+005 + 2.4442627e+005 7.6485956e+005 8.0296594e+005 3.4179281e+004 8.1222805e+004 -2.6541791e+004 8.5449461e+004 8.4769492e+004 + -2.3918792e-008 7.7386950e-009 2.5139531e-008 2.1198409e-007 -2.8163427e-008 -5.6646499e-008 6.3261396e-008 5.1301186e-012 + 3.4414593e+006 5.8744075e+006 6.8082530e+006 6.4963371e+004 1.5736905e+005 -1.4983403e+005 2.1729072e+005 2.2644609e+005 + 1.2474990e+006 2.8858223e+006 3.1439185e+006 5.7999645e+004 1.3676345e+005 -7.6932984e+004 1.5691695e+005 2.0210403e+005 + 2.5077434e+005 7.6316819e+005 8.0331406e+005 3.3685230e+004 8.1111508e+004 -2.7339740e+004 8.5595195e+004 8.5554133e+004 + -5.2850091e-008 3.3676875e-009 5.2957279e-008 6.8501606e-007 4.6857579e-008 -2.1258053e-007 2.1768352e-007 1.1567636e-011 + 3.5512058e+006 5.8646170e+006 6.8560040e+006 6.3268719e+004 1.5730209e+005 -1.5520831e+005 2.2098319e+005 2.3259328e+005 + 1.2829006e+006 2.8795298e+006 3.1523840e+006 5.6687469e+004 1.3658153e+005 -7.9374578e+004 1.5797100e+005 2.0483798e+005 + 2.5665131e+005 7.6136006e+005 8.0345444e+005 3.3210098e+004 8.0987609e+004 -2.8081803e+004 8.5718031e+004 8.6372688e+004 + 1.1287944e-009 1.1632666e-008 1.1687305e-008 4.7914305e-008 -1.1488149e-007 1.1077489e-008 1.1541432e-007 -7.1764816e-012 + 3.6534870e+006 5.8540325e+006 6.9005555e+006 6.1715305e+004 1.5722459e+005 -1.6023850e+005 2.2449042e+005 2.3897517e+005 + 1.3157634e+006 2.8727385e+006 3.1597248e+006 5.5487852e+004 1.3638309e+005 -8.1647813e+004 1.5895506e+005 2.0767570e+005 + 2.6208969e+005 7.5938844e+005 8.0334413e+005 3.2776977e+004 8.0849898e+004 -2.8769795e+004 8.5816125e+004 8.7222234e+004 + -2.5179272e-008 2.1974058e-009 2.5274975e-008 -7.1184701e-007 -1.2324617e-007 2.3866221e-007 2.6860616e-007 4.8316906e-012 + 3.7480118e+006 5.8428315e+006 6.9416330e+006 6.0226539e+004 1.5714308e+005 -1.6490569e+005 2.2778902e+005 2.4558311e+005 + 1.3460126e+006 2.8654860e+006 3.1658743e+006 5.4333711e+004 1.3617547e+005 -8.3747180e+004 1.5986666e+005 2.1061680e+005 + 2.6707538e+005 7.5721394e+005 8.0293350e+005 3.2355639e+004 8.0697773e+004 -2.9402285e+004 8.5887281e+004 8.8104984e+004 + -2.5102450e-008 -2.3967139e-010 2.5103594e-008 3.4692107e-007 -4.9519571e-009 -1.0192450e-007 1.0204472e-007 -4.5048409e-012 + 3.8348235e+006 5.8312050e+006 6.9791705e+006 5.8799574e+004 1.5707173e+005 -1.6922059e+005 2.3088339e+005 2.5241458e+005 + 1.3735215e+006 2.8577670e+006 3.1707088e+006 5.3227344e+004 1.3596302e+005 -8.5675102e+004 1.6070520e+005 2.1366016e+005 + 2.7153559e+005 7.5481881e+005 8.0217394e+005 3.1948500e+004 8.0529773e+004 -2.9973525e+004 8.5927039e+004 8.9020859e+004 + -8.4006196e-008 3.8461474e-009 8.4094196e-008 -4.1045138e-007 -4.8649227e-008 1.3345448e-007 1.4204522e-007 -5.4143356e-012 + 3.9140833e+006 5.8192805e+006 7.0131360e+006 5.7479301e+004 1.5702327e+005 -1.7319780e+005 2.3378148e+005 2.5946584e+005 + 1.3982678e+006 2.8495578e+006 3.1741350e+006 5.2211703e+004 1.3574611e+005 -8.7434805e+004 1.6146780e+005 2.1680220e+005 + 2.7545178e+005 7.5221081e+005 8.0105856e+005 3.1584516e+004 8.0347055e+004 -3.0482621e+004 8.5935094e+004 8.9967289e+004 + 9.0597307e-010 2.8867699e-009 3.0255956e-009 1.2014871e-007 -4.8108348e-008 -2.4556314e-008 5.4013199e-008 8.3844043e-013 + 3.9856723e+006 5.8071530e+006 7.0433380e+006 5.6252535e+004 1.5699381e+005 -1.7681398e+005 2.3645347e+005 2.6671500e+005 + 1.4204335e+006 2.8409295e+006 3.1762418e+006 5.1264871e+004 1.3553036e+005 -8.9022961e+004 1.6215291e+005 2.2003606e+005 + 2.7892256e+005 7.4939956e+005 7.9962331e+005 3.1241236e+004 8.0148453e+004 -3.0936590e+004 8.5911859e+004 9.0944273e+004 + 3.1358681e-008 6.3000725e-009 3.1985277e-008 -4.3287315e-007 -9.3635336e-008 1.5182724e-007 1.7837905e-007 7.8159701e-012 + 4.0493330e+006 5.7947970e+006 7.0694250e+006 5.5076172e+004 1.5696722e+005 -1.8003669e+005 2.3885542e+005 2.7413231e+005 + 1.4401731e+006 2.8320153e+006 3.1771700e+006 5.0340313e+004 1.3531769e+005 -9.0433125e+004 1.6275450e+005 2.2335038e+005 + 2.8203866e+005 7.4639319e+005 7.9790263e+005 3.0890502e+004 7.9936813e+004 -3.1342914e+004 8.5861938e+004 9.1949539e+004 + 4.7259256e-008 -5.4672018e-009 4.7574442e-008 -1.2350670e-006 2.2488450e-008 3.6528780e-007 3.6597936e-007 1.6200374e-011 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 new file mode 100644 index 0000000000..d161002b9a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 @@ -0,0 +1,39 @@ +FILE Steady_8ms_ASCII.$04 +ACCESS S +FORM F +RECL 4 +FORMAT R*4 +CONTENT 'POWPROD' +CONFIG 'STATIONARY' +NDIMENS 2 +DIMENS 9 200 +GENLAB 'Control variables' +VARIAB 'Time from start of simulation' 'Demanded power' 'Measured power' 'Demanded generator speed' 'Measured generator speed' 'Nominal pitch angle' 'Demanded generator torque' 'Nominal wind speed at hub position' 'Measured shaft power' +VARUNIT T P P A/T A/T A FL L/T P +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.0000000E+000 +STEP 5.0000001E-002 +NVARS 0 +ULOADS 1.9993750E+002 0.0000000E+000 1.8192086E+006 9.1210831E+001 9.2047127E+001 -0.0000000E+000 1.9763861E+004 8.0003738E+000 1.8192086E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.9953751E+002 0.0000000E+000 1.8194994E+006 9.1210831E+001 9.2069588E+001 -0.0000000E+000 1.9762295E+004 8.0003710E+000 1.8194994E+006 + 1.9188750E+002 0.0000000E+000 1.8173160E+006 9.1210831E+001 9.2007599E+001 -0.0000000E+000 1.9751729E+004 8.0003681E+000 1.8173160E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.9943750E+002 0.0000000E+000 1.8194199E+006 9.1210831E+001 9.2072807E+001 -0.0000000E+000 1.9760760E+004 8.0003700E+000 1.8194199E+006 + 1.9403751E+002 0.0000000E+000 1.8173680E+006 9.1210831E+001 9.2005730E+001 -0.0000000E+000 1.9752684E+004 8.0003691E+000 1.8173680E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 + 1.9983749E+002 0.0000000E+000 1.8193841E+006 9.1210831E+001 9.2055389E+001 -0.0000000E+000 1.9764021E+004 8.0003729E+000 1.8193841E+006 + 1.9203751E+002 0.0000000E+000 1.8175164E+006 9.1210831E+001 9.2023163E+001 -0.0000000E+000 1.9750629E+004 8.0003681E+000 1.8175164E+006 + 1.9108749E+002 0.0000000E+000 1.8191858E+006 9.1210831E+001 9.2048164E+001 -0.0000000E+000 1.9763398E+004 8.0003738E+000 1.8191858E+006 + 1.9188750E+002 0.0000000E+000 1.8173160E+006 9.1210831E+001 9.2007599E+001 -0.0000000E+000 1.9751729E+004 8.0003681E+000 1.8173160E+006 + 1.9953751E+002 0.0000000E+000 1.8194994E+006 9.1210831E+001 9.2069588E+001 -0.0000000E+000 1.9762295E+004 8.0003710E+000 1.8194994E+006 + 1.9188750E+002 0.0000000E+000 1.8173160E+006 9.1210831E+001 9.2007599E+001 -0.0000000E+000 1.9751729E+004 8.0003681E+000 1.8173160E+006 +MAXTIME 9.9500001E+000 0.0000000E+000 9.5500001E+000 0.0000000E+000 9.4500001E+000 0.0000000E+000 9.8500001E+000 1.1000000E+000 9.5500001E+000 +MINTIME 0.0000000E+000 0.0000000E+000 1.9000000E+000 0.0000000E+000 4.0500001E+000 0.0000000E+000 2.0500000E+000 1.9000000E+000 1.9000000E+000 +MEAN 1.9496250E+002 0.0000000E+000 1.8185299E+006 9.1210918E+001 9.2041807E+001 -0.0000000E+000 1.9757653E+004 8.0003668E+000 1.8185299E+006 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 new file mode 100644 index 0000000000..845d7f3fdb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 @@ -0,0 +1,98 @@ +FILE Steady_8ms_ASCII.$41 +ACCESS S +FORM F +RECL 4 +FORMAT R*4 +CONTENT 'POWPROD' +CONFIG 'STATIONARY' +NDIMENS 3 +DIMENS 8 4 200 +GENLAB 'Blade 1 Loads: Root axes' +VARIAB 'Blade 1 Mx (Root axes)' 'Blade 1 My (Root axes)' 'Blade 1 Mxy (Root axes)' 'Blade 1 Mz (Root axes)' 'Blade 1 Fx (Root axes)' 'Blade 1 Fy (Root axes)' 'Blade 1 Fxy (Root axes)' 'Blade 1 Fz (Root axes)' +VARUNIT FL FL FL FL F F F F +AXISLAB 'Distance along blade' +AXIUNIT L +AXIMETH 3 +AXIVAL 0.0000000 20.2000008 40.2000008 61.5000000 +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.0000000E+000 +STEP 5.0000001E-002 +NVARS 0 +ULOADS 4.2700365E+006 5.6879880E+006 7.1124130E+006 4.8522203E+004 1.5644395E+005 -1.9203038E+005 2.4769008E+005 3.3316125E+005 + -2.9789733E+006 5.3133240E+006 6.0914440E+006 1.2057229E+005 1.4682472E+005 1.6034870E+005 2.1741481E+005 3.4386759E+005 + 2.0446934E+006 5.9183880E+006 6.2616360E+006 8.4336164E+004 1.5695905E+005 -8.2032430E+004 1.7710297E+005 1.8070602E+005 + -4.2647966E+005 4.5880585E+006 4.6078375E+006 7.7151039E+004 1.3377806E+005 3.1631107E+004 1.3746672E+005 5.1026584E+005 + 4.2356305E+006 5.7358915E+006 7.1302885E+006 5.0564754E+004 1.5685191E+005 -1.8982881E+005 2.4624681E+005 3.0882388E+005 + -2.5779445E+005 4.5962085E+006 4.6034325E+006 7.4489516E+004 1.3382472E+005 2.3468830E+004 1.3586700E+005 5.1186166E+005 + -2.7208935E+006 5.5064020E+006 6.1419645E+006 1.2474416E+005 1.4972272E+005 1.4762898E+005 2.1026461E+005 2.8009394E+005 + 4.1259538E+006 5.5505305E+006 6.9160600E+006 4.6778574E+004 1.5441570E+005 -1.8595255E+005 2.4170759E+005 3.8194009E+005 + 3.1288033E+006 5.8948165E+006 6.6737000E+006 6.9661375E+004 1.5744019E+005 -1.3468823E+005 2.0719153E+005 2.1186481E+005 + -4.2647966E+005 4.5880585E+006 4.6078375E+006 7.7151039E+004 1.3377806E+005 3.1631107E+004 1.3746672E+005 5.1026584E+005 + -2.9789733E+006 5.3133240E+006 6.0914440E+006 1.2057229E+005 1.4682472E+005 1.6034870E+005 2.1741481E+005 3.4386759E+005 + 4.2700365E+006 5.6879880E+006 7.1124130E+006 4.8522203E+004 1.5644395E+005 -1.9203038E+005 2.4769008E+005 3.3316125E+005 + 4.2700365E+006 5.6879880E+006 7.1124130E+006 4.8522203E+004 1.5644395E+005 -1.9203038E+005 2.4769008E+005 3.3316125E+005 + -8.3800250E+004 4.6173065E+006 4.6180670E+006 7.1262977E+004 1.3421600E+005 1.5121382E+004 1.3506514E+005 5.1311459E+005 + 4.5589291E+005 4.7270350E+006 4.7489680E+006 6.2041895E+004 1.3680088E+005 -1.0514382E+004 1.3720434E+005 5.1503394E+005 + 7.8848400E+005 5.8719360E+006 5.9246385E+006 9.9047602E+004 1.5542952E+005 -2.0703334E+004 1.5680231E+005 1.6949625E+005 +MAXTIME 3.7000001E+000 9.1000001E+000 3.5500001E+000 7.4500001E+000 2.8500000E+000 7.0500001E+000 3.7000001E+000 5.4000001E+000 +MINTIME 7.0500001E+000 5.6500001E+000 5.6000001E+000 4.0000001E+000 5.6500001E+000 3.7000001E+000 5.5500001E+000 2.1000000E+000 +MEAN 3.4850004E+005 5.5026298E+006 6.0608755E+006 9.0276320E+004 1.5060866E+005 -1.4724466E+003 1.9295544E+005 3.0861504E+005 +ULOADS 1.5020099E+006 2.7688520E+006 3.1500120E+006 4.5472645E+004 1.3373100E+005 -9.5216750E+004 1.6416519E+005 2.4616223E+005 + -8.7064644E+005 2.5586395E+006 2.7027135E+006 9.7197477E+004 1.2408887E+005 6.6752070E+004 1.4090381E+005 2.5959136E+005 + 7.3966331E+005 2.9209198E+006 3.0131170E+006 7.4228500E+004 1.3731583E+005 -4.2335262E+004 1.4369381E+005 1.8050570E+005 + -1.2726105E+005 2.1557825E+006 2.1595355E+006 6.5646469E+004 1.0890295E+005 1.4002102E+004 1.0979941E+005 3.2995250E+005 + 1.4483018E+006 2.8279668E+006 3.1772588E+006 4.9958938E+004 1.3521827E+005 -9.1004945E+004 1.6299042E+005 2.2480972E+005 + -7.3765719E+004 2.1567145E+006 2.1579758E+006 6.4073789E+004 1.0870848E+005 1.0373180E+004 1.0920227E+005 3.3075084E+005 + -7.7556644E+005 2.6899680E+006 2.7995413E+006 1.0178959E+005 1.2872822E+005 6.0017891E+004 1.4203205E+005 2.2576005E+005 + 1.4286433E+006 2.6599203E+006 3.0193040E+006 4.3070836E+004 1.2993030E+005 -9.0843148E+004 1.5853819E+005 2.7540988E+005 + 8.9220344E+005 2.9183510E+006 3.0516880E+006 6.9791563E+004 1.3736886E+005 -5.2744469E+004 1.4714681E+005 1.8463580E+005 + -7.3765719E+004 2.1567145E+006 2.1579758E+006 6.4073789E+004 1.0870848E+005 1.0373180E+004 1.0920227E+005 3.3075084E+005 + -8.7045550E+005 2.5633695E+006 2.7071305E+006 9.7515688E+004 1.2422506E+005 6.6753063E+004 1.4102425E+005 2.5798398E+005 + 1.5017208E+006 2.7579278E+006 3.1402755E+006 4.4930387E+004 1.3339833E+005 -9.5279320E+004 1.6393066E+005 2.4983367E+005 + 1.4996814E+006 2.7792348E+006 3.1580358E+006 4.6043758E+004 1.3402113E+005 -9.4973352E+004 1.6426077E+005 2.4251633E+005 + -1.7724371E+004 2.1642385E+006 2.1643110E+006 6.1991012E+004 1.0884046E+005 6.6025015E+003 1.0904054E+005 3.3139113E+005 + 2.2222330E+005 2.2373308E+006 2.2483400E+006 5.1362223E+004 1.1190833E+005 -9.4503721E+003 1.1230665E+005 3.3280638E+005 + 3.8236619E+005 2.8998525E+006 2.9249528E+006 8.3720820E+004 1.3617323E+005 -1.7937281E+004 1.3734955E+005 1.7692311E+005 +MAXTIME 3.6500001E+000 9.0500001E+000 3.3500000E+000 8.5000001E-001 9.2000001E+000 4.0000001E-001 3.6000001E+000 5.4000001E+000 +MINTIME 7.0000001E+000 5.7000001E+000 5.6500001E+000 4.0500001E+000 5.6500001E+000 3.7000001E+000 5.6000001E+000 2.1000000E+000 +MEAN 2.1848354E+005 2.6737498E+006 2.8073533E+006 7.5804670E+004 1.2867567E+005 -7.7045250E+003 1.4065615E+005 2.3958896E+005 +ULOADS 2.9046156E+005 7.2528713E+005 7.8128694E+005 2.8794514E+004 7.8395266E+004 -3.2543189E+004 8.4881547E+004 9.8922102E+004 + -1.1172891E+005 6.6371581E+005 6.7305425E+005 4.4604246E+004 7.1751977E+004 1.8094299E+004 7.3998313E+004 1.0512230E+005 + 1.7363175E+005 7.7465906E+005 7.9387950E+005 3.8755430E+004 8.1709758E+004 -1.7712359E+004 8.3607484E+004 7.9477367E+004 + -4.9514473E+003 5.4754681E+005 5.4756919E+005 3.2854910E+004 6.1115555E+004 4.2433618E+003 6.1262688E+004 1.2548838E+005 + 2.5665131E+005 7.6136006E+005 8.0345444E+005 3.3210098E+004 8.0987609E+004 -2.8081803E+004 8.5718031E+004 8.6372688E+004 + -4.9514473E+003 5.4754681E+005 5.4756919E+005 3.2854910E+004 6.1115555E+004 4.2433618E+003 6.1262688E+004 1.2548838E+005 + -7.8629539E+004 7.1847344E+005 7.2276319E+005 4.7314051E+004 7.6482289E+004 1.3781252E+004 7.7713984E+004 9.0584344E+004 + 6.4919984E+004 5.7476350E+005 5.7841825E+005 2.6343789E+004 6.3905578E+004 -4.5262729E+003 6.4065672E+004 1.2647440E+005 + 1.8220630E+005 7.7441325E+005 7.9555956E+005 3.8273082E+004 8.1719844E+004 -1.8781203E+004 8.3850266E+004 7.9880797E+004 + 3.6977095E+003 5.4791525E+005 5.4792769E+005 3.2580852E+004 6.1052281E+004 3.1584578E+003 6.1133926E+004 1.2573148E+005 + -1.1172891E+005 6.6371581E+005 6.7305425E+005 4.4604246E+004 7.1751977E+004 1.8094299E+004 7.3998313E+004 1.0512230E+005 + 2.9046156E+005 7.2528713E+005 7.8128694E+005 2.8794514E+004 7.8395266E+004 -3.2543189E+004 8.4881547E+004 9.8922102E+004 + 2.7338353E+005 7.5369719E+005 8.0174681E+005 3.1713813E+004 8.0449734E+004 -3.0211346E+004 8.5935352E+004 8.9429211E+004 + 3.6977095E+003 5.4791525E+005 5.4792769E+005 3.2580852E+004 6.1052281E+004 3.1584578E+003 6.1133926E+004 1.2573148E+005 + 6.4919984E+004 5.7476350E+005 5.7841825E+005 2.6343789E+004 6.3905578E+004 -4.5262729E+003 6.4065672E+004 1.2647440E+005 + 1.1054431E+005 7.6992275E+005 7.7781819E+005 4.2014602E+004 8.1056789E+004 -9.8249951E+003 8.1650070E+004 7.8204375E+004 +MAXTIME 3.6500001E+000 9.1000001E+000 9.6500001E+000 1.0000000E+000 9.1500001E+000 6.9500001E+000 3.2000000E+000 5.4000001E+000 +MINTIME 6.9500001E+000 5.7500001E+000 5.7500001E+000 5.4000001E+000 5.7000001E+000 3.6500001E+000 5.7000001E+000 8.7500001E+000 +MEAN 7.2587775E+004 7.0022096E+005 7.1772032E+005 3.8265158E+004 7.5225065E+004 -5.1883994E+003 7.7449200E+004 9.7516890E+004 +ULOADS 6.0416113E-008 3.5432581E-009 6.0519923E-008 -2.0450938E-007 -2.4397863E-008 7.8331297E-008 8.2042959E-008 2.0619950E-011 + -1.3088868E-007 1.5385883E-008 1.3178988E-007 6.9784852E-007 3.5368402E-009 -2.1129225E-007 2.1132185E-007 -1.3343993E-011 + -1.1985347E-009 1.8815371E-008 1.8853505E-008 8.1898783E-008 -6.9199132E-008 -3.2049122E-008 7.6260520E-008 -9.9475983E-014 + -4.4389893E-008 -1.3403322E-008 4.6369298E-008 1.0521391E-006 1.0590171E-008 -3.1203911E-007 3.1221876E-007 -5.0732751E-012 + -1.3088868E-007 1.5385883E-008 1.3178988E-007 6.9784852E-007 3.5368402E-009 -2.1129225E-007 2.1132185E-007 -1.3343993E-011 + 1.2749884E-010 2.7838443E-010 3.0619249E-010 8.0451557E-008 -3.3626876E-008 -3.0700917E-008 4.5533646E-008 -1.9440449E-011 + -2.8709245E-008 1.0437747E-008 3.0547788E-008 1.8723102E-006 1.1385310E-009 -5.5270471E-007 5.5270590E-007 -5.5990768E-012 + 2.4472435E-008 1.9779200E-010 2.4473234E-008 -1.9042171E-006 2.3550584E-008 5.6118262E-007 5.6167653E-007 2.0889956E-012 + -7.0574622E-009 -3.7919650E-009 8.0116642E-009 -2.6528991E-007 6.9816991E-008 7.1066232E-008 9.9623399E-008 3.4106051E-013 + -4.6190296E-009 9.0298391E-009 1.0142654E-008 2.8418345E-008 -1.3708387E-007 3.3232084E-009 1.3712415E-007 -1.4210855E-014 + 3.4378527E-008 -2.6722615E-009 3.4482227E-008 -1.7747884E-006 -4.8753279E-008 5.6212281E-007 5.6423306E-007 9.4644292E-012 + -2.8709245E-008 1.0437747E-008 3.0547788E-008 1.8723102E-006 1.1385310E-009 -5.5270471E-007 5.5270590E-007 -5.5990768E-012 + 3.4378527E-008 -2.6722615E-009 3.4482227E-008 -1.7747884E-006 -4.8753279E-008 5.6212281E-007 5.6423306E-007 9.4644292E-012 + -6.8960526E-010 5.4174487E-009 5.4611635E-009 5.4492411E-009 1.0867183E-009 -2.1611086E-009 2.4189557E-009 -1.2875034E-011 + 4.7877410E-008 -7.9480849E-009 4.8532655E-008 -1.4244058E-006 -1.7717213E-008 4.5244346E-007 4.5279023E-007 2.9871217E-011 + 1.2749884E-010 2.7838443E-010 3.0619249E-010 8.0451557E-008 -3.3626876E-008 -3.0700917E-008 4.5533646E-008 -1.9440449E-011 +MAXTIME 4.7000001E+000 7.1000001E+000 3.4000001E+000 9.0500001E+000 8.7500001E+000 3.7500001E+000 3.7500001E+000 3.9000001E+000 +MINTIME 3.4000001E+000 2.8000000E+000 6.6000001E+000 2.3000000E+000 1.9000000E+000 9.0500001E+000 6.0500001E+000 6.6000001E+000 +MEAN -9.8774774E-009 2.1970034E-009 2.0335806E-008 -2.5283964E-008 -1.8726793E-008 1.0430081E-008 1.1521881E-007 2.2351543E-012 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$04 new file mode 100644 index 0000000000000000000000000000000000000000..1de5350ba4ed9758f90746f360d084a70eefae24 GIT binary patch literal 21600 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 CL9#6X literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$41 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$41 new file mode 100644 index 0000000000000000000000000000000000000000..485f293ce5ffdc54c6cc0e29edaabb2a42c45501 GIT binary patch literal 76800 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 ve;Kh!*IB=Lo;~vftY+$Rh#J+m z5H&XOZf z2T6CgLy1SYF^Kujk{o$FG_71G3{QeuTnvYO_ RZLRlk`zROa$P)h369Bf;nZp18 literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$06 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$06 new file mode 100644 index 0000000000000000000000000000000000000000..ee265621fdb1980dadab440fb7210f7669400473 GIT binary patch literal 160 zcmXqEcXM03@1e_f7p`rJ3g z)z>WK$c39phr0`-9Aj68I599Z*hd4+P~mR3iz>6QDblL3mpEl^XWOS>ckjn(uWJ?? z?Gt8(*c{rsYHyoGgj0e^kL#m1hK7U;;37z8(iH>=-{y~fxkN3PaBZJCx` zcb2f7<$;r4nXxPF9o7ijWX_(uclX^;rwe|~t|^h4M-ILgI2Zm<00B%Oij45`{ ze6(!duc)=3W2R(x@E4ce;dLjy>i#da|4^u8V>e^|UW?PAPClm_To1L&9628*b9ldi zo#UsE2s7p?PO%e~Q?aRCUu*AnO3^O6kIRl<>$KP3lI8XX1pREBO*ZcJjtzHme$wpP zxl{ItOSJ!C!JT%F(|V2S+TCAz$}3oTnf(VA7n>~8 zZF{vZhB?hJZE{WNk~*@&CH`=xwyh(J5W&fUTM~95?swP3jGH3Yk~ydW1pp$dqe2htrj99Cfew!NbFG%5=N_=PEYUcWdoM z4#?SAwy@iMxO>8Df8G-N31TWXn{{^Vz5O=C>85q9>vBu6BSxYrhZ`?hIhML3!XwOP zj-Bl{1smq@I(z-!qIN6l{@Q+BaN6t8-?{b|{G@G8zFWCB^me$@#i%OR_Yb*`9C7kF zToP&Oc)2_n?hc-ni|ukPq-~@x)!E-~3QB3im4O5W)hnZZ@>H{9@W_-y|#Ki@&8iBrsrn((@^n~X%V)1l6X znu6J`%^=}&0?XpG=mi=mIl1{3_fY9~7+jS(fquqm$q3?*T$Y<~hke=%c8)p0=pm<> z+MNk~>E7l`?5w@p3^uErV5rDxa>~$P+~{qvwcfEASWWR3L4W47tz=D@D9BCtp2D!h zpgQIgBu0EX&opB27Rb$y*Z_CVVUWJ?3EUH(Do0%n=8JpMU;l~wU*W#)Fv$2Vf}58X sZIz$mu%Pct%|KI4f$~^quM8Æ|‘£Èo«£H»Æ‡I‘‰*Iì LH[2I(®™HÆÐ\¥È—i¥H \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$25 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$25 new file mode 100644 index 0000000000000000000000000000000000000000..705e757736e38b62db19b1d92a5a98f49b932e7b GIT binary patch literal 640 zcmV-`0)PDyJnTtQTdGUX{;ErmZn;P5ii=3BH(tgcw~I*2sT;~Jak@zYdrwOU$xus@ zOt?qU{f$U3bUDTq9F9m<#nH*B73WDo)Tv7_ajHvZNfb!R(1%D+Xh_Dq^@m91E*r`w zg}F)U22o2mPf|-wwi8JFo{UK0_AJJcxr|7P&(O)*5!gvSz^qFtN3BZIs4VT4IYne#n5*x~p+_p&z2U1IhL{m$!DGW%;XqHI449CR9vjLJS+hw{?NUo~9aKwi7Ntjh z-k3-&B*Vo<=9owwuh7Z9CCo|q$+1fYKe9{oNr6WnfR{*vD)YrrjF(8K^cu=any*Q= z!Bk7p;#Es^uYX4WWAqrliH6@QO(LJR8b{60b?rK3GeYSy@Ys0qRE}n~zAVE33tTp^r$l>(I&7 zRJ}; literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$31 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$31 new file mode 100644 index 0000000000000000000000000000000000000000..f969429255b6e798c090d7f769043658fbd719cf GIT binary patch literal 120 zcmV-;0Eho!EUiDim*2sq$g@Ho-i<%rYxKeNIIcn#r&d1+fdj(jGN?jX%?UrEmb7llII a$C$sZ2q41P3VTAvUBJK8*B`=H*K0y>dOdgm literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 new file mode 100644 index 0000000000..0704a1463b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 @@ -0,0 +1,522 @@ + 1.00000001e-007 1.00000001e-007 1.00000001e-007 9.99999997e-007 3.90000000e+001 + 1.09999996e-006 9.99999997e-007 9.99999997e-007 6.06372214e-006 4.30000000e+001 + 7.16372188e-006 6.06372214e-006 6.06372214e-006 2.23819734e-005 3.10000000e+001 + 9.71269947e-006 2.23819734e-005 2.54897736e-006 1.25186389e-005 3.90000000e+001 + 9.99004078e-006 1.25186389e-005 2.77341599e-007 2.77341587e-006 4.50000000e+001 + 1.04492265e-005 2.77341587e-006 4.59185827e-007 4.15931822e-007 2.70000000e+001 + 1.08651584e-005 4.15931822e-007 4.15931822e-007 2.73320461e-006 4.30000000e+001 + 1.35983628e-005 2.73320461e-006 2.73320461e-006 1.22481479e-005 2.30000000e+001 + 2.58465116e-005 1.22481479e-005 1.22481479e-005 4.59457588e-005 2.30000000e+001 + 7.17922667e-005 4.59457588e-005 4.59457588e-005 1.31557274e-004 2.30000000e+001 + 2.03349555e-004 1.31557274e-004 1.31557274e-004 6.59651414e-004 4.30000000e+001 + 6.16022269e-004 6.59651414e-004 4.12672729e-004 1.29619334e-003 2.30000000e+001 + 1.91221561e-003 1.29619334e-003 1.29619334e-003 1.28277950e-003 4.80000000e+001 + 3.19499522e-003 1.28277950e-003 1.28277950e-003 1.51398242e-003 4.80000000e+001 + 4.70897742e-003 1.51398242e-003 1.51398242e-003 1.40180590e-003 4.80000000e+001 + 6.11078367e-003 1.40180590e-003 1.40180590e-003 1.49370986e-003 4.80000000e+001 + 7.60449329e-003 1.49370986e-003 1.49370986e-003 2.41702050e-003 4.80000000e+001 + 1.00215133e-002 2.41702050e-003 2.41702050e-003 4.11686441e-003 4.80000000e+001 + 1.41383782e-002 4.11686441e-003 4.11686441e-003 1.18834423e-002 4.80000000e+001 + 2.60218214e-002 1.18834423e-002 1.18834423e-002 1.57951973e-002 4.80000000e+001 + 4.18170169e-002 1.57951973e-002 1.57951973e-002 1.73934270e-002 4.10000000e+001 + 5.00000007e-002 8.18298198e-003 8.18298198e-003 2.27410011e-002 4.10000000e+001 + 7.27410018e-002 2.27410011e-002 2.27410011e-002 2.37777457e-002 9.00000000e+000 + 9.05157849e-002 2.37777457e-002 1.77747831e-002 1.97250992e-002 7.00000000e+000 + 1.00000001e-001 9.48421657e-003 9.48421657e-003 2.28166748e-002 1.00000000e+001 + 1.10935345e-001 2.28166748e-002 1.09353438e-002 1.14226975e-002 5.00000000e+000 + 1.22358046e-001 1.14226975e-002 1.14226975e-002 1.73314195e-002 1.10000000e+001 + 1.39689460e-001 1.73314195e-002 1.73314195e-002 2.22731773e-002 5.00000000e+000 + 1.50000006e-001 1.03105409e-002 1.03105409e-002 2.36999970e-002 5.00000000e+000 + 1.60120085e-001 2.36999970e-002 1.01200854e-002 1.07514914e-002 9.00000000e+000 + 1.70871586e-001 1.07514914e-002 1.07514914e-002 1.90458894e-002 9.00000000e+000 + 1.89917475e-001 1.90458894e-002 1.90458894e-002 2.06310935e-002 5.00000000e+000 + 2.00000003e-001 1.00825354e-002 1.00825354e-002 2.07613520e-002 1.10000000e+001 + 2.20761359e-001 2.07613520e-002 2.07613520e-002 2.20867749e-002 1.10000000e+001 + 2.42848128e-001 2.20867749e-002 2.20867749e-002 2.46330742e-002 9.00000000e+000 + 2.50000000e-001 7.15187239e-003 7.15187239e-003 2.47527175e-002 8.00000000e+000 + 2.74752706e-001 2.47527175e-002 2.47527175e-002 2.45418195e-002 5.00000000e+000 + 2.89711207e-001 2.45418195e-002 1.49584832e-002 1.37050040e-002 9.00000000e+000 + 3.00000012e-001 1.02888010e-002 1.02888010e-002 1.75118446e-002 9.00000000e+000 + 3.15365672e-001 1.75118446e-002 1.53656732e-002 1.55477561e-002 9.00000000e+000 + 3.30913424e-001 1.55477561e-002 1.55477561e-002 2.09076032e-002 5.00000000e+000 + 3.49999994e-001 1.90865714e-002 1.90865714e-002 1.82817988e-002 5.00000000e+000 + 3.68281811e-001 1.82817988e-002 1.82817988e-002 2.65394375e-002 8.00000000e+000 + 3.87463331e-001 2.65394375e-002 1.91815235e-002 2.10077241e-002 9.00000000e+000 + 4.00000006e-001 1.25366775e-002 1.25366775e-002 1.20385019e-002 2.90000000e+001 + 4.12038505e-001 1.20385019e-002 1.20385019e-002 2.06891522e-002 9.00000000e+000 + 4.27440852e-001 2.06891522e-002 1.54023534e-002 1.85789559e-002 2.90000000e+001 + 4.46019828e-001 1.85789559e-002 1.85789559e-002 2.34137960e-002 9.00000000e+000 + 4.50000018e-001 3.98018956e-003 3.98018956e-003 5.95660228e-003 2.90000000e+001 + 4.55956608e-001 5.95660228e-003 5.95660228e-003 8.34033452e-003 1.10000000e+001 + 4.64296937e-001 8.34033452e-003 8.34033452e-003 1.60274003e-002 3.70000000e+001 + 4.80324358e-001 1.60274003e-002 1.60274003e-002 2.28881817e-002 9.00000000e+000 + 5.00000000e-001 1.96756627e-002 1.96756627e-002 2.08391380e-002 7.00000000e+000 + 5.20839155e-001 2.08391380e-002 2.08391380e-002 2.20011361e-002 9.00000000e+000 + 5.42840302e-001 2.20011361e-002 2.20011361e-002 2.21460555e-002 5.00000000e+000 + 5.50000012e-001 7.15972669e-003 7.15972669e-003 7.09751016e-003 1.50000000e+001 + 5.57097495e-001 7.09751016e-003 7.09751016e-003 1.50501607e-002 1.50000000e+001 + 5.72147667e-001 1.50501607e-002 1.50501607e-002 1.86319258e-002 1.50000000e+001 + 5.90779603e-001 1.86319258e-002 1.86319258e-002 2.77909208e-002 1.10000000e+001 + 6.00000024e-001 9.22040362e-003 9.22040362e-003 1.09847970e-002 9.00000000e+000 + 6.10984802e-001 1.09847970e-002 1.09847970e-002 1.93563215e-002 7.00000000e+000 + 6.30341113e-001 1.93563215e-002 1.93563215e-002 2.88786851e-002 8.00000000e+000 + 6.50000036e-001 1.96588822e-002 1.96588822e-002 2.04996169e-002 3.70000000e+001 + 6.70499623e-001 2.04996169e-002 2.04996169e-002 2.05910653e-002 1.50000000e+001 + 6.91090703e-001 2.05910653e-002 2.05910653e-002 2.31486820e-002 3.60000000e+001 + 6.99999988e-001 8.90931860e-003 8.90931860e-003 9.29251499e-003 1.50000000e+001 + 7.09292531e-001 9.29251499e-003 9.29251499e-003 1.72127504e-002 3.50000000e+001 + 7.26505280e-001 1.72127504e-002 1.72127504e-002 2.48161796e-002 5.00000000e+000 + 7.50000000e-001 2.34947335e-002 2.34947335e-002 2.19880082e-002 1.50000000e+001 + 7.71988034e-001 2.19880082e-002 2.19880082e-002 2.50521209e-002 9.00000000e+000 + 7.97040164e-001 2.50521209e-002 2.50521209e-002 2.53270753e-002 1.10000000e+001 + 8.00000012e-001 2.95987120e-003 2.95987120e-003 5.28612360e-003 3.70000000e+001 + 8.05286109e-001 5.28612360e-003 5.28612360e-003 1.13487355e-002 5.00000000e+000 + 8.16634893e-001 1.13487355e-002 1.13487355e-002 1.96028911e-002 3.70000000e+001 + 8.33570540e-001 1.96028911e-002 1.69356633e-002 1.66237634e-002 5.00000000e+000 + 8.46137583e-001 1.64294783e-002 1.25670442e-002 1.32564399e-002 1.50000000e+001 + 8.50000024e-001 3.86243360e-003 3.86243360e-003 4.46102768e-003 1.50000000e+001 + 8.54461014e-001 4.46102768e-003 4.46102768e-003 9.75258183e-003 4.50000000e+001 + 8.64213645e-001 9.75258183e-003 9.75258183e-003 1.58354137e-002 1.50000000e+001 + 8.80049050e-001 1.58354137e-002 1.58354137e-002 1.75212231e-002 1.50000000e+001 + 8.95768821e-001 1.75212231e-002 1.57197770e-002 2.06265133e-002 1.50000000e+001 + 9.00000036e-001 4.23120055e-003 4.23120055e-003 2.06265133e-002 1.50000000e+001 + 9.20626521e-001 2.06265133e-002 2.06265133e-002 2.22139768e-002 5.00000000e+000 + 9.40020025e-001 2.22139768e-002 1.93934869e-002 2.28900816e-002 1.10000000e+001 + 9.49999988e-001 9.98000056e-003 9.98000056e-003 9.78896488e-003 1.50000000e+001 + 9.59788978e-001 9.78896488e-003 9.78896488e-003 1.76928565e-002 5.00000000e+000 + 9.77481842e-001 1.76928565e-002 1.76928565e-002 2.71279123e-002 1.50000000e+001 + 1.00000000e+000 2.25181784e-002 2.25181784e-002 2.03979798e-002 5.00000000e+000 + 1.02039802e+000 2.03979798e-002 2.03979798e-002 2.06671413e-002 5.00000000e+000 + 1.04106510e+000 2.06671413e-002 2.06671413e-002 2.36375257e-002 3.70000000e+001 + 1.05000007e+000 8.93487968e-003 8.93487968e-003 9.69749875e-003 1.10000000e+001 + 1.05969751e+000 9.69749875e-003 9.69749875e-003 1.75628942e-002 4.50000000e+001 + 1.07726038e+000 1.75628942e-002 1.75628942e-002 2.08862461e-002 1.50000000e+001 + 1.09814668e+000 2.08862461e-002 2.08862461e-002 2.42779832e-002 7.00000000e+000 + 1.10000002e+000 1.85336126e-003 1.85336126e-003 2.42779832e-002 7.00000000e+000 + 1.12427795e+000 2.42779832e-002 2.42779832e-002 2.43623611e-002 4.50000000e+001 + 1.14864039e+000 2.43623611e-002 2.43623611e-002 2.45558210e-002 1.50000000e+001 + 1.14999998e+000 1.35965587e-003 1.35965587e-003 2.45558210e-002 1.50000000e+001 + 1.17455590e+000 2.45558210e-002 2.45558210e-002 2.24102233e-002 1.50000000e+001 + 1.19696605e+000 2.24102233e-002 2.24102233e-002 2.10259221e-002 1.50000000e+001 + 1.20000005e+000 3.03395698e-003 3.03395698e-003 2.10259221e-002 1.10000000e+001 + 1.22102594e+000 2.10259221e-002 2.10259221e-002 2.21147053e-002 1.50000000e+001 + 1.24314070e+000 2.21147053e-002 2.21147053e-002 2.83976886e-002 3.70000000e+001 + 1.25000000e+000 6.85937377e-003 6.85937377e-003 7.46589294e-003 3.70000000e+001 + 1.25746596e+000 7.46589294e-003 7.46589294e-003 1.21333012e-002 3.70000000e+001 + 1.26959920e+000 1.21333012e-002 1.21333012e-002 1.41541725e-002 4.50000000e+001 + 1.28375340e+000 1.41541725e-002 1.41541725e-002 1.98099334e-002 4.50000000e+001 + 1.30000007e+000 1.62466336e-002 1.62466336e-002 2.18388550e-002 9.00000000e+000 + 1.32183886e+000 2.18388550e-002 2.18388550e-002 2.42168680e-002 1.10000000e+001 + 1.34605575e+000 2.42168680e-002 2.42168680e-002 2.94979978e-002 9.00000000e+000 + 1.35000002e+000 3.94427730e-003 3.94427730e-003 2.94979978e-002 7.00000000e+000 + 1.37031102e+000 2.94979978e-002 2.03109570e-002 2.52324305e-002 7.00000000e+000 + 1.39554346e+000 2.52324305e-002 2.52324305e-002 3.07907611e-002 5.00000000e+000 + 1.39999998e+000 4.45661275e-003 4.45661275e-003 3.07907611e-002 2.90000000e+001 + 1.42613304e+000 3.07907611e-002 2.61330642e-002 2.70701032e-002 1.10000000e+001 + 1.45000005e+000 2.38669366e-002 2.38669366e-002 2.49720532e-002 1.50000000e+001 + 1.47497213e+000 2.49720532e-002 2.49720532e-002 2.92371660e-002 7.00000000e+000 + 1.50000000e+000 2.50279475e-002 2.50279475e-002 2.61732060e-002 1.50000000e+001 + 1.52617323e+000 2.61732060e-002 2.61732060e-002 2.59126406e-002 5.00000000e+000 + 1.55000007e+000 2.38267947e-002 2.38267947e-002 2.32506692e-002 1.10000000e+001 + 1.56894910e+000 2.32506692e-002 1.89490467e-002 2.01085601e-002 1.50000000e+001 + 1.58905768e+000 2.01085601e-002 2.01085601e-002 2.45779436e-002 2.70000000e+001 + 1.60000002e+000 1.09423939e-002 1.09423939e-002 1.65136456e-002 2.70000000e+001 + 1.61651373e+000 1.65136456e-002 1.65136456e-002 2.38628164e-002 2.70000000e+001 + 1.64037645e+000 2.38628164e-002 2.38628164e-002 2.19553858e-002 9.00000000e+000 + 1.64999998e+000 9.62353777e-003 9.62353777e-003 1.12750111e-002 3.70000000e+001 + 1.66127503e+000 1.12750111e-002 1.12750111e-002 2.08534561e-002 1.10000000e+001 + 1.68212855e+000 2.08534561e-002 2.08534561e-002 2.87260041e-002 9.00000000e+000 + 1.70000005e+000 1.78715326e-002 1.78715326e-002 1.78794246e-002 1.50000000e+001 + 1.71787941e+000 1.78794246e-002 1.78794246e-002 2.39848346e-002 9.00000000e+000 + 1.73700452e+000 2.39848346e-002 1.91250909e-002 1.96920373e-002 9.00000000e+000 + 1.75000000e+000 1.29954852e-002 1.29954852e-002 1.49335349e-002 3.70000000e+001 + 1.76493359e+000 1.49335349e-002 1.49335349e-002 2.05503311e-002 3.70000000e+001 + 1.78548384e+000 2.05503311e-002 2.05503311e-002 2.62225065e-002 9.00000000e+000 + 1.80000007e+000 1.45161347e-002 1.45161347e-002 2.04397384e-002 2.90000000e+001 + 1.82043982e+000 2.04397384e-002 2.04397384e-002 3.13697234e-002 1.50000000e+001 + 1.84409559e+000 2.95602623e-002 2.36558281e-002 2.66021881e-002 7.00000000e+000 + 1.85000002e+000 5.90443425e-003 5.90443425e-003 2.66021881e-002 2.50000000e+001 + 1.87660217e+000 2.66021881e-002 2.66021881e-002 2.68413574e-002 1.50000000e+001 + 1.89999998e+000 2.33978126e-002 2.33978126e-002 2.66843345e-002 9.00000000e+000 + 1.92668438e+000 2.66843345e-002 2.66843345e-002 3.03133838e-002 1.10000000e+001 + 1.95000005e+000 2.33156662e-002 2.33156662e-002 2.92793140e-002 4.50000000e+001 + 1.97395909e+000 2.92793140e-002 2.39590034e-002 2.61395108e-002 4.50000000e+001 + 2.00000000e+000 2.60409974e-002 2.60409974e-002 3.12448069e-002 3.70000000e+001 + 2.03124475e+000 3.12448069e-002 3.12448069e-002 3.53926234e-002 4.50000000e+001 + 2.04999995e+000 1.87551938e-002 1.87551938e-002 3.25916968e-002 1.10000000e+001 + 2.07830954e+000 3.25916968e-002 2.83095818e-002 2.90316381e-002 9.00000000e+000 + 2.10000014e+000 2.16904189e-002 2.16904189e-002 2.21379008e-002 1.50000000e+001 + 2.12213802e+000 2.21379008e-002 2.21379008e-002 2.75327712e-002 2.90000000e+001 + 2.14967060e+000 2.75327712e-002 2.75327712e-002 3.05028465e-002 3.90000000e+001 + 2.15000010e+000 3.29328177e-004 3.29328177e-004 3.05028465e-002 3.90000000e+001 + 2.17312336e+000 3.05028465e-002 2.31233574e-002 2.25987192e-002 2.90000000e+001 + 2.19572210e+000 2.25987192e-002 2.25987192e-002 2.46350057e-002 1.50000000e+001 + 2.20000005e+000 4.27792408e-003 4.27792408e-003 4.88738017e-003 1.50000000e+001 + 2.20488739e+000 4.88738017e-003 4.88738017e-003 5.87147335e-003 2.90000000e+001 + 2.21075892e+000 5.87147335e-003 5.87147335e-003 8.96947272e-003 2.90000000e+001 + 2.21972847e+000 8.96947272e-003 8.96947272e-003 1.23321004e-002 2.90000000e+001 + 2.23206043e+000 1.23321004e-002 1.23321004e-002 1.96165442e-002 1.50000000e+001 + 2.25000000e+000 1.79395750e-002 1.79395750e-002 2.14174893e-002 4.50000000e+001 + 2.27141762e+000 2.14174893e-002 2.14174893e-002 3.00017800e-002 3.10000000e+001 + 2.29643345e+000 2.85825115e-002 2.50158738e-002 2.72340085e-002 2.90000000e+001 + 2.29999995e+000 3.56663764e-003 3.56663764e-003 5.31830220e-003 2.90000000e+001 + 2.30531836e+000 5.31830220e-003 5.31830220e-003 6.91342726e-003 2.90000000e+001 + 2.31223178e+000 6.91342726e-003 6.91342726e-003 1.19795650e-002 3.70000000e+001 + 2.32421136e+000 1.19795650e-002 1.19795650e-002 2.13524569e-002 4.50000000e+001 + 2.34556389e+000 2.13524569e-002 2.13524569e-002 2.20009014e-002 3.70000000e+001 + 2.35000014e+000 4.43624891e-003 4.43624891e-003 2.20009014e-002 3.70000000e+001 + 2.37200093e+000 2.20009014e-002 2.20009014e-002 2.27109753e-002 3.70000000e+001 + 2.39471197e+000 2.27109753e-002 2.27109753e-002 2.42642127e-002 5.00000000e+000 + 2.40000010e+000 5.28812269e-003 5.28812269e-003 2.42642127e-002 3.10000000e+001 + 2.42426419e+000 2.42642127e-002 2.42642127e-002 2.54806392e-002 3.10000000e+001 + 2.44974494e+000 2.54806392e-002 2.54806392e-002 3.31017040e-002 3.70000000e+001 + 2.45000005e+000 2.55148945e-004 2.55148945e-004 3.31017040e-002 3.70000000e+001 + 2.47592354e+000 3.31017040e-002 2.59234495e-002 2.80497558e-002 1.50000000e+001 + 2.50000000e+000 2.40765512e-002 2.40765512e-002 3.47426385e-002 9.00000000e+000 + 2.53474259e+000 3.47426385e-002 3.47426385e-002 3.53255756e-002 5.00000000e+000 + 2.54999995e+000 1.52573623e-002 1.52573623e-002 1.94439944e-002 3.70000000e+001 + 2.56944394e+000 1.94439944e-002 1.94439944e-002 2.22873185e-002 3.70000000e+001 + 2.59173131e+000 2.22873185e-002 2.22873185e-002 2.46922821e-002 3.70000000e+001 + 2.60000014e+000 8.26868694e-003 8.26868694e-003 9.62440204e-003 3.70000000e+001 + 2.60962439e+000 9.62440204e-003 9.62440204e-003 1.58533007e-002 1.50000000e+001 + 2.62547779e+000 1.58533007e-002 1.58533007e-002 1.66021064e-002 1.50000000e+001 + 2.64207983e+000 1.66021064e-002 1.66021064e-002 1.92888398e-002 3.70000000e+001 + 2.65000010e+000 7.92019255e-003 7.92019255e-003 1.06315371e-002 2.90000000e+001 + 2.66063166e+000 1.06315371e-002 1.06315371e-002 1.80985630e-002 1.50000000e+001 + 2.67873025e+000 1.80985630e-002 1.80985630e-002 1.96564235e-002 1.50000000e+001 + 2.69838667e+000 1.96564235e-002 1.96564235e-002 2.22592205e-002 5.00000000e+000 + 2.70000005e+000 1.61347771e-003 1.61347771e-003 2.22592205e-002 5.00000000e+000 + 2.72225928e+000 2.22592205e-002 2.22592205e-002 2.58834790e-002 5.00000000e+000 + 2.74814272e+000 2.58834790e-002 2.58834790e-002 2.81123035e-002 5.00000000e+000 + 2.75000000e+000 1.85730052e-003 1.85730052e-003 2.81123035e-002 5.00000000e+000 + 2.77811241e+000 2.81123035e-002 2.81123035e-002 2.95099486e-002 9.00000000e+000 + 2.79999995e+000 2.18876973e-002 2.18876973e-002 3.00153866e-002 9.00000000e+000 + 2.83001542e+000 3.00153866e-002 3.00153866e-002 2.89556794e-002 5.00000000e+000 + 2.85000014e+000 1.99846141e-002 1.99846141e-002 2.51792278e-002 4.50000000e+001 + 2.87257099e+000 2.51792278e-002 2.25708820e-002 2.34532077e-002 9.00000000e+000 + 2.89602423e+000 2.34532077e-002 2.34532077e-002 2.57035997e-002 2.70000000e+001 + 2.90000010e+000 3.97591107e-003 3.97591107e-003 5.02867904e-003 1.50000000e+001 + 2.90502882e+000 5.02867904e-003 5.02867904e-003 8.65203608e-003 3.50000000e+001 + 2.91368079e+000 8.65203608e-003 8.65203608e-003 1.04875769e-002 4.50000000e+001 + 2.92416835e+000 1.04875769e-002 1.04875769e-002 1.30167436e-002 3.70000000e+001 + 2.93718505e+000 1.30167436e-002 1.30167436e-002 1.28905205e-002 1.50000000e+001 + 2.94728851e+000 1.28149651e-002 1.01033812e-002 1.10027511e-002 2.90000000e+001 + 2.95000005e+000 2.71158316e-003 2.71158316e-003 3.20843747e-003 2.30000000e+001 + 2.95320845e+000 3.20843747e-003 3.20843747e-003 7.21747475e-003 3.50000000e+001 + 2.96042585e+000 7.21747475e-003 7.21747475e-003 1.05089294e-002 2.30000000e+001 + 2.97093487e+000 1.05089294e-002 1.05089294e-002 1.48290871e-002 2.90000000e+001 + 2.98576403e+000 1.48290871e-002 1.48290871e-002 1.87401511e-002 4.50000000e+001 + 3.00000000e+000 1.42360711e-002 1.42360711e-002 1.70830898e-002 3.70000000e+001 + 3.01708317e+000 1.70830898e-002 1.70830898e-002 1.60043724e-002 9.00000000e+000 + 3.03308749e+000 1.60043724e-002 1.60043724e-002 1.52448434e-002 9.00000000e+000 + 3.04833245e+000 1.52448434e-002 1.52448434e-002 1.82262547e-002 7.00000000e+000 + 3.04999995e+000 1.66769396e-003 1.66769396e-003 1.82262547e-002 7.00000000e+000 + 3.06822634e+000 1.82262547e-002 1.82262547e-002 2.18097903e-002 9.00000000e+000 + 3.09003615e+000 2.18097903e-002 2.18097903e-002 2.16706432e-002 9.00000000e+000 + 3.10000014e+000 9.96395387e-003 9.96395387e-003 1.26174204e-002 9.00000000e+000 + 3.11261749e+000 1.26174204e-002 1.26174204e-002 2.00801250e-002 3.50000000e+001 + 3.13269758e+000 2.00801250e-002 2.00801250e-002 2.26488467e-002 9.00000000e+000 + 3.15000010e+000 1.73024554e-002 1.73024554e-002 2.11464521e-002 9.00000000e+000 + 3.17114639e+000 2.11464521e-002 2.11464521e-002 1.92864425e-002 9.00000000e+000 + 3.18511677e+000 1.92864425e-002 1.39702354e-002 1.41943572e-002 9.00000000e+000 + 3.19931102e+000 1.41943572e-002 1.41943572e-002 1.52893998e-002 9.00000000e+000 + 3.20000005e+000 6.88956759e-004 6.88956759e-004 1.52893998e-002 9.00000000e+000 + 3.21528935e+000 1.52893998e-002 1.52893998e-002 2.47584730e-002 1.10000000e+001 + 3.24004793e+000 2.47584730e-002 2.47584730e-002 2.46770661e-002 9.00000000e+000 + 3.25000000e+000 9.95212886e-003 9.95212886e-003 2.34977268e-002 9.00000000e+000 + 3.27349782e+000 2.34977268e-002 2.34977268e-002 2.15547979e-002 9.00000000e+000 + 3.29505253e+000 2.15547979e-002 2.15547979e-002 1.95150375e-002 9.00000000e+000 + 3.29999995e+000 4.94747702e-003 4.94747702e-003 6.90035336e-003 3.70000000e+001 + 3.30690050e+000 6.90035336e-003 6.90035336e-003 1.11159710e-002 4.30000000e+001 + 3.31801629e+000 1.11159710e-002 1.11159710e-002 1.68087352e-002 3.70000000e+001 + 3.33482504e+000 1.68087352e-002 1.68087352e-002 2.81348154e-002 5.00000000e+000 + 3.35000014e+000 1.51749421e-002 1.51749421e-002 1.81033947e-002 1.50000000e+001 + 3.36810350e+000 1.81033947e-002 1.81033947e-002 2.62243375e-002 4.30000000e+001 + 3.39432788e+000 2.62243375e-002 2.62243375e-002 2.50973906e-002 7.00000000e+000 + 3.40000010e+000 5.67226904e-003 5.67226904e-003 5.73142199e-003 2.90000000e+001 + 3.40573144e+000 5.73142199e-003 5.73142199e-003 9.19183809e-003 3.30000000e+001 + 3.41492343e+000 9.19183809e-003 9.19183809e-003 1.40414666e-002 3.30000000e+001 + 3.42896485e+000 1.40414666e-002 1.40414666e-002 1.76469907e-002 3.30000000e+001 + 3.44661188e+000 1.76469907e-002 1.76469907e-002 1.82769950e-002 3.30000000e+001 + 3.45000005e+000 3.38828331e-003 3.38828331e-003 4.74619307e-003 4.50000000e+001 + 3.45474625e+000 4.74619307e-003 4.74619307e-003 9.10066068e-003 3.30000000e+001 + 3.46384692e+000 9.10066068e-003 9.10066068e-003 1.70701183e-002 7.00000000e+000 + 3.48091698e+000 1.70701183e-002 1.70701183e-002 1.87093522e-002 4.50000000e+001 + 3.49962640e+000 1.87093522e-002 1.87093522e-002 1.94901787e-002 5.00000000e+000 + 3.50000000e+000 3.73676419e-004 3.73676419e-004 1.94901787e-002 5.00000000e+000 + 3.51949024e+000 1.94901787e-002 1.94901787e-002 2.31601764e-002 5.00000000e+000 + 3.54265046e+000 2.31601764e-002 2.31601764e-002 2.53061559e-002 4.30000000e+001 + 3.54873896e+000 7.34964479e-003 6.08860468e-003 7.58182956e-003 4.50000000e+001 + 3.54999995e+000 1.26104010e-003 1.26104010e-003 7.58182956e-003 2.50000000e+001 + 3.55758190e+000 7.58182956e-003 7.58182956e-003 1.65637638e-002 4.30000000e+001 + 3.57414556e+000 1.65637638e-002 1.65637638e-002 1.59659516e-002 4.50000000e+001 + 3.59011149e+000 1.59659516e-002 1.59659516e-002 2.27339379e-002 4.50000000e+001 + 3.60000014e+000 9.88845620e-003 9.88845620e-003 2.71097496e-002 9.00000000e+000 + 3.62710977e+000 2.71097496e-002 2.71097496e-002 2.55956538e-002 7.00000000e+000 + 3.65000010e+000 2.28902511e-002 2.28902511e-002 2.35788487e-002 9.00000000e+000 + 3.66794086e+000 2.35788487e-002 1.79408807e-002 1.95247550e-002 4.50000000e+001 + 3.68746567e+000 1.95247550e-002 1.95247550e-002 2.20299698e-002 5.00000000e+000 + 3.70000005e+000 1.25343651e-002 1.25343651e-002 1.41593050e-002 5.00000000e+000 + 3.71415925e+000 1.41593050e-002 1.41593050e-002 1.96833517e-002 1.50000000e+001 + 3.73384261e+000 1.96833517e-002 1.96833517e-002 2.27563456e-002 5.00000000e+000 + 3.74824023e+000 1.61573440e-002 1.43974600e-002 1.33808963e-002 9.00000000e+000 + 3.75000000e+000 1.75988476e-003 1.75988476e-003 1.89383072e-003 2.90000000e+001 + 3.75189400e+000 1.89383072e-003 1.89383072e-003 2.85229762e-003 9.00000000e+000 + 3.75474620e+000 2.85229762e-003 2.85229762e-003 5.23521844e-003 9.00000000e+000 + 3.75998139e+000 5.23521844e-003 5.23521844e-003 5.06086135e-003 4.50000000e+001 + 3.76504230e+000 5.06086135e-003 5.06086135e-003 7.06311315e-003 4.50000000e+001 + 3.76762176e+000 7.06311315e-003 2.57944036e-003 2.46207626e-003 5.00000000e+000 + 3.77008367e+000 2.46207626e-003 2.46207626e-003 3.43325920e-003 5.00000000e+000 + 3.77351713e+000 3.43325920e-003 3.43325920e-003 5.36888279e-003 5.00000000e+000 + 3.77888584e+000 5.36888279e-003 5.36888279e-003 5.33847744e-003 5.00000000e+000 + 3.78422451e+000 5.33847744e-003 5.33847744e-003 5.51782642e-003 5.00000000e+000 + 3.78974223e+000 5.51782642e-003 5.51782642e-003 6.26468426e-003 5.00000000e+000 + 3.79600692e+000 6.26468426e-003 6.26468426e-003 6.34557568e-003 1.50000000e+001 + 3.79999995e+000 3.99314566e-003 3.99314566e-003 4.56693769e-003 5.00000000e+000 + 3.80456710e+000 4.56693769e-003 4.56693769e-003 6.30745152e-003 5.00000000e+000 + 3.81087446e+000 6.30745152e-003 6.30745152e-003 7.36514525e-003 5.00000000e+000 + 3.81823969e+000 7.36514525e-003 7.36514525e-003 1.26235457e-002 1.10000000e+001 + 3.83086324e+000 1.26235457e-002 1.26235457e-002 1.65244471e-002 5.00000000e+000 + 3.84738755e+000 1.65244471e-002 1.65244471e-002 2.62247454e-002 1.10000000e+001 + 3.85000014e+000 2.61247321e-003 2.61247321e-003 2.62247454e-002 1.10000000e+001 + 3.87021875e+000 2.62247454e-002 2.02186983e-002 2.23418772e-002 1.50000000e+001 + 3.89256072e+000 2.23418772e-002 2.23418772e-002 2.10942607e-002 5.00000000e+000 + 3.90000010e+000 7.43942522e-003 7.43942522e-003 8.51938035e-003 4.50000000e+001 + 3.90851951e+000 8.51938035e-003 8.51938035e-003 1.21158017e-002 3.70000000e+001 + 3.92063522e+000 1.21158017e-002 1.21158017e-002 1.61342379e-002 3.70000000e+001 + 3.93676949e+000 1.61342379e-002 1.61342379e-002 2.12970413e-002 3.70000000e+001 + 3.95000005e+000 1.32305808e-002 1.32305808e-002 1.45980427e-002 4.50000000e+001 + 3.96459818e+000 1.45980427e-002 1.45980427e-002 1.56944972e-002 4.50000000e+001 + 3.98029256e+000 1.56944972e-002 1.56944972e-002 1.78740006e-002 5.00000000e+000 + 3.99437237e+000 1.78740006e-002 1.40797906e-002 1.52956480e-002 4.50000000e+001 + 4.00000000e+000 5.62766893e-003 5.62766893e-003 7.86538329e-003 4.10000000e+001 + 4.00786543e+000 7.86538329e-003 7.86538329e-003 1.47584183e-002 3.50000000e+001 + 4.02262402e+000 1.47584183e-002 1.47584183e-002 2.05913633e-002 5.00000000e+000 + 4.04321527e+000 2.05913633e-002 2.05913633e-002 2.51277518e-002 4.10000000e+001 + 4.05000019e+000 6.78483676e-003 6.78483676e-003 9.39967204e-003 4.10000000e+001 + 4.05939960e+000 9.39967204e-003 9.39967204e-003 1.19817005e-002 4.10000000e+001 + 4.07138157e+000 1.19817005e-002 1.19817005e-002 1.30600445e-002 4.10000000e+001 + 4.08444166e+000 1.30600445e-002 1.30600445e-002 1.46792866e-002 1.50000000e+001 + 4.09912062e+000 1.46792866e-002 1.46792866e-002 2.09672768e-002 4.10000000e+001 + 4.09999990e+000 8.79297673e-004 8.79297673e-004 2.09672768e-002 4.10000000e+001 + 4.11318254e+000 2.09672768e-002 1.31824026e-002 1.72325633e-002 5.00000000e+000 + 4.13041496e+000 1.72325633e-002 1.72325633e-002 2.33208556e-002 2.90000000e+001 + 4.15000010e+000 1.95850357e-002 1.95850357e-002 2.08588485e-002 5.00000000e+000 + 4.17085886e+000 2.08588485e-002 2.08588485e-002 2.24987566e-002 8.00000000e+000 + 4.19335747e+000 2.24987566e-002 2.24987566e-002 2.08807085e-002 8.00000000e+000 + 4.20000029e+000 6.64239516e-003 6.64239516e-003 7.73999700e-003 2.90000000e+001 + 4.20773983e+000 7.73999700e-003 7.73999700e-003 1.21723739e-002 3.90000000e+001 + 4.21991253e+000 1.21723739e-002 1.21723739e-002 2.49400530e-002 4.50000000e+001 + 4.24485254e+000 2.49400530e-002 2.49400530e-002 2.29120702e-002 5.00000000e+000 + 4.25000000e+000 5.14757680e-003 5.14757680e-003 7.64521305e-003 2.90000000e+001 + 4.25764513e+000 7.64521305e-003 7.64521305e-003 1.75681841e-002 2.90000000e+001 + 4.27521324e+000 1.75681841e-002 1.75681841e-002 2.52531506e-002 5.00000000e+000 + 4.30000019e+000 2.47866027e-002 2.47866027e-002 2.26444360e-002 5.00000000e+000 + 4.32264471e+000 2.26444360e-002 2.26444360e-002 2.53014360e-002 1.50000000e+001 + 4.34245539e+000 2.53014360e-002 1.98107101e-002 2.07853224e-002 1.50000000e+001 + 4.34999990e+000 7.54485372e-003 7.54485372e-003 7.88425654e-003 1.50000000e+001 + 4.35788441e+000 7.88425654e-003 7.88425654e-003 1.59540512e-002 1.50000000e+001 + 4.37383842e+000 1.59540512e-002 1.59540512e-002 2.51675267e-002 5.00000000e+000 + 4.38732052e+000 2.51675267e-002 1.34822810e-002 1.34870671e-002 1.50000000e+001 + 4.40000010e+000 1.26794120e-002 1.26794120e-002 1.26350923e-002 3.10000000e+001 + 4.41263533e+000 1.26350923e-002 1.26350923e-002 1.95025206e-002 1.50000000e+001 + 4.43213749e+000 1.95025206e-002 1.95025206e-002 1.87052339e-002 1.50000000e+001 + 4.45000029e+000 1.78623889e-002 1.78623889e-002 2.10452750e-002 2.50000000e+001 + 4.47104549e+000 2.10452750e-002 2.10452750e-002 2.12833714e-002 5.00000000e+000 + 4.49232864e+000 2.12833714e-002 2.12833714e-002 2.03946661e-002 5.00000000e+000 + 4.50000000e+000 7.67135434e-003 7.67135434e-003 8.15666746e-003 2.50000000e+001 + 4.50815678e+000 8.15666746e-003 8.15666746e-003 1.61284227e-002 3.70000000e+001 + 4.52428532e+000 1.61284227e-002 1.61284227e-002 2.08633766e-002 5.00000000e+000 + 4.54514837e+000 2.08633766e-002 2.08633766e-002 2.67717298e-002 5.00000000e+000 + 4.55000019e+000 4.85153310e-003 4.85153310e-003 2.67717298e-002 5.00000000e+000 + 4.57677174e+000 2.67717298e-002 2.67717298e-002 2.61369050e-002 5.00000000e+000 + 4.59999990e+000 2.32282709e-002 2.32282709e-002 2.31254958e-002 5.00000000e+000 + 4.62312555e+000 2.31254958e-002 2.31254958e-002 2.87798122e-002 8.00000000e+000 + 4.65000010e+000 2.68745050e-002 2.68745050e-002 2.59787105e-002 7.00000000e+000 + 4.67597866e+000 2.59787105e-002 2.59787105e-002 2.54812296e-002 5.00000000e+000 + 4.69696379e+000 2.40212902e-002 2.09850315e-002 2.04545688e-002 9.00000000e+000 + 4.70000029e+000 3.03625921e-003 3.03625921e-003 2.04545688e-002 4.10000000e+001 + 4.72045469e+000 2.04545688e-002 2.04545688e-002 2.18011327e-002 9.00000000e+000 + 4.74225569e+000 2.18011327e-002 2.18011327e-002 2.51867883e-002 4.10000000e+001 + 4.74864149e+000 7.74429971e-003 6.38591684e-003 7.95372389e-003 4.10000000e+001 + 4.75000000e+000 1.35838275e-003 1.35838275e-003 7.95372389e-003 4.10000000e+001 + 4.75795364e+000 7.95372389e-003 7.95372389e-003 1.82486251e-002 2.70000000e+001 + 4.77620220e+000 1.82486251e-002 1.82486251e-002 2.10819021e-002 1.50000000e+001 + 4.79728413e+000 2.10819021e-002 2.10819021e-002 2.34708842e-002 1.50000000e+001 + 4.80000019e+000 2.71574920e-003 2.71574920e-003 2.34708842e-002 3.70000000e+001 + 4.82347107e+000 2.34708842e-002 2.34708842e-002 2.50374097e-002 9.00000000e+000 + 4.84850836e+000 2.50374097e-002 2.50374097e-002 2.26493292e-002 4.50000000e+001 + 4.84999990e+000 1.49170670e-003 1.49170670e-003 2.26493292e-002 4.50000000e+001 + 4.87264919e+000 2.26493292e-002 2.26493292e-002 3.10065839e-002 9.00000000e+000 + 4.89668846e+000 2.73506716e-002 2.40388904e-002 2.40270365e-002 9.00000000e+000 + 4.90000010e+000 3.31177982e-003 3.31177982e-003 2.40270365e-002 1.50000000e+001 + 4.92402697e+000 2.40270365e-002 2.40270365e-002 2.61237677e-002 5.00000000e+000 + 4.95000029e+000 2.59729642e-002 2.59729642e-002 2.71526221e-002 8.00000000e+000 + 4.97715282e+000 2.71526221e-002 2.71526221e-002 2.50165835e-002 9.00000000e+000 + 5.00000000e+000 2.28473786e-002 2.28473786e-002 2.52699368e-002 9.00000000e+000 + 5.02207565e+000 2.52699368e-002 2.20757332e-002 2.26081200e-002 9.00000000e+000 + 5.04468393e+000 2.26081200e-002 2.26081200e-002 2.32073534e-002 1.50000000e+001 + 5.05000019e+000 5.31614805e-003 5.31614805e-003 5.64638386e-003 1.50000000e+001 + 5.05564642e+000 5.64638386e-003 5.64638386e-003 9.74362995e-003 1.50000000e+001 + 5.06539011e+000 9.74362995e-003 9.74362995e-003 9.97530390e-003 1.50000000e+001 + 5.07336855e+000 9.97530390e-003 7.97838718e-003 1.23258466e-002 1.50000000e+001 + 5.08569431e+000 1.23258466e-002 1.23258466e-002 1.15560526e-002 1.50000000e+001 + 5.09725046e+000 1.15560526e-002 1.15560526e-002 1.28111178e-002 1.50000000e+001 + 5.09999990e+000 2.74969987e-003 2.74969987e-003 4.63366881e-003 3.30000000e+001 + 5.10463381e+000 4.63366881e-003 4.63366881e-003 7.03985197e-003 3.30000000e+001 + 5.11167383e+000 7.03985197e-003 7.03985197e-003 3.25842500e-002 3.30000000e+001 + 5.14425802e+000 3.25842500e-002 3.25842500e-002 3.33621688e-002 5.00000000e+000 + 5.15000010e+000 5.74222999e-003 5.74222999e-003 1.20297056e-002 5.00000000e+000 + 5.16202974e+000 1.20297056e-002 1.20297056e-002 1.98409054e-002 3.70000000e+001 + 5.18187046e+000 1.98409054e-002 1.98409054e-002 2.26549376e-002 5.00000000e+000 + 5.20000029e+000 1.81293897e-002 1.81293897e-002 2.67486479e-002 5.00000000e+000 + 5.22123289e+000 2.67486479e-002 2.12326590e-002 2.26808917e-002 9.00000000e+000 + 5.24391365e+000 2.26808917e-002 2.26808917e-002 2.55901143e-002 4.50000000e+001 + 5.25000000e+000 6.08645007e-003 6.08645007e-003 2.55901143e-002 9.00000000e+000 + 5.27559042e+000 2.55901143e-002 2.55901143e-002 2.32511554e-002 9.00000000e+000 + 5.29129648e+000 2.32511554e-002 1.57064665e-002 1.81108546e-002 3.70000000e+001 + 5.30000019e+000 8.70341901e-003 8.70341901e-003 1.21820997e-002 4.50000000e+001 + 5.31218195e+000 1.21820997e-002 1.21820997e-002 1.62567142e-002 4.50000000e+001 + 5.32843876e+000 1.62567142e-002 1.62567142e-002 1.71757936e-002 4.50000000e+001 + 5.33806133e+000 1.71757936e-002 9.62229259e-003 1.11503098e-002 4.50000000e+001 + 5.34921169e+000 1.11503098e-002 1.11503098e-002 1.51746217e-002 4.50000000e+001 + 5.34999990e+000 7.88583769e-004 7.88583769e-004 1.51746217e-002 4.50000000e+001 + 5.36517477e+000 1.51746217e-002 1.51746217e-002 2.02184599e-002 4.50000000e+001 + 5.38539314e+000 2.02184599e-002 2.02184599e-002 2.30938811e-002 4.50000000e+001 + 5.40000010e+000 1.46069191e-002 1.46069191e-002 3.11224572e-002 3.70000000e+001 + 5.43112230e+000 3.11224572e-002 3.11224572e-002 2.98052821e-002 5.00000000e+000 + 5.45000029e+000 1.88775435e-002 1.88775435e-002 2.50963196e-002 3.70000000e+001 + 5.47509623e+000 2.50963196e-002 2.50963196e-002 2.31296085e-002 5.00000000e+000 + 5.49822617e+000 2.31296085e-002 2.31296085e-002 2.39867568e-002 5.00000000e+000 + 5.50000000e+000 1.77407241e-003 1.77407241e-003 2.39867568e-002 5.00000000e+000 + 5.52398682e+000 2.39867568e-002 2.39867568e-002 2.59659290e-002 9.00000000e+000 + 5.54995298e+000 2.59659290e-002 2.59659290e-002 2.48278975e-002 1.50000000e+001 + 5.57478046e+000 2.48278975e-002 2.48278975e-002 2.84080207e-002 5.00000000e+000 + 5.59999990e+000 2.52194181e-002 2.52194181e-002 2.53473744e-002 9.00000000e+000 + 5.62141657e+000 2.53473744e-002 2.14163810e-002 2.23751701e-002 9.00000000e+000 + 5.64379168e+000 2.23751701e-002 2.23751701e-002 2.11976506e-002 5.00000000e+000 + 5.65000010e+000 6.20844960e-003 6.20844960e-003 6.54729689e-003 3.70000000e+001 + 5.65654755e+000 6.54729689e-003 6.54729689e-003 1.31446533e-002 3.70000000e+001 + 5.66969204e+000 1.31446533e-002 1.31446533e-002 2.15559267e-002 5.00000000e+000 + 5.68674755e+000 2.15559267e-002 1.70555972e-002 2.35677566e-002 3.70000000e+001 + 5.70000029e+000 1.32524548e-002 1.32524548e-002 2.34443005e-002 4.10000000e+001 + 5.72344446e+000 2.34443005e-002 2.34443005e-002 3.19801345e-002 1.10000000e+001 + 5.75000000e+000 2.65557002e-002 2.65557002e-002 3.36377919e-002 6.00000000e+000 + 5.77083731e+000 3.36377919e-002 2.08370425e-002 2.48640329e-002 5.00000000e+000 + 5.79124880e+000 2.48640329e-002 2.04117559e-002 2.20511220e-002 5.00000000e+000 + 5.80000019e+000 8.75120051e-003 8.75120051e-003 1.17994007e-002 1.50000000e+001 + 5.81179953e+000 1.17994007e-002 1.17994007e-002 2.69280896e-002 7.00000000e+000 + 5.83872747e+000 2.69280896e-002 2.69280896e-002 2.74773426e-002 5.00000000e+000 + 5.84999990e+000 1.12725114e-002 1.12725114e-002 1.97198540e-002 2.50000000e+001 + 5.86971998e+000 1.97198540e-002 1.97198540e-002 2.65872180e-002 2.90000000e+001 + 5.89630699e+000 2.65872180e-002 2.65872180e-002 2.46579777e-002 9.00000000e+000 + 5.90000010e+000 3.69292777e-003 3.69292777e-003 2.46579777e-002 1.00000000e+001 + 5.92465830e+000 2.46579777e-002 2.46579777e-002 2.87287906e-002 9.00000000e+000 + 5.95000029e+000 2.53420230e-002 2.53420230e-002 2.52731591e-002 5.00000000e+000 + 5.97527313e+000 2.52731591e-002 2.52731591e-002 2.47706510e-002 1.50000000e+001 + 6.00000000e+000 2.47268416e-002 2.47268416e-002 2.33987290e-002 9.00000000e+000 + 6.02339888e+000 2.33987290e-002 2.33987290e-002 2.21516918e-002 9.00000000e+000 + 6.04555035e+000 2.21516918e-002 2.21516918e-002 2.13362463e-002 1.50000000e+001 + 6.05000019e+000 4.44957893e-003 4.44957893e-003 5.12802647e-003 1.50000000e+001 + 6.05512810e+000 5.12802647e-003 5.12802647e-003 8.69598705e-003 3.70000000e+001 + 6.06382418e+000 8.69598705e-003 8.69598705e-003 1.82335768e-002 9.00000000e+000 + 6.08205748e+000 1.82335768e-002 1.82335768e-002 2.50912011e-002 7.00000000e+000 + 6.09999990e+000 1.79424100e-002 1.79424100e-002 2.48265732e-002 6.00000000e+000 + 6.12482643e+000 2.48265732e-002 2.48265732e-002 2.73955204e-002 5.00000000e+000 + 6.15000010e+000 2.51734275e-002 2.51734275e-002 2.45076679e-002 9.00000000e+000 + 6.17450762e+000 2.45076679e-002 2.45076679e-002 2.24253424e-002 9.00000000e+000 + 6.19448471e+000 2.24253424e-002 1.99770685e-002 2.24056672e-002 5.00000000e+000 + 6.20000029e+000 5.51526388e-003 5.51526388e-003 7.63834920e-003 2.50000000e+001 + 6.20763826e+000 7.63834920e-003 7.63834920e-003 1.44252935e-002 3.70000000e+001 + 6.22206354e+000 1.44252935e-002 1.44252935e-002 2.76072640e-002 4.50000000e+001 + 6.24531889e+000 2.76072640e-002 2.32553743e-002 2.37520467e-002 9.00000000e+000 + 6.25000000e+000 4.68098465e-003 4.68098465e-003 2.37520467e-002 5.00000000e+000 + 6.27375221e+000 2.37520467e-002 2.37520467e-002 2.28095632e-002 9.00000000e+000 + 6.29656172e+000 2.28095632e-002 2.28095632e-002 2.53989398e-002 5.00000000e+000 + 6.30000019e+000 3.43838939e-003 3.43838939e-003 4.19815117e-003 3.30000000e+001 + 6.30419827e+000 4.19815117e-003 4.19815117e-003 8.46917834e-003 2.90000000e+001 + 6.31266737e+000 8.46917834e-003 8.46917834e-003 1.60087515e-002 3.70000000e+001 + 6.32867622e+000 1.60087515e-002 1.60087515e-002 1.85615681e-002 5.00000000e+000 + 6.34723759e+000 1.85615681e-002 1.85615681e-002 2.28044242e-002 5.00000000e+000 + 6.34999990e+000 2.76235235e-003 2.76235235e-003 4.01682174e-003 3.70000000e+001 + 6.35401678e+000 4.01682174e-003 4.01682174e-003 6.47258433e-003 3.70000000e+001 + 6.36048937e+000 6.47258433e-003 6.47258433e-003 1.53739788e-002 2.90000000e+001 + 6.37586355e+000 1.53739788e-002 1.53739788e-002 2.28644162e-002 8.00000000e+000 + 6.39642715e+000 2.28644162e-002 2.05636118e-002 2.08726171e-002 5.00000000e+000 + 6.40000010e+000 3.57300392e-003 3.57300392e-003 1.36068435e-002 9.00000000e+000 + 6.41360712e+000 1.36068435e-002 1.36068435e-002 1.33091975e-002 9.00000000e+000 + 6.42691612e+000 1.33091975e-002 1.33091975e-002 1.36918277e-002 3.70000000e+001 + 6.44060802e+000 1.36918277e-002 1.36918277e-002 1.63213331e-002 5.00000000e+000 + 6.45000029e+000 9.39213205e-003 9.39213205e-003 8.52674153e-003 3.70000000e+001 + 6.45852661e+000 8.52674153e-003 8.52674153e-003 1.66469645e-002 4.10000000e+001 + 6.47517395e+000 1.66469645e-002 1.66469645e-002 1.96049549e-002 5.00000000e+000 + 6.49044037e+000 1.96049549e-002 1.52664566e-002 1.73625462e-002 5.00000000e+000 + 6.50000000e+000 9.55983810e-003 9.55983810e-003 1.07325893e-002 4.10000000e+001 + 6.51073265e+000 1.07325893e-002 1.07325893e-002 1.85120944e-002 4.10000000e+001 + 6.52924490e+000 1.85120944e-002 1.85120944e-002 2.11116876e-002 5.00000000e+000 + 6.54326582e+000 2.07553171e-002 1.40208416e-002 1.61828082e-002 5.00000000e+000 + 6.55000019e+000 6.73447549e-003 6.73447549e-003 7.82198925e-003 3.70000000e+001 + 6.55782223e+000 7.82198925e-003 7.82198925e-003 1.42915687e-002 4.50000000e+001 + 6.57211351e+000 1.42915687e-002 1.42915687e-002 1.87656786e-002 4.50000000e+001 + 6.59087944e+000 1.87656786e-002 1.87656786e-002 2.61717960e-002 3.70000000e+001 + 6.59999990e+000 9.12076421e-003 9.12076421e-003 1.23430882e-002 3.70000000e+001 + 6.61234331e+000 1.23430882e-002 1.23430882e-002 1.90122332e-002 5.00000000e+000 + 6.63135529e+000 1.90122332e-002 1.90122332e-002 2.34392006e-002 5.00000000e+000 + 6.65000010e+000 1.86446793e-002 1.86446793e-002 1.99231580e-002 5.00000000e+000 + 6.66992331e+000 1.99231580e-002 1.99231580e-002 2.17787717e-002 9.00000000e+000 + 6.69170189e+000 2.17787717e-002 2.17787717e-002 2.55952235e-002 8.00000000e+000 + 6.70000029e+000 8.29807110e-003 8.29807110e-003 1.16713606e-002 2.90000000e+001 + 6.71167135e+000 1.16713606e-002 1.16713606e-002 2.07148809e-002 3.10000000e+001 + 6.73238611e+000 2.07148809e-002 2.07148809e-002 2.00994052e-002 5.00000000e+000 + 6.75000000e+000 1.76137574e-002 1.76137574e-002 2.30700560e-002 9.00000000e+000 + 6.76900387e+000 2.30700560e-002 1.90035552e-002 1.97586548e-002 9.00000000e+000 + 6.78876209e+000 1.97586548e-002 1.97586548e-002 2.48674061e-002 3.70000000e+001 + 6.80000019e+000 1.12377899e-002 1.12377899e-002 1.86537690e-002 3.70000000e+001 + 6.81865406e+000 1.86537690e-002 1.86537690e-002 2.55279932e-002 8.00000000e+000 + 6.84418201e+000 2.55279932e-002 2.55279932e-002 2.32048370e-002 9.00000000e+000 + 6.84999990e+000 5.81823895e-003 5.81823895e-003 2.32048370e-002 1.50000000e+001 + 6.87320471e+000 2.32048370e-002 2.32048370e-002 2.26011463e-002 5.00000000e+000 + 6.89580631e+000 2.26011463e-002 2.26011463e-002 2.31083147e-002 9.00000000e+000 + 6.90000010e+000 4.19401797e-003 4.19401797e-003 5.46649517e-003 4.10000000e+001 + 6.90546656e+000 5.46649517e-003 5.46649517e-003 1.14733214e-002 1.50000000e+001 + 6.91693974e+000 1.14733214e-002 1.14733214e-002 1.33670010e-002 4.10000000e+001 + 6.93030691e+000 1.33670010e-002 1.33670010e-002 1.48211224e-002 1.50000000e+001 + 6.94308853e+000 1.48211224e-002 1.27815083e-002 1.89372841e-002 3.70000000e+001 + 6.95000029e+000 6.91167545e-003 6.91167545e-003 7.25058652e-003 1.50000000e+001 + 6.95725060e+000 7.25058652e-003 7.25058652e-003 1.33143375e-002 1.50000000e+001 + 6.97056484e+000 1.33143375e-002 1.33143375e-002 1.81747209e-002 1.50000000e+001 + 6.98873997e+000 1.81747209e-002 1.81747209e-002 2.32418850e-002 1.50000000e+001 + 6.99831295e+000 1.12602515e-002 9.57311876e-003 1.17313089e-002 1.50000000e+001 + 7.00000000e+000 1.68713229e-003 1.68713229e-003 1.17313089e-002 5.00000000e+000 + 7.01173115e+000 1.17313089e-002 1.17313089e-002 1.18237166e-002 1.50000000e+001 + 7.02355480e+000 1.18237166e-002 1.18237166e-002 1.94364451e-002 2.50000000e+001 + 7.04299164e+000 1.94364451e-002 1.94364451e-002 1.96044445e-002 1.50000000e+001 + 7.05000019e+000 7.00863358e-003 7.00863358e-003 6.94466382e-003 2.50000000e+001 + 7.05694485e+000 6.94466382e-003 6.94466382e-003 1.03408294e-002 2.50000000e+001 + 7.06728554e+000 1.03408294e-002 1.03408294e-002 1.31758517e-002 2.50000000e+001 + 7.08046150e+000 1.31758517e-002 1.31758517e-002 1.75320059e-002 2.90000000e+001 + 7.09799337e+000 1.75320059e-002 1.75320059e-002 2.92596333e-002 3.50000000e+001 + 7.09999990e+000 2.00665067e-003 2.00665067e-003 2.92596333e-002 3.50000000e+001 + 7.12255621e+000 2.92596333e-002 2.25562118e-002 2.41184123e-002 1.50000000e+001 + 7.13810682e+000 2.41184123e-002 1.55503871e-002 1.59810185e-002 4.50000000e+001 + 7.14741373e+000 1.18934009e-002 9.30706691e-003 1.04601616e-002 1.50000000e+001 + 7.15000010e+000 2.58633448e-003 2.58633448e-003 3.29716038e-003 1.50000000e+001 + 7.15329742e+000 3.29716038e-003 3.29716038e-003 9.02590528e-003 1.50000000e+001 + 7.16232300e+000 9.02590528e-003 9.02590528e-003 1.93039272e-002 1.50000000e+001 + 7.18162727e+000 1.93039272e-002 1.93039272e-002 2.62749083e-002 3.90000000e+001 + 7.20000029e+000 1.83730088e-002 1.83730088e-002 1.85478088e-002 3.90000000e+001 + 7.21854782e+000 1.85478088e-002 1.85478088e-002 1.99387781e-002 1.50000000e+001 + 7.23848677e+000 1.99387781e-002 1.99387781e-002 2.38984339e-002 1.50000000e+001 + 7.25000000e+000 1.15134139e-002 1.15134139e-002 1.35619324e-002 1.50000000e+001 + 7.26356220e+000 1.35619324e-002 1.35619324e-002 1.48574291e-002 5.00000000e+000 + 7.27841949e+000 1.48574291e-002 1.48574291e-002 2.10445672e-002 5.00000000e+000 + 7.29946423e+000 2.10445672e-002 2.10445672e-002 2.11236849e-002 1.50000000e+001 + 7.30000019e+000 5.36072650e-004 5.36072650e-004 2.11236849e-002 1.50000000e+001 + 7.32112360e+000 2.11236849e-002 2.11236849e-002 2.83719022e-002 1.50000000e+001 + 7.34949589e+000 2.83719022e-002 2.83719022e-002 3.06385253e-002 9.00000000e+000 + 7.34999990e+000 5.04413620e-004 5.04413620e-004 3.06385253e-002 9.00000000e+000 + 7.38063860e+000 3.06385253e-002 3.06385253e-002 3.11207101e-002 3.70000000e+001 + 7.40000010e+000 1.93614755e-002 1.93614755e-002 1.86129734e-002 4.50000000e+001 + 7.41861296e+000 1.86129734e-002 1.86129734e-002 2.44822372e-002 3.70000000e+001 + 7.44309521e+000 2.44822372e-002 2.44822372e-002 2.33007260e-002 3.70000000e+001 + 7.44999981e+000 6.90448750e-003 6.90448750e-003 2.33007260e-002 9.00000000e+000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$46 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$46 new file mode 100644 index 0000000000000000000000000000000000000000..7b380db979a1eb2e8db2561aa74b0063678b3505 GIT binary patch literal 480 VcmZQzXxPVq0!H~L!7;?c2LQbRB}D)L literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$55 new file mode 100644 index 0000000000000000000000000000000000000000..c9731d3e529bccdef5b94a0d095b022f16f27f5c GIT binary patch literal 200 zcmZQ%Kn09IE)$Xvhz|oWahMp4hRK6ykQfNF05M2CjOGHeL6{$iWq{ZYh@F5q1c)a9 c@f9G}0&08=#3z6nw=gp>d;@AW0E!a>0CnsJNdN!< literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$69 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$69 new file mode 100644 index 0000000000000000000000000000000000000000..b425c09beb0808b1b7ba907adafa901e9a341baf GIT binary patch literal 240 zcmV70EEf?)5}TS9I;E9`3y)Yy_rZjteC}IB!tOg z4arGLKC?>+w5CV72%bpJ0;a|CJA}#Z9Lz}s#<5FrNP$NL*Oy4>#q`DG=Yz>bNXtnd z+^$Q?-=jyss*FhSy8*_v>x0SlmcvQN;;u_3bL&S?K#NF*F{Z_gc!bH-OT9_^Q?g59 q + + 0.2 + + + + + Position + false + + + cdecl + + Continuous + 0 + + + false + 0 + 0 + false + 0 + 0 + + + 6.2831853071795862 + 0.8 + + + 0.3 + + false + + 0 + 0 + + false + + 0 + 0 + + 0 + false + + false + 0 + 0 + 0 + 0 + 0 + + + + + 0 + 0 + + + + false + false + false + false + + + + 0 + 0 + + + Constant + 0 + + + + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 new file mode 100644 index 0000000000..53030723b8 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 @@ -0,0 +1,39 @@ +FILE demo_a_44.$04 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 2 +DIMENS 9 10 +GENLAB 'Control variables' +VARIAB 'Time from start of simulation' 'Demanded power' 'Measured power' 'Demanded generator speed' 'Measured generator speed' 'Nominal pitch angle' 'Demanded generator torque' 'Nominal wind speed at hub position' 'Measured shaft power' +VARUNIT T P P A/T A/T A FL L/T P +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.000000E+00 0.990000E+21 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 + 0.715000E+01 0.411234E+23 0.191410E+07 0.157079E+03 0.158926E+03 -0.349066E-01 0.126958E+05 0.125669E+02 0.201484E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.730000E+01 0.411234E+23 0.191817E+07 0.157079E+03 0.158835E+03 -0.349066E-01 0.127172E+05 0.126810E+02 0.201912E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 + 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 + 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 + 0.715000E+01 0.411234E+23 0.191410E+07 0.157079E+03 0.158926E+03 -0.349066E-01 0.126958E+05 0.125669E+02 0.201484E+07 +MAXTIME 0.450000E+00 0.000000E+00 0.450000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.450000E+00 0.450000E+00 0.450000E+00 +MINTIME 0.000000E+00 -0.500000E-01 0.150000E+00 0.000000E+00 0.300000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.150000E+00 +MEAN 0.722500E+01 0.411234E+23 0.192037E+07 0.157079E+03 0.158921E+03 -0.349066E-01 0.127260E+05 0.125565E+02 0.202144E+07 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 new file mode 100644 index 0000000000..3f0f764874 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 @@ -0,0 +1,29 @@ +FILE demo_a_44.$06 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 2 +DIMENS 4 10 +GENLAB 'Generator variables' +VARIAB 'Generator torque' 'Electrical power' 'Generator power loss' 'Reactive power' +VARUNIT FL P P Q +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.128522E+05 0.194046E+07 0.102130E+06 0.000000E+00 + 0.126738E+05 0.191484E+07 0.100781E+06 0.000000E+00 + 0.128522E+05 0.194046E+07 0.102130E+06 0.000000E+00 + 0.126778E+05 0.191410E+07 0.100742E+06 0.000000E+00 + 0.128522E+05 0.194046E+07 0.102130E+06 0.000000E+00 + 0.126778E+05 0.191410E+07 0.100742E+06 0.000000E+00 + 0.126738E+05 0.191484E+07 0.100781E+06 0.000000E+00 + 0.126738E+05 0.191484E+07 0.100781E+06 0.000000E+00 +MAXTIME 0.450000E+00 0.450000E+00 0.450000E+00 0.000000E+00 +MINTIME 0.000000E+00 0.150000E+00 0.150000E+00 0.000000E+00 +MEAN 0.127198E+05 0.192037E+07 0.101072E+06 0.000000E+00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 new file mode 100644 index 0000000000..7081588cb9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 @@ -0,0 +1,59 @@ +FILE demo_a_44.$09 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 3 +DIMENS 17 1 10 +GENLAB 'Aerodynamic information: blade 1' +VARIAB ELRAD AXIALA1 TANGA1 TLOSS1 PHI1 ALPHA1 REYN1 CL1 CD1 CM1 WINDSP1 DFOUT1 DFIN1 DPMOM1 VP1 VT1 INFX1 +VARUNIT L N N N A A N N N N L/T F/L F/L FL/L L/T L/T N +AXISLAB 'Distance along blade' +AXIUNIT L +AXIMETH 3 +AXIVAL 26.407 +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.263757E+00 0.112587E-01 0.985023E+00 0.179482E+00 0.156793E+00 0.668376E+07 0.138455E+01 0.129760E-01 -0.833697E-01 0.540552E+02 0.448655E+04 -0.770655E+03 -0.172653E+03 0.131070E+02 0.525947E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.280106E+00 0.109549E-01 0.988745E+00 0.166650E+00 0.143961E+00 0.661097E+07 0.132316E+01 0.901324E-02 -0.769566E-01 0.534665E+02 0.420185E+04 -0.677397E+03 -0.144921E+03 0.123199E+02 0.521545E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.280106E+00 0.109549E-01 0.988745E+00 0.166650E+00 0.143961E+00 0.661097E+07 0.132316E+01 0.901324E-02 -0.769566E-01 0.534665E+02 0.420185E+04 -0.677397E+03 -0.144921E+03 0.123199E+02 0.521545E+02 0.100000E+01 + 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 + 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 + 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 +MAXTIME 0.000000E+00 0.450000E+00 0.500000E-01 0.450000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.100000E+00 0.000000E+00 0.000000E+00 0.450000E+00 0.100000E+00 0.000000E+00 0.450000E+00 0.000000E+00 +MINTIME 0.000000E+00 0.000000E+00 0.450000E+00 0.000000E+00 0.450000E+00 0.450000E+00 0.300000E+00 0.450000E+00 0.450000E+00 0.000000E+00 0.300000E+00 0.450000E+00 0.000000E+00 0.300000E+00 0.450000E+00 0.300000E+00 0.000000E+00 +MEAN 0.276574E+02 0.288380E+00 0.103229E-01 0.990101E+00 0.160178E+00 0.137489E+00 0.664723E+07 0.130496E+01 0.110595E-01 -0.850990E-01 0.537597E+02 0.419544E+04 -0.644742E+03 -0.199105E+03 0.120309E+02 0.525238E+02 0.100000E+01 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 new file mode 100644 index 0000000000..c8aedbd913 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 @@ -0,0 +1,47 @@ +FILE demo_a_44.$12 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 2 +DIMENS 13 10 +GENLAB 'Electrical variables' +VARIAB POW2 POW3 POW4 REAC2 REAC3 REAC4 PF2 PF3 PF4 VOLTS VOLTF TURBI FARMI +VARUNIT P P P Q Q Q N N N V V I I +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.191534E+07 0.191534E+07 0.191503E+07 0.302640E-04 0.302640E-04 0.303087E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100513E+03 0.100513E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.191534E+07 0.191534E+07 0.191503E+07 0.302640E-04 0.302640E-04 0.303087E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100513E+03 0.100513E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 + 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 + 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 +MAXTIME 0.450000E+00 0.450000E+00 0.450000E+00 0.500000E-01 0.500000E-01 0.450000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.450000E+00 0.450000E+00 0.450000E+00 0.450000E+00 +MINTIME 0.150000E+00 0.150000E+00 0.150000E+00 0.150000E+00 0.150000E+00 0.150000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.150000E+00 0.150000E+00 0.150000E+00 +MEAN 0.192037E+07 0.192037E+07 0.192007E+07 0.581092E-05 0.581092E-05 0.304689E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100777E+03 0.100777E+03 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 new file mode 100644 index 0000000000..c25f5bb9a5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 @@ -0,0 +1,37 @@ +FILE demo_a_44.$23 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 2 +DIMENS 8 10 +GENLAB 'Hub loads: fixed frame GL coordinates' +VARIAB 'Stationary hub Mx' 'Stationary hub My' 'Stationary hub Mz' 'Stationary hub Myz' 'Stationary hub Fx' 'Stationary hub Fy' 'Stationary hub Fz' 'Stationary hub Fyz' +VARUNIT FL FL FL FL F F F F +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.111591E+07 0.726479E+06 0.178399E+06 0.748063E+06 0.315027E+06 -0.117953E+05 -0.334988E+06 0.335195E+06 + 0.109298E+07 0.439091E+06 0.242142E+06 0.501432E+06 0.324923E+06 -0.395683E+04 -0.324615E+06 0.324639E+06 + 0.111591E+07 0.726479E+06 0.178399E+06 0.748063E+06 0.315027E+06 -0.117953E+05 -0.334988E+06 0.335195E+06 + 0.109298E+07 0.439091E+06 0.242142E+06 0.501432E+06 0.324923E+06 -0.395683E+04 -0.324615E+06 0.324639E+06 + 0.109298E+07 0.439091E+06 0.242142E+06 0.501432E+06 0.324923E+06 -0.395683E+04 -0.324615E+06 0.324639E+06 + 0.109755E+07 0.576906E+06 0.939693E+05 0.584509E+06 0.316656E+06 -0.124688E+05 -0.324705E+06 0.324944E+06 + 0.111591E+07 0.726479E+06 0.178399E+06 0.748063E+06 0.315027E+06 -0.117953E+05 -0.334988E+06 0.335195E+06 + 0.109779E+07 0.461799E+06 0.165613E+06 0.490598E+06 0.334001E+06 -0.240930E+04 -0.334644E+06 0.334653E+06 + 0.109779E+07 0.461799E+06 0.165613E+06 0.490598E+06 0.334001E+06 -0.240930E+04 -0.334644E+06 0.334653E+06 + 0.111228E+07 0.698521E+06 0.209028E+06 0.729126E+06 0.314737E+06 -0.832075E+04 -0.338662E+06 0.338765E+06 + 0.109554E+07 0.450214E+06 0.224881E+06 0.503253E+06 0.329445E+06 -0.186323E+04 -0.326567E+06 0.326572E+06 + 0.110763E+07 0.702631E+06 0.142612E+06 0.716958E+06 0.316780E+06 -0.140612E+05 -0.327942E+06 0.328243E+06 + 0.110023E+07 0.642055E+06 0.105366E+06 0.650643E+06 0.316823E+06 -0.139339E+05 -0.323937E+06 0.324236E+06 + 0.111228E+07 0.698521E+06 0.209028E+06 0.729126E+06 0.314737E+06 -0.832075E+04 -0.338662E+06 0.338765E+06 + 0.111228E+07 0.698521E+06 0.209028E+06 0.729126E+06 0.314737E+06 -0.832075E+04 -0.338662E+06 0.338765E+06 + 0.110023E+07 0.642055E+06 0.105366E+06 0.650643E+06 0.316823E+06 -0.139339E+05 -0.323937E+06 0.324236E+06 +MAXTIME 0.400000E+00 0.400000E+00 0.100000E+00 0.400000E+00 0.000000E+00 0.500000E-01 0.300000E+00 0.450000E+00 +MINTIME 0.100000E+00 0.100000E+00 0.250000E+00 0.000000E+00 0.450000E+00 0.350000E+00 0.450000E+00 0.300000E+00 +MEAN 0.110094E+07 0.565960E+06 0.167636E+06 0.594012E+06 0.320398E+06 -0.873886E+04 -0.329187E+06 0.329333E+06 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 new file mode 100644 index 0000000000..380979884b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 @@ -0,0 +1,60 @@ +FILE demo_a_44.$25 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 3 +DIMENS 8 2 10 +GENLAB 'Tower loads GL coordinates' +VARIAB MXT MYT 'Tower Mxy' MZT FXT FYT 'Tower Fxy' FZT +VARUNIT FL FL FL FL F F F F +AXISLAB 'Tower station height' +AXIUNIT L +AXIMETH 3 +AXIVAL -15.000 15.000 +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.193523E+07 0.223290E+08 0.224127E+08 0.949411E+05 0.285783E+06 -0.142219E+05 0.286137E+06 -0.255039E+07 + 0.155100E+07 0.233759E+08 0.234273E+08 0.145314E+06 0.303190E+06 -0.215841E+04 0.303198E+06 -0.254935E+07 + 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 + 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 + 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 + 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 + 0.177004E+07 0.226428E+08 0.227119E+08 0.177328E+06 0.291506E+06 -0.806033E+04 0.291617E+06 -0.253957E+07 + 0.167238E+07 0.233032E+08 0.233631E+08 0.661959E+05 0.310273E+06 -0.778131E+04 0.310371E+06 -0.253879E+07 + 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 + 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 + 0.155100E+07 0.233759E+08 0.234273E+08 0.145314E+06 0.303190E+06 -0.215841E+04 0.303198E+06 -0.254935E+07 + 0.193523E+07 0.223290E+08 0.224127E+08 0.949411E+05 0.285783E+06 -0.142219E+05 0.286137E+06 -0.255039E+07 + 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 + 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 + 0.167238E+07 0.233032E+08 0.233631E+08 0.661959E+05 0.310273E+06 -0.778131E+04 0.310371E+06 -0.253879E+07 + 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 +MAXTIME 0.000000E+00 0.450000E+00 0.450000E+00 0.100000E+00 0.450000E+00 0.400000E+00 0.450000E+00 0.250000E+00 +MINTIME 0.400000E+00 0.500000E-01 0.500000E-01 0.250000E+00 0.500000E-01 0.000000E+00 0.500000E-01 0.450000E+00 +MEAN 0.169947E+07 0.230326E+08 0.230957E+08 0.123108E+06 0.300157E+06 -0.712561E+04 0.300270E+06 -0.254371E+07 +ULOADS 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 + 0.142459E+07 0.140976E+08 0.141694E+08 0.832236E+05 0.295676E+06 -0.705929E+04 0.295760E+06 -0.170697E+07 + 0.143419E+07 0.141719E+08 0.142442E+08 0.119811E+06 0.294105E+06 -0.547746E+04 0.294156E+06 -0.171148E+07 + 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 + 0.143419E+07 0.141719E+08 0.142442E+08 0.119811E+06 0.294105E+06 -0.547746E+04 0.294156E+06 -0.171148E+07 + 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 + 0.151470E+07 0.137452E+08 0.138284E+08 0.176604E+06 0.295902E+06 -0.841797E+04 0.296021E+06 -0.170762E+07 + 0.143854E+07 0.139432E+08 0.140172E+08 0.654555E+05 0.306145E+06 -0.713270E+04 0.306228E+06 -0.170685E+07 + 0.147656E+07 0.141467E+08 0.142236E+08 0.160369E+06 0.314998E+06 -0.468302E+04 0.315032E+06 -0.171994E+07 + 0.151978E+07 0.136988E+08 0.137828E+08 0.151257E+06 0.287992E+06 -0.110697E+05 0.288205E+06 -0.171058E+07 + 0.145647E+07 0.141671E+08 0.142418E+08 0.144452E+06 0.303962E+06 -0.399357E+04 0.303989E+06 -0.171741E+07 + 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 + 0.147656E+07 0.141467E+08 0.142236E+08 0.160369E+06 0.314998E+06 -0.468302E+04 0.315032E+06 -0.171994E+07 + 0.151978E+07 0.136988E+08 0.137828E+08 0.151257E+06 0.287992E+06 -0.110697E+05 0.288205E+06 -0.171058E+07 + 0.143854E+07 0.139432E+08 0.140172E+08 0.654555E+05 0.306145E+06 -0.713270E+04 0.306228E+06 -0.170685E+07 + 0.147656E+07 0.141467E+08 0.142236E+08 0.160369E+06 0.314998E+06 -0.468302E+04 0.315032E+06 -0.171994E+07 +MAXTIME 0.000000E+00 0.350000E+00 0.350000E+00 0.100000E+00 0.450000E+00 0.400000E+00 0.450000E+00 0.250000E+00 +MINTIME 0.300000E+00 0.000000E+00 0.000000E+00 0.250000E+00 0.500000E-01 0.000000E+00 0.500000E-01 0.450000E+00 +MEAN 0.147594E+07 0.139156E+08 0.139937E+08 0.122358E+06 0.301069E+06 -0.723169E+04 0.301168E+06 -0.171176E+07 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 new file mode 100644 index 0000000000..35e5c67cf6 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 @@ -0,0 +1,31 @@ +FILE demo_a_44.$31 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 3 +DIMENS 3 1 10 +GENLAB 'Blade 1 Absolute motion' +VARIAB 'Blade 1 x-position' 'Blade 1 y-position' 'Blade 1 z-position' +VARUNIT L L L +AXISLAB 'Distance along blade' +AXIUNIT L +AXIMETH 3 +AXIVAL 38.750 +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.135292E+01 -0.279491E+02 0.898919E+02 + -0.150286E+01 -0.399608E+02 0.589603E+02 + 0.135292E+01 -0.279491E+02 0.898919E+02 + -0.119360E+01 -0.400085E+02 0.627606E+02 + 0.135292E+01 -0.279491E+02 0.898919E+02 + -0.150286E+01 -0.399608E+02 0.589603E+02 +MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 +MINTIME 0.450000E+00 0.400000E+00 0.450000E+00 +MEAN -0.180593E-01 -0.359549E+02 0.751973E+02 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 new file mode 100644 index 0000000000..3c6663da87 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 @@ -0,0 +1,31 @@ +FILE demo_a_44.$37 +ACCESS S +FORM F +RECL 4 +FORMAT R*4 +CONTENT 'POWPROD' +CONFIG 'STATIONARY' +NDIMENS 2 +DIMENS 5 522 +GENLAB 'Simulation step sizes' +VARIAB 'Simulation Time' 'Constrained Step Size' 'Actual Step Size' 'Requested Size of Next Step' 'State with largest error' +VARUNIT T T T T N +AXISLAB 'Step number' +AXIUNIT N +AXIMETH 2 +MIN 0.00000000E+000 +STEP 1.00000000E+000 +NVARS 0 +ULOADS 7.450000E+000 6.904487E-003 6.904487E-003 2.330073E-002 9.000000E+000 + 1.000000E-007 1.000000E-007 1.000000E-007 1.000000E-006 3.900000E+001 + 2.534743E+000 3.474264E-002 3.474264E-002 3.532558E-002 5.000000E+000 + 1.000000E-007 1.000000E-007 1.000000E-007 1.000000E-006 3.900000E+001 + 2.534743E+000 3.474264E-002 3.474264E-002 3.532558E-002 5.000000E+000 + 1.000000E-007 1.000000E-007 1.000000E-007 1.000000E-006 3.900000E+001 + 2.031245E+000 3.124481E-002 3.124481E-002 3.539262E-002 4.500000E+001 + 1.044923E-005 2.773416E-006 4.591858E-007 4.159318E-007 2.700000E+001 + 1.912216E-003 1.296193E-003 1.296193E-003 1.282779E-003 4.800000E+001 + 1.109353E-001 2.281667E-002 1.093534E-002 1.142270E-002 5.000000E+000 +MAXTIME 5.210000E+002 1.750000E+002 1.750000E+002 1.440000E+002 1.200000E+001 +MINTIME 0.000000E+000 0.000000E+000 0.000000E+000 5.000000E+000 2.500000E+001 +MEAN 3.647993E+000 1.482273E-002 1.427202E-002 1.861919E-002 2.054598E+001 \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 new file mode 100644 index 0000000000..7f7f18a1a9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 @@ -0,0 +1,56 @@ +FILE demo_a_44.$46 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 3 +DIMENS 4 3 10 +GENLAB 'Water particle kinematics' +VARIAB 'Water particle velocity in X direction' 'Water particle velocity in Y direction' +'Water particle acceleration in X direction' 'Water particle acceleration in Y direction' +VARUNIT L/T L/T L/TT L/TT +AXISLAB 'Tower station height' +AXIUNIT L +AXIMETH 3 +AXITICK 'Node 1' 'Node 2' 'Node 3' +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MINTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MEAN -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +ULOADS -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MINTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MEAN -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +ULOADS -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MINTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +MEAN -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 new file mode 100644 index 0000000000..c16b84ea0d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 @@ -0,0 +1,17 @@ +FILE demo_a_44.$55 +ACCESS D +FORM F +RECL 4 +FORMAT I*4 +CONTENT 'POWPROD' +CONFIG 'TABLE' +NDIMENS 2 +DIMENS 1 50 +GENLAB 'Step size distribution' +VARIAB 'Step size histogram' +VARUNIT N +AXISLAB 'Bin maximum time step' +AXIUNIT T +AXIMETH 3 +AXIVAL 1e-007 1.38038e-007 1.90546e-007 2.63027e-007 3.63078e-007 5.01187e-007 6.91831e-007 9.54993e-007 1.31826e-006 1.8197e-006 2.51189e-006 3.46737e-006 4.7863e-006 6.60693e-006 9.12011e-006 1.25893e-005 1.7378e-005 2.39883e-005 3.31131e-005 4.57088e-005 6.30957e-005 8.70964e-005 0.000120226 0.000165959 0.000229087 0.000316228 0.000436516 0.00060256 0.000831764 0.00114815 0.00158489 0.00218776 0.00301995 0.00416869 0.0057544 0.00794328 0.0109648 0.0151356 0.020893 0.0288403 0.0549541 0.0758578 0.104713 0.144544 0.199526 0.275423 0.380189 0.524807 0.724436 1 +NVARS 0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 new file mode 100644 index 0000000000..e61c0282a4 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 @@ -0,0 +1,33 @@ +FILE demo_a_44.$69 +ACCESS D +FORM U +RECL 4 +FORMAT R*4 +CONTENT POWPROD +CONFIG STATIONARY +NDIMENS 2 +DIMENS 6 10 +GENLAB 'Foundation loads' +VARIAB 'Foundation Mx' 'Foundation My' 'Foundation Mz' 'Foundation Fx' 'Foundation Fy' 'Foundation Fz' +VARUNIT FL FL FL F F F +AXISLAB 'Time' +AXIUNIT T +AXIMETH 2 +MIN 0.00000000E+00 +STEP 0.50000001E-01 +NVARS 0 +ULOADS 0.193494E+07 0.223270E+08 0.949585E+05 0.286451E+06 -0.142810E+05 -0.109217E+07 + 0.155071E+07 0.233738E+08 0.145302E+06 0.303888E+06 -0.220653E+04 -0.109113E+07 + 0.158724E+07 0.238550E+08 0.161258E+06 0.324362E+06 -0.264157E+04 -0.109366E+07 + 0.189275E+07 0.222578E+08 0.151863E+06 0.278816E+06 -0.128840E+05 -0.108430E+07 + 0.176975E+07 0.226408E+08 0.177331E+06 0.292182E+06 -0.811495E+04 -0.108134E+07 + 0.167209E+07 0.233011E+08 0.661929E+05 0.310968E+06 -0.783274E+04 -0.108057E+07 + 0.158724E+07 0.238550E+08 0.161258E+06 0.324362E+06 -0.264157E+04 -0.109366E+07 + 0.189275E+07 0.222578E+08 0.151863E+06 0.278816E+06 -0.128840E+05 -0.108430E+07 + 0.155071E+07 0.233738E+08 0.145302E+06 0.303888E+06 -0.220653E+04 -0.109113E+07 + 0.193494E+07 0.223270E+08 0.949585E+05 0.286451E+06 -0.142810E+05 -0.109217E+07 + 0.167209E+07 0.233011E+08 0.661929E+05 0.310968E+06 -0.783274E+04 -0.108057E+07 + 0.158724E+07 0.238550E+08 0.161258E+06 0.324362E+06 -0.264157E+04 -0.109366E+07 +MAXTIME 0.000000E+00 0.450000E+00 0.100000E+00 0.450000E+00 0.400000E+00 0.250000E+00 +MINTIME 0.400000E+00 0.500000E-01 0.250000E+00 0.500000E-01 0.000000E+00 0.450000E+00 +MEAN 0.169918E+07 0.230306E+08 0.123107E+06 0.300845E+06 -0.717798E+04 -0.108548E+07 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.$55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.$55 new file mode 100644 index 0000000000000000000000000000000000000000..f350cb9799f84e79890c4f681c27dc1669711b70 GIT binary patch literal 200 zcmZQ%Kn09IE)$Xvhz|oWahMp4hRK6yWHA^UL^A_1NIwXJ_?%G84WxyDSP6(Vf!Gv? Q-GR6sh^v8^4Ty;W0CF?}3jhEB literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 new file mode 100644 index 0000000000..c16b84ea0d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 @@ -0,0 +1,17 @@ +FILE demo_a_44.$55 +ACCESS D +FORM F +RECL 4 +FORMAT I*4 +CONTENT 'POWPROD' +CONFIG 'TABLE' +NDIMENS 2 +DIMENS 1 50 +GENLAB 'Step size distribution' +VARIAB 'Step size histogram' +VARUNIT N +AXISLAB 'Bin maximum time step' +AXIUNIT T +AXIMETH 3 +AXIVAL 1e-007 1.38038e-007 1.90546e-007 2.63027e-007 3.63078e-007 5.01187e-007 6.91831e-007 9.54993e-007 1.31826e-006 1.8197e-006 2.51189e-006 3.46737e-006 4.7863e-006 6.60693e-006 9.12011e-006 1.25893e-005 1.7378e-005 2.39883e-005 3.31131e-005 4.57088e-005 6.30957e-005 8.70964e-005 0.000120226 0.000165959 0.000229087 0.000316228 0.000436516 0.00060256 0.000831764 0.00114815 0.00158489 0.00218776 0.00301995 0.00416869 0.0057544 0.00794328 0.0109648 0.0151356 0.020893 0.0288403 0.0549541 0.0758578 0.104713 0.144544 0.199526 0.275423 0.380189 0.524807 0.724436 1 +NVARS 0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt new file mode 100644 index 0000000000..a6918724d1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt @@ -0,0 +1,21 @@ +# string = +# +# +# Time [s] : seconds since the start of the simulation minus spin-up time +# Rotor_Speed [rpm] : wind-turbine rotor speed +# Power [W] : generator power +# Torque [N m] : generator torque +# Pitch [deg] : pitch angle of one blade +# My [N m] : out-of-plane moment at root of one blade +Time,My,Pitch,Power,Rotor_Speed,Torque +0.0,-999.0,-999.0,-999.0,-999.0,-999.0 +1.0,-999.0,-999.0,-999.0,-999.0,-999.0 +2.0,-999.0,-999.0,-999.0,-999.0,-999.0 +3.0,-999.0,-999.0,-999.0,-999.0,-999.0 +4.0,-999.0,-999.0,-999.0,-999.0,-999.0 +5.0,-999.0,-999.0,-999.0,-999.0,-999.0 +6.0,-999.0,-999.0,-999.0,-999.0,-999.0 +7.0,-999.0,-999.0,-999.0,-999.0,-999.0 +8.0,-999.0,-999.0,-999.0,-999.0,-999.0 +9.0,-999.0,-999.0,-999.0,-999.0,-999.0 +10.0,-999.0,-999.0,-999.0,-999.0,-999.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv new file mode 100644 index 0000000000..0774a467de --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv @@ -0,0 +1,5 @@ +! Comment +! ColA ColB ColC +! Comment +1 2 3 +4 5 6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv new file mode 100644 index 0000000000..e70491e596 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv @@ -0,0 +1,3 @@ +! ColA ColB ColC +1 2 3 +4 5 6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv new file mode 100644 index 0000000000..8f974bb251 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv @@ -0,0 +1,3 @@ +#ColA,ColB,ColC +1, 2, 3 +4, 5, 6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv new file mode 100644 index 0000000000..35ea236015 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv @@ -0,0 +1,5 @@ +ColA,ColB +1,4 +2,9 +3,6 +4,6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv new file mode 100644 index 0000000000..7690b483c4 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv @@ -0,0 +1,12 @@ +time,strainLP_B1Avg +NaT,NaN +NaT,NaN +NaT,NaN +26-Apr-2017 16:07:29,1.809 +26-Apr-2017 16:18:29,20.12 +26-Apr-2017 16:19:29,15.04 +26-Apr-2017 16:27:29,25.35 +26-Apr-2017 16:31:29,19.08 +26-Apr-2017 16:32:29,13.33 +26-Apr-2017 16:33:29,11.38 +26-Apr-2017 16:34:29,3.674 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv new file mode 100644 index 0000000000..aeb1246576 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv @@ -0,0 +1,4 @@ +1,4 +2,9 +3,6 +4,6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv new file mode 100644 index 0000000000..404e2fbab1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv @@ -0,0 +1,4 @@ +ColA;ColB +1;4 +2;8 +3;6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv new file mode 100644 index 0000000000..f2e6f3d873 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv @@ -0,0 +1,6 @@ +WS WHav WPmin(avgWH) WPmax(avgWH) (psp) + 0.00 13.800 18.515 15.923 + 1.40 14.000 18.516 18.923 + 2.80 14.800 18.517 12.923 + 4.20 16.200 18.518 13.923 + 5.60 16.800 18.519 14.923 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv new file mode 100644 index 0000000000..7454157149 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv @@ -0,0 +1,6 @@ +WS RPM +4. 21.25 +5. 26.47 +6. 31.75 +7. 37.03 +8. 40.98 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt new file mode 100644 index 0000000000..259a2f2158 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt @@ -0,0 +1,18 @@ +############################################################################### +# IEA Wind Task 31 "WakeBench" Example file +############################################################################### +Time,RootMyb1,PtchPMzc1,GenPwr,RtSpeed,GenTq +(s),(kN m),(deg),(kW),(rpm),(kN m) +0.0000,4.619e-01,1.666e+00,2.264e+02,4.381e+01,1.790e+00 +0.0050,2.101e+00,1.666e+00,1.962e+02,4.381e+01,1.551e+00 +0.0100,2.983e+00,1.666e+00,1.776e+02,4.379e+01,1.405e+00 +0.0150,4.537e+00,1.666e+00,1.598e+02,4.376e+01,1.265e+00 +0.0200,5.997e+00,1.666e+00,1.465e+02,4.373e+01,1.161e+00 +0.0250,8.306e+00,1.666e+00,1.352e+02,4.371e+01,1.072e+00 +0.0300,1.078e+01,1.666e+00,1.266e+02,4.369e+01,1.004e+00 +0.0350,1.846e+01,1.666e+00,1.207e+02,4.370e+01,9.569e-01 +0.0400,7.411e+00,1.666e+00,1.166e+02,4.367e+01,9.250e-01 +############################################################################### +# Please add more lines so that time series is long enough to provide +# converged results. +############################################################################### diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv new file mode 100644 index 0000000000..1d026d3620 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv @@ -0,0 +1,8 @@ +#Label_[-], Motivation_[%] +Monday , 30.0 +Tuesday , 90.0 +Wednesday, 80.0 +Thursday , 50.0 +Friday , 10.0 +Saturday , 2.0 +Sunday , 1.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ExcelFile_OneSheet.xlsx b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ExcelFile_OneSheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6beadf0f580ed18b705bcdab797ffd8f234c0a8c GIT binary patch literal 11708 zcmeHtgH@iR==rd(z;$h+vxPIT%|3 z85w>%{*RvjhdKElf4w|TMy`hmDd^`Dxpkd%wy$5s+$FCU3z)P~4>a{QGJ zDgrd+H~vuK-tAtG!%Hh4BKHSLt~cJ7hht#zkbzt(f|Bp;onYTlIwXnNm#_DtJI`Lt zUZ;vnx=}l~N53m;D$bP}S|byiJ`<@y8)r~^1CRNIAPAc`)mO7$Mq}0Bwi04iNa?5| zsJf9OXFq;C-Fq&na1WV3giHExD)sds(7<$|(sR&?>3fV@mT~a`ikvHN&HDFeBbjc!9PmA5gQr7&;Y7u&V2|~8l62rS zTWdlA06VY%04jK7T&);gY#l5OY;7%n^JC>I*0$-~SkHXsFA!%dFc;VYGKFY)*)L8=HKDW+M6iTX9#s9E0NvmW8%Z~bu83y*AqZpvjb2ZQusagw z^2S2n=~uUir!x0mdnws0k2>8$?Yz!^9b?Z(6XQ)B@PBU*etP#P{_4GiFjYGfc9SQ;m!|qKM zJVGGMJ)~YPg_|_!JfnDcSCp4S?d<29Fgu`9UB$8^Dvg3##4$V1@a<1A-w}rk>4GgM z(Z?WZiOSE7op-T6Zl8g~K1Cr^G+DHtIv+IdVW!R^mxUb!Ap3Hi$BFOf+s%RKo9P2) zcnpL%RD(L==;w-uIlV&|Sht)~-DttFt&b36A;e=`dn!(YtwCAoSr3TQYPH#P^HCnE zA0}PvQTYoVveSmHg?Y;5I0=>S3eb4pU(c1(-=aWcy&`eFVv0m})^EZupDUMtO&4l) z!g-TgyM#c!**P6AkC3*w?5PbKWy&FJpz_<1N zK5t(+u=1S8v^#&^3XJs^8h4r)mdb44*D5;bor9lB7JTH0>J>aca~v^CdX2uX81sm7 zT!^SiDdLwW7VNVFtPLfi1R-LzBOR!Vu}j8v3VWqBKO+^DHDvR~&K@V9e25XUyiLQH z6|ULmChV`Vsp~nkuO*;DadTJjJQFQt1>WAjV4J83BX~DQv-Ju#3SXDgxQD-hN%nUd z`tl_tUx4qlfPK{)02~CEhJU!L|0Ls|t_uPjS%S&@e|sxel#%KMM^=c>!Avgc&acrI z92rRuRSr<$hU#gSC`nkoF4yqiwdkmSmtusn4RSjf9dN#3L)n1Byy~JY4#R+U$Fw@( zfw3LE7=?l}II4K-Ck}&&akzg_c7%wM2E=UUiyNfN!s7gSOHF|noL@*Pa@jl;^xk5O z$%(}RI6*iJHr*rjTR!&zN{1DG^^J|hX*4F=FU`VB*RQhu+=wPG@ZcprAiDu3cV|dw zZ@WaV;m+G0O=R50EW7gWk+uoSq~4aY@p=Y15(f{86M56b0k`u~TUAch9fcl-X*!n9 z=|(P3OtyvwX4k+o{dbiSoD0~Y1!o{0xBvk7^QYwoni(5A0vUflG5==5Gg7r|H#o6; z*3=eX(6%!J0xZ#)ESjZzpz9YGMu2aSL}ZxKQ*`SWU%n17=YlpfXvjvTbJw^AYWUM* zST`AMH7wd=+CJ{u8+gbrfd-iim$sU+=e?h6tdOnC^e64{zg&K#yyl@fWSrLX#_O1R zZ01DkrYp9iqrCR5nI3cszZIx0w%ZLQ@I5rk5=C15>Cwo!O}>~Up|O8| zm#^<#;C7kN-L}?dgQaE5^?0^!TlA*z@w0UST_{jh<^GXh zrT?IX%T1!GGg|R^Tqka>_4_%0n3Gqn`io`+qZ%JK)l%rw$$9RM$IWwf!{G{}=F0I? z_0>fBL&bxQEtfjqxAwlyhw-eaMtIzxb+rz)>GP=1W}9~)9>Qe&-Ku~#>?zA|QMok< zNdqx`v~kewvuECAD(tJ%GWGhTcA?&f3~-w`$| zCW*;sKepX6;ygLDXyW+Qf&fteY7I) z-@!<~O$7K45}p2l_55P@L~X#NoSV;USy8hb$$cc2K4IV7M~OOTWg+LrD%bmd9;>>` z1co`?0U}?9tJ4T`r)&GX@AdZ!HH4~#gm6nHW!3}sZSAL@#ar%?>{qKO&zz{%&1o`E zZqFEGV2rH`M5}6=(jNcAtJu{!qP;{&v2+#mRb7^aUbh@1{aTuxIV(~o<#)nG@&{AY zO(seV%T)_lI?|K%Jfa@8QRkl>=*klghbzfFm4-!^YL7ZC#pK%5hCHI>5(H0b++BPs zd3|MdmLTAHBsH#Hxu>-qyL69Hh5v+i{d_#9XrIQRTWK$l0h&1j0% zALCZ>E96F*2?PzGLj_e4dz4zr_HsbC9)cT~hq@E7%1t7Y;97cz-3J#G+tg{o>AOZ5G4QdQEE{`( zfY5(61)KJZVg)W)+^w#kfxO3O780^U>(hC`n7 zmPQB8Y0-|(v@$#w3HW-aA*o*2yC!$ zXC5!UynyR3w+!80tfkn}Dlr3a94! z(Yr)34ToVHgh8p_q)dY>sd8Jz=lfhp76xKsDM-}O4^_ukymmF{9g+q;(&o%^5Hn`+ zdOV-*T?BXVdSC9|_2|_$H@uUwfu&GVI-ZTzdwF`oS=H-!KHWd#*qfm`>+bD%ycn$ya4!xPHzPrfJ*XAu0Ey-Y&A zaRTVO&c(+ggOIvf#QWV&)kob+1nT`TZ67);7g~tUn#rS5tHf$xmJK7Eab387l%|cG zp4w$euf$(8hqi`J#9AIRNR|U`c35-NHWU{ktBrpmhhc;ka&}EAb<_w)5SFzHhiuRB zvTR6Khh83|Rr!ZZQwTfgQz$aj3mb%tbQ==~ES`_9T37WHTh8)&8j*bhzXy|7NXd5p zh#7;zp(2+EGaKR8aHB022k$O%%1TCZ5%(~fi+e-50I8qc!B=ktI}ngIQ6Apv^s>iE zIqXg~hvTxw@;c8)%6|YZO2-ZMdQqZ~h{n43OW=4$FYt))3KPiJGA}p6gSwwgNSk1` zEYcFFLhg;n2y5CRQrn4e9Q~@pjTb+F<{L&sS$ViGN)i`aag`h+`f)uP`GD#ZpIAqB znkUsr^%DsXCCh0C$5gH|^dXGnN-e+BI3&Z-8sD5HSXZ0c+WWa;Q-`9j72LfMS&`J? z+|E#T&x}Hm`N0OcO|%t0O*03x%M{nzA#o51r(v4xj(zN@V@K;{TQ{Jux5|6;6&lae z0+0B*@p=?Z!P4);ryw{4B%Bq$kk`-JBAI2HR>ukH^XcrUP*`HB?U?afk$vN#wN#HT z!*5+6fUjVpway+AxYMbPcSL;a;BScNEZxnrmOJg@%7NeARDim(w=WN+CeylnRmNkM zsTZ34SJzj97O8EXzQdF!=et>QZ8h7hBnihOFnz5;E}x;>CL>^(ikB2xsG2Px#z=3| z*iz`06UgW{?J4=GSQeuvkTivjS2{Doq_31+St)Z23xb_!UuRELJjh_D!XVTzoK54#{DF1g0J9&tDuJ>gr#d5pu3Q& zKIy1FDZihbt0`u`jlg96`nBu!^$*eZ?O?%0!5|ZYgdM}zMfIs|5tRsIsbcQ&tR<-s z@&=5o#LkR$vblBnl!S*< z8!VE*tsO5r{E9g?#Ur7YUXR{85&8WjL7p|OnhzSE=4P4zEm68Xnj_DkD@zxddC&^3 zLY6F%@48Z@-E(Q*8euv40zr2>QDk&G6!#7XdV#t+BQ0!Hs86`R!~Q6um zf0`Edz1yF0jNc39*+MQm7oMqo_r>N(mfoS#lA##|W7bWwZGGl*I8+xCefBpN8I3mC zp0K()g{68{IyfY`8TMOiCoxXmvq~!d!OU-(P6BiXl9{*n!^>^6Ca^BPAKdM{Ig1o` z<%MjM$*AwA@COsv^~0CrH6r2G+PJ9bU%Y6nU{@sP=@Z_3>OfQWSIk8Rl?6KEs*XHW zYwtU~L;ay2tDucCeQ*z<{b@qf*}Q6Cj^TK7n|?G9Jv>}m?;B3T`u)aN?FCQ!6LjLt zhlb%C4QpqMK$8YuYUp;^{E5Tw+=03kS|`ZvE7g+(A5PoJkWm(AZR8I)5E>jBwcso$ zjJ@(TieVEad5RnHpK_jvX$|$aX+9f$1>9J)f?ocyGBtuf-9!SeOfkU&0LXv1U!bF# zl`-(Qq^4JO$Yu$g{o(BLqqWg$S~Y`6XhJsO;3lwPHXz%lFpM$RN#z|$i*`F)iu;mc z>qiyqal%;%_{PqIHh0^w304$zm?;bov)ynNQcE(1WFk5$6-~nwj6=S`tHt%Z%F%je zwRz*Hn2hg@CMo&@gjAVV-zbggG!BE5WA>#JmAhqg>xo~9wA+^{D#fW?$NaGQ;fAS( zMrj|;gtGt?fSzn@of=A@4*g`=pSr-IjvH#_)gCJu&jzbz=`GEo{D4WAqj{73eo_1e zF3DV_q&owmvMkKc__C&z)#Yd0VF>hKmGHUn9HOj2)fH`Qe`TS|w#;UGCFJJOj zht|-iNFsr?Rw2$V{qk9)(Z`Nu_%8Bj+O`kgS%YEa@>98IC)l@1b|mGM_BCq}H0amI!=u7P@4&>t^4DiB)c3bZF%XllOX(<}5y z=&$?iQ;G1)V=v6n^=BV3ZJaVV*9#vIZUzleeMCud`)rl|bDhPx`aQB!6HE(L5zK;p z9k*5gZPT*|5QN#eKDLk8s#NG3a%TTD>DmaW;$v1ACyi zrLPie^d&%rapxpRoSLC9_Ws#zsnx4(2wd zzf&q8UdytZ30x}8Vk`ku0vF8+tqcXq7|anxGa{$fK^mBc zck6p_+`L$>VK7-Jc^@Z`@& ze=I?vlnidw>|0c!S}MGiMK|&c{&_2Iv+CnF>f*7T z^Zl!I^GD(DuL92RWxs&vt}yWIh~7Xw3%h#6e-A_wR^lLSQrUqrxLe-G$>%l$TmqpXW>ky18btAv4fJaqvLNX$@t4PGlPM-&0&)H`x#4uffv>Uk_f9wV^R{b zehk)12_22Rk4cA8%t;PMl*V|J3A|FpBn)Km3&|m*t<26XaClOn8pQbJ$&rV9XT8xA zuJM~2-krP5lkjo3G2mO;PJ~lH8-$y?8Y~uoq9s1pmfQzYWLFlN3DO2ay%WYR--EZ) zr!pDBSRm>v3Suu(NCd>;@`S%WB^m${dw!V&<#G%%#a9rJQu!kr*dZivIg!2R$aVR` z;Kqe4EW|VH|MIhCb6tZ67I6EeFJ+%xDPiFtFNiiwg@61(xm5ez(Nv&GsE9u4k$k_L z3i?e>F(_HwaxHOC`rOmVx1O+b3R*I%retx)%0bev11&JpC(b`8n@oD}$SU+8s4D^yY zfoD{vpGeGo6ZUL&kQX&Q;Y>yIG-+y|A{81~ZhZx9Ve=aD0?*;>!?zW-#nS@|`A)wt zpfWaT9QEp%j~vLwrDIYUY_M#elHts0H&-Svk5l)07iVwwN}d%vcP($Hb-0p{wN|88 z!P|gLeq0|&X9upNc7}fybV2A0mndn72TDI9JmIL4Mt2{plW@5vSbm0b0Ey4L>l`?t zm2WgWgk>V%B&Qp)De}`SC_yGWc_u4Y4$X7Ak+K3^R`WEp#w0@nh{(D5^*2V|9P6=? zIoccDWHepaZMNlP0Iw}o5i6*BsO644q0C||g=!;|URJUeDIi4KcL}T7ttFpWuUCk$ z_C|KvM4R7rmd1}XmW&&haK7=*Y>m|w#L(mn)ER8k$+$D8_M;dSBnAFBp<-p2y0#rp zBp0RmK9*Q1ER!tvma7W{>R;L)V9;@O$EHDZez)3o;vgu!>53=Tb;0A(0#8|F<+L1E zC%=4jR;Xc%YO9 z!cjzo<&^M{=?_8OSQ(RLy$Y+Z*3vp`T^O^X-i|0r->G~0zaYDI z5ulzi4&EP*&X#EF+ccoszW8W7X$3Q(BDWX8&$bJC=x)02G4`GfaK>^FH~OB*b!D?6|3*j0rT$Wv%|tp5*l?9_ecAy*9YCC zMdzjlQIAv%rcq!#v7z`BvfGN#>a0FPss}C&A!t8iV?n12 zkK0W-}~(e9KrLE$KFOV_H99Yg+i1RW|2nN(*b+jVsE!p@5B76EYZGw zOiW0lSwD%4u3DPPXe^^AdEYnub5UylK=^Y)gkgxhX{%lX3d=dGH49o9xtU%!xr!>7 zJ5%R=1{jKH7_$yD1yuC!Oh0-t6a=3G@#~$`@!$yCq`36g96R`DwAZnzQVFw|(#zDp z3L(%>uA%wqzcS?Vw^hyluwPk{jz+(?wwnFAn+8ARApK_#&H-gbxbeu>HSItmxxn=p zw(^QK7vK?h@r3jN(%b%(KmXe83)~|(*!X)WQXi*lEd%y@PT-X;bnr@-k*%S;gRLEq z(a_ex__xp=+?(;g1un2ljEGZ^>S4kPT!VQL9;&mRO4>uRhE=-R60pm=#g1#Om@gn1 zI=nuSS*lP4!ICfzaox1;=*Ep+*CKrFny*#m3M2D_lyAfSvbeQt-2hiaT^&W!RjMf% zg`z)M-t=|2sj!Xx)W8C{KT#h_PBFT(4*MUy5SQhZ8wa}q?T@AlTw<3&e0X0AbpfG zeEQKwO@sL$$?M<%qxaFSW@CBV!;$PNQUIEd{79Ue=47vD)513_p!bHP85y%SjA|y^ z@qQubR%tEhm}rZ6_$35BcPpwe9{miOn#J>4A&dw-kbl>~PZIEGpAb80BwPnN!+Ac961)f0N6CthObFIiD`IZ}eRJ*MH1Q7=^l_@mLttAgBk3F1= z22IW^xbH`9dAQz-NURWW>s`i7_Q{8C=V8G><6GifC%VqB=y<(`iGy!AV-}!@^4Sp6 z^HfYHz%+93ff0u;7m-R(Rm`)_Wo^>us-Egy#@k>&F}8YRy3W3si~>1SR@;_jM-0a{ zle~vTUD&H4M}%CFPk4K3?;?#s9?DF(W)|52UYGo1f2+ zn9*oq85zt5d(iI+O|kZB|LwQx`bc}chJEu{|1T+sj^3`;YI(QTXs{|5N)-nc&ne>)d}Iq@Hza=!}x+As8%=(kt@UW5L#d+1l;|L$`5OB4W5Lik.AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} + 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} +False TwrShadow – Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) +====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] + 1 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] +True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] +True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] +true TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] +0.0001 IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] + 100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] + 3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=GonzalezÂ’s variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils_AD15/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils_AD15/Cylinder2.dat" +"Airfoils_AD15/DU40_A17.dat" +"Airfoils_AD15/DU35_A17.dat" +"Airfoils_AD15/DU30_A17.dat" +"Airfoils_AD15/DU25_A17.dat" +"Airfoils_AD15/DU21_A17.dat" +"Airfoils_AD15/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"TestCase_AD15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"TestCase_AD15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"TestCase_AD15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd +(m) (m) (-) +1.0000000E+01 6.5000000E+00 1.0000000E+00 +1.7760000E+01 6.2400000E+00 1.0000000E+00 +2.5520000E+01 5.9700000E+00 1.0000000E+00 +3.3280000E+01 5.7100000E+00 1.0000000E+00 +4.1040000E+01 5.4500000E+00 1.0000000E+00 +4.8800000E+01 5.1800000E+00 1.0000000E+00 +5.6560000E+01 4.9200000E+00 1.0000000E+00 +6.4320000E+01 4.6600000E+00 1.0000000E+00 +7.2080000E+01 4.4000000E+00 1.0000000E+00 +7.9840000E+01 4.1300000E+00 1.0000000E+00 +8.7600000E+01 3.8700000E+00 1.0000000E+00 +====== Outputs ==================================================================================== +False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtAeroCp, RtAeroCt" +"RtSkew" +"B1N3Clrnc, B2N3Clrnc, B3N3Clrnc" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat new file mode 100644 index 0000000000..8d6506fe9e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat @@ -0,0 +1,146 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd - Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] +default RelThickness - The non-dimensional thickness of the airfoil (thickness/chord) [only used if UAMod=7] [default=0.2] (-) +1 NonDimArea - The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +0 NumCoords - The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file - The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. +2 NumTabs - Number of airfoil tables in this file. Each table must have lines for Re and Ctrl. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ +0.05 Re - Reynolds number in millions +0 UserProp - User property (control) setting +True InclUAdata - Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +-2.1039 alpha0 - 0-lift angle of attack, depends on airfoil. +12.3238 alpha1 - Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) +-7.303 alpha2 - Angle of attack at f=0.7, (approximately the stall angle) for AOA1] +0 S2 - Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] +0 S3 - Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] +0 S4 - Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] +1.2824 Cn1 - Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. +-0.48392 Cn2 - As Cn1 for negative AOAs. +"DEFAULT" St_sh - Strouhal's shedding frequency constant. [default = 0.19] +0.032848 Cd0 - 2D drag coefficient value at 0-lift. +0 Cm0 - 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] +0 k0 - Constant in the curve best-fit; = ( [ignored if UAMod<>1] +0 k1 - Constant in the curve best-fit. [ignored if UAMod<>1] +0 k2 - Constant in the curve best-fit. [ignored if UAMod<>1] +0 k3 - Constant in the curve best-fit. [ignored if UAMod<>1] +0 k1_hat - Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"DEFAULT" x_cp_bar - Constant in the expression of [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout - Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff - Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5] +!........................................ +! Table of aerodynamics coefficients +23 NumAlf - Number of data lines in the following table +! Alpha Cl Cd +! (deg) (-) (-) +-1.00000000e+01 -4.63300000e-01 1.92100000e-01 +-9.00000000e+00 -4.51700000e-01 1.64500000e-01 +-8.00000000e+00 -4.40200000e-01 1.38500000e-01 +-7.00000000e+00 -4.17800000e-01 1.15500000e-01 +-6.00000000e+00 -3.95500000e-01 9.38000000e-02 +-5.00000000e+00 -2.95400000e-01 7.01000000e-02 +-4.00000000e+00 -1.95300000e-01 4.67000000e-02 +-3.00000000e+00 -9.23000000e-02 3.93000000e-02 +-2.00000000e+00 1.07000000e-02 3.21000000e-02 +-1.00000000e+00 1.10000000e-01 2.80000000e-02 + 0.00000000e+00 2.01100000e-01 2.40000000e-02 + 1.00000000e+00 3.07500000e-01 2.94000000e-02 + 2.00000000e+00 4.36600000e-01 3.87000000e-02 + 3.00000000e+00 6.04500000e-01 3.30000000e-02 + 4.00000000e+00 7.30600000e-01 3.20000000e-02 + 5.00000000e+00 8.25900000e-01 3.14000000e-02 + 6.00000000e+00 9.27700000e-01 3.15000000e-02 + 7.00000000e+00 1.01760000e+00 3.59000000e-02 + 8.00000000e+00 1.10180000e+00 4.31000000e-02 + 9.00000000e+00 1.17740000e+00 4.63000000e-02 + 1.00000000e+01 1.24710000e+00 5.04000000e-02 + 1.10000000e+01 1.30040000e+00 6.35000000e-02 + 1.20000000e+01 1.21610000e+00 1.07300000e-01 +! ------------------------------------------------------------------------------ +! data for table 2 +! ------------------------------------------------------------------------------ +0.06 Re - Reynolds number in millions +0 UserProp - User property (control) setting +True InclUAdata - Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +-2.3715 alpha0 - 0-lift angle of attack, depends on airfoil. +11.3643 alpha1 - Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) +-6.5882 alpha2 - Angle of attack at f=0.7, (approximately the stall angle) for AOA1] +0 S2 - Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] +0 S3 - Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] +0 S4 - Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] +1.3134 Cn1 - Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. +-0.44413 Cn2 - As Cn1 for negative AOAs. +"DEFAULT" St_sh - Strouhal's shedding frequency constant. [default = 0.19] +0.042829 Cd0 - 2D drag coefficient value at 0-lift. +0 Cm0 - 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] +0 k0 - Constant in the curve best-fit; = ( [ignored if UAMod<>1] +0 k1 - Constant in the curve best-fit. [ignored if UAMod<>1] +0 k2 - Constant in the curve best-fit. [ignored if UAMod<>1] +0 k3 - Constant in the curve best-fit. [ignored if UAMod<>1] +0 k1_hat - Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"DEFAULT" x_cp_bar - Constant in the expression of [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout - Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff - Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5] +!........................................ +! Table of aerodynamics coefficients +24 NumAlf - Number of data lines in the following table +! Alpha Cl Cd +! (deg) (-) (-) +-8.00000000e+00 -4.03100000e-01 1.47000000e-01 +-7.00000000e+00 -3.91200000e-01 1.20800000e-01 +-6.00000000e+00 -3.79100000e-01 9.55000000e-02 +-5.00000000e+00 -2.80300000e-01 7.56000000e-02 +-4.00000000e+00 -1.73600000e-01 5.28000000e-02 +-3.00000000e+00 -6.70000000e-02 4.66000000e-02 +-2.00000000e+00 3.96000000e-02 4.06000000e-02 +-1.00000000e+00 1.41300000e-01 4.01000000e-02 + 0.00000000e+00 2.43100000e-01 3.98000000e-02 + 1.00000000e+00 3.61600000e-01 4.11000000e-02 + 2.00000000e+00 5.31200000e-01 4.37000000e-02 + 3.00000000e+00 6.49600000e-01 4.01000000e-02 + 4.00000000e+00 7.59200000e-01 3.84000000e-02 + 5.00000000e+00 8.57200000e-01 3.66000000e-02 + 6.00000000e+00 9.47800000e-01 3.67000000e-02 + 7.00000000e+00 1.03400000e+00 3.90000000e-02 + 8.00000000e+00 1.11910000e+00 4.55000000e-02 + 9.00000000e+00 1.19660000e+00 4.97000000e-02 + 1.00000000e+01 1.27230000e+00 5.86000000e-02 + 1.10000000e+01 1.33120000e+00 7.79000000e-02 + 1.20000000e+01 1.20600000e+00 1.82900000e-01 + 1.30000000e+01 1.20490000e+00 1.96000000e-01 + 1.40000000e+01 1.04570000e+00 2.95400000e-01 + 1.50000000e+01 1.06950000e+00 3.19300000e-01 \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat new file mode 100644 index 0000000000..442a89c986 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat @@ -0,0 +1,83 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! AD_63-224 airfoil +! +! note that this file uses Marshall +! --------------------------------- +"DEFAULT" InterpOrd ! I + 1 NonDimArea ! T +@"63-224.txt" NumCoords ! T + 1 NumTabs ! N +! --------------------------------- +! data for table 1 +! --------------------------------- + 2 Re ! R + 0 Ctrl ! C +True InclUAdata ! I +!.................................. + -2.6501 alpha0 ! 0 + 15 alpha1 ! A + -15 alpha2 ! A + 1 eta_e ! R + 6.9763 C_nalpha ! S +"Default" T_f0 ! I +"Default" T_V0 ! I +"Default" T_p ! B +"Default" T_VL ! I +"Default" b1 ! C +"Default" b2 ! C +"Default" b5 ! C +"Default" A1 ! C +"Default" A2 ! C +"Default" A5 ! C + 0 S1 ! C + 0 S2 ! C + 0 S3 ! C + 0 S4 ! C + 1.4356 Cn1 ! C + -0.75848 Cn2 ! A + 0.19 St_sh ! S + 0.0066863 Cd0 ! 2 + -0.03419 Cm0 ! 2 + 0 k0 ! C + 0 k1 ! C + 0 k2 ! C + 0 k3 ! C + 0 k1_hat ! C +"Default" x_cp_bar ! C +"Default" UACutout ! A +"DEFAULT" filtCutOff ! C +!........................................ +! Table of aerodynamics coefficients + 30 NumAlf ! N +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -5 -0.4298 0.00693 -0.0262 + -4 -0.30923 0.00678 -0.02835 + -3 -0.1877 0.00668 -0.0306 + -2 -0.0657 0.00663 -0.0329 + -1 0.0563 0.00662 -0.0353 + 0 0.1783 0.00665 -0.0376 + 1 0.3001 0.00671 -0.0399 + 4 0.6622 0.00711 -0.0465 + 5 0.7809 0.00734 -0.0484 + 6 0.89762 0.00763 -0.04997 + 7 1.0092 0.00811 -0.0508 + 8 1.1098 0.00898 -0.05 + 9 1.1819 0.01047 -0.0447 + 10 1.2074 0.01311 -0.0333 + 11 1.224 0.01756 -0.0244 + 12 1.2494 0.02249 -0.0185 + 13 1.2654 0.02877 -0.0136 + 14 1.2793 0.03616 -0.0103 + 15 1.2906 0.04462 -0.0085 + 16 1.2815 0.05536 -0.01498 + 17 1.2532 0.06833 -0.02929 + 18 1.2126 0.08304 -0.0485 + 20 1.1232 0.11579 -0.08995 + 21 1.0872 0.13296 -0.10692 + 22 1.0591 0.15047 -0.12049 + 23 1.038 0.16834 -0.13111 + 24 1.0228 0.18659 -0.13922 + 25 1.0125 0.20524 -0.14529 + 26 1.0059 0.22432 -0.14975 + 30 0.99665 0.30537 -0.16066 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat new file mode 100644 index 0000000000..b79e649d7f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat @@ -0,0 +1,66 @@ +! ------------ AirfoilInfo v1.01.x +! TailPlate.dat. Lift and drag on d +! Oct. 14, 2003, Foilchecked by Win +! note that this file uses Marshall +! --------------------------------- +"DEFAULT" InterpOrd ! I + 1 NonDimArea ! T + 0 NumCoords ! T +! ......... x-y coordinates are nex + 1 NumTabs ! N +! --------------------------------- +! data for table 1 +! --------------------------------- + 0.3 Re ! R + 0 Ctrl ! C +True InclUAdata ! I +!.................................. + -4.23 alpha0 ! 0 + 4 alpha1 ! A + -4 alpha2 ! A + 1 eta_e ! R + 2.71555 C_nalpha ! S +"Default" T_f0 ! I +"Default" T_V0 ! I +"Default" T_p ! B +"Default" T_VL ! I +"Default" b1 ! C +"Default" b2 ! C +"Default" b5 ! C +"Default" A1 ! C +"Default" A2 ! C +"Default" A5 ! C + 0 S1 ! C + 0 S2 ! C + 0 S3 ! C + 0 S4 ! C + 1.8588 Cn1 ! C + -0.8 Cn2 ! A +"Default" St_sh ! S + 0.01 Cd0 ! 2 + 0 Cm0 ! 2 + 0 k0 ! C + 0 k1 ! C + 0 k2 ! C + 0 k3 ! C + 0 k1_hat ! C +"Default" x_cp_bar ! C +"Default" UACutout ! A +"DEFAULT" filtCutOff ! C +!.................................. +! Table of aerodynamics coefficient + 11 NumAlf ! N +! Alpha Cl Cd +! (deg) (-) (-) + -180.00 0.000 0.1820 + -140.00 0.524 0.6353 + -100.00 0.147 1.1954 + -40.00 -0.524 0.6353 + 0.00 0.200 0.0100 + 16.00 0.861 0.2190 + 37.00 0.759 0.5800 + 70.00 0.407 1.1219 + 110.00 -0.285 1.1219 + 150.00 -0.431 0.4577 + 180.00 0.000 0.1820 + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat new file mode 100644 index 0000000000..39ab5114ad --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat @@ -0,0 +1,26 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat new file mode 100644 index 0000000000..df4e6406cc --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat @@ -0,0 +1,73 @@ +------- AERODYN v15.03.* INPUT FILE ------------------------------------------------ +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} + 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} +False TwrShadow – Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) +====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] + 1 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] +True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] +True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] +true TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] +0.0001 IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] + 100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] + 3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez’s variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils_AD15/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils_AD15/Cylinder2.dat" +"Airfoils_AD15/DU40_A17.dat" +"Airfoils_AD15/DU35_A17.dat" +"Airfoils_AD15/DU30_A17.dat" +"Airfoils_AD15/DU25_A17.dat" +"Airfoils_AD15/DU21_A17.dat" +"Airfoils_AD15/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"TestCase_AD15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"TestCase_AD15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"TestCase_AD15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd +(m) (m) (-) +1.0000000E+01 6.5000000E+00 1.0000000E+00 +1.7760000E+01 6.2400000E+00 1.0000000E+00 +2.5520000E+01 5.9700000E+00 1.0000000E+00 +3.3280000E+01 5.7100000E+00 1.0000000E+00 +4.1040000E+01 5.4500000E+00 1.0000000E+00 +4.8800000E+01 5.1800000E+00 1.0000000E+00 +5.6560000E+01 4.9200000E+00 1.0000000E+00 +6.4320000E+01 4.6600000E+00 1.0000000E+00 +7.2080000E+01 4.4000000E+00 1.0000000E+00 +7.9840000E+01 4.1300000E+00 1.0000000E+00 +8.7600000E+01 3.8700000E+00 1.0000000E+00 +====== Outputs ==================================================================================== +False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtAeroCp, RtAeroCt" +"RtSkew" +"B1N3Clrnc, B2N3Clrnc, B3N3Clrnc" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat new file mode 100644 index 0000000000..81d3da19ba --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat @@ -0,0 +1,123 @@ +------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 2 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False Buoyancy - Include buoyancy effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] +"unused" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] +====== Environmental Conditions =================================================================== +"default" AirDens - Air density (kg/m^3) +"default" KinVisc - Kinematic viscosity of working fluid (m^2/s) +"default" SpdSound - Speed of sound in working fluid (m/s) +"default" Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] +"default" Pvap - Vapour pressure of working fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +True AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-) [used only when WakeMod=2] + 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1 or 3] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] + 3 UAMod - Unsteady Aero Model Switch (switch) {2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L 5 states, 6=Oye, 7=Boeing-Vertol} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +0.15 UAStartRad - Starting radius for dynamic stall (fraction of rotor radius) [used only when AFAeroMod=2] +1.0 UAEndRad - Ending radius for dynamic stall (fraction of rotor radius) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"../5MW_Baseline/Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"../5MW_Baseline/Airfoils/Cylinder2.dat" +"../5MW_Baseline/Airfoils/DU40_A17.dat" +"../5MW_Baseline/Airfoils/DU35_A17.dat" +"../5MW_Baseline/Airfoils/DU30_A17.dat" +"../5MW_Baseline/Airfoils/DU25_A17.dat" +"../5MW_Baseline/Airfoils/DU21_A17.dat" +"../5MW_Baseline/Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +0.0 VolHub - Hub volume (m^3) +0.0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] +0.0 VolNac - Nacelle volume (m^3) +0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail fin Aerodynamics ======================================================================== +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] + 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.0000000E-01 0.0 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.0000000E-01 0.0 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.0000000E-01 0.0 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.0000000E-01 0.0 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.0000000E-01 0.0 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.0000000E-01 0.0 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.0000000E-01 0.0 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.0000000E-01 0.0 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.0000000E-01 0.0 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.0000000E-01 0.0 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0 +====== Outputs ==================================================================================== +False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 0 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +RtSpeed +RtTSR +RtVAvgxh +RtVAvgyh +RtVAvgzh +RtSkew +RtAeroFxh +RtAeroFyh +RtAeroFzh +RtAeroMxh +RtAeroMyh +RtAeroMzh +RtAeroPwr +RtArea +RtAeroCp +RtAeroCq +RtAeroCt +B1N3Clrnc, B2N3Clrnc, B3N3Clrnc +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section] + 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) + "All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) + OutListAD - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Fx" +"Fy" +"alpha" +"Cl" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat new file mode 100644 index 0000000000..6a03df51ee --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat @@ -0,0 +1,45 @@ +SNL SWiFT V27 AeroDyn Input File, version 2.0, created on 16-October-2018 +SI SysUnits - System of units for used for input and output [must be SI for FAST] (unquoted string) +BEDDOES StallMod - Dynamic stall included [BEDDOES or STEADY] (unquoted string) +USE_CM UseCm - Use aerodynamic pitching moment model? [USE_CM or NO_CM] (unquoted string) +EQUIL InfModel - Inflow model [DYNIN or EQUIL] (unquoted string) +SWIRL IndModel - Induction-factor model [NONE or WAKE or SWIRL] (unquoted string) +0.005 AToler - Induction-factor tolerance (convergence criteria) (-) +PRANDtl TLModel - Tip-loss model (EQUIL only) [PRANDtl, GTECH, or NONE] (unquoted string) +PRANDtl HLModel - Hub-loss model (EQUIL only) [PRANdtl or NONE] (unquoted string) +"Wind/StepWindSweep_m1mps.wnd" WindFile - Name of file containing wind data (quoted string) +32.1 HH - Wind reference (hub) height [TowerHt+Twr2Shft+OverHang*SIN(ShftTilt)] (m) +0.3 TwrShad - Tower-shadow velocity deficit (-) +1 ShadHWid - Tower-shadow half width (m) +1.87542 T_Shad_Refpt - Tower-shadow reference point (m) +1.064032027823 Rho - Average Air density at SWiFT(kg/m^3) +1.5e-05 KinVisc - Kinematic air viscosity [CURRENTLY IGNORED] (m^2/sec) +0.005 DTAero - Time interval for aerodynamic calculations (sec) +5 NumFoil - Number of airfoil files (-) +"AeroData\AD_1_cylinder.dat" FoilNm - Names of the airfoil files [NumFoil lines] (quoted strings) +"AeroData\AD_2_63-235_mod.dat" +"AeroData\AD_3_63-224_mod.dat" +"AeroData\AD_4_63-218_mod.dat" +"AeroData\AD_5_63-214_mod.dat" +20 BldNodes - Number of blade nodes used for analysis (-) +RNodes AeroTwst DRNodes Chord NFoil PrnElm + 0.82500 13.9573 0.65000 0.589 1 PRINT + 1.47500 13.0025 0.65000 0.979 2 PRINT + 2.12500 12.0596 0.65000 1.2728 2 PRINT + 2.77500 11.1288 0.65000 1.2276 2 PRINT + 3.42500 10.2102 0.65000 1.1823 2 PRINT + 4.07500 9.3046 0.65000 1.1368 3 PRINT + 4.72500 8.3928 0.65000 1.091 3 PRINT + 5.37500 7.4834 0.65000 1.045 3 PRINT + 6.02500 6.6249 0.65000 0.999 3 PRINT + 6.67500 5.8527 0.65000 0.953 3 PRINT + 7.32500 5.1189 0.65000 0.9072 3 PRINT + 7.97500 4.4182 0.65000 0.8614 3 PRINT + 8.62500 3.7563 0.65000 0.8155 4 PRINT + 9.27500 3.1393 0.65000 0.7694 4 PRINT + 9.92500 2.5731 0.65000 0.7231 4 PRINT +10.57500 2.0579 0.65000 0.6764 4 PRINT +11.22500 1.5793 0.65000 0.6295 4 PRINT +11.87500 1.1394 0.65000 0.5823 4 PRINT +12.52500 0.7418 0.65000 0.5348 5 PRINT +13.17500 0.3900 0.65000 0.4871 5 PRINT diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat new file mode 100644 index 0000000000..34b5052a79 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat @@ -0,0 +1,40 @@ +NREL 5.0 MW baseline land-based aerodynamic tower CD input properties. +Used with AeroDyn 13.00.00 hidden tower influence feature. + 12 NTwrHt - Number of tower input height stations listed (-) + 16 NTwrRe - Number of tower Re values (-) + 1 NTwrCD - Number of tower CD columns (-) Note: For current versions, this MUST be 1. + 0.0 Tower_Wake_Constant - Tower wake constant (-) {0.0: full potential flow, 0.1: Bak model} +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- +TwrHtFr TwrWid NTwrCDCol +0.00000 6.000 1 +0.09733 5.787 1 +0.19467 5.574 1 +0.29200 5.361 1 +0.38933 5.148 1 +0.48667 4.935 1 +0.58400 4.722 1 +0.68133 4.509 1 +0.77867 4.296 1 +0.87600 4.083 1 +0.97333 3.870 1 +1.00000 3.870 1 +---------------------- Re v CD PROPERTIES -------------------------------------- +TwrRe TwrCD1 + 0.010 1.11 + 0.020 1.20 + 0.122 1.20 + 0.200 1.17 + 0.300 0.90 + 0.400 0.54 + 0.500 0.31 + 1.000 0.38 + 1.500 0.46 + 2.000 0.53 + 2.500 0.57 + 3.000 0.61 + 3.500 0.64 + 4.000 0.67 + 5.000 0.70 +10.000 0.70 + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat new file mode 100644 index 0000000000..3e26e51d29 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat @@ -0,0 +1,88 @@ +--------- BEAMDYN V1.01.* INPUT FILE ------------------------------------------- +NREL 5MW blade +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) +2 analysis_type - 1: Static analysis; 2: Dynamic analysis +0.0 rhoinf - Numerical Damping Parameter for Generalized-alpha integrator +2 quadrature - 1: Gauss; 2: Trapezoidal +DEFAULT refine - Refinement factor for quadrature 2. DEFAULT = 1 +DEFAULT n_fact - Factorization frequency: The Jacobian is computed every n_fact steps in N-R iteration. DEFAULT = 5 +DEFAULT DTBeam - Time step size +DEFAULT NRMax - Max number of iterations in Newton-Ralphson algorithm +DEFAULT stop_tol - Tolerance for stopping criterion +---------------------- GEOMETRY PARAMETER -------------------------------------- +1 member_total - Total number of member (-) +49 kp_total - Total number of key point (-) +1 49 - Member number; Number of key points in this member + kp_xr kp_yr kp_zr initial_twist + (m) (m) (m) (deg) + 0.000000 0.000000 0.000000 13.308000 + 0.000000 0.000000 0.199875 13.308000 + 0.000000 0.000000 1.199865 13.308000 + 0.000000 0.000000 2.199855 13.308000 + 0.000000 0.000000 3.199845 13.308000 + 0.000000 0.000000 4.199835 13.308000 + 0.000000 0.000000 5.199825 13.308000 + 0.000000 0.000000 6.199815 13.308000 + 0.000000 0.000000 7.199805 13.308000 + 0.000000 0.000000 8.201025 13.308000 + 0.000000 0.000000 9.199785 13.308000 + 0.000000 0.000000 10.199775 13.308000 + 0.000000 0.000000 11.199765 13.181000 + 0.000000 0.000000 12.199755 12.848000 + 0.000000 0.000000 13.200975 12.192000 + 0.000000 0.000000 14.199735 11.561000 + 0.000000 0.000000 15.199725 11.072000 + 0.000000 0.000000 16.199715 10.792000 + 0.000000 0.000000 18.200925 10.232000 + 0.000000 0.000000 20.200290 9.672000 + 0.000000 0.000000 22.200270 9.110000 + 0.000000 0.000000 24.200250 8.534000 + 0.000000 0.000000 26.200230 7.932000 + 0.000000 0.000000 28.200825 7.321000 + 0.000000 0.000000 30.200190 6.711000 + 0.000000 0.000000 32.200170 6.122000 + 0.000000 0.000000 34.200150 5.546000 + 0.000000 0.000000 36.200130 4.971000 + 0.000000 0.000000 38.200725 4.401000 + 0.000000 0.000000 40.200090 3.834000 + 0.000000 0.000000 42.200070 3.332000 + 0.000000 0.000000 44.200050 2.890000 + 0.000000 0.000000 46.200030 2.503000 + 0.000000 0.000000 48.201240 2.116000 + 0.000000 0.000000 50.199990 1.730000 + 0.000000 0.000000 52.199970 1.342000 + 0.000000 0.000000 54.199950 0.954000 + 0.000000 0.000000 55.199940 0.760000 + 0.000000 0.000000 56.199930 0.574000 + 0.000000 0.000000 57.199920 0.404000 + 0.000000 0.000000 57.699915 0.319000 + 0.000000 0.000000 58.201140 0.253000 + 0.000000 0.000000 58.699905 0.216000 + 0.000000 0.000000 59.199900 0.178000 + 0.000000 0.000000 59.699895 0.140000 + 0.000000 0.000000 60.199890 0.101000 + 0.000000 0.000000 60.699885 0.062000 + 0.000000 0.000000 61.199880 0.023000 + 0.000000 0.000000 61.500000 0.000000 +---------------------- MESH PARAMETER ------------------------------------------ +5 order_elem - Order of interpolation (basis) function (-) +---------------------- MATERIAL PARAMETER -------------------------------------- +"TestCase_BD_Blade.dat" BldFile - Name of file containing properties for blade +---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- +False UsePitchAct - Whether a pitch actuator should be used (flag) +200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] +2.0E+7 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] +5.0E+5 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] +---------------------- OUTPUTS ------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) + 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) + 1,2,3,4,5,6 OutNd - Nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RootFxr, RootFyr, RootFzr" +"RootMxr, RootMyr, RootMzr" +"TipTDxr, TipTDyr, TipTDzr" +"TipRDxr, TipRDyr, TipRDzr" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +-------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat new file mode 100644 index 0000000000..48b57921ad --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat @@ -0,0 +1,41 @@ +------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +! Constant property beam Tube + ---------------------- BLADE PARAMETERS -------------------------------------- +2 station_total - Number of blade input stations (-) +1 damp_type - Damping type (switch): 0: no damping; 1: viscous damping + ---------------------- DAMPING COEFFICIENT------------------------------------ +mu1 mu2 mu3 mu4 mu5 mu6 +(s) (s) (s) (s) (s) (s) + 1.00000000e-02 1.00000000e-02 1.00000000e-02 1.00000000e-02 1.00000000e-02 1.00000000e-02 + ---------------------- DISTRIBUTED PROPERTIES--------------------------------- +0.000000 + 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000000E+07 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 8.0000000000000000E+04 + + 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 -0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 + 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000001E-01 + +1.000000 + 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000000E+07 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 8.0000000000000000E+04 + + 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 -5.9999999999999998E-01 + 0.0000000000000000E+00 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 5.9999999999999998E-01 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 5.9999999999999998E-01 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 + 0.0000000000000000E+00 -5.9999999999999998E-01 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000001E-01 + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat new file mode 100644 index 0000000000..c35db60150 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat @@ -0,0 +1,39 @@ +------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +Generated with AeroElasticSE FAST driver +---------------------- BLADE PARAMETERS -------------------------------------- +2 station_total - Number of blade input stations (-) +1 damp_type - Damping type: 0: no damping; 1: damped +---------------------- DAMPING COEFFICIENT------------------------------------ + mu1 mu2 mu3 mu4 mu5 mu6 + (-) (-) (-) (-) (-) (-) + 0.019500 0.019500 0.019500 0.019500 0.019500 0.019500 +---------------------- DISTRIBUTED PROPERTIES--------------------------------- + 0.000000000000000e+00 + 4.675405354157458e+09 2.141174291516585e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 5.727890365279171e+02 + 2.141003810433669e+00 4.675404402613968e+09 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -1.093836309565273e+01 + 0.000000000000000e+00 0.000000000000000e+00 3.191359698380162e+10 -4.213485635770499e+03 2.647091687341770e+01 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 -4.213486360843161e+03 7.787974481210252e+10 6.634230697213651e+01 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 2.647084393975569e+01 6.634218583660905e+01 7.787975917895717e+10 0.000000000000000e+00 + 5.727890373663506e+02 -1.093836352888245e+01 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 4.560397377220657e+10 + + 2.171182764288985e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 2.861477454511874e-04 + 0.000000000000000e+00 2.171182764288985e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -1.962304917357957e-06 + 0.000000000000000e+00 0.000000000000000e+00 2.171182764288985e+03 -2.861477454511874e-04 1.962304917357957e-06 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 -2.861477454511874e-04 5.299669523418404e+03 4.413285872059084e-06 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 1.962304917357957e-06 4.413285872059084e-06 5.299670502957943e+03 0.000000000000000e+00 + 2.861477454511874e-04 -1.962304917357957e-06 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.059934002637635e+04 + + 1.000000000000000e+00 + 3.220939681303522e+09 -1.285051655727086e+07 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -1.196574798525166e+08 +-1.285051655711221e+07 3.759525506239275e+09 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 2.003716165818856e+07 + 0.000000000000000e+00 0.000000000000000e+00 2.527665824401771e+10 1.142297845427679e+09 -1.221175225663117e+08 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 1.142297845427751e+09 5.670123248328276e+10 -1.798161923977985e+09 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 -1.221175225651547e+08 -1.798161923978496e+09 5.393504238512602e+10 0.000000000000000e+00 +-1.196574798525334e+08 2.003716165818229e+07 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 3.052759169122894e+10 + + 1.636551490280465e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -7.782570323211117e+01 + 0.000000000000000e+00 1.636551490280465e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 8.087504299308899e+00 + 0.000000000000000e+00 0.000000000000000e+00 1.636551490280465e+03 7.782570323211117e+01 -8.087504299308899e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 7.782570323211117e+01 3.826903356587678e+03 -2.204207304888940e+01 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 -8.087504299308899e+00 -2.204207304888940e+01 3.363921293496516e+03 0.000000000000000e+00 +-7.782570323211117e+01 8.087504299308899e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 7.190824650084201e+03 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat new file mode 100644 index 0000000000..2cb5efeddd --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat @@ -0,0 +1,29 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +SNL SWiFT V27 baseline aerodynamic blade input properties +====== Blade Properties ================================================================= +22 20 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) + 0.0 0.0 0.0 0.0 13.9573 0.589 1 + 0.32500 0.0 0.0 0.0 13.9573 0.589 1 + 0.97500 0.0 0.0 0.0 13.0025 0.979 2 + 1.62500 0.0 0.0 0.0 12.0596 1.2728 2 + 2.27500 0.0 0.0 0.0 11.1288 1.2276 2 + 2.92500 0.0 0.0 0.0 10.2102 1.1823 2 + 3.57500 0.0 0.0 0.0 9.3046 1.1368 3 + 4.22500 0.0 0.0 0.0 8.3928 1.091 3 + 4.87500 0.0 0.0 0.0 7.4834 1.045 3 + 5.52500 0.0 0.0 0.0 6.6249 0.999 3 + 6.17500 0.0 0.0 0.0 5.8527 0.953 3 + 6.82500 0.0 0.0 0.0 5.1189 0.9072 3 + 7.47500 0.0 0.0 0.0 4.4182 0.8614 3 + 8.12500 0.0 0.0 0.0 3.7563 0.8155 4 + 8.77500 0.0 0.0 0.0 3.1393 0.7694 4 + 9.42500 0.0 0.0 0.0 2.5731 0.7231 4 +10.07500 0.0 0.0 0.0 2.0579 0.6764 4 +10.72500 0.0 0.0 0.0 1.5793 0.6295 4 +11.37500 0.0 0.0 0.0 1.1394 0.5823 4 +12.02500 0.0 0.0 0.0 0.7418 0.5348 5 +12.67500 0.0 0.0 0.0 0.3900 0.4871 5 +13.0 0.0 0.0 0.0 0.3900 0.4871 5 + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat new file mode 100644 index 0000000000..8abcebb1a8 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat @@ -0,0 +1,128 @@ +------- ELASTODYN v1.03.* INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"default" DT - Integration time step (s) +---------------------- ENVIRONMENTAL CONDITION --------------------------------- + 9.80665 Gravity - Gravitational acceleration (m/s^2) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +True YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +True PtfmSgDOF - Platform horizontal surge translation DOF (flag) +True PtfmSwDOF - Platform horizontal sway translation DOF (flag) +True PtfmHvDOF - Platform vertical heave translation DOF (flag) +True PtfmRDOF - Platform roll tilt rotation DOF (flag) +True PtfmPDOF - Platform pitch tilt rotation DOF (flag) +True PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 0 BlPitch(1) - Blade 1 initial pitch (degrees) + 0 BlPitch(2) - Blade 2 initial pitch (degrees) + 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 0.2 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 10 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + -89.9155 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + -0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) +7.46633E+06 PtfmMass - Platform mass (kg) +4.22923E+09 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) +4.22923E+09 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 1.6423E+08 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"TestCase_ED_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"TestCase_ED_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"TestCase_ED_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"TestCase_ED_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +False SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 30 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 1 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 1 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 9 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"BldPitch1" - Pitch angles for blades 1, 2, and 3 +"BldPitch2" - Pitch angles for blades 1, 2, and 3 +"BldPitch3" - Pitch angles for blades 1, 2, and 3 +"TwrBsMyt" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat new file mode 100644 index 0000000000..df75ee2e18 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat @@ -0,0 +1,81 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 +3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 +5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 +6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 +8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 +1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 +1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 +1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 +1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 +1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 +1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 +1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 +2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 +2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 +2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 +2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 +2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 +3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 +3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 +3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 +4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 +4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 +4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 +5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 +5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 +5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 +6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 +6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 +6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 +7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 +7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 +7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 +8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 +8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 +8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 +8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 +9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 +9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 +9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 +9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 +9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 +9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 +9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 +9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 +9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 +9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 +1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat new file mode 100644 index 0000000000..7da4bce4d9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat @@ -0,0 +1,44 @@ +-------------------------------------------------------------------------------- +---------------------- FAST INDIVIDUAL BLADE FILE ------------------------------ +Comment +---------------------- BLADE PARAMETERS ---------------------------------------- +10 NBlInpSt - Number of blade input stations (-) +F CalcBMode - Calculate blade mode shapes internally {T: ignore mode shapes from below, F: use mode shapes from below} [CURRENTLY IGNORED] (flag) +1.5 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%%) +1.5 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%%) +1.5 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- +1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) +1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) +1 AdjBlMs - Factor to adjust blade mass density (-) +1 AdjFlSt - Factor to adjust blade flap stiffness (-) +1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- +BlFract AeroCent StrcTwst BMassDen FlpStff EdgStff GJStff EAStff Alpha FlpIner EdgIner PrecrvRef PreswpRef FlpcgOf EdgcgOf FlpEAOf EdgEAOf +(-) (-) (deg) (kg/m) (Nm^2) (Nm^2) (Nm^2) (N) (-) (kg m) (kg m) (m) (m) (m) (m) (m) (m) +0.00000 0.250 14.810 90.500 5.26800e+07 5.23e+07 1.27200e+07 1.34400e+09 0.000 3.565 3.541 0.000 0.000 0.000 0.000 0.000 0.000 +0.03846 0.238 14.510 80.250 4.60600e+07 3.59e+07 4.01400e+06 1.11300e+09 0.000 3.258 2.748 0.000 0.000 0.000 0.007 0.000 0.005 +0.11538 0.180 13.030 80.090 3.12400e+07 4.63e+07 3.11900e+06 1.03100e+09 0.000 2.299 5.245 0.000 0.000 0.013 0.050 0.013 0.021 +0.20000 0.221 11.250 70.100 1.93700e+07 3.48e+07 2.06100e+06 8.84700e+08 0.000 1.439 4.270 0.000 0.000 0.017 0.052 0.017 0.020 +0.27692 0.258 9.630 59.580 1.19300e+07 2.46e+07 1.39700e+06 7.32300e+08 0.000 0.902 3.236 0.000 0.000 0.016 0.053 0.017 0.021 +0.43846 0.337 6.230 42.690 4.20400e+06 1.17e+07 5.90800e+05 4.99500e+08 0.000 0.332 1.701 0.000 0.000 0.009 0.052 0.010 0.021 +0.61538 0.386 3.590 32.480 1.34000e+06 6.08e+06 2.18300e+05 3.71100e+08 0.000 0.110 0.918 0.000 0.000 0.008 0.048 0.008 0.020 +0.84615 0.418 1.080 22.520 2.57400e+05 2.22e+06 5.04500e+04 2.53900e+08 0.000 0.023 0.349 0.000 0.000 0.006 0.038 0.006 0.016 +0.96923 0.420 0.220 14.810 1.16300e+05 1.08e+06 2.42100e+04 1.74000e+08 0.000 0.009 0.155 0.000 0.000 0.005 0.030 0.005 0.015 +1.00000 0.420 0.000 14.090 9.03200e+04 9.61e+05 1.88300e+04 1.73300e+08 0.000 0.007 0.130 0.000 0.000 0.004 0.029 0.004 0.015 +---------------------- BLADE MODE SHAPES --------------------------------------- +0.226 BldFl1Sh(2) - Flap mode 1, coeff of x^2 +0.574 BldFl1Sh(3) - , coeff of x^3 +-1.10 BldFl1Sh(4) - , coeff of x^4 +3.015 BldFl1Sh(5) - , coeff of x^5 +-1.71 BldFl1Sh(6) - , coeff of x^6 +-2.66 BldFl2Sh(2) - Flap mode 2, coeff of x^2 +14.29 BldFl2Sh(3) - , coeff of x^3 +-46.2 BldFl2Sh(4) - , coeff of x^4 +58.30 BldFl2Sh(5) - , coeff of x^5 +-22.6 BldFl2Sh(6) - , coeff of x^6 +1.164 BldEdgSh(2) - Edge mode 1, coeff of x^2 +-2.13 BldEdgSh(3) - , coeff of x^3 +5.373 BldEdgSh(4) - , coeff of x^4 +-4.84 BldEdgSh(5) - , coeff of x^5 +1.435 BldEdgSh(6) - , coeff of x^6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat new file mode 100644 index 0000000000..5adcfabfaf --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat @@ -0,0 +1,52 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline tower input properties for the OC3-Hywind spar-buoy. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 4.6670000E+03 6.0390300E+11 6.0390300E+11 +1.0000000E-01 4.3452800E+03 5.1764400E+11 5.1764400E+11 +2.0000000E-01 4.0347600E+03 4.4092500E+11 4.4092500E+11 +3.0000000E-01 3.7354400E+03 3.7302200E+11 3.7302200E+11 +4.0000000E-01 3.4473200E+03 3.1323600E+11 3.1323600E+11 +5.0000000E-01 3.1704000E+03 2.6089700E+11 2.6089700E+11 +6.0000000E-01 2.9046900E+03 2.1536500E+11 2.1536500E+11 +7.0000000E-01 2.6501800E+03 1.7602800E+11 1.7602800E+11 +8.0000000E-01 2.4068800E+03 1.4230100E+11 1.4230100E+11 +9.0000000E-01 2.1747700E+03 1.1363000E+11 1.1363000E+11 +1.0000000E+00 1.9538700E+03 8.9488000E+10 8.9488000E+10 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.8689 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 0.2205 TwFAM1Sh(3) - , coefficient of x^3 term + -0.0908 TwFAM1Sh(4) - , coefficient of x^4 term + 0.1167 TwFAM1Sh(5) - , coefficient of x^5 term + -0.1154 TwFAM1Sh(6) - , coefficient of x^6 term + 42.5859 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -18.6419 TwFAM2Sh(3) - , coefficient of x^3 term + -20.357 TwFAM2Sh(4) - , coefficient of x^4 term + -23.2686 TwFAM2Sh(5) - , coefficient of x^5 term + 20.6816 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 0.834 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + 0.2216 TwSSM1Sh(3) - , coefficient of x^3 term + -0.0571 TwSSM1Sh(4) - , coefficient of x^4 term + 0.0934 TwSSM1Sh(5) - , coefficient of x^5 term + -0.0918 TwSSM1Sh(6) - , coefficient of x^6 term + 60.2285 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + -27.5868 TwSSM2Sh(3) - , coefficient of x^3 term + -30.3887 TwSSM2Sh(4) - , coefficient of x^4 term + -33.6738 TwSSM2Sh(5) - , coefficient of x^5 term + 32.4208 TwSSM2Sh(6) - , coefficient of x^6 term diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat new file mode 100644 index 0000000000..a968471d85 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat @@ -0,0 +1,52 @@ +-------------------------------------------------------------------------------- +---------------------- FAST TOWER FILE ----------------------------------------- +SNL SWiFT Tower Input File created on 08-May-2014 +---------------------- TOWER PARAMETERS ---------------------------------------- +9 NTwInpSt - Number of input stations to specify tower geometry +False CalcTMode - Calculate tower mode shapes internally {T: ignore mode shapes from below, F: use mode shapes from below} [CURRENTLY IGNORED] (flag) +1.5 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%%) +1.5 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%%) +1.5 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%%) +1.5 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- +1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) +1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) +1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) +1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) +1 AdjTwMa - Factor to adjust tower mass density (-) +1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) +1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- +HtFract TMassDen TwFAStif TwSSStif TwGJStif TwEAStif TwFAIner TwSSIner TwFAcgOf TwSScgOf +(-) (kg/m) (Nm^2) (Nm^2) (Nm^2) (N) (kg m) (kg m) (m) (m) +0.00000 656.400 1.04300e+10 1.04300e+10 7.98300e+09 1.46100e+10 468.60 468.60 0.000 0.000 +0.12258 495.900 7.07500e+09 7.07500e+09 5.36300e+09 1.10400e+10 317.90 317.90 0.000 0.000 +0.24516 460.500 5.66100e+09 5.66100e+09 4.29200e+09 1.02500e+10 254.40 254.40 0.000 0.000 +0.36903 426.600 4.49900e+09 4.49900e+09 3.41100e+09 9.49300e+09 202.20 202.20 0.000 0.000 +0.49419 395.800 3.59200e+09 3.59200e+09 2.72300e+09 8.80900e+09 161.40 161.40 0.000 0.000 +0.61935 364.100 2.77700e+09 2.77700e+09 2.12600e+09 8.10200e+09 124.80 124.80 0.000 0.000 +0.74613 259.500 1.80200e+09 1.80200e+09 1.36600e+09 5.77500e+09 80.96 80.96 0.000 0.000 +0.87323 242.900 1.47700e+09 1.47700e+09 1.11900e+09 5.40600e+09 66.36 66.36 0.000 0.000 +1.00000 223.500 1.14300e+09 1.14300e+09 8.75000e+08 4.97400e+09 51.36 51.36 0.000 0.000 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ +0.894474 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term +1.23308 TwFAM1Sh(3) - , coefficient of x^3 term +-2.22157 TwFAM1Sh(4) - , coefficient of x^4 term +1.59799 TwFAM1Sh(5) - , coefficient of x^5 term +-0.503972 TwFAM1Sh(6) - , coefficient of x^6 term +-4.17834 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term +-0.955842 TwFAM2Sh(3) - , coefficient of x^3 term +14.7676 TwFAM2Sh(4) - , coefficient of x^4 term +-8.63886 TwFAM2Sh(5) - , coefficient of x^5 term +0.00543437 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- +0.894474 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term +1.23308 TwSSM1Sh(3) - , coefficient of x^3 term +-2.22157 TwSSM1Sh(4) - , coefficient of x^4 term +1.59799 TwSSM1Sh(5) - , coefficient of x^5 term +-0.503972 TwSSM1Sh(6) - , coefficient of x^6 term +-4.17834 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term +-0.955842 TwSSM2Sh(3) - , coefficient of x^3 term +14.7676 TwSSM2Sh(4) - , coefficient of x^4 term +-8.63886 TwSSM2Sh(5) - , coefficient of x^5 term +0.00543437 TwSSM2Sh(6) - , coefficient of x^6 term diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat new file mode 100644 index 0000000000..7dc9aea127 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat @@ -0,0 +1,31 @@ +!Comment +!Comment Flex 5 Format +!Dimension: 3 +!Time increment in simulation: 0.05 +!Total simulation time in file: 0.2 + +!Mass Matrix +!Dimension: 3 + 9.62349663e+05 5.07244708e-11 -4.23103689e-11 + 5.02697235e-11 9.62255787e+05 -3.00720954e-10 + -4.32198636e-11 -3.00720954e-10 9.38302373e+05 + +!Stiffness Matrix +!Dimension: 3 + 8.43408083e+07 1.70093408e+00 -2.98665579e-01 + 1.70093407e+00 8.43407974e+07 -3.47132372e-01 + -2.98666294e-01 -3.47133325e-01 1.96653266e+09 + +!Damping Matrix +!Dimension: 3 + 1.54140226e+05 1.03756979e-03 -1.82186007e-04 + 1.03756979e-03 1.54130201e+05 -2.11750779e-04 + -1.82186444e-04 -2.11751361e-04 1.29971117e+06 + +!Loading and Wave Elevation +!Dimension: 1 time column - 3 force columns + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 5.00000000e-02 9.65000686e+01 6.75167835e+01 6.75167835e+01 + 1.00000000e-01 3.98574430e+02 2.59332684e+02 2.59332684e+02 + 1.50000000e-01 9.20902919e+02 5.57660161e+02 5.57660161e+02 + 2.00000000e-01 1.66074968e+03 9.60831149e+02 9.60831149e+02 \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat new file mode 100644 index 0000000000..653bc93502 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat @@ -0,0 +1,149 @@ +------- HydroDyn v2.03.* Input File -------------------------------------------- +NREL 5.0 MW offshore baseline floating platform HydroDyn input properties for the OC3 Hywind. +False Echo - Echo the input file data (flag) +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + 1025 WtrDens - Water density (kg/m^3) + 320 WtrDpth - Water depth (meters) + 0 MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] +---------------------- WAVES --------------------------------------------------- + 0 WaveMod - Incident wave kinematics model {0: none=still water, 1: regular (periodic), 1P#: regular with user-specified phase, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: White noise spectrum (irregular), 4: user-defined spectrum from routine UserWaveSpctrm (irregular), 5: Externally generated wave-elevation time series, 6: Externally generated full wave-kinematics time series [option 6 is invalid for PotMod/=0]} (switch) + 0 WaveStMod - Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} (switch) [unused when WaveMod=0 or when PotMod/=0] + 600 WaveTMax - Analysis time for incident wave calculations (sec) [unused when WaveMod=0; determines WaveDOmega=2Pi/WaveTMax in the IFFT] + 0.25 WaveDT - Time step for incident wave calculations (sec) [unused when WaveMod=0; 0.1<=WaveDT<=1.0 recommended; determines WaveOmegaMax=Pi/WaveDT in the IFFT] + 5 WaveHs - Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3] + 12.4 WaveTp - Peak-spectral period of incident waves (sec) [used only when WaveMod=1 or 2] +"DEFAULT" WavePkShp - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz] + 0 WvLowCOff - Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] + 500 WvHiCOff - High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] + 0 WaveDir - Incident wave propagation heading direction (degrees) [unused when WaveMod=0 or 6] + 0 WaveDirMod - Directional spreading function {0: none, 1: COS2S} (-) [only used when WaveMod=2,3, or 4] + 1 WaveDirSpread - Wave direction spreading coefficient ( > 0 ) (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1] + 1 WaveNDir - Number of wave directions (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1; odd number only] + 90 WaveDirRange - Range of wave directions (full range: WaveDir +/- 1/2*WaveDirRange) (degrees) [only used when WaveMod=2,3,or 4 and WaveDirMod=1] + 123456789 WaveSeed(1) - First random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] + 1011121314 WaveSeed(2) - Second random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] +TRUE WaveNDAmp - Flag for normally distributed amplitudes (flag) [only used when WaveMod=2, 3, or 4] +"" WvKinFile - Root name of externally generated wave data file(s) (quoted string) [used only when WaveMod=5 or 6] + 1 NWaveElev - Number of points where the incident wave elevations can be computed (-) [maximum of 9 output locations] + 0 WaveElevxi - List of xi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] + 0 WaveElevyi - List of yi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] +---------------------- 2ND-ORDER WAVES ----------------------------------------- [unused with WaveMod=0 or 6] +FALSE WvDiffQTF - Full difference-frequency 2nd-order wave kinematics (flag) +FALSE WvSumQTF - Full summation-frequency 2nd-order wave kinematics (flag) + 0 WvLowCOffD - Low frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] + 3.5 WvHiCOffD - High frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] + 0.1 WvLowCOffS - Low frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] + 3.5 WvHiCOffS - High frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] +---------------------- CURRENT ------------------------------------------------- [unused with WaveMod=6] + 0 CurrMod - Current profile model {0: none=no current, 1: standard, 2: user-defined from routine UserCurrent} (switch) + 0 CurrSSV0 - Sub-surface current velocity at still water level (m/s) [used only when CurrMod=1] +"DEFAULT" CurrSSDir - Sub-surface current heading direction (degrees) or DEFAULT (string) [used only when CurrMod=1] + 20 CurrNSRef - Near-surface current reference depth (meters) [used only when CurrMod=1] + 0 CurrNSV0 - Near-surface current velocity at still water level (m/s) [used only when CurrMod=1] + 0 CurrNSDir - Near-surface current heading direction (degrees) [used only when CurrMod=1] + 0 CurrDIV - Depth-independent current velocity (m/s) [used only when CurrMod=1] + 0 CurrDIDir - Depth-independent current heading direction (degrees) [used only when CurrMod=1] +---------------------- FLOATING PLATFORM --------------------------------------- [unused with WaveMod=6] + 1 PotMod - Potential-flow model {0: none=no potential flow, 1: frequency-to-time-domain transforms based on WAMIT output, 2: fluid-impulse theory (FIT)} (switch) +"HydroData/Spar" PotFile - Root name of potential-flow model data; WAMIT output files containing the linear, nondimensionalized, hydrostatic restoring matrix (.hst), frequency-dependent hydrodynamic added mass matrix and damping matrix (.1), and frequency- and direction-dependent wave excitation force vector per unit wave amplitude (.3) (quoted string) [MAKE SURE THE FREQUENCIES INHERENT IN THESE WAMIT FILES SPAN THE PHYSICALLY-SIGNIFICANT RANGE OF FREQUENCIES FOR THE GIVEN PLATFORM; THEY MUST CONTAIN THE ZERO- AND INFINITE-FREQUENCY LIMITS!] + 1 WAMITULEN - Characteristic body length scale used to redimensionalize WAMIT output (meters) [only used when PotMod=1] + 8029.21 PtfmVol0 - Displaced volume of water when the platform is in its undisplaced position (m^3) [only used when PotMod=1; USE THE SAME VALUE COMPUTED BY WAMIT AS OUTPUT IN THE .OUT FILE!] + 0 PtfmCOBxt - The xt offset of the center of buoyancy (COB) from the platform reference point (meters) [only used when PotMod=1] + 0 PtfmCOByt - The yt offset of the center of buoyancy (COB) from the platform reference point (meters) [only used when PotMod=1] + 1 RdtnMod - Radiation memory-effect model {0: no memory-effect calculation, 1: convolution, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ss INPUT FILE] + 60 RdtnTMax - Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1; determines RdtnDOmega=Pi/RdtnTMax in the cosine transform; MAKE SURE THIS IS LONG ENOUGH FOR THE RADIATION IMPULSE RESPONSE FUNCTIONS TO DECAY TO NEAR-ZERO FOR THE GIVEN PLATFORM!] + 0.0125 RdtnDT - Time step for wave radiation kernel calculations (sec) [only used when PotMod=1; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform] +---------------------- 2ND-ORDER FLOATING PLATFORM FORCES ---------------------- [unused with WaveMod=0 or 6, or PotMod=0 or 2] + 0 MnDrift - Mean-drift 2nd-order forces computed {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] + 0 NewmanApp - Mean- and slow-drift 2nd-order forces computed with Newman's approximation {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. Used only when WaveDirMod=0] + 0 DiffQTF - Full difference-frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] + 0 SumQTF - Full summation -frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} +---------------------- FLOATING PLATFORM FORCE FLAGS -------------------------- [unused with WaveMod=6] +True PtfmSgF - Platform horizontal surge translation force (flag) or DEFAULT +True PtfmSwF - Platform horizontal sway translation force (flag) or DEFAULT +True PtfmHvF - Platform vertical heave translation force (flag) or DEFAULT +True PtfmRF - Platform roll tilt rotation force (flag) or DEFAULT +True PtfmPF - Platform pitch tilt rotation force (flag) or DEFAULT +True PtfmYF - Platform yaw rotation force (flag) or DEFAULT +---------------------- PLATFORM ADDITIONAL STIFFNESS AND DAMPING -------------- + 0 0 0 0 0 0 AddF0 - Additional preload (N, N-m) + 0 0 0 0 0 0 AddCLin - Additional linear stiffness (N/m, N/rad, N-m/m, N-m/rad) + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 98340000 + 100000 0 0 0 0 0 AddBLin - Additional linear damping(N/(m/s), N/(rad/s), N-m/(m/s), N-m/(rad/s)) + 0 100000 0 0 0 0 + 0 0 130000 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 13000000 + 0 0 0 0 0 0 AddBQuad - Additional quadratic drag(N/(m/s)^2, N/(rad/s)^2, N-m(m/s)^2, N-m/(rad/s)^2) + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 +---------------------- AXIAL COEFFICIENTS -------------------------------------- + 1 NAxCoef - Number of axial coefficients (-) +AxCoefID AxCd AxCa AxCp + (-) (-) (-) (-) + 1 0.00 0.00 1.00 +---------------------- MEMBER JOINTS ------------------------------------------- + 4 NJoints - Number of joints (-) [must be exactly 0 or at least 2] +JointID Jointxi Jointyi Jointzi JointAxID JointOvrlp [JointOvrlp= 0: do nothing at joint, 1: eliminate overlaps by calculating super member] + (-) (m) (m) (m) (-) (switch) + 1 0.00000 0.00000 -120.00000 1 0 + 2 0.00000 0.00000 -12.00000 1 0 + 3 0.00000 0.00000 -4.00000 1 0 + 4 0.00000 0.00000 10.00000 1 0 +---------------------- MEMBER CROSS-SECTION PROPERTIES ------------------------- + 2 NPropSets - Number of member property sets (-) +PropSetID PropD PropThck + (-) (m) (m) + 1 9.40000 0.00010 + 2 6.50000 0.00010 +---------------------- SIMPLE HYDRODYNAMIC COEFFICIENTS (model 1) -------------- + SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) + 0.60 0.00 0.00 0.00 1.00 1.00 1.00 1.00 1.00 1.00 +---------------------- DEPTH-BASED HYDRODYNAMIC COEFFICIENTS (model 2) --------- + 0 NCoefDpth - Number of depth-dependent coefficients (-) +Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG +(m) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +---------------------- MEMBER-BASED HYDRODYNAMIC COEFFICIENTS (model 3) -------- + 0 NCoefMembers - Number of member-based coefficients (-) +MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +-------------------- MEMBERS ------------------------------------------------- + 3 NMembers - Number of members (-) +MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod PropPot [MCoefMod=1: use simple coeff table, 2: use depth-based coeff table, 3: use member-based coeff table] [ PropPot/=0 if member is modeled with potential-flow theory] + (-) (-) (-) (-) (-) (m) (switch) (flag) + 1 1 2 1 1 0.5000 1 TRUE + 2 2 3 1 2 0.5000 1 TRUE + 3 3 4 2 2 0.5000 1 TRUE +---------------------- FILLED MEMBERS ------------------------------------------ + 0 NFillGroups - Number of filled member groups (-) [If FillDens = DEFAULT, then FillDens = WtrDens; FillFSLoc is related to MSL2SWL] +FillNumM FillMList FillFSLoc FillDens +(-) (-) (m) (kg/m^3) +---------------------- MARINE GROWTH ------------------------------------------- + 0 NMGDepths - Number of marine-growth depths specified (-) +MGDpth MGThck MGDens +(m) (m) (kg/m^3) +---------------------- MEMBER OUTPUT LIST -------------------------------------- + 0 NMOutputs - Number of member outputs (-) [must be < 10] +MemberID NOutLoc NodeLocs [NOutLoc < 10; node locations are normalized distance from the start of the member, and must be >=0 and <= 1] [unused if NMOutputs=0] + (-) (-) (-) +---------------------- JOINT OUTPUT LIST --------------------------------------- + 0 NJOutputs - Number of joint outputs [Must be < 10] + 0 JOutLst - List of JointIDs which are to be output (-)[unused if NJOutputs=0] +---------------------- OUTPUT -------------------------------------------------- +False HDSum - Output a summary file [flag] +False OutAll - Output all user-specified member and joint loads (only at each member end, not interior locations) [flag] + 2 OutSwtch - Output requested channels to: [1=Hydrodyn.out, 2=GlueCode.out, 3=both files] +"ES11.4e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] +"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] +---------------------- OUTPUT CHANNELS ----------------------------------------- +"Wave1Elev" - Wave elevation at the platform reference point (0, 0) +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat new file mode 100644 index 0000000000..b913a273b9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat @@ -0,0 +1,269 @@ +------- HydroDyn Input File ---------------------------------------------------- +NREL 5.0 MW offshore baseline floating platform HydroDyn input properties for the OC3 Hywind. +True Echo - Echo the input file data (flag) +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + default WtrDens - Water density (kg/m^3) + default WtrDpth - Water depth (meters) + default MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] +---------------------- FLOATING PLATFORM --------------------------------------- [unused with WaveMod=6] + 0 PotMod - Potential-flow model {0: none=no potential flow, 1: frequency-to-time-domain transforms based on WAMIT output, 2: fluid-impulse theory (FIT)} (switch) + 0 ExctnMod - Wave-excitation model {0: no wave-excitation calculation, 1: DFT, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ssexctn INPUT FILE] + 1 ExctnDisp - Method of computing Wave Excitation {0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0 and SeaState's WaveMod>0]} (switch) + 10 ExctnCutOff - Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [used only when PotMod=1, ExctnMod>0, and ExctnDisp=2]) [only used when PotMod=1 and ExctnMod>0 and SeaState's WaveMod>0]} (switch) + 0 RdtnMod - Radiation memory-effect model {0: no memory-effect calculation, 1: convolution, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ss INPUT FILE] + 0 RdtnTMax - Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1 and RdtnMod=1; determines RdtnDOmega=Pi/RdtnTMax in the cosine transform; MAKE SURE THIS IS LONG ENOUGH FOR THE RADIATION IMPULSE RESPONSE FUNCTIONS TO DECAY TO NEAR-ZERO FOR THE GIVEN PLATFORM!] + 0.01 RdtnDT - Time step for wave radiation kernel calculations (sec) [only used when PotMod=1 and ExctnMod>1 or RdtnMod>0; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform] + 1 NBody - Number of WAMIT bodies to be used (-) [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] + 2 NBodyMod - Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1] + "zeros" PotFile - Root name of potential-flow model data; WAMIT output files containing the linear, nondimensionalized, hydrostatic restoring matrix (.hst), frequency-dependent hydrodynamic added mass matrix and damping matrix (.1), and frequency- and direction-dependent wave excitation force vector per unit wave amplitude (.3) (quoted string) [1 to NBody if NBodyMod>1] [only used when PotMod=1 and ExctnMod>0 or RdtnMod>0] [MAKE SURE THE FREQUENCIES INHERENT IN THESE WAMIT FILES SPAN THE PHYSICALLY-SIGNIFICANT RANGE OF FREQUENCIES FOR THE GIVEN PLATFORM; THEY MUST CONTAIN THE ZERO- AND INFINITE-FREQUENCY LIMITS!] + 1 WAMITULEN - Characteristic body length scale used to redimensionalize WAMIT output (meters) [1 to NBody if NBodyMod>1] [only used when PotMod=1 and ExctnMod=1 or RdtnMod=1] + 0 PtfmRefxt - The xt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1] + 0 PtfmRefyt - The yt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1] + 0 PtfmRefzt - The zt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1. If NBodyMod=2,PtfmRefzt=0.0] + 0 PtfmRefztRot - The rotation about zt of the body reference frame(s) from xt/yt (degrees) [1 to NBody] [only used when PotMod=1] + 0 PtfmVol0 - Displaced volume of water when the body is in its undisplaced position (m^3) [1 to NBody] [only used when PotMod=1; USE THE SAME VALUE COMPUTED BY WAMIT AS OUTPUT IN THE .OUT FILE!] + 0 PtfmCOBxt - The xt offset of the center of buoyancy (COB) from (0,0) (meters) [1 to NBody] [only used when PotMod=1] + 0 PtfmCOByt - The yt offset of the center of buoyancy (COB) from (0,0) (meters) [1 to NBody] [only used when PotMod=1] +---------------------- 2ND-ORDER FLOATING PLATFORM FORCES ---------------------- [unused with WaveMod=0 or 6 or PotMod=0 or 2] + 0 MnDrift - Mean-drift 2nd-order forces computed {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. If NBody>1, MnDrift /=8] + 0 NewmanApp - Mean- and slow-drift 2nd-order forces computed with Newman's approximation {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. If NBody>1, NewmanApp/=8. Used only when WaveDirMod=0] + 0 DiffQTF - Full difference-frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] + 0 SumQTF - Full summation -frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} +---------------------- PLATFORM ADDITIONAL STIFFNESS AND DAMPING -------------- [unused with PotMod=0 or 2] + 0 AddF0 - Additional preload (N, N-m) [If NBodyMod=1, one size 6*NBody x 1 vector; if NBodyMod>1, NBody size 6 x 1 vectors] + 0 + 0 + 0 + 0 + 0 + 0 0 0 0 0 0 AddCLin - Additional linear stiffness (N/m, N/rad, N-m/m, N-m/rad) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 98340000 + 100000 0 0 0 0 0 AddBLin - Additional linear damping(N/(m/s), N/(rad/s), N-m/(m/s), N-m/(rad/s)) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] + 0 100000 0 0 0 0 + 0 0 130000 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 13000000 + 0 0 0 0 0 0 AddBQuad - Additional quadratic drag(N/(m/s)^2, N/(rad/s)^2, N-m(m/s)^2, N-m/(rad/s)^2) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 +---------------------- STRIP THEORY OPTIONS -------------------------------------- + 0 WaveDisp - Method of computing Wave Kinematics {0: use undisplaced position, 1: use displaced position) } (switch) + 0 AMMod - Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 2: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState] +---------------------- AXIAL COEFFICIENTS -------------------------------------- + 2 NAxCoef - Number of axial coefficients (-) +AxCoefID AxCd AxCa AxCp AxFDMod AxVnCOff AxFDLoFSc + (-) (-) (-) (-) (-) (-) (-) + 1 0.00 0.00 0.00 0 0.00 1.00 + 2 0.60 0.00 1.00 0 0.00 1.00 +---------------------- MEMBER JOINTS ------------------------------------------- + 55 NJoints - Number of joints (-) [must be exactly 0 or at least 2] +JointID Jointxi Jointyi Jointzi JointAxID JointOvrlp [JointOvrlp= 0: do nothing at joint, 1: eliminate overlaps by calculating super member] + (-) (m) (m) (m) (-) (switch) + 101 0.0000000 0.000000 16.00000 1 0 + 102 0.0000000 0.000000 14.87000 1 0 + 103 0.0000000 0.000000 -14.03000 1 0 + 104 0.0000000 0.000000 -14.83000 2 0 + 211 2.7600000 0.000000 -13.97000 1 0 + 212 33.3000000 0.000000 -13.97000 1 0 + 213 36.0950000 0.000000 -13.97000 1 0 + 221 -1.3800000 -2.390000 -13.97000 1 0 + 222 -16.6500000 -28.838420 -13.97000 1 0 + 223 -18.0475000 -31.258960 -13.97000 1 0 + 231 -1.3800000 2.390000 -13.97000 1 0 + 232 -16.6500000 28.838420 -13.97000 1 0 + 233 -18.0475000 31.258960 -13.97000 1 0 + 311 3.1700000 0.000000 13.98000 1 0 + 312 4.2777890 0.000000 13.01372 1 0 + 313 30.9250100 0.000000 -10.22968 1 0 + 314 32.0328000 0.000000 -11.19596 1 0 + 321 -1.5850000 -2.745000 13.98000 1 0 + 322 -2.1388944 -3.704373 13.01372 1 0 + 323 -15.4625000 -26.781540 -10.22968 1 0 + 324 -16.0164000 -27.740910 -11.19596 1 0 + 331 -1.5850000 2.745000 13.98000 1 0 + 332 -2.1388944 3.704373 13.01372 1 0 + 333 -15.4625000 26.781540 -10.22968 1 0 + 334 -16.0164000 27.740910 -11.19596 1 0 + 411 32.3960000 -2.410000 -13.97000 1 0 + 412 27.7800800 -5.075000 -13.97000 1 0 + 413 -9.48585500 -26.590500 -13.97000 1 0 + 414 -14.10090000 -29.255000 -13.97000 1 0 + 421 -18.28512000 -26.850530 -13.97000 1 0 + 422 -18.28512000 -21.520530 -13.97000 1 0 + 423 -18.28512000 21.510470 -13.97000 1 0 + 424 -18.28512000 26.839470 -13.97000 1 0 + 431 -14.11088000 29.260530 -13.97000 1 0 + 432 -9.49496300 26.595530 -13.97000 1 0 + 433 27.77098000 5.080029 -13.97000 1 0 + 434 32.38603000 2.415529 -13.97000 1 0 + 511 20.50000000 33.492000 -61.46800 1 0 + 512 20.50000000 25.417000 -61.46800 1 0 + 513 20.50000000 18.721000 -61.46800 1 0 + 514 20.50000000 -18.719000 -61.46800 1 0 + 515 20.50000000 -25.419000 -61.46800 1 0 + 516 20.50000000 -33.489000 -61.46800 1 0 + 521 18.76795000 -34.489000 -61.46800 1 0 + 522 11.77479000 -30.451500 -61.46800 1 0 + 523 5.97588800 -27.103500 -61.46800 1 0 + 524 -26.44810000 -8.383500 -61.46800 1 0 + 525 -32.25047000 -5.033500 -61.46800 1 0 + 526 -39.23930000 -0.998500 -61.46800 1 0 + 531 -39.23930000 1.001500 -61.46800 1 0 + 532 -32.24614000 5.039000 -61.46800 1 0 + 533 -26.44724000 8.387000 -61.46800 1 0 + 534 5.97675400 27.107000 -61.46800 1 0 + 535 11.77912000 30.457000 -61.46800 1 0 + 536 18.76795000 34.492000 -61.46800 1 0 +---------------------- MEMBER CROSS-SECTION PROPERTIES ------------------------- + 12 NPropSets - Number of member property sets (-) +PropSetID PropD PropThck + (-) (m) (m) + 1 4.3 0.06000 + 2 3.462 0.02200 + 3 0.3462 0.00220 + 4 2.125 0.02500 + 5 2.16 0.02000 + 6 2.2 0.03000 + 7 4 0.02200 + 8 2 0.10000 + 9 4.1 0.02800 + 10 4.1 0.02800 + 11 4.1 0.02800 + 13 0.10762 0.05381 +---------------------- SIMPLE HYDRODYNAMIC COEFFICIENTS (model 1) -------------- + SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCd SimplAxCdMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) + 0.60 0.60 0.00 0.00 1.00 1.00 0.60 0.60 0.00 0.00 1.00 1.00 +---------------------- DEPTH-BASED HYDRODYNAMIC COEFFICIENTS (model 2) --------- + 0 NCoefDpth - Number of depth-dependent coefficients (-) +Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCd DpthAxCdMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG +(m) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +---------------------- MEMBER-BASED HYDRODYNAMIC COEFFICIENTS (model 3) -------- + 0 NCoefMembers - Number of member-based coefficients (-) +MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCd1 MemberAxCd2 MemberAxCdMG1 MemberAxCdMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +-------------------- MEMBERS ------------------------------------------------- + 48 NMembers - Number of members (-) +MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod PropPot [MCoefMod=1: use simple coeff table, 2: use depth-based coeff table, 3: use member-based coeff table] [ PropPot/=0 if member is modeled with potential-flow theory] + (-) (-) (-) (-) (-) (m) (switch) (flag) R. Bergua comments: Dummy beams removed from the hydro. It is supposed that those beams are underneath other beams. + 1 101 102 1 1 5 1 FALSE + 2 102 103 1 1 1 1 FALSE + 3 103 104 1 1 5 1 FALSE + 4 211 212 2 2 5 1 FALSE + 5 212 213 2 3 5 1 FALSE + 6 221 222 2 2 5 1 FALSE + 7 222 223 2 3 5 1 FALSE + 8 231 232 2 2 5 1 FALSE + 9 232 233 2 3 5 1 FALSE + 10 311 312 4 5 5 1 FALSE + 11 312 313 5 5 1 1 FALSE + 12 313 314 5 4 5 1 FALSE + 13 321 322 4 5 5 1 FALSE + 14 322 323 5 5 1 1 FALSE + 15 323 324 5 4 5 1 FALSE + 16 331 332 4 5 5 1 FALSE + 17 332 333 5 5 1 1 FALSE + 18 333 334 5 4 5 1 FALSE + 19 411 412 6 7 5 1 FALSE + 20 412 413 7 7 5 1 FALSE + 21 413 414 7 6 5 1 FALSE + 22 421 422 6 7 5 1 FALSE + 23 422 423 7 7 5 1 FALSE + 24 423 424 7 6 5 1 FALSE + 25 431 432 6 7 5 1 FALSE + 26 432 433 7 7 5 1 FALSE + 27 433 434 7 6 5 1 FALSE + 28 511 512 8 9 5 1 FALSE + 29 512 513 10 10 5 1 FALSE + 30 513 514 11 11 5 1 FALSE + 31 514 515 10 10 5 1 FALSE + 32 515 516 9 8 5 1 FALSE + 33 521 522 8 9 5 1 FALSE + 34 522 523 10 10 5 1 FALSE + 35 523 524 11 11 5 1 FALSE + 36 524 525 10 10 5 1 FALSE + 37 525 526 9 8 5 1 FALSE + 38 531 532 8 9 5 1 FALSE + 39 532 533 10 10 5 1 FALSE + 40 533 534 11 11 5 1 FALSE + 41 534 535 10 10 5 1 FALSE + 42 535 536 9 8 5 1 FALSE + 61 213 511 13 13 5 1 FALSE + 62 213 516 13 13 5 1 FALSE + 63 223 521 13 13 5 1 FALSE + 64 223 526 13 13 5 1 FALSE + 65 233 531 13 13 5 1 FALSE + 66 233 536 13 13 5 1 FALSE +---------------------- FILLED MEMBERS ------------------------------------------ + 0 NFillGroups - Number of filled member groups (-) [If FillDens = DEFAULT, then FillDens = WtrDens; FillFSLoc is related to MSL2SWL] +FillNumM FillMList FillFSLoc FillDens +(-) (-) (m) (kg/m^3) +---------------------- MARINE GROWTH ------------------------------------------- + 0 NMGDepths - Number of marine-growth depths specified (-) +MGDpth MGThck MGDens +(m) (m) (kg/m^3) +---------------------- MEMBER OUTPUT LIST -------------------------------------- + 0 NMOutputs - Number of member outputs (-) [must be < 10] +MemberID NOutLoc NodeLocs [NOutLoc < 10; node locations are normalized distance from the start of the member, and must be >=0 and <= 1] [unused if NMOutputs=0] + (-) (-) (-) +---------------------- JOINT OUTPUT LIST --------------------------------------- + 0 NJOutputs - Number of joint outputs [Must be < 10] + 0 JOutLst - List of JointIDs which are to be output (-)[unused if NJOutputs=0] +---------------------- OUTPUT -------------------------------------------------- +False HDSum - Output a summary file [flag] +False OutAll - Output all user-specified member and joint loads (only at each member end, not interior locations) [flag] + 2 OutSwtch - Output requested channels to: [1=Hydrodyn.out, 2=GlueCode.out, 3=both files] +"ES11.4e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] +"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] +---------------------- OUTPUT CHANNELS ----------------------------------------- +HydroFxi +HydroFyi +HydroFzi +HydroMxi +HydroMyi +HydroMzi +B1Surge +B1Sway +B1Heave +B1Roll +B1Pitch +B1Yaw +B1TVxi +B1TVyi +B1TVzi +B1RVxi +B1RVyi +B1RVzi +B1TAxi +B1TAyi +B1TAzi +B1RAxi +B1RAyi +B1RAzi +B1WvsFxi +B1WvsFyi +B1WvsFzi +B1WvsMxi +B1WvsMyi +B1WvsMzi +B1HDSFxi +B1HDSFyi +B1HDSFzi +B1HDSMxi +B1HDSMyi +B1HDSMzi +B1RdtFxi +B1RdtFyi +B1RdtFzi +B1RdtMxi +B1RdtMyi +B1RdtMzi +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat new file mode 100644 index 0000000000..d53f29602b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat @@ -0,0 +1,96 @@ +------- SeaState Input File ---------------------------------------------------- +Updated HydroDyn input file for the TCF project. Full scale model to verify OpenFAST against OrcaFlex for the TetraSpar project. +False Echo - Echo the input file data (flag) +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + default WtrDens - Water density (kg/m^3) + default WtrDpth - Water depth (meters) + default MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] +---------------------- SPATIAL DISCRETIZATION --------------------------------------------------- + 30 X_HalfWidth - Half-width of the domain in the X direction (m) [>0, NOTE: X[nX] = nX*dX, where nX = {-NX+1,-NX+2,…,NX-1} and dX = X_HalfWidth/(NX-1)] + 30 Y_HalfWidth - Half-width of the domain in the Y direction (m) [>0, NOTE: Y[nY] = nY*dY, where nY = {-NY+1,-NY+2,…,NY-1} and dY = Y_HalfWidth/(NY-1)] + default Z_Depth - Depth of the domain the Z direction (m) relative to SWL [0 < Z_Depth <= WtrDpth+MSL2SWL; "default": Z_Depth = WtrDpth+MSL2SWL; Z[nZ] = ( COS( nZ*dthetaZ ) – 1 )*Z_Depth, where nZ = {0,1,…NZ-1} and dthetaZ = pi/( 2*(NZ-1) )] + 3 NX - Number of nodes in half of the X-direction domain (-) [>=2] + 3 NY - Number of nodes in half of the Y-direction domain (-) [>=2] + 40 NZ - Number of nodes in the Z direction (-) [>=2] +---------------------- WAVES --------------------------------------------------- + 0 WaveMod - Incident wave kinematics model {0: none=still water, 1: regular (periodic), 1P#: regular with user-specified phase, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: White noise spectrum (irregular), 4: user-defined spectrum from routine UserWaveSpctrm (irregular), 5: Externally generated wave-elevation time series, 6: Externally generated full wave-kinematics time series [option 6 is invalid for PotMod/=0]} (switch) + 0 WaveStMod - Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} (switch) [unused when WaveMod=0 or when PotMod/=0] + 20000 WaveTMax - Analysis time for incident wave calculations (sec) [unused when WaveMod=0; determines WaveDOmega=2Pi/WaveTMax in the IFFT] + 0.2 WaveDT - Time step for incident wave calculations (sec) [unused when WaveMod=0; 0.1<=WaveDT<=1.0 recommended; determines WaveOmegaMax=Pi/WaveDT in the IFFT] + 9.41 WaveHs - Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3] + 14.3 WaveTp - Peak-spectral period of incident waves (sec) [used only when WaveMod=1 or 2] +"DEFAULT" WavePkShp - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz] + 0.15708 WvLowCOff - Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] + 3.1416 WvHiCOff - High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] + 0 WaveDir - Incident wave propagation heading direction (degrees) [unused when WaveMod=0 or 6] + 0 WaveDirMod - Directional spreading function {0: none, 1: COS2S} (-) [only used when WaveMod=2,3, or 4] + 1 WaveDirSpread - Wave direction spreading coefficient ( > 0 ) (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1] + 1 WaveNDir - Number of wave directions (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1; odd number only] + 0 WaveDirRange - Range of wave directions (full range: WaveDir +/- 1/2*WaveDirRange) (degrees) [only used when WaveMod=2,3,or 4 and WaveDirMod=1] + 123456789 WaveSeed(1) - First random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] + 1011121314 WaveSeed(2) - Second random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] +FALSE WaveNDAmp - Flag for normally distributed amplitudes (flag) [only used when WaveMod=2, 3, or 4] +"" WvKinFile - Root name of externally generated wave data file(s) (quoted string) [used only when WaveMod=5 or 6] +---------------------- 2ND-ORDER WAVES ----------------------------------------- [unused with WaveMod=0 or 6] +FALSE WvDiffQTF - Full difference-frequency 2nd-order wave kinematics (flag) +FALSE WvSumQTF - Full summation-frequency 2nd-order wave kinematics (flag) + 0 WvLowCOffD - Low frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] + 0.1 WvHiCOffD - High frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] + 0 WvLowCOffS - Low frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] + 0.1 WvHiCOffS - High frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] +---------------------- CONSTRAINED WAVES --------------------------------------- + 0 ConstWaveMod - Constrained wave model: 0=none; 1=Constrained wave with specified crest elevation, alpha; 2=Constrained wave with guaranteed peak-to-trough crest height, HCrest (flag) + 1 CrestHmax - Crest height (2*alpha for ConstWaveMod=1 or HCrest for ConstWaveMod=2), must be larger than WaveHs (m) [unused when ConstWaveMod=0] + 60 CrestTime - Time at which the crest appears (s) [unused when ConstWaveMod=0] + 0 CrestXi - X-position of the crest (m) [unused when ConstWaveMod=0] + 0 CrestYi - Y-position of the crest (m) [unused when ConstWaveMod=0] +---------------------- CURRENT ------------------------------------------------- [unused with WaveMod=6] + 0 CurrMod - Current profile model {0: none=no current, 1: standard, 2: user-defined from routine UserCurrent} (switch) + 0 CurrSSV0 - Sub-surface current velocity at still water level (m/s) [used only when CurrMod=1] +"DEFAULT" CurrSSDir - Sub-surface current heading direction (degrees) or DEFAULT (string) [used only when CurrMod=1] + 0 CurrNSRef - Near-surface current reference depth (meters) [used only when CurrMod=1] + 0 CurrNSV0 - Near-surface current velocity at still water level (m/s) [used only when CurrMod=1] + 0 CurrNSDir - Near-surface current heading direction (degrees) [used only when CurrMod=1] + 0 CurrDIV - Depth-independent current velocity (m/s) [used only when CurrMod=1] + 0 CurrDIDir - Depth-independent current heading direction (degrees) [used only when CurrMod=1] +---------------------- MacCamy-Fuchs diffraction model ------------------------- + 0 MCFD - MacCamy-Fuchs member radius (ignored if radius <= 0) [must be 0 when WaveMod 0 or 6] +---------------------- OUTPUT -------------------------------------------------- +False SeaStSum - Output a summary file [flag] + 2 OutSwtch - Output requested channels to: [1=SeaState.out, 2=GlueCode.out, 3=both files] +"ES11.4e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] +"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] + 1 NWaveElev - Number of points where the incident wave elevations can be computed (-) [maximum of 9 output locations] + 0 WaveElevxi - List of xi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] + 0 WaveElevyi - List of yi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] + 0 NWaveKin - Number of points where the wave kinematics can be output (-) [maximum of 9 output locations] + 0, WaveKinxi - List of xi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] + 0, WaveKinyi - List of yi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] + 0, WaveKinzi - List of zi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] +---------------------- OUTPUT CHANNELS ----------------------------------------- +"Wave1Elev" - Wave elevation at the platform reference point (0, 0) +"HydroFxi" - Hydro force [N] in the X direction. +"HydroFyi" - Hydro force [N] in the Y direction. +"HydroFzi" - Hydro force [N] in the vertical direction (Z). +"HydroMxi" - Hydro moment [N] in the X direction. +"HydroMyi" - Hydro moment [N] in the Y direction. +"HydroMzi" - Hydro moment [N] in the vertical direction (Z). +"PRPSurge" +"PRPSway" +"PRPHeave" +"PRPRoll" +"PRPPitch" +"PRPYaw" +"PRPTVxi" +"PRPTVyi" +"PRPTVzi" +"PRPRVxi" +"PRPRVyi" +"PRPRVzi" +"PRPTAxi" +"PRPTAyi" +"PRPTAzi" +"PRPRAxi" +"PRPRAyi" +"PRPRAzi" +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr new file mode 100644 index 0000000000..a0e93c854b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr @@ -0,0 +1,27 @@ +------- HydroDyn Driver file ------------------------------------------------- +Compatible with HydroDyn v3.00 +FALSE Echo - Echo the input file data (flag) +---------------------- ENVIRONMENTAL CONDITIONS ------------------------------- +9.80665 Gravity - Gravity (m/s^2) +1025 WtrDens - Water density (kg/m^3) +220 WtrDpth - Water depth (m) +0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- HYDRODYN ----------------------------------------------- +"./HD_NoCa.dat" HDInputFile - Primary HydroDyn input file name (quoted string) +"./hd_driver_NoCa" OutRootName - The name which prefixes all HydroDyn generated files (quoted string) +True Linearize - Flag to enable linearization +1001 NSteps - Number of time steps in the simulations (-) +0.0125 TimeInterval - TimeInterval for the simulation (sec) +---------------------- PRP INPUTS (Platform Reference Point) ------------------ +1 PRPInputsMod - Model for the PRP (principal reference point) inputs {0: all inputs are zero for every timestep, 1: steadystate inputs, 2: read inputs from a file (InputsFile)} (switch) +16 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +"OpenFAST_DisplacementTimeseries.dat" PRPInputsFile - Filename for the PRP HydroDyn input InputsMod = 2 (quoted string) +---------------------- PRP STEADY STATE INPUTS ------------------------------- +0.0 0.0 0.0 0.0 0.0 0.0 uPRPInSteady - PRP Steady-state displacements and rotations at the platform reference point (m, rads) +0.0 0.0 0.0 0.0 0.0 0.0 uDotPRPInSteady - PRP Steady-state translational and rotational velocities at the platform reference point (m/s, rads/s) +0.0 0.0 0.0 0.0 0.0 0.0 uDotDotPRPInSteady - PRP Steady-state translational and rotational accelerations at the platform reference point (m/s^2, rads/s^2) +---------------------- Waves multipoint elevation output ---------------------- +FALSE WaveElevSeriesFlag - T/F flag to calculate the wave elevation field (for movies) +5.0 5.0 WaveElevDX WaveElevDY - WaveElevSeries spacing -- WaveElevDX WaveElevDY +3 3 WaveElevNX WaveElevNY - WaveElevSeries points -- WaveElevNX WaveElevNY +END of driver input file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat new file mode 100644 index 0000000000..492e378c0b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat @@ -0,0 +1,55 @@ +------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- +Turbulent 16 m/s winds at 35m for FAST CertTest #17 +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 4 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 0.0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 34.6189 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 0 HWindSpeed - Horizontal windspeed (m/s) + 34.6189 RefHtT1 - Reference height for horizontal wind speed (m) + 0.2 PLexp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +"Wind/35m_16mps" FilenameT2 - Filename of time series data for uniform wind field. (-) + 34.6189 RefHtT2 - Reference height for horizontal wind speed (m) + 5.8 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"Wind/35m_16mps" FilenameT3 - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4] ========= +"Wind/35m_16mps" FilenameRoot - Rootname of the full-field wind file to use (.wnd, .sum) +False TowerFile - Have tower file (.twr) (flag) +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"wasp\Output\basic_5u.bin" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"wasp\Output\basic_5v.bin" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"wasp\Output\basic_5w.bin" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 34.6189 RefHtT5 - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 5 URef - Mean u-component wind speed at the reference height (m/s) + 2 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat new file mode 100644 index 0000000000..c1e9aa6ca3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat @@ -0,0 +1,64 @@ +------------------- MoorDyn v1.01.* Input File ------------------------------------ +MoorDyn input template for spar mooring with chain bottom segment and bridle attachment +FALSE Echo - echo the input file data (flag) +---------------------- LINE DICTIONARY ----------------------------------------------------- +2 NTypes - number of LineTypes +LineType Diam MassDenInAir EA cIntDamp Can Cat Cdn Cdt +(-) (m) (kg/m) (N) (Pa-s) (-) (-) (-) (-) +chain 0.02 200 400.0e6 -0.8 1.0 0.0 1.6 0.05 +synth 0.02 4.5 121.0e6 -0.8 1.0 0.0 1.6 0.05 +---------------------- POINT PROPERTIES ----------------------------------------------------- +12 NConnects - number of connections including anchors and fairleads +Node Type X Y Z M V FX FY FZ CdA Ca +(-) (-) (m) (m) (m) (kg) (m^3) (kN) (kN) (kN) (m2) () +1 Fixed 656 0.0 -600 0 0 0 0 0 0 0 +2 Connect 590 0.0 -580 0 0 0 0 0 0 0 +3 Connect 20 0.0 -40 0 0 0 0 0 0 0 +4 Fixed -328 568.112 -600 0 0 0 0 0 0 0 +5 Connect -295 510.9549 -580 0 0 0 0 0 0 0 +6 Connect -10 17.3205 -40 0 0 0 0 0 0 0 +7 Fixed -328 -568.1126 -600 0 0 0 0 0 0 0 +8 Connect -295 -510.9549 -580 0 0 0 0 0 0 0 +9 Connect -10 -17.3205 -40 0 0 0 0 0 0 0 +10 Vessel 4.0 -6.928 -21 0 0 0 0 0 0 0 +11 Vessel 4.0 6.928 -21 0 0 0 0 0 0 0 +12 Vessel -8.0 0.0 -21 0 0 0 0 0 0 0 +---------------------- LINE PROPERTIES ----------------------------------------------------- +12 NLines - number of line objects +Line LineType UnstrLen NumSegs NodeAnch NodeFair Flags/Outputs +(-) (-) (m) (-) (-) (-) (-) +1 chain 80.0 10 1 2 - +2 synth 560.0 20 2 3 - +3 synth 30.0 3 3 10 - +4 synth 30.0 3 3 11 - +5 chain 80.0 10 4 5 - +6 synth 560.0 20 5 6 - +7 synth 30.0 3 6 11 - +8 synth 30.0 3 6 12 - +9 chain 80.0 10 7 8 - +10 synth 560.0 20 8 9 - +11 synth 30.0 3 9 12 - +12 synth 30.0 3 9 10 - +---------------------- SOLVER OPTIONS ---------------------------------------- +0.001 dtM - time step to use in mooring integration (s) +3e6 kbot - bottom stiffness (Pa/m) +3e5 cbot - bottom damping (Pa-s/m) +2 dtIC - time interval for analyzing convergence during IC gen (s) +600 TmaxIC - max time for ic gen (s) +10 CdScaleIC - factor by which to scale drag coefficients during dynamic relaxation (-) +0.01 threshIC - threshold for IC convergence (-) +----------------------------OUTPUTS-------------------------------------------- +FairTen1 +FairTen2 +FairTen3 +FairTen4 +FairTen5 +FairTen6 +FairTen7 +FairTen8 +FairTen9 +FairTen10 +FairTen11 +FairTen12 +END +--------------------- need this line ------------------ \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat new file mode 100644 index 0000000000..226bc4435d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat @@ -0,0 +1,39 @@ +--------------------- MoorDyn Input File ------------------------------------ +Mooring system for OC4-DeepCwind Semi +FALSE Echo - echo the input file data (flag) +----------------------- LINE TYPES ------------------------------------------ +Name Diam MassDen EA BA/-zeta EI Cd Ca CdAx CaAx +(-) (m) (kg/m) (N) (N-s/-) (-) (-) (-) (-) (-) +main 0.0766 113.35 7.536E8 -1.0 0 2.0 0.8 0.4 0.25 +---------------------- POINTS -------------------------------- +ID Attachment X Y Z M V CdA CA +(-) (-) (m) (m) (m) (kg) (m^3) (m^2) (-) +1 Fixed 418.8 725.383 -200.0 0 0 0 0 +2 Fixed -837.6 0.0 -200.0 0 0 0 0 +3 Fixed 418.8 -725.383 -200.0 0 0 0 0 +4 Vessel 20.434 35.393 -14.0 0 0 0 0 +5 Vessel -40.868 0.0 -14.0 0 0 0 0 +6 Vessel 20.434 -35.393 -14.0 0 0 0 0 +---------------------- LINES -------------------------------------- +ID LineType AttachA AttachB UnstrLen NumSegs Outputs +(-) (-) (-) (-) (m) (-) (-) +1 main 1 4 835.35 20 - +2 main 2 5 835.35 20 - +3 main 3 6 835.35 20 - +---------------------- SOLVER OPTIONS --------------------------------------- +0.001 dtM - time step to use in mooring integration (s) +3.0e6 kbot - bottom stiffness (Pa/m) +3.0e5 cbot - bottom damping (Pa-s/m) +2.0 dtIC - time interval for analyzing convergence during IC gen (s) +60.0 TmaxIC - max time for ic gen (s) +4.0 CdScaleIC - factor by which to scale drag coefficients during dynamic relaxation (-) +0.01 threshIC - threshold for IC convergence (-) +------------------------ OUTPUTS -------------------------------------------- +FairTen1 +FairTen2 +FairTen3 +AnchTen1 +AnchTen2 +AnchTen3 +END +------------------------- need this line -------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat new file mode 100644 index 0000000000..9b37f34d70 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat @@ -0,0 +1,97 @@ +------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- +FAST certification Test #16: FAST m +---------------------- SIMULATION C +False Echo - Echo i + 0.001 DT - Commun +---------------------- PITCH CONTRO + 0 PCMode - Pitch + 9999.9 TPCOn - Time t + 9999.9 TPitManS(1) - Time t + 9999.9 TPitManS(2) - Time t + 9999.9 TPitManS(3) - Time t + 2 PitManRat(1) - Pitch + 2 PitManRat(2) - Pitch + 2 PitManRat(3) - Pitch + 11.44 BlPitchF(1) - Blade + 11.44 BlPitchF(2) - Blade + 11.44 BlPitchF(3) - Blade +---------------------- GENERATOR AN + 3 VSContrl - Variab + 1 GenModel - Genera + 83 GenEff - Genera +True GenTiStr - Method +True GenTiStp - Method + 9999.9 SpdGenOn - Genera + 0 TimGenOn - Time t + 9999.9 TimGenOf - Time t +---------------------- SIMPLE VARIA + 9999.9 VS_RtGnSp - Rated + 9999.9 VS_RtTq - Rated + 9999.9 VS_Rgn2K - Genera + 9999.9 VS_SlPc - Rated +---------------------- SIMPLE INDUC + 9999.9 SIG_SlPc - Rated + 9999.9 SIG_SySp - Synchr + 9999.9 SIG_RtTq - Rated + 9999.9 SIG_PORt - Pull-o +---------------------- THEVENIN-EQU + 9999.9 TEC_Freq - Line f + 9998 TEC_NPol - Number + 9999.9 TEC_SRes - Stator + 9999.9 TEC_RRes - Rotor + 9999.9 TEC_VLL - Line-t + 9999.9 TEC_SLR - Stator + 9999.9 TEC_RLR - Rotor + 9999.9 TEC_MR - Magnet +---------------------- HIGH-SPEED S + 0 HSSBrMode - HSS br + 9999.9 THSSBrDp - Time t + 9999.9 HSSBrDT - Time f + 9999.9 HSSBrTqF - Fully +---------------------- NACELLE-YAW + 0 YCMode - Yaw co + 9999.9 TYCOn - Time t + 0 YawNeut - Neutra + 0 YawSpr - Nacell + 0 YawDamp - Nacell + 9999.9 TYawManS - Time t + 2 YawManRat - Yaw ma + 0 NacYawF - Final +---------------------- TUNED MASS D +False CompNTMD - Comput +"unused" NTMDfile - Name o +False CompTTMD - Comput +"unused" TTMDfile - Name o +---------------------- BLADED INTER +"unused" DLL_FileName - Name/l +"DISCON.IN" DLL_InFile - Name +"DISCON" DLL_ProcName - Name o +"default" DLL_DT - Commun +false DLL_Ramp - Whethe + 9999.9 BPCutoff - Cuttof + 0 NacYaw_North - Refere + 0 Ptch_Cntrl - Record + 0 Ptch_SetPnt - Record + 0 Ptch_Min - Record + 0 Ptch_Max - Record + 0 PtchRate_Min - Record + 0 PtchRate_Max - Record + 0 Gain_OM - Record + 0 GenSpd_MinOM - Record + 0 GenSpd_MaxOM - Record + 0 GenSpd_Dem - Record + 0 GenTrq_Dem - Record + 0 GenPwr_Dem - Record +---------------------- BLADED INTER + 0 DLL_NumTrq - Record + GenSpd_TLU GenTrq_TLU + (rpm) (Nm) +---------------------- OUTPUT ----- +True SumPrint - Print + 1 OutFile - Switch +True TabDelim - Use ta +"ES10.3E2" OutFmt - Format + 5 TStart - Time t + OutList - The ne +END of input file (the word "END" m +----------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat new file mode 100644 index 0000000000..9ece3bf43f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat @@ -0,0 +1,70 @@ +----------- SubDyn v1.01.x MultiMember Support Structure Input File ------------ +OC3 Monopile configuration (pile only). +---- SIMULATION CONTROL --------------------------------- +False Echo - Echo input data to ".SD.ech" (flag) +"DEFAULT" SDdeltaT - Local Integration Step. If "default", the glue-code integration step will be used. + 3 IntMethod - Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2]. +False SttcSolve - Solve dynamics about static equilibrium point +---- FEA and CRAIG-BAMPTON PARAMETERS--------------------------- + 1 FEMMod - FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B); 2=Tapered E-B (unavailable); 3= 2-node Timoshenko; 4= 2-node tapered Timoshenko (unavailable)] + 10 NDiv - Number of sub-elements per member +True CBMod - [T/F] If True perform C-B reduction, else full FEM dofs will be retained. If True, select Nmodes to retain in C-B reduced system. + 2 Nmodes - Number of internal modes to retain (ignored if CBMod=False). If Nmodes=0 --> Guyan Reduction. + 10 JDampings - Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes). +---- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)--- + 2 NJoints - Number of joints (-) +JointID JointXss JointYss JointZss [Coordinates of Member joints in SS-Coordinate System] + (-) (m) (m) (m) + 1 0.00000 0.00000 -100.00000 + 2 0.00000 0.00000 0.00000 +----- BASE REACTION JOINTS: 1/0 for Locked/Free DOF @ each Reaction Node --------------------- + 1 NReact - Number of Joints with reaction forces; be sure to remove all rigid motion DOFs of the structure (else det([K])=[0]) +RJointID RctTDXss RctTDYss RctTDZss RctRDXss RctRDYss RctRDZss SSIFile [Global Coordinate System] + (-) (flag) (flag) (flag) (flag) (flag) (flag) (-) + 1 1 1 1 1 1 1 "soil.txt" +------- INTERFACE JOINTS: 1/0 for Locked (to the TP)/Free DOF @each Interface Joint (only Locked-to-TP implemented thus far (=rigid TP)) --------- + 1 NInterf - Number of interface joints locked to the Transition Piece (TP): be sure to remove all rigid motion dofs +IJointID ItfTDXss ItfTDYss ItfTDZss ItfRDXss ItfRDYss ItfRDZss [Global Coordinate System] + (-) (flag) (flag) (flag) (flag) (flag) (flag) + 2 1 1 1 1 1 1 +------- MEMBERS -------------------------------------- + 1 NMembers - Number of frame members +MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 COSMID + (-) (-) (-) (-) (-) (-) + 1 1 2 1 1 +------- MEMBER X-SECTION PROPERTY data 1/2 [isotropic material for now: use this table for circular-tubular elements] ------------------------ + 1 NPropSets - Number of structurally unique x-sections (i.e. how many groups of X-sectional properties are utilized throughout all of the members) +PropSetID YoungE ShearG MatDens XsecD XsecT + (-) (N/m2) (N/m2) (kg/m3) (m) (m) + 1 2.10000e+11 7.93000e+10 7500.00 8.000000 0.045000 +------- MEMBER X-SECTION PROPERTY data 2/2 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below] ------------------------ + 0 NXPropSets - Number of structurally unique non-circular x-sections (if 0 the following table is ignored) +PropSetID YoungE ShearG MatDens XsecA XsecAsx XsecAsy XsecJxx XsecJyy XsecJ0 + (-) (N/m2) (N/m2) (kg/m3) (m2) (m2) (m2) (m4) (m4) (m4) +-------- MEMBER COSINE MATRICES COSM(i,j) ------------------------ + 0 NCOSMs - Number of unique cosine matrices (i.e., of unique member alignments including principal axis rotations); ignored if NXPropSets=0 or 9999 in any element below +COSMID COSM11 COSM12 COSM13 COSM21 COSM22 COSM23 COSM31 COSM32 COSM33 + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +------- JOINT ADDITIONAL CONCENTRATED MASSES-------------------------- + 0 NCmass - Number of joints with concentrated masses; Global Coordinate System +CMJointID JMass JMXX JMYY JMZZ + (-) (kg) (kg*m^2) (kg*m^2) (kg*m^2) +---------------------------- OUTPUT: SUMMARY & OUTFILE ------------------------------ +True SSSum - Output a Summary File (flag).It contains: matrices K,M and C-B reduced M_BB, M-BM, K_BB, K_MM(OMG^2), PHI_R, PHI_L. It can also contain COSMs if requested. +False OutCOSM - Output cosine matrices with the selected output member forces (flag) +False OutAll - [T/F] Output all members' end forces + 2 OutSwtch - [1/2/3] Output requested channels to: 1=.SD.out; 2=.out (generated by FAST); 3=both files. +True TabDelim - Generate a tab-delimited output in the .SD.out file + 1 OutDec - Decimation of output in the .SD.out file +"ES11.4e2" OutFmt - Output format for numerical results in the .SD.out file +"A11" OutSFmt - Output format for header strings in the .SD.out file +------------------------- MEMBER OUTPUT LIST ------------------------------------------ + 1 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 9]. +MemberID NOutCnt NodeCnt [NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well. + (-) (-) (-) + 1 1 1 +------------------------- SSOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------ +"M1N1MKxe, M1N1MKye" - The local side-to-side and fore-aft bending moments at node 1 of member 1 +"-ReactFXss, -ReactFYss, -ReactFZss" - Base reactions: fore-aft shear, side-to-side shear and vertical forces at the mudline. +"-ReactMXss, -ReactMYss, -ReactMZss" - Base reactions: side-to-side, fore-aft and yaw moments at the mudline. +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat new file mode 100644 index 0000000000..24a982b4de --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat @@ -0,0 +1,165 @@ +----------- SubDyn MultiMember Support Structure Input File ------------ +BIWF 'Jacket' SubStructure Input File. The grouted connection is simulated with an equivalent tubular beam of enhanced properties. RRD 10/15/2013 +-------------------------- SIMULATION CONTROL --------------------------------- +False Echo - Echo input data to ".SD.ech" (flag) +"DEFAULT" SDdeltaT - Local Integration Step. If "default", the glue-code integration step will be used. + 3 IntMethod - Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2]. +True SttcSolve - Solve dynamics about static equilibrium point +True GuyanLoadCorrection - Include extra moment from lever arm at interface and rotate FEM for floating. +-------------------- FEA and CRAIG-BAMPTON PARAMETERS--------------------------- + 1 FEMMod - FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B); 2=Tapered E-B (unavailable); 3= 2-node Timoshenko; 4= 2-node tapered Timoshenko (unavailable)] + 1 NDiv - Number of sub-elements per member +True CBMod - [T/F] If True perform C-B reduction, else full FEM dofs will be retained. If True, select Nmodes to retain in C-B reduced system. + 8 Nmodes - Number of internal modes to retain (ignored if CBMod=False). If Nmodes=0 --> Guyan Reduction. + 1 JDampings - Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes). + 0 GuyanDampMod - Guyan damping {0=none, 1=Rayleigh Damping, 2=user specified 6x6 matrix} + 0.000, 0.000 RayleighDamp - Mass and stiffness proportional damping coefficients (Rayleigh Damping) [only if GuyanDampMod=1] + 6 GuyanDampSize - Guyan damping matrix (6x6) [only if GuyanDampMod=2] + 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 + 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 + 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 + 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 + 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 + 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 +---- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)--- + 19 NJoints - Number of joints (-) +JointID JointXss JointYss JointZss JointType JointDirX JointDirY JointDirZ JointStiff ! Comment Columns + (-) (m) (m) (m) (-) (-) (-) (-) (Nm/rad) ! Comment unit + 43 0.00000 0.00000 23.20000 1 0.0 0.0 0.0 0.0 ! First tower node + 44 0.00000 0.00000 28.50000 1 0.0 0.0 0.0 0.0 + 45 0.00000 0.00000 30.30000 1 0.0 0.0 0.0 0.0 + 46 0.00000 0.00000 35.30000 1 0.0 0.0 0.0 0.0 + 47 0.00000 0.00000 40.30000 1 0.0 0.0 0.0 0.0 + 48 0.00000 0.00000 45.30000 1 0.0 0.0 0.0 0.0 + 49 0.00000 0.00000 49.90000 1 0.0 0.0 0.0 0.0 + 50 0.00000 0.00000 52.75000 1 0.0 0.0 0.0 0.0 + 51 0.00000 0.00000 60.82000 1 0.0 0.0 0.0 0.0 + 52 0.00000 0.00000 74.40000 1 0.0 0.0 0.0 0.0 + 53 0.00000 0.00000 77.73000 1 0.0 0.0 0.0 0.0 + 54 0.00000 0.00000 81.06000 1 0.0 0.0 0.0 0.0 + 55 0.00000 0.00000 84.39000 1 0.0 0.0 0.0 0.0 + 56 0.00000 0.00000 87.72000 1 0.0 0.0 0.0 0.0 + 57 0.00000 0.00000 91.05000 1 0.0 0.0 0.0 0.0 + 58 0.00000 0.00000 94.38000 1 0.0 0.0 0.0 0.0 + 59 0.00000 0.00000 97.71000 1 0.0 0.0 0.0 0.0 + 60 0.00000 0.00000 100.0930 1 0.0 0.0 0.0 0.0 + 61 0.00000 0.00000 102.7930 1 0.0 0.0 0.0 0.0 ! Tower top +------------------- BASE REACTION JOINTS: 1/0 for Locked/Free DOF @ each Reaction Node --------------------- + 1 NReact - Number of Joints with reaction forces; be sure to remove all rigid motion DOFs of the structure (else det([K])=[0]) +RJointID RctTDXss RctTDYss RctTDZss RctRDXss RctRDYss RctRDZss SSIfile [Global Coordinate System] ! Comment colnames + (-) (flag) (flag) (flag) (flag) (flag) (flag) (string) ! Comment units + 43 1 1 1 1 1 1 "" ! Tower top +------- INTERFACE JOINTS: 1/0 for Locked (to the TP)/Free DOF @each Interface Joint (only Locked-to-TP implemented thus far (=rigid TP)) --------- + 1 NInterf - Number of interface joints locked to the Transition Piece (TP): be sure to remove all rigid motion dofs +IJointID ItfTDXss ItfTDYss ItfTDZss ItfRDXss ItfRDYss ItfRDZss [Global Coordinate System] ! Comment + (-) (flag) (flag) (flag) (flag) (flag) (flag) ! Comment + 61 1 1 1 1 1 1 ! Tower top +----------------------------------- MEMBERS -------------------------------------- + 18 NMembers - Number of frame members +MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MType COSMID ! Column headers + (-) (-) (-) (-) (-) (-) (-) + 77 61 60 11 11 1 ! Tower top + 78 60 59 12 12 1 ! Tower top + 79 59 58 13 13 1 + 80 58 57 14 14 1 + 81 57 56 15 15 1 + 82 56 55 16 16 1 + 83 55 54 17 17 1 + 84 54 53 18 18 1 + 85 53 52 19 19 1 + 86 52 51 20 20 1 + 87 51 50 21 21 1 + 88 50 49 22 22 1 + 89 49 48 23 23 1 + 90 48 47 24 24 1 + 91 47 46 25 25 1 + 92 46 45 26 26 1 + 93 45 44 27 27 1 + 94 44 43 28 28 1 +------------------ MEMBER X-SECTION PROPERTY data 1/2 [isotropic material for now: use this table for circular-tubular elements] ------------------------ + 26 NPropSets - Number of structurally unique x-sections (i.e. how many groups of X-sectional properties are utilized throughout all of the members) +PropSetID YoungE ShearG MatDens XsecD XsecT + (-) (N/m2) (N/m2) (kg/m3) (m) (m) + 1 2.00000e+11 8.07690e+10 8000.00 0.60960 0.015875 + 2 2.00000e+11 8.07690e+10 8000.00 0.76200 0.019050 + 3 2.00000e+11 8.07690e+10 8000.00 0.91440 0.019050 + 4 2.00000e+11 8.07690e+10 8000.00 1.52400 0.063500 + 5 2.00000e+11 8.07690e+10 8000.00 1.62560 0.012700 + 6 2.00000e+11 8.07690e+10 8000.00 1.72720 0.025400 + 11 2.00000e+11 8.07690e+10 8000.00 4.09400 0.03800 ! tower + 12 2.00000e+11 8.07690e+10 8000.00 4.27000 0.02800 ! tower + 13 2.00000e+11 8.07690e+10 8000.00 4.46800 0.02400 ! tower + 14 2.00000e+11 8.07690e+10 8000.00 4.70000 0.02400 ! tower + 15 2.00000e+11 8.07690e+10 8000.00 4.93100 0.02400 ! tower + 16 2.00000e+11 8.07690e+10 8000.00 5.16200 0.02400 ! tower + 17 2.00000e+11 8.07690e+10 8000.00 5.39300 0.02400 ! tower + 18 2.00000e+11 8.07690e+10 8000.00 5.62400 0.02400 ! tower + 19 2.00000e+11 8.07690e+10 8000.00 5.85500 0.02400 ! tower + 20 2.00000e+11 8.07690e+10 8000.00 5.97100 0.02400 ! tower + 21 2.00000e+11 8.07690e+10 8000.00 5.97300 0.02500 ! tower + 22 2.00000e+11 8.07690e+10 8000.00 5.97300 0.02600 ! tower + 23 2.00000e+11 8.07690e+10 8000.00 5.98100 0.02600 ! tower + 24 2.00000e+11 8.07690e+10 8000.00 5.98200 0.02700 ! tower + 25 2.00000e+11 8.07690e+10 8000.00 5.98400 0.02800 ! tower + 26 2.00000e+11 8.07690e+10 8000.00 5.98500 0.02900 ! tower + 27 2.00000e+11 8.07690e+10 8000.00 5.98700 0.03600 ! tower + 28 2.00000e+11 8.07690e+10 8000.00 5.98700 0.03800 ! tower + 29 2.00000e+11 8.07690e+10 8000.00 5.98900 0.04200 ! tower + 30 2.00000e+12 8.07690e+10 0.00 1.72720 0.02540 ! "rigid dummy beam" +------------------ MEMBER X-SECTION PROPERTY data 2/2 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below] ------------------------ + 0 NXPropSets - Number of structurally unique non-circular x-sections (if 0 the following table is ignored) +PropSetID YoungE ShearG MatDens XsecA XsecAsx XsecAsy XsecJxx XsecJyy XsecJ0 + (-) (N/m2) (N/m2) (kg/m3) (m2) (m2) (m2) (m4) (m4) (m4) +-------------------------- CABLE PROPERTIES ------------------------------------- + 0 NCablePropSets - Number of cable cable properties +PropSetID EA MatDens T0 + (-) (N) (kg/m) (N) +----------------------- RIGID LINK PROPERTIES ------------------------------------ + 0 NRigidPropSets - Number of rigid link properties +PropSetID MatDens + (-) (kg/m) +---------------------- MEMBER COSINE MATRICES COSM(i,j) ------------------------ + 0 NCOSMs - Number of unique cosine matrices (i.e., of unique member alignments including principal axis rotations); ignored if NXPropSets=0 or 9999 in any element below +COSMID COSM11 COSM12 COSM13 COSM21 COSM22 COSM23 COSM31 COSM32 COSM33 + (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) +------------------------ JOINT ADDITIONAL CONCENTRATED MASSES-------------------------- + 8 NCmass - Number of joints with concentrated masses; Global Coordinate System +CMJointID JMass JMXX JMYY JMZZ JMXY JMXZ JMYZ MCGX MCGY MCGZ + (-) (kg) (kg*m^2) (kg*m^2) (kg*m^2) (kg*m^2) (kg*m^2) (kg*m^2) (m) (m) (m) + 1 5355 0 0 0 0 0 0 0 0 0 + 2 5355 0 0 0 0 0 0 0 0 0 + 3 5355 0 0 0 0 0 0 0 0 0 + 4 5355 0 0 0 0 0 0 0 0 0 + 36 5355 0 0 0 0 0 0 0 0 0 + 37 5355 0 0 0 0 0 0 0 0 0 + 38 5355 0 0 0 0 0 0 0 0 0 + 39 5355 0 0 0 0 0 0 0 0 0 +---------------------------- OUTPUT: SUMMARY & OUTFILE ------------------------------ +True SumPrint - Output a Summary File (flag).It contains: matrices K,M and C-B reduced M_BB, M-BM, K_BB, K_MM(OMG^2), PHI_R, PHI_L. It can also contain COSMs if requested. +False OutCOSM - Output cosine matrices with the selected output member forces (flag) +False OutAll - [T/F] Output all members' end forces + 2 OutSwtch - [1/2/3] Output requested channels to: 1=.SD.out; 2=.out (generated by FAST); 3=both files. +True TabDelim - Generate a tab-delimited output in the .SD.out file + 1 OutDec - Decimation of output in the .SD.out file +"ES11.4e2" OutFmt - Output format for numerical results in the .SD.out file +"A11" OutSFmt - Output format for header strings in the .SD.out file +------------------------- MEMBER OUTPUT LIST ------------------------------------------ + 8 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 9]. +MemberID NOutCnt NodeCnt [NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well. + (-) (-) (-) + 30 2 1 2 ! M1 + 31 2 1 2 ! M2 + 32 2 1 2 ! M3 + 58 2 1 2 ! M4 + 26 2 1 2 ! M5 + 27 2 1 2 ! M6 + 28 2 1 2 ! M7 + 29 2 1 2 ! M8 +------------------------- SDOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------ +"M1N1FKZe, M2N1FKZe" - Axial force in leg 2 at K1L2 and in leg 4 at K1L4 +"M3N1TDXss, M3N1TDYss, M3N1TDZss, M4N1TDXss, M4N1TDYss, M4N1TDZss" - Deflections at X2S2, X2S3: use cosdir matrix to get Out-of-plane (OOP) deflection +"M5N2TDXss, M5N2TDYss, M5N2TDZss, M6N2TDXss, M6N2TDYss, M6N2TDZss" - Deflections at X4S2, X4S3: use cosdir matrix to get OOP deflection +"M5N1FKXe,M5N1FKYe,M5N1FKZe,M6N1FKXe,M6N1FKYe,M6N1FKZe" - Forces OOP and Axial at mid brace points x,y, z >> *we will need to do some post-processing using the direction cosine matrices to get OOP forces +"M7N1FKZe, M8N1FKZe" - Axial force in leg 2 and leg 4 at mudbrace level: MudbraceL2, MudbraceL4 +"-ReactFXss, -ReactFYss, -ReactMXss, -ReactMYss, -ReactMZss, -ReactFZss" - Base reactions: fore-aft shear, side-to-side shear, side-to-side moment, fore-aft moment, yaw moment, vertical force +END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat new file mode 100644 index 0000000000..aa29daac5e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat @@ -0,0 +1,74 @@ +---------TurbSim v2.00.* Input File------------------------ +Example input file for TurbSim. +---------Runtime Options----------------------------------- +False Echo - Echo input data to .ech (flag) +2318573 RandSeed1 - First random seed (-2147483648 to 2147483647) +RANLUX RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" +False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) +False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) +False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) +False WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) +True WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) +False WrADTWR - Output tower time-series data? (Generates RootName.twr) +False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) +False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) +True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) + 0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] + +--------Turbine/Model Specifications----------------------- +13 NumGrid_Z - Vertical grid-point matrix dimension +13 NumGrid_Y - Horizontal grid-point matrix dimension +0.05 TimeStep - Time step [seconds] +600 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) +"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") +84.2876 HubHt - Hub height [m] (should be > 0.5*GridHeight) +80.00 GridHeight - Grid height [m] +80.00 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) +0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] +0 HFlowAng - Horizontal mean flow (skew) angle [degrees] + +--------Meteorological Boundary Conditions------------------- +"SMOOTH" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","TIMESR", or "NONE") +"unused" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models) +"1-Ed3" IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) +"A" IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) +"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) +default ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] +"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"USR";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") +"unused" ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-] +84.2876 RefHt - Height of the reference velocity (URef) [m] +18.2 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] +default ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) +default PLExp - Power law exponent [-] (or "default") +default Z0 - Surface roughness length [m] (or "default") + +--------Non-IEC Meteorological Boundary Conditions------------ +default Latitude - Site latitude [degrees] (or "default") +0.05 RICH_NO - Gradient Richardson number [-] +default UStar - Friction or shear velocity [m/s] (or "default") +default ZI - Mixing layer depth [m] (or "default") +default PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") +default PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") +default PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") + +--------Spatial Coherence Parameters---------------------------- +default SCMod1 - u-component coherence model ("GENERAL", "IEC", "API", "NONE", or "default") +default SCMod2 - v-component coherence model ("GENERAL", "IEC", "NONE", or "default") +default SCMod3 - w-component coherence model ("GENERAL", "IEC", "NONE", or "default") +default InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +default InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +default InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") +default CohExp - Coherence exponent for general model [-] (or "default") + +--------Coherent Turbulence Scaling Parameters------------------- +"../tests/example_files/EventData" CTEventPath - Name of the path where event data files are located +"Random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") +true Randomize - Randomize the disturbance scale and locations? (true/false) + 1.0 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) + 0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) + 0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) +30.0 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] + +==================================================== +! NOTE: Do not add or remove any lines in this file! +==================================================== \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt new file mode 100644 index 0000000000..aa31ac26b2 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! NACA 64-618 (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.990000 0.003385 +0.980000 0.006126 +0.975000 0.007447 +0.970000 0.008767 +0.965000 0.010062 +0.960000 0.011357 +0.955000 0.012639 +0.950000 0.013921 +0.945000 0.015200 +0.940000 0.016478 +0.935000 0.017757 +0.930000 0.019036 +0.925000 0.020317 +0.920000 0.021598 +0.915000 0.022881 +0.910000 0.024163 +0.905000 0.025448 +0.900000 0.026733 +0.887500 0.029951 +0.875000 0.033169 +0.862500 0.036386 +0.850000 0.039603 +0.837500 0.042804 +0.825000 0.046004 +0.812500 0.049171 +0.800000 0.052337 +0.787500 0.055452 +0.775000 0.058566 +0.762500 0.061611 +0.750000 0.064656 +0.737500 0.067615 +0.725000 0.070573 +0.712500 0.073429 +0.700000 0.076285 +0.687500 0.079029 +0.675000 0.081773 +0.662500 0.084393 +0.650000 0.087012 +0.637500 0.089490 +0.625000 0.091967 +0.612500 0.094283 +0.600000 0.096599 +0.587500 0.098743 +0.575000 0.100887 +0.562500 0.102843 +0.550000 0.104799 +0.537500 0.106549 +0.525000 0.108299 +0.512500 0.109830 +0.500000 0.111360 +0.487500 0.112649 +0.475000 0.113937 +0.462500 0.114964 +0.450000 0.115990 +0.445000 0.116320 +0.440000 0.116650 +0.435000 0.116931 +0.430000 0.117211 +0.425000 0.117439 +0.420000 0.117667 +0.415000 0.117835 +0.410000 0.118003 +0.405000 0.118104 +0.400000 0.118204 +0.395000 0.118231 +0.390000 0.118258 +0.385000 0.118213 +0.380000 0.118168 +0.375000 0.118057 +0.370000 0.117946 +0.365000 0.117777 +0.360000 0.117607 +0.355000 0.117383 +0.350000 0.117159 +0.345000 0.116881 +0.340000 0.116603 +0.335000 0.116273 +0.330000 0.115942 +0.325000 0.115562 +0.320000 0.115181 +0.315000 0.114750 +0.310000 0.114319 +0.305000 0.113838 +0.300000 0.113356 +0.295000 0.112824 +0.290000 0.112292 +0.285000 0.111710 +0.280000 0.111127 +0.275000 0.110495 +0.270000 0.109863 +0.265000 0.109180 +0.260000 0.108497 +0.255000 0.107762 +0.250000 0.107027 +0.245000 0.106241 +0.240000 0.105454 +0.235000 0.104614 +0.230000 0.103774 +0.225000 0.102880 +0.220000 0.101985 +0.215000 0.101035 +0.210000 0.100084 +0.205000 0.099076 +0.200000 0.098068 +0.195000 0.097001 +0.190000 0.095934 +0.185000 0.094805 +0.180000 0.093676 +0.175000 0.092484 +0.170000 0.091291 +0.165000 0.090032 +0.160000 0.088772 +0.155000 0.087441 +0.150000 0.086110 +0.145000 0.084704 +0.140000 0.083298 +0.135000 0.081814 +0.130000 0.080329 +0.125000 0.078759 +0.120000 0.077188 +0.115000 0.075525 +0.110000 0.073862 +0.105000 0.072098 +0.100000 0.070334 +0.097500 0.069412 +0.095000 0.068489 +0.092500 0.067537 +0.090000 0.066584 +0.087500 0.065601 +0.085000 0.064617 +0.082500 0.063600 +0.080000 0.062583 +0.077500 0.061531 +0.075000 0.060478 +0.072500 0.059388 +0.070000 0.058297 +0.067500 0.057165 +0.065000 0.056032 +0.062500 0.054854 +0.060000 0.053676 +0.057500 0.052447 +0.055000 0.051218 +0.052500 0.049933 +0.050000 0.048647 +0.047500 0.047299 +0.045000 0.045950 +0.042500 0.044530 +0.040000 0.043110 +0.037500 0.041606 +0.035000 0.040102 +0.032500 0.038501 +0.030000 0.036899 +0.027500 0.035177 +0.025000 0.033454 +0.022500 0.031574 +0.020000 0.029694 +0.018750 0.028680 +0.017500 0.027666 +0.016250 0.026589 +0.015000 0.025511 +0.013750 0.024354 +0.012500 0.023197 +0.011250 0.021936 +0.010000 0.020674 +0.009500 0.020131 +0.009000 0.019587 +0.008500 0.019017 +0.008000 0.018447 +0.007500 0.017844 +0.007000 0.017241 +0.006500 0.016598 +0.006000 0.015955 +0.005500 0.015260 +0.005000 0.014565 +0.004500 0.013801 +0.004000 0.013037 +0.003500 0.012167 +0.003000 0.011296 +0.002500 0.010262 +0.002000 0.009227 +0.001875 0.008930 +0.001750 0.008633 +0.001625 0.008315 +0.001500 0.007997 +0.001375 0.007655 +0.001250 0.007312 +0.001125 0.006934 +0.001000 0.006555 +0.000875 0.006125 +0.000750 0.005695 +0.000625 0.005184 +0.000500 0.004672 +0.000400 0.004190 +0.000350 0.003913 +0.000300 0.003636 +0.000200 0.002970 +0.000100 0.002104 +0.000050 0.001052 +0.000000 0.000000 +0.000050 -0.001046 +0.000100 -0.002092 +0.000200 -0.002954 +0.000300 -0.003613 +0.000350 -0.003891 +0.000400 -0.004169 +0.000500 -0.004658 +0.000625 -0.005178 +0.000750 -0.005698 +0.000875 -0.006135 +0.001000 -0.006572 +0.001125 -0.006956 +0.001250 -0.007340 +0.001375 -0.007684 +0.001500 -0.008027 +0.001625 -0.008341 +0.001750 -0.008654 +0.001875 -0.008943 +0.002000 -0.009231 +0.002500 -0.010204 +0.003000 -0.011176 +0.003500 -0.011953 +0.004000 -0.012729 +0.004500 -0.013380 +0.005000 -0.014030 +0.005500 -0.014595 +0.006000 -0.015160 +0.006500 -0.015667 +0.007000 -0.016174 +0.007500 -0.016636 +0.008000 -0.017098 +0.008500 -0.017526 +0.009000 -0.017953 +0.009500 -0.018352 +0.010000 -0.018750 +0.011250 -0.019644 +0.012500 -0.020537 +0.013750 -0.021322 +0.015000 -0.022107 +0.016250 -0.022812 +0.017500 -0.023517 +0.018750 -0.024160 +0.020000 -0.024803 +0.022500 -0.025948 +0.025000 -0.027092 +0.027500 -0.028097 +0.030000 -0.029102 +0.032500 -0.030003 +0.035000 -0.030904 +0.037500 -0.031725 +0.040000 -0.032546 +0.042500 -0.033304 +0.045000 -0.034061 +0.047500 -0.034767 +0.050000 -0.035472 +0.052500 -0.036132 +0.055000 -0.036792 +0.057500 -0.037414 +0.060000 -0.038035 +0.062500 -0.038622 +0.065000 -0.039209 +0.067500 -0.039766 +0.070000 -0.040322 +0.072500 -0.040852 +0.075000 -0.041381 +0.077500 -0.041885 +0.080000 -0.042389 +0.082500 -0.042870 +0.085000 -0.043350 +0.087500 -0.043809 +0.090000 -0.044268 +0.092500 -0.044707 +0.095000 -0.045145 +0.097500 -0.045566 +0.100000 -0.045987 +0.105000 -0.046782 +0.110000 -0.047576 +0.115000 -0.048313 +0.120000 -0.049050 +0.125000 -0.049734 +0.130000 -0.050417 +0.135000 -0.051053 +0.140000 -0.051688 +0.145000 -0.052278 +0.150000 -0.052868 +0.155000 -0.053418 +0.160000 -0.053967 +0.165000 -0.054478 +0.170000 -0.054988 +0.175000 -0.055461 +0.180000 -0.055934 +0.185000 -0.056373 +0.190000 -0.056811 +0.195000 -0.057216 +0.200000 -0.057621 +0.205000 -0.057993 +0.210000 -0.058365 +0.215000 -0.058705 +0.220000 -0.059045 +0.225000 -0.059355 +0.230000 -0.059664 +0.235000 -0.059944 +0.240000 -0.060224 +0.245000 -0.060474 +0.250000 -0.060723 +0.255000 -0.060943 +0.260000 -0.061163 +0.265000 -0.061354 +0.270000 -0.061545 +0.275000 -0.061708 +0.280000 -0.061871 +0.285000 -0.062004 +0.290000 -0.062137 +0.295000 -0.062240 +0.300000 -0.062343 +0.305000 -0.062417 +0.310000 -0.062490 +0.315000 -0.062534 +0.320000 -0.062577 +0.325000 -0.062590 +0.330000 -0.062602 +0.335000 -0.062583 +0.340000 -0.062563 +0.345000 -0.062512 +0.350000 -0.062460 +0.355000 -0.062374 +0.360000 -0.062287 +0.365000 -0.062164 +0.370000 -0.062040 +0.375000 -0.061878 +0.380000 -0.061716 +0.385000 -0.061509 +0.390000 -0.061301 +0.395000 -0.061040 +0.400000 -0.060778 +0.405000 -0.060458 +0.410000 -0.060138 +0.415000 -0.059763 +0.420000 -0.059388 +0.425000 -0.058966 +0.430000 -0.058544 +0.435000 -0.058083 +0.440000 -0.057622 +0.445000 -0.057127 +0.450000 -0.056632 +0.462500 -0.055265 +0.475000 -0.053897 +0.487500 -0.052374 +0.500000 -0.050850 +0.512500 -0.049195 +0.525000 -0.047539 +0.537500 -0.045777 +0.550000 -0.044014 +0.562500 -0.042165 +0.575000 -0.040316 +0.587500 -0.038401 +0.600000 -0.036486 +0.612500 -0.034526 +0.625000 -0.032565 +0.637500 -0.030575 +0.650000 -0.028585 +0.662500 -0.026594 +0.675000 -0.024603 +0.687500 -0.022632 +0.700000 -0.020660 +0.712500 -0.018728 +0.725000 -0.016795 +0.737500 -0.014922 +0.750000 -0.013048 +0.762500 -0.011260 +0.775000 -0.009472 +0.787500 -0.007797 +0.800000 -0.006122 +0.812500 -0.004594 +0.825000 -0.003065 +0.837500 -0.001721 +0.850000 -0.000376 +0.862500 0.000742 +0.875000 0.001859 +0.887500 0.002698 +0.900000 0.003536 +0.905000 0.003780 +0.910000 0.004023 +0.915000 0.004205 +0.920000 0.004387 +0.925000 0.004504 +0.930000 0.004620 +0.935000 0.004661 +0.940000 0.004702 +0.945000 0.004658 +0.950000 0.004614 +0.955000 0.004476 +0.960000 0.004338 +0.965000 0.004084 +0.970000 0.003829 +0.975000 0.003436 +0.980000 0.003042 +0.990000 0.001910 +1.000000 0.000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin new file mode 100644 index 0000000000..fbf9404acf --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin @@ -0,0 +1,113 @@ + +Linearized model: Predictions were generated on 16-Feb-2020 at 10:36:41 using OpenFAST, compiled as a 64-bit application using single precision at commit v2.2.0 + linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn + +Description from the FAST input file: FAST Certification - Test #24: NREL 5.0 MW Baseline Wind Turbine with OC3 Hywind Configuration, for use in offshore analysis + +Simulation information: + Simulation time: 100.0000 s + Rotor Speed: 1.2367 rad/s + Azimuth: 5.8684 rad + Number of continuous states: 4 + Number of discrete states: 0 + Number of constraint states: 0 + Number of inputs: 9 + Number of outputs: 16 + Jacobians included in this file? No + +Order of continuous states: + Row/Column Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 2.55136520E-01 F ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m + 2 4.29760981E+00 F ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad + 3 -2.58691749E-03 F ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s + 4 1.23670995E+00 F ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s + +Order of continuous state derivatives: + Row/Column Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 -2.58691749E-03 F First time derivative of ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s + 2 1.23670995E+00 F First time derivative of ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s + 3 7.78495288E-03 F First time derivative of ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s/s + 4 1.26017234E-03 F First time derivative of ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s/s + +Order of inputs: + Column Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 1.10000000E+01 F IfW Extended input: horizontal wind speed (steady/uniform wind), m/s + 2 0.00000000E+00 F IfW Extended input: vertical power-law shear exponent, - + 3 0.00000000E+00 F IfW Extended input: propagation direction, rad + 4 0.00000000E+00 T ED Blade 1 pitch command, rad + 5 0.00000000E+00 T ED Blade 2 pitch command, rad + 6 0.00000000E+00 T ED Blade 3 pitch command, rad + 7 0.00000000E+00 F ED Yaw moment, Nm + 8 4.00176055E+04 F ED Generator torque, Nm + 9 0.00000000E+00 F ED Extended input: collective blade-pitch command, rad + +Order of outputs: + Row Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 1.10000000E+01 F IfW Wind1VelX, (m/s) + 2 4.53171631E+03 F SrvD GenPwr, (kW) + 3 4.00176086E+01 F SrvD GenTq, (kN-m) + 4 0.00000000E+00 T ED BldPitch1, (deg) + 5 3.36234894E+02 F ED Azimuth, (deg) + 6 1.18097095E+01 F ED RotSpeed, (rpm) + 7 1.14554187E+03 F ED GenSpeed, (rpm) + 8 8.15625582E-03 F ED NcIMUTAxs, (m/s^2) + 9 2.55136520E-01 F ED TTDspFA, (m) + 10 7.93808105E+02 F ED RotThrust, (kN) + 11 3.88815332E+03 F ED RotTorq, (kN-m) + 12 5.02919570E+04 F ED TwHt2MLyt, (kN-m) + 13 1.09643970E+03 F ED TwHt9MLyt, (kN-m) + 14 5.43100000E+04 F ED TwrBsMyt, (kN-m) + 15 6.95476250E+05 F AD RtAeroFxh, (N) + 16 3.93677925E+06 F AD RtAeroMxh, (N-m) + + +Linearized state matrices: + +A: 4 x 4 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + -6.13652848E+00 1.32509753E-02 -2.98756205E-01 8.73515043E-01 + -3.88082898E-04 3.91159454E-04 -2.36135194E-02 -9.77851546E-01 +B: 4 x 9 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1.99553894E-01 3.28597213E-01 -9.15682982E-02 -3.45443359E+00 -1.80591336E+00 -5.41624614E-01 0.00000000E+00 -3.09139562E-14 -5.80197157E+00 + 2.25818620E-02 -1.37530787E-02 -5.03037741E-04 -7.09174141E-03 -1.15554268E-02 -1.70886734E-02 0.00000000E+00 -2.21955065E-06 -3.57358416E-02 +C: 16 x 4 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.07346002E+04 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.15657020E+02 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.72957795E+01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.54928748E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.26281186E+02 + -6.36353230E+00 1.37411451E-02 -3.09823239E-01 9.05827840E-01 + 1.00000001E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.16950133E+02 1.53222954E+00 -5.34154179E+01 2.88367421E+02 + -1.95867815E+00 1.96354273E+00 -1.18665061E+02 3.54045787E+04 + 1.97620314E+05 -6.84340334E+01 1.43820149E+03 -4.66454411E+01 + 1.19856824E+04 1.11838263E+02 -1.32426573E+03 -1.14351611E+03 + 2.13637823E+05 -8.47041889E+01 1.70992990E+03 -7.66658042E+01 + -1.46114682E+03 3.05305838E+03 -8.73095334E+04 3.87338946E+05 + -1.99298330E+04 1.08527538E+04 -1.03199703E+06 -2.41571175E+06 +D: 16 x 9 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.06935732E-01 3.40752619E-01 -9.49555784E-02 -3.58221899E+00 -1.87271725E+00 -5.61660042E-01 0.00000000E+00 0.00000000E+00 -6.01659628E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6.02344256E+01 -7.84014651E+01 8.59497387E+00 -4.05261763E+02 -6.48746347E+02 -7.48489314E+02 0.00000000E+00 0.00000000E+00 -1.80249742E+03 + 1.13480575E+02 -6.91275795E+01 -2.51913240E+00 -3.56047941E+01 -5.79261322E+01 -8.59326035E+01 0.00000000E+00 8.58457826E-02 -1.79463530E+02 + -1.45943785E+02 -4.46807321E+03 9.62571260E+02 1.76449148E+04 -1.10162786E+03 -1.35180323E+04 0.00000000E+00 0.00000000E+00 3.02525464E+03 + -1.79512833E+00 8.10381133E+03 -1.71501383E+03 -2.89545899E+04 4.65752417E+03 2.66851242E+04 0.00000000E+00 0.00000000E+00 2.38805846E+03 + -1.85705869E+02 -5.56302377E+03 1.19914847E+03 2.20094465E+04 -1.32662356E+03 -1.67971452E+04 0.00000000E+00 0.00000000E+00 3.88567769E+03 + 8.28684992E+04 -4.10967716E+04 -1.84826351E+03 -7.97149811E+05 -8.53604761E+05 -8.09845319E+05 0.00000000E+00 0.00000000E+00 -2.46059989E+06 + 9.86885167E+05 -6.01020994E+05 -2.22716720E+04 -3.09984459E+05 -5.04840687E+05 -7.46798658E+05 0.00000000E+00 0.00000000E+00 -1.56162380E+06 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin new file mode 100644 index 0000000000..5e932718e5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin @@ -0,0 +1,139 @@ + +Linearized model: Predictions were generated on 17-Feb-2020 at 19:44:51 using OpenFAST, compiled as a 64-bit application using single precision at commit v2.2.0 + linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn + +Description from the FAST input file: FAST Certification - Test #24: NREL 5.0 MW Baseline Wind Turbine with OC3 Hywind Configuration, for use in offshore analysis + +Simulation information: + Simulation time: 103.4900 s + Rotor Speed: 0.4781 rad/s + Azimuth: 1.5151 rad + Number of continuous states: 4 + Number of discrete states: 0 + Number of constraint states: 0 + Number of inputs: 9 + Number of outputs: 16 + Jacobians included in this file? No + +Order of continuous states: + Row/Column Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 2.55793370E-02 F ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m + 2 6.22744131E+00 F ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad + 3 3.49810551E-04 F ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s + 4 4.78124619E-01 F ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s + +Order of continuous state derivatives: + Row/Column Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 3.49810551E-04 F First time derivative of ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s + 2 4.78124619E-01 F First time derivative of ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s + 3 1.47421670E-03 F First time derivative of ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s/s + 4 1.45823855E-04 F First time derivative of ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s/s + +Order of inputs: + Column Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 4.00000000E+00 F IfW Extended input: horizontal wind speed (steady/uniform wind), m/s + 2 0.00000000E+00 F IfW Extended input: vertical power-law shear exponent, - + 3 0.00000000E+00 F IfW Extended input: propagation direction, rad + 4 0.00000000E+00 T ED Blade 1 pitch command, rad + 5 0.00000000E+00 T ED Blade 2 pitch command, rad + 6 0.00000000E+00 T ED Blade 3 pitch command, rad + 7 0.00000000E+00 F ED Yaw moment, Nm + 8 5.01650195E+03 F ED Generator torque, Nm + 9 0.00000000E+00 F ED Extended input: collective blade-pitch command, rad + +Order of outputs: + Row Operating Point Rotating Frame? Description + ---------- --------------- --------------- ----------- + 1 4.00000000E+00 F IfW Wind1VelX, (m/s) + 2 2.19627060E+02 F SrvD GenPwr, (kW) + 3 5.01650238E+00 F SrvD GenTq, (kN-m) + 4 0.00000000E+00 T ED BldPitch1, (deg) + 5 8.68060989E+01 F ED Azimuth, (deg) + 6 4.56575346E+00 F ED RotSpeed, (rpm) + 7 4.42878082E+02 F ED GenSpeed, (rpm) + 8 1.52781035E-03 F ED NcIMUTAxs, (m/s^2) + 9 2.55793370E-02 F ED TTDspFA, (m) + 10 1.89466110E+02 F ED RotThrust, (kN) + 11 4.87334503E+02 F ED RotTorq, (kN-m) + 12 5.65206299E+03 F ED TwHt2MLyt, (kN-m) + 13 -1.05843262E+03 F ED TwHt9MLyt, (kN-m) + 14 6.20309961E+03 F ED TwrBsMyt, (kN-m) + 15 9.55657109E+04 F AD RtAeroFxh, (N) + 16 4.92973375E+05 F AD RtAeroMxh, (N-m) + + +ED M:1_PtfmSgDOF 2_PtfmSwDOF 3_PtfmHvDOF 4_PtfmRDOF 5_PtfmPDOF 6_PtfmYDOF 7_TwFADOF1 8_TwSSDOF1 9_TwFADOF1 10_TwSSDOF2 11_Yaw 12_RFrl 13_GeAz 14_DrTr 15_TFrl 16_B1Flap1 17_B1Edge1 18_B1Flap2 19_B2Flap1 20_B2Edge1 21_B2Flap2 22_B3Flap1 23_B3Edge1 24_B3Flap2 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.436753E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.162617E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.162617E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.437026E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + +Linearized state matrices: + +A: 4 x 4 + 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 + -6.13095767E+00 2.10929947E-03 -1.30824956E-01 2.60824183E-01 + -3.97371065E-05 -2.97061610E-05 -8.76258473E-03 -7.03664054E-02 +B: 4 x 9 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 8.08636086E-02 5.15570541E-02 -1.07947296E-02 -3.04121206E-01 -5.79966842E-02 -4.85026796E-01 0.00000000E+00 -8.26409604E-15 -8.47144686E-01 + 8.45572091E-03 -2.34904056E-03 -1.56646286E-04 -1.40163473E-04 -1.67115258E-03 5.66750221E-05 0.00000000E+00 -2.21954956E-06 -1.75464103E-03 +C: 16 x 4 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.37805313E+03 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.09840777E+01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 5.72962166E+01 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.54929431E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.26281623E+02 + -6.35818159E+00 2.18747378E-03 -1.35671496E-01 2.70490750E-01 + 1.00000001E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7.17708351E+02 1.49987938E-01 -2.05190497E+01 8.72514854E+01 + -1.99392697E-01 -1.50074876E-01 -4.40361458E+01 1.68182781E+03 + 1.97611550E+05 -1.27756204E+01 8.92650310E+02 1.43200968E+01 + 1.20265478E+04 2.14999549E+01 -5.16132805E+02 -3.93126141E+02 + 2.13628326E+05 -1.59284473E+01 1.02849407E+03 1.15711579E+01 + -1.50339610E+02 3.83023940E+02 -3.53599138E+04 1.16828000E+05 + -2.26968844E+03 -1.25580581E+03 -3.82954232E+05 -1.03973897E+06 +D: 16 x 9 + 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 8.38605449E-02 5.34678436E-02 -1.11948001E-02 -3.15392432E-01 -6.01461308E-02 -5.03002678E-01 0.00000000E+00 0.00000000E+00 -8.78541241E-01 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2.45205301E+01 -1.32016661E+01 5.75268619E-01 -8.85213617E+01 -1.14884245E+02 -6.12511953E+01 0.00000000E+00 0.00000000E+00 -2.64656802E+02 + 4.24943959E+01 -1.18052861E+01 -7.86784011E-01 -7.02168785E-01 -8.39977581E+00 2.84198290E-01 0.00000000E+00 8.58456282E-02 -8.81774631E+00 + -5.58289322E+01 -7.22833451E+02 1.04183054E+02 3.01216691E+02 -2.27400925E+03 2.37330747E+03 0.00000000E+00 0.00000000E+00 4.00514917E+02 + -6.38550548E+00 1.31272126E+03 -1.84443164E+02 -1.50602509E+02 4.43840667E+03 -3.86759910E+03 0.00000000E+00 0.00000000E+00 4.20205062E+02 + -7.13336537E+01 -8.99692616E+02 1.29739769E+02 3.81561803E+02 -2.82507358E+03 2.96163314E+03 0.00000000E+00 0.00000000E+00 5.18121363E+02 + 3.36939487E+04 -7.35300767E+03 -6.50066623E+02 -1.23023326E+05 -1.21463182E+05 -1.16274559E+05 0.00000000E+00 0.00000000E+00 -3.60761067E+05 + 3.69540220E+05 -1.02655802E+05 -6.83271299E+03 -6.12378711E+03 -7.30380151E+04 2.47680138E+03 0.00000000E+00 0.00000000E+00 -7.66850009E+04 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin.outb b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin.outb new file mode 100644 index 0000000000000000000000000000000000000000..16156bff3f261730a6d3035792a74265229665aa GIT binary patch literal 4678 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 literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin_ID4.outb b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin_ID4.outb new file mode 100644 index 0000000000000000000000000000000000000000..f7571efad96e7d981d287ff224a73af09d086532 GIT binary patch literal 11641 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 literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev new file mode 100644 index 0000000000..75393fd728 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev @@ -0,0 +1,9 @@ + +These predictions were generated by HydroDyn on 25-Oct-2018 at 16:39:49. + + Time Wave1Elev + (sec) (m) + 0.0000 -0.0000e+01 + 0.2500 -1.0000e+01 + 0.5000 -0.0000e+01 + 0.7500 1.0000e+01 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm new file mode 100644 index 0000000000..6d96c46f2b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm @@ -0,0 +1,7 @@ +This file was generated by FAST(v7.02.00d-bjj, 20-Feb-2013) on 23-Oct-2018 at 13:35:57. +Time VX20 VY20 VZ20 Alpha01 DynPres01 CLift01 CDrag01 CNorm01 CTang01 CMomt01 Pitch01 AxInd01 TanInd01 ForcN01 ForcT01 Pmomt01 ReNum01 +(sec) (m/sec) (m/sec) (m/sec) (deg) (Pa) (-) (-) (-) (-) (-) (deg) (-) (-) (N) (N) (N-m) (x10^6) +0.000 1.10E+01 0.00E+00 0.00E+00 5.52E+01 7.43E+01 0.00E+00 5.00E-01 4.96E-01 -2.15E-01 0.00E+00 1.32E+01 0.00E+00 0.00E+00 1.03E+01 -4.03E+00 0.00E+00 4.67E-01 +0.010 1.10E+01 0.00E+00 0.00E+00 5.61E+01 7.30E+01 0.00E+00 1.00E+00 8.11E-01 -5.56E-01 -1.15E-02 1.32E+01 0.00E+00 0.00E+00 2.70E+01 -9.52E+00 -2.59E-01 4.45E-01 +0.020 1.10E+01 0.00E+00 0.00E+00 5.48E+01 7.91E+01 0.00E+00 1.00E+00 8.99E-01 -5.08E-01 -3.35E-02 1.32E+01 0.00E+00 0.00E+00 2.14E+01 -9.36E+00 -5.40E-01 4.09E-01 +0.030 1.10E+01 0.00E+00 0.00E+00 5.07E+01 7.33E+01 0.00E+00 1.00E+00 8.50E-01 -5.49E-01 -4.05E-02 1.32E+01 0.00E+00 0.00E+00 2.91E+01 -9.81E+00 -6.89E-01 4.08E-01 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml new file mode 100644 index 0000000000..9eff04c79b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml @@ -0,0 +1,178 @@ + +#This summary file was generated by SubDyn on 21-Jul-2020 at 21:06:35. + +#Unless specified, units are consistent with Input units, [SI] system is advised. +#____________________________________________________________________________________________________ +#TP reference point: 0.000000E+00 0.000000E+00 0.000000E+00 +#____________________________________________________________________________________________________ +# Internal FEM representation +nNodes_I: 1 # Number of Nodes: "interface" (I) +nNodes_C: 0 # Number of Nodes: "reactions" (C) +nNodes_L: 2 # Number of Nodes: "internal" (L) +nNodes : 3 # Number of Nodes: total (I+C+L) +nDOFI__ : 6 # Number of DOFs: "interface" (I__) +nDOFI_B : 6 # Number of DOFs: "interface" retained (I_B) +nDOFI_F : 0 # Number of DOFs: "interface" fixed (I_F) +nDOFC__ : 0 # Number of DOFs: "reactions" (C__) +nDOFC_B : 0 # Number of DOFs: "reactions" retained (C_B) +nDOFC_L : 0 # Number of DOFs: "reactions" internal (C_L) +nDOFC_F : 0 # Number of DOFs: "reactions" fixed (C_F) +nDOFR__ : 6 # Number of DOFs: "intf+react" (__R) +nDOFL_L : 13 # Number of DOFs: "internal" internal (L_L) +nDOF__B : 6 # Number of DOFs: retained (__B) +nDOF__L : 13 # Number of DOFs: internal (__L) +nDOF__F : 0 # Number of DOFs: fixed (__F) +nDOF_red: 19 # Number of DOFs: total +Nodes_I: # 1 x 1 "interface" nodes" + - [ 1,] +Nodes_C: # 1 x 0 "reaction" nodes" + - [ ] +Nodes_L: # 1 x 2 "internal" nodes" + - [ 2, 3,] +DOF_I__: # 1 x 6 "interface" DOFs" + - [ 1, 2, 3, 4, 5, 6,] +DOF_I_B: # 1 x 6 "interface" retained DOFs + - [ 1, 2, 3, 4, 5, 6,] +DOF_I_F: # 1 x 0 "interface" fixed DOFs + - [ ] +DOF_C__: # 1 x 0 "reaction" DOFs" + - [ ] +DOF_C_B: # 1 x 0 "reaction" retained DOFs + - [ ] +DOF_C_L: # 1 x 0 "reaction" internal DOFs + - [ ] +DOF_C_F: # 1 x 0 "reaction" fixed DOFs + - [ ] +DOF_L_L: # 1 x 13 "internal" internal DOFs + - [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,] +DOF_R_: # 1 x 6 "interface&reaction" DOFs + - [ 1, 2, 3, 4, 5, 6,] +DOF___B: # 1 x 6 all retained DOFs + - [ 1, 2, 3, 4, 5, 6,] +DOF___F: # 1 x 0 all fixed DOFs + - [ ] +DOF___L: # 1 x 13 all internal DOFs + - [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,] + +#Index map from DOF to nodes +# Node No., DOF/Node, NodalDOF +DOF2Nodes: # 19 x 3 (nDOFRed x 3, for each constrained DOF, col1: node index, col2: number of DOF, col3: DOF starting from 1) + - [ 1, 6, 1,] # 1 + - [ 1, 6, 2,] # 2 + - [ 1, 6, 3,] # 3 + - [ 1, 6, 4,] # 4 + - [ 1, 6, 5,] # 5 + - [ 1, 6, 6,] # 6 + - [ 2, 7, 1,] # 7 + - [ 2, 7, 2,] # 8 + - [ 2, 7, 3,] # 9 + - [ 2, 7, 4,] # 10 + - [ 2, 7, 5,] # 11 + - [ 2, 7, 6,] # 12 + - [ 2, 7, 7,] # 13 + - [ 3, 6, 1,] # 14 + - [ 3, 6, 2,] # 15 + - [ 3, 6, 3,] # 16 + - [ 3, 6, 4,] # 17 + - [ 3, 6, 5,] # 18 + - [ 3, 6, 6,] # 19 +# Node_[#] X_[m] Y_[m] Z_[m] JType_[-] JDirX_[-] JDirY_[-] JDirZ_[-] JStff_[Nm/rad] +Nodes: # 3 x 9 + - [ 1., 0.000, 0.000, 0.000, 1., 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 2., 0.000, 0.000, -1.000, 3., 0.000000E+00, 0.100000E+01, 0.000000E+00, 0.100000E+03,] + - [ 3., 0.000, 0.000, -6.000, 1., 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] +# Elem_[#] Node_1 Node_2 Prop_1 Prop_2 Type Length_[m] Area_[m^2] Dens._[kg/m^3] E_[N/m2] G_[N/m2] shear_[-] Ixx_[m^4] Iyy_[m^4] Jzz_[m^4] T0_[N] +Elements: # 2 x 16 + - [ 1., 1., 2., 1., 1., 1., 1.000, 0.011, 7850.000, 0.210000E+12, 0.807690E+11, 0.510133E+00, 0.463699E-04, 0.463699E-04, 0.927398E-04, -0.999000E+37,] + - [ 2., 2., 3., 1., 1., 1., 5.000, 0.011, 7850.000, 0.210000E+12, 0.807690E+11, 0.510133E+00, 0.463699E-04, 0.463699E-04, 0.927398E-04, -0.999000E+37,] +#____________________________________________________________________________________________________ +#Eigenfrequencies for full system (no constraint) [Hz] +Full_frequencies: # 1 x 19 + - [ 0.000000E+00, 4.782174E-03, 5.782056E-03, 1.522578E-02, 1.585262E-02, 6.756457E-02, 3.940118E-01, 3.530664E+01, 5.101479E+01, 1.177512E+02, 1.704280E+02, 2.854026E+02, 3.801668E+02, 4.601985E+02, 1.001558E+03, 1.095818E+03, 1.766957E+03, 1.800239E+03, 2.902576E+03,] +#CB frequencies [Hz] +CB_frequencies: # 1 x 5 + - [ 2.571561E-02, 5.154897E+00, 3.448768E+01, 3.639185E+01, 9.826435E+01,] +#____________________________________________________________________________________________________ +#FEM Eigenvectors (19 x 19) [m or rad]. Number of shown eigenvectors (total # of DOFs minus restrained nodes' DOFs): 19 +Full_Modes: # 19 x 19 + - [ 0.000000E+00, 4.107411E-02, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, 7.512471E-01, 0.000000E+00, -3.245722E-01, 0.000000E+00, -1.302897E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.985932E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -8.682085E-02,] + - [ 0.000000E+00, 0.000000E+00, 3.928473E-02, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, -3.568193E-01, 0.000000E+00, 0.000000E+00, -3.979489E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.165798E-01, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -8.184897E-01, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, -1.732139E-01, -2.449020E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 8.397360E-01, 0.000000E+00, 5.083995E-01, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 1.626639E-01, 0.000000E+00, 0.000000E+00, -2.324761E-01, 0.000000E+00, 1.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, -4.090358E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00,] + - [ 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -8.184897E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, -1.215898E-01, 0.000000E+00, 0.000000E+00, -7.675238E-01, 0.000000E+00, -2.487521E-01, 0.000000E+00, 6.702434E-01, 0.000000E+00, 2.557473E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -7.781176E-02, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.816464E-02,] + - [ 0.000000E+00, 0.000000E+00, -1.339292E-01, 7.550979E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.725307E-01, 0.000000E+00, 1.078532E-01, 0.000000E+00, 0.000000E+00, 1.984064E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -3.020253E-02, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.969184E-01, 0.000000E+00, 0.000000E+00, -3.030816E-01, 0.000000E+00, 0.000000E+00,] + - [ 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.969184E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -3.030816E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, -1.732139E-01, -2.449021E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 7.799248E-01, 0.000000E+00, 3.130864E-01, 0.000000E+00, 0.000000E+00, -4.453690E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 5.135798E-02, 0.000000E+00,] + - [ 0.000000E+00, 1.626640E-01, 0.000000E+00, 0.000000E+00, -2.324762E-01, 0.000000E+00, 9.999956E-01, 0.000000E+00, -9.863876E-01, 0.000000E+00, -3.489279E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 9.502386E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.572086E-01,] + - [ 0.000000E+00, 1.756818E-01, 0.000000E+00, 0.000000E+00, -2.470031E-01, 0.000000E+00, -7.930491E-02, 0.000000E+00, 9.515405E-01, 0.000000E+00, 8.192991E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.170988E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 2.710940E-02,] + - [ 0.000000E+00, -1.000000E+00, 0.000000E+00, 0.000000E+00, 4.674933E-01, 0.000000E+00, 1.479579E-01, 0.000000E+00, 8.417776E-01, 0.000000E+00, -4.334266E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.977116E-02, 0.000000E+00, 0.000000E+00, 0.000000E+00, -4.443453E-03,] + - [ 0.000000E+00, 0.000000E+00, -1.000000E+00, -4.694142E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -9.010279E-01, 0.000000E+00, 5.078576E-01, 0.000000E+00, 0.000000E+00, -1.340460E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.052559E-02, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 1.636979E-01, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, -1.732143E-01, -2.449026E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -7.873605E-01, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, -3.582121E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 3.046357E-02, 0.000000E+00,] + - [ 0.000000E+00, 1.756821E-01, 0.000000E+00, 0.000000E+00, -2.470036E-01, 0.000000E+00, -7.936198E-02, 0.000000E+00, -9.463903E-01, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -5.912242E-02, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.340981E-02,] + - [ 9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.636979E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00,] +#____________________________________________________________________________________________________ +#CB Matrices (PhiM,PhiR) (constraint applied) +PhiM: # 13 x 5 (CB modes) + - [ -1.017239E-07, 0.000000E+00, -1.550054E-02, 0.000000E+00, 9.460907E-02,] + - [ 0.000000E+00, -3.957648E-03, 0.000000E+00, 2.756187E-02, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, -7.510861E-03, 0.000000E+00, 4.323204E-02, 0.000000E+00,] + - [ 1.932527E-07, 0.000000E+00, 2.180389E-02, 0.000000E+00, -1.297702E-01,] + - [ 1.643735E-02, 0.000000E+00, 5.763143E-02, 0.000000E+00, 4.326063E-02,] + - [ -8.218800E-02, 0.000000E+00, 9.318795E-02, 0.000000E+00, 8.384577E-02,] + - [ 0.000000E+00, -8.710870E-02, 0.000000E+00, -8.717469E-02, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, -1.995024E-02, 0.000000E+00, -8.186166E-02, 0.000000E+00,] + - [ 1.643767E-02, 0.000000E+00, -8.281329E-02, 0.000000E+00, -1.453021E-01,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] +PhiR: # 13 x 6 (Guyan modes) + - [ 9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 1.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00,] + - [ 0.000000E+00, 1.254181E-07, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ -2.268250E-08, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00,] + - [ -5.952277E-03, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.093535E+00, 0.000000E+00,] + - [ 1.029762E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.467684E+00, 0.000000E+00,] + - [ -0.000000E+00, 1.000000E+00, -0.000000E+00, 6.000004E+00, -0.000000E+00, -0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000001E+00, 0.000000E+00, 0.000000E+00,] + - [ -5.952381E-03, -0.000000E+00, -0.000000E+00, -0.000000E+00, 1.093537E+00, -0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00,] +#____________________________________________________________________________________________________ +#SubDyn's Structure Equivalent Stiffness and Mass Matrices at the TP reference point (Guyan DOFs) +KBBt: # 6 x 6 + - [ 8.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 8.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, -4.000000E+00, 0.000000E+00, 4.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ -4.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00,] +MBBt: # 6 x 6 + - [ 5.460311E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.732566E+03, 0.000000E+00,] + - [ 0.000000E+00, 5.326888E+02, 0.000000E+00, 1.598067E+03, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 5.326886E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 1.598067E+03, 0.000000E+00, 6.394453E+03, 0.000000E+00, 0.000000E+00,] + - [ -1.732566E+03, 0.000000E+00, 0.000000E+00, 0.000000E+00, 7.326801E+03, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 4.368048E+00,] +CBBt: # 6 x 6 (user Guyan Damping + potential joint damping from CB-reduction) + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] +#____________________________________________________________________________________________________ +#Rigid Body Equivalent Mass Matrix w.r.t. (0,0,0). +MRB: # 6 x 6 + - [ 5.460311E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.732566E+03, 0.000000E+00,] + - [ 0.000000E+00, 5.326888E+02, 0.000000E+00, 1.598067E+03, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 5.326886E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00,] + - [ 0.000000E+00, 1.598067E+03, 0.000000E+00, 6.394453E+03, 0.000000E+00, 0.000000E+00,] + - [ -1.732566E+03, 0.000000E+00, 0.000000E+00, 0.000000E+00, 7.326801E+03, 0.000000E+00,] + - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 4.368048E+00,] diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd new file mode 100644 index 0000000000..bc00931188 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd @@ -0,0 +1,8 @@ +! Deterministic Wind file +! Time Wind Wind Vert. Horiz. Vert. LinV Gust +! Speed Dir Speed Shear Shear Shear Speed + 00.00 06.0 0.0 0.0 0.0 0.0 0.0 0.0 + 20.05 06.0 0.0 0.0 0.0 0.0 0.0 0.0 + 20.10 08.0 0.0 0.0 0.0 0.0 0.0 0.0 + 40.05 08.0 0.0 0.0 0.0 0.0 0.0 0.0 +999.99 08.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla new file mode 100644 index 0000000000..7fd86524fa --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla @@ -0,0 +1,32 @@ +Comment +13 r[m] EI_Flp[Nm2] EI_Edg[Nm2] Mass_[kg/m] PhiOut[deg] Out[0/1] PBF[m] PBE[m] +0.0 18110000000 18113600000 715.0 00.0 1 0 0 +3.2 15287400000 19788800000 779.4 13.3 0 0 0 +7.2 5528360000 8063160000 421.9 13.3 0 0 0 +11.2 3949460000 7271660000 439.0 13.2 0 0 0 +15.2 2388650000 4948490000 368.0 11.1 0 0 0 +22.2 1588710000 3995280000 339.1 9.1 0 0 0 +30.2 681300000 2734240000 277.3 6.5 1 0 0 +38.2 238630000 1584100000 210.9 4.4 0 0 0 +46.2 90880000 797810000 146.3 2.5 1 0 0 +54.2 39360000 395120000 95.0 1.0 0 0 0 +57.7 23840000 261710000 69.8 0.3 0 0 0 +59.7 10080000 101630000 51.7 0.1 0 0 0 +61.5 170000 5010000 10.9 0.0 0 0 0 +0.00 !BetaC +0.03 0.03 0.03 0.03 0.03 0.03 0.03 0.03 log decr. For mode 1-4 X C Beta t/c Yac/c +00.0 3.5 13.308 100 0.25000 +03.2 3.751109176 13.308 100 0.23284 +07.2 4.208520941 13.308 90 0.18382 +11.2 4.640859231 13.181 40 0.13481 +15.2 4.6248112 11.072 35 0.12500 +22.2 4.266988438 9.110 30 0.12500 +30.2 3.782642105 6.711 25 0.12500 +38.2 3.30106 4.401 21 0.12500 +46.2 2.82106 2.503 17 0.12500 +54.2 2.34106 0.954 17 0.12500 +57.7 2.0544545 0.319 17 0.12500 +59.7 1.579883655 0.140 17 0.12500 +61.5 0.877604473 0.000 17 0.12500 +data/ProfileFile.pro +61.5 Xtipbr diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld new file mode 100644 index 0000000000..808ab31aa3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld @@ -0,0 +1,32 @@ +#001 Comment +13 r[m] EI_Flp[Nm2] EI_Edg[Nm2] Mass_[kg/m] PhiOut[deg] Out[0/1] PBF[m] PBE[m] +0.0 18110000000 18113600000 715.0 00.0 1 0 0 +3.2 15287400000 19788800000 779.4 13.3 0 0 0 +7.2 5528360000 8063160000 421.9 13.3 0 0 0 +11.2 3949460000 7271660000 439.0 13.2 0 0 0 +15.2 2388650000 4948490000 368.0 11.1 0 0 0 +22.2 1588710000 3995280000 339.1 9.1 0 0 0 +30.2 681300000 2734240000 277.3 6.5 1 0 0 +38.2 238630000 1584100000 210.9 4.4 0 0 0 +46.2 90880000 797810000 146.3 2.5 1 0 0 +54.2 39360000 395120000 95.0 1.0 0 0 0 +57.7 23840000 261710000 69.8 0.3 0 0 0 +59.7 10080000 101630000 51.7 0.1 0 0 0 +61.5 170000 5010000 10.9 0.0 0 0 0 +0.00 !BetaC +0.03 0.03 0.03 0.03 0.03 0.03 0.03 0.03 log decr. For mode 1-4 X C Beta t/c Yac/c AeroTors +00.0 3.5 13.308 100 0.25000 0 +03.2 3.751109176 13.308 100 0.23284 1 +07.2 4.208520941 13.308 90 0.18382 1 +11.2 4.640859231 13.181 40 0.13481 1 +15.2 4.6248112 11.072 35 0.12500 1 +22.2 4.266988438 9.110 30 0.12500 1 +30.2 3.782642105 6.711 25 0.12500 1 +38.2 3.30106 4.401 21 0.12500 1 +46.2 2.82106 2.503 17 0.12500 1 +54.2 2.34106 0.954 17 0.12500 1 +57.7 2.0544545 0.319 17 0.12500 1 +59.7 1.579883655 0.140 17 0.12500 1 +61.5 0.877604473 0.000 17 0.12500 1 +data/ProfileFile.pro +61.5 Xtipbr diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld new file mode 100644 index 0000000000..31b012cd06 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld @@ -0,0 +1,56 @@ +#002 Comment +25 r[m] EI_Flp[Nm2] EI_Edg[Nm2] Mass_[kg/m] PhiOut[deg] Out[0/1] PBF[m] PBE[m] GKt[Nm2] +0.0 18110000000 18113600000 715.0 00.0 1 0 0 1.00E+20 +1.2 19424900000 19558600000 814.5 13.3 0 0 0 1.00E+20 +3.2 15287400000 19788800000 779.4 13.3 0 0 0 1.00E+20 +5.2 7229720000 10220600000 474.2 13.3 0 0 0 1.00E+20 +7.2 5528360000 8063160000 421.9 13.3 0 0 0 1.00E+20 +9.2 4936840000 7009180000 420.9 13.3 0 0 0 1.00E+20 +11.2 3949460000 7271660000 439.0 13.2 0 0 0 1.00E+20 +13.2 2933740000 6244530000 401.7 12.2 0 0 0 1.00E+20 +15.2 2388650000 4948490000 368.0 11.1 0 0 0 1.00E+20 +18.2 2050050000 4501400000 357.4 10.2 0 0 0 1.00E+20 +22.2 1588710000 3995280000 339.1 9.1 0 0 0 1.00E+20 +26.2 1102380000 3447140000 310.4 7.9 0 0 0 1.00E+20 +30.2 681300000 2734240000 277.3 6.5 1 0 0 1.00E+20 +34.2 408900000 2334030000 254.5 5.5 0 0 0 1.00E+20 +38.2 238630000 1584100000 210.9 4.4 0 0 0 1.00E+20 +42.2 126010000 1183680000 173.9 3.3 0 0 0 1.00E+20 +46.2 90880000 797810000 146.3 2.5 1 0 0 1.00E+20 +50.2 61050000 518190000 113.0 1.7 0 0 0 1.00E+20 +54.2 39360000 395120000 95.0 1.0 0 0 0 1.00E+20 +56.2 30410000 304730000 76.8 0.6 0 0 0 1.00E+20 +57.7 23840000 261710000 69.8 0.3 0 0 0 1.00E+20 +58.7 16000000 137880000 58.9 0.2 0 0 0 1.00E+20 +59.7 10080000 101630000 51.7 0.1 0 0 0 1.00E+20 +60.7 4600000 64260000 43.9 0.1 0 0 0 1.00E+20 +61.5 170000 5010000 10.9 0.0 0 0 0 1.00E+20 +0.00 !BetaC +0.03 0.03 0.03 0.03 0.03 0.03 0.03 0.03 log decr. For mode 1-4 X C Beta t/c Yac/c AeroTors ProfileSet +00.0 3.5 13.308 100 0.25000 1 1 +01.2 3.522594595 13.308 100 0.24951 1 1 +03.2 3.751109176 13.308 100 0.23284 1 1 +05.2 3.979815059 13.308 100 0.20833 1 1 +07.2 4.208520941 13.308 90 0.18382 1 1 +09.2 4.437226824 13.308 40 0.15931 1 1 +11.2 4.640859231 13.181 40 0.13481 1 1 +13.2 4.6734155 12.192 35 0.12500 1 1 +15.2 4.6248112 11.072 35 0.12500 1 1 +18.2 4.4712112 10.232 35 0.12500 1 1 +22.2 4.266988438 9.110 30 0.12500 1 1 +26.2 4.035273684 7.932 25 0.12500 1 1 +30.2 3.782642105 6.711 25 0.12500 1 1 +34.2 3.54106 5.546 25 0.12500 1 1 +38.2 3.30106 4.401 21 0.12500 1 1 +42.2 3.06106 3.332 21 0.12500 1 1 +46.2 2.82106 2.503 17 0.12500 1 1 +50.2 2.58106 1.730 17 0.12500 1 1 +54.2 2.34106 0.954 17 0.12500 1 1 +56.2 2.2112045 0.574 17 0.12500 1 1 +57.7 2.0544545 0.319 17 0.12500 1 1 +58.7 1.845517824 0.216 17 0.12500 1 1 +59.7 1.579883655 0.140 17 0.12500 1 1 +60.7 1.2087202 0.062 17 0.12500 1 1 +61.5 0.877604473 0.000 17 0.12500 1 1 +data/ProfileFile.pro +61.5 Xtipbr diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld new file mode 100644 index 0000000000..48ca5a6978 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld @@ -0,0 +1,21 @@ +#003 Comment +5 r[m] EI_Flp[Nm2] EI_Edg[Nm2] GKt[Nm2] Mass[kg/m] Jxx[kg.m] PBF[m] PBE[m] Str.Twist[°] PhiOut[°] Ycog[m] Yshc[m] Out[0/1] + 0.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 1 + 25.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 + 50.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 + 75.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 + 100.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 +-90.00 ! If BetaC<0 use section pitch angles; if BetaC>0 Beta=constant (classic formulation) +#LOGD +1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 ; Flapwise LOGD +1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 ; Edgewise LOGD +1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 ; Torsion LOGD +#AERO +; X[m] C[m] Beta[°] t/C[%] Yac/C[-] Pitching Aero.Pro.Set + 0.0000 2.000 0.00 100.00 0.250 1 1 + 25.0000 2.000 0.00 100.00 0.250 1 1 + 50.0000 2.000 0.00 100.00 0.250 1 1 + 75.0000 2.000 0.00 100.00 0.250 1 1 + 100.0000 2.000 0.00 100.00 0.250 1 1 +data/ProfileFile.pro +99999.00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV0.int b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV0.int new file mode 100644 index 0000000000000000000000000000000000000000..5df18a5d5b28c9b45ec0b48786925a5fb7d9a306 GIT binary patch literal 11352 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 J6(Ac%{y#QJk9q(A literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV3.res b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV3.res new file mode 100644 index 0000000000000000000000000000000000000000..6eb3adf00c07212006a28cf7fe6c2b133b305dd7 GIT binary patch literal 186 zcmeZZU|`?`VjdtC0%BeumIPvbAa+SDPAGx} zftU%(hKT{W3}?@rvE{nH*fKcar@6_c*_I5oSRsR>FGw6nGVI^P(9F;bB!K{%C;;4s BB(VSh literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro new file mode 100644 index 0000000000..ebdd1b70da --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro @@ -0,0 +1,1016 @@ +PROFILE SET 1: Comment +2 +18.00 100.00 +251 +Profile 1, Set 1 - 18% AOA Cl Cd Cm 18% +-1.8000000E+02 -4.0000000E-01 5.0000000E-02 -6.6800000E-02 +-1.7800000E+02 -2.4810000E-01 5.6979005E-02 3.2800000E-03 +-1.7600000E+02 -8.1400000E-02 7.5713730E-02 7.6720000E-02 +-1.7400000E+02 1.0040000E-01 1.0290074E-01 1.5672000E-01 +-1.7200000E+02 2.9600000E-01 1.3523661E-01 2.3360000E-01 +-1.7000000E+02 4.7300000E-01 1.6941791E-01 2.7136000E-01 +-1.6800000E+02 5.2260000E-01 2.0214119E-01 2.6528000E-01 +-1.6600000E+02 5.4130000E-01 2.3010303E-01 2.5376000E-01 +-1.6400000E+02 4.9650000E-01 2.5000000E-01 2.4000000E-01 +-1.6200000E+02 4.6530000E-01 2.6016631E-01 2.3248000E-01 +-1.6000000E+02 4.5000000E-01 2.6548681E-01 2.2912000E-01 +-1.5800000E+02 4.6100000E-01 2.7248397E-01 2.3536000E-01 +-1.5600000E+02 4.9440000E-01 2.8768028E-01 2.5264000E-01 +-1.5400000E+02 5.5046361E-01 3.1759823E-01 2.7873657E-01 +-1.5200000E+02 6.1396608E-01 3.6045801E-01 3.0006065E-01 +-1.5000000E+02 6.7000628E-01 4.0586462E-01 3.2308783E-01 +-1.4800000E+02 7.0770287E-01 4.5295807E-01 3.3980436E-01 +-1.4600000E+02 7.4161481E-01 5.0087833E-01 3.5551030E-01 +-1.4400000E+02 7.6856222E-01 5.4876542E-01 3.6985848E-01 +-1.4200000E+02 7.8869353E-01 5.9575931E-01 3.8288806E-01 +-1.4000000E+02 8.0222023E-01 6.4100000E-01 3.9464363E-01 +-1.3800000E+02 8.0940261E-01 6.8590215E-01 4.0517341E-01 +-1.3600000E+02 8.1053705E-01 7.3120113E-01 4.1452780E-01 +-1.3400000E+02 8.0594512E-01 7.7531136E-01 4.2275813E-01 +-1.3200000E+02 7.9596425E-01 8.1857786E-01 4.2991567E-01 +-1.3000000E+02 7.8094007E-01 8.6060000E-01 4.3605090E-01 +-1.2800000E+02 7.6122019E-01 9.0132006E-01 4.4121290E-01 +-1.2600000E+02 7.3714923E-01 9.4068533E-01 4.4544903E-01 +-1.2400000E+02 7.0906508E-01 9.7821853E-01 4.4880461E-01 +-1.2200000E+02 6.7729608E-01 1.0142228E+00 4.5132287E-01 +-1.2000000E+02 6.4215894E-01 1.0482000E+00 4.5304487E-01 +-1.1800000E+02 6.0395751E-01 1.0802061E+00 4.5400954E-01 +-1.1600000E+02 5.6298196E-01 1.1102554E+00 4.5425378E-01 +-1.1400000E+02 5.1950851E-01 1.1378430E+00 4.5381259E-01 +-1.1200000E+02 4.7379944E-01 1.1634949E+00 4.5271919E-01 +-1.1000000E+02 4.2610350E-01 1.1866000E+00 4.5100519E-01 +-1.0800000E+02 3.7665646E-01 1.2073773E+00 4.4870078E-01 +-1.0600000E+02 3.2568191E-01 1.2259430E+00 4.4583483E-01 +-1.0400000E+02 2.7339216E-01 1.2416746E+00 4.4243506E-01 +-1.0200000E+02 2.1998931E-01 1.2555655E+00 4.3852819E-01 +-1.0000000E+02 1.6566636E-01 1.2665000E+00 4.3414003E-01 +-9.8000000E+01 1.1060839E-01 1.2752980E+00 4.2929558E-01 +-9.6000000E+01 5.4993857E-02 1.2819458E+00 4.2401913E-01 +-9.4000000E+01 -1.0041200E-03 1.2844808E+00 4.1833426E-01 +-9.2000000E+01 -5.7216440E-02 1.2857982E+00 4.1226392E-01 +-9.0000000E+01 -1.1347665E-01 1.2863000E+00 4.0583041E-01 +-8.8000000E+01 -1.6961958E-01 1.2837866E+00 3.9905539E-01 +-8.6000000E+01 -2.2547994E-01 1.2780933E+00 3.9195980E-01 +-8.4000000E+01 -2.8089095E-01 1.2713222E+00 3.8456387E-01 +-8.2000000E+01 -3.3568295E-01 1.2617782E+00 3.7688695E-01 +-8.0000000E+01 -3.8968202E-01 1.2504000E+00 3.6894750E-01 +-7.8000000E+01 -4.4270859E-01 1.2372024E+00 3.6076287E-01 +-7.6000000E+01 -4.9457615E-01 1.2217980E+00 3.5234924E-01 +-7.4000000E+01 -5.4508990E-01 1.2049106E+00 3.4372142E-01 +-7.2000000E+01 -5.9404553E-01 1.1859838E+00 3.3489264E-01 +-7.0000000E+01 -6.4122798E-01 1.1654000E+00 3.2587438E-01 +-6.8000000E+01 -6.8641039E-01 1.1431275E+00 3.1667613E-01 +-6.6000000E+01 -7.2935301E-01 1.1190173E+00 3.0730511E-01 +-6.4000000E+01 -7.6980240E-01 1.0933857E+00 2.9776607E-01 +-6.2000000E+01 -8.0749070E-01 1.0659453E+00 2.8806090E-01 +-6.0000000E+01 -8.4213514E-01 1.0368000E+00 2.7818840E-01 +-5.8000000E+01 -8.7343785E-01 1.0058711E+00 2.6814391E-01 +-5.6000000E+01 -9.0108599E-01 9.7301646E-01 2.5791893E-01 +-5.4000000E+01 -9.2475231E-01 9.3829725E-01 2.4750078E-01 +-5.2000000E+01 -9.4409624E-01 9.0149442E-01 2.3687219E-01 +-5.0000000E+01 -9.5876557E-01 8.6250000E-01 2.2601086E-01 +-4.8000000E+01 -9.6839892E-01 8.2116674E-01 2.1488911E-01 +-4.6000000E+01 -9.7262906E-01 7.7724007E-01 2.0347336E-01 +-4.4000000E+01 -9.7108730E-01 7.3039427E-01 1.9172381E-01 +-4.2000000E+01 -9.6340899E-01 6.8020982E-01 1.7959393E-01 +-4.0000000E+01 -9.5500000E-01 6.2730000E-01 1.6703018E-01 +-3.8000000E+01 -9.4600000E-01 5.7149033E-01 1.5397159E-01 +-3.6000000E+01 -9.3600000E-01 5.1292880E-01 1.4034954E-01 +-3.4000000E+01 -9.2400000E-01 4.5095130E-01 1.2608748E-01 +-3.2000000E+01 -9.1200000E-01 3.8269856E-01 1.1110090E-01 +-3.0000000E+01 -9.0000000E-01 3.2610000E-01 9.4958218E-02 +-2.9000000E+01 -8.8589127E-01 3.0767714E-01 8.6907123E-02 +-2.8000000E+01 -8.6233893E-01 2.9189846E-01 7.8384267E-02 +-2.7000000E+01 -8.3150083E-01 2.7827773E-01 6.9608788E-02 +-2.6000000E+01 -7.9553481E-01 2.6632871E-01 6.0799827E-02 +-2.5000000E+01 -7.5659873E-01 2.5556518E-01 5.2176522E-02 +-2.4000000E+01 -7.1685043E-01 2.4550091E-01 4.3958012E-02 +-2.3000000E+01 -6.7844777E-01 2.3564965E-01 3.6363437E-02 +-2.2000000E+01 -6.4354858E-01 2.2552517E-01 2.9611936E-02 +-2.1000000E+01 -6.1431072E-01 2.1464125E-01 2.3922648E-02 +-2.0000000E+01 -5.9289204E-01 2.0251165E-01 1.9514712E-02 +-1.9500000E+01 -5.8699378E-01 1.9551304E-01 1.8062448E-02 +-1.9000000E+01 -5.8109552E-01 1.8851442E-01 1.6610183E-02 +-1.8500000E+01 -5.7836086E-01 1.8084652E-01 1.5824749E-02 +-1.8000000E+01 -5.7562619E-01 1.7317861E-01 1.5039315E-02 +-1.7500000E+01 -5.7693243E-01 1.6577103E-01 1.4336321E-02 +-1.7000000E+01 -5.7823867E-01 1.5836345E-01 1.3633327E-02 +-1.6500000E+01 -5.9853289E-01 1.4940440E-01 1.0950506E-02 +-1.6000000E+01 -6.1882711E-01 1.4044535E-01 8.2676848E-03 +-1.5500000E+01 -6.7014193E-01 1.2253995E-01 -2.5428471E-03 +-1.5000000E+01 -7.2145675E-01 1.0463454E-01 -1.3353379E-02 +-1.4500000E+01 -8.0837459E-01 7.2768129E-02 -3.3394616E-02 +-1.4000000E+01 -8.9529242E-01 4.0901718E-02 -5.3435853E-02 +-1.3500000E+01 -8.8699667E-01 3.3187649E-02 -7.4705994E-02 +-1.3000000E+01 -8.7870091E-01 2.5473580E-02 -9.5976134E-02 +-1.2500000E+01 -8.2645570E-01 2.1687489E-02 -1.0698332E-01 +-1.2000000E+01 -7.7421048E-01 1.7901397E-02 -1.1799051E-01 +-1.1500000E+01 -7.1646130E-01 1.6084101E-02 -1.2186851E-01 +-1.1000000E+01 -6.5871211E-01 1.4266805E-02 -1.2574650E-01 +-1.0500000E+01 -5.9830006E-01 1.3334879E-02 -1.2769876E-01 +-1.0000000E+01 -5.3788801E-01 1.2402953E-02 -1.2965102E-01 +-9.5000000E+00 -4.7704887E-01 1.1743114E-02 -1.3119547E-01 +-9.0000000E+00 -4.1620973E-01 1.1083275E-02 -1.3273992E-01 +-8.5000000E+00 -3.5594463E-01 1.0575386E-02 -1.3399676E-01 +-8.0000000E+00 -2.9567953E-01 1.0067496E-02 -1.3525360E-01 +-7.5000000E+00 -2.3622463E-01 9.6788175E-03 -1.3633601E-01 +-7.0000000E+00 -1.7676972E-01 9.2901389E-03 -1.3741841E-01 +-6.5000000E+00 -1.1846463E-01 9.0002149E-03 -1.3846117E-01 +-6.0000000E+00 -6.0159535E-02 8.7102909E-03 -1.3950392E-01 +-5.5000000E+00 -6.4439750E-04 8.4819003E-03 -1.4044771E-01 +-5.0000000E+00 5.8870740E-02 8.2535096E-03 -1.4139150E-01 +-4.5000000E+00 1.1896666E-01 8.0224761E-03 -1.4230337E-01 +-4.0000000E+00 1.7906257E-01 7.7914425E-03 -1.4321523E-01 +-3.5000000E+00 2.3913166E-01 7.6165617E-03 -1.4411139E-01 +-3.0000000E+00 2.9920074E-01 7.4416808E-03 -1.4500754E-01 +-2.5000000E+00 3.5895569E-01 7.3343867E-03 -1.4590797E-01 +-2.0000000E+00 4.1871064E-01 7.2270926E-03 -1.4680839E-01 +-1.5000000E+00 4.7855629E-01 7.1228084E-03 -1.4766048E-01 +-1.0000000E+00 5.3840194E-01 7.0185241E-03 -1.4851256E-01 +-5.0000000E-01 5.9858880E-01 6.8795762E-03 -1.4927122E-01 +0.0000000E+00 6.5877566E-01 6.7406282E-03 -1.5002988E-01 +5.0000000E-01 7.1941267E-01 6.7403141E-03 -1.5074808E-01 +1.0000000E+00 7.8004967E-01 6.7400000E-03 -1.5146628E-01 +1.5000000E+00 8.3816844E-01 6.8947275E-03 -1.5160596E-01 +2.0000000E+00 8.9628720E-01 7.0494550E-03 -1.5174563E-01 +2.5000000E+00 9.5225775E-01 7.2094007E-03 -1.5192498E-01 +3.0000000E+00 1.0082283E+00 7.3693463E-03 -1.5210433E-01 +3.5000000E+00 1.0649419E+00 7.5459198E-03 -1.5197914E-01 +4.0000000E+00 1.1216555E+00 7.7224932E-03 -1.5185395E-01 +4.5000000E+00 1.1790484E+00 7.9887797E-03 -1.5166838E-01 +5.0000000E+00 1.2364412E+00 8.2550661E-03 -1.5148281E-01 +5.5000000E+00 1.2911315E+00 8.5451465E-03 -1.5105930E-01 +6.0000000E+00 1.3458217E+00 8.8352269E-03 -1.5063578E-01 +6.5000000E+00 1.3987349E+00 9.1548924E-03 -1.4999056E-01 +7.0000000E+00 1.4516480E+00 9.4745578E-03 -1.4934533E-01 +7.5000000E+00 1.5024387E+00 9.8680894E-03 -1.4845598E-01 +8.0000000E+00 1.5532294E+00 1.0261621E-02 -1.4756662E-01 +8.5000000E+00 1.6006183E+00 1.0795751E-02 -1.4619628E-01 +9.0000000E+00 1.6480072E+00 1.1329880E-02 -1.4482594E-01 +9.5000000E+00 1.6895051E+00 1.2095909E-02 -1.4312977E-01 +1.0000000E+01 1.7310029E+00 1.2861938E-02 -1.4143360E-01 +1.0500000E+01 1.7523811E+00 1.3709787E-02 -1.3896483E-01 +1.1000000E+01 1.7737592E+00 1.4557635E-02 -1.3649605E-01 +1.1500000E+01 1.7559954E+00 1.8864974E-02 -1.3390148E-01 +1.2000000E+01 1.7382316E+00 2.3172313E-02 -1.3130690E-01 +1.2500000E+01 1.6329848E+00 3.8673912E-02 -1.3237228E-01 +1.3000000E+01 1.5277380E+00 5.4175511E-02 -1.3343766E-01 +1.3500000E+01 1.4996226E+00 7.2910940E-02 -1.3087134E-01 +1.4000000E+01 1.4715072E+00 9.1646369E-02 -1.2830501E-01 +1.4500000E+01 1.4519308E+00 9.8651400E-02 -1.2714268E-01 +1.5000000E+01 1.4323544E+00 1.0565643E-01 -1.2598034E-01 +1.5500000E+01 1.4136528E+00 1.1355748E-01 -1.2547756E-01 +1.6000000E+01 1.3949511E+00 1.2145852E-01 -1.2497478E-01 +1.6500000E+01 1.3771778E+00 1.3149642E-01 -1.2630785E-01 +1.7000000E+01 1.3594044E+00 1.4153432E-01 -1.2764091E-01 +1.7500000E+01 1.3426130E+00 1.5135984E-01 -1.2942521E-01 +1.8000000E+01 1.3258215E+00 1.6118536E-01 -1.3120950E-01 +1.8500000E+01 1.3100655E+00 1.7163450E-01 -1.3281644E-01 +1.9000000E+01 1.2943094E+00 1.8208364E-01 -1.3442338E-01 +1.9500000E+01 1.2796424E+00 1.9292170E-01 -1.3578460E-01 +2.0000000E+01 1.2649754E+00 2.0375975E-01 -1.3714581E-01 +2.1000000E+01 1.2379265E+00 2.2594778E-01 -1.3958378E-01 +2.2000000E+01 1.2132700E+00 2.4860967E-01 -1.4182994E-01 +2.3000000E+01 1.1911130E+00 2.7170740E-01 -1.4397698E-01 +2.4000000E+01 1.1715627E+00 2.9520294E-01 -1.4611757E-01 +2.5000000E+01 1.1547261E+00 3.1905823E-01 -1.4834437E-01 +2.6000000E+01 1.1407104E+00 3.4323527E-01 -1.5075007E-01 +2.7000000E+01 1.1296228E+00 3.6769599E-01 -1.5342733E-01 +2.8000000E+01 1.1215705E+00 3.9240238E-01 -1.5646883E-01 +2.9000000E+01 1.1166605E+00 4.1731639E-01 -1.5996725E-01 +3.0000000E+01 1.1150000E+00 4.4240000E-01 -1.6401525E-01 +3.2000000E+01 1.1200000E+00 4.9415055E-01 -1.7804703E-01 +3.4000000E+01 1.1250000E+00 5.4628325E-01 -1.9127586E-01 +3.6000000E+01 1.1302000E+00 5.9675108E-01 -2.0375902E-01 +3.8000000E+01 1.1400000E+00 6.4593756E-01 -2.1555093E-01 +4.0000000E+01 1.1452397E+00 6.9380000E-01 -2.2670345E-01 +4.2000000E+01 1.1448578E+00 7.4031368E-01 -2.3726624E-01 +4.4000000E+01 1.1381346E+00 7.8551731E-01 -2.4686502E-01 +4.6000000E+01 1.1257306E+00 8.2929407E-01 -2.5570774E-01 +4.8000000E+01 1.1082083E+00 8.7180269E-01 -2.6428767E-01 +5.0000000E+01 1.0860505E+00 9.1270000E-01 -2.7267575E-01 +5.2000000E+01 1.0596750E+00 9.5199445E-01 -2.8092289E-01 +5.4000000E+01 1.0294483E+00 9.8969637E-01 -2.8906318E-01 +5.6000000E+01 9.9569550E-01 1.0254973E+00 -2.9711688E-01 +5.8000000E+01 9.5871014E-01 1.0596647E+00 -3.0509292E-01 +6.0000000E+01 9.1876081E-01 1.0919000E+00 -3.1299114E-01 +6.2000000E+01 8.7609702E-01 1.1222910E+00 -3.2080427E-01 +6.4000000E+01 8.3095338E-01 1.1508772E+00 -3.2851956E-01 +6.6000000E+01 7.8355266E-01 1.1773280E+00 -3.3612028E-01 +6.8000000E+01 7.3410779E-01 1.2020466E+00 -3.4358689E-01 +7.0000000E+01 6.8282291E-01 1.2246000E+00 -3.5089813E-01 +7.2000000E+01 6.2989366E-01 1.2451519E+00 -3.5803189E-01 +7.4000000E+01 5.7550684E-01 1.2638003E+00 -3.6496593E-01 +7.6000000E+01 5.1983937E-01 1.2801051E+00 -3.7167852E-01 +7.8000000E+01 4.6305689E-01 1.2947564E+00 -3.7814897E-01 +8.0000000E+01 4.0531195E-01 1.3070000E+00 -3.8435805E-01 +8.2000000E+01 3.4674178E-01 1.3173181E+00 -3.9028841E-01 +8.4000000E+01 2.8746589E-01 1.3257459E+00 -3.9592486E-01 +8.6000000E+01 2.2758350E-01 1.3311894E+00 -4.0125471E-01 +8.8000000E+01 1.6717078E-01 1.3354616E+00 -4.0626801E-01 +9.0000000E+01 1.0627813E-01 1.3373000E+00 -4.1095779E-01 +9.2000000E+01 4.3021145E-02 1.3363173E+00 -4.1532382E-01 +9.4000000E+01 -1.9038670E-02 1.3339005E+00 -4.1936326E-01 +9.6000000E+01 -8.0928289E-02 1.3302638E+00 -4.2307564E-01 +9.8000000E+01 -1.4244199E-01 1.3232023E+00 -4.2646197E-01 +1.0000000E+02 -2.0337687E-01 1.3142000E+00 -4.2952454E-01 +1.0200000E+02 -2.6353485E-01 1.3032495E+00 -4.3226653E-01 +1.0400000E+02 -3.2272425E-01 1.2897213E+00 -4.3469173E-01 +1.0600000E+02 -3.8076098E-01 1.2744930E+00 -4.3680411E-01 +1.0800000E+02 -4.3746916E-01 1.2567449E+00 -4.3860738E-01 +1.1000000E+02 -4.9268116E-01 1.2370000E+00 -4.4010442E-01 +1.1200000E+02 -5.4623685E-01 1.2151664E+00 -4.4129669E-01 +1.1400000E+02 -5.9798209E-01 1.1910326E+00 -4.4218347E-01 +1.1600000E+02 -6.4776620E-01 1.1650608E+00 -4.4276098E-01 +1.1800000E+02 -6.9543840E-01 1.1367906E+00 -4.4302140E-01 +1.2000000E+02 -7.4080000E-01 1.1066000E+00 -4.4296000E-01 +1.2200000E+02 -7.8380000E-01 1.0744324E+00 -4.4256000E-01 +1.2400000E+02 -8.2420000E-01 1.0402056E+00 -4.4176000E-01 +1.2600000E+02 -8.6170000E-01 1.0042975E+00 -4.4056000E-01 +1.2800000E+02 -8.9610000E-01 9.6640530E-01 -4.3880000E-01 +1.3000000E+02 -9.2710000E-01 9.2690000E-01 -4.3664000E-01 +1.3200000E+02 -9.5440000E-01 8.8578087E-01 -4.3376000E-01 +1.3400000E+02 -9.7740000E-01 8.4305973E-01 -4.3024000E-01 +1.3600000E+02 -9.8970000E-01 7.9909989E-01 -4.2472000E-01 +1.3800000E+02 -1.0021000E+00 7.5363717E-01 -4.1928000E-01 +1.4000000E+02 -1.0144000E+00 7.0750000E-01 -4.1376000E-01 +1.4200000E+02 -9.9520000E-01 6.5965806E-01 -4.0272000E-01 +1.4400000E+02 -9.7590000E-01 6.0912117E-01 -3.9168000E-01 +1.4600000E+02 -9.5670000E-01 5.5696009E-01 -3.8064000E-01 +1.4800000E+02 -9.3100000E-01 5.0424559E-01 -3.6680000E-01 +1.5000000E+02 -8.9100000E-01 4.5204845E-01 -3.4632000E-01 +1.5200000E+02 -8.5090000E-01 4.0143943E-01 -3.2584000E-01 +1.5400000E+02 -8.1090000E-01 3.5348931E-01 -3.0536000E-01 +1.5600000E+02 -7.5770000E-01 3.1504233E-01 -2.7920000E-01 +1.5800000E+02 -7.1650000E-01 2.9154894E-01 -2.5912000E-01 +1.6000000E+02 -7.0000000E-01 2.7693012E-01 -2.5112000E-01 +1.6200000E+02 -7.1300000E-01 2.6510681E-01 -2.5696000E-01 +1.6400000E+02 -7.4870000E-01 2.5000000E-01 -2.7312000E-01 +1.6600000E+02 -7.8613407E-01 2.2703171E-01 -2.9784000E-01 +1.6800000E+02 -8.2227926E-01 1.9762822E-01 -3.2912000E-01 +1.7000000E+02 -8.5000000E-01 1.6471690E-01 -3.6832000E-01 +1.7200000E+02 -8.5228250E-01 1.3122509E-01 -3.3616000E-01 +1.7400000E+02 -7.7260000E-01 1.0008014E-01 -2.7080000E-01 +1.7600000E+02 -6.2980000E-01 7.4209408E-02 -1.9872000E-01 +1.7800000E+02 -5.1490000E-01 5.6540244E-02 -1.3416000E-01 +1.8000000E+02 -4.0000000E-01 5.0000000E-02 -6.9520000E-02 +Profile 2, Set 1 - 100% AOA Cl Cd Cm 100% +-1.8000000E+02 -1.0000000E-03 6.0000000E-01 0.0000000E+00 +-1.7800000E+02 -9.8888889E-04 6.0000000E-01 0.0000000E+00 +-1.7600000E+02 -9.7777778E-04 6.0000000E-01 0.0000000E+00 +-1.7400000E+02 -9.6666667E-04 6.0000000E-01 0.0000000E+00 +-1.7200000E+02 -9.5555556E-04 6.0000000E-01 0.0000000E+00 +-1.7000000E+02 -9.4444444E-04 6.0000000E-01 0.0000000E+00 +-1.6800000E+02 -9.3333333E-04 6.0000000E-01 0.0000000E+00 +-1.6600000E+02 -9.2222222E-04 6.0000000E-01 0.0000000E+00 +-1.6400000E+02 -9.1111111E-04 6.0000000E-01 0.0000000E+00 +-1.6200000E+02 -9.0000000E-04 6.0000000E-01 0.0000000E+00 +-1.6000000E+02 -8.8888889E-04 6.0000000E-01 0.0000000E+00 +-1.5800000E+02 -8.7777778E-04 6.0000000E-01 0.0000000E+00 +-1.5600000E+02 -8.6666667E-04 6.0000000E-01 0.0000000E+00 +-1.5400000E+02 -8.5555556E-04 6.0000000E-01 0.0000000E+00 +-1.5200000E+02 -8.4444444E-04 6.0000000E-01 0.0000000E+00 +-1.5000000E+02 -8.3333333E-04 6.0000000E-01 0.0000000E+00 +-1.4800000E+02 -8.2222222E-04 6.0000000E-01 0.0000000E+00 +-1.4600000E+02 -8.1111111E-04 6.0000000E-01 0.0000000E+00 +-1.4400000E+02 -8.0000000E-04 6.0000000E-01 0.0000000E+00 +-1.4200000E+02 -7.8888889E-04 6.0000000E-01 0.0000000E+00 +-1.4000000E+02 -7.7777778E-04 6.0000000E-01 0.0000000E+00 +-1.3800000E+02 -7.6666667E-04 6.0000000E-01 0.0000000E+00 +-1.3600000E+02 -7.5555556E-04 6.0000000E-01 0.0000000E+00 +-1.3400000E+02 -7.4444444E-04 6.0000000E-01 0.0000000E+00 +-1.3200000E+02 -7.3333333E-04 6.0000000E-01 0.0000000E+00 +-1.3000000E+02 -7.2222222E-04 6.0000000E-01 0.0000000E+00 +-1.2800000E+02 -7.1111111E-04 6.0000000E-01 0.0000000E+00 +-1.2600000E+02 -7.0000000E-04 6.0000000E-01 0.0000000E+00 +-1.2400000E+02 -6.8888889E-04 6.0000000E-01 0.0000000E+00 +-1.2200000E+02 -6.7777778E-04 6.0000000E-01 0.0000000E+00 +-1.2000000E+02 -6.6666667E-04 6.0000000E-01 0.0000000E+00 +-1.1800000E+02 -6.5555556E-04 6.0000000E-01 0.0000000E+00 +-1.1600000E+02 -6.4444444E-04 6.0000000E-01 0.0000000E+00 +-1.1400000E+02 -6.3333333E-04 6.0000000E-01 0.0000000E+00 +-1.1200000E+02 -6.2222222E-04 6.0000000E-01 0.0000000E+00 +-1.1000000E+02 -6.1111111E-04 6.0000000E-01 0.0000000E+00 +-1.0800000E+02 -6.0000000E-04 6.0000000E-01 0.0000000E+00 +-1.0600000E+02 -5.8888889E-04 6.0000000E-01 0.0000000E+00 +-1.0400000E+02 -5.7777778E-04 6.0000000E-01 0.0000000E+00 +-1.0200000E+02 -5.6666667E-04 6.0000000E-01 0.0000000E+00 +-1.0000000E+02 -5.5555556E-04 6.0000000E-01 0.0000000E+00 +-9.8000000E+01 -5.4444444E-04 6.0000000E-01 0.0000000E+00 +-9.6000000E+01 -5.3333333E-04 6.0000000E-01 0.0000000E+00 +-9.4000000E+01 -5.2222222E-04 6.0000000E-01 0.0000000E+00 +-9.2000000E+01 -5.1111111E-04 6.0000000E-01 0.0000000E+00 +-9.0000000E+01 -5.0000000E-04 6.0000000E-01 0.0000000E+00 +-8.8000000E+01 -4.8888889E-04 6.0000000E-01 0.0000000E+00 +-8.6000000E+01 -4.7777778E-04 6.0000000E-01 0.0000000E+00 +-8.4000000E+01 -4.6666667E-04 6.0000000E-01 0.0000000E+00 +-8.2000000E+01 -4.5555556E-04 6.0000000E-01 0.0000000E+00 +-8.0000000E+01 -4.4444444E-04 6.0000000E-01 0.0000000E+00 +-7.8000000E+01 -4.3333333E-04 6.0000000E-01 0.0000000E+00 +-7.6000000E+01 -4.2222222E-04 6.0000000E-01 0.0000000E+00 +-7.4000000E+01 -4.1111111E-04 6.0000000E-01 0.0000000E+00 +-7.2000000E+01 -4.0000000E-04 6.0000000E-01 0.0000000E+00 +-7.0000000E+01 -3.8888889E-04 6.0000000E-01 0.0000000E+00 +-6.8000000E+01 -3.7777778E-04 6.0000000E-01 0.0000000E+00 +-6.6000000E+01 -3.6666667E-04 6.0000000E-01 0.0000000E+00 +-6.4000000E+01 -3.5555556E-04 6.0000000E-01 0.0000000E+00 +-6.2000000E+01 -3.4444444E-04 6.0000000E-01 0.0000000E+00 +-6.0000000E+01 -3.3333333E-04 6.0000000E-01 0.0000000E+00 +-5.8000000E+01 -3.2222222E-04 6.0000000E-01 0.0000000E+00 +-5.6000000E+01 -3.1111111E-04 6.0000000E-01 0.0000000E+00 +-5.4000000E+01 -3.0000000E-04 6.0000000E-01 0.0000000E+00 +-5.2000000E+01 -2.8888889E-04 6.0000000E-01 0.0000000E+00 +-5.0000000E+01 -2.7777778E-04 6.0000000E-01 0.0000000E+00 +-4.8000000E+01 -2.6666667E-04 6.0000000E-01 0.0000000E+00 +-4.6000000E+01 -2.5555556E-04 6.0000000E-01 0.0000000E+00 +-4.4000000E+01 -2.4444444E-04 6.0000000E-01 0.0000000E+00 +-4.2000000E+01 -2.3333333E-04 6.0000000E-01 0.0000000E+00 +-4.0000000E+01 -2.2222222E-04 6.0000000E-01 0.0000000E+00 +-3.8000000E+01 -2.1111111E-04 6.0000000E-01 0.0000000E+00 +-3.6000000E+01 -2.0000000E-04 6.0000000E-01 0.0000000E+00 +-3.4000000E+01 -1.8888889E-04 6.0000000E-01 0.0000000E+00 +-3.2000000E+01 -1.7777778E-04 6.0000000E-01 0.0000000E+00 +-3.0000000E+01 -1.6666667E-04 6.0000000E-01 0.0000000E+00 +-2.9000000E+01 -1.6111111E-04 6.0000000E-01 0.0000000E+00 +-2.8000000E+01 -1.5555556E-04 6.0000000E-01 0.0000000E+00 +-2.7000000E+01 -1.5000000E-04 6.0000000E-01 0.0000000E+00 +-2.6000000E+01 -1.4444444E-04 6.0000000E-01 0.0000000E+00 +-2.5000000E+01 -1.3888889E-04 6.0000000E-01 0.0000000E+00 +-2.4000000E+01 -1.3333333E-04 6.0000000E-01 0.0000000E+00 +-2.3000000E+01 -1.2777778E-04 6.0000000E-01 0.0000000E+00 +-2.2000000E+01 -1.2222222E-04 6.0000000E-01 0.0000000E+00 +-2.1000000E+01 -1.1666667E-04 6.0000000E-01 0.0000000E+00 +-2.0000000E+01 -1.1111111E-04 6.0000000E-01 0.0000000E+00 +-1.9500000E+01 -1.0833333E-04 6.0000000E-01 0.0000000E+00 +-1.9000000E+01 -1.0555556E-04 6.0000000E-01 0.0000000E+00 +-1.8500000E+01 -1.0277778E-04 6.0000000E-01 0.0000000E+00 +-1.8000000E+01 -1.0000000E-04 6.0000000E-01 0.0000000E+00 +-1.7500000E+01 -9.7222222E-05 6.0000000E-01 0.0000000E+00 +-1.7000000E+01 -9.4444444E-05 6.0000000E-01 0.0000000E+00 +-1.6500000E+01 -9.1666667E-05 6.0000000E-01 0.0000000E+00 +-1.6000000E+01 -8.8888889E-05 6.0000000E-01 0.0000000E+00 +-1.5500000E+01 -8.6111111E-05 6.0000000E-01 0.0000000E+00 +-1.5000000E+01 -8.3333333E-05 6.0000000E-01 0.0000000E+00 +-1.4500000E+01 -8.0555556E-05 6.0000000E-01 0.0000000E+00 +-1.4000000E+01 -7.7777778E-05 6.0000000E-01 0.0000000E+00 +-1.3500000E+01 -7.5000000E-05 6.0000000E-01 0.0000000E+00 +-1.3000000E+01 -7.2222222E-05 6.0000000E-01 0.0000000E+00 +-1.2500000E+01 -6.9444444E-05 6.0000000E-01 0.0000000E+00 +-1.2000000E+01 -6.6666667E-05 6.0000000E-01 0.0000000E+00 +-1.1500000E+01 -6.3888889E-05 6.0000000E-01 0.0000000E+00 +-1.1000000E+01 -6.1111111E-05 6.0000000E-01 0.0000000E+00 +-1.0500000E+01 -5.8333333E-05 6.0000000E-01 0.0000000E+00 +-1.0000000E+01 -5.5555556E-05 6.0000000E-01 0.0000000E+00 +-9.5000000E+00 -5.2777778E-05 6.0000000E-01 0.0000000E+00 +-9.0000000E+00 -5.0000000E-05 6.0000000E-01 0.0000000E+00 +-8.5000000E+00 -4.7222222E-05 6.0000000E-01 0.0000000E+00 +-8.0000000E+00 -4.4444444E-05 6.0000000E-01 0.0000000E+00 +-7.5000000E+00 -4.1666667E-05 6.0000000E-01 0.0000000E+00 +-7.0000000E+00 -3.8888889E-05 6.0000000E-01 0.0000000E+00 +-6.5000000E+00 -3.6111111E-05 6.0000000E-01 0.0000000E+00 +-6.0000000E+00 -3.3333333E-05 6.0000000E-01 0.0000000E+00 +-5.5000000E+00 -3.0555556E-05 6.0000000E-01 0.0000000E+00 +-5.0000000E+00 -2.7777778E-05 6.0000000E-01 0.0000000E+00 +-4.5000000E+00 -2.5000000E-05 6.0000000E-01 0.0000000E+00 +-4.0000000E+00 -2.2222222E-05 6.0000000E-01 0.0000000E+00 +-3.5000000E+00 -1.9444444E-05 6.0000000E-01 0.0000000E+00 +-3.0000000E+00 -1.6666667E-05 6.0000000E-01 0.0000000E+00 +-2.5000000E+00 -1.3888889E-05 6.0000000E-01 0.0000000E+00 +-2.0000000E+00 -1.1111111E-05 6.0000000E-01 0.0000000E+00 +-1.5000000E+00 -8.3333333E-06 6.0000000E-01 0.0000000E+00 +-1.0000000E+00 -5.5555556E-06 6.0000000E-01 0.0000000E+00 +-5.0000000E-01 -2.7777778E-06 6.0000000E-01 0.0000000E+00 +0.0000000E+00 1.0842022E-19 6.0000000E-01 0.0000000E+00 +5.0000000E-01 2.7777778E-06 6.0000000E-01 0.0000000E+00 +1.0000000E+00 5.5555556E-06 6.0000000E-01 0.0000000E+00 +1.5000000E+00 8.3333333E-06 6.0000000E-01 0.0000000E+00 +2.0000000E+00 1.1111111E-05 6.0000000E-01 0.0000000E+00 +2.5000000E+00 1.3888889E-05 6.0000000E-01 0.0000000E+00 +3.0000000E+00 1.6666667E-05 6.0000000E-01 0.0000000E+00 +3.5000000E+00 1.9444444E-05 6.0000000E-01 0.0000000E+00 +4.0000000E+00 2.2222222E-05 6.0000000E-01 0.0000000E+00 +4.5000000E+00 2.5000000E-05 6.0000000E-01 0.0000000E+00 +5.0000000E+00 2.7777778E-05 6.0000000E-01 0.0000000E+00 +5.5000000E+00 3.0555556E-05 6.0000000E-01 0.0000000E+00 +6.0000000E+00 3.3333333E-05 6.0000000E-01 0.0000000E+00 +6.5000000E+00 3.6111111E-05 6.0000000E-01 0.0000000E+00 +7.0000000E+00 3.8888889E-05 6.0000000E-01 0.0000000E+00 +7.5000000E+00 4.1666667E-05 6.0000000E-01 0.0000000E+00 +8.0000000E+00 4.4444444E-05 6.0000000E-01 0.0000000E+00 +8.5000000E+00 4.7222222E-05 6.0000000E-01 0.0000000E+00 +9.0000000E+00 5.0000000E-05 6.0000000E-01 0.0000000E+00 +9.5000000E+00 5.2777778E-05 6.0000000E-01 0.0000000E+00 +1.0000000E+01 5.5555556E-05 6.0000000E-01 0.0000000E+00 +1.0500000E+01 5.8333333E-05 6.0000000E-01 0.0000000E+00 +1.1000000E+01 6.1111111E-05 6.0000000E-01 0.0000000E+00 +1.1500000E+01 6.3888889E-05 6.0000000E-01 0.0000000E+00 +1.2000000E+01 6.6666667E-05 6.0000000E-01 0.0000000E+00 +1.2500000E+01 6.9444444E-05 6.0000000E-01 0.0000000E+00 +1.3000000E+01 7.2222222E-05 6.0000000E-01 0.0000000E+00 +1.3500000E+01 7.5000000E-05 6.0000000E-01 0.0000000E+00 +1.4000000E+01 7.7777778E-05 6.0000000E-01 0.0000000E+00 +1.4500000E+01 8.0555556E-05 6.0000000E-01 0.0000000E+00 +1.5000000E+01 8.3333333E-05 6.0000000E-01 0.0000000E+00 +1.5500000E+01 8.6111111E-05 6.0000000E-01 0.0000000E+00 +1.6000000E+01 8.8888889E-05 6.0000000E-01 0.0000000E+00 +1.6500000E+01 9.1666667E-05 6.0000000E-01 0.0000000E+00 +1.7000000E+01 9.4444444E-05 6.0000000E-01 0.0000000E+00 +1.7500000E+01 9.7222222E-05 6.0000000E-01 0.0000000E+00 +1.8000000E+01 1.0000000E-04 6.0000000E-01 0.0000000E+00 +1.8500000E+01 1.0277778E-04 6.0000000E-01 0.0000000E+00 +1.9000000E+01 1.0555556E-04 6.0000000E-01 0.0000000E+00 +1.9500000E+01 1.0833333E-04 6.0000000E-01 0.0000000E+00 +2.0000000E+01 1.1111111E-04 6.0000000E-01 0.0000000E+00 +2.1000000E+01 1.1666667E-04 6.0000000E-01 0.0000000E+00 +2.2000000E+01 1.2222222E-04 6.0000000E-01 0.0000000E+00 +2.3000000E+01 1.2777778E-04 6.0000000E-01 0.0000000E+00 +2.4000000E+01 1.3333333E-04 6.0000000E-01 0.0000000E+00 +2.5000000E+01 1.3888889E-04 6.0000000E-01 0.0000000E+00 +2.6000000E+01 1.4444444E-04 6.0000000E-01 0.0000000E+00 +2.7000000E+01 1.5000000E-04 6.0000000E-01 0.0000000E+00 +2.8000000E+01 1.5555556E-04 6.0000000E-01 0.0000000E+00 +2.9000000E+01 1.6111111E-04 6.0000000E-01 0.0000000E+00 +3.0000000E+01 1.6666667E-04 6.0000000E-01 0.0000000E+00 +3.2000000E+01 1.7777778E-04 6.0000000E-01 0.0000000E+00 +3.4000000E+01 1.8888889E-04 6.0000000E-01 0.0000000E+00 +3.6000000E+01 2.0000000E-04 6.0000000E-01 0.0000000E+00 +3.8000000E+01 2.1111111E-04 6.0000000E-01 0.0000000E+00 +4.0000000E+01 2.2222222E-04 6.0000000E-01 0.0000000E+00 +4.2000000E+01 2.3333333E-04 6.0000000E-01 0.0000000E+00 +4.4000000E+01 2.4444444E-04 6.0000000E-01 0.0000000E+00 +4.6000000E+01 2.5555556E-04 6.0000000E-01 0.0000000E+00 +4.8000000E+01 2.6666667E-04 6.0000000E-01 0.0000000E+00 +5.0000000E+01 2.7777778E-04 6.0000000E-01 0.0000000E+00 +5.2000000E+01 2.8888889E-04 6.0000000E-01 0.0000000E+00 +5.4000000E+01 3.0000000E-04 6.0000000E-01 0.0000000E+00 +5.6000000E+01 3.1111111E-04 6.0000000E-01 0.0000000E+00 +5.8000000E+01 3.2222222E-04 6.0000000E-01 0.0000000E+00 +6.0000000E+01 3.3333333E-04 6.0000000E-01 0.0000000E+00 +6.2000000E+01 3.4444444E-04 6.0000000E-01 0.0000000E+00 +6.4000000E+01 3.5555556E-04 6.0000000E-01 0.0000000E+00 +6.6000000E+01 3.6666667E-04 6.0000000E-01 0.0000000E+00 +6.8000000E+01 3.7777778E-04 6.0000000E-01 0.0000000E+00 +7.0000000E+01 3.8888889E-04 6.0000000E-01 0.0000000E+00 +7.2000000E+01 4.0000000E-04 6.0000000E-01 0.0000000E+00 +7.4000000E+01 4.1111111E-04 6.0000000E-01 0.0000000E+00 +7.6000000E+01 4.2222222E-04 6.0000000E-01 0.0000000E+00 +7.8000000E+01 4.3333333E-04 6.0000000E-01 0.0000000E+00 +8.0000000E+01 4.4444444E-04 6.0000000E-01 0.0000000E+00 +8.2000000E+01 4.5555556E-04 6.0000000E-01 0.0000000E+00 +8.4000000E+01 4.6666667E-04 6.0000000E-01 0.0000000E+00 +8.6000000E+01 4.7777778E-04 6.0000000E-01 0.0000000E+00 +8.8000000E+01 4.8888889E-04 6.0000000E-01 0.0000000E+00 +9.0000000E+01 5.0000000E-04 6.0000000E-01 0.0000000E+00 +9.2000000E+01 5.1111111E-04 6.0000000E-01 0.0000000E+00 +9.4000000E+01 5.2222222E-04 6.0000000E-01 0.0000000E+00 +9.6000000E+01 5.3333333E-04 6.0000000E-01 0.0000000E+00 +9.8000000E+01 5.4444444E-04 6.0000000E-01 0.0000000E+00 +1.0000000E+02 5.5555556E-04 6.0000000E-01 0.0000000E+00 +1.0200000E+02 5.6666667E-04 6.0000000E-01 0.0000000E+00 +1.0400000E+02 5.7777778E-04 6.0000000E-01 0.0000000E+00 +1.0600000E+02 5.8888889E-04 6.0000000E-01 0.0000000E+00 +1.0800000E+02 6.0000000E-04 6.0000000E-01 0.0000000E+00 +1.1000000E+02 6.1111111E-04 6.0000000E-01 0.0000000E+00 +1.1200000E+02 6.2222222E-04 6.0000000E-01 0.0000000E+00 +1.1400000E+02 6.3333333E-04 6.0000000E-01 0.0000000E+00 +1.1600000E+02 6.4444444E-04 6.0000000E-01 0.0000000E+00 +1.1800000E+02 6.5555556E-04 6.0000000E-01 0.0000000E+00 +1.2000000E+02 6.6666667E-04 6.0000000E-01 0.0000000E+00 +1.2200000E+02 6.7777778E-04 6.0000000E-01 0.0000000E+00 +1.2400000E+02 6.8888889E-04 6.0000000E-01 0.0000000E+00 +1.2600000E+02 7.0000000E-04 6.0000000E-01 0.0000000E+00 +1.2800000E+02 7.1111111E-04 6.0000000E-01 0.0000000E+00 +1.3000000E+02 7.2222222E-04 6.0000000E-01 0.0000000E+00 +1.3200000E+02 7.3333333E-04 6.0000000E-01 0.0000000E+00 +1.3400000E+02 7.4444444E-04 6.0000000E-01 0.0000000E+00 +1.3600000E+02 7.5555556E-04 6.0000000E-01 0.0000000E+00 +1.3800000E+02 7.6666667E-04 6.0000000E-01 0.0000000E+00 +1.4000000E+02 7.7777778E-04 6.0000000E-01 0.0000000E+00 +1.4200000E+02 7.8888889E-04 6.0000000E-01 0.0000000E+00 +1.4400000E+02 8.0000000E-04 6.0000000E-01 0.0000000E+00 +1.4600000E+02 8.1111111E-04 6.0000000E-01 0.0000000E+00 +1.4800000E+02 8.2222222E-04 6.0000000E-01 0.0000000E+00 +1.5000000E+02 8.3333333E-04 6.0000000E-01 0.0000000E+00 +1.5200000E+02 8.4444444E-04 6.0000000E-01 0.0000000E+00 +1.5400000E+02 8.5555556E-04 6.0000000E-01 0.0000000E+00 +1.5600000E+02 8.6666667E-04 6.0000000E-01 0.0000000E+00 +1.5800000E+02 8.7777778E-04 6.0000000E-01 0.0000000E+00 +1.6000000E+02 8.8888889E-04 6.0000000E-01 0.0000000E+00 +1.6200000E+02 9.0000000E-04 6.0000000E-01 0.0000000E+00 +1.6400000E+02 9.1111111E-04 6.0000000E-01 0.0000000E+00 +1.6600000E+02 9.2222222E-04 6.0000000E-01 0.0000000E+00 +1.6800000E+02 9.3333333E-04 6.0000000E-01 0.0000000E+00 +1.7000000E+02 9.4444444E-04 6.0000000E-01 0.0000000E+00 +1.7200000E+02 9.5555556E-04 6.0000000E-01 0.0000000E+00 +1.7400000E+02 9.6666667E-04 6.0000000E-01 0.0000000E+00 +1.7600000E+02 9.7777778E-04 6.0000000E-01 0.0000000E+00 +1.7800000E+02 9.8888889E-04 6.0000000E-01 0.0000000E+00 +1.8000000E+02 1.0000000E-03 6.0000000E-01 0.0000000E+00 +PROFILE SET 2: Comment 2 +2 +24.00 57.00 +251 +Profile 1, Set 2 - 24% AOA Cl Cd Cm 24% +-1.8000000E+02 -3.7080000E-01 5.0000000E-02 -6.6800000E-02 +-1.7800000E+02 -2.3007983E-01 5.6996066E-02 3.2800000E-03 +-1.7600000E+02 -7.5517601E-02 7.5772226E-02 7.6720000E-02 +-1.7400000E+02 9.3181440E-02 1.0301042E-01 1.5672000E-01 +-1.7200000E+02 2.7482692E-01 1.3539260E-01 2.3360000E-01 +-1.7000000E+02 4.3933974E-01 1.6960071E-01 2.7136000E-01 +-1.6800000E+02 4.8560200E-01 2.0231668E-01 2.6528000E-01 +-1.6600000E+02 5.0317695E-01 2.3022246E-01 2.5376000E-01 +-1.6400000E+02 4.6171454E-01 2.5000000E-01 2.4000000E-01 +-1.6200000E+02 4.3287137E-01 2.5997675E-01 2.3248000E-01 +-1.6000000E+02 4.1880299E-01 2.6506223E-01 2.2912000E-01 +-1.5800000E+02 4.2920973E-01 2.7181146E-01 2.3536000E-01 +-1.5600000E+02 4.6048810E-01 2.8677947E-01 2.5264000E-01 +-1.5400000E+02 5.1290839E-01 3.1652130E-01 2.7873657E-01 +-1.5200000E+02 5.7230396E-01 3.5940305E-01 3.0006065E-01 +-1.5000000E+02 6.2478753E-01 4.0494886E-01 3.2308783E-01 +-1.4800000E+02 6.6019994E-01 4.5225476E-01 3.3980436E-01 +-1.4600000E+02 6.9210804E-01 5.0041679E-01 3.5551030E-01 +-1.4400000E+02 7.1753888E-01 5.4853098E-01 3.6985848E-01 +-1.4200000E+02 7.3662342E-01 5.9569337E-01 3.8288806E-01 +-1.4000000E+02 7.4955176E-01 6.4100000E-01 3.9464363E-01 +-1.3800000E+02 7.5655990E-01 6.8590215E-01 4.0517341E-01 +-1.3600000E+02 7.5791802E-01 7.3120113E-01 4.1452780E-01 +-1.3400000E+02 7.5392024E-01 7.7531136E-01 4.2275813E-01 +-1.3200000E+02 7.4487604E-01 8.1857786E-01 4.2991567E-01 +-1.3000000E+02 7.3110303E-01 8.6060000E-01 4.3605090E-01 +-1.2800000E+02 7.1292122E-01 9.0132006E-01 4.4121290E-01 +-1.2600000E+02 6.9064833E-01 9.4068533E-01 4.4544903E-01 +-1.2400000E+02 6.6459625E-01 9.7821853E-01 4.4880461E-01 +-1.2200000E+02 6.3506842E-01 1.0142228E+00 4.5132287E-01 +-1.2000000E+02 6.0235788E-01 1.0482000E+00 4.5304487E-01 +-1.1800000E+02 5.6674603E-01 1.0802061E+00 4.5400954E-01 +-1.1600000E+02 5.2850190E-01 1.1102554E+00 4.5425378E-01 +-1.1400000E+02 4.8788183E-01 1.1378430E+00 4.5381259E-01 +-1.1200000E+02 4.4512948E-01 1.1634949E+00 4.5271919E-01 +-1.1000000E+02 4.0047618E-01 1.1866000E+00 4.5100519E-01 +-1.0800000E+02 3.5414141E-01 1.2073773E+00 4.4870078E-01 +-1.0600000E+02 3.0633355E-01 1.2259430E+00 4.4583483E-01 +-1.0400000E+02 2.5725070E-01 1.2416746E+00 4.4243506E-01 +-1.0200000E+02 2.0708164E-01 1.2555655E+00 4.3852819E-01 +-1.0000000E+02 1.5600689E-01 1.2665000E+00 4.3414003E-01 +-9.8000000E+01 1.0419980E-01 1.2752980E+00 4.2929558E-01 +-9.6000000E+01 5.1827745E-02 1.2819458E+00 4.2401913E-01 +-9.4000000E+01 -9.4667954E-04 1.2844808E+00 4.1833426E-01 +-9.2000000E+01 -5.3964404E-02 1.2857982E+00 4.1226392E-01 +-9.0000000E+01 -1.0706861E-01 1.2863000E+00 4.0583041E-01 +-8.8000000E+01 -1.6010345E-01 1.2837866E+00 3.9905539E-01 +-8.6000000E+01 -2.1291271E-01 1.2780933E+00 3.9195980E-01 +-8.4000000E+01 -2.6533855E-01 1.2713222E+00 3.8456387E-01 +-8.2000000E+01 -3.1722013E-01 1.2617782E+00 3.7688695E-01 +-8.0000000E+01 -3.6839234E-01 1.2504000E+00 3.6894750E-01 +-7.8000000E+01 -4.1868451E-01 1.2372024E+00 3.6076287E-01 +-7.6000000E+01 -4.6791909E-01 1.2217980E+00 3.5234924E-01 +-7.4000000E+01 -5.1591044E-01 1.2049106E+00 3.4372142E-01 +-7.2000000E+01 -5.6246361E-01 1.1859838E+00 3.3489264E-01 +-7.0000000E+01 -6.0737319E-01 1.1654000E+00 3.2587438E-01 +-6.8000000E+01 -6.5042225E-01 1.1431275E+00 3.1667613E-01 +-6.6000000E+01 -6.9138133E-01 1.1190173E+00 3.0730511E-01 +-6.4000000E+01 -7.3000761E-01 1.0933857E+00 2.9776607E-01 +-6.2000000E+01 -7.6604423E-01 1.0659453E+00 2.8806090E-01 +-6.0000000E+01 -7.9921980E-01 1.0368000E+00 2.7818840E-01 +-5.8000000E+01 -8.2924816E-01 1.0058711E+00 2.6814391E-01 +-5.6000000E+01 -8.5582850E-01 9.7301646E-01 2.5791893E-01 +-5.4000000E+01 -8.7864587E-01 9.3829725E-01 2.4750078E-01 +-5.2000000E+01 -8.9737214E-01 9.0149442E-01 2.3687219E-01 +-5.0000000E+01 -9.1166766E-01 8.6250000E-01 2.2601086E-01 +-4.8000000E+01 -9.2118350E-01 8.2116674E-01 2.1488911E-01 +-4.6000000E+01 -9.2556467E-01 7.7724007E-01 2.0347336E-01 +-4.4000000E+01 -9.2445423E-01 7.3039427E-01 1.9172381E-01 +-4.2000000E+01 -9.1749853E-01 6.8020982E-01 1.7959393E-01 +-4.0000000E+01 -9.0984107E-01 6.2730000E-01 1.6703018E-01 +-3.8000000E+01 -9.0161414E-01 5.7149033E-01 1.5397159E-01 +-3.6000000E+01 -8.9242716E-01 5.1292880E-01 1.4034954E-01 +-3.4000000E+01 -8.8132520E-01 4.5131152E-01 1.2608748E-01 +-3.2000000E+01 -8.7021442E-01 3.8431956E-01 1.1110090E-01 +-3.0000000E+01 -8.5909483E-01 3.2610000E-01 9.4958218E-02 +-2.9000000E+01 -8.5976973E-01 3.0497775E-01 8.7667452E-02 +-2.8000000E+01 -8.6159135E-01 2.8666880E-01 8.0668716E-02 +-2.7000000E+01 -8.6425508E-01 2.7054544E-01 7.3910297E-02 +-2.6000000E+01 -8.6745631E-01 2.5597998E-01 6.7340483E-02 +-2.5000000E+01 -8.7089041E-01 2.4234474E-01 6.0907558E-02 +-2.4000000E+01 -8.7425279E-01 2.2901202E-01 5.4559810E-02 +-2.3000000E+01 -8.7813915E-01 2.1690612E-01 4.8466134E-02 +-2.2000000E+01 -8.8189576E-01 2.0550890E-01 4.2368435E-02 +-2.1000000E+01 -8.8532825E-01 1.9464944E-01 3.6196697E-02 +-2.0000000E+01 -8.8824227E-01 1.8415686E-01 2.9880905E-02 +-1.9500000E+01 -8.8934285E-01 1.7900855E-01 2.6615975E-02 +-1.9000000E+01 -8.9044343E-01 1.7386023E-01 2.3351044E-02 +-1.8500000E+01 -8.9109040E-01 1.6872445E-01 1.9944072E-02 +-1.8000000E+01 -8.9173737E-01 1.6358867E-01 1.6537099E-02 +-1.7500000E+01 -8.9146773E-01 1.5837997E-01 1.2953077E-02 +-1.7000000E+01 -8.9119808E-01 1.5317127E-01 9.3690542E-03 +-1.6500000E+01 -8.8651715E-01 1.4780420E-01 5.5729745E-03 +-1.6000000E+01 -8.8183622E-01 1.4243713E-01 1.7768947E-03 +-1.5500000E+01 -8.7483575E-01 1.3682624E-01 -2.2662501E-03 +-1.5000000E+01 -8.6783528E-01 1.3121534E-01 -6.3093948E-03 +-1.4500000E+01 -8.5659133E-01 1.2527518E-01 -1.0634612E-02 +-1.4000000E+01 -8.4534737E-01 1.1933501E-01 -1.4959829E-02 +-1.3500000E+01 -8.2985818E-01 1.1298012E-01 -1.9602127E-02 +-1.3000000E+01 -8.1436899E-01 1.0662523E-01 -2.4244424E-02 +-1.2500000E+01 -7.9499698E-01 9.9770162E-02 -2.9238809E-02 +-1.2000000E+01 -7.7562497E-01 9.2915094E-02 -3.4233194E-02 +-1.1500000E+01 -7.5042427E-01 8.4917922E-02 -3.9863844E-02 +-1.1000000E+01 -7.2522356E-01 7.6920749E-02 -4.5494493E-02 +-1.0500000E+01 -7.0166226E-01 7.1444718E-02 -6.1634335E-02 +-1.0000000E+01 -6.7810095E-01 6.5968686E-02 -7.7774177E-02 +-9.5000000E+00 -6.3087528E-01 5.4937458E-02 -8.7344419E-02 +-9.0000000E+00 -5.8364960E-01 4.3906229E-02 -9.6914660E-02 +-8.5000000E+00 -5.3119389E-01 3.1801879E-02 -1.0447700E-01 +-8.0000000E+00 -4.7873818E-01 1.9697529E-02 -1.1203933E-01 +-7.5000000E+00 -4.0984329E-01 1.5668509E-02 -1.2340658E-01 +-7.0000000E+00 -3.4094839E-01 1.1639488E-02 -1.3477382E-01 +-6.5000000E+00 -2.7319015E-01 1.1511571E-02 -1.4005509E-01 +-6.0000000E+00 -2.0543190E-01 1.1383654E-02 -1.4533636E-01 +-5.5000000E+00 -1.4008407E-01 1.0887060E-02 -1.4802557E-01 +-5.0000000E+00 -7.4736249E-02 1.0390466E-02 -1.5071477E-01 +-4.5000000E+00 -1.0925257E-02 1.0187598E-02 -1.5226586E-01 +-4.0000000E+00 5.2885736E-02 9.9847291E-03 -1.5381694E-01 +-3.5000000E+00 1.1494406E-01 1.0023815E-02 -1.5475831E-01 +-3.0000000E+00 1.7700239E-01 1.0062900E-02 -1.5569968E-01 +-2.5000000E+00 2.3900932E-01 1.0124970E-02 -1.5639901E-01 +-2.0000000E+00 3.0101624E-01 1.0187039E-02 -1.5709834E-01 +-1.5000000E+00 3.6396668E-01 1.0281807E-02 -1.5767127E-01 +-1.0000000E+00 4.2691712E-01 1.0376574E-02 -1.5824419E-01 +-5.0000000E-01 4.8963800E-01 1.0501861E-02 -1.5873509E-01 +0.0000000E+00 5.5235887E-01 1.0627147E-02 -1.5922598E-01 +5.0000000E-01 6.1409321E-01 1.0787656E-02 -1.5966991E-01 +1.0000000E+00 6.7582754E-01 1.0948164E-02 -1.6011383E-01 +1.5000000E+00 7.3681057E-01 1.1136666E-02 -1.6045572E-01 +2.0000000E+00 7.9779359E-01 1.1325167E-02 -1.6079761E-01 +2.5000000E+00 8.5929688E-01 1.1550519E-02 -1.6108218E-01 +3.0000000E+00 9.2080016E-01 1.1775871E-02 -1.6136674E-01 +3.5000000E+00 9.8203113E-01 1.2036683E-02 -1.6155182E-01 +4.0000000E+00 1.0432621E+00 1.2297495E-02 -1.6173689E-01 +4.5000000E+00 1.1033698E+00 1.2604357E-02 -1.6167774E-01 +5.0000000E+00 1.1634774E+00 1.2911219E-02 -1.6161858E-01 +5.5000000E+00 1.2219564E+00 1.3275399E-02 -1.6140612E-01 +6.0000000E+00 1.2804353E+00 1.3639579E-02 -1.6119365E-01 +6.5000000E+00 1.3338964E+00 1.4111196E-02 -1.6076362E-01 +7.0000000E+00 1.3873575E+00 1.4582812E-02 -1.6033358E-01 +7.5000000E+00 1.4457454E+00 1.4886902E-02 -1.5977991E-01 +8.0000000E+00 1.5041332E+00 1.5190991E-02 -1.5922624E-01 +8.5000000E+00 1.5531272E+00 1.5840679E-02 -1.5842394E-01 +9.0000000E+00 1.6021211E+00 1.6490367E-02 -1.5762163E-01 +9.5000000E+00 1.6454078E+00 1.6931419E-02 -1.5669297E-01 +1.0000000E+01 1.6886945E+00 1.7372471E-02 -1.5576430E-01 +1.0500000E+01 1.7129639E+00 1.7904612E-02 -1.5427137E-01 +1.1000000E+01 1.7372332E+00 1.8436752E-02 -1.5277843E-01 +1.1500000E+01 1.7723415E+00 1.9408985E-02 -1.5063186E-01 +1.2000000E+01 1.8074498E+00 2.0381218E-02 -1.4848529E-01 +1.2500000E+01 1.8441227E+00 2.1553468E-02 -1.4612356E-01 +1.3000000E+01 1.8807955E+00 2.2725718E-02 -1.4376182E-01 +1.3500000E+01 1.8988876E+00 2.4025093E-02 -1.4349296E-01 +1.4000000E+01 1.9169797E+00 2.5324467E-02 -1.4322409E-01 +1.4500000E+01 1.8570856E+00 7.9539379E-02 -1.4675834E-01 +1.5000000E+01 1.7971915E+00 1.3375429E-01 -1.5029258E-01 +1.5500000E+01 1.7559874E+00 1.4584513E-01 -1.5227813E-01 +1.6000000E+01 1.7147832E+00 1.5793596E-01 -1.5426368E-01 +1.6500000E+01 1.6758508E+00 1.6932982E-01 -1.5495058E-01 +1.7000000E+01 1.6369184E+00 1.8072367E-01 -1.5563747E-01 +1.7500000E+01 1.6003422E+00 1.9152197E-01 -1.5615981E-01 +1.8000000E+01 1.5637660E+00 2.0232026E-01 -1.5668214E-01 +1.8500000E+01 1.5296305E+00 2.1262440E-01 -1.5706803E-01 +1.9000000E+01 1.4954950E+00 2.2292854E-01 -1.5745392E-01 +1.9500000E+01 1.4638847E+00 2.3283994E-01 -1.5773148E-01 +2.0000000E+01 1.4322743E+00 2.4275134E-01 -1.5800904E-01 +2.1000000E+01 1.3742728E+00 2.6199150E-01 -1.5840372E-01 +2.2000000E+01 1.3216595E+00 2.8085183E-01 -1.5869422E-01 +2.3000000E+01 1.2746033E+00 2.9953516E-01 -1.5893675E-01 +2.4000000E+01 1.2332732E+00 3.1824432E-01 -1.5918756E-01 +2.5000000E+01 1.1978381E+00 3.3718214E-01 -1.5950288E-01 +2.6000000E+01 1.1684669E+00 3.5655144E-01 -1.5993893E-01 +2.7000000E+01 1.1453285E+00 3.7655505E-01 -1.6055197E-01 +2.8000000E+01 1.1285920E+00 3.9739580E-01 -1.6139821E-01 +2.9000000E+01 1.1184261E+00 4.1927650E-01 -1.6253389E-01 +3.0000000E+01 1.1150000E+00 4.4240000E-01 -1.6401525E-01 +3.2000000E+01 1.1189099E+00 4.9324020E-01 -1.7804703E-01 +3.4000000E+01 1.1228100E+00 5.4608095E-01 -1.9127586E-01 +3.6000000E+01 1.1268998E+00 5.9675108E-01 -2.0375902E-01 +3.8000000E+01 1.1355616E+00 6.4593756E-01 -2.1555093E-01 +4.0000000E+01 1.1396662E+00 6.9380000E-01 -2.2670345E-01 +4.2000000E+01 1.1381718E+00 7.4031368E-01 -2.3726624E-01 +4.4000000E+01 1.1303801E+00 7.8551731E-01 -2.4686502E-01 +4.6000000E+01 1.1169649E+00 8.2929407E-01 -2.5570774E-01 +4.8000000E+01 1.0985004E+00 8.7180269E-01 -2.6428767E-01 +5.0000000E+01 1.0754796E+00 9.1270000E-01 -2.7267575E-01 +5.2000000E+01 1.0483295E+00 9.5199445E-01 -2.8092289E-01 +5.4000000E+01 1.0174243E+00 9.8969637E-01 -2.8906318E-01 +5.6000000E+01 9.8309664E-01 1.0254973E+00 -2.9711688E-01 +5.8000000E+01 9.4564611E-01 1.0596647E+00 -3.0509292E-01 +6.0000000E+01 9.0534690E-01 1.0919000E+00 -3.1299114E-01 +6.2000000E+01 8.6245327E-01 1.1222910E+00 -3.2080427E-01 +6.4000000E+01 8.1720387E-01 1.1508772E+00 -3.2851956E-01 +6.6000000E+01 7.6982482E-01 1.1773280E+00 -3.3612028E-01 +6.8000000E+01 7.2053169E-01 1.2020466E+00 -3.4358689E-01 +7.0000000E+01 6.6953062E-01 1.2246000E+00 -3.5089813E-01 +7.2000000E+01 6.1701864E-01 1.2451519E+00 -3.5803189E-01 +7.4000000E+01 5.6318332E-01 1.2638003E+00 -3.6496593E-01 +7.6000000E+01 5.0820189E-01 1.2801051E+00 -3.7167852E-01 +7.8000000E+01 4.5223988E-01 1.2947564E+00 -3.7814897E-01 +8.0000000E+01 3.9544936E-01 1.3070000E+00 -3.8435805E-01 +8.2000000E+01 3.3796690E-01 1.3173181E+00 -3.9028841E-01 +8.4000000E+01 2.7991129E-01 1.3257459E+00 -3.9592486E-01 +8.6000000E+01 2.2138109E-01 1.3311894E+00 -4.0125471E-01 +8.8000000E+01 1.6245211E-01 1.3354616E+00 -4.0626801E-01 +9.0000000E+01 1.0317481E-01 1.3373000E+00 -4.1095779E-01 +9.2000000E+01 4.1723054E-02 1.3363173E+00 -4.1532382E-01 +9.4000000E+01 -1.8445679E-02 1.3339005E+00 -4.1936326E-01 +9.6000000E+01 -7.8328872E-02 1.3302638E+00 -4.2307564E-01 +9.8000000E+01 -1.3772811E-01 1.3232023E+00 -4.2646197E-01 +1.0000000E+02 -1.9644850E-01 1.3142000E+00 -4.2952454E-01 +1.0200000E+02 -2.5430058E-01 1.3032495E+00 -4.3226653E-01 +1.0400000E+02 -3.1110187E-01 1.2897213E+00 -4.3469173E-01 +1.0600000E+02 -3.6667790E-01 1.2744930E+00 -4.3680411E-01 +1.0800000E+02 -4.2086284E-01 1.2567449E+00 -4.3860738E-01 +1.1000000E+02 -4.7349944E-01 1.2370000E+00 -4.4010442E-01 +1.1200000E+02 -5.2443836E-01 1.2151664E+00 -4.4129669E-01 +1.1400000E+02 -5.7353658E-01 1.1910326E+00 -4.4218347E-01 +1.1600000E+02 -6.2065503E-01 1.1650608E+00 -4.4276098E-01 +1.1800000E+02 -6.6565509E-01 1.1367906E+00 -4.4302140E-01 +1.2000000E+02 -7.0835296E-01 1.1066000E+00 -4.4296000E-01 +1.2200000E+02 -7.4870666E-01 1.0744324E+00 -4.4256000E-01 +1.2400000E+02 -7.8649560E-01 1.0402056E+00 -4.4176000E-01 +1.2600000E+02 -8.2144138E-01 1.0042975E+00 -4.4056000E-01 +1.2800000E+02 -8.5336200E-01 9.6640530E-01 -4.3880000E-01 +1.3000000E+02 -8.8198113E-01 9.2690000E-01 -4.3664000E-01 +1.3200000E+02 -9.0702358E-01 8.8578087E-01 -4.3376000E-01 +1.3400000E+02 -9.2793053E-01 8.4305973E-01 -4.3024000E-01 +1.3600000E+02 -9.3864468E-01 7.9909989E-01 -4.2472000E-01 +1.3800000E+02 -9.4942962E-01 7.5363717E-01 -4.1928000E-01 +1.4000000E+02 -9.6009579E-01 7.0750000E-01 -4.1376000E-01 +1.4200000E+02 -9.4095497E-01 6.5959283E-01 -4.0272000E-01 +1.4400000E+02 -9.2175707E-01 6.0888925E-01 -3.9168000E-01 +1.4600000E+02 -9.0269110E-01 5.5650350E-01 -3.8064000E-01 +1.4800000E+02 -8.7753577E-01 5.0354984E-01 -3.6680000E-01 +1.5000000E+02 -8.3896560E-01 4.5114253E-01 -3.4632000E-01 +1.5200000E+02 -8.0037923E-01 4.0039581E-01 -3.2584000E-01 +1.5400000E+02 -7.6196489E-01 3.5242395E-01 -3.0536000E-01 +1.5600000E+02 -7.1123784E-01 3.1404132E-01 -2.7920000E-01 +1.5800000E+02 -6.7186683E-01 2.9074532E-01 -2.5912000E-01 +1.6000000E+02 -6.5571333E-01 2.7639825E-01 -2.5112000E-01 +1.6200000E+02 -6.6719688E-01 2.6486238E-01 -2.5696000E-01 +1.6400000E+02 -6.9987478E-01 2.5000000E-01 -2.7312000E-01 +1.6600000E+02 -7.5236044E-01 2.2718741E-01 -2.9784000E-01 +1.6800000E+02 -8.1642199E-01 1.9785702E-01 -3.2912000E-01 +1.7000000E+02 -8.5000000E-01 1.6495522E-01 -3.6832000E-01 +1.7200000E+02 -8.1865860E-01 1.3142846E-01 -3.3616000E-01 +1.7400000E+02 -7.1845619E-01 1.0022313E-01 -2.7080000E-01 +1.7600000E+02 -5.8505061E-01 7.4285672E-02 -1.9872000E-01 +1.7800000E+02 -4.7781347E-01 5.6562488E-02 -1.3416000E-01 +1.8000000E+02 -3.7080000E-01 5.0000000E-02 -6.9520000E-02 +Profile 2, Set 2 - 57% AOA Cl Cd Cm 57% +-1.8000000E+02 -2.6086270E-01 2.4065434E-01 -6.6800000E-02 +-1.7800000E+02 -1.6200987E-01 2.3313291E-01 3.2800000E-03 +-1.7600000E+02 -5.3223218E-02 2.2711022E-01 7.6720000E-02 +-1.7400000E+02 6.5731224E-02 2.2241974E-01 1.5672000E-01 +-1.7200000E+02 1.9403956E-01 2.1889494E-01 2.3360000E-01 +-1.7000000E+02 3.1046992E-01 2.1636929E-01 2.7136000E-01 +-1.6800000E+02 3.4346850E-01 2.1467628E-01 2.6528000E-01 +-1.6600000E+02 3.5621641E-01 2.1364937E-01 2.5376000E-01 +-1.6400000E+02 3.2715444E-01 2.1312203E-01 2.4000000E-01 +-1.6200000E+02 3.0698954E-01 2.1292775E-01 2.3248000E-01 +-1.6000000E+02 2.9727562E-01 2.1290000E-01 2.2912000E-01 +-1.5800000E+02 3.0493217E-01 2.2091983E-01 2.3536000E-01 +-1.5600000E+02 3.2744292E-01 2.4331762E-01 2.5264000E-01 +-1.5400000E+02 3.6503951E-01 2.7760082E-01 2.7873657E-01 +-1.5200000E+02 4.0767028E-01 3.2127687E-01 3.0006065E-01 +-1.5000000E+02 4.4544722E-01 3.7185322E-01 3.2308783E-01 +-1.4800000E+02 4.7110785E-01 4.2683731E-01 3.3980436E-01 +-1.4600000E+02 4.9430964E-01 4.8373659E-01 3.5551030E-01 +-1.4400000E+02 5.1292081E-01 5.4005850E-01 3.6985848E-01 +-1.4200000E+02 5.2702288E-01 5.9331049E-01 3.8288806E-01 +-1.4000000E+02 5.3674007E-01 6.4100000E-01 3.9464363E-01 +-1.3800000E+02 5.4222998E-01 6.8590215E-01 4.0517341E-01 +-1.3600000E+02 5.4367533E-01 7.3120113E-01 4.1452780E-01 +-1.3400000E+02 5.4127674E-01 7.7531136E-01 4.2275813E-01 +-1.3200000E+02 5.3524658E-01 8.1857786E-01 4.2991567E-01 +-1.3000000E+02 5.2580391E-01 8.6060000E-01 4.3605090E-01 +-1.2800000E+02 5.1317025E-01 9.0132006E-01 4.4121290E-01 +-1.2600000E+02 4.9756633E-01 9.4068533E-01 4.4544903E-01 +-1.2400000E+02 4.7920946E-01 9.7821853E-01 4.4880461E-01 +-1.2200000E+02 4.5831163E-01 1.0142228E+00 4.5132287E-01 +-1.2000000E+02 4.3507808E-01 1.0482000E+00 4.5304487E-01 +-1.1800000E+02 4.0970638E-01 1.0802061E+00 4.5400954E-01 +-1.1600000E+02 3.8238587E-01 1.1102554E+00 4.5425378E-01 +-1.1400000E+02 3.5329732E-01 1.1378430E+00 4.5381259E-01 +-1.1200000E+02 3.2261301E-01 1.1634949E+00 4.5271919E-01 +-1.1000000E+02 2.9049685E-01 1.1866000E+00 4.5100519E-01 +-1.0800000E+02 2.5710473E-01 1.2073773E+00 4.4870078E-01 +-1.0600000E+02 2.2258502E-01 1.2259430E+00 4.4583483E-01 +-1.0400000E+02 1.8707913E-01 1.2416746E+00 4.4243506E-01 +-1.0200000E+02 1.5072219E-01 1.2555655E+00 4.3852819E-01 +-1.0000000E+02 1.1364376E-01 1.2665000E+00 4.3414003E-01 +-9.8000000E+01 7.5968638E-02 1.2752980E+00 4.2929558E-01 +-9.6000000E+01 3.7817674E-02 1.2819458E+00 4.2401913E-01 +-9.4000000E+01 -6.9135313E-04 1.2844808E+00 4.1833426E-01 +-9.2000000E+01 -3.9442841E-02 1.2857982E+00 4.1226392E-01 +-9.0000000E+01 -7.8322446E-02 1.2863000E+00 4.0583041E-01 +-8.8000000E+01 -1.1721615E-01 1.2837866E+00 3.9905539E-01 +-8.6000000E+01 -1.5600929E-01 1.2780933E+00 3.9195980E-01 +-8.4000000E+01 -1.9458561E-01 1.2713222E+00 3.8456387E-01 +-8.2000000E+01 -2.3282630E-01 1.2617782E+00 3.7688695E-01 +-8.0000000E+01 -2.7060901E-01 1.2504000E+00 3.6894750E-01 +-7.8000000E+01 -3.0780689E-01 1.2372024E+00 3.6076287E-01 +-7.6000000E+01 -3.4428762E-01 1.2217980E+00 3.5234924E-01 +-7.4000000E+01 -3.7991250E-01 1.2049106E+00 3.4372142E-01 +-7.2000000E+01 -4.1453552E-01 1.1859838E+00 3.3489264E-01 +-7.0000000E+01 -4.4800248E-01 1.1654000E+00 3.2587438E-01 +-6.8000000E+01 -4.8015018E-01 1.1431275E+00 3.1667613E-01 +-6.6000000E+01 -5.1080565E-01 1.1190173E+00 3.0730511E-01 +-6.4000000E+01 -5.3978549E-01 1.0933857E+00 2.9776607E-01 +-6.2000000E+01 -5.6689532E-01 1.0659453E+00 2.8806090E-01 +-6.0000000E+01 -5.9192939E-01 1.0368000E+00 2.7818840E-01 +-5.8000000E+01 -6.1467034E-01 1.0058711E+00 2.6814391E-01 +-5.6000000E+01 -6.3488929E-01 9.7301646E-01 2.5791893E-01 +-5.4000000E+01 -6.5234612E-01 9.3829725E-01 2.4750078E-01 +-5.2000000E+01 -6.6679017E-01 9.0149442E-01 2.3687219E-01 +-5.0000000E+01 -6.7796143E-01 8.6250000E-01 2.2601086E-01 +-4.8000000E+01 -6.8559221E-01 8.2116674E-01 2.1488911E-01 +-4.6000000E+01 -6.8940943E-01 7.7724007E-01 2.0347336E-01 +-4.4000000E+01 -6.8913774E-01 7.2973921E-01 1.9172381E-01 +-4.2000000E+01 -6.8450342E-01 6.7726207E-01 1.7959393E-01 +-4.0000000E+01 -6.7933634E-01 6.2730000E-01 1.6703018E-01 +-3.8000000E+01 -6.7373414E-01 5.8345422E-01 1.5397159E-01 +-3.6000000E+01 -6.6740367E-01 5.4261465E-01 1.4034954E-01 +-3.4000000E+01 -6.5962852E-01 5.0348652E-01 1.2608748E-01 +-3.2000000E+01 -6.5183308E-01 4.6609514E-01 1.1110090E-01 +-3.0000000E+01 -6.4401735E-01 4.3040914E-01 9.4958218E-02 +-2.9000000E+01 -6.4410974E-01 4.1357775E-01 8.9291383E-02 +-2.8000000E+01 -6.4441201E-01 3.9734701E-01 8.4362092E-02 +-2.7000000E+01 -6.4496180E-01 3.8173722E-01 7.9999491E-02 +-2.6000000E+01 -6.4579673E-01 3.6676863E-01 7.6032723E-02 +-2.5000000E+01 -6.4695443E-01 3.5246152E-01 7.2290931E-02 +-2.4000000E+01 -6.4847255E-01 3.3883616E-01 6.8603260E-02 +-2.3000000E+01 -6.5038870E-01 3.2591283E-01 6.4798855E-02 +-2.2000000E+01 -6.5274054E-01 3.1371178E-01 6.0706858E-02 +-2.1000000E+01 -6.5556568E-01 3.0225330E-01 5.6156414E-02 +-2.0000000E+01 -6.5890177E-01 2.9155766E-01 5.0976667E-02 +-1.9500000E+01 -6.6084410E-01 2.8728820E-01 4.7711826E-02 +-1.9000000E+01 -6.6278643E-01 2.8301874E-01 4.4446984E-02 +-1.8500000E+01 -6.6502187E-01 2.7923292E-01 4.0116082E-02 +-1.8000000E+01 -6.6725730E-01 2.7544710E-01 3.5785180E-02 +-1.7500000E+01 -6.6980466E-01 2.7195469E-01 3.1074294E-02 +-1.7000000E+01 -6.7235201E-01 2.6846228E-01 2.6363407E-02 +-1.6500000E+01 -6.7523011E-01 2.6507306E-01 2.1958612E-02 +-1.6000000E+01 -6.7810820E-01 2.6168384E-01 1.7553816E-02 +-1.5500000E+01 -6.8133585E-01 2.5822353E-01 1.4104836E-02 +-1.5000000E+01 -6.8456349E-01 2.5476321E-01 1.0655855E-02 +-1.4500000E+01 -6.8815951E-01 2.5154235E-01 7.5550427E-03 +-1.4000000E+01 -6.9175553E-01 2.4832149E-01 4.4542304E-03 +-1.3500000E+01 -6.9573874E-01 2.4530946E-01 1.4556958E-03 +-1.3000000E+01 -6.9972194E-01 2.4229742E-01 -1.5428388E-03 +-1.2500000E+01 -7.0411115E-01 2.3919694E-01 -4.1451931E-03 +-1.2000000E+01 -7.0850036E-01 2.3609645E-01 -6.7475473E-03 +-1.1500000E+01 -7.1331439E-01 2.3261022E-01 -8.6598187E-03 +-1.1000000E+01 -7.1812841E-01 2.2912399E-01 -1.0572090E-02 +-1.0500000E+01 -7.2338608E-01 2.2483721E-01 -1.1500280E-02 +-1.0000000E+01 -7.2864374E-01 2.2055043E-01 -1.2428470E-02 +-9.5000000E+00 -7.6640939E-01 2.1538238E-01 -1.3351477E-02 +-9.0000000E+00 -8.0417503E-01 2.1021432E-01 -1.4274484E-02 +-8.5000000E+00 -8.3959124E-01 2.0681938E-01 -2.0099807E-02 +-8.0000000E+00 -8.7500744E-01 2.0342444E-01 -2.5925130E-02 +-7.5000000E+00 -8.3440425E-01 1.9680217E-01 -2.8468869E-02 +-7.0000000E+00 -7.9380105E-01 1.9017990E-01 -3.1012608E-02 +-6.5000000E+00 -7.5711722E-01 1.8766607E-01 -3.9892345E-02 +-6.0000000E+00 -7.2043339E-01 1.8515224E-01 -4.8772081E-02 +-5.5000000E+00 -6.7854338E-01 1.7877714E-01 -5.5802547E-02 +-5.0000000E+00 -6.3665337E-01 1.7240203E-01 -6.2833012E-02 +-4.5000000E+00 -5.7684109E-01 1.6689625E-01 -6.7512806E-02 +-4.0000000E+00 -5.1702880E-01 1.6139047E-01 -7.2192600E-02 +-3.5000000E+00 -4.5467292E-01 1.5825650E-01 -7.4646484E-02 +-3.0000000E+00 -3.9231703E-01 1.5512252E-01 -7.7100367E-02 +-2.5000000E+00 -3.3024687E-01 1.5103837E-01 -7.9615935E-02 +-2.0000000E+00 -2.6817670E-01 1.4695421E-01 -8.2131502E-02 +-1.5000000E+00 -2.0610579E-01 1.3951342E-01 -8.5448967E-02 +-1.0000000E+00 -1.4403487E-01 1.3207262E-01 -8.8766431E-02 +-5.0000000E-01 -8.1964943E-02 1.2852293E-01 -9.2987757E-02 +0.0000000E+00 -1.9895016E-02 1.2497323E-01 -9.7209082E-02 +5.0000000E-01 4.2175067E-02 1.2465997E-01 -1.0301186E-01 +1.0000000E+00 1.0424515E-01 1.2434671E-01 -1.0881463E-01 +1.5000000E+00 1.6631560E-01 1.2284508E-01 -1.1466399E-01 +2.0000000E+00 2.2838605E-01 1.2134344E-01 -1.2051335E-01 +2.5000000E+00 2.9045610E-01 1.2083531E-01 -1.2521937E-01 +3.0000000E+00 3.5252615E-01 1.2032717E-01 -1.2992539E-01 +3.5000000E+00 4.1459660E-01 1.2053650E-01 -1.3359110E-01 +4.0000000E+00 4.7666705E-01 1.2074582E-01 -1.3725681E-01 +4.5000000E+00 5.3873710E-01 1.2082657E-01 -1.4050035E-01 +5.0000000E+00 6.0080715E-01 1.2090732E-01 -1.4374389E-01 +5.5000000E+00 6.6287760E-01 1.2173159E-01 -1.4683513E-01 +6.0000000E+00 7.2494805E-01 1.2255586E-01 -1.4992637E-01 +6.5000000E+00 7.8701810E-01 1.2277745E-01 -1.5253298E-01 +7.0000000E+00 8.4908815E-01 1.2299903E-01 -1.5513959E-01 +7.5000000E+00 9.1115857E-01 1.2287699E-01 -1.5696547E-01 +8.0000000E+00 9.7322898E-01 1.2275495E-01 -1.5879135E-01 +8.5000000E+00 1.0352994E+00 1.2252295E-01 -1.6016361E-01 +9.0000000E+00 1.0973698E+00 1.2229095E-01 -1.6153587E-01 +9.5000000E+00 1.1594419E+00 1.2223135E-01 -1.6320728E-01 +1.0000000E+01 1.2215139E+00 1.2217174E-01 -1.6487869E-01 +1.0500000E+01 1.2841391E+00 1.2218989E-01 -1.6636940E-01 +1.1000000E+01 1.3467642E+00 1.2220804E-01 -1.6786010E-01 +1.1500000E+01 1.4044194E+00 1.2595604E-01 -1.6848553E-01 +1.2000000E+01 1.4620746E+00 1.2970404E-01 -1.6911095E-01 +1.2500000E+01 1.4929721E+00 1.6198863E-01 -1.6778943E-01 +1.3000000E+01 1.5238696E+00 1.9427321E-01 -1.6646790E-01 +1.3500000E+01 1.5417361E+00 2.0633252E-01 -1.6655316E-01 +1.4000000E+01 1.5596026E+00 2.1839183E-01 -1.6663841E-01 +1.4500000E+01 1.5751592E+00 2.3010475E-01 -1.6695390E-01 +1.5000000E+01 1.5907157E+00 2.4181767E-01 -1.6726938E-01 +1.5500000E+01 1.6046489E+00 2.5275715E-01 -1.6993854E-01 +1.6000000E+01 1.6185821E+00 2.6369663E-01 -1.7260769E-01 +1.6500000E+01 1.6280830E+00 2.7402080E-01 -1.7372881E-01 +1.7000000E+01 1.6375838E+00 2.8434496E-01 -1.7484993E-01 +1.7500000E+01 1.6366015E+00 2.9476927E-01 -1.7690551E-01 +1.8000000E+01 1.6356192E+00 3.0519358E-01 -1.7896109E-01 +1.8500000E+01 1.6332945E+00 3.1565198E-01 -1.8215430E-01 +1.9000000E+01 1.6309697E+00 3.2611037E-01 -1.8534751E-01 +1.9500000E+01 1.6273795E+00 3.3659955E-01 -1.8736764E-01 +2.0000000E+01 1.6237893E+00 3.4708873E-01 -1.8938777E-01 +2.1000000E+01 1.6010999E+00 3.6625854E-01 -1.8867734E-01 +2.2000000E+01 1.5575610E+00 3.8473515E-01 -1.8674903E-01 +2.3000000E+01 1.4986420E+00 4.0260191E-01 -1.8390731E-01 +2.4000000E+01 1.4298123E+00 4.1994217E-01 -1.8045664E-01 +2.5000000E+01 1.3565415E+00 4.3683929E-01 -1.7670151E-01 +2.6000000E+01 1.2842989E+00 4.5337661E-01 -1.7294638E-01 +2.7000000E+01 1.2185540E+00 4.6963751E-01 -1.6949571E-01 +2.8000000E+01 1.1647762E+00 4.8570533E-01 -1.6665399E-01 +2.9000000E+01 1.1284351E+00 5.0166342E-01 -1.6472568E-01 +3.0000000E+01 1.1150000E+00 5.1759514E-01 -1.6401525E-01 +3.2000000E+01 1.1148055E+00 5.4971325E-01 -1.7804703E-01 +3.4000000E+01 1.1145647E+00 5.8258441E-01 -1.9127586E-01 +3.6000000E+01 1.1144747E+00 6.1748759E-01 -2.0375902E-01 +3.8000000E+01 1.1188511E+00 6.5429796E-01 -2.1555093E-01 +4.0000000E+01 1.1186821E+00 6.9380000E-01 -2.2670345E-01 +4.2000000E+01 1.1129993E+00 7.3818154E-01 -2.3726624E-01 +4.4000000E+01 1.1011847E+00 7.8504351E-01 -2.4686502E-01 +4.6000000E+01 1.0839623E+00 8.2929407E-01 -2.5570774E-01 +4.8000000E+01 1.0619503E+00 8.7180269E-01 -2.6428767E-01 +5.0000000E+01 1.0356804E+00 9.1270000E-01 -2.7267575E-01 +5.2000000E+01 1.0056136E+00 9.5199445E-01 -2.8092289E-01 +5.4000000E+01 9.7215441E-01 9.8969637E-01 -2.8906318E-01 +5.6000000E+01 9.3566220E-01 1.0254973E+00 -2.9711688E-01 +5.8000000E+01 8.9646038E-01 1.0596647E+00 -3.0509292E-01 +6.0000000E+01 8.5484386E-01 1.0919000E+00 -3.1299114E-01 +6.2000000E+01 8.1108487E-01 1.1222910E+00 -3.2080427E-01 +6.4000000E+01 7.6543730E-01 1.1508772E+00 -3.2851956E-01 +6.6000000E+01 7.1813982E-01 1.1773280E+00 -3.3612028E-01 +6.8000000E+01 6.6941800E-01 1.2020466E+00 -3.4358689E-01 +7.0000000E+01 6.1948548E-01 1.2246000E+00 -3.5089813E-01 +7.2000000E+01 5.6854447E-01 1.2451519E+00 -3.5803189E-01 +7.4000000E+01 5.1678556E-01 1.2638003E+00 -3.6496593E-01 +7.6000000E+01 4.6438710E-01 1.2801051E+00 -3.7167852E-01 +7.8000000E+01 4.1151410E-01 1.2947564E+00 -3.7814897E-01 +8.0000000E+01 3.5831694E-01 1.3070000E+00 -3.8435805E-01 +8.2000000E+01 3.0492969E-01 1.3173181E+00 -3.9028841E-01 +8.4000000E+01 2.5146838E-01 1.3257459E+00 -3.9592486E-01 +8.6000000E+01 1.9802917E-01 1.3311894E+00 -4.0125471E-01 +8.8000000E+01 1.4468642E-01 1.3354616E+00 -4.0626801E-01 +9.0000000E+01 9.1490875E-02 1.3373000E+00 -4.1095779E-01 +9.2000000E+01 3.6835771E-02 1.3363173E+00 -4.1532382E-01 +9.4000000E+01 -1.6213082E-02 1.3339005E+00 -4.1936326E-01 +9.6000000E+01 -6.8542131E-02 1.3302638E+00 -4.2307564E-01 +9.8000000E+01 -1.1998046E-01 1.3232023E+00 -4.2646197E-01 +1.0000000E+02 -1.7036334E-01 1.3142000E+00 -4.2952454E-01 +1.0200000E+02 -2.1953381E-01 1.3032495E+00 -4.3226653E-01 +1.0400000E+02 -2.6734390E-01 1.2897213E+00 -4.3469173E-01 +1.0600000E+02 -3.1365544E-01 1.2744930E+00 -4.3680411E-01 +1.0800000E+02 -3.5834040E-01 1.2567449E+00 -4.3860738E-01 +1.1000000E+02 -4.0128072E-01 1.2370000E+00 -4.4010442E-01 +1.1200000E+02 -4.4236756E-01 1.2151664E+00 -4.4129669E-01 +1.1400000E+02 -4.8149982E-01 1.1910326E+00 -4.4218347E-01 +1.1600000E+02 -5.1858210E-01 1.1650608E+00 -4.4276098E-01 +1.1800000E+02 -5.5352165E-01 1.1367906E+00 -4.4302140E-01 +1.2000000E+02 -5.8619063E-01 1.1066000E+00 -4.4296000E-01 +1.2200000E+02 -6.1658108E-01 1.0744324E+00 -4.4256000E-01 +1.2400000E+02 -6.4453942E-01 1.0402056E+00 -4.4176000E-01 +1.2600000E+02 -6.6986862E-01 1.0042975E+00 -4.4056000E-01 +1.2800000E+02 -6.9245447E-01 9.6640530E-01 -4.3880000E-01 +1.3000000E+02 -7.1210968E-01 9.2690000E-01 -4.3664000E-01 +1.3200000E+02 -7.2865251E-01 8.8578087E-01 -4.3376000E-01 +1.3400000E+02 -7.4167915E-01 8.4305973E-01 -4.3024000E-01 +1.3600000E+02 -7.4642260E-01 7.9909989E-01 -4.2472000E-01 +1.3800000E+02 -7.5112691E-01 7.5363717E-01 -4.1928000E-01 +1.4000000E+02 -7.5564172E-01 7.0750000E-01 -4.1376000E-01 +1.4200000E+02 -7.3672370E-01 6.5693499E-01 -4.0272000E-01 +1.4400000E+02 -7.1791022E-01 5.9943915E-01 -3.9168000E-01 +1.4600000E+02 -6.9934886E-01 5.3789862E-01 -3.8064000E-01 +1.4800000E+02 -6.7624424E-01 4.7519954E-01 -3.6680000E-01 +1.5000000E+02 -6.4305733E-01 4.1422808E-01 -3.4632000E-01 +1.5200000E+02 -6.1016974E-01 3.5787036E-01 -3.2584000E-01 +1.5400000E+02 -5.7772536E-01 3.0901255E-01 -3.0536000E-01 +1.5600000E+02 -5.3630890E-01 2.7054079E-01 -2.7920000E-01 +1.5800000E+02 -5.0382399E-01 2.4534122E-01 -2.5912000E-01 +1.6000000E+02 -4.8897509E-01 2.3630000E-01 -2.5112000E-01 +1.6200000E+02 -4.9474923E-01 2.3630435E-01 -2.5696000E-01 +1.6400000E+02 -5.1604898E-01 2.3633483E-01 -2.7312000E-01 +1.6600000E+02 -5.4927232E-01 2.3641757E-01 -2.9784000E-01 +1.6800000E+02 -5.9070228E-01 2.3657868E-01 -3.2912000E-01 +1.7000000E+02 -6.4238939E-01 2.3684429E-01 -3.6832000E-01 +1.7200000E+02 -6.0310098E-01 2.3724054E-01 -3.3616000E-01 +1.7400000E+02 -5.1460605E-01 2.3779354E-01 -2.7080000E-01 +1.7600000E+02 -4.1657023E-01 2.3852942E-01 -1.9872000E-01 +1.7800000E+02 -3.3818357E-01 2.3947431E-01 -1.3416000E-01 +1.8000000E+02 -2.6086270E-01 2.4065434E-01 -6.9520000E-02 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko new file mode 100644 index 0000000000..91b1a97759 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko @@ -0,0 +1,24 @@ +Wave kinematics + 3 +CrestHeightMax 2.695 m +LongitudinalVelocityMax 2.064 m/s +LongitudinalAccelerationMax 1.034 m/s^2 + 20.00 5.39 12.54 11 Water Depth/Hs/Tp/spectype + 1 Number of displacements + 0.00 +12 Number of Relative Depths + 0.000 0.050 0.100 0.150 0.200 0.300 0.400 0.500 0.600 0.700 0.800 1.000 + t [eta u_1..u_nDepths a_1..a_nDepths](x,t) * nDisplacements + 0.000 -0.04 -0.03 -0.03 -0.03 -0.03 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 1.03 1.01 0.98 0.96 0.94 0.90 0.87 0.84 0.82 0.80 0.79 0.78 + 0.250 0.30 0.23 0.23 0.22 0.21 0.21 0.20 0.19 0.19 0.18 0.18 0.18 0.17 1.03 1.00 0.98 0.96 0.93 0.90 0.86 0.84 0.82 0.80 0.79 0.78 + 0.500 0.63 0.49 0.47 0.46 0.45 0.44 0.42 0.41 0.40 0.39 0.38 0.37 0.37 1.01 0.98 0.96 0.93 0.91 0.88 0.85 0.82 0.80 0.78 0.77 0.76 + 0.750 0.96 0.73 0.71 0.70 0.68 0.67 0.64 0.62 0.60 0.58 0.57 0.56 0.55 0.97 0.94 0.92 0.90 0.88 0.84 0.81 0.79 0.77 0.75 0.74 0.73 + 1.000 1.26 0.97 0.94 0.92 0.90 0.88 0.84 0.81 0.79 0.77 0.75 0.74 0.73 0.91 0.89 0.87 0.85 0.83 0.80 0.77 0.74 0.73 0.71 0.70 0.69 + 1.250 1.55 1.19 1.16 1.13 1.10 1.08 1.04 1.00 0.97 0.94 0.92 0.91 0.90 0.85 0.82 0.81 0.79 0.77 0.74 0.71 0.69 0.67 0.66 0.65 0.64 + 1.500 1.81 1.39 1.35 1.32 1.29 1.26 1.21 1.17 1.13 1.10 1.08 1.06 1.05 0.76 0.75 0.73 0.71 0.70 0.67 0.64 0.62 0.61 0.59 0.59 0.58 + 1.750 2.05 1.57 1.53 1.49 1.46 1.43 1.37 1.32 1.28 1.25 1.22 1.20 1.19 0.67 0.66 0.64 0.62 0.61 0.59 0.57 0.55 0.53 0.52 0.51 0.51 + 2.000 2.25 1.72 1.68 1.64 1.60 1.57 1.50 1.45 1.41 1.37 1.34 1.32 1.30 0.57 0.55 0.54 0.53 0.52 0.50 0.48 0.46 0.45 0.44 0.44 0.43 + 2.250 2.42 1.85 1.81 1.76 1.72 1.68 1.62 1.56 1.51 1.47 1.44 1.42 1.40 0.46 0.44 0.43 0.42 0.41 0.40 0.38 0.37 0.36 0.35 0.35 0.34 + 2.500 2.55 1.95 1.90 1.86 1.82 1.78 1.70 1.64 1.59 1.55 1.52 1.49 1.48 0.34 0.33 0.32 0.31 0.31 0.29 0.28 0.27 0.27 0.26 0.26 0.25 + 2.750 2.64 2.02 1.97 1.92 1.88 1.84 1.76 1.70 1.65 1.60 1.57 1.55 1.53 0.21 0.21 0.20 0.20 0.19 0.18 0.18 0.17 0.17 0.16 0.16 0.16 + 3.000 2.69 2.06 2.01 1.96 1.91 1.87 1.80 1.73 1.68 1.63 1.60 1.58 1.56 0.08 0.08 0.08 0.08 0.08 0.07 0.07 0.07 0.07 0.06 0.06 0.06 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat new file mode 100644 index 0000000000..aed79911a2 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat @@ -0,0 +1,83 @@ +2 +1 40 +0.0000E+00 5.3800E+00 1.0000E+02 1 ; +2.0000E+00 5.3800E+00 1.0000E+02 1 ; +4.7120E+00 5.3800E+00 9.6915E+01 1 ; +5.3960E+00 5.3800E+00 9.5291E+01 1 ; +6.3190E+00 5.3886E+00 9.2664E+01 1 ; +7.4750E+00 5.4212E+00 8.8775E+01 1 ; +8.8580E+00 5.4865E+00 8.3448E+01 1 ; +1.0458E+01 5.5887E+00 7.6689E+01 1 ; +1.2268E+01 5.7247E+00 6.8754E+01 1 ; +1.4275E+01 5.8817E+00 6.0273E+01 1 ; +1.6467E+01 6.0346E+00 5.2291E+01 1 ; +1.8833E+01 6.1478E+00 4.5826E+01 1 ; +2.1356E+01 6.2020E+00 4.0950E+01 1 ; +2.4023E+01 6.1950E+00 3.7343E+01 1 ; +2.6817E+01 6.1292E+00 3.4518E+01 1 ; +2.9721E+01 6.0096E+00 3.2270E+01 1 ; +3.2719E+01 5.8432E+00 3.0488E+01 1 ; +3.5791E+01 5.6400E+00 2.9020E+01 1 ; +3.8920E+01 5.4107E+00 2.7756E+01 1 ; +4.2086E+01 5.1613E+00 2.6693E+01 1 ; +4.5272E+01 4.8974E+00 2.5829E+01 1 ; +4.8457E+01 4.6255E+00 2.5157E+01 1 ; +5.1623E+01 4.3519E+00 2.4665E+01 1 ; +5.4750E+01 4.0827E+00 2.4338E+01 1 ; +5.7820E+01 3.8220E+00 2.4156E+01 1 ; +6.0815E+01 3.5724E+00 2.4100E+01 1 ; +6.3716E+01 3.3364E+00 2.4100E+01 1 ; +6.6506E+01 3.1161E+00 2.4100E+01 1 ; +6.9168E+01 2.9130E+00 2.4100E+01 1 ; +7.1687E+01 2.7275E+00 2.4100E+01 1 ; +7.4047E+01 2.5595E+00 2.4100E+01 1 ; +7.6234E+01 2.4087E+00 2.4100E+01 1 ; +7.8234E+01 2.2660E+00 2.4100E+01 1 ; +8.0037E+01 2.1175E+00 2.4100E+01 1 ; +8.1631E+01 1.9588E+00 2.4100E+01 1 ; +8.3006E+01 1.7913E+00 2.4100E+01 1 ; +8.4155E+01 1.6013E+00 2.4100E+01 1 ; +8.5070E+01 1.3858E+00 2.4100E+01 1 ; +8.5746E+01 1.1384E+00 2.4100E+01 1 ; +8.6366E+01 8.3354E-01 2.4100E+01 1 ; +2 40 +0.0000E+00 6.3800E+00 1.0E+02 1 ; +2.0000E+00 6.3800E+00 1.0E+02 1 ; +4.7120E+00 6.3800E+00 9.6E+01 1 ; +5.3960E+00 6.3800E+00 9.5E+01 1 ; +6.3190E+00 6.3886E+00 9.2E+01 1 ; +7.4750E+00 6.4212E+00 8.8E+01 1 ; +8.8580E+00 6.4865E+00 8.3E+01 1 ; +1.0458E+01 6.5887E+00 7.6E+01 1 ; +1.2268E+01 6.7247E+00 6.8E+01 1 ; +1.4275E+01 6.8817E+00 6.0E+01 1 ; +1.6467E+01 7.0346E+00 5.2E+01 1 ; +1.8833E+01 7.1478E+00 4.5E+01 1 ; +2.1356E+01 7.2020E+00 4.0E+01 1 ; +2.4023E+01 7.1950E+00 3.7E+01 1 ; +2.6817E+01 7.1292E+00 3.4E+01 1 ; +2.9721E+01 7.0096E+00 3.2E+01 1 ; +3.2719E+01 6.8432E+00 3.0E+01 1 ; +3.5791E+01 6.6400E+00 2.9E+01 1 ; +3.8920E+01 6.4107E+00 2.7E+01 1 ; +4.2086E+01 6.1613E+00 2.6E+01 1 ; +4.5272E+01 5.8974E+00 2.5E+01 1 ; +4.8457E+01 4.6255E+00 2.5E+01 1 ; +5.1623E+01 4.3519E+00 2.4E+01 1 ; +5.4750E+01 4.0827E+00 2.4E+01 1 ; +5.7820E+01 4.8220E+00 2.4E+01 1 ; +6.0815E+01 3.5724E+00 2.4E+01 1 ; +6.3716E+01 3.3364E+00 2.4E+01 1 ; +6.6506E+01 3.1161E+00 2.4E+01 1 ; +6.9168E+01 3.9130E+00 2.4E+01 1 ; +7.1687E+01 3.7275E+00 2.4E+01 1 ; +7.4047E+01 3.5595E+00 2.4E+01 1 ; +7.6234E+01 3.4087E+00 2.4E+01 1 ; +7.8234E+01 3.2660E+00 2.4E+01 1 ; +8.0037E+01 3.1175E+00 2.4E+01 1 ; +8.1631E+01 2.9588E+00 2.4E+01 1 ; +8.3006E+01 2.7913E+00 2.4E+01 1 ; +8.4155E+01 2.6013E+00 2.4E+01 1 ; +8.5070E+01 2.3858E+00 2.4E+01 1 ; +8.5746E+01 2.1384E+00 2.4E+01 1 ; +8.6366E+01 7.3354E-01 2.4E+01 1 ; diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat new file mode 100644 index 0000000000..a6bc2f07ec --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat @@ -0,0 +1,800 @@ + 2.50000E-02 -4.63467E+00 -5.50392E+01 -1.05444E+02 4.39306E+01 1.98584E+01 -4.21387E+00 9.24958E+01 9.47559E+01 9.70159E+01 -4.63467E+00 -5.25861E+01 -1.00538E+02 4.16729E+01 1.87738E+01 -4.12530E+00 8.79804E+01 9.01337E+01 9.22870E+01 -1.72650E+02 -2.29778E+02 -2.86906E+02 5.16662E+01 2.69843E+01 2.30229E+00 2.75983E+02 2.83747E+02 2.91511E+02 + 5.00000E-02 -6.78871E+00 -5.85374E+01 -1.10286E+02 4.51875E+01 2.05059E+01 -4.17575E+00 9.71638E+01 9.95491E+01 1.01935E+02 -6.78872E+00 -5.36313E+01 -1.00474E+02 4.06721E+01 1.83368E+01 -3.99861E+00 8.81330E+01 9.03048E+01 9.24767E+01 -1.70496E+02 -2.26280E+02 -2.82064E+02 5.04093E+01 2.63367E+01 2.26417E+00 2.71315E+02 2.78953E+02 2.86592E+02 + 7.50000E-02 -8.94277E+00 -6.20356E+01 -1.15128E+02 4.64445E+01 2.11534E+01 -4.13763E+00 1.01832E+02 1.04342E+02 1.06853E+02 -8.94276E+00 -5.46765E+01 -1.00410E+02 3.96714E+01 1.78997E+01 -3.87192E+00 8.82855E+01 9.04760E+01 9.26664E+01 -1.68342E+02 -2.22782E+02 -2.77221E+02 4.91523E+01 2.56892E+01 2.22605E+00 2.66647E+02 2.74160E+02 2.81673E+02 + 1.00000E-01 -1.10968E+01 -6.55338E+01 -1.19971E+02 4.77015E+01 2.18010E+01 -4.09951E+00 1.06500E+02 1.09136E+02 1.11772E+02 -1.10968E+01 -5.57217E+01 -1.00347E+02 3.86707E+01 1.74627E+01 -3.74523E+00 8.84381E+01 9.06471E+01 9.28561E+01 -1.66188E+02 -2.19284E+02 -2.72379E+02 4.78953E+01 2.50416E+01 2.18793E+00 2.61979E+02 2.69367E+02 2.76755E+02 + 1.25000E-01 -1.32509E+01 -6.90320E+01 -1.24813E+02 4.89585E+01 2.24485E+01 -4.06139E+00 1.11168E+02 1.13929E+02 1.16690E+02 -1.32509E+01 -5.67669E+01 -1.00283E+02 3.76699E+01 1.70257E+01 -3.61855E+00 8.85907E+01 9.08183E+01 9.30458E+01 -1.64034E+02 -2.15785E+02 -2.67537E+02 4.66383E+01 2.43941E+01 2.14981E+00 2.57311E+02 2.64574E+02 2.71836E+02 + 1.50000E-01 -1.54049E+01 -7.25302E+01 -1.29655E+02 5.02155E+01 2.30961E+01 -4.02327E+00 1.15836E+02 1.18722E+02 1.21609E+02 -1.54049E+01 -5.78121E+01 -1.00219E+02 3.66692E+01 1.65887E+01 -3.49186E+00 8.87433E+01 9.09894E+01 9.32355E+01 -1.61880E+02 -2.12287E+02 -2.62694E+02 4.53814E+01 2.37465E+01 2.11169E+00 2.52643E+02 2.59780E+02 2.66918E+02 + 1.75000E-01 -1.75590E+01 -7.60284E+01 -1.34498E+02 5.14724E+01 2.37436E+01 -3.98515E+00 1.20504E+02 1.23516E+02 1.26527E+02 -1.75590E+01 -5.88573E+01 -1.00156E+02 3.56685E+01 1.61516E+01 -3.36517E+00 8.88959E+01 9.11605E+01 9.34252E+01 -1.59726E+02 -2.08789E+02 -2.57852E+02 4.41244E+01 2.30990E+01 2.07357E+00 2.47975E+02 2.54987E+02 2.61999E+02 + 2.00000E-01 -1.97130E+01 -7.95266E+01 -1.39340E+02 5.27294E+01 2.43912E+01 -3.94702E+00 1.25172E+02 1.28309E+02 1.31446E+02 -1.97130E+01 -5.99024E+01 -1.00092E+02 3.46677E+01 1.57146E+01 -3.23848E+00 8.90484E+01 9.13317E+01 9.36149E+01 -1.57572E+02 -2.05291E+02 -2.53009E+02 4.28674E+01 2.24514E+01 2.03544E+00 2.43307E+02 2.50194E+02 2.57080E+02 + 2.25000E-01 -2.18671E+01 -8.30248E+01 -1.44182E+02 5.39864E+01 2.50387E+01 -3.90891E+00 1.29840E+02 1.33102E+02 1.36365E+02 -2.18671E+01 -6.09476E+01 -1.00028E+02 3.36670E+01 1.52776E+01 -3.11179E+00 8.92010E+01 9.15028E+01 9.38046E+01 -1.55418E+02 -2.01793E+02 -2.48167E+02 4.16104E+01 2.18039E+01 1.99733E+00 2.38639E+02 2.45400E+02 2.52162E+02 + 2.50000E-01 -2.40211E+01 -8.65230E+01 -1.49025E+02 5.52434E+01 2.56863E+01 -3.87078E+00 1.34508E+02 1.37896E+02 1.41283E+02 -2.40211E+01 -6.19928E+01 -9.99645E+01 3.26662E+01 1.48406E+01 -2.98510E+00 8.93536E+01 9.16740E+01 9.39943E+01 -1.53264E+02 -1.98294E+02 -2.43325E+02 4.03535E+01 2.11563E+01 1.95920E+00 2.33971E+02 2.40607E+02 2.47243E+02 + 2.75000E-01 -2.61751E+01 -9.00212E+01 -1.53867E+02 5.65003E+01 2.63338E+01 -3.83266E+00 1.39176E+02 1.42689E+02 1.46202E+02 -2.61752E+01 -6.30380E+01 -9.99008E+01 3.16655E+01 1.44036E+01 -2.85841E+00 8.95062E+01 9.18451E+01 9.41840E+01 -1.51110E+02 -1.94796E+02 -2.38482E+02 3.90965E+01 2.05088E+01 1.92108E+00 2.29303E+02 2.35814E+02 2.42325E+02 + 3.00000E-01 -2.83292E+01 -9.35194E+01 -1.58710E+02 5.77573E+01 2.69814E+01 -3.79454E+00 1.43844E+02 1.47482E+02 1.51120E+02 -2.83292E+01 -6.40832E+01 -9.98372E+01 3.06648E+01 1.39665E+01 -2.73172E+00 8.96588E+01 9.20162E+01 9.43737E+01 -1.48956E+02 -1.91298E+02 -2.33640E+02 3.78395E+01 1.98612E+01 1.88296E+00 2.24635E+02 2.31020E+02 2.37406E+02 + 3.25000E-01 -3.04833E+01 -9.70176E+01 -1.63552E+02 5.90143E+01 2.76289E+01 -3.75642E+00 1.48512E+02 1.52275E+02 1.56039E+02 -3.04832E+01 -6.51284E+01 -9.97735E+01 2.96640E+01 1.35295E+01 -2.60503E+00 8.98113E+01 9.21874E+01 9.45634E+01 -1.46802E+02 -1.87800E+02 -2.28798E+02 3.65825E+01 1.92137E+01 1.84484E+00 2.19967E+02 2.26227E+02 2.32487E+02 + 3.50000E-01 -3.26373E+01 -1.00516E+02 -1.68394E+02 6.02713E+01 2.82765E+01 -3.71830E+00 1.53180E+02 1.57069E+02 1.60958E+02 -3.26373E+01 -6.61735E+01 -9.97098E+01 2.86633E+01 1.30925E+01 -2.47834E+00 8.99639E+01 9.23585E+01 9.47531E+01 -1.44648E+02 -1.84302E+02 -2.23955E+02 3.53256E+01 1.85661E+01 1.80672E+00 2.15299E+02 2.21434E+02 2.27569E+02 + 3.75000E-01 -3.47913E+01 -1.04014E+02 -1.73237E+02 6.15282E+01 2.89240E+01 -3.68018E+00 1.57848E+02 1.61862E+02 1.65876E+02 -3.47913E+01 -6.72187E+01 -9.96461E+01 2.76626E+01 1.26555E+01 -2.35165E+00 9.01165E+01 9.25296E+01 9.49428E+01 -1.42494E+02 -1.80803E+02 -2.19113E+02 3.40686E+01 1.79186E+01 1.76860E+00 2.10631E+02 2.16641E+02 2.22650E+02 + 4.00000E-01 -3.69454E+01 -1.07512E+02 -1.78079E+02 6.27852E+01 2.95716E+01 -3.64206E+00 1.62516E+02 1.66655E+02 1.70795E+02 -3.69454E+01 -6.82639E+01 -9.95824E+01 2.66618E+01 1.22184E+01 -2.22496E+00 9.02691E+01 9.27008E+01 9.51325E+01 -1.40340E+02 -1.77305E+02 -2.14271E+02 3.28116E+01 1.72710E+01 1.73048E+00 2.05963E+02 2.11847E+02 2.17732E+02 + 4.25000E-01 -3.90994E+01 -1.11010E+02 -1.82921E+02 6.40422E+01 3.02191E+01 -3.60394E+00 1.67184E+02 1.71449E+02 1.75713E+02 -3.90994E+01 -6.93091E+01 -9.95188E+01 2.56611E+01 1.17814E+01 -2.09827E+00 9.04216E+01 9.28719E+01 9.53222E+01 -1.38186E+02 -1.73807E+02 -2.09428E+02 3.15546E+01 1.66235E+01 1.69236E+00 2.01295E+02 2.07054E+02 2.12813E+02 + 4.50000E-01 -4.12535E+01 -1.14509E+02 -1.87764E+02 6.52992E+01 3.08667E+01 -3.56582E+00 1.71852E+02 1.76242E+02 1.80632E+02 -4.12535E+01 -7.03543E+01 -9.94551E+01 2.46604E+01 1.13444E+01 -1.97158E+00 9.05742E+01 9.30431E+01 9.55119E+01 -1.36032E+02 -1.70309E+02 -2.04586E+02 3.02977E+01 1.59759E+01 1.65424E+00 1.96627E+02 2.02261E+02 2.07894E+02 + 4.75000E-01 -4.34075E+01 -1.18007E+02 -1.92606E+02 6.65561E+01 3.15142E+01 -3.52770E+00 1.76520E+02 1.81035E+02 1.85551E+02 -4.34075E+01 -7.13995E+01 -9.93914E+01 2.36596E+01 1.09074E+01 -1.84489E+00 9.07268E+01 9.32142E+01 9.57016E+01 -1.33878E+02 -1.66811E+02 -1.99744E+02 2.90407E+01 1.53284E+01 1.61612E+00 1.91959E+02 1.97467E+02 2.02976E+02 + 5.00000E-01 -4.55616E+01 -1.21505E+02 -1.97448E+02 6.78131E+01 3.21618E+01 -3.48958E+00 1.81188E+02 1.85829E+02 1.90469E+02 -4.55616E+01 -7.24446E+01 -9.93277E+01 2.26589E+01 1.04703E+01 -1.71820E+00 9.08794E+01 9.33853E+01 9.58913E+01 -1.31724E+02 -1.63312E+02 -1.94901E+02 2.77837E+01 1.46809E+01 1.57800E+00 1.87291E+02 1.92674E+02 1.98057E+02 + 5.25000E-01 -4.77156E+01 -1.25003E+02 -2.02291E+02 6.90701E+01 3.28093E+01 -3.45146E+00 1.85856E+02 1.90622E+02 1.95388E+02 -4.77156E+01 -7.34898E+01 -9.92640E+01 2.16582E+01 1.00333E+01 -1.59152E+00 9.10320E+01 9.35565E+01 9.60810E+01 -1.29569E+02 -1.59814E+02 -1.90059E+02 2.65267E+01 1.40333E+01 1.53988E+00 1.82623E+02 1.87881E+02 1.93139E+02 + 5.50000E-01 -4.98697E+01 -1.28501E+02 -2.07133E+02 7.03271E+01 3.34569E+01 -3.41333E+00 1.90524E+02 1.95415E+02 2.00306E+02 -4.98697E+01 -7.45350E+01 -9.92004E+01 2.06574E+01 9.59630E+00 -1.46483E+00 9.11845E+01 9.37276E+01 9.62707E+01 -1.27415E+02 -1.56316E+02 -1.85217E+02 2.52698E+01 1.33858E+01 1.50176E+00 1.77955E+02 1.83087E+02 1.88220E+02 + 5.75000E-01 -5.20237E+01 -1.32000E+02 -2.11975E+02 7.15840E+01 3.41044E+01 -3.37522E+00 1.95192E+02 2.00208E+02 2.05225E+02 -5.20237E+01 -7.55802E+01 -9.91367E+01 1.96567E+01 9.15928E+00 -1.33814E+00 9.13371E+01 9.38988E+01 9.64604E+01 -1.25261E+02 -1.52818E+02 -1.80374E+02 2.40128E+01 1.27382E+01 1.46363E+00 1.73287E+02 1.78294E+02 1.83301E+02 + 6.00000E-01 -5.41778E+01 -1.35498E+02 -2.16818E+02 7.28410E+01 3.47520E+01 -3.33710E+00 1.99860E+02 2.05002E+02 2.10144E+02 -5.41778E+01 -7.66254E+01 -9.90730E+01 1.86560E+01 8.72225E+00 -1.21145E+00 9.14897E+01 9.40699E+01 9.66501E+01 -1.23107E+02 -1.49320E+02 -1.75532E+02 2.27558E+01 1.20907E+01 1.42551E+00 1.68619E+02 1.73501E+02 1.78383E+02 + 6.25000E-01 -5.63318E+01 -1.38996E+02 -2.21660E+02 7.40980E+01 3.53995E+01 -3.29897E+00 2.04528E+02 2.09795E+02 2.15062E+02 -5.63318E+01 -7.76706E+01 -9.90093E+01 1.76552E+01 8.28523E+00 -1.08476E+00 9.16423E+01 9.42410E+01 9.68398E+01 -1.20953E+02 -1.45821E+02 -1.70689E+02 2.14988E+01 1.14431E+01 1.38739E+00 1.63951E+02 1.68708E+02 1.73464E+02 + 6.50000E-01 -5.84859E+01 -1.42494E+02 -2.26503E+02 7.53550E+01 3.60471E+01 -3.26085E+00 2.09196E+02 2.14588E+02 2.19981E+02 -5.84859E+01 -7.87158E+01 -9.89456E+01 1.66545E+01 7.84821E+00 -9.58068E-01 9.17948E+01 9.44122E+01 9.70295E+01 -1.18799E+02 -1.42323E+02 -1.65847E+02 2.02419E+01 1.07956E+01 1.34927E+00 1.59283E+02 1.63914E+02 1.68546E+02 + 6.75000E-01 -6.06399E+01 -1.45992E+02 -2.31345E+02 7.66119E+01 3.66946E+01 -3.22273E+00 2.13864E+02 2.19382E+02 2.24899E+02 -6.06399E+01 -7.97609E+01 -9.88820E+01 1.56537E+01 7.41118E+00 -8.31380E-01 9.19474E+01 9.45833E+01 9.72192E+01 -1.16645E+02 -1.38825E+02 -1.61005E+02 1.89849E+01 1.01480E+01 1.31115E+00 1.54615E+02 1.59121E+02 1.63627E+02 + 7.00000E-01 -6.27940E+01 -1.49491E+02 -2.36187E+02 7.78689E+01 3.73422E+01 -3.18461E+00 2.18532E+02 2.24175E+02 2.29818E+02 -6.27940E+01 -8.08061E+01 -9.88183E+01 1.46530E+01 6.97416E+00 -7.04690E-01 9.21000E+01 9.47544E+01 9.74089E+01 -1.14491E+02 -1.35327E+02 -1.56162E+02 1.77279E+01 9.50047E+00 1.27303E+00 1.49947E+02 1.54328E+02 1.58708E+02 + 7.25000E-01 -6.49480E+01 -1.52989E+02 -2.41030E+02 7.91259E+01 3.79897E+01 -3.14649E+00 2.23200E+02 2.28968E+02 2.34737E+02 -6.49480E+01 -8.18513E+01 -9.87546E+01 1.36523E+01 6.53714E+00 -5.78002E-01 9.22526E+01 9.49256E+01 9.75986E+01 -1.12337E+02 -1.31829E+02 -1.51320E+02 1.64709E+01 8.85292E+00 1.23491E+00 1.45279E+02 1.49534E+02 1.53790E+02 + 7.50000E-01 -6.71021E+01 -1.56487E+02 -2.45872E+02 8.03829E+01 3.86372E+01 -3.10837E+00 2.27868E+02 2.33762E+02 2.39655E+02 -6.71021E+01 -8.28965E+01 -9.86909E+01 1.26515E+01 6.10012E+00 -4.51311E-01 9.24052E+01 9.50967E+01 9.77883E+01 -1.10183E+02 -1.28330E+02 -1.46478E+02 1.52139E+01 8.20537E+00 1.19679E+00 1.40611E+02 1.44741E+02 1.48871E+02 + 7.75000E-01 -6.92561E+01 -1.59985E+02 -2.50714E+02 8.16398E+01 3.92848E+01 -3.07025E+00 2.32536E+02 2.38555E+02 2.44574E+02 -6.92561E+01 -8.39417E+01 -9.86272E+01 1.16508E+01 5.66309E+00 -3.24621E-01 9.25577E+01 9.52679E+01 9.79780E+01 -1.08029E+02 -1.24832E+02 -1.41635E+02 1.39570E+01 7.55782E+00 1.15867E+00 1.35943E+02 1.39948E+02 1.43953E+02 + 8.00000E-01 -7.14102E+01 -1.63483E+02 -2.55557E+02 8.28968E+01 3.99323E+01 -3.03213E+00 2.37204E+02 2.43348E+02 2.49492E+02 -7.14102E+01 -8.49869E+01 -9.85636E+01 1.06501E+01 5.22607E+00 -1.97933E-01 9.27103E+01 9.54390E+01 9.81677E+01 -1.05875E+02 -1.21334E+02 -1.36793E+02 1.27000E+01 6.91027E+00 1.12055E+00 1.31275E+02 1.35154E+02 1.39034E+02 + 8.25000E-01 -7.35642E+01 -1.66982E+02 -2.60399E+02 8.41538E+01 4.05799E+01 -2.99401E+00 2.41872E+02 2.48141E+02 2.54411E+02 -7.35642E+01 -8.60321E+01 -9.84999E+01 9.64934E+00 4.78905E+00 -7.12429E-02 9.28629E+01 9.56101E+01 9.83574E+01 -1.03721E+02 -1.17836E+02 -1.31951E+02 1.14430E+01 6.26272E+00 1.08243E+00 1.26607E+02 1.30361E+02 1.34115E+02 + 8.50000E-01 -7.57183E+01 -1.70480E+02 -2.65241E+02 8.54108E+01 4.12274E+01 -2.95589E+00 2.46540E+02 2.52935E+02 2.59330E+02 -7.57183E+01 -8.70772E+01 -9.84362E+01 8.64860E+00 4.35202E+00 5.54448E-02 9.30155E+01 9.57813E+01 9.85471E+01 -1.01567E+02 -1.14338E+02 -1.27108E+02 1.01860E+01 5.61518E+00 1.04431E+00 1.21939E+02 1.25568E+02 1.29197E+02 + 8.75000E-01 -7.78723E+01 -1.73978E+02 -2.70084E+02 8.66677E+01 4.18750E+01 -2.91777E+00 2.51208E+02 2.57728E+02 2.64248E+02 -7.78723E+01 -8.81224E+01 -9.83725E+01 7.64787E+00 3.91500E+00 1.82135E-01 9.31680E+01 9.59524E+01 9.87368E+01 -9.94128E+01 -1.10839E+02 -1.22266E+02 8.92907E+00 4.96763E+00 1.00619E+00 1.17271E+02 1.20775E+02 1.24278E+02 + 9.00000E-01 -8.00264E+01 -1.77476E+02 -2.74926E+02 8.79247E+01 4.25225E+01 -2.87965E+00 2.55876E+02 2.62521E+02 2.69167E+02 -8.00264E+01 -8.91676E+01 -9.83088E+01 6.64713E+00 3.47798E+00 3.08826E-01 9.33206E+01 9.61236E+01 9.89265E+01 -9.72587E+01 -1.07341E+02 -1.17424E+02 7.67209E+00 4.32008E+00 9.68065E-01 1.12603E+02 1.15981E+02 1.19360E+02 + 9.25000E-01 -8.21804E+01 -1.80974E+02 -2.79768E+02 8.91817E+01 4.31701E+01 -2.84152E+00 2.60544E+02 2.67315E+02 2.74085E+02 -8.21804E+01 -9.02128E+01 -9.82452E+01 5.64640E+00 3.04096E+00 4.35513E-01 9.34732E+01 9.62947E+01 9.91162E+01 -9.51047E+01 -1.03843E+02 -1.12581E+02 6.41512E+00 3.67253E+00 9.29944E-01 1.07935E+02 1.11188E+02 1.14441E+02 + 9.50000E-01 -8.43345E+01 -1.84473E+02 -2.84611E+02 9.04387E+01 4.38176E+01 -2.80341E+00 2.65212E+02 2.72108E+02 2.79004E+02 -8.43345E+01 -9.12580E+01 -9.81815E+01 4.64566E+00 2.60393E+00 5.62204E-01 9.36258E+01 9.64658E+01 9.93059E+01 -9.29506E+01 -1.00345E+02 -1.07739E+02 5.15814E+00 3.02498E+00 8.91823E-01 1.03267E+02 1.06395E+02 1.09522E+02 + 9.75000E-01 -8.64885E+01 -1.87971E+02 -2.89453E+02 9.16956E+01 4.44652E+01 -2.76529E+00 2.69880E+02 2.76901E+02 2.83923E+02 -8.64885E+01 -9.23032E+01 -9.81178E+01 3.64493E+00 2.16691E+00 6.88892E-01 9.37784E+01 9.66370E+01 9.94956E+01 -9.07966E+01 -9.68465E+01 -1.02896E+02 3.90117E+00 2.37744E+00 8.53703E-01 9.85989E+01 1.01601E+02 1.04604E+02 + 1.00000E+00 -1.74804E+02 -2.33276E+02 -2.91748E+02 5.29232E+01 2.76318E+01 2.34041E+00 2.80651E+02 2.88540E+02 2.96429E+02 -2.48062E+00 -5.15410E+01 -1.00601E+02 4.26736E+01 1.92108E+01 -4.25199E+00 8.78278E+01 8.99626E+01 9.20973E+01 -2.48062E+00 -5.15410E+01 -1.00601E+02 4.26736E+01 1.92108E+01 -4.25199E+00 8.78278E+01 8.99626E+01 9.20973E+01 + 1.02500E+00 -1.76959E+02 -2.36775E+02 -2.96591E+02 5.41802E+01 2.82794E+01 2.37853E+00 2.85319E+02 2.93333E+02 3.01348E+02 -4.63467E+00 -5.50392E+01 -1.05444E+02 4.39306E+01 1.98584E+01 -4.21387E+00 9.24958E+01 9.47559E+01 9.70159E+01 -4.63467E+00 -5.25861E+01 -1.00538E+02 4.16729E+01 1.87738E+01 -4.12530E+00 8.79804E+01 9.01337E+01 9.22870E+01 + 1.05000E+00 -1.79113E+02 -2.40273E+02 -3.01433E+02 5.54372E+01 2.89269E+01 2.41665E+00 2.89987E+02 2.98127E+02 3.06266E+02 -6.78871E+00 -5.85374E+01 -1.10286E+02 4.51875E+01 2.05059E+01 -4.17575E+00 9.71638E+01 9.95491E+01 1.01935E+02 -6.78872E+00 -5.36313E+01 -1.00474E+02 4.06721E+01 1.83368E+01 -3.99861E+00 8.81330E+01 9.03048E+01 9.24767E+01 + 1.07500E+00 -1.81267E+02 -2.43771E+02 -3.06275E+02 5.66941E+01 2.95745E+01 2.45477E+00 2.94655E+02 3.02920E+02 3.11185E+02 -8.94277E+00 -6.20356E+01 -1.15128E+02 4.64445E+01 2.11534E+01 -4.13763E+00 1.01832E+02 1.04342E+02 1.06853E+02 -8.94276E+00 -5.46765E+01 -1.00410E+02 3.96714E+01 1.78997E+01 -3.87192E+00 8.82855E+01 9.04760E+01 9.26664E+01 + 1.10000E+00 -1.83421E+02 -2.47269E+02 -3.11118E+02 5.79511E+01 3.02220E+01 2.49289E+00 2.99323E+02 3.07713E+02 3.16104E+02 -1.10968E+01 -6.55338E+01 -1.19971E+02 4.77015E+01 2.18010E+01 -4.09951E+00 1.06500E+02 1.09136E+02 1.11772E+02 -1.10968E+01 -5.57217E+01 -1.00347E+02 3.86707E+01 1.74627E+01 -3.74523E+00 8.84381E+01 9.06471E+01 9.28561E+01 + 1.12500E+00 -1.85575E+02 -2.50767E+02 -3.15960E+02 5.92081E+01 3.08696E+01 2.53101E+00 3.03991E+02 3.12507E+02 3.21022E+02 -1.32509E+01 -6.90320E+01 -1.24813E+02 4.89585E+01 2.24485E+01 -4.06139E+00 1.11168E+02 1.13929E+02 1.16690E+02 -1.32509E+01 -5.67669E+01 -1.00283E+02 3.76699E+01 1.70257E+01 -3.61855E+00 8.85907E+01 9.08183E+01 9.30458E+01 + 1.15000E+00 -1.87729E+02 -2.54266E+02 -3.20802E+02 6.04651E+01 3.15171E+01 2.56914E+00 3.08659E+02 3.17300E+02 3.25941E+02 -1.54049E+01 -7.25302E+01 -1.29655E+02 5.02155E+01 2.30961E+01 -4.02327E+00 1.15836E+02 1.18722E+02 1.21609E+02 -1.54049E+01 -5.78121E+01 -1.00219E+02 3.66692E+01 1.65887E+01 -3.49186E+00 8.87433E+01 9.09894E+01 9.32355E+01 + 1.17500E+00 -1.89883E+02 -2.57764E+02 -3.25645E+02 6.17220E+01 3.21647E+01 2.60726E+00 3.13327E+02 3.22093E+02 3.30859E+02 -1.75590E+01 -7.60284E+01 -1.34498E+02 5.14724E+01 2.37436E+01 -3.98515E+00 1.20504E+02 1.23516E+02 1.26527E+02 -1.75590E+01 -5.88573E+01 -1.00156E+02 3.56685E+01 1.61516E+01 -3.36517E+00 8.88959E+01 9.11605E+01 9.34252E+01 + 1.20000E+00 -1.92037E+02 -2.61262E+02 -3.30487E+02 6.29790E+01 3.28122E+01 2.64537E+00 3.17995E+02 3.26886E+02 3.35778E+02 -1.97130E+01 -7.95266E+01 -1.39340E+02 5.27294E+01 2.43912E+01 -3.94702E+00 1.25172E+02 1.28309E+02 1.31446E+02 -1.97130E+01 -5.99024E+01 -1.00092E+02 3.46677E+01 1.57146E+01 -3.23848E+00 8.90484E+01 9.13317E+01 9.36149E+01 + 1.22500E+00 -1.94191E+02 -2.64760E+02 -3.35329E+02 6.42360E+01 3.34597E+01 2.68349E+00 3.22663E+02 3.31680E+02 3.40697E+02 -2.18671E+01 -8.30248E+01 -1.44182E+02 5.39864E+01 2.50387E+01 -3.90891E+00 1.29840E+02 1.33102E+02 1.36365E+02 -2.18671E+01 -6.09476E+01 -1.00028E+02 3.36670E+01 1.52776E+01 -3.11179E+00 8.92010E+01 9.15028E+01 9.38046E+01 + 1.25000E+00 -1.96345E+02 -2.68258E+02 -3.40172E+02 6.54930E+01 3.41073E+01 2.72162E+00 3.27331E+02 3.36473E+02 3.45615E+02 -2.40211E+01 -8.65230E+01 -1.49025E+02 5.52434E+01 2.56863E+01 -3.87078E+00 1.34508E+02 1.37896E+02 1.41283E+02 -2.40211E+01 -6.19928E+01 -9.99645E+01 3.26662E+01 1.48406E+01 -2.98510E+00 8.93536E+01 9.16740E+01 9.39943E+01 + 1.27500E+00 -1.98499E+02 -2.71757E+02 -3.45014E+02 6.67500E+01 3.47548E+01 2.75974E+00 3.31999E+02 3.41266E+02 3.50534E+02 -2.61751E+01 -9.00212E+01 -1.53867E+02 5.65003E+01 2.63338E+01 -3.83266E+00 1.39176E+02 1.42689E+02 1.46202E+02 -2.61752E+01 -6.30380E+01 -9.99008E+01 3.16655E+01 1.44036E+01 -2.85841E+00 8.95062E+01 9.18451E+01 9.41840E+01 + 1.30000E+00 -2.00653E+02 -2.75255E+02 -3.49857E+02 6.80069E+01 3.54024E+01 2.79786E+00 3.36667E+02 3.46060E+02 3.55452E+02 -2.83292E+01 -9.35194E+01 -1.58710E+02 5.77573E+01 2.69814E+01 -3.79454E+00 1.43844E+02 1.47482E+02 1.51120E+02 -2.83292E+01 -6.40832E+01 -9.98372E+01 3.06648E+01 1.39665E+01 -2.73172E+00 8.96588E+01 9.20162E+01 9.43737E+01 + 1.32500E+00 -2.02807E+02 -2.78753E+02 -3.54699E+02 6.92639E+01 3.60499E+01 2.83598E+00 3.41335E+02 3.50853E+02 3.60371E+02 -3.04833E+01 -9.70176E+01 -1.63552E+02 5.90143E+01 2.76289E+01 -3.75642E+00 1.48512E+02 1.52275E+02 1.56039E+02 -3.04832E+01 -6.51284E+01 -9.97735E+01 2.96640E+01 1.35295E+01 -2.60503E+00 8.98113E+01 9.21874E+01 9.45634E+01 + 1.35000E+00 -2.04961E+02 -2.82251E+02 -3.59541E+02 7.05209E+01 3.66975E+01 2.87410E+00 3.46003E+02 3.55646E+02 3.65289E+02 -3.26373E+01 -1.00516E+02 -1.68394E+02 6.02713E+01 2.82765E+01 -3.71830E+00 1.53180E+02 1.57069E+02 1.60958E+02 -3.26373E+01 -6.61735E+01 -9.97098E+01 2.86633E+01 1.30925E+01 -2.47834E+00 8.99639E+01 9.23585E+01 9.47531E+01 + 1.37500E+00 -2.07115E+02 -2.85749E+02 -3.64384E+02 7.17779E+01 3.73450E+01 2.91222E+00 3.50671E+02 3.60440E+02 3.70208E+02 -3.47913E+01 -1.04014E+02 -1.73237E+02 6.15282E+01 2.89240E+01 -3.68018E+00 1.57848E+02 1.61862E+02 1.65876E+02 -3.47913E+01 -6.72187E+01 -9.96461E+01 2.76626E+01 1.26555E+01 -2.35165E+00 9.01165E+01 9.25296E+01 9.49428E+01 + 1.40000E+00 -2.09269E+02 -2.89248E+02 -3.69226E+02 7.30348E+01 3.79926E+01 2.95034E+00 3.55339E+02 3.65233E+02 3.75127E+02 -3.69454E+01 -1.07512E+02 -1.78079E+02 6.27852E+01 2.95716E+01 -3.64206E+00 1.62516E+02 1.66655E+02 1.70795E+02 -3.69454E+01 -6.82639E+01 -9.95824E+01 2.66618E+01 1.22184E+01 -2.22496E+00 9.02691E+01 9.27008E+01 9.51325E+01 + 1.42500E+00 -2.11423E+02 -2.92746E+02 -3.74068E+02 7.42918E+01 3.86401E+01 2.98846E+00 3.60007E+02 3.70026E+02 3.80045E+02 -3.90994E+01 -1.11010E+02 -1.82921E+02 6.40422E+01 3.02191E+01 -3.60394E+00 1.67184E+02 1.71449E+02 1.75713E+02 -3.90994E+01 -6.93091E+01 -9.95188E+01 2.56611E+01 1.17814E+01 -2.09827E+00 9.04216E+01 9.28719E+01 9.53222E+01 + 1.45000E+00 -2.13577E+02 -2.96244E+02 -3.78911E+02 7.55488E+01 3.92877E+01 3.02658E+00 3.64675E+02 3.74819E+02 3.84964E+02 -4.12535E+01 -1.14509E+02 -1.87764E+02 6.52992E+01 3.08667E+01 -3.56582E+00 1.71852E+02 1.76242E+02 1.80632E+02 -4.12535E+01 -7.03543E+01 -9.94551E+01 2.46604E+01 1.13444E+01 -1.97158E+00 9.05742E+01 9.30431E+01 9.55119E+01 + 1.47500E+00 -2.15731E+02 -2.99742E+02 -3.83753E+02 7.68057E+01 3.99352E+01 3.06470E+00 3.69343E+02 3.79613E+02 3.89882E+02 -4.34075E+01 -1.18007E+02 -1.92606E+02 6.65561E+01 3.15142E+01 -3.52770E+00 1.76520E+02 1.81035E+02 1.85551E+02 -4.34075E+01 -7.13995E+01 -9.93914E+01 2.36596E+01 1.09074E+01 -1.84489E+00 9.07268E+01 9.32142E+01 9.57016E+01 + 1.50000E+00 -2.17885E+02 -3.03240E+02 -3.88595E+02 7.80627E+01 4.05828E+01 3.10282E+00 3.74011E+02 3.84406E+02 3.94801E+02 -4.55616E+01 -1.21505E+02 -1.97448E+02 6.78131E+01 3.21618E+01 -3.48958E+00 1.81188E+02 1.85829E+02 1.90469E+02 -4.55616E+01 -7.24446E+01 -9.93277E+01 2.26589E+01 1.04703E+01 -1.71820E+00 9.08794E+01 9.33853E+01 9.58913E+01 + 1.52500E+00 -2.20040E+02 -3.06739E+02 -3.93438E+02 7.93197E+01 4.12303E+01 3.14095E+00 3.78679E+02 3.89199E+02 3.99720E+02 -4.77156E+01 -1.25003E+02 -2.02291E+02 6.90701E+01 3.28093E+01 -3.45146E+00 1.85856E+02 1.90622E+02 1.95388E+02 -4.77156E+01 -7.34898E+01 -9.92640E+01 2.16582E+01 1.00333E+01 -1.59152E+00 9.10320E+01 9.35565E+01 9.60810E+01 + 1.55000E+00 -2.22194E+02 -3.10237E+02 -3.98280E+02 8.05767E+01 4.18779E+01 3.17907E+00 3.83347E+02 3.93993E+02 4.04638E+02 -4.98697E+01 -1.28501E+02 -2.07133E+02 7.03271E+01 3.34569E+01 -3.41333E+00 1.90524E+02 1.95415E+02 2.00306E+02 -4.98697E+01 -7.45350E+01 -9.92004E+01 2.06574E+01 9.59630E+00 -1.46483E+00 9.11845E+01 9.37276E+01 9.62707E+01 + 1.57500E+00 -2.24348E+02 -3.13735E+02 -4.03122E+02 8.18337E+01 4.25254E+01 3.21718E+00 3.88015E+02 3.98786E+02 4.09557E+02 -5.20237E+01 -1.32000E+02 -2.11975E+02 7.15840E+01 3.41044E+01 -3.37522E+00 1.95192E+02 2.00208E+02 2.05225E+02 -5.20237E+01 -7.55802E+01 -9.91367E+01 1.96567E+01 9.15928E+00 -1.33814E+00 9.13371E+01 9.38988E+01 9.64604E+01 + 1.60000E+00 -2.26502E+02 -3.17233E+02 -4.07965E+02 8.30906E+01 4.31730E+01 3.25531E+00 3.92683E+02 4.03579E+02 4.14475E+02 -5.41778E+01 -1.35498E+02 -2.16818E+02 7.28410E+01 3.47520E+01 -3.33710E+00 1.99860E+02 2.05002E+02 2.10144E+02 -5.41778E+01 -7.66254E+01 -9.90730E+01 1.86560E+01 8.72225E+00 -1.21145E+00 9.14897E+01 9.40699E+01 9.66501E+01 + 1.62500E+00 -2.28656E+02 -3.20731E+02 -4.12807E+02 8.43476E+01 4.38205E+01 3.29343E+00 3.97351E+02 4.08372E+02 4.19394E+02 -5.63318E+01 -1.38996E+02 -2.21660E+02 7.40980E+01 3.53995E+01 -3.29897E+00 2.04528E+02 2.09795E+02 2.15062E+02 -5.63318E+01 -7.76706E+01 -9.90093E+01 1.76552E+01 8.28523E+00 -1.08476E+00 9.16423E+01 9.42410E+01 9.68398E+01 + 1.65000E+00 -2.30810E+02 -3.24230E+02 -4.17650E+02 8.56046E+01 4.44681E+01 3.33154E+00 4.02019E+02 4.13166E+02 4.24313E+02 -5.84859E+01 -1.42494E+02 -2.26503E+02 7.53550E+01 3.60471E+01 -3.26085E+00 2.09196E+02 2.14588E+02 2.19981E+02 -5.84859E+01 -7.87158E+01 -9.89456E+01 1.66545E+01 7.84821E+00 -9.58068E-01 9.17948E+01 9.44122E+01 9.70295E+01 + 1.67500E+00 -2.32964E+02 -3.27728E+02 -4.22492E+02 8.68616E+01 4.51156E+01 3.36967E+00 4.06687E+02 4.17959E+02 4.29231E+02 -6.06399E+01 -1.45992E+02 -2.31345E+02 7.66119E+01 3.66946E+01 -3.22273E+00 2.13864E+02 2.19382E+02 2.24899E+02 -6.06399E+01 -7.97609E+01 -9.88820E+01 1.56537E+01 7.41118E+00 -8.31380E-01 9.19474E+01 9.45833E+01 9.72192E+01 + 1.70000E+00 -2.35118E+02 -3.31226E+02 -4.27334E+02 8.81185E+01 4.57632E+01 3.40779E+00 4.11355E+02 4.22752E+02 4.34150E+02 -6.27940E+01 -1.49491E+02 -2.36187E+02 7.78689E+01 3.73422E+01 -3.18461E+00 2.18532E+02 2.24175E+02 2.29818E+02 -6.27940E+01 -8.08061E+01 -9.88183E+01 1.46530E+01 6.97416E+00 -7.04690E-01 9.21000E+01 9.47544E+01 9.74089E+01 + 1.72500E+00 -2.37272E+02 -3.34724E+02 -4.32177E+02 8.93755E+01 4.64107E+01 3.44592E+00 4.16023E+02 4.27546E+02 4.39068E+02 -6.49480E+01 -1.52989E+02 -2.41030E+02 7.91259E+01 3.79897E+01 -3.14649E+00 2.23200E+02 2.28968E+02 2.34737E+02 -6.49480E+01 -8.18513E+01 -9.87546E+01 1.36523E+01 6.53714E+00 -5.78002E-01 9.22526E+01 9.49256E+01 9.75986E+01 + 1.75000E+00 -2.39426E+02 -3.38222E+02 -4.37019E+02 9.06325E+01 4.70583E+01 3.48403E+00 4.20691E+02 4.32339E+02 4.43987E+02 -6.71021E+01 -1.56487E+02 -2.45872E+02 8.03829E+01 3.86372E+01 -3.10837E+00 2.27868E+02 2.33762E+02 2.39655E+02 -6.71021E+01 -8.28965E+01 -9.86909E+01 1.26515E+01 6.10012E+00 -4.51311E-01 9.24052E+01 9.50967E+01 9.77883E+01 + 1.77500E+00 -2.41580E+02 -3.41721E+02 -4.41861E+02 9.18895E+01 4.77058E+01 3.52215E+00 4.25359E+02 4.37132E+02 4.48906E+02 -6.92561E+01 -1.59985E+02 -2.50714E+02 8.16398E+01 3.92848E+01 -3.07025E+00 2.32536E+02 2.38555E+02 2.44574E+02 -6.92561E+01 -8.39417E+01 -9.86272E+01 1.16508E+01 5.66309E+00 -3.24621E-01 9.25577E+01 9.52679E+01 9.79780E+01 + 1.80000E+00 -2.43734E+02 -3.45219E+02 -4.46704E+02 9.31464E+01 4.83534E+01 3.56028E+00 4.30027E+02 4.41926E+02 4.53824E+02 -7.14102E+01 -1.63483E+02 -2.55557E+02 8.28968E+01 3.99323E+01 -3.03213E+00 2.37204E+02 2.43348E+02 2.49492E+02 -7.14102E+01 -8.49869E+01 -9.85636E+01 1.06501E+01 5.22607E+00 -1.97933E-01 9.27103E+01 9.54390E+01 9.81677E+01 + 1.82500E+00 -2.45888E+02 -3.48717E+02 -4.51546E+02 9.44034E+01 4.90009E+01 3.59839E+00 4.34695E+02 4.46719E+02 4.58743E+02 -7.35642E+01 -1.66982E+02 -2.60399E+02 8.41538E+01 4.05799E+01 -2.99401E+00 2.41872E+02 2.48141E+02 2.54411E+02 -7.35642E+01 -8.60321E+01 -9.84999E+01 9.64934E+00 4.78905E+00 -7.12429E-02 9.28629E+01 9.56101E+01 9.83574E+01 + 1.85000E+00 -2.48042E+02 -3.52215E+02 -4.56388E+02 9.56604E+01 4.96485E+01 3.63652E+00 4.39363E+02 4.51512E+02 4.63661E+02 -7.57183E+01 -1.70480E+02 -2.65241E+02 8.54108E+01 4.12274E+01 -2.95589E+00 2.46540E+02 2.52935E+02 2.59330E+02 -7.57183E+01 -8.70772E+01 -9.84362E+01 8.64860E+00 4.35202E+00 5.54448E-02 9.30155E+01 9.57813E+01 9.85471E+01 + 1.87500E+00 -2.50196E+02 -3.55713E+02 -4.61231E+02 9.69174E+01 5.02960E+01 3.67464E+00 4.44031E+02 4.56305E+02 4.68580E+02 -7.78723E+01 -1.73978E+02 -2.70084E+02 8.66677E+01 4.18750E+01 -2.91777E+00 2.51208E+02 2.57728E+02 2.64248E+02 -7.78723E+01 -8.81224E+01 -9.83725E+01 7.64787E+00 3.91500E+00 1.82135E-01 9.31680E+01 9.59524E+01 9.87368E+01 + 1.90000E+00 -2.52350E+02 -3.59212E+02 -4.66073E+02 9.81743E+01 5.09436E+01 3.71275E+00 4.48699E+02 4.61099E+02 4.73499E+02 -8.00264E+01 -1.77476E+02 -2.74926E+02 8.79247E+01 4.25225E+01 -2.87965E+00 2.55876E+02 2.62521E+02 2.69167E+02 -8.00264E+01 -8.91676E+01 -9.83088E+01 6.64713E+00 3.47798E+00 3.08826E-01 9.33206E+01 9.61236E+01 9.89265E+01 + 1.92500E+00 -2.54504E+02 -3.62710E+02 -4.70915E+02 9.94313E+01 5.15911E+01 3.75088E+00 4.53367E+02 4.65892E+02 4.78417E+02 -8.21804E+01 -1.80974E+02 -2.79768E+02 8.91817E+01 4.31701E+01 -2.84152E+00 2.60544E+02 2.67315E+02 2.74085E+02 -8.21804E+01 -9.02128E+01 -9.82452E+01 5.64640E+00 3.04096E+00 4.35513E-01 9.34732E+01 9.62947E+01 9.91162E+01 + 1.95000E+00 -2.56658E+02 -3.66208E+02 -4.75758E+02 1.00688E+02 5.22386E+01 3.78899E+00 4.58035E+02 4.70685E+02 4.83336E+02 -8.43345E+01 -1.84473E+02 -2.84611E+02 9.04387E+01 4.38176E+01 -2.80341E+00 2.65212E+02 2.72108E+02 2.79004E+02 -8.43345E+01 -9.12580E+01 -9.81815E+01 4.64566E+00 2.60393E+00 5.62204E-01 9.36258E+01 9.64658E+01 9.93059E+01 + 1.97500E+00 -2.58812E+02 -3.69706E+02 -4.80600E+02 1.01945E+02 5.28862E+01 3.82712E+00 4.62703E+02 4.75479E+02 4.88254E+02 -8.64885E+01 -1.87971E+02 -2.89453E+02 9.16956E+01 4.44652E+01 -2.76529E+00 2.69880E+02 2.76901E+02 2.83923E+02 -8.64885E+01 -9.23032E+01 -9.81178E+01 3.64493E+00 2.16691E+00 6.88892E-01 9.37784E+01 9.66370E+01 9.94956E+01 + 2.00000E+00 -1.74804E+02 -3.31397E+02 -4.87990E+02 1.43232E+02 7.10147E+01 -1.20234E+00 4.61268E+02 4.73426E+02 4.85585E+02 -1.74804E+02 -2.33276E+02 -2.91748E+02 5.29232E+01 2.76318E+01 2.34041E+00 2.80651E+02 2.88540E+02 2.96429E+02 -2.48062E+00 -5.15410E+01 -1.00601E+02 4.26736E+01 1.92108E+01 -4.25199E+00 8.78278E+01 8.99626E+01 9.20973E+01 + 2.02500E+00 -1.76959E+02 -3.34895E+02 -4.92832E+02 1.44489E+02 7.16622E+01 -1.16422E+00 4.65936E+02 4.78220E+02 4.90504E+02 -1.76959E+02 -2.36775E+02 -2.96591E+02 5.41802E+01 2.82794E+01 2.37853E+00 2.85319E+02 2.93333E+02 3.01348E+02 -4.63467E+00 -5.50392E+01 -1.05444E+02 4.39306E+01 1.98584E+01 -4.21387E+00 9.24958E+01 9.47559E+01 9.70159E+01 + 2.05000E+00 -1.79113E+02 -3.38393E+02 -4.97674E+02 1.45746E+02 7.23098E+01 -1.12609E+00 4.70604E+02 4.83013E+02 4.95422E+02 -1.79113E+02 -2.40273E+02 -3.01433E+02 5.54372E+01 2.89269E+01 2.41665E+00 2.89987E+02 2.98127E+02 3.06266E+02 -6.78871E+00 -5.85374E+01 -1.10286E+02 4.51875E+01 2.05059E+01 -4.17575E+00 9.71638E+01 9.95491E+01 1.01935E+02 + 2.07500E+00 -1.81267E+02 -3.41892E+02 -5.02517E+02 1.47003E+02 7.29573E+01 -1.08798E+00 4.75272E+02 4.87806E+02 5.00341E+02 -1.81267E+02 -2.43771E+02 -3.06275E+02 5.66941E+01 2.95745E+01 2.45477E+00 2.94655E+02 3.02920E+02 3.11185E+02 -8.94277E+00 -6.20356E+01 -1.15128E+02 4.64445E+01 2.11534E+01 -4.13763E+00 1.01832E+02 1.04342E+02 1.06853E+02 + 2.10000E+00 -1.83421E+02 -3.45390E+02 -5.07359E+02 1.48260E+02 7.36049E+01 -1.04985E+00 4.79940E+02 4.92600E+02 5.05259E+02 -1.83421E+02 -2.47269E+02 -3.11118E+02 5.79511E+01 3.02220E+01 2.49289E+00 2.99323E+02 3.07713E+02 3.16104E+02 -1.10968E+01 -6.55338E+01 -1.19971E+02 4.77015E+01 2.18010E+01 -4.09951E+00 1.06500E+02 1.09136E+02 1.11772E+02 + 2.12500E+00 -1.85575E+02 -3.48888E+02 -5.12201E+02 1.49517E+02 7.42524E+01 -1.01173E+00 4.84608E+02 4.97393E+02 5.10178E+02 -1.85575E+02 -2.50767E+02 -3.15960E+02 5.92081E+01 3.08696E+01 2.53101E+00 3.03991E+02 3.12507E+02 3.21022E+02 -1.32509E+01 -6.90320E+01 -1.24813E+02 4.89585E+01 2.24485E+01 -4.06139E+00 1.11168E+02 1.13929E+02 1.16690E+02 + 2.15000E+00 -1.87729E+02 -3.52386E+02 -5.17044E+02 1.50773E+02 7.48999E+01 -9.73615E-01 4.89276E+02 5.02186E+02 5.15097E+02 -1.87729E+02 -2.54266E+02 -3.20802E+02 6.04651E+01 3.15171E+01 2.56914E+00 3.08659E+02 3.17300E+02 3.25941E+02 -1.54049E+01 -7.25302E+01 -1.29655E+02 5.02155E+01 2.30961E+01 -4.02327E+00 1.15836E+02 1.18722E+02 1.21609E+02 + 2.17500E+00 -1.89883E+02 -3.55884E+02 -5.21886E+02 1.52030E+02 7.55475E+01 -9.35488E-01 4.93944E+02 5.06979E+02 5.20015E+02 -1.89883E+02 -2.57764E+02 -3.25645E+02 6.17220E+01 3.21647E+01 2.60726E+00 3.13327E+02 3.22093E+02 3.30859E+02 -1.75590E+01 -7.60284E+01 -1.34498E+02 5.14724E+01 2.37436E+01 -3.98515E+00 1.20504E+02 1.23516E+02 1.26527E+02 + 2.20000E+00 -1.92037E+02 -3.59383E+02 -5.26729E+02 1.53287E+02 7.61950E+01 -8.97372E-01 4.98612E+02 5.11773E+02 5.24934E+02 -1.92037E+02 -2.61262E+02 -3.30487E+02 6.29790E+01 3.28122E+01 2.64537E+00 3.17995E+02 3.26886E+02 3.35778E+02 -1.97130E+01 -7.95266E+01 -1.39340E+02 5.27294E+01 2.43912E+01 -3.94702E+00 1.25172E+02 1.28309E+02 1.31446E+02 + 2.22500E+00 -1.94191E+02 -3.62881E+02 -5.31571E+02 1.54544E+02 7.68426E+01 -8.59244E-01 5.03280E+02 5.16566E+02 5.29852E+02 -1.94191E+02 -2.64760E+02 -3.35329E+02 6.42360E+01 3.34597E+01 2.68349E+00 3.22663E+02 3.31680E+02 3.40697E+02 -2.18671E+01 -8.30248E+01 -1.44182E+02 5.39864E+01 2.50387E+01 -3.90891E+00 1.29840E+02 1.33102E+02 1.36365E+02 + 2.25000E+00 -1.96345E+02 -3.66379E+02 -5.36413E+02 1.55801E+02 7.74901E+01 -8.21128E-01 5.07948E+02 5.21359E+02 5.34771E+02 -1.96345E+02 -2.68258E+02 -3.40172E+02 6.54930E+01 3.41073E+01 2.72162E+00 3.27331E+02 3.36473E+02 3.45615E+02 -2.40211E+01 -8.65230E+01 -1.49025E+02 5.52434E+01 2.56863E+01 -3.87078E+00 1.34508E+02 1.37896E+02 1.41283E+02 + 2.27500E+00 -1.98499E+02 -3.69877E+02 -5.41256E+02 1.57058E+02 7.81377E+01 -7.83012E-01 5.12616E+02 5.26153E+02 5.39690E+02 -1.98499E+02 -2.71757E+02 -3.45014E+02 6.67500E+01 3.47548E+01 2.75974E+00 3.31999E+02 3.41266E+02 3.50534E+02 -2.61751E+01 -9.00212E+01 -1.53867E+02 5.65003E+01 2.63338E+01 -3.83266E+00 1.39176E+02 1.42689E+02 1.46202E+02 + 2.30000E+00 -2.00653E+02 -3.73375E+02 -5.46098E+02 1.58315E+02 7.87852E+01 -7.44884E-01 5.17284E+02 5.30946E+02 5.44608E+02 -2.00653E+02 -2.75255E+02 -3.49857E+02 6.80069E+01 3.54024E+01 2.79786E+00 3.36667E+02 3.46060E+02 3.55452E+02 -2.83292E+01 -9.35194E+01 -1.58710E+02 5.77573E+01 2.69814E+01 -3.79454E+00 1.43844E+02 1.47482E+02 1.51120E+02 + 2.32500E+00 -2.02807E+02 -3.76874E+02 -5.50940E+02 1.59572E+02 7.94328E+01 -7.06768E-01 5.21952E+02 5.35739E+02 5.49527E+02 -2.02807E+02 -2.78753E+02 -3.54699E+02 6.92639E+01 3.60499E+01 2.83598E+00 3.41335E+02 3.50853E+02 3.60371E+02 -3.04833E+01 -9.70176E+01 -1.63552E+02 5.90143E+01 2.76289E+01 -3.75642E+00 1.48512E+02 1.52275E+02 1.56039E+02 + 2.35000E+00 -2.04961E+02 -3.80372E+02 -5.55783E+02 1.60829E+02 8.00803E+01 -6.68641E-01 5.26620E+02 5.40533E+02 5.54445E+02 -2.04961E+02 -2.82251E+02 -3.59541E+02 7.05209E+01 3.66975E+01 2.87410E+00 3.46003E+02 3.55646E+02 3.65289E+02 -3.26373E+01 -1.00516E+02 -1.68394E+02 6.02713E+01 2.82765E+01 -3.71830E+00 1.53180E+02 1.57069E+02 1.60958E+02 + 2.37500E+00 -2.07115E+02 -3.83870E+02 -5.60625E+02 1.62086E+02 8.07279E+01 -6.30524E-01 5.31288E+02 5.45326E+02 5.59364E+02 -2.07115E+02 -2.85749E+02 -3.64384E+02 7.17779E+01 3.73450E+01 2.91222E+00 3.50671E+02 3.60440E+02 3.70208E+02 -3.47913E+01 -1.04014E+02 -1.73237E+02 6.15282E+01 2.89240E+01 -3.68018E+00 1.57848E+02 1.61862E+02 1.65876E+02 + 2.40000E+00 -2.09269E+02 -3.87368E+02 -5.65467E+02 1.63343E+02 8.13754E+01 -5.92408E-01 5.35956E+02 5.50119E+02 5.64283E+02 -2.09269E+02 -2.89248E+02 -3.69226E+02 7.30348E+01 3.79926E+01 2.95034E+00 3.55339E+02 3.65233E+02 3.75127E+02 -3.69454E+01 -1.07512E+02 -1.78079E+02 6.27852E+01 2.95716E+01 -3.64206E+00 1.62516E+02 1.66655E+02 1.70795E+02 + 2.42500E+00 -2.11423E+02 -3.90867E+02 -5.70310E+02 1.64600E+02 8.20230E+01 -5.54281E-01 5.40624E+02 5.54912E+02 5.69201E+02 -2.11423E+02 -2.92746E+02 -3.74068E+02 7.42918E+01 3.86401E+01 2.98846E+00 3.60007E+02 3.70026E+02 3.80045E+02 -3.90994E+01 -1.11010E+02 -1.82921E+02 6.40422E+01 3.02191E+01 -3.60394E+00 1.67184E+02 1.71449E+02 1.75713E+02 + 2.45000E+00 -2.13577E+02 -3.94365E+02 -5.75152E+02 1.65857E+02 8.26705E+01 -5.16165E-01 5.45292E+02 5.59706E+02 5.74120E+02 -2.13577E+02 -2.96244E+02 -3.78911E+02 7.55488E+01 3.92877E+01 3.02658E+00 3.64675E+02 3.74819E+02 3.84964E+02 -4.12535E+01 -1.14509E+02 -1.87764E+02 6.52992E+01 3.08667E+01 -3.56582E+00 1.71852E+02 1.76242E+02 1.80632E+02 + 2.47500E+00 -2.15731E+02 -3.97863E+02 -5.79994E+02 1.67114E+02 8.33181E+01 -4.78037E-01 5.49960E+02 5.64499E+02 5.79038E+02 -2.15731E+02 -2.99742E+02 -3.83753E+02 7.68057E+01 3.99352E+01 3.06470E+00 3.69343E+02 3.79613E+02 3.89882E+02 -4.34075E+01 -1.18007E+02 -1.92606E+02 6.65561E+01 3.15142E+01 -3.52770E+00 1.76520E+02 1.81035E+02 1.85551E+02 + 2.50000E+00 -2.17885E+02 -4.01361E+02 -5.84837E+02 1.68371E+02 8.39656E+01 -4.39921E-01 5.54628E+02 5.69292E+02 5.83957E+02 -2.17885E+02 -3.03240E+02 -3.88595E+02 7.80627E+01 4.05828E+01 3.10282E+00 3.74011E+02 3.84406E+02 3.94801E+02 -4.55616E+01 -1.21505E+02 -1.97448E+02 6.78131E+01 3.21618E+01 -3.48958E+00 1.81188E+02 1.85829E+02 1.90469E+02 + 2.52500E+00 -2.20040E+02 -4.04859E+02 -5.89679E+02 1.69628E+02 8.46132E+01 -4.01805E-01 5.59296E+02 5.74086E+02 5.88876E+02 -2.20040E+02 -3.06739E+02 -3.93438E+02 7.93197E+01 4.12303E+01 3.14095E+00 3.78679E+02 3.89199E+02 3.99720E+02 -4.77156E+01 -1.25003E+02 -2.02291E+02 6.90701E+01 3.28093E+01 -3.45146E+00 1.85856E+02 1.90622E+02 1.95388E+02 + 2.55000E+00 -2.22194E+02 -4.08358E+02 -5.94521E+02 1.70885E+02 8.52607E+01 -3.63677E-01 5.63964E+02 5.78879E+02 5.93794E+02 -2.22194E+02 -3.10237E+02 -3.98280E+02 8.05767E+01 4.18779E+01 3.17907E+00 3.83347E+02 3.93993E+02 4.04638E+02 -4.98697E+01 -1.28501E+02 -2.07133E+02 7.03271E+01 3.34569E+01 -3.41333E+00 1.90524E+02 1.95415E+02 2.00306E+02 + 2.57500E+00 -2.24348E+02 -4.11856E+02 -5.99364E+02 1.72142E+02 8.59083E+01 -3.25561E-01 5.68632E+02 5.83672E+02 5.98713E+02 -2.24348E+02 -3.13735E+02 -4.03122E+02 8.18337E+01 4.25254E+01 3.21718E+00 3.88015E+02 3.98786E+02 4.09557E+02 -5.20237E+01 -1.32000E+02 -2.11975E+02 7.15840E+01 3.41044E+01 -3.37522E+00 1.95192E+02 2.00208E+02 2.05225E+02 + 2.60000E+00 -2.26502E+02 -4.15354E+02 -6.04206E+02 1.73399E+02 8.65558E+01 -2.87434E-01 5.73300E+02 5.88466E+02 6.03631E+02 -2.26502E+02 -3.17233E+02 -4.07965E+02 8.30906E+01 4.31730E+01 3.25531E+00 3.92683E+02 4.03579E+02 4.14475E+02 -5.41778E+01 -1.35498E+02 -2.16818E+02 7.28410E+01 3.47520E+01 -3.33710E+00 1.99860E+02 2.05002E+02 2.10144E+02 + 2.62500E+00 -2.28656E+02 -4.18852E+02 -6.09049E+02 1.74656E+02 8.72034E+01 -2.49317E-01 5.77968E+02 5.93259E+02 6.08550E+02 -2.28656E+02 -3.20731E+02 -4.12807E+02 8.43476E+01 4.38205E+01 3.29343E+00 3.97351E+02 4.08372E+02 4.19394E+02 -5.63318E+01 -1.38996E+02 -2.21660E+02 7.40980E+01 3.53995E+01 -3.29897E+00 2.04528E+02 2.09795E+02 2.15062E+02 + 2.65000E+00 -2.30810E+02 -4.22350E+02 -6.13891E+02 1.75913E+02 8.78509E+01 -2.11201E-01 5.82636E+02 5.98052E+02 6.13469E+02 -2.30810E+02 -3.24230E+02 -4.17650E+02 8.56046E+01 4.44681E+01 3.33154E+00 4.02019E+02 4.13166E+02 4.24313E+02 -5.84859E+01 -1.42494E+02 -2.26503E+02 7.53550E+01 3.60471E+01 -3.26085E+00 2.09196E+02 2.14588E+02 2.19981E+02 + 2.67500E+00 -2.32964E+02 -4.25849E+02 -6.18733E+02 1.77170E+02 8.84985E+01 -1.73074E-01 5.87304E+02 6.02845E+02 6.18387E+02 -2.32964E+02 -3.27728E+02 -4.22492E+02 8.68616E+01 4.51156E+01 3.36967E+00 4.06687E+02 4.17959E+02 4.29231E+02 -6.06399E+01 -1.45992E+02 -2.31345E+02 7.66119E+01 3.66946E+01 -3.22273E+00 2.13864E+02 2.19382E+02 2.24899E+02 + 2.70000E+00 -2.35118E+02 -4.29347E+02 -6.23576E+02 1.78427E+02 8.91460E+01 -1.34957E-01 5.91972E+02 6.07639E+02 6.23306E+02 -2.35118E+02 -3.31226E+02 -4.27334E+02 8.81185E+01 4.57632E+01 3.40779E+00 4.11355E+02 4.22752E+02 4.34150E+02 -6.27940E+01 -1.49491E+02 -2.36187E+02 7.78689E+01 3.73422E+01 -3.18461E+00 2.18532E+02 2.24175E+02 2.29818E+02 + 2.72500E+00 -2.37272E+02 -4.32845E+02 -6.28418E+02 1.79684E+02 8.97936E+01 -9.68302E-02 5.96640E+02 6.12432E+02 6.28224E+02 -2.37272E+02 -3.34724E+02 -4.32177E+02 8.93755E+01 4.64107E+01 3.44592E+00 4.16023E+02 4.27546E+02 4.39068E+02 -6.49480E+01 -1.52989E+02 -2.41030E+02 7.91259E+01 3.79897E+01 -3.14649E+00 2.23200E+02 2.28968E+02 2.34737E+02 + 2.75000E+00 -2.39426E+02 -4.36343E+02 -6.33260E+02 1.80941E+02 9.04411E+01 -5.87139E-02 6.01308E+02 6.17225E+02 6.33143E+02 -2.39426E+02 -3.38222E+02 -4.37019E+02 9.06325E+01 4.70583E+01 3.48403E+00 4.20691E+02 4.32339E+02 4.43987E+02 -6.71021E+01 -1.56487E+02 -2.45872E+02 8.03829E+01 3.86372E+01 -3.10837E+00 2.27868E+02 2.33762E+02 2.39655E+02 + 2.77500E+00 -2.41580E+02 -4.39841E+02 -6.38103E+02 1.82198E+02 9.10887E+01 -2.05975E-02 6.05976E+02 6.22019E+02 6.38062E+02 -2.41580E+02 -3.41721E+02 -4.41861E+02 9.18895E+01 4.77058E+01 3.52215E+00 4.25359E+02 4.37132E+02 4.48906E+02 -6.92561E+01 -1.59985E+02 -2.50714E+02 8.16398E+01 3.92848E+01 -3.07025E+00 2.32536E+02 2.38555E+02 2.44574E+02 + 2.80000E+00 -2.43734E+02 -4.43340E+02 -6.42945E+02 1.83455E+02 9.17362E+01 1.75297E-02 6.10644E+02 6.26812E+02 6.42980E+02 -2.43734E+02 -3.45219E+02 -4.46704E+02 9.31464E+01 4.83534E+01 3.56028E+00 4.30027E+02 4.41926E+02 4.53824E+02 -7.14102E+01 -1.63483E+02 -2.55557E+02 8.28968E+01 3.99323E+01 -3.03213E+00 2.37204E+02 2.43348E+02 2.49492E+02 + 2.82500E+00 -2.45888E+02 -4.46838E+02 -6.47787E+02 1.84712E+02 9.23838E+01 5.56461E-02 6.15312E+02 6.31605E+02 6.47899E+02 -2.45888E+02 -3.48717E+02 -4.51546E+02 9.44034E+01 4.90009E+01 3.59839E+00 4.34695E+02 4.46719E+02 4.58743E+02 -7.35642E+01 -1.66982E+02 -2.60399E+02 8.41538E+01 4.05799E+01 -2.99401E+00 2.41872E+02 2.48141E+02 2.54411E+02 + 2.85000E+00 -2.48042E+02 -4.50336E+02 -6.52630E+02 1.85969E+02 9.30313E+01 9.37733E-02 6.19980E+02 6.36398E+02 6.52817E+02 -2.48042E+02 -3.52215E+02 -4.56388E+02 9.56604E+01 4.96485E+01 3.63652E+00 4.39363E+02 4.51512E+02 4.63661E+02 -7.57183E+01 -1.70480E+02 -2.65241E+02 8.54108E+01 4.12274E+01 -2.95589E+00 2.46540E+02 2.52935E+02 2.59330E+02 + 2.87500E+00 -2.50196E+02 -4.53834E+02 -6.57472E+02 1.87226E+02 9.36788E+01 1.31890E-01 6.24648E+02 6.41192E+02 6.57736E+02 -2.50196E+02 -3.55713E+02 -4.61231E+02 9.69174E+01 5.02960E+01 3.67464E+00 4.44031E+02 4.56305E+02 4.68580E+02 -7.78723E+01 -1.73978E+02 -2.70084E+02 8.66677E+01 4.18750E+01 -2.91777E+00 2.51208E+02 2.57728E+02 2.64248E+02 + 2.90000E+00 -2.52350E+02 -4.57332E+02 -6.62314E+02 1.88483E+02 9.43264E+01 1.70006E-01 6.29316E+02 6.45985E+02 6.62654E+02 -2.52350E+02 -3.59212E+02 -4.66073E+02 9.81743E+01 5.09436E+01 3.71275E+00 4.48699E+02 4.61099E+02 4.73499E+02 -8.00264E+01 -1.77476E+02 -2.74926E+02 8.79247E+01 4.25225E+01 -2.87965E+00 2.55876E+02 2.62521E+02 2.69167E+02 + 2.92500E+00 -2.54504E+02 -4.60831E+02 -6.67157E+02 1.89740E+02 9.49739E+01 2.08133E-01 6.33984E+02 6.50778E+02 6.67573E+02 -2.54504E+02 -3.62710E+02 -4.70915E+02 9.94313E+01 5.15911E+01 3.75088E+00 4.53367E+02 4.65892E+02 4.78417E+02 -8.21804E+01 -1.80974E+02 -2.79768E+02 8.91817E+01 4.31701E+01 -2.84152E+00 2.60544E+02 2.67315E+02 2.74085E+02 + 2.95000E+00 -2.56658E+02 -4.64329E+02 -6.71999E+02 1.90997E+02 9.56215E+01 2.46250E-01 6.38652E+02 6.55572E+02 6.72492E+02 -2.56658E+02 -3.66208E+02 -4.75758E+02 1.00688E+02 5.22386E+01 3.78899E+00 4.58035E+02 4.70685E+02 4.83336E+02 -8.43345E+01 -1.84473E+02 -2.84611E+02 9.04387E+01 4.38176E+01 -2.80341E+00 2.65212E+02 2.72108E+02 2.79004E+02 + 2.97500E+00 -2.58812E+02 -4.67827E+02 -6.76841E+02 1.92254E+02 9.62690E+01 2.84377E-01 6.43320E+02 6.60365E+02 6.77410E+02 -2.58812E+02 -3.69706E+02 -4.80600E+02 1.01945E+02 5.28862E+01 3.82712E+00 4.62703E+02 4.75479E+02 4.88254E+02 -8.64885E+01 -1.87971E+02 -2.89453E+02 9.16956E+01 4.44652E+01 -2.76529E+00 2.69880E+02 2.76901E+02 2.83923E+02 + 3.00000E+00 -3.47128E+02 -5.13133E+02 -6.79137E+02 1.53481E+02 7.94357E+01 5.39007E+00 6.54091E+02 6.72004E+02 6.89917E+02 -1.74804E+02 -3.31397E+02 -4.87990E+02 1.43232E+02 7.10147E+01 -1.20234E+00 4.61268E+02 4.73426E+02 4.85585E+02 -1.74804E+02 -2.33276E+02 -2.91748E+02 5.29232E+01 2.76318E+01 2.34041E+00 2.80651E+02 2.88540E+02 2.96429E+02 + 3.02500E+00 -3.49282E+02 -5.16631E+02 -6.83979E+02 1.54738E+02 8.00832E+01 5.42818E+00 6.58759E+02 6.76797E+02 6.94835E+02 -1.76959E+02 -3.34895E+02 -4.92832E+02 1.44489E+02 7.16622E+01 -1.16422E+00 4.65936E+02 4.78220E+02 4.90504E+02 -1.76959E+02 -2.36775E+02 -2.96591E+02 5.41802E+01 2.82794E+01 2.37853E+00 2.85319E+02 2.93333E+02 3.01348E+02 + 3.05000E+00 -3.51436E+02 -5.20129E+02 -6.88821E+02 1.55995E+02 8.07308E+01 5.46631E+00 6.63427E+02 6.81591E+02 6.99754E+02 -1.79113E+02 -3.38393E+02 -4.97674E+02 1.45746E+02 7.23098E+01 -1.12609E+00 4.70604E+02 4.83013E+02 4.95422E+02 -1.79113E+02 -2.40273E+02 -3.01433E+02 5.54372E+01 2.89269E+01 2.41665E+00 2.89987E+02 2.98127E+02 3.06266E+02 + 3.07500E+00 -3.53590E+02 -5.23627E+02 -6.93664E+02 1.57252E+02 8.13783E+01 5.50442E+00 6.68095E+02 6.86384E+02 7.04673E+02 -1.81267E+02 -3.41892E+02 -5.02517E+02 1.47003E+02 7.29573E+01 -1.08798E+00 4.75272E+02 4.87806E+02 5.00341E+02 -1.81267E+02 -2.43771E+02 -3.06275E+02 5.66941E+01 2.95745E+01 2.45477E+00 2.94655E+02 3.02920E+02 3.11185E+02 + 3.10000E+00 -3.55745E+02 -5.27125E+02 -6.98506E+02 1.58509E+02 8.20259E+01 5.54255E+00 6.72763E+02 6.91177E+02 7.09591E+02 -1.83421E+02 -3.45390E+02 -5.07359E+02 1.48260E+02 7.36049E+01 -1.04985E+00 4.79940E+02 4.92600E+02 5.05259E+02 -1.83421E+02 -2.47269E+02 -3.11118E+02 5.79511E+01 3.02220E+01 2.49289E+00 2.99323E+02 3.07713E+02 3.16104E+02 + 3.12500E+00 -3.57899E+02 -5.30624E+02 -7.03349E+02 1.59766E+02 8.26734E+01 5.58067E+00 6.77431E+02 6.95970E+02 7.14510E+02 -1.85575E+02 -3.48888E+02 -5.12201E+02 1.49517E+02 7.42524E+01 -1.01173E+00 4.84608E+02 4.97393E+02 5.10178E+02 -1.85575E+02 -2.50767E+02 -3.15960E+02 5.92081E+01 3.08696E+01 2.53101E+00 3.03991E+02 3.12507E+02 3.21022E+02 + 3.15000E+00 -3.60053E+02 -5.34122E+02 -7.08191E+02 1.61023E+02 8.33210E+01 5.61879E+00 6.82099E+02 7.00764E+02 7.19428E+02 -1.87729E+02 -3.52386E+02 -5.17044E+02 1.50773E+02 7.48999E+01 -9.73615E-01 4.89276E+02 5.02186E+02 5.15097E+02 -1.87729E+02 -2.54266E+02 -3.20802E+02 6.04651E+01 3.15171E+01 2.56914E+00 3.08659E+02 3.17300E+02 3.25941E+02 + 3.17500E+00 -3.62207E+02 -5.37620E+02 -7.13033E+02 1.62280E+02 8.39685E+01 5.65692E+00 6.86767E+02 7.05557E+02 7.24347E+02 -1.89883E+02 -3.55884E+02 -5.21886E+02 1.52030E+02 7.55475E+01 -9.35488E-01 4.93944E+02 5.06979E+02 5.20015E+02 -1.89883E+02 -2.57764E+02 -3.25645E+02 6.17220E+01 3.21647E+01 2.60726E+00 3.13327E+02 3.22093E+02 3.30859E+02 + 3.20000E+00 -3.64361E+02 -5.41118E+02 -7.17875E+02 1.63537E+02 8.46161E+01 5.69503E+00 6.91435E+02 7.10350E+02 7.29266E+02 -1.92037E+02 -3.59383E+02 -5.26729E+02 1.53287E+02 7.61950E+01 -8.97372E-01 4.98612E+02 5.11773E+02 5.24934E+02 -1.92037E+02 -2.61262E+02 -3.30487E+02 6.29790E+01 3.28122E+01 2.64537E+00 3.17995E+02 3.26886E+02 3.35778E+02 + 3.22500E+00 -3.66515E+02 -5.44616E+02 -7.22718E+02 1.64794E+02 8.52636E+01 5.73316E+00 6.96103E+02 7.15144E+02 7.34184E+02 -1.94191E+02 -3.62881E+02 -5.31571E+02 1.54544E+02 7.68426E+01 -8.59244E-01 5.03280E+02 5.16566E+02 5.29852E+02 -1.94191E+02 -2.64760E+02 -3.35329E+02 6.42360E+01 3.34597E+01 2.68349E+00 3.22663E+02 3.31680E+02 3.40697E+02 + 3.25000E+00 -3.68669E+02 -5.48115E+02 -7.27560E+02 1.66051E+02 8.59112E+01 5.77127E+00 7.00771E+02 7.19937E+02 7.39103E+02 -1.96345E+02 -3.66379E+02 -5.36413E+02 1.55801E+02 7.74901E+01 -8.21128E-01 5.07948E+02 5.21359E+02 5.34771E+02 -1.96345E+02 -2.68258E+02 -3.40172E+02 6.54930E+01 3.41073E+01 2.72162E+00 3.27331E+02 3.36473E+02 3.45615E+02 + 3.27500E+00 -3.70823E+02 -5.51613E+02 -7.32403E+02 1.67308E+02 8.65587E+01 5.80939E+00 7.05439E+02 7.24730E+02 7.44021E+02 -1.98499E+02 -3.69877E+02 -5.41256E+02 1.57058E+02 7.81377E+01 -7.83012E-01 5.12616E+02 5.26153E+02 5.39690E+02 -1.98499E+02 -2.71757E+02 -3.45014E+02 6.67500E+01 3.47548E+01 2.75974E+00 3.31999E+02 3.41266E+02 3.50534E+02 + 3.30000E+00 -3.72977E+02 -5.55111E+02 -7.37245E+02 1.68565E+02 8.72063E+01 5.84752E+00 7.10107E+02 7.29523E+02 7.48940E+02 -2.00653E+02 -3.73375E+02 -5.46098E+02 1.58315E+02 7.87852E+01 -7.44884E-01 5.17284E+02 5.30946E+02 5.44608E+02 -2.00653E+02 -2.75255E+02 -3.49857E+02 6.80069E+01 3.54024E+01 2.79786E+00 3.36667E+02 3.46060E+02 3.55452E+02 + 3.32500E+00 -3.75131E+02 -5.58609E+02 -7.42087E+02 1.69822E+02 8.78538E+01 5.88563E+00 7.14775E+02 7.34317E+02 7.53859E+02 -2.02807E+02 -3.76874E+02 -5.50940E+02 1.59572E+02 7.94328E+01 -7.06768E-01 5.21952E+02 5.35739E+02 5.49527E+02 -2.02807E+02 -2.78753E+02 -3.54699E+02 6.92639E+01 3.60499E+01 2.83598E+00 3.41335E+02 3.50853E+02 3.60371E+02 + 3.35000E+00 -3.77285E+02 -5.62107E+02 -7.46930E+02 1.71079E+02 8.85013E+01 5.92376E+00 7.19443E+02 7.39110E+02 7.58777E+02 -2.04961E+02 -3.80372E+02 -5.55783E+02 1.60829E+02 8.00803E+01 -6.68641E-01 5.26620E+02 5.40533E+02 5.54445E+02 -2.04961E+02 -2.82251E+02 -3.59541E+02 7.05209E+01 3.66975E+01 2.87410E+00 3.46003E+02 3.55646E+02 3.65289E+02 + 3.37500E+00 -3.79439E+02 -5.65606E+02 -7.51772E+02 1.72336E+02 8.91489E+01 5.96188E+00 7.24111E+02 7.43903E+02 7.63696E+02 -2.07115E+02 -3.83870E+02 -5.60625E+02 1.62086E+02 8.07279E+01 -6.30524E-01 5.31288E+02 5.45326E+02 5.59364E+02 -2.07115E+02 -2.85749E+02 -3.64384E+02 7.17779E+01 3.73450E+01 2.91222E+00 3.50671E+02 3.60440E+02 3.70208E+02 + 3.40000E+00 -3.81593E+02 -5.69104E+02 -7.56614E+02 1.73593E+02 8.97964E+01 5.99999E+00 7.28779E+02 7.48697E+02 7.68614E+02 -2.09269E+02 -3.87368E+02 -5.65467E+02 1.63343E+02 8.13754E+01 -5.92408E-01 5.35956E+02 5.50119E+02 5.64283E+02 -2.09269E+02 -2.89248E+02 -3.69226E+02 7.30348E+01 3.79926E+01 2.95034E+00 3.55339E+02 3.65233E+02 3.75127E+02 + 3.42500E+00 -3.83747E+02 -5.72602E+02 -7.61457E+02 1.74850E+02 9.04440E+01 6.03813E+00 7.33447E+02 7.53490E+02 7.73533E+02 -2.11423E+02 -3.90867E+02 -5.70310E+02 1.64600E+02 8.20230E+01 -5.54281E-01 5.40624E+02 5.54912E+02 5.69201E+02 -2.11423E+02 -2.92746E+02 -3.74068E+02 7.42918E+01 3.86401E+01 2.98846E+00 3.60007E+02 3.70026E+02 3.80045E+02 + 3.45000E+00 -3.85901E+02 -5.76100E+02 -7.66299E+02 1.76107E+02 9.10915E+01 6.07623E+00 7.38115E+02 7.58283E+02 7.78452E+02 -2.13577E+02 -3.94365E+02 -5.75152E+02 1.65857E+02 8.26705E+01 -5.16165E-01 5.45292E+02 5.59706E+02 5.74120E+02 -2.13577E+02 -2.96244E+02 -3.78911E+02 7.55488E+01 3.92877E+01 3.02658E+00 3.64675E+02 3.74819E+02 3.84964E+02 + 3.47500E+00 -3.88055E+02 -5.79598E+02 -7.71141E+02 1.77364E+02 9.17391E+01 6.11437E+00 7.42783E+02 7.63077E+02 7.83370E+02 -2.15731E+02 -3.97863E+02 -5.79994E+02 1.67114E+02 8.33181E+01 -4.78037E-01 5.49960E+02 5.64499E+02 5.79038E+02 -2.15731E+02 -2.99742E+02 -3.83753E+02 7.68057E+01 3.99352E+01 3.06470E+00 3.69343E+02 3.79613E+02 3.89882E+02 + 3.50000E+00 -3.90209E+02 -5.83097E+02 -7.75984E+02 1.78621E+02 9.23866E+01 6.15248E+00 7.47451E+02 7.67870E+02 7.88289E+02 -2.17885E+02 -4.01361E+02 -5.84837E+02 1.68371E+02 8.39656E+01 -4.39921E-01 5.54628E+02 5.69292E+02 5.83957E+02 -2.17885E+02 -3.03240E+02 -3.88595E+02 7.80627E+01 4.05828E+01 3.10282E+00 3.74011E+02 3.84406E+02 3.94801E+02 + 3.52500E+00 -3.92363E+02 -5.86595E+02 -7.80826E+02 1.79878E+02 9.30342E+01 6.19060E+00 7.52119E+02 7.72663E+02 7.93207E+02 -2.20040E+02 -4.04859E+02 -5.89679E+02 1.69628E+02 8.46132E+01 -4.01805E-01 5.59296E+02 5.74086E+02 5.88876E+02 -2.20040E+02 -3.06739E+02 -3.93438E+02 7.93197E+01 4.12303E+01 3.14095E+00 3.78679E+02 3.89199E+02 3.99720E+02 + 3.55000E+00 -3.94517E+02 -5.90093E+02 -7.85669E+02 1.81135E+02 9.36817E+01 6.22873E+00 7.56787E+02 7.77456E+02 7.98126E+02 -2.22194E+02 -4.08358E+02 -5.94521E+02 1.70885E+02 8.52607E+01 -3.63677E-01 5.63964E+02 5.78879E+02 5.93794E+02 -2.22194E+02 -3.10237E+02 -3.98280E+02 8.05767E+01 4.18779E+01 3.17907E+00 3.83347E+02 3.93993E+02 4.04638E+02 + 3.57500E+00 -3.96671E+02 -5.93591E+02 -7.90511E+02 1.82392E+02 9.43293E+01 6.26684E+00 7.61455E+02 7.82250E+02 8.03044E+02 -2.24348E+02 -4.11856E+02 -5.99364E+02 1.72142E+02 8.59083E+01 -3.25561E-01 5.68632E+02 5.83672E+02 5.98713E+02 -2.24348E+02 -3.13735E+02 -4.03122E+02 8.18337E+01 4.25254E+01 3.21718E+00 3.88015E+02 3.98786E+02 4.09557E+02 + 3.60000E+00 -3.98826E+02 -5.97089E+02 -7.95353E+02 1.83649E+02 9.49768E+01 6.30497E+00 7.66123E+02 7.87043E+02 8.07963E+02 -2.26502E+02 -4.15354E+02 -6.04206E+02 1.73399E+02 8.65558E+01 -2.87434E-01 5.73300E+02 5.88466E+02 6.03631E+02 -2.26502E+02 -3.17233E+02 -4.07965E+02 8.30906E+01 4.31730E+01 3.25531E+00 3.92683E+02 4.03579E+02 4.14475E+02 + 3.62500E+00 -4.00980E+02 -6.00588E+02 -8.00196E+02 1.84906E+02 9.56244E+01 6.34308E+00 7.70791E+02 7.91836E+02 8.12882E+02 -2.28656E+02 -4.18852E+02 -6.09049E+02 1.74656E+02 8.72034E+01 -2.49317E-01 5.77968E+02 5.93259E+02 6.08550E+02 -2.28656E+02 -3.20731E+02 -4.12807E+02 8.43476E+01 4.38205E+01 3.29343E+00 3.97351E+02 4.08372E+02 4.19394E+02 + 3.65000E+00 -4.03134E+02 -6.04086E+02 -8.05038E+02 1.86163E+02 9.62719E+01 6.38120E+00 7.75459E+02 7.96630E+02 8.17800E+02 -2.30810E+02 -4.22350E+02 -6.13891E+02 1.75913E+02 8.78509E+01 -2.11201E-01 5.82636E+02 5.98052E+02 6.13469E+02 -2.30810E+02 -3.24230E+02 -4.17650E+02 8.56046E+01 4.44681E+01 3.33154E+00 4.02019E+02 4.13166E+02 4.24313E+02 + 3.67500E+00 -4.05288E+02 -6.07584E+02 -8.09880E+02 1.87420E+02 9.69195E+01 6.41933E+00 7.80127E+02 8.01423E+02 8.22719E+02 -2.32964E+02 -4.25849E+02 -6.18733E+02 1.77170E+02 8.84985E+01 -1.73074E-01 5.87304E+02 6.02845E+02 6.18387E+02 -2.32964E+02 -3.27728E+02 -4.22492E+02 8.68616E+01 4.51156E+01 3.36967E+00 4.06687E+02 4.17959E+02 4.29231E+02 + 3.70000E+00 -4.07442E+02 -6.11082E+02 -8.14723E+02 1.88677E+02 9.75670E+01 6.45744E+00 7.84795E+02 8.06216E+02 8.27638E+02 -2.35118E+02 -4.29347E+02 -6.23576E+02 1.78427E+02 8.91460E+01 -1.34957E-01 5.91972E+02 6.07639E+02 6.23306E+02 -2.35118E+02 -3.31226E+02 -4.27334E+02 8.81185E+01 4.57632E+01 3.40779E+00 4.11355E+02 4.22752E+02 4.34150E+02 + 3.72500E+00 -4.09596E+02 -6.14580E+02 -8.19565E+02 1.89934E+02 9.82146E+01 6.49557E+00 7.89463E+02 8.11010E+02 8.32556E+02 -2.37272E+02 -4.32845E+02 -6.28418E+02 1.79684E+02 8.97936E+01 -9.68302E-02 5.96640E+02 6.12432E+02 6.28224E+02 -2.37272E+02 -3.34724E+02 -4.32177E+02 8.93755E+01 4.64107E+01 3.44592E+00 4.16023E+02 4.27546E+02 4.39068E+02 + 3.75000E+00 -4.11750E+02 -6.18079E+02 -8.24407E+02 1.91191E+02 9.88621E+01 6.53369E+00 7.94131E+02 8.15803E+02 8.37475E+02 -2.39426E+02 -4.36343E+02 -6.33260E+02 1.80941E+02 9.04411E+01 -5.87139E-02 6.01308E+02 6.17225E+02 6.33143E+02 -2.39426E+02 -3.38222E+02 -4.37019E+02 9.06325E+01 4.70583E+01 3.48403E+00 4.20691E+02 4.32339E+02 4.43987E+02 + 3.77500E+00 -4.13904E+02 -6.21577E+02 -8.29250E+02 1.92448E+02 9.95097E+01 6.57180E+00 7.98799E+02 8.20596E+02 8.42393E+02 -2.41580E+02 -4.39841E+02 -6.38103E+02 1.82198E+02 9.10887E+01 -2.05975E-02 6.05976E+02 6.22019E+02 6.38062E+02 -2.41580E+02 -3.41721E+02 -4.41861E+02 9.18895E+01 4.77058E+01 3.52215E+00 4.25359E+02 4.37132E+02 4.48906E+02 + 3.80000E+00 -4.16058E+02 -6.25075E+02 -8.34092E+02 1.93705E+02 1.00157E+02 6.60994E+00 8.03467E+02 8.25389E+02 8.47312E+02 -2.43734E+02 -4.43340E+02 -6.42945E+02 1.83455E+02 9.17362E+01 1.75297E-02 6.10644E+02 6.26812E+02 6.42980E+02 -2.43734E+02 -3.45219E+02 -4.46704E+02 9.31464E+01 4.83534E+01 3.56028E+00 4.30027E+02 4.41926E+02 4.53824E+02 + 3.82500E+00 -4.18212E+02 -6.28573E+02 -8.38934E+02 1.94961E+02 1.00805E+02 6.64804E+00 8.08135E+02 8.30183E+02 8.52230E+02 -2.45888E+02 -4.46838E+02 -6.47787E+02 1.84712E+02 9.23838E+01 5.56461E-02 6.15312E+02 6.31605E+02 6.47899E+02 -2.45888E+02 -3.48717E+02 -4.51546E+02 9.44034E+01 4.90009E+01 3.59839E+00 4.34695E+02 4.46719E+02 4.58743E+02 + 3.85000E+00 -4.20366E+02 -6.32071E+02 -8.43777E+02 1.96218E+02 1.01452E+02 6.68618E+00 8.12803E+02 8.34976E+02 8.57149E+02 -2.48042E+02 -4.50336E+02 -6.52630E+02 1.85969E+02 9.30313E+01 9.37733E-02 6.19980E+02 6.36398E+02 6.52817E+02 -2.48042E+02 -3.52215E+02 -4.56388E+02 9.56604E+01 4.96485E+01 3.63652E+00 4.39363E+02 4.51512E+02 4.63661E+02 + 3.87500E+00 -4.22520E+02 -6.35570E+02 -8.48619E+02 1.97475E+02 1.02100E+02 6.72429E+00 8.17471E+02 8.39769E+02 8.62068E+02 -2.50196E+02 -4.53834E+02 -6.57472E+02 1.87226E+02 9.36788E+01 1.31890E-01 6.24648E+02 6.41192E+02 6.57736E+02 -2.50196E+02 -3.55713E+02 -4.61231E+02 9.69174E+01 5.02960E+01 3.67464E+00 4.44031E+02 4.56305E+02 4.68580E+02 + 3.90000E+00 -4.24674E+02 -6.39068E+02 -8.53461E+02 1.98732E+02 1.02747E+02 6.76241E+00 8.22139E+02 8.44563E+02 8.66986E+02 -2.52350E+02 -4.57332E+02 -6.62314E+02 1.88483E+02 9.43264E+01 1.70006E-01 6.29316E+02 6.45985E+02 6.62654E+02 -2.52350E+02 -3.59212E+02 -4.66073E+02 9.81743E+01 5.09436E+01 3.71275E+00 4.48699E+02 4.61099E+02 4.73499E+02 + 3.92500E+00 -4.26828E+02 -6.42566E+02 -8.58304E+02 1.99989E+02 1.03395E+02 6.80054E+00 8.26807E+02 8.49356E+02 8.71905E+02 -2.54504E+02 -4.60831E+02 -6.67157E+02 1.89740E+02 9.49739E+01 2.08133E-01 6.33984E+02 6.50778E+02 6.67573E+02 -2.54504E+02 -3.62710E+02 -4.70915E+02 9.94313E+01 5.15911E+01 3.75088E+00 4.53367E+02 4.65892E+02 4.78417E+02 + 3.95000E+00 -4.28982E+02 -6.46064E+02 -8.63146E+02 2.01246E+02 1.04042E+02 6.83865E+00 8.31475E+02 8.54149E+02 8.76823E+02 -2.56658E+02 -4.64329E+02 -6.71999E+02 1.90997E+02 9.56215E+01 2.46250E-01 6.38652E+02 6.55572E+02 6.72492E+02 -2.56658E+02 -3.66208E+02 -4.75758E+02 1.00688E+02 5.22386E+01 3.78899E+00 4.58035E+02 4.70685E+02 4.83336E+02 + 3.97500E+00 -4.31136E+02 -6.49562E+02 -8.67989E+02 2.02503E+02 1.04690E+02 6.87678E+00 8.36143E+02 8.58943E+02 8.81742E+02 -2.58812E+02 -4.67827E+02 -6.76841E+02 1.92254E+02 9.62690E+01 2.84377E-01 6.43320E+02 6.60365E+02 6.77410E+02 -2.58812E+02 -3.69706E+02 -4.80600E+02 1.01945E+02 5.28862E+01 3.82712E+00 4.62703E+02 4.75479E+02 4.88254E+02 + 4.00000E+00 -3.47128E+02 -6.11253E+02 -8.75378E+02 2.43790E+02 1.22819E+02 1.84732E+00 8.34708E+02 8.56890E+02 8.79073E+02 -3.47128E+02 -5.13133E+02 -6.79137E+02 1.53481E+02 7.94357E+01 5.39007E+00 6.54091E+02 6.72004E+02 6.89917E+02 -1.74804E+02 -3.31397E+02 -4.87990E+02 1.43232E+02 7.10147E+01 -1.20234E+00 4.61268E+02 4.73426E+02 4.85585E+02 + 4.02500E+00 -3.49282E+02 -6.14751E+02 -8.80220E+02 2.45047E+02 1.23466E+02 1.88544E+00 8.39376E+02 8.61684E+02 8.83991E+02 -3.49282E+02 -5.16631E+02 -6.83979E+02 1.54738E+02 8.00832E+01 5.42818E+00 6.58759E+02 6.76797E+02 6.94835E+02 -1.76959E+02 -3.34895E+02 -4.92832E+02 1.44489E+02 7.16622E+01 -1.16422E+00 4.65936E+02 4.78220E+02 4.90504E+02 + 4.05000E+00 -3.51436E+02 -6.18250E+02 -8.85063E+02 2.46304E+02 1.24114E+02 1.92357E+00 8.44044E+02 8.66477E+02 8.88910E+02 -3.51436E+02 -5.20129E+02 -6.88821E+02 1.55995E+02 8.07308E+01 5.46631E+00 6.63427E+02 6.81591E+02 6.99754E+02 -1.79113E+02 -3.38393E+02 -4.97674E+02 1.45746E+02 7.23098E+01 -1.12609E+00 4.70604E+02 4.83013E+02 4.95422E+02 + 4.07500E+00 -3.53590E+02 -6.21748E+02 -8.89905E+02 2.47561E+02 1.24761E+02 1.96168E+00 8.48712E+02 8.71270E+02 8.93828E+02 -3.53590E+02 -5.23627E+02 -6.93664E+02 1.57252E+02 8.13783E+01 5.50442E+00 6.68095E+02 6.86384E+02 7.04673E+02 -1.81267E+02 -3.41892E+02 -5.02517E+02 1.47003E+02 7.29573E+01 -1.08798E+00 4.75272E+02 4.87806E+02 5.00341E+02 + 4.10000E+00 -3.55745E+02 -6.25246E+02 -8.94747E+02 2.48818E+02 1.25409E+02 1.99981E+00 8.53380E+02 8.76063E+02 8.98747E+02 -3.55745E+02 -5.27125E+02 -6.98506E+02 1.58509E+02 8.20259E+01 5.54255E+00 6.72763E+02 6.91177E+02 7.09591E+02 -1.83421E+02 -3.45390E+02 -5.07359E+02 1.48260E+02 7.36049E+01 -1.04985E+00 4.79940E+02 4.92600E+02 5.05259E+02 + 4.12500E+00 -3.57899E+02 -6.28744E+02 -8.99590E+02 2.50075E+02 1.26056E+02 2.03793E+00 8.58048E+02 8.80857E+02 9.03666E+02 -3.57899E+02 -5.30624E+02 -7.03349E+02 1.59766E+02 8.26734E+01 5.58067E+00 6.77431E+02 6.95970E+02 7.14510E+02 -1.85575E+02 -3.48888E+02 -5.12201E+02 1.49517E+02 7.42524E+01 -1.01173E+00 4.84608E+02 4.97393E+02 5.10178E+02 + 4.15000E+00 -3.60053E+02 -6.32242E+02 -9.04432E+02 2.51332E+02 1.26704E+02 2.07604E+00 8.62716E+02 8.85650E+02 9.08584E+02 -3.60053E+02 -5.34122E+02 -7.08191E+02 1.61023E+02 8.33210E+01 5.61879E+00 6.82099E+02 7.00764E+02 7.19428E+02 -1.87729E+02 -3.52386E+02 -5.17044E+02 1.50773E+02 7.48999E+01 -9.73615E-01 4.89276E+02 5.02186E+02 5.15097E+02 + 4.17500E+00 -3.62207E+02 -6.35741E+02 -9.09275E+02 2.52589E+02 1.27351E+02 2.11416E+00 8.67384E+02 8.90443E+02 9.13503E+02 -3.62207E+02 -5.37620E+02 -7.13033E+02 1.62280E+02 8.39685E+01 5.65692E+00 6.86767E+02 7.05557E+02 7.24347E+02 -1.89883E+02 -3.55884E+02 -5.21886E+02 1.52030E+02 7.55475E+01 -9.35488E-01 4.93944E+02 5.06979E+02 5.20015E+02 + 4.20000E+00 -3.64361E+02 -6.39239E+02 -9.14117E+02 2.53846E+02 1.27999E+02 2.15230E+00 8.72052E+02 8.95237E+02 9.18421E+02 -3.64361E+02 -5.41118E+02 -7.17875E+02 1.63537E+02 8.46161E+01 5.69503E+00 6.91435E+02 7.10350E+02 7.29266E+02 -1.92037E+02 -3.59383E+02 -5.26729E+02 1.53287E+02 7.61950E+01 -8.97372E-01 4.98612E+02 5.11773E+02 5.24934E+02 + 4.22500E+00 -3.66515E+02 -6.42737E+02 -9.18959E+02 2.55102E+02 1.28646E+02 2.19041E+00 8.76720E+02 9.00030E+02 9.23340E+02 -3.66515E+02 -5.44616E+02 -7.22718E+02 1.64794E+02 8.52636E+01 5.73316E+00 6.96103E+02 7.15144E+02 7.34184E+02 -1.94191E+02 -3.62881E+02 -5.31571E+02 1.54544E+02 7.68426E+01 -8.59244E-01 5.03280E+02 5.16566E+02 5.29852E+02 + 4.25000E+00 -3.68669E+02 -6.46235E+02 -9.23802E+02 2.56359E+02 1.29294E+02 2.22853E+00 8.81388E+02 9.04823E+02 9.28259E+02 -3.68669E+02 -5.48115E+02 -7.27560E+02 1.66051E+02 8.59112E+01 5.77127E+00 7.00771E+02 7.19937E+02 7.39103E+02 -1.96345E+02 -3.66379E+02 -5.36413E+02 1.55801E+02 7.74901E+01 -8.21128E-01 5.07948E+02 5.21359E+02 5.34771E+02 + 4.27500E+00 -3.70823E+02 -6.49733E+02 -9.28644E+02 2.57616E+02 1.29942E+02 2.26664E+00 8.86056E+02 9.09617E+02 9.33177E+02 -3.70823E+02 -5.51613E+02 -7.32403E+02 1.67308E+02 8.65587E+01 5.80939E+00 7.05439E+02 7.24730E+02 7.44021E+02 -1.98499E+02 -3.69877E+02 -5.41256E+02 1.57058E+02 7.81377E+01 -7.83012E-01 5.12616E+02 5.26153E+02 5.39690E+02 + 4.30000E+00 -3.72977E+02 -6.53232E+02 -9.33486E+02 2.58873E+02 1.30589E+02 2.30476E+00 8.90724E+02 9.14410E+02 9.38096E+02 -3.72977E+02 -5.55111E+02 -7.37245E+02 1.68565E+02 8.72063E+01 5.84752E+00 7.10107E+02 7.29523E+02 7.48940E+02 -2.00653E+02 -3.73375E+02 -5.46098E+02 1.58315E+02 7.87852E+01 -7.44884E-01 5.17284E+02 5.30946E+02 5.44608E+02 + 4.32500E+00 -3.75131E+02 -6.56730E+02 -9.38329E+02 2.60130E+02 1.31237E+02 2.34290E+00 8.95392E+02 9.19203E+02 9.43014E+02 -3.75131E+02 -5.58609E+02 -7.42087E+02 1.69822E+02 8.78538E+01 5.88563E+00 7.14775E+02 7.34317E+02 7.53859E+02 -2.02807E+02 -3.76874E+02 -5.50940E+02 1.59572E+02 7.94328E+01 -7.06768E-01 5.21952E+02 5.35739E+02 5.49527E+02 + 4.35000E+00 -3.77285E+02 -6.60228E+02 -9.43171E+02 2.61387E+02 1.31884E+02 2.38102E+00 9.00060E+02 9.23996E+02 9.47933E+02 -3.77285E+02 -5.62107E+02 -7.46930E+02 1.71079E+02 8.85013E+01 5.92376E+00 7.19443E+02 7.39110E+02 7.58777E+02 -2.04961E+02 -3.80372E+02 -5.55783E+02 1.60829E+02 8.00803E+01 -6.68641E-01 5.26620E+02 5.40533E+02 5.54445E+02 + 4.37500E+00 -3.79439E+02 -6.63726E+02 -9.48013E+02 2.62644E+02 1.32532E+02 2.41913E+00 9.04728E+02 9.28790E+02 9.52852E+02 -3.79439E+02 -5.65606E+02 -7.51772E+02 1.72336E+02 8.91489E+01 5.96188E+00 7.24111E+02 7.43903E+02 7.63696E+02 -2.07115E+02 -3.83870E+02 -5.60625E+02 1.62086E+02 8.07279E+01 -6.30524E-01 5.31288E+02 5.45326E+02 5.59364E+02 + 4.40000E+00 -3.81593E+02 -6.67224E+02 -9.52856E+02 2.63901E+02 1.33179E+02 2.45725E+00 9.09396E+02 9.33583E+02 9.57770E+02 -3.81593E+02 -5.69104E+02 -7.56614E+02 1.73593E+02 8.97964E+01 5.99999E+00 7.28779E+02 7.48697E+02 7.68614E+02 -2.09269E+02 -3.87368E+02 -5.65467E+02 1.63343E+02 8.13754E+01 -5.92408E-01 5.35956E+02 5.50119E+02 5.64283E+02 + 4.42500E+00 -3.83747E+02 -6.70723E+02 -9.57698E+02 2.65158E+02 1.33827E+02 2.49536E+00 9.14064E+02 9.38376E+02 9.62689E+02 -3.83747E+02 -5.72602E+02 -7.61457E+02 1.74850E+02 9.04440E+01 6.03813E+00 7.33447E+02 7.53490E+02 7.73533E+02 -2.11423E+02 -3.90867E+02 -5.70310E+02 1.64600E+02 8.20230E+01 -5.54281E-01 5.40624E+02 5.54912E+02 5.69201E+02 + 4.45000E+00 -3.85901E+02 -6.74221E+02 -9.62540E+02 2.66415E+02 1.34474E+02 2.53350E+00 9.18732E+02 9.43170E+02 9.67607E+02 -3.85901E+02 -5.76100E+02 -7.66299E+02 1.76107E+02 9.10915E+01 6.07623E+00 7.38115E+02 7.58283E+02 7.78452E+02 -2.13577E+02 -3.94365E+02 -5.75152E+02 1.65857E+02 8.26705E+01 -5.16165E-01 5.45292E+02 5.59706E+02 5.74120E+02 + 4.47500E+00 -3.88055E+02 -6.77719E+02 -9.67383E+02 2.67672E+02 1.35122E+02 2.57162E+00 9.23400E+02 9.47963E+02 9.72526E+02 -3.88055E+02 -5.79598E+02 -7.71141E+02 1.77364E+02 9.17391E+01 6.11437E+00 7.42783E+02 7.63077E+02 7.83370E+02 -2.15731E+02 -3.97863E+02 -5.79994E+02 1.67114E+02 8.33181E+01 -4.78037E-01 5.49960E+02 5.64499E+02 5.79038E+02 + 4.50000E+00 -3.90209E+02 -6.81217E+02 -9.72225E+02 2.68929E+02 1.35769E+02 2.60974E+00 9.28068E+02 9.52756E+02 9.77445E+02 -3.90209E+02 -5.83097E+02 -7.75984E+02 1.78621E+02 9.23866E+01 6.15248E+00 7.47451E+02 7.67870E+02 7.88289E+02 -2.17885E+02 -4.01361E+02 -5.84837E+02 1.68371E+02 8.39656E+01 -4.39921E-01 5.54628E+02 5.69292E+02 5.83957E+02 + 4.52500E+00 -3.92363E+02 -6.84715E+02 -9.77068E+02 2.70186E+02 1.36417E+02 2.64785E+00 9.32736E+02 9.57549E+02 9.82363E+02 -3.92363E+02 -5.86595E+02 -7.80826E+02 1.79878E+02 9.30342E+01 6.19060E+00 7.52119E+02 7.72663E+02 7.93207E+02 -2.20040E+02 -4.04859E+02 -5.89679E+02 1.69628E+02 8.46132E+01 -4.01805E-01 5.59296E+02 5.74086E+02 5.88876E+02 + 4.55000E+00 -3.94517E+02 -6.88214E+02 -9.81910E+02 2.71443E+02 1.37065E+02 2.68597E+00 9.37404E+02 9.62343E+02 9.87282E+02 -3.94517E+02 -5.90093E+02 -7.85669E+02 1.81135E+02 9.36817E+01 6.22873E+00 7.56787E+02 7.77456E+02 7.98126E+02 -2.22194E+02 -4.08358E+02 -5.94521E+02 1.70885E+02 8.52607E+01 -3.63677E-01 5.63964E+02 5.78879E+02 5.93794E+02 + 4.57500E+00 -3.96671E+02 -6.91712E+02 -9.86752E+02 2.72700E+02 1.37712E+02 2.72411E+00 9.42072E+02 9.67136E+02 9.92200E+02 -3.96671E+02 -5.93591E+02 -7.90511E+02 1.82392E+02 9.43293E+01 6.26684E+00 7.61455E+02 7.82250E+02 8.03044E+02 -2.24348E+02 -4.11856E+02 -5.99364E+02 1.72142E+02 8.59083E+01 -3.25561E-01 5.68632E+02 5.83672E+02 5.98713E+02 + 4.60000E+00 -3.98826E+02 -6.95210E+02 -9.91595E+02 2.73957E+02 1.38360E+02 2.76222E+00 9.46740E+02 9.71929E+02 9.97119E+02 -3.98826E+02 -5.97089E+02 -7.95353E+02 1.83649E+02 9.49768E+01 6.30497E+00 7.66123E+02 7.87043E+02 8.07963E+02 -2.26502E+02 -4.15354E+02 -6.04206E+02 1.73399E+02 8.65558E+01 -2.87434E-01 5.73300E+02 5.88466E+02 6.03631E+02 + 4.62500E+00 -4.00980E+02 -6.98708E+02 -9.96437E+02 2.75214E+02 1.39007E+02 2.80034E+00 9.51408E+02 9.76723E+02 1.00204E+03 -4.00980E+02 -6.00588E+02 -8.00196E+02 1.84906E+02 9.56244E+01 6.34308E+00 7.70791E+02 7.91836E+02 8.12882E+02 -2.28656E+02 -4.18852E+02 -6.09049E+02 1.74656E+02 8.72034E+01 -2.49317E-01 5.77968E+02 5.93259E+02 6.08550E+02 + 4.65000E+00 -4.03134E+02 -7.02206E+02 -1.00128E+03 2.76471E+02 1.39655E+02 2.83846E+00 9.56076E+02 9.81516E+02 1.00696E+03 -4.03134E+02 -6.04086E+02 -8.05038E+02 1.86163E+02 9.62719E+01 6.38120E+00 7.75459E+02 7.96630E+02 8.17800E+02 -2.30810E+02 -4.22350E+02 -6.13891E+02 1.75913E+02 8.78509E+01 -2.11201E-01 5.82636E+02 5.98052E+02 6.13469E+02 + 4.67500E+00 -4.05288E+02 -7.05705E+02 -1.00612E+03 2.77728E+02 1.40302E+02 2.87657E+00 9.60744E+02 9.86309E+02 1.01187E+03 -4.05288E+02 -6.07584E+02 -8.09880E+02 1.87420E+02 9.69195E+01 6.41933E+00 7.80127E+02 8.01423E+02 8.22719E+02 -2.32964E+02 -4.25849E+02 -6.18733E+02 1.77170E+02 8.84985E+01 -1.73074E-01 5.87304E+02 6.02845E+02 6.18387E+02 + 4.70000E+00 -4.07442E+02 -7.09203E+02 -1.01096E+03 2.78985E+02 1.40950E+02 2.91471E+00 9.65412E+02 9.91103E+02 1.01679E+03 -4.07442E+02 -6.11082E+02 -8.14723E+02 1.88677E+02 9.75670E+01 6.45744E+00 7.84795E+02 8.06216E+02 8.27638E+02 -2.35118E+02 -4.29347E+02 -6.23576E+02 1.78427E+02 8.91460E+01 -1.34957E-01 5.91972E+02 6.07639E+02 6.23306E+02 + 4.72500E+00 -4.09596E+02 -7.12701E+02 -1.01581E+03 2.80242E+02 1.41597E+02 2.95283E+00 9.70080E+02 9.95896E+02 1.02171E+03 -4.09596E+02 -6.14580E+02 -8.19565E+02 1.89934E+02 9.82146E+01 6.49557E+00 7.89463E+02 8.11010E+02 8.32556E+02 -2.37272E+02 -4.32845E+02 -6.28418E+02 1.79684E+02 8.97936E+01 -9.68302E-02 5.96640E+02 6.12432E+02 6.28224E+02 + 4.75000E+00 -4.11750E+02 -7.16199E+02 -1.02065E+03 2.81499E+02 1.42245E+02 2.99094E+00 9.74748E+02 1.00069E+03 1.02663E+03 -4.11750E+02 -6.18079E+02 -8.24407E+02 1.91191E+02 9.88621E+01 6.53369E+00 7.94131E+02 8.15803E+02 8.37475E+02 -2.39426E+02 -4.36343E+02 -6.33260E+02 1.80941E+02 9.04411E+01 -5.87139E-02 6.01308E+02 6.17225E+02 6.33143E+02 + 4.77500E+00 -4.13904E+02 -7.19697E+02 -1.02549E+03 2.82756E+02 1.42893E+02 3.02906E+00 9.79416E+02 1.00548E+03 1.03155E+03 -4.13904E+02 -6.21577E+02 -8.29250E+02 1.92448E+02 9.95097E+01 6.57180E+00 7.98799E+02 8.20596E+02 8.42393E+02 -2.41580E+02 -4.39841E+02 -6.38103E+02 1.82198E+02 9.10887E+01 -2.05975E-02 6.05976E+02 6.22019E+02 6.38062E+02 + 4.80000E+00 -4.16058E+02 -7.23196E+02 -1.03033E+03 2.84013E+02 1.43540E+02 3.06718E+00 9.84084E+02 1.01028E+03 1.03647E+03 -4.16058E+02 -6.25075E+02 -8.34092E+02 1.93705E+02 1.00157E+02 6.60994E+00 8.03467E+02 8.25389E+02 8.47312E+02 -2.43734E+02 -4.43340E+02 -6.42945E+02 1.83455E+02 9.17362E+01 1.75297E-02 6.10644E+02 6.26812E+02 6.42980E+02 + 4.82500E+00 -4.18212E+02 -7.26694E+02 -1.03518E+03 2.85270E+02 1.44188E+02 3.10531E+00 9.88752E+02 1.01507E+03 1.04139E+03 -4.18212E+02 -6.28573E+02 -8.38934E+02 1.94961E+02 1.00805E+02 6.64804E+00 8.08135E+02 8.30183E+02 8.52230E+02 -2.45888E+02 -4.46838E+02 -6.47787E+02 1.84712E+02 9.23838E+01 5.56461E-02 6.15312E+02 6.31605E+02 6.47899E+02 + 4.85000E+00 -4.20366E+02 -7.30192E+02 -1.04002E+03 2.86527E+02 1.44835E+02 3.14343E+00 9.93420E+02 1.01986E+03 1.04630E+03 -4.20366E+02 -6.32071E+02 -8.43777E+02 1.96218E+02 1.01452E+02 6.68618E+00 8.12803E+02 8.34976E+02 8.57149E+02 -2.48042E+02 -4.50336E+02 -6.52630E+02 1.85969E+02 9.30313E+01 9.37733E-02 6.19980E+02 6.36398E+02 6.52817E+02 + 4.87500E+00 -4.22520E+02 -7.33690E+02 -1.04486E+03 2.87784E+02 1.45483E+02 3.18155E+00 9.98088E+02 1.02466E+03 1.05122E+03 -4.22520E+02 -6.35570E+02 -8.48619E+02 1.97475E+02 1.02100E+02 6.72429E+00 8.17471E+02 8.39769E+02 8.62068E+02 -2.50196E+02 -4.53834E+02 -6.57472E+02 1.87226E+02 9.36788E+01 1.31890E-01 6.24648E+02 6.41192E+02 6.57736E+02 + 4.90000E+00 -4.24674E+02 -7.37188E+02 -1.04970E+03 2.89041E+02 1.46130E+02 3.21966E+00 1.00276E+03 1.02945E+03 1.05614E+03 -4.24674E+02 -6.39068E+02 -8.53461E+02 1.98732E+02 1.02747E+02 6.76241E+00 8.22139E+02 8.44563E+02 8.66986E+02 -2.52350E+02 -4.57332E+02 -6.62314E+02 1.88483E+02 9.43264E+01 1.70006E-01 6.29316E+02 6.45985E+02 6.62654E+02 + 4.92500E+00 -4.26828E+02 -7.40687E+02 -1.05455E+03 2.90298E+02 1.46778E+02 3.25778E+00 1.00742E+03 1.03424E+03 1.06106E+03 -4.26828E+02 -6.42566E+02 -8.58304E+02 1.99989E+02 1.03395E+02 6.80054E+00 8.26807E+02 8.49356E+02 8.71905E+02 -2.54504E+02 -4.60831E+02 -6.67157E+02 1.89740E+02 9.49739E+01 2.08133E-01 6.33984E+02 6.50778E+02 6.67573E+02 + 4.95000E+00 -4.28982E+02 -7.44185E+02 -1.05939E+03 2.91555E+02 1.47425E+02 3.29592E+00 1.01209E+03 1.03904E+03 1.06598E+03 -4.28982E+02 -6.46064E+02 -8.63146E+02 2.01246E+02 1.04042E+02 6.83865E+00 8.31475E+02 8.54149E+02 8.76823E+02 -2.56658E+02 -4.64329E+02 -6.71999E+02 1.90997E+02 9.56215E+01 2.46250E-01 6.38652E+02 6.55572E+02 6.72492E+02 + 4.97500E+00 -4.31136E+02 -7.47683E+02 -1.06423E+03 2.92812E+02 1.48073E+02 3.33403E+00 1.01676E+03 1.04383E+03 1.07090E+03 -4.31136E+02 -6.49562E+02 -8.67989E+02 2.02503E+02 1.04690E+02 6.87678E+00 8.36143E+02 8.58943E+02 8.81742E+02 -2.58812E+02 -4.67827E+02 -6.76841E+02 1.92254E+02 9.62690E+01 2.84377E-01 6.43320E+02 6.60365E+02 6.77410E+02 + 5.00000E+00 -5.19452E+02 -7.92989E+02 -1.06653E+03 2.54039E+02 1.31240E+02 8.43972E+00 1.02753E+03 1.05547E+03 1.08340E+03 -3.47128E+02 -6.11253E+02 -8.75378E+02 2.43790E+02 1.22819E+02 1.84732E+00 8.34708E+02 8.56890E+02 8.79073E+02 -3.47128E+02 -5.13133E+02 -6.79137E+02 1.53481E+02 7.94357E+01 5.39007E+00 6.54091E+02 6.72004E+02 6.89917E+02 + 5.02500E+00 -5.21606E+02 -7.96487E+02 -1.07137E+03 2.55296E+02 1.31887E+02 8.47784E+00 1.03220E+03 1.06026E+03 1.08832E+03 -3.49282E+02 -6.14751E+02 -8.80220E+02 2.45047E+02 1.23466E+02 1.88544E+00 8.39376E+02 8.61684E+02 8.83991E+02 -3.49282E+02 -5.16631E+02 -6.83979E+02 1.54738E+02 8.00832E+01 5.42818E+00 6.58759E+02 6.76797E+02 6.94835E+02 + 5.05000E+00 -5.23760E+02 -7.99985E+02 -1.07621E+03 2.56553E+02 1.32535E+02 8.51596E+00 1.03687E+03 1.06505E+03 1.09324E+03 -3.51436E+02 -6.18250E+02 -8.85063E+02 2.46304E+02 1.24114E+02 1.92357E+00 8.44044E+02 8.66477E+02 8.88910E+02 -3.51436E+02 -5.20129E+02 -6.88821E+02 1.55995E+02 8.07308E+01 5.46631E+00 6.63427E+02 6.81591E+02 6.99754E+02 + 5.07500E+00 -5.25914E+02 -8.03483E+02 -1.08105E+03 2.57810E+02 1.33182E+02 8.55410E+00 1.04153E+03 1.06985E+03 1.09816E+03 -3.53590E+02 -6.21748E+02 -8.89905E+02 2.47561E+02 1.24761E+02 1.96168E+00 8.48712E+02 8.71270E+02 8.93828E+02 -3.53590E+02 -5.23627E+02 -6.93664E+02 1.57252E+02 8.13783E+01 5.50442E+00 6.68095E+02 6.86384E+02 7.04673E+02 + 5.10000E+00 -5.28068E+02 -8.06981E+02 -1.08589E+03 2.59067E+02 1.33830E+02 8.59221E+00 1.04620E+03 1.07464E+03 1.10308E+03 -3.55745E+02 -6.25246E+02 -8.94747E+02 2.48818E+02 1.25409E+02 1.99981E+00 8.53380E+02 8.76063E+02 8.98747E+02 -3.55745E+02 -5.27125E+02 -6.98506E+02 1.58509E+02 8.20259E+01 5.54255E+00 6.72763E+02 6.91177E+02 7.09591E+02 + 5.12500E+00 -5.30222E+02 -8.10480E+02 -1.09074E+03 2.60324E+02 1.34477E+02 8.63033E+00 1.05087E+03 1.07943E+03 1.10800E+03 -3.57899E+02 -6.28744E+02 -8.99590E+02 2.50075E+02 1.26056E+02 2.03793E+00 8.58048E+02 8.80857E+02 9.03666E+02 -3.57899E+02 -5.30624E+02 -7.03349E+02 1.59766E+02 8.26734E+01 5.58067E+00 6.77431E+02 6.95970E+02 7.14510E+02 + 5.15000E+00 -5.32377E+02 -8.13978E+02 -1.09558E+03 2.61581E+02 1.35125E+02 8.66844E+00 1.05554E+03 1.08423E+03 1.11292E+03 -3.60053E+02 -6.32242E+02 -9.04432E+02 2.51332E+02 1.26704E+02 2.07604E+00 8.62716E+02 8.85650E+02 9.08584E+02 -3.60053E+02 -5.34122E+02 -7.08191E+02 1.61023E+02 8.33210E+01 5.61879E+00 6.82099E+02 7.00764E+02 7.19428E+02 + 5.17500E+00 -5.34531E+02 -8.17476E+02 -1.10042E+03 2.62838E+02 1.35772E+02 8.70656E+00 1.06021E+03 1.08902E+03 1.11783E+03 -3.62207E+02 -6.35741E+02 -9.09275E+02 2.52589E+02 1.27351E+02 2.11416E+00 8.67384E+02 8.90443E+02 9.13503E+02 -3.62207E+02 -5.37620E+02 -7.13033E+02 1.62280E+02 8.39685E+01 5.65692E+00 6.86767E+02 7.05557E+02 7.24347E+02 + 5.20000E+00 -5.36685E+02 -8.20974E+02 -1.10526E+03 2.64095E+02 1.36420E+02 8.74470E+00 1.06487E+03 1.09381E+03 1.12275E+03 -3.64361E+02 -6.39239E+02 -9.14117E+02 2.53846E+02 1.27999E+02 2.15230E+00 8.72052E+02 8.95237E+02 9.18421E+02 -3.64361E+02 -5.41118E+02 -7.17875E+02 1.63537E+02 8.46161E+01 5.69503E+00 6.91435E+02 7.10350E+02 7.29266E+02 + 5.22500E+00 -5.38839E+02 -8.24472E+02 -1.11011E+03 2.65352E+02 1.37067E+02 8.78281E+00 1.06954E+03 1.09861E+03 1.12767E+03 -3.66515E+02 -6.42737E+02 -9.18959E+02 2.55102E+02 1.28646E+02 2.19041E+00 8.76720E+02 9.00030E+02 9.23340E+02 -3.66515E+02 -5.44616E+02 -7.22718E+02 1.64794E+02 8.52636E+01 5.73316E+00 6.96103E+02 7.15144E+02 7.34184E+02 + 5.25000E+00 -5.40993E+02 -8.27971E+02 -1.11495E+03 2.66609E+02 1.37715E+02 8.82093E+00 1.07421E+03 1.10340E+03 1.13259E+03 -3.68669E+02 -6.46235E+02 -9.23802E+02 2.56359E+02 1.29294E+02 2.22853E+00 8.81388E+02 9.04823E+02 9.28259E+02 -3.68669E+02 -5.48115E+02 -7.27560E+02 1.66051E+02 8.59112E+01 5.77127E+00 7.00771E+02 7.19937E+02 7.39103E+02 + 5.27500E+00 -5.43147E+02 -8.31469E+02 -1.11979E+03 2.67866E+02 1.38363E+02 8.85905E+00 1.07888E+03 1.10819E+03 1.13751E+03 -3.70823E+02 -6.49733E+02 -9.28644E+02 2.57616E+02 1.29942E+02 2.26664E+00 8.86056E+02 9.09617E+02 9.33177E+02 -3.70823E+02 -5.51613E+02 -7.32403E+02 1.67308E+02 8.65587E+01 5.80939E+00 7.05439E+02 7.24730E+02 7.44021E+02 + 5.30000E+00 -5.45301E+02 -8.34967E+02 -1.12463E+03 2.69123E+02 1.39010E+02 8.89716E+00 1.08355E+03 1.11299E+03 1.14243E+03 -3.72977E+02 -6.53232E+02 -9.33486E+02 2.58873E+02 1.30589E+02 2.30476E+00 8.90724E+02 9.14410E+02 9.38096E+02 -3.72977E+02 -5.55111E+02 -7.37245E+02 1.68565E+02 8.72063E+01 5.84752E+00 7.10107E+02 7.29523E+02 7.48940E+02 + 5.32500E+00 -5.47455E+02 -8.38465E+02 -1.12948E+03 2.70380E+02 1.39658E+02 8.93530E+00 1.08821E+03 1.11778E+03 1.14735E+03 -3.75131E+02 -6.56730E+02 -9.38329E+02 2.60130E+02 1.31237E+02 2.34290E+00 8.95392E+02 9.19203E+02 9.43014E+02 -3.75131E+02 -5.58609E+02 -7.42087E+02 1.69822E+02 8.78538E+01 5.88563E+00 7.14775E+02 7.34317E+02 7.53859E+02 + 5.35000E+00 -5.49609E+02 -8.41963E+02 -1.13432E+03 2.71637E+02 1.40305E+02 8.97342E+00 1.09288E+03 1.12257E+03 1.15226E+03 -3.77285E+02 -6.60228E+02 -9.43171E+02 2.61387E+02 1.31884E+02 2.38102E+00 9.00060E+02 9.23996E+02 9.47933E+02 -3.77285E+02 -5.62107E+02 -7.46930E+02 1.71079E+02 8.85013E+01 5.92376E+00 7.19443E+02 7.39110E+02 7.58777E+02 + 5.37500E+00 -5.51763E+02 -8.45462E+02 -1.13916E+03 2.72894E+02 1.40953E+02 9.01153E+00 1.09755E+03 1.12737E+03 1.15718E+03 -3.79439E+02 -6.63726E+02 -9.48013E+02 2.62644E+02 1.32532E+02 2.41913E+00 9.04728E+02 9.28790E+02 9.52852E+02 -3.79439E+02 -5.65606E+02 -7.51772E+02 1.72336E+02 8.91489E+01 5.96188E+00 7.24111E+02 7.43903E+02 7.63696E+02 + 5.40000E+00 -5.53917E+02 -8.48960E+02 -1.14400E+03 2.74151E+02 1.41600E+02 9.04965E+00 1.10222E+03 1.13216E+03 1.16210E+03 -3.81593E+02 -6.67224E+02 -9.52856E+02 2.63901E+02 1.33179E+02 2.45725E+00 9.09396E+02 9.33583E+02 9.57770E+02 -3.81593E+02 -5.69104E+02 -7.56614E+02 1.73593E+02 8.97964E+01 5.99999E+00 7.28779E+02 7.48697E+02 7.68614E+02 + 5.42500E+00 -5.56071E+02 -8.52458E+02 -1.14885E+03 2.75408E+02 1.42248E+02 9.08777E+00 1.10689E+03 1.13695E+03 1.16702E+03 -3.83747E+02 -6.70723E+02 -9.57698E+02 2.65158E+02 1.33827E+02 2.49536E+00 9.14064E+02 9.38376E+02 9.62689E+02 -3.83747E+02 -5.72602E+02 -7.61457E+02 1.74850E+02 9.04440E+01 6.03813E+00 7.33447E+02 7.53490E+02 7.73533E+02 + 5.45000E+00 -5.58225E+02 -8.55956E+02 -1.15369E+03 2.76665E+02 1.42895E+02 9.12591E+00 1.11155E+03 1.14175E+03 1.17194E+03 -3.85901E+02 -6.74221E+02 -9.62540E+02 2.66415E+02 1.34474E+02 2.53350E+00 9.18732E+02 9.43170E+02 9.67607E+02 -3.85901E+02 -5.76100E+02 -7.66299E+02 1.76107E+02 9.10915E+01 6.07623E+00 7.38115E+02 7.58283E+02 7.78452E+02 + 5.47500E+00 -5.60379E+02 -8.59454E+02 -1.15853E+03 2.77922E+02 1.43543E+02 9.16402E+00 1.11622E+03 1.14654E+03 1.17686E+03 -3.88055E+02 -6.77719E+02 -9.67383E+02 2.67672E+02 1.35122E+02 2.57162E+00 9.23400E+02 9.47963E+02 9.72526E+02 -3.88055E+02 -5.79598E+02 -7.71141E+02 1.77364E+02 9.17391E+01 6.11437E+00 7.42783E+02 7.63077E+02 7.83370E+02 + 5.50000E+00 -5.62533E+02 -8.62953E+02 -1.16337E+03 2.79179E+02 1.44190E+02 9.20214E+00 1.12089E+03 1.15133E+03 1.18178E+03 -3.90209E+02 -6.81217E+02 -9.72225E+02 2.68929E+02 1.35769E+02 2.60974E+00 9.28068E+02 9.52756E+02 9.77445E+02 -3.90209E+02 -5.83097E+02 -7.75984E+02 1.78621E+02 9.23866E+01 6.15248E+00 7.47451E+02 7.67870E+02 7.88289E+02 + 5.52500E+00 -5.64687E+02 -8.66451E+02 -1.16821E+03 2.80436E+02 1.44838E+02 9.24025E+00 1.12556E+03 1.15613E+03 1.18670E+03 -3.92363E+02 -6.84715E+02 -9.77068E+02 2.70186E+02 1.36417E+02 2.64785E+00 9.32736E+02 9.57549E+02 9.82363E+02 -3.92363E+02 -5.86595E+02 -7.80826E+02 1.79878E+02 9.30342E+01 6.19060E+00 7.52119E+02 7.72663E+02 7.93207E+02 + 5.55000E+00 -5.66841E+02 -8.69949E+02 -1.17306E+03 2.81693E+02 1.45486E+02 9.27837E+00 1.13023E+03 1.16092E+03 1.19161E+03 -3.94517E+02 -6.88214E+02 -9.81910E+02 2.71443E+02 1.37065E+02 2.68597E+00 9.37404E+02 9.62343E+02 9.87282E+02 -3.94517E+02 -5.90093E+02 -7.85669E+02 1.81135E+02 9.36817E+01 6.22873E+00 7.56787E+02 7.77456E+02 7.98126E+02 + 5.57500E+00 -5.68995E+02 -8.73447E+02 -1.17790E+03 2.82950E+02 1.46133E+02 9.31651E+00 1.13489E+03 1.16571E+03 1.19653E+03 -3.96671E+02 -6.91712E+02 -9.86752E+02 2.72700E+02 1.37712E+02 2.72411E+00 9.42072E+02 9.67136E+02 9.92200E+02 -3.96671E+02 -5.93591E+02 -7.90511E+02 1.82392E+02 9.43293E+01 6.26684E+00 7.61455E+02 7.82250E+02 8.03044E+02 + 5.60000E+00 -5.71149E+02 -8.76945E+02 -1.18274E+03 2.84207E+02 1.46781E+02 9.35463E+00 1.13956E+03 1.17051E+03 1.20145E+03 -3.98826E+02 -6.95210E+02 -9.91595E+02 2.73957E+02 1.38360E+02 2.76222E+00 9.46740E+02 9.71929E+02 9.97119E+02 -3.98826E+02 -5.97089E+02 -7.95353E+02 1.83649E+02 9.49768E+01 6.30497E+00 7.66123E+02 7.87043E+02 8.07963E+02 + 5.62500E+00 -5.73303E+02 -8.80444E+02 -1.18758E+03 2.85464E+02 1.47428E+02 9.39274E+00 1.14423E+03 1.17530E+03 1.20637E+03 -4.00980E+02 -6.98708E+02 -9.96437E+02 2.75214E+02 1.39007E+02 2.80034E+00 9.51408E+02 9.76723E+02 1.00204E+03 -4.00980E+02 -6.00588E+02 -8.00196E+02 1.84906E+02 9.56244E+01 6.34308E+00 7.70791E+02 7.91836E+02 8.12882E+02 + 5.65000E+00 -5.75457E+02 -8.83942E+02 -1.19243E+03 2.86721E+02 1.48076E+02 9.43086E+00 1.14890E+03 1.18009E+03 1.21129E+03 -4.03134E+02 -7.02206E+02 -1.00128E+03 2.76471E+02 1.39655E+02 2.83846E+00 9.56076E+02 9.81516E+02 1.00696E+03 -4.03134E+02 -6.04086E+02 -8.05038E+02 1.86163E+02 9.62719E+01 6.38120E+00 7.75459E+02 7.96630E+02 8.17800E+02 + 5.67500E+00 -5.77612E+02 -8.87440E+02 -1.19727E+03 2.87978E+02 1.48723E+02 9.46897E+00 1.15357E+03 1.18489E+03 1.21621E+03 -4.05288E+02 -7.05705E+02 -1.00612E+03 2.77728E+02 1.40302E+02 2.87657E+00 9.60744E+02 9.86309E+02 1.01187E+03 -4.05288E+02 -6.07584E+02 -8.09880E+02 1.87420E+02 9.69195E+01 6.41933E+00 7.80127E+02 8.01423E+02 8.22719E+02 + 5.70000E+00 -5.79766E+02 -8.90938E+02 -1.20211E+03 2.89235E+02 1.49371E+02 9.50711E+00 1.15823E+03 1.18968E+03 1.22113E+03 -4.07442E+02 -7.09203E+02 -1.01096E+03 2.78985E+02 1.40950E+02 2.91471E+00 9.65412E+02 9.91103E+02 1.01679E+03 -4.07442E+02 -6.11082E+02 -8.14723E+02 1.88677E+02 9.75670E+01 6.45744E+00 7.84795E+02 8.06216E+02 8.27638E+02 + 5.72500E+00 -5.81920E+02 -8.94436E+02 -1.20695E+03 2.90492E+02 1.50018E+02 9.54523E+00 1.16290E+03 1.19447E+03 1.22604E+03 -4.09596E+02 -7.12701E+02 -1.01581E+03 2.80242E+02 1.41597E+02 2.95283E+00 9.70080E+02 9.95896E+02 1.02171E+03 -4.09596E+02 -6.14580E+02 -8.19565E+02 1.89934E+02 9.82146E+01 6.49557E+00 7.89463E+02 8.11010E+02 8.32556E+02 + 5.75000E+00 -5.84074E+02 -8.97935E+02 -1.21180E+03 2.91749E+02 1.50666E+02 9.58334E+00 1.16757E+03 1.19927E+03 1.23096E+03 -4.11750E+02 -7.16199E+02 -1.02065E+03 2.81499E+02 1.42245E+02 2.99094E+00 9.74748E+02 1.00069E+03 1.02663E+03 -4.11750E+02 -6.18079E+02 -8.24407E+02 1.91191E+02 9.88621E+01 6.53369E+00 7.94131E+02 8.15803E+02 8.37475E+02 + 5.77500E+00 -5.86228E+02 -9.01433E+02 -1.21664E+03 2.93006E+02 1.51314E+02 9.62146E+00 1.17224E+03 1.20406E+03 1.23588E+03 -4.13904E+02 -7.19697E+02 -1.02549E+03 2.82756E+02 1.42893E+02 3.02906E+00 9.79416E+02 1.00548E+03 1.03155E+03 -4.13904E+02 -6.21577E+02 -8.29250E+02 1.92448E+02 9.95097E+01 6.57180E+00 7.98799E+02 8.20596E+02 8.42393E+02 + 5.80000E+00 -5.88382E+02 -9.04931E+02 -1.22148E+03 2.94263E+02 1.51961E+02 9.65958E+00 1.17691E+03 1.20885E+03 1.24080E+03 -4.16058E+02 -7.23196E+02 -1.03033E+03 2.84013E+02 1.43540E+02 3.06718E+00 9.84084E+02 1.01028E+03 1.03647E+03 -4.16058E+02 -6.25075E+02 -8.34092E+02 1.93705E+02 1.00157E+02 6.60994E+00 8.03467E+02 8.25389E+02 8.47312E+02 + 5.82500E+00 -5.90536E+02 -9.08429E+02 -1.22632E+03 2.95520E+02 1.52609E+02 9.69772E+00 1.18157E+03 1.21365E+03 1.24572E+03 -4.18212E+02 -7.26694E+02 -1.03518E+03 2.85270E+02 1.44188E+02 3.10531E+00 9.88752E+02 1.01507E+03 1.04139E+03 -4.18212E+02 -6.28573E+02 -8.38934E+02 1.94961E+02 1.00805E+02 6.64804E+00 8.08135E+02 8.30183E+02 8.52230E+02 + 5.85000E+00 -5.92690E+02 -9.11927E+02 -1.23117E+03 2.96776E+02 1.53256E+02 9.73583E+00 1.18624E+03 1.21844E+03 1.25064E+03 -4.20366E+02 -7.30192E+02 -1.04002E+03 2.86527E+02 1.44835E+02 3.14343E+00 9.93420E+02 1.01986E+03 1.04630E+03 -4.20366E+02 -6.32071E+02 -8.43777E+02 1.96218E+02 1.01452E+02 6.68618E+00 8.12803E+02 8.34976E+02 8.57149E+02 + 5.87500E+00 -5.94844E+02 -9.15426E+02 -1.23601E+03 2.98033E+02 1.53904E+02 9.77395E+00 1.19091E+03 1.22323E+03 1.25556E+03 -4.22520E+02 -7.33690E+02 -1.04486E+03 2.87784E+02 1.45483E+02 3.18155E+00 9.98088E+02 1.02466E+03 1.05122E+03 -4.22520E+02 -6.35570E+02 -8.48619E+02 1.97475E+02 1.02100E+02 6.72429E+00 8.17471E+02 8.39769E+02 8.62068E+02 + 5.90000E+00 -5.96998E+02 -9.18924E+02 -1.24085E+03 2.99290E+02 1.54551E+02 9.81206E+00 1.19558E+03 1.22803E+03 1.26047E+03 -4.24674E+02 -7.37188E+02 -1.04970E+03 2.89041E+02 1.46130E+02 3.21966E+00 1.00276E+03 1.02945E+03 1.05614E+03 -4.24674E+02 -6.39068E+02 -8.53461E+02 1.98732E+02 1.02747E+02 6.76241E+00 8.22139E+02 8.44563E+02 8.66986E+02 + 5.92500E+00 -5.99152E+02 -9.22422E+02 -1.24569E+03 3.00547E+02 1.55199E+02 9.85018E+00 1.20025E+03 1.23282E+03 1.26539E+03 -4.26828E+02 -7.40687E+02 -1.05455E+03 2.90298E+02 1.46778E+02 3.25778E+00 1.00742E+03 1.03424E+03 1.06106E+03 -4.26828E+02 -6.42566E+02 -8.58304E+02 1.99989E+02 1.03395E+02 6.80054E+00 8.26807E+02 8.49356E+02 8.71905E+02 + 5.95000E+00 -6.01306E+02 -9.25920E+02 -1.25053E+03 3.01804E+02 1.55846E+02 9.88832E+00 1.20491E+03 1.23761E+03 1.27031E+03 -4.28982E+02 -7.44185E+02 -1.05939E+03 2.91555E+02 1.47425E+02 3.29592E+00 1.01209E+03 1.03904E+03 1.06598E+03 -4.28982E+02 -6.46064E+02 -8.63146E+02 2.01246E+02 1.04042E+02 6.83865E+00 8.31475E+02 8.54149E+02 8.76823E+02 + 5.97500E+00 -6.03460E+02 -9.29419E+02 -1.25538E+03 3.03061E+02 1.56494E+02 9.92644E+00 1.20958E+03 1.24241E+03 1.27523E+03 -4.31136E+02 -7.47683E+02 -1.06423E+03 2.92812E+02 1.48073E+02 3.33403E+00 1.01676E+03 1.04383E+03 1.07090E+03 -4.31136E+02 -6.49562E+02 -8.67989E+02 2.02503E+02 1.04690E+02 6.87678E+00 8.36143E+02 8.58943E+02 8.81742E+02 + 6.00000E+00 -5.19452E+02 -8.91109E+02 -1.26277E+03 3.44348E+02 1.74622E+02 4.89698E+00 1.20815E+03 1.24035E+03 1.27256E+03 -5.19452E+02 -7.92989E+02 -1.06653E+03 2.54039E+02 1.31240E+02 8.43972E+00 1.02753E+03 1.05547E+03 1.08340E+03 -3.47128E+02 -6.11253E+02 -8.75378E+02 2.43790E+02 1.22819E+02 1.84732E+00 8.34708E+02 8.56890E+02 8.79073E+02 + 6.02500E+00 -5.21606E+02 -8.94608E+02 -1.26761E+03 3.45605E+02 1.75270E+02 4.93509E+00 1.21282E+03 1.24515E+03 1.27748E+03 -5.21606E+02 -7.96487E+02 -1.07137E+03 2.55296E+02 1.31887E+02 8.47784E+00 1.03220E+03 1.06026E+03 1.08832E+03 -3.49282E+02 -6.14751E+02 -8.80220E+02 2.45047E+02 1.23466E+02 1.88544E+00 8.39376E+02 8.61684E+02 8.83991E+02 + 6.05000E+00 -5.23760E+02 -8.98106E+02 -1.27245E+03 3.46862E+02 1.75917E+02 4.97321E+00 1.21748E+03 1.24994E+03 1.28240E+03 -5.23760E+02 -7.99985E+02 -1.07621E+03 2.56553E+02 1.32535E+02 8.51596E+00 1.03687E+03 1.06505E+03 1.09324E+03 -3.51436E+02 -6.18250E+02 -8.85063E+02 2.46304E+02 1.24114E+02 1.92357E+00 8.44044E+02 8.66477E+02 8.88910E+02 + 6.07500E+00 -5.25914E+02 -9.01604E+02 -1.27729E+03 3.48119E+02 1.76565E+02 5.01135E+00 1.22215E+03 1.25473E+03 1.28732E+03 -5.25914E+02 -8.03483E+02 -1.08105E+03 2.57810E+02 1.33182E+02 8.55410E+00 1.04153E+03 1.06985E+03 1.09816E+03 -3.53590E+02 -6.21748E+02 -8.89905E+02 2.47561E+02 1.24761E+02 1.96168E+00 8.48712E+02 8.71270E+02 8.93828E+02 + 6.10000E+00 -5.28068E+02 -9.05102E+02 -1.28214E+03 3.49376E+02 1.77213E+02 5.04947E+00 1.22682E+03 1.25953E+03 1.29223E+03 -5.28068E+02 -8.06981E+02 -1.08589E+03 2.59067E+02 1.33830E+02 8.59221E+00 1.04620E+03 1.07464E+03 1.10308E+03 -3.55745E+02 -6.25246E+02 -8.94747E+02 2.48818E+02 1.25409E+02 1.99981E+00 8.53380E+02 8.76063E+02 8.98747E+02 + 6.12500E+00 -5.30222E+02 -9.08600E+02 -1.28698E+03 3.50633E+02 1.77860E+02 5.08758E+00 1.23149E+03 1.26432E+03 1.29715E+03 -5.30222E+02 -8.10480E+02 -1.09074E+03 2.60324E+02 1.34477E+02 8.63033E+00 1.05087E+03 1.07943E+03 1.10800E+03 -3.57899E+02 -6.28744E+02 -8.99590E+02 2.50075E+02 1.26056E+02 2.03793E+00 8.58048E+02 8.80857E+02 9.03666E+02 + 6.15000E+00 -5.32377E+02 -9.12099E+02 -1.29182E+03 3.51890E+02 1.78508E+02 5.12570E+00 1.23616E+03 1.26911E+03 1.30207E+03 -5.32377E+02 -8.13978E+02 -1.09558E+03 2.61581E+02 1.35125E+02 8.66844E+00 1.05554E+03 1.08423E+03 1.11292E+03 -3.60053E+02 -6.32242E+02 -9.04432E+02 2.51332E+02 1.26704E+02 2.07604E+00 8.62716E+02 8.85650E+02 9.08584E+02 + 6.17500E+00 -5.34531E+02 -9.15597E+02 -1.29666E+03 3.53147E+02 1.79155E+02 5.16381E+00 1.24082E+03 1.27391E+03 1.30699E+03 -5.34531E+02 -8.17476E+02 -1.10042E+03 2.62838E+02 1.35772E+02 8.70656E+00 1.06021E+03 1.08902E+03 1.11783E+03 -3.62207E+02 -6.35741E+02 -9.09275E+02 2.52589E+02 1.27351E+02 2.11416E+00 8.67384E+02 8.90443E+02 9.13503E+02 + 6.20000E+00 -5.36685E+02 -9.19095E+02 -1.30151E+03 3.54404E+02 1.79803E+02 5.20195E+00 1.24549E+03 1.27870E+03 1.31191E+03 -5.36685E+02 -8.20974E+02 -1.10526E+03 2.64095E+02 1.36420E+02 8.74470E+00 1.06487E+03 1.09381E+03 1.12275E+03 -3.64361E+02 -6.39239E+02 -9.14117E+02 2.53846E+02 1.27999E+02 2.15230E+00 8.72052E+02 8.95237E+02 9.18421E+02 + 6.22500E+00 -5.38839E+02 -9.22593E+02 -1.30635E+03 3.55661E+02 1.80450E+02 5.24007E+00 1.25016E+03 1.28349E+03 1.31683E+03 -5.38839E+02 -8.24472E+02 -1.11011E+03 2.65352E+02 1.37067E+02 8.78281E+00 1.06954E+03 1.09861E+03 1.12767E+03 -3.66515E+02 -6.42737E+02 -9.18959E+02 2.55102E+02 1.28646E+02 2.19041E+00 8.76720E+02 9.00030E+02 9.23340E+02 + 6.25000E+00 -5.40993E+02 -9.26091E+02 -1.31119E+03 3.56918E+02 1.81098E+02 5.27819E+00 1.25483E+03 1.28829E+03 1.32175E+03 -5.40993E+02 -8.27971E+02 -1.11495E+03 2.66609E+02 1.37715E+02 8.82093E+00 1.07421E+03 1.10340E+03 1.13259E+03 -3.68669E+02 -6.46235E+02 -9.23802E+02 2.56359E+02 1.29294E+02 2.22853E+00 8.81388E+02 9.04823E+02 9.28259E+02 + 6.27500E+00 -5.43147E+02 -9.29590E+02 -1.31603E+03 3.58174E+02 1.81745E+02 5.31630E+00 1.25950E+03 1.29308E+03 1.32667E+03 -5.43147E+02 -8.31469E+02 -1.11979E+03 2.67866E+02 1.38363E+02 8.85905E+00 1.07888E+03 1.10819E+03 1.13751E+03 -3.70823E+02 -6.49733E+02 -9.28644E+02 2.57616E+02 1.29942E+02 2.26664E+00 8.86056E+02 9.09617E+02 9.33177E+02 + 6.30000E+00 -5.45301E+02 -9.33088E+02 -1.32087E+03 3.59431E+02 1.82393E+02 5.35442E+00 1.26416E+03 1.29787E+03 1.33158E+03 -5.45301E+02 -8.34967E+02 -1.12463E+03 2.69123E+02 1.39010E+02 8.89716E+00 1.08355E+03 1.11299E+03 1.14243E+03 -3.72977E+02 -6.53232E+02 -9.33486E+02 2.58873E+02 1.30589E+02 2.30476E+00 8.90724E+02 9.14410E+02 9.38096E+02 + 6.32500E+00 -5.47455E+02 -9.36586E+02 -1.32572E+03 3.60688E+02 1.83040E+02 5.39256E+00 1.26883E+03 1.30267E+03 1.33650E+03 -5.47455E+02 -8.38465E+02 -1.12948E+03 2.70380E+02 1.39658E+02 8.93530E+00 1.08821E+03 1.11778E+03 1.14735E+03 -3.75131E+02 -6.56730E+02 -9.38329E+02 2.60130E+02 1.31237E+02 2.34290E+00 8.95392E+02 9.19203E+02 9.43014E+02 + 6.35000E+00 -5.49609E+02 -9.40084E+02 -1.33056E+03 3.61945E+02 1.83688E+02 5.43067E+00 1.27350E+03 1.30746E+03 1.34142E+03 -5.49609E+02 -8.41963E+02 -1.13432E+03 2.71637E+02 1.40305E+02 8.97342E+00 1.09288E+03 1.12257E+03 1.15226E+03 -3.77285E+02 -6.60228E+02 -9.43171E+02 2.61387E+02 1.31884E+02 2.38102E+00 9.00060E+02 9.23996E+02 9.47933E+02 + 6.37500E+00 -5.51763E+02 -9.43582E+02 -1.33540E+03 3.63202E+02 1.84336E+02 5.46879E+00 1.27817E+03 1.31225E+03 1.34634E+03 -5.51763E+02 -8.45462E+02 -1.13916E+03 2.72894E+02 1.40953E+02 9.01153E+00 1.09755E+03 1.12737E+03 1.15718E+03 -3.79439E+02 -6.63726E+02 -9.48013E+02 2.62644E+02 1.32532E+02 2.41913E+00 9.04728E+02 9.28790E+02 9.52852E+02 + 6.40000E+00 -5.53917E+02 -9.47081E+02 -1.34024E+03 3.64459E+02 1.84983E+02 5.50691E+00 1.28284E+03 1.31705E+03 1.35126E+03 -5.53917E+02 -8.48960E+02 -1.14400E+03 2.74151E+02 1.41600E+02 9.04965E+00 1.10222E+03 1.13216E+03 1.16210E+03 -3.81593E+02 -6.67224E+02 -9.52856E+02 2.63901E+02 1.33179E+02 2.45725E+00 9.09396E+02 9.33583E+02 9.57770E+02 + 6.42500E+00 -5.56071E+02 -9.50579E+02 -1.34509E+03 3.65716E+02 1.85631E+02 5.54502E+00 1.28750E+03 1.32184E+03 1.35618E+03 -5.56071E+02 -8.52458E+02 -1.14885E+03 2.75408E+02 1.42248E+02 9.08777E+00 1.10689E+03 1.13695E+03 1.16702E+03 -3.83747E+02 -6.70723E+02 -9.57698E+02 2.65158E+02 1.33827E+02 2.49536E+00 9.14064E+02 9.38376E+02 9.62689E+02 + 6.45000E+00 -5.58225E+02 -9.54077E+02 -1.34993E+03 3.66973E+02 1.86278E+02 5.58316E+00 1.29217E+03 1.32663E+03 1.36110E+03 -5.58225E+02 -8.55956E+02 -1.15369E+03 2.76665E+02 1.42895E+02 9.12591E+00 1.11155E+03 1.14175E+03 1.17194E+03 -3.85901E+02 -6.74221E+02 -9.62540E+02 2.66415E+02 1.34474E+02 2.53350E+00 9.18732E+02 9.43170E+02 9.67607E+02 + 6.47500E+00 -5.60379E+02 -9.57575E+02 -1.35477E+03 3.68230E+02 1.86926E+02 5.62128E+00 1.29684E+03 1.33143E+03 1.36601E+03 -5.60379E+02 -8.59454E+02 -1.15853E+03 2.77922E+02 1.43543E+02 9.16402E+00 1.11622E+03 1.14654E+03 1.17686E+03 -3.88055E+02 -6.77719E+02 -9.67383E+02 2.67672E+02 1.35122E+02 2.57162E+00 9.23400E+02 9.47963E+02 9.72526E+02 + 6.50000E+00 -5.62533E+02 -9.61073E+02 -1.35961E+03 3.69487E+02 1.87573E+02 5.65939E+00 1.30151E+03 1.33622E+03 1.37093E+03 -5.62533E+02 -8.62953E+02 -1.16337E+03 2.79179E+02 1.44190E+02 9.20214E+00 1.12089E+03 1.15133E+03 1.18178E+03 -3.90209E+02 -6.81217E+02 -9.72225E+02 2.68929E+02 1.35769E+02 2.60974E+00 9.28068E+02 9.52756E+02 9.77445E+02 + 6.52500E+00 -5.64687E+02 -9.64572E+02 -1.36446E+03 3.70744E+02 1.88221E+02 5.69751E+00 1.30618E+03 1.34101E+03 1.37585E+03 -5.64687E+02 -8.66451E+02 -1.16821E+03 2.80436E+02 1.44838E+02 9.24025E+00 1.12556E+03 1.15613E+03 1.18670E+03 -3.92363E+02 -6.84715E+02 -9.77068E+02 2.70186E+02 1.36417E+02 2.64785E+00 9.32736E+02 9.57549E+02 9.82363E+02 + 6.55000E+00 -5.66841E+02 -9.68070E+02 -1.36930E+03 3.72001E+02 1.88868E+02 5.73563E+00 1.31084E+03 1.34581E+03 1.38077E+03 -5.66841E+02 -8.69949E+02 -1.17306E+03 2.81693E+02 1.45486E+02 9.27837E+00 1.13023E+03 1.16092E+03 1.19161E+03 -3.94517E+02 -6.88214E+02 -9.81910E+02 2.71443E+02 1.37065E+02 2.68597E+00 9.37404E+02 9.62343E+02 9.87282E+02 + 6.57500E+00 -5.68995E+02 -9.71568E+02 -1.37414E+03 3.73258E+02 1.89516E+02 5.77376E+00 1.31551E+03 1.35060E+03 1.38569E+03 -5.68995E+02 -8.73447E+02 -1.17790E+03 2.82950E+02 1.46133E+02 9.31651E+00 1.13489E+03 1.16571E+03 1.19653E+03 -3.96671E+02 -6.91712E+02 -9.86752E+02 2.72700E+02 1.37712E+02 2.72411E+00 9.42072E+02 9.67136E+02 9.92200E+02 + 6.60000E+00 -5.71149E+02 -9.75066E+02 -1.37898E+03 3.74515E+02 1.90164E+02 5.81188E+00 1.32018E+03 1.35539E+03 1.39061E+03 -5.71149E+02 -8.76945E+02 -1.18274E+03 2.84207E+02 1.46781E+02 9.35463E+00 1.13956E+03 1.17051E+03 1.20145E+03 -3.98826E+02 -6.95210E+02 -9.91595E+02 2.73957E+02 1.38360E+02 2.76222E+00 9.46740E+02 9.71929E+02 9.97119E+02 + 6.62500E+00 -5.73303E+02 -9.78564E+02 -1.38383E+03 3.75772E+02 1.90811E+02 5.85000E+00 1.32485E+03 1.36019E+03 1.39553E+03 -5.73303E+02 -8.80444E+02 -1.18758E+03 2.85464E+02 1.47428E+02 9.39274E+00 1.14423E+03 1.17530E+03 1.20637E+03 -4.00980E+02 -6.98708E+02 -9.96437E+02 2.75214E+02 1.39007E+02 2.80034E+00 9.51408E+02 9.76723E+02 1.00204E+03 + 6.65000E+00 -5.75457E+02 -9.82063E+02 -1.38867E+03 3.77029E+02 1.91459E+02 5.88811E+00 1.32952E+03 1.36498E+03 1.40044E+03 -5.75457E+02 -8.83942E+02 -1.19243E+03 2.86721E+02 1.48076E+02 9.43086E+00 1.14890E+03 1.18009E+03 1.21129E+03 -4.03134E+02 -7.02206E+02 -1.00128E+03 2.76471E+02 1.39655E+02 2.83846E+00 9.56076E+02 9.81516E+02 1.00696E+03 + 6.67500E+00 -5.77612E+02 -9.85561E+02 -1.39351E+03 3.78286E+02 1.92106E+02 5.92623E+00 1.33418E+03 1.36977E+03 1.40536E+03 -5.77612E+02 -8.87440E+02 -1.19727E+03 2.87978E+02 1.48723E+02 9.46897E+00 1.15357E+03 1.18489E+03 1.21621E+03 -4.05288E+02 -7.05705E+02 -1.00612E+03 2.77728E+02 1.40302E+02 2.87657E+00 9.60744E+02 9.86309E+02 1.01187E+03 + 6.70000E+00 -5.79766E+02 -9.89059E+02 -1.39835E+03 3.79543E+02 1.92754E+02 5.96437E+00 1.33885E+03 1.37457E+03 1.41028E+03 -5.79766E+02 -8.90938E+02 -1.20211E+03 2.89235E+02 1.49371E+02 9.50711E+00 1.15823E+03 1.18968E+03 1.22113E+03 -4.07442E+02 -7.09203E+02 -1.01096E+03 2.78985E+02 1.40950E+02 2.91471E+00 9.65412E+02 9.91103E+02 1.01679E+03 + 6.72500E+00 -5.81920E+02 -9.92557E+02 -1.40319E+03 3.80800E+02 1.93401E+02 6.00248E+00 1.34352E+03 1.37936E+03 1.41520E+03 -5.81920E+02 -8.94436E+02 -1.20695E+03 2.90492E+02 1.50018E+02 9.54523E+00 1.16290E+03 1.19447E+03 1.22604E+03 -4.09596E+02 -7.12701E+02 -1.01581E+03 2.80242E+02 1.41597E+02 2.95283E+00 9.70080E+02 9.95896E+02 1.02171E+03 + 6.75000E+00 -5.84074E+02 -9.96055E+02 -1.40804E+03 3.82057E+02 1.94049E+02 6.04060E+00 1.34819E+03 1.38415E+03 1.42012E+03 -5.84074E+02 -8.97935E+02 -1.21180E+03 2.91749E+02 1.50666E+02 9.58334E+00 1.16757E+03 1.19927E+03 1.23096E+03 -4.11750E+02 -7.16199E+02 -1.02065E+03 2.81499E+02 1.42245E+02 2.99094E+00 9.74748E+02 1.00069E+03 1.02663E+03 + 6.77500E+00 -5.86228E+02 -9.99554E+02 -1.41288E+03 3.83314E+02 1.94696E+02 6.07872E+00 1.35286E+03 1.38895E+03 1.42504E+03 -5.86228E+02 -9.01433E+02 -1.21664E+03 2.93006E+02 1.51314E+02 9.62146E+00 1.17224E+03 1.20406E+03 1.23588E+03 -4.13904E+02 -7.19697E+02 -1.02549E+03 2.82756E+02 1.42893E+02 3.02906E+00 9.79416E+02 1.00548E+03 1.03155E+03 + 6.80000E+00 -5.88382E+02 -1.00305E+03 -1.41772E+03 3.84571E+02 1.95344E+02 6.11683E+00 1.35752E+03 1.39374E+03 1.42996E+03 -5.88382E+02 -9.04931E+02 -1.22148E+03 2.94263E+02 1.51961E+02 9.65958E+00 1.17691E+03 1.20885E+03 1.24080E+03 -4.16058E+02 -7.23196E+02 -1.03033E+03 2.84013E+02 1.43540E+02 3.06718E+00 9.84084E+02 1.01028E+03 1.03647E+03 + 6.82500E+00 -5.90536E+02 -1.00655E+03 -1.42256E+03 3.85828E+02 1.95991E+02 6.15497E+00 1.36219E+03 1.39853E+03 1.43487E+03 -5.90536E+02 -9.08429E+02 -1.22632E+03 2.95520E+02 1.52609E+02 9.69772E+00 1.18157E+03 1.21365E+03 1.24572E+03 -4.18212E+02 -7.26694E+02 -1.03518E+03 2.85270E+02 1.44188E+02 3.10531E+00 9.88752E+02 1.01507E+03 1.04139E+03 + 6.85000E+00 -5.92690E+02 -1.01005E+03 -1.42741E+03 3.87085E+02 1.96639E+02 6.19309E+00 1.36686E+03 1.40333E+03 1.43979E+03 -5.92690E+02 -9.11927E+02 -1.23117E+03 2.96776E+02 1.53256E+02 9.73583E+00 1.18624E+03 1.21844E+03 1.25064E+03 -4.20366E+02 -7.30192E+02 -1.04002E+03 2.86527E+02 1.44835E+02 3.14343E+00 9.93420E+02 1.01986E+03 1.04630E+03 + 6.87500E+00 -5.94844E+02 -1.01355E+03 -1.43225E+03 3.88342E+02 1.97287E+02 6.23120E+00 1.37153E+03 1.40812E+03 1.44471E+03 -5.94844E+02 -9.15426E+02 -1.23601E+03 2.98033E+02 1.53904E+02 9.77395E+00 1.19091E+03 1.22323E+03 1.25556E+03 -4.22520E+02 -7.33690E+02 -1.04486E+03 2.87784E+02 1.45483E+02 3.18155E+00 9.98088E+02 1.02466E+03 1.05122E+03 + 6.90000E+00 -5.96998E+02 -1.01704E+03 -1.43709E+03 3.89599E+02 1.97934E+02 6.26932E+00 1.37620E+03 1.41291E+03 1.44963E+03 -5.96998E+02 -9.18924E+02 -1.24085E+03 2.99290E+02 1.54551E+02 9.81206E+00 1.19558E+03 1.22803E+03 1.26047E+03 -4.24674E+02 -7.37188E+02 -1.04970E+03 2.89041E+02 1.46130E+02 3.21966E+00 1.00276E+03 1.02945E+03 1.05614E+03 + 6.92500E+00 -5.99152E+02 -1.02054E+03 -1.44193E+03 3.90856E+02 1.98582E+02 6.30744E+00 1.38086E+03 1.41771E+03 1.45455E+03 -5.99152E+02 -9.22422E+02 -1.24569E+03 3.00547E+02 1.55199E+02 9.85018E+00 1.20025E+03 1.23282E+03 1.26539E+03 -4.26828E+02 -7.40687E+02 -1.05455E+03 2.90298E+02 1.46778E+02 3.25778E+00 1.00742E+03 1.03424E+03 1.06106E+03 + 6.95000E+00 -6.01306E+02 -1.02404E+03 -1.44678E+03 3.92113E+02 1.99229E+02 6.34557E+00 1.38553E+03 1.42250E+03 1.45947E+03 -6.01306E+02 -9.25920E+02 -1.25053E+03 3.01804E+02 1.55846E+02 9.88832E+00 1.20491E+03 1.23761E+03 1.27031E+03 -4.28982E+02 -7.44185E+02 -1.05939E+03 2.91555E+02 1.47425E+02 3.29592E+00 1.01209E+03 1.03904E+03 1.06598E+03 + 6.97500E+00 -6.03460E+02 -1.02754E+03 -1.45162E+03 3.93370E+02 1.99877E+02 6.38369E+00 1.39020E+03 1.42729E+03 1.46439E+03 -6.03460E+02 -9.29419E+02 -1.25538E+03 3.03061E+02 1.56494E+02 9.92644E+00 1.20958E+03 1.24241E+03 1.27523E+03 -4.31136E+02 -7.47683E+02 -1.06423E+03 2.92812E+02 1.48073E+02 3.33403E+00 1.01676E+03 1.04383E+03 1.07090E+03 + 7.00000E+00 -6.91776E+02 -1.07284E+03 -1.45391E+03 3.54597E+02 1.83043E+02 1.14894E+01 1.40097E+03 1.43893E+03 1.47689E+03 -5.19452E+02 -8.91109E+02 -1.26277E+03 3.44348E+02 1.74622E+02 4.89698E+00 1.20815E+03 1.24035E+03 1.27256E+03 -5.19452E+02 -7.92989E+02 -1.06653E+03 2.54039E+02 1.31240E+02 8.43972E+00 1.02753E+03 1.05547E+03 1.08340E+03 + 7.02500E+00 -6.93930E+02 -1.07634E+03 -1.45876E+03 3.55854E+02 1.83691E+02 1.15275E+01 1.40564E+03 1.44372E+03 1.48181E+03 -5.21606E+02 -8.94608E+02 -1.26761E+03 3.45605E+02 1.75270E+02 4.93509E+00 1.21282E+03 1.24515E+03 1.27748E+03 -5.21606E+02 -7.96487E+02 -1.07137E+03 2.55296E+02 1.31887E+02 8.47784E+00 1.03220E+03 1.06026E+03 1.08832E+03 + 7.05000E+00 -6.96084E+02 -1.07984E+03 -1.46360E+03 3.57111E+02 1.84338E+02 1.15656E+01 1.41031E+03 1.44852E+03 1.48673E+03 -5.23760E+02 -8.98106E+02 -1.27245E+03 3.46862E+02 1.75917E+02 4.97321E+00 1.21748E+03 1.24994E+03 1.28240E+03 -5.23760E+02 -7.99985E+02 -1.07621E+03 2.56553E+02 1.32535E+02 8.51596E+00 1.03687E+03 1.06505E+03 1.09324E+03 + 7.07500E+00 -6.98238E+02 -1.08334E+03 -1.46844E+03 3.58368E+02 1.84986E+02 1.16038E+01 1.41497E+03 1.45331E+03 1.49165E+03 -5.25914E+02 -9.01604E+02 -1.27729E+03 3.48119E+02 1.76565E+02 5.01135E+00 1.22215E+03 1.25473E+03 1.28732E+03 -5.25914E+02 -8.03483E+02 -1.08105E+03 2.57810E+02 1.33182E+02 8.55410E+00 1.04153E+03 1.06985E+03 1.09816E+03 + 7.10000E+00 -7.00392E+02 -1.08684E+03 -1.47328E+03 3.59625E+02 1.85634E+02 1.16419E+01 1.41964E+03 1.45810E+03 1.49657E+03 -5.28068E+02 -9.05102E+02 -1.28214E+03 3.49376E+02 1.77213E+02 5.04947E+00 1.22682E+03 1.25953E+03 1.29223E+03 -5.28068E+02 -8.06981E+02 -1.08589E+03 2.59067E+02 1.33830E+02 8.59221E+00 1.04620E+03 1.07464E+03 1.10308E+03 + 7.12500E+00 -7.02546E+02 -1.09034E+03 -1.47813E+03 3.60882E+02 1.86281E+02 1.16800E+01 1.42431E+03 1.46290E+03 1.50149E+03 -5.30222E+02 -9.08600E+02 -1.28698E+03 3.50633E+02 1.77860E+02 5.08758E+00 1.23149E+03 1.26432E+03 1.29715E+03 -5.30222E+02 -8.10480E+02 -1.09074E+03 2.60324E+02 1.34477E+02 8.63033E+00 1.05087E+03 1.07943E+03 1.10800E+03 + 7.15000E+00 -7.04700E+02 -1.09383E+03 -1.48297E+03 3.62139E+02 1.86929E+02 1.17181E+01 1.42898E+03 1.46769E+03 1.50640E+03 -5.32377E+02 -9.12099E+02 -1.29182E+03 3.51890E+02 1.78508E+02 5.12570E+00 1.23616E+03 1.26911E+03 1.30207E+03 -5.32377E+02 -8.13978E+02 -1.09558E+03 2.61581E+02 1.35125E+02 8.66844E+00 1.05554E+03 1.08423E+03 1.11292E+03 + 7.17500E+00 -7.06854E+02 -1.09733E+03 -1.48781E+03 3.63396E+02 1.87576E+02 1.17562E+01 1.43365E+03 1.47248E+03 1.51132E+03 -5.34531E+02 -9.15597E+02 -1.29666E+03 3.53147E+02 1.79155E+02 5.16381E+00 1.24082E+03 1.27391E+03 1.30699E+03 -5.34531E+02 -8.17476E+02 -1.10042E+03 2.62838E+02 1.35772E+02 8.70656E+00 1.06021E+03 1.08902E+03 1.11783E+03 + 7.20000E+00 -7.09008E+02 -1.10083E+03 -1.49265E+03 3.64653E+02 1.88224E+02 1.17944E+01 1.43831E+03 1.47728E+03 1.51624E+03 -5.36685E+02 -9.19095E+02 -1.30151E+03 3.54404E+02 1.79803E+02 5.20195E+00 1.24549E+03 1.27870E+03 1.31191E+03 -5.36685E+02 -8.20974E+02 -1.10526E+03 2.64095E+02 1.36420E+02 8.74470E+00 1.06487E+03 1.09381E+03 1.12275E+03 + 7.22500E+00 -7.11163E+02 -1.10433E+03 -1.49749E+03 3.65910E+02 1.88871E+02 1.18325E+01 1.44298E+03 1.48207E+03 1.52116E+03 -5.38839E+02 -9.22593E+02 -1.30635E+03 3.55661E+02 1.80450E+02 5.24007E+00 1.25016E+03 1.28349E+03 1.31683E+03 -5.38839E+02 -8.24472E+02 -1.11011E+03 2.65352E+02 1.37067E+02 8.78281E+00 1.06954E+03 1.09861E+03 1.12767E+03 + 7.25000E+00 -7.13317E+02 -1.10783E+03 -1.50234E+03 3.67167E+02 1.89519E+02 1.18706E+01 1.44765E+03 1.48686E+03 1.52608E+03 -5.40993E+02 -9.26091E+02 -1.31119E+03 3.56918E+02 1.81098E+02 5.27819E+00 1.25483E+03 1.28829E+03 1.32175E+03 -5.40993E+02 -8.27971E+02 -1.11495E+03 2.66609E+02 1.37715E+02 8.82093E+00 1.07421E+03 1.10340E+03 1.13259E+03 + 7.27500E+00 -7.15471E+02 -1.11132E+03 -1.50718E+03 3.68424E+02 1.90166E+02 1.19087E+01 1.45232E+03 1.49166E+03 1.53100E+03 -5.43147E+02 -9.29590E+02 -1.31603E+03 3.58174E+02 1.81745E+02 5.31630E+00 1.25950E+03 1.29308E+03 1.32667E+03 -5.43147E+02 -8.31469E+02 -1.11979E+03 2.67866E+02 1.38363E+02 8.85905E+00 1.07888E+03 1.10819E+03 1.13751E+03 + 7.30000E+00 -7.17625E+02 -1.11482E+03 -1.51202E+03 3.69681E+02 1.90814E+02 1.19468E+01 1.45699E+03 1.49645E+03 1.53592E+03 -5.45301E+02 -9.33088E+02 -1.32087E+03 3.59431E+02 1.82393E+02 5.35442E+00 1.26416E+03 1.29787E+03 1.33158E+03 -5.45301E+02 -8.34967E+02 -1.12463E+03 2.69123E+02 1.39010E+02 8.89716E+00 1.08355E+03 1.11299E+03 1.14243E+03 + 7.32500E+00 -7.19779E+02 -1.11832E+03 -1.51686E+03 3.70938E+02 1.91462E+02 1.19850E+01 1.46165E+03 1.50124E+03 1.54083E+03 -5.47455E+02 -9.36586E+02 -1.32572E+03 3.60688E+02 1.83040E+02 5.39256E+00 1.26883E+03 1.30267E+03 1.33650E+03 -5.47455E+02 -8.38465E+02 -1.12948E+03 2.70380E+02 1.39658E+02 8.93530E+00 1.08821E+03 1.11778E+03 1.14735E+03 + 7.35000E+00 -7.21933E+02 -1.12182E+03 -1.52171E+03 3.72195E+02 1.92109E+02 1.20231E+01 1.46632E+03 1.50604E+03 1.54575E+03 -5.49609E+02 -9.40084E+02 -1.33056E+03 3.61945E+02 1.83688E+02 5.43067E+00 1.27350E+03 1.30746E+03 1.34142E+03 -5.49609E+02 -8.41963E+02 -1.13432E+03 2.71637E+02 1.40305E+02 8.97342E+00 1.09288E+03 1.12257E+03 1.15226E+03 + 7.37500E+00 -7.24087E+02 -1.12532E+03 -1.52655E+03 3.73452E+02 1.92757E+02 1.20612E+01 1.47099E+03 1.51083E+03 1.55067E+03 -5.51763E+02 -9.43582E+02 -1.33540E+03 3.63202E+02 1.84336E+02 5.46879E+00 1.27817E+03 1.31225E+03 1.34634E+03 -5.51763E+02 -8.45462E+02 -1.13916E+03 2.72894E+02 1.40953E+02 9.01153E+00 1.09755E+03 1.12737E+03 1.15718E+03 + 7.40000E+00 -7.26241E+02 -1.12882E+03 -1.53139E+03 3.74709E+02 1.93404E+02 1.20993E+01 1.47566E+03 1.51562E+03 1.55559E+03 -5.53917E+02 -9.47081E+02 -1.34024E+03 3.64459E+02 1.84983E+02 5.50691E+00 1.28284E+03 1.31705E+03 1.35126E+03 -5.53917E+02 -8.48960E+02 -1.14400E+03 2.74151E+02 1.41600E+02 9.04965E+00 1.10222E+03 1.13216E+03 1.16210E+03 + 7.42500E+00 -7.28395E+02 -1.13231E+03 -1.53623E+03 3.75966E+02 1.94052E+02 1.21374E+01 1.48033E+03 1.52042E+03 1.56051E+03 -5.56071E+02 -9.50579E+02 -1.34509E+03 3.65716E+02 1.85631E+02 5.54502E+00 1.28750E+03 1.32184E+03 1.35618E+03 -5.56071E+02 -8.52458E+02 -1.14885E+03 2.75408E+02 1.42248E+02 9.08777E+00 1.10689E+03 1.13695E+03 1.16702E+03 + 7.45000E+00 -7.30549E+02 -1.13581E+03 -1.54108E+03 3.77223E+02 1.94699E+02 1.21756E+01 1.48499E+03 1.52521E+03 1.56543E+03 -5.58225E+02 -9.54077E+02 -1.34993E+03 3.66973E+02 1.86278E+02 5.58316E+00 1.29217E+03 1.32663E+03 1.36110E+03 -5.58225E+02 -8.55956E+02 -1.15369E+03 2.76665E+02 1.42895E+02 9.12591E+00 1.11155E+03 1.14175E+03 1.17194E+03 + 7.47500E+00 -7.32703E+02 -1.13931E+03 -1.54592E+03 3.78480E+02 1.95347E+02 1.22137E+01 1.48966E+03 1.53000E+03 1.57035E+03 -5.60379E+02 -9.57575E+02 -1.35477E+03 3.68230E+02 1.86926E+02 5.62128E+00 1.29684E+03 1.33143E+03 1.36601E+03 -5.60379E+02 -8.59454E+02 -1.15853E+03 2.77922E+02 1.43543E+02 9.16402E+00 1.11622E+03 1.14654E+03 1.17686E+03 + 7.50000E+00 -7.34857E+02 -1.14281E+03 -1.55076E+03 3.79737E+02 1.95994E+02 1.22518E+01 1.49433E+03 1.53480E+03 1.57526E+03 -5.62533E+02 -9.61073E+02 -1.35961E+03 3.69487E+02 1.87573E+02 5.65939E+00 1.30151E+03 1.33622E+03 1.37093E+03 -5.62533E+02 -8.62953E+02 -1.16337E+03 2.79179E+02 1.44190E+02 9.20214E+00 1.12089E+03 1.15133E+03 1.18178E+03 + 7.52500E+00 -7.37011E+02 -1.14631E+03 -1.55560E+03 3.80994E+02 1.96642E+02 1.22899E+01 1.49900E+03 1.53959E+03 1.58018E+03 -5.64687E+02 -9.64572E+02 -1.36446E+03 3.70744E+02 1.88221E+02 5.69751E+00 1.30618E+03 1.34101E+03 1.37585E+03 -5.64687E+02 -8.66451E+02 -1.16821E+03 2.80436E+02 1.44838E+02 9.24025E+00 1.12556E+03 1.15613E+03 1.18670E+03 + 7.55000E+00 -7.39165E+02 -1.14981E+03 -1.56045E+03 3.82251E+02 1.97289E+02 1.23280E+01 1.50367E+03 1.54438E+03 1.58510E+03 -5.66841E+02 -9.68070E+02 -1.36930E+03 3.72001E+02 1.88868E+02 5.73563E+00 1.31084E+03 1.34581E+03 1.38077E+03 -5.66841E+02 -8.69949E+02 -1.17306E+03 2.81693E+02 1.45486E+02 9.27837E+00 1.13023E+03 1.16092E+03 1.19161E+03 + 7.57500E+00 -7.41319E+02 -1.15330E+03 -1.56529E+03 3.83508E+02 1.97937E+02 1.23662E+01 1.50833E+03 1.54918E+03 1.59002E+03 -5.68995E+02 -9.71568E+02 -1.37414E+03 3.73258E+02 1.89516E+02 5.77376E+00 1.31551E+03 1.35060E+03 1.38569E+03 -5.68995E+02 -8.73447E+02 -1.17790E+03 2.82950E+02 1.46133E+02 9.31651E+00 1.13489E+03 1.16571E+03 1.19653E+03 + 7.60000E+00 -7.43473E+02 -1.15680E+03 -1.57013E+03 3.84765E+02 1.98585E+02 1.24043E+01 1.51300E+03 1.55397E+03 1.59494E+03 -5.71149E+02 -9.75066E+02 -1.37898E+03 3.74515E+02 1.90164E+02 5.81188E+00 1.32018E+03 1.35539E+03 1.39061E+03 -5.71149E+02 -8.76945E+02 -1.18274E+03 2.84207E+02 1.46781E+02 9.35463E+00 1.13956E+03 1.17051E+03 1.20145E+03 + 7.62500E+00 -7.45627E+02 -1.16030E+03 -1.57497E+03 3.86022E+02 1.99232E+02 1.24424E+01 1.51767E+03 1.55876E+03 1.59986E+03 -5.73303E+02 -9.78564E+02 -1.38383E+03 3.75772E+02 1.90811E+02 5.85000E+00 1.32485E+03 1.36019E+03 1.39553E+03 -5.73303E+02 -8.80444E+02 -1.18758E+03 2.85464E+02 1.47428E+02 9.39274E+00 1.14423E+03 1.17530E+03 1.20637E+03 + 7.65000E+00 -7.47781E+02 -1.16380E+03 -1.57981E+03 3.87279E+02 1.99880E+02 1.24805E+01 1.52234E+03 1.56356E+03 1.60478E+03 -5.75457E+02 -9.82063E+02 -1.38867E+03 3.77029E+02 1.91459E+02 5.88811E+00 1.32952E+03 1.36498E+03 1.40044E+03 -5.75457E+02 -8.83942E+02 -1.19243E+03 2.86721E+02 1.48076E+02 9.43086E+00 1.14890E+03 1.18009E+03 1.21129E+03 + 7.67500E+00 -7.49935E+02 -1.16730E+03 -1.58466E+03 3.88536E+02 2.00527E+02 1.25186E+01 1.52701E+03 1.56835E+03 1.60969E+03 -5.77612E+02 -9.85561E+02 -1.39351E+03 3.78286E+02 1.92106E+02 5.92623E+00 1.33418E+03 1.36977E+03 1.40536E+03 -5.77612E+02 -8.87440E+02 -1.19727E+03 2.87978E+02 1.48723E+02 9.46897E+00 1.15357E+03 1.18489E+03 1.21621E+03 + 7.70000E+00 -7.52089E+02 -1.17079E+03 -1.58950E+03 3.89793E+02 2.01175E+02 1.25568E+01 1.53167E+03 1.57314E+03 1.61461E+03 -5.79766E+02 -9.89059E+02 -1.39835E+03 3.79543E+02 1.92754E+02 5.96437E+00 1.33885E+03 1.37457E+03 1.41028E+03 -5.79766E+02 -8.90938E+02 -1.20211E+03 2.89235E+02 1.49371E+02 9.50711E+00 1.15823E+03 1.18968E+03 1.22113E+03 + 7.72500E+00 -7.54244E+02 -1.17429E+03 -1.59434E+03 3.91050E+02 2.01822E+02 1.25949E+01 1.53634E+03 1.57794E+03 1.61953E+03 -5.81920E+02 -9.92557E+02 -1.40319E+03 3.80800E+02 1.93401E+02 6.00248E+00 1.34352E+03 1.37936E+03 1.41520E+03 -5.81920E+02 -8.94436E+02 -1.20695E+03 2.90492E+02 1.50018E+02 9.54523E+00 1.16290E+03 1.19447E+03 1.22604E+03 + 7.75000E+00 -7.56398E+02 -1.17779E+03 -1.59918E+03 3.92307E+02 2.02470E+02 1.26330E+01 1.54101E+03 1.58273E+03 1.62445E+03 -5.84074E+02 -9.96055E+02 -1.40804E+03 3.82057E+02 1.94049E+02 6.04060E+00 1.34819E+03 1.38415E+03 1.42012E+03 -5.84074E+02 -8.97935E+02 -1.21180E+03 2.91749E+02 1.50666E+02 9.58334E+00 1.16757E+03 1.19927E+03 1.23096E+03 + 7.77500E+00 -7.58552E+02 -1.18129E+03 -1.60403E+03 3.93564E+02 2.03117E+02 1.26711E+01 1.54568E+03 1.58752E+03 1.62937E+03 -5.86228E+02 -9.99554E+02 -1.41288E+03 3.83314E+02 1.94696E+02 6.07872E+00 1.35286E+03 1.38895E+03 1.42504E+03 -5.86228E+02 -9.01433E+02 -1.21664E+03 2.93006E+02 1.51314E+02 9.62146E+00 1.17224E+03 1.20406E+03 1.23588E+03 + 7.80000E+00 -7.60706E+02 -1.18479E+03 -1.60887E+03 3.94821E+02 2.03765E+02 1.27092E+01 1.55035E+03 1.59232E+03 1.63429E+03 -5.88382E+02 -1.00305E+03 -1.41772E+03 3.84571E+02 1.95344E+02 6.11683E+00 1.35752E+03 1.39374E+03 1.42996E+03 -5.88382E+02 -9.04931E+02 -1.22148E+03 2.94263E+02 1.51961E+02 9.65958E+00 1.17691E+03 1.20885E+03 1.24080E+03 + 7.82500E+00 -7.62860E+02 -1.18829E+03 -1.61371E+03 3.96078E+02 2.04412E+02 1.27474E+01 1.55501E+03 1.59711E+03 1.63921E+03 -5.90536E+02 -1.00655E+03 -1.42256E+03 3.85828E+02 1.95991E+02 6.15497E+00 1.36219E+03 1.39853E+03 1.43487E+03 -5.90536E+02 -9.08429E+02 -1.22632E+03 2.95520E+02 1.52609E+02 9.69772E+00 1.18157E+03 1.21365E+03 1.24572E+03 + 7.85000E+00 -7.65014E+02 -1.19178E+03 -1.61855E+03 3.97335E+02 2.05060E+02 1.27855E+01 1.55968E+03 1.60190E+03 1.64412E+03 -5.92690E+02 -1.01005E+03 -1.42741E+03 3.87085E+02 1.96639E+02 6.19309E+00 1.36686E+03 1.40333E+03 1.43979E+03 -5.92690E+02 -9.11927E+02 -1.23117E+03 2.96776E+02 1.53256E+02 9.73583E+00 1.18624E+03 1.21844E+03 1.25064E+03 + 7.87500E+00 -7.67168E+02 -1.19528E+03 -1.62340E+03 3.98592E+02 2.05708E+02 1.28236E+01 1.56435E+03 1.60670E+03 1.64904E+03 -5.94844E+02 -1.01355E+03 -1.43225E+03 3.88342E+02 1.97287E+02 6.23120E+00 1.37153E+03 1.40812E+03 1.44471E+03 -5.94844E+02 -9.15426E+02 -1.23601E+03 2.98033E+02 1.53904E+02 9.77395E+00 1.19091E+03 1.22323E+03 1.25556E+03 + 7.90000E+00 -7.69322E+02 -1.19878E+03 -1.62824E+03 3.99848E+02 2.06355E+02 1.28617E+01 1.56902E+03 1.61149E+03 1.65396E+03 -5.96998E+02 -1.01704E+03 -1.43709E+03 3.89599E+02 1.97934E+02 6.26932E+00 1.37620E+03 1.41291E+03 1.44963E+03 -5.96998E+02 -9.18924E+02 -1.24085E+03 2.99290E+02 1.54551E+02 9.81206E+00 1.19558E+03 1.22803E+03 1.26047E+03 + 7.92500E+00 -7.71476E+02 -1.20228E+03 -1.63308E+03 4.01105E+02 2.07003E+02 1.28998E+01 1.57369E+03 1.61628E+03 1.65888E+03 -5.99152E+02 -1.02054E+03 -1.44193E+03 3.90856E+02 1.98582E+02 6.30744E+00 1.38086E+03 1.41771E+03 1.45455E+03 -5.99152E+02 -9.22422E+02 -1.24569E+03 3.00547E+02 1.55199E+02 9.85018E+00 1.20025E+03 1.23282E+03 1.26539E+03 + 7.95000E+00 -7.73630E+02 -1.20578E+03 -1.63792E+03 4.02362E+02 2.07650E+02 1.29380E+01 1.57835E+03 1.62108E+03 1.66380E+03 -6.01306E+02 -1.02404E+03 -1.44678E+03 3.92113E+02 1.99229E+02 6.34557E+00 1.38553E+03 1.42250E+03 1.45947E+03 -6.01306E+02 -9.25920E+02 -1.25053E+03 3.01804E+02 1.55846E+02 9.88832E+00 1.20491E+03 1.23761E+03 1.27031E+03 + 7.97500E+00 -7.75784E+02 -1.20927E+03 -1.64277E+03 4.03619E+02 2.08298E+02 1.29761E+01 1.58302E+03 1.62587E+03 1.66872E+03 -6.03460E+02 -1.02754E+03 -1.45162E+03 3.93370E+02 1.99877E+02 6.38369E+00 1.39020E+03 1.42729E+03 1.46439E+03 -6.03460E+02 -9.29419E+02 -1.25538E+03 3.03061E+02 1.56494E+02 9.92644E+00 1.20958E+03 1.24241E+03 1.27523E+03 + 8.00000E+00 -6.91776E+02 -1.17097E+03 -1.65015E+03 4.44906E+02 2.26426E+02 7.94663E+00 1.58159E+03 1.62382E+03 1.66605E+03 -6.91776E+02 -1.07284E+03 -1.45391E+03 3.54597E+02 1.83043E+02 1.14894E+01 1.40097E+03 1.43893E+03 1.47689E+03 -5.19452E+02 -8.91109E+02 -1.26277E+03 3.44348E+02 1.74622E+02 4.89698E+00 1.20815E+03 1.24035E+03 1.27256E+03 + 8.02500E+00 -6.93930E+02 -1.17446E+03 -1.65500E+03 4.46163E+02 2.27074E+02 7.98474E+00 1.58626E+03 1.62861E+03 1.67097E+03 -6.93930E+02 -1.07634E+03 -1.45876E+03 3.55854E+02 1.83691E+02 1.15275E+01 1.40564E+03 1.44372E+03 1.48181E+03 -5.21606E+02 -8.94608E+02 -1.26761E+03 3.45605E+02 1.75270E+02 4.93509E+00 1.21282E+03 1.24515E+03 1.27748E+03 + 8.05000E+00 -6.96084E+02 -1.17796E+03 -1.65984E+03 4.47420E+02 2.27721E+02 8.02287E+00 1.59092E+03 1.63340E+03 1.67589E+03 -6.96084E+02 -1.07984E+03 -1.46360E+03 3.57111E+02 1.84338E+02 1.15656E+01 1.41031E+03 1.44852E+03 1.48673E+03 -5.23760E+02 -8.98106E+02 -1.27245E+03 3.46862E+02 1.75917E+02 4.97321E+00 1.21748E+03 1.24994E+03 1.28240E+03 + 8.07500E+00 -6.98238E+02 -1.18146E+03 -1.66468E+03 4.48677E+02 2.28369E+02 8.06101E+00 1.59559E+03 1.63820E+03 1.68080E+03 -6.98238E+02 -1.08334E+03 -1.46844E+03 3.58368E+02 1.84986E+02 1.16038E+01 1.41497E+03 1.45331E+03 1.49165E+03 -5.25914E+02 -9.01604E+02 -1.27729E+03 3.48119E+02 1.76565E+02 5.01135E+00 1.22215E+03 1.25473E+03 1.28732E+03 + 8.10000E+00 -7.00392E+02 -1.18496E+03 -1.66952E+03 4.49934E+02 2.29016E+02 8.09913E+00 1.60026E+03 1.64299E+03 1.68572E+03 -7.00392E+02 -1.08684E+03 -1.47328E+03 3.59625E+02 1.85634E+02 1.16419E+01 1.41964E+03 1.45810E+03 1.49657E+03 -5.28068E+02 -9.05102E+02 -1.28214E+03 3.49376E+02 1.77213E+02 5.04947E+00 1.22682E+03 1.25953E+03 1.29223E+03 + 8.12500E+00 -7.02546E+02 -1.18846E+03 -1.67437E+03 4.51191E+02 2.29664E+02 8.13724E+00 1.60493E+03 1.64778E+03 1.69064E+03 -7.02546E+02 -1.09034E+03 -1.47813E+03 3.60882E+02 1.86281E+02 1.16800E+01 1.42431E+03 1.46290E+03 1.50149E+03 -5.30222E+02 -9.08600E+02 -1.28698E+03 3.50633E+02 1.77860E+02 5.08758E+00 1.23149E+03 1.26432E+03 1.29715E+03 + 8.15000E+00 -7.04700E+02 -1.19195E+03 -1.67921E+03 4.52448E+02 2.30311E+02 8.17535E+00 1.60960E+03 1.65258E+03 1.69556E+03 -7.04700E+02 -1.09383E+03 -1.48297E+03 3.62139E+02 1.86929E+02 1.17181E+01 1.42898E+03 1.46769E+03 1.50640E+03 -5.32377E+02 -9.12099E+02 -1.29182E+03 3.51890E+02 1.78508E+02 5.12570E+00 1.23616E+03 1.26911E+03 1.30207E+03 + 8.17500E+00 -7.06854E+02 -1.19545E+03 -1.68405E+03 4.53705E+02 2.30959E+02 8.21347E+00 1.61426E+03 1.65737E+03 1.70048E+03 -7.06854E+02 -1.09733E+03 -1.48781E+03 3.63396E+02 1.87576E+02 1.17562E+01 1.43365E+03 1.47248E+03 1.51132E+03 -5.34531E+02 -9.15597E+02 -1.29666E+03 3.53147E+02 1.79155E+02 5.16381E+00 1.24082E+03 1.27391E+03 1.30699E+03 + 8.20000E+00 -7.09008E+02 -1.19895E+03 -1.68889E+03 4.54962E+02 2.31607E+02 8.25161E+00 1.61893E+03 1.66216E+03 1.70540E+03 -7.09008E+02 -1.10083E+03 -1.49265E+03 3.64653E+02 1.88224E+02 1.17944E+01 1.43831E+03 1.47728E+03 1.51624E+03 -5.36685E+02 -9.19095E+02 -1.30151E+03 3.54404E+02 1.79803E+02 5.20195E+00 1.24549E+03 1.27870E+03 1.31191E+03 + 8.22500E+00 -7.11163E+02 -1.20245E+03 -1.69374E+03 4.56219E+02 2.32254E+02 8.28973E+00 1.62360E+03 1.66696E+03 1.71032E+03 -7.11163E+02 -1.10433E+03 -1.49749E+03 3.65910E+02 1.88871E+02 1.18325E+01 1.44298E+03 1.48207E+03 1.52116E+03 -5.38839E+02 -9.22593E+02 -1.30635E+03 3.55661E+02 1.80450E+02 5.24007E+00 1.25016E+03 1.28349E+03 1.31683E+03 + 8.25000E+00 -7.13317E+02 -1.20595E+03 -1.69858E+03 4.57476E+02 2.32902E+02 8.32784E+00 1.62827E+03 1.67175E+03 1.71523E+03 -7.13317E+02 -1.10783E+03 -1.50234E+03 3.67167E+02 1.89519E+02 1.18706E+01 1.44765E+03 1.48686E+03 1.52608E+03 -5.40993E+02 -9.26091E+02 -1.31119E+03 3.56918E+02 1.81098E+02 5.27819E+00 1.25483E+03 1.28829E+03 1.32175E+03 + 8.27500E+00 -7.15471E+02 -1.20945E+03 -1.70342E+03 4.58733E+02 2.33549E+02 8.36595E+00 1.63294E+03 1.67654E+03 1.72015E+03 -7.15471E+02 -1.11132E+03 -1.50718E+03 3.68424E+02 1.90166E+02 1.19087E+01 1.45232E+03 1.49166E+03 1.53100E+03 -5.43147E+02 -9.29590E+02 -1.31603E+03 3.58174E+02 1.81745E+02 5.31630E+00 1.25950E+03 1.29308E+03 1.32667E+03 + 8.30000E+00 -7.17625E+02 -1.21294E+03 -1.70826E+03 4.59990E+02 2.34197E+02 8.40407E+00 1.63760E+03 1.68134E+03 1.72507E+03 -7.17625E+02 -1.11482E+03 -1.51202E+03 3.69681E+02 1.90814E+02 1.19468E+01 1.45699E+03 1.49645E+03 1.53592E+03 -5.45301E+02 -9.33088E+02 -1.32087E+03 3.59431E+02 1.82393E+02 5.35442E+00 1.26416E+03 1.29787E+03 1.33158E+03 + 8.32500E+00 -7.19779E+02 -1.21644E+03 -1.71311E+03 4.61246E+02 2.34844E+02 8.44221E+00 1.64227E+03 1.68613E+03 1.72999E+03 -7.19779E+02 -1.11832E+03 -1.51686E+03 3.70938E+02 1.91462E+02 1.19850E+01 1.46165E+03 1.50124E+03 1.54083E+03 -5.47455E+02 -9.36586E+02 -1.32572E+03 3.60688E+02 1.83040E+02 5.39256E+00 1.26883E+03 1.30267E+03 1.33650E+03 + 8.35000E+00 -7.21933E+02 -1.21994E+03 -1.71795E+03 4.62504E+02 2.35492E+02 8.48034E+00 1.64694E+03 1.69092E+03 1.73491E+03 -7.21933E+02 -1.12182E+03 -1.52171E+03 3.72195E+02 1.92109E+02 1.20231E+01 1.46632E+03 1.50604E+03 1.54575E+03 -5.49609E+02 -9.40084E+02 -1.33056E+03 3.61945E+02 1.83688E+02 5.43067E+00 1.27350E+03 1.30746E+03 1.34142E+03 + 8.37500E+00 -7.24087E+02 -1.22344E+03 -1.72279E+03 4.63760E+02 2.36139E+02 8.51845E+00 1.65161E+03 1.69572E+03 1.73983E+03 -7.24087E+02 -1.12532E+03 -1.52655E+03 3.73452E+02 1.92757E+02 1.20612E+01 1.47099E+03 1.51083E+03 1.55067E+03 -5.51763E+02 -9.43582E+02 -1.33540E+03 3.63202E+02 1.84336E+02 5.46879E+00 1.27817E+03 1.31225E+03 1.34634E+03 + 8.40000E+00 -7.26241E+02 -1.22694E+03 -1.72763E+03 4.65017E+02 2.36787E+02 8.55655E+00 1.65628E+03 1.70051E+03 1.74475E+03 -7.26241E+02 -1.12882E+03 -1.53139E+03 3.74709E+02 1.93404E+02 1.20993E+01 1.47566E+03 1.51562E+03 1.55559E+03 -5.53917E+02 -9.47081E+02 -1.34024E+03 3.64459E+02 1.84983E+02 5.50691E+00 1.28284E+03 1.31705E+03 1.35126E+03 + 8.42500E+00 -7.28395E+02 -1.23043E+03 -1.73247E+03 4.66274E+02 2.37435E+02 8.59468E+00 1.66094E+03 1.70530E+03 1.74966E+03 -7.28395E+02 -1.13231E+03 -1.53623E+03 3.75966E+02 1.94052E+02 1.21374E+01 1.48033E+03 1.52042E+03 1.56051E+03 -5.56071E+02 -9.50579E+02 -1.34509E+03 3.65716E+02 1.85631E+02 5.54502E+00 1.28750E+03 1.32184E+03 1.35618E+03 + 8.45000E+00 -7.30549E+02 -1.23393E+03 -1.73732E+03 4.67531E+02 2.38082E+02 8.63282E+00 1.66561E+03 1.71010E+03 1.75458E+03 -7.30549E+02 -1.13581E+03 -1.54108E+03 3.77223E+02 1.94699E+02 1.21756E+01 1.48499E+03 1.52521E+03 1.56543E+03 -5.58225E+02 -9.54077E+02 -1.34993E+03 3.66973E+02 1.86278E+02 5.58316E+00 1.29217E+03 1.32663E+03 1.36110E+03 + 8.47500E+00 -7.32703E+02 -1.23743E+03 -1.74216E+03 4.68788E+02 2.38730E+02 8.67094E+00 1.67028E+03 1.71489E+03 1.75950E+03 -7.32703E+02 -1.13931E+03 -1.54592E+03 3.78480E+02 1.95347E+02 1.22137E+01 1.48966E+03 1.53000E+03 1.57035E+03 -5.60379E+02 -9.57575E+02 -1.35477E+03 3.68230E+02 1.86926E+02 5.62128E+00 1.29684E+03 1.33143E+03 1.36601E+03 + 8.50000E+00 -7.34857E+02 -1.24093E+03 -1.74700E+03 4.70045E+02 2.39377E+02 8.70905E+00 1.67495E+03 1.71968E+03 1.76442E+03 -7.34857E+02 -1.14281E+03 -1.55076E+03 3.79737E+02 1.95994E+02 1.22518E+01 1.49433E+03 1.53480E+03 1.57526E+03 -5.62533E+02 -9.61073E+02 -1.35961E+03 3.69487E+02 1.87573E+02 5.65939E+00 1.30151E+03 1.33622E+03 1.37093E+03 + 8.52500E+00 -7.37011E+02 -1.24443E+03 -1.75184E+03 4.71302E+02 2.40025E+02 8.74716E+00 1.67962E+03 1.72448E+03 1.76934E+03 -7.37011E+02 -1.14631E+03 -1.55560E+03 3.80994E+02 1.96642E+02 1.22899E+01 1.49900E+03 1.53959E+03 1.58018E+03 -5.64687E+02 -9.64572E+02 -1.36446E+03 3.70744E+02 1.88221E+02 5.69751E+00 1.30618E+03 1.34101E+03 1.37585E+03 + 8.55000E+00 -7.39165E+02 -1.24793E+03 -1.75669E+03 4.72559E+02 2.40672E+02 8.78528E+00 1.68428E+03 1.72927E+03 1.77426E+03 -7.39165E+02 -1.14981E+03 -1.56045E+03 3.82251E+02 1.97289E+02 1.23280E+01 1.50367E+03 1.54438E+03 1.58510E+03 -5.66841E+02 -9.68070E+02 -1.36930E+03 3.72001E+02 1.88868E+02 5.73563E+00 1.31084E+03 1.34581E+03 1.38077E+03 + 8.57500E+00 -7.41319E+02 -1.25142E+03 -1.76153E+03 4.73816E+02 2.41320E+02 8.82342E+00 1.68895E+03 1.73406E+03 1.77918E+03 -7.41319E+02 -1.15330E+03 -1.56529E+03 3.83508E+02 1.97937E+02 1.23662E+01 1.50833E+03 1.54918E+03 1.59002E+03 -5.68995E+02 -9.71568E+02 -1.37414E+03 3.73258E+02 1.89516E+02 5.77376E+00 1.31551E+03 1.35060E+03 1.38569E+03 + 8.60000E+00 -7.43473E+02 -1.25492E+03 -1.76637E+03 4.75073E+02 2.41967E+02 8.86154E+00 1.69362E+03 1.73886E+03 1.78409E+03 -7.43473E+02 -1.15680E+03 -1.57013E+03 3.84765E+02 1.98585E+02 1.24043E+01 1.51300E+03 1.55397E+03 1.59494E+03 -5.71149E+02 -9.75066E+02 -1.37898E+03 3.74515E+02 1.90164E+02 5.81188E+00 1.32018E+03 1.35539E+03 1.39061E+03 + 8.62500E+00 -7.45627E+02 -1.25842E+03 -1.77121E+03 4.76330E+02 2.42615E+02 8.89965E+00 1.69829E+03 1.74365E+03 1.78901E+03 -7.45627E+02 -1.16030E+03 -1.57497E+03 3.86022E+02 1.99232E+02 1.24424E+01 1.51767E+03 1.55876E+03 1.59986E+03 -5.73303E+02 -9.78564E+02 -1.38383E+03 3.75772E+02 1.90811E+02 5.85000E+00 1.32485E+03 1.36019E+03 1.39553E+03 + 8.65000E+00 -7.47781E+02 -1.26192E+03 -1.77606E+03 4.77587E+02 2.43262E+02 8.93776E+00 1.70296E+03 1.74844E+03 1.79393E+03 -7.47781E+02 -1.16380E+03 -1.57981E+03 3.87279E+02 1.99880E+02 1.24805E+01 1.52234E+03 1.56356E+03 1.60478E+03 -5.75457E+02 -9.82063E+02 -1.38867E+03 3.77029E+02 1.91459E+02 5.88811E+00 1.32952E+03 1.36498E+03 1.40044E+03 + 8.67500E+00 -7.49935E+02 -1.26542E+03 -1.78090E+03 4.78844E+02 2.43910E+02 8.97589E+00 1.70762E+03 1.75324E+03 1.79885E+03 -7.49935E+02 -1.16730E+03 -1.58466E+03 3.88536E+02 2.00527E+02 1.25186E+01 1.52701E+03 1.56835E+03 1.60969E+03 -5.77612E+02 -9.85561E+02 -1.39351E+03 3.78286E+02 1.92106E+02 5.92623E+00 1.33418E+03 1.36977E+03 1.40536E+03 + 8.70000E+00 -7.52089E+02 -1.26892E+03 -1.78574E+03 4.80101E+02 2.44558E+02 9.01402E+00 1.71229E+03 1.75803E+03 1.80377E+03 -7.52089E+02 -1.17079E+03 -1.58950E+03 3.89793E+02 2.01175E+02 1.25568E+01 1.53167E+03 1.57314E+03 1.61461E+03 -5.79766E+02 -9.89059E+02 -1.39835E+03 3.79543E+02 1.92754E+02 5.96437E+00 1.33885E+03 1.37457E+03 1.41028E+03 + 8.72500E+00 -7.54244E+02 -1.27241E+03 -1.79058E+03 4.81358E+02 2.45205E+02 9.05215E+00 1.71696E+03 1.76282E+03 1.80869E+03 -7.54244E+02 -1.17429E+03 -1.59434E+03 3.91050E+02 2.01822E+02 1.25949E+01 1.53634E+03 1.57794E+03 1.61953E+03 -5.81920E+02 -9.92557E+02 -1.40319E+03 3.80800E+02 1.93401E+02 6.00248E+00 1.34352E+03 1.37936E+03 1.41520E+03 + 8.75000E+00 -7.56398E+02 -1.27591E+03 -1.79543E+03 4.82615E+02 2.45853E+02 9.09026E+00 1.72163E+03 1.76762E+03 1.81361E+03 -7.56398E+02 -1.17779E+03 -1.59918E+03 3.92307E+02 2.02470E+02 1.26330E+01 1.54101E+03 1.58273E+03 1.62445E+03 -5.84074E+02 -9.96055E+02 -1.40804E+03 3.82057E+02 1.94049E+02 6.04060E+00 1.34819E+03 1.38415E+03 1.42012E+03 + 8.77500E+00 -7.58552E+02 -1.27941E+03 -1.80027E+03 4.83872E+02 2.46500E+02 9.12837E+00 1.72630E+03 1.77241E+03 1.81852E+03 -7.58552E+02 -1.18129E+03 -1.60403E+03 3.93564E+02 2.03117E+02 1.26711E+01 1.54568E+03 1.58752E+03 1.62937E+03 -5.86228E+02 -9.99554E+02 -1.41288E+03 3.83314E+02 1.94696E+02 6.07872E+00 1.35286E+03 1.38895E+03 1.42504E+03 + 8.80000E+00 -7.60706E+02 -1.28291E+03 -1.80511E+03 4.85129E+02 2.47148E+02 9.16649E+00 1.73096E+03 1.77720E+03 1.82344E+03 -7.60706E+02 -1.18479E+03 -1.60887E+03 3.94821E+02 2.03765E+02 1.27092E+01 1.55035E+03 1.59232E+03 1.63429E+03 -5.88382E+02 -1.00305E+03 -1.41772E+03 3.84571E+02 1.95344E+02 6.11683E+00 1.35752E+03 1.39374E+03 1.42996E+03 + 8.82500E+00 -7.62860E+02 -1.28641E+03 -1.80995E+03 4.86386E+02 2.47795E+02 9.20463E+00 1.73563E+03 1.78200E+03 1.82836E+03 -7.62860E+02 -1.18829E+03 -1.61371E+03 3.96078E+02 2.04412E+02 1.27474E+01 1.55501E+03 1.59711E+03 1.63921E+03 -5.90536E+02 -1.00655E+03 -1.42256E+03 3.85828E+02 1.95991E+02 6.15497E+00 1.36219E+03 1.39853E+03 1.43487E+03 + 8.85000E+00 -7.65014E+02 -1.28990E+03 -1.81479E+03 4.87643E+02 2.48443E+02 9.24275E+00 1.74030E+03 1.78679E+03 1.83328E+03 -7.65014E+02 -1.19178E+03 -1.61855E+03 3.97335E+02 2.05060E+02 1.27855E+01 1.55968E+03 1.60190E+03 1.64412E+03 -5.92690E+02 -1.01005E+03 -1.42741E+03 3.87085E+02 1.96639E+02 6.19309E+00 1.36686E+03 1.40333E+03 1.43979E+03 + 8.87500E+00 -7.67168E+02 -1.29340E+03 -1.81964E+03 4.88900E+02 2.49090E+02 9.28086E+00 1.74497E+03 1.79158E+03 1.83820E+03 -7.67168E+02 -1.19528E+03 -1.62340E+03 3.98592E+02 2.05708E+02 1.28236E+01 1.56435E+03 1.60670E+03 1.64904E+03 -5.94844E+02 -1.01355E+03 -1.43225E+03 3.88342E+02 1.97287E+02 6.23120E+00 1.37153E+03 1.40812E+03 1.44471E+03 + 8.90000E+00 -7.69322E+02 -1.29690E+03 -1.82448E+03 4.90157E+02 2.49738E+02 9.31897E+00 1.74964E+03 1.79638E+03 1.84312E+03 -7.69322E+02 -1.19878E+03 -1.62824E+03 3.99848E+02 2.06355E+02 1.28617E+01 1.56902E+03 1.61149E+03 1.65396E+03 -5.96998E+02 -1.01704E+03 -1.43709E+03 3.89599E+02 1.97934E+02 6.26932E+00 1.37620E+03 1.41291E+03 1.44963E+03 + 8.92500E+00 -7.71476E+02 -1.30040E+03 -1.82932E+03 4.91414E+02 2.50386E+02 9.35709E+00 1.75430E+03 1.80117E+03 1.84804E+03 -7.71476E+02 -1.20228E+03 -1.63308E+03 4.01105E+02 2.07003E+02 1.28998E+01 1.57369E+03 1.61628E+03 1.65888E+03 -5.99152E+02 -1.02054E+03 -1.44193E+03 3.90856E+02 1.98582E+02 6.30744E+00 1.38086E+03 1.41771E+03 1.45455E+03 + 8.95000E+00 -7.73630E+02 -1.30390E+03 -1.83416E+03 4.92671E+02 2.51033E+02 9.39523E+00 1.75897E+03 1.80596E+03 1.85295E+03 -7.73630E+02 -1.20578E+03 -1.63792E+03 4.02362E+02 2.07650E+02 1.29380E+01 1.57835E+03 1.62108E+03 1.66380E+03 -6.01306E+02 -1.02404E+03 -1.44678E+03 3.92113E+02 1.99229E+02 6.34557E+00 1.38553E+03 1.42250E+03 1.45947E+03 + 8.97500E+00 -7.75784E+02 -1.30740E+03 -1.83901E+03 4.93928E+02 2.51681E+02 9.43335E+00 1.76364E+03 1.81076E+03 1.85787E+03 -7.75784E+02 -1.20927E+03 -1.64277E+03 4.03619E+02 2.08298E+02 1.29761E+01 1.58302E+03 1.62587E+03 1.66872E+03 -6.03460E+02 -1.02754E+03 -1.45162E+03 3.93370E+02 1.99877E+02 6.38369E+00 1.39020E+03 1.42729E+03 1.46439E+03 + 9.00000E+00 -8.64100E+02 -1.35270E+03 -1.84130E+03 4.55155E+02 2.34847E+02 1.45390E+01 1.77441E+03 1.82240E+03 1.87038E+03 -6.91776E+02 -1.17097E+03 -1.65015E+03 4.44906E+02 2.26426E+02 7.94663E+00 1.58159E+03 1.62382E+03 1.66605E+03 -6.91776E+02 -1.07284E+03 -1.45391E+03 3.54597E+02 1.83043E+02 1.14894E+01 1.40097E+03 1.43893E+03 1.47689E+03 + 9.02500E+00 -8.66254E+02 -1.35620E+03 -1.84614E+03 4.56412E+02 2.35495E+02 1.45771E+01 1.77908E+03 1.82719E+03 1.87530E+03 -6.93930E+02 -1.17446E+03 -1.65500E+03 4.46163E+02 2.27074E+02 7.98474E+00 1.58626E+03 1.62861E+03 1.67097E+03 -6.93930E+02 -1.07634E+03 -1.45876E+03 3.55854E+02 1.83691E+02 1.15275E+01 1.40564E+03 1.44372E+03 1.48181E+03 + 9.05000E+00 -8.68408E+02 -1.35970E+03 -1.85099E+03 4.57669E+02 2.36142E+02 1.46153E+01 1.78375E+03 1.83198E+03 1.88022E+03 -6.96084E+02 -1.17796E+03 -1.65984E+03 4.47420E+02 2.27721E+02 8.02287E+00 1.59092E+03 1.63340E+03 1.67589E+03 -6.96084E+02 -1.07984E+03 -1.46360E+03 3.57111E+02 1.84338E+02 1.15656E+01 1.41031E+03 1.44852E+03 1.48673E+03 + 9.07500E+00 -8.70562E+02 -1.36320E+03 -1.85583E+03 4.58926E+02 2.36790E+02 1.46534E+01 1.78841E+03 1.83678E+03 1.88514E+03 -6.98238E+02 -1.18146E+03 -1.66468E+03 4.48677E+02 2.28369E+02 8.06101E+00 1.59559E+03 1.63820E+03 1.68080E+03 -6.98238E+02 -1.08334E+03 -1.46844E+03 3.58368E+02 1.84986E+02 1.16038E+01 1.41497E+03 1.45331E+03 1.49165E+03 + 9.10000E+00 -8.72716E+02 -1.36669E+03 -1.86067E+03 4.60183E+02 2.37437E+02 1.46915E+01 1.79308E+03 1.84157E+03 1.89005E+03 -7.00392E+02 -1.18496E+03 -1.66952E+03 4.49934E+02 2.29016E+02 8.09913E+00 1.60026E+03 1.64299E+03 1.68572E+03 -7.00392E+02 -1.08684E+03 -1.47328E+03 3.59625E+02 1.85634E+02 1.16419E+01 1.41964E+03 1.45810E+03 1.49657E+03 + 9.12500E+00 -8.74870E+02 -1.37019E+03 -1.86551E+03 4.61440E+02 2.38085E+02 1.47296E+01 1.79775E+03 1.84636E+03 1.89497E+03 -7.02546E+02 -1.18846E+03 -1.67437E+03 4.51191E+02 2.29664E+02 8.13724E+00 1.60493E+03 1.64778E+03 1.69064E+03 -7.02546E+02 -1.09034E+03 -1.47813E+03 3.60882E+02 1.86281E+02 1.16800E+01 1.42431E+03 1.46290E+03 1.50149E+03 + 9.15000E+00 -8.77024E+02 -1.37369E+03 -1.87036E+03 4.62697E+02 2.38733E+02 1.47677E+01 1.80242E+03 1.85116E+03 1.89989E+03 -7.04700E+02 -1.19195E+03 -1.67921E+03 4.52448E+02 2.30311E+02 8.17535E+00 1.60960E+03 1.65258E+03 1.69556E+03 -7.04700E+02 -1.09383E+03 -1.48297E+03 3.62139E+02 1.86929E+02 1.17181E+01 1.42898E+03 1.46769E+03 1.50640E+03 + 9.17500E+00 -8.79178E+02 -1.37719E+03 -1.87520E+03 4.63954E+02 2.39380E+02 1.48059E+01 1.80709E+03 1.85595E+03 1.90481E+03 -7.06854E+02 -1.19545E+03 -1.68405E+03 4.53705E+02 2.30959E+02 8.21347E+00 1.61426E+03 1.65737E+03 1.70048E+03 -7.06854E+02 -1.09733E+03 -1.48781E+03 3.63396E+02 1.87576E+02 1.17562E+01 1.43365E+03 1.47248E+03 1.51132E+03 + 9.20000E+00 -8.81332E+02 -1.38069E+03 -1.88004E+03 4.65211E+02 2.40028E+02 1.48440E+01 1.81175E+03 1.86074E+03 1.90973E+03 -7.09008E+02 -1.19895E+03 -1.68889E+03 4.54962E+02 2.31607E+02 8.25161E+00 1.61893E+03 1.66216E+03 1.70540E+03 -7.09008E+02 -1.10083E+03 -1.49265E+03 3.64653E+02 1.88224E+02 1.17944E+01 1.43831E+03 1.47728E+03 1.51624E+03 + 9.22500E+00 -8.83486E+02 -1.38418E+03 -1.88488E+03 4.66468E+02 2.40675E+02 1.48821E+01 1.81642E+03 1.86554E+03 1.91465E+03 -7.11163E+02 -1.20245E+03 -1.69374E+03 4.56219E+02 2.32254E+02 8.28973E+00 1.62360E+03 1.66696E+03 1.71032E+03 -7.11163E+02 -1.10433E+03 -1.49749E+03 3.65910E+02 1.88871E+02 1.18325E+01 1.44298E+03 1.48207E+03 1.52116E+03 + 9.25000E+00 -8.85640E+02 -1.38768E+03 -1.88973E+03 4.67725E+02 2.41323E+02 1.49202E+01 1.82109E+03 1.87033E+03 1.91957E+03 -7.13317E+02 -1.20595E+03 -1.69858E+03 4.57476E+02 2.32902E+02 8.32784E+00 1.62827E+03 1.67175E+03 1.71523E+03 -7.13317E+02 -1.10783E+03 -1.50234E+03 3.67167E+02 1.89519E+02 1.18706E+01 1.44765E+03 1.48686E+03 1.52608E+03 + 9.27500E+00 -8.87794E+02 -1.39118E+03 -1.89457E+03 4.68982E+02 2.41970E+02 1.49584E+01 1.82576E+03 1.87512E+03 1.92448E+03 -7.15471E+02 -1.20945E+03 -1.70342E+03 4.58733E+02 2.33549E+02 8.36595E+00 1.63294E+03 1.67654E+03 1.72015E+03 -7.15471E+02 -1.11132E+03 -1.50718E+03 3.68424E+02 1.90166E+02 1.19087E+01 1.45232E+03 1.49166E+03 1.53100E+03 + 9.30000E+00 -8.89949E+02 -1.39468E+03 -1.89941E+03 4.70239E+02 2.42618E+02 1.49965E+01 1.83043E+03 1.87992E+03 1.92940E+03 -7.17625E+02 -1.21294E+03 -1.70826E+03 4.59990E+02 2.34197E+02 8.40407E+00 1.63760E+03 1.68134E+03 1.72507E+03 -7.17625E+02 -1.11482E+03 -1.51202E+03 3.69681E+02 1.90814E+02 1.19468E+01 1.45699E+03 1.49645E+03 1.53592E+03 + 9.32500E+00 -8.92103E+02 -1.39818E+03 -1.90425E+03 4.71496E+02 2.43265E+02 1.50346E+01 1.83509E+03 1.88471E+03 1.93432E+03 -7.19779E+02 -1.21644E+03 -1.71311E+03 4.61246E+02 2.34844E+02 8.44221E+00 1.64227E+03 1.68613E+03 1.72999E+03 -7.19779E+02 -1.11832E+03 -1.51686E+03 3.70938E+02 1.91462E+02 1.19850E+01 1.46165E+03 1.50124E+03 1.54083E+03 + 9.35000E+00 -8.94257E+02 -1.40168E+03 -1.90909E+03 4.72753E+02 2.43913E+02 1.50727E+01 1.83976E+03 1.88950E+03 1.93924E+03 -7.21933E+02 -1.21994E+03 -1.71795E+03 4.62504E+02 2.35492E+02 8.48034E+00 1.64694E+03 1.69092E+03 1.73491E+03 -7.21933E+02 -1.12182E+03 -1.52171E+03 3.72195E+02 1.92109E+02 1.20231E+01 1.46632E+03 1.50604E+03 1.54575E+03 + 9.37500E+00 -8.96411E+02 -1.40517E+03 -1.91394E+03 4.74010E+02 2.44560E+02 1.51108E+01 1.84443E+03 1.89429E+03 1.94416E+03 -7.24087E+02 -1.22344E+03 -1.72279E+03 4.63760E+02 2.36139E+02 8.51845E+00 1.65161E+03 1.69572E+03 1.73983E+03 -7.24087E+02 -1.12532E+03 -1.52655E+03 3.73452E+02 1.92757E+02 1.20612E+01 1.47099E+03 1.51083E+03 1.55067E+03 + 9.40000E+00 -8.98565E+02 -1.40867E+03 -1.91878E+03 4.75267E+02 2.45208E+02 1.51490E+01 1.84910E+03 1.89909E+03 1.94908E+03 -7.26241E+02 -1.22694E+03 -1.72763E+03 4.65017E+02 2.36787E+02 8.55655E+00 1.65628E+03 1.70051E+03 1.74475E+03 -7.26241E+02 -1.12882E+03 -1.53139E+03 3.74709E+02 1.93404E+02 1.20993E+01 1.47566E+03 1.51562E+03 1.55559E+03 + 9.42500E+00 -9.00719E+02 -1.41217E+03 -1.92362E+03 4.76524E+02 2.45856E+02 1.51871E+01 1.85377E+03 1.90388E+03 1.95400E+03 -7.28395E+02 -1.23043E+03 -1.73247E+03 4.66274E+02 2.37435E+02 8.59468E+00 1.66094E+03 1.70530E+03 1.74966E+03 -7.28395E+02 -1.13231E+03 -1.53623E+03 3.75966E+02 1.94052E+02 1.21374E+01 1.48033E+03 1.52042E+03 1.56051E+03 + 9.45000E+00 -9.02873E+02 -1.41567E+03 -1.92846E+03 4.77781E+02 2.46503E+02 1.52252E+01 1.85843E+03 1.90867E+03 1.95891E+03 -7.30549E+02 -1.23393E+03 -1.73732E+03 4.67531E+02 2.38082E+02 8.63282E+00 1.66561E+03 1.71010E+03 1.75458E+03 -7.30549E+02 -1.13581E+03 -1.54108E+03 3.77223E+02 1.94699E+02 1.21756E+01 1.48499E+03 1.52521E+03 1.56543E+03 + 9.47500E+00 -9.05027E+02 -1.41917E+03 -1.93331E+03 4.79038E+02 2.47151E+02 1.52633E+01 1.86310E+03 1.91347E+03 1.96383E+03 -7.32703E+02 -1.23743E+03 -1.74216E+03 4.68788E+02 2.38730E+02 8.67094E+00 1.67028E+03 1.71489E+03 1.75950E+03 -7.32703E+02 -1.13931E+03 -1.54592E+03 3.78480E+02 1.95347E+02 1.22137E+01 1.48966E+03 1.53000E+03 1.57035E+03 + 9.50000E+00 -9.07181E+02 -1.42266E+03 -1.93815E+03 4.80295E+02 2.47798E+02 1.53015E+01 1.86777E+03 1.91826E+03 1.96875E+03 -7.34857E+02 -1.24093E+03 -1.74700E+03 4.70045E+02 2.39377E+02 8.70905E+00 1.67495E+03 1.71968E+03 1.76442E+03 -7.34857E+02 -1.14281E+03 -1.55076E+03 3.79737E+02 1.95994E+02 1.22518E+01 1.49433E+03 1.53480E+03 1.57526E+03 + 9.52500E+00 -9.09335E+02 -1.42616E+03 -1.94299E+03 4.81552E+02 2.48446E+02 1.53396E+01 1.87244E+03 1.92305E+03 1.97367E+03 -7.37011E+02 -1.24443E+03 -1.75184E+03 4.71302E+02 2.40025E+02 8.74716E+00 1.67962E+03 1.72448E+03 1.76934E+03 -7.37011E+02 -1.14631E+03 -1.55560E+03 3.80994E+02 1.96642E+02 1.22899E+01 1.49900E+03 1.53959E+03 1.58018E+03 + 9.55000E+00 -9.11489E+02 -1.42966E+03 -1.94783E+03 4.82809E+02 2.49093E+02 1.53777E+01 1.87711E+03 1.92785E+03 1.97859E+03 -7.39165E+02 -1.24793E+03 -1.75669E+03 4.72559E+02 2.40672E+02 8.78528E+00 1.68428E+03 1.72927E+03 1.77426E+03 -7.39165E+02 -1.14981E+03 -1.56045E+03 3.82251E+02 1.97289E+02 1.23280E+01 1.50367E+03 1.54438E+03 1.58510E+03 + 9.57500E+00 -9.13643E+02 -1.43316E+03 -1.95268E+03 4.84066E+02 2.49741E+02 1.54158E+01 1.88177E+03 1.93264E+03 1.98351E+03 -7.41319E+02 -1.25142E+03 -1.76153E+03 4.73816E+02 2.41320E+02 8.82342E+00 1.68895E+03 1.73406E+03 1.77918E+03 -7.41319E+02 -1.15330E+03 -1.56529E+03 3.83508E+02 1.97937E+02 1.23662E+01 1.50833E+03 1.54918E+03 1.59002E+03 + 9.60000E+00 -9.15797E+02 -1.43666E+03 -1.95752E+03 4.85323E+02 2.50388E+02 1.54539E+01 1.88644E+03 1.93743E+03 1.98843E+03 -7.43473E+02 -1.25492E+03 -1.76637E+03 4.75073E+02 2.41967E+02 8.86154E+00 1.69362E+03 1.73886E+03 1.78409E+03 -7.43473E+02 -1.15680E+03 -1.57013E+03 3.84765E+02 1.98585E+02 1.24043E+01 1.51300E+03 1.55397E+03 1.59494E+03 + 9.62500E+00 -9.17951E+02 -1.44016E+03 -1.96236E+03 4.86580E+02 2.51036E+02 1.54921E+01 1.89111E+03 1.94223E+03 1.99334E+03 -7.45627E+02 -1.25842E+03 -1.77121E+03 4.76330E+02 2.42615E+02 8.89965E+00 1.69829E+03 1.74365E+03 1.78901E+03 -7.45627E+02 -1.16030E+03 -1.57497E+03 3.86022E+02 1.99232E+02 1.24424E+01 1.51767E+03 1.55876E+03 1.59986E+03 + 9.65000E+00 -9.20105E+02 -1.44365E+03 -1.96720E+03 4.87837E+02 2.51683E+02 1.55302E+01 1.89578E+03 1.94702E+03 1.99826E+03 -7.47781E+02 -1.26192E+03 -1.77606E+03 4.77587E+02 2.43262E+02 8.93776E+00 1.70296E+03 1.74844E+03 1.79393E+03 -7.47781E+02 -1.16380E+03 -1.57981E+03 3.87279E+02 1.99880E+02 1.24805E+01 1.52234E+03 1.56356E+03 1.60478E+03 + 9.67500E+00 -9.22259E+02 -1.44715E+03 -1.97205E+03 4.89094E+02 2.52331E+02 1.55683E+01 1.90045E+03 1.95181E+03 2.00318E+03 -7.49935E+02 -1.26542E+03 -1.78090E+03 4.78844E+02 2.43910E+02 8.97589E+00 1.70762E+03 1.75324E+03 1.79885E+03 -7.49935E+02 -1.16730E+03 -1.58466E+03 3.88536E+02 2.00527E+02 1.25186E+01 1.52701E+03 1.56835E+03 1.60969E+03 + 9.70000E+00 -9.24413E+02 -1.45065E+03 -1.97689E+03 4.90351E+02 2.52979E+02 1.56064E+01 1.90511E+03 1.95661E+03 2.00810E+03 -7.52089E+02 -1.26892E+03 -1.78574E+03 4.80101E+02 2.44558E+02 9.01402E+00 1.71229E+03 1.75803E+03 1.80377E+03 -7.52089E+02 -1.17079E+03 -1.58950E+03 3.89793E+02 2.01175E+02 1.25568E+01 1.53167E+03 1.57314E+03 1.61461E+03 + 9.72500E+00 -9.26567E+02 -1.45415E+03 -1.98173E+03 4.91608E+02 2.53626E+02 1.56445E+01 1.90978E+03 1.96140E+03 2.01302E+03 -7.54244E+02 -1.27241E+03 -1.79058E+03 4.81358E+02 2.45205E+02 9.05215E+00 1.71696E+03 1.76282E+03 1.80869E+03 -7.54244E+02 -1.17429E+03 -1.59434E+03 3.91050E+02 2.01822E+02 1.25949E+01 1.53634E+03 1.57794E+03 1.61953E+03 + 9.75000E+00 -9.28721E+02 -1.45765E+03 -1.98657E+03 4.92865E+02 2.54274E+02 1.56827E+01 1.91445E+03 1.96619E+03 2.01794E+03 -7.56398E+02 -1.27591E+03 -1.79543E+03 4.82615E+02 2.45853E+02 9.09026E+00 1.72163E+03 1.76762E+03 1.81361E+03 -7.56398E+02 -1.17779E+03 -1.59918E+03 3.92307E+02 2.02470E+02 1.26330E+01 1.54101E+03 1.58273E+03 1.62445E+03 + 9.77500E+00 -9.30875E+02 -1.46115E+03 -1.99141E+03 4.94122E+02 2.54921E+02 1.57208E+01 1.91912E+03 1.97099E+03 2.02286E+03 -7.58552E+02 -1.27941E+03 -1.80027E+03 4.83872E+02 2.46500E+02 9.12837E+00 1.72630E+03 1.77241E+03 1.81852E+03 -7.58552E+02 -1.18129E+03 -1.60403E+03 3.93564E+02 2.03117E+02 1.26711E+01 1.54568E+03 1.58752E+03 1.62937E+03 + 9.80000E+00 -9.33029E+02 -1.46464E+03 -1.99626E+03 4.95379E+02 2.55569E+02 1.57589E+01 1.92379E+03 1.97578E+03 2.02778E+03 -7.60706E+02 -1.28291E+03 -1.80511E+03 4.85129E+02 2.47148E+02 9.16649E+00 1.73096E+03 1.77720E+03 1.82344E+03 -7.60706E+02 -1.18479E+03 -1.60887E+03 3.94821E+02 2.03765E+02 1.27092E+01 1.55035E+03 1.59232E+03 1.63429E+03 + 9.82500E+00 -9.35184E+02 -1.46814E+03 -2.00110E+03 4.96636E+02 2.56216E+02 1.57970E+01 1.92845E+03 1.98057E+03 2.03269E+03 -7.62860E+02 -1.28641E+03 -1.80995E+03 4.86386E+02 2.47795E+02 9.20463E+00 1.73563E+03 1.78200E+03 1.82836E+03 -7.62860E+02 -1.18829E+03 -1.61371E+03 3.96078E+02 2.04412E+02 1.27474E+01 1.55501E+03 1.59711E+03 1.63921E+03 + 9.85000E+00 -9.37338E+02 -1.47164E+03 -2.00594E+03 4.97893E+02 2.56864E+02 1.58351E+01 1.93312E+03 1.98537E+03 2.03761E+03 -7.65014E+02 -1.28990E+03 -1.81479E+03 4.87643E+02 2.48443E+02 9.24275E+00 1.74030E+03 1.78679E+03 1.83328E+03 -7.65014E+02 -1.19178E+03 -1.61855E+03 3.97335E+02 2.05060E+02 1.27855E+01 1.55968E+03 1.60190E+03 1.64412E+03 + 9.87500E+00 -9.39492E+02 -1.47514E+03 -2.01078E+03 4.99150E+02 2.57511E+02 1.58733E+01 1.93779E+03 1.99016E+03 2.04253E+03 -7.67168E+02 -1.29340E+03 -1.81964E+03 4.88900E+02 2.49090E+02 9.28086E+00 1.74497E+03 1.79158E+03 1.83820E+03 -7.67168E+02 -1.19528E+03 -1.62340E+03 3.98592E+02 2.05708E+02 1.28236E+01 1.56435E+03 1.60670E+03 1.64904E+03 + 9.90000E+00 -9.41646E+02 -1.47864E+03 -2.01563E+03 5.00407E+02 2.58159E+02 1.59114E+01 1.94246E+03 1.99495E+03 2.04745E+03 -7.69322E+02 -1.29690E+03 -1.82448E+03 4.90157E+02 2.49738E+02 9.31897E+00 1.74964E+03 1.79638E+03 1.84312E+03 -7.69322E+02 -1.19878E+03 -1.62824E+03 3.99848E+02 2.06355E+02 1.28617E+01 1.56902E+03 1.61149E+03 1.65396E+03 + 9.92500E+00 -9.43800E+02 -1.48213E+03 -2.02047E+03 5.01664E+02 2.58807E+02 1.59495E+01 1.94713E+03 1.99975E+03 2.05237E+03 -7.71476E+02 -1.30040E+03 -1.82932E+03 4.91414E+02 2.50386E+02 9.35709E+00 1.75430E+03 1.80117E+03 1.84804E+03 -7.71476E+02 -1.20228E+03 -1.63308E+03 4.01105E+02 2.07003E+02 1.28998E+01 1.57369E+03 1.61628E+03 1.65888E+03 + 9.95000E+00 -9.45954E+02 -1.48563E+03 -2.02531E+03 5.02921E+02 2.59454E+02 1.59876E+01 1.95179E+03 2.00454E+03 2.05729E+03 -7.73630E+02 -1.30390E+03 -1.83416E+03 4.92671E+02 2.51033E+02 9.39523E+00 1.75897E+03 1.80596E+03 1.85295E+03 -7.73630E+02 -1.20578E+03 -1.63792E+03 4.02362E+02 2.07650E+02 1.29380E+01 1.57835E+03 1.62108E+03 1.66380E+03 + 9.97500E+00 -9.48108E+02 -1.48913E+03 -2.03015E+03 5.04177E+02 2.60102E+02 1.60257E+01 1.95646E+03 2.00933E+03 2.06221E+03 -7.75784E+02 -1.30740E+03 -1.83901E+03 4.93928E+02 2.51681E+02 9.43335E+00 1.76364E+03 1.81076E+03 1.85787E+03 -7.75784E+02 -1.20927E+03 -1.64277E+03 4.03619E+02 2.08298E+02 1.29761E+01 1.58302E+03 1.62587E+03 1.66872E+03 + 1.00000E+01 -8.64100E+02 -1.45082E+03 -2.03754E+03 5.45464E+02 2.78230E+02 1.09963E+01 1.95503E+03 2.00728E+03 2.05954E+03 -8.64100E+02 -1.35270E+03 -1.84130E+03 4.55155E+02 2.34847E+02 1.45390E+01 1.77441E+03 1.82240E+03 1.87038E+03 -6.91776E+02 -1.17097E+03 -1.65015E+03 4.44906E+02 2.26426E+02 7.94663E+00 1.58159E+03 1.62382E+03 1.66605E+03 + 1.00250E+01 -8.66254E+02 -1.45432E+03 -2.04239E+03 5.46721E+02 2.78878E+02 1.10344E+01 1.95970E+03 2.01207E+03 2.06445E+03 -8.66254E+02 -1.35620E+03 -1.84614E+03 4.56412E+02 2.35495E+02 1.45771E+01 1.77908E+03 1.82719E+03 1.87530E+03 -6.93930E+02 -1.17446E+03 -1.65500E+03 4.46163E+02 2.27074E+02 7.98474E+00 1.58626E+03 1.62861E+03 1.67097E+03 + 1.00500E+01 -8.68408E+02 -1.45782E+03 -2.04723E+03 5.47978E+02 2.79525E+02 1.10725E+01 1.96436E+03 2.01687E+03 2.06937E+03 -8.68408E+02 -1.35970E+03 -1.85099E+03 4.57669E+02 2.36142E+02 1.46153E+01 1.78375E+03 1.83198E+03 1.88022E+03 -6.96084E+02 -1.17796E+03 -1.65984E+03 4.47420E+02 2.27721E+02 8.02287E+00 1.59092E+03 1.63340E+03 1.67589E+03 + 1.00750E+01 -8.70562E+02 -1.46132E+03 -2.05207E+03 5.49235E+02 2.80173E+02 1.11107E+01 1.96903E+03 2.02166E+03 2.07429E+03 -8.70562E+02 -1.36320E+03 -1.85583E+03 4.58926E+02 2.36790E+02 1.46534E+01 1.78841E+03 1.83678E+03 1.88514E+03 -6.98238E+02 -1.18146E+03 -1.66468E+03 4.48677E+02 2.28369E+02 8.06101E+00 1.59559E+03 1.63820E+03 1.68080E+03 + 1.01000E+01 -8.72716E+02 -1.46481E+03 -2.05691E+03 5.50492E+02 2.80820E+02 1.11488E+01 1.97370E+03 2.02645E+03 2.07921E+03 -8.72716E+02 -1.36669E+03 -1.86067E+03 4.60183E+02 2.37437E+02 1.46915E+01 1.79308E+03 1.84157E+03 1.89005E+03 -7.00392E+02 -1.18496E+03 -1.66952E+03 4.49934E+02 2.29016E+02 8.09913E+00 1.60026E+03 1.64299E+03 1.68572E+03 + 1.01250E+01 -8.74870E+02 -1.46831E+03 -2.06176E+03 5.51749E+02 2.81468E+02 1.11869E+01 1.97837E+03 2.03125E+03 2.08413E+03 -8.74870E+02 -1.37019E+03 -1.86551E+03 4.61440E+02 2.38085E+02 1.47296E+01 1.79775E+03 1.84636E+03 1.89497E+03 -7.02546E+02 -1.18846E+03 -1.67437E+03 4.51191E+02 2.29664E+02 8.13724E+00 1.60493E+03 1.64778E+03 1.69064E+03 + 1.01500E+01 -8.77024E+02 -1.47181E+03 -2.06660E+03 5.53006E+02 2.82115E+02 1.12250E+01 1.98304E+03 2.03604E+03 2.08905E+03 -8.77024E+02 -1.37369E+03 -1.87036E+03 4.62697E+02 2.38733E+02 1.47677E+01 1.80242E+03 1.85116E+03 1.89989E+03 -7.04700E+02 -1.19195E+03 -1.67921E+03 4.52448E+02 2.30311E+02 8.17535E+00 1.60960E+03 1.65258E+03 1.69556E+03 + 1.01750E+01 -8.79178E+02 -1.47531E+03 -2.07144E+03 5.54263E+02 2.82763E+02 1.12631E+01 1.98770E+03 2.04083E+03 2.09397E+03 -8.79178E+02 -1.37719E+03 -1.87520E+03 4.63954E+02 2.39380E+02 1.48059E+01 1.80709E+03 1.85595E+03 1.90481E+03 -7.06854E+02 -1.19545E+03 -1.68405E+03 4.53705E+02 2.30959E+02 8.21347E+00 1.61426E+03 1.65737E+03 1.70048E+03 + 1.02000E+01 -8.81332E+02 -1.47881E+03 -2.07628E+03 5.55520E+02 2.83410E+02 1.13013E+01 1.99237E+03 2.04563E+03 2.09888E+03 -8.81332E+02 -1.38069E+03 -1.88004E+03 4.65211E+02 2.40028E+02 1.48440E+01 1.81175E+03 1.86074E+03 1.90973E+03 -7.09008E+02 -1.19895E+03 -1.68889E+03 4.54962E+02 2.31607E+02 8.25161E+00 1.61893E+03 1.66216E+03 1.70540E+03 + 1.02250E+01 -8.83486E+02 -1.48231E+03 -2.08112E+03 5.56777E+02 2.84058E+02 1.13394E+01 1.99704E+03 2.05042E+03 2.10380E+03 -8.83486E+02 -1.38418E+03 -1.88488E+03 4.66468E+02 2.40675E+02 1.48821E+01 1.81642E+03 1.86554E+03 1.91465E+03 -7.11163E+02 -1.20245E+03 -1.69374E+03 4.56219E+02 2.32254E+02 8.28973E+00 1.62360E+03 1.66696E+03 1.71032E+03 + 1.02500E+01 -8.85640E+02 -1.48580E+03 -2.08597E+03 5.58034E+02 2.84706E+02 1.13775E+01 2.00171E+03 2.05521E+03 2.10872E+03 -8.85640E+02 -1.38768E+03 -1.88973E+03 4.67725E+02 2.41323E+02 1.49202E+01 1.82109E+03 1.87033E+03 1.91957E+03 -7.13317E+02 -1.20595E+03 -1.69858E+03 4.57476E+02 2.32902E+02 8.32784E+00 1.62827E+03 1.67175E+03 1.71523E+03 + 1.02750E+01 -8.87794E+02 -1.48930E+03 -2.09081E+03 5.59291E+02 2.85353E+02 1.14156E+01 2.00638E+03 2.06001E+03 2.11364E+03 -8.87794E+02 -1.39118E+03 -1.89457E+03 4.68982E+02 2.41970E+02 1.49584E+01 1.82576E+03 1.87512E+03 1.92448E+03 -7.15471E+02 -1.20945E+03 -1.70342E+03 4.58733E+02 2.33549E+02 8.36595E+00 1.63294E+03 1.67654E+03 1.72015E+03 + 1.03000E+01 -8.89949E+02 -1.49280E+03 -2.09565E+03 5.60548E+02 2.86001E+02 1.14537E+01 2.01104E+03 2.06480E+03 2.11856E+03 -8.89949E+02 -1.39468E+03 -1.89941E+03 4.70239E+02 2.42618E+02 1.49965E+01 1.83043E+03 1.87992E+03 1.92940E+03 -7.17625E+02 -1.21294E+03 -1.70826E+03 4.59990E+02 2.34197E+02 8.40407E+00 1.63760E+03 1.68134E+03 1.72507E+03 + 1.03250E+01 -8.92103E+02 -1.49630E+03 -2.10049E+03 5.61805E+02 2.86648E+02 1.14919E+01 2.01571E+03 2.06959E+03 2.12348E+03 -8.92103E+02 -1.39818E+03 -1.90425E+03 4.71496E+02 2.43265E+02 1.50346E+01 1.83509E+03 1.88471E+03 1.93432E+03 -7.19779E+02 -1.21644E+03 -1.71311E+03 4.61246E+02 2.34844E+02 8.44221E+00 1.64227E+03 1.68613E+03 1.72999E+03 + 1.03500E+01 -8.94257E+02 -1.49980E+03 -2.10534E+03 5.63062E+02 2.87296E+02 1.15300E+01 2.02038E+03 2.07439E+03 2.12840E+03 -8.94257E+02 -1.40168E+03 -1.90909E+03 4.72753E+02 2.43913E+02 1.50727E+01 1.83976E+03 1.88950E+03 1.93924E+03 -7.21933E+02 -1.21994E+03 -1.71795E+03 4.62504E+02 2.35492E+02 8.48034E+00 1.64694E+03 1.69092E+03 1.73491E+03 + 1.03750E+01 -8.96411E+02 -1.50329E+03 -2.11018E+03 5.64318E+02 2.87943E+02 1.15681E+01 2.02505E+03 2.07918E+03 2.13331E+03 -8.96411E+02 -1.40517E+03 -1.91394E+03 4.74010E+02 2.44560E+02 1.51108E+01 1.84443E+03 1.89429E+03 1.94416E+03 -7.24087E+02 -1.22344E+03 -1.72279E+03 4.63760E+02 2.36139E+02 8.51845E+00 1.65161E+03 1.69572E+03 1.73983E+03 + 1.04000E+01 -8.98565E+02 -1.50679E+03 -2.11502E+03 5.65576E+02 2.88591E+02 1.16062E+01 2.02972E+03 2.08397E+03 2.13823E+03 -8.98565E+02 -1.40867E+03 -1.91878E+03 4.75267E+02 2.45208E+02 1.51490E+01 1.84910E+03 1.89909E+03 1.94908E+03 -7.26241E+02 -1.22694E+03 -1.72763E+03 4.65017E+02 2.36787E+02 8.55655E+00 1.65628E+03 1.70051E+03 1.74475E+03 + 1.04250E+01 -9.00719E+02 -1.51029E+03 -2.11986E+03 5.66832E+02 2.89238E+02 1.16443E+01 2.03438E+03 2.08877E+03 2.14315E+03 -9.00719E+02 -1.41217E+03 -1.92362E+03 4.76524E+02 2.45856E+02 1.51871E+01 1.85377E+03 1.90388E+03 1.95400E+03 -7.28395E+02 -1.23043E+03 -1.73247E+03 4.66274E+02 2.37435E+02 8.59468E+00 1.66094E+03 1.70530E+03 1.74966E+03 + 1.04500E+01 -9.02873E+02 -1.51379E+03 -2.12471E+03 5.68089E+02 2.89886E+02 1.16825E+01 2.03905E+03 2.09356E+03 2.14807E+03 -9.02873E+02 -1.41567E+03 -1.92846E+03 4.77781E+02 2.46503E+02 1.52252E+01 1.85843E+03 1.90867E+03 1.95891E+03 -7.30549E+02 -1.23393E+03 -1.73732E+03 4.67531E+02 2.38082E+02 8.63282E+00 1.66561E+03 1.71010E+03 1.75458E+03 + 1.04750E+01 -9.05027E+02 -1.51729E+03 -2.12955E+03 5.69346E+02 2.90534E+02 1.17206E+01 2.04372E+03 2.09835E+03 2.15299E+03 -9.05027E+02 -1.41917E+03 -1.93331E+03 4.79038E+02 2.47151E+02 1.52633E+01 1.86310E+03 1.91347E+03 1.96383E+03 -7.32703E+02 -1.23743E+03 -1.74216E+03 4.68788E+02 2.38730E+02 8.67094E+00 1.67028E+03 1.71489E+03 1.75950E+03 + 1.05000E+01 -9.07181E+02 -1.52079E+03 -2.13439E+03 5.70603E+02 2.91181E+02 1.17587E+01 2.04839E+03 2.10315E+03 2.15791E+03 -9.07181E+02 -1.42266E+03 -1.93815E+03 4.80295E+02 2.47798E+02 1.53015E+01 1.86777E+03 1.91826E+03 1.96875E+03 -7.34857E+02 -1.24093E+03 -1.74700E+03 4.70045E+02 2.39377E+02 8.70905E+00 1.67495E+03 1.71968E+03 1.76442E+03 + 1.05250E+01 -9.09335E+02 -1.52428E+03 -2.13923E+03 5.71860E+02 2.91829E+02 1.17968E+01 2.05306E+03 2.10794E+03 2.16283E+03 -9.09335E+02 -1.42616E+03 -1.94299E+03 4.81552E+02 2.48446E+02 1.53396E+01 1.87244E+03 1.92305E+03 1.97367E+03 -7.37011E+02 -1.24443E+03 -1.75184E+03 4.71302E+02 2.40025E+02 8.74716E+00 1.67962E+03 1.72448E+03 1.76934E+03 + 1.05500E+01 -9.11489E+02 -1.52778E+03 -2.14408E+03 5.73117E+02 2.92476E+02 1.18349E+01 2.05772E+03 2.11273E+03 2.16774E+03 -9.11489E+02 -1.42966E+03 -1.94783E+03 4.82809E+02 2.49093E+02 1.53777E+01 1.87711E+03 1.92785E+03 1.97859E+03 -7.39165E+02 -1.24793E+03 -1.75669E+03 4.72559E+02 2.40672E+02 8.78528E+00 1.68428E+03 1.72927E+03 1.77426E+03 + 1.05750E+01 -9.13643E+02 -1.53128E+03 -2.14892E+03 5.74374E+02 2.93124E+02 1.18731E+01 2.06239E+03 2.11753E+03 2.17266E+03 -9.13643E+02 -1.43316E+03 -1.95268E+03 4.84066E+02 2.49741E+02 1.54158E+01 1.88177E+03 1.93264E+03 1.98351E+03 -7.41319E+02 -1.25142E+03 -1.76153E+03 4.73816E+02 2.41320E+02 8.82342E+00 1.68895E+03 1.73406E+03 1.77918E+03 + 1.06000E+01 -9.15797E+02 -1.53478E+03 -2.15376E+03 5.75631E+02 2.93771E+02 1.19112E+01 2.06706E+03 2.12232E+03 2.17758E+03 -9.15797E+02 -1.43666E+03 -1.95752E+03 4.85323E+02 2.50388E+02 1.54539E+01 1.88644E+03 1.93743E+03 1.98843E+03 -7.43473E+02 -1.25492E+03 -1.76637E+03 4.75073E+02 2.41967E+02 8.86154E+00 1.69362E+03 1.73886E+03 1.78409E+03 + 1.06250E+01 -9.17951E+02 -1.53828E+03 -2.15860E+03 5.76888E+02 2.94419E+02 1.19493E+01 2.07173E+03 2.12711E+03 2.18250E+03 -9.17951E+02 -1.44016E+03 -1.96236E+03 4.86580E+02 2.51036E+02 1.54921E+01 1.89111E+03 1.94223E+03 1.99334E+03 -7.45627E+02 -1.25842E+03 -1.77121E+03 4.76330E+02 2.42615E+02 8.89965E+00 1.69829E+03 1.74365E+03 1.78901E+03 + 1.06500E+01 -9.20105E+02 -1.54177E+03 -2.16344E+03 5.78145E+02 2.95066E+02 1.19874E+01 2.07640E+03 2.13191E+03 2.18742E+03 -9.20105E+02 -1.44365E+03 -1.96720E+03 4.87837E+02 2.51683E+02 1.55302E+01 1.89578E+03 1.94702E+03 1.99826E+03 -7.47781E+02 -1.26192E+03 -1.77606E+03 4.77587E+02 2.43262E+02 8.93776E+00 1.70296E+03 1.74844E+03 1.79393E+03 + 1.06750E+01 -9.22259E+02 -1.54527E+03 -2.16829E+03 5.79402E+02 2.95714E+02 1.20255E+01 2.08106E+03 2.13670E+03 2.19234E+03 -9.22259E+02 -1.44715E+03 -1.97205E+03 4.89094E+02 2.52331E+02 1.55683E+01 1.90045E+03 1.95181E+03 2.00318E+03 -7.49935E+02 -1.26542E+03 -1.78090E+03 4.78844E+02 2.43910E+02 8.97589E+00 1.70762E+03 1.75324E+03 1.79885E+03 + 1.07000E+01 -9.24413E+02 -1.54877E+03 -2.17313E+03 5.80659E+02 2.96361E+02 1.20637E+01 2.08573E+03 2.14149E+03 2.19726E+03 -9.24413E+02 -1.45065E+03 -1.97689E+03 4.90351E+02 2.52979E+02 1.56064E+01 1.90511E+03 1.95661E+03 2.00810E+03 -7.52089E+02 -1.26892E+03 -1.78574E+03 4.80101E+02 2.44558E+02 9.01402E+00 1.71229E+03 1.75803E+03 1.80377E+03 + 1.07250E+01 -9.26567E+02 -1.55227E+03 -2.17797E+03 5.81916E+02 2.97009E+02 1.21018E+01 2.09040E+03 2.14629E+03 2.20218E+03 -9.26567E+02 -1.45415E+03 -1.98173E+03 4.91608E+02 2.53626E+02 1.56445E+01 1.90978E+03 1.96140E+03 2.01302E+03 -7.54244E+02 -1.27241E+03 -1.79058E+03 4.81358E+02 2.45205E+02 9.05215E+00 1.71696E+03 1.76282E+03 1.80869E+03 + 1.07500E+01 -9.28721E+02 -1.55577E+03 -2.18281E+03 5.83173E+02 2.97657E+02 1.21399E+01 2.09507E+03 2.15108E+03 2.20709E+03 -9.28721E+02 -1.45765E+03 -1.98657E+03 4.92865E+02 2.54274E+02 1.56827E+01 1.91445E+03 1.96619E+03 2.01794E+03 -7.56398E+02 -1.27591E+03 -1.79543E+03 4.82615E+02 2.45853E+02 9.09026E+00 1.72163E+03 1.76762E+03 1.81361E+03 + 1.07750E+01 -9.30875E+02 -1.55927E+03 -2.18766E+03 5.84430E+02 2.98304E+02 1.21781E+01 2.09974E+03 2.15587E+03 2.21201E+03 -9.30875E+02 -1.46115E+03 -1.99141E+03 4.94122E+02 2.54921E+02 1.57208E+01 1.91912E+03 1.97099E+03 2.02286E+03 -7.58552E+02 -1.27941E+03 -1.80027E+03 4.83872E+02 2.46500E+02 9.12837E+00 1.72630E+03 1.77241E+03 1.81852E+03 + 1.08000E+01 -9.33029E+02 -1.56276E+03 -2.19250E+03 5.85687E+02 2.98952E+02 1.22161E+01 2.10440E+03 2.16067E+03 2.21693E+03 -9.33029E+02 -1.46464E+03 -1.99626E+03 4.95379E+02 2.55569E+02 1.57589E+01 1.92379E+03 1.97578E+03 2.02778E+03 -7.60706E+02 -1.28291E+03 -1.80511E+03 4.85129E+02 2.47148E+02 9.16649E+00 1.73096E+03 1.77720E+03 1.82344E+03 + 1.08250E+01 -9.35184E+02 -1.56626E+03 -2.19734E+03 5.86944E+02 2.99599E+02 1.22543E+01 2.10907E+03 2.16546E+03 2.22185E+03 -9.35184E+02 -1.46814E+03 -2.00110E+03 4.96636E+02 2.56216E+02 1.57970E+01 1.92845E+03 1.98057E+03 2.03269E+03 -7.62860E+02 -1.28641E+03 -1.80995E+03 4.86386E+02 2.47795E+02 9.20463E+00 1.73563E+03 1.78200E+03 1.82836E+03 + 1.08500E+01 -9.37338E+02 -1.56976E+03 -2.20218E+03 5.88201E+02 3.00247E+02 1.22924E+01 2.11374E+03 2.17025E+03 2.22677E+03 -9.37338E+02 -1.47164E+03 -2.00594E+03 4.97893E+02 2.56864E+02 1.58351E+01 1.93312E+03 1.98537E+03 2.03761E+03 -7.65014E+02 -1.28990E+03 -1.81479E+03 4.87643E+02 2.48443E+02 9.24275E+00 1.74030E+03 1.78679E+03 1.83328E+03 + 1.08750E+01 -9.39492E+02 -1.57326E+03 -2.20703E+03 5.89458E+02 3.00894E+02 1.23305E+01 2.11841E+03 2.17505E+03 2.23169E+03 -9.39492E+02 -1.47514E+03 -2.01078E+03 4.99150E+02 2.57511E+02 1.58733E+01 1.93779E+03 1.99016E+03 2.04253E+03 -7.67168E+02 -1.29340E+03 -1.81964E+03 4.88900E+02 2.49090E+02 9.28086E+00 1.74497E+03 1.79158E+03 1.83820E+03 + 1.09000E+01 -9.41646E+02 -1.57676E+03 -2.21187E+03 5.90715E+02 3.01542E+02 1.23687E+01 2.12308E+03 2.17984E+03 2.23661E+03 -9.41646E+02 -1.47864E+03 -2.01563E+03 5.00407E+02 2.58159E+02 1.59114E+01 1.94246E+03 1.99495E+03 2.04745E+03 -7.69322E+02 -1.29690E+03 -1.82448E+03 4.90157E+02 2.49738E+02 9.31897E+00 1.74964E+03 1.79638E+03 1.84312E+03 + 1.09250E+01 -9.43800E+02 -1.58026E+03 -2.21671E+03 5.91972E+02 3.02189E+02 1.24067E+01 2.12774E+03 2.18463E+03 2.24152E+03 -9.43800E+02 -1.48213E+03 -2.02047E+03 5.01664E+02 2.58807E+02 1.59495E+01 1.94713E+03 1.99975E+03 2.05237E+03 -7.71476E+02 -1.30040E+03 -1.82932E+03 4.91414E+02 2.50386E+02 9.35709E+00 1.75430E+03 1.80117E+03 1.84804E+03 + 1.09500E+01 -9.45954E+02 -1.58375E+03 -2.22155E+03 5.93229E+02 3.02837E+02 1.24449E+01 2.13241E+03 2.18943E+03 2.24644E+03 -9.45954E+02 -1.48563E+03 -2.02531E+03 5.02921E+02 2.59454E+02 1.59876E+01 1.95179E+03 2.00454E+03 2.05729E+03 -7.73630E+02 -1.30390E+03 -1.83416E+03 4.92671E+02 2.51033E+02 9.39523E+00 1.75897E+03 1.80596E+03 1.85295E+03 + 1.09750E+01 -9.48108E+02 -1.58725E+03 -2.22640E+03 5.94486E+02 3.03484E+02 1.24830E+01 2.13708E+03 2.19422E+03 2.25136E+03 -9.48108E+02 -1.48913E+03 -2.03015E+03 5.04177E+02 2.60102E+02 1.60257E+01 1.95646E+03 2.00933E+03 2.06221E+03 -7.75784E+02 -1.30740E+03 -1.83901E+03 4.93928E+02 2.51681E+02 9.43335E+00 1.76364E+03 1.81076E+03 1.85787E+03 + 1.10000E+01 -1.03642E+03 -1.63256E+03 -2.22869E+03 5.55714E+02 2.86651E+02 1.75887E+01 2.14785E+03 2.20586E+03 2.26387E+03 -8.64100E+02 -1.45082E+03 -2.03754E+03 5.45464E+02 2.78230E+02 1.09963E+01 1.95503E+03 2.00728E+03 2.05954E+03 -8.64100E+02 -1.35270E+03 -1.84130E+03 4.55155E+02 2.34847E+02 1.45390E+01 1.77441E+03 1.82240E+03 1.87038E+03 + 1.10250E+01 -1.03858E+03 -1.63606E+03 -2.23353E+03 5.56970E+02 2.87299E+02 1.76268E+01 2.15252E+03 2.21065E+03 2.26879E+03 -8.66254E+02 -1.45432E+03 -2.04239E+03 5.46721E+02 2.78878E+02 1.10344E+01 1.95970E+03 2.01207E+03 2.06445E+03 -8.66254E+02 -1.35620E+03 -1.84614E+03 4.56412E+02 2.35495E+02 1.45771E+01 1.77908E+03 1.82719E+03 1.87530E+03 + 1.10500E+01 -1.04073E+03 -1.63955E+03 -2.23838E+03 5.58227E+02 2.87946E+02 1.76649E+01 2.15719E+03 2.21545E+03 2.27370E+03 -8.68408E+02 -1.45782E+03 -2.04723E+03 5.47978E+02 2.79525E+02 1.10725E+01 1.96436E+03 2.01687E+03 2.06937E+03 -8.68408E+02 -1.35970E+03 -1.85099E+03 4.57669E+02 2.36142E+02 1.46153E+01 1.78375E+03 1.83198E+03 1.88022E+03 + 1.10750E+01 -1.04289E+03 -1.64305E+03 -2.24322E+03 5.59484E+02 2.88594E+02 1.77031E+01 2.16185E+03 2.22024E+03 2.27862E+03 -8.70562E+02 -1.46132E+03 -2.05207E+03 5.49235E+02 2.80173E+02 1.11107E+01 1.96903E+03 2.02166E+03 2.07429E+03 -8.70562E+02 -1.36320E+03 -1.85583E+03 4.58926E+02 2.36790E+02 1.46534E+01 1.78841E+03 1.83678E+03 1.88514E+03 + 1.11000E+01 -1.04504E+03 -1.64655E+03 -2.24806E+03 5.60741E+02 2.89241E+02 1.77412E+01 2.16652E+03 2.22503E+03 2.28354E+03 -8.72716E+02 -1.46481E+03 -2.05691E+03 5.50492E+02 2.80820E+02 1.11488E+01 1.97370E+03 2.02645E+03 2.07921E+03 -8.72716E+02 -1.36669E+03 -1.86067E+03 4.60183E+02 2.37437E+02 1.46915E+01 1.79308E+03 1.84157E+03 1.89005E+03 + 1.11250E+01 -1.04719E+03 -1.65005E+03 -2.25290E+03 5.61998E+02 2.89889E+02 1.77793E+01 2.17119E+03 2.22983E+03 2.28846E+03 -8.74870E+02 -1.46831E+03 -2.06176E+03 5.51749E+02 2.81468E+02 1.11869E+01 1.97837E+03 2.03125E+03 2.08413E+03 -8.74870E+02 -1.37019E+03 -1.86551E+03 4.61440E+02 2.38085E+02 1.47296E+01 1.79775E+03 1.84636E+03 1.89497E+03 + 1.11500E+01 -1.04935E+03 -1.65355E+03 -2.25774E+03 5.63255E+02 2.90536E+02 1.78174E+01 2.17586E+03 2.23462E+03 2.29338E+03 -8.77024E+02 -1.47181E+03 -2.06660E+03 5.53006E+02 2.82115E+02 1.12250E+01 1.98304E+03 2.03604E+03 2.08905E+03 -8.77024E+02 -1.37369E+03 -1.87036E+03 4.62697E+02 2.38733E+02 1.47677E+01 1.80242E+03 1.85116E+03 1.89989E+03 + 1.11750E+01 -1.05150E+03 -1.65704E+03 -2.26259E+03 5.64512E+02 2.91184E+02 1.78555E+01 2.18053E+03 2.23941E+03 2.29830E+03 -8.79178E+02 -1.47531E+03 -2.07144E+03 5.54263E+02 2.82763E+02 1.12631E+01 1.98770E+03 2.04083E+03 2.09397E+03 -8.79178E+02 -1.37719E+03 -1.87520E+03 4.63954E+02 2.39380E+02 1.48059E+01 1.80709E+03 1.85595E+03 1.90481E+03 + 1.12000E+01 -1.05366E+03 -1.66054E+03 -2.26743E+03 5.65769E+02 2.91831E+02 1.78937E+01 2.18519E+03 2.24421E+03 2.30322E+03 -8.81332E+02 -1.47881E+03 -2.07628E+03 5.55520E+02 2.83410E+02 1.13013E+01 1.99237E+03 2.04563E+03 2.09888E+03 -8.81332E+02 -1.38069E+03 -1.88004E+03 4.65211E+02 2.40028E+02 1.48440E+01 1.81175E+03 1.86074E+03 1.90973E+03 + 1.12250E+01 -1.05581E+03 -1.66404E+03 -2.27227E+03 5.67026E+02 2.92479E+02 1.79318E+01 2.18986E+03 2.24900E+03 2.30814E+03 -8.83486E+02 -1.48231E+03 -2.08112E+03 5.56777E+02 2.84058E+02 1.13394E+01 1.99704E+03 2.05042E+03 2.10380E+03 -8.83486E+02 -1.38418E+03 -1.88488E+03 4.66468E+02 2.40675E+02 1.48821E+01 1.81642E+03 1.86554E+03 1.91465E+03 + 1.12500E+01 -1.05796E+03 -1.66754E+03 -2.27711E+03 5.68283E+02 2.93127E+02 1.79699E+01 2.19453E+03 2.25379E+03 2.31305E+03 -8.85640E+02 -1.48580E+03 -2.08597E+03 5.58034E+02 2.84706E+02 1.13775E+01 2.00171E+03 2.05521E+03 2.10872E+03 -8.85640E+02 -1.38768E+03 -1.88973E+03 4.67725E+02 2.41323E+02 1.49202E+01 1.82109E+03 1.87033E+03 1.91957E+03 + 1.12750E+01 -1.06012E+03 -1.67104E+03 -2.28196E+03 5.69540E+02 2.93774E+02 1.80080E+01 2.19920E+03 2.25859E+03 2.31797E+03 -8.87794E+02 -1.48930E+03 -2.09081E+03 5.59291E+02 2.85353E+02 1.14156E+01 2.00638E+03 2.06001E+03 2.11364E+03 -8.87794E+02 -1.39118E+03 -1.89457E+03 4.68982E+02 2.41970E+02 1.49584E+01 1.82576E+03 1.87512E+03 1.92448E+03 + 1.13000E+01 -1.06227E+03 -1.67454E+03 -2.28680E+03 5.70797E+02 2.94422E+02 1.80461E+01 2.20387E+03 2.26338E+03 2.32289E+03 -8.89949E+02 -1.49280E+03 -2.09565E+03 5.60548E+02 2.86001E+02 1.14537E+01 2.01104E+03 2.06480E+03 2.11856E+03 -8.89949E+02 -1.39468E+03 -1.89941E+03 4.70239E+02 2.42618E+02 1.49965E+01 1.83043E+03 1.87992E+03 1.92940E+03 + 1.13250E+01 -1.06443E+03 -1.67803E+03 -2.29164E+03 5.72054E+02 2.95069E+02 1.80843E+01 2.20853E+03 2.26817E+03 2.32781E+03 -8.92103E+02 -1.49630E+03 -2.10049E+03 5.61805E+02 2.86648E+02 1.14919E+01 2.01571E+03 2.06959E+03 2.12348E+03 -8.92103E+02 -1.39818E+03 -1.90425E+03 4.71496E+02 2.43265E+02 1.50346E+01 1.83509E+03 1.88471E+03 1.93432E+03 + 1.13500E+01 -1.06658E+03 -1.68153E+03 -2.29648E+03 5.73311E+02 2.95717E+02 1.81224E+01 2.21320E+03 2.27297E+03 2.33273E+03 -8.94257E+02 -1.49980E+03 -2.10534E+03 5.63062E+02 2.87296E+02 1.15300E+01 2.02038E+03 2.07439E+03 2.12840E+03 -8.94257E+02 -1.40168E+03 -1.90909E+03 4.72753E+02 2.43913E+02 1.50727E+01 1.83976E+03 1.88950E+03 1.93924E+03 + 1.13750E+01 -1.06873E+03 -1.68503E+03 -2.30133E+03 5.74568E+02 2.96364E+02 1.81605E+01 2.21787E+03 2.27776E+03 2.33765E+03 -8.96411E+02 -1.50329E+03 -2.11018E+03 5.64318E+02 2.87943E+02 1.15681E+01 2.02505E+03 2.07918E+03 2.13331E+03 -8.96411E+02 -1.40517E+03 -1.91394E+03 4.74010E+02 2.44560E+02 1.51108E+01 1.84443E+03 1.89429E+03 1.94416E+03 + 1.14000E+01 -1.07089E+03 -1.68853E+03 -2.30617E+03 5.75825E+02 2.97012E+02 1.81986E+01 2.22254E+03 2.28255E+03 2.34257E+03 -8.98565E+02 -1.50679E+03 -2.11502E+03 5.65576E+02 2.88591E+02 1.16062E+01 2.02972E+03 2.08397E+03 2.13823E+03 -8.98565E+02 -1.40867E+03 -1.91878E+03 4.75267E+02 2.45208E+02 1.51490E+01 1.84910E+03 1.89909E+03 1.94908E+03 + 1.14250E+01 -1.07304E+03 -1.69203E+03 -2.31101E+03 5.77082E+02 2.97659E+02 1.82367E+01 2.22721E+03 2.28735E+03 2.34748E+03 -9.00719E+02 -1.51029E+03 -2.11986E+03 5.66832E+02 2.89238E+02 1.16443E+01 2.03438E+03 2.08877E+03 2.14315E+03 -9.00719E+02 -1.41217E+03 -1.92362E+03 4.76524E+02 2.45856E+02 1.51871E+01 1.85377E+03 1.90388E+03 1.95400E+03 + 1.14500E+01 -1.07520E+03 -1.69552E+03 -2.31585E+03 5.78339E+02 2.98307E+02 1.82749E+01 2.23187E+03 2.29214E+03 2.35240E+03 -9.02873E+02 -1.51379E+03 -2.12471E+03 5.68089E+02 2.89886E+02 1.16825E+01 2.03905E+03 2.09356E+03 2.14807E+03 -9.02873E+02 -1.41567E+03 -1.92846E+03 4.77781E+02 2.46503E+02 1.52252E+01 1.85843E+03 1.90867E+03 1.95891E+03 + 1.14750E+01 -1.07735E+03 -1.69902E+03 -2.32070E+03 5.79596E+02 2.98954E+02 1.83130E+01 2.23654E+03 2.29693E+03 2.35732E+03 -9.05027E+02 -1.51729E+03 -2.12955E+03 5.69346E+02 2.90534E+02 1.17206E+01 2.04372E+03 2.09835E+03 2.15299E+03 -9.05027E+02 -1.41917E+03 -1.93331E+03 4.79038E+02 2.47151E+02 1.52633E+01 1.86310E+03 1.91347E+03 1.96383E+03 + 1.15000E+01 -1.07950E+03 -1.70252E+03 -2.32554E+03 5.80853E+02 2.99602E+02 1.83511E+01 2.24121E+03 2.30173E+03 2.36224E+03 -9.07181E+02 -1.52079E+03 -2.13439E+03 5.70603E+02 2.91181E+02 1.17587E+01 2.04839E+03 2.10315E+03 2.15791E+03 -9.07181E+02 -1.42266E+03 -1.93815E+03 4.80295E+02 2.47798E+02 1.53015E+01 1.86777E+03 1.91826E+03 1.96875E+03 + 1.15250E+01 -1.08166E+03 -1.70602E+03 -2.33038E+03 5.82110E+02 3.00250E+02 1.83892E+01 2.24588E+03 2.30652E+03 2.36716E+03 -9.09335E+02 -1.52428E+03 -2.13923E+03 5.71860E+02 2.91829E+02 1.17968E+01 2.05306E+03 2.10794E+03 2.16283E+03 -9.09335E+02 -1.42616E+03 -1.94299E+03 4.81552E+02 2.48446E+02 1.53396E+01 1.87244E+03 1.92305E+03 1.97367E+03 + 1.15500E+01 -1.08381E+03 -1.70952E+03 -2.33522E+03 5.83367E+02 3.00897E+02 1.84273E+01 2.25055E+03 2.31131E+03 2.37208E+03 -9.11489E+02 -1.52778E+03 -2.14408E+03 5.73117E+02 2.92476E+02 1.18349E+01 2.05772E+03 2.11273E+03 2.16774E+03 -9.11489E+02 -1.42966E+03 -1.94783E+03 4.82809E+02 2.49093E+02 1.53777E+01 1.87711E+03 1.92785E+03 1.97859E+03 + 1.15750E+01 -1.08597E+03 -1.71302E+03 -2.34006E+03 5.84624E+02 3.01545E+02 1.84655E+01 2.25521E+03 2.31610E+03 2.37700E+03 -9.13643E+02 -1.53128E+03 -2.14892E+03 5.74374E+02 2.93124E+02 1.18731E+01 2.06239E+03 2.11753E+03 2.17266E+03 -9.13643E+02 -1.43316E+03 -1.95268E+03 4.84066E+02 2.49741E+02 1.54158E+01 1.88177E+03 1.93264E+03 1.98351E+03 + 1.16000E+01 -1.08812E+03 -1.71651E+03 -2.34491E+03 5.85881E+02 3.02192E+02 1.85036E+01 2.25988E+03 2.32090E+03 2.38191E+03 -9.15797E+02 -1.53478E+03 -2.15376E+03 5.75631E+02 2.93771E+02 1.19112E+01 2.06706E+03 2.12232E+03 2.17758E+03 -9.15797E+02 -1.43666E+03 -1.95752E+03 4.85323E+02 2.50388E+02 1.54539E+01 1.88644E+03 1.93743E+03 1.98843E+03 + 1.16250E+01 -1.09028E+03 -1.72001E+03 -2.34975E+03 5.87138E+02 3.02840E+02 1.85417E+01 2.26455E+03 2.32569E+03 2.38683E+03 -9.17951E+02 -1.53828E+03 -2.15860E+03 5.76888E+02 2.94419E+02 1.19493E+01 2.07173E+03 2.12711E+03 2.18250E+03 -9.17951E+02 -1.44016E+03 -1.96236E+03 4.86580E+02 2.51036E+02 1.54921E+01 1.89111E+03 1.94223E+03 1.99334E+03 + 1.16500E+01 -1.09243E+03 -1.72351E+03 -2.35459E+03 5.88395E+02 3.03487E+02 1.85799E+01 2.26922E+03 2.33048E+03 2.39175E+03 -9.20105E+02 -1.54177E+03 -2.16344E+03 5.78145E+02 2.95066E+02 1.19874E+01 2.07640E+03 2.13191E+03 2.18742E+03 -9.20105E+02 -1.44365E+03 -1.96720E+03 4.87837E+02 2.51683E+02 1.55302E+01 1.89578E+03 1.94702E+03 1.99826E+03 + 1.16750E+01 -1.09458E+03 -1.72701E+03 -2.35943E+03 5.89652E+02 3.04135E+02 1.86179E+01 2.27389E+03 2.33528E+03 2.39667E+03 -9.22259E+02 -1.54527E+03 -2.16829E+03 5.79402E+02 2.95714E+02 1.20255E+01 2.08106E+03 2.13670E+03 2.19234E+03 -9.22259E+02 -1.44715E+03 -1.97205E+03 4.89094E+02 2.52331E+02 1.55683E+01 1.90045E+03 1.95181E+03 2.00318E+03 + 1.17000E+01 -1.09674E+03 -1.73051E+03 -2.36428E+03 5.90909E+02 3.04782E+02 1.86561E+01 2.27855E+03 2.34007E+03 2.40159E+03 -9.24413E+02 -1.54877E+03 -2.17313E+03 5.80659E+02 2.96361E+02 1.20637E+01 2.08573E+03 2.14149E+03 2.19726E+03 -9.24413E+02 -1.45065E+03 -1.97689E+03 4.90351E+02 2.52979E+02 1.56064E+01 1.90511E+03 1.95661E+03 2.00810E+03 + 1.17250E+01 -1.09889E+03 -1.73400E+03 -2.36912E+03 5.92166E+02 3.05430E+02 1.86942E+01 2.28322E+03 2.34486E+03 2.40651E+03 -9.26567E+02 -1.55227E+03 -2.17797E+03 5.81916E+02 2.97009E+02 1.21018E+01 2.09040E+03 2.14629E+03 2.20218E+03 -9.26567E+02 -1.45415E+03 -1.98173E+03 4.91608E+02 2.53626E+02 1.56445E+01 1.90978E+03 1.96140E+03 2.01302E+03 + 1.17500E+01 -1.10105E+03 -1.73750E+03 -2.37396E+03 5.93423E+02 3.06078E+02 1.87323E+01 2.28789E+03 2.34966E+03 2.41143E+03 -9.28721E+02 -1.55577E+03 -2.18281E+03 5.83173E+02 2.97657E+02 1.21399E+01 2.09507E+03 2.15108E+03 2.20709E+03 -9.28721E+02 -1.45765E+03 -1.98657E+03 4.92865E+02 2.54274E+02 1.56827E+01 1.91445E+03 1.96619E+03 2.01794E+03 + 1.17750E+01 -1.10320E+03 -1.74100E+03 -2.37880E+03 5.94680E+02 3.06725E+02 1.87705E+01 2.29256E+03 2.35445E+03 2.41634E+03 -9.30875E+02 -1.55927E+03 -2.18766E+03 5.84430E+02 2.98304E+02 1.21781E+01 2.09974E+03 2.15587E+03 2.21201E+03 -9.30875E+02 -1.46115E+03 -1.99141E+03 4.94122E+02 2.54921E+02 1.57208E+01 1.91912E+03 1.97099E+03 2.02286E+03 + 1.18000E+01 -1.10535E+03 -1.74450E+03 -2.38365E+03 5.95937E+02 3.07373E+02 1.88085E+01 2.29723E+03 2.35924E+03 2.42126E+03 -9.33029E+02 -1.56276E+03 -2.19250E+03 5.85687E+02 2.98952E+02 1.22161E+01 2.10440E+03 2.16067E+03 2.21693E+03 -9.33029E+02 -1.46464E+03 -1.99626E+03 4.95379E+02 2.55569E+02 1.57589E+01 1.92379E+03 1.97578E+03 2.02778E+03 + 1.18250E+01 -1.10751E+03 -1.74800E+03 -2.38849E+03 5.97194E+02 3.08020E+02 1.88467E+01 2.30189E+03 2.36404E+03 2.42618E+03 -9.35184E+02 -1.56626E+03 -2.19734E+03 5.86944E+02 2.99599E+02 1.22543E+01 2.10907E+03 2.16546E+03 2.22185E+03 -9.35184E+02 -1.46814E+03 -2.00110E+03 4.96636E+02 2.56216E+02 1.57970E+01 1.92845E+03 1.98057E+03 2.03269E+03 + 1.18500E+01 -1.10966E+03 -1.75150E+03 -2.39333E+03 5.98451E+02 3.08668E+02 1.88848E+01 2.30656E+03 2.36883E+03 2.43110E+03 -9.37338E+02 -1.56976E+03 -2.20218E+03 5.88201E+02 3.00247E+02 1.22924E+01 2.11374E+03 2.17025E+03 2.22677E+03 -9.37338E+02 -1.47164E+03 -2.00594E+03 4.97893E+02 2.56864E+02 1.58351E+01 1.93312E+03 1.98537E+03 2.03761E+03 + 1.18750E+01 -1.11182E+03 -1.75499E+03 -2.39817E+03 5.99708E+02 3.09315E+02 1.89229E+01 2.31123E+03 2.37362E+03 2.43602E+03 -9.39492E+02 -1.57326E+03 -2.20703E+03 5.89458E+02 3.00894E+02 1.23305E+01 2.11841E+03 2.17505E+03 2.23169E+03 -9.39492E+02 -1.47514E+03 -2.01078E+03 4.99150E+02 2.57511E+02 1.58733E+01 1.93779E+03 1.99016E+03 2.04253E+03 + 1.19000E+01 -1.11397E+03 -1.75849E+03 -2.40301E+03 6.00965E+02 3.09963E+02 1.89611E+01 2.31590E+03 2.37842E+03 2.44094E+03 -9.41646E+02 -1.57676E+03 -2.21187E+03 5.90715E+02 3.01542E+02 1.23687E+01 2.12308E+03 2.17984E+03 2.23661E+03 -9.41646E+02 -1.47864E+03 -2.01563E+03 5.00407E+02 2.58159E+02 1.59114E+01 1.94246E+03 1.99495E+03 2.04745E+03 + 1.19250E+01 -1.11612E+03 -1.76199E+03 -2.40786E+03 6.02222E+02 3.10610E+02 1.89992E+01 2.32057E+03 2.38321E+03 2.44586E+03 -9.43800E+02 -1.58026E+03 -2.21671E+03 5.91972E+02 3.02189E+02 1.24067E+01 2.12774E+03 2.18463E+03 2.24152E+03 -9.43800E+02 -1.48213E+03 -2.02047E+03 5.01664E+02 2.58807E+02 1.59495E+01 1.94713E+03 1.99975E+03 2.05237E+03 + 1.19500E+01 -1.11828E+03 -1.76549E+03 -2.41270E+03 6.03479E+02 3.11258E+02 1.90373E+01 2.32523E+03 2.38800E+03 2.45077E+03 -9.45954E+02 -1.58375E+03 -2.22155E+03 5.93229E+02 3.02837E+02 1.24449E+01 2.13241E+03 2.18943E+03 2.24644E+03 -9.45954E+02 -1.48563E+03 -2.02531E+03 5.02921E+02 2.59454E+02 1.59876E+01 1.95179E+03 2.00454E+03 2.05729E+03 + 1.19750E+01 -1.12043E+03 -1.76899E+03 -2.41754E+03 6.04736E+02 3.11905E+02 1.90754E+01 2.32990E+03 2.39280E+03 2.45569E+03 -9.48108E+02 -1.58725E+03 -2.22640E+03 5.94486E+02 3.03484E+02 1.24830E+01 2.13708E+03 2.19422E+03 2.25136E+03 -9.48108E+02 -1.48913E+03 -2.03015E+03 5.04177E+02 2.60102E+02 1.60257E+01 1.95646E+03 2.00933E+03 2.06221E+03 + 1.20000E+01 -1.03642E+03 -1.73068E+03 -2.42493E+03 6.46022E+02 3.30034E+02 1.40459E+01 2.32847E+03 2.39075E+03 2.45302E+03 -1.03642E+03 -1.63256E+03 -2.22869E+03 5.55714E+02 2.86651E+02 1.75887E+01 2.14785E+03 2.20586E+03 2.26387E+03 -8.64100E+02 -1.45082E+03 -2.03754E+03 5.45464E+02 2.78230E+02 1.09963E+01 1.95503E+03 2.00728E+03 2.05954E+03 + 1.20250E+01 -1.03858E+03 -1.73418E+03 -2.42977E+03 6.47279E+02 3.30681E+02 1.40841E+01 2.33314E+03 2.39554E+03 2.45794E+03 -1.03858E+03 -1.63606E+03 -2.23353E+03 5.56970E+02 2.87299E+02 1.76268E+01 2.15252E+03 2.21065E+03 2.26879E+03 -8.66254E+02 -1.45432E+03 -2.04239E+03 5.46721E+02 2.78878E+02 1.10344E+01 1.95970E+03 2.01207E+03 2.06445E+03 + 1.20500E+01 -1.04073E+03 -1.73767E+03 -2.43462E+03 6.48536E+02 3.31329E+02 1.41222E+01 2.33780E+03 2.40033E+03 2.46286E+03 -1.04073E+03 -1.63955E+03 -2.23838E+03 5.58227E+02 2.87946E+02 1.76649E+01 2.15719E+03 2.21545E+03 2.27370E+03 -8.68408E+02 -1.45782E+03 -2.04723E+03 5.47978E+02 2.79525E+02 1.10725E+01 1.96436E+03 2.01687E+03 2.06937E+03 + 1.20750E+01 -1.04289E+03 -1.74117E+03 -2.43946E+03 6.49793E+02 3.31977E+02 1.41603E+01 2.34247E+03 2.40513E+03 2.46778E+03 -1.04289E+03 -1.64305E+03 -2.24322E+03 5.59484E+02 2.88594E+02 1.77031E+01 2.16185E+03 2.22024E+03 2.27862E+03 -8.70562E+02 -1.46132E+03 -2.05207E+03 5.49235E+02 2.80173E+02 1.11107E+01 1.96903E+03 2.02166E+03 2.07429E+03 + 1.21000E+01 -1.04504E+03 -1.74467E+03 -2.44430E+03 6.51050E+02 3.32624E+02 1.41984E+01 2.34714E+03 2.40992E+03 2.47270E+03 -1.04504E+03 -1.64655E+03 -2.24806E+03 5.60741E+02 2.89241E+02 1.77412E+01 2.16652E+03 2.22503E+03 2.28354E+03 -8.72716E+02 -1.46481E+03 -2.05691E+03 5.50492E+02 2.80820E+02 1.11488E+01 1.97370E+03 2.02645E+03 2.07921E+03 + 1.21250E+01 -1.04719E+03 -1.74817E+03 -2.44914E+03 6.52307E+02 3.33272E+02 1.42366E+01 2.35181E+03 2.41471E+03 2.47762E+03 -1.04719E+03 -1.65005E+03 -2.25290E+03 5.61998E+02 2.89889E+02 1.77793E+01 2.17119E+03 2.22983E+03 2.28846E+03 -8.74870E+02 -1.46831E+03 -2.06176E+03 5.51749E+02 2.81468E+02 1.11869E+01 1.97837E+03 2.03125E+03 2.08413E+03 + 1.21500E+01 -1.04935E+03 -1.75167E+03 -2.45399E+03 6.53564E+02 3.33919E+02 1.42747E+01 2.35648E+03 2.41951E+03 2.48253E+03 -1.04935E+03 -1.65355E+03 -2.25774E+03 5.63255E+02 2.90536E+02 1.78174E+01 2.17586E+03 2.23462E+03 2.29338E+03 -8.77024E+02 -1.47181E+03 -2.06660E+03 5.53006E+02 2.82115E+02 1.12250E+01 1.98304E+03 2.03604E+03 2.08905E+03 + 1.21750E+01 -1.05150E+03 -1.75517E+03 -2.45883E+03 6.54821E+02 3.34567E+02 1.43128E+01 2.36114E+03 2.42430E+03 2.48745E+03 -1.05150E+03 -1.65704E+03 -2.26259E+03 5.64512E+02 2.91184E+02 1.78555E+01 2.18053E+03 2.23941E+03 2.29830E+03 -8.79178E+02 -1.47531E+03 -2.07144E+03 5.54263E+02 2.82763E+02 1.12631E+01 1.98770E+03 2.04083E+03 2.09397E+03 + 1.22000E+01 -1.05366E+03 -1.75866E+03 -2.46367E+03 6.56078E+02 3.35214E+02 1.43509E+01 2.36581E+03 2.42909E+03 2.49237E+03 -1.05366E+03 -1.66054E+03 -2.26743E+03 5.65769E+02 2.91831E+02 1.78937E+01 2.18519E+03 2.24421E+03 2.30322E+03 -8.81332E+02 -1.47881E+03 -2.07628E+03 5.55520E+02 2.83410E+02 1.13013E+01 1.99237E+03 2.04563E+03 2.09888E+03 + 1.22250E+01 -1.05581E+03 -1.76216E+03 -2.46851E+03 6.57335E+02 3.35862E+02 1.43890E+01 2.37048E+03 2.43389E+03 2.49729E+03 -1.05581E+03 -1.66404E+03 -2.27227E+03 5.67026E+02 2.92479E+02 1.79318E+01 2.18986E+03 2.24900E+03 2.30814E+03 -8.83486E+02 -1.48231E+03 -2.08112E+03 5.56777E+02 2.84058E+02 1.13394E+01 1.99704E+03 2.05042E+03 2.10380E+03 + 1.22500E+01 -1.05796E+03 -1.76566E+03 -2.47336E+03 6.58592E+02 3.36509E+02 1.44272E+01 2.37515E+03 2.43868E+03 2.50221E+03 -1.05796E+03 -1.66754E+03 -2.27711E+03 5.68283E+02 2.93127E+02 1.79699E+01 2.19453E+03 2.25379E+03 2.31305E+03 -8.85640E+02 -1.48580E+03 -2.08597E+03 5.58034E+02 2.84706E+02 1.13775E+01 2.00171E+03 2.05521E+03 2.10872E+03 + 1.22750E+01 -1.06012E+03 -1.76916E+03 -2.47820E+03 6.59849E+02 3.37157E+02 1.44653E+01 2.37982E+03 2.44347E+03 2.50713E+03 -1.06012E+03 -1.67104E+03 -2.28196E+03 5.69540E+02 2.93774E+02 1.80080E+01 2.19920E+03 2.25859E+03 2.31797E+03 -8.87794E+02 -1.48930E+03 -2.09081E+03 5.59291E+02 2.85353E+02 1.14156E+01 2.00638E+03 2.06001E+03 2.11364E+03 + 1.23000E+01 -1.06227E+03 -1.77266E+03 -2.48304E+03 6.61106E+02 3.37805E+02 1.45034E+01 2.38448E+03 2.44827E+03 2.51205E+03 -1.06227E+03 -1.67454E+03 -2.28680E+03 5.70797E+02 2.94422E+02 1.80461E+01 2.20387E+03 2.26338E+03 2.32289E+03 -8.89949E+02 -1.49280E+03 -2.09565E+03 5.60548E+02 2.86001E+02 1.14537E+01 2.01104E+03 2.06480E+03 2.11856E+03 + 1.23250E+01 -1.06443E+03 -1.77615E+03 -2.48788E+03 6.62363E+02 3.38452E+02 1.45415E+01 2.38915E+03 2.45306E+03 2.51697E+03 -1.06443E+03 -1.67803E+03 -2.29164E+03 5.72054E+02 2.95069E+02 1.80843E+01 2.20853E+03 2.26817E+03 2.32781E+03 -8.92103E+02 -1.49630E+03 -2.10049E+03 5.61805E+02 2.86648E+02 1.14919E+01 2.01571E+03 2.06959E+03 2.12348E+03 + 1.23500E+01 -1.06658E+03 -1.77965E+03 -2.49272E+03 6.63620E+02 3.39100E+02 1.45796E+01 2.39382E+03 2.45785E+03 2.52188E+03 -1.06658E+03 -1.68153E+03 -2.29648E+03 5.73311E+02 2.95717E+02 1.81224E+01 2.21320E+03 2.27297E+03 2.33273E+03 -8.94257E+02 -1.49980E+03 -2.10534E+03 5.63062E+02 2.87296E+02 1.15300E+01 2.02038E+03 2.07439E+03 2.12840E+03 + 1.23750E+01 -1.06873E+03 -1.78315E+03 -2.49757E+03 6.64877E+02 3.39747E+02 1.46178E+01 2.39849E+03 2.46265E+03 2.52680E+03 -1.06873E+03 -1.68503E+03 -2.30133E+03 5.74568E+02 2.96364E+02 1.81605E+01 2.21787E+03 2.27776E+03 2.33765E+03 -8.96411E+02 -1.50329E+03 -2.11018E+03 5.64318E+02 2.87943E+02 1.15681E+01 2.02505E+03 2.07918E+03 2.13331E+03 + 1.24000E+01 -1.07089E+03 -1.78665E+03 -2.50241E+03 6.66134E+02 3.40395E+02 1.46559E+01 2.40316E+03 2.46744E+03 2.53172E+03 -1.07089E+03 -1.68853E+03 -2.30617E+03 5.75825E+02 2.97012E+02 1.81986E+01 2.22254E+03 2.28255E+03 2.34257E+03 -8.98565E+02 -1.50679E+03 -2.11502E+03 5.65576E+02 2.88591E+02 1.16062E+01 2.02972E+03 2.08397E+03 2.13823E+03 + 1.24250E+01 -1.07304E+03 -1.79015E+03 -2.50725E+03 6.67391E+02 3.41042E+02 1.46940E+01 2.40782E+03 2.47223E+03 2.53664E+03 -1.07304E+03 -1.69203E+03 -2.31101E+03 5.77082E+02 2.97659E+02 1.82367E+01 2.22721E+03 2.28735E+03 2.34748E+03 -9.00719E+02 -1.51029E+03 -2.11986E+03 5.66832E+02 2.89238E+02 1.16443E+01 2.03438E+03 2.08877E+03 2.14315E+03 + 1.24500E+01 -1.07520E+03 -1.79365E+03 -2.51209E+03 6.68647E+02 3.41690E+02 1.47321E+01 2.41249E+03 2.47702E+03 2.54156E+03 -1.07520E+03 -1.69552E+03 -2.31585E+03 5.78339E+02 2.98307E+02 1.82749E+01 2.23187E+03 2.29214E+03 2.35240E+03 -9.02873E+02 -1.51379E+03 -2.12471E+03 5.68089E+02 2.89886E+02 1.16825E+01 2.03905E+03 2.09356E+03 2.14807E+03 + 1.24750E+01 -1.07735E+03 -1.79714E+03 -2.51694E+03 6.69904E+02 3.42337E+02 1.47702E+01 2.41716E+03 2.48182E+03 2.54648E+03 -1.07735E+03 -1.69902E+03 -2.32070E+03 5.79596E+02 2.98954E+02 1.83130E+01 2.23654E+03 2.29693E+03 2.35732E+03 -9.05027E+02 -1.51729E+03 -2.12955E+03 5.69346E+02 2.90534E+02 1.17206E+01 2.04372E+03 2.09835E+03 2.15299E+03 + 1.25000E+01 -1.07950E+03 -1.80064E+03 -2.52178E+03 6.71161E+02 3.42985E+02 1.48084E+01 2.42183E+03 2.48661E+03 2.55140E+03 -1.07950E+03 -1.70252E+03 -2.32554E+03 5.80853E+02 2.99602E+02 1.83511E+01 2.24121E+03 2.30173E+03 2.36224E+03 -9.07181E+02 -1.52079E+03 -2.13439E+03 5.70603E+02 2.91181E+02 1.17587E+01 2.04839E+03 2.10315E+03 2.15791E+03 + 1.25250E+01 -1.08166E+03 -1.80414E+03 -2.52662E+03 6.72418E+02 3.43632E+02 1.48465E+01 2.42650E+03 2.49140E+03 2.55631E+03 -1.08166E+03 -1.70602E+03 -2.33038E+03 5.82110E+02 3.00250E+02 1.83892E+01 2.24588E+03 2.30652E+03 2.36716E+03 -9.09335E+02 -1.52428E+03 -2.13923E+03 5.71860E+02 2.91829E+02 1.17968E+01 2.05306E+03 2.10794E+03 2.16283E+03 + 1.25500E+01 -1.08381E+03 -1.80764E+03 -2.53146E+03 6.73675E+02 3.44280E+02 1.48846E+01 2.43116E+03 2.49620E+03 2.56123E+03 -1.08381E+03 -1.70952E+03 -2.33522E+03 5.83367E+02 3.00897E+02 1.84273E+01 2.25055E+03 2.31131E+03 2.37208E+03 -9.11489E+02 -1.52778E+03 -2.14408E+03 5.73117E+02 2.92476E+02 1.18349E+01 2.05772E+03 2.11273E+03 2.16774E+03 + 1.25750E+01 -1.08597E+03 -1.81114E+03 -2.53631E+03 6.74932E+02 3.44928E+02 1.49227E+01 2.43583E+03 2.50099E+03 2.56615E+03 -1.08597E+03 -1.71302E+03 -2.34006E+03 5.84624E+02 3.01545E+02 1.84655E+01 2.25521E+03 2.31610E+03 2.37700E+03 -9.13643E+02 -1.53128E+03 -2.14892E+03 5.74374E+02 2.93124E+02 1.18731E+01 2.06239E+03 2.11753E+03 2.17266E+03 + 1.26000E+01 -1.08812E+03 -1.81463E+03 -2.54115E+03 6.76189E+02 3.45575E+02 1.49608E+01 2.44050E+03 2.50578E+03 2.57107E+03 -1.08812E+03 -1.71651E+03 -2.34491E+03 5.85881E+02 3.02192E+02 1.85036E+01 2.25988E+03 2.32090E+03 2.38191E+03 -9.15797E+02 -1.53478E+03 -2.15376E+03 5.75631E+02 2.93771E+02 1.19112E+01 2.06706E+03 2.12232E+03 2.17758E+03 + 1.26250E+01 -1.09028E+03 -1.81813E+03 -2.54599E+03 6.77446E+02 3.46223E+02 1.49990E+01 2.44517E+03 2.51058E+03 2.57599E+03 -1.09028E+03 -1.72001E+03 -2.34975E+03 5.87138E+02 3.02840E+02 1.85417E+01 2.26455E+03 2.32569E+03 2.38683E+03 -9.17951E+02 -1.53828E+03 -2.15860E+03 5.76888E+02 2.94419E+02 1.19493E+01 2.07173E+03 2.12711E+03 2.18250E+03 + 1.26500E+01 -1.09243E+03 -1.82163E+03 -2.55083E+03 6.78703E+02 3.46870E+02 1.50371E+01 2.44984E+03 2.51537E+03 2.58091E+03 -1.09243E+03 -1.72351E+03 -2.35459E+03 5.88395E+02 3.03487E+02 1.85799E+01 2.26922E+03 2.33048E+03 2.39175E+03 -9.20105E+02 -1.54177E+03 -2.16344E+03 5.78145E+02 2.95066E+02 1.19874E+01 2.07640E+03 2.13191E+03 2.18742E+03 + 1.26750E+01 -1.09458E+03 -1.82513E+03 -2.55568E+03 6.79960E+02 3.47518E+02 1.50752E+01 2.45450E+03 2.52016E+03 2.58583E+03 -1.09458E+03 -1.72701E+03 -2.35943E+03 5.89652E+02 3.04135E+02 1.86179E+01 2.27389E+03 2.33528E+03 2.39667E+03 -9.22259E+02 -1.54527E+03 -2.16829E+03 5.79402E+02 2.95714E+02 1.20255E+01 2.08106E+03 2.13670E+03 2.19234E+03 + 1.27000E+01 -1.09674E+03 -1.82863E+03 -2.56052E+03 6.81217E+02 3.48165E+02 1.51133E+01 2.45917E+03 2.52496E+03 2.59074E+03 -1.09674E+03 -1.73051E+03 -2.36428E+03 5.90909E+02 3.04782E+02 1.86561E+01 2.27855E+03 2.34007E+03 2.40159E+03 -9.24413E+02 -1.54877E+03 -2.17313E+03 5.80659E+02 2.96361E+02 1.20637E+01 2.08573E+03 2.14149E+03 2.19726E+03 + 1.27250E+01 -1.09889E+03 -1.83213E+03 -2.56536E+03 6.82474E+02 3.48813E+02 1.51514E+01 2.46384E+03 2.52975E+03 2.59566E+03 -1.09889E+03 -1.73400E+03 -2.36912E+03 5.92166E+02 3.05430E+02 1.86942E+01 2.28322E+03 2.34486E+03 2.40651E+03 -9.26567E+02 -1.55227E+03 -2.17797E+03 5.81916E+02 2.97009E+02 1.21018E+01 2.09040E+03 2.14629E+03 2.20218E+03 + 1.27500E+01 -1.10105E+03 -1.83562E+03 -2.57020E+03 6.83731E+02 3.49460E+02 1.51896E+01 2.46851E+03 2.53454E+03 2.60058E+03 -1.10105E+03 -1.73750E+03 -2.37396E+03 5.93423E+02 3.06078E+02 1.87323E+01 2.28789E+03 2.34966E+03 2.41143E+03 -9.28721E+02 -1.55577E+03 -2.18281E+03 5.83173E+02 2.97657E+02 1.21399E+01 2.09507E+03 2.15108E+03 2.20709E+03 + 1.27750E+01 -1.10320E+03 -1.83912E+03 -2.57504E+03 6.84988E+02 3.50108E+02 1.52277E+01 2.47318E+03 2.53934E+03 2.60550E+03 -1.10320E+03 -1.74100E+03 -2.37880E+03 5.94680E+02 3.06725E+02 1.87705E+01 2.29256E+03 2.35445E+03 2.41634E+03 -9.30875E+02 -1.55927E+03 -2.18766E+03 5.84430E+02 2.98304E+02 1.21781E+01 2.09974E+03 2.15587E+03 2.21201E+03 + 1.28000E+01 -1.10535E+03 -1.84262E+03 -2.57989E+03 6.86245E+02 3.50755E+02 1.52658E+01 2.47784E+03 2.54413E+03 2.61042E+03 -1.10535E+03 -1.74450E+03 -2.38365E+03 5.95937E+02 3.07373E+02 1.88085E+01 2.29723E+03 2.35924E+03 2.42126E+03 -9.33029E+02 -1.56276E+03 -2.19250E+03 5.85687E+02 2.98952E+02 1.22161E+01 2.10440E+03 2.16067E+03 2.21693E+03 + 1.28250E+01 -1.10751E+03 -1.84612E+03 -2.58473E+03 6.87502E+02 3.51403E+02 1.53039E+01 2.48251E+03 2.54892E+03 2.61534E+03 -1.10751E+03 -1.74800E+03 -2.38849E+03 5.97194E+02 3.08020E+02 1.88467E+01 2.30189E+03 2.36404E+03 2.42618E+03 -9.35184E+02 -1.56626E+03 -2.19734E+03 5.86944E+02 2.99599E+02 1.22543E+01 2.10907E+03 2.16546E+03 2.22185E+03 + 1.28500E+01 -1.10966E+03 -1.84962E+03 -2.58957E+03 6.88759E+02 3.52051E+02 1.53420E+01 2.48718E+03 2.55372E+03 2.62026E+03 -1.10966E+03 -1.75150E+03 -2.39333E+03 5.98451E+02 3.08668E+02 1.88848E+01 2.30656E+03 2.36883E+03 2.43110E+03 -9.37338E+02 -1.56976E+03 -2.20218E+03 5.88201E+02 3.00247E+02 1.22924E+01 2.11374E+03 2.17025E+03 2.22677E+03 + 1.28750E+01 -1.11182E+03 -1.85311E+03 -2.59441E+03 6.90016E+02 3.52698E+02 1.53802E+01 2.49185E+03 2.55851E+03 2.62517E+03 -1.11182E+03 -1.75499E+03 -2.39817E+03 5.99708E+02 3.09315E+02 1.89229E+01 2.31123E+03 2.37362E+03 2.43602E+03 -9.39492E+02 -1.57326E+03 -2.20703E+03 5.89458E+02 3.00894E+02 1.23305E+01 2.11841E+03 2.17505E+03 2.23169E+03 + 1.29000E+01 -1.11397E+03 -1.85661E+03 -2.59926E+03 6.91273E+02 3.53346E+02 1.54183E+01 2.49652E+03 2.56330E+03 2.63009E+03 -1.11397E+03 -1.75849E+03 -2.40301E+03 6.00965E+02 3.09963E+02 1.89611E+01 2.31590E+03 2.37842E+03 2.44094E+03 -9.41646E+02 -1.57676E+03 -2.21187E+03 5.90715E+02 3.01542E+02 1.23687E+01 2.12308E+03 2.17984E+03 2.23661E+03 + 1.29250E+01 -1.11612E+03 -1.86011E+03 -2.60410E+03 6.92530E+02 3.53993E+02 1.54564E+01 2.50118E+03 2.56810E+03 2.63501E+03 -1.11612E+03 -1.76199E+03 -2.40786E+03 6.02222E+02 3.10610E+02 1.89992E+01 2.32057E+03 2.38321E+03 2.44586E+03 -9.43800E+02 -1.58026E+03 -2.21671E+03 5.91972E+02 3.02189E+02 1.24067E+01 2.12774E+03 2.18463E+03 2.24152E+03 + 1.29500E+01 -1.11828E+03 -1.86361E+03 -2.60894E+03 6.93787E+02 3.54641E+02 1.54945E+01 2.50585E+03 2.57289E+03 2.63993E+03 -1.11828E+03 -1.76549E+03 -2.41270E+03 6.03479E+02 3.11258E+02 1.90373E+01 2.32523E+03 2.38800E+03 2.45077E+03 -9.45954E+02 -1.58375E+03 -2.22155E+03 5.93229E+02 3.02837E+02 1.24449E+01 2.13241E+03 2.18943E+03 2.24644E+03 + 1.29750E+01 -1.12043E+03 -1.86711E+03 -2.61378E+03 6.95044E+02 3.55288E+02 1.55326E+01 2.51052E+03 2.57768E+03 2.64485E+03 -1.12043E+03 -1.76899E+03 -2.41754E+03 6.04736E+02 3.11905E+02 1.90754E+01 2.32990E+03 2.39280E+03 2.45569E+03 -9.48108E+02 -1.58725E+03 -2.22640E+03 5.94486E+02 3.03484E+02 1.24830E+01 2.13708E+03 2.19422E+03 2.25136E+03 + 1.30000E+01 -1.20875E+03 -1.91241E+03 -2.61608E+03 6.56272E+02 3.38455E+02 2.06383E+01 2.52129E+03 2.58932E+03 2.65736E+03 -1.03642E+03 -1.73068E+03 -2.42493E+03 6.46022E+02 3.30034E+02 1.40459E+01 2.32847E+03 2.39075E+03 2.45302E+03 -1.03642E+03 -1.63256E+03 -2.22869E+03 5.55714E+02 2.86651E+02 1.75887E+01 2.14785E+03 2.20586E+03 2.26387E+03 + 1.30250E+01 -1.21090E+03 -1.91591E+03 -2.62092E+03 6.57529E+02 3.39103E+02 2.06765E+01 2.52596E+03 2.59412E+03 2.66227E+03 -1.03858E+03 -1.73418E+03 -2.42977E+03 6.47279E+02 3.30681E+02 1.40841E+01 2.33314E+03 2.39554E+03 2.45794E+03 -1.03858E+03 -1.63606E+03 -2.23353E+03 5.56970E+02 2.87299E+02 1.76268E+01 2.15252E+03 2.21065E+03 2.26879E+03 + 1.30500E+01 -1.21306E+03 -1.91941E+03 -2.62576E+03 6.58786E+02 3.39750E+02 2.07146E+01 2.53063E+03 2.59891E+03 2.66719E+03 -1.04073E+03 -1.73767E+03 -2.43462E+03 6.48536E+02 3.31329E+02 1.41222E+01 2.33780E+03 2.40033E+03 2.46286E+03 -1.04073E+03 -1.63955E+03 -2.23838E+03 5.58227E+02 2.87946E+02 1.76649E+01 2.15719E+03 2.21545E+03 2.27370E+03 + 1.30750E+01 -1.21521E+03 -1.92291E+03 -2.63061E+03 6.60042E+02 3.40398E+02 2.07527E+01 2.53529E+03 2.60370E+03 2.67211E+03 -1.04289E+03 -1.74117E+03 -2.43946E+03 6.49793E+02 3.31977E+02 1.41603E+01 2.34247E+03 2.40513E+03 2.46778E+03 -1.04289E+03 -1.64305E+03 -2.24322E+03 5.59484E+02 2.88594E+02 1.77031E+01 2.16185E+03 2.22024E+03 2.27862E+03 + 1.31000E+01 -1.21736E+03 -1.92641E+03 -2.63545E+03 6.61299E+02 3.41045E+02 2.07908E+01 2.53996E+03 2.60850E+03 2.67703E+03 -1.04504E+03 -1.74467E+03 -2.44430E+03 6.51050E+02 3.32624E+02 1.41984E+01 2.34714E+03 2.40992E+03 2.47270E+03 -1.04504E+03 -1.64655E+03 -2.24806E+03 5.60741E+02 2.89241E+02 1.77412E+01 2.16652E+03 2.22503E+03 2.28354E+03 + 1.31250E+01 -1.21952E+03 -1.92990E+03 -2.64029E+03 6.62556E+02 3.41693E+02 2.08290E+01 2.54463E+03 2.61329E+03 2.68195E+03 -1.04719E+03 -1.74817E+03 -2.44914E+03 6.52307E+02 3.33272E+02 1.42366E+01 2.35181E+03 2.41471E+03 2.47762E+03 -1.04719E+03 -1.65005E+03 -2.25290E+03 5.61998E+02 2.89889E+02 1.77793E+01 2.17119E+03 2.22983E+03 2.28846E+03 + 1.31500E+01 -1.22167E+03 -1.93340E+03 -2.64513E+03 6.63813E+02 3.42340E+02 2.08671E+01 2.54930E+03 2.61808E+03 2.68687E+03 -1.04935E+03 -1.75167E+03 -2.45399E+03 6.53564E+02 3.33919E+02 1.42747E+01 2.35648E+03 2.41951E+03 2.48253E+03 -1.04935E+03 -1.65355E+03 -2.25774E+03 5.63255E+02 2.90536E+02 1.78174E+01 2.17586E+03 2.23462E+03 2.29338E+03 + 1.31750E+01 -1.22383E+03 -1.93690E+03 -2.64998E+03 6.65070E+02 3.42988E+02 2.09052E+01 2.55397E+03 2.62288E+03 2.69179E+03 -1.05150E+03 -1.75517E+03 -2.45883E+03 6.54821E+02 3.34567E+02 1.43128E+01 2.36114E+03 2.42430E+03 2.48745E+03 -1.05150E+03 -1.65704E+03 -2.26259E+03 5.64512E+02 2.91184E+02 1.78555E+01 2.18053E+03 2.23941E+03 2.29830E+03 + 1.32000E+01 -1.22598E+03 -1.94040E+03 -2.65482E+03 6.66327E+02 3.43635E+02 2.09433E+01 2.55863E+03 2.62767E+03 2.69670E+03 -1.05366E+03 -1.75866E+03 -2.46367E+03 6.56078E+02 3.35214E+02 1.43509E+01 2.36581E+03 2.42909E+03 2.49237E+03 -1.05366E+03 -1.66054E+03 -2.26743E+03 5.65769E+02 2.91831E+02 1.78937E+01 2.18519E+03 2.24421E+03 2.30322E+03 + 1.32250E+01 -1.22813E+03 -1.94390E+03 -2.65966E+03 6.67584E+02 3.44283E+02 2.09814E+01 2.56330E+03 2.63246E+03 2.70162E+03 -1.05581E+03 -1.76216E+03 -2.46851E+03 6.57335E+02 3.35862E+02 1.43890E+01 2.37048E+03 2.43389E+03 2.49729E+03 -1.05581E+03 -1.66404E+03 -2.27227E+03 5.67026E+02 2.92479E+02 1.79318E+01 2.18986E+03 2.24900E+03 2.30814E+03 + 1.32500E+01 -1.23029E+03 -1.94740E+03 -2.66450E+03 6.68841E+02 3.44930E+02 2.10196E+01 2.56797E+03 2.63726E+03 2.70654E+03 -1.05796E+03 -1.76566E+03 -2.47336E+03 6.58592E+02 3.36509E+02 1.44272E+01 2.37515E+03 2.43868E+03 2.50221E+03 -1.05796E+03 -1.66754E+03 -2.27711E+03 5.68283E+02 2.93127E+02 1.79699E+01 2.19453E+03 2.25379E+03 2.31305E+03 + 1.32750E+01 -1.23244E+03 -1.95089E+03 -2.66934E+03 6.70098E+02 3.45578E+02 2.10577E+01 2.57264E+03 2.64205E+03 2.71146E+03 -1.06012E+03 -1.76916E+03 -2.47820E+03 6.59849E+02 3.37157E+02 1.44653E+01 2.37982E+03 2.44347E+03 2.50713E+03 -1.06012E+03 -1.67104E+03 -2.28196E+03 5.69540E+02 2.93774E+02 1.80080E+01 2.19920E+03 2.25859E+03 2.31797E+03 + 1.33000E+01 -1.23460E+03 -1.95439E+03 -2.67419E+03 6.71355E+02 3.46226E+02 2.10958E+01 2.57731E+03 2.64684E+03 2.71638E+03 -1.06227E+03 -1.77266E+03 -2.48304E+03 6.61106E+02 3.37805E+02 1.45034E+01 2.38448E+03 2.44827E+03 2.51205E+03 -1.06227E+03 -1.67454E+03 -2.28680E+03 5.70797E+02 2.94422E+02 1.80461E+01 2.20387E+03 2.26338E+03 2.32289E+03 + 1.33250E+01 -1.23675E+03 -1.95789E+03 -2.67903E+03 6.72612E+02 3.46873E+02 2.11339E+01 2.58197E+03 2.65164E+03 2.72130E+03 -1.06443E+03 -1.77615E+03 -2.48788E+03 6.62363E+02 3.38452E+02 1.45415E+01 2.38915E+03 2.45306E+03 2.51697E+03 -1.06443E+03 -1.67803E+03 -2.29164E+03 5.72054E+02 2.95069E+02 1.80843E+01 2.20853E+03 2.26817E+03 2.32781E+03 + 1.33500E+01 -1.23890E+03 -1.96139E+03 -2.68387E+03 6.73869E+02 3.47521E+02 2.11720E+01 2.58664E+03 2.65643E+03 2.72622E+03 -1.06658E+03 -1.77965E+03 -2.49272E+03 6.63620E+02 3.39100E+02 1.45796E+01 2.39382E+03 2.45785E+03 2.52188E+03 -1.06658E+03 -1.68153E+03 -2.29648E+03 5.73311E+02 2.95717E+02 1.81224E+01 2.21320E+03 2.27297E+03 2.33273E+03 + 1.33750E+01 -1.24106E+03 -1.96489E+03 -2.68871E+03 6.75126E+02 3.48168E+02 2.12102E+01 2.59131E+03 2.66122E+03 2.73113E+03 -1.06873E+03 -1.78315E+03 -2.49757E+03 6.64877E+02 3.39747E+02 1.46178E+01 2.39849E+03 2.46265E+03 2.52680E+03 -1.06873E+03 -1.68503E+03 -2.30133E+03 5.74568E+02 2.96364E+02 1.81605E+01 2.21787E+03 2.27776E+03 2.33765E+03 + 1.34000E+01 -1.24321E+03 -1.96838E+03 -2.69356E+03 6.76383E+02 3.48816E+02 2.12483E+01 2.59598E+03 2.66602E+03 2.73605E+03 -1.07089E+03 -1.78665E+03 -2.50241E+03 6.66134E+02 3.40395E+02 1.46559E+01 2.40316E+03 2.46744E+03 2.53172E+03 -1.07089E+03 -1.68853E+03 -2.30617E+03 5.75825E+02 2.97012E+02 1.81986E+01 2.22254E+03 2.28255E+03 2.34257E+03 + 1.34250E+01 -1.24537E+03 -1.97188E+03 -2.69840E+03 6.77640E+02 3.49463E+02 2.12864E+01 2.60065E+03 2.67081E+03 2.74097E+03 -1.07304E+03 -1.79015E+03 -2.50725E+03 6.67391E+02 3.41042E+02 1.46940E+01 2.40782E+03 2.47223E+03 2.53664E+03 -1.07304E+03 -1.69203E+03 -2.31101E+03 5.77082E+02 2.97659E+02 1.82367E+01 2.22721E+03 2.28735E+03 2.34748E+03 + 1.34500E+01 -1.24752E+03 -1.97538E+03 -2.70324E+03 6.78897E+02 3.50111E+02 2.13245E+01 2.60531E+03 2.67560E+03 2.74589E+03 -1.07520E+03 -1.79365E+03 -2.51209E+03 6.68647E+02 3.41690E+02 1.47321E+01 2.41249E+03 2.47702E+03 2.54156E+03 -1.07520E+03 -1.69552E+03 -2.31585E+03 5.78339E+02 2.98307E+02 1.82749E+01 2.23187E+03 2.29214E+03 2.35240E+03 + 1.34750E+01 -1.24967E+03 -1.97888E+03 -2.70808E+03 6.80154E+02 3.50758E+02 2.13626E+01 2.60998E+03 2.68040E+03 2.75081E+03 -1.07735E+03 -1.79714E+03 -2.51694E+03 6.69904E+02 3.42337E+02 1.47702E+01 2.41716E+03 2.48182E+03 2.54648E+03 -1.07735E+03 -1.69902E+03 -2.32070E+03 5.79596E+02 2.98954E+02 1.83130E+01 2.23654E+03 2.29693E+03 2.35732E+03 + 1.35000E+01 -1.25183E+03 -1.98238E+03 -2.71293E+03 6.81411E+02 3.51406E+02 2.14008E+01 2.61465E+03 2.68519E+03 2.75573E+03 -1.07950E+03 -1.80064E+03 -2.52178E+03 6.71161E+02 3.42985E+02 1.48084E+01 2.42183E+03 2.48661E+03 2.55140E+03 -1.07950E+03 -1.70252E+03 -2.32554E+03 5.80853E+02 2.99602E+02 1.83511E+01 2.24121E+03 2.30173E+03 2.36224E+03 + 1.35250E+01 -1.25398E+03 -1.98588E+03 -2.71777E+03 6.82668E+02 3.52053E+02 2.14389E+01 2.61932E+03 2.68998E+03 2.76065E+03 -1.08166E+03 -1.80414E+03 -2.52662E+03 6.72418E+02 3.43632E+02 1.48465E+01 2.42650E+03 2.49140E+03 2.55631E+03 -1.08166E+03 -1.70602E+03 -2.33038E+03 5.82110E+02 3.00250E+02 1.83892E+01 2.24588E+03 2.30652E+03 2.36716E+03 + 1.35500E+01 -1.25614E+03 -1.98937E+03 -2.72261E+03 6.83925E+02 3.52701E+02 2.14770E+01 2.62399E+03 2.69478E+03 2.76556E+03 -1.08381E+03 -1.80764E+03 -2.53146E+03 6.73675E+02 3.44280E+02 1.48846E+01 2.43116E+03 2.49620E+03 2.56123E+03 -1.08381E+03 -1.70952E+03 -2.33522E+03 5.83367E+02 3.00897E+02 1.84273E+01 2.25055E+03 2.31131E+03 2.37208E+03 + 1.35750E+01 -1.25829E+03 -1.99287E+03 -2.72745E+03 6.85182E+02 3.53349E+02 2.15151E+01 2.62865E+03 2.69957E+03 2.77048E+03 -1.08597E+03 -1.81114E+03 -2.53631E+03 6.74932E+02 3.44928E+02 1.49227E+01 2.43583E+03 2.50099E+03 2.56615E+03 -1.08597E+03 -1.71302E+03 -2.34006E+03 5.84624E+02 3.01545E+02 1.84655E+01 2.25521E+03 2.31610E+03 2.37700E+03 + 1.36000E+01 -1.26044E+03 -1.99637E+03 -2.73230E+03 6.86439E+02 3.53996E+02 2.15532E+01 2.63332E+03 2.70436E+03 2.77540E+03 -1.08812E+03 -1.81463E+03 -2.54115E+03 6.76189E+02 3.45575E+02 1.49608E+01 2.44050E+03 2.50578E+03 2.57107E+03 -1.08812E+03 -1.71651E+03 -2.34491E+03 5.85881E+02 3.02192E+02 1.85036E+01 2.25988E+03 2.32090E+03 2.38191E+03 + 1.36250E+01 -1.26260E+03 -1.99987E+03 -2.73714E+03 6.87696E+02 3.54644E+02 2.15914E+01 2.63799E+03 2.70916E+03 2.78032E+03 -1.09028E+03 -1.81813E+03 -2.54599E+03 6.77446E+02 3.46223E+02 1.49990E+01 2.44517E+03 2.51058E+03 2.57599E+03 -1.09028E+03 -1.72001E+03 -2.34975E+03 5.87138E+02 3.02840E+02 1.85417E+01 2.26455E+03 2.32569E+03 2.38683E+03 + 1.36500E+01 -1.26475E+03 -2.00337E+03 -2.74198E+03 6.88953E+02 3.55291E+02 2.16295E+01 2.64266E+03 2.71395E+03 2.78524E+03 -1.09243E+03 -1.82163E+03 -2.55083E+03 6.78703E+02 3.46870E+02 1.50371E+01 2.44984E+03 2.51537E+03 2.58091E+03 -1.09243E+03 -1.72351E+03 -2.35459E+03 5.88395E+02 3.03487E+02 1.85799E+01 2.26922E+03 2.33048E+03 2.39175E+03 + 1.36750E+01 -1.26691E+03 -2.00686E+03 -2.74682E+03 6.90210E+02 3.55939E+02 2.16676E+01 2.64733E+03 2.71874E+03 2.79016E+03 -1.09458E+03 -1.82513E+03 -2.55568E+03 6.79960E+02 3.47518E+02 1.50752E+01 2.45450E+03 2.52016E+03 2.58583E+03 -1.09458E+03 -1.72701E+03 -2.35943E+03 5.89652E+02 3.04135E+02 1.86179E+01 2.27389E+03 2.33528E+03 2.39667E+03 + 1.37000E+01 -1.26906E+03 -2.01036E+03 -2.75166E+03 6.91467E+02 3.56586E+02 2.17057E+01 2.65199E+03 2.72354E+03 2.79508E+03 -1.09674E+03 -1.82863E+03 -2.56052E+03 6.81217E+02 3.48165E+02 1.51133E+01 2.45917E+03 2.52496E+03 2.59074E+03 -1.09674E+03 -1.73051E+03 -2.36428E+03 5.90909E+02 3.04782E+02 1.86561E+01 2.27855E+03 2.34007E+03 2.40159E+03 + 1.37250E+01 -1.27122E+03 -2.01386E+03 -2.75651E+03 6.92724E+02 3.57234E+02 2.17438E+01 2.65666E+03 2.72833E+03 2.79999E+03 -1.09889E+03 -1.83213E+03 -2.56536E+03 6.82474E+02 3.48813E+02 1.51514E+01 2.46384E+03 2.52975E+03 2.59566E+03 -1.09889E+03 -1.73400E+03 -2.36912E+03 5.92166E+02 3.05430E+02 1.86942E+01 2.28322E+03 2.34486E+03 2.40651E+03 + 1.37500E+01 -1.27337E+03 -2.01736E+03 -2.76135E+03 6.93981E+02 3.57881E+02 2.17820E+01 2.66133E+03 2.73312E+03 2.80491E+03 -1.10105E+03 -1.83562E+03 -2.57020E+03 6.83731E+02 3.49460E+02 1.51896E+01 2.46851E+03 2.53454E+03 2.60058E+03 -1.10105E+03 -1.73750E+03 -2.37396E+03 5.93423E+02 3.06078E+02 1.87323E+01 2.28789E+03 2.34966E+03 2.41143E+03 + 1.37750E+01 -1.27552E+03 -2.02086E+03 -2.76619E+03 6.95238E+02 3.58529E+02 2.18201E+01 2.66600E+03 2.73792E+03 2.80983E+03 -1.10320E+03 -1.83912E+03 -2.57504E+03 6.84988E+02 3.50108E+02 1.52277E+01 2.47318E+03 2.53934E+03 2.60550E+03 -1.10320E+03 -1.74100E+03 -2.37880E+03 5.94680E+02 3.06725E+02 1.87705E+01 2.29256E+03 2.35445E+03 2.41634E+03 + 1.38000E+01 -1.27768E+03 -2.02436E+03 -2.77103E+03 6.96495E+02 3.59176E+02 2.18582E+01 2.67067E+03 2.74271E+03 2.81475E+03 -1.10535E+03 -1.84262E+03 -2.57989E+03 6.86245E+02 3.50755E+02 1.52658E+01 2.47784E+03 2.54413E+03 2.61042E+03 -1.10535E+03 -1.74450E+03 -2.38365E+03 5.95937E+02 3.07373E+02 1.88085E+01 2.29723E+03 2.35924E+03 2.42126E+03 + 1.38250E+01 -1.27983E+03 -2.02785E+03 -2.77588E+03 6.97752E+02 3.59824E+02 2.18963E+01 2.67533E+03 2.74750E+03 2.81967E+03 -1.10751E+03 -1.84612E+03 -2.58473E+03 6.87502E+02 3.51403E+02 1.53039E+01 2.48251E+03 2.54892E+03 2.61534E+03 -1.10751E+03 -1.74800E+03 -2.38849E+03 5.97194E+02 3.08020E+02 1.88467E+01 2.30189E+03 2.36404E+03 2.42618E+03 + 1.38500E+01 -1.28199E+03 -2.03135E+03 -2.78072E+03 6.99009E+02 3.60472E+02 2.19344E+01 2.68000E+03 2.75230E+03 2.82459E+03 -1.10966E+03 -1.84962E+03 -2.58957E+03 6.88759E+02 3.52051E+02 1.53420E+01 2.48718E+03 2.55372E+03 2.62026E+03 -1.10966E+03 -1.75150E+03 -2.39333E+03 5.98451E+02 3.08668E+02 1.88848E+01 2.30656E+03 2.36883E+03 2.43110E+03 + 1.38750E+01 -1.28414E+03 -2.03485E+03 -2.78556E+03 7.00266E+02 3.61119E+02 2.19726E+01 2.68467E+03 2.75709E+03 2.82951E+03 -1.11182E+03 -1.85311E+03 -2.59441E+03 6.90016E+02 3.52698E+02 1.53802E+01 2.49185E+03 2.55851E+03 2.62517E+03 -1.11182E+03 -1.75499E+03 -2.39817E+03 5.99708E+02 3.09315E+02 1.89229E+01 2.31123E+03 2.37362E+03 2.43602E+03 + 1.39000E+01 -1.28629E+03 -2.03835E+03 -2.79040E+03 7.01523E+02 3.61767E+02 2.20107E+01 2.68934E+03 2.76188E+03 2.83442E+03 -1.11397E+03 -1.85661E+03 -2.59926E+03 6.91273E+02 3.53346E+02 1.54183E+01 2.49652E+03 2.56330E+03 2.63009E+03 -1.11397E+03 -1.75849E+03 -2.40301E+03 6.00965E+02 3.09963E+02 1.89611E+01 2.31590E+03 2.37842E+03 2.44094E+03 + 1.39250E+01 -1.28845E+03 -2.04185E+03 -2.79525E+03 7.02780E+02 3.62414E+02 2.20488E+01 2.69401E+03 2.76668E+03 2.83934E+03 -1.11612E+03 -1.86011E+03 -2.60410E+03 6.92530E+02 3.53993E+02 1.54564E+01 2.50118E+03 2.56810E+03 2.63501E+03 -1.11612E+03 -1.76199E+03 -2.40786E+03 6.02222E+02 3.10610E+02 1.89992E+01 2.32057E+03 2.38321E+03 2.44586E+03 + 1.39500E+01 -1.29060E+03 -2.04534E+03 -2.80009E+03 7.04037E+02 3.63062E+02 2.20869E+01 2.69867E+03 2.77147E+03 2.84426E+03 -1.11828E+03 -1.86361E+03 -2.60894E+03 6.93787E+02 3.54641E+02 1.54945E+01 2.50585E+03 2.57289E+03 2.63993E+03 -1.11828E+03 -1.76549E+03 -2.41270E+03 6.03479E+02 3.11258E+02 1.90373E+01 2.32523E+03 2.38800E+03 2.45077E+03 + 1.39750E+01 -1.29276E+03 -2.04884E+03 -2.80493E+03 7.05294E+02 3.63709E+02 2.21250E+01 2.70334E+03 2.77626E+03 2.84918E+03 -1.12043E+03 -1.86711E+03 -2.61378E+03 6.95044E+02 3.55288E+02 1.55326E+01 2.51052E+03 2.57768E+03 2.64485E+03 -1.12043E+03 -1.76899E+03 -2.41754E+03 6.04736E+02 3.11905E+02 1.90754E+01 2.32990E+03 2.39280E+03 2.45569E+03 + 1.40000E+01 -1.20875E+03 -2.01053E+03 -2.81232E+03 7.46580E+02 3.81838E+02 1.70956E+01 2.70191E+03 2.77421E+03 2.84651E+03 -1.20875E+03 -1.91241E+03 -2.61608E+03 6.56272E+02 3.38455E+02 2.06383E+01 2.52129E+03 2.58932E+03 2.65736E+03 -1.03642E+03 -1.73068E+03 -2.42493E+03 6.46022E+02 3.30034E+02 1.40459E+01 2.32847E+03 2.39075E+03 2.45302E+03 + 1.40250E+01 -1.21090E+03 -2.01403E+03 -2.81716E+03 7.47837E+02 3.82485E+02 1.71337E+01 2.70658E+03 2.77900E+03 2.85143E+03 -1.21090E+03 -1.91591E+03 -2.62092E+03 6.57529E+02 3.39103E+02 2.06765E+01 2.52596E+03 2.59412E+03 2.66227E+03 -1.03858E+03 -1.73418E+03 -2.42977E+03 6.47279E+02 3.30681E+02 1.40841E+01 2.33314E+03 2.39554E+03 2.45794E+03 + 1.40500E+01 -1.21306E+03 -2.01753E+03 -2.82200E+03 7.49094E+02 3.83133E+02 1.71718E+01 2.71124E+03 2.78380E+03 2.85635E+03 -1.21306E+03 -1.91941E+03 -2.62576E+03 6.58786E+02 3.39750E+02 2.07146E+01 2.53063E+03 2.59891E+03 2.66719E+03 -1.04073E+03 -1.73767E+03 -2.43462E+03 6.48536E+02 3.31329E+02 1.41222E+01 2.33780E+03 2.40033E+03 2.46286E+03 + 1.40750E+01 -1.21521E+03 -2.02103E+03 -2.82685E+03 7.50351E+02 3.83780E+02 1.72100E+01 2.71591E+03 2.78859E+03 2.86127E+03 -1.21521E+03 -1.92291E+03 -2.63061E+03 6.60042E+02 3.40398E+02 2.07527E+01 2.53529E+03 2.60370E+03 2.67211E+03 -1.04289E+03 -1.74117E+03 -2.43946E+03 6.49793E+02 3.31977E+02 1.41603E+01 2.34247E+03 2.40513E+03 2.46778E+03 + 1.41000E+01 -1.21736E+03 -2.02453E+03 -2.83169E+03 7.51608E+02 3.84428E+02 1.72481E+01 2.72058E+03 2.79338E+03 2.86619E+03 -1.21736E+03 -1.92641E+03 -2.63545E+03 6.61299E+02 3.41045E+02 2.07908E+01 2.53996E+03 2.60850E+03 2.67703E+03 -1.04504E+03 -1.74467E+03 -2.44430E+03 6.51050E+02 3.32624E+02 1.41984E+01 2.34714E+03 2.40992E+03 2.47270E+03 + 1.41250E+01 -1.21952E+03 -2.02802E+03 -2.83653E+03 7.52865E+02 3.85076E+02 1.72862E+01 2.72525E+03 2.79818E+03 2.87110E+03 -1.21952E+03 -1.92990E+03 -2.64029E+03 6.62556E+02 3.41693E+02 2.08290E+01 2.54463E+03 2.61329E+03 2.68195E+03 -1.04719E+03 -1.74817E+03 -2.44914E+03 6.52307E+02 3.33272E+02 1.42366E+01 2.35181E+03 2.41471E+03 2.47762E+03 + 1.41500E+01 -1.22167E+03 -2.03152E+03 -2.84137E+03 7.54122E+02 3.85723E+02 1.73243E+01 2.72992E+03 2.80297E+03 2.87602E+03 -1.22167E+03 -1.93340E+03 -2.64513E+03 6.63813E+02 3.42340E+02 2.08671E+01 2.54930E+03 2.61808E+03 2.68687E+03 -1.04935E+03 -1.75167E+03 -2.45399E+03 6.53564E+02 3.33919E+02 1.42747E+01 2.35648E+03 2.41951E+03 2.48253E+03 + 1.41750E+01 -1.22383E+03 -2.03502E+03 -2.84622E+03 7.55379E+02 3.86371E+02 1.73624E+01 2.73458E+03 2.80776E+03 2.88094E+03 -1.22383E+03 -1.93690E+03 -2.64998E+03 6.65070E+02 3.42988E+02 2.09052E+01 2.55397E+03 2.62288E+03 2.69179E+03 -1.05150E+03 -1.75517E+03 -2.45883E+03 6.54821E+02 3.34567E+02 1.43128E+01 2.36114E+03 2.42430E+03 2.48745E+03 + 1.42000E+01 -1.22598E+03 -2.03852E+03 -2.85106E+03 7.56636E+02 3.87018E+02 1.74006E+01 2.73925E+03 2.81256E+03 2.88586E+03 -1.22598E+03 -1.94040E+03 -2.65482E+03 6.66327E+02 3.43635E+02 2.09433E+01 2.55863E+03 2.62767E+03 2.69670E+03 -1.05366E+03 -1.75866E+03 -2.46367E+03 6.56078E+02 3.35214E+02 1.43509E+01 2.36581E+03 2.42909E+03 2.49237E+03 + 1.42250E+01 -1.22813E+03 -2.04202E+03 -2.85590E+03 7.57893E+02 3.87666E+02 1.74387E+01 2.74392E+03 2.81735E+03 2.89078E+03 -1.22813E+03 -1.94390E+03 -2.65966E+03 6.67584E+02 3.44283E+02 2.09814E+01 2.56330E+03 2.63246E+03 2.70162E+03 -1.05581E+03 -1.76216E+03 -2.46851E+03 6.57335E+02 3.35862E+02 1.43890E+01 2.37048E+03 2.43389E+03 2.49729E+03 + 1.42500E+01 -1.23029E+03 -2.04552E+03 -2.86074E+03 7.59150E+02 3.88313E+02 1.74768E+01 2.74859E+03 2.82214E+03 2.89570E+03 -1.23029E+03 -1.94740E+03 -2.66450E+03 6.68841E+02 3.44930E+02 2.10196E+01 2.56797E+03 2.63726E+03 2.70654E+03 -1.05796E+03 -1.76566E+03 -2.47336E+03 6.58592E+02 3.36509E+02 1.44272E+01 2.37515E+03 2.43868E+03 2.50221E+03 + 1.42750E+01 -1.23244E+03 -2.04901E+03 -2.86559E+03 7.60407E+02 3.88961E+02 1.75149E+01 2.75326E+03 2.82694E+03 2.90062E+03 -1.23244E+03 -1.95089E+03 -2.66934E+03 6.70098E+02 3.45578E+02 2.10577E+01 2.57264E+03 2.64205E+03 2.71146E+03 -1.06012E+03 -1.76916E+03 -2.47820E+03 6.59849E+02 3.37157E+02 1.44653E+01 2.37982E+03 2.44347E+03 2.50713E+03 + 1.43000E+01 -1.23460E+03 -2.05251E+03 -2.87043E+03 7.61664E+02 3.89608E+02 1.75530E+01 2.75792E+03 2.83173E+03 2.90553E+03 -1.23460E+03 -1.95439E+03 -2.67419E+03 6.71355E+02 3.46226E+02 2.10958E+01 2.57731E+03 2.64684E+03 2.71638E+03 -1.06227E+03 -1.77266E+03 -2.48304E+03 6.61106E+02 3.37805E+02 1.45034E+01 2.38448E+03 2.44827E+03 2.51205E+03 + 1.43250E+01 -1.23675E+03 -2.05601E+03 -2.87527E+03 7.62921E+02 3.90256E+02 1.75912E+01 2.76259E+03 2.83652E+03 2.91045E+03 -1.23675E+03 -1.95789E+03 -2.67903E+03 6.72612E+02 3.46873E+02 2.11339E+01 2.58197E+03 2.65164E+03 2.72130E+03 -1.06443E+03 -1.77615E+03 -2.48788E+03 6.62363E+02 3.38452E+02 1.45415E+01 2.38915E+03 2.45306E+03 2.51697E+03 + 1.43500E+01 -1.23890E+03 -2.05951E+03 -2.88011E+03 7.64178E+02 3.90903E+02 1.76293E+01 2.76726E+03 2.84132E+03 2.91537E+03 -1.23890E+03 -1.96139E+03 -2.68387E+03 6.73869E+02 3.47521E+02 2.11720E+01 2.58664E+03 2.65643E+03 2.72622E+03 -1.06658E+03 -1.77965E+03 -2.49272E+03 6.63620E+02 3.39100E+02 1.45796E+01 2.39382E+03 2.45785E+03 2.52188E+03 + 1.43750E+01 -1.24106E+03 -2.06301E+03 -2.88496E+03 7.65435E+02 3.91551E+02 1.76674E+01 2.77193E+03 2.84611E+03 2.92029E+03 -1.24106E+03 -1.96489E+03 -2.68871E+03 6.75126E+02 3.48168E+02 2.12102E+01 2.59131E+03 2.66122E+03 2.73113E+03 -1.06873E+03 -1.78315E+03 -2.49757E+03 6.64877E+02 3.39747E+02 1.46178E+01 2.39849E+03 2.46265E+03 2.52680E+03 + 1.44000E+01 -1.24321E+03 -2.06651E+03 -2.88980E+03 7.66692E+02 3.92199E+02 1.77056E+01 2.77660E+03 2.85090E+03 2.92521E+03 -1.24321E+03 -1.96838E+03 -2.69356E+03 6.76383E+02 3.48816E+02 2.12483E+01 2.59598E+03 2.66602E+03 2.73605E+03 -1.07089E+03 -1.78665E+03 -2.50241E+03 6.66134E+02 3.40395E+02 1.46559E+01 2.40316E+03 2.46744E+03 2.53172E+03 + 1.44250E+01 -1.24537E+03 -2.07000E+03 -2.89464E+03 7.67949E+02 3.92846E+02 1.77436E+01 2.78126E+03 2.85570E+03 2.93013E+03 -1.24537E+03 -1.97188E+03 -2.69840E+03 6.77640E+02 3.49463E+02 2.12864E+01 2.60065E+03 2.67081E+03 2.74097E+03 -1.07304E+03 -1.79015E+03 -2.50725E+03 6.67391E+02 3.41042E+02 1.46940E+01 2.40782E+03 2.47223E+03 2.53664E+03 + 1.44500E+01 -1.24752E+03 -2.07350E+03 -2.89948E+03 7.69206E+02 3.93494E+02 1.77818E+01 2.78593E+03 2.86049E+03 2.93505E+03 -1.24752E+03 -1.97538E+03 -2.70324E+03 6.78897E+02 3.50111E+02 2.13245E+01 2.60531E+03 2.67560E+03 2.74589E+03 -1.07520E+03 -1.79365E+03 -2.51209E+03 6.68647E+02 3.41690E+02 1.47321E+01 2.41249E+03 2.47702E+03 2.54156E+03 + 1.44750E+01 -1.24967E+03 -2.07700E+03 -2.90432E+03 7.70463E+02 3.94141E+02 1.78199E+01 2.79060E+03 2.86528E+03 2.93996E+03 -1.24967E+03 -1.97888E+03 -2.70808E+03 6.80154E+02 3.50758E+02 2.13626E+01 2.60998E+03 2.68040E+03 2.75081E+03 -1.07735E+03 -1.79714E+03 -2.51694E+03 6.69904E+02 3.42337E+02 1.47702E+01 2.41716E+03 2.48182E+03 2.54648E+03 + 1.45000E+01 -1.25183E+03 -2.08050E+03 -2.90917E+03 7.71719E+02 3.94789E+02 1.78580E+01 2.79527E+03 2.87008E+03 2.94488E+03 -1.25183E+03 -1.98238E+03 -2.71293E+03 6.81411E+02 3.51406E+02 2.14008E+01 2.61465E+03 2.68519E+03 2.75573E+03 -1.07950E+03 -1.80064E+03 -2.52178E+03 6.71161E+02 3.42985E+02 1.48084E+01 2.42183E+03 2.48661E+03 2.55140E+03 + 1.45250E+01 -1.25398E+03 -2.08400E+03 -2.91401E+03 7.72976E+02 3.95436E+02 1.78962E+01 2.79994E+03 2.87487E+03 2.94980E+03 -1.25398E+03 -1.98588E+03 -2.71777E+03 6.82668E+02 3.52053E+02 2.14389E+01 2.61932E+03 2.68998E+03 2.76065E+03 -1.08166E+03 -1.80414E+03 -2.52662E+03 6.72418E+02 3.43632E+02 1.48465E+01 2.42650E+03 2.49140E+03 2.55631E+03 + 1.45500E+01 -1.25614E+03 -2.08749E+03 -2.91885E+03 7.74233E+02 3.96084E+02 1.79343E+01 2.80460E+03 2.87966E+03 2.95472E+03 -1.25614E+03 -1.98937E+03 -2.72261E+03 6.83925E+02 3.52701E+02 2.14770E+01 2.62399E+03 2.69478E+03 2.76556E+03 -1.08381E+03 -1.80764E+03 -2.53146E+03 6.73675E+02 3.44280E+02 1.48846E+01 2.43116E+03 2.49620E+03 2.56123E+03 + 1.45750E+01 -1.25829E+03 -2.09099E+03 -2.92369E+03 7.75490E+02 3.96731E+02 1.79724E+01 2.80927E+03 2.88446E+03 2.95964E+03 -1.25829E+03 -1.99287E+03 -2.72745E+03 6.85182E+02 3.53349E+02 2.15151E+01 2.62865E+03 2.69957E+03 2.77048E+03 -1.08597E+03 -1.81114E+03 -2.53631E+03 6.74932E+02 3.44928E+02 1.49227E+01 2.43583E+03 2.50099E+03 2.56615E+03 + 1.46000E+01 -1.26044E+03 -2.09449E+03 -2.92854E+03 7.76747E+02 3.97379E+02 1.80105E+01 2.81394E+03 2.88925E+03 2.96456E+03 -1.26044E+03 -1.99637E+03 -2.73230E+03 6.86439E+02 3.53996E+02 2.15532E+01 2.63332E+03 2.70436E+03 2.77540E+03 -1.08812E+03 -1.81463E+03 -2.54115E+03 6.76189E+02 3.45575E+02 1.49608E+01 2.44050E+03 2.50578E+03 2.57107E+03 + 1.46250E+01 -1.26260E+03 -2.09799E+03 -2.93338E+03 7.78004E+02 3.98026E+02 1.80486E+01 2.81861E+03 2.89404E+03 2.96948E+03 -1.26260E+03 -1.99987E+03 -2.73714E+03 6.87696E+02 3.54644E+02 2.15914E+01 2.63799E+03 2.70916E+03 2.78032E+03 -1.09028E+03 -1.81813E+03 -2.54599E+03 6.77446E+02 3.46223E+02 1.49990E+01 2.44517E+03 2.51058E+03 2.57599E+03 + 1.46500E+01 -1.26475E+03 -2.10149E+03 -2.93822E+03 7.79261E+02 3.98674E+02 1.80868E+01 2.82328E+03 2.89884E+03 2.97439E+03 -1.26475E+03 -2.00337E+03 -2.74198E+03 6.88953E+02 3.55291E+02 2.16295E+01 2.64266E+03 2.71395E+03 2.78524E+03 -1.09243E+03 -1.82163E+03 -2.55083E+03 6.78703E+02 3.46870E+02 1.50371E+01 2.44984E+03 2.51537E+03 2.58091E+03 + 1.46750E+01 -1.26691E+03 -2.10499E+03 -2.94306E+03 7.80518E+02 3.99322E+02 1.81249E+01 2.82794E+03 2.90363E+03 2.97931E+03 -1.26691E+03 -2.00686E+03 -2.74682E+03 6.90210E+02 3.55939E+02 2.16676E+01 2.64733E+03 2.71874E+03 2.79016E+03 -1.09458E+03 -1.82513E+03 -2.55568E+03 6.79960E+02 3.47518E+02 1.50752E+01 2.45450E+03 2.52016E+03 2.58583E+03 + 1.47000E+01 -1.26906E+03 -2.10848E+03 -2.94791E+03 7.81775E+02 3.99969E+02 1.81630E+01 2.83261E+03 2.90842E+03 2.98423E+03 -1.26906E+03 -2.01036E+03 -2.75166E+03 6.91467E+02 3.56586E+02 2.17057E+01 2.65199E+03 2.72354E+03 2.79508E+03 -1.09674E+03 -1.82863E+03 -2.56052E+03 6.81217E+02 3.48165E+02 1.51133E+01 2.45917E+03 2.52496E+03 2.59074E+03 + 1.47250E+01 -1.27122E+03 -2.11198E+03 -2.95275E+03 7.83032E+02 4.00617E+02 1.82011E+01 2.83728E+03 2.91322E+03 2.98915E+03 -1.27122E+03 -2.01386E+03 -2.75651E+03 6.92724E+02 3.57234E+02 2.17438E+01 2.65666E+03 2.72833E+03 2.79999E+03 -1.09889E+03 -1.83213E+03 -2.56536E+03 6.82474E+02 3.48813E+02 1.51514E+01 2.46384E+03 2.52975E+03 2.59566E+03 + 1.47500E+01 -1.27337E+03 -2.11548E+03 -2.95759E+03 7.84289E+02 4.01264E+02 1.82392E+01 2.84195E+03 2.91801E+03 2.99407E+03 -1.27337E+03 -2.01736E+03 -2.76135E+03 6.93981E+02 3.57881E+02 2.17820E+01 2.66133E+03 2.73312E+03 2.80491E+03 -1.10105E+03 -1.83562E+03 -2.57020E+03 6.83731E+02 3.49460E+02 1.51896E+01 2.46851E+03 2.53454E+03 2.60058E+03 + 1.47750E+01 -1.27552E+03 -2.11898E+03 -2.96243E+03 7.85546E+02 4.01912E+02 1.82774E+01 2.84662E+03 2.92280E+03 2.99899E+03 -1.27552E+03 -2.02086E+03 -2.76619E+03 6.95238E+02 3.58529E+02 2.18201E+01 2.66600E+03 2.73792E+03 2.80983E+03 -1.10320E+03 -1.83912E+03 -2.57504E+03 6.84988E+02 3.50108E+02 1.52277E+01 2.47318E+03 2.53934E+03 2.60550E+03 + 1.48000E+01 -1.27768E+03 -2.12248E+03 -2.96728E+03 7.86803E+02 4.02559E+02 1.83155E+01 2.85128E+03 2.92759E+03 3.00391E+03 -1.27768E+03 -2.02436E+03 -2.77103E+03 6.96495E+02 3.59176E+02 2.18582E+01 2.67067E+03 2.74271E+03 2.81475E+03 -1.10535E+03 -1.84262E+03 -2.57989E+03 6.86245E+02 3.50755E+02 1.52658E+01 2.47784E+03 2.54413E+03 2.61042E+03 + 1.48250E+01 -1.27983E+03 -2.12597E+03 -2.97212E+03 7.88060E+02 4.03207E+02 1.83536E+01 2.85595E+03 2.93239E+03 3.00882E+03 -1.27983E+03 -2.02785E+03 -2.77588E+03 6.97752E+02 3.59824E+02 2.18963E+01 2.67533E+03 2.74750E+03 2.81967E+03 -1.10751E+03 -1.84612E+03 -2.58473E+03 6.87502E+02 3.51403E+02 1.53039E+01 2.48251E+03 2.54892E+03 2.61534E+03 + 1.48500E+01 -1.28199E+03 -2.12947E+03 -2.97696E+03 7.89317E+02 4.03854E+02 1.83917E+01 2.86062E+03 2.93718E+03 3.01374E+03 -1.28199E+03 -2.03135E+03 -2.78072E+03 6.99009E+02 3.60472E+02 2.19344E+01 2.68000E+03 2.75230E+03 2.82459E+03 -1.10966E+03 -1.84962E+03 -2.58957E+03 6.88759E+02 3.52051E+02 1.53420E+01 2.48718E+03 2.55372E+03 2.62026E+03 + 1.48750E+01 -1.28414E+03 -2.13297E+03 -2.98180E+03 7.90574E+02 4.04502E+02 1.84298E+01 2.86529E+03 2.94197E+03 3.01866E+03 -1.28414E+03 -2.03485E+03 -2.78556E+03 7.00266E+02 3.61119E+02 2.19726E+01 2.68467E+03 2.75709E+03 2.82951E+03 -1.11182E+03 -1.85311E+03 -2.59441E+03 6.90016E+02 3.52698E+02 1.53802E+01 2.49185E+03 2.55851E+03 2.62517E+03 + 1.49000E+01 -1.28629E+03 -2.13647E+03 -2.98664E+03 7.91831E+02 4.05150E+02 1.84680E+01 2.86996E+03 2.94677E+03 3.02358E+03 -1.28629E+03 -2.03835E+03 -2.79040E+03 7.01523E+02 3.61767E+02 2.20107E+01 2.68934E+03 2.76188E+03 2.83442E+03 -1.11397E+03 -1.85661E+03 -2.59926E+03 6.91273E+02 3.53346E+02 1.54183E+01 2.49652E+03 2.56330E+03 2.63009E+03 + 1.49250E+01 -1.28845E+03 -2.13997E+03 -2.99149E+03 7.93088E+02 4.05797E+02 1.85061E+01 2.87462E+03 2.95156E+03 3.02850E+03 -1.28845E+03 -2.04185E+03 -2.79525E+03 7.02780E+02 3.62414E+02 2.20488E+01 2.69401E+03 2.76668E+03 2.83934E+03 -1.11612E+03 -1.86011E+03 -2.60410E+03 6.92530E+02 3.53993E+02 1.54564E+01 2.50118E+03 2.56810E+03 2.63501E+03 + 1.49500E+01 -1.29060E+03 -2.14347E+03 -2.99633E+03 7.94345E+02 4.06445E+02 1.85442E+01 2.87929E+03 2.95635E+03 3.03342E+03 -1.29060E+03 -2.04534E+03 -2.80009E+03 7.04037E+02 3.63062E+02 2.20869E+01 2.69867E+03 2.77147E+03 2.84426E+03 -1.11828E+03 -1.86361E+03 -2.60894E+03 6.93787E+02 3.54641E+02 1.54945E+01 2.50585E+03 2.57289E+03 2.63993E+03 + 1.49750E+01 -1.29276E+03 -2.14696E+03 -3.00117E+03 7.95602E+02 4.07092E+02 1.85823E+01 2.88396E+03 2.96115E+03 3.03834E+03 -1.29276E+03 -2.04884E+03 -2.80493E+03 7.05294E+02 3.63709E+02 2.21250E+01 2.70334E+03 2.77626E+03 2.84918E+03 -1.12043E+03 -1.86711E+03 -2.61378E+03 6.95044E+02 3.55288E+02 1.55326E+01 2.51052E+03 2.57768E+03 2.64485E+03 + 1.50000E+01 -1.38107E+03 -2.19227E+03 -3.00347E+03 7.56830E+02 3.90259E+02 2.36880E+01 2.89473E+03 2.97279E+03 3.05084E+03 -1.20875E+03 -2.01053E+03 -2.81232E+03 7.46580E+02 3.81838E+02 1.70956E+01 2.70191E+03 2.77421E+03 2.84651E+03 -1.20875E+03 -1.91241E+03 -2.61608E+03 6.56272E+02 3.38455E+02 2.06383E+01 2.52129E+03 2.58932E+03 2.65736E+03 + 1.50250E+01 -1.38323E+03 -2.19577E+03 -3.00831E+03 7.58087E+02 3.90906E+02 2.37261E+01 2.89940E+03 2.97758E+03 3.05576E+03 -1.21090E+03 -2.01403E+03 -2.81716E+03 7.47837E+02 3.82485E+02 1.71337E+01 2.70658E+03 2.77900E+03 2.85143E+03 -1.21090E+03 -1.91591E+03 -2.62092E+03 6.57529E+02 3.39103E+02 2.06765E+01 2.52596E+03 2.59412E+03 2.66227E+03 + 1.50500E+01 -1.38538E+03 -2.19927E+03 -3.01315E+03 7.59344E+02 3.91554E+02 2.37642E+01 2.90407E+03 2.98237E+03 3.06068E+03 -1.21306E+03 -2.01753E+03 -2.82200E+03 7.49094E+02 3.83133E+02 1.71718E+01 2.71124E+03 2.78380E+03 2.85635E+03 -1.21306E+03 -1.91941E+03 -2.62576E+03 6.58786E+02 3.39750E+02 2.07146E+01 2.53063E+03 2.59891E+03 2.66719E+03 + 1.50750E+01 -1.38753E+03 -2.20276E+03 -3.01799E+03 7.60601E+02 3.92201E+02 2.38024E+01 2.90873E+03 2.98717E+03 3.06560E+03 -1.21521E+03 -2.02103E+03 -2.82685E+03 7.50351E+02 3.83780E+02 1.72100E+01 2.71591E+03 2.78859E+03 2.86127E+03 -1.21521E+03 -1.92291E+03 -2.63061E+03 6.60042E+02 3.40398E+02 2.07527E+01 2.53529E+03 2.60370E+03 2.67211E+03 + 1.51000E+01 -1.38969E+03 -2.20626E+03 -3.02284E+03 7.61857E+02 3.92849E+02 2.38405E+01 2.91340E+03 2.99196E+03 3.07052E+03 -1.21736E+03 -2.02453E+03 -2.83169E+03 7.51608E+02 3.84428E+02 1.72481E+01 2.72058E+03 2.79338E+03 2.86619E+03 -1.21736E+03 -1.92641E+03 -2.63545E+03 6.61299E+02 3.41045E+02 2.07908E+01 2.53996E+03 2.60850E+03 2.67703E+03 + 1.51250E+01 -1.39184E+03 -2.20976E+03 -3.02768E+03 7.63115E+02 3.93497E+02 2.38786E+01 2.91807E+03 2.99675E+03 3.07544E+03 -1.21952E+03 -2.02802E+03 -2.83653E+03 7.52865E+02 3.85076E+02 1.72862E+01 2.72525E+03 2.79818E+03 2.87110E+03 -1.21952E+03 -1.92990E+03 -2.64029E+03 6.62556E+02 3.41693E+02 2.08290E+01 2.54463E+03 2.61329E+03 2.68195E+03 + 1.51500E+01 -1.39400E+03 -2.21326E+03 -3.03252E+03 7.64371E+02 3.94144E+02 2.39167E+01 2.92274E+03 3.00155E+03 3.08035E+03 -1.22167E+03 -2.03152E+03 -2.84137E+03 7.54122E+02 3.85723E+02 1.73243E+01 2.72992E+03 2.80297E+03 2.87602E+03 -1.22167E+03 -1.93340E+03 -2.64513E+03 6.63813E+02 3.42340E+02 2.08671E+01 2.54930E+03 2.61808E+03 2.68687E+03 + 1.51750E+01 -1.39615E+03 -2.21676E+03 -3.03736E+03 7.65628E+02 3.94792E+02 2.39548E+01 2.92741E+03 3.00634E+03 3.08527E+03 -1.22383E+03 -2.03502E+03 -2.84622E+03 7.55379E+02 3.86371E+02 1.73624E+01 2.73458E+03 2.80776E+03 2.88094E+03 -1.22383E+03 -1.93690E+03 -2.64998E+03 6.65070E+02 3.42988E+02 2.09052E+01 2.55397E+03 2.62288E+03 2.69179E+03 + 1.52000E+01 -1.39830E+03 -2.22026E+03 -3.04221E+03 7.66885E+02 3.95439E+02 2.39930E+01 2.93207E+03 3.01113E+03 3.09019E+03 -1.22598E+03 -2.03852E+03 -2.85106E+03 7.56636E+02 3.87018E+02 1.74006E+01 2.73925E+03 2.81256E+03 2.88586E+03 -1.22598E+03 -1.94040E+03 -2.65482E+03 6.66327E+02 3.43635E+02 2.09433E+01 2.55863E+03 2.62767E+03 2.69670E+03 + 1.52250E+01 -1.40046E+03 -2.22375E+03 -3.04705E+03 7.68142E+02 3.96087E+02 2.40311E+01 2.93674E+03 3.01593E+03 3.09511E+03 -1.22813E+03 -2.04202E+03 -2.85590E+03 7.57893E+02 3.87666E+02 1.74387E+01 2.74392E+03 2.81735E+03 2.89078E+03 -1.22813E+03 -1.94390E+03 -2.65966E+03 6.67584E+02 3.44283E+02 2.09814E+01 2.56330E+03 2.63246E+03 2.70162E+03 + 1.52500E+01 -1.40261E+03 -2.22725E+03 -3.05189E+03 7.69399E+02 3.96734E+02 2.40692E+01 2.94141E+03 3.02072E+03 3.10003E+03 -1.23029E+03 -2.04552E+03 -2.86074E+03 7.59150E+02 3.88313E+02 1.74768E+01 2.74859E+03 2.82214E+03 2.89570E+03 -1.23029E+03 -1.94740E+03 -2.66450E+03 6.68841E+02 3.44930E+02 2.10196E+01 2.56797E+03 2.63726E+03 2.70654E+03 + 1.52750E+01 -1.40477E+03 -2.23075E+03 -3.05673E+03 7.70656E+02 3.97382E+02 2.41074E+01 2.94608E+03 3.02551E+03 3.10495E+03 -1.23244E+03 -2.04901E+03 -2.86559E+03 7.60407E+02 3.88961E+02 1.75149E+01 2.75326E+03 2.82694E+03 2.90062E+03 -1.23244E+03 -1.95089E+03 -2.66934E+03 6.70098E+02 3.45578E+02 2.10577E+01 2.57264E+03 2.64205E+03 2.71146E+03 + 1.53000E+01 -1.40692E+03 -2.23425E+03 -3.06158E+03 7.71913E+02 3.98029E+02 2.41454E+01 2.95075E+03 3.03031E+03 3.10987E+03 -1.23460E+03 -2.05251E+03 -2.87043E+03 7.61664E+02 3.89608E+02 1.75530E+01 2.75792E+03 2.83173E+03 2.90553E+03 -1.23460E+03 -1.95439E+03 -2.67419E+03 6.71355E+02 3.46226E+02 2.10958E+01 2.57731E+03 2.64684E+03 2.71638E+03 + 1.53250E+01 -1.40907E+03 -2.23775E+03 -3.06642E+03 7.73170E+02 3.98677E+02 2.41836E+01 2.95541E+03 3.03510E+03 3.11478E+03 -1.23675E+03 -2.05601E+03 -2.87527E+03 7.62921E+02 3.90256E+02 1.75912E+01 2.76259E+03 2.83652E+03 2.91045E+03 -1.23675E+03 -1.95789E+03 -2.67903E+03 6.72612E+02 3.46873E+02 2.11339E+01 2.58197E+03 2.65164E+03 2.72130E+03 + 1.53500E+01 -1.41123E+03 -2.24124E+03 -3.07126E+03 7.74427E+02 3.99324E+02 2.42217E+01 2.96008E+03 3.03989E+03 3.11970E+03 -1.23890E+03 -2.05951E+03 -2.88011E+03 7.64178E+02 3.90903E+02 1.76293E+01 2.76726E+03 2.84132E+03 2.91537E+03 -1.23890E+03 -1.96139E+03 -2.68387E+03 6.73869E+02 3.47521E+02 2.11720E+01 2.58664E+03 2.65643E+03 2.72622E+03 + 1.53750E+01 -1.41338E+03 -2.24474E+03 -3.07610E+03 7.75684E+02 3.99972E+02 2.42598E+01 2.96475E+03 3.04469E+03 3.12462E+03 -1.24106E+03 -2.06301E+03 -2.88496E+03 7.65435E+02 3.91551E+02 1.76674E+01 2.77193E+03 2.84611E+03 2.92029E+03 -1.24106E+03 -1.96489E+03 -2.68871E+03 6.75126E+02 3.48168E+02 2.12102E+01 2.59131E+03 2.66122E+03 2.73113E+03 + 1.54000E+01 -1.41554E+03 -2.24824E+03 -3.08094E+03 7.76941E+02 4.00620E+02 2.42980E+01 2.96942E+03 3.04948E+03 3.12954E+03 -1.24321E+03 -2.06651E+03 -2.88980E+03 7.66692E+02 3.92199E+02 1.77056E+01 2.77660E+03 2.85090E+03 2.92521E+03 -1.24321E+03 -1.96838E+03 -2.69356E+03 6.76383E+02 3.48816E+02 2.12483E+01 2.59598E+03 2.66602E+03 2.73605E+03 + 1.54250E+01 -1.41769E+03 -2.25174E+03 -3.08579E+03 7.78198E+02 4.01267E+02 2.43360E+01 2.97409E+03 3.05427E+03 3.13446E+03 -1.24537E+03 -2.07000E+03 -2.89464E+03 7.67949E+02 3.92846E+02 1.77436E+01 2.78126E+03 2.85570E+03 2.93013E+03 -1.24537E+03 -1.97188E+03 -2.69840E+03 6.77640E+02 3.49463E+02 2.12864E+01 2.60065E+03 2.67081E+03 2.74097E+03 + 1.54500E+01 -1.41984E+03 -2.25524E+03 -3.09063E+03 7.79455E+02 4.01915E+02 2.43742E+01 2.97875E+03 3.05907E+03 3.13938E+03 -1.24752E+03 -2.07350E+03 -2.89948E+03 7.69206E+02 3.93494E+02 1.77818E+01 2.78593E+03 2.86049E+03 2.93505E+03 -1.24752E+03 -1.97538E+03 -2.70324E+03 6.78897E+02 3.50111E+02 2.13245E+01 2.60531E+03 2.67560E+03 2.74589E+03 + 1.54750E+01 -1.42200E+03 -2.25874E+03 -3.09547E+03 7.80712E+02 4.02562E+02 2.44123E+01 2.98342E+03 3.06386E+03 3.14430E+03 -1.24967E+03 -2.07700E+03 -2.90432E+03 7.70463E+02 3.94141E+02 1.78199E+01 2.79060E+03 2.86528E+03 2.93996E+03 -1.24967E+03 -1.97888E+03 -2.70808E+03 6.80154E+02 3.50758E+02 2.13626E+01 2.60998E+03 2.68040E+03 2.75081E+03 + 1.55000E+01 -1.42415E+03 -2.26223E+03 -3.10031E+03 7.81969E+02 4.03210E+02 2.44504E+01 2.98809E+03 3.06865E+03 3.14921E+03 -1.25183E+03 -2.08050E+03 -2.90917E+03 7.71719E+02 3.94789E+02 1.78580E+01 2.79527E+03 2.87008E+03 2.94488E+03 -1.25183E+03 -1.98238E+03 -2.71293E+03 6.81411E+02 3.51406E+02 2.14008E+01 2.61465E+03 2.68519E+03 2.75573E+03 + 1.55250E+01 -1.42631E+03 -2.26573E+03 -3.10516E+03 7.83226E+02 4.03857E+02 2.44886E+01 2.99276E+03 3.07345E+03 3.15413E+03 -1.25398E+03 -2.08400E+03 -2.91401E+03 7.72976E+02 3.95436E+02 1.78962E+01 2.79994E+03 2.87487E+03 2.94980E+03 -1.25398E+03 -1.98588E+03 -2.71777E+03 6.82668E+02 3.52053E+02 2.14389E+01 2.61932E+03 2.68998E+03 2.76065E+03 + 1.55500E+01 -1.42846E+03 -2.26923E+03 -3.11000E+03 7.84483E+02 4.04505E+02 2.45266E+01 2.99743E+03 3.07824E+03 3.15905E+03 -1.25614E+03 -2.08749E+03 -2.91885E+03 7.74233E+02 3.96084E+02 1.79343E+01 2.80460E+03 2.87966E+03 2.95472E+03 -1.25614E+03 -1.98937E+03 -2.72261E+03 6.83925E+02 3.52701E+02 2.14770E+01 2.62399E+03 2.69478E+03 2.76556E+03 + 1.55750E+01 -1.43061E+03 -2.27273E+03 -3.11484E+03 7.85740E+02 4.05152E+02 2.45648E+01 3.00209E+03 3.08303E+03 3.16397E+03 -1.25829E+03 -2.09099E+03 -2.92369E+03 7.75490E+02 3.96731E+02 1.79724E+01 2.80927E+03 2.88446E+03 2.95964E+03 -1.25829E+03 -1.99287E+03 -2.72745E+03 6.85182E+02 3.53349E+02 2.15151E+01 2.62865E+03 2.69957E+03 2.77048E+03 + 1.56000E+01 -1.43277E+03 -2.27623E+03 -3.11968E+03 7.86997E+02 4.05800E+02 2.46029E+01 3.00676E+03 3.08783E+03 3.16889E+03 -1.26044E+03 -2.09449E+03 -2.92854E+03 7.76747E+02 3.97379E+02 1.80105E+01 2.81394E+03 2.88925E+03 2.96456E+03 -1.26044E+03 -1.99637E+03 -2.73230E+03 6.86439E+02 3.53996E+02 2.15532E+01 2.63332E+03 2.70436E+03 2.77540E+03 + 1.56250E+01 -1.43492E+03 -2.27972E+03 -3.12453E+03 7.88254E+02 4.06448E+02 2.46410E+01 3.01143E+03 3.09262E+03 3.17381E+03 -1.26260E+03 -2.09799E+03 -2.93338E+03 7.78004E+02 3.98026E+02 1.80486E+01 2.81861E+03 2.89404E+03 2.96948E+03 -1.26260E+03 -1.99987E+03 -2.73714E+03 6.87696E+02 3.54644E+02 2.15914E+01 2.63799E+03 2.70916E+03 2.78032E+03 + 1.56500E+01 -1.43708E+03 -2.28322E+03 -3.12937E+03 7.89511E+02 4.07095E+02 2.46792E+01 3.01610E+03 3.09741E+03 3.17873E+03 -1.26475E+03 -2.10149E+03 -2.93822E+03 7.79261E+02 3.98674E+02 1.80868E+01 2.82328E+03 2.89884E+03 2.97439E+03 -1.26475E+03 -2.00337E+03 -2.74198E+03 6.88953E+02 3.55291E+02 2.16295E+01 2.64266E+03 2.71395E+03 2.78524E+03 + 1.56750E+01 -1.43923E+03 -2.28672E+03 -3.13421E+03 7.90768E+02 4.07743E+02 2.47172E+01 3.02077E+03 3.10221E+03 3.18365E+03 -1.26691E+03 -2.10499E+03 -2.94306E+03 7.80518E+02 3.99322E+02 1.81249E+01 2.82794E+03 2.90363E+03 2.97931E+03 -1.26691E+03 -2.00686E+03 -2.74682E+03 6.90210E+02 3.55939E+02 2.16676E+01 2.64733E+03 2.71874E+03 2.79016E+03 + 1.57000E+01 -1.44139E+03 -2.29022E+03 -3.13905E+03 7.92025E+02 4.08390E+02 2.47554E+01 3.02543E+03 3.10700E+03 3.18856E+03 -1.26906E+03 -2.10848E+03 -2.94791E+03 7.81775E+02 3.99969E+02 1.81630E+01 2.83261E+03 2.90842E+03 2.98423E+03 -1.26906E+03 -2.01036E+03 -2.75166E+03 6.91467E+02 3.56586E+02 2.17057E+01 2.65199E+03 2.72354E+03 2.79508E+03 + 1.57250E+01 -1.44354E+03 -2.29372E+03 -3.14390E+03 7.93282E+02 4.09038E+02 2.47935E+01 3.03010E+03 3.11179E+03 3.19348E+03 -1.27122E+03 -2.11198E+03 -2.95275E+03 7.83032E+02 4.00617E+02 1.82011E+01 2.83728E+03 2.91322E+03 2.98915E+03 -1.27122E+03 -2.01386E+03 -2.75651E+03 6.92724E+02 3.57234E+02 2.17438E+01 2.65666E+03 2.72833E+03 2.79999E+03 + 1.57500E+01 -1.44569E+03 -2.29722E+03 -3.14874E+03 7.94539E+02 4.09685E+02 2.48316E+01 3.03477E+03 3.11659E+03 3.19840E+03 -1.27337E+03 -2.11548E+03 -2.95759E+03 7.84289E+02 4.01264E+02 1.82392E+01 2.84195E+03 2.91801E+03 2.99407E+03 -1.27337E+03 -2.01736E+03 -2.76135E+03 6.93981E+02 3.57881E+02 2.17820E+01 2.66133E+03 2.73312E+03 2.80491E+03 + 1.57750E+01 -1.44785E+03 -2.30071E+03 -3.15358E+03 7.95796E+02 4.10333E+02 2.48698E+01 3.03944E+03 3.12138E+03 3.20332E+03 -1.27552E+03 -2.11898E+03 -2.96243E+03 7.85546E+02 4.01912E+02 1.82774E+01 2.84662E+03 2.92280E+03 2.99899E+03 -1.27552E+03 -2.02086E+03 -2.76619E+03 6.95238E+02 3.58529E+02 2.18201E+01 2.66600E+03 2.73792E+03 2.80983E+03 + 1.58000E+01 -1.45000E+03 -2.30421E+03 -3.15842E+03 7.97053E+02 4.10980E+02 2.49078E+01 3.04411E+03 3.12617E+03 3.20824E+03 -1.27768E+03 -2.12248E+03 -2.96728E+03 7.86803E+02 4.02559E+02 1.83155E+01 2.85128E+03 2.92759E+03 3.00391E+03 -1.27768E+03 -2.02436E+03 -2.77103E+03 6.96495E+02 3.59176E+02 2.18582E+01 2.67067E+03 2.74271E+03 2.81475E+03 + 1.58250E+01 -1.45216E+03 -2.30771E+03 -3.16326E+03 7.98310E+02 4.11628E+02 2.49460E+01 3.04877E+03 3.13097E+03 3.21316E+03 -1.27983E+03 -2.12597E+03 -2.97212E+03 7.88060E+02 4.03207E+02 1.83536E+01 2.85595E+03 2.93239E+03 3.00882E+03 -1.27983E+03 -2.02785E+03 -2.77588E+03 6.97752E+02 3.59824E+02 2.18963E+01 2.67533E+03 2.74750E+03 2.81967E+03 + 1.58500E+01 -1.45431E+03 -2.31121E+03 -3.16811E+03 7.99567E+02 4.12275E+02 2.49841E+01 3.05344E+03 3.13576E+03 3.21808E+03 -1.28199E+03 -2.12947E+03 -2.97696E+03 7.89317E+02 4.03854E+02 1.83917E+01 2.86062E+03 2.93718E+03 3.01374E+03 -1.28199E+03 -2.03135E+03 -2.78072E+03 6.99009E+02 3.60472E+02 2.19344E+01 2.68000E+03 2.75230E+03 2.82459E+03 + 1.58750E+01 -1.45646E+03 -2.31471E+03 -3.17295E+03 8.00824E+02 4.12923E+02 2.50222E+01 3.05811E+03 3.14055E+03 3.22299E+03 -1.28414E+03 -2.13297E+03 -2.98180E+03 7.90574E+02 4.04502E+02 1.84298E+01 2.86529E+03 2.94197E+03 3.01866E+03 -1.28414E+03 -2.03485E+03 -2.78556E+03 7.00266E+02 3.61119E+02 2.19726E+01 2.68467E+03 2.75709E+03 2.82951E+03 + 1.59000E+01 -1.45862E+03 -2.31820E+03 -3.17779E+03 8.02081E+02 4.13571E+02 2.50604E+01 3.06278E+03 3.14535E+03 3.22791E+03 -1.28629E+03 -2.13647E+03 -2.98664E+03 7.91831E+02 4.05150E+02 1.84680E+01 2.86996E+03 2.94677E+03 3.02358E+03 -1.28629E+03 -2.03835E+03 -2.79040E+03 7.01523E+02 3.61767E+02 2.20107E+01 2.68934E+03 2.76188E+03 2.83442E+03 + 1.59250E+01 -1.46077E+03 -2.32170E+03 -3.18263E+03 8.03338E+02 4.14218E+02 2.50984E+01 3.06745E+03 3.15014E+03 3.23283E+03 -1.28845E+03 -2.13997E+03 -2.99149E+03 7.93088E+02 4.05797E+02 1.85061E+01 2.87462E+03 2.95156E+03 3.02850E+03 -1.28845E+03 -2.04185E+03 -2.79525E+03 7.02780E+02 3.62414E+02 2.20488E+01 2.69401E+03 2.76668E+03 2.83934E+03 + 1.59500E+01 -1.46293E+03 -2.32520E+03 -3.18748E+03 8.04595E+02 4.14866E+02 2.51366E+01 3.07211E+03 3.15493E+03 3.23775E+03 -1.29060E+03 -2.14347E+03 -2.99633E+03 7.94345E+02 4.06445E+02 1.85442E+01 2.87929E+03 2.95635E+03 3.03342E+03 -1.29060E+03 -2.04534E+03 -2.80009E+03 7.04037E+02 3.63062E+02 2.20869E+01 2.69867E+03 2.77147E+03 2.84426E+03 + 1.59750E+01 -1.46508E+03 -2.32870E+03 -3.19232E+03 8.05852E+02 4.15513E+02 2.51747E+01 3.07678E+03 3.15973E+03 3.24267E+03 -1.29276E+03 -2.14696E+03 -3.00117E+03 7.95602E+02 4.07092E+02 1.85823E+01 2.88396E+03 2.96115E+03 3.03834E+03 -1.29276E+03 -2.04884E+03 -2.80493E+03 7.05294E+02 3.63709E+02 2.21250E+01 2.70334E+03 2.77626E+03 2.84918E+03 + 1.60000E+01 -1.38107E+03 -2.29039E+03 -3.19971E+03 8.47138E+02 4.33642E+02 2.01453E+01 3.07535E+03 3.15767E+03 3.24000E+03 -1.38107E+03 -2.19227E+03 -3.00347E+03 7.56830E+02 3.90259E+02 2.36880E+01 2.89473E+03 2.97279E+03 3.05084E+03 -1.20875E+03 -2.01053E+03 -2.81232E+03 7.46580E+02 3.81838E+02 1.70956E+01 2.70191E+03 2.77421E+03 2.84651E+03 + 1.60250E+01 -1.38323E+03 -2.29389E+03 -3.20455E+03 8.48395E+02 4.34289E+02 2.01834E+01 3.08002E+03 3.16247E+03 3.24492E+03 -1.38323E+03 -2.19577E+03 -3.00831E+03 7.58087E+02 3.90906E+02 2.37261E+01 2.89940E+03 2.97758E+03 3.05576E+03 -1.21090E+03 -2.01403E+03 -2.81716E+03 7.47837E+02 3.82485E+02 1.71337E+01 2.70658E+03 2.77900E+03 2.85143E+03 + 1.60500E+01 -1.38538E+03 -2.29739E+03 -3.20939E+03 8.49652E+02 4.34937E+02 2.02215E+01 3.08468E+03 3.16726E+03 3.24984E+03 -1.38538E+03 -2.19927E+03 -3.01315E+03 7.59344E+02 3.91554E+02 2.37642E+01 2.90407E+03 2.98237E+03 3.06068E+03 -1.21306E+03 -2.01753E+03 -2.82200E+03 7.49094E+02 3.83133E+02 1.71718E+01 2.71124E+03 2.78380E+03 2.85635E+03 + 1.60750E+01 -1.38753E+03 -2.30088E+03 -3.21424E+03 8.50909E+02 4.35584E+02 2.02596E+01 3.08935E+03 3.17205E+03 3.25475E+03 -1.38753E+03 -2.20276E+03 -3.01799E+03 7.60601E+02 3.92201E+02 2.38024E+01 2.90873E+03 2.98717E+03 3.06560E+03 -1.21521E+03 -2.02103E+03 -2.82685E+03 7.50351E+02 3.83780E+02 1.72100E+01 2.71591E+03 2.78859E+03 2.86127E+03 + 1.61000E+01 -1.38969E+03 -2.30438E+03 -3.21908E+03 8.52166E+02 4.36232E+02 2.02977E+01 3.09402E+03 3.17685E+03 3.25967E+03 -1.38969E+03 -2.20626E+03 -3.02284E+03 7.61857E+02 3.92849E+02 2.38405E+01 2.91340E+03 2.99196E+03 3.07052E+03 -1.21736E+03 -2.02453E+03 -2.83169E+03 7.51608E+02 3.84428E+02 1.72481E+01 2.72058E+03 2.79338E+03 2.86619E+03 + 1.61250E+01 -1.39184E+03 -2.30788E+03 -3.22392E+03 8.53423E+02 4.36879E+02 2.03359E+01 3.09869E+03 3.18164E+03 3.26459E+03 -1.39184E+03 -2.20976E+03 -3.02768E+03 7.63115E+02 3.93497E+02 2.38786E+01 2.91807E+03 2.99675E+03 3.07544E+03 -1.21952E+03 -2.02802E+03 -2.83653E+03 7.52865E+02 3.85076E+02 1.72862E+01 2.72525E+03 2.79818E+03 2.87110E+03 + 1.61500E+01 -1.39400E+03 -2.31138E+03 -3.22876E+03 8.54680E+02 4.37527E+02 2.03740E+01 3.10336E+03 3.18643E+03 3.26951E+03 -1.39400E+03 -2.21326E+03 -3.03252E+03 7.64371E+02 3.94144E+02 2.39167E+01 2.92274E+03 3.00155E+03 3.08035E+03 -1.22167E+03 -2.03152E+03 -2.84137E+03 7.54122E+02 3.85723E+02 1.73243E+01 2.72992E+03 2.80297E+03 2.87602E+03 + 1.61750E+01 -1.39615E+03 -2.31488E+03 -3.23360E+03 8.55937E+02 4.38174E+02 2.04121E+01 3.10802E+03 3.19123E+03 3.27443E+03 -1.39615E+03 -2.21676E+03 -3.03736E+03 7.65628E+02 3.94792E+02 2.39548E+01 2.92741E+03 3.00634E+03 3.08527E+03 -1.22383E+03 -2.03502E+03 -2.84622E+03 7.55379E+02 3.86371E+02 1.73624E+01 2.73458E+03 2.80776E+03 2.88094E+03 + 1.62000E+01 -1.39830E+03 -2.31838E+03 -3.23845E+03 8.57194E+02 4.38822E+02 2.04503E+01 3.11269E+03 3.19602E+03 3.27935E+03 -1.39830E+03 -2.22026E+03 -3.04221E+03 7.66885E+02 3.95439E+02 2.39930E+01 2.93207E+03 3.01113E+03 3.09019E+03 -1.22598E+03 -2.03852E+03 -2.85106E+03 7.56636E+02 3.87018E+02 1.74006E+01 2.73925E+03 2.81256E+03 2.88586E+03 + 1.62250E+01 -1.40046E+03 -2.32187E+03 -3.24329E+03 8.58451E+02 4.39470E+02 2.04883E+01 3.11736E+03 3.20081E+03 3.28427E+03 -1.40046E+03 -2.22375E+03 -3.04705E+03 7.68142E+02 3.96087E+02 2.40311E+01 2.93674E+03 3.01593E+03 3.09511E+03 -1.22813E+03 -2.04202E+03 -2.85590E+03 7.57893E+02 3.87666E+02 1.74387E+01 2.74392E+03 2.81735E+03 2.89078E+03 + 1.62500E+01 -1.40261E+03 -2.32537E+03 -3.24813E+03 8.59708E+02 4.40117E+02 2.05265E+01 3.12203E+03 3.20561E+03 3.28918E+03 -1.40261E+03 -2.22725E+03 -3.05189E+03 7.69399E+02 3.96734E+02 2.40692E+01 2.94141E+03 3.02072E+03 3.10003E+03 -1.23029E+03 -2.04552E+03 -2.86074E+03 7.59150E+02 3.88313E+02 1.74768E+01 2.74859E+03 2.82214E+03 2.89570E+03 + 1.62750E+01 -1.40477E+03 -2.32887E+03 -3.25297E+03 8.60965E+02 4.40765E+02 2.05646E+01 3.12670E+03 3.21040E+03 3.29410E+03 -1.40477E+03 -2.23075E+03 -3.05673E+03 7.70656E+02 3.97382E+02 2.41074E+01 2.94608E+03 3.02551E+03 3.10495E+03 -1.23244E+03 -2.04901E+03 -2.86559E+03 7.60407E+02 3.88961E+02 1.75149E+01 2.75326E+03 2.82694E+03 2.90062E+03 + 1.63000E+01 -1.40692E+03 -2.33237E+03 -3.25782E+03 8.62222E+02 4.41412E+02 2.06027E+01 3.13136E+03 3.21519E+03 3.29902E+03 -1.40692E+03 -2.23425E+03 -3.06158E+03 7.71913E+02 3.98029E+02 2.41454E+01 2.95075E+03 3.03031E+03 3.10987E+03 -1.23460E+03 -2.05251E+03 -2.87043E+03 7.61664E+02 3.89608E+02 1.75530E+01 2.75792E+03 2.83173E+03 2.90553E+03 + 1.63250E+01 -1.40907E+03 -2.33587E+03 -3.26266E+03 8.63479E+02 4.42060E+02 2.06409E+01 3.13603E+03 3.21999E+03 3.30394E+03 -1.40907E+03 -2.23775E+03 -3.06642E+03 7.73170E+02 3.98677E+02 2.41836E+01 2.95541E+03 3.03510E+03 3.11478E+03 -1.23675E+03 -2.05601E+03 -2.87527E+03 7.62921E+02 3.90256E+02 1.75912E+01 2.76259E+03 2.83652E+03 2.91045E+03 + 1.63500E+01 -1.41123E+03 -2.33936E+03 -3.26750E+03 8.64736E+02 4.42707E+02 2.06789E+01 3.14070E+03 3.22478E+03 3.30886E+03 -1.41123E+03 -2.24124E+03 -3.07126E+03 7.74427E+02 3.99324E+02 2.42217E+01 2.96008E+03 3.03989E+03 3.11970E+03 -1.23890E+03 -2.05951E+03 -2.88011E+03 7.64178E+02 3.90903E+02 1.76293E+01 2.76726E+03 2.84132E+03 2.91537E+03 + 1.63750E+01 -1.41338E+03 -2.34286E+03 -3.27234E+03 8.65993E+02 4.43355E+02 2.07171E+01 3.14537E+03 3.22957E+03 3.31378E+03 -1.41338E+03 -2.24474E+03 -3.07610E+03 7.75684E+02 3.99972E+02 2.42598E+01 2.96475E+03 3.04469E+03 3.12462E+03 -1.24106E+03 -2.06301E+03 -2.88496E+03 7.65435E+02 3.91551E+02 1.76674E+01 2.77193E+03 2.84611E+03 2.92029E+03 + 1.64000E+01 -1.41554E+03 -2.34636E+03 -3.27719E+03 8.67250E+02 4.44002E+02 2.07552E+01 3.15004E+03 3.23437E+03 3.31870E+03 -1.41554E+03 -2.24824E+03 -3.08094E+03 7.76941E+02 4.00620E+02 2.42980E+01 2.96942E+03 3.04948E+03 3.12954E+03 -1.24321E+03 -2.06651E+03 -2.88980E+03 7.66692E+02 3.92199E+02 1.77056E+01 2.77660E+03 2.85090E+03 2.92521E+03 + 1.64250E+01 -1.41769E+03 -2.34986E+03 -3.28203E+03 8.68507E+02 4.44650E+02 2.07933E+01 3.15470E+03 3.23916E+03 3.32361E+03 -1.41769E+03 -2.25174E+03 -3.08579E+03 7.78198E+02 4.01267E+02 2.43360E+01 2.97409E+03 3.05427E+03 3.13446E+03 -1.24537E+03 -2.07000E+03 -2.89464E+03 7.67949E+02 3.92846E+02 1.77436E+01 2.78126E+03 2.85570E+03 2.93013E+03 + 1.64500E+01 -1.41984E+03 -2.35336E+03 -3.28687E+03 8.69764E+02 4.45298E+02 2.08315E+01 3.15937E+03 3.24395E+03 3.32853E+03 -1.41984E+03 -2.25524E+03 -3.09063E+03 7.79455E+02 4.01915E+02 2.43742E+01 2.97875E+03 3.05907E+03 3.13938E+03 -1.24752E+03 -2.07350E+03 -2.89948E+03 7.69206E+02 3.93494E+02 1.77818E+01 2.78593E+03 2.86049E+03 2.93505E+03 + 1.64750E+01 -1.42200E+03 -2.35686E+03 -3.29171E+03 8.71021E+02 4.45945E+02 2.08695E+01 3.16404E+03 3.24875E+03 3.33345E+03 -1.42200E+03 -2.25874E+03 -3.09547E+03 7.80712E+02 4.02562E+02 2.44123E+01 2.98342E+03 3.06386E+03 3.14430E+03 -1.24967E+03 -2.07700E+03 -2.90432E+03 7.70463E+02 3.94141E+02 1.78199E+01 2.79060E+03 2.86528E+03 2.93996E+03 + 1.65000E+01 -1.42415E+03 -2.36035E+03 -3.29656E+03 8.72278E+02 4.46593E+02 2.09077E+01 3.16871E+03 3.25354E+03 3.33837E+03 -1.42415E+03 -2.26223E+03 -3.10031E+03 7.81969E+02 4.03210E+02 2.44504E+01 2.98809E+03 3.06865E+03 3.14921E+03 -1.25183E+03 -2.08050E+03 -2.90917E+03 7.71719E+02 3.94789E+02 1.78580E+01 2.79527E+03 2.87008E+03 2.94488E+03 + 1.65250E+01 -1.42631E+03 -2.36385E+03 -3.30140E+03 8.73535E+02 4.47240E+02 2.09458E+01 3.17338E+03 3.25833E+03 3.34329E+03 -1.42631E+03 -2.26573E+03 -3.10516E+03 7.83226E+02 4.03857E+02 2.44886E+01 2.99276E+03 3.07345E+03 3.15413E+03 -1.25398E+03 -2.08400E+03 -2.91401E+03 7.72976E+02 3.95436E+02 1.78962E+01 2.79994E+03 2.87487E+03 2.94980E+03 + 1.65500E+01 -1.42846E+03 -2.36735E+03 -3.30624E+03 8.74791E+02 4.47888E+02 2.09839E+01 3.17804E+03 3.26313E+03 3.34821E+03 -1.42846E+03 -2.26923E+03 -3.11000E+03 7.84483E+02 4.04505E+02 2.45266E+01 2.99743E+03 3.07824E+03 3.15905E+03 -1.25614E+03 -2.08749E+03 -2.91885E+03 7.74233E+02 3.96084E+02 1.79343E+01 2.80460E+03 2.87966E+03 2.95472E+03 + 1.65750E+01 -1.43061E+03 -2.37085E+03 -3.31108E+03 8.76049E+02 4.48535E+02 2.10221E+01 3.18271E+03 3.26792E+03 3.35313E+03 -1.43061E+03 -2.27273E+03 -3.11484E+03 7.85740E+02 4.05152E+02 2.45648E+01 3.00209E+03 3.08303E+03 3.16397E+03 -1.25829E+03 -2.09099E+03 -2.92369E+03 7.75490E+02 3.96731E+02 1.79724E+01 2.80927E+03 2.88446E+03 2.95964E+03 + 1.66000E+01 -1.43277E+03 -2.37435E+03 -3.31593E+03 8.77305E+02 4.49183E+02 2.10601E+01 3.18738E+03 3.27271E+03 3.35805E+03 -1.43277E+03 -2.27623E+03 -3.11968E+03 7.86997E+02 4.05800E+02 2.46029E+01 3.00676E+03 3.08783E+03 3.16889E+03 -1.26044E+03 -2.09449E+03 -2.92854E+03 7.76747E+02 3.97379E+02 1.80105E+01 2.81394E+03 2.88925E+03 2.96456E+03 + 1.66250E+01 -1.43492E+03 -2.37784E+03 -3.32077E+03 8.78562E+02 4.49830E+02 2.10983E+01 3.19205E+03 3.27751E+03 3.36296E+03 -1.43492E+03 -2.27972E+03 -3.12453E+03 7.88254E+02 4.06448E+02 2.46410E+01 3.01143E+03 3.09262E+03 3.17381E+03 -1.26260E+03 -2.09799E+03 -2.93338E+03 7.78004E+02 3.98026E+02 1.80486E+01 2.81861E+03 2.89404E+03 2.96948E+03 + 1.66500E+01 -1.43708E+03 -2.38134E+03 -3.32561E+03 8.79819E+02 4.50478E+02 2.11364E+01 3.19672E+03 3.28230E+03 3.36788E+03 -1.43708E+03 -2.28322E+03 -3.12937E+03 7.89511E+02 4.07095E+02 2.46792E+01 3.01610E+03 3.09741E+03 3.17873E+03 -1.26475E+03 -2.10149E+03 -2.93822E+03 7.79261E+02 3.98674E+02 1.80868E+01 2.82328E+03 2.89884E+03 2.97439E+03 + 1.66750E+01 -1.43923E+03 -2.38484E+03 -3.33045E+03 8.81076E+02 4.51125E+02 2.11745E+01 3.20138E+03 3.28709E+03 3.37280E+03 -1.43923E+03 -2.28672E+03 -3.13421E+03 7.90768E+02 4.07743E+02 2.47172E+01 3.02077E+03 3.10221E+03 3.18365E+03 -1.26691E+03 -2.10499E+03 -2.94306E+03 7.80518E+02 3.99322E+02 1.81249E+01 2.82794E+03 2.90363E+03 2.97931E+03 + 1.67000E+01 -1.44139E+03 -2.38834E+03 -3.33529E+03 8.82333E+02 4.51773E+02 2.12127E+01 3.20605E+03 3.29189E+03 3.37772E+03 -1.44139E+03 -2.29022E+03 -3.13905E+03 7.92025E+02 4.08390E+02 2.47554E+01 3.02543E+03 3.10700E+03 3.18856E+03 -1.26906E+03 -2.10848E+03 -2.94791E+03 7.81775E+02 3.99969E+02 1.81630E+01 2.83261E+03 2.90842E+03 2.98423E+03 + 1.67250E+01 -1.44354E+03 -2.39184E+03 -3.34014E+03 8.83590E+02 4.52421E+02 2.12507E+01 3.21072E+03 3.29668E+03 3.38264E+03 -1.44354E+03 -2.29372E+03 -3.14390E+03 7.93282E+02 4.09038E+02 2.47935E+01 3.03010E+03 3.11179E+03 3.19348E+03 -1.27122E+03 -2.11198E+03 -2.95275E+03 7.83032E+02 4.00617E+02 1.82011E+01 2.83728E+03 2.91322E+03 2.98915E+03 + 1.67500E+01 -1.44569E+03 -2.39534E+03 -3.34498E+03 8.84847E+02 4.53068E+02 2.12889E+01 3.21539E+03 3.30147E+03 3.38756E+03 -1.44569E+03 -2.29722E+03 -3.14874E+03 7.94539E+02 4.09685E+02 2.48316E+01 3.03477E+03 3.11659E+03 3.19840E+03 -1.27337E+03 -2.11548E+03 -2.95759E+03 7.84289E+02 4.01264E+02 1.82392E+01 2.84195E+03 2.91801E+03 2.99407E+03 + 1.67750E+01 -1.44785E+03 -2.39883E+03 -3.34982E+03 8.86104E+02 4.53716E+02 2.13270E+01 3.22006E+03 3.30627E+03 3.39248E+03 -1.44785E+03 -2.30071E+03 -3.15358E+03 7.95796E+02 4.10333E+02 2.48698E+01 3.03944E+03 3.12138E+03 3.20332E+03 -1.27552E+03 -2.11898E+03 -2.96243E+03 7.85546E+02 4.01912E+02 1.82774E+01 2.84662E+03 2.92280E+03 2.99899E+03 + 1.68000E+01 -1.45000E+03 -2.40233E+03 -3.35466E+03 8.87361E+02 4.54363E+02 2.13651E+01 3.22472E+03 3.31106E+03 3.39739E+03 -1.45000E+03 -2.30421E+03 -3.15842E+03 7.97053E+02 4.10980E+02 2.49078E+01 3.04411E+03 3.12617E+03 3.20824E+03 -1.27768E+03 -2.12248E+03 -2.96728E+03 7.86803E+02 4.02559E+02 1.83155E+01 2.85128E+03 2.92759E+03 3.00391E+03 + 1.68250E+01 -1.45216E+03 -2.40583E+03 -3.35951E+03 8.88618E+02 4.55011E+02 2.14033E+01 3.22939E+03 3.31585E+03 3.40231E+03 -1.45216E+03 -2.30771E+03 -3.16326E+03 7.98310E+02 4.11628E+02 2.49460E+01 3.04877E+03 3.13097E+03 3.21316E+03 -1.27983E+03 -2.12597E+03 -2.97212E+03 7.88060E+02 4.03207E+02 1.83536E+01 2.85595E+03 2.93239E+03 3.00882E+03 + 1.68500E+01 -1.45431E+03 -2.40933E+03 -3.36435E+03 8.89875E+02 4.55658E+02 2.14413E+01 3.23406E+03 3.32065E+03 3.40723E+03 -1.45431E+03 -2.31121E+03 -3.16811E+03 7.99567E+02 4.12275E+02 2.49841E+01 3.05344E+03 3.13576E+03 3.21808E+03 -1.28199E+03 -2.12947E+03 -2.97696E+03 7.89317E+02 4.03854E+02 1.83917E+01 2.86062E+03 2.93718E+03 3.01374E+03 + 1.68750E+01 -1.45646E+03 -2.41283E+03 -3.36919E+03 8.91132E+02 4.56306E+02 2.14795E+01 3.23873E+03 3.32544E+03 3.41215E+03 -1.45646E+03 -2.31471E+03 -3.17295E+03 8.00824E+02 4.12923E+02 2.50222E+01 3.05811E+03 3.14055E+03 3.22299E+03 -1.28414E+03 -2.13297E+03 -2.98180E+03 7.90574E+02 4.04502E+02 1.84298E+01 2.86529E+03 2.94197E+03 3.01866E+03 + 1.69000E+01 -1.45862E+03 -2.41633E+03 -3.37403E+03 8.92389E+02 4.56953E+02 2.15176E+01 3.24340E+03 3.33023E+03 3.41707E+03 -1.45862E+03 -2.31820E+03 -3.17779E+03 8.02081E+02 4.13571E+02 2.50604E+01 3.06278E+03 3.14535E+03 3.22791E+03 -1.28629E+03 -2.13647E+03 -2.98664E+03 7.91831E+02 4.05150E+02 1.84680E+01 2.86996E+03 2.94677E+03 3.02358E+03 + 1.69250E+01 -1.46077E+03 -2.41982E+03 -3.37888E+03 8.93646E+02 4.57601E+02 2.15557E+01 3.24806E+03 3.33503E+03 3.42199E+03 -1.46077E+03 -2.32170E+03 -3.18263E+03 8.03338E+02 4.14218E+02 2.50984E+01 3.06745E+03 3.15014E+03 3.23283E+03 -1.28845E+03 -2.13997E+03 -2.99149E+03 7.93088E+02 4.05797E+02 1.85061E+01 2.87462E+03 2.95156E+03 3.02850E+03 + 1.69500E+01 -1.46293E+03 -2.42332E+03 -3.38372E+03 8.94903E+02 4.58249E+02 2.15939E+01 3.25273E+03 3.33982E+03 3.42691E+03 -1.46293E+03 -2.32520E+03 -3.18748E+03 8.04595E+02 4.14866E+02 2.51366E+01 3.07211E+03 3.15493E+03 3.23775E+03 -1.29060E+03 -2.14347E+03 -2.99633E+03 7.94345E+02 4.06445E+02 1.85442E+01 2.87929E+03 2.95635E+03 3.03342E+03 + 1.69750E+01 -1.46508E+03 -2.42682E+03 -3.38856E+03 8.96160E+02 4.58896E+02 2.16320E+01 3.25740E+03 3.34461E+03 3.43182E+03 -1.46508E+03 -2.32870E+03 -3.19232E+03 8.05852E+02 4.15513E+02 2.51747E+01 3.07678E+03 3.15973E+03 3.24267E+03 -1.29276E+03 -2.14696E+03 -3.00117E+03 7.95602E+02 4.07092E+02 1.85823E+01 2.88396E+03 2.96115E+03 3.03834E+03 + 1.70000E+01 -1.55340E+03 -2.47213E+03 -3.39086E+03 8.57388E+02 4.42063E+02 2.67377E+01 3.26817E+03 3.35625E+03 3.44433E+03 -1.38107E+03 -2.29039E+03 -3.19971E+03 8.47138E+02 4.33642E+02 2.01453E+01 3.07535E+03 3.15767E+03 3.24000E+03 -1.38107E+03 -2.19227E+03 -3.00347E+03 7.56830E+02 3.90259E+02 2.36880E+01 2.89473E+03 2.97279E+03 3.05084E+03 + 1.70250E+01 -1.55555E+03 -2.47562E+03 -3.39570E+03 8.58645E+02 4.42710E+02 2.67758E+01 3.27284E+03 3.36104E+03 3.44925E+03 -1.38323E+03 -2.29389E+03 -3.20455E+03 8.48395E+02 4.34289E+02 2.01834E+01 3.08002E+03 3.16247E+03 3.24492E+03 -1.38323E+03 -2.19577E+03 -3.00831E+03 7.58087E+02 3.90906E+02 2.37261E+01 2.89940E+03 2.97758E+03 3.05576E+03 + 1.70500E+01 -1.55770E+03 -2.47912E+03 -3.40054E+03 8.59902E+02 4.43358E+02 2.68139E+01 3.27751E+03 3.36584E+03 3.45417E+03 -1.38538E+03 -2.29739E+03 -3.20939E+03 8.49652E+02 4.34937E+02 2.02215E+01 3.08468E+03 3.16726E+03 3.24984E+03 -1.38538E+03 -2.19927E+03 -3.01315E+03 7.59344E+02 3.91554E+02 2.37642E+01 2.90407E+03 2.98237E+03 3.06068E+03 + 1.70750E+01 -1.55986E+03 -2.48262E+03 -3.40538E+03 8.61159E+02 4.44005E+02 2.68521E+01 3.28217E+03 3.37063E+03 3.45909E+03 -1.38753E+03 -2.30088E+03 -3.21424E+03 8.50909E+02 4.35584E+02 2.02596E+01 3.08935E+03 3.17205E+03 3.25475E+03 -1.38753E+03 -2.20276E+03 -3.01799E+03 7.60601E+02 3.92201E+02 2.38024E+01 2.90873E+03 2.98717E+03 3.06560E+03 + 1.71000E+01 -1.56201E+03 -2.48612E+03 -3.41022E+03 8.62416E+02 4.44653E+02 2.68901E+01 3.28684E+03 3.37542E+03 3.46401E+03 -1.38969E+03 -2.30438E+03 -3.21908E+03 8.52166E+02 4.36232E+02 2.02977E+01 3.09402E+03 3.17685E+03 3.25967E+03 -1.38969E+03 -2.20626E+03 -3.02284E+03 7.61857E+02 3.92849E+02 2.38405E+01 2.91340E+03 2.99196E+03 3.07052E+03 + 1.71250E+01 -1.56417E+03 -2.48962E+03 -3.41507E+03 8.63673E+02 4.45300E+02 2.69283E+01 3.29151E+03 3.38022E+03 3.46892E+03 -1.39184E+03 -2.30788E+03 -3.22392E+03 8.53423E+02 4.36879E+02 2.03359E+01 3.09869E+03 3.18164E+03 3.26459E+03 -1.39184E+03 -2.20976E+03 -3.02768E+03 7.63115E+02 3.93497E+02 2.38786E+01 2.91807E+03 2.99675E+03 3.07544E+03 + 1.71500E+01 -1.56632E+03 -2.49311E+03 -3.41991E+03 8.64930E+02 4.45948E+02 2.69664E+01 3.29618E+03 3.38501E+03 3.47384E+03 -1.39400E+03 -2.31138E+03 -3.22876E+03 8.54680E+02 4.37527E+02 2.03740E+01 3.10336E+03 3.18643E+03 3.26951E+03 -1.39400E+03 -2.21326E+03 -3.03252E+03 7.64371E+02 3.94144E+02 2.39167E+01 2.92274E+03 3.00155E+03 3.08035E+03 + 1.71750E+01 -1.56847E+03 -2.49661E+03 -3.42475E+03 8.66186E+02 4.46595E+02 2.70045E+01 3.30085E+03 3.38980E+03 3.47876E+03 -1.39615E+03 -2.31488E+03 -3.23360E+03 8.55937E+02 4.38174E+02 2.04121E+01 3.10802E+03 3.19123E+03 3.27443E+03 -1.39615E+03 -2.21676E+03 -3.03736E+03 7.65628E+02 3.94792E+02 2.39548E+01 2.92741E+03 3.00634E+03 3.08527E+03 + 1.72000E+01 -1.57063E+03 -2.50011E+03 -3.42959E+03 8.67444E+02 4.47243E+02 2.70427E+01 3.30551E+03 3.39460E+03 3.48368E+03 -1.39830E+03 -2.31838E+03 -3.23845E+03 8.57194E+02 4.38822E+02 2.04503E+01 3.11269E+03 3.19602E+03 3.27935E+03 -1.39830E+03 -2.22026E+03 -3.04221E+03 7.66885E+02 3.95439E+02 2.39930E+01 2.93207E+03 3.01113E+03 3.09019E+03 + 1.72250E+01 -1.57278E+03 -2.50361E+03 -3.43444E+03 8.68700E+02 4.47891E+02 2.70807E+01 3.31018E+03 3.39939E+03 3.48860E+03 -1.40046E+03 -2.32187E+03 -3.24329E+03 8.58451E+02 4.39470E+02 2.04883E+01 3.11736E+03 3.20081E+03 3.28427E+03 -1.40046E+03 -2.22375E+03 -3.04705E+03 7.68142E+02 3.96087E+02 2.40311E+01 2.93674E+03 3.01593E+03 3.09511E+03 + 1.72500E+01 -1.57494E+03 -2.50711E+03 -3.43928E+03 8.69957E+02 4.48538E+02 2.71189E+01 3.31485E+03 3.40418E+03 3.49352E+03 -1.40261E+03 -2.32537E+03 -3.24813E+03 8.59708E+02 4.40117E+02 2.05265E+01 3.12203E+03 3.20561E+03 3.28918E+03 -1.40261E+03 -2.22725E+03 -3.05189E+03 7.69399E+02 3.96734E+02 2.40692E+01 2.94141E+03 3.02072E+03 3.10003E+03 + 1.72750E+01 -1.57709E+03 -2.51061E+03 -3.44412E+03 8.71214E+02 4.49186E+02 2.71570E+01 3.31952E+03 3.40898E+03 3.49844E+03 -1.40477E+03 -2.32887E+03 -3.25297E+03 8.60965E+02 4.40765E+02 2.05646E+01 3.12670E+03 3.21040E+03 3.29410E+03 -1.40477E+03 -2.23075E+03 -3.05673E+03 7.70656E+02 3.97382E+02 2.41074E+01 2.94608E+03 3.02551E+03 3.10495E+03 + 1.73000E+01 -1.57924E+03 -2.51410E+03 -3.44896E+03 8.72471E+02 4.49833E+02 2.71951E+01 3.32419E+03 3.41377E+03 3.50335E+03 -1.40692E+03 -2.33237E+03 -3.25782E+03 8.62222E+02 4.41412E+02 2.06027E+01 3.13136E+03 3.21519E+03 3.29902E+03 -1.40692E+03 -2.23425E+03 -3.06158E+03 7.71913E+02 3.98029E+02 2.41454E+01 2.95075E+03 3.03031E+03 3.10987E+03 + 1.73250E+01 -1.58140E+03 -2.51760E+03 -3.45381E+03 8.73728E+02 4.50481E+02 2.72333E+01 3.32885E+03 3.41856E+03 3.50827E+03 -1.40907E+03 -2.33587E+03 -3.26266E+03 8.63479E+02 4.42060E+02 2.06409E+01 3.13603E+03 3.21999E+03 3.30394E+03 -1.40907E+03 -2.23775E+03 -3.06642E+03 7.73170E+02 3.98677E+02 2.41836E+01 2.95541E+03 3.03510E+03 3.11478E+03 + 1.73500E+01 -1.58355E+03 -2.52110E+03 -3.45865E+03 8.74985E+02 4.51128E+02 2.72713E+01 3.33352E+03 3.42336E+03 3.51319E+03 -1.41123E+03 -2.33936E+03 -3.26750E+03 8.64736E+02 4.42707E+02 2.06789E+01 3.14070E+03 3.22478E+03 3.30886E+03 -1.41123E+03 -2.24124E+03 -3.07126E+03 7.74427E+02 3.99324E+02 2.42217E+01 2.96008E+03 3.03989E+03 3.11970E+03 + 1.73750E+01 -1.58571E+03 -2.52460E+03 -3.46349E+03 8.76242E+02 4.51776E+02 2.73095E+01 3.33819E+03 3.42815E+03 3.51811E+03 -1.41338E+03 -2.34286E+03 -3.27234E+03 8.65993E+02 4.43355E+02 2.07171E+01 3.14537E+03 3.22957E+03 3.31378E+03 -1.41338E+03 -2.24474E+03 -3.07610E+03 7.75684E+02 3.99972E+02 2.42598E+01 2.96475E+03 3.04469E+03 3.12462E+03 + 1.74000E+01 -1.58786E+03 -2.52810E+03 -3.46833E+03 8.77499E+02 4.52423E+02 2.73476E+01 3.34286E+03 3.43294E+03 3.52303E+03 -1.41554E+03 -2.34636E+03 -3.27719E+03 8.67250E+02 4.44002E+02 2.07552E+01 3.15004E+03 3.23437E+03 3.31870E+03 -1.41554E+03 -2.24824E+03 -3.08094E+03 7.76941E+02 4.00620E+02 2.42980E+01 2.96942E+03 3.04948E+03 3.12954E+03 + 1.74250E+01 -1.59001E+03 -2.53159E+03 -3.47318E+03 8.78756E+02 4.53071E+02 2.73857E+01 3.34753E+03 3.43774E+03 3.52795E+03 -1.41769E+03 -2.34986E+03 -3.28203E+03 8.68507E+02 4.44650E+02 2.07933E+01 3.15470E+03 3.23916E+03 3.32361E+03 -1.41769E+03 -2.25174E+03 -3.08579E+03 7.78198E+02 4.01267E+02 2.43360E+01 2.97409E+03 3.05427E+03 3.13446E+03 + 1.74500E+01 -1.59217E+03 -2.53509E+03 -3.47802E+03 8.80013E+02 4.53719E+02 2.74239E+01 3.35219E+03 3.44253E+03 3.53287E+03 -1.41984E+03 -2.35336E+03 -3.28687E+03 8.69764E+02 4.45298E+02 2.08315E+01 3.15937E+03 3.24395E+03 3.32853E+03 -1.41984E+03 -2.25524E+03 -3.09063E+03 7.79455E+02 4.01915E+02 2.43742E+01 2.97875E+03 3.05907E+03 3.13938E+03 + 1.74750E+01 -1.59432E+03 -2.53859E+03 -3.48286E+03 8.81270E+02 4.54366E+02 2.74619E+01 3.35686E+03 3.44732E+03 3.53778E+03 -1.42200E+03 -2.35686E+03 -3.29171E+03 8.71021E+02 4.45945E+02 2.08695E+01 3.16404E+03 3.24875E+03 3.33345E+03 -1.42200E+03 -2.25874E+03 -3.09547E+03 7.80712E+02 4.02562E+02 2.44123E+01 2.98342E+03 3.06386E+03 3.14430E+03 + 1.75000E+01 -1.59648E+03 -2.54209E+03 -3.48770E+03 8.82527E+02 4.55014E+02 2.75001E+01 3.36153E+03 3.45212E+03 3.54270E+03 -1.42415E+03 -2.36035E+03 -3.29656E+03 8.72278E+02 4.46593E+02 2.09077E+01 3.16871E+03 3.25354E+03 3.33837E+03 -1.42415E+03 -2.26223E+03 -3.10031E+03 7.81969E+02 4.03210E+02 2.44504E+01 2.98809E+03 3.06865E+03 3.14921E+03 + 1.75250E+01 -1.59863E+03 -2.54559E+03 -3.49254E+03 8.83784E+02 4.55661E+02 2.75382E+01 3.36620E+03 3.45691E+03 3.54762E+03 -1.42631E+03 -2.36385E+03 -3.30140E+03 8.73535E+02 4.47240E+02 2.09458E+01 3.17338E+03 3.25833E+03 3.34329E+03 -1.42631E+03 -2.26573E+03 -3.10516E+03 7.83226E+02 4.03857E+02 2.44886E+01 2.99276E+03 3.07345E+03 3.15413E+03 + 1.75500E+01 -1.60078E+03 -2.54909E+03 -3.49739E+03 8.85041E+02 4.56309E+02 2.75763E+01 3.37087E+03 3.46170E+03 3.55254E+03 -1.42846E+03 -2.36735E+03 -3.30624E+03 8.74791E+02 4.47888E+02 2.09839E+01 3.17804E+03 3.26313E+03 3.34821E+03 -1.42846E+03 -2.26923E+03 -3.11000E+03 7.84483E+02 4.04505E+02 2.45266E+01 2.99743E+03 3.07824E+03 3.15905E+03 + 1.75750E+01 -1.60294E+03 -2.55258E+03 -3.50223E+03 8.86298E+02 4.56956E+02 2.76145E+01 3.37553E+03 3.46650E+03 3.55746E+03 -1.43061E+03 -2.37085E+03 -3.31108E+03 8.76049E+02 4.48535E+02 2.10221E+01 3.18271E+03 3.26792E+03 3.35313E+03 -1.43061E+03 -2.27273E+03 -3.11484E+03 7.85740E+02 4.05152E+02 2.45648E+01 3.00209E+03 3.08303E+03 3.16397E+03 + 1.76000E+01 -1.60509E+03 -2.55608E+03 -3.50707E+03 8.87555E+02 4.57604E+02 2.76525E+01 3.38020E+03 3.47129E+03 3.56238E+03 -1.43277E+03 -2.37435E+03 -3.31593E+03 8.77305E+02 4.49183E+02 2.10601E+01 3.18738E+03 3.27271E+03 3.35805E+03 -1.43277E+03 -2.27623E+03 -3.11968E+03 7.86997E+02 4.05800E+02 2.46029E+01 3.00676E+03 3.08783E+03 3.16889E+03 + 1.76250E+01 -1.60725E+03 -2.55958E+03 -3.51191E+03 8.88812E+02 4.58251E+02 2.76907E+01 3.38487E+03 3.47608E+03 3.56730E+03 -1.43492E+03 -2.37784E+03 -3.32077E+03 8.78562E+02 4.49830E+02 2.10983E+01 3.19205E+03 3.27751E+03 3.36296E+03 -1.43492E+03 -2.27972E+03 -3.12453E+03 7.88254E+02 4.06448E+02 2.46410E+01 3.01143E+03 3.09262E+03 3.17381E+03 + 1.76500E+01 -1.60940E+03 -2.56308E+03 -3.51676E+03 8.90069E+02 4.58899E+02 2.77288E+01 3.38954E+03 3.48088E+03 3.57221E+03 -1.43708E+03 -2.38134E+03 -3.32561E+03 8.79819E+02 4.50478E+02 2.11364E+01 3.19672E+03 3.28230E+03 3.36788E+03 -1.43708E+03 -2.28322E+03 -3.12937E+03 7.89511E+02 4.07095E+02 2.46792E+01 3.01610E+03 3.09741E+03 3.17873E+03 + 1.76750E+01 -1.61155E+03 -2.56658E+03 -3.52160E+03 8.91326E+02 4.59546E+02 2.77669E+01 3.39421E+03 3.48567E+03 3.57713E+03 -1.43923E+03 -2.38484E+03 -3.33045E+03 8.81076E+02 4.51125E+02 2.11745E+01 3.20138E+03 3.28709E+03 3.37280E+03 -1.43923E+03 -2.28672E+03 -3.13421E+03 7.90768E+02 4.07743E+02 2.47172E+01 3.02077E+03 3.10221E+03 3.18365E+03 + 1.77000E+01 -1.61371E+03 -2.57008E+03 -3.52644E+03 8.92583E+02 4.60194E+02 2.78051E+01 3.39887E+03 3.49046E+03 3.58205E+03 -1.44139E+03 -2.38834E+03 -3.33529E+03 8.82333E+02 4.51773E+02 2.12127E+01 3.20605E+03 3.29189E+03 3.37772E+03 -1.44139E+03 -2.29022E+03 -3.13905E+03 7.92025E+02 4.08390E+02 2.47554E+01 3.02543E+03 3.10700E+03 3.18856E+03 + 1.77250E+01 -1.61586E+03 -2.57357E+03 -3.53128E+03 8.93840E+02 4.60842E+02 2.78431E+01 3.40354E+03 3.49526E+03 3.58697E+03 -1.44354E+03 -2.39184E+03 -3.34014E+03 8.83590E+02 4.52421E+02 2.12507E+01 3.21072E+03 3.29668E+03 3.38264E+03 -1.44354E+03 -2.29372E+03 -3.14390E+03 7.93282E+02 4.09038E+02 2.47935E+01 3.03010E+03 3.11179E+03 3.19348E+03 + 1.77500E+01 -1.61802E+03 -2.57707E+03 -3.53613E+03 8.95097E+02 4.61489E+02 2.78813E+01 3.40821E+03 3.50005E+03 3.59189E+03 -1.44569E+03 -2.39534E+03 -3.34498E+03 8.84847E+02 4.53068E+02 2.12889E+01 3.21539E+03 3.30147E+03 3.38756E+03 -1.44569E+03 -2.29722E+03 -3.14874E+03 7.94539E+02 4.09685E+02 2.48316E+01 3.03477E+03 3.11659E+03 3.19840E+03 + 1.77750E+01 -1.62017E+03 -2.58057E+03 -3.54097E+03 8.96354E+02 4.62137E+02 2.79194E+01 3.41288E+03 3.50484E+03 3.59681E+03 -1.44785E+03 -2.39883E+03 -3.34982E+03 8.86104E+02 4.53716E+02 2.13270E+01 3.22006E+03 3.30627E+03 3.39248E+03 -1.44785E+03 -2.30071E+03 -3.15358E+03 7.95796E+02 4.10333E+02 2.48698E+01 3.03944E+03 3.12138E+03 3.20332E+03 + 1.78000E+01 -1.62232E+03 -2.58407E+03 -3.54581E+03 8.97611E+02 4.62784E+02 2.79575E+01 3.41755E+03 3.50964E+03 3.60173E+03 -1.45000E+03 -2.40233E+03 -3.35466E+03 8.87361E+02 4.54363E+02 2.13651E+01 3.22472E+03 3.31106E+03 3.39739E+03 -1.45000E+03 -2.30421E+03 -3.15842E+03 7.97053E+02 4.10980E+02 2.49078E+01 3.04411E+03 3.12617E+03 3.20824E+03 + 1.78250E+01 -1.62448E+03 -2.58757E+03 -3.55065E+03 8.98868E+02 4.63432E+02 2.79957E+01 3.42221E+03 3.51443E+03 3.60664E+03 -1.45216E+03 -2.40583E+03 -3.35951E+03 8.88618E+02 4.55011E+02 2.14033E+01 3.22939E+03 3.31585E+03 3.40231E+03 -1.45216E+03 -2.30771E+03 -3.16326E+03 7.98310E+02 4.11628E+02 2.49460E+01 3.04877E+03 3.13097E+03 3.21316E+03 + 1.78500E+01 -1.62663E+03 -2.59106E+03 -3.55550E+03 9.00125E+02 4.64079E+02 2.80337E+01 3.42688E+03 3.51922E+03 3.61156E+03 -1.45431E+03 -2.40933E+03 -3.36435E+03 8.89875E+02 4.55658E+02 2.14413E+01 3.23406E+03 3.32065E+03 3.40723E+03 -1.45431E+03 -2.31121E+03 -3.16811E+03 7.99567E+02 4.12275E+02 2.49841E+01 3.05344E+03 3.13576E+03 3.21808E+03 + 1.78750E+01 -1.62879E+03 -2.59456E+03 -3.56034E+03 9.01382E+02 4.64727E+02 2.80719E+01 3.43155E+03 3.52402E+03 3.61648E+03 -1.45646E+03 -2.41283E+03 -3.36919E+03 8.91132E+02 4.56306E+02 2.14795E+01 3.23873E+03 3.32544E+03 3.41215E+03 -1.45646E+03 -2.31471E+03 -3.17295E+03 8.00824E+02 4.12923E+02 2.50222E+01 3.05811E+03 3.14055E+03 3.22299E+03 + 1.79000E+01 -1.63094E+03 -2.59806E+03 -3.56518E+03 9.02639E+02 4.65374E+02 2.81100E+01 3.43622E+03 3.52881E+03 3.62140E+03 -1.45862E+03 -2.41633E+03 -3.37403E+03 8.92389E+02 4.56953E+02 2.15176E+01 3.24340E+03 3.33023E+03 3.41707E+03 -1.45862E+03 -2.31820E+03 -3.17779E+03 8.02081E+02 4.13571E+02 2.50604E+01 3.06278E+03 3.14535E+03 3.22791E+03 + 1.79250E+01 -1.63310E+03 -2.60156E+03 -3.57002E+03 9.03896E+02 4.66022E+02 2.81481E+01 3.44089E+03 3.53360E+03 3.62632E+03 -1.46077E+03 -2.41982E+03 -3.37888E+03 8.93646E+02 4.57601E+02 2.15557E+01 3.24806E+03 3.33503E+03 3.42199E+03 -1.46077E+03 -2.32170E+03 -3.18263E+03 8.03338E+02 4.14218E+02 2.50984E+01 3.06745E+03 3.15014E+03 3.23283E+03 + 1.79500E+01 -1.63525E+03 -2.60506E+03 -3.57486E+03 9.05153E+02 4.66670E+02 2.81863E+01 3.44555E+03 3.53840E+03 3.63124E+03 -1.46293E+03 -2.42332E+03 -3.38372E+03 8.94903E+02 4.58249E+02 2.15939E+01 3.25273E+03 3.33982E+03 3.42691E+03 -1.46293E+03 -2.32520E+03 -3.18748E+03 8.04595E+02 4.14866E+02 2.51366E+01 3.07211E+03 3.15493E+03 3.23775E+03 + 1.79750E+01 -1.63740E+03 -2.60856E+03 -3.57971E+03 9.06410E+02 4.67317E+02 2.82244E+01 3.45022E+03 3.54319E+03 3.63616E+03 -1.46508E+03 -2.42682E+03 -3.38856E+03 8.96160E+02 4.58896E+02 2.16320E+01 3.25740E+03 3.34461E+03 3.43182E+03 -1.46508E+03 -2.32870E+03 -3.19232E+03 8.05852E+02 4.15513E+02 2.51747E+01 3.07678E+03 3.15973E+03 3.24267E+03 + 1.80000E+01 -1.55340E+03 -2.57025E+03 -3.58710E+03 9.47696E+02 4.85445E+02 2.31949E+01 3.44879E+03 3.54114E+03 3.63349E+03 -1.55340E+03 -2.47213E+03 -3.39086E+03 8.57388E+02 4.42063E+02 2.67377E+01 3.26817E+03 3.35625E+03 3.44433E+03 -1.38107E+03 -2.29039E+03 -3.19971E+03 8.47138E+02 4.33642E+02 2.01453E+01 3.07535E+03 3.15767E+03 3.24000E+03 + 1.80250E+01 -1.55555E+03 -2.57374E+03 -3.59194E+03 9.48953E+02 4.86093E+02 2.32331E+01 3.45346E+03 3.54593E+03 3.63841E+03 -1.55555E+03 -2.47562E+03 -3.39570E+03 8.58645E+02 4.42710E+02 2.67758E+01 3.27284E+03 3.36104E+03 3.44925E+03 -1.38323E+03 -2.29389E+03 -3.20455E+03 8.48395E+02 4.34289E+02 2.01834E+01 3.08002E+03 3.16247E+03 3.24492E+03 + 1.80500E+01 -1.55770E+03 -2.57724E+03 -3.59678E+03 9.50210E+02 4.86741E+02 2.32711E+01 3.45812E+03 3.55072E+03 3.64332E+03 -1.55770E+03 -2.47912E+03 -3.40054E+03 8.59902E+02 4.43358E+02 2.68139E+01 3.27751E+03 3.36584E+03 3.45417E+03 -1.38538E+03 -2.29739E+03 -3.20939E+03 8.49652E+02 4.34937E+02 2.02215E+01 3.08468E+03 3.16726E+03 3.24984E+03 + 1.80750E+01 -1.55986E+03 -2.58074E+03 -3.60162E+03 9.51467E+02 4.87388E+02 2.33093E+01 3.46279E+03 3.55552E+03 3.64824E+03 -1.55986E+03 -2.48262E+03 -3.40538E+03 8.61159E+02 4.44005E+02 2.68521E+01 3.28217E+03 3.37063E+03 3.45909E+03 -1.38753E+03 -2.30088E+03 -3.21424E+03 8.50909E+02 4.35584E+02 2.02596E+01 3.08935E+03 3.17205E+03 3.25475E+03 + 1.81000E+01 -1.56201E+03 -2.58424E+03 -3.60647E+03 9.52724E+02 4.88036E+02 2.33474E+01 3.46746E+03 3.56031E+03 3.65316E+03 -1.56201E+03 -2.48612E+03 -3.41022E+03 8.62416E+02 4.44653E+02 2.68901E+01 3.28684E+03 3.37542E+03 3.46401E+03 -1.38969E+03 -2.30438E+03 -3.21908E+03 8.52166E+02 4.36232E+02 2.02977E+01 3.09402E+03 3.17685E+03 3.25967E+03 + 1.81250E+01 -1.56417E+03 -2.58774E+03 -3.61131E+03 9.53981E+02 4.88683E+02 2.33855E+01 3.47213E+03 3.56510E+03 3.65808E+03 -1.56417E+03 -2.48962E+03 -3.41507E+03 8.63673E+02 4.45300E+02 2.69283E+01 3.29151E+03 3.38022E+03 3.46892E+03 -1.39184E+03 -2.30788E+03 -3.22392E+03 8.53423E+02 4.36879E+02 2.03359E+01 3.09869E+03 3.18164E+03 3.26459E+03 + 1.81500E+01 -1.56632E+03 -2.59124E+03 -3.61615E+03 9.55238E+02 4.89331E+02 2.34237E+01 3.47680E+03 3.56990E+03 3.66300E+03 -1.56632E+03 -2.49311E+03 -3.41991E+03 8.64930E+02 4.45948E+02 2.69664E+01 3.29618E+03 3.38501E+03 3.47384E+03 -1.39400E+03 -2.31138E+03 -3.22876E+03 8.54680E+02 4.37527E+02 2.03740E+01 3.10336E+03 3.18643E+03 3.26951E+03 + 1.81750E+01 -1.56847E+03 -2.59473E+03 -3.62099E+03 9.56495E+02 4.89978E+02 2.34617E+01 3.48146E+03 3.57469E+03 3.66792E+03 -1.56847E+03 -2.49661E+03 -3.42475E+03 8.66186E+02 4.46595E+02 2.70045E+01 3.30085E+03 3.38980E+03 3.47876E+03 -1.39615E+03 -2.31488E+03 -3.23360E+03 8.55937E+02 4.38174E+02 2.04121E+01 3.10802E+03 3.19123E+03 3.27443E+03 + 1.82000E+01 -1.57063E+03 -2.59823E+03 -3.62584E+03 9.57752E+02 4.90626E+02 2.34999E+01 3.48613E+03 3.57948E+03 3.67284E+03 -1.57063E+03 -2.50011E+03 -3.42959E+03 8.67444E+02 4.47243E+02 2.70427E+01 3.30551E+03 3.39460E+03 3.48368E+03 -1.39830E+03 -2.31838E+03 -3.23845E+03 8.57194E+02 4.38822E+02 2.04503E+01 3.11269E+03 3.19602E+03 3.27935E+03 + 1.82250E+01 -1.57278E+03 -2.60173E+03 -3.63068E+03 9.59009E+02 4.91273E+02 2.35380E+01 3.49080E+03 3.58428E+03 3.67775E+03 -1.57278E+03 -2.50361E+03 -3.43444E+03 8.68700E+02 4.47891E+02 2.70807E+01 3.31018E+03 3.39939E+03 3.48860E+03 -1.40046E+03 -2.32187E+03 -3.24329E+03 8.58451E+02 4.39470E+02 2.04883E+01 3.11736E+03 3.20081E+03 3.28427E+03 + 1.82500E+01 -1.57494E+03 -2.60523E+03 -3.63552E+03 9.60266E+02 4.91921E+02 2.35761E+01 3.49547E+03 3.58907E+03 3.68267E+03 -1.57494E+03 -2.50711E+03 -3.43928E+03 8.69957E+02 4.48538E+02 2.71189E+01 3.31485E+03 3.40418E+03 3.49352E+03 -1.40261E+03 -2.32537E+03 -3.24813E+03 8.59708E+02 4.40117E+02 2.05265E+01 3.12203E+03 3.20561E+03 3.28918E+03 + 1.82750E+01 -1.57709E+03 -2.60873E+03 -3.64036E+03 9.61523E+02 4.92569E+02 2.36143E+01 3.50014E+03 3.59386E+03 3.68759E+03 -1.57709E+03 -2.51061E+03 -3.44412E+03 8.71214E+02 4.49186E+02 2.71570E+01 3.31952E+03 3.40898E+03 3.49844E+03 -1.40477E+03 -2.32887E+03 -3.25297E+03 8.60965E+02 4.40765E+02 2.05646E+01 3.12670E+03 3.21040E+03 3.29410E+03 + 1.83000E+01 -1.57924E+03 -2.61222E+03 -3.64520E+03 9.62780E+02 4.93216E+02 2.36523E+01 3.50480E+03 3.59866E+03 3.69251E+03 -1.57924E+03 -2.51410E+03 -3.44896E+03 8.72471E+02 4.49833E+02 2.71951E+01 3.32419E+03 3.41377E+03 3.50335E+03 -1.40692E+03 -2.33237E+03 -3.25782E+03 8.62222E+02 4.41412E+02 2.06027E+01 3.13136E+03 3.21519E+03 3.29902E+03 + 1.83250E+01 -1.58140E+03 -2.61572E+03 -3.65005E+03 9.64037E+02 4.93864E+02 2.36905E+01 3.50947E+03 3.60345E+03 3.69743E+03 -1.58140E+03 -2.51760E+03 -3.45381E+03 8.73728E+02 4.50481E+02 2.72333E+01 3.32885E+03 3.41856E+03 3.50827E+03 -1.40907E+03 -2.33587E+03 -3.26266E+03 8.63479E+02 4.42060E+02 2.06409E+01 3.13603E+03 3.21999E+03 3.30394E+03 + 1.83500E+01 -1.58355E+03 -2.61922E+03 -3.65489E+03 9.65294E+02 4.94511E+02 2.37286E+01 3.51414E+03 3.60824E+03 3.70235E+03 -1.58355E+03 -2.52110E+03 -3.45865E+03 8.74985E+02 4.51128E+02 2.72713E+01 3.33352E+03 3.42336E+03 3.51319E+03 -1.41123E+03 -2.33936E+03 -3.26750E+03 8.64736E+02 4.42707E+02 2.06789E+01 3.14070E+03 3.22478E+03 3.30886E+03 + 1.83750E+01 -1.58571E+03 -2.62272E+03 -3.65973E+03 9.66551E+02 4.95159E+02 2.37667E+01 3.51881E+03 3.61304E+03 3.70727E+03 -1.58571E+03 -2.52460E+03 -3.46349E+03 8.76242E+02 4.51776E+02 2.73095E+01 3.33819E+03 3.42815E+03 3.51811E+03 -1.41338E+03 -2.34286E+03 -3.27234E+03 8.65993E+02 4.43355E+02 2.07171E+01 3.14537E+03 3.22957E+03 3.31378E+03 + 1.84000E+01 -1.58786E+03 -2.62622E+03 -3.66457E+03 9.67808E+02 4.95806E+02 2.38049E+01 3.52348E+03 3.61783E+03 3.71218E+03 -1.58786E+03 -2.52810E+03 -3.46833E+03 8.77499E+02 4.52423E+02 2.73476E+01 3.34286E+03 3.43294E+03 3.52303E+03 -1.41554E+03 -2.34636E+03 -3.27719E+03 8.67250E+02 4.44002E+02 2.07552E+01 3.15004E+03 3.23437E+03 3.31870E+03 + 1.84250E+01 -1.59001E+03 -2.62972E+03 -3.66942E+03 9.69065E+02 4.96454E+02 2.38429E+01 3.52814E+03 3.62262E+03 3.71710E+03 -1.59001E+03 -2.53159E+03 -3.47318E+03 8.78756E+02 4.53071E+02 2.73857E+01 3.34753E+03 3.43774E+03 3.52795E+03 -1.41769E+03 -2.34986E+03 -3.28203E+03 8.68507E+02 4.44650E+02 2.07933E+01 3.15470E+03 3.23916E+03 3.32361E+03 + 1.84500E+01 -1.59217E+03 -2.63321E+03 -3.67426E+03 9.70322E+02 4.97101E+02 2.38811E+01 3.53281E+03 3.62742E+03 3.72202E+03 -1.59217E+03 -2.53509E+03 -3.47802E+03 8.80013E+02 4.53719E+02 2.74239E+01 3.35219E+03 3.44253E+03 3.53287E+03 -1.41984E+03 -2.35336E+03 -3.28687E+03 8.69764E+02 4.45298E+02 2.08315E+01 3.15937E+03 3.24395E+03 3.32853E+03 + 1.84750E+01 -1.59432E+03 -2.63671E+03 -3.67910E+03 9.71579E+02 4.97749E+02 2.39192E+01 3.53748E+03 3.63221E+03 3.72694E+03 -1.59432E+03 -2.53859E+03 -3.48286E+03 8.81270E+02 4.54366E+02 2.74619E+01 3.35686E+03 3.44732E+03 3.53778E+03 -1.42200E+03 -2.35686E+03 -3.29171E+03 8.71021E+02 4.45945E+02 2.08695E+01 3.16404E+03 3.24875E+03 3.33345E+03 + 1.85000E+01 -1.59648E+03 -2.64021E+03 -3.68394E+03 9.72836E+02 4.98396E+02 2.39573E+01 3.54215E+03 3.63700E+03 3.73186E+03 -1.59648E+03 -2.54209E+03 -3.48770E+03 8.82527E+02 4.55014E+02 2.75001E+01 3.36153E+03 3.45212E+03 3.54270E+03 -1.42415E+03 -2.36035E+03 -3.29656E+03 8.72278E+02 4.46593E+02 2.09077E+01 3.16871E+03 3.25354E+03 3.33837E+03 + 1.85250E+01 -1.59863E+03 -2.64371E+03 -3.68879E+03 9.74093E+02 4.99044E+02 2.39955E+01 3.54682E+03 3.64180E+03 3.73678E+03 -1.59863E+03 -2.54559E+03 -3.49254E+03 8.83784E+02 4.55661E+02 2.75382E+01 3.36620E+03 3.45691E+03 3.54762E+03 -1.42631E+03 -2.36385E+03 -3.30140E+03 8.73535E+02 4.47240E+02 2.09458E+01 3.17338E+03 3.25833E+03 3.34329E+03 + 1.85500E+01 -1.60078E+03 -2.64721E+03 -3.69363E+03 9.75349E+02 4.99692E+02 2.40336E+01 3.55148E+03 3.64659E+03 3.74170E+03 -1.60078E+03 -2.54909E+03 -3.49739E+03 8.85041E+02 4.56309E+02 2.75763E+01 3.37087E+03 3.46170E+03 3.55254E+03 -1.42846E+03 -2.36735E+03 -3.30624E+03 8.74791E+02 4.47888E+02 2.09839E+01 3.17804E+03 3.26313E+03 3.34821E+03 + 1.85750E+01 -1.60294E+03 -2.65070E+03 -3.69847E+03 9.76607E+02 5.00339E+02 2.40717E+01 3.55615E+03 3.65138E+03 3.74661E+03 -1.60294E+03 -2.55258E+03 -3.50223E+03 8.86298E+02 4.56956E+02 2.76145E+01 3.37553E+03 3.46650E+03 3.55746E+03 -1.43061E+03 -2.37085E+03 -3.31108E+03 8.76049E+02 4.48535E+02 2.10221E+01 3.18271E+03 3.26792E+03 3.35313E+03 + 1.86000E+01 -1.60509E+03 -2.65420E+03 -3.70331E+03 9.77864E+02 5.00987E+02 2.41098E+01 3.56082E+03 3.65618E+03 3.75153E+03 -1.60509E+03 -2.55608E+03 -3.50707E+03 8.87555E+02 4.57604E+02 2.76525E+01 3.38020E+03 3.47129E+03 3.56238E+03 -1.43277E+03 -2.37435E+03 -3.31593E+03 8.77305E+02 4.49183E+02 2.10601E+01 3.18738E+03 3.27271E+03 3.35805E+03 + 1.86250E+01 -1.60725E+03 -2.65770E+03 -3.70816E+03 9.79120E+02 5.01634E+02 2.41479E+01 3.56549E+03 3.66097E+03 3.75645E+03 -1.60725E+03 -2.55958E+03 -3.51191E+03 8.88812E+02 4.58251E+02 2.76907E+01 3.38487E+03 3.47608E+03 3.56730E+03 -1.43492E+03 -2.37784E+03 -3.32077E+03 8.78562E+02 4.49830E+02 2.10983E+01 3.19205E+03 3.27751E+03 3.36296E+03 + 1.86500E+01 -1.60940E+03 -2.66120E+03 -3.71300E+03 9.80377E+02 5.02282E+02 2.41861E+01 3.57016E+03 3.66576E+03 3.76137E+03 -1.60940E+03 -2.56308E+03 -3.51676E+03 8.90069E+02 4.58899E+02 2.77288E+01 3.38954E+03 3.48088E+03 3.57221E+03 -1.43708E+03 -2.38134E+03 -3.32561E+03 8.79819E+02 4.50478E+02 2.11364E+01 3.19672E+03 3.28230E+03 3.36788E+03 + 1.86750E+01 -1.61155E+03 -2.66470E+03 -3.71784E+03 9.81634E+02 5.02929E+02 2.42242E+01 3.57482E+03 3.67056E+03 3.76629E+03 -1.61155E+03 -2.56658E+03 -3.52160E+03 8.91326E+02 4.59546E+02 2.77669E+01 3.39421E+03 3.48567E+03 3.57713E+03 -1.43923E+03 -2.38484E+03 -3.33045E+03 8.81076E+02 4.51125E+02 2.11745E+01 3.20138E+03 3.28709E+03 3.37280E+03 + 1.87000E+01 -1.61371E+03 -2.66820E+03 -3.72268E+03 9.82891E+02 5.03577E+02 2.42623E+01 3.57949E+03 3.67535E+03 3.77121E+03 -1.61371E+03 -2.57008E+03 -3.52644E+03 8.92583E+02 4.60194E+02 2.78051E+01 3.39887E+03 3.49046E+03 3.58205E+03 -1.44139E+03 -2.38834E+03 -3.33529E+03 8.82333E+02 4.51773E+02 2.12127E+01 3.20605E+03 3.29189E+03 3.37772E+03 + 1.87250E+01 -1.61586E+03 -2.67169E+03 -3.72753E+03 9.84148E+02 5.04224E+02 2.43004E+01 3.58416E+03 3.68014E+03 3.77613E+03 -1.61586E+03 -2.57357E+03 -3.53128E+03 8.93840E+02 4.60842E+02 2.78431E+01 3.40354E+03 3.49526E+03 3.58697E+03 -1.44354E+03 -2.39184E+03 -3.34014E+03 8.83590E+02 4.52421E+02 2.12507E+01 3.21072E+03 3.29668E+03 3.38264E+03 + 1.87500E+01 -1.61802E+03 -2.67519E+03 -3.73237E+03 9.85405E+02 5.04872E+02 2.43385E+01 3.58883E+03 3.68494E+03 3.78104E+03 -1.61802E+03 -2.57707E+03 -3.53613E+03 8.95097E+02 4.61489E+02 2.78813E+01 3.40821E+03 3.50005E+03 3.59189E+03 -1.44569E+03 -2.39534E+03 -3.34498E+03 8.84847E+02 4.53068E+02 2.12889E+01 3.21539E+03 3.30147E+03 3.38756E+03 + 1.87750E+01 -1.62017E+03 -2.67869E+03 -3.73721E+03 9.86662E+02 5.05520E+02 2.43767E+01 3.59350E+03 3.68973E+03 3.78596E+03 -1.62017E+03 -2.58057E+03 -3.54097E+03 8.96354E+02 4.62137E+02 2.79194E+01 3.41288E+03 3.50484E+03 3.59681E+03 -1.44785E+03 -2.39883E+03 -3.34982E+03 8.86104E+02 4.53716E+02 2.13270E+01 3.22006E+03 3.30627E+03 3.39248E+03 + 1.88000E+01 -1.62232E+03 -2.68219E+03 -3.74205E+03 9.87919E+02 5.06167E+02 2.44148E+01 3.59816E+03 3.69452E+03 3.79088E+03 -1.62232E+03 -2.58407E+03 -3.54581E+03 8.97611E+02 4.62784E+02 2.79575E+01 3.41755E+03 3.50964E+03 3.60173E+03 -1.45000E+03 -2.40233E+03 -3.35466E+03 8.87361E+02 4.54363E+02 2.13651E+01 3.22472E+03 3.31106E+03 3.39739E+03 + 1.88250E+01 -1.62448E+03 -2.68569E+03 -3.74689E+03 9.89176E+02 5.06815E+02 2.44529E+01 3.60283E+03 3.69932E+03 3.79580E+03 -1.62448E+03 -2.58757E+03 -3.55065E+03 8.98868E+02 4.63432E+02 2.79957E+01 3.42221E+03 3.51443E+03 3.60664E+03 -1.45216E+03 -2.40583E+03 -3.35951E+03 8.88618E+02 4.55011E+02 2.14033E+01 3.22939E+03 3.31585E+03 3.40231E+03 + 1.88500E+01 -1.62663E+03 -2.68919E+03 -3.75174E+03 9.90433E+02 5.07462E+02 2.44910E+01 3.60750E+03 3.70411E+03 3.80072E+03 -1.62663E+03 -2.59106E+03 -3.55550E+03 9.00125E+02 4.64079E+02 2.80337E+01 3.42688E+03 3.51922E+03 3.61156E+03 -1.45431E+03 -2.40933E+03 -3.36435E+03 8.89875E+02 4.55658E+02 2.14413E+01 3.23406E+03 3.32065E+03 3.40723E+03 + 1.88750E+01 -1.62879E+03 -2.69268E+03 -3.75658E+03 9.91690E+02 5.08110E+02 2.45291E+01 3.61217E+03 3.70890E+03 3.80564E+03 -1.62879E+03 -2.59456E+03 -3.56034E+03 9.01382E+02 4.64727E+02 2.80719E+01 3.43155E+03 3.52402E+03 3.61648E+03 -1.45646E+03 -2.41283E+03 -3.36919E+03 8.91132E+02 4.56306E+02 2.14795E+01 3.23873E+03 3.32544E+03 3.41215E+03 + 1.89000E+01 -1.63094E+03 -2.69618E+03 -3.76142E+03 9.92947E+02 5.08757E+02 2.45673E+01 3.61684E+03 3.71370E+03 3.81056E+03 -1.63094E+03 -2.59806E+03 -3.56518E+03 9.02639E+02 4.65374E+02 2.81100E+01 3.43622E+03 3.52881E+03 3.62140E+03 -1.45862E+03 -2.41633E+03 -3.37403E+03 8.92389E+02 4.56953E+02 2.15176E+01 3.24340E+03 3.33023E+03 3.41707E+03 + 1.89250E+01 -1.63310E+03 -2.69968E+03 -3.76626E+03 9.94204E+02 5.09405E+02 2.46054E+01 3.62150E+03 3.71849E+03 3.81547E+03 -1.63310E+03 -2.60156E+03 -3.57002E+03 9.03896E+02 4.66022E+02 2.81481E+01 3.44089E+03 3.53360E+03 3.62632E+03 -1.46077E+03 -2.41982E+03 -3.37888E+03 8.93646E+02 4.57601E+02 2.15557E+01 3.24806E+03 3.33503E+03 3.42199E+03 + 1.89500E+01 -1.63525E+03 -2.70318E+03 -3.77111E+03 9.95461E+02 5.10052E+02 2.46435E+01 3.62617E+03 3.72328E+03 3.82039E+03 -1.63525E+03 -2.60506E+03 -3.57486E+03 9.05153E+02 4.66670E+02 2.81863E+01 3.44555E+03 3.53840E+03 3.63124E+03 -1.46293E+03 -2.42332E+03 -3.38372E+03 8.94903E+02 4.58249E+02 2.15939E+01 3.25273E+03 3.33982E+03 3.42691E+03 + 1.89750E+01 -1.63740E+03 -2.70668E+03 -3.77595E+03 9.96718E+02 5.10700E+02 2.46816E+01 3.63084E+03 3.72808E+03 3.82531E+03 -1.63740E+03 -2.60856E+03 -3.57971E+03 9.06410E+02 4.67317E+02 2.82244E+01 3.45022E+03 3.54319E+03 3.63616E+03 -1.46508E+03 -2.42682E+03 -3.38856E+03 8.96160E+02 4.58896E+02 2.16320E+01 3.25740E+03 3.34461E+03 3.43182E+03 + 1.90000E+01 -1.72572E+03 -2.75198E+03 -3.77824E+03 9.57946E+02 4.93867E+02 2.97873E+01 3.64161E+03 3.73971E+03 3.83782E+03 -1.55340E+03 -2.57025E+03 -3.58710E+03 9.47696E+02 4.85445E+02 2.31949E+01 3.44879E+03 3.54114E+03 3.63349E+03 -1.55340E+03 -2.47213E+03 -3.39086E+03 8.57388E+02 4.42063E+02 2.67377E+01 3.26817E+03 3.35625E+03 3.44433E+03 + 1.90250E+01 -1.72787E+03 -2.75548E+03 -3.78309E+03 9.59203E+02 4.94514E+02 2.98255E+01 3.64628E+03 3.74451E+03 3.84274E+03 -1.55555E+03 -2.57374E+03 -3.59194E+03 9.48953E+02 4.86093E+02 2.32331E+01 3.45346E+03 3.54593E+03 3.63841E+03 -1.55555E+03 -2.47562E+03 -3.39570E+03 8.58645E+02 4.42710E+02 2.67758E+01 3.27284E+03 3.36104E+03 3.44925E+03 + 1.90500E+01 -1.73003E+03 -2.75898E+03 -3.78793E+03 9.60460E+02 4.95162E+02 2.98635E+01 3.65095E+03 3.74930E+03 3.84766E+03 -1.55770E+03 -2.57724E+03 -3.59678E+03 9.50210E+02 4.86741E+02 2.32711E+01 3.45812E+03 3.55072E+03 3.64332E+03 -1.55770E+03 -2.47912E+03 -3.40054E+03 8.59902E+02 4.43358E+02 2.68139E+01 3.27751E+03 3.36584E+03 3.45417E+03 + 1.90750E+01 -1.73218E+03 -2.76248E+03 -3.79277E+03 9.61717E+02 4.95809E+02 2.99017E+01 3.65561E+03 3.75409E+03 3.85257E+03 -1.55986E+03 -2.58074E+03 -3.60162E+03 9.51467E+02 4.87388E+02 2.33093E+01 3.46279E+03 3.55552E+03 3.64824E+03 -1.55986E+03 -2.48262E+03 -3.40538E+03 8.61159E+02 4.44005E+02 2.68521E+01 3.28217E+03 3.37063E+03 3.45909E+03 + 1.91000E+01 -1.73434E+03 -2.76597E+03 -3.79761E+03 9.62974E+02 4.96457E+02 2.99398E+01 3.66028E+03 3.75889E+03 3.85749E+03 -1.56201E+03 -2.58424E+03 -3.60647E+03 9.52724E+02 4.88036E+02 2.33474E+01 3.46746E+03 3.56031E+03 3.65316E+03 -1.56201E+03 -2.48612E+03 -3.41022E+03 8.62416E+02 4.44653E+02 2.68901E+01 3.28684E+03 3.37542E+03 3.46401E+03 + 1.91250E+01 -1.73649E+03 -2.76947E+03 -3.80246E+03 9.64231E+02 4.97104E+02 2.99779E+01 3.66495E+03 3.76368E+03 3.86241E+03 -1.56417E+03 -2.58774E+03 -3.61131E+03 9.53981E+02 4.88683E+02 2.33855E+01 3.47213E+03 3.56510E+03 3.65808E+03 -1.56417E+03 -2.48962E+03 -3.41507E+03 8.63673E+02 4.45300E+02 2.69283E+01 3.29151E+03 3.38022E+03 3.46892E+03 + 1.91500E+01 -1.73864E+03 -2.77297E+03 -3.80730E+03 9.65488E+02 4.97752E+02 3.00161E+01 3.66962E+03 3.76847E+03 3.86733E+03 -1.56632E+03 -2.59124E+03 -3.61615E+03 9.55238E+02 4.89331E+02 2.34237E+01 3.47680E+03 3.56990E+03 3.66300E+03 -1.56632E+03 -2.49311E+03 -3.41991E+03 8.64930E+02 4.45948E+02 2.69664E+01 3.29618E+03 3.38501E+03 3.47384E+03 + 1.91750E+01 -1.74080E+03 -2.77647E+03 -3.81214E+03 9.66744E+02 4.98399E+02 3.00541E+01 3.67429E+03 3.77327E+03 3.87225E+03 -1.56847E+03 -2.59473E+03 -3.62099E+03 9.56495E+02 4.89978E+02 2.34617E+01 3.48146E+03 3.57469E+03 3.66792E+03 -1.56847E+03 -2.49661E+03 -3.42475E+03 8.66186E+02 4.46595E+02 2.70045E+01 3.30085E+03 3.38980E+03 3.47876E+03 + 1.92000E+01 -1.74295E+03 -2.77997E+03 -3.81698E+03 9.68002E+02 4.99047E+02 3.00923E+01 3.67895E+03 3.77806E+03 3.87717E+03 -1.57063E+03 -2.59823E+03 -3.62584E+03 9.57752E+02 4.90626E+02 2.34999E+01 3.48613E+03 3.57948E+03 3.67284E+03 -1.57063E+03 -2.50011E+03 -3.42959E+03 8.67444E+02 4.47243E+02 2.70427E+01 3.30551E+03 3.39460E+03 3.48368E+03 + 1.92250E+01 -1.74511E+03 -2.78347E+03 -3.82182E+03 9.69258E+02 4.99694E+02 3.01304E+01 3.68362E+03 3.78285E+03 3.88209E+03 -1.57278E+03 -2.60173E+03 -3.63068E+03 9.59009E+02 4.91273E+02 2.35380E+01 3.49080E+03 3.58428E+03 3.67775E+03 -1.57278E+03 -2.50361E+03 -3.43444E+03 8.68700E+02 4.47891E+02 2.70807E+01 3.31018E+03 3.39939E+03 3.48860E+03 + 1.92500E+01 -1.74726E+03 -2.78696E+03 -3.82667E+03 9.70515E+02 5.00342E+02 3.01685E+01 3.68829E+03 3.78765E+03 3.88700E+03 -1.57494E+03 -2.60523E+03 -3.63552E+03 9.60266E+02 4.91921E+02 2.35761E+01 3.49547E+03 3.58907E+03 3.68267E+03 -1.57494E+03 -2.50711E+03 -3.43928E+03 8.69957E+02 4.48538E+02 2.71189E+01 3.31485E+03 3.40418E+03 3.49352E+03 + 1.92750E+01 -1.74941E+03 -2.79046E+03 -3.83151E+03 9.71772E+02 5.00990E+02 3.02067E+01 3.69296E+03 3.79244E+03 3.89192E+03 -1.57709E+03 -2.60873E+03 -3.64036E+03 9.61523E+02 4.92569E+02 2.36143E+01 3.50014E+03 3.59386E+03 3.68759E+03 -1.57709E+03 -2.51061E+03 -3.44412E+03 8.71214E+02 4.49186E+02 2.71570E+01 3.31952E+03 3.40898E+03 3.49844E+03 + 1.93000E+01 -1.75157E+03 -2.79396E+03 -3.83635E+03 9.73029E+02 5.01637E+02 3.02447E+01 3.69763E+03 3.79723E+03 3.89684E+03 -1.57924E+03 -2.61222E+03 -3.64520E+03 9.62780E+02 4.93216E+02 2.36523E+01 3.50480E+03 3.59866E+03 3.69251E+03 -1.57924E+03 -2.51410E+03 -3.44896E+03 8.72471E+02 4.49833E+02 2.71951E+01 3.32419E+03 3.41377E+03 3.50335E+03 + 1.93250E+01 -1.75372E+03 -2.79746E+03 -3.84119E+03 9.74286E+02 5.02285E+02 3.02829E+01 3.70229E+03 3.80203E+03 3.90176E+03 -1.58140E+03 -2.61572E+03 -3.65005E+03 9.64037E+02 4.93864E+02 2.36905E+01 3.50947E+03 3.60345E+03 3.69743E+03 -1.58140E+03 -2.51760E+03 -3.45381E+03 8.73728E+02 4.50481E+02 2.72333E+01 3.32885E+03 3.41856E+03 3.50827E+03 + 1.93500E+01 -1.75588E+03 -2.80096E+03 -3.84604E+03 9.75543E+02 5.02932E+02 3.03210E+01 3.70696E+03 3.80682E+03 3.90668E+03 -1.58355E+03 -2.61922E+03 -3.65489E+03 9.65294E+02 4.94511E+02 2.37286E+01 3.51414E+03 3.60824E+03 3.70235E+03 -1.58355E+03 -2.52110E+03 -3.45865E+03 8.74985E+02 4.51128E+02 2.72713E+01 3.33352E+03 3.42336E+03 3.51319E+03 + 1.93750E+01 -1.75803E+03 -2.80445E+03 -3.85088E+03 9.76800E+02 5.03580E+02 3.03591E+01 3.71163E+03 3.81161E+03 3.91160E+03 -1.58571E+03 -2.62272E+03 -3.65973E+03 9.66551E+02 4.95159E+02 2.37667E+01 3.51881E+03 3.61304E+03 3.70727E+03 -1.58571E+03 -2.52460E+03 -3.46349E+03 8.76242E+02 4.51776E+02 2.73095E+01 3.33819E+03 3.42815E+03 3.51811E+03 + 1.94000E+01 -1.76018E+03 -2.80795E+03 -3.85572E+03 9.78057E+02 5.04227E+02 3.03973E+01 3.71630E+03 3.81641E+03 3.91652E+03 -1.58786E+03 -2.62622E+03 -3.66457E+03 9.67808E+02 4.95806E+02 2.38049E+01 3.52348E+03 3.61783E+03 3.71218E+03 -1.58786E+03 -2.52810E+03 -3.46833E+03 8.77499E+02 4.52423E+02 2.73476E+01 3.34286E+03 3.43294E+03 3.52303E+03 + 1.94250E+01 -1.76234E+03 -2.81145E+03 -3.86056E+03 9.79314E+02 5.04875E+02 3.04353E+01 3.72097E+03 3.82120E+03 3.92143E+03 -1.59001E+03 -2.62972E+03 -3.66942E+03 9.69065E+02 4.96454E+02 2.38429E+01 3.52814E+03 3.62262E+03 3.71710E+03 -1.59001E+03 -2.53159E+03 -3.47318E+03 8.78756E+02 4.53071E+02 2.73857E+01 3.34753E+03 3.43774E+03 3.52795E+03 + 1.94500E+01 -1.76449E+03 -2.81495E+03 -3.86541E+03 9.80571E+02 5.05522E+02 3.04735E+01 3.72563E+03 3.82599E+03 3.92635E+03 -1.59217E+03 -2.63321E+03 -3.67426E+03 9.70322E+02 4.97101E+02 2.38811E+01 3.53281E+03 3.62742E+03 3.72202E+03 -1.59217E+03 -2.53509E+03 -3.47802E+03 8.80013E+02 4.53719E+02 2.74239E+01 3.35219E+03 3.44253E+03 3.53287E+03 + 1.94750E+01 -1.76665E+03 -2.81845E+03 -3.87025E+03 9.81828E+02 5.06170E+02 3.05116E+01 3.73030E+03 3.83079E+03 3.93127E+03 -1.59432E+03 -2.63671E+03 -3.67910E+03 9.71579E+02 4.97749E+02 2.39192E+01 3.53748E+03 3.63221E+03 3.72694E+03 -1.59432E+03 -2.53859E+03 -3.48286E+03 8.81270E+02 4.54366E+02 2.74619E+01 3.35686E+03 3.44732E+03 3.53778E+03 + 1.95000E+01 -1.76880E+03 -2.82195E+03 -3.87509E+03 9.83085E+02 5.06817E+02 3.05497E+01 3.73497E+03 3.83558E+03 3.93619E+03 -1.59648E+03 -2.64021E+03 -3.68394E+03 9.72836E+02 4.98396E+02 2.39573E+01 3.54215E+03 3.63700E+03 3.73186E+03 -1.59648E+03 -2.54209E+03 -3.48770E+03 8.82527E+02 4.55014E+02 2.75001E+01 3.36153E+03 3.45212E+03 3.54270E+03 + 1.95250E+01 -1.77095E+03 -2.82544E+03 -3.87993E+03 9.84342E+02 5.07465E+02 3.05879E+01 3.73964E+03 3.84037E+03 3.94111E+03 -1.59863E+03 -2.64371E+03 -3.68879E+03 9.74093E+02 4.99044E+02 2.39955E+01 3.54682E+03 3.64180E+03 3.73678E+03 -1.59863E+03 -2.54559E+03 -3.49254E+03 8.83784E+02 4.55661E+02 2.75382E+01 3.36620E+03 3.45691E+03 3.54762E+03 + 1.95500E+01 -1.77311E+03 -2.82894E+03 -3.88478E+03 9.85599E+02 5.08113E+02 3.06260E+01 3.74431E+03 3.84517E+03 3.94603E+03 -1.60078E+03 -2.64721E+03 -3.69363E+03 9.75349E+02 4.99692E+02 2.40336E+01 3.55148E+03 3.64659E+03 3.74170E+03 -1.60078E+03 -2.54909E+03 -3.49739E+03 8.85041E+02 4.56309E+02 2.75763E+01 3.37087E+03 3.46170E+03 3.55254E+03 + 1.95750E+01 -1.77526E+03 -2.83244E+03 -3.88962E+03 9.86856E+02 5.08760E+02 3.06641E+01 3.74897E+03 3.84996E+03 3.95095E+03 -1.60294E+03 -2.65070E+03 -3.69847E+03 9.76607E+02 5.00339E+02 2.40717E+01 3.55615E+03 3.65138E+03 3.74661E+03 -1.60294E+03 -2.55258E+03 -3.50223E+03 8.86298E+02 4.56956E+02 2.76145E+01 3.37553E+03 3.46650E+03 3.55746E+03 + 1.96000E+01 -1.77742E+03 -2.83594E+03 -3.89446E+03 9.88113E+02 5.09408E+02 3.07022E+01 3.75364E+03 3.85475E+03 3.95586E+03 -1.60509E+03 -2.65420E+03 -3.70331E+03 9.77864E+02 5.00987E+02 2.41098E+01 3.56082E+03 3.65618E+03 3.75153E+03 -1.60509E+03 -2.55608E+03 -3.50707E+03 8.87555E+02 4.57604E+02 2.76525E+01 3.38020E+03 3.47129E+03 3.56238E+03 + 1.96250E+01 -1.77957E+03 -2.83944E+03 -3.89930E+03 9.89370E+02 5.10055E+02 3.07403E+01 3.75831E+03 3.85955E+03 3.96078E+03 -1.60725E+03 -2.65770E+03 -3.70816E+03 9.79120E+02 5.01634E+02 2.41479E+01 3.56549E+03 3.66097E+03 3.75645E+03 -1.60725E+03 -2.55958E+03 -3.51191E+03 8.88812E+02 4.58251E+02 2.76907E+01 3.38487E+03 3.47608E+03 3.56730E+03 + 1.96500E+01 -1.78172E+03 -2.84293E+03 -3.90415E+03 9.90627E+02 5.10703E+02 3.07785E+01 3.76298E+03 3.86434E+03 3.96570E+03 -1.60940E+03 -2.66120E+03 -3.71300E+03 9.80377E+02 5.02282E+02 2.41861E+01 3.57016E+03 3.66576E+03 3.76137E+03 -1.60940E+03 -2.56308E+03 -3.51676E+03 8.90069E+02 4.58899E+02 2.77288E+01 3.38954E+03 3.48088E+03 3.57221E+03 + 1.96750E+01 -1.78388E+03 -2.84643E+03 -3.90899E+03 9.91884E+02 5.11350E+02 3.08166E+01 3.76765E+03 3.86913E+03 3.97062E+03 -1.61155E+03 -2.66470E+03 -3.71784E+03 9.81634E+02 5.02929E+02 2.42242E+01 3.57482E+03 3.67056E+03 3.76629E+03 -1.61155E+03 -2.56658E+03 -3.52160E+03 8.91326E+02 4.59546E+02 2.77669E+01 3.39421E+03 3.48567E+03 3.57713E+03 + 1.97000E+01 -1.78603E+03 -2.84993E+03 -3.91383E+03 9.93141E+02 5.11998E+02 3.08547E+01 3.77231E+03 3.87393E+03 3.97554E+03 -1.61371E+03 -2.66820E+03 -3.72268E+03 9.82891E+02 5.03577E+02 2.42623E+01 3.57949E+03 3.67535E+03 3.77121E+03 -1.61371E+03 -2.57008E+03 -3.52644E+03 8.92583E+02 4.60194E+02 2.78051E+01 3.39887E+03 3.49046E+03 3.58205E+03 + 1.97250E+01 -1.78819E+03 -2.85343E+03 -3.91867E+03 9.94398E+02 5.12645E+02 3.08928E+01 3.77698E+03 3.87872E+03 3.98046E+03 -1.61586E+03 -2.67169E+03 -3.72753E+03 9.84148E+02 5.04224E+02 2.43004E+01 3.58416E+03 3.68014E+03 3.77613E+03 -1.61586E+03 -2.57357E+03 -3.53128E+03 8.93840E+02 4.60842E+02 2.78431E+01 3.40354E+03 3.49526E+03 3.58697E+03 + 1.97500E+01 -1.79034E+03 -2.85693E+03 -3.92351E+03 9.95655E+02 5.13293E+02 3.09309E+01 3.78165E+03 3.88351E+03 3.98538E+03 -1.61802E+03 -2.67519E+03 -3.73237E+03 9.85405E+02 5.04872E+02 2.43385E+01 3.58883E+03 3.68494E+03 3.78104E+03 -1.61802E+03 -2.57707E+03 -3.53613E+03 8.95097E+02 4.61489E+02 2.78813E+01 3.40821E+03 3.50005E+03 3.59189E+03 + 1.97750E+01 -1.79249E+03 -2.86043E+03 -3.92836E+03 9.96912E+02 5.13940E+02 3.09691E+01 3.78632E+03 3.88831E+03 3.99029E+03 -1.62017E+03 -2.67869E+03 -3.73721E+03 9.86662E+02 5.05520E+02 2.43767E+01 3.59350E+03 3.68973E+03 3.78596E+03 -1.62017E+03 -2.58057E+03 -3.54097E+03 8.96354E+02 4.62137E+02 2.79194E+01 3.41288E+03 3.50484E+03 3.59681E+03 + 1.98000E+01 -1.79465E+03 -2.86392E+03 -3.93320E+03 9.98169E+02 5.14588E+02 3.10072E+01 3.79099E+03 3.89310E+03 3.99521E+03 -1.62232E+03 -2.68219E+03 -3.74205E+03 9.87919E+02 5.06167E+02 2.44148E+01 3.59816E+03 3.69452E+03 3.79088E+03 -1.62232E+03 -2.58407E+03 -3.54581E+03 8.97611E+02 4.62784E+02 2.79575E+01 3.41755E+03 3.50964E+03 3.60173E+03 + 1.98250E+01 -1.79680E+03 -2.86742E+03 -3.93804E+03 9.99426E+02 5.15236E+02 3.10453E+01 3.79565E+03 3.89789E+03 4.00013E+03 -1.62448E+03 -2.68569E+03 -3.74689E+03 9.89176E+02 5.06815E+02 2.44529E+01 3.60283E+03 3.69932E+03 3.79580E+03 -1.62448E+03 -2.58757E+03 -3.55065E+03 8.98868E+02 4.63432E+02 2.79957E+01 3.42221E+03 3.51443E+03 3.60664E+03 + 1.98500E+01 -1.79896E+03 -2.87092E+03 -3.94288E+03 1.00068E+03 5.15883E+02 3.10834E+01 3.80032E+03 3.90269E+03 4.00505E+03 -1.62663E+03 -2.68919E+03 -3.75174E+03 9.90433E+02 5.07462E+02 2.44910E+01 3.60750E+03 3.70411E+03 3.80072E+03 -1.62663E+03 -2.59106E+03 -3.55550E+03 9.00125E+02 4.64079E+02 2.80337E+01 3.42688E+03 3.51922E+03 3.61156E+03 + 1.98750E+01 -1.80111E+03 -2.87442E+03 -3.94773E+03 1.00194E+03 5.16531E+02 3.11215E+01 3.80499E+03 3.90748E+03 4.00997E+03 -1.62879E+03 -2.69268E+03 -3.75658E+03 9.91690E+02 5.08110E+02 2.45291E+01 3.61217E+03 3.70890E+03 3.80564E+03 -1.62879E+03 -2.59456E+03 -3.56034E+03 9.01382E+02 4.64727E+02 2.80719E+01 3.43155E+03 3.52402E+03 3.61648E+03 + 1.99000E+01 -1.80327E+03 -2.87792E+03 -3.95257E+03 1.00320E+03 5.17178E+02 3.11597E+01 3.80966E+03 3.91227E+03 4.01489E+03 -1.63094E+03 -2.69618E+03 -3.76142E+03 9.92947E+02 5.08757E+02 2.45673E+01 3.61684E+03 3.71370E+03 3.81056E+03 -1.63094E+03 -2.59806E+03 -3.56518E+03 9.02639E+02 4.65374E+02 2.81100E+01 3.43622E+03 3.52881E+03 3.62140E+03 + 1.99250E+01 -1.80542E+03 -2.88142E+03 -3.95741E+03 1.00445E+03 5.17826E+02 3.11978E+01 3.81433E+03 3.91707E+03 4.01981E+03 -1.63310E+03 -2.69968E+03 -3.76626E+03 9.94204E+02 5.09405E+02 2.46054E+01 3.62150E+03 3.71849E+03 3.81547E+03 -1.63310E+03 -2.60156E+03 -3.57002E+03 9.03896E+02 4.66022E+02 2.81481E+01 3.44089E+03 3.53360E+03 3.62632E+03 + 1.99500E+01 -1.80757E+03 -2.88491E+03 -3.96225E+03 1.00571E+03 5.18473E+02 3.12359E+01 3.81899E+03 3.92186E+03 4.02473E+03 -1.63525E+03 -2.70318E+03 -3.77111E+03 9.95461E+02 5.10052E+02 2.46435E+01 3.62617E+03 3.72328E+03 3.82039E+03 -1.63525E+03 -2.60506E+03 -3.57486E+03 9.05153E+02 4.66670E+02 2.81863E+01 3.44555E+03 3.53840E+03 3.63124E+03 + 1.99750E+01 -1.80973E+03 -2.88841E+03 -3.96710E+03 1.00697E+03 5.19121E+02 3.12740E+01 3.82366E+03 3.92665E+03 4.02964E+03 -1.63740E+03 -2.70668E+03 -3.77595E+03 9.96718E+02 5.10700E+02 2.46816E+01 3.63084E+03 3.72808E+03 3.82531E+03 -1.63740E+03 -2.60856E+03 -3.57971E+03 9.06410E+02 4.67317E+02 2.82244E+01 3.45022E+03 3.54319E+03 3.63616E+03 + 2.00000E+01 -1.72572E+03 -2.85010E+03 -3.97449E+03 1.04825E+03 5.37249E+02 2.62446E+01 3.82223E+03 3.92460E+03 4.02697E+03 -1.72572E+03 -2.75198E+03 -3.77824E+03 9.57946E+02 4.93867E+02 2.97873E+01 3.64161E+03 3.73971E+03 3.83782E+03 -1.55340E+03 -2.57025E+03 -3.58710E+03 9.47696E+02 4.85445E+02 2.31949E+01 3.44879E+03 3.54114E+03 3.63349E+03 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel new file mode 100644 index 0000000000..40fc5b19ae --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel @@ -0,0 +1,41 @@ +________________________________________________________________________________________________________________________ + Version ID : HAWC2AERO 2.4w + Time : 10:02:19 + Date : 24:01.2013 +________________________________________________________________________________________________________________________ + Result file : ./Hawc2ascii.dat +________________________________________________________________________________________________________________________ + Scans Channels Time [sec] Format + 800 28 20.000 ASCII + + Channel Variable Description + + 1 Time s Time + 2 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, -1.00, -47.50 + 3 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, -1.00, -47.50 + 4 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, -1.00, -47.50 + 5 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, -1.00, -50.00 + 6 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, -1.00, -50.00 + 7 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, -1.00, -50.00 + 8 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, -1.00, -52.50 + 9 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, -1.00, -52.50 + 10 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, -1.00, -52.50 + 11 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 0.00, -47.50 + 12 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -47.50 + 13 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 0.00, -47.50 + 14 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 0.00, -50.00 + 15 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -50.00 + 16 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 0.00, -50.00 + 17 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 0.00, -52.50 + 18 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -52.50 + 19 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 0.00, -52.50 + 20 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 1.00, -47.50 + 21 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 1.00, -47.50 + 22 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 1.00, -47.50 + 23 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 1.00, -50.00 + 24 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 1.00, -50.00 + 25 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 1.00, -50.00 + 26 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 1.00, -52.50 + 27 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 1.00, -52.50 + 28 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 1.00, -52.50 +________________________________________________________________________________________________________________________ diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.dat new file mode 100644 index 0000000000000000000000000000000000000000..2fd25b9fc60a6ff8d04b0e108546892b97ec0866 GIT binary patch literal 44800 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 o6P=e{28+o?{kQrTZ|q0yyà¶¿¯Ž?»Þ?-ø @¡Ö²@E=A’ AÉT„@%@#@`¢:À‘× Àd’ñ¿Âv#¿{QO@Fä:@µù>Ò=Àž–À“wÀŠ{À¼i‰ÀË(À€—jÀÚ\À‘ä›ÀÞì¿ h.¿kP«¿©s±?x…@-E@Ïý|?YE˜¿Î0?'6Â?§ª@ë-³@—‡Ak4ò@Ó*”@ËÑ"@<§-ÀGGÀ¶íÀ^ô-¿«„`@Êk@Ì/7>úÀ \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ParquetFile_test.parquet b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ParquetFile_test.parquet new file mode 100644 index 0000000000000000000000000000000000000000..549c998c47471d501f6954610d26a45fedc7b144 GIT binary patch literal 2951 zcmcguPjBKz6gPx=lPFTF)f$1s0a?3fRV5S~$S$i~1_)pZ1W1CxRTcRkU}759JLm(lQR@!!ycxK+;-+S}k6Lr+&m;mz`^Pww`UP%&wGMh5A&%r zCaAyj1%L3x{-$F;(vdYA8*urkP+BlP*iw7M2}=!lP96?Ke=TMThp&ERMIyS_FeR= zTlNxYaAL=@-P76qC~M1>4g`B@nsA#q^4NiEf}DpVI3~$a$4Bn&Yq+@fE{Jj6GrMl3 zYv`tSu}*VgT{!a*cE?U_Lmg@^f~hr{FBwB+psNl>X6cTs$&L)-x2$f1xMBCO?)h2a z;4OQ%0%jcr>y{~pjjTagWjw%R*v?^!Og&&y*OWQD=7C)nk_Vriye%zA>A?knOsmYHhe^`w$RhMH{lRl5N+H1qCP zYEC#5^3{ouE8l3v)(qRJwmA*+JA7uMiQKf!yS}CN(&w}zawe8l?AAodVSmy{60a}Y z{06_p0$?xPw3E%WTEv);p^51c*uRuc1?(Fzax=Y^N$Bk?u`5^^L$+E2El2o{)Nb~{ zMxt{HcuNyQ64L{PZ;lj8CH7jaX0dYCGrAA3t8uE@U*kxT>yiOBP!bsgPO5 zBwTtq9vmAaPaE(<&J(pkgYY2-j#@IiTFIP2Jckg^NUrlnp29`nMw}7>0?Yn zULZCl%QTf@v#VGI$FrGN_-jrPQ@yG|a^lrU?J2(-a%xVsd?(@72WM)<0@PTuzkJ71 zVuEwK$>({pId}CQzVm%Pg+eW%K8=l2EEB)kqCPpLolURSgu<8KOJeO`@OgEaESrG) z3Ve}TP>QCZT7|jp=6Wt(C zB!CZd0S|$Eb)k>?L`B8l6@4-fmil>eMYB3+k?{fJ2NoDR$MXZ`Q3=lzSdDul$2s6H zppzrMB7|LK7qxVa^F06sH0KT8<|lqo{n<|r!`bREuEZ& SkKjj;`$yGxD5?%W!T$l4HRPoL literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in new file mode 100644 index 0000000000..53e2fcaa18 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in @@ -0,0 +1,151 @@ +! Controller parameter input file for the Main_ED wind turbine +! - File written using ROSCO version 2.6.0 controller tuning logic on 01/21/23 + +!------- DEBUG ------------------------------------------------------------ +1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} + +!------- CONTROLLER FLAGS ------------------------------------------------- +1 ! F_LPFType - {1: first-order low-pass filter, 2: second-order low-pass filter}, [rad/s] (currently filters generator speed and pitch control signals +0 ! F_NotchType - Notch on the measured generator speed and/or tower fore-aft motion (for floating) {0: disable, 1: generator speed, 2: tower-top fore-aft motion, 3: generator speed and tower-top fore-aft motion} +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +3 ! VS_ControlMode - Generator torque control mode in above rated conditions {0: constant torque, 1: constant power, 2: TSR tracking PI control with constant torque, 3: TSR tracking PI control with constant power} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +1 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time} +0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} + +!------- FILTERS ---------------------------------------------------------- +0.61500 ! F_LPFCornerFreq >>> Tunedvalue was: 0.31500 - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +0.00000 ! F_NotchCornerFreq - Natural frequency of the notch filter, [rad/s] +0.000000 0.250000 ! F_NotchBetaNumDen - Two notch damping values (numerator and denominator, resp) - determines the width and depth of the notch, [-] +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +3.780000 1.000000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control [rad/s, -]. + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.150511 0.170047 0.187567 0.203638 0.218616 0.232742 0.246187 0.258963 0.271200 0.283059 0.294514 0.305550 0.316371 0.326840 0.337077 0.347108 0.356849 0.366502 0.375849 0.385148 0.394189 0.403154 0.411886 0.420555 0.429027 0.437457 0.445707 0.453937 0.461993 0.470003 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-1.802655 -1.644720 -1.508878 -1.390797 -1.287208 -1.195596 -1.113999 -1.040858 -0.974925 -0.915183 -0.860801 -0.811087 -0.765465 -0.723450 -0.684631 -0.648656 -0.615223 -0.584073 -0.554979 -0.527745 -0.502197 -0.478183 -0.455570 -0.434238 -0.414082 -0.395006 -0.376927 -0.359768 -0.343460 -0.327942 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.747085 -0.690899 -0.642574 -0.600566 -0.563714 -0.531124 -0.502095 -0.476076 -0.452620 -0.431367 -0.412020 -0.394335 -0.378105 -0.363158 -0.349348 -0.336550 -0.324656 -0.313574 -0.303224 -0.293536 -0.284447 -0.275904 -0.267860 -0.260271 -0.253100 -0.246314 -0.239882 -0.233778 -0.227977 -0.222456 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.036320000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +1.395100000000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.036320000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +9.600000 12.000000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +100.0000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +2580460.182070 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +650000.0000000 ! VS_MaxRat >>> TunedValued:650000.0000000 - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +2838506.200270 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +0.680000000000 ! VS_MinOMSpd >>> TunedValue: - Minimum generator speed [rad/s] +1452489.929660 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side), [Nm/(rad/s)^2] +3600000.000000 ! VS_RtPwr - Wind turbine rated power [W] +2580460.182070 ! VS_RtTq - Rated torque, [Nm]. +1.395100000000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-6954512.69764 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-781263.090000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +9.595 ! VS_TSRopt >>> TunedValue:8.82 - Power-maximizing region 2 tip-speed-ratio [rad]. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +45 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_RotorSpeeds array +3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 20.5 21.0 21.5 22.0 22.5 23.0 23.5 24.0 24.5 25.0 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s]. +0.6910268144787133 0.6960401593650649 0.7165597438704334 0.738185676421178 0.7608053103653986 0.7776758882514259 0.9275392403488596 0.9519480597035652 1.0186573938021806 1.0857272198939956 1.1535923474943748 1.205354257912827 1.2447250825053235 1.265512130479433 1.2731046664774792 1.2768229123691115 1.3035008107787789 1.3644268867738227 1.3950661379469709 1.3949948761209916 1.394923614295013 1.3948523524690342 1.394781090643055 1.3947098288170765 1.394638566991098 1.394567305165119 1.39449604333914 1.3944247815131616 1.3943535196871826 1.3942822578612035 1.3942109960352247 1.3941397342092463 1.3940684723832677 1.3939972105572886 1.3939259487313096 1.3938546869053312 1.3937834250793522 1.3937121632533735 1.3936409014273947 1.275861750264016 1.2764425597166416 1.2770233691692672 1.2776041786218928 1.2781849880745186 1.2787657975271445 ! PRC_RotorSpeeds - Array of rotor speeds corresponding to PRC_WindSpeeds [rad/s]. + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +65.085 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +1.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +34722804.00000 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"SWT-3p6-130_Cp_Ct_Cq.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.3103 3.6207 3.9310 4.2414 4.5517 4.8621 5.1724 5.4828 5.7931 6.1034 6.4138 6.7241 7.0345 7.3448 7.6552 7.9655 8.2759 8.5862 8.8966 9.2069 9.5172 9.8276 10.1379 10.4483 10.7586 11.0690 11.3793 11.6897 12.0000 12.4333 12.8667 13.3000 13.7333 14.1667 14.6000 15.0333 15.4667 15.9000 16.3333 16.7667 17.2000 17.6333 18.0667 18.5000 18.9333 19.3667 19.8000 20.2333 20.6667 21.1000 21.5333 21.9667 22.4000 22.8333 23.2667 23.7000 24.1333 24.5667 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.01675237 -0.01848537 -0.02021837 -0.02195138 -0.02368438 -0.02541738 -0.02715039 -0.02888339 -0.03061639 -0.03234940 -0.03408240 -0.03581540 -0.03754841 -0.03928141 -0.04101441 -0.04274742 -0.04448042 -0.04621342 -0.04794643 -0.04967943 -0.05141243 -0.05314544 -0.05487844 -0.05661144 -0.05572739 -0.05017938 -0.04026019 -0.02871709 -0.00971339 -0.04067865 0.00818207 0.00211342 -0.00482802 -0.01262516 -0.02096731 -0.02974463 -0.03916053 -0.04874708 -0.05875276 -0.06931562 -0.07999290 -0.09081923 -0.10219998 -0.11405921 -0.12562480 -0.13746588 -0.14961465 -0.16249907 -0.17543461 -0.18782154 -0.20027790 -0.21343756 -0.22678626 -0.24101883 -0.25473108 -0.26767005 -0.28052026 -0.29438557 -0.30826452 -0.32314303 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER FORE-AFT DAMPING ------------------------------------------- +-1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] +0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +45 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 20.5 21.0 21.5 22.0 22.5 23.0 23.5 24.0 24.5 25.0 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.03433429157815764 0.031810319257858856 0.0290411053542571 0.026159059732509628 0.023197536519278562 0.02023601330604749 0.016539572859770497 0.012812807649260424 0.009178197567017179 0.0055435874847739285 0.0019089774025306792 0.00035367821989023234 -0.0001847841217967057 -0.0006880495172071447 0.0011581050975086446 0.07313877536508506 0.10080437650314836 0.12350678083692652 0.143559308829277 0.16319259532494113 0.18282588182060522 0.19751809368049394 0.2121360790842221 0.2267540644879502 0.24148455945770236 0.2562873503246761 0.27109014119164987 0.2851632439462169 0.2986736364561117 0.3121840289660065 0.3256944214759013 0.337480946474891 0.3490998890057371 0.360718831536583 0.37233777406742913 0.3839567165982751 0.39557565912912107 0.40673217388403315 0.41782455324483364 0.42891693260563396 0.44000931196643445 0.45110169132723493 0.4621940706880354 0.47314377493350046 0.483632110622263 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +0.000000000000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) +0 ! Ind_BldPitch - The column in OL_Filename that contains the blade pitch input in rad +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the generator torque in Nm + +!------- Pitch Actuator Model ----------------------------------------------------- +3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +2 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt new file mode 100644 index 0000000000..fecaae6404 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt @@ -0,0 +1,29 @@ +# ----- Rotor performance tables for the OpenFAST_5MW wind turbine ----- +# ------------ Written on Oct-30-19 using the ROSCO toolbox ------------ + +# Pitch angle vector - x axis (matrix columns) (deg) +-1.0 -0.5 0.0 0.5 1.0 +# TSR vector - y axis (matrix rows) (-) +3.0 3.5 4.0 +# Wind speed vector - z axis (m/s) +11.4 + +# Power coefficient + +0.089542 0.094392 0.099145 0.103788 0.108307 +0.141508 0.147502 0.153253 0.158739 0.163935 +0.201243 0.207940 0.214159 0.219868 0.225035 + + +# Thrust coefficient + +0.230643 0.231358 0.231931 0.232351 0.232612 +0.296203 0.296020 0.295605 0.294960 0.294088 +0.365790 0.364336 0.362614 0.360628 0.358382 + + +# Torque coefficient + +0.029876 0.031494 0.033080 0.034629 0.036137 +0.040469 0.042184 0.043828 0.045397 0.046883 +0.050359 0.052034 0.053591 0.055019 0.056312 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_1Grp2Chan_TimeTrack.tdms b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_1Grp2Chan_TimeTrack.tdms new file mode 100644 index 0000000000000000000000000000000000000000..b09be010028a6c37af380da97c19b6bb4a224bc1 GIT binary patch literal 560 zcmWG>3C`tXU|`4)Vqg$q0y2Q$3WQ<+aRq@`Up*x?EwMDGL|tFqIX}lyT?8n|1;mU% z3}S--NHGr(m#4*N<|P-U=BDPAfYfNLU%033(<*y@h+J_=Vo^zaep*^_Dp(pQ3I?xq)HHfR5g^NSWw zz43DYj`CyQ!Z|Ue%jI7``N?WPg^m6wzsRDHmA4f`+oijC#8+Np4&V3 k$(}7={L9|AQsVo{mQD74V)e>PTe|j7C}NiN*!0aF08ixAWB>pF literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_2Grp2Chan.tdms b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_2Grp2Chan.tdms new file mode 100644 index 0000000000000000000000000000000000000000..cf9b2e919aefb324943c3908cd03d889680d9451 GIT binary patch literal 1019 zcmWG>3C`tXU|`4)Vqmz>3}gVoeh9_D0;Gk3SYO?}D8ID8QC(l%IX@>PGdERT1Sre} z#Ed`;V#9y{kb$b)5vN)Sgjy$r(ZwZ+xdmW7EJ~cf8<)5+#@upnA02RMt50;*C9V&mz9xNSj5325geGb^5M^N=o>;u3CK85Og zZf`c_I#B2(RR1e`sZ-fN9dDrKyt9Y6>w~?p&8N$E+`sO3{I_a9m-5s7H?{_9wV!-v z&)i_HvZM9V{#NGZtMR-a_J87Beq(j(tNrRV4vDK>F7NNFyS(7U~2_UqQ$Cw)8gVgJDgOiB(yYzO!fw=Usa^K5@I z!!+Bc55Deyb8EKU@kO8aXNp=E%XB`ofBNRI^!XQ0_e(u;VfMay4VDTR7*2H`hlM4G zZjkOp;WOm+q3|2_^`r0^1SX>J8xkj>@EJBwM&UQGOhw@{giS-?H!Poy!e{t71BKt< zH4BB$FlROjzv1m16h4FfJQRMzg!w3ZhDQrf_zlL3Q1}e3i&6Lu*Oq|!%yt}!PYb^7 zXI0~o|EKoQewDkJ=;4n~>`z!;kj~w4%l=5F*6pW>ANN1(X(%d~@YR0a+J%3eA6(y` zwVi)~(cc^PyBmJ2H=Xg&{!zs$?C&bK|6;#W zwm&c}rcRbwh*|qhJGS63gw0JGBzoC)C(sRyN?BklF KWft-5w+8^)7CplN literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat new file mode 100644 index 0000000000..3bc428de60 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat @@ -0,0 +1,11 @@ +VARIABLES = "Alpha_[deg]","Cl_[-]","Cd_[-]" +-3.821594 -0.1068473 0.01848371 +-0.1351164 0.00076118 0.0133004 +7.051793 0.6396082 0.03828023 +18.14393 1.323551 0.1517825 +24.83678 1.788388 0.3538913 +29.01219 1.475058 0.2442263 +36.01752 1.786413 0.4773372 +37.48678 1.915456 0.7654659 +41.04442 1.728049 0.71557 +47.60305 1.444345 1.050172 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat new file mode 100644 index 0000000000..b9b7fafcdd --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat @@ -0,0 +1,28 @@ +TITLE = "accosurf-007 t= 15.5894" +VARIABLES = "CoordinateX" +"CoordinateY" +"CoordinateZ" +"u[m/s]" +"v[m/s]" +"w[m/s]" +DATASETAUXDATA NORM_m.s="0.28762452E+03 " +DATASETAUXDATA PATH="/lustre/cray/" +DATASETAUXDATA TIMESTAMP="01:35:32_19.02.2020" +DATASETAUXDATA TINF_K="0.28815000E+03 " +ZONE T="dom-7" + STRANDID=7, SOLUTIONTIME=15.5894049 + I=3, J=4, K=1, ZONETYPE=Ordered + DATAPACKING=POINT + DT=(SINGLE SINGLE SINGLE SINGLE SINGLE SINGLE ) + 0.000000000E+00 -1.000000000E+02 0.000000000E+00 6.422097965E-09 1.117181000E-11 -1.143066718E-11 + 0.000000000E+00 -9.600000000E+01 0.000000000E+00 6.424601295E-09 8.401054158E-12 -1.158505930E-11 + 0.000000000E+00 -9.200000000E+01 0.000000000E+00 6.426116972E-09 6.519663281E-12 -1.169956233E-11 + 0.000000000E+00 -8.800000000E+01 0.000000000E+00 6.426900789E-09 5.326627594E-12 -1.180718977E-11 + 0.000000000E+00 -8.400000000E+01 0.000000000E+00 6.427312460E-09 5.249155711E-12 -1.310005490E-11 + 0.000000000E+00 -8.000000000E+01 0.000000000E+00 1.353533626E+00 -8.091490017E-04 -2.368479269E-03 + 0.000000000E+00 -7.600000000E+01 0.000000000E+00 2.526548393E-08 1.098948450E-11 -4.482937632E-11 + 0.000000000E+00 -7.200000000E+01 0.000000000E+00 2.526406639E-08 9.429169251E-12 -4.497692149E-11 + 0.000000000E+00 -6.800000000E+01 0.000000000E+00 2.526252274E-08 7.517836180E-12 -4.499923351E-11 + 0.000000000E+00 -6.400000000E+01 0.000000000E+00 2.526164522E-08 5.834952747E-12 -4.466245082E-11 + 0.000000000E+00 -6.000000000E+01 0.000000000E+00 2.525990261E-08 4.354900121E-12 -4.505384260E-11 + 0.000000000E+00 -5.600000000E+01 0.000000000E+00 2.525895049E-08 3.207297926E-12 -4.506787304E-11 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt new file mode 100644 index 0000000000..594d650c54 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt @@ -0,0 +1,17 @@ +--------------TurbSim v2.00.* User Time Series Input File----------------------- +Comment +-------------------------------------------------------------------------------- + 3 nComp - Number of velocity components in the file + 1 nPoints - Number of time series points contained in this file (-) + 1 RefPtID - Index of the reference point (1-nPoints) + Pointyi Pointzi ! nPoints listed in order of increasing height + (m) (m) + 0.00 80.00 +--------Time Series------------------------------------------------------------- +Elapsed Time Point01u Point01v Point01w + (s) (m/s) (m/s) (m/s) +0.00 9.373997257 -0.863171203 -1.009559755 +0.01 9.291859275 -0.787680428 -1.030878636 +0.02 9.267038696 -0.870045789 -1.090877688 +0.03 9.404202705 -0.903012754 -1.009028963 +0.04 9.339542454 -0.751390609 -1.02042094 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_FAST.bts b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_FAST.bts new file mode 100644 index 0000000000000000000000000000000000000000..3e8497ae4bd0f76e97b8b578d542cce1e32eadfa GIT binary patch literal 5572 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 S3*Xk&8PWI)l;IpO_@v}hE%Oop literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_NoTwr.bts b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_NoTwr.bts new file mode 100644 index 0000000000000000000000000000000000000000..030a0ddac796a25a103b7d9523d3e4dfeed970bd GIT binary patch literal 7372 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 literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_WithTwr.bts b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_WithTwr.bts new file mode 100644 index 0000000000000000000000000000000000000000..0546d43a1f8e415c62196f61cb985b0af604d737 GIT binary patch literal 9772 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≠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

g6GT^AieNKMRiiNF` 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ξ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

Detg!){-Z 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

htm_LGjwNt{m2?a^s7)kVAh(*! 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

YCi>i`GwhO{BrQ!*75X#XHhHkFRI#C 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�`|Kqly9dfad$_?I9 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�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

SFzbvRW;|S! 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

=x@@>7S(SYqT)KmVE;?vGqJ9c-9dX)O4v2qW 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%0Aktwu9uzHKX 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%0A;Nt!B!|_LoAoa}>w@>Jv^!OpQ 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

6aDCF<4Tq$e?oJ{hC`+*%yYwxpqX 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 VixCb~4D{3WkehFBPrxj4`wyM62wngH diff --git a/zmq_coupling_tests/templateDir/AeroData/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/Cylinder1.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/Cylinder1.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/Cylinder1.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/Cylinder2.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/Cylinder2.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/Cylinder2.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU21_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/DU21_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU21_A17.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU25_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/DU25_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU25_A17.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU30_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/DU30_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU30_A17.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU35_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/DU35_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU35_A17.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU40_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/DU40_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/DU40_A17.dat diff --git a/zmq_coupling_tests/templateDir/AeroData/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/NACA64_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/AeroData/NACA64_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/AeroData/NACA64_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder1.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/Cylinder1.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder1.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder1_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder1_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/Cylinder1_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder1_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder2.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/Cylinder2.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder2.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/Cylinder2_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder2_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/Cylinder2_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/Cylinder2_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU21_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU21_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU21_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU21_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU21_A17_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU21_A17_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU21_A17_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU25_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU25_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU25_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU25_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU25_A17_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU25_A17_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU25_A17_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU30_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU30_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU30_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU30_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU30_A17_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU30_A17_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU30_A17_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU35_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU35_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU35_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU35_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU35_A17_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU35_A17_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU35_A17_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU40_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU40_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU40_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/DU40_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU40_A17_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/DU40_A17_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/DU40_A17_coords.txt diff --git a/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/NACA64_A17.dat similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/NACA64_A17.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/NACA64_A17.dat diff --git a/zmq_coupling_tests/templateDir/Airfoils/NACA64_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/NACA64_A17_coords.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Airfoils/NACA64_A17_coords.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Airfoils/NACA64_A17_coords.txt diff --git a/zmq_coupling_tests/templateDir/Cp_Ct_Cq.NREL5MW.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test01/Cp_Ct_Cq.NREL5MW.txt similarity index 100% rename from zmq_coupling_tests/templateDir/Cp_Ct_Cq.NREL5MW.txt rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/Cp_Ct_Cq.NREL5MW.txt diff --git a/zmq_coupling_tests/templateDir/DISCON.IN b/zmq_coupling_tests/templatesDir/OFZMQ_test01/DISCON.IN similarity index 100% rename from zmq_coupling_tests/templateDir/DISCON.IN rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/DISCON.IN diff --git a/zmq_coupling_tests/templateDir/IceDyn_Input.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/IceDyn_Input.dat similarity index 100% rename from zmq_coupling_tests/templateDir/IceDyn_Input.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/IceDyn_Input.dat diff --git a/zmq_coupling_tests/templateDir/IceFloe_IEC_Crushing.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/IceFloe_IEC_Crushing.dat similarity index 100% rename from zmq_coupling_tests/templateDir/IceFloe_IEC_Crushing.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/IceFloe_IEC_Crushing.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_AeroDyn_blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_AeroDyn_blade.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_AeroDyn_blade.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_AeroDyn_blade.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_BeamDyn.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_BeamDyn.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_BeamDyn_Blade.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_BeamDyn_Blade.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_BeamDyn_Blade.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Blade.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Blade.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Blade.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_InflowWind.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_InflowWind.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_InflowWind.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat similarity index 99% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat index f21b8af75d..9a8847ba0a 100644 --- a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -85,7 +85,7 @@ TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used on 8.7600000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 ====== Outputs ==================================================================================== True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) - 0 NBlOuts - Number of blade node outputs [0 - 9] (-) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) 0 NTwOuts - Number of tower node outputs [0 - 9] (-) 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat diff --git a/zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ServoDyn.dat similarity index 100% rename from zmq_coupling_tests/templateDir/NRELOffshrBsline5MW_Onshore_ServoDyn.dat rename to zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ServoDyn.dat diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum new file mode 100644 index 0000000000..97d3fb347b --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum @@ -0,0 +1,61 @@ + +This summary information was generated by AeroDyn on 12-Jun-2024 at 10:59:24. + +====== General Options ============================================================================ + 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory + 2 AFAeroMod - Type of blade airfoil aerodynamics model: Beddoes-Leishman unsteady model + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +====== Blade-Element/Momentum Theory Options ====================================================== + 2 SkewMod - Type of skewed-wake correction model: Pitt/Peters + T TipLoss - Use the Prandtl tip-loss model? Yes + T HubLoss - Use the Prandtl hub-loss model? Yes + T TanInd - Include tangential induction in BEMT calculations? Yes + F AIDrag - Include the drag term in the axial-induction calculation? No + F TIDrag - Include the drag term in the tangential-induction calculation? No + 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== + 3 UAMod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 3 NBlOuts - Number of blade nodes selected for output + 19 NumBlNds - Number of blade nodes in the analysis + Blade nodes selected for output: Output node Analysis node + ----------- ------------- + 1 1 + 2 9 + 3 19 + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum new file mode 100644 index 0000000000..27cd05c367 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum @@ -0,0 +1,210 @@ + +This summary information was generated by ElastoDyn on 12-Jun-2024 at 10:59:24. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 16 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Enabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.00500000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 0.000 + Mass Incl. Platform (kg) 696850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 OoPDefl1 (m) + 2 IPDefl1 (m) + 3 TwstDefl1 (deg) + 4 BldPitch1 (deg) + 5 Azimuth (deg) + 6 RotSpeed (rpm) + 7 GenSpeed (rpm) + 8 TTDspFA (m) + 9 TTDspSS (m) + 10 TTDspTwst (deg) + 11 Spn2MLxb1 (kN-m) + 12 Spn2MLyb1 (kN-m) + 13 RootFxb1 (kN) + 14 RootFyb1 (kN) + 15 RootFzb1 (kN) + 16 RootMxb1 (kN-m) + 17 RootMyb1 (kN-m) + 18 RootMyc1 (kN-m) + 19 RootMyc2 (kN-m) + 20 RootMyc3 (kN-m) + 21 RootMzb1 (kN-m) + 22 RotTorq (kN-m) + 23 LSSGagMya (kN-m) + 24 LSSGagMza (kN-m) + 25 YawBrFxp (kN) + 26 YawBrFyp (kN) + 27 YawBrFzp (kN) + 28 YawBrMxp (kN-m) + 29 YawBrMyp (kN-m) + 30 YawBrMzp (kN-m) + 31 TwrBsFxt (kN) + 32 TwrBsFyt (kN) + 33 TwrBsFzt (kN) + 34 TwrBsMxt (kN-m) + 35 TwrBsMyt (kN-m) + 36 TwrBsMzt (kN-m) + 37 NcIMURAys (deg/s^2) + 38 NcIMUTAxs (m/s^2) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum new file mode 100644 index 0000000000..32111528ec --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 12-Jun-2024 at 10:59:24. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 0 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 12-Jun-2024 at 10:59:24. + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum new file mode 100644 index 0000000000..0df084b4f8 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum @@ -0,0 +1,16 @@ + +Predictions were generated on 12-Jun-2024 at 10:59:24 + OpenFAST + + + +AirfoilNumber TableNumber alpha0 alpha1 alpha2 eta_e C_nalpha C_lalpha T_f0 T_V0 T_p T_VL b1 b2 b5 A1 A2 A5 S1 S2 S3 S4 Cn1 Cn2 St_sh Cd0 Cm0 k0 k1 k2 k3 k1_hat x_cp_bar UACutout UACutout_delta UACutout_blend filtCutOff alphaLowerWrap alphaLower alphaUpper alphaUpperWrap c_alphaLowerWrap c_alphaLower c_alphaUpper c_alphaUpperWrap c_RateWrap c_RateLower c_Rate c_RateUpper +(-) (-) (deg) (deg) (deg) (-) (-/rad) (-/rad) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (deg) (deg) (deg) (-) (deg) (deg) (deg) (deg) (-) (-) (-) (-) (-/rad) (-/rad) (-/rad) (-/rad) + 1 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 2 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 3 1 -3.20000 9.00000 -9.00000 1.00000 7.48880 9.05273 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.35190 -0.32260 0.19000 0.03000 -0.05000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -0.25000 2.25000 55.00000 -5.61045 0.10507 0.47793 8.35959 -3.07855 7.31788 8.54531 8.56087 + 4 1 -1.20000 11.50000 -11.50000 1.00000 7.18380 8.82355 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.67170 -0.30750 0.19000 0.01200 -0.07000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -40.00000 -2.75000 5.75000 50.00000 -5.56999 -0.20172 0.96897 6.72117 -2.60827 8.25716 7.89125 7.44806 + 5 1 -2.20000 9.00000 -9.00000 1.00000 7.33260 8.47978 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.44900 -0.61380 0.19000 0.00800 -0.09000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -6.39000 6.25000 45.00000 -5.67249 -0.57626 1.09716 5.87251 -2.44993 7.56262 7.58542 7.06084 + 6 1 -3.20000 8.50000 -8.50000 1.00000 6.44620 7.97647 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.43360 -0.68730 0.19000 0.00600 -0.12000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -7.96000 3.75000 32.00000 -5.53755 -0.61874 0.91909 4.38619 -2.00914 7.60871 7.52444 7.03186 + 7 1 -4.20000 8.00000 -8.00000 1.00000 6.20470 8.96402 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.41440 -0.53240 0.19000 0.00600 -0.12100 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -35.00000 -9.05000 2.75000 30.00000 -4.67755 -0.67498 0.85701 4.10998 -1.70674 8.83741 7.43866 6.83970 + 8 1 -4.43200 9.00000 -9.00000 1.00000 6.00310 7.67763 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.40730 -0.79450 0.19000 0.00650 -0.08800 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -50.00000 -5.50000 4.50000 28.00000 -6.14917 -0.20664 0.95141 3.60393 -1.98160 7.65128 6.63516 6.46715 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech new file mode 100644 index 0000000000..0978542695 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech @@ -0,0 +1,107 @@ + +This file of echoed input was generated by OpenFAST on 12-Jun-2024 at 10:59:24. + +Data from OpenFAST primary input file "OFZMQ_test01.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 6.0000E+02 TMax - Total run time (s) + 5.0000E-03 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) + 1.2250E+00 AirDens - Air density (kg/m^3) + 1.0250E+03 WtrDens - Water density (kg/m^3) + 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) + 1.0350E+05 Patm - Atmospheric pressure (Pa) + 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) + 5.0000E+01 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + T SumPrint - Print summary data to .sum (flag) + 5.0000E+00 SttsTime - Amount of time between screen status messages (s) + 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES10.3E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + T VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "https://127.0.1:5555" + 0 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + " + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 6 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + "Wind1VelX" "Azimuth" "GenTq" "GenPwr" "OoPDefl1" "IPDefl1" + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.fst new file mode 100644 index 0000000000..cc049e9829 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.fst @@ -0,0 +1,86 @@ +------- OpenFAST example INPUT FILE ------------------------------------------- +FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +600.0 TMax - Total run time (s) +0.005 DT - Recommended module time step (s) +2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} +0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} +99999 DT_UJac - Time between calls to get Jacobians (s) +1000000.0 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ +1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} +1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} +2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} +1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} +0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} +0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} +0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} +0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} +0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- +9.80665 Gravity - Gravitational acceleration (m/s^2) +1.225 AirDens - Air density (kg/m^3) +1025 WtrDens - Water density (kg/m^3) +1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) +335 SpdSound - Speed of sound in working fluid (m/s) +103500 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] +1700 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] +50 WtrDpth - Water depth (m) +0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +5 SttsTime - Amount of time between screen status messages (s) +99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +default DT_Out - Time step for tabular output (s) (or "default") +0 TStart - Time to begin tabular output (s) +0 OutFileFmt - Format for tabular (time-marching) output file (switch) {0: uncompressed binary [.outb], 1: text file [.out], 2: binary file [.outb], 3: both 1 and 2} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) +3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) +0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) +0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) +0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) +0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) +2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] +30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] +1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] +1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ +0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} +1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +True VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] +15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"https://127.0.1:5555" ZmqInAddress - REQ-REP localhost address +0 ZmqInNbr - Number of parameters to be requested +none ZmqInChannels - Channels to be requested at communication time +default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +6 ZmqOutNbr - Number of channels to be broadcasted +"Wind1VelX" +"Azimuth" +"GenTq" +"GenPwr" +"OoPDefl1" +"IPDefl1" ZmqOutChannels - Channels to be broadcasterd at communication time +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum new file mode 100644 index 0000000000..520dac4435 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum @@ -0,0 +1,103 @@ + +FAST Summary File + +Predictions were generated on 12-Jun-2024 at 10:59:24 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-7-g2ec068f8-dirty + compiled with + NWTC Subroutine Library + ElastoDyn + BeamDyn (unknown version, unknown date) [not called] + InflowWind + AeroDyn14 (unknown version, unknown date) [not called] + AeroDyn + ServoDyn + HydroDyn (unknown version, unknown date) [not called] + SubDyn (unknown version, unknown date) [not called] + ExtPtfm_MCKF (unknown version, unknown date) [not called] + MAP (unknown version, unknown date) [not called] + FEAMooring (unknown version, unknown date) [not called] + MoorDyn (unknown version, unknown date) [not called] + OrcaFlexInterface (unknown version, unknown date) [not called] + IceFloe (unknown version, unknown date) [not called] + IceDyn (unknown version, unknown date) [not called] + + +Modeling a land-based turbine +Description from the FAST input file: + FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) + +Interpolation order for input/output time histories: 2 (quadratic) +Number of correction iterations: 0 + + + Requested Time Steps + ------------------------------------------------- + Component Time Step (s) Subcycles (-) + ----------------- --------------- ------------- + FAST (glue code) 5.000E-03 + InflowWind 5.000E-03 1 + ElastoDyn 5.000E-03 1 + AeroDyn 5.000E-03 1 + ServoDyn 5.000E-03 1 + FAST output files 5.000E-03 1 + + + Requested Channels in FAST Output File(s) + -------------------------------------------- + Number Name Units Generated by + ------ -------------------- -------------------- ------------ + 1 Time (s) OpenFAST + 2 Wind1VelX (m/s) InflowWind + 3 Wind1VelY (m/s) InflowWind + 4 Wind1VelZ (m/s) InflowWind + 5 OoPDefl1 (m) ElastoDyn + 6 IPDefl1 (m) ElastoDyn + 7 TwstDefl1 (deg) ElastoDyn + 8 BldPitch1 (deg) ElastoDyn + 9 Azimuth (deg) ElastoDyn + 10 RotSpeed (rpm) ElastoDyn + 11 GenSpeed (rpm) ElastoDyn + 12 TTDspFA (m) ElastoDyn + 13 TTDspSS (m) ElastoDyn + 14 TTDspTwst (deg) ElastoDyn + 15 Spn2MLxb1 (kN-m) ElastoDyn + 16 Spn2MLyb1 (kN-m) ElastoDyn + 17 RootFxb1 (kN) ElastoDyn + 18 RootFyb1 (kN) ElastoDyn + 19 RootFzb1 (kN) ElastoDyn + 20 RootMxb1 (kN-m) ElastoDyn + 21 RootMyb1 (kN-m) ElastoDyn + 22 RootMyc1 (kN-m) ElastoDyn + 23 RootMyc2 (kN-m) ElastoDyn + 24 RootMyc3 (kN-m) ElastoDyn + 25 RootMzb1 (kN-m) ElastoDyn + 26 RotTorq (kN-m) ElastoDyn + 27 LSSGagMya (kN-m) ElastoDyn + 28 LSSGagMza (kN-m) ElastoDyn + 29 YawBrFxp (kN) ElastoDyn + 30 YawBrFyp (kN) ElastoDyn + 31 YawBrFzp (kN) ElastoDyn + 32 YawBrMxp (kN-m) ElastoDyn + 33 YawBrMyp (kN-m) ElastoDyn + 34 YawBrMzp (kN-m) ElastoDyn + 35 TwrBsFxt (kN) ElastoDyn + 36 TwrBsFyt (kN) ElastoDyn + 37 TwrBsFzt (kN) ElastoDyn + 38 TwrBsMxt (kN-m) ElastoDyn + 39 TwrBsMyt (kN-m) ElastoDyn + 40 TwrBsMzt (kN-m) ElastoDyn + 41 NcIMURAys (deg/s^2) ElastoDyn + 42 NcIMUTAxs (m/s^2) ElastoDyn + 43 RtFldFxh (N) AeroDyn + 44 RtFldFyh (N) AeroDyn + 45 RtFldFzh (N) AeroDyn + 46 RtFldMxh (N-m) AeroDyn + 47 RtFldMyh (N-m) AeroDyn + 48 RtFldMzh (N-m) AeroDyn + 49 RtVAvgxh (m/s) AeroDyn + 50 RtFldCp (-) AeroDyn + 51 RtFldCt (-) AeroDyn + 52 RtArea (m^2) AeroDyn + 53 RtSpeed (rpm) AeroDyn + 54 RtTSR (-) AeroDyn + 55 GenTq (kN-m) ServoDyn + 56 GenPwr (kW) ServoDyn diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder1.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder1.dat new file mode 100644 index 0000000000..4ff6d1311f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder1.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.50 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.50 Minimum CD value +-180.00 0.000 0.5000 0.000 + 0.00 0.000 0.5000 0.000 + 180.00 0.000 0.5000 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder2.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder2.dat new file mode 100644 index 0000000000..29f643ca65 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder2.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.35 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.35 Minimum CD value +-180.00 0.000 0.3500 0.000 + 0.00 0.000 0.3500 0.000 + 180.00 0.000 0.3500 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/DU21_A17.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/DU21_A17.dat new file mode 100644 index 0000000000..52cc6d3ff9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/DU21_A17.dat @@ -0,0 +1,158 @@ +DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -5.0609 Zero Cn angle of attack (deg) + 6.2047 Cn slope for zero lift (dimensionless) + 1.4144 Cn extrapolated to value at positive stall angle of attack + -0.5324 Cn at stall value for negative angle of attack + -1.50 Angle of attack for minimum CD (deg) + 0.0057 Minimum CD value +-180.00 0.000 0.0185 0.0000 +-175.00 0.394 0.0332 0.1978 +-170.00 0.788 0.0945 0.3963 +-160.00 0.670 0.2809 0.2738 +-155.00 0.749 0.3932 0.3118 +-150.00 0.797 0.5112 0.3413 +-145.00 0.818 0.6309 0.3636 +-140.00 0.813 0.7485 0.3799 +-135.00 0.786 0.8612 0.3911 +-130.00 0.739 0.9665 0.3980 +-125.00 0.675 1.0625 0.4012 +-120.00 0.596 1.1476 0.4014 +-115.00 0.505 1.2206 0.3990 +-110.00 0.403 1.2805 0.3943 +-105.00 0.294 1.3265 0.3878 +-100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/DU25_A17.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/DU25_A17.dat new file mode 100644 index 0000000000..3c24e77f5f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/DU25_A17.dat @@ -0,0 +1,157 @@ +DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.2422 Zero Cn angle of attack (deg) + 6.4462 Cn slope for zero lift (dimensionless) + 1.4336 Cn extrapolated to value at positive stall angle of attack + -0.6873 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0065 Minimum CD value +-180.00 0.000 0.0202 0.0000 +-175.00 0.368 0.0324 0.1845 +-170.00 0.735 0.0943 0.3701 +-160.00 0.695 0.2848 0.2679 +-155.00 0.777 0.4001 0.3046 +-150.00 0.828 0.5215 0.3329 +-145.00 0.850 0.6447 0.3540 +-140.00 0.846 0.7660 0.3693 +-135.00 0.818 0.8823 0.3794 +-130.00 0.771 0.9911 0.3854 +-125.00 0.705 1.0905 0.3878 +-120.00 0.624 1.1787 0.3872 +-115.00 0.530 1.2545 0.3841 +-110.00 0.426 1.3168 0.3788 +-105.00 0.314 1.3650 0.3716 +-100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/DU30_A17.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/DU30_A17.dat new file mode 100644 index 0000000000..23ecb3e9a3 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/DU30_A17.dat @@ -0,0 +1,159 @@ +DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -2.3220 Zero Cn angle of attack (deg) + 7.3326 Cn slope for zero lift (dimensionless) + 1.4490 Cn extrapolated to value at positive stall angle of attack + -0.6138 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0087 Minimum CD value +-180.00 0.000 0.0267 0.0000 +-175.00 0.274 0.0370 0.1379 +-170.00 0.547 0.0968 0.2778 +-160.00 0.685 0.2876 0.2740 +-155.00 0.766 0.4025 0.3118 +-150.00 0.816 0.5232 0.3411 +-145.00 0.836 0.6454 0.3631 +-140.00 0.832 0.7656 0.3791 +-135.00 0.804 0.8807 0.3899 +-130.00 0.756 0.9882 0.3965 +-125.00 0.690 1.0861 0.3994 +-120.00 0.609 1.1730 0.3992 +-115.00 0.515 1.2474 0.3964 +-110.00 0.411 1.3084 0.3915 +-105.00 0.300 1.3552 0.3846 +-100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/DU35_A17.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/DU35_A17.dat new file mode 100644 index 0000000000..9e962a1e63 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/DU35_A17.dat @@ -0,0 +1,151 @@ +DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 11.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.8330 Zero Cn angle of attack (deg) + 7.1838 Cn slope for zero lift (dimensionless) + 1.6717 Cn extrapolated to value at positive stall angle of attack + -0.3075 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0094 Minimum CD value +-180.00 0.000 0.0407 0.0000 +-175.00 0.223 0.0507 0.0937 +-170.00 0.405 0.1055 0.1702 +-160.00 0.658 0.2982 0.2819 +-155.00 0.733 0.4121 0.3213 +-150.00 0.778 0.5308 0.3520 +-145.00 0.795 0.6503 0.3754 +-140.00 0.787 0.7672 0.3926 +-135.00 0.757 0.8785 0.4046 +-130.00 0.708 0.9819 0.4121 +-125.00 0.641 1.0756 0.4160 +-120.00 0.560 1.1580 0.4167 +-115.00 0.467 1.2280 0.4146 +-110.00 0.365 1.2847 0.4104 +-105.00 0.255 1.3274 0.4041 +-100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/DU40_A17.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/DU40_A17.dat new file mode 100644 index 0000000000..08a2d28261 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/DU40_A17.dat @@ -0,0 +1,152 @@ +DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.3430 Zero Cn angle of attack (deg) + 7.4888 Cn slope for zero lift (dimensionless) + 1.3519 Cn extrapolated to value at positive stall angle of attack + -0.3226 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0113 Minimum CD value +-180.00 0.000 0.0602 0.0000 +-175.00 0.218 0.0699 0.0934 +-170.00 0.397 0.1107 0.1697 +-160.00 0.642 0.3045 0.2813 +-155.00 0.715 0.4179 0.3208 +-150.00 0.757 0.5355 0.3516 +-145.00 0.772 0.6535 0.3752 +-140.00 0.762 0.7685 0.3926 +-135.00 0.731 0.8777 0.4048 +-130.00 0.680 0.9788 0.4126 +-125.00 0.613 1.0700 0.4166 +-120.00 0.532 1.1499 0.4176 +-115.00 0.439 1.2174 0.4158 +-110.00 0.337 1.2716 0.4117 +-105.00 0.228 1.3118 0.4057 +-100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/AeroData/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/clean/AeroData/NACA64_A17.dat new file mode 100644 index 0000000000..3db1887a38 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/AeroData/NACA64_A17.dat @@ -0,0 +1,143 @@ +NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.4320 Zero Cn angle of attack (deg) + 6.0031 Cn slope for zero lift (dimensionless) + 1.4073 Cn extrapolated to value at positive stall angle of attack + -0.7945 Cn at stall value for negative angle of attack + -1.00 Angle of attack for minimum CD (deg) + 0.0052 Minimum CD value +-180.00 0.000 0.0198 0.0000 +-175.00 0.374 0.0341 0.1880 +-170.00 0.749 0.0955 0.3770 +-160.00 0.659 0.2807 0.2747 +-155.00 0.736 0.3919 0.3130 +-150.00 0.783 0.5086 0.3428 +-145.00 0.803 0.6267 0.3654 +-140.00 0.798 0.7427 0.3820 +-135.00 0.771 0.8537 0.3935 +-130.00 0.724 0.9574 0.4007 +-125.00 0.660 1.0519 0.4042 +-120.00 0.581 1.1355 0.4047 +-115.00 0.491 1.2070 0.4025 +-110.00 0.390 1.2656 0.3981 +-105.00 0.282 1.3104 0.3918 +-100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1.dat new file mode 100644 index 0000000000..393e5d8721 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1.dat @@ -0,0 +1,59 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.50 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder1_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.5 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.5000 0.0 + 0.00 0.000 0.5000 0.0 + 180.00 0.000 0.5000 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1_coords.txt new file mode 100644 index 0000000000..3c8ec3d3b4 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.5 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2.dat new file mode 100644 index 0000000000..5294db4fdb --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2.dat @@ -0,0 +1,60 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.35 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder2_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.35 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.3500 0.0 + 0.00 0.000 0.3500 0.0 + 180.00 0.000 0.3500 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2_coords.txt new file mode 100644 index 0000000000..f95e693e67 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.41667 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17.dat new file mode 100644 index 0000000000..7d55bb9ac2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17.dat @@ -0,0 +1,196 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU21_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4144 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.5324 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.121 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 142 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0185 0.0000 + -175.00 0.394 0.0332 0.1978 + -170.00 0.788 0.0945 0.3963 + -160.00 0.670 0.2809 0.2738 + -155.00 0.749 0.3932 0.3118 + -150.00 0.797 0.5112 0.3413 + -145.00 0.818 0.6309 0.3636 + -140.00 0.813 0.7485 0.3799 + -135.00 0.786 0.8612 0.3911 + -130.00 0.739 0.9665 0.3980 + -125.00 0.675 1.0625 0.4012 + -120.00 0.596 1.1476 0.4014 + -115.00 0.505 1.2206 0.3990 + -110.00 0.403 1.2805 0.3943 + -105.00 0.294 1.3265 0.3878 + -100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17_coords.txt new file mode 100644 index 0000000000..3728b88baa --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 93-W-210.lm +! x/c y/c +1.00000 0.00194 +0.99660 0.00304 +0.99314 0.00411 +0.98961 0.00516 +0.98601 0.00618 +0.98235 0.00720 +0.97863 0.00823 +0.97484 0.00927 +0.97098 0.01033 +0.96706 0.01139 +0.96307 0.01246 +0.95902 0.01354 +0.95490 0.01463 +0.95072 0.01573 +0.94647 0.01684 +0.94216 0.01797 +0.93778 0.01911 +0.93333 0.02026 +0.92882 0.02142 +0.92425 0.02260 +0.91961 0.02379 +0.91490 0.02499 +0.91013 0.02621 +0.90529 0.02744 +0.90039 0.02869 +0.89542 0.02995 +0.89039 0.03122 +0.88529 0.03250 +0.88013 0.03379 +0.87490 0.03510 +0.86961 0.03643 +0.86425 0.03776 +0.85882 0.03912 +0.85333 0.04048 +0.84778 0.04186 +0.84216 0.04326 +0.83647 0.04466 +0.83072 0.04608 +0.82490 0.04752 +0.81902 0.04896 +0.81307 0.05041 +0.80706 0.05188 +0.80098 0.05336 +0.79484 0.05484 +0.78863 0.05634 +0.78235 0.05784 +0.77601 0.05936 +0.76961 0.06088 +0.76314 0.06242 +0.75660 0.06396 +0.75000 0.06550 +0.74333 0.06706 +0.73667 0.06860 +0.73000 0.07014 +0.72333 0.07167 +0.71667 0.07320 +0.71000 0.07472 +0.70333 0.07624 +0.69667 0.07774 +0.69000 0.07924 +0.68333 0.08072 +0.67667 0.08220 +0.67000 0.08366 +0.66333 0.08511 +0.65667 0.08655 +0.65000 0.08798 +0.64333 0.08940 +0.63667 0.09080 +0.63000 0.09220 +0.62333 0.09357 +0.61667 0.09492 +0.61000 0.09626 +0.60333 0.09759 +0.59667 0.09889 +0.59000 0.10017 +0.58333 0.10143 +0.57667 0.10267 +0.57000 0.10389 +0.56333 0.10509 +0.55667 0.10627 +0.55000 0.10742 +0.54333 0.10854 +0.53667 0.10964 +0.53000 0.11071 +0.52333 0.11175 +0.51667 0.11277 +0.51000 0.11375 +0.50333 0.11470 +0.49667 0.11562 +0.49000 0.11650 +0.48333 0.11734 +0.47667 0.11813 +0.47000 0.11889 +0.46333 0.11960 +0.45667 0.12027 +0.45000 0.12089 +0.44333 0.12147 +0.43667 0.12200 +0.43000 0.12249 +0.42333 0.12292 +0.41667 0.12331 +0.41000 0.12365 +0.40333 0.12394 +0.39667 0.12418 +0.39000 0.12436 +0.38333 0.12449 +0.37667 0.12457 +0.37000 0.12459 +0.36333 0.12455 +0.35667 0.12446 +0.35000 0.12431 +0.34333 0.12411 +0.33667 0.12385 +0.33000 0.12353 +0.32333 0.12317 +0.31667 0.12275 +0.31000 0.12228 +0.30333 0.12175 +0.29667 0.12117 +0.29000 0.12053 +0.28333 0.11984 +0.27667 0.11910 +0.27000 0.11829 +0.26333 0.11744 +0.25667 0.11653 +0.25000 0.11557 +0.24342 0.11456 +0.23693 0.11351 +0.23053 0.11243 +0.22421 0.11130 +0.21798 0.11015 +0.21184 0.10896 +0.20579 0.10773 +0.19982 0.10648 +0.19395 0.10520 +0.18816 0.10389 +0.18245 0.10255 +0.17684 0.10119 +0.17131 0.09980 +0.16587 0.09839 +0.16052 0.09696 +0.15526 0.09550 +0.15008 0.09403 +0.14499 0.09254 +0.13999 0.09103 +0.13508 0.08950 +0.13026 0.08796 +0.12552 0.08641 +0.12087 0.08483 +0.11631 0.08325 +0.11183 0.08165 +0.10745 0.08004 +0.10315 0.07843 +0.09893 0.07679 +0.09481 0.07516 +0.09077 0.07351 +0.08683 0.07186 +0.08297 0.07021 +0.07919 0.06854 +0.07551 0.06687 +0.07191 0.06520 +0.06840 0.06353 +0.06498 0.06185 +0.06164 0.06017 +0.05840 0.05850 +0.05524 0.05682 +0.05217 0.05515 +0.04918 0.05348 +0.04629 0.05181 +0.04348 0.05015 +0.04076 0.04849 +0.03812 0.04683 +0.03558 0.04519 +0.03312 0.04356 +0.03075 0.04194 +0.02847 0.04033 +0.02627 0.03874 +0.02417 0.03716 +0.02215 0.03560 +0.02022 0.03404 +0.01837 0.03249 +0.01662 0.03094 +0.01495 0.02940 +0.01337 0.02785 +0.01187 0.02630 +0.01047 0.02476 +0.00915 0.02322 +0.00792 0.02169 +0.00678 0.02017 +0.00572 0.01864 +0.00476 0.01713 +0.00388 0.01562 +0.00309 0.01410 +0.00238 0.01253 +0.00177 0.01094 +0.00124 0.00923 +0.00080 0.00740 +0.00044 0.00537 +0.00018 0.00333 +0.00000 0.00000 +0.00018 -0.00292 +0.00044 -0.00443 +0.00080 -0.00589 +0.00124 -0.00727 +0.00177 -0.00864 +0.00238 -0.00998 +0.00309 -0.01134 +0.00388 -0.01266 +0.00476 -0.01397 +0.00572 -0.01526 +0.00678 -0.01656 +0.00792 -0.01785 +0.00915 -0.01914 +0.01047 -0.02044 +0.01187 -0.02174 +0.01337 -0.02306 +0.01495 -0.02438 +0.01662 -0.02571 +0.01837 -0.02705 +0.02022 -0.02841 +0.02215 -0.02976 +0.02417 -0.03112 +0.02627 -0.03248 +0.02847 -0.03384 +0.03075 -0.03520 +0.03312 -0.03655 +0.03558 -0.03789 +0.03812 -0.03923 +0.04076 -0.04056 +0.04348 -0.04188 +0.04629 -0.04319 +0.04918 -0.04449 +0.05217 -0.04579 +0.05524 -0.04708 +0.05840 -0.04836 +0.06164 -0.04963 +0.06498 -0.05089 +0.06840 -0.05215 +0.07191 -0.05340 +0.07551 -0.05464 +0.07919 -0.05587 +0.08297 -0.05709 +0.08683 -0.05831 +0.09077 -0.05951 +0.09481 -0.06071 +0.09893 -0.06189 +0.10315 -0.06306 +0.10745 -0.06422 +0.11183 -0.06536 +0.11631 -0.06648 +0.12087 -0.06759 +0.12552 -0.06868 +0.13026 -0.06975 +0.13508 -0.07079 +0.13999 -0.07182 +0.14499 -0.07282 +0.15008 -0.07380 +0.15526 -0.07476 +0.16052 -0.07568 +0.16587 -0.07658 +0.17131 -0.07746 +0.17684 -0.07830 +0.18245 -0.07911 +0.18816 -0.07989 +0.19395 -0.08063 +0.19982 -0.08134 +0.20579 -0.08201 +0.21184 -0.08264 +0.21798 -0.08324 +0.22421 -0.08380 +0.23053 -0.08432 +0.23693 -0.08479 +0.24342 -0.08523 +0.25000 -0.08561 +0.25667 -0.08595 +0.26333 -0.08624 +0.27000 -0.08648 +0.27667 -0.08667 +0.28333 -0.08680 +0.29000 -0.08689 +0.29667 -0.08693 +0.30333 -0.08692 +0.31000 -0.08686 +0.31667 -0.08676 +0.32333 -0.08660 +0.33000 -0.08640 +0.33667 -0.08615 +0.34333 -0.08586 +0.35000 -0.08553 +0.35667 -0.08515 +0.36333 -0.08473 +0.37000 -0.08427 +0.37667 -0.08376 +0.38333 -0.08322 +0.39000 -0.08263 +0.39667 -0.08200 +0.40333 -0.08134 +0.41000 -0.08062 +0.41667 -0.07987 +0.42333 -0.07908 +0.43000 -0.07824 +0.43667 -0.07736 +0.44333 -0.07644 +0.45000 -0.07548 +0.45667 -0.07448 +0.46333 -0.07343 +0.47000 -0.07235 +0.47667 -0.07122 +0.48333 -0.07006 +0.49000 -0.06886 +0.49667 -0.06763 +0.50333 -0.06636 +0.51000 -0.06506 +0.51667 -0.06373 +0.52333 -0.06237 +0.53000 -0.06097 +0.53667 -0.05955 +0.54333 -0.05810 +0.55000 -0.05663 +0.55667 -0.05513 +0.56333 -0.05361 +0.57000 -0.05207 +0.57667 -0.05050 +0.58333 -0.04892 +0.59000 -0.04732 +0.59667 -0.04571 +0.60333 -0.04408 +0.61000 -0.04243 +0.61667 -0.04078 +0.62333 -0.03911 +0.63000 -0.03744 +0.63667 -0.03576 +0.64333 -0.03409 +0.65000 -0.03241 +0.65667 -0.03073 +0.66333 -0.02906 +0.67000 -0.02740 +0.67667 -0.02574 +0.68333 -0.02411 +0.69000 -0.02248 +0.69667 -0.02088 +0.70333 -0.01930 +0.71000 -0.01774 +0.71667 -0.01620 +0.72333 -0.01470 +0.73000 -0.01323 +0.73667 -0.01179 +0.74333 -0.01039 +0.75000 -0.00903 +0.75660 -0.00772 +0.76314 -0.00647 +0.76961 -0.00528 +0.77601 -0.00416 +0.78235 -0.00308 +0.78863 -0.00207 +0.79484 -0.00112 +0.80098 -0.00023 +0.80706 0.00060 +0.81307 0.00136 +0.81902 0.00207 +0.82490 0.00273 +0.83072 0.00333 +0.83647 0.00387 +0.84216 0.00435 +0.84778 0.00479 +0.85333 0.00517 +0.85882 0.00550 +0.86425 0.00578 +0.86961 0.00601 +0.87490 0.00620 +0.88013 0.00633 +0.88529 0.00643 +0.89039 0.00648 +0.89542 0.00649 +0.90039 0.00646 +0.90529 0.00639 +0.91013 0.00628 +0.91490 0.00613 +0.91961 0.00595 +0.92425 0.00574 +0.92882 0.00550 +0.93333 0.00523 +0.93778 0.00494 +0.94216 0.00462 +0.94647 0.00428 +0.95072 0.00392 +0.95490 0.00355 +0.95902 0.00315 +0.96307 0.00275 +0.96706 0.00233 +0.97098 0.00189 +0.97484 0.00145 +0.97863 0.00099 +0.98235 0.00053 +0.98601 0.00005 +0.98961 -0.00044 +0.99314 -0.00094 +0.99660 -0.00143 +1.00000 -0.00194 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17.dat new file mode 100644 index 0000000000..4949fcf7e5 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17.dat @@ -0,0 +1,194 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU25_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4336 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6873 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.12 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 140 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0202 0.0000 + -175.00 0.368 0.0324 0.1845 + -170.00 0.735 0.0943 0.3701 + -160.00 0.695 0.2848 0.2679 + -155.00 0.777 0.4001 0.3046 + -150.00 0.828 0.5215 0.3329 + -145.00 0.850 0.6447 0.3540 + -140.00 0.846 0.7660 0.3693 + -135.00 0.818 0.8823 0.3794 + -130.00 0.771 0.9911 0.3854 + -125.00 0.705 1.0905 0.3878 + -120.00 0.624 1.1787 0.3872 + -115.00 0.530 1.2545 0.3841 + -110.00 0.426 1.3168 0.3788 + -105.00 0.314 1.3650 0.3716 + -100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17_coords.txt new file mode 100644 index 0000000000..8655cdc1d7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 91-W2-250.lm +! x/c y/c +1.00000 0.00213 +0.99660 0.00314 +0.99314 0.00414 +0.98961 0.00515 +0.98601 0.00617 +0.98235 0.00720 +0.97863 0.00822 +0.97484 0.00926 +0.97098 0.01030 +0.96706 0.01135 +0.96307 0.01240 +0.95902 0.01347 +0.95490 0.01454 +0.95072 0.01562 +0.94647 0.01672 +0.94216 0.01783 +0.93778 0.01895 +0.93333 0.02009 +0.92882 0.02125 +0.92425 0.02241 +0.91961 0.02359 +0.91490 0.02479 +0.91013 0.02600 +0.90529 0.02722 +0.90039 0.02846 +0.89542 0.02972 +0.89039 0.03099 +0.88529 0.03227 +0.88013 0.03357 +0.87490 0.03489 +0.86961 0.03622 +0.86425 0.03756 +0.85882 0.03892 +0.85333 0.04029 +0.84778 0.04167 +0.84216 0.04306 +0.83647 0.04447 +0.83072 0.04589 +0.82490 0.04732 +0.81902 0.04877 +0.81307 0.05023 +0.80706 0.05170 +0.80098 0.05319 +0.79484 0.05468 +0.78863 0.05619 +0.78235 0.05771 +0.77601 0.05925 +0.76961 0.06078 +0.76314 0.06233 +0.75660 0.06388 +0.75000 0.06544 +0.74333 0.06701 +0.73667 0.06857 +0.73000 0.07013 +0.72333 0.07168 +0.71667 0.07322 +0.71000 0.07475 +0.70333 0.07628 +0.69667 0.07779 +0.69000 0.07930 +0.68333 0.08080 +0.67667 0.08228 +0.67000 0.08375 +0.66333 0.08522 +0.65667 0.08667 +0.65000 0.08810 +0.64333 0.08953 +0.63667 0.09093 +0.63000 0.09233 +0.62333 0.09371 +0.61667 0.09507 +0.61000 0.09642 +0.60333 0.09775 +0.59667 0.09906 +0.59000 0.10035 +0.58333 0.10163 +0.57667 0.10289 +0.57000 0.10413 +0.56333 0.10535 +0.55667 0.10655 +0.55000 0.10773 +0.54333 0.10888 +0.53667 0.11001 +0.53000 0.11112 +0.52333 0.11221 +0.51667 0.11327 +0.51000 0.11430 +0.50333 0.11530 +0.49667 0.11628 +0.49000 0.11723 +0.48333 0.11815 +0.47667 0.11904 +0.47000 0.11991 +0.46333 0.12074 +0.45667 0.12154 +0.45000 0.12230 +0.44333 0.12303 +0.43667 0.12372 +0.43000 0.12436 +0.42333 0.12497 +0.41667 0.12554 +0.41000 0.12606 +0.40333 0.12655 +0.39667 0.12699 +0.39000 0.12738 +0.38333 0.12773 +0.37667 0.12803 +0.37000 0.12828 +0.36333 0.12846 +0.35667 0.12858 +0.35000 0.12864 +0.34333 0.12862 +0.33667 0.12853 +0.33000 0.12837 +0.32333 0.12815 +0.31667 0.12785 +0.31000 0.12749 +0.30333 0.12705 +0.29667 0.12656 +0.29000 0.12600 +0.28333 0.12538 +0.27667 0.12469 +0.27000 0.12394 +0.26333 0.12312 +0.25667 0.12224 +0.25000 0.12130 +0.24342 0.12030 +0.23693 0.11926 +0.23053 0.11817 +0.22421 0.11704 +0.21798 0.11586 +0.21184 0.11465 +0.20579 0.11340 +0.19982 0.11210 +0.19395 0.11078 +0.18816 0.10942 +0.18245 0.10803 +0.17684 0.10660 +0.17131 0.10515 +0.16587 0.10367 +0.16052 0.10217 +0.15526 0.10064 +0.15008 0.09909 +0.14499 0.09751 +0.13999 0.09591 +0.13508 0.09430 +0.13026 0.09266 +0.12552 0.09101 +0.12087 0.08934 +0.11631 0.08765 +0.11183 0.08595 +0.10745 0.08424 +0.10315 0.08251 +0.09893 0.08076 +0.09481 0.07902 +0.09077 0.07725 +0.08683 0.07549 +0.08297 0.07371 +0.07919 0.07192 +0.07551 0.07013 +0.07191 0.06834 +0.06840 0.06654 +0.06498 0.06474 +0.06164 0.06293 +0.05840 0.06113 +0.05524 0.05933 +0.05217 0.05753 +0.04918 0.05573 +0.04629 0.05393 +0.04348 0.05214 +0.04076 0.05035 +0.03812 0.04856 +0.03558 0.04679 +0.03312 0.04502 +0.03075 0.04326 +0.02847 0.04151 +0.02627 0.03976 +0.02417 0.03804 +0.02215 0.03632 +0.02022 0.03462 +0.01837 0.03293 +0.01662 0.03126 +0.01495 0.02961 +0.01337 0.02797 +0.01187 0.02635 +0.01047 0.02475 +0.00915 0.02317 +0.00792 0.02161 +0.00678 0.02007 +0.00572 0.01855 +0.00476 0.01706 +0.00388 0.01557 +0.00309 0.01409 +0.00238 0.01261 +0.00177 0.01110 +0.00124 0.00945 +0.00080 0.00766 +0.00044 0.00568 +0.00018 0.00363 +0.00000 0.00000 +0.00018 -0.00360 +0.00044 -0.00572 +0.00080 -0.00778 +0.00124 -0.00974 +0.00177 -0.01169 +0.00238 -0.01359 +0.00309 -0.01549 +0.00388 -0.01736 +0.00476 -0.01921 +0.00572 -0.02104 +0.00678 -0.02288 +0.00792 -0.02470 +0.00915 -0.02652 +0.01047 -0.02835 +0.01187 -0.03019 +0.01337 -0.03205 +0.01495 -0.03392 +0.01662 -0.03581 +0.01837 -0.03770 +0.02022 -0.03961 +0.02215 -0.04153 +0.02417 -0.04345 +0.02627 -0.04537 +0.02847 -0.04730 +0.03075 -0.04921 +0.03312 -0.05112 +0.03558 -0.05302 +0.03812 -0.05491 +0.04076 -0.05679 +0.04348 -0.05865 +0.04629 -0.06051 +0.04918 -0.06234 +0.05217 -0.06418 +0.05524 -0.06600 +0.05840 -0.06780 +0.06164 -0.06960 +0.06498 -0.07139 +0.06840 -0.07316 +0.07191 -0.07492 +0.07551 -0.07668 +0.07919 -0.07842 +0.08297 -0.08015 +0.08683 -0.08186 +0.09077 -0.08356 +0.09481 -0.08525 +0.09893 -0.08692 +0.10315 -0.08858 +0.10745 -0.09022 +0.11183 -0.09182 +0.11631 -0.09342 +0.12087 -0.09498 +0.12552 -0.09652 +0.13026 -0.09803 +0.13508 -0.09951 +0.13999 -0.10095 +0.14499 -0.10237 +0.15008 -0.10376 +0.15526 -0.10511 +0.16052 -0.10642 +0.16587 -0.10769 +0.17131 -0.10892 +0.17684 -0.11011 +0.18245 -0.11126 +0.18816 -0.11236 +0.19395 -0.11341 +0.19982 -0.11441 +0.20579 -0.11536 +0.21184 -0.11626 +0.21798 -0.11710 +0.22421 -0.11789 +0.23053 -0.11862 +0.23693 -0.11929 +0.24342 -0.11990 +0.25000 -0.12045 +0.25667 -0.12094 +0.26333 -0.12135 +0.27000 -0.12168 +0.27667 -0.12195 +0.28333 -0.12214 +0.29000 -0.12227 +0.29667 -0.12232 +0.30333 -0.12231 +0.31000 -0.12222 +0.31667 -0.12207 +0.32333 -0.12186 +0.33000 -0.12157 +0.33667 -0.12123 +0.34333 -0.12082 +0.35000 -0.12034 +0.35667 -0.11981 +0.36333 -0.11922 +0.37000 -0.11857 +0.37667 -0.11785 +0.38333 -0.11708 +0.39000 -0.11625 +0.39667 -0.11537 +0.40333 -0.11442 +0.41000 -0.11342 +0.41667 -0.11236 +0.42333 -0.11124 +0.43000 -0.11006 +0.43667 -0.10881 +0.44333 -0.10752 +0.45000 -0.10615 +0.45667 -0.10474 +0.46333 -0.10326 +0.47000 -0.10173 +0.47667 -0.10015 +0.48333 -0.09851 +0.49000 -0.09682 +0.49667 -0.09508 +0.50333 -0.09329 +0.51000 -0.09145 +0.51667 -0.08956 +0.52333 -0.08764 +0.53000 -0.08567 +0.53667 -0.08366 +0.54333 -0.08162 +0.55000 -0.07953 +0.55667 -0.07742 +0.56333 -0.07527 +0.57000 -0.07309 +0.57667 -0.07088 +0.58333 -0.06865 +0.59000 -0.06639 +0.59667 -0.06410 +0.60333 -0.06180 +0.61000 -0.05948 +0.61667 -0.05713 +0.62333 -0.05478 +0.63000 -0.05242 +0.63667 -0.05005 +0.64333 -0.04767 +0.65000 -0.04530 +0.65667 -0.04293 +0.66333 -0.04057 +0.67000 -0.03822 +0.67667 -0.03588 +0.68333 -0.03357 +0.69000 -0.03127 +0.69667 -0.02900 +0.70333 -0.02676 +0.71000 -0.02456 +0.71667 -0.02238 +0.72333 -0.02026 +0.73000 -0.01817 +0.73667 -0.01614 +0.74333 -0.01416 +0.75000 -0.01223 +0.75660 -0.01038 +0.76314 -0.00861 +0.76961 -0.00692 +0.77601 -0.00532 +0.78235 -0.00381 +0.78863 -0.00238 +0.79484 -0.00103 +0.80098 0.00023 +0.80706 0.00141 +0.81307 0.00250 +0.81902 0.00351 +0.82490 0.00444 +0.83072 0.00529 +0.83647 0.00606 +0.84216 0.00675 +0.84778 0.00737 +0.85333 0.00791 +0.85882 0.00839 +0.86425 0.00879 +0.86961 0.00913 +0.87490 0.00940 +0.88013 0.00961 +0.88529 0.00975 +0.89039 0.00983 +0.89542 0.00985 +0.90039 0.00982 +0.90529 0.00972 +0.91013 0.00957 +0.91490 0.00936 +0.91961 0.00910 +0.92425 0.00880 +0.92882 0.00844 +0.93333 0.00804 +0.93778 0.00760 +0.94216 0.00712 +0.94647 0.00660 +0.95072 0.00606 +0.95490 0.00549 +0.95902 0.00490 +0.96307 0.00429 +0.96706 0.00367 +0.97098 0.00303 +0.97484 0.00238 +0.97863 0.00173 +0.98235 0.00108 +0.98601 0.00043 +0.98961 -0.00022 +0.99314 -0.00086 +0.99660 -0.00149 +1.00000 -0.00213 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17.dat new file mode 100644 index 0000000000..2173054243 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17.dat @@ -0,0 +1,198 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU30_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -2.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.449 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6138 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.008 Cd0 ! 2D drag coefficient value at 0-lift. + -0.09 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 143 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0267 0.0000 + -175.00 0.274 0.0370 0.1379 + -170.00 0.547 0.0968 0.2778 + -160.00 0.685 0.2876 0.2740 + -155.00 0.766 0.4025 0.3118 + -150.00 0.816 0.5232 0.3411 + -145.00 0.836 0.6454 0.3631 + -140.00 0.832 0.7656 0.3791 + -135.00 0.804 0.8807 0.3899 + -130.00 0.756 0.9882 0.3965 + -125.00 0.690 1.0861 0.3994 + -120.00 0.609 1.1730 0.3992 + -115.00 0.515 1.2474 0.3964 + -110.00 0.411 1.3084 0.3915 + -105.00 0.300 1.3552 0.3846 + -100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17_coords.txt new file mode 100644 index 0000000000..0f010f6506 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 97-W-300.lm +! x/c y/c +1.00000 0.00246 +0.99660 0.00340 +0.99314 0.00437 +0.98961 0.00536 +0.98601 0.00638 +0.98235 0.00740 +0.97863 0.00843 +0.97484 0.00947 +0.97098 0.01051 +0.96706 0.01157 +0.96307 0.01264 +0.95902 0.01371 +0.95490 0.01479 +0.95072 0.01588 +0.94647 0.01698 +0.94216 0.01810 +0.93778 0.01922 +0.93333 0.02036 +0.92882 0.02151 +0.92425 0.02268 +0.91961 0.02386 +0.91490 0.02505 +0.91013 0.02626 +0.90529 0.02749 +0.90039 0.02873 +0.89542 0.02999 +0.89039 0.03126 +0.88529 0.03255 +0.88013 0.03385 +0.87490 0.03516 +0.86961 0.03649 +0.86425 0.03784 +0.85882 0.03921 +0.85333 0.04058 +0.84778 0.04197 +0.84216 0.04337 +0.83647 0.04479 +0.83072 0.04622 +0.82490 0.04767 +0.81902 0.04913 +0.81307 0.05060 +0.80706 0.05208 +0.80098 0.05357 +0.79484 0.05508 +0.78863 0.05659 +0.78235 0.05812 +0.77601 0.05965 +0.76961 0.06120 +0.76314 0.06275 +0.75660 0.06432 +0.75000 0.06589 +0.74333 0.06747 +0.73667 0.06904 +0.73000 0.07061 +0.72333 0.07217 +0.71667 0.07371 +0.71000 0.07525 +0.70333 0.07678 +0.69667 0.07830 +0.69000 0.07981 +0.68333 0.08131 +0.67667 0.08280 +0.67000 0.08428 +0.66333 0.08575 +0.65667 0.08720 +0.65000 0.08864 +0.64333 0.09008 +0.63667 0.09149 +0.63000 0.09290 +0.62333 0.09429 +0.61667 0.09566 +0.61000 0.09703 +0.60333 0.09837 +0.59667 0.09970 +0.59000 0.10102 +0.58333 0.10232 +0.57667 0.10360 +0.57000 0.10486 +0.56333 0.10611 +0.55667 0.10734 +0.55000 0.10855 +0.54333 0.10975 +0.53667 0.11092 +0.53000 0.11207 +0.52333 0.11321 +0.51667 0.11432 +0.51000 0.11541 +0.50333 0.11648 +0.49667 0.11752 +0.49000 0.11854 +0.48333 0.11954 +0.47667 0.12051 +0.47000 0.12146 +0.46333 0.12239 +0.45667 0.12328 +0.45000 0.12415 +0.44333 0.12500 +0.43667 0.12581 +0.43000 0.12659 +0.42333 0.12734 +0.41667 0.12806 +0.41000 0.12875 +0.40333 0.12940 +0.39667 0.13001 +0.39000 0.13059 +0.38333 0.13113 +0.37667 0.13164 +0.37000 0.13210 +0.36333 0.13252 +0.35667 0.13290 +0.35000 0.13323 +0.34333 0.13352 +0.33667 0.13377 +0.33000 0.13396 +0.32333 0.13411 +0.31667 0.13420 +0.31000 0.13424 +0.30333 0.13422 +0.29667 0.13415 +0.29000 0.13401 +0.28333 0.13381 +0.27667 0.13355 +0.27000 0.13321 +0.26333 0.13280 +0.25667 0.13231 +0.25000 0.13174 +0.24342 0.13109 +0.23693 0.13036 +0.23053 0.12955 +0.22421 0.12866 +0.21798 0.12771 +0.21184 0.12668 +0.20579 0.12559 +0.19982 0.12444 +0.19395 0.12324 +0.18816 0.12197 +0.18245 0.12066 +0.17684 0.11930 +0.17131 0.11789 +0.16587 0.11644 +0.16052 0.11495 +0.15526 0.11342 +0.15008 0.11185 +0.14499 0.11024 +0.13999 0.10860 +0.13508 0.10693 +0.13026 0.10522 +0.12552 0.10348 +0.12087 0.10172 +0.11631 0.09993 +0.11183 0.09811 +0.10745 0.09627 +0.10315 0.09441 +0.09893 0.09252 +0.09481 0.09061 +0.09077 0.08869 +0.08683 0.08675 +0.08297 0.08478 +0.07919 0.08280 +0.07551 0.08082 +0.07191 0.07881 +0.06840 0.07680 +0.06498 0.07477 +0.06164 0.07274 +0.05840 0.07070 +0.05524 0.06865 +0.05217 0.06660 +0.04918 0.06454 +0.04629 0.06248 +0.04348 0.06042 +0.04076 0.05835 +0.03812 0.05629 +0.03558 0.05423 +0.03312 0.05217 +0.03075 0.05012 +0.02847 0.04808 +0.02627 0.04604 +0.02417 0.04402 +0.02215 0.04200 +0.02022 0.03999 +0.01837 0.03799 +0.01662 0.03602 +0.01495 0.03405 +0.01337 0.03211 +0.01187 0.03017 +0.01047 0.02827 +0.00915 0.02637 +0.00792 0.02450 +0.00678 0.02266 +0.00572 0.02083 +0.00476 0.01904 +0.00388 0.01725 +0.00309 0.01548 +0.00238 0.01370 +0.00177 0.01194 +0.00124 0.01010 +0.00080 0.00820 +0.00044 0.00612 +0.00018 0.00390 +0.00000 0.00000 +0.00018 -0.00382 +0.00044 -0.00601 +0.00080 -0.00815 +0.00124 -0.01017 +0.00177 -0.01216 +0.00238 -0.01412 +0.00309 -0.01611 +0.00388 -0.01811 +0.00476 -0.02014 +0.00572 -0.02217 +0.00678 -0.02423 +0.00792 -0.02630 +0.00915 -0.02840 +0.01047 -0.03053 +0.01187 -0.03267 +0.01337 -0.03485 +0.01495 -0.03705 +0.01662 -0.03929 +0.01837 -0.04154 +0.02022 -0.04385 +0.02215 -0.04617 +0.02417 -0.04852 +0.02627 -0.05088 +0.02847 -0.05328 +0.03075 -0.05569 +0.03312 -0.05813 +0.03558 -0.06060 +0.03812 -0.06308 +0.04076 -0.06559 +0.04348 -0.06811 +0.04629 -0.07064 +0.04918 -0.07318 +0.05217 -0.07574 +0.05524 -0.07831 +0.05840 -0.08088 +0.06164 -0.08345 +0.06498 -0.08604 +0.06840 -0.08862 +0.07191 -0.09121 +0.07551 -0.09379 +0.07919 -0.09637 +0.08297 -0.09895 +0.08683 -0.10152 +0.09077 -0.10408 +0.09481 -0.10665 +0.09893 -0.10919 +0.10315 -0.11173 +0.10745 -0.11425 +0.11183 -0.11675 +0.11631 -0.11923 +0.12087 -0.12169 +0.12552 -0.12412 +0.13026 -0.12652 +0.13508 -0.12888 +0.13999 -0.13121 +0.14499 -0.13350 +0.15008 -0.13576 +0.15526 -0.13797 +0.16052 -0.14014 +0.16587 -0.14225 +0.17131 -0.14432 +0.17684 -0.14633 +0.18245 -0.14828 +0.18816 -0.15017 +0.19395 -0.15198 +0.19982 -0.15371 +0.20579 -0.15537 +0.21184 -0.15693 +0.21798 -0.15840 +0.22421 -0.15976 +0.23053 -0.16101 +0.23693 -0.16214 +0.24342 -0.16314 +0.25000 -0.16399 +0.25667 -0.16470 +0.26333 -0.16526 +0.27000 -0.16567 +0.27667 -0.16592 +0.28333 -0.16602 +0.29000 -0.16598 +0.29667 -0.16580 +0.30333 -0.16548 +0.31000 -0.16503 +0.31667 -0.16445 +0.32333 -0.16374 +0.33000 -0.16291 +0.33667 -0.16198 +0.34333 -0.16094 +0.35000 -0.15980 +0.35667 -0.15855 +0.36333 -0.15722 +0.37000 -0.15580 +0.37667 -0.15429 +0.38333 -0.15270 +0.39000 -0.15104 +0.39667 -0.14931 +0.40333 -0.14752 +0.41000 -0.14566 +0.41667 -0.14374 +0.42333 -0.14178 +0.43000 -0.13977 +0.43667 -0.13772 +0.44333 -0.13562 +0.45000 -0.13348 +0.45667 -0.13130 +0.46333 -0.12908 +0.47000 -0.12683 +0.47667 -0.12456 +0.48333 -0.12225 +0.49000 -0.11992 +0.49667 -0.11757 +0.50333 -0.11520 +0.51000 -0.11281 +0.51667 -0.11040 +0.52333 -0.10799 +0.53000 -0.10555 +0.53667 -0.10310 +0.54333 -0.10065 +0.55000 -0.09818 +0.55667 -0.09570 +0.56333 -0.09321 +0.57000 -0.09071 +0.57667 -0.08821 +0.58333 -0.08571 +0.59000 -0.08320 +0.59667 -0.08070 +0.60333 -0.07819 +0.61000 -0.07569 +0.61667 -0.07319 +0.62333 -0.07070 +0.63000 -0.06820 +0.63667 -0.06572 +0.64333 -0.06325 +0.65000 -0.06079 +0.65667 -0.05834 +0.66333 -0.05590 +0.67000 -0.05347 +0.67667 -0.05106 +0.68333 -0.04867 +0.69000 -0.04629 +0.69667 -0.04394 +0.70333 -0.04161 +0.71000 -0.03931 +0.71667 -0.03703 +0.72333 -0.03478 +0.73000 -0.03256 +0.73667 -0.03037 +0.74333 -0.02822 +0.75000 -0.02610 +0.75660 -0.02405 +0.76314 -0.02205 +0.76961 -0.02013 +0.77601 -0.01827 +0.78235 -0.01647 +0.78863 -0.01474 +0.79484 -0.01309 +0.80098 -0.01150 +0.80706 -0.00998 +0.81307 -0.00854 +0.81902 -0.00717 +0.82490 -0.00586 +0.83072 -0.00462 +0.83647 -0.00346 +0.84216 -0.00236 +0.84778 -0.00133 +0.85333 -0.00037 +0.85882 0.00052 +0.86425 0.00134 +0.86961 0.00210 +0.87490 0.00278 +0.88013 0.00340 +0.88529 0.00395 +0.89039 0.00444 +0.89542 0.00487 +0.90039 0.00524 +0.90529 0.00555 +0.91013 0.00580 +0.91490 0.00600 +0.91961 0.00614 +0.92425 0.00622 +0.92882 0.00625 +0.93333 0.00623 +0.93778 0.00615 +0.94216 0.00602 +0.94647 0.00583 +0.95072 0.00558 +0.95490 0.00528 +0.95902 0.00493 +0.96307 0.00452 +0.96706 0.00405 +0.97098 0.00352 +0.97484 0.00294 +0.97863 0.00231 +0.98235 0.00163 +0.98601 0.00090 +0.98961 0.00012 +0.99314 -0.00071 +0.99660 -0.00158 +1.00000 -0.00246 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17.dat new file mode 100644 index 0000000000..750b46ecbf --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17.dat @@ -0,0 +1,189 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU35_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -1.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 11.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -11.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.6717 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3075 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.012 Cd0 ! 2D drag coefficient value at 0-lift. + -0.07 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 135 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0407 0.0000 + -175.00 0.223 0.0507 0.0937 + -170.00 0.405 0.1055 0.1702 + -160.00 0.658 0.2982 0.2819 + -155.00 0.733 0.4121 0.3213 + -150.00 0.778 0.5308 0.3520 + -145.00 0.795 0.6503 0.3754 + -140.00 0.787 0.7672 0.3926 + -135.00 0.757 0.8785 0.4046 + -130.00 0.708 0.9819 0.4121 + -125.00 0.641 1.0756 0.4160 + -120.00 0.560 1.1580 0.4167 + -115.00 0.467 1.2280 0.4146 + -110.00 0.365 1.2847 0.4104 + -105.00 0.255 1.3274 0.4041 + -100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17_coords.txt new file mode 100644 index 0000000000..b1b81649b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU 35 +! x/c y/c +1.00000 0.00283 +0.99660 0.00378 +0.99314 0.00477 +0.98961 0.00578 +0.98601 0.00683 +0.98235 0.00789 +0.97863 0.00897 +0.97484 0.01006 +0.97098 0.01116 +0.96706 0.01228 +0.96307 0.01342 +0.95902 0.01456 +0.95490 0.01571 +0.95072 0.01688 +0.94647 0.01806 +0.94216 0.01926 +0.93778 0.02046 +0.93333 0.02169 +0.92882 0.02292 +0.92425 0.02419 +0.91961 0.02547 +0.91490 0.02675 +0.91013 0.02807 +0.90529 0.02941 +0.90039 0.03077 +0.89542 0.03214 +0.89039 0.03353 +0.88529 0.03495 +0.88013 0.03638 +0.87490 0.03782 +0.86961 0.03929 +0.86425 0.04079 +0.85882 0.04230 +0.85333 0.04383 +0.84778 0.04538 +0.84216 0.04694 +0.83647 0.04853 +0.83072 0.05013 +0.82490 0.05176 +0.81902 0.05340 +0.81307 0.05506 +0.80706 0.05673 +0.80098 0.05842 +0.79484 0.06013 +0.78863 0.06184 +0.78235 0.06358 +0.77601 0.06531 +0.76961 0.06708 +0.76314 0.06885 +0.75660 0.07064 +0.75000 0.07244 +0.74333 0.07426 +0.73667 0.07606 +0.73000 0.07786 +0.72333 0.07966 +0.71667 0.08144 +0.71000 0.08322 +0.70333 0.08498 +0.69667 0.08674 +0.69000 0.08849 +0.68333 0.09022 +0.67667 0.09196 +0.67000 0.09368 +0.66333 0.09539 +0.65667 0.09708 +0.65000 0.09876 +0.64333 0.10044 +0.63667 0.10210 +0.63000 0.10375 +0.62333 0.10538 +0.61667 0.10699 +0.61000 0.10859 +0.60333 0.11017 +0.59667 0.11174 +0.59000 0.11330 +0.58333 0.11483 +0.57667 0.11634 +0.57000 0.11784 +0.56333 0.11931 +0.55667 0.12077 +0.55000 0.12220 +0.54333 0.12363 +0.53667 0.12502 +0.53000 0.12639 +0.52333 0.12775 +0.51667 0.12907 +0.51000 0.13037 +0.50333 0.13165 +0.49667 0.13289 +0.49000 0.13411 +0.48333 0.13531 +0.47667 0.13648 +0.47000 0.13761 +0.46333 0.13873 +0.45667 0.13980 +0.45000 0.14086 +0.44333 0.14189 +0.43667 0.14288 +0.43000 0.14384 +0.42333 0.14477 +0.41667 0.14566 +0.41000 0.14653 +0.40333 0.14736 +0.39667 0.14814 +0.39000 0.14889 +0.38333 0.14960 +0.37667 0.15028 +0.37000 0.15091 +0.36333 0.15151 +0.35667 0.15207 +0.35000 0.15258 +0.34333 0.15306 +0.33667 0.15351 +0.33000 0.15391 +0.32333 0.15426 +0.31667 0.15457 +0.31000 0.15482 +0.30333 0.15502 +0.29667 0.15516 +0.29000 0.15524 +0.28333 0.15525 +0.27667 0.15520 +0.27000 0.15507 +0.26333 0.15486 +0.25667 0.15457 +0.25000 0.15419 +0.24342 0.15372 +0.23693 0.15316 +0.23053 0.15250 +0.22421 0.15175 +0.21798 0.15094 +0.21184 0.15002 +0.20579 0.14904 +0.19982 0.14798 +0.19395 0.14686 +0.18816 0.14566 +0.18245 0.14439 +0.17684 0.14308 +0.17131 0.14169 +0.16587 0.14025 +0.16052 0.13875 +0.15526 0.13721 +0.15008 0.13561 +0.14499 0.13396 +0.13999 0.13226 +0.13508 0.13052 +0.13026 0.12873 +0.12552 0.12689 +0.12087 0.12502 +0.11631 0.12311 +0.11183 0.12115 +0.10745 0.11917 +0.10315 0.11715 +0.09893 0.11509 +0.09481 0.11299 +0.09077 0.11087 +0.08683 0.10871 +0.08297 0.10652 +0.07919 0.10430 +0.07551 0.10207 +0.07191 0.09979 +0.06840 0.09750 +0.06498 0.09517 +0.06164 0.09284 +0.05840 0.09048 +0.05524 0.08809 +0.05217 0.08569 +0.04918 0.08327 +0.04629 0.08084 +0.04348 0.07839 +0.04076 0.07592 +0.03812 0.07345 +0.03558 0.07096 +0.03312 0.06847 +0.03075 0.06597 +0.02847 0.06348 +0.02627 0.06097 +0.02417 0.05847 +0.02215 0.05596 +0.02022 0.05344 +0.01837 0.05091 +0.01662 0.04841 +0.01495 0.04589 +0.01337 0.04339 +0.01187 0.04088 +0.01047 0.03840 +0.00915 0.03591 +0.00792 0.03343 +0.00678 0.03096 +0.00572 0.02845 +0.00476 0.02592 +0.00388 0.02329 +0.00309 0.02056 +0.00238 0.01774 +0.00177 0.01503 +0.00124 0.01240 +0.00080 0.00990 +0.00044 0.00733 +0.00018 0.00465 +0.00000 0.00000 +0.00018 -0.00461 +0.00044 -0.00726 +0.00080 -0.00990 +0.00124 -0.01246 +0.00177 -0.01509 +0.00238 -0.01776 +0.00309 -0.02049 +0.00388 -0.02317 +0.00476 -0.02585 +0.00572 -0.02848 +0.00678 -0.03112 +0.00792 -0.03376 +0.00915 -0.03642 +0.01047 -0.03911 +0.01187 -0.04178 +0.01337 -0.04450 +0.01495 -0.04721 +0.01662 -0.04995 +0.01837 -0.05269 +0.02022 -0.05547 +0.02215 -0.05825 +0.02417 -0.06105 +0.02627 -0.06386 +0.02847 -0.06670 +0.03075 -0.06955 +0.03312 -0.07244 +0.03558 -0.07536 +0.03812 -0.07828 +0.04076 -0.08125 +0.04348 -0.08422 +0.04629 -0.08720 +0.04918 -0.09020 +0.05217 -0.09321 +0.05524 -0.09622 +0.05840 -0.09925 +0.06164 -0.10225 +0.06498 -0.10528 +0.06840 -0.10829 +0.07191 -0.11131 +0.07551 -0.11431 +0.07919 -0.11730 +0.08297 -0.12028 +0.08683 -0.12325 +0.09077 -0.12619 +0.09481 -0.12914 +0.09893 -0.13205 +0.10315 -0.13494 +0.10745 -0.13780 +0.11183 -0.14065 +0.11631 -0.14345 +0.12087 -0.14624 +0.12552 -0.14898 +0.13026 -0.15169 +0.13508 -0.15435 +0.13999 -0.15697 +0.14499 -0.15954 +0.15008 -0.16207 +0.15526 -0.16454 +0.16052 -0.16696 +0.16587 -0.16932 +0.17131 -0.17163 +0.17684 -0.17387 +0.18245 -0.17603 +0.18816 -0.17814 +0.19395 -0.18015 +0.19982 -0.18207 +0.20579 -0.18391 +0.21184 -0.18564 +0.21798 -0.18727 +0.22421 -0.18877 +0.23053 -0.19015 +0.23693 -0.19140 +0.24342 -0.19250 +0.25000 -0.19343 +0.25667 -0.19420 +0.26333 -0.19481 +0.27000 -0.19525 +0.27667 -0.19552 +0.28333 -0.19562 +0.29000 -0.19556 +0.29667 -0.19535 +0.30333 -0.19498 +0.31000 -0.19448 +0.31667 -0.19383 +0.32333 -0.19303 +0.33000 -0.19211 +0.33667 -0.19107 +0.34333 -0.18991 +0.35000 -0.18864 +0.35667 -0.18725 +0.36333 -0.18577 +0.37000 -0.18418 +0.37667 -0.18251 +0.38333 -0.18074 +0.39000 -0.17889 +0.39667 -0.17695 +0.40333 -0.17496 +0.41000 -0.17288 +0.41667 -0.17074 +0.42333 -0.16855 +0.43000 -0.16631 +0.43667 -0.16402 +0.44333 -0.16167 +0.45000 -0.15929 +0.45667 -0.15684 +0.46333 -0.15436 +0.47000 -0.15185 +0.47667 -0.14930 +0.48333 -0.14671 +0.49000 -0.14410 +0.49667 -0.14147 +0.50333 -0.13881 +0.51000 -0.13613 +0.51667 -0.13342 +0.52333 -0.13071 +0.53000 -0.12797 +0.53667 -0.12522 +0.54333 -0.12247 +0.55000 -0.11970 +0.55667 -0.11692 +0.56333 -0.11413 +0.57000 -0.11133 +0.57667 -0.10853 +0.58333 -0.10573 +0.59000 -0.10293 +0.59667 -0.10014 +0.60333 -0.09734 +0.61000 -0.09456 +0.61667 -0.09178 +0.62333 -0.08901 +0.63000 -0.08624 +0.63667 -0.08348 +0.64333 -0.08074 +0.65000 -0.07801 +0.65667 -0.07529 +0.66333 -0.07257 +0.67000 -0.06987 +0.67667 -0.06719 +0.68333 -0.06452 +0.69000 -0.06186 +0.69667 -0.05922 +0.70333 -0.05661 +0.71000 -0.05401 +0.71667 -0.05144 +0.72333 -0.04889 +0.73000 -0.04637 +0.73667 -0.04386 +0.74333 -0.04140 +0.75000 -0.03896 +0.75660 -0.03658 +0.76314 -0.03425 +0.76961 -0.03199 +0.77601 -0.02979 +0.78235 -0.02765 +0.78863 -0.02557 +0.79484 -0.02357 +0.80098 -0.02162 +0.80706 -0.01974 +0.81307 -0.01794 +0.81902 -0.01621 +0.82490 -0.01454 +0.83072 -0.01294 +0.83647 -0.01142 +0.84216 -0.00996 +0.84778 -0.00858 +0.85333 -0.00727 +0.85882 -0.00604 +0.86425 -0.00487 +0.86961 -0.00377 +0.87490 -0.00276 +0.88013 -0.00182 +0.88529 -0.00095 +0.89039 -0.00014 +0.89542 0.00061 +0.90039 0.00128 +0.90529 0.00189 +0.91013 0.00243 +0.91490 0.00293 +0.91961 0.00335 +0.92425 0.00370 +0.92882 0.00401 +0.93333 0.00425 +0.93778 0.00441 +0.94216 0.00452 +0.94647 0.00455 +0.95072 0.00451 +0.95490 0.00439 +0.95902 0.00420 +0.96307 0.00394 +0.96706 0.00358 +0.97098 0.00315 +0.97484 0.00264 +0.97863 0.00206 +0.98235 0.00141 +0.98601 0.00069 +0.98961 -0.00011 +0.99314 -0.00097 +0.99660 -0.00190 +1.00000 -0.00283 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17.dat new file mode 100644 index 0000000000..3882d07ad9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17.dat @@ -0,0 +1,190 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU40_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.3519 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3226 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.03 Cd0 ! 2D drag coefficient value at 0-lift. + -0.05 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 136 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0602 0.0000 + -175.00 0.218 0.0699 0.0934 + -170.00 0.397 0.1107 0.1697 + -160.00 0.642 0.3045 0.2813 + -155.00 0.715 0.4179 0.3208 + -150.00 0.757 0.5355 0.3516 + -145.00 0.772 0.6535 0.3752 + -140.00 0.762 0.7685 0.3926 + -135.00 0.731 0.8777 0.4048 + -130.00 0.680 0.9788 0.4126 + -125.00 0.613 1.0700 0.4166 + -120.00 0.532 1.1499 0.4176 + -115.00 0.439 1.2174 0.4158 + -110.00 0.337 1.2716 0.4117 + -105.00 0.228 1.3118 0.4057 + -100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17_coords.txt new file mode 100644 index 0000000000..24e0ec78c9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.33087 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU4050 +! x/c y/c +1.00000 0.00347 +0.99660 0.00455 +0.99314 0.00565 +0.98961 0.00678 +0.98601 0.00795 +0.98235 0.00914 +0.97863 0.01035 +0.97484 0.01158 +0.97098 0.01283 +0.96706 0.01410 +0.96307 0.01539 +0.95902 0.01670 +0.95490 0.01803 +0.95072 0.01937 +0.94647 0.02074 +0.94216 0.02212 +0.93778 0.02352 +0.93333 0.02495 +0.92882 0.02639 +0.92425 0.02786 +0.91961 0.02936 +0.91490 0.03087 +0.91013 0.03242 +0.90529 0.03400 +0.90039 0.03560 +0.89542 0.03723 +0.89039 0.03887 +0.88529 0.04056 +0.88013 0.04226 +0.87490 0.04399 +0.86961 0.04575 +0.86425 0.04754 +0.85882 0.04935 +0.85333 0.05119 +0.84778 0.05305 +0.84216 0.05493 +0.83647 0.05685 +0.83072 0.05878 +0.82490 0.06076 +0.81902 0.06275 +0.81307 0.06476 +0.80706 0.06680 +0.80098 0.06886 +0.79484 0.07094 +0.78863 0.07304 +0.78235 0.07517 +0.77601 0.07730 +0.76961 0.07947 +0.76314 0.08165 +0.75660 0.08386 +0.75000 0.08608 +0.74333 0.08832 +0.73667 0.09056 +0.73000 0.09279 +0.72333 0.09502 +0.71667 0.09724 +0.71000 0.09946 +0.70333 0.10166 +0.69667 0.10386 +0.69000 0.10605 +0.68333 0.10822 +0.67667 0.11040 +0.67000 0.11256 +0.66333 0.11471 +0.65667 0.11685 +0.65000 0.11897 +0.64333 0.12109 +0.63667 0.12318 +0.63000 0.12527 +0.62333 0.12733 +0.61667 0.12938 +0.61000 0.13142 +0.60333 0.13343 +0.59667 0.13543 +0.59000 0.13742 +0.58333 0.13938 +0.57667 0.14131 +0.57000 0.14323 +0.56333 0.14512 +0.55667 0.14698 +0.55000 0.14882 +0.54333 0.15064 +0.53667 0.15242 +0.53000 0.15417 +0.52333 0.15591 +0.51667 0.15759 +0.51000 0.15925 +0.50333 0.16088 +0.49667 0.16246 +0.49000 0.16401 +0.48333 0.16553 +0.47667 0.16701 +0.47000 0.16844 +0.46333 0.16985 +0.45667 0.17120 +0.45000 0.17253 +0.44333 0.17381 +0.43667 0.17504 +0.43000 0.17624 +0.42333 0.17739 +0.41667 0.17849 +0.41000 0.17957 +0.40333 0.18058 +0.39667 0.18154 +0.39000 0.18246 +0.38333 0.18333 +0.37667 0.18415 +0.37000 0.18491 +0.36333 0.18563 +0.35667 0.18629 +0.35000 0.18690 +0.34333 0.18746 +0.33667 0.18797 +0.33000 0.18842 +0.32333 0.18881 +0.31667 0.18914 +0.31000 0.18940 +0.30333 0.18961 +0.29667 0.18973 +0.29000 0.18979 +0.28333 0.18977 +0.27667 0.18968 +0.27000 0.18950 +0.26333 0.18924 +0.25667 0.18890 +0.25000 0.18845 +0.24342 0.18791 +0.23693 0.18729 +0.23053 0.18657 +0.22421 0.18575 +0.21798 0.18487 +0.21184 0.18388 +0.20579 0.18282 +0.19982 0.18167 +0.19395 0.18046 +0.18816 0.17916 +0.18245 0.17778 +0.17684 0.17634 +0.17131 0.17482 +0.16587 0.17323 +0.16052 0.17158 +0.15526 0.16987 +0.15008 0.16809 +0.14499 0.16625 +0.13999 0.16436 +0.13508 0.16240 +0.13026 0.16038 +0.12552 0.15831 +0.12087 0.15619 +0.11631 0.15402 +0.11183 0.15179 +0.10745 0.14953 +0.10315 0.14722 +0.09893 0.14485 +0.09481 0.14243 +0.09077 0.13998 +0.08683 0.13748 +0.08297 0.13493 +0.07919 0.13234 +0.07551 0.12972 +0.07191 0.12705 +0.06840 0.12435 +0.06498 0.12161 +0.06164 0.11884 +0.05840 0.11603 +0.05524 0.11319 +0.05217 0.11031 +0.04918 0.10740 +0.04629 0.10447 +0.04348 0.10150 +0.04076 0.09851 +0.03812 0.09549 +0.03558 0.09246 +0.03312 0.08940 +0.03075 0.08632 +0.02847 0.08324 +0.02627 0.08013 +0.02417 0.07701 +0.02215 0.07387 +0.02022 0.07070 +0.01837 0.06751 +0.01662 0.06433 +0.01495 0.06111 +0.01337 0.05790 +0.01187 0.05468 +0.01047 0.05148 +0.00915 0.04826 +0.00792 0.04505 +0.00678 0.04181 +0.00572 0.03847 +0.00476 0.03502 +0.00388 0.03133 +0.00309 0.02736 +0.00238 0.02318 +0.00177 0.01920 +0.00124 0.01552 +0.00080 0.01217 +0.00044 0.00892 +0.00018 0.00563 +0.00000 0.00000 +0.00018 -0.00567 +0.00044 -0.00905 +0.00080 -0.01247 +0.00124 -0.01591 +0.00177 -0.01956 +0.00238 -0.02333 +0.00309 -0.02716 +0.00388 -0.03085 +0.00476 -0.03442 +0.00572 -0.03783 +0.00678 -0.04120 +0.00792 -0.04453 +0.00915 -0.04785 +0.01047 -0.05117 +0.01187 -0.05447 +0.01337 -0.05781 +0.01495 -0.06113 +0.01662 -0.06446 +0.01837 -0.06775 +0.02022 -0.07107 +0.02215 -0.07437 +0.02417 -0.07766 +0.02627 -0.08092 +0.02847 -0.08421 +0.03075 -0.08748 +0.03312 -0.09076 +0.03558 -0.09406 +0.03812 -0.09733 +0.04076 -0.10064 +0.04348 -0.10392 +0.04629 -0.10720 +0.04918 -0.11047 +0.05217 -0.11374 +0.05524 -0.11698 +0.05840 -0.12023 +0.06164 -0.12344 +0.06498 -0.12665 +0.06840 -0.12982 +0.07191 -0.13299 +0.07551 -0.13612 +0.07919 -0.13922 +0.08297 -0.14230 +0.08683 -0.14535 +0.09077 -0.14835 +0.09481 -0.15135 +0.09893 -0.15429 +0.10315 -0.15720 +0.10745 -0.16006 +0.11183 -0.16289 +0.11631 -0.16567 +0.12087 -0.16842 +0.12552 -0.17111 +0.13026 -0.17376 +0.13508 -0.17635 +0.13999 -0.17890 +0.14499 -0.18137 +0.15008 -0.18380 +0.15526 -0.18616 +0.16052 -0.18847 +0.16587 -0.19070 +0.17131 -0.19287 +0.17684 -0.19496 +0.18245 -0.19698 +0.18816 -0.19894 +0.19395 -0.20080 +0.19982 -0.20257 +0.20579 -0.20425 +0.21184 -0.20584 +0.21798 -0.20733 +0.22421 -0.20870 +0.23053 -0.20996 +0.23693 -0.21110 +0.24342 -0.21210 +0.25000 -0.21297 +0.25667 -0.21370 +0.26333 -0.21429 +0.27000 -0.21472 +0.27667 -0.21501 +0.28333 -0.21515 +0.29000 -0.21516 +0.29667 -0.21502 +0.30333 -0.21476 +0.31000 -0.21437 +0.31667 -0.21384 +0.32333 -0.21320 +0.33000 -0.21243 +0.33667 -0.21155 +0.34333 -0.21057 +0.35000 -0.20948 +0.35667 -0.20827 +0.36333 -0.20697 +0.37000 -0.20556 +0.37667 -0.20407 +0.38333 -0.20248 +0.39000 -0.20081 +0.39667 -0.19904 +0.40333 -0.19720 +0.41000 -0.19527 +0.41667 -0.19327 +0.42333 -0.19119 +0.43000 -0.18905 +0.43667 -0.18683 +0.44333 -0.18454 +0.45000 -0.18219 +0.45667 -0.17976 +0.46333 -0.17727 +0.47000 -0.17473 +0.47667 -0.17212 +0.48333 -0.16945 +0.49000 -0.16673 +0.49667 -0.16397 +0.50333 -0.16115 +0.51000 -0.15828 +0.51667 -0.15537 +0.52333 -0.15242 +0.53000 -0.14942 +0.53667 -0.14639 +0.54333 -0.14333 +0.55000 -0.14024 +0.55667 -0.13713 +0.56333 -0.13399 +0.57000 -0.13083 +0.57667 -0.12765 +0.58333 -0.12446 +0.59000 -0.12125 +0.59667 -0.11804 +0.60333 -0.11482 +0.61000 -0.11160 +0.61667 -0.10838 +0.62333 -0.10515 +0.63000 -0.10192 +0.63667 -0.09870 +0.64333 -0.09549 +0.65000 -0.09228 +0.65667 -0.08909 +0.66333 -0.08590 +0.67000 -0.08274 +0.67667 -0.07958 +0.68333 -0.07645 +0.69000 -0.07333 +0.69667 -0.07024 +0.70333 -0.06717 +0.71000 -0.06413 +0.71667 -0.06112 +0.72333 -0.05814 +0.73000 -0.05519 +0.73667 -0.05228 +0.74333 -0.04941 +0.75000 -0.04658 +0.75660 -0.04382 +0.76314 -0.04114 +0.76961 -0.03853 +0.77601 -0.03600 +0.78235 -0.03354 +0.78863 -0.03116 +0.79484 -0.02887 +0.80098 -0.02665 +0.80706 -0.02452 +0.81307 -0.02247 +0.81902 -0.02050 +0.82490 -0.01862 +0.83072 -0.01681 +0.83647 -0.01510 +0.84216 -0.01346 +0.84778 -0.01191 +0.85333 -0.01045 +0.85882 -0.00907 +0.86425 -0.00776 +0.86961 -0.00653 +0.87490 -0.00539 +0.88013 -0.00434 +0.88529 -0.00335 +0.89039 -0.00245 +0.89542 -0.00160 +0.90039 -0.00085 +0.90529 -0.00015 +0.91013 0.00046 +0.91490 0.00103 +0.91961 0.00151 +0.92425 0.00193 +0.92882 0.00229 +0.93333 0.00258 +0.93778 0.00279 +0.94216 0.00295 +0.94647 0.00303 +0.95072 0.00303 +0.95490 0.00296 +0.95902 0.00282 +0.96307 0.00261 +0.96706 0.00232 +0.97098 0.00194 +0.97484 0.00149 +0.97863 0.00098 +0.98235 0.00040 +0.98601 -0.00025 +0.98961 -0.00097 +0.99314 -0.00176 +0.99660 -0.00261 +1.00000 -0.00347 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17.dat new file mode 100644 index 0000000000..68cff47cc6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17.dat @@ -0,0 +1,181 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA64_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.432 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4073 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.7945 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.0065 Cd0 ! 2D drag coefficient value at 0-lift. + -0.088 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"Default" x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"Default" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 127 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0198 0.0000 + -175.00 0.374 0.0341 0.1880 + -170.00 0.749 0.0955 0.3770 + -160.00 0.659 0.2807 0.2747 + -155.00 0.736 0.3919 0.3130 + -150.00 0.783 0.5086 0.3428 + -145.00 0.803 0.6267 0.3654 + -140.00 0.798 0.7427 0.3820 + -135.00 0.771 0.8537 0.3935 + -130.00 0.724 0.9574 0.4007 + -125.00 0.660 1.0519 0.4042 + -120.00 0.581 1.1355 0.4047 + -115.00 0.491 1.2070 0.4025 + -110.00 0.390 1.2656 0.3981 + -105.00 0.282 1.3104 0.3918 + -100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 diff --git a/zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17_coords.txt b/zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17_coords.txt new file mode 100644 index 0000000000..aa31ac26b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! NACA 64-618 (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.990000 0.003385 +0.980000 0.006126 +0.975000 0.007447 +0.970000 0.008767 +0.965000 0.010062 +0.960000 0.011357 +0.955000 0.012639 +0.950000 0.013921 +0.945000 0.015200 +0.940000 0.016478 +0.935000 0.017757 +0.930000 0.019036 +0.925000 0.020317 +0.920000 0.021598 +0.915000 0.022881 +0.910000 0.024163 +0.905000 0.025448 +0.900000 0.026733 +0.887500 0.029951 +0.875000 0.033169 +0.862500 0.036386 +0.850000 0.039603 +0.837500 0.042804 +0.825000 0.046004 +0.812500 0.049171 +0.800000 0.052337 +0.787500 0.055452 +0.775000 0.058566 +0.762500 0.061611 +0.750000 0.064656 +0.737500 0.067615 +0.725000 0.070573 +0.712500 0.073429 +0.700000 0.076285 +0.687500 0.079029 +0.675000 0.081773 +0.662500 0.084393 +0.650000 0.087012 +0.637500 0.089490 +0.625000 0.091967 +0.612500 0.094283 +0.600000 0.096599 +0.587500 0.098743 +0.575000 0.100887 +0.562500 0.102843 +0.550000 0.104799 +0.537500 0.106549 +0.525000 0.108299 +0.512500 0.109830 +0.500000 0.111360 +0.487500 0.112649 +0.475000 0.113937 +0.462500 0.114964 +0.450000 0.115990 +0.445000 0.116320 +0.440000 0.116650 +0.435000 0.116931 +0.430000 0.117211 +0.425000 0.117439 +0.420000 0.117667 +0.415000 0.117835 +0.410000 0.118003 +0.405000 0.118104 +0.400000 0.118204 +0.395000 0.118231 +0.390000 0.118258 +0.385000 0.118213 +0.380000 0.118168 +0.375000 0.118057 +0.370000 0.117946 +0.365000 0.117777 +0.360000 0.117607 +0.355000 0.117383 +0.350000 0.117159 +0.345000 0.116881 +0.340000 0.116603 +0.335000 0.116273 +0.330000 0.115942 +0.325000 0.115562 +0.320000 0.115181 +0.315000 0.114750 +0.310000 0.114319 +0.305000 0.113838 +0.300000 0.113356 +0.295000 0.112824 +0.290000 0.112292 +0.285000 0.111710 +0.280000 0.111127 +0.275000 0.110495 +0.270000 0.109863 +0.265000 0.109180 +0.260000 0.108497 +0.255000 0.107762 +0.250000 0.107027 +0.245000 0.106241 +0.240000 0.105454 +0.235000 0.104614 +0.230000 0.103774 +0.225000 0.102880 +0.220000 0.101985 +0.215000 0.101035 +0.210000 0.100084 +0.205000 0.099076 +0.200000 0.098068 +0.195000 0.097001 +0.190000 0.095934 +0.185000 0.094805 +0.180000 0.093676 +0.175000 0.092484 +0.170000 0.091291 +0.165000 0.090032 +0.160000 0.088772 +0.155000 0.087441 +0.150000 0.086110 +0.145000 0.084704 +0.140000 0.083298 +0.135000 0.081814 +0.130000 0.080329 +0.125000 0.078759 +0.120000 0.077188 +0.115000 0.075525 +0.110000 0.073862 +0.105000 0.072098 +0.100000 0.070334 +0.097500 0.069412 +0.095000 0.068489 +0.092500 0.067537 +0.090000 0.066584 +0.087500 0.065601 +0.085000 0.064617 +0.082500 0.063600 +0.080000 0.062583 +0.077500 0.061531 +0.075000 0.060478 +0.072500 0.059388 +0.070000 0.058297 +0.067500 0.057165 +0.065000 0.056032 +0.062500 0.054854 +0.060000 0.053676 +0.057500 0.052447 +0.055000 0.051218 +0.052500 0.049933 +0.050000 0.048647 +0.047500 0.047299 +0.045000 0.045950 +0.042500 0.044530 +0.040000 0.043110 +0.037500 0.041606 +0.035000 0.040102 +0.032500 0.038501 +0.030000 0.036899 +0.027500 0.035177 +0.025000 0.033454 +0.022500 0.031574 +0.020000 0.029694 +0.018750 0.028680 +0.017500 0.027666 +0.016250 0.026589 +0.015000 0.025511 +0.013750 0.024354 +0.012500 0.023197 +0.011250 0.021936 +0.010000 0.020674 +0.009500 0.020131 +0.009000 0.019587 +0.008500 0.019017 +0.008000 0.018447 +0.007500 0.017844 +0.007000 0.017241 +0.006500 0.016598 +0.006000 0.015955 +0.005500 0.015260 +0.005000 0.014565 +0.004500 0.013801 +0.004000 0.013037 +0.003500 0.012167 +0.003000 0.011296 +0.002500 0.010262 +0.002000 0.009227 +0.001875 0.008930 +0.001750 0.008633 +0.001625 0.008315 +0.001500 0.007997 +0.001375 0.007655 +0.001250 0.007312 +0.001125 0.006934 +0.001000 0.006555 +0.000875 0.006125 +0.000750 0.005695 +0.000625 0.005184 +0.000500 0.004672 +0.000400 0.004190 +0.000350 0.003913 +0.000300 0.003636 +0.000200 0.002970 +0.000100 0.002104 +0.000050 0.001052 +0.000000 0.000000 +0.000050 -0.001046 +0.000100 -0.002092 +0.000200 -0.002954 +0.000300 -0.003613 +0.000350 -0.003891 +0.000400 -0.004169 +0.000500 -0.004658 +0.000625 -0.005178 +0.000750 -0.005698 +0.000875 -0.006135 +0.001000 -0.006572 +0.001125 -0.006956 +0.001250 -0.007340 +0.001375 -0.007684 +0.001500 -0.008027 +0.001625 -0.008341 +0.001750 -0.008654 +0.001875 -0.008943 +0.002000 -0.009231 +0.002500 -0.010204 +0.003000 -0.011176 +0.003500 -0.011953 +0.004000 -0.012729 +0.004500 -0.013380 +0.005000 -0.014030 +0.005500 -0.014595 +0.006000 -0.015160 +0.006500 -0.015667 +0.007000 -0.016174 +0.007500 -0.016636 +0.008000 -0.017098 +0.008500 -0.017526 +0.009000 -0.017953 +0.009500 -0.018352 +0.010000 -0.018750 +0.011250 -0.019644 +0.012500 -0.020537 +0.013750 -0.021322 +0.015000 -0.022107 +0.016250 -0.022812 +0.017500 -0.023517 +0.018750 -0.024160 +0.020000 -0.024803 +0.022500 -0.025948 +0.025000 -0.027092 +0.027500 -0.028097 +0.030000 -0.029102 +0.032500 -0.030003 +0.035000 -0.030904 +0.037500 -0.031725 +0.040000 -0.032546 +0.042500 -0.033304 +0.045000 -0.034061 +0.047500 -0.034767 +0.050000 -0.035472 +0.052500 -0.036132 +0.055000 -0.036792 +0.057500 -0.037414 +0.060000 -0.038035 +0.062500 -0.038622 +0.065000 -0.039209 +0.067500 -0.039766 +0.070000 -0.040322 +0.072500 -0.040852 +0.075000 -0.041381 +0.077500 -0.041885 +0.080000 -0.042389 +0.082500 -0.042870 +0.085000 -0.043350 +0.087500 -0.043809 +0.090000 -0.044268 +0.092500 -0.044707 +0.095000 -0.045145 +0.097500 -0.045566 +0.100000 -0.045987 +0.105000 -0.046782 +0.110000 -0.047576 +0.115000 -0.048313 +0.120000 -0.049050 +0.125000 -0.049734 +0.130000 -0.050417 +0.135000 -0.051053 +0.140000 -0.051688 +0.145000 -0.052278 +0.150000 -0.052868 +0.155000 -0.053418 +0.160000 -0.053967 +0.165000 -0.054478 +0.170000 -0.054988 +0.175000 -0.055461 +0.180000 -0.055934 +0.185000 -0.056373 +0.190000 -0.056811 +0.195000 -0.057216 +0.200000 -0.057621 +0.205000 -0.057993 +0.210000 -0.058365 +0.215000 -0.058705 +0.220000 -0.059045 +0.225000 -0.059355 +0.230000 -0.059664 +0.235000 -0.059944 +0.240000 -0.060224 +0.245000 -0.060474 +0.250000 -0.060723 +0.255000 -0.060943 +0.260000 -0.061163 +0.265000 -0.061354 +0.270000 -0.061545 +0.275000 -0.061708 +0.280000 -0.061871 +0.285000 -0.062004 +0.290000 -0.062137 +0.295000 -0.062240 +0.300000 -0.062343 +0.305000 -0.062417 +0.310000 -0.062490 +0.315000 -0.062534 +0.320000 -0.062577 +0.325000 -0.062590 +0.330000 -0.062602 +0.335000 -0.062583 +0.340000 -0.062563 +0.345000 -0.062512 +0.350000 -0.062460 +0.355000 -0.062374 +0.360000 -0.062287 +0.365000 -0.062164 +0.370000 -0.062040 +0.375000 -0.061878 +0.380000 -0.061716 +0.385000 -0.061509 +0.390000 -0.061301 +0.395000 -0.061040 +0.400000 -0.060778 +0.405000 -0.060458 +0.410000 -0.060138 +0.415000 -0.059763 +0.420000 -0.059388 +0.425000 -0.058966 +0.430000 -0.058544 +0.435000 -0.058083 +0.440000 -0.057622 +0.445000 -0.057127 +0.450000 -0.056632 +0.462500 -0.055265 +0.475000 -0.053897 +0.487500 -0.052374 +0.500000 -0.050850 +0.512500 -0.049195 +0.525000 -0.047539 +0.537500 -0.045777 +0.550000 -0.044014 +0.562500 -0.042165 +0.575000 -0.040316 +0.587500 -0.038401 +0.600000 -0.036486 +0.612500 -0.034526 +0.625000 -0.032565 +0.637500 -0.030575 +0.650000 -0.028585 +0.662500 -0.026594 +0.675000 -0.024603 +0.687500 -0.022632 +0.700000 -0.020660 +0.712500 -0.018728 +0.725000 -0.016795 +0.737500 -0.014922 +0.750000 -0.013048 +0.762500 -0.011260 +0.775000 -0.009472 +0.787500 -0.007797 +0.800000 -0.006122 +0.812500 -0.004594 +0.825000 -0.003065 +0.837500 -0.001721 +0.850000 -0.000376 +0.862500 0.000742 +0.875000 0.001859 +0.887500 0.002698 +0.900000 0.003536 +0.905000 0.003780 +0.910000 0.004023 +0.915000 0.004205 +0.920000 0.004387 +0.925000 0.004504 +0.930000 0.004620 +0.935000 0.004661 +0.940000 0.004702 +0.945000 0.004658 +0.950000 0.004614 +0.955000 0.004476 +0.960000 0.004338 +0.965000 0.004084 +0.970000 0.003829 +0.975000 0.003436 +0.980000 0.003042 +0.990000 0.001910 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/clean/Cp_Ct_Cq.NREL5MW.txt b/zmq_coupling_tests/templatesDir/clean/Cp_Ct_Cq.NREL5MW.txt new file mode 100644 index 0000000000..4324d3bbac --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Cp_Ct_Cq.NREL5MW.txt @@ -0,0 +1,99 @@ +# ----- Rotor performance tables for the NREL-5MW wind turbine ----- +# ------------ Written on Jan-13-22 using the ROSCO toolbox ------------ + +# Pitch angle vector, 36 entries - x axis (matrix columns) (deg) +-5.0 -4.0 -3.0 -2.0 -1.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 +# TSR vector, 26 entries - y axis (matrix rows) (-) +2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 +# Wind speed vector - z axis (m/s) +11.4 + +# Power coefficient + +0.006673 0.009813 0.013077 0.016508 0.020122 0.023918 0.027887 0.032006 0.036239 0.040540 0.044858 0.049138 0.053326 0.057366 0.061205 0.064796 0.068092 0.071051 0.073631 0.075796 0.077520 0.078793 0.079607 0.079960 0.079851 0.079303 0.078341 0.076993 0.075269 0.073154 0.070619 0.067607 0.064059 0.059976 0.055381 0.050328 +0.020093 0.026879 0.033876 0.041034 0.048264 0.055472 0.062560 0.069438 0.076024 0.082246 0.088041 0.093349 0.098111 0.102262 0.105746 0.108521 0.110563 0.111865 0.112435 0.112304 0.111503 0.110082 0.108043 0.105376 0.102031 0.097898 0.092907 0.087092 0.080496 0.073183 0.065206 0.056618 0.047499 0.037976 0.028144 0.018084 +0.048757 0.059921 0.070879 0.081507 0.091686 0.101314 0.110305 0.118583 0.126073 0.132692 0.138350 0.142964 0.146489 0.148944 0.150362 0.150761 0.150158 0.148560 0.145993 0.142397 0.137607 0.131540 0.124241 0.115747 0.106162 0.095542 0.084011 0.071754 0.058916 0.045611 0.031929 0.017939 0.003701 -0.010721 -0.025259 -0.039848 +0.090123 0.104877 0.118836 0.131894 0.143960 0.154953 0.164780 0.173312 0.180438 0.186134 0.190421 0.193294 0.194678 0.194534 0.192872 0.189595 0.184490 0.177562 0.168848 0.158486 0.146540 0.133154 0.118581 0.103012 0.086606 0.069499 0.051807 0.033628 0.015033 -0.003935 -0.023212 -0.042681 -0.062203 -0.081676 -0.101014 -0.120137 +0.139124 0.156683 0.172901 0.187702 0.200999 0.212709 0.222753 0.231064 0.237530 0.241950 0.244105 0.243810 0.240834 0.235185 0.226970 0.216406 0.203596 0.188826 0.172423 0.154596 0.135473 0.115192 0.093900 0.071756 0.048901 0.025448 0.001458 -0.023067 -0.048079 -0.073394 -0.098747 -0.123894 -0.148637 -0.172971 -0.196999 -0.220426 +0.191782 0.211839 0.230276 0.247076 0.262109 0.275108 0.285675 0.293225 0.297120 0.296898 0.292698 0.284905 0.273940 0.260137 0.243968 0.225765 0.205747 0.184044 0.160751 0.135955 0.109826 0.082563 0.054349 0.025323 -0.004446 -0.034984 -0.066317 -0.098275 -0.130442 -0.162296 -0.193412 -0.223707 -0.253665 -0.283545 -0.312671 -0.340141 +0.246353 0.270341 0.292682 0.312827 0.329812 0.342452 0.349588 0.350796 0.346468 0.337517 0.324917 0.309376 0.291272 0.270832 0.248190 0.223439 0.196656 0.167952 0.137415 0.105259 0.071726 0.037018 0.001262 -0.035533 -0.073456 -0.112507 -0.152329 -0.192145 -0.231094 -0.268667 -0.305110 -0.341553 -0.378474 -0.414899 -0.449086 -0.478908 +0.306243 0.335683 0.361286 0.381426 0.394666 0.400011 0.397807 0.389766 0.377676 0.362345 0.344063 0.323009 0.299287 0.272921 0.243930 0.212388 0.178407 0.142107 0.103741 0.063607 0.021945 -0.021117 -0.065611 -0.111678 -0.159287 -0.207873 -0.256248 -0.303158 -0.347971 -0.391262 -0.434965 -0.480253 -0.525739 -0.568955 -0.606708 -0.638532 +0.368062 0.397982 0.420678 0.434161 0.438041 0.434596 0.426094 0.413722 0.397833 0.378568 0.356023 0.330207 0.301063 0.268542 0.232706 0.193700 0.151740 0.107083 0.060108 0.011125 -0.039710 -0.092454 -0.147289 -0.204180 -0.262421 -0.320480 -0.376558 -0.429701 -0.480649 -0.532192 -0.586717 -0.643176 -0.698195 -0.746783 -0.788014 -0.825218 +0.413915 0.437699 0.451902 0.458070 0.457967 0.452866 0.443478 0.429833 0.411921 0.389793 0.363427 0.332762 0.297737 0.258384 0.214897 0.167596 0.116800 0.062939 0.006435 -0.052490 -0.113873 -0.177938 -0.244676 -0.313397 -0.382360 -0.449143 -0.512100 -0.571792 -0.631581 -0.695509 -0.764242 -0.833635 -0.896797 -0.950560 -0.998368 -1.044827 +0.427324 0.444280 0.455448 0.462056 0.464498 0.462253 0.454597 0.441298 0.422256 0.397517 0.367139 0.331124 0.289519 0.242518 0.190536 0.134077 0.073568 0.009566 -0.057573 -0.127803 -0.201376 -0.278345 -0.358171 -0.439117 -0.518328 -0.593032 -0.663068 -0.731776 -0.804602 -0.885395 -0.971040 -1.052725 -1.123154 -1.184540 -1.242706 -1.302084 +0.413889 0.430080 0.443986 0.455667 0.463490 0.465861 0.461379 0.449315 0.429515 0.402103 0.367325 0.325347 0.276400 0.220931 0.159637 0.093102 0.021935 -0.053297 -0.132381 -0.215535 -0.302917 -0.394172 -0.487834 -0.580989 -0.669719 -0.752399 -0.831452 -0.912845 -1.003839 -1.105589 -1.208911 -1.301214 -1.380509 -1.453087 -1.525242 -1.600224 +0.390738 0.409602 0.427384 0.443933 0.457445 0.465005 0.464411 0.454181 0.433864 0.403639 0.364016 0.315425 0.258360 0.193623 0.122136 0.044567 -0.038313 -0.126023 -0.218606 -0.316340 -0.419059 -0.525699 -0.633667 -0.738622 -0.836834 -0.928785 -1.019688 -1.118620 -1.233318 -1.358741 -1.478110 -1.581346 -1.672639 -1.759983 -1.849169 -1.941926 +0.363054 0.386720 0.409228 0.429996 0.447852 0.460425 0.463989 0.456010 0.435373 0.402165 0.357222 0.301344 0.235402 0.160566 0.077923 -0.011703 -0.107479 -0.209107 -0.316861 -0.430808 -0.550233 -0.673151 -0.795604 -0.912315 -1.020857 -1.123956 -1.230487 -1.353172 -1.496497 -1.645302 -1.779751 -1.896314 -2.002958 -2.108318 -2.217267 -2.330606 +0.332023 0.361556 0.389367 0.414649 0.436246 0.452807 0.460431 0.454894 0.434075 0.397696 0.346937 0.283092 0.207494 0.121668 0.026850 -0.075950 -0.185943 -0.303110 -0.427726 -0.559435 -0.696810 -0.836734 -0.973950 -1.103096 -1.222996 -1.339770 -1.467400 -1.620400 -1.794614 -1.965735 -2.116279 -2.249130 -2.374431 -2.500966 -2.632648 -2.770283 +0.297995 0.333854 0.367528 0.397656 0.423215 0.442899 0.454053 0.450936 0.429986 0.390235 0.333142 0.260640 0.174562 0.076794 -0.031277 -0.148468 -0.274167 -0.408575 -0.551737 -0.702675 -0.859149 -1.016871 -1.169580 -1.311915 -1.444423 -1.578792 -1.734397 -1.922541 -2.128205 -2.321411 -2.490350 -2.642587 -2.789846 -2.940844 -3.098986 -3.264660 +0.261597 0.303619 0.343502 0.378889 0.408674 0.431280 0.445167 0.444233 0.423112 0.379761 0.315806 0.233927 0.136491 0.025768 -0.096686 -0.229613 -0.372646 -0.526034 -0.689370 -0.860978 -1.037730 -1.214335 -1.383513 -1.539437 -1.686737 -1.844401 -2.034203 -2.260837 -2.498120 -2.714447 -2.904511 -3.079332 -3.251981 -3.431224 -3.619857 -3.816817 +0.223751 0.271311 0.317227 0.358217 0.392491 0.418111 0.434088 0.434927 0.413446 0.366239 0.294883 0.202866 0.093151 -0.031589 -0.169648 -0.319787 -0.481868 -0.655988 -0.841105 -1.034831 -1.233270 -1.430180 -1.616348 -1.786462 -1.952417 -2.139500 -2.368690 -2.636225 -2.905702 -3.147086 -3.361213 -3.561934 -3.763787 -3.975522 -4.198409 -4.429489 +0.185578 0.237532 0.288993 0.335546 0.374551 0.403289 0.421002 0.423063 0.400961 0.349628 0.270309 0.167352 0.044405 -0.095487 -0.250473 -0.419415 -0.602317 -0.798913 -1.007440 -1.224860 -1.446724 -1.665242 -1.868434 -2.054428 -2.244050 -2.466255 -2.739406 -3.049892 -3.352672 -3.621561 -3.862815 -4.093010 -4.328409 -4.576896 -4.837351 -5.105458 +0.147095 0.203239 0.259075 0.310894 0.354752 0.386719 0.405978 0.408744 0.385629 0.329881 0.242007 0.127271 -0.009910 -0.166158 -0.339498 -0.528928 -0.734472 -0.955298 -1.188911 -1.431845 -1.679152 -1.920015 -2.140330 -2.345296 -2.563821 -2.826409 -3.147779 -3.503220 -3.840906 -4.140058 -4.411660 -4.675361 -4.948974 -5.238172 -5.539321 -5.847566 +0.109921 0.168465 0.228283 0.284493 0.333003 0.368316 0.389001 0.392004 0.367452 0.306944 0.209888 0.082498 -0.069969 -0.243863 -0.437077 -0.648769 -0.878808 -1.125646 -1.386141 -1.656724 -1.931386 -2.194733 -2.433122 -2.661010 -2.913585 -3.221522 -3.595200 -3.997663 -4.372318 -4.704715 -5.010142 -5.311913 -5.628384 -5.961897 -6.307013 -6.658699 +0.075556 0.133907 0.196815 0.256499 0.309270 0.347981 0.370019 0.372880 0.346417 0.280755 0.173858 0.032901 -0.135979 -0.328881 -0.543585 -0.779386 -1.035790 -1.310469 -1.599847 -1.900506 -2.203972 -2.489774 -2.748220 -3.003362 -3.294941 -3.653136 -4.083147 -4.534716 -4.948847 -5.317645 -5.660775 -6.005570 -6.369299 -6.750614 -7.143160 -7.541782 +0.045437 0.101086 0.164731 0.227521 0.283675 0.325613 0.348964 0.351362 0.322521 0.251245 0.133815 -0.021672 -0.208162 -0.421508 -0.659413 -0.921225 -1.205892 -1.510319 -1.830843 -2.164074 -2.497172 -2.805822 -3.087060 -3.374013 -3.709339 -4.122787 -4.613131 -5.115993 -5.572447 -5.980987 -6.366170 -6.759084 -7.174174 -7.606904 -8.050518 -8.499762 +0.020095 0.070625 0.132961 0.197686 0.256313 0.301131 0.325760 0.327415 0.295744 0.218342 0.089649 -0.081378 -0.286748 -0.522056 -0.784958 -1.074719 -1.389587 -1.725804 -2.080005 -2.448103 -2.811255 -3.143907 -3.451088 -3.774480 -4.158169 -4.632027 -5.186626 -5.743189 -6.245055 -6.696930 -7.128978 -7.575043 -8.045426 -8.533374 -9.031865 -9.535604 +-0.001687 0.043909 0.102330 0.166837 0.227413 0.274487 0.300332 0.301010 0.266040 0.181968 0.041242 -0.146395 -0.371984 -0.630855 -0.920613 -1.240294 -1.587356 -1.957580 -2.348192 -2.753074 -3.146694 -3.505110 -3.841738 -4.206100 -4.642786 -5.182427 -5.805056 -6.418029 -6.968601 -7.467747 -7.951835 -8.455876 -8.985506 -9.532652 -10.089996 -10.652280 +-0.020991 0.020364 0.073330 0.135754 0.197326 0.245733 0.272607 0.272110 0.233378 0.142039 -0.011538 -0.216915 -0.464126 -0.748233 -1.066769 -1.418378 -1.799699 -2.206350 -2.636179 -3.079288 -3.504186 -3.890511 -4.260392 -4.670103 -5.164549 -5.775547 -6.469853 -7.142266 -7.745026 -8.295764 -8.837283 -9.403900 -9.996885 -10.607377 -11.227722 -11.852766 + + +# Thrust coefficient + +0.128717 0.128402 0.127976 0.127677 0.127561 0.127629 0.127867 0.128247 0.128729 0.129258 0.129777 0.130225 0.130542 0.130673 0.130570 0.130193 0.129510 0.128500 0.127155 0.125472 0.123467 0.121169 0.118605 0.115809 0.112801 0.109598 0.106205 0.102605 0.098769 0.094663 0.090253 0.085471 0.080247 0.074585 0.068519 0.062126 +0.168397 0.169715 0.171083 0.172538 0.173986 0.175323 0.176451 0.177284 0.177754 0.177804 0.177391 0.176487 0.175078 0.173164 0.170771 0.167935 0.164700 0.161125 0.157265 0.153157 0.148796 0.144149 0.139139 0.133696 0.127741 0.121140 0.113810 0.105805 0.097197 0.088074 0.078501 0.068532 0.058230 0.047709 0.037053 0.026331 +0.226643 0.229393 0.231723 0.233550 0.234756 0.235255 0.234993 0.233948 0.232126 0.229565 0.226326 0.222484 0.218143 0.213440 0.208473 0.203249 0.197693 0.191672 0.185067 0.177711 0.169360 0.159907 0.149434 0.138024 0.125825 0.112914 0.099398 0.085443 0.071172 0.056685 0.042068 0.027389 0.012700 -0.001958 -0.016522 -0.030881 +0.299075 0.301289 0.302422 0.302406 0.301210 0.298869 0.295464 0.291107 0.285985 0.280362 0.274473 0.268391 0.262007 0.255130 0.247532 0.238852 0.228637 0.216830 0.203516 0.188917 0.173159 0.156385 0.138854 0.120751 0.102214 0.083356 0.064271 0.045044 0.025754 0.006460 -0.012785 -0.031903 -0.050766 -0.069197 -0.086927 -0.103550 +0.379238 0.378835 0.376828 0.373306 0.368432 0.362520 0.355993 0.349221 0.342334 0.335182 0.327457 0.318711 0.308189 0.295450 0.280436 0.263431 0.244639 0.224405 0.203103 0.180973 0.158152 0.134784 0.110984 0.086862 0.062520 0.038061 0.013566 -0.010909 -0.035298 -0.059484 -0.083286 -0.106436 -0.128554 -0.149119 -0.167467 -0.182809 +0.462045 0.457610 0.451683 0.444801 0.437544 0.430278 0.422940 0.415089 0.406018 0.394702 0.380509 0.363246 0.343190 0.320701 0.296376 0.270674 0.243937 0.216365 0.188092 0.159188 0.129783 0.100004 0.069970 0.039795 0.009565 -0.020663 -0.050818 -0.080761 -0.110260 -0.138960 -0.166409 -0.192073 -0.215232 -0.234926 -0.250010 -0.259496 +0.545296 0.537969 0.530603 0.523523 0.516328 0.508094 0.497562 0.483752 0.466005 0.444344 0.419336 0.391808 0.362349 0.331374 0.299182 0.266026 0.232071 0.197454 0.162213 0.126478 0.090382 0.054055 0.017608 -0.018892 -0.055386 -0.091750 -0.127731 -0.162918 -0.196784 -0.228774 -0.258236 -0.284215 -0.305420 -0.320331 -0.327933 -0.328268 +0.634417 0.627969 0.621264 0.612780 0.601387 0.585824 0.565236 0.539859 0.510799 0.478901 0.444769 0.408839 0.371429 0.332767 0.293070 0.252557 0.211368 0.169524 0.127130 0.084335 0.041284 -0.001917 -0.045208 -0.088516 -0.131639 -0.174175 -0.215526 -0.255049 -0.292101 -0.325924 -0.355354 -0.378817 -0.394523 -0.401294 -0.399320 -0.390574 +0.735578 0.726839 0.715209 0.698962 0.676693 0.649128 0.617406 0.582286 0.544379 0.504195 0.462125 0.418443 0.373358 0.327062 0.279804 0.231775 0.183064 0.133686 0.083811 0.033605 -0.016820 -0.067406 -0.118066 -0.168514 -0.218193 -0.266339 -0.312201 -0.355042 -0.394026 -0.427876 -0.454896 -0.473018 -0.480617 -0.477721 -0.466483 -0.450923 +0.836616 0.819394 0.796306 0.768163 0.735696 0.699319 0.659490 0.616641 0.571164 0.523450 0.473790 0.422421 0.369559 0.315437 0.260360 0.204512 0.147873 0.090579 0.032826 -0.025256 -0.083602 -0.142121 -0.200467 -0.257947 -0.313640 -0.366661 -0.416171 -0.461284 -0.500752 -0.532889 -0.555398 -0.565981 -0.564006 -0.551394 -0.532762 -0.512992 +0.923379 0.893210 0.859907 0.823650 0.784285 0.741493 0.695217 0.645715 0.593258 0.538206 0.480917 0.421690 0.360798 0.298558 0.235326 0.171229 0.106253 0.040624 -0.025491 -0.092007 -0.158843 -0.225631 -0.291594 -0.355648 -0.416743 -0.473917 -0.526240 -0.572594 -0.611418 -0.640346 -0.656398 -0.657833 -0.645755 -0.624799 -0.601049 -0.579120 +0.993425 0.954344 0.913695 0.871240 0.826266 0.778188 0.726411 0.670805 0.611601 0.549205 0.484132 0.416794 0.347553 0.276858 0.205091 0.132281 0.058537 -0.015913 -0.090942 -0.166478 -0.242184 -0.317269 -0.390504 -0.460636 -0.526540 -0.587232 -0.641708 -0.688659 -0.725848 -0.749926 -0.757799 -0.749140 -0.727679 -0.700204 -0.673221 -0.650161 +1.058549 1.011415 0.963227 0.914208 0.863809 0.810735 0.753864 0.692505 0.626704 0.556910 0.483849 0.408103 0.330166 0.250636 0.169909 0.087938 0.004949 -0.078857 -0.163388 -0.248386 -0.333115 -0.416283 -0.496411 -0.572141 -0.642397 -0.706208 -0.762552 -0.809541 -0.843850 -0.861381 -0.859866 -0.841099 -0.811461 -0.779163 -0.750163 -0.726138 +1.122305 1.067207 1.011341 0.955082 0.898284 0.839959 0.778078 0.711195 0.638918 0.561654 0.480375 0.395899 0.308904 0.220154 0.129994 0.038399 -0.054349 -0.148080 -0.242618 -0.337354 -0.431053 -0.522046 -0.608688 -0.689695 -0.764072 -0.830961 -0.888968 -0.935169 -0.965155 -0.974811 -0.963246 -0.934896 -0.898382 -0.862536 -0.832084 -0.807326 +1.185738 1.122582 1.058847 0.995008 0.931027 0.866582 0.799502 0.727171 0.648509 0.563696 0.473951 0.380407 0.283976 0.185599 0.085524 -0.016186 -0.119230 -0.223433 -0.328360 -0.432958 -0.535499 -0.634048 -0.726965 -0.813132 -0.891721 -0.961752 -1.021004 -1.065338 -1.089724 -1.090502 -1.068696 -1.031466 -0.989260 -0.950738 -0.919159 -0.894322 +1.248868 1.177878 1.106090 1.034308 0.962814 0.891330 0.818549 0.740704 0.655695 0.563246 0.464772 0.361803 0.255555 0.147124 0.036641 -0.075690 -0.189578 -0.304724 -0.420330 -0.534810 -0.646043 -0.751962 -0.851114 -0.942592 -1.025625 -1.098723 -1.158523 -1.199963 -1.217675 -1.208810 -1.176857 -1.131525 -1.084562 -1.043982 -1.011881 -0.987449 +1.310753 1.232966 1.153240 1.073234 0.993908 0.914846 0.835616 0.752042 0.660663 0.560476 0.452996 0.340238 0.223775 0.104835 -0.016537 -0.140014 -0.265270 -0.391766 -0.518236 -0.642586 -0.762395 -0.875671 -0.981224 -1.078327 -1.165991 -1.241827 -1.301438 -1.339064 -1.349133 -1.330112 -1.288253 -1.235555 -1.184617 -1.142625 -1.110627 -1.086622 +1.370202 1.287113 1.200281 1.111936 1.024461 0.937489 0.851104 0.761450 0.663572 0.555529 0.438759 0.315838 0.188759 0.058841 -0.073915 -0.209068 -0.346176 -0.484368 -0.621832 -0.756036 -0.884420 -1.005217 -1.117496 -1.220568 -1.312850 -1.390993 -1.449734 -1.482671 -1.484225 -1.454750 -1.403285 -1.343886 -1.289747 -1.247079 -1.215478 -1.191550 +1.425945 1.339521 1.246699 1.150493 1.054590 0.959390 0.865327 0.769108 0.664559 0.548527 0.422175 0.288713 0.150621 0.009228 -0.135421 -0.282763 -0.432177 -0.582348 -0.730921 -0.875019 -1.012114 -1.140727 -1.260146 -1.369430 -1.466168 -1.546178 -1.603417 -1.630806 -1.623105 -1.583019 -1.522246 -1.456812 -1.400325 -1.357559 -1.326244 -1.302016 +1.478287 1.389036 1.292096 1.188788 1.084384 0.980656 0.878503 0.775237 0.663743 0.539578 0.403344 0.258956 0.109434 -0.043935 -0.200986 -0.361019 -0.523161 -0.685556 -0.845366 -0.999480 -1.145544 -1.282366 -1.409337 -1.524920 -1.625906 -1.707377 -1.762486 -1.783498 -1.765941 -1.715150 -1.645380 -1.574677 -1.516687 -1.474068 -1.442713 -1.417868 +1.525569 1.435807 1.335411 1.226404 1.113896 1.001379 0.890777 0.780002 0.661259 0.528773 0.382346 0.226642 0.065268 -0.100589 -0.270547 -0.443771 -0.619028 -0.793883 -0.965092 -1.129434 -1.284809 -1.430301 -1.565142 -1.687017 -1.792041 -1.874588 -1.926934 -1.940785 -1.912886 -1.851321 -1.772922 -1.697837 -1.639004 -1.596445 -1.564728 -1.539006 +1.566315 1.479214 1.376488 1.263103 1.143093 1.021619 0.902254 0.783557 0.657210 0.516187 0.359250 0.191837 0.018160 -0.160683 -0.344060 -0.530963 -0.719689 -0.907253 -1.090067 -1.264932 -1.430027 -1.584649 -1.727568 -1.855690 -1.964564 -2.047808 -2.096752 -2.102712 -2.064071 -1.991678 -1.905145 -1.826603 -1.767296 -1.724535 -1.692174 -1.665365 +1.599400 1.517580 1.415403 1.298085 1.171736 1.041419 0.913010 0.786007 0.651695 0.501886 0.334113 0.154593 -0.031851 -0.224178 -0.421492 -0.622547 -0.825079 -1.025616 -1.220296 -1.406037 -1.581314 -1.745475 -1.896602 -2.030921 -2.143474 -2.227031 -2.271933 -2.269336 -2.219606 -2.136371 -2.042346 -1.961175 -1.901455 -1.858218 -1.824963 -1.796908 +1.624851 1.550529 1.451132 1.331239 1.199665 1.060803 0.923092 0.787425 0.644798 0.485924 0.306984 0.114961 -0.084730 -0.291046 -0.502823 -0.718477 -0.935156 -1.148950 -1.355807 -1.552820 -1.738766 -1.912794 -2.072223 -2.212699 -2.328774 -2.412252 -2.452480 -2.440720 -2.379579 -2.285564 -2.184808 -2.101635 -2.041361 -1.997404 -1.963032 -1.933615 +1.644484 1.576932 1.482832 1.362862 1.226569 1.079755 0.932536 0.787882 0.636575 0.468351 0.277909 0.072976 -0.140450 -0.361273 -0.588030 -0.818712 -1.049886 -1.277246 -1.496631 -1.705352 -1.902443 -2.086605 -2.254411 -2.401028 -2.520465 -2.603459 -2.638392 -2.616924 -2.544069 -2.439454 -2.332777 -2.247970 -2.186918 -2.142020 -2.106339 -2.075472 +1.659936 1.597863 1.510260 1.392062 1.252024 1.098156 0.941373 0.787439 0.627098 0.449210 0.246925 0.028662 -0.198996 -0.434846 -0.677094 -0.923225 -1.169251 -1.410513 -1.642804 -1.863707 -2.072377 -2.266900 -2.443154 -2.595911 -2.718548 -2.800637 -2.829676 -2.798002 -2.713156 -2.598249 -2.486428 -2.400100 -2.338052 -2.292009 -2.254855 -2.222470 + + +# Torque coefficient + +0.003340 0.004911 0.006545 0.008262 0.010070 0.011970 0.013957 0.016018 0.018137 0.020289 0.022450 0.024593 0.026688 0.028710 0.030632 0.032429 0.034079 0.035559 0.036851 0.037934 0.038797 0.039434 0.039841 0.040018 0.039964 0.039689 0.039208 0.038533 0.037670 0.036612 0.035343 0.033836 0.032060 0.030017 0.027717 0.025188 +0.008045 0.010762 0.013563 0.016429 0.019324 0.022210 0.025048 0.027802 0.030438 0.032930 0.035250 0.037375 0.039282 0.040944 0.042339 0.043450 0.044267 0.044789 0.045017 0.044964 0.044644 0.044075 0.043258 0.042191 0.040851 0.039196 0.037198 0.034870 0.032229 0.029301 0.026107 0.022669 0.019018 0.015205 0.011268 0.007241 +0.016268 0.019993 0.023649 0.027195 0.030591 0.033804 0.036803 0.039565 0.042064 0.044273 0.046161 0.047700 0.048876 0.049695 0.050168 0.050302 0.050100 0.049567 0.048711 0.047511 0.045913 0.043888 0.041453 0.038619 0.035421 0.031878 0.028030 0.023941 0.019658 0.015218 0.010653 0.005985 0.001235 -0.003577 -0.008428 -0.013295 +0.025774 0.029993 0.033986 0.037720 0.041171 0.044314 0.047125 0.049565 0.051603 0.053232 0.054458 0.055280 0.055675 0.055634 0.055159 0.054221 0.052762 0.050780 0.048288 0.045325 0.041909 0.038080 0.033913 0.029460 0.024768 0.019876 0.014816 0.009617 0.004299 -0.001125 -0.006638 -0.012206 -0.017789 -0.023358 -0.028889 -0.034358 +0.034814 0.039208 0.043266 0.046970 0.050298 0.053228 0.055741 0.057821 0.059439 0.060545 0.061084 0.061010 0.060266 0.058852 0.056797 0.054153 0.050947 0.047252 0.043147 0.038686 0.033900 0.028825 0.023497 0.017956 0.012237 0.006368 0.000365 -0.005772 -0.012031 -0.018366 -0.024710 -0.031003 -0.037195 -0.043284 -0.049297 -0.055159 +0.042659 0.047120 0.051221 0.054958 0.058302 0.061193 0.063544 0.065223 0.066090 0.066040 0.065106 0.063373 0.060934 0.057863 0.054267 0.050218 0.045765 0.040938 0.035756 0.030241 0.024429 0.018365 0.012089 0.005633 -0.000989 -0.007782 -0.014751 -0.021860 -0.029015 -0.036100 -0.043021 -0.049760 -0.056424 -0.063070 -0.069549 -0.075659 +0.049318 0.054120 0.058592 0.062625 0.066025 0.068556 0.069984 0.070226 0.069360 0.067568 0.065045 0.061934 0.058310 0.054218 0.049685 0.044730 0.039369 0.033622 0.027509 0.021072 0.014359 0.007411 0.000253 -0.007113 -0.014705 -0.022523 -0.030495 -0.038466 -0.046263 -0.053785 -0.061080 -0.068376 -0.075767 -0.083059 -0.089903 -0.095873 +0.055734 0.061091 0.065751 0.069416 0.071826 0.072799 0.072397 0.070934 0.068734 0.065944 0.062616 0.058785 0.054468 0.049669 0.044393 0.038653 0.032469 0.025862 0.018880 0.011576 0.003994 -0.003843 -0.011941 -0.020324 -0.028989 -0.037831 -0.046635 -0.055172 -0.063328 -0.071206 -0.079160 -0.087402 -0.095680 -0.103545 -0.110416 -0.116207 +0.061402 0.066394 0.070180 0.072429 0.073076 0.072502 0.071083 0.069019 0.066369 0.063155 0.059394 0.055087 0.050225 0.044800 0.038821 0.032314 0.025314 0.017864 0.010027 0.001856 -0.006625 -0.015424 -0.024572 -0.034062 -0.043778 -0.053464 -0.062820 -0.071685 -0.080185 -0.088783 -0.097879 -0.107298 -0.116477 -0.124582 -0.131461 -0.137667 +0.063740 0.067402 0.069590 0.070539 0.070524 0.069738 0.068292 0.066191 0.063433 0.060025 0.055965 0.051243 0.045849 0.039789 0.033093 0.025809 0.017986 0.009692 0.000991 -0.008083 -0.017536 -0.027401 -0.037678 -0.048261 -0.058881 -0.069165 -0.078860 -0.088052 -0.097259 -0.107103 -0.117688 -0.128374 -0.138100 -0.146379 -0.153741 -0.160896 +0.061104 0.063529 0.065126 0.066071 0.066420 0.066099 0.065004 0.063103 0.060380 0.056842 0.052498 0.047348 0.041399 0.034678 0.027245 0.019172 0.010520 0.001368 -0.008233 -0.018275 -0.028795 -0.039801 -0.051216 -0.062791 -0.074117 -0.084800 -0.094814 -0.104639 -0.115053 -0.126605 -0.138852 -0.150533 -0.160603 -0.169381 -0.177699 -0.186189 +0.055238 0.057399 0.059255 0.060814 0.061858 0.062174 0.061576 0.059966 0.057323 0.053665 0.049023 0.043421 0.036888 0.029486 0.021305 0.012425 0.002927 -0.007113 -0.017668 -0.028765 -0.040427 -0.052606 -0.065106 -0.077539 -0.089381 -0.100415 -0.110966 -0.121829 -0.133973 -0.147552 -0.161342 -0.173660 -0.184243 -0.193929 -0.203559 -0.213566 +0.048889 0.051249 0.053474 0.055545 0.057235 0.058181 0.058107 0.056827 0.054285 0.050503 0.045545 0.039466 0.032326 0.024226 0.015282 0.005576 -0.004794 -0.015768 -0.027352 -0.039580 -0.052432 -0.065775 -0.079284 -0.092416 -0.104704 -0.116209 -0.127582 -0.139961 -0.154312 -0.170004 -0.184940 -0.197857 -0.209279 -0.220207 -0.231366 -0.242972 +0.042753 0.045540 0.048190 0.050636 0.052739 0.054219 0.054639 0.053699 0.051269 0.047359 0.042066 0.035486 0.027721 0.018908 0.009176 -0.001378 -0.012657 -0.024624 -0.037313 -0.050732 -0.064795 -0.079270 -0.093690 -0.107433 -0.120215 -0.132356 -0.144901 -0.159348 -0.176226 -0.193749 -0.209582 -0.223308 -0.235867 -0.248274 -0.261103 -0.274450 +0.036927 0.040211 0.043304 0.046116 0.048518 0.050360 0.051208 0.050592 0.048277 0.044231 0.038585 0.031485 0.023077 0.013532 0.002986 -0.008447 -0.020680 -0.033711 -0.047570 -0.062219 -0.077497 -0.093059 -0.108320 -0.122683 -0.136018 -0.149005 -0.163200 -0.180216 -0.199592 -0.218623 -0.235366 -0.250141 -0.264077 -0.278150 -0.292795 -0.308102 +0.031398 0.035176 0.038724 0.041898 0.044591 0.046665 0.047841 0.047512 0.045305 0.041116 0.035101 0.027462 0.018392 0.008091 -0.003295 -0.015643 -0.028887 -0.043049 -0.058133 -0.074036 -0.090523 -0.107141 -0.123231 -0.138228 -0.152189 -0.166347 -0.182742 -0.202566 -0.224235 -0.244592 -0.262392 -0.278432 -0.293948 -0.309857 -0.326520 -0.343976 +0.026185 0.030391 0.034383 0.037925 0.040906 0.043169 0.044559 0.044466 0.042352 0.038012 0.031611 0.023415 0.013662 0.002579 -0.009678 -0.022983 -0.037300 -0.052654 -0.069003 -0.086180 -0.103872 -0.121549 -0.138483 -0.154090 -0.168834 -0.184616 -0.203614 -0.226299 -0.250050 -0.271703 -0.290728 -0.308227 -0.325508 -0.343449 -0.362331 -0.382045 +0.021330 0.025864 0.030241 0.034148 0.037416 0.039858 0.041381 0.041461 0.039413 0.034913 0.028111 0.019339 0.008880 -0.003011 -0.016172 -0.030485 -0.045936 -0.062535 -0.080182 -0.098649 -0.117566 -0.136337 -0.154085 -0.170301 -0.186122 -0.203956 -0.225804 -0.251308 -0.276997 -0.300008 -0.320420 -0.339555 -0.358797 -0.378982 -0.400229 -0.422258 +0.016887 0.021614 0.026297 0.030533 0.034082 0.036698 0.038309 0.038497 0.036486 0.031815 0.024597 0.015228 0.004041 -0.008689 -0.022792 -0.038165 -0.054808 -0.072698 -0.091673 -0.111457 -0.131646 -0.151530 -0.170019 -0.186944 -0.204199 -0.224419 -0.249274 -0.277527 -0.305079 -0.329546 -0.351500 -0.372446 -0.393867 -0.416478 -0.440178 -0.464575 +0.012803 0.017690 0.022550 0.027060 0.030877 0.033660 0.035336 0.035577 0.033565 0.028713 0.021064 0.011078 -0.000863 -0.014462 -0.029550 -0.046038 -0.063928 -0.083149 -0.103482 -0.124627 -0.146152 -0.167117 -0.186293 -0.204133 -0.223153 -0.246009 -0.273981 -0.304918 -0.334310 -0.360348 -0.383988 -0.406940 -0.430756 -0.455927 -0.482139 -0.508968 +0.009169 0.014052 0.019042 0.023730 0.027777 0.030722 0.032448 0.032698 0.030650 0.025603 0.017507 0.006881 -0.005836 -0.020341 -0.036458 -0.054116 -0.073304 -0.093893 -0.115622 -0.138192 -0.161102 -0.183069 -0.202953 -0.221962 -0.243030 -0.268716 -0.299885 -0.333456 -0.364707 -0.392433 -0.417910 -0.443081 -0.469479 -0.497298 -0.526085 -0.555420 +0.006050 0.010723 0.015760 0.020539 0.024765 0.027865 0.029630 0.029859 0.027740 0.022482 0.013922 0.002635 -0.010889 -0.026336 -0.043528 -0.062410 -0.082942 -0.104937 -0.128110 -0.152185 -0.176486 -0.199372 -0.220067 -0.240498 -0.263846 -0.292529 -0.326963 -0.363123 -0.396285 -0.425817 -0.453293 -0.480903 -0.510029 -0.540564 -0.571997 -0.603917 +0.003499 0.007783 0.012684 0.017518 0.021842 0.025071 0.026869 0.027054 0.024833 0.019345 0.010303 -0.001669 -0.016028 -0.032455 -0.050772 -0.070931 -0.092849 -0.116289 -0.140968 -0.166626 -0.192273 -0.216038 -0.237692 -0.259787 -0.285606 -0.317440 -0.355194 -0.393913 -0.429058 -0.460514 -0.490172 -0.520425 -0.552385 -0.585704 -0.619861 -0.654451 +0.001490 0.005236 0.009858 0.014657 0.019004 0.022327 0.024153 0.024276 0.021928 0.016189 0.006647 -0.006034 -0.021261 -0.038708 -0.058200 -0.079685 -0.103030 -0.127959 -0.154221 -0.181514 -0.208440 -0.233104 -0.255880 -0.279857 -0.308306 -0.343440 -0.384561 -0.425827 -0.463037 -0.496541 -0.528576 -0.561649 -0.596525 -0.632704 -0.669664 -0.707014 +-0.000121 0.003139 0.007316 0.011928 0.016259 0.019625 0.021473 0.021521 0.019021 0.013010 0.002949 -0.010467 -0.026596 -0.045104 -0.065821 -0.088677 -0.113491 -0.139960 -0.167888 -0.196836 -0.224978 -0.250604 -0.274671 -0.300722 -0.331943 -0.370526 -0.415042 -0.458867 -0.498231 -0.533919 -0.568529 -0.604567 -0.642433 -0.681552 -0.721401 -0.761602 +-0.001449 0.001406 0.005062 0.009371 0.013622 0.016963 0.018818 0.018784 0.016110 0.009805 -0.000797 -0.014974 -0.032039 -0.051651 -0.073640 -0.097912 -0.124235 -0.152307 -0.181979 -0.212567 -0.241898 -0.268567 -0.294100 -0.322383 -0.356515 -0.398693 -0.446622 -0.493039 -0.534649 -0.572667 -0.610048 -0.649163 -0.690097 -0.732240 -0.775063 -0.818211 + diff --git a/zmq_coupling_tests/templatesDir/clean/DISCON.IN b/zmq_coupling_tests/templatesDir/clean/DISCON.IN new file mode 100644 index 0000000000..7c4aacb165 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/DISCON.IN @@ -0,0 +1,192 @@ +! Controller parameter input file for the NREL-5MW wind turbine +! - File written using ROSCO version 2.8.0 controller tuning logic on 10/18/23 + +!------- SIMULATION CONTROL ------------------------------------------------------------ +1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} +0 ! DT_Out - {Time step to output .dbg* files, or 0 to match sampling period of OpenFAST} +0 ! Echo - (0 - no Echo, 1 - Echo input data to .echo) + +!------- CONTROLLER FLAGS ------------------------------------------------- +1 ! F_LPFType - (1: first-order low-pass filter, 2: second-order low-pass filter), [rad/s] (currently filters generator speed and pitch control signals +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +3 ! VS_ControlMode - Generator torque control mode in above rated conditions (0- no torque control, 1- k*omega^2 with PI transitions, 2- WSE TSR Tracking, 3- Power-based TSR Tracking)} +0 ! VS_ConstPower - Do constant power torque control, where above rated torque varies, 0 for constant torque} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +0 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time, 2: rotor position control} +0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} +0 ! AWC_Mode - Active wake control {0 - not used, 1 - complex number method, 2 - Coleman transform method} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} +0 ! CC_Mode - Cable control mode [0- unused, 1- User defined, 2- Open loop control] +0 ! StC_Mode - Structural control mode [0- unused, 1- User defined, 2- Open loop control] + +!------- FILTERS ---------------------------------------------------------- +1.57080 ! F_LPFCornerFreq - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +0 ! F_NumNotchFilts - Number of notch filters placed on sensors +0.0000 ! F_NotchFreqs - Natural frequency of the notch filters. Array with length F_NumNotchFilts +0.0000 ! F_NotchBetaNum - Damping value of numerator (determines the width of notch). Array with length F_NumNotchFilts, [-] +0.0000 ! F_NotchBetaDen - Damping value of denominator (determines the depth of notch). Array with length F_NumNotchFilts, [-] +0 ! F_GenSpdNotch_N - Number of notch filters on generator speed +0 ! F_GenSpdNotch_Ind - Indices of notch filters on generator speed +0 ! F_TwrTopNotch_N - Number of notch filters on tower top acceleration signal +0 ! F_TwrTopNotch_Ind - Indices of notch filters on tower top acceleration signal +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +0.0000 1.0000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.056789 0.084492 0.106018 0.124332 0.140807 0.155903 0.169931 0.183270 0.196062 0.208354 0.220050 0.231503 0.242646 0.253377 0.263967 0.274233 0.284343 0.294292 0.303997 0.313626 0.322957 0.332260 0.341319 0.350368 0.359221 0.368059 0.376700 0.385301 0.393691 0.402050 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-0.018995 -0.016672 -0.014787 -0.013228 -0.011916 -0.010797 -0.009831 -0.008989 -0.008248 -0.007592 -0.007006 -0.006480 -0.006005 -0.005574 -0.005182 -0.004822 -0.004492 -0.004187 -0.003906 -0.003644 -0.003402 -0.003175 -0.002963 -0.002765 -0.002579 -0.002404 -0.002239 -0.002083 -0.001936 -0.001797 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.008388 -0.007514 -0.006805 -0.006218 -0.005725 -0.005304 -0.004940 -0.004624 -0.004345 -0.004098 -0.003878 -0.003680 -0.003501 -0.003339 -0.003192 -0.003056 -0.002932 -0.002817 -0.002712 -0.002613 -0.002522 -0.002437 -0.002357 -0.002283 -0.002212 -0.002147 -0.002085 -0.002026 -0.001971 -0.001918 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.000880000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +122.9096700000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.000880000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +9.120000 11.400000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +2 ! IPC_SatMode - IPC Saturation method (0 - no saturation (except by PC_MinPit), 1 - saturate by PS_BldPitchMin, 2 - saturate sotfly (full IPC cycle) by PC_MinPit, 3 - saturate softly by PS_BldPitchMin) +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +94.40000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +43093.51876000 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +1500000.000000 ! VS_MaxRat - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +47402.87063000 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +35.29006000000 ! VS_MinOMSpd - Minimum generator speed [rad/s] +2.063350000000 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side). Only used in VS_ControlMode = 1,3 +5000000.000000 ! VS_RtPwr - Wind turbine rated power [W] +43093.51876000 ! VS_RtTq - Rated torque, [Nm]. +122.9096700000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-657.442080000 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-104.507080000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +7.64 ! VS_TSRopt - Power-maximizing region 2 tip-speed-ratio. Only used in VS_ControlMode = 2. +0.314000000000 ! VS_PwrFiltF - Low pass filter on power used to determine generator speed set point. Only used in VS_ControlMode = 3. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +2 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_GenSpeeds array +0.07854 ! PRC_LPF_Freq - Frequency of the low pass filter on the wind speed estimate used to set PRC_GenSpeeds [rad/s] +3.0000 25.0000 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s] +0.7917 0.7917 ! PRC_GenSpeeds - Array of generator speeds corresponding to PRC_WindSpeeds [rad/s] + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +63.000 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +97.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +43702538.05700 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"Cp_Ct_Cq.NREL5MW.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.2897 3.5793 3.8690 4.1586 4.4483 4.7379 5.0276 5.3172 5.6069 5.8966 6.1862 6.4759 6.7655 7.0552 7.3448 7.6345 7.9241 8.2138 8.5034 8.7931 9.0828 9.3724 9.6621 9.9517 10.2414 10.5310 10.8207 11.1103 11.4000 11.8533 12.3067 12.7600 13.2133 13.6667 14.1200 14.5733 15.0267 15.4800 15.9333 16.3867 16.8400 17.2933 17.7467 18.2000 18.6533 19.1067 19.5600 20.0133 20.4667 20.9200 21.3733 21.8267 22.2800 22.7333 23.1867 23.6400 24.0933 24.5467 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.01638154 -0.01796321 -0.01954487 -0.02112654 -0.02270820 -0.02428987 -0.02587154 -0.02745320 -0.02903487 -0.03061653 -0.03219820 -0.03377987 -0.03536153 -0.03694320 -0.03852486 -0.04010653 -0.04168820 -0.04326986 -0.04485153 -0.04643319 -0.04801486 -0.04959652 -0.05117819 -0.05275986 -0.05434152 -0.05592319 -0.05758373 -0.05882656 -0.06845507 -0.05992890 -0.05031134 -0.05798636 -0.06840333 -0.08061549 -0.09336590 -0.10698855 -0.12116040 -0.13530722 -0.15025447 -0.16589008 -0.18080009 -0.19651023 -0.21294470 -0.22969213 -0.24540879 -0.26178304 -0.27905964 -0.29706835 -0.31499595 -0.33136688 -0.34832584 -0.36677525 -0.38556416 -0.40554370 -0.42546670 -0.44309547 -0.46062268 -0.47954729 -0.49884696 -0.51943992 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER FORE-AFT DAMPING ------------------------------------------- +-1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] +0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +60 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.000 3.290 3.579 3.869 4.159 4.448 4.738 5.028 5.317 5.607 5.897 6.186 6.476 6.766 7.055 7.345 7.634 7.924 8.214 8.503 8.793 9.083 9.372 9.662 9.952 10.241 10.531 10.821 11.110 11.400 11.853 12.307 12.760 13.213 13.667 14.120 14.573 15.027 15.480 15.933 16.387 16.840 17.293 17.747 18.200 18.653 19.107 19.560 20.013 20.467 20.920 21.373 21.827 22.280 22.733 23.187 23.640 24.093 24.547 25.000 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.011 0.023 0.032 0.040 0.047 0.059 0.070 0.081 0.091 0.102 0.112 0.122 0.131 0.141 0.150 0.160 0.169 0.178 0.187 0.196 0.205 0.214 0.223 0.232 0.240 0.249 0.257 0.266 0.274 0.282 0.290 0.299 0.307 0.315 0.323 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +1 ! Fl_n - Number of Fl_Kp gains in gain scheduling, optional with default of 1 +0.0000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] +0.0000 ! Fl_U - Wind speeds for scheduling Fl_Kp, optional if Fl_Kp is single value [m/s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) + 0 0 0 ! Ind_BldPitch - The columns in OL_Filename that contains the blade pitch (1,2,3) inputs in rad [array] +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the yaw rate in rad/s +0 ! Ind_Azimuth - The column in OL_Filename that contains the desired azimuth position in rad (used if OL_Mode = 2) +0.0000 0.0000 0.0000 0.0000 ! RP_Gains - PID gains and Tf of derivative for rotor position control (used if OL_Mode = 2) +0 ! Ind_CableControl - The column(s) in OL_Filename that contains the cable control inputs in m [Used with CC_Mode = 2, must be the same size as CC_Group_N] +0 ! Ind_StructControl - The column(s) in OL_Filename that contains the structural control inputs [Used with StC_Mode = 2, must be the same size as StC_Group_N] + +!------- Pitch Actuator Model ----------------------------------------------------- +3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- Pitch Actuator Faults ----------------------------------------------------- +0.00000000 0.00000000 0.00000000 ! PF_Offsets - Constant blade pitch offsets for blades 1-3 [rad] + +!------- Active Wake Control ----------------------------------------------------- +1 ! AWC_NumModes - Number of user-defined AWC forcing modes +1 ! AWC_n - Azimuthal mode number(s) (i.e., the number and direction of the lobes of the wake structure) +1 ! AWC_harmonic - Harmonic(s) to apply in the AWC Inverse Coleman Transformation (only used when AWC_Mode = 2) +0.0500 ! AWC_freq - Frequency(s) of forcing mode(s) [Hz] +1.0000 ! AWC_amp - Pitch amplitude(s) of individual forcing mode(s) [deg] +0.0000 ! AWC_clockangle - Initial angle(s) of forcing mode(s) [deg] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +2.000000 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] + +!------- Cable Control --------------------------------------------------------- +1 ! CC_Group_N - Number of cable control groups +0 ! CC_GroupIndex - First index for cable control group, should correspond to deltaL +20.000000 ! CC_ActTau - Time constant for line actuator [s] + +!------- Structural Controllers --------------------------------------------------------- +1 ! StC_Group_N - Number of cable control groups +0 ! StC_GroupIndex - First index for structural control group, options specified in ServoDyn summary output diff --git a/zmq_coupling_tests/templatesDir/clean/IceDyn_Input.dat b/zmq_coupling_tests/templatesDir/clean/IceDyn_Input.dat new file mode 100644 index 0000000000..3cd7ff93ce --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/IceDyn_Input.dat @@ -0,0 +1,74 @@ +------------------ IceDyn v1.01.x Input File ----------------------------------- +Freshwater Ice of Great Lakes input properties. +---------------------- STRUCTURE PROPERTIES ------------------------------------ + 1 NumLegs - number of support-structure legs in contact with ice + 0 LegPosX - array of size NumLegs: global X position of legs 1-NumLegs (m) + 0 LegPosY - array of size NumLegs: global Y position of legs 1-NumLegs (m) + 6 StWidth - array of size NumLegs: Width of the structure in contact with the ice, or diameter for cylindrical structures (m) +---------------------- ICE MODELS ---------------------------------------------- + 6 IceModel - Number that represents different ice models. {1: quasi-static load; 2:dynamic ice-structure interaction; 3: random ice load; 4: non-simultaneous ice failure; 5: sloping structure 6: large ice floe impact} + 1 IceSubModel - Number that represents different ice sub models. +---------------------- ICE PROPERTIES -General --------------------------------- +0.1 IceVel - Velocity of ice sheet movement (m/s) +0.8 IceThks - Thickness of the ice sheet (m) +1000 WtDen - Mass density of water (kg/m3) +900 IceDen - Mass density of ice (kg/m3) +0.0 InitLoc - Ice sheet initial location (m) +0.0 InitTm - Ice load starting time (s) +2 Seed1 - Random seed 1 +5 Seed2 - Random seed 2 +---------------------- ICE PROPERTIES - Ice Model 1, SubModel 1------------------ +2.7 Ikm - Indentation factor +3.5e6 Ag - Constant depends only on ice crystal type, used in calculating uniaxial stress (MPa-3s-1) +65000 Qg - Activation Energy (Jmol^-1) +8.314 Rg - Universal gas constant (Jmol-1K-1) +269 Tice - Ice temperature (K) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 2------------------- +0.3 Poisson - Poisson's ratio of ice +90.0 WgAngle - Wedge Angel, degree. Default 90 Degrees. +9.5 EIce - Young's modulus of ice (GPa) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 3------------------- +5 SigNm - Nominal ice stress (MPa) +---------------------- ICE PROPERTIES -Ice Model 2, SubModel 1,2----------------- +1.0 Pitch - Distance between sequential ice teeth (m) +5.0 IceStr2 - Ice failure stress (MPa) +1.0 Delmax2 - Ice tooth maximum elastic deformation (m) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 1,2----------------- +0.5 ThkMean - Mean value of ice thickness (m) +0.04 ThkVar - Variance of ice thickness (m^2) +0.001 VelMean - Mean value of ice velocity (m/s) +1e-6 VelVar - Variance of ice velocity (m^2/s^2) +15 TeMean - Mean value of ice loading event duration (s) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 2,3----------------- +5 StrMean - Mean value of ice strength (MPa) +1 StrVar - Variance of ice strength (MPa) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 3------------------- +0.1 DelMean - Mean value of maximum ice tooth tip displacement (m) +0.01 DelVar - Variance of maximum ice tooth tip displacement (m^2) +0.2 PMean - Mean value of the distance between sequential ice teeth (m) +0.01 PVar - Variance of the distance between sequential ice teeth (m^2) +---------------------- ICE PROPERTIES -Ice Model 4 ------------------------------ +0 PrflMean - Mean value of ice contact face position (m) +0.02 PrflSig - Standard deviation of ice contact face position (m) +10 ZoneNo1 - Number of failure zones along contact width +1 ZoneNo2 - Number of failure zones along contact height/thickness +0.27 ZonePitch - Distance between sequential ice teeth (m) +5.0 IceStr - Ice failure stress within each failure region (MPa) +0.027 Delmax - Ice teeth maximum elastic deformatIon (m) +---------------------- ICE PROPERTIES -Ice Model 5, Submodel 1,2 ----------------- +55.0 ConeAgl - Slope angle of the cone (degree) +8.0 ConeDwl - Cone waterline diameter (m) +1.0 ConeDtp - Cone top diameter (m) +0.3 RdupThk - Ride-up ice thickness (m) +0.3 mu - Friction coefficient between structure and ice (-) +0.7 FlxStr - Flexural strength of ice (MPa) +0.1 StrLim - Limit strain for ice fracture failure (-) +1e-2 StrRtLim - Limit strain rate for ice brittle behavior (s^-1) +---------------------- ICE PROPERTIES -Ice Model 6 ------------------------------- +800 FloeLth - Ice floe length (m) +800 FloeWth - Ice floe width (m) +5.0 CPrAr - Ice crushing strength pressure-area relation constant +-0.5 dPrAr - Ice crushing strength pressure-area relation order +9 Fdr - Constant external driving force (MN) +140 Kic - Fracture toughness of ice (kNm^(-3/2)) +3.3 FspN - Non-dimensional splitting load \ No newline at end of file diff --git a/zmq_coupling_tests/templatesDir/clean/IceFloe_IEC_Crushing.dat b/zmq_coupling_tests/templatesDir/clean/IceFloe_IEC_Crushing.dat new file mode 100644 index 0000000000..66ae737cf7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/IceFloe_IEC_Crushing.dat @@ -0,0 +1,51 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 60.0 +randomSeed 123 +rampTime 10.0 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 1.2 +numLegs 4.0 +towerFrequency 0.28 +! +legX1 4.5 +legY1 4.5 +shelterFactor_ks1 1.0 +loadPhase1 0.0 +! +legX2 -4.5 +legY2 4.5 +shelterFactor_ks2 1.0 +loadPhase2 45.0 +! +legX3 4.5 +legY3 -4.5 +shelterFactor_ks3 1.0 +loadPhase3 135.0 +! +legX4 -4.5 +legY4 -4.5 +shelterFactor_ks4 1.0 +loadPhase4 290.0 +! +singleLoad 0 +legAutoFactor 0 +multiLegFactor_kn 1 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/clean/Main01.AD.sum b/zmq_coupling_tests/templatesDir/clean/Main01.AD.sum new file mode 100644 index 0000000000..e9f2163dfc --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Main01.AD.sum @@ -0,0 +1,61 @@ + +This summary information was generated by AeroDyn on 12-Jun-2024 at 10:02:02. + +====== General Options ============================================================================ + 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory + 2 AFAeroMod - Type of blade airfoil aerodynamics model: Beddoes-Leishman unsteady model + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +====== Blade-Element/Momentum Theory Options ====================================================== + 2 SkewMod - Type of skewed-wake correction model: Pitt/Peters + T TipLoss - Use the Prandtl tip-loss model? Yes + T HubLoss - Use the Prandtl hub-loss model? Yes + T TanInd - Include tangential induction in BEMT calculations? Yes + F AIDrag - Include the drag term in the axial-induction calculation? No + F TIDrag - Include the drag term in the tangential-induction calculation? No + 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== + 3 UAMod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 3 NBlOuts - Number of blade nodes selected for output + 19 NumBlNds - Number of blade nodes in the analysis + Blade nodes selected for output: Output node Analysis node + ----------- ------------- + 1 1 + 2 9 + 3 19 + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templatesDir/clean/Main01.ED.sum b/zmq_coupling_tests/templatesDir/clean/Main01.ED.sum new file mode 100644 index 0000000000..6554e1080d --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Main01.ED.sum @@ -0,0 +1,210 @@ + +This summary information was generated by ElastoDyn on 12-Jun-2024 at 10:02:02. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 16 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Enabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.00500000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 0.000 + Mass Incl. Platform (kg) 696850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 OoPDefl1 (m) + 2 IPDefl1 (m) + 3 TwstDefl1 (deg) + 4 BldPitch1 (deg) + 5 Azimuth (deg) + 6 RotSpeed (rpm) + 7 GenSpeed (rpm) + 8 TTDspFA (m) + 9 TTDspSS (m) + 10 TTDspTwst (deg) + 11 Spn2MLxb1 (kN-m) + 12 Spn2MLyb1 (kN-m) + 13 RootFxb1 (kN) + 14 RootFyb1 (kN) + 15 RootFzb1 (kN) + 16 RootMxb1 (kN-m) + 17 RootMyb1 (kN-m) + 18 RootMyc1 (kN-m) + 19 RootMyc2 (kN-m) + 20 RootMyc3 (kN-m) + 21 RootMzb1 (kN-m) + 22 RotTorq (kN-m) + 23 LSSGagMya (kN-m) + 24 LSSGagMza (kN-m) + 25 YawBrFxp (kN) + 26 YawBrFyp (kN) + 27 YawBrFzp (kN) + 28 YawBrMxp (kN-m) + 29 YawBrMyp (kN-m) + 30 YawBrMzp (kN-m) + 31 TwrBsFxt (kN) + 32 TwrBsFyt (kN) + 33 TwrBsFzt (kN) + 34 TwrBsMxt (kN-m) + 35 TwrBsMyt (kN-m) + 36 TwrBsMzt (kN-m) + 37 NcIMURAys (deg/s^2) + 38 NcIMUTAxs (m/s^2) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templatesDir/clean/Main01.SrvD.sum b/zmq_coupling_tests/templatesDir/clean/Main01.SrvD.sum new file mode 100644 index 0000000000..57801f77f5 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Main01.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 12-Jun-2024 at 10:02:02. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 0 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 12-Jun-2024 at 10:02:02. + diff --git a/zmq_coupling_tests/templatesDir/clean/Main01.UA.sum b/zmq_coupling_tests/templatesDir/clean/Main01.UA.sum new file mode 100644 index 0000000000..f0407452c2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Main01.UA.sum @@ -0,0 +1,16 @@ + +Predictions were generated on 12-Jun-2024 at 10:02:02 + OpenFAST + + + +AirfoilNumber TableNumber alpha0 alpha1 alpha2 eta_e C_nalpha C_lalpha T_f0 T_V0 T_p T_VL b1 b2 b5 A1 A2 A5 S1 S2 S3 S4 Cn1 Cn2 St_sh Cd0 Cm0 k0 k1 k2 k3 k1_hat x_cp_bar UACutout UACutout_delta UACutout_blend filtCutOff alphaLowerWrap alphaLower alphaUpper alphaUpperWrap c_alphaLowerWrap c_alphaLower c_alphaUpper c_alphaUpperWrap c_RateWrap c_RateLower c_Rate c_RateUpper +(-) (-) (deg) (deg) (deg) (-) (-/rad) (-/rad) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (deg) (deg) (deg) (-) (deg) (deg) (deg) (deg) (-) (-) (-) (-) (-/rad) (-/rad) (-/rad) (-/rad) + 1 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 2 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 3 1 -3.20000 9.00000 -9.00000 1.00000 7.48880 9.05273 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.35190 -0.32260 0.19000 0.03000 -0.05000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -0.25000 2.25000 55.00000 -5.61045 0.10507 0.47793 8.35959 -3.07855 7.31788 8.54531 8.56087 + 4 1 -1.20000 11.50000 -11.50000 1.00000 7.18380 8.82355 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.67170 -0.30750 0.19000 0.01200 -0.07000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -40.00000 -2.75000 5.75000 50.00000 -5.56999 -0.20172 0.96897 6.72117 -2.60827 8.25716 7.89125 7.44806 + 5 1 -2.20000 9.00000 -9.00000 1.00000 7.33260 8.47978 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.44900 -0.61380 0.19000 0.00800 -0.09000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -6.39000 6.25000 45.00000 -5.67249 -0.57626 1.09716 5.87251 -2.44993 7.56262 7.58542 7.06084 + 6 1 -3.20000 8.50000 -8.50000 1.00000 6.44620 7.97647 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.43360 -0.68730 0.19000 0.00600 -0.12000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -7.96000 3.75000 32.00000 -5.53755 -0.61874 0.91909 4.38619 -2.00914 7.60871 7.52444 7.03186 + 7 1 -4.20000 8.00000 -8.00000 1.00000 6.20470 8.96402 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.41440 -0.53240 0.19000 0.00600 -0.12100 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -35.00000 -9.05000 2.75000 30.00000 -4.67755 -0.67498 0.85701 4.10998 -1.70674 8.83741 7.43866 6.83970 + 8 1 -4.43200 9.00000 -9.00000 1.00000 6.00310 7.67763 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.40730 -0.79450 0.19000 0.00650 -0.08800 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -50.00000 -5.50000 4.50000 28.00000 -6.14917 -0.20664 0.95141 3.60393 -1.98160 7.65128 6.63516 6.46715 diff --git a/zmq_coupling_tests/templatesDir/clean/Main01.ech b/zmq_coupling_tests/templatesDir/clean/Main01.ech new file mode 100644 index 0000000000..c1ddc67113 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Main01.ech @@ -0,0 +1,107 @@ + +This file of echoed input was generated by OpenFAST on 12-Jun-2024 at 10:02:02. + +Data from OpenFAST primary input file "Main01.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 6.0000E+02 TMax - Total run time (s) + 5.0000E-03 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) + 1.2250E+00 AirDens - Air density (kg/m^3) + 1.0250E+03 WtrDens - Water density (kg/m^3) + 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) + 1.0350E+05 Patm - Atmospheric pressure (Pa) + 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) + 5.0000E+01 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + T SumPrint - Print summary data to .sum (flag) + 5.0000E+00 SttsTime - Amount of time between screen status messages (s) + 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES10.3E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + T VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "https://127.0.1:5555" + 0 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + " + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 4 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + "Wind1VelX" "Azimuth" "GenTq" "GenPwr" + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" diff --git a/zmq_coupling_tests/templatesDir/clean/Main01.sum b/zmq_coupling_tests/templatesDir/clean/Main01.sum new file mode 100644 index 0000000000..5415e80ac3 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/Main01.sum @@ -0,0 +1,103 @@ + +FAST Summary File + +Predictions were generated on 12-Jun-2024 at 10:02:02 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-7-g2ec068f8-dirty + compiled with + NWTC Subroutine Library + ElastoDyn + BeamDyn (unknown version, unknown date) [not called] + InflowWind + AeroDyn14 (unknown version, unknown date) [not called] + AeroDyn + ServoDyn + HydroDyn (unknown version, unknown date) [not called] + SubDyn (unknown version, unknown date) [not called] + ExtPtfm_MCKF (unknown version, unknown date) [not called] + MAP (unknown version, unknown date) [not called] + FEAMooring (unknown version, unknown date) [not called] + MoorDyn (unknown version, unknown date) [not called] + OrcaFlexInterface (unknown version, unknown date) [not called] + IceFloe (unknown version, unknown date) [not called] + IceDyn (unknown version, unknown date) [not called] + + +Modeling a land-based turbine +Description from the FAST input file: + FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) + +Interpolation order for input/output time histories: 2 (quadratic) +Number of correction iterations: 0 + + + Requested Time Steps + ------------------------------------------------- + Component Time Step (s) Subcycles (-) + ----------------- --------------- ------------- + FAST (glue code) 5.000E-03 + InflowWind 5.000E-03 1 + ElastoDyn 5.000E-03 1 + AeroDyn 5.000E-03 1 + ServoDyn 5.000E-03 1 + FAST output files 5.000E-03 1 + + + Requested Channels in FAST Output File(s) + -------------------------------------------- + Number Name Units Generated by + ------ -------------------- -------------------- ------------ + 1 Time (s) OpenFAST + 2 Wind1VelX (m/s) InflowWind + 3 Wind1VelY (m/s) InflowWind + 4 Wind1VelZ (m/s) InflowWind + 5 OoPDefl1 (m) ElastoDyn + 6 IPDefl1 (m) ElastoDyn + 7 TwstDefl1 (deg) ElastoDyn + 8 BldPitch1 (deg) ElastoDyn + 9 Azimuth (deg) ElastoDyn + 10 RotSpeed (rpm) ElastoDyn + 11 GenSpeed (rpm) ElastoDyn + 12 TTDspFA (m) ElastoDyn + 13 TTDspSS (m) ElastoDyn + 14 TTDspTwst (deg) ElastoDyn + 15 Spn2MLxb1 (kN-m) ElastoDyn + 16 Spn2MLyb1 (kN-m) ElastoDyn + 17 RootFxb1 (kN) ElastoDyn + 18 RootFyb1 (kN) ElastoDyn + 19 RootFzb1 (kN) ElastoDyn + 20 RootMxb1 (kN-m) ElastoDyn + 21 RootMyb1 (kN-m) ElastoDyn + 22 RootMyc1 (kN-m) ElastoDyn + 23 RootMyc2 (kN-m) ElastoDyn + 24 RootMyc3 (kN-m) ElastoDyn + 25 RootMzb1 (kN-m) ElastoDyn + 26 RotTorq (kN-m) ElastoDyn + 27 LSSGagMya (kN-m) ElastoDyn + 28 LSSGagMza (kN-m) ElastoDyn + 29 YawBrFxp (kN) ElastoDyn + 30 YawBrFyp (kN) ElastoDyn + 31 YawBrFzp (kN) ElastoDyn + 32 YawBrMxp (kN-m) ElastoDyn + 33 YawBrMyp (kN-m) ElastoDyn + 34 YawBrMzp (kN-m) ElastoDyn + 35 TwrBsFxt (kN) ElastoDyn + 36 TwrBsFyt (kN) ElastoDyn + 37 TwrBsFzt (kN) ElastoDyn + 38 TwrBsMxt (kN-m) ElastoDyn + 39 TwrBsMyt (kN-m) ElastoDyn + 40 TwrBsMzt (kN-m) ElastoDyn + 41 NcIMURAys (deg/s^2) ElastoDyn + 42 NcIMUTAxs (m/s^2) ElastoDyn + 43 RtFldFxh (N) AeroDyn + 44 RtFldFyh (N) AeroDyn + 45 RtFldFzh (N) AeroDyn + 46 RtFldMxh (N-m) AeroDyn + 47 RtFldMyh (N-m) AeroDyn + 48 RtFldMzh (N-m) AeroDyn + 49 RtVAvgxh (m/s) AeroDyn + 50 RtFldCp (-) AeroDyn + 51 RtFldCt (-) AeroDyn + 52 RtArea (m^2) AeroDyn + 53 RtSpeed (rpm) AeroDyn + 54 RtTSR (-) AeroDyn + 55 GenTq (kN-m) ServoDyn + 56 GenPwr (kW) ServoDyn diff --git a/zmq_coupling_tests/templateDir/Main02.AD.sum b/zmq_coupling_tests/templatesDir/clean/Main02.AD.sum similarity index 97% rename from zmq_coupling_tests/templateDir/Main02.AD.sum rename to zmq_coupling_tests/templatesDir/clean/Main02.AD.sum index fc8b0bd8b9..1288b54991 100644 --- a/zmq_coupling_tests/templateDir/Main02.AD.sum +++ b/zmq_coupling_tests/templatesDir/clean/Main02.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 11-Jun-2024 at 10:00:11. +This summary information was generated by AeroDyn on 12-Jun-2024 at 09:42:59. ====== General Options ============================================================================ 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory diff --git a/zmq_coupling_tests/templateDir/Main02.ED.sum b/zmq_coupling_tests/templatesDir/clean/Main02.ED.sum similarity index 99% rename from zmq_coupling_tests/templateDir/Main02.ED.sum rename to zmq_coupling_tests/templatesDir/clean/Main02.ED.sum index 8abf6daaed..96dec88101 100644 --- a/zmq_coupling_tests/templateDir/Main02.ED.sum +++ b/zmq_coupling_tests/templatesDir/clean/Main02.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 11-Jun-2024 at 10:00:11. +This summary information was generated by ElastoDyn on 12-Jun-2024 at 09:42:59. Turbine features: diff --git a/zmq_coupling_tests/templateDir/Main02.SrvD.sum b/zmq_coupling_tests/templatesDir/clean/Main02.SrvD.sum similarity index 96% rename from zmq_coupling_tests/templateDir/Main02.SrvD.sum rename to zmq_coupling_tests/templatesDir/clean/Main02.SrvD.sum index 341a7f6bf6..a58c015690 100644 --- a/zmq_coupling_tests/templateDir/Main02.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/clean/Main02.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 11-Jun-2024 at 10:00:11. +This summary file was generated by ServoDyn on 12-Jun-2024 at 09:42:59. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 11-Jun-2024 at 10:00:11. +This summary file was closed on 12-Jun-2024 at 09:42:59. diff --git a/zmq_coupling_tests/templateDir/Main02.UA.sum b/zmq_coupling_tests/templatesDir/clean/Main02.UA.sum similarity index 99% rename from zmq_coupling_tests/templateDir/Main02.UA.sum rename to zmq_coupling_tests/templatesDir/clean/Main02.UA.sum index 3a1ab207e3..4af5245a64 100644 --- a/zmq_coupling_tests/templateDir/Main02.UA.sum +++ b/zmq_coupling_tests/templatesDir/clean/Main02.UA.sum @@ -1,5 +1,5 @@ -Predictions were generated on 11-Jun-2024 at 10:00:11 +Predictions were generated on 12-Jun-2024 at 09:42:59 OpenFAST diff --git a/zmq_coupling_tests/templateDir/Main02.ech b/zmq_coupling_tests/templatesDir/clean/Main02.ech similarity index 94% rename from zmq_coupling_tests/templateDir/Main02.ech rename to zmq_coupling_tests/templatesDir/clean/Main02.ech index f350cdab6a..48c45e7788 100644 --- a/zmq_coupling_tests/templateDir/Main02.ech +++ b/zmq_coupling_tests/templatesDir/clean/Main02.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 11-Jun-2024 at 10:00:11. +This file of echoed input was generated by OpenFAST on 12-Jun-2024 at 09:42:59. Data from OpenFAST primary input file "Main02.fst": @@ -96,8 +96,12 @@ Data from OpenFAST primary input file "Main02.fst": 0 ZmqInNbr - Number of parameters to be requested ZmqInChannels - Channels to be requested at communication time " + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" ZmqOutAddress - PUB-SUB localhost address "tcp://127.0.0.1:5557" 4 ZmqOutNbr - Number of channels to be broadcasted ZmqOutChannels - Channels to be broadcasterd at communication time "Wind1VelX" "Azimuth" "GenTq" "GenPwr" + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" diff --git a/zmq_coupling_tests/templateDir/Main02.fst b/zmq_coupling_tests/templatesDir/clean/Main02.fst similarity index 100% rename from zmq_coupling_tests/templateDir/Main02.fst rename to zmq_coupling_tests/templatesDir/clean/Main02.fst diff --git a/zmq_coupling_tests/templateDir/Main02.sum b/zmq_coupling_tests/templatesDir/clean/Main02.sum similarity index 98% rename from zmq_coupling_tests/templateDir/Main02.sum rename to zmq_coupling_tests/templatesDir/clean/Main02.sum index a826dc2222..876433d3b8 100644 --- a/zmq_coupling_tests/templateDir/Main02.sum +++ b/zmq_coupling_tests/templatesDir/clean/Main02.sum @@ -1,7 +1,7 @@ FAST Summary File -Predictions were generated on 11-Jun-2024 at 10:00:11 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-6-g45416d6a +Predictions were generated on 12-Jun-2024 at 09:42:59 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-7-g2ec068f8-dirty compiled with NWTC Subroutine Library ElastoDyn diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_AeroDyn_blade.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_AeroDyn_blade.dat new file mode 100644 index 0000000000..9d541024d0 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_AeroDyn_blade.dat @@ -0,0 +1,28 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 + +!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m +6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn.dat new file mode 100644 index 0000000000..2f8ab74652 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn.dat @@ -0,0 +1,94 @@ +--------- BEAMDYN with OpenFAST INPUT FILE ------------------------------------------- +NREL 5MW blade +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech"? (flag) +True QuasiStaticInit - Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only] + 0 rhoinf - Numerical damping parameter for generalized-alpha integrator + 2 quadrature - Quadrature method: 1=Gaussian; 2=Trapezoidal (switch) +"DEFAULT" refine - Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2] +"DEFAULT" n_fact - Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5] +"DEFAULT" DTBeam - Time step size (s) +"DEFAULT" load_retries - Number of factored load retries before quitting the simulation [DEFAULT = 20] +"DEFAULT" NRMax - Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10] +"DEFAULT" stop_tol - Tolerance for stopping criterion (-) [DEFAULT = 1E-5] +"DEFAULT" tngt_stf_fd - Use finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_comp - Compare analytical finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_pert - Perturbation size for finite differencing (-) [DEFAULT = 1E-6] +"DEFAULT" tngt_stf_difftol - Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1] +True RotStates - Orient states in the rotating frame during linearization? (flag) [used only when linearizing] +---------------------- GEOMETRY PARAMETER -------------------------------------- + 1 member_total - Total number of members (-) + 49 kp_total - Total number of key points (-) [must be at least 3] + 1 49 - Member number; Number of key points in this member + kp_xr kp_yr kp_zr initial_twist + (m) (m) (m) (deg) +0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.9987500E-01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1998650E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 2.1998550E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 3.1998450E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 4.1998350E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 5.1998250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 6.1998150E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 7.1998050E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 8.2010250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 9.1997850E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.0199775E+01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1199765E+01 1.3181000E+01 +0.0000000E+00 0.0000000E+00 1.2199755E+01 1.2848000E+01 +0.0000000E+00 0.0000000E+00 1.3200975E+01 1.2192000E+01 +0.0000000E+00 0.0000000E+00 1.4199735E+01 1.1561000E+01 +0.0000000E+00 0.0000000E+00 1.5199725E+01 1.1072000E+01 +0.0000000E+00 0.0000000E+00 1.6199715E+01 1.0792000E+01 +0.0000000E+00 0.0000000E+00 1.8200925E+01 1.0232000E+01 +0.0000000E+00 0.0000000E+00 2.0200290E+01 9.6720000E+00 +0.0000000E+00 0.0000000E+00 2.2200270E+01 9.1100000E+00 +0.0000000E+00 0.0000000E+00 2.4200250E+01 8.5340000E+00 +0.0000000E+00 0.0000000E+00 2.6200230E+01 7.9320000E+00 +0.0000000E+00 0.0000000E+00 2.8200825E+01 7.3210000E+00 +0.0000000E+00 0.0000000E+00 3.0200190E+01 6.7110000E+00 +0.0000000E+00 0.0000000E+00 3.2200170E+01 6.1220000E+00 +0.0000000E+00 0.0000000E+00 3.4200150E+01 5.5460000E+00 +0.0000000E+00 0.0000000E+00 3.6200130E+01 4.9710000E+00 +0.0000000E+00 0.0000000E+00 3.8200725E+01 4.4010000E+00 +0.0000000E+00 0.0000000E+00 4.0200090E+01 3.8340000E+00 +0.0000000E+00 0.0000000E+00 4.2200070E+01 3.3320000E+00 +0.0000000E+00 0.0000000E+00 4.4200050E+01 2.8900000E+00 +0.0000000E+00 0.0000000E+00 4.6200030E+01 2.5030000E+00 +0.0000000E+00 0.0000000E+00 4.8201240E+01 2.1160000E+00 +0.0000000E+00 0.0000000E+00 5.0199990E+01 1.7300000E+00 +0.0000000E+00 0.0000000E+00 5.2199970E+01 1.3420000E+00 +0.0000000E+00 0.0000000E+00 5.4199950E+01 9.5400000E-01 +0.0000000E+00 0.0000000E+00 5.5199940E+01 7.6000000E-01 +0.0000000E+00 0.0000000E+00 5.6199930E+01 5.7400000E-01 +0.0000000E+00 0.0000000E+00 5.7199920E+01 4.0400000E-01 +0.0000000E+00 0.0000000E+00 5.7699915E+01 3.1900000E-01 +0.0000000E+00 0.0000000E+00 5.8201140E+01 2.5300000E-01 +0.0000000E+00 0.0000000E+00 5.8699905E+01 2.1600000E-01 +0.0000000E+00 0.0000000E+00 5.9199900E+01 1.7800000E-01 +0.0000000E+00 0.0000000E+00 5.9699895E+01 1.4000000E-01 +0.0000000E+00 0.0000000E+00 6.0199890E+01 1.0100000E-01 +0.0000000E+00 0.0000000E+00 6.0699885E+01 6.2000000E-02 +0.0000000E+00 0.0000000E+00 6.1199880E+01 2.3000000E-02 +0.0000000E+00 0.0000000E+00 6.1500000E+01 0.0000000E+00 +---------------------- MESH PARAMETER ------------------------------------------ + 5 order_elem - Order of interpolation (basis) function (-) +---------------------- MATERIAL PARAMETER -------------------------------------- +"NRELOffshrBsline5MW_BeamDyn_Blade.dat" BldFile - Name of file containing properties for blade (quoted string) +---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- +False UsePitchAct - Whether a pitch actuator should be used (flag) + 200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] + 2E+07 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] + 500000 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] +---------------------- OUTPUTS ------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. + 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) + 1, 2, 3, 4, 5, 6 OutNd - Nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RootFxr, RootFyr, RootFzr" +"RootMxr, RootMyr, RootMzr" +"TipTDxr, TipTDyr, TipTDzr" +"TipRDxr, TipRDyr, TipRDzr" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn_Blade.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn_Blade.dat new file mode 100644 index 0000000000..b8724b9a23 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn_Blade.dat @@ -0,0 +1,756 @@ + ------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- + Test Format 1 + ---------------------- BLADE PARAMETERS -------------------------------------- +49 station_total - Number of blade input stations (-) + 1 damp_type - Damping type: 0: no damping; 1: damped + ---------------------- DAMPING COEFFICIENT------------------------------------ + mu1 mu2 mu3 mu4 mu5 mu6 + (-) (-) (-) (-) (-) (-) +1.0E-03 1.0E-03 1.0E-03 0.0014 0.0022 0.0022 + ---------------------- DISTRIBUTED PROPERTIES--------------------------------- + 0.000000 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.003250 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.019510 + 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.078950E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.955860E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.942490E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.431590E+09 + + 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.733630E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.066380E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.091520E+03 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.157900E+03 + + 0.035770 + 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.006723E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.949780E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.745590E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.993980E+09 + + 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.405500E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.047360E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.660900E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.013450E+03 + + 0.052030 + 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.867780E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.978880E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.528740E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.666590E+09 + + 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.400420E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.099750E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.738100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.973560E+03 + + 0.068290 + 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.607860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.485850E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.078240E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.474710E+09 + + 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.924960E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.730200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.485500E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521570E+03 + + 0.084550 + 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.491260E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.022060E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.229720E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.323540E+09 + + 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.502750E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.414900E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.567600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.098250E+03 + + 0.100810 + 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.971300E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 9.144700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.309540E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.907870E+09 + + 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.240540E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.937300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.005300E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.942600E+02 + + 0.117070 + 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.493950E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.063160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.528360E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.570360E+09 + + 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.006380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.471800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.516100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.987900E+02 + + 0.133350 + 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.034800E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.884440E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.980060E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.158260E+09 + + 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.820620E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.908400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.161200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.069600E+02 + + 0.149590 + 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.037290E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.009180E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.936840E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.002120E+09 + + 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.996550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.038600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.036000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.074600E+02 + + 0.165850 + 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.169720E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.167680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.691660E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.559000E+08 + + 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.263210E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.447000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.892400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.339400E+02 + + 0.182110 + 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.082350E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.271660E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.949460E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.722700E+08 + + 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.168200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.699000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.465700E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.164700E+02 + + 0.198370 + 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.085970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.081700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.386520E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.474900E+08 + + 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.061860E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.012800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.159100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.171900E+02 + + 0.214650 + 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.668340E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.244530E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.933740E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.488400E+08 + + 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.814200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.465600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.871100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.336700E+02 + + 0.230890 + 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.147760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.048960E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.568960E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.359200E+08 + + 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.528220E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.687100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.608400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.295500E+02 + + 0.247150 + 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.011580E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.948490E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.388650E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.113500E+08 + + 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.494770E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.537600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.485600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.023200E+02 + + 0.263410 + 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.882620E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.808020E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.271990E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.919400E+08 + + 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.465380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.362200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.403000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.765200E+02 + + 0.295950 + 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.613970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.501400E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.050050E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.610000E+08 + + 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.393330E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.981800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.246100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.227900E+02 + + 0.328460 + 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.357480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.244070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.828250E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.288200E+08 + + 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.300040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.620800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.094200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.715000E+02 + + 0.360980 + 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.146860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.995280E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.588710E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.007500E+08 + + 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.219900E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.350100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.436000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.293700E+02 + + 0.393500 + 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.944090E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.750760E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.361930E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.743800E+08 + + 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.138200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.085700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.024000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.888100E+02 + + 0.426020 + 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.632700E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.447140E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.102380E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.444700E+08 + + 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.947340E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.638700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.267000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.265400E+02 + + 0.458550 + 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.432400E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.139070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.758000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.199800E+08 + + 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.871200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.370600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.942000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.864800E+02 + + 0.491060 + 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.168760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.734240E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.813000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.119000E+07 + + 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.633430E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.964100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.734000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.337500E+02 + + 0.523580 + 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.047430E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.554870E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.347200E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.909000E+07 + + 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.532070E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.803400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.914000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.094800E+02 + + 0.556100 + 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.229500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.334030E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.089000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.745000E+07 + + 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.416660E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.624300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.216000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845900E+02 + + 0.588620 + 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.608200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.828730E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.145400E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.592000E+07 + + 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.206380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.348300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.733000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521600E+02 + + 0.621150 + 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.480300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.584100E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.386300E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.598000E+07 + + 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.002930E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.163000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.330000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.296000E+02 + + 0.653660 + 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.397000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.323360E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.758800E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.744000E+07 + + 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.794040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.798000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.960000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.079400E+02 + + 0.686180 + 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.311500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.183680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.260100E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.090000E+07 + + 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.650940E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.893000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.300000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.062300E+02 + + 0.718700 + 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.600100E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.020160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.072600E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.854000E+07 + + 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.544110E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.578000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.220000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.200000E+01 + + 0.751220 + 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.757500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.978100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.088000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.628000E+07 + + 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.389350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.996000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.190000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.515000E+01 + + 0.783760 + 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.288900E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.096100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.631000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.453000E+07 + + 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.295550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.141000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.577000E+01 + + 0.816260 + 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.440400E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.181900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.105000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.070000E+06 + + 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.072640E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.544000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.880000E+01 + + 0.848780 + 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.116000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.548700E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.948000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.060000E+06 + + 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.877600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.957000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.750000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.232000E+01 + + 0.881300 + 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.815200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.951200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.936000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.080000E+06 + + 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.024800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.409000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.210000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.630000E+01 + + 0.897560 + 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.602500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.537200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.467000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.090000E+06 + + 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 8.300100E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.012000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.930000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.205000E+01 + + 0.913820 + 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.092300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.047300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.041000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.750000E+06 + + 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.290600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.015000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.690000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.184000E+01 + + 0.930080 + 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.000800E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.814200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.652000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.330000E+06 + + 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.877200E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.853000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.490000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.002000E+01 + + 0.938210 + 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.224000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.617100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.384000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.940000E+06 + + 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.626400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.711000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.340000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845000E+01 + + 0.946360 + 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.323000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.588100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.963000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.240000E+06 + + 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.934000E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.155000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.100000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.265000E+01 + + 0.954470 + 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.332000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.378800E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.600000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.660000E+06 + + 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.591400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.770000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.066000E+01 + + 0.962600 + 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.453000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.187900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.283000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.130000E+06 + + 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.248400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.190000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.100000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E+00 + + 0.970730 + 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.690000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.016300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.008000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.640000E+06 + + 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.911400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.820000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.600000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.380000E+00 + + 0.978860 + 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.992000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.507000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.550000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.170000E+06 + + 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.581800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.570000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.200000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.990000E+00 + + 0.986990 + 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.131000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.426000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.600000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.580000E+06 + + 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.166900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.010000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.260000E+00 + + 0.995120 + 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.850000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.610000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 + + 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.145300E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.400000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.800000E-01 + + 1.000000 + 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.530000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.010000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.700000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.900000E+05 + + 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.031900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.800000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.000000E-01 + + + + + + + + + + + + diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Blade.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Blade.dat new file mode 100644 index 0000000000..cf5aa25dfe --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Blade.dat @@ -0,0 +1,83 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 +3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 +5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 +6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 +8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 +1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 +1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 +1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 +1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 +1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 +1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 +1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 +2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 +2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 +2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 +2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 +2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 +3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 +3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 +3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 +4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 +4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 +4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 +5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 +5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 +5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 +6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 +6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 +6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 +7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 +7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 +7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 +8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 +8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 +8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 +8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 +9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 +9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 +9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 +9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 +9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 +9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 +9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 +9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 +9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 +9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 +1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 + + diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_InflowWind.dat new file mode 100644 index 0000000000..b82ff07000 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_InflowWind.dat @@ -0,0 +1,71 @@ +------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- +Steady 8 m/s winds with no shear for FAST CertTests #20 and #25 +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 1 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) +False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 90 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 10 HWindSpeed - Horizontal windspeed (m/s) + 90 RefHt - Reference height for horizontal wind speed (m) + 0 PLexp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +"uniform.hh" Filename_Uni - Filename of time series data for uniform wind field. (-) + 90 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"Wind/90m_12mps_twr.bts" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 90 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 11.4 URef - Mean u-component wind speed at the reference height (m/s) + 0 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +================== LIDAR Parameters =========================================================================== +0 SensorType - Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed) +0 NumPulseGate - Number of lidar measurement gates (used when SensorType = 3) +30 PulseSpacing - Distance between range gates (m) (used when SensorType = 3) +0 NumBeam - Number of lidar measurement beams (0-5)(used when SensorType = 1) +-200 FocalDistanceX - Focal distance co-ordinates of the lidar beam in the x direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceY - Focal distance co-ordinates of the lidar beam in the y direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceZ - Focal distance co-ordinates of the lidar beam in the z direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0.0 0.0 0.0 RotorApexOffsetPos - Offset of the lidar from hub height (m) +17 URefLid - Reference average wind speed for the lidar[m/s] +0.25 MeasurementInterval - Time between each measurement [s] +False LidRadialVel - TRUE => return radial component, FALSE => return 'x' direction estimate +1 ConsiderHubMotion - Flag whether to consider the hub motion's impact on Lidar measurements +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp new file mode 100644 index 0000000000..ad085b6d0e --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp @@ -0,0 +1,26 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 600.0 +randomSeed 123 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 6.0 +numLegs 1.0 +towerFrequency 0.28 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat new file mode 100644 index 0000000000..9a8847ba0a --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -0,0 +1,106 @@ +------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False Buoyancy - Include buoyancy effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] +"unused" AA_InputFile - Aeroacoustics input file +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) + 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] + 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] + 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils/Cylinder2.dat" +"Airfoils/DU40_A17.dat" +"Airfoils/DU35_A17.dat" +"Airfoils/DU30_A17.dat" +"Airfoils/DU25_A17.dat" +"Airfoils/DU21_A17.dat" +"Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +0.0 VolHub - Hub volume (m^3) +0.0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] +0.0 VolNac - Nacelle volume (m^3) +0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail fin Aerodynamics ======================================================================== +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.000000E-01 0.0 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.000000E-01 0.0 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.000000E-01 0.0 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.000000E-01 0.0 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.000000E-01 0.0 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.000000E-01 0.0 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.000000E-01 0.0 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.000000E-01 0.0 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtFldFxh" +"RtFldFyh" +"RtFldFzh" +"RtFldMxh" +"RtFldMyh" +"RtFldMzh" +"RtVAvgxh" +"RtFldCp" +"RtFldCt" +"RtArea" +"RtSpeed" +"RtTSR" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat new file mode 100644 index 0000000000..8bd9386371 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -0,0 +1,160 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"DEFAULT" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +True YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 5 BlPitch(1) - Blade 1 initial pitch (degrees) + 5 BlPitch(2) - Blade 2 initial pitch (degrees) + 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 8 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 0 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 0 PtfmMass - Platform mass (kg) + 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"BldPitch1" - Blade 1 pitch angle +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction +"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat new file mode 100644 index 0000000000..664185cbd6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat @@ -0,0 +1,54 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline tower input properties. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 5.5908700E+03 6.1434300E+11 6.1434300E+11 +1.0000000E-01 5.2324300E+03 5.3482100E+11 5.3482100E+11 +2.0000000E-01 4.8857600E+03 4.6326700E+11 4.6326700E+11 +3.0000000E-01 4.5508700E+03 3.9913100E+11 3.9913100E+11 +4.0000000E-01 4.2277500E+03 3.4188300E+11 3.4188300E+11 +5.0000000E-01 3.9164100E+03 2.9101100E+11 2.9101100E+11 +6.0000000E-01 3.6168300E+03 2.4602700E+11 2.4602700E+11 +7.0000000E-01 3.3290300E+03 2.0645700E+11 2.0645700E+11 +8.0000000E-01 3.0530100E+03 1.7185100E+11 1.7185100E+11 +9.0000000E-01 2.7887500E+03 1.4177600E+11 1.4177600E+11 +1.0000000E+00 2.5362700E+03 1.1582000E+11 1.1582000E+11 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.7004 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 2.1963 TwFAM1Sh(3) - , coefficient of x^3 term + -5.6202 TwFAM1Sh(4) - , coefficient of x^4 term + 6.2275 TwFAM1Sh(5) - , coefficient of x^5 term + -2.504 TwFAM1Sh(6) - , coefficient of x^6 term + -70.5319 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -63.7623 TwFAM2Sh(3) - , coefficient of x^3 term + 289.737 TwFAM2Sh(4) - , coefficient of x^4 term + -176.513 TwFAM2Sh(5) - , coefficient of x^5 term + 22.0706 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.385 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -1.7684 TwSSM1Sh(3) - , coefficient of x^3 term + 3.0871 TwSSM1Sh(4) - , coefficient of x^4 term + -2.2395 TwSSM1Sh(5) - , coefficient of x^5 term + 0.5357 TwSSM1Sh(6) - , coefficient of x^6 term + -121.21 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + 184.415 TwSSM2Sh(3) - , coefficient of x^3 term + -224.904 TwSSM2Sh(4) - , coefficient of x^4 term + 298.536 TwSSM2Sh(5) - , coefficient of x^5 term + -135.838 TwSSM2Sh(6) - , coefficient of x^6 term + + diff --git a/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ServoDyn.dat new file mode 100644 index 0000000000..563cb7f181 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ServoDyn.dat @@ -0,0 +1,110 @@ +------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to .ech (flag) +"default" DT - Communication interval for controllers (s) (or "default") +---------------------- PITCH CONTROL ------------------------------------------- + 0 PCMode - Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 TPCOn - Time to enable active pitch control (s) [unused when PCMode=0] + 9999.9 TPitManS(1) - Time to start override pitch maneuver for blade 1 and end standard pitch control (s) + 9999.9 TPitManS(2) - Time to start override pitch maneuver for blade 2 and end standard pitch control (s) + 9999.9 TPitManS(3) - Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades] + 8 PitManRat(1) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s) + 8 PitManRat(2) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s) + 8 PitManRat(3) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades] + 20 BlPitchF(1) - Blade 1 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(2) - Blade 2 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(3) - Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades] +---------------------- GENERATOR AND TORQUE CONTROL ---------------------------- + 1 VSContrl - Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 2 GenModel - Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0] + 94.4 GenEff - Generator efficiency [ignored by the Thevenin and user-defined generator models] (%) +True GenTiStr - Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag) +True GenTiStp - Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag) + 10.0 SpdGenOn - Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False] + 0 TimGenOn - Time to turn on the generator for a startup (s) [used only when GenTiStr=True] + 9999.9 TimGenOf - Time to turn off the generator (s) [used only when GenTiStp=True] +---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL -------------------- + 1162.0 VS_RtGnSp - Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1] + 47403.0 VS_RtTq - Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1] + 0.025576 VS_Rgn2K - Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1] + 10.0 VS_SlPc - Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1] +---------------------- SIMPLE INDUCTION GENERATOR ------------------------------ + 9999.9 SIG_SlPc - Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_SySp - Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_RtTq - Rated torque (N-m) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_PORt - Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1] +---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR ----------------- + 9999.9 TEC_Freq - Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2] + 9998 TEC_NPol - Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SRes - Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RRes - Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_VLL - Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SLR - Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RLR - Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_MR - Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2] +---------------------- HIGH-SPEED SHAFT BRAKE ---------------------------------- + 0 HSSBrMode - HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 THSSBrDp - Time to initiate deployment of the HSS brake (s) + 0.6 HSSBrDT - Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1] + 28116.2 HSSBrTqF - Fully deployed HSS-brake torque (N-m) +---------------------- NACELLE-YAW CONTROL ------------------------------------- + 0 YCMode - Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 TYCOn - Time to enable active yaw control (s) [unused when YCMode=0] + 0 YawNeut - Neutral yaw position--yaw spring force is zero at this yaw (degrees) +9.02832E+09 YawSpr - Nacelle-yaw spring constant (N-m/rad) + 1.916E+07 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s)) + 9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s) + 2 YawManRat - Yaw maneuver rate (in absolute value) (deg/s) + 0 NacYawF - Final yaw angle for override yaw maneuvers (degrees) +---------------------- AERODYNAMIC FLOW CONTROL -------------------------------- + 0 AfCmode - Airfoil control mode {0: none, 1: cosine wave cycle, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 AfC_Mean - Mean level for cosine cycling or steady value (-) [used only with AfCmode==1] + 0 AfC_Amp - Amplitude for for cosine cycling of flap signal (-) [used only with AfCmode==1] + 0 AfC_Phase - Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1] +---------------------- STRUCTURAL CONTROL -------------------------------------- +0 NumBStC - Number of blade structural controllers (integer) +"unused" BStCfiles - Name of the files for blade structural controllers (quoted strings) [unused when NumBStC==0] +0 NumNStC - Number of nacelle structural controllers (integer) +"unused" NStCfiles - Name of the files for nacelle structural controllers (quoted strings) [unused when NumNStC==0] +0 NumTStC - Number of tower structural controllers (integer) +"unused" TStCfiles - Name of the files for tower structural controllers (quoted strings) [unused when NumTStC==0] +0 NumSStC - Number of substructure structural controllers (integer) +"unused" SStCfiles - Name of the files for substructure structural controllers (quoted strings) [unused when NumSStC==0] +---------------------- CABLE CONTROL ------------------------------------------- + 0 CCmode - Cable control mode {0: none, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) +---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface] +"../../ROSCO/install/lib/libdiscon.so" DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface] +"/home/of_rt/ROSCO/Examples/examples_out/17_ZeroMQ/DISCON_zmq.IN" DLL_InFile - Name of input file sent to the DLL (-) [used only with Bladed Interface] +"DISCON_zmq" DLL_ProcName - Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface] +"default" DLL_DT - Communication interval for dynamic library (s) (or "default") [used only with Bladed Interface] +false DLL_Ramp - Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface] + 9999.9 BPCutoff - Cutoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface] + 0 NacYaw_North - Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface] + 1 Ptch_Cntrl - Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface] + 0 Ptch_SetPnt - Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface] + 0 Ptch_Min - Record 6: Minimum pitch angle (deg) [used only with Bladed Interface] + 0 Ptch_Max - Record 7: Maximum pitch angle (deg) [used only with Bladed Interface] + 0 PtchRate_Min - Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface] + 0 PtchRate_Max - Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface] + 0 Gain_OM - Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface] + 0 GenSpd_MinOM - Record 17: Minimum generator speed (rpm) [used only with Bladed Interface] + 0 GenSpd_MaxOM - Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface] + 0 GenSpd_Dem - Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface] + 0 GenTrq_Dem - Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface] + 0 GenPwr_Dem - Record 13: Demanded power (W) [used only with Bladed Interface] +---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE ------------- + 0 DLL_NumTrq - Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface] + GenSpd_TLU GenTrq_TLU + (rpm) (Nm) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to .sum (flag) (currently unused) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"GenTq" - Electrical generator power and torque +"GenPwr" - Electrical generator power and torque +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templateDir/README.md b/zmq_coupling_tests/templatesDir/clean/README.md similarity index 100% rename from zmq_coupling_tests/templateDir/README.md rename to zmq_coupling_tests/templatesDir/clean/README.md diff --git a/zmq_coupling_tests/templateDir/uniform.hh b/zmq_coupling_tests/templatesDir/clean/uniform.hh similarity index 100% rename from zmq_coupling_tests/templateDir/uniform.hh rename to zmq_coupling_tests/templatesDir/clean/uniform.hh diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb index 4eca66c096..7eb7ba731b 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb @@ -32,12 +32,15 @@ "output_type": "stream", "text": [ "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n" + " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", + "Communication log will be saved at: ./zmq_logs/ \n", + "\n" ] } ], "source": [ - "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False)" + "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", + " live_plot=False, name='OFZMQ_test01')" ] }, { @@ -46,17065 +49,80 @@ "metadata": {}, "outputs": [ { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "mode": "lines", - "name": " Wind1VelX", - "type": "scatter", - "xaxis": "x", - "y": [ - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10 - ], - "yaxis": "y" - }, - { - "mode": "lines", - "name": " Azimuth", - "type": "scatter", - "xaxis": "x2", - "y": [ - 0, - 0.240044, - 0.480173, - 0.72038, - 0.960654, - 1.200982, - 1.44135, - 1.681741, - 1.922138, - 2.162521, - 2.402871, - 2.643166, - 2.883388, - 3.123516, - 3.363529, - 3.60341, - 3.843142, - 4.082709, - 4.322096, - 4.561293, - 4.800289, - 5.039079, - 5.277657, - 5.516023, - 5.754177, - 5.992123, - 6.229869, - 6.467424, - 6.7048, - 6.942012, - 7.179077, - 7.416014, - 7.652844, - 7.889588, - 8.126271, - 8.362917, - 8.599551, - 8.836198, - 9.072884, - 9.309634, - 9.546471, - 9.783418, - 10.020499, - 10.257731, - 10.495135, - 10.732726, - 10.970518, - 11.208522, - 11.446749, - 11.685204, - 11.923891, - 12.162812, - 12.401966, - 12.641348, - 12.880954, - 13.120774, - 13.360798, - 13.601015, - 13.841411, - 14.08197, - 14.322677, - 14.563514, - 14.804464, - 15.045509, - 15.286631, - 15.527812, - 15.769035, - 16.010284, - 16.251543, - 16.492798, - 16.734036, - 16.975246, - 17.216416, - 17.45754, - 17.698611, - 17.939624, - 18.180577, - 18.421467, - 18.662297, - 18.903068, - 19.143785, - 19.384453, - 19.625078, - 19.865669, - 20.106235, - 20.346784, - 20.587328, - 20.827877, - 21.068442, - 21.309034, - 21.549663, - 21.79034, - 22.031074, - 22.271873, - 22.512747, - 22.753702, - 22.994743, - 23.235874, - 23.4771, - 23.718422, - 23.959839, - 24.20135, - 24.442953, - 24.684644, - 24.926417, - 25.168264, - 25.410179, - 25.652152, - 25.894173, - 26.136232, - 26.378316, - 26.620415, - 26.862516, - 27.104606, - 27.346675, - 27.588709, - 27.830699, - 28.072632, - 28.3145, - 28.556293, - 28.798004, - 29.039626, - 29.281154, - 29.522583, - 29.763913, - 30.005141, - 30.246269, - 30.487298, - 30.728234, - 30.96908, - 31.209843, - 31.450532, - 31.691156, - 31.931724, - 32.17225, - 32.412743, - 32.653218, - 32.893687, - 33.134165, - 33.374664, - 33.6152, - 33.855785, - 34.096433, - 34.337157, - 34.577968, - 34.818878, - 35.059898, - 35.301038, - 35.542305, - 35.783707, - 36.02525, - 36.266939, - 36.508777, - 36.750767, - 36.99291, - 37.235206, - 37.477655, - 37.720253, - 37.962998, - 38.205885, - 38.44891, - 38.692068, - 38.935351, - 39.178755, - 39.422271, - 39.665893, - 39.909614, - 40.153427, - 40.397326, - 40.641304, - 40.885354, - 41.129472, - 41.373652, - 41.61789, - 41.862183, - 42.106527, - 42.35092, - 42.595361, - 42.839849, - 43.084385, - 43.328969, - 43.573603, - 43.81829, - 44.063031, - 44.307832, - 44.552694, - 44.797623, - 45.042624, - 45.287699, - 45.532855, - 45.778096, - 46.023427, - 46.26885, - 46.514372, - 46.759994, - 47.005721, - 47.251554, - 47.497495, - 47.743545, - 47.989705, - 48.235974, - 48.482352, - 48.728835, - 48.975421, - 49.222106, - 49.468887, - 49.715756, - 49.96271, - 50.209741, - 50.456842, - 50.704005, - 50.951222, - 51.198486, - 51.445787, - 51.693116, - 51.940465, - 52.187826, - 52.435189, - 52.682547, - 52.929891, - 53.177214, - 53.42451, - 53.671771, - 53.918992, - 54.166169, - 54.413296, - 54.660371, - 54.907392, - 55.154355, - 55.401261, - 55.64811, - 55.894902, - 56.141638, - 56.388322, - 56.634957, - 56.881545, - 57.128091, - 57.3746, - 57.621076, - 57.867526, - 58.113955, - 58.360369, - 58.606773, - 58.853173, - 59.099577, - 59.345988, - 59.592414, - 59.838858, - 60.085326, - 60.331822, - 60.578351, - 60.824916, - 61.071521, - 61.318167, - 61.564857, - 61.811593, - 62.058376, - 62.305206, - 62.552084, - 62.79901, - 63.045982, - 63.293001, - 63.540065, - 63.787172, - 64.034322, - 64.281512, - 64.52874, - 64.776006, - 65.023306, - 65.270641, - 65.518008, - 65.765405, - 66.012833, - 66.260291, - 66.507778, - 66.755293, - 67.002839, - 67.250414, - 67.498021, - 67.745661, - 67.993336, - 68.241049, - 68.488801, - 68.736595, - 68.984436, - 69.232326, - 69.480269, - 69.728269, - 69.976329, - 70.224455, - 70.472649, - 70.720916, - 70.969259, - 71.217682, - 71.466189, - 71.714783, - 71.963466, - 72.212242, - 72.461111, - 72.710076, - 72.959139, - 73.208298, - 73.457556, - 73.706912, - 73.956364, - 74.205912, - 74.455553, - 74.705285, - 74.955105, - 75.20501, - 75.454997, - 75.705061, - 75.955198, - 76.205405, - 76.455675, - 76.706005, - 76.956389, - 77.206822, - 77.457299, - 77.707815, - 77.958365, - 78.208945, - 78.459549, - 78.710173, - 78.960814, - 79.211466, - 79.462128, - 79.712795, - 79.963465, - 80.214136, - 80.464805, - 80.715471, - 80.966132, - 81.216789, - 81.467439, - 81.718084, - 81.968723, - 82.219356, - 82.469986, - 82.720612, - 82.971235, - 83.221858, - 83.472481, - 83.723107, - 83.973736, - 84.224371, - 84.475013, - 84.725664, - 84.976326, - 85.226999, - 85.477685, - 85.728386, - 85.979102, - 86.229835, - 86.480584, - 86.731351, - 86.982136, - 87.232939, - 87.48376, - 87.734598, - 87.985455, - 88.236328, - 88.487219, - 88.738125, - 88.989047, - 89.239984, - 89.490936, - 89.741901, - 89.99288, - 90.243871, - 90.494875, - 90.745891, - 90.99692, - 91.247962, - 91.499016, - 91.750084, - 92.001167, - 92.252265, - 92.50338, - 92.754514, - 93.005669, - 93.256845, - 93.508047, - 93.759276, - 94.010536, - 94.261828, - 94.513157, - 94.764525, - 95.015936, - 95.267393, - 95.5189, - 95.770461, - 96.022078, - 96.273756, - 96.525498, - 96.777307, - 97.029187, - 97.28114, - 97.53317, - 97.785279, - 98.03747, - 98.289745, - 98.542105, - 98.794553, - 99.04709, - 99.299717, - 99.552434, - 99.805243, - 100.058143, - 100.311135, - 100.564218, - 100.817391, - 101.070654, - 101.324005, - 101.577443, - 101.830966, - 102.084574, - 102.338263, - 102.592033, - 102.84588, - 103.099804, - 103.353801, - 103.607869, - 103.862008, - 104.116213, - 104.370484, - 104.624818, - 104.879213, - 105.133668, - 105.388181, - 105.64275, - 105.897373, - 106.15205, - 106.40678, - 106.66156, - 106.916391, - 107.171271, - 107.426199, - 107.681176, - 107.936201, - 108.191272, - 108.446391, - 108.701556, - 108.956767, - 109.212024, - 109.467327, - 109.722675, - 109.978068, - 110.233507, - 110.48899, - 110.744517, - 111.000088, - 111.255701, - 111.511358, - 111.767056, - 112.022795, - 112.278575, - 112.534393, - 112.79025, - 113.046144, - 113.302073, - 113.558038, - 113.814035, - 114.070065, - 114.326126, - 114.582216, - 114.838334, - 115.09448, - 115.350651, - 115.606846, - 115.863065, - 116.119307, - 116.375569, - 116.631853, - 116.888156, - 117.144479, - 117.400822, - 117.657183, - 117.913563, - 118.169962, - 118.42638, - 118.682819, - 118.939277, - 119.195757, - 119.45226, - 119.708785, - 119.965336, - 120.221912, - 120.478517, - 120.735151, - 120.991816, - 121.248514, - 121.505247, - 121.762017, - 122.018826, - 122.275677, - 122.53257, - 122.789509, - 123.046496, - 123.303531, - 123.560618, - 123.817758, - 124.074953, - 124.332204, - 124.589513, - 124.846881, - 125.104311, - 125.361802, - 125.619356, - 125.876974, - 126.134657, - 126.392405, - 126.650219, - 126.9081, - 127.166046, - 127.42406, - 127.68214, - 127.940287, - 128.198501, - 128.456781, - 128.715127, - 128.973539, - 129.232017, - 129.490559, - 129.749166, - 130.007837, - 130.266572, - 130.52537, - 130.784231, - 131.043154, - 131.302139, - 131.561186, - 131.820293, - 132.079461, - 132.33869, - 132.597978, - 132.857327, - 133.116734, - 133.376201, - 133.635727, - 133.895311, - 134.154953, - 134.414654, - 134.674412, - 134.934227, - 135.1941, - 135.454029, - 135.714015, - 135.974056, - 136.234152, - 136.494303, - 136.754507, - 137.014765, - 137.275075, - 137.535437, - 137.795849, - 138.056311, - 138.316821, - 138.577378, - 138.837982, - 139.09863, - 139.359322, - 139.620056, - 139.88083, - 140.141644, - 140.402495, - 140.663383, - 140.924305, - 141.185261, - 141.446248, - 141.707265, - 141.968311, - 142.229385, - 142.490484, - 142.751608, - 143.012756, - 143.273927, - 143.535118, - 143.796331, - 144.057563, - 144.318814, - 144.580083, - 144.841371, - 145.102676, - 145.363998, - 145.625337, - 145.886693, - 146.148067, - 146.409458, - 146.670867, - 146.932294, - 147.19374, - 147.455205, - 147.71669, - 147.978196, - 148.239724, - 148.501274, - 148.762847, - 149.024444, - 149.286067, - 149.547716, - 149.809393, - 150.071098, - 150.332832, - 150.594597, - 150.856393, - 151.118221, - 151.380083, - 151.64198, - 151.903911, - 152.165879, - 152.427883, - 152.689926, - 152.952007, - 153.214127, - 153.476287, - 153.738487, - 154.000729, - 154.263012, - 154.525338, - 154.787707, - 155.050118, - 155.312574, - 155.575074, - 155.837619, - 156.100208, - 156.362844, - 156.625526, - 156.888254, - 157.151029, - 157.413852, - 157.676723, - 157.939642, - 158.20261, - 158.465628, - 158.728695, - 158.991812, - 159.254981, - 159.5182, - 159.781471, - 160.044794, - 160.30817, - 160.571598, - 160.83508, - 161.098615, - 161.362205, - 161.625848, - 161.889546, - 162.153298, - 162.417104, - 162.680966, - 162.944882, - 163.208852, - 163.472877, - 163.736956, - 164.001088, - 164.265274, - 164.529513, - 164.793805, - 165.058148, - 165.322542, - 165.586987, - 165.851481, - 166.116024, - 166.380615, - 166.645252, - 166.909935, - 167.174663, - 167.439434, - 167.704247, - 167.969101, - 168.233995, - 168.498927, - 168.763897, - 169.028903, - 169.293943, - 169.559017, - 169.824122, - 170.089259, - 170.354426, - 170.61962, - 170.884843, - 171.150091, - 171.415365, - 171.680663, - 171.945984, - 172.211327, - 172.476692, - 172.742077, - 173.007482, - 173.272906, - 173.538349, - 173.803809, - 174.069286, - 174.334781, - 174.600291, - 174.865818, - 175.13136, - 175.396917, - 175.662489, - 175.928076, - 176.193678, - 176.459294, - 176.724924, - 176.990568, - 177.256225, - 177.521896, - 177.787581, - 178.05328, - 178.318992, - 178.584718, - 178.850458, - 179.116212, - 179.38198, - 179.647763, - 179.91356, - 180.179372, - 180.445198, - 180.71104, - 180.976897, - 181.24277, - 181.508658, - 181.774563, - 182.040484, - 182.306421, - 182.572376, - 182.838348, - 183.104338, - 183.370347, - 183.636374, - 183.90242, - 184.168486, - 184.434572, - 184.700679, - 184.966808, - 185.232958, - 185.499131, - 185.765327, - 186.031547, - 186.297792, - 186.564062, - 186.830358, - 187.09668, - 187.363031, - 187.629409, - 187.895817, - 188.162254, - 188.428722, - 188.695221, - 188.961752, - 189.228315, - 189.494912, - 189.761542, - 190.028207, - 190.294906, - 190.561641, - 190.828412, - 191.095219, - 191.362063, - 191.628943, - 191.895861, - 192.162816, - 192.429809, - 192.69684, - 192.963909, - 193.231015, - 193.498159, - 193.765341, - 194.03256, - 194.299817, - 194.56711, - 194.834441, - 195.101808, - 195.369211, - 195.636649, - 195.904123, - 196.171632, - 196.439174, - 196.706751, - 196.97436, - 197.242002, - 197.509676, - 197.77738, - 198.045116, - 198.312881, - 198.580675, - 198.848498, - 199.116348, - 199.384226, - 199.65213, - 199.920059, - 200.188013, - 200.455992, - 200.723994, - 200.992019, - 201.260067, - 201.528135, - 201.796225, - 202.064336, - 202.332466, - 202.600615, - 202.868783, - 203.136969, - 203.405173, - 203.673394, - 203.941631, - 204.209884, - 204.478153, - 204.746438, - 205.014736, - 205.283049, - 205.551376, - 205.819717, - 206.088071, - 206.356437, - 206.624816, - 206.893206, - 207.161609, - 207.430023, - 207.698448, - 207.966884, - 208.235331, - 208.503788, - 208.772255, - 209.040733, - 209.30922, - 209.577717, - 209.846224, - 210.114741, - 210.383267, - 210.651803, - 210.920349, - 211.188905, - 211.457471, - 211.726047, - 211.994634, - 212.263231, - 212.531839, - 212.800459, - 213.069091, - 213.337734, - 213.606391, - 213.87506, - 214.143743, - 214.412441, - 214.681153, - 214.94988, - 215.218624, - 215.487384, - 215.756161, - 216.024957, - 216.293771, - 216.562605, - 216.831459, - 217.100334, - 217.36923, - 217.638149, - 217.907091, - 218.176057, - 218.445047, - 218.714062, - 218.983104, - 219.252172, - 219.521267, - 219.79039, - 220.059541, - 220.328722, - 220.597932, - 220.867173, - 221.136444, - 221.405747, - 221.675081, - 221.944448, - 222.213847, - 222.483279, - 222.752744, - 223.022243, - 223.291776, - 223.561343, - 223.830945, - 224.100581, - 224.370252, - 224.639958, - 224.909699, - 225.179476, - 225.449287, - 225.719134, - 225.989016, - 226.258934, - 226.528886, - 226.798874, - 227.068898, - 227.338956, - 227.609049, - 227.879177, - 228.14934, - 228.419538, - 228.68977, - 228.960036, - 229.230336, - 229.50067, - 229.771038, - 230.041439, - 230.311873, - 230.58234, - 230.85284, - 231.123372, - 231.393936, - 231.664531, - 231.935158, - 232.205815, - 232.476503, - 232.747221, - 233.017968, - 233.288745, - 233.559551, - 233.830385, - 234.101248, - 234.372139, - 234.643057, - 234.914002, - 235.184975, - 235.455973, - 235.726998, - 235.998048, - 236.269124, - 236.540224, - 236.811349, - 237.082499, - 237.353672, - 237.62487, - 237.89609, - 238.167334, - 238.4386, - 238.709889, - 238.981201, - 239.252534, - 239.52389, - 239.795267, - 240.066666, - 240.338086, - 240.609528, - 240.880991, - 241.152475, - 241.42398, - 241.695507, - 241.967054, - 242.238623, - 242.510214, - 242.781825, - 243.053458, - 243.325112, - 243.596788, - 243.868486, - 244.140206, - 244.411948, - 244.683712, - 244.955499, - 245.227309, - 245.499142, - 245.770998, - 246.042877, - 246.314781, - 246.586709, - 246.858661, - 247.130637, - 247.402639, - 247.674666, - 247.946719, - 248.218798, - 248.490903, - 248.763034, - 249.035193, - 249.307378, - 249.579592, - 249.851832, - 250.124101, - 250.396398, - 250.668724, - 250.941079, - 251.213462, - 251.485875, - 251.758318, - 252.030791, - 252.303293, - 252.575826, - 252.848389, - 253.120983, - 253.393608, - 253.666264, - 253.938951, - 254.21167, - 254.48442, - 254.757202, - 255.030015, - 255.302861, - 255.575738, - 255.848648, - 256.12159, - 256.394564, - 256.667571, - 256.94061, - 257.213681, - 257.486785, - 257.759922, - 258.033091, - 258.306292, - 258.579526, - 258.852793, - 259.126091, - 259.399422, - 259.672786, - 259.946181, - 260.219609, - 260.493068, - 260.766559, - 261.040081, - 261.313635, - 261.587221, - 261.860837, - 262.134484, - 262.408162, - 262.681871, - 262.955609, - 263.229378, - 263.503176, - 263.777004, - 264.050861, - 264.324747, - 264.598661, - 264.872605, - 265.146576, - 265.420575, - 265.694602, - 265.968657, - 266.242739, - 266.516847, - 266.790983, - 267.065145, - 267.339333, - 267.613547, - 267.887788, - 268.162054, - 268.436345, - 268.710663, - 268.985005, - 269.259373, - 269.533766, - 269.808183, - 270.082626, - 270.357094, - 270.631586, - 270.906104, - 271.180646, - 271.455213, - 271.729805, - 272.004422, - 272.279064, - 272.553731, - 272.828423, - 273.10314, - 273.377883, - 273.652651, - 273.927445, - 274.202265, - 274.477111, - 274.751984, - 275.026882, - 275.301808, - 275.57676, - 275.851739, - 276.126746, - 276.40178, - 276.676843, - 276.951933, - 277.227052, - 277.502199, - 277.777376, - 278.052581, - 278.327817, - 278.603082, - 278.878377, - 279.153703, - 279.429059, - 279.704446, - 279.979865, - 280.255315, - 280.530798, - 280.806312, - 281.081859, - 281.357439, - 281.633052, - 281.908698, - 282.184378, - 282.460092, - 282.73584, - 283.011623, - 283.28744, - 283.563292, - 283.839179, - 284.115102, - 284.39106, - 284.667054, - 284.943084, - 285.21915, - 285.495252, - 285.771391, - 286.047566, - 286.323778, - 286.600027, - 286.876313, - 287.152635, - 287.428995, - 287.705391, - 287.981824, - 288.258295, - 288.534802, - 288.811346, - 289.087927, - 289.364545, - 289.641199, - 289.91789, - 290.194618, - 290.471381, - 290.748181, - 291.025016, - 291.301888, - 291.578794, - 291.855736, - 292.132713, - 292.409724, - 292.68677, - 292.963849, - 293.240963, - 293.51811, - 293.79529, - 294.072502, - 294.349747, - 294.627024, - 294.904333, - 295.181673, - 295.459043, - 295.736444, - 296.013875, - 296.291335, - 296.568824, - 296.846342, - 297.123888, - 297.401462, - 297.679063, - 297.956691, - 298.234345, - 298.512026, - 298.789732, - 299.067462, - 299.345218, - 299.622997, - 299.900801, - 300.178627, - 300.456477, - 300.734348, - 301.012242, - 301.290157, - 301.568094, - 301.846051, - 302.124029, - 302.402027, - 302.680044, - 302.95808, - 303.236136, - 303.51421, - 303.792302, - 304.070412, - 304.34854, - 304.626685, - 304.904847, - 305.183026, - 305.461222, - 305.739434, - 306.017662, - 306.295906, - 306.574166, - 306.852442, - 307.130733, - 307.40904, - 307.687363, - 307.965701, - 308.244054, - 308.522423, - 308.800807, - 309.079207, - 309.357623, - 309.636054, - 309.914501, - 310.192965, - 310.471444, - 310.74994, - 311.028453, - 311.306983, - 311.58553, - 311.864094, - 312.142676, - 312.421276, - 312.699895, - 312.978532, - 313.257188, - 313.535863, - 313.814558, - 314.093274, - 314.372009, - 314.650765, - 314.929543, - 315.208341, - 315.487161, - 315.766004, - 316.044868, - 316.323755, - 316.602665, - 316.881598, - 317.160555, - 317.439535, - 317.718539, - 317.997567, - 318.276619, - 318.555696, - 318.834797, - 319.113923, - 319.393074, - 319.67225, - 319.951451, - 320.230678, - 320.509929, - 320.789207, - 321.068509, - 321.347837, - 321.627191, - 321.90657, - 322.185975, - 322.465406, - 322.744862, - 323.024344, - 323.303851, - 323.583384, - 323.862943, - 324.142527, - 324.422137, - 324.701772, - 324.981432, - 325.261118, - 325.540829, - 325.820565, - 326.100326, - 326.380112, - 326.659923, - 326.939759, - 327.219619, - 327.499504, - 327.779413, - 328.059347, - 328.339304, - 328.619285, - 328.89929, - 329.179318, - 329.459369, - 329.739443, - 330.01954, - 330.29966, - 330.579801, - 330.859965, - 331.140151, - 331.420357, - 331.700585, - 331.980834, - 332.261104, - 332.541394, - 332.821704, - 333.102033, - 333.382382, - 333.662751, - 333.943138, - 334.223543, - 334.503967, - 334.784409, - 335.064869, - 335.345346, - 335.625841, - 335.906352, - 336.18688, - 336.467424, - 336.747985, - 337.028561, - 337.309154, - 337.589762, - 337.870386, - 338.151025, - 338.431679, - 338.712349, - 338.993034, - 339.273734, - 339.554448, - 339.835178, - 340.115923, - 340.396682, - 340.677457, - 340.958246, - 341.23905, - 341.51987, - 341.800704, - 342.081553, - 342.362417, - 342.643297, - 342.924191, - 343.205101, - 343.486027, - 343.766968, - 344.047924, - 344.328896, - 344.609884, - 344.890888, - 345.171907, - 345.452943, - 345.733995, - 346.015063, - 346.296148, - 346.577249, - 346.858367, - 347.139502, - 347.420653, - 347.701822, - 347.983007, - 348.26421, - 348.545431, - 348.826668, - 349.107924, - 349.389197, - 349.670487, - 349.951796, - 350.233123, - 350.514468, - 350.795832, - 351.077214, - 351.358614, - 351.640034, - 351.921472, - 352.202929, - 352.484405, - 352.7659, - 353.047415, - 353.328948, - 353.610502, - 353.892075, - 354.173667, - 354.455279, - 354.736912, - 355.018563, - 355.300235, - 355.581927, - 355.863639, - 356.14537, - 356.427122, - 356.708894, - 356.990685, - 357.272497, - 357.554329, - 357.83618, - 358.118052, - 358.399943, - 358.681854, - 358.963784, - 359.245735, - 359.527704, - 359.809693, - 0.091701, - 0.373728, - 0.655774, - 0.937839, - 1.219922, - 1.502024, - 1.784144, - 2.066282, - 2.348439, - 2.630612, - 2.912804, - 3.195012, - 3.477238, - 3.759481, - 4.041741, - 4.324017, - 4.60631, - 4.888619, - 5.170944, - 5.453285, - 5.735641, - 6.018013, - 6.300401, - 6.582803, - 6.865221, - 7.147654, - 7.430101, - 7.712563, - 7.995039, - 8.27753, - 8.560035, - 8.842554, - 9.125087, - 9.407635, - 9.690195, - 9.97277, - 10.255359, - 10.537961, - 10.820576, - 11.103205, - 11.385847, - 11.668503, - 11.951172, - 12.233854, - 12.516549, - 12.799258, - 13.08198, - 13.364714, - 13.647462, - 13.930223, - 14.212997, - 14.495784, - 14.778583, - 15.061396, - 15.344222, - 15.627061, - 15.909912, - 16.192777, - 16.475655, - 16.758545, - 17.041449, - 17.324366, - 17.607296, - 17.890239, - 18.173195, - 18.456164, - 18.739146, - 19.022142, - 19.305151, - 19.588173, - 19.871209, - 20.154259, - 20.437322, - 20.720398, - 21.003489, - 21.286593, - 21.569711, - 21.852843, - 22.13599, - 22.41915, - 22.702325, - 22.985514, - 23.268718, - 23.551936, - 23.835169, - 24.118417, - 24.401679, - 24.684957, - 24.96825, - 25.251558, - 25.534881, - 25.818219, - 26.101573, - 26.384943, - 26.668328, - 26.951729, - 27.235146, - 27.518578, - 27.802027, - 28.085491, - 28.368972, - 28.652468, - 28.935981, - 29.21951, - 29.503056, - 29.786617, - 30.070195, - 30.353789, - 30.637399, - 30.921026, - 31.204669, - 31.488329, - 31.772005, - 32.055697, - 32.339405, - 32.62313, - 32.906871, - 33.190629, - 33.474403, - 33.758192, - 34.041999, - 34.325821, - 34.609659, - 34.893514, - 35.177384, - 35.461271, - 35.745173, - 36.029092, - 36.313026, - 36.596977, - 36.880943, - 37.164925, - 37.448923, - 37.732936, - 38.016966, - 38.301011, - 38.585071, - 38.869148, - 39.15324, - 39.437347, - 39.72147, - 40.005609, - 40.289764, - 40.573934, - 40.858119, - 41.14232, - 41.426537, - 41.71077, - 41.995017, - 42.279281, - 42.56356, - 42.847855, - 43.132166, - 43.416492, - 43.700834, - 43.985192, - 44.269565, - 44.553955, - 44.83836, - 45.122781, - 45.407218, - 45.691672, - 45.976141, - 46.260627, - 46.545128, - 46.829646, - 47.114181, - 47.398732, - 47.683299, - 47.967883, - 48.252484, - 48.537102, - 48.821736, - 49.106387, - 49.391056, - 49.675742, - 49.960445, - 50.245165, - 50.529903, - 50.814658, - 51.099432, - 51.384223, - 51.669032, - 51.953859, - 52.238704, - 52.523568, - 52.808449, - 53.09335, - 53.378269, - 53.663206, - 53.948163, - 54.233138, - 54.518132, - 54.803145, - 55.088177, - 55.373229, - 55.6583, - 55.94339, - 56.228499, - 56.513628, - 56.798777, - 57.083945, - 57.369132, - 57.654339, - 57.939566, - 58.224812, - 58.510078, - 58.795363, - 59.080668, - 59.365993, - 59.651337, - 59.936701, - 60.222083, - 60.507486, - 60.792907, - 61.078348, - 61.363808, - 61.649287, - 61.934786, - 62.220302, - 62.505838, - 62.791392, - 63.076965, - 63.362556, - 63.648166, - 63.933793, - 64.219439, - 64.505102, - 64.790783, - 65.076481, - 65.362196, - 65.647928, - 65.933677, - 66.219443, - 66.505225, - 66.791024, - 67.076839, - 67.362669, - 67.648515, - 67.934377, - 68.220254, - 68.506146, - 68.792054, - 69.077976, - 69.363913, - 69.649865, - 69.935831, - 70.221811, - 70.507806, - 70.793814, - 71.079837, - 71.365874, - 71.651925, - 71.937989, - 72.224068, - 72.51016, - 72.796266, - 73.082385, - 73.368518, - 73.654665, - 73.940825, - 74.226999, - 74.513186, - 74.799387, - 75.085602, - 75.37183, - 75.658071, - 75.944326, - 76.230595, - 76.516877, - 76.803173, - 77.089482, - 77.375805, - 77.662141, - 77.948491, - 78.234854, - 78.521231, - 78.807621, - 79.094025, - 79.380442, - 79.666873, - 79.953317, - 80.239775, - 80.526246, - 80.812731, - 81.099229, - 81.385742, - 81.672268, - 81.958807, - 82.245361, - 82.531928, - 82.81851, - 83.105105, - 83.391715, - 83.678339, - 83.964977, - 84.25163, - 84.538298, - 84.824981, - 85.111678, - 85.398391, - 85.68512, - 85.971863, - 86.258623, - 86.545399, - 86.832191, - 87.118999, - 87.405824, - 87.692665, - 87.979524, - 88.2664, - 88.553294, - 88.840205, - 89.127134, - 89.414081, - 89.701046, - 89.98803, - 90.275032, - 90.562053, - 90.849093, - 91.136153, - 91.423231, - 91.710329, - 91.997447, - 92.284584, - 92.571741, - 92.858918, - 93.146115, - 93.433333, - 93.72057, - 94.007828, - 94.295106, - 94.582404, - 94.869723, - 95.157063, - 95.444423, - 95.731803, - 96.019205, - 96.306627, - 96.59407, - 96.881533, - 97.169017, - 97.456522, - 97.744048, - 98.031595, - 98.319162, - 98.60675, - 98.89436, - 99.18199, - 99.469641, - 99.757313, - 100.045006, - 100.33272, - 100.620454, - 100.90821, - 101.195987, - 101.483785, - 101.771605, - 102.059445, - 102.347306, - 102.635189, - 102.923092, - 103.211017, - 103.498963, - 103.78693, - 104.074919, - 104.362928, - 104.650959, - 104.93901, - 105.227083, - 105.515177, - 105.803292, - 106.091427, - 106.379584, - 106.667762, - 106.95596, - 107.244179, - 107.532419, - 107.82068, - 108.10896, - 108.397262, - 108.685583, - 108.973925, - 109.262287, - 109.550669, - 109.839071, - 110.127492, - 110.415934, - 110.704395, - 110.992875, - 111.281375, - 111.569894, - 111.858432, - 112.146989, - 112.435565, - 112.72416, - 113.012774, - 113.301406, - 113.590057, - 113.878726, - 114.167414, - 114.45612, - 114.744844, - 115.033586, - 115.322346, - 115.611125, - 115.899921, - 116.188735, - 116.477566, - 116.766416, - 117.055283, - 117.344167, - 117.633069, - 117.921989, - 118.210926, - 118.49988, - 118.788851, - 119.07784, - 119.366846, - 119.655868, - 119.944908, - 120.233964, - 120.523038, - 120.812128, - 121.101235, - 121.390358, - 121.679498, - 121.968654, - 122.257826, - 122.547015, - 122.83622, - 123.125441, - 123.414678, - 123.703931, - 123.993199, - 124.282483, - 124.571783, - 124.861098, - 125.150429, - 125.439775, - 125.729136, - 126.018512, - 126.307903, - 126.597309, - 126.88673, - 127.176166, - 127.465616, - 127.755081, - 128.044561, - 128.334055, - 128.623563, - 128.913085, - 129.202622, - 129.492173, - 129.781738, - 130.071317, - 130.36091, - 130.650517, - 130.940138, - 131.229772, - 131.519421, - 131.809083, - 132.098758, - 132.388448, - 132.678151, - 132.967867, - 133.257597, - 133.547341, - 133.837097, - 134.126868, - 134.416651, - 134.706448, - 134.996258, - 135.286081, - 135.575918, - 135.865767, - 136.15563, - 136.445505, - 136.735394, - 137.025295, - 137.315209, - 137.605136, - 137.895076, - 138.185029, - 138.474994, - 138.764972, - 139.054962, - 139.344965, - 139.634981, - 139.925009, - 140.21505, - 140.505103, - 140.795168, - 141.085246, - 141.375336, - 141.665438, - 141.955553, - 142.24568, - 142.53582, - 142.825972, - 143.116136, - 143.406312, - 143.696501, - 143.986702, - 144.276915, - 144.567141, - 144.857379, - 145.147629, - 145.437892, - 145.728167, - 146.018455, - 146.308754, - 146.599067, - 146.889392, - 147.179729, - 147.470079, - 147.760441, - 148.050816, - 148.341203, - 148.631603, - 148.922015, - 149.21244, - 149.502878, - 149.793328, - 150.083791, - 150.374266, - 150.664754, - 150.955255, - 151.245768, - 151.536293, - 151.826832, - 152.117383, - 152.407946, - 152.698522, - 152.98911, - 153.279711, - 153.570324, - 153.86095, - 154.151588, - 154.442238, - 154.732901, - 155.023576, - 155.314263, - 155.604963, - 155.895674, - 156.186398, - 156.477134, - 156.767882, - 157.058642, - 157.349413, - 157.640197, - 157.930992, - 158.221799, - 158.512618, - 158.803449, - 159.094291, - 159.385145, - 159.676011, - 159.966888, - 160.257776, - 160.548676, - 160.839587, - 161.130509, - 161.421443, - 161.712388, - 162.003344, - 162.294311, - 162.585289, - 162.876278, - 163.167278, - 163.458288, - 163.74931, - 164.040342, - 164.331385, - 164.622438, - 164.913502, - 165.204577, - 165.495661, - 165.786756, - 166.077862, - 166.368977, - 166.660103, - 166.951238, - 167.242383, - 167.533538, - 167.824703, - 168.115878, - 168.407062, - 168.698255, - 168.989458, - 169.28067, - 169.571891, - 169.863121, - 170.154361, - 170.445609, - 170.736866, - 171.028132, - 171.319407, - 171.61069, - 171.901982, - 172.193282, - 172.48459, - 172.775907, - 173.067232, - 173.358565, - 173.649906, - 173.941255, - 174.232612, - 174.523977, - 174.81535, - 175.106731, - 175.398119, - 175.689514, - 175.980918, - 176.272329, - 176.563747, - 176.855173, - 177.146606, - 177.438046, - 177.729494, - 178.020949, - 178.312411, - 178.603881, - 178.895357, - 179.186841, - 179.478331, - 179.769829, - 180.061334, - 180.352845, - 180.644364, - 180.935889, - 181.227421, - 181.518961, - 181.810506, - 182.102059, - 182.393618, - 182.685184, - 182.976757, - 183.268336, - 183.559922, - 183.851514, - 184.143113, - 184.434718, - 184.72633, - 185.017948, - 185.309572, - 185.601203, - 185.892839, - 186.184482, - 186.476131, - 186.767786, - 187.059448, - 187.351115, - 187.642788, - 187.934468, - 188.226153, - 188.517845, - 188.809542, - 189.101246, - 189.392956, - 189.684672, - 189.976394, - 190.268123, - 190.559858, - 190.851599, - 191.143347, - 191.435102, - 191.726863, - 192.018631, - 192.310406, - 192.602188, - 192.893977, - 193.185773, - 193.477577, - 193.769388, - 194.061206, - 194.353033, - 194.644867, - 194.936709, - 195.228558, - 195.520416, - 195.812282, - 196.104156, - 196.396039, - 196.68793, - 196.979829, - 197.271736, - 197.563652, - 197.855576, - 198.147508, - 198.439449, - 198.731399, - 199.023356, - 199.315322, - 199.607297, - 199.899279, - 200.19127, - 200.483269, - 200.775276, - 201.067291, - 201.359313, - 201.651344, - 201.943383, - 202.235429, - 202.527483, - 202.819545, - 203.111615, - 203.403691, - 203.695776, - 203.987868, - 204.279967, - 204.572074, - 204.864188, - 205.156309, - 205.448438, - 205.740574, - 206.032717, - 206.324868, - 206.617026, - 206.909191, - 207.201363, - 207.493543, - 207.78573, - 208.077925, - 208.370127, - 208.662336, - 208.954552, - 209.246776, - 209.539008, - 209.831247, - 210.123493, - 210.415747, - 210.708008, - 211.000277, - 211.292553, - 211.584836, - 211.877128, - 212.169426, - 212.461732, - 212.754046, - 213.046367, - 213.338695, - 213.631031, - 213.923375, - 214.215726, - 214.508084, - 214.80045, - 215.092823, - 215.385203, - 215.677591, - 215.969986, - 216.262389, - 216.554799, - 216.847216, - 217.139641, - 217.432073, - 217.724513, - 218.016961, - 218.309415, - 218.601878, - 218.894348, - 219.186826, - 219.479312, - 219.771806, - 220.064308, - 220.356818, - 220.649337, - 220.941864, - 221.234399, - 221.526943, - 221.819496, - 222.112059, - 222.40463, - 222.69721, - 222.989801, - 223.2824, - 223.57501, - 223.86763, - 224.16026, - 224.452901, - 224.745552, - 225.038214, - 225.330887, - 225.623571, - 225.916266, - 226.208973, - 226.501692, - 226.794423, - 227.087165, - 227.37992, - 227.672687, - 227.965467, - 228.258259, - 228.551064, - 228.843881, - 229.136712, - 229.429556, - 229.722413, - 230.015284, - 230.308168, - 230.601065, - 230.893976, - 231.186901, - 231.47984, - 231.772792, - 232.065759, - 232.35874, - 232.651735, - 232.944744, - 233.237768, - 233.530806, - 233.823859, - 234.116926, - 234.410008, - 234.703105, - 234.996217, - 235.289344, - 235.582485, - 235.875642, - 236.168815, - 236.462002, - 236.755205, - 237.048423, - 237.341656, - 237.634906, - 237.92817, - 238.221451, - 238.514747, - 238.808059, - 239.101387, - 239.394731, - 239.68809, - 239.981466, - 240.274857, - 240.568265, - 240.861688, - 241.155127, - 241.448583, - 241.742054, - 242.035541, - 242.329044, - 242.622563, - 242.916098, - 243.209648, - 243.503214, - 243.796796, - 244.090394, - 244.384007, - 244.677635, - 244.971279, - 245.264938, - 245.558612, - 245.852301, - 246.146005, - 246.439724, - 246.733458, - 247.027206, - 247.320969, - 247.614746, - 247.908538, - 248.202344, - 248.496164, - 248.789998, - 249.083846, - 249.377708, - 249.671583, - 249.965472, - 250.259374, - 250.55329, - 250.847219, - 251.141161, - 251.435116, - 251.729085, - 252.023066, - 252.31706, - 252.611066, - 252.905085, - 253.199117, - 253.493161, - 253.787217, - 254.081286, - 254.375367, - 254.66946, - 254.963564, - 255.257681, - 255.55181, - 255.84595, - 256.140102, - 256.434266, - 256.728441, - 257.022628, - 257.316826, - 257.611036, - 257.905256, - 258.199488, - 258.493731, - 258.787985, - 259.08225, - 259.376525, - 259.670812, - 259.965109, - 260.259417, - 260.553736, - 260.848065, - 261.142405, - 261.436755, - 261.731116, - 262.025488, - 262.319869, - 262.614261, - 262.908664, - 263.203076, - 263.497499, - 263.791933, - 264.086377, - 264.380831, - 264.675295, - 264.96977, - 265.264255, - 265.55875, - 265.853256, - 266.147772, - 266.442299, - 266.736836, - 267.031384, - 267.325942, - 267.620511, - 267.91509, - 268.209681, - 268.504282, - 268.798894, - 269.093516, - 269.38815, - 269.682795, - 269.977451, - 270.272117, - 270.566795, - 270.861485, - 271.156185, - 271.450897, - 271.74562, - 272.040355, - 272.335101, - 272.629858, - 272.924627, - 273.219408, - 273.5142, - 273.809004, - 274.10382, - 274.398647, - 274.693487, - 274.988338, - 275.283201, - 275.578076, - 275.872963, - 276.167861, - 276.462772, - 276.757695, - 277.05263, - 277.347577, - 277.642536, - 277.937507, - 278.23249, - 278.527486, - 278.822494, - 279.117514, - 279.412547, - 279.707591, - 280.002649, - 280.297718, - 280.5928, - 280.887895, - 281.183002, - 281.478122, - 281.773254, - 282.068399, - 282.363557, - 282.658727, - 282.953911, - 283.249106, - 283.544315, - 283.839537, - 284.134771, - 284.430018, - 284.725278, - 285.020551, - 285.315837, - 285.611135, - 285.906447, - 286.201771, - 286.497109, - 286.792459, - 287.087821, - 287.383197, - 287.678585, - 287.973987, - 288.2694, - 288.564827, - 288.860266, - 289.155718, - 289.451182, - 289.746659, - 290.042148, - 290.337649, - 290.633163, - 290.928689, - 291.224227, - 291.519778, - 291.81534, - 292.110914, - 292.406501, - 292.702099, - 292.997709, - 293.29333, - 293.588963, - 293.884608, - 294.180264, - 294.475931, - 294.77161, - 295.0673, - 295.363, - 295.658712, - 295.954435, - 296.250169, - 296.545913, - 296.841668, - 297.137434, - 297.43321, - 297.728996, - 298.024792, - 298.320599, - 298.616415, - 298.912242, - 299.208078, - 299.503924, - 299.79978, - 300.095645, - 300.391519, - 300.687403, - 300.983295, - 301.279197, - 301.575107, - 301.871026, - 302.166954, - 302.46289, - 302.758834, - 303.054786, - 303.350746, - 303.646714, - 303.94269, - 304.238673, - 304.534663, - 304.83066, - 305.126664, - 305.422675, - 305.718692, - 306.014716, - 306.310746, - 306.606782, - 306.902824, - 307.198871, - 307.494924, - 307.790982, - 308.087046, - 308.383114, - 308.679188, - 308.975266, - 309.271349, - 309.567437, - 309.863529, - 310.159626, - 310.455727, - 310.751833, - 311.047943, - 311.344057, - 311.640176, - 311.936299, - 312.232426, - 312.528557, - 312.824693, - 313.120834, - 313.416978, - 313.713128, - 314.009281, - 314.30544, - 314.601603, - 314.897771, - 315.193943, - 315.49012, - 315.786303, - 316.08249, - 316.378682, - 316.674879, - 316.971081, - 317.267288, - 317.5635, - 317.859717, - 318.15594, - 318.452167, - 318.748399, - 319.044637, - 319.34088, - 319.637127, - 319.93338, - 320.229638, - 320.5259, - 320.822168, - 321.11844, - 321.414717, - 321.710999, - 322.007286, - 322.303578, - 322.599874, - 322.896175, - 323.192481, - 323.488791, - 323.785106, - 324.081426, - 324.37775, - 324.674079, - 324.970413, - 325.266751, - 325.563094, - 325.859442, - 326.155795, - 326.452152, - 326.748515, - 327.044882, - 327.341255, - 327.637632, - 327.934015, - 328.230403, - 328.526796, - 328.823195, - 329.119599, - 329.416008, - 329.712423, - 330.008844, - 330.30527, - 330.601702, - 330.89814, - 331.194584, - 331.491034, - 331.787489, - 332.083951, - 332.380418, - 332.676892, - 332.973371, - 333.269856, - 333.566347, - 333.862845, - 334.159348, - 334.455857, - 334.752371, - 335.048892, - 335.345418, - 335.64195, - 335.938488, - 336.235031, - 336.531579, - 336.828134, - 337.124693, - 337.421258, - 337.717829, - 338.014404, - 338.310985, - 338.607571, - 338.904162, - 339.200758, - 339.497359, - 339.793966, - 340.090577, - 340.387193, - 340.683815, - 340.980441, - 341.277072, - 341.573709, - 341.870351, - 342.166997, - 342.463649, - 342.760306, - 343.056968, - 343.353636, - 343.650309, - 343.946987, - 344.24367, - 344.540359, - 344.837054, - 345.133754, - 345.430459, - 345.727171, - 346.023888, - 346.32061, - 346.617339, - 346.914073, - 347.210813, - 347.507559, - 347.80431, - 348.101068, - 348.397831, - 348.694601, - 348.991376, - 349.288157, - 349.584944, - 349.881737, - 350.178536, - 350.47534, - 350.772151, - 351.068967, - 351.365789, - 351.662617, - 351.95945, - 352.25629, - 352.553135, - 352.849986, - 353.146842, - 353.443704, - 353.740572, - 354.037446, - 354.334325, - 354.63121, - 354.928101, - 355.224997, - 355.5219, - 355.818808, - 356.115722, - 356.412641, - 356.709567, - 357.006498, - 357.303436, - 357.60038, - 357.897329, - 358.194285, - 358.491247, - 358.788215, - 359.085189, - 359.38217, - 359.679157, - 359.976151, - 0.273151, - 0.570158, - 0.867171, - 1.164191, - 1.461218, - 1.758251, - 2.055291, - 2.352338, - 2.649392, - 2.946453, - 3.243521, - 3.540595, - 3.837677, - 4.134765, - 4.43186, - 4.728962, - 5.026072, - 5.323188, - 5.620311, - 5.917441, - 6.214578, - 6.511722, - 6.808873, - 7.10603, - 7.403195, - 7.700366, - 7.997544, - 8.294729, - 8.591921, - 8.88912, - 9.186326, - 9.483538, - 9.780757, - 10.077983, - 10.375215, - 10.672455, - 10.969701, - 11.266954, - 11.564214, - 11.861481, - 12.158754, - 12.456034, - 12.753322, - 13.050616, - 13.347917, - 13.645225, - 13.94254, - 14.239861, - 14.53719, - 14.834526, - 15.131869, - 15.429219, - 15.726576, - 16.02394, - 16.321311, - 16.618689, - 16.916075, - 17.213468, - 17.510867, - 17.808274, - 18.105688, - 18.40311, - 18.700538, - 18.997973, - 19.295416, - 19.592866, - 19.890323, - 20.187787, - 20.485258, - 20.782736, - 21.080221, - 21.377713, - 21.675212, - 21.972719, - 22.270232, - 22.567752, - 22.865279, - 23.162813, - 23.460353, - 23.757901, - 24.055455, - 24.353016, - 24.650584, - 24.948159, - 25.245741, - 25.543329, - 25.840924, - 26.138526, - 26.436134, - 26.733749, - 27.031371, - 27.329, - 27.626635, - 27.924277, - 28.221926, - 28.519581, - 28.817243, - 29.114912, - 29.412587, - 29.710269, - 30.007958, - 30.305653, - 30.603355, - 30.901063, - 31.198779, - 31.4965, - 31.794229, - 32.091963, - 32.389705, - 32.687453, - 32.985207, - 33.282968, - 33.580735, - 33.878508, - 34.176288, - 34.474074, - 34.771867, - 35.069665, - 35.36747, - 35.665281, - 35.963098, - 36.260922, - 36.558751, - 36.856586, - 37.154427, - 37.452274, - 37.750127, - 38.047986, - 38.34585, - 38.64372, - 38.941597, - 39.239478, - 39.537366, - 39.835259, - 40.133158, - 40.431062, - 40.728972, - 41.026888, - 41.324809, - 41.622736, - 41.920669, - 42.218607, - 42.516551, - 42.814501, - 43.112456, - 43.410417, - 43.708383, - 44.006356, - 44.304334, - 44.602318, - 44.900308, - 45.198304, - 45.496305, - 45.794313, - 46.092326, - 46.390345, - 46.68837, - 46.986402, - 47.284439, - 47.582482, - 47.880532, - 48.178587, - 48.476649, - 48.774717, - 49.072791, - 49.370871, - 49.668957, - 49.96705, - 50.265149, - 50.563254, - 50.861366, - 51.159484, - 51.457608, - 51.755739, - 52.053876, - 52.35202, - 52.65017, - 52.948327, - 53.246491, - 53.544661, - 53.842837, - 54.141021, - 54.439211, - 54.737407, - 55.035611, - 55.333821, - 55.632039, - 55.930263, - 56.228494, - 56.526732, - 56.824978, - 57.12323, - 57.421489, - 57.719756, - 58.01803, - 58.316311, - 58.614599, - 58.912895, - 59.211198, - 59.509509, - 59.807827, - 60.106152, - 60.404485, - 60.702826, - 61.001174, - 61.29953, - 61.597894, - 61.896265, - 62.194644, - 62.493031, - 62.791426, - 63.089828, - 63.388238, - 63.686656, - 63.985081, - 64.283514, - 64.581955, - 64.880404, - 65.17886, - 65.477324, - 65.775795, - 66.074274, - 66.37276, - 66.671254, - 66.969755, - 67.268264, - 67.56678, - 67.865303, - 68.163833, - 68.462371, - 68.760916, - 69.059468, - 69.358028, - 69.656594, - 69.955168, - 70.253749, - 70.552337, - 70.850933, - 71.149536, - 71.448146, - 71.746764, - 72.045389, - 72.344022, - 72.642662, - 72.94131, - 73.239966, - 73.53863, - 73.837301, - 74.13598, - 74.434668, - 74.733363, - 75.032067, - 75.330778, - 75.629498, - 75.928226, - 76.226963, - 76.525708, - 76.824461, - 77.123223, - 77.421993, - 77.720771, - 78.019557, - 78.318352, - 78.617155, - 78.915967, - 79.214786, - 79.513613, - 79.812449, - 80.111292, - 80.410143, - 80.709001, - 81.007868, - 81.306741, - 81.605622, - 81.90451, - 82.203406, - 82.502308, - 82.801217, - 83.100133, - 83.399056, - 83.697985, - 83.99692, - 84.295862, - 84.59481, - 84.893764, - 85.192724, - 85.491691, - 85.790663, - 86.089641, - 86.388625, - 86.687614, - 86.98661, - 87.285611, - 87.584617, - 87.883629, - 88.182647, - 88.481671, - 88.780699, - 89.079734, - 89.378774, - 89.677819, - 89.97687, - 90.275926, - 90.574988, - 90.874055, - 91.173128, - 91.472205, - 91.771288, - 92.070377, - 92.36947, - 92.668569, - 92.967673, - 93.266782, - 93.565896, - 93.865015, - 94.164139, - 94.463268, - 94.762402, - 95.061541, - 95.360684, - 95.659833, - 95.958985, - 96.258143, - 96.557305, - 96.856471, - 97.155642, - 97.454817, - 97.753997, - 98.053181, - 98.35237, - 98.651563, - 98.95076, - 99.249961, - 99.549167, - 99.848377, - 100.147592, - 100.446811, - 100.746034, - 101.045262, - 101.344495, - 101.643732, - 101.942974, - 102.242221, - 102.541473, - 102.84073, - 103.139992, - 103.439259, - 103.738531, - 104.037809, - 104.337093, - 104.636382, - 104.935677, - 105.234978, - 105.534285, - 105.833599, - 106.132918, - 106.432244, - 106.731577, - 107.030916, - 107.330262, - 107.629615, - 107.928975, - 108.228342, - 108.527716, - 108.827098, - 109.126486, - 109.425883, - 109.725286, - 110.024697, - 110.324116, - 110.623543, - 110.922977, - 111.222419, - 111.521868, - 111.821326, - 112.120791, - 112.420265, - 112.719746, - 113.019236, - 113.318733, - 113.618238, - 113.917752, - 114.217274, - 114.516803, - 114.816342, - 115.115888, - 115.415442, - 115.715005, - 116.014577, - 116.314156, - 116.613744, - 116.913341, - 117.212946, - 117.51256, - 117.812182, - 118.111813, - 118.411452, - 118.7111, - 119.010757, - 119.310423, - 119.610097, - 119.90978, - 120.209472, - 120.509173, - 120.808883, - 121.108601, - 121.408329, - 121.708065, - 122.00781, - 122.307564, - 122.607327, - 122.907098, - 123.206879, - 123.506668, - 123.806465, - 124.106272, - 124.406086, - 124.70591, - 125.005741, - 125.305581, - 125.60543, - 125.905286, - 126.205151, - 126.505023, - 126.804904, - 127.104792, - 127.404688, - 127.704592, - 128.004503, - 128.304422, - 128.604348, - 128.904281, - 129.204221, - 129.504168, - 129.804122, - 130.104083, - 130.40405, - 130.704024, - 131.004005, - 131.303992, - 131.603985, - 131.903985, - 132.20399, - 132.504002, - 132.804019, - 133.104042, - 133.404071, - 133.704106, - 134.004147, - 134.304192, - 134.604244, - 134.904301, - 135.204363, - 135.50443, - 135.804503, - 136.10458, - 136.404663, - 136.704751, - 137.004843, - 137.304941, - 137.605043, - 137.90515, - 138.205262, - 138.505378, - 138.805499, - 139.105625, - 139.405754, - 139.705888, - 140.006027, - 140.306169, - 140.606316, - 140.906467, - 141.206622, - 141.506781, - 141.806944, - 142.10711, - 142.407281, - 142.707455, - 143.007633, - 143.307815, - 143.608, - 143.908189, - 144.208382, - 144.508578, - 144.808777, - 145.10898, - 145.409187, - 145.709397, - 146.009611, - 146.309827, - 146.610048, - 146.910272, - 147.210499, - 147.51073, - 147.810964, - 148.111202, - 148.411443, - 148.711688, - 149.011936, - 149.312188, - 149.612444, - 149.912703, - 150.212965, - 150.513232, - 150.813502, - 151.113775, - 151.414053, - 151.714334, - 152.014619, - 152.314908, - 152.6152, - 152.915496, - 153.215796, - 153.5161, - 153.816408, - 154.11672, - 154.417035, - 154.717354, - 155.017677, - 155.318004, - 155.618335, - 155.91867, - 156.219008, - 156.519351, - 156.819697, - 157.120047, - 157.4204, - 157.720758, - 158.021119, - 158.321483, - 158.621852, - 158.922224, - 159.2226, - 159.52298, - 159.823363, - 160.12375, - 160.42414, - 160.724534, - 161.024931, - 161.325333, - 161.625737, - 161.926145, - 162.226557, - 162.526972, - 162.827391, - 163.127813, - 163.428239, - 163.728668, - 164.029101, - 164.329537, - 164.629976, - 164.930419, - 165.230865, - 165.531315, - 165.831768, - 166.132224, - 166.432683, - 166.733146, - 167.033612, - 167.334081, - 167.634553, - 167.935029, - 168.235507, - 168.535989, - 168.836473, - 169.13696, - 169.43745, - 169.737943, - 170.038439, - 170.338938, - 170.639439, - 170.939942, - 171.240448, - 171.540957, - 171.841468, - 172.141981, - 172.442497, - 172.743015, - 173.043535, - 173.344057, - 173.644581, - 173.945107, - 174.245635, - 174.546164, - 174.846696, - 175.147229, - 175.447764, - 175.7483, - 176.048838, - 176.349378, - 176.649918, - 176.950461, - 177.251004, - 177.551549, - 177.852096, - 178.152643, - 178.453192, - 178.753742, - 179.054292, - 179.354844, - 179.655397, - 179.955951, - 180.256506, - 180.557062, - 180.857619, - 181.158177, - 181.458735, - 181.759295, - 182.059855, - 182.360416, - 182.660977, - 182.961539, - 183.262102, - 183.562665, - 183.863229, - 184.163794, - 184.464358, - 184.764924, - 185.065489, - 185.366055, - 185.666621, - 185.967187, - 186.267753, - 186.568319, - 186.868885, - 187.169452, - 187.470018, - 187.770584, - 188.07115, - 188.371716, - 188.672282, - 188.972848, - 189.273413, - 189.573979, - 189.874545, - 190.175111, - 190.475677, - 190.776243, - 191.076809, - 191.377376, - 191.677943, - 191.978511, - 192.27908, - 192.579649, - 192.88022, - 193.180792, - 193.481365, - 193.781939, - 194.082515, - 194.383093, - 194.683673, - 194.984255, - 195.284839, - 195.585426, - 195.886015, - 196.186607, - 196.487202, - 196.787799, - 197.0884, - 197.389004, - 197.689611, - 197.990222, - 198.290836, - 198.591453, - 198.892074, - 199.192699, - 199.493327, - 199.793959, - 200.094594, - 200.395233, - 200.695876, - 200.996523, - 201.297174, - 201.597828, - 201.898486, - 202.199148, - 202.499813, - 202.800482, - 203.101155, - 203.401831, - 203.702511, - 204.003195, - 204.303883, - 204.604574, - 204.905269, - 205.205968, - 205.50667, - 205.807376, - 206.108087, - 206.4088, - 206.709518, - 207.01024, - 207.310966, - 207.611696, - 207.91243, - 208.213168, - 208.51391, - 208.814657, - 209.115408, - 209.416163, - 209.716923, - 210.017687, - 210.318456, - 210.619229, - 210.920007, - 211.22079, - 211.521577, - 211.822369, - 212.123166, - 212.423967, - 212.724773, - 213.025583, - 213.326399, - 213.627218, - 213.928043, - 214.228872, - 214.529705, - 214.830543, - 215.131385, - 215.432232, - 215.733082, - 216.033937, - 216.334796, - 216.635659, - 216.936526, - 217.237397, - 217.538272, - 217.83915, - 218.140032, - 218.440918, - 218.741807, - 219.042699, - 219.343595, - 219.644494, - 219.945397, - 220.246303, - 220.547211, - 220.848124, - 221.149039, - 221.449958, - 221.750879, - 222.051804, - 222.352732, - 222.653664, - 222.954598, - 223.255536, - 223.556477, - 223.857422, - 224.15837, - 224.459321, - 224.760276, - 225.061234, - 225.362196, - 225.663161, - 225.964131, - 226.265104, - 226.566081, - 226.867061, - 227.168046, - 227.469034, - 227.770027, - 228.071023, - 228.372024, - 228.673028, - 228.974037, - 229.27505, - 229.576067, - 229.877088, - 230.178113, - 230.479143, - 230.780176, - 231.081214, - 231.382256, - 231.683302, - 231.984352, - 232.285407, - 232.586466, - 232.887529, - 233.188596, - 233.489667, - 233.790743, - 234.091823, - 234.392907, - 234.693995, - 234.995088, - 235.296185, - 235.597287, - 235.898393, - 236.199503, - 236.500618, - 236.801737, - 237.102861, - 237.40399, - 237.705124, - 238.006262, - 238.307406, - 238.608554, - 238.909708, - 239.210866, - 239.51203, - 239.8132, - 240.114374, - 240.415554, - 240.71674, - 241.017932, - 241.319129, - 241.620332, - 241.921541, - 242.222756, - 242.523977, - 242.825204, - 243.126438, - 243.427677, - 243.728923, - 244.030176, - 244.331435, - 244.6327, - 244.933972, - 245.235251, - 245.536536, - 245.837828, - 246.139127, - 246.440432, - 246.741744, - 247.043063, - 247.344388, - 247.645721, - 247.94706, - 248.248406, - 248.549759, - 248.851119, - 249.152486, - 249.453859, - 249.75524, - 250.056627, - 250.358022, - 250.659423, - 250.960832, - 251.262248, - 251.56367, - 251.8651, - 252.166537, - 252.467981, - 252.769433, - 253.070891, - 253.372357, - 253.67383, - 253.975311, - 254.276799, - 254.578294, - 254.879797, - 255.181307, - 255.482825, - 255.78435, - 256.085884, - 256.387424, - 256.688973, - 256.990529, - 257.292093, - 257.593664, - 257.895243, - 258.196831, - 258.498426, - 258.800028, - 259.101639, - 259.403257, - 259.704883, - 260.006517, - 260.308159, - 260.609808, - 260.911465, - 261.21313, - 261.514803, - 261.816483, - 262.118171, - 262.419867, - 262.72157, - 263.023281, - 263.324999, - 263.626725, - 263.928458, - 264.230199, - 264.531947, - 264.833703, - 265.135465, - 265.437236, - 265.739013, - 266.040797, - 266.342589, - 266.644388, - 266.946194, - 267.248007, - 267.549828, - 267.851655, - 268.153489, - 268.45533, - 268.757179, - 269.059034, - 269.360896, - 269.662764, - 269.96464, - 270.266522, - 270.568411, - 270.870307, - 271.17221, - 271.474119, - 271.776035, - 272.077957, - 272.379885, - 272.68182, - 272.983762, - 273.285709, - 273.587663, - 273.889623, - 274.19159, - 274.493562, - 274.79554, - 275.097524, - 275.399513, - 275.701508, - 276.003509, - 276.305516, - 276.607527, - 276.909544, - 277.211566, - 277.513594, - 277.815626, - 278.117663, - 278.419705, - 278.721752, - 279.023803, - 279.325859, - 279.627919, - 279.929983, - 280.232052, - 280.534125, - 280.836202, - 281.138283, - 281.440368, - 281.742457, - 282.044549, - 282.346645, - 282.648745, - 282.950848, - 283.252955, - 283.555065, - 283.857179, - 284.159296, - 284.461416, - 284.76354, - 285.065666, - 285.367796, - 285.669929, - 285.972065, - 286.274204, - 286.576346, - 286.87849, - 287.180638, - 287.482789, - 287.784942, - 288.087098, - 288.389257, - 288.691418, - 288.993582, - 289.295749, - 289.597918, - 289.900089, - 290.202263, - 290.50444, - 290.806619, - 291.1088, - 291.410984, - 291.713169, - 292.015357, - 292.317548, - 292.61974, - 292.921934, - 293.224131, - 293.526329, - 293.82853, - 294.130733, - 294.432937, - 294.735144, - 295.037352, - 295.339562, - 295.641774, - 295.943988, - 296.246204, - 296.548422, - 296.850641, - 297.152862, - 297.455085, - 297.75731, - 298.059536, - 298.361764, - 298.663994, - 298.966226, - 299.268459, - 299.570694, - 299.872931, - 300.175169, - 300.477409, - 300.779651, - 301.081895, - 301.38414, - 301.686387, - 301.988635, - 302.290885, - 302.593137, - 302.895391, - 303.197646, - 303.499902, - 303.80216, - 304.10442, - 304.406681, - 304.708943, - 305.011207, - 305.313473, - 305.615739, - 305.918007, - 306.220276, - 306.522546, - 306.824817, - 307.127089, - 307.429362, - 307.731636, - 308.033911, - 308.336187, - 308.638464, - 308.940742, - 309.24302, - 309.545299, - 309.84758, - 310.149861, - 310.452142, - 310.754425, - 311.056709, - 311.358994, - 311.661279, - 311.963566, - 312.265854, - 312.568144, - 312.870435, - 313.172727, - 313.475021, - 313.777316, - 314.079614, - 314.381913, - 314.684214, - 314.986517, - 315.288822, - 315.59113, - 315.893439, - 316.195752, - 316.498066, - 316.800383, - 317.102703, - 317.405025, - 317.70735, - 318.009677, - 318.312008, - 318.61434, - 318.916676, - 319.219014, - 319.521354, - 319.823697, - 320.126043, - 320.428391, - 320.730742, - 321.033094, - 321.335449, - 321.637807, - 321.940166, - 322.242527, - 322.54489, - 322.847255, - 323.149622, - 323.451991, - 323.754361, - 324.056733, - 324.359106, - 324.661481, - 324.963857, - 325.266234, - 325.568613, - 325.870993, - 326.173374, - 326.475756, - 326.77814, - 327.080525, - 327.382911, - 327.685298, - 327.987686, - 328.290076, - 328.592466, - 328.894858, - 329.197252, - 329.499646, - 329.802042, - 330.104439, - 330.406837, - 330.709236, - 331.011637, - 331.314039, - 331.616443, - 331.918848, - 332.221254, - 332.523661, - 332.82607, - 333.12848, - 333.430891, - 333.733304, - 334.035717, - 334.338132, - 334.640548, - 334.942965, - 335.245383, - 335.547802, - 335.850222, - 336.152642, - 336.455064, - 336.757486, - 337.059909, - 337.362333, - 337.664757, - 337.967182, - 338.269607, - 338.572032, - 338.874458, - 339.176885, - 339.479311, - 339.781739, - 340.084166, - 340.386594, - 340.689022, - 340.99145, - 341.293879, - 341.596308, - 341.898738, - 342.201168, - 342.503598, - 342.80603, - 343.108462, - 343.410894, - 343.713327, - 344.015762, - 344.318197, - 344.620633, - 344.923071, - 345.225509, - 345.527949, - 345.830391, - 346.132834, - 346.435278, - 346.737725, - 347.040173, - 347.342623, - 347.645074, - 347.947528, - 348.249984, - 348.552442, - 348.854903, - 349.157365, - 349.45983, - 349.762297, - 350.064767, - 350.367239, - 350.669714, - 350.972191, - 351.274671, - 351.577153, - 351.879637, - 352.182125, - 352.484615, - 352.787107, - 353.089602, - 353.3921, - 353.6946, - 353.997102, - 354.299608, - 354.602116, - 354.904626, - 355.207139, - 355.509655, - 355.812174, - 356.114695, - 356.417219, - 356.719745, - 357.022274, - 357.324806, - 357.627341, - 357.929878, - 358.232418, - 358.534961, - 358.837507, - 359.140056, - 359.442607, - 359.745162, - 0.047719, - 0.350279, - 0.652843, - 0.955409, - 1.257979, - 1.560551, - 1.863127, - 2.165705, - 2.468287, - 2.770872, - 3.07346, - 3.376051, - 3.678645, - 3.981242, - 4.283842, - 4.586445, - 4.889051, - 5.19166, - 5.494272, - 5.796886, - 6.099504, - 6.402124, - 6.704747, - 7.007373, - 7.310002, - 7.612633, - 7.915266, - 8.217902, - 8.520541, - 8.823182, - 9.125825, - 9.42847, - 9.731118, - 10.033768, - 10.33642, - 10.639074, - 10.94173, - 11.244388, - 11.547048, - 11.849711, - 12.152375, - 12.455041, - 12.757709, - 13.060378, - 13.36305, - 13.665724, - 13.968399, - 14.271077, - 14.573756, - 14.876437, - 15.17912, - 15.481805, - 15.784492, - 16.087181, - 16.389872, - 16.692565, - 16.99526, - 17.297957, - 17.600656, - 17.903357, - 18.20606, - 18.508766, - 18.811473, - 19.114183, - 19.416895, - 19.719609, - 20.022326, - 20.325045, - 20.627766, - 20.930489, - 21.233215, - 21.535943, - 21.838674, - 22.141407, - 22.444142, - 22.74688, - 23.04962, - 23.352363, - 23.655109, - 23.957857, - 24.260608, - 24.563362, - 24.866118, - 25.168877, - 25.471639, - 25.774404, - 26.077171, - 26.379942, - 26.682716, - 26.985492, - 27.288272, - 27.591055, - 27.893842, - 28.196632, - 28.499425, - 28.802222, - 29.105022, - 29.407826, - 29.710633, - 30.013445, - 30.31626, - 30.619079, - 30.921903, - 31.22473, - 31.527562, - 31.830397, - 32.133237, - 32.436082, - 32.738931, - 33.041784, - 33.344642, - 33.647504, - 33.950371, - 34.253243, - 34.556119, - 34.859001, - 35.161887, - 35.464777, - 35.767673, - 36.070573, - 36.373478, - 36.676389, - 36.979304, - 37.282223, - 37.585148, - 37.888078, - 38.191012, - 38.493952, - 38.796896, - 39.099845, - 39.402799, - 39.705758, - 40.008721, - 40.311689, - 40.614663, - 40.91764, - 41.220623, - 41.52361, - 41.826602, - 42.129599, - 42.4326, - 42.735606, - 43.038617, - 43.341632, - 43.644652, - 43.947676, - 44.250705, - 44.553738, - 44.856776, - 45.159818, - 45.462865, - 45.765916, - 46.068971, - 46.372031, - 46.675095, - 46.978163, - 47.281235, - 47.584312, - 47.887393, - 48.190477, - 48.493566, - 48.796658, - 49.099755, - 49.402855, - 49.705959, - 50.009067, - 50.312178, - 50.615293, - 50.918411, - 51.221533, - 51.524658, - 51.827786, - 52.130917, - 52.434051, - 52.737188, - 53.040328, - 53.343471, - 53.646617, - 53.949765, - 54.252915, - 54.556068, - 54.859224, - 55.162381, - 55.465541, - 55.768703, - 56.071867, - 56.375032, - 56.6782, - 56.981369, - 57.284539, - 57.587712 - ], - "yaxis": "y2" - }, - { - "mode": "lines", - "name": " GenTq", - "type": "scatter", - "xaxis": "x3", - "y": [ - 15.401253, - 15.346899, - 15.293689, - 15.241616, - 15.191, - 15.14206, - 15.094997, - 15.04999, - 15.007198, - 14.966757, - 14.928781, - 14.89336, - 14.860562, - 14.830434, - 14.803, - 14.778265, - 14.756211, - 14.736806, - 14.719999, - 14.705725, - 14.693905, - 14.684447, - 14.677253, - 14.672216, - 14.669221, - 14.668152, - 14.668892, - 14.671322, - 14.675327, - 14.680793, - 14.687614, - 14.69569, - 14.704927, - 14.715241, - 14.726558, - 14.738813, - 14.751951, - 14.76593, - 14.780715, - 14.796284, - 14.812623, - 14.829726, - 14.847596, - 14.866244, - 14.885684, - 14.905937, - 14.927025, - 14.948972, - 14.971803, - 14.995539, - 15.020201, - 15.045804, - 15.072356, - 15.09986, - 15.128309, - 15.157687, - 15.187969, - 15.219116, - 15.251081, - 15.283802, - 15.317207, - 15.35121, - 15.385714, - 15.420612, - 15.455783, - 15.491099, - 15.526422, - 15.561606, - 15.596497, - 15.630939, - 15.664771, - 15.697828, - 15.729948, - 15.760969, - 15.790731, - 15.819083, - 15.845876, - 15.870971, - 15.894241, - 15.915567, - 15.934845, - 15.951983, - 15.966906, - 15.979553, - 15.989879, - 15.997856, - 16.003475, - 16.006741, - 16.007676, - 16.006321, - 16.00273, - 15.996973, - 15.989135, - 15.979312, - 15.967613, - 15.954157, - 15.939074, - 15.9225, - 15.904575, - 15.885448, - 15.865267, - 15.844183, - 15.822348, - 15.79991, - 15.777016, - 15.753807, - 15.73042, - 15.706986, - 15.683627, - 15.660457, - 15.637582, - 15.615099, - 15.593094, - 15.571644, - 15.550817, - 15.53067, - 15.51125, - 15.492597, - 15.47474, - 15.457701, - 15.441494, - 15.426129, - 15.411606, - 15.397923, - 15.385074, - 15.373048, - 15.361833, - 15.351416, - 15.341784, - 15.332923, - 15.324821, - 15.31747, - 15.31086, - 15.304989, - 15.299855, - 15.295463, - 15.29182, - 15.288939, - 15.286834, - 15.285528, - 15.285044, - 15.285412, - 15.286661, - 15.288827, - 15.291946, - 15.296055, - 15.301194, - 15.307401, - 15.314715, - 15.323171, - 15.332803, - 15.343643, - 15.355717, - 15.369048, - 15.383654, - 15.399544, - 15.416723, - 15.435189, - 15.454931, - 15.475932, - 15.498165, - 15.521594, - 15.546179, - 15.571867, - 15.598599, - 15.626308, - 15.65492, - 15.684352, - 15.714518, - 15.745323, - 15.776667, - 15.808448, - 15.840557, - 15.872886, - 15.905322, - 15.937752, - 15.970064, - 16.002146, - 16.033888, - 16.065183, - 16.095927, - 16.126022, - 16.155372, - 16.18389, - 16.211495, - 16.238112, - 16.263672, - 16.288118, - 16.311398, - 16.333469, - 16.354296, - 16.373852, - 16.39212, - 16.409088, - 16.424754, - 16.439122, - 16.452204, - 16.464017, - 16.474584, - 16.483933, - 16.492097, - 16.499113, - 16.505021, - 16.509861, - 16.513679, - 16.516519, - 16.518426, - 16.519446, - 16.519624, - 16.519003, - 16.517626, - 16.515532, - 16.512759, - 16.509342, - 16.505316, - 16.500709, - 16.49555, - 16.489862, - 16.483669, - 16.476991, - 16.469845, - 16.462248, - 16.454214, - 16.445756, - 16.436888, - 16.427622, - 16.41797, - 16.407946, - 16.397564, - 16.386838, - 16.375787, - 16.364429, - 16.352786, - 16.340883, - 16.328747, - 16.316409, - 16.303902, - 16.291263, - 16.278533, - 16.265754, - 16.252974, - 16.240242, - 16.227609, - 16.21513, - 16.202862, - 16.190862, - 16.17919, - 16.167905, - 16.157069, - 16.14674, - 16.136978, - 16.127842, - 16.119387, - 16.111667, - 16.104735, - 16.098638, - 16.09342, - 16.089121, - 16.085779, - 16.083424, - 16.082083, - 16.081777, - 16.082521, - 16.084327, - 16.087198, - 16.091135, - 16.096132, - 16.102176, - 16.109252, - 16.117338, - 16.126406, - 16.136428, - 16.147367, - 16.159185, - 16.171839, - 16.185286, - 16.199477, - 16.214362, - 16.22989, - 16.24601, - 16.262666, - 16.279806, - 16.297376, - 16.315323, - 16.333595, - 16.35214, - 16.370908, - 16.389852, - 16.408925, - 16.428084, - 16.447287, - 16.466494, - 16.485669, - 16.504777, - 16.523786, - 16.542666, - 16.561391, - 16.579935, - 16.598274, - 16.616387, - 16.634255, - 16.65186, - 16.669183, - 16.686208, - 16.702921, - 16.719306, - 16.735347, - 16.75103, - 16.766339, - 16.781259, - 16.795775, - 16.809869, - 16.823525, - 16.836725, - 16.849452, - 16.861684, - 16.873405, - 16.884591, - 16.895225, - 16.905283, - 16.914746, - 16.923593, - 16.931802, - 16.939353, - 16.946228, - 16.952408, - 16.957877, - 16.962618, - 16.966619, - 16.969869, - 16.972359, - 16.974083, - 16.975037, - 16.975222, - 16.974641, - 16.9733, - 16.97121, - 16.968384, - 16.964841, - 16.9606, - 16.955687, - 16.950129, - 16.94396, - 16.937212, - 16.929926, - 16.922141, - 16.913902, - 16.905255, - 16.896247, - 16.88693, - 16.877354, - 16.867573, - 16.85764, - 16.847609, - 16.837535, - 16.827471, - 16.817472, - 16.80759, - 16.797876, - 16.788381, - 16.779153, - 16.770238, - 16.761682, - 16.753526, - 16.745809, - 16.738568, - 16.731838, - 16.725649, - 16.720031, - 16.715007, - 16.710602, - 16.706834, - 16.703721, - 16.701276, - 16.699512, - 16.698437, - 16.698058, - 16.698378, - 16.699402, - 16.701128, - 16.703556, - 16.706681, - 16.710501, - 16.715008, - 16.720197, - 16.726058, - 16.732583, - 16.739762, - 16.747585, - 16.75604, - 16.765117, - 16.774803, - 16.785086, - 16.795954, - 16.807392, - 16.819387, - 16.831925, - 16.844992, - 16.858572, - 16.872651, - 16.887211, - 16.902235, - 16.917706, - 16.933604, - 16.949911, - 16.966604, - 16.983662, - 17.001063, - 17.01878, - 17.036789, - 17.055062, - 17.07357, - 17.092284, - 17.111172, - 17.130201, - 17.149338, - 17.168547, - 17.187792, - 17.207035, - 17.226239, - 17.245363, - 17.26437, - 17.283217, - 17.301866, - 17.320276, - 17.338407, - 17.356219, - 17.373674, - 17.390733, - 17.407359, - 17.423517, - 17.439173, - 17.454295, - 17.468851, - 17.482814, - 17.496159, - 17.508862, - 17.520902, - 17.532261, - 17.542925, - 17.552882, - 17.562122, - 17.57064, - 17.578432, - 17.5855, - 17.591846, - 17.597476, - 17.6024, - 17.606629, - 17.610177, - 17.613063, - 17.615305, - 17.616925, - 17.617947, - 17.618396, - 17.618301, - 17.61769, - 17.616593, - 17.615041, - 17.613069, - 17.610707, - 17.607991, - 17.604954, - 17.601632, - 17.598058, - 17.594267, - 17.590293, - 17.586171, - 17.581935, - 17.577616, - 17.573249, - 17.568864, - 17.564493, - 17.560167, - 17.555914, - 17.551764, - 17.547744, - 17.543881, - 17.540202, - 17.536732, - 17.533495, - 17.530514, - 17.527812, - 17.52541, - 17.523331, - 17.521593, - 17.520217, - 17.51922, - 17.51862, - 17.518435, - 17.518679, - 17.51937, - 17.52052, - 17.522143, - 17.524252, - 17.526858, - 17.529972, - 17.533604, - 17.537762, - 17.542452, - 17.547682, - 17.553455, - 17.559775, - 17.566644, - 17.574062, - 17.582028, - 17.59054, - 17.599592, - 17.609179, - 17.619293, - 17.629924, - 17.641061, - 17.652691, - 17.664798, - 17.677366, - 17.690376, - 17.703807, - 17.717639, - 17.731846, - 17.746405, - 17.761287, - 17.776467, - 17.791913, - 17.807596, - 17.823485, - 17.839547, - 17.855749, - 17.872058, - 17.88844, - 17.90486, - 17.921284, - 17.937679, - 17.954009, - 17.970241, - 17.986342, - 18.00228, - 18.018023, - 18.03354, - 18.048801, - 18.063779, - 18.078446, - 18.092777, - 18.106747, - 18.120335, - 18.133518, - 18.146279, - 18.158599, - 18.170464, - 18.181859, - 18.192772, - 18.203193, - 18.213115, - 18.22253, - 18.231433, - 18.239822, - 18.247695, - 18.255053, - 18.261896, - 18.268228, - 18.274055, - 18.279381, - 18.284214, - 18.288564, - 18.292438, - 18.295848, - 18.298807, - 18.301325, - 18.303417, - 18.305098, - 18.306382, - 18.307285, - 18.307823, - 18.308014, - 18.307875, - 18.307425, - 18.306681, - 18.305663, - 18.30439, - 18.302882, - 18.30116, - 18.299244, - 18.297156, - 18.294915, - 18.292544, - 18.290065, - 18.287499, - 18.284869, - 18.282197, - 18.279505, - 18.276817, - 18.274155, - 18.271541, - 18.268998, - 18.266549, - 18.264216, - 18.262022, - 18.259987, - 18.258135, - 18.256486, - 18.25506, - 18.253879, - 18.252961, - 18.252326, - 18.251991, - 18.251974, - 18.252291, - 18.252958, - 18.253988, - 18.255394, - 18.257189, - 18.259384, - 18.261986, - 18.265005, - 18.268447, - 18.272316, - 18.276617, - 18.281351, - 18.286519, - 18.29212, - 18.298152, - 18.30461, - 18.311489, - 18.318782, - 18.326481, - 18.334577, - 18.343057, - 18.351911, - 18.361124, - 18.370682, - 18.380569, - 18.390769, - 18.401264, - 18.412036, - 18.423065, - 18.434333, - 18.445818, - 18.457501, - 18.46936, - 18.481374, - 18.49352, - 18.505779, - 18.518127, - 18.530544, - 18.543007, - 18.555496, - 18.56799, - 18.580466, - 18.592906, - 18.605289, - 18.617596, - 18.629807, - 18.641904, - 18.65387, - 18.665686, - 18.677337, - 18.688805, - 18.700076, - 18.711136, - 18.721969, - 18.732562, - 18.742904, - 18.752981, - 18.762784, - 18.7723, - 18.781522, - 18.790439, - 18.799044, - 18.807328, - 18.815285, - 18.82291, - 18.830196, - 18.837139, - 18.843735, - 18.849982, - 18.855876, - 18.861417, - 18.866603, - 18.871435, - 18.875913, - 18.88004, - 18.883817, - 18.887248, - 18.890336, - 18.893088, - 18.895507, - 18.897602, - 18.899378, - 18.900845, - 18.90201, - 18.902885, - 18.903478, - 18.903802, - 18.903868, - 18.903689, - 18.903278, - 18.902648, - 18.901815, - 18.900792, - 18.899597, - 18.898244, - 18.896749, - 18.89513, - 18.893404, - 18.891587, - 18.889697, - 18.887749, - 18.885764, - 18.883756, - 18.881743, - 18.879744, - 18.877774, - 18.87585, - 18.873988, - 18.872206, - 18.870518, - 18.86894, - 18.867486, - 18.866171, - 18.865007, - 18.864009, - 18.863188, - 18.862556, - 18.862124, - 18.861901, - 18.861897, - 18.86212, - 18.862578, - 18.863278, - 18.864225, - 18.865425, - 18.866882, - 18.8686, - 18.87058, - 18.872825, - 18.875337, - 18.878114, - 18.881158, - 18.884466, - 18.888037, - 18.891869, - 18.895958, - 18.9003, - 18.904892, - 18.909727, - 18.914802, - 18.920109, - 18.925642, - 18.931395, - 18.93736, - 18.943529, - 18.949893, - 18.956446, - 18.963176, - 18.970076, - 18.977135, - 18.984344, - 18.991693, - 18.999171, - 19.006767, - 19.01447, - 19.02227, - 19.030155, - 19.038113, - 19.046134, - 19.054204, - 19.062312, - 19.070447, - 19.078596, - 19.086746, - 19.094886, - 19.103004, - 19.111086, - 19.119122, - 19.127099, - 19.135005, - 19.142828, - 19.150556, - 19.158178, - 19.165682, - 19.173058, - 19.180294, - 19.18738, - 19.194306, - 19.201062, - 19.207638, - 19.214026, - 19.220217, - 19.226203, - 19.231976, - 19.23753, - 19.242859, - 19.247955, - 19.252816, - 19.257435, - 19.261809, - 19.265936, - 19.269812, - 19.273437, - 19.276808, - 19.279927, - 19.282794, - 19.28541, - 19.287776, - 19.289897, - 19.291775, - 19.293415, - 19.294822, - 19.296001, - 19.296958, - 19.297701, - 19.298237, - 19.298575, - 19.298722, - 19.298687, - 19.298482, - 19.298115, - 19.297596, - 19.296938, - 19.29615, - 19.295245, - 19.294234, - 19.293129, - 19.291941, - 19.290684, - 19.289368, - 19.288008, - 19.286614, - 19.285199, - 19.283776, - 19.282357, - 19.280953, - 19.279577, - 19.278241, - 19.276955, - 19.275733, - 19.274584, - 19.273521, - 19.272553, - 19.271691, - 19.270945, - 19.270325, - 19.269841, - 19.269501, - 19.269315, - 19.26929, - 19.269435, - 19.269757, - 19.270264, - 19.270961, - 19.271855, - 19.272953, - 19.274258, - 19.275776, - 19.277511, - 19.279466, - 19.281646, - 19.284052, - 19.286686, - 19.28955, - 19.292646, - 19.295973, - 19.299531, - 19.303319, - 19.307337, - 19.311581, - 19.316051, - 19.320742, - 19.32565, - 19.330772, - 19.336104, - 19.341638, - 19.34737, - 19.353294, - 19.359401, - 19.365685, - 19.372139, - 19.378752, - 19.385518, - 19.392425, - 19.399466, - 19.406629, - 19.413905, - 19.421283, - 19.428752, - 19.436301, - 19.443918, - 19.451593, - 19.459313, - 19.467067, - 19.474842, - 19.482628, - 19.490413, - 19.498184, - 19.50593, - 19.513641, - 19.521303, - 19.528907, - 19.536442, - 19.543896, - 19.551261, - 19.558525, - 19.56568, - 19.572717, - 19.579626, - 19.5864, - 19.593031, - 19.599511, - 19.605835, - 19.611996, - 19.617988, - 19.623806, - 19.629445, - 19.634902, - 19.640173, - 19.645256, - 19.650147, - 19.654847, - 19.659353, - 19.663666, - 19.667785, - 19.671713, - 19.675449, - 19.678997, - 19.682359, - 19.685538, - 19.688538, - 19.691363, - 19.694018, - 19.696508, - 19.698838, - 19.701015, - 19.703046, - 19.704938, - 19.706697, - 19.708331, - 19.709849, - 19.711258, - 19.712568, - 19.713787, - 19.714924, - 19.715988, - 19.716989, - 19.717937, - 19.71884, - 19.719709, - 19.720554, - 19.721383, - 19.722208, - 19.723038, - 19.723882, - 19.72475, - 19.725652, - 19.726597, - 19.727595, - 19.728653, - 19.729781, - 19.730988, - 19.732282, - 19.73367, - 19.73516, - 19.73676, - 19.738476, - 19.740316, - 19.742284, - 19.744387, - 19.74663, - 19.749018, - 19.751555, - 19.754244, - 19.75709, - 19.760096, - 19.763262, - 19.766592, - 19.770086, - 19.773745, - 19.777569, - 19.781558, - 19.785712, - 19.790028, - 19.794505, - 19.79914, - 19.80393, - 19.808872, - 19.813963, - 19.819197, - 19.82457, - 19.830076, - 19.835711, - 19.841467, - 19.847339, - 19.85332, - 19.859403, - 19.865581, - 19.871845, - 19.878189, - 19.884605, - 19.891083, - 19.897617, - 19.904197, - 19.910815, - 19.917464, - 19.924133, - 19.930815, - 19.937502, - 19.944185, - 19.950855, - 19.957505, - 19.964126, - 19.970711, - 19.977252, - 19.983741, - 19.990172, - 19.996537, - 20.00283, - 20.009044, - 20.015173, - 20.021212, - 20.027155, - 20.032997, - 20.038733, - 20.04436, - 20.049872, - 20.055267, - 20.060542, - 20.065693, - 20.070719, - 20.075616, - 20.080385, - 20.085024, - 20.089532, - 20.093908, - 20.098154, - 20.102269, - 20.106254, - 20.110111, - 20.113842, - 20.117448, - 20.120933, - 20.124298, - 20.127548, - 20.130685, - 20.133714, - 20.136639, - 20.139464, - 20.142195, - 20.144836, - 20.147393, - 20.149871, - 20.152277, - 20.154616, - 20.156896, - 20.159121, - 20.161299, - 20.163437, - 20.165542, - 20.16762, - 20.169679, - 20.171726, - 20.173768, - 20.175812, - 20.177866, - 20.179937, - 20.182031, - 20.184157, - 20.18632, - 20.188528, - 20.190788, - 20.193106, - 20.195488, - 20.197941, - 20.20047, - 20.203082, - 20.205782, - 20.208575, - 20.211467, - 20.214461, - 20.217562, - 20.220774, - 20.224102, - 20.227547, - 20.231114, - 20.234805, - 20.238623, - 20.242568, - 20.246643, - 20.25085, - 20.255188, - 20.259658, - 20.26426, - 20.268994, - 20.273859, - 20.278854, - 20.283977, - 20.289227, - 20.294602, - 20.300099, - 20.305714, - 20.311446, - 20.31729, - 20.323243, - 20.3293, - 20.335458, - 20.341711, - 20.348055, - 20.354484, - 20.360994, - 20.367578, - 20.374231, - 20.380947, - 20.38772, - 20.394544, - 20.401412, - 20.408318, - 20.415255, - 20.422217, - 20.429198, - 20.43619, - 20.443186, - 20.450181, - 20.457167, - 20.464137, - 20.471085, - 20.478005, - 20.48489, - 20.491733, - 20.498528, - 20.505269, - 20.511951, - 20.518566, - 20.52511, - 20.531577, - 20.537961, - 20.544258, - 20.550462, - 20.556569, - 20.562574, - 20.568474, - 20.574264, - 20.57994, - 20.5855, - 20.59094, - 20.596257, - 20.601448, - 20.606512, - 20.611447, - 20.61625, - 20.620921, - 20.625458, - 20.629861, - 20.634129, - 20.638262, - 20.642261, - 20.646124, - 20.649855, - 20.653453, - 20.656919, - 20.660256, - 20.663464, - 20.666547, - 20.669507, - 20.672346, - 20.675066, - 20.677672, - 20.680165, - 20.682551, - 20.684831, - 20.687011, - 20.689094, - 20.691085, - 20.692986, - 20.694804, - 20.696542, - 20.698206, - 20.699799, - 20.701326, - 20.702794, - 20.704205, - 20.705567, - 20.706882, - 20.708158, - 20.709398, - 20.710607, - 20.711792, - 20.712957, - 20.714106, - 20.715246, - 20.716382, - 20.717518, - 20.718659, - 20.71981, - 20.720977, - 20.722165, - 20.723377, - 20.72462, - 20.725897, - 20.727213, - 20.728573, - 20.729982, - 20.731444, - 20.732963, - 20.734543, - 20.736189, - 20.737905, - 20.739693, - 20.741559, - 20.743505, - 20.745536, - 20.747653, - 20.749861, - 20.752161, - 20.754558, - 20.757052, - 20.759646, - 20.762343, - 20.765142, - 20.768047, - 20.771058, - 20.774176, - 20.777401, - 20.780734, - 20.784174, - 20.787721, - 20.791374, - 20.795132, - 20.798994, - 20.802958, - 20.807022, - 20.811183, - 20.815438, - 20.819786, - 20.824221, - 20.828742, - 20.833343, - 20.83802, - 20.84277, - 20.847588, - 20.852468, - 20.857405, - 20.862394, - 20.86743, - 20.872507, - 20.87762, - 20.882762, - 20.887927, - 20.89311, - 20.898304, - 20.903503, - 20.908701, - 20.913893, - 20.919071, - 20.924231, - 20.929366, - 20.93447, - 20.939538, - 20.944564, - 20.949542, - 20.954468, - 20.959337, - 20.964142, - 20.968881, - 20.973547, - 20.978138, - 20.982648, - 20.987075, - 20.991415, - 20.995663, - 20.999818, - 21.003877, - 21.007836, - 21.011695, - 21.01545, - 21.019101, - 21.022646, - 21.026083, - 21.029412, - 21.032633, - 21.035746, - 21.038749, - 21.041644, - 21.044432, - 21.047112, - 21.049687, - 21.052158, - 21.054526, - 21.056793, - 21.058962, - 21.061035, - 21.063015, - 21.064904, - 21.066705, - 21.068423, - 21.07006, - 21.071621, - 21.073108, - 21.074528, - 21.075883, - 21.077179, - 21.07842, - 21.079612, - 21.080759, - 21.081866, - 21.082938, - 21.083982, - 21.085002, - 21.086004, - 21.086993, - 21.087975, - 21.088956, - 21.089941, - 21.090936, - 21.091945, - 21.092975, - 21.094031, - 21.095118, - 21.096241, - 21.097404, - 21.098614, - 21.099874, - 21.101189, - 21.102562, - 21.103999, - 21.105502, - 21.107075, - 21.108722, - 21.110445, - 21.112246, - 21.114129, - 21.116096, - 21.118147, - 21.120284, - 21.12251, - 21.124823, - 21.127226, - 21.129718, - 21.132299, - 21.134969, - 21.137726, - 21.140571, - 21.143502, - 21.146516, - 21.149613, - 21.152791, - 21.156046, - 21.159377, - 21.16278, - 21.166253, - 21.169793, - 21.173396, - 21.177058, - 21.180777, - 21.184547, - 21.188365, - 21.192228, - 21.19613, - 21.200067, - 21.204036, - 21.208031, - 21.212048, - 21.216083, - 21.220131, - 21.224187, - 21.228247, - 21.232306, - 21.23636, - 21.240405, - 21.244435, - 21.248447, - 21.252436, - 21.256397, - 21.260328, - 21.264223, - 21.268079, - 21.271892, - 21.275659, - 21.279375, - 21.283038, - 21.286644, - 21.29019, - 21.293674, - 21.297092, - 21.300442, - 21.303723, - 21.30693, - 21.310064, - 21.313122, - 21.316103, - 21.319005, - 21.321828, - 21.324571, - 21.327232, - 21.329813, - 21.332312, - 21.334731, - 21.337069, - 21.339326, - 21.341505, - 21.343606, - 21.34563, - 21.34758, - 21.349456, - 21.35126, - 21.352996, - 21.354665, - 21.35627, - 21.357814, - 21.3593, - 21.36073, - 21.362109, - 21.363439, - 21.364724, - 21.365968, - 21.367174, - 21.368347, - 21.36949, - 21.370607, - 21.371702, - 21.37278, - 21.373844, - 21.374898, - 21.375947, - 21.376994, - 21.378043, - 21.379098, - 21.380164, - 21.381243, - 21.38234, - 21.383458, - 21.384599, - 21.385769, - 21.386969, - 21.388203, - 21.389473, - 21.390783, - 21.392134, - 21.393528, - 21.394969, - 21.396458, - 21.397996, - 21.399585, - 21.401227, - 21.402923, - 21.404672, - 21.406477, - 21.408338, - 21.410255, - 21.412228, - 21.414257, - 21.416342, - 21.418483, - 21.420679, - 21.422929, - 21.425232, - 21.427588, - 21.429995, - 21.432451, - 21.434956, - 21.437507, - 21.440103, - 21.442743, - 21.445423, - 21.448142, - 21.450898, - 21.453689, - 21.456513, - 21.459366, - 21.462248, - 21.465154, - 21.468083, - 21.471033, - 21.474001, - 21.476983, - 21.479979, - 21.482985, - 21.485999, - 21.489018, - 21.492039, - 21.495062, - 21.498082, - 21.501098, - 21.504107, - 21.507107, - 21.510097, - 21.513073, - 21.516034, - 21.518979, - 21.521904, - 21.524809, - 21.527691, - 21.53055, - 21.533384, - 21.53619, - 21.538969, - 21.541719, - 21.544439, - 21.547129, - 21.549786, - 21.552411, - 21.555004, - 21.557563, - 21.560089, - 21.562581, - 21.56504, - 21.567465, - 21.569857, - 21.572216, - 21.574543, - 21.576838, - 21.579101, - 21.581335, - 21.583539, - 21.585715, - 21.587863, - 21.589986, - 21.592085, - 21.59416, - 21.596213, - 21.598247, - 21.600262, - 21.602261, - 21.604244, - 21.606215, - 21.608175, - 21.610126, - 21.612069, - 21.614007, - 21.615942, - 21.617876, - 21.619811, - 21.621748, - 21.623691, - 21.62564, - 21.627599, - 21.629568, - 21.63155, - 21.633547, - 21.635561, - 21.637593, - 21.639645, - 21.641719, - 21.643817, - 21.64594, - 21.648089, - 21.650267, - 21.652474, - 21.654712, - 21.656982, - 21.659286, - 21.661623, - 21.663995, - 21.666404, - 21.668849, - 21.671332, - 21.673853, - 21.676412, - 21.67901, - 21.681648, - 21.684325, - 21.687041, - 21.689797, - 21.692592, - 21.695427, - 21.6983, - 21.701212, - 21.704162, - 21.707149, - 21.710173, - 21.713232, - 21.716327, - 21.719456, - 21.722617, - 21.72581, - 21.729034, - 21.732286, - 21.735566, - 21.738872, - 21.742203, - 21.745556, - 21.74893, - 21.752324, - 21.755734, - 21.75916, - 21.762598, - 21.766048, - 21.769506, - 21.772971, - 21.77644, - 21.779911, - 21.783382, - 21.78685, - 21.790313, - 21.793769, - 21.797214, - 21.800647, - 21.804065, - 21.807466, - 21.810846, - 21.814205, - 21.817539, - 21.820845, - 21.824122, - 21.827368, - 21.830579, - 21.833753, - 21.836889, - 21.839984, - 21.843036, - 21.846044, - 21.849004, - 21.851916, - 21.854778, - 21.857587, - 21.860344, - 21.863046, - 21.865692, - 21.868281, - 21.870812, - 21.873285, - 21.875699, - 21.878053, - 21.880348, - 21.882584, - 21.88476, - 21.886877, - 21.888936, - 21.890938, - 21.892884, - 21.894774, - 21.896611, - 21.898395, - 21.90013, - 21.901816, - 21.903456, - 21.905053, - 21.906608, - 21.908124, - 21.909605, - 21.911054, - 21.912472, - 21.913864, - 21.915232, - 21.91658, - 21.917911, - 21.919229, - 21.920536, - 21.921837, - 21.923135, - 21.924432, - 21.925733, - 21.92704, - 21.928358, - 21.929688, - 21.931034, - 21.9324, - 21.933787, - 21.935199, - 21.936638, - 21.938107, - 21.939608, - 21.941144, - 21.942716, - 21.944327, - 21.945978, - 21.947672, - 21.949409, - 21.951191, - 21.95302, - 21.954896, - 21.956821, - 21.958796, - 21.960821, - 21.962897, - 21.965025, - 21.967205, - 21.969437, - 21.971722, - 21.97406, - 21.976451, - 21.978895, - 21.981391, - 21.98394, - 21.986542, - 21.989195, - 21.9919, - 21.994656, - 21.997462, - 22.000317, - 22.003222, - 22.006174, - 22.009174, - 22.01222, - 22.015311, - 22.018446, - 22.021623, - 22.024842, - 22.028101, - 22.031398, - 22.034733, - 22.038103, - 22.041507, - 22.044944, - 22.048411, - 22.051906, - 22.055428, - 22.058975, - 22.062545, - 22.066136, - 22.069746, - 22.073372, - 22.077013, - 22.080666, - 22.08433, - 22.088002, - 22.09168, - 22.095361, - 22.099045, - 22.102729, - 22.10641, - 22.110086, - 22.113757, - 22.117419, - 22.121072, - 22.124713, - 22.12834, - 22.131953, - 22.135549, - 22.139128, - 22.142687, - 22.146227, - 22.149745, - 22.153241, - 22.156714, - 22.160164, - 22.163589, - 22.16699, - 22.170365, - 22.173715, - 22.17704, - 22.180339, - 22.183613, - 22.186861, - 22.190085, - 22.193284, - 22.196459, - 22.199609, - 22.202737, - 22.205842, - 22.208925, - 22.211987, - 22.215028, - 22.218049, - 22.221052, - 22.224036, - 22.227003, - 22.229953, - 22.232887, - 22.235806, - 22.238711, - 22.241603, - 22.244481, - 22.247348, - 22.250204, - 22.253048, - 22.255883, - 22.258708, - 22.261525, - 22.264333, - 22.267133, - 22.269926, - 22.272712, - 22.275492, - 22.278265, - 22.281033, - 22.283794, - 22.286551, - 22.289303, - 22.292049, - 22.294791, - 22.297529, - 22.300262, - 22.302991, - 22.305715, - 22.308436, - 22.311152, - 22.313864, - 22.316572, - 22.319275, - 22.321974, - 22.324669, - 22.32736, - 22.330046, - 22.332727, - 22.335403, - 22.338074, - 22.340739, - 22.343399, - 22.346053, - 22.3487, - 22.351341, - 22.353975, - 22.356602, - 22.35922, - 22.361831, - 22.364433, - 22.367026, - 22.369609, - 22.372182, - 22.374745, - 22.377296, - 22.379836, - 22.382363, - 22.384877, - 22.387378, - 22.389865, - 22.392337, - 22.394794, - 22.397235, - 22.39966, - 22.402068, - 22.404459, - 22.406833, - 22.409188, - 22.411525, - 22.413842, - 22.416141, - 22.41842, - 22.42068, - 22.422919, - 22.425139, - 22.427338, - 22.429518, - 22.431677, - 22.433816, - 22.435936, - 22.438035, - 22.440116, - 22.442177, - 22.444219, - 22.446243, - 22.44825, - 22.450238, - 22.45221, - 22.454166, - 22.456106, - 22.458031, - 22.459941, - 22.461838, - 22.463722, - 22.465594, - 22.467455, - 22.469304, - 22.471144, - 22.472975, - 22.474798, - 22.476613, - 22.478421, - 22.480223, - 22.48202, - 22.483813, - 22.485602, - 22.487388, - 22.489171, - 22.490953, - 22.492735, - 22.494515, - 22.496297, - 22.498079, - 22.499862, - 22.501648, - 22.503436, - 22.505227, - 22.507022, - 22.508821, - 22.510624, - 22.512433, - 22.514246, - 22.516065, - 22.51789, - 22.519721, - 22.521559, - 22.523404, - 22.525255, - 22.527114, - 22.52898, - 22.530854, - 22.532736, - 22.534626, - 22.536524, - 22.53843, - 22.540345, - 22.542267, - 22.544198, - 22.546137, - 22.548084, - 22.55004, - 22.552003, - 22.553975, - 22.555954, - 22.55794, - 22.559934, - 22.561935, - 22.563943, - 22.565957, - 22.567977, - 22.570003, - 22.572034, - 22.57407, - 22.576111, - 22.578155, - 22.580203, - 22.582253, - 22.584306, - 22.58636, - 22.588415, - 22.590471, - 22.592526, - 22.59458, - 22.596632, - 22.598682, - 22.600728, - 22.602771, - 22.604808, - 22.606841, - 22.608867, - 22.610886, - 22.612897, - 22.6149, - 22.616894, - 22.618878, - 22.620851, - 22.622813, - 22.624763, - 22.6267, - 22.628625, - 22.630536, - 22.632432, - 22.634314, - 22.636181, - 22.638032, - 22.639867, - 22.641685, - 22.643487, - 22.645271, - 22.647038, - 22.648787, - 22.650519, - 22.652232, - 22.653927, - 22.655604, - 22.657262, - 22.658902, - 22.660524, - 22.662127, - 22.663711, - 22.665277, - 22.666825, - 22.668354, - 22.669865, - 22.671358, - 22.672833, - 22.67429, - 22.67573, - 22.677152, - 22.678557, - 22.679945, - 22.681317, - 22.682672, - 22.684011, - 22.685333, - 22.686641, - 22.687932, - 22.689209, - 22.690471, - 22.691719, - 22.692952, - 22.694172, - 22.695378, - 22.696571, - 22.697752, - 22.69892, - 22.700076, - 22.701221, - 22.702355, - 22.703478, - 22.70459, - 22.705693, - 22.706786, - 22.70787, - 22.708945, - 22.710012, - 22.711071, - 22.712123, - 22.713168, - 22.714206, - 22.715238, - 22.716264, - 22.717286, - 22.718302, - 22.719314, - 22.720321, - 22.721325, - 22.722326, - 22.723323, - 22.724318, - 22.725311, - 22.726301, - 22.72729, - 22.728278, - 22.729264, - 22.730249, - 22.731234, - 22.732218, - 22.733202, - 22.734185, - 22.735168, - 22.736151, - 22.737133, - 22.738116, - 22.739098, - 22.74008, - 22.741061, - 22.742042, - 22.743023, - 22.744002, - 22.744981, - 22.745959, - 22.746935, - 22.74791, - 22.748884, - 22.749855, - 22.750826, - 22.751794, - 22.75276, - 22.753725, - 22.754688, - 22.75565, - 22.75661, - 22.757568, - 22.758526, - 22.759484, - 22.760441, - 22.761399, - 22.762357, - 22.763318, - 22.76428, - 22.765246, - 22.766216, - 22.76719, - 22.76817, - 22.769156, - 22.77015, - 22.771153, - 22.772165, - 22.773188, - 22.774222, - 22.775269, - 22.776329, - 22.777403, - 22.778493, - 22.779599, - 22.780721, - 22.781861, - 22.783019, - 22.784195, - 22.78539, - 22.786604, - 22.787838, - 22.78909, - 22.790362, - 22.791653, - 22.792963, - 22.794291, - 22.795637, - 22.796999, - 22.798379, - 22.799773, - 22.801183, - 22.802605, - 22.80404, - 22.805486, - 22.806942, - 22.808406, - 22.809877, - 22.811354, - 22.812835, - 22.814318, - 22.815803, - 22.817287, - 22.81877, - 22.820249, - 22.821723, - 22.823191, - 22.824652, - 22.826104, - 22.827545, - 22.828976, - 22.830394, - 22.831799, - 22.833189, - 22.834564, - 22.835923, - 22.837266, - 22.838591, - 22.839899, - 22.841188, - 22.842459, - 22.84371, - 22.844943, - 22.846157, - 22.847352, - 22.848528, - 22.849685, - 22.850823, - 22.851944, - 22.853046, - 22.854131, - 22.855199, - 22.856251, - 22.857288, - 22.858309, - 22.859316, - 22.86031, - 22.861291, - 22.86226, - 22.863218, - 22.864167, - 22.865107, - 22.86604, - 22.866966, - 22.867886, - 22.868802, - 22.869716, - 22.870628, - 22.871539, - 22.872452, - 22.873367, - 22.874286, - 22.875211, - 22.876143, - 22.877084, - 22.878035, - 22.878997, - 22.879974, - 22.880966, - 22.881975, - 22.883003, - 22.884052, - 22.885123, - 22.886219, - 22.88734, - 22.88849, - 22.889669, - 22.89088, - 22.892124, - 22.893402, - 22.894718, - 22.896071, - 22.897464, - 22.898897, - 22.900374, - 22.901894, - 22.903459, - 22.905069, - 22.906727, - 22.908432, - 22.910186, - 22.911989, - 22.913842, - 22.915744, - 22.917696, - 22.919699, - 22.921752, - 22.923854, - 22.926006, - 22.928207, - 22.930456, - 22.932752, - 22.935095, - 22.937484, - 22.939916, - 22.942392, - 22.944909, - 22.947467, - 22.950063, - 22.952696, - 22.955363, - 22.958064, - 22.960796, - 22.963558, - 22.966346, - 22.96916, - 22.971997, - 22.974854, - 22.977731, - 22.980623, - 22.983531, - 22.986451, - 22.98938, - 22.992318, - 22.995262, - 22.99821, - 23.001159, - 23.004109, - 23.007056, - 23.009999, - 23.012937, - 23.015867, - 23.018787, - 23.021696, - 23.024593, - 23.027475, - 23.030342, - 23.033191, - 23.036022, - 23.038833, - 23.041623, - 23.044391, - 23.047135, - 23.049855, - 23.05255, - 23.055218, - 23.057859, - 23.060473, - 23.063057, - 23.065613, - 23.068138, - 23.070633, - 23.073097, - 23.07553, - 23.077932, - 23.080302, - 23.082639, - 23.084945, - 23.087218, - 23.089459, - 23.091668, - 23.093845, - 23.09599, - 23.098104, - 23.100186, - 23.102238, - 23.104259, - 23.10625, - 23.108212, - 23.110146, - 23.112051, - 23.113929, - 23.115781, - 23.117607, - 23.119408, - 23.121186, - 23.122941, - 23.124673, - 23.126385, - 23.128077, - 23.12975, - 23.131406, - 23.133045, - 23.134668, - 23.136277, - 23.137873, - 23.139457, - 23.141029, - 23.142591, - 23.144144, - 23.14569, - 23.147228, - 23.14876, - 23.150287, - 23.15181, - 23.15333, - 23.154848, - 23.156363, - 23.157878, - 23.159393, - 23.160908, - 23.162425, - 23.163943, - 23.165463, - 23.166986, - 23.168513, - 23.170043, - 23.171578, - 23.173117, - 23.17466, - 23.176209, - 23.177763, - 23.179323, - 23.180889, - 23.18246, - 23.184038, - 23.185622, - 23.187213, - 23.188811, - 23.190415, - 23.192026, - 23.193644, - 23.19527, - 23.196903, - 23.198543, - 23.200191, - 23.201846, - 23.203509, - 23.20518, - 23.20686, - 23.208547, - 23.210243, - 23.211947, - 23.213659, - 23.215381, - 23.217111, - 23.21885, - 23.220598, - 23.222355, - 23.224122, - 23.225898, - 23.227684, - 23.22948, - 23.231285, - 23.2331, - 23.234924, - 23.236759, - 23.238603, - 23.240457, - 23.242321, - 23.244195, - 23.246079, - 23.247972, - 23.249875, - 23.251787, - 23.253709, - 23.255639, - 23.257579, - 23.259527, - 23.261485, - 23.26345, - 23.265424, - 23.267406, - 23.269395, - 23.271392, - 23.273396, - 23.275407, - 23.277425, - 23.27945, - 23.281481, - 23.283517, - 23.28556, - 23.287608, - 23.289661, - 23.291719, - 23.293781, - 23.295848, - 23.29792, - 23.299995, - 23.302073, - 23.304156, - 23.306241, - 23.308329, - 23.31042, - 23.312513, - 23.314608, - 23.316704, - 23.318802, - 23.320901, - 23.323001, - 23.325101, - 23.327201, - 23.3293, - 23.331398, - 23.333496, - 23.335591, - 23.337684, - 23.339775, - 23.341862, - 23.343946, - 23.346026, - 23.3481, - 23.35017, - 23.352233, - 23.35429, - 23.35634, - 23.358383, - 23.360417, - 23.362442, - 23.364457, - 23.366462, - 23.368457, - 23.37044, - 23.372411, - 23.374369, - 23.376314, - 23.378245, - 23.380161, - 23.382062, - 23.383948, - 23.385817, - 23.387669, - 23.389504, - 23.391321, - 23.393119, - 23.394899, - 23.396659, - 23.398399, - 23.400118, - 23.401817, - 23.403494, - 23.40515, - 23.406784, - 23.408396, - 23.409985, - 23.411551, - 23.413093, - 23.414612, - 23.416107, - 23.417578, - 23.419025, - 23.420447, - 23.421844, - 23.423216, - 23.424563, - 23.425884, - 23.427179, - 23.428448, - 23.429691, - 23.430907, - 23.432097, - 23.433259, - 23.434394, - 23.435502, - 23.436581, - 23.437632, - 23.438655, - 23.439649, - 23.440614, - 23.44155, - 23.442457, - 23.443335, - 23.444182, - 23.445001, - 23.445789, - 23.446548, - 23.447278, - 23.447978, - 23.44865, - 23.449293, - 23.449908, - 23.450496, - 23.451057, - 23.451592, - 23.452102, - 23.452587, - 23.45305, - 23.453492, - 23.453913, - 23.454315, - 23.4547, - 23.455069, - 23.455424, - 23.455768, - 23.456101, - 23.456426, - 23.456744, - 23.457059, - 23.457371, - 23.457684, - 23.457998, - 23.458317, - 23.458642, - 23.458975, - 23.459318, - 23.459674, - 23.460043, - 23.460428, - 23.46083, - 23.461251, - 23.461693, - 23.462156, - 23.462641, - 23.463151, - 23.463685, - 23.464244, - 23.46483, - 23.465442, - 23.466081, - 23.466747, - 23.46744, - 23.46816, - 23.468907, - 23.46968, - 23.47048, - 23.471305, - 23.472155, - 23.473029, - 23.473926, - 23.474846, - 23.475788, - 23.47675, - 23.477731, - 23.478731, - 23.479748, - 23.480781, - 23.481829, - 23.48289, - 23.483965, - 23.48505, - 23.486147, - 23.487252, - 23.488365, - 23.489485, - 23.490612, - 23.491743, - 23.492878, - 23.494015, - 23.495155, - 23.496296, - 23.497437, - 23.498577, - 23.499715, - 23.500851, - 23.501984, - 23.503113, - 23.504237, - 23.505355, - 23.506468, - 23.507573, - 23.508671, - 23.50976, - 23.51084, - 23.511911, - 23.512971, - 23.51402, - 23.515058, - 23.516084, - 23.517097, - 23.518096, - 23.519082, - 23.520053, - 23.52101, - 23.521951, - 23.522877, - 23.523787, - 23.524681, - 23.525559, - 23.52642, - 23.527264, - 23.528091, - 23.528902, - 23.529697, - 23.530475, - 23.531238, - 23.531984, - 23.532716, - 23.533433, - 23.534136, - 23.534825, - 23.535503, - 23.536168, - 23.536823, - 23.537468, - 23.538105, - 23.538734, - 23.539357, - 23.539975, - 23.540589, - 23.5412, - 23.54181, - 23.542421, - 23.543033, - 23.543647, - 23.544266, - 23.54489, - 23.545521, - 23.54616, - 23.546807, - 23.547465, - 23.548134, - 23.548815, - 23.54951, - 23.550218, - 23.550942, - 23.551681, - 23.552436, - 23.553207, - 23.553996, - 23.554802, - 23.555626, - 23.556467, - 23.557327, - 23.558204, - 23.5591, - 23.560013, - 23.560943, - 23.561891, - 23.562856, - 23.563837, - 23.564835, - 23.565847, - 23.566875, - 23.567917, - 23.568973, - 23.570043, - 23.571124, - 23.572218, - 23.573323, - 23.574438, - 23.575563, - 23.576698, - 23.577841, - 23.578991, - 23.580149, - 23.581314, - 23.582484, - 23.58366, - 23.58484, - 23.586025, - 23.587213, - 23.588404, - 23.589598, - 23.590794, - 23.591992, - 23.59319, - 23.59439, - 23.595589, - 23.596789, - 23.597987, - 23.599185, - 23.600381, - 23.601576, - 23.602768, - 23.603958, - 23.605145, - 23.606329, - 23.607509, - 23.608685, - 23.609857, - 23.611024, - 23.612187, - 23.613345, - 23.614497, - 23.615643, - 23.616784, - 23.617919, - 23.619047, - 23.620169, - 23.621284, - 23.622393, - 23.623495, - 23.624591, - 23.625679, - 23.626761, - 23.627837, - 23.628905, - 23.629968, - 23.631024, - 23.632074, - 23.633119, - 23.634158, - 23.635192, - 23.636221, - 23.637246, - 23.638267, - 23.639284, - 23.640299, - 23.641311, - 23.642321, - 23.64333, - 23.644338, - 23.645346, - 23.646354, - 23.647363, - 23.648373, - 23.649386, - 23.650401, - 23.651418, - 23.65244, - 23.653465, - 23.654494, - 23.655529, - 23.656568, - 23.657613, - 23.658664, - 23.65972, - 23.660783, - 23.661852, - 23.662928, - 23.66401, - 23.665098, - 23.666193, - 23.667295, - 23.668403, - 23.669517, - 23.670637, - 23.671763, - 23.672895, - 23.674032, - 23.675174, - 23.67632, - 23.67747, - 23.678625, - 23.679782, - 23.680943, - 23.682106, - 23.683272, - 23.684439, - 23.685607, - 23.686776, - 23.687945, - 23.689113, - 23.690281, - 23.691448, - 23.692614, - 23.693777, - 23.694937, - 23.696095, - 23.697249, - 23.6984, - 23.699546, - 23.700687, - 23.701824, - 23.702955, - 23.704081, - 23.7052, - 23.706313, - 23.707419, - 23.708519, - 23.70961, - 23.710695, - 23.711771, - 23.712839, - 23.713898, - 23.714949, - 23.715991, - 23.717024, - 23.718047, - 23.719061, - 23.720065, - 23.721059, - 23.722042, - 23.723016, - 23.72398, - 23.724933, - 23.725875, - 23.726808, - 23.72773, - 23.728641, - 23.729543, - 23.730434, - 23.731315, - 23.732186, - 23.733048, - 23.7339, - 23.734743, - 23.735578, - 23.736405, - 23.737223, - 23.738034, - 23.738838, - 23.739636, - 23.740428, - 23.741215, - 23.741997, - 23.742776, - 23.743551, - 23.744324, - 23.745095, - 23.745865, - 23.746635, - 23.747405, - 23.748177, - 23.748951, - 23.749728, - 23.750509, - 23.751294, - 23.752085, - 23.752881, - 23.753685, - 23.754495, - 23.755314, - 23.756142, - 23.75698, - 23.757827, - 23.758686, - 23.759555, - 23.760437, - 23.76133, - 23.762237, - 23.763156, - 23.764089, - 23.765036, - 23.765997, - 23.766973, - 23.767962, - 23.768967, - 23.769987, - 23.771021, - 23.772071, - 23.773135, - 23.774215, - 23.775309, - 23.776419, - 23.777543, - 23.778681, - 23.779835, - 23.781002, - 23.782183, - 23.783378, - 23.784587, - 23.785808, - 23.787042, - 23.788289, - 23.789547, - 23.790817, - 23.792098, - 23.79339, - 23.794692, - 23.796004, - 23.797325, - 23.798655, - 23.799993, - 23.801339, - 23.802692, - 23.804051, - 23.805416, - 23.806787, - 23.808163, - 23.809542, - 23.810925, - 23.81231, - 23.813698, - 23.815087, - 23.816476, - 23.817864, - 23.819252, - 23.820638, - 23.82202, - 23.823399, - 23.824774, - 23.826143, - 23.827506, - 23.828862, - 23.830211, - 23.83155, - 23.832881, - 23.834201, - 23.835511, - 23.83681, - 23.838097, - 23.839371, - 23.840634, - 23.841883, - 23.84312, - 23.844343, - 23.845553, - 23.84675, - 23.847935, - 23.849106, - 23.850266, - 23.851414, - 23.85255, - 23.853677, - 23.854793, - 23.855901, - 23.857001, - 23.858094, - 23.859181, - 23.860263, - 23.861341, - 23.862417, - 23.863491, - 23.864565, - 23.86564, - 23.866717, - 23.867796, - 23.86888, - 23.869968, - 23.871063, - 23.872164, - 23.873273, - 23.874389, - 23.875514, - 23.876649, - 23.877792, - 23.878945, - 23.880108, - 23.88128, - 23.882462, - 23.883653, - 23.884852, - 23.88606, - 23.887275, - 23.888497, - 23.889725, - 23.890958, - 23.892196, - 23.893436, - 23.894678, - 23.895921, - 23.897163, - 23.898403, - 23.899641, - 23.900874, - 23.902101, - 23.903321, - 23.904533, - 23.905736, - 23.906928, - 23.908108, - 23.909275, - 23.910428, - 23.911565, - 23.912687, - 23.913792, - 23.914878, - 23.915947, - 23.916996, - 23.918025, - 23.919034, - 23.920022, - 23.920989, - 23.921934, - 23.922857, - 23.923759, - 23.924638, - 23.925495, - 23.92633, - 23.927144, - 23.927935, - 23.928705, - 23.929454, - 23.930182, - 23.930889, - 23.931575, - 23.932242, - 23.93289, - 23.933519, - 23.93413, - 23.934724, - 23.935301, - 23.935862, - 23.936407, - 23.936939, - 23.937456, - 23.937961, - 23.938455, - 23.938937, - 23.93941, - 23.939874, - 23.940331, - 23.940782, - 23.941228, - 23.94167, - 23.94211, - 23.942549, - 23.942989, - 23.94343, - 23.943875, - 23.944325, - 23.944782, - 23.945248, - 23.945723, - 23.94621, - 23.946711, - 23.947226, - 23.947759, - 23.94831, - 23.948881, - 23.949475, - 23.950092, - 23.950734, - 23.951403, - 23.9521, - 23.952827, - 23.953584, - 23.954375, - 23.955198, - 23.956056, - 23.95695, - 23.95788, - 23.958847, - 23.959853, - 23.960896, - 23.961978, - 23.963099, - 23.964259, - 23.965458, - 23.966696, - 23.967972, - 23.969287, - 23.970639, - 23.972027, - 23.973452, - 23.974911, - 23.976405, - 23.977931, - 23.979489, - 23.981076, - 23.982693, - 23.984336, - 23.986005, - 23.987698, - 23.989412, - 23.991147, - 23.9929, - 23.99467, - 23.996454, - 23.998251, - 24.000058, - 24.001875, - 24.003698, - 24.005527, - 24.007358, - 24.009191, - 24.011024, - 24.012854, - 24.01468, - 24.0165, - 24.018313, - 24.020117, - 24.021911, - 24.023692, - 24.02546, - 24.027213, - 24.02895, - 24.030669, - 24.03237, - 24.034051, - 24.035711, - 24.037349, - 24.038965, - 24.040556, - 24.042123, - 24.043665, - 24.045181, - 24.04667, - 24.048132, - 24.049565, - 24.050971, - 24.052348, - 24.053696, - 24.055014, - 24.056302, - 24.057561, - 24.05879, - 24.059988, - 24.061157, - 24.062295, - 24.063404, - 24.064482, - 24.065531, - 24.066551, - 24.067541, - 24.068503, - 24.069436, - 24.070342, - 24.071221, - 24.072072, - 24.072898, - 24.073699, - 24.074475, - 24.075228, - 24.075957, - 24.076665, - 24.077351, - 24.078018, - 24.078665, - 24.079294, - 24.079905, - 24.080501, - 24.081082, - 24.081648, - 24.082202, - 24.082744, - 24.083275, - 24.083797, - 24.084309, - 24.084814, - 24.085313, - 24.085806, - 24.086294, - 24.086778, - 24.087259, - 24.087739, - 24.088217, - 24.088694, - 24.089172, - 24.089651, - 24.090131, - 24.090613, - 24.091098, - 24.091585, - 24.092077, - 24.092572, - 24.093071, - 24.093575, - 24.094083, - 24.094597, - 24.095115, - 24.095638, - 24.096167, - 24.096701, - 24.097241, - 24.097786, - 24.098336, - 24.098891, - 24.099452, - 24.100018, - 24.100589, - 24.101165, - 24.101746, - 24.102332, - 24.102922, - 24.103517, - 24.104116, - 24.104719, - 24.105327, - 24.105939, - 24.106554, - 24.107174, - 24.107797, - 24.108423, - 24.109053, - 24.109686, - 24.110322, - 24.110961, - 24.111603, - 24.112247, - 24.112895, - 24.113544, - 24.114196, - 24.11485, - 24.115505, - 24.116163, - 24.116821, - 24.117481, - 24.118143, - 24.118805, - 24.119467, - 24.12013, - 24.120793, - 24.121456, - 24.122118, - 24.12278, - 24.12344, - 24.1241, - 24.124757, - 24.125413, - 24.126067, - 24.126718, - 24.127366, - 24.128011, - 24.128653, - 24.129291, - 24.129926, - 24.130556, - 24.131182, - 24.131804, - 24.132421, - 24.133032, - 24.133639, - 24.13424, - 24.134836, - 24.135427, - 24.136011, - 24.13659, - 24.137163, - 24.137729, - 24.13829, - 24.138844, - 24.139392, - 24.139934, - 24.140469, - 24.140998, - 24.14152, - 24.142035, - 24.142544, - 24.143046, - 24.143541, - 24.14403, - 24.144511, - 24.144985, - 24.145452, - 24.145912, - 24.146364, - 24.146809, - 24.147246, - 24.147675, - 24.148096, - 24.148509, - 24.148913, - 24.149309, - 24.149696, - 24.150075, - 24.150444, - 24.150804, - 24.151155, - 24.151495, - 24.151826, - 24.152147, - 24.152458, - 24.152759, - 24.153049, - 24.153328, - 24.153597, - 24.153855, - 24.154102, - 24.154338, - 24.154562, - 24.154776, - 24.154979, - 24.155171, - 24.155351, - 24.155521, - 24.15568, - 24.155828, - 24.155966, - 24.156093, - 24.156209, - 24.156316, - 24.156413, - 24.1565, - 24.156577, - 24.156646, - 24.156706, - 24.156757, - 24.156799, - 24.156834, - 24.156861, - 24.15688, - 24.156892, - 24.156897, - 24.156895, - 24.156887, - 24.156872, - 24.156852, - 24.156825, - 24.156793, - 24.156755, - 24.156711, - 24.156663, - 24.156609, - 24.156551, - 24.156488, - 24.156421, - 24.15635, - 24.156275, - 24.156197, - 24.156116, - 24.156033, - 24.155947, - 24.15586, - 24.155772, - 24.155685, - 24.155598, - 24.155512, - 24.155429, - 24.15535, - 24.155275, - 24.155206, - 24.155144, - 24.155091, - 24.155047, - 24.155015, - 24.154995, - 24.154989, - 24.154998, - 24.155025, - 24.155071, - 24.155137, - 24.155225, - 24.155336, - 24.155471, - 24.155634, - 24.155823, - 24.156041, - 24.15629, - 24.156569, - 24.156881, - 24.157225, - 24.157603, - 24.158015, - 24.158461, - 24.158943, - 24.15946, - 24.160011, - 24.160598, - 24.161219, - 24.161874, - 24.162563, - 24.163285, - 24.164039, - 24.164823, - 24.165637, - 24.16648, - 24.16735, - 24.168245, - 24.169165, - 24.170107, - 24.17107, - 24.172052, - 24.173051, - 24.174066, - 24.175095, - 24.176135, - 24.177185, - 24.178244, - 24.179308, - 24.180378, - 24.18145, - 24.182523, - 24.183596, - 24.184667, - 24.185734, - 24.186796, - 24.187851, - 24.188899, - 24.189938, - 24.190966, - 24.191984, - 24.192989, - 24.19398, - 24.194957, - 24.195919, - 24.196866, - 24.197796, - 24.198708, - 24.199603, - 24.20048, - 24.201338, - 24.202177, - 24.202996, - 24.203795, - 24.204575, - 24.205333, - 24.206071, - 24.206788, - 24.207485, - 24.20816, - 24.208814, - 24.209447, - 24.210059, - 24.210649, - 24.211219, - 24.211768, - 24.212297, - 24.212805, - 24.213293, - 24.213762, - 24.214211, - 24.214642, - 24.215054, - 24.215449, - 24.215827, - 24.216189, - 24.216536, - 24.216868, - 24.217187, - 24.217494, - 24.217789, - 24.218074, - 24.218351, - 24.21862, - 24.218882, - 24.21914, - 24.219395, - 24.219647, - 24.219899, - 24.220152, - 24.220408, - 24.220668, - 24.220934, - 24.221206, - 24.221488, - 24.221779, - 24.222082, - 24.222398, - 24.222729, - 24.223075, - 24.223437, - 24.223818, - 24.224218, - 24.224637, - 24.225078, - 24.225539, - 24.226024, - 24.226531, - 24.227061, - 24.227615, - 24.228193, - 24.228795, - 24.229421, - 24.230071, - 24.230746, - 24.231444, - 24.232166, - 24.232911, - 24.233678, - 24.234468, - 24.235279, - 24.236111, - 24.236963, - 24.237835, - 24.238725, - 24.239634, - 24.240559, - 24.2415, - 24.242457, - 24.243428, - 24.244412, - 24.24541, - 24.246419, - 24.247439, - 24.24847, - 24.24951, - 24.250558, - 24.251615, - 24.252679, - 24.25375, - 24.254826, - 24.255909, - 24.256996, - 24.258087, - 24.259183, - 24.260282, - 24.261384, - 24.262488, - 24.263596, - 24.264705, - 24.265816, - 24.266929, - 24.268043, - 24.269158, - 24.270275, - 24.271392, - 24.272509, - 24.273627, - 24.274746, - 24.275864, - 24.276983, - 24.278102, - 24.279221, - 24.28034, - 24.281459, - 24.282578, - 24.283697, - 24.284815, - 24.285934, - 24.287052, - 24.28817, - 24.289288, - 24.290406, - 24.291525, - 24.292643, - 24.293762, - 24.294881, - 24.296002, - 24.297123, - 24.298245, - 24.299368, - 24.300493, - 24.30162, - 24.302748, - 24.30388, - 24.305013, - 24.30615, - 24.30729, - 24.308434, - 24.309582, - 24.310734, - 24.311891, - 24.313053, - 24.31422, - 24.315393, - 24.316571, - 24.317756, - 24.318948, - 24.320146, - 24.32135, - 24.322562, - 24.323781, - 24.325007, - 24.326241, - 24.327481, - 24.328729, - 24.329984, - 24.331246, - 24.332515, - 24.333791, - 24.335072, - 24.33636, - 24.337653, - 24.338952, - 24.340255, - 24.341563, - 24.342874, - 24.344188, - 24.345505, - 24.346824, - 24.348144, - 24.349465, - 24.350785, - 24.352105, - 24.353423, - 24.354739, - 24.356053, - 24.357362, - 24.358667, - 24.359967, - 24.36126, - 24.362548, - 24.363828, - 24.3651, - 24.366363, - 24.367617, - 24.368862, - 24.370096, - 24.371318, - 24.372529, - 24.373728, - 24.374915, - 24.376088, - 24.377248, - 24.378393, - 24.379524, - 24.380641, - 24.381742, - 24.382827, - 24.383897, - 24.38495, - 24.385987, - 24.387007, - 24.38801, - 24.388995, - 24.389963, - 24.390913, - 24.391846, - 24.392759, - 24.393655, - 24.394531, - 24.395389, - 24.396228, - 24.397048, - 24.397848, - 24.398629, - 24.399391, - 24.400133, - 24.400856, - 24.40156, - 24.402243, - 24.402908, - 24.403553, - 24.404179, - 24.404785, - 24.405373, - 24.405942, - 24.406493, - 24.407025, - 24.407539, - 24.408036, - 24.408515, - 24.408978, - 24.409424, - 24.409854, - 24.410269, - 24.410669, - 24.411055, - 24.411427, - 24.411786, - 24.412132, - 24.412467, - 24.41279, - 24.413103, - 24.413406, - 24.4137, - 24.413985, - 24.414263, - 24.414533, - 24.414797, - 24.415055, - 24.415309, - 24.415557, - 24.415802, - 24.416044, - 24.416283, - 24.41652, - 24.416756, - 24.41699, - 24.417224, - 24.417458, - 24.417692, - 24.417928, - 24.418164, - 24.418402, - 24.418641, - 24.418883, - 24.419128, - 24.419375, - 24.419624, - 24.419877, - 24.420133, - 24.420392, - 24.420655, - 24.420921, - 24.42119, - 24.421463, - 24.42174, - 24.42202, - 24.422303, - 24.42259, - 24.422881, - 24.423174, - 24.423471, - 24.42377, - 24.424072, - 24.424377, - 24.424685, - 24.424995, - 24.425307, - 24.425621, - 24.425937, - 24.426254, - 24.426573, - 24.426893, - 24.427213, - 24.427534, - 24.427854, - 24.428175, - 24.428495, - 24.428814, - 24.429131, - 24.429446, - 24.429759, - 24.430069, - 24.430376, - 24.430679, - 24.430977, - 24.43127, - 24.431558, - 24.43184, - 24.432115, - 24.432382, - 24.432643, - 24.432895, - 24.433138, - 24.433373, - 24.433598, - 24.433814, - 24.43402, - 24.434216, - 24.434402, - 24.434578, - 24.434745, - 24.434902, - 24.435049, - 24.435188, - 24.435319, - 24.435442, - 24.435557, - 24.435667, - 24.435771, - 24.43587, - 24.435966, - 24.43606, - 24.436153, - 24.436245, - 24.436339, - 24.436436, - 24.436536, - 24.436642, - 24.436754, - 24.436873, - 24.437002, - 24.437141, - 24.437291, - 24.437453, - 24.437629, - 24.437819, - 24.438024, - 24.438244, - 24.438481, - 24.438735, - 24.439006, - 24.439295, - 24.439601, - 24.439924, - 24.440265, - 24.440623, - 24.440997, - 24.441387, - 24.441793, - 24.442213, - 24.442647, - 24.443094, - 24.443553, - 24.444022, - 24.444501, - 24.444988, - 24.445482, - 24.445981, - 24.446485, - 24.446991, - 24.447499, - 24.448007, - 24.448514, - 24.449017, - 24.449517, - 24.450012, - 24.4505, - 24.450981, - 24.451453, - 24.451915, - 24.452366, - 24.452806, - 24.453233, - 24.453646, - 24.454045, - 24.45443, - 24.454799, - 24.455152, - 24.455489, - 24.455809, - 24.456112, - 24.456398, - 24.456667, - 24.456917, - 24.45715, - 24.457365, - 24.457563, - 24.457743, - 24.457905, - 24.458049, - 24.458176, - 24.458286, - 24.458379, - 24.458455, - 24.458515, - 24.458559, - 24.458587, - 24.4586, - 24.458598, - 24.458581, - 24.458551, - 24.458506, - 24.458449, - 24.45838, - 24.458299, - 24.458207, - 24.458105, - 24.457994, - 24.457874, - 24.457747, - 24.457612, - 24.457473, - 24.457328, - 24.45718, - 24.45703, - 24.456879, - 24.456728, - 24.456579, - 24.456433, - 24.456291, - 24.456154, - 24.456025, - 24.455904, - 24.455794, - 24.455695, - 24.45561, - 24.455538, - 24.455483, - 24.455446, - 24.455427, - 24.455428, - 24.455451, - 24.455496, - 24.455565, - 24.455659, - 24.455779, - 24.455925, - 24.456099, - 24.456301, - 24.456532, - 24.456791, - 24.457081, - 24.4574, - 24.457748, - 24.458127, - 24.458535, - 24.458972, - 24.459439, - 24.459933, - 24.460456, - 24.461005, - 24.461581, - 24.462182, - 24.462807, - 24.463455, - 24.464125, - 24.464815, - 24.465525, - 24.466253, - 24.466997, - 24.467755, - 24.468528, - 24.469312, - 24.470106, - 24.47091, - 24.47172, - 24.472536, - 24.473356, - 24.474179, - 24.475002, - 24.475825, - 24.476646, - 24.477464, - 24.478277, - 24.479084, - 24.479884, - 24.480675, - 24.481457, - 24.482228, - 24.482987, - 24.483733, - 24.484465, - 24.485183, - 24.485885, - 24.486572, - 24.487241, - 24.487893, - 24.488526, - 24.489141, - 24.489737, - 24.490314, - 24.49087, - 24.491406, - 24.491922, - 24.492417, - 24.492892, - 24.493345, - 24.493778, - 24.49419, - 24.494581, - 24.494952, - 24.495302, - 24.495631, - 24.495941, - 24.496231, - 24.496502, - 24.496754, - 24.496987, - 24.497203, - 24.497402, - 24.497585, - 24.497751, - 24.497903, - 24.49804, - 24.498164, - 24.498276, - 24.498377, - 24.498466, - 24.498547, - 24.498619, - 24.498684, - 24.498743, - 24.498797, - 24.498847, - 24.498895, - 24.498942, - 24.498988, - 24.499036, - 24.499086, - 24.49914, - 24.499199, - 24.499264, - 24.499336, - 24.499416, - 24.499507, - 24.499607, - 24.49972, - 24.499845, - 24.499984, - 24.500137, - 24.500306, - 24.50049, - 24.500692, - 24.500912, - 24.501149, - 24.501406, - 24.501681, - 24.501976, - 24.502291, - 24.502626, - 24.502982, - 24.503359, - 24.503756, - 24.504173, - 24.504612, - 24.505071, - 24.505551, - 24.506051, - 24.506572, - 24.507112, - 24.507672, - 24.508251, - 24.508849, - 24.509465, - 24.5101, - 24.510752, - 24.511422, - 24.512109, - 24.512811, - 24.51353, - 24.514263, - 24.515012, - 24.515774, - 24.51655, - 24.51734, - 24.518142, - 24.518955, - 24.519781, - 24.520617, - 24.521463, - 24.52232, - 24.523185, - 24.524059, - 24.524941, - 24.525831, - 24.526727, - 24.52763, - 24.528538, - 24.529452, - 24.53037, - 24.531292, - 24.532217, - 24.533145, - 24.534074, - 24.535006, - 24.535938, - 24.53687, - 24.537801, - 24.538732, - 24.539661, - 24.540587, - 24.54151, - 24.54243, - 24.543346, - 24.544257, - 24.545163, - 24.546062, - 24.546956, - 24.547842, - 24.548721, - 24.549593, - 24.550456, - 24.55131, - 24.552155, - 24.552991, - 24.553816, - 24.554632, - 24.555437, - 24.556232, - 24.557016, - 24.557789, - 24.55855, - 24.5593, - 24.560039, - 24.560766, - 24.561481, - 24.562185, - 24.562877, - 24.563557, - 24.564225, - 24.564881, - 24.565526, - 24.566158, - 24.566779, - 24.567388, - 24.567986, - 24.568571, - 24.569145, - 24.569707, - 24.570257, - 24.570796, - 24.571322, - 24.571837, - 24.572341, - 24.572832, - 24.573311, - 24.573779, - 24.574234, - 24.574677, - 24.575108, - 24.575526, - 24.575933, - 24.576326, - 24.576707, - 24.577075, - 24.57743, - 24.577772, - 24.5781, - 24.578415, - 24.578717, - 24.579005 - ], - "yaxis": "y3" - }, - { - "mode": "lines", - "name": " GenPwr", - "type": "scatter", - "xaxis": "x4", - "y": [ - 1181.458304, - 1175.209399, - 1169.102789, - 1163.136929, - 1157.347729, - 1151.759401, - 1146.393857, - 1141.270585, - 1136.406538, - 1131.816095, - 1127.511048, - 1123.500612, - 1119.791471, - 1116.387844, - 1113.291583, - 1110.502283, - 1108.017425, - 1105.832531, - 1103.941331, - 1102.335953, - 1101.007116, - 1099.944338, - 1099.136144, - 1098.570282, - 1098.233941, - 1098.11396, - 1098.19704, - 1098.469947, - 1098.919702, - 1099.533759, - 1100.300173, - 1101.207745, - 1102.246152, - 1103.406053, - 1104.679174, - 1106.058372, - 1107.53767, - 1109.112273, - 1110.778554, - 1112.53402, - 1114.377253, - 1116.307833, - 1118.326239, - 1120.433731, - 1122.632215, - 1124.924102, - 1127.312149, - 1129.799293, - 1132.388483, - 1135.082512, - 1137.88384, - 1140.794435, - 1143.815607, - 1146.947863, - 1150.190764, - 1153.542805, - 1157.001301, - 1160.562302, - 1164.220518, - 1167.969271, - 1171.800464, - 1175.70458, - 1179.670696, - 1183.686525, - 1187.738479, - 1191.811753, - 1195.890439, - 1199.957645, - 1203.995648, - 1207.986054, - 1211.909977, - 1215.74823, - 1219.481525, - 1223.090679, - 1226.556827, - 1229.86163, - 1232.987489, - 1235.917736, - 1238.636837, - 1241.130589, - 1243.386253, - 1245.392738, - 1247.140707, - 1248.622692, - 1249.833174, - 1250.768644, - 1251.42763, - 1251.810706, - 1251.920471, - 1251.761501, - 1251.340279, - 1250.665103, - 1249.745969, - 1248.59444, - 1247.223493, - 1245.647352, - 1243.88132, - 1241.941586, - 1239.845043, - 1237.609091, - 1235.251448, - 1232.789962, - 1230.242428, - 1227.626416, - 1224.959105, - 1222.257137, - 1219.536473, - 1216.812281, - 1214.098822, - 1211.409367, - 1208.75613, - 1206.150205, - 1203.601545, - 1201.118936, - 1198.710004, - 1196.381229, - 1194.13798, - 1191.984564, - 1189.924284, - 1187.959511, - 1186.091769, - 1184.321822, - 1182.64977, - 1181.075156, - 1179.597069, - 1178.214252, - 1176.925211, - 1175.728317, - 1174.621918, - 1173.604417, - 1172.674381, - 1171.830609, - 1171.07221, - 1170.398665, - 1169.809876, - 1169.306203, - 1168.888495, - 1168.558097, - 1168.316858, - 1168.167113, - 1168.111662, - 1168.153741, - 1168.296973, - 1168.545282, - 1168.902864, - 1169.37407, - 1169.963428, - 1170.675443, - 1171.514519, - 1172.484901, - 1173.590649, - 1174.835405, - 1176.222444, - 1177.754498, - 1179.43372, - 1181.261582, - 1183.23882, - 1185.365359, - 1187.640293, - 1190.061811, - 1192.627185, - 1195.332699, - 1198.17374, - 1201.144686, - 1204.238993, - 1207.449201, - 1210.766965, - 1214.1831, - 1217.687626, - 1221.269867, - 1224.918479, - 1228.621563, - 1232.366769, - 1236.141352, - 1239.932322, - 1243.726514, - 1247.510719, - 1251.271768, - 1254.99668, - 1258.672728, - 1262.287572, - 1265.829347, - 1269.286755, - 1272.649164, - 1275.906668, - 1279.050174, - 1282.071448, - 1284.963171, - 1287.718969, - 1290.333444, - 1292.802182, - 1295.121756, - 1297.289716, - 1299.304561, - 1301.165713, - 1302.873476, - 1304.428975, - 1305.834106, - 1307.091465, - 1308.204274, - 1309.176308, - 1310.01181, - 1310.715415, - 1311.292065, - 1311.746925, - 1312.08531, - 1312.312604, - 1312.434192, - 1312.455392, - 1312.381399, - 1312.217229, - 1311.967673, - 1311.637266, - 1311.230252, - 1310.750572, - 1310.201849, - 1309.587384, - 1308.91017, - 1308.172897, - 1307.37798, - 1306.527586, - 1305.623667, - 1304.667998, - 1303.662225, - 1302.607907, - 1301.506561, - 1300.359711, - 1299.168964, - 1297.936027, - 1296.662772, - 1295.351266, - 1294.003857, - 1292.623146, - 1291.212076, - 1289.773923, - 1288.312333, - 1286.831321, - 1285.335291, - 1283.829021, - 1282.317651, - 1280.806657, - 1279.301903, - 1277.809497, - 1276.33586, - 1274.887625, - 1273.471605, - 1272.094754, - 1270.764098, - 1269.486692, - 1268.269555, - 1267.119614, - 1266.043643, - 1265.048206, - 1264.139599, - 1263.323795, - 1262.606395, - 1261.992575, - 1261.487038, - 1261.093983, - 1260.817061, - 1260.65935, - 1260.623329, - 1260.710859, - 1260.923175, - 1261.260873, - 1261.723914, - 1262.311629, - 1263.022732, - 1263.855337, - 1264.806978, - 1265.874642, - 1267.054798, - 1268.343432, - 1269.736095, - 1271.227939, - 1272.813765, - 1274.488076, - 1276.245121, - 1278.078948, - 1279.983456, - 1281.952441, - 1283.979652, - 1286.058833, - 1288.183767, - 1290.348327, - 1292.546504, - 1294.772453, - 1297.020515, - 1299.285252, - 1301.561465, - 1303.844213, - 1306.128827, - 1308.410914, - 1310.686364, - 1312.951349, - 1315.202312, - 1317.435962, - 1319.649256, - 1321.839383, - 1324.003744, - 1326.139926, - 1328.245683, - 1330.3189, - 1332.357575, - 1334.359787, - 1336.323669, - 1338.247322, - 1340.128854, - 1341.966466, - 1343.758166, - 1345.502032, - 1347.19602, - 1348.838023, - 1350.425851, - 1351.957232, - 1353.429808, - 1354.841147, - 1356.18875, - 1357.470065, - 1358.682506, - 1359.823474, - 1360.890379, - 1361.880668, - 1362.791861, - 1363.621598, - 1364.367608, - 1365.027828, - 1365.60037, - 1366.083589, - 1366.476108, - 1366.776847, - 1366.985055, - 1367.100337, - 1367.122678, - 1367.052467, - 1366.890511, - 1366.638047, - 1366.296756, - 1365.868764, - 1365.356644, - 1364.76341, - 1364.092506, - 1363.347798, - 1362.533548, - 1361.654399, - 1360.715345, - 1359.7217, - 1358.679069, - 1357.593312, - 1356.470501, - 1355.316887, - 1354.138855, - 1352.942885, - 1351.735507, - 1350.523263, - 1349.312663, - 1348.110147, - 1346.922047, - 1345.754549, - 1344.613661, - 1343.50518, - 1342.434664, - 1341.407406, - 1340.428414, - 1339.50239, - 1338.633716, - 1337.826439, - 1337.084269, - 1336.410569, - 1335.808354, - 1335.280296, - 1334.828724, - 1334.455636, - 1334.162706, - 1333.951297, - 1333.822475, - 1333.777027, - 1333.815474, - 1333.938089, - 1334.144923, - 1334.435813, - 1334.810408, - 1335.268187, - 1335.808478, - 1336.430471, - 1337.133242, - 1337.915758, - 1338.776901, - 1339.715472, - 1340.73021, - 1341.819787, - 1342.982826, - 1344.217899, - 1345.523533, - 1346.89821, - 1348.340359, - 1349.84836, - 1351.420536, - 1353.055143, - 1354.750369, - 1356.50432, - 1358.315012, - 1360.180359, - 1362.098166, - 1364.066111, - 1366.081746, - 1368.142474, - 1370.245552, - 1372.388076, - 1374.566975, - 1376.779008, - 1379.02076, - 1381.288641, - 1383.578886, - 1385.887559, - 1388.210558, - 1390.543626, - 1392.882355, - 1395.222202, - 1397.55851, - 1399.886514, - 1402.201373, - 1404.498185, - 1406.772011, - 1409.017901, - 1411.230921, - 1413.406181, - 1415.538856, - 1417.62422, - 1419.657687, - 1421.634814, - 1423.551355, - 1425.403271, - 1427.186764, - 1428.8983, - 1430.53463, - 1432.092812, - 1433.570232, - 1434.964616, - 1436.274046, - 1437.49697, - 1438.632212, - 1439.678973, - 1440.636837, - 1441.505766, - 1442.286101, - 1442.978554, - 1443.584195, - 1444.104447, - 1444.541067, - 1444.89613, - 1445.172015, - 1445.371382, - 1445.497149, - 1445.552478, - 1445.540741, - 1445.465505, - 1445.330504, - 1445.139616, - 1444.896839, - 1444.606268, - 1444.272073, - 1443.898473, - 1443.489721, - 1443.050083, - 1442.583816, - 1442.095154, - 1441.588294, - 1441.067379, - 1440.53649, - 1439.999628, - 1439.460716, - 1438.923581, - 1438.391954, - 1437.869463, - 1437.359632, - 1436.865874, - 1436.391497, - 1435.939697, - 1435.51356, - 1435.116067, - 1434.750089, - 1434.418392, - 1434.123641, - 1433.868397, - 1433.655122, - 1433.486177, - 1433.363828, - 1433.290239, - 1433.26748, - 1433.297518, - 1433.382222, - 1433.523355, - 1433.722575, - 1433.98143, - 1434.301351, - 1434.683649, - 1435.129506, - 1435.639974, - 1436.21596, - 1436.85822, - 1437.567363, - 1438.343824, - 1439.187872, - 1440.099595, - 1441.078891, - 1442.125467, - 1443.238826, - 1444.418264, - 1445.662866, - 1446.9715, - 1448.342817, - 1449.775242, - 1451.266985, - 1452.81603, - 1454.420145, - 1456.076885, - 1457.783589, - 1459.537404, - 1461.335274, - 1463.173965, - 1465.050069, - 1466.960018, - 1468.900097, - 1470.866462, - 1472.855155, - 1474.86212, - 1476.883222, - 1478.914268, - 1480.951023, - 1482.989232, - 1485.024638, - 1487.053004, - 1489.070133, - 1491.071885, - 1493.054198, - 1495.013107, - 1496.94476, - 1498.845435, - 1500.711555, - 1502.539707, - 1504.326649, - 1506.069325, - 1507.764875, - 1509.410644, - 1511.004192, - 1512.543293, - 1514.025942, - 1515.450352, - 1516.814986, - 1518.11851, - 1519.359836, - 1520.538088, - 1521.652619, - 1522.702994, - 1523.688989, - 1524.610588, - 1525.467967, - 1526.261496, - 1526.991724, - 1527.659373, - 1528.265329, - 1528.810633, - 1529.296473, - 1529.724174, - 1530.095187, - 1530.411085, - 1530.673551, - 1530.884374, - 1531.045437, - 1531.158715, - 1531.226264, - 1531.250218, - 1531.232785, - 1531.176236, - 1531.082907, - 1530.95519, - 1530.795533, - 1530.606431, - 1530.39043, - 1530.150117, - 1529.88812, - 1529.607108, - 1529.309779, - 1528.998868, - 1528.677134, - 1528.347364, - 1528.012361, - 1527.674949, - 1527.337962, - 1527.004239, - 1526.676621, - 1526.357946, - 1526.051038, - 1525.758703, - 1525.483721, - 1525.22884, - 1524.996763, - 1524.790144, - 1524.611578, - 1524.46359, - 1524.348627, - 1524.269049, - 1524.227119, - 1524.224992, - 1524.264709, - 1524.348186, - 1524.477207, - 1524.653414, - 1524.878302, - 1525.153203, - 1525.479291, - 1525.857564, - 1526.288849, - 1526.773791, - 1527.312853, - 1527.906313, - 1528.55426, - 1529.256595, - 1530.013033, - 1530.823103, - 1531.686148, - 1532.601333, - 1533.567645, - 1534.5839, - 1535.648751, - 1536.760691, - 1537.918063, - 1539.119069, - 1540.361777, - 1541.64413, - 1542.96396, - 1544.318994, - 1545.706865, - 1547.125124, - 1548.571253, - 1550.042672, - 1551.53675, - 1553.050819, - 1554.582184, - 1556.12813, - 1557.685935, - 1559.252879, - 1560.826252, - 1562.403365, - 1563.981556, - 1565.558199, - 1567.13071, - 1568.696556, - 1570.253257, - 1571.798395, - 1573.329617, - 1574.84464, - 1576.341255, - 1577.817328, - 1579.270809, - 1580.699702, - 1582.102136, - 1583.476295, - 1584.820468, - 1586.133025, - 1587.412428, - 1588.657231, - 1589.866077, - 1591.037701, - 1592.170931, - 1593.264687, - 1594.317983, - 1595.329926, - 1596.299718, - 1597.226657, - 1598.110134, - 1598.949638, - 1599.744758, - 1600.495177, - 1601.20068, - 1601.861151, - 1602.476576, - 1603.047043, - 1603.572742, - 1604.053969, - 1604.491122, - 1604.884704, - 1605.235324, - 1605.543696, - 1605.810638, - 1606.037073, - 1606.224026, - 1606.372625, - 1606.484096, - 1606.559764, - 1606.601051, - 1606.609467, - 1606.586614, - 1606.534177, - 1606.45392, - 1606.347682, - 1606.217373, - 1606.064966, - 1605.892488, - 1605.702021, - 1605.495688, - 1605.27565, - 1605.044093, - 1604.803172, - 1604.555047, - 1604.302002, - 1604.046163, - 1603.789772, - 1603.534998, - 1603.284001, - 1603.038912, - 1602.801823, - 1602.574781, - 1602.359781, - 1602.158761, - 1601.973594, - 1601.80608, - 1601.657946, - 1601.530834, - 1601.426301, - 1601.345814, - 1601.290745, - 1601.262368, - 1601.261858, - 1601.290286, - 1601.348622, - 1601.437728, - 1601.558362, - 1601.711178, - 1601.896724, - 1602.115445, - 1602.367682, - 1602.653679, - 1602.973578, - 1603.327426, - 1603.715176, - 1604.136691, - 1604.591746, - 1605.08003, - 1605.601152, - 1606.154642, - 1606.739954, - 1607.356473, - 1608.003514, - 1608.680324, - 1609.386092, - 1610.119945, - 1610.880954, - 1611.668135, - 1612.480455, - 1613.316831, - 1614.176135, - 1615.057196, - 1615.958798, - 1616.879691, - 1617.818585, - 1618.774156, - 1619.745051, - 1620.729882, - 1621.727235, - 1622.735669, - 1623.753719, - 1624.779899, - 1625.812703, - 1626.850609, - 1627.892078, - 1628.935564, - 1629.979508, - 1631.022348, - 1632.062518, - 1633.098451, - 1634.128586, - 1635.151367, - 1636.16525, - 1637.168703, - 1638.160214, - 1639.138293, - 1640.101474, - 1641.048322, - 1641.977438, - 1642.887458, - 1643.777063, - 1644.644979, - 1645.489986, - 1646.310917, - 1647.106664, - 1647.876186, - 1648.618506, - 1649.332722, - 1650.018003, - 1650.673602, - 1651.298849, - 1651.893161, - 1652.456044, - 1652.987093, - 1653.485993, - 1653.952527, - 1654.386569, - 1654.788092, - 1655.157165, - 1655.493951, - 1655.798713, - 1656.071807, - 1656.313684, - 1656.524887, - 1656.70605, - 1656.857894, - 1656.981225, - 1657.076933, - 1657.145982, - 1657.189415, - 1657.208341, - 1657.203938, - 1657.177444, - 1657.130152, - 1657.063409, - 1656.978607, - 1656.87718, - 1656.760598, - 1656.630363, - 1656.488003, - 1656.335068, - 1656.173122, - 1656.003745, - 1655.82852, - 1655.649037, - 1655.466881, - 1655.283633, - 1655.100865, - 1654.920136, - 1654.742987, - 1654.570941, - 1654.405497, - 1654.248129, - 1654.100282, - 1653.963368, - 1653.838767, - 1653.72782, - 1653.631832, - 1653.552063, - 1653.489732, - 1653.446012, - 1653.422026, - 1653.41885, - 1653.437507, - 1653.478966, - 1653.54414, - 1653.633886, - 1653.749002, - 1653.890225, - 1654.058231, - 1654.253632, - 1654.476973, - 1654.728734, - 1655.009327, - 1655.319094, - 1655.658309, - 1656.027172, - 1656.425813, - 1656.854287, - 1657.312578, - 1657.800594, - 1658.31817, - 1658.865065, - 1659.440965, - 1660.045482, - 1660.678154, - 1661.338443, - 1662.025744, - 1662.739377, - 1663.478593, - 1664.242576, - 1665.030441, - 1665.841241, - 1666.673964, - 1667.527541, - 1668.400844, - 1669.292692, - 1670.201852, - 1671.127044, - 1672.066945, - 1673.020192, - 1673.985384, - 1674.961091, - 1675.945856, - 1676.938197, - 1677.936615, - 1678.9396, - 1679.945632, - 1680.953188, - 1681.960746, - 1682.966794, - 1683.969829, - 1684.968365, - 1685.96094, - 1686.946116, - 1687.922488, - 1688.888685, - 1689.84338, - 1690.785287, - 1691.713169, - 1692.625843, - 1693.52218, - 1694.401112, - 1695.261632, - 1696.102798, - 1696.923736, - 1697.723642, - 1698.501762, - 1699.257365, - 1699.98992, - 1700.698845, - 1701.383725, - 1702.044185, - 1702.679939, - 1703.29078, - 1703.876582, - 1704.437297, - 1704.972957, - 1705.483671, - 1705.969625, - 1706.431082, - 1706.868378, - 1707.28192, - 1707.672187, - 1708.039725, - 1708.385147, - 1708.709128, - 1709.012405, - 1709.295773, - 1709.560081, - 1709.806232, - 1710.035177, - 1710.247912, - 1710.445478, - 1710.628953, - 1710.799453, - 1710.958124, - 1711.106142, - 1711.244709, - 1711.375049, - 1711.498401, - 1711.616021, - 1711.729176, - 1711.839139, - 1711.947184, - 1712.05459, - 1712.162626, - 1712.272558, - 1712.385637, - 1712.5031, - 1712.626167, - 1712.756033, - 1712.89387, - 1713.04082, - 1713.197991, - 1713.366457, - 1713.547254, - 1713.741376, - 1713.949771, - 1714.173341, - 1714.412937, - 1714.669358, - 1714.943347, - 1715.23559, - 1715.546714, - 1715.877285, - 1716.227804, - 1716.59871, - 1716.990373, - 1717.4031, - 1717.837127, - 1718.292621, - 1718.769683, - 1719.268342, - 1719.788558, - 1720.330224, - 1720.893162, - 1721.477129, - 1722.081813, - 1722.706838, - 1723.351765, - 1724.016091, - 1724.699254, - 1725.400635, - 1726.119558, - 1726.855295, - 1727.607068, - 1728.374053, - 1729.15538, - 1729.950142, - 1730.757391, - 1731.576149, - 1732.405406, - 1733.244127, - 1734.091256, - 1734.945716, - 1735.80642, - 1736.672271, - 1737.542158, - 1738.414976, - 1739.289612, - 1740.164963, - 1741.039932, - 1741.913433, - 1742.784396, - 1743.651768, - 1744.51452, - 1745.371643, - 1746.222161, - 1747.065125, - 1747.899619, - 1748.724765, - 1749.539721, - 1750.343687, - 1751.135902, - 1751.915653, - 1752.68227, - 1753.435133, - 1754.173669, - 1754.897355, - 1755.60572, - 1756.298345, - 1756.974863, - 1757.634962, - 1758.278381, - 1758.904917, - 1759.514418, - 1760.106787, - 1760.681983, - 1761.240017, - 1761.780952, - 1762.304908, - 1762.812055, - 1763.302616, - 1763.776864, - 1764.235123, - 1764.677766, - 1765.105212, - 1765.517927, - 1765.916422, - 1766.30125, - 1766.673008, - 1767.032331, - 1767.379889, - 1767.716393, - 1768.042583, - 1768.359233, - 1768.667145, - 1768.967148, - 1769.260094, - 1769.546859, - 1769.828335, - 1770.105434, - 1770.379079, - 1770.650205, - 1770.919754, - 1771.188674, - 1771.457917, - 1771.728431, - 1772.001164, - 1772.277055, - 1772.557037, - 1772.842027, - 1773.132931, - 1773.430636, - 1773.736009, - 1774.049894, - 1774.37311, - 1774.706447, - 1775.050668, - 1775.4065, - 1775.774638, - 1776.155738, - 1776.55042, - 1776.959262, - 1777.382801, - 1777.821529, - 1778.275895, - 1778.7463, - 1779.233101, - 1779.736603, - 1780.257066, - 1780.794698, - 1781.34966, - 1781.922059, - 1782.511956, - 1783.119359, - 1783.74423, - 1784.386476, - 1785.045961, - 1785.722496, - 1786.415848, - 1787.125735, - 1787.85183, - 1788.593763, - 1789.351119, - 1790.123443, - 1790.910239, - 1791.710972, - 1792.52507, - 1793.351926, - 1794.190901, - 1795.041322, - 1795.902488, - 1796.773671, - 1797.654114, - 1798.543041, - 1799.439652, - 1800.343128, - 1801.252633, - 1802.167318, - 1803.086318, - 1804.008762, - 1804.933767, - 1805.860446, - 1806.78791, - 1807.715266, - 1808.641624, - 1809.566097, - 1810.487802, - 1811.405867, - 1812.319426, - 1813.227628, - 1814.129635, - 1815.024624, - 1815.911792, - 1816.790353, - 1817.659547, - 1818.518633, - 1819.366898, - 1820.203657, - 1821.02825, - 1821.840051, - 1822.638462, - 1823.42292, - 1824.192895, - 1824.947893, - 1825.687454, - 1826.411158, - 1827.11862, - 1827.809496, - 1828.483478, - 1829.140301, - 1829.779738, - 1830.401601, - 1831.005746, - 1831.592066, - 1832.160495, - 1832.711009, - 1833.243621, - 1833.758384, - 1834.255392, - 1834.734775, - 1835.196701, - 1835.641374, - 1836.069036, - 1836.47996, - 1836.874456, - 1837.252866, - 1837.615561, - 1837.962943, - 1838.295442, - 1838.613518, - 1838.917651, - 1839.20835, - 1839.486142, - 1839.751579, - 1840.005229, - 1840.247678, - 1840.47953, - 1840.7014, - 1840.913918, - 1841.117725, - 1841.313471, - 1841.501816, - 1841.683424, - 1841.858969, - 1842.029125, - 1842.194573, - 1842.355994, - 1842.51407, - 1842.669486, - 1842.822923, - 1842.975062, - 1843.126582, - 1843.278158, - 1843.430462, - 1843.584161, - 1843.739917, - 1843.898385, - 1844.060215, - 1844.226046, - 1844.396514, - 1844.57224, - 1844.75384, - 1844.941915, - 1845.137058, - 1845.339845, - 1845.55084, - 1845.770591, - 1845.999631, - 1846.238473, - 1846.487612, - 1846.747522, - 1847.018656, - 1847.301447, - 1847.596295, - 1847.903582, - 1848.223655, - 1848.556833, - 1848.903406, - 1849.263627, - 1849.637716, - 1850.025859, - 1850.428201, - 1850.844852, - 1851.275879, - 1851.721311, - 1852.181133, - 1852.655289, - 1853.14368, - 1853.646162, - 1854.162549, - 1854.69261, - 1855.236071, - 1855.792615, - 1856.361882, - 1856.943469, - 1857.536933, - 1858.141793, - 1858.757528, - 1859.383582, - 1860.019364, - 1860.66425, - 1861.317585, - 1861.978689, - 1862.646853, - 1863.321345, - 1864.001415, - 1864.686293, - 1865.375194, - 1866.067323, - 1866.761872, - 1867.45803, - 1868.15498, - 1868.851905, - 1869.54799, - 1870.242424, - 1870.934406, - 1871.62314, - 1872.307848, - 1872.987761, - 1873.662132, - 1874.330231, - 1874.991348, - 1875.644799, - 1876.289924, - 1876.92609, - 1877.552691, - 1878.169153, - 1878.774932, - 1879.369515, - 1879.952423, - 1880.523211, - 1881.081469, - 1881.626822, - 1882.158932, - 1882.677497, - 1883.182255, - 1883.67298, - 1884.149483, - 1884.611615, - 1885.059265, - 1885.492361, - 1885.910868, - 1886.314789, - 1886.704167, - 1887.079081, - 1887.439647, - 1887.78602, - 1888.118391, - 1888.436985, - 1888.742066, - 1889.033922, - 1889.312842, - 1889.57922, - 1889.833414, - 1890.075862, - 1890.307009, - 1890.527339, - 1890.737363, - 1890.937619, - 1891.128674, - 1891.311119, - 1891.485568, - 1891.652659, - 1891.813048, - 1891.967413, - 1892.116446, - 1892.260853, - 1892.401357, - 1892.538686, - 1892.673579, - 1892.806781, - 1892.93904, - 1893.071104, - 1893.203721, - 1893.337634, - 1893.473579, - 1893.612283, - 1893.754462, - 1893.900817, - 1894.052032, - 1894.208772, - 1894.37168, - 1894.541375, - 1894.71845, - 1894.903469, - 1895.096967, - 1895.299445, - 1895.511372, - 1895.733181, - 1895.965266, - 1896.207987, - 1896.461661, - 1896.726567, - 1897.002943, - 1897.290986, - 1897.590851, - 1897.902652, - 1898.226461, - 1898.562308, - 1898.910182, - 1899.270033, - 1899.641768, - 1900.025259, - 1900.420335, - 1900.826792, - 1901.244387, - 1901.672845, - 1902.111855, - 1902.561076, - 1903.020136, - 1903.488635, - 1903.966145, - 1904.452213, - 1904.946363, - 1905.448097, - 1905.956896, - 1906.472225, - 1906.993531, - 1907.520247, - 1908.051793, - 1908.58758, - 1909.127008, - 1909.669471, - 1910.214358, - 1910.761052, - 1911.308937, - 1911.857397, - 1912.405815, - 1912.953579, - 1913.500082, - 1914.044722, - 1914.586907, - 1915.126053, - 1915.661588, - 1916.192951, - 1916.719595, - 1917.24099, - 1917.75662, - 1918.265989, - 1918.768618, - 1919.264049, - 1919.751846, - 1920.231595, - 1920.702906, - 1921.165412, - 1921.618774, - 1922.062678, - 1922.496838, - 1922.920997, - 1923.334924, - 1923.738422, - 1924.131321, - 1924.513484, - 1924.884803, - 1925.245205, - 1925.594645, - 1925.933114, - 1926.260632, - 1926.577254, - 1926.883065, - 1927.178183, - 1927.462758, - 1927.73697, - 1928.001029, - 1928.255178, - 1928.499685, - 1928.73485, - 1928.960998, - 1929.17848, - 1929.387674, - 1929.58898, - 1929.782819, - 1929.969636, - 1930.14989, - 1930.324062, - 1930.492647, - 1930.656151, - 1930.815096, - 1930.97001, - 1931.121432, - 1931.269904, - 1931.415973, - 1931.560189, - 1931.7031, - 1931.845251, - 1931.987184, - 1932.129436, - 1932.272533, - 1932.416994, - 1932.563323, - 1932.712014, - 1932.863543, - 1933.018372, - 1933.176943, - 1933.339681, - 1933.506986, - 1933.679242, - 1933.856806, - 1934.040013, - 1934.229174, - 1934.424573, - 1934.626471, - 1934.835101, - 1935.050669, - 1935.273357, - 1935.503317, - 1935.740676, - 1935.985535, - 1936.237966, - 1936.498018, - 1936.76571, - 1937.04104, - 1937.323977, - 1937.614469, - 1937.912439, - 1938.217786, - 1938.530388, - 1938.850104, - 1939.176769, - 1939.510201, - 1939.850198, - 1940.196544, - 1940.549003, - 1940.907326, - 1941.271249, - 1941.640497, - 1942.014782, - 1942.393804, - 1942.777257, - 1943.164825, - 1943.556184, - 1943.951005, - 1944.348955, - 1944.749696, - 1945.152887, - 1945.558188, - 1945.965255, - 1946.373746, - 1946.783322, - 1947.193645, - 1947.604381, - 1948.0152, - 1948.425778, - 1948.835797, - 1949.244947, - 1949.652925, - 1950.059436, - 1950.464197, - 1950.866934, - 1951.267385, - 1951.665297, - 1952.060433, - 1952.452567, - 1952.841485, - 1953.226991, - 1953.6089, - 1953.987044, - 1954.36127, - 1954.73144, - 1955.097433, - 1955.459144, - 1955.816486, - 1956.169386, - 1956.517791, - 1956.861664, - 1957.200984, - 1957.535749, - 1957.865973, - 1958.191688, - 1958.512941, - 1958.829797, - 1959.142337, - 1959.450658, - 1959.754872, - 1960.055106, - 1960.351503, - 1960.644219, - 1960.933423, - 1961.219297, - 1961.502037, - 1961.781847, - 1962.058945, - 1962.333557, - 1962.605919, - 1962.876273, - 1963.144871, - 1963.41197, - 1963.677834, - 1963.94273, - 1964.206928, - 1964.470704, - 1964.734334, - 1964.998093, - 1965.26226, - 1965.527111, - 1965.792921, - 1966.059961, - 1966.328502, - 1966.598807, - 1966.871138, - 1967.145749, - 1967.422888, - 1967.702796, - 1967.985709, - 1968.271851, - 1968.561439, - 1968.854682, - 1969.151777, - 1969.452913, - 1969.758267, - 1970.068004, - 1970.38228, - 1970.701239, - 1971.025011, - 1971.353715, - 1971.687457, - 1972.026331, - 1972.370418, - 1972.719786, - 1973.074488, - 1973.434566, - 1973.800046, - 1974.170944, - 1974.547259, - 1974.928977, - 1975.316072, - 1975.708502, - 1976.106214, - 1976.509139, - 1976.917196, - 1977.330288, - 1977.748308, - 1978.171133, - 1978.598628, - 1979.030645, - 1979.467023, - 1979.907587, - 1980.352152, - 1980.800519, - 1981.252478, - 1981.707809, - 1982.166278, - 1982.627642, - 1983.091648, - 1983.558034, - 1984.026526, - 1984.496844, - 1984.968699, - 1985.441794, - 1985.915825, - 1986.390484, - 1986.865453, - 1987.340412, - 1987.815035, - 1988.288994, - 1988.761955, - 1989.233585, - 1989.703546, - 1990.171501, - 1990.637111, - 1991.100041, - 1991.559952, - 1992.01651, - 1992.469386, - 1992.918249, - 1993.362779, - 1993.802656, - 1994.23757, - 1994.667218, - 1995.091305, - 1995.509546, - 1995.921667, - 1996.327405, - 1996.726511, - 1997.118751, - 1997.503907, - 1997.881775, - 1998.252173, - 1998.614938, - 1998.969925, - 1999.317013, - 1999.656104, - 1999.987123, - 2000.310022, - 2000.624775, - 2000.931385, - 2001.229883, - 2001.520325, - 2001.802795, - 2002.077407, - 2002.344302, - 2002.603647, - 2002.855639, - 2003.1005, - 2003.338479, - 2003.56985, - 2003.794912, - 2004.013987, - 2004.227418, - 2004.435569, - 2004.638823, - 2004.837579, - 2005.032252, - 2005.22327, - 2005.411073, - 2005.59611, - 2005.778837, - 2005.959715, - 2006.139208, - 2006.317783, - 2006.495903, - 2006.674032, - 2006.852625, - 2007.032132, - 2007.212997, - 2007.395652, - 2007.580516, - 2007.767998, - 2007.958492, - 2008.152377, - 2008.350016, - 2008.551755, - 2008.757924, - 2008.968832, - 2009.184773, - 2009.40602, - 2009.632829, - 2009.865435, - 2010.104055, - 2010.348888, - 2010.600114, - 2010.857896, - 2011.122378, - 2011.393687, - 2011.671934, - 2011.957212, - 2012.249601, - 2012.549164, - 2012.855952, - 2013.17, - 2013.491331, - 2013.819954, - 2014.155866, - 2014.499052, - 2014.849485, - 2015.207126, - 2015.571926, - 2015.943825, - 2016.32275, - 2016.708618, - 2017.101338, - 2017.500805, - 2017.906905, - 2018.319514, - 2018.738495, - 2019.163704, - 2019.594985, - 2020.032171, - 2020.475088, - 2020.923548, - 2021.377357, - 2021.83631, - 2022.300191, - 2022.768777, - 2023.241835, - 2023.719124, - 2024.200392, - 2024.685384, - 2025.173835, - 2025.665473, - 2026.160022, - 2026.657199, - 2027.156718, - 2027.658289, - 2028.161619, - 2028.666414, - 2029.17238, - 2029.679222, - 2030.186647, - 2030.694365, - 2031.20209, - 2031.709541, - 2032.216443, - 2032.722527, - 2033.227534, - 2033.731213, - 2034.233325, - 2034.733642, - 2035.231945, - 2035.728033, - 2036.221716, - 2036.712817, - 2037.201176, - 2037.686649, - 2038.169105, - 2038.648432, - 2039.124531, - 2039.597321, - 2040.066738, - 2040.53273, - 2040.995263, - 2041.454318, - 2041.909888, - 2042.361983, - 2042.810624, - 2043.255845, - 2043.697691, - 2044.136217, - 2044.571491, - 2045.003586, - 2045.432585, - 2045.858577, - 2046.281658, - 2046.701926, - 2047.119487, - 2047.534447, - 2047.946915, - 2048.357002, - 2048.764818, - 2049.170473, - 2049.574078, - 2049.975739, - 2050.375563, - 2050.773651, - 2051.170103, - 2051.565014, - 2051.958477, - 2052.350579, - 2052.741402, - 2053.131024, - 2053.51952, - 2053.906958, - 2054.293401, - 2054.678909, - 2055.063537, - 2055.447333, - 2055.830343, - 2056.212607, - 2056.594163, - 2056.975041, - 2057.355271, - 2057.734877, - 2058.113878, - 2058.492293, - 2058.870134, - 2059.247412, - 2059.624133, - 2060.0003, - 2060.375914, - 2060.750972, - 2061.125467, - 2061.49939, - 2061.872729, - 2062.245468, - 2062.617587, - 2062.989065, - 2063.359876, - 2063.72999, - 2064.099376, - 2064.467997, - 2064.835813, - 2065.202783, - 2065.568858, - 2065.933989, - 2066.298123, - 2066.661202, - 2067.023167, - 2067.383954, - 2067.743496, - 2068.101725, - 2068.45857, - 2068.813955, - 2069.167807, - 2069.520046, - 2069.870596, - 2070.219376, - 2070.566307, - 2070.91131, - 2071.254305, - 2071.595216, - 2071.933965, - 2072.270479, - 2072.604687, - 2072.93652, - 2073.265915, - 2073.592811, - 2073.917153, - 2074.238891, - 2074.55798, - 2074.874383, - 2075.188066, - 2075.499004, - 2075.80718, - 2076.112581, - 2076.415204, - 2076.715053, - 2077.01214, - 2077.306483, - 2077.598109, - 2077.887052, - 2078.173354, - 2078.457063, - 2078.738235, - 2079.016932, - 2079.293223, - 2079.567183, - 2079.838891, - 2080.108432, - 2080.375896, - 2080.641378, - 2080.904974, - 2081.166785, - 2081.426915, - 2081.685469, - 2081.942553, - 2082.198277, - 2082.452748, - 2082.706077, - 2082.958371, - 2083.209739, - 2083.460289, - 2083.710125, - 2083.959353, - 2084.208076, - 2084.456392, - 2084.7044, - 2084.952195, - 2085.19987, - 2085.447514, - 2085.695213, - 2085.943051, - 2086.191107, - 2086.439459, - 2086.688179, - 2086.937337, - 2087.187001, - 2087.437234, - 2087.688096, - 2087.939642, - 2088.191928, - 2088.445003, - 2088.698914, - 2088.953704, - 2089.209416, - 2089.466086, - 2089.723749, - 2089.982436, - 2090.242177, - 2090.502996, - 2090.764915, - 2091.027955, - 2091.29213, - 2091.557453, - 2091.823932, - 2092.091571, - 2092.360372, - 2092.630333, - 2092.901446, - 2093.173702, - 2093.447087, - 2093.721581, - 2093.997161, - 2094.273803, - 2094.551473, - 2094.830137, - 2095.109755, - 2095.390283, - 2095.671672, - 2095.953869, - 2096.236818, - 2096.520455, - 2096.804717, - 2097.089531, - 2097.374825, - 2097.66052, - 2097.946534, - 2098.232783, - 2098.519177, - 2098.805625, - 2099.092032, - 2099.378302, - 2099.664335, - 2099.950031, - 2100.235287, - 2100.519999, - 2100.804063, - 2101.087376, - 2101.369831, - 2101.651326, - 2101.931756, - 2102.21102, - 2102.489016, - 2102.765648, - 2103.040818, - 2103.314432, - 2103.586401, - 2103.856636, - 2104.125054, - 2104.391574, - 2104.656122, - 2104.918623, - 2105.179012, - 2105.437226, - 2105.693204, - 2105.946895, - 2106.198249, - 2106.447221, - 2106.693773, - 2106.937869, - 2107.179479, - 2107.418578, - 2107.655143, - 2107.889159, - 2108.120613, - 2108.349495, - 2108.575801, - 2108.79953, - 2109.020684, - 2109.239269, - 2109.455294, - 2109.668772, - 2109.879716, - 2110.088144, - 2110.294077, - 2110.497537, - 2110.698548, - 2110.897138, - 2111.093336, - 2111.287172, - 2111.478679, - 2111.667891, - 2111.854845, - 2112.039577, - 2112.222128, - 2112.402538, - 2112.580849, - 2112.757104, - 2112.931349, - 2113.103629, - 2113.273991, - 2113.442485, - 2113.60916, - 2113.774067, - 2113.937258, - 2114.098787, - 2114.258706, - 2114.417072, - 2114.573941, - 2114.729367, - 2114.88341, - 2115.036127, - 2115.187576, - 2115.337816, - 2115.486907, - 2115.634908, - 2115.781878, - 2115.927877, - 2116.072963, - 2116.217195, - 2116.360633, - 2116.503332, - 2116.645351, - 2116.786745, - 2116.927568, - 2117.067875, - 2117.207717, - 2117.347145, - 2117.486206, - 2117.624948, - 2117.763414, - 2117.901644, - 2118.039679, - 2118.177551, - 2118.315294, - 2118.452934, - 2118.590496, - 2118.727999, - 2118.86546, - 2119.002889, - 2119.140293, - 2119.277676, - 2119.415034, - 2119.552363, - 2119.689654, - 2119.826893, - 2119.964065, - 2120.101152, - 2120.238134, - 2120.374989, - 2120.511696, - 2120.648233, - 2120.784579, - 2120.920716, - 2121.056626, - 2121.192298, - 2121.327724, - 2121.462899, - 2121.597827, - 2121.732517, - 2121.866985, - 2122.001258, - 2122.135367, - 2122.269355, - 2122.403274, - 2122.537184, - 2122.671154, - 2122.805266, - 2122.939606, - 2123.074272, - 2123.209371, - 2123.345015, - 2123.481324, - 2123.618425, - 2123.75645, - 2123.895533, - 2124.035813, - 2124.177429, - 2124.320523, - 2124.465232, - 2124.611694, - 2124.76004, - 2124.910397, - 2125.062886, - 2125.217618, - 2125.374696, - 2125.534212, - 2125.696246, - 2125.860863, - 2126.028119, - 2126.19805, - 2126.37068, - 2126.546015, - 2126.724047, - 2126.904749, - 2127.088079, - 2127.273977, - 2127.462369, - 2127.653161, - 2127.846248, - 2128.041507, - 2128.238803, - 2128.437987, - 2128.638898, - 2128.841366, - 2129.045209, - 2129.250237, - 2129.456255, - 2129.663061, - 2129.870448, - 2130.078209, - 2130.286134, - 2130.494012, - 2130.701635, - 2130.908799, - 2131.115301, - 2131.320945, - 2131.525542, - 2131.72891, - 2131.930873, - 2132.131268, - 2132.329939, - 2132.526742, - 2132.721543, - 2132.914221, - 2133.104665, - 2133.292778, - 2133.478474, - 2133.661683, - 2133.842342, - 2134.020405, - 2134.195836, - 2134.368614, - 2134.538726, - 2134.706175, - 2134.870973, - 2135.033142, - 2135.192718, - 2135.349743, - 2135.504272, - 2135.656368, - 2135.806102, - 2135.953555, - 2136.098816, - 2136.241981, - 2136.383154, - 2136.522447, - 2136.659978, - 2136.795872, - 2136.930261, - 2137.063283, - 2137.195082, - 2137.325811, - 2137.455625, - 2137.58469, - 2137.713173, - 2137.841252, - 2137.969107, - 2138.096929, - 2138.224911, - 2138.353253, - 2138.482163, - 2138.611852, - 2138.742538, - 2138.874445, - 2139.007801, - 2139.14284, - 2139.279801, - 2139.418924, - 2139.560456, - 2139.704645, - 2139.851742, - 2140.001999, - 2140.15567, - 2140.313007, - 2140.474262, - 2140.639685, - 2140.809522, - 2140.984016, - 2141.163404, - 2141.347915, - 2141.537772, - 2141.73319, - 2141.93437, - 2142.141506, - 2142.354778, - 2142.57435, - 2142.800377, - 2143.032993, - 2143.272319, - 2143.518458, - 2143.771495, - 2144.031496, - 2144.298508, - 2144.57256, - 2144.853659, - 2145.141795, - 2145.436934, - 2145.739025, - 2146.047998, - 2146.363759, - 2146.6862, - 2147.015191, - 2147.350586, - 2147.69222, - 2148.039912, - 2148.393465, - 2148.752669, - 2149.117298, - 2149.487115, - 2149.861869, - 2150.241302, - 2150.625143, - 2151.013115, - 2151.404933, - 2151.800308, - 2152.198944, - 2152.600542, - 2153.004801, - 2153.41142, - 2153.820094, - 2154.230523, - 2154.642405, - 2155.055442, - 2155.46934, - 2155.883809, - 2156.298562, - 2156.71332, - 2157.127809, - 2157.541761, - 2157.954916, - 2158.367021, - 2158.777832, - 2159.187111, - 2159.594631, - 2160.000172, - 2160.403523, - 2160.804482, - 2161.202857, - 2161.598463, - 2161.991127, - 2162.380682, - 2162.766972, - 2163.149851, - 2163.529179, - 2163.904829, - 2164.276681, - 2164.644623, - 2165.008555, - 2165.368384, - 2165.724027, - 2166.07541, - 2166.422467, - 2166.765144, - 2167.103394, - 2167.437179, - 2167.766472, - 2168.091253, - 2168.411513, - 2168.727252, - 2169.038479, - 2169.345212, - 2169.647478, - 2169.945314, - 2170.238765, - 2170.527886, - 2170.812739, - 2171.093397, - 2171.369939, - 2171.642453, - 2171.911035, - 2172.175788, - 2172.436822, - 2172.694254, - 2172.948207, - 2173.19881, - 2173.446197, - 2173.690506, - 2173.931881, - 2174.170467, - 2174.406414, - 2174.639873, - 2174.870998, - 2175.099944, - 2175.326864, - 2175.551914, - 2175.775249, - 2175.99702, - 2176.217378, - 2176.436471, - 2176.654445, - 2176.871441, - 2177.087598, - 2177.303048, - 2177.51792, - 2177.732338, - 2177.94642, - 2178.16028, - 2178.374024, - 2178.587753, - 2178.801564, - 2179.015545, - 2179.229781, - 2179.444348, - 2179.65932, - 2179.874763, - 2180.090737, - 2180.307299, - 2180.5245, - 2180.742387, - 2180.961001, - 2181.18038, - 2181.400561, - 2181.621572, - 2181.843444, - 2182.066202, - 2182.289868, - 2182.514466, - 2182.740015, - 2182.966534, - 2183.194042, - 2183.422555, - 2183.652092, - 2183.882668, - 2184.1143, - 2184.347006, - 2184.580803, - 2184.815707, - 2185.051737, - 2185.288911, - 2185.527246, - 2185.766763, - 2186.00748, - 2186.249416, - 2186.492591, - 2186.737022, - 2186.98273, - 2187.229733, - 2187.478047, - 2187.727689, - 2187.978676, - 2188.23102, - 2188.484735, - 2188.739831, - 2188.996317, - 2189.2542, - 2189.513484, - 2189.774172, - 2190.036262, - 2190.299753, - 2190.564637, - 2190.830908, - 2191.098555, - 2191.367563, - 2191.637916, - 2191.909597, - 2192.182585, - 2192.456856, - 2192.732385, - 2193.009146, - 2193.287109, - 2193.566243, - 2193.846518, - 2194.1279, - 2194.410356, - 2194.69385, - 2194.978347, - 2195.263811, - 2195.550205, - 2195.837494, - 2196.125641, - 2196.414608, - 2196.70436, - 2196.994859, - 2197.28607, - 2197.577955, - 2197.870479, - 2198.163606, - 2198.457297, - 2198.751518, - 2199.046229, - 2199.341395, - 2199.636977, - 2199.932933, - 2200.229225, - 2200.52581, - 2200.822644, - 2201.119682, - 2201.416877, - 2201.71418, - 2202.01154, - 2202.308903, - 2202.606215, - 2202.903416, - 2203.200447, - 2203.497245, - 2203.793744, - 2204.089876, - 2204.385571, - 2204.680756, - 2204.975356, - 2205.269293, - 2205.562489, - 2205.854861, - 2206.146327, - 2206.436802, - 2206.7262, - 2207.014433, - 2207.301413, - 2207.587052, - 2207.87126, - 2208.153947, - 2208.435023, - 2208.714399, - 2208.991986, - 2209.267694, - 2209.541437, - 2209.813128, - 2210.082682, - 2210.350014, - 2210.615042, - 2210.877686, - 2211.137868, - 2211.395512, - 2211.650543, - 2211.90289, - 2212.152485, - 2212.39926, - 2212.643151, - 2212.884099, - 2213.122044, - 2213.35693, - 2213.588705, - 2213.817318, - 2214.042722, - 2214.264871, - 2214.483722, - 2214.699234, - 2214.911367, - 2215.120084, - 2215.325348, - 2215.527123, - 2215.725375, - 2215.92007, - 2216.111172, - 2216.298649, - 2216.482465, - 2216.662586, - 2216.838975, - 2217.011596, - 2217.180413, - 2217.345387, - 2217.50648, - 2217.663654, - 2217.81687, - 2217.966091, - 2218.111278, - 2218.252398, - 2218.389416, - 2218.522304, - 2218.651034, - 2218.775588, - 2218.895949, - 2219.01211, - 2219.124071, - 2219.23184, - 2219.335438, - 2219.434892, - 2219.530246, - 2219.621555, - 2219.708885, - 2219.792322, - 2219.871961, - 2219.947916, - 2220.020316, - 2220.089305, - 2220.155044, - 2220.217709, - 2220.277493, - 2220.334601, - 2220.389256, - 2220.441691, - 2220.492155, - 2220.540906, - 2220.588213, - 2220.634353, - 2220.679612, - 2220.72428, - 2220.76865, - 2220.81302, - 2220.857686, - 2220.902942, - 2220.94908, - 2220.996386, - 2221.045139, - 2221.095608, - 2221.148053, - 2221.202722, - 2221.259847, - 2221.319647, - 2221.382325, - 2221.448065, - 2221.517035, - 2221.58938, - 2221.665231, - 2221.744694, - 2221.827857, - 2221.914789, - 2222.005537, - 2222.100128, - 2222.198572, - 2222.300858, - 2222.406958, - 2222.516825, - 2222.630399, - 2222.747602, - 2222.868343, - 2222.992518, - 2223.120012, - 2223.250698, - 2223.384441, - 2223.521098, - 2223.66052, - 2223.802551, - 2223.947033, - 2224.093803, - 2224.242697, - 2224.393551, - 2224.546198, - 2224.700476, - 2224.856221, - 2225.013273, - 2225.171476, - 2225.330673, - 2225.490715, - 2225.651454, - 2225.812746, - 2225.97445, - 2226.136433, - 2226.298561, - 2226.460709, - 2226.62275, - 2226.784567, - 2226.946042, - 2227.10706, - 2227.267512, - 2227.427289, - 2227.586286, - 2227.744398, - 2227.901525, - 2228.057567, - 2228.212426, - 2228.366006, - 2228.518214, - 2228.668958, - 2228.818148, - 2228.965697, - 2229.111519, - 2229.255533, - 2229.397661, - 2229.537826, - 2229.675961, - 2229.811998, - 2229.945878, - 2230.077547, - 2230.20696, - 2230.334075, - 2230.458862, - 2230.581298, - 2230.701371, - 2230.819077, - 2230.934424, - 2231.047429, - 2231.158122, - 2231.266544, - 2231.372749, - 2231.4768, - 2231.578775, - 2231.678764, - 2231.776866, - 2231.873193, - 2231.967868, - 2232.061025, - 2232.152808, - 2232.243368, - 2232.332866, - 2232.42147, - 2232.509355, - 2232.5967, - 2232.683689, - 2232.770508, - 2232.857347, - 2232.944393, - 2233.031837, - 2233.119864, - 2233.208659, - 2233.2984, - 2233.389262, - 2233.481412, - 2233.57501, - 2233.670209, - 2233.767151, - 2233.865969, - 2233.966784, - 2234.069708, - 2234.174838, - 2234.282263, - 2234.392057, - 2234.504282, - 2234.618988, - 2234.736212, - 2234.855979, - 2234.978301, - 2235.103181, - 2235.230607, - 2235.36056, - 2235.493009, - 2235.627912, - 2235.765223, - 2235.904882, - 2236.046826, - 2236.190983, - 2236.337278, - 2236.485628, - 2236.635947, - 2236.788147, - 2236.942134, - 2237.097815, - 2237.255095, - 2237.413876, - 2237.574064, - 2237.735561, - 2237.898272, - 2238.062104, - 2238.226965, - 2238.392762, - 2238.559409, - 2238.726818, - 2238.894907, - 2239.063593, - 2239.232799, - 2239.402447, - 2239.572466, - 2239.742782, - 2239.913329, - 2240.084038, - 2240.254846, - 2240.42569, - 2240.59651, - 2240.767247, - 2240.937842, - 2241.108242, - 2241.27839, - 2241.448234, - 2241.617721, - 2241.786802, - 2241.955426, - 2242.123544, - 2242.291111, - 2242.458081, - 2242.62441, - 2242.790055, - 2242.954977, - 2243.119138, - 2243.282503, - 2243.445038, - 2243.606714, - 2243.767506, - 2243.927389, - 2244.086346, - 2244.244362, - 2244.401427, - 2244.557534, - 2244.712684, - 2244.866881, - 2245.020135, - 2245.17246, - 2245.323878, - 2245.474415, - 2245.624101, - 2245.772975, - 2245.921079, - 2246.06846, - 2246.215171, - 2246.361269, - 2246.506816, - 2246.651876, - 2246.79652, - 2246.94082, - 2247.08485, - 2247.228687, - 2247.372411, - 2247.5161, - 2247.659835, - 2247.803694, - 2247.947757, - 2248.092101, - 2248.2368, - 2248.381929, - 2248.527555, - 2248.673745, - 2248.82056, - 2248.968057, - 2249.116288, - 2249.2653, - 2249.415133, - 2249.565823, - 2249.717398, - 2249.86988, - 2250.023287, - 2250.177627, - 2250.332904, - 2250.489116, - 2250.646252, - 2250.804299, - 2250.963235, - 2251.123033, - 2251.283662, - 2251.445085, - 2251.607261, - 2251.770144, - 2251.933684, - 2252.097829, - 2252.262522, - 2252.427706, - 2252.593319, - 2252.759297, - 2252.925578, - 2253.092095, - 2253.258782, - 2253.425571, - 2253.592397, - 2253.75919, - 2253.925885, - 2254.092415, - 2254.258715, - 2254.42472, - 2254.590367, - 2254.755593, - 2254.920338, - 2255.084543, - 2255.248149, - 2255.411101, - 2255.573343, - 2255.734823, - 2255.89549, - 2256.055292, - 2256.214183, - 2256.372115, - 2256.529043, - 2256.684923, - 2256.839713, - 2256.993373, - 2257.145863, - 2257.297146, - 2257.447186, - 2257.59595, - 2257.743405, - 2257.889521, - 2258.034272, - 2258.17763, - 2258.319574, - 2258.460083, - 2258.599141, - 2258.736734, - 2258.872852, - 2259.007488, - 2259.140639, - 2259.272309, - 2259.402503, - 2259.531232, - 2259.658513, - 2259.784367, - 2259.908821, - 2260.031906, - 2260.153661, - 2260.27413, - 2260.39336, - 2260.511409, - 2260.628335, - 2260.744205, - 2260.859091, - 2260.97307, - 2261.086223, - 2261.198638, - 2261.310405, - 2261.421621, - 2261.532383, - 2261.642795, - 2261.752963, - 2261.862993, - 2261.972997, - 2262.083086, - 2262.193372, - 2262.303968, - 2262.414987, - 2262.526543, - 2262.638745, - 2262.751706, - 2262.865532, - 2262.98033, - 2263.096202, - 2263.213249, - 2263.331567, - 2263.451249, - 2263.572382, - 2263.69505, - 2263.819332, - 2263.945303, - 2264.073031, - 2264.202581, - 2264.334009, - 2264.467369, - 2264.602707, - 2264.740066, - 2264.879481, - 2265.020981, - 2265.164592, - 2265.310332, - 2265.458215, - 2265.608248, - 2265.760434, - 2265.91477, - 2266.07125, - 2266.22986, - 2266.390583, - 2266.553396, - 2266.718275, - 2266.885187, - 2267.054099, - 2267.22497, - 2267.39776, - 2267.572423, - 2267.748908, - 2267.927163, - 2268.107135, - 2268.288763, - 2268.471987, - 2268.656745, - 2268.842971, - 2269.030596, - 2269.21955, - 2269.409761, - 2269.601155, - 2269.793654, - 2269.987178, - 2270.181646, - 2270.376972, - 2270.573069, - 2270.769846, - 2270.967208, - 2271.165058, - 2271.363296, - 2271.561818, - 2271.760516, - 2271.959282, - 2272.158001, - 2272.356559, - 2272.554838, - 2272.752718, - 2272.95008, - 2273.146803, - 2273.342766, - 2273.537851, - 2273.731941, - 2273.924921, - 2274.116683, - 2274.30712, - 2274.496135, - 2274.683636, - 2274.86954, - 2275.053771, - 2275.236267, - 2275.416975, - 2275.595852, - 2275.772872, - 2275.948018, - 2276.121289, - 2276.292697, - 2276.46227, - 2276.630048, - 2276.796086, - 2276.960456, - 2277.123238, - 2277.284529, - 2277.444438, - 2277.603085, - 2277.760598, - 2277.917119, - 2278.072793, - 2278.227774, - 2278.382221, - 2278.536297, - 2278.690164, - 2278.843986, - 2278.997926, - 2279.152142, - 2279.306788, - 2279.462011, - 2279.617949, - 2279.774732, - 2279.932476, - 2280.091288, - 2280.251259, - 2280.412465, - 2280.574968, - 2280.738812, - 2280.904026, - 2281.07062, - 2281.238589, - 2281.407907, - 2281.578535, - 2281.750415, - 2281.923472, - 2282.097616, - 2282.272743, - 2282.448734, - 2282.625457, - 2282.802771, - 2282.98052, - 2283.158542, - 2283.336667, - 2283.514719, - 2283.692516, - 2283.869876, - 2284.046613, - 2284.22254, - 2284.397473, - 2284.571229, - 2284.743629, - 2284.914497, - 2285.083665, - 2285.250971, - 2285.41626, - 2285.579384, - 2285.740206, - 2285.898597, - 2286.054439, - 2286.207622, - 2286.358049, - 2286.505631, - 2286.650292, - 2286.791965, - 2286.930596, - 2287.066139, - 2287.198562, - 2287.327839, - 2287.453956, - 2287.57691, - 2287.696705, - 2287.813354, - 2287.926879, - 2288.03731, - 2288.144686, - 2288.249052, - 2288.350461, - 2288.448972, - 2288.544653, - 2288.637577, - 2288.727823, - 2288.815477, - 2288.900631, - 2288.983384, - 2289.063841, - 2289.142111, - 2289.218313, - 2289.29257, - 2289.365012, - 2289.435776, - 2289.505006, - 2289.572852, - 2289.639473, - 2289.705032, - 2289.769702, - 2289.833662, - 2289.897098, - 2289.960204, - 2290.02318, - 2290.086234, - 2290.149578, - 2290.213434, - 2290.278027, - 2290.343588, - 2290.410352, - 2290.478558, - 2290.548449, - 2290.620269, - 2290.694264, - 2290.77068, - 2290.849763, - 2290.931755, - 2291.016896, - 2291.105422, - 2291.197563, - 2291.293543, - 2291.393575, - 2291.497867, - 2291.606612, - 2291.719995, - 2291.838184, - 2291.961337, - 2292.089595, - 2292.223083, - 2292.361908, - 2292.506162, - 2292.655917, - 2292.811227, - 2292.972127, - 2293.13863, - 2293.310733, - 2293.488412, - 2293.671621, - 2293.860299, - 2294.054362, - 2294.253709, - 2294.458222, - 2294.667765, - 2294.882183, - 2295.101308, - 2295.324956, - 2295.55293, - 2295.785018, - 2296.020999, - 2296.26064, - 2296.503698, - 2296.749922, - 2296.999055, - 2297.250833, - 2297.504989, - 2297.76125, - 2298.019343, - 2298.278993, - 2298.539923, - 2298.801861, - 2299.064534, - 2299.327671, - 2299.591006, - 2299.854278, - 2300.117231, - 2300.379612, - 2300.641178, - 2300.90169, - 2301.160919, - 2301.41864, - 2301.674639, - 2301.928709, - 2302.180652, - 2302.430277, - 2302.677404, - 2302.92186, - 2303.16348, - 2303.402111, - 2303.637606, - 2303.869827, - 2304.098646, - 2304.323941, - 2304.545603, - 2304.763526, - 2304.977617, - 2305.18779, - 2305.393965, - 2305.596074, - 2305.794055, - 2305.987854, - 2306.177427, - 2306.362736, - 2306.543754, - 2306.720459, - 2306.89284, - 2307.060892, - 2307.224621, - 2307.384039, - 2307.539167, - 2307.690034, - 2307.836678, - 2307.979146, - 2308.11749, - 2308.251774, - 2308.382068, - 2308.50845, - 2308.631005, - 2308.749827, - 2308.865016, - 2308.97668, - 2309.084932, - 2309.189892, - 2309.291687, - 2309.390447, - 2309.486309, - 2309.579413, - 2309.669903, - 2309.757926, - 2309.843634, - 2309.927176, - 2310.008708, - 2310.088383, - 2310.166355, - 2310.242777, - 2310.317802, - 2310.391581, - 2310.46426, - 2310.535985, - 2310.606897, - 2310.677131, - 2310.746821, - 2310.816094, - 2310.88507, - 2310.953865, - 2311.022587, - 2311.09134, - 2311.160219, - 2311.229312, - 2311.298702, - 2311.368463, - 2311.438663, - 2311.509363, - 2311.580617, - 2311.652471, - 2311.724967, - 2311.798139, - 2311.872016, - 2311.946621, - 2312.021972, - 2312.098082, - 2312.174959, - 2312.252608, - 2312.33103, - 2312.410221, - 2312.490178, - 2312.57089, - 2312.652348, - 2312.73454, - 2312.817451, - 2312.901066, - 2312.985369, - 2313.070342, - 2313.155968, - 2313.242228, - 2313.329105, - 2313.416579, - 2313.504633, - 2313.593247, - 2313.682402, - 2313.77208, - 2313.862264, - 2313.952932, - 2314.044068, - 2314.135651, - 2314.227662, - 2314.320082, - 2314.412888, - 2314.506061, - 2314.599578, - 2314.693415, - 2314.787548, - 2314.881951, - 2314.976598, - 2315.07146, - 2315.166507, - 2315.261708, - 2315.35703, - 2315.452439, - 2315.547897, - 2315.643369, - 2315.738815, - 2315.834196, - 2315.929472, - 2316.024601, - 2316.119542, - 2316.214252, - 2316.30869, - 2316.402813, - 2316.496579, - 2316.589948, - 2316.682879, - 2316.775332, - 2316.867269, - 2316.958653, - 2317.049449, - 2317.139622, - 2317.229141, - 2317.317975, - 2317.406097, - 2317.493479, - 2317.580098, - 2317.66593, - 2317.750957, - 2317.835157, - 2317.918516, - 2318.001017, - 2318.082647, - 2318.163392, - 2318.243242, - 2318.322185, - 2318.400212, - 2318.477313, - 2318.553479, - 2318.628701, - 2318.702969, - 2318.776274, - 2318.848606, - 2318.919954, - 2318.990306, - 2319.059649, - 2319.127969, - 2319.195252, - 2319.261481, - 2319.326639, - 2319.390705, - 2319.453661, - 2319.515484, - 2319.576152, - 2319.635641, - 2319.693926, - 2319.750981, - 2319.806781, - 2319.861298, - 2319.914506, - 2319.966376, - 2320.016883, - 2320.065998, - 2320.113697, - 2320.159955, - 2320.204746, - 2320.248048, - 2320.28984, - 2320.330103, - 2320.36882, - 2320.405976, - 2320.441557, - 2320.475555, - 2320.507962, - 2320.538774, - 2320.567991, - 2320.595614, - 2320.621651, - 2320.646109, - 2320.669001, - 2320.690342, - 2320.710153, - 2320.728456, - 2320.745275, - 2320.760639, - 2320.77458, - 2320.78713, - 2320.798324, - 2320.8082, - 2320.816797, - 2320.824152, - 2320.830305, - 2320.835296, - 2320.839164, - 2320.841947, - 2320.843682, - 2320.844405, - 2320.844152, - 2320.842955, - 2320.840845, - 2320.837852, - 2320.834006, - 2320.829333, - 2320.823862, - 2320.817618, - 2320.81063, - 2320.802924, - 2320.794532, - 2320.785486, - 2320.775822, - 2320.765579, - 2320.754803, - 2320.743544, - 2320.731861, - 2320.719818, - 2320.707489, - 2320.694958, - 2320.682316, - 2320.669667, - 2320.657124, - 2320.644811, - 2320.632864, - 2320.621429, - 2320.610665, - 2320.600738, - 2320.591828, - 2320.584122, - 2320.577817, - 2320.573117, - 2320.570233, - 2320.569381, - 2320.570782, - 2320.574659, - 2320.581236, - 2320.590736, - 2320.603379, - 2320.619384, - 2320.63896, - 2320.66231, - 2320.689628, - 2320.721096, - 2320.756884, - 2320.797148, - 2320.842025, - 2320.89164, - 2320.946095, - 2321.005474, - 2321.069843, - 2321.139244, - 2321.213698, - 2321.293207, - 2321.377747, - 2321.467274, - 2321.561724, - 2321.661008, - 2321.765021, - 2321.873633, - 2321.9867, - 2322.104056, - 2322.225522, - 2322.3509, - 2322.479981, - 2322.612542, - 2322.748349, - 2322.88716, - 2323.028725, - 2323.172786, - 2323.319082, - 2323.467351, - 2323.617326, - 2323.768742, - 2323.921337, - 2324.074849, - 2324.229024, - 2324.383611, - 2324.538367, - 2324.693054, - 2324.847444, - 2325.001317, - 2325.154462, - 2325.306679, - 2325.457776, - 2325.607571, - 2325.755896, - 2325.902589, - 2326.047502, - 2326.190495, - 2326.331439, - 2326.470215, - 2326.606711, - 2326.740828, - 2326.872473, - 2327.001561, - 2327.128015, - 2327.251768, - 2327.372756, - 2327.490926, - 2327.606227, - 2327.718619, - 2327.828063, - 2327.934529, - 2328.037992, - 2328.138433, - 2328.235836, - 2328.330194, - 2328.421504, - 2328.509768, - 2328.594997, - 2328.677206, - 2328.756418, - 2328.832662, - 2328.905977, - 2328.976406, - 2329.044004, - 2329.108831, - 2329.170959, - 2329.230469, - 2329.287449, - 2329.341999, - 2329.394229, - 2329.444258, - 2329.492217, - 2329.538244, - 2329.582489, - 2329.625112, - 2329.666281, - 2329.706174, - 2329.744977, - 2329.782882, - 2329.820089, - 2329.856806, - 2329.893243, - 2329.929616, - 2329.966143, - 2330.003045, - 2330.040543, - 2330.078858, - 2330.118209, - 2330.158813, - 2330.200881, - 2330.24462, - 2330.290232, - 2330.337907, - 2330.387831, - 2330.440176, - 2330.495107, - 2330.552774, - 2330.613317, - 2330.676861, - 2330.74352, - 2330.81339, - 2330.886556, - 2330.963087, - 2331.043036, - 2331.126442, - 2331.213331, - 2331.303711, - 2331.397579, - 2331.494917, - 2331.595693, - 2331.699864, - 2331.807375, - 2331.918158, - 2332.032138, - 2332.149229, - 2332.269336, - 2332.392359, - 2332.51819, - 2332.646715, - 2332.777819, - 2332.911379, - 2333.047274, - 2333.185379, - 2333.325569, - 2333.46772, - 2333.611709, - 2333.757414, - 2333.904716, - 2334.053501, - 2334.203654, - 2334.35507, - 2334.507643, - 2334.661275, - 2334.815873, - 2334.971347, - 2335.127615, - 2335.284598, - 2335.442222, - 2335.600422, - 2335.759133, - 2335.918298, - 2336.077864, - 2336.237782, - 2336.398008, - 2336.558502, - 2336.719227, - 2336.880149, - 2337.041239, - 2337.20247, - 2337.363817, - 2337.525258, - 2337.686775, - 2337.848348, - 2338.009964, - 2338.171608, - 2338.333268, - 2338.494935, - 2338.6566, - 2338.818257, - 2338.979901, - 2339.141529, - 2339.30314, - 2339.464735, - 2339.626318, - 2339.787892, - 2339.949467, - 2340.111052, - 2340.272661, - 2340.434308, - 2340.596012, - 2340.757794, - 2340.919678, - 2341.081691, - 2341.243862, - 2341.406225, - 2341.568814, - 2341.731668, - 2341.894825, - 2342.05833, - 2342.222226, - 2342.386559, - 2342.551377, - 2342.716728, - 2342.88266, - 2343.049224, - 2343.216466, - 2343.384435, - 2343.553177, - 2343.722738, - 2343.893158, - 2344.064477, - 2344.236731, - 2344.409952, - 2344.584167, - 2344.7594, - 2344.935669, - 2345.112985, - 2345.291355, - 2345.470779, - 2345.65125, - 2345.832757, - 2346.01528, - 2346.198791, - 2346.383259, - 2346.568643, - 2346.754897, - 2346.941967, - 2347.129794, - 2347.318313, - 2347.507452, - 2347.697134, - 2347.887276, - 2348.077794, - 2348.268596, - 2348.459587, - 2348.65067, - 2348.841745, - 2349.032709, - 2349.223459, - 2349.413889, - 2349.603894, - 2349.793368, - 2349.982204, - 2350.170298, - 2350.357545, - 2350.543844, - 2350.729094, - 2350.913197, - 2351.096056, - 2351.27758, - 2351.457677, - 2351.636262, - 2351.81325, - 2351.988562, - 2352.16212, - 2352.333852, - 2352.503687, - 2352.671558, - 2352.837402, - 2353.001159, - 2353.162772, - 2353.322185, - 2353.479347, - 2353.634209, - 2353.786725, - 2353.936849, - 2354.084541, - 2354.229759, - 2354.372466, - 2354.512625, - 2354.650203, - 2354.785168, - 2354.917489, - 2355.047137, - 2355.174087, - 2355.298314, - 2355.419796, - 2355.538513, - 2355.654449, - 2355.767589, - 2355.877921, - 2355.985436, - 2356.090131, - 2356.192003, - 2356.291055, - 2356.387293, - 2356.480727, - 2356.571372, - 2356.659249, - 2356.74438, - 2356.826795, - 2356.906529, - 2356.983619, - 2357.058111, - 2357.130053, - 2357.1995, - 2357.26651, - 2357.331148, - 2357.393482, - 2357.453586, - 2357.511536, - 2357.567414, - 2357.621305, - 2357.673295, - 2357.723477, - 2357.771943, - 2357.818789, - 2357.86411, - 2357.908006, - 2357.950575, - 2357.991916, - 2358.03213, - 2358.071315, - 2358.10957, - 2358.14699, - 2358.183672, - 2358.219709, - 2358.255192, - 2358.290209, - 2358.324846, - 2358.359184, - 2358.393304, - 2358.427279, - 2358.461181, - 2358.495079, - 2358.529034, - 2358.563106, - 2358.59735, - 2358.631816, - 2358.666551, - 2358.701597, - 2358.736991, - 2358.772767, - 2358.808955, - 2358.84558, - 2358.882663, - 2358.920221, - 2358.958269, - 2358.996816, - 2359.035869, - 2359.075431, - 2359.115502, - 2359.15608, - 2359.197157, - 2359.238727, - 2359.280777, - 2359.323294, - 2359.366262, - 2359.409664, - 2359.453478, - 2359.497684, - 2359.542257, - 2359.587172, - 2359.632401, - 2359.677914, - 2359.723681, - 2359.769668, - 2359.815837, - 2359.862151, - 2359.908569, - 2359.955045, - 2360.001532, - 2360.047978, - 2360.09433, - 2360.140529, - 2360.186514, - 2360.23222, - 2360.277578, - 2360.322517, - 2360.366963, - 2360.41084, - 2360.45407, - 2360.496574, - 2360.538272, - 2360.579087, - 2360.618939, - 2360.657754, - 2360.69546, - 2360.731989, - 2360.767278, - 2360.801272, - 2360.833924, - 2360.865192, - 2360.895048, - 2360.923473, - 2360.950458, - 2360.976009, - 2361.000142, - 2361.022889, - 2361.044295, - 2361.064417, - 2361.083329, - 2361.101118, - 2361.117883, - 2361.133739, - 2361.148813, - 2361.163241, - 2361.177174, - 2361.190771, - 2361.204198, - 2361.217632, - 2361.231252, - 2361.245242, - 2361.259791, - 2361.275086, - 2361.291314, - 2361.308658, - 2361.327297, - 2361.347406, - 2361.369148, - 2361.39268, - 2361.418144, - 2361.445672, - 2361.475382, - 2361.507375, - 2361.541738, - 2361.578539, - 2361.617829, - 2361.659641, - 2361.703988, - 2361.750866, - 2361.800252, - 2361.852101, - 2361.906356, - 2361.962937, - 2362.02175, - 2362.082684, - 2362.145615, - 2362.210401, - 2362.276893, - 2362.344926, - 2362.414327, - 2362.484916, - 2362.556505, - 2362.6289, - 2362.701904, - 2362.775317, - 2362.848939, - 2362.92257, - 2362.996012, - 2363.069072, - 2363.141558, - 2363.213287, - 2363.284081, - 2363.353768, - 2363.422186, - 2363.489181, - 2363.554607, - 2363.618329, - 2363.680221, - 2363.740168, - 2363.798064, - 2363.853814, - 2363.907335, - 2363.958551, - 2364.007398, - 2364.053821, - 2364.097774, - 2364.139219, - 2364.178128, - 2364.214479, - 2364.24826, - 2364.279463, - 2364.308088, - 2364.334142, - 2364.357638, - 2364.378592, - 2364.397028, - 2364.412973, - 2364.42646, - 2364.437527, - 2364.446215, - 2364.45257, - 2364.456643, - 2364.458491, - 2364.458174, - 2364.455757, - 2364.451312, - 2364.444915, - 2364.436648, - 2364.426601, - 2364.414868, - 2364.401552, - 2364.38676, - 2364.370609, - 2364.353223, - 2364.334734, - 2364.315279, - 2364.295008, - 2364.274075, - 2364.252643, - 2364.230882, - 2364.20897, - 2364.187093, - 2364.16544, - 2364.144211, - 2364.123605, - 2364.103832, - 2364.0851, - 2364.067622, - 2364.051613, - 2364.037289, - 2364.024863, - 2364.014549, - 2364.006557, - 2364.001091, - 2363.998352, - 2363.998534, - 2364.00182, - 2364.008388, - 2364.018402, - 2364.032017, - 2364.049374, - 2364.070599, - 2364.095807, - 2364.125095, - 2364.158545, - 2364.196221, - 2364.238172, - 2364.284428, - 2364.335002, - 2364.389888, - 2364.449063, - 2364.512488, - 2364.580104, - 2364.651836, - 2364.727594, - 2364.807269, - 2364.89074, - 2364.977869, - 2365.068507, - 2365.16249, - 2365.259645, - 2365.359786, - 2365.462719, - 2365.568243, - 2365.676147, - 2365.786217, - 2365.898232, - 2366.011969, - 2366.127201, - 2366.243702, - 2366.361244, - 2366.479599, - 2366.598543, - 2366.717853, - 2366.837311, - 2366.9567, - 2367.075812, - 2367.194442, - 2367.312392, - 2367.429471, - 2367.545495, - 2367.660287, - 2367.773678, - 2367.885507, - 2367.995623, - 2368.103881, - 2368.210145, - 2368.314289, - 2368.416193, - 2368.51575, - 2368.612856, - 2368.707419, - 2368.799355, - 2368.888587, - 2368.975048, - 2369.058677, - 2369.139423, - 2369.217242, - 2369.292097, - 2369.363961, - 2369.432812, - 2369.498639, - 2369.561435, - 2369.621204, - 2369.677956, - 2369.731709, - 2369.782488, - 2369.830327, - 2369.875268, - 2369.917359, - 2369.956658, - 2369.993229, - 2370.027146, - 2370.058488, - 2370.087344, - 2370.11381, - 2370.137991, - 2370.159996, - 2370.179944, - 2370.197962, - 2370.214181, - 2370.228741, - 2370.241786, - 2370.253468, - 2370.263944, - 2370.273374, - 2370.281924, - 2370.289765, - 2370.297069, - 2370.304013, - 2370.310773, - 2370.317528, - 2370.324459, - 2370.331744, - 2370.339562, - 2370.34809, - 2370.357502, - 2370.367969, - 2370.379659, - 2370.392736, - 2370.407356, - 2370.423672, - 2370.44183, - 2370.461968, - 2370.484217, - 2370.508699, - 2370.535531, - 2370.564817, - 2370.596655, - 2370.631133, - 2370.668328, - 2370.708311, - 2370.751141, - 2370.796868, - 2370.845532, - 2370.897167, - 2370.951793, - 2371.009426, - 2371.070071, - 2371.133725, - 2371.20038, - 2371.270016, - 2371.342611, - 2371.418133, - 2371.496546, - 2371.577808, - 2371.661871, - 2371.748683, - 2371.838187, - 2371.930324, - 2372.02503, - 2372.122238, - 2372.22188, - 2372.323884, - 2372.428176, - 2372.534682, - 2372.643326, - 2372.754031, - 2372.866717, - 2372.981307, - 2373.097721, - 2373.215878, - 2373.335699, - 2373.457102, - 2373.580005, - 2373.704328, - 2373.829986, - 2373.956898, - 2374.08498, - 2374.214148, - 2374.344317, - 2374.475401, - 2374.607314, - 2374.73997, - 2374.87328, - 2375.007157, - 2375.14151, - 2375.276251, - 2375.411287, - 2375.54653, - 2375.681887, - 2375.817267, - 2375.952578, - 2376.087731, - 2376.222633, - 2376.357195, - 2376.491329, - 2376.624946, - 2376.75796, - 2376.890288, - 2377.021846, - 2377.152554, - 2377.282337, - 2377.411118, - 2377.538828, - 2377.665398, - 2377.790763, - 2377.914864, - 2378.037643, - 2378.159048, - 2378.279031, - 2378.397545, - 2378.514552, - 2378.630014, - 2378.743899, - 2378.856179, - 2378.966828, - 2379.075826, - 2379.183154, - 2379.288799, - 2379.392748, - 2379.494992, - 2379.595525, - 2379.694343, - 2379.791443, - 2379.886824, - 2379.980486, - 2380.072431, - 2380.16266, - 2380.251175, - 2380.33798, - 2380.423075, - 2380.506462, - 2380.588143, - 2380.668118, - 2380.746384, - 2380.822942, - 2380.897786, - 2380.970913, - 2381.042315, - 2381.111986, - 2381.179915, - 2381.246091, - 2381.310502, - 2381.373135, - 2381.433973, - 2381.493, - 2381.550199, - 2381.605551, - 2381.659036, - 2381.710635, - 2381.760327, - 2381.808091, - 2381.853905, - 2381.89775, - 2381.939603 - ], - "yaxis": "y4" - } - ], - "layout": { - "annotations": [ - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " Wind1VelX", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 1, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " Azimuth", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 0.71875, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " GenTq", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 0.4375, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " GenPwr", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 0.15625, - "yanchor": "bottom", - "yref": "paper" - } - ], - "height": 1200, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "fillpattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "title": { - "text": "TurbId: 1 - Time = 19.995 (s)" - }, - "xaxis": { - "anchor": "y", - "domain": [ - 0, - 1 - ] - }, - "xaxis2": { - "anchor": "y2", - "domain": [ - 0, - 1 - ] - }, - "xaxis3": { - "anchor": "y3", - "domain": [ - 0, - 1 - ] - }, - "xaxis4": { - "anchor": "y4", - "domain": [ - 0, - 1 - ] - }, - "yaxis": { - "anchor": "x", - "domain": [ - 0.84375, - 1 - ] - }, - "yaxis2": { - "anchor": "x2", - "domain": [ - 0.5625, - 0.71875 - ] - }, - "yaxis3": { - "anchor": "x3", - "domain": [ - 0.28125, - 0.4375 - ] - }, - "yaxis4": { - "anchor": "x4", - "domain": [ - 0, - 0.15625 - ] - } - } - } - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_sub\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m25\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:110\u001b[0m, in \u001b[0;36mRFInteractor.fast_sub\u001b[0;34m(self, N_plots_update)\u001b[0m\n\u001b[1;32m 107\u001b[0m count \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 109\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m: \n\u001b[0;32m--> 110\u001b[0m update_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubscriber\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose:\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28mprint\u001b[39m(update_)\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/socket.py:1018\u001b[0m, in \u001b[0;36mSocket.recv_json\u001b[0;34m(self, flags, **kwargs)\u001b[0m\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_json\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[1;32m 999\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a Python object as a message using json to serialize.\u001b[39;00m\n\u001b[1;32m 1000\u001b[0m \n\u001b[1;32m 1001\u001b[0m \u001b[38;5;124;03m Keyword arguments are passed on to json.loads\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`~Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1018\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1019\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: jsonapi\u001b[38;5;241m.\u001b[39mloads(buf, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs))\n", - "File \u001b[0;32m_zmq.py:1137\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:1172\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:1259\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._recv_copy\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "Subscription to FAST channel closed.\n" ] } ], "source": [ - "rfi.fast_sub(25)" + "rfi.fast_sub(100, plot=False)" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "tmp = rfi.subscriber.recv_json()\n" + "# Test 01 - Message Integrity" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rfi.sub_dict[' Time'][-1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "tmp" + "from openfast_toolbox.io import FASTOutputFile\n", + "\n", + "fastout = FASTOutputFile('../templatesDir/OFZMQ_test01/OFZMQ_test01.outb').toDataFrame()\n", + "zmqout = rfi.sub_dict " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "for key, value in tmp.items():\n", - " if key not in rfi.sub_dict:\n", - " rfi.sub_dict[key] = [] \n", - " rfi.sub_dict[key].append(value)" + "import gzip \n", + "import pickle \n", + "\n", + "with open('./zmq_logs/OFZMQ_test01.pkl.gz', 'rb') as f:\n", + " zmqout = pickle.load(gzip.open(f))" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ValueError", + "evalue": "operands could not be broadcast together with shapes (120000,) (1619,) ", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m \n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# remove last point because it's the EOF signal\u001b[39;00m\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mallclose\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfastout\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mWind1VelX_[m/s]\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mzmqout\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m Wind1VelX\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43matol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1e-5\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m np\u001b[38;5;241m.\u001b[39mallclose(fastout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAzimuth_[deg]\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], zmqout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m Azimuth\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], atol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1e-5\u001b[39m)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m np\u001b[38;5;241m.\u001b[39mallclose(fastout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mGenTq_[kN-m]\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], zmqout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m GenTq\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], atol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1e-5\u001b[39m)\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/numpy/core/numeric.py:2241\u001b[0m, in \u001b[0;36mallclose\u001b[0;34m(a, b, rtol, atol, equal_nan)\u001b[0m\n\u001b[1;32m 2170\u001b[0m \u001b[38;5;129m@array_function_dispatch\u001b[39m(_allclose_dispatcher)\n\u001b[1;32m 2171\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mallclose\u001b[39m(a, b, rtol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.e-5\u001b[39m, atol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.e-8\u001b[39m, equal_nan\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 2172\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2173\u001b[0m \u001b[38;5;124;03m Returns True if two arrays are element-wise equal within a tolerance.\u001b[39;00m\n\u001b[1;32m 2174\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2239\u001b[0m \n\u001b[1;32m 2240\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 2241\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mall\u001b[39m(\u001b[43misclose\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrtol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrtol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43matol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43matol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mequal_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mequal_nan\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 2242\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mbool\u001b[39m(res)\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/numpy/core/numeric.py:2351\u001b[0m, in \u001b[0;36misclose\u001b[0;34m(a, b, rtol, atol, equal_nan)\u001b[0m\n\u001b[1;32m 2349\u001b[0m yfin \u001b[38;5;241m=\u001b[39m isfinite(y)\n\u001b[1;32m 2350\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mall\u001b[39m(xfin) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mall\u001b[39m(yfin):\n\u001b[0;32m-> 2351\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mwithin_tol\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43matol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrtol\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 2353\u001b[0m finite \u001b[38;5;241m=\u001b[39m xfin \u001b[38;5;241m&\u001b[39m yfin\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/numpy/core/numeric.py:2332\u001b[0m, in \u001b[0;36misclose..within_tol\u001b[0;34m(x, y, atol, rtol)\u001b[0m\n\u001b[1;32m 2330\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwithin_tol\u001b[39m(x, y, atol, rtol):\n\u001b[1;32m 2331\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m errstate(invalid\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m'\u001b[39m), _no_nep50_warning():\n\u001b[0;32m-> 2332\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m less_equal(\u001b[38;5;28mabs\u001b[39m(\u001b[43mx\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43my\u001b[49m), atol \u001b[38;5;241m+\u001b[39m rtol \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mabs\u001b[39m(y))\n", + "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (120000,) (1619,) " + ] + } + ], "source": [ - "rfi.sub_dict" + "import matplotlib.pyplot as plt\n", + "import numpy as np \n", + "# remove last point because it's the EOF signal\n", + "\n", + "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-1], zmqout[' Wind1VelX'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['Azimuth_[deg]'][:-1], zmqout[' Azimuth'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenTq_[kN-m]'][:-1], zmqout[' GenTq'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenPwr_[kW]'][:-1], zmqout[' GenPwr'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['OoPDefl1_[m]'][:-1], zmqout[' OoPDefl1'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['IPDefl1_[m]'][:-1], zmqout[' IPDefl1'][:-1], atol=1e-5)" ] }, { diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py index de48093f3d..ab1e8818ac 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -9,6 +9,9 @@ import time import json import matplotlib.pyplot as plt +import gzip +import pickle +import os class RFInteractor: "" @@ -19,7 +22,10 @@ def __init__(self, ZmqOutAddress: str = 'tcp://127.0.0.1:5556', ZmqInChannels: list = [None], live_plot: bool = True, - verbose: bool = False): + verbose: bool = False, + path_out: str = None, + save_comms_log: bool = False, + name: str = 'OFZMQSims'): self.ZmqInAddress = ZmqInAddress self.ZmqOutAddress = ZmqOutAddress @@ -29,6 +35,7 @@ def __init__(self, self.allowable_requests = ['VelH', 'VelV', 'AngleH', 'AngleV', 'BlPitchCom1', 'BlPitchCom2', 'BlPitchCom3', 'GenTq', 'alpha'] self.verbose = verbose + self.name = name # ------ Connect to Publisher if self.ZmqOutAddress is not None: @@ -46,6 +53,15 @@ def __init__(self, print('ZMQ Real Time interactor for FAST initialized. \n PUB-SUB protocol: {} | REQ-REP protocol: {}'.format(self.ZmqOutAddress, self.ZmqInAddress)) + + # ------ + self.path_out = path_out + self.save_comms_log = save_comms_log + + if self.save_comms_log: + print('Communication log will be saved at: {} \n'.format(self.path_out)) + os.makedirs(self.path_out, exist_ok=True) + pass @@ -125,6 +141,19 @@ def fast_sub(self, N_plots_update = 100, plot: bool = True): # check if communication is still open if list(update_.values())[2:] == [0.0]*(self.data_length - 2): break + + print('Subscription to FAST channel closed.') + self.subscriber.close() + self.pub_context.term() + + # saving only at the end to avoid performance issues. Data is available + # real-time in self.sub_dict anyway + + if self.save_comms_log: + with gzip.open(self.path_out + '{}.pkl.gz'.format(self.name), 'wb') as f: + pickle.dump(self.sub_dict, f, protocol=pickle.HIGHEST_PROTOCOL) + + pass def fast_rep(self, rep_dict): """ diff --git a/zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py b/zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py new file mode 100644 index 0000000000..657de8757b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py @@ -0,0 +1,43 @@ +"""" +Test 01 +======= +Testing message integrity of the communication between the real-time interactor and the FAST model. + + +""" +import os +import pickle +import gzip +import numpy as np +import matplotlib.pyplot as plt + +from openfast_toolbox.io import FASTOutputFile + +def test01_integrity(path_zmq_out: str, path_fast_out: str): + + # Load zmq output + with gzip.open(path_zmq_out, 'rb') as f: + zmq_data = pickle.load(f) + + # Load FAST output + fast_data = FASTOutputFile(path_fast_out).toDataFrame() + + # # Compare + # assert len(zmq_data) == len(fast_data) + + outputs = fast_data.columns + + for output in outputs: + output_zmq = ' ' + output.split('_')[0] + assert np.allclose(zmq_data[output_zmq], fast_data[output], atol=1e-6) + + print('Test 01 passed.') + + return True + +if __name__ == '__main__': + cwd = os.getcwd() + path_zmq_out = os.path.join(cwd, '../zmq_logs/OFZMQ_test01.pkl.gz') + path_fast_out = os.path.join(cwd, '../../templateDir/Main01.outb') + test01_integrity(path_zmq_out, path_fast_out) + \ No newline at end of file From 84c3aa89534b47495bd851fb265a2d0dcf60500a Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:27:25 +0200 Subject: [PATCH 09/14] pub tests passed --- README.rst | 1 + modules/openfast-library/src/FAST_Subs.f90 | 17 +- modules/openfast-library/src/zmq_client.c | 10 +- .../OFZMQ_test01/OFZMQ_test01.AD.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01.ED.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01.SrvD.sum | 4 +- .../OFZMQ_test01/OFZMQ_test01.UA.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01.ech | 2 +- .../OFZMQ_test01/OFZMQ_test01.sum | 2 +- .../OFZMQ_test02/AeroData/Cylinder1.dat | 19 + .../OFZMQ_test02/AeroData/Cylinder2.dat | 19 + .../OFZMQ_test02/AeroData/DU21_A17.dat | 158 + .../OFZMQ_test02/AeroData/DU25_A17.dat | 157 + .../OFZMQ_test02/AeroData/DU30_A17.dat | 159 + .../OFZMQ_test02/AeroData/DU35_A17.dat | 151 + .../OFZMQ_test02/AeroData/DU40_A17.dat | 152 + .../OFZMQ_test02/AeroData/NACA64_A17.dat | 143 + .../OFZMQ_test02/Airfoils/Cylinder1.dat | 59 + .../Airfoils/Cylinder1_coords.txt | 407 + .../OFZMQ_test02/Airfoils/Cylinder2.dat | 60 + .../Airfoils/Cylinder2_coords.txt | 407 + .../OFZMQ_test02/Airfoils/DU21_A17.dat | 196 + .../OFZMQ_test02/Airfoils/DU21_A17_coords.txt | 407 + .../OFZMQ_test02/Airfoils/DU25_A17.dat | 194 + .../OFZMQ_test02/Airfoils/DU25_A17_coords.txt | 407 + .../OFZMQ_test02/Airfoils/DU30_A17.dat | 198 + .../OFZMQ_test02/Airfoils/DU30_A17_coords.txt | 407 + .../OFZMQ_test02/Airfoils/DU35_A17.dat | 189 + .../OFZMQ_test02/Airfoils/DU35_A17_coords.txt | 407 + .../OFZMQ_test02/Airfoils/DU40_A17.dat | 190 + .../OFZMQ_test02/Airfoils/DU40_A17_coords.txt | 407 + .../OFZMQ_test02/Airfoils/NACA64_A17.dat | 181 + .../Airfoils/NACA64_A17_coords.txt | 407 + .../OFZMQ_test02/Cp_Ct_Cq.NREL5MW.txt | 99 + .../templatesDir/OFZMQ_test02/DISCON.IN | 192 + .../OFZMQ_test02/IceDyn_Input.dat | 74 + .../OFZMQ_test02/IceFloe_IEC_Crushing.dat | 51 + .../NRELOffshrBsline5MW_AeroDyn_blade.dat | 28 + .../NRELOffshrBsline5MW_BeamDyn.dat | 94 + .../NRELOffshrBsline5MW_BeamDyn_Blade.dat | 756 ++ .../NRELOffshrBsline5MW_Blade.dat | 83 + .../NRELOffshrBsline5MW_InflowWind.dat | 71 + ...LOffshrBsline5MW_Monopile_IEC_Crushing.inp | 26 + .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 106 + .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 160 + ...ffshrBsline5MW_Onshore_ElastoDyn_Tower.dat | 54 + .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 110 + .../OFZMQ_test02/OFZMQ_test02.AD.sum | 61 + .../OFZMQ_test02/OFZMQ_test02.ED.sum | 210 + .../OFZMQ_test02/OFZMQ_test02.SrvD.sum | 66 + .../OFZMQ_test02/OFZMQ_test02.UA.sum | 16 + .../OFZMQ_test02/OFZMQ_test02.ech | 107 + .../OFZMQ_test02/OFZMQ_test02.fst | 86 + .../OFZMQ_test02/OFZMQ_test02.sum | 103 + .../OFZMQ_test03/AeroData/Cylinder1.dat | 19 + .../OFZMQ_test03/AeroData/Cylinder2.dat | 19 + .../OFZMQ_test03/AeroData/DU21_A17.dat | 158 + .../OFZMQ_test03/AeroData/DU25_A17.dat | 157 + .../OFZMQ_test03/AeroData/DU30_A17.dat | 159 + .../OFZMQ_test03/AeroData/DU35_A17.dat | 151 + .../OFZMQ_test03/AeroData/DU40_A17.dat | 152 + .../OFZMQ_test03/AeroData/NACA64_A17.dat | 143 + .../OFZMQ_test03/Airfoils/Cylinder1.dat | 59 + .../Airfoils/Cylinder1_coords.txt | 407 + .../OFZMQ_test03/Airfoils/Cylinder2.dat | 60 + .../Airfoils/Cylinder2_coords.txt | 407 + .../OFZMQ_test03/Airfoils/DU21_A17.dat | 196 + .../OFZMQ_test03/Airfoils/DU21_A17_coords.txt | 407 + .../OFZMQ_test03/Airfoils/DU25_A17.dat | 194 + .../OFZMQ_test03/Airfoils/DU25_A17_coords.txt | 407 + .../OFZMQ_test03/Airfoils/DU30_A17.dat | 198 + .../OFZMQ_test03/Airfoils/DU30_A17_coords.txt | 407 + .../OFZMQ_test03/Airfoils/DU35_A17.dat | 189 + .../OFZMQ_test03/Airfoils/DU35_A17_coords.txt | 407 + .../OFZMQ_test03/Airfoils/DU40_A17.dat | 190 + .../OFZMQ_test03/Airfoils/DU40_A17_coords.txt | 407 + .../OFZMQ_test03/Airfoils/NACA64_A17.dat | 181 + .../Airfoils/NACA64_A17_coords.txt | 407 + .../OFZMQ_test03/Cp_Ct_Cq.NREL5MW.txt | 99 + .../templatesDir/OFZMQ_test03/DISCON.IN | 192 + .../OFZMQ_test03/IceDyn_Input.dat | 74 + .../OFZMQ_test03/IceFloe_IEC_Crushing.dat | 51 + .../NRELOffshrBsline5MW_AeroDyn_blade.dat | 28 + .../NRELOffshrBsline5MW_BeamDyn.dat | 94 + .../NRELOffshrBsline5MW_BeamDyn_Blade.dat | 756 ++ .../NRELOffshrBsline5MW_Blade.dat | 83 + .../NRELOffshrBsline5MW_InflowWind.dat | 71 + ...LOffshrBsline5MW_Monopile_IEC_Crushing.inp | 26 + .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 106 + .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 160 + ...ffshrBsline5MW_Onshore_ElastoDyn_Tower.dat | 54 + .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 110 + .../OFZMQ_test03/OFZMQ_test03.AD.sum | 61 + .../OFZMQ_test03/OFZMQ_test03.ED.sum | 210 + .../OFZMQ_test03/OFZMQ_test03.SrvD.sum | 66 + .../OFZMQ_test03/OFZMQ_test03.UA.sum | 16 + .../OFZMQ_test03/OFZMQ_test03.ech | 107 + .../OFZMQ_test03/OFZMQ_test03.fst | 82 + .../OFZMQ_test03/OFZMQ_test03.sum | 103 + .../zmq_python_toolbox/REPtests.ipynb | 10107 +++++++++++++--- .../zmq_python_toolbox/SUBtests.ipynb | 1180 +- .../real_fast_interactor.py | 7 +- 102 files changed, 25338 insertions(+), 2062 deletions(-) create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/Cp_Ct_Cq.NREL5MW.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/DISCON.IN create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/IceDyn_Input.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/IceFloe_IEC_Crushing.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_AeroDyn_blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_InflowWind.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ServoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.AD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ED.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.SrvD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.UA.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ech create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.fst create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/Cp_Ct_Cq.NREL5MW.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/DISCON.IN create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/IceDyn_Input.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/IceFloe_IEC_Crushing.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_AeroDyn_blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum diff --git a/README.rst b/README.rst index 183c4c3fea..959697e930 100644 --- a/README.rst +++ b/README.rst @@ -24,6 +24,7 @@ detach from the ZMQ connection (close the socket). Currently, EOF signals are ze - Added warning if user passes wind speed at runtime, as it will trigger Inflow Wind to use the steady model around the rotor disk (`line 3580`) - Added variables `ZmqInDT` and `ZmqOutDT` to the input file, to set the time step for the ZMQ connection (`line 3586` - `line 3641`) - Added variable check in input: if Zmq does not recognize one requested output, it will display it (not stopping the simulation) (`line 2500` - `line 2506`) +- Added units to the ZMQ output variables (`line 2517`) ======== diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 25fd984cc5..253cdcad26 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -121,7 +121,7 @@ subroutine zmq_req(socket_address, request, request_size, values_array) call c_f_pointer(response_ptr, float_array, [request_size]) ! Print the received C string (for debugging purposes) -print *, "Received measurements: ", float_array +! print *, "Received measurements: ", float_array do i= 1, request_size values_array(i) = float_array(i) @@ -2503,7 +2503,8 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ZmqOutChnlsIdx, ZmqOutChannel if (ZmqOutChnlsIdx(i) == 0) then call WrScr('Channel not found: '//trim(p_FAST%ZmqOutChannels(i))) end if - end do + end do + end if ! Augmenting ZMQ output to handle wind turbine id and current time stamp @@ -2511,7 +2512,9 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ZmqOutChnlsIdx, ZmqOutChannel ZmqOutChannelsNames(2) = 'Time' do i = 1,p_FAST%ZmqOutNbr - ZmqOutChannelsNames(2 + i) = trim(y_FAST%ChannelNames(ZmqOutChnlsIdx(i))) ! Up to here everything OK! + ZmqOutChannelsNames(2 + i) = trim(y_FAST%ChannelNames(ZmqOutChnlsIdx(i))) ! Up to here everything OK! + ! add the units to the channel names and remove the initial space if any + ZmqOutChannelsNames(2 + i) = trim(ZmqOutChannelsNames(2 + i))//': '//trim(y_FAST%ChannelUnits(ZmqOutChnlsIdx(i))) end do end if @@ -5497,11 +5500,11 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, ! Inserting here call to ZMQ to retrieve and override routines' outputs - if ( (p_FAST%ZmqOn) .and. (p_FAST%ZmqInNbr > 0) ) then + if ( (p_FAST%ZmqOn) .and. (p_FAST%ZmqInNbr > 0)) then ! Check if there's need to communicate with the ZMQ socket (the values will be enforced for next time step) to update values - if (mod(t_global_next, p_FAST%ZmqInDT) == 0) then + if (mod(p_FAST%ZmqOutDT, t_global_next) == 0) then ! TurbID = p_FAST%TurbID ZmqInChannelsAry = 0.0_DbKi @@ -5509,6 +5512,8 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, end if ! otherwise we'll keep the values from the previous time step + ! call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) + If (ZmqInChannelsAry(1) == TurbID) then do i = 1, p_FAST%ZmqInNbr @@ -5696,7 +5701,7 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_A ! ! End of simulation time step. Broadcast results to ZMQ (assuming that we broadcast at every time step, to be modified later) ! ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - if (p_FAST%ZmqOn) then + if ((p_FAST%ZmqOn) .and. (p_FAST%ZmqOutNbr > 0) .and. (mod(t, p_FAST%ZmqOutDT) == 0)) then CALL AllocAry( ZmqOutChannelsAry, p_FAST%ZmqOutNbr + 2, 'ZmqOutChannelsAry', ErrStat, ErrMsg ) diff --git a/modules/openfast-library/src/zmq_client.c b/modules/openfast-library/src/zmq_client.c index 76ccf697e6..93782339e5 100644 --- a/modules/openfast-library/src/zmq_client.c +++ b/modules/openfast-library/src/zmq_client.c @@ -408,11 +408,11 @@ float *zmq_req_rep(const char *socket_address, const char *request) { token = strtok(NULL, delim); } - printf("Received float array:"); - for (int i = 0; i < count; ++i) { - printf(" %.4f", float_array[i]); - } - printf("\n"); + // printf("Received float array:"); + // for (int i = 0; i < count; ++i) { + // printf(" %.4f", float_array[i]); + // } + // printf("\n"); return float_array; } diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum index 97d3fb347b..8b9cb424c0 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 12-Jun-2024 at 10:59:24. +This summary information was generated by AeroDyn on 17-Jun-2024 at 11:14:12. ====== General Options ============================================================================ 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum index 27cd05c367..c526c4628a 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 12-Jun-2024 at 10:59:24. +This summary information was generated by ElastoDyn on 17-Jun-2024 at 11:14:12. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum index 32111528ec..d957df94dd 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 12-Jun-2024 at 10:59:24. +This summary file was generated by ServoDyn on 17-Jun-2024 at 11:14:12. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 12-Jun-2024 at 10:59:24. +This summary file was closed on 17-Jun-2024 at 11:14:12. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum index 0df084b4f8..5d2acd013b 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum @@ -1,5 +1,5 @@ -Predictions were generated on 12-Jun-2024 at 10:59:24 +Predictions were generated on 17-Jun-2024 at 11:14:12 OpenFAST diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech index 0978542695..607c7e5d8e 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 12-Jun-2024 at 10:59:24. +This file of echoed input was generated by OpenFAST on 17-Jun-2024 at 11:14:12. Data from OpenFAST primary input file "OFZMQ_test01.fst": diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum index 520dac4435..1a6d995f05 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum @@ -1,7 +1,7 @@ FAST Summary File -Predictions were generated on 12-Jun-2024 at 10:59:24 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-7-g2ec068f8-dirty +Predictions were generated on 17-Jun-2024 at 11:14:12 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-8-gb0f04e00-dirty compiled with NWTC Subroutine Library ElastoDyn diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder1.dat new file mode 100644 index 0000000000..4ff6d1311f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder1.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.50 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.50 Minimum CD value +-180.00 0.000 0.5000 0.000 + 0.00 0.000 0.5000 0.000 + 180.00 0.000 0.5000 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder2.dat new file mode 100644 index 0000000000..29f643ca65 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/Cylinder2.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.35 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.35 Minimum CD value +-180.00 0.000 0.3500 0.000 + 0.00 0.000 0.3500 0.000 + 180.00 0.000 0.3500 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU21_A17.dat new file mode 100644 index 0000000000..52cc6d3ff9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU21_A17.dat @@ -0,0 +1,158 @@ +DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -5.0609 Zero Cn angle of attack (deg) + 6.2047 Cn slope for zero lift (dimensionless) + 1.4144 Cn extrapolated to value at positive stall angle of attack + -0.5324 Cn at stall value for negative angle of attack + -1.50 Angle of attack for minimum CD (deg) + 0.0057 Minimum CD value +-180.00 0.000 0.0185 0.0000 +-175.00 0.394 0.0332 0.1978 +-170.00 0.788 0.0945 0.3963 +-160.00 0.670 0.2809 0.2738 +-155.00 0.749 0.3932 0.3118 +-150.00 0.797 0.5112 0.3413 +-145.00 0.818 0.6309 0.3636 +-140.00 0.813 0.7485 0.3799 +-135.00 0.786 0.8612 0.3911 +-130.00 0.739 0.9665 0.3980 +-125.00 0.675 1.0625 0.4012 +-120.00 0.596 1.1476 0.4014 +-115.00 0.505 1.2206 0.3990 +-110.00 0.403 1.2805 0.3943 +-105.00 0.294 1.3265 0.3878 +-100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU25_A17.dat new file mode 100644 index 0000000000..3c24e77f5f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU25_A17.dat @@ -0,0 +1,157 @@ +DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.2422 Zero Cn angle of attack (deg) + 6.4462 Cn slope for zero lift (dimensionless) + 1.4336 Cn extrapolated to value at positive stall angle of attack + -0.6873 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0065 Minimum CD value +-180.00 0.000 0.0202 0.0000 +-175.00 0.368 0.0324 0.1845 +-170.00 0.735 0.0943 0.3701 +-160.00 0.695 0.2848 0.2679 +-155.00 0.777 0.4001 0.3046 +-150.00 0.828 0.5215 0.3329 +-145.00 0.850 0.6447 0.3540 +-140.00 0.846 0.7660 0.3693 +-135.00 0.818 0.8823 0.3794 +-130.00 0.771 0.9911 0.3854 +-125.00 0.705 1.0905 0.3878 +-120.00 0.624 1.1787 0.3872 +-115.00 0.530 1.2545 0.3841 +-110.00 0.426 1.3168 0.3788 +-105.00 0.314 1.3650 0.3716 +-100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU30_A17.dat new file mode 100644 index 0000000000..23ecb3e9a3 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU30_A17.dat @@ -0,0 +1,159 @@ +DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -2.3220 Zero Cn angle of attack (deg) + 7.3326 Cn slope for zero lift (dimensionless) + 1.4490 Cn extrapolated to value at positive stall angle of attack + -0.6138 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0087 Minimum CD value +-180.00 0.000 0.0267 0.0000 +-175.00 0.274 0.0370 0.1379 +-170.00 0.547 0.0968 0.2778 +-160.00 0.685 0.2876 0.2740 +-155.00 0.766 0.4025 0.3118 +-150.00 0.816 0.5232 0.3411 +-145.00 0.836 0.6454 0.3631 +-140.00 0.832 0.7656 0.3791 +-135.00 0.804 0.8807 0.3899 +-130.00 0.756 0.9882 0.3965 +-125.00 0.690 1.0861 0.3994 +-120.00 0.609 1.1730 0.3992 +-115.00 0.515 1.2474 0.3964 +-110.00 0.411 1.3084 0.3915 +-105.00 0.300 1.3552 0.3846 +-100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU35_A17.dat new file mode 100644 index 0000000000..9e962a1e63 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU35_A17.dat @@ -0,0 +1,151 @@ +DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 11.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.8330 Zero Cn angle of attack (deg) + 7.1838 Cn slope for zero lift (dimensionless) + 1.6717 Cn extrapolated to value at positive stall angle of attack + -0.3075 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0094 Minimum CD value +-180.00 0.000 0.0407 0.0000 +-175.00 0.223 0.0507 0.0937 +-170.00 0.405 0.1055 0.1702 +-160.00 0.658 0.2982 0.2819 +-155.00 0.733 0.4121 0.3213 +-150.00 0.778 0.5308 0.3520 +-145.00 0.795 0.6503 0.3754 +-140.00 0.787 0.7672 0.3926 +-135.00 0.757 0.8785 0.4046 +-130.00 0.708 0.9819 0.4121 +-125.00 0.641 1.0756 0.4160 +-120.00 0.560 1.1580 0.4167 +-115.00 0.467 1.2280 0.4146 +-110.00 0.365 1.2847 0.4104 +-105.00 0.255 1.3274 0.4041 +-100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU40_A17.dat new file mode 100644 index 0000000000..08a2d28261 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/DU40_A17.dat @@ -0,0 +1,152 @@ +DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.3430 Zero Cn angle of attack (deg) + 7.4888 Cn slope for zero lift (dimensionless) + 1.3519 Cn extrapolated to value at positive stall angle of attack + -0.3226 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0113 Minimum CD value +-180.00 0.000 0.0602 0.0000 +-175.00 0.218 0.0699 0.0934 +-170.00 0.397 0.1107 0.1697 +-160.00 0.642 0.3045 0.2813 +-155.00 0.715 0.4179 0.3208 +-150.00 0.757 0.5355 0.3516 +-145.00 0.772 0.6535 0.3752 +-140.00 0.762 0.7685 0.3926 +-135.00 0.731 0.8777 0.4048 +-130.00 0.680 0.9788 0.4126 +-125.00 0.613 1.0700 0.4166 +-120.00 0.532 1.1499 0.4176 +-115.00 0.439 1.2174 0.4158 +-110.00 0.337 1.2716 0.4117 +-105.00 0.228 1.3118 0.4057 +-100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/NACA64_A17.dat new file mode 100644 index 0000000000..3db1887a38 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/AeroData/NACA64_A17.dat @@ -0,0 +1,143 @@ +NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.4320 Zero Cn angle of attack (deg) + 6.0031 Cn slope for zero lift (dimensionless) + 1.4073 Cn extrapolated to value at positive stall angle of attack + -0.7945 Cn at stall value for negative angle of attack + -1.00 Angle of attack for minimum CD (deg) + 0.0052 Minimum CD value +-180.00 0.000 0.0198 0.0000 +-175.00 0.374 0.0341 0.1880 +-170.00 0.749 0.0955 0.3770 +-160.00 0.659 0.2807 0.2747 +-155.00 0.736 0.3919 0.3130 +-150.00 0.783 0.5086 0.3428 +-145.00 0.803 0.6267 0.3654 +-140.00 0.798 0.7427 0.3820 +-135.00 0.771 0.8537 0.3935 +-130.00 0.724 0.9574 0.4007 +-125.00 0.660 1.0519 0.4042 +-120.00 0.581 1.1355 0.4047 +-115.00 0.491 1.2070 0.4025 +-110.00 0.390 1.2656 0.3981 +-105.00 0.282 1.3104 0.3918 +-100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1.dat new file mode 100644 index 0000000000..393e5d8721 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1.dat @@ -0,0 +1,59 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.50 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder1_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.5 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.5000 0.0 + 0.00 0.000 0.5000 0.0 + 180.00 0.000 0.5000 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1_coords.txt new file mode 100644 index 0000000000..3c8ec3d3b4 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder1_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.5 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2.dat new file mode 100644 index 0000000000..5294db4fdb --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2.dat @@ -0,0 +1,60 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.35 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder2_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.35 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.3500 0.0 + 0.00 0.000 0.3500 0.0 + 180.00 0.000 0.3500 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2_coords.txt new file mode 100644 index 0000000000..f95e693e67 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/Cylinder2_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.41667 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17.dat new file mode 100644 index 0000000000..7d55bb9ac2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17.dat @@ -0,0 +1,196 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU21_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4144 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.5324 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.121 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 142 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0185 0.0000 + -175.00 0.394 0.0332 0.1978 + -170.00 0.788 0.0945 0.3963 + -160.00 0.670 0.2809 0.2738 + -155.00 0.749 0.3932 0.3118 + -150.00 0.797 0.5112 0.3413 + -145.00 0.818 0.6309 0.3636 + -140.00 0.813 0.7485 0.3799 + -135.00 0.786 0.8612 0.3911 + -130.00 0.739 0.9665 0.3980 + -125.00 0.675 1.0625 0.4012 + -120.00 0.596 1.1476 0.4014 + -115.00 0.505 1.2206 0.3990 + -110.00 0.403 1.2805 0.3943 + -105.00 0.294 1.3265 0.3878 + -100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17_coords.txt new file mode 100644 index 0000000000..3728b88baa --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU21_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 93-W-210.lm +! x/c y/c +1.00000 0.00194 +0.99660 0.00304 +0.99314 0.00411 +0.98961 0.00516 +0.98601 0.00618 +0.98235 0.00720 +0.97863 0.00823 +0.97484 0.00927 +0.97098 0.01033 +0.96706 0.01139 +0.96307 0.01246 +0.95902 0.01354 +0.95490 0.01463 +0.95072 0.01573 +0.94647 0.01684 +0.94216 0.01797 +0.93778 0.01911 +0.93333 0.02026 +0.92882 0.02142 +0.92425 0.02260 +0.91961 0.02379 +0.91490 0.02499 +0.91013 0.02621 +0.90529 0.02744 +0.90039 0.02869 +0.89542 0.02995 +0.89039 0.03122 +0.88529 0.03250 +0.88013 0.03379 +0.87490 0.03510 +0.86961 0.03643 +0.86425 0.03776 +0.85882 0.03912 +0.85333 0.04048 +0.84778 0.04186 +0.84216 0.04326 +0.83647 0.04466 +0.83072 0.04608 +0.82490 0.04752 +0.81902 0.04896 +0.81307 0.05041 +0.80706 0.05188 +0.80098 0.05336 +0.79484 0.05484 +0.78863 0.05634 +0.78235 0.05784 +0.77601 0.05936 +0.76961 0.06088 +0.76314 0.06242 +0.75660 0.06396 +0.75000 0.06550 +0.74333 0.06706 +0.73667 0.06860 +0.73000 0.07014 +0.72333 0.07167 +0.71667 0.07320 +0.71000 0.07472 +0.70333 0.07624 +0.69667 0.07774 +0.69000 0.07924 +0.68333 0.08072 +0.67667 0.08220 +0.67000 0.08366 +0.66333 0.08511 +0.65667 0.08655 +0.65000 0.08798 +0.64333 0.08940 +0.63667 0.09080 +0.63000 0.09220 +0.62333 0.09357 +0.61667 0.09492 +0.61000 0.09626 +0.60333 0.09759 +0.59667 0.09889 +0.59000 0.10017 +0.58333 0.10143 +0.57667 0.10267 +0.57000 0.10389 +0.56333 0.10509 +0.55667 0.10627 +0.55000 0.10742 +0.54333 0.10854 +0.53667 0.10964 +0.53000 0.11071 +0.52333 0.11175 +0.51667 0.11277 +0.51000 0.11375 +0.50333 0.11470 +0.49667 0.11562 +0.49000 0.11650 +0.48333 0.11734 +0.47667 0.11813 +0.47000 0.11889 +0.46333 0.11960 +0.45667 0.12027 +0.45000 0.12089 +0.44333 0.12147 +0.43667 0.12200 +0.43000 0.12249 +0.42333 0.12292 +0.41667 0.12331 +0.41000 0.12365 +0.40333 0.12394 +0.39667 0.12418 +0.39000 0.12436 +0.38333 0.12449 +0.37667 0.12457 +0.37000 0.12459 +0.36333 0.12455 +0.35667 0.12446 +0.35000 0.12431 +0.34333 0.12411 +0.33667 0.12385 +0.33000 0.12353 +0.32333 0.12317 +0.31667 0.12275 +0.31000 0.12228 +0.30333 0.12175 +0.29667 0.12117 +0.29000 0.12053 +0.28333 0.11984 +0.27667 0.11910 +0.27000 0.11829 +0.26333 0.11744 +0.25667 0.11653 +0.25000 0.11557 +0.24342 0.11456 +0.23693 0.11351 +0.23053 0.11243 +0.22421 0.11130 +0.21798 0.11015 +0.21184 0.10896 +0.20579 0.10773 +0.19982 0.10648 +0.19395 0.10520 +0.18816 0.10389 +0.18245 0.10255 +0.17684 0.10119 +0.17131 0.09980 +0.16587 0.09839 +0.16052 0.09696 +0.15526 0.09550 +0.15008 0.09403 +0.14499 0.09254 +0.13999 0.09103 +0.13508 0.08950 +0.13026 0.08796 +0.12552 0.08641 +0.12087 0.08483 +0.11631 0.08325 +0.11183 0.08165 +0.10745 0.08004 +0.10315 0.07843 +0.09893 0.07679 +0.09481 0.07516 +0.09077 0.07351 +0.08683 0.07186 +0.08297 0.07021 +0.07919 0.06854 +0.07551 0.06687 +0.07191 0.06520 +0.06840 0.06353 +0.06498 0.06185 +0.06164 0.06017 +0.05840 0.05850 +0.05524 0.05682 +0.05217 0.05515 +0.04918 0.05348 +0.04629 0.05181 +0.04348 0.05015 +0.04076 0.04849 +0.03812 0.04683 +0.03558 0.04519 +0.03312 0.04356 +0.03075 0.04194 +0.02847 0.04033 +0.02627 0.03874 +0.02417 0.03716 +0.02215 0.03560 +0.02022 0.03404 +0.01837 0.03249 +0.01662 0.03094 +0.01495 0.02940 +0.01337 0.02785 +0.01187 0.02630 +0.01047 0.02476 +0.00915 0.02322 +0.00792 0.02169 +0.00678 0.02017 +0.00572 0.01864 +0.00476 0.01713 +0.00388 0.01562 +0.00309 0.01410 +0.00238 0.01253 +0.00177 0.01094 +0.00124 0.00923 +0.00080 0.00740 +0.00044 0.00537 +0.00018 0.00333 +0.00000 0.00000 +0.00018 -0.00292 +0.00044 -0.00443 +0.00080 -0.00589 +0.00124 -0.00727 +0.00177 -0.00864 +0.00238 -0.00998 +0.00309 -0.01134 +0.00388 -0.01266 +0.00476 -0.01397 +0.00572 -0.01526 +0.00678 -0.01656 +0.00792 -0.01785 +0.00915 -0.01914 +0.01047 -0.02044 +0.01187 -0.02174 +0.01337 -0.02306 +0.01495 -0.02438 +0.01662 -0.02571 +0.01837 -0.02705 +0.02022 -0.02841 +0.02215 -0.02976 +0.02417 -0.03112 +0.02627 -0.03248 +0.02847 -0.03384 +0.03075 -0.03520 +0.03312 -0.03655 +0.03558 -0.03789 +0.03812 -0.03923 +0.04076 -0.04056 +0.04348 -0.04188 +0.04629 -0.04319 +0.04918 -0.04449 +0.05217 -0.04579 +0.05524 -0.04708 +0.05840 -0.04836 +0.06164 -0.04963 +0.06498 -0.05089 +0.06840 -0.05215 +0.07191 -0.05340 +0.07551 -0.05464 +0.07919 -0.05587 +0.08297 -0.05709 +0.08683 -0.05831 +0.09077 -0.05951 +0.09481 -0.06071 +0.09893 -0.06189 +0.10315 -0.06306 +0.10745 -0.06422 +0.11183 -0.06536 +0.11631 -0.06648 +0.12087 -0.06759 +0.12552 -0.06868 +0.13026 -0.06975 +0.13508 -0.07079 +0.13999 -0.07182 +0.14499 -0.07282 +0.15008 -0.07380 +0.15526 -0.07476 +0.16052 -0.07568 +0.16587 -0.07658 +0.17131 -0.07746 +0.17684 -0.07830 +0.18245 -0.07911 +0.18816 -0.07989 +0.19395 -0.08063 +0.19982 -0.08134 +0.20579 -0.08201 +0.21184 -0.08264 +0.21798 -0.08324 +0.22421 -0.08380 +0.23053 -0.08432 +0.23693 -0.08479 +0.24342 -0.08523 +0.25000 -0.08561 +0.25667 -0.08595 +0.26333 -0.08624 +0.27000 -0.08648 +0.27667 -0.08667 +0.28333 -0.08680 +0.29000 -0.08689 +0.29667 -0.08693 +0.30333 -0.08692 +0.31000 -0.08686 +0.31667 -0.08676 +0.32333 -0.08660 +0.33000 -0.08640 +0.33667 -0.08615 +0.34333 -0.08586 +0.35000 -0.08553 +0.35667 -0.08515 +0.36333 -0.08473 +0.37000 -0.08427 +0.37667 -0.08376 +0.38333 -0.08322 +0.39000 -0.08263 +0.39667 -0.08200 +0.40333 -0.08134 +0.41000 -0.08062 +0.41667 -0.07987 +0.42333 -0.07908 +0.43000 -0.07824 +0.43667 -0.07736 +0.44333 -0.07644 +0.45000 -0.07548 +0.45667 -0.07448 +0.46333 -0.07343 +0.47000 -0.07235 +0.47667 -0.07122 +0.48333 -0.07006 +0.49000 -0.06886 +0.49667 -0.06763 +0.50333 -0.06636 +0.51000 -0.06506 +0.51667 -0.06373 +0.52333 -0.06237 +0.53000 -0.06097 +0.53667 -0.05955 +0.54333 -0.05810 +0.55000 -0.05663 +0.55667 -0.05513 +0.56333 -0.05361 +0.57000 -0.05207 +0.57667 -0.05050 +0.58333 -0.04892 +0.59000 -0.04732 +0.59667 -0.04571 +0.60333 -0.04408 +0.61000 -0.04243 +0.61667 -0.04078 +0.62333 -0.03911 +0.63000 -0.03744 +0.63667 -0.03576 +0.64333 -0.03409 +0.65000 -0.03241 +0.65667 -0.03073 +0.66333 -0.02906 +0.67000 -0.02740 +0.67667 -0.02574 +0.68333 -0.02411 +0.69000 -0.02248 +0.69667 -0.02088 +0.70333 -0.01930 +0.71000 -0.01774 +0.71667 -0.01620 +0.72333 -0.01470 +0.73000 -0.01323 +0.73667 -0.01179 +0.74333 -0.01039 +0.75000 -0.00903 +0.75660 -0.00772 +0.76314 -0.00647 +0.76961 -0.00528 +0.77601 -0.00416 +0.78235 -0.00308 +0.78863 -0.00207 +0.79484 -0.00112 +0.80098 -0.00023 +0.80706 0.00060 +0.81307 0.00136 +0.81902 0.00207 +0.82490 0.00273 +0.83072 0.00333 +0.83647 0.00387 +0.84216 0.00435 +0.84778 0.00479 +0.85333 0.00517 +0.85882 0.00550 +0.86425 0.00578 +0.86961 0.00601 +0.87490 0.00620 +0.88013 0.00633 +0.88529 0.00643 +0.89039 0.00648 +0.89542 0.00649 +0.90039 0.00646 +0.90529 0.00639 +0.91013 0.00628 +0.91490 0.00613 +0.91961 0.00595 +0.92425 0.00574 +0.92882 0.00550 +0.93333 0.00523 +0.93778 0.00494 +0.94216 0.00462 +0.94647 0.00428 +0.95072 0.00392 +0.95490 0.00355 +0.95902 0.00315 +0.96307 0.00275 +0.96706 0.00233 +0.97098 0.00189 +0.97484 0.00145 +0.97863 0.00099 +0.98235 0.00053 +0.98601 0.00005 +0.98961 -0.00044 +0.99314 -0.00094 +0.99660 -0.00143 +1.00000 -0.00194 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17.dat new file mode 100644 index 0000000000..4949fcf7e5 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17.dat @@ -0,0 +1,194 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU25_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4336 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6873 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.12 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 140 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0202 0.0000 + -175.00 0.368 0.0324 0.1845 + -170.00 0.735 0.0943 0.3701 + -160.00 0.695 0.2848 0.2679 + -155.00 0.777 0.4001 0.3046 + -150.00 0.828 0.5215 0.3329 + -145.00 0.850 0.6447 0.3540 + -140.00 0.846 0.7660 0.3693 + -135.00 0.818 0.8823 0.3794 + -130.00 0.771 0.9911 0.3854 + -125.00 0.705 1.0905 0.3878 + -120.00 0.624 1.1787 0.3872 + -115.00 0.530 1.2545 0.3841 + -110.00 0.426 1.3168 0.3788 + -105.00 0.314 1.3650 0.3716 + -100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17_coords.txt new file mode 100644 index 0000000000..8655cdc1d7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU25_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 91-W2-250.lm +! x/c y/c +1.00000 0.00213 +0.99660 0.00314 +0.99314 0.00414 +0.98961 0.00515 +0.98601 0.00617 +0.98235 0.00720 +0.97863 0.00822 +0.97484 0.00926 +0.97098 0.01030 +0.96706 0.01135 +0.96307 0.01240 +0.95902 0.01347 +0.95490 0.01454 +0.95072 0.01562 +0.94647 0.01672 +0.94216 0.01783 +0.93778 0.01895 +0.93333 0.02009 +0.92882 0.02125 +0.92425 0.02241 +0.91961 0.02359 +0.91490 0.02479 +0.91013 0.02600 +0.90529 0.02722 +0.90039 0.02846 +0.89542 0.02972 +0.89039 0.03099 +0.88529 0.03227 +0.88013 0.03357 +0.87490 0.03489 +0.86961 0.03622 +0.86425 0.03756 +0.85882 0.03892 +0.85333 0.04029 +0.84778 0.04167 +0.84216 0.04306 +0.83647 0.04447 +0.83072 0.04589 +0.82490 0.04732 +0.81902 0.04877 +0.81307 0.05023 +0.80706 0.05170 +0.80098 0.05319 +0.79484 0.05468 +0.78863 0.05619 +0.78235 0.05771 +0.77601 0.05925 +0.76961 0.06078 +0.76314 0.06233 +0.75660 0.06388 +0.75000 0.06544 +0.74333 0.06701 +0.73667 0.06857 +0.73000 0.07013 +0.72333 0.07168 +0.71667 0.07322 +0.71000 0.07475 +0.70333 0.07628 +0.69667 0.07779 +0.69000 0.07930 +0.68333 0.08080 +0.67667 0.08228 +0.67000 0.08375 +0.66333 0.08522 +0.65667 0.08667 +0.65000 0.08810 +0.64333 0.08953 +0.63667 0.09093 +0.63000 0.09233 +0.62333 0.09371 +0.61667 0.09507 +0.61000 0.09642 +0.60333 0.09775 +0.59667 0.09906 +0.59000 0.10035 +0.58333 0.10163 +0.57667 0.10289 +0.57000 0.10413 +0.56333 0.10535 +0.55667 0.10655 +0.55000 0.10773 +0.54333 0.10888 +0.53667 0.11001 +0.53000 0.11112 +0.52333 0.11221 +0.51667 0.11327 +0.51000 0.11430 +0.50333 0.11530 +0.49667 0.11628 +0.49000 0.11723 +0.48333 0.11815 +0.47667 0.11904 +0.47000 0.11991 +0.46333 0.12074 +0.45667 0.12154 +0.45000 0.12230 +0.44333 0.12303 +0.43667 0.12372 +0.43000 0.12436 +0.42333 0.12497 +0.41667 0.12554 +0.41000 0.12606 +0.40333 0.12655 +0.39667 0.12699 +0.39000 0.12738 +0.38333 0.12773 +0.37667 0.12803 +0.37000 0.12828 +0.36333 0.12846 +0.35667 0.12858 +0.35000 0.12864 +0.34333 0.12862 +0.33667 0.12853 +0.33000 0.12837 +0.32333 0.12815 +0.31667 0.12785 +0.31000 0.12749 +0.30333 0.12705 +0.29667 0.12656 +0.29000 0.12600 +0.28333 0.12538 +0.27667 0.12469 +0.27000 0.12394 +0.26333 0.12312 +0.25667 0.12224 +0.25000 0.12130 +0.24342 0.12030 +0.23693 0.11926 +0.23053 0.11817 +0.22421 0.11704 +0.21798 0.11586 +0.21184 0.11465 +0.20579 0.11340 +0.19982 0.11210 +0.19395 0.11078 +0.18816 0.10942 +0.18245 0.10803 +0.17684 0.10660 +0.17131 0.10515 +0.16587 0.10367 +0.16052 0.10217 +0.15526 0.10064 +0.15008 0.09909 +0.14499 0.09751 +0.13999 0.09591 +0.13508 0.09430 +0.13026 0.09266 +0.12552 0.09101 +0.12087 0.08934 +0.11631 0.08765 +0.11183 0.08595 +0.10745 0.08424 +0.10315 0.08251 +0.09893 0.08076 +0.09481 0.07902 +0.09077 0.07725 +0.08683 0.07549 +0.08297 0.07371 +0.07919 0.07192 +0.07551 0.07013 +0.07191 0.06834 +0.06840 0.06654 +0.06498 0.06474 +0.06164 0.06293 +0.05840 0.06113 +0.05524 0.05933 +0.05217 0.05753 +0.04918 0.05573 +0.04629 0.05393 +0.04348 0.05214 +0.04076 0.05035 +0.03812 0.04856 +0.03558 0.04679 +0.03312 0.04502 +0.03075 0.04326 +0.02847 0.04151 +0.02627 0.03976 +0.02417 0.03804 +0.02215 0.03632 +0.02022 0.03462 +0.01837 0.03293 +0.01662 0.03126 +0.01495 0.02961 +0.01337 0.02797 +0.01187 0.02635 +0.01047 0.02475 +0.00915 0.02317 +0.00792 0.02161 +0.00678 0.02007 +0.00572 0.01855 +0.00476 0.01706 +0.00388 0.01557 +0.00309 0.01409 +0.00238 0.01261 +0.00177 0.01110 +0.00124 0.00945 +0.00080 0.00766 +0.00044 0.00568 +0.00018 0.00363 +0.00000 0.00000 +0.00018 -0.00360 +0.00044 -0.00572 +0.00080 -0.00778 +0.00124 -0.00974 +0.00177 -0.01169 +0.00238 -0.01359 +0.00309 -0.01549 +0.00388 -0.01736 +0.00476 -0.01921 +0.00572 -0.02104 +0.00678 -0.02288 +0.00792 -0.02470 +0.00915 -0.02652 +0.01047 -0.02835 +0.01187 -0.03019 +0.01337 -0.03205 +0.01495 -0.03392 +0.01662 -0.03581 +0.01837 -0.03770 +0.02022 -0.03961 +0.02215 -0.04153 +0.02417 -0.04345 +0.02627 -0.04537 +0.02847 -0.04730 +0.03075 -0.04921 +0.03312 -0.05112 +0.03558 -0.05302 +0.03812 -0.05491 +0.04076 -0.05679 +0.04348 -0.05865 +0.04629 -0.06051 +0.04918 -0.06234 +0.05217 -0.06418 +0.05524 -0.06600 +0.05840 -0.06780 +0.06164 -0.06960 +0.06498 -0.07139 +0.06840 -0.07316 +0.07191 -0.07492 +0.07551 -0.07668 +0.07919 -0.07842 +0.08297 -0.08015 +0.08683 -0.08186 +0.09077 -0.08356 +0.09481 -0.08525 +0.09893 -0.08692 +0.10315 -0.08858 +0.10745 -0.09022 +0.11183 -0.09182 +0.11631 -0.09342 +0.12087 -0.09498 +0.12552 -0.09652 +0.13026 -0.09803 +0.13508 -0.09951 +0.13999 -0.10095 +0.14499 -0.10237 +0.15008 -0.10376 +0.15526 -0.10511 +0.16052 -0.10642 +0.16587 -0.10769 +0.17131 -0.10892 +0.17684 -0.11011 +0.18245 -0.11126 +0.18816 -0.11236 +0.19395 -0.11341 +0.19982 -0.11441 +0.20579 -0.11536 +0.21184 -0.11626 +0.21798 -0.11710 +0.22421 -0.11789 +0.23053 -0.11862 +0.23693 -0.11929 +0.24342 -0.11990 +0.25000 -0.12045 +0.25667 -0.12094 +0.26333 -0.12135 +0.27000 -0.12168 +0.27667 -0.12195 +0.28333 -0.12214 +0.29000 -0.12227 +0.29667 -0.12232 +0.30333 -0.12231 +0.31000 -0.12222 +0.31667 -0.12207 +0.32333 -0.12186 +0.33000 -0.12157 +0.33667 -0.12123 +0.34333 -0.12082 +0.35000 -0.12034 +0.35667 -0.11981 +0.36333 -0.11922 +0.37000 -0.11857 +0.37667 -0.11785 +0.38333 -0.11708 +0.39000 -0.11625 +0.39667 -0.11537 +0.40333 -0.11442 +0.41000 -0.11342 +0.41667 -0.11236 +0.42333 -0.11124 +0.43000 -0.11006 +0.43667 -0.10881 +0.44333 -0.10752 +0.45000 -0.10615 +0.45667 -0.10474 +0.46333 -0.10326 +0.47000 -0.10173 +0.47667 -0.10015 +0.48333 -0.09851 +0.49000 -0.09682 +0.49667 -0.09508 +0.50333 -0.09329 +0.51000 -0.09145 +0.51667 -0.08956 +0.52333 -0.08764 +0.53000 -0.08567 +0.53667 -0.08366 +0.54333 -0.08162 +0.55000 -0.07953 +0.55667 -0.07742 +0.56333 -0.07527 +0.57000 -0.07309 +0.57667 -0.07088 +0.58333 -0.06865 +0.59000 -0.06639 +0.59667 -0.06410 +0.60333 -0.06180 +0.61000 -0.05948 +0.61667 -0.05713 +0.62333 -0.05478 +0.63000 -0.05242 +0.63667 -0.05005 +0.64333 -0.04767 +0.65000 -0.04530 +0.65667 -0.04293 +0.66333 -0.04057 +0.67000 -0.03822 +0.67667 -0.03588 +0.68333 -0.03357 +0.69000 -0.03127 +0.69667 -0.02900 +0.70333 -0.02676 +0.71000 -0.02456 +0.71667 -0.02238 +0.72333 -0.02026 +0.73000 -0.01817 +0.73667 -0.01614 +0.74333 -0.01416 +0.75000 -0.01223 +0.75660 -0.01038 +0.76314 -0.00861 +0.76961 -0.00692 +0.77601 -0.00532 +0.78235 -0.00381 +0.78863 -0.00238 +0.79484 -0.00103 +0.80098 0.00023 +0.80706 0.00141 +0.81307 0.00250 +0.81902 0.00351 +0.82490 0.00444 +0.83072 0.00529 +0.83647 0.00606 +0.84216 0.00675 +0.84778 0.00737 +0.85333 0.00791 +0.85882 0.00839 +0.86425 0.00879 +0.86961 0.00913 +0.87490 0.00940 +0.88013 0.00961 +0.88529 0.00975 +0.89039 0.00983 +0.89542 0.00985 +0.90039 0.00982 +0.90529 0.00972 +0.91013 0.00957 +0.91490 0.00936 +0.91961 0.00910 +0.92425 0.00880 +0.92882 0.00844 +0.93333 0.00804 +0.93778 0.00760 +0.94216 0.00712 +0.94647 0.00660 +0.95072 0.00606 +0.95490 0.00549 +0.95902 0.00490 +0.96307 0.00429 +0.96706 0.00367 +0.97098 0.00303 +0.97484 0.00238 +0.97863 0.00173 +0.98235 0.00108 +0.98601 0.00043 +0.98961 -0.00022 +0.99314 -0.00086 +0.99660 -0.00149 +1.00000 -0.00213 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17.dat new file mode 100644 index 0000000000..2173054243 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17.dat @@ -0,0 +1,198 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU30_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -2.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.449 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6138 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.008 Cd0 ! 2D drag coefficient value at 0-lift. + -0.09 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 143 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0267 0.0000 + -175.00 0.274 0.0370 0.1379 + -170.00 0.547 0.0968 0.2778 + -160.00 0.685 0.2876 0.2740 + -155.00 0.766 0.4025 0.3118 + -150.00 0.816 0.5232 0.3411 + -145.00 0.836 0.6454 0.3631 + -140.00 0.832 0.7656 0.3791 + -135.00 0.804 0.8807 0.3899 + -130.00 0.756 0.9882 0.3965 + -125.00 0.690 1.0861 0.3994 + -120.00 0.609 1.1730 0.3992 + -115.00 0.515 1.2474 0.3964 + -110.00 0.411 1.3084 0.3915 + -105.00 0.300 1.3552 0.3846 + -100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17_coords.txt new file mode 100644 index 0000000000..0f010f6506 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU30_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 97-W-300.lm +! x/c y/c +1.00000 0.00246 +0.99660 0.00340 +0.99314 0.00437 +0.98961 0.00536 +0.98601 0.00638 +0.98235 0.00740 +0.97863 0.00843 +0.97484 0.00947 +0.97098 0.01051 +0.96706 0.01157 +0.96307 0.01264 +0.95902 0.01371 +0.95490 0.01479 +0.95072 0.01588 +0.94647 0.01698 +0.94216 0.01810 +0.93778 0.01922 +0.93333 0.02036 +0.92882 0.02151 +0.92425 0.02268 +0.91961 0.02386 +0.91490 0.02505 +0.91013 0.02626 +0.90529 0.02749 +0.90039 0.02873 +0.89542 0.02999 +0.89039 0.03126 +0.88529 0.03255 +0.88013 0.03385 +0.87490 0.03516 +0.86961 0.03649 +0.86425 0.03784 +0.85882 0.03921 +0.85333 0.04058 +0.84778 0.04197 +0.84216 0.04337 +0.83647 0.04479 +0.83072 0.04622 +0.82490 0.04767 +0.81902 0.04913 +0.81307 0.05060 +0.80706 0.05208 +0.80098 0.05357 +0.79484 0.05508 +0.78863 0.05659 +0.78235 0.05812 +0.77601 0.05965 +0.76961 0.06120 +0.76314 0.06275 +0.75660 0.06432 +0.75000 0.06589 +0.74333 0.06747 +0.73667 0.06904 +0.73000 0.07061 +0.72333 0.07217 +0.71667 0.07371 +0.71000 0.07525 +0.70333 0.07678 +0.69667 0.07830 +0.69000 0.07981 +0.68333 0.08131 +0.67667 0.08280 +0.67000 0.08428 +0.66333 0.08575 +0.65667 0.08720 +0.65000 0.08864 +0.64333 0.09008 +0.63667 0.09149 +0.63000 0.09290 +0.62333 0.09429 +0.61667 0.09566 +0.61000 0.09703 +0.60333 0.09837 +0.59667 0.09970 +0.59000 0.10102 +0.58333 0.10232 +0.57667 0.10360 +0.57000 0.10486 +0.56333 0.10611 +0.55667 0.10734 +0.55000 0.10855 +0.54333 0.10975 +0.53667 0.11092 +0.53000 0.11207 +0.52333 0.11321 +0.51667 0.11432 +0.51000 0.11541 +0.50333 0.11648 +0.49667 0.11752 +0.49000 0.11854 +0.48333 0.11954 +0.47667 0.12051 +0.47000 0.12146 +0.46333 0.12239 +0.45667 0.12328 +0.45000 0.12415 +0.44333 0.12500 +0.43667 0.12581 +0.43000 0.12659 +0.42333 0.12734 +0.41667 0.12806 +0.41000 0.12875 +0.40333 0.12940 +0.39667 0.13001 +0.39000 0.13059 +0.38333 0.13113 +0.37667 0.13164 +0.37000 0.13210 +0.36333 0.13252 +0.35667 0.13290 +0.35000 0.13323 +0.34333 0.13352 +0.33667 0.13377 +0.33000 0.13396 +0.32333 0.13411 +0.31667 0.13420 +0.31000 0.13424 +0.30333 0.13422 +0.29667 0.13415 +0.29000 0.13401 +0.28333 0.13381 +0.27667 0.13355 +0.27000 0.13321 +0.26333 0.13280 +0.25667 0.13231 +0.25000 0.13174 +0.24342 0.13109 +0.23693 0.13036 +0.23053 0.12955 +0.22421 0.12866 +0.21798 0.12771 +0.21184 0.12668 +0.20579 0.12559 +0.19982 0.12444 +0.19395 0.12324 +0.18816 0.12197 +0.18245 0.12066 +0.17684 0.11930 +0.17131 0.11789 +0.16587 0.11644 +0.16052 0.11495 +0.15526 0.11342 +0.15008 0.11185 +0.14499 0.11024 +0.13999 0.10860 +0.13508 0.10693 +0.13026 0.10522 +0.12552 0.10348 +0.12087 0.10172 +0.11631 0.09993 +0.11183 0.09811 +0.10745 0.09627 +0.10315 0.09441 +0.09893 0.09252 +0.09481 0.09061 +0.09077 0.08869 +0.08683 0.08675 +0.08297 0.08478 +0.07919 0.08280 +0.07551 0.08082 +0.07191 0.07881 +0.06840 0.07680 +0.06498 0.07477 +0.06164 0.07274 +0.05840 0.07070 +0.05524 0.06865 +0.05217 0.06660 +0.04918 0.06454 +0.04629 0.06248 +0.04348 0.06042 +0.04076 0.05835 +0.03812 0.05629 +0.03558 0.05423 +0.03312 0.05217 +0.03075 0.05012 +0.02847 0.04808 +0.02627 0.04604 +0.02417 0.04402 +0.02215 0.04200 +0.02022 0.03999 +0.01837 0.03799 +0.01662 0.03602 +0.01495 0.03405 +0.01337 0.03211 +0.01187 0.03017 +0.01047 0.02827 +0.00915 0.02637 +0.00792 0.02450 +0.00678 0.02266 +0.00572 0.02083 +0.00476 0.01904 +0.00388 0.01725 +0.00309 0.01548 +0.00238 0.01370 +0.00177 0.01194 +0.00124 0.01010 +0.00080 0.00820 +0.00044 0.00612 +0.00018 0.00390 +0.00000 0.00000 +0.00018 -0.00382 +0.00044 -0.00601 +0.00080 -0.00815 +0.00124 -0.01017 +0.00177 -0.01216 +0.00238 -0.01412 +0.00309 -0.01611 +0.00388 -0.01811 +0.00476 -0.02014 +0.00572 -0.02217 +0.00678 -0.02423 +0.00792 -0.02630 +0.00915 -0.02840 +0.01047 -0.03053 +0.01187 -0.03267 +0.01337 -0.03485 +0.01495 -0.03705 +0.01662 -0.03929 +0.01837 -0.04154 +0.02022 -0.04385 +0.02215 -0.04617 +0.02417 -0.04852 +0.02627 -0.05088 +0.02847 -0.05328 +0.03075 -0.05569 +0.03312 -0.05813 +0.03558 -0.06060 +0.03812 -0.06308 +0.04076 -0.06559 +0.04348 -0.06811 +0.04629 -0.07064 +0.04918 -0.07318 +0.05217 -0.07574 +0.05524 -0.07831 +0.05840 -0.08088 +0.06164 -0.08345 +0.06498 -0.08604 +0.06840 -0.08862 +0.07191 -0.09121 +0.07551 -0.09379 +0.07919 -0.09637 +0.08297 -0.09895 +0.08683 -0.10152 +0.09077 -0.10408 +0.09481 -0.10665 +0.09893 -0.10919 +0.10315 -0.11173 +0.10745 -0.11425 +0.11183 -0.11675 +0.11631 -0.11923 +0.12087 -0.12169 +0.12552 -0.12412 +0.13026 -0.12652 +0.13508 -0.12888 +0.13999 -0.13121 +0.14499 -0.13350 +0.15008 -0.13576 +0.15526 -0.13797 +0.16052 -0.14014 +0.16587 -0.14225 +0.17131 -0.14432 +0.17684 -0.14633 +0.18245 -0.14828 +0.18816 -0.15017 +0.19395 -0.15198 +0.19982 -0.15371 +0.20579 -0.15537 +0.21184 -0.15693 +0.21798 -0.15840 +0.22421 -0.15976 +0.23053 -0.16101 +0.23693 -0.16214 +0.24342 -0.16314 +0.25000 -0.16399 +0.25667 -0.16470 +0.26333 -0.16526 +0.27000 -0.16567 +0.27667 -0.16592 +0.28333 -0.16602 +0.29000 -0.16598 +0.29667 -0.16580 +0.30333 -0.16548 +0.31000 -0.16503 +0.31667 -0.16445 +0.32333 -0.16374 +0.33000 -0.16291 +0.33667 -0.16198 +0.34333 -0.16094 +0.35000 -0.15980 +0.35667 -0.15855 +0.36333 -0.15722 +0.37000 -0.15580 +0.37667 -0.15429 +0.38333 -0.15270 +0.39000 -0.15104 +0.39667 -0.14931 +0.40333 -0.14752 +0.41000 -0.14566 +0.41667 -0.14374 +0.42333 -0.14178 +0.43000 -0.13977 +0.43667 -0.13772 +0.44333 -0.13562 +0.45000 -0.13348 +0.45667 -0.13130 +0.46333 -0.12908 +0.47000 -0.12683 +0.47667 -0.12456 +0.48333 -0.12225 +0.49000 -0.11992 +0.49667 -0.11757 +0.50333 -0.11520 +0.51000 -0.11281 +0.51667 -0.11040 +0.52333 -0.10799 +0.53000 -0.10555 +0.53667 -0.10310 +0.54333 -0.10065 +0.55000 -0.09818 +0.55667 -0.09570 +0.56333 -0.09321 +0.57000 -0.09071 +0.57667 -0.08821 +0.58333 -0.08571 +0.59000 -0.08320 +0.59667 -0.08070 +0.60333 -0.07819 +0.61000 -0.07569 +0.61667 -0.07319 +0.62333 -0.07070 +0.63000 -0.06820 +0.63667 -0.06572 +0.64333 -0.06325 +0.65000 -0.06079 +0.65667 -0.05834 +0.66333 -0.05590 +0.67000 -0.05347 +0.67667 -0.05106 +0.68333 -0.04867 +0.69000 -0.04629 +0.69667 -0.04394 +0.70333 -0.04161 +0.71000 -0.03931 +0.71667 -0.03703 +0.72333 -0.03478 +0.73000 -0.03256 +0.73667 -0.03037 +0.74333 -0.02822 +0.75000 -0.02610 +0.75660 -0.02405 +0.76314 -0.02205 +0.76961 -0.02013 +0.77601 -0.01827 +0.78235 -0.01647 +0.78863 -0.01474 +0.79484 -0.01309 +0.80098 -0.01150 +0.80706 -0.00998 +0.81307 -0.00854 +0.81902 -0.00717 +0.82490 -0.00586 +0.83072 -0.00462 +0.83647 -0.00346 +0.84216 -0.00236 +0.84778 -0.00133 +0.85333 -0.00037 +0.85882 0.00052 +0.86425 0.00134 +0.86961 0.00210 +0.87490 0.00278 +0.88013 0.00340 +0.88529 0.00395 +0.89039 0.00444 +0.89542 0.00487 +0.90039 0.00524 +0.90529 0.00555 +0.91013 0.00580 +0.91490 0.00600 +0.91961 0.00614 +0.92425 0.00622 +0.92882 0.00625 +0.93333 0.00623 +0.93778 0.00615 +0.94216 0.00602 +0.94647 0.00583 +0.95072 0.00558 +0.95490 0.00528 +0.95902 0.00493 +0.96307 0.00452 +0.96706 0.00405 +0.97098 0.00352 +0.97484 0.00294 +0.97863 0.00231 +0.98235 0.00163 +0.98601 0.00090 +0.98961 0.00012 +0.99314 -0.00071 +0.99660 -0.00158 +1.00000 -0.00246 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17.dat new file mode 100644 index 0000000000..750b46ecbf --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17.dat @@ -0,0 +1,189 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU35_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -1.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 11.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -11.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.6717 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3075 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.012 Cd0 ! 2D drag coefficient value at 0-lift. + -0.07 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 135 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0407 0.0000 + -175.00 0.223 0.0507 0.0937 + -170.00 0.405 0.1055 0.1702 + -160.00 0.658 0.2982 0.2819 + -155.00 0.733 0.4121 0.3213 + -150.00 0.778 0.5308 0.3520 + -145.00 0.795 0.6503 0.3754 + -140.00 0.787 0.7672 0.3926 + -135.00 0.757 0.8785 0.4046 + -130.00 0.708 0.9819 0.4121 + -125.00 0.641 1.0756 0.4160 + -120.00 0.560 1.1580 0.4167 + -115.00 0.467 1.2280 0.4146 + -110.00 0.365 1.2847 0.4104 + -105.00 0.255 1.3274 0.4041 + -100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17_coords.txt new file mode 100644 index 0000000000..b1b81649b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU35_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU 35 +! x/c y/c +1.00000 0.00283 +0.99660 0.00378 +0.99314 0.00477 +0.98961 0.00578 +0.98601 0.00683 +0.98235 0.00789 +0.97863 0.00897 +0.97484 0.01006 +0.97098 0.01116 +0.96706 0.01228 +0.96307 0.01342 +0.95902 0.01456 +0.95490 0.01571 +0.95072 0.01688 +0.94647 0.01806 +0.94216 0.01926 +0.93778 0.02046 +0.93333 0.02169 +0.92882 0.02292 +0.92425 0.02419 +0.91961 0.02547 +0.91490 0.02675 +0.91013 0.02807 +0.90529 0.02941 +0.90039 0.03077 +0.89542 0.03214 +0.89039 0.03353 +0.88529 0.03495 +0.88013 0.03638 +0.87490 0.03782 +0.86961 0.03929 +0.86425 0.04079 +0.85882 0.04230 +0.85333 0.04383 +0.84778 0.04538 +0.84216 0.04694 +0.83647 0.04853 +0.83072 0.05013 +0.82490 0.05176 +0.81902 0.05340 +0.81307 0.05506 +0.80706 0.05673 +0.80098 0.05842 +0.79484 0.06013 +0.78863 0.06184 +0.78235 0.06358 +0.77601 0.06531 +0.76961 0.06708 +0.76314 0.06885 +0.75660 0.07064 +0.75000 0.07244 +0.74333 0.07426 +0.73667 0.07606 +0.73000 0.07786 +0.72333 0.07966 +0.71667 0.08144 +0.71000 0.08322 +0.70333 0.08498 +0.69667 0.08674 +0.69000 0.08849 +0.68333 0.09022 +0.67667 0.09196 +0.67000 0.09368 +0.66333 0.09539 +0.65667 0.09708 +0.65000 0.09876 +0.64333 0.10044 +0.63667 0.10210 +0.63000 0.10375 +0.62333 0.10538 +0.61667 0.10699 +0.61000 0.10859 +0.60333 0.11017 +0.59667 0.11174 +0.59000 0.11330 +0.58333 0.11483 +0.57667 0.11634 +0.57000 0.11784 +0.56333 0.11931 +0.55667 0.12077 +0.55000 0.12220 +0.54333 0.12363 +0.53667 0.12502 +0.53000 0.12639 +0.52333 0.12775 +0.51667 0.12907 +0.51000 0.13037 +0.50333 0.13165 +0.49667 0.13289 +0.49000 0.13411 +0.48333 0.13531 +0.47667 0.13648 +0.47000 0.13761 +0.46333 0.13873 +0.45667 0.13980 +0.45000 0.14086 +0.44333 0.14189 +0.43667 0.14288 +0.43000 0.14384 +0.42333 0.14477 +0.41667 0.14566 +0.41000 0.14653 +0.40333 0.14736 +0.39667 0.14814 +0.39000 0.14889 +0.38333 0.14960 +0.37667 0.15028 +0.37000 0.15091 +0.36333 0.15151 +0.35667 0.15207 +0.35000 0.15258 +0.34333 0.15306 +0.33667 0.15351 +0.33000 0.15391 +0.32333 0.15426 +0.31667 0.15457 +0.31000 0.15482 +0.30333 0.15502 +0.29667 0.15516 +0.29000 0.15524 +0.28333 0.15525 +0.27667 0.15520 +0.27000 0.15507 +0.26333 0.15486 +0.25667 0.15457 +0.25000 0.15419 +0.24342 0.15372 +0.23693 0.15316 +0.23053 0.15250 +0.22421 0.15175 +0.21798 0.15094 +0.21184 0.15002 +0.20579 0.14904 +0.19982 0.14798 +0.19395 0.14686 +0.18816 0.14566 +0.18245 0.14439 +0.17684 0.14308 +0.17131 0.14169 +0.16587 0.14025 +0.16052 0.13875 +0.15526 0.13721 +0.15008 0.13561 +0.14499 0.13396 +0.13999 0.13226 +0.13508 0.13052 +0.13026 0.12873 +0.12552 0.12689 +0.12087 0.12502 +0.11631 0.12311 +0.11183 0.12115 +0.10745 0.11917 +0.10315 0.11715 +0.09893 0.11509 +0.09481 0.11299 +0.09077 0.11087 +0.08683 0.10871 +0.08297 0.10652 +0.07919 0.10430 +0.07551 0.10207 +0.07191 0.09979 +0.06840 0.09750 +0.06498 0.09517 +0.06164 0.09284 +0.05840 0.09048 +0.05524 0.08809 +0.05217 0.08569 +0.04918 0.08327 +0.04629 0.08084 +0.04348 0.07839 +0.04076 0.07592 +0.03812 0.07345 +0.03558 0.07096 +0.03312 0.06847 +0.03075 0.06597 +0.02847 0.06348 +0.02627 0.06097 +0.02417 0.05847 +0.02215 0.05596 +0.02022 0.05344 +0.01837 0.05091 +0.01662 0.04841 +0.01495 0.04589 +0.01337 0.04339 +0.01187 0.04088 +0.01047 0.03840 +0.00915 0.03591 +0.00792 0.03343 +0.00678 0.03096 +0.00572 0.02845 +0.00476 0.02592 +0.00388 0.02329 +0.00309 0.02056 +0.00238 0.01774 +0.00177 0.01503 +0.00124 0.01240 +0.00080 0.00990 +0.00044 0.00733 +0.00018 0.00465 +0.00000 0.00000 +0.00018 -0.00461 +0.00044 -0.00726 +0.00080 -0.00990 +0.00124 -0.01246 +0.00177 -0.01509 +0.00238 -0.01776 +0.00309 -0.02049 +0.00388 -0.02317 +0.00476 -0.02585 +0.00572 -0.02848 +0.00678 -0.03112 +0.00792 -0.03376 +0.00915 -0.03642 +0.01047 -0.03911 +0.01187 -0.04178 +0.01337 -0.04450 +0.01495 -0.04721 +0.01662 -0.04995 +0.01837 -0.05269 +0.02022 -0.05547 +0.02215 -0.05825 +0.02417 -0.06105 +0.02627 -0.06386 +0.02847 -0.06670 +0.03075 -0.06955 +0.03312 -0.07244 +0.03558 -0.07536 +0.03812 -0.07828 +0.04076 -0.08125 +0.04348 -0.08422 +0.04629 -0.08720 +0.04918 -0.09020 +0.05217 -0.09321 +0.05524 -0.09622 +0.05840 -0.09925 +0.06164 -0.10225 +0.06498 -0.10528 +0.06840 -0.10829 +0.07191 -0.11131 +0.07551 -0.11431 +0.07919 -0.11730 +0.08297 -0.12028 +0.08683 -0.12325 +0.09077 -0.12619 +0.09481 -0.12914 +0.09893 -0.13205 +0.10315 -0.13494 +0.10745 -0.13780 +0.11183 -0.14065 +0.11631 -0.14345 +0.12087 -0.14624 +0.12552 -0.14898 +0.13026 -0.15169 +0.13508 -0.15435 +0.13999 -0.15697 +0.14499 -0.15954 +0.15008 -0.16207 +0.15526 -0.16454 +0.16052 -0.16696 +0.16587 -0.16932 +0.17131 -0.17163 +0.17684 -0.17387 +0.18245 -0.17603 +0.18816 -0.17814 +0.19395 -0.18015 +0.19982 -0.18207 +0.20579 -0.18391 +0.21184 -0.18564 +0.21798 -0.18727 +0.22421 -0.18877 +0.23053 -0.19015 +0.23693 -0.19140 +0.24342 -0.19250 +0.25000 -0.19343 +0.25667 -0.19420 +0.26333 -0.19481 +0.27000 -0.19525 +0.27667 -0.19552 +0.28333 -0.19562 +0.29000 -0.19556 +0.29667 -0.19535 +0.30333 -0.19498 +0.31000 -0.19448 +0.31667 -0.19383 +0.32333 -0.19303 +0.33000 -0.19211 +0.33667 -0.19107 +0.34333 -0.18991 +0.35000 -0.18864 +0.35667 -0.18725 +0.36333 -0.18577 +0.37000 -0.18418 +0.37667 -0.18251 +0.38333 -0.18074 +0.39000 -0.17889 +0.39667 -0.17695 +0.40333 -0.17496 +0.41000 -0.17288 +0.41667 -0.17074 +0.42333 -0.16855 +0.43000 -0.16631 +0.43667 -0.16402 +0.44333 -0.16167 +0.45000 -0.15929 +0.45667 -0.15684 +0.46333 -0.15436 +0.47000 -0.15185 +0.47667 -0.14930 +0.48333 -0.14671 +0.49000 -0.14410 +0.49667 -0.14147 +0.50333 -0.13881 +0.51000 -0.13613 +0.51667 -0.13342 +0.52333 -0.13071 +0.53000 -0.12797 +0.53667 -0.12522 +0.54333 -0.12247 +0.55000 -0.11970 +0.55667 -0.11692 +0.56333 -0.11413 +0.57000 -0.11133 +0.57667 -0.10853 +0.58333 -0.10573 +0.59000 -0.10293 +0.59667 -0.10014 +0.60333 -0.09734 +0.61000 -0.09456 +0.61667 -0.09178 +0.62333 -0.08901 +0.63000 -0.08624 +0.63667 -0.08348 +0.64333 -0.08074 +0.65000 -0.07801 +0.65667 -0.07529 +0.66333 -0.07257 +0.67000 -0.06987 +0.67667 -0.06719 +0.68333 -0.06452 +0.69000 -0.06186 +0.69667 -0.05922 +0.70333 -0.05661 +0.71000 -0.05401 +0.71667 -0.05144 +0.72333 -0.04889 +0.73000 -0.04637 +0.73667 -0.04386 +0.74333 -0.04140 +0.75000 -0.03896 +0.75660 -0.03658 +0.76314 -0.03425 +0.76961 -0.03199 +0.77601 -0.02979 +0.78235 -0.02765 +0.78863 -0.02557 +0.79484 -0.02357 +0.80098 -0.02162 +0.80706 -0.01974 +0.81307 -0.01794 +0.81902 -0.01621 +0.82490 -0.01454 +0.83072 -0.01294 +0.83647 -0.01142 +0.84216 -0.00996 +0.84778 -0.00858 +0.85333 -0.00727 +0.85882 -0.00604 +0.86425 -0.00487 +0.86961 -0.00377 +0.87490 -0.00276 +0.88013 -0.00182 +0.88529 -0.00095 +0.89039 -0.00014 +0.89542 0.00061 +0.90039 0.00128 +0.90529 0.00189 +0.91013 0.00243 +0.91490 0.00293 +0.91961 0.00335 +0.92425 0.00370 +0.92882 0.00401 +0.93333 0.00425 +0.93778 0.00441 +0.94216 0.00452 +0.94647 0.00455 +0.95072 0.00451 +0.95490 0.00439 +0.95902 0.00420 +0.96307 0.00394 +0.96706 0.00358 +0.97098 0.00315 +0.97484 0.00264 +0.97863 0.00206 +0.98235 0.00141 +0.98601 0.00069 +0.98961 -0.00011 +0.99314 -0.00097 +0.99660 -0.00190 +1.00000 -0.00283 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17.dat new file mode 100644 index 0000000000..3882d07ad9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17.dat @@ -0,0 +1,190 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU40_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.3519 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3226 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.03 Cd0 ! 2D drag coefficient value at 0-lift. + -0.05 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 136 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0602 0.0000 + -175.00 0.218 0.0699 0.0934 + -170.00 0.397 0.1107 0.1697 + -160.00 0.642 0.3045 0.2813 + -155.00 0.715 0.4179 0.3208 + -150.00 0.757 0.5355 0.3516 + -145.00 0.772 0.6535 0.3752 + -140.00 0.762 0.7685 0.3926 + -135.00 0.731 0.8777 0.4048 + -130.00 0.680 0.9788 0.4126 + -125.00 0.613 1.0700 0.4166 + -120.00 0.532 1.1499 0.4176 + -115.00 0.439 1.2174 0.4158 + -110.00 0.337 1.2716 0.4117 + -105.00 0.228 1.3118 0.4057 + -100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17_coords.txt new file mode 100644 index 0000000000..24e0ec78c9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/DU40_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.33087 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU4050 +! x/c y/c +1.00000 0.00347 +0.99660 0.00455 +0.99314 0.00565 +0.98961 0.00678 +0.98601 0.00795 +0.98235 0.00914 +0.97863 0.01035 +0.97484 0.01158 +0.97098 0.01283 +0.96706 0.01410 +0.96307 0.01539 +0.95902 0.01670 +0.95490 0.01803 +0.95072 0.01937 +0.94647 0.02074 +0.94216 0.02212 +0.93778 0.02352 +0.93333 0.02495 +0.92882 0.02639 +0.92425 0.02786 +0.91961 0.02936 +0.91490 0.03087 +0.91013 0.03242 +0.90529 0.03400 +0.90039 0.03560 +0.89542 0.03723 +0.89039 0.03887 +0.88529 0.04056 +0.88013 0.04226 +0.87490 0.04399 +0.86961 0.04575 +0.86425 0.04754 +0.85882 0.04935 +0.85333 0.05119 +0.84778 0.05305 +0.84216 0.05493 +0.83647 0.05685 +0.83072 0.05878 +0.82490 0.06076 +0.81902 0.06275 +0.81307 0.06476 +0.80706 0.06680 +0.80098 0.06886 +0.79484 0.07094 +0.78863 0.07304 +0.78235 0.07517 +0.77601 0.07730 +0.76961 0.07947 +0.76314 0.08165 +0.75660 0.08386 +0.75000 0.08608 +0.74333 0.08832 +0.73667 0.09056 +0.73000 0.09279 +0.72333 0.09502 +0.71667 0.09724 +0.71000 0.09946 +0.70333 0.10166 +0.69667 0.10386 +0.69000 0.10605 +0.68333 0.10822 +0.67667 0.11040 +0.67000 0.11256 +0.66333 0.11471 +0.65667 0.11685 +0.65000 0.11897 +0.64333 0.12109 +0.63667 0.12318 +0.63000 0.12527 +0.62333 0.12733 +0.61667 0.12938 +0.61000 0.13142 +0.60333 0.13343 +0.59667 0.13543 +0.59000 0.13742 +0.58333 0.13938 +0.57667 0.14131 +0.57000 0.14323 +0.56333 0.14512 +0.55667 0.14698 +0.55000 0.14882 +0.54333 0.15064 +0.53667 0.15242 +0.53000 0.15417 +0.52333 0.15591 +0.51667 0.15759 +0.51000 0.15925 +0.50333 0.16088 +0.49667 0.16246 +0.49000 0.16401 +0.48333 0.16553 +0.47667 0.16701 +0.47000 0.16844 +0.46333 0.16985 +0.45667 0.17120 +0.45000 0.17253 +0.44333 0.17381 +0.43667 0.17504 +0.43000 0.17624 +0.42333 0.17739 +0.41667 0.17849 +0.41000 0.17957 +0.40333 0.18058 +0.39667 0.18154 +0.39000 0.18246 +0.38333 0.18333 +0.37667 0.18415 +0.37000 0.18491 +0.36333 0.18563 +0.35667 0.18629 +0.35000 0.18690 +0.34333 0.18746 +0.33667 0.18797 +0.33000 0.18842 +0.32333 0.18881 +0.31667 0.18914 +0.31000 0.18940 +0.30333 0.18961 +0.29667 0.18973 +0.29000 0.18979 +0.28333 0.18977 +0.27667 0.18968 +0.27000 0.18950 +0.26333 0.18924 +0.25667 0.18890 +0.25000 0.18845 +0.24342 0.18791 +0.23693 0.18729 +0.23053 0.18657 +0.22421 0.18575 +0.21798 0.18487 +0.21184 0.18388 +0.20579 0.18282 +0.19982 0.18167 +0.19395 0.18046 +0.18816 0.17916 +0.18245 0.17778 +0.17684 0.17634 +0.17131 0.17482 +0.16587 0.17323 +0.16052 0.17158 +0.15526 0.16987 +0.15008 0.16809 +0.14499 0.16625 +0.13999 0.16436 +0.13508 0.16240 +0.13026 0.16038 +0.12552 0.15831 +0.12087 0.15619 +0.11631 0.15402 +0.11183 0.15179 +0.10745 0.14953 +0.10315 0.14722 +0.09893 0.14485 +0.09481 0.14243 +0.09077 0.13998 +0.08683 0.13748 +0.08297 0.13493 +0.07919 0.13234 +0.07551 0.12972 +0.07191 0.12705 +0.06840 0.12435 +0.06498 0.12161 +0.06164 0.11884 +0.05840 0.11603 +0.05524 0.11319 +0.05217 0.11031 +0.04918 0.10740 +0.04629 0.10447 +0.04348 0.10150 +0.04076 0.09851 +0.03812 0.09549 +0.03558 0.09246 +0.03312 0.08940 +0.03075 0.08632 +0.02847 0.08324 +0.02627 0.08013 +0.02417 0.07701 +0.02215 0.07387 +0.02022 0.07070 +0.01837 0.06751 +0.01662 0.06433 +0.01495 0.06111 +0.01337 0.05790 +0.01187 0.05468 +0.01047 0.05148 +0.00915 0.04826 +0.00792 0.04505 +0.00678 0.04181 +0.00572 0.03847 +0.00476 0.03502 +0.00388 0.03133 +0.00309 0.02736 +0.00238 0.02318 +0.00177 0.01920 +0.00124 0.01552 +0.00080 0.01217 +0.00044 0.00892 +0.00018 0.00563 +0.00000 0.00000 +0.00018 -0.00567 +0.00044 -0.00905 +0.00080 -0.01247 +0.00124 -0.01591 +0.00177 -0.01956 +0.00238 -0.02333 +0.00309 -0.02716 +0.00388 -0.03085 +0.00476 -0.03442 +0.00572 -0.03783 +0.00678 -0.04120 +0.00792 -0.04453 +0.00915 -0.04785 +0.01047 -0.05117 +0.01187 -0.05447 +0.01337 -0.05781 +0.01495 -0.06113 +0.01662 -0.06446 +0.01837 -0.06775 +0.02022 -0.07107 +0.02215 -0.07437 +0.02417 -0.07766 +0.02627 -0.08092 +0.02847 -0.08421 +0.03075 -0.08748 +0.03312 -0.09076 +0.03558 -0.09406 +0.03812 -0.09733 +0.04076 -0.10064 +0.04348 -0.10392 +0.04629 -0.10720 +0.04918 -0.11047 +0.05217 -0.11374 +0.05524 -0.11698 +0.05840 -0.12023 +0.06164 -0.12344 +0.06498 -0.12665 +0.06840 -0.12982 +0.07191 -0.13299 +0.07551 -0.13612 +0.07919 -0.13922 +0.08297 -0.14230 +0.08683 -0.14535 +0.09077 -0.14835 +0.09481 -0.15135 +0.09893 -0.15429 +0.10315 -0.15720 +0.10745 -0.16006 +0.11183 -0.16289 +0.11631 -0.16567 +0.12087 -0.16842 +0.12552 -0.17111 +0.13026 -0.17376 +0.13508 -0.17635 +0.13999 -0.17890 +0.14499 -0.18137 +0.15008 -0.18380 +0.15526 -0.18616 +0.16052 -0.18847 +0.16587 -0.19070 +0.17131 -0.19287 +0.17684 -0.19496 +0.18245 -0.19698 +0.18816 -0.19894 +0.19395 -0.20080 +0.19982 -0.20257 +0.20579 -0.20425 +0.21184 -0.20584 +0.21798 -0.20733 +0.22421 -0.20870 +0.23053 -0.20996 +0.23693 -0.21110 +0.24342 -0.21210 +0.25000 -0.21297 +0.25667 -0.21370 +0.26333 -0.21429 +0.27000 -0.21472 +0.27667 -0.21501 +0.28333 -0.21515 +0.29000 -0.21516 +0.29667 -0.21502 +0.30333 -0.21476 +0.31000 -0.21437 +0.31667 -0.21384 +0.32333 -0.21320 +0.33000 -0.21243 +0.33667 -0.21155 +0.34333 -0.21057 +0.35000 -0.20948 +0.35667 -0.20827 +0.36333 -0.20697 +0.37000 -0.20556 +0.37667 -0.20407 +0.38333 -0.20248 +0.39000 -0.20081 +0.39667 -0.19904 +0.40333 -0.19720 +0.41000 -0.19527 +0.41667 -0.19327 +0.42333 -0.19119 +0.43000 -0.18905 +0.43667 -0.18683 +0.44333 -0.18454 +0.45000 -0.18219 +0.45667 -0.17976 +0.46333 -0.17727 +0.47000 -0.17473 +0.47667 -0.17212 +0.48333 -0.16945 +0.49000 -0.16673 +0.49667 -0.16397 +0.50333 -0.16115 +0.51000 -0.15828 +0.51667 -0.15537 +0.52333 -0.15242 +0.53000 -0.14942 +0.53667 -0.14639 +0.54333 -0.14333 +0.55000 -0.14024 +0.55667 -0.13713 +0.56333 -0.13399 +0.57000 -0.13083 +0.57667 -0.12765 +0.58333 -0.12446 +0.59000 -0.12125 +0.59667 -0.11804 +0.60333 -0.11482 +0.61000 -0.11160 +0.61667 -0.10838 +0.62333 -0.10515 +0.63000 -0.10192 +0.63667 -0.09870 +0.64333 -0.09549 +0.65000 -0.09228 +0.65667 -0.08909 +0.66333 -0.08590 +0.67000 -0.08274 +0.67667 -0.07958 +0.68333 -0.07645 +0.69000 -0.07333 +0.69667 -0.07024 +0.70333 -0.06717 +0.71000 -0.06413 +0.71667 -0.06112 +0.72333 -0.05814 +0.73000 -0.05519 +0.73667 -0.05228 +0.74333 -0.04941 +0.75000 -0.04658 +0.75660 -0.04382 +0.76314 -0.04114 +0.76961 -0.03853 +0.77601 -0.03600 +0.78235 -0.03354 +0.78863 -0.03116 +0.79484 -0.02887 +0.80098 -0.02665 +0.80706 -0.02452 +0.81307 -0.02247 +0.81902 -0.02050 +0.82490 -0.01862 +0.83072 -0.01681 +0.83647 -0.01510 +0.84216 -0.01346 +0.84778 -0.01191 +0.85333 -0.01045 +0.85882 -0.00907 +0.86425 -0.00776 +0.86961 -0.00653 +0.87490 -0.00539 +0.88013 -0.00434 +0.88529 -0.00335 +0.89039 -0.00245 +0.89542 -0.00160 +0.90039 -0.00085 +0.90529 -0.00015 +0.91013 0.00046 +0.91490 0.00103 +0.91961 0.00151 +0.92425 0.00193 +0.92882 0.00229 +0.93333 0.00258 +0.93778 0.00279 +0.94216 0.00295 +0.94647 0.00303 +0.95072 0.00303 +0.95490 0.00296 +0.95902 0.00282 +0.96307 0.00261 +0.96706 0.00232 +0.97098 0.00194 +0.97484 0.00149 +0.97863 0.00098 +0.98235 0.00040 +0.98601 -0.00025 +0.98961 -0.00097 +0.99314 -0.00176 +0.99660 -0.00261 +1.00000 -0.00347 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17.dat new file mode 100644 index 0000000000..68cff47cc6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17.dat @@ -0,0 +1,181 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA64_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.432 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4073 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.7945 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.0065 Cd0 ! 2D drag coefficient value at 0-lift. + -0.088 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"Default" x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"Default" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 127 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0198 0.0000 + -175.00 0.374 0.0341 0.1880 + -170.00 0.749 0.0955 0.3770 + -160.00 0.659 0.2807 0.2747 + -155.00 0.736 0.3919 0.3130 + -150.00 0.783 0.5086 0.3428 + -145.00 0.803 0.6267 0.3654 + -140.00 0.798 0.7427 0.3820 + -135.00 0.771 0.8537 0.3935 + -130.00 0.724 0.9574 0.4007 + -125.00 0.660 1.0519 0.4042 + -120.00 0.581 1.1355 0.4047 + -115.00 0.491 1.2070 0.4025 + -110.00 0.390 1.2656 0.3981 + -105.00 0.282 1.3104 0.3918 + -100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17_coords.txt new file mode 100644 index 0000000000..aa31ac26b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Airfoils/NACA64_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! NACA 64-618 (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.990000 0.003385 +0.980000 0.006126 +0.975000 0.007447 +0.970000 0.008767 +0.965000 0.010062 +0.960000 0.011357 +0.955000 0.012639 +0.950000 0.013921 +0.945000 0.015200 +0.940000 0.016478 +0.935000 0.017757 +0.930000 0.019036 +0.925000 0.020317 +0.920000 0.021598 +0.915000 0.022881 +0.910000 0.024163 +0.905000 0.025448 +0.900000 0.026733 +0.887500 0.029951 +0.875000 0.033169 +0.862500 0.036386 +0.850000 0.039603 +0.837500 0.042804 +0.825000 0.046004 +0.812500 0.049171 +0.800000 0.052337 +0.787500 0.055452 +0.775000 0.058566 +0.762500 0.061611 +0.750000 0.064656 +0.737500 0.067615 +0.725000 0.070573 +0.712500 0.073429 +0.700000 0.076285 +0.687500 0.079029 +0.675000 0.081773 +0.662500 0.084393 +0.650000 0.087012 +0.637500 0.089490 +0.625000 0.091967 +0.612500 0.094283 +0.600000 0.096599 +0.587500 0.098743 +0.575000 0.100887 +0.562500 0.102843 +0.550000 0.104799 +0.537500 0.106549 +0.525000 0.108299 +0.512500 0.109830 +0.500000 0.111360 +0.487500 0.112649 +0.475000 0.113937 +0.462500 0.114964 +0.450000 0.115990 +0.445000 0.116320 +0.440000 0.116650 +0.435000 0.116931 +0.430000 0.117211 +0.425000 0.117439 +0.420000 0.117667 +0.415000 0.117835 +0.410000 0.118003 +0.405000 0.118104 +0.400000 0.118204 +0.395000 0.118231 +0.390000 0.118258 +0.385000 0.118213 +0.380000 0.118168 +0.375000 0.118057 +0.370000 0.117946 +0.365000 0.117777 +0.360000 0.117607 +0.355000 0.117383 +0.350000 0.117159 +0.345000 0.116881 +0.340000 0.116603 +0.335000 0.116273 +0.330000 0.115942 +0.325000 0.115562 +0.320000 0.115181 +0.315000 0.114750 +0.310000 0.114319 +0.305000 0.113838 +0.300000 0.113356 +0.295000 0.112824 +0.290000 0.112292 +0.285000 0.111710 +0.280000 0.111127 +0.275000 0.110495 +0.270000 0.109863 +0.265000 0.109180 +0.260000 0.108497 +0.255000 0.107762 +0.250000 0.107027 +0.245000 0.106241 +0.240000 0.105454 +0.235000 0.104614 +0.230000 0.103774 +0.225000 0.102880 +0.220000 0.101985 +0.215000 0.101035 +0.210000 0.100084 +0.205000 0.099076 +0.200000 0.098068 +0.195000 0.097001 +0.190000 0.095934 +0.185000 0.094805 +0.180000 0.093676 +0.175000 0.092484 +0.170000 0.091291 +0.165000 0.090032 +0.160000 0.088772 +0.155000 0.087441 +0.150000 0.086110 +0.145000 0.084704 +0.140000 0.083298 +0.135000 0.081814 +0.130000 0.080329 +0.125000 0.078759 +0.120000 0.077188 +0.115000 0.075525 +0.110000 0.073862 +0.105000 0.072098 +0.100000 0.070334 +0.097500 0.069412 +0.095000 0.068489 +0.092500 0.067537 +0.090000 0.066584 +0.087500 0.065601 +0.085000 0.064617 +0.082500 0.063600 +0.080000 0.062583 +0.077500 0.061531 +0.075000 0.060478 +0.072500 0.059388 +0.070000 0.058297 +0.067500 0.057165 +0.065000 0.056032 +0.062500 0.054854 +0.060000 0.053676 +0.057500 0.052447 +0.055000 0.051218 +0.052500 0.049933 +0.050000 0.048647 +0.047500 0.047299 +0.045000 0.045950 +0.042500 0.044530 +0.040000 0.043110 +0.037500 0.041606 +0.035000 0.040102 +0.032500 0.038501 +0.030000 0.036899 +0.027500 0.035177 +0.025000 0.033454 +0.022500 0.031574 +0.020000 0.029694 +0.018750 0.028680 +0.017500 0.027666 +0.016250 0.026589 +0.015000 0.025511 +0.013750 0.024354 +0.012500 0.023197 +0.011250 0.021936 +0.010000 0.020674 +0.009500 0.020131 +0.009000 0.019587 +0.008500 0.019017 +0.008000 0.018447 +0.007500 0.017844 +0.007000 0.017241 +0.006500 0.016598 +0.006000 0.015955 +0.005500 0.015260 +0.005000 0.014565 +0.004500 0.013801 +0.004000 0.013037 +0.003500 0.012167 +0.003000 0.011296 +0.002500 0.010262 +0.002000 0.009227 +0.001875 0.008930 +0.001750 0.008633 +0.001625 0.008315 +0.001500 0.007997 +0.001375 0.007655 +0.001250 0.007312 +0.001125 0.006934 +0.001000 0.006555 +0.000875 0.006125 +0.000750 0.005695 +0.000625 0.005184 +0.000500 0.004672 +0.000400 0.004190 +0.000350 0.003913 +0.000300 0.003636 +0.000200 0.002970 +0.000100 0.002104 +0.000050 0.001052 +0.000000 0.000000 +0.000050 -0.001046 +0.000100 -0.002092 +0.000200 -0.002954 +0.000300 -0.003613 +0.000350 -0.003891 +0.000400 -0.004169 +0.000500 -0.004658 +0.000625 -0.005178 +0.000750 -0.005698 +0.000875 -0.006135 +0.001000 -0.006572 +0.001125 -0.006956 +0.001250 -0.007340 +0.001375 -0.007684 +0.001500 -0.008027 +0.001625 -0.008341 +0.001750 -0.008654 +0.001875 -0.008943 +0.002000 -0.009231 +0.002500 -0.010204 +0.003000 -0.011176 +0.003500 -0.011953 +0.004000 -0.012729 +0.004500 -0.013380 +0.005000 -0.014030 +0.005500 -0.014595 +0.006000 -0.015160 +0.006500 -0.015667 +0.007000 -0.016174 +0.007500 -0.016636 +0.008000 -0.017098 +0.008500 -0.017526 +0.009000 -0.017953 +0.009500 -0.018352 +0.010000 -0.018750 +0.011250 -0.019644 +0.012500 -0.020537 +0.013750 -0.021322 +0.015000 -0.022107 +0.016250 -0.022812 +0.017500 -0.023517 +0.018750 -0.024160 +0.020000 -0.024803 +0.022500 -0.025948 +0.025000 -0.027092 +0.027500 -0.028097 +0.030000 -0.029102 +0.032500 -0.030003 +0.035000 -0.030904 +0.037500 -0.031725 +0.040000 -0.032546 +0.042500 -0.033304 +0.045000 -0.034061 +0.047500 -0.034767 +0.050000 -0.035472 +0.052500 -0.036132 +0.055000 -0.036792 +0.057500 -0.037414 +0.060000 -0.038035 +0.062500 -0.038622 +0.065000 -0.039209 +0.067500 -0.039766 +0.070000 -0.040322 +0.072500 -0.040852 +0.075000 -0.041381 +0.077500 -0.041885 +0.080000 -0.042389 +0.082500 -0.042870 +0.085000 -0.043350 +0.087500 -0.043809 +0.090000 -0.044268 +0.092500 -0.044707 +0.095000 -0.045145 +0.097500 -0.045566 +0.100000 -0.045987 +0.105000 -0.046782 +0.110000 -0.047576 +0.115000 -0.048313 +0.120000 -0.049050 +0.125000 -0.049734 +0.130000 -0.050417 +0.135000 -0.051053 +0.140000 -0.051688 +0.145000 -0.052278 +0.150000 -0.052868 +0.155000 -0.053418 +0.160000 -0.053967 +0.165000 -0.054478 +0.170000 -0.054988 +0.175000 -0.055461 +0.180000 -0.055934 +0.185000 -0.056373 +0.190000 -0.056811 +0.195000 -0.057216 +0.200000 -0.057621 +0.205000 -0.057993 +0.210000 -0.058365 +0.215000 -0.058705 +0.220000 -0.059045 +0.225000 -0.059355 +0.230000 -0.059664 +0.235000 -0.059944 +0.240000 -0.060224 +0.245000 -0.060474 +0.250000 -0.060723 +0.255000 -0.060943 +0.260000 -0.061163 +0.265000 -0.061354 +0.270000 -0.061545 +0.275000 -0.061708 +0.280000 -0.061871 +0.285000 -0.062004 +0.290000 -0.062137 +0.295000 -0.062240 +0.300000 -0.062343 +0.305000 -0.062417 +0.310000 -0.062490 +0.315000 -0.062534 +0.320000 -0.062577 +0.325000 -0.062590 +0.330000 -0.062602 +0.335000 -0.062583 +0.340000 -0.062563 +0.345000 -0.062512 +0.350000 -0.062460 +0.355000 -0.062374 +0.360000 -0.062287 +0.365000 -0.062164 +0.370000 -0.062040 +0.375000 -0.061878 +0.380000 -0.061716 +0.385000 -0.061509 +0.390000 -0.061301 +0.395000 -0.061040 +0.400000 -0.060778 +0.405000 -0.060458 +0.410000 -0.060138 +0.415000 -0.059763 +0.420000 -0.059388 +0.425000 -0.058966 +0.430000 -0.058544 +0.435000 -0.058083 +0.440000 -0.057622 +0.445000 -0.057127 +0.450000 -0.056632 +0.462500 -0.055265 +0.475000 -0.053897 +0.487500 -0.052374 +0.500000 -0.050850 +0.512500 -0.049195 +0.525000 -0.047539 +0.537500 -0.045777 +0.550000 -0.044014 +0.562500 -0.042165 +0.575000 -0.040316 +0.587500 -0.038401 +0.600000 -0.036486 +0.612500 -0.034526 +0.625000 -0.032565 +0.637500 -0.030575 +0.650000 -0.028585 +0.662500 -0.026594 +0.675000 -0.024603 +0.687500 -0.022632 +0.700000 -0.020660 +0.712500 -0.018728 +0.725000 -0.016795 +0.737500 -0.014922 +0.750000 -0.013048 +0.762500 -0.011260 +0.775000 -0.009472 +0.787500 -0.007797 +0.800000 -0.006122 +0.812500 -0.004594 +0.825000 -0.003065 +0.837500 -0.001721 +0.850000 -0.000376 +0.862500 0.000742 +0.875000 0.001859 +0.887500 0.002698 +0.900000 0.003536 +0.905000 0.003780 +0.910000 0.004023 +0.915000 0.004205 +0.920000 0.004387 +0.925000 0.004504 +0.930000 0.004620 +0.935000 0.004661 +0.940000 0.004702 +0.945000 0.004658 +0.950000 0.004614 +0.955000 0.004476 +0.960000 0.004338 +0.965000 0.004084 +0.970000 0.003829 +0.975000 0.003436 +0.980000 0.003042 +0.990000 0.001910 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/Cp_Ct_Cq.NREL5MW.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Cp_Ct_Cq.NREL5MW.txt new file mode 100644 index 0000000000..4324d3bbac --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/Cp_Ct_Cq.NREL5MW.txt @@ -0,0 +1,99 @@ +# ----- Rotor performance tables for the NREL-5MW wind turbine ----- +# ------------ Written on Jan-13-22 using the ROSCO toolbox ------------ + +# Pitch angle vector, 36 entries - x axis (matrix columns) (deg) +-5.0 -4.0 -3.0 -2.0 -1.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 +# TSR vector, 26 entries - y axis (matrix rows) (-) +2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 +# Wind speed vector - z axis (m/s) +11.4 + +# Power coefficient + +0.006673 0.009813 0.013077 0.016508 0.020122 0.023918 0.027887 0.032006 0.036239 0.040540 0.044858 0.049138 0.053326 0.057366 0.061205 0.064796 0.068092 0.071051 0.073631 0.075796 0.077520 0.078793 0.079607 0.079960 0.079851 0.079303 0.078341 0.076993 0.075269 0.073154 0.070619 0.067607 0.064059 0.059976 0.055381 0.050328 +0.020093 0.026879 0.033876 0.041034 0.048264 0.055472 0.062560 0.069438 0.076024 0.082246 0.088041 0.093349 0.098111 0.102262 0.105746 0.108521 0.110563 0.111865 0.112435 0.112304 0.111503 0.110082 0.108043 0.105376 0.102031 0.097898 0.092907 0.087092 0.080496 0.073183 0.065206 0.056618 0.047499 0.037976 0.028144 0.018084 +0.048757 0.059921 0.070879 0.081507 0.091686 0.101314 0.110305 0.118583 0.126073 0.132692 0.138350 0.142964 0.146489 0.148944 0.150362 0.150761 0.150158 0.148560 0.145993 0.142397 0.137607 0.131540 0.124241 0.115747 0.106162 0.095542 0.084011 0.071754 0.058916 0.045611 0.031929 0.017939 0.003701 -0.010721 -0.025259 -0.039848 +0.090123 0.104877 0.118836 0.131894 0.143960 0.154953 0.164780 0.173312 0.180438 0.186134 0.190421 0.193294 0.194678 0.194534 0.192872 0.189595 0.184490 0.177562 0.168848 0.158486 0.146540 0.133154 0.118581 0.103012 0.086606 0.069499 0.051807 0.033628 0.015033 -0.003935 -0.023212 -0.042681 -0.062203 -0.081676 -0.101014 -0.120137 +0.139124 0.156683 0.172901 0.187702 0.200999 0.212709 0.222753 0.231064 0.237530 0.241950 0.244105 0.243810 0.240834 0.235185 0.226970 0.216406 0.203596 0.188826 0.172423 0.154596 0.135473 0.115192 0.093900 0.071756 0.048901 0.025448 0.001458 -0.023067 -0.048079 -0.073394 -0.098747 -0.123894 -0.148637 -0.172971 -0.196999 -0.220426 +0.191782 0.211839 0.230276 0.247076 0.262109 0.275108 0.285675 0.293225 0.297120 0.296898 0.292698 0.284905 0.273940 0.260137 0.243968 0.225765 0.205747 0.184044 0.160751 0.135955 0.109826 0.082563 0.054349 0.025323 -0.004446 -0.034984 -0.066317 -0.098275 -0.130442 -0.162296 -0.193412 -0.223707 -0.253665 -0.283545 -0.312671 -0.340141 +0.246353 0.270341 0.292682 0.312827 0.329812 0.342452 0.349588 0.350796 0.346468 0.337517 0.324917 0.309376 0.291272 0.270832 0.248190 0.223439 0.196656 0.167952 0.137415 0.105259 0.071726 0.037018 0.001262 -0.035533 -0.073456 -0.112507 -0.152329 -0.192145 -0.231094 -0.268667 -0.305110 -0.341553 -0.378474 -0.414899 -0.449086 -0.478908 +0.306243 0.335683 0.361286 0.381426 0.394666 0.400011 0.397807 0.389766 0.377676 0.362345 0.344063 0.323009 0.299287 0.272921 0.243930 0.212388 0.178407 0.142107 0.103741 0.063607 0.021945 -0.021117 -0.065611 -0.111678 -0.159287 -0.207873 -0.256248 -0.303158 -0.347971 -0.391262 -0.434965 -0.480253 -0.525739 -0.568955 -0.606708 -0.638532 +0.368062 0.397982 0.420678 0.434161 0.438041 0.434596 0.426094 0.413722 0.397833 0.378568 0.356023 0.330207 0.301063 0.268542 0.232706 0.193700 0.151740 0.107083 0.060108 0.011125 -0.039710 -0.092454 -0.147289 -0.204180 -0.262421 -0.320480 -0.376558 -0.429701 -0.480649 -0.532192 -0.586717 -0.643176 -0.698195 -0.746783 -0.788014 -0.825218 +0.413915 0.437699 0.451902 0.458070 0.457967 0.452866 0.443478 0.429833 0.411921 0.389793 0.363427 0.332762 0.297737 0.258384 0.214897 0.167596 0.116800 0.062939 0.006435 -0.052490 -0.113873 -0.177938 -0.244676 -0.313397 -0.382360 -0.449143 -0.512100 -0.571792 -0.631581 -0.695509 -0.764242 -0.833635 -0.896797 -0.950560 -0.998368 -1.044827 +0.427324 0.444280 0.455448 0.462056 0.464498 0.462253 0.454597 0.441298 0.422256 0.397517 0.367139 0.331124 0.289519 0.242518 0.190536 0.134077 0.073568 0.009566 -0.057573 -0.127803 -0.201376 -0.278345 -0.358171 -0.439117 -0.518328 -0.593032 -0.663068 -0.731776 -0.804602 -0.885395 -0.971040 -1.052725 -1.123154 -1.184540 -1.242706 -1.302084 +0.413889 0.430080 0.443986 0.455667 0.463490 0.465861 0.461379 0.449315 0.429515 0.402103 0.367325 0.325347 0.276400 0.220931 0.159637 0.093102 0.021935 -0.053297 -0.132381 -0.215535 -0.302917 -0.394172 -0.487834 -0.580989 -0.669719 -0.752399 -0.831452 -0.912845 -1.003839 -1.105589 -1.208911 -1.301214 -1.380509 -1.453087 -1.525242 -1.600224 +0.390738 0.409602 0.427384 0.443933 0.457445 0.465005 0.464411 0.454181 0.433864 0.403639 0.364016 0.315425 0.258360 0.193623 0.122136 0.044567 -0.038313 -0.126023 -0.218606 -0.316340 -0.419059 -0.525699 -0.633667 -0.738622 -0.836834 -0.928785 -1.019688 -1.118620 -1.233318 -1.358741 -1.478110 -1.581346 -1.672639 -1.759983 -1.849169 -1.941926 +0.363054 0.386720 0.409228 0.429996 0.447852 0.460425 0.463989 0.456010 0.435373 0.402165 0.357222 0.301344 0.235402 0.160566 0.077923 -0.011703 -0.107479 -0.209107 -0.316861 -0.430808 -0.550233 -0.673151 -0.795604 -0.912315 -1.020857 -1.123956 -1.230487 -1.353172 -1.496497 -1.645302 -1.779751 -1.896314 -2.002958 -2.108318 -2.217267 -2.330606 +0.332023 0.361556 0.389367 0.414649 0.436246 0.452807 0.460431 0.454894 0.434075 0.397696 0.346937 0.283092 0.207494 0.121668 0.026850 -0.075950 -0.185943 -0.303110 -0.427726 -0.559435 -0.696810 -0.836734 -0.973950 -1.103096 -1.222996 -1.339770 -1.467400 -1.620400 -1.794614 -1.965735 -2.116279 -2.249130 -2.374431 -2.500966 -2.632648 -2.770283 +0.297995 0.333854 0.367528 0.397656 0.423215 0.442899 0.454053 0.450936 0.429986 0.390235 0.333142 0.260640 0.174562 0.076794 -0.031277 -0.148468 -0.274167 -0.408575 -0.551737 -0.702675 -0.859149 -1.016871 -1.169580 -1.311915 -1.444423 -1.578792 -1.734397 -1.922541 -2.128205 -2.321411 -2.490350 -2.642587 -2.789846 -2.940844 -3.098986 -3.264660 +0.261597 0.303619 0.343502 0.378889 0.408674 0.431280 0.445167 0.444233 0.423112 0.379761 0.315806 0.233927 0.136491 0.025768 -0.096686 -0.229613 -0.372646 -0.526034 -0.689370 -0.860978 -1.037730 -1.214335 -1.383513 -1.539437 -1.686737 -1.844401 -2.034203 -2.260837 -2.498120 -2.714447 -2.904511 -3.079332 -3.251981 -3.431224 -3.619857 -3.816817 +0.223751 0.271311 0.317227 0.358217 0.392491 0.418111 0.434088 0.434927 0.413446 0.366239 0.294883 0.202866 0.093151 -0.031589 -0.169648 -0.319787 -0.481868 -0.655988 -0.841105 -1.034831 -1.233270 -1.430180 -1.616348 -1.786462 -1.952417 -2.139500 -2.368690 -2.636225 -2.905702 -3.147086 -3.361213 -3.561934 -3.763787 -3.975522 -4.198409 -4.429489 +0.185578 0.237532 0.288993 0.335546 0.374551 0.403289 0.421002 0.423063 0.400961 0.349628 0.270309 0.167352 0.044405 -0.095487 -0.250473 -0.419415 -0.602317 -0.798913 -1.007440 -1.224860 -1.446724 -1.665242 -1.868434 -2.054428 -2.244050 -2.466255 -2.739406 -3.049892 -3.352672 -3.621561 -3.862815 -4.093010 -4.328409 -4.576896 -4.837351 -5.105458 +0.147095 0.203239 0.259075 0.310894 0.354752 0.386719 0.405978 0.408744 0.385629 0.329881 0.242007 0.127271 -0.009910 -0.166158 -0.339498 -0.528928 -0.734472 -0.955298 -1.188911 -1.431845 -1.679152 -1.920015 -2.140330 -2.345296 -2.563821 -2.826409 -3.147779 -3.503220 -3.840906 -4.140058 -4.411660 -4.675361 -4.948974 -5.238172 -5.539321 -5.847566 +0.109921 0.168465 0.228283 0.284493 0.333003 0.368316 0.389001 0.392004 0.367452 0.306944 0.209888 0.082498 -0.069969 -0.243863 -0.437077 -0.648769 -0.878808 -1.125646 -1.386141 -1.656724 -1.931386 -2.194733 -2.433122 -2.661010 -2.913585 -3.221522 -3.595200 -3.997663 -4.372318 -4.704715 -5.010142 -5.311913 -5.628384 -5.961897 -6.307013 -6.658699 +0.075556 0.133907 0.196815 0.256499 0.309270 0.347981 0.370019 0.372880 0.346417 0.280755 0.173858 0.032901 -0.135979 -0.328881 -0.543585 -0.779386 -1.035790 -1.310469 -1.599847 -1.900506 -2.203972 -2.489774 -2.748220 -3.003362 -3.294941 -3.653136 -4.083147 -4.534716 -4.948847 -5.317645 -5.660775 -6.005570 -6.369299 -6.750614 -7.143160 -7.541782 +0.045437 0.101086 0.164731 0.227521 0.283675 0.325613 0.348964 0.351362 0.322521 0.251245 0.133815 -0.021672 -0.208162 -0.421508 -0.659413 -0.921225 -1.205892 -1.510319 -1.830843 -2.164074 -2.497172 -2.805822 -3.087060 -3.374013 -3.709339 -4.122787 -4.613131 -5.115993 -5.572447 -5.980987 -6.366170 -6.759084 -7.174174 -7.606904 -8.050518 -8.499762 +0.020095 0.070625 0.132961 0.197686 0.256313 0.301131 0.325760 0.327415 0.295744 0.218342 0.089649 -0.081378 -0.286748 -0.522056 -0.784958 -1.074719 -1.389587 -1.725804 -2.080005 -2.448103 -2.811255 -3.143907 -3.451088 -3.774480 -4.158169 -4.632027 -5.186626 -5.743189 -6.245055 -6.696930 -7.128978 -7.575043 -8.045426 -8.533374 -9.031865 -9.535604 +-0.001687 0.043909 0.102330 0.166837 0.227413 0.274487 0.300332 0.301010 0.266040 0.181968 0.041242 -0.146395 -0.371984 -0.630855 -0.920613 -1.240294 -1.587356 -1.957580 -2.348192 -2.753074 -3.146694 -3.505110 -3.841738 -4.206100 -4.642786 -5.182427 -5.805056 -6.418029 -6.968601 -7.467747 -7.951835 -8.455876 -8.985506 -9.532652 -10.089996 -10.652280 +-0.020991 0.020364 0.073330 0.135754 0.197326 0.245733 0.272607 0.272110 0.233378 0.142039 -0.011538 -0.216915 -0.464126 -0.748233 -1.066769 -1.418378 -1.799699 -2.206350 -2.636179 -3.079288 -3.504186 -3.890511 -4.260392 -4.670103 -5.164549 -5.775547 -6.469853 -7.142266 -7.745026 -8.295764 -8.837283 -9.403900 -9.996885 -10.607377 -11.227722 -11.852766 + + +# Thrust coefficient + +0.128717 0.128402 0.127976 0.127677 0.127561 0.127629 0.127867 0.128247 0.128729 0.129258 0.129777 0.130225 0.130542 0.130673 0.130570 0.130193 0.129510 0.128500 0.127155 0.125472 0.123467 0.121169 0.118605 0.115809 0.112801 0.109598 0.106205 0.102605 0.098769 0.094663 0.090253 0.085471 0.080247 0.074585 0.068519 0.062126 +0.168397 0.169715 0.171083 0.172538 0.173986 0.175323 0.176451 0.177284 0.177754 0.177804 0.177391 0.176487 0.175078 0.173164 0.170771 0.167935 0.164700 0.161125 0.157265 0.153157 0.148796 0.144149 0.139139 0.133696 0.127741 0.121140 0.113810 0.105805 0.097197 0.088074 0.078501 0.068532 0.058230 0.047709 0.037053 0.026331 +0.226643 0.229393 0.231723 0.233550 0.234756 0.235255 0.234993 0.233948 0.232126 0.229565 0.226326 0.222484 0.218143 0.213440 0.208473 0.203249 0.197693 0.191672 0.185067 0.177711 0.169360 0.159907 0.149434 0.138024 0.125825 0.112914 0.099398 0.085443 0.071172 0.056685 0.042068 0.027389 0.012700 -0.001958 -0.016522 -0.030881 +0.299075 0.301289 0.302422 0.302406 0.301210 0.298869 0.295464 0.291107 0.285985 0.280362 0.274473 0.268391 0.262007 0.255130 0.247532 0.238852 0.228637 0.216830 0.203516 0.188917 0.173159 0.156385 0.138854 0.120751 0.102214 0.083356 0.064271 0.045044 0.025754 0.006460 -0.012785 -0.031903 -0.050766 -0.069197 -0.086927 -0.103550 +0.379238 0.378835 0.376828 0.373306 0.368432 0.362520 0.355993 0.349221 0.342334 0.335182 0.327457 0.318711 0.308189 0.295450 0.280436 0.263431 0.244639 0.224405 0.203103 0.180973 0.158152 0.134784 0.110984 0.086862 0.062520 0.038061 0.013566 -0.010909 -0.035298 -0.059484 -0.083286 -0.106436 -0.128554 -0.149119 -0.167467 -0.182809 +0.462045 0.457610 0.451683 0.444801 0.437544 0.430278 0.422940 0.415089 0.406018 0.394702 0.380509 0.363246 0.343190 0.320701 0.296376 0.270674 0.243937 0.216365 0.188092 0.159188 0.129783 0.100004 0.069970 0.039795 0.009565 -0.020663 -0.050818 -0.080761 -0.110260 -0.138960 -0.166409 -0.192073 -0.215232 -0.234926 -0.250010 -0.259496 +0.545296 0.537969 0.530603 0.523523 0.516328 0.508094 0.497562 0.483752 0.466005 0.444344 0.419336 0.391808 0.362349 0.331374 0.299182 0.266026 0.232071 0.197454 0.162213 0.126478 0.090382 0.054055 0.017608 -0.018892 -0.055386 -0.091750 -0.127731 -0.162918 -0.196784 -0.228774 -0.258236 -0.284215 -0.305420 -0.320331 -0.327933 -0.328268 +0.634417 0.627969 0.621264 0.612780 0.601387 0.585824 0.565236 0.539859 0.510799 0.478901 0.444769 0.408839 0.371429 0.332767 0.293070 0.252557 0.211368 0.169524 0.127130 0.084335 0.041284 -0.001917 -0.045208 -0.088516 -0.131639 -0.174175 -0.215526 -0.255049 -0.292101 -0.325924 -0.355354 -0.378817 -0.394523 -0.401294 -0.399320 -0.390574 +0.735578 0.726839 0.715209 0.698962 0.676693 0.649128 0.617406 0.582286 0.544379 0.504195 0.462125 0.418443 0.373358 0.327062 0.279804 0.231775 0.183064 0.133686 0.083811 0.033605 -0.016820 -0.067406 -0.118066 -0.168514 -0.218193 -0.266339 -0.312201 -0.355042 -0.394026 -0.427876 -0.454896 -0.473018 -0.480617 -0.477721 -0.466483 -0.450923 +0.836616 0.819394 0.796306 0.768163 0.735696 0.699319 0.659490 0.616641 0.571164 0.523450 0.473790 0.422421 0.369559 0.315437 0.260360 0.204512 0.147873 0.090579 0.032826 -0.025256 -0.083602 -0.142121 -0.200467 -0.257947 -0.313640 -0.366661 -0.416171 -0.461284 -0.500752 -0.532889 -0.555398 -0.565981 -0.564006 -0.551394 -0.532762 -0.512992 +0.923379 0.893210 0.859907 0.823650 0.784285 0.741493 0.695217 0.645715 0.593258 0.538206 0.480917 0.421690 0.360798 0.298558 0.235326 0.171229 0.106253 0.040624 -0.025491 -0.092007 -0.158843 -0.225631 -0.291594 -0.355648 -0.416743 -0.473917 -0.526240 -0.572594 -0.611418 -0.640346 -0.656398 -0.657833 -0.645755 -0.624799 -0.601049 -0.579120 +0.993425 0.954344 0.913695 0.871240 0.826266 0.778188 0.726411 0.670805 0.611601 0.549205 0.484132 0.416794 0.347553 0.276858 0.205091 0.132281 0.058537 -0.015913 -0.090942 -0.166478 -0.242184 -0.317269 -0.390504 -0.460636 -0.526540 -0.587232 -0.641708 -0.688659 -0.725848 -0.749926 -0.757799 -0.749140 -0.727679 -0.700204 -0.673221 -0.650161 +1.058549 1.011415 0.963227 0.914208 0.863809 0.810735 0.753864 0.692505 0.626704 0.556910 0.483849 0.408103 0.330166 0.250636 0.169909 0.087938 0.004949 -0.078857 -0.163388 -0.248386 -0.333115 -0.416283 -0.496411 -0.572141 -0.642397 -0.706208 -0.762552 -0.809541 -0.843850 -0.861381 -0.859866 -0.841099 -0.811461 -0.779163 -0.750163 -0.726138 +1.122305 1.067207 1.011341 0.955082 0.898284 0.839959 0.778078 0.711195 0.638918 0.561654 0.480375 0.395899 0.308904 0.220154 0.129994 0.038399 -0.054349 -0.148080 -0.242618 -0.337354 -0.431053 -0.522046 -0.608688 -0.689695 -0.764072 -0.830961 -0.888968 -0.935169 -0.965155 -0.974811 -0.963246 -0.934896 -0.898382 -0.862536 -0.832084 -0.807326 +1.185738 1.122582 1.058847 0.995008 0.931027 0.866582 0.799502 0.727171 0.648509 0.563696 0.473951 0.380407 0.283976 0.185599 0.085524 -0.016186 -0.119230 -0.223433 -0.328360 -0.432958 -0.535499 -0.634048 -0.726965 -0.813132 -0.891721 -0.961752 -1.021004 -1.065338 -1.089724 -1.090502 -1.068696 -1.031466 -0.989260 -0.950738 -0.919159 -0.894322 +1.248868 1.177878 1.106090 1.034308 0.962814 0.891330 0.818549 0.740704 0.655695 0.563246 0.464772 0.361803 0.255555 0.147124 0.036641 -0.075690 -0.189578 -0.304724 -0.420330 -0.534810 -0.646043 -0.751962 -0.851114 -0.942592 -1.025625 -1.098723 -1.158523 -1.199963 -1.217675 -1.208810 -1.176857 -1.131525 -1.084562 -1.043982 -1.011881 -0.987449 +1.310753 1.232966 1.153240 1.073234 0.993908 0.914846 0.835616 0.752042 0.660663 0.560476 0.452996 0.340238 0.223775 0.104835 -0.016537 -0.140014 -0.265270 -0.391766 -0.518236 -0.642586 -0.762395 -0.875671 -0.981224 -1.078327 -1.165991 -1.241827 -1.301438 -1.339064 -1.349133 -1.330112 -1.288253 -1.235555 -1.184617 -1.142625 -1.110627 -1.086622 +1.370202 1.287113 1.200281 1.111936 1.024461 0.937489 0.851104 0.761450 0.663572 0.555529 0.438759 0.315838 0.188759 0.058841 -0.073915 -0.209068 -0.346176 -0.484368 -0.621832 -0.756036 -0.884420 -1.005217 -1.117496 -1.220568 -1.312850 -1.390993 -1.449734 -1.482671 -1.484225 -1.454750 -1.403285 -1.343886 -1.289747 -1.247079 -1.215478 -1.191550 +1.425945 1.339521 1.246699 1.150493 1.054590 0.959390 0.865327 0.769108 0.664559 0.548527 0.422175 0.288713 0.150621 0.009228 -0.135421 -0.282763 -0.432177 -0.582348 -0.730921 -0.875019 -1.012114 -1.140727 -1.260146 -1.369430 -1.466168 -1.546178 -1.603417 -1.630806 -1.623105 -1.583019 -1.522246 -1.456812 -1.400325 -1.357559 -1.326244 -1.302016 +1.478287 1.389036 1.292096 1.188788 1.084384 0.980656 0.878503 0.775237 0.663743 0.539578 0.403344 0.258956 0.109434 -0.043935 -0.200986 -0.361019 -0.523161 -0.685556 -0.845366 -0.999480 -1.145544 -1.282366 -1.409337 -1.524920 -1.625906 -1.707377 -1.762486 -1.783498 -1.765941 -1.715150 -1.645380 -1.574677 -1.516687 -1.474068 -1.442713 -1.417868 +1.525569 1.435807 1.335411 1.226404 1.113896 1.001379 0.890777 0.780002 0.661259 0.528773 0.382346 0.226642 0.065268 -0.100589 -0.270547 -0.443771 -0.619028 -0.793883 -0.965092 -1.129434 -1.284809 -1.430301 -1.565142 -1.687017 -1.792041 -1.874588 -1.926934 -1.940785 -1.912886 -1.851321 -1.772922 -1.697837 -1.639004 -1.596445 -1.564728 -1.539006 +1.566315 1.479214 1.376488 1.263103 1.143093 1.021619 0.902254 0.783557 0.657210 0.516187 0.359250 0.191837 0.018160 -0.160683 -0.344060 -0.530963 -0.719689 -0.907253 -1.090067 -1.264932 -1.430027 -1.584649 -1.727568 -1.855690 -1.964564 -2.047808 -2.096752 -2.102712 -2.064071 -1.991678 -1.905145 -1.826603 -1.767296 -1.724535 -1.692174 -1.665365 +1.599400 1.517580 1.415403 1.298085 1.171736 1.041419 0.913010 0.786007 0.651695 0.501886 0.334113 0.154593 -0.031851 -0.224178 -0.421492 -0.622547 -0.825079 -1.025616 -1.220296 -1.406037 -1.581314 -1.745475 -1.896602 -2.030921 -2.143474 -2.227031 -2.271933 -2.269336 -2.219606 -2.136371 -2.042346 -1.961175 -1.901455 -1.858218 -1.824963 -1.796908 +1.624851 1.550529 1.451132 1.331239 1.199665 1.060803 0.923092 0.787425 0.644798 0.485924 0.306984 0.114961 -0.084730 -0.291046 -0.502823 -0.718477 -0.935156 -1.148950 -1.355807 -1.552820 -1.738766 -1.912794 -2.072223 -2.212699 -2.328774 -2.412252 -2.452480 -2.440720 -2.379579 -2.285564 -2.184808 -2.101635 -2.041361 -1.997404 -1.963032 -1.933615 +1.644484 1.576932 1.482832 1.362862 1.226569 1.079755 0.932536 0.787882 0.636575 0.468351 0.277909 0.072976 -0.140450 -0.361273 -0.588030 -0.818712 -1.049886 -1.277246 -1.496631 -1.705352 -1.902443 -2.086605 -2.254411 -2.401028 -2.520465 -2.603459 -2.638392 -2.616924 -2.544069 -2.439454 -2.332777 -2.247970 -2.186918 -2.142020 -2.106339 -2.075472 +1.659936 1.597863 1.510260 1.392062 1.252024 1.098156 0.941373 0.787439 0.627098 0.449210 0.246925 0.028662 -0.198996 -0.434846 -0.677094 -0.923225 -1.169251 -1.410513 -1.642804 -1.863707 -2.072377 -2.266900 -2.443154 -2.595911 -2.718548 -2.800637 -2.829676 -2.798002 -2.713156 -2.598249 -2.486428 -2.400100 -2.338052 -2.292009 -2.254855 -2.222470 + + +# Torque coefficient + +0.003340 0.004911 0.006545 0.008262 0.010070 0.011970 0.013957 0.016018 0.018137 0.020289 0.022450 0.024593 0.026688 0.028710 0.030632 0.032429 0.034079 0.035559 0.036851 0.037934 0.038797 0.039434 0.039841 0.040018 0.039964 0.039689 0.039208 0.038533 0.037670 0.036612 0.035343 0.033836 0.032060 0.030017 0.027717 0.025188 +0.008045 0.010762 0.013563 0.016429 0.019324 0.022210 0.025048 0.027802 0.030438 0.032930 0.035250 0.037375 0.039282 0.040944 0.042339 0.043450 0.044267 0.044789 0.045017 0.044964 0.044644 0.044075 0.043258 0.042191 0.040851 0.039196 0.037198 0.034870 0.032229 0.029301 0.026107 0.022669 0.019018 0.015205 0.011268 0.007241 +0.016268 0.019993 0.023649 0.027195 0.030591 0.033804 0.036803 0.039565 0.042064 0.044273 0.046161 0.047700 0.048876 0.049695 0.050168 0.050302 0.050100 0.049567 0.048711 0.047511 0.045913 0.043888 0.041453 0.038619 0.035421 0.031878 0.028030 0.023941 0.019658 0.015218 0.010653 0.005985 0.001235 -0.003577 -0.008428 -0.013295 +0.025774 0.029993 0.033986 0.037720 0.041171 0.044314 0.047125 0.049565 0.051603 0.053232 0.054458 0.055280 0.055675 0.055634 0.055159 0.054221 0.052762 0.050780 0.048288 0.045325 0.041909 0.038080 0.033913 0.029460 0.024768 0.019876 0.014816 0.009617 0.004299 -0.001125 -0.006638 -0.012206 -0.017789 -0.023358 -0.028889 -0.034358 +0.034814 0.039208 0.043266 0.046970 0.050298 0.053228 0.055741 0.057821 0.059439 0.060545 0.061084 0.061010 0.060266 0.058852 0.056797 0.054153 0.050947 0.047252 0.043147 0.038686 0.033900 0.028825 0.023497 0.017956 0.012237 0.006368 0.000365 -0.005772 -0.012031 -0.018366 -0.024710 -0.031003 -0.037195 -0.043284 -0.049297 -0.055159 +0.042659 0.047120 0.051221 0.054958 0.058302 0.061193 0.063544 0.065223 0.066090 0.066040 0.065106 0.063373 0.060934 0.057863 0.054267 0.050218 0.045765 0.040938 0.035756 0.030241 0.024429 0.018365 0.012089 0.005633 -0.000989 -0.007782 -0.014751 -0.021860 -0.029015 -0.036100 -0.043021 -0.049760 -0.056424 -0.063070 -0.069549 -0.075659 +0.049318 0.054120 0.058592 0.062625 0.066025 0.068556 0.069984 0.070226 0.069360 0.067568 0.065045 0.061934 0.058310 0.054218 0.049685 0.044730 0.039369 0.033622 0.027509 0.021072 0.014359 0.007411 0.000253 -0.007113 -0.014705 -0.022523 -0.030495 -0.038466 -0.046263 -0.053785 -0.061080 -0.068376 -0.075767 -0.083059 -0.089903 -0.095873 +0.055734 0.061091 0.065751 0.069416 0.071826 0.072799 0.072397 0.070934 0.068734 0.065944 0.062616 0.058785 0.054468 0.049669 0.044393 0.038653 0.032469 0.025862 0.018880 0.011576 0.003994 -0.003843 -0.011941 -0.020324 -0.028989 -0.037831 -0.046635 -0.055172 -0.063328 -0.071206 -0.079160 -0.087402 -0.095680 -0.103545 -0.110416 -0.116207 +0.061402 0.066394 0.070180 0.072429 0.073076 0.072502 0.071083 0.069019 0.066369 0.063155 0.059394 0.055087 0.050225 0.044800 0.038821 0.032314 0.025314 0.017864 0.010027 0.001856 -0.006625 -0.015424 -0.024572 -0.034062 -0.043778 -0.053464 -0.062820 -0.071685 -0.080185 -0.088783 -0.097879 -0.107298 -0.116477 -0.124582 -0.131461 -0.137667 +0.063740 0.067402 0.069590 0.070539 0.070524 0.069738 0.068292 0.066191 0.063433 0.060025 0.055965 0.051243 0.045849 0.039789 0.033093 0.025809 0.017986 0.009692 0.000991 -0.008083 -0.017536 -0.027401 -0.037678 -0.048261 -0.058881 -0.069165 -0.078860 -0.088052 -0.097259 -0.107103 -0.117688 -0.128374 -0.138100 -0.146379 -0.153741 -0.160896 +0.061104 0.063529 0.065126 0.066071 0.066420 0.066099 0.065004 0.063103 0.060380 0.056842 0.052498 0.047348 0.041399 0.034678 0.027245 0.019172 0.010520 0.001368 -0.008233 -0.018275 -0.028795 -0.039801 -0.051216 -0.062791 -0.074117 -0.084800 -0.094814 -0.104639 -0.115053 -0.126605 -0.138852 -0.150533 -0.160603 -0.169381 -0.177699 -0.186189 +0.055238 0.057399 0.059255 0.060814 0.061858 0.062174 0.061576 0.059966 0.057323 0.053665 0.049023 0.043421 0.036888 0.029486 0.021305 0.012425 0.002927 -0.007113 -0.017668 -0.028765 -0.040427 -0.052606 -0.065106 -0.077539 -0.089381 -0.100415 -0.110966 -0.121829 -0.133973 -0.147552 -0.161342 -0.173660 -0.184243 -0.193929 -0.203559 -0.213566 +0.048889 0.051249 0.053474 0.055545 0.057235 0.058181 0.058107 0.056827 0.054285 0.050503 0.045545 0.039466 0.032326 0.024226 0.015282 0.005576 -0.004794 -0.015768 -0.027352 -0.039580 -0.052432 -0.065775 -0.079284 -0.092416 -0.104704 -0.116209 -0.127582 -0.139961 -0.154312 -0.170004 -0.184940 -0.197857 -0.209279 -0.220207 -0.231366 -0.242972 +0.042753 0.045540 0.048190 0.050636 0.052739 0.054219 0.054639 0.053699 0.051269 0.047359 0.042066 0.035486 0.027721 0.018908 0.009176 -0.001378 -0.012657 -0.024624 -0.037313 -0.050732 -0.064795 -0.079270 -0.093690 -0.107433 -0.120215 -0.132356 -0.144901 -0.159348 -0.176226 -0.193749 -0.209582 -0.223308 -0.235867 -0.248274 -0.261103 -0.274450 +0.036927 0.040211 0.043304 0.046116 0.048518 0.050360 0.051208 0.050592 0.048277 0.044231 0.038585 0.031485 0.023077 0.013532 0.002986 -0.008447 -0.020680 -0.033711 -0.047570 -0.062219 -0.077497 -0.093059 -0.108320 -0.122683 -0.136018 -0.149005 -0.163200 -0.180216 -0.199592 -0.218623 -0.235366 -0.250141 -0.264077 -0.278150 -0.292795 -0.308102 +0.031398 0.035176 0.038724 0.041898 0.044591 0.046665 0.047841 0.047512 0.045305 0.041116 0.035101 0.027462 0.018392 0.008091 -0.003295 -0.015643 -0.028887 -0.043049 -0.058133 -0.074036 -0.090523 -0.107141 -0.123231 -0.138228 -0.152189 -0.166347 -0.182742 -0.202566 -0.224235 -0.244592 -0.262392 -0.278432 -0.293948 -0.309857 -0.326520 -0.343976 +0.026185 0.030391 0.034383 0.037925 0.040906 0.043169 0.044559 0.044466 0.042352 0.038012 0.031611 0.023415 0.013662 0.002579 -0.009678 -0.022983 -0.037300 -0.052654 -0.069003 -0.086180 -0.103872 -0.121549 -0.138483 -0.154090 -0.168834 -0.184616 -0.203614 -0.226299 -0.250050 -0.271703 -0.290728 -0.308227 -0.325508 -0.343449 -0.362331 -0.382045 +0.021330 0.025864 0.030241 0.034148 0.037416 0.039858 0.041381 0.041461 0.039413 0.034913 0.028111 0.019339 0.008880 -0.003011 -0.016172 -0.030485 -0.045936 -0.062535 -0.080182 -0.098649 -0.117566 -0.136337 -0.154085 -0.170301 -0.186122 -0.203956 -0.225804 -0.251308 -0.276997 -0.300008 -0.320420 -0.339555 -0.358797 -0.378982 -0.400229 -0.422258 +0.016887 0.021614 0.026297 0.030533 0.034082 0.036698 0.038309 0.038497 0.036486 0.031815 0.024597 0.015228 0.004041 -0.008689 -0.022792 -0.038165 -0.054808 -0.072698 -0.091673 -0.111457 -0.131646 -0.151530 -0.170019 -0.186944 -0.204199 -0.224419 -0.249274 -0.277527 -0.305079 -0.329546 -0.351500 -0.372446 -0.393867 -0.416478 -0.440178 -0.464575 +0.012803 0.017690 0.022550 0.027060 0.030877 0.033660 0.035336 0.035577 0.033565 0.028713 0.021064 0.011078 -0.000863 -0.014462 -0.029550 -0.046038 -0.063928 -0.083149 -0.103482 -0.124627 -0.146152 -0.167117 -0.186293 -0.204133 -0.223153 -0.246009 -0.273981 -0.304918 -0.334310 -0.360348 -0.383988 -0.406940 -0.430756 -0.455927 -0.482139 -0.508968 +0.009169 0.014052 0.019042 0.023730 0.027777 0.030722 0.032448 0.032698 0.030650 0.025603 0.017507 0.006881 -0.005836 -0.020341 -0.036458 -0.054116 -0.073304 -0.093893 -0.115622 -0.138192 -0.161102 -0.183069 -0.202953 -0.221962 -0.243030 -0.268716 -0.299885 -0.333456 -0.364707 -0.392433 -0.417910 -0.443081 -0.469479 -0.497298 -0.526085 -0.555420 +0.006050 0.010723 0.015760 0.020539 0.024765 0.027865 0.029630 0.029859 0.027740 0.022482 0.013922 0.002635 -0.010889 -0.026336 -0.043528 -0.062410 -0.082942 -0.104937 -0.128110 -0.152185 -0.176486 -0.199372 -0.220067 -0.240498 -0.263846 -0.292529 -0.326963 -0.363123 -0.396285 -0.425817 -0.453293 -0.480903 -0.510029 -0.540564 -0.571997 -0.603917 +0.003499 0.007783 0.012684 0.017518 0.021842 0.025071 0.026869 0.027054 0.024833 0.019345 0.010303 -0.001669 -0.016028 -0.032455 -0.050772 -0.070931 -0.092849 -0.116289 -0.140968 -0.166626 -0.192273 -0.216038 -0.237692 -0.259787 -0.285606 -0.317440 -0.355194 -0.393913 -0.429058 -0.460514 -0.490172 -0.520425 -0.552385 -0.585704 -0.619861 -0.654451 +0.001490 0.005236 0.009858 0.014657 0.019004 0.022327 0.024153 0.024276 0.021928 0.016189 0.006647 -0.006034 -0.021261 -0.038708 -0.058200 -0.079685 -0.103030 -0.127959 -0.154221 -0.181514 -0.208440 -0.233104 -0.255880 -0.279857 -0.308306 -0.343440 -0.384561 -0.425827 -0.463037 -0.496541 -0.528576 -0.561649 -0.596525 -0.632704 -0.669664 -0.707014 +-0.000121 0.003139 0.007316 0.011928 0.016259 0.019625 0.021473 0.021521 0.019021 0.013010 0.002949 -0.010467 -0.026596 -0.045104 -0.065821 -0.088677 -0.113491 -0.139960 -0.167888 -0.196836 -0.224978 -0.250604 -0.274671 -0.300722 -0.331943 -0.370526 -0.415042 -0.458867 -0.498231 -0.533919 -0.568529 -0.604567 -0.642433 -0.681552 -0.721401 -0.761602 +-0.001449 0.001406 0.005062 0.009371 0.013622 0.016963 0.018818 0.018784 0.016110 0.009805 -0.000797 -0.014974 -0.032039 -0.051651 -0.073640 -0.097912 -0.124235 -0.152307 -0.181979 -0.212567 -0.241898 -0.268567 -0.294100 -0.322383 -0.356515 -0.398693 -0.446622 -0.493039 -0.534649 -0.572667 -0.610048 -0.649163 -0.690097 -0.732240 -0.775063 -0.818211 + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/DISCON.IN b/zmq_coupling_tests/templatesDir/OFZMQ_test02/DISCON.IN new file mode 100644 index 0000000000..7c4aacb165 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/DISCON.IN @@ -0,0 +1,192 @@ +! Controller parameter input file for the NREL-5MW wind turbine +! - File written using ROSCO version 2.8.0 controller tuning logic on 10/18/23 + +!------- SIMULATION CONTROL ------------------------------------------------------------ +1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} +0 ! DT_Out - {Time step to output .dbg* files, or 0 to match sampling period of OpenFAST} +0 ! Echo - (0 - no Echo, 1 - Echo input data to .echo) + +!------- CONTROLLER FLAGS ------------------------------------------------- +1 ! F_LPFType - (1: first-order low-pass filter, 2: second-order low-pass filter), [rad/s] (currently filters generator speed and pitch control signals +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +3 ! VS_ControlMode - Generator torque control mode in above rated conditions (0- no torque control, 1- k*omega^2 with PI transitions, 2- WSE TSR Tracking, 3- Power-based TSR Tracking)} +0 ! VS_ConstPower - Do constant power torque control, where above rated torque varies, 0 for constant torque} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +0 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time, 2: rotor position control} +0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} +0 ! AWC_Mode - Active wake control {0 - not used, 1 - complex number method, 2 - Coleman transform method} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} +0 ! CC_Mode - Cable control mode [0- unused, 1- User defined, 2- Open loop control] +0 ! StC_Mode - Structural control mode [0- unused, 1- User defined, 2- Open loop control] + +!------- FILTERS ---------------------------------------------------------- +1.57080 ! F_LPFCornerFreq - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +0 ! F_NumNotchFilts - Number of notch filters placed on sensors +0.0000 ! F_NotchFreqs - Natural frequency of the notch filters. Array with length F_NumNotchFilts +0.0000 ! F_NotchBetaNum - Damping value of numerator (determines the width of notch). Array with length F_NumNotchFilts, [-] +0.0000 ! F_NotchBetaDen - Damping value of denominator (determines the depth of notch). Array with length F_NumNotchFilts, [-] +0 ! F_GenSpdNotch_N - Number of notch filters on generator speed +0 ! F_GenSpdNotch_Ind - Indices of notch filters on generator speed +0 ! F_TwrTopNotch_N - Number of notch filters on tower top acceleration signal +0 ! F_TwrTopNotch_Ind - Indices of notch filters on tower top acceleration signal +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +0.0000 1.0000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.056789 0.084492 0.106018 0.124332 0.140807 0.155903 0.169931 0.183270 0.196062 0.208354 0.220050 0.231503 0.242646 0.253377 0.263967 0.274233 0.284343 0.294292 0.303997 0.313626 0.322957 0.332260 0.341319 0.350368 0.359221 0.368059 0.376700 0.385301 0.393691 0.402050 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-0.018995 -0.016672 -0.014787 -0.013228 -0.011916 -0.010797 -0.009831 -0.008989 -0.008248 -0.007592 -0.007006 -0.006480 -0.006005 -0.005574 -0.005182 -0.004822 -0.004492 -0.004187 -0.003906 -0.003644 -0.003402 -0.003175 -0.002963 -0.002765 -0.002579 -0.002404 -0.002239 -0.002083 -0.001936 -0.001797 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.008388 -0.007514 -0.006805 -0.006218 -0.005725 -0.005304 -0.004940 -0.004624 -0.004345 -0.004098 -0.003878 -0.003680 -0.003501 -0.003339 -0.003192 -0.003056 -0.002932 -0.002817 -0.002712 -0.002613 -0.002522 -0.002437 -0.002357 -0.002283 -0.002212 -0.002147 -0.002085 -0.002026 -0.001971 -0.001918 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.000880000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +122.9096700000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.000880000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +9.120000 11.400000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +2 ! IPC_SatMode - IPC Saturation method (0 - no saturation (except by PC_MinPit), 1 - saturate by PS_BldPitchMin, 2 - saturate sotfly (full IPC cycle) by PC_MinPit, 3 - saturate softly by PS_BldPitchMin) +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +94.40000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +43093.51876000 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +1500000.000000 ! VS_MaxRat - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +47402.87063000 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +35.29006000000 ! VS_MinOMSpd - Minimum generator speed [rad/s] +2.063350000000 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side). Only used in VS_ControlMode = 1,3 +5000000.000000 ! VS_RtPwr - Wind turbine rated power [W] +43093.51876000 ! VS_RtTq - Rated torque, [Nm]. +122.9096700000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-657.442080000 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-104.507080000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +7.64 ! VS_TSRopt - Power-maximizing region 2 tip-speed-ratio. Only used in VS_ControlMode = 2. +0.314000000000 ! VS_PwrFiltF - Low pass filter on power used to determine generator speed set point. Only used in VS_ControlMode = 3. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +2 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_GenSpeeds array +0.07854 ! PRC_LPF_Freq - Frequency of the low pass filter on the wind speed estimate used to set PRC_GenSpeeds [rad/s] +3.0000 25.0000 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s] +0.7917 0.7917 ! PRC_GenSpeeds - Array of generator speeds corresponding to PRC_WindSpeeds [rad/s] + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +63.000 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +97.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +43702538.05700 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"Cp_Ct_Cq.NREL5MW.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.2897 3.5793 3.8690 4.1586 4.4483 4.7379 5.0276 5.3172 5.6069 5.8966 6.1862 6.4759 6.7655 7.0552 7.3448 7.6345 7.9241 8.2138 8.5034 8.7931 9.0828 9.3724 9.6621 9.9517 10.2414 10.5310 10.8207 11.1103 11.4000 11.8533 12.3067 12.7600 13.2133 13.6667 14.1200 14.5733 15.0267 15.4800 15.9333 16.3867 16.8400 17.2933 17.7467 18.2000 18.6533 19.1067 19.5600 20.0133 20.4667 20.9200 21.3733 21.8267 22.2800 22.7333 23.1867 23.6400 24.0933 24.5467 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.01638154 -0.01796321 -0.01954487 -0.02112654 -0.02270820 -0.02428987 -0.02587154 -0.02745320 -0.02903487 -0.03061653 -0.03219820 -0.03377987 -0.03536153 -0.03694320 -0.03852486 -0.04010653 -0.04168820 -0.04326986 -0.04485153 -0.04643319 -0.04801486 -0.04959652 -0.05117819 -0.05275986 -0.05434152 -0.05592319 -0.05758373 -0.05882656 -0.06845507 -0.05992890 -0.05031134 -0.05798636 -0.06840333 -0.08061549 -0.09336590 -0.10698855 -0.12116040 -0.13530722 -0.15025447 -0.16589008 -0.18080009 -0.19651023 -0.21294470 -0.22969213 -0.24540879 -0.26178304 -0.27905964 -0.29706835 -0.31499595 -0.33136688 -0.34832584 -0.36677525 -0.38556416 -0.40554370 -0.42546670 -0.44309547 -0.46062268 -0.47954729 -0.49884696 -0.51943992 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER FORE-AFT DAMPING ------------------------------------------- +-1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] +0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +60 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.000 3.290 3.579 3.869 4.159 4.448 4.738 5.028 5.317 5.607 5.897 6.186 6.476 6.766 7.055 7.345 7.634 7.924 8.214 8.503 8.793 9.083 9.372 9.662 9.952 10.241 10.531 10.821 11.110 11.400 11.853 12.307 12.760 13.213 13.667 14.120 14.573 15.027 15.480 15.933 16.387 16.840 17.293 17.747 18.200 18.653 19.107 19.560 20.013 20.467 20.920 21.373 21.827 22.280 22.733 23.187 23.640 24.093 24.547 25.000 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.011 0.023 0.032 0.040 0.047 0.059 0.070 0.081 0.091 0.102 0.112 0.122 0.131 0.141 0.150 0.160 0.169 0.178 0.187 0.196 0.205 0.214 0.223 0.232 0.240 0.249 0.257 0.266 0.274 0.282 0.290 0.299 0.307 0.315 0.323 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +1 ! Fl_n - Number of Fl_Kp gains in gain scheduling, optional with default of 1 +0.0000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] +0.0000 ! Fl_U - Wind speeds for scheduling Fl_Kp, optional if Fl_Kp is single value [m/s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) + 0 0 0 ! Ind_BldPitch - The columns in OL_Filename that contains the blade pitch (1,2,3) inputs in rad [array] +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the yaw rate in rad/s +0 ! Ind_Azimuth - The column in OL_Filename that contains the desired azimuth position in rad (used if OL_Mode = 2) +0.0000 0.0000 0.0000 0.0000 ! RP_Gains - PID gains and Tf of derivative for rotor position control (used if OL_Mode = 2) +0 ! Ind_CableControl - The column(s) in OL_Filename that contains the cable control inputs in m [Used with CC_Mode = 2, must be the same size as CC_Group_N] +0 ! Ind_StructControl - The column(s) in OL_Filename that contains the structural control inputs [Used with StC_Mode = 2, must be the same size as StC_Group_N] + +!------- Pitch Actuator Model ----------------------------------------------------- +3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- Pitch Actuator Faults ----------------------------------------------------- +0.00000000 0.00000000 0.00000000 ! PF_Offsets - Constant blade pitch offsets for blades 1-3 [rad] + +!------- Active Wake Control ----------------------------------------------------- +1 ! AWC_NumModes - Number of user-defined AWC forcing modes +1 ! AWC_n - Azimuthal mode number(s) (i.e., the number and direction of the lobes of the wake structure) +1 ! AWC_harmonic - Harmonic(s) to apply in the AWC Inverse Coleman Transformation (only used when AWC_Mode = 2) +0.0500 ! AWC_freq - Frequency(s) of forcing mode(s) [Hz] +1.0000 ! AWC_amp - Pitch amplitude(s) of individual forcing mode(s) [deg] +0.0000 ! AWC_clockangle - Initial angle(s) of forcing mode(s) [deg] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +2.000000 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] + +!------- Cable Control --------------------------------------------------------- +1 ! CC_Group_N - Number of cable control groups +0 ! CC_GroupIndex - First index for cable control group, should correspond to deltaL +20.000000 ! CC_ActTau - Time constant for line actuator [s] + +!------- Structural Controllers --------------------------------------------------------- +1 ! StC_Group_N - Number of cable control groups +0 ! StC_GroupIndex - First index for structural control group, options specified in ServoDyn summary output diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/IceDyn_Input.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/IceDyn_Input.dat new file mode 100644 index 0000000000..3cd7ff93ce --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/IceDyn_Input.dat @@ -0,0 +1,74 @@ +------------------ IceDyn v1.01.x Input File ----------------------------------- +Freshwater Ice of Great Lakes input properties. +---------------------- STRUCTURE PROPERTIES ------------------------------------ + 1 NumLegs - number of support-structure legs in contact with ice + 0 LegPosX - array of size NumLegs: global X position of legs 1-NumLegs (m) + 0 LegPosY - array of size NumLegs: global Y position of legs 1-NumLegs (m) + 6 StWidth - array of size NumLegs: Width of the structure in contact with the ice, or diameter for cylindrical structures (m) +---------------------- ICE MODELS ---------------------------------------------- + 6 IceModel - Number that represents different ice models. {1: quasi-static load; 2:dynamic ice-structure interaction; 3: random ice load; 4: non-simultaneous ice failure; 5: sloping structure 6: large ice floe impact} + 1 IceSubModel - Number that represents different ice sub models. +---------------------- ICE PROPERTIES -General --------------------------------- +0.1 IceVel - Velocity of ice sheet movement (m/s) +0.8 IceThks - Thickness of the ice sheet (m) +1000 WtDen - Mass density of water (kg/m3) +900 IceDen - Mass density of ice (kg/m3) +0.0 InitLoc - Ice sheet initial location (m) +0.0 InitTm - Ice load starting time (s) +2 Seed1 - Random seed 1 +5 Seed2 - Random seed 2 +---------------------- ICE PROPERTIES - Ice Model 1, SubModel 1------------------ +2.7 Ikm - Indentation factor +3.5e6 Ag - Constant depends only on ice crystal type, used in calculating uniaxial stress (MPa-3s-1) +65000 Qg - Activation Energy (Jmol^-1) +8.314 Rg - Universal gas constant (Jmol-1K-1) +269 Tice - Ice temperature (K) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 2------------------- +0.3 Poisson - Poisson's ratio of ice +90.0 WgAngle - Wedge Angel, degree. Default 90 Degrees. +9.5 EIce - Young's modulus of ice (GPa) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 3------------------- +5 SigNm - Nominal ice stress (MPa) +---------------------- ICE PROPERTIES -Ice Model 2, SubModel 1,2----------------- +1.0 Pitch - Distance between sequential ice teeth (m) +5.0 IceStr2 - Ice failure stress (MPa) +1.0 Delmax2 - Ice tooth maximum elastic deformation (m) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 1,2----------------- +0.5 ThkMean - Mean value of ice thickness (m) +0.04 ThkVar - Variance of ice thickness (m^2) +0.001 VelMean - Mean value of ice velocity (m/s) +1e-6 VelVar - Variance of ice velocity (m^2/s^2) +15 TeMean - Mean value of ice loading event duration (s) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 2,3----------------- +5 StrMean - Mean value of ice strength (MPa) +1 StrVar - Variance of ice strength (MPa) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 3------------------- +0.1 DelMean - Mean value of maximum ice tooth tip displacement (m) +0.01 DelVar - Variance of maximum ice tooth tip displacement (m^2) +0.2 PMean - Mean value of the distance between sequential ice teeth (m) +0.01 PVar - Variance of the distance between sequential ice teeth (m^2) +---------------------- ICE PROPERTIES -Ice Model 4 ------------------------------ +0 PrflMean - Mean value of ice contact face position (m) +0.02 PrflSig - Standard deviation of ice contact face position (m) +10 ZoneNo1 - Number of failure zones along contact width +1 ZoneNo2 - Number of failure zones along contact height/thickness +0.27 ZonePitch - Distance between sequential ice teeth (m) +5.0 IceStr - Ice failure stress within each failure region (MPa) +0.027 Delmax - Ice teeth maximum elastic deformatIon (m) +---------------------- ICE PROPERTIES -Ice Model 5, Submodel 1,2 ----------------- +55.0 ConeAgl - Slope angle of the cone (degree) +8.0 ConeDwl - Cone waterline diameter (m) +1.0 ConeDtp - Cone top diameter (m) +0.3 RdupThk - Ride-up ice thickness (m) +0.3 mu - Friction coefficient between structure and ice (-) +0.7 FlxStr - Flexural strength of ice (MPa) +0.1 StrLim - Limit strain for ice fracture failure (-) +1e-2 StrRtLim - Limit strain rate for ice brittle behavior (s^-1) +---------------------- ICE PROPERTIES -Ice Model 6 ------------------------------- +800 FloeLth - Ice floe length (m) +800 FloeWth - Ice floe width (m) +5.0 CPrAr - Ice crushing strength pressure-area relation constant +-0.5 dPrAr - Ice crushing strength pressure-area relation order +9 Fdr - Constant external driving force (MN) +140 Kic - Fracture toughness of ice (kNm^(-3/2)) +3.3 FspN - Non-dimensional splitting load \ No newline at end of file diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/IceFloe_IEC_Crushing.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/IceFloe_IEC_Crushing.dat new file mode 100644 index 0000000000..66ae737cf7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/IceFloe_IEC_Crushing.dat @@ -0,0 +1,51 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 60.0 +randomSeed 123 +rampTime 10.0 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 1.2 +numLegs 4.0 +towerFrequency 0.28 +! +legX1 4.5 +legY1 4.5 +shelterFactor_ks1 1.0 +loadPhase1 0.0 +! +legX2 -4.5 +legY2 4.5 +shelterFactor_ks2 1.0 +loadPhase2 45.0 +! +legX3 4.5 +legY3 -4.5 +shelterFactor_ks3 1.0 +loadPhase3 135.0 +! +legX4 -4.5 +legY4 -4.5 +shelterFactor_ks4 1.0 +loadPhase4 290.0 +! +singleLoad 0 +legAutoFactor 0 +multiLegFactor_kn 1 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_AeroDyn_blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_AeroDyn_blade.dat new file mode 100644 index 0000000000..9d541024d0 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_AeroDyn_blade.dat @@ -0,0 +1,28 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 + +!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m +6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn.dat new file mode 100644 index 0000000000..2f8ab74652 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn.dat @@ -0,0 +1,94 @@ +--------- BEAMDYN with OpenFAST INPUT FILE ------------------------------------------- +NREL 5MW blade +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech"? (flag) +True QuasiStaticInit - Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only] + 0 rhoinf - Numerical damping parameter for generalized-alpha integrator + 2 quadrature - Quadrature method: 1=Gaussian; 2=Trapezoidal (switch) +"DEFAULT" refine - Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2] +"DEFAULT" n_fact - Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5] +"DEFAULT" DTBeam - Time step size (s) +"DEFAULT" load_retries - Number of factored load retries before quitting the simulation [DEFAULT = 20] +"DEFAULT" NRMax - Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10] +"DEFAULT" stop_tol - Tolerance for stopping criterion (-) [DEFAULT = 1E-5] +"DEFAULT" tngt_stf_fd - Use finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_comp - Compare analytical finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_pert - Perturbation size for finite differencing (-) [DEFAULT = 1E-6] +"DEFAULT" tngt_stf_difftol - Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1] +True RotStates - Orient states in the rotating frame during linearization? (flag) [used only when linearizing] +---------------------- GEOMETRY PARAMETER -------------------------------------- + 1 member_total - Total number of members (-) + 49 kp_total - Total number of key points (-) [must be at least 3] + 1 49 - Member number; Number of key points in this member + kp_xr kp_yr kp_zr initial_twist + (m) (m) (m) (deg) +0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.9987500E-01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1998650E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 2.1998550E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 3.1998450E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 4.1998350E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 5.1998250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 6.1998150E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 7.1998050E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 8.2010250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 9.1997850E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.0199775E+01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1199765E+01 1.3181000E+01 +0.0000000E+00 0.0000000E+00 1.2199755E+01 1.2848000E+01 +0.0000000E+00 0.0000000E+00 1.3200975E+01 1.2192000E+01 +0.0000000E+00 0.0000000E+00 1.4199735E+01 1.1561000E+01 +0.0000000E+00 0.0000000E+00 1.5199725E+01 1.1072000E+01 +0.0000000E+00 0.0000000E+00 1.6199715E+01 1.0792000E+01 +0.0000000E+00 0.0000000E+00 1.8200925E+01 1.0232000E+01 +0.0000000E+00 0.0000000E+00 2.0200290E+01 9.6720000E+00 +0.0000000E+00 0.0000000E+00 2.2200270E+01 9.1100000E+00 +0.0000000E+00 0.0000000E+00 2.4200250E+01 8.5340000E+00 +0.0000000E+00 0.0000000E+00 2.6200230E+01 7.9320000E+00 +0.0000000E+00 0.0000000E+00 2.8200825E+01 7.3210000E+00 +0.0000000E+00 0.0000000E+00 3.0200190E+01 6.7110000E+00 +0.0000000E+00 0.0000000E+00 3.2200170E+01 6.1220000E+00 +0.0000000E+00 0.0000000E+00 3.4200150E+01 5.5460000E+00 +0.0000000E+00 0.0000000E+00 3.6200130E+01 4.9710000E+00 +0.0000000E+00 0.0000000E+00 3.8200725E+01 4.4010000E+00 +0.0000000E+00 0.0000000E+00 4.0200090E+01 3.8340000E+00 +0.0000000E+00 0.0000000E+00 4.2200070E+01 3.3320000E+00 +0.0000000E+00 0.0000000E+00 4.4200050E+01 2.8900000E+00 +0.0000000E+00 0.0000000E+00 4.6200030E+01 2.5030000E+00 +0.0000000E+00 0.0000000E+00 4.8201240E+01 2.1160000E+00 +0.0000000E+00 0.0000000E+00 5.0199990E+01 1.7300000E+00 +0.0000000E+00 0.0000000E+00 5.2199970E+01 1.3420000E+00 +0.0000000E+00 0.0000000E+00 5.4199950E+01 9.5400000E-01 +0.0000000E+00 0.0000000E+00 5.5199940E+01 7.6000000E-01 +0.0000000E+00 0.0000000E+00 5.6199930E+01 5.7400000E-01 +0.0000000E+00 0.0000000E+00 5.7199920E+01 4.0400000E-01 +0.0000000E+00 0.0000000E+00 5.7699915E+01 3.1900000E-01 +0.0000000E+00 0.0000000E+00 5.8201140E+01 2.5300000E-01 +0.0000000E+00 0.0000000E+00 5.8699905E+01 2.1600000E-01 +0.0000000E+00 0.0000000E+00 5.9199900E+01 1.7800000E-01 +0.0000000E+00 0.0000000E+00 5.9699895E+01 1.4000000E-01 +0.0000000E+00 0.0000000E+00 6.0199890E+01 1.0100000E-01 +0.0000000E+00 0.0000000E+00 6.0699885E+01 6.2000000E-02 +0.0000000E+00 0.0000000E+00 6.1199880E+01 2.3000000E-02 +0.0000000E+00 0.0000000E+00 6.1500000E+01 0.0000000E+00 +---------------------- MESH PARAMETER ------------------------------------------ + 5 order_elem - Order of interpolation (basis) function (-) +---------------------- MATERIAL PARAMETER -------------------------------------- +"NRELOffshrBsline5MW_BeamDyn_Blade.dat" BldFile - Name of file containing properties for blade (quoted string) +---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- +False UsePitchAct - Whether a pitch actuator should be used (flag) + 200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] + 2E+07 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] + 500000 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] +---------------------- OUTPUTS ------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. + 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) + 1, 2, 3, 4, 5, 6 OutNd - Nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RootFxr, RootFyr, RootFzr" +"RootMxr, RootMyr, RootMzr" +"TipTDxr, TipTDyr, TipTDzr" +"TipRDxr, TipRDyr, TipRDzr" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn_Blade.dat new file mode 100644 index 0000000000..b8724b9a23 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_BeamDyn_Blade.dat @@ -0,0 +1,756 @@ + ------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- + Test Format 1 + ---------------------- BLADE PARAMETERS -------------------------------------- +49 station_total - Number of blade input stations (-) + 1 damp_type - Damping type: 0: no damping; 1: damped + ---------------------- DAMPING COEFFICIENT------------------------------------ + mu1 mu2 mu3 mu4 mu5 mu6 + (-) (-) (-) (-) (-) (-) +1.0E-03 1.0E-03 1.0E-03 0.0014 0.0022 0.0022 + ---------------------- DISTRIBUTED PROPERTIES--------------------------------- + 0.000000 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.003250 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.019510 + 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.078950E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.955860E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.942490E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.431590E+09 + + 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.733630E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.066380E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.091520E+03 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.157900E+03 + + 0.035770 + 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.006723E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.949780E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.745590E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.993980E+09 + + 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.405500E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.047360E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.660900E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.013450E+03 + + 0.052030 + 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.867780E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.978880E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.528740E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.666590E+09 + + 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.400420E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.099750E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.738100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.973560E+03 + + 0.068290 + 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.607860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.485850E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.078240E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.474710E+09 + + 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.924960E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.730200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.485500E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521570E+03 + + 0.084550 + 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.491260E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.022060E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.229720E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.323540E+09 + + 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.502750E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.414900E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.567600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.098250E+03 + + 0.100810 + 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.971300E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 9.144700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.309540E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.907870E+09 + + 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.240540E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.937300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.005300E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.942600E+02 + + 0.117070 + 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.493950E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.063160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.528360E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.570360E+09 + + 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.006380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.471800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.516100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.987900E+02 + + 0.133350 + 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.034800E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.884440E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.980060E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.158260E+09 + + 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.820620E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.908400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.161200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.069600E+02 + + 0.149590 + 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.037290E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.009180E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.936840E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.002120E+09 + + 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.996550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.038600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.036000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.074600E+02 + + 0.165850 + 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.169720E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.167680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.691660E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.559000E+08 + + 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.263210E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.447000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.892400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.339400E+02 + + 0.182110 + 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.082350E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.271660E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.949460E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.722700E+08 + + 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.168200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.699000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.465700E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.164700E+02 + + 0.198370 + 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.085970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.081700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.386520E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.474900E+08 + + 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.061860E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.012800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.159100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.171900E+02 + + 0.214650 + 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.668340E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.244530E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.933740E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.488400E+08 + + 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.814200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.465600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.871100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.336700E+02 + + 0.230890 + 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.147760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.048960E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.568960E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.359200E+08 + + 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.528220E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.687100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.608400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.295500E+02 + + 0.247150 + 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.011580E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.948490E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.388650E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.113500E+08 + + 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.494770E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.537600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.485600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.023200E+02 + + 0.263410 + 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.882620E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.808020E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.271990E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.919400E+08 + + 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.465380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.362200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.403000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.765200E+02 + + 0.295950 + 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.613970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.501400E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.050050E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.610000E+08 + + 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.393330E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.981800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.246100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.227900E+02 + + 0.328460 + 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.357480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.244070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.828250E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.288200E+08 + + 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.300040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.620800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.094200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.715000E+02 + + 0.360980 + 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.146860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.995280E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.588710E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.007500E+08 + + 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.219900E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.350100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.436000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.293700E+02 + + 0.393500 + 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.944090E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.750760E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.361930E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.743800E+08 + + 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.138200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.085700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.024000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.888100E+02 + + 0.426020 + 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.632700E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.447140E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.102380E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.444700E+08 + + 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.947340E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.638700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.267000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.265400E+02 + + 0.458550 + 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.432400E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.139070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.758000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.199800E+08 + + 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.871200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.370600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.942000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.864800E+02 + + 0.491060 + 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.168760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.734240E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.813000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.119000E+07 + + 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.633430E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.964100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.734000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.337500E+02 + + 0.523580 + 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.047430E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.554870E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.347200E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.909000E+07 + + 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.532070E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.803400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.914000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.094800E+02 + + 0.556100 + 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.229500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.334030E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.089000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.745000E+07 + + 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.416660E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.624300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.216000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845900E+02 + + 0.588620 + 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.608200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.828730E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.145400E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.592000E+07 + + 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.206380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.348300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.733000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521600E+02 + + 0.621150 + 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.480300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.584100E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.386300E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.598000E+07 + + 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.002930E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.163000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.330000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.296000E+02 + + 0.653660 + 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.397000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.323360E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.758800E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.744000E+07 + + 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.794040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.798000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.960000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.079400E+02 + + 0.686180 + 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.311500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.183680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.260100E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.090000E+07 + + 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.650940E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.893000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.300000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.062300E+02 + + 0.718700 + 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.600100E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.020160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.072600E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.854000E+07 + + 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.544110E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.578000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.220000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.200000E+01 + + 0.751220 + 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.757500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.978100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.088000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.628000E+07 + + 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.389350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.996000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.190000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.515000E+01 + + 0.783760 + 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.288900E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.096100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.631000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.453000E+07 + + 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.295550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.141000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.577000E+01 + + 0.816260 + 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.440400E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.181900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.105000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.070000E+06 + + 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.072640E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.544000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.880000E+01 + + 0.848780 + 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.116000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.548700E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.948000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.060000E+06 + + 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.877600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.957000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.750000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.232000E+01 + + 0.881300 + 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.815200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.951200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.936000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.080000E+06 + + 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.024800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.409000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.210000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.630000E+01 + + 0.897560 + 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.602500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.537200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.467000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.090000E+06 + + 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 8.300100E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.012000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.930000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.205000E+01 + + 0.913820 + 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.092300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.047300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.041000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.750000E+06 + + 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.290600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.015000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.690000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.184000E+01 + + 0.930080 + 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.000800E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.814200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.652000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.330000E+06 + + 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.877200E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.853000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.490000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.002000E+01 + + 0.938210 + 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.224000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.617100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.384000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.940000E+06 + + 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.626400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.711000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.340000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845000E+01 + + 0.946360 + 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.323000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.588100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.963000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.240000E+06 + + 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.934000E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.155000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.100000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.265000E+01 + + 0.954470 + 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.332000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.378800E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.600000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.660000E+06 + + 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.591400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.770000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.066000E+01 + + 0.962600 + 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.453000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.187900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.283000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.130000E+06 + + 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.248400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.190000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.100000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E+00 + + 0.970730 + 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.690000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.016300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.008000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.640000E+06 + + 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.911400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.820000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.600000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.380000E+00 + + 0.978860 + 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.992000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.507000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.550000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.170000E+06 + + 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.581800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.570000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.200000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.990000E+00 + + 0.986990 + 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.131000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.426000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.600000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.580000E+06 + + 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.166900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.010000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.260000E+00 + + 0.995120 + 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.850000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.610000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 + + 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.145300E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.400000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.800000E-01 + + 1.000000 + 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.530000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.010000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.700000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.900000E+05 + + 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.031900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.800000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.000000E-01 + + + + + + + + + + + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Blade.dat new file mode 100644 index 0000000000..cf5aa25dfe --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Blade.dat @@ -0,0 +1,83 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 +3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 +5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 +6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 +8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 +1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 +1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 +1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 +1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 +1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 +1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 +1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 +2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 +2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 +2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 +2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 +2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 +3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 +3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 +3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 +4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 +4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 +4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 +5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 +5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 +5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 +6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 +6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 +6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 +7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 +7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 +7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 +8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 +8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 +8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 +8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 +9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 +9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 +9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 +9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 +9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 +9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 +9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 +9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 +9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 +9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 +1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_InflowWind.dat new file mode 100644 index 0000000000..b82ff07000 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_InflowWind.dat @@ -0,0 +1,71 @@ +------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- +Steady 8 m/s winds with no shear for FAST CertTests #20 and #25 +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 1 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) +False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 90 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 10 HWindSpeed - Horizontal windspeed (m/s) + 90 RefHt - Reference height for horizontal wind speed (m) + 0 PLexp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +"uniform.hh" Filename_Uni - Filename of time series data for uniform wind field. (-) + 90 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"Wind/90m_12mps_twr.bts" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 90 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 11.4 URef - Mean u-component wind speed at the reference height (m/s) + 0 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +================== LIDAR Parameters =========================================================================== +0 SensorType - Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed) +0 NumPulseGate - Number of lidar measurement gates (used when SensorType = 3) +30 PulseSpacing - Distance between range gates (m) (used when SensorType = 3) +0 NumBeam - Number of lidar measurement beams (0-5)(used when SensorType = 1) +-200 FocalDistanceX - Focal distance co-ordinates of the lidar beam in the x direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceY - Focal distance co-ordinates of the lidar beam in the y direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceZ - Focal distance co-ordinates of the lidar beam in the z direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0.0 0.0 0.0 RotorApexOffsetPos - Offset of the lidar from hub height (m) +17 URefLid - Reference average wind speed for the lidar[m/s] +0.25 MeasurementInterval - Time between each measurement [s] +False LidRadialVel - TRUE => return radial component, FALSE => return 'x' direction estimate +1 ConsiderHubMotion - Flag whether to consider the hub motion's impact on Lidar measurements +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp new file mode 100644 index 0000000000..ad085b6d0e --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp @@ -0,0 +1,26 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 600.0 +randomSeed 123 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 6.0 +numLegs 1.0 +towerFrequency 0.28 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat new file mode 100644 index 0000000000..9a8847ba0a --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -0,0 +1,106 @@ +------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False Buoyancy - Include buoyancy effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] +"unused" AA_InputFile - Aeroacoustics input file +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) + 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] + 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] + 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils/Cylinder2.dat" +"Airfoils/DU40_A17.dat" +"Airfoils/DU35_A17.dat" +"Airfoils/DU30_A17.dat" +"Airfoils/DU25_A17.dat" +"Airfoils/DU21_A17.dat" +"Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +0.0 VolHub - Hub volume (m^3) +0.0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] +0.0 VolNac - Nacelle volume (m^3) +0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail fin Aerodynamics ======================================================================== +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.000000E-01 0.0 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.000000E-01 0.0 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.000000E-01 0.0 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.000000E-01 0.0 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.000000E-01 0.0 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.000000E-01 0.0 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.000000E-01 0.0 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.000000E-01 0.0 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtFldFxh" +"RtFldFyh" +"RtFldFzh" +"RtFldMxh" +"RtFldMyh" +"RtFldMzh" +"RtVAvgxh" +"RtFldCp" +"RtFldCt" +"RtArea" +"RtSpeed" +"RtTSR" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat new file mode 100644 index 0000000000..8bd9386371 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -0,0 +1,160 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"DEFAULT" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +True YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 5 BlPitch(1) - Blade 1 initial pitch (degrees) + 5 BlPitch(2) - Blade 2 initial pitch (degrees) + 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 8 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 0 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 0 PtfmMass - Platform mass (kg) + 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"BldPitch1" - Blade 1 pitch angle +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction +"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat new file mode 100644 index 0000000000..664185cbd6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat @@ -0,0 +1,54 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline tower input properties. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 5.5908700E+03 6.1434300E+11 6.1434300E+11 +1.0000000E-01 5.2324300E+03 5.3482100E+11 5.3482100E+11 +2.0000000E-01 4.8857600E+03 4.6326700E+11 4.6326700E+11 +3.0000000E-01 4.5508700E+03 3.9913100E+11 3.9913100E+11 +4.0000000E-01 4.2277500E+03 3.4188300E+11 3.4188300E+11 +5.0000000E-01 3.9164100E+03 2.9101100E+11 2.9101100E+11 +6.0000000E-01 3.6168300E+03 2.4602700E+11 2.4602700E+11 +7.0000000E-01 3.3290300E+03 2.0645700E+11 2.0645700E+11 +8.0000000E-01 3.0530100E+03 1.7185100E+11 1.7185100E+11 +9.0000000E-01 2.7887500E+03 1.4177600E+11 1.4177600E+11 +1.0000000E+00 2.5362700E+03 1.1582000E+11 1.1582000E+11 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.7004 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 2.1963 TwFAM1Sh(3) - , coefficient of x^3 term + -5.6202 TwFAM1Sh(4) - , coefficient of x^4 term + 6.2275 TwFAM1Sh(5) - , coefficient of x^5 term + -2.504 TwFAM1Sh(6) - , coefficient of x^6 term + -70.5319 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -63.7623 TwFAM2Sh(3) - , coefficient of x^3 term + 289.737 TwFAM2Sh(4) - , coefficient of x^4 term + -176.513 TwFAM2Sh(5) - , coefficient of x^5 term + 22.0706 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.385 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -1.7684 TwSSM1Sh(3) - , coefficient of x^3 term + 3.0871 TwSSM1Sh(4) - , coefficient of x^4 term + -2.2395 TwSSM1Sh(5) - , coefficient of x^5 term + 0.5357 TwSSM1Sh(6) - , coefficient of x^6 term + -121.21 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + 184.415 TwSSM2Sh(3) - , coefficient of x^3 term + -224.904 TwSSM2Sh(4) - , coefficient of x^4 term + 298.536 TwSSM2Sh(5) - , coefficient of x^5 term + -135.838 TwSSM2Sh(6) - , coefficient of x^6 term + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ServoDyn.dat new file mode 100644 index 0000000000..563cb7f181 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/NRELOffshrBsline5MW_Onshore_ServoDyn.dat @@ -0,0 +1,110 @@ +------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to .ech (flag) +"default" DT - Communication interval for controllers (s) (or "default") +---------------------- PITCH CONTROL ------------------------------------------- + 0 PCMode - Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 TPCOn - Time to enable active pitch control (s) [unused when PCMode=0] + 9999.9 TPitManS(1) - Time to start override pitch maneuver for blade 1 and end standard pitch control (s) + 9999.9 TPitManS(2) - Time to start override pitch maneuver for blade 2 and end standard pitch control (s) + 9999.9 TPitManS(3) - Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades] + 8 PitManRat(1) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s) + 8 PitManRat(2) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s) + 8 PitManRat(3) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades] + 20 BlPitchF(1) - Blade 1 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(2) - Blade 2 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(3) - Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades] +---------------------- GENERATOR AND TORQUE CONTROL ---------------------------- + 1 VSContrl - Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 2 GenModel - Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0] + 94.4 GenEff - Generator efficiency [ignored by the Thevenin and user-defined generator models] (%) +True GenTiStr - Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag) +True GenTiStp - Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag) + 10.0 SpdGenOn - Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False] + 0 TimGenOn - Time to turn on the generator for a startup (s) [used only when GenTiStr=True] + 9999.9 TimGenOf - Time to turn off the generator (s) [used only when GenTiStp=True] +---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL -------------------- + 1162.0 VS_RtGnSp - Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1] + 47403.0 VS_RtTq - Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1] + 0.025576 VS_Rgn2K - Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1] + 10.0 VS_SlPc - Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1] +---------------------- SIMPLE INDUCTION GENERATOR ------------------------------ + 9999.9 SIG_SlPc - Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_SySp - Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_RtTq - Rated torque (N-m) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_PORt - Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1] +---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR ----------------- + 9999.9 TEC_Freq - Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2] + 9998 TEC_NPol - Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SRes - Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RRes - Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_VLL - Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SLR - Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RLR - Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_MR - Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2] +---------------------- HIGH-SPEED SHAFT BRAKE ---------------------------------- + 0 HSSBrMode - HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 THSSBrDp - Time to initiate deployment of the HSS brake (s) + 0.6 HSSBrDT - Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1] + 28116.2 HSSBrTqF - Fully deployed HSS-brake torque (N-m) +---------------------- NACELLE-YAW CONTROL ------------------------------------- + 0 YCMode - Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 TYCOn - Time to enable active yaw control (s) [unused when YCMode=0] + 0 YawNeut - Neutral yaw position--yaw spring force is zero at this yaw (degrees) +9.02832E+09 YawSpr - Nacelle-yaw spring constant (N-m/rad) + 1.916E+07 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s)) + 9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s) + 2 YawManRat - Yaw maneuver rate (in absolute value) (deg/s) + 0 NacYawF - Final yaw angle for override yaw maneuvers (degrees) +---------------------- AERODYNAMIC FLOW CONTROL -------------------------------- + 0 AfCmode - Airfoil control mode {0: none, 1: cosine wave cycle, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 AfC_Mean - Mean level for cosine cycling or steady value (-) [used only with AfCmode==1] + 0 AfC_Amp - Amplitude for for cosine cycling of flap signal (-) [used only with AfCmode==1] + 0 AfC_Phase - Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1] +---------------------- STRUCTURAL CONTROL -------------------------------------- +0 NumBStC - Number of blade structural controllers (integer) +"unused" BStCfiles - Name of the files for blade structural controllers (quoted strings) [unused when NumBStC==0] +0 NumNStC - Number of nacelle structural controllers (integer) +"unused" NStCfiles - Name of the files for nacelle structural controllers (quoted strings) [unused when NumNStC==0] +0 NumTStC - Number of tower structural controllers (integer) +"unused" TStCfiles - Name of the files for tower structural controllers (quoted strings) [unused when NumTStC==0] +0 NumSStC - Number of substructure structural controllers (integer) +"unused" SStCfiles - Name of the files for substructure structural controllers (quoted strings) [unused when NumSStC==0] +---------------------- CABLE CONTROL ------------------------------------------- + 0 CCmode - Cable control mode {0: none, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) +---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface] +"../../ROSCO/install/lib/libdiscon.so" DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface] +"/home/of_rt/ROSCO/Examples/examples_out/17_ZeroMQ/DISCON_zmq.IN" DLL_InFile - Name of input file sent to the DLL (-) [used only with Bladed Interface] +"DISCON_zmq" DLL_ProcName - Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface] +"default" DLL_DT - Communication interval for dynamic library (s) (or "default") [used only with Bladed Interface] +false DLL_Ramp - Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface] + 9999.9 BPCutoff - Cutoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface] + 0 NacYaw_North - Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface] + 1 Ptch_Cntrl - Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface] + 0 Ptch_SetPnt - Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface] + 0 Ptch_Min - Record 6: Minimum pitch angle (deg) [used only with Bladed Interface] + 0 Ptch_Max - Record 7: Maximum pitch angle (deg) [used only with Bladed Interface] + 0 PtchRate_Min - Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface] + 0 PtchRate_Max - Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface] + 0 Gain_OM - Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface] + 0 GenSpd_MinOM - Record 17: Minimum generator speed (rpm) [used only with Bladed Interface] + 0 GenSpd_MaxOM - Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface] + 0 GenSpd_Dem - Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface] + 0 GenTrq_Dem - Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface] + 0 GenPwr_Dem - Record 13: Demanded power (W) [used only with Bladed Interface] +---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE ------------- + 0 DLL_NumTrq - Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface] + GenSpd_TLU GenTrq_TLU + (rpm) (Nm) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to .sum (flag) (currently unused) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"GenTq" - Electrical generator power and torque +"GenPwr" - Electrical generator power and torque +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.AD.sum new file mode 100644 index 0000000000..33dbd733de --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.AD.sum @@ -0,0 +1,61 @@ + +This summary information was generated by AeroDyn on 17-Jun-2024 at 11:31:07. + +====== General Options ============================================================================ + 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory + 2 AFAeroMod - Type of blade airfoil aerodynamics model: Beddoes-Leishman unsteady model + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +====== Blade-Element/Momentum Theory Options ====================================================== + 2 SkewMod - Type of skewed-wake correction model: Pitt/Peters + T TipLoss - Use the Prandtl tip-loss model? Yes + T HubLoss - Use the Prandtl hub-loss model? Yes + T TanInd - Include tangential induction in BEMT calculations? Yes + F AIDrag - Include the drag term in the axial-induction calculation? No + F TIDrag - Include the drag term in the tangential-induction calculation? No + 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== + 3 UAMod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 3 NBlOuts - Number of blade nodes selected for output + 19 NumBlNds - Number of blade nodes in the analysis + Blade nodes selected for output: Output node Analysis node + ----------- ------------- + 1 1 + 2 9 + 3 19 + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ED.sum new file mode 100644 index 0000000000..e743c69b74 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ED.sum @@ -0,0 +1,210 @@ + +This summary information was generated by ElastoDyn on 17-Jun-2024 at 11:31:07. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 16 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Enabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.00500000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 0.000 + Mass Incl. Platform (kg) 696850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 OoPDefl1 (m) + 2 IPDefl1 (m) + 3 TwstDefl1 (deg) + 4 BldPitch1 (deg) + 5 Azimuth (deg) + 6 RotSpeed (rpm) + 7 GenSpeed (rpm) + 8 TTDspFA (m) + 9 TTDspSS (m) + 10 TTDspTwst (deg) + 11 Spn2MLxb1 (kN-m) + 12 Spn2MLyb1 (kN-m) + 13 RootFxb1 (kN) + 14 RootFyb1 (kN) + 15 RootFzb1 (kN) + 16 RootMxb1 (kN-m) + 17 RootMyb1 (kN-m) + 18 RootMyc1 (kN-m) + 19 RootMyc2 (kN-m) + 20 RootMyc3 (kN-m) + 21 RootMzb1 (kN-m) + 22 RotTorq (kN-m) + 23 LSSGagMya (kN-m) + 24 LSSGagMza (kN-m) + 25 YawBrFxp (kN) + 26 YawBrFyp (kN) + 27 YawBrFzp (kN) + 28 YawBrMxp (kN-m) + 29 YawBrMyp (kN-m) + 30 YawBrMzp (kN-m) + 31 TwrBsFxt (kN) + 32 TwrBsFyt (kN) + 33 TwrBsFzt (kN) + 34 TwrBsMxt (kN-m) + 35 TwrBsMyt (kN-m) + 36 TwrBsMzt (kN-m) + 37 NcIMURAys (deg/s^2) + 38 NcIMUTAxs (m/s^2) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.SrvD.sum new file mode 100644 index 0000000000..2904559dd0 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 17-Jun-2024 at 11:31:07. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 0 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 17-Jun-2024 at 11:31:07. + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.UA.sum new file mode 100644 index 0000000000..6dd2f7e01f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.UA.sum @@ -0,0 +1,16 @@ + +Predictions were generated on 17-Jun-2024 at 11:31:07 + OpenFAST + + + +AirfoilNumber TableNumber alpha0 alpha1 alpha2 eta_e C_nalpha C_lalpha T_f0 T_V0 T_p T_VL b1 b2 b5 A1 A2 A5 S1 S2 S3 S4 Cn1 Cn2 St_sh Cd0 Cm0 k0 k1 k2 k3 k1_hat x_cp_bar UACutout UACutout_delta UACutout_blend filtCutOff alphaLowerWrap alphaLower alphaUpper alphaUpperWrap c_alphaLowerWrap c_alphaLower c_alphaUpper c_alphaUpperWrap c_RateWrap c_RateLower c_Rate c_RateUpper +(-) (-) (deg) (deg) (deg) (-) (-/rad) (-/rad) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (deg) (deg) (deg) (-) (deg) (deg) (deg) (deg) (-) (-) (-) (-) (-/rad) (-/rad) (-/rad) (-/rad) + 1 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 2 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 3 1 -3.20000 9.00000 -9.00000 1.00000 7.48880 9.05273 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.35190 -0.32260 0.19000 0.03000 -0.05000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -0.25000 2.25000 55.00000 -5.61045 0.10507 0.47793 8.35959 -3.07855 7.31788 8.54531 8.56087 + 4 1 -1.20000 11.50000 -11.50000 1.00000 7.18380 8.82355 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.67170 -0.30750 0.19000 0.01200 -0.07000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -40.00000 -2.75000 5.75000 50.00000 -5.56999 -0.20172 0.96897 6.72117 -2.60827 8.25716 7.89125 7.44806 + 5 1 -2.20000 9.00000 -9.00000 1.00000 7.33260 8.47978 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.44900 -0.61380 0.19000 0.00800 -0.09000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -6.39000 6.25000 45.00000 -5.67249 -0.57626 1.09716 5.87251 -2.44993 7.56262 7.58542 7.06084 + 6 1 -3.20000 8.50000 -8.50000 1.00000 6.44620 7.97647 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.43360 -0.68730 0.19000 0.00600 -0.12000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -7.96000 3.75000 32.00000 -5.53755 -0.61874 0.91909 4.38619 -2.00914 7.60871 7.52444 7.03186 + 7 1 -4.20000 8.00000 -8.00000 1.00000 6.20470 8.96402 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.41440 -0.53240 0.19000 0.00600 -0.12100 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -35.00000 -9.05000 2.75000 30.00000 -4.67755 -0.67498 0.85701 4.10998 -1.70674 8.83741 7.43866 6.83970 + 8 1 -4.43200 9.00000 -9.00000 1.00000 6.00310 7.67763 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.40730 -0.79450 0.19000 0.00650 -0.08800 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -50.00000 -5.50000 4.50000 28.00000 -6.14917 -0.20664 0.95141 3.60393 -1.98160 7.65128 6.63516 6.46715 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ech new file mode 100644 index 0000000000..b2a1c2af92 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.ech @@ -0,0 +1,107 @@ + +This file of echoed input was generated by OpenFAST on 17-Jun-2024 at 11:31:07. + +Data from OpenFAST primary input file "OFZMQ_test02.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 6.0000E+02 TMax - Total run time (s) + 5.0000E-03 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) + 1.2250E+00 AirDens - Air density (kg/m^3) + 1.0250E+03 WtrDens - Water density (kg/m^3) + 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) + 1.0350E+05 Patm - Atmospheric pressure (Pa) + 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) + 5.0000E+01 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + T SumPrint - Print summary data to .sum (flag) + 5.0000E+00 SttsTime - Amount of time between screen status messages (s) + 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES10.3E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + T VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "https://127.0.1:5555" + 0 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + " + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 6 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + "Wind1VelX" "Azimuth" "GenTq" "GenPwr" "OoPDefl1" "IPDefl1" + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "0.5" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.fst new file mode 100644 index 0000000000..e33d8a1cab --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.fst @@ -0,0 +1,86 @@ +------- OpenFAST example INPUT FILE ------------------------------------------- +FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +600.0 TMax - Total run time (s) +0.005 DT - Recommended module time step (s) +2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} +0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} +99999 DT_UJac - Time between calls to get Jacobians (s) +1000000.0 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ +1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} +1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} +2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} +1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} +0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} +0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} +0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} +0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} +0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- +9.80665 Gravity - Gravitational acceleration (m/s^2) +1.225 AirDens - Air density (kg/m^3) +1025 WtrDens - Water density (kg/m^3) +1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) +335 SpdSound - Speed of sound in working fluid (m/s) +103500 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] +1700 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] +50 WtrDpth - Water depth (m) +0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +5 SttsTime - Amount of time between screen status messages (s) +99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +default DT_Out - Time step for tabular output (s) (or "default") +0 TStart - Time to begin tabular output (s) +0 OutFileFmt - Format for tabular (time-marching) output file (switch) {0: uncompressed binary [.outb], 1: text file [.out], 2: binary file [.outb], 3: both 1 and 2} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) +3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) +0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) +0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) +0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) +0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) +2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] +30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] +1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] +1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ +0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} +1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +True VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] +15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"https://127.0.1:5555" ZmqInAddress - REQ-REP localhost address +0 ZmqInNbr - Number of parameters to be requested +none ZmqInChannels - Channels to be requested at communication time +default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +6 ZmqOutNbr - Number of channels to be broadcasted +"Wind1VelX" +"Azimuth" +"GenTq" +"GenPwr" +"OoPDefl1" +"IPDefl1" ZmqOutChannels - Channels to be broadcasterd at communication time +0.5 ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.sum new file mode 100644 index 0000000000..4f156ac5e1 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test02/OFZMQ_test02.sum @@ -0,0 +1,103 @@ + +FAST Summary File + +Predictions were generated on 17-Jun-2024 at 11:31:07 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-8-gb0f04e00-dirty + compiled with + NWTC Subroutine Library + ElastoDyn + BeamDyn (unknown version, unknown date) [not called] + InflowWind + AeroDyn14 (unknown version, unknown date) [not called] + AeroDyn + ServoDyn + HydroDyn (unknown version, unknown date) [not called] + SubDyn (unknown version, unknown date) [not called] + ExtPtfm_MCKF (unknown version, unknown date) [not called] + MAP (unknown version, unknown date) [not called] + FEAMooring (unknown version, unknown date) [not called] + MoorDyn (unknown version, unknown date) [not called] + OrcaFlexInterface (unknown version, unknown date) [not called] + IceFloe (unknown version, unknown date) [not called] + IceDyn (unknown version, unknown date) [not called] + + +Modeling a land-based turbine +Description from the FAST input file: + FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) + +Interpolation order for input/output time histories: 2 (quadratic) +Number of correction iterations: 0 + + + Requested Time Steps + ------------------------------------------------- + Component Time Step (s) Subcycles (-) + ----------------- --------------- ------------- + FAST (glue code) 5.000E-03 + InflowWind 5.000E-03 1 + ElastoDyn 5.000E-03 1 + AeroDyn 5.000E-03 1 + ServoDyn 5.000E-03 1 + FAST output files 5.000E-03 1 + + + Requested Channels in FAST Output File(s) + -------------------------------------------- + Number Name Units Generated by + ------ -------------------- -------------------- ------------ + 1 Time (s) OpenFAST + 2 Wind1VelX (m/s) InflowWind + 3 Wind1VelY (m/s) InflowWind + 4 Wind1VelZ (m/s) InflowWind + 5 OoPDefl1 (m) ElastoDyn + 6 IPDefl1 (m) ElastoDyn + 7 TwstDefl1 (deg) ElastoDyn + 8 BldPitch1 (deg) ElastoDyn + 9 Azimuth (deg) ElastoDyn + 10 RotSpeed (rpm) ElastoDyn + 11 GenSpeed (rpm) ElastoDyn + 12 TTDspFA (m) ElastoDyn + 13 TTDspSS (m) ElastoDyn + 14 TTDspTwst (deg) ElastoDyn + 15 Spn2MLxb1 (kN-m) ElastoDyn + 16 Spn2MLyb1 (kN-m) ElastoDyn + 17 RootFxb1 (kN) ElastoDyn + 18 RootFyb1 (kN) ElastoDyn + 19 RootFzb1 (kN) ElastoDyn + 20 RootMxb1 (kN-m) ElastoDyn + 21 RootMyb1 (kN-m) ElastoDyn + 22 RootMyc1 (kN-m) ElastoDyn + 23 RootMyc2 (kN-m) ElastoDyn + 24 RootMyc3 (kN-m) ElastoDyn + 25 RootMzb1 (kN-m) ElastoDyn + 26 RotTorq (kN-m) ElastoDyn + 27 LSSGagMya (kN-m) ElastoDyn + 28 LSSGagMza (kN-m) ElastoDyn + 29 YawBrFxp (kN) ElastoDyn + 30 YawBrFyp (kN) ElastoDyn + 31 YawBrFzp (kN) ElastoDyn + 32 YawBrMxp (kN-m) ElastoDyn + 33 YawBrMyp (kN-m) ElastoDyn + 34 YawBrMzp (kN-m) ElastoDyn + 35 TwrBsFxt (kN) ElastoDyn + 36 TwrBsFyt (kN) ElastoDyn + 37 TwrBsFzt (kN) ElastoDyn + 38 TwrBsMxt (kN-m) ElastoDyn + 39 TwrBsMyt (kN-m) ElastoDyn + 40 TwrBsMzt (kN-m) ElastoDyn + 41 NcIMURAys (deg/s^2) ElastoDyn + 42 NcIMUTAxs (m/s^2) ElastoDyn + 43 RtFldFxh (N) AeroDyn + 44 RtFldFyh (N) AeroDyn + 45 RtFldFzh (N) AeroDyn + 46 RtFldMxh (N-m) AeroDyn + 47 RtFldMyh (N-m) AeroDyn + 48 RtFldMzh (N-m) AeroDyn + 49 RtVAvgxh (m/s) AeroDyn + 50 RtFldCp (-) AeroDyn + 51 RtFldCt (-) AeroDyn + 52 RtArea (m^2) AeroDyn + 53 RtSpeed (rpm) AeroDyn + 54 RtTSR (-) AeroDyn + 55 GenTq (kN-m) ServoDyn + 56 GenPwr (kW) ServoDyn diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder1.dat new file mode 100644 index 0000000000..4ff6d1311f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder1.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.50 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.50 Minimum CD value +-180.00 0.000 0.5000 0.000 + 0.00 0.000 0.5000 0.000 + 180.00 0.000 0.5000 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder2.dat new file mode 100644 index 0000000000..29f643ca65 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/Cylinder2.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.35 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.35 Minimum CD value +-180.00 0.000 0.3500 0.000 + 0.00 0.000 0.3500 0.000 + 180.00 0.000 0.3500 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU21_A17.dat new file mode 100644 index 0000000000..52cc6d3ff9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU21_A17.dat @@ -0,0 +1,158 @@ +DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -5.0609 Zero Cn angle of attack (deg) + 6.2047 Cn slope for zero lift (dimensionless) + 1.4144 Cn extrapolated to value at positive stall angle of attack + -0.5324 Cn at stall value for negative angle of attack + -1.50 Angle of attack for minimum CD (deg) + 0.0057 Minimum CD value +-180.00 0.000 0.0185 0.0000 +-175.00 0.394 0.0332 0.1978 +-170.00 0.788 0.0945 0.3963 +-160.00 0.670 0.2809 0.2738 +-155.00 0.749 0.3932 0.3118 +-150.00 0.797 0.5112 0.3413 +-145.00 0.818 0.6309 0.3636 +-140.00 0.813 0.7485 0.3799 +-135.00 0.786 0.8612 0.3911 +-130.00 0.739 0.9665 0.3980 +-125.00 0.675 1.0625 0.4012 +-120.00 0.596 1.1476 0.4014 +-115.00 0.505 1.2206 0.3990 +-110.00 0.403 1.2805 0.3943 +-105.00 0.294 1.3265 0.3878 +-100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU25_A17.dat new file mode 100644 index 0000000000..3c24e77f5f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU25_A17.dat @@ -0,0 +1,157 @@ +DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.2422 Zero Cn angle of attack (deg) + 6.4462 Cn slope for zero lift (dimensionless) + 1.4336 Cn extrapolated to value at positive stall angle of attack + -0.6873 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0065 Minimum CD value +-180.00 0.000 0.0202 0.0000 +-175.00 0.368 0.0324 0.1845 +-170.00 0.735 0.0943 0.3701 +-160.00 0.695 0.2848 0.2679 +-155.00 0.777 0.4001 0.3046 +-150.00 0.828 0.5215 0.3329 +-145.00 0.850 0.6447 0.3540 +-140.00 0.846 0.7660 0.3693 +-135.00 0.818 0.8823 0.3794 +-130.00 0.771 0.9911 0.3854 +-125.00 0.705 1.0905 0.3878 +-120.00 0.624 1.1787 0.3872 +-115.00 0.530 1.2545 0.3841 +-110.00 0.426 1.3168 0.3788 +-105.00 0.314 1.3650 0.3716 +-100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU30_A17.dat new file mode 100644 index 0000000000..23ecb3e9a3 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU30_A17.dat @@ -0,0 +1,159 @@ +DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -2.3220 Zero Cn angle of attack (deg) + 7.3326 Cn slope for zero lift (dimensionless) + 1.4490 Cn extrapolated to value at positive stall angle of attack + -0.6138 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0087 Minimum CD value +-180.00 0.000 0.0267 0.0000 +-175.00 0.274 0.0370 0.1379 +-170.00 0.547 0.0968 0.2778 +-160.00 0.685 0.2876 0.2740 +-155.00 0.766 0.4025 0.3118 +-150.00 0.816 0.5232 0.3411 +-145.00 0.836 0.6454 0.3631 +-140.00 0.832 0.7656 0.3791 +-135.00 0.804 0.8807 0.3899 +-130.00 0.756 0.9882 0.3965 +-125.00 0.690 1.0861 0.3994 +-120.00 0.609 1.1730 0.3992 +-115.00 0.515 1.2474 0.3964 +-110.00 0.411 1.3084 0.3915 +-105.00 0.300 1.3552 0.3846 +-100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU35_A17.dat new file mode 100644 index 0000000000..9e962a1e63 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU35_A17.dat @@ -0,0 +1,151 @@ +DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 11.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.8330 Zero Cn angle of attack (deg) + 7.1838 Cn slope for zero lift (dimensionless) + 1.6717 Cn extrapolated to value at positive stall angle of attack + -0.3075 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0094 Minimum CD value +-180.00 0.000 0.0407 0.0000 +-175.00 0.223 0.0507 0.0937 +-170.00 0.405 0.1055 0.1702 +-160.00 0.658 0.2982 0.2819 +-155.00 0.733 0.4121 0.3213 +-150.00 0.778 0.5308 0.3520 +-145.00 0.795 0.6503 0.3754 +-140.00 0.787 0.7672 0.3926 +-135.00 0.757 0.8785 0.4046 +-130.00 0.708 0.9819 0.4121 +-125.00 0.641 1.0756 0.4160 +-120.00 0.560 1.1580 0.4167 +-115.00 0.467 1.2280 0.4146 +-110.00 0.365 1.2847 0.4104 +-105.00 0.255 1.3274 0.4041 +-100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU40_A17.dat new file mode 100644 index 0000000000..08a2d28261 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/DU40_A17.dat @@ -0,0 +1,152 @@ +DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.3430 Zero Cn angle of attack (deg) + 7.4888 Cn slope for zero lift (dimensionless) + 1.3519 Cn extrapolated to value at positive stall angle of attack + -0.3226 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0113 Minimum CD value +-180.00 0.000 0.0602 0.0000 +-175.00 0.218 0.0699 0.0934 +-170.00 0.397 0.1107 0.1697 +-160.00 0.642 0.3045 0.2813 +-155.00 0.715 0.4179 0.3208 +-150.00 0.757 0.5355 0.3516 +-145.00 0.772 0.6535 0.3752 +-140.00 0.762 0.7685 0.3926 +-135.00 0.731 0.8777 0.4048 +-130.00 0.680 0.9788 0.4126 +-125.00 0.613 1.0700 0.4166 +-120.00 0.532 1.1499 0.4176 +-115.00 0.439 1.2174 0.4158 +-110.00 0.337 1.2716 0.4117 +-105.00 0.228 1.3118 0.4057 +-100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/NACA64_A17.dat new file mode 100644 index 0000000000..3db1887a38 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/AeroData/NACA64_A17.dat @@ -0,0 +1,143 @@ +NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.4320 Zero Cn angle of attack (deg) + 6.0031 Cn slope for zero lift (dimensionless) + 1.4073 Cn extrapolated to value at positive stall angle of attack + -0.7945 Cn at stall value for negative angle of attack + -1.00 Angle of attack for minimum CD (deg) + 0.0052 Minimum CD value +-180.00 0.000 0.0198 0.0000 +-175.00 0.374 0.0341 0.1880 +-170.00 0.749 0.0955 0.3770 +-160.00 0.659 0.2807 0.2747 +-155.00 0.736 0.3919 0.3130 +-150.00 0.783 0.5086 0.3428 +-145.00 0.803 0.6267 0.3654 +-140.00 0.798 0.7427 0.3820 +-135.00 0.771 0.8537 0.3935 +-130.00 0.724 0.9574 0.4007 +-125.00 0.660 1.0519 0.4042 +-120.00 0.581 1.1355 0.4047 +-115.00 0.491 1.2070 0.4025 +-110.00 0.390 1.2656 0.3981 +-105.00 0.282 1.3104 0.3918 +-100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1.dat new file mode 100644 index 0000000000..393e5d8721 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1.dat @@ -0,0 +1,59 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.50 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder1_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.5 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.5000 0.0 + 0.00 0.000 0.5000 0.0 + 180.00 0.000 0.5000 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1_coords.txt new file mode 100644 index 0000000000..3c8ec3d3b4 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder1_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.5 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2.dat new file mode 100644 index 0000000000..5294db4fdb --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2.dat @@ -0,0 +1,60 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.35 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder2_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.35 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.3500 0.0 + 0.00 0.000 0.3500 0.0 + 180.00 0.000 0.3500 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2_coords.txt new file mode 100644 index 0000000000..f95e693e67 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/Cylinder2_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.41667 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17.dat new file mode 100644 index 0000000000..7d55bb9ac2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17.dat @@ -0,0 +1,196 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU21_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4144 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.5324 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.121 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 142 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0185 0.0000 + -175.00 0.394 0.0332 0.1978 + -170.00 0.788 0.0945 0.3963 + -160.00 0.670 0.2809 0.2738 + -155.00 0.749 0.3932 0.3118 + -150.00 0.797 0.5112 0.3413 + -145.00 0.818 0.6309 0.3636 + -140.00 0.813 0.7485 0.3799 + -135.00 0.786 0.8612 0.3911 + -130.00 0.739 0.9665 0.3980 + -125.00 0.675 1.0625 0.4012 + -120.00 0.596 1.1476 0.4014 + -115.00 0.505 1.2206 0.3990 + -110.00 0.403 1.2805 0.3943 + -105.00 0.294 1.3265 0.3878 + -100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17_coords.txt new file mode 100644 index 0000000000..3728b88baa --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU21_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 93-W-210.lm +! x/c y/c +1.00000 0.00194 +0.99660 0.00304 +0.99314 0.00411 +0.98961 0.00516 +0.98601 0.00618 +0.98235 0.00720 +0.97863 0.00823 +0.97484 0.00927 +0.97098 0.01033 +0.96706 0.01139 +0.96307 0.01246 +0.95902 0.01354 +0.95490 0.01463 +0.95072 0.01573 +0.94647 0.01684 +0.94216 0.01797 +0.93778 0.01911 +0.93333 0.02026 +0.92882 0.02142 +0.92425 0.02260 +0.91961 0.02379 +0.91490 0.02499 +0.91013 0.02621 +0.90529 0.02744 +0.90039 0.02869 +0.89542 0.02995 +0.89039 0.03122 +0.88529 0.03250 +0.88013 0.03379 +0.87490 0.03510 +0.86961 0.03643 +0.86425 0.03776 +0.85882 0.03912 +0.85333 0.04048 +0.84778 0.04186 +0.84216 0.04326 +0.83647 0.04466 +0.83072 0.04608 +0.82490 0.04752 +0.81902 0.04896 +0.81307 0.05041 +0.80706 0.05188 +0.80098 0.05336 +0.79484 0.05484 +0.78863 0.05634 +0.78235 0.05784 +0.77601 0.05936 +0.76961 0.06088 +0.76314 0.06242 +0.75660 0.06396 +0.75000 0.06550 +0.74333 0.06706 +0.73667 0.06860 +0.73000 0.07014 +0.72333 0.07167 +0.71667 0.07320 +0.71000 0.07472 +0.70333 0.07624 +0.69667 0.07774 +0.69000 0.07924 +0.68333 0.08072 +0.67667 0.08220 +0.67000 0.08366 +0.66333 0.08511 +0.65667 0.08655 +0.65000 0.08798 +0.64333 0.08940 +0.63667 0.09080 +0.63000 0.09220 +0.62333 0.09357 +0.61667 0.09492 +0.61000 0.09626 +0.60333 0.09759 +0.59667 0.09889 +0.59000 0.10017 +0.58333 0.10143 +0.57667 0.10267 +0.57000 0.10389 +0.56333 0.10509 +0.55667 0.10627 +0.55000 0.10742 +0.54333 0.10854 +0.53667 0.10964 +0.53000 0.11071 +0.52333 0.11175 +0.51667 0.11277 +0.51000 0.11375 +0.50333 0.11470 +0.49667 0.11562 +0.49000 0.11650 +0.48333 0.11734 +0.47667 0.11813 +0.47000 0.11889 +0.46333 0.11960 +0.45667 0.12027 +0.45000 0.12089 +0.44333 0.12147 +0.43667 0.12200 +0.43000 0.12249 +0.42333 0.12292 +0.41667 0.12331 +0.41000 0.12365 +0.40333 0.12394 +0.39667 0.12418 +0.39000 0.12436 +0.38333 0.12449 +0.37667 0.12457 +0.37000 0.12459 +0.36333 0.12455 +0.35667 0.12446 +0.35000 0.12431 +0.34333 0.12411 +0.33667 0.12385 +0.33000 0.12353 +0.32333 0.12317 +0.31667 0.12275 +0.31000 0.12228 +0.30333 0.12175 +0.29667 0.12117 +0.29000 0.12053 +0.28333 0.11984 +0.27667 0.11910 +0.27000 0.11829 +0.26333 0.11744 +0.25667 0.11653 +0.25000 0.11557 +0.24342 0.11456 +0.23693 0.11351 +0.23053 0.11243 +0.22421 0.11130 +0.21798 0.11015 +0.21184 0.10896 +0.20579 0.10773 +0.19982 0.10648 +0.19395 0.10520 +0.18816 0.10389 +0.18245 0.10255 +0.17684 0.10119 +0.17131 0.09980 +0.16587 0.09839 +0.16052 0.09696 +0.15526 0.09550 +0.15008 0.09403 +0.14499 0.09254 +0.13999 0.09103 +0.13508 0.08950 +0.13026 0.08796 +0.12552 0.08641 +0.12087 0.08483 +0.11631 0.08325 +0.11183 0.08165 +0.10745 0.08004 +0.10315 0.07843 +0.09893 0.07679 +0.09481 0.07516 +0.09077 0.07351 +0.08683 0.07186 +0.08297 0.07021 +0.07919 0.06854 +0.07551 0.06687 +0.07191 0.06520 +0.06840 0.06353 +0.06498 0.06185 +0.06164 0.06017 +0.05840 0.05850 +0.05524 0.05682 +0.05217 0.05515 +0.04918 0.05348 +0.04629 0.05181 +0.04348 0.05015 +0.04076 0.04849 +0.03812 0.04683 +0.03558 0.04519 +0.03312 0.04356 +0.03075 0.04194 +0.02847 0.04033 +0.02627 0.03874 +0.02417 0.03716 +0.02215 0.03560 +0.02022 0.03404 +0.01837 0.03249 +0.01662 0.03094 +0.01495 0.02940 +0.01337 0.02785 +0.01187 0.02630 +0.01047 0.02476 +0.00915 0.02322 +0.00792 0.02169 +0.00678 0.02017 +0.00572 0.01864 +0.00476 0.01713 +0.00388 0.01562 +0.00309 0.01410 +0.00238 0.01253 +0.00177 0.01094 +0.00124 0.00923 +0.00080 0.00740 +0.00044 0.00537 +0.00018 0.00333 +0.00000 0.00000 +0.00018 -0.00292 +0.00044 -0.00443 +0.00080 -0.00589 +0.00124 -0.00727 +0.00177 -0.00864 +0.00238 -0.00998 +0.00309 -0.01134 +0.00388 -0.01266 +0.00476 -0.01397 +0.00572 -0.01526 +0.00678 -0.01656 +0.00792 -0.01785 +0.00915 -0.01914 +0.01047 -0.02044 +0.01187 -0.02174 +0.01337 -0.02306 +0.01495 -0.02438 +0.01662 -0.02571 +0.01837 -0.02705 +0.02022 -0.02841 +0.02215 -0.02976 +0.02417 -0.03112 +0.02627 -0.03248 +0.02847 -0.03384 +0.03075 -0.03520 +0.03312 -0.03655 +0.03558 -0.03789 +0.03812 -0.03923 +0.04076 -0.04056 +0.04348 -0.04188 +0.04629 -0.04319 +0.04918 -0.04449 +0.05217 -0.04579 +0.05524 -0.04708 +0.05840 -0.04836 +0.06164 -0.04963 +0.06498 -0.05089 +0.06840 -0.05215 +0.07191 -0.05340 +0.07551 -0.05464 +0.07919 -0.05587 +0.08297 -0.05709 +0.08683 -0.05831 +0.09077 -0.05951 +0.09481 -0.06071 +0.09893 -0.06189 +0.10315 -0.06306 +0.10745 -0.06422 +0.11183 -0.06536 +0.11631 -0.06648 +0.12087 -0.06759 +0.12552 -0.06868 +0.13026 -0.06975 +0.13508 -0.07079 +0.13999 -0.07182 +0.14499 -0.07282 +0.15008 -0.07380 +0.15526 -0.07476 +0.16052 -0.07568 +0.16587 -0.07658 +0.17131 -0.07746 +0.17684 -0.07830 +0.18245 -0.07911 +0.18816 -0.07989 +0.19395 -0.08063 +0.19982 -0.08134 +0.20579 -0.08201 +0.21184 -0.08264 +0.21798 -0.08324 +0.22421 -0.08380 +0.23053 -0.08432 +0.23693 -0.08479 +0.24342 -0.08523 +0.25000 -0.08561 +0.25667 -0.08595 +0.26333 -0.08624 +0.27000 -0.08648 +0.27667 -0.08667 +0.28333 -0.08680 +0.29000 -0.08689 +0.29667 -0.08693 +0.30333 -0.08692 +0.31000 -0.08686 +0.31667 -0.08676 +0.32333 -0.08660 +0.33000 -0.08640 +0.33667 -0.08615 +0.34333 -0.08586 +0.35000 -0.08553 +0.35667 -0.08515 +0.36333 -0.08473 +0.37000 -0.08427 +0.37667 -0.08376 +0.38333 -0.08322 +0.39000 -0.08263 +0.39667 -0.08200 +0.40333 -0.08134 +0.41000 -0.08062 +0.41667 -0.07987 +0.42333 -0.07908 +0.43000 -0.07824 +0.43667 -0.07736 +0.44333 -0.07644 +0.45000 -0.07548 +0.45667 -0.07448 +0.46333 -0.07343 +0.47000 -0.07235 +0.47667 -0.07122 +0.48333 -0.07006 +0.49000 -0.06886 +0.49667 -0.06763 +0.50333 -0.06636 +0.51000 -0.06506 +0.51667 -0.06373 +0.52333 -0.06237 +0.53000 -0.06097 +0.53667 -0.05955 +0.54333 -0.05810 +0.55000 -0.05663 +0.55667 -0.05513 +0.56333 -0.05361 +0.57000 -0.05207 +0.57667 -0.05050 +0.58333 -0.04892 +0.59000 -0.04732 +0.59667 -0.04571 +0.60333 -0.04408 +0.61000 -0.04243 +0.61667 -0.04078 +0.62333 -0.03911 +0.63000 -0.03744 +0.63667 -0.03576 +0.64333 -0.03409 +0.65000 -0.03241 +0.65667 -0.03073 +0.66333 -0.02906 +0.67000 -0.02740 +0.67667 -0.02574 +0.68333 -0.02411 +0.69000 -0.02248 +0.69667 -0.02088 +0.70333 -0.01930 +0.71000 -0.01774 +0.71667 -0.01620 +0.72333 -0.01470 +0.73000 -0.01323 +0.73667 -0.01179 +0.74333 -0.01039 +0.75000 -0.00903 +0.75660 -0.00772 +0.76314 -0.00647 +0.76961 -0.00528 +0.77601 -0.00416 +0.78235 -0.00308 +0.78863 -0.00207 +0.79484 -0.00112 +0.80098 -0.00023 +0.80706 0.00060 +0.81307 0.00136 +0.81902 0.00207 +0.82490 0.00273 +0.83072 0.00333 +0.83647 0.00387 +0.84216 0.00435 +0.84778 0.00479 +0.85333 0.00517 +0.85882 0.00550 +0.86425 0.00578 +0.86961 0.00601 +0.87490 0.00620 +0.88013 0.00633 +0.88529 0.00643 +0.89039 0.00648 +0.89542 0.00649 +0.90039 0.00646 +0.90529 0.00639 +0.91013 0.00628 +0.91490 0.00613 +0.91961 0.00595 +0.92425 0.00574 +0.92882 0.00550 +0.93333 0.00523 +0.93778 0.00494 +0.94216 0.00462 +0.94647 0.00428 +0.95072 0.00392 +0.95490 0.00355 +0.95902 0.00315 +0.96307 0.00275 +0.96706 0.00233 +0.97098 0.00189 +0.97484 0.00145 +0.97863 0.00099 +0.98235 0.00053 +0.98601 0.00005 +0.98961 -0.00044 +0.99314 -0.00094 +0.99660 -0.00143 +1.00000 -0.00194 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17.dat new file mode 100644 index 0000000000..4949fcf7e5 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17.dat @@ -0,0 +1,194 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU25_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4336 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6873 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.12 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 140 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0202 0.0000 + -175.00 0.368 0.0324 0.1845 + -170.00 0.735 0.0943 0.3701 + -160.00 0.695 0.2848 0.2679 + -155.00 0.777 0.4001 0.3046 + -150.00 0.828 0.5215 0.3329 + -145.00 0.850 0.6447 0.3540 + -140.00 0.846 0.7660 0.3693 + -135.00 0.818 0.8823 0.3794 + -130.00 0.771 0.9911 0.3854 + -125.00 0.705 1.0905 0.3878 + -120.00 0.624 1.1787 0.3872 + -115.00 0.530 1.2545 0.3841 + -110.00 0.426 1.3168 0.3788 + -105.00 0.314 1.3650 0.3716 + -100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17_coords.txt new file mode 100644 index 0000000000..8655cdc1d7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU25_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 91-W2-250.lm +! x/c y/c +1.00000 0.00213 +0.99660 0.00314 +0.99314 0.00414 +0.98961 0.00515 +0.98601 0.00617 +0.98235 0.00720 +0.97863 0.00822 +0.97484 0.00926 +0.97098 0.01030 +0.96706 0.01135 +0.96307 0.01240 +0.95902 0.01347 +0.95490 0.01454 +0.95072 0.01562 +0.94647 0.01672 +0.94216 0.01783 +0.93778 0.01895 +0.93333 0.02009 +0.92882 0.02125 +0.92425 0.02241 +0.91961 0.02359 +0.91490 0.02479 +0.91013 0.02600 +0.90529 0.02722 +0.90039 0.02846 +0.89542 0.02972 +0.89039 0.03099 +0.88529 0.03227 +0.88013 0.03357 +0.87490 0.03489 +0.86961 0.03622 +0.86425 0.03756 +0.85882 0.03892 +0.85333 0.04029 +0.84778 0.04167 +0.84216 0.04306 +0.83647 0.04447 +0.83072 0.04589 +0.82490 0.04732 +0.81902 0.04877 +0.81307 0.05023 +0.80706 0.05170 +0.80098 0.05319 +0.79484 0.05468 +0.78863 0.05619 +0.78235 0.05771 +0.77601 0.05925 +0.76961 0.06078 +0.76314 0.06233 +0.75660 0.06388 +0.75000 0.06544 +0.74333 0.06701 +0.73667 0.06857 +0.73000 0.07013 +0.72333 0.07168 +0.71667 0.07322 +0.71000 0.07475 +0.70333 0.07628 +0.69667 0.07779 +0.69000 0.07930 +0.68333 0.08080 +0.67667 0.08228 +0.67000 0.08375 +0.66333 0.08522 +0.65667 0.08667 +0.65000 0.08810 +0.64333 0.08953 +0.63667 0.09093 +0.63000 0.09233 +0.62333 0.09371 +0.61667 0.09507 +0.61000 0.09642 +0.60333 0.09775 +0.59667 0.09906 +0.59000 0.10035 +0.58333 0.10163 +0.57667 0.10289 +0.57000 0.10413 +0.56333 0.10535 +0.55667 0.10655 +0.55000 0.10773 +0.54333 0.10888 +0.53667 0.11001 +0.53000 0.11112 +0.52333 0.11221 +0.51667 0.11327 +0.51000 0.11430 +0.50333 0.11530 +0.49667 0.11628 +0.49000 0.11723 +0.48333 0.11815 +0.47667 0.11904 +0.47000 0.11991 +0.46333 0.12074 +0.45667 0.12154 +0.45000 0.12230 +0.44333 0.12303 +0.43667 0.12372 +0.43000 0.12436 +0.42333 0.12497 +0.41667 0.12554 +0.41000 0.12606 +0.40333 0.12655 +0.39667 0.12699 +0.39000 0.12738 +0.38333 0.12773 +0.37667 0.12803 +0.37000 0.12828 +0.36333 0.12846 +0.35667 0.12858 +0.35000 0.12864 +0.34333 0.12862 +0.33667 0.12853 +0.33000 0.12837 +0.32333 0.12815 +0.31667 0.12785 +0.31000 0.12749 +0.30333 0.12705 +0.29667 0.12656 +0.29000 0.12600 +0.28333 0.12538 +0.27667 0.12469 +0.27000 0.12394 +0.26333 0.12312 +0.25667 0.12224 +0.25000 0.12130 +0.24342 0.12030 +0.23693 0.11926 +0.23053 0.11817 +0.22421 0.11704 +0.21798 0.11586 +0.21184 0.11465 +0.20579 0.11340 +0.19982 0.11210 +0.19395 0.11078 +0.18816 0.10942 +0.18245 0.10803 +0.17684 0.10660 +0.17131 0.10515 +0.16587 0.10367 +0.16052 0.10217 +0.15526 0.10064 +0.15008 0.09909 +0.14499 0.09751 +0.13999 0.09591 +0.13508 0.09430 +0.13026 0.09266 +0.12552 0.09101 +0.12087 0.08934 +0.11631 0.08765 +0.11183 0.08595 +0.10745 0.08424 +0.10315 0.08251 +0.09893 0.08076 +0.09481 0.07902 +0.09077 0.07725 +0.08683 0.07549 +0.08297 0.07371 +0.07919 0.07192 +0.07551 0.07013 +0.07191 0.06834 +0.06840 0.06654 +0.06498 0.06474 +0.06164 0.06293 +0.05840 0.06113 +0.05524 0.05933 +0.05217 0.05753 +0.04918 0.05573 +0.04629 0.05393 +0.04348 0.05214 +0.04076 0.05035 +0.03812 0.04856 +0.03558 0.04679 +0.03312 0.04502 +0.03075 0.04326 +0.02847 0.04151 +0.02627 0.03976 +0.02417 0.03804 +0.02215 0.03632 +0.02022 0.03462 +0.01837 0.03293 +0.01662 0.03126 +0.01495 0.02961 +0.01337 0.02797 +0.01187 0.02635 +0.01047 0.02475 +0.00915 0.02317 +0.00792 0.02161 +0.00678 0.02007 +0.00572 0.01855 +0.00476 0.01706 +0.00388 0.01557 +0.00309 0.01409 +0.00238 0.01261 +0.00177 0.01110 +0.00124 0.00945 +0.00080 0.00766 +0.00044 0.00568 +0.00018 0.00363 +0.00000 0.00000 +0.00018 -0.00360 +0.00044 -0.00572 +0.00080 -0.00778 +0.00124 -0.00974 +0.00177 -0.01169 +0.00238 -0.01359 +0.00309 -0.01549 +0.00388 -0.01736 +0.00476 -0.01921 +0.00572 -0.02104 +0.00678 -0.02288 +0.00792 -0.02470 +0.00915 -0.02652 +0.01047 -0.02835 +0.01187 -0.03019 +0.01337 -0.03205 +0.01495 -0.03392 +0.01662 -0.03581 +0.01837 -0.03770 +0.02022 -0.03961 +0.02215 -0.04153 +0.02417 -0.04345 +0.02627 -0.04537 +0.02847 -0.04730 +0.03075 -0.04921 +0.03312 -0.05112 +0.03558 -0.05302 +0.03812 -0.05491 +0.04076 -0.05679 +0.04348 -0.05865 +0.04629 -0.06051 +0.04918 -0.06234 +0.05217 -0.06418 +0.05524 -0.06600 +0.05840 -0.06780 +0.06164 -0.06960 +0.06498 -0.07139 +0.06840 -0.07316 +0.07191 -0.07492 +0.07551 -0.07668 +0.07919 -0.07842 +0.08297 -0.08015 +0.08683 -0.08186 +0.09077 -0.08356 +0.09481 -0.08525 +0.09893 -0.08692 +0.10315 -0.08858 +0.10745 -0.09022 +0.11183 -0.09182 +0.11631 -0.09342 +0.12087 -0.09498 +0.12552 -0.09652 +0.13026 -0.09803 +0.13508 -0.09951 +0.13999 -0.10095 +0.14499 -0.10237 +0.15008 -0.10376 +0.15526 -0.10511 +0.16052 -0.10642 +0.16587 -0.10769 +0.17131 -0.10892 +0.17684 -0.11011 +0.18245 -0.11126 +0.18816 -0.11236 +0.19395 -0.11341 +0.19982 -0.11441 +0.20579 -0.11536 +0.21184 -0.11626 +0.21798 -0.11710 +0.22421 -0.11789 +0.23053 -0.11862 +0.23693 -0.11929 +0.24342 -0.11990 +0.25000 -0.12045 +0.25667 -0.12094 +0.26333 -0.12135 +0.27000 -0.12168 +0.27667 -0.12195 +0.28333 -0.12214 +0.29000 -0.12227 +0.29667 -0.12232 +0.30333 -0.12231 +0.31000 -0.12222 +0.31667 -0.12207 +0.32333 -0.12186 +0.33000 -0.12157 +0.33667 -0.12123 +0.34333 -0.12082 +0.35000 -0.12034 +0.35667 -0.11981 +0.36333 -0.11922 +0.37000 -0.11857 +0.37667 -0.11785 +0.38333 -0.11708 +0.39000 -0.11625 +0.39667 -0.11537 +0.40333 -0.11442 +0.41000 -0.11342 +0.41667 -0.11236 +0.42333 -0.11124 +0.43000 -0.11006 +0.43667 -0.10881 +0.44333 -0.10752 +0.45000 -0.10615 +0.45667 -0.10474 +0.46333 -0.10326 +0.47000 -0.10173 +0.47667 -0.10015 +0.48333 -0.09851 +0.49000 -0.09682 +0.49667 -0.09508 +0.50333 -0.09329 +0.51000 -0.09145 +0.51667 -0.08956 +0.52333 -0.08764 +0.53000 -0.08567 +0.53667 -0.08366 +0.54333 -0.08162 +0.55000 -0.07953 +0.55667 -0.07742 +0.56333 -0.07527 +0.57000 -0.07309 +0.57667 -0.07088 +0.58333 -0.06865 +0.59000 -0.06639 +0.59667 -0.06410 +0.60333 -0.06180 +0.61000 -0.05948 +0.61667 -0.05713 +0.62333 -0.05478 +0.63000 -0.05242 +0.63667 -0.05005 +0.64333 -0.04767 +0.65000 -0.04530 +0.65667 -0.04293 +0.66333 -0.04057 +0.67000 -0.03822 +0.67667 -0.03588 +0.68333 -0.03357 +0.69000 -0.03127 +0.69667 -0.02900 +0.70333 -0.02676 +0.71000 -0.02456 +0.71667 -0.02238 +0.72333 -0.02026 +0.73000 -0.01817 +0.73667 -0.01614 +0.74333 -0.01416 +0.75000 -0.01223 +0.75660 -0.01038 +0.76314 -0.00861 +0.76961 -0.00692 +0.77601 -0.00532 +0.78235 -0.00381 +0.78863 -0.00238 +0.79484 -0.00103 +0.80098 0.00023 +0.80706 0.00141 +0.81307 0.00250 +0.81902 0.00351 +0.82490 0.00444 +0.83072 0.00529 +0.83647 0.00606 +0.84216 0.00675 +0.84778 0.00737 +0.85333 0.00791 +0.85882 0.00839 +0.86425 0.00879 +0.86961 0.00913 +0.87490 0.00940 +0.88013 0.00961 +0.88529 0.00975 +0.89039 0.00983 +0.89542 0.00985 +0.90039 0.00982 +0.90529 0.00972 +0.91013 0.00957 +0.91490 0.00936 +0.91961 0.00910 +0.92425 0.00880 +0.92882 0.00844 +0.93333 0.00804 +0.93778 0.00760 +0.94216 0.00712 +0.94647 0.00660 +0.95072 0.00606 +0.95490 0.00549 +0.95902 0.00490 +0.96307 0.00429 +0.96706 0.00367 +0.97098 0.00303 +0.97484 0.00238 +0.97863 0.00173 +0.98235 0.00108 +0.98601 0.00043 +0.98961 -0.00022 +0.99314 -0.00086 +0.99660 -0.00149 +1.00000 -0.00213 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17.dat new file mode 100644 index 0000000000..2173054243 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17.dat @@ -0,0 +1,198 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU30_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -2.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.449 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6138 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.008 Cd0 ! 2D drag coefficient value at 0-lift. + -0.09 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 143 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0267 0.0000 + -175.00 0.274 0.0370 0.1379 + -170.00 0.547 0.0968 0.2778 + -160.00 0.685 0.2876 0.2740 + -155.00 0.766 0.4025 0.3118 + -150.00 0.816 0.5232 0.3411 + -145.00 0.836 0.6454 0.3631 + -140.00 0.832 0.7656 0.3791 + -135.00 0.804 0.8807 0.3899 + -130.00 0.756 0.9882 0.3965 + -125.00 0.690 1.0861 0.3994 + -120.00 0.609 1.1730 0.3992 + -115.00 0.515 1.2474 0.3964 + -110.00 0.411 1.3084 0.3915 + -105.00 0.300 1.3552 0.3846 + -100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17_coords.txt new file mode 100644 index 0000000000..0f010f6506 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU30_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 97-W-300.lm +! x/c y/c +1.00000 0.00246 +0.99660 0.00340 +0.99314 0.00437 +0.98961 0.00536 +0.98601 0.00638 +0.98235 0.00740 +0.97863 0.00843 +0.97484 0.00947 +0.97098 0.01051 +0.96706 0.01157 +0.96307 0.01264 +0.95902 0.01371 +0.95490 0.01479 +0.95072 0.01588 +0.94647 0.01698 +0.94216 0.01810 +0.93778 0.01922 +0.93333 0.02036 +0.92882 0.02151 +0.92425 0.02268 +0.91961 0.02386 +0.91490 0.02505 +0.91013 0.02626 +0.90529 0.02749 +0.90039 0.02873 +0.89542 0.02999 +0.89039 0.03126 +0.88529 0.03255 +0.88013 0.03385 +0.87490 0.03516 +0.86961 0.03649 +0.86425 0.03784 +0.85882 0.03921 +0.85333 0.04058 +0.84778 0.04197 +0.84216 0.04337 +0.83647 0.04479 +0.83072 0.04622 +0.82490 0.04767 +0.81902 0.04913 +0.81307 0.05060 +0.80706 0.05208 +0.80098 0.05357 +0.79484 0.05508 +0.78863 0.05659 +0.78235 0.05812 +0.77601 0.05965 +0.76961 0.06120 +0.76314 0.06275 +0.75660 0.06432 +0.75000 0.06589 +0.74333 0.06747 +0.73667 0.06904 +0.73000 0.07061 +0.72333 0.07217 +0.71667 0.07371 +0.71000 0.07525 +0.70333 0.07678 +0.69667 0.07830 +0.69000 0.07981 +0.68333 0.08131 +0.67667 0.08280 +0.67000 0.08428 +0.66333 0.08575 +0.65667 0.08720 +0.65000 0.08864 +0.64333 0.09008 +0.63667 0.09149 +0.63000 0.09290 +0.62333 0.09429 +0.61667 0.09566 +0.61000 0.09703 +0.60333 0.09837 +0.59667 0.09970 +0.59000 0.10102 +0.58333 0.10232 +0.57667 0.10360 +0.57000 0.10486 +0.56333 0.10611 +0.55667 0.10734 +0.55000 0.10855 +0.54333 0.10975 +0.53667 0.11092 +0.53000 0.11207 +0.52333 0.11321 +0.51667 0.11432 +0.51000 0.11541 +0.50333 0.11648 +0.49667 0.11752 +0.49000 0.11854 +0.48333 0.11954 +0.47667 0.12051 +0.47000 0.12146 +0.46333 0.12239 +0.45667 0.12328 +0.45000 0.12415 +0.44333 0.12500 +0.43667 0.12581 +0.43000 0.12659 +0.42333 0.12734 +0.41667 0.12806 +0.41000 0.12875 +0.40333 0.12940 +0.39667 0.13001 +0.39000 0.13059 +0.38333 0.13113 +0.37667 0.13164 +0.37000 0.13210 +0.36333 0.13252 +0.35667 0.13290 +0.35000 0.13323 +0.34333 0.13352 +0.33667 0.13377 +0.33000 0.13396 +0.32333 0.13411 +0.31667 0.13420 +0.31000 0.13424 +0.30333 0.13422 +0.29667 0.13415 +0.29000 0.13401 +0.28333 0.13381 +0.27667 0.13355 +0.27000 0.13321 +0.26333 0.13280 +0.25667 0.13231 +0.25000 0.13174 +0.24342 0.13109 +0.23693 0.13036 +0.23053 0.12955 +0.22421 0.12866 +0.21798 0.12771 +0.21184 0.12668 +0.20579 0.12559 +0.19982 0.12444 +0.19395 0.12324 +0.18816 0.12197 +0.18245 0.12066 +0.17684 0.11930 +0.17131 0.11789 +0.16587 0.11644 +0.16052 0.11495 +0.15526 0.11342 +0.15008 0.11185 +0.14499 0.11024 +0.13999 0.10860 +0.13508 0.10693 +0.13026 0.10522 +0.12552 0.10348 +0.12087 0.10172 +0.11631 0.09993 +0.11183 0.09811 +0.10745 0.09627 +0.10315 0.09441 +0.09893 0.09252 +0.09481 0.09061 +0.09077 0.08869 +0.08683 0.08675 +0.08297 0.08478 +0.07919 0.08280 +0.07551 0.08082 +0.07191 0.07881 +0.06840 0.07680 +0.06498 0.07477 +0.06164 0.07274 +0.05840 0.07070 +0.05524 0.06865 +0.05217 0.06660 +0.04918 0.06454 +0.04629 0.06248 +0.04348 0.06042 +0.04076 0.05835 +0.03812 0.05629 +0.03558 0.05423 +0.03312 0.05217 +0.03075 0.05012 +0.02847 0.04808 +0.02627 0.04604 +0.02417 0.04402 +0.02215 0.04200 +0.02022 0.03999 +0.01837 0.03799 +0.01662 0.03602 +0.01495 0.03405 +0.01337 0.03211 +0.01187 0.03017 +0.01047 0.02827 +0.00915 0.02637 +0.00792 0.02450 +0.00678 0.02266 +0.00572 0.02083 +0.00476 0.01904 +0.00388 0.01725 +0.00309 0.01548 +0.00238 0.01370 +0.00177 0.01194 +0.00124 0.01010 +0.00080 0.00820 +0.00044 0.00612 +0.00018 0.00390 +0.00000 0.00000 +0.00018 -0.00382 +0.00044 -0.00601 +0.00080 -0.00815 +0.00124 -0.01017 +0.00177 -0.01216 +0.00238 -0.01412 +0.00309 -0.01611 +0.00388 -0.01811 +0.00476 -0.02014 +0.00572 -0.02217 +0.00678 -0.02423 +0.00792 -0.02630 +0.00915 -0.02840 +0.01047 -0.03053 +0.01187 -0.03267 +0.01337 -0.03485 +0.01495 -0.03705 +0.01662 -0.03929 +0.01837 -0.04154 +0.02022 -0.04385 +0.02215 -0.04617 +0.02417 -0.04852 +0.02627 -0.05088 +0.02847 -0.05328 +0.03075 -0.05569 +0.03312 -0.05813 +0.03558 -0.06060 +0.03812 -0.06308 +0.04076 -0.06559 +0.04348 -0.06811 +0.04629 -0.07064 +0.04918 -0.07318 +0.05217 -0.07574 +0.05524 -0.07831 +0.05840 -0.08088 +0.06164 -0.08345 +0.06498 -0.08604 +0.06840 -0.08862 +0.07191 -0.09121 +0.07551 -0.09379 +0.07919 -0.09637 +0.08297 -0.09895 +0.08683 -0.10152 +0.09077 -0.10408 +0.09481 -0.10665 +0.09893 -0.10919 +0.10315 -0.11173 +0.10745 -0.11425 +0.11183 -0.11675 +0.11631 -0.11923 +0.12087 -0.12169 +0.12552 -0.12412 +0.13026 -0.12652 +0.13508 -0.12888 +0.13999 -0.13121 +0.14499 -0.13350 +0.15008 -0.13576 +0.15526 -0.13797 +0.16052 -0.14014 +0.16587 -0.14225 +0.17131 -0.14432 +0.17684 -0.14633 +0.18245 -0.14828 +0.18816 -0.15017 +0.19395 -0.15198 +0.19982 -0.15371 +0.20579 -0.15537 +0.21184 -0.15693 +0.21798 -0.15840 +0.22421 -0.15976 +0.23053 -0.16101 +0.23693 -0.16214 +0.24342 -0.16314 +0.25000 -0.16399 +0.25667 -0.16470 +0.26333 -0.16526 +0.27000 -0.16567 +0.27667 -0.16592 +0.28333 -0.16602 +0.29000 -0.16598 +0.29667 -0.16580 +0.30333 -0.16548 +0.31000 -0.16503 +0.31667 -0.16445 +0.32333 -0.16374 +0.33000 -0.16291 +0.33667 -0.16198 +0.34333 -0.16094 +0.35000 -0.15980 +0.35667 -0.15855 +0.36333 -0.15722 +0.37000 -0.15580 +0.37667 -0.15429 +0.38333 -0.15270 +0.39000 -0.15104 +0.39667 -0.14931 +0.40333 -0.14752 +0.41000 -0.14566 +0.41667 -0.14374 +0.42333 -0.14178 +0.43000 -0.13977 +0.43667 -0.13772 +0.44333 -0.13562 +0.45000 -0.13348 +0.45667 -0.13130 +0.46333 -0.12908 +0.47000 -0.12683 +0.47667 -0.12456 +0.48333 -0.12225 +0.49000 -0.11992 +0.49667 -0.11757 +0.50333 -0.11520 +0.51000 -0.11281 +0.51667 -0.11040 +0.52333 -0.10799 +0.53000 -0.10555 +0.53667 -0.10310 +0.54333 -0.10065 +0.55000 -0.09818 +0.55667 -0.09570 +0.56333 -0.09321 +0.57000 -0.09071 +0.57667 -0.08821 +0.58333 -0.08571 +0.59000 -0.08320 +0.59667 -0.08070 +0.60333 -0.07819 +0.61000 -0.07569 +0.61667 -0.07319 +0.62333 -0.07070 +0.63000 -0.06820 +0.63667 -0.06572 +0.64333 -0.06325 +0.65000 -0.06079 +0.65667 -0.05834 +0.66333 -0.05590 +0.67000 -0.05347 +0.67667 -0.05106 +0.68333 -0.04867 +0.69000 -0.04629 +0.69667 -0.04394 +0.70333 -0.04161 +0.71000 -0.03931 +0.71667 -0.03703 +0.72333 -0.03478 +0.73000 -0.03256 +0.73667 -0.03037 +0.74333 -0.02822 +0.75000 -0.02610 +0.75660 -0.02405 +0.76314 -0.02205 +0.76961 -0.02013 +0.77601 -0.01827 +0.78235 -0.01647 +0.78863 -0.01474 +0.79484 -0.01309 +0.80098 -0.01150 +0.80706 -0.00998 +0.81307 -0.00854 +0.81902 -0.00717 +0.82490 -0.00586 +0.83072 -0.00462 +0.83647 -0.00346 +0.84216 -0.00236 +0.84778 -0.00133 +0.85333 -0.00037 +0.85882 0.00052 +0.86425 0.00134 +0.86961 0.00210 +0.87490 0.00278 +0.88013 0.00340 +0.88529 0.00395 +0.89039 0.00444 +0.89542 0.00487 +0.90039 0.00524 +0.90529 0.00555 +0.91013 0.00580 +0.91490 0.00600 +0.91961 0.00614 +0.92425 0.00622 +0.92882 0.00625 +0.93333 0.00623 +0.93778 0.00615 +0.94216 0.00602 +0.94647 0.00583 +0.95072 0.00558 +0.95490 0.00528 +0.95902 0.00493 +0.96307 0.00452 +0.96706 0.00405 +0.97098 0.00352 +0.97484 0.00294 +0.97863 0.00231 +0.98235 0.00163 +0.98601 0.00090 +0.98961 0.00012 +0.99314 -0.00071 +0.99660 -0.00158 +1.00000 -0.00246 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17.dat new file mode 100644 index 0000000000..750b46ecbf --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17.dat @@ -0,0 +1,189 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU35_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -1.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 11.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -11.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.6717 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3075 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.012 Cd0 ! 2D drag coefficient value at 0-lift. + -0.07 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 135 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0407 0.0000 + -175.00 0.223 0.0507 0.0937 + -170.00 0.405 0.1055 0.1702 + -160.00 0.658 0.2982 0.2819 + -155.00 0.733 0.4121 0.3213 + -150.00 0.778 0.5308 0.3520 + -145.00 0.795 0.6503 0.3754 + -140.00 0.787 0.7672 0.3926 + -135.00 0.757 0.8785 0.4046 + -130.00 0.708 0.9819 0.4121 + -125.00 0.641 1.0756 0.4160 + -120.00 0.560 1.1580 0.4167 + -115.00 0.467 1.2280 0.4146 + -110.00 0.365 1.2847 0.4104 + -105.00 0.255 1.3274 0.4041 + -100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17_coords.txt new file mode 100644 index 0000000000..b1b81649b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU35_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU 35 +! x/c y/c +1.00000 0.00283 +0.99660 0.00378 +0.99314 0.00477 +0.98961 0.00578 +0.98601 0.00683 +0.98235 0.00789 +0.97863 0.00897 +0.97484 0.01006 +0.97098 0.01116 +0.96706 0.01228 +0.96307 0.01342 +0.95902 0.01456 +0.95490 0.01571 +0.95072 0.01688 +0.94647 0.01806 +0.94216 0.01926 +0.93778 0.02046 +0.93333 0.02169 +0.92882 0.02292 +0.92425 0.02419 +0.91961 0.02547 +0.91490 0.02675 +0.91013 0.02807 +0.90529 0.02941 +0.90039 0.03077 +0.89542 0.03214 +0.89039 0.03353 +0.88529 0.03495 +0.88013 0.03638 +0.87490 0.03782 +0.86961 0.03929 +0.86425 0.04079 +0.85882 0.04230 +0.85333 0.04383 +0.84778 0.04538 +0.84216 0.04694 +0.83647 0.04853 +0.83072 0.05013 +0.82490 0.05176 +0.81902 0.05340 +0.81307 0.05506 +0.80706 0.05673 +0.80098 0.05842 +0.79484 0.06013 +0.78863 0.06184 +0.78235 0.06358 +0.77601 0.06531 +0.76961 0.06708 +0.76314 0.06885 +0.75660 0.07064 +0.75000 0.07244 +0.74333 0.07426 +0.73667 0.07606 +0.73000 0.07786 +0.72333 0.07966 +0.71667 0.08144 +0.71000 0.08322 +0.70333 0.08498 +0.69667 0.08674 +0.69000 0.08849 +0.68333 0.09022 +0.67667 0.09196 +0.67000 0.09368 +0.66333 0.09539 +0.65667 0.09708 +0.65000 0.09876 +0.64333 0.10044 +0.63667 0.10210 +0.63000 0.10375 +0.62333 0.10538 +0.61667 0.10699 +0.61000 0.10859 +0.60333 0.11017 +0.59667 0.11174 +0.59000 0.11330 +0.58333 0.11483 +0.57667 0.11634 +0.57000 0.11784 +0.56333 0.11931 +0.55667 0.12077 +0.55000 0.12220 +0.54333 0.12363 +0.53667 0.12502 +0.53000 0.12639 +0.52333 0.12775 +0.51667 0.12907 +0.51000 0.13037 +0.50333 0.13165 +0.49667 0.13289 +0.49000 0.13411 +0.48333 0.13531 +0.47667 0.13648 +0.47000 0.13761 +0.46333 0.13873 +0.45667 0.13980 +0.45000 0.14086 +0.44333 0.14189 +0.43667 0.14288 +0.43000 0.14384 +0.42333 0.14477 +0.41667 0.14566 +0.41000 0.14653 +0.40333 0.14736 +0.39667 0.14814 +0.39000 0.14889 +0.38333 0.14960 +0.37667 0.15028 +0.37000 0.15091 +0.36333 0.15151 +0.35667 0.15207 +0.35000 0.15258 +0.34333 0.15306 +0.33667 0.15351 +0.33000 0.15391 +0.32333 0.15426 +0.31667 0.15457 +0.31000 0.15482 +0.30333 0.15502 +0.29667 0.15516 +0.29000 0.15524 +0.28333 0.15525 +0.27667 0.15520 +0.27000 0.15507 +0.26333 0.15486 +0.25667 0.15457 +0.25000 0.15419 +0.24342 0.15372 +0.23693 0.15316 +0.23053 0.15250 +0.22421 0.15175 +0.21798 0.15094 +0.21184 0.15002 +0.20579 0.14904 +0.19982 0.14798 +0.19395 0.14686 +0.18816 0.14566 +0.18245 0.14439 +0.17684 0.14308 +0.17131 0.14169 +0.16587 0.14025 +0.16052 0.13875 +0.15526 0.13721 +0.15008 0.13561 +0.14499 0.13396 +0.13999 0.13226 +0.13508 0.13052 +0.13026 0.12873 +0.12552 0.12689 +0.12087 0.12502 +0.11631 0.12311 +0.11183 0.12115 +0.10745 0.11917 +0.10315 0.11715 +0.09893 0.11509 +0.09481 0.11299 +0.09077 0.11087 +0.08683 0.10871 +0.08297 0.10652 +0.07919 0.10430 +0.07551 0.10207 +0.07191 0.09979 +0.06840 0.09750 +0.06498 0.09517 +0.06164 0.09284 +0.05840 0.09048 +0.05524 0.08809 +0.05217 0.08569 +0.04918 0.08327 +0.04629 0.08084 +0.04348 0.07839 +0.04076 0.07592 +0.03812 0.07345 +0.03558 0.07096 +0.03312 0.06847 +0.03075 0.06597 +0.02847 0.06348 +0.02627 0.06097 +0.02417 0.05847 +0.02215 0.05596 +0.02022 0.05344 +0.01837 0.05091 +0.01662 0.04841 +0.01495 0.04589 +0.01337 0.04339 +0.01187 0.04088 +0.01047 0.03840 +0.00915 0.03591 +0.00792 0.03343 +0.00678 0.03096 +0.00572 0.02845 +0.00476 0.02592 +0.00388 0.02329 +0.00309 0.02056 +0.00238 0.01774 +0.00177 0.01503 +0.00124 0.01240 +0.00080 0.00990 +0.00044 0.00733 +0.00018 0.00465 +0.00000 0.00000 +0.00018 -0.00461 +0.00044 -0.00726 +0.00080 -0.00990 +0.00124 -0.01246 +0.00177 -0.01509 +0.00238 -0.01776 +0.00309 -0.02049 +0.00388 -0.02317 +0.00476 -0.02585 +0.00572 -0.02848 +0.00678 -0.03112 +0.00792 -0.03376 +0.00915 -0.03642 +0.01047 -0.03911 +0.01187 -0.04178 +0.01337 -0.04450 +0.01495 -0.04721 +0.01662 -0.04995 +0.01837 -0.05269 +0.02022 -0.05547 +0.02215 -0.05825 +0.02417 -0.06105 +0.02627 -0.06386 +0.02847 -0.06670 +0.03075 -0.06955 +0.03312 -0.07244 +0.03558 -0.07536 +0.03812 -0.07828 +0.04076 -0.08125 +0.04348 -0.08422 +0.04629 -0.08720 +0.04918 -0.09020 +0.05217 -0.09321 +0.05524 -0.09622 +0.05840 -0.09925 +0.06164 -0.10225 +0.06498 -0.10528 +0.06840 -0.10829 +0.07191 -0.11131 +0.07551 -0.11431 +0.07919 -0.11730 +0.08297 -0.12028 +0.08683 -0.12325 +0.09077 -0.12619 +0.09481 -0.12914 +0.09893 -0.13205 +0.10315 -0.13494 +0.10745 -0.13780 +0.11183 -0.14065 +0.11631 -0.14345 +0.12087 -0.14624 +0.12552 -0.14898 +0.13026 -0.15169 +0.13508 -0.15435 +0.13999 -0.15697 +0.14499 -0.15954 +0.15008 -0.16207 +0.15526 -0.16454 +0.16052 -0.16696 +0.16587 -0.16932 +0.17131 -0.17163 +0.17684 -0.17387 +0.18245 -0.17603 +0.18816 -0.17814 +0.19395 -0.18015 +0.19982 -0.18207 +0.20579 -0.18391 +0.21184 -0.18564 +0.21798 -0.18727 +0.22421 -0.18877 +0.23053 -0.19015 +0.23693 -0.19140 +0.24342 -0.19250 +0.25000 -0.19343 +0.25667 -0.19420 +0.26333 -0.19481 +0.27000 -0.19525 +0.27667 -0.19552 +0.28333 -0.19562 +0.29000 -0.19556 +0.29667 -0.19535 +0.30333 -0.19498 +0.31000 -0.19448 +0.31667 -0.19383 +0.32333 -0.19303 +0.33000 -0.19211 +0.33667 -0.19107 +0.34333 -0.18991 +0.35000 -0.18864 +0.35667 -0.18725 +0.36333 -0.18577 +0.37000 -0.18418 +0.37667 -0.18251 +0.38333 -0.18074 +0.39000 -0.17889 +0.39667 -0.17695 +0.40333 -0.17496 +0.41000 -0.17288 +0.41667 -0.17074 +0.42333 -0.16855 +0.43000 -0.16631 +0.43667 -0.16402 +0.44333 -0.16167 +0.45000 -0.15929 +0.45667 -0.15684 +0.46333 -0.15436 +0.47000 -0.15185 +0.47667 -0.14930 +0.48333 -0.14671 +0.49000 -0.14410 +0.49667 -0.14147 +0.50333 -0.13881 +0.51000 -0.13613 +0.51667 -0.13342 +0.52333 -0.13071 +0.53000 -0.12797 +0.53667 -0.12522 +0.54333 -0.12247 +0.55000 -0.11970 +0.55667 -0.11692 +0.56333 -0.11413 +0.57000 -0.11133 +0.57667 -0.10853 +0.58333 -0.10573 +0.59000 -0.10293 +0.59667 -0.10014 +0.60333 -0.09734 +0.61000 -0.09456 +0.61667 -0.09178 +0.62333 -0.08901 +0.63000 -0.08624 +0.63667 -0.08348 +0.64333 -0.08074 +0.65000 -0.07801 +0.65667 -0.07529 +0.66333 -0.07257 +0.67000 -0.06987 +0.67667 -0.06719 +0.68333 -0.06452 +0.69000 -0.06186 +0.69667 -0.05922 +0.70333 -0.05661 +0.71000 -0.05401 +0.71667 -0.05144 +0.72333 -0.04889 +0.73000 -0.04637 +0.73667 -0.04386 +0.74333 -0.04140 +0.75000 -0.03896 +0.75660 -0.03658 +0.76314 -0.03425 +0.76961 -0.03199 +0.77601 -0.02979 +0.78235 -0.02765 +0.78863 -0.02557 +0.79484 -0.02357 +0.80098 -0.02162 +0.80706 -0.01974 +0.81307 -0.01794 +0.81902 -0.01621 +0.82490 -0.01454 +0.83072 -0.01294 +0.83647 -0.01142 +0.84216 -0.00996 +0.84778 -0.00858 +0.85333 -0.00727 +0.85882 -0.00604 +0.86425 -0.00487 +0.86961 -0.00377 +0.87490 -0.00276 +0.88013 -0.00182 +0.88529 -0.00095 +0.89039 -0.00014 +0.89542 0.00061 +0.90039 0.00128 +0.90529 0.00189 +0.91013 0.00243 +0.91490 0.00293 +0.91961 0.00335 +0.92425 0.00370 +0.92882 0.00401 +0.93333 0.00425 +0.93778 0.00441 +0.94216 0.00452 +0.94647 0.00455 +0.95072 0.00451 +0.95490 0.00439 +0.95902 0.00420 +0.96307 0.00394 +0.96706 0.00358 +0.97098 0.00315 +0.97484 0.00264 +0.97863 0.00206 +0.98235 0.00141 +0.98601 0.00069 +0.98961 -0.00011 +0.99314 -0.00097 +0.99660 -0.00190 +1.00000 -0.00283 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17.dat new file mode 100644 index 0000000000..3882d07ad9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17.dat @@ -0,0 +1,190 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU40_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.3519 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3226 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.03 Cd0 ! 2D drag coefficient value at 0-lift. + -0.05 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 136 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0602 0.0000 + -175.00 0.218 0.0699 0.0934 + -170.00 0.397 0.1107 0.1697 + -160.00 0.642 0.3045 0.2813 + -155.00 0.715 0.4179 0.3208 + -150.00 0.757 0.5355 0.3516 + -145.00 0.772 0.6535 0.3752 + -140.00 0.762 0.7685 0.3926 + -135.00 0.731 0.8777 0.4048 + -130.00 0.680 0.9788 0.4126 + -125.00 0.613 1.0700 0.4166 + -120.00 0.532 1.1499 0.4176 + -115.00 0.439 1.2174 0.4158 + -110.00 0.337 1.2716 0.4117 + -105.00 0.228 1.3118 0.4057 + -100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17_coords.txt new file mode 100644 index 0000000000..24e0ec78c9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/DU40_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.33087 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU4050 +! x/c y/c +1.00000 0.00347 +0.99660 0.00455 +0.99314 0.00565 +0.98961 0.00678 +0.98601 0.00795 +0.98235 0.00914 +0.97863 0.01035 +0.97484 0.01158 +0.97098 0.01283 +0.96706 0.01410 +0.96307 0.01539 +0.95902 0.01670 +0.95490 0.01803 +0.95072 0.01937 +0.94647 0.02074 +0.94216 0.02212 +0.93778 0.02352 +0.93333 0.02495 +0.92882 0.02639 +0.92425 0.02786 +0.91961 0.02936 +0.91490 0.03087 +0.91013 0.03242 +0.90529 0.03400 +0.90039 0.03560 +0.89542 0.03723 +0.89039 0.03887 +0.88529 0.04056 +0.88013 0.04226 +0.87490 0.04399 +0.86961 0.04575 +0.86425 0.04754 +0.85882 0.04935 +0.85333 0.05119 +0.84778 0.05305 +0.84216 0.05493 +0.83647 0.05685 +0.83072 0.05878 +0.82490 0.06076 +0.81902 0.06275 +0.81307 0.06476 +0.80706 0.06680 +0.80098 0.06886 +0.79484 0.07094 +0.78863 0.07304 +0.78235 0.07517 +0.77601 0.07730 +0.76961 0.07947 +0.76314 0.08165 +0.75660 0.08386 +0.75000 0.08608 +0.74333 0.08832 +0.73667 0.09056 +0.73000 0.09279 +0.72333 0.09502 +0.71667 0.09724 +0.71000 0.09946 +0.70333 0.10166 +0.69667 0.10386 +0.69000 0.10605 +0.68333 0.10822 +0.67667 0.11040 +0.67000 0.11256 +0.66333 0.11471 +0.65667 0.11685 +0.65000 0.11897 +0.64333 0.12109 +0.63667 0.12318 +0.63000 0.12527 +0.62333 0.12733 +0.61667 0.12938 +0.61000 0.13142 +0.60333 0.13343 +0.59667 0.13543 +0.59000 0.13742 +0.58333 0.13938 +0.57667 0.14131 +0.57000 0.14323 +0.56333 0.14512 +0.55667 0.14698 +0.55000 0.14882 +0.54333 0.15064 +0.53667 0.15242 +0.53000 0.15417 +0.52333 0.15591 +0.51667 0.15759 +0.51000 0.15925 +0.50333 0.16088 +0.49667 0.16246 +0.49000 0.16401 +0.48333 0.16553 +0.47667 0.16701 +0.47000 0.16844 +0.46333 0.16985 +0.45667 0.17120 +0.45000 0.17253 +0.44333 0.17381 +0.43667 0.17504 +0.43000 0.17624 +0.42333 0.17739 +0.41667 0.17849 +0.41000 0.17957 +0.40333 0.18058 +0.39667 0.18154 +0.39000 0.18246 +0.38333 0.18333 +0.37667 0.18415 +0.37000 0.18491 +0.36333 0.18563 +0.35667 0.18629 +0.35000 0.18690 +0.34333 0.18746 +0.33667 0.18797 +0.33000 0.18842 +0.32333 0.18881 +0.31667 0.18914 +0.31000 0.18940 +0.30333 0.18961 +0.29667 0.18973 +0.29000 0.18979 +0.28333 0.18977 +0.27667 0.18968 +0.27000 0.18950 +0.26333 0.18924 +0.25667 0.18890 +0.25000 0.18845 +0.24342 0.18791 +0.23693 0.18729 +0.23053 0.18657 +0.22421 0.18575 +0.21798 0.18487 +0.21184 0.18388 +0.20579 0.18282 +0.19982 0.18167 +0.19395 0.18046 +0.18816 0.17916 +0.18245 0.17778 +0.17684 0.17634 +0.17131 0.17482 +0.16587 0.17323 +0.16052 0.17158 +0.15526 0.16987 +0.15008 0.16809 +0.14499 0.16625 +0.13999 0.16436 +0.13508 0.16240 +0.13026 0.16038 +0.12552 0.15831 +0.12087 0.15619 +0.11631 0.15402 +0.11183 0.15179 +0.10745 0.14953 +0.10315 0.14722 +0.09893 0.14485 +0.09481 0.14243 +0.09077 0.13998 +0.08683 0.13748 +0.08297 0.13493 +0.07919 0.13234 +0.07551 0.12972 +0.07191 0.12705 +0.06840 0.12435 +0.06498 0.12161 +0.06164 0.11884 +0.05840 0.11603 +0.05524 0.11319 +0.05217 0.11031 +0.04918 0.10740 +0.04629 0.10447 +0.04348 0.10150 +0.04076 0.09851 +0.03812 0.09549 +0.03558 0.09246 +0.03312 0.08940 +0.03075 0.08632 +0.02847 0.08324 +0.02627 0.08013 +0.02417 0.07701 +0.02215 0.07387 +0.02022 0.07070 +0.01837 0.06751 +0.01662 0.06433 +0.01495 0.06111 +0.01337 0.05790 +0.01187 0.05468 +0.01047 0.05148 +0.00915 0.04826 +0.00792 0.04505 +0.00678 0.04181 +0.00572 0.03847 +0.00476 0.03502 +0.00388 0.03133 +0.00309 0.02736 +0.00238 0.02318 +0.00177 0.01920 +0.00124 0.01552 +0.00080 0.01217 +0.00044 0.00892 +0.00018 0.00563 +0.00000 0.00000 +0.00018 -0.00567 +0.00044 -0.00905 +0.00080 -0.01247 +0.00124 -0.01591 +0.00177 -0.01956 +0.00238 -0.02333 +0.00309 -0.02716 +0.00388 -0.03085 +0.00476 -0.03442 +0.00572 -0.03783 +0.00678 -0.04120 +0.00792 -0.04453 +0.00915 -0.04785 +0.01047 -0.05117 +0.01187 -0.05447 +0.01337 -0.05781 +0.01495 -0.06113 +0.01662 -0.06446 +0.01837 -0.06775 +0.02022 -0.07107 +0.02215 -0.07437 +0.02417 -0.07766 +0.02627 -0.08092 +0.02847 -0.08421 +0.03075 -0.08748 +0.03312 -0.09076 +0.03558 -0.09406 +0.03812 -0.09733 +0.04076 -0.10064 +0.04348 -0.10392 +0.04629 -0.10720 +0.04918 -0.11047 +0.05217 -0.11374 +0.05524 -0.11698 +0.05840 -0.12023 +0.06164 -0.12344 +0.06498 -0.12665 +0.06840 -0.12982 +0.07191 -0.13299 +0.07551 -0.13612 +0.07919 -0.13922 +0.08297 -0.14230 +0.08683 -0.14535 +0.09077 -0.14835 +0.09481 -0.15135 +0.09893 -0.15429 +0.10315 -0.15720 +0.10745 -0.16006 +0.11183 -0.16289 +0.11631 -0.16567 +0.12087 -0.16842 +0.12552 -0.17111 +0.13026 -0.17376 +0.13508 -0.17635 +0.13999 -0.17890 +0.14499 -0.18137 +0.15008 -0.18380 +0.15526 -0.18616 +0.16052 -0.18847 +0.16587 -0.19070 +0.17131 -0.19287 +0.17684 -0.19496 +0.18245 -0.19698 +0.18816 -0.19894 +0.19395 -0.20080 +0.19982 -0.20257 +0.20579 -0.20425 +0.21184 -0.20584 +0.21798 -0.20733 +0.22421 -0.20870 +0.23053 -0.20996 +0.23693 -0.21110 +0.24342 -0.21210 +0.25000 -0.21297 +0.25667 -0.21370 +0.26333 -0.21429 +0.27000 -0.21472 +0.27667 -0.21501 +0.28333 -0.21515 +0.29000 -0.21516 +0.29667 -0.21502 +0.30333 -0.21476 +0.31000 -0.21437 +0.31667 -0.21384 +0.32333 -0.21320 +0.33000 -0.21243 +0.33667 -0.21155 +0.34333 -0.21057 +0.35000 -0.20948 +0.35667 -0.20827 +0.36333 -0.20697 +0.37000 -0.20556 +0.37667 -0.20407 +0.38333 -0.20248 +0.39000 -0.20081 +0.39667 -0.19904 +0.40333 -0.19720 +0.41000 -0.19527 +0.41667 -0.19327 +0.42333 -0.19119 +0.43000 -0.18905 +0.43667 -0.18683 +0.44333 -0.18454 +0.45000 -0.18219 +0.45667 -0.17976 +0.46333 -0.17727 +0.47000 -0.17473 +0.47667 -0.17212 +0.48333 -0.16945 +0.49000 -0.16673 +0.49667 -0.16397 +0.50333 -0.16115 +0.51000 -0.15828 +0.51667 -0.15537 +0.52333 -0.15242 +0.53000 -0.14942 +0.53667 -0.14639 +0.54333 -0.14333 +0.55000 -0.14024 +0.55667 -0.13713 +0.56333 -0.13399 +0.57000 -0.13083 +0.57667 -0.12765 +0.58333 -0.12446 +0.59000 -0.12125 +0.59667 -0.11804 +0.60333 -0.11482 +0.61000 -0.11160 +0.61667 -0.10838 +0.62333 -0.10515 +0.63000 -0.10192 +0.63667 -0.09870 +0.64333 -0.09549 +0.65000 -0.09228 +0.65667 -0.08909 +0.66333 -0.08590 +0.67000 -0.08274 +0.67667 -0.07958 +0.68333 -0.07645 +0.69000 -0.07333 +0.69667 -0.07024 +0.70333 -0.06717 +0.71000 -0.06413 +0.71667 -0.06112 +0.72333 -0.05814 +0.73000 -0.05519 +0.73667 -0.05228 +0.74333 -0.04941 +0.75000 -0.04658 +0.75660 -0.04382 +0.76314 -0.04114 +0.76961 -0.03853 +0.77601 -0.03600 +0.78235 -0.03354 +0.78863 -0.03116 +0.79484 -0.02887 +0.80098 -0.02665 +0.80706 -0.02452 +0.81307 -0.02247 +0.81902 -0.02050 +0.82490 -0.01862 +0.83072 -0.01681 +0.83647 -0.01510 +0.84216 -0.01346 +0.84778 -0.01191 +0.85333 -0.01045 +0.85882 -0.00907 +0.86425 -0.00776 +0.86961 -0.00653 +0.87490 -0.00539 +0.88013 -0.00434 +0.88529 -0.00335 +0.89039 -0.00245 +0.89542 -0.00160 +0.90039 -0.00085 +0.90529 -0.00015 +0.91013 0.00046 +0.91490 0.00103 +0.91961 0.00151 +0.92425 0.00193 +0.92882 0.00229 +0.93333 0.00258 +0.93778 0.00279 +0.94216 0.00295 +0.94647 0.00303 +0.95072 0.00303 +0.95490 0.00296 +0.95902 0.00282 +0.96307 0.00261 +0.96706 0.00232 +0.97098 0.00194 +0.97484 0.00149 +0.97863 0.00098 +0.98235 0.00040 +0.98601 -0.00025 +0.98961 -0.00097 +0.99314 -0.00176 +0.99660 -0.00261 +1.00000 -0.00347 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17.dat new file mode 100644 index 0000000000..68cff47cc6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17.dat @@ -0,0 +1,181 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA64_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.432 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4073 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.7945 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.0065 Cd0 ! 2D drag coefficient value at 0-lift. + -0.088 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"Default" x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"Default" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 127 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0198 0.0000 + -175.00 0.374 0.0341 0.1880 + -170.00 0.749 0.0955 0.3770 + -160.00 0.659 0.2807 0.2747 + -155.00 0.736 0.3919 0.3130 + -150.00 0.783 0.5086 0.3428 + -145.00 0.803 0.6267 0.3654 + -140.00 0.798 0.7427 0.3820 + -135.00 0.771 0.8537 0.3935 + -130.00 0.724 0.9574 0.4007 + -125.00 0.660 1.0519 0.4042 + -120.00 0.581 1.1355 0.4047 + -115.00 0.491 1.2070 0.4025 + -110.00 0.390 1.2656 0.3981 + -105.00 0.282 1.3104 0.3918 + -100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17_coords.txt new file mode 100644 index 0000000000..aa31ac26b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Airfoils/NACA64_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! NACA 64-618 (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.990000 0.003385 +0.980000 0.006126 +0.975000 0.007447 +0.970000 0.008767 +0.965000 0.010062 +0.960000 0.011357 +0.955000 0.012639 +0.950000 0.013921 +0.945000 0.015200 +0.940000 0.016478 +0.935000 0.017757 +0.930000 0.019036 +0.925000 0.020317 +0.920000 0.021598 +0.915000 0.022881 +0.910000 0.024163 +0.905000 0.025448 +0.900000 0.026733 +0.887500 0.029951 +0.875000 0.033169 +0.862500 0.036386 +0.850000 0.039603 +0.837500 0.042804 +0.825000 0.046004 +0.812500 0.049171 +0.800000 0.052337 +0.787500 0.055452 +0.775000 0.058566 +0.762500 0.061611 +0.750000 0.064656 +0.737500 0.067615 +0.725000 0.070573 +0.712500 0.073429 +0.700000 0.076285 +0.687500 0.079029 +0.675000 0.081773 +0.662500 0.084393 +0.650000 0.087012 +0.637500 0.089490 +0.625000 0.091967 +0.612500 0.094283 +0.600000 0.096599 +0.587500 0.098743 +0.575000 0.100887 +0.562500 0.102843 +0.550000 0.104799 +0.537500 0.106549 +0.525000 0.108299 +0.512500 0.109830 +0.500000 0.111360 +0.487500 0.112649 +0.475000 0.113937 +0.462500 0.114964 +0.450000 0.115990 +0.445000 0.116320 +0.440000 0.116650 +0.435000 0.116931 +0.430000 0.117211 +0.425000 0.117439 +0.420000 0.117667 +0.415000 0.117835 +0.410000 0.118003 +0.405000 0.118104 +0.400000 0.118204 +0.395000 0.118231 +0.390000 0.118258 +0.385000 0.118213 +0.380000 0.118168 +0.375000 0.118057 +0.370000 0.117946 +0.365000 0.117777 +0.360000 0.117607 +0.355000 0.117383 +0.350000 0.117159 +0.345000 0.116881 +0.340000 0.116603 +0.335000 0.116273 +0.330000 0.115942 +0.325000 0.115562 +0.320000 0.115181 +0.315000 0.114750 +0.310000 0.114319 +0.305000 0.113838 +0.300000 0.113356 +0.295000 0.112824 +0.290000 0.112292 +0.285000 0.111710 +0.280000 0.111127 +0.275000 0.110495 +0.270000 0.109863 +0.265000 0.109180 +0.260000 0.108497 +0.255000 0.107762 +0.250000 0.107027 +0.245000 0.106241 +0.240000 0.105454 +0.235000 0.104614 +0.230000 0.103774 +0.225000 0.102880 +0.220000 0.101985 +0.215000 0.101035 +0.210000 0.100084 +0.205000 0.099076 +0.200000 0.098068 +0.195000 0.097001 +0.190000 0.095934 +0.185000 0.094805 +0.180000 0.093676 +0.175000 0.092484 +0.170000 0.091291 +0.165000 0.090032 +0.160000 0.088772 +0.155000 0.087441 +0.150000 0.086110 +0.145000 0.084704 +0.140000 0.083298 +0.135000 0.081814 +0.130000 0.080329 +0.125000 0.078759 +0.120000 0.077188 +0.115000 0.075525 +0.110000 0.073862 +0.105000 0.072098 +0.100000 0.070334 +0.097500 0.069412 +0.095000 0.068489 +0.092500 0.067537 +0.090000 0.066584 +0.087500 0.065601 +0.085000 0.064617 +0.082500 0.063600 +0.080000 0.062583 +0.077500 0.061531 +0.075000 0.060478 +0.072500 0.059388 +0.070000 0.058297 +0.067500 0.057165 +0.065000 0.056032 +0.062500 0.054854 +0.060000 0.053676 +0.057500 0.052447 +0.055000 0.051218 +0.052500 0.049933 +0.050000 0.048647 +0.047500 0.047299 +0.045000 0.045950 +0.042500 0.044530 +0.040000 0.043110 +0.037500 0.041606 +0.035000 0.040102 +0.032500 0.038501 +0.030000 0.036899 +0.027500 0.035177 +0.025000 0.033454 +0.022500 0.031574 +0.020000 0.029694 +0.018750 0.028680 +0.017500 0.027666 +0.016250 0.026589 +0.015000 0.025511 +0.013750 0.024354 +0.012500 0.023197 +0.011250 0.021936 +0.010000 0.020674 +0.009500 0.020131 +0.009000 0.019587 +0.008500 0.019017 +0.008000 0.018447 +0.007500 0.017844 +0.007000 0.017241 +0.006500 0.016598 +0.006000 0.015955 +0.005500 0.015260 +0.005000 0.014565 +0.004500 0.013801 +0.004000 0.013037 +0.003500 0.012167 +0.003000 0.011296 +0.002500 0.010262 +0.002000 0.009227 +0.001875 0.008930 +0.001750 0.008633 +0.001625 0.008315 +0.001500 0.007997 +0.001375 0.007655 +0.001250 0.007312 +0.001125 0.006934 +0.001000 0.006555 +0.000875 0.006125 +0.000750 0.005695 +0.000625 0.005184 +0.000500 0.004672 +0.000400 0.004190 +0.000350 0.003913 +0.000300 0.003636 +0.000200 0.002970 +0.000100 0.002104 +0.000050 0.001052 +0.000000 0.000000 +0.000050 -0.001046 +0.000100 -0.002092 +0.000200 -0.002954 +0.000300 -0.003613 +0.000350 -0.003891 +0.000400 -0.004169 +0.000500 -0.004658 +0.000625 -0.005178 +0.000750 -0.005698 +0.000875 -0.006135 +0.001000 -0.006572 +0.001125 -0.006956 +0.001250 -0.007340 +0.001375 -0.007684 +0.001500 -0.008027 +0.001625 -0.008341 +0.001750 -0.008654 +0.001875 -0.008943 +0.002000 -0.009231 +0.002500 -0.010204 +0.003000 -0.011176 +0.003500 -0.011953 +0.004000 -0.012729 +0.004500 -0.013380 +0.005000 -0.014030 +0.005500 -0.014595 +0.006000 -0.015160 +0.006500 -0.015667 +0.007000 -0.016174 +0.007500 -0.016636 +0.008000 -0.017098 +0.008500 -0.017526 +0.009000 -0.017953 +0.009500 -0.018352 +0.010000 -0.018750 +0.011250 -0.019644 +0.012500 -0.020537 +0.013750 -0.021322 +0.015000 -0.022107 +0.016250 -0.022812 +0.017500 -0.023517 +0.018750 -0.024160 +0.020000 -0.024803 +0.022500 -0.025948 +0.025000 -0.027092 +0.027500 -0.028097 +0.030000 -0.029102 +0.032500 -0.030003 +0.035000 -0.030904 +0.037500 -0.031725 +0.040000 -0.032546 +0.042500 -0.033304 +0.045000 -0.034061 +0.047500 -0.034767 +0.050000 -0.035472 +0.052500 -0.036132 +0.055000 -0.036792 +0.057500 -0.037414 +0.060000 -0.038035 +0.062500 -0.038622 +0.065000 -0.039209 +0.067500 -0.039766 +0.070000 -0.040322 +0.072500 -0.040852 +0.075000 -0.041381 +0.077500 -0.041885 +0.080000 -0.042389 +0.082500 -0.042870 +0.085000 -0.043350 +0.087500 -0.043809 +0.090000 -0.044268 +0.092500 -0.044707 +0.095000 -0.045145 +0.097500 -0.045566 +0.100000 -0.045987 +0.105000 -0.046782 +0.110000 -0.047576 +0.115000 -0.048313 +0.120000 -0.049050 +0.125000 -0.049734 +0.130000 -0.050417 +0.135000 -0.051053 +0.140000 -0.051688 +0.145000 -0.052278 +0.150000 -0.052868 +0.155000 -0.053418 +0.160000 -0.053967 +0.165000 -0.054478 +0.170000 -0.054988 +0.175000 -0.055461 +0.180000 -0.055934 +0.185000 -0.056373 +0.190000 -0.056811 +0.195000 -0.057216 +0.200000 -0.057621 +0.205000 -0.057993 +0.210000 -0.058365 +0.215000 -0.058705 +0.220000 -0.059045 +0.225000 -0.059355 +0.230000 -0.059664 +0.235000 -0.059944 +0.240000 -0.060224 +0.245000 -0.060474 +0.250000 -0.060723 +0.255000 -0.060943 +0.260000 -0.061163 +0.265000 -0.061354 +0.270000 -0.061545 +0.275000 -0.061708 +0.280000 -0.061871 +0.285000 -0.062004 +0.290000 -0.062137 +0.295000 -0.062240 +0.300000 -0.062343 +0.305000 -0.062417 +0.310000 -0.062490 +0.315000 -0.062534 +0.320000 -0.062577 +0.325000 -0.062590 +0.330000 -0.062602 +0.335000 -0.062583 +0.340000 -0.062563 +0.345000 -0.062512 +0.350000 -0.062460 +0.355000 -0.062374 +0.360000 -0.062287 +0.365000 -0.062164 +0.370000 -0.062040 +0.375000 -0.061878 +0.380000 -0.061716 +0.385000 -0.061509 +0.390000 -0.061301 +0.395000 -0.061040 +0.400000 -0.060778 +0.405000 -0.060458 +0.410000 -0.060138 +0.415000 -0.059763 +0.420000 -0.059388 +0.425000 -0.058966 +0.430000 -0.058544 +0.435000 -0.058083 +0.440000 -0.057622 +0.445000 -0.057127 +0.450000 -0.056632 +0.462500 -0.055265 +0.475000 -0.053897 +0.487500 -0.052374 +0.500000 -0.050850 +0.512500 -0.049195 +0.525000 -0.047539 +0.537500 -0.045777 +0.550000 -0.044014 +0.562500 -0.042165 +0.575000 -0.040316 +0.587500 -0.038401 +0.600000 -0.036486 +0.612500 -0.034526 +0.625000 -0.032565 +0.637500 -0.030575 +0.650000 -0.028585 +0.662500 -0.026594 +0.675000 -0.024603 +0.687500 -0.022632 +0.700000 -0.020660 +0.712500 -0.018728 +0.725000 -0.016795 +0.737500 -0.014922 +0.750000 -0.013048 +0.762500 -0.011260 +0.775000 -0.009472 +0.787500 -0.007797 +0.800000 -0.006122 +0.812500 -0.004594 +0.825000 -0.003065 +0.837500 -0.001721 +0.850000 -0.000376 +0.862500 0.000742 +0.875000 0.001859 +0.887500 0.002698 +0.900000 0.003536 +0.905000 0.003780 +0.910000 0.004023 +0.915000 0.004205 +0.920000 0.004387 +0.925000 0.004504 +0.930000 0.004620 +0.935000 0.004661 +0.940000 0.004702 +0.945000 0.004658 +0.950000 0.004614 +0.955000 0.004476 +0.960000 0.004338 +0.965000 0.004084 +0.970000 0.003829 +0.975000 0.003436 +0.980000 0.003042 +0.990000 0.001910 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/Cp_Ct_Cq.NREL5MW.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Cp_Ct_Cq.NREL5MW.txt new file mode 100644 index 0000000000..4324d3bbac --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/Cp_Ct_Cq.NREL5MW.txt @@ -0,0 +1,99 @@ +# ----- Rotor performance tables for the NREL-5MW wind turbine ----- +# ------------ Written on Jan-13-22 using the ROSCO toolbox ------------ + +# Pitch angle vector, 36 entries - x axis (matrix columns) (deg) +-5.0 -4.0 -3.0 -2.0 -1.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 +# TSR vector, 26 entries - y axis (matrix rows) (-) +2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 +# Wind speed vector - z axis (m/s) +11.4 + +# Power coefficient + +0.006673 0.009813 0.013077 0.016508 0.020122 0.023918 0.027887 0.032006 0.036239 0.040540 0.044858 0.049138 0.053326 0.057366 0.061205 0.064796 0.068092 0.071051 0.073631 0.075796 0.077520 0.078793 0.079607 0.079960 0.079851 0.079303 0.078341 0.076993 0.075269 0.073154 0.070619 0.067607 0.064059 0.059976 0.055381 0.050328 +0.020093 0.026879 0.033876 0.041034 0.048264 0.055472 0.062560 0.069438 0.076024 0.082246 0.088041 0.093349 0.098111 0.102262 0.105746 0.108521 0.110563 0.111865 0.112435 0.112304 0.111503 0.110082 0.108043 0.105376 0.102031 0.097898 0.092907 0.087092 0.080496 0.073183 0.065206 0.056618 0.047499 0.037976 0.028144 0.018084 +0.048757 0.059921 0.070879 0.081507 0.091686 0.101314 0.110305 0.118583 0.126073 0.132692 0.138350 0.142964 0.146489 0.148944 0.150362 0.150761 0.150158 0.148560 0.145993 0.142397 0.137607 0.131540 0.124241 0.115747 0.106162 0.095542 0.084011 0.071754 0.058916 0.045611 0.031929 0.017939 0.003701 -0.010721 -0.025259 -0.039848 +0.090123 0.104877 0.118836 0.131894 0.143960 0.154953 0.164780 0.173312 0.180438 0.186134 0.190421 0.193294 0.194678 0.194534 0.192872 0.189595 0.184490 0.177562 0.168848 0.158486 0.146540 0.133154 0.118581 0.103012 0.086606 0.069499 0.051807 0.033628 0.015033 -0.003935 -0.023212 -0.042681 -0.062203 -0.081676 -0.101014 -0.120137 +0.139124 0.156683 0.172901 0.187702 0.200999 0.212709 0.222753 0.231064 0.237530 0.241950 0.244105 0.243810 0.240834 0.235185 0.226970 0.216406 0.203596 0.188826 0.172423 0.154596 0.135473 0.115192 0.093900 0.071756 0.048901 0.025448 0.001458 -0.023067 -0.048079 -0.073394 -0.098747 -0.123894 -0.148637 -0.172971 -0.196999 -0.220426 +0.191782 0.211839 0.230276 0.247076 0.262109 0.275108 0.285675 0.293225 0.297120 0.296898 0.292698 0.284905 0.273940 0.260137 0.243968 0.225765 0.205747 0.184044 0.160751 0.135955 0.109826 0.082563 0.054349 0.025323 -0.004446 -0.034984 -0.066317 -0.098275 -0.130442 -0.162296 -0.193412 -0.223707 -0.253665 -0.283545 -0.312671 -0.340141 +0.246353 0.270341 0.292682 0.312827 0.329812 0.342452 0.349588 0.350796 0.346468 0.337517 0.324917 0.309376 0.291272 0.270832 0.248190 0.223439 0.196656 0.167952 0.137415 0.105259 0.071726 0.037018 0.001262 -0.035533 -0.073456 -0.112507 -0.152329 -0.192145 -0.231094 -0.268667 -0.305110 -0.341553 -0.378474 -0.414899 -0.449086 -0.478908 +0.306243 0.335683 0.361286 0.381426 0.394666 0.400011 0.397807 0.389766 0.377676 0.362345 0.344063 0.323009 0.299287 0.272921 0.243930 0.212388 0.178407 0.142107 0.103741 0.063607 0.021945 -0.021117 -0.065611 -0.111678 -0.159287 -0.207873 -0.256248 -0.303158 -0.347971 -0.391262 -0.434965 -0.480253 -0.525739 -0.568955 -0.606708 -0.638532 +0.368062 0.397982 0.420678 0.434161 0.438041 0.434596 0.426094 0.413722 0.397833 0.378568 0.356023 0.330207 0.301063 0.268542 0.232706 0.193700 0.151740 0.107083 0.060108 0.011125 -0.039710 -0.092454 -0.147289 -0.204180 -0.262421 -0.320480 -0.376558 -0.429701 -0.480649 -0.532192 -0.586717 -0.643176 -0.698195 -0.746783 -0.788014 -0.825218 +0.413915 0.437699 0.451902 0.458070 0.457967 0.452866 0.443478 0.429833 0.411921 0.389793 0.363427 0.332762 0.297737 0.258384 0.214897 0.167596 0.116800 0.062939 0.006435 -0.052490 -0.113873 -0.177938 -0.244676 -0.313397 -0.382360 -0.449143 -0.512100 -0.571792 -0.631581 -0.695509 -0.764242 -0.833635 -0.896797 -0.950560 -0.998368 -1.044827 +0.427324 0.444280 0.455448 0.462056 0.464498 0.462253 0.454597 0.441298 0.422256 0.397517 0.367139 0.331124 0.289519 0.242518 0.190536 0.134077 0.073568 0.009566 -0.057573 -0.127803 -0.201376 -0.278345 -0.358171 -0.439117 -0.518328 -0.593032 -0.663068 -0.731776 -0.804602 -0.885395 -0.971040 -1.052725 -1.123154 -1.184540 -1.242706 -1.302084 +0.413889 0.430080 0.443986 0.455667 0.463490 0.465861 0.461379 0.449315 0.429515 0.402103 0.367325 0.325347 0.276400 0.220931 0.159637 0.093102 0.021935 -0.053297 -0.132381 -0.215535 -0.302917 -0.394172 -0.487834 -0.580989 -0.669719 -0.752399 -0.831452 -0.912845 -1.003839 -1.105589 -1.208911 -1.301214 -1.380509 -1.453087 -1.525242 -1.600224 +0.390738 0.409602 0.427384 0.443933 0.457445 0.465005 0.464411 0.454181 0.433864 0.403639 0.364016 0.315425 0.258360 0.193623 0.122136 0.044567 -0.038313 -0.126023 -0.218606 -0.316340 -0.419059 -0.525699 -0.633667 -0.738622 -0.836834 -0.928785 -1.019688 -1.118620 -1.233318 -1.358741 -1.478110 -1.581346 -1.672639 -1.759983 -1.849169 -1.941926 +0.363054 0.386720 0.409228 0.429996 0.447852 0.460425 0.463989 0.456010 0.435373 0.402165 0.357222 0.301344 0.235402 0.160566 0.077923 -0.011703 -0.107479 -0.209107 -0.316861 -0.430808 -0.550233 -0.673151 -0.795604 -0.912315 -1.020857 -1.123956 -1.230487 -1.353172 -1.496497 -1.645302 -1.779751 -1.896314 -2.002958 -2.108318 -2.217267 -2.330606 +0.332023 0.361556 0.389367 0.414649 0.436246 0.452807 0.460431 0.454894 0.434075 0.397696 0.346937 0.283092 0.207494 0.121668 0.026850 -0.075950 -0.185943 -0.303110 -0.427726 -0.559435 -0.696810 -0.836734 -0.973950 -1.103096 -1.222996 -1.339770 -1.467400 -1.620400 -1.794614 -1.965735 -2.116279 -2.249130 -2.374431 -2.500966 -2.632648 -2.770283 +0.297995 0.333854 0.367528 0.397656 0.423215 0.442899 0.454053 0.450936 0.429986 0.390235 0.333142 0.260640 0.174562 0.076794 -0.031277 -0.148468 -0.274167 -0.408575 -0.551737 -0.702675 -0.859149 -1.016871 -1.169580 -1.311915 -1.444423 -1.578792 -1.734397 -1.922541 -2.128205 -2.321411 -2.490350 -2.642587 -2.789846 -2.940844 -3.098986 -3.264660 +0.261597 0.303619 0.343502 0.378889 0.408674 0.431280 0.445167 0.444233 0.423112 0.379761 0.315806 0.233927 0.136491 0.025768 -0.096686 -0.229613 -0.372646 -0.526034 -0.689370 -0.860978 -1.037730 -1.214335 -1.383513 -1.539437 -1.686737 -1.844401 -2.034203 -2.260837 -2.498120 -2.714447 -2.904511 -3.079332 -3.251981 -3.431224 -3.619857 -3.816817 +0.223751 0.271311 0.317227 0.358217 0.392491 0.418111 0.434088 0.434927 0.413446 0.366239 0.294883 0.202866 0.093151 -0.031589 -0.169648 -0.319787 -0.481868 -0.655988 -0.841105 -1.034831 -1.233270 -1.430180 -1.616348 -1.786462 -1.952417 -2.139500 -2.368690 -2.636225 -2.905702 -3.147086 -3.361213 -3.561934 -3.763787 -3.975522 -4.198409 -4.429489 +0.185578 0.237532 0.288993 0.335546 0.374551 0.403289 0.421002 0.423063 0.400961 0.349628 0.270309 0.167352 0.044405 -0.095487 -0.250473 -0.419415 -0.602317 -0.798913 -1.007440 -1.224860 -1.446724 -1.665242 -1.868434 -2.054428 -2.244050 -2.466255 -2.739406 -3.049892 -3.352672 -3.621561 -3.862815 -4.093010 -4.328409 -4.576896 -4.837351 -5.105458 +0.147095 0.203239 0.259075 0.310894 0.354752 0.386719 0.405978 0.408744 0.385629 0.329881 0.242007 0.127271 -0.009910 -0.166158 -0.339498 -0.528928 -0.734472 -0.955298 -1.188911 -1.431845 -1.679152 -1.920015 -2.140330 -2.345296 -2.563821 -2.826409 -3.147779 -3.503220 -3.840906 -4.140058 -4.411660 -4.675361 -4.948974 -5.238172 -5.539321 -5.847566 +0.109921 0.168465 0.228283 0.284493 0.333003 0.368316 0.389001 0.392004 0.367452 0.306944 0.209888 0.082498 -0.069969 -0.243863 -0.437077 -0.648769 -0.878808 -1.125646 -1.386141 -1.656724 -1.931386 -2.194733 -2.433122 -2.661010 -2.913585 -3.221522 -3.595200 -3.997663 -4.372318 -4.704715 -5.010142 -5.311913 -5.628384 -5.961897 -6.307013 -6.658699 +0.075556 0.133907 0.196815 0.256499 0.309270 0.347981 0.370019 0.372880 0.346417 0.280755 0.173858 0.032901 -0.135979 -0.328881 -0.543585 -0.779386 -1.035790 -1.310469 -1.599847 -1.900506 -2.203972 -2.489774 -2.748220 -3.003362 -3.294941 -3.653136 -4.083147 -4.534716 -4.948847 -5.317645 -5.660775 -6.005570 -6.369299 -6.750614 -7.143160 -7.541782 +0.045437 0.101086 0.164731 0.227521 0.283675 0.325613 0.348964 0.351362 0.322521 0.251245 0.133815 -0.021672 -0.208162 -0.421508 -0.659413 -0.921225 -1.205892 -1.510319 -1.830843 -2.164074 -2.497172 -2.805822 -3.087060 -3.374013 -3.709339 -4.122787 -4.613131 -5.115993 -5.572447 -5.980987 -6.366170 -6.759084 -7.174174 -7.606904 -8.050518 -8.499762 +0.020095 0.070625 0.132961 0.197686 0.256313 0.301131 0.325760 0.327415 0.295744 0.218342 0.089649 -0.081378 -0.286748 -0.522056 -0.784958 -1.074719 -1.389587 -1.725804 -2.080005 -2.448103 -2.811255 -3.143907 -3.451088 -3.774480 -4.158169 -4.632027 -5.186626 -5.743189 -6.245055 -6.696930 -7.128978 -7.575043 -8.045426 -8.533374 -9.031865 -9.535604 +-0.001687 0.043909 0.102330 0.166837 0.227413 0.274487 0.300332 0.301010 0.266040 0.181968 0.041242 -0.146395 -0.371984 -0.630855 -0.920613 -1.240294 -1.587356 -1.957580 -2.348192 -2.753074 -3.146694 -3.505110 -3.841738 -4.206100 -4.642786 -5.182427 -5.805056 -6.418029 -6.968601 -7.467747 -7.951835 -8.455876 -8.985506 -9.532652 -10.089996 -10.652280 +-0.020991 0.020364 0.073330 0.135754 0.197326 0.245733 0.272607 0.272110 0.233378 0.142039 -0.011538 -0.216915 -0.464126 -0.748233 -1.066769 -1.418378 -1.799699 -2.206350 -2.636179 -3.079288 -3.504186 -3.890511 -4.260392 -4.670103 -5.164549 -5.775547 -6.469853 -7.142266 -7.745026 -8.295764 -8.837283 -9.403900 -9.996885 -10.607377 -11.227722 -11.852766 + + +# Thrust coefficient + +0.128717 0.128402 0.127976 0.127677 0.127561 0.127629 0.127867 0.128247 0.128729 0.129258 0.129777 0.130225 0.130542 0.130673 0.130570 0.130193 0.129510 0.128500 0.127155 0.125472 0.123467 0.121169 0.118605 0.115809 0.112801 0.109598 0.106205 0.102605 0.098769 0.094663 0.090253 0.085471 0.080247 0.074585 0.068519 0.062126 +0.168397 0.169715 0.171083 0.172538 0.173986 0.175323 0.176451 0.177284 0.177754 0.177804 0.177391 0.176487 0.175078 0.173164 0.170771 0.167935 0.164700 0.161125 0.157265 0.153157 0.148796 0.144149 0.139139 0.133696 0.127741 0.121140 0.113810 0.105805 0.097197 0.088074 0.078501 0.068532 0.058230 0.047709 0.037053 0.026331 +0.226643 0.229393 0.231723 0.233550 0.234756 0.235255 0.234993 0.233948 0.232126 0.229565 0.226326 0.222484 0.218143 0.213440 0.208473 0.203249 0.197693 0.191672 0.185067 0.177711 0.169360 0.159907 0.149434 0.138024 0.125825 0.112914 0.099398 0.085443 0.071172 0.056685 0.042068 0.027389 0.012700 -0.001958 -0.016522 -0.030881 +0.299075 0.301289 0.302422 0.302406 0.301210 0.298869 0.295464 0.291107 0.285985 0.280362 0.274473 0.268391 0.262007 0.255130 0.247532 0.238852 0.228637 0.216830 0.203516 0.188917 0.173159 0.156385 0.138854 0.120751 0.102214 0.083356 0.064271 0.045044 0.025754 0.006460 -0.012785 -0.031903 -0.050766 -0.069197 -0.086927 -0.103550 +0.379238 0.378835 0.376828 0.373306 0.368432 0.362520 0.355993 0.349221 0.342334 0.335182 0.327457 0.318711 0.308189 0.295450 0.280436 0.263431 0.244639 0.224405 0.203103 0.180973 0.158152 0.134784 0.110984 0.086862 0.062520 0.038061 0.013566 -0.010909 -0.035298 -0.059484 -0.083286 -0.106436 -0.128554 -0.149119 -0.167467 -0.182809 +0.462045 0.457610 0.451683 0.444801 0.437544 0.430278 0.422940 0.415089 0.406018 0.394702 0.380509 0.363246 0.343190 0.320701 0.296376 0.270674 0.243937 0.216365 0.188092 0.159188 0.129783 0.100004 0.069970 0.039795 0.009565 -0.020663 -0.050818 -0.080761 -0.110260 -0.138960 -0.166409 -0.192073 -0.215232 -0.234926 -0.250010 -0.259496 +0.545296 0.537969 0.530603 0.523523 0.516328 0.508094 0.497562 0.483752 0.466005 0.444344 0.419336 0.391808 0.362349 0.331374 0.299182 0.266026 0.232071 0.197454 0.162213 0.126478 0.090382 0.054055 0.017608 -0.018892 -0.055386 -0.091750 -0.127731 -0.162918 -0.196784 -0.228774 -0.258236 -0.284215 -0.305420 -0.320331 -0.327933 -0.328268 +0.634417 0.627969 0.621264 0.612780 0.601387 0.585824 0.565236 0.539859 0.510799 0.478901 0.444769 0.408839 0.371429 0.332767 0.293070 0.252557 0.211368 0.169524 0.127130 0.084335 0.041284 -0.001917 -0.045208 -0.088516 -0.131639 -0.174175 -0.215526 -0.255049 -0.292101 -0.325924 -0.355354 -0.378817 -0.394523 -0.401294 -0.399320 -0.390574 +0.735578 0.726839 0.715209 0.698962 0.676693 0.649128 0.617406 0.582286 0.544379 0.504195 0.462125 0.418443 0.373358 0.327062 0.279804 0.231775 0.183064 0.133686 0.083811 0.033605 -0.016820 -0.067406 -0.118066 -0.168514 -0.218193 -0.266339 -0.312201 -0.355042 -0.394026 -0.427876 -0.454896 -0.473018 -0.480617 -0.477721 -0.466483 -0.450923 +0.836616 0.819394 0.796306 0.768163 0.735696 0.699319 0.659490 0.616641 0.571164 0.523450 0.473790 0.422421 0.369559 0.315437 0.260360 0.204512 0.147873 0.090579 0.032826 -0.025256 -0.083602 -0.142121 -0.200467 -0.257947 -0.313640 -0.366661 -0.416171 -0.461284 -0.500752 -0.532889 -0.555398 -0.565981 -0.564006 -0.551394 -0.532762 -0.512992 +0.923379 0.893210 0.859907 0.823650 0.784285 0.741493 0.695217 0.645715 0.593258 0.538206 0.480917 0.421690 0.360798 0.298558 0.235326 0.171229 0.106253 0.040624 -0.025491 -0.092007 -0.158843 -0.225631 -0.291594 -0.355648 -0.416743 -0.473917 -0.526240 -0.572594 -0.611418 -0.640346 -0.656398 -0.657833 -0.645755 -0.624799 -0.601049 -0.579120 +0.993425 0.954344 0.913695 0.871240 0.826266 0.778188 0.726411 0.670805 0.611601 0.549205 0.484132 0.416794 0.347553 0.276858 0.205091 0.132281 0.058537 -0.015913 -0.090942 -0.166478 -0.242184 -0.317269 -0.390504 -0.460636 -0.526540 -0.587232 -0.641708 -0.688659 -0.725848 -0.749926 -0.757799 -0.749140 -0.727679 -0.700204 -0.673221 -0.650161 +1.058549 1.011415 0.963227 0.914208 0.863809 0.810735 0.753864 0.692505 0.626704 0.556910 0.483849 0.408103 0.330166 0.250636 0.169909 0.087938 0.004949 -0.078857 -0.163388 -0.248386 -0.333115 -0.416283 -0.496411 -0.572141 -0.642397 -0.706208 -0.762552 -0.809541 -0.843850 -0.861381 -0.859866 -0.841099 -0.811461 -0.779163 -0.750163 -0.726138 +1.122305 1.067207 1.011341 0.955082 0.898284 0.839959 0.778078 0.711195 0.638918 0.561654 0.480375 0.395899 0.308904 0.220154 0.129994 0.038399 -0.054349 -0.148080 -0.242618 -0.337354 -0.431053 -0.522046 -0.608688 -0.689695 -0.764072 -0.830961 -0.888968 -0.935169 -0.965155 -0.974811 -0.963246 -0.934896 -0.898382 -0.862536 -0.832084 -0.807326 +1.185738 1.122582 1.058847 0.995008 0.931027 0.866582 0.799502 0.727171 0.648509 0.563696 0.473951 0.380407 0.283976 0.185599 0.085524 -0.016186 -0.119230 -0.223433 -0.328360 -0.432958 -0.535499 -0.634048 -0.726965 -0.813132 -0.891721 -0.961752 -1.021004 -1.065338 -1.089724 -1.090502 -1.068696 -1.031466 -0.989260 -0.950738 -0.919159 -0.894322 +1.248868 1.177878 1.106090 1.034308 0.962814 0.891330 0.818549 0.740704 0.655695 0.563246 0.464772 0.361803 0.255555 0.147124 0.036641 -0.075690 -0.189578 -0.304724 -0.420330 -0.534810 -0.646043 -0.751962 -0.851114 -0.942592 -1.025625 -1.098723 -1.158523 -1.199963 -1.217675 -1.208810 -1.176857 -1.131525 -1.084562 -1.043982 -1.011881 -0.987449 +1.310753 1.232966 1.153240 1.073234 0.993908 0.914846 0.835616 0.752042 0.660663 0.560476 0.452996 0.340238 0.223775 0.104835 -0.016537 -0.140014 -0.265270 -0.391766 -0.518236 -0.642586 -0.762395 -0.875671 -0.981224 -1.078327 -1.165991 -1.241827 -1.301438 -1.339064 -1.349133 -1.330112 -1.288253 -1.235555 -1.184617 -1.142625 -1.110627 -1.086622 +1.370202 1.287113 1.200281 1.111936 1.024461 0.937489 0.851104 0.761450 0.663572 0.555529 0.438759 0.315838 0.188759 0.058841 -0.073915 -0.209068 -0.346176 -0.484368 -0.621832 -0.756036 -0.884420 -1.005217 -1.117496 -1.220568 -1.312850 -1.390993 -1.449734 -1.482671 -1.484225 -1.454750 -1.403285 -1.343886 -1.289747 -1.247079 -1.215478 -1.191550 +1.425945 1.339521 1.246699 1.150493 1.054590 0.959390 0.865327 0.769108 0.664559 0.548527 0.422175 0.288713 0.150621 0.009228 -0.135421 -0.282763 -0.432177 -0.582348 -0.730921 -0.875019 -1.012114 -1.140727 -1.260146 -1.369430 -1.466168 -1.546178 -1.603417 -1.630806 -1.623105 -1.583019 -1.522246 -1.456812 -1.400325 -1.357559 -1.326244 -1.302016 +1.478287 1.389036 1.292096 1.188788 1.084384 0.980656 0.878503 0.775237 0.663743 0.539578 0.403344 0.258956 0.109434 -0.043935 -0.200986 -0.361019 -0.523161 -0.685556 -0.845366 -0.999480 -1.145544 -1.282366 -1.409337 -1.524920 -1.625906 -1.707377 -1.762486 -1.783498 -1.765941 -1.715150 -1.645380 -1.574677 -1.516687 -1.474068 -1.442713 -1.417868 +1.525569 1.435807 1.335411 1.226404 1.113896 1.001379 0.890777 0.780002 0.661259 0.528773 0.382346 0.226642 0.065268 -0.100589 -0.270547 -0.443771 -0.619028 -0.793883 -0.965092 -1.129434 -1.284809 -1.430301 -1.565142 -1.687017 -1.792041 -1.874588 -1.926934 -1.940785 -1.912886 -1.851321 -1.772922 -1.697837 -1.639004 -1.596445 -1.564728 -1.539006 +1.566315 1.479214 1.376488 1.263103 1.143093 1.021619 0.902254 0.783557 0.657210 0.516187 0.359250 0.191837 0.018160 -0.160683 -0.344060 -0.530963 -0.719689 -0.907253 -1.090067 -1.264932 -1.430027 -1.584649 -1.727568 -1.855690 -1.964564 -2.047808 -2.096752 -2.102712 -2.064071 -1.991678 -1.905145 -1.826603 -1.767296 -1.724535 -1.692174 -1.665365 +1.599400 1.517580 1.415403 1.298085 1.171736 1.041419 0.913010 0.786007 0.651695 0.501886 0.334113 0.154593 -0.031851 -0.224178 -0.421492 -0.622547 -0.825079 -1.025616 -1.220296 -1.406037 -1.581314 -1.745475 -1.896602 -2.030921 -2.143474 -2.227031 -2.271933 -2.269336 -2.219606 -2.136371 -2.042346 -1.961175 -1.901455 -1.858218 -1.824963 -1.796908 +1.624851 1.550529 1.451132 1.331239 1.199665 1.060803 0.923092 0.787425 0.644798 0.485924 0.306984 0.114961 -0.084730 -0.291046 -0.502823 -0.718477 -0.935156 -1.148950 -1.355807 -1.552820 -1.738766 -1.912794 -2.072223 -2.212699 -2.328774 -2.412252 -2.452480 -2.440720 -2.379579 -2.285564 -2.184808 -2.101635 -2.041361 -1.997404 -1.963032 -1.933615 +1.644484 1.576932 1.482832 1.362862 1.226569 1.079755 0.932536 0.787882 0.636575 0.468351 0.277909 0.072976 -0.140450 -0.361273 -0.588030 -0.818712 -1.049886 -1.277246 -1.496631 -1.705352 -1.902443 -2.086605 -2.254411 -2.401028 -2.520465 -2.603459 -2.638392 -2.616924 -2.544069 -2.439454 -2.332777 -2.247970 -2.186918 -2.142020 -2.106339 -2.075472 +1.659936 1.597863 1.510260 1.392062 1.252024 1.098156 0.941373 0.787439 0.627098 0.449210 0.246925 0.028662 -0.198996 -0.434846 -0.677094 -0.923225 -1.169251 -1.410513 -1.642804 -1.863707 -2.072377 -2.266900 -2.443154 -2.595911 -2.718548 -2.800637 -2.829676 -2.798002 -2.713156 -2.598249 -2.486428 -2.400100 -2.338052 -2.292009 -2.254855 -2.222470 + + +# Torque coefficient + +0.003340 0.004911 0.006545 0.008262 0.010070 0.011970 0.013957 0.016018 0.018137 0.020289 0.022450 0.024593 0.026688 0.028710 0.030632 0.032429 0.034079 0.035559 0.036851 0.037934 0.038797 0.039434 0.039841 0.040018 0.039964 0.039689 0.039208 0.038533 0.037670 0.036612 0.035343 0.033836 0.032060 0.030017 0.027717 0.025188 +0.008045 0.010762 0.013563 0.016429 0.019324 0.022210 0.025048 0.027802 0.030438 0.032930 0.035250 0.037375 0.039282 0.040944 0.042339 0.043450 0.044267 0.044789 0.045017 0.044964 0.044644 0.044075 0.043258 0.042191 0.040851 0.039196 0.037198 0.034870 0.032229 0.029301 0.026107 0.022669 0.019018 0.015205 0.011268 0.007241 +0.016268 0.019993 0.023649 0.027195 0.030591 0.033804 0.036803 0.039565 0.042064 0.044273 0.046161 0.047700 0.048876 0.049695 0.050168 0.050302 0.050100 0.049567 0.048711 0.047511 0.045913 0.043888 0.041453 0.038619 0.035421 0.031878 0.028030 0.023941 0.019658 0.015218 0.010653 0.005985 0.001235 -0.003577 -0.008428 -0.013295 +0.025774 0.029993 0.033986 0.037720 0.041171 0.044314 0.047125 0.049565 0.051603 0.053232 0.054458 0.055280 0.055675 0.055634 0.055159 0.054221 0.052762 0.050780 0.048288 0.045325 0.041909 0.038080 0.033913 0.029460 0.024768 0.019876 0.014816 0.009617 0.004299 -0.001125 -0.006638 -0.012206 -0.017789 -0.023358 -0.028889 -0.034358 +0.034814 0.039208 0.043266 0.046970 0.050298 0.053228 0.055741 0.057821 0.059439 0.060545 0.061084 0.061010 0.060266 0.058852 0.056797 0.054153 0.050947 0.047252 0.043147 0.038686 0.033900 0.028825 0.023497 0.017956 0.012237 0.006368 0.000365 -0.005772 -0.012031 -0.018366 -0.024710 -0.031003 -0.037195 -0.043284 -0.049297 -0.055159 +0.042659 0.047120 0.051221 0.054958 0.058302 0.061193 0.063544 0.065223 0.066090 0.066040 0.065106 0.063373 0.060934 0.057863 0.054267 0.050218 0.045765 0.040938 0.035756 0.030241 0.024429 0.018365 0.012089 0.005633 -0.000989 -0.007782 -0.014751 -0.021860 -0.029015 -0.036100 -0.043021 -0.049760 -0.056424 -0.063070 -0.069549 -0.075659 +0.049318 0.054120 0.058592 0.062625 0.066025 0.068556 0.069984 0.070226 0.069360 0.067568 0.065045 0.061934 0.058310 0.054218 0.049685 0.044730 0.039369 0.033622 0.027509 0.021072 0.014359 0.007411 0.000253 -0.007113 -0.014705 -0.022523 -0.030495 -0.038466 -0.046263 -0.053785 -0.061080 -0.068376 -0.075767 -0.083059 -0.089903 -0.095873 +0.055734 0.061091 0.065751 0.069416 0.071826 0.072799 0.072397 0.070934 0.068734 0.065944 0.062616 0.058785 0.054468 0.049669 0.044393 0.038653 0.032469 0.025862 0.018880 0.011576 0.003994 -0.003843 -0.011941 -0.020324 -0.028989 -0.037831 -0.046635 -0.055172 -0.063328 -0.071206 -0.079160 -0.087402 -0.095680 -0.103545 -0.110416 -0.116207 +0.061402 0.066394 0.070180 0.072429 0.073076 0.072502 0.071083 0.069019 0.066369 0.063155 0.059394 0.055087 0.050225 0.044800 0.038821 0.032314 0.025314 0.017864 0.010027 0.001856 -0.006625 -0.015424 -0.024572 -0.034062 -0.043778 -0.053464 -0.062820 -0.071685 -0.080185 -0.088783 -0.097879 -0.107298 -0.116477 -0.124582 -0.131461 -0.137667 +0.063740 0.067402 0.069590 0.070539 0.070524 0.069738 0.068292 0.066191 0.063433 0.060025 0.055965 0.051243 0.045849 0.039789 0.033093 0.025809 0.017986 0.009692 0.000991 -0.008083 -0.017536 -0.027401 -0.037678 -0.048261 -0.058881 -0.069165 -0.078860 -0.088052 -0.097259 -0.107103 -0.117688 -0.128374 -0.138100 -0.146379 -0.153741 -0.160896 +0.061104 0.063529 0.065126 0.066071 0.066420 0.066099 0.065004 0.063103 0.060380 0.056842 0.052498 0.047348 0.041399 0.034678 0.027245 0.019172 0.010520 0.001368 -0.008233 -0.018275 -0.028795 -0.039801 -0.051216 -0.062791 -0.074117 -0.084800 -0.094814 -0.104639 -0.115053 -0.126605 -0.138852 -0.150533 -0.160603 -0.169381 -0.177699 -0.186189 +0.055238 0.057399 0.059255 0.060814 0.061858 0.062174 0.061576 0.059966 0.057323 0.053665 0.049023 0.043421 0.036888 0.029486 0.021305 0.012425 0.002927 -0.007113 -0.017668 -0.028765 -0.040427 -0.052606 -0.065106 -0.077539 -0.089381 -0.100415 -0.110966 -0.121829 -0.133973 -0.147552 -0.161342 -0.173660 -0.184243 -0.193929 -0.203559 -0.213566 +0.048889 0.051249 0.053474 0.055545 0.057235 0.058181 0.058107 0.056827 0.054285 0.050503 0.045545 0.039466 0.032326 0.024226 0.015282 0.005576 -0.004794 -0.015768 -0.027352 -0.039580 -0.052432 -0.065775 -0.079284 -0.092416 -0.104704 -0.116209 -0.127582 -0.139961 -0.154312 -0.170004 -0.184940 -0.197857 -0.209279 -0.220207 -0.231366 -0.242972 +0.042753 0.045540 0.048190 0.050636 0.052739 0.054219 0.054639 0.053699 0.051269 0.047359 0.042066 0.035486 0.027721 0.018908 0.009176 -0.001378 -0.012657 -0.024624 -0.037313 -0.050732 -0.064795 -0.079270 -0.093690 -0.107433 -0.120215 -0.132356 -0.144901 -0.159348 -0.176226 -0.193749 -0.209582 -0.223308 -0.235867 -0.248274 -0.261103 -0.274450 +0.036927 0.040211 0.043304 0.046116 0.048518 0.050360 0.051208 0.050592 0.048277 0.044231 0.038585 0.031485 0.023077 0.013532 0.002986 -0.008447 -0.020680 -0.033711 -0.047570 -0.062219 -0.077497 -0.093059 -0.108320 -0.122683 -0.136018 -0.149005 -0.163200 -0.180216 -0.199592 -0.218623 -0.235366 -0.250141 -0.264077 -0.278150 -0.292795 -0.308102 +0.031398 0.035176 0.038724 0.041898 0.044591 0.046665 0.047841 0.047512 0.045305 0.041116 0.035101 0.027462 0.018392 0.008091 -0.003295 -0.015643 -0.028887 -0.043049 -0.058133 -0.074036 -0.090523 -0.107141 -0.123231 -0.138228 -0.152189 -0.166347 -0.182742 -0.202566 -0.224235 -0.244592 -0.262392 -0.278432 -0.293948 -0.309857 -0.326520 -0.343976 +0.026185 0.030391 0.034383 0.037925 0.040906 0.043169 0.044559 0.044466 0.042352 0.038012 0.031611 0.023415 0.013662 0.002579 -0.009678 -0.022983 -0.037300 -0.052654 -0.069003 -0.086180 -0.103872 -0.121549 -0.138483 -0.154090 -0.168834 -0.184616 -0.203614 -0.226299 -0.250050 -0.271703 -0.290728 -0.308227 -0.325508 -0.343449 -0.362331 -0.382045 +0.021330 0.025864 0.030241 0.034148 0.037416 0.039858 0.041381 0.041461 0.039413 0.034913 0.028111 0.019339 0.008880 -0.003011 -0.016172 -0.030485 -0.045936 -0.062535 -0.080182 -0.098649 -0.117566 -0.136337 -0.154085 -0.170301 -0.186122 -0.203956 -0.225804 -0.251308 -0.276997 -0.300008 -0.320420 -0.339555 -0.358797 -0.378982 -0.400229 -0.422258 +0.016887 0.021614 0.026297 0.030533 0.034082 0.036698 0.038309 0.038497 0.036486 0.031815 0.024597 0.015228 0.004041 -0.008689 -0.022792 -0.038165 -0.054808 -0.072698 -0.091673 -0.111457 -0.131646 -0.151530 -0.170019 -0.186944 -0.204199 -0.224419 -0.249274 -0.277527 -0.305079 -0.329546 -0.351500 -0.372446 -0.393867 -0.416478 -0.440178 -0.464575 +0.012803 0.017690 0.022550 0.027060 0.030877 0.033660 0.035336 0.035577 0.033565 0.028713 0.021064 0.011078 -0.000863 -0.014462 -0.029550 -0.046038 -0.063928 -0.083149 -0.103482 -0.124627 -0.146152 -0.167117 -0.186293 -0.204133 -0.223153 -0.246009 -0.273981 -0.304918 -0.334310 -0.360348 -0.383988 -0.406940 -0.430756 -0.455927 -0.482139 -0.508968 +0.009169 0.014052 0.019042 0.023730 0.027777 0.030722 0.032448 0.032698 0.030650 0.025603 0.017507 0.006881 -0.005836 -0.020341 -0.036458 -0.054116 -0.073304 -0.093893 -0.115622 -0.138192 -0.161102 -0.183069 -0.202953 -0.221962 -0.243030 -0.268716 -0.299885 -0.333456 -0.364707 -0.392433 -0.417910 -0.443081 -0.469479 -0.497298 -0.526085 -0.555420 +0.006050 0.010723 0.015760 0.020539 0.024765 0.027865 0.029630 0.029859 0.027740 0.022482 0.013922 0.002635 -0.010889 -0.026336 -0.043528 -0.062410 -0.082942 -0.104937 -0.128110 -0.152185 -0.176486 -0.199372 -0.220067 -0.240498 -0.263846 -0.292529 -0.326963 -0.363123 -0.396285 -0.425817 -0.453293 -0.480903 -0.510029 -0.540564 -0.571997 -0.603917 +0.003499 0.007783 0.012684 0.017518 0.021842 0.025071 0.026869 0.027054 0.024833 0.019345 0.010303 -0.001669 -0.016028 -0.032455 -0.050772 -0.070931 -0.092849 -0.116289 -0.140968 -0.166626 -0.192273 -0.216038 -0.237692 -0.259787 -0.285606 -0.317440 -0.355194 -0.393913 -0.429058 -0.460514 -0.490172 -0.520425 -0.552385 -0.585704 -0.619861 -0.654451 +0.001490 0.005236 0.009858 0.014657 0.019004 0.022327 0.024153 0.024276 0.021928 0.016189 0.006647 -0.006034 -0.021261 -0.038708 -0.058200 -0.079685 -0.103030 -0.127959 -0.154221 -0.181514 -0.208440 -0.233104 -0.255880 -0.279857 -0.308306 -0.343440 -0.384561 -0.425827 -0.463037 -0.496541 -0.528576 -0.561649 -0.596525 -0.632704 -0.669664 -0.707014 +-0.000121 0.003139 0.007316 0.011928 0.016259 0.019625 0.021473 0.021521 0.019021 0.013010 0.002949 -0.010467 -0.026596 -0.045104 -0.065821 -0.088677 -0.113491 -0.139960 -0.167888 -0.196836 -0.224978 -0.250604 -0.274671 -0.300722 -0.331943 -0.370526 -0.415042 -0.458867 -0.498231 -0.533919 -0.568529 -0.604567 -0.642433 -0.681552 -0.721401 -0.761602 +-0.001449 0.001406 0.005062 0.009371 0.013622 0.016963 0.018818 0.018784 0.016110 0.009805 -0.000797 -0.014974 -0.032039 -0.051651 -0.073640 -0.097912 -0.124235 -0.152307 -0.181979 -0.212567 -0.241898 -0.268567 -0.294100 -0.322383 -0.356515 -0.398693 -0.446622 -0.493039 -0.534649 -0.572667 -0.610048 -0.649163 -0.690097 -0.732240 -0.775063 -0.818211 + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/DISCON.IN b/zmq_coupling_tests/templatesDir/OFZMQ_test03/DISCON.IN new file mode 100644 index 0000000000..7c4aacb165 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/DISCON.IN @@ -0,0 +1,192 @@ +! Controller parameter input file for the NREL-5MW wind turbine +! - File written using ROSCO version 2.8.0 controller tuning logic on 10/18/23 + +!------- SIMULATION CONTROL ------------------------------------------------------------ +1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} +0 ! DT_Out - {Time step to output .dbg* files, or 0 to match sampling period of OpenFAST} +0 ! Echo - (0 - no Echo, 1 - Echo input data to .echo) + +!------- CONTROLLER FLAGS ------------------------------------------------- +1 ! F_LPFType - (1: first-order low-pass filter, 2: second-order low-pass filter), [rad/s] (currently filters generator speed and pitch control signals +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +3 ! VS_ControlMode - Generator torque control mode in above rated conditions (0- no torque control, 1- k*omega^2 with PI transitions, 2- WSE TSR Tracking, 3- Power-based TSR Tracking)} +0 ! VS_ConstPower - Do constant power torque control, where above rated torque varies, 0 for constant torque} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +0 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time, 2: rotor position control} +0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} +0 ! AWC_Mode - Active wake control {0 - not used, 1 - complex number method, 2 - Coleman transform method} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} +0 ! CC_Mode - Cable control mode [0- unused, 1- User defined, 2- Open loop control] +0 ! StC_Mode - Structural control mode [0- unused, 1- User defined, 2- Open loop control] + +!------- FILTERS ---------------------------------------------------------- +1.57080 ! F_LPFCornerFreq - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +0 ! F_NumNotchFilts - Number of notch filters placed on sensors +0.0000 ! F_NotchFreqs - Natural frequency of the notch filters. Array with length F_NumNotchFilts +0.0000 ! F_NotchBetaNum - Damping value of numerator (determines the width of notch). Array with length F_NumNotchFilts, [-] +0.0000 ! F_NotchBetaDen - Damping value of denominator (determines the depth of notch). Array with length F_NumNotchFilts, [-] +0 ! F_GenSpdNotch_N - Number of notch filters on generator speed +0 ! F_GenSpdNotch_Ind - Indices of notch filters on generator speed +0 ! F_TwrTopNotch_N - Number of notch filters on tower top acceleration signal +0 ! F_TwrTopNotch_Ind - Indices of notch filters on tower top acceleration signal +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +0.0000 1.0000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.056789 0.084492 0.106018 0.124332 0.140807 0.155903 0.169931 0.183270 0.196062 0.208354 0.220050 0.231503 0.242646 0.253377 0.263967 0.274233 0.284343 0.294292 0.303997 0.313626 0.322957 0.332260 0.341319 0.350368 0.359221 0.368059 0.376700 0.385301 0.393691 0.402050 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-0.018995 -0.016672 -0.014787 -0.013228 -0.011916 -0.010797 -0.009831 -0.008989 -0.008248 -0.007592 -0.007006 -0.006480 -0.006005 -0.005574 -0.005182 -0.004822 -0.004492 -0.004187 -0.003906 -0.003644 -0.003402 -0.003175 -0.002963 -0.002765 -0.002579 -0.002404 -0.002239 -0.002083 -0.001936 -0.001797 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.008388 -0.007514 -0.006805 -0.006218 -0.005725 -0.005304 -0.004940 -0.004624 -0.004345 -0.004098 -0.003878 -0.003680 -0.003501 -0.003339 -0.003192 -0.003056 -0.002932 -0.002817 -0.002712 -0.002613 -0.002522 -0.002437 -0.002357 -0.002283 -0.002212 -0.002147 -0.002085 -0.002026 -0.001971 -0.001918 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.000880000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +122.9096700000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.000880000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +9.120000 11.400000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +2 ! IPC_SatMode - IPC Saturation method (0 - no saturation (except by PC_MinPit), 1 - saturate by PS_BldPitchMin, 2 - saturate sotfly (full IPC cycle) by PC_MinPit, 3 - saturate softly by PS_BldPitchMin) +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +94.40000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +43093.51876000 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +1500000.000000 ! VS_MaxRat - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +47402.87063000 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +35.29006000000 ! VS_MinOMSpd - Minimum generator speed [rad/s] +2.063350000000 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side). Only used in VS_ControlMode = 1,3 +5000000.000000 ! VS_RtPwr - Wind turbine rated power [W] +43093.51876000 ! VS_RtTq - Rated torque, [Nm]. +122.9096700000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-657.442080000 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-104.507080000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +7.64 ! VS_TSRopt - Power-maximizing region 2 tip-speed-ratio. Only used in VS_ControlMode = 2. +0.314000000000 ! VS_PwrFiltF - Low pass filter on power used to determine generator speed set point. Only used in VS_ControlMode = 3. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +2 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_GenSpeeds array +0.07854 ! PRC_LPF_Freq - Frequency of the low pass filter on the wind speed estimate used to set PRC_GenSpeeds [rad/s] +3.0000 25.0000 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s] +0.7917 0.7917 ! PRC_GenSpeeds - Array of generator speeds corresponding to PRC_WindSpeeds [rad/s] + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +63.000 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +97.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +43702538.05700 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"Cp_Ct_Cq.NREL5MW.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.2897 3.5793 3.8690 4.1586 4.4483 4.7379 5.0276 5.3172 5.6069 5.8966 6.1862 6.4759 6.7655 7.0552 7.3448 7.6345 7.9241 8.2138 8.5034 8.7931 9.0828 9.3724 9.6621 9.9517 10.2414 10.5310 10.8207 11.1103 11.4000 11.8533 12.3067 12.7600 13.2133 13.6667 14.1200 14.5733 15.0267 15.4800 15.9333 16.3867 16.8400 17.2933 17.7467 18.2000 18.6533 19.1067 19.5600 20.0133 20.4667 20.9200 21.3733 21.8267 22.2800 22.7333 23.1867 23.6400 24.0933 24.5467 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.01638154 -0.01796321 -0.01954487 -0.02112654 -0.02270820 -0.02428987 -0.02587154 -0.02745320 -0.02903487 -0.03061653 -0.03219820 -0.03377987 -0.03536153 -0.03694320 -0.03852486 -0.04010653 -0.04168820 -0.04326986 -0.04485153 -0.04643319 -0.04801486 -0.04959652 -0.05117819 -0.05275986 -0.05434152 -0.05592319 -0.05758373 -0.05882656 -0.06845507 -0.05992890 -0.05031134 -0.05798636 -0.06840333 -0.08061549 -0.09336590 -0.10698855 -0.12116040 -0.13530722 -0.15025447 -0.16589008 -0.18080009 -0.19651023 -0.21294470 -0.22969213 -0.24540879 -0.26178304 -0.27905964 -0.29706835 -0.31499595 -0.33136688 -0.34832584 -0.36677525 -0.38556416 -0.40554370 -0.42546670 -0.44309547 -0.46062268 -0.47954729 -0.49884696 -0.51943992 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER FORE-AFT DAMPING ------------------------------------------- +-1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] +0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +60 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.000 3.290 3.579 3.869 4.159 4.448 4.738 5.028 5.317 5.607 5.897 6.186 6.476 6.766 7.055 7.345 7.634 7.924 8.214 8.503 8.793 9.083 9.372 9.662 9.952 10.241 10.531 10.821 11.110 11.400 11.853 12.307 12.760 13.213 13.667 14.120 14.573 15.027 15.480 15.933 16.387 16.840 17.293 17.747 18.200 18.653 19.107 19.560 20.013 20.467 20.920 21.373 21.827 22.280 22.733 23.187 23.640 24.093 24.547 25.000 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.011 0.023 0.032 0.040 0.047 0.059 0.070 0.081 0.091 0.102 0.112 0.122 0.131 0.141 0.150 0.160 0.169 0.178 0.187 0.196 0.205 0.214 0.223 0.232 0.240 0.249 0.257 0.266 0.274 0.282 0.290 0.299 0.307 0.315 0.323 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +1 ! Fl_n - Number of Fl_Kp gains in gain scheduling, optional with default of 1 +0.0000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] +0.0000 ! Fl_U - Wind speeds for scheduling Fl_Kp, optional if Fl_Kp is single value [m/s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) + 0 0 0 ! Ind_BldPitch - The columns in OL_Filename that contains the blade pitch (1,2,3) inputs in rad [array] +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the yaw rate in rad/s +0 ! Ind_Azimuth - The column in OL_Filename that contains the desired azimuth position in rad (used if OL_Mode = 2) +0.0000 0.0000 0.0000 0.0000 ! RP_Gains - PID gains and Tf of derivative for rotor position control (used if OL_Mode = 2) +0 ! Ind_CableControl - The column(s) in OL_Filename that contains the cable control inputs in m [Used with CC_Mode = 2, must be the same size as CC_Group_N] +0 ! Ind_StructControl - The column(s) in OL_Filename that contains the structural control inputs [Used with StC_Mode = 2, must be the same size as StC_Group_N] + +!------- Pitch Actuator Model ----------------------------------------------------- +3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- Pitch Actuator Faults ----------------------------------------------------- +0.00000000 0.00000000 0.00000000 ! PF_Offsets - Constant blade pitch offsets for blades 1-3 [rad] + +!------- Active Wake Control ----------------------------------------------------- +1 ! AWC_NumModes - Number of user-defined AWC forcing modes +1 ! AWC_n - Azimuthal mode number(s) (i.e., the number and direction of the lobes of the wake structure) +1 ! AWC_harmonic - Harmonic(s) to apply in the AWC Inverse Coleman Transformation (only used when AWC_Mode = 2) +0.0500 ! AWC_freq - Frequency(s) of forcing mode(s) [Hz] +1.0000 ! AWC_amp - Pitch amplitude(s) of individual forcing mode(s) [deg] +0.0000 ! AWC_clockangle - Initial angle(s) of forcing mode(s) [deg] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +2.000000 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] + +!------- Cable Control --------------------------------------------------------- +1 ! CC_Group_N - Number of cable control groups +0 ! CC_GroupIndex - First index for cable control group, should correspond to deltaL +20.000000 ! CC_ActTau - Time constant for line actuator [s] + +!------- Structural Controllers --------------------------------------------------------- +1 ! StC_Group_N - Number of cable control groups +0 ! StC_GroupIndex - First index for structural control group, options specified in ServoDyn summary output diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/IceDyn_Input.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/IceDyn_Input.dat new file mode 100644 index 0000000000..3cd7ff93ce --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/IceDyn_Input.dat @@ -0,0 +1,74 @@ +------------------ IceDyn v1.01.x Input File ----------------------------------- +Freshwater Ice of Great Lakes input properties. +---------------------- STRUCTURE PROPERTIES ------------------------------------ + 1 NumLegs - number of support-structure legs in contact with ice + 0 LegPosX - array of size NumLegs: global X position of legs 1-NumLegs (m) + 0 LegPosY - array of size NumLegs: global Y position of legs 1-NumLegs (m) + 6 StWidth - array of size NumLegs: Width of the structure in contact with the ice, or diameter for cylindrical structures (m) +---------------------- ICE MODELS ---------------------------------------------- + 6 IceModel - Number that represents different ice models. {1: quasi-static load; 2:dynamic ice-structure interaction; 3: random ice load; 4: non-simultaneous ice failure; 5: sloping structure 6: large ice floe impact} + 1 IceSubModel - Number that represents different ice sub models. +---------------------- ICE PROPERTIES -General --------------------------------- +0.1 IceVel - Velocity of ice sheet movement (m/s) +0.8 IceThks - Thickness of the ice sheet (m) +1000 WtDen - Mass density of water (kg/m3) +900 IceDen - Mass density of ice (kg/m3) +0.0 InitLoc - Ice sheet initial location (m) +0.0 InitTm - Ice load starting time (s) +2 Seed1 - Random seed 1 +5 Seed2 - Random seed 2 +---------------------- ICE PROPERTIES - Ice Model 1, SubModel 1------------------ +2.7 Ikm - Indentation factor +3.5e6 Ag - Constant depends only on ice crystal type, used in calculating uniaxial stress (MPa-3s-1) +65000 Qg - Activation Energy (Jmol^-1) +8.314 Rg - Universal gas constant (Jmol-1K-1) +269 Tice - Ice temperature (K) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 2------------------- +0.3 Poisson - Poisson's ratio of ice +90.0 WgAngle - Wedge Angel, degree. Default 90 Degrees. +9.5 EIce - Young's modulus of ice (GPa) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 3------------------- +5 SigNm - Nominal ice stress (MPa) +---------------------- ICE PROPERTIES -Ice Model 2, SubModel 1,2----------------- +1.0 Pitch - Distance between sequential ice teeth (m) +5.0 IceStr2 - Ice failure stress (MPa) +1.0 Delmax2 - Ice tooth maximum elastic deformation (m) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 1,2----------------- +0.5 ThkMean - Mean value of ice thickness (m) +0.04 ThkVar - Variance of ice thickness (m^2) +0.001 VelMean - Mean value of ice velocity (m/s) +1e-6 VelVar - Variance of ice velocity (m^2/s^2) +15 TeMean - Mean value of ice loading event duration (s) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 2,3----------------- +5 StrMean - Mean value of ice strength (MPa) +1 StrVar - Variance of ice strength (MPa) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 3------------------- +0.1 DelMean - Mean value of maximum ice tooth tip displacement (m) +0.01 DelVar - Variance of maximum ice tooth tip displacement (m^2) +0.2 PMean - Mean value of the distance between sequential ice teeth (m) +0.01 PVar - Variance of the distance between sequential ice teeth (m^2) +---------------------- ICE PROPERTIES -Ice Model 4 ------------------------------ +0 PrflMean - Mean value of ice contact face position (m) +0.02 PrflSig - Standard deviation of ice contact face position (m) +10 ZoneNo1 - Number of failure zones along contact width +1 ZoneNo2 - Number of failure zones along contact height/thickness +0.27 ZonePitch - Distance between sequential ice teeth (m) +5.0 IceStr - Ice failure stress within each failure region (MPa) +0.027 Delmax - Ice teeth maximum elastic deformatIon (m) +---------------------- ICE PROPERTIES -Ice Model 5, Submodel 1,2 ----------------- +55.0 ConeAgl - Slope angle of the cone (degree) +8.0 ConeDwl - Cone waterline diameter (m) +1.0 ConeDtp - Cone top diameter (m) +0.3 RdupThk - Ride-up ice thickness (m) +0.3 mu - Friction coefficient between structure and ice (-) +0.7 FlxStr - Flexural strength of ice (MPa) +0.1 StrLim - Limit strain for ice fracture failure (-) +1e-2 StrRtLim - Limit strain rate for ice brittle behavior (s^-1) +---------------------- ICE PROPERTIES -Ice Model 6 ------------------------------- +800 FloeLth - Ice floe length (m) +800 FloeWth - Ice floe width (m) +5.0 CPrAr - Ice crushing strength pressure-area relation constant +-0.5 dPrAr - Ice crushing strength pressure-area relation order +9 Fdr - Constant external driving force (MN) +140 Kic - Fracture toughness of ice (kNm^(-3/2)) +3.3 FspN - Non-dimensional splitting load \ No newline at end of file diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/IceFloe_IEC_Crushing.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/IceFloe_IEC_Crushing.dat new file mode 100644 index 0000000000..66ae737cf7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/IceFloe_IEC_Crushing.dat @@ -0,0 +1,51 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 60.0 +randomSeed 123 +rampTime 10.0 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 1.2 +numLegs 4.0 +towerFrequency 0.28 +! +legX1 4.5 +legY1 4.5 +shelterFactor_ks1 1.0 +loadPhase1 0.0 +! +legX2 -4.5 +legY2 4.5 +shelterFactor_ks2 1.0 +loadPhase2 45.0 +! +legX3 4.5 +legY3 -4.5 +shelterFactor_ks3 1.0 +loadPhase3 135.0 +! +legX4 -4.5 +legY4 -4.5 +shelterFactor_ks4 1.0 +loadPhase4 290.0 +! +singleLoad 0 +legAutoFactor 0 +multiLegFactor_kn 1 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_AeroDyn_blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_AeroDyn_blade.dat new file mode 100644 index 0000000000..9d541024d0 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_AeroDyn_blade.dat @@ -0,0 +1,28 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 + +!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m +6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn.dat new file mode 100644 index 0000000000..2f8ab74652 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn.dat @@ -0,0 +1,94 @@ +--------- BEAMDYN with OpenFAST INPUT FILE ------------------------------------------- +NREL 5MW blade +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech"? (flag) +True QuasiStaticInit - Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only] + 0 rhoinf - Numerical damping parameter for generalized-alpha integrator + 2 quadrature - Quadrature method: 1=Gaussian; 2=Trapezoidal (switch) +"DEFAULT" refine - Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2] +"DEFAULT" n_fact - Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5] +"DEFAULT" DTBeam - Time step size (s) +"DEFAULT" load_retries - Number of factored load retries before quitting the simulation [DEFAULT = 20] +"DEFAULT" NRMax - Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10] +"DEFAULT" stop_tol - Tolerance for stopping criterion (-) [DEFAULT = 1E-5] +"DEFAULT" tngt_stf_fd - Use finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_comp - Compare analytical finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_pert - Perturbation size for finite differencing (-) [DEFAULT = 1E-6] +"DEFAULT" tngt_stf_difftol - Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1] +True RotStates - Orient states in the rotating frame during linearization? (flag) [used only when linearizing] +---------------------- GEOMETRY PARAMETER -------------------------------------- + 1 member_total - Total number of members (-) + 49 kp_total - Total number of key points (-) [must be at least 3] + 1 49 - Member number; Number of key points in this member + kp_xr kp_yr kp_zr initial_twist + (m) (m) (m) (deg) +0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.9987500E-01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1998650E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 2.1998550E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 3.1998450E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 4.1998350E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 5.1998250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 6.1998150E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 7.1998050E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 8.2010250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 9.1997850E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.0199775E+01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1199765E+01 1.3181000E+01 +0.0000000E+00 0.0000000E+00 1.2199755E+01 1.2848000E+01 +0.0000000E+00 0.0000000E+00 1.3200975E+01 1.2192000E+01 +0.0000000E+00 0.0000000E+00 1.4199735E+01 1.1561000E+01 +0.0000000E+00 0.0000000E+00 1.5199725E+01 1.1072000E+01 +0.0000000E+00 0.0000000E+00 1.6199715E+01 1.0792000E+01 +0.0000000E+00 0.0000000E+00 1.8200925E+01 1.0232000E+01 +0.0000000E+00 0.0000000E+00 2.0200290E+01 9.6720000E+00 +0.0000000E+00 0.0000000E+00 2.2200270E+01 9.1100000E+00 +0.0000000E+00 0.0000000E+00 2.4200250E+01 8.5340000E+00 +0.0000000E+00 0.0000000E+00 2.6200230E+01 7.9320000E+00 +0.0000000E+00 0.0000000E+00 2.8200825E+01 7.3210000E+00 +0.0000000E+00 0.0000000E+00 3.0200190E+01 6.7110000E+00 +0.0000000E+00 0.0000000E+00 3.2200170E+01 6.1220000E+00 +0.0000000E+00 0.0000000E+00 3.4200150E+01 5.5460000E+00 +0.0000000E+00 0.0000000E+00 3.6200130E+01 4.9710000E+00 +0.0000000E+00 0.0000000E+00 3.8200725E+01 4.4010000E+00 +0.0000000E+00 0.0000000E+00 4.0200090E+01 3.8340000E+00 +0.0000000E+00 0.0000000E+00 4.2200070E+01 3.3320000E+00 +0.0000000E+00 0.0000000E+00 4.4200050E+01 2.8900000E+00 +0.0000000E+00 0.0000000E+00 4.6200030E+01 2.5030000E+00 +0.0000000E+00 0.0000000E+00 4.8201240E+01 2.1160000E+00 +0.0000000E+00 0.0000000E+00 5.0199990E+01 1.7300000E+00 +0.0000000E+00 0.0000000E+00 5.2199970E+01 1.3420000E+00 +0.0000000E+00 0.0000000E+00 5.4199950E+01 9.5400000E-01 +0.0000000E+00 0.0000000E+00 5.5199940E+01 7.6000000E-01 +0.0000000E+00 0.0000000E+00 5.6199930E+01 5.7400000E-01 +0.0000000E+00 0.0000000E+00 5.7199920E+01 4.0400000E-01 +0.0000000E+00 0.0000000E+00 5.7699915E+01 3.1900000E-01 +0.0000000E+00 0.0000000E+00 5.8201140E+01 2.5300000E-01 +0.0000000E+00 0.0000000E+00 5.8699905E+01 2.1600000E-01 +0.0000000E+00 0.0000000E+00 5.9199900E+01 1.7800000E-01 +0.0000000E+00 0.0000000E+00 5.9699895E+01 1.4000000E-01 +0.0000000E+00 0.0000000E+00 6.0199890E+01 1.0100000E-01 +0.0000000E+00 0.0000000E+00 6.0699885E+01 6.2000000E-02 +0.0000000E+00 0.0000000E+00 6.1199880E+01 2.3000000E-02 +0.0000000E+00 0.0000000E+00 6.1500000E+01 0.0000000E+00 +---------------------- MESH PARAMETER ------------------------------------------ + 5 order_elem - Order of interpolation (basis) function (-) +---------------------- MATERIAL PARAMETER -------------------------------------- +"NRELOffshrBsline5MW_BeamDyn_Blade.dat" BldFile - Name of file containing properties for blade (quoted string) +---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- +False UsePitchAct - Whether a pitch actuator should be used (flag) + 200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] + 2E+07 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] + 500000 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] +---------------------- OUTPUTS ------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. + 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) + 1, 2, 3, 4, 5, 6 OutNd - Nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RootFxr, RootFyr, RootFzr" +"RootMxr, RootMyr, RootMzr" +"TipTDxr, TipTDyr, TipTDzr" +"TipRDxr, TipRDyr, TipRDzr" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn_Blade.dat new file mode 100644 index 0000000000..b8724b9a23 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_BeamDyn_Blade.dat @@ -0,0 +1,756 @@ + ------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- + Test Format 1 + ---------------------- BLADE PARAMETERS -------------------------------------- +49 station_total - Number of blade input stations (-) + 1 damp_type - Damping type: 0: no damping; 1: damped + ---------------------- DAMPING COEFFICIENT------------------------------------ + mu1 mu2 mu3 mu4 mu5 mu6 + (-) (-) (-) (-) (-) (-) +1.0E-03 1.0E-03 1.0E-03 0.0014 0.0022 0.0022 + ---------------------- DISTRIBUTED PROPERTIES--------------------------------- + 0.000000 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.003250 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.019510 + 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.078950E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.955860E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.942490E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.431590E+09 + + 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.733630E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.066380E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.091520E+03 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.157900E+03 + + 0.035770 + 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.006723E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.949780E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.745590E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.993980E+09 + + 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.405500E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.047360E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.660900E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.013450E+03 + + 0.052030 + 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.867780E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.978880E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.528740E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.666590E+09 + + 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.400420E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.099750E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.738100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.973560E+03 + + 0.068290 + 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.607860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.485850E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.078240E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.474710E+09 + + 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.924960E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.730200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.485500E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521570E+03 + + 0.084550 + 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.491260E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.022060E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.229720E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.323540E+09 + + 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.502750E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.414900E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.567600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.098250E+03 + + 0.100810 + 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.971300E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 9.144700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.309540E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.907870E+09 + + 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.240540E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.937300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.005300E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.942600E+02 + + 0.117070 + 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.493950E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.063160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.528360E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.570360E+09 + + 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.006380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.471800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.516100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.987900E+02 + + 0.133350 + 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.034800E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.884440E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.980060E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.158260E+09 + + 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.820620E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.908400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.161200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.069600E+02 + + 0.149590 + 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.037290E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.009180E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.936840E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.002120E+09 + + 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.996550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.038600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.036000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.074600E+02 + + 0.165850 + 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.169720E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.167680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.691660E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.559000E+08 + + 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.263210E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.447000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.892400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.339400E+02 + + 0.182110 + 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.082350E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.271660E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.949460E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.722700E+08 + + 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.168200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.699000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.465700E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.164700E+02 + + 0.198370 + 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.085970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.081700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.386520E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.474900E+08 + + 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.061860E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.012800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.159100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.171900E+02 + + 0.214650 + 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.668340E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.244530E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.933740E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.488400E+08 + + 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.814200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.465600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.871100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.336700E+02 + + 0.230890 + 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.147760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.048960E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.568960E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.359200E+08 + + 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.528220E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.687100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.608400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.295500E+02 + + 0.247150 + 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.011580E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.948490E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.388650E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.113500E+08 + + 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.494770E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.537600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.485600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.023200E+02 + + 0.263410 + 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.882620E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.808020E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.271990E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.919400E+08 + + 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.465380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.362200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.403000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.765200E+02 + + 0.295950 + 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.613970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.501400E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.050050E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.610000E+08 + + 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.393330E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.981800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.246100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.227900E+02 + + 0.328460 + 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.357480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.244070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.828250E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.288200E+08 + + 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.300040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.620800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.094200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.715000E+02 + + 0.360980 + 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.146860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.995280E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.588710E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.007500E+08 + + 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.219900E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.350100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.436000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.293700E+02 + + 0.393500 + 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.944090E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.750760E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.361930E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.743800E+08 + + 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.138200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.085700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.024000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.888100E+02 + + 0.426020 + 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.632700E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.447140E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.102380E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.444700E+08 + + 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.947340E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.638700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.267000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.265400E+02 + + 0.458550 + 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.432400E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.139070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.758000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.199800E+08 + + 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.871200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.370600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.942000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.864800E+02 + + 0.491060 + 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.168760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.734240E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.813000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.119000E+07 + + 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.633430E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.964100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.734000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.337500E+02 + + 0.523580 + 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.047430E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.554870E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.347200E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.909000E+07 + + 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.532070E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.803400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.914000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.094800E+02 + + 0.556100 + 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.229500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.334030E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.089000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.745000E+07 + + 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.416660E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.624300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.216000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845900E+02 + + 0.588620 + 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.608200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.828730E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.145400E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.592000E+07 + + 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.206380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.348300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.733000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521600E+02 + + 0.621150 + 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.480300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.584100E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.386300E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.598000E+07 + + 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.002930E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.163000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.330000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.296000E+02 + + 0.653660 + 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.397000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.323360E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.758800E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.744000E+07 + + 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.794040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.798000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.960000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.079400E+02 + + 0.686180 + 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.311500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.183680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.260100E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.090000E+07 + + 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.650940E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.893000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.300000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.062300E+02 + + 0.718700 + 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.600100E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.020160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.072600E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.854000E+07 + + 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.544110E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.578000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.220000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.200000E+01 + + 0.751220 + 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.757500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.978100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.088000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.628000E+07 + + 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.389350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.996000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.190000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.515000E+01 + + 0.783760 + 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.288900E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.096100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.631000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.453000E+07 + + 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.295550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.141000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.577000E+01 + + 0.816260 + 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.440400E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.181900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.105000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.070000E+06 + + 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.072640E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.544000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.880000E+01 + + 0.848780 + 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.116000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.548700E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.948000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.060000E+06 + + 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.877600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.957000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.750000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.232000E+01 + + 0.881300 + 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.815200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.951200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.936000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.080000E+06 + + 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.024800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.409000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.210000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.630000E+01 + + 0.897560 + 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.602500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.537200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.467000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.090000E+06 + + 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 8.300100E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.012000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.930000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.205000E+01 + + 0.913820 + 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.092300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.047300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.041000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.750000E+06 + + 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.290600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.015000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.690000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.184000E+01 + + 0.930080 + 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.000800E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.814200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.652000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.330000E+06 + + 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.877200E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.853000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.490000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.002000E+01 + + 0.938210 + 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.224000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.617100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.384000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.940000E+06 + + 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.626400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.711000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.340000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845000E+01 + + 0.946360 + 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.323000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.588100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.963000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.240000E+06 + + 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.934000E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.155000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.100000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.265000E+01 + + 0.954470 + 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.332000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.378800E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.600000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.660000E+06 + + 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.591400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.770000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.066000E+01 + + 0.962600 + 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.453000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.187900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.283000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.130000E+06 + + 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.248400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.190000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.100000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E+00 + + 0.970730 + 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.690000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.016300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.008000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.640000E+06 + + 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.911400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.820000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.600000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.380000E+00 + + 0.978860 + 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.992000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.507000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.550000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.170000E+06 + + 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.581800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.570000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.200000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.990000E+00 + + 0.986990 + 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.131000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.426000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.600000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.580000E+06 + + 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.166900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.010000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.260000E+00 + + 0.995120 + 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.850000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.610000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 + + 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.145300E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.400000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.800000E-01 + + 1.000000 + 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.530000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.010000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.700000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.900000E+05 + + 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.031900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.800000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.000000E-01 + + + + + + + + + + + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Blade.dat new file mode 100644 index 0000000000..cf5aa25dfe --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Blade.dat @@ -0,0 +1,83 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 +3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 +5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 +6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 +8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 +1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 +1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 +1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 +1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 +1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 +1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 +1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 +2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 +2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 +2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 +2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 +2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 +3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 +3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 +3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 +4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 +4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 +4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 +5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 +5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 +5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 +6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 +6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 +6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 +7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 +7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 +7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 +8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 +8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 +8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 +8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 +9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 +9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 +9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 +9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 +9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 +9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 +9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 +9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 +9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 +9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 +1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat new file mode 100644 index 0000000000..87d3224f8d --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat @@ -0,0 +1,71 @@ +------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- +Steady 8 m/s winds with no shear for FAST CertTests #20 and #25 +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 2 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) +False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 90 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 10 HWindSpeed - Horizontal windspeed (m/s) + 90 RefHt - Reference height for horizontal wind speed (m) + 0 PLexp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +none Filename_Uni - Filename of time series data for uniform wind field. (-) + 90 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"Wind/90m_12mps_twr.bts" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 90 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 11.4 URef - Mean u-component wind speed at the reference height (m/s) + 0 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +================== LIDAR Parameters =========================================================================== +0 SensorType - Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed) +0 NumPulseGate - Number of lidar measurement gates (used when SensorType = 3) +30 PulseSpacing - Distance between range gates (m) (used when SensorType = 3) +0 NumBeam - Number of lidar measurement beams (0-5)(used when SensorType = 1) +-200 FocalDistanceX - Focal distance co-ordinates of the lidar beam in the x direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceY - Focal distance co-ordinates of the lidar beam in the y direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceZ - Focal distance co-ordinates of the lidar beam in the z direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0.0 0.0 0.0 RotorApexOffsetPos - Offset of the lidar from hub height (m) +17 URefLid - Reference average wind speed for the lidar[m/s] +0.25 MeasurementInterval - Time between each measurement [s] +False LidRadialVel - TRUE => return radial component, FALSE => return 'x' direction estimate +1 ConsiderHubMotion - Flag whether to consider the hub motion's impact on Lidar measurements +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp new file mode 100644 index 0000000000..ad085b6d0e --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp @@ -0,0 +1,26 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 600.0 +randomSeed 123 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 6.0 +numLegs 1.0 +towerFrequency 0.28 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat new file mode 100644 index 0000000000..9a8847ba0a --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -0,0 +1,106 @@ +------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False Buoyancy - Include buoyancy effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] +"unused" AA_InputFile - Aeroacoustics input file +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) + 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] + 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] + 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils/Cylinder2.dat" +"Airfoils/DU40_A17.dat" +"Airfoils/DU35_A17.dat" +"Airfoils/DU30_A17.dat" +"Airfoils/DU25_A17.dat" +"Airfoils/DU21_A17.dat" +"Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +0.0 VolHub - Hub volume (m^3) +0.0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] +0.0 VolNac - Nacelle volume (m^3) +0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail fin Aerodynamics ======================================================================== +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.000000E-01 0.0 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.000000E-01 0.0 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.000000E-01 0.0 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.000000E-01 0.0 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.000000E-01 0.0 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.000000E-01 0.0 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.000000E-01 0.0 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.000000E-01 0.0 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtFldFxh" +"RtFldFyh" +"RtFldFzh" +"RtFldMxh" +"RtFldMyh" +"RtFldMzh" +"RtVAvgxh" +"RtFldCp" +"RtFldCt" +"RtArea" +"RtSpeed" +"RtTSR" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat new file mode 100644 index 0000000000..8bd9386371 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -0,0 +1,160 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"DEFAULT" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +True YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 5 BlPitch(1) - Blade 1 initial pitch (degrees) + 5 BlPitch(2) - Blade 2 initial pitch (degrees) + 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 8 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 0 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 0 PtfmMass - Platform mass (kg) + 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"BldPitch1" - Blade 1 pitch angle +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction +"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat new file mode 100644 index 0000000000..664185cbd6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat @@ -0,0 +1,54 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline tower input properties. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 5.5908700E+03 6.1434300E+11 6.1434300E+11 +1.0000000E-01 5.2324300E+03 5.3482100E+11 5.3482100E+11 +2.0000000E-01 4.8857600E+03 4.6326700E+11 4.6326700E+11 +3.0000000E-01 4.5508700E+03 3.9913100E+11 3.9913100E+11 +4.0000000E-01 4.2277500E+03 3.4188300E+11 3.4188300E+11 +5.0000000E-01 3.9164100E+03 2.9101100E+11 2.9101100E+11 +6.0000000E-01 3.6168300E+03 2.4602700E+11 2.4602700E+11 +7.0000000E-01 3.3290300E+03 2.0645700E+11 2.0645700E+11 +8.0000000E-01 3.0530100E+03 1.7185100E+11 1.7185100E+11 +9.0000000E-01 2.7887500E+03 1.4177600E+11 1.4177600E+11 +1.0000000E+00 2.5362700E+03 1.1582000E+11 1.1582000E+11 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.7004 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 2.1963 TwFAM1Sh(3) - , coefficient of x^3 term + -5.6202 TwFAM1Sh(4) - , coefficient of x^4 term + 6.2275 TwFAM1Sh(5) - , coefficient of x^5 term + -2.504 TwFAM1Sh(6) - , coefficient of x^6 term + -70.5319 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -63.7623 TwFAM2Sh(3) - , coefficient of x^3 term + 289.737 TwFAM2Sh(4) - , coefficient of x^4 term + -176.513 TwFAM2Sh(5) - , coefficient of x^5 term + 22.0706 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.385 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -1.7684 TwSSM1Sh(3) - , coefficient of x^3 term + 3.0871 TwSSM1Sh(4) - , coefficient of x^4 term + -2.2395 TwSSM1Sh(5) - , coefficient of x^5 term + 0.5357 TwSSM1Sh(6) - , coefficient of x^6 term + -121.21 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + 184.415 TwSSM2Sh(3) - , coefficient of x^3 term + -224.904 TwSSM2Sh(4) - , coefficient of x^4 term + 298.536 TwSSM2Sh(5) - , coefficient of x^5 term + -135.838 TwSSM2Sh(6) - , coefficient of x^6 term + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat new file mode 100644 index 0000000000..0fc589f458 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat @@ -0,0 +1,110 @@ +------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to .ech (flag) +"default" DT - Communication interval for controllers (s) (or "default") +---------------------- PITCH CONTROL ------------------------------------------- + 9 PCMode - Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 TPCOn - Time to enable active pitch control (s) [unused when PCMode=0] + 9999.9 TPitManS(1) - Time to start override pitch maneuver for blade 1 and end standard pitch control (s) + 9999.9 TPitManS(2) - Time to start override pitch maneuver for blade 2 and end standard pitch control (s) + 9999.9 TPitManS(3) - Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades] + 8 PitManRat(1) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s) + 8 PitManRat(2) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s) + 8 PitManRat(3) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades] + 20 BlPitchF(1) - Blade 1 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(2) - Blade 2 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(3) - Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades] +---------------------- GENERATOR AND TORQUE CONTROL ---------------------------- + 1 VSContrl - Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 2 GenModel - Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0] + 94.4 GenEff - Generator efficiency [ignored by the Thevenin and user-defined generator models] (%) +True GenTiStr - Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag) +True GenTiStp - Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag) + 10.0 SpdGenOn - Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False] + 0 TimGenOn - Time to turn on the generator for a startup (s) [used only when GenTiStr=True] + 9999.9 TimGenOf - Time to turn off the generator (s) [used only when GenTiStp=True] +---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL -------------------- + 1162.0 VS_RtGnSp - Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1] + 47403.0 VS_RtTq - Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1] + 0.025576 VS_Rgn2K - Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1] + 10.0 VS_SlPc - Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1] +---------------------- SIMPLE INDUCTION GENERATOR ------------------------------ + 9999.9 SIG_SlPc - Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_SySp - Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_RtTq - Rated torque (N-m) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_PORt - Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1] +---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR ----------------- + 9999.9 TEC_Freq - Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2] + 9998 TEC_NPol - Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SRes - Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RRes - Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_VLL - Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SLR - Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RLR - Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_MR - Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2] +---------------------- HIGH-SPEED SHAFT BRAKE ---------------------------------- + 0 HSSBrMode - HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 THSSBrDp - Time to initiate deployment of the HSS brake (s) + 0.6 HSSBrDT - Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1] + 28116.2 HSSBrTqF - Fully deployed HSS-brake torque (N-m) +---------------------- NACELLE-YAW CONTROL ------------------------------------- + 0 YCMode - Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 TYCOn - Time to enable active yaw control (s) [unused when YCMode=0] + 0 YawNeut - Neutral yaw position--yaw spring force is zero at this yaw (degrees) +9.02832E+09 YawSpr - Nacelle-yaw spring constant (N-m/rad) + 1.916E+07 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s)) + 9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s) + 2 YawManRat - Yaw maneuver rate (in absolute value) (deg/s) + 0 NacYawF - Final yaw angle for override yaw maneuvers (degrees) +---------------------- AERODYNAMIC FLOW CONTROL -------------------------------- + 0 AfCmode - Airfoil control mode {0: none, 1: cosine wave cycle, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 AfC_Mean - Mean level for cosine cycling or steady value (-) [used only with AfCmode==1] + 0 AfC_Amp - Amplitude for for cosine cycling of flap signal (-) [used only with AfCmode==1] + 0 AfC_Phase - Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1] +---------------------- STRUCTURAL CONTROL -------------------------------------- +0 NumBStC - Number of blade structural controllers (integer) +"unused" BStCfiles - Name of the files for blade structural controllers (quoted strings) [unused when NumBStC==0] +0 NumNStC - Number of nacelle structural controllers (integer) +"unused" NStCfiles - Name of the files for nacelle structural controllers (quoted strings) [unused when NumNStC==0] +0 NumTStC - Number of tower structural controllers (integer) +"unused" TStCfiles - Name of the files for tower structural controllers (quoted strings) [unused when NumTStC==0] +0 NumSStC - Number of substructure structural controllers (integer) +"unused" SStCfiles - Name of the files for substructure structural controllers (quoted strings) [unused when NumSStC==0] +---------------------- CABLE CONTROL ------------------------------------------- + 0 CCmode - Cable control mode {0: none, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) +---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface] +"../../ROSCO/install/lib/libdiscon.so" DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface] +"/home/of_rt/ROSCO/Examples/examples_out/17_ZeroMQ/DISCON_zmq.IN" DLL_InFile - Name of input file sent to the DLL (-) [used only with Bladed Interface] +"DISCON_zmq" DLL_ProcName - Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface] +"default" DLL_DT - Communication interval for dynamic library (s) (or "default") [used only with Bladed Interface] +false DLL_Ramp - Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface] + 9999.9 BPCutoff - Cutoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface] + 0 NacYaw_North - Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface] + 1 Ptch_Cntrl - Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface] + 0 Ptch_SetPnt - Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface] + 0 Ptch_Min - Record 6: Minimum pitch angle (deg) [used only with Bladed Interface] + 0 Ptch_Max - Record 7: Maximum pitch angle (deg) [used only with Bladed Interface] + 0 PtchRate_Min - Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface] + 0 PtchRate_Max - Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface] + 0 Gain_OM - Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface] + 0 GenSpd_MinOM - Record 17: Minimum generator speed (rpm) [used only with Bladed Interface] + 0 GenSpd_MaxOM - Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface] + 0 GenSpd_Dem - Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface] + 0 GenTrq_Dem - Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface] + 0 GenPwr_Dem - Record 13: Demanded power (W) [used only with Bladed Interface] +---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE ------------- + 0 DLL_NumTrq - Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface] + GenSpd_TLU GenTrq_TLU + (rpm) (Nm) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to .sum (flag) (currently unused) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"GenTq" - Electrical generator power and torque +"GenPwr" - Electrical generator power and torque +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum new file mode 100644 index 0000000000..f978c772cf --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum @@ -0,0 +1,61 @@ + +This summary information was generated by AeroDyn on 17-Jun-2024 at 12:20:08. + +====== General Options ============================================================================ + 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory + 2 AFAeroMod - Type of blade airfoil aerodynamics model: Beddoes-Leishman unsteady model + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +====== Blade-Element/Momentum Theory Options ====================================================== + 2 SkewMod - Type of skewed-wake correction model: Pitt/Peters + T TipLoss - Use the Prandtl tip-loss model? Yes + T HubLoss - Use the Prandtl hub-loss model? Yes + T TanInd - Include tangential induction in BEMT calculations? Yes + F AIDrag - Include the drag term in the axial-induction calculation? No + F TIDrag - Include the drag term in the tangential-induction calculation? No + 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== + 3 UAMod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 3 NBlOuts - Number of blade nodes selected for output + 19 NumBlNds - Number of blade nodes in the analysis + Blade nodes selected for output: Output node Analysis node + ----------- ------------- + 1 1 + 2 9 + 3 19 + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum new file mode 100644 index 0000000000..9f5af72ad5 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum @@ -0,0 +1,210 @@ + +This summary information was generated by ElastoDyn on 17-Jun-2024 at 12:20:08. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 16 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Enabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.00500000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 0.000 + Mass Incl. Platform (kg) 696850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 OoPDefl1 (m) + 2 IPDefl1 (m) + 3 TwstDefl1 (deg) + 4 BldPitch1 (deg) + 5 Azimuth (deg) + 6 RotSpeed (rpm) + 7 GenSpeed (rpm) + 8 TTDspFA (m) + 9 TTDspSS (m) + 10 TTDspTwst (deg) + 11 Spn2MLxb1 (kN-m) + 12 Spn2MLyb1 (kN-m) + 13 RootFxb1 (kN) + 14 RootFyb1 (kN) + 15 RootFzb1 (kN) + 16 RootMxb1 (kN-m) + 17 RootMyb1 (kN-m) + 18 RootMyc1 (kN-m) + 19 RootMyc2 (kN-m) + 20 RootMyc3 (kN-m) + 21 RootMzb1 (kN-m) + 22 RotTorq (kN-m) + 23 LSSGagMya (kN-m) + 24 LSSGagMza (kN-m) + 25 YawBrFxp (kN) + 26 YawBrFyp (kN) + 27 YawBrFzp (kN) + 28 YawBrMxp (kN-m) + 29 YawBrMyp (kN-m) + 30 YawBrMzp (kN-m) + 31 TwrBsFxt (kN) + 32 TwrBsFyt (kN) + 33 TwrBsFzt (kN) + 34 TwrBsMxt (kN-m) + 35 TwrBsMyt (kN-m) + 36 TwrBsMzt (kN-m) + 37 NcIMURAys (deg/s^2) + 38 NcIMUTAxs (m/s^2) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum new file mode 100644 index 0000000000..8f40baf0b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 17-Jun-2024 at 12:20:08. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 9 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 17-Jun-2024 at 12:20:08. + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum new file mode 100644 index 0000000000..975b5ce069 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum @@ -0,0 +1,16 @@ + +Predictions were generated on 17-Jun-2024 at 12:20:08 + OpenFAST + + + +AirfoilNumber TableNumber alpha0 alpha1 alpha2 eta_e C_nalpha C_lalpha T_f0 T_V0 T_p T_VL b1 b2 b5 A1 A2 A5 S1 S2 S3 S4 Cn1 Cn2 St_sh Cd0 Cm0 k0 k1 k2 k3 k1_hat x_cp_bar UACutout UACutout_delta UACutout_blend filtCutOff alphaLowerWrap alphaLower alphaUpper alphaUpperWrap c_alphaLowerWrap c_alphaLower c_alphaUpper c_alphaUpperWrap c_RateWrap c_RateLower c_Rate c_RateUpper +(-) (-) (deg) (deg) (deg) (-) (-/rad) (-/rad) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (deg) (deg) (deg) (-) (deg) (deg) (deg) (deg) (-) (-) (-) (-) (-/rad) (-/rad) (-/rad) (-/rad) + 1 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 2 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 3 1 -3.20000 9.00000 -9.00000 1.00000 7.48880 9.05273 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.35190 -0.32260 0.19000 0.03000 -0.05000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -0.25000 2.25000 55.00000 -5.61045 0.10507 0.47793 8.35959 -3.07855 7.31788 8.54531 8.56087 + 4 1 -1.20000 11.50000 -11.50000 1.00000 7.18380 8.82355 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.67170 -0.30750 0.19000 0.01200 -0.07000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -40.00000 -2.75000 5.75000 50.00000 -5.56999 -0.20172 0.96897 6.72117 -2.60827 8.25716 7.89125 7.44806 + 5 1 -2.20000 9.00000 -9.00000 1.00000 7.33260 8.47978 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.44900 -0.61380 0.19000 0.00800 -0.09000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -6.39000 6.25000 45.00000 -5.67249 -0.57626 1.09716 5.87251 -2.44993 7.56262 7.58542 7.06084 + 6 1 -3.20000 8.50000 -8.50000 1.00000 6.44620 7.97647 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.43360 -0.68730 0.19000 0.00600 -0.12000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -7.96000 3.75000 32.00000 -5.53755 -0.61874 0.91909 4.38619 -2.00914 7.60871 7.52444 7.03186 + 7 1 -4.20000 8.00000 -8.00000 1.00000 6.20470 8.96402 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.41440 -0.53240 0.19000 0.00600 -0.12100 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -35.00000 -9.05000 2.75000 30.00000 -4.67755 -0.67498 0.85701 4.10998 -1.70674 8.83741 7.43866 6.83970 + 8 1 -4.43200 9.00000 -9.00000 1.00000 6.00310 7.67763 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.40730 -0.79450 0.19000 0.00650 -0.08800 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -50.00000 -5.50000 4.50000 28.00000 -6.14917 -0.20664 0.95141 3.60393 -1.98160 7.65128 6.63516 6.46715 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech new file mode 100644 index 0000000000..91204525f2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech @@ -0,0 +1,107 @@ + +This file of echoed input was generated by OpenFAST on 17-Jun-2024 at 12:20:08. + +Data from OpenFAST primary input file "OFZMQ_test03.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 6.0000E+02 TMax - Total run time (s) + 5.0000E-03 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) + 1.2250E+00 AirDens - Air density (kg/m^3) + 1.0250E+03 WtrDens - Water density (kg/m^3) + 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) + 1.0350E+05 Patm - Atmospheric pressure (Pa) + 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) + 5.0000E+01 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + T SumPrint - Print summary data to .sum (flag) + 5.0000E+00 SttsTime - Amount of time between screen status messages (s) + 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES10.3E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + T VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "tcp://127.0.0.1:5555" + 2 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + "VelH" "BldPitchCom1" + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 0 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + " + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst new file mode 100644 index 0000000000..347b98c565 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst @@ -0,0 +1,82 @@ +------- OpenFAST example INPUT FILE ------------------------------------------- +FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +600.0 TMax - Total run time (s) +0.005 DT - Recommended module time step (s) +2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} +0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} +99999 DT_UJac - Time between calls to get Jacobians (s) +1000000.0 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ +1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} +1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} +2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} +1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} +0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} +0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} +0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} +0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} +0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- +9.80665 Gravity - Gravitational acceleration (m/s^2) +1.225 AirDens - Air density (kg/m^3) +1025 WtrDens - Water density (kg/m^3) +1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) +335 SpdSound - Speed of sound in working fluid (m/s) +103500 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] +1700 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] +50 WtrDpth - Water depth (m) +0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +5 SttsTime - Amount of time between screen status messages (s) +99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +default DT_Out - Time step for tabular output (s) (or "default") +0 TStart - Time to begin tabular output (s) +0 OutFileFmt - Format for tabular (time-marching) output file (switch) {0: uncompressed binary [.outb], 1: text file [.out], 2: binary file [.outb], 3: both 1 and 2} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) +3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) +0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) +0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) +0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) +0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) +2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] +30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] +1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] +1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ +0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} +1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +True VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] +15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"tcp://127.0.0.1:5555" ZmqInAddress - REQ-REP localhost address +2 ZmqInNbr - Number of parameters to be requested +"VelH" +"BldPitchCom1" ZmqInChannels - Channels to be requested at communication time +default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +0 ZmqOutNbr - Number of channels to be broadcasted +none ZmqOutChannels - Channels to be broadcasterd at communication time +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum new file mode 100644 index 0000000000..e4b6870fe1 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum @@ -0,0 +1,103 @@ + +FAST Summary File + +Predictions were generated on 17-Jun-2024 at 12:20:08 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-8-gb0f04e00-dirty + compiled with + NWTC Subroutine Library + ElastoDyn + BeamDyn (unknown version, unknown date) [not called] + InflowWind + AeroDyn14 (unknown version, unknown date) [not called] + AeroDyn + ServoDyn + HydroDyn (unknown version, unknown date) [not called] + SubDyn (unknown version, unknown date) [not called] + ExtPtfm_MCKF (unknown version, unknown date) [not called] + MAP (unknown version, unknown date) [not called] + FEAMooring (unknown version, unknown date) [not called] + MoorDyn (unknown version, unknown date) [not called] + OrcaFlexInterface (unknown version, unknown date) [not called] + IceFloe (unknown version, unknown date) [not called] + IceDyn (unknown version, unknown date) [not called] + + +Modeling a land-based turbine +Description from the FAST input file: + FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) + +Interpolation order for input/output time histories: 2 (quadratic) +Number of correction iterations: 0 + + + Requested Time Steps + ------------------------------------------------- + Component Time Step (s) Subcycles (-) + ----------------- --------------- ------------- + FAST (glue code) 5.000E-03 + InflowWind 5.000E-03 1 + ElastoDyn 5.000E-03 1 + AeroDyn 5.000E-03 1 + ServoDyn 5.000E-03 1 + FAST output files 5.000E-03 1 + + + Requested Channels in FAST Output File(s) + -------------------------------------------- + Number Name Units Generated by + ------ -------------------- -------------------- ------------ + 1 Time (s) OpenFAST + 2 Wind1VelX (m/s) InflowWind + 3 Wind1VelY (m/s) InflowWind + 4 Wind1VelZ (m/s) InflowWind + 5 OoPDefl1 (m) ElastoDyn + 6 IPDefl1 (m) ElastoDyn + 7 TwstDefl1 (deg) ElastoDyn + 8 BldPitch1 (deg) ElastoDyn + 9 Azimuth (deg) ElastoDyn + 10 RotSpeed (rpm) ElastoDyn + 11 GenSpeed (rpm) ElastoDyn + 12 TTDspFA (m) ElastoDyn + 13 TTDspSS (m) ElastoDyn + 14 TTDspTwst (deg) ElastoDyn + 15 Spn2MLxb1 (kN-m) ElastoDyn + 16 Spn2MLyb1 (kN-m) ElastoDyn + 17 RootFxb1 (kN) ElastoDyn + 18 RootFyb1 (kN) ElastoDyn + 19 RootFzb1 (kN) ElastoDyn + 20 RootMxb1 (kN-m) ElastoDyn + 21 RootMyb1 (kN-m) ElastoDyn + 22 RootMyc1 (kN-m) ElastoDyn + 23 RootMyc2 (kN-m) ElastoDyn + 24 RootMyc3 (kN-m) ElastoDyn + 25 RootMzb1 (kN-m) ElastoDyn + 26 RotTorq (kN-m) ElastoDyn + 27 LSSGagMya (kN-m) ElastoDyn + 28 LSSGagMza (kN-m) ElastoDyn + 29 YawBrFxp (kN) ElastoDyn + 30 YawBrFyp (kN) ElastoDyn + 31 YawBrFzp (kN) ElastoDyn + 32 YawBrMxp (kN-m) ElastoDyn + 33 YawBrMyp (kN-m) ElastoDyn + 34 YawBrMzp (kN-m) ElastoDyn + 35 TwrBsFxt (kN) ElastoDyn + 36 TwrBsFyt (kN) ElastoDyn + 37 TwrBsFzt (kN) ElastoDyn + 38 TwrBsMxt (kN-m) ElastoDyn + 39 TwrBsMyt (kN-m) ElastoDyn + 40 TwrBsMzt (kN-m) ElastoDyn + 41 NcIMURAys (deg/s^2) ElastoDyn + 42 NcIMUTAxs (m/s^2) ElastoDyn + 43 RtFldFxh (N) AeroDyn + 44 RtFldFyh (N) AeroDyn + 45 RtFldFzh (N) AeroDyn + 46 RtFldMxh (N-m) AeroDyn + 47 RtFldMyh (N-m) AeroDyn + 48 RtFldMzh (N-m) AeroDyn + 49 RtVAvgxh (m/s) AeroDyn + 50 RtFldCp (-) AeroDyn + 51 RtFldCt (-) AeroDyn + 52 RtArea (m^2) AeroDyn + 53 RtSpeed (rpm) AeroDyn + 54 RtTSR (-) AeroDyn + 55 GenTq (kN-m) ServoDyn + 56 GenPwr (kW) ServoDyn diff --git a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb index 235731d048..deb06bf6a0 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -31,17 +31,17 @@ } ], "source": [ - "rfi = RFInteractor(ZmqInAddress='tcp://127.0.0.1:5555', ZmqOutAddress=None, verbose=False)" + "rfi = RFInteractor(ZmqInAddress='tcp://127.0.0.1:5555', ZmqOutAddress=None, verbose=False, path_out='./zmq_out/', name='OFZMQ_test03')" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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N1+TLl26wM/Pz2KbK1eu4Pjx4+ZtevXqhfz8fBw4cMC8zf79+5Gfn0/X1g6DBw/GsWPHkJycbH517doVU6ZMQXJyMpo2bUrXSAX06dPHqlTz2bNn0ahRIwD0LKmFkpISaLWWywSdTmcuN0vXSX2485r06tULx48fx5UrV8zbbNiwAQEBAejSpYtLf6c3YFIqzp07h02bNqFu3boWn3vsdZI9HZxwG6Zys9999x1z8uRJ5plnnmFCQkKYS5cuKS2aV/J///d/THh4OLNt2zbmypUr5ldJSYl5m/fff58JDw9nVq5cyRw7doy55557eMv8NWzYkNm0aRNz+PBh5rbbbuMtH9ehQwdm7969zN69e5n27dtT6UUHYVeFYhi6RmrgwIEDjF6vZ959913m3LlzzM8//8wEBwczy5YtM29D10l57rvvPqZBgwbmcrMrV65kIiMjmRdeeMG8DV0n91NYWMgcOXKEOXLkCAOAWbBgAXPkyBFzNSF3XRNTGdPBgwczhw8fZjZt2sQ0bNiQys1WY+s6VVRUMOPGjWMaNmzIJCcnW6wpysrKzPvwxOtEioWH88UXXzCNGjVi/P39mc6dO5tLnxLyA4D39f3335u3MRgMzOuvv87ExMQwAQEBTP/+/Zljx45Z7OfWrVvMzJkzmTp16jBBQUHMmDFjmPT0dIttrl27xkyZMoUJDQ1lQkNDmSlTpjA3btxww6/0PriKBV0jdfD3338zCQkJTEBAANO6dWvmm2++sficrpPyFBQUME8//TQTHx/PBAYGMk2bNmXmzp1rsfCh6+R+tm7dyjsX3XfffQzDuPeapKWlMaNHj2aCgoKYOnXqMDNnzmRKS0td+fM9BlvXKTU1VXBNsXXrVvM+PPE6aRiGYeT3gxAEQRAEQRAE4UtQjgVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE6jV1oAb8BgMCArKwuhoaHQaDRKi0MQBEEQBEEQssAwDAoLCxEbGwut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", "text/plain": [ "

" ] @@ -73,2015 +73,8047 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n", - "VelH;BldPitchCom1;\n" + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n", + "Request received: VelH;BldPitchCom1;\n" ] }, + { + "ename": "IndexError", + "evalue": "index 8000 is out of bounds for axis 0 with size 8000", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m count_sampling \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m: \n\u001b[1;32m 4\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling], \n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[43mbld_pitch\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcount_sampling\u001b[49m\u001b[43m]\u001b[49m}\n\u001b[1;32m 7\u001b[0m rfi\u001b[38;5;241m.\u001b[39mfast_rep(rep, verbose\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 8\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", + "\u001b[0;31mIndexError\u001b[0m: index 8000 is out of bounds for axis 0 with size 8000" + ] + } + ], + "source": [ + "count_sampling = 0\n", + "\n", + "while True:\n", + " \n", + " if count_sampling >= len(wind_series):\n", + " count_sampling = 0 \n", + " \n", + " rep = {'VelH': wind_series[count_sampling], \n", + " 'BlPitchCom1': bld_pitch[count_sampling]}\n", + " \n", + " rfi.fast_rep(rep, verbose=True)\n", + " count_sampling += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", @@ -2089,24 +8121,61 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[10], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m: \n\u001b[1;32m 4\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: bld_pitch[count_sampling]}\n\u001b[0;32m----> 5\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", - "File \u001b[0;32m/home/of_rt/real_fast_interactor/real_fast_interactor.py:118\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict)\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfast_rep\u001b[39m(\u001b[38;5;28mself\u001b[39m, rep_dict):\n\u001b[1;32m 115\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 118\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequester\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 119\u001b[0m \u001b[38;5;28mprint\u001b[39m(req_)\n\u001b[1;32m 120\u001b[0m requests \u001b[38;5;241m=\u001b[39m req_\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m;\u001b[39m\u001b[38;5;124m\"\u001b[39m) \n", - "File \u001b[0;32m/home/of_rt/yoda/lib/python3.10/site-packages/zmq/sugar/socket.py:934\u001b[0m, in \u001b[0;36mSocket.recv_string\u001b[0;34m(self, flags, encoding)\u001b[0m\n\u001b[1;32m 914\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_string\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, encoding: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 915\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a unicode string, as sent by send_string.\u001b[39;00m\n\u001b[1;32m 916\u001b[0m \n\u001b[1;32m 917\u001b[0m \u001b[38;5;124;03m Parameters\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 932\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`~Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 933\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 934\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 935\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: buf\u001b[38;5;241m.\u001b[39mdecode(encoding))\n", - "File \u001b[0;32mzmq/backend/cython/socket.pyx:805\u001b[0m, in \u001b[0;36mzmq.backend.cython.socket.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mzmq/backend/cython/socket.pyx:841\u001b[0m, in \u001b[0;36mzmq.backend.cython.socket.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mzmq/backend/cython/socket.pyx:194\u001b[0m, in \u001b[0;36mzmq.backend.cython.socket._recv_copy\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m/home/of_rt/yoda/lib/python3.10/site-packages/zmq/backend/cython/checkrc.pxd:13\u001b[0m, in \u001b[0;36mzmq.backend.cython.checkrc._check_rc\u001b[0;34m()\u001b[0m\n", + "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mVelH\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBlPitchCom1\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:162\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict, verbose)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfast_rep\u001b[39m(\u001b[38;5;28mself\u001b[39m, rep_dict, verbose: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 159\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 162\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequester\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m verbose:\n\u001b[1;32m 165\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRequest received: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat(req_))\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/socket.py:935\u001b[0m, in \u001b[0;36mSocket.recv_string\u001b[0;34m(self, flags, encoding)\u001b[0m\n\u001b[1;32m 915\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_string\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, encoding: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 916\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a unicode string, as sent by send_string.\u001b[39;00m\n\u001b[1;32m 917\u001b[0m \n\u001b[1;32m 918\u001b[0m \u001b[38;5;124;03m Parameters\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 933\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 934\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 935\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 936\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: buf\u001b[38;5;241m.\u001b[39mdecode(encoding))\n", + "File \u001b[0;32m_zmq.py:1137\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:1172\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:1259\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._recv_copy\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ - "count_sampling = 0\n", + "rfi.fast_rep({'VelH': 0, 'BlPitchCom1': 0}, verbose=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from openfast_toolbox.io import FASTOutputFile\n", "\n", - "while True: \n", - " rep = {'VelH': wind_series[count_sampling], 'BlPitchCom1': bld_pitch[count_sampling]}\n", - " rfi.fast_rep(rep)\n", - " count_sampling += 1" + "fastout = FASTOutputFile('../templatesDir/OFZMQ_test03/OFZMQ_test03.outb').toDataFrame()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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eowfP77clwIAuqDqcp/w2WefjY0bN5aeL1myJE499dQ455xzyn0pAKALKnt87Lvvvu2eT5kyJQYPHhwnnHBCuS8FAHRBZY+P/7R+/fqYPn16XHnllVFVVbXNY9ra2qKtra30vFgsVnJJAEAHq+gHTh988MF477334qKLLtruMc3NzVFXV1d6NDU1VXJJAEAHq0oppUqd/LTTTouePXvGww8/vN1jtnXno6mpKVpaWqK2trZSSwMAyqhYLEZdXd1OvX5X7G2X119/PebOnRsPPPDADo8rFApRKBQqtQwAoJOp2NsuU6dOjb59+8aYMWMqdQkAoAuqSHxs2rQppk6dGmPHjo3q6op+phUA6GIqEh9z586NN954Iy655JJKnB4A6MIqclti9OjRUcHPsQIAXZjvdgEAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBkJT4AgKzEBwCQlfgAALISHwBAVuIDAMhKfAAAWYkPACAr8QEAZCU+AICsxAcAkJX4AACyEh8AQFbiAwDISnwAAFmJDwAgK/EBAGQlPgCArMQHAJCV+AAAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBkJT4AgKzEBwCQlfgAALISHwBAVuIDAMhKfAAAWYkPACAr8QEAZCU+AICsxAcAkJX4AACyEh8AQFbiAwDISnwAAFmJDwAgK/EBAGQlPgCArMQHAJCV+AAAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBkJT4AgKzEBwCQVUXi4+23344LLrgg9t577+jdu3ccccQRsWDBgkpcCgDoYqrLfcK1a9fG8ccfHyeddFI88sgj0bdv33jttdfik5/8ZLkvBQB0QWWPj1tuuSWamppi6tSppW0DBw4s92UAgC6q7G+7PPTQQzF8+PA455xzom/fvnHkkUfG3Xffvd3j29raolgstnsAALuvssfHihUr4o477oghQ4bErFmzYty4cXH55ZfHPffcs83jm5ubo66urvRoamoq95IAgE6kKqWUynnCnj17xvDhw+OJJ54obbv88svj2WefjSeffHKr49va2qKtra30vFgsRlNTU7S0tERtbW05lwYAVEixWIy6urqdev0u+52PhoaGOPjgg9ttO+igg+KNN97Y5vGFQiFqa2vbPQCA3VfZ4+P444+PZcuWtdv2yiuvxIABA8p9KQCgCyp7fHzzm9+Mp556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ly+PxsbGGDRoUHz5y1+OFStWRIRZbemhhx6K4cOHxznnnBN9+/aNI488Mu6+++7S/s42r90+Pt59993YuHFj9OvXr932fv36xerVqztoVZ3P5lnsaE6rV6+Onj17xp577rndY3ZHKaW48sorY9SoUXHooYdGhHltafHixfGJT3wiCoVCjBs3LmbOnBkHH3ywOW3DjBkzYuHChdHc3LzVPvNq79hjj4177rknZs2aFXfffXesXr06Ro4cGX//+9/NagsrVqyIO+64I4YMGRKzZs2KcePGxeWXXx733HNPRHS+f1ud7lttK6Wqqqrd85TSVtv4v81pd5/lpZdeGi+88EI8/vjjW+0zr48ceOCBsWjRonjvvffi/vvvj7Fjx8a8efNK+83pI2+++WZMmDAhZs+eHXvsscd2jzOvj5x++uml/33YYYfFiBEjYvDgwTFt2rQ47rjjIsKsNtu0aVMMHz48Jk+eHBERRx55ZCxdujTuuOOOuPDCC0vHdZZ57fZ3PvbZZ5/o3r37VtW2Zs2arQrw42zzJ8h3NKf6+vpYv359rF27drvH7G4uu+yyeOihh+LRRx+N/v37l7abV3s9e/aMT3/60zF8+PBobm6OYcOGxY9//GNz2sKCBQtizZo1cfTRR0d1dXVUV1fHvHnz4ic/+UlUV1eX/r7mtW19+vSJww47LJYvX+7f1hYaGhri4IMPbrftoIMOijfeeCMiOt9/s3b7+OjZs2ccffTRMWfOnHbb58yZEyNHjuygVXU+gwYNivr6+nZzWr9+fcybN680p6OPPjp69OjR7ph33nknlixZstvNMqUUl156aTzwwAPxpz/9KQYNGtRuv3ntWEop2trazGkLJ598cixevDgWLVpUegwfPjzOP//8WLRoUey///7mtQNtbW3x0ksvRUNDg39bWzj++OO3+nUAr7zySgwYMCAiOuF/s8r68dVOavOP2v7iF79IL774YrriiitSnz590l//+teOXlpWra2t6fnnn0/PP/98ioh06623pueff770I8dTpkxJdXV16YEHHkiLFy9O55133jZ/DKt///5p7ty5aeHChelzn/vcbvlja1//+tdTXV1deuyxx9r9mN8HH3xQOsa8PnLttdem+fPnp5UrV6YXXnghXXfddalbt25p9uzZKSVz+m/+86ddUjKv//Stb30rPfbYY2nFihXpqaeeSmeccUaqqakp/bfbrP7tmWeeSdXV1enmm29Oy5cvT7/+9a9T79690/Tp00vHdKZ5fSziI6WUfvrTn6YBAwaknj17pqOOOqr0I5MfJ48++miKiK0eY8eOTSl99KNYEydOTPX19alQKKTPfvazafHixe3O8eGHH6ZLL7007bXXXqlXr17pjDPOSG+88UYH/G0qa1tziog0derU0jHm9ZFLLrmk9P+tfffdN5188sml8EjJnP6bLePDvP5t8++h6NGjR2psbExnn312Wrp0aWm/WbX38MMPp0MPPTQVCoU0dOjQdNddd7Xb35nmVZVSSuW9lwIAsH27/Wc+AIDORXwAAFmJDwAgK/EBAGQlPgCArMQHAJCV+AAAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBk9f8BkBHii/4PcPwAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(fastout['Time_[s]'], fastout['Wind1VelX_[m/s]'])\n", + "plt.plot(fastout['Time_[s]'], fastout['BldPitch1_[deg]'])" ] }, { @@ -2133,7 +8202,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb index 7eb7ba731b..0c578a33c7 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb @@ -69,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +81,27 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['TurbId', ' Time', ' Wind1VelX: (m/s)', ' Azimuth: (deg)', ' GenTq: (kN-m)', ' GenPwr: (kW)', ' OoPDefl1: (m)', ' IPDefl1: (m)'])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "zmqout.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -94,37 +114,1151 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np \n", + "# remove last point because it's the EOF signal\n", + "\n", + "assert np.allclose(fastout['Wind1VelX_[m/s]'][1740:-1], zmqout[' Wind1VelX: (m/s)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['Azimuth_[deg]'][1740:-1], zmqout[' Azimuth: (deg)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenTq_[kN-m]'][1740:-1], zmqout[' GenTq: (kN-m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenPwr_[kW]'][1740:-1], zmqout[' GenPwr: (kW)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['OoPDefl1_[m]'][1740:-1], zmqout[' OoPDefl1: (m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['IPDefl1_[m]'][1740:-1], zmqout[' IPDefl1: (m)'][:-1], atol=1e-5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Test 02 - Message integrity with `DT_OUT != DT_FAST` " + ] + }, + { + "cell_type": "code", + "execution_count": 1, "metadata": {}, "outputs": [ { - "ename": "ValueError", - "evalue": "operands could not be broadcast together with shapes (120000,) (1619,) ", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[14], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m \n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# remove last point because it's the EOF signal\u001b[39;00m\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mallclose\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfastout\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mWind1VelX_[m/s]\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mzmqout\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m Wind1VelX\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43matol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1e-5\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m np\u001b[38;5;241m.\u001b[39mallclose(fastout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAzimuth_[deg]\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], zmqout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m Azimuth\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], atol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1e-5\u001b[39m)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m np\u001b[38;5;241m.\u001b[39mallclose(fastout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mGenTq_[kN-m]\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], zmqout[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m GenTq\u001b[39m\u001b[38;5;124m'\u001b[39m][:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], atol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1e-5\u001b[39m)\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/numpy/core/numeric.py:2241\u001b[0m, in \u001b[0;36mallclose\u001b[0;34m(a, b, rtol, atol, equal_nan)\u001b[0m\n\u001b[1;32m 2170\u001b[0m \u001b[38;5;129m@array_function_dispatch\u001b[39m(_allclose_dispatcher)\n\u001b[1;32m 2171\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mallclose\u001b[39m(a, b, rtol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.e-5\u001b[39m, atol\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1.e-8\u001b[39m, equal_nan\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 2172\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2173\u001b[0m \u001b[38;5;124;03m Returns True if two arrays are element-wise equal within a tolerance.\u001b[39;00m\n\u001b[1;32m 2174\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2239\u001b[0m \n\u001b[1;32m 2240\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 2241\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mall\u001b[39m(\u001b[43misclose\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrtol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrtol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43matol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43matol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mequal_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mequal_nan\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 2242\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mbool\u001b[39m(res)\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/numpy/core/numeric.py:2351\u001b[0m, in \u001b[0;36misclose\u001b[0;34m(a, b, rtol, atol, equal_nan)\u001b[0m\n\u001b[1;32m 2349\u001b[0m yfin \u001b[38;5;241m=\u001b[39m isfinite(y)\n\u001b[1;32m 2350\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mall\u001b[39m(xfin) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mall\u001b[39m(yfin):\n\u001b[0;32m-> 2351\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mwithin_tol\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43matol\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrtol\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2352\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 2353\u001b[0m finite \u001b[38;5;241m=\u001b[39m xfin \u001b[38;5;241m&\u001b[39m yfin\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/numpy/core/numeric.py:2332\u001b[0m, in \u001b[0;36misclose..within_tol\u001b[0;34m(x, y, atol, rtol)\u001b[0m\n\u001b[1;32m 2330\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwithin_tol\u001b[39m(x, y, atol, rtol):\n\u001b[1;32m 2331\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m errstate(invalid\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m'\u001b[39m), _no_nep50_warning():\n\u001b[0;32m-> 2332\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m less_equal(\u001b[38;5;28mabs\u001b[39m(\u001b[43mx\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43my\u001b[49m), atol \u001b[38;5;241m+\u001b[39m rtol \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mabs\u001b[39m(y))\n", - "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (120000,) (1619,) " + "name": "stdout", + "output_type": "stream", + "text": [ + "ZMQ Real Time interactor for FAST initialized. \n", + " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", + "Communication log will be saved at: ./zmq_logs/ \n", + "\n" ] } ], "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np \n", - "# remove last point because it's the EOF signal\n", + "from real_fast_interactor import RFInteractor\n", "\n", - "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-1], zmqout[' Wind1VelX'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['Azimuth_[deg]'][:-1], zmqout[' Azimuth'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenTq_[kN-m]'][:-1], zmqout[' GenTq'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenPwr_[kW]'][:-1], zmqout[' GenPwr'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['OoPDefl1_[m]'][:-1], zmqout[' OoPDefl1'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['IPDefl1_[m]'][:-1], zmqout[' IPDefl1'][:-1], atol=1e-5)" + "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", + " live_plot=False, name='OFZMQ_test02')" ] }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subscription to FAST channel closed.\n" + ] + } + ], + "source": [ + "rfi.fast_sub(100, plot=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from openfast_toolbox.io import FASTOutputFile\n", + "\n", + "fastout = FASTOutputFile('../templatesDir/OFZMQ_test02/OFZMQ_test02.outb').toDataFrame()\n", + "zmqout = rfi.sub_dict " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import gzip \n", + "import pickle \n", + "\n", + "with open('./zmq_logs/OFZMQ_test02.pkl.gz', 'rb') as f:\n", + " zmqout = pickle.load(gzip.open(f))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "dt_fast = 0.005 \n", + "dt_zmq_out = 0.5 \n", + "step = int(dt_zmq_out/dt_fast)\n", + "\n", + "\n", + "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-1:step], zmqout[' Wind1VelX: (m/s)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['Azimuth_[deg]'][:-1:step], zmqout[' Azimuth: (deg)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenTq_[kN-m]'][:-1:step], zmqout[' GenTq: (kN-m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenPwr_[kW]'][:-1:step], zmqout[' GenPwr: (kW)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['OoPDefl1_[m]'][:-1:step], zmqout[' OoPDefl1: (m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['IPDefl1_[m]'][:-1:step], zmqout[' IPDefl1: (m)'][:-1], atol=1e-5)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "100.0" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 0.005,\n", + " 0.01,\n", + " 0.015,\n", + " 0.02,\n", + " 0.025,\n", + " 0.03,\n", + " 0.035,\n", + " 0.04,\n", + " 0.045,\n", + " 0.05,\n", + " 0.055,\n", + " 0.06,\n", + " 0.065,\n", + " 0.07,\n", + " 0.075,\n", + " 0.08,\n", + " 0.085,\n", + " 0.09,\n", + " 0.095,\n", + " 0.1,\n", + " 0.105,\n", + " 0.11,\n", + " 0.115,\n", + " 0.12,\n", + " 0.125,\n", + " 0.13,\n", + " 0.135,\n", + " 0.14,\n", + " 0.145,\n", + " 0.15,\n", + " 0.155,\n", + " 0.16,\n", + " 0.165,\n", + " 0.17,\n", + " 0.175,\n", + " 0.18,\n", + " 0.185,\n", + " 0.19,\n", + " 0.195,\n", + " 0.2,\n", + " 0.205,\n", + " 0.21,\n", + " 0.215,\n", + " 0.22,\n", + " 0.225,\n", + " 0.23,\n", + " 0.235,\n", + " 0.24,\n", + " 0.245,\n", + " 0.25,\n", + " 0.255,\n", + " 0.26,\n", + " 0.265,\n", + " 0.27,\n", + " 0.275,\n", + " 0.28,\n", + " 0.285,\n", + " 0.29,\n", + " 0.295,\n", + " 0.3,\n", + " 0.305,\n", + " 0.31,\n", + " 0.315,\n", + " 0.32,\n", + " 0.325,\n", + " 0.33,\n", + " 0.335,\n", + " 0.34,\n", + " 0.345,\n", + " 0.35,\n", + " 0.355,\n", + " 0.36,\n", + " 0.365,\n", + " 0.37,\n", + " 0.375,\n", + " 0.38,\n", + " 0.385,\n", + " 0.39,\n", + " 0.395,\n", + " 0.4,\n", + " 0.405,\n", + " 0.41,\n", + " 0.415,\n", + " 0.42,\n", + " 0.425,\n", + " 0.43,\n", + " 0.435,\n", + " 0.44,\n", + " 0.445,\n", + " 0.45,\n", + " 0.455,\n", + " 0.46,\n", + " 0.465,\n", + " 0.47,\n", + " 0.475,\n", + " 0.48,\n", + " 0.485,\n", + " 0.49,\n", + " 0.495,\n", + " 0.5,\n", + " 0.505,\n", + " 0.51,\n", + " 0.515,\n", + " 0.52,\n", + " 0.525,\n", + " 0.53,\n", + " 0.535,\n", + " 0.54,\n", + " 0.545,\n", + " 0.55,\n", + " 0.555,\n", + " 0.56,\n", + " 0.565,\n", + " 0.57,\n", + " 0.575,\n", + " 0.58,\n", + " 0.585,\n", + " 0.59,\n", + " 0.595,\n", + " 0.6,\n", + " 0.605,\n", + " 0.61,\n", + " 0.615,\n", + " 0.62,\n", + " 0.625,\n", + " 0.63,\n", + " 0.635,\n", + " 0.64,\n", + " 0.645,\n", + " 0.65,\n", + " 0.655,\n", + " 0.66,\n", + " 0.665,\n", + " 0.67,\n", + " 0.675,\n", + " 0.68,\n", + " 0.685,\n", + " 0.69,\n", + " 0.695,\n", + " 0.7,\n", + " 0.705,\n", + " 0.71,\n", + " 0.715,\n", + " 0.72,\n", + " 0.725,\n", + " 0.73,\n", + " 0.735,\n", + " 0.74,\n", + " 0.745,\n", + " 0.75,\n", + " 0.755,\n", + " 0.76,\n", + " 0.765,\n", + " 0.77,\n", + " 0.775,\n", + " 0.78,\n", + " 0.785,\n", + " 0.79,\n", + " 0.795,\n", + " 0.8,\n", + " 0.805,\n", + " 0.81,\n", + " 0.815,\n", + " 0.82,\n", + " 0.825,\n", + " 0.83,\n", + " 0.835,\n", + " 0.84,\n", + " 0.845,\n", + " 0.85,\n", + " 0.855,\n", + " 0.86,\n", + " 0.865,\n", + " 0.87,\n", + " 0.875,\n", + " 0.88,\n", + " 0.885,\n", + " 0.89,\n", + " 0.895,\n", + " 0.9,\n", + " 0.905,\n", + " 0.91,\n", + " 0.915,\n", + " 0.92,\n", + " 0.925,\n", + " 0.93,\n", + " 0.935,\n", + " 0.94,\n", + " 0.945,\n", + " 0.95,\n", + " 0.955,\n", + " 0.96,\n", + " 0.965,\n", + " 0.97,\n", + " 0.975,\n", + " 0.98,\n", + " 0.985,\n", + " 0.99,\n", + " 0.995,\n", + " 1,\n", + " 1.005,\n", + " 1.01,\n", + " 1.015,\n", + " 1.02,\n", + " 1.025,\n", + " 1.03,\n", + " 1.035,\n", + " 1.04,\n", + " 1.045,\n", + " 1.05,\n", + " 1.055,\n", + " 1.06,\n", + " 1.065,\n", + " 1.07,\n", + " 1.075,\n", + " 1.08,\n", + " 1.085,\n", + " 1.09,\n", + " 1.095,\n", + " 1.1,\n", + " 1.105,\n", + " 1.11,\n", + " 1.115,\n", + " 1.12,\n", + " 1.125,\n", + " 1.13,\n", + " 1.135,\n", + " 1.14,\n", + " 1.145,\n", + " 1.15,\n", + " 1.155,\n", + " 1.16,\n", + " 1.165,\n", + " 1.17,\n", + " 1.175,\n", + " 1.18,\n", + " 1.185,\n", + " 1.19,\n", + " 1.195,\n", + " 1.2,\n", + " 1.205,\n", + " 1.21,\n", + " 1.215,\n", + " 1.22,\n", + " 1.225,\n", + " 1.23,\n", + " 1.235,\n", + " 1.24,\n", + " 1.245,\n", + " 1.25,\n", + " 1.255,\n", + " 1.26,\n", + " 1.265,\n", + " 1.27,\n", + " 1.275,\n", + " 1.28,\n", + " 1.285,\n", + " 1.29,\n", + " 1.295,\n", + " 1.3,\n", + " 1.305,\n", + " 1.31,\n", + " 1.315,\n", + " 1.32,\n", + " 1.325,\n", + " 1.33,\n", + " 1.335,\n", + " 1.34,\n", + " 1.345,\n", + " 1.35,\n", + " 1.355,\n", + " 1.36,\n", + " 1.365,\n", + " 1.37,\n", + " 1.375,\n", + " 1.38,\n", + " 1.385,\n", + " 1.39,\n", + " 1.395,\n", + " 1.4,\n", + " 1.405,\n", + " 1.41,\n", + " 1.415,\n", + " 1.42,\n", + " 1.425,\n", + " 1.43,\n", + " 1.435,\n", + " 1.44,\n", + " 1.445,\n", + " 1.45,\n", + " 1.455,\n", + " 1.46,\n", + " 1.465,\n", + " 1.47,\n", + " 1.475,\n", + " 1.48,\n", + " 1.485,\n", + " 1.49,\n", + " 1.495,\n", + " 1.5,\n", + " 1.505,\n", + " 1.51,\n", + " 1.515,\n", + " 1.52,\n", + " 1.525,\n", + " 1.53,\n", + " 1.535,\n", + " 1.54,\n", + " 1.545,\n", + " 1.55,\n", + " 1.555,\n", + " 1.56,\n", + " 1.565,\n", + " 1.57,\n", + " 1.575,\n", + " 1.58,\n", + " 1.585,\n", + " 1.59,\n", + " 1.595,\n", + " 1.6,\n", + " 1.605,\n", + " 1.61,\n", + " 1.615,\n", + " 1.62,\n", + " 1.625,\n", + " 1.63,\n", + " 1.635,\n", + " 1.64,\n", + " 1.645,\n", + " 1.65,\n", + " 1.655,\n", + " 1.66,\n", + " 1.665,\n", + " 1.67,\n", + " 1.675,\n", + " 1.68,\n", + " 1.685,\n", + " 1.69,\n", + " 1.695,\n", + " 1.7,\n", + " 1.705,\n", + " 1.71,\n", + " 1.715,\n", + " 1.72,\n", + " 1.725,\n", + " 1.73,\n", + " 1.735,\n", + " 1.74,\n", + " 1.745,\n", + " 1.75,\n", + " 1.755,\n", + " 1.76,\n", + " 1.765,\n", + " 1.77,\n", + " 1.775,\n", + " 1.78,\n", + " 1.785,\n", + " 1.79,\n", + " 1.795,\n", + " 1.8,\n", + " 1.805,\n", + " 1.81,\n", + " 1.815,\n", + " 1.82,\n", + " 1.825,\n", + " 1.83,\n", + " 1.835,\n", + " 1.84,\n", + " 1.845,\n", + " 1.85,\n", + " 1.855,\n", + " 1.86,\n", + " 1.865,\n", + " 1.87,\n", + " 1.875,\n", + " 1.88,\n", + " 1.885,\n", + " 1.89,\n", + " 1.895,\n", + " 1.9,\n", + " 1.905,\n", + " 1.91,\n", + " 1.915,\n", + " 1.92,\n", + " 1.925,\n", + " 1.93,\n", + " 1.935,\n", + " 1.94,\n", + " 1.945,\n", + " 1.95,\n", + " 1.955,\n", + " 1.96,\n", + " 1.965,\n", + " 1.97,\n", + " 1.975,\n", + " 1.98,\n", + " 1.985,\n", + " 1.99,\n", + " 1.995,\n", + " 2,\n", + " 2.005,\n", + " 2.01,\n", + " 2.015,\n", + " 2.02,\n", + " 2.025,\n", + " 2.03,\n", + " 2.035,\n", + " 2.04,\n", + " 2.045,\n", + " 2.05,\n", + " 2.055,\n", + " 2.06,\n", + " 2.065,\n", + " 2.07,\n", + " 2.075,\n", + " 2.08,\n", + " 2.085,\n", + " 2.09,\n", + " 2.095,\n", + " 2.1,\n", + " 2.105,\n", + " 2.11,\n", + " 2.115,\n", + " 2.12,\n", + " 2.125,\n", + " 2.13,\n", + " 2.135,\n", + " 2.14,\n", + " 2.145,\n", + " 2.15,\n", + " 2.155,\n", + " 2.16,\n", + " 2.165,\n", + " 2.17,\n", + " 2.175,\n", + " 2.18,\n", + " 2.185,\n", + " 2.19,\n", + " 2.195,\n", + " 2.2,\n", + " 2.205,\n", + " 2.21,\n", + " 2.215,\n", + " 2.22,\n", + " 2.225,\n", + " 2.23,\n", + " 2.235,\n", + " 2.24,\n", + " 2.245,\n", + " 2.25,\n", + " 2.255,\n", + " 2.26,\n", + " 2.265,\n", + " 2.27,\n", + " 2.275,\n", + " 2.28,\n", + " 2.285,\n", + " 2.29,\n", + " 2.295,\n", + " 2.3,\n", + " 2.305,\n", + " 2.31,\n", + " 2.315,\n", + " 2.32,\n", + " 2.325,\n", + " 2.33,\n", + " 2.335,\n", + " 2.34,\n", + " 2.345,\n", + " 2.35,\n", + " 2.355,\n", + " 2.36,\n", + " 2.365,\n", + " 2.37,\n", + " 2.375,\n", + " 2.38,\n", + " 2.385,\n", + " 2.39,\n", + " 2.395,\n", + " 2.4,\n", + " 2.405,\n", + " 2.41,\n", + " 2.415,\n", + " 2.42,\n", + " 2.425,\n", + " 2.43,\n", + " 2.435,\n", + " 2.44,\n", + " 2.445,\n", + " 2.45,\n", + " 2.455,\n", + " 2.46,\n", + " 2.465,\n", + " 2.47,\n", + " 2.475,\n", + " 2.48,\n", + " 2.485,\n", + " 2.49,\n", + " 2.495,\n", + " 2.5,\n", + " 2.505,\n", + " 2.51,\n", + " 2.515,\n", + " 2.52,\n", + " 2.525,\n", + " 2.53,\n", + " 2.535,\n", + " 2.54,\n", + " 2.545,\n", + " 2.55,\n", + " 2.555,\n", + " 2.56,\n", + " 2.565,\n", + " 2.57,\n", + " 2.575,\n", + " 2.58,\n", + " 2.585,\n", + " 2.59,\n", + " 2.595,\n", + " 2.6,\n", + " 2.605,\n", + " 2.61,\n", + " 2.615,\n", + " 2.62,\n", + " 2.625,\n", + " 2.63,\n", + " 2.635,\n", + " 2.64,\n", + " 2.645,\n", + " 2.65,\n", + " 2.655,\n", + " 2.66,\n", + " 2.665,\n", + " 2.67,\n", + " 2.675,\n", + " 2.68,\n", + " 2.685,\n", + " 2.69,\n", + " 2.695,\n", + " 2.7,\n", + " 2.705,\n", + " 2.71,\n", + " 2.715,\n", + " 2.72,\n", + " 2.725,\n", + " 2.73,\n", + " 2.735,\n", + " 2.74,\n", + " 2.745,\n", + " 2.75,\n", + " 2.755,\n", + " 2.76,\n", + " 2.765,\n", + " 2.77,\n", + " 2.775,\n", + " 2.78,\n", + " 2.785,\n", + " 2.79,\n", + " 2.795,\n", + " 2.8,\n", + " 2.805,\n", + " 2.81,\n", + " 2.815,\n", + " 2.82,\n", + " 2.825,\n", + " 2.83,\n", + " 2.835,\n", + " 2.84,\n", + " 2.845,\n", + " 2.85,\n", + " 2.855,\n", + " 2.86,\n", + " 2.865,\n", + " 2.87,\n", + " 2.875,\n", + " 2.88,\n", + " 2.885,\n", + " 2.89,\n", + " 2.895,\n", + " 2.9,\n", + " 2.905,\n", + " 2.91,\n", + " 2.915,\n", + " 2.92,\n", + " 2.925,\n", + " 2.93,\n", + " 2.935,\n", + " 2.94,\n", + " 2.945,\n", + " 2.95,\n", + " 2.955,\n", + " 2.96,\n", + " 2.965,\n", + " 2.97,\n", + " 2.975,\n", + " 2.98,\n", + " 2.985,\n", + " 2.99,\n", + " 2.995,\n", + " 3,\n", + " 3.005,\n", + " 3.01,\n", + " 3.015,\n", + " 3.02,\n", + " 3.025,\n", + " 3.03,\n", + " 3.035,\n", + " 3.04,\n", + " 3.045,\n", + " 3.05,\n", + " 3.055,\n", + " 3.06,\n", + " 3.065,\n", + " 3.07,\n", + " 3.075,\n", + " 3.08,\n", + " 3.085,\n", + " 3.09,\n", + " 3.095,\n", + " 3.1,\n", + " 3.105,\n", + " 3.11,\n", + " 3.115,\n", + " 3.12,\n", + " 3.125,\n", + " 3.13,\n", + " 3.135,\n", + " 3.14,\n", + " 3.145,\n", + " 3.15,\n", + " 3.155,\n", + " 3.16,\n", + " 3.165,\n", + " 3.17,\n", + " 3.175,\n", + " 3.18,\n", + " 3.185,\n", + " 3.19,\n", + " 3.195,\n", + " 3.2,\n", + " 3.205,\n", + " 3.21,\n", + " 3.215,\n", + " 3.22,\n", + " 3.225,\n", + " 3.23,\n", + " 3.235,\n", + " 3.24,\n", + " 3.245,\n", + " 3.25,\n", + " 3.255,\n", + " 3.26,\n", + " 3.265,\n", + " 3.27,\n", + " 3.275,\n", + " 3.28,\n", + " 3.285,\n", + " 3.29,\n", + " 3.295,\n", + " 3.3,\n", + " 3.305,\n", + " 3.31,\n", + " 3.315,\n", + " 3.32,\n", + " 3.325,\n", + " 3.33,\n", + " 3.335,\n", + " 3.34,\n", + " 3.345,\n", + " 3.35,\n", + " 3.355,\n", + " 3.36,\n", + " 3.365,\n", + " 3.37,\n", + " 3.375,\n", + " 3.38,\n", + " 3.385,\n", + " 3.39,\n", + " 3.395,\n", + " 3.4,\n", + " 3.405,\n", + " 3.41,\n", + " 3.415,\n", + " 3.42,\n", + " 3.425,\n", + " 3.43,\n", + " 3.435,\n", + " 3.44,\n", + " 3.445,\n", + " 3.45,\n", + " 3.455,\n", + " 3.46,\n", + " 3.465,\n", + " 3.47,\n", + " 3.475,\n", + " 3.48,\n", + " 3.485,\n", + " 3.49,\n", + " 3.495,\n", + " 3.5,\n", + " 3.505,\n", + " 3.51,\n", + " 3.515,\n", + " 3.52,\n", + " 3.525,\n", + " 3.53,\n", + " 3.535,\n", + " 3.54,\n", + " 3.545,\n", + " 3.55,\n", + " 3.555,\n", + " 3.56,\n", + " 3.565,\n", + " 3.57,\n", + " 3.575,\n", + " 3.58,\n", + " 3.585,\n", + " 3.59,\n", + " 3.595,\n", + " 3.6,\n", + " 3.605,\n", + " 3.61,\n", + " 3.615,\n", + " 3.62,\n", + " 3.625,\n", + " 3.63,\n", + " 3.635,\n", + " 3.64,\n", + " 3.645,\n", + " 3.65,\n", + " 3.655,\n", + " 3.66,\n", + " 3.665,\n", + " 3.67,\n", + " 3.675,\n", + " 3.68,\n", + " 3.685,\n", + " 3.69,\n", + " 3.695,\n", + " 3.7,\n", + " 3.705,\n", + " 3.71,\n", + " 3.715,\n", + " 3.72,\n", + " 3.725,\n", + " 3.73,\n", + " 3.735,\n", + " 3.74,\n", + " 3.745,\n", + " 3.75,\n", + " 3.755,\n", + " 3.76,\n", + " 3.765,\n", + " 3.77,\n", + " 3.775,\n", + " 3.78,\n", + " 3.785,\n", + " 3.79,\n", + " 3.795,\n", + " 3.8,\n", + " 3.805,\n", + " 3.81,\n", + " 3.815,\n", + " 3.82,\n", + " 3.825,\n", + " 3.83,\n", + " 3.835,\n", + " 3.84,\n", + " 3.845,\n", + " 3.85,\n", + " 3.855,\n", + " 3.86,\n", + " 3.865,\n", + " 3.87,\n", + " 3.875,\n", + " 3.88,\n", + " 3.885,\n", + " 3.89,\n", + " 3.895,\n", + " 3.9,\n", + " 3.905,\n", + " 3.91,\n", + " 3.915,\n", + " 3.92,\n", + " 3.925,\n", + " 3.93,\n", + " 3.935,\n", + " 3.94,\n", + " 3.945,\n", + " 3.95,\n", + " 3.955,\n", + " 3.96,\n", + " 3.965,\n", + " 3.97,\n", + " 3.975,\n", + " 3.98,\n", + " 3.985,\n", + " 3.99,\n", + " 3.995,\n", + " 4,\n", + " 4.005,\n", + " 4.01,\n", + " 4.015,\n", + " 4.02,\n", + " 4.025,\n", + " 4.03,\n", + " 4.035,\n", + " 4.04,\n", + " 4.045,\n", + " 4.05,\n", + " 4.055,\n", + " 4.06,\n", + " 4.065,\n", + " 4.07,\n", + " 4.075,\n", + " 4.08,\n", + " 4.085,\n", + " 4.09,\n", + " 4.095,\n", + " 4.1,\n", + " 4.105,\n", + " 4.11,\n", + " 4.115,\n", + " 4.12,\n", + " 4.125,\n", + " 4.13,\n", + " 4.135,\n", + " 4.14,\n", + " 4.145,\n", + " 4.15,\n", + " 4.155,\n", + " 4.16,\n", + " 4.165,\n", + " 4.17,\n", + " 4.175,\n", + " 4.18,\n", + " 4.185,\n", + " 4.19,\n", + " 4.195,\n", + " 4.2,\n", + " 4.205,\n", + " 4.21,\n", + " 4.215,\n", + " 4.22,\n", + " 4.225,\n", + " 4.23,\n", + " 4.235,\n", + " 4.24,\n", + " 4.245,\n", + " 4.25,\n", + " 4.255,\n", + " 4.26,\n", + " 4.265,\n", + " 4.27,\n", + " 4.275,\n", + " 4.28,\n", + " 4.285,\n", + " 4.29,\n", + " 4.295,\n", + " 4.3,\n", + " 4.305,\n", + " 4.31,\n", + " 4.315,\n", + " 4.32,\n", + " 4.325,\n", + " 4.33,\n", + " 4.335,\n", + " 4.34,\n", + " 4.345,\n", + " 4.35,\n", + " 4.355,\n", + " 4.36,\n", + " 4.365,\n", + " 4.37,\n", + " 4.375,\n", + " 4.38,\n", + " 4.385,\n", + " 4.39,\n", + " 4.395,\n", + " 4.4,\n", + " 4.405,\n", + " 4.41,\n", + " 4.415,\n", + " 4.42,\n", + " 4.425,\n", + " 4.43,\n", + " 4.435,\n", + " 4.44,\n", + " 4.445,\n", + " 4.45,\n", + " 4.455,\n", + " 4.46,\n", + " 4.465,\n", + " 4.47,\n", + " 4.475,\n", + " 4.48,\n", + " 4.485,\n", + " 4.49,\n", + " 4.495,\n", + " 4.5,\n", + " 4.505,\n", + " 4.51,\n", + " 4.515,\n", + " 4.52,\n", + " 4.525,\n", + " 4.53,\n", + " 4.535,\n", + " 4.54,\n", + " 4.545,\n", + " 4.55,\n", + " 4.555,\n", + " 4.56,\n", + " 4.565,\n", + " 4.57,\n", + " 4.575,\n", + " 4.58,\n", + " 4.585,\n", + " 4.59,\n", + " 4.595,\n", + " 4.6,\n", + " 4.605,\n", + " 4.61,\n", + " 4.615,\n", + " 4.62,\n", + " 4.625,\n", + " 4.63,\n", + " 4.635,\n", + " 4.64,\n", + " 4.645,\n", + " 4.65,\n", + " 4.655,\n", + " 4.66,\n", + " 4.665,\n", + " 4.67,\n", + " 4.675,\n", + " 4.68,\n", + " 4.685,\n", + " 4.69,\n", + " 4.695,\n", + " 4.7,\n", + " 4.705,\n", + " 4.71,\n", + " 4.715,\n", + " 4.72,\n", + " 4.725,\n", + " 4.73,\n", + " 4.735,\n", + " 4.74,\n", + " 4.745,\n", + " 4.75,\n", + " 4.755,\n", + " 4.76,\n", + " 4.765,\n", + " 4.77,\n", + " 4.775,\n", + " 4.78,\n", + " 4.785,\n", + " 4.79,\n", + " 4.795,\n", + " 4.8,\n", + " 4.805,\n", + " 4.81,\n", + " 4.815,\n", + " 4.82,\n", + " 4.825,\n", + " 4.83,\n", + " 4.835,\n", + " 4.84,\n", + " 4.845,\n", + " 4.85,\n", + " 4.855,\n", + " 4.86,\n", + " 4.865,\n", + " 4.87,\n", + " 4.875,\n", + " 4.88,\n", + " 4.885,\n", + " 4.89,\n", + " 4.895,\n", + " 4.9,\n", + " 4.905,\n", + " 4.91,\n", + " 4.915,\n", + " 4.92,\n", + " 4.925,\n", + " 4.93,\n", + " 4.935,\n", + " 4.94,\n", + " 4.945,\n", + " 4.95,\n", + " 4.955,\n", + " 4.96,\n", + " 4.965,\n", + " 4.97,\n", + " 4.975,\n", + " 4.98,\n", + " 4.985,\n", + " 4.99,\n", + " 4.995,\n", + " ...]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py index ab1e8818ac..c23c5b3013 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -155,12 +155,15 @@ def fast_sub(self, N_plots_update = 100, plot: bool = True): pass - def fast_rep(self, rep_dict): + def fast_rep(self, rep_dict, verbose: bool = False): """ """ req_ = self.requester.recv_string() - print(req_) + + if verbose: + print('Request received: {}'.format(req_)) + requests = req_.split(";") response = ';'.join(map(str, rep_dict.values())) + ';' From 45b95ade221f6c1c0b434989925fe380b50d7198 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Tue, 18 Jun 2024 11:03:20 +0200 Subject: [PATCH 10/14] test 05 (zmq in dt) in progress.. --- .../openfast-library/src/FAST_Registry.txt | 3 +- modules/openfast-library/src/FAST_Subs.f90 | 99 +- modules/openfast-library/src/FAST_Types.f90 | 54 + .../NRELOffshrBsline5MW_InflowWind.dat | 2 +- .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 4 +- .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 6 +- .../OFZMQ_test03/OFZMQ_test03.AD.sum | 17 +- .../OFZMQ_test03/OFZMQ_test03.ED.sum | 2 +- .../OFZMQ_test03/OFZMQ_test03.SrvD.sum | 4 +- .../OFZMQ_test03/OFZMQ_test03.UA.sum | 2 +- .../OFZMQ_test03/OFZMQ_test03.ech | 10 +- .../OFZMQ_test03/OFZMQ_test03.fst | 7 +- .../OFZMQ_test03/OFZMQ_test03.sum | 2 +- .../zmq_python_toolbox/REPtests.ipynb | 8271 +---------------- .../real_fast_interactor.py | 39 +- 15 files changed, 407 insertions(+), 8115 deletions(-) diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index 5ac610f47f..6c2b4bbed4 100644 --- a/modules/openfast-library/src/FAST_Registry.txt +++ b/modules/openfast-library/src/FAST_Registry.txt @@ -197,7 +197,8 @@ typedef ^ FAST_ParameterType IntKi LinInterpOrder - - - "Interpolat typedef ^ FAST_ParameterType LOGICAL ZmqOn - .false. - "zmq activation flag" - typedef ^ FAST_ParameterType CHARACTER(1024) ZmqInAddress - - - "address for ZMQ REQ-REP protocol" - typedef ^ FAST_ParameterType IntKi ZmqInNbr - - - "number of ZMQ REQ-REP channels" - -typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqInChannels {:} - - "address for ZMQ REQ-REP protocol" - +typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqInChannels {:} - - "address for ZMQ REQ-REP protocol" - +typedef ^ FAST_ParameterType ReKi ZmqInChannelsAry {:} - - "array to pass ZMQ PUB-SUB protocol" - typedef ^ FAST_ParameterType ReKi ZmqInDT - - - "time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation" typedef ^ FAST_ParameterType CHARACTER(1024) ZmqOutAddress - - - "address for ZMQ PUB-SUB protocol" - typedef ^ FAST_ParameterType IntKi ZmqOutNbr - - - "number of ZMQ PUB-SUB channels" - diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 253cdcad26..bfa43fe93e 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -3562,7 +3562,7 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS p%ZmqInAddress = trim(p%ZmqInAddress) // c_null_char - ! check valid address to be put here + ! TODO: Adding one slot in the In array for the TurbID message tag CALL ReadVar( UnIn, InputFile, p%ZmqInNbr, "ZmqInNbr", "Number of parameters to be requested ", ErrStat2, ErrMsg2, UnEc) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3586,7 +3586,7 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS end if ! Warn user that if ZmqIn requests wind speed, OF will treat it as steady across the rotor, compromising wake models - if ( any( p%ZmqInChannels == 'Wind1VelX' ) .or. any( p%ZmqInChannels == 'Wind1VelY' ) .or. any( p%ZmqInChannels == 'Wind1VelZ' ) ) then + if ( any( p%ZmqInChannels == 'VelH' ) .or. any( p%ZmqInChannels == 'VelV' ) .or. any( p%ZmqInChannels == 'AngleV' ) .or.any(p%ZmqInChannels == 'AngleH')) then call WrScr("Warning: ZMQ input requests wind speed. OpenFAST will treat it as steady across the rotor, compromising wake meandering. This warning will not be shown again.") end if @@ -3611,6 +3611,12 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS end if end if + CALL AllocAry(p%ZmqInChannelsAry, p%ZmqInNbr + 1, "ZmqInChannelsAry", Errstat2, ErrMsg2) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if ! ------------------------------------------- Broadcasting settings ---------------------------------------------------- CALL ReadVar( UnIn, InputFile, p%ZmqOutAddress, "ZmqOutAddress", "PUB-SUB localhost address ", ErrStat2, ErrMsg2, UnEc) @@ -5137,13 +5143,13 @@ SUBROUTINE FAST_Solution_T(t_initial, n_t_global, Turbine, ErrStat, ErrMsg ) CALL FAST_Solution(t_initial, n_t_global, Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX, & Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & - Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, Turbine%p_FAST%ZmqOutChannelsAry, Turbine%TurbID, ErrStat, ErrMsg ) + Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, Turbine%p_FAST%ZmqInChannelsAry, Turbine%p_FAST%ZmqOutChannelsAry, Turbine%TurbID, ErrStat, ErrMsg ) END SUBROUTINE FAST_Solution_T !---------------------------------------------------------------------------------------------------------------------------------- !> This routine takes data from n_t_global and gets values at n_t_global + 1 SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & - MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) + MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ZmqInChannelsAry, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) use iso_c_binding !use zmq_req @@ -5197,7 +5203,7 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, CHARACTER(*), PARAMETER :: RoutineName = 'FAST_Solution' ! ----------------------------------------------------------------------------- REAL(DbKi), allocatable, intent(inout) :: ZmqOutChannelsAry(:) - REAL(DbKi) :: ZmqInChannelsAry(p_FAST%ZmqInNbr) + REAL(DbKi), allocatable, intent(inout) :: ZmqInChannelsAry(:) character(len=1024) :: tmp_str ! ----------------------------------------------------------------------------- @@ -5501,52 +5507,63 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, ! Inserting here call to ZMQ to retrieve and override routines' outputs if ( (p_FAST%ZmqOn) .and. (p_FAST%ZmqInNbr > 0)) then - + ! print *, 'Zmq Channels: ', p_FAST%ZmqInChannels ! Check if there's need to communicate with the ZMQ socket (the values will be enforced for next time step) to update values - if (mod(p_FAST%ZmqOutDT, t_global_next) == 0) then + !if (mod(p_FAST%ZmqOutDT, t_global_next) == 0) then - ! TurbID = p_FAST%TurbID + ! TurbID = p_FAST%TurbID + print *, 'ZmqInArray: ', ZmqInChannelsAry + + if (mod(t_global_next, p_FAST%ZmqInDT) == 0) then ZmqInChannelsAry = 0.0_DbKi call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) + end if - end if ! otherwise we'll keep the values from the previous time step + print *, 'Zmq In Comm happened: ', mod(t_global_next, p_FAST%ZmqInDT) == 0 + print *, 'ZmqInArray (after comm): ', ZmqInChannelsAry + + ! Forcing turbine ID agreement in this first version + ! ZmqInChannelsAry(1) = TurbID + + ! print *, 'ZmqInChannelsAry: ', ZmqInChannelsAry + ! end if ! otherwise we'll keep the values from the previous time step ! call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) - If (ZmqInChannelsAry(1) == TurbID) then - - do i = 1, p_FAST%ZmqInNbr - tmp_str = trim(p_FAST%ZmqInChannels(i)) - - select case (tmp_str) ! Be careful with dependencies - case('VelH') - IfW%p%FlowField%Uniform%VelH = ZmqInChannelsAry(i) - case('VelV') - IfW%p%FlowField%Uniform%VelV = ZmqInChannelsAry(i) - case('VelGust') - IfW%p%FlowField%Uniform%VelGust = ZmqInChannelsAry(i) - case('AngleV') - IfW%p%FlowField%Uniform%AngleV = ZmqInChannelsAry(i) - case('AngleH') - IfW%p%FlowField%Uniform%AngleH = ZmqInChannelsAry(i) - case('BldPitchCom1') - SrvD%y%BlPitchCom(1) = ZmqInChannelsAry(i) - case('BldPitchCom2') - SrvD%y%BlPitchCom(2) = ZmqInChannelsAry(i) - case('BldPitchCom3') - SrvD%y%BlPitchCom(3) = ZmqInChannelsAry(i) - case('YawMom') - SrvD%y%YawMom = ZmqInChannelsAry(i) - case('GenTrq') - SrvD%y%GenTrq = ZmqInChannelsAry(i) - case('HSSBrFrac') - SrvD%y%hssbrtrqc = ZmqInChannelsAry(i) - end select - - end do + ! If (ZmqInChannelsAry(1) == TurbID) then + ! print *, 'ZmqInChannelsAry: ', ZmqInChannelsAry + do i = 1, p_FAST%ZmqInNbr + tmp_str = trim(p_FAST%ZmqInChannels(i)) + + select case (tmp_str) ! Be careful with dependencies + case('VelH') + IfW%p%FlowField%Uniform%VelH = ZmqInChannelsAry(i) + case('VelV') + IfW%p%FlowField%Uniform%VelV = ZmqInChannelsAry(i) + case('VelGust') + IfW%p%FlowField%Uniform%VelGust = ZmqInChannelsAry(i) + case('AngleV') + IfW%p%FlowField%Uniform%AngleV = ZmqInChannelsAry(i) + case('AngleH') + IfW%p%FlowField%Uniform%AngleH = ZmqInChannelsAry(i) + case('BldPitchCom1') + SrvD%y%BlPitchCom(1) = ZmqInChannelsAry(i) + case('BldPitchCom2') + SrvD%y%BlPitchCom(2) = ZmqInChannelsAry(i) + case('BldPitchCom3') + SrvD%y%BlPitchCom(3) = ZmqInChannelsAry(i) + case('YawMom') + SrvD%y%YawMom = ZmqInChannelsAry(i) + case('GenTrq') + SrvD%y%GenTrq = ZmqInChannelsAry(i) + case('HSSBrFrac') + SrvD%y%hssbrtrqc = ZmqInChannelsAry(i) + end select + + end do - end if + ! end if end if !---------------------------------------------------------------------------------------- diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 6db7839135..dbdf88a765 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -205,6 +205,7 @@ MODULE FAST_Types CHARACTER(1024) :: ZmqInAddress !< address for ZMQ REQ-REP protocol [-] INTEGER(IntKi) :: ZmqInNbr !< number of ZMQ REQ-REP channels [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqInChannels !< address for ZMQ REQ-REP protocol [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: ZmqInChannelsAry !< array to pass ZMQ PUB-SUB protocol [-] REAL(ReKi) :: ZmqInDT !< time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation [-] CHARACTER(1024) :: ZmqOutAddress !< address for ZMQ PUB-SUB protocol [-] INTEGER(IntKi) :: ZmqOutNbr !< number of ZMQ PUB-SUB channels [-] @@ -2259,6 +2260,18 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg END IF END IF DstParamData%ZmqInChannels = SrcParamData%ZmqInChannels +ENDIF +IF (ALLOCATED(SrcParamData%ZmqInChannelsAry)) THEN + i1_l = LBOUND(SrcParamData%ZmqInChannelsAry,1) + i1_u = UBOUND(SrcParamData%ZmqInChannelsAry,1) + IF (.NOT. ALLOCATED(DstParamData%ZmqInChannelsAry)) THEN + ALLOCATE(DstParamData%ZmqInChannelsAry(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%ZmqInChannelsAry.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%ZmqInChannelsAry = SrcParamData%ZmqInChannelsAry ENDIF DstParamData%ZmqInDT = SrcParamData%ZmqInDT DstParamData%ZmqOutAddress = SrcParamData%ZmqOutAddress @@ -2342,6 +2355,9 @@ SUBROUTINE FAST_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) IF (ALLOCATED(ParamData%ZmqInChannels)) THEN DEALLOCATE(ParamData%ZmqInChannels) ENDIF +IF (ALLOCATED(ParamData%ZmqInChannelsAry)) THEN + DEALLOCATE(ParamData%ZmqInChannelsAry) +ENDIF IF (ALLOCATED(ParamData%ZmqOutChannels)) THEN DEALLOCATE(ParamData%ZmqOutChannels) ENDIF @@ -2522,6 +2538,11 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, IF ( ALLOCATED(InData%ZmqInChannels) ) THEN Int_BufSz = Int_BufSz + 2*1 ! ZmqInChannels upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%ZmqInChannels)*LEN(InData%ZmqInChannels) ! ZmqInChannels + END IF + Int_BufSz = Int_BufSz + 1 ! ZmqInChannelsAry allocated yes/no + IF ( ALLOCATED(InData%ZmqInChannelsAry) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! ZmqInChannelsAry upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%ZmqInChannelsAry) ! ZmqInChannelsAry END IF Re_BufSz = Re_BufSz + 1 ! ZmqInDT Int_BufSz = Int_BufSz + 1*LEN(InData%ZmqOutAddress) ! ZmqOutAddress @@ -2878,6 +2899,21 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_Xferred = Int_Xferred + 1 END DO ! I END DO + END IF + IF ( .NOT. ALLOCATED(InData%ZmqInChannelsAry) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%ZmqInChannelsAry,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ZmqInChannelsAry,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%ZmqInChannelsAry,1), UBOUND(InData%ZmqInChannelsAry,1) + ReKiBuf(Re_Xferred) = InData%ZmqInChannelsAry(i1) + Re_Xferred = Re_Xferred + 1 + END DO END IF ReKiBuf(Re_Xferred) = InData%ZmqInDT Re_Xferred = Re_Xferred + 1 @@ -3327,6 +3363,24 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs Int_Xferred = Int_Xferred + 1 END DO ! I END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ZmqInChannelsAry not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%ZmqInChannelsAry)) DEALLOCATE(OutData%ZmqInChannelsAry) + ALLOCATE(OutData%ZmqInChannelsAry(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ZmqInChannelsAry.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ZmqInChannelsAry,1), UBOUND(OutData%ZmqInChannelsAry,1) + OutData%ZmqInChannelsAry(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO END IF OutData%ZmqInDT = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat index 87d3224f8d..a5923abe64 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_InflowWind.dat @@ -2,7 +2,7 @@ Steady 8 m/s winds with no shear for FAST CertTests #20 and #25 --------------------------------------------------------------------------------------------------------------- False Echo - Echo input data to .ech (flag) - 2 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 1 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) 0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat index 9a8847ba0a..a0b1ffc129 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -3,8 +3,8 @@ NREL 5.0 MW offshore baseline aerodynamic input properties. ====== General Options ============================================================================ False Echo - Echo the input to ".AD.ech"? (flag) "default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) - 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] - 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 0 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) True TwrAero - Calculate tower aerodynamic loads? (flag) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat index 8bd9386371..bbf1583383 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -25,9 +25,9 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) ---------------------- INITIAL CONDITIONS -------------------------------------- 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) 0 IPDefl - Initial in-plane blade-tip deflection (meters) - 5 BlPitch(1) - Blade 1 initial pitch (degrees) - 5 BlPitch(2) - Blade 2 initial pitch (degrees) - 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 BlPitch(1) - Blade 1 initial pitch (degrees) + 0 BlPitch(2) - Blade 2 initial pitch (degrees) + 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] 0 Azimuth - Initial azimuth angle for blade 1 (degrees) 8 RotSpeed - Initial or fixed rotor speed (rpm) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum index f978c772cf..159a60effb 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum @@ -1,25 +1,14 @@ -This summary information was generated by AeroDyn on 17-Jun-2024 at 12:20:08. +This summary information was generated by AeroDyn on 18-Jun-2024 at 10:34:17. ====== General Options ============================================================================ - 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory - 2 AFAeroMod - Type of blade airfoil aerodynamics model: Beddoes-Leishman unsteady model + 0 WakeMod - Type of wake/induction model: steady + 1 AFAeroMod - Type of blade airfoil aerodynamics model: steady 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none T TwrAero - Calculate tower aerodynamic loads? Yes F CavitCheck - Perform cavitation check? No F Buoyancy - Include buoyancy effects? No -====== Blade-Element/Momentum Theory Options ====================================================== - 2 SkewMod - Type of skewed-wake correction model: Pitt/Peters - T TipLoss - Use the Prandtl tip-loss model? Yes - T HubLoss - Use the Prandtl hub-loss model? Yes - T TanInd - Include tangential induction in BEMT calculations? Yes - F AIDrag - Include the drag term in the axial-induction calculation? No - F TIDrag - Include the drag term in the tangential-induction calculation? No - 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) -====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== - 3 UAMod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) - T FLookup - Use a lookup for f'? Yes ====== Outputs ==================================================================================== 3 NBlOuts - Number of blade nodes selected for output 19 NumBlNds - Number of blade nodes in the analysis diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum index 9f5af72ad5..d10036dc1d 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 17-Jun-2024 at 12:20:08. +This summary information was generated by ElastoDyn on 18-Jun-2024 at 10:34:17. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum index 8f40baf0b2..a0c50d2e7b 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 17-Jun-2024 at 12:20:08. +This summary file was generated by ServoDyn on 18-Jun-2024 at 10:34:17. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 17-Jun-2024 at 12:20:08. +This summary file was closed on 18-Jun-2024 at 10:34:17. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum index 975b5ce069..b0f55f18ba 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.UA.sum @@ -1,5 +1,5 @@ -Predictions were generated on 17-Jun-2024 at 12:20:08 +Predictions were generated on 18-Jun-2024 at 09:32:13 OpenFAST diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech index 91204525f2..3c1eea2bd5 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 17-Jun-2024 at 12:20:08. +This file of echoed input was generated by OpenFAST on 18-Jun-2024 at 10:34:17. Data from OpenFAST primary input file "OFZMQ_test03.fst": @@ -10,7 +10,7 @@ Data from OpenFAST primary input file "OFZMQ_test03.fst": T Echo - Echo input data to .ech (flag) AbortLevel - Error level when simulation should abort (string) "FATAL" - 6.0000E+02 TMax - Total run time (s) + 1.0000E+02 TMax - Total run time (s) 5.0000E-03 DT - Recommended module time step (s) 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) @@ -93,11 +93,11 @@ Data from OpenFAST primary input file "OFZMQ_test03.fst": T ZmqOn - ZMQ communication (flag) ZmqInAddress - REQ-REP localhost address "tcp://127.0.0.1:5555" - 2 ZmqInNbr - Number of parameters to be requested + 3 ZmqInNbr - Number of parameters to be requested ZmqInChannels - Channels to be requested at communication time - "VelH" "BldPitchCom1" + "VelH" "VelV" "BldPitchCom1" ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation - "default" + "0.5" ZmqOutAddress - PUB-SUB localhost address "tcp://127.0.0.1:5557" 0 ZmqOutNbr - Number of channels to be broadcasted diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst index 347b98c565..a2d8d4cc5d 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst @@ -3,7 +3,7 @@ FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onsho ---------------------- SIMULATION CONTROL -------------------------------------- True Echo - Echo input data to .ech (flag) "FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} -600.0 TMax - Total run time (s) +100.0 TMax - Total run time (s) 0.005 DT - Recommended module time step (s) 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} 0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} @@ -72,10 +72,11 @@ True VTK_fields - Write mesh fields to VTK data files? (flag) {true/ ---------------------- ZMQ Communication --------------------------------------- True ZmqOn - ZMQ communication (flag) "tcp://127.0.0.1:5555" ZmqInAddress - REQ-REP localhost address -2 ZmqInNbr - Number of parameters to be requested +3 ZmqInNbr - Number of parameters to be requested "VelH" +"VelV" "BldPitchCom1" ZmqInChannels - Channels to be requested at communication time -default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +0.5 ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation "tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address 0 ZmqOutNbr - Number of channels to be broadcasted none ZmqOutChannels - Channels to be broadcasterd at communication time diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum index e4b6870fe1..d2d8367585 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum @@ -1,7 +1,7 @@ FAST Summary File -Predictions were generated on 17-Jun-2024 at 12:20:08 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-8-gb0f04e00-dirty +Predictions were generated on 18-Jun-2024 at 10:34:17 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-9-g84c3aa89-dirty compiled with NWTC Subroutine Library ElastoDyn diff --git a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb index deb06bf6a0..1edf36c9c1 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb @@ -80,8017 +80,230 @@ "name": "stdout", "output_type": "stream", "text": [ - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n", - "Request received: VelH;BldPitchCom1;\n" + "Response sent: 7.459;0;0.0;\n", + "Response sent: 7.452;0;0.00013091592200192492;\n", + "Response sent: 7.281000000000001;0;0.00026183102557516923;\n", + "Response sent: 7.445;0;0.00039274449229616867;\n", + "Response sent: 7.351000000000001;0;0.0005236555037515921;\n", + "Response sent: 7.301;0;0.0006545632415434574;\n", + "Response sent: 7.208;0;0.0007854668872942478;\n", + "Response sent: 6.615;0;0.0009163656226520288;\n", + "Response sent: 6.577;0;0.0010472586292955628;\n", + "Response sent: 6.888;0;0.001178145088939426;\n", + "Response sent: 6.776;0;0.0013090241833391234;\n", + "Response sent: 6.880000000000001;0;0.0014398950942962044;\n", + "Response sent: 6.9350000000000005;0;0.0015707570036633772;\n", + "Response sent: 6.893000000000001;0;0.001701609093349625;\n", + "Response sent: 6.641;0;0.0018324505453253188;\n", + "Response sent: 6.686999999999999;0;0.001963280541627331;\n", + "Response sent: 6.909000000000001;0;0.002094098264364151;\n", + "Response sent: 6.859;0;0.0022249028957209973;\n", + "Response sent: 7.050000000000001;0;0.0023556936179649273;\n", + "Response sent: 6.941000000000001;0;0.002486469613449957;\n", + "Response sent: 6.959;0;0.002617230064622163;\n", + "Response sent: 6.861000000000001;0;0.0027479741540247997;\n", + "Response sent: 6.460000000000001;0;0.0028787010643034085;\n", + "Response sent: 6.449;0;0.003009409978210928;\n", + "Response sent: 6.6579999999999995;0;0.0031401000786127984;\n", + "Response sent: 6.964;0;0.003270770548492079;\n", + "Response sent: 6.6419999999999995;0;0.0034014205709545463;\n", + "Response sent: 6.683;0;0.0035320493292338062;\n", + "Response sent: 6.867000000000001;0;0.0036626560066964;\n", + "Response sent: 7.089;0;0.0037932397868469074;\n", + "Response sent: 6.912000000000001;0;0.003923799853333053;\n", + "Response sent: 6.68;0;0.004054335389950806;\n", + "Response sent: 6.664999999999999;0;0.00418484558064949;\n", + "Response sent: 6.856999999999999;0;0.004315329609536876;\n", + "Response sent: 6.8309999999999995;0;0.004445786660884291;\n", + "Response sent: 7.090999999999999;0;0.00457621591913171;\n", + "Response sent: 7.257;0;0.00470661656889286;\n", + "Response sent: 7.226000000000001;0;0.0048369877949603155;\n", + "Response sent: 7.1579999999999995;0;0.004967328782310595;\n", + "Response sent: 6.8870000000000005;0;0.005097638716109255;\n", + "Response sent: 7.148;0;0.005227916781715989;\n", + "Response sent: 7.103999999999999;0;0.005358162164689711;\n", + "Response sent: 6.552;0;0.005488374050793655;\n", + "Response sent: 6.077;0;0.005618551626000466;\n", + "Response sent: 5.861000000000001;0;0.0057486940764972785;\n", + "Response sent: 5.981;0;0.005878800588690816;\n", + "Response sent: 5.904999999999999;0;0.006008870349212473;\n", + "Response sent: 5.879;0;0.006138902544923396;\n", + "Response sent: 6.077999999999999;0;0.006268896362919573;\n", + "Response sent: 6.119999999999999;0;0.006398850990536912;\n", + "Response sent: 6.114000000000001;0;0.0065287656153563195;\n", + "Response sent: 6.084;0;0.006658639425208785;\n", + "Response sent: 6.256;0;0.006788471608180453;\n", + "Response sent: 6.138;0;0.0069182613526177035;\n", + "Response sent: 6.1240000000000006;0;0.0070480078471322205;\n", + "Response sent: 5.984;0;0.007177710280606069;\n", + "Response sent: 6.0649999999999995;0;0.007307367842196768;\n", + "Response sent: 5.901;0;0.0074369797213423485;\n", + "Response sent: 5.808999999999999;0;0.0075665451077664295;\n", + "Response sent: 5.952;0;0.007696063191483285;\n", + "Response sent: 6.0440000000000005;0;0.007825533162802907;\n", + "Response sent: 6.138999999999999;0;0.007954954212336057;\n", + "Response sent: 6.246;0;0.008084325530999345;\n", + "Response sent: 6.393000000000001;0;0.008213646310020264;\n", + "Response sent: 6.098000000000001;0;0.008342915740942265;\n", + "Response sent: 5.961;0;0.008472133015629808;\n", + "Response sent: 5.881;0;0.008601297326273405;\n", + "Response sent: 5.9;0;0.00873040786539468;\n", + "Response sent: 6.125;0;0.008859463825851408;\n", + "Response sent: 6.1;0;0.00898846440084257;\n", + "Response sent: 5.981;0;0.009117408783913391;\n", + "Response sent: 6.118;0;0.009246296168960383;\n", + "Response sent: 6.148;0;0.009375125750236385;\n", + "Response sent: 6.2330000000000005;0;0.009503896722355604;\n", + "Response sent: 6.541;0;0.009632608280298634;\n", + "Response sent: 6.401999999999999;0;0.009761259619417512;\n", + "Response sent: 6.188000000000001;0;0.009889849935440731;\n", + "Response sent: 6.007;0;0.010018378424478273;\n", + "Response sent: 5.914999999999999;0;0.01014684428302664;\n", + "Response sent: 5.962;0;0.01027524670797387;\n", + "Response sent: 6.224;0;0.010403584896604555;\n", + "Response sent: 6.279999999999999;0;0.010531858046604867;\n", + "Response sent: 6.202;0;0.010660065356067573;\n", + "Response sent: 5.8759999999999994;0;0.010788206023497048;\n", + "Response sent: 5.894;0;0.010916279247814279;\n", + "Response sent: 5.960000000000001;0;0.011044284228361878;\n", + "Response sent: 6.151999999999999;0;0.011172220164909088;\n", + "Response sent: 6.2330000000000005;0;0.011300086257656787;\n", + "Response sent: 5.882;0;0.011427881707242482;\n", + "Response sent: 5.987;0;0.011555605714745312;\n", + "Response sent: 6.099;0;0.011683257481691038;\n", + "Response sent: 6.318;0;0.011810836210057043;\n", + "Response sent: 5.936999999999999;0;0.011938341102277308;\n", + "Response sent: 5.667999999999999;0;0.012065771361247408;\n", + "Response sent: 5.792;0;0.012193126190329494;\n", + "Response sent: 5.723000000000001;0;0.012320404793357269;\n", + "Response sent: 5.712999999999999;0;0.012447606374640968;\n", + "Response sent: 5.459;0;0.012574730138972335;\n", + "Response sent: 5.734999999999999;0;0.012701775291629584;\n", + "Response sent: 5.465999999999999;0;0.012828741038382382;\n", + "Response sent: 5.103999999999999;0;0.012955626585496807;\n", + "Response sent: 5.085000000000001;0;0.0130824311397403;\n", + "Response sent: 5.021000000000001;0;0.013209153908386648;\n", + "Response sent: 4.6899999999999995;0;0.013335794099220913;\n", + "Response sent: 4.478999999999999;0;0.013462350920544408;\n", + "Response sent: 4.75;0;0.013588823581179627;\n", + "Response sent: 4.804;0;0.013715211290475194;\n", + "Response sent: 4.742000000000001;0;0.013841513258310836;\n", + "Response sent: 4.856999999999999;0;0.013967728695102266;\n", + "Response sent: 4.91;0;0.01409385681180618;\n", + "Response sent: 4.984;0;0.014219896819925134;\n", + "Response sent: 5.195;0;0.014345847931512525;\n", + "Response sent: 5.0280000000000005;0;0.014471709359177473;\n", + "Response sent: 4.832000000000001;0;0.014597480316089768;\n", + "Response sent: 5.050000000000001;0;0.014723160015984794;\n", + "Response sent: 5.073;0;0.01484874767316842;\n", + "Response sent: 4.712999999999999;0;0.014974242502521927;\n", + "Response sent: 4.802;0;0.01509964371950692;\n", + "Response sent: 4.612;0;0.015224950540170226;\n", + "Response sent: 4.583;0;0.015350162181148796;\n", + "Response sent: 4.148;0;0.015475277859674596;\n", + "Response sent: 4.4350000000000005;0;0.015600296793579521;\n", + "Response sent: 4.487;0;0.015725218201300257;\n", + "Response sent: 4.096;0;0.01585004130188319;\n", + "Response sent: 4.066000000000001;0;0.015974765314989273;\n", + "Response sent: 4.353999999999999;0;0.01609938946089891;\n", + "Response sent: 4.2330000000000005;0;0.016223912960516843;\n", + "Response sent: 4.286;0;0.016348335035376985;\n", + "Response sent: 4.173;0;0.016472654907647342;\n", + "Response sent: 4.042999999999999;0;0.016596871800134822;\n", + "Response sent: 4.263999999999999;0;0.01672098493629013;\n", + "Response sent: 4.013999999999999;0;0.016844993540212606;\n", + "Response sent: 3.837999999999999;0;0.016968896836655076;\n", + "Response sent: 3.8599999999999994;0;0.017092694051028715;\n", + "Response sent: 3.926;0;0.017216384409407856;\n", + "Response sent: 4.129;0;0.01733996713853486;\n", + "Response sent: 4.015000000000001;0;0.017463441465824944;\n", + "Response sent: 3.9749999999999996;0;0.017586806619371;\n", + "Response sent: 4.395;0;0.01771006182794842;\n", + "Response sent: 4.414999999999999;0;0.017833206321019937;\n", + "Response sent: 4.647;0;0.017956239328740416;\n", + "Response sent: 4.478;0;0.018079160081961688;\n", + "Response sent: 4.616;0;0.01820196781223734;\n", + "Response sent: 4.417999999999999;0;0.01832466175182754;\n", + "Response sent: 4.173;0;0.018447241133703815;\n", + "Response sent: 4.4190000000000005;0;0.018569705191553862;\n", + "Response sent: 4.484999999999999;0;0.018692053159786347;\n", + "Response sent: 4.1850000000000005;0;0.01881428427353564;\n", + "Response sent: 4.1530000000000005;0;0.018936397768666666;\n", + "Response sent: 4.237;0;0.019058392881779646;\n", + "Response sent: 4.021000000000001;0;0.019180268850214854;\n", + "Response sent: 3.976000000000001;0;0.01930202491205743;\n", + "Response sent: 4.177;0;0.019423660306142097;\n", + "Response sent: 4.058999999999999;0;0.019545174272057955;\n", + "Response sent: 3.8889999999999993;0;0.019666566050153204;\n", + "Response sent: 4.119;0;0.019787834881539915;\n", + "Response sent: 4.005000000000001;0;0.019908980008098768;\n", + "Response sent: 4.042999999999999;0;0.020030000672483804;\n", + "Response sent: 4.16;0;0.020150896118127124;\n", + "Response sent: 4.202999999999999;0;0.02027166558924366;\n", + "Response sent: 4.577;0;0.020392308330835857;\n", + "Response sent: 4.602;0;0.020512823588698444;\n", + "Response sent: 4.551;0;0.02063321060942312;\n", + "Response sent: 4.901;0;0.02075346864040324;\n", + "Response sent: 4.981;0;0.02087359692983858;\n", + "Response sent: 4.948;0;0.02099359472673997;\n", + "Response sent: 5.236000000000001;0;0.021113461280934054;\n", + "Response sent: 5.417999999999999;0;0.02123319584306792;\n", + "Response sent: 5.428000000000001;0;0.021352797664613832;\n", + "Response sent: 5.355;0;0.021472265997873878;\n", + "Response sent: 5.422000000000001;0;0.021591600095984667;\n", + "Response sent: 5.475;0;0.02171079921292197;\n", + "Response sent: 5.239000000000001;0;0.02182986260350542;\n", + "Response sent: 5.343;0;0.021948789523403133;\n", + "Response sent: 5.286;0;0.022067579229136394;\n", + "Response sent: 5.305999999999999;0;0.02218623097808429;\n", + "Response sent: 5.029;0;0.02230474402848833;\n", + "Response sent: 5.025;0;0.022423117639457146;\n", + "Response sent: 5.132;0;0.022541351070971053;\n", + "Response sent: 5.214;0;0.022659443583886715;\n", + "Response sent: 4.971;0;0.022777394439941746;\n", + "Response sent: 4.949999999999999;0;0.022895202901759365;\n", + "Response sent: 4.629;0;0.023012868232852954;\n", + "Response sent: 4.348000000000001;0;0.023130389697630673;\n", + "Response sent: 4.407;0;0.023247766561400113;\n", + "Response sent: 4.462999999999999;0;0.02336499809037281;\n", + "Response sent: 4.470000000000001;0;0.02348208355166888;\n", + "Response sent: 4.765000000000001;0;0.023599022213321597;\n", + "Response sent: 4.986000000000001;0;0.02371581334428195;\n", + "Response sent: 5.132;0;0.02383245621442323;\n", + "Response sent: 5.180999999999999;0;0.023948950094545594;\n", + "Response sent: 4.814;0;0.024065294256380612;\n", + "Response sent: 4.573;0;0.02418148797259583;\n", + "Response sent: 4.058;0;0.024297530516799316;\n", + "Response sent: 4.071999999999999;0;0.024413421163544193;\n", + "Response sent: 4.2509999999999994;0;0.024529159188333184;\n", + "Response sent: 4.263999999999999;0;0.024644743867623137;\n", + "Response sent: 4.3420000000000005;0;0.024760174478829545;\n", + "Response sent: 4.269;0;0.024875450300331076;\n", + "Response sent: 4.256;0;0.024990570611474066;\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n" ] }, { - "ename": "IndexError", - "evalue": "index 8000 is out of bounds for axis 0 with size 8000", + "ename": "KeyboardInterrupt", + "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m count_sampling \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m: \n\u001b[1;32m 4\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling], \n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[43mbld_pitch\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcount_sampling\u001b[49m\u001b[43m]\u001b[49m}\n\u001b[1;32m 7\u001b[0m rfi\u001b[38;5;241m.\u001b[39mfast_rep(rep, verbose\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 8\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", - "\u001b[0;31mIndexError\u001b[0m: index 8000 is out of bounds for axis 0 with size 8000" + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 13\u001b[0m\n\u001b[1;32m 6\u001b[0m count_sampling \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m \n\u001b[1;32m 8\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 9\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling] \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m6\u001b[39m, \n\u001b[1;32m 10\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelV\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0\u001b[39m,\n\u001b[1;32m 11\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: bld_pitch[count_sampling]}\n\u001b[0;32m---> 13\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", + "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:173\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict, verbose)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 162\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;66;03m# req_ = self.requester.recv_string()\u001b[39;00m\n\u001b[1;32m 165\u001b[0m \n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# if verbose:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;66;03m# response = ';'.join(map(str, rep_dict.values())) + ';'\u001b[39;00m\n\u001b[1;32m 172\u001b[0m \u001b[38;5;66;03m# self.requester.send_string(response)\u001b[39;00m\n\u001b[0;32m--> 173\u001b[0m socks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoller\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 174\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester \u001b[38;5;129;01min\u001b[39;00m socks \u001b[38;5;129;01mand\u001b[39;00m socks[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester] \u001b[38;5;241m==\u001b[39m zmq\u001b[38;5;241m.\u001b[39mPOLLIN:\n\u001b[1;32m 175\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester\u001b[38;5;241m.\u001b[39mrecv_string()\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/poll.py:106\u001b[0m, in \u001b[0;36mPoller.poll\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(timeout, \u001b[38;5;28mfloat\u001b[39m):\n\u001b[1;32m 105\u001b[0m timeout \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(timeout)\n\u001b[0;32m--> 106\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mzmq_poll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msockets\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m_zmq.py:1536\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.zmq_poll\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], @@ -8099,11 +312,13 @@ "\n", "while True:\n", " \n", - " if count_sampling >= len(wind_series):\n", + " if count_sampling >= 7000:\n", " count_sampling = 0 \n", " \n", - " rep = {'VelH': wind_series[count_sampling], \n", - " 'BlPitchCom1': bld_pitch[count_sampling]}\n", + " rep = {\n", + " 'VelH': wind_series[count_sampling] - 6, \n", + " 'VelV': 0,\n", + " 'BlPitchCom1': bld_pitch[count_sampling]}\n", " \n", " rfi.fast_rep(rep, verbose=True)\n", " count_sampling += 1" @@ -8111,29 +326,25 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 24, "metadata": {}, "outputs": [ { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mVelH\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBlPitchCom1\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:162\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict, verbose)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfast_rep\u001b[39m(\u001b[38;5;28mself\u001b[39m, rep_dict, verbose: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 159\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 162\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequester\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m verbose:\n\u001b[1;32m 165\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRequest received: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat(req_))\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/socket.py:935\u001b[0m, in \u001b[0;36mSocket.recv_string\u001b[0;34m(self, flags, encoding)\u001b[0m\n\u001b[1;32m 915\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_string\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, encoding: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[1;32m 916\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a unicode string, as sent by send_string.\u001b[39;00m\n\u001b[1;32m 917\u001b[0m \n\u001b[1;32m 918\u001b[0m \u001b[38;5;124;03m Parameters\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 933\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 934\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 935\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 936\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: buf\u001b[38;5;241m.\u001b[39mdecode(encoding))\n", - "File \u001b[0;32m_zmq.py:1137\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:1172\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:1259\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._recv_copy\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "Request received: VelH;VelV;BldPitchCom1;\n" ] } ], "source": [ - "rfi.fast_rep({'VelH': 0, 'BlPitchCom1': 0}, verbose=True)" + "rfi.fast_rep(\n", + " {\n", + " 'VelH': wind_series[count_sampling] + 4, \n", + " 'VelV': wind_series[count_sampling]/2,\n", + " 'BlPitchCom1': np.rad2deg(bld_pitch[count_sampling])\n", + " }, \n", + "verbose=True)" ] }, { @@ -8149,22 +360,22 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 10, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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eowfP77clwIAuqDqcp/w2WefjY0bN5aeL1myJE499dQ455xzyn0pAKALKnt87Lvvvu2eT5kyJQYPHhwnnHBCuS8FAHRBZY+P/7R+/fqYPn16XHnllVFVVbXNY9ra2qKtra30vFgsVnJJAEAHq+gHTh988MF477334qKLLtruMc3NzVFXV1d6NDU1VXJJAEAHq0oppUqd/LTTTouePXvGww8/vN1jtnXno6mpKVpaWqK2trZSSwMAyqhYLEZdXd1OvX5X7G2X119/PebOnRsPPPDADo8rFApRKBQqtQwAoJOp2NsuU6dOjb59+8aYMWMqdQkAoAuqSHxs2rQppk6dGmPHjo3q6op+phUA6GIqEh9z586NN954Iy655JJKnB4A6MIqclti9OjRUcHPsQIAXZjvdgEAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBkJT4AgKzEBwCQlfgAALISHwBAVuIDAMhKfAAAWYkPACAr8QEAZCU+AICsxAcAkJX4AACyEh8AQFbiAwDISnwAAFmJDwAgK/EBAGQlPgCArMQHAJCV+AAAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBkJT4AgKzEBwCQlfgAALISHwBAVuIDAMhKfAAAWYkPACAr8QEAZCU+AICsxAcAkJX4AACyEh8AQFbiAwDISnwAAFmJDwAgK/EBAGQlPgCArMQHAJCV+AAAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBkJT4AgKzEBwCQVUXi4+23344LLrgg9t577+jdu3ccccQRsWDBgkpcCgDoYqrLfcK1a9fG8ccfHyeddFI88sgj0bdv33jttdfik5/8ZLkvBQB0QWWPj1tuuSWamppi6tSppW0DBw4s92UAgC6q7G+7PPTQQzF8+PA455xzom/fvnHkkUfG3Xffvd3j29raolgstnsAALuvssfHihUr4o477oghQ4bErFmzYty4cXH55ZfHPffcs83jm5ubo66urvRoamoq95IAgE6kKqWUynnCnj17xvDhw+OJJ54obbv88svj2WefjSeffHKr49va2qKtra30vFgsRlNTU7S0tERtbW05lwYAVEixWIy6urqdev0u+52PhoaGOPjgg9ttO+igg+KNN97Y5vGFQiFqa2vbPQCA3VfZ4+P444+PZcuWtdv2yiuvxIABA8p9KQCgCyp7fHzzm9+Mp556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ly+PxsbGGDRoUHz5y1+OFStWRIRZbemhhx6K4cOHxznnnBN9+/aNI488Mu6+++7S/s42r90+Pt59993YuHFj9OvXr932fv36xerVqztoVZ3P5lnsaE6rV6+Onj17xp577rndY3ZHKaW48sorY9SoUXHooYdGhHltafHixfGJT3wiCoVCjBs3LmbOnBkHH3ywOW3DjBkzYuHChdHc3LzVPvNq79hjj4177rknZs2aFXfffXesXr06Ro4cGX//+9/NagsrVqyIO+64I4YMGRKzZs2KcePGxeWXXx733HNPRHS+f1ud7lttK6Wqqqrd85TSVtv4v81pd5/lpZdeGi+88EI8/vjjW+0zr48ceOCBsWjRonjvvffi/vvvj7Fjx8a8efNK+83pI2+++WZMmDAhZs+eHXvsscd2jzOvj5x++uml/33YYYfFiBEjYvDgwTFt2rQ47rjjIsKsNtu0aVMMHz48Jk+eHBERRx55ZCxdujTuuOOOuPDCC0vHdZZ57fZ3PvbZZ5/o3r37VtW2Zs2arQrw42zzJ8h3NKf6+vpYv359rF27drvH7G4uu+yyeOihh+LRRx+N/v37l7abV3s9e/aMT3/60zF8+PBobm6OYcOGxY9//GNz2sKCBQtizZo1cfTRR0d1dXVUV1fHvHnz4ic/+UlUV1eX/r7mtW19+vSJww47LJYvX+7f1hYaGhri4IMPbrftoIMOijfeeCMiOt9/s3b7+OjZs2ccffTRMWfOnHbb58yZEyNHjuygVXU+gwYNivr6+nZzWr9+fcybN680p6OPPjp69OjR7ph33nknlixZstvNMqUUl156aTzwwAPxpz/9KQYNGtRuv3ntWEop2trazGkLJ598cixevDgWLVpUegwfPjzOP//8WLRoUey///7mtQNtbW3x0ksvRUNDg39bWzj++OO3+nUAr7zySgwYMCAiOuF/s8r68dVOavOP2v7iF79IL774YrriiitSnz590l//+teOXlpWra2t6fnnn0/PP/98ioh06623pueff770I8dTpkxJdXV16YEHHkiLFy9O55133jZ/DKt///5p7ty5aeHChelzn/vcbvlja1//+tdTXV1deuyxx9r9mN8HH3xQOsa8PnLttdem+fPnp5UrV6YXXnghXXfddalbt25p9uzZKSVz+m/+86ddUjKv//Stb30rPfbYY2nFihXpqaeeSmeccUaqqakp/bfbrP7tmWeeSdXV1enmm29Oy5cvT7/+9a9T79690/Tp00vHdKZ5fSziI6WUfvrTn6YBAwaknj17pqOOOqr0I5MfJ48++miKiK0eY8eOTSl99KNYEydOTPX19alQKKTPfvazafHixe3O8eGHH6ZLL7007bXXXqlXr17pjDPOSG+88UYH/G0qa1tziog0derU0jHm9ZFLLrmk9P+tfffdN5188sml8EjJnP6bLePDvP5t8++h6NGjR2psbExnn312Wrp0aWm/WbX38MMPp0MPPTQVCoU0dOjQdNddd7Xb35nmVZVSSuW9lwIAsH27/Wc+AIDORXwAAFmJDwAgK/EBAGQlPgCArMQHAJCV+AAAshIfAEBW4gMAyEp8AABZiQ8AICvxAQBk9f8BkBHii/4PcPwAAAAASUVORK5CYII=", + "image/png": "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jpjSEfLNb34z5s+fH9OnT49FixbFr371q1GPv+uuu2LRokUxffr0ePWrXx3f+ta39jrmBz/4QSxcuDAqlUosXLgwbr/99lzDn3JSn+9bbrklSqXSXl//+c9/cv41pox2zvfTTz8d5513XrzmNa+Jrq6uWLZsWcPjXN/NpT7fru/RtXO+f/jDH8Y73/nOeNWrXhW9vb1xyimnxM9//vO9jnN9jy71OU9yjRdT1Pe+971i2rRpxc0331w88MADxdKlS4tDDjmkeOKJJxoe/9hjjxUHH3xwsXTp0uKBBx4obr755mLatGnF97///foxmzZtKsrlcrFq1ariwQcfLFatWlV0d3cX995772T9tfZZOc732rVri97e3uLpp58e9kX75/vxxx8vLr300mLdunXFcccdVyxdunSvY1zfzeU4367v5to930uXLi2uvfba4ne/+13x8MMPF8uXLy+mTZtW3H///fVjXN+jy3HOU1zjUzZC3vSmNxUXXXTRsNcWLFhQXHXVVQ2Pv+KKK4oFCxYMe+3CCy8sTj755Pr3H/zgB4t3vetdw44566yzig9/+MOJRj115Tjfa9euLWbOnJl8rPuDds/3y51++ukN/1F0fTeX43y7vpubyPmuWbhwYbFy5cr6967v0eU45ymu8Sm5HPPCCy/Eli1bYvHixcNeX7x4cWzatKnhn7nnnnv2Ov6ss86KzZs3x4svvjjqMc3e80CR63xHRDz33HMxb968mDt3bpx77rmxdevW9H+BKWY857sVru/Gcp3vCNd3IynO99DQUOzatSsOPfTQ+muu7+ZynfOIiV/jUzJCnnnmmRgcHIzZs2cPe3327Nmxffv2hn9m+/btDY/fvXt3PPPMM6Me0+w9DxS5zveCBQvilltuiTvuuCM2bNgQ06dPj9NOOy3+8pe/5PmLTBHjOd+tcH03lut8u74bS3G+v/71r8fzzz8fH/zgB+uvub6by3XOU1zj+9xv0W1HqVQa9n1RFHu9NtbxI19v9z0PJKnP98knnxwnn3xy/eennXZanHDCCXH99dfHN77xjVTDnrJyXIuu7+ZSnxvX9+jGe743bNgQK1asiB//+Mcxa9asJO95oEh9zlNc41MyQg4//PAol8t7FdyOHTv2Kr2aI444ouHx3d3dcdhhh416TLP3PFDkOt8jdXV1xUknnXTA/5/ieM53K1zfjeU63yO5vl8ykfN96623xqc+9am47bbb4h3veMewn7m+m8t1zkcazzU+JZdjenp6YtGiRbFx48Zhr2/cuDFOPfXUhn/mlFNO2ev4X/ziF3HiiSfGtGnTRj2m2XseKHKd75GKoojf//73ceSRR6YZ+BQ1nvPdCtd3Y7nO90iu75eM93xv2LAhPvGJT8T69evjnHPO2evnru/mcp3zkcZ1jU9oW2sH1W43+va3v1088MADxbJly4pDDjmk+Otf/1oURVFcddVVxcc//vH68bVbRi+77LLigQceKL797W/vdcvob37zm6JcLhdf+cpXigcffLD4yle+4hav/8pxvlesWFH87Gc/Kx599NFi69atxQUXXFB0d3cXv/3tbyf977evafd8F0VRbN26tdi6dWuxaNGi4rzzziu2bt1a/PnPf67/3PXdXI7z7fpurt3zvX79+qK7u7u48cYbh90K+s9//rN+jOt7dDnOeYprfMpGSFEUxY033ljMmzev6OnpKU444YTirrvuqv/s/PPPL04//fRhx995553F8ccfX/T09BRHH310sWbNmr3e87bbbite85rXFNOmTSsWLFhQ/OAHP8j915gyUp/vZcuWFUcddVTR09NTvOpVryoWL15cbNq0aTL+KlNCu+c7Ivb6mjdv3rBjXN/NpT7fru/RtXO+Tz/99Ibn+/zzzx/2nq7v0aU+5ymu8VJR/He3IADAJJqSe0IAgKlPhAAAHSFCAICOECEAQEeIEACgI0QIANARIgQA6AgRAgB0hAgBADpChAAAHSFCAICOECEAQEf8f8Ux2CnDKq3AAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -8174,8 +385,8 @@ } ], "source": [ - "plt.plot(fastout['Time_[s]'], fastout['Wind1VelX_[m/s]'])\n", - "plt.plot(fastout['Time_[s]'], fastout['BldPitch1_[deg]'])" + "plt.plot(fastout['Time_[s]'][:50], fastout['Wind1VelX_[m/s]'][:50])\n", + "# plt.plot(fastout['Time_[s]'], fastout['BldPitch1_[deg]'])#, ls='--', marker='o')" ] }, { diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py index c23c5b3013..0450a64a77 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -50,6 +50,10 @@ def __init__(self, self.req_context = zmq.Context() self.requester = self.req_context.socket(zmq.REP) self.requester.bind(self.ZmqInAddress) + self.poller = zmq.Poller() + self.poller.register(self.requester, zmq.POLLIN) + self.cont_req_off = 0 + self.cont_req_threshold = 20 print('ZMQ Real Time interactor for FAST initialized. \n PUB-SUB protocol: {} | REQ-REP protocol: {}'.format(self.ZmqOutAddress, self.ZmqInAddress)) @@ -63,8 +67,8 @@ def __init__(self, os.makedirs(self.path_out, exist_ok=True) pass - - + + @staticmethod def _update_dict(update_, dict_): for key, value in update_.items(): @@ -159,15 +163,30 @@ def fast_rep(self, rep_dict, verbose: bool = False): """ """ - req_ = self.requester.recv_string() - - if verbose: - print('Request received: {}'.format(req_)) + + socks = dict(self.poller.poll(1000)) + if self.requester in socks and socks[self.requester] == zmq.POLLIN: + req_ = self.requester.recv_string() + + requests = req_.split(";") + response = ';'.join(map(str, rep_dict.values())) + ';' + + response = response = ';'.join(map(str, rep_dict.values())) + ';' + + # Send the response + self.requester.send_string(response) - requests = req_.split(";") - - response = ';'.join(map(str, rep_dict.values())) + ';' - self.requester.send_string(response) + if verbose: + print(f'Response sent: {response}') + else: + if verbose: + print('No request received, waiting...') + self.cont_req_off += 1 + + if self.cont_req_off > self.cont_req_threshold: + print('Requester closed due to inactivity.') + self.requester.close() + self.req_context.term() pass From 0cfec5b2eaf7d49919cbde34457417e2695c5505 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Thu, 20 Jun 2024 15:21:18 +0200 Subject: [PATCH 11/14] dt in_out ok --- modules/openfast-library/src/FAST_Subs.f90 | 84 ++- .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 1 + .../OFZMQ_test03/OFZMQ_test03.AD.sum | 2 +- .../OFZMQ_test03/OFZMQ_test03.ED.sum | 2 +- .../OFZMQ_test03/OFZMQ_test03.SrvD.sum | 4 +- .../OFZMQ_test03/OFZMQ_test03.ech | 2 +- .../OFZMQ_test03/OFZMQ_test03.sum | 5 +- .../zmq_python_toolbox/REPtests.ipynb | 502 ++++++++++-------- .../real_fast_interactor.py | 7 +- 9 files changed, 353 insertions(+), 256 deletions(-) diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index bfa43fe93e..dc80c40ff2 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -189,7 +189,7 @@ subroutine zmq_pub_init(req_address) character(*) :: req_address integer(c_int) :: response_ptr_pub_init - print *, "Atempting connection from Fortran at ", req_address + print *, "OpenFAST is attempting to publish at: ", trim(req_address) response_ptr_pub_init = zmq_init_pub(trim(req_address)) @@ -203,12 +203,55 @@ subroutine zmq_req_init(reqrep_address) character(*) :: reqrep_address integer(c_int) :: response_ptr_req_init - print *, "Atempting connection from Fortran at ", reqrep_address + print *, "OpenFAST is receiving from: ", trim(reqrep_address) response_ptr_req_init = zmq_init_req(trim(reqrep_address)) end subroutine zmq_req_init ! ---------------------------------------------- +module global_data + implicit none + integer, parameter :: dp = kind(1.0d0) + real(dp), allocatable :: array_to_be_preserved(:) + logical :: is_array_init = .false. +contains + subroutine initialize_array(size) + integer, intent(in) :: size + if (.not. is_array_init) then + allocate(array_to_be_preserved(size)) + array_to_be_preserved = 0._dp + is_array_init = .true. + end if + end subroutine initialize_array + + subroutine update_array(array, size) + real(dp), intent(in), dimension(size) :: array + integer, intent(in) :: size + integer :: i + + if (.not. is_array_init) then + print *, "Array not initialized" + return + end if + + do i = 1, size + array_to_be_preserved(i) = array(i) + end do + end subroutine update_array + + subroutine get_current_array(current_array) + real(dp), allocatable, intent(out) :: current_array(:) + if (.not. is_array_init) then + print *, "Array not initialized" + return + end if + + allocate(current_array(size(array_to_be_preserved))) + current_array = array_to_be_preserved + end subroutine get_current_array +end module global_data +! ---------------------------------------------- + MODULE FAST_Subs USE FAST_Solver @@ -3610,8 +3653,9 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS RETURN end if end if - - CALL AllocAry(p%ZmqInChannelsAry, p%ZmqInNbr + 1, "ZmqInChannelsAry", Errstat2, ErrMsg2) + + ! TO-DO: add slots for TurbID and time + CALL AllocAry(p%ZmqInChannelsAry, p%ZmqInNbr, "ZmqInChannelsAry", Errstat2, ErrMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if ( ErrStat >= AbortErrLev ) then call cleanup() @@ -5149,9 +5193,10 @@ END SUBROUTINE FAST_Solution_T !---------------------------------------------------------------------------------------------------------------------------------- !> This routine takes data from n_t_global and gets values at n_t_global + 1 SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & - MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ZmqInChannelsAry, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) + MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData,ZmqInChannelsAry, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) use iso_c_binding + use global_data !use zmq_req REAL(DbKi), INTENT(IN ) :: t_initial !< initial time @@ -5202,9 +5247,13 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'FAST_Solution' ! ----------------------------------------------------------------------------- + ! if (p_FAST%ZmqOn) then + REAL(DbKi), allocatable, intent(inout) :: ZmqOutChannelsAry(:) - REAL(DbKi), allocatable, intent(inout) :: ZmqInChannelsAry(:) character(len=1024) :: tmp_str + REAL(DbKi), allocatable, intent(inout) :: ZmqInChannelsAry(:) + call initialize_array(p_FAST%ZmqInNbr) + ! end if ! ----------------------------------------------------------------------------- ErrStat = ErrID_None @@ -5507,32 +5556,15 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, ! Inserting here call to ZMQ to retrieve and override routines' outputs if ( (p_FAST%ZmqOn) .and. (p_FAST%ZmqInNbr > 0)) then - ! print *, 'Zmq Channels: ', p_FAST%ZmqInChannels - ! Check if there's need to communicate with the ZMQ socket (the values will be enforced for next time step) to update values - - !if (mod(p_FAST%ZmqOutDT, t_global_next) == 0) then - - ! TurbID = p_FAST%TurbID - print *, 'ZmqInArray: ', ZmqInChannelsAry if (mod(t_global_next, p_FAST%ZmqInDT) == 0) then ZmqInChannelsAry = 0.0_DbKi call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) + call update_array(ZmqInChannelsAry, p_FAST%ZmqInNbr) end if - print *, 'Zmq In Comm happened: ', mod(t_global_next, p_FAST%ZmqInDT) == 0 - print *, 'ZmqInArray (after comm): ', ZmqInChannelsAry - - ! Forcing turbine ID agreement in this first version - ! ZmqInChannelsAry(1) = TurbID - - ! print *, 'ZmqInChannelsAry: ', ZmqInChannelsAry - ! end if ! otherwise we'll keep the values from the previous time step + call get_current_array(ZmqInChannelsAry) - ! call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) - - ! If (ZmqInChannelsAry(1) == TurbID) then - ! print *, 'ZmqInChannelsAry: ', ZmqInChannelsAry do i = 1, p_FAST%ZmqInNbr tmp_str = trim(p_FAST%ZmqInChannels(i)) @@ -5562,8 +5594,6 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, end select end do - - ! end if end if !---------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat index 0fc589f458..62e2cae9dc 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ServoDyn.dat @@ -106,5 +106,6 @@ True TabDelim - Use tab delimiters in text tabular output file? (fl OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) "GenTq" - Electrical generator power and torque "GenPwr" - Electrical generator power and torque +"BlPitchC1, BlPitchC2, BlPitchC3" END of input file (the word "END" must appear in the first 3 columns of this last OutList line) --------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum index 159a60effb..d721847fb4 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 18-Jun-2024 at 10:34:17. +This summary information was generated by AeroDyn on 20-Jun-2024 at 15:17:42. ====== General Options ============================================================================ 0 WakeMod - Type of wake/induction model: steady diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum index d10036dc1d..08c0a395f3 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 18-Jun-2024 at 10:34:17. +This summary information was generated by ElastoDyn on 20-Jun-2024 at 15:17:42. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum index a0c50d2e7b..68db80b5be 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 18-Jun-2024 at 10:34:17. +This summary file was generated by ServoDyn on 20-Jun-2024 at 15:17:42. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 18-Jun-2024 at 10:34:17. +This summary file was closed on 20-Jun-2024 at 15:17:42. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech index 3c1eea2bd5..1bb37508e8 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 18-Jun-2024 at 10:34:17. +This file of echoed input was generated by OpenFAST on 20-Jun-2024 at 15:17:42. Data from OpenFAST primary input file "OFZMQ_test03.fst": diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum index d2d8367585..25426e891f 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.sum @@ -1,7 +1,7 @@ FAST Summary File -Predictions were generated on 18-Jun-2024 at 10:34:17 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-9-g84c3aa89-dirty +Predictions were generated on 20-Jun-2024 at 15:17:42 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-10-g45b95ade-dirty compiled with NWTC Subroutine Library ElastoDyn @@ -101,3 +101,6 @@ Number of correction iterations: 0 54 RtTSR (-) AeroDyn 55 GenTq (kN-m) ServoDyn 56 GenPwr (kW) ServoDyn + 57 BlPitchC1 (deg) ServoDyn + 58 BlPitchC2 (deg) ServoDyn + 59 BlPitchC3 (deg) ServoDyn diff --git a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb index 1edf36c9c1..d0d690579f 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -36,12 +36,12 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { - "image/png": "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N1+TLl26wM/Pz2KbK1eu4Pjx4+ZtevXqhfz8fBw4cMC8zf79+5Gfn0/X1g6DBw/GsWPHkJycbH517doVU6ZMQXJyMpo2bUrXSAX06dPHqlTz2bNn0ahRIwD0LKmFkpISaLWWywSdTmcuN0vXSX2485r06tULx48fx5UrV8zbbNiwAQEBAejSpYtLf6c3YFIqzp07h02bNqFu3boWn3vsdZI9HZxwG6Zys9999x1z8uRJ5plnnmFCQkKYS5cuKS2aV/J///d/THh4OLNt2zbmypUr5ldJSYl5m/fff58JDw9nVq5cyRw7doy55557eMv8NWzYkNm0aRNz+PBh5rbbbuMtH9ehQwdm7969zN69e5n27dtT6UUHYVeFYhi6RmrgwIEDjF6vZ959913m3LlzzM8//8wEBwczy5YtM29D10l57rvvPqZBgwbmcrMrV65kIiMjmRdeeMG8DV0n91NYWMgcOXKEOXLkCAOAWbBgAXPkyBFzNSF3XRNTGdPBgwczhw8fZjZt2sQ0bNiQys1WY+s6VVRUMOPGjWMaNmzIJCcnW6wpysrKzPvwxOtEioWH88UXXzCNGjVi/P39mc6dO5tLnxLyA4D39f3335u3MRgMzOuvv87ExMQwAQEBTP/+/Zljx45Z7OfWrVvMzJkzmTp16jBBQUHMmDFjmPT0dIttrl27xkyZMoUJDQ1lQkNDmSlTpjA3btxww6/0PriKBV0jdfD3338zCQkJTEBAANO6dWvmm2++sficrpPyFBQUME8//TQTHx/PBAYGMk2bNmXmzp1rsfCh6+R+tm7dyjsX3XfffQzDuPeapKWlMaNHj2aCgoKYOnXqMDNnzmRKS0td+fM9BlvXKTU1VXBNsXXrVvM+PPE6aRiGYeT3gxAEQRAEQRAE4UtQjgVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE5DigVBEARBEARBEE6jV1oAb8BgMCArKwuhoaHQaDRKi0MQBEEQBEEQssAwDAoLCxEbGwut1rZPghQLGcjKykJcXJzSYhAEQRAEQRCES8jIyEDDhg1tbkOKhQyEhoYCMJ7wsLAwhaUhCIIgCIIgCHkoKChAXFyceb1rC1IsZMAU/hQWFkaKBUEQBEEQBOF1iAn3p+RtgiAIgiAIgiCchhQLgiAIgiAIgiCchhQLgiAIgiAIgiCchhQLgiAIgiAIgiCchhQLgiAIgiAIgiCchqpCEYqSV1SGk1kFSLtegrKKKgT769GgdhASG0YgPNhPafEIQjHKKqtw6kohzuUUorC0EgAQEx6IVjGhaBoZQs04CZ+FYRikXy/BqSsFyCkoQ0WVARHB/mhUNxjtG4Qj0E+ntIgE4bOQYkG4ndKKKqw4dBkrD1/GkfSbvNtoNECnuAhM7haPcYmxNFEQPgHDMDh46QZ+2peGLadyUFxexbtdTFggxifGYkqPRoivG+xmKQlCGXILS/HjnjT8czQLl66V8G4ToNdiQMt6uLdHPAa0rEcKOEG4GQ3DMIzSQng6BQUFCA8PR35+PvWxsIHBwGD5wQws2HgGeUXl5veb1gtB08haCAnQoai0EhfzipGaV2z+PCYsEM8Na4k7OjeEVkuTBOGdnMwqwBtrTuDApevm9+qE+KN1TCjq1gqAgWGQdfMWTmQVoLzSAADQaTW4p3scnh3SEnVrBSglOkG4lOKySizcdBY/7E0z3/v+Oi1axYSiYe0g+Ou1uF5cjtPZhbhaWGb+XseG4Zg7ui26N6mjlOgE4RVIWeeSYiEDpFjYJ+N6CZ79LRlJaTcAAA0igvBg3yYY06E+osMCrbbPzi/F6uRM/LjnErLySwEAfZtH4qNJHRETbr09QXgqlVUGfLLpLL7afhFVBgb+Oi3u6NIAd3eLR4cG4VbKdGlFFbafvYpl+9Kw81weACCylj8+uKMDBreJVuInEITL2HMhD8//nmKeBzrHR+D+Pk0wuHUUQgIsgy4YhsHp7EKsSLqM3w6mmz1+D/ZpghdGtCLPN0E4CCkWboYUC9tsP3sVTy8/gpslFQjx1+G5Ya0wrVcj+Ons1w4orajC0j2XsHDTWZRWGBAR7IdvpnUlCxThFeQVleHJX45g78VrAICRCTF4bWxb1A8PEvX9vReu4c2/T+B0diEA4NEBTfHi8Nbk2SM8HoZh8PWOi5i/7jQMDBBXJwhvjU/AQJHhTVcLy/DxhjNYfjADANC2fhiW3N+NDFME4QCkWLgZUiyE+ePQZbzwRwoMjNEt/cWUzmhYW3pM+IWrRXh6+REczyyAv06LDyd1wPjEBi6QmCDcQ8b1Ekz9bj/SrpUg2F+H+Xd2wJgOsZL3U1pRhQ/Xn8F3u1IBAKPax2DBXYlknSU8lioDg1f/Oo5f9qcDAO7o3BDvTEhAkL/0e3rr6Vw8vyIF14rLERMWiCX3d0PbWJqnCUIKpFi4GVIs+Plx7yW89tcJAMaJ4b2JCQjQO77YuVVehWd/S8a6E9nQaICPJ3XExM4N5RKXINzGxatFmPLtflzJL0XD2kFY+kA3NI8KdWqfKw9fxot/HkVFFYPbWkfhy6mdnXreCEIJKqsMeG5FCv5KzoJGA7w1rh2m9mzkVBJ2xvUSPLD0IM7nFiEi2A+/zOhJygVBSEDKOpf6WBAuYeXhy2al4sE+TfDRpA5OL3KC/HVYNKUzpvaMB8MAz69IwZqULDnEJQi3kZ1fimnfHcCV/FI0j6qFPx7r7bRSAQATOzfEDw90R6CfFltO52LmL0dQUWWQQWKCcA8Mw+CV1cfxV3IW9FoNPp3cCdN6NXa6slNcnWD8+X+9kRgXgZslFZj63X6czSmUSWqCINiQYkHIzvazV/HCH0cBADP6NsGrY9rIVvJPq9XgrXEJuKd7HAwM8NzvyTiQet3+FwlCBeTfqsD93x9A5s1baBoZgt8e6SlrzHfv5pH4dno3+Ou12HgyB2+sOQFyShOewiebzmH5wQxoNcDn93bG2I7SQwOFCA/yww8PdkeHhuG4XlyOB74/aFFBiiDUTErGTcxbewpVBvWP56RYELJyPrcQjy87hEoDg/GJsXh5lHxKhQmtVoN3J7THqPYxqKhi8OhPSUi7Vmz/iwShIFUGBjN/OYzT2YWoFxqAHx7s7pISsX1bROKLeztDowF+3p+OpXsuyX4MgpCbVUcu49PN5wAAb09IwIiEGNmPER7khx8f7I4mkSHIvHkLj/yUhNIK/l4xBKEWrhaW4ZGfkvD1jotYtPW80uLYhRQLQjaKyirx6E+HUFxehZ5N6+DDOzu6rDqNVqvBx5MS0aFhOG6UVODhH5NwS6CZGEGogYWbzmLnuTwE+mmx9IFuiKvjusZ2Q9tGY87I1gCAt/85iT0X8lx2LIJwllNXCjBn5TEAwBODmmFKj0YuO1ZEsD++u68rwoP8cCT9Jl5ZfdxlxyIIZ6msMuDJXw8jp6AMzaNq4f4+jZUWyS6kWBCywDAMXvzzKC5cLUZMWCA+v7cz/PWuvb2C/HVYPL0r6oUG4GxOEd7654RLj0cQjrLldA4+22K0NL0/sQPaxYa7/JgP92uKOzo3hIEBnlmejLwiCvsg1EdBaQX+b9khlFYY0K9FJGYNbeXyYzatVwuLpnSGVmOsXLjqyGWXH5MgHOHDDWew7+J1hPjr8NXULggN9FNaJLuQYkHIwu9JGfj36BX46TT4YkpnRLqpC3B0WCAW3p0IjQb49UAGJXMTqiO3sBTP/Z4CALivVyNM6OSeMskajQZvT2iH5lG1kFtYhud+T4HBA+JzCd/i9b9O4NK1EjSICMKnkztB56YeLH2aR+LJ21oAAOauOo6LV4vcclyCEMuuc3n4evtFAMCHkzqieVQthSUSBykWhNNkXC/BW3+fBAA8P6wVujSq7dbj92keiZmDmgMA5q48huzqDq0EoTQMw+Dllcdxo6QCbeuHYe7otm49frC/Hl/c2xkBei22n72Kn/alufX4BGGLdcevYNWRTGg1wKf3dELtEH+3Hv+pwS3Qo0kdlJRX4dnfUzwiMZbwDQpKK/DCH0aD1NSe8RjVvr7CEomHFAvCKQwGBrP/SEFxeRW6Na6NGf2aKiLH04NboGNcBArLKjF31TGqhEOogj8OXcamUznw02mw4O6OLg8P5KNVTCheHtUGAPDButPIuF7idhkIgkteURnmrjLmNzw2oJnbDVIAoNNqsHByIkID9EjJuIkl1U0mCUJp3vr7JLLyS9GobrB5/PYUSLEgnOLn/WnYd/E6gvx0+GhSR7e5sbnodVp8eGcH+Ok02Hw6l0KiCMXJKSg1e/KeHdoSrWOUa8g1rWcjdG9stMy+TIo3oQJe/+sErhWXo3VMKJ4e0kIxOeqHB+GVMcaF20cbziA1jyoMEsqy9XQu/jh02dwIONhfr7RIkiDFgnCYq4VlmL/+DADgpZGt0ahuiKLytIwOxVPVMbOvrzmB68XlispD+Dbv/HsKhWWV6BgXgUf7N1NUFq1Wgw/u7IAAvRY7z+Xhj0OUrEoox/azV/HvsSvQaTX4aFJHxTvE39U1Dn2bR6Ks0oCX/jxKijehGKUVVXhtjdGTN6NvE3RtXEdhiaRDigXhMPPWnkJhaSU6NAzH1J6uKw8ohccGNkPrmFDcLKnAh9VKD0G4m93n8/B3Sha0GuDdCQmKefLYNIkMwayhLQEA7/93Gvm3KhSWiPBFSiuq8PpfxoXTfb0aI6GB6yuk2UOj0WDexPYI9NNif+p18ngTirFo2wVkXL+F+uGBeGZIS6XFcQhSLAiH2HfxGlYeyYRGA7w9Xh0LJwDw02nx1vgEAMDyg+k4djlfYYkIX6O80oDXqhdO03o2UsXCycQDfZqgWb0QXCsux8JNZ5UWh/BBvtlxEZeulSAqNADPDlUuBIpLXJ1gPDHQWATkvbWnUFxWqbBEhK9xKa8YX22/AAB4bUxbhAR4VgiUCY9TLBYtWoQmTZogMDAQXbp0wc6dO21uv337dnTp0gWBgYFo2rQpvvrqK8Ftly9fDo1GgwkTJsgstXdRWWXA638Ze0bc0z0eHeMilBWIQ/cmdTCuYywYBnh9zXFyaxNu5fvdqbhwtRiRtQIwa5jra/JLwV+vxRvj2gEAftybhrM5hQpLRPgSl2+U4IvqzsGvjGmrupr8D/dvirg6QcgpKMPnHtDhmPAu3vz7BMorDejfsp5LOs+7C49SLH777Tc888wzmDt3Lo4cOYJ+/fph5MiRSE9P590+NTUVo0aNQr9+/XDkyBG8/PLLeOqpp/Dnn39abZuWlobnn38e/fr1c/XP8Hj+OHQZZ3IKERHshxeGq2vhZOLlUW0Q7K/D4fSbWJ2cqbQ4hI9wo7jcvCB5aWRrhAepa+EEAP1a1MOwttGoMjB48+8TpHgTbmPBhrMoqzSgZ9M6GNtBfeUzA/10eLW6JPS3Oy/iEiVyE25iz/k8bD1zFX46Dd4c1w4ajTqiQBzBoxSLBQsW4KGHHsKMGTPQpk0bLFy4EHFxcfjyyy95t//qq68QHx+PhQsXok2bNpgxYwYefPBBfPTRRxbbVVVVYcqUKXjzzTfRtKky5VI9hVvlVfikOoRi5qDmiAh2b91xscSEB+KJ6t4WH60/i7LKKoUlInyBz7eeR2FpJdrUD8NENzXCc4RXx7SFv06L3eevYee5PKXFIXyAE1n5WFVt5Jk7qq1qF05D20ajX4tIVFQx+HgjhQsSrsdgYDDvv9MAgCk9GqFJpLKFcJzFYxSL8vJyHDp0CMOGDbN4f9iwYdizZw/vd/bu3Wu1/fDhw5GUlISKiprExbfeegv16tXDQw89JEqWsrIyFBQUWLx8hSW7U5FTUIaGtYMwrZc6EraFeLBPE0SHBSDz5i38vI/fq0UQcpFxvQQ/7TU2oJszsjW0Ksk74iOuTrD5+f1g3WnqyE24nPf/Ow2GAcZ1jEX7hurJO+Ki0Wjw0sjWAIC/U7JwPJPy9AjX8vfRLBzLzEetAD2evK250uI4jccoFnl5eaiqqkJ0dLTF+9HR0cjOzub9TnZ2Nu/2lZWVyMszWul2796N7777DosXLxYty7x58xAeHm5+xcXFSfw1nsm1ojJ8uc2YWDR7eCvFSwTaI8hfh6cHG6sqfL71PIooGY9wIR9tOIPyKgP6No9E/5b1lBbHLo8PbIZaAXqcyCrAv8euKC0O4cXsPHcVO8/lwU+nwWyVhs+yaRcbjnEdYwGAqgsSLqWssgofbTDeY48NaIq6tQIUlsh5PEaxMMF1nzIMY9Olyre96f3CwkJMnToVixcvRmRkpGgZ5syZg/z8fPMrIyNDwi/wXBZtu4CiskokNAjD2A6xSosjikldG6JJZAiuF5dj8Y6LSotDeCknswrwV7KxRKXJ2ql26tYKwMP9jKGfH284g4oqg8ISEd4IwzD4YJ0xzGNaz8aIqxOssETimDW0JfRaDbafvYq9F64pLQ7hpfy6Px0Z128hOiwAD/X1jlB8j1EsIiMjodPprLwTubm5Vl4JEzExMbzb6/V61K1bFxcuXMClS5cwduxY6PV66PV6/Pjjj1izZg30ej0uXLjAu9+AgACEhYVZvLyd3MJSLNtnDPOYPVzdYR5s/HRaPF9dmefbnRdxg5rmES7g083nAABjOtRXVXlZe8zo1wR1Q/xx6VoJViRR0zxCfjafysXxzAIE++sw04PCPBpHhuCe7vEAgPnrT1ORA0J2Siuq8GV1edknb2uBIH91R4GIxWMUC39/f3Tp0gUbN260eH/jxo3o3bs373d69epltf2GDRvQtWtX+Pn5oXXr1jh27BiSk5PNr3HjxmHQoEFITk72mRAnMSzecRFllQYkxkWgfwvx3h01MDIhBm3rh6G4vApLdqcqLQ7hZZzOLsC6E9nQaICnBqunLr8YQgL0eLy6yMGibefJa0HICsMw+HSLUeme3qsx6oSos9iHEE/e1hwBei2OpN/EHvJaEDLze1IGcgrKEBseiEldGyotjmx4jGIBALNmzcK3336LJUuW4NSpU3j22WeRnp6Oxx57DIAxRGn69Onm7R977DGkpaVh1qxZOHXqFJYsWYLvvvsOzz//PAAgMDAQCQkJFq+IiAiEhoYiISEB/v6eNQi6iryiMiyrTn5+ekgL1VbzEEKr1ZgTopbuvkQdhwlZ+WyzsbzsqIT6aBkdqrA00rm3ezwia/nj8o1b5nAugpCDbWeu4ujlfAT56fBwvyZKiyOZqLBAs9fC5JUkCDkoq6wy56z+38Bmqs9ZlYJHKRZ33303Fi5ciLfeeguJiYnYsWMH1q5di0aNjNVNrly5YtHTokmTJli7di22bduGxMREvP322/j0009xxx13KPUTPJLFOy/iVkUVOjYMx0APSErlY3i7GLSMroXCskr8uOeS0uIQXsLZnEKsPW5MfH5ysOeEebAJ8tdhRnWuxaKt51FFFaIIGWAYBv+rXoxP69XIY5NSH+nfFH46DfanXseB1OtKi0N4CSuSLuNKfimiwwIwqat3RcdoGAocdJqCggKEh4cjPz/f6/ItrheXo+8HW1BSXoXv7uuKwW3481k8gb+SM/H08mREBPth14u3oVaAXmmRCA/nyV+P4O+ULIxMiMGXU7soLY7DFJVVou8HW3CzpAL/m5yI8Ynq7cFBeAbbz17FfUsOIECvxa4Xb0O9UM9ULABgzspj+PVAOvq1iMRPD/VQWhzCwymvNGDQR9uQefMW3hjbFvf3Ub83T8o616M8FoT7Wbo7FSXlVUhoEIbbWkcpLY5TjOkQiyaRIbhZUmFORCcIR7mUV4x/jhpDh568zbNyK7jUCtDjwerJ7Yut56mvBeE0X1R3oJ/So5FHKxWAsTSzTqvBznN5OJJ+Q2lxCA9ndXImMm/eQr3QAEyuDrXzJkixIAS5VV6Fn6oX4I8PbO5xuRVcdFoNHh/YDACwZFcqdeMmnOK7XalgGGBQq3poG+v5nsr7ejdGaIAeZ3OKsOV0rtLiEB5McsZNHEi9Dr1Wg4f7q98aa4+4OsG4vZPRi/f1dipbTjgOwzDm0vcP9W2CQD/vya0wQYoFIcgfhy/jRkkF4uoEYXi7GKXFkYXxiQ0QHRaA3MIyrKFEVcJBrheXY8UhY/+ah/t7R+3x8CA/3NvDaD1bvJMWT4TjmO6fcYmxqB8epLA08vBI9XO+/mQ20q4VKywN4alsO3sV53KLUCtAbx5vvQ1SLAheqgwMvqueHGb0bQqdh/StsIe/Xov7exstaEaLM4V8ENJZti8NpRUGJDQIQ6+mdZUWRzbu79MYeq0xUfXY5XylxSE8kIzrJfivupO7qQGjN9AyOhQDWtYDwxg93gThCN9Wr6vu7haHsEA/haVxDaRYELxsPJmDS9dKEB7k51X1lQFjec1gfx1OZxdi57k8pcUhPIzSiir8uPcSAOPCydNDBNnUDw/CmA71AZDXgnCMJbtTYWCAfi0i0aa+54cIsjEpSr8nXcbNEmq2SkjjeGY+dp+/Bp1Wgwf6NFZaHJdBigXBi0mrntozHsH+3lU9KTzYD3dVl3ejxRMhldVHMpFXVI4GEUEY1b6+0uLIjqn07L/HriDz5i2FpSE8ifySCvx2sDpE0Iu8FSb6NK+L1jGhuFVRhZ/3p9v/AkGwMK2rRrevj4a1gxWWxnWQYkFYcSjtBpLSbsBfp8V9vRorLY5LeKhvE2g1wM5zeTidXaC0OISHYDAwZmX0gT6N4afzviE0oUE4ejWtiyoDg6XUqZ6QwM8H0lBSXoXWMaHo1yJSaXFkR6PRmBWmH/ZcQnkldaonxJF18xb+Pup9IYJ8eN+sSDjN99WLifGJsYgKC1RYGtcQVycYIxKMCenf7aTFEyGOHeeu4sLVYoQG6HF3N+9qasTGVMln+YEMFJVVKiwN4QlUVhnw4x5jFcEZXhYiyGZsx1hzAZC/U6gACCGOn/alocrAoGfTOmjfMFxpcVwKKRaEBbkFpVh3PBuAMZHTm3mor3HxtCYlCzeKKV6WsM9Pe40Lpzu7NkSolybeAcDAllFoGhmCwrJKrDqSqbQ4hAew8WQOsgtKUTfEH2M7el+IoAl/vRbTqz35plwrgrBFaUUVlh8whs494AHN8JyFFAvCgl8PZKDSwKBLo9poF+vdWnXn+NpoWz8MZZUGc+lQghAi43oJtpwx9neY1rORwtK4Fq1Wg6nVv/GnvZeoehphlx+rle7J3eMQoPe+2vxs7u4WB3+dFimX85GScVNpcQiV8+/RK7hRUoHY8EAM9vBGw2IgxYIwU1FlwC8HjJPD9F7evXACjPGypt+5bF86dRsmbLJsfxqY6mo3TevVUlocl3NHl4YI8tPhbE4R9qdeV1ocQsWcyynE3ovXoNUA9/bw/rkjslYARrU3htKamsgShBA/Vt8jU3o2gt4L8/K4eP8vJESz8WQOcgrKEFnL35x/4O2MS4xFaKAe6ddLsP3cVaXFIVRKaUUVfq+uduPt3goT4UF+mFDdbZgWT4QtTPfHkDbRaBDhHQ3x7DGtOhzqbwqlJWxw9PJNpGTchL9O69V5eWxIsSDMmOJFJ3eL93pXtolgfz0mdTE+7Kb4eYLg8k+1K7tBRBAGt4lWWhy3YfLorT+ejdyCUoWlIdRIUVklVh425uFM99Iqgnx0jo9Au1gKpSVsYwoRHNU+BpG1AhSWxj2QYkEAAM7mFGLfxevQaTVe22ZeiKk9jb9365lcZFwvUVgaQo38VK1039sj3mu60IuhTf0wdGtcG5UGBr8coLr9hDWrDl9GUVklmtYLQZ/m3tOF3h4USkvY40Zxubly2DQfUrolKxaXLl3CTz/9hLfffhtz5szBggULsHXrVpSWkjXLkzFZ64e2iUasj7iyTTStVwv9WkSCYYxx9ATBJiXjJlIu58Nfp8VkH3FlszElcf96IB0VVVS3n6iBYRizRXZaz0ZeW2JWiHEdGyDMFEp7lkJpCUt+T8pAWaUB7WLD0Dk+Qmlx3IZoxeKXX35Bz5490bRpU8yePRurV6/Gzp078e2332LEiBGIjo7G448/jrQ0Wph5GsVllVh5+DIA30ja5sMUN//7wQyUVVYpLA2hJn6uVjZHd6iPuj7iymYzMqE+ImsFIKegDJtO5igtDqEiDl66gXO5RQj21+GOLg2VFsftBPnrMKmr0diwjPKQCBYGlpd3ei/fUrpFKRadO3fGggULMHXqVFy6dAnZ2dk4dOgQdu3ahZMnT6KgoAB//fUXDAYDunbtihUrVrhabkJG/j16BcXlVWgSGYJezXzHlc1mcJtoxIQF4kZJBTbS4omoprC0An+nGLulTvGxEEET/not7u5mXDT+lkSx5EQNyw8aF07jOsYizIv7utjCNC5sPZOL7HyK3CCM7Eu9hrRrJQgN0GNsx1ilxXErohSLt99+G0lJSZg5cybi460n14CAAAwcOBBfffUVTp06hcaNG8stJ+FCTJPDXV3jfEqrZqPTanBX1+rF00FaPBFG/jl6BbcqqtCsXgi6NKqttDiKcVe1VXb72avIunlLYWkINZB/qwJrjxmVbl+pdsNH03q10L1JHRgY4A9K4iaqMa0jxiXGIthfr7A07kWUYjF69GjRO4yMjES3bt0cFohwL+dyCnE4/SZ0Wg3u6NJAaXEUZVLXOGg0wM5zeZTETQAAlldPDpO7xfus0g0AjeqGoFfTumAYYEXSZaXFIVTAmpQslFYY0Co6FIlxEUqLoyim3KvfkjIoiZvAzZJy/Hc8G4BvKt2iFIuCggLRL8KzMGnVg1tHISo0UGFplCWuTjD6No8EAKygkA+f59SVAqRk3ISfToPbO/u20g0YOyoDxoTEKlo8+Ty/mTzd3XzX021iZEJ9hAbokXH9FvZevKa0OITCrD6SifJKA9rUD0P7BuFKi+N2RCkWERERqF27tqgX4TmUVVZh5RFj/XHTosHXMVkXfk+6TIsnH8ekdA9pE+0z9cdtMbxdDMKD/JB58xZ2n89TWhxCQY5n5uN4ZgH8dVrc3omU7iB/HcZ3MsbRL6dQWp+GYRiWp9s3lW5RisXWrVuxZcsWbNmyBUuWLEFUVBReeOEFrFq1CqtWrcILL7yA6OhoLFmyxNXyEjKy6WQurheXIyYsEP1b1FNaHFUwtG00agf7IbugFDuofKDPUlpRhVXVSrcvurL5CPTTmReRlIfk25iu/7B20agT4q+wNOpgcjdj/un649nUiduHOZaZj9PZhfDXazEh0TeVblEZJQMGDDD//dZbb2HBggW45557zO+NGzcO7du3xzfffIP77rtPfikJl2BK2r6zS0PoddQrEQAC9DpM7NwQ3+1KxfKD6RjUOkppkQgFWH8iG/m3KhAbHoh+pHSbubtbHJbuuYQNJ7NxrajMJ8vv+jqlFVVYnVzt6e7mm5XS+EhoEI52sWE4kVWAVUcy8WDfJkqLRCiAyVsxKiEG4cG+WSlN8mpy79696Nq1q9X7Xbt2xYEDB2QRinA9GddLsKs6nMFU8YUwYrJQbz6Vi9xCKh/oi5gsspO6xvlUp217tKkfho4Nw1FRxZg9OoRv8d/xKygsrUTD2kHo7aPlyYUwJ3EfzADDUCitr1FSXok1ycZO23f5sKdbsmIRFxeHr776yur9r7/+GnFxrj+RixYtQpMmTRAYGIguXbpg586dNrffvn07unTpgsDAQDRt2tRK9sWLF6Nfv37mHJEhQ4b4hIK04tBlMAzQp3ldxNcNVlocVdEyOhSd4yNQaWCw8jAtnnyNtGvF2HPhGjQaYFJX32v6ZY+7q63Uy2nx5JMsP2BUuu/qGgctKd0WjEtsgAC9FmdyCpGccVNpcQg38+/RKygqq0SjusHo2cR3lW7JisUnn3yCRYsWISEhATNmzMCMGTOQkJCARYsW4ZNPPnGFjGZ+++03PPPMM5g7dy6OHDmCfv36YeTIkUhPT+fdPjU1FaNGjUK/fv1w5MgRvPzyy3jqqafw559/mrfZtm0b7rnnHmzduhV79+5FfHw8hg0bhsxM711QGgwM/jxkLBlJ3gp+TOflz0OXafHkY5iejb7NI9GwNindXMZ2rI9APy3O5xbh6OV8pcUh3EjatWLsT70OrcYYQktYEh7kh1Ht6wMA/jhEZZl9DVMpbl9XuiUrFqNGjcK5c+cwbtw4XL9+HdeuXcP48eNx9uxZjBo1yhUymlmwYAEeeughzJgxA23atMHChQsRFxeHL7/8knf7r776CvHx8Vi4cCHatGmDGTNm4MEHH8RHH31k3ubnn3/G448/jsTERLRu3RqLFy+GwWDA5s2bXfpblGRf6jVk3ryF0EA9hreLUVocVTKqQ30E6LU4l1uEY5m0ePIVDAbGXCltEindvIQG+mFE9bjx52FaPPkSJg9u3xb1EBsRpLA06uSOzkaF6++ULJRVViksDeEu0q+V4MCl69Boau4BX8WhjN2GDRvivffew8qVK7Fq1Sq8++67Lg+DKi8vx6FDhzBs2DCL94cNG4Y9e/bwfmfv3r1W2w8fPhxJSUmoqKjg/U5JSQkqKipQp04deQRXIabJYUyH+gj00yksjToJC/QzK10UDuU7HLx0HZdv3EJogB7D2kYrLY5qmVg9ca5JyUJ5pUFhaQh3wDAMVh4xKpJ3UF8XQXo1q4uYsEAUlFZiy6lcpcUh3IQp56xPs0jEhPt2TzCHSwGVlJTg9OnTOHr0qMXLVeTl5aGqqgrR0ZaTfXR0NLKzs3m/k52dzbt9ZWUl8vL467C/9NJLaNCgAYYMGSIoS1lZmcc2Biwpr8R/x64AqFkcEPxMrJ48/0rOpMWTj2BSIke1J6XbFn2aRyI6LAA3Syqw5TQtnnyBpLQbyLh+CyH+OgxrS55uIXRaDSZUl2Umj55vwFa6J5LSLV2xuHr1KsaMGYPQ0FC0a9cOnTp1sni5Gm6zEYZhbDYg4due730AmD9/Pn799VesXLkSgYHCGue8efMQHh5ufrkjaV0uNpzIQXF5FeLqBKFrI2poaIu+zSNRLzQAN0oqsO0MLZ68ndKKKvxrVrppcrAFe/G0khZPPoHpOo9qXx9B/qR028Lk0dl25iryisoUloZwNYfTbyDtWgmC/XUUXg4HFItnnnkGN27cwL59+xAUFIR169bhhx9+QIsWLbBmzRpXyAgAiIyMhE6ns/JO5ObmWnklTMTExPBur9frUbeuZcb+Rx99hPfeew8bNmxAhw4dbMoyZ84c5Ofnm18ZGZ7TLMpkQZnYqaFPdoSUgp7VVZbCobyfDSdzUFRmLKPZrbH3hkLKxcRORo/n1jPGRpuE91JaUYV/jhqV7ttJ6bZLi+hQdGgYjkoDg79TspQWh3Axf1avD0YkxCAkQFR7OK9GsmKxZcsWfPLJJ+jWrRu0Wi0aNWqEqVOnYv78+Zg3b54rZAQA+Pv7o0uXLti4caPF+xs3bkTv3r15v9OrVy+r7Tds2ICuXbvCz6+mccmHH36It99+G+vWrePt0cElICAAYWFhFi9PIKegFLure1eQRVYcpvO0+XQOdVP1claale4GPl3RQyytYkKR0CAMFVW0ePJ2Np3KQWFpJWLDA326jKYUTAm8FA7l3ZRWVOGf6vHP15O2TUhWLIqLixEVZexGXKdOHVy9ehUA0L59exw+fFhe6TjMmjUL3377LZYsWYJTp07h2WefRXp6Oh577DEARk/C9OnTzds/9thjSEtLw6xZs3Dq1CksWbIE3333HZ5//nnzNvPnz8crr7yCJUuWoHHjxsjOzkZ2djaKiopc+luU4K/kTBgYoGuj2mhUN0RpcTyC1jFhaBdrXDz9c5QWT95KbmEpdpw1jmW30+QgGlo8+QYmj+3tnUnpFsvYjrHQazU4nlmAM9mFSotDuIgtp3NRUFqJ+uGB6NmUlG7AAcWiVatWOHPmDAAgMTERX3/9NTIzM/HVV1+hfv36sgvI5u6778bChQvx1ltvITExETt27MDatWvRqFEjAMCVK1cselo0adIEa9euxbZt25CYmIi3334bn376Ke644w7zNosWLUJ5eTnuvPNO1K9f3/xil6T1BhiGwZ+HjJMDJW1Lw3S+/qBwKK9lTXIWDAzQOT4CTSJJ6RaLafF09HI+zuXQ4skbuVpYhu0mpbsTzR1iqRPij0GtjUZYU2Iv4X2YPN0TOjWAjpRuAIDkYLBnnnkGV64YYy1ff/11DB8+HD///DP8/f2xdOlSueWz4vHHH8fjjz/O+xnf8QcMGGDTk3Lp0iWZJFM3J68U4ExOIfz1Woxu71oF0NsY1zEW7609hZSMmzifW4TmUbWUFomQGVOMLCnd0oisFYCBreph06lcrDySiRdHtFZaJEJm1qRkocrAoGNcBI19Ermjc0NsPJmD1Ucy8cLw1rTw9DLyisqw7YxR6Z7YicLLTUj2WEyZMgX3338/AKBTp064dOkSDh48iIyMDNx9991yy0fIhMmVPbRNNMKD/exsTbCpFxqAgS3rAaAKON7IyawCnLpSAH+dFmM6kNItFVM41KrDmagyUJd6b8M05lHvCukMal0PEcF+yCkoM+c3Et7D3ylZqDQw6NAwHC2iQ5UWRzVIUiwqKirQtGlTnDx50vxecHAwOnfujMjISNmFI+ShssqAv5JNFlmaHBzBZMlefSQTBlo8eRWrqsMUBreJQkSwv8LSeB63tYlCeJAfsgtKsffCNaXFIWTkdHYBTmQVwE+nwZgOsUqL43EE6HUYW33eyCjlfZgMtuStsESSYuHn54eysjIqU+ph7DyXh7yictQN8Uf/ass7IY3BbaIQGqBHVn4pktJuKC0OIROVVQasTjYm5VMYlGME6HUYXe3pMRkwCO9gVfXCaVCrKNQJIaXbEUzleTeczEFJeaXC0hBycS6nEMcy86HXajC2IyndbCSHQj355JP44IMPUFlJD4inYGo1P7ZjLPx0Djdb92kC/XQYkWBsfLOaFk9ew54L13C1sAy1g/0wgJRuhxlfPbGuO56N0ooqhaUh5MBgYPCXWen+//buPKzJM+sf+DcLCXvYlyCrKCCrggsu1daKG2qrXW0ZHa3TTluXtr+2WqdT35lpbeft2zqdLna1dhs7rbu1Vq27gjuriigICISdJGwJJPfvj5BUCmKAhCcJ53Ndua42eRIOt8DznOe+z7npjmxfjQx0Q6CHA5rVGhy8TBut2gr9dcCUCG94Oos5jsay9Poq8/Tp09i2bRuCgoIwffp0zJ8/v9ODWJZmdTsOXKoEAMNOuaRv5iXoxm9vTgXU7VqOoyGmsKuj//jsOH+IhJR099XoEA/4S+yhVLXTLvU24syNOsgUrXARCzElwofrcKwWj8fDvHjduWMX3ZSyCYwxw7ljbgJdV/1er8+kbm5uWLBgAaZPnw6pVAqJRNLpQSzLwctVaGnTINjTEfFD6N+nP5KHesLLWYyG5jYcL6jmOhzST61tGvySKwMAzI2nk0N/8Pk8zO2YtdDf5SbWTX/hNCPGD/Z2Ao6jsW73jdT9bhzJr6aNVm3AxdIGlNa1wFEkwL1RlHT/Xq/bzW7atMkccRAz0d8hmRMnpdqYfhLweZgT749NJ29gZ2Y5pkb5ch0S6Ycj+VVQqnQbGyUFu3MdjtWblxCAj48V4tcrVVC0tsHVnrrPWas2jRY/5+jays9NoPXj/RXu44IR/q64VKHA3twKPDY2mOuQSD/s6rh5Mm2ELxxFvb6Mtnk092/DGprVho2N5tHJwSTu65j2PHCpEk0qqjOyZvo7snPipbSbsAlE+btgmI8z1O1a7OuYCSLW6URBDeqb2+DlLEIy7SZsEvpzMM3oWTeNluEnfdJNRdvdMiqxmDFjBk6dOnXH45RKJd566y188MEH/Q6M9N++XBnaNAyRfi7UY9lE4oZIEOLpiJY2jaF2hVgfZWsbfu0opKSTg2nweDzDxdMuuniyavruXrNj/SGkhh8mMSdeCh4POFNUh/KGFq7DIX2UUahr+CFxsMOkYdTwoztG/cV48MEH8dBDDyEqKgovv/wyfvjhB5w8eRLnz5/HwYMH8d577+Ghhx6Cv78/Ll68iLlz55o7bmKE34qL6MLJVHg8nqFYi1prWq8DlyqhatcizNsJ0VJXrsOxGfpalVPXa1ClaOU4GtIXLWoN9nfcNKHCVNORujlgTIgHAN3GasQ66c/7s2Kp4cftGDUqS5cuRWFhIV599VVcuXIFTz75JCZNmoTRo0dj+vTp+PTTTxEUFITz589jy5YtCAwMNHfc5A6qFK1IL9RtVjWHNjYyKf0d7mMFNahtVHEcDekLQ9IdT7VHphTk6YhRQW7QMmBPdgXX4ZA++PVKJZrVGgxxd8CoIDeuw7Ep8ww3pSixsEaqdg1+NjT8oOuq2zE63RKJRFi4cCF27tyJuro61NfXo7y8HK2trcjJycHbb7+NiIgIc8ZKemF3dgUYAxKD3RHo4ch1ODYl3McZMQGu0GgZ9tJacqtT26jC8YIaAHRyMAfDxRPdlbVK+mVscyjpNrmZMX6wE/BwqUKBgkol1+GQXjqaXw1lazt8XcUYE+rBdTgWq8/zOBKJBH5+frCzo84flujWO7LE9PRF3NSX3PrszZVBo2WICXBFmLcz1+HYnFmx/hDwecgqbUBRTRPX4ZBekLe04Ui+ruEHnTtMz91JZNiIk2YtrI/+uio1TgoBNfy4LVogZoOKa5uQVdoAPk93kiemlxqnK8Q7e6MeN+ubuQ6H9MLuTEq6zcnbRYwJ4V4AqIjb2vySK4Nao8UwH2dE+lHDD3Mw1OhllYExxnE0xFhNqnYcvNxRe0Tnjh5RYmGD9IVhE8K94O1CW82bg5/EHuNCdW0Yd9GSD6tR3tCCMzfqwOPplnoQ85in3yyPLp6siv5v2bwEWgZlLtOifOEoEqC0rgUXSxu4DocY6cClSrS2aRHi6Yg42my4R5RY2BjGmGGKlbJq86LWmtZnT7bu32p0iAf8JQ4cR2O7psf4QSzko7C6CXnlCq7DIUaoUrbi1HVd7REl3ebjIBJgerQfADp3WBNq+GE8SixszBWZEgVVjRAJ+Zge48d1ODZtZow/RAI+rsiUuCKjiydrQEn3wHAWC3HvCN3O9DsuUh2SNdibXQEtA+ID3RDs6cR1ODZN3wJ+T3Y52jVajqMhd1LfpMaxjs2GqX3/nVFiYWP0WfXdEd5wtafCenOSONphSoSuEI/uPFm+69WNyCtXQMjnUe3RANAvh9qdXQ6NlpZDWTpq+DFwJoZ7wcNJhJpGNU5dr+U6HHIHP+fK0K5liPJ3RbgP1R7dickSi6ysLAgEAlN9HOkDxpihvkK/URUxL/3di11Z5bSW3MLpk7+Jw3QndWJekyO84WovRKVChTNFdVyHQ3pQWteMCyUNutqjOEq6zc1OwMfsjpsb1B3K8uk3xZtHsxVGMemMBV1YcetCSQNu1rfASSTA1CgfrsMZFKZG+sJJJMDN+hZcKGngOhxyG52Tbjo5DASxUICZMbqLJ2pwYNn0/z7JYZ7wcbXnOJrBQX9T6pc8GVrbNBxHQ25HJm/FmRu6GyNUe2QcobEHzp8/v8fX5XI5FbRwTL+nwvRoP9jb0ezRQHAQCZAS7YftF8uwO6scicHuXIdEupFXrkBhTRPEQj5Soqn2aKDMTZDi+3Ol2JtTgf+ZGw2RkFbfWiJKugdeYpA7AtwcUNbQgsNXqjCTlmdapD3Z5WAMSArW/XuROzP6r/zu3bvR2toKiUTS7cPZmTaa4lK7RoufcioAAHNoum5AUSGe5dNPZd8b5QtnsdH3U0g/jQvzhLeLGPKWNhwvqOY6HNKNq5VKXJEpYSfgGWaYiPnx+TykxtOMnqUz1B7RdZXRjD7DRkVFYcGCBVi6dGm3r2dmZmLPnj0mC4z0TnphLWoa1XB3tMPEjs2pyMCYGO4Fd0c71DSqkV5Yi0nDvLkOidxCq2XYk92RdNMd2QEl4POQGuePTSdvYGdmOaZG+XIdEvkdfe3R5OHekDhSw4+BNDdeio+PFuLXK1VQtLZRwxULU1TThOybcgio4UevGD1jkZiYiAsXLtz2dbFYjKCgIJMERXpPf3KYHecPOwEtNxhIdgK+4Y8OFeJZnrM36lAhb4WLWGjo4kUGzryOnYYPXKpEs7qd42jIrRhjt9yRpYYfA22EvyvCfZyhbtdif14l1+GQ39FfV00I94KXM202bCyjr0A3btyI//3f/73t61FRUSgqKjJJUKR3Wts02JcrA0DdoLiiv3j6JZcK8SyN/sJpegzVHnEhfogEwZ6OaGnT4MAluniyJJmlDSipa4aDnQD3UsOPAcfj8Qx1LbQcyrLokm7dElqqPeodoxMLsVgMR0dHc8ZilA8//BChoaGwt7dHYmIijh8/3uPxR48eRWJiIuzt7REWFoaNGzd2OWbr1q0YMWIExGIxRowYge3bt5srfLM4kl8Npaod/hJ7JFHxMCeSgt3hL7GHUtWOI/lVXIdDOrRptNjbUXtErQK5cevF0266eLIo+ovZaSN84Sii2iMu6H83Tl6rQU2jiuNoiN6lCgWuVzfpNhuOpiWcvdGnNTNarRZXr17FiRMncOzYsU4Pc/r++++xatUqrF27FhcvXsSkSZMwc+ZMlJSUdHt8UVERZs2ahUmTJuHixYt45ZVXsGLFCmzdutVwTHp6Oh5++GGkpaUhKysLaWlpeOihh3D69Gmzfi+mpD9Zz4mXgs+nzlxc4PPpzpMlOlFQg/rmNng5i5Ac5sl1OIOW/nfj6NVqNDSrOY6GAIDmltojuiPLnRAvJ8QPkUCjZYabIIR7+vP4PRE+cKHal17pdWKRkZGB8PBwREVF4a677sKUKVMMj7vvvtscMRq88847WLp0KZ544glERUVhw4YNCAwMxEcffdTt8Rs3bkRQUBA2bNiAqKgoPPHEE1iyZAnefvttwzEbNmzAtGnTsGbNGkRGRmLNmjWYOnUqNmzYYNbvxVQaVe04eFm3vIBODtzSFwYfvFwFZWsbx9EQ4LeTw+xYfwip9ogzw3xdEOXvijYNw88dyzYJt04X1qJaqYLEwQ53DafaIy7p61uoRs8yaLUMe7Jopruven2mfeqpp5CUlITc3FzU1dWhvr7e8KirM9/uqmq1GufPn0dKSkqn51NSUnDq1Klu35Oent7l+OnTp+PcuXNoa2vr8ZjbfSYAqFQqKBSKTg+u7M+TQdWuRZi3E6KlrpzFQYBoqSuGejtRIZ6FaG3TYH9eR+0RnRw4Z5jRo4sni6C/iJ0V60f7i3AsNc4fPB5wvrgepXXNXIcz6J0vqUdZQwucxULcHUm1R73V678mBQUFeOONNxAVFQU3N7cu+1mYS01NDTQaDXx9O6918/X1hUzW/R0wmUzW7fHt7e2oqanp8ZjbfSYArF+/vtP3HBgY2JdvyWSGuDtgbryUNijkmG4tecedJ1oOxblfL1ehSa1BgJsDRgVR7RHX5nT07M8oqoVM3spxNIObql2Dn3OpBbOl8HW1NyzV3J1N5w6u6W9+pET7UsOPPuh1YjF27Fhcu3bNHLEY5fcXz4yxHi+ouzv+98/39jPXrFkDuVxueJSWlhodv6nNHzUEx1+6G09NHspZDOQ3+jvjJ6/VoJYK8Til7+gxh5JuizDE3RFJwe5gTLeZJOHO8as1ULS2w8dFjLGhVHtkCWhGzzK039Lwg5aX941RbSCys7MN/718+XK88MILkMlkiI2NhZ1d56KWuLg400bYwcvLCwKBoMtMQlVVVZcZBz0/P79ujxcKhfD09OzxmNt9JqDrkCUWW05PYx6PR1m1hQj1ckLcEAmyb8qxN6cCackhXIc0KCla23A4X7fTM50cLMfcBCnOFddjV1Y5npgUxnU4g5a+9ig1TgoBNfywCDNj/PHqzlxckSlxtVKJ4b4uXIc0KJ26XovaJjU8nESYQJsN94lRMxYJCQkYOXIkEhISsGDBAly+fBlLlizB6NGjO702cuRIswUqEomQmJiIAwcOdHr+wIEDGD9+fLfvSU5O7nL8/v37kZSUZEiIbnfM7T6TkDvRX8hSIR539udVQt2uRbiPM6L86QRtKWbF+kPA5yH7phxFNU1chzMoNavbDfuJUO2R5ZA42mHycN16fpq14I4+6Z4V60ebDfeRUTMWlrLx3fPPP4+0tDQkJSUhOTkZn3zyCUpKSvDUU08B0C1RKisrw1dffQVAV2j+/vvv4/nnn8eyZcuQnp6Ozz//HP/5z38Mn7ly5UrcddddeOuttzBv3jzs3LkTBw8exIkTJzj5Hon1mxMvxet7L+NccT1u1jdjiDv3+78MNobdhGkZlEXxchZjQrgXjl2txq7Mcqy8dxjXIQ06By9XoaVNgyAPR8QPMV9dJOm9uQlSHLxciV1Z5XghZTj97RpgrW0a/NLRtW5OHCXdfWVUYhEcHGzuOIzy8MMPo7a2Fn/7299QUVGBmJgY7N271xBfRUVFpz0tQkNDsXfvXjz33HP44IMPIJVK8d5772HBggWGY8aPH48tW7bgL3/5C1599VUMHToU33//PcaOHTvg3x+xDb6u9hgb6oGMwjrszqrAn6dQ/ctAqm1U4eQ1XXMGKky1PPPipTh2tRo7s8qwYmo4XTwNMP3d8Dnx/jT2FubeKB84igQoqWtGZmkDRlLTiQF162bDo0M8uA7HavV6q83169fD19cXS5Ys6fT8F198gerqarz88ssmC647Tz/9NJ5++uluX/vyyy+7PDd58mRcuHChx8984IEH8MADD5giPEIAAPMSApBRWIddWeWUWAywvTkV0GgZYgMkCPVy4joc8jsp0b4Qb+ejsLoJeeUKxATQXfOBIm9uw9GrVQBg6GBHLIejSIhpI3yxM7Mcu7LKKbEYYLsNtUf+tNlwP/R6AdnHH3+MyMjILs9HR0dj48aNJgmKEGs3M8YPdgIeLlcoUFCp5DqcQeXWZVDE8rjY22FqlG4t+W5qyzyg9uVVoE3DEOHrggg/qj2yRPoN2fZk626QkIHRqGrHr1f0mw1T0t0fvU4sZDIZ/P39uzzv7e2Nigrajp4QAHBzFGFyx262u+jiacCUNbTg7I168HhAanzXv1PEMuiTvt1Z5dDSxdOA2d2xmzAVbVuuieHecHO0Q7VShYzCWq7DGTQOXqpEa5sWoV5OiAmgzYb7o9eJRWBgIE6ePNnl+ZMnT0IqpT9WhOjNuaU7lH7/FGJeezqSuNEhHvCXOHAcDbmdKRE+cBELUS5vxbnieq7DGRSqlK04db2j9ogKUy2WSMjHrFjdTZGdmWUcRzN46G8A0r5H/dfrxOKJJ57AqlWrsGnTJhQXF6O4uBhffPEFnnvuOSxbtswcMRJilaaN8IWDna4QL+umnOtwBgX9rrW0DMqy2dsJMD3GD8BvGxkS89qbXQEtAxIC3RDkSZ3qLJn+79fPuTKo2jUcR2P76pvUOHZVv+8RzXT3V68Ti5deeglLly7F008/jbCwMISFhWH58uVYsWIFVq9ebY4YCbFK+kI8gPqSD4TC6kbklikg4PMMd/yI5dKvJf8puwJtGi3H0di+W+/IEss2JsQDfq72ULa240jHRp/EfH7OlaFdyxDl74pwH6o96q9eJxY8Hg9vvfUWqqurkZGRgaysLNTV1eGvf/0rTR8R8jv6i6fd2eVUiGdm+gunieFe8HAScRwNuZPkME94OYtQ39yGEx3tgYl5lNY140JJg672KI6SbkvH5/Mwp+POOdXomZ9+1pRmuk2j14nFkiVLoFQq4ezsjNGjRyMmJgZisRhNTU1dWtASMthNGuYNiYOuEO80FeKZDWOMukFZGaGAj9kdM0s0o2de+iWC40I94etqz3E0xBj6zkS/Xq5Eo6qd42hsV6WiFaeL6gDAkMyR/ul1YrF582a0tLR0eb6lpcWw4zUhRKdzIR5dPJlLXrkChdVNEAv5SIn25TocYqS5CbqLp/15MrSoaS25uVA3KOsTE+CKMC8ntLZpceCSjOtwbNae7AowBiQGu2OIO9UemYLRiYVCoYBcLgdjDEqlEgqFwvCor6/H3r174ePjY85YCbFKvxXiVVAhnpno90O4J9IHLvZ2HEdDjDUqyA1D3B3QpNYYesgT07pWpcTlCgXsBDzM7CiYJ5aPx+MZ6mFoRs98aKbb9IxOLNzc3ODh4QEej4fhw4fD3d3d8PDy8sKSJUvwzDPPmDNWQqzSmFBdIZ6itR1HqRDP5LRahj3ZHXdk6eRgVXg8nuHfjC6ezEM/rncN84abI9UeWRP9DNPxghrUNak5jsb2FNc2Iau0AXweqOGHCQmNPfDw4cNgjOGee+7B1q1b4eHhYXhNJBIhODiY9rEgpBsCPg+pcf747EQRdmWVIyWa7hqa0oWSepQ1tMBZLMTdkTRram3mJkjx4ZHrOJJfDXlLGyQONONkKrfWHlE3KOsz1NsZMQGuyC1TYG9OBR4fF8x1SDZFP9M9fqgXvF3EHEdjO4xOLCZPngwAKCoqQlBQEHWAIqQX5iZI8dmJIhy8XIkmVTucxEb/6pE70F84pUT7wt5OwHE0pLci/VwR4euC/EolfsmV4aHRgVyHZDNyyuS4UdsMezu+ofU1sS5z46XILVNgV2Y5JRYmRsugzMOopVDZ2dnQanV9xuVyOXJycpCdnd3tgxDSVWyABKGGQjxaS24q7Rot9ubolkHRHVnrpV/yQa01TUu/DGpqlC/dzLBSup2ggTM36lDe0LVxDumbfJkSVysbIRLwDZt1EtMwKrFISEhATU2N4b9HjhyJhISELo+RI0eaNVhCrNWthXg7M2mnYVM5eb0WNY1quDvaYWK4F9fhkD7S3zE8db0GVcpWjqOxDRoto53obYC/xAGjQ3RLz/dkU+JtKjs6zsOTI7xp+aWJGZVYFBUVwdvb2/DfhYWFKCoq6vIoLCw0a7CEWDP9yf14QQ3qqRDPJHZc1J0c5sRLYSfodfdsYiECPRwxMsgNWqbbiZv0X0ZhLSoVKkgc7DAlwpvrcEg/6DdapZblpqHVMuzsOHfc19HympiOUWfi4OBg8Hg8KJVKXL16FXl5eXByckJwcHCXByGke+E+zoiWuqJdy7A3ly6e+qtJ1Y59ubr+7veNpJODtZsXTxdPprS948Jpdpw/xEKqPbJms2L8IeTzkFeuwLWqRq7DsXpnbtShXN4KF7EQU6Oo4YepGX2LLzs7G5GRkZgxYwZSU1MRHh6OgwcPmjM2QmwO3Xkynf2XZGhp0yDE0xEjA924Dof00+w4Kfg8ILO0ASW1zVyHY9Va1BpD0n0/Jd1Wz91JhLuG62adqA6p//Qz3bNi/anhhxkYnVisXr0aQUFBOH78OM6dO4fJkyfj2WefNWdshNic1DhdYnGWCvH6bftF3Qn2vpEB1KXOBni7iDF+qK5OZlcW1SH1x4HLlWhUtWOIuwMSg9y5DoeYgH4p7e6scjDGOI7GerW2afBTR8MPmuk2D6MTi3PnzuHf//43xo8fj1GjRuGLL75AQUEBGhtpWo4QY0ndHDAm1AOMUSFef1QpW3GiQLfZIK2RtR1zb5nRo4unvtPfkb1/ZAD4fEq6bcG0Eb6wt+OjqKYJOWVyrsOxWoeuVEHZ2g5/iT3Ghnrc+Q2k14xOLGpqahAUFGT4f09PTzg6OqK6mnYSJqQ3DDsN05R2n+3OqoCWASOD3BDi5cR1OMREpkf7QSTgo6CqEVdkSq7DsUq1jSocvao7L8+jpNtmOImFuDdKtxcJ7VLfd/rao3kJlHSbi9GJhb54W6FQQKFQQC6Xd3lOoVCYM1ZCbMKsWF0hXm6ZAteracavL7ZfvAkAmE9T2TZF4mCHuyNpLXl/7MmugEbLEDdEgnAfZ67DISZkWA6VXQ6Nlmb0equ+SY0j+VUAqPbInIxOLBhjGD58ONzd3eHu7g4PDw80NjZi5MiRcHd3h5ubG9zdaS0nIXfi4STCpGEda8npzlOvFVQqkVumgJDPw+w46s9va+bG6074u2g5VJ9sozaaNmtyhDdc7YWoVKhwpqiO63Cszk85FWjTMIzwd0WEnwvX4dgso7fiPHz4sDnjIGRQmZsgxeH8auzKKseqe4dR8XEv6Dc2mhLhDQ8nEcfREFObGuUDJ5EAZQ0tuFBSj8RgWgdtrMLqRmSVNkDA59FO9DZILBRgZow/vj9Xil1Z5Uge6sl1SFbl1tojYj5GJxaTJ082ZxyEDCrTRvjB3i7HUIgXN8SN65CsglbLsOOWblDE9tjbCTA92g/bLpZhZ2Y5JRa9sKNjBnTSMC94u4g5joaYw7wEKb4/V4q9ORX4n7nREAlpY1BjlNQ241xxPXi835pEEPMw6ify1hqKOz3Mpb6+HmlpaZBIJJBIJEhLS0NDQ0OP72GMYd26dZBKpXBwcMCUKVOQl5dneL2urg7Lly9HREQEHB0dERQUhBUrVkAup44LxLycbynE0xeTkTs7V1yPsoYWuNwyfsT26E/8e7IroG7XchyNdWCM0R3ZQWBsmCd8XcWQt7Th0JUqrsOxGvqZ7glDveDras9xNLbNqMRCXz9hzMNcFi5ciMzMTOzbtw/79u1DZmYm0tLSenzPP//5T7zzzjt4//33cfbsWfj5+WHatGlQKnXdRsrLy1FeXo63334bOTk5+PLLL7Fv3z4sXbrUbN8HIXoLRg0BoGutSRdPxtEXbc+M9aONjWzYxHAv+LiIUdekposnI10oaUBJXTMcRQJMG0FJt60S8Hm4f6Tu3PHj+ZscR2Mdbk26aabb/IxaCnVrfcWNGzewevVqLF68GMnJyQCA9PR0bN68GevXrzdLkJcvX8a+ffuQkZGBsWPHAgA+/fRTJCcnIz8/HxEREV3ewxjDhg0bsHbtWsyfPx8AsHnzZvj6+uK7777Dk08+iZiYGGzdutXwnqFDh+L111/H448/jvb2dgiFRq8UI6TXJg3TXTxVKVU4dKUKM2L8uA7JorW2abAnmzY2GgyEAj7uHxWAj48W4sfzN+l3wwhbL+guMmdE+8FRROcuW/ZAYgA2Hr2Ow/lVqFaqaNnbHVwsbUBhTRPs7fj0t2QAGDVjMXnyZMPjq6++wjvvvIP169dj7ty5mDt3LtavX4+3334bmzZtMkuQ6enpkEgkhqQCAMaNGweJRIJTp051+56ioiLIZDKkpKQYnhOLxZg8efJt3wMAcrkcrq6uPSYVKpVqwJaAEdulv3gC6M6TMX7Jk0HZqttNeFwoFS3augcTdXdl9RdP5PZa2zTY3dGe94GOcSO2K9zHBQmBbtBoGXZm0lLaO/nhXMdMd4w/nMWUdJtbr6t+0tPTkZSU1OX5pKQknDlzxiRB/Z5MJoOPj0+X5318fCCTyW77HgDw9e08Jezr63vb99TW1uLvf/87nnzyyR7jWb9+vaHWQyKRIDAw0Jhvg5Au6OLJePqTw4JRQ2hjo0GALp6M1ynpDqOkezDQJ5A/nLtJbZl70KLWYE9H0v0gJd0DoteJRWBgIDZu3Njl+Y8//rjXF9jr1q0Dj8fr8XHu3DkA6LYdJ2Psjm06f//67d6jUCgwe/ZsjBgxAq+99lqPn7lmzRrI5XLDo7S09E7fKiHdoosn45Q1tODk9RoAdEd2MKGLJ+P895zuHPRAIiXdg8WcOClEQj7yO/b1Id37JU8GpYqS7oHU6zmhd999FwsWLMAvv/yCcePGAQAyMjJw/fr1TvUKxnj22WfxyCOP9HhMSEgIsrOzUVlZ2eW16urqLjMSen5+unV0MpkM/v7+huerqqq6vEepVGLGjBlwdnbG9u3bYWdn12NMYrEYYjGtaSSm8UDiEGSWNuCHczexdGIo7WnRja3nb4IxIDnME4EejlyHQwbInHgp/rbnkuHiKXaIhOuQLM7N+macul4L4LeGEMT2SRztMD3aD7uzyvHj+VL63biNH85T0j3Qej1jMWvWLFy9ehVz585FXV0damtrMW/ePFy9ehWzZs3q1Wd5eXkhMjKyx4e9vT2Sk5Mhl8s7LbU6ffo05HI5xo8f3+1nh4aGws/PDwcOHDA8p1arcfTo0U7vUSgUSElJgUgkwq5du2BvT23IyMCaE093nnqi1TJDDcqDSXThNJhIHHQXTwDw43maGe7O1vNlYAwYP5SS7sFGP6O3M6scqnYNx9FYHkq6udGnnVUCAwPxxhtvYNu2bdi+fTtef/11s9YZREVFYcaMGVi2bBkyMjKQkZGBZcuWITU1tVNHqMjISGzfvh2AbgnUqlWr8MYbb2D79u3Izc3F4sWL4ejoiIULFwLQzVSkpKSgqakJn3/+ORQKBWQyGWQyGTQa+iUlA4Munnp25kYdSuqa4SwWYmaM/53fQGwKXTzdnlbL8OMF3d8MSroHn4nhXvB1FaOhuQ2HLlNb5t+jpJsbRi2Fys7ONvoD4+Li+hxMT7799lusWLHC0OVp7ty5eP/99zsdk5+f32lzu5deegktLS14+umnUV9fj7Fjx2L//v1wcXEBAJw/fx6nT58GAISHh3f6rKKiIoSEhJjleyHk9x5MHILdWeXYmVWOV2ZHQSykPRr09EXbqXH+cBDRuAw2E8O94OdqD5miFb9ersKsWEou9U4X1aG0Trdh5IxoGpfBRsDnYf6oIfjoyHX8cP4mZtLvhoFWywzLoCjpHlhGJRYJCQng8Xh3LJ7j8Xhmu9Pv4eGBb775psdjfh8fj8fDunXrsG7dum6PnzJlChUEEoswgS6eutWoasfeHN3eFQ8mUfe1wUh38RSAD49cx4/nb9Lvxi30F06p8ZR0D1YPJOoSi6NXq1GlaIUP7SoNAMgoqsXNekq6uWBUYlFUVGTuOAgZ1G69ePrvuVK6eOqwN7sCLW0ahHk7YVSQG9fhEI48kDgEHx65jiP5VZDJW+EnoYunRlU7fs7RtU5/IJGS7sFqqLczRgW54UJJA7ZeKMOfpwzlOiSL8KN+ppuS7gFnVGIRHBxs7jgIGfQeSgrEhx13nm7WN2OIO60J/b6jjeaDiYHULWsQC/N2xugQd5y9UY//nivFiqnDuA6Jc7uzyinpJgCAh0cH4kJJA7acLcGTd4UN+u5H8pY27M3VzXRT0j3wel28XVtba/jv0tJS/PWvf8WLL76I48ePmzQwQgabEC8nTAj3BGPA92epiDtfpsT54noI+Tws6NihnAxeC8cGAdD9bmi0tIT1u9MlAIBHRwdR0j3IzYmXwkUsRHHtb12QBrMdF8vQ2qbFcF9nSro5YHRikZOTg5CQEPj4+CAyMhKZmZkYPXo03n33XXzyySe4++67sWPHDjOGSojtWzhGNzv4/dlStGm0HEfDre9OFwMApo3wpXXDBDNj/OHmaIeyhhYcu1rNdTicyrkpR06ZHCIBHwtow8hBz1EkxH0jdTdfvjtTzHE03GKMGZLuhWMo6eaC0YnFSy+9hNjYWBw9ehRTpkxBamoqZs2aBblcjvr6ejz55JN48803zRkrITZv2ghfeDmLUKVU4ddB3D6wWd2ObRd0O5Hr71STwc3eTmDoRf9tx4XDYKW/eJwZ6wcPJxHH0RBL8OgY3d/J/XmVqFK2chwNdy6U1CO/Ugl7Oz7up70rOGF0YnH27Fm8/vrrmDhxIt5++22Ul5fj6aefBp/PB5/Px/Lly3HlyhVzxkqIzRMJ+YY1od+dGbwXT3uyKqBUtSPIwxEThnpxHQ6xEI+O0f1uHLpSiQp5C8fRcEPZ2oadmeUAdHdkCQGAEVJXJAS6of2WDUUHI/1Nh9Q4KSQOdhxHMzgZnVjU1dXBz0+3iZezszOcnJzg4eFheN3d3R1KpdL0ERIyyOgvno4XVKO0rpnjaLjxbUdStXBs0KAvRCS/CfdxwZhQD2gHcR3SjsxyNKs1CPdxxphQjzu/gQwa+tndLWdKoR2EdUgNzWrsydYVbT9GM92c6VXx9u/XqtHaNUJML9jTCZOGeYExYMvZwTdrkVsmR1ZpA+wEPMOuy4ToPXZLEXf7IKtDovXjpCdz4qRwsReipK4ZJ67VcB3OgNt6oQzqdi2i/HWzN4QbRrWb1Vu8eDHEYjEAoLW1FU899RScnJwAACqVyvTRETJIPTomCMcLavDfczex6t7hsBP0uoGb1dIvAZse7QcvZzHH0RBLMz3aD+6OdqiQt+JIfjXuHeHLdUgDJrO0AZcrFBAL+YZ6E0L0HEQC3D8yAF+lF+M/Z0pw13BvrkMaMLqkW1d7tHAsJd1cMvpqZdGiRfDx8YFEIoFEIsHjjz8OqVRq+H8fHx/84Q9/MGeshAwauiJuMaqVKuzPq+Q6nAHTqGrHzotUtE1ur3MR9+DqgKNfPz47zh8SR1o/TrrS/908cKkSMvngKeI+XVSH69VNcBQJcF+ClOtwBjWjZyw2bdpkzjgIIbewE/Dx6JhA/PvQNWw+dQOz4wbHTtxbz99Ek1q36VdymCfX4RAL9di4YHx2ogiH86tRVNOEUC8nrkMyu9pGFXZl6Yq2HxtLm9aS7kX6uWJMiAfO3KjDt6eL8UJKBNchDYjNp24AAOYlBMDFnpJuLg2e9RWEWJnHxwVDyOfhzI065JbJuQ7H7LRahi87Tg6Lx4fQVDa5rVAvJ9wdoVvmob+gsHX/OVMCdbsWcUMktOkX6dHiCSEAdJsotrZpuA1mANysb8YveTIAunMH4RYlFoRYKF9Xe8yK1c1UbDp5g9tgBsDRq7q7zy72Qlo/Tu7ojxNCAQA/nr8JZWsbx9GYV5tGi68zdMu+/jiBkm7Ss5QRvpBK7FHbpMbujlkuW/Z1ejG0DJgQ7okIPxeuwxn0KLEgxILp7zztzipHTaNtN0j44mQRAODhpEA4iXvVV4IMQpOGeWGotxMaVe0237d/b04FKhUqeLuIMTuW1o+TngkFfKQlhwAAvjx1A4zZbuvZZnU7/tPR8OOP40M5joYAlFgQYtFGBbkjPtANao3W0GbSFl2rUuJ4QQ14PGARTWUTI/B4PCzumLXYfOqGTfft189YPjY2CCIhnbbJnT06JhD2dnzklStw9kY91+GYzbYLZVC06jZTvTvSh+twCCixIMTiLemYtfgmoxjqdtvs26+/cLo3yheBHo7cBkOsxoJRAXC1F+JGbTOOXK3iOhyzuFhSj8zSBogEfCraJkZzcxTh/pEBAIAvTxVxHI15MPZbXd6i8SEQ0GaqFoESC0Is3MwYf/i4iFGlVOHn3AquwzE5eXMbtl3QtZj9Y0cSRYgxHEVCPDJG117TVuuQ9N9Xarw/vF1oXxdivMUdS4N+yatEWUMLx9GY3vGCGlyraoSTSIAHk6guz1JQYkGIhRMJ+Xh8nO5O5SfHCm1uvew3p4vR0qZBpJ8LtZglvZY2Lhh8nu4i41K5gutwTOpmfTN+ytHdTFgygdaPk96J8HPBhHBPaLQMnx+3vVmLT48XAgAeTAqEK7WYtRiUWBBiBdLGBcPBToC8cgWOF9RwHY7JtLZp8MUJ3QnvqclDqdsN6bVAD0fMjtMVNG88ep3jaEzrs+NF0GgZJoZ7ISZAwnU4xAo9eddQALp2xfVNao6jMZ2cm3IcL6iBgM/D0omUdFsSSiwIsQLuTiI82rHk46MjtnPx9MO5UtQ2qRHg5oDUQbIJIDG9pyaHAQD2ZJejpLaZ42hMo7ZRhS1ndQ0bnpo8lONoiLWaNMwL0VJXtLRpsDn9BtfhmIz+JsKcOH+qy7MwlFgQYiWemBQKIZ+H9MJaXCyx/i4f7RotPj6mm8r+011hEArozxHpm2ipBJOHe0PLgI+P2UbivTm9GK1tWsQGSDAhnJYIkr7h8Xj48xRdYvrlqRtoVrdzHFH/FdU0GeoNn5pCSbeloTM5IVZC6uaA+zq6fNjCrMVPORW4Wd8CDycRHkoK5DocYuWe7rjA+OH8TVQpWzmOpn+aVO2GHcX/PIWWCJL+mRnjj2BPRzQ0t2HLmVKuw+m3T44VQsuAeyJ9EOnnynU45HcosSDEiuiXfOy/VIlrVUqOo+k7xpghOfrj+BA4iAQcR0Ss3ZhQD4wKcoO6XWv1HaL+c6YE8pY2hHo5YXq0H9fhECsn4PMMtRafHS+06rblVYpWbO3YEPPPNFthkSixIMSKhPu4IGWELwDg/UPXOI6m7/ZfqsQVmRJOIgHSkqk3P+k/3ZKPcADA1+nFVluo2qLWdFoiSL35iSnMHxUAbxcxyuWt2HbBeneq/+jodag1WiQGu2N0iAfX4ZBuWE1iUV9fj7S0NEgkEkgkEqSlpaGhoaHH9zDGsG7dOkilUjg4OGDKlCnIy8u77bEzZ84Ej8fDjh07TP8NEGIiK6YOAwDszCpHQaX1zVpotQzvHrgKAFg8IQRujiKOIyK2YmqkD6L8XdGoascnHa0orc23p4tRrVRhiLsDFoyi3vzENOztBHjyLt2M978PXYOqXcNxRL0nk7fi29O6hgar7h3GcTTkdqwmsVi4cCEyMzOxb98+7Nu3D5mZmUhLS+vxPf/85z/xzjvv4P3338fZs2fh5+eHadOmQansejG2YcMGWsdKrEJMgATTo33BGPDuwatch9Nre3MrcEWmhItYiGWTwrgOh9gQPp+HF6YNBwB8efIGqpUqjiPqnSZVu2GJ4Ip7hkEktJpTNLECj48Lhq+rGGUNLfj+rPXVWnxw+BrU7VqMCfHAxHAvrsMht2EVf7UuX76Mffv24bPPPkNycjKSk5Px6aefYs+ePcjPz+/2PYwxbNiwAWvXrsX8+fMRExODzZs3o7m5Gd99912nY7OysvDOO+/giy++GIhvh5B+e27acPB4wN4cGfLK5VyHYzSNlmHDwQIAwNJJoTRbQUxuapQP4gPd0NKmsbp9LTan30Btkxohno6YPyqA63CIjbG3E+DZe3R3+t8/dA2tbdYza3GzvtnQfvn5lOF0I9iCWUVikZ6eDolEgrFjxxqeGzduHCQSCU6dOtXte4qKiiCTyZCSkmJ4TiwWY/LkyZ3e09zcjEcffRTvv/8+/PyMK5JTqVRQKBSdHoQMpEg/V8zp2BRMv6zIGuzOKse1qkZIHOywhDY1ImbA4/02a/F1RjFkcuvoEKVsbcMnHbUVK+8dRu2XiVk8nBSIADcHVClV+CajmOtwjPb+oWto0zCMH+qJcWHUftmSWcVfLplMBh8fny7P+/j4QCaT3fY9AODr69vpeV9f307vee655zB+/HjMmzfP6HjWr19vqPWQSCQIDKRWmWTgrbp3GPg84ODlKpwvtvx9LVTtGvzfAd0M45/uCoOrvR3HERFbNWmYF8aEeEDdrsV7hwq4DscoHx8tRENzG4Z6O2FuPM1WEPMQCflY2VGn9+GR61C2tnEc0Z1dq1Lih45OUM933DQglovTxGLdunXg8Xg9Ps6dOwcA3U57McbuOB32+9dvfc+uXbtw6NAhbNiwoVdxr1mzBnK53PAoLbW+tYrE+oV5O+OBRF1x5z9+ugTGGMcR9WzzqRsorWuBr6sYf5wQwnU4xIbxeDz8v+kRAIAtZ0qQL7PsJgdlDS34tKPY/KUZkdQJipjV/FEBCPNyQl2TGh8ctvzlgm/svQKNlmHaCF8kUScoi8dpYvHss8/i8uXLPT5iYmLg5+eHysrKLu+vrq7uMiOhp1/W9PsZjaqqKsN7Dh06hOvXr8PNzQ1CoRBCoRAAsGDBAkyZMuW2cYvFYri6unZ6EMKF/5cSAUeRABdLGrArq5zrcG6rtlGFf/+qa4+ri1nIcUTE1o0J9cCMaD9omeUn3v+77wpU7VqMDfUwtJMmxFyEAj7Wzo4CAHxxogildc0cR3R7JwpqcOhKFYR8HtbMjOQ6HGIEThMLLy8vREZG9viwt7dHcnIy5HI5zpw5Y3jv6dOnIZfLMX78+G4/OzQ0FH5+fjhw4IDhObVajaNHjxres3r1amRnZyMzM9PwAIB3330XmzZtMt83ToiJ+LjaG3YcfuvnK2hRW2Yx3r9+LYBS1Y5oqSu10CQDZs2sSIgEfBwvqMHh/Cquw+lWVmkDdmSWg8cDXk0dQUWpZEDcE+mDieFeUGu0WP/zZa7D6ZZGy/CPny4BANKSgxHm7cxxRMQYVlFjERUVhRkzZmDZsmXIyMhARkYGli1bhtTUVERERBiOi4yMxPbt2wHopsJXrVqFN954A9u3b0dubi4WL14MR0dHLFy4EIBuViMmJqbTAwCCgoIQGkqFpcQ6PDEpDAFuDiiXtxqWU1iSfJnS0Ht87ewo8GmZBxkgwZ5OhmV3/9hz2eJ2HNZqGf5nt25vpftHBiAmQMJxRGSw4PF4+EtqFPgd3QVPF9ZyHVIXW86W4IpMCVd7oaEuhFg+q0gsAODbb79FbGwsUlJSkJKSgri4OHz99dedjsnPz4dc/lvrzZdeegmrVq3C008/jaSkJJSVlWH//v1wcXEZ6PAJMRt7OwFe7pgi/vDINRTXNnEc0W+0WoZXtudAo2WYHu2L8UOp9zgZWM/cEw5PJxEKa5osLvHecrYUF0oa4CQS4MXpEXd+AyEmFOnnikfHBAEAXt2Za1GJd7VShbd+vgJA116dWpNbDx6z5IWnVkKhUEAikUAul1O9BeEEYwyPfXYap67XYmK4F75eOsYillR8d7oEr2zPgZNIgAPPT4bUzYHrkMggtPX8TbzwQxZEQj5+WXUXQr2cuA4J1UoVpv7fESha2/Fq6ggspfbLhAP1TWpMfeco6prU+H8pww37XHBt5ZaL2JlZjtgACXY8M4EaGnCsN9e5VjNjQQi5PR6Phzfuj4VYyMeJazXYdqGM65BQrVThzY61u8+nRFBSQTgzf1QAJg3zgrpdi7XbcyyikPsfP12CorUdMQGuWJQczHU4ZJBydxLhr6kjAADvHbqGwupGjiMCjl2txs7McvB5wBv3x1JSYWUosSDERoR4OWHlvbq7TX//6RKqlSrOYmGMYe32HLpwIhaBx+Ph9ftiYW/Hx6nrtfjvOW5bhP+SJzNcOK2/P442wyOcmpcgxV3DvaFu12L1thxotdwl3orWNqzZlgMAWDQ+BLFDqO7I2tBfM0JsyLJJYYjyd0VDcxte/DGLszuz/z1Xiv2XKmEn4OGtBXThRLgX5OmI5+7Vba71t92XcKOGm1qkKmWr4cJp2V1hdOFEOKdLvGPgYCfAmaI6fMJhLdK6nXkoa2hBkIcjXkihuiNrRGd7QmyInYCPDQ8nQCTk40h+Nb48dWPAYyiubcL/7Na1CHwhJQLRUrpwIpbhiUlhGBPqgSa1Biu3XESbZmCLVRljWL01B3VNakT5u9IuwsRiBHo4Yt1c3ZKot3/JR/bNhgGP4afsCmy7WAY+D3j34QQ4i2m/I2tEiQUhNibCzwV/6dj8aP3eK8grl9/hHabT2qbBM99dQLNagzGhHlg2KWzAvjYhdyLg87Dh4QS42guRdVOO/9t/dUC//ifHCnHoShVEQj7+9UgCxELBgH59QnryUFIgZsX6oV3LsOI/F6FsbRuwr11U04TV27IBAM/cHY7EYPcB+9rEtCixIMQGpY0Lxr1RPlBrtPjTV+dR22j+egvGdK1lc8sU8HAS4d2HE6jojlgcqZsD3loQBwDYePQ69mQPzI71Jwpq8NY+XfvMV1NHYLgvtT0nloXH42H9/XGQSuxxo7YZq7ZkQjMA9RZNqnb86atzULa2IynYHStozwqrRokFITaIx+Ph7QfjEeLpiLKGFvz52wtm71G+6eQNbLugm8Z+/9GRCKAuUMRCzYz1x7JJuvau/++HLOSWmXdWr7i2Ccv/cwFaBjyYOASPjw0y69cjpK8kjnb46PFEiIV8/HqlCm/vzzfr19NoGV74bxYKqhrh4yLGh4+Pgh3V5Fk1+tcjxEa5OYrw2aIkuIiFOFNUhxd/zDLb3addWeX4+0+6uoo1M6MwPpw2wiOWbfXMKEwe7o3WNi2Wbj5rto0lqxStSPv8DOqb2xA3RIK/3xdjEXvMEHI78YFu+OcDulm9j45cxzcZxWb5OowxrNuVh315MtgJePjo8UT4uNib5WuRgUOJBSE2LNzHBf9eOBJCPg87M8vN0sP/cH4VXvhvJhgDFiUH44lJtNEXsXwCPg//XjgSEb4uqFSosPDT0yhvaDHp16hvUmPRprMoqWtGsKcjPl80GvZ2VFdBLN+8hAAsvyccAPCXHbnYev6mST+fMYZ3DlzF1xnF4HUUa1NdhW2gxIIQGzclwgf/emQk+Dxgy9lSvPhjtsm64ezOKsefvjqHNg3DnHgpXpsTTXdjidVwtbfD10+MQaiXE8oaWvDwJ+km2yBMJm/FQx+n43KFAt4uYny9ZCy8XcQm+WxCBsLz04Zj8fgQAMCLP2bh29OmmbnQahn+vucy/n3oGgDgb/NikBonNclnE+5RYkHIIDA7zh//+0A8+Dzgx/M3seTLs5A3973jB2MMG49ex4otFw1Jxf89GA8+FWsTK+PjYo9vnxiLYE9HlNa1YP5Hp3CmqK5fn5l9swELPjqFgqpG+Lna4z/LxiLI09FEERMyMHg8Hv6aOgILxwZBy4C123Px1r4r/VpS26Rqx4otF/HFySIAwGtzRiBtHG2gakt4jKsdtGyIQqGARCKBXC6Hq6sr1+EQcluHrlTimW8voqVNA6nEHu8+nICxYZ69+owqZSv+sj0X+y9VAgAeHxeE/5kbQx2giFWraVRh6eZzyCptAJ8HLL9nGJbfE96rzR01Woav02/gjb1XoNZoEerlhK+WjEGgByUVxHoxxvCvXwuw4WABAGBMqAfeeSgeQ9x793OdWybHc99noqCqEUI+D28uiMMDiUPMETIxsd5c51JiYQKUWBBrklsmxzPfXUBxbTMAYP7IADyfMvyOJ4lmdTu+O12Cf/1aAGVrO0QCPtbNjcajYwJp+ROxCc3qdqzdnovtF8sAAMN9nbFmZhSmRHj3+DPOGEN6YS3+uS8fmaUNAIBpI3zx9oPxkDjYDUTohJjdjotlWLs9B01qDRxFAvzprjA8MSnsjhvZyeSt2Hj0Or5KvwEtA3xdxfhg4SgkhXgMUOSkvyixGGCUWBBr06hqx993X8L350oBAHwecE+kD1Ki/ZAY7I4ANwfweTzUN6txqUKBw1eqsCe7AnVNagBAbIAE6+fHIiaAdtUmtmfHxTKs252Hho7lgmHeTpg/MgDJQ70Q5uUEVwc7NKnbUVjdhNOFtdidXY7cMgUAwEUsxEszIvDY2GBaGkhsTnFtE174bxbOFdcDAJxEAsxNkGJKhA9iAyTwdhFDo2WQyVuRdbMB+y9V4kBeJdQddX1z4qX4a+oIqjeyMpRYDDBKLIi1yr7ZgLf2XcHJa7VGHR/k4Yg/TxmKh5ICaekTsWny5jZ8eOQavs4oRrNac8fjRUI+HhkdiGfuDoevK7XMJLaLMYa9OTL834F8FFYb16Z5TIgHVkwdhonDqBW5NaLEYoBRYkGs3bWqRuy4WIZT12twuUKJljbdhRSfB4R6OSEx2B0zY/wxaZhXr9acE2LtGlXt2J1VjqP51ThXXI+aW3ax93IWIVoqwb0jfDEzxg9eznQXlgwe+iWAe3MqkFFYh+LaJrRpdJeUIiEfEb4uGB/uidRYKWKH0Oy2NaPEYoBRYkFsCWMMSlU7GAMcRQLaBZWQW6jaNWhSaeBgJ4CDiPakIERPq2WQt7TBTsiHg52AZrVtSG+uc3uuuCGEDDo8Hg+u9lRwSkh3xEIBxEJKKAj5PT6fB3cnEddhEI7RrUhCCCGEEEJIv1FiQQghhBBCCOk3SiwIIYQQQggh/UaJBSGEEEIIIaTfKLEghBBCCCGE9Bt1hTIBfcdehULBcSSEEEIIIYSYjv761pgdKiixMAGlUgkACAwM5DgSQgghhBBCTE+pVEIi6XmzQ9ogzwS0Wi3Ky8vh4uICHm/gN4RRKBQIDAxEaWkpbdDXSzR2fUdj1z80fn1HY9d3NHb9Q+PXdzR2fcf12DHGoFQqIZVKwef3XEVBMxYmwOfzMWTIEK7DgKurK/2y9hGNXd/R2PUPjV/f0dj1HY1d/9D49R2NXd9xOXZ3mqnQo+JtQgghhBBCSL9RYkEIIYQQQgjpN0osbIBYLMZrr70GsVjMdShWh8au72js+ofGr+9o7PqOxq5/aPz6jsau76xp7Kh4mxBCCCGEENJvNGNBCCGEEEII6TdKLAghhBBCCCH9RokFIYQQQgghpN8osSCEEEIIIYT0GyUWVu7DDz9EaGgo7O3tkZiYiOPHj3Md0oA7duwY5syZA6lUCh6Phx07dnR6nTGGdevWQSqVwsHBAVOmTEFeXl6nY1QqFZYvXw4vLy84OTlh7ty5uHnzZqdj6uvrkZaWBolEAolEgrS0NDQ0NJj5uzOv9evXY/To0XBxcYGPjw/uu+8+5OfndzqGxq97H330EeLi4gwbFiUnJ+Pnn382vE7jZrz169eDx+Nh1apVhudo/G5v3bp14PF4nR5+fn6G12nselZWVobHH38cnp6ecHR0REJCAs6fP294ncaveyEhIV1+7ng8Hp555hkANG530t7ejr/85S8IDQ2Fg4MDwsLC8Le//Q1ardZwjE2MISNWa8uWLczOzo59+umn7NKlS2zlypXMycmJFRcXcx3agNq7dy9bu3Yt27p1KwPAtm/f3un1N998k7m4uLCtW7eynJwc9vDDDzN/f3+mUCgMxzz11FMsICCAHThwgF24cIHdfffdLD4+nrW3txuOmTFjBouJiWGnTp1ip06dYjExMSw1NXWgvk2zmD59Otu0aRPLzc1lmZmZbPbs2SwoKIg1NjYajqHx696uXbvYTz/9xPLz81l+fj575ZVXmJ2dHcvNzWWM0bgZ68yZMywkJITFxcWxlStXGp6n8bu91157jUVHR7OKigrDo6qqyvA6jd3t1dXVseDgYLZ48WJ2+vRpVlRUxA4ePMiuXbtmOIbGr3tVVVWdfuYOHDjAALDDhw8zxmjc7uQf//gH8/T0ZHv27GFFRUXshx9+YM7OzmzDhg2GY2xhDCmxsGJjxoxhTz31VKfnIiMj2erVqzmKiHu/Tyy0Wi3z8/Njb775puG51tZWJpFI2MaNGxljjDU0NDA7Ozu2ZcsWwzFlZWWMz+ezffv2McYYu3TpEgPAMjIyDMekp6czAOzKlStm/q4GTlVVFQPAjh49yhij8estd3d39tlnn9G4GUmpVLJhw4axAwcOsMmTJxsSCxq/nr322mssPj6+29do7Hr28ssvs4kTJ972dRo/461cuZINHTqUabVaGjcjzJ49my1ZsqTTc/Pnz2ePP/44Y8x2fvZoKZSVUqvVOH/+PFJSUjo9n5KSglOnTnEUleUpKiqCTCbrNE5isRiTJ082jNP58+fR1tbW6RipVIqYmBjDMenp6ZBIJBg7dqzhmHHjxkEikdjUeMvlcgCAh4cHABo/Y2k0GmzZsgVNTU1ITk6mcTPSM888g9mzZ+Pee+/t9DyN350VFBRAKpUiNDQUjzzyCAoLCwHQ2N3Jrl27kJSUhAcffBA+Pj4YOXIkPv30U8PrNH7GUavV+Oabb7BkyRLweDwaNyNMnDgRv/76K65evQoAyMrKwokTJzBr1iwAtvOzJzT7VyBmUVNTA41GA19f307P+/r6QiaTcRSV5dGPRXfjVFxcbDhGJBLB3d29yzH698tkMvj4+HT5fB8fH5sZb8YYnn/+eUycOBExMTEAaPzuJCcnB8nJyWhtbYWzszO2b9+OESNGGP5407jd3pYtW3DhwgWcPXu2y2v0c9ezsWPH4quvvsLw4cNRWVmJf/zjHxg/fjzy8vJo7O6gsLAQH330EZ5//nm88sorOHPmDFasWAGxWIw//OEPNH5G2rFjBxoaGrB48WIA9DtrjJdffhlyuRyRkZEQCATQaDR4/fXX8eijjwKwnTGkxMLK8Xi8Tv/PGOvyHOnbOP3+mO6Ot6XxfvbZZ5GdnY0TJ050eY3Gr3sRERHIzMxEQ0MDtm7dikWLFuHo0aOG12nculdaWoqVK1di//79sLe3v+1xNH7dmzlzpuG/Y2NjkZycjKFDh2Lz5s0YN24cABq729FqtUhKSsIbb7wBABg5ciTy8vLw0Ucf4Q9/+IPhOBq/nn3++eeYOXMmpFJpp+dp3G7v+++/xzfffIPvvvsO0dHRyMzMxKpVqyCVSrFo0SLDcdY+hrQUykp5eXlBIBB0yT6rqqq6ZLuDmb5TSk/j5OfnB7Vajfr6+h6Pqays7PL51dXVNjHey5cvx65du3D48GEMGTLE8DyNX89EIhHCw8ORlJSE9evXIz4+Hv/6179o3O7g/PnzqKqqQmJiIoRCIYRCIY4ePYr33nsPQqHQ8L3R+BnHyckJsbGxKCgooJ+9O/D398eIESM6PRcVFYWSkhIA9DfPGMXFxTh48CCeeOIJw3M0bnf24osvYvXq1XjkkUcQGxuLtLQ0PPfcc1i/fj0A2xlDSiyslEgkQmJiIg4cONDp+QMHDmD8+PEcRWV5QkND4efn12mc1Go1jh49ahinxMRE2NnZdTqmoqICubm5hmOSk5Mhl8tx5swZwzGnT5+GXC636vFmjOHZZ5/Ftm3bcOjQIYSGhnZ6ncavdxhjUKlUNG53MHXqVOTk5CAzM9PwSEpKwmOPPYbMzEyEhYXR+PWCSqXC5cuX4e/vTz97dzBhwoQuLbWvXr2K4OBgAPQ3zxibNm2Cj48PZs+ebXiOxu3Ompubwed3vuwWCASGdrM2M4ZmLw8nZqNvN/v555+zS5cusVWrVjEnJyd248YNrkMbUEqlkl28eJFdvHiRAWDvvPMOu3jxoqHt7ptvvskkEgnbtm0by8nJYY8++mi37duGDBnCDh48yC5cuMDuueeebtu3xcXFsfT0dJaens5iY2OtvgXen//8ZyaRSNiRI0c6tRFsbm42HEPj1701a9awY8eOsaKiIpadnc1eeeUVxufz2f79+xljNG69dWtXKMZo/HrywgsvsCNHjrDCwkKWkZHBUlNTmYuLi+FvP43d7Z05c4YJhUL2+uuvs4KCAvbtt98yR0dH9s033xiOofG7PY1Gw4KCgtjLL7/c5TUat54tWrSIBQQEGNrNbtu2jXl5ebGXXnrJcIwtjCElFlbugw8+YMHBwUwkErFRo0YZ2oQOJocPH2YAujwWLVrEGNO1cHvttdeYn58fE4vF7K677mI5OTmdPqOlpYU9++yzzMPDgzk4OLDU1FRWUlLS6Zja2lr22GOPMRcXF+bi4sIee+wxVl9fP0DfpXl0N24A2KZNmwzH0Ph1b8mSJYbfPW9vbzZ16lRDUsEYjVtv/T6xoPG7PX1vezs7OyaVStn8+fNZXl6e4XUau57t3r2bxcTEMLFYzCIjI9knn3zS6XUav9v75ZdfGACWn5/f5TUat54pFAq2cuVKFhQUxOzt7VlYWBhbu3YtU6lUhmNsYQx5jDFm/nkRQgghhBBCiC2jGgtCCCGEEEJIv1FiQQghhBBCCOk3SiwIIYQQQggh/UaJBSGEEEIIIaTfKLEghBBCCCGE9BslFoQQQgghhJB+o8SCEEIIIYQQ0m+UWBBCCCGEEEL6jRILQgghhBBCSL9RYkEIIYQQQgjpN0osCCGEEEIIIf1GiQUhhBBCCCGk3/4/DPcjZS2TVqUAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -56,16 +56,21 @@ "import matplotlib.pyplot as plt \n", "\n", "\n", - "t = np.linspace(0, 20, int(80/0.01))\n", + "t = np.linspace(0, 100, 400)\n", "\n", "wind_series = FASTOutputFile('./ex_files/tsim.dat').toDataFrame()['U_[3.40]']\n", - "bld_pitch = np.deg2rad(3 * np.sin(t))\n", + "\n", + "frequency = 1.0 # 1 Hz sinusoidal signal\n", + "sampling_rate = 100.0 # Sampling rate of 100 Hz\n", + "duration = 10.0 # Duration of the signal\n", + "t = np.arange(0, duration, 1 / sampling_rate) # Time vector\n", + "bld_pitch = np.sin(2 * np.pi * frequency * t) # Example for another series\n", "\n", "fig, axs = plt.subplots(2, 1, figsize=(8, 5))\n", "axs[0].plot(wind_series)\n", "axs[0].set_ylabel('$u_h$ (m/s)')\n", "\n", - "axs[1].plot(bld_pitch)\n", + "axs[1].plot(t, bld_pitch)\n", "axs[1].set_ylabel('BldPitch1 (rad)')\n", "\n", "fig.tight_layout()" @@ -73,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -81,205 +86,210 @@ "output_type": "stream", "text": [ "Response sent: 7.459;0;0.0;\n", - "Response sent: 7.452;0;0.00013091592200192492;\n", - "Response sent: 7.281000000000001;0;0.00026183102557516923;\n", - "Response sent: 7.445;0;0.00039274449229616867;\n", - "Response sent: 7.351000000000001;0;0.0005236555037515921;\n", - "Response sent: 7.301;0;0.0006545632415434574;\n", - "Response sent: 7.208;0;0.0007854668872942478;\n", - "Response sent: 6.615;0;0.0009163656226520288;\n", - "Response sent: 6.577;0;0.0010472586292955628;\n", - "Response sent: 6.888;0;0.001178145088939426;\n", - "Response sent: 6.776;0;0.0013090241833391234;\n", - "Response sent: 6.880000000000001;0;0.0014398950942962044;\n", - "Response sent: 6.9350000000000005;0;0.0015707570036633772;\n", - "Response sent: 6.893000000000001;0;0.001701609093349625;\n", - "Response sent: 6.641;0;0.0018324505453253188;\n", - "Response sent: 6.686999999999999;0;0.001963280541627331;\n", - "Response sent: 6.909000000000001;0;0.002094098264364151;\n", - "Response sent: 6.859;0;0.0022249028957209973;\n", - "Response sent: 7.050000000000001;0;0.0023556936179649273;\n", - "Response sent: 6.941000000000001;0;0.002486469613449957;\n", - "Response sent: 6.959;0;0.002617230064622163;\n", - "Response sent: 6.861000000000001;0;0.0027479741540247997;\n", - "Response sent: 6.460000000000001;0;0.0028787010643034085;\n", - "Response sent: 6.449;0;0.003009409978210928;\n", - "Response sent: 6.6579999999999995;0;0.0031401000786127984;\n", - "Response sent: 6.964;0;0.003270770548492079;\n", - "Response sent: 6.6419999999999995;0;0.0034014205709545463;\n", - "Response sent: 6.683;0;0.0035320493292338062;\n", - "Response sent: 6.867000000000001;0;0.0036626560066964;\n", - "Response sent: 7.089;0;0.0037932397868469074;\n", - "Response sent: 6.912000000000001;0;0.003923799853333053;\n", - "Response sent: 6.68;0;0.004054335389950806;\n", - "Response sent: 6.664999999999999;0;0.00418484558064949;\n", - "Response sent: 6.856999999999999;0;0.004315329609536876;\n", - "Response sent: 6.8309999999999995;0;0.004445786660884291;\n", - "Response sent: 7.090999999999999;0;0.00457621591913171;\n", - "Response sent: 7.257;0;0.00470661656889286;\n", - "Response sent: 7.226000000000001;0;0.0048369877949603155;\n", - "Response sent: 7.1579999999999995;0;0.004967328782310595;\n", - "Response sent: 6.8870000000000005;0;0.005097638716109255;\n", - "Response sent: 7.148;0;0.005227916781715989;\n", - "Response sent: 7.103999999999999;0;0.005358162164689711;\n", - "Response sent: 6.552;0;0.005488374050793655;\n", - "Response sent: 6.077;0;0.005618551626000466;\n", - "Response sent: 5.861000000000001;0;0.0057486940764972785;\n", - "Response sent: 5.981;0;0.005878800588690816;\n", - "Response sent: 5.904999999999999;0;0.006008870349212473;\n", - "Response sent: 5.879;0;0.006138902544923396;\n", - "Response sent: 6.077999999999999;0;0.006268896362919573;\n", - "Response sent: 6.119999999999999;0;0.006398850990536912;\n", - "Response sent: 6.114000000000001;0;0.0065287656153563195;\n", - "Response sent: 6.084;0;0.006658639425208785;\n", - "Response sent: 6.256;0;0.006788471608180453;\n", - "Response sent: 6.138;0;0.0069182613526177035;\n", - "Response sent: 6.1240000000000006;0;0.0070480078471322205;\n", - "Response sent: 5.984;0;0.007177710280606069;\n", - "Response sent: 6.0649999999999995;0;0.007307367842196768;\n", - "Response sent: 5.901;0;0.0074369797213423485;\n", - "Response sent: 5.808999999999999;0;0.0075665451077664295;\n", - "Response sent: 5.952;0;0.007696063191483285;\n", - "Response sent: 6.0440000000000005;0;0.007825533162802907;\n", - "Response sent: 6.138999999999999;0;0.007954954212336057;\n", - "Response sent: 6.246;0;0.008084325530999345;\n", - "Response sent: 6.393000000000001;0;0.008213646310020264;\n", - "Response sent: 6.098000000000001;0;0.008342915740942265;\n", - "Response sent: 5.961;0;0.008472133015629808;\n", - "Response sent: 5.881;0;0.008601297326273405;\n", - "Response sent: 5.9;0;0.00873040786539468;\n", - "Response sent: 6.125;0;0.008859463825851408;\n", - "Response sent: 6.1;0;0.00898846440084257;\n", - "Response sent: 5.981;0;0.009117408783913391;\n", - "Response sent: 6.118;0;0.009246296168960383;\n", - "Response sent: 6.148;0;0.009375125750236385;\n", - "Response sent: 6.2330000000000005;0;0.009503896722355604;\n", - "Response sent: 6.541;0;0.009632608280298634;\n", - "Response sent: 6.401999999999999;0;0.009761259619417512;\n", - "Response sent: 6.188000000000001;0;0.009889849935440731;\n", - "Response sent: 6.007;0;0.010018378424478273;\n", - "Response sent: 5.914999999999999;0;0.01014684428302664;\n", - "Response sent: 5.962;0;0.01027524670797387;\n", - "Response sent: 6.224;0;0.010403584896604555;\n", - "Response sent: 6.279999999999999;0;0.010531858046604867;\n", - "Response sent: 6.202;0;0.010660065356067573;\n", - "Response sent: 5.8759999999999994;0;0.010788206023497048;\n", - "Response sent: 5.894;0;0.010916279247814279;\n", - "Response sent: 5.960000000000001;0;0.011044284228361878;\n", - "Response sent: 6.151999999999999;0;0.011172220164909088;\n", - "Response sent: 6.2330000000000005;0;0.011300086257656787;\n", - "Response sent: 5.882;0;0.011427881707242482;\n", - "Response sent: 5.987;0;0.011555605714745312;\n", - "Response sent: 6.099;0;0.011683257481691038;\n", - "Response sent: 6.318;0;0.011810836210057043;\n", - "Response sent: 5.936999999999999;0;0.011938341102277308;\n", - "Response sent: 5.667999999999999;0;0.012065771361247408;\n", - "Response sent: 5.792;0;0.012193126190329494;\n", - "Response sent: 5.723000000000001;0;0.012320404793357269;\n", - "Response sent: 5.712999999999999;0;0.012447606374640968;\n", - "Response sent: 5.459;0;0.012574730138972335;\n", - "Response sent: 5.734999999999999;0;0.012701775291629584;\n", - "Response sent: 5.465999999999999;0;0.012828741038382382;\n", - "Response sent: 5.103999999999999;0;0.012955626585496807;\n", - "Response sent: 5.085000000000001;0;0.0130824311397403;\n", - "Response sent: 5.021000000000001;0;0.013209153908386648;\n", - "Response sent: 4.6899999999999995;0;0.013335794099220913;\n", - "Response sent: 4.478999999999999;0;0.013462350920544408;\n", - "Response sent: 4.75;0;0.013588823581179627;\n", - "Response sent: 4.804;0;0.013715211290475194;\n", - "Response sent: 4.742000000000001;0;0.013841513258310836;\n", - "Response sent: 4.856999999999999;0;0.013967728695102266;\n", - "Response sent: 4.91;0;0.01409385681180618;\n", - "Response sent: 4.984;0;0.014219896819925134;\n", - "Response sent: 5.195;0;0.014345847931512525;\n", - "Response sent: 5.0280000000000005;0;0.014471709359177473;\n", - "Response sent: 4.832000000000001;0;0.014597480316089768;\n", - "Response sent: 5.050000000000001;0;0.014723160015984794;\n", - "Response sent: 5.073;0;0.01484874767316842;\n", - "Response sent: 4.712999999999999;0;0.014974242502521927;\n", - "Response sent: 4.802;0;0.01509964371950692;\n", - "Response sent: 4.612;0;0.015224950540170226;\n", - "Response sent: 4.583;0;0.015350162181148796;\n", - "Response sent: 4.148;0;0.015475277859674596;\n", - "Response sent: 4.4350000000000005;0;0.015600296793579521;\n", - "Response sent: 4.487;0;0.015725218201300257;\n", - "Response sent: 4.096;0;0.01585004130188319;\n", - "Response sent: 4.066000000000001;0;0.015974765314989273;\n", - "Response sent: 4.353999999999999;0;0.01609938946089891;\n", - "Response sent: 4.2330000000000005;0;0.016223912960516843;\n", - "Response sent: 4.286;0;0.016348335035376985;\n", - "Response sent: 4.173;0;0.016472654907647342;\n", - "Response sent: 4.042999999999999;0;0.016596871800134822;\n", - "Response sent: 4.263999999999999;0;0.01672098493629013;\n", - "Response sent: 4.013999999999999;0;0.016844993540212606;\n", - "Response sent: 3.837999999999999;0;0.016968896836655076;\n", - "Response sent: 3.8599999999999994;0;0.017092694051028715;\n", - "Response sent: 3.926;0;0.017216384409407856;\n", - "Response sent: 4.129;0;0.01733996713853486;\n", - "Response sent: 4.015000000000001;0;0.017463441465824944;\n", - "Response sent: 3.9749999999999996;0;0.017586806619371;\n", - "Response sent: 4.395;0;0.01771006182794842;\n", - "Response sent: 4.414999999999999;0;0.017833206321019937;\n", - "Response sent: 4.647;0;0.017956239328740416;\n", - "Response sent: 4.478;0;0.018079160081961688;\n", - "Response sent: 4.616;0;0.01820196781223734;\n", - "Response sent: 4.417999999999999;0;0.01832466175182754;\n", - "Response sent: 4.173;0;0.018447241133703815;\n", - "Response sent: 4.4190000000000005;0;0.018569705191553862;\n", - "Response sent: 4.484999999999999;0;0.018692053159786347;\n", - "Response sent: 4.1850000000000005;0;0.01881428427353564;\n", - "Response sent: 4.1530000000000005;0;0.018936397768666666;\n", - "Response sent: 4.237;0;0.019058392881779646;\n", - "Response sent: 4.021000000000001;0;0.019180268850214854;\n", - "Response sent: 3.976000000000001;0;0.01930202491205743;\n", - "Response sent: 4.177;0;0.019423660306142097;\n", - "Response sent: 4.058999999999999;0;0.019545174272057955;\n", - "Response sent: 3.8889999999999993;0;0.019666566050153204;\n", - "Response sent: 4.119;0;0.019787834881539915;\n", - "Response sent: 4.005000000000001;0;0.019908980008098768;\n", - "Response sent: 4.042999999999999;0;0.020030000672483804;\n", - "Response sent: 4.16;0;0.020150896118127124;\n", - "Response sent: 4.202999999999999;0;0.02027166558924366;\n", - "Response sent: 4.577;0;0.020392308330835857;\n", - "Response sent: 4.602;0;0.020512823588698444;\n", - "Response sent: 4.551;0;0.02063321060942312;\n", - "Response sent: 4.901;0;0.02075346864040324;\n", - "Response sent: 4.981;0;0.02087359692983858;\n", - "Response sent: 4.948;0;0.02099359472673997;\n", - "Response sent: 5.236000000000001;0;0.021113461280934054;\n", - "Response sent: 5.417999999999999;0;0.02123319584306792;\n", - "Response sent: 5.428000000000001;0;0.021352797664613832;\n", - "Response sent: 5.355;0;0.021472265997873878;\n", - "Response sent: 5.422000000000001;0;0.021591600095984667;\n", - "Response sent: 5.475;0;0.02171079921292197;\n", - "Response sent: 5.239000000000001;0;0.02182986260350542;\n", - "Response sent: 5.343;0;0.021948789523403133;\n", - "Response sent: 5.286;0;0.022067579229136394;\n", - "Response sent: 5.305999999999999;0;0.02218623097808429;\n", - "Response sent: 5.029;0;0.02230474402848833;\n", - "Response sent: 5.025;0;0.022423117639457146;\n", - "Response sent: 5.132;0;0.022541351070971053;\n", - "Response sent: 5.214;0;0.022659443583886715;\n", - "Response sent: 4.971;0;0.022777394439941746;\n", - "Response sent: 4.949999999999999;0;0.022895202901759365;\n", - "Response sent: 4.629;0;0.023012868232852954;\n", - "Response sent: 4.348000000000001;0;0.023130389697630673;\n", - "Response sent: 4.407;0;0.023247766561400113;\n", - "Response sent: 4.462999999999999;0;0.02336499809037281;\n", - "Response sent: 4.470000000000001;0;0.02348208355166888;\n", - "Response sent: 4.765000000000001;0;0.023599022213321597;\n", - "Response sent: 4.986000000000001;0;0.02371581334428195;\n", - "Response sent: 5.132;0;0.02383245621442323;\n", - "Response sent: 5.180999999999999;0;0.023948950094545594;\n", - "Response sent: 4.814;0;0.024065294256380612;\n", - "Response sent: 4.573;0;0.02418148797259583;\n", - "Response sent: 4.058;0;0.024297530516799316;\n", - "Response sent: 4.071999999999999;0;0.024413421163544193;\n", - "Response sent: 4.2509999999999994;0;0.024529159188333184;\n", - "Response sent: 4.263999999999999;0;0.024644743867623137;\n", - "Response sent: 4.3420000000000005;0;0.024760174478829545;\n", - "Response sent: 4.269;0;0.024875450300331076;\n", - "Response sent: 4.256;0;0.024990570611474066;\n", + "Response sent: 7.452;0;0.06279051952931337;\n", + "Response sent: 7.281000000000001;0;0.12533323356430426;\n", + "Response sent: 7.445;0;0.1873813145857246;\n", + "Response sent: 7.351000000000001;0;0.2486898871648548;\n", + "Response sent: 7.301;0;0.3090169943749474;\n", + "Response sent: 7.208;0;0.3681245526846779;\n", + "Response sent: 6.615;0;0.4257792915650727;\n", + "Response sent: 6.577;0;0.4817536741017153;\n", + "Response sent: 6.888;0;0.5358267949789967;\n", + "Response sent: 6.776;0;0.5877852522924731;\n", + "Response sent: 6.880000000000001;0;0.6374239897486896;\n", + "Response sent: 6.9350000000000005;0;0.6845471059286886;\n", + "Response sent: 6.893000000000001;0;0.7289686274214116;\n", + "Response sent: 6.641;0;0.7705132427757893;\n", + "Response sent: 6.686999999999999;0;0.8090169943749475;\n", + "Response sent: 6.909000000000001;0;0.8443279255020151;\n", + "Response sent: 6.859;0;0.8763066800438637;\n", + "Response sent: 7.050000000000001;0;0.9048270524660196;\n", + "Response sent: 6.941000000000001;0;0.9297764858882513;\n", + "Response sent: 6.959;0;0.9510565162951535;\n", + "Response sent: 6.861000000000001;0;0.9685831611286311;\n", + "Response sent: 6.460000000000001;0;0.9822872507286886;\n", + "Response sent: 6.449;0;0.9921147013144779;\n", + "Response sent: 6.6579999999999995;0;0.9980267284282716;\n", + "Response sent: 6.964;0;1.0;\n", + "Response sent: 6.6419999999999995;0;0.9980267284282716;\n", + "Response sent: 6.683;0;0.9921147013144778;\n", + "Response sent: 6.867000000000001;0;0.9822872507286886;\n", + "Response sent: 7.089;0;0.9685831611286312;\n", + "Response sent: 6.912000000000001;0;0.9510565162951536;\n", + "Response sent: 6.68;0;0.9297764858882513;\n", + "Response sent: 6.664999999999999;0;0.9048270524660195;\n", + "Response sent: 6.856999999999999;0;0.8763066800438635;\n", + "Response sent: 6.8309999999999995;0;0.844327925502015;\n", + "Response sent: 7.090999999999999;0;0.8090169943749475;\n", + "Response sent: 7.257;0;0.7705132427757893;\n", + "Response sent: 7.226000000000001;0;0.7289686274214114;\n", + "Response sent: 7.1579999999999995;0;0.6845471059286888;\n", + "Response sent: 6.8870000000000005;0;0.6374239897486899;\n", + "Response sent: 7.148;0;0.5877852522924732;\n", + "Response sent: 7.103999999999999;0;0.5358267949789967;\n", + "Response sent: 6.552;0;0.4817536741017156;\n", + "Response sent: 6.077;0;0.4257792915650729;\n", + "Response sent: 5.861000000000001;0;0.36812455268467814;\n", + "Response sent: 5.981;0;0.3090169943749475;\n", + "Response sent: 5.904999999999999;0;0.24868988716485482;\n", + "Response sent: 5.879;0;0.18738131458572457;\n", + "Response sent: 6.077999999999999;0;0.12533323356430454;\n", + "Response sent: 6.119999999999999;0;0.06279051952931358;\n", + "Response sent: 6.114000000000001;0;1.2246467991473532e-16;\n", + "Response sent: 6.084;0;-0.06279051952931335;\n", + "Response sent: 6.256;0;-0.12533323356430429;\n", + "Response sent: 6.138;0;-0.18738131458572477;\n", + "Response sent: 6.1240000000000006;0;-0.24868988716485502;\n", + "Response sent: 5.984;0;-0.30901699437494773;\n", + "Response sent: 6.0649999999999995;0;-0.3681245526846783;\n", + "Response sent: 5.901;0;-0.42577929156507266;\n", + "Response sent: 5.808999999999999;0;-0.481753674101715;\n", + "Response sent: 5.952;0;-0.5358267949789964;\n", + "Response sent: 6.0440000000000005;0;-0.587785252292473;\n", + "Response sent: 6.138999999999999;0;-0.6374239897486896;\n", + "Response sent: 6.246;0;-0.6845471059286887;\n", + "Response sent: 6.393000000000001;0;-0.7289686274214113;\n", + "Response sent: 6.098000000000001;0;-0.7705132427757894;\n", + "Response sent: 5.961;0;-0.8090169943749473;\n", + "Response sent: 5.881;0;-0.8443279255020153;\n", + "Response sent: 5.9;0;-0.8763066800438636;\n", + "Response sent: 6.125;0;-0.9048270524660198;\n", + "Response sent: 6.1;0;-0.9297764858882515;\n", + "Response sent: 5.981;0;-0.9510565162951535;\n", + "Response sent: 6.118;0;-0.968583161128631;\n", + "Response sent: 6.148;0;-0.9822872507286887;\n", + "Response sent: 6.2330000000000005;0;-0.9921147013144778;\n", + "Response sent: 6.541;0;-0.9980267284282716;\n", + "Response sent: 6.401999999999999;0;-1.0;\n", + "Response sent: 6.188000000000001;0;-0.9980267284282716;\n", + "Response sent: 6.007;0;-0.9921147013144779;\n", + "Response sent: 5.914999999999999;0;-0.9822872507286887;\n", + "Response sent: 5.962;0;-0.9685831611286311;\n", + "Response sent: 6.224;0;-0.9510565162951536;\n", + "Response sent: 6.279999999999999;0;-0.9297764858882512;\n", + "Response sent: 6.202;0;-0.9048270524660196;\n", + "Response sent: 5.8759999999999994;0;-0.8763066800438634;\n", + "Response sent: 5.894;0;-0.8443279255020155;\n", + "Response sent: 5.960000000000001;0;-0.8090169943749476;\n", + "Response sent: 6.151999999999999;0;-0.7705132427757896;\n", + "Response sent: 6.2330000000000005;0;-0.7289686274214116;\n", + "Response sent: 5.882;0;-0.684547105928689;\n", + "Response sent: 5.987;0;-0.6374239897486896;\n", + "Response sent: 6.099;0;-0.5877852522924734;\n", + "Response sent: 6.318;0;-0.5358267949789963;\n", + "Response sent: 5.936999999999999;0;-0.4817536741017153;\n", + "Response sent: 5.667999999999999;0;-0.4257792915650722;\n", + "Response sent: 5.792;0;-0.36812455268467786;\n", + "Response sent: 5.723000000000001;0;-0.3090169943749477;\n", + "Response sent: 5.712999999999999;0;-0.24868988716485535;\n", + "Response sent: 5.459;0;-0.18738131458572468;\n", + "Response sent: 5.734999999999999;0;-0.12533323356430465;\n", + "Response sent: 5.465999999999999;0;-0.06279051952931326;\n", + "Response sent: 5.103999999999999;0;-2.4492935982947064e-16;\n", + "Response sent: 5.085000000000001;0;0.06279051952931278;\n", + "Response sent: 5.021000000000001;0;0.12533323356430418;\n", + "Response sent: 4.6899999999999995;0;0.1873813145857242;\n", + "Response sent: 4.478999999999999;0;0.24868988716485488;\n", + "Response sent: 4.75;0;0.3090169943749472;\n", + "Response sent: 4.804;0;0.3681245526846782;\n", + "Response sent: 4.742000000000001;0;0.42577929156507255;\n", + "Response sent: 4.856999999999999;0;0.48175367410171566;\n", + "Response sent: 4.91;0;0.5358267949789967;\n", + "Response sent: 4.984;0;0.5877852522924736;\n", + "Response sent: 5.195;0;0.6374239897486899;\n", + "Response sent: 5.0280000000000005;0;0.6845471059286893;\n", + "Response sent: 4.832000000000001;0;0.7289686274214119;\n", + "Response sent: 5.050000000000001;0;0.7705132427757893;\n", + "Response sent: 5.073;0;0.8090169943749478;\n", + "Response sent: 4.712999999999999;0;0.8443279255020147;\n", + "Response sent: 4.802;0;0.8763066800438631;\n", + "Response sent: 4.612;0;0.9048270524660194;\n", + "Response sent: 4.583;0;0.9297764858882511;\n", + "Response sent: 4.148;0;0.9510565162951535;\n", + "Response sent: 4.4350000000000005;0;0.968583161128631;\n", + "Response sent: 4.487;0;0.9822872507286886;\n", + "Response sent: 4.096;0;0.9921147013144778;\n", + "Response sent: 4.066000000000001;0;0.9980267284282716;\n", + "Response sent: 4.353999999999999;0;1.0;\n", + "Response sent: 4.2330000000000005;0;0.9980267284282716;\n", + "Response sent: 4.286;0;0.9921147013144779;\n", + "Response sent: 4.173;0;0.9822872507286886;\n", + "Response sent: 4.042999999999999;0;0.9685831611286311;\n", + "Response sent: 4.263999999999999;0;0.9510565162951536;\n", + "Response sent: 4.013999999999999;0;0.9297764858882517;\n", + "Response sent: 3.837999999999999;0;0.9048270524660192;\n", + "Response sent: 3.8599999999999994;0;0.8763066800438634;\n", + "Response sent: 3.926;0;0.8443279255020151;\n", + "Response sent: 4.129;0;0.8090169943749477;\n", + "Response sent: 4.015000000000001;0;0.7705132427757886;\n", + "Response sent: 3.9749999999999996;0;0.728968627421411;\n", + "Response sent: 4.395;0;0.6845471059286884;\n", + "Response sent: 4.414999999999999;0;0.6374239897486897;\n", + "Response sent: 4.647;0;0.5877852522924734;\n", + "Response sent: 4.478;0;0.5358267949789972;\n", + "Response sent: 4.616;0;0.4817536741017162;\n", + "Response sent: 4.417999999999999;0;0.42577929156507394;\n", + "Response sent: 4.173;0;0.368124552684678;\n", + "Response sent: 4.4190000000000005;0;0.3090169943749478;\n", + "Response sent: 4.484999999999999;0;0.2486898871648555;\n", + "Response sent: 4.1850000000000005;0;0.18738131458572568;\n", + "Response sent: 4.1530000000000005;0;0.1253332335643039;\n", + "Response sent: 4.237;0;0.06279051952931339;\n", + "Response sent: 4.021000000000001;0;3.6739403974420594e-16;\n", + "Response sent: 3.976000000000001;0;-0.06279051952931265;\n", + "Response sent: 4.177;0;-0.12533323356430318;\n", + "Response sent: 4.058999999999999;0;-0.18738131458572496;\n", + "Response sent: 3.8889999999999993;0;-0.24868988716485477;\n", + "Response sent: 4.119;0;-0.30901699437494706;\n", + "Response sent: 4.005000000000001;0;-0.36812455268467725;\n", + "Response sent: 4.042999999999999;0;-0.42577929156507327;\n", + "Response sent: 4.16;0;-0.48175367410171555;\n", + "Response sent: 4.202999999999999;0;-0.5358267949789965;\n", + "Response sent: 4.577;0;-0.5877852522924728;\n", + "Response sent: 4.602;0;-0.6374239897486905;\n", + "Response sent: 4.551;0;-0.6845471059286892;\n", + "Response sent: 4.901;0;-0.7289686274214118;\n", + "Response sent: 4.981;0;-0.7705132427757893;\n", + "Response sent: 4.948;0;-0.8090169943749472;\n", + "Response sent: 5.236000000000001;0;-0.8443279255020156;\n", + "Response sent: 5.417999999999999;0;-0.876306680043863;\n", + "Response sent: 5.428000000000001;0;-0.9048270524660189;\n", + "Response sent: 5.355;0;-0.9297764858882513;\n", + "Response sent: 5.422000000000001;0;-0.9510565162951534;\n", + "Response sent: 5.475;0;-0.968583161128631;\n", + "Response sent: 5.239000000000001;0;-0.9822872507286885;\n", + "Response sent: 5.343;0;-0.9921147013144779;\n", + "Response sent: 5.286;0;-0.9980267284282716;\n", + "Response sent: 5.305999999999999;0;-1.0;\n", + "Response sent: 5.029;0;-0.9980267284282716;\n", + "Response sent: 5.025;0;-0.992114701314478;\n", + "Response sent: 5.132;0;-0.9822872507286886;\n", + "Response sent: 5.214;0;-0.9685831611286312;\n", + "Response sent: 4.971;0;-0.9510565162951538;\n", + "Response sent: 4.949999999999999;0;-0.9297764858882517;\n", + "Response sent: 4.629;0;-0.9048270524660192;\n", + "Response sent: 4.348000000000001;0;-0.8763066800438635;\n", + "Response sent: 4.407;0;-0.8443279255020151;\n", + "Response sent: 4.462999999999999;0;-0.8090169943749477;\n", + "Response sent: 4.470000000000001;0;-0.7705132427757886;\n", + "Response sent: 4.765000000000001;0;-0.7289686274214111;\n", + "Response sent: 4.986000000000001;0;-0.6845471059286885;\n", + "Response sent: 5.132;0;-0.6374239897486897;\n", + "Response sent: 5.180999999999999;0;-0.5877852522924735;\n", + "Response sent: 4.814;0;-0.5358267949789959;\n", + "Response sent: 4.573;0;-0.4817536741017163;\n", + "Response sent: 4.058;0;-0.42577929156507405;\n", + "Response sent: 4.071999999999999;0;-0.3681245526846781;\n", + "Response sent: 4.2509999999999994;0;-0.3090169943749479;\n", + "Response sent: 4.263999999999999;0;-0.2486898871648556;\n", + "Response sent: 4.3420000000000005;0;-0.1873813145857258;\n", + "Response sent: 4.269;0;-0.125333233564304;\n", + "Response sent: 4.256;0;-0.06279051952931351;\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", "No request received, waiting...\n", "No request received, waiting...\n", "No request received, waiting...\n", @@ -298,8 +308,8 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 13\u001b[0m\n\u001b[1;32m 6\u001b[0m count_sampling \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m \n\u001b[1;32m 8\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 9\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling] \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m6\u001b[39m, \n\u001b[1;32m 10\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelV\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0\u001b[39m,\n\u001b[1;32m 11\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: bld_pitch[count_sampling]}\n\u001b[0;32m---> 13\u001b[0m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", - "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:173\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict, verbose)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 162\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;66;03m# req_ = self.requester.recv_string()\u001b[39;00m\n\u001b[1;32m 165\u001b[0m \n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# if verbose:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;66;03m# response = ';'.join(map(str, rep_dict.values())) + ';'\u001b[39;00m\n\u001b[1;32m 172\u001b[0m \u001b[38;5;66;03m# self.requester.send_string(response)\u001b[39;00m\n\u001b[0;32m--> 173\u001b[0m socks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoller\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 174\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester \u001b[38;5;129;01min\u001b[39;00m socks \u001b[38;5;129;01mand\u001b[39;00m socks[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester] \u001b[38;5;241m==\u001b[39m zmq\u001b[38;5;241m.\u001b[39mPOLLIN:\n\u001b[1;32m 175\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester\u001b[38;5;241m.\u001b[39mrecv_string()\n", + "Cell \u001b[0;32mIn[10], line 21\u001b[0m\n\u001b[1;32m 13\u001b[0m count_sampling \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m \n\u001b[1;32m 15\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 16\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling] \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m6\u001b[39m, \n\u001b[1;32m 17\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelV\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0\u001b[39m,\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: bld_pitch[count_sampling]\n\u001b[1;32m 19\u001b[0m }\n\u001b[0;32m---> 21\u001b[0m done \u001b[38;5;241m=\u001b[39m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 22\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 23\u001b[0m time\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;241m0.1\u001b[39m)\n", + "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:167\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict, verbose)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfast_rep\u001b[39m(\u001b[38;5;28mself\u001b[39m, rep_dict, verbose: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 163\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m socks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoller\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 168\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester \u001b[38;5;129;01min\u001b[39;00m socks \u001b[38;5;129;01mand\u001b[39;00m socks[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester] \u001b[38;5;241m==\u001b[39m zmq\u001b[38;5;241m.\u001b[39mPOLLIN:\n\u001b[1;32m 169\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester\u001b[38;5;241m.\u001b[39mrecv_string()\n", "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/poll.py:106\u001b[0m, in \u001b[0;36mPoller.poll\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(timeout, \u001b[38;5;28mfloat\u001b[39m):\n\u001b[1;32m 105\u001b[0m timeout \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(timeout)\n\u001b[0;32m--> 106\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mzmq_poll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msockets\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m_zmq.py:1536\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.zmq_poll\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", @@ -308,9 +318,16 @@ } ], "source": [ + "import time \n", + "\n", "count_sampling = 0\n", + "dt_in = 0.5 \n", + "dt_wspd = 0.05 \n", "\n", - "while True:\n", + "done = False\n", + "rfi.cont_req_threshold = 5\n", + "\n", + "while not done:\n", " \n", " if count_sampling >= 7000:\n", " count_sampling = 0 \n", @@ -318,10 +335,12 @@ " rep = {\n", " 'VelH': wind_series[count_sampling] - 6, \n", " 'VelV': 0,\n", - " 'BlPitchCom1': bld_pitch[count_sampling]}\n", + " 'BlPitchCom1': np.deg2rad(bld_pitch[count_sampling])\n", + " }\n", " \n", - " rfi.fast_rep(rep, verbose=True)\n", - " count_sampling += 1" + " done = rfi.fast_rep(rep, verbose=True)\n", + " count_sampling += 1\n", + " time.sleep(0.1)" ] }, { @@ -342,14 +361,14 @@ " {\n", " 'VelH': wind_series[count_sampling] + 4, \n", " 'VelV': wind_series[count_sampling]/2,\n", - " 'BlPitchCom1': np.rad2deg(bld_pitch[count_sampling])\n", + " 'BlPitchCom1': bld_pitch[count_sampling]\n", " }, \n", "verbose=True)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -360,22 +379,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 7, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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jpjSEfLNb34z5s+fH9OnT49FixbFr371q1GPv+uuu2LRokUxffr0ePWrXx3f+ta39jrmBz/4QSxcuDAqlUosXLgwbr/99lzDn3JSn+9bbrklSqXSXl//+c9/cv41pox2zvfTTz8d5513XrzmNa+Jrq6uWLZsWcPjXN/NpT7fru/RtXO+f/jDH8Y73/nOeNWrXhW9vb1xyimnxM9//vO9jnN9jy71OU9yjRdT1Pe+971i2rRpxc0331w88MADxdKlS4tDDjmkeOKJJxoe/9hjjxUHH3xwsXTp0uKBBx4obr755mLatGnF97///foxmzZtKsrlcrFq1ariwQcfLFatWlV0d3cX995772T9tfZZOc732rVri97e3uLpp58e9kX75/vxxx8vLr300mLdunXFcccdVyxdunSvY1zfzeU4367v5to930uXLi2uvfba4ne/+13x8MMPF8uXLy+mTZtW3H///fVjXN+jy3HOU1zjUzZC3vSmNxUXXXTRsNcWLFhQXHXVVQ2Pv+KKK4oFCxYMe+3CCy8sTj755Pr3H/zgB4t3vetdw44566yzig9/+MOJRj115Tjfa9euLWbOnJl8rPuDds/3y51++ukN/1F0fTeX43y7vpubyPmuWbhwYbFy5cr6967v0eU45ymu8Sm5HPPCCy/Eli1bYvHixcNeX7x4cWzatKnhn7nnnnv2Ov6ss86KzZs3x4svvjjqMc3e80CR63xHRDz33HMxb968mDt3bpx77rmxdevW9H+BKWY857sVru/Gcp3vCNd3IynO99DQUOzatSsOPfTQ+muu7+ZynfOIiV/jUzJCnnnmmRgcHIzZs2cPe3327Nmxffv2hn9m+/btDY/fvXt3PPPMM6Me0+w9DxS5zveCBQvilltuiTvuuCM2bNgQ06dPj9NOOy3+8pe/5PmLTBHjOd+tcH03lut8u74bS3G+v/71r8fzzz8fH/zgB+uvub6by3XOU1zj+9xv0W1HqVQa9n1RFHu9NtbxI19v9z0PJKnP98knnxwnn3xy/eennXZanHDCCXH99dfHN77xjVTDnrJyXIuu7+ZSnxvX9+jGe743bNgQK1asiB//+Mcxa9asJO95oEh9zlNc41MyQg4//PAol8t7FdyOHTv2Kr2aI444ouHx3d3dcdhhh416TLP3PFDkOt8jdXV1xUknnXTA/5/ieM53K1zfjeU63yO5vl8ykfN96623xqc+9am47bbb4h3veMewn7m+m8t1zkcazzU+JZdjenp6YtGiRbFx48Zhr2/cuDFOPfXUhn/mlFNO2ev4X/ziF3HiiSfGtGnTRj2m2XseKHKd75GKoojf//73ceSRR6YZ+BQ1nvPdCtd3Y7nO90iu75eM93xv2LAhPvGJT8T69evjnHPO2evnru/mcp3zkcZ1jU9oW2sH1W43+va3v1088MADxbJly4pDDjmk+Otf/1oURVFcddVVxcc//vH68bVbRi+77LLigQceKL797W/vdcvob37zm6JcLhdf+cpXigcffLD4yle+4hav/8pxvlesWFH87Gc/Kx599NFi69atxQUXXFB0d3cXv/3tbyf977evafd8F0VRbN26tdi6dWuxaNGi4rzzziu2bt1a/PnPf67/3PXdXI7z7fpurt3zvX79+qK7u7u48cYbh90K+s9//rN+jOt7dDnOeYprfMpGSFEUxY033ljMmzev6OnpKU444YTirrvuqv/s/PPPL04//fRhx995553F8ccfX/T09BRHH310sWbNmr3e87bbbite85rXFNOmTSsWLFhQ/OAHP8j915gyUp/vZcuWFUcddVTR09NTvOpVryoWL15cbNq0aTL+KlNCu+c7Ivb6mjdv3rBjXN/NpT7fru/RtXO+Tz/99Ibn+/zzzx/2nq7v0aU+5ymu8VJR/He3IADAJJqSe0IAgKlPhAAAHSFCAICOECEAQEeIEACgI0QIANARIgQA6AgRAgB0hAgBADpChAAAHSFCAICOECEAQEf8f8Ux2CnDKq3AAAAAAElFTkSuQmCC", + "image/png": "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M2eONX369Ij4d+3aFfF7uut7aFmHd47h51ZZWWk98cQTlsvlsr788svQMd31fXz55ZetV155xVq/fr21fv166xe/+IWVlJRkrV271rKsnt0Ggw52jvHQDi3r0O9jT2+Hhzq/ntwGu7J8+XJr8ODB1nHHHWfdcsstoce7Q3vs8clHZ9XV1ZYka9myZZZlWVYgELByc3Ot++67L3RMc3Oz5fV6rccee8yyrPYLeFJSkrVw4cLQMdu2bbPcbre1aNEie0/gEDqfX1eWL19uSbI2b94ceuz000+P+M/XnXV1jnPmzLHOPffcA/5MT3oPLevw3sdzzz3XOuOMMyIe60nvY58+faw//vGPcdcGwwXPsSs9vR0GhZ9jvLVDyzr4e9iT22B9fb01dOhQa/HixRExd5f22OOHXTqrra2VJGVlZUmSysvLVVVVpWnTpoWO8Xg8Ov300/Xee+9JklatWqXW1taIY/Lz81VcXBw6prvofH4HOsblcql3794Rj//lL39Rv379NGrUKP30pz8N7SDc3RzoHJcuXars7GwNGzZM11xzjaqrq0PP9aT3UDr0+7hjxw698soruvrqq/d7rru/j36/XwsXLlRjY6MmTZoUd21Q2v8cu9LT2+GBzjFe2uGh3sOe3AYl6YYbbtDMmTM1derUiMe7S3vsdhvLfRuWZem2227TKaecouLiYklSVVWVJCknJyfi2JycHG3evDl0THJysvr06bPfMcGf7w66Or/Ompubdccdd+jiiy+O2CjokksuUVFRkXJzc7V27VqVlJTo448/1uLFi+0K/7Ac6BxnzJihH/zgBxo0aJDKy8t155136owzztCqVavk8Xh6zHsoHd77+PTTTysjI0Pnn39+xOPd+X1cs2aNJk2apObmZqWnp+vFF1/UyJEjQx9W8dAGD3SOnfXkdniwc4yHdni472FPbINBCxcuVFlZmVasWLHfc93lmhhXyceNN96oTz75RO++++5+z7lcroj7lmXt91hnh3OMnQ52flL7pLcLL7xQgUBAjz76aMRz11xzTejvxcXFGjp0qMaPH6+ysjKNHTs2pnEfiQOd4wUXXBD6e3FxscaPH69BgwbplVde2e/DIVx3ew+lQ7+PkvTEE0/okksuUUpKSsTj3fl9POaYY7R69Wrt2bNHzz//vObMmaNly5aFno+HNnigcwy/ePX0dniwc4yHdng476HUM9ugJFVUVOiWW27RG2+8sV/s4Zxuj3Ez7HLTTTfp5Zdf1pIlS1RQUBB6PDc3V5L2y9aqq6tDmV9ubq5aWlq0e/fuAx7jtAOdX1Bra6tmz56t8vJyLV68+JDbI48dO1ZJSUnasGFDrEI+Yoc6x3B5eXkaNGhQKP6e8B5Kh3eO77zzjtavX68f/vCHh/x93el9TE5O1tFHH63x48ertLRUo0eP1u9///u4aYPSgc8xKB7a4aHOMVxPbIeHc349tQ1K7UMm1dXVGjdunBITE5WYmKhly5bpoYceUmJiYuh9cLo99vjkw7Is3XjjjXrhhRf01ltvqaioKOL5YPdYeJdYS0uLli1bppNOOkmSNG7cOCUlJUUcU1lZqbVr14aOccqhzk/q+MDbsGGD/vWvf6lv376H/L3r1q1Ta2ur8vLyYhH2ETmcc+xs165dqqioCMXfnd9D6cjO8U9/+pPGjRun0aNHH/L3dqf3sTPLsuTz+Xp8GzyY4DlKPb8dHkj4OXbW09phV7o6v57cBs8880ytWbNGq1evDt3Gjx+vSy65RKtXr9aQIUO6R3uMyrRVB11//fWW1+u1li5dGrH0qampKXTMfffdZ3m9XuuFF16w1qxZY1100UVdLisqKCiw/vWvf1llZWXWGWec0S2Whx3q/FpbW61zzjnHKigosFavXh1xjM/nsyzLsjZu3Gjdfffd1ooVK6zy8nLrlVdesYYPH26NGTPG8fOzrEOfY319vfWTn/zEeu+996zy8nJryZIl1qRJk6wBAwb0iPfQsg7v/6llWVZtba3Vq1cva/78+fv9ju78PpaUlFhvv/22VV5ebn3yySfWL37xC8vtdltvvPGGZVk9uw0GHewc46EdWtbBzzEe2uGh/p9aVs9tgwfTeYVOd2iPPT75kNTl7cknnwwdEwgErLlz51q5ubmWx+OxTjvtNGvNmjURv2fv3r3WjTfeaGVlZVmpqanW2WefbW3ZssXms9nfoc6vvLz8gMcsWbLEsizL2rJli3XaaadZWVlZVnJysnXUUUdZN998837r851yqHNsamqypk2bZvXv399KSkqyBg4caM2ZM2e/96e7voeWdXj/Ty3Lsv77v//bSk1N7bJuQHd+H6+66ipr0KBBVnJystW/f3/rzDPPjPhA78ltMOhg5xgP7dCyDn6O8dAOD/X/1LJ6bhs8mM7JR3dojy7Lsqzo9KEAAAAcWo+f8wEAAHoWkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGCr/w913d5nwa9BXgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -385,10 +404,51 @@ } ], "source": [ - "plt.plot(fastout['Time_[s]'][:50], fastout['Wind1VelX_[m/s]'][:50])\n", - "# plt.plot(fastout['Time_[s]'], fastout['BldPitch1_[deg]'])#, ls='--', marker='o')" + "# plt.plot(fastout['Wind1VelX_[m/s]'])\n", + "# plt.plot(wind_series[::10])\n", + "plt.plot(fastout['BldPitch1_[deg]'][200:400], ls='--', marker='o')#, ls='--', marker='o')\n", + "# plt.plot(fastout['Time_[s]'][50:150], np.rad2deg(bld_pitch[50:150]), ls='--', marker='o')#, ls='--', marker='o')" ] }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.1499562429386746" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fastout['BldPitch1_[deg]'][150]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "ename": "IndexError", + "evalue": "only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[29], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mbld_pitch\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m150\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mdt_in\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mdt_wspd\u001b[49m\u001b[43m]\u001b[49m\n", + "\u001b[0;31mIndexError\u001b[0m: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices" + ] + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py index 0450a64a77..980f98279e 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -53,7 +53,7 @@ def __init__(self, self.poller = zmq.Poller() self.poller.register(self.requester, zmq.POLLIN) self.cont_req_off = 0 - self.cont_req_threshold = 20 + self.cont_req_threshold = 10 print('ZMQ Real Time interactor for FAST initialized. \n PUB-SUB protocol: {} | REQ-REP protocol: {}'.format(self.ZmqOutAddress, self.ZmqInAddress)) @@ -187,7 +187,10 @@ def fast_rep(self, rep_dict, verbose: bool = False): print('Requester closed due to inactivity.') self.requester.close() self.req_context.term() - pass + + return True + + return False From e9986b2ffa208b4945329249056bc6e772b943ba Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Fri, 21 Jun 2024 17:08:26 +0200 Subject: [PATCH 12/14] all tests OK --- .../openfast-library/src/FAST_Registry.txt | 2 +- modules/openfast-library/src/FAST_SS_Subs.f90 | 3 +- modules/openfast-library/src/FAST_Subs.f90 | 40 +- modules/openfast-library/src/FAST_Types.f90 | 2 +- .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 102 +- ...ELOffshrBsline5MW_Onshore_ElastoDyn_v1.dat | 160 + .../OFZMQ_test01/OFZMQ_test01.AD.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01.ED.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01.SrvD.sum | 4 +- .../OFZMQ_test01/OFZMQ_test01.UA.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01.ech | 85 +- .../OFZMQ_test01/OFZMQ_test01.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01_2.AD.sum | 61 + .../OFZMQ_test01/OFZMQ_test01_2.ED.sum | 213 + .../OFZMQ_test01/OFZMQ_test01_2.SrvD.sum | 66 + .../OFZMQ_test01/OFZMQ_test01_2.UA.sum | 16 + .../OFZMQ_test01/OFZMQ_test01_2.ech | 110 + .../OFZMQ_test01/OFZMQ_test01_2.fst | 86 + .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 96 +- .../OFZMQ_test03/OFZMQ_test03 copy.fst | 83 + .../OFZMQ_test03/OFZMQ_test03.AD.sum | 6 +- .../OFZMQ_test03/OFZMQ_test03.ED.sum | 91 +- .../OFZMQ_test03/OFZMQ_test03.SrvD.sum | 4 +- .../OFZMQ_test03/OFZMQ_test03.ech | 41 +- .../OFZMQ_test03/OFZMQ_test03.fst | 118 +- .../OFZMQ_test04/AeroData/Cylinder1.dat | 19 + .../OFZMQ_test04/AeroData/Cylinder2.dat | 19 + .../OFZMQ_test04/AeroData/DU21_A17.dat | 158 + .../OFZMQ_test04/AeroData/DU25_A17.dat | 157 + .../OFZMQ_test04/AeroData/DU30_A17.dat | 159 + .../OFZMQ_test04/AeroData/DU35_A17.dat | 151 + .../OFZMQ_test04/AeroData/DU40_A17.dat | 152 + .../OFZMQ_test04/AeroData/NACA64_A17.dat | 143 + .../OFZMQ_test04/Airfoils/Cylinder1.dat | 59 + .../Airfoils/Cylinder1_coords.txt | 407 + .../OFZMQ_test04/Airfoils/Cylinder2.dat | 60 + .../Airfoils/Cylinder2_coords.txt | 407 + .../OFZMQ_test04/Airfoils/DU21_A17.dat | 196 + .../OFZMQ_test04/Airfoils/DU21_A17_coords.txt | 407 + .../OFZMQ_test04/Airfoils/DU25_A17.dat | 194 + .../OFZMQ_test04/Airfoils/DU25_A17_coords.txt | 407 + .../OFZMQ_test04/Airfoils/DU30_A17.dat | 198 + .../OFZMQ_test04/Airfoils/DU30_A17_coords.txt | 407 + .../OFZMQ_test04/Airfoils/DU35_A17.dat | 189 + .../OFZMQ_test04/Airfoils/DU35_A17_coords.txt | 407 + .../OFZMQ_test04/Airfoils/DU40_A17.dat | 190 + .../OFZMQ_test04/Airfoils/DU40_A17_coords.txt | 407 + .../OFZMQ_test04/Airfoils/NACA64_A17.dat | 181 + .../Airfoils/NACA64_A17_coords.txt | 407 + .../OFZMQ_test04/Cp_Ct_Cq.NREL5MW.txt | 99 + .../templatesDir/OFZMQ_test04/DISCON.IN | 192 + .../OFZMQ_test04/IceDyn_Input.dat | 74 + .../OFZMQ_test04/IceFloe_IEC_Crushing.dat | 51 + .../NRELOffshrBsline5MW_AeroDyn_blade.dat | 28 + .../NRELOffshrBsline5MW_BeamDyn.dat | 94 + .../NRELOffshrBsline5MW_BeamDyn_Blade.dat | 756 + .../NRELOffshrBsline5MW_Blade.dat | 83 + .../NRELOffshrBsline5MW_InflowWind.dat | 71 + ...LOffshrBsline5MW_Monopile_IEC_Crushing.inp | 26 + .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 106 + .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 168 + ...ffshrBsline5MW_Onshore_ElastoDyn_Tower.dat | 54 + .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 111 + .../OFZMQ_test04/OFZMQ_test04.AD.sum | 52 + .../OFZMQ_test04/OFZMQ_test04.ED.sum | 213 + .../OFZMQ_test04/OFZMQ_test04.SrvD.sum | 66 + .../OFZMQ_test04/OFZMQ_test04.ech | 110 + .../OFZMQ_test04/OFZMQ_test04.fst | 88 + .../zmq_python_toolbox/FullZMQ.ipynb | 428 + .../{REPtests.ipynb => REP.ipynb} | 457 +- .../zmq_python_toolbox/SUB.ipynb | 42290 ++++++++++++++++ .../zmq_python_toolbox/SUBtests.ipynb | 1291 - .../real_fast_interactor.py | 142 +- 73 files changed, 52032 insertions(+), 1896 deletions(-) create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn_v1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.fst create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03 copy.fst create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/Cp_Ct_Cq.NREL5MW.txt create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/DISCON.IN create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/IceDyn_Input.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/IceFloe_IEC_Crushing.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_AeroDyn_blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_InflowWind.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ServoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst create mode 100644 zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb rename zmq_coupling_tests/zmq_python_toolbox/{REPtests.ipynb => REP.ipynb} (70%) create mode 100644 zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index bc648d9ac3..9b882a3618 100644 --- a/modules/openfast-library/src/FAST_Registry.txt +++ b/modules/openfast-library/src/FAST_Registry.txt @@ -237,7 +237,7 @@ typedef ^ FAST_ParameterType ReKi ZmqInDT - typedef ^ FAST_ParameterType CHARACTER(1024) ZmqOutAddress - - - "address for ZMQ PUB-SUB protocol" - typedef ^ FAST_ParameterType IntKi ZmqOutNbr - - - "number of ZMQ PUB-SUB channels" - typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqOutChannels {:} - - "variables to pass ZMQ PUB-SUB protocol" - -typedef ^ FAST_ParameterType ReKi ZmqOutDT - - - "time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation" +typedef ^ FAST_ParameterType DbKi ZmqOutDT - - - "time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation" typedef ^ FAST_ParameterType IntKi ZmqOutChnlsIdx {:} - - "indexes of channels to be broadcasted" - typedef ^ FAST_ParameterType CHARACTER(ChanLen) ZmqOutChannelsNames {:} - - "names for ZMQ PUB-SUB protocol" - typedef ^ FAST_ParameterType ReKi ZmqOutChannelsAry {:} - - "array to pass ZMQ PUB-SUB protocol" - diff --git a/modules/openfast-library/src/FAST_SS_Subs.f90 b/modules/openfast-library/src/FAST_SS_Subs.f90 index 5f3f0d148b..2606f712b6 100644 --- a/modules/openfast-library/src/FAST_SS_Subs.f90 +++ b/modules/openfast-library/src/FAST_SS_Subs.f90 @@ -175,6 +175,7 @@ SUBROUTINE FAST_SteadyState(p_FAST, y_FAST, m_FAST, ED, BD, AD, MeshMapData, Tur INTEGER(IntKi), INTENT(INOUT) :: TurbID CHARACTER(*), PARAMETER :: RoutineName = 'FAST_SteadyState' + LOGICAL :: NeedSendZmq = .false. ! de activating it for now in ss subs ErrStat = ErrID_None ErrMsg = "" @@ -246,7 +247,7 @@ SUBROUTINE FAST_SteadyState(p_FAST, y_FAST, m_FAST, ED, BD, AD, MeshMapData, Tur CALL WrOutputLine( n_global, p_FAST, y_FAST, UnusedAry, UnusedAry, ED%y%WriteOutput, & AD%y, UnusedAry, UnusedAry, UnusedAry, UnusedAry, UnusedAry, UnusedAry, & UnusedAry, UnusedAry, UnusedAry, UnusedAry, y_IceD, BD%y, & - p_FAST%ZmqOutChannelsAry, TurbID, ErrStat2, ErrMsg2 ) + p_FAST%ZmqOutChannelsAry, TurbID, NeedSendZmq, ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (ErrStat >= AbortErrLev) then diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 70d0163ecf..256596fda1 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -189,7 +189,7 @@ subroutine zmq_pub_init(req_address) character(*) :: req_address integer(c_int) :: response_ptr_pub_init - print *, "OpenFAST is attempting to publish at: ", trim(req_address) + print *, "OpenFAST is publish at: ", trim(req_address) response_ptr_pub_init = zmq_init_pub(trim(req_address)) @@ -2878,7 +2878,7 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ZmqOutChnlsIdx, ZmqOutChannel do i = 1,p_FAST%ZmqOutNbr ZmqOutChannelsNames(2 + i) = trim(y_FAST%ChannelNames(ZmqOutChnlsIdx(i))) ! Up to here everything OK! ! add the units to the channel names and remove the initial space if any - ZmqOutChannelsNames(2 + i) = trim(ZmqOutChannelsNames(2 + i))//': '//trim(y_FAST%ChannelUnits(ZmqOutChnlsIdx(i))) + ZmqOutChannelsNames(2 + i) = trim(ZmqOutChannelsNames(2 + i))//'_'//trim(y_FAST%ChannelUnits(ZmqOutChnlsIdx(i))) end do end if @@ -4036,6 +4036,8 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS RETURN end if + print *, "Number of channels to be broadcasted: ", p%ZmqOutNbr + ! Read channel names to be broadcasted CALL AllocAry(p%ZmqOutChannels, p%ZmqOutNbr, "ZmqOutChannels", Errstat2, ErrMsg2) @@ -8426,7 +8428,7 @@ SUBROUTINE FAST_AdvanceToNextTimeStep(t_initial, n_t_global, p_FAST, y_FAST, m_F if ( (p_FAST%ZmqOn) .and. (p_FAST%ZmqInNbr > 0)) then - if (mod(t_global_next, p_FAST%ZmqInDT) == 0) then + if ( (mod(t_global_next, p_FAST%ZmqInDT) == 0) .or. (n_t_global == 0) ) then ZmqInChannelsAry = 0.0_DbKi call zmq_req(p_FAST%ZmqInAddress, p_FAST%ZmqInChannels, p_FAST%ZmqInNbr, ZmqInChannelsAry) call update_array(ZmqInChannelsAry, p_FAST%ZmqInNbr) @@ -8608,23 +8610,33 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, CHARACTER(*), PARAMETER :: RoutineName = 'WriteOutputToFile' INTEGER(IntKi), INTENT(INOUT) :: TurbID !< Added TurbID for ZMQ communication + ! ---- ZMQ Definitions ----- + LOGICAL :: StopZmq !< Flag to send data to ZMQ + ! LOGICAL :: NeedWriteOutput !< Flag to write output to file ! --------------------------------------------------------------------------------------------------------------------------------- ErrStat = ErrID_None ErrMsg = "" - ! Write time-series channel data - !y_FAST%WriteThisStep = NeedWriteOutput(n_t_global, t_global, p_FAST) IF ( y_FAST%WriteThisStep ) THEN + ! Here we assume that ZMQ comm can happen only at time step >= WriteThisStep + if ( t_global >= p_FAST%TMax - p_FAST%DT ) then + StopZmq = .true.! (mod(t_global, p_FAST%ZmqOutDT) < 1E-3) + else + StopZmq = .false. + end if + ! Generate glue-code output file CALL WrOutputLine( t_global, p_FAST, y_FAST, IfW%y%WriteOutput, ExtInfw%y%WriteOutput, ED%y%WriteOutput, & AD%y, SrvD%y%WriteOutput, SeaSt%y%WriteOutput, HD%y%WriteOutput, SD%y%WriteOutput, ExtPtfm%y%WriteOutput, MAPp%y%WriteOutput, & - FEAM%y%WriteOutput, MD%y%WriteOutput, Orca%y%WriteOutput, IceF%y%WriteOutput, IceD%y, BD%y, p_FAST%ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg ) + FEAM%y%WriteOutput, MD%y%WriteOutput, Orca%y%WriteOutput, IceF%y%WriteOutput, IceD%y, BD%y, p_FAST%ZmqOutChannelsAry, TurbID, & + StopZmq, ErrStat, ErrMsg ) ENDIF + ! Write visualization data (and also note that we're ignoring any errors that occur doing so) IF ( p_FAST%WrVTK == VTK_Animate ) THEN IF ( MOD( n_t_global, p_FAST%n_VTKTime ) == 0 ) THEN @@ -8633,11 +8645,13 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, END IF + + END SUBROUTINE WriteOutputToFile !---------------------------------------------------------------------------------------------------------------------------------- !> This routine writes the module output to the primary output file(s). SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, ExtInfwOutput, EDOutput, y_AD, SrvDOutput, SeaStOutput, HDOutput, SDOutput, ExtPtfmOutput,& - MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, ZmqOutChannelsAry, TurbID, ErrStat, ErrMsg) + MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, ZmqOutChannelsAry, TurbID, StopZmq, ErrStat, ErrMsg) IMPLICIT NONE @@ -8675,8 +8689,9 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, ExtInfwOutput, EDOutput, REAL(ReKi) :: OutputAry(SIZE(y_FAST%ChannelNames)-1) INTEGER(IntKi) :: i ! loop variable INTEGER(IntKi) :: TurbID !< Wind turbine ID, used for broadcasting - ! ---- ZMQ Definitions ----- + ! ! ---- ZMQ Definitions ----- REAL(ReKi), ALLOCATABLE :: ZmqOutChannelsAry(:) + LOGICAL :: StopZmq !< Flag to send data to ZMQ ErrStat = ErrID_None ErrMsg = '' @@ -8688,16 +8703,16 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, ExtInfwOutput, EDOutput, ! ! End of simulation time step. Broadcast results to ZMQ (assuming that we broadcast at every time step, to be modified later) ! ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - if ((p_FAST%ZmqOn) .and. (p_FAST%ZmqOutNbr > 0) .and. (mod(t, p_FAST%ZmqOutDT) == 0)) then + if ((p_FAST%ZmqOn) .and. (p_FAST%ZmqOutNbr > 0)) then - CALL AllocAry( ZmqOutChannelsAry, p_FAST%ZmqOutNbr + 2, 'ZmqOutChannelsAry', ErrStat, ErrMsg ) + ! CALL AllocAry( ZmqOutChannelsAry, p_FAST%ZmqOutNbr + 2, 'ZmqOutChannelsAry', ErrStat, ErrMsg ) ZmqOutChannelsAry = 0.0_ReKi !< Reset to zero all values prior to allocation and broadcasting ZmqOutChannelsAry(1) = TurbID ZmqOutChannelsAry(2) = t - if (t == p_FAST%TMax) then + if (StopZmq) then ! If the simulation is finished, then broadcast zeros to signal EOF (as a float) do i = 1, p_FAST%ZmqOutNbr ZmqOutChannelsAry(2 + i) = 0.0_ReKi @@ -8708,8 +8723,11 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, ExtInfwOutput, EDOutput, end do end if + ! print *, 'Broadcasting to ZMQ, time: ', t, ' TurbID: ', TurbID, ' Output: ', ZmqOutChannelsAry + call zmq_pub(ZmqOutChannelsAry, p_FAST%ZmqOutChannelsNames, p_FAST%ZmqOutNbr) + ! deallocate(ZmqOutChannelsAry) ! to be cleaned end if IF (p_FAST%WrTxtOutFile) THEN diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 1b8609b5fc..97a91ecd8e 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -242,7 +242,7 @@ MODULE FAST_Types CHARACTER(1024) :: ZmqOutAddress !< address for ZMQ PUB-SUB protocol [-] INTEGER(IntKi) :: ZmqOutNbr = 0_IntKi !< number of ZMQ PUB-SUB channels [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannels !< variables to pass ZMQ PUB-SUB protocol [-] - REAL(ReKi) :: ZmqOutDT = 0.0_ReKi !< time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation [-] + REAL(DbKi) :: ZmqOutDT = 0.0_R8Ki !< time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation [-] INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: ZmqOutChnlsIdx !< indexes of channels to be broadcasted [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannelsNames !< names for ZMQ PUB-SUB protocol [-] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: ZmqOutChannelsAry !< array to pass ZMQ PUB-SUB protocol [-] diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat index 8bd9386371..b310013450 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -3,19 +3,19 @@ NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from ---------------------- SIMULATION CONTROL -------------------------------------- False Echo - Echo input data to ".ech" (flag) 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) -"DEFAULT" DT - Integration time step (s) +"default" DT - Integration time step (s) ---------------------- DEGREES OF FREEDOM -------------------------------------- -True FlapDOF1 - First flapwise blade mode DOF (flag) -True FlapDOF2 - Second flapwise blade mode DOF (flag) -True EdgeDOF - First edgewise blade mode DOF (flag) -False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] -True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) -True GenDOF - Generator DOF (flag) -True YawDOF - Yaw DOF (flag) -True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) -True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) -True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) -True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +True TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +False YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) False PtfmSgDOF - Platform horizontal surge translation DOF (flag) False PtfmSwDOF - Platform horizontal sway translation DOF (flag) False PtfmHvDOF - Platform vertical heave translation DOF (flag) @@ -25,12 +25,12 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) ---------------------- INITIAL CONDITIONS -------------------------------------- 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) 0 IPDefl - Initial in-plane blade-tip deflection (meters) - 5 BlPitch(1) - Blade 1 initial pitch (degrees) - 5 BlPitch(2) - Blade 2 initial pitch (degrees) - 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 BlPitch(1) - Blade 1 initial pitch (degrees) + 0 BlPitch(2) - Blade 2 initial pitch (degrees) + 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] - 0 Azimuth - Initial azimuth angle for blade 1 (degrees) - 8 RotSpeed - Initial or fixed rotor speed (rpm) + 90 Azimuth - Initial azimuth angle for blade 1 (degrees) + 0 RotSpeed - Initial or fixed rotor speed (rpm) 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) 0 TTDspFA - Initial fore-aft tower-top displacement (meters) 0 TTDspSS - Initial side-to-side tower-top displacement (meters) @@ -77,10 +77,10 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) 240000 NacMass - Nacelle mass (kg) 2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) 0 YawBrMass - Yaw bearing mass (kg) - 0 PtfmMass - Platform mass (kg) - 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) - 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) - 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) + 5.452E+06 PtfmMass - Platform mass (kg) + 7.269E+08 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 7.269E+08 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 1.4539E+09 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) ---------------------- BLADE --------------------------------------------------- 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) "NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) @@ -95,6 +95,11 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- YAW-FRICTION -------------------------------------------- + 0 YawFrctMod - Yaw-friction model {0: none, 1: friction without Fz term at the yaw bearing, 2: friction includes Fz term at yaw bearing, 3: user defined model} (switch) + 300 M_CSmax - Maximum Coulomb friction torque (N-m)[mu_s*D_eff when YawFrctMod=1 and Fz*mu_s*D_eff when YawFrctMod=2] + 40 M_CD - Dynamic friction moment at null yaw rate (N-m) [mu_d*D_eff when YawFrctMod=1 and Fz*mu_d*D_eff when YawFrctMod=2] + 0 sig_v - Viscous friction coefficient (N-m/(rad/s)) ---------------------- DRIVETRAIN ---------------------------------------------- 100 GBoxEff - Gearbox efficiency (%) 97 GBRatio - Gearbox ratio (-) @@ -118,43 +123,46 @@ True TabDelim - Use tab delimiters in text tabular output file? (fla 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist -"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist -"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist -"BldPitch1" - Blade 1 pitch angle +"BldPitch1" - Pitch angles for blade 1 "Azimuth" - Blade 1 azimuth angle "RotSpeed" - Low-speed shaft and high-speed shaft speeds "GenSpeed" - Low-speed shaft and high-speed shaft speeds +"NacYaw" - Nacelle yaw angle and nacelle yaw error estimate +"NcIMUTAxs" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"NcIMUTAys" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"NcIMUTAzs" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system "TTDspFA" - Tower fore-aft and side-to-side displacements and top twist "TTDspSS" - Tower fore-aft and side-to-side displacements and top twist "TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist -"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) -"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) -"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 -"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 -"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 -"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing -"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing -"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"PtfmSurge" - Platform translational surge, sway, and heave displacements +"PtfmSway" - Platform translational surge, sway, and heave displacements +"PtfmHeave" - Platform translational surge, sway, and heave displacements +"PtfmRoll" - Platform rotational roll, pitch and yaw displacements +"PtfmPitch" - Platform rotational roll, pitch and yaw displacements +"PtfmYaw" - Platform rotational roll, pitch and yaw displacements +"PtfmTAxt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"PtfmTAyt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"PtfmTAzt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"RotThrust" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"LSSGagFya" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"LSSGagFza" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing "YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) "YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) "YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) "YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) "YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) "YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) -"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) -"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) -"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) -"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) -"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) -"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) -"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction -"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwHt1MLxt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +"TwHt1MLyt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +"TwHt1MLzt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) END of input file (the word "END" must appear in the first 3 columns of this last OutList line) --------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn_v1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn_v1.dat new file mode 100644 index 0000000000..8bd9386371 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/NRELOffshrBsline5MW_Onshore_ElastoDyn_v1.dat @@ -0,0 +1,160 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"DEFAULT" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +True YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 5 BlPitch(1) - Blade 1 initial pitch (degrees) + 5 BlPitch(2) - Blade 2 initial pitch (degrees) + 5 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 0 Azimuth - Initial azimuth angle for blade 1 (degrees) + 8 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 0 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 0 PtfmMass - Platform mass (kg) + 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"BldPitch1" - Blade 1 pitch angle +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction +"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum index 8b9cb424c0..8d49bf7d93 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 17-Jun-2024 at 11:14:12. +This summary information was generated by AeroDyn on 21-Jun-2024 at 11:02:50. ====== General Options ============================================================================ 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum index c526c4628a..f9f5477c22 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 17-Jun-2024 at 11:14:12. +This summary information was generated by ElastoDyn on 21-Jun-2024 at 11:02:50. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum index d957df94dd..833264451c 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 17-Jun-2024 at 11:14:12. +This summary file was generated by ServoDyn on 21-Jun-2024 at 11:02:50. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 17-Jun-2024 at 11:14:12. +This summary file was closed on 21-Jun-2024 at 11:02:50. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum index 5d2acd013b..9965bdcc96 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum @@ -1,5 +1,5 @@ -Predictions were generated on 17-Jun-2024 at 11:14:12 +Predictions were generated on 21-Jun-2024 at 11:02:50 OpenFAST diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech index 607c7e5d8e..3ea63f569d 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 17-Jun-2024 at 11:14:12. +This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 11:14:28. Data from OpenFAST primary input file "OFZMQ_test01.fst": @@ -19,89 +19,10 @@ Data from OpenFAST primary input file "OFZMQ_test01.fst": 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} - 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn14; 2=AeroDyn; 3=ExtLoads} 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState}} 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} - 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} - - 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) - 1.2250E+00 AirDens - Air density (kg/m^3) - 1.0250E+03 WtrDens - Water density (kg/m^3) - 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) - 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) - 1.0350E+05 Patm - Atmospheric pressure (Pa) - 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) - 5.0000E+01 WtrDpth - Water depth (m) - 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) - - EDFile - Name of file containing ElastoDyn input parameters (-) - "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" - BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) - "NRELOffshrBsline5MW_BeamDyn.dat" - BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) - "NRELOffshrBsline5MW_BeamDyn.dat" - BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) - "NRELOffshrBsline5MW_BeamDyn.dat" - InflowFile - Name of file containing inflow wind input parameters (-) - "NRELOffshrBsline5MW_InflowWind.dat" - AeroFile - Name of file containing aerodynamic input parameters (-) - "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" - ServoFile - Name of file containing control and electrical-drive input parameters (-) - "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" - HydroFile - Name of file containing hydrodynamic input parameters (-) - "unused" - SubFile - Name of file containing sub-structural input parameters (-) - "unused" - MooringFile - Name of file containing mooring system input parameters (-) - "unused" - IceFile - Name of file containing ice input parameters (-) - "unused" - - T SumPrint - Print summary data to .sum (flag) - 5.0000E+00 SttsTime - Amount of time between screen status messages (s) - 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) - DT_Out - Time step for tabular output (s) - "default" - 0.0000E+00 TStart - Time to begin tabular output (s) - 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) - T TabDelim - Use tab delimiters in text tabular output file? (flag) - OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) - "ES10.3E2" - - F Linearize - Linearization analysis (flag) - F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) - 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) - 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) - 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) - 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) - 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) - 2 NLinTimes - Number of times to linearize (-) [>=1] - - 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} - 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) - F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) - F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) - - 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) - 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) - T VTK_fields - Write mesh fields to VTK data files? (flag) - 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) - - T ZmqOn - ZMQ communication (flag) - ZmqInAddress - REQ-REP localhost address - "https://127.0.1:5555" - 0 ZmqInNbr - Number of parameters to be requested - ZmqInChannels - Channels to be requested at communication time - " - ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation - "default" - ZmqOutAddress - PUB-SUB localhost address - "tcp://127.0.0.1:5557" - 6 ZmqOutNbr - Number of channels to be broadcasted - ZmqOutChannels - Channels to be broadcasterd at communication time - "Wind1VelX" "Azimuth" "GenTq" "GenPwr" "OoPDefl1" "IPDefl1" - ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation - "default" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum index 1a6d995f05..675b25244b 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum @@ -1,7 +1,7 @@ FAST Summary File -Predictions were generated on 17-Jun-2024 at 11:14:12 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-8-gb0f04e00-dirty +Predictions were generated on 21-Jun-2024 at 11:02:50 using OpenFAST, compiled as a 64-bit application using double precision at commit v3.5.2-10-g45b95ade-dirty compiled with NWTC Subroutine Library ElastoDyn diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum new file mode 100644 index 0000000000..9042e4d988 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum @@ -0,0 +1,61 @@ + +This summary information was generated by AeroDyn on 21-Jun-2024 at 15:09:55. + +====== General Options ============================================================================ + 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +====== Blade-Element/Momentum Theory Options ====================================================== + 1 Skew_Mod - Skewed-wake correction model: active + T TipLoss - Use the Prandtl tip-loss model? Yes + T HubLoss - Use the Prandtl hub-loss model? Yes + T TanInd - Include tangential induction in BEMT calculations? Yes + F AIDrag - Include the drag term in the axial-induction calculation? No + F TIDrag - Include the drag term in the tangential-induction calculation? No + 5.0000E-10 IndToler - Convergence tolerance for BEM induction factors (radians) + 0 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model: quasi-steady +======================== Unsteady Airfoil Aerodynamics Options ===================================== + 3 UA_Mod - Unsteady Aero Model: Minnema/Pierce variant (changes in Cc and Cm) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 3 NBlOuts - Number of blade nodes selected for output + 19 NumBlNds - Number of blade nodes in the analysis + Blade nodes selected for output: Output node Analysis node + ----------- ------------- + 1 1 + 2 9 + 3 19 + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum new file mode 100644 index 0000000000..fee12880f1 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum @@ -0,0 +1,213 @@ + +This summary information was generated by ElastoDyn on 21-Jun-2024 at 15:09:55. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 15 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Disabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.01000000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 5452000.000 + Mass Incl. Platform (kg) 6148850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 BldPitch1 (deg) + 2 Azimuth (deg) + 3 RotSpeed (rpm) + 4 GenSpeed (rpm) + 5 NacYaw (deg) + 6 NcIMUTAxs (m/s^2) + 7 NcIMUTAys (m/s^2) + 8 NcIMUTAzs (m/s^2) + 9 TTDspFA (m) + 10 TTDspSS (m) + 11 TTDspTwst (deg) + 12 PtfmSurge (m) + 13 PtfmSway (m) + 14 PtfmHeave (m) + 15 PtfmRoll (deg) + 16 PtfmPitch (deg) + 17 PtfmYaw (deg) + 18 PtfmTAxt (m/s^2) + 19 PtfmTAyt (m/s^2) + 20 PtfmTAzt (m/s^2) + 21 RotThrust (kN) + 22 LSSGagFya (kN) + 23 LSSGagFza (kN) + 24 RotTorq (kN-m) + 25 LSSGagMya (kN-m) + 26 LSSGagMza (kN-m) + 27 YawBrFxp (kN) + 28 YawBrFyp (kN) + 29 YawBrFzp (kN) + 30 YawBrMxp (kN-m) + 31 YawBrMyp (kN-m) + 32 YawBrMzp (kN-m) + 33 TwrBsFxt (kN) + 34 TwrBsFyt (kN) + 35 TwrBsFzt (kN) + 36 TwrBsMxt (kN-m) + 37 TwrBsMyt (kN-m) + 38 TwrBsMzt (kN-m) + 39 TwHt1MLxt INVALID + 40 TwHt1MLyt INVALID + 41 TwHt1MLzt INVALID + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum new file mode 100644 index 0000000000..d034a45235 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 21-Jun-2024 at 15:09:55. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 0 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 21-Jun-2024 at 15:09:55. + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum new file mode 100644 index 0000000000..fb71b37adb --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum @@ -0,0 +1,16 @@ + +Predictions were generated on 21-Jun-2024 at 15:09:55 + OpenFAST + + + +AirfoilNumber TableNumber alpha0 alpha1 alpha2 eta_e C_nalpha C_lalpha T_f0 T_V0 T_p T_VL b1 b2 b5 A1 A2 A5 S1 S2 S3 S4 Cn1 Cn2 St_sh Cd0 Cm0 k0 k1 k2 k3 k1_hat x_cp_bar UACutout UACutout_delta UACutout_blend filtCutOff alphaLowerWrap alphaLower alphaUpper alphaUpperWrap c_alphaLowerWrap c_alphaLower c_alphaUpper c_alphaUpperWrap c_RateWrap c_RateLower c_Rate c_RateUpper +(-) (-) (deg) (deg) (deg) (-) (-/rad) (-/rad) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (deg) (deg) (deg) (-) (deg) (deg) (deg) (deg) (-) (-) (-) (-) (-/rad) (-/rad) (-/rad) (-/rad) + 1 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 2 1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 3 1 -3.20000 9.00000 -9.00000 1.00000 7.48880 9.05273 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.35190 -0.32260 0.19000 0.03000 -0.05000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -0.25000 2.25000 55.00000 -5.61045 0.10507 0.47793 8.35959 -3.07855 7.31788 8.54531 8.56087 + 4 1 -1.20000 11.50000 -11.50000 1.00000 7.18380 8.82355 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.67170 -0.30750 0.19000 0.01200 -0.07000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -40.00000 -2.75000 5.75000 50.00000 -5.56999 -0.20172 0.96897 6.72117 -2.60827 8.25716 7.89125 7.44806 + 5 1 -2.20000 9.00000 -9.00000 1.00000 7.33260 8.47978 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.44900 -0.61380 0.19000 0.00800 -0.09000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -6.39000 6.25000 45.00000 -5.67249 -0.57626 1.09716 5.87251 -2.44993 7.56262 7.58542 7.06084 + 6 1 -3.20000 8.50000 -8.50000 1.00000 6.44620 7.97647 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.43360 -0.68730 0.19000 0.00600 -0.12000 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -45.00000 -7.96000 3.75000 32.00000 -5.53755 -0.61874 0.91909 4.38619 -2.00914 7.60871 7.52444 7.03186 + 7 1 -4.20000 8.00000 -8.00000 1.00000 6.20470 8.96402 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.41440 -0.53240 0.19000 0.00600 -0.12100 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -35.00000 -9.05000 2.75000 30.00000 -4.67755 -0.67498 0.85701 4.10998 -1.70674 8.83741 7.43866 6.83970 + 8 1 -4.43200 9.00000 -9.00000 1.00000 6.00310 7.67763 3.00000 6.00000 1.70000 11.00000 0.14000 0.53000 5.00000 0.30000 0.70000 1.00000 0.00000 0.00000 0.00000 0.00000 1.40730 -0.79450 0.19000 0.00650 -0.08800 0.00000 0.00000 0.00000 0.00000 0.00000 0.20000 45.00000 5.00000 40.00000 0.50000 -50.00000 -5.50000 4.50000 28.00000 -6.14917 -0.20664 0.95141 3.60393 -1.98160 7.65128 6.63516 6.46715 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech new file mode 100644 index 0000000000..8422c245df --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech @@ -0,0 +1,110 @@ + +This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 15:09:55. + +Data from OpenFAST primary input file "OFZMQ_test01_2.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification Test #22: NREL 5.0 MW Baseline Wind Turbine with ITI Barge Configuration, for use in offshore analysis" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 1.0000E+02 TMax - Total run time (s) + 1.0000E-02 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn14; 2=AeroDyn; 3=ExtLoads} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState}} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8100E+00 Gravity - Gravitational acceleration (m/s^2) + 0.0000E+00 AirDens - Air density (kg/m^3) + 0.0000E+00 WtrDens - Water density (kg/m^3) + 0.0000E+00 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0.0000E+00 SpdSound - Speed of sound in working fluid (m/s) + 0.0000E+00 Patm - Atmospheric pressure (Pa) + 0.0000E+00 Pvap - Vapour pressure of working fluid (Pa) + 0.0000E+00 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + SeaStFile - Name of file containing sea state input parameters (-) + "unused" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + F SumPrint - Print summary data to .sum (flag) + 1.0000E+00 SttsTime - Amount of time between screen status messages (s) + 1.0000E+03 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 4 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES15.7E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 2 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + F VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "https://127.0.1:5555" + 0 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + " + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 4 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + "Wind1VelX" "Azimuth" "GenTq" "GenPwr" + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.fst new file mode 100644 index 0000000000..577cd19c94 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.fst @@ -0,0 +1,86 @@ +------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- +FAST Certification Test #22: NREL 5.0 MW Baseline Wind Turbine with ITI Barge Configuration, for use in offshore analysis +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} + 100 TMax - Total run time (s) + 0.01 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} + 0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} + 99999 DT_UJac - Time between calls to get Jacobians (s) + 1E+06 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + 9.81 Gravity - Gravitational acceleration (m/s^2) + 0 AirDens - Air density (kg/m^3) + 0 WtrDens - Water density (kg/m^3) + 0 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0 SpdSound - Speed of sound in working fluid (m/s) + 0 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] + 0 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] + 0 WtrDpth - Water depth (m) + 0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" SeaStFile - Name of file containing sea state input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +False SumPrint - Print summary data to ".sum" (flag) + 1 SttsTime - Amount of time between screen status messages (s) + 1000 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +"default" DT_Out - Time step for tabular output (s) (or "default") + 0 TStart - Time to begin tabular output (s) + 4 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both 1 and 2, 4: uncompressed binary [.outb, 5: both 1 and 4} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES15.7E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) + 0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) + 0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) + 0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] + 30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] + 1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] + 1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ + 0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} + 2 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +false VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] + 15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"https://127.0.1:5555" ZmqInAddress - REQ-REP localhost address +0 ZmqInNbr - Number of parameters to be requested +none ZmqInChannels - Channels to be requested at communication time +default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +4 ZmqOutNbr - Number of channels to be broadcasted +"Wind1VelX" +"Azimuth" +"GenTq" +"GenPwr" ZmqOutChannels - Channels to be broadcasterd at communication time +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) \ No newline at end of file diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat index bbf1583383..b310013450 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -3,19 +3,19 @@ NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from ---------------------- SIMULATION CONTROL -------------------------------------- False Echo - Echo input data to ".ech" (flag) 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) -"DEFAULT" DT - Integration time step (s) +"default" DT - Integration time step (s) ---------------------- DEGREES OF FREEDOM -------------------------------------- -True FlapDOF1 - First flapwise blade mode DOF (flag) -True FlapDOF2 - Second flapwise blade mode DOF (flag) -True EdgeDOF - First edgewise blade mode DOF (flag) -False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] -True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) -True GenDOF - Generator DOF (flag) -True YawDOF - Yaw DOF (flag) -True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) -True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) -True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) -True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +True TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +False YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) False PtfmSgDOF - Platform horizontal surge translation DOF (flag) False PtfmSwDOF - Platform horizontal sway translation DOF (flag) False PtfmHvDOF - Platform vertical heave translation DOF (flag) @@ -29,8 +29,8 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) 0 BlPitch(2) - Blade 2 initial pitch (degrees) 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] - 0 Azimuth - Initial azimuth angle for blade 1 (degrees) - 8 RotSpeed - Initial or fixed rotor speed (rpm) + 90 Azimuth - Initial azimuth angle for blade 1 (degrees) + 0 RotSpeed - Initial or fixed rotor speed (rpm) 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) 0 TTDspFA - Initial fore-aft tower-top displacement (meters) 0 TTDspSS - Initial side-to-side tower-top displacement (meters) @@ -77,10 +77,10 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) 240000 NacMass - Nacelle mass (kg) 2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) 0 YawBrMass - Yaw bearing mass (kg) - 0 PtfmMass - Platform mass (kg) - 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) - 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) - 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) + 5.452E+06 PtfmMass - Platform mass (kg) + 7.269E+08 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 7.269E+08 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 1.4539E+09 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) ---------------------- BLADE --------------------------------------------------- 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) "NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) @@ -95,6 +95,11 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- YAW-FRICTION -------------------------------------------- + 0 YawFrctMod - Yaw-friction model {0: none, 1: friction without Fz term at the yaw bearing, 2: friction includes Fz term at yaw bearing, 3: user defined model} (switch) + 300 M_CSmax - Maximum Coulomb friction torque (N-m)[mu_s*D_eff when YawFrctMod=1 and Fz*mu_s*D_eff when YawFrctMod=2] + 40 M_CD - Dynamic friction moment at null yaw rate (N-m) [mu_d*D_eff when YawFrctMod=1 and Fz*mu_d*D_eff when YawFrctMod=2] + 0 sig_v - Viscous friction coefficient (N-m/(rad/s)) ---------------------- DRIVETRAIN ---------------------------------------------- 100 GBoxEff - Gearbox efficiency (%) 97 GBRatio - Gearbox ratio (-) @@ -118,43 +123,46 @@ True TabDelim - Use tab delimiters in text tabular output file? (fla 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist -"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist -"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist -"BldPitch1" - Blade 1 pitch angle +"BldPitch1" - Pitch angles for blade 1 "Azimuth" - Blade 1 azimuth angle "RotSpeed" - Low-speed shaft and high-speed shaft speeds "GenSpeed" - Low-speed shaft and high-speed shaft speeds +"NacYaw" - Nacelle yaw angle and nacelle yaw error estimate +"NcIMUTAxs" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"NcIMUTAys" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"NcIMUTAzs" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system "TTDspFA" - Tower fore-aft and side-to-side displacements and top twist "TTDspSS" - Tower fore-aft and side-to-side displacements and top twist "TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist -"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) -"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) -"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 -"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 -"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 -"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyc1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyc2" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMyc3" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 -"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing -"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing -"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"PtfmSurge" - Platform translational surge, sway, and heave displacements +"PtfmSway" - Platform translational surge, sway, and heave displacements +"PtfmHeave" - Platform translational surge, sway, and heave displacements +"PtfmRoll" - Platform rotational roll, pitch and yaw displacements +"PtfmPitch" - Platform rotational roll, pitch and yaw displacements +"PtfmYaw" - Platform rotational roll, pitch and yaw displacements +"PtfmTAxt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"PtfmTAyt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"PtfmTAzt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"RotThrust" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"LSSGagFya" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"LSSGagFza" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing "YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) "YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) "YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) "YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) "YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) "YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) -"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) -"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) -"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) -"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) -"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) -"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) -"NcIMURAys" - Nacelle IMU rotational acceleration in the nodding direction -"NcIMUTAxs" - Nacelle IMU translational acceleration in the streamwise direction +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwHt1MLxt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +"TwHt1MLyt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +"TwHt1MLzt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) END of input file (the word "END" must appear in the first 3 columns of this last OutList line) --------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03 copy.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03 copy.fst new file mode 100644 index 0000000000..a2d8d4cc5d --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03 copy.fst @@ -0,0 +1,83 @@ +------- OpenFAST example INPUT FILE ------------------------------------------- +FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} +100.0 TMax - Total run time (s) +0.005 DT - Recommended module time step (s) +2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} +0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} +99999 DT_UJac - Time between calls to get Jacobians (s) +1000000.0 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ +1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} +1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} +2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} +1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} +0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} +0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} +0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} +0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} +0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- +9.80665 Gravity - Gravitational acceleration (m/s^2) +1.225 AirDens - Air density (kg/m^3) +1025 WtrDens - Water density (kg/m^3) +1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) +335 SpdSound - Speed of sound in working fluid (m/s) +103500 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] +1700 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] +50 WtrDpth - Water depth (m) +0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +5 SttsTime - Amount of time between screen status messages (s) +99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +default DT_Out - Time step for tabular output (s) (or "default") +0 TStart - Time to begin tabular output (s) +0 OutFileFmt - Format for tabular (time-marching) output file (switch) {0: uncompressed binary [.outb], 1: text file [.out], 2: binary file [.outb], 3: both 1 and 2} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) +3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) +0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) +0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) +0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) +0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) +2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] +30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] +1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] +1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ +0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} +1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +True VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] +15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"tcp://127.0.0.1:5555" ZmqInAddress - REQ-REP localhost address +3 ZmqInNbr - Number of parameters to be requested +"VelH" +"VelV" +"BldPitchCom1" ZmqInChannels - Channels to be requested at communication time +0.5 ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +0 ZmqOutNbr - Number of channels to be broadcasted +none ZmqOutChannels - Channels to be broadcasterd at communication time +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum index d721847fb4..ce75a11ad4 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum @@ -1,14 +1,16 @@ -This summary information was generated by AeroDyn on 20-Jun-2024 at 15:17:42. +This summary information was generated by AeroDyn on 21-Jun-2024 at 16:47:09. ====== General Options ============================================================================ 0 WakeMod - Type of wake/induction model: steady - 1 AFAeroMod - Type of blade airfoil aerodynamics model: steady 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none T TwrAero - Calculate tower aerodynamic loads? Yes F CavitCheck - Perform cavitation check? No F Buoyancy - Include buoyancy effects? No +======================== Unsteady Airfoil Aerodynamics Options ===================================== + 0 UA_Mod - Unsteady Aero Model: none (quasi-steady airfoil aerodynamics) + T FLookup - Use a lookup for f'? Yes ====== Outputs ==================================================================================== 3 NBlOuts - Number of blade nodes selected for output 19 NumBlNds - Number of blade nodes in the analysis diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum index 08c0a395f3..241aae9138 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum @@ -1,11 +1,11 @@ -This summary information was generated by ElastoDyn on 20-Jun-2024 at 15:17:42. +This summary information was generated by ElastoDyn on 21-Jun-2024 at 16:47:09. Turbine features: Upwind, 3-bladed rotor with rigid hub. - The model has 16 of 24 DOFs active (enabled) at start-up. + The model has 15 of 24 DOFs active (enabled) at start-up. Disabled Platform horizontal surge translation DOF Disabled Platform horizontal sway translation DOF Disabled Platform vertical heave translation DOF @@ -16,7 +16,7 @@ Turbine features: Enabled 1st tower side-to-side bending mode DOF Enabled 2nd tower fore-aft bending mode DOF Enabled 2nd tower side-to-side bending mode DOF - Enabled Nacelle yaw DOF + Disabled Nacelle yaw DOF Disabled Rotor-furl DOF Enabled Variable speed generator DOF Enabled Drivetrain rotational-flexibility DOF @@ -34,7 +34,7 @@ Turbine features: Time steps: - Structural (s) 0.00500000 + Structural (s) 0.01000000 Some calculated parameters: @@ -60,8 +60,8 @@ Additional mass properties: Tower-top Mass (kg) 349389.842 Tower Mass (kg) 347460.232 - Platform Mass (kg) 0.000 - Mass Incl. Platform (kg) 696850.074 + Platform Mass (kg) 5452000.000 + Mass Incl. Platform (kg) 6148850.074 Interpolated tower properties: @@ -165,44 +165,47 @@ Requested Outputs: Col Parameter Units --- --------------- --------------- 0 Time (s) - 1 OoPDefl1 (m) - 2 IPDefl1 (m) - 3 TwstDefl1 (deg) - 4 BldPitch1 (deg) - 5 Azimuth (deg) - 6 RotSpeed (rpm) - 7 GenSpeed (rpm) - 8 TTDspFA (m) - 9 TTDspSS (m) - 10 TTDspTwst (deg) - 11 Spn2MLxb1 (kN-m) - 12 Spn2MLyb1 (kN-m) - 13 RootFxb1 (kN) - 14 RootFyb1 (kN) - 15 RootFzb1 (kN) - 16 RootMxb1 (kN-m) - 17 RootMyb1 (kN-m) - 18 RootMyc1 (kN-m) - 19 RootMyc2 (kN-m) - 20 RootMyc3 (kN-m) - 21 RootMzb1 (kN-m) - 22 RotTorq (kN-m) - 23 LSSGagMya (kN-m) - 24 LSSGagMza (kN-m) - 25 YawBrFxp (kN) - 26 YawBrFyp (kN) - 27 YawBrFzp (kN) - 28 YawBrMxp (kN-m) - 29 YawBrMyp (kN-m) - 30 YawBrMzp (kN-m) - 31 TwrBsFxt (kN) - 32 TwrBsFyt (kN) - 33 TwrBsFzt (kN) - 34 TwrBsMxt (kN-m) - 35 TwrBsMyt (kN-m) - 36 TwrBsMzt (kN-m) - 37 NcIMURAys (deg/s^2) - 38 NcIMUTAxs (m/s^2) + 1 BldPitch1 (deg) + 2 Azimuth (deg) + 3 RotSpeed (rpm) + 4 GenSpeed (rpm) + 5 NacYaw (deg) + 6 NcIMUTAxs (m/s^2) + 7 NcIMUTAys (m/s^2) + 8 NcIMUTAzs (m/s^2) + 9 TTDspFA (m) + 10 TTDspSS (m) + 11 TTDspTwst (deg) + 12 PtfmSurge (m) + 13 PtfmSway (m) + 14 PtfmHeave (m) + 15 PtfmRoll (deg) + 16 PtfmPitch (deg) + 17 PtfmYaw (deg) + 18 PtfmTAxt (m/s^2) + 19 PtfmTAyt (m/s^2) + 20 PtfmTAzt (m/s^2) + 21 RotThrust (kN) + 22 LSSGagFya (kN) + 23 LSSGagFza (kN) + 24 RotTorq (kN-m) + 25 LSSGagMya (kN-m) + 26 LSSGagMza (kN-m) + 27 YawBrFxp (kN) + 28 YawBrFyp (kN) + 29 YawBrFzp (kN) + 30 YawBrMxp (kN-m) + 31 YawBrMyp (kN-m) + 32 YawBrMzp (kN-m) + 33 TwrBsFxt (kN) + 34 TwrBsFyt (kN) + 35 TwrBsFzt (kN) + 36 TwrBsMxt (kN-m) + 37 TwrBsMyt (kN-m) + 38 TwrBsMzt (kN-m) + 39 TwHt1MLxt INVALID + 40 TwHt1MLyt INVALID + 41 TwHt1MLzt INVALID Requested Output Channels at each blade station: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum index 68db80b5be..354dfc70aa 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 20-Jun-2024 at 15:17:42. +This summary file was generated by ServoDyn on 21-Jun-2024 at 16:47:09. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 20-Jun-2024 at 15:17:42. +This summary file was closed on 21-Jun-2024 at 16:47:09. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech index 1bb37508e8..1e4c672f50 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech @@ -1,17 +1,17 @@ -This file of echoed input was generated by OpenFAST on 20-Jun-2024 at 15:17:42. +This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 16:47:09. Data from OpenFAST primary input file "OFZMQ_test03.fst": FTitle - File Header: File Description (line 2) - "FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + "FAST Certification Test #22: NREL 5.0 MW Baseline Wind Turbine with ITI Barge Configuration, for use in offshore analysis" T Echo - Echo input data to .ech (flag) AbortLevel - Error level when simulation should abort (string) "FATAL" 1.0000E+02 TMax - Total run time (s) - 5.0000E-03 DT - Recommended module time step (s) + 1.0000E-02 DT - Recommended module time step (s) 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) @@ -19,22 +19,23 @@ Data from OpenFAST primary input file "OFZMQ_test03.fst": 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} - 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn14; 2=AeroDyn; 3=ExtLoads} 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState}} 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} - 9.8066E+00 Gravity - Gravitational acceleration (m/s^2) - 1.2250E+00 AirDens - Air density (kg/m^3) - 1.0250E+03 WtrDens - Water density (kg/m^3) - 1.4640E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) - 3.3500E+02 SpdSound - Speed of sound in working fluid (m/s) - 1.0350E+05 Patm - Atmospheric pressure (Pa) - 1.7000E+03 Pvap - Vapour pressure of working fluid (Pa) - 5.0000E+01 WtrDpth - Water depth (m) + 9.8100E+00 Gravity - Gravitational acceleration (m/s^2) + 0.0000E+00 AirDens - Air density (kg/m^3) + 0.0000E+00 WtrDens - Water density (kg/m^3) + 0.0000E+00 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0.0000E+00 SpdSound - Speed of sound in working fluid (m/s) + 0.0000E+00 Patm - Atmospheric pressure (Pa) + 0.0000E+00 Pvap - Vapour pressure of working fluid (Pa) + 0.0000E+00 WtrDpth - Water depth (m) 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) EDFile - Name of file containing ElastoDyn input parameters (-) @@ -51,6 +52,8 @@ Data from OpenFAST primary input file "OFZMQ_test03.fst": "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" ServoFile - Name of file containing control and electrical-drive input parameters (-) "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + SeaStFile - Name of file containing sea state input parameters (-) + "unused" HydroFile - Name of file containing hydrodynamic input parameters (-) "unused" SubFile - Name of file containing sub-structural input parameters (-) @@ -60,16 +63,16 @@ Data from OpenFAST primary input file "OFZMQ_test03.fst": IceFile - Name of file containing ice input parameters (-) "unused" - T SumPrint - Print summary data to .sum (flag) - 5.0000E+00 SttsTime - Amount of time between screen status messages (s) - 9.9999E+04 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + F SumPrint - Print summary data to .sum (flag) + 1.0000E+00 SttsTime - Amount of time between screen status messages (s) + 1.0000E+03 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) DT_Out - Time step for tabular output (s) "default" 0.0000E+00 TStart - Time to begin tabular output (s) - 0 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + 4 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) T TabDelim - Use tab delimiters in text tabular output file? (flag) OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) - "ES10.3E2" + "ES15.7E2" F Linearize - Linearization analysis (flag) F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) @@ -86,8 +89,8 @@ Data from OpenFAST primary input file "OFZMQ_test03.fst": F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) - 1 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) - T VTK_fields - Write mesh fields to VTK data files? (flag) + 2 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + F VTK_fields - Write mesh fields to VTK data files? (flag) 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) T ZmqOn - ZMQ communication (flag) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst index a2d8d4cc5d..348cb6ab43 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.fst @@ -1,34 +1,35 @@ -------- OpenFAST example INPUT FILE ------------------------------------------- -FAST Certification - Test #18: NREL 5.0 MW Baseline Wind Turbine (Onshore) +------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- +FAST Certification Test #22: NREL 5.0 MW Baseline Wind Turbine with ITI Barge Configuration, for use in offshore analysis ---------------------- SIMULATION CONTROL -------------------------------------- -True Echo - Echo input data to .ech (flag) -"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} -100.0 TMax - Total run time (s) -0.005 DT - Recommended module time step (s) -2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} -0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} -99999 DT_UJac - Time between calls to get Jacobians (s) -1000000.0 UJacSclFact - Scaling factor used in Jacobians (-) +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} + 100 TMax - Total run time (s) + 0.01 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} + 0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} + 99999 DT_UJac - Time between calls to get Jacobians (s) + 1E+06 UJacSclFact - Scaling factor used in Jacobians (-) ---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ -1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} -1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} -2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} -1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} -0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} -0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} -0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} -0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} -0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} ---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- -9.80665 Gravity - Gravitational acceleration (m/s^2) -1.225 AirDens - Air density (kg/m^3) -1025 WtrDens - Water density (kg/m^3) -1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) -335 SpdSound - Speed of sound in working fluid (m/s) -103500 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] -1700 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] -50 WtrDpth - Water depth (m) -0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] + 9.81 Gravity - Gravitational acceleration (m/s^2) + 0 AirDens - Air density (kg/m^3) + 0 WtrDens - Water density (kg/m^3) + 0 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0 SpdSound - Speed of sound in working fluid (m/s) + 0 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] + 0 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] + 0 WtrDpth - Water depth (m) + 0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] ---------------------- INPUT FILES --------------------------------------------- "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) "NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) @@ -37,38 +38,39 @@ True Echo - Echo input data to .ech (flag) "NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) -"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) -"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) -"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) -"unused" IceFile - Name of file containing ice input parameters (quoted string) +"unused" SeaStFile - Name of file containing sea state input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) ---------------------- OUTPUT -------------------------------------------------- -True SumPrint - Print summary data to ".sum" (flag) -5 SttsTime - Amount of time between screen status messages (s) -99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) -default DT_Out - Time step for tabular output (s) (or "default") -0 TStart - Time to begin tabular output (s) -0 OutFileFmt - Format for tabular (time-marching) output file (switch) {0: uncompressed binary [.outb], 1: text file [.out], 2: binary file [.outb], 3: both 1 and 2} -True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} -"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +False SumPrint - Print summary data to ".sum" (flag) + 1 SttsTime - Amount of time between screen status messages (s) + 1000 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +"default" DT_Out - Time step for tabular output (s) (or "default") + 0 TStart - Time to begin tabular output (s) + 4 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both 1 and 2, 4: uncompressed binary [.outb, 5: both 1 and 4} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES15.7E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) ---------------------- LINEARIZATION ------------------------------------------- -False Linearize - Linearization analysis (flag) -False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) -3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) -0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) -0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) -0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) -0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) -2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] -30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] -1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] -1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] -False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] -False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) + 0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) + 0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) + 0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] + 30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] + 1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] + 1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] ---------------------- VISUALIZATION ------------------------------------------ -0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} -1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] -True VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] -15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] + 0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} + 2 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +false VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] + 15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] ---------------------- ZMQ Communication --------------------------------------- True ZmqOn - ZMQ communication (flag) "tcp://127.0.0.1:5555" ZmqInAddress - REQ-REP localhost address @@ -80,4 +82,4 @@ True ZmqOn - ZMQ communication (flag) "tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address 0 ZmqOutNbr - Number of channels to be broadcasted none ZmqOutChannels - Channels to be broadcasterd at communication time -default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) \ No newline at end of file diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder1.dat new file mode 100644 index 0000000000..4ff6d1311f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder1.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.50 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.50 Minimum CD value +-180.00 0.000 0.5000 0.000 + 0.00 0.000 0.5000 0.000 + 180.00 0.000 0.5000 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder2.dat new file mode 100644 index 0000000000..29f643ca65 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/Cylinder2.dat @@ -0,0 +1,19 @@ +Round root section with a Cd of 0.35 +Made by Jason Jonkman + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 0.0 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 Zero Cn angle of attack (deg) + 0.0 Cn slope for zero lift (dimensionless) + 0.0 Cn extrapolated to value at positive stall angle of attack + 0.0 Cn at stall value for negative angle of attack + 0.0 Angle of attack for minimum CD (deg) + 0.35 Minimum CD value +-180.00 0.000 0.3500 0.000 + 0.00 0.000 0.3500 0.000 + 180.00 0.000 0.3500 0.000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU21_A17.dat new file mode 100644 index 0000000000..52cc6d3ff9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU21_A17.dat @@ -0,0 +1,158 @@ +DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -5.0609 Zero Cn angle of attack (deg) + 6.2047 Cn slope for zero lift (dimensionless) + 1.4144 Cn extrapolated to value at positive stall angle of attack + -0.5324 Cn at stall value for negative angle of attack + -1.50 Angle of attack for minimum CD (deg) + 0.0057 Minimum CD value +-180.00 0.000 0.0185 0.0000 +-175.00 0.394 0.0332 0.1978 +-170.00 0.788 0.0945 0.3963 +-160.00 0.670 0.2809 0.2738 +-155.00 0.749 0.3932 0.3118 +-150.00 0.797 0.5112 0.3413 +-145.00 0.818 0.6309 0.3636 +-140.00 0.813 0.7485 0.3799 +-135.00 0.786 0.8612 0.3911 +-130.00 0.739 0.9665 0.3980 +-125.00 0.675 1.0625 0.4012 +-120.00 0.596 1.1476 0.4014 +-115.00 0.505 1.2206 0.3990 +-110.00 0.403 1.2805 0.3943 +-105.00 0.294 1.3265 0.3878 +-100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU25_A17.dat new file mode 100644 index 0000000000..3c24e77f5f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU25_A17.dat @@ -0,0 +1,157 @@ +DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 8.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.2422 Zero Cn angle of attack (deg) + 6.4462 Cn slope for zero lift (dimensionless) + 1.4336 Cn extrapolated to value at positive stall angle of attack + -0.6873 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0065 Minimum CD value +-180.00 0.000 0.0202 0.0000 +-175.00 0.368 0.0324 0.1845 +-170.00 0.735 0.0943 0.3701 +-160.00 0.695 0.2848 0.2679 +-155.00 0.777 0.4001 0.3046 +-150.00 0.828 0.5215 0.3329 +-145.00 0.850 0.6447 0.3540 +-140.00 0.846 0.7660 0.3693 +-135.00 0.818 0.8823 0.3794 +-130.00 0.771 0.9911 0.3854 +-125.00 0.705 1.0905 0.3878 +-120.00 0.624 1.1787 0.3872 +-115.00 0.530 1.2545 0.3841 +-110.00 0.426 1.3168 0.3788 +-105.00 0.314 1.3650 0.3716 +-100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU30_A17.dat new file mode 100644 index 0000000000..23ecb3e9a3 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU30_A17.dat @@ -0,0 +1,159 @@ +DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -2.3220 Zero Cn angle of attack (deg) + 7.3326 Cn slope for zero lift (dimensionless) + 1.4490 Cn extrapolated to value at positive stall angle of attack + -0.6138 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0087 Minimum CD value +-180.00 0.000 0.0267 0.0000 +-175.00 0.274 0.0370 0.1379 +-170.00 0.547 0.0968 0.2778 +-160.00 0.685 0.2876 0.2740 +-155.00 0.766 0.4025 0.3118 +-150.00 0.816 0.5232 0.3411 +-145.00 0.836 0.6454 0.3631 +-140.00 0.832 0.7656 0.3791 +-135.00 0.804 0.8807 0.3899 +-130.00 0.756 0.9882 0.3965 +-125.00 0.690 1.0861 0.3994 +-120.00 0.609 1.1730 0.3992 +-115.00 0.515 1.2474 0.3964 +-110.00 0.411 1.3084 0.3915 +-105.00 0.300 1.3552 0.3846 +-100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU35_A17.dat new file mode 100644 index 0000000000..9e962a1e63 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU35_A17.dat @@ -0,0 +1,151 @@ +DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 11.50 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.8330 Zero Cn angle of attack (deg) + 7.1838 Cn slope for zero lift (dimensionless) + 1.6717 Cn extrapolated to value at positive stall angle of attack + -0.3075 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0094 Minimum CD value +-180.00 0.000 0.0407 0.0000 +-175.00 0.223 0.0507 0.0937 +-170.00 0.405 0.1055 0.1702 +-160.00 0.658 0.2982 0.2819 +-155.00 0.733 0.4121 0.3213 +-150.00 0.778 0.5308 0.3520 +-145.00 0.795 0.6503 0.3754 +-140.00 0.787 0.7672 0.3926 +-135.00 0.757 0.8785 0.4046 +-130.00 0.708 0.9819 0.4121 +-125.00 0.641 1.0756 0.4160 +-120.00 0.560 1.1580 0.4167 +-115.00 0.467 1.2280 0.4146 +-110.00 0.365 1.2847 0.4104 +-105.00 0.255 1.3274 0.4041 +-100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU40_A17.dat new file mode 100644 index 0000000000..08a2d28261 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/DU40_A17.dat @@ -0,0 +1,152 @@ +DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -1.3430 Zero Cn angle of attack (deg) + 7.4888 Cn slope for zero lift (dimensionless) + 1.3519 Cn extrapolated to value at positive stall angle of attack + -0.3226 Cn at stall value for negative angle of attack + 0.00 Angle of attack for minimum CD (deg) + 0.0113 Minimum CD value +-180.00 0.000 0.0602 0.0000 +-175.00 0.218 0.0699 0.0934 +-170.00 0.397 0.1107 0.1697 +-160.00 0.642 0.3045 0.2813 +-155.00 0.715 0.4179 0.3208 +-150.00 0.757 0.5355 0.3516 +-145.00 0.772 0.6535 0.3752 +-140.00 0.762 0.7685 0.3926 +-135.00 0.731 0.8777 0.4048 +-130.00 0.680 0.9788 0.4126 +-125.00 0.613 1.0700 0.4166 +-120.00 0.532 1.1499 0.4176 +-115.00 0.439 1.2174 0.4158 +-110.00 0.337 1.2716 0.4117 +-105.00 0.228 1.3118 0.4057 +-100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/NACA64_A17.dat new file mode 100644 index 0000000000..3db1887a38 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/AeroData/NACA64_A17.dat @@ -0,0 +1,143 @@ +NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. + 1 Number of airfoil tables in this file + 0.0 Table ID parameter + 9.00 Stall angle (deg) + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + 0.0 No longer used, enter zero + -4.4320 Zero Cn angle of attack (deg) + 6.0031 Cn slope for zero lift (dimensionless) + 1.4073 Cn extrapolated to value at positive stall angle of attack + -0.7945 Cn at stall value for negative angle of attack + -1.00 Angle of attack for minimum CD (deg) + 0.0052 Minimum CD value +-180.00 0.000 0.0198 0.0000 +-175.00 0.374 0.0341 0.1880 +-170.00 0.749 0.0955 0.3770 +-160.00 0.659 0.2807 0.2747 +-155.00 0.736 0.3919 0.3130 +-150.00 0.783 0.5086 0.3428 +-145.00 0.803 0.6267 0.3654 +-140.00 0.798 0.7427 0.3820 +-135.00 0.771 0.8537 0.3935 +-130.00 0.724 0.9574 0.4007 +-125.00 0.660 1.0519 0.4042 +-120.00 0.581 1.1355 0.4047 +-115.00 0.491 1.2070 0.4025 +-110.00 0.390 1.2656 0.3981 +-105.00 0.282 1.3104 0.3918 +-100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1.dat new file mode 100644 index 0000000000..393e5d8721 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1.dat @@ -0,0 +1,59 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.50 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder1_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.5 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.5000 0.0 + 0.00 0.000 0.5000 0.0 + 180.00 0.000 0.5000 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1_coords.txt new file mode 100644 index 0000000000..3c8ec3d3b4 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder1_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.5 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2.dat new file mode 100644 index 0000000000..5294db4fdb --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2.dat @@ -0,0 +1,60 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! Round root section with a Cd of 0.35 +! Made by Jason Jonkman +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"Cylinder2_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + 0 alpha0 ! 0-lift angle of attack, depends on airfoil. + 0 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + 0 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + 0 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.35 Cd0 ! 2D drag coefficient value at 0-lift. + 0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 3 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.3500 0.0 + 0.00 0.000 0.3500 0.0 + 180.00 0.000 0.3500 0.0 +! ------------------------------------------------------------------------------ + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2_coords.txt new file mode 100644 index 0000000000..f95e693e67 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/Cylinder2_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.41667 0 +! coordinates of airfoil shape +! cylinder (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.996600 0.058210 +0.993140 0.082541 +0.989610 0.101400 +0.986010 0.117449 +0.982350 0.131676 +0.978630 0.144614 +0.974840 0.156611 +0.970980 0.167863 +0.967060 0.178480 +0.963070 0.188590 +0.959020 0.198244 +0.954900 0.207523 +0.950720 0.216452 +0.946470 0.225088 +0.942160 0.233441 +0.937780 0.241555 +0.933330 0.249450 +0.928820 0.257125 +0.924250 0.264598 +0.919610 0.271896 +0.914900 0.279030 +0.910130 0.285995 +0.905290 0.292814 +0.900390 0.299479 +0.895420 0.306011 +0.890390 0.312403 +0.885290 0.318672 +0.880130 0.324809 +0.874900 0.330832 +0.869610 0.336732 +0.864250 0.342523 +0.858820 0.348207 +0.853330 0.353777 +0.847780 0.359234 +0.842160 0.364591 +0.836470 0.369849 +0.830720 0.374999 +0.824900 0.380053 +0.819020 0.385002 +0.813070 0.389855 +0.807060 0.394606 +0.800980 0.399263 +0.794840 0.403818 +0.788630 0.408280 +0.782350 0.412648 +0.776010 0.416915 +0.769610 0.421082 +0.763140 0.425156 +0.756600 0.429135 +0.750000 0.433013 +0.743330 0.436796 +0.736670 0.440440 +0.730000 0.443959 +0.723330 0.447352 +0.716670 0.450615 +0.710000 0.453762 +0.703330 0.456790 +0.696670 0.459697 +0.690000 0.462493 +0.683330 0.465178 +0.676670 0.467747 +0.670000 0.470213 +0.663330 0.472571 +0.656670 0.474821 +0.650000 0.476970 +0.643330 0.479016 +0.636670 0.480959 +0.630000 0.482804 +0.623330 0.484551 +0.616670 0.486198 +0.610000 0.487750 +0.603330 0.489206 +0.596670 0.490566 +0.590000 0.491833 +0.583330 0.493007 +0.576670 0.494087 +0.570000 0.495076 +0.563330 0.495973 +0.556670 0.496778 +0.550000 0.497494 +0.543330 0.498119 +0.536670 0.498653 +0.529999 0.499099 +0.523330 0.499455 +0.516670 0.499722 +0.510000 0.499900 +0.503330 0.499989 +0.496670 0.499989 +0.490000 0.499900 +0.483330 0.499722 +0.476670 0.499455 +0.470001 0.499099 +0.463330 0.498653 +0.456670 0.498119 +0.450000 0.497494 +0.443330 0.496778 +0.436670 0.495973 +0.430000 0.495076 +0.423330 0.494087 +0.416670 0.493007 +0.410000 0.491833 +0.403330 0.490566 +0.396670 0.489206 +0.390000 0.487750 +0.383330 0.486198 +0.376670 0.484551 +0.370000 0.482804 +0.363330 0.480959 +0.356670 0.479016 +0.350000 0.476970 +0.343330 0.474821 +0.336670 0.472571 +0.330000 0.470213 +0.323330 0.467747 +0.316670 0.465178 +0.310000 0.462493 +0.303330 0.459697 +0.296670 0.456790 +0.290000 0.453762 +0.283330 0.450615 +0.276671 0.447352 +0.270000 0.443959 +0.263330 0.440440 +0.256670 0.436796 +0.250000 0.433013 +0.243420 0.429146 +0.236930 0.425199 +0.230530 0.421172 +0.224210 0.417061 +0.217980 0.412874 +0.211840 0.408612 +0.205790 0.404278 +0.199820 0.399865 +0.193950 0.395390 +0.188160 0.390840 +0.182450 0.386215 +0.176840 0.381533 +0.171310 0.376780 +0.165870 0.371964 +0.160520 0.367088 +0.155260 0.362152 +0.150080 0.357150 +0.144990 0.352091 +0.139990 0.346977 +0.135080 0.341809 +0.130260 0.336589 +0.125520 0.331308 +0.120870 0.325976 +0.116310 0.320596 +0.111830 0.315157 +0.107450 0.309685 +0.103150 0.304155 +0.098930 0.298568 +0.094810 0.292952 +0.090770 0.287282 +0.086830 0.281586 +0.082970 0.275837 +0.079191 0.270037 +0.075510 0.264212 +0.071910 0.258339 +0.068400 0.252431 +0.064980 0.246491 +0.061640 0.240501 +0.058400 0.234498 +0.055240 0.228448 +0.052170 0.222370 +0.049180 0.216244 +0.046290 0.210112 +0.043480 0.203935 +0.040760 0.197734 +0.038120 0.191486 +0.035580 0.185241 +0.033120 0.178950 +0.030750 0.172640 +0.028470 0.166311 +0.026270 0.159937 +0.024170 0.153577 +0.022150 0.147171 +0.020220 0.140752 +0.018370 0.134285 +0.016620 0.127843 +0.014950 0.121353 +0.013370 0.114853 +0.011870 0.108301 +0.010470 0.101786 +0.009150 0.095217 +0.007920 0.088641 +0.006780 0.082061 +0.005720 0.075414 +0.004760 0.068828 +0.003880 0.062169 +0.003090 0.055502 +0.002380 0.048727 +0.001770 0.042034 +0.001240 0.035192 +0.000800 0.028273 +0.000440 0.020972 +0.000180 0.013415 +0.000000 0.000000 +0.000180 -0.013415 +0.000440 -0.020972 +0.000800 -0.028273 +0.001240 -0.035192 +0.001770 -0.042034 +0.002380 -0.048727 +0.003090 -0.055502 +0.003880 -0.062169 +0.004760 -0.068828 +0.005720 -0.075414 +0.006780 -0.082061 +0.007920 -0.088641 +0.009150 -0.095217 +0.010470 -0.101786 +0.011870 -0.108301 +0.013370 -0.114853 +0.014950 -0.121353 +0.016620 -0.127843 +0.018370 -0.134285 +0.020220 -0.140752 +0.022150 -0.147171 +0.024170 -0.153577 +0.026270 -0.159937 +0.028470 -0.166311 +0.030750 -0.172640 +0.033120 -0.178950 +0.035580 -0.185241 +0.038120 -0.191486 +0.040760 -0.197734 +0.043480 -0.203935 +0.046290 -0.210112 +0.049180 -0.216244 +0.052170 -0.222370 +0.055240 -0.228448 +0.058400 -0.234498 +0.061640 -0.240501 +0.064980 -0.246491 +0.068400 -0.252431 +0.071910 -0.258339 +0.075510 -0.264212 +0.079190 -0.270035 +0.082970 -0.275837 +0.086830 -0.281586 +0.090770 -0.287282 +0.094810 -0.292952 +0.098930 -0.298568 +0.103150 -0.304155 +0.107450 -0.309685 +0.111830 -0.315157 +0.116310 -0.320596 +0.120870 -0.325976 +0.125520 -0.331308 +0.130260 -0.336589 +0.135080 -0.341809 +0.139990 -0.346977 +0.144990 -0.352091 +0.150080 -0.357150 +0.155260 -0.362152 +0.160520 -0.367088 +0.165870 -0.371964 +0.171310 -0.376780 +0.176840 -0.381533 +0.182450 -0.386215 +0.188160 -0.390840 +0.193950 -0.395390 +0.199820 -0.399865 +0.205790 -0.404278 +0.211840 -0.408612 +0.217980 -0.412874 +0.224210 -0.417061 +0.230530 -0.421172 +0.236930 -0.425199 +0.243420 -0.429146 +0.250000 -0.433013 +0.256670 -0.436796 +0.263330 -0.440440 +0.270000 -0.443959 +0.276670 -0.447352 +0.283330 -0.450615 +0.290000 -0.453762 +0.296670 -0.456790 +0.303330 -0.459697 +0.310000 -0.462493 +0.316670 -0.465178 +0.323330 -0.467747 +0.330000 -0.470213 +0.336670 -0.472571 +0.343330 -0.474821 +0.350000 -0.476970 +0.356670 -0.479016 +0.363330 -0.480959 +0.370000 -0.482804 +0.376670 -0.484551 +0.383330 -0.486198 +0.390000 -0.487750 +0.396670 -0.489206 +0.403330 -0.490566 +0.410000 -0.491833 +0.416670 -0.493007 +0.423330 -0.494087 +0.430000 -0.495076 +0.436670 -0.495973 +0.443330 -0.496778 +0.450000 -0.497494 +0.456670 -0.498119 +0.463330 -0.498653 +0.470000 -0.499099 +0.476670 -0.499455 +0.483330 -0.499722 +0.490000 -0.499900 +0.496670 -0.499989 +0.503330 -0.499989 +0.510000 -0.499900 +0.516670 -0.499722 +0.523330 -0.499455 +0.530000 -0.499099 +0.536670 -0.498653 +0.543330 -0.498119 +0.550000 -0.497494 +0.556670 -0.496778 +0.563330 -0.495973 +0.570000 -0.495076 +0.576670 -0.494087 +0.583330 -0.493007 +0.590000 -0.491833 +0.596669 -0.490566 +0.603330 -0.489206 +0.610000 -0.487750 +0.616670 -0.486198 +0.623330 -0.484551 +0.630000 -0.482804 +0.636670 -0.480959 +0.643330 -0.479016 +0.650000 -0.476970 +0.656670 -0.474821 +0.663330 -0.472571 +0.670000 -0.470213 +0.676670 -0.467747 +0.683330 -0.465178 +0.690000 -0.462493 +0.696670 -0.459697 +0.703330 -0.456790 +0.710000 -0.453762 +0.716670 -0.450615 +0.723330 -0.447352 +0.730000 -0.443959 +0.736670 -0.440440 +0.743330 -0.436796 +0.750000 -0.433013 +0.756600 -0.429135 +0.763140 -0.425156 +0.769610 -0.421082 +0.776010 -0.416915 +0.782350 -0.412648 +0.788630 -0.408280 +0.794840 -0.403818 +0.800980 -0.399263 +0.807060 -0.394606 +0.813070 -0.389855 +0.819020 -0.385002 +0.824900 -0.380053 +0.830720 -0.374999 +0.836470 -0.369849 +0.842160 -0.364591 +0.847780 -0.359234 +0.853330 -0.353777 +0.858820 -0.348207 +0.864250 -0.342523 +0.869610 -0.336732 +0.874900 -0.330832 +0.880130 -0.324809 +0.885290 -0.318672 +0.890390 -0.312403 +0.895420 -0.306011 +0.900390 -0.299479 +0.905290 -0.292814 +0.910130 -0.285995 +0.914900 -0.279030 +0.919610 -0.271896 +0.924250 -0.264598 +0.928820 -0.257125 +0.933330 -0.249450 +0.937780 -0.241555 +0.942160 -0.233441 +0.946470 -0.225088 +0.950720 -0.216452 +0.954900 -0.207523 +0.959020 -0.198244 +0.963070 -0.188590 +0.967060 -0.178480 +0.970980 -0.167863 +0.974840 -0.156611 +0.978630 -0.144614 +0.982350 -0.131676 +0.986010 -0.117449 +0.989610 -0.101400 +0.993140 -0.082541 +0.996600 -0.058210 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17.dat new file mode 100644 index 0000000000..7d55bb9ac2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17.dat @@ -0,0 +1,196 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU21_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4144 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.5324 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.121 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 142 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0185 0.0000 + -175.00 0.394 0.0332 0.1978 + -170.00 0.788 0.0945 0.3963 + -160.00 0.670 0.2809 0.2738 + -155.00 0.749 0.3932 0.3118 + -150.00 0.797 0.5112 0.3413 + -145.00 0.818 0.6309 0.3636 + -140.00 0.813 0.7485 0.3799 + -135.00 0.786 0.8612 0.3911 + -130.00 0.739 0.9665 0.3980 + -125.00 0.675 1.0625 0.4012 + -120.00 0.596 1.1476 0.4014 + -115.00 0.505 1.2206 0.3990 + -110.00 0.403 1.2805 0.3943 + -105.00 0.294 1.3265 0.3878 + -100.00 0.179 1.3582 0.3796 + -95.00 0.060 1.3752 0.3700 + -90.00 -0.060 1.3774 0.3591 + -85.00 -0.179 1.3648 0.3471 + -80.00 -0.295 1.3376 0.3340 + -75.00 -0.407 1.2962 0.3199 + -70.00 -0.512 1.2409 0.3049 + -65.00 -0.608 1.1725 0.2890 + -60.00 -0.693 1.0919 0.2722 + -55.00 -0.764 1.0002 0.2545 + -50.00 -0.820 0.8990 0.2359 + -45.00 -0.857 0.7900 0.2163 + -40.00 -0.875 0.6754 0.1958 + -35.00 -0.869 0.5579 0.1744 + -30.00 -0.838 0.4405 0.1520 + -25.00 -0.791 0.3256 0.1262 + -24.00 -0.794 0.3013 0.1170 + -23.00 -0.805 0.2762 0.1059 + -22.00 -0.821 0.2506 0.0931 + -21.00 -0.843 0.2246 0.0788 + -20.00 -0.869 0.1983 0.0631 + -19.00 -0.899 0.1720 0.0464 + -18.00 -0.931 0.1457 0.0286 + -17.00 -0.964 0.1197 0.0102 + -16.00 -0.999 0.0940 -0.0088 + -15.00 -1.033 0.0689 -0.0281 + -14.50 -1.050 0.0567 -0.0378 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.12 -0.536 0.0124 -0.0821 + -7.62 -0.467 0.0109 -0.0924 + -7.11 -0.393 0.0092 -0.1015 + -6.60 -0.323 0.0083 -0.1073 + -6.50 -0.311 0.0089 -0.1083 + -6.00 -0.245 0.0082 -0.1112 + -5.50 -0.178 0.0074 -0.1146 + -5.00 -0.113 0.0069 -0.1172 + -4.50 -0.048 0.0065 -0.1194 + -4.00 0.016 0.0063 -0.1213 + -3.50 0.080 0.0061 -0.1232 + -3.00 0.145 0.0058 -0.1252 + -2.50 0.208 0.0057 -0.1268 + -2.00 0.270 0.0057 -0.1282 + -1.50 0.333 0.0057 -0.1297 + -1.00 0.396 0.0057 -0.1310 + -0.50 0.458 0.0057 -0.1324 + 0.00 0.521 0.0057 -0.1337 + 0.50 0.583 0.0057 -0.1350 + 1.00 0.645 0.0058 -0.1363 + 1.50 0.706 0.0058 -0.1374 + 2.00 0.768 0.0059 -0.1385 + 2.50 0.828 0.0061 -0.1395 + 3.00 0.888 0.0063 -0.1403 + 3.50 0.948 0.0066 -0.1406 + 4.00 0.996 0.0071 -0.1398 + 4.50 1.046 0.0079 -0.1390 + 5.00 1.095 0.0090 -0.1378 + 5.50 1.145 0.0103 -0.1369 + 6.00 1.192 0.0113 -0.1353 + 6.50 1.239 0.0122 -0.1338 + 7.00 1.283 0.0131 -0.1317 + 7.50 1.324 0.0139 -0.1291 + 8.00 1.358 0.0147 -0.1249 + 8.50 1.385 0.0158 -0.1213 + 9.00 1.403 0.0181 -0.1177 + 9.50 1.401 0.0211 -0.1142 + 10.00 1.358 0.0255 -0.1103 + 10.50 1.313 0.0301 -0.1066 + 11.00 1.287 0.0347 -0.1032 + 11.50 1.274 0.0401 -0.1002 + 12.00 1.272 0.0468 -0.0971 + 12.50 1.273 0.0545 -0.0940 + 13.00 1.273 0.0633 -0.0909 + 13.50 1.273 0.0722 -0.0883 + 14.00 1.272 0.0806 -0.0865 + 14.50 1.273 0.0900 -0.0854 + 15.00 1.275 0.0987 -0.0849 + 15.50 1.281 0.1075 -0.0847 + 16.00 1.284 0.1170 -0.0850 + 16.50 1.296 0.1270 -0.0858 + 17.00 1.306 0.1368 -0.0869 + 17.50 1.308 0.1464 -0.0883 + 18.00 1.308 0.1562 -0.0901 + 18.50 1.308 0.1664 -0.0922 + 19.00 1.308 0.1770 -0.0949 + 19.50 1.307 0.1878 -0.0980 + 20.00 1.311 0.1987 -0.1017 + 20.50 1.325 0.2100 -0.1059 + 21.00 1.324 0.2214 -0.1105 + 22.00 1.277 0.2499 -0.1172 + 23.00 1.229 0.2786 -0.1239 + 24.00 1.182 0.3077 -0.1305 + 25.00 1.136 0.3371 -0.1370 + 26.00 1.093 0.3664 -0.1433 + 28.00 1.017 0.4246 -0.1556 + 30.00 0.962 0.4813 -0.1671 + 32.00 0.937 0.5356 -0.1778 + 35.00 0.947 0.6127 -0.1923 + 40.00 0.950 0.7396 -0.2154 + 45.00 0.928 0.8623 -0.2374 + 50.00 0.884 0.9781 -0.2583 + 55.00 0.821 1.0846 -0.2782 + 60.00 0.740 1.1796 -0.2971 + 65.00 0.646 1.2617 -0.3149 + 70.00 0.540 1.3297 -0.3318 + 75.00 0.425 1.3827 -0.3476 + 80.00 0.304 1.4202 -0.3625 + 85.00 0.179 1.4423 -0.3763 + 90.00 0.053 1.4512 -0.3890 + 95.00 -0.073 1.4480 -0.4004 + 100.00 -0.198 1.4294 -0.4105 + 105.00 -0.319 1.3954 -0.4191 + 110.00 -0.434 1.3464 -0.4260 + 115.00 -0.541 1.2829 -0.4308 + 120.00 -0.637 1.2057 -0.4333 + 125.00 -0.720 1.1157 -0.4330 + 130.00 -0.787 1.0144 -0.4294 + 135.00 -0.836 0.9033 -0.4219 + 140.00 -0.864 0.7845 -0.4098 + 145.00 -0.869 0.6605 -0.3922 + 150.00 -0.847 0.5346 -0.3682 + 155.00 -0.795 0.4103 -0.3364 + 160.00 -0.711 0.2922 -0.2954 + 170.00 -0.788 0.0969 -0.3966 + 175.00 -0.394 0.0334 -0.1978 + 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17_coords.txt new file mode 100644 index 0000000000..3728b88baa --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU21_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 93-W-210.lm +! x/c y/c +1.00000 0.00194 +0.99660 0.00304 +0.99314 0.00411 +0.98961 0.00516 +0.98601 0.00618 +0.98235 0.00720 +0.97863 0.00823 +0.97484 0.00927 +0.97098 0.01033 +0.96706 0.01139 +0.96307 0.01246 +0.95902 0.01354 +0.95490 0.01463 +0.95072 0.01573 +0.94647 0.01684 +0.94216 0.01797 +0.93778 0.01911 +0.93333 0.02026 +0.92882 0.02142 +0.92425 0.02260 +0.91961 0.02379 +0.91490 0.02499 +0.91013 0.02621 +0.90529 0.02744 +0.90039 0.02869 +0.89542 0.02995 +0.89039 0.03122 +0.88529 0.03250 +0.88013 0.03379 +0.87490 0.03510 +0.86961 0.03643 +0.86425 0.03776 +0.85882 0.03912 +0.85333 0.04048 +0.84778 0.04186 +0.84216 0.04326 +0.83647 0.04466 +0.83072 0.04608 +0.82490 0.04752 +0.81902 0.04896 +0.81307 0.05041 +0.80706 0.05188 +0.80098 0.05336 +0.79484 0.05484 +0.78863 0.05634 +0.78235 0.05784 +0.77601 0.05936 +0.76961 0.06088 +0.76314 0.06242 +0.75660 0.06396 +0.75000 0.06550 +0.74333 0.06706 +0.73667 0.06860 +0.73000 0.07014 +0.72333 0.07167 +0.71667 0.07320 +0.71000 0.07472 +0.70333 0.07624 +0.69667 0.07774 +0.69000 0.07924 +0.68333 0.08072 +0.67667 0.08220 +0.67000 0.08366 +0.66333 0.08511 +0.65667 0.08655 +0.65000 0.08798 +0.64333 0.08940 +0.63667 0.09080 +0.63000 0.09220 +0.62333 0.09357 +0.61667 0.09492 +0.61000 0.09626 +0.60333 0.09759 +0.59667 0.09889 +0.59000 0.10017 +0.58333 0.10143 +0.57667 0.10267 +0.57000 0.10389 +0.56333 0.10509 +0.55667 0.10627 +0.55000 0.10742 +0.54333 0.10854 +0.53667 0.10964 +0.53000 0.11071 +0.52333 0.11175 +0.51667 0.11277 +0.51000 0.11375 +0.50333 0.11470 +0.49667 0.11562 +0.49000 0.11650 +0.48333 0.11734 +0.47667 0.11813 +0.47000 0.11889 +0.46333 0.11960 +0.45667 0.12027 +0.45000 0.12089 +0.44333 0.12147 +0.43667 0.12200 +0.43000 0.12249 +0.42333 0.12292 +0.41667 0.12331 +0.41000 0.12365 +0.40333 0.12394 +0.39667 0.12418 +0.39000 0.12436 +0.38333 0.12449 +0.37667 0.12457 +0.37000 0.12459 +0.36333 0.12455 +0.35667 0.12446 +0.35000 0.12431 +0.34333 0.12411 +0.33667 0.12385 +0.33000 0.12353 +0.32333 0.12317 +0.31667 0.12275 +0.31000 0.12228 +0.30333 0.12175 +0.29667 0.12117 +0.29000 0.12053 +0.28333 0.11984 +0.27667 0.11910 +0.27000 0.11829 +0.26333 0.11744 +0.25667 0.11653 +0.25000 0.11557 +0.24342 0.11456 +0.23693 0.11351 +0.23053 0.11243 +0.22421 0.11130 +0.21798 0.11015 +0.21184 0.10896 +0.20579 0.10773 +0.19982 0.10648 +0.19395 0.10520 +0.18816 0.10389 +0.18245 0.10255 +0.17684 0.10119 +0.17131 0.09980 +0.16587 0.09839 +0.16052 0.09696 +0.15526 0.09550 +0.15008 0.09403 +0.14499 0.09254 +0.13999 0.09103 +0.13508 0.08950 +0.13026 0.08796 +0.12552 0.08641 +0.12087 0.08483 +0.11631 0.08325 +0.11183 0.08165 +0.10745 0.08004 +0.10315 0.07843 +0.09893 0.07679 +0.09481 0.07516 +0.09077 0.07351 +0.08683 0.07186 +0.08297 0.07021 +0.07919 0.06854 +0.07551 0.06687 +0.07191 0.06520 +0.06840 0.06353 +0.06498 0.06185 +0.06164 0.06017 +0.05840 0.05850 +0.05524 0.05682 +0.05217 0.05515 +0.04918 0.05348 +0.04629 0.05181 +0.04348 0.05015 +0.04076 0.04849 +0.03812 0.04683 +0.03558 0.04519 +0.03312 0.04356 +0.03075 0.04194 +0.02847 0.04033 +0.02627 0.03874 +0.02417 0.03716 +0.02215 0.03560 +0.02022 0.03404 +0.01837 0.03249 +0.01662 0.03094 +0.01495 0.02940 +0.01337 0.02785 +0.01187 0.02630 +0.01047 0.02476 +0.00915 0.02322 +0.00792 0.02169 +0.00678 0.02017 +0.00572 0.01864 +0.00476 0.01713 +0.00388 0.01562 +0.00309 0.01410 +0.00238 0.01253 +0.00177 0.01094 +0.00124 0.00923 +0.00080 0.00740 +0.00044 0.00537 +0.00018 0.00333 +0.00000 0.00000 +0.00018 -0.00292 +0.00044 -0.00443 +0.00080 -0.00589 +0.00124 -0.00727 +0.00177 -0.00864 +0.00238 -0.00998 +0.00309 -0.01134 +0.00388 -0.01266 +0.00476 -0.01397 +0.00572 -0.01526 +0.00678 -0.01656 +0.00792 -0.01785 +0.00915 -0.01914 +0.01047 -0.02044 +0.01187 -0.02174 +0.01337 -0.02306 +0.01495 -0.02438 +0.01662 -0.02571 +0.01837 -0.02705 +0.02022 -0.02841 +0.02215 -0.02976 +0.02417 -0.03112 +0.02627 -0.03248 +0.02847 -0.03384 +0.03075 -0.03520 +0.03312 -0.03655 +0.03558 -0.03789 +0.03812 -0.03923 +0.04076 -0.04056 +0.04348 -0.04188 +0.04629 -0.04319 +0.04918 -0.04449 +0.05217 -0.04579 +0.05524 -0.04708 +0.05840 -0.04836 +0.06164 -0.04963 +0.06498 -0.05089 +0.06840 -0.05215 +0.07191 -0.05340 +0.07551 -0.05464 +0.07919 -0.05587 +0.08297 -0.05709 +0.08683 -0.05831 +0.09077 -0.05951 +0.09481 -0.06071 +0.09893 -0.06189 +0.10315 -0.06306 +0.10745 -0.06422 +0.11183 -0.06536 +0.11631 -0.06648 +0.12087 -0.06759 +0.12552 -0.06868 +0.13026 -0.06975 +0.13508 -0.07079 +0.13999 -0.07182 +0.14499 -0.07282 +0.15008 -0.07380 +0.15526 -0.07476 +0.16052 -0.07568 +0.16587 -0.07658 +0.17131 -0.07746 +0.17684 -0.07830 +0.18245 -0.07911 +0.18816 -0.07989 +0.19395 -0.08063 +0.19982 -0.08134 +0.20579 -0.08201 +0.21184 -0.08264 +0.21798 -0.08324 +0.22421 -0.08380 +0.23053 -0.08432 +0.23693 -0.08479 +0.24342 -0.08523 +0.25000 -0.08561 +0.25667 -0.08595 +0.26333 -0.08624 +0.27000 -0.08648 +0.27667 -0.08667 +0.28333 -0.08680 +0.29000 -0.08689 +0.29667 -0.08693 +0.30333 -0.08692 +0.31000 -0.08686 +0.31667 -0.08676 +0.32333 -0.08660 +0.33000 -0.08640 +0.33667 -0.08615 +0.34333 -0.08586 +0.35000 -0.08553 +0.35667 -0.08515 +0.36333 -0.08473 +0.37000 -0.08427 +0.37667 -0.08376 +0.38333 -0.08322 +0.39000 -0.08263 +0.39667 -0.08200 +0.40333 -0.08134 +0.41000 -0.08062 +0.41667 -0.07987 +0.42333 -0.07908 +0.43000 -0.07824 +0.43667 -0.07736 +0.44333 -0.07644 +0.45000 -0.07548 +0.45667 -0.07448 +0.46333 -0.07343 +0.47000 -0.07235 +0.47667 -0.07122 +0.48333 -0.07006 +0.49000 -0.06886 +0.49667 -0.06763 +0.50333 -0.06636 +0.51000 -0.06506 +0.51667 -0.06373 +0.52333 -0.06237 +0.53000 -0.06097 +0.53667 -0.05955 +0.54333 -0.05810 +0.55000 -0.05663 +0.55667 -0.05513 +0.56333 -0.05361 +0.57000 -0.05207 +0.57667 -0.05050 +0.58333 -0.04892 +0.59000 -0.04732 +0.59667 -0.04571 +0.60333 -0.04408 +0.61000 -0.04243 +0.61667 -0.04078 +0.62333 -0.03911 +0.63000 -0.03744 +0.63667 -0.03576 +0.64333 -0.03409 +0.65000 -0.03241 +0.65667 -0.03073 +0.66333 -0.02906 +0.67000 -0.02740 +0.67667 -0.02574 +0.68333 -0.02411 +0.69000 -0.02248 +0.69667 -0.02088 +0.70333 -0.01930 +0.71000 -0.01774 +0.71667 -0.01620 +0.72333 -0.01470 +0.73000 -0.01323 +0.73667 -0.01179 +0.74333 -0.01039 +0.75000 -0.00903 +0.75660 -0.00772 +0.76314 -0.00647 +0.76961 -0.00528 +0.77601 -0.00416 +0.78235 -0.00308 +0.78863 -0.00207 +0.79484 -0.00112 +0.80098 -0.00023 +0.80706 0.00060 +0.81307 0.00136 +0.81902 0.00207 +0.82490 0.00273 +0.83072 0.00333 +0.83647 0.00387 +0.84216 0.00435 +0.84778 0.00479 +0.85333 0.00517 +0.85882 0.00550 +0.86425 0.00578 +0.86961 0.00601 +0.87490 0.00620 +0.88013 0.00633 +0.88529 0.00643 +0.89039 0.00648 +0.89542 0.00649 +0.90039 0.00646 +0.90529 0.00639 +0.91013 0.00628 +0.91490 0.00613 +0.91961 0.00595 +0.92425 0.00574 +0.92882 0.00550 +0.93333 0.00523 +0.93778 0.00494 +0.94216 0.00462 +0.94647 0.00428 +0.95072 0.00392 +0.95490 0.00355 +0.95902 0.00315 +0.96307 0.00275 +0.96706 0.00233 +0.97098 0.00189 +0.97484 0.00145 +0.97863 0.00099 +0.98235 0.00053 +0.98601 0.00005 +0.98961 -0.00044 +0.99314 -0.00094 +0.99660 -0.00143 +1.00000 -0.00194 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17.dat new file mode 100644 index 0000000000..4949fcf7e5 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17.dat @@ -0,0 +1,194 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU25_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 8.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -8.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4336 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6873 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.006 Cd0 ! 2D drag coefficient value at 0-lift. + -0.12 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 140 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0202 0.0000 + -175.00 0.368 0.0324 0.1845 + -170.00 0.735 0.0943 0.3701 + -160.00 0.695 0.2848 0.2679 + -155.00 0.777 0.4001 0.3046 + -150.00 0.828 0.5215 0.3329 + -145.00 0.850 0.6447 0.3540 + -140.00 0.846 0.7660 0.3693 + -135.00 0.818 0.8823 0.3794 + -130.00 0.771 0.9911 0.3854 + -125.00 0.705 1.0905 0.3878 + -120.00 0.624 1.1787 0.3872 + -115.00 0.530 1.2545 0.3841 + -110.00 0.426 1.3168 0.3788 + -105.00 0.314 1.3650 0.3716 + -100.00 0.195 1.3984 0.3629 + -95.00 0.073 1.4169 0.3529 + -90.00 -0.050 1.4201 0.3416 + -85.00 -0.173 1.4081 0.3292 + -80.00 -0.294 1.3811 0.3159 + -75.00 -0.409 1.3394 0.3017 + -70.00 -0.518 1.2833 0.2866 + -65.00 -0.617 1.2138 0.2707 + -60.00 -0.706 1.1315 0.2539 + -55.00 -0.780 1.0378 0.2364 + -50.00 -0.839 0.9341 0.2181 + -45.00 -0.879 0.8221 0.1991 + -40.00 -0.898 0.7042 0.1792 + -35.00 -0.893 0.5829 0.1587 + -30.00 -0.862 0.4616 0.1374 + -25.00 -0.803 0.3441 0.1154 + -24.00 -0.792 0.3209 0.1101 + -23.00 -0.789 0.2972 0.1031 + -22.00 -0.792 0.2730 0.0947 + -21.00 -0.801 0.2485 0.0849 + -20.00 -0.815 0.2237 0.0739 + -19.00 -0.833 0.1990 0.0618 + -18.00 -0.854 0.1743 0.0488 + -17.00 -0.879 0.1498 0.0351 + -16.00 -0.905 0.1256 0.0208 + -15.00 -0.932 0.1020 0.0060 + -14.00 -0.959 0.0789 -0.0091 + -13.00 -0.985 0.0567 -0.0243 + -12.01 -0.953 0.0271 -0.0349 + -11.00 -0.900 0.0303 -0.0361 + -9.98 -0.827 0.0287 -0.0464 + -8.98 -0.753 0.0271 -0.0534 + -8.47 -0.691 0.0264 -0.0650 + -7.45 -0.555 0.0114 -0.0782 + -6.42 -0.413 0.0094 -0.0904 + -5.40 -0.271 0.0086 -0.1006 + -5.00 -0.220 0.0073 -0.1107 + -4.50 -0.152 0.0071 -0.1135 + -4.00 -0.084 0.0070 -0.1162 + -3.50 -0.018 0.0069 -0.1186 + -3.00 0.049 0.0068 -0.1209 + -2.50 0.115 0.0068 -0.1231 + -2.00 0.181 0.0068 -0.1252 + -1.50 0.247 0.0067 -0.1272 + -1.00 0.312 0.0067 -0.1293 + -0.50 0.377 0.0067 -0.1311 + 0.00 0.444 0.0065 -0.1330 + 0.50 0.508 0.0065 -0.1347 + 1.00 0.573 0.0066 -0.1364 + 1.50 0.636 0.0067 -0.1380 + 2.00 0.701 0.0068 -0.1396 + 2.50 0.765 0.0069 -0.1411 + 3.00 0.827 0.0070 -0.1424 + 3.50 0.890 0.0071 -0.1437 + 4.00 0.952 0.0073 -0.1448 + 4.50 1.013 0.0076 -0.1456 + 5.00 1.062 0.0079 -0.1445 + 6.00 1.161 0.0099 -0.1419 + 6.50 1.208 0.0117 -0.1403 + 7.00 1.254 0.0132 -0.1382 + 7.50 1.301 0.0143 -0.1362 + 8.00 1.336 0.0153 -0.1320 + 8.50 1.369 0.0165 -0.1276 + 9.00 1.400 0.0181 -0.1234 + 9.50 1.428 0.0211 -0.1193 + 10.00 1.442 0.0262 -0.1152 + 10.50 1.427 0.0336 -0.1115 + 11.00 1.374 0.0420 -0.1081 + 11.50 1.316 0.0515 -0.1052 + 12.00 1.277 0.0601 -0.1026 + 12.50 1.250 0.0693 -0.1000 + 13.00 1.246 0.0785 -0.0980 + 13.50 1.247 0.0888 -0.0969 + 14.00 1.256 0.1000 -0.0968 + 14.50 1.260 0.1108 -0.0973 + 15.00 1.271 0.1219 -0.0981 + 15.50 1.281 0.1325 -0.0992 + 16.00 1.289 0.1433 -0.1006 + 16.50 1.294 0.1541 -0.1023 + 17.00 1.304 0.1649 -0.1042 + 17.50 1.309 0.1754 -0.1064 + 18.00 1.315 0.1845 -0.1082 + 18.50 1.320 0.1953 -0.1110 + 19.00 1.330 0.2061 -0.1143 + 19.50 1.343 0.2170 -0.1179 + 20.00 1.354 0.2280 -0.1219 + 20.50 1.359 0.2390 -0.1261 + 21.00 1.360 0.2536 -0.1303 + 22.00 1.325 0.2814 -0.1375 + 23.00 1.288 0.3098 -0.1446 + 24.00 1.251 0.3386 -0.1515 + 25.00 1.215 0.3678 -0.1584 + 26.00 1.181 0.3972 -0.1651 + 28.00 1.120 0.4563 -0.1781 + 30.00 1.076 0.5149 -0.1904 + 32.00 1.056 0.5720 -0.2017 + 35.00 1.066 0.6548 -0.2173 + 40.00 1.064 0.7901 -0.2418 + 45.00 1.035 0.9190 -0.2650 + 50.00 0.980 1.0378 -0.2867 + 55.00 0.904 1.1434 -0.3072 + 60.00 0.810 1.2333 -0.3265 + 65.00 0.702 1.3055 -0.3446 + 70.00 0.582 1.3587 -0.3616 + 75.00 0.456 1.3922 -0.3775 + 80.00 0.326 1.4063 -0.3921 + 85.00 0.197 1.4042 -0.4057 + 90.00 0.072 1.3985 -0.4180 + 95.00 -0.050 1.3973 -0.4289 + 100.00 -0.170 1.3810 -0.4385 + 105.00 -0.287 1.3498 -0.4464 + 110.00 -0.399 1.3041 -0.4524 + 115.00 -0.502 1.2442 -0.4563 + 120.00 -0.596 1.1709 -0.4577 + 125.00 -0.677 1.0852 -0.4563 + 130.00 -0.743 0.9883 -0.4514 + 135.00 -0.792 0.8818 -0.4425 + 140.00 -0.821 0.7676 -0.4288 + 145.00 -0.826 0.6481 -0.4095 + 150.00 -0.806 0.5264 -0.3836 + 155.00 -0.758 0.4060 -0.3497 + 160.00 -0.679 0.2912 -0.3065 + 170.00 -0.735 0.0995 -0.3706 + 175.00 -0.368 0.0356 -0.1846 + 180.00 0.000 0.0202 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17_coords.txt new file mode 100644 index 0000000000..8655cdc1d7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU25_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 91-W2-250.lm +! x/c y/c +1.00000 0.00213 +0.99660 0.00314 +0.99314 0.00414 +0.98961 0.00515 +0.98601 0.00617 +0.98235 0.00720 +0.97863 0.00822 +0.97484 0.00926 +0.97098 0.01030 +0.96706 0.01135 +0.96307 0.01240 +0.95902 0.01347 +0.95490 0.01454 +0.95072 0.01562 +0.94647 0.01672 +0.94216 0.01783 +0.93778 0.01895 +0.93333 0.02009 +0.92882 0.02125 +0.92425 0.02241 +0.91961 0.02359 +0.91490 0.02479 +0.91013 0.02600 +0.90529 0.02722 +0.90039 0.02846 +0.89542 0.02972 +0.89039 0.03099 +0.88529 0.03227 +0.88013 0.03357 +0.87490 0.03489 +0.86961 0.03622 +0.86425 0.03756 +0.85882 0.03892 +0.85333 0.04029 +0.84778 0.04167 +0.84216 0.04306 +0.83647 0.04447 +0.83072 0.04589 +0.82490 0.04732 +0.81902 0.04877 +0.81307 0.05023 +0.80706 0.05170 +0.80098 0.05319 +0.79484 0.05468 +0.78863 0.05619 +0.78235 0.05771 +0.77601 0.05925 +0.76961 0.06078 +0.76314 0.06233 +0.75660 0.06388 +0.75000 0.06544 +0.74333 0.06701 +0.73667 0.06857 +0.73000 0.07013 +0.72333 0.07168 +0.71667 0.07322 +0.71000 0.07475 +0.70333 0.07628 +0.69667 0.07779 +0.69000 0.07930 +0.68333 0.08080 +0.67667 0.08228 +0.67000 0.08375 +0.66333 0.08522 +0.65667 0.08667 +0.65000 0.08810 +0.64333 0.08953 +0.63667 0.09093 +0.63000 0.09233 +0.62333 0.09371 +0.61667 0.09507 +0.61000 0.09642 +0.60333 0.09775 +0.59667 0.09906 +0.59000 0.10035 +0.58333 0.10163 +0.57667 0.10289 +0.57000 0.10413 +0.56333 0.10535 +0.55667 0.10655 +0.55000 0.10773 +0.54333 0.10888 +0.53667 0.11001 +0.53000 0.11112 +0.52333 0.11221 +0.51667 0.11327 +0.51000 0.11430 +0.50333 0.11530 +0.49667 0.11628 +0.49000 0.11723 +0.48333 0.11815 +0.47667 0.11904 +0.47000 0.11991 +0.46333 0.12074 +0.45667 0.12154 +0.45000 0.12230 +0.44333 0.12303 +0.43667 0.12372 +0.43000 0.12436 +0.42333 0.12497 +0.41667 0.12554 +0.41000 0.12606 +0.40333 0.12655 +0.39667 0.12699 +0.39000 0.12738 +0.38333 0.12773 +0.37667 0.12803 +0.37000 0.12828 +0.36333 0.12846 +0.35667 0.12858 +0.35000 0.12864 +0.34333 0.12862 +0.33667 0.12853 +0.33000 0.12837 +0.32333 0.12815 +0.31667 0.12785 +0.31000 0.12749 +0.30333 0.12705 +0.29667 0.12656 +0.29000 0.12600 +0.28333 0.12538 +0.27667 0.12469 +0.27000 0.12394 +0.26333 0.12312 +0.25667 0.12224 +0.25000 0.12130 +0.24342 0.12030 +0.23693 0.11926 +0.23053 0.11817 +0.22421 0.11704 +0.21798 0.11586 +0.21184 0.11465 +0.20579 0.11340 +0.19982 0.11210 +0.19395 0.11078 +0.18816 0.10942 +0.18245 0.10803 +0.17684 0.10660 +0.17131 0.10515 +0.16587 0.10367 +0.16052 0.10217 +0.15526 0.10064 +0.15008 0.09909 +0.14499 0.09751 +0.13999 0.09591 +0.13508 0.09430 +0.13026 0.09266 +0.12552 0.09101 +0.12087 0.08934 +0.11631 0.08765 +0.11183 0.08595 +0.10745 0.08424 +0.10315 0.08251 +0.09893 0.08076 +0.09481 0.07902 +0.09077 0.07725 +0.08683 0.07549 +0.08297 0.07371 +0.07919 0.07192 +0.07551 0.07013 +0.07191 0.06834 +0.06840 0.06654 +0.06498 0.06474 +0.06164 0.06293 +0.05840 0.06113 +0.05524 0.05933 +0.05217 0.05753 +0.04918 0.05573 +0.04629 0.05393 +0.04348 0.05214 +0.04076 0.05035 +0.03812 0.04856 +0.03558 0.04679 +0.03312 0.04502 +0.03075 0.04326 +0.02847 0.04151 +0.02627 0.03976 +0.02417 0.03804 +0.02215 0.03632 +0.02022 0.03462 +0.01837 0.03293 +0.01662 0.03126 +0.01495 0.02961 +0.01337 0.02797 +0.01187 0.02635 +0.01047 0.02475 +0.00915 0.02317 +0.00792 0.02161 +0.00678 0.02007 +0.00572 0.01855 +0.00476 0.01706 +0.00388 0.01557 +0.00309 0.01409 +0.00238 0.01261 +0.00177 0.01110 +0.00124 0.00945 +0.00080 0.00766 +0.00044 0.00568 +0.00018 0.00363 +0.00000 0.00000 +0.00018 -0.00360 +0.00044 -0.00572 +0.00080 -0.00778 +0.00124 -0.00974 +0.00177 -0.01169 +0.00238 -0.01359 +0.00309 -0.01549 +0.00388 -0.01736 +0.00476 -0.01921 +0.00572 -0.02104 +0.00678 -0.02288 +0.00792 -0.02470 +0.00915 -0.02652 +0.01047 -0.02835 +0.01187 -0.03019 +0.01337 -0.03205 +0.01495 -0.03392 +0.01662 -0.03581 +0.01837 -0.03770 +0.02022 -0.03961 +0.02215 -0.04153 +0.02417 -0.04345 +0.02627 -0.04537 +0.02847 -0.04730 +0.03075 -0.04921 +0.03312 -0.05112 +0.03558 -0.05302 +0.03812 -0.05491 +0.04076 -0.05679 +0.04348 -0.05865 +0.04629 -0.06051 +0.04918 -0.06234 +0.05217 -0.06418 +0.05524 -0.06600 +0.05840 -0.06780 +0.06164 -0.06960 +0.06498 -0.07139 +0.06840 -0.07316 +0.07191 -0.07492 +0.07551 -0.07668 +0.07919 -0.07842 +0.08297 -0.08015 +0.08683 -0.08186 +0.09077 -0.08356 +0.09481 -0.08525 +0.09893 -0.08692 +0.10315 -0.08858 +0.10745 -0.09022 +0.11183 -0.09182 +0.11631 -0.09342 +0.12087 -0.09498 +0.12552 -0.09652 +0.13026 -0.09803 +0.13508 -0.09951 +0.13999 -0.10095 +0.14499 -0.10237 +0.15008 -0.10376 +0.15526 -0.10511 +0.16052 -0.10642 +0.16587 -0.10769 +0.17131 -0.10892 +0.17684 -0.11011 +0.18245 -0.11126 +0.18816 -0.11236 +0.19395 -0.11341 +0.19982 -0.11441 +0.20579 -0.11536 +0.21184 -0.11626 +0.21798 -0.11710 +0.22421 -0.11789 +0.23053 -0.11862 +0.23693 -0.11929 +0.24342 -0.11990 +0.25000 -0.12045 +0.25667 -0.12094 +0.26333 -0.12135 +0.27000 -0.12168 +0.27667 -0.12195 +0.28333 -0.12214 +0.29000 -0.12227 +0.29667 -0.12232 +0.30333 -0.12231 +0.31000 -0.12222 +0.31667 -0.12207 +0.32333 -0.12186 +0.33000 -0.12157 +0.33667 -0.12123 +0.34333 -0.12082 +0.35000 -0.12034 +0.35667 -0.11981 +0.36333 -0.11922 +0.37000 -0.11857 +0.37667 -0.11785 +0.38333 -0.11708 +0.39000 -0.11625 +0.39667 -0.11537 +0.40333 -0.11442 +0.41000 -0.11342 +0.41667 -0.11236 +0.42333 -0.11124 +0.43000 -0.11006 +0.43667 -0.10881 +0.44333 -0.10752 +0.45000 -0.10615 +0.45667 -0.10474 +0.46333 -0.10326 +0.47000 -0.10173 +0.47667 -0.10015 +0.48333 -0.09851 +0.49000 -0.09682 +0.49667 -0.09508 +0.50333 -0.09329 +0.51000 -0.09145 +0.51667 -0.08956 +0.52333 -0.08764 +0.53000 -0.08567 +0.53667 -0.08366 +0.54333 -0.08162 +0.55000 -0.07953 +0.55667 -0.07742 +0.56333 -0.07527 +0.57000 -0.07309 +0.57667 -0.07088 +0.58333 -0.06865 +0.59000 -0.06639 +0.59667 -0.06410 +0.60333 -0.06180 +0.61000 -0.05948 +0.61667 -0.05713 +0.62333 -0.05478 +0.63000 -0.05242 +0.63667 -0.05005 +0.64333 -0.04767 +0.65000 -0.04530 +0.65667 -0.04293 +0.66333 -0.04057 +0.67000 -0.03822 +0.67667 -0.03588 +0.68333 -0.03357 +0.69000 -0.03127 +0.69667 -0.02900 +0.70333 -0.02676 +0.71000 -0.02456 +0.71667 -0.02238 +0.72333 -0.02026 +0.73000 -0.01817 +0.73667 -0.01614 +0.74333 -0.01416 +0.75000 -0.01223 +0.75660 -0.01038 +0.76314 -0.00861 +0.76961 -0.00692 +0.77601 -0.00532 +0.78235 -0.00381 +0.78863 -0.00238 +0.79484 -0.00103 +0.80098 0.00023 +0.80706 0.00141 +0.81307 0.00250 +0.81902 0.00351 +0.82490 0.00444 +0.83072 0.00529 +0.83647 0.00606 +0.84216 0.00675 +0.84778 0.00737 +0.85333 0.00791 +0.85882 0.00839 +0.86425 0.00879 +0.86961 0.00913 +0.87490 0.00940 +0.88013 0.00961 +0.88529 0.00975 +0.89039 0.00983 +0.89542 0.00985 +0.90039 0.00982 +0.90529 0.00972 +0.91013 0.00957 +0.91490 0.00936 +0.91961 0.00910 +0.92425 0.00880 +0.92882 0.00844 +0.93333 0.00804 +0.93778 0.00760 +0.94216 0.00712 +0.94647 0.00660 +0.95072 0.00606 +0.95490 0.00549 +0.95902 0.00490 +0.96307 0.00429 +0.96706 0.00367 +0.97098 0.00303 +0.97484 0.00238 +0.97863 0.00173 +0.98235 0.00108 +0.98601 0.00043 +0.98961 -0.00022 +0.99314 -0.00086 +0.99660 -0.00149 +1.00000 -0.00213 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17.dat new file mode 100644 index 0000000000..2173054243 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17.dat @@ -0,0 +1,198 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU30 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU30_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -2.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.449 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.6138 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.008 Cd0 ! 2D drag coefficient value at 0-lift. + -0.09 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 143 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0267 0.0000 + -175.00 0.274 0.0370 0.1379 + -170.00 0.547 0.0968 0.2778 + -160.00 0.685 0.2876 0.2740 + -155.00 0.766 0.4025 0.3118 + -150.00 0.816 0.5232 0.3411 + -145.00 0.836 0.6454 0.3631 + -140.00 0.832 0.7656 0.3791 + -135.00 0.804 0.8807 0.3899 + -130.00 0.756 0.9882 0.3965 + -125.00 0.690 1.0861 0.3994 + -120.00 0.609 1.1730 0.3992 + -115.00 0.515 1.2474 0.3964 + -110.00 0.411 1.3084 0.3915 + -105.00 0.300 1.3552 0.3846 + -100.00 0.182 1.3875 0.3761 + -95.00 0.061 1.4048 0.3663 + -90.00 -0.061 1.4070 0.3551 + -85.00 -0.183 1.3941 0.3428 + -80.00 -0.302 1.3664 0.3295 + -75.00 -0.416 1.3240 0.3153 + -70.00 -0.523 1.2676 0.3001 + -65.00 -0.622 1.1978 0.2841 + -60.00 -0.708 1.1156 0.2672 + -55.00 -0.781 1.0220 0.2494 + -50.00 -0.838 0.9187 0.2308 + -45.00 -0.877 0.8074 0.2113 + -40.00 -0.895 0.6904 0.1909 + -35.00 -0.889 0.5703 0.1696 + -30.00 -0.858 0.4503 0.1475 + -25.00 -0.832 0.3357 0.1224 + -24.00 -0.852 0.3147 0.1156 + -23.00 -0.882 0.2946 0.1081 + -22.00 -0.919 0.2752 0.1000 + -21.00 -0.963 0.2566 0.0914 + -20.00 -1.013 0.2388 0.0823 + -19.00 -1.067 0.2218 0.0728 + -18.00 -1.125 0.2056 0.0631 + -17.00 -1.185 0.1901 0.0531 + -16.00 -1.245 0.1754 0.0430 + -15.25 -1.290 0.1649 0.0353 + -14.24 -1.229 0.1461 0.0240 + -13.24 -1.148 0.1263 0.0100 + -12.22 -1.052 0.1051 -0.0090 + -11.22 -0.965 0.0886 -0.0230 + -10.19 -0.867 0.0740 -0.0336 + -9.70 -0.822 0.0684 -0.0375 + -9.18 -0.769 0.0605 -0.0440 + -8.18 -0.756 0.0270 -0.0578 + -7.19 -0.690 0.0180 -0.0590 + -6.65 -0.616 0.0166 -0.0633 + -6.13 -0.542 0.0152 -0.0674 + -6.00 -0.525 0.0117 -0.0732 + -5.50 -0.451 0.0105 -0.0766 + -5.00 -0.382 0.0097 -0.0797 + -4.50 -0.314 0.0092 -0.0825 + -4.00 -0.251 0.0091 -0.0853 + -3.50 -0.189 0.0089 -0.0884 + -3.00 -0.120 0.0089 -0.0914 + -2.50 -0.051 0.0088 -0.0942 + -2.00 0.017 0.0088 -0.0969 + -1.50 0.085 0.0088 -0.0994 + -1.00 0.152 0.0088 -0.1018 + -0.50 0.219 0.0088 -0.1041 + 0.00 0.288 0.0087 -0.1062 + 0.50 0.354 0.0087 -0.1086 + 1.00 0.421 0.0088 -0.1107 + 1.50 0.487 0.0089 -0.1129 + 2.00 0.554 0.0090 -0.1149 + 2.50 0.619 0.0091 -0.1168 + 3.00 0.685 0.0092 -0.1185 + 3.50 0.749 0.0093 -0.1201 + 4.00 0.815 0.0095 -0.1218 + 4.50 0.879 0.0096 -0.1233 + 5.00 0.944 0.0097 -0.1248 + 5.50 1.008 0.0099 -0.1260 + 6.00 1.072 0.0101 -0.1270 + 6.50 1.135 0.0103 -0.1280 + 7.00 1.197 0.0107 -0.1287 + 7.50 1.256 0.0112 -0.1289 + 8.00 1.305 0.0125 -0.1270 + 9.00 1.390 0.0155 -0.1207 + 9.50 1.424 0.0171 -0.1158 + 10.00 1.458 0.0192 -0.1116 + 10.50 1.488 0.0219 -0.1073 + 11.00 1.512 0.0255 -0.1029 + 11.50 1.533 0.0307 -0.0983 + 12.00 1.549 0.0370 -0.0949 + 12.50 1.558 0.0452 -0.0921 + 13.00 1.470 0.0630 -0.0899 + 13.50 1.398 0.0784 -0.0885 + 14.00 1.354 0.0931 -0.0885 + 14.50 1.336 0.1081 -0.0902 + 15.00 1.333 0.1239 -0.0928 + 15.50 1.326 0.1415 -0.0963 + 16.00 1.329 0.1592 -0.1006 + 16.50 1.326 0.1743 -0.1042 + 17.00 1.321 0.1903 -0.1084 + 17.50 1.331 0.2044 -0.1125 + 18.00 1.333 0.2186 -0.1169 + 18.50 1.340 0.2324 -0.1215 + 19.00 1.362 0.2455 -0.1263 + 19.50 1.382 0.2584 -0.1313 + 20.00 1.398 0.2689 -0.1352 + 20.50 1.426 0.2814 -0.1406 + 21.00 1.437 0.2943 -0.1462 + 22.00 1.418 0.3246 -0.1516 + 23.00 1.397 0.3557 -0.1570 + 24.00 1.376 0.3875 -0.1623 + 25.00 1.354 0.4198 -0.1676 + 26.00 1.332 0.4524 -0.1728 + 28.00 1.293 0.5183 -0.1832 + 30.00 1.265 0.5843 -0.1935 + 32.00 1.253 0.6492 -0.2039 + 35.00 1.264 0.7438 -0.2193 + 40.00 1.258 0.8970 -0.2440 + 45.00 1.217 1.0402 -0.2672 + 50.00 1.146 1.1686 -0.2891 + 55.00 1.049 1.2779 -0.3097 + 60.00 0.932 1.3647 -0.3290 + 65.00 0.799 1.4267 -0.3471 + 70.00 0.657 1.4621 -0.3641 + 75.00 0.509 1.4708 -0.3799 + 80.00 0.362 1.4544 -0.3946 + 85.00 0.221 1.4196 -0.4081 + 90.00 0.092 1.3938 -0.4204 + 95.00 -0.030 1.3943 -0.4313 + 100.00 -0.150 1.3798 -0.4408 + 105.00 -0.267 1.3504 -0.4486 + 110.00 -0.379 1.3063 -0.4546 + 115.00 -0.483 1.2481 -0.4584 + 120.00 -0.578 1.1763 -0.4597 + 125.00 -0.660 1.0919 -0.4582 + 130.00 -0.727 0.9962 -0.4532 + 135.00 -0.777 0.8906 -0.4441 + 140.00 -0.807 0.7771 -0.4303 + 145.00 -0.815 0.6581 -0.4109 + 150.00 -0.797 0.5364 -0.3848 + 155.00 -0.750 0.4157 -0.3508 + 160.00 -0.673 0.3000 -0.3074 + 170.00 -0.547 0.1051 -0.2786 + 175.00 -0.274 0.0388 -0.1380 + 180.00 0.000 0.0267 0.0000 + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17_coords.txt new file mode 100644 index 0000000000..0f010f6506 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU30_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! DU 97-W-300.lm +! x/c y/c +1.00000 0.00246 +0.99660 0.00340 +0.99314 0.00437 +0.98961 0.00536 +0.98601 0.00638 +0.98235 0.00740 +0.97863 0.00843 +0.97484 0.00947 +0.97098 0.01051 +0.96706 0.01157 +0.96307 0.01264 +0.95902 0.01371 +0.95490 0.01479 +0.95072 0.01588 +0.94647 0.01698 +0.94216 0.01810 +0.93778 0.01922 +0.93333 0.02036 +0.92882 0.02151 +0.92425 0.02268 +0.91961 0.02386 +0.91490 0.02505 +0.91013 0.02626 +0.90529 0.02749 +0.90039 0.02873 +0.89542 0.02999 +0.89039 0.03126 +0.88529 0.03255 +0.88013 0.03385 +0.87490 0.03516 +0.86961 0.03649 +0.86425 0.03784 +0.85882 0.03921 +0.85333 0.04058 +0.84778 0.04197 +0.84216 0.04337 +0.83647 0.04479 +0.83072 0.04622 +0.82490 0.04767 +0.81902 0.04913 +0.81307 0.05060 +0.80706 0.05208 +0.80098 0.05357 +0.79484 0.05508 +0.78863 0.05659 +0.78235 0.05812 +0.77601 0.05965 +0.76961 0.06120 +0.76314 0.06275 +0.75660 0.06432 +0.75000 0.06589 +0.74333 0.06747 +0.73667 0.06904 +0.73000 0.07061 +0.72333 0.07217 +0.71667 0.07371 +0.71000 0.07525 +0.70333 0.07678 +0.69667 0.07830 +0.69000 0.07981 +0.68333 0.08131 +0.67667 0.08280 +0.67000 0.08428 +0.66333 0.08575 +0.65667 0.08720 +0.65000 0.08864 +0.64333 0.09008 +0.63667 0.09149 +0.63000 0.09290 +0.62333 0.09429 +0.61667 0.09566 +0.61000 0.09703 +0.60333 0.09837 +0.59667 0.09970 +0.59000 0.10102 +0.58333 0.10232 +0.57667 0.10360 +0.57000 0.10486 +0.56333 0.10611 +0.55667 0.10734 +0.55000 0.10855 +0.54333 0.10975 +0.53667 0.11092 +0.53000 0.11207 +0.52333 0.11321 +0.51667 0.11432 +0.51000 0.11541 +0.50333 0.11648 +0.49667 0.11752 +0.49000 0.11854 +0.48333 0.11954 +0.47667 0.12051 +0.47000 0.12146 +0.46333 0.12239 +0.45667 0.12328 +0.45000 0.12415 +0.44333 0.12500 +0.43667 0.12581 +0.43000 0.12659 +0.42333 0.12734 +0.41667 0.12806 +0.41000 0.12875 +0.40333 0.12940 +0.39667 0.13001 +0.39000 0.13059 +0.38333 0.13113 +0.37667 0.13164 +0.37000 0.13210 +0.36333 0.13252 +0.35667 0.13290 +0.35000 0.13323 +0.34333 0.13352 +0.33667 0.13377 +0.33000 0.13396 +0.32333 0.13411 +0.31667 0.13420 +0.31000 0.13424 +0.30333 0.13422 +0.29667 0.13415 +0.29000 0.13401 +0.28333 0.13381 +0.27667 0.13355 +0.27000 0.13321 +0.26333 0.13280 +0.25667 0.13231 +0.25000 0.13174 +0.24342 0.13109 +0.23693 0.13036 +0.23053 0.12955 +0.22421 0.12866 +0.21798 0.12771 +0.21184 0.12668 +0.20579 0.12559 +0.19982 0.12444 +0.19395 0.12324 +0.18816 0.12197 +0.18245 0.12066 +0.17684 0.11930 +0.17131 0.11789 +0.16587 0.11644 +0.16052 0.11495 +0.15526 0.11342 +0.15008 0.11185 +0.14499 0.11024 +0.13999 0.10860 +0.13508 0.10693 +0.13026 0.10522 +0.12552 0.10348 +0.12087 0.10172 +0.11631 0.09993 +0.11183 0.09811 +0.10745 0.09627 +0.10315 0.09441 +0.09893 0.09252 +0.09481 0.09061 +0.09077 0.08869 +0.08683 0.08675 +0.08297 0.08478 +0.07919 0.08280 +0.07551 0.08082 +0.07191 0.07881 +0.06840 0.07680 +0.06498 0.07477 +0.06164 0.07274 +0.05840 0.07070 +0.05524 0.06865 +0.05217 0.06660 +0.04918 0.06454 +0.04629 0.06248 +0.04348 0.06042 +0.04076 0.05835 +0.03812 0.05629 +0.03558 0.05423 +0.03312 0.05217 +0.03075 0.05012 +0.02847 0.04808 +0.02627 0.04604 +0.02417 0.04402 +0.02215 0.04200 +0.02022 0.03999 +0.01837 0.03799 +0.01662 0.03602 +0.01495 0.03405 +0.01337 0.03211 +0.01187 0.03017 +0.01047 0.02827 +0.00915 0.02637 +0.00792 0.02450 +0.00678 0.02266 +0.00572 0.02083 +0.00476 0.01904 +0.00388 0.01725 +0.00309 0.01548 +0.00238 0.01370 +0.00177 0.01194 +0.00124 0.01010 +0.00080 0.00820 +0.00044 0.00612 +0.00018 0.00390 +0.00000 0.00000 +0.00018 -0.00382 +0.00044 -0.00601 +0.00080 -0.00815 +0.00124 -0.01017 +0.00177 -0.01216 +0.00238 -0.01412 +0.00309 -0.01611 +0.00388 -0.01811 +0.00476 -0.02014 +0.00572 -0.02217 +0.00678 -0.02423 +0.00792 -0.02630 +0.00915 -0.02840 +0.01047 -0.03053 +0.01187 -0.03267 +0.01337 -0.03485 +0.01495 -0.03705 +0.01662 -0.03929 +0.01837 -0.04154 +0.02022 -0.04385 +0.02215 -0.04617 +0.02417 -0.04852 +0.02627 -0.05088 +0.02847 -0.05328 +0.03075 -0.05569 +0.03312 -0.05813 +0.03558 -0.06060 +0.03812 -0.06308 +0.04076 -0.06559 +0.04348 -0.06811 +0.04629 -0.07064 +0.04918 -0.07318 +0.05217 -0.07574 +0.05524 -0.07831 +0.05840 -0.08088 +0.06164 -0.08345 +0.06498 -0.08604 +0.06840 -0.08862 +0.07191 -0.09121 +0.07551 -0.09379 +0.07919 -0.09637 +0.08297 -0.09895 +0.08683 -0.10152 +0.09077 -0.10408 +0.09481 -0.10665 +0.09893 -0.10919 +0.10315 -0.11173 +0.10745 -0.11425 +0.11183 -0.11675 +0.11631 -0.11923 +0.12087 -0.12169 +0.12552 -0.12412 +0.13026 -0.12652 +0.13508 -0.12888 +0.13999 -0.13121 +0.14499 -0.13350 +0.15008 -0.13576 +0.15526 -0.13797 +0.16052 -0.14014 +0.16587 -0.14225 +0.17131 -0.14432 +0.17684 -0.14633 +0.18245 -0.14828 +0.18816 -0.15017 +0.19395 -0.15198 +0.19982 -0.15371 +0.20579 -0.15537 +0.21184 -0.15693 +0.21798 -0.15840 +0.22421 -0.15976 +0.23053 -0.16101 +0.23693 -0.16214 +0.24342 -0.16314 +0.25000 -0.16399 +0.25667 -0.16470 +0.26333 -0.16526 +0.27000 -0.16567 +0.27667 -0.16592 +0.28333 -0.16602 +0.29000 -0.16598 +0.29667 -0.16580 +0.30333 -0.16548 +0.31000 -0.16503 +0.31667 -0.16445 +0.32333 -0.16374 +0.33000 -0.16291 +0.33667 -0.16198 +0.34333 -0.16094 +0.35000 -0.15980 +0.35667 -0.15855 +0.36333 -0.15722 +0.37000 -0.15580 +0.37667 -0.15429 +0.38333 -0.15270 +0.39000 -0.15104 +0.39667 -0.14931 +0.40333 -0.14752 +0.41000 -0.14566 +0.41667 -0.14374 +0.42333 -0.14178 +0.43000 -0.13977 +0.43667 -0.13772 +0.44333 -0.13562 +0.45000 -0.13348 +0.45667 -0.13130 +0.46333 -0.12908 +0.47000 -0.12683 +0.47667 -0.12456 +0.48333 -0.12225 +0.49000 -0.11992 +0.49667 -0.11757 +0.50333 -0.11520 +0.51000 -0.11281 +0.51667 -0.11040 +0.52333 -0.10799 +0.53000 -0.10555 +0.53667 -0.10310 +0.54333 -0.10065 +0.55000 -0.09818 +0.55667 -0.09570 +0.56333 -0.09321 +0.57000 -0.09071 +0.57667 -0.08821 +0.58333 -0.08571 +0.59000 -0.08320 +0.59667 -0.08070 +0.60333 -0.07819 +0.61000 -0.07569 +0.61667 -0.07319 +0.62333 -0.07070 +0.63000 -0.06820 +0.63667 -0.06572 +0.64333 -0.06325 +0.65000 -0.06079 +0.65667 -0.05834 +0.66333 -0.05590 +0.67000 -0.05347 +0.67667 -0.05106 +0.68333 -0.04867 +0.69000 -0.04629 +0.69667 -0.04394 +0.70333 -0.04161 +0.71000 -0.03931 +0.71667 -0.03703 +0.72333 -0.03478 +0.73000 -0.03256 +0.73667 -0.03037 +0.74333 -0.02822 +0.75000 -0.02610 +0.75660 -0.02405 +0.76314 -0.02205 +0.76961 -0.02013 +0.77601 -0.01827 +0.78235 -0.01647 +0.78863 -0.01474 +0.79484 -0.01309 +0.80098 -0.01150 +0.80706 -0.00998 +0.81307 -0.00854 +0.81902 -0.00717 +0.82490 -0.00586 +0.83072 -0.00462 +0.83647 -0.00346 +0.84216 -0.00236 +0.84778 -0.00133 +0.85333 -0.00037 +0.85882 0.00052 +0.86425 0.00134 +0.86961 0.00210 +0.87490 0.00278 +0.88013 0.00340 +0.88529 0.00395 +0.89039 0.00444 +0.89542 0.00487 +0.90039 0.00524 +0.90529 0.00555 +0.91013 0.00580 +0.91490 0.00600 +0.91961 0.00614 +0.92425 0.00622 +0.92882 0.00625 +0.93333 0.00623 +0.93778 0.00615 +0.94216 0.00602 +0.94647 0.00583 +0.95072 0.00558 +0.95490 0.00528 +0.95902 0.00493 +0.96307 0.00452 +0.96706 0.00405 +0.97098 0.00352 +0.97484 0.00294 +0.97863 0.00231 +0.98235 0.00163 +0.98601 0.00090 +0.98961 0.00012 +0.99314 -0.00071 +0.99660 -0.00158 +1.00000 -0.00246 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17.dat new file mode 100644 index 0000000000..750b46ecbf --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17.dat @@ -0,0 +1,189 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU35 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU35_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -1.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 11.5 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -11.5 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.6717 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3075 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.012 Cd0 ! 2D drag coefficient value at 0-lift. + -0.07 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 135 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0407 0.0000 + -175.00 0.223 0.0507 0.0937 + -170.00 0.405 0.1055 0.1702 + -160.00 0.658 0.2982 0.2819 + -155.00 0.733 0.4121 0.3213 + -150.00 0.778 0.5308 0.3520 + -145.00 0.795 0.6503 0.3754 + -140.00 0.787 0.7672 0.3926 + -135.00 0.757 0.8785 0.4046 + -130.00 0.708 0.9819 0.4121 + -125.00 0.641 1.0756 0.4160 + -120.00 0.560 1.1580 0.4167 + -115.00 0.467 1.2280 0.4146 + -110.00 0.365 1.2847 0.4104 + -105.00 0.255 1.3274 0.4041 + -100.00 0.139 1.3557 0.3961 + -95.00 0.021 1.3692 0.3867 + -90.00 -0.098 1.3680 0.3759 + -85.00 -0.216 1.3521 0.3639 + -80.00 -0.331 1.3218 0.3508 + -75.00 -0.441 1.2773 0.3367 + -70.00 -0.544 1.2193 0.3216 + -65.00 -0.638 1.1486 0.3054 + -60.00 -0.720 1.0660 0.2884 + -55.00 -0.788 0.9728 0.2703 + -50.00 -0.840 0.8705 0.2512 + -45.00 -0.875 0.7611 0.2311 + -40.00 -0.889 0.6466 0.2099 + -35.00 -0.880 0.5299 0.1876 + -30.00 -0.846 0.4141 0.1641 + -25.00 -0.784 0.3030 0.1396 + -24.00 -0.768 0.2817 0.1345 + -23.00 -0.751 0.2608 0.1294 + -22.00 -0.733 0.2404 0.1243 + -21.00 -0.714 0.2205 0.1191 + -20.00 -0.693 0.2011 0.1139 + -19.00 -0.671 0.1822 0.1086 + -18.00 -0.648 0.1640 0.1032 + -17.00 -0.624 0.1465 0.0975 + -16.00 -0.601 0.1300 0.0898 + -15.00 -0.579 0.1145 0.0799 + -14.00 -0.559 0.1000 0.0682 + -13.00 -0.539 0.0867 0.0547 + -12.00 -0.519 0.0744 0.0397 + -11.00 -0.499 0.0633 0.0234 + -10.00 -0.480 0.0534 0.0060 + -5.54 -0.385 0.0245 -0.0800 + -5.04 -0.359 0.0225 -0.0800 + -4.54 -0.360 0.0196 -0.0800 + -4.04 -0.355 0.0174 -0.0800 + -3.54 -0.307 0.0162 -0.0800 + -3.04 -0.246 0.0144 -0.0800 + -3.00 -0.240 0.0240 -0.0623 + -2.50 -0.163 0.0188 -0.0674 + -2.00 -0.091 0.0160 -0.0712 + -1.50 -0.019 0.0137 -0.0746 + -1.00 0.052 0.0118 -0.0778 + -0.50 0.121 0.0104 -0.0806 + 0.00 0.196 0.0094 -0.0831 + 0.50 0.265 0.0096 -0.0863 + 1.00 0.335 0.0098 -0.0895 + 1.50 0.404 0.0099 -0.0924 + 2.00 0.472 0.0100 -0.0949 + 2.50 0.540 0.0102 -0.0973 + 3.00 0.608 0.0103 -0.0996 + 3.50 0.674 0.0104 -0.1016 + 4.00 0.742 0.0105 -0.1037 + 4.50 0.809 0.0107 -0.1057 + 5.00 0.875 0.0108 -0.1076 + 5.50 0.941 0.0109 -0.1094 + 6.00 1.007 0.0110 -0.1109 + 6.50 1.071 0.0113 -0.1118 + 7.00 1.134 0.0115 -0.1127 + 7.50 1.198 0.0117 -0.1138 + 8.00 1.260 0.0120 -0.1144 + 8.50 1.318 0.0126 -0.1137 + 9.00 1.368 0.0133 -0.1112 + 9.50 1.422 0.0143 -0.1100 + 10.00 1.475 0.0156 -0.1086 + 10.50 1.523 0.0174 -0.1064 + 11.00 1.570 0.0194 -0.1044 + 11.50 1.609 0.0227 -0.1013 + 12.00 1.642 0.0269 -0.0980 + 12.50 1.675 0.0319 -0.0953 + 13.00 1.700 0.0398 -0.0925 + 13.50 1.717 0.0488 -0.0896 + 14.00 1.712 0.0614 -0.0864 + 14.50 1.703 0.0786 -0.0840 + 15.50 1.671 0.1173 -0.0830 + 16.00 1.649 0.1377 -0.0848 + 16.50 1.621 0.1600 -0.0880 + 17.00 1.598 0.1814 -0.0926 + 17.50 1.571 0.2042 -0.0984 + 18.00 1.549 0.2316 -0.1052 + 19.00 1.544 0.2719 -0.1158 + 19.50 1.549 0.2906 -0.1213 + 20.00 1.565 0.3085 -0.1248 + 21.00 1.565 0.3447 -0.1317 + 22.00 1.563 0.3820 -0.1385 + 23.00 1.558 0.4203 -0.1452 + 24.00 1.552 0.4593 -0.1518 + 25.00 1.546 0.4988 -0.1583 + 26.00 1.539 0.5387 -0.1647 + 28.00 1.527 0.6187 -0.1770 + 30.00 1.522 0.6978 -0.1886 + 32.00 1.529 0.7747 -0.1994 + 35.00 1.544 0.8869 -0.2148 + 40.00 1.529 1.0671 -0.2392 + 45.00 1.471 1.2319 -0.2622 + 50.00 1.376 1.3747 -0.2839 + 55.00 1.249 1.4899 -0.3043 + 60.00 1.097 1.5728 -0.3236 + 65.00 0.928 1.6202 -0.3417 + 70.00 0.750 1.6302 -0.3586 + 75.00 0.570 1.6031 -0.3745 + 80.00 0.396 1.5423 -0.3892 + 85.00 0.237 1.4598 -0.4028 + 90.00 0.101 1.4041 -0.4151 + 95.00 -0.022 1.4053 -0.4261 + 100.00 -0.143 1.3914 -0.4357 + 105.00 -0.261 1.3625 -0.4437 + 110.00 -0.374 1.3188 -0.4498 + 115.00 -0.480 1.2608 -0.4538 + 120.00 -0.575 1.1891 -0.4553 + 125.00 -0.659 1.1046 -0.4540 + 130.00 -0.727 1.0086 -0.4492 + 135.00 -0.778 0.9025 -0.4405 + 140.00 -0.809 0.7883 -0.4270 + 145.00 -0.818 0.6684 -0.4078 + 150.00 -0.800 0.5457 -0.3821 + 155.00 -0.754 0.4236 -0.3484 + 160.00 -0.677 0.3066 -0.3054 + 170.00 -0.417 0.1085 -0.1842 + 175.00 -0.229 0.0510 -0.1013 + 180.00 0.000 0.0407 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17_coords.txt new file mode 100644 index 0000000000..b1b81649b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU35_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU 35 +! x/c y/c +1.00000 0.00283 +0.99660 0.00378 +0.99314 0.00477 +0.98961 0.00578 +0.98601 0.00683 +0.98235 0.00789 +0.97863 0.00897 +0.97484 0.01006 +0.97098 0.01116 +0.96706 0.01228 +0.96307 0.01342 +0.95902 0.01456 +0.95490 0.01571 +0.95072 0.01688 +0.94647 0.01806 +0.94216 0.01926 +0.93778 0.02046 +0.93333 0.02169 +0.92882 0.02292 +0.92425 0.02419 +0.91961 0.02547 +0.91490 0.02675 +0.91013 0.02807 +0.90529 0.02941 +0.90039 0.03077 +0.89542 0.03214 +0.89039 0.03353 +0.88529 0.03495 +0.88013 0.03638 +0.87490 0.03782 +0.86961 0.03929 +0.86425 0.04079 +0.85882 0.04230 +0.85333 0.04383 +0.84778 0.04538 +0.84216 0.04694 +0.83647 0.04853 +0.83072 0.05013 +0.82490 0.05176 +0.81902 0.05340 +0.81307 0.05506 +0.80706 0.05673 +0.80098 0.05842 +0.79484 0.06013 +0.78863 0.06184 +0.78235 0.06358 +0.77601 0.06531 +0.76961 0.06708 +0.76314 0.06885 +0.75660 0.07064 +0.75000 0.07244 +0.74333 0.07426 +0.73667 0.07606 +0.73000 0.07786 +0.72333 0.07966 +0.71667 0.08144 +0.71000 0.08322 +0.70333 0.08498 +0.69667 0.08674 +0.69000 0.08849 +0.68333 0.09022 +0.67667 0.09196 +0.67000 0.09368 +0.66333 0.09539 +0.65667 0.09708 +0.65000 0.09876 +0.64333 0.10044 +0.63667 0.10210 +0.63000 0.10375 +0.62333 0.10538 +0.61667 0.10699 +0.61000 0.10859 +0.60333 0.11017 +0.59667 0.11174 +0.59000 0.11330 +0.58333 0.11483 +0.57667 0.11634 +0.57000 0.11784 +0.56333 0.11931 +0.55667 0.12077 +0.55000 0.12220 +0.54333 0.12363 +0.53667 0.12502 +0.53000 0.12639 +0.52333 0.12775 +0.51667 0.12907 +0.51000 0.13037 +0.50333 0.13165 +0.49667 0.13289 +0.49000 0.13411 +0.48333 0.13531 +0.47667 0.13648 +0.47000 0.13761 +0.46333 0.13873 +0.45667 0.13980 +0.45000 0.14086 +0.44333 0.14189 +0.43667 0.14288 +0.43000 0.14384 +0.42333 0.14477 +0.41667 0.14566 +0.41000 0.14653 +0.40333 0.14736 +0.39667 0.14814 +0.39000 0.14889 +0.38333 0.14960 +0.37667 0.15028 +0.37000 0.15091 +0.36333 0.15151 +0.35667 0.15207 +0.35000 0.15258 +0.34333 0.15306 +0.33667 0.15351 +0.33000 0.15391 +0.32333 0.15426 +0.31667 0.15457 +0.31000 0.15482 +0.30333 0.15502 +0.29667 0.15516 +0.29000 0.15524 +0.28333 0.15525 +0.27667 0.15520 +0.27000 0.15507 +0.26333 0.15486 +0.25667 0.15457 +0.25000 0.15419 +0.24342 0.15372 +0.23693 0.15316 +0.23053 0.15250 +0.22421 0.15175 +0.21798 0.15094 +0.21184 0.15002 +0.20579 0.14904 +0.19982 0.14798 +0.19395 0.14686 +0.18816 0.14566 +0.18245 0.14439 +0.17684 0.14308 +0.17131 0.14169 +0.16587 0.14025 +0.16052 0.13875 +0.15526 0.13721 +0.15008 0.13561 +0.14499 0.13396 +0.13999 0.13226 +0.13508 0.13052 +0.13026 0.12873 +0.12552 0.12689 +0.12087 0.12502 +0.11631 0.12311 +0.11183 0.12115 +0.10745 0.11917 +0.10315 0.11715 +0.09893 0.11509 +0.09481 0.11299 +0.09077 0.11087 +0.08683 0.10871 +0.08297 0.10652 +0.07919 0.10430 +0.07551 0.10207 +0.07191 0.09979 +0.06840 0.09750 +0.06498 0.09517 +0.06164 0.09284 +0.05840 0.09048 +0.05524 0.08809 +0.05217 0.08569 +0.04918 0.08327 +0.04629 0.08084 +0.04348 0.07839 +0.04076 0.07592 +0.03812 0.07345 +0.03558 0.07096 +0.03312 0.06847 +0.03075 0.06597 +0.02847 0.06348 +0.02627 0.06097 +0.02417 0.05847 +0.02215 0.05596 +0.02022 0.05344 +0.01837 0.05091 +0.01662 0.04841 +0.01495 0.04589 +0.01337 0.04339 +0.01187 0.04088 +0.01047 0.03840 +0.00915 0.03591 +0.00792 0.03343 +0.00678 0.03096 +0.00572 0.02845 +0.00476 0.02592 +0.00388 0.02329 +0.00309 0.02056 +0.00238 0.01774 +0.00177 0.01503 +0.00124 0.01240 +0.00080 0.00990 +0.00044 0.00733 +0.00018 0.00465 +0.00000 0.00000 +0.00018 -0.00461 +0.00044 -0.00726 +0.00080 -0.00990 +0.00124 -0.01246 +0.00177 -0.01509 +0.00238 -0.01776 +0.00309 -0.02049 +0.00388 -0.02317 +0.00476 -0.02585 +0.00572 -0.02848 +0.00678 -0.03112 +0.00792 -0.03376 +0.00915 -0.03642 +0.01047 -0.03911 +0.01187 -0.04178 +0.01337 -0.04450 +0.01495 -0.04721 +0.01662 -0.04995 +0.01837 -0.05269 +0.02022 -0.05547 +0.02215 -0.05825 +0.02417 -0.06105 +0.02627 -0.06386 +0.02847 -0.06670 +0.03075 -0.06955 +0.03312 -0.07244 +0.03558 -0.07536 +0.03812 -0.07828 +0.04076 -0.08125 +0.04348 -0.08422 +0.04629 -0.08720 +0.04918 -0.09020 +0.05217 -0.09321 +0.05524 -0.09622 +0.05840 -0.09925 +0.06164 -0.10225 +0.06498 -0.10528 +0.06840 -0.10829 +0.07191 -0.11131 +0.07551 -0.11431 +0.07919 -0.11730 +0.08297 -0.12028 +0.08683 -0.12325 +0.09077 -0.12619 +0.09481 -0.12914 +0.09893 -0.13205 +0.10315 -0.13494 +0.10745 -0.13780 +0.11183 -0.14065 +0.11631 -0.14345 +0.12087 -0.14624 +0.12552 -0.14898 +0.13026 -0.15169 +0.13508 -0.15435 +0.13999 -0.15697 +0.14499 -0.15954 +0.15008 -0.16207 +0.15526 -0.16454 +0.16052 -0.16696 +0.16587 -0.16932 +0.17131 -0.17163 +0.17684 -0.17387 +0.18245 -0.17603 +0.18816 -0.17814 +0.19395 -0.18015 +0.19982 -0.18207 +0.20579 -0.18391 +0.21184 -0.18564 +0.21798 -0.18727 +0.22421 -0.18877 +0.23053 -0.19015 +0.23693 -0.19140 +0.24342 -0.19250 +0.25000 -0.19343 +0.25667 -0.19420 +0.26333 -0.19481 +0.27000 -0.19525 +0.27667 -0.19552 +0.28333 -0.19562 +0.29000 -0.19556 +0.29667 -0.19535 +0.30333 -0.19498 +0.31000 -0.19448 +0.31667 -0.19383 +0.32333 -0.19303 +0.33000 -0.19211 +0.33667 -0.19107 +0.34333 -0.18991 +0.35000 -0.18864 +0.35667 -0.18725 +0.36333 -0.18577 +0.37000 -0.18418 +0.37667 -0.18251 +0.38333 -0.18074 +0.39000 -0.17889 +0.39667 -0.17695 +0.40333 -0.17496 +0.41000 -0.17288 +0.41667 -0.17074 +0.42333 -0.16855 +0.43000 -0.16631 +0.43667 -0.16402 +0.44333 -0.16167 +0.45000 -0.15929 +0.45667 -0.15684 +0.46333 -0.15436 +0.47000 -0.15185 +0.47667 -0.14930 +0.48333 -0.14671 +0.49000 -0.14410 +0.49667 -0.14147 +0.50333 -0.13881 +0.51000 -0.13613 +0.51667 -0.13342 +0.52333 -0.13071 +0.53000 -0.12797 +0.53667 -0.12522 +0.54333 -0.12247 +0.55000 -0.11970 +0.55667 -0.11692 +0.56333 -0.11413 +0.57000 -0.11133 +0.57667 -0.10853 +0.58333 -0.10573 +0.59000 -0.10293 +0.59667 -0.10014 +0.60333 -0.09734 +0.61000 -0.09456 +0.61667 -0.09178 +0.62333 -0.08901 +0.63000 -0.08624 +0.63667 -0.08348 +0.64333 -0.08074 +0.65000 -0.07801 +0.65667 -0.07529 +0.66333 -0.07257 +0.67000 -0.06987 +0.67667 -0.06719 +0.68333 -0.06452 +0.69000 -0.06186 +0.69667 -0.05922 +0.70333 -0.05661 +0.71000 -0.05401 +0.71667 -0.05144 +0.72333 -0.04889 +0.73000 -0.04637 +0.73667 -0.04386 +0.74333 -0.04140 +0.75000 -0.03896 +0.75660 -0.03658 +0.76314 -0.03425 +0.76961 -0.03199 +0.77601 -0.02979 +0.78235 -0.02765 +0.78863 -0.02557 +0.79484 -0.02357 +0.80098 -0.02162 +0.80706 -0.01974 +0.81307 -0.01794 +0.81902 -0.01621 +0.82490 -0.01454 +0.83072 -0.01294 +0.83647 -0.01142 +0.84216 -0.00996 +0.84778 -0.00858 +0.85333 -0.00727 +0.85882 -0.00604 +0.86425 -0.00487 +0.86961 -0.00377 +0.87490 -0.00276 +0.88013 -0.00182 +0.88529 -0.00095 +0.89039 -0.00014 +0.89542 0.00061 +0.90039 0.00128 +0.90529 0.00189 +0.91013 0.00243 +0.91490 0.00293 +0.91961 0.00335 +0.92425 0.00370 +0.92882 0.00401 +0.93333 0.00425 +0.93778 0.00441 +0.94216 0.00452 +0.94647 0.00455 +0.95072 0.00451 +0.95490 0.00439 +0.95902 0.00420 +0.96307 0.00394 +0.96706 0.00358 +0.97098 0.00315 +0.97484 0.00264 +0.97863 0.00206 +0.98235 0.00141 +0.98601 0.00069 +0.98961 -0.00011 +0.99314 -0.00097 +0.99660 -0.00190 +1.00000 -0.00283 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17.dat new file mode 100644 index 0000000000..3882d07ad9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17.dat @@ -0,0 +1,190 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! DU40 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"DU40_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -3.2 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.3519 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.3226 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.03 Cd0 ! 2D drag coefficient value at 0-lift. + -0.05 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] + 0.2 x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"DEFAULT" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 136 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0602 0.0000 + -175.00 0.218 0.0699 0.0934 + -170.00 0.397 0.1107 0.1697 + -160.00 0.642 0.3045 0.2813 + -155.00 0.715 0.4179 0.3208 + -150.00 0.757 0.5355 0.3516 + -145.00 0.772 0.6535 0.3752 + -140.00 0.762 0.7685 0.3926 + -135.00 0.731 0.8777 0.4048 + -130.00 0.680 0.9788 0.4126 + -125.00 0.613 1.0700 0.4166 + -120.00 0.532 1.1499 0.4176 + -115.00 0.439 1.2174 0.4158 + -110.00 0.337 1.2716 0.4117 + -105.00 0.228 1.3118 0.4057 + -100.00 0.114 1.3378 0.3979 + -95.00 -0.002 1.3492 0.3887 + -90.00 -0.120 1.3460 0.3781 + -85.00 -0.236 1.3283 0.3663 + -80.00 -0.349 1.2964 0.3534 + -75.00 -0.456 1.2507 0.3394 + -70.00 -0.557 1.1918 0.3244 + -65.00 -0.647 1.1204 0.3084 + -60.00 -0.727 1.0376 0.2914 + -55.00 -0.792 0.9446 0.2733 + -50.00 -0.842 0.8429 0.2543 + -45.00 -0.874 0.7345 0.2342 + -40.00 -0.886 0.6215 0.2129 + -35.00 -0.875 0.5067 0.1906 + -30.00 -0.839 0.3932 0.1670 + -25.00 -0.777 0.2849 0.1422 + -24.00 -0.761 0.2642 0.1371 + -23.00 -0.744 0.2440 0.1320 + -22.00 -0.725 0.2242 0.1268 + -21.00 -0.706 0.2049 0.1215 + -20.00 -0.685 0.1861 0.1162 + -19.00 -0.662 0.1687 0.1097 + -18.00 -0.635 0.1533 0.1012 + -17.00 -0.605 0.1398 0.0907 + -16.00 -0.571 0.1281 0.0784 + -15.00 -0.534 0.1183 0.0646 + -14.00 -0.494 0.1101 0.0494 + -13.00 -0.452 0.1036 0.0330 + -12.00 -0.407 0.0986 0.0156 + -11.00 -0.360 0.0951 -0.0026 + -10.00 -0.311 0.0931 -0.0213 + -8.00 -0.208 0.0930 -0.0600 + -6.00 -0.111 0.0689 -0.0500 + -5.50 -0.090 0.0614 -0.0516 + -5.00 -0.072 0.0547 -0.0532 + -4.50 -0.065 0.0480 -0.0538 + -4.00 -0.054 0.0411 -0.0544 + -3.50 -0.017 0.0349 -0.0554 + -3.00 0.003 0.0299 -0.0558 + -2.50 0.014 0.0255 -0.0555 + -2.00 0.009 0.0198 -0.0534 + -1.50 0.004 0.0164 -0.0442 + -1.00 0.036 0.0147 -0.0469 + -0.50 0.073 0.0137 -0.0522 + 0.00 0.137 0.0113 -0.0573 + 0.50 0.213 0.0114 -0.0644 + 1.00 0.292 0.0118 -0.0718 + 1.50 0.369 0.0122 -0.0783 + 2.00 0.444 0.0124 -0.0835 + 2.50 0.514 0.0124 -0.0866 + 3.00 0.580 0.0123 -0.0887 + 3.50 0.645 0.0120 -0.0900 + 4.00 0.710 0.0119 -0.0914 + 4.50 0.776 0.0122 -0.0933 + 5.00 0.841 0.0125 -0.0947 + 5.50 0.904 0.0129 -0.0957 + 6.00 0.967 0.0135 -0.0967 + 6.50 1.027 0.0144 -0.0973 + 7.00 1.084 0.0158 -0.0972 + 7.50 1.140 0.0174 -0.0972 + 8.00 1.193 0.0198 -0.0968 + 8.50 1.242 0.0231 -0.0958 + 9.00 1.287 0.0275 -0.0948 + 9.50 1.333 0.0323 -0.0942 + 10.00 1.368 0.0393 -0.0926 + 10.50 1.400 0.0475 -0.0908 + 11.00 1.425 0.0580 -0.0890 + 11.50 1.449 0.0691 -0.0877 + 12.00 1.473 0.0816 -0.0870 + 12.50 1.494 0.0973 -0.0870 + 13.00 1.513 0.1129 -0.0876 + 13.50 1.538 0.1288 -0.0886 + 14.50 1.587 0.1650 -0.0917 + 15.00 1.614 0.1845 -0.0939 + 15.50 1.631 0.2052 -0.0966 + 16.00 1.649 0.2250 -0.0996 + 16.50 1.666 0.2467 -0.1031 + 17.00 1.681 0.2684 -0.1069 + 17.50 1.699 0.2900 -0.1110 + 18.00 1.719 0.3121 -0.1157 + 19.00 1.751 0.3554 -0.1242 + 19.50 1.767 0.3783 -0.1291 + 20.50 1.798 0.4212 -0.1384 + 21.00 1.810 0.4415 -0.1416 + 22.00 1.830 0.4830 -0.1479 + 23.00 1.847 0.5257 -0.1542 + 24.00 1.861 0.5694 -0.1603 + 25.00 1.872 0.6141 -0.1664 + 26.00 1.881 0.6593 -0.1724 + 28.00 1.894 0.7513 -0.1841 + 30.00 1.904 0.8441 -0.1954 + 32.00 1.915 0.9364 -0.2063 + 35.00 1.929 1.0722 -0.2220 + 40.00 1.903 1.2873 -0.2468 + 45.00 1.820 1.4796 -0.2701 + 50.00 1.690 1.6401 -0.2921 + 55.00 1.522 1.7609 -0.3127 + 60.00 1.323 1.8360 -0.3321 + 65.00 1.106 1.8614 -0.3502 + 70.00 0.880 1.8347 -0.3672 + 75.00 0.658 1.7567 -0.3830 + 80.00 0.449 1.6334 -0.3977 + 85.00 0.267 1.4847 -0.4112 + 90.00 0.124 1.3879 -0.4234 + 95.00 0.002 1.3912 -0.4343 + 100.00 -0.118 1.3795 -0.4437 + 105.00 -0.235 1.3528 -0.4514 + 110.00 -0.348 1.3114 -0.4573 + 115.00 -0.453 1.2557 -0.4610 + 120.00 -0.549 1.1864 -0.4623 + 125.00 -0.633 1.1041 -0.4606 + 130.00 -0.702 1.0102 -0.4554 + 135.00 -0.754 0.9060 -0.4462 + 140.00 -0.787 0.7935 -0.4323 + 145.00 -0.797 0.6750 -0.4127 + 150.00 -0.782 0.5532 -0.3863 + 155.00 -0.739 0.4318 -0.3521 + 160.00 -0.664 0.3147 -0.3085 + 170.00 -0.410 0.1144 -0.1858 + 175.00 -0.226 0.0702 -0.1022 + 180.00 0.000 0.0602 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17_coords.txt new file mode 100644 index 0000000000..24e0ec78c9 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/DU40_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.33087 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! Adjusted DU4050 +! x/c y/c +1.00000 0.00347 +0.99660 0.00455 +0.99314 0.00565 +0.98961 0.00678 +0.98601 0.00795 +0.98235 0.00914 +0.97863 0.01035 +0.97484 0.01158 +0.97098 0.01283 +0.96706 0.01410 +0.96307 0.01539 +0.95902 0.01670 +0.95490 0.01803 +0.95072 0.01937 +0.94647 0.02074 +0.94216 0.02212 +0.93778 0.02352 +0.93333 0.02495 +0.92882 0.02639 +0.92425 0.02786 +0.91961 0.02936 +0.91490 0.03087 +0.91013 0.03242 +0.90529 0.03400 +0.90039 0.03560 +0.89542 0.03723 +0.89039 0.03887 +0.88529 0.04056 +0.88013 0.04226 +0.87490 0.04399 +0.86961 0.04575 +0.86425 0.04754 +0.85882 0.04935 +0.85333 0.05119 +0.84778 0.05305 +0.84216 0.05493 +0.83647 0.05685 +0.83072 0.05878 +0.82490 0.06076 +0.81902 0.06275 +0.81307 0.06476 +0.80706 0.06680 +0.80098 0.06886 +0.79484 0.07094 +0.78863 0.07304 +0.78235 0.07517 +0.77601 0.07730 +0.76961 0.07947 +0.76314 0.08165 +0.75660 0.08386 +0.75000 0.08608 +0.74333 0.08832 +0.73667 0.09056 +0.73000 0.09279 +0.72333 0.09502 +0.71667 0.09724 +0.71000 0.09946 +0.70333 0.10166 +0.69667 0.10386 +0.69000 0.10605 +0.68333 0.10822 +0.67667 0.11040 +0.67000 0.11256 +0.66333 0.11471 +0.65667 0.11685 +0.65000 0.11897 +0.64333 0.12109 +0.63667 0.12318 +0.63000 0.12527 +0.62333 0.12733 +0.61667 0.12938 +0.61000 0.13142 +0.60333 0.13343 +0.59667 0.13543 +0.59000 0.13742 +0.58333 0.13938 +0.57667 0.14131 +0.57000 0.14323 +0.56333 0.14512 +0.55667 0.14698 +0.55000 0.14882 +0.54333 0.15064 +0.53667 0.15242 +0.53000 0.15417 +0.52333 0.15591 +0.51667 0.15759 +0.51000 0.15925 +0.50333 0.16088 +0.49667 0.16246 +0.49000 0.16401 +0.48333 0.16553 +0.47667 0.16701 +0.47000 0.16844 +0.46333 0.16985 +0.45667 0.17120 +0.45000 0.17253 +0.44333 0.17381 +0.43667 0.17504 +0.43000 0.17624 +0.42333 0.17739 +0.41667 0.17849 +0.41000 0.17957 +0.40333 0.18058 +0.39667 0.18154 +0.39000 0.18246 +0.38333 0.18333 +0.37667 0.18415 +0.37000 0.18491 +0.36333 0.18563 +0.35667 0.18629 +0.35000 0.18690 +0.34333 0.18746 +0.33667 0.18797 +0.33000 0.18842 +0.32333 0.18881 +0.31667 0.18914 +0.31000 0.18940 +0.30333 0.18961 +0.29667 0.18973 +0.29000 0.18979 +0.28333 0.18977 +0.27667 0.18968 +0.27000 0.18950 +0.26333 0.18924 +0.25667 0.18890 +0.25000 0.18845 +0.24342 0.18791 +0.23693 0.18729 +0.23053 0.18657 +0.22421 0.18575 +0.21798 0.18487 +0.21184 0.18388 +0.20579 0.18282 +0.19982 0.18167 +0.19395 0.18046 +0.18816 0.17916 +0.18245 0.17778 +0.17684 0.17634 +0.17131 0.17482 +0.16587 0.17323 +0.16052 0.17158 +0.15526 0.16987 +0.15008 0.16809 +0.14499 0.16625 +0.13999 0.16436 +0.13508 0.16240 +0.13026 0.16038 +0.12552 0.15831 +0.12087 0.15619 +0.11631 0.15402 +0.11183 0.15179 +0.10745 0.14953 +0.10315 0.14722 +0.09893 0.14485 +0.09481 0.14243 +0.09077 0.13998 +0.08683 0.13748 +0.08297 0.13493 +0.07919 0.13234 +0.07551 0.12972 +0.07191 0.12705 +0.06840 0.12435 +0.06498 0.12161 +0.06164 0.11884 +0.05840 0.11603 +0.05524 0.11319 +0.05217 0.11031 +0.04918 0.10740 +0.04629 0.10447 +0.04348 0.10150 +0.04076 0.09851 +0.03812 0.09549 +0.03558 0.09246 +0.03312 0.08940 +0.03075 0.08632 +0.02847 0.08324 +0.02627 0.08013 +0.02417 0.07701 +0.02215 0.07387 +0.02022 0.07070 +0.01837 0.06751 +0.01662 0.06433 +0.01495 0.06111 +0.01337 0.05790 +0.01187 0.05468 +0.01047 0.05148 +0.00915 0.04826 +0.00792 0.04505 +0.00678 0.04181 +0.00572 0.03847 +0.00476 0.03502 +0.00388 0.03133 +0.00309 0.02736 +0.00238 0.02318 +0.00177 0.01920 +0.00124 0.01552 +0.00080 0.01217 +0.00044 0.00892 +0.00018 0.00563 +0.00000 0.00000 +0.00018 -0.00567 +0.00044 -0.00905 +0.00080 -0.01247 +0.00124 -0.01591 +0.00177 -0.01956 +0.00238 -0.02333 +0.00309 -0.02716 +0.00388 -0.03085 +0.00476 -0.03442 +0.00572 -0.03783 +0.00678 -0.04120 +0.00792 -0.04453 +0.00915 -0.04785 +0.01047 -0.05117 +0.01187 -0.05447 +0.01337 -0.05781 +0.01495 -0.06113 +0.01662 -0.06446 +0.01837 -0.06775 +0.02022 -0.07107 +0.02215 -0.07437 +0.02417 -0.07766 +0.02627 -0.08092 +0.02847 -0.08421 +0.03075 -0.08748 +0.03312 -0.09076 +0.03558 -0.09406 +0.03812 -0.09733 +0.04076 -0.10064 +0.04348 -0.10392 +0.04629 -0.10720 +0.04918 -0.11047 +0.05217 -0.11374 +0.05524 -0.11698 +0.05840 -0.12023 +0.06164 -0.12344 +0.06498 -0.12665 +0.06840 -0.12982 +0.07191 -0.13299 +0.07551 -0.13612 +0.07919 -0.13922 +0.08297 -0.14230 +0.08683 -0.14535 +0.09077 -0.14835 +0.09481 -0.15135 +0.09893 -0.15429 +0.10315 -0.15720 +0.10745 -0.16006 +0.11183 -0.16289 +0.11631 -0.16567 +0.12087 -0.16842 +0.12552 -0.17111 +0.13026 -0.17376 +0.13508 -0.17635 +0.13999 -0.17890 +0.14499 -0.18137 +0.15008 -0.18380 +0.15526 -0.18616 +0.16052 -0.18847 +0.16587 -0.19070 +0.17131 -0.19287 +0.17684 -0.19496 +0.18245 -0.19698 +0.18816 -0.19894 +0.19395 -0.20080 +0.19982 -0.20257 +0.20579 -0.20425 +0.21184 -0.20584 +0.21798 -0.20733 +0.22421 -0.20870 +0.23053 -0.20996 +0.23693 -0.21110 +0.24342 -0.21210 +0.25000 -0.21297 +0.25667 -0.21370 +0.26333 -0.21429 +0.27000 -0.21472 +0.27667 -0.21501 +0.28333 -0.21515 +0.29000 -0.21516 +0.29667 -0.21502 +0.30333 -0.21476 +0.31000 -0.21437 +0.31667 -0.21384 +0.32333 -0.21320 +0.33000 -0.21243 +0.33667 -0.21155 +0.34333 -0.21057 +0.35000 -0.20948 +0.35667 -0.20827 +0.36333 -0.20697 +0.37000 -0.20556 +0.37667 -0.20407 +0.38333 -0.20248 +0.39000 -0.20081 +0.39667 -0.19904 +0.40333 -0.19720 +0.41000 -0.19527 +0.41667 -0.19327 +0.42333 -0.19119 +0.43000 -0.18905 +0.43667 -0.18683 +0.44333 -0.18454 +0.45000 -0.18219 +0.45667 -0.17976 +0.46333 -0.17727 +0.47000 -0.17473 +0.47667 -0.17212 +0.48333 -0.16945 +0.49000 -0.16673 +0.49667 -0.16397 +0.50333 -0.16115 +0.51000 -0.15828 +0.51667 -0.15537 +0.52333 -0.15242 +0.53000 -0.14942 +0.53667 -0.14639 +0.54333 -0.14333 +0.55000 -0.14024 +0.55667 -0.13713 +0.56333 -0.13399 +0.57000 -0.13083 +0.57667 -0.12765 +0.58333 -0.12446 +0.59000 -0.12125 +0.59667 -0.11804 +0.60333 -0.11482 +0.61000 -0.11160 +0.61667 -0.10838 +0.62333 -0.10515 +0.63000 -0.10192 +0.63667 -0.09870 +0.64333 -0.09549 +0.65000 -0.09228 +0.65667 -0.08909 +0.66333 -0.08590 +0.67000 -0.08274 +0.67667 -0.07958 +0.68333 -0.07645 +0.69000 -0.07333 +0.69667 -0.07024 +0.70333 -0.06717 +0.71000 -0.06413 +0.71667 -0.06112 +0.72333 -0.05814 +0.73000 -0.05519 +0.73667 -0.05228 +0.74333 -0.04941 +0.75000 -0.04658 +0.75660 -0.04382 +0.76314 -0.04114 +0.76961 -0.03853 +0.77601 -0.03600 +0.78235 -0.03354 +0.78863 -0.03116 +0.79484 -0.02887 +0.80098 -0.02665 +0.80706 -0.02452 +0.81307 -0.02247 +0.81902 -0.02050 +0.82490 -0.01862 +0.83072 -0.01681 +0.83647 -0.01510 +0.84216 -0.01346 +0.84778 -0.01191 +0.85333 -0.01045 +0.85882 -0.00907 +0.86425 -0.00776 +0.86961 -0.00653 +0.87490 -0.00539 +0.88013 -0.00434 +0.88529 -0.00335 +0.89039 -0.00245 +0.89542 -0.00160 +0.90039 -0.00085 +0.90529 -0.00015 +0.91013 0.00046 +0.91490 0.00103 +0.91961 0.00151 +0.92425 0.00193 +0.92882 0.00229 +0.93333 0.00258 +0.93778 0.00279 +0.94216 0.00295 +0.94647 0.00303 +0.95072 0.00303 +0.95490 0.00296 +0.95902 0.00282 +0.96307 0.00261 +0.96706 0.00232 +0.97098 0.00194 +0.97484 0.00149 +0.97863 0.00098 +0.98235 0.00040 +0.98601 -0.00025 +0.98961 -0.00097 +0.99314 -0.00176 +0.99660 -0.00261 +1.00000 -0.00347 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17.dat new file mode 100644 index 0000000000..68cff47cc6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17.dat @@ -0,0 +1,181 @@ +! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- +! NACA64 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). +! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] + 1 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +@"NACA64_A17_coords.txt" NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. + 1 NumTabs ! Number of airfoil tables in this file. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ + 0.75 Re ! Reynolds number in millions + 0 UserProp ! User property (control) setting +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ + -4.432 alpha0 ! 0-lift angle of attack, depends on airfoil. + 9 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) + -9 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] + 0 S2 ! Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S3 ! Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] + 0 S4 ! Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] + 1.4073 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. + -0.7945 Cn2 ! As Cn1 for negative AOAs. + 0.19 St_sh ! Strouhal's shedding frequency constant. [default = 0.19] + 0.0065 Cd0 ! 2D drag coefficient value at 0-lift. + -0.088 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] + 0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] + 0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] + 0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +"Default" x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +"Default" UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +"DEFAULT" filtCutOff ! Cut-off frequency (-3 dB corner frequency) for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (Hz) [default = 20] +!........................................ +! Table of aerodynamics coefficients + 127 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) + -180.00 0.000 0.0198 0.0000 + -175.00 0.374 0.0341 0.1880 + -170.00 0.749 0.0955 0.3770 + -160.00 0.659 0.2807 0.2747 + -155.00 0.736 0.3919 0.3130 + -150.00 0.783 0.5086 0.3428 + -145.00 0.803 0.6267 0.3654 + -140.00 0.798 0.7427 0.3820 + -135.00 0.771 0.8537 0.3935 + -130.00 0.724 0.9574 0.4007 + -125.00 0.660 1.0519 0.4042 + -120.00 0.581 1.1355 0.4047 + -115.00 0.491 1.2070 0.4025 + -110.00 0.390 1.2656 0.3981 + -105.00 0.282 1.3104 0.3918 + -100.00 0.169 1.3410 0.3838 + -95.00 0.052 1.3572 0.3743 + -90.00 -0.067 1.3587 0.3636 + -85.00 -0.184 1.3456 0.3517 + -80.00 -0.299 1.3181 0.3388 + -75.00 -0.409 1.2765 0.3248 + -70.00 -0.512 1.2212 0.3099 + -65.00 -0.606 1.1532 0.2940 + -60.00 -0.689 1.0731 0.2772 + -55.00 -0.759 0.9822 0.2595 + -50.00 -0.814 0.8820 0.2409 + -45.00 -0.850 0.7742 0.2212 + -40.00 -0.866 0.6610 0.2006 + -35.00 -0.860 0.5451 0.1789 + -30.00 -0.829 0.4295 0.1563 + -25.00 -0.853 0.3071 0.1156 + -24.00 -0.870 0.2814 0.1040 + -23.00 -0.890 0.2556 0.0916 + -22.00 -0.911 0.2297 0.0785 + -21.00 -0.934 0.2040 0.0649 + -20.00 -0.958 0.1785 0.0508 + -19.00 -0.982 0.1534 0.0364 + -18.00 -1.005 0.1288 0.0218 + -17.00 -1.082 0.1037 0.0129 + -16.00 -1.113 0.0786 -0.0028 + -15.00 -1.105 0.0535 -0.0251 + -14.00 -1.078 0.0283 -0.0419 + -13.50 -1.053 0.0158 -0.0521 + -13.00 -1.015 0.0151 -0.0610 + -12.00 -0.904 0.0134 -0.0707 + -11.00 -0.807 0.0121 -0.0722 + -10.00 -0.711 0.0111 -0.0734 + -9.00 -0.595 0.0099 -0.0772 + -8.00 -0.478 0.0091 -0.0807 + -7.00 -0.375 0.0086 -0.0825 + -6.00 -0.264 0.0082 -0.0832 + -5.00 -0.151 0.0079 -0.0841 + -4.00 -0.017 0.0072 -0.0869 + -3.00 0.088 0.0064 -0.0912 + -2.00 0.213 0.0054 -0.0946 + -1.00 0.328 0.0052 -0.0971 + 0.00 0.442 0.0052 -0.1014 + 1.00 0.556 0.0052 -0.1076 + 2.00 0.670 0.0053 -0.1126 + 3.00 0.784 0.0053 -0.1157 + 4.00 0.898 0.0054 -0.1199 + 5.00 1.011 0.0058 -0.1240 + 6.00 1.103 0.0091 -0.1234 + 7.00 1.181 0.0113 -0.1184 + 8.00 1.257 0.0124 -0.1163 + 8.50 1.293 0.0130 -0.1163 + 9.00 1.326 0.0136 -0.1160 + 9.50 1.356 0.0143 -0.1154 + 10.00 1.382 0.0150 -0.1149 + 10.50 1.400 0.0267 -0.1145 + 11.00 1.415 0.0383 -0.1143 + 11.50 1.425 0.0498 -0.1147 + 12.00 1.434 0.0613 -0.1158 + 12.50 1.443 0.0727 -0.1165 + 13.00 1.451 0.0841 -0.1153 + 13.50 1.453 0.0954 -0.1131 + 14.00 1.448 0.1065 -0.1112 + 14.50 1.444 0.1176 -0.1101 + 15.00 1.445 0.1287 -0.1103 + 15.50 1.447 0.1398 -0.1109 + 16.00 1.448 0.1509 -0.1114 + 16.50 1.444 0.1619 -0.1111 + 17.00 1.438 0.1728 -0.1097 + 17.50 1.439 0.1837 -0.1079 + 18.00 1.448 0.1947 -0.1080 + 18.50 1.452 0.2057 -0.1090 + 19.00 1.448 0.2165 -0.1086 + 19.50 1.438 0.2272 -0.1077 + 20.00 1.428 0.2379 -0.1099 + 21.00 1.401 0.2590 -0.1169 + 22.00 1.359 0.2799 -0.1190 + 23.00 1.300 0.3004 -0.1235 + 24.00 1.220 0.3204 -0.1393 + 25.00 1.168 0.3377 -0.1440 + 26.00 1.116 0.3554 -0.1486 + 28.00 1.015 0.3916 -0.1577 + 30.00 0.926 0.4294 -0.1668 + 32.00 0.855 0.4690 -0.1759 + 35.00 0.800 0.5324 -0.1897 + 40.00 0.804 0.6452 -0.2126 + 45.00 0.793 0.7573 -0.2344 + 50.00 0.763 0.8664 -0.2553 + 55.00 0.717 0.9708 -0.2751 + 60.00 0.656 1.0693 -0.2939 + 65.00 0.582 1.1606 -0.3117 + 70.00 0.495 1.2438 -0.3285 + 75.00 0.398 1.3178 -0.3444 + 80.00 0.291 1.3809 -0.3593 + 85.00 0.176 1.4304 -0.3731 + 90.00 0.053 1.4565 -0.3858 + 95.00 -0.074 1.4533 -0.3973 + 100.00 -0.199 1.4345 -0.4075 + 105.00 -0.321 1.4004 -0.4162 + 110.00 -0.436 1.3512 -0.4231 + 115.00 -0.543 1.2874 -0.4280 + 120.00 -0.640 1.2099 -0.4306 + 125.00 -0.723 1.1196 -0.4304 + 130.00 -0.790 1.0179 -0.4270 + 135.00 -0.840 0.9064 -0.4196 + 140.00 -0.868 0.7871 -0.4077 + 145.00 -0.872 0.6627 -0.3903 + 150.00 -0.850 0.5363 -0.3665 + 155.00 -0.798 0.4116 -0.3349 + 160.00 -0.714 0.2931 -0.2942 + 170.00 -0.749 0.0971 -0.3771 + 175.00 -0.374 0.0334 -0.1879 + 180.00 0.000 0.0198 0.0000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17_coords.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17_coords.txt new file mode 100644 index 0000000000..aa31ac26b2 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Airfoils/NACA64_A17_coords.txt @@ -0,0 +1,407 @@ + 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. +! ......... x-y coordinates are next if NumCoords > 0 ............. +! x-y coordinate of airfoil reference +! x/c y/c +0.25 0 +! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 +! NACA 64-618 (interpolated to 399 points) +! x/c y/c +1.000000 0.000000 +0.990000 0.003385 +0.980000 0.006126 +0.975000 0.007447 +0.970000 0.008767 +0.965000 0.010062 +0.960000 0.011357 +0.955000 0.012639 +0.950000 0.013921 +0.945000 0.015200 +0.940000 0.016478 +0.935000 0.017757 +0.930000 0.019036 +0.925000 0.020317 +0.920000 0.021598 +0.915000 0.022881 +0.910000 0.024163 +0.905000 0.025448 +0.900000 0.026733 +0.887500 0.029951 +0.875000 0.033169 +0.862500 0.036386 +0.850000 0.039603 +0.837500 0.042804 +0.825000 0.046004 +0.812500 0.049171 +0.800000 0.052337 +0.787500 0.055452 +0.775000 0.058566 +0.762500 0.061611 +0.750000 0.064656 +0.737500 0.067615 +0.725000 0.070573 +0.712500 0.073429 +0.700000 0.076285 +0.687500 0.079029 +0.675000 0.081773 +0.662500 0.084393 +0.650000 0.087012 +0.637500 0.089490 +0.625000 0.091967 +0.612500 0.094283 +0.600000 0.096599 +0.587500 0.098743 +0.575000 0.100887 +0.562500 0.102843 +0.550000 0.104799 +0.537500 0.106549 +0.525000 0.108299 +0.512500 0.109830 +0.500000 0.111360 +0.487500 0.112649 +0.475000 0.113937 +0.462500 0.114964 +0.450000 0.115990 +0.445000 0.116320 +0.440000 0.116650 +0.435000 0.116931 +0.430000 0.117211 +0.425000 0.117439 +0.420000 0.117667 +0.415000 0.117835 +0.410000 0.118003 +0.405000 0.118104 +0.400000 0.118204 +0.395000 0.118231 +0.390000 0.118258 +0.385000 0.118213 +0.380000 0.118168 +0.375000 0.118057 +0.370000 0.117946 +0.365000 0.117777 +0.360000 0.117607 +0.355000 0.117383 +0.350000 0.117159 +0.345000 0.116881 +0.340000 0.116603 +0.335000 0.116273 +0.330000 0.115942 +0.325000 0.115562 +0.320000 0.115181 +0.315000 0.114750 +0.310000 0.114319 +0.305000 0.113838 +0.300000 0.113356 +0.295000 0.112824 +0.290000 0.112292 +0.285000 0.111710 +0.280000 0.111127 +0.275000 0.110495 +0.270000 0.109863 +0.265000 0.109180 +0.260000 0.108497 +0.255000 0.107762 +0.250000 0.107027 +0.245000 0.106241 +0.240000 0.105454 +0.235000 0.104614 +0.230000 0.103774 +0.225000 0.102880 +0.220000 0.101985 +0.215000 0.101035 +0.210000 0.100084 +0.205000 0.099076 +0.200000 0.098068 +0.195000 0.097001 +0.190000 0.095934 +0.185000 0.094805 +0.180000 0.093676 +0.175000 0.092484 +0.170000 0.091291 +0.165000 0.090032 +0.160000 0.088772 +0.155000 0.087441 +0.150000 0.086110 +0.145000 0.084704 +0.140000 0.083298 +0.135000 0.081814 +0.130000 0.080329 +0.125000 0.078759 +0.120000 0.077188 +0.115000 0.075525 +0.110000 0.073862 +0.105000 0.072098 +0.100000 0.070334 +0.097500 0.069412 +0.095000 0.068489 +0.092500 0.067537 +0.090000 0.066584 +0.087500 0.065601 +0.085000 0.064617 +0.082500 0.063600 +0.080000 0.062583 +0.077500 0.061531 +0.075000 0.060478 +0.072500 0.059388 +0.070000 0.058297 +0.067500 0.057165 +0.065000 0.056032 +0.062500 0.054854 +0.060000 0.053676 +0.057500 0.052447 +0.055000 0.051218 +0.052500 0.049933 +0.050000 0.048647 +0.047500 0.047299 +0.045000 0.045950 +0.042500 0.044530 +0.040000 0.043110 +0.037500 0.041606 +0.035000 0.040102 +0.032500 0.038501 +0.030000 0.036899 +0.027500 0.035177 +0.025000 0.033454 +0.022500 0.031574 +0.020000 0.029694 +0.018750 0.028680 +0.017500 0.027666 +0.016250 0.026589 +0.015000 0.025511 +0.013750 0.024354 +0.012500 0.023197 +0.011250 0.021936 +0.010000 0.020674 +0.009500 0.020131 +0.009000 0.019587 +0.008500 0.019017 +0.008000 0.018447 +0.007500 0.017844 +0.007000 0.017241 +0.006500 0.016598 +0.006000 0.015955 +0.005500 0.015260 +0.005000 0.014565 +0.004500 0.013801 +0.004000 0.013037 +0.003500 0.012167 +0.003000 0.011296 +0.002500 0.010262 +0.002000 0.009227 +0.001875 0.008930 +0.001750 0.008633 +0.001625 0.008315 +0.001500 0.007997 +0.001375 0.007655 +0.001250 0.007312 +0.001125 0.006934 +0.001000 0.006555 +0.000875 0.006125 +0.000750 0.005695 +0.000625 0.005184 +0.000500 0.004672 +0.000400 0.004190 +0.000350 0.003913 +0.000300 0.003636 +0.000200 0.002970 +0.000100 0.002104 +0.000050 0.001052 +0.000000 0.000000 +0.000050 -0.001046 +0.000100 -0.002092 +0.000200 -0.002954 +0.000300 -0.003613 +0.000350 -0.003891 +0.000400 -0.004169 +0.000500 -0.004658 +0.000625 -0.005178 +0.000750 -0.005698 +0.000875 -0.006135 +0.001000 -0.006572 +0.001125 -0.006956 +0.001250 -0.007340 +0.001375 -0.007684 +0.001500 -0.008027 +0.001625 -0.008341 +0.001750 -0.008654 +0.001875 -0.008943 +0.002000 -0.009231 +0.002500 -0.010204 +0.003000 -0.011176 +0.003500 -0.011953 +0.004000 -0.012729 +0.004500 -0.013380 +0.005000 -0.014030 +0.005500 -0.014595 +0.006000 -0.015160 +0.006500 -0.015667 +0.007000 -0.016174 +0.007500 -0.016636 +0.008000 -0.017098 +0.008500 -0.017526 +0.009000 -0.017953 +0.009500 -0.018352 +0.010000 -0.018750 +0.011250 -0.019644 +0.012500 -0.020537 +0.013750 -0.021322 +0.015000 -0.022107 +0.016250 -0.022812 +0.017500 -0.023517 +0.018750 -0.024160 +0.020000 -0.024803 +0.022500 -0.025948 +0.025000 -0.027092 +0.027500 -0.028097 +0.030000 -0.029102 +0.032500 -0.030003 +0.035000 -0.030904 +0.037500 -0.031725 +0.040000 -0.032546 +0.042500 -0.033304 +0.045000 -0.034061 +0.047500 -0.034767 +0.050000 -0.035472 +0.052500 -0.036132 +0.055000 -0.036792 +0.057500 -0.037414 +0.060000 -0.038035 +0.062500 -0.038622 +0.065000 -0.039209 +0.067500 -0.039766 +0.070000 -0.040322 +0.072500 -0.040852 +0.075000 -0.041381 +0.077500 -0.041885 +0.080000 -0.042389 +0.082500 -0.042870 +0.085000 -0.043350 +0.087500 -0.043809 +0.090000 -0.044268 +0.092500 -0.044707 +0.095000 -0.045145 +0.097500 -0.045566 +0.100000 -0.045987 +0.105000 -0.046782 +0.110000 -0.047576 +0.115000 -0.048313 +0.120000 -0.049050 +0.125000 -0.049734 +0.130000 -0.050417 +0.135000 -0.051053 +0.140000 -0.051688 +0.145000 -0.052278 +0.150000 -0.052868 +0.155000 -0.053418 +0.160000 -0.053967 +0.165000 -0.054478 +0.170000 -0.054988 +0.175000 -0.055461 +0.180000 -0.055934 +0.185000 -0.056373 +0.190000 -0.056811 +0.195000 -0.057216 +0.200000 -0.057621 +0.205000 -0.057993 +0.210000 -0.058365 +0.215000 -0.058705 +0.220000 -0.059045 +0.225000 -0.059355 +0.230000 -0.059664 +0.235000 -0.059944 +0.240000 -0.060224 +0.245000 -0.060474 +0.250000 -0.060723 +0.255000 -0.060943 +0.260000 -0.061163 +0.265000 -0.061354 +0.270000 -0.061545 +0.275000 -0.061708 +0.280000 -0.061871 +0.285000 -0.062004 +0.290000 -0.062137 +0.295000 -0.062240 +0.300000 -0.062343 +0.305000 -0.062417 +0.310000 -0.062490 +0.315000 -0.062534 +0.320000 -0.062577 +0.325000 -0.062590 +0.330000 -0.062602 +0.335000 -0.062583 +0.340000 -0.062563 +0.345000 -0.062512 +0.350000 -0.062460 +0.355000 -0.062374 +0.360000 -0.062287 +0.365000 -0.062164 +0.370000 -0.062040 +0.375000 -0.061878 +0.380000 -0.061716 +0.385000 -0.061509 +0.390000 -0.061301 +0.395000 -0.061040 +0.400000 -0.060778 +0.405000 -0.060458 +0.410000 -0.060138 +0.415000 -0.059763 +0.420000 -0.059388 +0.425000 -0.058966 +0.430000 -0.058544 +0.435000 -0.058083 +0.440000 -0.057622 +0.445000 -0.057127 +0.450000 -0.056632 +0.462500 -0.055265 +0.475000 -0.053897 +0.487500 -0.052374 +0.500000 -0.050850 +0.512500 -0.049195 +0.525000 -0.047539 +0.537500 -0.045777 +0.550000 -0.044014 +0.562500 -0.042165 +0.575000 -0.040316 +0.587500 -0.038401 +0.600000 -0.036486 +0.612500 -0.034526 +0.625000 -0.032565 +0.637500 -0.030575 +0.650000 -0.028585 +0.662500 -0.026594 +0.675000 -0.024603 +0.687500 -0.022632 +0.700000 -0.020660 +0.712500 -0.018728 +0.725000 -0.016795 +0.737500 -0.014922 +0.750000 -0.013048 +0.762500 -0.011260 +0.775000 -0.009472 +0.787500 -0.007797 +0.800000 -0.006122 +0.812500 -0.004594 +0.825000 -0.003065 +0.837500 -0.001721 +0.850000 -0.000376 +0.862500 0.000742 +0.875000 0.001859 +0.887500 0.002698 +0.900000 0.003536 +0.905000 0.003780 +0.910000 0.004023 +0.915000 0.004205 +0.920000 0.004387 +0.925000 0.004504 +0.930000 0.004620 +0.935000 0.004661 +0.940000 0.004702 +0.945000 0.004658 +0.950000 0.004614 +0.955000 0.004476 +0.960000 0.004338 +0.965000 0.004084 +0.970000 0.003829 +0.975000 0.003436 +0.980000 0.003042 +0.990000 0.001910 +1.000000 0.000000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/Cp_Ct_Cq.NREL5MW.txt b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Cp_Ct_Cq.NREL5MW.txt new file mode 100644 index 0000000000..4324d3bbac --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/Cp_Ct_Cq.NREL5MW.txt @@ -0,0 +1,99 @@ +# ----- Rotor performance tables for the NREL-5MW wind turbine ----- +# ------------ Written on Jan-13-22 using the ROSCO toolbox ------------ + +# Pitch angle vector, 36 entries - x axis (matrix columns) (deg) +-5.0 -4.0 -3.0 -2.0 -1.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 30.0 +# TSR vector, 26 entries - y axis (matrix rows) (-) +2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 +# Wind speed vector - z axis (m/s) +11.4 + +# Power coefficient + +0.006673 0.009813 0.013077 0.016508 0.020122 0.023918 0.027887 0.032006 0.036239 0.040540 0.044858 0.049138 0.053326 0.057366 0.061205 0.064796 0.068092 0.071051 0.073631 0.075796 0.077520 0.078793 0.079607 0.079960 0.079851 0.079303 0.078341 0.076993 0.075269 0.073154 0.070619 0.067607 0.064059 0.059976 0.055381 0.050328 +0.020093 0.026879 0.033876 0.041034 0.048264 0.055472 0.062560 0.069438 0.076024 0.082246 0.088041 0.093349 0.098111 0.102262 0.105746 0.108521 0.110563 0.111865 0.112435 0.112304 0.111503 0.110082 0.108043 0.105376 0.102031 0.097898 0.092907 0.087092 0.080496 0.073183 0.065206 0.056618 0.047499 0.037976 0.028144 0.018084 +0.048757 0.059921 0.070879 0.081507 0.091686 0.101314 0.110305 0.118583 0.126073 0.132692 0.138350 0.142964 0.146489 0.148944 0.150362 0.150761 0.150158 0.148560 0.145993 0.142397 0.137607 0.131540 0.124241 0.115747 0.106162 0.095542 0.084011 0.071754 0.058916 0.045611 0.031929 0.017939 0.003701 -0.010721 -0.025259 -0.039848 +0.090123 0.104877 0.118836 0.131894 0.143960 0.154953 0.164780 0.173312 0.180438 0.186134 0.190421 0.193294 0.194678 0.194534 0.192872 0.189595 0.184490 0.177562 0.168848 0.158486 0.146540 0.133154 0.118581 0.103012 0.086606 0.069499 0.051807 0.033628 0.015033 -0.003935 -0.023212 -0.042681 -0.062203 -0.081676 -0.101014 -0.120137 +0.139124 0.156683 0.172901 0.187702 0.200999 0.212709 0.222753 0.231064 0.237530 0.241950 0.244105 0.243810 0.240834 0.235185 0.226970 0.216406 0.203596 0.188826 0.172423 0.154596 0.135473 0.115192 0.093900 0.071756 0.048901 0.025448 0.001458 -0.023067 -0.048079 -0.073394 -0.098747 -0.123894 -0.148637 -0.172971 -0.196999 -0.220426 +0.191782 0.211839 0.230276 0.247076 0.262109 0.275108 0.285675 0.293225 0.297120 0.296898 0.292698 0.284905 0.273940 0.260137 0.243968 0.225765 0.205747 0.184044 0.160751 0.135955 0.109826 0.082563 0.054349 0.025323 -0.004446 -0.034984 -0.066317 -0.098275 -0.130442 -0.162296 -0.193412 -0.223707 -0.253665 -0.283545 -0.312671 -0.340141 +0.246353 0.270341 0.292682 0.312827 0.329812 0.342452 0.349588 0.350796 0.346468 0.337517 0.324917 0.309376 0.291272 0.270832 0.248190 0.223439 0.196656 0.167952 0.137415 0.105259 0.071726 0.037018 0.001262 -0.035533 -0.073456 -0.112507 -0.152329 -0.192145 -0.231094 -0.268667 -0.305110 -0.341553 -0.378474 -0.414899 -0.449086 -0.478908 +0.306243 0.335683 0.361286 0.381426 0.394666 0.400011 0.397807 0.389766 0.377676 0.362345 0.344063 0.323009 0.299287 0.272921 0.243930 0.212388 0.178407 0.142107 0.103741 0.063607 0.021945 -0.021117 -0.065611 -0.111678 -0.159287 -0.207873 -0.256248 -0.303158 -0.347971 -0.391262 -0.434965 -0.480253 -0.525739 -0.568955 -0.606708 -0.638532 +0.368062 0.397982 0.420678 0.434161 0.438041 0.434596 0.426094 0.413722 0.397833 0.378568 0.356023 0.330207 0.301063 0.268542 0.232706 0.193700 0.151740 0.107083 0.060108 0.011125 -0.039710 -0.092454 -0.147289 -0.204180 -0.262421 -0.320480 -0.376558 -0.429701 -0.480649 -0.532192 -0.586717 -0.643176 -0.698195 -0.746783 -0.788014 -0.825218 +0.413915 0.437699 0.451902 0.458070 0.457967 0.452866 0.443478 0.429833 0.411921 0.389793 0.363427 0.332762 0.297737 0.258384 0.214897 0.167596 0.116800 0.062939 0.006435 -0.052490 -0.113873 -0.177938 -0.244676 -0.313397 -0.382360 -0.449143 -0.512100 -0.571792 -0.631581 -0.695509 -0.764242 -0.833635 -0.896797 -0.950560 -0.998368 -1.044827 +0.427324 0.444280 0.455448 0.462056 0.464498 0.462253 0.454597 0.441298 0.422256 0.397517 0.367139 0.331124 0.289519 0.242518 0.190536 0.134077 0.073568 0.009566 -0.057573 -0.127803 -0.201376 -0.278345 -0.358171 -0.439117 -0.518328 -0.593032 -0.663068 -0.731776 -0.804602 -0.885395 -0.971040 -1.052725 -1.123154 -1.184540 -1.242706 -1.302084 +0.413889 0.430080 0.443986 0.455667 0.463490 0.465861 0.461379 0.449315 0.429515 0.402103 0.367325 0.325347 0.276400 0.220931 0.159637 0.093102 0.021935 -0.053297 -0.132381 -0.215535 -0.302917 -0.394172 -0.487834 -0.580989 -0.669719 -0.752399 -0.831452 -0.912845 -1.003839 -1.105589 -1.208911 -1.301214 -1.380509 -1.453087 -1.525242 -1.600224 +0.390738 0.409602 0.427384 0.443933 0.457445 0.465005 0.464411 0.454181 0.433864 0.403639 0.364016 0.315425 0.258360 0.193623 0.122136 0.044567 -0.038313 -0.126023 -0.218606 -0.316340 -0.419059 -0.525699 -0.633667 -0.738622 -0.836834 -0.928785 -1.019688 -1.118620 -1.233318 -1.358741 -1.478110 -1.581346 -1.672639 -1.759983 -1.849169 -1.941926 +0.363054 0.386720 0.409228 0.429996 0.447852 0.460425 0.463989 0.456010 0.435373 0.402165 0.357222 0.301344 0.235402 0.160566 0.077923 -0.011703 -0.107479 -0.209107 -0.316861 -0.430808 -0.550233 -0.673151 -0.795604 -0.912315 -1.020857 -1.123956 -1.230487 -1.353172 -1.496497 -1.645302 -1.779751 -1.896314 -2.002958 -2.108318 -2.217267 -2.330606 +0.332023 0.361556 0.389367 0.414649 0.436246 0.452807 0.460431 0.454894 0.434075 0.397696 0.346937 0.283092 0.207494 0.121668 0.026850 -0.075950 -0.185943 -0.303110 -0.427726 -0.559435 -0.696810 -0.836734 -0.973950 -1.103096 -1.222996 -1.339770 -1.467400 -1.620400 -1.794614 -1.965735 -2.116279 -2.249130 -2.374431 -2.500966 -2.632648 -2.770283 +0.297995 0.333854 0.367528 0.397656 0.423215 0.442899 0.454053 0.450936 0.429986 0.390235 0.333142 0.260640 0.174562 0.076794 -0.031277 -0.148468 -0.274167 -0.408575 -0.551737 -0.702675 -0.859149 -1.016871 -1.169580 -1.311915 -1.444423 -1.578792 -1.734397 -1.922541 -2.128205 -2.321411 -2.490350 -2.642587 -2.789846 -2.940844 -3.098986 -3.264660 +0.261597 0.303619 0.343502 0.378889 0.408674 0.431280 0.445167 0.444233 0.423112 0.379761 0.315806 0.233927 0.136491 0.025768 -0.096686 -0.229613 -0.372646 -0.526034 -0.689370 -0.860978 -1.037730 -1.214335 -1.383513 -1.539437 -1.686737 -1.844401 -2.034203 -2.260837 -2.498120 -2.714447 -2.904511 -3.079332 -3.251981 -3.431224 -3.619857 -3.816817 +0.223751 0.271311 0.317227 0.358217 0.392491 0.418111 0.434088 0.434927 0.413446 0.366239 0.294883 0.202866 0.093151 -0.031589 -0.169648 -0.319787 -0.481868 -0.655988 -0.841105 -1.034831 -1.233270 -1.430180 -1.616348 -1.786462 -1.952417 -2.139500 -2.368690 -2.636225 -2.905702 -3.147086 -3.361213 -3.561934 -3.763787 -3.975522 -4.198409 -4.429489 +0.185578 0.237532 0.288993 0.335546 0.374551 0.403289 0.421002 0.423063 0.400961 0.349628 0.270309 0.167352 0.044405 -0.095487 -0.250473 -0.419415 -0.602317 -0.798913 -1.007440 -1.224860 -1.446724 -1.665242 -1.868434 -2.054428 -2.244050 -2.466255 -2.739406 -3.049892 -3.352672 -3.621561 -3.862815 -4.093010 -4.328409 -4.576896 -4.837351 -5.105458 +0.147095 0.203239 0.259075 0.310894 0.354752 0.386719 0.405978 0.408744 0.385629 0.329881 0.242007 0.127271 -0.009910 -0.166158 -0.339498 -0.528928 -0.734472 -0.955298 -1.188911 -1.431845 -1.679152 -1.920015 -2.140330 -2.345296 -2.563821 -2.826409 -3.147779 -3.503220 -3.840906 -4.140058 -4.411660 -4.675361 -4.948974 -5.238172 -5.539321 -5.847566 +0.109921 0.168465 0.228283 0.284493 0.333003 0.368316 0.389001 0.392004 0.367452 0.306944 0.209888 0.082498 -0.069969 -0.243863 -0.437077 -0.648769 -0.878808 -1.125646 -1.386141 -1.656724 -1.931386 -2.194733 -2.433122 -2.661010 -2.913585 -3.221522 -3.595200 -3.997663 -4.372318 -4.704715 -5.010142 -5.311913 -5.628384 -5.961897 -6.307013 -6.658699 +0.075556 0.133907 0.196815 0.256499 0.309270 0.347981 0.370019 0.372880 0.346417 0.280755 0.173858 0.032901 -0.135979 -0.328881 -0.543585 -0.779386 -1.035790 -1.310469 -1.599847 -1.900506 -2.203972 -2.489774 -2.748220 -3.003362 -3.294941 -3.653136 -4.083147 -4.534716 -4.948847 -5.317645 -5.660775 -6.005570 -6.369299 -6.750614 -7.143160 -7.541782 +0.045437 0.101086 0.164731 0.227521 0.283675 0.325613 0.348964 0.351362 0.322521 0.251245 0.133815 -0.021672 -0.208162 -0.421508 -0.659413 -0.921225 -1.205892 -1.510319 -1.830843 -2.164074 -2.497172 -2.805822 -3.087060 -3.374013 -3.709339 -4.122787 -4.613131 -5.115993 -5.572447 -5.980987 -6.366170 -6.759084 -7.174174 -7.606904 -8.050518 -8.499762 +0.020095 0.070625 0.132961 0.197686 0.256313 0.301131 0.325760 0.327415 0.295744 0.218342 0.089649 -0.081378 -0.286748 -0.522056 -0.784958 -1.074719 -1.389587 -1.725804 -2.080005 -2.448103 -2.811255 -3.143907 -3.451088 -3.774480 -4.158169 -4.632027 -5.186626 -5.743189 -6.245055 -6.696930 -7.128978 -7.575043 -8.045426 -8.533374 -9.031865 -9.535604 +-0.001687 0.043909 0.102330 0.166837 0.227413 0.274487 0.300332 0.301010 0.266040 0.181968 0.041242 -0.146395 -0.371984 -0.630855 -0.920613 -1.240294 -1.587356 -1.957580 -2.348192 -2.753074 -3.146694 -3.505110 -3.841738 -4.206100 -4.642786 -5.182427 -5.805056 -6.418029 -6.968601 -7.467747 -7.951835 -8.455876 -8.985506 -9.532652 -10.089996 -10.652280 +-0.020991 0.020364 0.073330 0.135754 0.197326 0.245733 0.272607 0.272110 0.233378 0.142039 -0.011538 -0.216915 -0.464126 -0.748233 -1.066769 -1.418378 -1.799699 -2.206350 -2.636179 -3.079288 -3.504186 -3.890511 -4.260392 -4.670103 -5.164549 -5.775547 -6.469853 -7.142266 -7.745026 -8.295764 -8.837283 -9.403900 -9.996885 -10.607377 -11.227722 -11.852766 + + +# Thrust coefficient + +0.128717 0.128402 0.127976 0.127677 0.127561 0.127629 0.127867 0.128247 0.128729 0.129258 0.129777 0.130225 0.130542 0.130673 0.130570 0.130193 0.129510 0.128500 0.127155 0.125472 0.123467 0.121169 0.118605 0.115809 0.112801 0.109598 0.106205 0.102605 0.098769 0.094663 0.090253 0.085471 0.080247 0.074585 0.068519 0.062126 +0.168397 0.169715 0.171083 0.172538 0.173986 0.175323 0.176451 0.177284 0.177754 0.177804 0.177391 0.176487 0.175078 0.173164 0.170771 0.167935 0.164700 0.161125 0.157265 0.153157 0.148796 0.144149 0.139139 0.133696 0.127741 0.121140 0.113810 0.105805 0.097197 0.088074 0.078501 0.068532 0.058230 0.047709 0.037053 0.026331 +0.226643 0.229393 0.231723 0.233550 0.234756 0.235255 0.234993 0.233948 0.232126 0.229565 0.226326 0.222484 0.218143 0.213440 0.208473 0.203249 0.197693 0.191672 0.185067 0.177711 0.169360 0.159907 0.149434 0.138024 0.125825 0.112914 0.099398 0.085443 0.071172 0.056685 0.042068 0.027389 0.012700 -0.001958 -0.016522 -0.030881 +0.299075 0.301289 0.302422 0.302406 0.301210 0.298869 0.295464 0.291107 0.285985 0.280362 0.274473 0.268391 0.262007 0.255130 0.247532 0.238852 0.228637 0.216830 0.203516 0.188917 0.173159 0.156385 0.138854 0.120751 0.102214 0.083356 0.064271 0.045044 0.025754 0.006460 -0.012785 -0.031903 -0.050766 -0.069197 -0.086927 -0.103550 +0.379238 0.378835 0.376828 0.373306 0.368432 0.362520 0.355993 0.349221 0.342334 0.335182 0.327457 0.318711 0.308189 0.295450 0.280436 0.263431 0.244639 0.224405 0.203103 0.180973 0.158152 0.134784 0.110984 0.086862 0.062520 0.038061 0.013566 -0.010909 -0.035298 -0.059484 -0.083286 -0.106436 -0.128554 -0.149119 -0.167467 -0.182809 +0.462045 0.457610 0.451683 0.444801 0.437544 0.430278 0.422940 0.415089 0.406018 0.394702 0.380509 0.363246 0.343190 0.320701 0.296376 0.270674 0.243937 0.216365 0.188092 0.159188 0.129783 0.100004 0.069970 0.039795 0.009565 -0.020663 -0.050818 -0.080761 -0.110260 -0.138960 -0.166409 -0.192073 -0.215232 -0.234926 -0.250010 -0.259496 +0.545296 0.537969 0.530603 0.523523 0.516328 0.508094 0.497562 0.483752 0.466005 0.444344 0.419336 0.391808 0.362349 0.331374 0.299182 0.266026 0.232071 0.197454 0.162213 0.126478 0.090382 0.054055 0.017608 -0.018892 -0.055386 -0.091750 -0.127731 -0.162918 -0.196784 -0.228774 -0.258236 -0.284215 -0.305420 -0.320331 -0.327933 -0.328268 +0.634417 0.627969 0.621264 0.612780 0.601387 0.585824 0.565236 0.539859 0.510799 0.478901 0.444769 0.408839 0.371429 0.332767 0.293070 0.252557 0.211368 0.169524 0.127130 0.084335 0.041284 -0.001917 -0.045208 -0.088516 -0.131639 -0.174175 -0.215526 -0.255049 -0.292101 -0.325924 -0.355354 -0.378817 -0.394523 -0.401294 -0.399320 -0.390574 +0.735578 0.726839 0.715209 0.698962 0.676693 0.649128 0.617406 0.582286 0.544379 0.504195 0.462125 0.418443 0.373358 0.327062 0.279804 0.231775 0.183064 0.133686 0.083811 0.033605 -0.016820 -0.067406 -0.118066 -0.168514 -0.218193 -0.266339 -0.312201 -0.355042 -0.394026 -0.427876 -0.454896 -0.473018 -0.480617 -0.477721 -0.466483 -0.450923 +0.836616 0.819394 0.796306 0.768163 0.735696 0.699319 0.659490 0.616641 0.571164 0.523450 0.473790 0.422421 0.369559 0.315437 0.260360 0.204512 0.147873 0.090579 0.032826 -0.025256 -0.083602 -0.142121 -0.200467 -0.257947 -0.313640 -0.366661 -0.416171 -0.461284 -0.500752 -0.532889 -0.555398 -0.565981 -0.564006 -0.551394 -0.532762 -0.512992 +0.923379 0.893210 0.859907 0.823650 0.784285 0.741493 0.695217 0.645715 0.593258 0.538206 0.480917 0.421690 0.360798 0.298558 0.235326 0.171229 0.106253 0.040624 -0.025491 -0.092007 -0.158843 -0.225631 -0.291594 -0.355648 -0.416743 -0.473917 -0.526240 -0.572594 -0.611418 -0.640346 -0.656398 -0.657833 -0.645755 -0.624799 -0.601049 -0.579120 +0.993425 0.954344 0.913695 0.871240 0.826266 0.778188 0.726411 0.670805 0.611601 0.549205 0.484132 0.416794 0.347553 0.276858 0.205091 0.132281 0.058537 -0.015913 -0.090942 -0.166478 -0.242184 -0.317269 -0.390504 -0.460636 -0.526540 -0.587232 -0.641708 -0.688659 -0.725848 -0.749926 -0.757799 -0.749140 -0.727679 -0.700204 -0.673221 -0.650161 +1.058549 1.011415 0.963227 0.914208 0.863809 0.810735 0.753864 0.692505 0.626704 0.556910 0.483849 0.408103 0.330166 0.250636 0.169909 0.087938 0.004949 -0.078857 -0.163388 -0.248386 -0.333115 -0.416283 -0.496411 -0.572141 -0.642397 -0.706208 -0.762552 -0.809541 -0.843850 -0.861381 -0.859866 -0.841099 -0.811461 -0.779163 -0.750163 -0.726138 +1.122305 1.067207 1.011341 0.955082 0.898284 0.839959 0.778078 0.711195 0.638918 0.561654 0.480375 0.395899 0.308904 0.220154 0.129994 0.038399 -0.054349 -0.148080 -0.242618 -0.337354 -0.431053 -0.522046 -0.608688 -0.689695 -0.764072 -0.830961 -0.888968 -0.935169 -0.965155 -0.974811 -0.963246 -0.934896 -0.898382 -0.862536 -0.832084 -0.807326 +1.185738 1.122582 1.058847 0.995008 0.931027 0.866582 0.799502 0.727171 0.648509 0.563696 0.473951 0.380407 0.283976 0.185599 0.085524 -0.016186 -0.119230 -0.223433 -0.328360 -0.432958 -0.535499 -0.634048 -0.726965 -0.813132 -0.891721 -0.961752 -1.021004 -1.065338 -1.089724 -1.090502 -1.068696 -1.031466 -0.989260 -0.950738 -0.919159 -0.894322 +1.248868 1.177878 1.106090 1.034308 0.962814 0.891330 0.818549 0.740704 0.655695 0.563246 0.464772 0.361803 0.255555 0.147124 0.036641 -0.075690 -0.189578 -0.304724 -0.420330 -0.534810 -0.646043 -0.751962 -0.851114 -0.942592 -1.025625 -1.098723 -1.158523 -1.199963 -1.217675 -1.208810 -1.176857 -1.131525 -1.084562 -1.043982 -1.011881 -0.987449 +1.310753 1.232966 1.153240 1.073234 0.993908 0.914846 0.835616 0.752042 0.660663 0.560476 0.452996 0.340238 0.223775 0.104835 -0.016537 -0.140014 -0.265270 -0.391766 -0.518236 -0.642586 -0.762395 -0.875671 -0.981224 -1.078327 -1.165991 -1.241827 -1.301438 -1.339064 -1.349133 -1.330112 -1.288253 -1.235555 -1.184617 -1.142625 -1.110627 -1.086622 +1.370202 1.287113 1.200281 1.111936 1.024461 0.937489 0.851104 0.761450 0.663572 0.555529 0.438759 0.315838 0.188759 0.058841 -0.073915 -0.209068 -0.346176 -0.484368 -0.621832 -0.756036 -0.884420 -1.005217 -1.117496 -1.220568 -1.312850 -1.390993 -1.449734 -1.482671 -1.484225 -1.454750 -1.403285 -1.343886 -1.289747 -1.247079 -1.215478 -1.191550 +1.425945 1.339521 1.246699 1.150493 1.054590 0.959390 0.865327 0.769108 0.664559 0.548527 0.422175 0.288713 0.150621 0.009228 -0.135421 -0.282763 -0.432177 -0.582348 -0.730921 -0.875019 -1.012114 -1.140727 -1.260146 -1.369430 -1.466168 -1.546178 -1.603417 -1.630806 -1.623105 -1.583019 -1.522246 -1.456812 -1.400325 -1.357559 -1.326244 -1.302016 +1.478287 1.389036 1.292096 1.188788 1.084384 0.980656 0.878503 0.775237 0.663743 0.539578 0.403344 0.258956 0.109434 -0.043935 -0.200986 -0.361019 -0.523161 -0.685556 -0.845366 -0.999480 -1.145544 -1.282366 -1.409337 -1.524920 -1.625906 -1.707377 -1.762486 -1.783498 -1.765941 -1.715150 -1.645380 -1.574677 -1.516687 -1.474068 -1.442713 -1.417868 +1.525569 1.435807 1.335411 1.226404 1.113896 1.001379 0.890777 0.780002 0.661259 0.528773 0.382346 0.226642 0.065268 -0.100589 -0.270547 -0.443771 -0.619028 -0.793883 -0.965092 -1.129434 -1.284809 -1.430301 -1.565142 -1.687017 -1.792041 -1.874588 -1.926934 -1.940785 -1.912886 -1.851321 -1.772922 -1.697837 -1.639004 -1.596445 -1.564728 -1.539006 +1.566315 1.479214 1.376488 1.263103 1.143093 1.021619 0.902254 0.783557 0.657210 0.516187 0.359250 0.191837 0.018160 -0.160683 -0.344060 -0.530963 -0.719689 -0.907253 -1.090067 -1.264932 -1.430027 -1.584649 -1.727568 -1.855690 -1.964564 -2.047808 -2.096752 -2.102712 -2.064071 -1.991678 -1.905145 -1.826603 -1.767296 -1.724535 -1.692174 -1.665365 +1.599400 1.517580 1.415403 1.298085 1.171736 1.041419 0.913010 0.786007 0.651695 0.501886 0.334113 0.154593 -0.031851 -0.224178 -0.421492 -0.622547 -0.825079 -1.025616 -1.220296 -1.406037 -1.581314 -1.745475 -1.896602 -2.030921 -2.143474 -2.227031 -2.271933 -2.269336 -2.219606 -2.136371 -2.042346 -1.961175 -1.901455 -1.858218 -1.824963 -1.796908 +1.624851 1.550529 1.451132 1.331239 1.199665 1.060803 0.923092 0.787425 0.644798 0.485924 0.306984 0.114961 -0.084730 -0.291046 -0.502823 -0.718477 -0.935156 -1.148950 -1.355807 -1.552820 -1.738766 -1.912794 -2.072223 -2.212699 -2.328774 -2.412252 -2.452480 -2.440720 -2.379579 -2.285564 -2.184808 -2.101635 -2.041361 -1.997404 -1.963032 -1.933615 +1.644484 1.576932 1.482832 1.362862 1.226569 1.079755 0.932536 0.787882 0.636575 0.468351 0.277909 0.072976 -0.140450 -0.361273 -0.588030 -0.818712 -1.049886 -1.277246 -1.496631 -1.705352 -1.902443 -2.086605 -2.254411 -2.401028 -2.520465 -2.603459 -2.638392 -2.616924 -2.544069 -2.439454 -2.332777 -2.247970 -2.186918 -2.142020 -2.106339 -2.075472 +1.659936 1.597863 1.510260 1.392062 1.252024 1.098156 0.941373 0.787439 0.627098 0.449210 0.246925 0.028662 -0.198996 -0.434846 -0.677094 -0.923225 -1.169251 -1.410513 -1.642804 -1.863707 -2.072377 -2.266900 -2.443154 -2.595911 -2.718548 -2.800637 -2.829676 -2.798002 -2.713156 -2.598249 -2.486428 -2.400100 -2.338052 -2.292009 -2.254855 -2.222470 + + +# Torque coefficient + +0.003340 0.004911 0.006545 0.008262 0.010070 0.011970 0.013957 0.016018 0.018137 0.020289 0.022450 0.024593 0.026688 0.028710 0.030632 0.032429 0.034079 0.035559 0.036851 0.037934 0.038797 0.039434 0.039841 0.040018 0.039964 0.039689 0.039208 0.038533 0.037670 0.036612 0.035343 0.033836 0.032060 0.030017 0.027717 0.025188 +0.008045 0.010762 0.013563 0.016429 0.019324 0.022210 0.025048 0.027802 0.030438 0.032930 0.035250 0.037375 0.039282 0.040944 0.042339 0.043450 0.044267 0.044789 0.045017 0.044964 0.044644 0.044075 0.043258 0.042191 0.040851 0.039196 0.037198 0.034870 0.032229 0.029301 0.026107 0.022669 0.019018 0.015205 0.011268 0.007241 +0.016268 0.019993 0.023649 0.027195 0.030591 0.033804 0.036803 0.039565 0.042064 0.044273 0.046161 0.047700 0.048876 0.049695 0.050168 0.050302 0.050100 0.049567 0.048711 0.047511 0.045913 0.043888 0.041453 0.038619 0.035421 0.031878 0.028030 0.023941 0.019658 0.015218 0.010653 0.005985 0.001235 -0.003577 -0.008428 -0.013295 +0.025774 0.029993 0.033986 0.037720 0.041171 0.044314 0.047125 0.049565 0.051603 0.053232 0.054458 0.055280 0.055675 0.055634 0.055159 0.054221 0.052762 0.050780 0.048288 0.045325 0.041909 0.038080 0.033913 0.029460 0.024768 0.019876 0.014816 0.009617 0.004299 -0.001125 -0.006638 -0.012206 -0.017789 -0.023358 -0.028889 -0.034358 +0.034814 0.039208 0.043266 0.046970 0.050298 0.053228 0.055741 0.057821 0.059439 0.060545 0.061084 0.061010 0.060266 0.058852 0.056797 0.054153 0.050947 0.047252 0.043147 0.038686 0.033900 0.028825 0.023497 0.017956 0.012237 0.006368 0.000365 -0.005772 -0.012031 -0.018366 -0.024710 -0.031003 -0.037195 -0.043284 -0.049297 -0.055159 +0.042659 0.047120 0.051221 0.054958 0.058302 0.061193 0.063544 0.065223 0.066090 0.066040 0.065106 0.063373 0.060934 0.057863 0.054267 0.050218 0.045765 0.040938 0.035756 0.030241 0.024429 0.018365 0.012089 0.005633 -0.000989 -0.007782 -0.014751 -0.021860 -0.029015 -0.036100 -0.043021 -0.049760 -0.056424 -0.063070 -0.069549 -0.075659 +0.049318 0.054120 0.058592 0.062625 0.066025 0.068556 0.069984 0.070226 0.069360 0.067568 0.065045 0.061934 0.058310 0.054218 0.049685 0.044730 0.039369 0.033622 0.027509 0.021072 0.014359 0.007411 0.000253 -0.007113 -0.014705 -0.022523 -0.030495 -0.038466 -0.046263 -0.053785 -0.061080 -0.068376 -0.075767 -0.083059 -0.089903 -0.095873 +0.055734 0.061091 0.065751 0.069416 0.071826 0.072799 0.072397 0.070934 0.068734 0.065944 0.062616 0.058785 0.054468 0.049669 0.044393 0.038653 0.032469 0.025862 0.018880 0.011576 0.003994 -0.003843 -0.011941 -0.020324 -0.028989 -0.037831 -0.046635 -0.055172 -0.063328 -0.071206 -0.079160 -0.087402 -0.095680 -0.103545 -0.110416 -0.116207 +0.061402 0.066394 0.070180 0.072429 0.073076 0.072502 0.071083 0.069019 0.066369 0.063155 0.059394 0.055087 0.050225 0.044800 0.038821 0.032314 0.025314 0.017864 0.010027 0.001856 -0.006625 -0.015424 -0.024572 -0.034062 -0.043778 -0.053464 -0.062820 -0.071685 -0.080185 -0.088783 -0.097879 -0.107298 -0.116477 -0.124582 -0.131461 -0.137667 +0.063740 0.067402 0.069590 0.070539 0.070524 0.069738 0.068292 0.066191 0.063433 0.060025 0.055965 0.051243 0.045849 0.039789 0.033093 0.025809 0.017986 0.009692 0.000991 -0.008083 -0.017536 -0.027401 -0.037678 -0.048261 -0.058881 -0.069165 -0.078860 -0.088052 -0.097259 -0.107103 -0.117688 -0.128374 -0.138100 -0.146379 -0.153741 -0.160896 +0.061104 0.063529 0.065126 0.066071 0.066420 0.066099 0.065004 0.063103 0.060380 0.056842 0.052498 0.047348 0.041399 0.034678 0.027245 0.019172 0.010520 0.001368 -0.008233 -0.018275 -0.028795 -0.039801 -0.051216 -0.062791 -0.074117 -0.084800 -0.094814 -0.104639 -0.115053 -0.126605 -0.138852 -0.150533 -0.160603 -0.169381 -0.177699 -0.186189 +0.055238 0.057399 0.059255 0.060814 0.061858 0.062174 0.061576 0.059966 0.057323 0.053665 0.049023 0.043421 0.036888 0.029486 0.021305 0.012425 0.002927 -0.007113 -0.017668 -0.028765 -0.040427 -0.052606 -0.065106 -0.077539 -0.089381 -0.100415 -0.110966 -0.121829 -0.133973 -0.147552 -0.161342 -0.173660 -0.184243 -0.193929 -0.203559 -0.213566 +0.048889 0.051249 0.053474 0.055545 0.057235 0.058181 0.058107 0.056827 0.054285 0.050503 0.045545 0.039466 0.032326 0.024226 0.015282 0.005576 -0.004794 -0.015768 -0.027352 -0.039580 -0.052432 -0.065775 -0.079284 -0.092416 -0.104704 -0.116209 -0.127582 -0.139961 -0.154312 -0.170004 -0.184940 -0.197857 -0.209279 -0.220207 -0.231366 -0.242972 +0.042753 0.045540 0.048190 0.050636 0.052739 0.054219 0.054639 0.053699 0.051269 0.047359 0.042066 0.035486 0.027721 0.018908 0.009176 -0.001378 -0.012657 -0.024624 -0.037313 -0.050732 -0.064795 -0.079270 -0.093690 -0.107433 -0.120215 -0.132356 -0.144901 -0.159348 -0.176226 -0.193749 -0.209582 -0.223308 -0.235867 -0.248274 -0.261103 -0.274450 +0.036927 0.040211 0.043304 0.046116 0.048518 0.050360 0.051208 0.050592 0.048277 0.044231 0.038585 0.031485 0.023077 0.013532 0.002986 -0.008447 -0.020680 -0.033711 -0.047570 -0.062219 -0.077497 -0.093059 -0.108320 -0.122683 -0.136018 -0.149005 -0.163200 -0.180216 -0.199592 -0.218623 -0.235366 -0.250141 -0.264077 -0.278150 -0.292795 -0.308102 +0.031398 0.035176 0.038724 0.041898 0.044591 0.046665 0.047841 0.047512 0.045305 0.041116 0.035101 0.027462 0.018392 0.008091 -0.003295 -0.015643 -0.028887 -0.043049 -0.058133 -0.074036 -0.090523 -0.107141 -0.123231 -0.138228 -0.152189 -0.166347 -0.182742 -0.202566 -0.224235 -0.244592 -0.262392 -0.278432 -0.293948 -0.309857 -0.326520 -0.343976 +0.026185 0.030391 0.034383 0.037925 0.040906 0.043169 0.044559 0.044466 0.042352 0.038012 0.031611 0.023415 0.013662 0.002579 -0.009678 -0.022983 -0.037300 -0.052654 -0.069003 -0.086180 -0.103872 -0.121549 -0.138483 -0.154090 -0.168834 -0.184616 -0.203614 -0.226299 -0.250050 -0.271703 -0.290728 -0.308227 -0.325508 -0.343449 -0.362331 -0.382045 +0.021330 0.025864 0.030241 0.034148 0.037416 0.039858 0.041381 0.041461 0.039413 0.034913 0.028111 0.019339 0.008880 -0.003011 -0.016172 -0.030485 -0.045936 -0.062535 -0.080182 -0.098649 -0.117566 -0.136337 -0.154085 -0.170301 -0.186122 -0.203956 -0.225804 -0.251308 -0.276997 -0.300008 -0.320420 -0.339555 -0.358797 -0.378982 -0.400229 -0.422258 +0.016887 0.021614 0.026297 0.030533 0.034082 0.036698 0.038309 0.038497 0.036486 0.031815 0.024597 0.015228 0.004041 -0.008689 -0.022792 -0.038165 -0.054808 -0.072698 -0.091673 -0.111457 -0.131646 -0.151530 -0.170019 -0.186944 -0.204199 -0.224419 -0.249274 -0.277527 -0.305079 -0.329546 -0.351500 -0.372446 -0.393867 -0.416478 -0.440178 -0.464575 +0.012803 0.017690 0.022550 0.027060 0.030877 0.033660 0.035336 0.035577 0.033565 0.028713 0.021064 0.011078 -0.000863 -0.014462 -0.029550 -0.046038 -0.063928 -0.083149 -0.103482 -0.124627 -0.146152 -0.167117 -0.186293 -0.204133 -0.223153 -0.246009 -0.273981 -0.304918 -0.334310 -0.360348 -0.383988 -0.406940 -0.430756 -0.455927 -0.482139 -0.508968 +0.009169 0.014052 0.019042 0.023730 0.027777 0.030722 0.032448 0.032698 0.030650 0.025603 0.017507 0.006881 -0.005836 -0.020341 -0.036458 -0.054116 -0.073304 -0.093893 -0.115622 -0.138192 -0.161102 -0.183069 -0.202953 -0.221962 -0.243030 -0.268716 -0.299885 -0.333456 -0.364707 -0.392433 -0.417910 -0.443081 -0.469479 -0.497298 -0.526085 -0.555420 +0.006050 0.010723 0.015760 0.020539 0.024765 0.027865 0.029630 0.029859 0.027740 0.022482 0.013922 0.002635 -0.010889 -0.026336 -0.043528 -0.062410 -0.082942 -0.104937 -0.128110 -0.152185 -0.176486 -0.199372 -0.220067 -0.240498 -0.263846 -0.292529 -0.326963 -0.363123 -0.396285 -0.425817 -0.453293 -0.480903 -0.510029 -0.540564 -0.571997 -0.603917 +0.003499 0.007783 0.012684 0.017518 0.021842 0.025071 0.026869 0.027054 0.024833 0.019345 0.010303 -0.001669 -0.016028 -0.032455 -0.050772 -0.070931 -0.092849 -0.116289 -0.140968 -0.166626 -0.192273 -0.216038 -0.237692 -0.259787 -0.285606 -0.317440 -0.355194 -0.393913 -0.429058 -0.460514 -0.490172 -0.520425 -0.552385 -0.585704 -0.619861 -0.654451 +0.001490 0.005236 0.009858 0.014657 0.019004 0.022327 0.024153 0.024276 0.021928 0.016189 0.006647 -0.006034 -0.021261 -0.038708 -0.058200 -0.079685 -0.103030 -0.127959 -0.154221 -0.181514 -0.208440 -0.233104 -0.255880 -0.279857 -0.308306 -0.343440 -0.384561 -0.425827 -0.463037 -0.496541 -0.528576 -0.561649 -0.596525 -0.632704 -0.669664 -0.707014 +-0.000121 0.003139 0.007316 0.011928 0.016259 0.019625 0.021473 0.021521 0.019021 0.013010 0.002949 -0.010467 -0.026596 -0.045104 -0.065821 -0.088677 -0.113491 -0.139960 -0.167888 -0.196836 -0.224978 -0.250604 -0.274671 -0.300722 -0.331943 -0.370526 -0.415042 -0.458867 -0.498231 -0.533919 -0.568529 -0.604567 -0.642433 -0.681552 -0.721401 -0.761602 +-0.001449 0.001406 0.005062 0.009371 0.013622 0.016963 0.018818 0.018784 0.016110 0.009805 -0.000797 -0.014974 -0.032039 -0.051651 -0.073640 -0.097912 -0.124235 -0.152307 -0.181979 -0.212567 -0.241898 -0.268567 -0.294100 -0.322383 -0.356515 -0.398693 -0.446622 -0.493039 -0.534649 -0.572667 -0.610048 -0.649163 -0.690097 -0.732240 -0.775063 -0.818211 + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/DISCON.IN b/zmq_coupling_tests/templatesDir/OFZMQ_test04/DISCON.IN new file mode 100644 index 0000000000..7c4aacb165 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/DISCON.IN @@ -0,0 +1,192 @@ +! Controller parameter input file for the NREL-5MW wind turbine +! - File written using ROSCO version 2.8.0 controller tuning logic on 10/18/23 + +!------- SIMULATION CONTROL ------------------------------------------------------------ +1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} +0 ! DT_Out - {Time step to output .dbg* files, or 0 to match sampling period of OpenFAST} +0 ! Echo - (0 - no Echo, 1 - Echo input data to .echo) + +!------- CONTROLLER FLAGS ------------------------------------------------- +1 ! F_LPFType - (1: first-order low-pass filter, 2: second-order low-pass filter), [rad/s] (currently filters generator speed and pitch control signals +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +3 ! VS_ControlMode - Generator torque control mode in above rated conditions (0- no torque control, 1- k*omega^2 with PI transitions, 2- WSE TSR Tracking, 3- Power-based TSR Tracking)} +0 ! VS_ConstPower - Do constant power torque control, where above rated torque varies, 0 for constant torque} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +0 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time, 2: rotor position control} +0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} +0 ! AWC_Mode - Active wake control {0 - not used, 1 - complex number method, 2 - Coleman transform method} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} +0 ! CC_Mode - Cable control mode [0- unused, 1- User defined, 2- Open loop control] +0 ! StC_Mode - Structural control mode [0- unused, 1- User defined, 2- Open loop control] + +!------- FILTERS ---------------------------------------------------------- +1.57080 ! F_LPFCornerFreq - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +0 ! F_NumNotchFilts - Number of notch filters placed on sensors +0.0000 ! F_NotchFreqs - Natural frequency of the notch filters. Array with length F_NumNotchFilts +0.0000 ! F_NotchBetaNum - Damping value of numerator (determines the width of notch). Array with length F_NumNotchFilts, [-] +0.0000 ! F_NotchBetaDen - Damping value of denominator (determines the depth of notch). Array with length F_NumNotchFilts, [-] +0 ! F_GenSpdNotch_N - Number of notch filters on generator speed +0 ! F_GenSpdNotch_Ind - Indices of notch filters on generator speed +0 ! F_TwrTopNotch_N - Number of notch filters on tower top acceleration signal +0 ! F_TwrTopNotch_Ind - Indices of notch filters on tower top acceleration signal +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +0.0000 1.0000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.056789 0.084492 0.106018 0.124332 0.140807 0.155903 0.169931 0.183270 0.196062 0.208354 0.220050 0.231503 0.242646 0.253377 0.263967 0.274233 0.284343 0.294292 0.303997 0.313626 0.322957 0.332260 0.341319 0.350368 0.359221 0.368059 0.376700 0.385301 0.393691 0.402050 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-0.018995 -0.016672 -0.014787 -0.013228 -0.011916 -0.010797 -0.009831 -0.008989 -0.008248 -0.007592 -0.007006 -0.006480 -0.006005 -0.005574 -0.005182 -0.004822 -0.004492 -0.004187 -0.003906 -0.003644 -0.003402 -0.003175 -0.002963 -0.002765 -0.002579 -0.002404 -0.002239 -0.002083 -0.001936 -0.001797 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.008388 -0.007514 -0.006805 -0.006218 -0.005725 -0.005304 -0.004940 -0.004624 -0.004345 -0.004098 -0.003878 -0.003680 -0.003501 -0.003339 -0.003192 -0.003056 -0.002932 -0.002817 -0.002712 -0.002613 -0.002522 -0.002437 -0.002357 -0.002283 -0.002212 -0.002147 -0.002085 -0.002026 -0.001971 -0.001918 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.000880000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +122.9096700000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.000880000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +9.120000 11.400000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +2 ! IPC_SatMode - IPC Saturation method (0 - no saturation (except by PC_MinPit), 1 - saturate by PS_BldPitchMin, 2 - saturate sotfly (full IPC cycle) by PC_MinPit, 3 - saturate softly by PS_BldPitchMin) +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +94.40000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +43093.51876000 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +1500000.000000 ! VS_MaxRat - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +47402.87063000 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +35.29006000000 ! VS_MinOMSpd - Minimum generator speed [rad/s] +2.063350000000 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side). Only used in VS_ControlMode = 1,3 +5000000.000000 ! VS_RtPwr - Wind turbine rated power [W] +43093.51876000 ! VS_RtTq - Rated torque, [Nm]. +122.9096700000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-657.442080000 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-104.507080000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +7.64 ! VS_TSRopt - Power-maximizing region 2 tip-speed-ratio. Only used in VS_ControlMode = 2. +0.314000000000 ! VS_PwrFiltF - Low pass filter on power used to determine generator speed set point. Only used in VS_ControlMode = 3. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +2 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_GenSpeeds array +0.07854 ! PRC_LPF_Freq - Frequency of the low pass filter on the wind speed estimate used to set PRC_GenSpeeds [rad/s] +3.0000 25.0000 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s] +0.7917 0.7917 ! PRC_GenSpeeds - Array of generator speeds corresponding to PRC_WindSpeeds [rad/s] + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +63.000 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +97.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +43702538.05700 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"Cp_Ct_Cq.NREL5MW.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.2897 3.5793 3.8690 4.1586 4.4483 4.7379 5.0276 5.3172 5.6069 5.8966 6.1862 6.4759 6.7655 7.0552 7.3448 7.6345 7.9241 8.2138 8.5034 8.7931 9.0828 9.3724 9.6621 9.9517 10.2414 10.5310 10.8207 11.1103 11.4000 11.8533 12.3067 12.7600 13.2133 13.6667 14.1200 14.5733 15.0267 15.4800 15.9333 16.3867 16.8400 17.2933 17.7467 18.2000 18.6533 19.1067 19.5600 20.0133 20.4667 20.9200 21.3733 21.8267 22.2800 22.7333 23.1867 23.6400 24.0933 24.5467 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.01638154 -0.01796321 -0.01954487 -0.02112654 -0.02270820 -0.02428987 -0.02587154 -0.02745320 -0.02903487 -0.03061653 -0.03219820 -0.03377987 -0.03536153 -0.03694320 -0.03852486 -0.04010653 -0.04168820 -0.04326986 -0.04485153 -0.04643319 -0.04801486 -0.04959652 -0.05117819 -0.05275986 -0.05434152 -0.05592319 -0.05758373 -0.05882656 -0.06845507 -0.05992890 -0.05031134 -0.05798636 -0.06840333 -0.08061549 -0.09336590 -0.10698855 -0.12116040 -0.13530722 -0.15025447 -0.16589008 -0.18080009 -0.19651023 -0.21294470 -0.22969213 -0.24540879 -0.26178304 -0.27905964 -0.29706835 -0.31499595 -0.33136688 -0.34832584 -0.36677525 -0.38556416 -0.40554370 -0.42546670 -0.44309547 -0.46062268 -0.47954729 -0.49884696 -0.51943992 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER FORE-AFT DAMPING ------------------------------------------- +-1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] +0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +60 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.000 3.290 3.579 3.869 4.159 4.448 4.738 5.028 5.317 5.607 5.897 6.186 6.476 6.766 7.055 7.345 7.634 7.924 8.214 8.503 8.793 9.083 9.372 9.662 9.952 10.241 10.531 10.821 11.110 11.400 11.853 12.307 12.760 13.213 13.667 14.120 14.573 15.027 15.480 15.933 16.387 16.840 17.293 17.747 18.200 18.653 19.107 19.560 20.013 20.467 20.920 21.373 21.827 22.280 22.733 23.187 23.640 24.093 24.547 25.000 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.011 0.023 0.032 0.040 0.047 0.059 0.070 0.081 0.091 0.102 0.112 0.122 0.131 0.141 0.150 0.160 0.169 0.178 0.187 0.196 0.205 0.214 0.223 0.232 0.240 0.249 0.257 0.266 0.274 0.282 0.290 0.299 0.307 0.315 0.323 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +1 ! Fl_n - Number of Fl_Kp gains in gain scheduling, optional with default of 1 +0.0000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] +0.0000 ! Fl_U - Wind speeds for scheduling Fl_Kp, optional if Fl_Kp is single value [m/s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) + 0 0 0 ! Ind_BldPitch - The columns in OL_Filename that contains the blade pitch (1,2,3) inputs in rad [array] +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the yaw rate in rad/s +0 ! Ind_Azimuth - The column in OL_Filename that contains the desired azimuth position in rad (used if OL_Mode = 2) +0.0000 0.0000 0.0000 0.0000 ! RP_Gains - PID gains and Tf of derivative for rotor position control (used if OL_Mode = 2) +0 ! Ind_CableControl - The column(s) in OL_Filename that contains the cable control inputs in m [Used with CC_Mode = 2, must be the same size as CC_Group_N] +0 ! Ind_StructControl - The column(s) in OL_Filename that contains the structural control inputs [Used with StC_Mode = 2, must be the same size as StC_Group_N] + +!------- Pitch Actuator Model ----------------------------------------------------- +3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- Pitch Actuator Faults ----------------------------------------------------- +0.00000000 0.00000000 0.00000000 ! PF_Offsets - Constant blade pitch offsets for blades 1-3 [rad] + +!------- Active Wake Control ----------------------------------------------------- +1 ! AWC_NumModes - Number of user-defined AWC forcing modes +1 ! AWC_n - Azimuthal mode number(s) (i.e., the number and direction of the lobes of the wake structure) +1 ! AWC_harmonic - Harmonic(s) to apply in the AWC Inverse Coleman Transformation (only used when AWC_Mode = 2) +0.0500 ! AWC_freq - Frequency(s) of forcing mode(s) [Hz] +1.0000 ! AWC_amp - Pitch amplitude(s) of individual forcing mode(s) [deg] +0.0000 ! AWC_clockangle - Initial angle(s) of forcing mode(s) [deg] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +2.000000 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] + +!------- Cable Control --------------------------------------------------------- +1 ! CC_Group_N - Number of cable control groups +0 ! CC_GroupIndex - First index for cable control group, should correspond to deltaL +20.000000 ! CC_ActTau - Time constant for line actuator [s] + +!------- Structural Controllers --------------------------------------------------------- +1 ! StC_Group_N - Number of cable control groups +0 ! StC_GroupIndex - First index for structural control group, options specified in ServoDyn summary output diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/IceDyn_Input.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/IceDyn_Input.dat new file mode 100644 index 0000000000..3cd7ff93ce --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/IceDyn_Input.dat @@ -0,0 +1,74 @@ +------------------ IceDyn v1.01.x Input File ----------------------------------- +Freshwater Ice of Great Lakes input properties. +---------------------- STRUCTURE PROPERTIES ------------------------------------ + 1 NumLegs - number of support-structure legs in contact with ice + 0 LegPosX - array of size NumLegs: global X position of legs 1-NumLegs (m) + 0 LegPosY - array of size NumLegs: global Y position of legs 1-NumLegs (m) + 6 StWidth - array of size NumLegs: Width of the structure in contact with the ice, or diameter for cylindrical structures (m) +---------------------- ICE MODELS ---------------------------------------------- + 6 IceModel - Number that represents different ice models. {1: quasi-static load; 2:dynamic ice-structure interaction; 3: random ice load; 4: non-simultaneous ice failure; 5: sloping structure 6: large ice floe impact} + 1 IceSubModel - Number that represents different ice sub models. +---------------------- ICE PROPERTIES -General --------------------------------- +0.1 IceVel - Velocity of ice sheet movement (m/s) +0.8 IceThks - Thickness of the ice sheet (m) +1000 WtDen - Mass density of water (kg/m3) +900 IceDen - Mass density of ice (kg/m3) +0.0 InitLoc - Ice sheet initial location (m) +0.0 InitTm - Ice load starting time (s) +2 Seed1 - Random seed 1 +5 Seed2 - Random seed 2 +---------------------- ICE PROPERTIES - Ice Model 1, SubModel 1------------------ +2.7 Ikm - Indentation factor +3.5e6 Ag - Constant depends only on ice crystal type, used in calculating uniaxial stress (MPa-3s-1) +65000 Qg - Activation Energy (Jmol^-1) +8.314 Rg - Universal gas constant (Jmol-1K-1) +269 Tice - Ice temperature (K) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 2------------------- +0.3 Poisson - Poisson's ratio of ice +90.0 WgAngle - Wedge Angel, degree. Default 90 Degrees. +9.5 EIce - Young's modulus of ice (GPa) +---------------------- ICE PROPERTIES -Ice Model 1, SubModel 3------------------- +5 SigNm - Nominal ice stress (MPa) +---------------------- ICE PROPERTIES -Ice Model 2, SubModel 1,2----------------- +1.0 Pitch - Distance between sequential ice teeth (m) +5.0 IceStr2 - Ice failure stress (MPa) +1.0 Delmax2 - Ice tooth maximum elastic deformation (m) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 1,2----------------- +0.5 ThkMean - Mean value of ice thickness (m) +0.04 ThkVar - Variance of ice thickness (m^2) +0.001 VelMean - Mean value of ice velocity (m/s) +1e-6 VelVar - Variance of ice velocity (m^2/s^2) +15 TeMean - Mean value of ice loading event duration (s) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 2,3----------------- +5 StrMean - Mean value of ice strength (MPa) +1 StrVar - Variance of ice strength (MPa) +---------------------- ICE PROPERTIES -Ice Model 3, SubModel 3------------------- +0.1 DelMean - Mean value of maximum ice tooth tip displacement (m) +0.01 DelVar - Variance of maximum ice tooth tip displacement (m^2) +0.2 PMean - Mean value of the distance between sequential ice teeth (m) +0.01 PVar - Variance of the distance between sequential ice teeth (m^2) +---------------------- ICE PROPERTIES -Ice Model 4 ------------------------------ +0 PrflMean - Mean value of ice contact face position (m) +0.02 PrflSig - Standard deviation of ice contact face position (m) +10 ZoneNo1 - Number of failure zones along contact width +1 ZoneNo2 - Number of failure zones along contact height/thickness +0.27 ZonePitch - Distance between sequential ice teeth (m) +5.0 IceStr - Ice failure stress within each failure region (MPa) +0.027 Delmax - Ice teeth maximum elastic deformatIon (m) +---------------------- ICE PROPERTIES -Ice Model 5, Submodel 1,2 ----------------- +55.0 ConeAgl - Slope angle of the cone (degree) +8.0 ConeDwl - Cone waterline diameter (m) +1.0 ConeDtp - Cone top diameter (m) +0.3 RdupThk - Ride-up ice thickness (m) +0.3 mu - Friction coefficient between structure and ice (-) +0.7 FlxStr - Flexural strength of ice (MPa) +0.1 StrLim - Limit strain for ice fracture failure (-) +1e-2 StrRtLim - Limit strain rate for ice brittle behavior (s^-1) +---------------------- ICE PROPERTIES -Ice Model 6 ------------------------------- +800 FloeLth - Ice floe length (m) +800 FloeWth - Ice floe width (m) +5.0 CPrAr - Ice crushing strength pressure-area relation constant +-0.5 dPrAr - Ice crushing strength pressure-area relation order +9 Fdr - Constant external driving force (MN) +140 Kic - Fracture toughness of ice (kNm^(-3/2)) +3.3 FspN - Non-dimensional splitting load \ No newline at end of file diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/IceFloe_IEC_Crushing.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/IceFloe_IEC_Crushing.dat new file mode 100644 index 0000000000..66ae737cf7 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/IceFloe_IEC_Crushing.dat @@ -0,0 +1,51 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 60.0 +randomSeed 123 +rampTime 10.0 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 1.2 +numLegs 4.0 +towerFrequency 0.28 +! +legX1 4.5 +legY1 4.5 +shelterFactor_ks1 1.0 +loadPhase1 0.0 +! +legX2 -4.5 +legY2 4.5 +shelterFactor_ks2 1.0 +loadPhase2 45.0 +! +legX3 4.5 +legY3 -4.5 +shelterFactor_ks3 1.0 +loadPhase3 135.0 +! +legX4 -4.5 +legY4 -4.5 +shelterFactor_ks4 1.0 +loadPhase4 290.0 +! +singleLoad 0 +legAutoFactor 0 +multiLegFactor_kn 1 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_AeroDyn_blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_AeroDyn_blade.dat new file mode 100644 index 0000000000..9d541024d0 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_AeroDyn_blade.dat @@ -0,0 +1,28 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID + (m) (m) (m) (deg) (deg) (m) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 + +!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m +6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn.dat new file mode 100644 index 0000000000..2f8ab74652 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn.dat @@ -0,0 +1,94 @@ +--------- BEAMDYN with OpenFAST INPUT FILE ------------------------------------------- +NREL 5MW blade +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech"? (flag) +True QuasiStaticInit - Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only] + 0 rhoinf - Numerical damping parameter for generalized-alpha integrator + 2 quadrature - Quadrature method: 1=Gaussian; 2=Trapezoidal (switch) +"DEFAULT" refine - Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2] +"DEFAULT" n_fact - Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5] +"DEFAULT" DTBeam - Time step size (s) +"DEFAULT" load_retries - Number of factored load retries before quitting the simulation [DEFAULT = 20] +"DEFAULT" NRMax - Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10] +"DEFAULT" stop_tol - Tolerance for stopping criterion (-) [DEFAULT = 1E-5] +"DEFAULT" tngt_stf_fd - Use finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_comp - Compare analytical finite differenced tangent stiffness matrix? (flag) +"DEFAULT" tngt_stf_pert - Perturbation size for finite differencing (-) [DEFAULT = 1E-6] +"DEFAULT" tngt_stf_difftol - Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1] +True RotStates - Orient states in the rotating frame during linearization? (flag) [used only when linearizing] +---------------------- GEOMETRY PARAMETER -------------------------------------- + 1 member_total - Total number of members (-) + 49 kp_total - Total number of key points (-) [must be at least 3] + 1 49 - Member number; Number of key points in this member + kp_xr kp_yr kp_zr initial_twist + (m) (m) (m) (deg) +0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.9987500E-01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1998650E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 2.1998550E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 3.1998450E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 4.1998350E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 5.1998250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 6.1998150E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 7.1998050E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 8.2010250E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 9.1997850E+00 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.0199775E+01 1.3308000E+01 +0.0000000E+00 0.0000000E+00 1.1199765E+01 1.3181000E+01 +0.0000000E+00 0.0000000E+00 1.2199755E+01 1.2848000E+01 +0.0000000E+00 0.0000000E+00 1.3200975E+01 1.2192000E+01 +0.0000000E+00 0.0000000E+00 1.4199735E+01 1.1561000E+01 +0.0000000E+00 0.0000000E+00 1.5199725E+01 1.1072000E+01 +0.0000000E+00 0.0000000E+00 1.6199715E+01 1.0792000E+01 +0.0000000E+00 0.0000000E+00 1.8200925E+01 1.0232000E+01 +0.0000000E+00 0.0000000E+00 2.0200290E+01 9.6720000E+00 +0.0000000E+00 0.0000000E+00 2.2200270E+01 9.1100000E+00 +0.0000000E+00 0.0000000E+00 2.4200250E+01 8.5340000E+00 +0.0000000E+00 0.0000000E+00 2.6200230E+01 7.9320000E+00 +0.0000000E+00 0.0000000E+00 2.8200825E+01 7.3210000E+00 +0.0000000E+00 0.0000000E+00 3.0200190E+01 6.7110000E+00 +0.0000000E+00 0.0000000E+00 3.2200170E+01 6.1220000E+00 +0.0000000E+00 0.0000000E+00 3.4200150E+01 5.5460000E+00 +0.0000000E+00 0.0000000E+00 3.6200130E+01 4.9710000E+00 +0.0000000E+00 0.0000000E+00 3.8200725E+01 4.4010000E+00 +0.0000000E+00 0.0000000E+00 4.0200090E+01 3.8340000E+00 +0.0000000E+00 0.0000000E+00 4.2200070E+01 3.3320000E+00 +0.0000000E+00 0.0000000E+00 4.4200050E+01 2.8900000E+00 +0.0000000E+00 0.0000000E+00 4.6200030E+01 2.5030000E+00 +0.0000000E+00 0.0000000E+00 4.8201240E+01 2.1160000E+00 +0.0000000E+00 0.0000000E+00 5.0199990E+01 1.7300000E+00 +0.0000000E+00 0.0000000E+00 5.2199970E+01 1.3420000E+00 +0.0000000E+00 0.0000000E+00 5.4199950E+01 9.5400000E-01 +0.0000000E+00 0.0000000E+00 5.5199940E+01 7.6000000E-01 +0.0000000E+00 0.0000000E+00 5.6199930E+01 5.7400000E-01 +0.0000000E+00 0.0000000E+00 5.7199920E+01 4.0400000E-01 +0.0000000E+00 0.0000000E+00 5.7699915E+01 3.1900000E-01 +0.0000000E+00 0.0000000E+00 5.8201140E+01 2.5300000E-01 +0.0000000E+00 0.0000000E+00 5.8699905E+01 2.1600000E-01 +0.0000000E+00 0.0000000E+00 5.9199900E+01 1.7800000E-01 +0.0000000E+00 0.0000000E+00 5.9699895E+01 1.4000000E-01 +0.0000000E+00 0.0000000E+00 6.0199890E+01 1.0100000E-01 +0.0000000E+00 0.0000000E+00 6.0699885E+01 6.2000000E-02 +0.0000000E+00 0.0000000E+00 6.1199880E+01 2.3000000E-02 +0.0000000E+00 0.0000000E+00 6.1500000E+01 0.0000000E+00 +---------------------- MESH PARAMETER ------------------------------------------ + 5 order_elem - Order of interpolation (basis) function (-) +---------------------- MATERIAL PARAMETER -------------------------------------- +"NRELOffshrBsline5MW_BeamDyn_Blade.dat" BldFile - Name of file containing properties for blade (quoted string) +---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- +False UsePitchAct - Whether a pitch actuator should be used (flag) + 200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] + 2E+07 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] + 500000 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] +---------------------- OUTPUTS ------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) +"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. + 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) + 1, 2, 3, 4, 5, 6 OutNd - Nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RootFxr, RootFyr, RootFzr" +"RootMxr, RootMyr, RootMzr" +"TipTDxr, TipTDyr, TipTDzr" +"TipRDxr, TipRDyr, TipRDzr" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn_Blade.dat new file mode 100644 index 0000000000..b8724b9a23 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_BeamDyn_Blade.dat @@ -0,0 +1,756 @@ + ------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- + Test Format 1 + ---------------------- BLADE PARAMETERS -------------------------------------- +49 station_total - Number of blade input stations (-) + 1 damp_type - Damping type: 0: no damping; 1: damped + ---------------------- DAMPING COEFFICIENT------------------------------------ + mu1 mu2 mu3 mu4 mu5 mu6 + (-) (-) (-) (-) (-) (-) +1.0E-03 1.0E-03 1.0E-03 0.0014 0.0022 0.0022 + ---------------------- DISTRIBUTED PROPERTIES--------------------------------- + 0.000000 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.003250 + 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.729480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.729480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.811360E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.811000E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.564400E+09 + + 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.789350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.789350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.730400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.728600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.945900E+03 + + 0.019510 + 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.078950E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.078950E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.955860E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.942490E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.431590E+09 + + 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.733630E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.733630E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.066380E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.091520E+03 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.157900E+03 + + 0.035770 + 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.006723E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.006723E+10 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.949780E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.745590E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.993980E+09 + + 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.405500E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.405500E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.047360E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.660900E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.013450E+03 + + 0.052030 + 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.867780E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.867780E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.978880E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.528740E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.666590E+09 + + 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.400420E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.400420E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.099750E+03 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.738100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.973560E+03 + + 0.068290 + 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.607860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.607860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.485850E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.078240E+10 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.474710E+09 + + 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.924960E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.924960E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.730200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.485500E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521570E+03 + + 0.084550 + 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.491260E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.491260E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.022060E+10 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.229720E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.323540E+09 + + 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.502750E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.502750E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.414900E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.567600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.098250E+03 + + 0.100810 + 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.971300E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.971300E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 9.144700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.309540E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.907870E+09 + + 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.240540E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.240540E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.937300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.005300E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.942600E+02 + + 0.117070 + 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.493950E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.493950E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.063160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.528360E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.570360E+09 + + 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.006380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.006380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.471800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.516100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.987900E+02 + + 0.133350 + 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.034800E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.034800E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.884440E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.980060E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.158260E+09 + + 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.820620E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.820620E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.908400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.161200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.069600E+02 + + 0.149590 + 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.037290E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.037290E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.009180E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.936840E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.002120E+09 + + 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.996550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.996550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.038600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.036000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.074600E+02 + + 0.165850 + 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.169720E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.169720E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.167680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.691660E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.559000E+08 + + 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.263210E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.263210E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.447000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.892400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.339400E+02 + + 0.182110 + 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.082350E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.082350E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.271660E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.949460E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.722700E+08 + + 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.168200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.168200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.699000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.465700E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.164700E+02 + + 0.198370 + 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.085970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.085970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.081700E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.386520E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.474900E+08 + + 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.061860E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.061860E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.012800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.159100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.171900E+02 + + 0.214650 + 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.668340E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.668340E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.244530E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.933740E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.488400E+08 + + 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.814200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.814200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.465600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.871100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.336700E+02 + + 0.230890 + 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.147760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.147760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.048960E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.568960E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.359200E+08 + + 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.528220E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.528220E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.687100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.608400E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.295500E+02 + + 0.247150 + 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.011580E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.011580E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.948490E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.388650E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.113500E+08 + + 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.494770E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.494770E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.537600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.485600E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.023200E+02 + + 0.263410 + 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.882620E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.882620E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.808020E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.271990E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.919400E+08 + + 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.465380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.465380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.362200E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.403000E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.765200E+02 + + 0.295950 + 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.613970E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.613970E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.501400E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.050050E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.610000E+08 + + 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.393330E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.393330E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.981800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.246100E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.227900E+02 + + 0.328460 + 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.357480E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.357480E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.244070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.828250E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.288200E+08 + + 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.300040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.300040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.620800E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.094200E+02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.715000E+02 + + 0.360980 + 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.146860E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.146860E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.995280E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.588710E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.007500E+08 + + 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.219900E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.219900E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.350100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.436000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.293700E+02 + + 0.393500 + 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.944090E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.944090E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.750760E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.361930E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.743800E+08 + + 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.138200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.138200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.085700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.024000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.888100E+02 + + 0.426020 + 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.632700E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.632700E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.447140E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.102380E+09 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.444700E+08 + + 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.947340E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.947340E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.638700E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.267000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.265400E+02 + + 0.458550 + 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.432400E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.432400E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.139070E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.758000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.199800E+08 + + 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.871200E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.871200E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.370600E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.942000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.864800E+02 + + 0.491060 + 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.168760E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.168760E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.734240E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.813000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.119000E+07 + + 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.633430E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.633430E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.964100E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.734000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.337500E+02 + + 0.523580 + 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.047430E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.047430E+09 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.554870E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.347200E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.909000E+07 + + 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.532070E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.532070E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.803400E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.914000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.094800E+02 + + 0.556100 + 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.229500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.229500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.334030E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.089000E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.745000E+07 + + 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.416660E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.416660E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.624300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.216000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845900E+02 + + 0.588620 + 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.608200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.608200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.828730E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.145400E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.592000E+07 + + 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.206380E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.206380E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.348300E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.733000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.521600E+02 + + 0.621150 + 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.480300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.480300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.584100E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.386300E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.598000E+07 + + 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.002930E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.002930E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.163000E+02 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.330000E+01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.296000E+02 + + 0.653660 + 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.397000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.397000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.323360E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.758800E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.744000E+07 + + 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.794040E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.794040E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.798000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.960000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.079400E+02 + + 0.686180 + 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.311500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.311500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.183680E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.260100E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.090000E+07 + + 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.650940E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.650940E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.893000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.300000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.062300E+02 + + 0.718700 + 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.600100E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.600100E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.020160E+09 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.072600E+08 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.854000E+07 + + 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.544110E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.544110E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.578000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.220000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.200000E+01 + + 0.751220 + 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.757500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.757500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.978100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.088000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.628000E+07 + + 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.389350E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.389350E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.996000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.190000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.515000E+01 + + 0.783760 + 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.288900E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.288900E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 7.096100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.631000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.453000E+07 + + 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.295550E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.295550E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.141000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.577000E+01 + + 0.816260 + 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.440400E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.440400E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.181900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.105000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.070000E+06 + + 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.072640E+02 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.072640E+02 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.544000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.360000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.880000E+01 + + 0.848780 + 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.116000E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.116000E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 4.548700E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.948000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.060000E+06 + + 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.877600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.877600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.957000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.750000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.232000E+01 + + 0.881300 + 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.815200E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.815200E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.951200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.936000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.080000E+06 + + 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.024800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.024800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.409000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.210000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.630000E+01 + + 0.897560 + 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.602500E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.602500E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.537200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.467000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 6.090000E+06 + + 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 8.300100E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 8.300100E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 3.012000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.930000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.205000E+01 + + 0.913820 + 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.092300E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.092300E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 3.047300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.041000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.750000E+06 + + 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 7.290600E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 7.290600E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 2.015000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.690000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.184000E+01 + + 0.930080 + 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.000800E+07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.000800E+08 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.814200E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.652000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.330000E+06 + + 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.877200E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.877200E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.853000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.490000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.002000E+01 + + 0.938210 + 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 9.224000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 9.224000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 2.617100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.384000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.940000E+06 + + 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.626400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.626400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.711000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.340000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.845000E+01 + + 0.946360 + 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 6.323000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 6.323000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.588100E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.963000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.240000E+06 + + 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.934000E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.934000E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 1.155000E+01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.100000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.265000E+01 + + 0.954470 + 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.332000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.332000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.378800E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.600000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.660000E+06 + + 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.591400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.591400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.770000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.066000E+01 + + 0.962600 + 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.453000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.453000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.187900E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.283000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 3.130000E+06 + + 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 5.248400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 5.248400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 8.190000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.100000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 8.900000E+00 + + 0.970730 + 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.690000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.690000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 1.016300E+08 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.008000E+07 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.640000E+06 + + 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.911400E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.911400E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.820000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.600000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.380000E+00 + + 0.978860 + 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.992000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.992000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 8.507000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.550000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.170000E+06 + + 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.581800E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.581800E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 5.570000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.200000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 5.990000E+00 + + 0.986990 + 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 2.131000E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 2.131000E+07 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.426000E+07 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.600000E+06 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.580000E+06 + + 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.166900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.166900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 4.010000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E-01 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.260000E+00 + + 0.995120 + 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 4.850000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 4.850000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 6.610000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.500000E+05 + + 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.145300E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.145300E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 9.400000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 4.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.800000E-01 + + 1.000000 + 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 3.530000E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 3.530000E+06 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 5.010000E+06 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.700000E+05 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.900000E+05 + + 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 1.031900E+01 0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 1.031900E+01 0.000000E+00 0.000000E+00 0.000000E+00 + 0.000000E+00 -0.000000E+00 0.000000E+00 6.800000E-01 0.000000E+00 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 2.000000E-02 0.000000E+00 + 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 7.000000E-01 + + + + + + + + + + + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Blade.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Blade.dat new file mode 100644 index 0000000000..cf5aa25dfe --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Blade.dat @@ -0,0 +1,83 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 +1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 +3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 +5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 +6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 +8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 +1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 +1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 +1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 +1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 +1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 +1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 +1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 +2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 +2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 +2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 +2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 +2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 +3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 +3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 +3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 +4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 +4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 +4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 +5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 +5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 +5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 +6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 +6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 +6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 +7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 +7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 +7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 +8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 +8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 +8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 +8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 +9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 +9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 +9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 +9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 +9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 +9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 +9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 +9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 +9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 +9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 +1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_InflowWind.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_InflowWind.dat new file mode 100644 index 0000000000..a5923abe64 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_InflowWind.dat @@ -0,0 +1,71 @@ +------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- +Steady 8 m/s winds with no shear for FAST CertTests #20 and #25 +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 1 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) + 0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) +False VelInterpCubic - Use cubic interpolation for velocity in time (false=linear, true=cubic) [Used with WindType=2,3,4,5,7] + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 90 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 10 HWindSpeed - Horizontal windspeed (m/s) + 90 RefHt - Reference height for horizontal wind speed (m) + 0 PLexp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +none Filename_Uni - Filename of time series data for uniform wind field. (-) + 90 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"Wind/90m_12mps_twr.bts" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 90 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 11.4 URef - Mean u-component wind speed at the reference height (m/s) + 0 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +================== LIDAR Parameters =========================================================================== +0 SensorType - Switch for lidar configuration (0 = None, 1 = Single Point Beam(s), 2 = Continuous, 3 = Pulsed) +0 NumPulseGate - Number of lidar measurement gates (used when SensorType = 3) +30 PulseSpacing - Distance between range gates (m) (used when SensorType = 3) +0 NumBeam - Number of lidar measurement beams (0-5)(used when SensorType = 1) +-200 FocalDistanceX - Focal distance co-ordinates of the lidar beam in the x direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceY - Focal distance co-ordinates of the lidar beam in the y direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0 FocalDistanceZ - Focal distance co-ordinates of the lidar beam in the z direction (relative to hub height) (only first coordinate used for SensorType 2 and 3) (m) +0.0 0.0 0.0 RotorApexOffsetPos - Offset of the lidar from hub height (m) +17 URefLid - Reference average wind speed for the lidar[m/s] +0.25 MeasurementInterval - Time between each measurement [s] +False LidRadialVel - TRUE => return radial component, FALSE => return 'x' direction estimate +1 ConsiderHubMotion - Flag whether to consider the hub motion's impact on Lidar measurements +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp new file mode 100644 index 0000000000..ad085b6d0e --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp @@ -0,0 +1,26 @@ +! Test input parameters for IceFloe +! +! Model selection and general inputs +! +timeStep 0.1 +duration 600.0 +randomSeed 123 +! +! General ice property inputs +! +iceThickness 1.0 +iceVelocity 0.20 +iceDirection 0.0 +refIceStrength 2200000.0 +! +! Tower configuration inputs +! +towerDiameter 6.0 +numLegs 1.0 +towerFrequency 0.28 +! +! Inputs for lock-in crushing +! +iceType 4 +shapeFactor_k1 0.900000 +contactFactor_k2 0.500000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat new file mode 100644 index 0000000000..a0b1ffc129 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat @@ -0,0 +1,106 @@ +------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- +NREL 5.0 MW offshore baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 0 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False Buoyancy - Include buoyancy effects? (flag) +False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] +"unused" AA_InputFile - Aeroacoustics input file +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) + 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] + 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] + 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 8 NumAFfiles - Number of airfoil files used (-) +"Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"Airfoils/Cylinder2.dat" +"Airfoils/DU40_A17.dat" +"Airfoils/DU35_A17.dat" +"Airfoils/DU30_A17.dat" +"Airfoils/DU25_A17.dat" +"Airfoils/DU21_A17.dat" +"Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when Buoyancy=True] +0.0 VolHub - Hub volume (m^3) +0.0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] +0.0 VolNac - Nacelle volume (m^3) +0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail fin Aerodynamics ======================================================================== +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] + 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.000000E-01 0.0 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.000000E-01 0.0 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.000000E-01 0.0 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.000000E-01 0.0 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.000000E-01 0.0 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.000000E-01 0.0 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.000000E-01 0.0 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.000000E-01 0.0 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.000000E-01 0.0 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.000000E-01 0.0 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 3 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtFldFxh" +"RtFldFyh" +"RtFldFzh" +"RtFldMxh" +"RtFldMyh" +"RtFldMzh" +"RtVAvgxh" +"RtFldCp" +"RtFldCt" +"RtArea" +"RtSpeed" +"RtTSR" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat new file mode 100644 index 0000000000..b310013450 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -0,0 +1,168 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to ".ech" (flag) + 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) +"default" DT - Integration time step (s) +---------------------- DEGREES OF FREEDOM -------------------------------------- +True FlapDOF1 - First flapwise blade mode DOF (flag) +True FlapDOF2 - Second flapwise blade mode DOF (flag) +True EdgeDOF - First edgewise blade mode DOF (flag) +True TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +True GenDOF - Generator DOF (flag) +False YawDOF - Yaw DOF (flag) +True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) +True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) +True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) +True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False PtfmYDOF - Platform yaw rotation DOF (flag) +---------------------- INITIAL CONDITIONS -------------------------------------- + 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) + 0 IPDefl - Initial in-plane blade-tip deflection (meters) + 0 BlPitch(1) - Blade 1 initial pitch (degrees) + 0 BlPitch(2) - Blade 2 initial pitch (degrees) + 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] + 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] + 90 Azimuth - Initial azimuth angle for blade 1 (degrees) + 0 RotSpeed - Initial or fixed rotor speed (rpm) + 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) + 0 TTDspFA - Initial fore-aft tower-top displacement (meters) + 0 TTDspSS - Initial side-to-side tower-top displacement (meters) + 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) + 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) + 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) + 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) + 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) + 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) + 0 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) +2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 5.452E+06 PtfmMass - Platform mass (kg) + 7.269E+08 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 7.269E+08 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 1.4539E+09 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NRELOffshrBsline5MW_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NRELOffshrBsline5MW_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- YAW-FRICTION -------------------------------------------- + 0 YawFrctMod - Yaw-friction model {0: none, 1: friction without Fz term at the yaw bearing, 2: friction includes Fz term at yaw bearing, 3: user defined model} (switch) + 300 M_CSmax - Maximum Coulomb friction torque (N-m)[mu_s*D_eff when YawFrctMod=1 and Fz*mu_s*D_eff when YawFrctMod=2] + 40 M_CD - Dynamic friction moment at null yaw rate (N-m) [mu_d*D_eff when YawFrctMod=1 and Fz*mu_d*D_eff when YawFrctMod=2] + 0 sig_v - Viscous friction coefficient (N-m/(rad/s)) +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) +8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"BldPitch1" - Pitch angles for blade 1 +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"NacYaw" - Nacelle yaw angle and nacelle yaw error estimate +"NcIMUTAxs" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"NcIMUTAys" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"NcIMUTAzs" - Nacelle IMU translational accelerations (absolute) in the nonrotating, shaft coordinate system +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"PtfmSurge" - Platform translational surge, sway, and heave displacements +"PtfmSway" - Platform translational surge, sway, and heave displacements +"PtfmHeave" - Platform translational surge, sway, and heave displacements +"PtfmRoll" - Platform rotational roll, pitch and yaw displacements +"PtfmPitch" - Platform rotational roll, pitch and yaw displacements +"PtfmYaw" - Platform rotational roll, pitch and yaw displacements +"PtfmTAxt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"PtfmTAyt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"PtfmTAzt" - Platform translation accelerations (absolute) in the tower-base coordinate system +"RotThrust" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"LSSGagFya" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"LSSGagFza" - Rotor thrust and low-speed shaft 0- and 90-rotating shear forces at the main bearing +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-rotating bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (platform) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (platform) +"TwHt1MLxt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +"TwHt1MLyt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +"TwHt1MLzt" - Local side-to-side bending, fore-aft bending, and yaw moments at tower gage 1 (approx. 50% elevation) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat new file mode 100644 index 0000000000..664185cbd6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat @@ -0,0 +1,54 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW offshore baseline tower input properties. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 5.5908700E+03 6.1434300E+11 6.1434300E+11 +1.0000000E-01 5.2324300E+03 5.3482100E+11 5.3482100E+11 +2.0000000E-01 4.8857600E+03 4.6326700E+11 4.6326700E+11 +3.0000000E-01 4.5508700E+03 3.9913100E+11 3.9913100E+11 +4.0000000E-01 4.2277500E+03 3.4188300E+11 3.4188300E+11 +5.0000000E-01 3.9164100E+03 2.9101100E+11 2.9101100E+11 +6.0000000E-01 3.6168300E+03 2.4602700E+11 2.4602700E+11 +7.0000000E-01 3.3290300E+03 2.0645700E+11 2.0645700E+11 +8.0000000E-01 3.0530100E+03 1.7185100E+11 1.7185100E+11 +9.0000000E-01 2.7887500E+03 1.4177600E+11 1.4177600E+11 +1.0000000E+00 2.5362700E+03 1.1582000E+11 1.1582000E+11 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.7004 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 2.1963 TwFAM1Sh(3) - , coefficient of x^3 term + -5.6202 TwFAM1Sh(4) - , coefficient of x^4 term + 6.2275 TwFAM1Sh(5) - , coefficient of x^5 term + -2.504 TwFAM1Sh(6) - , coefficient of x^6 term + -70.5319 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -63.7623 TwFAM2Sh(3) - , coefficient of x^3 term + 289.737 TwFAM2Sh(4) - , coefficient of x^4 term + -176.513 TwFAM2Sh(5) - , coefficient of x^5 term + 22.0706 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.385 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -1.7684 TwSSM1Sh(3) - , coefficient of x^3 term + 3.0871 TwSSM1Sh(4) - , coefficient of x^4 term + -2.2395 TwSSM1Sh(5) - , coefficient of x^5 term + 0.5357 TwSSM1Sh(6) - , coefficient of x^6 term + -121.21 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + 184.415 TwSSM2Sh(3) - , coefficient of x^3 term + -224.904 TwSSM2Sh(4) - , coefficient of x^4 term + 298.536 TwSSM2Sh(5) - , coefficient of x^5 term + -135.838 TwSSM2Sh(6) - , coefficient of x^6 term + + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ServoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ServoDyn.dat new file mode 100644 index 0000000000..62e2cae9dc --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ServoDyn.dat @@ -0,0 +1,111 @@ +------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- +NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) +---------------------- SIMULATION CONTROL -------------------------------------- +False Echo - Echo input data to .ech (flag) +"default" DT - Communication interval for controllers (s) (or "default") +---------------------- PITCH CONTROL ------------------------------------------- + 9 PCMode - Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 TPCOn - Time to enable active pitch control (s) [unused when PCMode=0] + 9999.9 TPitManS(1) - Time to start override pitch maneuver for blade 1 and end standard pitch control (s) + 9999.9 TPitManS(2) - Time to start override pitch maneuver for blade 2 and end standard pitch control (s) + 9999.9 TPitManS(3) - Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades] + 8 PitManRat(1) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s) + 8 PitManRat(2) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s) + 8 PitManRat(3) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades] + 20 BlPitchF(1) - Blade 1 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(2) - Blade 2 final pitch for pitch maneuvers (degrees) + 20 BlPitchF(3) - Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades] +---------------------- GENERATOR AND TORQUE CONTROL ---------------------------- + 1 VSContrl - Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 2 GenModel - Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0] + 94.4 GenEff - Generator efficiency [ignored by the Thevenin and user-defined generator models] (%) +True GenTiStr - Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag) +True GenTiStp - Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag) + 10.0 SpdGenOn - Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False] + 0 TimGenOn - Time to turn on the generator for a startup (s) [used only when GenTiStr=True] + 9999.9 TimGenOf - Time to turn off the generator (s) [used only when GenTiStp=True] +---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL -------------------- + 1162.0 VS_RtGnSp - Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1] + 47403.0 VS_RtTq - Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1] + 0.025576 VS_Rgn2K - Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1] + 10.0 VS_SlPc - Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1] +---------------------- SIMPLE INDUCTION GENERATOR ------------------------------ + 9999.9 SIG_SlPc - Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_SySp - Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_RtTq - Rated torque (N-m) [used only when VSContrl=0 and GenModel=1] + 9999.9 SIG_PORt - Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1] +---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR ----------------- + 9999.9 TEC_Freq - Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2] + 9998 TEC_NPol - Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SRes - Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RRes - Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_VLL - Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_SLR - Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_RLR - Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2] + 9999.9 TEC_MR - Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2] +---------------------- HIGH-SPEED SHAFT BRAKE ---------------------------------- + 0 HSSBrMode - HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 THSSBrDp - Time to initiate deployment of the HSS brake (s) + 0.6 HSSBrDT - Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1] + 28116.2 HSSBrTqF - Fully deployed HSS-brake torque (N-m) +---------------------- NACELLE-YAW CONTROL ------------------------------------- + 0 YCMode - Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 9999.9 TYCOn - Time to enable active yaw control (s) [unused when YCMode=0] + 0 YawNeut - Neutral yaw position--yaw spring force is zero at this yaw (degrees) +9.02832E+09 YawSpr - Nacelle-yaw spring constant (N-m/rad) + 1.916E+07 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s)) + 9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s) + 2 YawManRat - Yaw maneuver rate (in absolute value) (deg/s) + 0 NacYawF - Final yaw angle for override yaw maneuvers (degrees) +---------------------- AERODYNAMIC FLOW CONTROL -------------------------------- + 0 AfCmode - Airfoil control mode {0: none, 1: cosine wave cycle, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + 0 AfC_Mean - Mean level for cosine cycling or steady value (-) [used only with AfCmode==1] + 0 AfC_Amp - Amplitude for for cosine cycling of flap signal (-) [used only with AfCmode==1] + 0 AfC_Phase - Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1] +---------------------- STRUCTURAL CONTROL -------------------------------------- +0 NumBStC - Number of blade structural controllers (integer) +"unused" BStCfiles - Name of the files for blade structural controllers (quoted strings) [unused when NumBStC==0] +0 NumNStC - Number of nacelle structural controllers (integer) +"unused" NStCfiles - Name of the files for nacelle structural controllers (quoted strings) [unused when NumNStC==0] +0 NumTStC - Number of tower structural controllers (integer) +"unused" TStCfiles - Name of the files for tower structural controllers (quoted strings) [unused when NumTStC==0] +0 NumSStC - Number of substructure structural controllers (integer) +"unused" SStCfiles - Name of the files for substructure structural controllers (quoted strings) [unused when NumSStC==0] +---------------------- CABLE CONTROL ------------------------------------------- + 0 CCmode - Cable control mode {0: none, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) +---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface] +"../../ROSCO/install/lib/libdiscon.so" DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface] +"/home/of_rt/ROSCO/Examples/examples_out/17_ZeroMQ/DISCON_zmq.IN" DLL_InFile - Name of input file sent to the DLL (-) [used only with Bladed Interface] +"DISCON_zmq" DLL_ProcName - Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface] +"default" DLL_DT - Communication interval for dynamic library (s) (or "default") [used only with Bladed Interface] +false DLL_Ramp - Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface] + 9999.9 BPCutoff - Cutoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface] + 0 NacYaw_North - Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface] + 1 Ptch_Cntrl - Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface] + 0 Ptch_SetPnt - Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface] + 0 Ptch_Min - Record 6: Minimum pitch angle (deg) [used only with Bladed Interface] + 0 Ptch_Max - Record 7: Maximum pitch angle (deg) [used only with Bladed Interface] + 0 PtchRate_Min - Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface] + 0 PtchRate_Max - Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface] + 0 Gain_OM - Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface] + 0 GenSpd_MinOM - Record 17: Minimum generator speed (rpm) [used only with Bladed Interface] + 0 GenSpd_MaxOM - Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface] + 0 GenSpd_Dem - Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface] + 0 GenTrq_Dem - Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface] + 0 GenPwr_Dem - Record 13: Demanded power (W) [used only with Bladed Interface] +---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE ------------- + 0 DLL_NumTrq - Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface] + GenSpd_TLU GenTrq_TLU + (rpm) (Nm) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to .sum (flag) (currently unused) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"GenTq" - Electrical generator power and torque +"GenPwr" - Electrical generator power and torque +"BlPitchC1, BlPitchC2, BlPitchC3" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum new file mode 100644 index 0000000000..d292eb861f --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum @@ -0,0 +1,52 @@ + +This summary information was generated by AeroDyn on 21-Jun-2024 at 17:07:27. + +====== General Options ============================================================================ + 0 WakeMod - Type of wake/induction model: steady + 1 TwrPotent - Type of tower influence on wind based on potential flow around the tower: baseline potential flow + 0 TwrShadow - Type of tower influence on wind based on downstream tower shadow: none + T TwrAero - Calculate tower aerodynamic loads? Yes + F CavitCheck - Perform cavitation check? No + F Buoyancy - Include buoyancy effects? No +======================== Unsteady Airfoil Aerodynamics Options ===================================== + 0 UA_Mod - Unsteady Aero Model: none (quasi-steady airfoil aerodynamics) + T FLookup - Use a lookup for f'? Yes +====== Outputs ==================================================================================== + 3 NBlOuts - Number of blade nodes selected for output + 19 NumBlNds - Number of blade nodes in the analysis + Blade nodes selected for output: Output node Analysis node + ----------- ------------- + 1 1 + 2 9 + 3 19 + 0 NTwOuts - Number of tower nodes selected for output + + Requested Output Channels: + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 RtFldFxh (N) + 2 RtFldFyh (N) + 3 RtFldFzh (N) + 4 RtFldMxh (N-m) + 5 RtFldMyh (N-m) + 6 RtFldMzh (N-m) + 7 RtVAvgxh (m/s) + 8 RtFldCp (-) + 9 RtFldCt (-) + 10 RtArea (m^2) + 11 RtSpeed (rpm) + 12 RtTSR (-) + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- + + +Buoyancy parameters: + +Hub volume (m^3): 0.000 +Nacelle volume (m^3): 0.000 +Total blade volume (m^3): 0.000 +Tower volume (m^3): 0.000 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum new file mode 100644 index 0000000000..855519f514 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum @@ -0,0 +1,213 @@ + +This summary information was generated by ElastoDyn on 21-Jun-2024 at 17:07:27. + + +Turbine features: + + Upwind, 3-bladed rotor with rigid hub. + The model has 15 of 24 DOFs active (enabled) at start-up. + Disabled Platform horizontal surge translation DOF + Disabled Platform horizontal sway translation DOF + Disabled Platform vertical heave translation DOF + Disabled Platform roll tilt rotation DOF + Disabled Platform pitch tilt rotation DOF + Disabled Platform yaw rotation DOF + Enabled 1st tower fore-aft bending mode DOF + Enabled 1st tower side-to-side bending mode DOF + Enabled 2nd tower fore-aft bending mode DOF + Enabled 2nd tower side-to-side bending mode DOF + Disabled Nacelle yaw DOF + Disabled Rotor-furl DOF + Enabled Variable speed generator DOF + Enabled Drivetrain rotational-flexibility DOF + Disabled Tail-furl DOF + Enabled 1st flapwise bending-mode DOF of blade 1 + Enabled 1st edgewise bending-mode DOF of blade 1 + Enabled 2nd flapwise bending-mode DOF of blade 1 + Enabled 1st flapwise bending-mode DOF of blade 2 + Enabled 1st edgewise bending-mode DOF of blade 2 + Enabled 2nd flapwise bending-mode DOF of blade 2 + Enabled 1st flapwise bending-mode DOF of blade 3 + Enabled 1st edgewise bending-mode DOF of blade 3 + Enabled 2nd flapwise bending-mode DOF of blade 3 + + +Time steps: + + Structural (s) 0.01000000 + + +Some calculated parameters: + + Hub-Height (m) 90.000 + Flexible Tower Length (m) 87.600 + Flexible Blade Length (m) 61.500 + + +Rotor mass properties: + + Rotor Mass (kg) 109389.842 + Rotor Inertia (kg-m^2) 38677040.613 + Blade 1 Blade 2 Blade 3 + ------- ------- ------- + Mass (kg) 17536.614 17536.614 17536.614 + Second Mass Moment (kg-m^2) 11752352.265 11752352.265 11752352.265 + First Mass Moment (kg-m) 362132.653 362132.653 362132.653 + Center of Mass (m) 20.650 20.650 20.650 + + +Additional mass properties: + + Tower-top Mass (kg) 349389.842 + Tower Mass (kg) 347460.232 + Platform Mass (kg) 5452000.000 + Mass Incl. Platform (kg) 6148850.074 + + +Interpolated tower properties: + +Node TwFract HNodes DHNodes TMassDen FAStiff SSStiff + (-) (-) (m) (m) (kg/m) (Nm^2) (Nm^2) + 1 0.025 2.190 4.380 5501.260 5.945E+11 5.945E+11 + 2 0.075 6.570 4.380 5322.040 5.547E+11 5.547E+11 + 3 0.125 10.950 4.380 5145.763 5.169E+11 5.169E+11 + 4 0.175 15.330 4.380 4972.428 4.812E+11 4.812E+11 + 5 0.225 19.710 4.380 4802.038 4.472E+11 4.472E+11 + 6 0.275 24.090 4.380 4634.592 4.152E+11 4.152E+11 + 7 0.325 28.470 4.380 4470.090 3.848E+11 3.848E+11 + 8 0.375 32.850 4.380 4308.530 3.562E+11 3.562E+11 + 9 0.425 37.230 4.380 4149.915 3.292E+11 3.292E+11 + 10 0.475 41.610 4.380 3994.245 3.037E+11 3.037E+11 + 11 0.525 45.990 4.380 3841.515 2.798E+11 2.798E+11 + 12 0.575 50.370 4.380 3691.725 2.573E+11 2.573E+11 + 13 0.625 54.750 4.380 3544.880 2.361E+11 2.361E+11 + 14 0.675 59.130 4.380 3400.980 2.163E+11 2.163E+11 + 15 0.725 63.510 4.380 3260.025 1.978E+11 1.978E+11 + 16 0.775 67.890 4.380 3122.015 1.805E+11 1.805E+11 + 17 0.825 72.270 4.380 2986.945 1.643E+11 1.643E+11 + 18 0.875 76.650 4.380 2854.815 1.493E+11 1.493E+11 + 19 0.925 81.030 4.380 2725.630 1.353E+11 1.353E+11 + 20 0.975 85.410 4.380 2599.390 1.223E+11 1.223E+11 + + +Interpolated blade 1 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 2 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Interpolated blade 3 properties: + +Node BlFract RNodes DRNodes PitchAxis StrcTwst BMassDen FlpStff EdgStff + (-) (-) (m) (m) (-) (deg) (kg/m) (Nm^2) (Nm^2) + 1 0.029 3.309 3.618 0.253 13.308 787.554 1.823E+10 1.952E+10 + 2 0.088 6.926 3.618 0.294 13.308 464.487 7.021E+09 9.977E+09 + 3 0.147 10.544 3.618 0.339 13.308 414.917 4.944E+09 6.990E+09 + 4 0.206 14.162 3.618 0.375 12.545 412.664 3.178E+09 6.695E+09 + 5 0.265 17.779 3.618 0.375 10.770 361.957 2.263E+09 4.796E+09 + 6 0.324 21.397 3.618 0.375 9.757 346.452 1.862E+09 4.283E+09 + 7 0.382 25.015 3.618 0.375 8.731 330.982 1.440E+09 3.835E+09 + 8 0.441 28.632 3.618 0.375 7.647 304.395 9.968E+08 3.304E+09 + 9 0.500 32.250 3.618 0.375 6.549 272.375 6.410E+08 2.685E+09 + 10 0.559 35.868 3.618 0.375 5.498 250.787 4.010E+08 2.292E+09 + 11 0.618 39.485 3.618 0.375 4.462 211.668 2.468E+08 1.610E+09 + 12 0.676 43.103 3.618 0.375 3.482 177.049 1.409E+08 1.225E+09 + 13 0.735 46.721 3.618 0.375 2.693 153.160 9.890E+07 9.067E+08 + 14 0.794 50.338 3.618 0.375 1.993 128.005 7.145E+07 6.486E+08 + 15 0.853 53.956 3.618 0.375 1.292 102.116 4.819E+07 4.472E+08 + 16 0.912 57.574 3.618 0.375 0.598 77.547 3.095E+07 3.109E+08 + 17 0.971 61.191 3.618 0.375 0.141 51.403 1.013E+07 1.019E+08 + + +Requested Outputs: + + + Col Parameter Units + --- --------------- --------------- + 0 Time (s) + 1 BldPitch1 (deg) + 2 Azimuth (deg) + 3 RotSpeed (rpm) + 4 GenSpeed (rpm) + 5 NacYaw (deg) + 6 NcIMUTAxs (m/s^2) + 7 NcIMUTAys (m/s^2) + 8 NcIMUTAzs (m/s^2) + 9 TTDspFA (m) + 10 TTDspSS (m) + 11 TTDspTwst (deg) + 12 PtfmSurge (m) + 13 PtfmSway (m) + 14 PtfmHeave (m) + 15 PtfmRoll (deg) + 16 PtfmPitch (deg) + 17 PtfmYaw (deg) + 18 PtfmTAxt (m/s^2) + 19 PtfmTAyt (m/s^2) + 20 PtfmTAzt (m/s^2) + 21 RotThrust (kN) + 22 LSSGagFya (kN) + 23 LSSGagFza (kN) + 24 RotTorq (kN-m) + 25 LSSGagMya (kN-m) + 26 LSSGagMza (kN-m) + 27 YawBrFxp (kN) + 28 YawBrFyp (kN) + 29 YawBrFzp (kN) + 30 YawBrMxp (kN-m) + 31 YawBrMyp (kN-m) + 32 YawBrMzp (kN-m) + 33 TwrBsFxt (kN) + 34 TwrBsFyt (kN) + 35 TwrBsFzt (kN) + 36 TwrBsMxt (kN-m) + 37 TwrBsMyt (kN-m) + 38 TwrBsMzt (kN-m) + 39 TwHt1MLxt INVALID + 40 TwHt1MLyt INVALID + 41 TwHt1MLzt INVALID + + + Requested Output Channels at each blade station: + Col Parameter Units + --- --------------- --------------- diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum new file mode 100644 index 0000000000..33d6572ec6 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum @@ -0,0 +1,66 @@ + +This summary file was generated by ServoDyn on 21-Jun-2024 at 17:07:27. + + Unless specified, units are consistent with Input units, [SI] system is advised. +____________________________________________________________________________________________________ + Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL, 9: ZmqIn} (switch) + PCMode -- Pitch control mode: 9 + TPCOn -- pitch control start time: 0.000000000000E+000 + ------------------- + TPitManS -- pitch override start time: 9.99990E+03 9.99990E+03 9.99990E+03 + BlPitchF -- pitch override final pos: 3.49066E-01 3.49066E-01 3.49066E-01 + PitManRat -- pitch override rate: 1.39626E-01 1.39626E-01 1.39626E-01 + +____________________________________________________________________________________________________ + Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + VSContrl -- speed control mode: 1 + ------------------- + GenModel: 2 + GenEff -- efficiency (%): 9.44000E-01 + GenTiStr -- Timed generator start (s): 0.00000E+00 + GenTiStp -- Timed generator stop (s): 9.99990E+03 + Simple variable speed control + VS_SySp -- region 2.5 synchronous gen speed 1.10622E+02 + VS_Slope -- Torque/speed slope of region 2.5 4.28513E+03 + mVS_TrGnSp -- region 2 -> 2.5 trans gen speed 1.18230E+02 + VS_Rgn2K -- Gen torque constant region 2 2.33225E+00 + VS_RtGnSp -- Rated gen speed 1.21684E+02 + VS_RtTq -- Rated gen torque 4.74030E+04 + +____________________________________________________________________________________________________ + HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + HSSBrMode -- high speed shaft brake mode 0 + +____________________________________________________________________________________________________ + Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch) + YCMode -- yaw control mode 0 + ------------------- + Yaw spring characteristics + YawNeut -- neutral spring position (degrees) 0.00000E+00 + YawSpr -- spring constant (N-m/rad) 9.02832E+09 + YawDamp -- damping constant (N-m/(rad/s)) 1.91600E+07 + ------------------- + Prescribed yaw motion + TYawManS -- yaw maneuver start time (s) 9.99990E+03 + YawManRat -- yaw maneuver rate (deg/s) 3.49066E-02 + NacYawF -- Final yaw angle for override (deg) 0.00000E+00 + +____________________________________________________________________________________________________ + Tip Brake (not available) + +____________________________________________________________________________________________________ + Airfoil control + AfCMode -- Airfoil control mode 0 + +____________________________________________________________________________________________________ + Cable control + CCMode -- cable control mode 0 + +____________________________________________________________________________________________________ + Structural controls + +____________________________________________________________________________________________________ + Bladed Interface: not used + +This summary file was closed on 21-Jun-2024 at 17:07:27. + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech new file mode 100644 index 0000000000..f3bcee4d1a --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech @@ -0,0 +1,110 @@ + +This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 17:07:27. + +Data from OpenFAST primary input file "OFZMQ_test04.fst": + + + FTitle - File Header: File Description (line 2) + "FAST - ZMQ communication, test 4: simultaneous REQ-REP-PUB-SUB protocol" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 1.0000E+02 TMax - Total run time (s) + 1.0000E-02 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn14; 2=AeroDyn; 3=ExtLoads} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState}} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + + 9.8100E+00 Gravity - Gravitational acceleration (m/s^2) + 0.0000E+00 AirDens - Air density (kg/m^3) + 0.0000E+00 WtrDens - Water density (kg/m^3) + 0.0000E+00 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0.0000E+00 SpdSound - Speed of sound in working fluid (m/s) + 0.0000E+00 Patm - Atmospheric pressure (Pa) + 0.0000E+00 Pvap - Vapour pressure of working fluid (Pa) + 0.0000E+00 WtrDpth - Water depth (m) + 0.0000E+00 MSL2SWL - Offset between still-water level and mean sea level (m) + + EDFile - Name of file containing ElastoDyn input parameters (-) + "NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" + BDBldFile(1) - Name of file containing BeamDyn blade 1input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(2) - Name of file containing BeamDyn blade 2input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + BDBldFile(3) - Name of file containing BeamDyn blade 3input parameters (-) + "NRELOffshrBsline5MW_BeamDyn.dat" + InflowFile - Name of file containing inflow wind input parameters (-) + "NRELOffshrBsline5MW_InflowWind.dat" + AeroFile - Name of file containing aerodynamic input parameters (-) + "NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" + ServoFile - Name of file containing control and electrical-drive input parameters (-) + "NRELOffshrBsline5MW_Onshore_ServoDyn.dat" + SeaStFile - Name of file containing sea state input parameters (-) + "unused" + HydroFile - Name of file containing hydrodynamic input parameters (-) + "unused" + SubFile - Name of file containing sub-structural input parameters (-) + "unused" + MooringFile - Name of file containing mooring system input parameters (-) + "unused" + IceFile - Name of file containing ice input parameters (-) + "unused" + + F SumPrint - Print summary data to .sum (flag) + 1.0000E+00 SttsTime - Amount of time between screen status messages (s) + 1.0000E+03 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) + DT_Out - Time step for tabular output (s) + "default" + 0.0000E+00 TStart - Time to begin tabular output (s) + 4 OutFileFmt - Format for tabular (time-marching) output file(s) {0: uncompressed binary and text file, 1: text file [.out], 2: compressed binary file [.outb], 3: both text and compressed binary, 4: uncompressed binary .outb]; add for combinations) (-) + T TabDelim - Use tab delimiters in text tabular output file? (flag) + OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (-) + "ES15.7E2" + + F Linearize - Linearization analysis (flag) + F CalcSteady - Calculate a steady-state periodic operating point before linearization? (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} (-) + 1.0000E-03 TrimTol - Tolerance for the rotational speed convergence (-) + 1.0000E-02 TrimGain - Proportional gain for the rotational speed error (>0) (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0.0000E+00 Twr_Kdmp - Damping factor for the tower (N/(m/s)) + 0.0000E+00 Bld_Kdmp - Damping factor for the blades (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] + + 1 LinInputs - Include inputs in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} + 1 LinOutputs - Include outputs in linearization (switch) (0=none; 1=from OutList(s); 2=all module outputs (debug)) + F LinOutJac - Include full Jacabians in linearization output (for debug) (flag) + F LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) + + 0 WrVTK - Write VTK visualization files (0=none; 1=initialization data only; 2=animation; 3=mode shapes) + 2 VTK_Type - Type of VTK visualization data: (1=surfaces; 2=basic meshes (lines/points); 3=all meshes) + F VTK_fields - Write mesh fields to VTK data files? (flag) + 1.5000E+01 VTK_fps - Frame rate for VTK output(fps) + + T ZmqOn - ZMQ communication (flag) + ZmqInAddress - REQ-REP localhost address + "tcp://127.0.0.1:5555" + 3 ZmqInNbr - Number of parameters to be requested + ZmqInChannels - Channels to be requested at communication time + "VelH" "VelV" "BldPitchCom1" + ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "0.5" + ZmqOutAddress - PUB-SUB localhost address + "tcp://127.0.0.1:5557" + 4 ZmqOutNbr - Number of channels to be broadcasted + ZmqOutChannels - Channels to be broadcasterd at communication time + "Wind1VelX" "Azimuth" "GenTq" "GenPwr" + ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation + "default" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst new file mode 100644 index 0000000000..196d62cd9c --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst @@ -0,0 +1,88 @@ +------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- +FAST - ZMQ communication, test 4: simultaneous REQ-REP-PUB-SUB protocol +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} + 100 TMax - Total run time (s) + 0.01 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} + 0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} + 99999 DT_UJac - Time between calls to get Jacobians (s) + 1E+06 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + 9.81 Gravity - Gravitational acceleration (m/s^2) + 0 AirDens - Air density (kg/m^3) + 0 WtrDens - Water density (kg/m^3) + 0 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0 SpdSound - Speed of sound in working fluid (m/s) + 0 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] + 0 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] + 0 WtrDpth - Water depth (m) + 0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"NRELOffshrBsline5MW_InflowWind.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" SeaStFile - Name of file containing sea state input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +False SumPrint - Print summary data to ".sum" (flag) + 1 SttsTime - Amount of time between screen status messages (s) + 1000 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +"default" DT_Out - Time step for tabular output (s) (or "default") + 0 TStart - Time to begin tabular output (s) + 4 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both 1 and 2, 4: uncompressed binary [.outb, 5: both 1 and 4} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES15.7E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) + 0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) + 0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) + 0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] + 30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] + 1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] + 1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ + 0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} + 2 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +false VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] + 15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] +---------------------- ZMQ Communication --------------------------------------- +True ZmqOn - ZMQ communication (flag) +"tcp://127.0.0.1:5555" ZmqInAddress - REQ-REP localhost address +3 ZmqInNbr - Number of parameters to be requested +"VelH" +"VelV" +"BldPitchCom1" ZmqInChannels - Channels to be requested at communication time +0.5 ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +"tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address +4 ZmqOutNbr - Number of channels to be broadcasted +"Wind1VelX" +"Azimuth" +"GenTq" +"GenPwr" ZmqOutChannels - Channels to be broadcasterd at communication time +default ZmqOutDT - time step for out communication, FAST will keep it constant in between (sample & hold) \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb b/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb new file mode 100644 index 0000000000..f42bcde42e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb @@ -0,0 +1,428 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ZMQ Real Time interactor for FAST initialized. \n", + " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: tcp://127.0.0.1:5555\n", + "Communication log will be saved at: ./zmq_logs/ \n", + "\n" + ] + } + ], + "source": [ + "#export PATH=$PATH:/Users/lorenzoschena/Desktop/Workspace/openfast/install/bin\n", + "from real_fast_interactor import RFInteractor\n", + "\n", + "rfi = RFInteractor(ZmqInAddress='tcp://127.0.0.1:5555',\n", + " ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", + " live_plot=False, name='OFZMQ_test04')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pyFAST.input_output import FASTOutputFile\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt \n", + "\n", + "\n", + "t = np.linspace(0, 100, 400)\n", + "\n", + "wind_series = FASTOutputFile('./ex_files/tsim.dat').toDataFrame()['U_[3.40]']\n", + "\n", + "frequency = 1.0 # 1 Hz sinusoidal signal\n", + "sampling_rate = 100.0 # Sampling rate of 100 Hz\n", + "duration = 10.0 # Duration of the signal\n", + "t = np.arange(0, duration, 1 / sampling_rate) # Time vector\n", + "bld_pitch = np.sin(2 * np.pi * frequency * t) # Example for another series\n", + "\n", + "fig, axs = plt.subplots(2, 1, figsize=(8, 5))\n", + "axs[0].plot(wind_series)\n", + "axs[0].set_ylabel('$u_h$ (m/s)')\n", + "\n", + "axs[1].plot(t, bld_pitch)\n", + "axs[1].set_ylabel('BldPitch1 (rad)')\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Response sent: 13.459;0;0.0;\n", + "Response sent: 12.114;0;0.0;\n", + "Response sent: 11.085;0;0.1;\n", + "Response sent: 10.177;0;0.1;\n", + "Response sent: 10.805;0;0.2;\n", + "Response sent: 10.215;0;0.2;\n", + "Response sent: 11.486;0;0.30000000000000004;\n", + "Response sent: 11.311;0;0.30000000000000004;\n", + "Response sent: 11.266;0;0.4;\n", + "Response sent: 11.805;0;0.4;\n", + "Response sent: 12.994;0;0.5;\n", + "Response sent: 12.649;0;0.5;\n", + "Response sent: 13.242;0;0.6000000000000001;\n", + "Response sent: 13.065;0;0.6000000000000001;\n", + "Response sent: 12.925;0;0.7000000000000001;\n", + "Response sent: 14.099;0;0.7000000000000001;\n", + "Response sent: 14.393;0;0.8;\n", + "Response sent: 13.228;0;0.8;\n", + "Response sent: 11.834;0;0.9;\n", + "Response sent: 13.468;0;0.9;\n", + "Response sent: 12.941;0;0.0;\n", + "Response sent: 11.981;0;0.0;\n", + "Response sent: 10.435;0;0.1;\n", + "Response sent: 11.239;0;0.1;\n", + "Response sent: 11.445;0;0.2;\n", + "Response sent: 11.087;0;0.2;\n", + "Response sent: 11.424;0;0.30000000000000004;\n", + "Response sent: 11.828;0;0.30000000000000004;\n", + "Response sent: 11.464;0;0.4;\n", + "Response sent: 12.099;0;0.4;\n", + "Response sent: 12.804;0;0.5;\n", + "Response sent: 12.672;0;0.5;\n", + "Response sent: 13.667;0;0.6000000000000001;\n", + "Response sent: 12.127;0;0.6000000000000001;\n", + "Response sent: 13.057;0;0.7000000000000001;\n", + "Response sent: 14.471;0;0.7000000000000001;\n", + "Response sent: 13.118;0;0.8;\n", + "Response sent: 11.804;0;0.8;\n", + "Response sent: 12.47;0;0.9;\n", + "Response sent: 12.857;0;0.9;\n", + "Response sent: 12.887;0;0.0;\n", + "Response sent: 12.099;0;0.0;\n", + "Response sent: 10.478;0;0.1;\n", + "Response sent: 10.573;0;0.1;\n", + "Response sent: 11.317;0;0.2;\n", + "Response sent: 11.115;0;0.2;\n", + "Response sent: 11.023;0;0.30000000000000004;\n", + "Response sent: 12.017;0;0.30000000000000004;\n", + "Response sent: 11.549;0;0.4;\n", + "Response sent: 12.547;0;0.4;\n", + "Response sent: 12.903;0;0.5;\n", + "Response sent: 12.933;0;0.6000000000000001;\n", + "Response sent: 13.313;0;0.6000000000000001;\n", + "Response sent: 12.968;0;0.7000000000000001;\n", + "Response sent: 13.73;0;0.7000000000000001;\n", + "Response sent: 14.745;0;0.8;\n", + "Response sent: 12.559;0;0.8;\n", + "Response sent: 12.068;0;0.9;\n", + "Response sent: 12.922;0;0.9;\n", + "Response sent: 12.577;0;0.0;\n", + "Response sent: 11.952;0;0.0;\n", + "Response sent: 10.984;0;0.1;\n", + "Response sent: 10.602;0;0.1;\n", + "Response sent: 11.336;0;0.2;\n", + "Response sent: 10.487;0;0.2;\n", + "Response sent: 11.56;0;0.30000000000000004;\n", + "Response sent: 12.452;0;0.30000000000000004;\n", + "Response sent: 11.76;0;0.4;\n", + "Response sent: 11.445;0;0.4;\n", + "Response sent: 12.879;0;0.5;\n", + "Response sent: 12.772;0;0.5;\n", + "Response sent: 13.474;0;0.6000000000000001;\n", + "Response sent: 12.97;0;0.6000000000000001;\n", + "Response sent: 13.177;0;0.7000000000000001;\n", + "Response sent: 13.914;0;0.7000000000000001;\n", + "Response sent: 13.949;0;0.8;\n", + "Response sent: 11.735;0;0.8;\n", + "Response sent: 11.35;0;0.9;\n", + "Response sent: 13.568;0;0.9;\n", + "Response sent: 12.867;0;0.0;\n", + "Response sent: 11.962;0;0.0;\n", + "Response sent: 10.264;0;0.1;\n", + "Response sent: 10.95;0;0.1;\n", + "Response sent: 10.409;0;0.2;\n", + "Response sent: 10.827;0;0.2;\n", + "Response sent: 11.529;0;0.30000000000000004;\n", + "Response sent: 11.395;0;0.30000000000000004;\n", + "Response sent: 11.295;0;0.4;\n", + "Response sent: 11.836;0;0.4;\n", + "Response sent: 13.385;0;0.5;\n", + "Response sent: 12.851;0;0.5;\n", + "Response sent: 13.088;0;0.6000000000000001;\n", + "Response sent: 13.372;0;0.6000000000000001;\n", + "Response sent: 13.424;0;0.7000000000000001;\n", + "Response sent: 14.701;0;0.7000000000000001;\n", + "Response sent: 12.517;0;0.8;\n", + "Response sent: 12.309;0;0.8;\n", + "Response sent: 12.699;0;0.9;\n", + "Response sent: 12.527;0;0.9;\n", + "Response sent: 12.078;0;0.0;\n", + "Response sent: 11.466;0;0.0;\n", + "Response sent: 10.021;0;0.1;\n", + "Response sent: 10.86;0;0.2;\n", + "Response sent: 10.387;0;0.2;\n", + "Response sent: 10.906;0;0.30000000000000004;\n", + "Response sent: 11.626;0;0.30000000000000004;\n", + "Response sent: 12.075;0;0.4;\n", + "Response sent: 11.806;0;0.4;\n", + "Response sent: 12.584;0;0.5;\n", + "Response sent: 12.526;0;0.5;\n", + "Response sent: 13.087;0;0.6000000000000001;\n", + "Response sent: 13.361;0;0.6000000000000001;\n", + "Response sent: 13.169;0;0.7000000000000001;\n", + "Response sent: 14.275;0;0.7000000000000001;\n", + "Response sent: 14.959;0;0.8;\n", + "Response sent: 13.033;0;0.8;\n", + "Response sent: 11.749;0;0.9;\n", + "Response sent: 13.347;0;0.9;\n", + "Response sent: 12.859;0;0.0;\n", + "Response sent: 12.125;0;0.0;\n", + "Response sent: 10.583;0;0.1;\n", + "Response sent: 11.422;0;0.1;\n", + "Response sent: 11.559;0;0.2;\n", + "Response sent: 11.251;0;0.2;\n", + "Response sent: 11.27;0;0.30000000000000004;\n", + "Response sent: 12.133;0;0.30000000000000004;\n", + "Response sent: 11.36;0;0.4;\n", + "Response sent: 12.177;0;0.4;\n", + "Response sent: 13.243;0;0.5;\n", + "Response sent: 12.841;0;0.5;\n", + "Response sent: 13.789;0;0.6000000000000001;\n", + "Response sent: 12.71;0;0.6000000000000001;\n", + "Response sent: 12.852;0;0.7000000000000001;\n", + "Response sent: 14.293;0;0.7000000000000001;\n", + "Response sent: 13.241;0;0.8;\n", + "Response sent: 11.503;0;0.8;\n", + "Response sent: 12.508;0;0.9;\n", + "Response sent: 12.445;0;0.9;\n", + "Response sent: 13.226;0;0.0;\n", + "Response sent: 11.882;0;0.0;\n", + "Response sent: 10.415;0;0.1;\n", + "Response sent: 11.181;0;0.1;\n", + "Response sent: 11.438;0;0.2;\n", + "Response sent: 11.002;0;0.2;\n", + "Response sent: 11.389;0;0.30000000000000004;\n", + "Response sent: 11.956;0;0.30000000000000004;\n", + "Response sent: 11.176;0;0.4;\n", + "Response sent: 12.476;0;0.4;\n", + "Response sent: 13.533;0;0.5;\n", + "Response sent: 12.891;0;0.5;\n", + "Response sent: 13.155;0;0.6000000000000001;\n", + "Response sent: 12.682;0;0.7000000000000001;\n", + "Response sent: 13.919;0;0.7000000000000001;\n", + "Response sent: 14.375;0;0.8;\n", + "Response sent: 12.976;0;0.8;\n", + "Response sent: 12.444;0;0.9;\n", + "Response sent: 13.346;0;0.9;\n", + "Response sent: 13.208;0;0.0;\n", + "Response sent: 11.901;0;0.0;\n", + "Response sent: 10.857;0;0.1;\n", + "Response sent: 10.203;0;0.1;\n", + "Response sent: 11.099;0;0.2;\n", + "Response sent: 10.598;0;0.2;\n", + "Response sent: 11.491;0;0.30000000000000004;\n", + "Response sent: 12.267;0;0.30000000000000004;\n", + "Response sent: 11.753;0;0.4;\n", + "Response sent: 11.588;0;0.4;\n", + "Response sent: 12.683;0;0.5;\n", + "Response sent: 12.218;0;0.5;\n", + "Response sent: 13.253;0;0.6000000000000001;\n", + "Response sent: 13.066;0;0.6000000000000001;\n", + "Response sent: 13.313;0;0.7000000000000001;\n", + "Response sent: 13.743;0;0.7000000000000001;\n", + "Response sent: 14.15;0;0.8;\n", + "Response sent: 11.97;0;0.8;\n", + "Response sent: 11.75;0;0.9;\n", + "Response sent: 13.315;0;0.9;\n", + "Response sent: 12.642;0;0.0;\n", + "Response sent: 12.007;0;0.0;\n", + "Response sent: 10.173;0;0.1;\n", + "Response sent: 11.214;0;0.1;\n", + "Response sent: 10.691;0;0.2;\n", + "Response sent: 11.031;0;0.2;\n", + "Response sent: 11.571;0;0.30000000000000004;\n", + "Response sent: 11.86;0;0.30000000000000004;\n", + "Response sent: 11.522;0;0.4;\n", + "Response sent: 11.85;0;0.4;\n", + "Response sent: 13.277;0;0.5;\n", + "Response sent: 13.201;0;0.5;\n", + "Response sent: 13.071;0;0.6000000000000001;\n", + "Response sent: 13.16;0;0.6000000000000001;\n", + "Response sent: 13.421;0;0.7000000000000001;\n", + "Response sent: 14.522;0;0.7000000000000001;\n", + "Response sent: 12.572;0;0.8;\n", + "Response sent: 12.388;0;0.8;\n", + "Response sent: 12.828;0;0.9;\n", + "Response sent: 12.889;0;0.9;\n", + "Response sent: 11.905;0;0.0;\n", + "Response sent: 11.459;0;0.0;\n", + "Response sent: 10.153;0;0.1;\n", + "Response sent: 10.256;0;0.1;\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "No request received, waiting...\n", + "Requester closed due to inactivity.\n" + ] + } + ], + "source": [ + "import time \n", + "\n", + "count_sampling = 0\n", + "dt_in = 0.5 \n", + "dt_wspd = 0.05 \n", + "\n", + "done = False\n", + "rfi.cont_req_threshold = 5\n", + "# rfi.fast_sub(100, True)\n", + "# bld pitch staircase example signal from 0 to 15 degrees \n", + "pitch = 0\n", + "while not done:\n", + " \n", + " if count_sampling >= 1000:\n", + " count_sampling = 0 \n", + " \n", + " rep = {\n", + " 'VelH': wind_series[count_sampling], \n", + " 'VelV': 0,\n", + " 'BlPitchCom1': count_sampling // 1000 * 0.1,\n", + " }\n", + " \n", + " done = rfi.zmq_full_communication(rep, True)\n", + " count_sampling += 1\n", + " \n", + " \n", + " \n", + "# import threading\n", + "\n", + "# t1 = threading.Thread(target=subscriber, args=(True,))\n", + "# t2 = threading.Thread(target=replier, args=())\n", + "\n", + "# t1.start()\n", + "# t2.start()\n", + "\n", + "# t1.join()\n", + "# t2.join()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from openfast_toolbox.io import FASTOutputFile\n", + "\n", + "fastout = FASTOutputFile('../templatesDir/OFZMQ_test04/OFZMQ_test04.outb').toDataFrame()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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bnHixAnk5sYOK3l5efZWW21n9/GzTS+77DJs27YN+/fvt1+zcuVKhEIhTJ061ZlwR+WppJittj/60Y+sHTt2WHPnzrVKS0utnTt3Bi1NJF/96letyspK67nnnrP2799v/ztx4oT9mocfftiqrKy0nn76aWvr1q3WLbfcknRrV21trfXss89amzZtsj760Y8m3do1ZcoU66WXXrJeeukla/LkyWfsdrl06L/bxbK0nd1i3bp1Vn5+vvXQQw9Zb7/9tvWzn/3MKikpsX7605/ar9G2zp45c+ZY48aNs7faPv3009aoUaOs++67z36NtrNzOjs7rc2bN1ubN2+2AFiLFi2yNm/ebB8X4Vebmq22V155pbVp0ybr2WeftWpra3WrbSp+8IMfWBMmTLAKCwutiy++2N42qiQCIOm/JUuW2K/p6+uzvv3tb1vV1dVWKBSyPvKRj1hbt26N+T0nT5607r77bmvEiBFWcXGx9clPftLavXt3zGsOHz5s3XbbbVZ5eblVXl5u3XbbbVZbW5sPf6VM4oMPbWf3+P3vf281NDRYoVDIOvfcc63HH3885vva1tnT0dFh3XPPPdb48eOtoqIia9KkSdb8+fOtrq4u+zXazs7561//mtQnz5kzx7Isf9t0165d1rXXXmsVFxdbI0aMsO6++27r1KlTjv+mHMuyLGe5EkVRFEVRlMw542s+FEVRFEWRhQYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4yv8D0D9g3ac3n5UAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(fastout['BlPitchC1_[deg]'])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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/elPOuecc7R//379+te/1sSJE7Vx48awGqck7dixQwsWLNA999yjhx56SKtXr9Zdd90lt9utH/7wh2E33hZ/+ctfVFFRoR/96EeSwuuf3wceeEBer1fDhg2Ty+WSz+fT448/ruuuu87qsaXv1uwaK8GnkxwOR8DPxph223qaUxlT25rj1dv1u7nzzju1fv16LVu2rN2+cBnr0KFDVVhYqIqKCr399tu68cYbVVBQcMIee+I4i4uLdffdd2vJkiWKjY09YV04jPXyyy+3vh81apRyc3N11lln6bXXXtOECROO22NPHKck+f1+jR8/XnPnzpUkjR07Vhs3btSCBQv0wx/+8IS99tTxtnj55Zd1+eWXKz09PWB7OIzzrbfe0uuvv64333xTI0eOVGFhofLz85Wenq4bb7zxhH3aNVYOdXVQcnKyXC5Xu1RZVlbWLsX2FC1njZxsTGlpaWpoaFB5eflJa/bv39/u9Q8cOBD0383s2bP17rvv6pNPPtHAgQOt7eE21piYGJ199tkaP3685s2bpzFjxug///M/w2qca9euVVlZmcaNG6eoqChFRUWpoKBAv//97xUVFWX1EQ5jbSs+Pl6jRo3S9u3bw+pvKkn9+/fXiBEjArYNHz5cu3fvlhR+/65K0q5du/TRRx/pxz/+sbUtnMb585//XA8++KCuvfZajRo1Snl5efrZz36mefPmWT1KoTNWgk8HxcTEaNy4cVq6dGnA9qVLl2rixIk2dXV6MjMzlZaWFjCmhoYGFRQUWGMaN26coqOjA2r27dunoqIiqyY3N1der1erV6+2alatWiWv1xu0340xRnfeeafeeecdffzxx8rMzAzYH05jPR5jjOrr68NqnFOmTNGGDRtUWFhoPcaPH6/rr79ehYWFGjJkSNiMta36+npt3rxZ/fv3D6u/qSRdeOGF7S41sW3bNg0ePFhSeP67+sorryglJUVXXHGFtS2cxllTUyOnMzBOuFwu63T2kBtrh5dBwzqd/eWXXzabNm0y+fn5Jj4+3nzzzTd2t3ZCVVVV5ssvvzRffvmlkWSefvpp8+WXX1qn4D/xxBPG4/GYd955x2zYsMFcd911xz3FcODAgeajjz4y69atM9/97nePe4rh6NGjzYoVK8yKFSvMqFGjgno65U9/+lPj8XjMp59+GnD6aE1NjVUTLmOdM2eO+eyzz8zOnTvN+vXrzUMPPWScTqdZsmRJWI3zeFqf1WVM+Iz13nvvNZ9++qnZsWOHWblypZkxY4ZJSEiw/tsSLuM0pvnSBFFRUebxxx8327dvN2+88Ybp1auXef31162acBqvz+czgwYNMg888EC7feEyzhtvvNEMGDDAOp39nXfeMcnJyeb+++8PybESfDrpv/7rv8zgwYNNTEyMOe+886zTpUPVJ598YiS1e9x4443GmObTDB9++GGTlpZm3G63ueSSS8yGDRsCXqO2ttbceeedpl+/fiYuLs7MmDHD7N69O6Dm0KFD5vrrrzcJCQkmISHBXH/99aa8vDxIozTHHaMk88orr1g14TLWm266yfpn8IwzzjBTpkyxQo8x4TPO42kbfMJlrC3XNImOjjbp6enmqquuMhs3brT2h8s4W/zv//6vyc7ONm632wwbNsy8+OKLAfvDabwffvihkWS2bt3abl+4jLOystLcfffdZtCgQSY2NtYMGTLE/OIXvzD19fVWTSiN1WGMMR2fHwIAAOi5WOMDAAAiBsEHAABEDIIPAACIGAQfAAAQMQg+AAAgYhB8AABAxCD4AACAiEHwAQAAEYPgAwAAIgbBBwAARAyCDwAAiBgEHwAAEDH+fx4nmN/gv6JdAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(rfi.sub_dict[' GenPwr_(kW)'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "zmq-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb similarity index 70% rename from zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb rename to zmq_coupling_tests/zmq_python_toolbox/REP.ipynb index d0d690579f..a2e16e15b0 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/REPtests.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -78,242 +78,192 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Response sent: 7.459;0;0.0;\n", - "Response sent: 7.452;0;0.06279051952931337;\n", - "Response sent: 7.281000000000001;0;0.12533323356430426;\n", - "Response sent: 7.445;0;0.1873813145857246;\n", - "Response sent: 7.351000000000001;0;0.2486898871648548;\n", - "Response sent: 7.301;0;0.3090169943749474;\n", - "Response sent: 7.208;0;0.3681245526846779;\n", - "Response sent: 6.615;0;0.4257792915650727;\n", - "Response sent: 6.577;0;0.4817536741017153;\n", - "Response sent: 6.888;0;0.5358267949789967;\n", - "Response sent: 6.776;0;0.5877852522924731;\n", - "Response sent: 6.880000000000001;0;0.6374239897486896;\n", - "Response sent: 6.9350000000000005;0;0.6845471059286886;\n", - "Response sent: 6.893000000000001;0;0.7289686274214116;\n", - "Response sent: 6.641;0;0.7705132427757893;\n", - "Response sent: 6.686999999999999;0;0.8090169943749475;\n", - "Response sent: 6.909000000000001;0;0.8443279255020151;\n", - "Response sent: 6.859;0;0.8763066800438637;\n", - "Response sent: 7.050000000000001;0;0.9048270524660196;\n", - "Response sent: 6.941000000000001;0;0.9297764858882513;\n", - "Response sent: 6.959;0;0.9510565162951535;\n", - "Response sent: 6.861000000000001;0;0.9685831611286311;\n", - "Response sent: 6.460000000000001;0;0.9822872507286886;\n", - "Response sent: 6.449;0;0.9921147013144779;\n", - "Response sent: 6.6579999999999995;0;0.9980267284282716;\n", - "Response sent: 6.964;0;1.0;\n", - "Response sent: 6.6419999999999995;0;0.9980267284282716;\n", - "Response sent: 6.683;0;0.9921147013144778;\n", - "Response sent: 6.867000000000001;0;0.9822872507286886;\n", - "Response sent: 7.089;0;0.9685831611286312;\n", - "Response sent: 6.912000000000001;0;0.9510565162951536;\n", - "Response sent: 6.68;0;0.9297764858882513;\n", - "Response sent: 6.664999999999999;0;0.9048270524660195;\n", - "Response sent: 6.856999999999999;0;0.8763066800438635;\n", - "Response sent: 6.8309999999999995;0;0.844327925502015;\n", - "Response sent: 7.090999999999999;0;0.8090169943749475;\n", - "Response sent: 7.257;0;0.7705132427757893;\n", - "Response sent: 7.226000000000001;0;0.7289686274214114;\n", - "Response sent: 7.1579999999999995;0;0.6845471059286888;\n", - "Response sent: 6.8870000000000005;0;0.6374239897486899;\n", - "Response sent: 7.148;0;0.5877852522924732;\n", - "Response sent: 7.103999999999999;0;0.5358267949789967;\n", - "Response sent: 6.552;0;0.4817536741017156;\n", - "Response sent: 6.077;0;0.4257792915650729;\n", - "Response sent: 5.861000000000001;0;0.36812455268467814;\n", - "Response sent: 5.981;0;0.3090169943749475;\n", - "Response sent: 5.904999999999999;0;0.24868988716485482;\n", - "Response sent: 5.879;0;0.18738131458572457;\n", - "Response sent: 6.077999999999999;0;0.12533323356430454;\n", - "Response sent: 6.119999999999999;0;0.06279051952931358;\n", - "Response sent: 6.114000000000001;0;1.2246467991473532e-16;\n", - "Response sent: 6.084;0;-0.06279051952931335;\n", - "Response sent: 6.256;0;-0.12533323356430429;\n", - "Response sent: 6.138;0;-0.18738131458572477;\n", - "Response sent: 6.1240000000000006;0;-0.24868988716485502;\n", - "Response sent: 5.984;0;-0.30901699437494773;\n", - "Response sent: 6.0649999999999995;0;-0.3681245526846783;\n", - "Response sent: 5.901;0;-0.42577929156507266;\n", - "Response sent: 5.808999999999999;0;-0.481753674101715;\n", - "Response sent: 5.952;0;-0.5358267949789964;\n", - "Response sent: 6.0440000000000005;0;-0.587785252292473;\n", - "Response sent: 6.138999999999999;0;-0.6374239897486896;\n", - "Response sent: 6.246;0;-0.6845471059286887;\n", - "Response sent: 6.393000000000001;0;-0.7289686274214113;\n", - "Response sent: 6.098000000000001;0;-0.7705132427757894;\n", - "Response sent: 5.961;0;-0.8090169943749473;\n", - "Response sent: 5.881;0;-0.8443279255020153;\n", - "Response sent: 5.9;0;-0.8763066800438636;\n", - "Response sent: 6.125;0;-0.9048270524660198;\n", - "Response sent: 6.1;0;-0.9297764858882515;\n", - "Response sent: 5.981;0;-0.9510565162951535;\n", - "Response sent: 6.118;0;-0.968583161128631;\n", - "Response sent: 6.148;0;-0.9822872507286887;\n", - "Response sent: 6.2330000000000005;0;-0.9921147013144778;\n", - "Response sent: 6.541;0;-0.9980267284282716;\n", - "Response sent: 6.401999999999999;0;-1.0;\n", - "Response sent: 6.188000000000001;0;-0.9980267284282716;\n", - "Response sent: 6.007;0;-0.9921147013144779;\n", - "Response sent: 5.914999999999999;0;-0.9822872507286887;\n", - "Response sent: 5.962;0;-0.9685831611286311;\n", - "Response sent: 6.224;0;-0.9510565162951536;\n", - "Response sent: 6.279999999999999;0;-0.9297764858882512;\n", - "Response sent: 6.202;0;-0.9048270524660196;\n", - "Response sent: 5.8759999999999994;0;-0.8763066800438634;\n", - "Response sent: 5.894;0;-0.8443279255020155;\n", - "Response sent: 5.960000000000001;0;-0.8090169943749476;\n", - "Response sent: 6.151999999999999;0;-0.7705132427757896;\n", - "Response sent: 6.2330000000000005;0;-0.7289686274214116;\n", - "Response sent: 5.882;0;-0.684547105928689;\n", - "Response sent: 5.987;0;-0.6374239897486896;\n", - "Response sent: 6.099;0;-0.5877852522924734;\n", - "Response sent: 6.318;0;-0.5358267949789963;\n", - "Response sent: 5.936999999999999;0;-0.4817536741017153;\n", - "Response sent: 5.667999999999999;0;-0.4257792915650722;\n", - "Response sent: 5.792;0;-0.36812455268467786;\n", - "Response sent: 5.723000000000001;0;-0.3090169943749477;\n", - "Response sent: 5.712999999999999;0;-0.24868988716485535;\n", - "Response sent: 5.459;0;-0.18738131458572468;\n", - "Response sent: 5.734999999999999;0;-0.12533323356430465;\n", - "Response sent: 5.465999999999999;0;-0.06279051952931326;\n", - "Response sent: 5.103999999999999;0;-2.4492935982947064e-16;\n", - "Response sent: 5.085000000000001;0;0.06279051952931278;\n", - "Response sent: 5.021000000000001;0;0.12533323356430418;\n", - "Response sent: 4.6899999999999995;0;0.1873813145857242;\n", - "Response sent: 4.478999999999999;0;0.24868988716485488;\n", - "Response sent: 4.75;0;0.3090169943749472;\n", - "Response sent: 4.804;0;0.3681245526846782;\n", - "Response sent: 4.742000000000001;0;0.42577929156507255;\n", - "Response sent: 4.856999999999999;0;0.48175367410171566;\n", - "Response sent: 4.91;0;0.5358267949789967;\n", - "Response sent: 4.984;0;0.5877852522924736;\n", - "Response sent: 5.195;0;0.6374239897486899;\n", - "Response sent: 5.0280000000000005;0;0.6845471059286893;\n", - "Response sent: 4.832000000000001;0;0.7289686274214119;\n", - "Response sent: 5.050000000000001;0;0.7705132427757893;\n", - "Response sent: 5.073;0;0.8090169943749478;\n", - "Response sent: 4.712999999999999;0;0.8443279255020147;\n", - "Response sent: 4.802;0;0.8763066800438631;\n", - "Response sent: 4.612;0;0.9048270524660194;\n", - "Response sent: 4.583;0;0.9297764858882511;\n", - "Response sent: 4.148;0;0.9510565162951535;\n", - "Response sent: 4.4350000000000005;0;0.968583161128631;\n", - "Response sent: 4.487;0;0.9822872507286886;\n", - "Response sent: 4.096;0;0.9921147013144778;\n", - "Response sent: 4.066000000000001;0;0.9980267284282716;\n", - "Response sent: 4.353999999999999;0;1.0;\n", - "Response sent: 4.2330000000000005;0;0.9980267284282716;\n", - "Response sent: 4.286;0;0.9921147013144779;\n", - "Response sent: 4.173;0;0.9822872507286886;\n", - "Response sent: 4.042999999999999;0;0.9685831611286311;\n", - "Response sent: 4.263999999999999;0;0.9510565162951536;\n", - "Response sent: 4.013999999999999;0;0.9297764858882517;\n", - "Response sent: 3.837999999999999;0;0.9048270524660192;\n", - "Response sent: 3.8599999999999994;0;0.8763066800438634;\n", - "Response sent: 3.926;0;0.8443279255020151;\n", - "Response sent: 4.129;0;0.8090169943749477;\n", - "Response sent: 4.015000000000001;0;0.7705132427757886;\n", - "Response sent: 3.9749999999999996;0;0.728968627421411;\n", - "Response sent: 4.395;0;0.6845471059286884;\n", - "Response sent: 4.414999999999999;0;0.6374239897486897;\n", - "Response sent: 4.647;0;0.5877852522924734;\n", - "Response sent: 4.478;0;0.5358267949789972;\n", - "Response sent: 4.616;0;0.4817536741017162;\n", - "Response sent: 4.417999999999999;0;0.42577929156507394;\n", - "Response sent: 4.173;0;0.368124552684678;\n", - "Response sent: 4.4190000000000005;0;0.3090169943749478;\n", - "Response sent: 4.484999999999999;0;0.2486898871648555;\n", - "Response sent: 4.1850000000000005;0;0.18738131458572568;\n", - "Response sent: 4.1530000000000005;0;0.1253332335643039;\n", - "Response sent: 4.237;0;0.06279051952931339;\n", - "Response sent: 4.021000000000001;0;3.6739403974420594e-16;\n", - "Response sent: 3.976000000000001;0;-0.06279051952931265;\n", - "Response sent: 4.177;0;-0.12533323356430318;\n", - "Response sent: 4.058999999999999;0;-0.18738131458572496;\n", - "Response sent: 3.8889999999999993;0;-0.24868988716485477;\n", - "Response sent: 4.119;0;-0.30901699437494706;\n", - "Response sent: 4.005000000000001;0;-0.36812455268467725;\n", - "Response sent: 4.042999999999999;0;-0.42577929156507327;\n", - "Response sent: 4.16;0;-0.48175367410171555;\n", - "Response sent: 4.202999999999999;0;-0.5358267949789965;\n", - "Response sent: 4.577;0;-0.5877852522924728;\n", - "Response sent: 4.602;0;-0.6374239897486905;\n", - "Response sent: 4.551;0;-0.6845471059286892;\n", - "Response sent: 4.901;0;-0.7289686274214118;\n", - "Response sent: 4.981;0;-0.7705132427757893;\n", - "Response sent: 4.948;0;-0.8090169943749472;\n", - "Response sent: 5.236000000000001;0;-0.8443279255020156;\n", - "Response sent: 5.417999999999999;0;-0.876306680043863;\n", - "Response sent: 5.428000000000001;0;-0.9048270524660189;\n", - "Response sent: 5.355;0;-0.9297764858882513;\n", - "Response sent: 5.422000000000001;0;-0.9510565162951534;\n", - "Response sent: 5.475;0;-0.968583161128631;\n", - "Response sent: 5.239000000000001;0;-0.9822872507286885;\n", - "Response sent: 5.343;0;-0.9921147013144779;\n", - "Response sent: 5.286;0;-0.9980267284282716;\n", - "Response sent: 5.305999999999999;0;-1.0;\n", - "Response sent: 5.029;0;-0.9980267284282716;\n", - "Response sent: 5.025;0;-0.992114701314478;\n", - "Response sent: 5.132;0;-0.9822872507286886;\n", - "Response sent: 5.214;0;-0.9685831611286312;\n", - "Response sent: 4.971;0;-0.9510565162951538;\n", - "Response sent: 4.949999999999999;0;-0.9297764858882517;\n", - "Response sent: 4.629;0;-0.9048270524660192;\n", - "Response sent: 4.348000000000001;0;-0.8763066800438635;\n", - "Response sent: 4.407;0;-0.8443279255020151;\n", - "Response sent: 4.462999999999999;0;-0.8090169943749477;\n", - "Response sent: 4.470000000000001;0;-0.7705132427757886;\n", - "Response sent: 4.765000000000001;0;-0.7289686274214111;\n", - "Response sent: 4.986000000000001;0;-0.6845471059286885;\n", - "Response sent: 5.132;0;-0.6374239897486897;\n", - "Response sent: 5.180999999999999;0;-0.5877852522924735;\n", - "Response sent: 4.814;0;-0.5358267949789959;\n", - "Response sent: 4.573;0;-0.4817536741017163;\n", - "Response sent: 4.058;0;-0.42577929156507405;\n", - "Response sent: 4.071999999999999;0;-0.3681245526846781;\n", - "Response sent: 4.2509999999999994;0;-0.3090169943749479;\n", - "Response sent: 4.263999999999999;0;-0.2486898871648556;\n", - "Response sent: 4.3420000000000005;0;-0.1873813145857258;\n", - "Response sent: 4.269;0;-0.125333233564304;\n", - "Response sent: 4.256;0;-0.06279051952931351;\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", + "Response sent: 13.459;0;0.0;\n", + "Response sent: 13.452;0;0.0010959013048243186;\n", + "Response sent: 13.281;0;0.0021874775878681775;\n", + "Response sent: 13.445;0;0.0032704208962361686;\n", + "Response sent: 13.351;0;0.004340457347439902;\n", + "Response sent: 13.301;0;0.005393363996459629;\n", + "Response sent: 13.208;0;0.006424985501778961;\n", + "Response sent: 12.615;0;0.007431250524619439;\n", + "Response sent: 12.577;0;0.008408187796654669;\n", + "Response sent: 12.888;0;0.009351941792792112;\n", + "Response sent: 12.776;0;0.010258787947169204;\n", + "Response sent: 12.88;0;0.011125147352313217;\n", + "Response sent: 12.935;0;0.011947600883454012;\n", + "Response sent: 12.893;0;0.012722902692247453;\n", + "Response sent: 12.641;0;0.013447993016655935;\n", + "Response sent: 12.687;0;0.014120010256431278;\n", + "Response sent: 12.909;0;0.01473630226654356;\n", + "Response sent: 12.859;0;0.015294436823985909;\n", + "Response sent: 13.05;0;0.01579221122664752;\n", + "Response sent: 12.941;0;0.01622766098637258;\n", + "Response sent: 12.959;0;0.016599067581897532;\n", + "Response sent: 12.861;0;0.016904965241069367;\n", + "Response sent: 12.46;0;0.017144146725578686;\n", + "Response sent: 12.449;0;0.017315668095377754;\n", + "Response sent: 12.658;0;0.01741885243398063;\n", + "Response sent: 12.964;0;0.017453292519943295;\n", + "Response sent: 12.642;0;0.01741885243398063;\n", + "Response sent: 12.683;0;0.01731566809537775;\n", + "Response sent: 12.867;0;0.017144146725578686;\n", + "Response sent: 13.089;0;0.01690496524106937;\n", + "Response sent: 12.912;0;0.016599067581897536;\n", + "Response sent: 12.68;0;0.01622766098637258;\n", + "Response sent: 12.665;0;0.015792211226647517;\n", + "Response sent: 12.857;0;0.015294436823985905;\n", + "Response sent: 12.831;0;0.014736302266543558;\n", + "Response sent: 13.091;0;0.014120010256431278;\n", + "Response sent: 13.257;0;0.013447993016655935;\n", + "Response sent: 13.226;0;0.012722902692247452;\n", + "Response sent: 13.158;0;0.011947600883454016;\n", + "Response sent: 12.887;0;0.01112514735231322;\n", + "Response sent: 13.148;0;0.010258787947169206;\n", + "Response sent: 13.104;0;0.009351941792792112;\n", + "Response sent: 12.552;0;0.008408187796654674;\n", + "Response sent: 12.077;0;0.007431250524619442;\n", + "Response sent: 11.861;0;0.006424985501778965;\n", + "Response sent: 11.981;0;0.005393363996459631;\n", + "Response sent: 11.905;0;0.004340457347439903;\n", + "Response sent: 11.879;0;0.003270420896236168;\n", + "Response sent: 12.078;0;0.0021874775878681823;\n", + "Response sent: 12.12;0;0.001095901304824322;\n", + "Response sent: 12.114;0;2.1374118819130998e-18;\n", + "Response sent: 12.084;0;-0.001095901304824318;\n", + "Response sent: 12.256;0;-0.002187477587868178;\n", + "Response sent: 12.138;0;-0.0032704208962361717;\n", + "Response sent: 12.124;0;-0.0043404573474399065;\n", + "Response sent: 11.984;0;-0.005393363996459634;\n", + "Response sent: 12.065;0;-0.006424985501778968;\n", + "Response sent: 11.901;0;-0.0074312505246194385;\n", + "Response sent: 11.809;0;-0.008408187796654662;\n", + "Response sent: 11.952;0;-0.009351941792792109;\n", + "Response sent: 12.044;0;-0.010258787947169203;\n", + "Response sent: 12.139;0;-0.011125147352313217;\n", + "Response sent: 12.246;0;-0.011947600883454014;\n", + "Response sent: 12.393;0;-0.01272290269224745;\n", + "Response sent: 12.098;0;-0.013447993016655937;\n", + "Response sent: 11.961;0;-0.014120010256431276;\n", + "Response sent: 11.881;0;-0.014736302266543563;\n", + "Response sent: 11.9;0;-0.015294436823985907;\n", + "Response sent: 12.125;0;-0.015792211226647524;\n", + "Response sent: 12.1;0;-0.016227660986372582;\n", + "Response sent: 11.981;0;-0.016599067581897532;\n", + "Response sent: 12.118;0;-0.016904965241069367;\n", + "Response sent: 12.148;0;-0.017144146725578686;\n", + "Response sent: 12.233;0;-0.01731566809537775;\n", + "Response sent: 12.541;0;-0.01741885243398063;\n", + "Response sent: 12.402;0;-0.017453292519943295;\n", + "Response sent: 12.188;0;-0.01741885243398063;\n", + "Response sent: 12.007;0;-0.017315668095377754;\n", + "Response sent: 11.915;0;-0.017144146725578686;\n", + "Response sent: 11.962;0;-0.016904965241069367;\n", + "Response sent: 12.224;0;-0.016599067581897536;\n", + "Response sent: 12.28;0;-0.01622766098637258;\n", + "Response sent: 12.202;0;-0.01579221122664752;\n", + "Response sent: 11.876;0;-0.015294436823985904;\n", + "Response sent: 11.894;0;-0.014736302266543568;\n", + "Response sent: 11.96;0;-0.01412001025643128;\n", + "Response sent: 12.152;0;-0.01344799301665594;\n", + "Response sent: 12.233;0;-0.012722902692247453;\n", + "Response sent: 11.882;0;-0.011947600883454017;\n", + "Response sent: 11.987;0;-0.011125147352313217;\n", + "Response sent: 12.099;0;-0.010258787947169208;\n", + "Response sent: 12.318;0;-0.009351941792792107;\n", + "Response sent: 11.937;0;-0.008408187796654669;\n", + "Response sent: 11.668;0;-0.007431250524619431;\n", + "Response sent: 11.792;0;-0.00642498550177896;\n", + "Response sent: 11.723;0;-0.0053933639964596335;\n", + "Response sent: 11.713;0;-0.004340457347439912;\n", + "Response sent: 11.459;0;-0.0032704208962361704;\n", + "Response sent: 11.735;0;-0.0021874775878681844;\n", + "Response sent: 11.466;0;-0.0010959013048243166;\n", + "Response sent: 11.104;0;-4.2748237638261996e-18;\n", + "Response sent: 11.085;0;0.0010959013048243082;\n", + "Response sent: 11.021;0;0.002187477587868176;\n", + "Response sent: 10.69;0;0.003270420896236162;\n", + "Response sent: 10.479;0;0.004340457347439904;\n", + "Response sent: 10.75;0;0.005393363996459625;\n", + "Response sent: 10.804;0;0.006424985501778966;\n", + "Response sent: 10.742;0;0.007431250524619436;\n", + "Response sent: 10.857;0;0.008408187796654674;\n", + "Response sent: 10.91;0;0.009351941792792112;\n", + "Response sent: 10.984;0;0.010258787947169211;\n", + "Response sent: 11.195;0;0.01112514735231322;\n", + "Response sent: 11.028;0;0.011947600883454023;\n", + "Response sent: 10.832;0;0.012722902692247458;\n", + "Response sent: 11.05;0;0.013447993016655935;\n", + "Response sent: 11.073;0;0.014120010256431283;\n", + "Response sent: 10.713;0;0.014736302266543554;\n", + "Response sent: 10.802;0;0.015294436823985898;\n", + "Response sent: 10.612;0;0.015792211226647514;\n", + "Response sent: 10.583;0;0.016227660986372575;\n", + "Response sent: 10.148;0;0.016599067581897532;\n", + "Response sent: 10.435;0;0.016904965241069367;\n", + "Response sent: 10.487;0;0.017144146725578686;\n", + "Response sent: 10.096;0;0.01731566809537775;\n", + "Response sent: 10.066;0;0.01741885243398063;\n", + "Response sent: 10.354;0;0.017453292519943295;\n", + "Response sent: 10.233;0;0.01741885243398063;\n", + "Response sent: 10.286;0;0.017315668095377754;\n", + "Response sent: 10.173;0;0.017144146725578686;\n", + "Response sent: 10.043;0;0.016904965241069367;\n", + "Response sent: 10.264;0;0.016599067581897536;\n", + "Response sent: 10.014;0;0.016227660986372586;\n", + "Response sent: 9.838;0;0.015792211226647514;\n", + "Response sent: 9.86;0;0.015294436823985904;\n", + "Response sent: 9.926;0;0.01473630226654356;\n", + "Response sent: 10.129;0;0.014120010256431281;\n", + "Response sent: 10.015;0;0.013447993016655923;\n", + "Response sent: 9.975;0;0.012722902692247443;\n", + "Response sent: 10.395;0;0.011947600883454007;\n", + "Response sent: 10.415;0;0.011125147352313219;\n", + "Response sent: 10.647;0;0.010258787947169208;\n", + "Response sent: 10.478;0;0.009351941792792123;\n", + "Response sent: 10.616;0;0.008408187796654684;\n", + "Response sent: 10.418;0;0.00743125052461946;\n", + "Response sent: 10.173;0;0.0064249855017789615;\n", + "Response sent: 10.419;0;0.005393363996459635;\n", + "Response sent: 10.485;0;0.004340457347439914;\n", + "Response sent: 10.185;0;0.0032704208962361877;\n", + "Response sent: 10.153;0;0.002187477587868171;\n", + "Response sent: 10.237;0;0.0010959013048243188;\n", + "Response sent: 10.021;0;6.412235645739299e-18;\n", + "Response sent: 9.976;0;-0.001095901304824306;\n", + "Response sent: 10.177;0;-0.0021874775878681584;\n", + "Response sent: 10.059;0;-0.003270420896236175;\n", + "Response sent: 9.889;0;-0.004340457347439902;\n", + "Response sent: 10.119;0;-0.005393363996459623;\n", + "Response sent: 10.005;0;-0.006424985501778949;\n", + "Response sent: 10.043;0;-0.007431250524619449;\n", + "Response sent: 10.16;0;-0.008408187796654672;\n", + "Response sent: 10.203;0;-0.00935194179279211;\n", + "Response sent: 10.577;0;-0.010258787947169199;\n", + "Response sent: 10.602;0;-0.011125147352313233;\n", + "Response sent: 10.551;0;-0.011947600883454021;\n", + "Response sent: 10.901;0;-0.012722902692247457;\n", + "Response sent: 10.981;0;-0.013447993016655935;\n", + "Response sent: 10.948;0;-0.014120010256431274;\n", + "Response sent: 11.236;0;-0.01473630226654357;\n", + "Response sent: 11.418;0;-0.015294436823985897;\n", + "Response sent: 11.428;0;-0.015792211226647507;\n", + "Response sent: 11.355;0;-0.01622766098637258;\n", + "Response sent: 11.422;0;-0.01659906758189753;\n", + "Response sent: 11.475;0;-0.016904965241069367;\n", "No request received, waiting...\n", "No request received, waiting...\n", "No request received, waiting...\n", "No request received, waiting...\n", "No request received, waiting...\n", "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[10], line 21\u001b[0m\n\u001b[1;32m 13\u001b[0m count_sampling \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m \n\u001b[1;32m 15\u001b[0m rep \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 16\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelH\u001b[39m\u001b[38;5;124m'\u001b[39m: wind_series[count_sampling] \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m6\u001b[39m, \n\u001b[1;32m 17\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVelV\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0\u001b[39m,\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBlPitchCom1\u001b[39m\u001b[38;5;124m'\u001b[39m: bld_pitch[count_sampling]\n\u001b[1;32m 19\u001b[0m }\n\u001b[0;32m---> 21\u001b[0m done \u001b[38;5;241m=\u001b[39m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfast_rep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 22\u001b[0m count_sampling \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 23\u001b[0m time\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;241m0.1\u001b[39m)\n", - "File \u001b[0;32m~/Desktop/Workspace/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:167\u001b[0m, in \u001b[0;36mRFInteractor.fast_rep\u001b[0;34m(self, rep_dict, verbose)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfast_rep\u001b[39m(\u001b[38;5;28mself\u001b[39m, rep_dict, verbose: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 163\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m socks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mdict\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoller\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpoll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 168\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester \u001b[38;5;129;01min\u001b[39;00m socks \u001b[38;5;129;01mand\u001b[39;00m socks[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester] \u001b[38;5;241m==\u001b[39m zmq\u001b[38;5;241m.\u001b[39mPOLLIN:\n\u001b[1;32m 169\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrequester\u001b[38;5;241m.\u001b[39mrecv_string()\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/poll.py:106\u001b[0m, in \u001b[0;36mPoller.poll\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(timeout, \u001b[38;5;28mfloat\u001b[39m):\n\u001b[1;32m 105\u001b[0m timeout \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(timeout)\n\u001b[0;32m--> 106\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mzmq_poll\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msockets\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m_zmq.py:1536\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.zmq_poll\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "Requester closed due to inactivity.\n" ] } ], @@ -333,7 +283,7 @@ " count_sampling = 0 \n", " \n", " rep = {\n", - " 'VelH': wind_series[count_sampling] - 6, \n", + " 'VelH': wind_series[count_sampling], \n", " 'VelV': 0,\n", " 'BlPitchCom1': np.deg2rad(bld_pitch[count_sampling])\n", " }\n", @@ -368,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -379,22 +329,22 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 12, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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M2eONX369Ij4d+3aFfF7uut7aFmHd47h51ZZWWk98cQTlsvlsr788svQMd31fXz55ZetV155xVq/fr21fv166xe/+IWVlJRkrV271rKsnt0Ggw52jvHQDi3r0O9jT2+Hhzq/ntwGu7J8+XJr8ODB1nHHHWfdcsstoce7Q3vs8clHZ9XV1ZYka9myZZZlWVYgELByc3Ot++67L3RMc3Oz5fV6rccee8yyrPYLeFJSkrVw4cLQMdu2bbPcbre1aNEie0/gEDqfX1eWL19uSbI2b94ceuz000+P+M/XnXV1jnPmzLHOPffcA/5MT3oPLevw3sdzzz3XOuOMMyIe60nvY58+faw//vGPcdcGwwXPsSs9vR0GhZ9jvLVDyzr4e9iT22B9fb01dOhQa/HixRExd5f22OOHXTqrra2VJGVlZUmSysvLVVVVpWnTpoWO8Xg8Ov300/Xee+9JklatWqXW1taIY/Lz81VcXBw6prvofH4HOsblcql3794Rj//lL39Rv379NGrUKP30pz8N7SDc3RzoHJcuXars7GwNGzZM11xzjaqrq0PP9aT3UDr0+7hjxw698soruvrqq/d7rru/j36/XwsXLlRjY6MmTZoUd21Q2v8cu9LT2+GBzjFe2uGh3sOe3AYl6YYbbtDMmTM1derUiMe7S3vsdhvLfRuWZem2227TKaecouLiYklSVVWVJCknJyfi2JycHG3evDl0THJysvr06bPfMcGf7w66Or/Ompubdccdd+jiiy+O2CjokksuUVFRkXJzc7V27VqVlJTo448/1uLFi+0K/7Ac6BxnzJihH/zgBxo0aJDKy8t155136owzztCqVavk8Xh6zHsoHd77+PTTTysjI0Pnn39+xOPd+X1cs2aNJk2apObmZqWnp+vFF1/UyJEjQx9W8dAGD3SOnfXkdniwc4yHdni472FPbINBCxcuVFlZmVasWLHfc93lmhhXyceNN96oTz75RO++++5+z7lcroj7lmXt91hnh3OMnQ52flL7pLcLL7xQgUBAjz76aMRz11xzTejvxcXFGjp0qMaPH6+ysjKNHTs2pnEfiQOd4wUXXBD6e3FxscaPH69BgwbplVde2e/DIVx3ew+lQ7+PkvTEE0/okksuUUpKSsTj3fl9POaYY7R69Wrt2bNHzz//vObMmaNly5aFno+HNnigcwy/ePX0dniwc4yHdng476HUM9ugJFVUVOiWW27RG2+8sV/s4Zxuj3Ez7HLTTTfp5Zdf1pIlS1RQUBB6PDc3V5L2y9aqq6tDmV9ubq5aWlq0e/fuAx7jtAOdX1Bra6tmz56t8vJyLV68+JDbI48dO1ZJSUnasGFDrEI+Yoc6x3B5eXkaNGhQKP6e8B5Kh3eO77zzjtavX68f/vCHh/x93el9TE5O1tFHH63x48ertLRUo0eP1u9///u4aYPSgc8xKB7a4aHOMVxPbIeHc349tQ1K7UMm1dXVGjdunBITE5WYmKhly5bpoYceUmJiYuh9cLo99vjkw7Is3XjjjXrhhRf01ltvqaioKOL5YPdYeJdYS0uLli1bppNOOkmSNG7cOCUlJUUcU1lZqbVr14aOccqhzk/q+MDbsGGD/vWvf6lv376H/L3r1q1Ta2ur8vLyYhH2ETmcc+xs165dqqioCMXfnd9D6cjO8U9/+pPGjRun0aNHH/L3dqf3sTPLsuTz+Xp8GzyY4DlKPb8dHkj4OXbW09phV7o6v57cBs8880ytWbNGq1evDt3Gjx+vSy65RKtXr9aQIUO6R3uMyrRVB11//fWW1+u1li5dGrH0qampKXTMfffdZ3m9XuuFF16w1qxZY1100UVdLisqKCiw/vWvf1llZWXWGWec0S2Whx3q/FpbW61zzjnHKigosFavXh1xjM/nsyzLsjZu3Gjdfffd1ooVK6zy8nLrlVdesYYPH26NGTPG8fOzrEOfY319vfWTn/zEeu+996zy8nJryZIl1qRJk6wBAwb0iPfQsg7v/6llWVZtba3Vq1cva/78+fv9ju78PpaUlFhvv/22VV5ebn3yySfWL37xC8vtdltvvPGGZVk9uw0GHewc46EdWtbBzzEe2uGh/p9aVs9tgwfTeYVOd2iPPT75kNTl7cknnwwdEwgErLlz51q5ubmWx+OxTjvtNGvNmjURv2fv3r3WjTfeaGVlZVmpqanW2WefbW3ZssXms9nfoc6vvLz8gMcsWbLEsizL2rJli3XaaadZWVlZVnJysnXUUUdZN998837r851yqHNsamqypk2bZvXv399KSkqyBg4caM2ZM2e/96e7voeWdXj/Ty3Lsv77v//bSk1N7bJuQHd+H6+66ipr0KBBVnJystW/f3/rzDPPjPhA78ltMOhg5xgP7dCyDn6O8dAOD/X/1LJ6bhs8mM7JR3dojy7Lsqzo9KEAAAAcWo+f8wEAAHoWkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGArkg8AAGCr/w913d5nwa9BXgAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -406,49 +356,10 @@ "source": [ "# plt.plot(fastout['Wind1VelX_[m/s]'])\n", "# plt.plot(wind_series[::10])\n", - "plt.plot(fastout['BldPitch1_[deg]'][200:400], ls='--', marker='o')#, ls='--', marker='o')\n", + "plt.plot(fastout['BlPitchC1_[deg]'][200:400], ls='--', marker='o')#, ls='--', marker='o')\n", "# plt.plot(fastout['Time_[s]'][50:150], np.rad2deg(bld_pitch[50:150]), ls='--', marker='o')#, ls='--', marker='o')" ] }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.1499562429386746" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fastout['BldPitch1_[deg]'][150]" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "ename": "IndexError", - "evalue": "only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[29], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mbld_pitch\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m150\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mdt_in\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mdt_wspd\u001b[49m\u001b[43m]\u001b[49m\n", - "\u001b[0;31mIndexError\u001b[0m: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices" - ] - } - ], - "source": [] - }, { "cell_type": "code", "execution_count": null, diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb new file mode 100644 index 0000000000..89f212f2bd --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb @@ -0,0 +1,42290 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Zmq Live PUB-SUB" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#export PATH=$PATH:/Users/lorenzoschena/Desktop/Workspace/openfast/install/bin\n", + "from real_fast_interactor import RFInteractor" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ZMQ Real Time interactor for FAST initialized. \n", + " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", + "Communication log will be saved at: ./zmq_logs/ \n", + "\n" + ] + } + ], + "source": [ + "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", + " live_plot=False, name='OFZMQ_test01')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "mode": "lines", + "name": " Wind1VelX_(m/s)", + "type": "scatter", + "xaxis": "x", + "y": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 0 + ], + "yaxis": "y" + }, + { + "mode": "lines", + "name": " Azimuth_(deg)", + "type": "scatter", + "xaxis": "x2", + "y": [ + 90, + 90.00004, + 90.000158, + 90.000347, + 90.000596, + 90.000893, + 90.001225, + 90.001576, + 90.001932, + 90.002279, + 90.002606, + 90.002903, + 90.003164, + 90.003385, + 90.003566, + 90.003712, + 90.003827, + 90.00392, + 90.004002, + 90.004085, + 90.00418, + 90.004299, + 90.004453, + 90.004651, + 90.004901, + 90.005206, + 90.00557, + 90.00599, + 90.006464, + 90.006987, + 90.00755, + 90.008147, + 90.008766, + 90.009399, + 90.010037, + 90.010673, + 90.011299, + 90.011913, + 90.012512, + 90.013097, + 90.013671, + 90.014239, + 90.014808, + 90.015387, + 90.015985, + 90.016614, + 90.017282, + 90.018, + 90.018777, + 90.019619, + 90.020533, + 90.021521, + 90.022585, + 90.023725, + 90.024937, + 90.026219, + 90.027564, + 90.028966, + 90.030419, + 90.031915, + 90.033449, + 90.035015, + 90.036609, + 90.038227, + 90.039868, + 90.041533, + 90.043223, + 90.044942, + 90.046693, + 90.048481, + 90.050313, + 90.052193, + 90.054128, + 90.056121, + 90.058178, + 90.060301, + 90.062491, + 90.064749, + 90.067072, + 90.069459, + 90.071905, + 90.074406, + 90.076956, + 90.079549, + 90.08218, + 90.084842, + 90.08753, + 90.090241, + 90.09297, + 90.095717, + 90.098479, + 90.101258, + 90.104056, + 90.106873, + 90.109715, + 90.112586, + 90.115488, + 90.118427, + 90.121408, + 90.124432, + 90.127504, + 90.130626, + 90.133798, + 90.137021, + 90.140294, + 90.143616, + 90.146982, + 90.150391, + 90.153838, + 90.15732, + 90.160833, + 90.164372, + 90.167936, + 90.171521, + 90.175125, + 90.178747, + 90.182386, + 90.186044, + 90.18972, + 90.193417, + 90.197136, + 90.200879, + 90.20465, + 90.208449, + 90.212279, + 90.216142, + 90.220036, + 90.223964, + 90.227923, + 90.231914, + 90.235932, + 90.239977, + 90.244044, + 90.248131, + 90.252233, + 90.256347, + 90.26047, + 90.264597, + 90.268728, + 90.27286, + 90.276991, + 90.28112, + 90.285248, + 90.289376, + 90.293504, + 90.297634, + 90.301769, + 90.305911, + 90.310062, + 90.314225, + 90.318402, + 90.322595, + 90.326806, + 90.331036, + 90.335286, + 90.339556, + 90.343847, + 90.348157, + 90.352487, + 90.356836, + 90.361202, + 90.365585, + 90.369984, + 90.374399, + 90.37883, + 90.383277, + 90.387741, + 90.392223, + 90.396724, + 90.401247, + 90.405793, + 90.410365, + 90.414965, + 90.419596, + 90.42426, + 90.428959, + 90.433696, + 90.43847, + 90.443285, + 90.44814, + 90.453035, + 90.457971, + 90.462946, + 90.46796, + 90.473013, + 90.478101, + 90.483225, + 90.488383, + 90.493573, + 90.498794, + 90.504046, + 90.509328, + 90.51464, + 90.519982, + 90.525353, + 90.530756, + 90.53619, + 90.541657, + 90.547157, + 90.552693, + 90.558264, + 90.563872, + 90.569519, + 90.575204, + 90.580928, + 90.586691, + 90.592494, + 90.598336, + 90.604217, + 90.610136, + 90.616093, + 90.622088, + 90.628119, + 90.634186, + 90.64029, + 90.646429, + 90.652604, + 90.658816, + 90.665064, + 90.671349, + 90.677672, + 90.684035, + 90.690438, + 90.696883, + 90.70337, + 90.709901, + 90.716476, + 90.723097, + 90.729763, + 90.736477, + 90.743237, + 90.750043, + 90.756895, + 90.763793, + 90.770735, + 90.777721, + 90.784749, + 90.791819, + 90.79893, + 90.806079, + 90.813266, + 90.82049, + 90.82775, + 90.835045, + 90.842374, + 90.849738, + 90.857135, + 90.864565, + 90.872028, + 90.879523, + 90.887051, + 90.89461, + 90.902201, + 90.909823, + 90.917476, + 90.925158, + 90.932869, + 90.940609, + 90.948376, + 90.956169, + 90.963987, + 90.971829, + 90.979694, + 90.987581, + 90.995489, + 91.003418, + 91.011366, + 91.019333, + 91.027319, + 91.035323, + 91.043346, + 91.051388, + 91.059449, + 91.067528, + 91.075628, + 91.083747, + 91.091887, + 91.100048, + 91.108231, + 91.116435, + 91.124662, + 91.132911, + 91.141183, + 91.149477, + 91.157794, + 91.166133, + 91.174495, + 91.182878, + 91.191284, + 91.199711, + 91.208159, + 91.216628, + 91.225119, + 91.233631, + 91.242163, + 91.250717, + 91.259291, + 91.267887, + 91.276505, + 91.285144, + 91.293805, + 91.302488, + 91.311193, + 91.319921, + 91.328671, + 91.337443, + 91.346237, + 91.355053, + 91.363892, + 91.372751, + 91.381633, + 91.390535, + 91.399458, + 91.408402, + 91.417366, + 91.426351, + 91.435355, + 91.44438, + 91.453425, + 91.46249, + 91.471576, + 91.480683, + 91.489812, + 91.498963, + 91.508136, + 91.517333, + 91.526555, + 91.535801, + 91.545073, + 91.554371, + 91.563697, + 91.573051, + 91.582433, + 91.591845, + 91.601287, + 91.61076, + 91.620264, + 91.6298, + 91.639368, + 91.648969, + 91.658604, + 91.668273, + 91.677977, + 91.687716, + 91.697491, + 91.707303, + 91.717153, + 91.727041, + 91.736967, + 91.746934, + 91.75694, + 91.766987, + 91.777075, + 91.787205, + 91.797377, + 91.807591, + 91.817847, + 91.828146, + 91.838487, + 91.848871, + 91.859297, + 91.869764, + 91.880273, + 91.890822, + 91.901412, + 91.912042, + 91.922711, + 91.933418, + 91.944163, + 91.954946, + 91.965766, + 91.976622, + 91.987514, + 91.998441, + 92.009404, + 92.020401, + 92.031433, + 92.042498, + 92.053598, + 92.06473, + 92.075896, + 92.087094, + 92.098324, + 92.109587, + 92.120881, + 92.132206, + 92.143562, + 92.154949, + 92.166365, + 92.177812, + 92.189288, + 92.200793, + 92.212327, + 92.223891, + 92.235483, + 92.247103, + 92.258753, + 92.27043, + 92.282137, + 92.293872, + 92.305636, + 92.317428, + 92.32925, + 92.3411, + 92.35298, + 92.364888, + 92.376826, + 92.388792, + 92.400788, + 92.412812, + 92.424865, + 92.436946, + 92.449055, + 92.461192, + 92.473356, + 92.485547, + 92.497765, + 92.51001, + 92.52228, + 92.534576, + 92.546897, + 92.559243, + 92.571613, + 92.584007, + 92.596425, + 92.608866, + 92.621329, + 92.633816, + 92.646324, + 92.658855, + 92.671407, + 92.68398, + 92.696574, + 92.709189, + 92.721824, + 92.734479, + 92.747154, + 92.759849, + 92.772564, + 92.785298, + 92.798052, + 92.810825, + 92.823618, + 92.836431, + 92.849263, + 92.862115, + 92.874988, + 92.887882, + 92.900796, + 92.913732, + 92.92669, + 92.939671, + 92.952674, + 92.965702, + 92.978753, + 92.99183, + 93.004931, + 93.018059, + 93.031214, + 93.044395, + 93.057604, + 93.070841, + 93.084107, + 93.097402, + 93.110726, + 93.12408, + 93.137465, + 93.150879, + 93.164325, + 93.177801, + 93.191309, + 93.204849, + 93.21842, + 93.232024, + 93.245659, + 93.259328, + 93.273029, + 93.286762, + 93.300529, + 93.314328, + 93.328161, + 93.342027, + 93.355925, + 93.369857, + 93.383821, + 93.397819, + 93.411849, + 93.425912, + 93.440008, + 93.454137, + 93.468298, + 93.482491, + 93.496717, + 93.510975, + 93.525265, + 93.539588, + 93.553943, + 93.568331, + 93.582751, + 93.597204, + 93.611689, + 93.626208, + 93.640759, + 93.655344, + 93.669963, + 93.684615, + 93.699302, + 93.714023, + 93.728779, + 93.74357, + 93.758397, + 93.773259, + 93.788156, + 93.80309, + 93.818061, + 93.833067, + 93.848111, + 93.863192, + 93.878309, + 93.893464, + 93.908656, + 93.923886, + 93.939153, + 93.954457, + 93.969799, + 93.985179, + 94.000596, + 94.01605, + 94.031541, + 94.047069, + 94.062635, + 94.078236, + 94.093874, + 94.109548, + 94.125258, + 94.141003, + 94.156782, + 94.172596, + 94.188443, + 94.204324, + 94.220237, + 94.236182, + 94.252159, + 94.268167, + 94.284206, + 94.300274, + 94.316372, + 94.332498, + 94.348653, + 94.364836, + 94.381047, + 94.397284, + 94.413548, + 94.429838, + 94.446153, + 94.462495, + 94.478861, + 94.495252, + 94.511667, + 94.528107, + 94.544571, + 94.561058, + 94.577569, + 94.594103, + 94.610661, + 94.627241, + 94.643845, + 94.660472, + 94.677122, + 94.693794, + 94.71049, + 94.727209, + 94.743951, + 94.760717, + 94.777506, + 94.794318, + 94.811155, + 94.828015, + 94.844899, + 94.861808, + 94.878741, + 94.895698, + 94.912681, + 94.929688, + 94.94672, + 94.963777, + 94.98086, + 94.997968, + 95.015101, + 95.03226, + 95.049445, + 95.066656, + 95.083893, + 95.101156, + 95.118445, + 95.13576, + 95.153102, + 95.17047, + 95.187864, + 95.205285, + 95.222732, + 95.240206, + 95.257707, + 95.275235, + 95.292789, + 95.310371, + 95.327979, + 95.345614, + 95.363276, + 95.380966, + 95.398682, + 95.416426, + 95.434198, + 95.451997, + 95.469824, + 95.487678, + 95.505561, + 95.523472, + 95.541411, + 95.559379, + 95.577376, + 95.595402, + 95.613457, + 95.631541, + 95.649655, + 95.6678, + 95.685974, + 95.70418, + 95.722416, + 95.740684, + 95.758983, + 95.777314, + 95.795677, + 95.814072, + 95.8325, + 95.850961, + 95.869455, + 95.887982, + 95.906543, + 95.925138, + 95.943766, + 95.962428, + 95.981125, + 95.999856, + 96.01862, + 96.03742, + 96.056253, + 96.075121, + 96.094024, + 96.112961, + 96.131932, + 96.150938, + 96.169978, + 96.189052, + 96.208161, + 96.227304, + 96.24648, + 96.265691, + 96.284935, + 96.304213, + 96.323523, + 96.342867, + 96.362244, + 96.381653, + 96.401094, + 96.420568, + 96.440073, + 96.459609, + 96.479177, + 96.498776, + 96.518406, + 96.538066, + 96.557756, + 96.577477, + 96.597228, + 96.617008, + 96.636818, + 96.656658, + 96.676527, + 96.696425, + 96.716353, + 96.736309, + 96.756295, + 96.77631, + 96.796355, + 96.816428, + 96.83653, + 96.856662, + 96.876823, + 96.897013, + 96.917232, + 96.937481, + 96.957759, + 96.978066, + 96.998403, + 97.01877, + 97.039166, + 97.059591, + 97.080046, + 97.100531, + 97.121045, + 97.141589, + 97.162163, + 97.182766, + 97.203399, + 97.224061, + 97.244753, + 97.265473, + 97.286223, + 97.307002, + 97.32781, + 97.348646, + 97.369511, + 97.390403, + 97.411324, + 97.432272, + 97.453248, + 97.474251, + 97.495281, + 97.516337, + 97.53742, + 97.558529, + 97.579665, + 97.600825, + 97.622012, + 97.643224, + 97.66446, + 97.685722, + 97.707008, + 97.728319, + 97.749654, + 97.771014, + 97.792397, + 97.813804, + 97.835235, + 97.85669, + 97.878169, + 97.899671, + 97.921197, + 97.942747, + 97.96432, + 97.985917, + 98.007538, + 98.029184, + 98.050853, + 98.072548, + 98.094267, + 98.116011, + 98.13778, + 98.159575, + 98.181396, + 98.203243, + 98.225116, + 98.247017, + 98.268945, + 98.290901, + 98.312884, + 98.334896, + 98.356937, + 98.379007, + 98.401106, + 98.423235, + 98.445394, + 98.467583, + 98.489802, + 98.512053, + 98.534334, + 98.556647, + 98.578991, + 98.601367, + 98.623775, + 98.646215, + 98.668687, + 98.691192, + 98.713729, + 98.736298, + 98.7589, + 98.781535, + 98.804203, + 98.826904, + 98.849639, + 98.872406, + 98.895206, + 98.91804, + 98.940907, + 98.963808, + 98.986741, + 99.009709, + 99.032709, + 99.055744, + 99.078812, + 99.101913, + 99.125048, + 99.148217, + 99.171419, + 99.194655, + 99.217925, + 99.241228, + 99.264565, + 99.287936, + 99.31134, + 99.334779, + 99.358251, + 99.381756, + 99.405296, + 99.428869, + 99.452477, + 99.476118, + 99.499792, + 99.523501, + 99.547244, + 99.57102, + 99.59483, + 99.618673, + 99.64255, + 99.66646, + 99.690404, + 99.71438, + 99.73839, + 99.762433, + 99.786508, + 99.810616, + 99.834756, + 99.858929, + 99.883133, + 99.907369, + 99.931636, + 99.955935, + 99.980264, + 100.004624, + 100.029014, + 100.053435, + 100.077885, + 100.102365, + 100.126874, + 100.151412, + 100.175979, + 100.200574, + 100.225197, + 100.249847, + 100.274525, + 100.29923, + 100.323962, + 100.348721, + 100.373507, + 100.398319, + 100.423157, + 100.448021, + 100.472911, + 100.497827, + 100.522768, + 100.547736, + 100.572729, + 100.597748, + 100.622793, + 100.647864, + 100.672961, + 100.698084, + 100.723233, + 100.748408, + 100.773609, + 100.798837, + 100.824091, + 100.849373, + 100.874681, + 100.900016, + 100.925378, + 100.950768, + 100.976185, + 101.00163, + 101.027104, + 101.052605, + 101.078135, + 101.103693, + 101.12928, + 101.154897, + 101.180542, + 101.206217, + 101.231922, + 101.257656, + 101.28342, + 101.309214, + 101.335038, + 101.360892, + 101.386777, + 101.412691, + 101.438636, + 101.464611, + 101.490617, + 101.516652, + 101.542718, + 101.568814, + 101.59494, + 101.621096, + 101.647283, + 101.673499, + 101.699745, + 101.72602, + 101.752326, + 101.778661, + 101.805026, + 101.83142, + 101.857844, + 101.884296, + 101.910778, + 101.937289, + 101.963829, + 101.990398, + 102.016995, + 102.043621, + 102.070275, + 102.096958, + 102.12367, + 102.150409, + 102.177178, + 102.203974, + 102.230799, + 102.257651, + 102.284533, + 102.311442, + 102.33838, + 102.365346, + 102.392341, + 102.419364, + 102.446416, + 102.473497, + 102.500606, + 102.527745, + 102.554912, + 102.582109, + 102.609335, + 102.63659, + 102.663875, + 102.69119, + 102.718534, + 102.745908, + 102.773312, + 102.800747, + 102.828212, + 102.855707, + 102.883232, + 102.910789, + 102.938376, + 102.965994, + 102.993643, + 103.021323, + 103.049035, + 103.076778, + 103.104552, + 103.132358, + 103.160196, + 103.188065, + 103.215966, + 103.243899, + 103.271863, + 103.29986, + 103.327889, + 103.355949, + 103.384042, + 103.412166, + 103.440323, + 103.468511, + 103.496732, + 103.524984, + 103.553269, + 103.581585, + 103.609933, + 103.638314, + 103.666726, + 103.69517, + 103.723646, + 103.752154, + 103.780693, + 103.809264, + 103.837867, + 103.866501, + 103.895167, + 103.923864, + 103.952593, + 103.981352, + 104.010143, + 104.038965, + 104.067817, + 104.0967, + 104.125614, + 104.154559, + 104.183533, + 104.212539, + 104.241574, + 104.270639, + 104.299734, + 104.328858, + 104.358012, + 104.387195, + 104.416408, + 104.44565, + 104.47492, + 104.504219, + 104.533546, + 104.562902, + 104.592286, + 104.621698, + 104.651137, + 104.680604, + 104.710098, + 104.739619, + 104.769166, + 104.798741, + 104.828341, + 104.857968, + 104.88762, + 104.917299, + 104.947003, + 104.976732, + 105.006486, + 105.036266, + 105.06607, + 105.095899, + 105.125752, + 105.155631, + 105.185533, + 105.21546, + 105.245411, + 105.275387, + 105.305387, + 105.335411, + 105.36546, + 105.395533, + 105.425631, + 105.455753, + 105.485901, + 105.516073, + 105.546271, + 105.576493, + 105.606742, + 105.637016, + 105.667317, + 105.697644, + 105.727997, + 105.758377, + 105.788785, + 105.81922, + 105.849683, + 105.880174, + 105.910693, + 105.941242, + 105.971819, + 106.002426, + 106.033063, + 106.063731, + 106.094428, + 106.125157, + 106.155917, + 106.186709, + 106.217533, + 106.248388, + 106.279277, + 106.310198, + 106.341152, + 106.37214, + 106.403161, + 106.434215, + 106.465304, + 106.496426, + 106.527583, + 106.558774, + 106.589999, + 106.621258, + 106.652552, + 106.683881, + 106.715244, + 106.746641, + 106.778072, + 106.809538, + 106.841038, + 106.872571, + 106.904139, + 106.93574, + 106.967375, + 106.999043, + 107.030744, + 107.062478, + 107.094244, + 107.126044, + 107.157875, + 107.189739, + 107.221634, + 107.253561, + 107.28552, + 107.31751, + 107.34953, + 107.381582, + 107.413664, + 107.445777, + 107.47792, + 107.510093, + 107.542295, + 107.574528, + 107.60679, + 107.639082, + 107.671402, + 107.703752, + 107.736131, + 107.768538, + 107.800975, + 107.83344, + 107.865933, + 107.898455, + 107.931005, + 107.963584, + 107.99619, + 108.028825, + 108.061488, + 108.094179, + 108.126898, + 108.159645, + 108.19242, + 108.225224, + 108.258055, + 108.290915, + 108.323802, + 108.356718, + 108.389662, + 108.422634, + 108.455635, + 108.488664, + 108.521722, + 108.554808, + 108.587923, + 108.621067, + 108.654239, + 108.68744, + 108.72067, + 108.753929, + 108.787218, + 108.820535, + 108.853882, + 108.887258, + 108.920664, + 108.954099, + 108.987564, + 109.021059, + 109.054584, + 109.088139, + 109.121725, + 109.15534, + 109.188987, + 109.222664, + 109.256371, + 109.29011, + 109.32388, + 109.357681, + 109.391513, + 109.425376, + 109.459271, + 109.493197, + 109.527155, + 109.561145, + 109.595166, + 109.629219, + 109.663303, + 109.69742, + 109.731568, + 109.765748, + 109.79996, + 109.834204, + 109.86848, + 109.902787, + 109.937125, + 109.971496, + 110.005897, + 110.04033, + 110.074794, + 110.109289, + 110.143815, + 110.178372, + 110.212959, + 110.247576, + 110.282223, + 110.316901, + 110.351607, + 110.386344, + 110.421109, + 110.455903, + 110.490726, + 110.525578, + 110.560457, + 110.595365, + 110.630301, + 110.665264, + 110.700255, + 110.735272, + 110.770317, + 110.805389, + 110.840488, + 110.875613, + 110.910764, + 110.945942, + 110.981146, + 111.016376, + 111.051633, + 111.086915, + 111.122223, + 111.157557, + 111.192917, + 111.228303, + 111.263716, + 111.299154, + 111.334618, + 111.370109, + 111.405626, + 111.44117, + 111.476741, + 111.512339, + 111.547964, + 111.583616, + 111.619296, + 111.655004, + 111.690741, + 111.726505, + 111.762299, + 111.798121, + 111.833973, + 111.869854, + 111.905765, + 111.941707, + 111.977679, + 112.013681, + 112.049715, + 112.08578, + 112.121877, + 112.158006, + 112.194167, + 112.230361, + 112.266587, + 112.302847, + 112.339139, + 112.375465, + 112.411825, + 112.448218, + 112.484646, + 112.521107, + 112.557602, + 112.594132, + 112.630696, + 112.667295, + 112.703928, + 112.740595, + 112.777297, + 112.814034, + 112.850804, + 112.887609, + 112.924448, + 112.961321, + 112.998228, + 113.035169, + 113.072144, + 113.109152, + 113.146193, + 113.183267, + 113.220374, + 113.257514, + 113.294686, + 113.33189, + 113.369125, + 113.406392, + 113.44369, + 113.481019, + 113.518378, + 113.555767, + 113.593186, + 113.630635, + 113.668113, + 113.70562, + 113.743155, + 113.780719, + 113.81831, + 113.855929, + 113.893576, + 113.93125, + 113.968951, + 114.006678, + 114.044432, + 114.082211, + 114.120017, + 114.157848, + 114.195704, + 114.233586, + 114.271492, + 114.309424, + 114.34738, + 114.385361, + 114.423367, + 114.461397, + 114.499451, + 114.53753, + 114.575633, + 114.61376, + 114.651912, + 114.690088, + 114.728288, + 114.766513, + 114.804763, + 114.843037, + 114.881337, + 114.919661, + 114.95801, + 114.996385, + 115.034785, + 115.073211, + 115.111663, + 115.150141, + 115.188646, + 115.227177, + 115.265735, + 115.30432, + 115.342933, + 115.381573, + 115.420241, + 115.458938, + 115.497663, + 115.536417, + 115.5752, + 115.614013, + 115.652856, + 115.691728, + 115.730631, + 115.769565, + 115.80853, + 115.847526, + 115.886553, + 115.925613, + 115.964704, + 116.003828, + 116.042985, + 116.082174, + 116.121397, + 116.160653, + 116.199942, + 116.239265, + 116.278621, + 116.318012, + 116.357437, + 116.396895, + 116.436388, + 116.475915, + 116.515476, + 116.55507, + 116.5947, + 116.634363, + 116.674059, + 116.71379, + 116.753555, + 116.793353, + 116.833184, + 116.873049, + 116.912947, + 116.952877, + 116.99284, + 117.032836, + 117.072863, + 117.112923, + 117.153014, + 117.193136, + 117.233289, + 117.273473, + 117.313687, + 117.353931, + 117.394205, + 117.434508, + 117.47484, + 117.515202, + 117.555591, + 117.596009, + 117.636455, + 117.676928, + 117.717429, + 117.757957, + 117.798512, + 117.839094, + 117.879702, + 117.920336, + 117.960997, + 118.001684, + 118.042396, + 118.083134, + 118.123899, + 118.164688, + 118.205504, + 118.246345, + 118.287212, + 118.328105, + 118.369023, + 118.409968, + 118.450938, + 118.491935, + 118.532958, + 118.574008, + 118.615085, + 118.656189, + 118.69732, + 118.738478, + 118.779665, + 118.820879, + 118.862122, + 118.903393, + 118.944694, + 118.986023, + 119.027383, + 119.068772, + 119.110191, + 119.151641, + 119.193122, + 119.234634, + 119.276177, + 119.317752, + 119.359359, + 119.400998, + 119.44267, + 119.484374, + 119.526112, + 119.567882, + 119.609686, + 119.651524, + 119.693395, + 119.7353, + 119.777239, + 119.819213, + 119.86122, + 119.903262, + 119.945338, + 119.987448, + 120.029593, + 120.071772, + 120.113985, + 120.156233, + 120.198515, + 120.240831, + 120.28318, + 120.325564, + 120.367981, + 120.410432, + 120.452916, + 120.495433, + 120.537983, + 120.580566, + 120.623181, + 120.665829, + 120.708508, + 120.751219, + 120.793962, + 120.836735, + 120.879539, + 120.922374, + 120.965239, + 121.008133, + 121.051057, + 121.09401, + 121.136992, + 121.180002, + 121.22304, + 121.266106, + 121.3092, + 121.352321, + 121.395469, + 121.438644, + 121.481845, + 121.525073, + 121.568327, + 121.611607, + 121.654912, + 121.698243, + 121.7416, + 121.784982, + 121.828389, + 121.87182, + 121.915277, + 121.958758, + 122.002265, + 122.045796, + 122.089351, + 122.132932, + 122.176537, + 122.220167, + 122.263822, + 122.307502, + 122.351207, + 122.394938, + 122.438694, + 122.482476, + 122.526284, + 122.570118, + 122.613979, + 122.657866, + 122.70178, + 122.745722, + 122.789692, + 122.833689, + 122.877715, + 122.92177, + 122.965854, + 123.009967, + 123.05411, + 123.098284, + 123.142488, + 123.186723, + 123.23099, + 123.275288, + 123.319618, + 123.363981, + 123.408377, + 123.452806, + 123.497269, + 123.541765, + 123.586295, + 123.63086, + 123.675459, + 123.720093, + 123.764762, + 123.809467, + 123.854206, + 123.898981, + 123.943792, + 123.988639, + 124.033521, + 124.078439, + 124.123393, + 124.168383, + 124.213408, + 124.258469, + 124.303566, + 124.348698, + 124.393866, + 124.439069, + 124.484306, + 124.529579, + 124.574885, + 124.620226, + 124.665601, + 124.711009, + 124.756451, + 124.801925, + 124.847431, + 124.89297, + 124.93854, + 124.984141, + 125.029774, + 125.075436, + 125.121129, + 125.16685, + 125.212601, + 125.258381, + 125.304189, + 125.350025, + 125.395888, + 125.441778, + 125.487695, + 125.533638, + 125.579607, + 125.625602, + 125.671622, + 125.717667, + 125.763737, + 125.809831, + 125.855949, + 125.902092, + 125.948258, + 125.994448, + 126.040662, + 126.086899, + 126.13316, + 126.179444, + 126.225751, + 126.272082, + 126.318436, + 126.364813, + 126.411215, + 126.457639, + 126.504088, + 126.550561, + 126.597057, + 126.643579, + 126.690124, + 126.736695, + 126.783291, + 126.829912, + 126.876559, + 126.923233, + 126.969932, + 127.016659, + 127.063413, + 127.110194, + 127.157003, + 127.203841, + 127.250707, + 127.297603, + 127.344528, + 127.391483, + 127.438468, + 127.485484, + 127.532531, + 127.579609, + 127.626719, + 127.673861, + 127.721036, + 127.768243, + 127.815483, + 127.862756, + 127.910063, + 127.957403, + 128.004778, + 128.052186, + 128.099629, + 128.147107, + 128.194619, + 128.242165, + 128.289747, + 128.337363, + 128.385014, + 128.4327, + 128.48042, + 128.528175, + 128.575965, + 128.62379, + 128.671648, + 128.719541, + 128.767468, + 128.815429, + 128.863424, + 128.911451, + 128.959512, + 129.007606, + 129.055732, + 129.10389, + 129.15208, + 129.200302, + 129.248555, + 129.296839, + 129.345153, + 129.393498, + 129.441872, + 129.490276, + 129.538709, + 129.587171, + 129.635662, + 129.68418, + 129.732726, + 129.781299, + 129.829899, + 129.878526, + 129.927179, + 129.975859, + 130.024563, + 130.073294, + 130.122049, + 130.17083, + 130.219635, + 130.268465, + 130.31732, + 130.366199, + 130.415103, + 130.46403, + 130.512982, + 130.561958, + 130.610958, + 130.659983, + 130.709031, + 130.758104, + 130.807201, + 130.856323, + 130.905469, + 130.954641, + 131.003837, + 131.053059, + 131.102306, + 131.151579, + 131.200878, + 131.250203, + 131.299555, + 131.348935, + 131.398341, + 131.447776, + 131.497239, + 131.546731, + 131.596251, + 131.645802, + 131.695382, + 131.744993, + 131.794634, + 131.844306, + 131.894011, + 131.943747, + 131.993515, + 132.043317, + 132.093151, + 132.143019, + 132.192921, + 132.242856, + 132.292827, + 132.342832, + 132.392872, + 132.442947, + 132.493057, + 132.543204, + 132.593386, + 132.643604, + 132.693858, + 132.744148, + 132.794475, + 132.844838, + 132.895237, + 132.945672, + 132.996143, + 133.04665, + 133.097193, + 133.147772, + 133.198386, + 133.249036, + 133.299721, + 133.35044, + 133.401194, + 133.451982, + 133.502804, + 133.553659, + 133.604547, + 133.655468, + 133.706421, + 133.757406, + 133.808422, + 133.859469, + 133.910547, + 133.961654, + 134.012792, + 134.063958, + 134.115153, + 134.166377, + 134.217629, + 134.268907, + 134.320214, + 134.371546, + 134.422905, + 134.474291, + 134.525701, + 134.577137, + 134.628598, + 134.680084, + 134.731594, + 134.783129, + 134.834687, + 134.886269, + 134.937875, + 134.989504, + 135.041157, + 135.092834, + 135.144533, + 135.196256, + 135.248002, + 135.299772, + 135.351565, + 135.403382, + 135.455223, + 135.507088, + 135.558977, + 135.61089, + 135.662828, + 135.714791, + 135.766779, + 135.818793, + 135.870833, + 135.9229, + 135.974993, + 136.027113, + 136.07926, + 136.131436, + 136.183639, + 136.235872, + 136.288134, + 136.340425, + 136.392747, + 136.445099, + 136.497482, + 136.549896, + 136.602342, + 136.654821, + 136.707332, + 136.759876, + 136.812454, + 136.865065, + 136.917711, + 136.970391, + 137.023107, + 137.075857, + 137.128643, + 137.181465, + 137.234322, + 137.287216, + 137.340146, + 137.393112, + 137.446115, + 137.499155, + 137.552231, + 137.605345, + 137.658495, + 137.711681, + 137.764904, + 137.818164, + 137.87146, + 137.924793, + 137.978161, + 138.031566, + 138.085006, + 138.138481, + 138.191992, + 138.245537, + 138.299117, + 138.35273, + 138.406378, + 138.460059, + 138.513772, + 138.567519, + 138.621297, + 138.675106, + 138.728947, + 138.782819, + 138.83672, + 138.890651, + 138.944612, + 138.998601, + 139.052618, + 139.106663, + 139.160736, + 139.214835, + 139.268961, + 139.323113, + 139.377291, + 139.431494, + 139.485722, + 139.539975, + 139.594252, + 139.648553, + 139.702878, + 139.757227, + 139.811599, + 139.865994, + 139.920412, + 139.974853, + 140.029317, + 140.083804, + 140.138313, + 140.192845, + 140.247401, + 140.301979, + 140.35658, + 140.411204, + 140.465852, + 140.520523, + 140.575218, + 140.629937, + 140.684681, + 140.739449, + 140.794242, + 140.849061, + 140.903905, + 140.958776, + 141.013673, + 141.068597, + 141.123548, + 141.178528, + 141.233535, + 141.288572, + 141.343637, + 141.398732, + 141.453858, + 141.509014, + 141.564201, + 141.619419, + 141.674669, + 141.729952, + 141.785267, + 141.840615, + 141.895997, + 141.951413, + 142.006863, + 142.062347, + 142.117866, + 142.17342, + 142.229009, + 142.284633, + 142.340294, + 142.39599, + 142.451721, + 142.507489, + 142.563293, + 142.619133, + 142.675009, + 142.73092, + 142.786868, + 142.842851, + 142.89887, + 142.954924, + 143.011014, + 143.067138, + 143.123297, + 143.179491, + 143.235719, + 143.29198, + 143.348275, + 143.404603, + 143.460964, + 143.517357, + 143.573782, + 143.630239, + 143.686726, + 143.743244, + 143.799792, + 143.85637, + 143.912977, + 143.969612, + 144.026276, + 144.082968, + 144.139687, + 144.196432, + 144.253205, + 144.310003, + 144.366827, + 144.423676, + 144.480551, + 144.537449, + 144.594372, + 144.651319, + 144.70829, + 144.765284, + 144.822301, + 144.879342, + 144.936405, + 144.993491, + 145.0506, + 145.107731, + 145.164885, + 145.222062, + 145.279261, + 145.336483, + 145.393728, + 145.450995, + 145.508286, + 145.5656, + 145.622938, + 145.680299, + 145.737684, + 145.795093, + 145.852527, + 145.909986, + 145.96747, + 146.02498, + 146.082516, + 146.140079, + 146.197669, + 146.255286, + 146.312931, + 146.370604, + 146.428307, + 146.486038, + 146.5438, + 146.601592, + 146.659414, + 146.717268, + 146.775154, + 146.833071, + 146.891022, + 146.949005, + 147.007022, + 147.065072, + 147.123157, + 147.181276, + 147.23943, + 147.29762, + 147.355844, + 147.414105, + 147.472401, + 147.530734, + 147.589103, + 147.647508, + 147.70595, + 147.764429, + 147.822945, + 147.881497, + 147.940086, + 147.998712, + 148.057374, + 148.116073, + 148.174808, + 148.23358, + 148.292387, + 148.35123, + 148.410109, + 148.469023, + 148.527971, + 148.586954, + 148.645971, + 148.705022, + 148.764106, + 148.823222, + 148.882372, + 148.941553, + 149.000765, + 149.060009, + 149.119283, + 149.178587, + 149.23792, + 149.297283, + 149.356674, + 149.416093, + 149.47554, + 149.535014, + 149.594515, + 149.654042, + 149.713595, + 149.773173, + 149.832776, + 149.892404, + 149.952056, + 150.011732, + 150.071432, + 150.131155, + 150.190901, + 150.250671, + 150.310463, + 150.370277, + 150.430115, + 150.489974, + 150.549856, + 150.609761, + 150.669688, + 150.729637, + 150.789609, + 150.849604, + 150.909622, + 150.969662, + 151.029726, + 151.089814, + 151.149925, + 151.210061, + 151.270221, + 151.330405, + 151.390616, + 151.450851, + 151.511113, + 151.571402, + 151.631717, + 151.69206, + 151.752431, + 151.812831, + 151.873259, + 151.933718, + 151.994206, + 152.054724, + 152.115274, + 152.175855, + 152.236468, + 152.297113, + 152.357792, + 152.418504, + 152.479249, + 152.540029, + 152.600844, + 152.661693, + 152.722578, + 152.783499, + 152.844455, + 152.905448, + 152.966477, + 153.027543, + 153.088646, + 153.149786, + 153.210963, + 153.272177, + 153.333428, + 153.394717, + 153.456043, + 153.517406, + 153.578806, + 153.640243, + 153.701717, + 153.763228, + 153.824775, + 153.886358, + 153.947977, + 154.009631, + 154.071321, + 154.133046, + 154.194805, + 154.256598, + 154.318424, + 154.380284, + 154.442176, + 154.504101, + 154.566057, + 154.628045, + 154.690063, + 154.752112, + 154.814191, + 154.876298, + 154.938435, + 155.0006, + 155.062793, + 155.125013, + 155.18726, + 155.249533, + 155.311833, + 155.374158, + 155.436508, + 155.498884, + 155.561283, + 155.623707, + 155.686155, + 155.748626, + 155.811121, + 155.873638, + 155.936179, + 155.998743, + 156.061329, + 156.123937, + 156.186569, + 156.249222, + 156.311899, + 156.374597, + 156.437319, + 156.500063, + 156.56283, + 156.62562, + 156.688434, + 156.751271, + 156.814132, + 156.877017, + 156.939926, + 157.00286, + 157.065819, + 157.128804, + 157.191815, + 157.254852, + 157.317916, + 157.381007, + 157.444125, + 157.507272, + 157.570447, + 157.633652, + 157.696886, + 157.76015, + 157.823445, + 157.88677, + 157.950127, + 158.013516, + 158.076938, + 158.140392, + 158.203879, + 158.267401, + 158.330956, + 158.394545, + 158.458169, + 158.521829, + 158.585523, + 158.649253, + 158.713019, + 158.776821, + 158.840659, + 158.904533, + 158.968443, + 159.03239, + 159.096374, + 159.160393, + 159.22445, + 159.288542, + 159.352671, + 159.416836, + 159.481036, + 159.545273, + 159.609545, + 159.673852, + 159.738194, + 159.80257, + 159.866981, + 159.931426, + 159.995904, + 160.060416, + 160.12496, + 160.189536, + 160.254144, + 160.318783, + 160.383453, + 160.448153, + 160.512883, + 160.577643, + 160.642431, + 160.707247, + 160.772092, + 160.836963, + 160.901861, + 160.966786, + 161.031736, + 161.096712, + 161.161713, + 161.226739, + 161.291788, + 161.356862, + 161.421959, + 161.487079, + 161.552222, + 161.617388, + 161.682577, + 161.747787, + 161.81302, + 161.878274, + 161.94355, + 162.008848, + 162.074168, + 162.139509, + 162.204873, + 162.270258, + 162.335665, + 162.401094, + 162.466545, + 162.532019, + 162.597515, + 162.663035, + 162.728578, + 162.794144, + 162.859735, + 162.925349, + 162.990989, + 163.056654, + 163.122344, + 163.18806, + 163.253802, + 163.319572, + 163.385369, + 163.451193, + 163.517047, + 163.582929, + 163.64884, + 163.714781, + 163.780753, + 163.846755, + 163.912789, + 163.978855, + 164.044953, + 164.111083, + 164.177247, + 164.243445, + 164.309676, + 164.375942, + 164.442242, + 164.508577, + 164.574947, + 164.641353, + 164.707795, + 164.774272, + 164.840786, + 164.907335, + 164.973921, + 165.040543, + 165.107202, + 165.173897, + 165.240628, + 165.307395, + 165.374198, + 165.441038, + 165.507913, + 165.574824, + 165.64177, + 165.708751, + 165.775767, + 165.842817, + 165.909902, + 165.97702, + 166.044172, + 166.111356, + 166.178574, + 166.245823, + 166.313104, + 166.380416, + 166.447759, + 166.515132, + 166.582535, + 166.649967, + 166.717427, + 166.784916, + 166.852432, + 166.919976, + 166.987546, + 167.055142, + 167.122764, + 167.190412, + 167.258085, + 167.325782, + 167.393503, + 167.461248, + 167.529017, + 167.596809, + 167.664624, + 167.732461, + 167.800321, + 167.868203, + 167.936108, + 168.004034, + 168.071982, + 168.139952, + 168.207944, + 168.275957, + 168.343992, + 168.412049, + 168.480128, + 168.548229, + 168.616352, + 168.684498, + 168.752666, + 168.820858, + 168.889072, + 168.95731, + 169.025572, + 169.093858, + 169.162169, + 169.230505, + 169.298866, + 169.367253, + 169.435667, + 169.504107, + 169.572574, + 169.64107, + 169.709594, + 169.778146, + 169.846728, + 169.915339, + 169.98398, + 170.052653, + 170.121356, + 170.190091, + 170.258858, + 170.327657, + 170.39649, + 170.465355, + 170.534255, + 170.603188, + 170.672155, + 170.741158, + 170.810195, + 170.879267, + 170.948375, + 171.017518, + 171.086697, + 171.155912, + 171.225163, + 171.29445, + 171.363773, + 171.433132, + 171.502527, + 171.571958, + 171.641425, + 171.710928, + 171.780466, + 171.85004, + 171.919649, + 171.989292, + 172.05897, + 172.128683, + 172.198429, + 172.268209, + 172.338021, + 172.407867, + 172.477745, + 172.547655, + 172.617596, + 172.687568, + 172.757571, + 172.827603, + 172.897666, + 172.967757, + 173.037877, + 173.108024, + 173.1782, + 173.248402, + 173.318631, + 173.388886, + 173.459167, + 173.529473, + 173.599804, + 173.67016, + 173.740539, + 173.810943, + 173.881369, + 173.951819, + 174.022292, + 174.092787, + 174.163304, + 174.233844, + 174.304406, + 174.374989, + 174.445595, + 174.516222, + 174.586871, + 174.657541, + 174.728234, + 174.798948, + 174.869683, + 174.940441, + 175.011221, + 175.082024, + 175.152848, + 175.223696, + 175.294567, + 175.365461, + 175.436379, + 175.50732, + 175.578286, + 175.649277, + 175.720293, + 175.791335, + 175.862403, + 175.933497, + 176.004618, + 176.075767, + 176.146943, + 176.218148, + 176.289381, + 176.360643, + 176.431935, + 176.503257, + 176.57461, + 176.645993, + 176.717408, + 176.788854, + 176.860332, + 176.931843, + 177.003386, + 177.074963, + 177.146573, + 177.218216, + 177.289893, + 177.361605, + 177.43335, + 177.50513, + 177.576945, + 177.648794, + 177.720678, + 177.792597, + 177.864551, + 177.936539, + 178.008562, + 178.08062, + 178.152712, + 178.224838, + 178.296999, + 178.369193, + 178.441421, + 178.513683, + 178.585978, + 178.658305, + 178.730665, + 178.803057, + 178.87548, + 178.947935, + 179.020421, + 179.092937, + 179.165483, + 179.238058, + 179.310663, + 179.383297, + 179.455958, + 179.528648, + 179.601364, + 179.674107, + 179.746877, + 179.819673, + 179.892493, + 179.965339, + 180.03821, + 180.111104, + 180.184023, + 180.256964, + 180.329929, + 180.402916, + 180.475926, + 180.548958, + 180.622011, + 180.695086, + 180.768183, + 180.8413, + 180.914439, + 180.987599, + 181.06078, + 181.133981, + 181.207203, + 181.280446, + 181.353711, + 181.426996, + 181.500302, + 181.573629, + 181.646978, + 181.720348, + 181.79374, + 181.867154, + 181.940591, + 182.01405, + 182.087532, + 182.161037, + 182.234566, + 182.308119, + 182.381696, + 182.455298, + 182.528926, + 182.602579, + 182.676258, + 182.749964, + 182.823697, + 182.897457, + 182.971246, + 183.045062, + 183.118908, + 183.192783, + 183.266687, + 183.340622, + 183.414587, + 183.488583, + 183.56261, + 183.636669, + 183.71076, + 183.784884, + 183.85904, + 183.933229, + 184.007451, + 184.081706, + 184.155995, + 184.230317, + 184.304674, + 184.379064, + 184.453489, + 184.527947, + 184.60244, + 184.676966, + 184.751527, + 184.826122, + 184.90075, + 184.975413, + 185.050109, + 185.124838, + 185.1996, + 185.274396, + 185.349223, + 185.424084, + 185.498976, + 185.5739, + 185.648856, + 185.723842, + 185.79886, + 185.873907, + 185.948984, + 186.024091, + 186.099227, + 186.174391, + 186.249584, + 186.324804, + 186.400052, + 186.475327, + 186.550628, + 186.625955, + 186.701308, + 186.776686, + 186.852089, + 186.927516, + 187.002968, + 187.078443, + 187.153942, + 187.229464, + 187.30501, + 187.380577, + 187.456168, + 187.53178, + 187.607415, + 187.683072, + 187.758751, + 187.834451, + 187.910173, + 187.985917, + 188.061683, + 188.13747, + 188.21328, + 188.289111, + 188.364964, + 188.44084, + 188.516737, + 188.592657, + 188.6686, + 188.744566, + 188.820556, + 188.896569, + 188.972605, + 189.048666, + 189.124752, + 189.200862, + 189.276998, + 189.353159, + 189.429346, + 189.50556, + 189.581801, + 189.65807, + 189.734366, + 189.81069, + 189.887043, + 189.963426, + 190.039837, + 190.116279, + 190.192751, + 190.269253, + 190.345787, + 190.422352, + 190.498949, + 190.575578, + 190.65224, + 190.728934, + 190.805662, + 190.882422, + 190.959216, + 191.036044, + 191.112906, + 191.189802, + 191.266732, + 191.343696, + 191.420695, + 191.497728, + 191.574795, + 191.651897, + 191.729034, + 191.806204, + 191.883409, + 191.960648, + 192.037921, + 192.115227, + 192.192567, + 192.269941, + 192.347347, + 192.424787, + 192.502259, + 192.579763, + 192.657299, + 192.734867, + 192.812466, + 192.890096, + 192.967756, + 193.045447, + 193.123167, + 193.200917, + 193.278695, + 193.356503, + 193.434338, + 193.512202, + 193.590092, + 193.66801, + 193.745955, + 193.823926, + 193.901922, + 193.979945, + 194.057993, + 194.136065, + 194.214163, + 194.292285, + 194.370431, + 194.448602, + 194.526796, + 194.605014, + 194.683255, + 194.76152, + 194.839808, + 194.918119, + 194.996453, + 195.074811, + 195.153191, + 195.231595, + 195.310022, + 195.388472, + 195.466945, + 195.545442, + 195.623963, + 195.702507, + 195.781076, + 195.859669, + 195.938286, + 196.016928, + 196.095596, + 196.174288, + 196.253007, + 196.331751, + 196.410522, + 196.48932, + 196.568144, + 196.646997, + 196.725877, + 196.804785, + 196.883722, + 196.962688, + 197.041684, + 197.120709, + 197.199764, + 197.27885, + 197.357967, + 197.437114, + 197.516294, + 197.595505, + 197.674749, + 197.754024, + 197.833333, + 197.912675, + 197.992049, + 198.071458, + 198.1509, + 198.230375, + 198.309885, + 198.389429, + 198.469007, + 198.548619, + 198.628266, + 198.707947, + 198.787662, + 198.867411, + 198.947195, + 199.027013, + 199.106865, + 199.186751, + 199.26667, + 199.346623, + 199.42661, + 199.50663, + 199.586682, + 199.666768, + 199.746885, + 199.827035, + 199.907217, + 199.98743, + 200.067674, + 200.147949, + 200.228255, + 200.30859, + 200.388956, + 200.469351, + 200.549774, + 200.630227, + 200.710708, + 200.791217, + 200.871753, + 200.952317, + 201.032908, + 201.113525, + 201.194169, + 201.274838, + 201.355533, + 201.436254, + 201.517, + 201.59777, + 201.678565, + 201.759385, + 201.840229, + 201.921097, + 202.001989, + 202.082905, + 202.163844, + 202.244808, + 202.325794, + 202.406805, + 202.487839, + 202.568897, + 202.649978, + 202.731084, + 202.812213, + 202.893366, + 202.974543, + 203.055744, + 203.13697, + 203.218221, + 203.299496, + 203.380797, + 203.462122, + 203.543474, + 203.624851, + 203.706255, + 203.787685, + 203.869142, + 203.950625, + 204.032137, + 204.113676, + 204.195243, + 204.276839, + 204.358463, + 204.440117, + 204.5218, + 204.603512, + 204.685255, + 204.767028, + 204.848832, + 204.930667, + 205.012533, + 205.09443, + 205.17636, + 205.258321, + 205.340315, + 205.422341, + 205.5044, + 205.586491, + 205.668615, + 205.750773, + 205.832964, + 205.915188, + 205.997445, + 206.079736, + 206.16206, + 206.244417, + 206.326808, + 206.409232, + 206.491689, + 206.57418, + 206.656703, + 206.73926, + 206.821849, + 206.90447, + 206.987124, + 207.069811, + 207.152529, + 207.235278, + 207.31806, + 207.400872, + 207.483715, + 207.566589, + 207.649493, + 207.732428, + 207.815391, + 207.898385, + 207.981407, + 208.064458, + 208.147538, + 208.230646, + 208.313781, + 208.396944, + 208.480135, + 208.563352, + 208.646596, + 208.729866, + 208.813163, + 208.896485, + 208.979833, + 209.063206, + 209.146605, + 209.230028, + 209.313477, + 209.39695, + 209.480447, + 209.563969, + 209.647515, + 209.731086, + 209.814681, + 209.8983, + 209.981943, + 210.06561, + 210.149302, + 210.233018, + 210.316758, + 210.400522, + 210.484312, + 210.568125, + 210.651964, + 210.735828, + 210.819717, + 210.903631, + 210.987571, + 211.071536, + 211.155528, + 211.239546, + 211.323591, + 211.407662, + 211.491761, + 211.575886, + 211.66004, + 211.744221, + 211.828431, + 211.912669, + 211.996937, + 212.081233, + 212.165558, + 212.249914, + 212.334299, + 212.418715, + 212.503161, + 212.587638, + 212.672146, + 212.756685, + 212.841256, + 212.925858, + 213.010493, + 213.095159, + 213.179858, + 213.264589, + 213.349352, + 213.434148, + 213.518977, + 213.603839, + 213.688733, + 213.773661, + 213.858621, + 213.943614, + 214.02864, + 214.113699, + 214.198791, + 214.283915, + 214.369072, + 214.454261, + 214.539483, + 214.624737, + 214.710023, + 214.79534, + 214.88069, + 214.966071, + 215.051483, + 215.136927, + 215.222401, + 215.307906, + 215.393441, + 215.479007, + 215.564602, + 215.650227, + 215.735881, + 215.821564, + 215.907276, + 215.993017, + 216.078786, + 216.164583, + 216.250408, + 216.336261, + 216.422141, + 216.508048, + 216.593982, + 216.679943, + 216.765931, + 216.851944, + 216.937984, + 217.024051, + 217.110143, + 217.19626, + 217.282404, + 217.368573, + 217.454768, + 217.540988, + 217.627234, + 217.713505, + 217.799802, + 217.886124, + 217.972472, + 218.058845, + 218.145244, + 218.231668, + 218.318119, + 218.404595, + 218.491097, + 218.577626, + 218.664181, + 218.750762, + 218.83737, + 218.924005, + 219.010668, + 219.097357, + 219.184074, + 219.270819, + 219.357591, + 219.444392, + 219.531221, + 219.618079, + 219.704965, + 219.791881, + 219.878826, + 219.965801, + 220.052806, + 220.13984, + 220.226905, + 220.314001, + 220.401127, + 220.488284, + 220.575473, + 220.662692, + 220.749943, + 220.837226, + 220.924541, + 221.011887, + 221.099266, + 221.186677, + 221.27412, + 221.361595, + 221.449103, + 221.536643, + 221.624216, + 221.711821, + 221.799459, + 221.887129, + 221.974831, + 222.062566, + 222.150333, + 222.238133, + 222.325965, + 222.413829, + 222.501725, + 222.589652, + 222.677612, + 222.765603, + 222.853625, + 222.941679, + 223.029764, + 223.117879, + 223.206026, + 223.294202, + 223.382409, + 223.470646, + 223.558913, + 223.64721, + 223.735536, + 223.823891, + 223.912275, + 224.000688, + 224.08913, + 224.1776, + 224.266098, + 224.354624, + 224.443178, + 224.531759, + 224.620368, + 224.709004, + 224.797667, + 224.886358, + 224.975075, + 225.063818, + 225.152589, + 225.241386, + 225.330209, + 225.419058, + 225.507934, + 225.596836, + 225.685765, + 225.774719, + 225.8637, + 225.952706, + 226.041739, + 226.130798, + 226.219884, + 226.308996, + 226.398134, + 226.487299, + 226.57649, + 226.665708, + 226.754953, + 226.844225, + 226.933524, + 227.02285, + 227.112204, + 227.201585, + 227.290993, + 227.38043, + 227.469895, + 227.559387, + 227.648909, + 227.738458, + 227.828037, + 227.917644, + 228.007281, + 228.096946, + 228.186641, + 228.276366, + 228.366121, + 228.455905, + 228.54572, + 228.635564, + 228.725439, + 228.815345, + 228.905281, + 228.995248, + 229.085246, + 229.175275, + 229.265334, + 229.355425, + 229.445547, + 229.535701, + 229.625885, + 229.716101, + 229.806348, + 229.896626, + 229.986936, + 230.077277, + 230.167649, + 230.258052, + 230.348487, + 230.438952, + 230.529448, + 230.619976, + 230.710534, + 230.801123, + 230.891742, + 230.982392, + 231.073072, + 231.163783, + 231.254523, + 231.345294, + 231.436095, + 231.526925, + 231.617785, + 231.708674, + 231.799593, + 231.890541, + 231.981517, + 232.072523, + 232.163556, + 232.254619, + 232.34571, + 232.436828, + 232.527975, + 232.61915, + 232.710352, + 232.801582, + 232.892839, + 232.984123, + 233.075435, + 233.166774, + 233.25814, + 233.349533, + 233.440952, + 233.532399, + 233.623872, + 233.715372, + 233.806898, + 233.898451, + 233.990031, + 234.081638, + 234.173271, + 234.26493, + 234.356617, + 234.448329, + 234.540069, + 234.631835, + 234.723628, + 234.815448, + 234.907294, + 234.999168, + 235.091068, + 235.182996, + 235.274951, + 235.366933, + 235.458943, + 235.55098, + 235.643045, + 235.735138, + 235.827258, + 235.919407, + 236.011584, + 236.103789, + 236.196023, + 236.288285, + 236.380576, + 236.472895, + 236.565244, + 236.657622, + 236.750028, + 236.842464, + 236.934929, + 237.027424, + 237.119949, + 237.212503, + 237.305086, + 237.3977, + 237.490343, + 237.583016, + 237.67572, + 237.768453, + 237.861217, + 237.954011, + 238.046835, + 238.139689, + 238.232574, + 238.325488, + 238.418433, + 238.511409, + 238.604414, + 238.69745, + 238.790516, + 238.883612, + 238.976737, + 239.069893, + 239.163079, + 239.256294, + 239.34954, + 239.442815, + 239.536119, + 239.629453, + 239.722817, + 239.81621, + 239.909632, + 240.003084, + 240.096565, + 240.190075, + 240.283613, + 240.377181, + 240.470778, + 240.564403, + 240.658057, + 240.75174, + 240.845451, + 240.939191, + 241.032958, + 241.126754, + 241.220578, + 241.31443, + 241.40831, + 241.502218, + 241.596153, + 241.690116, + 241.784107, + 241.878126, + 241.972172, + 242.066246, + 242.160347, + 242.254476, + 242.348632, + 242.442816, + 242.537028, + 242.631267, + 242.725534, + 242.819829, + 242.914151, + 243.008501, + 243.102878, + 243.197283, + 243.291716, + 243.386177, + 243.480665, + 243.575182, + 243.669726, + 243.764298, + 243.858899, + 243.953527, + 244.048184, + 244.142869, + 244.237582, + 244.332323, + 244.427093, + 244.521892, + 244.616719, + 244.711575, + 244.80646, + 244.901373, + 244.996316, + 245.091288, + 245.186288, + 245.281318, + 245.376377, + 245.471466, + 245.566583, + 245.66173, + 245.756907, + 245.852113, + 245.947348, + 246.042613, + 246.137908, + 246.233232, + 246.328586, + 246.423969, + 246.519383, + 246.614826, + 246.710298, + 246.805801, + 246.901333, + 246.996895, + 247.092487, + 247.188109, + 247.28376, + 247.379441, + 247.475152, + 247.570893, + 247.666663, + 247.762463, + 247.858292, + 247.954151, + 248.050039, + 248.145957, + 248.241905, + 248.337881, + 248.433888, + 248.529923, + 248.625988, + 248.722082, + 248.818205, + 248.914357, + 249.010539, + 249.106749, + 249.202989, + 249.299258, + 249.395556, + 249.491882, + 249.588238, + 249.684623, + 249.781036, + 249.877479, + 249.97395, + 250.070449, + 250.166978, + 250.263535, + 250.360121, + 250.456735, + 250.553378, + 250.65005, + 250.74675, + 250.843479, + 250.940236, + 251.037022, + 251.133836, + 251.230679, + 251.327551, + 251.424451, + 251.52138, + 251.618337, + 251.715323, + 251.812337, + 251.90938, + 252.006452, + 252.103552, + 252.200681, + 252.297839, + 252.395025, + 252.49224, + 252.589484, + 252.686756, + 252.784057, + 252.881387, + 252.978745, + 253.076132, + 253.173548, + 253.270993, + 253.368466, + 253.465969, + 253.5635, + 253.66106, + 253.758648, + 253.856266, + 253.953913, + 254.051588, + 254.149292, + 254.247025, + 254.344787, + 254.442578, + 254.540398, + 254.638246, + 254.736124, + 254.83403, + 254.931965, + 255.029929, + 255.127922, + 255.225944, + 255.323995, + 255.422074, + 255.520182, + 255.618319, + 255.716485, + 255.814679, + 255.912903, + 256.011155, + 256.109435, + 256.207745, + 256.306083, + 256.40445, + 256.502846, + 256.60127, + 256.699723, + 256.798205, + 256.896716, + 256.995255, + 257.093822, + 257.192419, + 257.291044, + 257.389697, + 257.488379, + 257.58709, + 257.68583, + 257.784598, + 257.883395, + 257.98222, + 258.081074, + 258.179957, + 258.278869, + 258.377809, + 258.476779, + 258.575777, + 258.674804, + 258.773859, + 258.872944, + 258.972057, + 259.071199, + 259.170371, + 259.26957, + 259.368799, + 259.468057, + 259.567343, + 259.666659, + 259.766003, + 259.865376, + 259.964778, + 260.064209, + 260.163669, + 260.263158, + 260.362676, + 260.462222, + 260.561798, + 260.661403, + 260.761036, + 260.860699, + 260.96039, + 261.060111, + 261.15986, + 261.259638, + 261.359445, + 261.459281, + 261.559146, + 261.659039, + 261.758962, + 261.858913, + 261.958892, + 262.0589, + 262.158937, + 262.259002, + 262.359096, + 262.459218, + 262.559369, + 262.659548, + 262.759755, + 262.859991, + 262.960255, + 263.060547, + 263.160867, + 263.261215, + 263.361591, + 263.461995, + 263.562428, + 263.662888, + 263.763376, + 263.863892, + 263.964435, + 264.065007, + 264.165606, + 264.266233, + 264.366887, + 264.46757, + 264.568279, + 264.669016, + 264.769781, + 264.870573, + 264.971393, + 265.07224, + 265.173114, + 265.274016, + 265.374945, + 265.475902, + 265.576886, + 265.677898, + 265.778937, + 265.880004, + 265.981098, + 266.08222, + 266.18337, + 266.284547, + 266.385753, + 266.486986, + 266.588247, + 266.689536, + 266.790853, + 266.892198, + 266.993571, + 267.094972, + 267.196402, + 267.297859, + 267.399345, + 267.500859, + 267.602402, + 267.703973, + 267.805572, + 267.907201, + 268.008857, + 268.110543, + 268.212257, + 268.314001, + 268.415773, + 268.517574, + 268.619405, + 268.721264, + 268.823153, + 268.925071, + 269.027019, + 269.128996, + 269.231002, + 269.333038, + 269.435103, + 269.537197, + 269.639321, + 269.741475, + 269.843657, + 269.945869, + 270.048111, + 270.150382, + 270.252682, + 270.355012, + 270.457371, + 270.559759, + 270.662176, + 270.764623, + 270.867099, + 270.969604, + 271.072138, + 271.174701, + 271.277293, + 271.379914, + 271.482564, + 271.585242, + 271.687949, + 271.790685, + 271.89345, + 271.996243, + 272.099064, + 272.201913, + 272.304791, + 272.407697, + 272.51063, + 272.613592, + 272.716581, + 272.819598, + 272.922643, + 273.025715, + 273.128814, + 273.231941, + 273.335095, + 273.438277, + 273.541485, + 273.644721, + 273.747984, + 273.851274, + 273.95459, + 274.057934, + 274.161305, + 274.264702, + 274.368127, + 274.471578, + 274.575056, + 274.678561, + 274.782093, + 274.885651, + 274.989237, + 275.092849, + 275.196488, + 275.300154, + 275.403847, + 275.507567, + 275.611315, + 275.715089, + 275.818891, + 275.92272, + 276.026577, + 276.130462, + 276.234374, + 276.338314, + 276.442282, + 276.546279, + 276.650303, + 276.754356, + 276.858438, + 276.962548, + 277.066687, + 277.170855, + 277.275051, + 277.379277, + 277.483532, + 277.587816, + 277.692129, + 277.796472, + 277.900845, + 278.005247, + 278.109679, + 278.214141, + 278.318633, + 278.423155, + 278.527707, + 278.632289, + 278.736902, + 278.841545, + 278.946218, + 279.050922, + 279.155656, + 279.260421, + 279.365216, + 279.470041, + 279.574897, + 279.679783, + 279.7847, + 279.889646, + 279.994623, + 280.09963, + 280.204667, + 280.309734, + 280.414831, + 280.519957, + 280.625113, + 280.730299, + 280.835513, + 280.940758, + 281.046031, + 281.151333, + 281.256665, + 281.362025, + 281.467413, + 281.572831, + 281.678276, + 281.783751, + 281.889253, + 281.994783, + 282.100341, + 282.205926, + 282.31154, + 282.41718, + 282.522848, + 282.628543, + 282.734265, + 282.840014, + 282.945789, + 283.051591, + 283.15742, + 283.263275, + 283.369156, + 283.475064, + 283.580997, + 283.686957, + 283.792943, + 283.898956, + 284.004994, + 284.111058, + 284.217148, + 284.323265, + 284.429407, + 284.535576, + 284.64177, + 284.747991, + 284.854238, + 284.960511, + 285.066811, + 285.173137, + 285.279489, + 285.385868, + 285.492274, + 285.598707, + 285.705166, + 285.811653, + 285.918166, + 286.024707, + 286.131276, + 286.237872, + 286.344496, + 286.451148, + 286.557828, + 286.664536, + 286.771272, + 286.878037, + 286.98483, + 287.091652, + 287.198503, + 287.305383, + 287.412292, + 287.51923, + 287.626197, + 287.733194, + 287.840221, + 287.947277, + 288.054363, + 288.161479, + 288.268625, + 288.375801, + 288.483007, + 288.590243, + 288.69751, + 288.804806, + 288.912133, + 289.01949, + 289.126877, + 289.234295, + 289.341742, + 289.449219, + 289.556727, + 289.664264, + 289.771831, + 289.879428, + 289.987054, + 290.09471, + 290.202395, + 290.31011, + 290.417853, + 290.525625, + 290.633426, + 290.741256, + 290.849114, + 290.957001, + 291.064915, + 291.172858, + 291.280828, + 291.388826, + 291.496852, + 291.604904, + 291.712984, + 291.821091, + 291.929224, + 292.037384, + 292.14557, + 292.253782, + 292.36202, + 292.470283, + 292.578573, + 292.686887, + 292.795227, + 292.903592, + 293.011981, + 293.120396, + 293.228835, + 293.337298, + 293.445786, + 293.554299, + 293.662835, + 293.771396, + 293.879981, + 293.988591, + 294.097224, + 294.205882, + 294.314564, + 294.42327, + 294.532, + 294.640755, + 294.749533, + 294.858337, + 294.967164, + 295.076016, + 295.184893, + 295.293795, + 295.402721, + 295.511673, + 295.620649, + 295.729651, + 295.838679, + 295.947732, + 296.05681, + 296.165915, + 296.275046, + 296.384203, + 296.493386, + 296.602596, + 296.711833, + 296.821097, + 296.930389, + 297.039707, + 297.149054, + 297.258428, + 297.36783, + 297.47726, + 297.586718, + 297.696204, + 297.805719, + 297.915263, + 298.024835, + 298.134436, + 298.244066, + 298.353725, + 298.463413, + 298.573131, + 298.682877, + 298.792653, + 298.902458, + 299.012292, + 299.122155, + 299.232048, + 299.341969, + 299.45192, + 299.5619, + 299.671908, + 299.781946, + 299.892012, + 300.002107, + 300.11223, + 300.222382, + 300.332561, + 300.442769, + 300.553005, + 300.663268, + 300.773559, + 300.883877, + 300.994223, + 301.104595, + 301.214995, + 301.32542, + 301.435873, + 301.546351, + 301.656856, + 301.767386, + 301.877942, + 301.988523, + 302.099129, + 302.20976, + 302.320416, + 302.431097, + 302.541802, + 302.652531, + 302.763284, + 302.874061, + 302.984862, + 303.095687, + 303.206535, + 303.317406, + 303.428301, + 303.539218, + 303.650159, + 303.761123, + 303.872111, + 303.983121, + 304.094154, + 304.20521, + 304.31629, + 304.427392, + 304.538518, + 304.649666, + 304.760838, + 304.872034, + 304.983252, + 305.094495, + 305.205761, + 305.31705, + 305.428364, + 305.539702, + 305.651064, + 305.76245, + 305.873861, + 305.985297, + 306.096758, + 306.208244, + 306.319756, + 306.431293, + 306.542857, + 306.654446, + 306.766062, + 306.877705, + 306.989375, + 307.101072, + 307.212797, + 307.324549, + 307.436329, + 307.548137, + 307.659974, + 307.771839, + 307.883733, + 307.995656, + 308.107608, + 308.219589, + 308.3316, + 308.44364, + 308.55571, + 308.66781, + 308.77994, + 308.8921, + 309.00429, + 309.11651, + 309.22876, + 309.341041, + 309.453352, + 309.565694, + 309.678066, + 309.790468, + 309.9029, + 310.015363, + 310.127856, + 310.240379, + 310.352932, + 310.465514, + 310.578126, + 310.690768, + 310.803439, + 310.91614, + 311.028869, + 311.141627, + 311.254414, + 311.367229, + 311.480073, + 311.592944, + 311.705844, + 311.818771, + 311.931725, + 312.044707, + 312.157715, + 312.270751, + 312.383813, + 312.496901, + 312.610016, + 312.723157, + 312.836323, + 312.949515, + 313.062732, + 313.175974, + 313.289241, + 313.402533, + 313.51585, + 313.629191, + 313.742556, + 313.855946, + 313.96936, + 314.082799, + 314.196261, + 314.309748, + 314.423258, + 314.536793, + 314.650352, + 314.763935, + 314.877542, + 314.991174, + 315.10483, + 315.21851, + 315.332215, + 315.445945, + 315.559699, + 315.673478, + 315.787283, + 315.901112, + 316.014967, + 316.128847, + 316.242753, + 316.356685, + 316.470643, + 316.584627, + 316.698638, + 316.812675, + 316.926739, + 317.040831, + 317.15495, + 317.269096, + 317.383271, + 317.497474, + 317.611705, + 317.725964, + 317.840253, + 317.95457, + 318.068917, + 318.183293, + 318.297699, + 318.412135, + 318.526601, + 318.641096, + 318.755622, + 318.870178, + 318.984765, + 319.099382, + 319.214029, + 319.328707, + 319.443415, + 319.558154, + 319.672924, + 319.787724, + 319.902555, + 320.017416, + 320.132308, + 320.24723, + 320.362183, + 320.477166, + 320.592179, + 320.707223, + 320.822296, + 320.9374, + 321.052534, + 321.167697, + 321.28289, + 321.398112, + 321.513363, + 321.628643, + 321.743951, + 321.859288, + 321.974654, + 322.090047, + 322.205468, + 322.320916, + 322.436392, + 322.551894, + 322.667424, + 322.782979, + 322.898562, + 323.01417, + 323.129804, + 323.245464, + 323.361149, + 323.47686, + 323.592595, + 323.708356, + 323.824142, + 323.939952, + 324.055787, + 324.171647, + 324.28753, + 324.403438, + 324.51937, + 324.635326, + 324.751306, + 324.867309, + 324.983337, + 325.099388, + 325.215463, + 325.331561, + 325.447684, + 325.56383, + 325.680001, + 325.796195, + 325.912414, + 326.028657, + 326.144924, + 326.261216, + 326.377532, + 326.493874, + 326.61024, + 326.726632, + 326.843049, + 326.959492, + 327.07596, + 327.192455, + 327.308976, + 327.425523, + 327.542097, + 327.658698, + 327.775327, + 327.891982, + 328.008666, + 328.125377, + 328.242116, + 328.358884, + 328.475681, + 328.592506, + 328.709361, + 328.826244, + 328.943158, + 329.060101, + 329.177074, + 329.294077, + 329.41111, + 329.528174, + 329.645268, + 329.762392, + 329.879547, + 329.996733, + 330.11395, + 330.231198, + 330.348476, + 330.465785, + 330.583125, + 330.700496, + 330.817897, + 330.935329, + 331.052792, + 331.170285, + 331.287809, + 331.405363, + 331.522947, + 331.640562, + 331.758206, + 331.875881, + 331.993585, + 332.111318, + 332.229081, + 332.346873, + 332.464694, + 332.582543, + 332.700421, + 332.818327, + 332.93626, + 333.054222, + 333.172211, + 333.290227, + 333.40827, + 333.526339, + 333.644435, + 333.762557, + 333.880704, + 333.998878, + 334.117077, + 334.235301, + 334.35355, + 334.471824, + 334.590123, + 334.708447, + 334.826795, + 334.945168, + 335.063564, + 335.181985, + 335.30043, + 335.418898, + 335.537391, + 335.655907, + 335.774447, + 335.893011, + 336.011599, + 336.13021, + 336.248845, + 336.367504, + 336.486187, + 336.604894, + 336.723624, + 336.842379, + 336.961159, + 337.079962, + 337.198791, + 337.317644, + 337.436522, + 337.555426, + 337.674355, + 337.79331, + 337.91229, + 338.031297, + 338.15033, + 338.26939, + 338.388476, + 338.50759, + 338.626731, + 338.745899, + 338.865095, + 338.984319, + 339.103571, + 339.222852, + 339.342161, + 339.461499, + 339.580866, + 339.700262, + 339.819688, + 339.939143, + 340.058629, + 340.178144, + 340.297689, + 340.417265, + 340.536871, + 340.656508, + 340.776176, + 340.895874, + 341.015603, + 341.135364, + 341.255155, + 341.374977, + 341.494831, + 341.614715, + 341.73463, + 341.854576, + 341.974553, + 342.094561, + 342.2146, + 342.334669, + 342.454768, + 342.574898, + 342.695058, + 342.815248, + 342.935469, + 343.055719, + 343.175998, + 343.296307, + 343.416646, + 343.537013, + 343.65741, + 343.777835, + 343.898288, + 344.01877, + 344.13928, + 344.259817, + 344.380382, + 344.500975, + 344.621594, + 344.742241, + 344.862914, + 344.983614, + 345.104339, + 345.225091, + 345.345869, + 345.466673, + 345.587502, + 345.708356, + 345.829236, + 345.950141, + 346.071071, + 346.192026, + 346.313006, + 346.434011, + 346.55504, + 346.676095, + 346.797174, + 346.918277, + 347.039405, + 347.160558, + 347.281736, + 347.402938, + 347.524165, + 347.645417, + 347.766694, + 347.887996, + 348.009323, + 348.130675, + 348.252053, + 348.373456, + 348.494885, + 348.61634, + 348.737821, + 348.859328, + 348.980862, + 349.102422, + 349.224009, + 349.345623, + 349.467264, + 349.588933, + 349.710629, + 349.832353, + 349.954105, + 350.075886, + 350.197695, + 350.319533, + 350.4414, + 350.563296, + 350.685222, + 350.807177, + 350.929163, + 351.051178, + 351.173223, + 351.295299, + 351.417405, + 351.539542, + 351.661709, + 351.783907, + 351.906136, + 352.028397, + 352.150688, + 352.27301, + 352.395363, + 352.517748, + 352.640163, + 352.76261, + 352.885087, + 353.007596, + 353.130136, + 353.252706, + 353.375308, + 353.49794, + 353.620603, + 353.743297, + 353.866021, + 353.988775, + 354.11156, + 354.234374, + 354.357219, + 354.480093, + 354.602997, + 354.72593, + 354.848892, + 354.971883, + 355.094903, + 355.217951, + 355.341027, + 355.464131, + 355.587263, + 355.710422, + 355.833608, + 355.956821, + 356.080061, + 356.203328, + 356.326621, + 356.449939, + 356.573284, + 356.696655, + 356.820051, + 356.943472, + 357.066919, + 357.190391, + 357.313888, + 357.437409, + 357.560956, + 357.684527, + 357.808123, + 357.931744, + 358.055389, + 358.179059, + 358.302753, + 358.426472, + 358.550215, + 358.673983, + 358.797775, + 358.921591, + 359.045433, + 359.169299, + 359.29319, + 359.417107, + 359.541048, + 359.665015, + 359.789007, + 359.913025, + 0.037068, + 0.161138, + 0.285234, + 0.409356, + 0.533505, + 0.65768, + 0.781882, + 0.906111, + 1.030368, + 1.154652, + 1.278963, + 1.403302, + 1.52767, + 1.652065, + 1.776489, + 1.900942, + 2.025423, + 2.149933, + 2.274472, + 2.399041, + 2.523639, + 2.648267, + 2.772925, + 2.897613, + 3.02233, + 3.147078, + 3.271856, + 3.396664, + 3.521503, + 3.646372, + 3.771271, + 3.896201, + 4.021161, + 4.146152, + 4.271173, + 4.396224, + 4.521305, + 4.646417, + 4.771558, + 4.89673, + 5.021931, + 5.147163, + 5.272424, + 5.397715, + 5.523035, + 5.648384, + 5.773763, + 5.899171, + 6.024608, + 6.150073, + 6.275568, + 6.40109, + 6.526641, + 6.65222, + 6.777827, + 6.903461, + 7.029123, + 7.154813, + 7.280529, + 7.406272, + 7.532042, + 7.657838, + 7.783661, + 7.90951, + 8.035385, + 8.161285, + 8.287212, + 8.413163, + 8.539141, + 8.665143, + 8.791171, + 8.917223, + 9.043301, + 9.169404, + 9.295531, + 9.421683, + 9.547861, + 9.674062, + 9.800289, + 9.92654, + 10.052816, + 10.179117, + 10.305442, + 10.431792, + 10.558167, + 10.684567, + 10.810992, + 10.937442, + 11.063917, + 11.190417, + 11.316943, + 11.443494, + 11.570071, + 11.696673, + 11.823301, + 11.949955, + 12.076636, + 12.203342, + 12.330075, + 12.456835, + 12.583622, + 12.710435, + 12.837276, + 12.964144, + 13.09104, + 13.217964, + 13.344915, + 13.471895, + 13.598903, + 13.72594, + 13.853005, + 13.980099, + 14.107222, + 14.234374, + 14.361555, + 14.488765, + 14.616005, + 14.743275, + 14.870573, + 14.997902, + 15.125261, + 15.252649, + 15.380067, + 15.507515, + 15.634993, + 15.762501, + 15.890038, + 16.017606, + 16.145204, + 16.272832, + 16.400489, + 16.528177, + 16.655894, + 16.783641, + 16.911418, + 17.039225, + 17.167061, + 17.294926, + 17.422821, + 17.550744, + 17.678697, + 17.806679, + 17.934689, + 18.062728, + 18.190795, + 18.318891, + 18.447014, + 18.575166, + 18.703345, + 18.831551, + 18.959785, + 19.088046, + 19.216335, + 19.34465, + 19.472991, + 19.60136, + 19.729755, + 19.858176, + 19.986623, + 20.115096, + 20.243596, + 20.372121, + 20.500672, + 20.629248, + 20.757851, + 20.886478, + 21.015132, + 21.14381, + 21.272514, + 21.401244, + 21.529999, + 21.658779, + 21.787584, + 21.916415, + 22.045271, + 22.174153, + 22.30306, + 22.431993, + 22.560951, + 22.689935, + 22.818946, + 22.947982, + 23.077044, + 23.206132, + 23.335247, + 23.464388, + 23.593556, + 23.722751, + 23.851972, + 23.981221, + 24.110496, + 24.239799, + 24.36913, + 24.498487, + 24.627873, + 24.757286, + 24.886727, + 25.016197, + 25.145694, + 25.27522, + 25.404774, + 25.534358, + 25.663969, + 25.79361, + 25.92328, + 26.05298, + 26.182708, + 26.312466, + 26.442254, + 26.572071, + 26.701918, + 26.831795, + 26.961702, + 27.091638, + 27.221605, + 27.351601, + 27.481628, + 27.611684, + 27.74177, + 27.871886, + 28.002031, + 28.132207, + 28.262412, + 28.392647, + 28.522912, + 28.653206, + 28.78353, + 28.913883, + 29.044266, + 29.174678, + 29.305119, + 29.43559, + 29.56609, + 29.696618, + 29.827176, + 29.957763, + 30.088378, + 30.219022, + 30.349695, + 30.480396, + 30.611125, + 30.741883, + 30.872668, + 31.003482, + 31.134323, + 31.265192, + 31.396088, + 31.527012, + 31.657964, + 31.788942, + 31.919948, + 32.05098, + 32.182039, + 32.313126, + 32.444238, + 32.575378, + 32.706544, + 32.837736, + 32.968955, + 33.1002, + 33.231471, + 33.362768, + 33.494092, + 33.625442, + 33.756818, + 33.888221, + 34.019649, + 34.151104, + 34.282585, + 34.414092, + 34.545625, + 34.677184, + 34.80877, + 34.940382, + 35.07202, + 35.203684, + 35.335375, + 35.467093, + 35.598837, + 35.730607, + 35.862404, + 35.994228, + 36.126079, + 36.257957, + 36.389862, + 36.521795, + 36.653754, + 36.785742, + 36.917756, + 37.049799, + 37.181869, + 37.313967, + 37.446093, + 37.578248, + 37.71043, + 37.842641, + 37.97488, + 38.107148, + 38.239445, + 38.37177, + 38.504124, + 38.636507, + 38.768918, + 38.901359, + 39.033829, + 39.166327, + 39.298855, + 39.431412, + 39.563998, + 39.696613, + 39.829257, + 39.961931, + 40.094634, + 40.227366, + 40.360127, + 40.492917, + 40.625737, + 40.758585, + 40.891463, + 41.024369, + 41.157304, + 41.290268, + 41.423261, + 41.556282, + 41.689331, + 41.822409, + 41.955515, + 42.08865, + 42.221812, + 42.355003, + 42.488221, + 42.621467, + 42.75474, + 42.888041, + 43.02137, + 43.154726, + 43.288109, + 43.421519, + 43.554956, + 43.688419, + 43.82191, + 43.955427, + 44.088971, + 44.222541, + 44.356138, + 44.489761, + 44.62341, + 44.757085, + 44.890786, + 45.024514, + 45.158267, + 45.292047, + 45.425852, + 45.559683, + 45.69354, + 45.827423, + 45.961332, + 46.095266, + 46.229227, + 46.363213, + 46.497225, + 46.631264, + 46.765328, + 46.899418, + 47.033534, + 47.167676, + 47.301844, + 47.436038, + 47.570259, + 47.704505, + 47.838778, + 47.973077, + 48.107402, + 48.241754, + 48.376132, + 48.510536, + 48.644967, + 48.779425, + 48.913909, + 49.04842, + 49.182957, + 49.317522, + 49.452113, + 49.586731, + 49.721376, + 49.856048, + 49.990747, + 50.125474, + 50.260227, + 50.395008, + 50.529816, + 50.664651, + 50.799513, + 50.934403, + 51.06932, + 51.204264, + 51.339236, + 51.474235, + 51.609261, + 51.744315, + 51.879396, + 52.014504, + 52.14964, + 52.284803, + 52.419993, + 52.555211, + 52.690456, + 52.825728, + 52.961028, + 53.096355, + 53.23171, + 53.367091, + 53.5025, + 53.637936, + 53.773399, + 53.908889, + 54.044406, + 54.17995, + 54.315521, + 54.451119, + 54.586745, + 54.722396, + 54.858075, + 54.993781, + 55.129513, + 55.265272, + 55.401057, + 55.536869, + 55.672708, + 55.808573, + 55.944464, + 56.080382, + 56.216325, + 56.352295, + 56.488291, + 56.624313, + 56.760362, + 56.896436, + 57.032535, + 57.168661, + 57.304812, + 57.44099, + 57.577192, + 57.713421, + 57.849675, + 57.985954, + 58.122259, + 58.25859, + 58.394946, + 58.531327, + 58.667734, + 58.804166, + 58.940623, + 59.077106, + 59.213614, + 59.350148, + 59.486707, + 59.623291, + 59.759901, + 59.896536, + 60.033197, + 60.169883, + 60.306594, + 60.443331, + 60.580093, + 60.716881, + 60.853694, + 60.990532, + 61.127397, + 61.264286, + 61.401202, + 61.538142, + 61.675109, + 61.812101, + 61.949119, + 62.086163, + 62.223233, + 62.360328, + 62.49745, + 62.634598, + 62.771771, + 62.908971, + 63.046197, + 63.18345, + 63.320728, + 63.458033, + 63.595365, + 63.732723, + 63.870107, + 64.007518, + 64.144955, + 64.282419, + 64.41991, + 64.557427, + 64.69497, + 64.832541, + 64.970138, + 65.107761, + 65.245412, + 65.383089, + 65.520793, + 65.658523, + 65.796281, + 65.934065, + 66.071876, + 66.209714, + 66.347579, + 66.485472, + 66.623391, + 66.761337, + 66.89931, + 67.03731, + 67.175337, + 67.313391, + 67.451472, + 67.589581, + 67.727716, + 67.865878, + 68.004068, + 68.142284, + 68.280527, + 68.418798, + 68.557095, + 68.69542, + 68.833772, + 68.97215, + 69.110556, + 69.248989, + 69.38745, + 69.525937, + 69.664452, + 69.802993, + 69.941563, + 70.080159, + 70.218783, + 70.357433, + 70.496112, + 70.634817, + 70.77355, + 70.91231, + 71.051097, + 71.189912, + 71.328754, + 71.467623, + 71.606519, + 71.745443, + 71.884394, + 72.023373, + 72.162378, + 72.301412, + 72.440472, + 72.57956, + 72.718675, + 72.857817, + 72.996987, + 73.136184, + 73.275408, + 73.414659, + 73.553938, + 73.693245, + 73.832578, + 73.971939, + 74.111327, + 74.250743, + 74.390186, + 74.529657, + 74.669154, + 74.808679, + 74.948232, + 75.087812, + 75.227419, + 75.367054, + 75.506716, + 75.646405, + 75.786122, + 75.925866, + 76.065637, + 76.205436, + 76.345262, + 76.485116, + 76.624996, + 76.764905, + 76.90484, + 77.044803, + 77.184794, + 77.324812, + 77.464857, + 77.60493, + 77.745031, + 77.885158, + 78.025314, + 78.165496, + 78.305707, + 78.445945, + 78.58621, + 78.726503, + 78.866823, + 79.007172, + 79.147547, + 79.287951, + 79.428382, + 79.568841, + 79.709328, + 79.849842, + 79.990385, + 80.130955, + 80.271553, + 80.412178, + 80.552832, + 80.693513, + 80.834223, + 80.97496, + 81.115725, + 81.256518, + 81.397339, + 81.538187, + 81.679064, + 81.819968, + 81.9609, + 82.10186, + 82.242848, + 82.383863, + 82.524906, + 82.665978, + 82.807077, + 82.948203, + 83.089358, + 83.23054, + 83.37175, + 83.512988, + 83.654253, + 83.795546, + 83.936867, + 84.078215, + 84.219591, + 84.360994, + 84.502425, + 84.643884, + 84.785369, + 84.926882, + 85.068422, + 85.20999, + 85.351585, + 85.493206, + 85.634855, + 85.776531, + 85.918234, + 86.059964, + 86.20172, + 86.343504, + 86.485314, + 86.627151, + 86.769014, + 86.910905, + 87.052822, + 87.194765, + 87.336735, + 87.478732, + 87.620755, + 87.762805, + 87.904881, + 88.046983, + 88.189112, + 88.331267, + 88.473448, + 88.615656, + 88.75789, + 88.900151, + 89.042438, + 89.184752, + 89.327091, + 89.469458, + 89.611851, + 89.75427, + 89.896716, + 90.039188, + 90.181687, + 90.324213, + 90.466765, + 90.609343, + 90.751949, + 90.894581, + 91.037239, + 91.179924, + 91.322636, + 91.465375, + 91.608141, + 91.750933, + 91.893753, + 92.036599, + 92.179473, + 92.322374, + 92.465302, + 92.608257, + 92.75124, + 92.89425, + 93.037287, + 93.180353, + 93.323446, + 93.466567, + 93.609716, + 93.752893, + 93.896098, + 94.039331, + 94.182592, + 94.325881, + 94.469199, + 94.612545, + 94.75592, + 94.899322, + 95.042754, + 95.186214, + 95.329703, + 95.47322, + 95.616766, + 95.760341, + 95.903944, + 96.047577, + 96.191238, + 96.334928, + 96.478648, + 96.622396, + 96.766174, + 96.90998, + 97.053816, + 97.197681, + 97.341575, + 97.485499, + 97.629451, + 97.773433, + 97.917444, + 98.061484, + 98.205553, + 98.349651, + 98.493778, + 98.637934, + 98.782119, + 98.926332, + 99.070574, + 99.214845, + 99.359145, + 99.503472, + 99.647829, + 99.792213, + 99.936626, + 100.081067, + 100.225536, + 100.370033, + 100.514558, + 100.659111, + 100.803691, + 100.9483, + 101.092936, + 101.2376, + 101.382291, + 101.52701, + 101.671757, + 101.816531, + 101.961332, + 102.10616, + 102.251016, + 102.395898, + 102.540808, + 102.685744, + 102.830708, + 102.975698, + 103.120715, + 103.265759, + 103.41083, + 103.555928, + 103.701052, + 103.846203, + 103.991381, + 104.136586, + 104.281818, + 104.427077, + 104.572362, + 104.717675, + 104.863015, + 105.008383, + 105.153778, + 105.2992, + 105.444649, + 105.590126, + 105.735631, + 105.881164, + 106.026725, + 106.172313, + 106.31793, + 106.463575, + 106.609248, + 106.754949, + 106.900679, + 107.046437, + 107.192224, + 107.33804, + 107.483885, + 107.629758, + 107.77566, + 107.921592, + 108.067553, + 108.213543, + 108.359562, + 108.505612, + 108.65169, + 108.797799, + 108.943937, + 109.090105, + 109.236303, + 109.38253, + 109.528788, + 109.675076, + 109.821394, + 109.967742, + 110.11412, + 110.260527, + 110.406965, + 110.553433, + 110.699931, + 110.846459, + 110.993017, + 111.139605, + 111.286223, + 111.43287, + 111.579547, + 111.726255, + 111.872992, + 112.019758, + 112.166555, + 112.313381, + 112.460236, + 112.607121, + 112.754035, + 112.900979, + 113.047952, + 113.194954, + 113.341985, + 113.489045, + 113.636134, + 113.783252, + 113.930398, + 114.077574, + 114.224777, + 114.37201, + 114.51927, + 114.666559, + 114.813876, + 114.961222, + 115.108596, + 115.255997, + 115.403427, + 115.550885, + 115.698371, + 115.845885, + 115.993427, + 116.140997, + 116.288595, + 116.436221, + 116.583875, + 116.731558, + 116.879268, + 117.027006, + 117.174773, + 117.322567, + 117.470389, + 117.61824, + 117.766118, + 117.914025, + 118.06196, + 118.209923, + 118.357914, + 118.505933, + 118.65398, + 118.802056, + 118.95016, + 119.098293, + 119.246455, + 119.394645, + 119.542864, + 119.691112, + 119.839389, + 119.987695, + 120.136031, + 120.284396, + 120.43279, + 120.581214, + 120.729668, + 120.878152, + 121.026665, + 121.175209, + 121.323783, + 121.472387, + 121.621021, + 121.769686, + 121.918381, + 122.067107, + 122.215863, + 122.36465, + 122.513468, + 122.662316, + 122.811196, + 122.960106, + 123.109047, + 123.25802, + 123.407023, + 123.556057, + 123.705122, + 123.854219, + 124.003346, + 124.152505, + 124.301695, + 124.450915, + 124.600167, + 124.74945, + 124.898764, + 125.048109, + 125.197485, + 125.346891, + 125.496328, + 125.645796, + 125.795295, + 125.944823, + 126.094382, + 126.243971, + 126.39359, + 126.543239, + 126.692918, + 126.842626, + 126.992364, + 127.142131, + 127.291927, + 127.441752, + 127.591605, + 127.741488, + 127.8914, + 128.041339, + 128.191308, + 128.341304, + 128.491329, + 128.641382, + 128.791463, + 128.941572, + 129.091709, + 129.241873, + 129.392065, + 129.542284, + 129.692531, + 129.842805, + 129.993106, + 130.143435, + 130.29379, + 130.444173, + 130.594582, + 130.745019, + 130.895482, + 131.045973, + 131.19649, + 131.347035, + 131.497607, + 131.648206, + 131.798832, + 131.949485, + 132.100166, + 132.250875, + 132.401611, + 132.552375, + 132.703166, + 132.853986, + 133.004834, + 133.15571, + 133.306614, + 133.457547, + 133.608508, + 133.759499, + 133.910518, + 134.061566, + 134.212643, + 134.363749, + 134.514885, + 134.66605, + 134.817245, + 134.96847, + 135.119724, + 135.271008, + 135.422323, + 135.573668, + 135.725043, + 135.876449, + 136.027886, + 136.179353, + 136.330851, + 136.48238, + 136.63394, + 136.785532, + 136.937154, + 137.088808, + 137.240493, + 137.392209, + 137.543957, + 137.695736, + 137.847546, + 137.999388, + 138.15126, + 138.303164, + 138.455099, + 138.607066, + 138.759063, + 138.911091, + 139.063151, + 139.215241, + 139.367362, + 139.519514, + 139.671697, + 139.82391, + 139.976154, + 140.128429, + 140.280733, + 140.433068, + 140.585433, + 140.737828, + 140.890252, + 141.042707, + 141.195191, + 141.347705, + 141.500248, + 141.65282, + 141.805421, + 141.958052, + 142.110711, + 142.263399, + 142.416116, + 142.568862, + 142.721636, + 142.874438, + 143.027268, + 143.180127, + 143.333014, + 143.485929, + 143.638872, + 143.791843, + 143.944842, + 144.097869, + 144.250923, + 144.404006, + 144.557117, + 144.710255, + 144.863421, + 145.016615, + 145.169837, + 145.323087, + 145.476365, + 145.629671, + 145.783004, + 145.936366, + 146.089756, + 146.243174, + 146.39662, + 146.550095, + 146.703598, + 146.857129, + 147.010689, + 147.164278, + 147.317896, + 147.471543, + 147.625219, + 147.778925, + 147.93266, + 148.086424, + 148.240218, + 148.394043, + 148.547897, + 148.701781, + 148.855696, + 149.009641, + 149.163617, + 149.317623, + 149.471661, + 149.625729, + 149.779828, + 149.933959, + 150.088121, + 150.242315, + 150.39654, + 150.550796, + 150.705085, + 150.859405, + 151.013757, + 151.168142, + 151.322558, + 151.477006, + 151.631487, + 151.786, + 151.940545, + 152.095122, + 152.249732, + 152.404374, + 152.559048, + 152.713754, + 152.868492, + 153.023263, + 153.178065, + 153.3329, + 153.487767, + 153.642665, + 153.797595, + 153.952557, + 154.107551, + 154.262576, + 154.417632, + 154.57272, + 154.727839, + 154.882988, + 155.038169, + 155.193381, + 155.348623, + 155.503895, + 155.659199, + 155.814532, + 155.969896, + 156.125289, + 156.280713, + 156.436166, + 156.59165, + 156.747163, + 156.902705, + 157.058277, + 157.213879, + 157.369509, + 157.525169, + 157.680858, + 157.836577, + 157.992324, + 158.1481, + 158.303905, + 158.45974, + 158.615603, + 158.771495, + 158.927416, + 159.083366, + 159.239345, + 159.395354, + 159.551391, + 159.707457, + 159.863553, + 160.019678, + 160.175832, + 160.332015, + 160.488228, + 160.644471, + 160.800743, + 160.957045, + 161.113377, + 161.269739, + 161.426131, + 161.582553, + 161.739005, + 161.895488, + 162.052002, + 162.208547, + 162.365122, + 162.521728, + 162.678366, + 162.835034, + 162.991735, + 163.148467, + 163.305231, + 163.462026, + 163.618854, + 163.775714, + 163.932606, + 164.089531, + 164.246488, + 164.403477, + 164.5605, + 164.717555, + 164.874643, + 165.031764, + 165.188918, + 165.346105, + 165.503325, + 165.660577, + 165.817863, + 165.975182, + 166.132534, + 166.28992, + 166.447338, + 166.604789, + 166.762274, + 166.919791, + 167.077342, + 167.234926, + 167.392542, + 167.550192, + 167.707875, + 167.86559, + 168.023338, + 168.181118, + 168.338932, + 168.496777, + 168.654655, + 168.812565, + 168.970507, + 169.128481, + 169.286486, + 169.444524, + 169.602592, + 169.760692, + 169.918823, + 170.076985, + 170.235178, + 170.393401, + 170.551655, + 170.70994, + 170.868254, + 171.0266, + 171.184975, + 171.34338, + 171.501815, + 171.660279, + 171.818774, + 171.977298, + 172.135851, + 172.294434, + 172.453046, + 172.611687, + 172.770357, + 172.929057, + 173.087785, + 173.246542, + 173.405328, + 173.564143, + 173.722987, + 173.88186, + 174.040761, + 174.199692, + 174.358651, + 174.51764, + 174.676657, + 174.835703, + 174.994779, + 175.153884, + 175.313018, + 175.472181, + 175.631374, + 175.790597, + 175.949849, + 176.109131, + 176.268443, + 176.427785, + 176.587157, + 176.74656, + 176.905993, + 177.065456, + 177.224951, + 177.384476, + 177.544031, + 177.703618, + 177.863236, + 178.022886, + 178.182566, + 178.342278, + 178.502022, + 178.661798, + 178.821606, + 178.981445, + 179.141317, + 179.30122, + 179.461156, + 179.621125, + 179.781125, + 179.941159, + 180.101224, + 180.261322, + 180.421453, + 180.581616, + 180.741812, + 180.902041, + 181.062302, + 181.222595, + 181.382921, + 181.54328, + 181.703671, + 181.864095, + 182.024551, + 182.18504, + 182.345561, + 182.506114, + 182.666699, + 182.827317, + 182.987966, + 183.148648, + 183.309361, + 183.470106, + 183.630883, + 183.791691, + 183.952531, + 184.113402, + 184.274305, + 184.435239, + 184.596204, + 184.757199, + 184.918226, + 185.079284, + 185.240373, + 185.401492, + 185.562642, + 185.723823, + 185.885035, + 186.046278, + 186.207551, + 186.368856, + 186.530191, + 186.691558, + 186.852955, + 187.014384, + 187.175844, + 187.337335, + 187.498858, + 187.660411, + 187.821997, + 187.983613, + 188.145262, + 188.306941, + 188.468653, + 188.630395, + 188.79217, + 188.953976, + 189.115815, + 189.277685, + 189.439586, + 189.60152, + 189.763486, + 189.925485, + 190.087515, + 190.249579, + 190.411675, + 190.573804, + 190.735966, + 190.898161, + 191.06039, + 191.222652, + 191.384948, + 191.547278, + 191.709642, + 191.87204, + 192.034471, + 192.196937, + 192.359438, + 192.521972, + 192.684541, + 192.847144, + 193.009782, + 193.172454, + 193.33516, + 193.497902, + 193.660677, + 193.823488, + 193.986333, + 194.149213, + 194.312129, + 194.475079, + 194.638064, + 194.801084, + 194.96414, + 195.127232, + 195.290358, + 195.453521, + 195.616719, + 195.779953, + 195.943222, + 196.106528, + 196.269869, + 196.433246, + 196.596659, + 196.760108, + 196.923593, + 197.087114, + 197.25067, + 197.414262, + 197.57789, + 197.741554, + 197.905253, + 198.068989, + 198.232759, + 198.396566, + 198.560407, + 198.724285, + 198.888198, + 199.052147, + 199.216131, + 199.38015, + 199.544205, + 199.708295, + 199.87242, + 200.03658, + 200.200776, + 200.365006, + 200.529271, + 200.693571, + 200.857905, + 201.022274, + 201.186677, + 201.351114, + 201.515585, + 201.68009, + 201.844628, + 202.0092, + 202.173806, + 202.338445, + 202.503117, + 202.667823, + 202.832561, + 202.997333, + 203.162137, + 203.326975, + 203.491845, + 203.656748, + 203.821684, + 203.986652, + 204.151654, + 204.316688, + 204.481755, + 204.646855, + 204.811987, + 204.977153, + 205.142352, + 205.307583, + 205.472848, + 205.638146, + 205.803477, + 205.968841, + 206.134239, + 206.29967, + 206.465134, + 206.630632, + 206.796163, + 206.961729, + 207.127328, + 207.292961, + 207.458628, + 207.62433, + 207.790066, + 207.955836, + 208.121642, + 208.287481, + 208.453356, + 208.619266, + 208.78521, + 208.95119, + 209.117205, + 209.283256, + 209.449341, + 209.615462, + 209.781619, + 209.947811, + 210.114038, + 210.280301, + 210.4466, + 210.612934, + 210.779303, + 210.945709, + 211.112149, + 211.278626, + 211.445137, + 211.611685, + 211.778267, + 211.944886, + 212.111539, + 212.278229, + 212.444953, + 212.611713, + 212.778508, + 212.945339, + 213.112204, + 213.279105, + 213.446041, + 213.613012, + 213.780018, + 213.947059, + 214.114134, + 214.281245, + 214.44839, + 214.61557, + 214.782785, + 214.950034, + 215.117318, + 215.284637, + 215.45199, + 215.619378, + 215.786801, + 215.954258, + 216.12175, + 216.289277, + 216.456839, + 216.624435, + 216.792066, + 216.959732, + 217.127434, + 217.29517, + 217.462941, + 217.630747, + 217.798588, + 217.966465, + 218.134376, + 218.302323, + 218.470305, + 218.638323, + 218.806376, + 218.974464, + 219.142588, + 219.310747, + 219.478942, + 219.647173, + 219.815439, + 219.983742, + 220.15208, + 220.320454, + 220.488864, + 220.65731, + 220.825792, + 220.99431, + 221.162865, + 221.331456, + 221.500083, + 221.668746, + 221.837446, + 222.006183, + 222.174955, + 222.343765, + 222.512611, + 222.681493, + 222.850413, + 223.019369, + 223.188362, + 223.357391, + 223.526458, + 223.695561, + 223.864701, + 224.033878, + 224.203092, + 224.372344, + 224.541632, + 224.710957, + 224.88032, + 225.04972, + 225.219157, + 225.388631, + 225.558143, + 225.727692, + 225.897279, + 226.066903, + 226.236565, + 226.406264, + 226.576, + 226.745774, + 226.915586, + 227.085435, + 227.255322, + 227.425246, + 227.595208, + 227.765207, + 227.935244, + 228.105319, + 228.275431, + 228.44558, + 228.615768, + 228.785992, + 228.956255, + 229.126555, + 229.296892, + 229.467267, + 229.63768, + 229.808129, + 229.978617, + 230.149141, + 230.319703, + 230.490303, + 230.660939, + 230.831613, + 231.002323, + 231.173071, + 231.343856, + 231.514678, + 231.685537, + 231.856433, + 232.027366, + 232.198336, + 232.369343, + 232.540387, + 232.711468, + 232.882585, + 233.05374, + 233.224931, + 233.396159, + 233.567424, + 233.738726, + 233.910065, + 234.081441, + 234.252853, + 234.424302, + 234.595788, + 234.767311, + 234.938871, + 235.110467, + 235.2821, + 235.45377, + 235.625477, + 235.797221, + 235.969002, + 236.14082, + 236.312674, + 236.484566, + 236.656495, + 236.828461, + 237.000465, + 237.172505, + 237.344584, + 237.516699, + 237.688852, + 237.861043, + 238.033271, + 238.205537, + 238.377841, + 238.550183, + 238.722563, + 238.89498, + 239.067436, + 239.23993, + 239.412462, + 239.585032, + 239.757641, + 239.930287, + 240.102972, + 240.275696, + 240.448458, + 240.621258, + 240.794097, + 240.966974, + 241.13989, + 241.312844, + 241.485837, + 241.658869, + 241.83194, + 242.005049, + 242.178198, + 242.351385, + 242.524611, + 242.697877, + 242.871181, + 243.044525, + 243.217908, + 243.39133, + 243.564791, + 243.738292, + 243.911832, + 244.085411, + 244.25903, + 244.432688, + 244.606385, + 244.780122, + 244.953898, + 245.127714, + 245.301569, + 245.475464, + 245.649398, + 245.823372, + 245.997385, + 246.171438, + 246.345531, + 246.519664, + 246.693836, + 246.868049, + 247.042301, + 247.216593, + 247.390925, + 247.565297, + 247.73971, + 247.914162, + 248.088655, + 248.263188, + 248.437761, + 248.612374, + 248.787028, + 248.961722, + 249.136457, + 249.311232, + 249.486047, + 249.660903, + 249.835799, + 250.010736, + 250.185713, + 250.36073, + 250.535789, + 250.710887, + 250.886027, + 251.061206, + 251.236427, + 251.411688, + 251.58699, + 251.762333, + 251.937716, + 252.11314, + 252.288604, + 252.46411, + 252.639656, + 252.815243, + 252.99087, + 253.166539, + 253.342248, + 253.517998, + 253.693788, + 253.86962, + 254.045492, + 254.221404, + 254.397358, + 254.573352, + 254.749387, + 254.925462, + 255.101579, + 255.277736, + 255.453933, + 255.630172, + 255.806451, + 255.98277, + 256.159131, + 256.335532, + 256.511974, + 256.688457, + 256.86498, + 257.041545, + 257.21815, + 257.394796, + 257.571483, + 257.748211, + 257.92498, + 258.101789, + 258.27864, + 258.455532, + 258.632465, + 258.809439, + 258.986454, + 259.163511, + 259.340608, + 259.517747, + 259.694928, + 259.872149, + 260.049412, + 260.226716, + 260.404062, + 260.58145, + 260.758879, + 260.93635, + 261.113862, + 261.291417, + 261.469013, + 261.646651, + 261.824331, + 262.002053, + 262.179817, + 262.357624, + 262.535472, + 262.713363, + 262.891296, + 263.069272, + 263.24729, + 263.42535, + 263.603453, + 263.781599, + 263.959787, + 264.138018, + 264.316292, + 264.494608, + 264.672967, + 264.851369, + 265.029814, + 265.208302, + 265.386833, + 265.565407, + 265.744025, + 265.922685, + 266.101388, + 266.280135, + 266.458925, + 266.637759, + 266.816635, + 266.995555, + 267.174519, + 267.353526, + 267.532576, + 267.71167, + 267.890807, + 268.069988, + 268.249212, + 268.42848, + 268.607791, + 268.787146, + 268.966544, + 269.145986, + 269.325471, + 269.505, + 269.684573, + 269.864189, + 270.043848, + 270.223551, + 270.403298, + 270.583088, + 270.762921, + 270.942799, + 271.122719, + 271.302684, + 271.482692, + 271.662743, + 271.842838, + 272.022977, + 272.203159, + 272.383384, + 272.563653, + 272.743966, + 272.924322, + 273.104722, + 273.285165, + 273.465652, + 273.646183, + 273.826757, + 274.007374, + 274.188036, + 274.368741, + 274.549489, + 274.730281, + 274.911117, + 275.091997, + 275.272921, + 275.453888, + 275.6349, + 275.815955, + 275.997054, + 276.178197, + 276.359385, + 276.540616, + 276.721892, + 276.903212, + 277.084576, + 277.265985, + 277.447438, + 277.628936, + 277.810478, + 277.992065, + 278.173697, + 278.355374, + 278.537095, + 278.718862, + 278.900674, + 279.082531, + 279.264433, + 279.446381, + 279.628374, + 279.810413, + 279.992497, + 280.174627, + 280.356802, + 280.539024, + 280.721291, + 280.903604, + 281.085963, + 281.268368, + 281.450819, + 281.633316, + 281.815859, + 281.998449, + 282.181084, + 282.363766, + 282.546494, + 282.729268, + 282.912089, + 283.094956, + 283.277869, + 283.460828, + 283.643834, + 283.826886, + 284.009984, + 284.193128, + 284.376319, + 284.559556, + 284.742839, + 284.926168, + 285.109544, + 285.292965, + 285.476433, + 285.659946, + 285.843506, + 286.027111, + 286.210762, + 286.394459, + 286.578202, + 286.761991, + 286.945825, + 287.129705, + 287.31363, + 287.497601, + 287.681618, + 287.86568, + 288.049787, + 288.233939, + 288.418137, + 288.602381, + 288.786669, + 288.971003, + 289.155382, + 289.339806, + 289.524275, + 289.70879, + 289.893349, + 290.077954, + 290.262604, + 290.447299, + 290.63204, + 290.816825, + 291.001656, + 291.186532, + 291.371454, + 291.556421, + 291.741433, + 291.92649, + 292.111594, + 292.296742, + 292.481937, + 292.667177, + 292.852462, + 293.037794, + 293.223171, + 293.408595, + 293.594065, + 293.77958, + 293.965142, + 294.150751, + 294.336406, + 294.522107, + 294.707856, + 294.893651, + 295.079492, + 295.265381, + 295.451317, + 295.6373, + 295.823331, + 296.009409, + 296.195534, + 296.381708, + 296.567928, + 296.754197, + 296.940514, + 297.126879, + 297.313292, + 297.499753, + 297.686262, + 297.87282, + 298.059426, + 298.246081, + 298.432785, + 298.619537, + 298.806338, + 298.993188, + 299.180086, + 299.367034, + 299.554031, + 299.741077, + 299.928171, + 300.115315, + 300.302509, + 300.489751, + 300.677043, + 300.864384, + 301.051774, + 301.239214, + 301.426703, + 301.614241, + 301.801828, + 301.989465, + 302.177151, + 302.364887, + 302.552671, + 302.740505, + 302.928388, + 303.11632, + 303.304302, + 303.492332, + 303.680412, + 303.86854, + 304.056718, + 304.244945, + 304.433221, + 304.621546, + 304.80992, + 304.998343, + 305.186816, + 305.375337, + 305.563907, + 305.752526, + 305.941194, + 306.129911, + 306.318677, + 306.507493, + 306.696357, + 306.885271, + 307.074234, + 307.263246, + 307.452308, + 307.64142, + 307.830581, + 308.019792, + 308.209053, + 308.398364, + 308.587726, + 308.777138, + 308.966601, + 309.156114, + 309.345678, + 309.535293, + 309.72496, + 309.914677, + 310.104446, + 310.294267, + 310.48414, + 310.674064, + 310.864041, + 311.05407, + 311.244152, + 311.434286, + 311.624473, + 311.814714, + 312.005007, + 312.195353, + 312.385753, + 312.576207, + 312.766714, + 312.957274, + 313.147889, + 313.338558, + 313.529282, + 313.720059, + 313.910892, + 314.101779, + 314.29272, + 314.483717, + 314.674769, + 314.865876, + 315.057039, + 315.248256, + 315.439529, + 315.630858, + 315.822242, + 316.013682, + 316.205177, + 316.396728, + 316.588335, + 316.779997, + 316.971716, + 317.16349, + 317.35532, + 317.547206, + 317.739148, + 317.931146, + 318.1232, + 318.31531, + 318.507476, + 318.699698, + 318.891976, + 319.084311, + 319.276702, + 319.469149, + 319.661652, + 319.854211, + 320.046827, + 320.239498, + 320.432226, + 320.62501, + 320.81785, + 321.010746, + 321.203699, + 321.396707, + 321.589771, + 321.782892, + 321.976069, + 322.169301, + 322.36259, + 322.555935, + 322.749335, + 322.942792, + 323.136304, + 323.329872, + 323.523496, + 323.717175, + 323.91091, + 324.104701, + 324.298547, + 324.492448, + 324.686405, + 324.880417, + 325.074484, + 325.268606, + 325.462783, + 325.657016, + 325.851303, + 326.045646, + 326.240043, + 326.434496, + 326.629003, + 326.823566, + 327.018183, + 327.212856, + 327.407583, + 327.602366, + 327.797203, + 327.992095, + 328.187043, + 328.382045, + 328.577102, + 328.772214, + 328.967382, + 329.162604, + 329.357882, + 329.553216, + 329.748604, + 329.944048, + 330.139548, + 330.335104, + 330.530715, + 330.726382, + 330.922106, + 331.117885, + 331.313721, + 331.509614, + 331.705563, + 331.901569, + 332.097632, + 332.293752, + 332.489929, + 332.686163, + 332.882454, + 333.078803, + 333.27521, + 333.471674, + 333.668195, + 333.864775, + 334.061412, + 334.258107, + 334.45486, + 334.651671, + 334.84854, + 335.045466, + 335.242451, + 335.439494, + 335.636596, + 335.833755, + 336.030972, + 336.228248, + 336.425581, + 336.622973, + 336.820423, + 337.01793, + 337.215496, + 337.41312, + 337.610801, + 337.808541, + 338.006338, + 338.204192, + 338.402105, + 338.600075, + 338.798102, + 338.996187, + 339.194329, + 339.392528, + 339.590785, + 339.789099, + 339.98747, + 340.185898, + 340.384383, + 340.582925, + 340.781524, + 340.98018, + 341.178893, + 341.377663, + 341.57649, + 341.775374, + 341.974315, + 342.173313, + 342.372369, + 342.571481, + 342.770651, + 342.969878, + 343.169163, + 343.368504, + 343.567904, + 343.767361, + 343.966875, + 344.166447, + 344.366077, + 344.565765, + 344.765511, + 344.965316, + 345.165178, + 345.365099, + 345.565079, + 345.765117, + 345.965215, + 346.165371, + 346.365586, + 346.565861, + 346.766196, + 346.96659, + 347.167044, + 347.367558, + 347.568133, + 347.768767, + 347.969462, + 348.170218, + 348.371035, + 348.571912, + 348.772851, + 348.973851, + 349.174912, + 349.376035, + 349.57722, + 349.778466, + 349.979774, + 350.181145, + 350.382578, + 350.584073, + 350.78563, + 350.98725, + 351.188933, + 351.390679, + 351.592488, + 351.79436, + 351.996295, + 352.198294, + 352.400356, + 352.602482, + 352.804671, + 353.006924, + 353.209241, + 353.411621, + 353.614066, + 353.816575, + 354.019147, + 354.221784, + 354.424485, + 354.627251, + 354.83008, + 355.032974, + 355.235933, + 355.438955, + 355.642043, + 355.845194, + 356.04841, + 356.251691, + 356.455036, + 356.658446, + 356.86192, + 357.065459, + 357.269063, + 357.472731, + 357.676464, + 357.880261, + 358.084123, + 358.288049, + 358.492039, + 358.696095, + 358.900214, + 359.104398, + 359.308647, + 359.512959, + 359.717336, + 359.921778, + 0.126283, + 0.330853, + 0.535487, + 0.740186, + 0.944948, + 1.149775, + 1.354666, + 1.559622, + 1.764641, + 1.969725, + 2.174873, + 2.380086, + 2.585362, + 2.790703, + 2.996109, + 3.201578, + 3.407113, + 3.612711, + 3.818375, + 4.024102, + 4.229895, + 4.435752, + 4.641674, + 4.847661, + 5.053713, + 5.25983, + 5.466012, + 5.67226, + 5.878573, + 6.084951, + 6.291396, + 6.497906, + 6.704483, + 6.911125, + 7.117834, + 7.32461, + 7.531452, + 7.738361, + 7.945336, + 8.152379, + 8.359489, + 8.566667, + 8.773912, + 8.981225, + 9.188606, + 9.396055, + 9.603572, + 9.811157, + 10.018811, + 10.226534, + 10.434325, + 10.642185, + 10.850114, + 11.058112, + 11.26618, + 11.474317, + 11.682523, + 11.890799, + 12.099145, + 12.307561, + 12.516047, + 12.724603, + 12.933228, + 13.141924, + 13.350691, + 13.559527, + 13.768434, + 13.977411, + 14.186459, + 14.395577, + 14.604765, + 14.814024, + 15.023354, + 15.232754, + 15.442225, + 15.651766, + 15.861378, + 16.071061, + 16.280815, + 16.490639, + 16.700534, + 16.9105, + 17.120536, + 17.330644, + 17.540822, + 17.751072, + 17.961392, + 18.171784, + 18.382246, + 18.59278, + 18.803385, + 19.01406, + 19.224807, + 19.435626, + 19.646515, + 19.857476, + 20.068509, + 20.279613, + 20.490788, + 20.702036, + 20.913354, + 21.124745, + 21.336208, + 21.547742, + 21.759349, + 21.971028, + 22.182779, + 22.394602, + 22.606498, + 22.818467, + 23.030509, + 23.242623, + 23.45481, + 23.66707, + 23.879404, + 24.09181, + 24.30429, + 24.516844, + 24.729471, + 24.942172, + 25.154947, + 25.367796, + 25.580718, + 25.793715, + 26.006787, + 26.219933, + 26.433153, + 26.646448, + 26.859818, + 27.073262, + 27.286782, + 27.500377, + 27.714047, + 27.927792, + 28.141613, + 28.355509, + 28.569481, + 28.783529, + 28.997652, + 29.211852, + 29.426127, + 29.640479, + 29.854907, + 30.069411, + 30.283991, + 30.498648, + 30.713382, + 30.928192, + 31.14308, + 31.358043, + 31.573084, + 31.788202, + 32.003397, + 32.21867, + 32.434019, + 32.649446, + 32.86495, + 33.080532, + 33.296192, + 33.511929, + 33.727743, + 33.943636, + 34.159606, + 34.375655, + 34.591781, + 34.807985, + 35.024267, + 35.240628, + 35.457066, + 35.673583, + 35.890178, + 36.106851, + 36.323603, + 36.540433, + 36.757341, + 36.974328, + 37.191394, + 37.408538, + 37.62576, + 37.843061, + 38.060441, + 38.277899, + 38.495437, + 38.713053, + 38.930747, + 39.148521, + 39.366373, + 39.584305, + 39.802315, + 40.020404, + 40.238573, + 40.45682, + 40.675147, + 40.893552, + 41.112037, + 41.330601, + 41.549245, + 41.767967, + 41.98677, + 42.205652, + 42.424613, + 42.643654, + 42.862775, + 43.081976, + 43.301256, + 43.520617, + 43.740058, + 43.959579, + 44.17918, + 44.398862, + 44.618625, + 44.838468, + 45.058392, + 45.278397, + 45.498482, + 45.718649, + 45.938897, + 46.159227, + 46.379638, + 46.600131, + 46.820705, + 47.041361, + 47.2621, + 47.48292, + 47.703823, + 47.924808, + 48.145876, + 48.367026, + 48.588259, + 48.809575, + 49.030974, + 49.252457, + 49.474022, + 49.695671, + 49.917404, + 50.13922, + 50.361121, + 50.583105, + 50.805173, + 51.027325, + 51.249562, + 51.471883, + 51.694288, + 51.916778, + 52.139353, + 52.362012, + 52.584756, + 52.807586, + 53.0305, + 53.253499, + 53.476584, + 53.699754, + 53.923009, + 54.14635, + 54.369776, + 54.593288, + 54.816886, + 55.040569, + 55.264339, + 55.488194, + 55.712135, + 55.936162, + 56.160276, + 56.384476, + 56.608762, + 56.833134, + 57.057593, + 57.282138, + 57.50677, + 57.731489, + 57.956294, + 58.181186, + 58.406165, + 58.631232, + 58.856385, + 59.081625, + 59.306952, + 59.532367, + 59.757869, + 59.983459, + 60.209136, + 60.4349, + 60.660753, + 60.886693, + 61.112721, + 61.338838, + 61.565042, + 61.791335, + 62.017716, + 62.244185, + 62.470743, + 62.69739, + 62.924126, + 63.15095, + 63.377864, + 63.604867, + 63.831959, + 64.059141, + 64.286413, + 64.513775, + 64.741226, + 64.968768, + 65.1964, + 65.424123, + 65.651936, + 65.87984, + 66.107836, + 66.335922, + 66.5641, + 66.792369, + 67.02073, + 67.249183, + 67.477728, + 67.706366, + 67.935095, + 68.163917, + 68.392833, + 68.621841, + 68.850942, + 69.080137, + 69.309426, + 69.538809, + 69.768285, + 69.997857, + 70.227523, + 70.457283, + 70.687139, + 70.91709, + 71.147137, + 71.377279, + 71.607517, + 71.837851, + 72.068282, + 72.298808, + 72.529432, + 72.760152, + 72.990969, + 73.221883, + 73.452895, + 73.684004, + 73.915211, + 74.146515, + 74.377918, + 74.609419, + 74.841019, + 75.072717, + 75.304514, + 75.536411, + 75.768406, + 76.0005, + 76.232693, + 76.464986, + 76.697378, + 76.929869, + 77.16246, + 77.395151, + 77.627941, + 77.860831, + 78.093822, + 78.326912, + 78.560102, + 78.793393, + 79.026785, + 79.260277, + 79.493871, + 79.727565, + 79.961362, + 80.195259, + 80.429258, + 80.66336, + 80.897563, + 81.131868, + 81.366276, + 81.600786, + 81.835398, + 82.070114, + 82.304931, + 82.539852, + 82.774876, + 83.010002, + 83.245232, + 83.480565, + 83.716001, + 83.951541, + 84.187185, + 84.422933, + 84.658784, + 84.89474, + 85.130801, + 85.366965, + 85.603235, + 85.83961, + 86.076089, + 86.312674, + 86.549364, + 86.78616, + 87.02306, + 87.260067, + 87.497179, + 87.734397, + 87.97172, + 88.20915, + 88.446685, + 88.684325, + 88.922072, + 89.159924, + 89.397883, + 89.635947, + 89.874117, + 90.112393, + 90.350774, + 90.589262, + 90.827856, + 91.066555, + 91.305361, + 91.544273, + 91.783291, + 92.022416, + 92.261646, + 92.500983, + 92.740427, + 92.979977, + 93.219633, + 93.459395, + 93.699264, + 93.93924, + 94.179322, + 94.419511, + 94.659806, + 94.900207, + 95.140715, + 95.38133, + 95.622052, + 95.86288, + 96.103815, + 96.344857, + 96.586007, + 96.827263, + 97.068627, + 97.310098, + 97.551678, + 97.793364, + 98.035159, + 98.277062, + 98.519074, + 98.761193, + 99.003422, + 99.245759, + 99.488205, + 99.73076, + 99.973424, + 100.216197, + 100.45908, + 100.702072, + 100.945174, + 101.188385, + 101.431707, + 101.675138, + 101.91868, + 102.162331, + 102.406093, + 102.649965, + 102.893948, + 103.138041, + 103.382246, + 103.626561, + 103.870987, + 104.115524, + 104.360173, + 104.604933, + 104.849804, + 105.094787, + 105.339882, + 105.585089, + 105.830407, + 106.075838, + 106.32138, + 106.567034, + 106.812801, + 107.05868, + 107.304671, + 107.550774, + 107.79699, + 108.043318, + 108.289758, + 108.536312, + 108.782978, + 109.029756, + 109.276648, + 109.523652, + 109.77077, + 110.018001, + 110.265345, + 110.512802, + 110.760373, + 111.008058, + 111.255856, + 111.503768, + 111.751795, + 111.999935, + 112.24819, + 112.496559, + 112.745043, + 112.993641, + 113.242354, + 113.491182, + 113.740125, + 113.989183, + 114.238357, + 114.487646, + 114.73705, + 114.986571, + 115.236207, + 115.48596, + 115.735828, + 115.985813, + 116.235915, + 116.486134, + 116.73647, + 116.986922, + 117.237493, + 117.488181, + 117.738986, + 117.98991, + 118.240951, + 118.492112, + 118.74339, + 118.994787, + 119.246304, + 119.497939, + 119.749694, + 120.001568, + 120.253562, + 120.505675, + 120.757909, + 121.010263, + 121.262738, + 121.515333, + 121.76805, + 122.020887, + 122.273846, + 122.526927, + 122.780129, + 123.033454, + 123.286901, + 123.54047, + 123.794162, + 124.047977, + 124.301916, + 124.555977, + 124.810163, + 125.064472, + 125.318905, + 125.573463, + 125.828145, + 126.082951, + 126.337883, + 126.592939, + 126.848121, + 127.103428, + 127.35886, + 127.614419, + 127.870103, + 128.125914, + 128.381851, + 128.637914, + 128.894104, + 129.150421, + 129.406865, + 129.663436, + 129.920134, + 130.176959, + 130.433912, + 130.690992, + 130.9482, + 131.205536, + 131.463, + 131.720591, + 131.978311, + 132.236159, + 132.494135, + 132.752239, + 133.010471, + 133.268832, + 133.527321, + 133.785939, + 134.044685, + 134.30356, + 134.562564, + 134.821696, + 135.080957, + 135.340346, + 135.599865, + 135.859513, + 136.119289, + 136.379195, + 136.63923, + 136.899394, + 137.159687, + 137.42011, + 137.680662, + 137.941343, + 138.202154, + 138.463095, + 138.724165, + 138.985366, + 139.246696, + 139.508156, + 139.769747, + 140.031467, + 140.293319, + 140.5553, + 140.817413, + 141.079656, + 141.342031, + 141.604536, + 141.867173, + 142.129942, + 142.392842, + 142.655874, + 142.919039, + 143.182336, + 143.445765, + 143.709327, + 143.973022, + 144.23685, + 144.500811, + 144.764907, + 145.029136, + 145.293499, + 145.557996, + 145.822628, + 146.087395, + 146.352297, + 146.617334, + 146.882507, + 147.147815, + 147.413259, + 147.67884, + 147.944556, + 148.21041, + 148.4764, + 148.742527, + 149.008792, + 149.275194, + 149.541733, + 149.808411, + 150.075226, + 150.34218, + 150.609272, + 150.876503, + 151.143872, + 151.411381, + 151.679028, + 151.946815, + 152.214741, + 152.482807, + 152.751013, + 153.019359, + 153.287845, + 153.556471, + 153.825237, + 154.094144, + 154.363191, + 154.63238, + 154.901709, + 155.171179, + 155.440791, + 155.710543, + 155.980438, + 156.250473, + 156.520651, + 156.79097, + 157.061431, + 157.332034, + 157.602779, + 157.873666, + 158.144695, + 158.415867, + 158.687181, + 158.958638, + 159.230238, + 159.50198, + 159.773866, + 160.045894, + 160.318066, + 160.590381, + 160.862839, + 161.13544, + 161.408186, + 161.681075, + 161.954108, + 162.227284, + 162.500605, + 162.77407, + 163.04768, + 163.321434, + 163.595332, + 163.869375, + 164.143563, + 164.417896, + 164.692374, + 164.966998, + 165.241767, + 165.516681, + 165.791741, + 166.066947, + 166.342298, + 166.617796, + 166.89344, + 167.169231, + 167.445168, + 167.721252, + 167.997483, + 168.273861, + 168.550386, + 168.827059, + 169.103879, + 169.380847, + 169.657963, + 169.935227, + 170.212639, + 170.4902, + 170.767909, + 171.045767, + 171.323774, + 171.60193, + 171.880235, + 172.15869, + 172.437294, + 172.716047, + 172.994951, + 173.274004, + 173.553208, + 173.832561, + 174.112065, + 174.39172, + 174.671525, + 174.95148, + 175.231586, + 175.511843, + 175.792251, + 176.072809, + 176.353519, + 176.634379, + 176.91539, + 177.196553, + 177.477866, + 177.75933, + 178.040945, + 178.322712, + 178.604629, + 178.886697, + 179.168915, + 179.451285, + 179.733805, + 180.016476, + 180.299298, + 180.58227, + 180.865393, + 181.148666, + 181.43209, + 181.715664, + 181.999389, + 182.283265, + 182.567291, + 182.851467, + 183.135794, + 183.420272, + 183.704901, + 183.98968, + 184.27461, + 184.559691, + 184.844924, + 185.130308, + 185.415843, + 185.70153, + 185.987369, + 186.27336, + 186.559503, + 186.845799, + 187.132248, + 187.41885, + 187.705605, + 187.992514, + 188.279577, + 188.566795, + 188.854167, + 189.141695, + 189.429378, + 189.717218, + 190.005213, + 190.293366, + 190.581676, + 190.870144, + 191.158769, + 191.447553, + 191.736495, + 192.025597, + 192.314857, + 192.604278, + 192.893858, + 193.183598, + 193.473499, + 193.76356, + 194.053783, + 194.344167, + 194.634713, + 194.925421, + 195.21629, + 195.507323, + 195.798518, + 196.089875, + 196.381396, + 196.67308, + 196.964927, + 197.256938, + 197.549112, + 197.841451, + 198.133953, + 198.42662, + 198.719451, + 199.012446, + 199.305606, + 199.598931, + 199.89242, + 200.186075, + 200.479895, + 200.77388, + 201.068031, + 201.362347, + 201.656829, + 201.951478, + 202.246292, + 202.541274, + 202.836421, + 203.131736, + 203.427217, + 203.722866, + 204.018682, + 204.314666, + 204.610817, + 204.907136, + 205.203624, + 205.50028, + 205.797105, + 206.094099, + 206.391263, + 206.688596, + 206.986099, + 207.283773, + 207.581618, + 207.879634, + 208.177821, + 208.47618, + 208.774711, + 209.073414, + 209.37229, + 209.671339, + 209.97056, + 210.269955, + 210.569523, + 210.869265, + 211.16918, + 211.469269, + 211.769532, + 212.069969, + 212.37058, + 212.671366, + 212.972326, + 213.273461, + 213.57477, + 213.876254, + 214.177913, + 214.479747, + 214.781756, + 215.08394, + 215.386299, + 215.688833, + 215.991542, + 216.294426, + 216.597486, + 216.900721, + 217.204131, + 217.507716, + 217.811476, + 218.115412, + 218.419523, + 218.723809, + 219.028271, + 219.332908, + 219.63772, + 219.942708, + 220.247872, + 220.553212, + 220.858727, + 221.164418, + 221.470286, + 221.77633, + 222.082551, + 222.388948, + 222.695523, + 223.002274, + 223.309203, + 223.616309, + 223.923593, + 224.231055, + 224.538695, + 224.846513, + 225.15451, + 225.462685, + 225.771039, + 226.079572, + 226.388284, + 226.697176, + 227.006247, + 227.315498, + 227.624929, + 227.93454, + 228.244332, + 228.554304, + 228.864456, + 229.17479, + 229.485304, + 229.795999, + 230.106875, + 230.417933, + 230.729171, + 231.040591, + 231.352193, + 231.663975, + 231.975939, + 232.288085, + 232.600411, + 232.91292, + 233.22561, + 233.538481, + 233.851534, + 234.164768, + 234.478184, + 234.791782, + 235.105561, + 235.419522, + 235.733665, + 236.047989, + 236.362495, + 236.677184, + 236.992053, + 237.307105, + 237.622339, + 237.937755, + 238.253353, + 238.569134, + 238.885097, + 239.201242, + 239.51757, + 239.83408, + 240.150774, + 240.46765, + 240.78471, + 241.101953, + 241.41938, + 241.736991, + 242.054786, + 242.372765, + 242.690928, + 243.009277, + 243.32781, + 243.646529, + 243.965434, + 244.284524, + 244.6038, + 244.923263, + 245.242912, + 245.562749, + 245.882772, + 246.202983, + 246.523381, + 246.843967, + 247.16474, + 247.485703, + 247.806853, + 248.128192, + 248.44972, + 248.771436, + 249.093342, + 249.415437, + 249.737722, + 250.060196, + 250.38286, + 250.705714, + 251.028758, + 251.351992, + 251.675417, + 251.999032, + 252.322838, + 252.646835, + 252.971022, + 253.295401, + 253.619971, + 253.944732, + 254.269685, + 254.594829, + 254.920165, + 255.245693, + 255.571412, + 255.897324, + 256.223428, + 256.549723, + 256.876212, + 257.202893, + 257.529766, + 257.856832, + 258.184092, + 258.511544, + 258.83919, + 259.16703, + 259.495063, + 259.82329, + 260.151711, + 260.480327, + 260.809137, + 261.138143, + 261.467343, + 261.796738, + 262.126329, + 262.456116, + 262.786099, + 263.116278, + 263.446653, + 263.777225, + 264.107994, + 264.43896, + 264.770123, + 265.101484, + 265.433042, + 265.764799, + 266.096754, + 266.428907, + 266.761259, + 267.09381, + 267.426559, + 267.759509, + 268.092657, + 268.426006, + 268.759554, + 269.093302, + 269.427251, + 269.7614, + 270.09575, + 270.4303, + 270.765051, + 271.100003, + 271.435157, + 271.770511, + 272.106067, + 272.441824, + 272.777783, + 273.113943, + 273.450306, + 273.78687, + 274.123636, + 274.460604, + 274.797775, + 275.135148, + 275.472723, + 275.810501, + 276.148482, + 276.486666, + 276.825053, + 277.163643, + 277.502436, + 277.841433, + 278.180633, + 278.520037, + 278.859645, + 279.199457, + 279.539473, + 279.879693, + 280.220117, + 280.560746, + 280.901579, + 281.242617, + 281.58386, + 281.925307, + 282.26696, + 282.608818, + 282.95088, + 283.293149, + 283.635622, + 283.978302, + 284.321187, + 284.664278, + 285.007575, + 285.351078, + 285.694787, + 286.038703, + 286.382825, + 286.727154, + 287.071689, + 287.416431, + 287.761379, + 288.106535, + 288.451897, + 288.797466, + 289.143242, + 289.489225, + 289.835414, + 290.181811, + 290.528415, + 290.875226, + 291.222244, + 291.569469, + 291.916901, + 292.26454, + 292.612386, + 292.960439, + 293.308699, + 293.657167, + 294.005841, + 294.354722, + 294.703811, + 295.053106, + 295.402608, + 295.752317, + 296.102233, + 296.452356, + 296.802685, + 297.153221, + 297.503964, + 297.854913, + 298.206068, + 298.557429, + 298.908997, + 299.26077, + 299.61275, + 299.964935, + 300.317326, + 300.669922, + 301.022724, + 301.375731, + 301.728944, + 302.082362, + 302.435986, + 302.789816, + 303.143851, + 303.498092, + 303.852539, + 304.207193, + 304.562053, + 304.917121, + 305.272395, + 305.627878, + 305.983569, + 306.339469, + 306.695578, + 307.051896, + 307.408425, + 307.765164, + 308.122115, + 308.479277, + 308.836652, + 309.194239, + 309.55204, + 309.910054, + 310.268283, + 310.626726, + 310.985385, + 311.344259, + 311.703349, + 312.062656, + 312.42218, + 312.781921, + 313.14188, + 313.502057, + 313.862453, + 314.223067, + 314.583901, + 314.944955, + 315.306228, + 315.667723, + 316.029437, + 316.391373, + 316.753529, + 317.115907, + 317.478506, + 317.841326, + 318.204368, + 318.56763, + 318.931113, + 319.294818, + 319.658743, + 320.022889, + 320.387256, + 320.751844, + 321.116651, + 321.48168, + 321.846929, + 322.212398, + 322.578087, + 322.943997, + 323.310126, + 323.676476, + 324.043046, + 324.409836, + 324.776846, + 325.144076, + 325.511526, + 325.879197, + 326.247087, + 326.615198, + 326.98353, + 327.352082, + 327.720855, + 328.08985, + 328.459067, + 328.828505, + 329.198166, + 329.568049, + 329.938155, + 330.308484, + 330.679038, + 331.049815, + 331.420817, + 331.792044, + 332.163497, + 332.535175, + 332.907081, + 333.279214, + 333.651574, + 334.024163, + 334.396981, + 334.770028, + 335.143305, + 335.516813, + 335.890551, + 336.264521, + 336.638723, + 337.013156, + 337.387822, + 337.762721, + 338.137853, + 338.513218, + 338.888816, + 339.264648, + 339.640713, + 340.017012, + 340.393545, + 340.770312, + 341.147312, + 341.524547, + 341.902015, + 342.279717, + 342.657652, + 343.035822, + 343.414224, + 343.792861, + 344.17173, + 344.550833, + 344.930169, + 345.309738, + 345.68954, + 346.069574, + 346.449841, + 346.83034, + 347.211072, + 347.592036, + 347.973232, + 348.354661, + 348.736321, + 349.118213, + 349.500337, + 349.882694, + 350.265282, + 350.648102, + 351.031155, + 351.41444, + 351.797957, + 352.181707, + 352.565689, + 352.949905, + 353.334353, + 353.719035, + 354.10395, + 354.489099, + 354.874482, + 355.260099, + 355.645951, + 356.032037, + 356.418358, + 356.804914, + 357.191705, + 357.578731, + 357.965994, + 358.353492, + 358.741226, + 359.129197, + 359.517404, + 359.905848, + 0.294529, + 0.683447, + 1.072602, + 1.461994, + 1.851623, + 2.24149, + 2.631594, + 3.021936, + 3.412515, + 3.803331, + 4.194385, + 4.585676, + 4.977205, + 5.36897, + 5.760973, + 6.153213, + 6.54569, + 6.938404, + 7.331356, + 7.724544, + 8.117969, + 8.51163, + 8.905529, + 9.299665, + 9.694037, + 10.088647, + 10.483493, + 10.878577, + 11.273898, + 11.669456, + 12.065251, + 12.461284, + 12.857555, + 13.254064, + 13.650811, + 14.047795, + 14.445019, + 14.842481, + 15.240181, + 15.638121, + 16.0363, + 16.434718, + 16.833377, + 17.232275, + 17.631414, + 18.030793, + 18.430413, + 18.830274, + 19.230377, + 19.630721, + 20.031307, + 20.432136, + 20.833206, + 21.23452, + 21.636076, + 22.037875, + 22.439917, + 22.842203, + 23.244732, + 23.647505, + 24.050522, + 24.453782, + 24.857287, + 25.261035, + 25.665028, + 26.069264, + 26.473745, + 26.87847, + 27.283439, + 27.688652, + 28.09411, + 28.499811, + 28.905757, + 29.311946, + 29.71838, + 30.125058, + 30.53198, + 30.939145, + 31.346555, + 31.754209, + 32.162106, + 32.570247, + 32.978632, + 33.387261, + 33.796134, + 34.205251, + 34.614611, + 35.024216, + 35.434064, + 35.844157, + 36.254495, + 36.665076, + 37.075903, + 37.486974, + 37.89829, + 38.309852, + 38.721658, + 39.133711, + 39.54601, + 39.958554, + 40.371345, + 40.784383, + 41.197668, + 41.611199, + 42.024979, + 42.439005, + 42.85328, + 43.267802, + 43.682573, + 44.097591, + 44.512859, + 44.928375, + 45.344139, + 45.760153, + 46.176416, + 46.592928, + 47.009689, + 47.426699, + 47.843959, + 48.261469, + 48.679228, + 49.097237, + 49.515495, + 49.934003, + 50.352761, + 50.771768, + 51.191024, + 51.61053, + 52.030284, + 52.450288, + 52.870541, + 53.291042, + 53.711791, + 54.132789, + 54.554034, + 54.975526, + 55.397265, + 55.819252, + 56.241484, + 56.663962, + 57.086686, + 57.509655, + 57.932868, + 58.356325, + 58.780025, + 59.203968, + 59.628152, + 60.052578, + 60.477244, + 60.90215, + 61.327295, + 61.752679, + 62.1783, + 62.604158, + 63.030253, + 63.456584, + 63.883151, + 64.309953, + 64.736991, + 65.164265, + 65.591774, + 66.01952, + 66.447502, + 66.875723, + 67.304181, + 67.732879, + 68.161817, + 68.590996, + 69.020417, + 69.450083, + 69.879993, + 70.310148, + 70.740551, + 71.171202, + 71.602102, + 72.033252, + 72.464652, + 72.896303, + 73.328206, + 73.760361, + 74.192767, + 74.625426, + 75.058338, + 75.491503, + 75.924921, + 76.358593, + 76.792519, + 77.226699, + 77.661133, + 78.095822, + 78.530767, + 78.965968, + 79.401424, + 79.837138, + 80.273108, + 80.709335, + 81.145819, + 81.582561, + 82.01956, + 82.456817, + 82.894331, + 83.332102, + 83.770129, + 84.208412, + 84.64695, + 85.085742, + 85.524788, + 85.964086, + 86.403635, + 86.843435, + 87.283484, + 87.723782, + 88.164328, + 88.605122, + 89.046163, + 89.48745, + 89.928983, + 90.370762, + 90.812787, + 91.255057, + 91.697574, + 92.140336, + 92.583345, + 93.0266, + 93.470103, + 93.913852, + 94.357849, + 94.802093, + 95.246585, + 95.691325, + 96.136314, + 96.581551, + 97.027036, + 97.472771, + 97.918755, + 98.364989, + 98.811473, + 99.258207, + 99.705192, + 100.152429, + 100.599918, + 101.04766, + 101.495656, + 101.943906, + 102.392411, + 102.841171, + 103.290189, + 103.739463, + 104.188995, + 104.638785, + 105.088833, + 105.53914, + 105.989706, + 106.440531, + 106.891615, + 107.342958, + 107.794559, + 108.246419, + 108.698536, + 109.150911, + 109.603543, + 110.056432, + 110.509577, + 110.962977, + 111.416633, + 111.870543, + 112.324708, + 112.779127, + 113.233799, + 113.688724, + 114.143903, + 114.599334, + 115.055018, + 115.510954, + 115.967142, + 116.423581, + 116.880272, + 117.337214, + 117.794408, + 118.251852, + 118.709546, + 119.167491, + 119.625686, + 120.084131, + 120.542826, + 121.00177, + 121.460964, + 121.920408, + 122.380101, + 122.840044, + 123.300237, + 123.76068, + 124.221374, + 124.682319, + 125.143515, + 125.604962, + 126.066662, + 126.528614, + 126.990819, + 127.453277, + 127.915988, + 128.378954, + 128.842174, + 129.305648, + 129.769377, + 130.23336, + 130.697598, + 131.162091, + 131.626838, + 132.09184, + 132.557096, + 133.022607, + 133.488371, + 133.954389, + 134.420661, + 134.887186, + 135.353963, + 135.820994, + 136.288277, + 136.755812, + 137.223599, + 137.691638, + 138.159928, + 138.628469, + 139.097261, + 139.566303, + 140.035596, + 140.505138, + 140.97493, + 141.444971, + 141.91526, + 142.385798, + 142.856584, + 143.327618, + 143.798899, + 144.270427, + 144.742201, + 145.214222, + 145.686489, + 146.159003, + 146.631762, + 147.104767, + 147.578018, + 148.051515, + 148.525259, + 148.999249, + 149.473486, + 149.94797, + 150.422701, + 150.897679, + 151.372906, + 151.848381, + 152.324105, + 152.800077, + 153.2763, + 153.752771, + 154.229493, + 154.706465, + 155.183688, + 155.661162, + 156.138887, + 156.616863, + 157.095091, + 157.57357, + 158.0523, + 158.531282, + 159.010515, + 159.49, + 159.969737, + 160.449725, + 160.929966, + 161.410458, + 161.891203, + 162.372199, + 162.853447, + 163.334947, + 163.816699, + 164.298702, + 164.780956, + 165.263462, + 165.746218, + 166.229224, + 166.71248, + 167.195985, + 167.67974, + 168.163742, + 168.647992, + 169.13249, + 169.617233, + 170.102223, + 170.587458, + 171.072938, + 171.558663, + 172.044632, + 172.530845, + 173.017301, + 173.504001, + 173.990943, + 174.478127, + 174.965553, + 175.453221, + 175.94113, + 176.429279, + 176.917669, + 177.406298, + 177.895167, + 178.384274, + 178.873618, + 179.363199, + 179.853015, + 180.343066, + 180.833351, + 181.323867, + 181.814615, + 182.305593, + 182.796799, + 183.288234, + 183.779895, + 184.271782, + 184.763895, + 185.256234, + 185.748797, + 186.241586, + 186.734602, + 187.227843, + 187.721313, + 188.215012, + 188.708941, + 189.203102, + 189.697496, + 190.192126, + 190.686993, + 191.182099, + 191.677445, + 192.173032, + 192.668861, + 193.164935, + 193.661252, + 194.157815, + 194.654623, + 195.151676, + 195.648976, + 196.146521, + 196.644313, + 197.14235, + 197.640634, + 198.139163, + 198.637939, + 199.136961, + 199.636229, + 200.135744, + 200.635506, + 201.135516, + 201.635775, + 202.136282, + 202.63704, + 203.138047, + 203.639306, + 204.140817, + 204.642579, + 205.144593, + 205.64686, + 206.149378, + 206.652148, + 207.155168, + 207.658438, + 208.161955, + 208.66572, + 209.169731, + 209.673985, + 210.178483, + 210.683222, + 211.188201, + 211.693419, + 212.198874, + 212.704567, + 213.210495, + 213.716658, + 214.223055, + 214.729687, + 215.236553, + 215.743652, + 216.250984, + 216.75855, + 217.26635, + 217.774383, + 218.282649, + 218.791149, + 219.299883, + 219.80885, + 220.318051, + 220.827486, + 221.337155, + 221.847058, + 222.357194, + 222.867565, + 223.37817, + 223.889009, + 224.400083, + 224.911392, + 225.422936, + 225.934717, + 226.446735, + 226.95899, + 227.471484, + 227.984216, + 228.497189, + 229.010402, + 229.523857, + 230.037554, + 230.551493, + 231.065676, + 231.580103, + 232.094773, + 232.609687, + 233.124845, + 233.640247, + 234.155893, + 234.671782, + 235.187914, + 235.704289, + 236.220905, + 236.737762, + 237.25486, + 237.772198, + 238.289775, + 238.80759, + 239.325644, + 239.843935, + 240.362462, + 240.881226, + 241.400226, + 241.919461, + 242.43893, + 242.958634, + 243.478571, + 243.998741, + 244.519144, + 245.039779, + 245.560645, + 246.081741, + 246.603066, + 247.124621, + 247.646404, + 248.168416, + 248.690655, + 249.213121, + 249.735815, + 250.258734, + 250.78188, + 251.305253, + 251.828851, + 252.352675, + 252.876725, + 253.401001, + 253.925503, + 254.450232, + 254.975187, + 255.500368, + 256.025777, + 256.551412, + 257.077275, + 257.603365, + 258.129683, + 258.656229, + 259.183002, + 259.710003, + 260.237233, + 260.76469, + 261.292375, + 261.820287, + 262.348426, + 262.876793, + 263.405386, + 263.934205, + 264.46325, + 264.992521, + 265.522017, + 266.051737, + 266.581681, + 267.111849, + 267.64224, + 268.172853, + 268.703689, + 269.234746, + 269.766023, + 270.297522, + 270.82924, + 271.361177, + 271.893332, + 272.425705, + 272.958295, + 273.491102, + 274.024124, + 274.55736, + 275.090811, + 275.624475, + 276.158352, + 276.692441, + 277.22674, + 277.761251, + 278.295972, + 278.830902, + 279.366042, + 279.90139, + 280.436947, + 280.972713, + 281.508687, + 282.044868, + 282.581257, + 283.117853, + 283.654657, + 284.191668, + 284.728887, + 285.266312, + 285.803946, + 286.341787, + 286.879835, + 287.418091, + 287.956554, + 288.495224, + 289.034101, + 289.573185, + 290.112474, + 290.651971, + 291.191673, + 291.73158, + 292.271693, + 292.81201, + 293.352531, + 293.893255, + 294.434182, + 294.975312, + 295.516644, + 296.058177, + 296.599911, + 297.141845, + 297.683978, + 298.22631, + 298.768839, + 299.311564, + 299.854482, + 300.397593, + 300.940895, + 301.484384, + 302.028059, + 302.571918, + 303.115959, + 303.660179, + 304.204575, + 304.749147, + 305.293893, + 305.838811, + 306.383901, + 306.929161, + 307.474592, + 308.020195, + 308.56597, + 309.111919, + 309.658043, + 310.204344, + 310.750824, + 311.297484, + 311.844329, + 312.391358, + 312.938574, + 313.485979, + 314.033573, + 314.581358, + 315.129335, + 315.677503, + 316.225864, + 316.774416, + 317.32316, + 317.872095, + 318.421221, + 318.970538, + 319.520045, + 320.069742, + 320.61963, + 321.169708, + 321.719979, + 322.270442, + 322.821098, + 323.37195, + 323.922998, + 324.474244, + 325.02569, + 325.577336, + 326.129185, + 326.681236, + 327.23349, + 327.785948, + 328.338609, + 328.891473, + 329.444539, + 329.997804, + 330.551268, + 331.104929, + 331.658783, + 332.21283, + 332.767066, + 333.321489, + 333.876097, + 334.430888, + 334.985861, + 335.541013, + 336.096343, + 336.651851, + 337.207535, + 337.763396, + 338.319432, + 338.875644, + 339.432032, + 339.988595, + 340.545335, + 341.10225, + 341.659342, + 342.216611, + 342.774055, + 343.331676, + 343.889472, + 344.447445, + 345.005592, + 345.563915, + 346.122413, + 346.681086, + 347.239933, + 347.798955, + 348.358152, + 348.917524, + 349.477071, + 350.036796, + 350.596698, + 351.156778, + 351.717039, + 352.27748, + 352.838104, + 353.398912, + 353.959906, + 354.521085, + 355.082453, + 355.644009, + 356.205754, + 356.767688, + 357.329812, + 357.892126, + 358.454631, + 359.017325, + 359.580209, + 0.143281, + 0.706542, + 1.269991, + 1.833626, + 2.397447, + 2.961453, + 3.525643, + 4.090015, + 4.65457, + 5.219305, + 5.78422, + 6.349315, + 6.914589, + 7.480041, + 8.045671, + 8.611477, + 9.17746, + 9.743618, + 10.309952, + 10.87646, + 11.443142, + 12.009997, + 12.577025, + 13.144224, + 13.711594, + 14.279134, + 14.846844, + 15.414722, + 15.982769, + 16.550983, + 17.119365, + 17.687913, + 18.256628, + 18.82551, + 19.394558, + 19.963774, + 20.533156, + 21.102706, + 21.672424, + 22.242311, + 22.812368, + 23.382594, + 23.952991, + 24.523559, + 25.094298, + 25.66521, + 26.236295, + 26.807552, + 27.378983, + 27.950587, + 28.522364, + 29.094313, + 29.666436, + 30.238731, + 30.811198, + 31.383838, + 31.956648, + 32.529629, + 33.102781, + 33.676102, + 34.249592, + 34.823251, + 35.397078, + 35.971072, + 36.545233, + 37.11956, + 37.694053, + 38.268711, + 38.843532, + 39.418518, + 39.993665, + 40.568975, + 41.144445, + 41.720075, + 42.295864, + 42.871811, + 43.447915, + 44.024175, + 44.600589, + 45.177158, + 45.75388, + 46.330755, + 46.907781, + 47.484957, + 48.062284, + 48.63976, + 49.217385, + 49.795159, + 50.373081, + 50.951152, + 51.52937, + 52.107736, + 52.68625, + 53.264912, + 53.843721, + 54.422678, + 55.001783, + 55.581035, + 56.160435, + 56.739982, + 57.319676, + 57.899516, + 58.479502, + 59.059634, + 59.639909, + 60.220327, + 60.800886, + 61.381586, + 61.962424, + 62.543399, + 63.124509, + 63.705752, + 64.287127, + 64.868633, + 65.450269, + 66.032033, + 66.613927, + 67.195948, + 67.778098, + 68.360377, + 68.942785, + 69.525325, + 70.107996, + 70.690801, + 71.273742, + 71.85682, + 72.440036, + 73.023392, + 73.606889, + 74.190528, + 74.77431, + 75.358235, + 75.942302, + 76.526512, + 77.110864, + 77.695357, + 78.27999, + 78.864762, + 79.449673, + 80.034721, + 80.619905, + 81.205225, + 81.79068, + 82.37627, + 82.961995, + 83.547856, + 84.133853, + 84.719987, + 85.30626, + 85.892673, + 86.479227, + 87.065925, + 87.652766, + 88.239753, + 88.826886, + 89.414165, + 90.001592, + 90.589165, + 91.176884, + 91.764749, + 92.352758, + 92.940909, + 93.529202, + 94.117635, + 94.706205, + 95.294911, + 95.883752, + 96.472726, + 97.061831, + 97.651066, + 98.24043, + 98.829923, + 99.419545, + 100.009295, + 100.599175, + 101.189184, + 101.779324, + 102.369594, + 102.959996, + 103.55053, + 104.141196, + 104.731996, + 105.322929, + 105.913994, + 106.505193, + 107.096523, + 107.687985, + 108.279579, + 108.871302, + 109.463155, + 110.055137, + 110.647247, + 111.239485, + 111.831851, + 112.424344, + 113.016966, + 113.609715, + 114.202594, + 114.795603, + 115.388742, + 115.982014, + 116.575419, + 117.168959, + 117.762634, + 118.356445, + 118.950394, + 119.544481, + 120.138707, + 120.733071, + 121.327574, + 121.922216, + 122.516996, + 123.111914, + 123.706969, + 124.30216, + 124.897486, + 125.492946, + 126.08854, + 126.684266, + 127.280124, + 127.876113, + 128.472232, + 129.068481, + 129.664861, + 130.261369, + 130.858008, + 131.454775, + 132.051672, + 132.648697, + 133.245852, + 133.843135, + 134.440547, + 135.038087, + 135.635754, + 136.233549, + 136.831471, + 137.429518, + 138.027692, + 138.62599, + 139.224413, + 139.822959, + 140.421628, + 141.020419, + 141.619332, + 142.218366, + 142.817522, + 143.416798, + 144.016196, + 144.615715, + 145.215355, + 145.815118, + 146.415002, + 147.01501, + 147.615141, + 148.215396, + 148.815776, + 149.41628, + 150.01691, + 150.617666, + 151.218548, + 151.819557, + 152.420691, + 153.021952, + 153.623338, + 154.224851, + 154.826488, + 155.428251, + 156.030137, + 156.632148, + 157.234282, + 157.836539, + 158.438918, + 159.04142, + 159.644043, + 160.246788, + 160.849654, + 161.452642, + 162.05575, + 162.658978, + 163.262327, + 163.865796, + 164.469384, + 165.073092, + 165.676918, + 166.280862, + 166.884923, + 167.489102, + 168.093395, + 168.697804, + 169.302326, + 169.90696, + 170.511706, + 171.116561, + 171.721526, + 172.326598, + 172.931779, + 173.537066, + 174.14246, + 174.747959, + 175.353563, + 175.959272, + 176.565085, + 177.171002, + 177.777022, + 178.383145, + 178.989369, + 179.595694, + 180.202118, + 180.808641, + 181.415261, + 182.021975, + 182.628784, + 183.235684, + 183.842674, + 184.449752, + 185.056917, + 185.664167, + 186.271501, + 186.878919, + 187.486422, + 188.094008, + 188.701681, + 189.30944, + 189.917288, + 190.525228, + 191.133262, + 191.741393, + 192.349624, + 192.957957, + 193.566395, + 194.17494, + 194.783594, + 195.392357, + 196.001232, + 196.610216, + 197.219311, + 197.828516, + 198.437829, + 199.04725, + 199.656776, + 200.266406, + 200.87614, + 201.485975, + 202.09591, + 202.705946, + 203.316082, + 203.926318, + 204.536654, + 205.147092, + 205.757633, + 206.368278, + 206.979029, + 207.589887, + 208.200853, + 208.811929, + 209.423116, + 210.034413, + 210.645821, + 211.257341, + 211.86897, + 212.480708, + 213.092553, + 213.704503, + 214.316557, + 214.928711, + 215.540963, + 216.153311, + 216.765753, + 217.378286, + 217.990909, + 218.60362, + 219.216418, + 219.829303, + 220.442275, + 221.055333, + 221.668478, + 222.281712, + 222.895034, + 223.508446, + 224.12195, + 224.735545, + 225.349234, + 225.963018, + 226.576896, + 227.19087, + 227.804939, + 228.419103, + 229.033364, + 229.647719, + 230.262169, + 230.876714, + 231.491352, + 232.106084, + 232.72091, + 233.335828, + 233.95084, + 234.565946, + 235.181146, + 235.796442, + 236.411833, + 237.027322, + 237.64291, + 238.258598, + 238.874387, + 239.490279, + 240.106275, + 240.722375, + 241.338581, + 241.954894, + 242.571313, + 243.187839, + 243.804471, + 244.421208, + 245.038051, + 245.654998, + 246.272047, + 246.889199, + 247.506451, + 248.123802, + 248.741252, + 249.358798, + 249.976441, + 250.594179, + 251.212011, + 251.829938, + 252.447958, + 253.066072, + 253.684279, + 254.30258, + 254.920973, + 255.53946, + 256.158038, + 256.77671, + 257.395473, + 258.014329, + 258.633276, + 259.252314, + 259.871444, + 260.490663, + 261.109972, + 261.72937, + 262.348856, + 262.96843, + 263.588091, + 264.207837, + 264.82767, + 265.447589, + 266.067594, + 266.687684, + 267.30786, + 267.928123, + 268.548473, + 269.168911, + 269.789437, + 270.410053, + 271.030758, + 271.651555, + 272.272443, + 272.893423, + 273.514496, + 274.135661, + 274.75692, + 275.378272, + 275.999717, + 276.621254, + 277.242884, + 277.864605, + 278.486418, + 279.108321, + 279.730315, + 280.352397, + 280.974568, + 281.596828, + 282.219175, + 282.841609, + 283.464131, + 284.086739, + 284.709433, + 285.332214, + 285.955081, + 286.578033, + 287.201072, + 287.824195, + 288.447404, + 289.070697, + 289.694075, + 290.317536, + 290.941079, + 291.564705, + 292.188411, + 292.812198, + 293.436065, + 294.060009, + 294.684031, + 295.30813, + 295.932304, + 296.556552, + 297.180874, + 297.805269, + 298.429736, + 299.054274, + 299.678881, + 300.303557, + 300.928301, + 301.553112, + 302.177987, + 302.802926, + 303.427926, + 304.052987, + 304.678106, + 305.303283, + 305.928515, + 306.553803, + 307.179145, + 307.804541, + 308.429992, + 309.055498, + 309.681062, + 310.306684, + 310.932369, + 311.558118, + 312.183934, + 312.80982, + 313.435778, + 314.061812, + 314.687924, + 315.314115, + 315.940386, + 316.566738, + 317.193172, + 317.819686, + 318.44628, + 319.072953, + 319.699703, + 320.326528, + 320.953428, + 321.5804, + 322.207443, + 322.834556, + 323.461739, + 324.08899, + 324.716311, + 325.343701, + 325.971163, + 326.598697, + 327.226304, + 327.853986, + 328.481746, + 329.109583, + 329.737501, + 330.365499, + 330.993579, + 331.62174, + 332.249982, + 332.878305, + 333.506708, + 334.135188, + 334.763744, + 335.392374, + 336.021076, + 336.649846, + 337.278683, + 337.907585, + 338.536549, + 339.165574, + 339.794658, + 340.423802, + 341.053004, + 341.682264, + 342.311583, + 342.940961, + 343.5704, + 344.199901, + 344.829464, + 345.459092, + 346.088786, + 346.718546, + 347.348374, + 347.97827, + 348.608235, + 349.23827, + 349.868375, + 350.498549, + 351.128793, + 351.759106, + 352.389487, + 353.019937, + 353.650455, + 354.28104, + 354.911693, + 355.542414, + 356.173202, + 356.80406, + 357.434986, + 358.065983, + 358.697051, + 359.328192, + 359.959406, + 0.590696, + 1.222063, + 1.853507, + 2.485029, + 3.116631, + 3.748312, + 4.380073, + 5.011914, + 5.643835, + 6.275834, + 6.907912, + 7.540066, + 8.172297, + 8.804602, + 9.43698, + 10.069431, + 10.701952, + 11.334544, + 11.967204, + 12.599933, + 13.232729, + 13.865593, + 14.498523, + 15.13152, + 15.764584, + 16.397715, + 17.030912, + 17.664177, + 18.297508, + 18.930907, + 19.564373, + 20.197905, + 20.831505, + 21.46517, + 22.098902, + 22.732699, + 23.36656, + 24.000486, + 24.634476, + 25.268528, + 25.902644, + 26.536822, + 27.171062, + 27.805364, + 28.439728, + 29.074156, + 29.708646, + 30.3432, + 30.977819, + 31.612502, + 32.247252, + 32.882069, + 33.516954, + 34.151907, + 34.78693, + 35.422022, + 36.057185, + 36.692418, + 37.327723, + 37.963097, + 38.598542, + 39.234058, + 39.869643, + 40.505298, + 41.14102, + 41.776811, + 42.41267, + 43.048594, + 43.684585, + 44.320641, + 44.956762, + 45.592946, + 46.229195, + 46.865507, + 47.501882, + 48.138319, + 48.774819, + 49.411381, + 50.048004, + 50.684688, + 51.321433, + 51.958237, + 52.595101, + 53.232024, + 53.869005, + 54.506043, + 55.143137, + 55.780287, + 56.417491, + 57.054748, + 57.692057, + 58.329417, + 58.966827, + 59.604285, + 60.241789, + 60.879339, + 61.516933, + 62.154569, + 62.792244, + 63.429958, + 64.067708, + 64.705493, + 65.343312, + 65.981163, + 66.619045, + 67.256959, + 67.894904, + 68.532881, + 69.170891, + 69.808937, + 70.44702, + 71.085144, + 71.723312, + 72.361526, + 72.999791, + 73.638108, + 74.276482, + 74.914914, + 75.553406, + 76.19196, + 76.830576, + 77.469256, + 78.107997, + 78.746801, + 79.385664, + 80.024588, + 80.663568, + 81.302605, + 81.941696, + 82.580841, + 83.220038, + 83.859287, + 84.498589, + 85.137942, + 85.777349, + 86.416809, + 87.056325, + 87.695898, + 88.33553, + 88.975222, + 89.614975, + 90.254791, + 90.89467, + 91.534614, + 92.174621, + 92.814691, + 93.454823, + 94.095015, + 94.735266, + 95.375574, + 96.015935, + 96.656347, + 97.296807, + 97.937314, + 98.577864, + 99.218455, + 99.859086, + 100.499756, + 101.140463, + 101.781208, + 102.421989, + 103.062809, + 103.703667, + 104.344564, + 104.985502, + 105.626482, + 106.267505, + 106.908573, + 107.549686, + 108.190846, + 108.832053, + 109.473307, + 110.114609, + 110.755959, + 111.397357, + 112.038802, + 112.680295, + 113.321834, + 113.963419, + 114.605051, + 115.246729, + 115.888454, + 116.530225, + 117.172045, + 117.813913, + 118.455831, + 119.0978, + 119.739822, + 120.381899, + 121.024031, + 121.666221, + 122.308471, + 122.950781, + 123.593152, + 124.235586, + 124.878082, + 125.520642, + 126.163264, + 126.805948, + 127.448695, + 128.091501, + 128.734368, + 129.377292, + 130.020274, + 130.663311, + 131.306402, + 131.949546, + 132.592743, + 133.23599, + 133.879287, + 134.522635, + 135.166031, + 135.809477, + 136.452971, + 137.096515, + 137.740108, + 138.38375, + 139.027441, + 139.671182, + 140.314972, + 140.958811, + 141.602698, + 142.246634, + 142.890617, + 143.534648, + 144.178725, + 144.822848, + 145.467016, + 146.111228, + 146.755484, + 147.399784, + 148.044126, + 148.688512, + 149.33294, + 149.977412, + 150.621927, + 151.266487, + 151.911091, + 152.555741, + 153.200437, + 153.84518, + 154.489972, + 155.134813, + 155.779704, + 156.424645, + 157.069638, + 157.714681, + 158.359777, + 159.004924, + 159.650123, + 160.295373, + 160.940674, + 161.586026, + 162.231428, + 162.87688, + 163.522381, + 164.16793, + 164.813527, + 165.459171, + 166.104863, + 166.750601, + 167.396385, + 168.042215, + 168.68809, + 169.334011, + 169.979976, + 170.625986, + 171.27204, + 171.918138, + 172.56428, + 173.210464, + 173.85669, + 174.502958, + 175.149267, + 175.795615, + 176.442002, + 177.088427, + 177.734888, + 178.381384, + 179.027914, + 179.674476, + 180.321068, + 180.967689, + 181.614336, + 182.261008, + 182.907702, + 183.554418, + 184.201152, + 184.847903, + 185.49467, + 186.141452, + 186.788247, + 187.435057, + 188.08188, + 188.728719, + 189.375574, + 190.022448, + 190.669344, + 191.316263, + 191.963211, + 192.610189, + 193.257201, + 193.904251, + 194.551341, + 195.198473, + 195.84565, + 196.492873, + 197.140143, + 197.787459, + 198.434821, + 199.082229, + 199.729682, + 200.377178, + 201.024715, + 201.672292, + 202.319908, + 202.967562, + 203.615253, + 204.26298, + 204.910745, + 205.558547, + 206.206387, + 206.854267, + 207.502189, + 208.150154, + 208.798163, + 209.446219, + 210.094323, + 210.742476, + 211.390679, + 212.038932, + 212.687235, + 213.335587, + 213.983988, + 214.632435, + 215.280926, + 215.929459, + 216.578032, + 217.226641, + 217.875283, + 218.523957, + 219.17266, + 219.82139, + 220.470145, + 221.118923, + 221.767725, + 222.416551, + 223.065399, + 223.714271, + 224.363167, + 225.01209, + 225.66104, + 226.310018, + 226.959027, + 227.608067, + 228.257139, + 228.906245, + 229.555386, + 230.204561, + 230.853771, + 231.503017, + 232.152298, + 232.801614, + 233.450964, + 234.100349, + 234.749768, + 235.399221, + 236.048707, + 236.698229, + 237.347785, + 237.997376, + 238.647004, + 239.29667, + 239.946375, + 240.596121, + 241.245909, + 241.895741, + 242.545618, + 243.195543, + 243.845515, + 244.495536, + 245.145607, + 245.795729, + 246.4459, + 247.096122, + 247.746394, + 248.396714, + 249.047082, + 249.697497, + 250.347957, + 250.998461, + 251.649007, + 252.299595, + 252.950223, + 253.60089, + 254.251594, + 254.902336, + 255.553114, + 256.203928, + 256.854779, + 257.505664, + 258.156585, + 258.807542, + 259.458535, + 260.109563, + 260.760626, + 261.411725, + 262.06286, + 262.714029, + 263.365233, + 264.016471, + 264.667743, + 265.319048, + 265.970386, + 266.621756, + 267.273157, + 267.924589, + 268.576053, + 269.227547, + 269.879072, + 270.530628, + 271.182215, + 271.833835, + 272.485487, + 273.137174, + 273.788894, + 274.440651, + 275.092444, + 275.744275, + 276.396144, + 277.048053, + 277.700003, + 278.351993, + 279.004024, + 279.656097, + 280.308212, + 280.960368, + 281.612566, + 282.264805, + 282.917085, + 283.569405, + 284.221765, + 284.874164, + 285.526602, + 286.179078, + 286.831591, + 287.484141, + 288.136727, + 288.789349, + 289.442006, + 290.094698, + 290.747425, + 291.400185, + 292.05298, + 292.705807, + 293.358668, + 294.01156, + 294.664485, + 295.31744, + 295.970424, + 296.623438, + 297.27648, + 297.929548, + 298.582641, + 299.235758, + 299.888896, + 300.542054, + 301.195229, + 301.84842, + 302.501623, + 303.154837, + 303.80806, + 304.461288, + 305.114521, + 305.767756, + 306.420992, + 307.074228, + 307.727465, + 308.380703, + 309.033943, + 309.687187, + 310.340437, + 310.993696, + 311.646968, + 312.300256, + 312.953564, + 313.606895, + 314.260252, + 314.91364, + 315.567059, + 316.220512, + 316.874001, + 317.527525, + 318.181086, + 318.834682, + 319.488313, + 320.141976, + 320.795672, + 321.449398, + 322.103153, + 322.756935, + 323.410743, + 324.064578, + 324.718439, + 325.372327, + 326.026241, + 326.680184, + 327.334158, + 327.988163, + 328.642202, + 329.296277, + 329.95039, + 330.604542, + 331.258734, + 331.912966, + 332.56724, + 333.221554, + 333.875908, + 334.530301, + 335.184729, + 335.839191, + 336.493684, + 337.148205, + 337.802751, + 338.45732, + 339.111908, + 339.766513, + 340.421133, + 341.075767, + 341.730413, + 342.385071, + 343.03974, + 343.694422, + 344.349115, + 345.003823, + 345.658545, + 346.313283, + 346.968039, + 347.622814, + 348.277609, + 348.932426, + 349.587265, + 350.242127, + 350.897012, + 351.551921, + 352.206853, + 352.861809, + 353.516787, + 354.171789, + 354.826812, + 355.481858, + 356.136926, + 356.792016, + 357.447128, + 358.102264, + 358.757425, + 359.41261, + 0.067823, + 0.723064, + 1.378336, + 2.03364, + 2.688977, + 3.34435, + 3.99976, + 4.655209, + 5.310696, + 5.966224, + 6.621793, + 7.277402, + 7.933051, + 8.58874, + 9.244467, + 9.900233, + 10.556035, + 11.211872, + 11.867742, + 12.523645, + 13.179578, + 13.835541, + 14.491533, + 15.147552, + 15.803597, + 16.459669, + 17.115767, + 17.77189, + 18.428039, + 19.084213, + 19.740412, + 20.396638, + 21.052888, + 21.709165, + 22.365466, + 23.021793, + 23.678145, + 24.334521, + 24.990922, + 25.647346, + 26.303792, + 26.960261, + 27.616752, + 28.273263, + 28.929796, + 29.586349, + 30.242922, + 30.899516, + 31.55613, + 32.212766, + 32.869424, + 33.526104, + 34.182807, + 34.839535, + 35.496288, + 36.153068, + 36.809875, + 37.466711, + 38.123576, + 38.780471, + 39.437396, + 40.094353, + 40.751341, + 41.408361, + 42.065412, + 42.722495, + 43.379609, + 44.036753, + 44.693928, + 45.351132, + 46.008366, + 46.665628, + 47.322918, + 47.980236, + 48.637581, + 49.294952, + 49.952349, + 50.609772, + 51.26722, + 51.924694, + 52.582191, + 53.239713, + 53.897259, + 54.554828, + 55.21242, + 55.870034, + 56.527668, + 57.185324, + 57.842998, + 58.50069, + 59.158398, + 59.816121, + 60.473856, + 61.131602, + 61.789356, + 62.447115, + 63.104879, + 63.762643, + 64.420406, + 65.078166, + 65.735921, + 66.393669, + 67.05141, + 67.709143, + 68.36687, + 69.024591, + 69.682307, + 70.340023, + 70.99774, + 71.655462, + 72.313193, + 72.970936, + 73.628694, + 74.286473, + 74.944274, + 75.6021, + 76.259953, + 76.917834, + 77.575745, + 78.233685, + 78.891655, + 79.549652, + 80.207676, + 80.865726, + 81.523799, + 82.181895, + 82.840012, + 83.498149, + 84.156307, + 84.814483, + 85.47268, + 86.130898, + 86.789138, + 87.447401, + 88.10569, + 88.764007, + 89.422353, + 90.08073, + 90.73914, + 91.397584, + 92.056063, + 92.714576, + 93.373124, + 94.031704, + 94.690317, + 95.34896, + 96.00763, + 96.666324, + 97.32504, + 97.983774, + 98.642524, + 99.301287, + 99.96006, + 100.61884, + 101.277627, + 101.936419, + 102.595215, + 103.254015, + 103.912819, + 104.571628, + 105.230442, + 105.889264, + 106.548095, + 107.206935, + 107.865788, + 108.524653, + 109.183533, + 109.842428, + 110.501339, + 111.160266, + 111.819211, + 112.478173, + 113.137151, + 113.796147, + 114.455159, + 115.114187, + 115.773231, + 116.432292, + 117.091369, + 117.750463, + 118.409574, + 119.068704, + 119.727854, + 120.387026, + 121.046221, + 121.705441, + 122.364687, + 123.023963, + 123.683269, + 124.342607, + 125.001979, + 125.661385, + 126.320827, + 126.980305, + 127.639819, + 128.299369, + 128.958953, + 129.618572, + 130.278224, + 130.937908, + 131.597622, + 132.257365, + 132.917136, + 133.576932, + 134.236753, + 134.896598, + 135.556465, + 136.216354, + 136.876263, + 137.536193, + 138.196143, + 138.856114, + 139.516104, + 140.176113, + 140.836143, + 141.496192, + 142.156261, + 142.816349, + 143.476456, + 144.136582, + 144.796726, + 145.456887, + 146.117065, + 146.777259, + 0 + ], + "yaxis": "y2" + }, + { + "mode": "lines", + "name": " GenTq_(kN-m)", + "type": "scatter", + "xaxis": "x3", + "y": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.000001, + 0.000001, + 0.000002, + 0.000003, + 0.000004, + 0.000006, + 0.000007, + 0.000009, + 0.00001, + 0.000011, + 0.000012, + 0.000012, + 0.000012, + 0.000012, + 0.000012, + 0.000011, + 0.00001, + 0.00001, + 0.000009, + 0.000008, + 0.000008, + 0.000008, + 0.000007, + 0.000008, + 0.000008, + 0.000008, + 0.000009, + 0.00001, + 0.000012, + 0.000013, + 0.000015, + 0.000017, + 0.000019, + 0.000022, + 0.000024, + 0.000027, + 0.000029, + 0.000032, + 0.000035, + 0.000037, + 0.00004, + 0.000043, + 0.000047, + 0.000051, + 0.000055, + 0.00006, + 0.000066, + 0.000073, + 0.000081, + 0.00009, + 0.0001, + 0.000112, + 0.000124, + 0.000138, + 0.000153, + 0.000169, + 0.000186, + 0.000203, + 0.000221, + 0.000238, + 0.000256, + 0.000273, + 0.00029, + 0.000306, + 0.000322, + 0.000336, + 0.00035, + 0.000363, + 0.000376, + 0.000388, + 0.000399, + 0.000411, + 0.000422, + 0.000433, + 0.000445, + 0.000457, + 0.000468, + 0.00048, + 0.000492, + 0.000504, + 0.000516, + 0.000528, + 0.000539, + 0.00055, + 0.000561, + 0.000571, + 0.00058, + 0.000589, + 0.000598, + 0.000606, + 0.000614, + 0.000622, + 0.00063, + 0.000638, + 0.000647, + 0.000657, + 0.000668, + 0.00068, + 0.000694, + 0.000709, + 0.000725, + 0.000743, + 0.000762, + 0.000783, + 0.000805, + 0.000828, + 0.000851, + 0.000875, + 0.0009, + 0.000924, + 0.000948, + 0.000972, + 0.000994, + 0.001016, + 0.001036, + 0.001056, + 0.001074, + 0.00109, + 0.001105, + 0.001119, + 0.001132, + 0.001143, + 0.001154, + 0.001163, + 0.001171, + 0.001178, + 0.001184, + 0.00119, + 0.001194, + 0.001197, + 0.0012, + 0.001201, + 0.001201, + 0.0012, + 0.001198, + 0.001195, + 0.001191, + 0.001187, + 0.001181, + 0.001176, + 0.001169, + 0.001163, + 0.001157, + 0.001152, + 0.001147, + 0.001143, + 0.00114, + 0.001139, + 0.001139, + 0.001141, + 0.001145, + 0.001151, + 0.001159, + 0.001169, + 0.001181, + 0.001195, + 0.001211, + 0.001228, + 0.001248, + 0.001269, + 0.001291, + 0.001315, + 0.00134, + 0.001366, + 0.001392, + 0.001419, + 0.001447, + 0.001476, + 0.001505, + 0.001534, + 0.001563, + 0.001593, + 0.001623, + 0.001653, + 0.001683, + 0.001712, + 0.001742, + 0.001772, + 0.001801, + 0.00183, + 0.001858, + 0.001886, + 0.001913, + 0.001939, + 0.001964, + 0.001987, + 0.00201, + 0.002032, + 0.002053, + 0.002072, + 0.002091, + 0.002109, + 0.002126, + 0.002143, + 0.002159, + 0.002176, + 0.002192, + 0.00221, + 0.002227, + 0.002246, + 0.002266, + 0.002287, + 0.00231, + 0.002334, + 0.002359, + 0.002386, + 0.002415, + 0.002446, + 0.002479, + 0.002513, + 0.002548, + 0.002585, + 0.002624, + 0.002664, + 0.002705, + 0.002747, + 0.00279, + 0.002835, + 0.00288, + 0.002926, + 0.002973, + 0.00302, + 0.003068, + 0.003116, + 0.003165, + 0.003213, + 0.003262, + 0.003311, + 0.003359, + 0.003408, + 0.003455, + 0.003502, + 0.003547, + 0.003592, + 0.003635, + 0.003677, + 0.003717, + 0.003755, + 0.003792, + 0.003826, + 0.003859, + 0.003889, + 0.003918, + 0.003945, + 0.003971, + 0.003994, + 0.004016, + 0.004037, + 0.004057, + 0.004076, + 0.004093, + 0.004111, + 0.004127, + 0.004144, + 0.00416, + 0.004176, + 0.004192, + 0.004208, + 0.004224, + 0.00424, + 0.004257, + 0.004274, + 0.004291, + 0.004309, + 0.004328, + 0.004347, + 0.004366, + 0.004386, + 0.004406, + 0.004428, + 0.00445, + 0.004472, + 0.004496, + 0.00452, + 0.004545, + 0.004571, + 0.004597, + 0.004625, + 0.004653, + 0.004681, + 0.00471, + 0.00474, + 0.00477, + 0.0048, + 0.00483, + 0.00486, + 0.004891, + 0.004921, + 0.00495, + 0.00498, + 0.005008, + 0.005037, + 0.005064, + 0.005092, + 0.005118, + 0.005144, + 0.005169, + 0.005194, + 0.005218, + 0.005242, + 0.005265, + 0.005287, + 0.00531, + 0.005332, + 0.005353, + 0.005375, + 0.005396, + 0.005417, + 0.005438, + 0.005459, + 0.00548, + 0.005501, + 0.005523, + 0.005544, + 0.005566, + 0.005588, + 0.005611, + 0.005635, + 0.005659, + 0.005684, + 0.00571, + 0.005737, + 0.005765, + 0.005794, + 0.005825, + 0.005857, + 0.005891, + 0.005926, + 0.005964, + 0.006002, + 0.006043, + 0.006086, + 0.00613, + 0.006176, + 0.006224, + 0.006274, + 0.006325, + 0.006378, + 0.006433, + 0.006489, + 0.006547, + 0.006605, + 0.006666, + 0.006727, + 0.006789, + 0.006852, + 0.006916, + 0.006981, + 0.007046, + 0.007112, + 0.007178, + 0.007244, + 0.007311, + 0.007377, + 0.007443, + 0.007509, + 0.007574, + 0.007638, + 0.007702, + 0.007764, + 0.007826, + 0.007886, + 0.007945, + 0.008002, + 0.008058, + 0.008112, + 0.008165, + 0.008215, + 0.008265, + 0.008312, + 0.008358, + 0.008402, + 0.008445, + 0.008487, + 0.008527, + 0.008567, + 0.008605, + 0.008643, + 0.00868, + 0.008717, + 0.008753, + 0.00879, + 0.008826, + 0.008862, + 0.008899, + 0.008937, + 0.008974, + 0.009013, + 0.009052, + 0.009092, + 0.009133, + 0.009175, + 0.009218, + 0.009262, + 0.009308, + 0.009354, + 0.009401, + 0.009449, + 0.009499, + 0.009549, + 0.0096, + 0.009652, + 0.009705, + 0.009758, + 0.009811, + 0.009865, + 0.009919, + 0.009973, + 0.010026, + 0.01008, + 0.010132, + 0.010184, + 0.010235, + 0.010284, + 0.010332, + 0.010379, + 0.010425, + 0.010468, + 0.01051, + 0.01055, + 0.010588, + 0.010625, + 0.010659, + 0.010692, + 0.010723, + 0.010752, + 0.010779, + 0.010806, + 0.01083, + 0.010854, + 0.010877, + 0.010899, + 0.01092, + 0.010941, + 0.010962, + 0.010983, + 0.011004, + 0.011026, + 0.011048, + 0.011072, + 0.011096, + 0.011123, + 0.01115, + 0.01118, + 0.011211, + 0.011245, + 0.01128, + 0.011318, + 0.011359, + 0.011402, + 0.011447, + 0.011495, + 0.011546, + 0.011599, + 0.011655, + 0.011713, + 0.011773, + 0.011835, + 0.011899, + 0.011966, + 0.012033, + 0.012102, + 0.012173, + 0.012244, + 0.012316, + 0.012388, + 0.01246, + 0.012533, + 0.012605, + 0.012677, + 0.012748, + 0.012819, + 0.012888, + 0.012957, + 0.013024, + 0.01309, + 0.013154, + 0.013218, + 0.013279, + 0.01334, + 0.013399, + 0.013456, + 0.013513, + 0.013568, + 0.013622, + 0.013676, + 0.013728, + 0.01378, + 0.013832, + 0.013883, + 0.013934, + 0.013986, + 0.014038, + 0.01409, + 0.014143, + 0.014197, + 0.014253, + 0.014309, + 0.014368, + 0.014427, + 0.014489, + 0.014553, + 0.014618, + 0.014686, + 0.014756, + 0.014828, + 0.014902, + 0.014979, + 0.015057, + 0.015137, + 0.01522, + 0.015304, + 0.015389, + 0.015477, + 0.015565, + 0.015654, + 0.015744, + 0.015835, + 0.015926, + 0.016017, + 0.016108, + 0.016198, + 0.016288, + 0.016377, + 0.016465, + 0.016551, + 0.016636, + 0.01672, + 0.016801, + 0.01688, + 0.016958, + 0.017032, + 0.017105, + 0.017175, + 0.017243, + 0.017308, + 0.017371, + 0.017432, + 0.01749, + 0.017546, + 0.0176, + 0.017652, + 0.017702, + 0.017751, + 0.017798, + 0.017843, + 0.017888, + 0.017931, + 0.017974, + 0.018016, + 0.018058, + 0.0181, + 0.018142, + 0.018184, + 0.018226, + 0.018269, + 0.018313, + 0.018357, + 0.018403, + 0.018449, + 0.018496, + 0.018545, + 0.018594, + 0.018645, + 0.018697, + 0.01875, + 0.018805, + 0.01886, + 0.018917, + 0.018974, + 0.019033, + 0.019092, + 0.019153, + 0.019214, + 0.019275, + 0.019338, + 0.0194, + 0.019463, + 0.019527, + 0.01959, + 0.019654, + 0.019717, + 0.019781, + 0.019844, + 0.019908, + 0.019971, + 0.020033, + 0.020096, + 0.020158, + 0.020219, + 0.020281, + 0.020342, + 0.020402, + 0.020463, + 0.020523, + 0.020583, + 0.020642, + 0.020702, + 0.020762, + 0.020821, + 0.020881, + 0.020941, + 0.021001, + 0.021062, + 0.021123, + 0.021184, + 0.021246, + 0.021309, + 0.021372, + 0.021436, + 0.021501, + 0.021567, + 0.021634, + 0.021702, + 0.021771, + 0.021841, + 0.021912, + 0.021984, + 0.022058, + 0.022132, + 0.022208, + 0.022285, + 0.022363, + 0.022442, + 0.022522, + 0.022603, + 0.022686, + 0.022769, + 0.022853, + 0.022939, + 0.023025, + 0.023112, + 0.0232, + 0.023289, + 0.023379, + 0.023469, + 0.023559, + 0.02365, + 0.023742, + 0.023833, + 0.023925, + 0.024017, + 0.02411, + 0.024202, + 0.024294, + 0.024385, + 0.024477, + 0.024568, + 0.024659, + 0.024749, + 0.024839, + 0.024928, + 0.025017, + 0.025105, + 0.025192, + 0.025278, + 0.025363, + 0.025448, + 0.025532, + 0.025614, + 0.025696, + 0.025777, + 0.025857, + 0.025936, + 0.026014, + 0.026091, + 0.026168, + 0.026243, + 0.026318, + 0.026392, + 0.026466, + 0.026539, + 0.026612, + 0.026684, + 0.026756, + 0.026828, + 0.0269, + 0.026972, + 0.027044, + 0.027117, + 0.02719, + 0.027263, + 0.027337, + 0.027412, + 0.027487, + 0.027563, + 0.027641, + 0.027719, + 0.027798, + 0.027877, + 0.027958, + 0.02804, + 0.028123, + 0.028207, + 0.028291, + 0.028377, + 0.028463, + 0.02855, + 0.028637, + 0.028725, + 0.028813, + 0.028901, + 0.028989, + 0.029077, + 0.029165, + 0.029252, + 0.029339, + 0.029425, + 0.029509, + 0.029593, + 0.029676, + 0.029758, + 0.029838, + 0.029916, + 0.029993, + 0.030068, + 0.030142, + 0.030214, + 0.030284, + 0.030353, + 0.03042, + 0.030485, + 0.030549, + 0.030611, + 0.030673, + 0.030733, + 0.030792, + 0.03085, + 0.030908, + 0.030965, + 0.031022, + 0.031079, + 0.031136, + 0.031193, + 0.031251, + 0.031309, + 0.031369, + 0.031429, + 0.031491, + 0.031555, + 0.03162, + 0.031687, + 0.031756, + 0.031826, + 0.0319, + 0.031975, + 0.032052, + 0.032132, + 0.032215, + 0.032299, + 0.032386, + 0.032476, + 0.032567, + 0.032661, + 0.032757, + 0.032854, + 0.032954, + 0.033055, + 0.033158, + 0.033261, + 0.033367, + 0.033473, + 0.033579, + 0.033687, + 0.033794, + 0.033902, + 0.03401, + 0.034118, + 0.034225, + 0.034332, + 0.034439, + 0.034545, + 0.03465, + 0.034754, + 0.034858, + 0.03496, + 0.035062, + 0.035163, + 0.035263, + 0.035362, + 0.035461, + 0.035559, + 0.035656, + 0.035753, + 0.03585, + 0.035946, + 0.036043, + 0.03614, + 0.036237, + 0.036334, + 0.036432, + 0.03653, + 0.03663, + 0.03673, + 0.036831, + 0.036933, + 0.037036, + 0.03714, + 0.037246, + 0.037352, + 0.03746, + 0.037569, + 0.037679, + 0.03779, + 0.037902, + 0.038014, + 0.038128, + 0.038242, + 0.038357, + 0.038472, + 0.038587, + 0.038702, + 0.038817, + 0.038932, + 0.039046, + 0.03916, + 0.039272, + 0.039384, + 0.039494, + 0.039604, + 0.039711, + 0.039817, + 0.039921, + 0.040024, + 0.040125, + 0.040223, + 0.04032, + 0.040415, + 0.040508, + 0.040598, + 0.040687, + 0.040774, + 0.04086, + 0.040943, + 0.041025, + 0.041105, + 0.041185, + 0.041263, + 0.04134, + 0.041416, + 0.041491, + 0.041566, + 0.041641, + 0.041716, + 0.041791, + 0.041866, + 0.041942, + 0.042018, + 0.042096, + 0.042174, + 0.042254, + 0.042335, + 0.042417, + 0.042501, + 0.042586, + 0.042674, + 0.042763, + 0.042853, + 0.042946, + 0.04304, + 0.043136, + 0.043234, + 0.043333, + 0.043434, + 0.043537, + 0.043641, + 0.043746, + 0.043852, + 0.04396, + 0.044068, + 0.044177, + 0.044287, + 0.044397, + 0.044508, + 0.04462, + 0.044731, + 0.044842, + 0.044954, + 0.045065, + 0.045176, + 0.045287, + 0.045397, + 0.045506, + 0.045616, + 0.045724, + 0.045832, + 0.045938, + 0.046045, + 0.04615, + 0.046254, + 0.046358, + 0.046461, + 0.046563, + 0.046665, + 0.046766, + 0.046866, + 0.046965, + 0.047064, + 0.047163, + 0.047261, + 0.047359, + 0.047457, + 0.047554, + 0.047652, + 0.047749, + 0.047846, + 0.047944, + 0.048041, + 0.048139, + 0.048237, + 0.048336, + 0.048435, + 0.048534, + 0.048634, + 0.048734, + 0.048835, + 0.048937, + 0.049039, + 0.049142, + 0.049246, + 0.04935, + 0.049455, + 0.049561, + 0.049668, + 0.049776, + 0.049884, + 0.049993, + 0.050103, + 0.050214, + 0.050326, + 0.050438, + 0.050552, + 0.050665, + 0.05078, + 0.050895, + 0.051011, + 0.051128, + 0.051245, + 0.051363, + 0.051482, + 0.0516, + 0.05172, + 0.05184, + 0.05196, + 0.05208, + 0.052201, + 0.052323, + 0.052444, + 0.052566, + 0.052688, + 0.05281, + 0.052933, + 0.053055, + 0.053178, + 0.0533, + 0.053423, + 0.053545, + 0.053668, + 0.05379, + 0.053913, + 0.054035, + 0.054157, + 0.054279, + 0.0544, + 0.054522, + 0.054643, + 0.054764, + 0.054885, + 0.055006, + 0.055127, + 0.055247, + 0.055367, + 0.055487, + 0.055606, + 0.055726, + 0.055845, + 0.055963, + 0.056082, + 0.0562, + 0.056318, + 0.056435, + 0.056552, + 0.056669, + 0.056786, + 0.056901, + 0.057017, + 0.057132, + 0.057247, + 0.057361, + 0.057474, + 0.057587, + 0.057699, + 0.057811, + 0.057922, + 0.058032, + 0.058142, + 0.05825, + 0.058358, + 0.058465, + 0.058571, + 0.058677, + 0.058781, + 0.058884, + 0.058987, + 0.059088, + 0.059189, + 0.059288, + 0.059387, + 0.059484, + 0.059581, + 0.059677, + 0.059772, + 0.059866, + 0.059959, + 0.060052, + 0.060144, + 0.060236, + 0.060327, + 0.060419, + 0.06051, + 0.060601, + 0.060692, + 0.060784, + 0.060876, + 0.060969, + 0.061063, + 0.061157, + 0.061253, + 0.06135, + 0.061449, + 0.061549, + 0.061651, + 0.061754, + 0.06186, + 0.061968, + 0.062078, + 0.06219, + 0.062305, + 0.062422, + 0.062542, + 0.062664, + 0.062789, + 0.062916, + 0.063046, + 0.063178, + 0.063312, + 0.063449, + 0.063588, + 0.063729, + 0.063872, + 0.064017, + 0.064164, + 0.064312, + 0.064462, + 0.064613, + 0.064765, + 0.064918, + 0.065072, + 0.065226, + 0.065381, + 0.065535, + 0.06569, + 0.065845, + 0.065999, + 0.066152, + 0.066305, + 0.066457, + 0.066608, + 0.066758, + 0.066906, + 0.067053, + 0.067199, + 0.067343, + 0.067486, + 0.067626, + 0.067765, + 0.067903, + 0.068038, + 0.068172, + 0.068304, + 0.068435, + 0.068564, + 0.068692, + 0.068818, + 0.068943, + 0.069066, + 0.069189, + 0.069311, + 0.069432, + 0.069552, + 0.069672, + 0.069791, + 0.06991, + 0.070029, + 0.070147, + 0.070266, + 0.070385, + 0.070504, + 0.070623, + 0.070743, + 0.070863, + 0.070984, + 0.071105, + 0.071226, + 0.071348, + 0.071471, + 0.071594, + 0.071718, + 0.071842, + 0.071967, + 0.072092, + 0.072218, + 0.072344, + 0.07247, + 0.072596, + 0.072723, + 0.07285, + 0.072978, + 0.073105, + 0.073233, + 0.073361, + 0.073489, + 0.073617, + 0.073745, + 0.073874, + 0.074002, + 0.074131, + 0.07426, + 0.074389, + 0.074519, + 0.074648, + 0.074778, + 0.074909, + 0.07504, + 0.075171, + 0.075303, + 0.075435, + 0.075568, + 0.075702, + 0.075837, + 0.075973, + 0.076109, + 0.076247, + 0.076385, + 0.076525, + 0.076665, + 0.076807, + 0.07695, + 0.077094, + 0.077239, + 0.077385, + 0.077532, + 0.077681, + 0.07783, + 0.077979, + 0.07813, + 0.078281, + 0.078433, + 0.078585, + 0.078738, + 0.07889, + 0.079043, + 0.079196, + 0.079348, + 0.0795, + 0.079651, + 0.079801, + 0.079951, + 0.0801, + 0.080247, + 0.080393, + 0.080538, + 0.080681, + 0.080823, + 0.080962, + 0.0811, + 0.081236, + 0.081371, + 0.081503, + 0.081633, + 0.081762, + 0.081888, + 0.082013, + 0.082136, + 0.082257, + 0.082377, + 0.082495, + 0.082612, + 0.082727, + 0.082842, + 0.082955, + 0.083068, + 0.08318, + 0.083292, + 0.083404, + 0.083516, + 0.083628, + 0.08374, + 0.083853, + 0.083967, + 0.084081, + 0.084197, + 0.084314, + 0.084432, + 0.084552, + 0.084674, + 0.084797, + 0.084922, + 0.08505, + 0.085179, + 0.085311, + 0.085445, + 0.085581, + 0.085719, + 0.08586, + 0.086003, + 0.086148, + 0.086296, + 0.086446, + 0.086598, + 0.086752, + 0.086908, + 0.087066, + 0.087227, + 0.087389, + 0.087552, + 0.087718, + 0.087884, + 0.088053, + 0.088222, + 0.088393, + 0.088565, + 0.088737, + 0.088911, + 0.089085, + 0.089259, + 0.089435, + 0.08961, + 0.089786, + 0.089961, + 0.090137, + 0.090312, + 0.090487, + 0.090662, + 0.090836, + 0.09101, + 0.091183, + 0.091355, + 0.091526, + 0.091696, + 0.091866, + 0.092033, + 0.0922, + 0.092365, + 0.092529, + 0.092692, + 0.092853, + 0.093012, + 0.09317, + 0.093325, + 0.093479, + 0.093631, + 0.093782, + 0.09393, + 0.094076, + 0.094221, + 0.094363, + 0.094504, + 0.094643, + 0.094779, + 0.094914, + 0.095047, + 0.095179, + 0.095308, + 0.095436, + 0.095563, + 0.095688, + 0.095811, + 0.095934, + 0.096055, + 0.096175, + 0.096294, + 0.096412, + 0.09653, + 0.096647, + 0.096763, + 0.096879, + 0.096995, + 0.097112, + 0.097228, + 0.097344, + 0.097461, + 0.097578, + 0.097696, + 0.097814, + 0.097934, + 0.098055, + 0.098176, + 0.098299, + 0.098424, + 0.09855, + 0.098677, + 0.098806, + 0.098937, + 0.09907, + 0.099204, + 0.09934, + 0.099479, + 0.099619, + 0.099762, + 0.099906, + 0.100053, + 0.100201, + 0.100352, + 0.100505, + 0.10066, + 0.100817, + 0.100975, + 0.101136, + 0.101299, + 0.101464, + 0.10163, + 0.101799, + 0.101969, + 0.102141, + 0.102314, + 0.102489, + 0.102666, + 0.102844, + 0.103023, + 0.103204, + 0.103386, + 0.103569, + 0.103753, + 0.103938, + 0.104124, + 0.10431, + 0.104497, + 0.104685, + 0.104873, + 0.105061, + 0.10525, + 0.105438, + 0.105626, + 0.105814, + 0.106001, + 0.106187, + 0.106373, + 0.106557, + 0.106741, + 0.106923, + 0.107104, + 0.107283, + 0.10746, + 0.107635, + 0.107809, + 0.10798, + 0.108149, + 0.108316, + 0.10848, + 0.108643, + 0.108802, + 0.108959, + 0.109114, + 0.109266, + 0.109416, + 0.109563, + 0.109708, + 0.109851, + 0.109992, + 0.11013, + 0.110267, + 0.110401, + 0.110535, + 0.110666, + 0.110797, + 0.110926, + 0.111055, + 0.111182, + 0.11131, + 0.111437, + 0.111564, + 0.111692, + 0.11182, + 0.111948, + 0.112078, + 0.112208, + 0.112341, + 0.112474, + 0.11261, + 0.112747, + 0.112887, + 0.113028, + 0.113173, + 0.11332, + 0.113469, + 0.113621, + 0.113776, + 0.113934, + 0.114095, + 0.114259, + 0.114426, + 0.114596, + 0.114769, + 0.114944, + 0.115122, + 0.115303, + 0.115487, + 0.115673, + 0.115861, + 0.116051, + 0.116244, + 0.116438, + 0.116634, + 0.116831, + 0.11703, + 0.11723, + 0.117431, + 0.117632, + 0.117835, + 0.118037, + 0.11824, + 0.118443, + 0.118645, + 0.118848, + 0.11905, + 0.119251, + 0.119452, + 0.119652, + 0.119851, + 0.120049, + 0.120246, + 0.120441, + 0.120635, + 0.120828, + 0.121019, + 0.121209, + 0.121397, + 0.121584, + 0.121768, + 0.121951, + 0.122133, + 0.122312, + 0.12249, + 0.122666, + 0.12284, + 0.123013, + 0.123183, + 0.123352, + 0.123519, + 0.123684, + 0.123846, + 0.124007, + 0.124167, + 0.124324, + 0.124479, + 0.124633, + 0.124784, + 0.124934, + 0.125083, + 0.125229, + 0.125374, + 0.125518, + 0.12566, + 0.125801, + 0.12594, + 0.126079, + 0.126217, + 0.126353, + 0.126489, + 0.126625, + 0.12676, + 0.126895, + 0.12703, + 0.127165, + 0.1273, + 0.127436, + 0.127572, + 0.127709, + 0.127847, + 0.127987, + 0.128127, + 0.128269, + 0.128413, + 0.128559, + 0.128707, + 0.128857, + 0.12901, + 0.129165, + 0.129323, + 0.129484, + 0.129648, + 0.129815, + 0.129985, + 0.130158, + 0.130335, + 0.130515, + 0.130698, + 0.130885, + 0.131075, + 0.131269, + 0.131466, + 0.131666, + 0.131869, + 0.132075, + 0.132285, + 0.132497, + 0.132712, + 0.132929, + 0.133148, + 0.13337, + 0.133593, + 0.133818, + 0.134045, + 0.134273, + 0.134501, + 0.134731, + 0.13496, + 0.13519, + 0.13542, + 0.135649, + 0.135878, + 0.136106, + 0.136333, + 0.136559, + 0.136783, + 0.137005, + 0.137226, + 0.137444, + 0.13766, + 0.137874, + 0.138085, + 0.138293, + 0.138498, + 0.138701, + 0.1389, + 0.139096, + 0.139288, + 0.139478, + 0.139664, + 0.139846, + 0.140025, + 0.140201, + 0.140373, + 0.140542, + 0.140708, + 0.14087, + 0.14103, + 0.141186, + 0.14134, + 0.14149, + 0.141638, + 0.141784, + 0.141927, + 0.142068, + 0.142207, + 0.142345, + 0.14248, + 0.142615, + 0.142748, + 0.142881, + 0.143013, + 0.143144, + 0.143275, + 0.143407, + 0.143538, + 0.14367, + 0.143803, + 0.143937, + 0.144072, + 0.144208, + 0.144346, + 0.144486, + 0.144627, + 0.144771, + 0.144917, + 0.145066, + 0.145217, + 0.145371, + 0.145528, + 0.145688, + 0.145851, + 0.146017, + 0.146187, + 0.14636, + 0.146536, + 0.146716, + 0.146899, + 0.147086, + 0.147276, + 0.14747, + 0.147667, + 0.147867, + 0.148071, + 0.148277, + 0.148487, + 0.1487, + 0.148915, + 0.149133, + 0.149353, + 0.149576, + 0.1498, + 0.150027, + 0.150255, + 0.150485, + 0.150716, + 0.150948, + 0.151181, + 0.151415, + 0.151649, + 0.151884, + 0.152118, + 0.152352, + 0.152586, + 0.152819, + 0.153051, + 0.153282, + 0.153512, + 0.153741, + 0.153967, + 0.154192, + 0.154415, + 0.154636, + 0.154854, + 0.15507, + 0.155283, + 0.155494, + 0.155702, + 0.155907, + 0.156108, + 0.156307, + 0.156503, + 0.156696, + 0.156886, + 0.157072, + 0.157256, + 0.157436, + 0.157614, + 0.157789, + 0.15796, + 0.158129, + 0.158296, + 0.15846, + 0.158621, + 0.15878, + 0.158937, + 0.159092, + 0.159245, + 0.159397, + 0.159546, + 0.159695, + 0.159843, + 0.159989, + 0.160135, + 0.16028, + 0.160426, + 0.160571, + 0.160716, + 0.160862, + 0.161009, + 0.161156, + 0.161305, + 0.161455, + 0.161607, + 0.16176, + 0.161915, + 0.162073, + 0.162233, + 0.162395, + 0.162561, + 0.162729, + 0.1629, + 0.163075, + 0.163253, + 0.163434, + 0.163619, + 0.163808, + 0.164, + 0.164197, + 0.164397, + 0.164601, + 0.164809, + 0.165021, + 0.165237, + 0.165457, + 0.165681, + 0.165908, + 0.166139, + 0.166374, + 0.166611, + 0.166852, + 0.167096, + 0.167343, + 0.167592, + 0.167844, + 0.168098, + 0.168353, + 0.16861, + 0.168869, + 0.169128, + 0.169389, + 0.169649, + 0.16991, + 0.170171, + 0.170431, + 0.17069, + 0.170949, + 0.171206, + 0.171461, + 0.171715, + 0.171967, + 0.172216, + 0.172462, + 0.172706, + 0.172946, + 0.173184, + 0.173417, + 0.173647, + 0.173874, + 0.174096, + 0.174314, + 0.174529, + 0.174739, + 0.174944, + 0.175146, + 0.175343, + 0.175536, + 0.175725, + 0.17591, + 0.17609, + 0.176267, + 0.17644, + 0.17661, + 0.176776, + 0.176939, + 0.1771, + 0.177257, + 0.177412, + 0.177565, + 0.177716, + 0.177865, + 0.178013, + 0.178159, + 0.178305, + 0.17845, + 0.178595, + 0.17874, + 0.178885, + 0.179031, + 0.179178, + 0.179326, + 0.179475, + 0.179626, + 0.179779, + 0.179934, + 0.180091, + 0.180251, + 0.180414, + 0.180579, + 0.180748, + 0.180921, + 0.181097, + 0.181276, + 0.181459, + 0.181647, + 0.181838, + 0.182033, + 0.182233, + 0.182436, + 0.182644, + 0.182856, + 0.183072, + 0.183293, + 0.183517, + 0.183745, + 0.183978, + 0.184214, + 0.184454, + 0.184698, + 0.184945, + 0.185196, + 0.18545, + 0.185707, + 0.185967, + 0.186229, + 0.186494, + 0.186762, + 0.187031, + 0.187302, + 0.187575, + 0.187849, + 0.188124, + 0.1884, + 0.188676, + 0.188953, + 0.189229, + 0.189506, + 0.189781, + 0.190056, + 0.19033, + 0.190602, + 0.190873, + 0.191142, + 0.191408, + 0.191672, + 0.191933, + 0.192192, + 0.192447, + 0.192699, + 0.192947, + 0.193192, + 0.193432, + 0.193669, + 0.193902, + 0.19413, + 0.194354, + 0.194573, + 0.194788, + 0.194998, + 0.195204, + 0.195405, + 0.195602, + 0.195794, + 0.195982, + 0.196165, + 0.196345, + 0.196521, + 0.196692, + 0.196861, + 0.197025, + 0.197187, + 0.197346, + 0.197502, + 0.197656, + 0.197808, + 0.197958, + 0.198107, + 0.198255, + 0.198402, + 0.198548, + 0.198695, + 0.198842, + 0.198989, + 0.199138, + 0.199287, + 0.199439, + 0.199592, + 0.199747, + 0.199905, + 0.200066, + 0.20023, + 0.200398, + 0.200569, + 0.200743, + 0.200922, + 0.201105, + 0.201293, + 0.201485, + 0.201681, + 0.201883, + 0.202089, + 0.2023, + 0.202516, + 0.202737, + 0.202962, + 0.203193, + 0.203428, + 0.203668, + 0.203912, + 0.204161, + 0.204414, + 0.20467, + 0.204931, + 0.205195, + 0.205463, + 0.205734, + 0.206008, + 0.206284, + 0.206563, + 0.206844, + 0.207126, + 0.20741, + 0.207695, + 0.207981, + 0.208268, + 0.208555, + 0.208841, + 0.209127, + 0.209413, + 0.209698, + 0.209981, + 0.210262, + 0.210542, + 0.21082, + 0.211095, + 0.211367, + 0.211636, + 0.211902, + 0.212165, + 0.212424, + 0.212679, + 0.21293, + 0.213177, + 0.21342, + 0.213658, + 0.213892, + 0.214121, + 0.214346, + 0.214566, + 0.214782, + 0.214993, + 0.215199, + 0.215401, + 0.215598, + 0.215791, + 0.21598, + 0.216165, + 0.216345, + 0.216523, + 0.216696, + 0.216867, + 0.217034, + 0.217199, + 0.217361, + 0.21752, + 0.217678, + 0.217835, + 0.217989, + 0.218143, + 0.218297, + 0.21845, + 0.218603, + 0.218757, + 0.218911, + 0.219066, + 0.219223, + 0.219381, + 0.219542, + 0.219705, + 0.219871, + 0.220039, + 0.220211, + 0.220387, + 0.220566, + 0.220749, + 0.220936, + 0.221128, + 0.221324, + 0.221525, + 0.221731, + 0.221942, + 0.222158, + 0.222379, + 0.222606, + 0.222837, + 0.223074, + 0.223316, + 0.223563, + 0.223815, + 0.224071, + 0.224333, + 0.2246, + 0.224871, + 0.225146, + 0.225425, + 0.225708, + 0.225995, + 0.226285, + 0.226578, + 0.226874, + 0.227173, + 0.227473, + 0.227776, + 0.22808, + 0.228385, + 0.228691, + 0.228998, + 0.229305, + 0.229612, + 0.229918, + 0.230224, + 0.230528, + 0.230832, + 0.231133, + 0.231432, + 0.231729, + 0.232024, + 0.232315, + 0.232603, + 0.232888, + 0.233169, + 0.233446, + 0.233719, + 0.233988, + 0.234252, + 0.234511, + 0.234766, + 0.235016, + 0.23526, + 0.2355, + 0.235734, + 0.235963, + 0.236188, + 0.236407, + 0.236621, + 0.236829, + 0.237034, + 0.237233, + 0.237428, + 0.237618, + 0.237804, + 0.237986, + 0.238164, + 0.238339, + 0.238511, + 0.238679, + 0.238845, + 0.239009, + 0.239171, + 0.239331, + 0.23949, + 0.239648, + 0.239806, + 0.239963, + 0.240121, + 0.24028, + 0.240439, + 0.2406, + 0.240763, + 0.240928, + 0.241096, + 0.241266, + 0.24144, + 0.241617, + 0.241798, + 0.241983, + 0.242173, + 0.242367, + 0.242566, + 0.24277, + 0.24298, + 0.243195, + 0.243416, + 0.243642, + 0.243874, + 0.244112, + 0.244356, + 0.244606, + 0.244861, + 0.245122, + 0.245389, + 0.245662, + 0.24594, + 0.246223, + 0.246511, + 0.246804, + 0.247102, + 0.247403, + 0.247709, + 0.248019, + 0.248332, + 0.248648, + 0.248966, + 0.249287, + 0.24961, + 0.249935, + 0.250261, + 0.250588, + 0.250915, + 0.251242, + 0.251569, + 0.251895, + 0.252221, + 0.252544, + 0.252866, + 0.253186, + 0.253504, + 0.253818, + 0.25413, + 0.254438, + 0.254743, + 0.255043, + 0.25534, + 0.255632, + 0.255919, + 0.256202, + 0.256479, + 0.256752, + 0.257019, + 0.257281, + 0.257537, + 0.257789, + 0.258034, + 0.258274, + 0.258509, + 0.258739, + 0.258963, + 0.259182, + 0.259396, + 0.259605, + 0.25981, + 0.26001, + 0.260206, + 0.260397, + 0.260585, + 0.26077, + 0.260951, + 0.26113, + 0.261305, + 0.261479, + 0.26165, + 0.26182, + 0.261989, + 0.262157, + 0.262325, + 0.262492, + 0.26266, + 0.262828, + 0.262997, + 0.263167, + 0.263339, + 0.263514, + 0.26369, + 0.26387, + 0.264052, + 0.264238, + 0.264428, + 0.264622, + 0.264819, + 0.265022, + 0.265229, + 0.265441, + 0.265658, + 0.265881, + 0.266109, + 0.266342, + 0.266582, + 0.266826, + 0.267077, + 0.267333, + 0.267595, + 0.267863, + 0.268136, + 0.268415, + 0.268699, + 0.268988, + 0.269282, + 0.269581, + 0.269885, + 0.270193, + 0.270505, + 0.270821, + 0.271141, + 0.271463, + 0.271789, + 0.272117, + 0.272447, + 0.272779, + 0.273112, + 0.273446, + 0.273781, + 0.274116, + 0.274451, + 0.274785, + 0.275118, + 0.275449, + 0.275779, + 0.276106, + 0.276431, + 0.276753, + 0.277072, + 0.277387, + 0.277698, + 0.278004, + 0.278307, + 0.278604, + 0.278897, + 0.279184, + 0.279466, + 0.279742, + 0.280013, + 0.280278, + 0.280537, + 0.28079, + 0.281038, + 0.281279, + 0.281515, + 0.281745, + 0.281969, + 0.282188, + 0.282402, + 0.28261, + 0.282813, + 0.283012, + 0.283206, + 0.283395, + 0.283581, + 0.283764, + 0.283943, + 0.284119, + 0.284292, + 0.284464, + 0.284633, + 0.284801, + 0.284969, + 0.285135, + 0.285302, + 0.285468, + 0.285635, + 0.285803, + 0.285973, + 0.286145, + 0.286318, + 0.286494, + 0.286673, + 0.286856, + 0.287042, + 0.287232, + 0.287426, + 0.287625, + 0.287829, + 0.288038, + 0.288252, + 0.288471, + 0.288696, + 0.288927, + 0.289164, + 0.289407, + 0.289656, + 0.289911, + 0.290172, + 0.290439, + 0.290713, + 0.290992, + 0.291277, + 0.291567, + 0.291864, + 0.292165, + 0.292472, + 0.292784, + 0.293101, + 0.293422, + 0.293747, + 0.294076, + 0.294409, + 0.294745, + 0.295083, + 0.295424, + 0.295768, + 0.296113, + 0.296459, + 0.296806, + 0.297153, + 0.297501, + 0.297848, + 0.298195, + 0.29854, + 0.298883, + 0.299225, + 0.299564, + 0.299901, + 0.300234, + 0.300564, + 0.30089, + 0.301212, + 0.301529, + 0.301842, + 0.30215, + 0.302453, + 0.302751, + 0.303043, + 0.303329, + 0.30361, + 0.303885, + 0.304154, + 0.304417, + 0.304673, + 0.304924, + 0.305169, + 0.305408, + 0.305641, + 0.305869, + 0.30609, + 0.306307, + 0.306519, + 0.306725, + 0.306927, + 0.307125, + 0.307318, + 0.307508, + 0.307695, + 0.307879, + 0.30806, + 0.308238, + 0.308415, + 0.308591, + 0.308766, + 0.30894, + 0.309113, + 0.309287, + 0.309462, + 0.309638, + 0.309815, + 0.309994, + 0.310175, + 0.310359, + 0.310546, + 0.310736, + 0.31093, + 0.311128, + 0.311331, + 0.311537, + 0.311749, + 0.311966, + 0.312188, + 0.312416, + 0.312649, + 0.312888, + 0.313133, + 0.313385, + 0.313642, + 0.313906, + 0.314175, + 0.314451, + 0.314733, + 0.315022, + 0.315316, + 0.315616, + 0.315921, + 0.316233, + 0.316549, + 0.316871, + 0.317197, + 0.317528, + 0.317864, + 0.318203, + 0.318546, + 0.318892, + 0.319241, + 0.319592, + 0.319946, + 0.320301, + 0.320658, + 0.321016, + 0.321374, + 0.321732, + 0.32209, + 0.322448, + 0.322804, + 0.323158, + 0.323511, + 0.323861, + 0.324209, + 0.324553, + 0.324894, + 0.325231, + 0.325564, + 0.325892, + 0.326216, + 0.326534, + 0.326848, + 0.327156, + 0.327458, + 0.327754, + 0.328044, + 0.328329, + 0.328607, + 0.328879, + 0.329145, + 0.329404, + 0.329657, + 0.329905, + 0.330146, + 0.330381, + 0.330611, + 0.330835, + 0.331054, + 0.331268, + 0.331477, + 0.331682, + 0.331883, + 0.332079, + 0.332273, + 0.332463, + 0.33265, + 0.332835, + 0.333019, + 0.3332, + 0.333381, + 0.333561, + 0.333741, + 0.333922, + 0.334103, + 0.334285, + 0.334468, + 0.334654, + 0.334842, + 0.335032, + 0.335226, + 0.335423, + 0.335624, + 0.335828, + 0.336038, + 0.336252, + 0.33647, + 0.336694, + 0.336924, + 0.337158, + 0.337399, + 0.337645, + 0.337898, + 0.338156, + 0.33842, + 0.338691, + 0.338967, + 0.33925, + 0.339538, + 0.339833, + 0.340133, + 0.340438, + 0.34075, + 0.341066, + 0.341387, + 0.341713, + 0.342043, + 0.342378, + 0.342716, + 0.343058, + 0.343403, + 0.343751, + 0.344102, + 0.344454, + 0.344809, + 0.345164, + 0.345521, + 0.345878, + 0.346235, + 0.346592, + 0.346948, + 0.347304, + 0.347658, + 0.34801, + 0.34836, + 0.348707, + 0.349051, + 0.349393, + 0.34973, + 0.350064, + 0.350393, + 0.350718, + 0.351038, + 0.351353, + 0.351662, + 0.351967, + 0.352265, + 0.352558, + 0.352844, + 0.353125, + 0.3534, + 0.353668, + 0.353931, + 0.354187, + 0.354437, + 0.354681, + 0.35492, + 0.355153, + 0.35538, + 0.355602, + 0.355818, + 0.35603, + 0.356238, + 0.356441, + 0.356639, + 0.356835, + 0.357027, + 0.357215, + 0.357402, + 0.357586, + 0.357768, + 0.357949, + 0.358129, + 0.358308, + 0.358487, + 0.358667, + 0.358847, + 0.359028, + 0.359211, + 0.359396, + 0.359583, + 0.359774, + 0.359967, + 0.360164, + 0.360365, + 0.36057, + 0.36078, + 0.360994, + 0.361214, + 0.361438, + 0.361669, + 0.361905, + 0.362147, + 0.362395, + 0.362649, + 0.362909, + 0.363175, + 0.363448, + 0.363727, + 0.364012, + 0.364303, + 0.3646, + 0.364904, + 0.365212, + 0.365527, + 0.365847, + 0.366172, + 0.366501, + 0.366836, + 0.367174, + 0.367517, + 0.367864, + 0.368213, + 0.368566, + 0.368921, + 0.369279, + 0.369638, + 0.369999, + 0.370361, + 0.370724, + 0.371086, + 0.371449, + 0.371811, + 0.372172, + 0.372532, + 0.37289, + 0.373246, + 0.373599, + 0.37395, + 0.374297, + 0.374641, + 0.374981, + 0.375316, + 0.375648, + 0.375975, + 0.376297, + 0.376614, + 0.376925, + 0.377231, + 0.377532, + 0.377827, + 0.378116, + 0.3784, + 0.378678, + 0.37895, + 0.379216, + 0.379476, + 0.379731, + 0.379981, + 0.380225, + 0.380464, + 0.380698, + 0.380927, + 0.381152, + 0.381373, + 0.381589, + 0.381802, + 0.382012, + 0.382218, + 0.382422, + 0.382624, + 0.382824, + 0.383022, + 0.383219, + 0.383416, + 0.383612, + 0.383809, + 0.384006, + 0.384204, + 0.384403, + 0.384604, + 0.384808, + 0.385013, + 0.385222, + 0.385434, + 0.38565, + 0.38587, + 0.386093, + 0.386322, + 0.386555, + 0.386793, + 0.387037, + 0.387285, + 0.38754, + 0.3878, + 0.388066, + 0.388338, + 0.388616, + 0.3889, + 0.38919, + 0.389486, + 0.389788, + 0.390096, + 0.390409, + 0.390729, + 0.391054, + 0.391384, + 0.39172, + 0.39206, + 0.392406, + 0.392755, + 0.393109, + 0.393467, + 0.393828, + 0.394192, + 0.39456, + 0.39493, + 0.395301, + 0.395675, + 0.39605, + 0.396426, + 0.396803, + 0.39718, + 0.397556, + 0.397933, + 0.398308, + 0.398682, + 0.399054, + 0.399424, + 0.399792, + 0.400157, + 0.400519, + 0.400878, + 0.401233, + 0.401584, + 0.401931, + 0.402273, + 0.402611, + 0.402944, + 0.403272, + 0.403595, + 0.403913, + 0.404225, + 0.404532, + 0.404834, + 0.40513, + 0.40542, + 0.405705, + 0.405985, + 0.40626, + 0.406529, + 0.406794, + 0.407053, + 0.407308, + 0.407558, + 0.407805, + 0.408047, + 0.408286, + 0.408521, + 0.408753, + 0.408982, + 0.409209, + 0.409434, + 0.409657, + 0.409878, + 0.410099, + 0.410319, + 0.410539, + 0.41076, + 0.41098, + 0.411202, + 0.411425, + 0.41165, + 0.411877, + 0.412106, + 0.412338, + 0.412573, + 0.412811, + 0.413053, + 0.4133, + 0.41355, + 0.413805, + 0.414065, + 0.414329, + 0.414599, + 0.414874, + 0.415154, + 0.41544, + 0.415731, + 0.416029, + 0.416331, + 0.41664, + 0.416954, + 0.417274, + 0.417599, + 0.41793, + 0.418266, + 0.418607, + 0.418953, + 0.419303, + 0.419659, + 0.420018, + 0.420382, + 0.420749, + 0.42112, + 0.421494, + 0.421871, + 0.422251, + 0.422632, + 0.423015, + 0.4234, + 0.423786, + 0.424172, + 0.424559, + 0.424946, + 0.425332, + 0.425718, + 0.426103, + 0.426486, + 0.426867, + 0.427246, + 0.427623, + 0.427997, + 0.428367, + 0.428735, + 0.429098, + 0.429458, + 0.429813, + 0.430165, + 0.430511, + 0.430853, + 0.43119, + 0.431522, + 0.431849, + 0.432171, + 0.432487, + 0.432798, + 0.433104, + 0.433405, + 0.433701, + 0.433992, + 0.434277, + 0.434558, + 0.434834, + 0.435106, + 0.435373, + 0.435637, + 0.435896, + 0.436152, + 0.436404, + 0.436653, + 0.436899, + 0.437143, + 0.437385, + 0.437624, + 0.437863, + 0.4381, + 0.438336, + 0.438571, + 0.438807, + 0.439042, + 0.439279, + 0.439516, + 0.439754, + 0.439994, + 0.440236, + 0.44048, + 0.440727, + 0.440976, + 0.441229, + 0.441485, + 0.441745, + 0.442008, + 0.442276, + 0.442548, + 0.442824, + 0.443106, + 0.443392, + 0.443682, + 0.443978, + 0.444279, + 0.444585, + 0.444896, + 0.445212, + 0.445533, + 0.44586, + 0.446191, + 0.446527, + 0.446868, + 0.447213, + 0.447563, + 0.447918, + 0.448276, + 0.448638, + 0.449003, + 0.449372, + 0.449745, + 0.45012, + 0.450497, + 0.450877, + 0.451258, + 0.451641, + 0.452026, + 0.452411, + 0.452798, + 0.453184, + 0.45357, + 0.453956, + 0.454342, + 0.454726, + 0.455109, + 0.45549, + 0.45587, + 0.456247, + 0.456622, + 0.456994, + 0.457363, + 0.457728, + 0.45809, + 0.458449, + 0.458803, + 0.459153, + 0.459499, + 0.459841, + 0.460178, + 0.460511, + 0.460839, + 0.461162, + 0.46148, + 0.461794, + 0.462103, + 0.462408, + 0.462708, + 0.463003, + 0.463294, + 0.463581, + 0.463864, + 0.464143, + 0.464419, + 0.464691, + 0.464959, + 0.465225, + 0.465488, + 0.465749, + 0.466007, + 0.466263, + 0.466518, + 0.466772, + 0.467024, + 0.467276, + 0.467528, + 0.46778, + 0.468032, + 0.468284, + 0.468538, + 0.468793, + 0.46905, + 0.469308, + 0.469569, + 0.469832, + 0.470098, + 0.470366, + 0.470639, + 0.470914, + 0.471193, + 0.471477, + 0.471764, + 0.472055, + 0.472351, + 0.472651, + 0.472956, + 0.473265, + 0.473579, + 0.473898, + 0.474221, + 0.474549, + 0.474881, + 0.475218, + 0.47556, + 0.475905, + 0.476255, + 0.47661, + 0.476968, + 0.477329, + 0.477695, + 0.478064, + 0.478436, + 0.478811, + 0.479188, + 0.479569, + 0.479951, + 0.480335, + 0.480721, + 0.481109, + 0.481497, + 0.481887, + 0.482276, + 0.482667, + 0.483057, + 0.483446, + 0.483836, + 0.484224, + 0.484611, + 0.484997, + 0.485381, + 0.485763, + 0.486142, + 0.48652, + 0.486895, + 0.487267, + 0.487636, + 0.488002, + 0.488364, + 0.488723, + 0.489079, + 0.48943, + 0.489778, + 0.490122, + 0.490462, + 0.490798, + 0.491131, + 0.491459, + 0.491783, + 0.492104, + 0.492421, + 0.492734, + 0.493043, + 0.493349, + 0.493652, + 0.493951, + 0.494247, + 0.494541, + 0.494832, + 0.495121, + 0.495407, + 0.495691, + 0.495974, + 0.496255, + 0.496535, + 0.496814, + 0.497092, + 0.49737, + 0.497648, + 0.497926, + 0.498204, + 0.498483, + 0.498763, + 0.499044, + 0.499327, + 0.499611, + 0.499898, + 0.500187, + 0.500478, + 0.500772, + 0.501068, + 0.501368, + 0.501671, + 0.501977, + 0.502287, + 0.5026, + 0.502918, + 0.503239, + 0.503564, + 0.503892, + 0.504225, + 0.504562, + 0.504902, + 0.505247, + 0.505595, + 0.505947, + 0.506303, + 0.506663, + 0.507026, + 0.507392, + 0.507762, + 0.508135, + 0.50851, + 0.508889, + 0.50927, + 0.509653, + 0.510039, + 0.510427, + 0.510816, + 0.511207, + 0.511599, + 0.511992, + 0.512386, + 0.512781, + 0.513175, + 0.51357, + 0.513965, + 0.514359, + 0.514752, + 0.515145, + 0.515536, + 0.515926, + 0.516315, + 0.516701, + 0.517086, + 0.517468, + 0.517849, + 0.518226, + 0.518601, + 0.518974, + 0.519343, + 0.519709, + 0.520073, + 0.520433, + 0.520789, + 0.521143, + 0.521493, + 0.52184, + 0.522184, + 0.522524, + 0.522861, + 0.523195, + 0.523525, + 0.523853, + 0.524177, + 0.524499, + 0.524818, + 0.525134, + 0.525448, + 0.525759, + 0.526068, + 0.526375, + 0.52668, + 0.526984, + 0.527287, + 0.527588, + 0.527888, + 0.528187, + 0.528486, + 0.528785, + 0.529083, + 0.529381, + 0.52968, + 0.52998, + 0.53028, + 0.530581, + 0.530883, + 0.531187, + 0.531492, + 0.5318, + 0.532109, + 0.53242, + 0.532733, + 0.533049, + 0.533368, + 0.533689, + 0.534013, + 0.53434, + 0.53467, + 0.535003, + 0.535339, + 0.535678, + 0.53602, + 0.536365, + 0.536713, + 0.537064, + 0.537419, + 0.537776, + 0.538136, + 0.538499, + 0.538865, + 0.539233, + 0.539604, + 0.539977, + 0.540353, + 0.54073, + 0.541109, + 0.541491, + 0.541873, + 0.542257, + 0.542643, + 0.543029, + 0.543416, + 0.543804, + 0.544192, + 0.544581, + 0.54497, + 0.545358, + 0.545747, + 0.546134, + 0.546522, + 0.546908, + 0.547293, + 0.547677, + 0.54806, + 0.548441, + 0.54882, + 0.549198, + 0.549574, + 0.549947, + 0.550319, + 0.550688, + 0.551055, + 0.55142, + 0.551782, + 0.552142, + 0.552499, + 0.552855, + 0.553207, + 0.553558, + 0.553905, + 0.554251, + 0.554594, + 0.554935, + 0.555273, + 0.55561, + 0.555944, + 0.556276, + 0.556607, + 0.556935, + 0.557262, + 0.557587, + 0.55791, + 0.558232, + 0.558553, + 0.558873, + 0.559192, + 0.559509, + 0.559827, + 0.560143, + 0.56046, + 0.560776, + 0.561092, + 0.561409, + 0.561725, + 0.562042, + 0.56236, + 0.562679, + 0.562998, + 0.563319, + 0.563641, + 0.563964, + 0.564288, + 0.564615, + 0.564942, + 0.565272, + 0.565603, + 0.565937, + 0.566272, + 0.566609, + 0.566949, + 0.567291, + 0.567635, + 0.567981, + 0.56833, + 0.568681, + 0.569034, + 0.56939, + 0.569748, + 0.570108, + 0.57047, + 0.570834, + 0.571201, + 0.571569, + 0.571939, + 0.572311, + 0.572684, + 0.57306, + 0.573436, + 0.573814, + 0.574193, + 0.574573, + 0.574954, + 0.575335, + 0.575718, + 0.576101, + 0.576484, + 0.576867, + 0.577251, + 0.577634, + 0.578018, + 0.578401, + 0.578783, + 0.579165, + 0.579547, + 0.579927, + 0.580307, + 0.580685, + 0.581063, + 0.581439, + 0.581813, + 0.582187, + 0.582559, + 0.582929, + 0.583298, + 0.583665, + 0.58403, + 0.584394, + 0.584756, + 0.585117, + 0.585476, + 0.585833, + 0.586189, + 0.586544, + 0.586898, + 0.58725, + 0.587601, + 0.587951, + 0.5883, + 0.588648, + 0.588995, + 0.589341, + 0.589686, + 0.590031, + 0.590375, + 0.590718, + 0.591061, + 0.591403, + 0.591746, + 0.592087, + 0.592429, + 0.592771, + 0.593113, + 0.593454, + 0.593796, + 0.594139, + 0.594481, + 0.594825, + 0.595169, + 0.595513, + 0.595859, + 0.596205, + 0.596552, + 0.5969, + 0.597249, + 0.5976, + 0.597951, + 0.598304, + 0.598657, + 0.599013, + 0.599369, + 0.599727, + 0.600085, + 0.600446, + 0.600807, + 0.60117, + 0.601535, + 0.601901, + 0.602268, + 0.602636, + 0.603006, + 0.603377, + 0.60375, + 0.604123, + 0.604498, + 0.604874, + 0.605252, + 0.60563, + 0.606009, + 0.606389, + 0.60677, + 0.607152, + 0.607534, + 0.607917, + 0.608301, + 0.608685, + 0.609069, + 0.609454, + 0.609838, + 0.610223, + 0.610608, + 0.610993, + 0.611378, + 0.611762, + 0.612146, + 0.61253, + 0.612914, + 0.613297, + 0.613679, + 0.614061, + 0.614442, + 0.614823, + 0.615203, + 0.615582, + 0.615961, + 0.616338, + 0.616715, + 0.617091, + 0.617466, + 0.617841, + 0.618214, + 0.618587, + 0.61896, + 0.619331, + 0.619702, + 0.620072, + 0.620442, + 0.620812, + 0.621181, + 0.621549, + 0.621918, + 0.622286, + 0.622654, + 0.623021, + 0.623389, + 0.623756, + 0.624124, + 0.624491, + 0.624859, + 0.625226, + 0.625594, + 0.625962, + 0.62633, + 0.626698, + 0.627066, + 0.627434, + 0.627803, + 0.628172, + 0.628541, + 0.628911, + 0.62928, + 0.629651, + 0.630021, + 0.630392, + 0.630764, + 0.631135, + 0.631508, + 0.63188, + 0.632253, + 0.632626, + 0.633, + 0.633374, + 0.633749, + 0.634124, + 0.634499, + 0.634875, + 0.63525, + 0.635627, + 0.636003, + 0.63638, + 0.636757, + 0.637134, + 0.637512, + 0.63789, + 0.638268, + 0.638646, + 0.639024, + 0.639403, + 0.639782, + 0.640161, + 0.64054, + 0.640919, + 0.641298, + 0.641677, + 0.642056, + 0.642435, + 0.642814, + 0.643194, + 0.643573, + 0.643952, + 0.64433, + 0.644709, + 0.645087, + 0.645466, + 0.645844, + 0.646222, + 0.6466, + 0.646977, + 0.647355, + 0.647732, + 0.648109, + 0.648486, + 0.648863, + 0.64924, + 0.649616, + 0.649992, + 0.650369, + 0.650745, + 0.651121, + 0.651497, + 0.651874, + 0.65225, + 0.652626, + 0.653003, + 0.653379, + 0.653756, + 0.654133, + 0.654511, + 0.654889, + 0.655267, + 0.655646, + 0.656026, + 0.656406, + 0.656786, + 0.657167, + 0.657549, + 0.657932, + 0.658315, + 0.658699, + 0.659084, + 0.659469, + 0.659854, + 0.66024, + 0.660627, + 0.661014, + 0.661401, + 0.661789, + 0.662177, + 0.662565, + 0.662953, + 0.663342, + 0.66373, + 0.664119, + 0.664507, + 0.664896, + 0.665284, + 0.665672, + 0.66606, + 0.666448, + 0.666835, + 0.667222, + 0.667608, + 0.667994, + 0.66838, + 0.668765, + 0.669149, + 0.669533, + 0.669916, + 0.670298, + 0.670679, + 0.67106, + 0.67144, + 0.671819, + 0.672197, + 0.672575, + 0.672951, + 0.673327, + 0.673702, + 0.674077, + 0.67445, + 0.674823, + 0.675195, + 0.675567, + 0.675938, + 0.676309, + 0.676679, + 0.677049, + 0.677418, + 0.677787, + 0.678155, + 0.678523, + 0.678892, + 0.679259, + 0.679627, + 0.679995, + 0.680362, + 0.680729, + 0.681097, + 0.681464, + 0.681832, + 0.6822, + 0.682568, + 0.682936, + 0.683304, + 0.683674, + 0.684043, + 0.684414, + 0.684785, + 0.685157, + 0.68553, + 0.685904, + 0.686279, + 0.686655, + 0.687033, + 0.687412, + 0.687792, + 0.688173, + 0.688556, + 0.68894, + 0.689326, + 0.689713, + 0.690101, + 0.690491, + 0.690882, + 0.691274, + 0.691668, + 0.692063, + 0.692459, + 0.692856, + 0.693255, + 0.693655, + 0.694055, + 0.694457, + 0.69486, + 0.695264, + 0.695669, + 0.696075, + 0.696482, + 0.696889, + 0.697296, + 0.697704, + 0.698113, + 0.698521, + 0.69893, + 0.699339, + 0.699747, + 0.700155, + 0.700563, + 0.70097, + 0.701377, + 0.701783, + 0.702188, + 0.702592, + 0.702995, + 0.703397, + 0.703797, + 0.704197, + 0.704595, + 0.704992, + 0.705387, + 0.705781, + 0.706174, + 0.706565, + 0.706955, + 0.707343, + 0.70773, + 0.708116, + 0.7085, + 0.708882, + 0.709264, + 0.709643, + 0.710022, + 0.710399, + 0.710774, + 0.711149, + 0.711522, + 0.711894, + 0.712265, + 0.712634, + 0.713003, + 0.713371, + 0.713738, + 0.714104, + 0.71447, + 0.714836, + 0.715201, + 0.715565, + 0.71593, + 0.716294, + 0.716659, + 0.717024, + 0.717389, + 0.717755, + 0.718121, + 0.718488, + 0.718855, + 0.719224, + 0.719594, + 0.719964, + 0.720336, + 0.72071, + 0.721085, + 0.721462, + 0.72184, + 0.722221, + 0.722604, + 0.722989, + 0.723377, + 0.723766, + 0.724159, + 0.724554, + 0.724952, + 0.725352, + 0.725756, + 0.726162, + 0.72657, + 0.726982, + 0.727396, + 0.727812, + 0.728231, + 0.728652, + 0.729076, + 0.729501, + 0.729929, + 0.730358, + 0.730789, + 0.731222, + 0.731655, + 0.73209, + 0.732526, + 0.732962, + 0.733399, + 0.733836, + 0.734274, + 0.734711, + 0.735149, + 0.735586, + 0.736022, + 0.736457, + 0.736892, + 0.737325, + 0.737757, + 0.738187, + 0.738615, + 0.739041, + 0.739466, + 0.739888, + 0.740307, + 0.740724, + 0.741139, + 0.741551, + 0.74196, + 0.742366, + 0.74277, + 0.743171, + 0.743569, + 0.743965, + 0.744358, + 0.744748, + 0.745136, + 0.745522, + 0.745905, + 0.746286, + 0.746664, + 0.747041, + 0.747415, + 0.747788, + 0.748159, + 0.748529, + 0.748896, + 0.749263, + 0.749628, + 0.749992, + 0.750355, + 0.750717, + 0.751078, + 0.751439, + 0.751799, + 0.752159, + 0.752519, + 0.752879, + 0.753239, + 0.7536, + 0.753961, + 0.754323, + 0.754686, + 0.75505, + 0.755415, + 0.755782, + 0.75615, + 0.75652, + 0.756892, + 0.757265, + 0.757641, + 0.758019, + 0.7584, + 0.758783, + 0.759169, + 0.759558, + 0.75995, + 0.760344, + 0.760741, + 0.761142, + 0.761545, + 0.761952, + 0.762362, + 0.762774, + 0.76319, + 0.763609, + 0.76403, + 0.764454, + 0.764881, + 0.76531, + 0.765742, + 0.766176, + 0.766612, + 0.76705, + 0.76749, + 0.767931, + 0.768374, + 0.768818, + 0.769263, + 0.769708, + 0.770154, + 0.770601, + 0.771047, + 0.771494, + 0.77194, + 0.772385, + 0.772829, + 0.773273, + 0.773714, + 0.774155, + 0.774593, + 0.775029, + 0.775463, + 0.775894, + 0.776323, + 0.776749, + 0.777172, + 0.777591, + 0.778007, + 0.77842, + 0.778829, + 0.779235, + 0.779637, + 0.780035, + 0.78043, + 0.780821, + 0.781208, + 0.781592, + 0.781973, + 0.78235, + 0.782724, + 0.783095, + 0.783462, + 0.783827, + 0.784189, + 0.784547, + 0.784904, + 0.785257, + 0.785609, + 0.785958, + 0.786305, + 0.786651, + 0.786994, + 0.787336, + 0.787677, + 0.788017, + 0.788355, + 0.788694, + 0.789031, + 0.789369, + 0.789706, + 0.790044, + 0.790383, + 0.790722, + 0.791062, + 0.791403, + 0.791746, + 0.792091, + 0.792438, + 0.792786, + 0.793137, + 0.793491, + 0.793848, + 0.794207, + 0.794569, + 0.794935, + 0.795304, + 0.795677, + 0.796053, + 0.796433, + 0.796817, + 0.797204, + 0.797596, + 0.797991, + 0.79839, + 0.798793, + 0.7992, + 0.799611, + 0.800025, + 0.800443, + 0.800864, + 0.801289, + 0.801716, + 0.802147, + 0.80258, + 0.803016, + 0.803454, + 0.803894, + 0.804336, + 0.804779, + 0.805224, + 0.805669, + 0.806116, + 0.806562, + 0.807008, + 0.807454, + 0.8079, + 0.808344, + 0.808788, + 0.80923, + 0.80967, + 0.810108, + 0.810543, + 0.810976, + 0.811406, + 0.811833, + 0.812257, + 0.812677, + 0.813094, + 0.813506, + 0.813915, + 0.81432, + 0.814721, + 0.815117, + 0.81551, + 0.815898, + 0.816282, + 0.816662, + 0.817038, + 0.81741, + 0.817779, + 0.818143, + 0.818504, + 0.818861, + 0.819215, + 0.819566, + 0.819913, + 0.820258, + 0.8206, + 0.82094, + 0.821277, + 0.821612, + 0.821946, + 0.822277, + 0.822608, + 0.822937, + 0.823265, + 0.823593, + 0.82392, + 0.824247, + 0.824574, + 0.824902, + 0.82523, + 0.825559, + 0.825889, + 0.826221, + 0.826554, + 0.826889, + 0.827227, + 0.827567, + 0.827909, + 0.828254, + 0.828602, + 0.828953, + 0.829308, + 0.829666, + 0.830028, + 0.830394, + 0.830764, + 0.831138, + 0.831516, + 0.831898, + 0.832285, + 0.832677, + 0.833073, + 0.833474, + 0.83388, + 0.834291, + 0.834706, + 0.835126, + 0.835551, + 0.835981, + 0.836415, + 0.836853, + 0.837296, + 0.837743, + 0.838194, + 0.838648, + 0.839106, + 0.839568, + 0.840032, + 0.840499, + 0.840968, + 0.841439, + 0.841912, + 0.842386, + 0.842861, + 0.843337, + 0.843813, + 0.844289, + 0.844764, + 0.845239, + 0.845713, + 0.846185, + 0.846656, + 0.847124, + 0.84759, + 0.848053, + 0.848513, + 0.84897, + 0.849423, + 0.849872, + 0.850318, + 0.850759, + 0.851195, + 0.851628, + 0.852055, + 0.852478, + 0.852896, + 0.85331, + 0.853718, + 0.854122, + 0.854522, + 0.854916, + 0.855307, + 0.855693, + 0.856075, + 0.856453, + 0.856827, + 0.857197, + 0.857565, + 0.857929, + 0.85829, + 0.858648, + 0.859004, + 0.859358, + 0.85971, + 0.86006, + 0.860409, + 0.860758, + 0.861105, + 0.861452, + 0.861799, + 0.862147, + 0.862495, + 0.862844, + 0.863194, + 0.863546, + 0.863901, + 0.864257, + 0.864616, + 0.864977, + 0.865342, + 0.86571, + 0.866082, + 0.866458, + 0.866837, + 0.867221, + 0.867608, + 0.868001, + 0.868397, + 0.868798, + 0.869204, + 0.869614, + 0.870029, + 0.870449, + 0.870873, + 0.871302, + 0.871736, + 0.872174, + 0.872616, + 0.873063, + 0.873515, + 0.87397, + 0.874429, + 0.874893, + 0.87536, + 0.87583, + 0.876304, + 0.876781, + 0.877261, + 0.877743, + 0.878228, + 0.878714, + 0.879202, + 0.879691, + 0.88018, + 0.880671, + 0.881161, + 0.881651, + 0.88214, + 0.882628, + 0.883115, + 0.883601, + 0.884084, + 0.884565, + 0.885044, + 0.88552, + 0.885993, + 0.886463, + 0.886929, + 0.887392, + 0.887851, + 0.888307, + 0.888758, + 0.889205, + 0.889649, + 0.890087, + 0.890522, + 0.890952, + 0.891377, + 0.891798, + 0.892214, + 0.892626, + 0.893032, + 0.893435, + 0.893833, + 0.894226, + 0.894615, + 0.895, + 0.895381, + 0.895759, + 0.896132, + 0.896503, + 0.89687, + 0.897234, + 0.897596, + 0.897956, + 0.898313, + 0.898669, + 0.899023, + 0.899376, + 0.899729, + 0.900081, + 0.900432, + 0.900784, + 0.901136, + 0.901489, + 0.901842, + 0.902197, + 0.902554, + 0.902912, + 0.903273, + 0.903636, + 0.904002, + 0.904371, + 0.904743, + 0.905119, + 0.905499, + 0.905883, + 0.906271, + 0.906664, + 0.907061, + 0.907464, + 0.907871, + 0.908283, + 0.908701, + 0.909123, + 0.909551, + 0.909985, + 0.910423, + 0.910867, + 0.911315, + 0.911769, + 0.912228, + 0.912691, + 0.913159, + 0.913632, + 0.914109, + 0.91459, + 0.915075, + 0.915564, + 0.916056, + 0.916551, + 0.917048, + 0.917548, + 0.91805, + 0.918554, + 0.919059, + 0.919565, + 0.920071, + 0.920577, + 0.921083, + 0.921589, + 0.922093, + 0.922595, + 0.923096, + 0.923594, + 0.92409, + 0.924583, + 0.925072, + 0.925558, + 0.926041, + 0.926519, + 0.926993, + 0.927463, + 0.927928, + 0.928389, + 0.928845, + 0.929296, + 0.929742, + 0.930183, + 0.930619, + 0.93105, + 0.931476, + 0.931897, + 0.932313, + 0.932724, + 0.93313, + 0.933531, + 0.933928, + 0.93432, + 0.934708, + 0.935092, + 0.935472, + 0.935848, + 0.936221, + 0.936591, + 0.936958, + 0.937323, + 0.937685, + 0.938045, + 0.938405, + 0.938762, + 0.93912, + 0.939476, + 0.939833, + 0.94019, + 0.940547, + 0.940905, + 0.941265, + 0.941626, + 0.941989, + 0.942353, + 0.942721, + 0.943091, + 0.943464, + 0.943841, + 0.944221, + 0.944605, + 0.944994, + 0.945386, + 0.945784, + 0.946186, + 0.946593, + 0.947005, + 0.947423, + 0.947846, + 0.948274, + 0.948708, + 0.949147, + 0.949592, + 0.950042, + 0.950498, + 0.950959, + 0.951425, + 0.951896, + 0.952372, + 0.952852, + 0.953337, + 0.953825, + 0.954318, + 0.954814, + 0.955313, + 0.955816, + 0.956321, + 0.956828, + 0.957338, + 0.95785, + 0.958363, + 0.958877, + 0.959392, + 0.959908, + 0.960423, + 0.960939, + 0.961454, + 0.961969, + 0.962482, + 0.962994, + 0.963504, + 0.964012, + 0.964517, + 0.96502, + 0.96552, + 0.966017, + 0.96651, + 0.967, + 0.967486, + 0.967968, + 0.968445, + 0.968919, + 0.969388, + 0.969853, + 0.970313, + 0.970769, + 0.97122, + 0.971666, + 0.972108, + 0.972546, + 0.972978, + 0.973407, + 0.973831, + 0.974251, + 0.974667, + 0.975078, + 0.975486, + 0.975891, + 0.976291, + 0.976689, + 0.977083, + 0.977475, + 0.977864, + 0.978251, + 0.978636, + 0.979019, + 0.979401, + 0.979782, + 0.980162, + 0.980542, + 0.980922, + 0.981302, + 0.981683, + 0.982065, + 0.982448, + 0.982833, + 0.98322, + 0.983609, + 0.984001, + 0.984396, + 0.984794, + 0.985195, + 0.9856, + 0.986009, + 0.986422, + 0.986839, + 0.987261, + 0.987687, + 0.988117, + 0.988553, + 0.988993, + 0.989438, + 0.989888, + 0.990343, + 0.990803, + 0.991268, + 0.991737, + 0.992212, + 0.99269, + 0.993174, + 0.993662, + 0.994154, + 0.994651, + 0.995152, + 0.995656, + 0.996164, + 0.996676, + 0.99719, + 0.997708, + 0.998228, + 0.998751, + 0.999275, + 0.999801, + 1.000329, + 1.000857, + 1.001387, + 1.001916, + 1.002445, + 1.002975, + 1.003503, + 1.00403, + 1.004556, + 1.005079, + 1.005601, + 1.006121, + 1.006637, + 1.007151, + 1.007662, + 1.008169, + 1.008672, + 1.009172, + 1.009668, + 1.01016, + 1.010647, + 1.011131, + 1.011609, + 1.012084, + 1.012553, + 1.013018, + 1.013478, + 1.013934, + 1.014385, + 1.014831, + 1.015272, + 1.015708, + 1.01614, + 1.016567, + 1.016989, + 1.017408, + 1.017822, + 1.018231, + 1.018638, + 1.01904, + 1.019439, + 1.019835, + 1.020229, + 1.02062, + 1.021009, + 1.021396, + 1.021781, + 1.022166, + 1.02255, + 1.022934, + 1.023317, + 1.023702, + 1.024086, + 1.024473, + 1.02486, + 1.02525, + 1.025641, + 1.026035, + 1.026432, + 1.026833, + 1.027236, + 1.027644, + 1.028055, + 1.028471, + 1.028891, + 1.029316, + 1.029745, + 1.03018, + 1.03062, + 1.031064, + 1.031514, + 1.031969, + 1.032429, + 1.032894, + 1.033364, + 1.033838, + 1.034317, + 1.034801, + 1.035288, + 1.03578, + 1.036276, + 1.036775, + 1.037278, + 1.037783, + 1.038292, + 1.038804, + 1.039317, + 1.039833, + 1.040351, + 1.040871, + 1.041392, + 1.041914, + 1.042437, + 1.042961, + 1.043485, + 1.044008, + 1.044532, + 1.045055, + 1.045577, + 1.046098, + 1.046618, + 1.047136, + 1.047652, + 1.048166, + 1.048677, + 1.049186, + 1.049692, + 1.050195, + 1.050695, + 1.051191, + 1.051685, + 1.052174, + 1.05266, + 1.053143, + 1.053622, + 1.054097, + 1.054568, + 1.055035, + 1.055499, + 1.055959, + 1.056415, + 1.056867, + 1.057316, + 1.057761, + 1.058202, + 1.05864, + 1.059074, + 1.059505, + 1.059933, + 1.060357, + 1.060778, + 1.061197, + 1.061612, + 1.062025, + 1.062435, + 1.062844, + 1.06325, + 1.063655, + 1.064058, + 1.06446, + 1.064861, + 1.065262, + 1.065662, + 1.066063, + 1.066463, + 1.066864, + 1.067266, + 1.067669, + 1.068074, + 1.06848, + 1.068888, + 1.069299, + 1.069712, + 1.070128, + 1.070546, + 1.070968, + 1.071394, + 1.071823, + 1.072255, + 1.072692, + 1.073132, + 1.073576, + 1.074025, + 1.074477, + 1.074934, + 1.075396, + 1.075861, + 1.076331, + 1.076805, + 1.077284, + 1.077766, + 1.078253, + 1.078743, + 1.079238, + 1.079736, + 1.080238, + 1.080743, + 1.081252, + 1.081763, + 1.082277, + 1.082794, + 1.083313, + 1.083834, + 1.084357, + 1.084881, + 1.085407, + 1.085933, + 1.08646, + 1.086987, + 1.087514, + 1.088041, + 1.088568, + 1.089093, + 1.089618, + 1.090141, + 1.090663, + 1.091183, + 1.091701, + 1.092217, + 1.092731, + 1.093243, + 1.093751, + 1.094257, + 1.09476, + 1.09526, + 1.095757, + 1.096251, + 1.096741, + 1.097228, + 1.097711, + 1.098191, + 1.098667, + 1.099139, + 1.099607, + 1.100072, + 1.100534, + 1.100991, + 1.101445, + 1.101896, + 1.102343, + 1.102786, + 1.103227, + 1.103665, + 1.104099, + 1.104531, + 1.104961, + 1.105389, + 1.105814, + 1.106238, + 1.106661, + 1.107082, + 1.107503, + 1.107923, + 1.108342, + 1.108762, + 1.109182, + 1.109603, + 1.110024, + 1.110447, + 1.110871, + 1.111296, + 1.111724, + 1.112154, + 1.112586, + 1.113022, + 1.11346, + 1.113901, + 1.114346, + 1.114795, + 1.115247, + 1.115703, + 1.116163, + 1.116626, + 1.117094, + 1.117566, + 1.118042, + 1.118522, + 1.119006, + 1.119494, + 1.119986, + 1.120481, + 1.120979, + 1.121481, + 1.121986, + 1.122493, + 1.123004, + 1.123517, + 1.124032, + 1.12455, + 1.12507, + 1.125591, + 1.126115, + 1.12664, + 1.127166, + 1.127694, + 1.128222, + 1.128752, + 1.129282, + 1.129813, + 1.130344, + 1.130875, + 1.131406, + 1.131936, + 1.132467, + 1.132996, + 1.133525, + 1.134052, + 1.134578, + 1.135103, + 1.135626, + 1.136148, + 1.136667, + 1.137185, + 1.1377, + 1.138214, + 1.138725, + 1.139234, + 1.139741, + 1.140245, + 1.140747, + 1.141247, + 1.141744, + 1.142239, + 1.142732, + 1.143223, + 1.143711, + 1.144197, + 1.144681, + 1.145162, + 1.145642, + 1.146119, + 1.146595, + 1.147068, + 1.147539, + 1.148009, + 1.148476, + 1.148942, + 1.149406, + 1.149867, + 1.150328, + 1.150786, + 1.151244, + 1.151699, + 1.152154, + 1.152607, + 1.153059, + 1.15351, + 1.153961, + 1.154411, + 1.15486, + 1.15531, + 1.155759, + 1.156208, + 1.156658, + 1.157109, + 1.15756, + 1.158012, + 1.158465, + 1.158919, + 1.159375, + 1.159832, + 1.160291, + 1.160752, + 1.161215, + 1.16168, + 1.162147, + 1.162617, + 1.16309, + 1.163565, + 1.164042, + 1.164523, + 1.165006, + 1.165493, + 1.165982, + 1.166475, + 1.166971, + 1.167469, + 1.167971, + 1.168476, + 1.168983, + 1.169493, + 1.170006, + 1.170522, + 1.17104, + 1.17156, + 1.172083, + 1.172607, + 1.173133, + 1.17366, + 1.174189, + 1.174719, + 1.175249, + 1.17578, + 1.176311, + 1.176843, + 1.177374, + 1.177905, + 1.178435, + 1.178964, + 1.179493, + 1.18002, + 1.180545, + 1.181069, + 1.181592, + 1.182112, + 1.18263, + 1.183146, + 1.183659, + 1.18417, + 1.184678, + 1.185183, + 1.185686, + 1.186185, + 1.186682, + 1.187176, + 1.187666, + 1.188154, + 1.188639, + 1.189121, + 1.189601, + 1.190078, + 1.190552, + 1.191024, + 1.191493, + 1.191961, + 1.192426, + 1.192889, + 1.193351, + 1.193811, + 1.19427, + 1.194727, + 1.195183, + 1.195639, + 1.196093, + 1.196547, + 1.197001, + 1.197454, + 1.197908, + 1.198361, + 1.198815, + 1.199269, + 1.199723, + 1.200179, + 1.200635, + 1.201092, + 1.20155, + 1.20201, + 1.20247, + 1.202933, + 1.203396, + 1.203861, + 1.204328, + 1.204797, + 1.205267, + 1.205738, + 1.206211, + 1.206686, + 1.207162, + 1.20764, + 1.208119, + 1.2086, + 1.209082, + 1.209566, + 1.21005, + 1.210536, + 1.211023, + 1.211511, + 1.212, + 1.212491, + 1.212982, + 1.213474, + 1.213966, + 1.21446, + 1.214954, + 1.215449, + 1.215944, + 1.21644, + 1.216936, + 1.217433, + 1.21793, + 1.218427, + 1.218925, + 1.219422, + 1.21992, + 1.220417, + 1.220915, + 1.221412, + 1.221909, + 1.222406, + 1.222903, + 1.223399, + 1.223895, + 1.224391, + 1.224886, + 1.22538, + 1.225875, + 1.226368, + 1.226861, + 1.227354, + 1.227846, + 1.228337, + 1.228828, + 1.229317, + 1.229806, + 1.230295, + 1.230782, + 1.231269, + 1.231755, + 1.23224, + 1.232724, + 1.233207, + 1.233689, + 1.23417, + 1.23465, + 1.235129, + 1.235607, + 1.236084, + 1.23656, + 1.237034, + 1.237508, + 1.23798, + 1.238451, + 1.23892, + 1.239389, + 1.239856, + 1.240322, + 1.240787, + 1.24125, + 1.241713, + 1.242174, + 1.242635, + 1.243094, + 1.243553, + 1.24401, + 1.244468, + 1.244924, + 1.24538, + 1.245836, + 1.246292, + 1.246747, + 1.247203, + 1.247659, + 1.248115, + 1.248571, + 1.249029, + 1.249487, + 1.249945, + 1.250405, + 1.250866, + 1.251328, + 1.251791, + 1.252255, + 1.25272, + 1.253187, + 1.253655, + 1.254124, + 1.254595, + 1.255067, + 1.25554, + 1.256014, + 1.25649, + 1.256968, + 1.257446, + 1.257926, + 1.258407, + 1.258889, + 1.259373, + 1.259858, + 1.260344, + 1.260831, + 1.261319, + 1.261809, + 1.262299, + 1.26279, + 1.263282, + 1.263775, + 1.264268, + 1.264763, + 1.265257, + 1.265752, + 1.266248, + 1.266744, + 1.26724, + 1.267736, + 1.268232, + 1.268729, + 1.269225, + 1.269722, + 1.270219, + 1.270715, + 1.271212, + 1.271709, + 1.272206, + 1.272703, + 1.2732, + 1.273697, + 1.274194, + 1.274692, + 1.27519, + 1.275688, + 1.276187, + 1.276686, + 1.277185, + 1.277684, + 1.278184, + 1.278683, + 1.279184, + 1.279684, + 1.280185, + 1.280686, + 1.281188, + 1.28169, + 1.282192, + 1.282695, + 1.283199, + 1.283702, + 1.284206, + 1.284711, + 1.285216, + 1.285722, + 1.286228, + 1.286735, + 1.287242, + 1.28775, + 1.288258, + 1.288766, + 1.289275, + 1.289784, + 1.290293, + 1.290803, + 1.291313, + 1.291823, + 1.292333, + 1.292843, + 1.293353, + 1.293864, + 1.294374, + 1.294884, + 1.295394, + 1.295904, + 1.296414, + 1.296923, + 1.297433, + 1.297942, + 1.298451, + 1.29896, + 1.299469, + 1.299977, + 1.300486, + 1.300995, + 1.301503, + 1.302012, + 1.302521, + 1.303029, + 1.303538, + 1.304047, + 1.304556, + 1.305066, + 1.305576, + 1.306086, + 1.306596, + 1.307107, + 1.307617, + 1.308129, + 1.30864, + 1.309152, + 1.309664, + 1.310177, + 1.31069, + 1.311204, + 1.311718, + 1.312232, + 1.312747, + 1.313262, + 1.313778, + 1.314294, + 1.31481, + 1.315327, + 1.315844, + 1.316362, + 1.31688, + 1.317398, + 1.317917, + 1.318437, + 1.318957, + 1.319477, + 1.319998, + 1.320519, + 1.321041, + 1.321564, + 1.322087, + 1.32261, + 1.323135, + 1.32366, + 1.324185, + 1.324711, + 1.325237, + 1.325764, + 1.326291, + 1.326819, + 1.327346, + 1.327874, + 1.328402, + 1.32893, + 1.329458, + 1.329986, + 1.330514, + 1.331042, + 1.331569, + 1.332097, + 1.332623, + 1.33315, + 1.333676, + 1.334201, + 1.334726, + 1.33525, + 1.335774, + 1.336297, + 1.336819, + 1.33734, + 1.337861, + 1.338381, + 1.338899, + 1.339417, + 1.339934, + 1.34045, + 1.340965, + 1.341479, + 1.341992, + 1.342504, + 1.343015, + 1.343524, + 1.344032, + 1.34454, + 1.345045, + 1.34555, + 1.346054, + 1.346557, + 1.347059, + 1.347559, + 1.348059, + 1.348558, + 1.349056, + 1.349554, + 1.350051, + 1.350547, + 1.351043, + 1.351539, + 1.352034, + 1.352529, + 1.353024, + 1.35352, + 1.354015, + 1.354511, + 1.355007, + 1.355504, + 1.356002, + 1.3565, + 1.357, + 1.3575, + 1.358002, + 1.358505, + 1.359009, + 1.359514, + 1.360021, + 1.360529, + 1.361039, + 1.36155, + 1.362062, + 1.362575, + 1.36309, + 1.363606, + 1.364123, + 1.364642, + 1.365162, + 1.365683, + 1.366205, + 1.366729, + 1.367254, + 1.36778, + 1.368307, + 1.368836, + 1.369366, + 1.369898, + 1.370431, + 1.370966, + 1.371503, + 1.372041, + 1.372581, + 1.373122, + 1.373666, + 1.374211, + 1.374757, + 1.375306, + 1.375856, + 1.376407, + 1.376961, + 1.377515, + 1.378071, + 1.378629, + 1.379188, + 1.379748, + 1.380309, + 1.380871, + 1.381435, + 1.381999, + 1.382564, + 1.383129, + 1.383696, + 1.384263, + 1.38483, + 1.385398, + 1.385966, + 1.386534, + 1.387102, + 1.38767, + 1.388238, + 1.388805, + 1.389371, + 1.389937, + 1.390501, + 1.391065, + 1.391627, + 1.392187, + 1.392746, + 1.393302, + 1.393857, + 1.394409, + 1.394959, + 1.395507, + 1.396052, + 1.396594, + 1.397134, + 1.397672, + 1.398206, + 1.398739, + 1.399269, + 1.399796, + 1.400321, + 1.400844, + 1.401366, + 1.401885, + 1.402403, + 1.402919, + 1.403434, + 1.403948, + 1.40446, + 1.404972, + 1.405483, + 1.405994, + 1.406504, + 1.407014, + 1.407524, + 1.408034, + 1.408545, + 1.409056, + 1.409567, + 1.41008, + 1.410593, + 1.411108, + 1.411624, + 1.412142, + 1.412662, + 1.413183, + 1.413707, + 1.414233, + 1.414761, + 1.415293, + 1.415827, + 1.416363, + 1.416903, + 1.417446, + 1.417992, + 1.418541, + 1.419094, + 1.419649, + 1.420208, + 1.420769, + 1.421334, + 1.421901, + 1.422472, + 1.423045, + 1.423621, + 1.424199, + 1.424779, + 1.425362, + 1.425947, + 1.426533, + 1.427122, + 1.427712, + 1.428304, + 1.428897, + 1.429491, + 1.430087, + 1.430683, + 1.43128, + 1.431878, + 1.432476, + 1.433074, + 1.433672, + 1.43427, + 1.434868, + 1.435465, + 1.436061, + 1.436657, + 1.437252, + 1.437845, + 1.438437, + 1.439028, + 1.439617, + 1.440205, + 1.440791, + 1.441375, + 1.441957, + 1.442538, + 1.443116, + 1.443693, + 1.444268, + 1.44484, + 1.445411, + 1.44598, + 1.446547, + 1.447112, + 1.447675, + 1.448237, + 1.448796, + 1.449354, + 1.44991, + 1.450464, + 1.451017, + 1.451568, + 1.452118, + 1.452666, + 1.453213, + 1.453759, + 1.454303, + 1.454847, + 1.45539, + 1.455933, + 1.456476, + 1.457018, + 1.45756, + 1.458103, + 1.458646, + 1.45919, + 1.459735, + 1.46028, + 1.460827, + 1.461375, + 1.461924, + 1.462474, + 1.463026, + 1.46358, + 1.464135, + 1.464692, + 1.46525, + 1.46581, + 1.466372, + 1.466935, + 1.4675, + 1.468067, + 1.468636, + 1.469207, + 1.46978, + 1.470356, + 1.470933, + 1.471512, + 1.472094, + 1.472679, + 1.473266, + 1.473855, + 1.474447, + 1.475042, + 1.475639, + 1.476239, + 1.476842, + 1.477448, + 1.478056, + 1.478667, + 1.47928, + 1.479896, + 1.480515, + 1.481135, + 1.481758, + 1.482383, + 1.483009, + 1.483637, + 1.484266, + 1.484897, + 1.485529, + 1.486161, + 1.486793, + 1.487427, + 1.48806, + 1.488693, + 1.489325, + 1.489957, + 1.490588, + 1.491218, + 1.491847, + 1.492474, + 1.4931, + 1.493724, + 1.494345, + 1.494964, + 1.495581, + 1.496194, + 1.496805, + 1.497412, + 1.498016, + 1.498616, + 1.499213, + 1.499806, + 1.500394, + 1.500979, + 1.501559, + 1.502135, + 1.502707, + 1.503275, + 1.503839, + 1.5044, + 1.504956, + 1.505509, + 1.506058, + 1.506605, + 1.507148, + 1.507689, + 1.508227, + 1.508763, + 1.509297, + 1.50983, + 1.510361, + 1.510891, + 1.51142, + 1.511949, + 1.512477, + 1.513005, + 1.513533, + 1.514062, + 1.514591, + 1.515121, + 1.515653, + 1.516186, + 1.516721, + 1.517257, + 1.517796, + 1.518338, + 1.518882, + 1.519429, + 1.519979, + 1.520532, + 1.521089, + 1.52165, + 1.522215, + 1.522783, + 1.523356, + 1.523933, + 1.524514, + 1.525099, + 1.525689, + 1.526283, + 1.526881, + 1.527483, + 1.528089, + 1.528699, + 1.529312, + 1.529929, + 1.53055, + 1.531173, + 1.5318, + 1.532429, + 1.533061, + 1.533696, + 1.534333, + 1.534972, + 1.535612, + 1.536255, + 1.536899, + 1.537544, + 1.538191, + 1.538838, + 1.539486, + 1.540135, + 1.540783, + 1.541432, + 1.54208, + 1.542728, + 1.543375, + 1.544021, + 1.544665, + 1.545308, + 1.54595, + 1.546589, + 1.547227, + 1.547862, + 1.548495, + 1.549125, + 1.549753, + 1.550378, + 1.551, + 1.551619, + 1.552235, + 1.552848, + 1.553457, + 1.554064, + 1.554667, + 1.555267, + 1.555865, + 1.556459, + 1.557049, + 1.557637, + 1.558222, + 1.558804, + 1.559384, + 1.559961, + 1.560535, + 1.561106, + 1.561676, + 1.562243, + 1.562808, + 1.563372, + 1.563934, + 1.564494, + 1.565053, + 1.565612, + 1.566169, + 1.566726, + 1.567283, + 1.567839, + 1.568396, + 1.568953, + 1.569511, + 1.57007, + 1.57063, + 1.571191, + 1.571754, + 1.572319, + 1.572885, + 1.573453, + 1.574024, + 1.574597, + 1.575172, + 1.575751, + 1.576332, + 1.576916, + 1.577503, + 1.578093, + 1.578687, + 1.579284, + 1.579884, + 1.580489, + 1.581097, + 1.581709, + 1.582325, + 1.582945, + 1.583569, + 1.584196, + 1.584828, + 1.585464, + 1.586103, + 1.586746, + 1.587393, + 1.588044, + 1.588698, + 1.589355, + 1.590016, + 1.590679, + 1.591346, + 1.592015, + 1.592687, + 1.59336, + 1.594036, + 1.594714, + 1.595393, + 1.596073, + 1.596754, + 1.597436, + 1.598118, + 1.598801, + 1.599483, + 1.600165, + 1.600846, + 1.601527, + 1.602206, + 1.602883, + 1.603559, + 1.604233, + 1.604905, + 1.605574, + 1.60624, + 1.606903, + 1.607563, + 1.60822, + 1.608874, + 1.609524, + 1.61017, + 1.610812, + 1.611451, + 1.612085, + 1.612716, + 1.613343, + 1.613966, + 1.614586, + 1.615202, + 1.615814, + 1.616423, + 1.617028, + 1.617631, + 1.618231, + 1.618828, + 1.619423, + 1.620016, + 1.620608, + 1.621197, + 1.621786, + 1.622374, + 1.622961, + 1.623547, + 1.624134, + 1.624721, + 1.625308, + 1.625896, + 1.626485, + 1.627076, + 1.627668, + 1.628262, + 1.628858, + 1.629456, + 1.630057, + 1.630661, + 1.631268, + 1.631877, + 1.63249, + 1.633106, + 1.633726, + 1.634349, + 1.634975, + 1.635606, + 1.636239, + 1.636877, + 1.637518, + 1.638163, + 1.638812, + 1.639464, + 1.64012, + 1.64078, + 1.641443, + 1.64211, + 1.64278, + 1.643453, + 1.64413, + 1.64481, + 1.645493, + 1.64618, + 1.646869, + 1.647561, + 1.648256, + 1.648953, + 1.649653, + 1.650355, + 1.651059, + 1.651765, + 1.652473, + 1.653182, + 1.653891, + 1.654602, + 1.655313, + 1.656024, + 1.656736, + 1.657447, + 1.658158, + 1.658868, + 1.659577, + 1.660285, + 1.660991, + 1.661696, + 1.6624, + 1.663101, + 1.6638, + 1.664497, + 1.665191, + 1.665883, + 1.666572, + 1.667258, + 1.667942, + 1.668621, + 1.669298, + 1.669971, + 1.670641, + 1.671306, + 1.671968, + 1.672627, + 1.673281, + 1.673931, + 1.674577, + 1.67522, + 1.675858, + 1.676493, + 1.677123, + 1.67775, + 1.678374, + 1.678994, + 1.679611, + 1.680225, + 1.680837, + 1.681445, + 1.682052, + 1.682656, + 1.683259, + 1.68386, + 1.684459, + 1.685058, + 1.685656, + 1.686253, + 1.68685, + 1.687447, + 1.688044, + 1.688642, + 1.689241, + 1.689841, + 1.690443, + 1.691046, + 1.691651, + 1.692258, + 1.692868, + 1.69348, + 1.694095, + 1.694714, + 1.695336, + 1.695961, + 1.69659, + 1.697224, + 1.697861, + 1.698502, + 1.699147, + 1.699797, + 1.70045, + 1.701108, + 1.70177, + 1.702437, + 1.703107, + 1.703781, + 1.704459, + 1.705141, + 1.705827, + 1.706516, + 1.707208, + 1.707903, + 1.708601, + 1.709301, + 1.710004, + 1.71071, + 1.711417, + 1.712126, + 1.712836, + 1.713547, + 1.714259, + 1.714972, + 1.715686, + 1.716399, + 1.717112, + 1.717825, + 1.718537, + 1.719248, + 1.719958, + 1.720667, + 1.721374, + 1.722079, + 1.722783, + 1.723484, + 1.724183, + 1.72488, + 1.725574, + 1.726266, + 1.726955, + 1.727641, + 1.728324, + 1.729004, + 1.729681, + 1.730356, + 1.731027, + 1.731696, + 1.732362, + 1.733025, + 1.733685, + 1.734343, + 1.734999, + 1.735652, + 1.736303, + 1.736953, + 1.7376, + 1.738247, + 1.738893, + 1.739538, + 1.740183, + 1.740829, + 1.741476, + 1.742123, + 1.742773, + 1.743424, + 1.744078, + 1.744735, + 1.745395, + 1.746058, + 1.746725, + 1.747396, + 1.748071, + 1.74875, + 1.749434, + 1.750121, + 1.750813, + 1.751509, + 1.752209, + 1.752912, + 1.75362, + 1.75433, + 1.755044, + 1.755761, + 1.75648, + 1.757203, + 1.757928, + 1.758656, + 1.759386, + 1.760118, + 1.760853, + 1.761591, + 1.76233, + 1.763072, + 1.763816, + 1.764562, + 1.765311, + 1.766061, + 1.766813, + 1.767567, + 1.768322, + 1.769079, + 1.769837, + 1.770597, + 1.771358, + 1.77212, + 1.772883, + 1.773647, + 1.774411, + 1.775177, + 1.775943, + 1.77671, + 1.777478, + 1.778247, + 1.779017, + 1.779788, + 1.78056, + 1.781334, + 1.782109, + 1.782886, + 1.783664, + 1.784444, + 1.785226, + 1.78601, + 1.786795, + 1.787582, + 1.788371, + 1.789161, + 1.789953, + 1.790745, + 1.791539, + 1.792333, + 1.793127, + 1.793922, + 1.794716, + 1.79551, + 1.796304, + 1.797097, + 1.797888, + 1.798678, + 1.799466, + 1.800253, + 1.801038, + 1.80182, + 1.802599, + 1.803376, + 1.80415, + 1.804921, + 1.805689, + 1.806453, + 1.807214, + 1.807971, + 1.808724, + 1.809474, + 1.810219, + 1.81096, + 1.811697, + 1.812429, + 1.813158, + 1.813883, + 1.814604, + 1.815321, + 1.816034, + 1.816744, + 1.817452, + 1.818156, + 1.818859, + 1.819559, + 1.820257, + 1.820955, + 1.821652, + 1.822349, + 1.823046, + 1.823744, + 1.824444, + 1.825145, + 1.825849, + 1.826556, + 1.827265, + 1.827979, + 1.828696, + 1.829418, + 1.830144, + 1.830875, + 1.831611, + 1.832352, + 1.833099, + 1.83385, + 1.834606, + 1.835368, + 1.836135, + 1.836907, + 1.837683, + 1.838465, + 1.839251, + 1.840041, + 1.840835, + 1.841633, + 1.842434, + 1.843238, + 1.844045, + 1.844854, + 1.845665, + 1.846477, + 1.847291, + 1.848105, + 1.848919, + 1.849733, + 1.850546, + 1.851358, + 1.852169, + 1.852978, + 1.853785, + 1.85459, + 1.855392, + 1.856192, + 1.856989, + 1.857783, + 1.858575, + 1.859363, + 1.860148, + 1.860931, + 1.861711, + 1.862488, + 1.863262, + 1.864034, + 1.864804, + 1.865572, + 1.866338, + 1.867103, + 1.867866, + 1.868628, + 1.869389, + 1.87015, + 1.87091, + 1.87167, + 1.87243, + 1.873191, + 1.873952, + 1.874715, + 1.875478, + 1.876243, + 1.87701, + 1.877778, + 1.878549, + 1.879321, + 1.880096, + 1.880874, + 1.881654, + 1.882437, + 1.883223, + 1.884011, + 1.884802, + 1.885596, + 1.886392, + 1.887191, + 1.887993, + 1.888797, + 1.889603, + 1.890411, + 1.891221, + 1.892033, + 1.892846, + 1.893661, + 1.894478, + 1.895295, + 1.896114, + 1.896933, + 1.897753, + 1.898574, + 1.899396, + 1.900218, + 1.90104, + 1.901863, + 1.902687, + 1.90351, + 1.904335, + 1.905159, + 1.905984, + 1.906809, + 1.907635, + 1.908462, + 1.909289, + 1.910116, + 1.910944, + 1.911774, + 1.912604, + 1.913435, + 1.914267, + 1.9151, + 1.915935, + 1.916771, + 1.917608, + 1.918447, + 1.919288, + 1.92013, + 1.920974, + 1.92182, + 1.922667, + 1.923516, + 1.924367, + 1.92522, + 1.926075, + 1.926931, + 1.927788, + 1.928647, + 1.929508, + 1.930369, + 1.931231, + 1.932095, + 1.932958, + 1.933823, + 1.934687, + 1.935552, + 1.936417, + 1.937281, + 1.938145, + 1.939009, + 1.939872, + 1.940734, + 1.941595, + 1.942455, + 1.943314, + 1.944171, + 1.945027, + 1.945882, + 1.946735, + 1.947587, + 1.948437, + 1.949285, + 1.950131, + 1.950976, + 1.951819, + 1.95266, + 1.9535, + 1.954338, + 1.955176, + 1.956011, + 1.956846, + 1.95768, + 1.958514, + 1.959347, + 1.96018, + 1.961012, + 1.961845, + 1.962678, + 1.963512, + 1.964346, + 1.965181, + 1.966017, + 1.966853, + 1.967691, + 1.968531, + 1.969371, + 1.970213, + 1.971057, + 1.971901, + 1.972748, + 1.973596, + 1.974445, + 1.975296, + 1.976149, + 1.977003, + 1.977859, + 1.978717, + 1.979576, + 1.980437, + 1.9813, + 1.982164, + 1.983031, + 1.983899, + 1.984769, + 1.985641, + 1.986515, + 1.98739, + 1.988268, + 1.989147, + 1.990029, + 1.990912, + 1.991797, + 1.992684, + 1.993573, + 1.994463, + 1.995355, + 1.996248, + 1.997143, + 1.998039, + 1.998936, + 1.999834, + 2.000733, + 2.001634, + 2.002535, + 2.003437, + 2.00434, + 2.005244, + 2.006148, + 2.007054, + 2.00796, + 2.008867, + 2.009775, + 2.010683, + 2.011593, + 2.012503, + 2.013414, + 2.014326, + 2.015239, + 2.016153, + 2.017068, + 2.017983, + 2.0189, + 2.019817, + 2.020736, + 2.021655, + 2.022575, + 2.023496, + 2.024418, + 2.025341, + 2.026265, + 2.02719, + 2.028116, + 2.029042, + 2.02997, + 2.030899, + 2.031829, + 2.032761, + 2.033693, + 2.034627, + 2.035562, + 2.036499, + 2.037437, + 2.038376, + 2.039317, + 2.040259, + 2.041203, + 2.042148, + 2.043094, + 2.044042, + 2.044991, + 2.045942, + 2.046893, + 2.047846, + 2.048799, + 2.049754, + 2.050709, + 2.051666, + 2.052622, + 2.05358, + 2.054537, + 2.055496, + 2.056454, + 2.057413, + 2.058372, + 2.059331, + 2.06029, + 2.061249, + 2.062209, + 2.063168, + 2.064127, + 2.065086, + 2.066045, + 2.067003, + 2.067962, + 2.06892, + 2.069878, + 2.070835, + 2.071793, + 2.07275, + 2.073707, + 2.074664, + 2.075621, + 2.076578, + 2.077534, + 2.078491, + 2.079447, + 2.080404, + 2.081361, + 2.082318, + 2.083276, + 2.084234, + 2.085193, + 2.086152, + 2.087112, + 2.088073, + 2.089035, + 2.089998, + 2.090963, + 2.091928, + 2.092895, + 2.093864, + 2.094834, + 2.095805, + 2.096778, + 2.097753, + 2.09873, + 2.099708, + 2.100689, + 2.101671, + 2.102655, + 2.10364, + 2.104628, + 2.105617, + 2.106608, + 2.107601, + 2.108596, + 2.109593, + 2.110591, + 2.111591, + 2.112593, + 2.113597, + 2.114602, + 2.11561, + 2.116618, + 2.117629, + 2.118641, + 2.119655, + 2.12067, + 2.121687, + 2.122705, + 2.123724, + 2.124745, + 2.125768, + 2.126791, + 2.127816, + 2.128842, + 2.12987, + 2.130898, + 2.131928, + 2.132958, + 2.13399, + 2.135023, + 2.136057, + 2.137093, + 2.138129, + 2.139166, + 2.140204, + 2.141244, + 2.142284, + 2.143326, + 2.144368, + 2.145411, + 2.146456, + 2.147501, + 2.148546, + 2.149593, + 2.15064, + 2.151688, + 2.152737, + 2.153785, + 2.154834, + 2.155884, + 2.156934, + 2.157983, + 2.159033, + 2.160083, + 2.161133, + 2.162182, + 2.163232, + 2.164281, + 2.16533, + 2.166379, + 2.167428, + 2.168477, + 2.169525, + 2.170573, + 2.171621, + 2.172669, + 2.173716, + 2.174764, + 2.175811, + 2.176859, + 2.177906, + 2.178954, + 2.180002, + 2.18105, + 2.182099, + 2.183148, + 2.184197, + 2.185248, + 2.186299, + 2.187351, + 2.188404, + 2.189458, + 2.190514, + 2.191571, + 2.192629, + 2.193689, + 2.194751, + 2.195815, + 2.19688, + 2.197948, + 2.199018, + 2.20009, + 2.201164, + 2.202241, + 2.203321, + 2.204402, + 2.205487, + 2.206574, + 2.207664, + 2.208757, + 2.209853, + 2.210951, + 2.212053, + 2.213157, + 2.214264, + 2.215374, + 2.216487, + 2.217602, + 2.21872, + 2.219841, + 2.220964, + 2.222089, + 2.223217, + 2.224346, + 2.225478, + 2.226611, + 2.227746, + 2.228883, + 2.23002, + 2.231159, + 2.232299, + 2.233439, + 2.234581, + 2.235722, + 2.236864, + 2.238006, + 2.239148, + 2.240289, + 2.24143, + 2.242571, + 2.24371, + 2.244849, + 2.245987, + 2.247124, + 2.24826, + 2.249395, + 2.250528, + 2.25166, + 2.25279, + 2.253919, + 2.255046, + 2.256172, + 2.257297, + 2.258419, + 2.25954, + 2.26066, + 2.261778, + 2.262895, + 2.26401, + 2.265124, + 2.266237, + 2.267349, + 2.268459, + 2.269569, + 2.270677, + 2.271785, + 2.272892, + 2.273999, + 2.275105, + 2.276211, + 2.277317, + 2.278423, + 2.279529, + 2.280635, + 2.281743, + 2.28285, + 2.283959, + 2.285069, + 2.28618, + 2.287292, + 2.288406, + 2.289521, + 2.290639, + 2.291758, + 2.29288, + 2.294004, + 2.29513, + 2.296259, + 2.297391, + 2.298525, + 2.299662, + 2.300803, + 2.301946, + 2.303093, + 2.304243, + 2.305396, + 2.306553, + 2.307713, + 2.308877, + 2.310044, + 2.311215, + 2.31239, + 2.313567, + 2.314749, + 2.315934, + 2.317123, + 2.318315, + 2.31951, + 2.320709, + 2.321911, + 2.323117, + 2.324325, + 2.325537, + 2.326751, + 2.327968, + 2.329188, + 2.330411, + 2.331635, + 2.332862, + 2.334091, + 2.335322, + 2.336554, + 2.337788, + 2.339024, + 2.340261, + 2.341499, + 2.342738, + 2.343978, + 2.345219, + 2.346461, + 2.347703, + 2.348946, + 2.350188, + 2.351431, + 2.352675, + 2.353918, + 2.35516, + 2.356403, + 2.357645, + 2.358887, + 2.360128, + 2.361368, + 2.362608, + 2.363847, + 2.365085, + 2.366321, + 2.367557, + 2.368792, + 2.370026, + 2.371259, + 2.372491, + 2.373723, + 2.374954, + 2.376184, + 2.377413, + 2.378642, + 2.379871, + 2.381099, + 2.382328, + 2.383556, + 2.384786, + 2.386015, + 2.387246, + 2.388478, + 2.389711, + 2.390946, + 2.392184, + 2.393424, + 2.394667, + 2.395913, + 2.397164, + 2.398419, + 2.399678, + 2.400942, + 2.402212, + 2.403488, + 2.40477, + 2.406058, + 2.407352, + 2.408654, + 2.409962, + 2.411277, + 2.412599, + 2.413929, + 2.415266, + 2.41661, + 2.41796, + 2.419318, + 2.420682, + 2.422053, + 2.42343, + 2.424813, + 2.426201, + 2.427594, + 2.428992, + 2.430394, + 2.431801, + 2.433211, + 2.434624, + 2.43604, + 2.437459, + 2.43888, + 2.440304, + 2.441729, + 2.443156, + 2.444584, + 2.446013, + 2.447444, + 2.448875, + 2.450306, + 2.451739, + 2.453171, + 2.454604, + 2.456037, + 2.45747, + 2.458904, + 2.460337, + 2.461771, + 2.463205, + 2.464639, + 2.466073, + 2.467508, + 2.468944, + 2.47038, + 2.471816, + 2.473254, + 2.474693, + 2.476132, + 2.477573, + 2.479015, + 2.480458, + 2.481903, + 2.483349, + 2.484796, + 2.486244, + 2.487694, + 2.489145, + 2.490597, + 2.49205, + 2.493504, + 2.494959, + 2.496414, + 2.49787, + 2.499326, + 2.500782, + 2.502239, + 2.503695, + 2.50515, + 2.506605, + 2.508059, + 2.509512, + 2.510963, + 2.512413, + 2.513861, + 2.515306, + 2.516749, + 2.51819, + 2.519628, + 2.521064, + 2.522496, + 2.523926, + 2.525353, + 2.526778, + 2.5282, + 2.52962, + 2.531037, + 2.532453, + 2.533867, + 2.53528, + 2.536692, + 2.538103, + 2.539514, + 2.540925, + 2.542337, + 2.543749, + 2.545163, + 2.546579, + 2.547996, + 2.549416, + 2.550839, + 2.552266, + 2.553695, + 2.555129, + 2.556567, + 2.55801, + 2.559458, + 2.560911, + 2.56237, + 2.563835, + 2.565305, + 2.566781, + 2.568264, + 2.569753, + 2.571248, + 2.572749, + 2.574257, + 2.57577, + 2.577289, + 2.578814, + 2.580344, + 2.58188, + 2.583419, + 2.584963, + 2.586511, + 2.588061, + 2.589615, + 2.591171, + 2.592728, + 2.594287, + 2.595846, + 2.597405, + 2.598965, + 2.600523, + 2.602081, + 2.603636, + 2.60519, + 2.606741, + 2.60829, + 2.609836, + 2.611379, + 2.612919, + 2.614455, + 2.615987, + 2.617516, + 2.619041, + 2.620562, + 2.62208, + 2.623594, + 2.625105, + 2.626613, + 2.628117, + 2.629619, + 2.631118, + 2.632614, + 2.634109, + 2.635602, + 2.637094, + 2.638584, + 2.640075, + 2.641565, + 2.643056, + 2.644547, + 2.64604, + 2.647535, + 2.649031, + 2.65053, + 2.652032, + 2.653538, + 2.655047, + 2.656559, + 2.658076, + 2.659598, + 2.661124, + 2.662655, + 2.664191, + 2.665732, + 2.667278, + 2.66883, + 2.670387, + 2.671949, + 2.673517, + 2.67509, + 2.676668, + 2.678252, + 2.679841, + 2.681435, + 2.683034, + 2.684639, + 2.686249, + 2.687863, + 2.689483, + 2.691107, + 2.692736, + 2.69437, + 2.696009, + 2.697652, + 2.699299, + 2.700951, + 2.702607, + 2.704267, + 2.705932, + 2.7076, + 2.709273, + 2.710949, + 2.71263, + 2.714314, + 2.716002, + 2.717694, + 2.719389, + 2.721088, + 2.722791, + 2.724498, + 2.726208, + 2.727921, + 2.729639, + 2.731359, + 2.733083, + 2.734811, + 2.736541, + 2.738275, + 2.740012, + 2.741752, + 2.743495, + 2.745241, + 2.746989, + 2.74874, + 2.750493, + 2.752248, + 2.754005, + 2.755764, + 2.757524, + 2.759286, + 2.761049, + 2.762813, + 2.764578, + 2.766344, + 2.76811, + 2.769876, + 2.771643, + 2.773409, + 2.775176, + 2.776942, + 2.778708, + 2.780473, + 2.782238, + 2.784002, + 2.785765, + 2.787527, + 2.789288, + 2.791049, + 2.792808, + 2.794566, + 2.796323, + 2.798078, + 2.799833, + 2.801587, + 2.80334, + 2.805092, + 2.806844, + 2.808595, + 2.810346, + 2.812097, + 2.813848, + 2.815599, + 2.817351, + 2.819103, + 2.820857, + 2.822612, + 2.824368, + 2.826126, + 2.827886, + 2.829649, + 2.831414, + 2.833181, + 2.834952, + 2.836726, + 2.838503, + 2.840284, + 2.84207, + 2.843859, + 2.845653, + 2.847452, + 2.849255, + 2.851064, + 2.852878, + 2.854697, + 2.856522, + 2.858353, + 2.86019, + 2.862033, + 2.863882, + 2.865737, + 2.867599, + 2.869467, + 2.871341, + 2.873221, + 2.875108, + 2.877001, + 2.878899, + 2.880804, + 2.882714, + 2.88463, + 2.886551, + 2.888478, + 2.89041, + 2.892346, + 2.894287, + 2.896232, + 2.898182, + 2.900136, + 2.902093, + 2.904053, + 2.906017, + 2.907984, + 2.909953, + 2.911925, + 2.9139, + 2.915876, + 2.917854, + 2.919833, + 2.921814, + 2.923796, + 2.925779, + 2.927762, + 2.929746, + 2.93173, + 2.933715, + 2.9357, + 2.937685, + 2.939669, + 2.941654, + 2.943639, + 2.945624, + 2.947608, + 2.949593, + 2.951578, + 2.953564, + 2.95555, + 2.957536, + 2.959524, + 2.961512, + 2.963502, + 2.965493, + 2.967486, + 2.96948, + 2.971477, + 2.973475, + 2.975477, + 2.977481, + 2.979487, + 2.981497, + 2.98351, + 2.985527, + 2.987547, + 2.989571, + 2.991599, + 2.99363, + 2.995667, + 2.997707, + 2.999752, + 3.001801, + 3.003855, + 3.005914, + 3.007977, + 3.010046, + 3.012119, + 3.014196, + 3.016279, + 3.018367, + 3.020459, + 3.022555, + 3.024657, + 3.026763, + 3.028873, + 3.030988, + 3.033107, + 3.03523, + 3.037358, + 3.039489, + 3.041624, + 3.043763, + 3.045906, + 3.048052, + 3.050202, + 3.052356, + 3.054513, + 3.056673, + 3.058837, + 3.061004, + 3.063174, + 3.065348, + 3.067524, + 3.069704, + 3.071887, + 3.074074, + 3.076263, + 3.078456, + 3.080652, + 3.082851, + 3.085053, + 3.087258, + 3.089467, + 3.091678, + 3.093893, + 3.096112, + 3.098333, + 3.100558, + 3.102786, + 3.105017, + 3.107252, + 3.10949, + 3.111731, + 3.113975, + 3.116222, + 3.118473, + 3.120727, + 3.122984, + 3.125243, + 3.127506, + 3.129771, + 3.132039, + 3.134309, + 3.136582, + 3.138857, + 3.141134, + 3.143413, + 3.145694, + 3.147977, + 3.150261, + 3.152548, + 3.154835, + 3.157124, + 3.159414, + 3.161706, + 3.163999, + 3.166293, + 3.168588, + 3.170884, + 3.173181, + 3.175479, + 3.177779, + 3.18008, + 3.182382, + 3.184685, + 3.186989, + 3.189296, + 3.191603, + 3.193913, + 3.196224, + 3.198537, + 3.200852, + 3.20317, + 3.20549, + 3.207813, + 3.210138, + 3.212467, + 3.214799, + 3.217135, + 3.219474, + 3.221817, + 3.224165, + 3.226517, + 3.228873, + 3.231234, + 3.2336, + 3.235971, + 3.238348, + 3.24073, + 3.243117, + 3.24551, + 3.247908, + 3.250312, + 3.252722, + 3.255137, + 3.257558, + 3.259985, + 3.262418, + 3.264856, + 3.2673, + 3.26975, + 3.272204, + 3.274665, + 3.27713, + 3.279601, + 3.282076, + 3.284557, + 3.287042, + 3.289532, + 3.292027, + 3.294526, + 3.297029, + 3.299537, + 3.302048, + 3.304563, + 3.307083, + 3.309606, + 3.312132, + 3.314662, + 3.317195, + 3.319732, + 3.322271, + 3.324814, + 3.32736, + 3.329909, + 3.332461, + 3.335015, + 3.337573, + 3.340133, + 3.342697, + 3.345263, + 3.347832, + 3.350403, + 3.352978, + 3.355556, + 3.358136, + 3.360719, + 3.363306, + 3.365895, + 3.368487, + 3.371083, + 3.373681, + 3.376283, + 3.378887, + 3.381496, + 3.384107, + 3.386722, + 3.38934, + 3.391961, + 3.394586, + 3.397215, + 3.399847, + 3.402482, + 3.405121, + 3.407764, + 3.410411, + 3.413061, + 3.415716, + 3.418374, + 3.421036, + 3.423702, + 3.426373, + 3.429047, + 3.431726, + 3.43441, + 3.437098, + 3.43979, + 3.442488, + 3.44519, + 3.447897, + 3.45061, + 3.453328, + 3.456051, + 3.45878, + 3.461515, + 3.464256, + 3.467003, + 3.469757, + 3.472517, + 3.475284, + 3.478058, + 3.480839, + 3.483627, + 3.486422, + 3.489224, + 3.492034, + 3.494852, + 3.497677, + 3.500509, + 3.503349, + 3.506197, + 3.509052, + 3.511916, + 3.514787, + 3.517666, + 3.520553, + 3.523448, + 3.526352, + 3.529263, + 3.532183, + 3.535112, + 3.538048, + 3.540993, + 3.543947, + 3.546909, + 3.549878, + 3.552857, + 3.555843, + 3.558837, + 3.561838, + 3.564848, + 3.567865, + 3.570889, + 3.57392, + 3.576959, + 3.580004, + 3.583056, + 3.586114, + 3.589179, + 3.592251, + 3.595328, + 3.598411, + 3.601501, + 3.604595, + 3.607695, + 3.6108, + 3.613909, + 3.617023, + 3.62014, + 3.623262, + 3.626386, + 3.629514, + 3.632644, + 3.635778, + 3.638914, + 3.642053, + 3.645195, + 3.64834, + 3.651489, + 3.654641, + 3.657798, + 3.660958, + 3.664124, + 3.667295, + 3.670471, + 3.673654, + 3.676843, + 3.680039, + 3.683242, + 3.686452, + 3.68967, + 3.692896, + 3.69613, + 3.699371, + 3.70262, + 3.705878, + 3.709143, + 3.712416, + 3.715696, + 3.718985, + 3.72228, + 3.725583, + 3.728894, + 3.732211, + 3.735536, + 3.738867, + 3.742205, + 3.745549, + 3.7489, + 3.752256, + 3.755618, + 3.758986, + 3.762358, + 3.765735, + 3.769116, + 3.772501, + 3.775889, + 3.77928, + 3.782673, + 3.786067, + 3.789463, + 3.79286, + 3.796257, + 3.799654, + 3.80305, + 3.806446, + 3.809841, + 3.813235, + 3.816629, + 3.820021, + 3.823412, + 3.826802, + 3.830192, + 3.833581, + 3.836971, + 3.840361, + 3.843751, + 3.847143, + 3.850536, + 3.853931, + 3.857328, + 3.860728, + 3.86413, + 3.867536, + 3.870946, + 3.874359, + 3.877778, + 3.8812, + 3.884628, + 3.888062, + 3.891501, + 3.894947, + 3.898399, + 3.901858, + 3.905324, + 3.908798, + 3.912279, + 3.915769, + 3.919266, + 3.922773, + 3.926288, + 3.929812, + 3.933344, + 3.936886, + 3.940436, + 3.943995, + 3.947562, + 3.951138, + 3.954722, + 3.958313, + 3.961912, + 3.965518, + 3.969131, + 3.972749, + 3.976374, + 3.980004, + 3.983638, + 3.987278, + 3.990921, + 3.994569, + 3.99822, + 4.001874, + 4.005532, + 4.009192, + 4.012855, + 4.016521, + 4.02019, + 4.023861, + 4.027535, + 4.031212, + 4.034891, + 4.038572, + 4.042257, + 4.045944, + 4.049634, + 4.053327, + 4.057023, + 4.060722, + 4.064425, + 4.068131, + 4.071841, + 4.075555, + 4.079273, + 4.082995, + 4.086722, + 4.090454, + 4.09419, + 4.097933, + 4.101681, + 4.105435, + 4.109195, + 4.112962, + 4.116735, + 4.120516, + 4.124303, + 4.128098, + 4.131901, + 4.135711, + 4.139529, + 4.143354, + 4.147188, + 4.151029, + 4.154878, + 4.158736, + 4.1626, + 4.166473, + 4.170354, + 4.174242, + 4.178138, + 4.182041, + 4.185952, + 4.189871, + 4.193797, + 4.197731, + 4.201672, + 4.205621, + 4.209578, + 4.213543, + 4.217515, + 4.221495, + 4.225483, + 4.229478, + 4.233482, + 4.237494, + 4.241514, + 4.245542, + 4.249579, + 4.253624, + 4.257678, + 4.261741, + 4.265812, + 4.269892, + 4.273982, + 4.278081, + 4.282189, + 4.286307, + 4.290435, + 4.294573, + 4.298721, + 4.302878, + 4.307047, + 4.311225, + 4.315414, + 4.319614, + 4.323824, + 4.328045, + 4.332276, + 4.336518, + 4.34077, + 4.345032, + 4.349305, + 4.353587, + 4.35788, + 4.362182, + 4.366494, + 4.370814, + 4.375144, + 4.379482, + 4.383829, + 4.388184, + 4.392546, + 4.396916, + 4.401293, + 4.405677, + 4.410068, + 4.414465, + 4.418867, + 4.423276, + 4.427689, + 4.432108, + 4.436531, + 4.440959, + 4.445391, + 4.449827, + 4.454266, + 4.458709, + 4.463154, + 4.467603, + 4.472055, + 4.476509, + 4.480966, + 4.485425, + 4.489886, + 4.49435, + 4.498816, + 4.503285, + 4.507756, + 4.51223, + 4.516706, + 4.521185, + 4.525668, + 4.530153, + 4.534642, + 4.539135, + 4.543632, + 4.548133, + 4.552639, + 4.55715, + 4.561666, + 4.566188, + 4.570715, + 4.575249, + 4.57979, + 4.584337, + 4.588891, + 4.593454, + 4.598024, + 4.602602, + 4.607189, + 4.611785, + 4.61639, + 4.621005, + 4.625629, + 4.630264, + 4.634908, + 4.639564, + 4.64423, + 4.648907, + 4.653595, + 4.658295, + 4.663006, + 4.667729, + 4.672464, + 4.677211, + 4.681969, + 4.68674, + 4.691522, + 4.696317, + 4.701123, + 4.705942, + 4.710772, + 4.715613, + 4.720467, + 4.725332, + 4.730208, + 4.735095, + 4.739993, + 4.744902, + 4.749822, + 4.754751, + 4.759691, + 4.76464, + 4.769599, + 4.774567, + 4.779544, + 4.78453, + 4.789524, + 4.794526, + 4.799536, + 4.804554, + 4.809579, + 4.814612, + 4.819651, + 4.824697, + 4.829751, + 4.83481, + 4.839877, + 4.844949, + 4.850028, + 4.855113, + 4.860204, + 4.865302, + 4.870405, + 4.875515, + 4.880631, + 4.885752, + 4.890881, + 4.896015, + 4.901155, + 4.906302, + 4.911455, + 4.916615, + 4.921781, + 4.926953, + 4.932132, + 4.937317, + 4.942509, + 4.947708, + 4.952913, + 4.958125, + 4.963344, + 4.96857, + 4.973803, + 4.979043, + 4.98429, + 4.989544, + 4.994806, + 5.000074, + 5.00535, + 5.010634, + 5.015925, + 5.021223, + 5.026529, + 5.031843, + 5.037164, + 5.042494, + 5.047831, + 5.053176, + 5.058529, + 5.063891, + 5.06926, + 5.074638, + 5.080024, + 5.085419, + 5.090822, + 5.096234, + 5.101655, + 5.107084, + 5.112523, + 5.11797, + 5.123427, + 5.128893, + 5.134368, + 5.139852, + 5.145347, + 5.150851, + 5.156364, + 5.161887, + 5.16742, + 5.172963, + 5.178516, + 5.184078, + 5.18965, + 5.195232, + 5.200823, + 5.206423, + 5.212033, + 5.217652, + 5.22328, + 5.228917, + 5.234562, + 5.240215, + 5.245876, + 5.251544, + 5.257219, + 5.262901, + 5.268589, + 5.274283, + 5.279982, + 5.285685, + 5.291393, + 5.297104, + 5.302819, + 5.308535, + 5.314254, + 5.319974, + 5.325695, + 5.331416, + 5.337136, + 5.342856, + 5.348574, + 5.354291, + 5.360006, + 5.365719, + 5.37143, + 5.377138, + 5.382844, + 5.388548, + 5.39425, + 5.39995, + 5.405648, + 5.411346, + 5.417044, + 5.422743, + 5.428443, + 5.434145, + 5.439851, + 5.445561, + 5.451277, + 5.457, + 5.462731, + 5.468472, + 5.474223, + 5.479987, + 5.485765, + 5.491557, + 5.497365, + 5.503191, + 5.509036, + 5.5149, + 5.520786, + 5.526694, + 5.532625, + 5.53858, + 5.544561, + 5.550567, + 5.556599, + 5.562659, + 5.568745, + 5.574858, + 5.580998, + 5.587164, + 5.593356, + 5.599573, + 5.605815, + 5.61208, + 5.618368, + 5.624676, + 5.631005, + 5.637352, + 5.643715, + 5.650095, + 5.656488, + 5.662894, + 5.669311, + 5.675737, + 5.682172, + 5.688613, + 5.69506, + 5.701512, + 5.707966, + 5.714423, + 5.720882, + 5.727342, + 5.733802, + 5.740262, + 5.746723, + 5.753183, + 5.759644, + 5.766105, + 5.772567, + 5.77903, + 5.785496, + 5.791964, + 5.798437, + 5.804915, + 5.8114, + 5.817892, + 5.824393, + 5.830904, + 5.837427, + 5.843963, + 5.850513, + 5.857078, + 5.863659, + 5.870257, + 5.876873, + 5.883509, + 5.890164, + 5.89684, + 5.903538, + 5.910257, + 5.916998, + 5.923762, + 5.930549, + 5.937359, + 5.944192, + 5.951049, + 5.957928, + 5.96483, + 5.971754, + 5.978699, + 5.985665, + 5.992651, + 5.999655, + 6.006677, + 6.013715, + 6.020768, + 6.027834, + 6.034912, + 6.042001, + 6.049098, + 6.056203, + 6.063314, + 6.070429, + 6.077547, + 6.084667, + 6.091789, + 6.098909, + 6.106029, + 6.113147, + 6.120263, + 6.127376, + 6.134485, + 6.141591, + 6.148694, + 6.155793, + 6.16289, + 6.169983, + 6.177075, + 6.184164, + 6.191253, + 6.198341, + 6.20543, + 6.212521, + 6.219614, + 6.226712, + 6.233815, + 6.240924, + 6.248041, + 6.255168, + 6.262305, + 6.269455, + 6.276617, + 6.283795, + 6.290989, + 6.298199, + 6.305428, + 6.312676, + 6.319943, + 6.327231, + 6.33454, + 6.34187, + 6.349222, + 6.356594, + 6.363988, + 6.371403, + 6.378839, + 6.386294, + 6.393768, + 6.401261, + 6.408771, + 6.416298, + 6.42384, + 6.431396, + 6.438965, + 6.446546, + 6.454137, + 6.461737, + 6.469345, + 6.476959, + 6.484579, + 6.492203, + 6.499829, + 6.507457, + 6.515085, + 6.522713, + 6.53034, + 6.537965, + 6.545587, + 6.553207, + 6.560823, + 6.568436, + 6.576045, + 6.583652, + 6.591256, + 6.598857, + 6.606457, + 6.614056, + 6.621655, + 6.629255, + 6.636857, + 6.644461, + 6.65207, + 6.659685, + 6.667305, + 6.674934, + 6.682572, + 6.690221, + 6.697881, + 6.705554, + 6.713242, + 6.720944, + 6.728663, + 6.736399, + 6.744154, + 6.751927, + 6.759721, + 6.767534, + 6.775369, + 6.783225, + 6.791103, + 6.799004, + 6.806926, + 6.81487, + 6.822837, + 6.830825, + 6.838835, + 6.846866, + 6.854917, + 6.862989, + 6.871079, + 6.879188, + 6.887314, + 6.895456, + 6.903614, + 6.911787, + 6.919973, + 6.928171, + 6.93638, + 6.9446, + 6.952829, + 6.961067, + 6.969312, + 6.977565, + 6.985823, + 6.994087, + 7.002357, + 7.010632, + 7.018911, + 7.027194, + 7.035482, + 7.043775, + 7.052072, + 7.060373, + 7.06868, + 7.076993, + 7.085311, + 7.093635, + 7.101967, + 7.110306, + 7.118654, + 7.12701, + 7.135376, + 7.143752, + 7.15214, + 7.16054, + 7.168952, + 7.177378, + 7.185818, + 7.194273, + 7.202743, + 7.21123, + 7.219734, + 7.228256, + 7.236795, + 7.245353, + 7.253931, + 7.262527, + 7.271143, + 7.279779, + 7.288434, + 7.297109, + 7.305804, + 7.314519, + 7.323252, + 7.332005, + 7.340777, + 7.349567, + 7.358374, + 7.367199, + 7.376041, + 7.384899, + 7.393773, + 7.402662, + 7.411566, + 7.420484, + 7.429415, + 7.438359, + 7.447316, + 7.456285, + 7.465265, + 7.474256, + 7.483258, + 7.49227, + 7.501292, + 7.510323, + 7.519363, + 7.528411, + 7.537468, + 7.546533, + 7.555606, + 7.564687, + 7.573776, + 7.582872, + 7.591975, + 7.601087, + 7.610206, + 7.619333, + 7.628468, + 7.637612, + 7.646765, + 7.655927, + 7.665099, + 7.67428, + 7.683473, + 7.692676, + 7.701891, + 7.711118, + 7.720358, + 7.72961, + 7.738875, + 7.748153, + 7.757446, + 7.766752, + 7.776072, + 7.785406, + 7.794754, + 7.804116, + 7.813492, + 7.822883, + 7.832287, + 7.841705, + 7.851136, + 7.86058, + 7.870037, + 7.879507, + 7.888989, + 7.898483, + 7.907988, + 7.917505, + 7.927033, + 7.93657, + 7.946118, + 7.955675, + 7.965242, + 7.974816, + 7.984399, + 7.993989, + 8.003586, + 8.01319, + 8.0228, + 8.032416, + 8.042036, + 8.051662, + 8.061292, + 8.070926, + 8.080563, + 8.090204, + 8.099849, + 8.109496, + 8.119146, + 8.1288, + 8.138456, + 8.148114, + 8.157776, + 8.16744, + 8.177106, + 8.186776, + 8.196449, + 8.206124, + 8.215802, + 8.225483, + 8.235167, + 8.244853, + 8.254542, + 8.264234, + 8.273927, + 8.283623, + 8.29332, + 8.303019, + 8.312718, + 8.322419, + 8.332121, + 8.341824, + 8.351527, + 8.361232, + 8.370937, + 8.380645, + 8.390355, + 8.400068, + 8.409786, + 8.41951, + 8.429241, + 8.438983, + 8.448735, + 8.458503, + 8.468286, + 8.47809, + 8.487915, + 8.497766, + 8.507646, + 8.517556, + 8.527501, + 8.537483, + 8.547504, + 8.557568, + 8.567675, + 8.57783, + 8.588031, + 8.598282, + 8.608584, + 8.618935, + 8.629337, + 8.639789, + 8.650291, + 8.66084, + 8.671436, + 8.682076, + 8.692759, + 8.703482, + 8.714242, + 8.725037, + 8.735863, + 8.746717, + 8.757596, + 8.768497, + 8.779415, + 8.790347, + 8.80129, + 8.812239, + 8.823191, + 8.834142, + 8.845089, + 8.856027, + 8.866954, + 8.877867, + 8.888763, + 8.89964, + 8.910496, + 8.92133, + 8.932141, + 8.942928, + 8.953692, + 8.964433, + 8.975152, + 8.985851, + 8.996531, + 9.007195, + 9.017845, + 9.028483, + 9.039114, + 9.049741, + 9.060368, + 9.070998, + 9.081636, + 9.092286, + 9.102953, + 9.11364, + 9.124353, + 9.135095, + 9.145871, + 9.156684, + 9.167537, + 9.178435, + 9.18938, + 9.200374, + 9.21142, + 9.22252, + 9.233675, + 9.244886, + 9.256154, + 9.267479, + 9.278861, + 9.2903, + 9.301794, + 9.313344, + 9.324946, + 9.336599, + 9.348301, + 9.360049, + 9.37184, + 9.38367, + 9.395537, + 9.407436, + 9.419363, + 9.431315, + 9.443287, + 9.455274, + 9.467274, + 9.47928, + 9.49129, + 9.503299, + 9.515304, + 9.527301, + 9.539287, + 9.551258, + 9.563213, + 9.575148, + 9.587063, + 9.598955, + 9.610825, + 9.62267, + 9.634492, + 9.64629, + 9.658065, + 9.669818, + 9.681551, + 9.693265, + 9.704964, + 9.716648, + 9.728321, + 9.739986, + 9.751645, + 9.763303, + 9.774963, + 9.786627, + 9.798301, + 9.809986, + 9.821686, + 9.833406, + 9.845147, + 9.856914, + 9.868709, + 9.880534, + 9.892393, + 9.904286, + 9.916217, + 9.928186, + 9.940194, + 9.952243, + 9.964332, + 9.976461, + 9.988631, + 10.000839, + 10.013086, + 10.025369, + 10.037688, + 10.050039, + 10.062421, + 10.074831, + 10.087268, + 10.099727, + 10.112207, + 10.124704, + 10.137216, + 10.14974, + 10.162273, + 10.174811, + 10.187353, + 10.199896, + 10.212437, + 10.224974, + 10.237504, + 10.250027, + 10.26254, + 10.275042, + 10.287532, + 10.300009, + 10.312473, + 10.324924, + 10.337362, + 10.349787, + 10.3622, + 10.374603, + 10.386997, + 10.399383, + 10.411763, + 10.424141, + 10.436518, + 10.448896, + 10.46128, + 10.473671, + 10.486073, + 10.498488, + 10.510921, + 10.523372, + 10.535847, + 10.548347, + 10.560874, + 10.573432, + 10.586022, + 10.598646, + 10.611306, + 10.624004, + 10.63674, + 10.649516, + 10.662331, + 10.675186, + 10.688081, + 10.701016, + 10.713989, + 10.727, + 10.740048, + 10.75313, + 10.766246, + 10.779393, + 10.792569, + 10.805771, + 10.818998, + 10.832246, + 10.845513, + 10.858797, + 10.872094, + 10.885402, + 10.898719, + 10.912041, + 10.925367, + 10.938694, + 10.95202, + 10.965343, + 10.978661, + 10.991974, + 11.005279, + 11.018576, + 11.031864, + 11.045143, + 11.058413, + 11.071673, + 11.084924, + 11.098168, + 11.111404, + 11.124633, + 11.137858, + 11.151079, + 11.164299, + 11.177518, + 11.190739, + 11.203965, + 11.217197, + 11.230437, + 11.243688, + 11.256952, + 11.270232, + 11.28353, + 11.296848, + 11.310189, + 11.323554, + 11.336946, + 11.350366, + 11.363817, + 11.3773, + 11.390816, + 11.404367, + 11.417953, + 11.431576, + 11.445234, + 11.45893, + 11.472661, + 11.486429, + 11.500231, + 11.514068, + 11.527937, + 11.541836, + 11.555766, + 11.569722, + 11.583703, + 11.597707, + 11.611731, + 11.625772, + 11.639829, + 11.653899, + 11.667978, + 11.682066, + 11.696158, + 11.710253, + 11.724349, + 11.738443, + 11.752533, + 11.766618, + 11.780695, + 11.794763, + 11.80882, + 11.822866, + 11.836897, + 11.850914, + 11.864916, + 11.878901, + 11.892868, + 11.906817, + 11.920748, + 11.934658, + 11.948549, + 11.96242, + 11.976269, + 11.990097, + 12.003902, + 12.017684, + 12.031441, + 12.045174, + 12.05888, + 12.072559, + 12.086208, + 12.099827, + 12.113415, + 12.12697, + 12.140491, + 12.153978, + 12.16743, + 12.180848, + 12.194233, + 12.207586, + 12.22091, + 12.234209, + 12.247488, + 12.260752, + 12.274009, + 12.287266, + 12.300532, + 12.313817, + 12.327132, + 12.340488, + 12.353897, + 12.36737, + 12.380919, + 12.394555, + 12.40829, + 12.422132, + 12.43609, + 12.450171, + 12.464382, + 12.478724, + 12.4932, + 12.50781, + 12.522551, + 12.537421, + 12.552412, + 12.567519, + 12.582733, + 12.598044, + 12.61344, + 12.628912, + 12.644447, + 12.660032, + 12.675655, + 12.691304, + 12.706967, + 12.722631, + 12.738287, + 12.753922, + 12.769528, + 12.785095, + 12.800614, + 12.816078, + 12.83148, + 12.846814, + 12.862073, + 12.877254, + 12.892351, + 12.907361, + 12.922282, + 12.937112, + 12.951849, + 12.966492, + 12.981044, + 12.995506, + 13.00988, + 13.024172, + 13.038386, + 13.052529, + 13.066609, + 13.080634, + 13.094614, + 13.108561, + 13.122485, + 13.136398, + 13.150313, + 13.164244, + 13.178201, + 13.192197, + 13.206245, + 13.220355, + 13.234537, + 13.2488, + 13.263153, + 13.277602, + 13.292151, + 13.306806, + 13.321569, + 13.336442, + 13.351424, + 13.366514, + 13.381712, + 13.397014, + 13.412416, + 13.427914, + 13.443503, + 13.459177, + 13.47493, + 13.490755, + 13.506646, + 13.522594, + 13.538591, + 13.554631, + 13.570703, + 13.586801, + 13.602914, + 13.619035, + 13.635153, + 13.65126, + 13.667348, + 13.683407, + 13.699429, + 13.715407, + 13.731333, + 13.7472, + 13.763003, + 13.778736, + 13.794396, + 13.80998, + 13.825485, + 13.840913, + 13.856262, + 13.871535, + 13.886736, + 13.901867, + 13.916934, + 13.931944, + 13.946902, + 13.961817, + 13.976695, + 13.991547, + 14.006379, + 14.021201, + 14.036021, + 14.050848, + 14.06569, + 14.080555, + 14.095449, + 14.110381, + 14.125355, + 14.140379, + 14.155456, + 14.170592, + 14.185791, + 14.201055, + 14.216388, + 14.231791, + 14.247265, + 14.262812, + 14.278432, + 14.294123, + 14.309884, + 14.325713, + 14.341608, + 14.357565, + 14.37358, + 14.389647, + 14.405762, + 14.421918, + 14.438108, + 14.454326, + 14.470565, + 14.486815, + 14.503071, + 14.519323, + 14.535565, + 14.551788, + 14.567985, + 14.58415, + 14.600275, + 14.616357, + 14.632389, + 14.648367, + 14.664288, + 14.68015, + 14.695951, + 14.71169, + 14.727367, + 14.742984, + 14.758543, + 14.774045, + 14.789493, + 14.804893, + 14.820247, + 14.835561, + 14.850839, + 14.866088, + 14.881312, + 14.896517, + 14.91171, + 14.926897, + 14.942083, + 14.957275, + 14.972479, + 14.987702, + 15.002948, + 15.018225, + 15.033538, + 15.048891, + 15.064291, + 15.079742, + 15.095248, + 15.110813, + 15.12644, + 15.142133, + 15.157892, + 15.173719, + 15.189614, + 15.205579, + 15.221611, + 15.23771, + 15.253872, + 15.270096, + 15.286376, + 15.302709, + 15.319088, + 15.33551, + 15.351966, + 15.368452, + 15.384961, + 15.401486, + 15.418021, + 15.434559, + 15.451095, + 15.467622, + 15.484135, + 15.50063, + 15.5171, + 15.533543, + 15.549955, + 15.566331, + 15.58267, + 15.598968, + 15.615223, + 15.631434, + 15.647599, + 15.663718, + 15.679788, + 15.69581, + 15.711784, + 15.727709, + 15.743587, + 15.759418, + 15.775205, + 15.790949, + 15.806652, + 15.822318, + 15.837949, + 15.853548, + 15.86912, + 15.884667, + 15.900194, + 15.915703, + 15.931199, + 15.946685, + 15.962163, + 15.977635, + 15.993105, + 16.008571, + 16.024036, + 16.039497, + 16.054953, + 16.070401, + 16.085836, + 16.101254, + 16.11665, + 16.132017, + 16.147349, + 16.162639, + 16.17788, + 16.193066, + 16.208193, + 16.223255, + 16.238251, + 16.25318, + 16.268044, + 16.282847, + 16.297596, + 16.312299, + 16.326969, + 16.341619, + 16.356267, + 16.370929, + 16.385626, + 16.400377, + 16.415202, + 16.430123, + 16.445158, + 16.460325, + 16.475641, + 16.49112, + 16.506773, + 16.52261, + 16.538634, + 16.554849, + 16.571253, + 16.587845, + 16.604615, + 16.621556, + 16.638654, + 16.655896, + 16.673266, + 16.690748, + 16.708322, + 16.725972, + 16.743679, + 16.761426, + 16.779195, + 16.796969, + 16.814734, + 16.832473, + 16.850175, + 16.867825, + 16.885413, + 16.902927, + 16.920357, + 16.937692, + 16.954924, + 16.972044, + 16.989043, + 17.005914, + 17.022652, + 17.039249, + 17.055703, + 17.072009, + 17.088166, + 17.104173, + 17.120033, + 17.135748, + 17.151324, + 17.166769, + 17.18209, + 17.1973, + 17.21241, + 17.227436, + 17.242393, + 17.257296, + 17.272165, + 17.287016, + 17.301868, + 17.316738, + 17.331644, + 17.346603, + 17.361629, + 17.376738, + 17.391942, + 17.407251, + 17.422676, + 17.438224, + 17.453901, + 17.469712, + 17.485658, + 17.501742, + 17.517963, + 17.534319, + 17.550807, + 17.567423, + 17.584163, + 17.60102, + 17.617987, + 17.635057, + 17.65222, + 17.669468, + 17.686791, + 17.704177, + 17.721616, + 17.739096, + 17.756605, + 17.774129, + 17.791655, + 17.809171, + 17.826663, + 17.844117, + 17.86152, + 17.87886, + 17.896125, + 17.913305, + 17.930388, + 17.947366, + 17.964232, + 17.980979, + 17.997605, + 18.014105, + 18.03048, + 18.046729, + 18.062855, + 18.078863, + 18.094758, + 18.110546, + 18.126235, + 18.141835, + 18.157352, + 18.172798, + 18.188182, + 18.203516, + 18.218809, + 18.234073, + 18.249318, + 18.264555, + 18.279795, + 18.295047, + 18.310321, + 18.325625, + 18.340968, + 18.356357, + 18.371799, + 18.3873, + 18.402865, + 18.418498, + 18.434203, + 18.449982, + 18.465837, + 18.481769, + 18.497776, + 18.513858, + 18.530012, + 18.546236, + 18.562524, + 18.578871, + 18.595272, + 18.61172, + 18.628206, + 18.644722, + 18.661259, + 18.677809, + 18.69436, + 18.710903, + 18.727427, + 18.743924, + 18.760382, + 18.776793, + 18.793148, + 18.809438, + 18.825656, + 18.841795, + 18.857849, + 18.873815, + 18.889686, + 18.905462, + 18.921141, + 18.93672, + 18.952202, + 18.967586, + 18.982875, + 18.998072, + 19.013179, + 19.028202, + 19.043144, + 19.058011, + 19.072809, + 19.087543, + 19.102221, + 19.116848, + 19.131432, + 19.145979, + 19.160499, + 19.174997, + 19.189482, + 19.20396, + 19.21844, + 19.232927, + 19.247428, + 19.261951, + 19.276498, + 19.291078, + 19.305693, + 19.32035, + 19.33505, + 19.349798, + 19.364596, + 19.379444, + 19.394342, + 19.40929, + 19.424286, + 19.439326, + 19.454406, + 19.469522, + 19.484668, + 19.499838, + 19.515024, + 19.530218, + 19.545409, + 19.560591, + 19.575752, + 19.590886, + 19.605981, + 19.621029, + 19.636023, + 19.650953, + 19.66581, + 19.680587, + 19.695273, + 19.709862, + 19.724342, + 19.738705, + 19.75294, + 19.767037, + 19.780985, + 19.794774, + 19.808393, + 19.821833, + 19.835085, + 19.848141, + 19.860998, + 19.873651, + 19.886102, + 19.898355, + 19.910418, + 19.922303, + 19.934028, + 19.945615, + 19.957088, + 19.968479, + 19.979821, + 19.99115, + 20.002505, + 20.013924, + 20.025449, + 20.037117, + 20.048966, + 20.061028, + 20.073334, + 20.08591, + 20.098774, + 20.111942, + 20.125424, + 20.13922, + 20.15333, + 20.167744, + 20.182449, + 20.197428, + 20.21266, + 20.228119, + 20.243781, + 20.259617, + 20.275599, + 20.291699, + 20.30789, + 20.324143, + 20.340435, + 20.356739, + 20.373034, + 20.389297, + 20.405509, + 20.421649, + 20.437698, + 20.453639, + 20.469454, + 20.485125, + 20.500635, + 20.515966, + 20.531104, + 20.546031, + 20.560734, + 20.5752, + 20.589417, + 20.603377, + 20.617073, + 20.630503, + 20.643667, + 20.656569, + 20.669219, + 20.681627, + 20.69381, + 20.705787, + 20.717582, + 20.72922, + 20.74073, + 20.752142, + 20.763486, + 20.774796, + 20.786102, + 20.797436, + 20.808827, + 20.820303, + 20.831889, + 20.843609, + 20.855481, + 20.867523, + 20.879748, + 20.892168, + 20.90479, + 20.917619, + 20.930657, + 20.943906, + 20.957363, + 20.971024, + 20.984886, + 20.99894, + 21.013179, + 21.027593, + 21.042173, + 21.056907, + 21.071782, + 21.086785, + 21.101897, + 21.117106, + 21.132391, + 21.147736, + 21.163119, + 21.178523, + 21.193925, + 21.209305, + 21.224642, + 21.239915, + 21.255103, + 21.270185, + 21.285142, + 21.299958, + 21.314615, + 21.3291, + 21.3434, + 21.357507, + 21.371413, + 21.385115, + 21.398612, + 21.411906, + 21.425001, + 21.437905, + 21.450626, + 21.463178, + 21.475574, + 21.487829, + 21.499959, + 21.511982, + 21.523916, + 21.535779, + 21.54759, + 21.559366, + 21.571125, + 21.582884, + 21.594658, + 21.606464, + 21.618314, + 21.630223, + 21.642202, + 21.654263, + 21.666414, + 21.678665, + 21.691022, + 21.703494, + 21.716084, + 21.728797, + 21.741635, + 21.7546, + 21.767692, + 21.780909, + 21.794247, + 21.807702, + 21.821268, + 21.834937, + 21.848699, + 21.862542, + 21.876456, + 21.890425, + 21.904435, + 21.918471, + 21.932516, + 21.946553, + 21.960566, + 21.974538, + 21.988452, + 22.002292, + 22.016043, + 22.029693, + 22.043227, + 22.056635, + 22.069908, + 22.083037, + 22.096016, + 22.108842, + 22.12151, + 22.134021, + 22.146374, + 22.158572, + 22.170618, + 22.182517, + 22.194274, + 22.205896, + 22.217391, + 22.228769, + 22.240037, + 22.251207, + 22.262289, + 22.273292, + 22.28423, + 22.295113, + 22.305953, + 22.316761, + 22.327549, + 22.338329, + 22.349113, + 22.35991, + 22.370732, + 22.381588, + 22.392488, + 22.40344, + 22.41445, + 22.425526, + 22.436671, + 22.447889, + 22.459181, + 22.470545, + 22.481981, + 22.493482, + 22.505041, + 22.516649, + 22.528294, + 22.539961, + 22.551634, + 22.563293, + 22.57492, + 22.586491, + 22.597986, + 22.609384, + 22.620662, + 22.631802, + 22.642787, + 22.653602, + 22.664237, + 22.674686, + 22.684947, + 22.695021, + 22.704919, + 22.714651, + 22.724236, + 22.733697, + 22.743058, + 22.752349, + 22.7616, + 22.770845, + 22.780116, + 22.789444, + 22.79886, + 22.80839, + 22.81806, + 22.827889, + 22.837892, + 22.848081, + 22.858464, + 22.869042, + 22.879812, + 22.890767, + 22.901897, + 22.913189, + 22.924627, + 22.936194, + 22.947872, + 22.959644, + 22.971493, + 22.983403, + 22.995358, + 23.007345, + 23.019352, + 23.031369, + 23.043386, + 23.055394, + 23.067387, + 23.079355, + 23.091292, + 23.103188, + 23.115035, + 23.126822, + 23.138539, + 23.150174, + 23.161715, + 23.173149, + 23.184463, + 23.195646, + 23.206684, + 23.217569, + 23.228288, + 23.238838, + 23.249213, + 23.259415, + 23.269445, + 23.279311, + 23.289024, + 23.298598, + 23.308048, + 23.317395, + 23.32666, + 23.335866, + 23.345036, + 23.354193, + 23.36336, + 23.372559, + 23.38181, + 23.391129, + 23.400533, + 23.410032, + 23.419638, + 23.429357, + 23.439193, + 23.449149, + 23.459224, + 23.469418, + 23.479728, + 23.49015, + 23.500681, + 23.511316, + 23.52205, + 23.532879, + 23.543799, + 23.554806, + 23.565895, + 23.577062, + 23.588302, + 23.59961, + 23.61098, + 23.622404, + 23.633876, + 23.645385, + 23.656921, + 23.668472, + 23.680026, + 23.691567, + 23.703082, + 23.714556, + 23.725972, + 23.737317, + 23.748576, + 23.759735, + 23.770784, + 23.781712, + 23.792511, + 23.803176, + 23.813703, + 23.824092, + 23.834343, + 23.844461, + 23.85445, + 23.864318, + 23.874073, + 23.883726, + 23.893287, + 23.902768, + 23.912181, + 23.921538, + 23.930851, + 23.940131, + 23.949389, + 23.958634, + 23.967877, + 23.977126, + 23.986389, + 23.995673, + 24.004984, + 24.014328, + 24.023712, + 24.03314, + 24.042618, + 24.05215, + 24.06174, + 24.071393, + 24.081113, + 24.090903, + 24.100766, + 24.110704, + 24.120718, + 24.130809, + 24.140977, + 24.151218, + 24.161531, + 24.17191, + 24.182349, + 24.19284, + 24.203376, + 24.213944, + 24.224536, + 24.235138, + 24.245739, + 24.256327, + 24.266887, + 24.277409, + 24.287881, + 24.298291, + 24.30863, + 24.318888, + 24.329059, + 24.339136, + 24.349114, + 24.358988, + 24.368757, + 24.37842, + 24.387975, + 24.397423, + 24.406766, + 24.416006, + 24.425144, + 24.434184, + 24.443128, + 24.451976, + 24.460733, + 24.4694, + 24.477982, + 24.48648, + 24.4949, + 24.503247, + 24.511524, + 24.519738, + 24.527893, + 24.535997, + 24.544055, + 24.552073, + 24.560057, + 24.568011, + 24.57594, + 24.583846, + 24.591731, + 24.599594, + 24.607432, + 24.615242, + 24.623017, + 24.630749, + 24.638429, + 24.646046, + 24.653588, + 24.661047, + 24.668411, + 24.675673, + 24.682829, + 24.689877, + 24.696821, + 24.703667, + 24.710429, + 24.717124, + 24.723775, + 24.730409, + 24.737055, + 24.743747, + 24.750517, + 24.757402, + 24.764432, + 24.77164, + 24.779053, + 24.786692, + 24.794576, + 24.802715, + 24.811114, + 24.819772, + 24.828678, + 24.83782, + 24.847178, + 24.856727, + 24.866439, + 24.876285, + 24.886233, + 24.896252, + 24.90631, + 24.916378, + 24.926431, + 24.936444, + 24.946397, + 24.956273, + 24.966056, + 24.975738, + 24.985309, + 24.994763, + 25.004096, + 25.013303, + 25.022382, + 25.03133, + 25.040142, + 25.048815, + 25.057343, + 25.06572, + 25.07394, + 25.081995, + 25.08988, + 25.097587, + 25.105113, + 25.112454, + 25.119611, + 25.126586, + 25.133385, + 25.140018, + 25.146499, + 25.152845, + 25.159078, + 25.16522, + 25.171299, + 25.177343, + 25.183382, + 25.189447, + 25.195565, + 25.201766, + 25.208077, + 25.21452, + 25.221116, + 25.227881, + 25.23483, + 25.24197, + 25.249307, + 25.256841, + 25.264572, + 25.272494, + 25.2806, + 25.28888, + 25.297322, + 25.305916, + 25.314648, + 25.323506, + 25.332477, + 25.341549, + 25.350709, + 25.359946, + 25.369248, + 25.378605, + 25.388005, + 25.397436, + 25.406888, + 25.416348, + 25.425803, + 25.435239, + 25.444643, + 25.453997, + 25.463288, + 25.472498, + 25.481613, + 25.490615, + 25.499489, + 25.508223, + 25.516804, + 25.525221, + 25.533467, + 25.541536, + 25.549426, + 25.557138, + 25.564675, + 25.572044, + 25.579254, + 25.586313, + 25.593237, + 25.600039, + 25.606737, + 25.613347, + 25.619888, + 25.626378, + 25.632835, + 25.639274, + 25.645714, + 25.652167, + 25.658647, + 25.665166, + 25.671733, + 25.678358, + 25.685047, + 25.691806, + 25.69864, + 25.705552, + 25.712546, + 25.719623, + 25.726785, + 25.734034, + 25.74137, + 25.748795, + 25.756307, + 25.763908, + 25.771596, + 25.779369, + 25.787224, + 25.795158, + 25.803166, + 25.811241, + 25.819374, + 25.827558, + 25.835781, + 25.844031, + 25.852295, + 25.86056, + 25.868811, + 25.877034, + 25.885213, + 25.893336, + 25.901387, + 25.909356, + 25.91723, + 25.925, + 25.932659, + 25.9402, + 25.947619, + 25.954914, + 25.962084, + 25.96913, + 25.976055, + 25.982862, + 25.989555, + 25.996141, + 26.002626, + 26.009015, + 26.015317, + 26.021537, + 26.027682, + 26.033759, + 26.039774, + 26.045732, + 26.05164, + 26.057502, + 26.063321, + 26.069103, + 26.07485, + 26.080563, + 26.086244, + 26.091893, + 26.097508, + 26.103087, + 26.108625, + 26.114115, + 26.119552, + 26.124927, + 26.13023, + 26.135452, + 26.140585, + 26.145619, + 26.150548, + 26.155368, + 26.160079, + 26.164685, + 26.169194, + 26.17362, + 26.177982, + 26.182303, + 26.186611, + 26.190937, + 26.195316, + 26.199783, + 26.204373, + 26.20912, + 26.214057, + 26.21921, + 26.224604, + 26.230253, + 26.23617, + 26.242358, + 26.248812, + 26.255524, + 26.262475, + 26.269644, + 26.277004, + 26.284524, + 26.292172, + 26.299914, + 26.307715, + 26.315543, + 26.323369, + 26.331163, + 26.338903, + 26.346567, + 26.35414, + 26.361608, + 26.368962, + 26.376196, + 26.383305, + 26.390288, + 26.397142, + 26.403867, + 26.410461, + 26.416923, + 26.423251, + 26.429441, + 26.435488, + 26.441387, + 26.447133, + 26.452719, + 26.458142, + 26.463396, + 26.468481, + 26.473396, + 26.478146, + 26.482738, + 26.487182, + 26.491493, + 26.495689, + 26.499793, + 26.503829, + 26.507824, + 26.511808, + 26.51581, + 26.519859, + 26.523987, + 26.528219, + 26.532583, + 26.537101, + 26.541793, + 26.546672, + 26.551752, + 26.557038, + 26.562533, + 26.568237, + 26.574144, + 26.580246, + 26.586534, + 26.592994, + 26.599613, + 26.606376, + 26.613266, + 26.62027, + 26.627372, + 26.634557, + 26.641812, + 26.649124, + 26.656479, + 26.663867, + 26.671276, + 26.678694, + 26.686109, + 26.69351, + 26.700885, + 26.70822, + 26.715503, + 26.722718, + 26.729853, + 26.736892, + 26.743821, + 26.750626, + 26.757294, + 26.763814, + 26.770175, + 26.77637, + 26.782393, + 26.78824, + 26.793914, + 26.799415, + 26.804752, + 26.809931, + 26.814966, + 26.81987, + 26.824659, + 26.829351, + 26.833964, + 26.838518, + 26.843031, + 26.847523, + 26.852013, + 26.856516, + 26.861049, + 26.865626, + 26.870259, + 26.874958, + 26.879733, + 26.88459, + 26.889535, + 26.894571, + 26.899703, + 26.904931, + 26.910258, + 26.915683, + 26.921207, + 26.926829, + 26.932549, + 26.938365, + 26.944275, + 26.950278, + 26.956369, + 26.962546, + 26.968802, + 26.975132, + 26.981528, + 26.987983, + 26.994485, + 27.001025, + 27.007589, + 27.014165, + 27.020738, + 27.027294, + 27.033817, + 27.040293, + 27.046706, + 27.053042, + 27.059288, + 27.065432, + 27.071462, + 27.077371, + 27.08315, + 27.088795, + 27.094301, + 27.099667, + 27.104893, + 27.10998, + 27.114932, + 27.119754, + 27.12445, + 27.129028, + 27.133494, + 27.137857, + 27.142123, + 27.146301, + 27.150398, + 27.154421, + 27.158377, + 27.162271, + 27.166108, + 27.169891, + 27.173622, + 27.177301, + 27.180927, + 27.184496, + 27.188005, + 27.191446, + 27.194814, + 27.1981, + 27.201296, + 27.204397, + 27.207396, + 27.21029, + 27.213079, + 27.215767, + 27.218362, + 27.220877, + 27.223332, + 27.22575, + 27.228159, + 27.230594, + 27.233089, + 27.235684, + 27.238418, + 27.241329, + 27.244455, + 27.247829, + 27.251478, + 27.255427, + 27.259691, + 27.264277, + 27.269188, + 27.274414, + 27.279943, + 27.285751, + 27.291812, + 27.298093, + 27.304558, + 27.311168, + 27.317883, + 27.324665, + 27.331476, + 27.338279, + 27.345044, + 27.35174, + 27.358344, + 27.364836, + 27.371198, + 27.377418, + 27.383486, + 27.389395, + 27.395138, + 27.400713, + 27.406115, + 27.411341, + 27.416386, + 27.421246, + 27.425916, + 27.430391, + 27.434663, + 27.438729, + 27.442581, + 27.446218, + 27.449637, + 27.452839, + 27.45583, + 27.458615, + 27.461209, + 27.463626, + 27.465889, + 27.46802, + 27.470049, + 27.472006, + 27.473926, + 27.475843, + 27.477792, + 27.47981, + 27.481929, + 27.484182, + 27.486597, + 27.489199, + 27.492009, + 27.495044, + 27.498315, + 27.501828, + 27.505588, + 27.509591, + 27.513833, + 27.518305, + 27.522996, + 27.527893, + 27.532981, + 27.538246, + 27.54367, + 27.549238, + 27.554936, + 27.560747, + 27.566658, + 27.572655, + 27.578723, + 27.58485, + 27.59102, + 27.597222, + 27.60344, + 27.609659, + 27.615863, + 27.622036, + 27.628158, + 27.634213, + 27.640182, + 27.646045, + 27.651783, + 27.65738, + 27.662817, + 27.668081, + 27.67316, + 27.678042, + 27.682721, + 27.687195, + 27.691462, + 27.695527, + 27.699396, + 27.70308, + 27.706593, + 27.70995, + 27.71317, + 27.716273, + 27.719279, + 27.72221, + 27.725088, + 27.727934, + 27.730767, + 27.733608, + 27.736472, + 27.739376, + 27.742334, + 27.745358, + 27.748457, + 27.751641, + 27.754915, + 27.758287, + 27.761761, + 27.765339, + 27.769026, + 27.772822, + 27.77673, + 27.780751, + 27.784884, + 27.78913, + 27.793486, + 27.797951, + 27.802522, + 27.807194, + 27.811961, + 27.816817, + 27.821751, + 27.826754, + 27.831815, + 27.83692, + 27.842054, + 27.847203, + 27.85235, + 27.857478, + 27.862572, + 27.867613, + 27.872587, + 27.877479, + 27.882274, + 27.88696, + 27.891527, + 27.895965, + 27.900267, + 27.904429, + 27.908448, + 27.912323, + 27.916054, + 27.919644, + 27.923096, + 27.926416, + 27.92961, + 27.932683, + 27.935644, + 27.938499, + 27.941255, + 27.943918, + 27.946495, + 27.948989, + 27.951405, + 27.953744, + 27.956007, + 27.958192, + 27.960297, + 27.962317, + 27.964248, + 27.966082, + 27.967813, + 27.969435, + 27.970943, + 27.972334, + 27.973608, + 27.974768, + 27.975821, + 27.976781, + 27.977665, + 27.978497, + 27.979304, + 27.980121, + 27.980984, + 27.981934, + 27.983014, + 27.984265, + 27.985729, + 27.987445, + 27.989446, + 27.991762, + 27.994414, + 27.997419, + 28.000781, + 28.004499, + 28.008563, + 28.012955, + 28.017651, + 28.022618, + 28.027821, + 28.033221, + 28.038775, + 28.044441, + 28.050177, + 28.055943, + 28.061702, + 28.067419, + 28.073064, + 28.078612, + 28.084041, + 28.089335, + 28.09448, + 28.099465, + 28.104283, + 28.108927, + 28.113393, + 28.117677, + 28.121774, + 28.12568, + 28.129389, + 28.132895, + 28.136192, + 28.139273, + 28.142134, + 28.144768, + 28.147174, + 28.149349, + 28.151297, + 28.153022, + 28.154536, + 28.155851, + 28.156987, + 28.157968, + 28.158819, + 28.159574, + 28.160265, + 28.16093, + 28.161606, + 28.162332, + 28.163144, + 28.164079, + 28.165171, + 28.166449, + 28.16794, + 28.169664, + 28.171639, + 28.173876, + 28.17638, + 28.179155, + 28.182197, + 28.185499, + 28.189051, + 28.19284, + 28.196851, + 28.201067, + 28.205469, + 28.210041, + 28.214763, + 28.219617, + 28.224586, + 28.229653, + 28.2348, + 28.240011, + 28.245271, + 28.250563, + 28.255871, + 28.261178, + 28.266467, + 28.271721, + 28.276922, + 28.282051, + 28.287088, + 28.292015, + 28.296812, + 28.301461, + 28.305945, + 28.310248, + 28.314357, + 28.31826, + 28.321948, + 28.325418, + 28.328666, + 28.331696, + 28.334514, + 28.337127, + 28.33955, + 28.341798, + 28.343889, + 28.345843, + 28.347682, + 28.34943, + 28.351111, + 28.352747, + 28.354362, + 28.355978, + 28.357615, + 28.359293, + 28.361028, + 28.362838, + 28.364733, + 28.366728, + 28.36883, + 28.371048, + 28.373389, + 28.375859, + 28.37846, + 28.381197, + 28.384071, + 28.387084, + 28.390236, + 28.393526, + 28.396953, + 28.400514, + 28.404207, + 28.408025, + 28.411962, + 28.416011, + 28.420161, + 28.424403, + 28.428723, + 28.433108, + 28.43754, + 28.442005, + 28.446484, + 28.450958, + 28.455408, + 28.459816, + 28.464162, + 28.468428, + 28.472598, + 28.476656, + 28.480586, + 28.484377, + 28.488019, + 28.491503, + 28.494823, + 28.497976, + 28.50096, + 28.503776, + 28.506425, + 28.508913, + 28.511243, + 28.513423, + 28.515459, + 28.51736, + 28.519131, + 28.520781, + 28.522314, + 28.523737, + 28.525051, + 28.526261, + 28.527364, + 28.528361, + 28.529247, + 28.530018, + 28.53067, + 28.531197, + 28.531593, + 28.531856, + 28.531985, + 28.531981, + 28.531851, + 28.531606, + 28.531264, + 28.530847, + 28.530383, + 28.529906, + 28.529456, + 28.529075, + 28.52881, + 28.528707, + 28.528813, + 28.529173, + 28.529829, + 28.530816, + 28.532165, + 28.533897, + 28.536026, + 28.538555, + 28.54148, + 28.544787, + 28.548454, + 28.552451, + 28.556741, + 28.561286, + 28.566039, + 28.570955, + 28.575988, + 28.581092, + 28.586225, + 28.591345, + 28.596418, + 28.601411, + 28.606299, + 28.611057, + 28.61567, + 28.620121, + 28.6244, + 28.628498, + 28.632407, + 28.636123, + 28.639638, + 28.642946, + 28.646042, + 28.648918, + 28.651566, + 28.653979, + 28.656148, + 28.658067, + 28.65973, + 28.661135, + 28.662281, + 28.663171, + 28.663813, + 28.66422, + 28.664408, + 28.664399, + 28.664221, + 28.663905, + 28.663486, + 28.663002, + 28.662493, + 28.662002, + 28.66157, + 28.661236, + 28.661041, + 28.661019, + 28.661202, + 28.661617, + 28.662285, + 28.663225, + 28.664446, + 28.665956, + 28.667754, + 28.669837, + 28.672198, + 28.674825, + 28.677704, + 28.680819, + 28.684153, + 28.687687, + 28.691403, + 28.695281, + 28.699304, + 28.703452, + 28.70771, + 28.712058, + 28.716481, + 28.720962, + 28.725484, + 28.730028, + 28.734579, + 28.739116, + 28.743621, + 28.748073, + 28.752452, + 28.756736, + 28.760905, + 28.764937, + 28.768813, + 28.772512, + 28.776018, + 28.779317, + 28.782396, + 28.785246, + 28.787862, + 28.790243, + 28.792391, + 28.794313, + 28.79602, + 28.797524, + 28.798843, + 28.799997, + 28.801007, + 28.801898, + 28.802693, + 28.803419, + 28.804099, + 28.804759, + 28.80542, + 28.806106, + 28.806836, + 28.807629, + 28.808499, + 28.809462, + 28.81053, + 28.811712, + 28.813017, + 28.814452, + 28.816023, + 28.817734, + 28.819587, + 28.821585, + 28.823729, + 28.82602, + 28.828456, + 28.831036, + 28.833756, + 28.836612, + 28.8396, + 28.842711, + 28.845937, + 28.849269, + 28.852694, + 28.856198, + 28.859767, + 28.863384, + 28.867033, + 28.870693, + 28.874347, + 28.877974, + 28.881556, + 28.885073, + 28.888507, + 28.89184, + 28.895058, + 28.898146, + 28.901092, + 28.903887, + 28.906521, + 28.908992, + 28.911294, + 28.913428, + 28.915394, + 28.917195, + 28.918836, + 28.920322, + 28.921659, + 28.922855, + 28.923914, + 28.924845, + 28.925651, + 28.926337, + 28.926906, + 28.927357, + 28.927691, + 28.927905, + 28.927996, + 28.927959, + 28.927788, + 28.927481, + 28.927033, + 28.926445, + 28.925719, + 28.924862, + 28.923887, + 28.922811, + 28.921658, + 28.920458, + 28.919246, + 28.918063, + 28.916954, + 28.915966, + 28.915148, + 28.914549, + 28.914216, + 28.914191, + 28.914514, + 28.915214, + 28.916315, + 28.917832, + 28.919769, + 28.922122, + 28.924877, + 28.928012, + 28.931497, + 28.935294, + 28.939362, + 28.943655, + 28.948125, + 28.952724, + 28.957403, + 28.962118, + 28.966826, + 28.97149, + 28.976074, + 28.98055, + 28.984894, + 28.989085, + 28.993108, + 28.996949, + 29.000598, + 29.004048, + 29.007289, + 29.010317, + 29.013124, + 29.015703, + 29.018046, + 29.020145, + 29.021993, + 29.023581, + 29.024902, + 29.025951, + 29.026725, + 29.027223, + 29.02745, + 29.027413, + 29.027125, + 29.026604, + 29.025874, + 29.024963, + 29.023903, + 29.022731, + 29.021489, + 29.020219, + 29.018965, + 29.017771, + 29.016681, + 29.015737, + 29.014976, + 29.014433, + 29.014138, + 29.014116, + 29.014386, + 29.01496, + 29.015846, + 29.017048, + 29.018562, + 29.02038, + 29.022493, + 29.024885, + 29.027542, + 29.030443, + 29.03357, + 29.036903, + 29.040422, + 29.044107, + 29.047937, + 29.051894, + 29.055957, + 29.060109, + 29.06433, + 29.0686, + 29.0729, + 29.077211, + 29.08151, + 29.085775, + 29.089985, + 29.094117, + 29.098146, + 29.102049, + 29.105803, + 29.109385, + 29.112776, + 29.115956, + 29.118908, + 29.12162, + 29.124081, + 29.126287, + 29.128234, + 29.129925, + 29.131367, + 29.132571, + 29.13355, + 29.134322, + 29.134909, + 29.135333, + 29.135618, + 29.135792, + 29.13588, + 29.135909, + 29.135905, + 29.135893, + 0 + ], + "yaxis": "y3" + }, + { + "mode": "lines", + "name": " GenPwr_(kW)", + "type": "scatter", + "xaxis": "x4", + "y": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000001, + 0.000002, + 0.000002, + 0.000002, + 0.000003, + 0.000003, + 0.000004, + 0.000004, + 0.000004, + 0.000005, + 0.000006, + 0.000006, + 0.000007, + 0.000008, + 0.000009, + 0.000011, + 0.000012, + 0.000014, + 0.000017, + 0.00002, + 0.000023, + 0.000027, + 0.000032, + 0.000037, + 0.000043, + 0.000049, + 0.000057, + 0.000064, + 0.000072, + 0.00008, + 0.000088, + 0.000097, + 0.000105, + 0.000113, + 0.00012, + 0.000128, + 0.000135, + 0.000142, + 0.000149, + 0.000156, + 0.000163, + 0.000169, + 0.000176, + 0.000183, + 0.000191, + 0.000198, + 0.000206, + 0.000213, + 0.000221, + 0.000229, + 0.000237, + 0.000245, + 0.000252, + 0.00026, + 0.000267, + 0.000273, + 0.00028, + 0.000286, + 0.000291, + 0.000297, + 0.000303, + 0.000309, + 0.000315, + 0.000322, + 0.000329, + 0.000338, + 0.000347, + 0.000357, + 0.000369, + 0.000382, + 0.000396, + 0.000411, + 0.000428, + 0.000446, + 0.000465, + 0.000486, + 0.000506, + 0.000528, + 0.000549, + 0.000571, + 0.000592, + 0.000613, + 0.000633, + 0.000652, + 0.00067, + 0.000688, + 0.000704, + 0.000718, + 0.000732, + 0.000744, + 0.000756, + 0.000766, + 0.000775, + 0.000783, + 0.000791, + 0.000797, + 0.000802, + 0.000806, + 0.00081, + 0.000812, + 0.000813, + 0.000814, + 0.000813, + 0.000811, + 0.000808, + 0.000804, + 0.000799, + 0.000794, + 0.000788, + 0.000782, + 0.000775, + 0.000769, + 0.000764, + 0.000759, + 0.000755, + 0.000752, + 0.000751, + 0.000751, + 0.000753, + 0.000757, + 0.000763, + 0.000771, + 0.000781, + 0.000793, + 0.000807, + 0.000823, + 0.000842, + 0.000862, + 0.000884, + 0.000907, + 0.000932, + 0.000959, + 0.000986, + 0.001015, + 0.001045, + 0.001076, + 0.001108, + 0.001141, + 0.001174, + 0.001208, + 0.001243, + 0.001278, + 0.001313, + 0.001349, + 0.001385, + 0.001422, + 0.001458, + 0.001494, + 0.00153, + 0.001566, + 0.001601, + 0.001635, + 0.001669, + 0.001701, + 0.001732, + 0.001762, + 0.00179, + 0.001818, + 0.001844, + 0.001869, + 0.001893, + 0.001916, + 0.001939, + 0.001961, + 0.001984, + 0.002007, + 0.00203, + 0.002055, + 0.002081, + 0.002108, + 0.002138, + 0.00217, + 0.002204, + 0.00224, + 0.002279, + 0.002321, + 0.002365, + 0.002412, + 0.002462, + 0.002514, + 0.002569, + 0.002627, + 0.002687, + 0.00275, + 0.002814, + 0.002881, + 0.00295, + 0.003021, + 0.003094, + 0.003168, + 0.003244, + 0.003321, + 0.0034, + 0.00348, + 0.003561, + 0.003642, + 0.003724, + 0.003806, + 0.003888, + 0.00397, + 0.00405, + 0.00413, + 0.004208, + 0.004284, + 0.004358, + 0.004429, + 0.004498, + 0.004564, + 0.004626, + 0.004685, + 0.004742, + 0.004794, + 0.004844, + 0.004891, + 0.004934, + 0.004975, + 0.005014, + 0.005051, + 0.005086, + 0.005119, + 0.005152, + 0.005183, + 0.005214, + 0.005244, + 0.005274, + 0.005305, + 0.005335, + 0.005366, + 0.005397, + 0.005429, + 0.005462, + 0.005495, + 0.00553, + 0.005565, + 0.005601, + 0.005639, + 0.005678, + 0.005718, + 0.005759, + 0.005802, + 0.005847, + 0.005893, + 0.00594, + 0.00599, + 0.006041, + 0.006093, + 0.006148, + 0.006203, + 0.006261, + 0.006319, + 0.006379, + 0.006439, + 0.0065, + 0.006562, + 0.006624, + 0.006685, + 0.006747, + 0.006808, + 0.006869, + 0.006928, + 0.006987, + 0.007045, + 0.007102, + 0.007157, + 0.007212, + 0.007265, + 0.007317, + 0.007368, + 0.007418, + 0.007467, + 0.007515, + 0.007563, + 0.00761, + 0.007656, + 0.007702, + 0.007748, + 0.007793, + 0.007839, + 0.007884, + 0.00793, + 0.007976, + 0.008022, + 0.008069, + 0.008117, + 0.008166, + 0.008216, + 0.008268, + 0.008321, + 0.008376, + 0.008433, + 0.008493, + 0.008556, + 0.008621, + 0.00869, + 0.008762, + 0.008838, + 0.008918, + 0.009002, + 0.00909, + 0.009183, + 0.00928, + 0.009382, + 0.009488, + 0.009599, + 0.009714, + 0.009833, + 0.009957, + 0.010085, + 0.010218, + 0.010354, + 0.010494, + 0.010637, + 0.010784, + 0.010934, + 0.011087, + 0.011243, + 0.011401, + 0.011562, + 0.011724, + 0.011888, + 0.012053, + 0.012219, + 0.012385, + 0.012552, + 0.012718, + 0.012884, + 0.013049, + 0.013212, + 0.013374, + 0.013533, + 0.013689, + 0.013842, + 0.013993, + 0.014139, + 0.014282, + 0.014421, + 0.014555, + 0.014686, + 0.014813, + 0.014936, + 0.015055, + 0.015171, + 0.015283, + 0.015392, + 0.015499, + 0.015604, + 0.015706, + 0.015808, + 0.015908, + 0.016008, + 0.016108, + 0.016208, + 0.016308, + 0.01641, + 0.016513, + 0.016618, + 0.016726, + 0.016835, + 0.016947, + 0.017062, + 0.01718, + 0.017301, + 0.017425, + 0.017553, + 0.017684, + 0.017818, + 0.017955, + 0.018096, + 0.01824, + 0.018387, + 0.018536, + 0.018688, + 0.018841, + 0.018997, + 0.019153, + 0.01931, + 0.019468, + 0.019625, + 0.019781, + 0.019936, + 0.020088, + 0.020239, + 0.020386, + 0.02053, + 0.02067, + 0.020805, + 0.020936, + 0.021062, + 0.021182, + 0.021297, + 0.021407, + 0.021511, + 0.02161, + 0.021704, + 0.021793, + 0.021877, + 0.021956, + 0.022032, + 0.022104, + 0.022174, + 0.022241, + 0.022306, + 0.02237, + 0.022434, + 0.022499, + 0.022564, + 0.022631, + 0.0227, + 0.022773, + 0.022849, + 0.022929, + 0.023015, + 0.023106, + 0.023204, + 0.023308, + 0.023419, + 0.023537, + 0.023663, + 0.023798, + 0.02394, + 0.024091, + 0.024251, + 0.024418, + 0.024594, + 0.024778, + 0.024969, + 0.025168, + 0.025373, + 0.025585, + 0.025802, + 0.026025, + 0.026252, + 0.026482, + 0.026715, + 0.026951, + 0.027188, + 0.027426, + 0.027663, + 0.0279, + 0.028136, + 0.02837, + 0.028601, + 0.028829, + 0.029053, + 0.029274, + 0.029491, + 0.029704, + 0.029913, + 0.030117, + 0.030317, + 0.030513, + 0.030705, + 0.030893, + 0.031078, + 0.031261, + 0.031441, + 0.03162, + 0.031798, + 0.031975, + 0.032152, + 0.03233, + 0.03251, + 0.032692, + 0.032878, + 0.033067, + 0.03326, + 0.033459, + 0.033663, + 0.033874, + 0.034092, + 0.034316, + 0.034549, + 0.034789, + 0.035038, + 0.035295, + 0.03556, + 0.035834, + 0.036115, + 0.036405, + 0.036702, + 0.037007, + 0.037318, + 0.037635, + 0.037958, + 0.038285, + 0.038616, + 0.03895, + 0.039286, + 0.039624, + 0.039962, + 0.040299, + 0.040635, + 0.040968, + 0.041298, + 0.041624, + 0.041944, + 0.04226, + 0.042568, + 0.04287, + 0.043165, + 0.043451, + 0.043729, + 0.043999, + 0.04426, + 0.044512, + 0.044755, + 0.044989, + 0.045215, + 0.045432, + 0.045642, + 0.045844, + 0.04604, + 0.046229, + 0.046412, + 0.046591, + 0.046765, + 0.046936, + 0.047104, + 0.04727, + 0.047435, + 0.0476, + 0.047765, + 0.047931, + 0.048099, + 0.048269, + 0.048442, + 0.048618, + 0.048799, + 0.048983, + 0.049172, + 0.049365, + 0.049563, + 0.049766, + 0.049975, + 0.050188, + 0.050406, + 0.05063, + 0.050858, + 0.05109, + 0.051327, + 0.051568, + 0.051812, + 0.05206, + 0.052311, + 0.052564, + 0.05282, + 0.053078, + 0.053337, + 0.053597, + 0.053859, + 0.05412, + 0.054382, + 0.054644, + 0.054905, + 0.055166, + 0.055426, + 0.055685, + 0.055943, + 0.0562, + 0.056456, + 0.056711, + 0.056964, + 0.057217, + 0.05747, + 0.057721, + 0.057973, + 0.058224, + 0.058476, + 0.058728, + 0.058981, + 0.059235, + 0.05949, + 0.059748, + 0.060007, + 0.06027, + 0.060534, + 0.060803, + 0.061074, + 0.06135, + 0.061629, + 0.061913, + 0.062201, + 0.062494, + 0.062792, + 0.063095, + 0.063403, + 0.063717, + 0.064036, + 0.064361, + 0.064691, + 0.065027, + 0.065368, + 0.065715, + 0.066068, + 0.066426, + 0.06679, + 0.067159, + 0.067533, + 0.067911, + 0.068295, + 0.068684, + 0.069076, + 0.069473, + 0.069874, + 0.070278, + 0.070685, + 0.071095, + 0.071508, + 0.071923, + 0.072339, + 0.072757, + 0.073176, + 0.073596, + 0.074016, + 0.074435, + 0.074855, + 0.075274, + 0.075691, + 0.076107, + 0.076522, + 0.076934, + 0.077344, + 0.077752, + 0.078157, + 0.078559, + 0.078957, + 0.079353, + 0.079744, + 0.080132, + 0.080517, + 0.080897, + 0.081274, + 0.081647, + 0.082016, + 0.082381, + 0.082743, + 0.083102, + 0.083458, + 0.083812, + 0.084163, + 0.084512, + 0.084859, + 0.085205, + 0.085551, + 0.085896, + 0.086242, + 0.086588, + 0.086936, + 0.087286, + 0.087638, + 0.087993, + 0.088352, + 0.088714, + 0.08908, + 0.089451, + 0.089827, + 0.090207, + 0.090593, + 0.090984, + 0.09138, + 0.091782, + 0.092189, + 0.092601, + 0.093018, + 0.09344, + 0.093865, + 0.094295, + 0.094727, + 0.095163, + 0.0956, + 0.096039, + 0.096479, + 0.096919, + 0.097358, + 0.097795, + 0.09823, + 0.098662, + 0.099089, + 0.099512, + 0.09993, + 0.100342, + 0.100747, + 0.101145, + 0.101535, + 0.101918, + 0.102293, + 0.102659, + 0.103017, + 0.103367, + 0.103709, + 0.104044, + 0.104371, + 0.104691, + 0.105006, + 0.105314, + 0.105618, + 0.105918, + 0.106215, + 0.10651, + 0.106804, + 0.107097, + 0.107392, + 0.107688, + 0.107988, + 0.108292, + 0.1086, + 0.108915, + 0.109238, + 0.109568, + 0.109907, + 0.110256, + 0.110615, + 0.110986, + 0.111368, + 0.111762, + 0.112169, + 0.112589, + 0.113022, + 0.113468, + 0.113927, + 0.114398, + 0.114882, + 0.115378, + 0.115886, + 0.116405, + 0.116934, + 0.117473, + 0.11802, + 0.118576, + 0.119138, + 0.119706, + 0.120279, + 0.120856, + 0.121436, + 0.122018, + 0.122601, + 0.123185, + 0.123767, + 0.124348, + 0.124927, + 0.125504, + 0.126077, + 0.126646, + 0.127212, + 0.127774, + 0.128332, + 0.128886, + 0.129437, + 0.129984, + 0.130528, + 0.131069, + 0.131608, + 0.132146, + 0.132683, + 0.13322, + 0.133757, + 0.134296, + 0.134837, + 0.135381, + 0.135928, + 0.13648, + 0.137036, + 0.137598, + 0.138166, + 0.138741, + 0.139322, + 0.139911, + 0.140507, + 0.14111, + 0.141721, + 0.142339, + 0.142964, + 0.143596, + 0.144235, + 0.144879, + 0.145529, + 0.146183, + 0.146841, + 0.147502, + 0.148165, + 0.14883, + 0.149494, + 0.150157, + 0.150818, + 0.151476, + 0.15213, + 0.152779, + 0.153422, + 0.154058, + 0.154687, + 0.155307, + 0.155917, + 0.156518, + 0.157109, + 0.157689, + 0.158258, + 0.158816, + 0.159364, + 0.1599, + 0.160425, + 0.16094, + 0.161445, + 0.16194, + 0.162427, + 0.162905, + 0.163376, + 0.16384, + 0.164299, + 0.164753, + 0.165204, + 0.165653, + 0.1661, + 0.166548, + 0.166997, + 0.167448, + 0.167903, + 0.168362, + 0.168827, + 0.169299, + 0.169778, + 0.170266, + 0.170763, + 0.17127, + 0.171787, + 0.172315, + 0.172855, + 0.173405, + 0.173967, + 0.174541, + 0.175125, + 0.175721, + 0.176327, + 0.176944, + 0.17757, + 0.178206, + 0.178851, + 0.179503, + 0.180163, + 0.18083, + 0.181502, + 0.182179, + 0.182861, + 0.183547, + 0.184235, + 0.184925, + 0.185617, + 0.186309, + 0.187001, + 0.187692, + 0.188382, + 0.18907, + 0.189756, + 0.190438, + 0.191117, + 0.191792, + 0.192464, + 0.193131, + 0.193794, + 0.194453, + 0.195107, + 0.195758, + 0.196404, + 0.197046, + 0.197685, + 0.19832, + 0.198953, + 0.199583, + 0.20021, + 0.200836, + 0.201461, + 0.202084, + 0.202707, + 0.20333, + 0.203953, + 0.204577, + 0.205203, + 0.20583, + 0.206459, + 0.20709, + 0.207725, + 0.208363, + 0.209004, + 0.209649, + 0.210298, + 0.210952, + 0.211611, + 0.212274, + 0.212943, + 0.213617, + 0.214297, + 0.214983, + 0.215674, + 0.216372, + 0.217075, + 0.217785, + 0.218501, + 0.219223, + 0.219951, + 0.220685, + 0.221425, + 0.22217, + 0.222922, + 0.223679, + 0.224441, + 0.225209, + 0.225982, + 0.22676, + 0.227542, + 0.228329, + 0.22912, + 0.229916, + 0.230715, + 0.231519, + 0.232325, + 0.233135, + 0.233948, + 0.234764, + 0.235582, + 0.236403, + 0.237226, + 0.238051, + 0.238877, + 0.239705, + 0.240534, + 0.241365, + 0.242196, + 0.243027, + 0.243859, + 0.244691, + 0.245524, + 0.246356, + 0.247188, + 0.24802, + 0.248852, + 0.249684, + 0.250514, + 0.251345, + 0.252175, + 0.253004, + 0.253832, + 0.25466, + 0.255487, + 0.256313, + 0.257138, + 0.257963, + 0.258786, + 0.259608, + 0.260429, + 0.261248, + 0.262066, + 0.262882, + 0.263697, + 0.264509, + 0.26532, + 0.266128, + 0.266934, + 0.267737, + 0.268537, + 0.269335, + 0.270129, + 0.270919, + 0.271706, + 0.272488, + 0.273267, + 0.274041, + 0.27481, + 0.275574, + 0.276332, + 0.277085, + 0.277833, + 0.278574, + 0.279309, + 0.280038, + 0.280761, + 0.281477, + 0.282187, + 0.282891, + 0.283588, + 0.284279, + 0.284965, + 0.285645, + 0.28632, + 0.286991, + 0.287657, + 0.28832, + 0.28898, + 0.289639, + 0.290296, + 0.290953, + 0.291611, + 0.29227, + 0.292933, + 0.293599, + 0.294271, + 0.294949, + 0.295635, + 0.29633, + 0.297035, + 0.29775, + 0.298479, + 0.29922, + 0.299976, + 0.300746, + 0.301533, + 0.302337, + 0.303159, + 0.303998, + 0.304856, + 0.305733, + 0.306629, + 0.307545, + 0.308479, + 0.309433, + 0.310406, + 0.311397, + 0.312407, + 0.313434, + 0.314478, + 0.315537, + 0.316613, + 0.317702, + 0.318804, + 0.319918, + 0.321043, + 0.322177, + 0.32332, + 0.324469, + 0.325624, + 0.326782, + 0.327943, + 0.329105, + 0.330267, + 0.331428, + 0.332585, + 0.333738, + 0.334886, + 0.336028, + 0.337162, + 0.338287, + 0.339404, + 0.34051, + 0.341605, + 0.342689, + 0.343762, + 0.344822, + 0.345871, + 0.346907, + 0.347932, + 0.348945, + 0.349946, + 0.350937, + 0.351917, + 0.352887, + 0.353848, + 0.354801, + 0.355747, + 0.356686, + 0.35762, + 0.35855, + 0.359475, + 0.360399, + 0.36132, + 0.362241, + 0.363163, + 0.364085, + 0.365009, + 0.365935, + 0.366865, + 0.367798, + 0.368735, + 0.369677, + 0.370623, + 0.371574, + 0.37253, + 0.373491, + 0.374457, + 0.375428, + 0.376404, + 0.377384, + 0.378369, + 0.379358, + 0.380351, + 0.381347, + 0.382347, + 0.38335, + 0.384355, + 0.385364, + 0.386374, + 0.387387, + 0.388403, + 0.38942, + 0.390439, + 0.39146, + 0.392483, + 0.393508, + 0.394535, + 0.395565, + 0.396597, + 0.397633, + 0.398671, + 0.399713, + 0.400759, + 0.401809, + 0.402864, + 0.403924, + 0.404991, + 0.406064, + 0.407143, + 0.408231, + 0.409326, + 0.41043, + 0.411542, + 0.412664, + 0.413796, + 0.414937, + 0.416089, + 0.417251, + 0.418422, + 0.419604, + 0.420796, + 0.421997, + 0.423207, + 0.424425, + 0.425652, + 0.426885, + 0.428126, + 0.429371, + 0.430622, + 0.431876, + 0.433132, + 0.43439, + 0.435648, + 0.436904, + 0.438159, + 0.43941, + 0.440656, + 0.441896, + 0.443128, + 0.444352, + 0.445566, + 0.44677, + 0.447962, + 0.449141, + 0.450307, + 0.451459, + 0.452596, + 0.453718, + 0.454825, + 0.455916, + 0.456993, + 0.458054, + 0.459101, + 0.460133, + 0.461152, + 0.462158, + 0.463152, + 0.464136, + 0.46511, + 0.466076, + 0.467035, + 0.467988, + 0.468938, + 0.469884, + 0.47083, + 0.471777, + 0.472726, + 0.473679, + 0.474637, + 0.475603, + 0.476576, + 0.47756, + 0.478555, + 0.479563, + 0.480585, + 0.481622, + 0.482675, + 0.483745, + 0.484834, + 0.485941, + 0.487068, + 0.488214, + 0.489381, + 0.490569, + 0.491778, + 0.493007, + 0.494257, + 0.495528, + 0.49682, + 0.498131, + 0.499462, + 0.500813, + 0.502181, + 0.503568, + 0.504971, + 0.506391, + 0.507826, + 0.509275, + 0.510738, + 0.512214, + 0.513701, + 0.515199, + 0.516706, + 0.518221, + 0.519744, + 0.521274, + 0.522809, + 0.524347, + 0.525889, + 0.527433, + 0.528978, + 0.530523, + 0.532067, + 0.533609, + 0.535148, + 0.536683, + 0.538213, + 0.539738, + 0.541256, + 0.542766, + 0.544268, + 0.545761, + 0.547245, + 0.548718, + 0.550179, + 0.551629, + 0.553065, + 0.554489, + 0.555898, + 0.557293, + 0.558673, + 0.560037, + 0.561386, + 0.562718, + 0.564034, + 0.565334, + 0.566617, + 0.567884, + 0.569134, + 0.570368, + 0.571586, + 0.572789, + 0.573976, + 0.575149, + 0.576308, + 0.577454, + 0.578587, + 0.579708, + 0.580819, + 0.581919, + 0.58301, + 0.584094, + 0.58517, + 0.586241, + 0.587306, + 0.588369, + 0.589429, + 0.590489, + 0.591549, + 0.59261, + 0.593674, + 0.594742, + 0.595815, + 0.596895, + 0.597983, + 0.59908, + 0.600186, + 0.601304, + 0.602435, + 0.603579, + 0.604737, + 0.60591, + 0.607099, + 0.608306, + 0.609529, + 0.610771, + 0.612031, + 0.613311, + 0.614609, + 0.615928, + 0.617267, + 0.618625, + 0.620004, + 0.621404, + 0.622823, + 0.624263, + 0.625723, + 0.627202, + 0.628701, + 0.63022, + 0.631757, + 0.633313, + 0.634888, + 0.63648, + 0.638089, + 0.639715, + 0.641357, + 0.643015, + 0.644688, + 0.646376, + 0.648077, + 0.649791, + 0.651518, + 0.653256, + 0.655004, + 0.656762, + 0.658528, + 0.660302, + 0.662082, + 0.663867, + 0.665655, + 0.667446, + 0.669238, + 0.671029, + 0.672818, + 0.674603, + 0.676384, + 0.678158, + 0.679923, + 0.68168, + 0.683425, + 0.685157, + 0.686876, + 0.688579, + 0.690265, + 0.691934, + 0.693584, + 0.695214, + 0.696824, + 0.698411, + 0.699977, + 0.701521, + 0.703041, + 0.704539, + 0.706013, + 0.707465, + 0.708895, + 0.710303, + 0.711689, + 0.713056, + 0.714403, + 0.715732, + 0.717045, + 0.718343, + 0.719627, + 0.7209, + 0.722163, + 0.723418, + 0.724667, + 0.725913, + 0.727158, + 0.728403, + 0.729652, + 0.730905, + 0.732167, + 0.733438, + 0.734721, + 0.736019, + 0.737333, + 0.738665, + 0.740018, + 0.741392, + 0.74279, + 0.744212, + 0.745661, + 0.747137, + 0.748642, + 0.750176, + 0.751739, + 0.753333, + 0.754957, + 0.756611, + 0.758295, + 0.76001, + 0.761754, + 0.763527, + 0.765327, + 0.767155, + 0.769008, + 0.770886, + 0.772787, + 0.77471, + 0.776653, + 0.778614, + 0.780591, + 0.782584, + 0.784589, + 0.786606, + 0.788632, + 0.790666, + 0.792705, + 0.794749, + 0.796795, + 0.798841, + 0.800887, + 0.80293, + 0.804969, + 0.807002, + 0.809029, + 0.811048, + 0.813058, + 0.815057, + 0.817046, + 0.819022, + 0.820986, + 0.822936, + 0.824871, + 0.826792, + 0.828698, + 0.830588, + 0.832462, + 0.83432, + 0.836161, + 0.837985, + 0.839792, + 0.841582, + 0.843354, + 0.845108, + 0.846844, + 0.848561, + 0.850261, + 0.851941, + 0.853603, + 0.855247, + 0.856871, + 0.858478, + 0.860067, + 0.861637, + 0.863191, + 0.864727, + 0.866248, + 0.867753, + 0.869244, + 0.870721, + 0.872185, + 0.873638, + 0.87508, + 0.876513, + 0.877939, + 0.879358, + 0.880772, + 0.882183, + 0.883591, + 0.885, + 0.886411, + 0.887825, + 0.889245, + 0.890671, + 0.892108, + 0.893555, + 0.895016, + 0.896491, + 0.897984, + 0.899496, + 0.901029, + 0.902585, + 0.904166, + 0.905773, + 0.907408, + 0.909073, + 0.91077, + 0.912498, + 0.914261, + 0.916058, + 0.917891, + 0.91976, + 0.921666, + 0.92361, + 0.92559, + 0.927609, + 0.929664, + 0.931757, + 0.933885, + 0.936049, + 0.938247, + 0.940478, + 0.942741, + 0.945034, + 0.947355, + 0.949703, + 0.952075, + 0.954468, + 0.956882, + 0.959312, + 0.961758, + 0.964215, + 0.966682, + 0.969155, + 0.971632, + 0.97411, + 0.976587, + 0.979059, + 0.981525, + 0.983981, + 0.986425, + 0.988855, + 0.991268, + 0.993662, + 0.996035, + 0.998385, + 1.000709, + 1.003007, + 1.005276, + 1.007516, + 1.009724, + 1.011899, + 1.014041, + 1.016148, + 1.01822, + 1.020257, + 1.022258, + 1.024222, + 1.026151, + 1.028043, + 1.0299, + 1.031722, + 1.033509, + 1.035263, + 1.036985, + 1.038675, + 1.040336, + 1.041969, + 1.043575, + 1.045157, + 1.046716, + 1.048254, + 1.049773, + 1.051277, + 1.052766, + 1.054244, + 1.055713, + 1.057174, + 1.058632, + 1.060089, + 1.061546, + 1.063007, + 1.064475, + 1.065951, + 1.067438, + 1.068939, + 1.070456, + 1.071992, + 1.073548, + 1.075126, + 1.07673, + 1.07836, + 1.080019, + 1.081709, + 1.08343, + 1.085185, + 1.086974, + 1.0888, + 1.090663, + 1.092564, + 1.094504, + 1.096483, + 1.098502, + 1.100562, + 1.102661, + 1.104801, + 1.10698, + 1.109199, + 1.111456, + 1.113751, + 1.116083, + 1.118451, + 1.120853, + 1.123288, + 1.125754, + 1.12825, + 1.130773, + 1.133322, + 1.135894, + 1.138488, + 1.141101, + 1.14373, + 1.146375, + 1.149031, + 1.151696, + 1.154369, + 1.157046, + 1.159726, + 1.162405, + 1.16508, + 1.167751, + 1.170413, + 1.173066, + 1.175705, + 1.17833, + 1.180938, + 1.183526, + 1.186093, + 1.188637, + 1.191156, + 1.193647, + 1.196111, + 1.198545, + 1.200948, + 1.203319, + 1.205657, + 1.207962, + 1.210233, + 1.21247, + 1.214672, + 1.21684, + 1.218974, + 1.221073, + 1.22314, + 1.225174, + 1.227176, + 1.229146, + 1.231087, + 1.232999, + 1.234884, + 1.236743, + 1.238577, + 1.240388, + 1.242179, + 1.24395, + 1.245705, + 1.247445, + 1.249174, + 1.250892, + 1.252604, + 1.25431, + 1.256015, + 1.257721, + 1.25943, + 1.261146, + 1.26287, + 1.264606, + 1.266356, + 1.268123, + 1.269909, + 1.271718, + 1.27355, + 1.27541, + 1.277299, + 1.279219, + 1.281172, + 1.283161, + 1.285188, + 1.287254, + 1.289361, + 1.29151, + 1.293704, + 1.295942, + 1.298227, + 1.30056, + 1.30294, + 1.305368, + 1.307845, + 1.31037, + 1.312944, + 1.315565, + 1.318234, + 1.320949, + 1.323709, + 1.326512, + 1.329357, + 1.332242, + 1.335165, + 1.338123, + 1.341115, + 1.344136, + 1.347185, + 1.350258, + 1.353353, + 1.356466, + 1.359593, + 1.362732, + 1.365878, + 1.369029, + 1.37218, + 1.375328, + 1.37847, + 1.381602, + 1.38472, + 1.387822, + 1.390902, + 1.393959, + 1.39699, + 1.39999, + 1.402958, + 1.40589, + 1.408783, + 1.411637, + 1.414447, + 1.417213, + 1.419933, + 1.422605, + 1.425228, + 1.427801, + 1.430323, + 1.432794, + 1.435215, + 1.437585, + 1.439906, + 1.442177, + 1.444401, + 1.446578, + 1.44871, + 1.4508, + 1.452849, + 1.454861, + 1.456837, + 1.45878, + 1.460694, + 1.462581, + 1.464444, + 1.466288, + 1.468115, + 1.469929, + 1.471734, + 1.473532, + 1.475328, + 1.477125, + 1.478926, + 1.480735, + 1.482556, + 1.484391, + 1.486245, + 1.488119, + 1.490018, + 1.491945, + 1.493902, + 1.495892, + 1.497919, + 1.499984, + 1.502089, + 1.504238, + 1.506432, + 1.508673, + 1.510963, + 1.513302, + 1.515693, + 1.518135, + 1.520631, + 1.52318, + 1.525783, + 1.52844, + 1.531151, + 1.533916, + 1.536734, + 1.539605, + 1.542527, + 1.5455, + 1.548523, + 1.551594, + 1.554711, + 1.557873, + 1.561078, + 1.564324, + 1.567609, + 1.57093, + 1.574285, + 1.57767, + 1.581084, + 1.584524, + 1.587985, + 1.591466, + 1.594963, + 1.598473, + 1.601991, + 1.605516, + 1.609042, + 1.612568, + 1.616088, + 1.6196, + 1.6231, + 1.626585, + 1.63005, + 1.633493, + 1.63691, + 1.640297, + 1.643653, + 1.646973, + 1.650254, + 1.653495, + 1.656692, + 1.659843, + 1.662946, + 1.665999, + 1.669, + 1.671947, + 1.674839, + 1.677675, + 1.680454, + 1.683177, + 1.685841, + 1.688448, + 1.690998, + 1.693492, + 1.69593, + 1.698315, + 1.700647, + 1.702928, + 1.705161, + 1.707349, + 1.709494, + 1.711599, + 1.713668, + 1.715703, + 1.71771, + 1.71969, + 1.72165, + 1.723591, + 1.72552, + 1.72744, + 1.729355, + 1.73127, + 1.733189, + 1.735117, + 1.737058, + 1.739017, + 1.740998, + 1.743004, + 1.745042, + 1.747113, + 1.749222, + 1.751374, + 1.75357, + 1.755815, + 1.758111, + 1.760461, + 1.762868, + 1.765333, + 1.76786, + 1.770448, + 1.773101, + 1.775818, + 1.7786, + 1.781449, + 1.784363, + 1.787342, + 1.790387, + 1.793496, + 1.796668, + 1.799901, + 1.803194, + 1.806545, + 1.809952, + 1.813411, + 1.816921, + 1.820477, + 1.824078, + 1.82772, + 1.831399, + 1.835112, + 1.838855, + 1.842624, + 1.846414, + 1.850223, + 1.854046, + 1.857879, + 1.861718, + 1.865557, + 1.869395, + 1.873225, + 1.877044, + 1.880848, + 1.884633, + 1.888394, + 1.892128, + 1.895832, + 1.899501, + 1.903132, + 1.906722, + 1.910267, + 1.913766, + 1.917215, + 1.920612, + 1.923955, + 1.927242, + 1.930471, + 1.933642, + 1.936752, + 1.939802, + 1.942791, + 1.945718, + 1.948585, + 1.95139, + 1.954136, + 1.956822, + 1.959451, + 1.962023, + 1.964542, + 1.967008, + 1.969424, + 1.971794, + 1.97412, + 1.976405, + 1.978653, + 1.980868, + 1.983053, + 1.985212, + 1.98735, + 1.989471, + 1.991579, + 1.99368, + 1.995777, + 1.997876, + 1.999981, + 2.002097, + 2.004228, + 2.00638, + 2.008557, + 2.010762, + 2.013002, + 2.015279, + 2.017598, + 2.019963, + 2.022377, + 2.024843, + 2.027366, + 2.029948, + 2.032591, + 2.035298, + 2.038072, + 2.040915, + 2.043827, + 2.046811, + 2.049867, + 2.052997, + 2.0562, + 2.059477, + 2.062827, + 2.06625, + 2.069744, + 2.073309, + 2.076943, + 2.080644, + 2.08441, + 2.088237, + 2.092124, + 2.096067, + 2.100063, + 2.104108, + 2.108199, + 2.112331, + 2.116501, + 2.120705, + 2.124937, + 2.129193, + 2.13347, + 2.137761, + 2.142063, + 2.146372, + 2.150681, + 2.154987, + 2.159285, + 2.163571, + 2.167839, + 2.172086, + 2.176307, + 2.180497, + 2.184653, + 2.18877, + 2.192844, + 2.196872, + 2.200851, + 2.204776, + 2.208644, + 2.212453, + 2.2162, + 2.219883, + 2.223499, + 2.227047, + 2.230525, + 2.233933, + 2.237269, + 2.240534, + 2.243726, + 2.246848, + 2.249898, + 2.252879, + 2.255791, + 2.258637, + 2.261419, + 2.264138, + 2.266799, + 2.269403, + 2.271954, + 2.274456, + 2.276912, + 2.279328, + 2.281707, + 2.284054, + 2.286373, + 2.288671, + 2.290952, + 2.293221, + 2.295484, + 2.297746, + 2.300013, + 2.302291, + 2.304584, + 2.306899, + 2.309241, + 2.311615, + 2.314026, + 2.31648, + 2.318981, + 2.321533, + 2.324143, + 2.326813, + 2.329548, + 2.332352, + 2.335227, + 2.338178, + 2.341206, + 2.344315, + 2.347506, + 2.350781, + 2.354142, + 2.357589, + 2.361122, + 2.364742, + 2.368449, + 2.372241, + 2.376117, + 2.380076, + 2.384116, + 2.388234, + 2.392428, + 2.396694, + 2.401029, + 2.40543, + 2.409892, + 2.41441, + 2.418981, + 2.4236, + 2.428261, + 2.43296, + 2.43769, + 2.442447, + 2.447225, + 2.452019, + 2.456823, + 2.461631, + 2.466437, + 2.471237, + 2.476024, + 2.480794, + 2.48554, + 2.490258, + 2.494943, + 2.49959, + 2.504194, + 2.508751, + 2.513257, + 2.517706, + 2.522097, + 2.526424, + 2.530686, + 2.534878, + 2.539, + 2.543047, + 2.547019, + 2.550913, + 2.554729, + 2.558467, + 2.562124, + 2.565703, + 2.569203, + 2.572624, + 2.575969, + 2.579238, + 2.582434, + 2.585559, + 2.588615, + 2.591605, + 2.594533, + 2.597401, + 2.600215, + 2.602977, + 2.605692, + 2.608364, + 2.610999, + 2.6136, + 2.616173, + 2.618724, + 2.621257, + 2.623778, + 2.626292, + 2.628805, + 2.631322, + 2.633849, + 2.636392, + 2.638956, + 2.641546, + 2.644169, + 2.646828, + 2.649531, + 2.65228, + 2.655082, + 2.657941, + 2.66086, + 2.663846, + 2.6669, + 2.670028, + 2.673231, + 2.676514, + 2.679878, + 2.683325, + 2.686858, + 2.690478, + 2.694185, + 2.697981, + 2.701865, + 2.705838, + 2.709898, + 2.714045, + 2.718278, + 2.722594, + 2.726991, + 2.731468, + 2.73602, + 2.740645, + 2.745338, + 2.750098, + 2.754917, + 2.759794, + 2.764721, + 2.769696, + 2.774711, + 2.779762, + 2.784842, + 2.789947, + 2.795069, + 2.800204, + 2.805344, + 2.810483, + 2.815615, + 2.820735, + 2.825835, + 2.830909, + 2.835953, + 2.840959, + 2.845922, + 2.850838, + 2.8557, + 2.860504, + 2.865245, + 2.869919, + 2.874521, + 2.879049, + 2.883499, + 2.887868, + 2.892153, + 2.896353, + 2.900465, + 2.904489, + 2.908424, + 2.912268, + 2.916024, + 2.91969, + 2.923268, + 2.92676, + 2.930167, + 2.933492, + 2.936737, + 2.939905, + 2.943001, + 2.946028, + 2.94899, + 2.951892, + 2.954739, + 2.957536, + 2.960288, + 2.963001, + 2.965681, + 2.968333, + 2.970965, + 2.973581, + 2.976189, + 2.978794, + 2.981403, + 2.984022, + 2.986659, + 2.989318, + 2.992006, + 2.994729, + 2.997494, + 3.000306, + 3.00317, + 3.006093, + 3.009079, + 3.012133, + 3.015259, + 3.018463, + 3.021747, + 3.025116, + 3.028573, + 3.03212, + 3.035759, + 3.039493, + 3.043323, + 3.04725, + 3.051275, + 3.055398, + 3.059619, + 3.063937, + 3.068352, + 3.072861, + 3.077462, + 3.082155, + 3.086935, + 3.0918, + 3.096746, + 3.101771, + 3.106868, + 3.112035, + 3.117266, + 3.122557, + 3.127901, + 3.133293, + 3.138729, + 3.1442, + 3.149702, + 3.155227, + 3.16077, + 3.166323, + 3.17188, + 3.177434, + 3.182979, + 3.188508, + 3.194014, + 3.199492, + 3.204934, + 3.210335, + 3.215688, + 3.220989, + 3.226232, + 3.231412, + 3.236524, + 3.241563, + 3.246527, + 3.25141, + 3.25621, + 3.260923, + 3.265548, + 3.270081, + 3.274522, + 3.278868, + 3.283119, + 3.287275, + 3.291335, + 3.2953, + 3.299171, + 3.302949, + 3.306637, + 3.310237, + 3.313751, + 3.317184, + 3.320538, + 3.323819, + 3.32703, + 3.330177, + 3.333265, + 3.3363, + 3.339287, + 3.342232, + 3.345142, + 3.348024, + 3.350883, + 3.353726, + 3.356561, + 3.359394, + 3.362231, + 3.36508, + 3.367946, + 3.370838, + 3.373761, + 3.376721, + 3.379725, + 3.382779, + 3.385888, + 3.389059, + 3.392295, + 3.395604, + 3.398988, + 3.402454, + 3.406003, + 3.409642, + 3.413372, + 3.417197, + 3.421119, + 3.42514, + 3.429263, + 3.433489, + 3.437817, + 3.44225, + 3.446786, + 3.451426, + 3.456167, + 3.461009, + 3.46595, + 3.470987, + 3.476118, + 3.481339, + 3.486646, + 3.492036, + 3.497504, + 3.503045, + 3.508654, + 3.514326, + 3.520055, + 3.525835, + 3.531661, + 3.537525, + 3.543421, + 3.549343, + 3.555283, + 3.561235, + 3.567193, + 3.573148, + 3.579095, + 3.585025, + 3.590933, + 3.596811, + 3.602653, + 3.608453, + 3.614203, + 3.619898, + 3.625532, + 3.6311, + 3.636595, + 3.642014, + 3.647351, + 3.652602, + 3.657764, + 3.662834, + 3.667807, + 3.672682, + 3.677458, + 3.682132, + 3.686703, + 3.691172, + 3.695539, + 3.699803, + 3.703966, + 3.70803, + 3.711997, + 3.71587, + 3.719651, + 3.723345, + 3.726954, + 3.730485, + 3.733941, + 3.737328, + 3.740651, + 3.743917, + 3.747131, + 3.750301, + 3.753433, + 3.756533, + 3.75961, + 3.76267, + 3.76572, + 3.768768, + 3.771822, + 3.774888, + 3.777973, + 3.781086, + 3.784232, + 3.787418, + 3.790652, + 3.793938, + 3.797283, + 3.800694, + 3.804174, + 3.80773, + 3.811367, + 3.815087, + 3.818897, + 3.822799, + 3.826796, + 3.830892, + 3.835089, + 3.839388, + 3.843791, + 3.8483, + 3.852914, + 3.857633, + 3.862457, + 3.867385, + 3.872416, + 3.877546, + 3.882775, + 3.888098, + 3.893512, + 3.899014, + 3.9046, + 3.910264, + 3.916003, + 3.92181, + 3.927681, + 3.933609, + 3.939589, + 3.945615, + 3.951679, + 3.957777, + 3.963901, + 3.970044, + 3.9762, + 3.982361, + 3.988522, + 3.994676, + 4.000814, + 4.006931, + 4.01302, + 4.019075, + 4.025088, + 4.031053, + 4.036964, + 4.042816, + 4.048602, + 4.054317, + 4.059955, + 4.065513, + 4.070985, + 4.076367, + 4.081656, + 4.086849, + 4.091943, + 4.096936, + 4.101825, + 4.106611, + 4.111292, + 4.115868, + 4.120339, + 4.124707, + 4.128972, + 4.133136, + 4.137203, + 4.141174, + 4.145053, + 4.148844, + 4.15255, + 4.156177, + 4.159729, + 4.163211, + 4.16663, + 4.169991, + 4.1733, + 4.176565, + 4.179791, + 4.182986, + 4.186158, + 4.189313, + 4.192459, + 4.195604, + 4.198755, + 4.20192, + 4.205106, + 4.208321, + 4.211572, + 4.214867, + 4.218211, + 4.221613, + 4.225078, + 4.228613, + 4.232223, + 4.235914, + 4.239692, + 4.243559, + 4.247522, + 4.251583, + 4.255746, + 4.260015, + 4.26439, + 4.268875, + 4.273471, + 4.278178, + 4.282997, + 4.287928, + 4.29297, + 4.298123, + 4.303384, + 4.308752, + 4.314223, + 4.319796, + 4.325466, + 4.33123, + 4.337083, + 4.34302, + 4.349037, + 4.355127, + 4.361286, + 4.367507, + 4.373784, + 4.380111, + 4.38648, + 4.392885, + 4.399319, + 4.405775, + 4.412246, + 4.418724, + 4.425202, + 4.431674, + 4.438131, + 4.444567, + 4.450975, + 4.457348, + 4.463679, + 4.469962, + 4.476191, + 4.482359, + 4.488462, + 4.494493, + 4.500448, + 4.506323, + 4.512112, + 4.517812, + 4.52342, + 4.528933, + 4.534349, + 4.539665, + 4.54488, + 4.549993, + 4.555004, + 4.559912, + 4.564719, + 4.569424, + 4.574031, + 4.57854, + 4.582954, + 4.587276, + 4.591509, + 4.595658, + 4.599726, + 4.603719, + 4.607641, + 4.611498, + 4.615295, + 4.61904, + 4.622737, + 4.626395, + 4.630019, + 4.633617, + 4.637197, + 4.640765, + 4.644329, + 4.647897, + 4.651477, + 4.655074, + 4.658698, + 4.662356, + 4.666053, + 4.669799, + 4.673598, + 4.677458, + 4.681385, + 4.685384, + 4.689462, + 4.693623, + 4.697872, + 4.702214, + 4.706653, + 4.711192, + 4.715835, + 4.720583, + 4.72544, + 4.730408, + 4.735486, + 4.740677, + 4.745981, + 4.751397, + 4.756925, + 4.762563, + 4.768311, + 4.774165, + 4.780124, + 4.786183, + 4.79234, + 4.798591, + 4.80493, + 4.811355, + 4.817858, + 4.824435, + 4.831081, + 4.837788, + 4.844551, + 4.851363, + 4.858217, + 4.865108, + 4.872027, + 4.878967, + 4.885922, + 4.892885, + 4.899847, + 4.906803, + 4.913744, + 4.920665, + 4.927557, + 4.934415, + 4.941232, + 4.948002, + 4.954718, + 4.961375, + 4.967967, + 4.974489, + 4.980936, + 4.987304, + 4.993588, + 4.999786, + 5.005893, + 5.011908, + 5.017827, + 5.023649, + 5.029372, + 5.034996, + 5.04052, + 5.045945, + 5.05127, + 5.056497, + 5.061627, + 5.066663, + 5.071606, + 5.076461, + 5.08123, + 5.085917, + 5.090526, + 5.095062, + 5.099531, + 5.103937, + 5.108287, + 5.112585, + 5.11684, + 5.121057, + 5.125242, + 5.129404, + 5.133548, + 5.137683, + 5.141815, + 5.145952, + 5.150101, + 5.154269, + 5.158463, + 5.16269, + 5.166957, + 5.171271, + 5.175638, + 5.180065, + 5.184557, + 5.18912, + 5.193759, + 5.19848, + 5.203288, + 5.208186, + 5.213178, + 5.218269, + 5.223461, + 5.228756, + 5.234158, + 5.239667, + 5.245284, + 5.251012, + 5.256848, + 5.262794, + 5.268849, + 5.27501, + 5.281277, + 5.287646, + 5.294115, + 5.300681, + 5.307341, + 5.314088, + 5.320921, + 5.327833, + 5.334819, + 5.341874, + 5.348992, + 5.356167, + 5.363392, + 5.370662, + 5.37797, + 5.385308, + 5.39267, + 5.40005, + 5.407439, + 5.414831, + 5.422219, + 5.429596, + 5.436955, + 5.444289, + 5.451591, + 5.458855, + 5.466074, + 5.473243, + 5.480355, + 5.487405, + 5.494387, + 5.501297, + 5.50813, + 5.514881, + 5.521548, + 5.528126, + 5.534612, + 5.541005, + 5.547303, + 5.553503, + 5.559605, + 5.565609, + 5.571514, + 5.57732, + 5.58303, + 5.588644, + 5.594163, + 5.599592, + 5.604931, + 5.610184, + 5.615355, + 5.620448, + 5.625467, + 5.630417, + 5.635302, + 5.640128, + 5.644901, + 5.649627, + 5.654311, + 5.65896, + 5.66358, + 5.668178, + 5.672761, + 5.677335, + 5.681908, + 5.686486, + 5.691076, + 5.695684, + 5.700319, + 5.704985, + 5.70969, + 5.71444, + 5.719241, + 5.724098, + 5.729018, + 5.734006, + 5.739066, + 5.744204, + 5.749423, + 5.754728, + 5.760122, + 5.765609, + 5.77119, + 5.776869, + 5.782647, + 5.788526, + 5.794506, + 5.800589, + 5.806774, + 5.81306, + 5.819447, + 5.825934, + 5.832518, + 5.839198, + 5.84597, + 5.852832, + 5.859781, + 5.866812, + 5.873921, + 5.881103, + 5.888355, + 5.89567, + 5.903044, + 5.910471, + 5.917945, + 5.92546, + 5.933009, + 5.940588, + 5.948188, + 5.955804, + 5.96343, + 5.971058, + 5.978683, + 5.986297, + 5.993894, + 6.001469, + 6.009014, + 6.016524, + 6.023993, + 6.031416, + 6.038786, + 6.046099, + 6.053349, + 6.060532, + 6.067645, + 6.074682, + 6.08164, + 6.088516, + 6.095308, + 6.102013, + 6.108629, + 6.115155, + 6.12159, + 6.127934, + 6.134186, + 6.140347, + 6.146417, + 6.152399, + 6.158294, + 6.164104, + 6.169832, + 6.175481, + 6.181055, + 6.186557, + 6.191991, + 6.197362, + 6.202675, + 6.207935, + 6.213147, + 6.218317, + 6.223451, + 6.228555, + 6.233634, + 6.238695, + 6.243745, + 6.24879, + 6.253836, + 6.258891, + 6.263959, + 6.269049, + 6.274166, + 6.279316, + 6.284507, + 6.289742, + 6.295029, + 6.300373, + 6.305779, + 6.311252, + 6.316796, + 6.322416, + 6.328116, + 6.333899, + 6.339769, + 6.345727, + 6.351777, + 6.35792, + 6.364158, + 6.370491, + 6.376921, + 6.383446, + 6.390068, + 6.396784, + 6.403595, + 6.410498, + 6.417491, + 6.424572, + 6.431739, + 6.438989, + 6.446317, + 6.453722, + 6.461197, + 6.468741, + 6.476347, + 6.484011, + 6.491729, + 6.499495, + 6.507303, + 6.515149, + 6.523026, + 6.530929, + 6.538852, + 6.546789, + 6.554735, + 6.562683, + 6.570627, + 6.578562, + 6.586483, + 6.594382, + 6.602256, + 6.610098, + 6.617904, + 6.625668, + 6.633386, + 6.641053, + 6.648666, + 6.65622, + 6.663712, + 6.671138, + 6.678495, + 6.685781, + 6.692994, + 6.700132, + 6.707193, + 6.714176, + 6.721081, + 6.727906, + 6.734653, + 6.741322, + 6.747914, + 6.75443, + 6.760872, + 6.767241, + 6.773541, + 6.779774, + 6.785943, + 6.792052, + 6.798104, + 6.804104, + 6.810056, + 6.815964, + 6.821833, + 6.827669, + 6.833475, + 6.839258, + 6.845023, + 6.850776, + 6.856522, + 6.862266, + 6.868015, + 6.873774, + 6.87955, + 6.885346, + 6.89117, + 6.897027, + 6.902921, + 6.908858, + 6.914844, + 6.920882, + 6.926977, + 6.933133, + 6.939355, + 6.945645, + 6.952008, + 6.958445, + 6.96496, + 6.971555, + 6.97823, + 6.984988, + 6.99183, + 6.998756, + 7.005767, + 7.012861, + 7.02004, + 7.027301, + 7.034645, + 7.042068, + 7.04957, + 7.057148, + 7.0648, + 7.072522, + 7.080312, + 7.088167, + 7.096083, + 7.104055, + 7.112081, + 7.120155, + 7.128273, + 7.13643, + 7.144623, + 7.152845, + 7.161092, + 7.169359, + 7.17764, + 7.18593, + 7.194224, + 7.202517, + 7.210804, + 7.21908, + 7.227339, + 7.235576, + 7.243788, + 7.25197, + 7.260117, + 7.268226, + 7.276291, + 7.284311, + 7.292281, + 7.300198, + 7.30806, + 7.315863, + 7.323606, + 7.331286, + 7.338901, + 7.346451, + 7.353934, + 7.361349, + 7.368696, + 7.375975, + 7.383186, + 7.390329, + 7.397406, + 7.404418, + 7.411367, + 7.418254, + 7.425081, + 7.431852, + 7.438568, + 7.445233, + 7.451851, + 7.458425, + 7.464958, + 7.471454, + 7.477919, + 7.484355, + 7.490767, + 7.497161, + 7.50354, + 7.509908, + 7.516272, + 7.522635, + 7.529002, + 7.535378, + 7.541768, + 7.548176, + 7.554607, + 7.561065, + 7.567555, + 7.574081, + 7.580647, + 7.587257, + 7.593914, + 7.600623, + 7.607385, + 7.614205, + 7.621084, + 7.628025, + 7.63503, + 7.6421, + 7.649238, + 7.656443, + 7.663717, + 7.671059, + 7.678471, + 7.685952, + 7.6935, + 7.701116, + 7.708798, + 7.716544, + 7.724353, + 7.732223, + 7.740152, + 7.748137, + 7.756175, + 7.764264, + 7.7724, + 7.78058, + 7.788801, + 7.797059, + 7.80535, + 7.813671, + 7.822017, + 7.830384, + 7.838769, + 7.847168, + 7.855575, + 7.863987, + 7.8724, + 7.88081, + 7.889211, + 7.897602, + 7.905976, + 7.914331, + 7.922663, + 7.930968, + 7.939242, + 7.947482, + 7.955686, + 7.96385, + 7.971973, + 7.980052, + 7.988086, + 7.996073, + 8.004013, + 8.011903, + 8.019743, + 8.027534, + 8.035274, + 8.042963, + 8.050603, + 8.058193, + 8.065733, + 8.073225, + 8.080669, + 8.088066, + 8.095418, + 8.102725, + 8.10999, + 8.117214, + 8.1244, + 8.131549, + 8.138664, + 8.145748, + 8.152802, + 8.159831, + 8.166837, + 8.173824, + 8.180795, + 8.187753, + 8.194702, + 8.201645, + 8.208587, + 8.215531, + 8.222481, + 8.229439, + 8.236411, + 8.243398, + 8.250404, + 8.257433, + 8.264487, + 8.271569, + 8.278683, + 8.28583, + 8.293014, + 8.300236, + 8.3075, + 8.314807, + 8.322158, + 8.329557, + 8.337004, + 8.344501, + 8.352049, + 8.359649, + 8.367302, + 8.375008, + 8.382767, + 8.39058, + 8.398445, + 8.406363, + 8.414333, + 8.422353, + 8.430422, + 8.438539, + 8.446702, + 8.454908, + 8.463156, + 8.471444, + 8.479768, + 8.488126, + 8.496516, + 8.504934, + 8.513378, + 8.521845, + 8.530332, + 8.538836, + 8.547355, + 8.555884, + 8.564421, + 8.572964, + 8.581508, + 8.590052, + 8.598592, + 8.607125, + 8.615649, + 8.62416, + 8.632655, + 8.641133, + 8.649589, + 8.658023, + 8.66643, + 8.67481, + 8.683161, + 8.69148, + 8.699768, + 8.708022, + 8.716243, + 8.72443, + 8.732583, + 8.740703, + 8.74879, + 8.756845, + 8.764869, + 8.772863, + 8.780828, + 8.788766, + 8.796679, + 8.804567, + 8.812433, + 8.820277, + 8.828102, + 8.835909, + 8.843698, + 8.851473, + 8.859233, + 8.866981, + 8.874719, + 8.882447, + 8.890169, + 8.897885, + 8.905597, + 8.913308, + 8.92102, + 8.928735, + 8.936454, + 8.944181, + 8.951918, + 8.959666, + 8.967428, + 8.975206, + 8.983002, + 8.990818, + 8.998655, + 9.006516, + 9.014401, + 9.022313, + 9.030251, + 9.038217, + 9.046213, + 9.054239, + 9.062295, + 9.070382, + 9.078502, + 9.086654, + 9.094839, + 9.103057, + 9.111308, + 9.119593, + 9.127912, + 9.136265, + 9.144651, + 9.15307, + 9.161522, + 9.170006, + 9.178521, + 9.187067, + 9.195642, + 9.204246, + 9.212876, + 9.221531, + 9.23021, + 9.23891, + 9.247631, + 9.256369, + 9.265124, + 9.273893, + 9.282675, + 9.291467, + 9.300268, + 9.309075, + 9.317888, + 9.326704, + 9.335521, + 9.344339, + 9.353154, + 9.361967, + 9.370774, + 9.379576, + 9.388369, + 9.397154, + 9.405929, + 9.414692, + 9.423442, + 9.432179, + 9.440901, + 9.449608, + 9.458299, + 9.466975, + 9.475634, + 9.484278, + 9.492905, + 9.501518, + 9.510116, + 9.518701, + 9.527272, + 9.535833, + 9.544382, + 9.552923, + 9.561455, + 9.569981, + 9.578501, + 9.587017, + 9.59553, + 9.60404, + 9.612549, + 9.621058, + 9.629568, + 9.638079, + 9.646592, + 9.655108, + 9.663628, + 9.672152, + 9.680681, + 9.689216, + 9.697757, + 9.706305, + 9.714861, + 9.723425, + 9.731997, + 9.740579, + 9.749171, + 9.757772, + 9.766385, + 9.775008, + 9.783643, + 9.792289, + 9.800947, + 9.809618, + 9.8183, + 9.826994, + 9.8357, + 9.844418, + 9.853147, + 9.861888, + 9.87064, + 9.879402, + 9.888175, + 9.896959, + 9.905752, + 9.914555, + 9.923367, + 9.932188, + 9.941018, + 9.949856, + 9.958702, + 9.967555, + 9.976417, + 9.985285, + 9.994159, + 10.00304, + 10.011927, + 10.020819, + 10.029715, + 10.038616, + 10.047521, + 10.056428, + 10.065339, + 10.074251, + 10.083164, + 10.092078, + 10.100992, + 10.109906, + 10.11882, + 10.127732, + 10.136643, + 10.145553, + 10.154461, + 10.163367, + 10.172272, + 10.181174, + 10.190076, + 10.198976, + 10.207875, + 10.216773, + 10.22567, + 10.234566, + 10.243463, + 10.25236, + 10.261258, + 10.270157, + 10.279059, + 10.287963, + 10.296871, + 10.305783, + 10.314702, + 10.323627, + 10.332561, + 10.341504, + 10.350458, + 10.359424, + 10.368404, + 10.377399, + 10.386409, + 10.395435, + 10.404479, + 10.41354, + 10.42262, + 10.431717, + 10.440833, + 10.449966, + 10.459116, + 10.468283, + 10.477466, + 10.486663, + 10.495874, + 10.505097, + 10.514332, + 10.523577, + 10.532832, + 10.542095, + 10.551364, + 10.560639, + 10.569919, + 10.579202, + 10.588487, + 10.597773, + 10.607059, + 10.616343, + 10.625624, + 10.634901, + 10.644174, + 10.653439, + 10.662697, + 10.671946, + 10.681185, + 10.690413, + 10.699629, + 10.708832, + 10.718021, + 10.727195, + 10.736354, + 10.745496, + 10.754622, + 10.763731, + 10.772823, + 10.781897, + 10.790955, + 10.799997, + 10.809022, + 10.818032, + 10.827027, + 10.836008, + 10.844976, + 10.853931, + 10.862876, + 10.87181, + 10.880735, + 10.889652, + 10.898561, + 10.907465, + 10.916362, + 10.925256, + 10.934146, + 10.943033, + 10.951919, + 10.960805, + 10.96969, + 10.978577, + 10.987466, + 10.996359, + 11.005257, + 11.014161, + 11.023074, + 11.031997, + 11.040931, + 11.04988, + 11.058846, + 11.06783, + 11.076835, + 11.085864, + 11.094917, + 11.103998, + 11.113109, + 11.12225, + 11.131423, + 11.14063, + 11.149872, + 11.159148, + 11.168461, + 11.177809, + 11.187193, + 11.196614, + 11.206071, + 11.215563, + 11.225091, + 11.234653, + 11.244251, + 11.253882, + 11.263547, + 11.273244, + 11.282974, + 11.292735, + 11.302526, + 11.312347, + 11.322196, + 11.332072, + 11.341972, + 11.351896, + 11.361841, + 11.371804, + 11.381784, + 11.391777, + 11.401782, + 11.411794, + 11.421811, + 11.431829, + 11.441847, + 11.45186, + 11.461866, + 11.471861, + 11.481843, + 11.49181, + 11.501758, + 11.511685, + 11.52159, + 11.531471, + 11.541325, + 11.551152, + 11.560951, + 11.570719, + 11.580457, + 11.590163, + 11.599837, + 11.609479, + 11.619088, + 11.628664, + 11.638206, + 11.647716, + 11.657192, + 11.666636, + 11.676047, + 11.685425, + 11.694772, + 11.704087, + 11.713372, + 11.722628, + 11.731855, + 11.741055, + 11.750229, + 11.75938, + 11.768509, + 11.777618, + 11.78671, + 11.795787, + 11.804852, + 11.813907, + 11.822956, + 11.832001, + 11.841045, + 11.850091, + 11.859141, + 11.868199, + 11.877267, + 11.886348, + 11.895446, + 11.904562, + 11.913699, + 11.922862, + 11.932053, + 11.941275, + 11.950533, + 11.959829, + 11.969167, + 11.978551, + 11.987983, + 11.997469, + 12.007009, + 12.016609, + 12.02627, + 12.035995, + 12.045786, + 12.055646, + 12.065576, + 12.075576, + 12.085647, + 12.095789, + 12.106003, + 12.116285, + 12.126636, + 12.137054, + 12.147535, + 12.158078, + 12.168679, + 12.179335, + 12.190043, + 12.200798, + 12.211597, + 12.222435, + 12.233309, + 12.244214, + 12.255146, + 12.266099, + 12.27707, + 12.288054, + 12.299045, + 12.31004, + 12.321032, + 12.332017, + 12.342989, + 12.353944, + 12.364876, + 12.37578, + 12.386651, + 12.397486, + 12.408278, + 12.419024, + 12.429719, + 12.44036, + 12.450944, + 12.461468, + 12.47193, + 12.482328, + 12.49266, + 12.502927, + 12.513127, + 12.523261, + 12.533329, + 12.543332, + 12.553271, + 12.563148, + 12.572964, + 12.582722, + 12.592422, + 12.602068, + 12.611662, + 12.621205, + 12.6307, + 12.640151, + 12.649559, + 12.658927, + 12.668258, + 12.677556, + 12.686823, + 12.696062, + 12.705278, + 12.714473, + 12.723653, + 12.732819, + 12.741977, + 12.751131, + 12.760284, + 12.769442, + 12.778609, + 12.787788, + 12.796984, + 12.806201, + 12.815444, + 12.824717, + 12.834023, + 12.843367, + 12.852753, + 12.862185, + 12.871667, + 12.881202, + 12.890796, + 12.90045, + 12.910169, + 12.919956, + 12.929814, + 12.939745, + 12.949751, + 12.959835, + 12.969998, + 12.980241, + 12.990565, + 13.000971, + 13.011457, + 13.022023, + 13.032668, + 13.043391, + 13.05419, + 13.065062, + 13.076006, + 13.087017, + 13.098092, + 13.109229, + 13.120423, + 13.131669, + 13.142963, + 13.154302, + 13.165678, + 13.177089, + 13.188527, + 13.199988, + 13.211467, + 13.222956, + 13.23445, + 13.245944, + 13.25743, + 13.268902, + 13.280355, + 13.291782, + 13.303175, + 13.31453, + 13.32584, + 13.337099, + 13.348301, + 13.35944, + 13.370513, + 13.381513, + 13.392437, + 13.403282, + 13.414042, + 13.424717, + 13.435304, + 13.445801, + 13.456207, + 13.466522, + 13.476746, + 13.486878, + 13.496921, + 13.506874, + 13.516741, + 13.526521, + 13.536219, + 13.545835, + 13.555373, + 13.564836, + 13.574225, + 13.583545, + 13.592799, + 13.601989, + 13.611121, + 13.620197, + 13.629222, + 13.638201, + 13.647137, + 13.656036, + 13.664903, + 13.673743, + 13.682563, + 13.691367, + 13.700161, + 13.708953, + 13.717747, + 13.726551, + 13.735371, + 13.744213, + 13.753083, + 13.761987, + 13.770933, + 13.779925, + 13.788971, + 13.798075, + 13.807243, + 13.816479, + 13.82579, + 13.83518, + 13.844653, + 13.854212, + 13.863863, + 13.873607, + 13.883447, + 13.893387, + 13.903429, + 13.913572, + 13.92382, + 13.934172, + 13.944629, + 13.955189, + 13.965853, + 13.976617, + 13.987481, + 13.998441, + 14.009494, + 14.020636, + 14.031863, + 14.04317, + 14.054551, + 14.066001, + 14.077513, + 14.089082, + 14.1007, + 14.11236, + 14.124054, + 14.135776, + 14.147517, + 14.15927, + 14.171026, + 14.182778, + 14.194517, + 14.206236, + 14.217925, + 14.229578, + 14.241186, + 14.252742, + 14.264239, + 14.275669, + 14.287027, + 14.298305, + 14.3095, + 14.320605, + 14.331616, + 14.342529, + 14.353342, + 14.364051, + 14.374655, + 14.385152, + 14.395542, + 14.405824, + 14.416, + 14.426069, + 14.436034, + 14.445896, + 14.455658, + 14.465322, + 14.474892, + 14.484371, + 14.493762, + 14.50307, + 14.512299, + 14.521454, + 14.530539, + 14.53956, + 14.548522, + 14.55743, + 14.566291, + 14.575109, + 14.583893, + 14.592647, + 14.601379, + 14.610095, + 14.618801, + 14.627506, + 14.636216, + 14.644938, + 14.653678, + 14.662445, + 14.671244, + 14.680082, + 14.688967, + 14.697905, + 14.706901, + 14.715962, + 14.725094, + 14.734303, + 14.743593, + 14.752971, + 14.76244, + 14.772006, + 14.781673, + 14.791445, + 14.801326, + 14.81132, + 14.821431, + 14.83166, + 14.842012, + 14.852489, + 14.863093, + 14.873826, + 14.884689, + 14.895684, + 14.906809, + 14.918065, + 14.929451, + 14.940965, + 14.952603, + 14.964364, + 14.976243, + 14.988236, + 15.000337, + 15.012541, + 15.024841, + 15.03723, + 15.049702, + 15.062248, + 15.074859, + 15.087528, + 15.100246, + 15.113004, + 15.125792, + 15.138601, + 15.151422, + 15.164244, + 15.177059, + 15.189857, + 15.202629, + 15.215364, + 15.228055, + 15.240692, + 15.253266, + 15.265769, + 15.278194, + 15.290532, + 15.302777, + 15.314922, + 15.326961, + 15.33889, + 15.350702, + 15.362396, + 15.373967, + 15.385414, + 15.396735, + 15.407931, + 15.419, + 15.429945, + 15.440768, + 15.451469, + 15.462053, + 15.472523, + 15.482884, + 15.493138, + 15.503292, + 15.513351, + 15.52332, + 15.533206, + 15.543013, + 15.55275, + 15.562424, + 15.57204, + 15.581608, + 15.591134, + 15.600628, + 15.610096, + 15.619549, + 15.628994, + 15.638442, + 15.6479, + 15.657378, + 15.666886, + 15.676431, + 15.686023, + 15.695672, + 15.705384, + 15.715167, + 15.725031, + 15.734981, + 15.745024, + 15.755166, + 15.765413, + 15.77577, + 15.786242, + 15.796831, + 15.807542, + 15.818376, + 15.829338, + 15.840427, + 15.851646, + 15.862995, + 15.874474, + 15.886083, + 15.897821, + 15.909688, + 15.921682, + 15.933801, + 15.946044, + 15.958407, + 15.970888, + 15.983484, + 15.99619, + 16.009001, + 16.021912, + 16.034916, + 16.048009, + 16.061181, + 16.074426, + 16.087734, + 16.101097, + 16.114506, + 16.127951, + 16.141421, + 16.154908, + 16.1684, + 16.181888, + 16.195362, + 16.208811, + 16.222228, + 16.235603, + 16.248927, + 16.262194, + 16.275396, + 16.288526, + 16.301578, + 16.314546, + 16.327424, + 16.340209, + 16.352896, + 16.365479, + 16.377956, + 16.390323, + 16.402576, + 16.414713, + 16.426731, + 16.438628, + 16.450402, + 16.462051, + 16.473576, + 16.484974, + 16.496248, + 16.507398, + 16.518425, + 16.529333, + 16.540124, + 16.550803, + 16.561374, + 16.571841, + 16.582212, + 16.592492, + 16.602688, + 16.612807, + 16.622857, + 16.632845, + 16.64278, + 16.652668, + 16.662519, + 16.67234, + 16.68214, + 16.691926, + 16.701707, + 16.711492, + 16.721288, + 16.731104, + 16.74095, + 16.750833, + 16.760762, + 16.770746, + 16.780794, + 16.790913, + 16.801113, + 16.8114, + 16.821784, + 16.832271, + 16.842868, + 16.853583, + 16.86442, + 16.875386, + 16.886485, + 16.897721, + 16.909099, + 16.920621, + 16.932288, + 16.944104, + 16.956069, + 16.968183, + 16.980446, + 16.992858, + 17.005416, + 17.018118, + 17.030962, + 17.043944, + 17.05706, + 17.070306, + 17.083676, + 17.097164, + 17.110765, + 17.12447, + 17.138273, + 17.152164, + 17.166135, + 17.180177, + 17.194279, + 17.208431, + 17.222623, + 17.236844, + 17.251081, + 17.265324, + 17.279561, + 17.29378, + 17.307971, + 17.322121, + 17.336222, + 17.350262, + 17.364232, + 17.378123, + 17.391927, + 17.405637, + 17.419244, + 17.432742, + 17.446127, + 17.459391, + 17.472532, + 17.485545, + 17.498426, + 17.511173, + 17.523784, + 17.536257, + 17.54859, + 17.560783, + 17.572837, + 17.58475, + 17.596525, + 17.608162, + 17.619663, + 17.631033, + 17.642273, + 17.653388, + 17.664384, + 17.675265, + 17.686038, + 17.696709, + 17.707287, + 17.717779, + 17.728194, + 17.738541, + 17.748828, + 17.759066, + 17.769264, + 17.779432, + 17.789579, + 17.799715, + 17.80985, + 17.819993, + 17.830154, + 17.840342, + 17.850566, + 17.860835, + 17.871159, + 17.881546, + 17.892006, + 17.902546, + 17.913176, + 17.923904, + 17.934737, + 17.945683, + 17.95675, + 17.967944, + 17.979272, + 17.990739, + 18.002352, + 18.014113, + 18.026028, + 18.038099, + 18.050329, + 18.062718, + 18.075267, + 18.087975, + 18.100843, + 18.113866, + 18.127042, + 18.140368, + 18.153839, + 18.16745, + 18.181194, + 18.195066, + 18.209059, + 18.223165, + 18.237378, + 18.251688, + 18.266089, + 18.280571, + 18.295127, + 18.309748, + 18.324424, + 18.339147, + 18.353909, + 18.368699, + 18.383509, + 18.398328, + 18.413148, + 18.427959, + 18.442751, + 18.457514, + 18.472239, + 18.486916, + 18.501537, + 18.516093, + 18.530576, + 18.544978, + 18.559292, + 18.57351, + 18.587628, + 18.601639, + 18.615538, + 18.629322, + 18.642986, + 18.656528, + 18.669945, + 18.683235, + 18.696397, + 18.709429, + 18.722333, + 18.735107, + 18.747754, + 18.760273, + 18.772667, + 18.784938, + 18.797089, + 18.809122, + 18.821042, + 18.832854, + 18.844561, + 18.856169, + 18.867685, + 18.879115, + 18.890466, + 18.901746, + 18.912963, + 18.924126, + 18.935243, + 18.946323, + 18.957377, + 18.968414, + 18.979443, + 18.990474, + 19.001518, + 19.012584, + 19.023681, + 19.03482, + 19.046009, + 19.057259, + 19.068577, + 19.079974, + 19.091456, + 19.103033, + 19.114711, + 19.126498, + 19.1384, + 19.150423, + 19.162573, + 19.174852, + 19.187267, + 19.19982, + 19.212513, + 19.22535, + 19.238331, + 19.251457, + 19.264729, + 19.278148, + 19.291711, + 19.305419, + 19.319269, + 19.333259, + 19.347388, + 19.36165, + 19.376044, + 19.390563, + 19.405204, + 19.419961, + 19.434828, + 19.449798, + 19.464865, + 19.48002, + 19.495256, + 19.510564, + 19.525935, + 19.54136, + 19.556828, + 19.57233, + 19.587856, + 19.603395, + 19.618936, + 19.634469, + 19.649983, + 19.665469, + 19.680915, + 19.696312, + 19.711652, + 19.726925, + 19.742123, + 19.757239, + 19.772264, + 19.787194, + 19.802021, + 19.816741, + 19.831348, + 19.845839, + 19.860208, + 19.874453, + 19.888571, + 19.902558, + 19.916413, + 19.930133, + 19.943717, + 19.957163, + 19.970471, + 19.98364, + 19.996671, + 20.009565, + 20.022323, + 20.034947, + 20.04744, + 20.059807, + 20.072051, + 20.084179, + 20.096196, + 20.108108, + 20.119925, + 20.131653, + 20.143302, + 20.154882, + 20.166401, + 20.177871, + 20.189301, + 20.200703, + 20.212087, + 20.223463, + 20.234844, + 20.246238, + 20.257659, + 20.269115, + 20.280618, + 20.292178, + 20.303806, + 20.315511, + 20.327304, + 20.339193, + 20.351188, + 20.363296, + 20.375527, + 20.387887, + 20.400382, + 20.413019, + 20.425802, + 20.438735, + 20.451819, + 20.465058, + 20.478452, + 20.491999, + 20.5057, + 20.519552, + 20.533552, + 20.547696, + 20.561981, + 20.5764, + 20.59095, + 20.605623, + 20.620414, + 20.635317, + 20.650324, + 20.665429, + 20.680626, + 20.695906, + 20.711262, + 20.726688, + 20.742176, + 20.757717, + 20.773304, + 20.78893, + 20.804585, + 20.820262, + 20.835952, + 20.851645, + 20.867334, + 20.88301, + 20.898663, + 20.914287, + 20.929871, + 20.945409, + 20.960893, + 20.976315, + 20.991669, + 21.006949, + 21.022147, + 21.03726, + 21.052282, + 21.067209, + 21.082037, + 21.096764, + 21.111386, + 21.125901, + 21.140309, + 21.154607, + 21.168795, + 21.182872, + 21.196838, + 21.210693, + 21.224438, + 21.238072, + 21.251597, + 21.265014, + 21.278324, + 21.291529, + 21.304631, + 21.317632, + 21.330535, + 21.343345, + 21.356063, + 21.368696, + 21.381247, + 21.393723, + 21.406128, + 21.418471, + 21.430757, + 21.442993, + 21.455189, + 21.467351, + 21.479489, + 21.491611, + 21.503725, + 21.515841, + 21.527967, + 21.540113, + 21.552287, + 21.564498, + 21.576756, + 21.589068, + 21.601444, + 21.61389, + 21.626415, + 21.639025, + 21.651729, + 21.664531, + 21.677438, + 21.690455, + 21.703586, + 21.716837, + 21.730211, + 21.74371, + 21.757337, + 21.771096, + 21.784986, + 21.799009, + 21.813166, + 21.827457, + 21.841881, + 21.856437, + 21.871123, + 21.885937, + 21.900877, + 21.915938, + 21.931117, + 21.946408, + 21.961807, + 21.977307, + 21.992903, + 22.008587, + 22.024351, + 22.040189, + 22.056092, + 22.072052, + 22.08806, + 22.104108, + 22.120187, + 22.136288, + 22.152402, + 22.16852, + 22.184634, + 22.200736, + 22.216818, + 22.232873, + 22.248892, + 22.26487, + 22.280799, + 22.296673, + 22.312486, + 22.328233, + 22.343909, + 22.359507, + 22.375024, + 22.390456, + 22.405797, + 22.421045, + 22.436196, + 22.451247, + 22.466195, + 22.481037, + 22.495773, + 22.510399, + 22.524916, + 22.539321, + 22.553616, + 22.567801, + 22.581877, + 22.595845, + 22.609708, + 22.623468, + 22.63713, + 22.650698, + 22.664176, + 22.677569, + 22.690885, + 22.704129, + 22.717309, + 22.730431, + 22.743504, + 22.756536, + 22.769536, + 22.782511, + 22.795471, + 22.808424, + 22.82138, + 22.834347, + 22.847334, + 22.860351, + 22.873405, + 22.886507, + 22.899664, + 22.912886, + 22.926179, + 22.939553, + 22.953015, + 22.966572, + 22.980231, + 22.993998, + 23.007878, + 23.021876, + 23.035996, + 23.050241, + 23.064613, + 23.079113, + 23.093741, + 23.108497, + 23.123381, + 23.138389, + 23.153519, + 23.168767, + 23.18413, + 23.199603, + 23.21518, + 23.230857, + 23.246628, + 23.262489, + 23.278432, + 23.294454, + 23.310549, + 23.326712, + 23.342937, + 23.35922, + 23.375556, + 23.391938, + 23.408363, + 23.424824, + 23.441317, + 23.457835, + 23.474372, + 23.490922, + 23.507479, + 23.524037, + 23.540589, + 23.557129, + 23.573651, + 23.590149, + 23.606617, + 23.62305, + 23.639442, + 23.655788, + 23.672083, + 23.688324, + 23.704507, + 23.72063, + 23.736689, + 23.752683, + 23.76861, + 23.784468, + 23.800257, + 23.815977, + 23.831627, + 23.847208, + 23.86272, + 23.878163, + 23.893539, + 23.908847, + 23.92409, + 23.939266, + 23.954379, + 23.969427, + 23.984413, + 23.999337, + 24.014199, + 24.029002, + 24.043746, + 24.058432, + 24.073063, + 24.087638, + 24.102162, + 24.116634, + 24.131059, + 24.145439, + 24.159777, + 24.174077, + 24.188343, + 24.202578, + 24.216788, + 24.230977, + 24.24515, + 24.259314, + 24.273473, + 24.287635, + 24.301804, + 24.315987, + 24.33019, + 24.344418, + 24.358678, + 24.372975, + 24.387314, + 24.4017, + 24.416139, + 24.430635, + 24.445193, + 24.459818, + 24.474515, + 24.489287, + 24.504138, + 24.519073, + 24.534095, + 24.549207, + 24.564412, + 24.579712, + 24.595109, + 24.610606, + 24.626202, + 24.641898, + 24.657694, + 24.673589, + 24.689581, + 24.705669, + 24.72185, + 24.73812, + 24.754475, + 24.77091, + 24.787421, + 24.804002, + 24.820646, + 24.837347, + 24.854098, + 24.870892, + 24.887722, + 24.90458, + 24.921458, + 24.93835, + 24.955249, + 24.972146, + 24.989035, + 25.005909, + 25.022761, + 25.039584, + 25.056372, + 25.073118, + 25.089815, + 25.106458, + 25.123041, + 25.139559, + 25.156007, + 25.172379, + 25.188674, + 25.204886, + 25.221013, + 25.237053, + 25.253004, + 25.268865, + 25.284636, + 25.300317, + 25.315908, + 25.331411, + 25.346828, + 25.36216, + 25.37741, + 25.392582, + 25.407679, + 25.422705, + 25.437664, + 25.452561, + 25.467399, + 25.482184, + 25.496921, + 25.511616, + 25.526273, + 25.540897, + 25.555495, + 25.570071, + 25.584631, + 25.599181, + 25.613726, + 25.628271, + 25.642822, + 25.657384, + 25.671961, + 25.686559, + 25.701183, + 25.715837, + 25.730526, + 25.745252, + 25.760021, + 25.774835, + 25.789697, + 25.804609, + 25.819573, + 25.83459, + 25.849662, + 25.864788, + 25.87997, + 25.895206, + 25.910496, + 25.925838, + 25.941233, + 25.956678, + 25.972171, + 25.987712, + 26.003299, + 26.018929, + 26.034602, + 26.050314, + 26.066066, + 26.081854, + 26.097677, + 26.113533, + 26.129421, + 26.145338, + 26.161283, + 26.177253, + 26.193247, + 26.209262, + 26.225297, + 26.241349, + 26.257416, + 26.273495, + 26.289586, + 26.305685, + 26.32179, + 26.3379, + 26.354013, + 26.370127, + 26.38624, + 26.402351, + 26.418459, + 26.434561, + 26.450656, + 26.466744, + 26.482822, + 26.498889, + 26.514945, + 26.530988, + 26.547016, + 26.563029, + 26.579025, + 26.595005, + 26.610966, + 26.626907, + 26.642829, + 26.658729, + 26.674608, + 26.690464, + 26.706296, + 26.722103, + 26.737885, + 26.753641, + 26.769369, + 26.785069, + 26.800739, + 26.81638, + 26.831988, + 26.847565, + 26.863108, + 26.878616, + 26.89409, + 26.909528, + 26.924929, + 26.940293, + 26.95562, + 26.970909, + 26.986161, + 27.001377, + 27.016556, + 27.0317, + 27.046809, + 27.061887, + 27.076933, + 27.091952, + 27.106944, + 27.121914, + 27.136864, + 27.151799, + 27.166721, + 27.181636, + 27.196547, + 27.211459, + 27.226377, + 27.241304, + 27.256246, + 27.271207, + 27.28619, + 27.3012, + 27.316239, + 27.331312, + 27.346419, + 27.361565, + 27.376751, + 27.391979, + 27.40725, + 27.422565, + 27.437926, + 27.453333, + 27.468786, + 27.484286, + 27.499833, + 27.515426, + 27.531066, + 27.546753, + 27.562486, + 27.578264, + 27.594087, + 27.609955, + 27.625866, + 27.64182, + 27.657816, + 27.673853, + 27.689929, + 27.706042, + 27.722191, + 27.738374, + 27.754588, + 27.770831, + 27.787101, + 27.803394, + 27.819708, + 27.83604, + 27.852388, + 27.868749, + 27.885121, + 27.901502, + 27.917891, + 27.934285, + 27.950685, + 27.967089, + 27.983499, + 27.999912, + 28.016331, + 28.032756, + 28.049186, + 28.065624, + 28.082069, + 28.098523, + 28.114987, + 28.131461, + 28.147946, + 28.164443, + 28.180952, + 28.197474, + 28.214009, + 28.230556, + 28.247116, + 28.26369, + 28.280278, + 28.296879, + 28.313495, + 28.330126, + 28.346772, + 28.363434, + 28.380113, + 28.396808, + 28.413522, + 28.430255, + 28.447007, + 28.463778, + 28.480569, + 28.49738, + 28.51421, + 28.53106, + 28.547929, + 28.564815, + 28.58172, + 28.59864, + 28.615576, + 28.632527, + 28.649491, + 28.666466, + 28.683453, + 28.700448, + 28.717451, + 28.734459, + 28.751473, + 28.768489, + 28.785508, + 28.802527, + 28.819547, + 28.836565, + 28.853581, + 28.870595, + 28.887607, + 28.904617, + 28.921624, + 28.93863, + 28.955634, + 28.972639, + 28.989644, + 29.006651, + 29.023661, + 29.040676, + 29.057695, + 29.074721, + 29.091755, + 29.108798, + 29.125851, + 29.142914, + 29.15999, + 29.177077, + 29.194178, + 29.211292, + 29.22842, + 29.245563, + 29.262721, + 29.279894, + 29.297083, + 29.314289, + 29.331511, + 29.348751, + 29.366008, + 29.383282, + 29.400574, + 29.417883, + 29.435209, + 29.452553, + 29.469914, + 29.487292, + 29.504688, + 29.5221, + 29.53953, + 29.556977, + 29.574443, + 29.591927, + 29.609431, + 29.626955, + 29.644499, + 29.662066, + 29.679654, + 29.697265, + 29.714899, + 29.732556, + 29.750236, + 29.767939, + 29.785663, + 29.803408, + 29.821172, + 29.838955, + 29.856753, + 29.874565, + 29.89239, + 29.910225, + 29.928067, + 29.945915, + 29.963767, + 29.98162, + 29.999472, + 30.017321, + 30.035165, + 30.053002, + 30.070831, + 30.088649, + 30.106455, + 30.124248, + 30.142025, + 30.159785, + 30.177526, + 30.195248, + 30.212949, + 30.230627, + 30.248282, + 30.265911, + 30.283514, + 30.301089, + 30.318635, + 30.336151, + 30.353635, + 30.371086, + 30.388504, + 30.405887, + 30.423236, + 30.440548, + 30.457825, + 30.475066, + 30.49227, + 30.50944, + 30.526576, + 30.543678, + 30.56075, + 30.577792, + 30.594807, + 30.611797, + 30.628764, + 30.645709, + 30.662637, + 30.679549, + 30.696449, + 30.71334, + 30.730225, + 30.747109, + 30.763994, + 30.780887, + 30.79779, + 30.814708, + 30.831645, + 30.848607, + 30.865597, + 30.882619, + 30.899677, + 30.916775, + 30.933914, + 30.951098, + 30.968328, + 30.985606, + 31.002932, + 31.020308, + 31.037734, + 31.05521, + 31.072734, + 31.090307, + 31.107928, + 31.125596, + 31.143312, + 31.161073, + 31.17888, + 31.196733, + 31.214632, + 31.232576, + 31.250568, + 31.268608, + 31.286698, + 31.304838, + 31.323031, + 31.341279, + 31.359582, + 31.377944, + 31.396365, + 31.414847, + 31.43339, + 31.451996, + 31.470664, + 31.489395, + 31.508188, + 31.527042, + 31.545957, + 31.564931, + 31.583962, + 31.603048, + 31.622188, + 31.64138, + 31.660619, + 31.679905, + 31.699235, + 31.718606, + 31.738015, + 31.75746, + 31.776937, + 31.796444, + 31.815978, + 31.835535, + 31.855113, + 31.874706, + 31.894311, + 31.913923, + 31.933539, + 31.953153, + 31.972759, + 31.992352, + 32.011926, + 32.031475, + 32.050992, + 32.070471, + 32.089906, + 32.10929, + 32.128617, + 32.147881, + 32.167077, + 32.1862, + 32.205245, + 32.22421, + 32.243092, + 32.261888, + 32.280598, + 32.299221, + 32.31776, + 32.336215, + 32.35459, + 32.372887, + 32.39111, + 32.409264, + 32.427353, + 32.445382, + 32.463358, + 32.481285, + 32.499169, + 32.517015, + 32.534828, + 32.552616, + 32.570382, + 32.588133, + 32.605875, + 32.623612, + 32.641351, + 32.659099, + 32.67686, + 32.694642, + 32.71245, + 32.730292, + 32.748173, + 32.7661, + 32.78408, + 32.802119, + 32.820224, + 32.838401, + 32.856657, + 32.874997, + 32.893428, + 32.911954, + 32.930581, + 32.949312, + 32.968151, + 32.987101, + 33.006163, + 33.025339, + 33.044629, + 33.064033, + 33.083549, + 33.103176, + 33.122911, + 33.142752, + 33.162695, + 33.182737, + 33.202873, + 33.2231, + 33.243413, + 33.263808, + 33.28428, + 33.304825, + 33.325438, + 33.346114, + 33.366847, + 33.387633, + 33.408467, + 33.429342, + 33.450254, + 33.471195, + 33.492161, + 33.513144, + 33.534139, + 33.555138, + 33.576136, + 33.597127, + 33.618103, + 33.639059, + 33.659989, + 33.680888, + 33.70175, + 33.72257, + 33.743345, + 33.764071, + 33.784744, + 33.805363, + 33.825923, + 33.846424, + 33.866864, + 33.887242, + 33.907556, + 33.927806, + 33.947991, + 33.968112, + 33.988168, + 34.00816, + 34.028089, + 34.047956, + 34.067761, + 34.087506, + 34.107192, + 34.12682, + 34.146392, + 34.16591, + 34.185377, + 34.204794, + 34.224166, + 34.243496, + 34.26279, + 34.282051, + 34.301285, + 34.3205, + 34.3397, + 34.358893, + 34.378086, + 34.397286, + 34.416499, + 34.435732, + 34.454991, + 34.474281, + 34.493609, + 34.512979, + 34.532395, + 34.55186, + 34.571378, + 34.590952, + 34.610584, + 34.630274, + 34.650025, + 34.669839, + 34.689715, + 34.709657, + 34.729664, + 34.74974, + 34.769886, + 34.790103, + 34.810395, + 34.830762, + 34.851209, + 34.871738, + 34.892351, + 34.913051, + 34.933841, + 34.954723, + 34.975701, + 34.996777, + 35.017952, + 35.039227, + 35.060604, + 35.082084, + 35.103664, + 35.125345, + 35.147125, + 35.169001, + 35.19097, + 35.213029, + 35.235172, + 35.257396, + 35.279693, + 35.302058, + 35.324484, + 35.346964, + 35.36949, + 35.392055, + 35.414652, + 35.437271, + 35.459906, + 35.482548, + 35.505189, + 35.527821, + 35.550436, + 35.573027, + 35.595584, + 35.618101, + 35.640568, + 35.662979, + 35.685324, + 35.707596, + 35.729788, + 35.75189, + 35.773896, + 35.795797, + 35.817586, + 35.839256, + 35.860802, + 35.882216, + 35.903494, + 35.924633, + 35.945629, + 35.96648, + 35.987186, + 36.007747, + 36.028165, + 36.048444, + 36.068587, + 36.088598, + 36.108486, + 36.128256, + 36.147915, + 36.167473, + 36.186938, + 36.206319, + 36.225624, + 36.244865, + 36.264049, + 36.283186, + 36.302286, + 36.321358, + 36.340411, + 36.359455, + 36.378499, + 36.397553, + 36.416625, + 36.435726, + 36.454864, + 36.474049, + 36.493291, + 36.512598, + 36.531979, + 36.551444, + 36.571002, + 36.59066, + 36.610427, + 36.630312, + 36.650321, + 36.670463, + 36.690742, + 36.711165, + 36.731737, + 36.752462, + 36.773341, + 36.794378, + 36.815573, + 36.836925, + 36.858435, + 36.880098, + 36.901913, + 36.923875, + 36.94598, + 36.968223, + 36.990598, + 37.013099, + 37.035721, + 37.058456, + 37.081299, + 37.104243, + 37.127282, + 37.150408, + 37.173616, + 37.196897, + 37.220246, + 37.243655, + 37.267116, + 37.290622, + 37.314165, + 37.337736, + 37.361328, + 37.384932, + 37.408538, + 37.432139, + 37.455725, + 37.479287, + 37.502818, + 37.526307, + 37.549748, + 37.573132, + 37.596452, + 37.619701, + 37.642873, + 37.665961, + 37.688962, + 37.711869, + 37.734679, + 37.757389, + 37.779994, + 37.802492, + 37.824882, + 37.847161, + 37.869329, + 37.891385, + 37.91333, + 37.935165, + 37.95689, + 37.978508, + 38.00002, + 38.021429, + 38.042738, + 38.06395, + 38.085068, + 38.106097, + 38.12704, + 38.147902, + 38.16869, + 38.189408, + 38.210064, + 38.230664, + 38.251216, + 38.271727, + 38.292205, + 38.312659, + 38.333098, + 38.35353, + 38.373963, + 38.394408, + 38.414872, + 38.435365, + 38.455894, + 38.476467, + 38.497092, + 38.517776, + 38.538527, + 38.559351, + 38.580254, + 38.601242, + 38.622322, + 38.643498, + 38.664777, + 38.686163, + 38.707663, + 38.72928, + 38.751022, + 38.772891, + 38.794892, + 38.81703, + 38.839307, + 38.861728, + 38.884295, + 38.907009, + 38.929873, + 38.952887, + 38.976051, + 38.999366, + 39.02283, + 39.04644, + 39.070196, + 39.094093, + 39.118128, + 39.142296, + 39.166594, + 39.191014, + 39.215551, + 39.240199, + 39.26495, + 39.289797, + 39.314731, + 39.339744, + 39.364827, + 39.389971, + 39.415166, + 39.440403, + 39.465671, + 39.490961, + 39.516261, + 39.541563, + 39.566854, + 39.592126, + 39.617366, + 39.642567, + 39.667717, + 39.692806, + 39.717826, + 39.742767, + 39.76762, + 39.792377, + 39.81703, + 39.841571, + 39.865995, + 39.890295, + 39.914467, + 39.938506, + 39.96241, + 39.986175, + 40.009801, + 40.033288, + 40.056635, + 40.079844, + 40.102918, + 40.125861, + 40.148678, + 40.171373, + 40.193954, + 40.216427, + 40.238801, + 40.261085, + 40.283287, + 40.305417, + 40.327485, + 40.349501, + 40.371475, + 40.393419, + 40.415343, + 40.437258, + 40.459174, + 40.481103, + 40.503055, + 40.52504, + 40.54707, + 40.569155, + 40.591304, + 40.613526, + 40.635831, + 40.658227, + 40.680722, + 40.703322, + 40.726035, + 40.748865, + 40.77182, + 40.794903, + 40.818118, + 40.84147, + 40.864961, + 40.888592, + 40.912366, + 40.936283, + 40.960343, + 40.984547, + 41.008893, + 41.033381, + 41.05801, + 41.082779, + 41.107686, + 41.13273, + 41.157908, + 41.18322, + 41.208662, + 41.234231, + 41.259926, + 41.285743, + 41.311677, + 41.337724, + 41.36388, + 41.390137, + 41.416491, + 41.442934, + 41.469459, + 41.496056, + 41.522718, + 41.549434, + 41.576196, + 41.602994, + 41.629819, + 41.656659, + 41.683506, + 41.710349, + 41.737181, + 41.763991, + 41.790771, + 41.817513, + 41.84421, + 41.870852, + 41.897434, + 41.923949, + 41.950389, + 41.976748, + 42.003021, + 42.0292, + 42.05528, + 42.081255, + 42.10712, + 42.132868, + 42.158496, + 42.183997, + 42.209367, + 42.234602, + 42.259699, + 42.284654, + 42.309465, + 42.334131, + 42.35865, + 42.383024, + 42.407253, + 42.43134, + 42.455289, + 42.479103, + 42.502788, + 42.526349, + 42.549794, + 42.57313, + 42.596365, + 42.619507, + 42.642565, + 42.665548, + 42.688466, + 42.711329, + 42.734146, + 42.756927, + 42.779682, + 42.802422, + 42.825157, + 42.847897, + 42.870652, + 42.893434, + 42.916253, + 42.939119, + 42.962042, + 42.985034, + 43.008105, + 43.031264, + 43.054521, + 43.077887, + 43.101369, + 43.124977, + 43.148718, + 43.172599, + 43.196627, + 43.220807, + 43.245144, + 43.269642, + 43.294303, + 43.319129, + 43.344122, + 43.369281, + 43.394605, + 43.420092, + 43.445739, + 43.471543, + 43.497499, + 43.523603, + 43.549849, + 43.576231, + 43.602742, + 43.629376, + 43.656124, + 43.682979, + 43.709931, + 43.736973, + 43.764094, + 43.791286, + 43.818537, + 43.845838, + 43.87318, + 43.90055, + 43.927941, + 43.95534, + 43.982739, + 44.010127, + 44.037495, + 44.064834, + 44.092135, + 44.11939, + 44.14659, + 44.173729, + 44.2008, + 44.227795, + 44.25471, + 44.281536, + 44.308271, + 44.334909, + 44.361447, + 44.387882, + 44.414212, + 44.440435, + 44.466552, + 44.492561, + 44.518464, + 44.544262, + 44.569956, + 44.59555, + 44.621045, + 44.646447, + 44.67176, + 44.69699, + 44.722146, + 44.747236, + 44.772273, + 44.797268, + 44.822235, + 44.847189, + 44.872145, + 44.897121, + 44.922133, + 44.947197, + 44.97233, + 44.997549, + 45.022867, + 45.0483, + 45.07386, + 45.099558, + 45.125406, + 45.15141, + 45.177578, + 45.203912, + 45.230415, + 45.257086, + 45.283924, + 45.310924, + 45.338081, + 45.36539, + 45.392843, + 45.420434, + 45.448156, + 45.476002, + 45.503966, + 45.532044, + 45.56023, + 45.588522, + 45.616917, + 45.645412, + 45.674006, + 45.702697, + 45.731483, + 45.760362, + 45.789331, + 45.818389, + 45.847533, + 45.87676, + 45.906066, + 45.935448, + 45.9649, + 45.994419, + 46.024, + 46.053637, + 46.083327, + 46.113065, + 46.142847, + 46.17267, + 46.202533, + 46.232433, + 46.262371, + 46.292348, + 46.322365, + 46.352424, + 46.382531, + 46.412687, + 46.4429, + 46.473172, + 46.503509, + 46.533914, + 46.564392, + 46.594945, + 46.625574, + 46.656279, + 46.68706, + 46.717913, + 46.748835, + 46.77982, + 46.810863, + 46.841956, + 46.87309, + 46.904257, + 46.935447, + 46.966649, + 46.997854, + 47.029051, + 47.06023, + 47.091381, + 47.122493, + 47.153557, + 47.184564, + 47.215504, + 47.246369, + 47.277151, + 47.30784, + 47.33843, + 47.368913, + 47.399281, + 47.429527, + 47.459644, + 47.489627, + 47.519468, + 47.549164, + 47.57871, + 47.608102, + 47.637338, + 47.666417, + 47.695339, + 47.724105, + 47.752719, + 47.781186, + 47.809511, + 47.837704, + 47.865772, + 47.893727, + 47.921581, + 47.949346, + 47.977038, + 48.004674, + 48.032271, + 48.059849, + 48.087427, + 48.115026, + 48.142666, + 48.170367, + 48.19815, + 48.226032, + 48.254033, + 48.282167, + 48.31045, + 48.338896, + 48.367517, + 48.396322, + 48.425322, + 48.454522, + 48.483929, + 48.513545, + 48.543374, + 48.573416, + 48.603669, + 48.634132, + 48.6648, + 48.695669, + 48.726731, + 48.757978, + 48.789402, + 48.82099, + 48.852731, + 48.884614, + 48.916622, + 48.948744, + 48.980961, + 49.01326, + 49.045622, + 49.078032, + 49.110472, + 49.142926, + 49.175378, + 49.207811, + 49.24021, + 49.272562, + 49.304853, + 49.337072, + 49.369209, + 49.401254, + 49.433201, + 49.465044, + 49.49678, + 49.528406, + 49.559921, + 49.591326, + 49.622622, + 49.653814, + 49.684904, + 49.7159, + 49.746806, + 49.77763, + 49.80838, + 49.839063, + 49.869689, + 49.900268, + 49.930807, + 49.961319, + 49.991812, + 50.022297, + 50.052784, + 50.083284, + 50.113808, + 50.144365, + 50.174966, + 50.205622, + 50.23634, + 50.267131, + 50.298003, + 50.328963, + 50.360019, + 50.391177, + 50.422442, + 50.453818, + 50.485309, + 50.516916, + 50.54864, + 50.580481, + 50.612438, + 50.644508, + 50.676689, + 50.708977, + 50.741366, + 50.773852, + 50.806428, + 50.839089, + 50.871829, + 50.904642, + 50.93752, + 50.970459, + 51.003452, + 51.036494, + 51.069581, + 51.102708, + 51.13587, + 51.169064, + 51.202288, + 51.235538, + 51.268812, + 51.302111, + 51.335431, + 51.368774, + 51.402139, + 51.435528, + 51.468941, + 51.502381, + 51.53585, + 51.569349, + 51.602883, + 51.636454, + 51.670066, + 51.703721, + 51.737425, + 51.771179, + 51.80499, + 51.838859, + 51.872791, + 51.906789, + 51.940856, + 51.974996, + 52.009211, + 52.043503, + 52.077874, + 52.112325, + 52.146856, + 52.181467, + 52.216156, + 52.250922, + 52.285761, + 52.320671, + 52.355645, + 52.390679, + 52.425767, + 52.460903, + 52.496079, + 52.531289, + 52.566526, + 52.601782, + 52.637051, + 52.672326, + 52.7076, + 52.742867, + 52.778121, + 52.813355, + 52.848564, + 52.883742, + 52.918885, + 52.953987, + 52.989043, + 53.02405, + 53.059004, + 53.093902, + 53.12874, + 53.163518, + 53.198233, + 53.232885, + 53.267474, + 53.302003, + 53.336472, + 53.370886, + 53.405249, + 53.439566, + 53.473842, + 53.508084, + 53.5423, + 53.576496, + 53.61068, + 53.64486, + 53.679044, + 53.71324, + 53.747456, + 53.781699, + 53.815974, + 53.85029, + 53.88465, + 53.919059, + 53.953523, + 53.988044, + 54.022626, + 54.057272, + 54.091984, + 54.126765, + 54.161617, + 54.196539, + 54.231535, + 54.266604, + 54.301747, + 54.336964, + 54.372257, + 54.407627, + 54.443073, + 54.478597, + 54.514201, + 54.549885, + 54.585651, + 54.6215, + 54.657434, + 54.693453, + 54.729559, + 54.765752, + 54.802033, + 54.838401, + 54.874855, + 54.911395, + 54.948018, + 54.984723, + 55.021506, + 55.058365, + 55.095296, + 55.132296, + 55.169362, + 55.20649, + 55.243676, + 55.280917, + 55.318211, + 55.355553, + 55.392943, + 55.430378, + 55.467856, + 55.505377, + 55.542939, + 55.580543, + 55.618188, + 55.655875, + 55.693604, + 55.731376, + 55.769191, + 55.80705, + 55.844955, + 55.882904, + 55.9209, + 55.958941, + 55.997029, + 56.035164, + 56.073345, + 56.111573, + 56.149846, + 56.188167, + 56.226533, + 56.264946, + 56.303406, + 56.341913, + 56.380467, + 56.419071, + 56.457724, + 56.496429, + 56.535186, + 56.573998, + 56.612866, + 56.651793, + 56.69078, + 56.729831, + 56.768946, + 56.808127, + 56.847376, + 56.886694, + 56.926082, + 56.96554, + 57.005067, + 57.044664, + 57.084328, + 57.124057, + 57.163851, + 57.203705, + 57.243618, + 57.283585, + 57.323603, + 57.363669, + 57.403779, + 57.443929, + 57.484115, + 57.524335, + 57.564583, + 57.604858, + 57.645157, + 57.685476, + 57.725812, + 57.766164, + 57.806529, + 57.846905, + 57.88729, + 57.927681, + 57.968078, + 58.008479, + 58.048882, + 58.089287, + 58.129692, + 58.170097, + 58.210503, + 58.250908, + 58.291313, + 58.331718, + 58.372124, + 58.412532, + 58.452944, + 58.493359, + 58.533782, + 58.574213, + 58.614655, + 58.655112, + 58.695587, + 58.736082, + 58.776603, + 58.817153, + 58.857737, + 58.89836, + 58.939025, + 58.979738, + 59.020502, + 59.061323, + 59.102204, + 59.143149, + 59.184163, + 59.225247, + 59.266406, + 59.307642, + 59.348958, + 59.390355, + 59.431836, + 59.473401, + 59.515053, + 59.556791, + 59.598617, + 59.64053, + 59.682531, + 59.72462, + 59.766796, + 59.80906, + 59.851411, + 59.893849, + 59.936373, + 59.978984, + 60.02168, + 60.06446, + 60.107325, + 60.150272, + 60.193301, + 60.236411, + 60.2796, + 60.322866, + 60.366209, + 60.409626, + 60.453116, + 60.496677, + 60.540307, + 60.584005, + 60.62777, + 60.671599, + 60.715491, + 60.759445, + 60.80346, + 60.847536, + 60.89167, + 60.935863, + 60.980113, + 61.024421, + 61.068786, + 61.113208, + 61.157687, + 61.202221, + 61.24681, + 61.291455, + 61.336152, + 61.380903, + 61.425704, + 61.470555, + 61.515454, + 61.560398, + 61.605384, + 61.65041, + 61.695473, + 61.740568, + 61.785693, + 61.830844, + 61.876018, + 61.921211, + 61.966421, + 62.011645, + 62.05688, + 62.102124, + 62.147374, + 62.19263, + 62.237889, + 62.283151, + 62.328414, + 62.373679, + 62.418946, + 62.464214, + 62.509483, + 62.554756, + 62.600033, + 62.645315, + 62.690603, + 62.735901, + 62.78121, + 62.826532, + 62.871872, + 62.917232, + 62.962615, + 63.008027, + 63.05347, + 63.09895, + 63.144471, + 63.190038, + 63.235656, + 63.281329, + 63.327063, + 63.372864, + 63.418735, + 63.464684, + 63.510714, + 63.556831, + 63.603039, + 63.649343, + 63.695748, + 63.742258, + 63.788877, + 63.835609, + 63.882458, + 63.929428, + 63.976521, + 64.023742, + 64.071092, + 64.118575, + 64.166191, + 64.213944, + 64.261833, + 64.309859, + 64.358021, + 64.40632, + 64.454753, + 64.503319, + 64.552014, + 64.600837, + 64.649782, + 64.698847, + 64.748025, + 64.797312, + 64.846703, + 64.896191, + 64.945769, + 64.995432, + 65.045172, + 65.094981, + 65.144852, + 65.194778, + 65.24475, + 65.294761, + 65.344803, + 65.394868, + 65.444948, + 65.495037, + 65.545126, + 65.59521, + 65.645281, + 65.695334, + 65.745363, + 65.795363, + 65.845329, + 65.895257, + 65.945142, + 65.994982, + 66.044772, + 66.094512, + 66.144199, + 66.193832, + 66.243409, + 66.29293, + 66.342395, + 66.391805, + 66.44116, + 66.490461, + 66.539711, + 66.588912, + 66.638065, + 66.687175, + 66.736244, + 66.785277, + 66.834278, + 66.883251, + 66.932202, + 66.981136, + 67.030059, + 67.078977, + 67.127896, + 67.176822, + 67.225764, + 67.274727, + 67.323718, + 67.372746, + 67.421817, + 67.470939, + 67.520119, + 67.569365, + 67.618684, + 67.668084, + 67.717571, + 67.767152, + 67.816835, + 67.866626, + 67.916531, + 67.966557, + 68.016709, + 68.066994, + 68.117416, + 68.16798, + 68.218692, + 68.269555, + 68.320574, + 68.371751, + 68.423091, + 68.474595, + 68.526267, + 68.578108, + 68.63012, + 68.682304, + 68.73466, + 68.787189, + 68.83989, + 68.892763, + 68.945807, + 68.99902, + 69.0524, + 69.105944, + 69.159649, + 69.213512, + 69.267528, + 69.321692, + 69.375999, + 69.430444, + 69.485021, + 69.539723, + 69.594545, + 69.649479, + 69.704519, + 69.759659, + 69.814893, + 69.870213, + 69.925614, + 69.981089, + 70.036633, + 70.092239, + 70.147902, + 70.203615, + 70.259373, + 70.31517, + 70.371001, + 70.42686, + 70.482741, + 70.53864, + 70.594552, + 70.650471, + 70.706392, + 70.76231, + 70.81822, + 70.874116, + 70.929996, + 70.985854, + 71.041688, + 71.097495, + 71.153274, + 71.209024, + 71.264745, + 71.32044, + 71.376107, + 71.431749, + 71.48737, + 71.542971, + 71.598558, + 71.654134, + 71.709704, + 71.765274, + 71.820851, + 71.876442, + 71.932055, + 71.9877, + 72.043388, + 72.099132, + 72.154943, + 72.210838, + 72.266832, + 72.322941, + 72.379185, + 72.435581, + 72.492149, + 72.548907, + 72.605875, + 72.663071, + 72.720513, + 72.778217, + 72.836197, + 72.894467, + 72.95304, + 73.011924, + 73.071132, + 73.13067, + 73.190545, + 73.250762, + 73.311321, + 73.372224, + 73.433467, + 73.495047, + 73.556956, + 73.619186, + 73.681726, + 73.744563, + 73.807683, + 73.87107, + 73.934709, + 73.998583, + 74.062674, + 74.126966, + 74.191444, + 74.256092, + 74.320895, + 74.385839, + 74.450911, + 74.516098, + 74.581388, + 74.64677, + 74.712234, + 74.777769, + 74.843368, + 74.909022, + 74.974724, + 75.040468, + 75.106248, + 75.172061, + 75.237903, + 75.303772, + 75.369667, + 75.435588, + 75.501534, + 75.567509, + 75.633514, + 75.699554, + 75.765631, + 75.831752, + 75.89792, + 75.964142, + 76.030422, + 76.096765, + 76.163177, + 76.22966, + 76.296219, + 76.362855, + 76.429572, + 76.496368, + 76.563246, + 76.630203, + 76.697238, + 76.764347, + 76.831528, + 76.898776, + 76.966085, + 77.03345, + 77.100864, + 77.16832, + 77.23581, + 77.303326, + 77.370859, + 77.438399, + 77.505938, + 77.573464, + 77.640967, + 77.708434, + 77.775856, + 77.843219, + 77.910513, + 77.977727, + 78.044852, + 78.111879, + 78.178803, + 78.245619, + 78.312325, + 78.378922, + 78.44541, + 78.511794, + 78.57808, + 78.644276, + 78.710392, + 78.77644, + 78.842433, + 78.908387, + 78.974311, + 79.040228, + 79.106149, + 79.172094, + 79.23808, + 79.304127, + 79.370252, + 79.436473, + 79.502811, + 79.569284, + 79.63591, + 79.702708, + 79.769695, + 79.836889, + 79.904306, + 79.971962, + 80.039871, + 80.108046, + 80.176499, + 80.245241, + 80.314281, + 80.383625, + 80.45328, + 80.523249, + 80.593532, + 80.664129, + 80.735036, + 80.806247, + 80.877753, + 80.949542, + 81.021602, + 81.093916, + 81.166467, + 81.239235, + 81.312199, + 81.385337, + 81.458625, + 81.532041, + 81.605559, + 81.679156, + 81.752809, + 81.826492, + 81.900184, + 81.973864, + 82.047509, + 82.121102, + 82.194623, + 82.268057, + 82.341389, + 82.414606, + 82.487696, + 82.560651, + 82.633462, + 82.706125, + 82.778636, + 82.850993, + 82.923196, + 82.995247, + 83.067151, + 83.138913, + 83.210539, + 83.28204, + 83.353424, + 83.424706, + 83.495897, + 83.567013, + 83.638072, + 83.709089, + 83.780085, + 83.851078, + 83.922089, + 83.993138, + 84.064246, + 84.135435, + 84.206725, + 84.278136, + 84.349687, + 84.421398, + 84.493285, + 84.565364, + 84.637652, + 84.71016, + 84.782902, + 84.855887, + 84.929124, + 85.002622, + 85.076385, + 85.15042, + 85.224729, + 85.299316, + 85.374181, + 85.449326, + 85.52475, + 85.600454, + 85.676435, + 85.752694, + 85.829226, + 85.906031, + 85.983105, + 86.060446, + 86.138051, + 86.215916, + 86.294038, + 86.372412, + 86.451036, + 86.529906, + 86.609018, + 86.688368, + 86.767952, + 86.847767, + 86.92781, + 87.008077, + 87.088564, + 87.16927, + 87.250192, + 87.331327, + 87.412672, + 87.494227, + 87.575989, + 87.657956, + 87.740128, + 87.822503, + 87.905079, + 87.987855, + 88.070829, + 88.154, + 88.237365, + 88.320922, + 88.404667, + 88.488599, + 88.572712, + 88.657003, + 88.741466, + 88.826096, + 88.910888, + 88.995834, + 89.080926, + 89.166158, + 89.25152, + 89.337005, + 89.422602, + 89.508303, + 89.594099, + 89.679982, + 89.765941, + 89.851969, + 89.938057, + 90.024197, + 90.110381, + 90.196601, + 90.282851, + 90.369122, + 90.455408, + 90.541702, + 90.627999, + 90.714292, + 90.800576, + 90.886846, + 90.973098, + 91.059329, + 91.145536, + 91.231717, + 91.317871, + 91.403998, + 91.490101, + 91.57618, + 91.66224, + 91.748284, + 91.83432, + 91.920352, + 92.006389, + 92.092439, + 92.178511, + 92.264615, + 92.350761, + 92.436961, + 92.523227, + 92.609569, + 92.696001, + 92.782533, + 92.86918, + 92.955952, + 93.042863, + 93.129925, + 93.217151, + 93.304553, + 93.392143, + 93.479935, + 93.56794, + 93.656169, + 93.744636, + 93.833352, + 93.922328, + 94.011575, + 94.101104, + 94.190924, + 94.281045, + 94.371476, + 94.462223, + 94.553295, + 94.644696, + 94.736431, + 94.828504, + 94.920919, + 95.013675, + 95.106773, + 95.200212, + 95.29399, + 95.388103, + 95.482546, + 95.577313, + 95.672399, + 95.767794, + 95.863491, + 95.959481, + 96.055753, + 96.152298, + 96.249105, + 96.346163, + 96.443461, + 96.540988, + 96.638731, + 96.736679, + 96.834821, + 96.933144, + 97.031636, + 97.130285, + 97.229079, + 97.328006, + 97.427055, + 97.526215, + 97.625473, + 97.724819, + 97.824244, + 97.923737, + 98.023291, + 98.122897, + 98.222548, + 98.322241, + 98.421969, + 98.521732, + 98.621526, + 98.721353, + 98.821213, + 98.921109, + 99.021045, + 99.121026, + 99.221058, + 99.321148, + 99.421305, + 99.521536, + 99.621852, + 99.722262, + 99.822777, + 99.923407, + 100.024163, + 100.125056, + 100.226097, + 100.327297, + 100.428665, + 100.530213, + 100.63195, + 100.733887, + 100.836031, + 100.938393, + 101.04098, + 101.143801, + 101.246864, + 101.350175, + 101.45374, + 101.557567, + 101.661659, + 101.766021, + 101.870658, + 101.975571, + 102.080764, + 102.186238, + 102.291992, + 102.398027, + 102.504342, + 102.610934, + 102.717802, + 102.824942, + 102.932352, + 103.040026, + 103.14796, + 103.25615, + 103.364592, + 103.47328, + 103.582211, + 103.691378, + 103.800779, + 103.910409, + 104.020264, + 104.130341, + 104.240636, + 104.351147, + 104.461871, + 104.572806, + 104.68395, + 104.795302, + 104.90686, + 105.018623, + 105.130591, + 105.242762, + 105.355137, + 105.467715, + 105.580496, + 105.693479, + 105.806666, + 105.920057, + 106.033652, + 106.147452, + 106.261458, + 106.375671, + 106.490093, + 106.604723, + 106.719564, + 106.834615, + 106.949877, + 107.065351, + 107.181035, + 107.296929, + 107.413032, + 107.529341, + 107.645855, + 107.76257, + 107.879482, + 107.996588, + 108.113884, + 108.231363, + 108.34902, + 108.46685, + 108.584847, + 108.703004, + 108.821315, + 108.939774, + 109.058376, + 109.177113, + 109.295981, + 109.414974, + 109.534087, + 109.653316, + 109.772657, + 109.892107, + 110.011663, + 110.131323, + 110.251086, + 110.37095, + 110.490915, + 110.610982, + 110.731153, + 110.851429, + 110.971813, + 111.092308, + 111.212919, + 111.33365, + 111.454507, + 111.575496, + 111.696624, + 111.8179, + 111.939332, + 112.060929, + 112.182701, + 112.304657, + 112.42681, + 112.54917, + 112.671748, + 112.794557, + 112.917607, + 113.04091, + 113.164478, + 113.288321, + 113.41245, + 113.536875, + 113.661605, + 113.786649, + 113.912014, + 114.037708, + 114.163737, + 114.290105, + 114.416816, + 114.543875, + 114.671282, + 114.79904, + 114.927148, + 115.055607, + 115.184415, + 115.31357, + 115.443069, + 115.57291, + 115.703087, + 115.833598, + 115.964436, + 116.095597, + 116.227075, + 116.358864, + 116.490958, + 116.623351, + 116.756036, + 116.889007, + 117.022257, + 117.155779, + 117.289567, + 117.423614, + 117.557915, + 117.692462, + 117.82725, + 117.962274, + 118.097528, + 118.233009, + 118.368712, + 118.504634, + 118.640771, + 118.77712, + 118.91368, + 119.050447, + 119.187422, + 119.324602, + 119.461987, + 119.599576, + 119.73737, + 119.875369, + 120.013574, + 120.151986, + 120.290607, + 120.429438, + 120.568481, + 120.707739, + 120.847213, + 120.986907, + 121.126822, + 121.266961, + 121.407327, + 121.547921, + 121.688747, + 121.829807, + 121.971104, + 122.112639, + 122.254415, + 122.396436, + 122.538703, + 122.681219, + 122.823987, + 122.967011, + 123.110292, + 123.253834, + 123.397641, + 123.541717, + 123.686066, + 123.830691, + 123.975598, + 124.120791, + 124.266275, + 124.412057, + 124.558142, + 124.704537, + 124.851248, + 124.998285, + 125.145653, + 125.293361, + 125.441419, + 125.589837, + 125.738622, + 125.887788, + 126.037343, + 126.187297, + 126.337661, + 126.488444, + 126.639657, + 126.791305, + 126.943399, + 127.095943, + 127.248944, + 127.402407, + 127.556338, + 127.710738, + 127.865614, + 128.020966, + 128.1768, + 128.333118, + 128.489924, + 128.647222, + 128.805016, + 128.963312, + 129.122115, + 129.281428, + 129.441259, + 129.601611, + 129.762486, + 129.923889, + 130.085819, + 130.248277, + 130.411264, + 130.574776, + 130.738811, + 130.903364, + 131.068429, + 131.234002, + 131.400073, + 131.566639, + 131.73369, + 131.901219, + 132.069216, + 132.23767, + 132.406574, + 132.575924, + 132.74571, + 132.915929, + 133.086572, + 133.25763, + 133.429094, + 133.600951, + 133.773187, + 133.945787, + 134.118734, + 134.292011, + 134.465598, + 134.639479, + 134.813638, + 134.988059, + 135.16273, + 135.337643, + 135.51279, + 135.688171, + 135.863787, + 136.039644, + 136.215751, + 136.392124, + 136.568779, + 136.745736, + 136.923017, + 137.100647, + 137.278648, + 137.457047, + 137.635865, + 137.815126, + 137.994849, + 138.175051, + 138.355747, + 138.53695, + 138.718667, + 138.900906, + 139.08367, + 139.266961, + 139.450777, + 139.635117, + 139.819978, + 140.005355, + 140.191244, + 140.377638, + 140.564532, + 140.751919, + 140.939793, + 141.128147, + 141.31697, + 141.506255, + 141.69599, + 141.886162, + 142.076757, + 142.267759, + 142.459149, + 142.650906, + 142.84301, + 143.035434, + 143.228153, + 143.42114, + 143.614368, + 143.807808, + 144.001432, + 144.195214, + 144.389127, + 144.583148, + 144.777253, + 144.971424, + 145.165646, + 145.359907, + 145.554198, + 145.748517, + 145.942864, + 146.137243, + 146.331664, + 146.526139, + 146.720683, + 146.915312, + 147.110048, + 147.304909, + 147.499918, + 147.695096, + 147.890465, + 148.086047, + 148.281864, + 148.477938, + 148.674289, + 148.870939, + 149.06791, + 149.265222, + 149.462897, + 149.660957, + 149.859421, + 150.058312, + 150.25765, + 150.457454, + 150.657744, + 150.858541, + 151.059862, + 151.261725, + 151.464146, + 151.667138, + 151.870715, + 152.074886, + 152.279659, + 152.485038, + 152.691023, + 152.897614, + 153.104803, + 153.312582, + 153.520939, + 153.729858, + 153.939323, + 154.149313, + 154.359807, + 154.570783, + 154.782217, + 154.994084, + 155.20636, + 155.419023, + 155.63205, + 155.845421, + 156.059118, + 156.273122, + 156.487421, + 156.702002, + 156.916855, + 157.131972, + 157.347347, + 157.562976, + 157.778856, + 157.994988, + 158.21137, + 158.428005, + 158.644894, + 158.862042, + 159.079452, + 159.29713, + 159.515082, + 159.733314, + 159.951836, + 160.170656, + 160.389784, + 160.609231, + 160.82901, + 161.049134, + 161.269617, + 161.490475, + 161.711722, + 161.933375, + 162.155451, + 162.377967, + 162.600939, + 162.824384, + 163.048319, + 163.272757, + 163.497712, + 163.723198, + 163.949225, + 164.175803, + 164.40294, + 164.630642, + 164.858914, + 165.08776, + 165.317182, + 165.54718, + 165.777755, + 166.008905, + 166.240629, + 166.472925, + 166.705792, + 166.939226, + 167.173228, + 167.407795, + 167.642928, + 167.878626, + 168.114891, + 168.351723, + 168.589125, + 168.827099, + 169.065648, + 169.304776, + 169.544486, + 169.784783, + 170.025672, + 170.267158, + 170.509247, + 170.751944, + 170.995256, + 171.23919, + 171.483754, + 171.728955, + 171.974802, + 172.221303, + 172.468469, + 172.716307, + 172.96483, + 173.214045, + 173.463963, + 173.714595, + 173.96595, + 174.218037, + 174.470864, + 174.72444, + 174.978771, + 175.233864, + 175.489721, + 175.746346, + 176.003741, + 176.261905, + 176.520835, + 176.780528, + 177.040978, + 177.302179, + 177.564121, + 177.826793, + 178.090186, + 178.354285, + 178.619076, + 178.884545, + 179.150676, + 179.417453, + 179.684859, + 179.952875, + 180.221485, + 180.49067, + 180.760411, + 181.030689, + 181.301487, + 181.572785, + 181.844563, + 182.116804, + 182.389489, + 182.6626, + 182.936118, + 183.210028, + 183.484313, + 183.758958, + 184.033947, + 184.309268, + 184.58491, + 184.860861, + 185.137113, + 185.413658, + 185.690492, + 185.967611, + 186.245014, + 186.522701, + 186.800675, + 187.078942, + 187.357506, + 187.636378, + 187.915568, + 188.195087, + 188.474949, + 188.755169, + 189.035764, + 189.31675, + 189.598146, + 189.87997, + 190.162243, + 190.444985, + 190.728217, + 191.011959, + 191.296234, + 191.581063, + 191.866469, + 192.152473, + 192.439096, + 192.726361, + 193.014288, + 193.302898, + 193.592213, + 193.882252, + 194.173035, + 194.46458, + 194.756907, + 195.050032, + 195.343971, + 195.63874, + 195.934355, + 196.230827, + 196.528169, + 196.826391, + 197.125503, + 197.425513, + 197.726427, + 198.028251, + 198.330988, + 198.63464, + 198.939208, + 199.24469, + 199.551085, + 199.858389, + 200.166596, + 200.475699, + 200.785691, + 201.096563, + 201.408303, + 201.720902, + 202.034346, + 202.348622, + 202.663716, + 202.979612, + 203.296296, + 203.613752, + 203.931962, + 204.250911, + 204.570582, + 204.89096, + 205.212028, + 205.533771, + 205.856175, + 206.179227, + 206.502914, + 206.827223, + 207.152145, + 207.47767, + 207.803789, + 208.130497, + 208.457786, + 208.785653, + 209.114094, + 209.443107, + 209.77269, + 210.102842, + 210.433564, + 210.764856, + 211.09672, + 211.429159, + 211.762173, + 212.095767, + 212.429944, + 212.764706, + 213.100057, + 213.436001, + 213.772542, + 214.109683, + 214.447429, + 214.785783, + 215.124749, + 215.464332, + 215.804537, + 216.145366, + 216.486825, + 216.828919, + 217.171653, + 217.51503, + 217.859057, + 218.203738, + 218.549078, + 218.895083, + 219.241756, + 219.589104, + 219.937132, + 220.285844, + 220.635246, + 220.985343, + 221.336141, + 221.687644, + 222.039858, + 222.392789, + 222.746442, + 223.100824, + 223.455941, + 223.811799, + 224.168405, + 224.525766, + 224.883889, + 225.242781, + 225.602451, + 225.962906, + 226.324152, + 226.6862, + 227.049054, + 227.412724, + 227.777215, + 228.142535, + 228.508689, + 228.875683, + 229.24352, + 229.612205, + 229.98174, + 230.352126, + 230.723362, + 231.095446, + 231.468375, + 231.842142, + 232.216741, + 232.592163, + 232.968395, + 233.345426, + 233.723241, + 234.101822, + 234.48115, + 234.861204, + 235.241961, + 235.623396, + 236.005481, + 236.388189, + 236.771487, + 237.155342, + 237.539721, + 237.924587, + 238.309902, + 238.69563, + 239.081729, + 239.468163, + 239.854891, + 240.241877, + 240.629083, + 241.016474, + 241.40402, + 241.791691, + 242.179461, + 242.56731, + 242.955222, + 243.343185, + 243.731194, + 244.119249, + 244.507359, + 244.895537, + 245.283805, + 245.672192, + 246.060731, + 246.449468, + 246.838449, + 247.227734, + 247.617386, + 248.007477, + 248.398083, + 248.789283, + 249.181168, + 249.573822, + 249.967337, + 250.361806, + 250.757321, + 251.153973, + 251.551856, + 251.951061, + 252.351676, + 252.753792, + 253.157494, + 253.562867, + 253.969988, + 254.378932, + 254.789766, + 255.202551, + 255.617339, + 256.034172, + 256.453077, + 256.874073, + 257.297162, + 257.722336, + 258.149576, + 258.578846, + 259.010105, + 259.443298, + 259.87836, + 260.315216, + 260.753783, + 261.193972, + 261.63569, + 262.078838, + 262.523316, + 262.969024, + 263.415857, + 263.863715, + 264.312496, + 264.762104, + 265.212444, + 265.663428, + 266.114975, + 266.56701, + 267.019466, + 267.472292, + 267.925443, + 268.378885, + 268.832598, + 269.286568, + 269.740794, + 270.195284, + 270.65006, + 271.105151, + 271.560597, + 272.016452, + 272.472782, + 272.929658, + 273.387161, + 273.845376, + 274.304391, + 274.764299, + 275.22519, + 275.687155, + 276.150285, + 276.614664, + 277.080377, + 277.547503, + 278.016114, + 278.486282, + 278.958071, + 279.431539, + 279.906742, + 280.383728, + 280.862539, + 281.343212, + 281.825775, + 282.310253, + 282.796659, + 283.285, + 283.775275, + 284.26747, + 284.761565, + 285.257528, + 285.755315, + 286.254875, + 286.756142, + 287.259043, + 287.763497, + 288.269409, + 288.776684, + 289.285219, + 289.794907, + 290.305642, + 290.817315, + 291.329819, + 291.843051, + 292.356908, + 292.871296, + 293.386126, + 293.901316, + 294.416794, + 294.932496, + 295.448366, + 295.964361, + 296.480446, + 296.996599, + 297.512806, + 298.029064, + 298.545379, + 299.061767, + 299.578252, + 300.094867, + 300.611654, + 301.128663, + 301.645951, + 302.163586, + 302.681641, + 303.200198, + 303.719342, + 304.239168, + 304.759772, + 305.281252, + 305.803713, + 306.327256, + 306.851986, + 307.378002, + 307.905403, + 308.434278, + 308.964715, + 309.496789, + 310.030569, + 310.566115, + 311.103473, + 311.642682, + 312.183768, + 312.726745, + 313.271615, + 313.818369, + 314.366988, + 314.917441, + 315.469688, + 316.023679, + 316.579356, + 317.136653, + 317.695497, + 318.255808, + 318.817501, + 319.380488, + 319.944675, + 320.509967, + 321.07627, + 321.643486, + 322.211517, + 322.780269, + 323.349649, + 323.919567, + 324.489939, + 325.060687, + 325.631739, + 326.203032, + 326.774513, + 327.34614, + 327.917879, + 328.489711, + 329.061626, + 329.633627, + 330.205727, + 330.777951, + 331.350335, + 331.922924, + 332.495774, + 333.068947, + 333.642515, + 334.216556, + 334.791153, + 335.366396, + 335.942376, + 336.519189, + 337.096931, + 337.675701, + 338.255595, + 338.836711, + 339.419143, + 340.002981, + 340.588314, + 341.175223, + 341.763785, + 342.354074, + 342.946155, + 343.540086, + 344.135921, + 344.733704, + 345.333471, + 345.935252, + 346.539067, + 347.144929, + 347.752841, + 348.362797, + 348.974784, + 349.588778, + 350.204748, + 350.822653, + 351.442447, + 352.064075, + 352.687475, + 353.312582, + 353.939324, + 354.567627, + 355.197413, + 355.828605, + 356.461122, + 357.094889, + 357.729829, + 358.365871, + 359.002947, + 359.640993, + 360.279955, + 360.919781, + 361.560429, + 362.201863, + 362.844056, + 363.486988, + 364.130647, + 364.775028, + 365.420135, + 366.065978, + 366.712574, + 367.359946, + 368.008125, + 368.657144, + 369.307045, + 369.957872, + 370.609674, + 371.262503, + 371.916415, + 372.571468, + 373.227721, + 373.885235, + 374.544072, + 375.204294, + 375.865961, + 376.529136, + 377.193877, + 377.860243, + 378.528287, + 379.198063, + 379.869618, + 380.542996, + 381.218237, + 381.895374, + 382.574436, + 383.255443, + 383.938412, + 384.623351, + 385.310264, + 385.999147, + 386.68999, + 387.382778, + 388.07749, + 388.774101, + 389.472582, + 390.172899, + 390.875017, + 391.578897, + 392.284499, + 392.991781, + 393.700699, + 394.411212, + 395.123277, + 395.83685, + 396.551892, + 397.268361, + 397.986219, + 398.705428, + 399.425952, + 400.147757, + 400.870808, + 401.595074, + 402.320527, + 403.047138, + 403.774883, + 404.503739, + 405.233688, + 405.964714, + 406.696805, + 407.429953, + 408.164155, + 408.899411, + 409.635728, + 410.373118, + 411.111595, + 411.851182, + 412.591902, + 413.333786, + 414.076866, + 414.821177, + 415.566757, + 416.313644, + 417.061878, + 417.811496, + 418.562535, + 419.315032, + 420.069018, + 420.824523, + 421.581573, + 422.34019, + 423.100392, + 423.862192, + 424.6256, + 425.390621, + 426.157256, + 426.925502, + 427.695353, + 428.466798, + 429.239826, + 430.014419, + 430.790561, + 431.568229, + 432.347402, + 433.128054, + 433.910159, + 434.693688, + 435.47861, + 436.264893, + 437.052504, + 437.841408, + 438.631567, + 439.422944, + 440.2155, + 441.009196, + 441.803991, + 442.599848, + 443.396725, + 444.194584, + 444.993389, + 445.793102, + 446.593692, + 447.395126, + 448.197376, + 449.000417, + 449.804226, + 450.608786, + 451.414081, + 452.2201, + 453.026833, + 453.834276, + 454.642426, + 455.451282, + 456.260846, + 457.07112, + 457.882108, + 458.693812, + 459.506234, + 460.319375, + 461.133232, + 461.947801, + 462.763075, + 463.579043, + 464.39569, + 465.213, + 466.030954, + 466.849531, + 467.66871, + 468.488471, + 469.308798, + 470.129675, + 470.951099, + 471.773071, + 472.595603, + 473.418723, + 474.242472, + 475.06691, + 475.892112, + 476.718181, + 477.545234, + 478.373417, + 479.202895, + 480.033857, + 480.866502, + 481.701064, + 482.53777, + 483.376871, + 484.218624, + 485.063284, + 485.911109, + 486.762354, + 487.617261, + 488.476066, + 489.338986, + 490.206216, + 491.077929, + 491.954273, + 492.835365, + 493.721286, + 494.612077, + 495.507754, + 496.408286, + 497.313618, + 498.223646, + 499.138213, + 500.057221, + 500.980428, + 501.907678, + 502.838726, + 503.773339, + 504.711257, + 505.652206, + 506.595898, + 507.542032, + 508.490299, + 509.440378, + 510.391944, + 511.344667, + 512.298218, + 513.252274, + 514.206519, + 515.160654, + 516.114397, + 517.067486, + 518.01969, + 518.970813, + 519.920692, + 520.869207, + 521.816278, + 522.761863, + 523.705966, + 524.648628, + 525.589932, + 526.529999, + 527.468986, + 528.407084, + 529.344516, + 530.281535, + 531.218424, + 532.155496, + 533.09308, + 534.031535, + 534.97123, + 535.912548, + 536.855882, + 537.80162, + 538.75015, + 539.701846, + 540.65707, + 541.616163, + 542.579446, + 543.54721, + 544.519723, + 545.497219, + 546.479906, + 547.467957, + 548.461511, + 549.460676, + 550.465523, + 551.476089, + 552.492377, + 553.514354, + 554.541951, + 555.575068, + 556.613569, + 557.657284, + 558.70601, + 559.759517, + 560.817541, + 561.879796, + 562.945966, + 564.01572, + 565.088706, + 566.164558, + 567.242903, + 568.323362, + 569.405552, + 570.489096, + 571.573624, + 572.658777, + 573.744214, + 574.829613, + 575.914677, + 576.999137, + 578.082754, + 579.165323, + 580.246675, + 581.326678, + 582.405239, + 583.482304, + 584.557859, + 585.631925, + 586.704562, + 587.775867, + 588.845969, + 589.915029, + 590.983245, + 592.050833, + 593.118042, + 594.185137, + 595.252404, + 596.320143, + 597.388665, + 598.458287, + 599.529333, + 600.602122, + 601.676973, + 602.754196, + 603.834092, + 604.916946, + 606.003029, + 607.092589, + 608.18585, + 609.283012, + 610.384245, + 611.489687, + 612.599445, + 613.713588, + 614.832152, + 615.955134, + 617.082505, + 618.214193, + 619.350106, + 620.490115, + 621.634069, + 622.781792, + 623.933084, + 625.087729, + 626.245493, + 627.40613, + 628.569383, + 629.73499, + 630.902682, + 632.072191, + 633.24325, + 634.415597, + 635.588974, + 636.763137, + 637.937853, + 639.11291, + 640.288109, + 641.463277, + 642.638261, + 643.812933, + 644.987193, + 646.160969, + 647.334213, + 648.506914, + 649.679085, + 650.850772, + 652.022051, + 653.193027, + 654.363836, + 655.53464, + 656.705626, + 657.877008, + 659.049018, + 660.221909, + 661.395946, + 662.571408, + 663.748579, + 664.927748, + 666.109203, + 667.293225, + 668.480091, + 669.670063, + 670.863391, + 672.060306, + 673.261019, + 674.465721, + 675.674577, + 676.887727, + 678.105283, + 679.327328, + 680.553917, + 681.785074, + 683.020795, + 684.261046, + 685.505765, + 686.754862, + 688.008219, + 689.265697, + 690.52713, + 691.792332, + 693.061098, + 694.333209, + 695.608429, + 696.886518, + 698.167221, + 699.450286, + 700.735454, + 702.022469, + 703.311081, + 704.601044, + 705.892125, + 707.184104, + 708.476776, + 709.769955, + 711.063475, + 712.357194, + 713.650992, + 714.944777, + 716.238482, + 717.532064, + 718.82551, + 720.118831, + 721.412063, + 722.705265, + 723.998522, + 725.291937, + 726.585637, + 727.879765, + 729.174483, + 730.46997, + 731.766418, + 733.064031, + 734.363024, + 735.663622, + 736.966052, + 738.270548, + 739.577345, + 740.886676, + 742.198772, + 743.513859, + 744.832153, + 746.153863, + 747.479183, + 748.808293, + 750.141354, + 751.478508, + 752.819875, + 754.16555, + 755.515603, + 756.870076, + 758.228983, + 759.59231, + 760.960011, + 762.332012, + 763.708213, + 765.088483, + 766.472669, + 767.860596, + 769.252065, + 770.646864, + 772.044765, + 773.445529, + 774.84891, + 776.254657, + 777.662517, + 779.072239, + 780.483572, + 781.896274, + 783.310107, + 784.724843, + 786.140263, + 787.556159, + 788.972335, + 790.388607, + 791.804805, + 793.220769, + 794.636353, + 796.051423, + 797.465856, + 798.879541, + 800.29238, + 801.704285, + 803.115178, + 804.524992, + 805.933661, + 807.341128, + 808.747331, + 810.15221, + 811.555695, + 812.957709, + 814.358167, + 815.756969, + 817.154005, + 818.549152, + 819.942277, + 821.333242, + 822.721904, + 824.108126, + 825.491779, + 826.872759, + 828.250993, + 829.626454, + 830.999164, + 832.369224, + 833.736804, + 835.10217, + 836.465724, + 837.827908, + 839.189353, + 840.550743, + 841.912903, + 843.276754, + 844.643313, + 846.013674, + 847.388996, + 848.770481, + 850.159349, + 851.556816, + 852.964061, + 854.382197, + 855.812248, + 857.255106, + 858.711533, + 860.1821, + 861.667205, + 863.167006, + 864.681583, + 866.210673, + 867.753957, + 869.310855, + 870.880658, + 872.462501, + 874.055392, + 875.658236, + 877.269858, + 878.889022, + 880.514457, + 882.144875, + 883.778991, + 885.415546, + 887.053314, + 888.691114, + 890.327833, + 891.962438, + 893.593951, + 895.221483, + 896.844217, + 898.461406, + 900.072374, + 901.676518, + 903.273303, + 904.862267, + 906.44302, + 908.01525, + 909.578736, + 911.133338, + 912.679018, + 914.215845, + 915.744004, + 917.263801, + 918.775664, + 920.28015, + 921.777936, + 923.26982, + 924.756718, + 926.239662, + 927.719788, + 929.198307, + 930.676502, + 932.155697, + 933.63723, + 935.12244, + 936.61263, + 938.10906, + 939.612908, + 941.125266, + 942.64711, + 944.179301, + 945.722563, + 947.277485, + 948.844514, + 950.423962, + 952.016003, + 953.620684, + 955.237929, + 956.867556, + 958.509275, + 960.162711, + 961.827405, + 963.502821, + 965.188363, + 966.883378, + 968.587159, + 970.298954, + 972.01797, + 973.743375, + 975.474302, + 977.209854, + 978.949104, + 980.691107, + 982.434897, + 984.179505, + 985.923955, + 987.667286, + 989.40856, + 991.146865, + 992.881342, + 994.611185, + 996.335662, + 998.054125, + 999.766019, + 1001.470903, + 1003.168446, + 1004.858445, + 1006.540827, + 1008.215647, + 1009.883091, + 1011.543471, + 1013.197219, + 1014.844877, + 1016.487088, + 1018.124583, + 1019.758165, + 1021.388697, + 1023.017084, + 1024.644258, + 1026.271162, + 1027.898738, + 1029.527909, + 1031.159573, + 1032.794589, + 1034.43377, + 1036.077877, + 1037.72761, + 1039.38361, + 1041.046451, + 1042.716641, + 1044.394621, + 1046.080763, + 1047.775368, + 1049.478668, + 1051.190825, + 1052.911925, + 1054.641982, + 1056.380933, + 1058.128635, + 1059.88487, + 1061.649338, + 1063.421659, + 1065.201378, + 1066.987962, + 1068.780809, + 1070.579249, + 1072.382555, + 1074.189946, + 1076.000601, + 1077.813669, + 1079.62828, + 1081.443558, + 1083.258634, + 1085.072659, + 1086.884817, + 1088.694337, + 1090.500508, + 1092.302687, + 1094.100311, + 1095.892902, + 1097.680074, + 1099.461538, + 1101.237107, + 1103.006688, + 1104.770291, + 1106.528015, + 1108.280049, + 1110.026663, + 1111.768203, + 1113.50508, + 1115.237764, + 1116.966778, + 1118.692687, + 1120.416092, + 1122.137623, + 1123.857938, + 1125.57771, + 1127.297627, + 1129.018387, + 1130.740693, + 1132.465245, + 1134.19274, + 1135.923864, + 1137.659285, + 1139.399654, + 1141.145591, + 1142.897681, + 1144.656469, + 1146.42245, + 1148.196063, + 1149.97769, + 1151.767637, + 1153.566141, + 1155.373354, + 1157.189348, + 1159.014124, + 1160.847681, + 1162.689743, + 1164.540144, + 1166.398473, + 1168.264314, + 1170.137145, + 1172.016386, + 1173.901398, + 1175.791495, + 1177.685963, + 1179.584065, + 1181.485058, + 1183.388201, + 1185.292768, + 1187.198057, + 1189.103396, + 1191.008152, + 1192.911737, + 1194.813607, + 1196.71327, + 1198.610282, + 1200.504249, + 1202.394825, + 1204.281709, + 1206.164644, + 1208.043414, + 1209.917844, + 1211.787797, + 1213.65317, + 1215.513851, + 1217.369872, + 1219.2212, + 1221.067937, + 1222.910234, + 1224.74822, + 1226.582157, + 1228.412287, + 1230.238926, + 1232.062416, + 1233.883136, + 1235.701488, + 1237.517888, + 1239.332762, + 1241.146526, + 1242.959582, + 1244.772297, + 1246.584993, + 1248.39795, + 1250.211426, + 1252.025453, + 1253.840115, + 1255.655253, + 1257.470651, + 1259.285947, + 1261.100672, + 1262.914255, + 1264.726085, + 1266.535362, + 1268.341367, + 1270.143259, + 1271.940268, + 1273.731663, + 1275.51682, + 1277.295255, + 1279.066672, + 1280.831002, + 1282.588432, + 1284.339442, + 1286.084804, + 1287.825606, + 1289.563235, + 1291.299359, + 1293.035903, + 1294.774994, + 1296.518902, + 1298.270056, + 1300.030862, + 1301.803753, + 1303.59104, + 1305.394917, + 1307.217321, + 1309.059957, + 1310.924222, + 1312.811161, + 1314.72145, + 1316.655407, + 1318.612965, + 1320.593789, + 1322.596977, + 1324.621526, + 1326.665967, + 1328.728665, + 1330.807772, + 1332.901269, + 1335.007064, + 1337.123, + 1339.246913, + 1341.376678, + 1343.510229, + 1345.645585, + 1347.780869, + 1349.91432, + 1352.044289, + 1354.169242, + 1356.28775, + 1358.398482, + 1360.500159, + 1362.591448, + 1364.671382, + 1366.738743, + 1368.792636, + 1370.832125, + 1372.856404, + 1374.864768, + 1376.856647, + 1378.831632, + 1380.789475, + 1382.730137, + 1384.653773, + 1386.560773, + 1388.451747, + 1390.327557, + 1392.189293, + 1394.038266, + 1395.876006, + 1397.704225, + 1399.524801, + 1401.339745, + 1403.151164, + 1404.961237, + 1406.772193, + 1408.586169, + 1410.405326, + 1412.231666, + 1414.067096, + 1415.913356, + 1417.772016, + 1419.644451, + 1421.531831, + 1423.435121, + 1425.355074, + 1427.292239, + 1429.246965, + 1431.219415, + 1433.209571, + 1435.217249, + 1437.242117, + 1439.2837, + 1441.341393, + 1443.414476, + 1445.502115, + 1447.603373, + 1449.717215, + 1451.842513, + 1453.978049, + 1456.122523, + 1458.274544, + 1460.432666, + 1462.595361, + 1464.761055, + 1466.92813, + 1469.094931, + 1471.2598, + 1473.421082, + 1475.577153, + 1477.726445, + 1479.86747, + 1481.998844, + 1484.119312, + 1486.227764, + 1488.323265, + 1490.405061, + 1492.4726, + 1494.525535, + 1496.563732, + 1498.587267, + 1500.59642, + 1502.591667, + 1504.573671, + 1506.543271, + 1508.501412, + 1510.44916, + 1512.387443, + 1514.317722, + 1516.241031, + 1518.158818, + 1520.072374, + 1521.983067, + 1523.89224, + 1525.801218, + 1527.711292, + 1529.623701, + 1531.53963, + 1533.460188, + 1535.386402, + 1537.319225, + 1539.259505, + 1541.208001, + 1543.16537, + 1545.132161, + 1547.108815, + 1549.095657, + 1551.092896, + 1553.100624, + 1555.118806, + 1557.147286, + 1559.185778, + 1561.233874, + 1563.291042, + 1565.35663, + 1567.429871, + 1569.509894, + 1571.595728, + 1573.686313, + 1575.78051, + 1577.877125, + 1579.974909, + 1582.072592, + 1584.168888, + 1586.262524, + 1588.352252, + 1590.436869, + 1592.515236, + 1594.586292, + 1596.649068, + 1598.702702, + 1600.746445, + 1602.779671, + 1604.801882, + 1606.812709, + 1608.81191, + 1610.799375, + 1612.775112, + 1614.739247, + 1616.692014, + 1618.633746, + 1620.564871, + 1622.485898, + 1624.397407, + 1626.30005, + 1628.194537, + 1630.081638, + 1631.962165, + 1633.836977, + 1635.706966, + 1637.573052, + 1639.436178, + 1641.297299, + 1643.157378, + 1645.017372, + 1646.878227, + 1648.740817, + 1650.605819, + 1652.474252, + 1654.346655, + 1656.223852, + 1658.106435, + 1659.994977, + 1661.889954, + 1663.791748, + 1665.700634, + 1667.616772, + 1669.540198, + 1671.470788, + 1673.40819, + 1675.352155, + 1677.302044, + 1679.257313, + 1681.217205, + 1683.180902, + 1685.147494, + 1687.11593, + 1689.08473, + 1691.053171, + 1693.019647, + 1694.983218, + 1696.942629, + 1698.896751, + 1700.844448, + 1702.7846, + 1704.716088, + 1706.637785, + 1708.548543, + 1710.447178, + 1712.332462, + 1714.20311, + 1716.057796, + 1717.895141, + 1719.713749, + 1721.512216, + 1723.289175, + 1725.043336, + 1726.773539, + 1728.478824, + 1730.158493, + 1731.812186, + 1733.439947, + 1735.042294, + 1736.620275, + 1738.175509, + 1739.710209, + 1741.22719, + 1742.729845, + 1744.222097, + 1745.708338, + 1747.193332, + 1748.682112, + 1750.179865, + 1751.691817, + 1753.223033, + 1754.778355, + 1756.362216, + 1757.978586, + 1759.630796, + 1761.321562, + 1763.052833, + 1764.825803, + 1766.640901, + 1768.497798, + 1770.395433, + 1772.332115, + 1774.305555, + 1776.313001, + 1778.351305, + 1780.417034, + 1782.506584, + 1784.616253, + 1786.742329, + 1788.881167, + 1791.029228, + 1793.183124, + 1795.339638, + 1797.495728, + 1799.648518, + 1801.795282, + 1803.93342, + 1806.060428, + 1808.173876, + 1810.271394, + 1812.350628, + 1814.409274, + 1816.445064, + 1818.455794, + 1820.439366, + 1822.393823, + 1824.317393, + 1826.208562, + 1828.066127, + 1829.889251, + 1831.677508, + 1833.430948, + 1835.150106, + 1836.836043, + 1838.490339, + 1840.115094, + 1841.712896, + 1843.286784, + 1844.840194, + 1846.376911, + 1847.900918, + 1849.416421, + 1850.927653, + 1852.438855, + 1853.954164, + 1855.47754, + 1857.012693, + 1858.56303, + 1860.131607, + 1861.721095, + 1863.333764, + 1864.971478, + 1866.635697, + 1868.327496, + 1870.04759, + 1871.796348, + 1873.573842, + 1875.379859, + 1877.213946, + 1879.075427, + 1880.963424, + 1882.876905, + 1884.814648, + 1886.775302, + 1888.757349, + 1890.759127, + 1892.778754, + 1894.81391, + 1896.862756, + 1898.922609, + 1900.991198, + 1903.065867, + 1905.143932, + 1907.22262, + 1909.299089, + 1911.370471, + 1913.433901, + 1915.486557, + 1917.525702, + 1919.548735, + 1921.553229, + 1923.536984, + 1925.498067, + 1927.434848, + 1929.346036, + 1931.230703, + 1933.088301, + 1934.918667, + 1936.722028, + 1938.498984, + 1940.250493, + 1941.977844, + 1943.682621, + 1945.366667, + 1947.032039, + 1948.680963, + 1950.315792, + 1951.938962, + 1953.552944, + 1955.160213, + 1956.763213, + 1958.364323, + 1959.965841, + 1961.569955, + 1963.178733, + 1964.794097, + 1966.417845, + 1968.051613, + 1969.6969, + 1971.355053, + 1973.027268, + 1974.71459, + 1976.417906, + 1978.137939, + 1979.875245, + 1981.630204, + 1983.403007, + 1985.193651, + 1987.001931, + 1988.827428, + 1990.669507, + 1992.527312, + 1994.399758, + 1996.285553, + 1998.183187, + 2000.090964, + 2002.007012, + 2003.929311, + 2005.855715, + 2007.78399, + 2009.711839, + 2011.636942, + 2013.556987, + 2015.469688, + 2017.372888, + 2019.264495, + 2021.142606, + 2023.005475, + 2024.851552, + 2026.679509, + 2028.488239, + 2030.276875, + 2032.044814, + 2033.791637, + 2035.517214, + 2037.22151, + 2038.904875, + 2040.567676, + 2042.21059, + 2043.834392, + 2045.440023, + 2047.028552, + 2048.601159, + 2050.159125, + 2051.703815, + 2053.236668, + 2054.759181, + 2056.2729, + 2057.779405, + 2059.2803, + 2060.777201, + 2062.271721, + 2063.765459, + 2065.259983, + 2066.756815, + 2068.257412, + 2069.763151, + 2071.275303, + 2072.795016, + 2074.323293, + 2075.860965, + 2077.408672, + 2078.966839, + 2080.535651, + 2082.115032, + 2083.704621, + 2085.303758, + 2086.911436, + 2088.526219, + 2090.146602, + 2091.770488, + 2093.39564, + 2095.019229, + 2096.638809, + 2098.251104, + 2099.853112, + 2101.441938, + 2103.014501, + 2104.568203, + 2106.100612, + 2107.609755, + 2109.094135, + 2110.552826, + 2111.98554, + 2113.392658, + 2114.775267, + 2116.135154, + 2117.474775, + 2118.797201, + 2120.106036, + 2121.40531, + 2122.699358, + 2123.992737, + 2125.28997, + 2126.595527, + 2127.913598, + 2129.248049, + 2130.602223, + 2131.978972, + 2133.380476, + 2134.808419, + 2136.263793, + 2137.746744, + 2139.257054, + 2140.793689, + 2142.355246, + 2143.939858, + 2145.545382, + 2147.169441, + 2148.809579, + 2150.463318, + 2152.128248, + 2153.802104, + 2155.482792, + 2157.168426, + 2158.857327, + 2160.548015, + 2162.239171, + 2163.929605, + 2165.618196, + 2167.303852, + 2168.985446, + 2170.661793, + 2172.3316, + 2173.993452, + 2175.645821, + 2177.287056, + 2178.915403, + 2180.529065, + 2182.126228, + 2183.705136, + 2185.264156, + 2186.801767, + 2188.31634, + 2189.807419, + 2191.274048, + 2192.716439, + 2194.134958, + 2195.530595, + 2196.904816, + 2198.259564, + 2199.597207, + 2200.92047, + 2202.232369, + 2203.536149, + 2204.835074, + 2206.132496, + 2207.431612, + 2208.73547, + 2210.046868, + 2211.368317, + 2212.701924, + 2214.049482, + 2215.412365, + 2216.791534, + 2218.187675, + 2219.601073, + 2221.03179, + 2222.479639, + 2223.944264, + 2225.42518, + 2226.921825, + 2228.433592, + 2229.959864, + 2231.500021, + 2233.05346, + 2234.619568, + 2236.197766, + 2237.787416, + 2239.387862, + 2240.998357, + 2242.618052, + 2244.245966, + 2245.880946, + 2247.521677, + 2249.166649, + 2250.814184, + 2252.462426, + 2254.109386, + 2255.752962, + 2257.390995, + 2259.021303, + 2260.641753, + 2262.250302, + 2263.84506, + 2265.424343, + 2266.98672, + 2268.531046, + 2270.056497, + 2271.562586, + 2273.049164, + 2274.516423, + 2275.96487, + 2277.395276, + 2278.808515, + 2280.20602, + 2281.589035, + 2282.959228, + 2284.318219, + 2285.667723, + 2287.009454, + 2288.345096, + 2289.676277, + 2291.004542, + 2292.331339, + 2293.65801, + 2294.985785, + 2296.315792, + 2297.649061, + 2298.986534, + 2300.329084, + 2301.677523, + 2303.032612, + 2304.395069, + 2305.765581, + 2307.144792, + 2308.533313, + 2309.931699, + 2311.340449, + 2312.759982, + 2314.19062, + 2315.632568, + 2317.085892, + 2318.550494, + 2320.026101, + 2321.512245, + 2323.008255, + 2324.513246, + 2326.026141, + 2327.545667, + 2329.070382, + 2330.598704, + 2332.128934, + 2333.659298, + 2335.187986, + 2336.713184, + 2338.233123, + 2339.746106, + 2341.250547, + 2342.745, + 2344.228177, + 2345.698966, + 2347.156442, + 2348.599868, + 2350.028694, + 2351.442549, + 2352.841221, + 2354.224651, + 2355.592903, + 2356.946155, + 2358.284675, + 2359.608792, + 2360.918892, + 2362.21531, + 2363.498013, + 2364.767853, + 2366.024779, + 2367.269516, + 2368.502484, + 2369.724287, + 2370.935565, + 2372.137033, + 2373.329461, + 2374.51368, + 2375.690577, + 2376.86099, + 2378.025805, + 2379.185804, + 2380.341707, + 2381.494123, + 2382.643407, + 2383.789777, + 2384.933136, + 2386.073144, + 2387.209168, + 2388.340296, + 2389.465358, + 2390.582965, + 2391.691579, + 2392.789601, + 2393.875476, + 2394.947834, + 2396.005511, + 2397.047851, + 2398.074629, + 2399.086291, + 2400.083949, + 2401.069448, + 2402.045363, + 2403.014989, + 2403.982175, + 2404.951341, + 2405.927229, + 2406.914824, + 2407.919097, + 2408.944891, + 2409.996707, + 2411.078507, + 2412.193631, + 2413.34458, + 2414.53299, + 2415.759572, + 2417.024037, + 2418.3252, + 2419.660974, + 2421.028493, + 2422.424245, + 2423.844184, + 2425.283919, + 2426.738871, + 2428.204421, + 2429.676072, + 2431.149578, + 2432.621036, + 2434.086964, + 2435.544392, + 2436.990776, + 2438.423992, + 2439.842553, + 2441.24512, + 2442.630845, + 2443.999016, + 2445.349095, + 2446.680599, + 2447.993048, + 2449.285898, + 2450.558489, + 2451.810052, + 2453.039693, + 2454.246429, + 2455.429235, + 2456.587112, + 2457.71917, + 2458.824709, + 2459.903317, + 2460.954948, + 2461.979997, + 2462.979362, + 2463.954481, + 2464.907351, + 2465.840515, + 2466.757036, + 2467.66044, + 2468.55465, + 2469.443838, + 2470.332389, + 2471.22471, + 2472.125158, + 2473.0379, + 2473.966805, + 2474.915353, + 2475.886551, + 2476.882878, + 2477.906245, + 2478.957983, + 2480.038852, + 2481.149065, + 2482.288341, + 2483.455956, + 2484.650819, + 2485.871542, + 2487.116514, + 2488.383975, + 2489.672082, + 2490.978957, + 2492.302736, + 2493.641592, + 2494.993752, + 2496.357502, + 2497.731171, + 2499.113114, + 2500.501695, + 2501.895244, + 2503.29204, + 2504.69027, + 2506.088029, + 2507.483284, + 2508.873898, + 2510.257613, + 2511.632097, + 2512.994959, + 2514.343809, + 2515.676301, + 2516.990202, + 2518.283452, + 2519.554228, + 2520.801002, + 2522.022598, + 2523.218228, + 2524.38753, + 2525.530579, + 2526.647893, + 2527.740418, + 2528.809436, + 2529.856293, + 2530.883309, + 2531.892352, + 2532.886058, + 2533.866932, + 2534.837653, + 2535.800889, + 2536.759265, + 2537.715296, + 2538.671344, + 2539.629583, + 2540.591969, + 2541.560227, + 2542.53585, + 2543.520102, + 2544.514034, + 2545.518506, + 2546.534211, + 2547.561701, + 2548.601411, + 2549.653676, + 2550.718766, + 2551.796879, + 2552.888165, + 2553.992717, + 2555.110561, + 2556.24168, + 2557.385902, + 2558.542995, + 2559.712541, + 2560.893973, + 2562.086532, + 2563.289259, + 2564.500985, + 2565.72033, + 2566.945713, + 2568.175364, + 2569.407347, + 2570.639607, + 2571.869995, + 2573.096327, + 2574.316425, + 2575.528172, + 2576.729556, + 2577.918724, + 2579.09401, + 2580.253982, + 2581.397455, + 2582.523521, + 2583.631554, + 2584.721172, + 2585.792286, + 2586.845025, + 2587.879745, + 2588.896989, + 2589.897457, + 2590.881969, + 2591.851437, + 2592.806834, + 2593.749161, + 2594.679426, + 2595.598622, + 2596.507713, + 2597.407617, + 2598.299199, + 2599.18326, + 2600.060527, + 2600.931647, + 2601.797165, + 2602.65748, + 2603.512946, + 2604.363673, + 2605.209672, + 2606.050723, + 2606.886398, + 2607.716004, + 2608.538679, + 2609.353341, + 2610.158758, + 2610.953577, + 2611.736357, + 2612.505723, + 2613.260384, + 2613.999397, + 2614.722155, + 2615.428623, + 2616.11937, + 2616.795683, + 2617.4596, + 2618.113921, + 2618.76217, + 2619.408523, + 2620.057692, + 2620.714797, + 2621.385134, + 2622.074039, + 2622.786639, + 2623.527705, + 2624.301389, + 2625.111153, + 2625.95953, + 2626.848119, + 2627.777445, + 2628.747006, + 2629.755249, + 2630.799691, + 2631.876987, + 2632.983111, + 2634.113493, + 2635.263212, + 2636.427183, + 2637.600328, + 2638.777747, + 2639.954859, + 2641.127516, + 2642.292089, + 2643.445509, + 2644.585287, + 2645.709487, + 2646.816684, + 2647.905913, + 2648.976522, + 2650.028173, + 2651.060626, + 2652.073744, + 2653.067347, + 2654.041174, + 2654.994832, + 2655.927776, + 2656.839327, + 2657.728718, + 2658.595036, + 2659.437472, + 2660.255232, + 2661.047748, + 2661.814728, + 2662.556255, + 2663.272873, + 2663.965648, + 2664.636204, + 2665.286755, + 2665.92007, + 2666.539457, + 2667.148683, + 2667.751854, + 2668.353176, + 2668.957383, + 2669.568819, + 2670.192051, + 2670.83126, + 2671.49034, + 2672.172727, + 2672.881335, + 2673.618485, + 2674.385873, + 2675.184554, + 2676.014956, + 2676.876908, + 2677.769702, + 2678.692156, + 2679.642694, + 2680.619434, + 2681.620272, + 2682.642964, + 2683.685198, + 2684.74466, + 2685.819084, + 2686.906286, + 2688.004183, + 2689.110799, + 2690.224254, + 2691.342746, + 2692.464521, + 2693.587842, + 2694.710961, + 2695.832078, + 2696.949329, + 2698.060762, + 2699.164346, + 2700.257956, + 2701.33942, + 2702.406533, + 2703.457115, + 2704.489051, + 2705.500364, + 2706.489266, + 2707.454229, + 2708.394047, + 2709.307872, + 2710.195278, + 2711.056271, + 2711.891314, + 2712.701323, + 2713.487654, + 2714.252066, + 2714.996678, + 2715.723915, + 2716.436436, + 2717.137068, + 2717.828728, + 2718.514349, + 2719.196812, + 2719.878881, + 2720.563145, + 2721.251983, + 2721.947526, + 2722.651642, + 2723.365934, + 2724.091721, + 2724.830087, + 2725.581867, + 2726.347695, + 2727.128026, + 2727.923166, + 2728.733303, + 2729.558529, + 2730.398856, + 2731.25423, + 2732.12453, + 2733.009566, + 2733.909071, + 2734.822684, + 2735.749931, + 2736.690209, + 2737.642762, + 2738.606666, + 2739.580815, + 2740.563909, + 2741.554453, + 2742.550757, + 2743.55096, + 2744.553033, + 2745.554815, + 2746.55406, + 2747.548461, + 2748.535709, + 2749.513539, + 2750.479774, + 2751.432379, + 2752.369495, + 2753.289482, + 2754.190948, + 2755.072771, + 2755.934094, + 2756.774389, + 2757.593367, + 2758.391047, + 2759.167679, + 2759.923744, + 2760.659925, + 2761.37707, + 2762.076161, + 2762.758281, + 2763.424583, + 2764.076253, + 2764.714471, + 2765.34036, + 2765.955045, + 2766.559476, + 2767.154531, + 2767.740891, + 2768.319054, + 2768.889292, + 2769.45164, + 2770.005879, + 2770.551543, + 2771.087922, + 2771.6141, + 2772.129002, + 2772.631458, + 2773.120274, + 2773.594428, + 2774.053053, + 2774.495666, + 2774.922244, + 2775.333369, + 2775.730311, + 2776.115122, + 2776.490653, + 2776.860555, + 2777.229222, + 2777.601695, + 2777.983521, + 2778.380596, + 2778.798926, + 2779.244452, + 2779.722817, + 2780.239113, + 2780.797742, + 2781.402166, + 2782.054823, + 2782.757007, + 2783.508808, + 2784.309129, + 2785.155729, + 2786.045308, + 2786.97365, + 2787.935793, + 2788.926197, + 2789.938974, + 2790.968069, + 2792.007467, + 2793.051367, + 2794.094334, + 2795.131417, + 2796.158231, + 2797.171015, + 2798.166643, + 2799.142545, + 2800.096745, + 2801.027716, + 2801.934339, + 2802.815756, + 2803.671319, + 2804.50045, + 2805.302588, + 2806.077116, + 2806.82333, + 2807.540425, + 2808.227517, + 2808.883683, + 2809.508035, + 2810.099797, + 2810.658406, + 2811.183613, + 2811.675567, + 2812.134931, + 2812.562929, + 2812.961415, + 2813.332893, + 2813.680517, + 2814.008058, + 2814.319841, + 2814.620662, + 2814.915675, + 2815.210261, + 2815.50989, + 2815.819972, + 2816.145716, + 2816.491994, + 2816.863217, + 2817.263235, + 2817.695259, + 2818.161808, + 2818.664682, + 2819.204967, + 2819.783056, + 2820.398706, + 2821.0511, + 2821.738932, + 2822.460497, + 2823.213784, + 2823.996566, + 2824.806487, + 2825.64113, + 2826.498081, + 2827.374967, + 2828.269486, + 2829.179412, + 2830.102591, + 2831.036917, + 2831.980308, + 2832.930671, + 2833.885867, + 2834.843672, + 2835.801755, + 2836.757651, + 2837.708759, + 2838.652352, + 2839.585589, + 2840.505568, + 2841.409364, + 2842.2941, + 2843.157016, + 2843.995549, + 2844.807405, + 2845.590639, + 2846.343724, + 2847.065602, + 2847.75573, + 2848.414109, + 2849.041289, + 2849.638359, + 2850.206921, + 2850.749041, + 2851.267195, + 2851.764191, + 2852.243095, + 2852.707144, + 2853.15966, + 2853.603966, + 2854.043311, + 2854.480811, + 2854.919379, + 2855.3617, + 2855.810187, + 2856.266979, + 2856.733925, + 2857.212602, + 2857.704328, + 2858.210186, + 2858.731056, + 2859.267645, + 2859.820513, + 2860.390094, + 2860.976719, + 2861.580621, + 2862.201941, + 2862.840724, + 2863.496903, + 2864.170292, + 2864.860554, + 2865.567191, + 2866.289515, + 2867.02663, + 2867.777416, + 2868.540522, + 2869.314362, + 2870.097118, + 2870.886763, + 2871.681078, + 2872.477686, + 2873.274092, + 2874.067716, + 2874.855991, + 2875.636335, + 2876.406293, + 2877.163523, + 2877.905877, + 2878.63143, + 2879.338519, + 2880.025767, + 2880.692098, + 2881.336745, + 2881.959248, + 2882.55944, + 2883.137434, + 2883.693593, + 2884.228497, + 2884.7429, + 2885.237732, + 2885.713999, + 2886.172803, + 2886.615227, + 2887.042355, + 2887.455175, + 2887.854565, + 2888.241243, + 2888.615734, + 2888.978338, + 2889.329121, + 2889.667891, + 2889.994219, + 2890.307444, + 2890.606725, + 2890.891087, + 2891.159509, + 2891.411041, + 2891.644897, + 2891.860611, + 2892.05815, + 2892.238026, + 2892.401428, + 2892.550296, + 2892.687402, + 2892.81635, + 2892.941568, + 2893.068228, + 2893.202125, + 2893.349524, + 2893.516967, + 2893.71103, + 2893.938118, + 2894.204217, + 2894.514648, + 2894.873901, + 2895.285412, + 2895.751471, + 2896.273092, + 2896.850006, + 2897.48065, + 2898.162258, + 2898.890953, + 2899.661915, + 2900.469565, + 2901.307759, + 2902.170035, + 2903.049788, + 2903.940517, + 2904.835976, + 2905.730344, + 2906.618341, + 2907.495308, + 2908.357253, + 2909.200863, + 2910.023465, + 2910.82295, + 2911.597725, + 2912.346565, + 2913.068538, + 2913.762881, + 2914.428908, + 2915.065933, + 2915.673217, + 2916.249924, + 2916.795145, + 2917.307898, + 2917.787197, + 2918.23213, + 2918.641935, + 2919.016119, + 2919.354544, + 2919.657509, + 2919.925962, + 2920.161387, + 2920.366031, + 2920.542807, + 2920.695332, + 2920.827872, + 2920.94527, + 2921.052849, + 2921.156286, + 2921.261468, + 2921.374342, + 2921.500757, + 2921.646307, + 2921.816193, + 2922.01509, + 2922.247044, + 2922.515392, + 2922.822708, + 2923.170782, + 2923.560626, + 2923.992496, + 2924.465963, + 2924.979967, + 2925.532921, + 2926.122797, + 2926.747227, + 2927.403605, + 2928.089166, + 2928.801074, + 2929.536476, + 2930.292553, + 2931.066553, + 2931.855796, + 2932.657679, + 2933.469659, + 2934.289229, + 2935.113886, + 2935.941106, + 2936.768308, + 2937.592839, + 2938.41195, + 2939.222802, + 2940.022469, + 2940.807968, + 2941.576297, + 2942.324489, + 2943.04967, + 2943.749139, + 2944.420432, + 2945.06141, + 2945.670318, + 2946.24586, + 2946.787243, + 2947.294221, + 2947.767116, + 2948.206816, + 2948.614767, + 2948.992938, + 2949.34377, + 2949.670114, + 2949.975156, + 2950.262334, + 2950.535254, + 2950.797595, + 2951.053034, + 2951.305163, + 2951.557424, + 2951.813052, + 2952.075031, + 2952.346065, + 2952.628558, + 2952.924609, + 2953.236024, + 2953.564328, + 2953.910787, + 2954.276437, + 2954.662105, + 2955.068436, + 2955.495913, + 2955.944871, + 2956.415506, + 2956.907878, + 2957.42191, + 2957.957373, + 2958.513873, + 2959.090824, + 2959.687466, + 2960.302794, + 2960.93559, + 2961.584379, + 2962.24744, + 2962.922798, + 2963.608241, + 2964.301332, + 2964.999444, + 2965.699788, + 2966.399463, + 2967.095501, + 2967.784921, + 2968.464779, + 2969.132238, + 2969.784611, + 2970.419415, + 2971.034421, + 2971.627687, + 2972.197591, + 2972.742848, + 2973.262523, + 2973.756028, + 2974.223114, + 2974.663851, + 2975.0786, + 2975.467979, + 2975.832817, + 2976.174106, + 2976.492947, + 2976.790489, + 2977.06787, + 2977.326158, + 2977.566293, + 2977.789036, + 2977.994935, + 2978.18428, + 2978.357099, + 2978.513151, + 2978.651945, + 2978.772795, + 2978.874883, + 2978.957358, + 2979.019453, + 2979.060622, + 2979.080718, + 2979.080091, + 2979.059745, + 2979.02146, + 2978.96786, + 2978.902495, + 2978.829824, + 2978.755184, + 2978.684682, + 2978.625057, + 2978.583483, + 2978.567338, + 2978.583961, + 2978.640395, + 2978.743102, + 2978.897765, + 2979.109008, + 2979.380278, + 2979.713659, + 2980.109822, + 2980.568006, + 2981.086045, + 2981.660464, + 2982.286633, + 2982.958924, + 2983.670963, + 2984.415828, + 2985.186309, + 2985.975138, + 2986.775205, + 2987.579747, + 2988.382509, + 2989.177852, + 2989.96083, + 2990.727225, + 2991.473534, + 2992.1969, + 2992.89508, + 2993.566296, + 2994.209161, + 2994.822545, + 2995.405471, + 2995.95701, + 2996.476215, + 2996.96205, + 2997.413347, + 2997.82896, + 2998.207588, + 2998.548059, + 2998.849276, + 2999.11039, + 2999.330893, + 2999.510743, + 2999.650471, + 2999.751289, + 2999.815093, + 2999.844602, + 2999.843271, + 2999.81533, + 2999.765696, + 2999.69989, + 2999.623914, + 2999.544108, + 2999.466996, + 2999.399106, + 2999.346801, + 2999.316135, + 2999.312668, + 2999.341364, + 2999.406472, + 2999.511451, + 2999.658923, + 2999.850662, + 3000.087605, + 3000.369901, + 3000.696975, + 3001.067611, + 3001.480057, + 3001.932124, + 3002.421293, + 3002.944819, + 3003.499819, + 3004.08335, + 3004.692472, + 3005.324286, + 3005.975964, + 3006.644746, + 3007.327939, + 3008.022889, + 3008.726954, + 3009.437468, + 3010.151709, + 3010.866867, + 3011.580021, + 3012.288131, + 3012.988037, + 3013.676475, + 3014.350119, + 3015.00562, + 3015.639675, + 3016.249102, + 3016.830912, + 3017.382404, + 3017.901238, + 3018.385516, + 3018.833854, + 3019.245426, + 3019.62001, + 3019.958003, + 3020.260422, + 3020.528881, + 3020.765554, + 3020.973115, + 3021.15467, + 3021.313671, + 3021.453827, + 3021.579009, + 3021.693161, + 3021.800207, + 3021.903972, + 3022.00811, + 3022.11605, + 3022.230944, + 3022.355631, + 3022.492655, + 3022.644213, + 3022.812213, + 3022.998257, + 3023.20368, + 3023.429569, + 3023.676789, + 3023.946011, + 3024.237725, + 3024.552265, + 3024.889812, + 3025.25039, + 3025.633881, + 3026.039992, + 3026.46826, + 3026.918024, + 3027.388411, + 3027.878318, + 3028.386395, + 3028.911038, + 3029.450384, + 3030.002318, + 3030.56448, + 3031.134295, + 3031.708998, + 3032.285676, + 3032.861313, + 3033.432844, + 3033.99721, + 3034.551403, + 3035.092548, + 3035.617936, + 3036.12509, + 3036.611803, + 3037.076176, + 3037.516649, + 3037.932015, + 3038.321427, + 3038.684397, + 3039.020781, + 3039.330749, + 3039.614752, + 3039.873476, + 3040.107787, + 3040.31867, + 3040.507166, + 3040.674305, + 3040.821039, + 3040.948185, + 3041.05637, + 3041.145994, + 3041.217203, + 3041.269876, + 3041.303647, + 3041.317939, + 3041.312036, + 3041.285177, + 3041.236682, + 3041.16609, + 3041.073319, + 3040.958816, + 3040.823693, + 3040.66991, + 3040.500233, + 3040.318446, + 3040.129222, + 3039.938164, + 3039.751666, + 3039.576773, + 3039.420987, + 3039.292033, + 3039.197593, + 3039.145051, + 3039.141205, + 3039.192019, + 3039.30241, + 3039.47603, + 3039.715159, + 3040.020596, + 3040.391638, + 3040.826129, + 3041.320532, + 3041.870087, + 3042.468992, + 3043.110618, + 3043.787763, + 3044.492881, + 3045.21834, + 3045.956641, + 3046.700615, + 3047.443591, + 3048.17952, + 3048.903051, + 3049.609587, + 3050.295267, + 3050.956903, + 3051.59196, + 3052.198397, + 3052.774598, + 3053.319233, + 3053.831157, + 3054.309298, + 3054.752585, + 3055.159884, + 3055.529947, + 3055.861556, + 3056.153365, + 3056.404193, + 3056.61288, + 3056.778604, + 3056.900839, + 3056.979576, + 3057.015389, + 3057.009546, + 3056.964081, + 3056.881838, + 3056.766485, + 3056.622489, + 3056.455057, + 3056.270048, + 3056.073845, + 3055.873207, + 3055.675108, + 3055.486555, + 3055.314412, + 3055.165222, + 3055.045051, + 3054.959339, + 3054.912792, + 3054.909289, + 3054.951832, + 3055.042523, + 3055.182573, + 3055.372346, + 3055.611419, + 3055.898669, + 3056.232368, + 3056.610308, + 3057.029885, + 3057.488229, + 3057.982284, + 3058.508898, + 3059.064888, + 3059.64708, + 3060.25235, + 3060.877619, + 3061.519856, + 3062.176054, + 3062.843206, + 3063.518267, + 3064.198126, + 3064.879574, + 3065.559286, + 3066.233813, + 3066.899585, + 3067.552939, + 3068.190151, + 3068.807494, + 3069.401302, + 3069.96805, + 3070.504439, + 3071.007483, + 3071.474597, + 3071.903677, + 3072.29317, + 3072.642127, + 3072.950252, + 3073.217906, + 3073.446122, + 3073.636568, + 3073.791514, + 3073.913768, + 3074.0066, + 3074.073659, + 3074.118871, + 3074.14635, + 3074.160295, + 3074.164896, + 3074.164257, + 3074.162315, + 0 + ], + "yaxis": "y4" + } + ], + "layout": { + "annotations": [ + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " Wind1VelX_(m/s)", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 1, + "yanchor": "bottom", + "yref": "paper" + }, + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " Azimuth_(deg)", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 0.71875, + "yanchor": "bottom", + "yref": "paper" + }, + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " GenTq_(kN-m)", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 0.4375, + "yanchor": "bottom", + "yref": "paper" + }, + { + "font": { + "size": 16 + }, + "showarrow": false, + "text": " GenPwr_(kW)", + "x": 0.5, + "xanchor": "center", + "xref": "paper", + "y": 0.15625, + "yanchor": "bottom", + "yref": "paper" + } + ], + "height": 1200, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "TurbId: 1 - Time = 99.99 (s)" + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ] + }, + "xaxis2": { + "anchor": "y2", + "domain": [ + 0, + 1 + ] + }, + "xaxis3": { + "anchor": "y3", + "domain": [ + 0, + 1 + ] + }, + "xaxis4": { + "anchor": "y4", + "domain": [ + 0, + 1 + ] + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0.84375, + 1 + ] + }, + "yaxis2": { + "anchor": "x2", + "domain": [ + 0.5625, + 0.71875 + ] + }, + "yaxis3": { + "anchor": "x3", + "domain": [ + 0.28125, + 0.4375 + ] + }, + "yaxis4": { + "anchor": "x4", + "domain": [ + 0, + 0.15625 + ] + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subscription to FAST channel closed.\n" + ] + } + ], + "source": [ + "rfi.fast_sub(200, plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Test 01 - Message Integrity" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from openfast_toolbox.io import FASTOutputFile\n", + "\n", + "fastout = FASTOutputFile('../templatesDir/OFZMQ_test01/OFZMQ_test01_2.outb').toDataFrame()\n", + "zmqout = rfi.sub_dict " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['TurbId', ' Time', ' Wind1VelX_(m/s)', ' Azimuth_(deg)', ' GenTq_(kN-m)', ' GenPwr_(kW)'])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "zmqout.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import gzip \n", + "import pickle \n", + "\n", + "with open('./zmq_logs/OFZMQ_test01.pkl.gz', 'rb') as f:\n", + " zmqout = pickle.load(gzip.open(f))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10000" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(zmqout[' Time']) " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np \n", + "# remove last point because it's the EOF signal\n", + "\n", + "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-2], zmqout[' Wind1VelX_(m/s)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['Azimuth_[deg]'][:-2], zmqout[' Azimuth_(deg)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenTq_[kN-m]'][:-2], zmqout[' GenTq_(kN-m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenPwr_[kW]'][:-2], zmqout[' GenPwr_(kW)'][:-1], atol=1e-5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Test 02 - Message integrity with `DT_OUT != DT_FAST` " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ZMQ Real Time interactor for FAST initialized. \n", + " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", + "Communication log will be saved at: ./zmq_logs/ \n", + "\n" + ] + } + ], + "source": [ + "from real_fast_interactor import RFInteractor\n", + "\n", + "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", + " live_plot=False, name='OFZMQ_test02')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subscription to FAST channel closed.\n" + ] + } + ], + "source": [ + "rfi.fast_sub(100, plot=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from openfast_toolbox.io import FASTOutputFile\n", + "\n", + "fastout = FASTOutputFile('../templatesDir/OFZMQ_test02/OFZMQ_test02.outb').toDataFrame()\n", + "zmqout = rfi.sub_dict " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import gzip \n", + "import pickle \n", + "\n", + "with open('./zmq_logs/OFZMQ_test02.pkl.gz', 'rb') as f:\n", + " zmqout = pickle.load(gzip.open(f))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "dt_fast = 0.005 \n", + "dt_zmq_out = 0.5 \n", + "step = int(dt_zmq_out/dt_fast)\n", + "\n", + "\n", + "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-1:step], zmqout[' Wind1VelX: (m/s)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['Azimuth_[deg]'][:-1:step], zmqout[' Azimuth: (deg)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenTq_[kN-m]'][:-1:step], zmqout[' GenTq: (kN-m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['GenPwr_[kW]'][:-1:step], zmqout[' GenPwr: (kW)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['OoPDefl1_[m]'][:-1:step], zmqout[' OoPDefl1: (m)'][:-1], atol=1e-5)\n", + "assert np.allclose(fastout['IPDefl1_[m]'][:-1:step], zmqout[' IPDefl1: (m)'][:-1], atol=1e-5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "100.0" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0,\n", + " 0.005,\n", + " 0.01,\n", + " 0.015,\n", + " 0.02,\n", + " 0.025,\n", + " 0.03,\n", + " 0.035,\n", + " 0.04,\n", + " 0.045,\n", + " 0.05,\n", + " 0.055,\n", + " 0.06,\n", + " 0.065,\n", + " 0.07,\n", + " 0.075,\n", + " 0.08,\n", + " 0.085,\n", + " 0.09,\n", + " 0.095,\n", + " 0.1,\n", + " 0.105,\n", + " 0.11,\n", + " 0.115,\n", + " 0.12,\n", + " 0.125,\n", + " 0.13,\n", + " 0.135,\n", + " 0.14,\n", + " 0.145,\n", + " 0.15,\n", + " 0.155,\n", + " 0.16,\n", + " 0.165,\n", + " 0.17,\n", + " 0.175,\n", + " 0.18,\n", + " 0.185,\n", + " 0.19,\n", + " 0.195,\n", + " 0.2,\n", + " 0.205,\n", + " 0.21,\n", + " 0.215,\n", + " 0.22,\n", + " 0.225,\n", + " 0.23,\n", + " 0.235,\n", + " 0.24,\n", + " 0.245,\n", + " 0.25,\n", + " 0.255,\n", + " 0.26,\n", + " 0.265,\n", + " 0.27,\n", + " 0.275,\n", + " 0.28,\n", + " 0.285,\n", + " 0.29,\n", + " 0.295,\n", + " 0.3,\n", + " 0.305,\n", + " 0.31,\n", + " 0.315,\n", + " 0.32,\n", + " 0.325,\n", + " 0.33,\n", + " 0.335,\n", + " 0.34,\n", + " 0.345,\n", + " 0.35,\n", + " 0.355,\n", + " 0.36,\n", + " 0.365,\n", + " 0.37,\n", + " 0.375,\n", + " 0.38,\n", + " 0.385,\n", + " 0.39,\n", + " 0.395,\n", + " 0.4,\n", + " 0.405,\n", + " 0.41,\n", + " 0.415,\n", + " 0.42,\n", + " 0.425,\n", + " 0.43,\n", + " 0.435,\n", + " 0.44,\n", + " 0.445,\n", + " 0.45,\n", + " 0.455,\n", + " 0.46,\n", + " 0.465,\n", + " 0.47,\n", + " 0.475,\n", + " 0.48,\n", + " 0.485,\n", + " 0.49,\n", + " 0.495,\n", + " 0.5,\n", + " 0.505,\n", + " 0.51,\n", + " 0.515,\n", + " 0.52,\n", + " 0.525,\n", + " 0.53,\n", + " 0.535,\n", + " 0.54,\n", + " 0.545,\n", + " 0.55,\n", + " 0.555,\n", + " 0.56,\n", + " 0.565,\n", + " 0.57,\n", + " 0.575,\n", + " 0.58,\n", + " 0.585,\n", + " 0.59,\n", + " 0.595,\n", + " 0.6,\n", + " 0.605,\n", + " 0.61,\n", + " 0.615,\n", + " 0.62,\n", + " 0.625,\n", + " 0.63,\n", + " 0.635,\n", + " 0.64,\n", + " 0.645,\n", + " 0.65,\n", + " 0.655,\n", + " 0.66,\n", + " 0.665,\n", + " 0.67,\n", + " 0.675,\n", + " 0.68,\n", + " 0.685,\n", + " 0.69,\n", + " 0.695,\n", + " 0.7,\n", + " 0.705,\n", + " 0.71,\n", + " 0.715,\n", + " 0.72,\n", + " 0.725,\n", + " 0.73,\n", + " 0.735,\n", + " 0.74,\n", + " 0.745,\n", + " 0.75,\n", + " 0.755,\n", + " 0.76,\n", + " 0.765,\n", + " 0.77,\n", + " 0.775,\n", + " 0.78,\n", + " 0.785,\n", + " 0.79,\n", + " 0.795,\n", + " 0.8,\n", + " 0.805,\n", + " 0.81,\n", + " 0.815,\n", + " 0.82,\n", + " 0.825,\n", + " 0.83,\n", + " 0.835,\n", + " 0.84,\n", + " 0.845,\n", + " 0.85,\n", + " 0.855,\n", + " 0.86,\n", + " 0.865,\n", + " 0.87,\n", + " 0.875,\n", + " 0.88,\n", + " 0.885,\n", + " 0.89,\n", + " 0.895,\n", + " 0.9,\n", + " 0.905,\n", + " 0.91,\n", + " 0.915,\n", + " 0.92,\n", + " 0.925,\n", + " 0.93,\n", + " 0.935,\n", + " 0.94,\n", + " 0.945,\n", + " 0.95,\n", + " 0.955,\n", + " 0.96,\n", + " 0.965,\n", + " 0.97,\n", + " 0.975,\n", + " 0.98,\n", + " 0.985,\n", + " 0.99,\n", + " 0.995,\n", + " 1,\n", + " 1.005,\n", + " 1.01,\n", + " 1.015,\n", + " 1.02,\n", + " 1.025,\n", + " 1.03,\n", + " 1.035,\n", + " 1.04,\n", + " 1.045,\n", + " 1.05,\n", + " 1.055,\n", + " 1.06,\n", + " 1.065,\n", + " 1.07,\n", + " 1.075,\n", + " 1.08,\n", + " 1.085,\n", + " 1.09,\n", + " 1.095,\n", + " 1.1,\n", + " 1.105,\n", + " 1.11,\n", + " 1.115,\n", + " 1.12,\n", + " 1.125,\n", + " 1.13,\n", + " 1.135,\n", + " 1.14,\n", + " 1.145,\n", + " 1.15,\n", + " 1.155,\n", + " 1.16,\n", + " 1.165,\n", + " 1.17,\n", + " 1.175,\n", + " 1.18,\n", + " 1.185,\n", + " 1.19,\n", + " 1.195,\n", + " 1.2,\n", + " 1.205,\n", + " 1.21,\n", + " 1.215,\n", + " 1.22,\n", + " 1.225,\n", + " 1.23,\n", + " 1.235,\n", + " 1.24,\n", + " 1.245,\n", + " 1.25,\n", + " 1.255,\n", + " 1.26,\n", + " 1.265,\n", + " 1.27,\n", + " 1.275,\n", + " 1.28,\n", + " 1.285,\n", + " 1.29,\n", + " 1.295,\n", + " 1.3,\n", + " 1.305,\n", + " 1.31,\n", + " 1.315,\n", + " 1.32,\n", + " 1.325,\n", + " 1.33,\n", + " 1.335,\n", + " 1.34,\n", + " 1.345,\n", + " 1.35,\n", + " 1.355,\n", + " 1.36,\n", + " 1.365,\n", + " 1.37,\n", + " 1.375,\n", + " 1.38,\n", + " 1.385,\n", + " 1.39,\n", + " 1.395,\n", + " 1.4,\n", + " 1.405,\n", + " 1.41,\n", + " 1.415,\n", + " 1.42,\n", + " 1.425,\n", + " 1.43,\n", + " 1.435,\n", + " 1.44,\n", + " 1.445,\n", + " 1.45,\n", + " 1.455,\n", + " 1.46,\n", + " 1.465,\n", + " 1.47,\n", + " 1.475,\n", + " 1.48,\n", + " 1.485,\n", + " 1.49,\n", + " 1.495,\n", + " 1.5,\n", + " 1.505,\n", + " 1.51,\n", + " 1.515,\n", + " 1.52,\n", + " 1.525,\n", + " 1.53,\n", + " 1.535,\n", + " 1.54,\n", + " 1.545,\n", + " 1.55,\n", + " 1.555,\n", + " 1.56,\n", + " 1.565,\n", + " 1.57,\n", + " 1.575,\n", + " 1.58,\n", + " 1.585,\n", + " 1.59,\n", + " 1.595,\n", + " 1.6,\n", + " 1.605,\n", + " 1.61,\n", + " 1.615,\n", + " 1.62,\n", + " 1.625,\n", + " 1.63,\n", + " 1.635,\n", + " 1.64,\n", + " 1.645,\n", + " 1.65,\n", + " 1.655,\n", + " 1.66,\n", + " 1.665,\n", + " 1.67,\n", + " 1.675,\n", + " 1.68,\n", + " 1.685,\n", + " 1.69,\n", + " 1.695,\n", + " 1.7,\n", + " 1.705,\n", + " 1.71,\n", + " 1.715,\n", + " 1.72,\n", + " 1.725,\n", + " 1.73,\n", + " 1.735,\n", + " 1.74,\n", + " 1.745,\n", + " 1.75,\n", + " 1.755,\n", + " 1.76,\n", + " 1.765,\n", + " 1.77,\n", + " 1.775,\n", + " 1.78,\n", + " 1.785,\n", + " 1.79,\n", + " 1.795,\n", + " 1.8,\n", + " 1.805,\n", + " 1.81,\n", + " 1.815,\n", + " 1.82,\n", + " 1.825,\n", + " 1.83,\n", + " 1.835,\n", + " 1.84,\n", + " 1.845,\n", + " 1.85,\n", + " 1.855,\n", + " 1.86,\n", + " 1.865,\n", + " 1.87,\n", + " 1.875,\n", + " 1.88,\n", + " 1.885,\n", + " 1.89,\n", + " 1.895,\n", + " 1.9,\n", + " 1.905,\n", + " 1.91,\n", + " 1.915,\n", + " 1.92,\n", + " 1.925,\n", + " 1.93,\n", + " 1.935,\n", + " 1.94,\n", + " 1.945,\n", + " 1.95,\n", + " 1.955,\n", + " 1.96,\n", + " 1.965,\n", + " 1.97,\n", + " 1.975,\n", + " 1.98,\n", + " 1.985,\n", + " 1.99,\n", + " 1.995,\n", + " 2,\n", + " 2.005,\n", + " 2.01,\n", + " 2.015,\n", + " 2.02,\n", + " 2.025,\n", + " 2.03,\n", + " 2.035,\n", + " 2.04,\n", + " 2.045,\n", + " 2.05,\n", + " 2.055,\n", + " 2.06,\n", + " 2.065,\n", + " 2.07,\n", + " 2.075,\n", + " 2.08,\n", + " 2.085,\n", + " 2.09,\n", + " 2.095,\n", + " 2.1,\n", + " 2.105,\n", + " 2.11,\n", + " 2.115,\n", + " 2.12,\n", + " 2.125,\n", + " 2.13,\n", + " 2.135,\n", + " 2.14,\n", + " 2.145,\n", + " 2.15,\n", + " 2.155,\n", + " 2.16,\n", + " 2.165,\n", + " 2.17,\n", + " 2.175,\n", + " 2.18,\n", + " 2.185,\n", + " 2.19,\n", + " 2.195,\n", + " 2.2,\n", + " 2.205,\n", + " 2.21,\n", + " 2.215,\n", + " 2.22,\n", + " 2.225,\n", + " 2.23,\n", + " 2.235,\n", + " 2.24,\n", + " 2.245,\n", + " 2.25,\n", + " 2.255,\n", + " 2.26,\n", + " 2.265,\n", + " 2.27,\n", + " 2.275,\n", + " 2.28,\n", + " 2.285,\n", + " 2.29,\n", + " 2.295,\n", + " 2.3,\n", + " 2.305,\n", + " 2.31,\n", + " 2.315,\n", + " 2.32,\n", + " 2.325,\n", + " 2.33,\n", + " 2.335,\n", + " 2.34,\n", + " 2.345,\n", + " 2.35,\n", + " 2.355,\n", + " 2.36,\n", + " 2.365,\n", + " 2.37,\n", + " 2.375,\n", + " 2.38,\n", + " 2.385,\n", + " 2.39,\n", + " 2.395,\n", + " 2.4,\n", + " 2.405,\n", + " 2.41,\n", + " 2.415,\n", + " 2.42,\n", + " 2.425,\n", + " 2.43,\n", + " 2.435,\n", + " 2.44,\n", + " 2.445,\n", + " 2.45,\n", + " 2.455,\n", + " 2.46,\n", + " 2.465,\n", + " 2.47,\n", + " 2.475,\n", + " 2.48,\n", + " 2.485,\n", + " 2.49,\n", + " 2.495,\n", + " 2.5,\n", + " 2.505,\n", + " 2.51,\n", + " 2.515,\n", + " 2.52,\n", + " 2.525,\n", + " 2.53,\n", + " 2.535,\n", + " 2.54,\n", + " 2.545,\n", + " 2.55,\n", + " 2.555,\n", + " 2.56,\n", + " 2.565,\n", + " 2.57,\n", + " 2.575,\n", + " 2.58,\n", + " 2.585,\n", + " 2.59,\n", + " 2.595,\n", + " 2.6,\n", + " 2.605,\n", + " 2.61,\n", + " 2.615,\n", + " 2.62,\n", + " 2.625,\n", + " 2.63,\n", + " 2.635,\n", + " 2.64,\n", + " 2.645,\n", + " 2.65,\n", + " 2.655,\n", + " 2.66,\n", + " 2.665,\n", + " 2.67,\n", + " 2.675,\n", + " 2.68,\n", + " 2.685,\n", + " 2.69,\n", + " 2.695,\n", + " 2.7,\n", + " 2.705,\n", + " 2.71,\n", + " 2.715,\n", + " 2.72,\n", + " 2.725,\n", + " 2.73,\n", + " 2.735,\n", + " 2.74,\n", + " 2.745,\n", + " 2.75,\n", + " 2.755,\n", + " 2.76,\n", + " 2.765,\n", + " 2.77,\n", + " 2.775,\n", + " 2.78,\n", + " 2.785,\n", + " 2.79,\n", + " 2.795,\n", + " 2.8,\n", + " 2.805,\n", + " 2.81,\n", + " 2.815,\n", + " 2.82,\n", + " 2.825,\n", + " 2.83,\n", + " 2.835,\n", + " 2.84,\n", + " 2.845,\n", + " 2.85,\n", + " 2.855,\n", + " 2.86,\n", + " 2.865,\n", + " 2.87,\n", + " 2.875,\n", + " 2.88,\n", + " 2.885,\n", + " 2.89,\n", + " 2.895,\n", + " 2.9,\n", + " 2.905,\n", + " 2.91,\n", + " 2.915,\n", + " 2.92,\n", + " 2.925,\n", + " 2.93,\n", + " 2.935,\n", + " 2.94,\n", + " 2.945,\n", + " 2.95,\n", + " 2.955,\n", + " 2.96,\n", + " 2.965,\n", + " 2.97,\n", + " 2.975,\n", + " 2.98,\n", + " 2.985,\n", + " 2.99,\n", + " 2.995,\n", + " 3,\n", + " 3.005,\n", + " 3.01,\n", + " 3.015,\n", + " 3.02,\n", + " 3.025,\n", + " 3.03,\n", + " 3.035,\n", + " 3.04,\n", + " 3.045,\n", + " 3.05,\n", + " 3.055,\n", + " 3.06,\n", + " 3.065,\n", + " 3.07,\n", + " 3.075,\n", + " 3.08,\n", + " 3.085,\n", + " 3.09,\n", + " 3.095,\n", + " 3.1,\n", + " 3.105,\n", + " 3.11,\n", + " 3.115,\n", + " 3.12,\n", + " 3.125,\n", + " 3.13,\n", + " 3.135,\n", + " 3.14,\n", + " 3.145,\n", + " 3.15,\n", + " 3.155,\n", + " 3.16,\n", + " 3.165,\n", + " 3.17,\n", + " 3.175,\n", + " 3.18,\n", + " 3.185,\n", + " 3.19,\n", + " 3.195,\n", + " 3.2,\n", + " 3.205,\n", + " 3.21,\n", + " 3.215,\n", + " 3.22,\n", + " 3.225,\n", + " 3.23,\n", + " 3.235,\n", + " 3.24,\n", + " 3.245,\n", + " 3.25,\n", + " 3.255,\n", + " 3.26,\n", + " 3.265,\n", + " 3.27,\n", + " 3.275,\n", + " 3.28,\n", + " 3.285,\n", + " 3.29,\n", + " 3.295,\n", + " 3.3,\n", + " 3.305,\n", + " 3.31,\n", + " 3.315,\n", + " 3.32,\n", + " 3.325,\n", + " 3.33,\n", + " 3.335,\n", + " 3.34,\n", + " 3.345,\n", + " 3.35,\n", + " 3.355,\n", + " 3.36,\n", + " 3.365,\n", + " 3.37,\n", + " 3.375,\n", + " 3.38,\n", + " 3.385,\n", + " 3.39,\n", + " 3.395,\n", + " 3.4,\n", + " 3.405,\n", + " 3.41,\n", + " 3.415,\n", + " 3.42,\n", + " 3.425,\n", + " 3.43,\n", + " 3.435,\n", + " 3.44,\n", + " 3.445,\n", + " 3.45,\n", + " 3.455,\n", + " 3.46,\n", + " 3.465,\n", + " 3.47,\n", + " 3.475,\n", + " 3.48,\n", + " 3.485,\n", + " 3.49,\n", + " 3.495,\n", + " 3.5,\n", + " 3.505,\n", + " 3.51,\n", + " 3.515,\n", + " 3.52,\n", + " 3.525,\n", + " 3.53,\n", + " 3.535,\n", + " 3.54,\n", + " 3.545,\n", + " 3.55,\n", + " 3.555,\n", + " 3.56,\n", + " 3.565,\n", + " 3.57,\n", + " 3.575,\n", + " 3.58,\n", + " 3.585,\n", + " 3.59,\n", + " 3.595,\n", + " 3.6,\n", + " 3.605,\n", + " 3.61,\n", + " 3.615,\n", + " 3.62,\n", + " 3.625,\n", + " 3.63,\n", + " 3.635,\n", + " 3.64,\n", + " 3.645,\n", + " 3.65,\n", + " 3.655,\n", + " 3.66,\n", + " 3.665,\n", + " 3.67,\n", + " 3.675,\n", + " 3.68,\n", + " 3.685,\n", + " 3.69,\n", + " 3.695,\n", + " 3.7,\n", + " 3.705,\n", + " 3.71,\n", + " 3.715,\n", + " 3.72,\n", + " 3.725,\n", + " 3.73,\n", + " 3.735,\n", + " 3.74,\n", + " 3.745,\n", + " 3.75,\n", + " 3.755,\n", + " 3.76,\n", + " 3.765,\n", + " 3.77,\n", + " 3.775,\n", + " 3.78,\n", + " 3.785,\n", + " 3.79,\n", + " 3.795,\n", + " 3.8,\n", + " 3.805,\n", + " 3.81,\n", + " 3.815,\n", + " 3.82,\n", + " 3.825,\n", + " 3.83,\n", + " 3.835,\n", + " 3.84,\n", + " 3.845,\n", + " 3.85,\n", + " 3.855,\n", + " 3.86,\n", + " 3.865,\n", + " 3.87,\n", + " 3.875,\n", + " 3.88,\n", + " 3.885,\n", + " 3.89,\n", + " 3.895,\n", + " 3.9,\n", + " 3.905,\n", + " 3.91,\n", + " 3.915,\n", + " 3.92,\n", + " 3.925,\n", + " 3.93,\n", + " 3.935,\n", + " 3.94,\n", + " 3.945,\n", + " 3.95,\n", + " 3.955,\n", + " 3.96,\n", + " 3.965,\n", + " 3.97,\n", + " 3.975,\n", + " 3.98,\n", + " 3.985,\n", + " 3.99,\n", + " 3.995,\n", + " 4,\n", + " 4.005,\n", + " 4.01,\n", + " 4.015,\n", + " 4.02,\n", + " 4.025,\n", + " 4.03,\n", + " 4.035,\n", + " 4.04,\n", + " 4.045,\n", + " 4.05,\n", + " 4.055,\n", + " 4.06,\n", + " 4.065,\n", + " 4.07,\n", + " 4.075,\n", + " 4.08,\n", + " 4.085,\n", + " 4.09,\n", + " 4.095,\n", + " 4.1,\n", + " 4.105,\n", + " 4.11,\n", + " 4.115,\n", + " 4.12,\n", + " 4.125,\n", + " 4.13,\n", + " 4.135,\n", + " 4.14,\n", + " 4.145,\n", + " 4.15,\n", + " 4.155,\n", + " 4.16,\n", + " 4.165,\n", + " 4.17,\n", + " 4.175,\n", + " 4.18,\n", + " 4.185,\n", + " 4.19,\n", + " 4.195,\n", + " 4.2,\n", + " 4.205,\n", + " 4.21,\n", + " 4.215,\n", + " 4.22,\n", + " 4.225,\n", + " 4.23,\n", + " 4.235,\n", + " 4.24,\n", + " 4.245,\n", + " 4.25,\n", + " 4.255,\n", + " 4.26,\n", + " 4.265,\n", + " 4.27,\n", + " 4.275,\n", + " 4.28,\n", + " 4.285,\n", + " 4.29,\n", + " 4.295,\n", + " 4.3,\n", + " 4.305,\n", + " 4.31,\n", + " 4.315,\n", + " 4.32,\n", + " 4.325,\n", + " 4.33,\n", + " 4.335,\n", + " 4.34,\n", + " 4.345,\n", + " 4.35,\n", + " 4.355,\n", + " 4.36,\n", + " 4.365,\n", + " 4.37,\n", + " 4.375,\n", + " 4.38,\n", + " 4.385,\n", + " 4.39,\n", + " 4.395,\n", + " 4.4,\n", + " 4.405,\n", + " 4.41,\n", + " 4.415,\n", + " 4.42,\n", + " 4.425,\n", + " 4.43,\n", + " 4.435,\n", + " 4.44,\n", + " 4.445,\n", + " 4.45,\n", + " 4.455,\n", + " 4.46,\n", + " 4.465,\n", + " 4.47,\n", + " 4.475,\n", + " 4.48,\n", + " 4.485,\n", + " 4.49,\n", + " 4.495,\n", + " 4.5,\n", + " 4.505,\n", + " 4.51,\n", + " 4.515,\n", + " 4.52,\n", + " 4.525,\n", + " 4.53,\n", + " 4.535,\n", + " 4.54,\n", + " 4.545,\n", + " 4.55,\n", + " 4.555,\n", + " 4.56,\n", + " 4.565,\n", + " 4.57,\n", + " 4.575,\n", + " 4.58,\n", + " 4.585,\n", + " 4.59,\n", + " 4.595,\n", + " 4.6,\n", + " 4.605,\n", + " 4.61,\n", + " 4.615,\n", + " 4.62,\n", + " 4.625,\n", + " 4.63,\n", + " 4.635,\n", + " 4.64,\n", + " 4.645,\n", + " 4.65,\n", + " 4.655,\n", + " 4.66,\n", + " 4.665,\n", + " 4.67,\n", + " 4.675,\n", + " 4.68,\n", + " 4.685,\n", + " 4.69,\n", + " 4.695,\n", + " 4.7,\n", + " 4.705,\n", + " 4.71,\n", + " 4.715,\n", + " 4.72,\n", + " 4.725,\n", + " 4.73,\n", + " 4.735,\n", + " 4.74,\n", + " 4.745,\n", + " 4.75,\n", + " 4.755,\n", + " 4.76,\n", + " 4.765,\n", + " 4.77,\n", + " 4.775,\n", + " 4.78,\n", + " 4.785,\n", + " 4.79,\n", + " 4.795,\n", + " 4.8,\n", + " 4.805,\n", + " 4.81,\n", + " 4.815,\n", + " 4.82,\n", + " 4.825,\n", + " 4.83,\n", + " 4.835,\n", + " 4.84,\n", + " 4.845,\n", + " 4.85,\n", + " 4.855,\n", + " 4.86,\n", + " 4.865,\n", + " 4.87,\n", + " 4.875,\n", + " 4.88,\n", + " 4.885,\n", + " 4.89,\n", + " 4.895,\n", + " 4.9,\n", + " 4.905,\n", + " 4.91,\n", + " 4.915,\n", + " 4.92,\n", + " 4.925,\n", + " 4.93,\n", + " 4.935,\n", + " 4.94,\n", + " 4.945,\n", + " 4.95,\n", + " 4.955,\n", + " 4.96,\n", + " 4.965,\n", + " 4.97,\n", + " 4.975,\n", + " 4.98,\n", + " 4.985,\n", + " 4.99,\n", + " 4.995,\n", + " ...]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "yoda", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb deleted file mode 100644 index 0c578a33c7..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/SUBtests.ipynb +++ /dev/null @@ -1,1291 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Zmq Live PUB-SUB" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "#export PATH=$PATH:/Users/lorenzoschena/Desktop/Workspace/openfast/install/bin\n", - "from real_fast_interactor import RFInteractor" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", - "Communication log will be saved at: ./zmq_logs/ \n", - "\n" - ] - } - ], - "source": [ - "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", - " live_plot=False, name='OFZMQ_test01')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Subscription to FAST channel closed.\n" - ] - } - ], - "source": [ - "rfi.fast_sub(100, plot=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test 01 - Message Integrity" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from openfast_toolbox.io import FASTOutputFile\n", - "\n", - "fastout = FASTOutputFile('../templatesDir/OFZMQ_test01/OFZMQ_test01.outb').toDataFrame()\n", - "zmqout = rfi.sub_dict " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['TurbId', ' Time', ' Wind1VelX: (m/s)', ' Azimuth: (deg)', ' GenTq: (kN-m)', ' GenPwr: (kW)', ' OoPDefl1: (m)', ' IPDefl1: (m)'])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "zmqout.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import gzip \n", - "import pickle \n", - "\n", - "with open('./zmq_logs/OFZMQ_test01.pkl.gz', 'rb') as f:\n", - " zmqout = pickle.load(gzip.open(f))" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np \n", - "# remove last point because it's the EOF signal\n", - "\n", - "assert np.allclose(fastout['Wind1VelX_[m/s]'][1740:-1], zmqout[' Wind1VelX: (m/s)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['Azimuth_[deg]'][1740:-1], zmqout[' Azimuth: (deg)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenTq_[kN-m]'][1740:-1], zmqout[' GenTq: (kN-m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenPwr_[kW]'][1740:-1], zmqout[' GenPwr: (kW)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['OoPDefl1_[m]'][1740:-1], zmqout[' OoPDefl1: (m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['IPDefl1_[m]'][1740:-1], zmqout[' IPDefl1: (m)'][:-1], atol=1e-5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test 02 - Message integrity with `DT_OUT != DT_FAST` " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", - "Communication log will be saved at: ./zmq_logs/ \n", - "\n" - ] - } - ], - "source": [ - "from real_fast_interactor import RFInteractor\n", - "\n", - "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", - " live_plot=False, name='OFZMQ_test02')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Subscription to FAST channel closed.\n" - ] - } - ], - "source": [ - "rfi.fast_sub(100, plot=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from openfast_toolbox.io import FASTOutputFile\n", - "\n", - "fastout = FASTOutputFile('../templatesDir/OFZMQ_test02/OFZMQ_test02.outb').toDataFrame()\n", - "zmqout = rfi.sub_dict " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import gzip \n", - "import pickle \n", - "\n", - "with open('./zmq_logs/OFZMQ_test02.pkl.gz', 'rb') as f:\n", - " zmqout = pickle.load(gzip.open(f))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "dt_fast = 0.005 \n", - "dt_zmq_out = 0.5 \n", - "step = int(dt_zmq_out/dt_fast)\n", - "\n", - "\n", - "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-1:step], zmqout[' Wind1VelX: (m/s)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['Azimuth_[deg]'][:-1:step], zmqout[' Azimuth: (deg)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenTq_[kN-m]'][:-1:step], zmqout[' GenTq: (kN-m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenPwr_[kW]'][:-1:step], zmqout[' GenPwr: (kW)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['OoPDefl1_[m]'][:-1:step], zmqout[' OoPDefl1: (m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['IPDefl1_[m]'][:-1:step], zmqout[' IPDefl1: (m)'][:-1], atol=1e-5)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "100.0" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0,\n", - " 0.005,\n", - " 0.01,\n", - " 0.015,\n", - " 0.02,\n", - " 0.025,\n", - " 0.03,\n", - " 0.035,\n", - " 0.04,\n", - " 0.045,\n", - " 0.05,\n", - " 0.055,\n", - " 0.06,\n", - " 0.065,\n", - " 0.07,\n", - " 0.075,\n", - " 0.08,\n", - " 0.085,\n", - " 0.09,\n", - " 0.095,\n", - " 0.1,\n", - " 0.105,\n", - " 0.11,\n", - " 0.115,\n", - " 0.12,\n", - " 0.125,\n", - " 0.13,\n", - " 0.135,\n", - " 0.14,\n", - " 0.145,\n", - " 0.15,\n", - " 0.155,\n", - " 0.16,\n", - " 0.165,\n", - " 0.17,\n", - " 0.175,\n", - " 0.18,\n", - " 0.185,\n", - " 0.19,\n", - " 0.195,\n", - " 0.2,\n", - " 0.205,\n", - " 0.21,\n", - " 0.215,\n", - " 0.22,\n", - " 0.225,\n", - " 0.23,\n", - " 0.235,\n", - " 0.24,\n", - " 0.245,\n", - " 0.25,\n", - " 0.255,\n", - " 0.26,\n", - " 0.265,\n", - " 0.27,\n", - " 0.275,\n", - " 0.28,\n", - " 0.285,\n", - " 0.29,\n", - " 0.295,\n", - " 0.3,\n", - " 0.305,\n", - " 0.31,\n", - " 0.315,\n", - " 0.32,\n", - " 0.325,\n", - " 0.33,\n", - " 0.335,\n", - " 0.34,\n", - " 0.345,\n", - " 0.35,\n", - " 0.355,\n", - " 0.36,\n", - " 0.365,\n", - " 0.37,\n", - " 0.375,\n", - " 0.38,\n", - " 0.385,\n", - " 0.39,\n", - " 0.395,\n", - " 0.4,\n", - " 0.405,\n", - " 0.41,\n", - " 0.415,\n", - " 0.42,\n", - " 0.425,\n", - " 0.43,\n", - " 0.435,\n", - " 0.44,\n", - " 0.445,\n", - " 0.45,\n", - " 0.455,\n", - " 0.46,\n", - " 0.465,\n", - " 0.47,\n", - " 0.475,\n", - " 0.48,\n", - " 0.485,\n", - " 0.49,\n", - " 0.495,\n", - " 0.5,\n", - " 0.505,\n", - " 0.51,\n", - " 0.515,\n", - " 0.52,\n", - " 0.525,\n", - " 0.53,\n", - " 0.535,\n", - " 0.54,\n", - " 0.545,\n", - " 0.55,\n", - " 0.555,\n", - " 0.56,\n", - " 0.565,\n", - " 0.57,\n", - " 0.575,\n", - " 0.58,\n", - " 0.585,\n", - " 0.59,\n", - " 0.595,\n", - " 0.6,\n", - " 0.605,\n", - " 0.61,\n", - " 0.615,\n", - " 0.62,\n", - " 0.625,\n", - " 0.63,\n", - " 0.635,\n", - " 0.64,\n", - " 0.645,\n", - " 0.65,\n", - " 0.655,\n", - " 0.66,\n", - " 0.665,\n", - " 0.67,\n", - " 0.675,\n", - " 0.68,\n", - " 0.685,\n", - " 0.69,\n", - " 0.695,\n", - " 0.7,\n", - " 0.705,\n", - " 0.71,\n", - " 0.715,\n", - " 0.72,\n", - " 0.725,\n", - " 0.73,\n", - " 0.735,\n", - " 0.74,\n", - " 0.745,\n", - " 0.75,\n", - " 0.755,\n", - " 0.76,\n", - " 0.765,\n", - " 0.77,\n", - " 0.775,\n", - " 0.78,\n", - " 0.785,\n", - " 0.79,\n", - " 0.795,\n", - " 0.8,\n", - " 0.805,\n", - " 0.81,\n", - " 0.815,\n", - " 0.82,\n", - " 0.825,\n", - " 0.83,\n", - " 0.835,\n", - " 0.84,\n", - " 0.845,\n", - " 0.85,\n", - " 0.855,\n", - " 0.86,\n", - " 0.865,\n", - " 0.87,\n", - " 0.875,\n", - " 0.88,\n", - " 0.885,\n", - " 0.89,\n", - " 0.895,\n", - " 0.9,\n", - " 0.905,\n", - " 0.91,\n", - " 0.915,\n", - " 0.92,\n", - " 0.925,\n", - " 0.93,\n", - " 0.935,\n", - " 0.94,\n", - " 0.945,\n", - " 0.95,\n", - " 0.955,\n", - " 0.96,\n", - " 0.965,\n", - " 0.97,\n", - " 0.975,\n", - " 0.98,\n", - " 0.985,\n", - " 0.99,\n", - " 0.995,\n", - " 1,\n", - " 1.005,\n", - " 1.01,\n", - " 1.015,\n", - " 1.02,\n", - " 1.025,\n", - " 1.03,\n", - " 1.035,\n", - " 1.04,\n", - " 1.045,\n", - " 1.05,\n", - " 1.055,\n", - " 1.06,\n", - " 1.065,\n", - " 1.07,\n", - " 1.075,\n", - " 1.08,\n", - " 1.085,\n", - " 1.09,\n", - " 1.095,\n", - " 1.1,\n", - " 1.105,\n", - " 1.11,\n", - " 1.115,\n", - " 1.12,\n", - " 1.125,\n", - " 1.13,\n", - " 1.135,\n", - " 1.14,\n", - " 1.145,\n", - " 1.15,\n", - " 1.155,\n", - " 1.16,\n", - " 1.165,\n", - " 1.17,\n", - " 1.175,\n", - " 1.18,\n", - " 1.185,\n", - " 1.19,\n", - " 1.195,\n", - " 1.2,\n", - " 1.205,\n", - " 1.21,\n", - " 1.215,\n", - " 1.22,\n", - " 1.225,\n", - " 1.23,\n", - " 1.235,\n", - " 1.24,\n", - " 1.245,\n", - " 1.25,\n", - " 1.255,\n", - " 1.26,\n", - " 1.265,\n", - " 1.27,\n", - " 1.275,\n", - " 1.28,\n", - " 1.285,\n", - " 1.29,\n", - " 1.295,\n", - " 1.3,\n", - " 1.305,\n", - " 1.31,\n", - " 1.315,\n", - " 1.32,\n", - " 1.325,\n", - " 1.33,\n", - " 1.335,\n", - " 1.34,\n", - " 1.345,\n", - " 1.35,\n", - " 1.355,\n", - " 1.36,\n", - " 1.365,\n", - " 1.37,\n", - " 1.375,\n", - " 1.38,\n", - " 1.385,\n", - " 1.39,\n", - " 1.395,\n", - " 1.4,\n", - " 1.405,\n", - " 1.41,\n", - " 1.415,\n", - " 1.42,\n", - " 1.425,\n", - " 1.43,\n", - " 1.435,\n", - " 1.44,\n", - " 1.445,\n", - " 1.45,\n", - " 1.455,\n", - " 1.46,\n", - " 1.465,\n", - " 1.47,\n", - " 1.475,\n", - " 1.48,\n", - " 1.485,\n", - " 1.49,\n", - " 1.495,\n", - " 1.5,\n", - " 1.505,\n", - " 1.51,\n", - " 1.515,\n", - " 1.52,\n", - " 1.525,\n", - " 1.53,\n", - " 1.535,\n", - " 1.54,\n", - " 1.545,\n", - " 1.55,\n", - " 1.555,\n", - " 1.56,\n", - " 1.565,\n", - " 1.57,\n", - " 1.575,\n", - " 1.58,\n", - " 1.585,\n", - " 1.59,\n", - " 1.595,\n", - " 1.6,\n", - " 1.605,\n", - " 1.61,\n", - " 1.615,\n", - " 1.62,\n", - " 1.625,\n", - " 1.63,\n", - " 1.635,\n", - " 1.64,\n", - " 1.645,\n", - " 1.65,\n", - " 1.655,\n", - " 1.66,\n", - " 1.665,\n", - " 1.67,\n", - " 1.675,\n", - " 1.68,\n", - " 1.685,\n", - " 1.69,\n", - " 1.695,\n", - " 1.7,\n", - " 1.705,\n", - " 1.71,\n", - " 1.715,\n", - " 1.72,\n", - " 1.725,\n", - " 1.73,\n", - " 1.735,\n", - " 1.74,\n", - " 1.745,\n", - " 1.75,\n", - " 1.755,\n", - " 1.76,\n", - " 1.765,\n", - " 1.77,\n", - " 1.775,\n", - " 1.78,\n", - " 1.785,\n", - " 1.79,\n", - " 1.795,\n", - " 1.8,\n", - " 1.805,\n", - " 1.81,\n", - " 1.815,\n", - " 1.82,\n", - " 1.825,\n", - " 1.83,\n", - " 1.835,\n", - " 1.84,\n", - " 1.845,\n", - " 1.85,\n", - " 1.855,\n", - " 1.86,\n", - " 1.865,\n", - " 1.87,\n", - " 1.875,\n", - " 1.88,\n", - " 1.885,\n", - " 1.89,\n", - " 1.895,\n", - " 1.9,\n", - " 1.905,\n", - " 1.91,\n", - " 1.915,\n", - " 1.92,\n", - " 1.925,\n", - " 1.93,\n", - " 1.935,\n", - " 1.94,\n", - " 1.945,\n", - " 1.95,\n", - " 1.955,\n", - " 1.96,\n", - " 1.965,\n", - " 1.97,\n", - " 1.975,\n", - " 1.98,\n", - " 1.985,\n", - " 1.99,\n", - " 1.995,\n", - " 2,\n", - " 2.005,\n", - " 2.01,\n", - " 2.015,\n", - " 2.02,\n", - " 2.025,\n", - " 2.03,\n", - " 2.035,\n", - " 2.04,\n", - " 2.045,\n", - " 2.05,\n", - " 2.055,\n", - " 2.06,\n", - " 2.065,\n", - " 2.07,\n", - " 2.075,\n", - " 2.08,\n", - " 2.085,\n", - " 2.09,\n", - " 2.095,\n", - " 2.1,\n", - " 2.105,\n", - " 2.11,\n", - " 2.115,\n", - " 2.12,\n", - " 2.125,\n", - " 2.13,\n", - " 2.135,\n", - " 2.14,\n", - " 2.145,\n", - " 2.15,\n", - " 2.155,\n", - " 2.16,\n", - " 2.165,\n", - " 2.17,\n", - " 2.175,\n", - " 2.18,\n", - " 2.185,\n", - " 2.19,\n", - " 2.195,\n", - " 2.2,\n", - " 2.205,\n", - " 2.21,\n", - " 2.215,\n", - " 2.22,\n", - " 2.225,\n", - " 2.23,\n", - " 2.235,\n", - " 2.24,\n", - " 2.245,\n", - " 2.25,\n", - " 2.255,\n", - " 2.26,\n", - " 2.265,\n", - " 2.27,\n", - " 2.275,\n", - " 2.28,\n", - " 2.285,\n", - " 2.29,\n", - " 2.295,\n", - " 2.3,\n", - " 2.305,\n", - " 2.31,\n", - " 2.315,\n", - " 2.32,\n", - " 2.325,\n", - " 2.33,\n", - " 2.335,\n", - " 2.34,\n", - " 2.345,\n", - " 2.35,\n", - " 2.355,\n", - " 2.36,\n", - " 2.365,\n", - " 2.37,\n", - " 2.375,\n", - " 2.38,\n", - " 2.385,\n", - " 2.39,\n", - " 2.395,\n", - " 2.4,\n", - " 2.405,\n", - " 2.41,\n", - " 2.415,\n", - " 2.42,\n", - " 2.425,\n", - " 2.43,\n", - " 2.435,\n", - " 2.44,\n", - " 2.445,\n", - " 2.45,\n", - " 2.455,\n", - " 2.46,\n", - " 2.465,\n", - " 2.47,\n", - " 2.475,\n", - " 2.48,\n", - " 2.485,\n", - " 2.49,\n", - " 2.495,\n", - " 2.5,\n", - " 2.505,\n", - " 2.51,\n", - " 2.515,\n", - " 2.52,\n", - " 2.525,\n", - " 2.53,\n", - " 2.535,\n", - " 2.54,\n", - " 2.545,\n", - " 2.55,\n", - " 2.555,\n", - " 2.56,\n", - " 2.565,\n", - " 2.57,\n", - " 2.575,\n", - " 2.58,\n", - " 2.585,\n", - " 2.59,\n", - " 2.595,\n", - " 2.6,\n", - " 2.605,\n", - " 2.61,\n", - " 2.615,\n", - " 2.62,\n", - " 2.625,\n", - " 2.63,\n", - " 2.635,\n", - " 2.64,\n", - " 2.645,\n", - " 2.65,\n", - " 2.655,\n", - " 2.66,\n", - " 2.665,\n", - " 2.67,\n", - " 2.675,\n", - " 2.68,\n", - " 2.685,\n", - " 2.69,\n", - " 2.695,\n", - " 2.7,\n", - " 2.705,\n", - " 2.71,\n", - " 2.715,\n", - " 2.72,\n", - " 2.725,\n", - " 2.73,\n", - " 2.735,\n", - " 2.74,\n", - " 2.745,\n", - " 2.75,\n", - " 2.755,\n", - " 2.76,\n", - " 2.765,\n", - " 2.77,\n", - " 2.775,\n", - " 2.78,\n", - " 2.785,\n", - " 2.79,\n", - " 2.795,\n", - " 2.8,\n", - " 2.805,\n", - " 2.81,\n", - " 2.815,\n", - " 2.82,\n", - " 2.825,\n", - " 2.83,\n", - " 2.835,\n", - " 2.84,\n", - " 2.845,\n", - " 2.85,\n", - " 2.855,\n", - " 2.86,\n", - " 2.865,\n", - " 2.87,\n", - " 2.875,\n", - " 2.88,\n", - " 2.885,\n", - " 2.89,\n", - " 2.895,\n", - " 2.9,\n", - " 2.905,\n", - " 2.91,\n", - " 2.915,\n", - " 2.92,\n", - " 2.925,\n", - " 2.93,\n", - " 2.935,\n", - " 2.94,\n", - " 2.945,\n", - " 2.95,\n", - " 2.955,\n", - " 2.96,\n", - " 2.965,\n", - " 2.97,\n", - " 2.975,\n", - " 2.98,\n", - " 2.985,\n", - " 2.99,\n", - " 2.995,\n", - " 3,\n", - " 3.005,\n", - " 3.01,\n", - " 3.015,\n", - " 3.02,\n", - " 3.025,\n", - " 3.03,\n", - " 3.035,\n", - " 3.04,\n", - " 3.045,\n", - " 3.05,\n", - " 3.055,\n", - " 3.06,\n", - " 3.065,\n", - " 3.07,\n", - " 3.075,\n", - " 3.08,\n", - " 3.085,\n", - " 3.09,\n", - " 3.095,\n", - " 3.1,\n", - " 3.105,\n", - " 3.11,\n", - " 3.115,\n", - " 3.12,\n", - " 3.125,\n", - " 3.13,\n", - " 3.135,\n", - " 3.14,\n", - " 3.145,\n", - " 3.15,\n", - " 3.155,\n", - " 3.16,\n", - " 3.165,\n", - " 3.17,\n", - " 3.175,\n", - " 3.18,\n", - " 3.185,\n", - " 3.19,\n", - " 3.195,\n", - " 3.2,\n", - " 3.205,\n", - " 3.21,\n", - " 3.215,\n", - " 3.22,\n", - " 3.225,\n", - " 3.23,\n", - " 3.235,\n", - " 3.24,\n", - " 3.245,\n", - " 3.25,\n", - " 3.255,\n", - " 3.26,\n", - " 3.265,\n", - " 3.27,\n", - " 3.275,\n", - " 3.28,\n", - " 3.285,\n", - " 3.29,\n", - " 3.295,\n", - " 3.3,\n", - " 3.305,\n", - " 3.31,\n", - " 3.315,\n", - " 3.32,\n", - " 3.325,\n", - " 3.33,\n", - " 3.335,\n", - " 3.34,\n", - " 3.345,\n", - " 3.35,\n", - " 3.355,\n", - " 3.36,\n", - " 3.365,\n", - " 3.37,\n", - " 3.375,\n", - " 3.38,\n", - " 3.385,\n", - " 3.39,\n", - " 3.395,\n", - " 3.4,\n", - " 3.405,\n", - " 3.41,\n", - " 3.415,\n", - " 3.42,\n", - " 3.425,\n", - " 3.43,\n", - " 3.435,\n", - " 3.44,\n", - " 3.445,\n", - " 3.45,\n", - " 3.455,\n", - " 3.46,\n", - " 3.465,\n", - " 3.47,\n", - " 3.475,\n", - " 3.48,\n", - " 3.485,\n", - " 3.49,\n", - " 3.495,\n", - " 3.5,\n", - " 3.505,\n", - " 3.51,\n", - " 3.515,\n", - " 3.52,\n", - " 3.525,\n", - " 3.53,\n", - " 3.535,\n", - " 3.54,\n", - " 3.545,\n", - " 3.55,\n", - " 3.555,\n", - " 3.56,\n", - " 3.565,\n", - " 3.57,\n", - " 3.575,\n", - " 3.58,\n", - " 3.585,\n", - " 3.59,\n", - " 3.595,\n", - " 3.6,\n", - " 3.605,\n", - " 3.61,\n", - " 3.615,\n", - " 3.62,\n", - " 3.625,\n", - " 3.63,\n", - " 3.635,\n", - " 3.64,\n", - " 3.645,\n", - " 3.65,\n", - " 3.655,\n", - " 3.66,\n", - " 3.665,\n", - " 3.67,\n", - " 3.675,\n", - " 3.68,\n", - " 3.685,\n", - " 3.69,\n", - " 3.695,\n", - " 3.7,\n", - " 3.705,\n", - " 3.71,\n", - " 3.715,\n", - " 3.72,\n", - " 3.725,\n", - " 3.73,\n", - " 3.735,\n", - " 3.74,\n", - " 3.745,\n", - " 3.75,\n", - " 3.755,\n", - " 3.76,\n", - " 3.765,\n", - " 3.77,\n", - " 3.775,\n", - " 3.78,\n", - " 3.785,\n", - " 3.79,\n", - " 3.795,\n", - " 3.8,\n", - " 3.805,\n", - " 3.81,\n", - " 3.815,\n", - " 3.82,\n", - " 3.825,\n", - " 3.83,\n", - " 3.835,\n", - " 3.84,\n", - " 3.845,\n", - " 3.85,\n", - " 3.855,\n", - " 3.86,\n", - " 3.865,\n", - " 3.87,\n", - " 3.875,\n", - " 3.88,\n", - " 3.885,\n", - " 3.89,\n", - " 3.895,\n", - " 3.9,\n", - " 3.905,\n", - " 3.91,\n", - " 3.915,\n", - " 3.92,\n", - " 3.925,\n", - " 3.93,\n", - " 3.935,\n", - " 3.94,\n", - " 3.945,\n", - " 3.95,\n", - " 3.955,\n", - " 3.96,\n", - " 3.965,\n", - " 3.97,\n", - " 3.975,\n", - " 3.98,\n", - " 3.985,\n", - " 3.99,\n", - " 3.995,\n", - " 4,\n", - " 4.005,\n", - " 4.01,\n", - " 4.015,\n", - " 4.02,\n", - " 4.025,\n", - " 4.03,\n", - " 4.035,\n", - " 4.04,\n", - " 4.045,\n", - " 4.05,\n", - " 4.055,\n", - " 4.06,\n", - " 4.065,\n", - " 4.07,\n", - " 4.075,\n", - " 4.08,\n", - " 4.085,\n", - " 4.09,\n", - " 4.095,\n", - " 4.1,\n", - " 4.105,\n", - " 4.11,\n", - " 4.115,\n", - " 4.12,\n", - " 4.125,\n", - " 4.13,\n", - " 4.135,\n", - " 4.14,\n", - " 4.145,\n", - " 4.15,\n", - " 4.155,\n", - " 4.16,\n", - " 4.165,\n", - " 4.17,\n", - " 4.175,\n", - " 4.18,\n", - " 4.185,\n", - " 4.19,\n", - " 4.195,\n", - " 4.2,\n", - " 4.205,\n", - " 4.21,\n", - " 4.215,\n", - " 4.22,\n", - " 4.225,\n", - " 4.23,\n", - " 4.235,\n", - " 4.24,\n", - " 4.245,\n", - " 4.25,\n", - " 4.255,\n", - " 4.26,\n", - " 4.265,\n", - " 4.27,\n", - " 4.275,\n", - " 4.28,\n", - " 4.285,\n", - " 4.29,\n", - " 4.295,\n", - " 4.3,\n", - " 4.305,\n", - " 4.31,\n", - " 4.315,\n", - " 4.32,\n", - " 4.325,\n", - " 4.33,\n", - " 4.335,\n", - " 4.34,\n", - " 4.345,\n", - " 4.35,\n", - " 4.355,\n", - " 4.36,\n", - " 4.365,\n", - " 4.37,\n", - " 4.375,\n", - " 4.38,\n", - " 4.385,\n", - " 4.39,\n", - " 4.395,\n", - " 4.4,\n", - " 4.405,\n", - " 4.41,\n", - " 4.415,\n", - " 4.42,\n", - " 4.425,\n", - " 4.43,\n", - " 4.435,\n", - " 4.44,\n", - " 4.445,\n", - " 4.45,\n", - " 4.455,\n", - " 4.46,\n", - " 4.465,\n", - " 4.47,\n", - " 4.475,\n", - " 4.48,\n", - " 4.485,\n", - " 4.49,\n", - " 4.495,\n", - " 4.5,\n", - " 4.505,\n", - " 4.51,\n", - " 4.515,\n", - " 4.52,\n", - " 4.525,\n", - " 4.53,\n", - " 4.535,\n", - " 4.54,\n", - " 4.545,\n", - " 4.55,\n", - " 4.555,\n", - " 4.56,\n", - " 4.565,\n", - " 4.57,\n", - " 4.575,\n", - " 4.58,\n", - " 4.585,\n", - " 4.59,\n", - " 4.595,\n", - " 4.6,\n", - " 4.605,\n", - " 4.61,\n", - " 4.615,\n", - " 4.62,\n", - " 4.625,\n", - " 4.63,\n", - " 4.635,\n", - " 4.64,\n", - " 4.645,\n", - " 4.65,\n", - " 4.655,\n", - " 4.66,\n", - " 4.665,\n", - " 4.67,\n", - " 4.675,\n", - " 4.68,\n", - " 4.685,\n", - " 4.69,\n", - " 4.695,\n", - " 4.7,\n", - " 4.705,\n", - " 4.71,\n", - " 4.715,\n", - " 4.72,\n", - " 4.725,\n", - " 4.73,\n", - " 4.735,\n", - " 4.74,\n", - " 4.745,\n", - " 4.75,\n", - " 4.755,\n", - " 4.76,\n", - " 4.765,\n", - " 4.77,\n", - " 4.775,\n", - " 4.78,\n", - " 4.785,\n", - " 4.79,\n", - " 4.795,\n", - " 4.8,\n", - " 4.805,\n", - " 4.81,\n", - " 4.815,\n", - " 4.82,\n", - " 4.825,\n", - " 4.83,\n", - " 4.835,\n", - " 4.84,\n", - " 4.845,\n", - " 4.85,\n", - " 4.855,\n", - " 4.86,\n", - " 4.865,\n", - " 4.87,\n", - " 4.875,\n", - " 4.88,\n", - " 4.885,\n", - " 4.89,\n", - " 4.895,\n", - " 4.9,\n", - " 4.905,\n", - " 4.91,\n", - " 4.915,\n", - " 4.92,\n", - " 4.925,\n", - " 4.93,\n", - " 4.935,\n", - " 4.94,\n", - " 4.945,\n", - " 4.95,\n", - " 4.955,\n", - " 4.96,\n", - " 4.965,\n", - " 4.97,\n", - " 4.975,\n", - " 4.98,\n", - " 4.985,\n", - " 4.99,\n", - " 4.995,\n", - " ...]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "yoda", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py index 980f98279e..cef39594c4 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -12,6 +12,7 @@ import gzip import pickle import os +import threading class RFInteractor: "" @@ -43,18 +44,35 @@ def __init__(self, self.subscriber = self.pub_context.socket(zmq.SUB) self.subscriber.bind(self.ZmqOutAddress) self.subscriber.setsockopt_string(zmq.SUBSCRIBE, "") # for now subscribe to all - + # self.running = True + self.subscriber_thread = None + self.running_event = threading.Event() + self.lock = threading.Lock() self.sub_dict = {} if self.ZmqInAddress is not None: self.req_context = zmq.Context() self.requester = self.req_context.socket(zmq.REP) self.requester.bind(self.ZmqInAddress) - self.poller = zmq.Poller() - self.poller.register(self.requester, zmq.POLLIN) + # self.poller = zmq.Poller() + # self.poller.register(self.requester, zmq.POLLIN) self.cont_req_off = 0 self.cont_req_threshold = 10 + if self.ZmqInAddress is not None and self.ZmqOutAddress is not None: + self.poller = zmq.Poller() + self.poller.register(self.requester, zmq.POLLIN) + self.poller.register(self.subscriber, zmq.POLLIN) + + self.shared_dict = SharedData() + elif self.ZmqInAddress is not None and self.ZmqOutAddress is None: + self.poller = zmq.Poller() + self.poller.register(self.requester, zmq.POLLIN) + else: + pass + + self.running = True + print('ZMQ Real Time interactor for FAST initialized. \n PUB-SUB protocol: {} | REQ-REP protocol: {}'.format(self.ZmqOutAddress, self.ZmqInAddress)) @@ -80,6 +98,10 @@ def _update_dict(update_, dict_): return dict_ + def get_shared_dict(self): + with self.lock: + return self.sub_dict + def update_plot(self): if not self.fig: # Exclude 'Time' and 'TurbId' from subplot titles @@ -117,39 +139,44 @@ def static_plot(self): return plt.show() - - - def fast_sub(self, N_plots_update = 100, plot: bool = True): + def fast_sub(self, N_plots_update = 100, plot: bool = True, shared: bool = False): """ - Dummy function for the subscription to the FAST channel - TODO: Need to split acquisition and plotting, maybe multiprocessing, to avoid messages loss + """ - count = 0 - - while True: + + while True: update_ = self.subscriber.recv_json() - + print(update_) if self.verbose: print(update_) - self.sub_dict = self._update_dict(update_, self.sub_dict) + if not shared: + self.sub_dict = self._update_dict(update_, self.sub_dict) + else: + self.shared_dict.update_dict(update_) if count == 0: self.data_length = len(self.sub_dict) count += 1 - if count % N_plots_update == 0 and plot: + if count % N_plots_update == 0 and plot and not shared: self.update_plot() # time.sleep(1) # check if communication is still open if list(update_.values())[2:] == [0.0]*(self.data_length - 2): break + # except Exception as e: + # print('{}'.format(e)) + # self.running_event.set() print('Subscription to FAST channel closed.') self.subscriber.close() self.pub_context.term() + if shared: + self.running_event.set() + # saving only at the end to avoid performance issues. Data is available # real-time in self.sub_dict anyway @@ -183,15 +210,102 @@ def fast_rep(self, rep_dict, verbose: bool = False): print('No request received, waiting...') self.cont_req_off += 1 + if self.cont_req_off > self.cont_req_threshold: print('Requester closed due to inactivity.') self.requester.close() self.req_context.term() + self.running_event.set() return True return False + def zmq_full_communication(self, rep_dict, verbose: bool = False): + """ + Full communication between the subscriber and the requester + """ + count = 0 + socks = dict(self.poller.poll(1000)) + if self.requester in socks and socks[self.requester] == zmq.POLLIN: + req_ = self.requester.recv_string() + + requests = req_.split(";") + response = ';'.join(map(str, rep_dict.values())) + ';' + + response = response = ';'.join(map(str, rep_dict.values())) + ';' + + # Send the response + self.requester.send_string(response) + + if verbose: + print(f'Response sent: {response}') + + elif self.subscriber in socks and socks[self.subscriber] == zmq.POLLIN: + update_ = self.subscriber.recv_json() + if self.verbose: + print(update_) + + self.sub_dict = self._update_dict(update_, self.sub_dict) + + if count == 0: + self.data_length = len(self.sub_dict) + + count += 1 + # if count % N_plots_update == 0 and plot and not shared: + # self.update_plot() + # # time.sleep(1) + + # check if communication is still open + if list(update_.values())[2:] == [0.0]*(self.data_length - 2): + self.cont_req_off += 1 + else: + if verbose: + print('No request received, waiting...') + self.cont_req_off += 1 + + if self.cont_req_off > self.cont_req_threshold: + print('Requester closed due to inactivity.') + self.requester.close() + self.req_context.term() + self.running_event.set() + + return True + + return False + + + +class SharedData: + """ + Shared data class for multiprocessing + """ + def __init__(self): + self.shared_dict = {} + self.lock = threading.Lock() + + def update_dict(self, update_): + with self.lock: + for key, value in update_.items(): + if key not in self.shared_dict: + self.shared_dict[key] = [] + self.shared_dict[key].append(value) + else: + self.shared_dict[key].append(value) + + return self.shared_dict + + def get_shared_dict(self): + with self.lock: + return self.shared_dict + + def clear_dict(self): + with self.lock: + self.shared_dict = {} + + return self.shared_dict + + From 24d2e53300a50fe48321b1a6d3fd293c4e7bafc7 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Tue, 25 Jun 2024 13:38:13 +0200 Subject: [PATCH 13/14] added python examples --- README.rst | 11 +- zmq_coupling_tests/ex01.py | 58 ++++ zmq_coupling_tests/ex01_sub.py | 38 --- zmq_coupling_tests/ex02.py | 54 ++++ zmq_coupling_tests/ex03.py | 106 +++++++ zmq_coupling_tests/subscribed_messages.pkl | Bin 0 -> 399532 bytes .../OFZMQ_test01/OFZMQ_test01.ech | 2 +- .../OFZMQ_test01/OFZMQ_test01_2.AD.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01_2.ED.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01_2.SrvD.sum | 4 +- .../OFZMQ_test01/OFZMQ_test01_2.UA.sum | 2 +- .../OFZMQ_test01/OFZMQ_test01_2.ech | 2 +- .../OFZMQ_test03/OFZMQ_test03.AD.sum | 2 +- .../OFZMQ_test03/OFZMQ_test03.ED.sum | 2 +- .../OFZMQ_test03/OFZMQ_test03.SrvD.sum | 4 +- .../OFZMQ_test03/OFZMQ_test03.ech | 2 +- .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 2 +- .../OFZMQ_test04/OFZMQ_test04.AD.sum | 2 +- .../OFZMQ_test04/OFZMQ_test04.ED.sum | 2 +- .../OFZMQ_test04/OFZMQ_test04.SrvD.sum | 4 +- .../OFZMQ_test04/OFZMQ_test04.ech | 10 +- .../OFZMQ_test04/OFZMQ_test04.fst | 7 +- .../templatesDir/OFZMQ_test04/template.ech | 29 ++ .../templatesDir/OFZMQ_test04/template.fst | 73 +++++ .../zmq_python_toolbox/FullZMQ.ipynb | 271 +++--------------- .../zmq_python_toolbox/REP.ipynb | 116 ++++++++ .../zmq_python_toolbox/SUB.ipynb | 2 +- .../real_fast_interactor.py | 56 +++- 28 files changed, 559 insertions(+), 306 deletions(-) create mode 100644 zmq_coupling_tests/ex01.py delete mode 100644 zmq_coupling_tests/ex01_sub.py create mode 100644 zmq_coupling_tests/ex02.py create mode 100644 zmq_coupling_tests/ex03.py create mode 100644 zmq_coupling_tests/subscribed_messages.pkl create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/template.ech create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test04/template.fst diff --git a/README.rst b/README.rst index 959697e930..379ce7a067 100644 --- a/README.rst +++ b/README.rst @@ -13,10 +13,19 @@ ZMQ Main changes in this PR ---- -- Added ZMQ connection to OpenFAST +- Added ZMQ connection capabilities to OpenFAST: + - PUB-SUB connection to receive solved variables from OpenFAST at runtime (all `y_FAST` is available) + - REQ-REP to interact with OpenFAST at runtime (eg. pitch control, wind speed, etc). - Modified input files to include ZMQ parameters - Added Python routines and tests to interface with OpenFAST (to be moved to `openfast-toolbox`?) +The folder `zmq_python_toolbox` contains the Python routines to interact with OpenFAST via ZMQ. + +- `ex01` shows how to subscribe to a PUB-SUB socket from OpenFAST and how to receive the data. +- `ex02` shows how to interact with OpenFAST via REQ-REP sockets. +- `ex03` shows how to interact with OpenFAST using both sockets at the same time. + + Updates --- - Added end of simulation message to ZMQ, so that receiver can know when the simulation is over and diff --git a/zmq_coupling_tests/ex01.py b/zmq_coupling_tests/ex01.py new file mode 100644 index 0000000000..9252fb2ed1 --- /dev/null +++ b/zmq_coupling_tests/ex01.py @@ -0,0 +1,58 @@ +import zmq +from openfast_toolbox.io import FASTOutputFile +import numpy as np + +def update_dict(update_, dict_): + for key, value in update_.items(): + if key not in dict_: + dict_[key] = [] + dict_[key].append(value) + else: + dict_[key].append(value) + + return dict_ + + +def main(sub_port: str = 'tcp://127.0.0.1:5557'): + context = zmq.Context() + + subscriber = context.socket(zmq.SUB) + subscriber.bind(sub_port) + subscriber.setsockopt_string(zmq.SUBSCRIBE, "") # for now subscribe to all + + poller = zmq.Poller() + poller.register(subscriber, zmq.POLLIN) + + subscribed_messages = {} + + while True: + events = dict(poller.poll(1000)) + + if subscriber in events and events[subscriber] == zmq.POLLIN: + message = subscriber.recv_json() + print(f"Received message: {message}") + update_dict(message, subscribed_messages) + + + # Assuming you want to close the subscriber socket based on specific conditions in the message + if list(message.values())[2:] == [0.0] * (len(message) - 2): + print('Closing SUB socket') + subscriber.close() + break + + + fastout = FASTOutputFile('./templatesDir/OFZMQ_test01/OFZMQ_test01_2.outb').toDataFrame() + + assert np.allclose(fastout['Wind1VelX_[m/s]'][:-2], subscribed_messages[' Wind1VelX_(m/s)'][:-1], atol=1e-5) + assert np.allclose(fastout['Azimuth_[deg]'][:-2], subscribed_messages[' Azimuth_(deg)'][:-1], atol=1e-5) + assert np.allclose(fastout['GenTq_[kN-m]'][:-2], subscribed_messages[' GenTq_(kN-m)'][:-1], atol=1e-5) + assert np.allclose(fastout['GenPwr_[kW]'][:-2], subscribed_messages[' GenPwr_(kW)'][:-1], atol=1e-5) + + print('Test 01 ZMQ - Message Integrity: PASSED') + + return True + + +if __name__ == "__main__": + main() + \ No newline at end of file diff --git a/zmq_coupling_tests/ex01_sub.py b/zmq_coupling_tests/ex01_sub.py deleted file mode 100644 index 9ea13ea577..0000000000 --- a/zmq_coupling_tests/ex01_sub.py +++ /dev/null @@ -1,38 +0,0 @@ -''' -Example 1: Simple subscriber to FAST - -This example shows how to create a simple subscriber that connects to a FAST to -get results at runtime. -''' -from zmq_python_toolbox.real_fast_interactor import RFInteractor -import os -import multiprocessing as mp -import concurrent.futures - -dir = os.path.dirname(__file__) -fstdir = os.path.join(dir, 'templateDir') - - -# Create a subscriber -sub = RFInteractor(ZmqInAddress=None, ZmqOutAddress="tcp://127.0.0.1:5557", verbose=True) - - -def run_openfast(): - return os.system('openfast ./templateDir/Main02.fst') - -def run_sub(): - return sub.fast_sub(25) - -def run_in_parallel(): - with concurrent.futures.ProcessPoolExecutor() as executor: - p1 = executor.submit(run_openfast) - p2 = executor.submit(run_sub) - print(p1.result()) - print(p2.result()) - -if __name__ == '__main__': - # create two processes, one for zmq sub and other for openfast - run_in_parallel() - - - \ No newline at end of file diff --git a/zmq_coupling_tests/ex02.py b/zmq_coupling_tests/ex02.py new file mode 100644 index 0000000000..f6d5a7803d --- /dev/null +++ b/zmq_coupling_tests/ex02.py @@ -0,0 +1,54 @@ +import zmq +import time +from openfast_toolbox.io import FASTInputFile, FASTOutputFile +import numpy as np + +def main(rep_port: str = 'tcp://127.0.0.1:5555'): + context = zmq.Context() + + responder = context.socket(zmq.REP) + responder.bind(rep_port) + + poller = zmq.Poller() + poller.register(responder, zmq.POLLIN) + + limit = 0 + n_communications = 0 + + while True: + events = dict(poller.poll(1000)) + + if responder in events and events[responder] == zmq.POLLIN: + message = responder.recv_string() + print(f"Received request: {message}") + + msg_dict = {'VelH': 23, 'VelV': 0, 'BlPitchCom1': np.deg2rad(35)} + response = ';'.join(map(str, msg_dict.values())) + ';' + responder.send_string(response) + + n_communications += 1 + + else: + limit += 1 + if limit == 5: + print('Closing REP socket') + responder.close() + break + + fastin = FASTInputFile('./templatesDir/OFZMQ_test03/OFZMQ_test03.fst') + + n_expected_communications = int(fastin['TMax'] / fastin['ZmqInDT']) + 1 + + assert n_communications == n_expected_communications + print('Test 03A ZMQ - Communication Integrity (nbr of communications): PASSED') + + fastout = FASTOutputFile('./templatesDir/OFZMQ_test03/OFZMQ_test03.outb').toDataFrame() + assert np.allclose(fastout['Wind1VelX_[m/s]'][50:], [23] * len(fastout['Wind1VelX_[m/s]'][50:])) + assert np.allclose(fastout['Wind1VelY_[m/s]'][50:], [0] * len(fastout['Wind1VelY_[m/s]'][50:])) + assert np.allclose(fastout['BlPitchC1_[deg]'][50:], [35] * len(fastout['BlPitchC1_[deg]'][50:])) + + print('Test 03B ZMQ - Message Integrity: PASSED') + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/zmq_coupling_tests/ex03.py b/zmq_coupling_tests/ex03.py new file mode 100644 index 0000000000..eb0df63bfc --- /dev/null +++ b/zmq_coupling_tests/ex03.py @@ -0,0 +1,106 @@ +import zmq +import threading +import time +from openfast_toolbox.io import FASTInputFile, FASTOutputFile +import numpy as np +import pickle + +def update_dict(update_, dict_): + with threading.Lock(): + for key, value in update_.items(): + if key not in dict_: + dict_[key] = [] + dict_[key].append(value) + else: + dict_[key].append(value) + + return dict_ + + +def pub_sub_handler(context, sub_port, subscribed_messages): + subscriber = context.socket(zmq.SUB) + subscriber.bind(sub_port) + subscriber.setsockopt_string(zmq.SUBSCRIBE, "") # Subscribe to all messages + + while True: + message = subscriber.recv_json() + # print(f"Received message from subscriber: {message}") + update_dict(message, subscribed_messages) + + # Assuming you want to close the subscriber socket based on specific conditions in the message + if list(message.values())[2:] == [0.0] * (len(message) - 2): + print('Closing SUB socket') + subscriber.close() + + with open('subscribed_messages.pkl', 'wb') as f: + pickle.dump(subscribed_messages, f) + + + break + +def req_rep_handler(context, rep_port, subscribed_messages): + responder = context.socket(zmq.REP) + responder.bind(rep_port) + n_communications = 0 + + poller = zmq.Poller() + poller.register(responder, zmq.POLLIN) + + limit = 0 + + while True: + + socks = dict(poller.poll(1000)) + + if responder in socks and socks[responder] == zmq.POLLIN: + message = responder.recv_string() + # print(f"Received request: {message}") + + msg_dict = {'VelH': 8, 'BlPitchCom1': np.deg2rad(15)} + response = ';'.join(map(str, msg_dict.values())) + ';' + responder.send_string(response) + + n_communications += 1 + else: + limit += 1 + if limit == 5: + print('Closing REP socket') + responder.close() + break + +def main(sub_port: str = 'tcp://127.0.0.1:5557', rep_port: str = 'tcp://127.0.0.1:5555'): + context = zmq.Context() # Create a single context + subscribed_messages = {} + + # Create and start threads + pub_sub_thread = threading.Thread(target=pub_sub_handler, args=(context, sub_port, subscribed_messages)) + req_rep_thread = threading.Thread(target=req_rep_handler, args=(context, rep_port, subscribed_messages)) + + pub_sub_thread.start() + req_rep_thread.start() + + # Join threads to the main thread to keep the main program running + pub_sub_thread.join() + req_rep_thread.join() + + time.sleep(1) # Wait for the threads to close + + fastin = FASTInputFile('./templatesDir/OFZMQ_test04/OFZMQ_test04.fst') + fastout = FASTOutputFile('./templatesDir/OFZMQ_test04/OFZMQ_test04.outb').toDataFrame() + + assert np.allclose(fastout['Wind1VelX_[m/s]'][50:], [8] * len(fastout['Wind1VelX_[m/s]'][50:])) + assert np.allclose(fastout['BlPitchC1_[deg]'][50:], [15] * len(fastout['BlPitchC1_[deg]'][50:])) + + print('Test 04A ZMQ - Message Integrity (REP): PASSED') + + assert np.allclose(fastout['Wind1VelX_[m/s]'][1:-2], subscribed_messages[' Wind1VelX_(m/s)'][:-1], atol=1e-5) + assert np.allclose(fastout['Azimuth_[deg]'][1:-2], subscribed_messages[' Azimuth_(deg)'][:-1], atol=1e-5) + assert np.allclose(fastout['GenTq_[kN-m]'][1:-2], subscribed_messages[' GenTq_(kN-m)'][:-1], atol=1e-5) + assert np.allclose(fastout['GenPwr_[kW]'][1:-2], subscribed_messages[' GenPwr_(kW)'][:-1], atol=1e-5) + + print('Test 04B ZMQ - Message Integrity (PUB): PASSED') + + return True + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/zmq_coupling_tests/subscribed_messages.pkl b/zmq_coupling_tests/subscribed_messages.pkl new file mode 100644 index 0000000000000000000000000000000000000000..960e31a89c8b15f7289581dd2a9b005c9a60e30a GIT binary patch literal 399532 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%0AxH{snTgW!6+qn{tAL(t1*p-0n%aV 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

VG#@PmNh zbbh}j=sLeR3jAW3eVLq9px$W6Mgjts>Uo#C0sP}|UcVOL_a`T<#jJm_?BEf5Sk@~* zi=JAhuU%DrB6U4syrE9ncYqIF1fsY5NcF8S-w*I!aX-YQ65w@8ws*TUfdn74>lyfA zlk6N=JX*Z(z3wJhQE!+)FJ1RUxo8J9zjY9TwaX(==t5}!JAp&~ zhL~vthGnT9#|bpvtxKRUwpM*|l-m*leH|Zr@+52LU`iq&2=eZoqf2n~N>O$*LC13o z6ATl~It#wXt=k)W*UW+}o!3o{9s+nQO}DEOCAjEX5K{~A9Gi}Ox&*06KTH0{v;V93 zpR)j7UWFn)Jz3#m?h z9_?NJ{#SrdJ4Y*;nvL)`BW&3dr1Q5_g?}xSPoWPB-_srwz*p|mH_z<^hPd0tjCV zb*%RgT+cAud5hp!iP_a<1c@*D1~G+TgzMd*6+qzN(OXIbnb35WV$=cx-O2az$XN+h zLS~JzCXkju|84D+W1J zJp$L%2<9!pd70)d)Qs2bG#;NwopF68wiD=U_-XQ4BmGX?*DLde#eWW;a=`yhx7W9N zSON}wnr=e{73jnVoCYcOU3%dOOVHB^cSpPg1eaPS{^bbRu#eXi4vFB@#F&kqjT-x? z>xHfuhYVqWFef*~BzZu%BgXJifK5*Q$p@)aBV71^<;c~#OD56~8RhfGnd-%W%|W{m zo&kss%fw|#Kum<~kU7mjwuH+~4WPP+4G^X{P}7QYuNPeP1#Gpctr5~dwrv!@hy{Pmxl7V=2n7-{8n({=a|+7#jxzu^sS8fPOzYD zO5H1h9f3-9R4hAh{8sDm1+Ys?#XVX;5clFih#Wz$xFGmEASt3`Sn&g3w;aFiyu191 zmj+eko~TV-RaAz_jw^0@kV{FiSgdZk5Rf|K!x7^Ez}{sCX&VcY6}a~7_XLpk_u|1< zR8Z;Ts(R*Ao$fz0fb>3q4BeNAWd&qj;m`38`DInPQ!mKY&noY3P^kTZpYgYmgTcyy}a@trOO!0G+G z>P@j@LVy1;Sk8Pkg!Uoe?A|ZF_R@edH9qq6T+*r~BHgf@Z@UaVT|l`pR0-@IM1&DW F{|9)HehmNs literal 0 HcmV?d00001 diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech index 3ea63f569d..49d11aa9f2 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 11:14:28. +This file of echoed input was generated by OpenFAST on 25-Jun-2024 at 11:40:53. Data from OpenFAST primary input file "OFZMQ_test01.fst": diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum index 9042e4d988..481fc7d61d 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 21-Jun-2024 at 15:09:55. +This summary information was generated by AeroDyn on 25-Jun-2024 at 11:48:04. ====== General Options ============================================================================ 1 WakeMod - Type of wake/induction model: Blade-Element/Momentum Theory diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum index fee12880f1..d3e3f94a78 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 21-Jun-2024 at 15:09:55. +This summary information was generated by ElastoDyn on 25-Jun-2024 at 11:48:04. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum index d034a45235..ac81dcf94d 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 21-Jun-2024 at 15:09:55. +This summary file was generated by ServoDyn on 25-Jun-2024 at 11:48:04. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 21-Jun-2024 at 15:09:55. +This summary file was closed on 25-Jun-2024 at 11:48:04. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum index fb71b37adb..e6339c3ad9 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.UA.sum @@ -1,5 +1,5 @@ -Predictions were generated on 21-Jun-2024 at 15:09:55 +Predictions were generated on 25-Jun-2024 at 11:48:04 OpenFAST diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech index 8422c245df..3de306c022 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01_2.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 15:09:55. +This file of echoed input was generated by OpenFAST on 25-Jun-2024 at 11:48:04. Data from OpenFAST primary input file "OFZMQ_test01_2.fst": diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum index ce75a11ad4..48890d48f3 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 21-Jun-2024 at 16:47:09. +This summary information was generated by AeroDyn on 25-Jun-2024 at 12:03:16. ====== General Options ============================================================================ 0 WakeMod - Type of wake/induction model: steady diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum index 241aae9138..2c764a0866 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 21-Jun-2024 at 16:47:09. +This summary information was generated by ElastoDyn on 25-Jun-2024 at 12:03:16. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum index 354dfc70aa..845a1761b7 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 21-Jun-2024 at 16:47:09. +This summary file was generated by ServoDyn on 25-Jun-2024 at 12:03:16. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 21-Jun-2024 at 16:47:09. +This summary file was closed on 25-Jun-2024 at 12:03:16. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech index 1e4c672f50..9919ce2b0e 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test03/OFZMQ_test03.ech @@ -1,5 +1,5 @@ -This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 16:47:09. +This file of echoed input was generated by OpenFAST on 25-Jun-2024 at 12:03:16. Data from OpenFAST primary input file "OFZMQ_test03.fst": diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat index b310013450..ca1d98742d 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat @@ -30,7 +30,7 @@ False PtfmYDOF - Platform yaw rotation DOF (flag) 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] 90 Azimuth - Initial azimuth angle for blade 1 (degrees) - 0 RotSpeed - Initial or fixed rotor speed (rpm) + 7 RotSpeed - Initial or fixed rotor speed (rpm) 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) 0 TTDspFA - Initial fore-aft tower-top displacement (meters) 0 TTDspSS - Initial side-to-side tower-top displacement (meters) diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum index d292eb861f..fb3632e0a1 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.AD.sum @@ -1,5 +1,5 @@ -This summary information was generated by AeroDyn on 21-Jun-2024 at 17:07:27. +This summary information was generated by AeroDyn on 25-Jun-2024 at 12:48:22. ====== General Options ============================================================================ 0 WakeMod - Type of wake/induction model: steady diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum index 855519f514..2177c7150f 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ED.sum @@ -1,5 +1,5 @@ -This summary information was generated by ElastoDyn on 21-Jun-2024 at 17:07:27. +This summary information was generated by ElastoDyn on 25-Jun-2024 at 12:48:22. Turbine features: diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum index 33d6572ec6..7366964dcf 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.SrvD.sum @@ -1,5 +1,5 @@ -This summary file was generated by ServoDyn on 21-Jun-2024 at 17:07:27. +This summary file was generated by ServoDyn on 25-Jun-2024 at 12:48:22. Unless specified, units are consistent with Input units, [SI] system is advised. ____________________________________________________________________________________________________ @@ -62,5 +62,5 @@ ________________________________________________________________________________ ____________________________________________________________________________________________________ Bladed Interface: not used -This summary file was closed on 21-Jun-2024 at 17:07:27. +This summary file was closed on 25-Jun-2024 at 12:48:22. diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech index f3bcee4d1a..e7ef164960 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.ech @@ -1,11 +1,11 @@ -This file of echoed input was generated by OpenFAST on 21-Jun-2024 at 17:07:27. +This file of echoed input was generated by OpenFAST on 25-Jun-2024 at 12:48:22. Data from OpenFAST primary input file "OFZMQ_test04.fst": FTitle - File Header: File Description (line 2) - "FAST - ZMQ communication, test 4: simultaneous REQ-REP-PUB-SUB protocol" + "ZMQ Test#4" T Echo - Echo input data to .ech (flag) AbortLevel - Error level when simulation should abort (string) @@ -96,11 +96,11 @@ Data from OpenFAST primary input file "OFZMQ_test04.fst": T ZmqOn - ZMQ communication (flag) ZmqInAddress - REQ-REP localhost address "tcp://127.0.0.1:5555" - 3 ZmqInNbr - Number of parameters to be requested + 2 ZmqInNbr - Number of parameters to be requested ZmqInChannels - Channels to be requested at communication time - "VelH" "VelV" "BldPitchCom1" + "VelH" "BldPitchCom1" ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation - "0.5" + "default" ZmqOutAddress - PUB-SUB localhost address "tcp://127.0.0.1:5557" 4 ZmqOutNbr - Number of channels to be broadcasted diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst index 196d62cd9c..fe5ffd2a90 100644 --- a/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/OFZMQ_test04.fst @@ -1,5 +1,5 @@ ------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- -FAST - ZMQ communication, test 4: simultaneous REQ-REP-PUB-SUB protocol +ZMQ Test#4 ---------------------- SIMULATION CONTROL -------------------------------------- True Echo - Echo input data to .ech (flag) "FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} @@ -74,11 +74,10 @@ false VTK_fields - Write mesh fields to VTK data files? (flag) {tru ---------------------- ZMQ Communication --------------------------------------- True ZmqOn - ZMQ communication (flag) "tcp://127.0.0.1:5555" ZmqInAddress - REQ-REP localhost address -3 ZmqInNbr - Number of parameters to be requested +2 ZmqInNbr - Number of parameters to be requested "VelH" -"VelV" "BldPitchCom1" ZmqInChannels - Channels to be requested at communication time -0.5 ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation +default ZmqInDT - time step for in communication, FAST will keep it constant in between (sample & hold), default is same DT of simulation "tcp://127.0.0.1:5557" ZmqOutAddress - PUB-SUB localhost address 4 ZmqOutNbr - Number of channels to be broadcasted "Wind1VelX" diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/template.ech b/zmq_coupling_tests/templatesDir/OFZMQ_test04/template.ech new file mode 100644 index 0000000000..48dc7d2c81 --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/template.ech @@ -0,0 +1,29 @@ + +This file of echoed input was generated by OpenFAST on 25-Jun-2024 at 11:23:14. + +Data from OpenFAST primary input file "template.fst": + + + FTitle - File Header: File Description (line 2) + "FAST Certification Test #26: NREL 5.0 MW Baseline Wind Turbine (Onshore)" + + T Echo - Echo input data to .ech (flag) + AbortLevel - Error level when simulation should abort (string) + "FATAL" + 1.0015E+00 TMax - Total run time (s) + 1.5000E-03 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for inputs and outputs {0=nearest neighbor ,1=linear, 2=quadratic} (-) + 0 NumCrctn - Number of corrections{0=explicit calculation, i.e., no corrections} (-) + 9.9999E+04 DT_UJac - Time between calls to get Jacobians (s) + 1.0000E+06 UJacSclFact - Scaling factor used in Jacobians (-) + + 2 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 0 CompInflow - inflow wind velocities (switch) {0=still air; 1=InflowWind} + 0 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + diff --git a/zmq_coupling_tests/templatesDir/OFZMQ_test04/template.fst b/zmq_coupling_tests/templatesDir/OFZMQ_test04/template.fst new file mode 100644 index 0000000000..fd58ef61ee --- /dev/null +++ b/zmq_coupling_tests/templatesDir/OFZMQ_test04/template.fst @@ -0,0 +1,73 @@ +------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- +FAST Certification Test #26: NREL 5.0 MW Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} + 1.0015 TMax - Total run time (s) + 0.0015 DT - Recommended module time step (s) + 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} + 0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} + 99999 DT_UJac - Time between calls to get Jacobians (s) + 1000000 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ + 2 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} + 0 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} + 0 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} + 1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + 9.80665 Gravity - Gravitational acceleration (m/s^2) + 0 AirDens - Air density (kg/m^3) + 0 WtrDens - Water density (kg/m^3) + 0 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 0 SpdSound - Speed of sound in working fluid (m/s) + 0 Patm - Atmospheric pressure (Pa) [used only for an MHK turbine cavitation check] + 0 Pvap - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check] + 0 WtrDpth - Water depth (m) + 0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NRELOffshrBsline5MW_Onshore_ElastoDyn_BDoutputs.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"../5MW_Baseline/NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"../5MW_Baseline/NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"../5MW_Baseline/NRELOffshrBsline5MW_BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"unused" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"unused" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"NRELOffshrBsline5MW_Onshore_ServoDyn.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" SeaStFile - Name of file containing sea state input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 SttsTime - Amount of time between screen status messages (s) + 99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +"default" DT_Out - Time step for tabular output (s) (or "default") + 0 TStart - Time to begin tabular output (s) + 4 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both 1 and 2, 4: uncompressed binary [.outb, 5: both 1 and 4} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"ES20.12E3" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +True Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) + 0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) + 0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) + 0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) + 1 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] + 1 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] + 1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] + 1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +True LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +True LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ + 0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} + 2 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +False VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] + 15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] diff --git a/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb b/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb index f42bcde42e..b201b91355 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb @@ -69,219 +69,24 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Response sent: 13.459;0;0.0;\n", - "Response sent: 12.114;0;0.0;\n", - "Response sent: 11.085;0;0.1;\n", - "Response sent: 10.177;0;0.1;\n", - "Response sent: 10.805;0;0.2;\n", - "Response sent: 10.215;0;0.2;\n", - "Response sent: 11.486;0;0.30000000000000004;\n", - "Response sent: 11.311;0;0.30000000000000004;\n", - "Response sent: 11.266;0;0.4;\n", - "Response sent: 11.805;0;0.4;\n", - "Response sent: 12.994;0;0.5;\n", - "Response sent: 12.649;0;0.5;\n", - "Response sent: 13.242;0;0.6000000000000001;\n", - "Response sent: 13.065;0;0.6000000000000001;\n", - "Response sent: 12.925;0;0.7000000000000001;\n", - "Response sent: 14.099;0;0.7000000000000001;\n", - "Response sent: 14.393;0;0.8;\n", - "Response sent: 13.228;0;0.8;\n", - "Response sent: 11.834;0;0.9;\n", - "Response sent: 13.468;0;0.9;\n", - "Response sent: 12.941;0;0.0;\n", - "Response sent: 11.981;0;0.0;\n", - "Response sent: 10.435;0;0.1;\n", - "Response sent: 11.239;0;0.1;\n", - "Response sent: 11.445;0;0.2;\n", - "Response sent: 11.087;0;0.2;\n", - "Response sent: 11.424;0;0.30000000000000004;\n", - "Response sent: 11.828;0;0.30000000000000004;\n", - "Response sent: 11.464;0;0.4;\n", - "Response sent: 12.099;0;0.4;\n", - "Response sent: 12.804;0;0.5;\n", - "Response sent: 12.672;0;0.5;\n", - "Response sent: 13.667;0;0.6000000000000001;\n", - "Response sent: 12.127;0;0.6000000000000001;\n", - "Response sent: 13.057;0;0.7000000000000001;\n", - "Response sent: 14.471;0;0.7000000000000001;\n", - "Response sent: 13.118;0;0.8;\n", - "Response sent: 11.804;0;0.8;\n", - "Response sent: 12.47;0;0.9;\n", - "Response sent: 12.857;0;0.9;\n", - "Response sent: 12.887;0;0.0;\n", - "Response sent: 12.099;0;0.0;\n", - "Response sent: 10.478;0;0.1;\n", - "Response sent: 10.573;0;0.1;\n", - "Response sent: 11.317;0;0.2;\n", - "Response sent: 11.115;0;0.2;\n", - "Response sent: 11.023;0;0.30000000000000004;\n", - "Response sent: 12.017;0;0.30000000000000004;\n", - "Response sent: 11.549;0;0.4;\n", - "Response sent: 12.547;0;0.4;\n", - "Response sent: 12.903;0;0.5;\n", - "Response sent: 12.933;0;0.6000000000000001;\n", - "Response sent: 13.313;0;0.6000000000000001;\n", - "Response sent: 12.968;0;0.7000000000000001;\n", - "Response sent: 13.73;0;0.7000000000000001;\n", - "Response sent: 14.745;0;0.8;\n", - "Response sent: 12.559;0;0.8;\n", - "Response sent: 12.068;0;0.9;\n", - "Response sent: 12.922;0;0.9;\n", - "Response sent: 12.577;0;0.0;\n", - "Response sent: 11.952;0;0.0;\n", - "Response sent: 10.984;0;0.1;\n", - "Response sent: 10.602;0;0.1;\n", - "Response sent: 11.336;0;0.2;\n", - "Response sent: 10.487;0;0.2;\n", - "Response sent: 11.56;0;0.30000000000000004;\n", - "Response sent: 12.452;0;0.30000000000000004;\n", - "Response sent: 11.76;0;0.4;\n", - "Response sent: 11.445;0;0.4;\n", - "Response sent: 12.879;0;0.5;\n", - "Response sent: 12.772;0;0.5;\n", - "Response sent: 13.474;0;0.6000000000000001;\n", - "Response sent: 12.97;0;0.6000000000000001;\n", - "Response sent: 13.177;0;0.7000000000000001;\n", - "Response sent: 13.914;0;0.7000000000000001;\n", - "Response sent: 13.949;0;0.8;\n", - "Response sent: 11.735;0;0.8;\n", - "Response sent: 11.35;0;0.9;\n", - "Response sent: 13.568;0;0.9;\n", - "Response sent: 12.867;0;0.0;\n", - "Response sent: 11.962;0;0.0;\n", - "Response sent: 10.264;0;0.1;\n", - "Response sent: 10.95;0;0.1;\n", - "Response sent: 10.409;0;0.2;\n", - "Response sent: 10.827;0;0.2;\n", - "Response sent: 11.529;0;0.30000000000000004;\n", - "Response sent: 11.395;0;0.30000000000000004;\n", - "Response sent: 11.295;0;0.4;\n", - "Response sent: 11.836;0;0.4;\n", - "Response sent: 13.385;0;0.5;\n", - "Response sent: 12.851;0;0.5;\n", - "Response sent: 13.088;0;0.6000000000000001;\n", - "Response sent: 13.372;0;0.6000000000000001;\n", - "Response sent: 13.424;0;0.7000000000000001;\n", - "Response sent: 14.701;0;0.7000000000000001;\n", - "Response sent: 12.517;0;0.8;\n", - "Response sent: 12.309;0;0.8;\n", - "Response sent: 12.699;0;0.9;\n", - "Response sent: 12.527;0;0.9;\n", - "Response sent: 12.078;0;0.0;\n", - "Response sent: 11.466;0;0.0;\n", - "Response sent: 10.021;0;0.1;\n", - "Response sent: 10.86;0;0.2;\n", - "Response sent: 10.387;0;0.2;\n", - "Response sent: 10.906;0;0.30000000000000004;\n", - "Response sent: 11.626;0;0.30000000000000004;\n", - "Response sent: 12.075;0;0.4;\n", - "Response sent: 11.806;0;0.4;\n", - "Response sent: 12.584;0;0.5;\n", - "Response sent: 12.526;0;0.5;\n", - "Response sent: 13.087;0;0.6000000000000001;\n", - "Response sent: 13.361;0;0.6000000000000001;\n", - "Response sent: 13.169;0;0.7000000000000001;\n", - "Response sent: 14.275;0;0.7000000000000001;\n", - "Response sent: 14.959;0;0.8;\n", - "Response sent: 13.033;0;0.8;\n", - "Response sent: 11.749;0;0.9;\n", - "Response sent: 13.347;0;0.9;\n", - "Response sent: 12.859;0;0.0;\n", - "Response sent: 12.125;0;0.0;\n", - "Response sent: 10.583;0;0.1;\n", - "Response sent: 11.422;0;0.1;\n", - "Response sent: 11.559;0;0.2;\n", - "Response sent: 11.251;0;0.2;\n", - "Response sent: 11.27;0;0.30000000000000004;\n", - "Response sent: 12.133;0;0.30000000000000004;\n", - "Response sent: 11.36;0;0.4;\n", - "Response sent: 12.177;0;0.4;\n", - "Response sent: 13.243;0;0.5;\n", - "Response sent: 12.841;0;0.5;\n", - "Response sent: 13.789;0;0.6000000000000001;\n", - "Response sent: 12.71;0;0.6000000000000001;\n", - "Response sent: 12.852;0;0.7000000000000001;\n", - "Response sent: 14.293;0;0.7000000000000001;\n", - "Response sent: 13.241;0;0.8;\n", - "Response sent: 11.503;0;0.8;\n", - "Response sent: 12.508;0;0.9;\n", - "Response sent: 12.445;0;0.9;\n", - "Response sent: 13.226;0;0.0;\n", - "Response sent: 11.882;0;0.0;\n", - "Response sent: 10.415;0;0.1;\n", - "Response sent: 11.181;0;0.1;\n", - "Response sent: 11.438;0;0.2;\n", - "Response sent: 11.002;0;0.2;\n", - "Response sent: 11.389;0;0.30000000000000004;\n", - "Response sent: 11.956;0;0.30000000000000004;\n", - "Response sent: 11.176;0;0.4;\n", - "Response sent: 12.476;0;0.4;\n", - "Response sent: 13.533;0;0.5;\n", - "Response sent: 12.891;0;0.5;\n", - "Response sent: 13.155;0;0.6000000000000001;\n", - "Response sent: 12.682;0;0.7000000000000001;\n", - "Response sent: 13.919;0;0.7000000000000001;\n", - "Response sent: 14.375;0;0.8;\n", - "Response sent: 12.976;0;0.8;\n", - "Response sent: 12.444;0;0.9;\n", - "Response sent: 13.346;0;0.9;\n", - "Response sent: 13.208;0;0.0;\n", - "Response sent: 11.901;0;0.0;\n", - "Response sent: 10.857;0;0.1;\n", - "Response sent: 10.203;0;0.1;\n", - "Response sent: 11.099;0;0.2;\n", - "Response sent: 10.598;0;0.2;\n", - "Response sent: 11.491;0;0.30000000000000004;\n", - "Response sent: 12.267;0;0.30000000000000004;\n", - "Response sent: 11.753;0;0.4;\n", - "Response sent: 11.588;0;0.4;\n", - "Response sent: 12.683;0;0.5;\n", - "Response sent: 12.218;0;0.5;\n", - "Response sent: 13.253;0;0.6000000000000001;\n", - "Response sent: 13.066;0;0.6000000000000001;\n", - "Response sent: 13.313;0;0.7000000000000001;\n", - "Response sent: 13.743;0;0.7000000000000001;\n", - "Response sent: 14.15;0;0.8;\n", - "Response sent: 11.97;0;0.8;\n", - "Response sent: 11.75;0;0.9;\n", - "Response sent: 13.315;0;0.9;\n", - "Response sent: 12.642;0;0.0;\n", - "Response sent: 12.007;0;0.0;\n", - "Response sent: 10.173;0;0.1;\n", - "Response sent: 11.214;0;0.1;\n", - "Response sent: 10.691;0;0.2;\n", - "Response sent: 11.031;0;0.2;\n", - "Response sent: 11.571;0;0.30000000000000004;\n", - "Response sent: 11.86;0;0.30000000000000004;\n", - "Response sent: 11.522;0;0.4;\n", - "Response sent: 11.85;0;0.4;\n", - "Response sent: 13.277;0;0.5;\n", - "Response sent: 13.201;0;0.5;\n", - "Response sent: 13.071;0;0.6000000000000001;\n", - "Response sent: 13.16;0;0.6000000000000001;\n", - "Response sent: 13.421;0;0.7000000000000001;\n", - "Response sent: 14.522;0;0.7000000000000001;\n", - "Response sent: 12.572;0;0.8;\n", - "Response sent: 12.388;0;0.8;\n", - "Response sent: 12.828;0;0.9;\n", - "Response sent: 12.889;0;0.9;\n", - "Response sent: 11.905;0;0.0;\n", - "Response sent: 11.459;0;0.0;\n", - "Response sent: 10.153;0;0.1;\n", - "Response sent: 10.256;0;0.1;\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "Requester closed due to inactivity.\n" + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 16\u001b[0m\n\u001b[1;32m 12\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m done:\n\u001b[0;32m---> 16\u001b[0m update_, done \u001b[38;5;241m=\u001b[39m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mzmq_read_publisher\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 18\u001b[0m req_ \u001b[38;5;241m=\u001b[39m rfi\u001b[38;5;241m.\u001b[39mzmq_read_requester()\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m req_ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/Desktop/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:278\u001b[0m, in \u001b[0;36mRFInteractor.zmq_read_publisher\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mzmq_read_publisher\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 278\u001b[0m update_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubscriber\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlock:\n\u001b[1;32m 281\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msub_dict \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_update_dict(update_, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msub_dict)\n", + "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/socket.py:1018\u001b[0m, in \u001b[0;36mSocket.recv_json\u001b[0;34m(self, flags, **kwargs)\u001b[0m\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_json\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[1;32m 999\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a Python object as a message using json to serialize.\u001b[39;00m\n\u001b[1;32m 1000\u001b[0m \n\u001b[1;32m 1001\u001b[0m \u001b[38;5;124;03m Keyword arguments are passed on to json.loads\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`~Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1018\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1019\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: jsonapi\u001b[38;5;241m.\u001b[39mloads(buf, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs))\n", + "File \u001b[0;32m_zmq.py:1137\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:1172\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:1259\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._recv_copy\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], @@ -294,35 +99,23 @@ "\n", "done = False\n", "rfi.cont_req_threshold = 5\n", - "# rfi.fast_sub(100, True)\n", - "# bld pitch staircase example signal from 0 to 15 degrees \n", - "pitch = 0\n", + "\n", + "rfi.fast_rep({'VelH': wind_series[0] + 8, 'BlPitchCom1': 0})\n", + "\n", + "req_ = None\n", + "\n", "while not done:\n", + "\n", + " update_, done = rfi.zmq_read_publisher()\n", " \n", - " if count_sampling >= 1000:\n", - " count_sampling = 0 \n", - " \n", - " rep = {\n", - " 'VelH': wind_series[count_sampling], \n", - " 'VelV': 0,\n", - " 'BlPitchCom1': count_sampling // 1000 * 0.1,\n", - " }\n", - " \n", - " done = rfi.zmq_full_communication(rep, True)\n", - " count_sampling += 1\n", - " \n", - " \n", + " req_ = rfi.zmq_read_requester()\n", " \n", - "# import threading\n", + " if req_ is not None:\n", + " count_sampling += 1\n", + " rfi.zmq_send_reply({'VelH': wind_series[count_sampling] + 8, 'BlPitchCom1': bld_pitch[count_sampling]})\n", + " \n", "\n", - "# t1 = threading.Thread(target=subscriber, args=(True,))\n", - "# t2 = threading.Thread(target=replier, args=())\n", - "\n", - "# t1.start()\n", - "# t2.start()\n", - "\n", - "# t1.join()\n", - "# t2.join()" + " \n" ] }, { @@ -344,7 +137,7 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, "execution_count": 5, @@ -353,7 +146,7 @@ }, { "data": { - "image/png": "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bnHixAnk5sYOK3l5efZWW21n9/GzTS+77DJs27YN+/fvt1+zcuVKhEIhTJ061ZlwR+WppJittj/60Y+sHTt2WHPnzrVKS0utnTt3Bi1NJF/96letyspK67nnnrP2799v/ztx4oT9mocfftiqrKy0nn76aWvr1q3WLbfcknRrV21trfXss89amzZtsj760Y8m3do1ZcoU66WXXrJeeukla/LkyWfsdrl06L/bxbK0nd1i3bp1Vn5+vvXQQw9Zb7/9tvWzn/3MKikpsX7605/ar9G2zp45c+ZY48aNs7faPv3009aoUaOs++67z36NtrNzOjs7rc2bN1ubN2+2AFiLFi2yNm/ebB8X4Vebmq22V155pbVp0ybr2WeftWpra3WrbSp+8IMfWBMmTLAKCwutiy++2N42qiQCIOm/JUuW2K/p6+uzvv3tb1vV1dVWKBSyPvKRj1hbt26N+T0nT5607r77bmvEiBFWcXGx9clPftLavXt3zGsOHz5s3XbbbVZ5eblVXl5u3XbbbVZbW5sPf6VM4oMPbWf3+P3vf281NDRYoVDIOvfcc63HH3885vva1tnT0dFh3XPPPdb48eOtoqIia9KkSdb8+fOtrq4u+zXazs7561//mtQnz5kzx7Isf9t0165d1rXXXmsVFxdbI0aMsO6++27r1KlTjv+mHMuyLGe5EkVRFEVRlMw542s+FEVRFEWRhQYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4igYfiqIoiqL4yv8D0D9g3ac3n5UAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "

" ] @@ -363,12 +156,12 @@ } ], "source": [ - "plt.plot(fastout['BlPitchC1_[deg]'])" + "plt.plot(fastout['Time_[s]'], fastout['BlPitchC1_[deg]'])" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [ { diff --git a/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb index a2e16e15b0..b44983f848 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb @@ -360,6 +360,122 @@ "# plt.plot(fastout['Time_[s]'][50:150], np.rad2deg(bld_pitch[50:150]), ls='--', marker='o')#, ls='--', marker='o')" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from pyFAST.input_output import FASTOutputFile\n", + "\n", + "test03 = FASTOutputFile('../templatesDir/OFZMQ_test04/OFZMQ_test04.outb').toDataFrame()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "test03['BlPitchC1_[deg]'][50:].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import pickle \n", + "\n", + "with open('../subscribed_messages.pkl', 'rb') as f:\n", + " tmp = pickle.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['TurbId', ' Time', ' Wind1VelX_(m/s)', ' Azimuth_(deg)', ' GenTq_(kN-m)', ' GenPwr_(kW)'])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tmp.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9999" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(tmp[' Wind1VelX_(m/s)'])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'fastout' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m np\u001b[38;5;241m.\u001b[39mallclose(\u001b[43mfastout\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mWind1VelX_[m/s]\u001b[39m\u001b[38;5;124m'\u001b[39m], tmp[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m Wind1VelX_(m/s)\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", + "\u001b[0;31mNameError\u001b[0m: name 'fastout' is not defined" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "np.allclose(fastout['Wind1VelX_[m/s]'], tmp[' Wind1VelX_(m/s)'])" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb index 89f212f2bd..000804691d 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb +++ b/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb @@ -42282,7 +42282,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.1.-1" } }, "nbformat": 4, diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py index cef39594c4..66cc759813 100644 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -143,7 +143,7 @@ def fast_sub(self, N_plots_update = 100, plot: bool = True, shared: bool = False """ """ - + count = 0 while True: update_ = self.subscriber.recv_json() print(update_) @@ -274,6 +274,60 @@ def zmq_full_communication(self, rep_dict, verbose: bool = False): return False + def zmq_read_publisher(self): + update_ = self.subscriber.recv_json() + + with self.lock: + self.sub_dict = self._update_dict(update_, self.sub_dict) + + data_length = len(self.sub_dict) + + if list(update_.values())[2:] == [0.0]*(data_length - 2): + print('Subscription to FAST channel closed.') + self.subscriber.close() + self.pub_context.term() + return self.sub_dict, True + + return self.sub_dict, False + + def zmq_read_requester(self, verbose: bool = False): + + socks = dict(self.poller.poll(2000)) + if self.requester in socks and socks[self.requester] == zmq.POLLIN: + req_ = self.requester.recv_string() + return req_ + else: + self.cont_req_off += 1 + + if verbose: + print('No request received, waiting...') + + return None + + def zmq_send_reply(self, rep_dict): + response = ';'.join(map(str, rep_dict.values())) + ';' + self.requester.send_string(response) + return response + + def communication_check(self, verbose: bool = False): + """ + Check if communication is still open + """ + + socks = dict(self.poller.poll(2000)) + # check if there are still communications open + if len(socks) == 0: + return True + else: + return False + + + + + + + + class SharedData: From bbfc65355f2aa13aceda9a6d9cc609efa68ce756 Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Tue, 25 Jun 2024 13:41:13 +0200 Subject: [PATCH 14/14] cleaning --- README.rst | 2 +- zmq_coupling_tests/subscribed_messages.pkl | Bin 399532 -> 0 bytes .../zmq_python_toolbox/FullZMQ.ipynb | 221 - .../zmq_python_toolbox/REP.ipynb | 508 - .../zmq_python_toolbox/SUB.ipynb | 42290 ---------------- .../zmq_python_toolbox/ex_files/tsim.dat | 12001 ----- .../zmq_python_toolbox/pyFAST/__init__.py | 6 - .../pyFAST/aeroacoustics/plot_directivity.py | 86 - .../pyFAST/aeroacoustics/plot_mechanisms.py | 112 - .../pyFAST/aeroacoustics/plot_rotor_map.py | 92 - .../pyFAST/aeroacoustics/plot_spectra.py | 87 - .../pyFAST/aeroacoustics/run_OF.py | 18 - .../pyFAST/aeroacoustics/write_BLfiles.py | 144 - .../pyFAST/airfoils/DynamicStall.py | 506 - .../pyFAST/airfoils/Polar.py | 1993 - .../pyFAST/airfoils/__init__.py | 2 - .../pyFAST/airfoils/data/63-235.csv | 152 - .../pyFAST/airfoils/data/Cylinder.csv | 4 - .../pyFAST/airfoils/data/Cylinder.dat | 5 - .../pyFAST/airfoils/data/DU21_A17.csv | 147 - .../pyFAST/airfoils/data/FFA-W3-241-Re12M.dat | 106 - .../pyFAST/airfoils/examples/correction3D.py | 43 - .../airfoils/examples/createADPolarFile.py | 118 - .../examples/createADPolarFile_Basic.py | 65 - .../pyFAST/airfoils/polar_file.py | 291 - .../pyFAST/airfoils/tests/__init__.py | 0 .../airfoils/tests/test_polar_interp.py | 47 - .../pyFAST/airfoils/tests/test_polar_manip.py | 23 - .../airfoils/tests/test_polar_params.py | 256 - .../airfoils/tests/test_polar_subfunctions.py | 51 - .../airfoils/tests/test_run_Examples.py | 33 - .../pyFAST/case_generation/README.rst | 3 - .../pyFAST/case_generation/__init__.py | 0 .../pyFAST/case_generation/case_gen.py | 673 - .../case_generation/examples/.gitignore | 4 - .../examples/Example_CPLambdaPitch.py | 48 - .../examples/Example_ExcelFile.py | 57 - .../examples/Example_Parametric.py | 112 - .../examples/Example_PowerCurve_Parametric.py | 123 - .../examples/ParametricExcel.xlsx | Bin 11500 -> 0 bytes .../pyFAST/case_generation/examples/README.md | 7 - .../pyFAST/case_generation/runner.py | 319 - .../pyFAST/case_generation/tests/__init__.py | 1 - .../tests/test_run_Examples.py | 33 - .../zmq_python_toolbox/pyFAST/common.py | 3 - .../pyFAST/converters/.gitignore | 10 - .../pyFAST/converters/README.md | 4 - .../pyFAST/converters/__init__.py | 0 .../pyFAST/converters/beam.py | 590 - .../pyFAST/converters/beamDynToHawc2.py | 500 - .../pyFAST/converters/beamdyn.py | 2 - .../pyFAST/converters/doc/.gitignore | 11 - .../pyFAST/converters/doc/BeamDynInput.tex | 950 - .../pyFAST/converters/doc/Bibliography.bib | 15788 ------ .../pyFAST/converters/doc/Makefile | 41 - .../svgtex/AeroElastCodesCoordConvention.svg | 1798 - .../doc/svgtex/BeamDynSectionCoord.svg | 1283 - .../svgtex/BeamDynSectionCoord_Abstract.svg | 844 - .../svgtex/StiffnessMatrixAxialBending.svg | 1263 - .../pyFAST/converters/elastodyn.py | 79 - .../pyFAST/converters/examples/.gitignore | 2 - .../examples/Main_BeamDynToHawc2.py | 77 - .../examples/Main_Hawc2ToAeroDyn.py | 45 - .../examples/Main_Hawc2ToBeamDyn.py | 46 - .../examples/Main_OpenFASTToHawc2.py | 47 - .../pyFAST/converters/hawc2.py | 32 - .../pyFAST/converters/hawc2ToBeamDyn.py | 458 - .../pyFAST/converters/hawc2ToElastoDyn.py | 85 - .../pyFAST/converters/hawc2ToOpenfast.py | 255 - .../pyFAST/converters/openfastToHawc2.py | 364 - .../pyFAST/converters/tests/__init__.py | 0 .../pyFAST/converters/tests/test_K_BD_H2.py | 152 - .../pyFAST/converters/tests/test_beamprops.py | 52 - .../converters/tests/test_hawc2ToBeamDyn.py | 60 - .../converters/tests/test_run_Examples.py | 33 - .../pyFAST/fastfarm/.gitignore | 3 - .../pyFAST/fastfarm/AMRWindSimulation.py | 577 - .../pyFAST/fastfarm/FASTFarmCaseCreation.py | 2244 - .../pyFAST/fastfarm/README.md | 8 - .../pyFAST/fastfarm/TurbSimCaseCreation.py | 399 - .../pyFAST/fastfarm/__init__.py | 4 - .../examples/Ex1_TurbSimInputSetup.py | 55 - .../fastfarm/examples/Ex2_FFarmInputSetup.py | 73 - .../examples/Ex3_FFarmCompleteSetup.py | 161 - .../examples/Ex4_AMRWindSamplingSetup.py | 52 - .../pyFAST/fastfarm/examples/README.md | 10 - .../examples/SampleFiles/TestCase.fstf | 112 - .../examples/SampleFiles/TestCase.inp | 74 - .../examples/SampleFiles/_TestCase_mod.fstf | 113 - .../examples/SampleFiles/runAllHighBox.sh | 53 - .../examples/SampleFiles/runAllLowBox.sh | 50 - .../runFASTFarm_cond0_case0_seed0.sh | 42 - .../template_HighT1_InflowXX_SeedY.inp | 74 - .../template_Low_InflowXX_SeedY.inp | 74 - .../pyFAST/fastfarm/fastfarm.py | 648 - .../pyFAST/fastfarm/tests/__init__.py | 0 .../fastfarm/tests/test_run_Examples.py | 33 - .../fastfarm/tests/test_turbsimExtent.py | 79 - .../pyFAST/input_output/README.md | 63 - .../pyFAST/input_output/__init__.py | 307 - .../pyFAST/input_output/amrwind_file.py | 125 - .../pyFAST/input_output/bladed_out_file.py | 398 - .../pyFAST/input_output/bmodes_out_file.py | 152 - .../input_output/cactus_element_file.py | 107 - .../pyFAST/input_output/cactus_file.py | 386 - .../pyFAST/input_output/converters.py | 94 - .../pyFAST/input_output/csv_file.py | 285 - .../pyFAST/input_output/examples/.gitignore | 4 - .../examples/Example_ChangeAeroDyn.py | 15 - .../examples/Example_EditOpenFASTModel.py | 88 - .../input_output/examples/Example_MannBox.py | 90 - .../examples/Example_PlotBinary.py | 23 - .../examples/Example_PlotBlade.py | 20 - .../examples/Example_TurbSimBox.py | 127 - .../examples/Example_TurbSim_Processing.py | 38 - .../examples/Example_VTKPlanesGrid.py | 39 - .../pyFAST/input_output/examples/README.md | 10 - .../input_output/examples/SubDynModes.py | 43 - .../pyFAST/input_output/excel_file.py | 81 - .../pyFAST/input_output/fast_input_deck.py | 477 - .../pyFAST/input_output/fast_input_file.py | 2104 - .../input_output/fast_input_file_graph.py | 352 - .../input_output/fast_linearization_file.py | 615 - .../pyFAST/input_output/fast_output_file.py | 651 - .../pyFAST/input_output/fast_summary_file.py | 270 - .../pyFAST/input_output/fast_wind_file.py | 72 - .../pyFAST/input_output/file.py | 235 - .../pyFAST/input_output/file_formats.py | 31 - .../pyFAST/input_output/flex_blade_file.py | 139 - .../pyFAST/input_output/flex_doc_file.py | 208 - .../pyFAST/input_output/flex_out_file.py | 205 - .../pyFAST/input_output/flex_profile_file.py | 144 - .../pyFAST/input_output/flex_wavekin_file.py | 101 - .../pyFAST/input_output/hawc2_ae_file.py | 91 - .../pyFAST/input_output/hawc2_dat_file.py | 144 - .../pyFAST/input_output/hawc2_htc_file.py | 136 - .../pyFAST/input_output/hawc2_pc_file.py | 97 - .../pyFAST/input_output/hawc2_st_file.py | 81 - .../pyFAST/input_output/hawcstab2_cmb_file.py | 36 - .../pyFAST/input_output/hawcstab2_ind_file.py | 60 - .../pyFAST/input_output/hawcstab2_pwr_file.py | 49 - .../pyFAST/input_output/mannbox_file.py | 332 - .../pyFAST/input_output/mannbox_input_file.py | 191 - .../pyFAST/input_output/matlabmat_file.py | 111 - .../pyFAST/input_output/mini_yaml.py | 166 - .../pyFAST/input_output/netcdf_file.py | 40 - .../pyFAST/input_output/parquet_file.py | 48 - .../pyFAST/input_output/pickle_file.py | 174 - .../pyFAST/input_output/postpro.py | 2 - .../pyFAST/input_output/raawmat_file.py | 211 - .../pyFAST/input_output/rosco_discon_file.py | 265 - .../input_output/rosco_performance_file.py | 438 - .../pyFAST/input_output/tdms_file.py | 225 - .../pyFAST/input_output/tecplot_file.py | 222 - .../pyFAST/input_output/tests/__init__.py | 0 .../tests/example_files/BHAWC_out_ascii.dat | 11 - .../tests/example_files/BHAWC_out_ascii.sel | 18 - .../tests/example_files/BHAWC_out_ascii1.dat | 20 - .../tests/example_files/BHAWC_out_ascii1.sel | 21 - .../tests/example_files/Bladed_out_ascii.$04 | 200 - .../tests/example_files/Bladed_out_ascii.$41 | 800 - .../tests/example_files/Bladed_out_ascii.%04 | 39 - .../tests/example_files/Bladed_out_ascii.%41 | 98 - .../tests/example_files/Bladed_out_binary.$04 | Bin 21600 -> 0 bytes .../tests/example_files/Bladed_out_binary.$41 | Bin 76800 -> 0 bytes .../tests/example_files/Bladed_out_binary.%04 | 39 - .../tests/example_files/Bladed_out_binary.%41 | 98 - .../example_files/Bladed_out_binary_case2.$04 | Bin 360 -> 0 bytes .../example_files/Bladed_out_binary_case2.$06 | Bin 160 -> 0 bytes .../example_files/Bladed_out_binary_case2.$09 | Bin 680 -> 0 bytes .../example_files/Bladed_out_binary_case2.$12 | Bin 520 -> 0 bytes .../example_files/Bladed_out_binary_case2.$23 | 1 - .../example_files/Bladed_out_binary_case2.$25 | Bin 640 -> 0 bytes .../example_files/Bladed_out_binary_case2.$31 | Bin 120 -> 0 bytes .../example_files/Bladed_out_binary_case2.$37 | 522 - .../example_files/Bladed_out_binary_case2.$46 | Bin 480 -> 0 bytes .../example_files/Bladed_out_binary_case2.$55 | Bin 200 -> 0 bytes .../example_files/Bladed_out_binary_case2.$69 | Bin 240 -> 0 bytes .../example_files/Bladed_out_binary_case2.$PJ | 1013 - .../example_files/Bladed_out_binary_case2.%04 | 39 - .../example_files/Bladed_out_binary_case2.%06 | 29 - .../example_files/Bladed_out_binary_case2.%09 | 59 - .../example_files/Bladed_out_binary_case2.%12 | 47 - .../example_files/Bladed_out_binary_case2.%23 | 37 - .../example_files/Bladed_out_binary_case2.%25 | 60 - .../example_files/Bladed_out_binary_case2.%31 | 31 - .../example_files/Bladed_out_binary_case2.%37 | 31 - .../example_files/Bladed_out_binary_case2.%46 | 56 - .../example_files/Bladed_out_binary_case2.%55 | 17 - .../example_files/Bladed_out_binary_case2.%69 | 33 - .../Bladed_out_binary_case2_fail.$55 | Bin 200 -> 0 bytes .../Bladed_out_binary_case2_fail.%55 | 17 - .../example_files/CSVAutoCommentChar.txt | 21 - .../tests/example_files/CSVColInHeader.csv | 5 - .../tests/example_files/CSVColInHeader2.csv | 3 - .../tests/example_files/CSVColInHeader3.csv | 3 - .../tests/example_files/CSVComma.csv | 5 - .../tests/example_files/CSVDateNaN.csv | 12 - .../tests/example_files/CSVNoHeader.csv | 4 - .../tests/example_files/CSVSemi.csv | 4 - .../tests/example_files/CSVSpace_ExtraCol.csv | 6 - .../tests/example_files/CSVTab.csv | 6 - .../example_files/CSVTwoLinesHeaders.txt | 18 - .../tests/example_files/CSVxIsString.csv | 8 - .../example_files/ExcelFile_OneSheet.xlsx | Bin 11708 -> 0 bytes .../tests/example_files/FASTIn_AD14.dat | 45 - .../tests/example_files/FASTIn_AD14_arf.dat | 32 - .../example_files/FASTIn_AD14_arf_3col.dat | 57 - .../example_files/FASTIn_AD14_arf_Re.dat | 79 - .../tests/example_files/FASTIn_AD15.dat | 73 - .../FASTIn_AD15_arf_multitabs.dat | 146 - .../tests/example_files/FASTIn_AD15_arfl.dat | 83 - .../tests/example_files/FASTIn_AD15_arfl0.dat | 66 - .../tests/example_files/FASTIn_AD15_bld.dat | 26 - .../tests/example_files/FASTIn_AD15_latin.dat | 73 - .../tests/example_files/FASTIn_AD15_of34.dat | 123 - .../tests/example_files/FASTIn_AD_F7.dat | 45 - .../tests/example_files/FASTIn_AD_twr.dat | 40 - .../tests/example_files/FASTIn_BD.dat | 88 - .../tests/example_files/FASTIn_BD_bld.dat | 41 - .../tests/example_files/FASTIn_BD_bld_2.dat | 39 - .../tests/example_files/FASTIn_Blade.dat | 29 - .../tests/example_files/FASTIn_ED.dat | 128 - .../tests/example_files/FASTIn_ED_bld.dat | 81 - .../tests/example_files/FASTIn_ED_bld_F7.dat | 44 - .../tests/example_files/FASTIn_ED_twr.dat | 52 - .../tests/example_files/FASTIn_ED_twr_F7.dat | 52 - .../example_files/FASTIn_ExtPtfm_SubSef.dat | 31 - .../tests/example_files/FASTIn_HD.dat | 149 - .../tests/example_files/FASTIn_HD2.dat | 269 - .../example_files/FASTIn_HD_SeaState.dat | 96 - .../tests/example_files/FASTIn_HD_driver.dvr | 27 - .../tests/example_files/FASTIn_IF_NoHead.dat | 55 - .../tests/example_files/FASTIn_MD-v1.dat | 64 - .../tests/example_files/FASTIn_MD-v2.dat | 39 - .../tests/example_files/FASTIn_SD.dat | 97 - .../tests/example_files/FASTIn_SbD.dat | 70 - .../example_files/FASTIn_SbD_comments.dat | 165 - .../tests/example_files/FASTIn_TurbSim.dat | 74 - .../tests/example_files/FASTIn_arf_coords.txt | 407 - .../tests/example_files/FASTLin.lin | 113 - .../tests/example_files/FASTLin_EDM.lin | 139 - .../tests/example_files/FASTOutBin.outb | Bin 4678 -> 0 bytes .../tests/example_files/FASTOutBin_ID4.outb | Bin 11641 -> 0 bytes .../tests/example_files/FASTOut_HD.elev | 9 - .../tests/example_files/FASTOut_V7.elm | 7 - .../FASTSum_Pendulum.SD.sum.yaml | 178 - .../tests/example_files/FASTWnd.wnd | 8 - .../tests/example_files/FLEXBlade000.bla | 32 - .../tests/example_files/FLEXBlade001.bld | 32 - .../tests/example_files/FLEXBlade002.bld | 56 - .../tests/example_files/FLEXBlade003.bld | 21 - .../tests/example_files/FLEXOutBinV0.int | Bin 11352 -> 0 bytes .../tests/example_files/FLEXOutBinV3.res | Bin 186 -> 0 bytes .../tests/example_files/FLEXProfile.pro | 1016 - .../tests/example_files/FLEXWaveKin.wko | 24 - .../tests/example_files/HAWC2_ae.dat | 83 - .../tests/example_files/HAWC2_out_ascii.dat | 800 - .../tests/example_files/HAWC2_out_ascii.sel | 41 - .../tests/example_files/HAWC2_out_bin.dat | Bin 44800 -> 0 bytes .../tests/example_files/HAWC2_out_bin.sel | 70 - .../tests/example_files/HAWC2_pc.dat | 638 - .../tests/example_files/HAWC2_st.dat | 38 - .../tests/example_files/HAWC2_st.st | 38 - .../tests/example_files/HAWC2_st_fpm.st | 49 - .../tests/example_files/HAWCStab2.pwr | 46 - .../example_files/HAWCStab2_defl_u3000.ind | 20 - .../example_files/HAWCStab2_fext_u3000.ind | 20 - .../tests/example_files/HAWCStab2_u3000.ind | 49 - .../tests/example_files/MannBox_2x4x8.bin | 1 - .../example_files/ParquetFile_test.parquet | Bin 2951 -> 0 bytes .../RoscoDISCON_PowerTracking.in | 151 - .../example_files/RoscoPerformance_CpCtCq.txt | 29 - .../TDMS_1Grp2Chan_TimeTrack.tdms | Bin 560 -> 0 bytes .../tests/example_files/TDMS_2Grp2Chan.tdms | Bin 1019 -> 0 bytes .../tests/example_files/TecplotASCII_1.dat | 11 - .../tests/example_files/TecplotASCII_2.dat | 28 - .../tests/example_files/TurbSimTS.txt | 17 - .../tests/example_files/TurbSim_FAST.bts | Bin 5572 -> 0 bytes .../tests/example_files/TurbSim_NoTwr.bts | Bin 7372 -> 0 bytes .../tests/example_files/TurbSim_WithTwr.bts | Bin 9772 -> 0 bytes .../VTKStructuredPointsPointData.vtk | 15 - .../input_decks/Elliptic_AD15_40.dat | 124 - .../Elliptic_AD15_blade_40_cos.dat | 46 - .../example_files/input_decks/Elliptic_IW.dat | 57 - .../input_decks/Elliptic_OLAF.dat | 45 - .../input_decks/Elliptic_Wind.wnd | 5 - .../Main_EllipticalWingInf_OLAF.dvr | 55 - .../input_decks/Polar2PiAlpha_AD15.dat | 152 - .../input_output/tests/helpers_for_test.py | 29 - .../pyFAST/input_output/tests/test_bladed.py | 127 - .../pyFAST/input_output/tests/test_csv.py | 53 - .../input_output/tests/test_fast_input.py | 197 - .../tests/test_fast_input_deck.py | 25 - .../tests/test_fast_linearization.py | 58 - .../input_output/tests/test_fast_output.py | 44 - .../input_output/tests/test_fast_summary.py | 42 - .../pyFAST/input_output/tests/test_flex.py | 59 - .../pyFAST/input_output/tests/test_hawc.py | 112 - .../pyFAST/input_output/tests/test_mannbox.py | 24 - .../pyFAST/input_output/tests/test_parquet.py | 26 - .../input_output/tests/test_run_Examples.py | 33 - .../pyFAST/input_output/tests/test_turbsim.py | 35 - .../pyFAST/input_output/tests/test_vtk.py | 24 - .../pyFAST/input_output/tests/test_yaml.py | 107 - .../pyFAST/input_output/tools/__init__.py | 0 .../pyFAST/input_output/tools/graph.py | 688 - .../pyFAST/input_output/turbsim_file.py | 1091 - .../pyFAST/input_output/turbsim_ts_file.py | 102 - .../pyFAST/input_output/vtk_file.py | 1349 - .../pyFAST/input_output/wetb/__init__.py | 0 .../pyFAST/input_output/wetb/hawc2/Hawc2io.py | 343 - .../input_output/wetb/hawc2/__init__.py | 12 - .../pyFAST/input_output/wetb/hawc2/ae_file.py | 138 - .../input_output/wetb/hawc2/htc_contents.py | 479 - .../input_output/wetb/hawc2/htc_extensions.py | 143 - .../input_output/wetb/hawc2/htc_file.py | 600 - .../input_output/wetb/hawc2/htc_file_set.py | 55 - .../pyFAST/input_output/wetb/hawc2/pc_file.py | 163 - .../pyFAST/input_output/wetb/hawc2/st_file.py | 302 - .../pyFAST/linearization/README.rst | 3 - .../pyFAST/linearization/__init__.py | 18 - .../pyFAST/linearization/campbell.py | 515 - .../pyFAST/linearization/campbell_data.py | 692 - .../pyFAST/linearization/examples/README.md | 15 - .../ex1a_OneLinFile_SimpleEigenAnalysis.py | 44 - .../examples/ex1b_OneLinFile_NoRotation.py | 33 - .../examples/ex2a_MultiLinFiles_OneOP.py | 38 - .../examples/ex3a_MultiLinFile_Campbell.py | 75 - .../linearization/examples/runCampbell.py | 94 - .../pyFAST/linearization/linearization.py | 396 - .../pyFAST/linearization/linfile.py | 639 - .../pyFAST/linearization/mbc.py | 523 - .../pyFAST/linearization/plotCampbellData.py | 42 - .../pyFAST/linearization/plotModeShapes.py | 134 - .../pyFAST/linearization/tests/__init__.py | 0 .../linearization/tests/test_campbell_data.py | 103 - .../linearization/tests/test_modesID.py | 94 - .../tests/test_modesVizBinary.py | 118 - .../linearization/tests/test_run_Examples.py | 31 - .../pyFAST/linearization/tools.py | 397 - .../pyFAST/modules/__init__.py | 0 .../zmq_python_toolbox/pyFAST/modules/olaf.py | 211 - .../pyFAST/postpro/__init__.py | 3 - .../examples/Example_EquivalentLoad.py | 30 - .../postpro/examples/Example_RadialInterp.py | 79 - .../postpro/examples/Example_RadialPostPro.py | 57 - .../pyFAST/postpro/examples/Example_Remap.py | 27 - .../pyFAST/postpro/postpro.py | 1844 - .../pyFAST/postpro/tests/__init__.py | 0 .../pyFAST/postpro/tests/test_run_Examples.py | 33 - .../pyFAST/tools/__init__.py | 0 .../pyFAST/tools/curve_fitting.py | 1446 - .../pyFAST/tools/damping.py | 373 - .../zmq_python_toolbox/pyFAST/tools/eva.py | 332 - .../pyFAST/tools/fatigue.py | 1221 - .../pyFAST/tools/pandalib.py | 209 - .../pyFAST/tools/signal_analysis.py | 893 - .../pyFAST/tools/spectral.py | 1442 - .../zmq_python_toolbox/pyFAST/tools/stats.py | 384 - .../pyFAST/tools/tests/__init__.py | 0 .../pyFAST/tools/tests/test_fatigue.py | 6 - .../zmq_python_toolbox/pyFAST/tools/tictoc.py | 75 - .../real_fast_interactor.py | 373 - .../tests/test01_integrity.py | 43 - 365 files changed, 1 insertion(+), 132042 deletions(-) delete mode 100644 zmq_coupling_tests/subscribed_messages.pkl delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/REP.ipynb delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/Polar.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/ParametricExcel.xlsx delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToElastoDyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToOpenfast.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_pc_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_st_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawcstab2_cmb_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawcstab2_ind_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawcstab2_pwr_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$04 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$41 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.%04 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.%41 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$04 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$06 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$09 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$12 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$23 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$25 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$31 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$46 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$55 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$69 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$PJ delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.$55 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ExcelFile_OneSheet.xlsx delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14_arf.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14_arf_3col.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD14_arf_Re.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin.outb delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin_ID4.outb delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV0.int delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV3.res delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.sel delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_pc.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_st.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_st.st delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_st_fpm.st delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2.pwr delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2_defl_u3000.ind delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2_fext_u3000.ind delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWCStab2_u3000.ind delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/MannBox_2x4x8.bin delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ParquetFile_test.parquet delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_1Grp2Chan_TimeTrack.tdms delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_2Grp2Chan.tdms delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_FAST.bts delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_NoTwr.bts delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_WithTwr.bts delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/VTKStructuredPointsPointData.vtk delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_40.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/spectral.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/__init__.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py delete mode 100644 zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py diff --git a/README.rst b/README.rst index 379ce7a067..96755e5030 100644 --- a/README.rst +++ b/README.rst @@ -27,7 +27,7 @@ The folder `zmq_python_toolbox` contains the Python routines to interact with Op Updates ---- +--------- - Added end of simulation message to ZMQ, so that receiver can know when the simulation is over and detach from the ZMQ connection (close the socket). Currently, EOF signals are zeros, to keep float format. (`line 5649`) - Added warning if user passes wind speed at runtime, as it will trigger Inflow Wind to use the steady model around the rotor disk (`line 3580`) diff --git a/zmq_coupling_tests/subscribed_messages.pkl b/zmq_coupling_tests/subscribed_messages.pkl deleted file mode 100644 index 960e31a89c8b15f7289581dd2a9b005c9a60e30a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399532 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%0AxH{snTgW!6+qn{tAL(t1*p-0n%aV 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

VG#@PmNh zbbh}j=sLeR3jAW3eVLq9px$W6Mgjts>Uo#C0sP}|UcVOL_a`T<#jJm_?BEf5Sk@~* zi=JAhuU%DrB6U4syrE9ncYqIF1fsY5NcF8S-w*I!aX-YQ65w@8ws*TUfdn74>lyfA zlk6N=JX*Z(z3wJhQE!+)FJ1RUxo8J9zjY9TwaX(==t5}!JAp&~ zhL~vthGnT9#|bpvtxKRUwpM*|l-m*leH|Zr@+52LU`iq&2=eZoqf2n~N>O$*LC13o z6ATl~It#wXt=k)W*UW+}o!3o{9s+nQO}DEOCAjEX5K{~A9Gi}Ox&*06KTH0{v;V93 zpR)j7UWFn)Jz3#m?h z9_?NJ{#SrdJ4Y*;nvL)`BW&3dr1Q5_g?}xSPoWPB-_srwz*p|mH_z<^hPd0tjCV zb*%RgT+cAud5hp!iP_a<1c@*D1~G+TgzMd*6+qzN(OXIbnb35WV$=cx-O2az$XN+h zLS~JzCXkju|84D+W1J zJp$L%2<9!pd70)d)Qs2bG#;NwopF68wiD=U_-XQ4BmGX?*DLde#eWW;a=`yhx7W9N zSON}wnr=e{73jnVoCYcOU3%dOOVHB^cSpPg1eaPS{^bbRu#eXi4vFB@#F&kqjT-x? z>xHfuhYVqWFef*~BzZu%BgXJifK5*Q$p@)aBV71^<;c~#OD56~8RhfGnd-%W%|W{m zo&kss%fw|#Kum<~kU7mjwuH+~4WPP+4G^X{P}7QYuNPeP1#Gpctr5~dwrv!@hy{Pmxl7V=2n7-{8n({=a|+7#jxzu^sS8fPOzYD zO5H1h9f3-9R4hAh{8sDm1+Ys?#XVX;5clFih#Wz$xFGmEASt3`Sn&g3w;aFiyu191 zmj+eko~TV-RaAz_jw^0@kV{FiSgdZk5Rf|K!x7^Ez}{sCX&VcY6}a~7_XLpk_u|1< zR8Z;Ts(R*Ao$fz0fb>3q4BeNAWd&qj;m`38`DInPQ!mKY&noY3P^kTZpYgYmgTcyy}a@trOO!0G+G z>P@j@LVy1;Sk8Pkg!Uoe?A|ZF_R@edH9qq6T+*r~BHgf@Z@UaVT|l`pR0-@IM1&DW F{|9)HehmNs diff --git a/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb b/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb deleted file mode 100644 index b201b91355..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/FullZMQ.ipynb +++ /dev/null @@ -1,221 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: tcp://127.0.0.1:5555\n", - "Communication log will be saved at: ./zmq_logs/ \n", - "\n" - ] - } - ], - "source": [ - "#export PATH=$PATH:/Users/lorenzoschena/Desktop/Workspace/openfast/install/bin\n", - "from real_fast_interactor import RFInteractor\n", - "\n", - "rfi = RFInteractor(ZmqInAddress='tcp://127.0.0.1:5555',\n", - " ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", - " live_plot=False, name='OFZMQ_test04')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from pyFAST.input_output import FASTOutputFile\n", - "import numpy as np \n", - "import matplotlib.pyplot as plt \n", - "\n", - "\n", - "t = np.linspace(0, 100, 400)\n", - "\n", - "wind_series = FASTOutputFile('./ex_files/tsim.dat').toDataFrame()['U_[3.40]']\n", - "\n", - "frequency = 1.0 # 1 Hz sinusoidal signal\n", - "sampling_rate = 100.0 # Sampling rate of 100 Hz\n", - "duration = 10.0 # Duration of the signal\n", - "t = np.arange(0, duration, 1 / sampling_rate) # Time vector\n", - "bld_pitch = np.sin(2 * np.pi * frequency * t) # Example for another series\n", - "\n", - "fig, axs = plt.subplots(2, 1, figsize=(8, 5))\n", - "axs[0].plot(wind_series)\n", - "axs[0].set_ylabel('$u_h$ (m/s)')\n", - "\n", - "axs[1].plot(t, bld_pitch)\n", - "axs[1].set_ylabel('BldPitch1 (rad)')\n", - "\n", - "fig.tight_layout()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 16\u001b[0m\n\u001b[1;32m 12\u001b[0m req_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m done:\n\u001b[0;32m---> 16\u001b[0m update_, done \u001b[38;5;241m=\u001b[39m \u001b[43mrfi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mzmq_read_publisher\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 18\u001b[0m req_ \u001b[38;5;241m=\u001b[39m rfi\u001b[38;5;241m.\u001b[39mzmq_read_requester()\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m req_ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/Desktop/openfast/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py:278\u001b[0m, in \u001b[0;36mRFInteractor.zmq_read_publisher\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mzmq_read_publisher\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 278\u001b[0m update_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubscriber\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlock:\n\u001b[1;32m 281\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msub_dict \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_update_dict(update_, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msub_dict)\n", - "File \u001b[0;32m~/miniconda3/envs/zmq-env/lib/python3.12/site-packages/zmq/sugar/socket.py:1018\u001b[0m, in \u001b[0;36mSocket.recv_json\u001b[0;34m(self, flags, **kwargs)\u001b[0m\n\u001b[1;32m 998\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecv_json\u001b[39m(\u001b[38;5;28mself\u001b[39m, flags: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[1;32m 999\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Receive a Python object as a message using json to serialize.\u001b[39;00m\n\u001b[1;32m 1000\u001b[0m \n\u001b[1;32m 1001\u001b[0m \u001b[38;5;124;03m Keyword arguments are passed on to json.loads\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;124;03m for any of the reasons :func:`~Socket.recv` might fail\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1018\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1019\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deserialize(msg, \u001b[38;5;28;01mlambda\u001b[39;00m buf: jsonapi\u001b[38;5;241m.\u001b[39mloads(buf, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs))\n", - "File \u001b[0;32m_zmq.py:1137\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:1172\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq.Socket.recv\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:1259\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._recv_copy\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m_zmq.py:141\u001b[0m, in \u001b[0;36mzmq.backend.cython._zmq._check_rc\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "import time \n", - "\n", - "count_sampling = 0\n", - "dt_in = 0.5 \n", - "dt_wspd = 0.05 \n", - "\n", - "done = False\n", - "rfi.cont_req_threshold = 5\n", - "\n", - "rfi.fast_rep({'VelH': wind_series[0] + 8, 'BlPitchCom1': 0})\n", - "\n", - "req_ = None\n", - "\n", - "while not done:\n", - "\n", - " update_, done = rfi.zmq_read_publisher()\n", - " \n", - " req_ = rfi.zmq_read_requester()\n", - " \n", - " if req_ is not None:\n", - " count_sampling += 1\n", - " rfi.zmq_send_reply({'VelH': wind_series[count_sampling] + 8, 'BlPitchCom1': bld_pitch[count_sampling]})\n", - " \n", - "\n", - " \n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from openfast_toolbox.io import FASTOutputFile\n", - "\n", - "fastout = FASTOutputFile('../templatesDir/OFZMQ_test04/OFZMQ_test04.outb').toDataFrame()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(fastout['Time_[s]'], fastout['BlPitchC1_[deg]'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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/elPOuecc7R//379+te/1sSJE7Vx48awGqck7dixQwsWLNA999yjhx56SKtXr9Zdd90lt9utH/7wh2E33hZ/+ctfVFFRoR/96EeSwuuf3wceeEBer1fDhg2Ty+WSz+fT448/ruuuu87qsaXv1uwaK8GnkxwOR8DPxph223qaUxlT25rj1dv1u7nzzju1fv16LVu2rN2+cBnr0KFDVVhYqIqKCr399tu68cYbVVBQcMIee+I4i4uLdffdd2vJkiWKjY09YV04jPXyyy+3vh81apRyc3N11lln6bXXXtOECROO22NPHKck+f1+jR8/XnPnzpUkjR07Vhs3btSCBQv0wx/+8IS99tTxtnj55Zd1+eWXKz09PWB7OIzzrbfe0uuvv64333xTI0eOVGFhofLz85Wenq4bb7zxhH3aNVYOdXVQcnKyXC5Xu1RZVlbWLsX2FC1njZxsTGlpaWpoaFB5eflJa/bv39/u9Q8cOBD0383s2bP17rvv6pNPPtHAgQOt7eE21piYGJ199tkaP3685s2bpzFjxug///M/w2qca9euVVlZmcaNG6eoqChFRUWpoKBAv//97xUVFWX1EQ5jbSs+Pl6jRo3S9u3bw+pvKkn9+/fXiBEjArYNHz5cu3fvlhR+/65K0q5du/TRRx/pxz/+sbUtnMb585//XA8++KCuvfZajRo1Snl5efrZz36mefPmWT1KoTNWgk8HxcTEaNy4cVq6dGnA9qVLl2rixIk2dXV6MjMzlZaWFjCmhoYGFRQUWGMaN26coqOjA2r27dunoqIiqyY3N1der1erV6+2alatWiWv1xu0340xRnfeeafeeecdffzxx8rMzAzYH05jPR5jjOrr68NqnFOmTNGGDRtUWFhoPcaPH6/rr79ehYWFGjJkSNiMta36+npt3rxZ/fv3D6u/qSRdeOGF7S41sW3bNg0ePFhSeP67+sorryglJUVXXHGFtS2cxllTUyOnMzBOuFwu63T2kBtrh5dBwzqd/eWXXzabNm0y+fn5Jj4+3nzzzTd2t3ZCVVVV5ssvvzRffvmlkWSefvpp8+WXX1qn4D/xxBPG4/GYd955x2zYsMFcd911xz3FcODAgeajjz4y69atM9/97nePe4rh6NGjzYoVK8yKFSvMqFGjgno65U9/+lPj8XjMp59+GnD6aE1NjVUTLmOdM2eO+eyzz8zOnTvN+vXrzUMPPWScTqdZsmRJWI3zeFqf1WVM+Iz13nvvNZ9++qnZsWOHWblypZkxY4ZJSEiw/tsSLuM0pvnSBFFRUebxxx8327dvN2+88Ybp1auXef31162acBqvz+czgwYNMg888EC7feEyzhtvvNEMGDDAOp39nXfeMcnJyeb+++8PybESfDrpv/7rv8zgwYNNTEyMOe+886zTpUPVJ598YiS1e9x4443GmObTDB9++GGTlpZm3G63ueSSS8yGDRsCXqO2ttbceeedpl+/fiYuLs7MmDHD7N69O6Dm0KFD5vrrrzcJCQkmISHBXH/99aa8vDxIozTHHaMk88orr1g14TLWm266yfpn8IwzzjBTpkyxQo8x4TPO42kbfMJlrC3XNImOjjbp6enmqquuMhs3brT2h8s4W/zv//6vyc7ONm632wwbNsy8+OKLAfvDabwffvihkWS2bt3abl+4jLOystLcfffdZtCgQSY2NtYMGTLE/OIXvzD19fVWTSiN1WGMMR2fHwIAAOi5WOMDAAAiBsEHAABEDIIPAACIGAQfAAAQMQg+AAAgYhB8AABAxCD4AACAiEHwAQAAEYPgAwAAIgbBBwAARAyCDwAAiBgEHwAAEDH+fx4nmN/gv6JdAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(rfi.sub_dict[' GenPwr_(kW)'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "zmq-env", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb b/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb deleted file mode 100644 index b44983f848..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/REP.ipynb +++ /dev/null @@ -1,508 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ZMQ REQ-REP Tests" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from real_fast_interactor import RFInteractor" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: None | REQ-REP protocol: tcp://127.0.0.1:5555\n" - ] - } - ], - "source": [ - "rfi = RFInteractor(ZmqInAddress='tcp://127.0.0.1:5555', ZmqOutAddress=None, verbose=False, path_out='./zmq_out/', name='OFZMQ_test03')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from pyFAST.input_output import FASTOutputFile\n", - "import numpy as np \n", - "import matplotlib.pyplot as plt \n", - "\n", - "\n", - "t = np.linspace(0, 100, 400)\n", - "\n", - "wind_series = FASTOutputFile('./ex_files/tsim.dat').toDataFrame()['U_[3.40]']\n", - "\n", - "frequency = 1.0 # 1 Hz sinusoidal signal\n", - "sampling_rate = 100.0 # Sampling rate of 100 Hz\n", - "duration = 10.0 # Duration of the signal\n", - "t = np.arange(0, duration, 1 / sampling_rate) # Time vector\n", - "bld_pitch = np.sin(2 * np.pi * frequency * t) # Example for another series\n", - "\n", - "fig, axs = plt.subplots(2, 1, figsize=(8, 5))\n", - "axs[0].plot(wind_series)\n", - "axs[0].set_ylabel('$u_h$ (m/s)')\n", - "\n", - "axs[1].plot(t, bld_pitch)\n", - "axs[1].set_ylabel('BldPitch1 (rad)')\n", - "\n", - "fig.tight_layout()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Response sent: 13.459;0;0.0;\n", - "Response sent: 13.452;0;0.0010959013048243186;\n", - "Response sent: 13.281;0;0.0021874775878681775;\n", - "Response sent: 13.445;0;0.0032704208962361686;\n", - "Response sent: 13.351;0;0.004340457347439902;\n", - "Response sent: 13.301;0;0.005393363996459629;\n", - "Response sent: 13.208;0;0.006424985501778961;\n", - "Response sent: 12.615;0;0.007431250524619439;\n", - "Response sent: 12.577;0;0.008408187796654669;\n", - "Response sent: 12.888;0;0.009351941792792112;\n", - "Response sent: 12.776;0;0.010258787947169204;\n", - "Response sent: 12.88;0;0.011125147352313217;\n", - "Response sent: 12.935;0;0.011947600883454012;\n", - "Response sent: 12.893;0;0.012722902692247453;\n", - "Response sent: 12.641;0;0.013447993016655935;\n", - "Response sent: 12.687;0;0.014120010256431278;\n", - "Response sent: 12.909;0;0.01473630226654356;\n", - "Response sent: 12.859;0;0.015294436823985909;\n", - "Response sent: 13.05;0;0.01579221122664752;\n", - "Response sent: 12.941;0;0.01622766098637258;\n", - "Response sent: 12.959;0;0.016599067581897532;\n", - "Response sent: 12.861;0;0.016904965241069367;\n", - "Response sent: 12.46;0;0.017144146725578686;\n", - "Response sent: 12.449;0;0.017315668095377754;\n", - "Response sent: 12.658;0;0.01741885243398063;\n", - "Response sent: 12.964;0;0.017453292519943295;\n", - "Response sent: 12.642;0;0.01741885243398063;\n", - "Response sent: 12.683;0;0.01731566809537775;\n", - "Response sent: 12.867;0;0.017144146725578686;\n", - "Response sent: 13.089;0;0.01690496524106937;\n", - "Response sent: 12.912;0;0.016599067581897536;\n", - "Response sent: 12.68;0;0.01622766098637258;\n", - "Response sent: 12.665;0;0.015792211226647517;\n", - "Response sent: 12.857;0;0.015294436823985905;\n", - "Response sent: 12.831;0;0.014736302266543558;\n", - "Response sent: 13.091;0;0.014120010256431278;\n", - "Response sent: 13.257;0;0.013447993016655935;\n", - "Response sent: 13.226;0;0.012722902692247452;\n", - "Response sent: 13.158;0;0.011947600883454016;\n", - "Response sent: 12.887;0;0.01112514735231322;\n", - "Response sent: 13.148;0;0.010258787947169206;\n", - "Response sent: 13.104;0;0.009351941792792112;\n", - "Response sent: 12.552;0;0.008408187796654674;\n", - "Response sent: 12.077;0;0.007431250524619442;\n", - "Response sent: 11.861;0;0.006424985501778965;\n", - "Response sent: 11.981;0;0.005393363996459631;\n", - "Response sent: 11.905;0;0.004340457347439903;\n", - "Response sent: 11.879;0;0.003270420896236168;\n", - "Response sent: 12.078;0;0.0021874775878681823;\n", - "Response sent: 12.12;0;0.001095901304824322;\n", - "Response sent: 12.114;0;2.1374118819130998e-18;\n", - "Response sent: 12.084;0;-0.001095901304824318;\n", - "Response sent: 12.256;0;-0.002187477587868178;\n", - "Response sent: 12.138;0;-0.0032704208962361717;\n", - "Response sent: 12.124;0;-0.0043404573474399065;\n", - "Response sent: 11.984;0;-0.005393363996459634;\n", - "Response sent: 12.065;0;-0.006424985501778968;\n", - "Response sent: 11.901;0;-0.0074312505246194385;\n", - "Response sent: 11.809;0;-0.008408187796654662;\n", - "Response sent: 11.952;0;-0.009351941792792109;\n", - "Response sent: 12.044;0;-0.010258787947169203;\n", - "Response sent: 12.139;0;-0.011125147352313217;\n", - "Response sent: 12.246;0;-0.011947600883454014;\n", - "Response sent: 12.393;0;-0.01272290269224745;\n", - "Response sent: 12.098;0;-0.013447993016655937;\n", - "Response sent: 11.961;0;-0.014120010256431276;\n", - "Response sent: 11.881;0;-0.014736302266543563;\n", - "Response sent: 11.9;0;-0.015294436823985907;\n", - "Response sent: 12.125;0;-0.015792211226647524;\n", - "Response sent: 12.1;0;-0.016227660986372582;\n", - "Response sent: 11.981;0;-0.016599067581897532;\n", - "Response sent: 12.118;0;-0.016904965241069367;\n", - "Response sent: 12.148;0;-0.017144146725578686;\n", - "Response sent: 12.233;0;-0.01731566809537775;\n", - "Response sent: 12.541;0;-0.01741885243398063;\n", - "Response sent: 12.402;0;-0.017453292519943295;\n", - "Response sent: 12.188;0;-0.01741885243398063;\n", - "Response sent: 12.007;0;-0.017315668095377754;\n", - "Response sent: 11.915;0;-0.017144146725578686;\n", - "Response sent: 11.962;0;-0.016904965241069367;\n", - "Response sent: 12.224;0;-0.016599067581897536;\n", - "Response sent: 12.28;0;-0.01622766098637258;\n", - "Response sent: 12.202;0;-0.01579221122664752;\n", - "Response sent: 11.876;0;-0.015294436823985904;\n", - "Response sent: 11.894;0;-0.014736302266543568;\n", - "Response sent: 11.96;0;-0.01412001025643128;\n", - "Response sent: 12.152;0;-0.01344799301665594;\n", - "Response sent: 12.233;0;-0.012722902692247453;\n", - "Response sent: 11.882;0;-0.011947600883454017;\n", - "Response sent: 11.987;0;-0.011125147352313217;\n", - "Response sent: 12.099;0;-0.010258787947169208;\n", - "Response sent: 12.318;0;-0.009351941792792107;\n", - "Response sent: 11.937;0;-0.008408187796654669;\n", - "Response sent: 11.668;0;-0.007431250524619431;\n", - "Response sent: 11.792;0;-0.00642498550177896;\n", - "Response sent: 11.723;0;-0.0053933639964596335;\n", - "Response sent: 11.713;0;-0.004340457347439912;\n", - "Response sent: 11.459;0;-0.0032704208962361704;\n", - "Response sent: 11.735;0;-0.0021874775878681844;\n", - "Response sent: 11.466;0;-0.0010959013048243166;\n", - "Response sent: 11.104;0;-4.2748237638261996e-18;\n", - "Response sent: 11.085;0;0.0010959013048243082;\n", - "Response sent: 11.021;0;0.002187477587868176;\n", - "Response sent: 10.69;0;0.003270420896236162;\n", - "Response sent: 10.479;0;0.004340457347439904;\n", - "Response sent: 10.75;0;0.005393363996459625;\n", - "Response sent: 10.804;0;0.006424985501778966;\n", - "Response sent: 10.742;0;0.007431250524619436;\n", - "Response sent: 10.857;0;0.008408187796654674;\n", - "Response sent: 10.91;0;0.009351941792792112;\n", - "Response sent: 10.984;0;0.010258787947169211;\n", - "Response sent: 11.195;0;0.01112514735231322;\n", - "Response sent: 11.028;0;0.011947600883454023;\n", - "Response sent: 10.832;0;0.012722902692247458;\n", - "Response sent: 11.05;0;0.013447993016655935;\n", - "Response sent: 11.073;0;0.014120010256431283;\n", - "Response sent: 10.713;0;0.014736302266543554;\n", - "Response sent: 10.802;0;0.015294436823985898;\n", - "Response sent: 10.612;0;0.015792211226647514;\n", - "Response sent: 10.583;0;0.016227660986372575;\n", - "Response sent: 10.148;0;0.016599067581897532;\n", - "Response sent: 10.435;0;0.016904965241069367;\n", - "Response sent: 10.487;0;0.017144146725578686;\n", - "Response sent: 10.096;0;0.01731566809537775;\n", - "Response sent: 10.066;0;0.01741885243398063;\n", - "Response sent: 10.354;0;0.017453292519943295;\n", - "Response sent: 10.233;0;0.01741885243398063;\n", - "Response sent: 10.286;0;0.017315668095377754;\n", - "Response sent: 10.173;0;0.017144146725578686;\n", - "Response sent: 10.043;0;0.016904965241069367;\n", - "Response sent: 10.264;0;0.016599067581897536;\n", - "Response sent: 10.014;0;0.016227660986372586;\n", - "Response sent: 9.838;0;0.015792211226647514;\n", - "Response sent: 9.86;0;0.015294436823985904;\n", - "Response sent: 9.926;0;0.01473630226654356;\n", - "Response sent: 10.129;0;0.014120010256431281;\n", - "Response sent: 10.015;0;0.013447993016655923;\n", - "Response sent: 9.975;0;0.012722902692247443;\n", - "Response sent: 10.395;0;0.011947600883454007;\n", - "Response sent: 10.415;0;0.011125147352313219;\n", - "Response sent: 10.647;0;0.010258787947169208;\n", - "Response sent: 10.478;0;0.009351941792792123;\n", - "Response sent: 10.616;0;0.008408187796654684;\n", - "Response sent: 10.418;0;0.00743125052461946;\n", - "Response sent: 10.173;0;0.0064249855017789615;\n", - "Response sent: 10.419;0;0.005393363996459635;\n", - "Response sent: 10.485;0;0.004340457347439914;\n", - "Response sent: 10.185;0;0.0032704208962361877;\n", - "Response sent: 10.153;0;0.002187477587868171;\n", - "Response sent: 10.237;0;0.0010959013048243188;\n", - "Response sent: 10.021;0;6.412235645739299e-18;\n", - "Response sent: 9.976;0;-0.001095901304824306;\n", - "Response sent: 10.177;0;-0.0021874775878681584;\n", - "Response sent: 10.059;0;-0.003270420896236175;\n", - "Response sent: 9.889;0;-0.004340457347439902;\n", - "Response sent: 10.119;0;-0.005393363996459623;\n", - "Response sent: 10.005;0;-0.006424985501778949;\n", - "Response sent: 10.043;0;-0.007431250524619449;\n", - "Response sent: 10.16;0;-0.008408187796654672;\n", - "Response sent: 10.203;0;-0.00935194179279211;\n", - "Response sent: 10.577;0;-0.010258787947169199;\n", - "Response sent: 10.602;0;-0.011125147352313233;\n", - "Response sent: 10.551;0;-0.011947600883454021;\n", - "Response sent: 10.901;0;-0.012722902692247457;\n", - "Response sent: 10.981;0;-0.013447993016655935;\n", - "Response sent: 10.948;0;-0.014120010256431274;\n", - "Response sent: 11.236;0;-0.01473630226654357;\n", - "Response sent: 11.418;0;-0.015294436823985897;\n", - "Response sent: 11.428;0;-0.015792211226647507;\n", - "Response sent: 11.355;0;-0.01622766098637258;\n", - "Response sent: 11.422;0;-0.01659906758189753;\n", - "Response sent: 11.475;0;-0.016904965241069367;\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "No request received, waiting...\n", - "Requester closed due to inactivity.\n" - ] - } - ], - "source": [ - "import time \n", - "\n", - "count_sampling = 0\n", - "dt_in = 0.5 \n", - "dt_wspd = 0.05 \n", - "\n", - "done = False\n", - "rfi.cont_req_threshold = 5\n", - "\n", - "while not done:\n", - " \n", - " if count_sampling >= 7000:\n", - " count_sampling = 0 \n", - " \n", - " rep = {\n", - " 'VelH': wind_series[count_sampling], \n", - " 'VelV': 0,\n", - " 'BlPitchCom1': np.deg2rad(bld_pitch[count_sampling])\n", - " }\n", - " \n", - " done = rfi.fast_rep(rep, verbose=True)\n", - " count_sampling += 1\n", - " time.sleep(0.1)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request received: VelH;VelV;BldPitchCom1;\n" - ] - } - ], - "source": [ - "rfi.fast_rep(\n", - " {\n", - " 'VelH': wind_series[count_sampling] + 4, \n", - " 'VelV': wind_series[count_sampling]/2,\n", - " 'BlPitchCom1': bld_pitch[count_sampling]\n", - " }, \n", - "verbose=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "from openfast_toolbox.io import FASTOutputFile\n", - "\n", - "fastout = FASTOutputFile('../templatesDir/OFZMQ_test03/OFZMQ_test03.outb').toDataFrame()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# plt.plot(fastout['Wind1VelX_[m/s]'])\n", - "# plt.plot(wind_series[::10])\n", - "plt.plot(fastout['BlPitchC1_[deg]'][200:400], ls='--', marker='o')#, ls='--', marker='o')\n", - "# plt.plot(fastout['Time_[s]'][50:150], np.rad2deg(bld_pitch[50:150]), ls='--', marker='o')#, ls='--', marker='o')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "from pyFAST.input_output import FASTOutputFile\n", - "\n", - "test03 = FASTOutputFile('../templatesDir/OFZMQ_test04/OFZMQ_test04.outb').toDataFrame()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "test03['BlPitchC1_[deg]'][50:].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "import pickle \n", - "\n", - "with open('../subscribed_messages.pkl', 'rb') as f:\n", - " tmp = pickle.load(f)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['TurbId', ' Time', ' Wind1VelX_(m/s)', ' Azimuth_(deg)', ' GenTq_(kN-m)', ' GenPwr_(kW)'])" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tmp.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "9999" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(tmp[' Wind1VelX_(m/s)'])" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'fastout' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[14], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m np\u001b[38;5;241m.\u001b[39mallclose(\u001b[43mfastout\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mWind1VelX_[m/s]\u001b[39m\u001b[38;5;124m'\u001b[39m], tmp[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m Wind1VelX_(m/s)\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", - "\u001b[0;31mNameError\u001b[0m: name 'fastout' is not defined" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "np.allclose(fastout['Wind1VelX_[m/s]'], tmp[' Wind1VelX_(m/s)'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "yoda", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb b/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb deleted file mode 100644 index 000804691d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/SUB.ipynb +++ /dev/null @@ -1,42290 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Zmq Live PUB-SUB" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "#export PATH=$PATH:/Users/lorenzoschena/Desktop/Workspace/openfast/install/bin\n", - "from real_fast_interactor import RFInteractor" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", - "Communication log will be saved at: ./zmq_logs/ \n", - "\n" - ] - } - ], - "source": [ - "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", - " live_plot=False, name='OFZMQ_test01')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "mode": "lines", - "name": " Wind1VelX_(m/s)", - "type": "scatter", - "xaxis": "x", - "y": [ - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0 - ], - "yaxis": "y" - }, - { - "mode": "lines", - "name": " Azimuth_(deg)", - "type": "scatter", - "xaxis": "x2", - "y": [ - 90, - 90.00004, - 90.000158, - 90.000347, - 90.000596, - 90.000893, - 90.001225, - 90.001576, - 90.001932, - 90.002279, - 90.002606, - 90.002903, - 90.003164, - 90.003385, - 90.003566, - 90.003712, - 90.003827, - 90.00392, - 90.004002, - 90.004085, - 90.00418, - 90.004299, - 90.004453, - 90.004651, - 90.004901, - 90.005206, - 90.00557, - 90.00599, - 90.006464, - 90.006987, - 90.00755, - 90.008147, - 90.008766, - 90.009399, - 90.010037, - 90.010673, - 90.011299, - 90.011913, - 90.012512, - 90.013097, - 90.013671, - 90.014239, - 90.014808, - 90.015387, - 90.015985, - 90.016614, - 90.017282, - 90.018, - 90.018777, - 90.019619, - 90.020533, - 90.021521, - 90.022585, - 90.023725, - 90.024937, - 90.026219, - 90.027564, - 90.028966, - 90.030419, - 90.031915, - 90.033449, - 90.035015, - 90.036609, - 90.038227, - 90.039868, - 90.041533, - 90.043223, - 90.044942, - 90.046693, - 90.048481, - 90.050313, - 90.052193, - 90.054128, - 90.056121, - 90.058178, - 90.060301, - 90.062491, - 90.064749, - 90.067072, - 90.069459, - 90.071905, - 90.074406, - 90.076956, - 90.079549, - 90.08218, - 90.084842, - 90.08753, - 90.090241, - 90.09297, - 90.095717, - 90.098479, - 90.101258, - 90.104056, - 90.106873, - 90.109715, - 90.112586, - 90.115488, - 90.118427, - 90.121408, - 90.124432, - 90.127504, - 90.130626, - 90.133798, - 90.137021, - 90.140294, - 90.143616, - 90.146982, - 90.150391, - 90.153838, - 90.15732, - 90.160833, - 90.164372, - 90.167936, - 90.171521, - 90.175125, - 90.178747, - 90.182386, - 90.186044, - 90.18972, - 90.193417, - 90.197136, - 90.200879, - 90.20465, - 90.208449, - 90.212279, - 90.216142, - 90.220036, - 90.223964, - 90.227923, - 90.231914, - 90.235932, - 90.239977, - 90.244044, - 90.248131, - 90.252233, - 90.256347, - 90.26047, - 90.264597, - 90.268728, - 90.27286, - 90.276991, - 90.28112, - 90.285248, - 90.289376, - 90.293504, - 90.297634, - 90.301769, - 90.305911, - 90.310062, - 90.314225, - 90.318402, - 90.322595, - 90.326806, - 90.331036, - 90.335286, - 90.339556, - 90.343847, - 90.348157, - 90.352487, - 90.356836, - 90.361202, - 90.365585, - 90.369984, - 90.374399, - 90.37883, - 90.383277, - 90.387741, - 90.392223, - 90.396724, - 90.401247, - 90.405793, - 90.410365, - 90.414965, - 90.419596, - 90.42426, - 90.428959, - 90.433696, - 90.43847, - 90.443285, - 90.44814, - 90.453035, - 90.457971, - 90.462946, - 90.46796, - 90.473013, - 90.478101, - 90.483225, - 90.488383, - 90.493573, - 90.498794, - 90.504046, - 90.509328, - 90.51464, - 90.519982, - 90.525353, - 90.530756, - 90.53619, - 90.541657, - 90.547157, - 90.552693, - 90.558264, - 90.563872, - 90.569519, - 90.575204, - 90.580928, - 90.586691, - 90.592494, - 90.598336, - 90.604217, - 90.610136, - 90.616093, - 90.622088, - 90.628119, - 90.634186, - 90.64029, - 90.646429, - 90.652604, - 90.658816, - 90.665064, - 90.671349, - 90.677672, - 90.684035, - 90.690438, - 90.696883, - 90.70337, - 90.709901, - 90.716476, - 90.723097, - 90.729763, - 90.736477, - 90.743237, - 90.750043, - 90.756895, - 90.763793, - 90.770735, - 90.777721, - 90.784749, - 90.791819, - 90.79893, - 90.806079, - 90.813266, - 90.82049, - 90.82775, - 90.835045, - 90.842374, - 90.849738, - 90.857135, - 90.864565, - 90.872028, - 90.879523, - 90.887051, - 90.89461, - 90.902201, - 90.909823, - 90.917476, - 90.925158, - 90.932869, - 90.940609, - 90.948376, - 90.956169, - 90.963987, - 90.971829, - 90.979694, - 90.987581, - 90.995489, - 91.003418, - 91.011366, - 91.019333, - 91.027319, - 91.035323, - 91.043346, - 91.051388, - 91.059449, - 91.067528, - 91.075628, - 91.083747, - 91.091887, - 91.100048, - 91.108231, - 91.116435, - 91.124662, - 91.132911, - 91.141183, - 91.149477, - 91.157794, - 91.166133, - 91.174495, - 91.182878, - 91.191284, - 91.199711, - 91.208159, - 91.216628, - 91.225119, - 91.233631, - 91.242163, - 91.250717, - 91.259291, - 91.267887, - 91.276505, - 91.285144, - 91.293805, - 91.302488, - 91.311193, - 91.319921, - 91.328671, - 91.337443, - 91.346237, - 91.355053, - 91.363892, - 91.372751, - 91.381633, - 91.390535, - 91.399458, - 91.408402, - 91.417366, - 91.426351, - 91.435355, - 91.44438, - 91.453425, - 91.46249, - 91.471576, - 91.480683, - 91.489812, - 91.498963, - 91.508136, - 91.517333, - 91.526555, - 91.535801, - 91.545073, - 91.554371, - 91.563697, - 91.573051, - 91.582433, - 91.591845, - 91.601287, - 91.61076, - 91.620264, - 91.6298, - 91.639368, - 91.648969, - 91.658604, - 91.668273, - 91.677977, - 91.687716, - 91.697491, - 91.707303, - 91.717153, - 91.727041, - 91.736967, - 91.746934, - 91.75694, - 91.766987, - 91.777075, - 91.787205, - 91.797377, - 91.807591, - 91.817847, - 91.828146, - 91.838487, - 91.848871, - 91.859297, - 91.869764, - 91.880273, - 91.890822, - 91.901412, - 91.912042, - 91.922711, - 91.933418, - 91.944163, - 91.954946, - 91.965766, - 91.976622, - 91.987514, - 91.998441, - 92.009404, - 92.020401, - 92.031433, - 92.042498, - 92.053598, - 92.06473, - 92.075896, - 92.087094, - 92.098324, - 92.109587, - 92.120881, - 92.132206, - 92.143562, - 92.154949, - 92.166365, - 92.177812, - 92.189288, - 92.200793, - 92.212327, - 92.223891, - 92.235483, - 92.247103, - 92.258753, - 92.27043, - 92.282137, - 92.293872, - 92.305636, - 92.317428, - 92.32925, - 92.3411, - 92.35298, - 92.364888, - 92.376826, - 92.388792, - 92.400788, - 92.412812, - 92.424865, - 92.436946, - 92.449055, - 92.461192, - 92.473356, - 92.485547, - 92.497765, - 92.51001, - 92.52228, - 92.534576, - 92.546897, - 92.559243, - 92.571613, - 92.584007, - 92.596425, - 92.608866, - 92.621329, - 92.633816, - 92.646324, - 92.658855, - 92.671407, - 92.68398, - 92.696574, - 92.709189, - 92.721824, - 92.734479, - 92.747154, - 92.759849, - 92.772564, - 92.785298, - 92.798052, - 92.810825, - 92.823618, - 92.836431, - 92.849263, - 92.862115, - 92.874988, - 92.887882, - 92.900796, - 92.913732, - 92.92669, - 92.939671, - 92.952674, - 92.965702, - 92.978753, - 92.99183, - 93.004931, - 93.018059, - 93.031214, - 93.044395, - 93.057604, - 93.070841, - 93.084107, - 93.097402, - 93.110726, - 93.12408, - 93.137465, - 93.150879, - 93.164325, - 93.177801, - 93.191309, - 93.204849, - 93.21842, - 93.232024, - 93.245659, - 93.259328, - 93.273029, - 93.286762, - 93.300529, - 93.314328, - 93.328161, - 93.342027, - 93.355925, - 93.369857, - 93.383821, - 93.397819, - 93.411849, - 93.425912, - 93.440008, - 93.454137, - 93.468298, - 93.482491, - 93.496717, - 93.510975, - 93.525265, - 93.539588, - 93.553943, - 93.568331, - 93.582751, - 93.597204, - 93.611689, - 93.626208, - 93.640759, - 93.655344, - 93.669963, - 93.684615, - 93.699302, - 93.714023, - 93.728779, - 93.74357, - 93.758397, - 93.773259, - 93.788156, - 93.80309, - 93.818061, - 93.833067, - 93.848111, - 93.863192, - 93.878309, - 93.893464, - 93.908656, - 93.923886, - 93.939153, - 93.954457, - 93.969799, - 93.985179, - 94.000596, - 94.01605, - 94.031541, - 94.047069, - 94.062635, - 94.078236, - 94.093874, - 94.109548, - 94.125258, - 94.141003, - 94.156782, - 94.172596, - 94.188443, - 94.204324, - 94.220237, - 94.236182, - 94.252159, - 94.268167, - 94.284206, - 94.300274, - 94.316372, - 94.332498, - 94.348653, - 94.364836, - 94.381047, - 94.397284, - 94.413548, - 94.429838, - 94.446153, - 94.462495, - 94.478861, - 94.495252, - 94.511667, - 94.528107, - 94.544571, - 94.561058, - 94.577569, - 94.594103, - 94.610661, - 94.627241, - 94.643845, - 94.660472, - 94.677122, - 94.693794, - 94.71049, - 94.727209, - 94.743951, - 94.760717, - 94.777506, - 94.794318, - 94.811155, - 94.828015, - 94.844899, - 94.861808, - 94.878741, - 94.895698, - 94.912681, - 94.929688, - 94.94672, - 94.963777, - 94.98086, - 94.997968, - 95.015101, - 95.03226, - 95.049445, - 95.066656, - 95.083893, - 95.101156, - 95.118445, - 95.13576, - 95.153102, - 95.17047, - 95.187864, - 95.205285, - 95.222732, - 95.240206, - 95.257707, - 95.275235, - 95.292789, - 95.310371, - 95.327979, - 95.345614, - 95.363276, - 95.380966, - 95.398682, - 95.416426, - 95.434198, - 95.451997, - 95.469824, - 95.487678, - 95.505561, - 95.523472, - 95.541411, - 95.559379, - 95.577376, - 95.595402, - 95.613457, - 95.631541, - 95.649655, - 95.6678, - 95.685974, - 95.70418, - 95.722416, - 95.740684, - 95.758983, - 95.777314, - 95.795677, - 95.814072, - 95.8325, - 95.850961, - 95.869455, - 95.887982, - 95.906543, - 95.925138, - 95.943766, - 95.962428, - 95.981125, - 95.999856, - 96.01862, - 96.03742, - 96.056253, - 96.075121, - 96.094024, - 96.112961, - 96.131932, - 96.150938, - 96.169978, - 96.189052, - 96.208161, - 96.227304, - 96.24648, - 96.265691, - 96.284935, - 96.304213, - 96.323523, - 96.342867, - 96.362244, - 96.381653, - 96.401094, - 96.420568, - 96.440073, - 96.459609, - 96.479177, - 96.498776, - 96.518406, - 96.538066, - 96.557756, - 96.577477, - 96.597228, - 96.617008, - 96.636818, - 96.656658, - 96.676527, - 96.696425, - 96.716353, - 96.736309, - 96.756295, - 96.77631, - 96.796355, - 96.816428, - 96.83653, - 96.856662, - 96.876823, - 96.897013, - 96.917232, - 96.937481, - 96.957759, - 96.978066, - 96.998403, - 97.01877, - 97.039166, - 97.059591, - 97.080046, - 97.100531, - 97.121045, - 97.141589, - 97.162163, - 97.182766, - 97.203399, - 97.224061, - 97.244753, - 97.265473, - 97.286223, - 97.307002, - 97.32781, - 97.348646, - 97.369511, - 97.390403, - 97.411324, - 97.432272, - 97.453248, - 97.474251, - 97.495281, - 97.516337, - 97.53742, - 97.558529, - 97.579665, - 97.600825, - 97.622012, - 97.643224, - 97.66446, - 97.685722, - 97.707008, - 97.728319, - 97.749654, - 97.771014, - 97.792397, - 97.813804, - 97.835235, - 97.85669, - 97.878169, - 97.899671, - 97.921197, - 97.942747, - 97.96432, - 97.985917, - 98.007538, - 98.029184, - 98.050853, - 98.072548, - 98.094267, - 98.116011, - 98.13778, - 98.159575, - 98.181396, - 98.203243, - 98.225116, - 98.247017, - 98.268945, - 98.290901, - 98.312884, - 98.334896, - 98.356937, - 98.379007, - 98.401106, - 98.423235, - 98.445394, - 98.467583, - 98.489802, - 98.512053, - 98.534334, - 98.556647, - 98.578991, - 98.601367, - 98.623775, - 98.646215, - 98.668687, - 98.691192, - 98.713729, - 98.736298, - 98.7589, - 98.781535, - 98.804203, - 98.826904, - 98.849639, - 98.872406, - 98.895206, - 98.91804, - 98.940907, - 98.963808, - 98.986741, - 99.009709, - 99.032709, - 99.055744, - 99.078812, - 99.101913, - 99.125048, - 99.148217, - 99.171419, - 99.194655, - 99.217925, - 99.241228, - 99.264565, - 99.287936, - 99.31134, - 99.334779, - 99.358251, - 99.381756, - 99.405296, - 99.428869, - 99.452477, - 99.476118, - 99.499792, - 99.523501, - 99.547244, - 99.57102, - 99.59483, - 99.618673, - 99.64255, - 99.66646, - 99.690404, - 99.71438, - 99.73839, - 99.762433, - 99.786508, - 99.810616, - 99.834756, - 99.858929, - 99.883133, - 99.907369, - 99.931636, - 99.955935, - 99.980264, - 100.004624, - 100.029014, - 100.053435, - 100.077885, - 100.102365, - 100.126874, - 100.151412, - 100.175979, - 100.200574, - 100.225197, - 100.249847, - 100.274525, - 100.29923, - 100.323962, - 100.348721, - 100.373507, - 100.398319, - 100.423157, - 100.448021, - 100.472911, - 100.497827, - 100.522768, - 100.547736, - 100.572729, - 100.597748, - 100.622793, - 100.647864, - 100.672961, - 100.698084, - 100.723233, - 100.748408, - 100.773609, - 100.798837, - 100.824091, - 100.849373, - 100.874681, - 100.900016, - 100.925378, - 100.950768, - 100.976185, - 101.00163, - 101.027104, - 101.052605, - 101.078135, - 101.103693, - 101.12928, - 101.154897, - 101.180542, - 101.206217, - 101.231922, - 101.257656, - 101.28342, - 101.309214, - 101.335038, - 101.360892, - 101.386777, - 101.412691, - 101.438636, - 101.464611, - 101.490617, - 101.516652, - 101.542718, - 101.568814, - 101.59494, - 101.621096, - 101.647283, - 101.673499, - 101.699745, - 101.72602, - 101.752326, - 101.778661, - 101.805026, - 101.83142, - 101.857844, - 101.884296, - 101.910778, - 101.937289, - 101.963829, - 101.990398, - 102.016995, - 102.043621, - 102.070275, - 102.096958, - 102.12367, - 102.150409, - 102.177178, - 102.203974, - 102.230799, - 102.257651, - 102.284533, - 102.311442, - 102.33838, - 102.365346, - 102.392341, - 102.419364, - 102.446416, - 102.473497, - 102.500606, - 102.527745, - 102.554912, - 102.582109, - 102.609335, - 102.63659, - 102.663875, - 102.69119, - 102.718534, - 102.745908, - 102.773312, - 102.800747, - 102.828212, - 102.855707, - 102.883232, - 102.910789, - 102.938376, - 102.965994, - 102.993643, - 103.021323, - 103.049035, - 103.076778, - 103.104552, - 103.132358, - 103.160196, - 103.188065, - 103.215966, - 103.243899, - 103.271863, - 103.29986, - 103.327889, - 103.355949, - 103.384042, - 103.412166, - 103.440323, - 103.468511, - 103.496732, - 103.524984, - 103.553269, - 103.581585, - 103.609933, - 103.638314, - 103.666726, - 103.69517, - 103.723646, - 103.752154, - 103.780693, - 103.809264, - 103.837867, - 103.866501, - 103.895167, - 103.923864, - 103.952593, - 103.981352, - 104.010143, - 104.038965, - 104.067817, - 104.0967, - 104.125614, - 104.154559, - 104.183533, - 104.212539, - 104.241574, - 104.270639, - 104.299734, - 104.328858, - 104.358012, - 104.387195, - 104.416408, - 104.44565, - 104.47492, - 104.504219, - 104.533546, - 104.562902, - 104.592286, - 104.621698, - 104.651137, - 104.680604, - 104.710098, - 104.739619, - 104.769166, - 104.798741, - 104.828341, - 104.857968, - 104.88762, - 104.917299, - 104.947003, - 104.976732, - 105.006486, - 105.036266, - 105.06607, - 105.095899, - 105.125752, - 105.155631, - 105.185533, - 105.21546, - 105.245411, - 105.275387, - 105.305387, - 105.335411, - 105.36546, - 105.395533, - 105.425631, - 105.455753, - 105.485901, - 105.516073, - 105.546271, - 105.576493, - 105.606742, - 105.637016, - 105.667317, - 105.697644, - 105.727997, - 105.758377, - 105.788785, - 105.81922, - 105.849683, - 105.880174, - 105.910693, - 105.941242, - 105.971819, - 106.002426, - 106.033063, - 106.063731, - 106.094428, - 106.125157, - 106.155917, - 106.186709, - 106.217533, - 106.248388, - 106.279277, - 106.310198, - 106.341152, - 106.37214, - 106.403161, - 106.434215, - 106.465304, - 106.496426, - 106.527583, - 106.558774, - 106.589999, - 106.621258, - 106.652552, - 106.683881, - 106.715244, - 106.746641, - 106.778072, - 106.809538, - 106.841038, - 106.872571, - 106.904139, - 106.93574, - 106.967375, - 106.999043, - 107.030744, - 107.062478, - 107.094244, - 107.126044, - 107.157875, - 107.189739, - 107.221634, - 107.253561, - 107.28552, - 107.31751, - 107.34953, - 107.381582, - 107.413664, - 107.445777, - 107.47792, - 107.510093, - 107.542295, - 107.574528, - 107.60679, - 107.639082, - 107.671402, - 107.703752, - 107.736131, - 107.768538, - 107.800975, - 107.83344, - 107.865933, - 107.898455, - 107.931005, - 107.963584, - 107.99619, - 108.028825, - 108.061488, - 108.094179, - 108.126898, - 108.159645, - 108.19242, - 108.225224, - 108.258055, - 108.290915, - 108.323802, - 108.356718, - 108.389662, - 108.422634, - 108.455635, - 108.488664, - 108.521722, - 108.554808, - 108.587923, - 108.621067, - 108.654239, - 108.68744, - 108.72067, - 108.753929, - 108.787218, - 108.820535, - 108.853882, - 108.887258, - 108.920664, - 108.954099, - 108.987564, - 109.021059, - 109.054584, - 109.088139, - 109.121725, - 109.15534, - 109.188987, - 109.222664, - 109.256371, - 109.29011, - 109.32388, - 109.357681, - 109.391513, - 109.425376, - 109.459271, - 109.493197, - 109.527155, - 109.561145, - 109.595166, - 109.629219, - 109.663303, - 109.69742, - 109.731568, - 109.765748, - 109.79996, - 109.834204, - 109.86848, - 109.902787, - 109.937125, - 109.971496, - 110.005897, - 110.04033, - 110.074794, - 110.109289, - 110.143815, - 110.178372, - 110.212959, - 110.247576, - 110.282223, - 110.316901, - 110.351607, - 110.386344, - 110.421109, - 110.455903, - 110.490726, - 110.525578, - 110.560457, - 110.595365, - 110.630301, - 110.665264, - 110.700255, - 110.735272, - 110.770317, - 110.805389, - 110.840488, - 110.875613, - 110.910764, - 110.945942, - 110.981146, - 111.016376, - 111.051633, - 111.086915, - 111.122223, - 111.157557, - 111.192917, - 111.228303, - 111.263716, - 111.299154, - 111.334618, - 111.370109, - 111.405626, - 111.44117, - 111.476741, - 111.512339, - 111.547964, - 111.583616, - 111.619296, - 111.655004, - 111.690741, - 111.726505, - 111.762299, - 111.798121, - 111.833973, - 111.869854, - 111.905765, - 111.941707, - 111.977679, - 112.013681, - 112.049715, - 112.08578, - 112.121877, - 112.158006, - 112.194167, - 112.230361, - 112.266587, - 112.302847, - 112.339139, - 112.375465, - 112.411825, - 112.448218, - 112.484646, - 112.521107, - 112.557602, - 112.594132, - 112.630696, - 112.667295, - 112.703928, - 112.740595, - 112.777297, - 112.814034, - 112.850804, - 112.887609, - 112.924448, - 112.961321, - 112.998228, - 113.035169, - 113.072144, - 113.109152, - 113.146193, - 113.183267, - 113.220374, - 113.257514, - 113.294686, - 113.33189, - 113.369125, - 113.406392, - 113.44369, - 113.481019, - 113.518378, - 113.555767, - 113.593186, - 113.630635, - 113.668113, - 113.70562, - 113.743155, - 113.780719, - 113.81831, - 113.855929, - 113.893576, - 113.93125, - 113.968951, - 114.006678, - 114.044432, - 114.082211, - 114.120017, - 114.157848, - 114.195704, - 114.233586, - 114.271492, - 114.309424, - 114.34738, - 114.385361, - 114.423367, - 114.461397, - 114.499451, - 114.53753, - 114.575633, - 114.61376, - 114.651912, - 114.690088, - 114.728288, - 114.766513, - 114.804763, - 114.843037, - 114.881337, - 114.919661, - 114.95801, - 114.996385, - 115.034785, - 115.073211, - 115.111663, - 115.150141, - 115.188646, - 115.227177, - 115.265735, - 115.30432, - 115.342933, - 115.381573, - 115.420241, - 115.458938, - 115.497663, - 115.536417, - 115.5752, - 115.614013, - 115.652856, - 115.691728, - 115.730631, - 115.769565, - 115.80853, - 115.847526, - 115.886553, - 115.925613, - 115.964704, - 116.003828, - 116.042985, - 116.082174, - 116.121397, - 116.160653, - 116.199942, - 116.239265, - 116.278621, - 116.318012, - 116.357437, - 116.396895, - 116.436388, - 116.475915, - 116.515476, - 116.55507, - 116.5947, - 116.634363, - 116.674059, - 116.71379, - 116.753555, - 116.793353, - 116.833184, - 116.873049, - 116.912947, - 116.952877, - 116.99284, - 117.032836, - 117.072863, - 117.112923, - 117.153014, - 117.193136, - 117.233289, - 117.273473, - 117.313687, - 117.353931, - 117.394205, - 117.434508, - 117.47484, - 117.515202, - 117.555591, - 117.596009, - 117.636455, - 117.676928, - 117.717429, - 117.757957, - 117.798512, - 117.839094, - 117.879702, - 117.920336, - 117.960997, - 118.001684, - 118.042396, - 118.083134, - 118.123899, - 118.164688, - 118.205504, - 118.246345, - 118.287212, - 118.328105, - 118.369023, - 118.409968, - 118.450938, - 118.491935, - 118.532958, - 118.574008, - 118.615085, - 118.656189, - 118.69732, - 118.738478, - 118.779665, - 118.820879, - 118.862122, - 118.903393, - 118.944694, - 118.986023, - 119.027383, - 119.068772, - 119.110191, - 119.151641, - 119.193122, - 119.234634, - 119.276177, - 119.317752, - 119.359359, - 119.400998, - 119.44267, - 119.484374, - 119.526112, - 119.567882, - 119.609686, - 119.651524, - 119.693395, - 119.7353, - 119.777239, - 119.819213, - 119.86122, - 119.903262, - 119.945338, - 119.987448, - 120.029593, - 120.071772, - 120.113985, - 120.156233, - 120.198515, - 120.240831, - 120.28318, - 120.325564, - 120.367981, - 120.410432, - 120.452916, - 120.495433, - 120.537983, - 120.580566, - 120.623181, - 120.665829, - 120.708508, - 120.751219, - 120.793962, - 120.836735, - 120.879539, - 120.922374, - 120.965239, - 121.008133, - 121.051057, - 121.09401, - 121.136992, - 121.180002, - 121.22304, - 121.266106, - 121.3092, - 121.352321, - 121.395469, - 121.438644, - 121.481845, - 121.525073, - 121.568327, - 121.611607, - 121.654912, - 121.698243, - 121.7416, - 121.784982, - 121.828389, - 121.87182, - 121.915277, - 121.958758, - 122.002265, - 122.045796, - 122.089351, - 122.132932, - 122.176537, - 122.220167, - 122.263822, - 122.307502, - 122.351207, - 122.394938, - 122.438694, - 122.482476, - 122.526284, - 122.570118, - 122.613979, - 122.657866, - 122.70178, - 122.745722, - 122.789692, - 122.833689, - 122.877715, - 122.92177, - 122.965854, - 123.009967, - 123.05411, - 123.098284, - 123.142488, - 123.186723, - 123.23099, - 123.275288, - 123.319618, - 123.363981, - 123.408377, - 123.452806, - 123.497269, - 123.541765, - 123.586295, - 123.63086, - 123.675459, - 123.720093, - 123.764762, - 123.809467, - 123.854206, - 123.898981, - 123.943792, - 123.988639, - 124.033521, - 124.078439, - 124.123393, - 124.168383, - 124.213408, - 124.258469, - 124.303566, - 124.348698, - 124.393866, - 124.439069, - 124.484306, - 124.529579, - 124.574885, - 124.620226, - 124.665601, - 124.711009, - 124.756451, - 124.801925, - 124.847431, - 124.89297, - 124.93854, - 124.984141, - 125.029774, - 125.075436, - 125.121129, - 125.16685, - 125.212601, - 125.258381, - 125.304189, - 125.350025, - 125.395888, - 125.441778, - 125.487695, - 125.533638, - 125.579607, - 125.625602, - 125.671622, - 125.717667, - 125.763737, - 125.809831, - 125.855949, - 125.902092, - 125.948258, - 125.994448, - 126.040662, - 126.086899, - 126.13316, - 126.179444, - 126.225751, - 126.272082, - 126.318436, - 126.364813, - 126.411215, - 126.457639, - 126.504088, - 126.550561, - 126.597057, - 126.643579, - 126.690124, - 126.736695, - 126.783291, - 126.829912, - 126.876559, - 126.923233, - 126.969932, - 127.016659, - 127.063413, - 127.110194, - 127.157003, - 127.203841, - 127.250707, - 127.297603, - 127.344528, - 127.391483, - 127.438468, - 127.485484, - 127.532531, - 127.579609, - 127.626719, - 127.673861, - 127.721036, - 127.768243, - 127.815483, - 127.862756, - 127.910063, - 127.957403, - 128.004778, - 128.052186, - 128.099629, - 128.147107, - 128.194619, - 128.242165, - 128.289747, - 128.337363, - 128.385014, - 128.4327, - 128.48042, - 128.528175, - 128.575965, - 128.62379, - 128.671648, - 128.719541, - 128.767468, - 128.815429, - 128.863424, - 128.911451, - 128.959512, - 129.007606, - 129.055732, - 129.10389, - 129.15208, - 129.200302, - 129.248555, - 129.296839, - 129.345153, - 129.393498, - 129.441872, - 129.490276, - 129.538709, - 129.587171, - 129.635662, - 129.68418, - 129.732726, - 129.781299, - 129.829899, - 129.878526, - 129.927179, - 129.975859, - 130.024563, - 130.073294, - 130.122049, - 130.17083, - 130.219635, - 130.268465, - 130.31732, - 130.366199, - 130.415103, - 130.46403, - 130.512982, - 130.561958, - 130.610958, - 130.659983, - 130.709031, - 130.758104, - 130.807201, - 130.856323, - 130.905469, - 130.954641, - 131.003837, - 131.053059, - 131.102306, - 131.151579, - 131.200878, - 131.250203, - 131.299555, - 131.348935, - 131.398341, - 131.447776, - 131.497239, - 131.546731, - 131.596251, - 131.645802, - 131.695382, - 131.744993, - 131.794634, - 131.844306, - 131.894011, - 131.943747, - 131.993515, - 132.043317, - 132.093151, - 132.143019, - 132.192921, - 132.242856, - 132.292827, - 132.342832, - 132.392872, - 132.442947, - 132.493057, - 132.543204, - 132.593386, - 132.643604, - 132.693858, - 132.744148, - 132.794475, - 132.844838, - 132.895237, - 132.945672, - 132.996143, - 133.04665, - 133.097193, - 133.147772, - 133.198386, - 133.249036, - 133.299721, - 133.35044, - 133.401194, - 133.451982, - 133.502804, - 133.553659, - 133.604547, - 133.655468, - 133.706421, - 133.757406, - 133.808422, - 133.859469, - 133.910547, - 133.961654, - 134.012792, - 134.063958, - 134.115153, - 134.166377, - 134.217629, - 134.268907, - 134.320214, - 134.371546, - 134.422905, - 134.474291, - 134.525701, - 134.577137, - 134.628598, - 134.680084, - 134.731594, - 134.783129, - 134.834687, - 134.886269, - 134.937875, - 134.989504, - 135.041157, - 135.092834, - 135.144533, - 135.196256, - 135.248002, - 135.299772, - 135.351565, - 135.403382, - 135.455223, - 135.507088, - 135.558977, - 135.61089, - 135.662828, - 135.714791, - 135.766779, - 135.818793, - 135.870833, - 135.9229, - 135.974993, - 136.027113, - 136.07926, - 136.131436, - 136.183639, - 136.235872, - 136.288134, - 136.340425, - 136.392747, - 136.445099, - 136.497482, - 136.549896, - 136.602342, - 136.654821, - 136.707332, - 136.759876, - 136.812454, - 136.865065, - 136.917711, - 136.970391, - 137.023107, - 137.075857, - 137.128643, - 137.181465, - 137.234322, - 137.287216, - 137.340146, - 137.393112, - 137.446115, - 137.499155, - 137.552231, - 137.605345, - 137.658495, - 137.711681, - 137.764904, - 137.818164, - 137.87146, - 137.924793, - 137.978161, - 138.031566, - 138.085006, - 138.138481, - 138.191992, - 138.245537, - 138.299117, - 138.35273, - 138.406378, - 138.460059, - 138.513772, - 138.567519, - 138.621297, - 138.675106, - 138.728947, - 138.782819, - 138.83672, - 138.890651, - 138.944612, - 138.998601, - 139.052618, - 139.106663, - 139.160736, - 139.214835, - 139.268961, - 139.323113, - 139.377291, - 139.431494, - 139.485722, - 139.539975, - 139.594252, - 139.648553, - 139.702878, - 139.757227, - 139.811599, - 139.865994, - 139.920412, - 139.974853, - 140.029317, - 140.083804, - 140.138313, - 140.192845, - 140.247401, - 140.301979, - 140.35658, - 140.411204, - 140.465852, - 140.520523, - 140.575218, - 140.629937, - 140.684681, - 140.739449, - 140.794242, - 140.849061, - 140.903905, - 140.958776, - 141.013673, - 141.068597, - 141.123548, - 141.178528, - 141.233535, - 141.288572, - 141.343637, - 141.398732, - 141.453858, - 141.509014, - 141.564201, - 141.619419, - 141.674669, - 141.729952, - 141.785267, - 141.840615, - 141.895997, - 141.951413, - 142.006863, - 142.062347, - 142.117866, - 142.17342, - 142.229009, - 142.284633, - 142.340294, - 142.39599, - 142.451721, - 142.507489, - 142.563293, - 142.619133, - 142.675009, - 142.73092, - 142.786868, - 142.842851, - 142.89887, - 142.954924, - 143.011014, - 143.067138, - 143.123297, - 143.179491, - 143.235719, - 143.29198, - 143.348275, - 143.404603, - 143.460964, - 143.517357, - 143.573782, - 143.630239, - 143.686726, - 143.743244, - 143.799792, - 143.85637, - 143.912977, - 143.969612, - 144.026276, - 144.082968, - 144.139687, - 144.196432, - 144.253205, - 144.310003, - 144.366827, - 144.423676, - 144.480551, - 144.537449, - 144.594372, - 144.651319, - 144.70829, - 144.765284, - 144.822301, - 144.879342, - 144.936405, - 144.993491, - 145.0506, - 145.107731, - 145.164885, - 145.222062, - 145.279261, - 145.336483, - 145.393728, - 145.450995, - 145.508286, - 145.5656, - 145.622938, - 145.680299, - 145.737684, - 145.795093, - 145.852527, - 145.909986, - 145.96747, - 146.02498, - 146.082516, - 146.140079, - 146.197669, - 146.255286, - 146.312931, - 146.370604, - 146.428307, - 146.486038, - 146.5438, - 146.601592, - 146.659414, - 146.717268, - 146.775154, - 146.833071, - 146.891022, - 146.949005, - 147.007022, - 147.065072, - 147.123157, - 147.181276, - 147.23943, - 147.29762, - 147.355844, - 147.414105, - 147.472401, - 147.530734, - 147.589103, - 147.647508, - 147.70595, - 147.764429, - 147.822945, - 147.881497, - 147.940086, - 147.998712, - 148.057374, - 148.116073, - 148.174808, - 148.23358, - 148.292387, - 148.35123, - 148.410109, - 148.469023, - 148.527971, - 148.586954, - 148.645971, - 148.705022, - 148.764106, - 148.823222, - 148.882372, - 148.941553, - 149.000765, - 149.060009, - 149.119283, - 149.178587, - 149.23792, - 149.297283, - 149.356674, - 149.416093, - 149.47554, - 149.535014, - 149.594515, - 149.654042, - 149.713595, - 149.773173, - 149.832776, - 149.892404, - 149.952056, - 150.011732, - 150.071432, - 150.131155, - 150.190901, - 150.250671, - 150.310463, - 150.370277, - 150.430115, - 150.489974, - 150.549856, - 150.609761, - 150.669688, - 150.729637, - 150.789609, - 150.849604, - 150.909622, - 150.969662, - 151.029726, - 151.089814, - 151.149925, - 151.210061, - 151.270221, - 151.330405, - 151.390616, - 151.450851, - 151.511113, - 151.571402, - 151.631717, - 151.69206, - 151.752431, - 151.812831, - 151.873259, - 151.933718, - 151.994206, - 152.054724, - 152.115274, - 152.175855, - 152.236468, - 152.297113, - 152.357792, - 152.418504, - 152.479249, - 152.540029, - 152.600844, - 152.661693, - 152.722578, - 152.783499, - 152.844455, - 152.905448, - 152.966477, - 153.027543, - 153.088646, - 153.149786, - 153.210963, - 153.272177, - 153.333428, - 153.394717, - 153.456043, - 153.517406, - 153.578806, - 153.640243, - 153.701717, - 153.763228, - 153.824775, - 153.886358, - 153.947977, - 154.009631, - 154.071321, - 154.133046, - 154.194805, - 154.256598, - 154.318424, - 154.380284, - 154.442176, - 154.504101, - 154.566057, - 154.628045, - 154.690063, - 154.752112, - 154.814191, - 154.876298, - 154.938435, - 155.0006, - 155.062793, - 155.125013, - 155.18726, - 155.249533, - 155.311833, - 155.374158, - 155.436508, - 155.498884, - 155.561283, - 155.623707, - 155.686155, - 155.748626, - 155.811121, - 155.873638, - 155.936179, - 155.998743, - 156.061329, - 156.123937, - 156.186569, - 156.249222, - 156.311899, - 156.374597, - 156.437319, - 156.500063, - 156.56283, - 156.62562, - 156.688434, - 156.751271, - 156.814132, - 156.877017, - 156.939926, - 157.00286, - 157.065819, - 157.128804, - 157.191815, - 157.254852, - 157.317916, - 157.381007, - 157.444125, - 157.507272, - 157.570447, - 157.633652, - 157.696886, - 157.76015, - 157.823445, - 157.88677, - 157.950127, - 158.013516, - 158.076938, - 158.140392, - 158.203879, - 158.267401, - 158.330956, - 158.394545, - 158.458169, - 158.521829, - 158.585523, - 158.649253, - 158.713019, - 158.776821, - 158.840659, - 158.904533, - 158.968443, - 159.03239, - 159.096374, - 159.160393, - 159.22445, - 159.288542, - 159.352671, - 159.416836, - 159.481036, - 159.545273, - 159.609545, - 159.673852, - 159.738194, - 159.80257, - 159.866981, - 159.931426, - 159.995904, - 160.060416, - 160.12496, - 160.189536, - 160.254144, - 160.318783, - 160.383453, - 160.448153, - 160.512883, - 160.577643, - 160.642431, - 160.707247, - 160.772092, - 160.836963, - 160.901861, - 160.966786, - 161.031736, - 161.096712, - 161.161713, - 161.226739, - 161.291788, - 161.356862, - 161.421959, - 161.487079, - 161.552222, - 161.617388, - 161.682577, - 161.747787, - 161.81302, - 161.878274, - 161.94355, - 162.008848, - 162.074168, - 162.139509, - 162.204873, - 162.270258, - 162.335665, - 162.401094, - 162.466545, - 162.532019, - 162.597515, - 162.663035, - 162.728578, - 162.794144, - 162.859735, - 162.925349, - 162.990989, - 163.056654, - 163.122344, - 163.18806, - 163.253802, - 163.319572, - 163.385369, - 163.451193, - 163.517047, - 163.582929, - 163.64884, - 163.714781, - 163.780753, - 163.846755, - 163.912789, - 163.978855, - 164.044953, - 164.111083, - 164.177247, - 164.243445, - 164.309676, - 164.375942, - 164.442242, - 164.508577, - 164.574947, - 164.641353, - 164.707795, - 164.774272, - 164.840786, - 164.907335, - 164.973921, - 165.040543, - 165.107202, - 165.173897, - 165.240628, - 165.307395, - 165.374198, - 165.441038, - 165.507913, - 165.574824, - 165.64177, - 165.708751, - 165.775767, - 165.842817, - 165.909902, - 165.97702, - 166.044172, - 166.111356, - 166.178574, - 166.245823, - 166.313104, - 166.380416, - 166.447759, - 166.515132, - 166.582535, - 166.649967, - 166.717427, - 166.784916, - 166.852432, - 166.919976, - 166.987546, - 167.055142, - 167.122764, - 167.190412, - 167.258085, - 167.325782, - 167.393503, - 167.461248, - 167.529017, - 167.596809, - 167.664624, - 167.732461, - 167.800321, - 167.868203, - 167.936108, - 168.004034, - 168.071982, - 168.139952, - 168.207944, - 168.275957, - 168.343992, - 168.412049, - 168.480128, - 168.548229, - 168.616352, - 168.684498, - 168.752666, - 168.820858, - 168.889072, - 168.95731, - 169.025572, - 169.093858, - 169.162169, - 169.230505, - 169.298866, - 169.367253, - 169.435667, - 169.504107, - 169.572574, - 169.64107, - 169.709594, - 169.778146, - 169.846728, - 169.915339, - 169.98398, - 170.052653, - 170.121356, - 170.190091, - 170.258858, - 170.327657, - 170.39649, - 170.465355, - 170.534255, - 170.603188, - 170.672155, - 170.741158, - 170.810195, - 170.879267, - 170.948375, - 171.017518, - 171.086697, - 171.155912, - 171.225163, - 171.29445, - 171.363773, - 171.433132, - 171.502527, - 171.571958, - 171.641425, - 171.710928, - 171.780466, - 171.85004, - 171.919649, - 171.989292, - 172.05897, - 172.128683, - 172.198429, - 172.268209, - 172.338021, - 172.407867, - 172.477745, - 172.547655, - 172.617596, - 172.687568, - 172.757571, - 172.827603, - 172.897666, - 172.967757, - 173.037877, - 173.108024, - 173.1782, - 173.248402, - 173.318631, - 173.388886, - 173.459167, - 173.529473, - 173.599804, - 173.67016, - 173.740539, - 173.810943, - 173.881369, - 173.951819, - 174.022292, - 174.092787, - 174.163304, - 174.233844, - 174.304406, - 174.374989, - 174.445595, - 174.516222, - 174.586871, - 174.657541, - 174.728234, - 174.798948, - 174.869683, - 174.940441, - 175.011221, - 175.082024, - 175.152848, - 175.223696, - 175.294567, - 175.365461, - 175.436379, - 175.50732, - 175.578286, - 175.649277, - 175.720293, - 175.791335, - 175.862403, - 175.933497, - 176.004618, - 176.075767, - 176.146943, - 176.218148, - 176.289381, - 176.360643, - 176.431935, - 176.503257, - 176.57461, - 176.645993, - 176.717408, - 176.788854, - 176.860332, - 176.931843, - 177.003386, - 177.074963, - 177.146573, - 177.218216, - 177.289893, - 177.361605, - 177.43335, - 177.50513, - 177.576945, - 177.648794, - 177.720678, - 177.792597, - 177.864551, - 177.936539, - 178.008562, - 178.08062, - 178.152712, - 178.224838, - 178.296999, - 178.369193, - 178.441421, - 178.513683, - 178.585978, - 178.658305, - 178.730665, - 178.803057, - 178.87548, - 178.947935, - 179.020421, - 179.092937, - 179.165483, - 179.238058, - 179.310663, - 179.383297, - 179.455958, - 179.528648, - 179.601364, - 179.674107, - 179.746877, - 179.819673, - 179.892493, - 179.965339, - 180.03821, - 180.111104, - 180.184023, - 180.256964, - 180.329929, - 180.402916, - 180.475926, - 180.548958, - 180.622011, - 180.695086, - 180.768183, - 180.8413, - 180.914439, - 180.987599, - 181.06078, - 181.133981, - 181.207203, - 181.280446, - 181.353711, - 181.426996, - 181.500302, - 181.573629, - 181.646978, - 181.720348, - 181.79374, - 181.867154, - 181.940591, - 182.01405, - 182.087532, - 182.161037, - 182.234566, - 182.308119, - 182.381696, - 182.455298, - 182.528926, - 182.602579, - 182.676258, - 182.749964, - 182.823697, - 182.897457, - 182.971246, - 183.045062, - 183.118908, - 183.192783, - 183.266687, - 183.340622, - 183.414587, - 183.488583, - 183.56261, - 183.636669, - 183.71076, - 183.784884, - 183.85904, - 183.933229, - 184.007451, - 184.081706, - 184.155995, - 184.230317, - 184.304674, - 184.379064, - 184.453489, - 184.527947, - 184.60244, - 184.676966, - 184.751527, - 184.826122, - 184.90075, - 184.975413, - 185.050109, - 185.124838, - 185.1996, - 185.274396, - 185.349223, - 185.424084, - 185.498976, - 185.5739, - 185.648856, - 185.723842, - 185.79886, - 185.873907, - 185.948984, - 186.024091, - 186.099227, - 186.174391, - 186.249584, - 186.324804, - 186.400052, - 186.475327, - 186.550628, - 186.625955, - 186.701308, - 186.776686, - 186.852089, - 186.927516, - 187.002968, - 187.078443, - 187.153942, - 187.229464, - 187.30501, - 187.380577, - 187.456168, - 187.53178, - 187.607415, - 187.683072, - 187.758751, - 187.834451, - 187.910173, - 187.985917, - 188.061683, - 188.13747, - 188.21328, - 188.289111, - 188.364964, - 188.44084, - 188.516737, - 188.592657, - 188.6686, - 188.744566, - 188.820556, - 188.896569, - 188.972605, - 189.048666, - 189.124752, - 189.200862, - 189.276998, - 189.353159, - 189.429346, - 189.50556, - 189.581801, - 189.65807, - 189.734366, - 189.81069, - 189.887043, - 189.963426, - 190.039837, - 190.116279, - 190.192751, - 190.269253, - 190.345787, - 190.422352, - 190.498949, - 190.575578, - 190.65224, - 190.728934, - 190.805662, - 190.882422, - 190.959216, - 191.036044, - 191.112906, - 191.189802, - 191.266732, - 191.343696, - 191.420695, - 191.497728, - 191.574795, - 191.651897, - 191.729034, - 191.806204, - 191.883409, - 191.960648, - 192.037921, - 192.115227, - 192.192567, - 192.269941, - 192.347347, - 192.424787, - 192.502259, - 192.579763, - 192.657299, - 192.734867, - 192.812466, - 192.890096, - 192.967756, - 193.045447, - 193.123167, - 193.200917, - 193.278695, - 193.356503, - 193.434338, - 193.512202, - 193.590092, - 193.66801, - 193.745955, - 193.823926, - 193.901922, - 193.979945, - 194.057993, - 194.136065, - 194.214163, - 194.292285, - 194.370431, - 194.448602, - 194.526796, - 194.605014, - 194.683255, - 194.76152, - 194.839808, - 194.918119, - 194.996453, - 195.074811, - 195.153191, - 195.231595, - 195.310022, - 195.388472, - 195.466945, - 195.545442, - 195.623963, - 195.702507, - 195.781076, - 195.859669, - 195.938286, - 196.016928, - 196.095596, - 196.174288, - 196.253007, - 196.331751, - 196.410522, - 196.48932, - 196.568144, - 196.646997, - 196.725877, - 196.804785, - 196.883722, - 196.962688, - 197.041684, - 197.120709, - 197.199764, - 197.27885, - 197.357967, - 197.437114, - 197.516294, - 197.595505, - 197.674749, - 197.754024, - 197.833333, - 197.912675, - 197.992049, - 198.071458, - 198.1509, - 198.230375, - 198.309885, - 198.389429, - 198.469007, - 198.548619, - 198.628266, - 198.707947, - 198.787662, - 198.867411, - 198.947195, - 199.027013, - 199.106865, - 199.186751, - 199.26667, - 199.346623, - 199.42661, - 199.50663, - 199.586682, - 199.666768, - 199.746885, - 199.827035, - 199.907217, - 199.98743, - 200.067674, - 200.147949, - 200.228255, - 200.30859, - 200.388956, - 200.469351, - 200.549774, - 200.630227, - 200.710708, - 200.791217, - 200.871753, - 200.952317, - 201.032908, - 201.113525, - 201.194169, - 201.274838, - 201.355533, - 201.436254, - 201.517, - 201.59777, - 201.678565, - 201.759385, - 201.840229, - 201.921097, - 202.001989, - 202.082905, - 202.163844, - 202.244808, - 202.325794, - 202.406805, - 202.487839, - 202.568897, - 202.649978, - 202.731084, - 202.812213, - 202.893366, - 202.974543, - 203.055744, - 203.13697, - 203.218221, - 203.299496, - 203.380797, - 203.462122, - 203.543474, - 203.624851, - 203.706255, - 203.787685, - 203.869142, - 203.950625, - 204.032137, - 204.113676, - 204.195243, - 204.276839, - 204.358463, - 204.440117, - 204.5218, - 204.603512, - 204.685255, - 204.767028, - 204.848832, - 204.930667, - 205.012533, - 205.09443, - 205.17636, - 205.258321, - 205.340315, - 205.422341, - 205.5044, - 205.586491, - 205.668615, - 205.750773, - 205.832964, - 205.915188, - 205.997445, - 206.079736, - 206.16206, - 206.244417, - 206.326808, - 206.409232, - 206.491689, - 206.57418, - 206.656703, - 206.73926, - 206.821849, - 206.90447, - 206.987124, - 207.069811, - 207.152529, - 207.235278, - 207.31806, - 207.400872, - 207.483715, - 207.566589, - 207.649493, - 207.732428, - 207.815391, - 207.898385, - 207.981407, - 208.064458, - 208.147538, - 208.230646, - 208.313781, - 208.396944, - 208.480135, - 208.563352, - 208.646596, - 208.729866, - 208.813163, - 208.896485, - 208.979833, - 209.063206, - 209.146605, - 209.230028, - 209.313477, - 209.39695, - 209.480447, - 209.563969, - 209.647515, - 209.731086, - 209.814681, - 209.8983, - 209.981943, - 210.06561, - 210.149302, - 210.233018, - 210.316758, - 210.400522, - 210.484312, - 210.568125, - 210.651964, - 210.735828, - 210.819717, - 210.903631, - 210.987571, - 211.071536, - 211.155528, - 211.239546, - 211.323591, - 211.407662, - 211.491761, - 211.575886, - 211.66004, - 211.744221, - 211.828431, - 211.912669, - 211.996937, - 212.081233, - 212.165558, - 212.249914, - 212.334299, - 212.418715, - 212.503161, - 212.587638, - 212.672146, - 212.756685, - 212.841256, - 212.925858, - 213.010493, - 213.095159, - 213.179858, - 213.264589, - 213.349352, - 213.434148, - 213.518977, - 213.603839, - 213.688733, - 213.773661, - 213.858621, - 213.943614, - 214.02864, - 214.113699, - 214.198791, - 214.283915, - 214.369072, - 214.454261, - 214.539483, - 214.624737, - 214.710023, - 214.79534, - 214.88069, - 214.966071, - 215.051483, - 215.136927, - 215.222401, - 215.307906, - 215.393441, - 215.479007, - 215.564602, - 215.650227, - 215.735881, - 215.821564, - 215.907276, - 215.993017, - 216.078786, - 216.164583, - 216.250408, - 216.336261, - 216.422141, - 216.508048, - 216.593982, - 216.679943, - 216.765931, - 216.851944, - 216.937984, - 217.024051, - 217.110143, - 217.19626, - 217.282404, - 217.368573, - 217.454768, - 217.540988, - 217.627234, - 217.713505, - 217.799802, - 217.886124, - 217.972472, - 218.058845, - 218.145244, - 218.231668, - 218.318119, - 218.404595, - 218.491097, - 218.577626, - 218.664181, - 218.750762, - 218.83737, - 218.924005, - 219.010668, - 219.097357, - 219.184074, - 219.270819, - 219.357591, - 219.444392, - 219.531221, - 219.618079, - 219.704965, - 219.791881, - 219.878826, - 219.965801, - 220.052806, - 220.13984, - 220.226905, - 220.314001, - 220.401127, - 220.488284, - 220.575473, - 220.662692, - 220.749943, - 220.837226, - 220.924541, - 221.011887, - 221.099266, - 221.186677, - 221.27412, - 221.361595, - 221.449103, - 221.536643, - 221.624216, - 221.711821, - 221.799459, - 221.887129, - 221.974831, - 222.062566, - 222.150333, - 222.238133, - 222.325965, - 222.413829, - 222.501725, - 222.589652, - 222.677612, - 222.765603, - 222.853625, - 222.941679, - 223.029764, - 223.117879, - 223.206026, - 223.294202, - 223.382409, - 223.470646, - 223.558913, - 223.64721, - 223.735536, - 223.823891, - 223.912275, - 224.000688, - 224.08913, - 224.1776, - 224.266098, - 224.354624, - 224.443178, - 224.531759, - 224.620368, - 224.709004, - 224.797667, - 224.886358, - 224.975075, - 225.063818, - 225.152589, - 225.241386, - 225.330209, - 225.419058, - 225.507934, - 225.596836, - 225.685765, - 225.774719, - 225.8637, - 225.952706, - 226.041739, - 226.130798, - 226.219884, - 226.308996, - 226.398134, - 226.487299, - 226.57649, - 226.665708, - 226.754953, - 226.844225, - 226.933524, - 227.02285, - 227.112204, - 227.201585, - 227.290993, - 227.38043, - 227.469895, - 227.559387, - 227.648909, - 227.738458, - 227.828037, - 227.917644, - 228.007281, - 228.096946, - 228.186641, - 228.276366, - 228.366121, - 228.455905, - 228.54572, - 228.635564, - 228.725439, - 228.815345, - 228.905281, - 228.995248, - 229.085246, - 229.175275, - 229.265334, - 229.355425, - 229.445547, - 229.535701, - 229.625885, - 229.716101, - 229.806348, - 229.896626, - 229.986936, - 230.077277, - 230.167649, - 230.258052, - 230.348487, - 230.438952, - 230.529448, - 230.619976, - 230.710534, - 230.801123, - 230.891742, - 230.982392, - 231.073072, - 231.163783, - 231.254523, - 231.345294, - 231.436095, - 231.526925, - 231.617785, - 231.708674, - 231.799593, - 231.890541, - 231.981517, - 232.072523, - 232.163556, - 232.254619, - 232.34571, - 232.436828, - 232.527975, - 232.61915, - 232.710352, - 232.801582, - 232.892839, - 232.984123, - 233.075435, - 233.166774, - 233.25814, - 233.349533, - 233.440952, - 233.532399, - 233.623872, - 233.715372, - 233.806898, - 233.898451, - 233.990031, - 234.081638, - 234.173271, - 234.26493, - 234.356617, - 234.448329, - 234.540069, - 234.631835, - 234.723628, - 234.815448, - 234.907294, - 234.999168, - 235.091068, - 235.182996, - 235.274951, - 235.366933, - 235.458943, - 235.55098, - 235.643045, - 235.735138, - 235.827258, - 235.919407, - 236.011584, - 236.103789, - 236.196023, - 236.288285, - 236.380576, - 236.472895, - 236.565244, - 236.657622, - 236.750028, - 236.842464, - 236.934929, - 237.027424, - 237.119949, - 237.212503, - 237.305086, - 237.3977, - 237.490343, - 237.583016, - 237.67572, - 237.768453, - 237.861217, - 237.954011, - 238.046835, - 238.139689, - 238.232574, - 238.325488, - 238.418433, - 238.511409, - 238.604414, - 238.69745, - 238.790516, - 238.883612, - 238.976737, - 239.069893, - 239.163079, - 239.256294, - 239.34954, - 239.442815, - 239.536119, - 239.629453, - 239.722817, - 239.81621, - 239.909632, - 240.003084, - 240.096565, - 240.190075, - 240.283613, - 240.377181, - 240.470778, - 240.564403, - 240.658057, - 240.75174, - 240.845451, - 240.939191, - 241.032958, - 241.126754, - 241.220578, - 241.31443, - 241.40831, - 241.502218, - 241.596153, - 241.690116, - 241.784107, - 241.878126, - 241.972172, - 242.066246, - 242.160347, - 242.254476, - 242.348632, - 242.442816, - 242.537028, - 242.631267, - 242.725534, - 242.819829, - 242.914151, - 243.008501, - 243.102878, - 243.197283, - 243.291716, - 243.386177, - 243.480665, - 243.575182, - 243.669726, - 243.764298, - 243.858899, - 243.953527, - 244.048184, - 244.142869, - 244.237582, - 244.332323, - 244.427093, - 244.521892, - 244.616719, - 244.711575, - 244.80646, - 244.901373, - 244.996316, - 245.091288, - 245.186288, - 245.281318, - 245.376377, - 245.471466, - 245.566583, - 245.66173, - 245.756907, - 245.852113, - 245.947348, - 246.042613, - 246.137908, - 246.233232, - 246.328586, - 246.423969, - 246.519383, - 246.614826, - 246.710298, - 246.805801, - 246.901333, - 246.996895, - 247.092487, - 247.188109, - 247.28376, - 247.379441, - 247.475152, - 247.570893, - 247.666663, - 247.762463, - 247.858292, - 247.954151, - 248.050039, - 248.145957, - 248.241905, - 248.337881, - 248.433888, - 248.529923, - 248.625988, - 248.722082, - 248.818205, - 248.914357, - 249.010539, - 249.106749, - 249.202989, - 249.299258, - 249.395556, - 249.491882, - 249.588238, - 249.684623, - 249.781036, - 249.877479, - 249.97395, - 250.070449, - 250.166978, - 250.263535, - 250.360121, - 250.456735, - 250.553378, - 250.65005, - 250.74675, - 250.843479, - 250.940236, - 251.037022, - 251.133836, - 251.230679, - 251.327551, - 251.424451, - 251.52138, - 251.618337, - 251.715323, - 251.812337, - 251.90938, - 252.006452, - 252.103552, - 252.200681, - 252.297839, - 252.395025, - 252.49224, - 252.589484, - 252.686756, - 252.784057, - 252.881387, - 252.978745, - 253.076132, - 253.173548, - 253.270993, - 253.368466, - 253.465969, - 253.5635, - 253.66106, - 253.758648, - 253.856266, - 253.953913, - 254.051588, - 254.149292, - 254.247025, - 254.344787, - 254.442578, - 254.540398, - 254.638246, - 254.736124, - 254.83403, - 254.931965, - 255.029929, - 255.127922, - 255.225944, - 255.323995, - 255.422074, - 255.520182, - 255.618319, - 255.716485, - 255.814679, - 255.912903, - 256.011155, - 256.109435, - 256.207745, - 256.306083, - 256.40445, - 256.502846, - 256.60127, - 256.699723, - 256.798205, - 256.896716, - 256.995255, - 257.093822, - 257.192419, - 257.291044, - 257.389697, - 257.488379, - 257.58709, - 257.68583, - 257.784598, - 257.883395, - 257.98222, - 258.081074, - 258.179957, - 258.278869, - 258.377809, - 258.476779, - 258.575777, - 258.674804, - 258.773859, - 258.872944, - 258.972057, - 259.071199, - 259.170371, - 259.26957, - 259.368799, - 259.468057, - 259.567343, - 259.666659, - 259.766003, - 259.865376, - 259.964778, - 260.064209, - 260.163669, - 260.263158, - 260.362676, - 260.462222, - 260.561798, - 260.661403, - 260.761036, - 260.860699, - 260.96039, - 261.060111, - 261.15986, - 261.259638, - 261.359445, - 261.459281, - 261.559146, - 261.659039, - 261.758962, - 261.858913, - 261.958892, - 262.0589, - 262.158937, - 262.259002, - 262.359096, - 262.459218, - 262.559369, - 262.659548, - 262.759755, - 262.859991, - 262.960255, - 263.060547, - 263.160867, - 263.261215, - 263.361591, - 263.461995, - 263.562428, - 263.662888, - 263.763376, - 263.863892, - 263.964435, - 264.065007, - 264.165606, - 264.266233, - 264.366887, - 264.46757, - 264.568279, - 264.669016, - 264.769781, - 264.870573, - 264.971393, - 265.07224, - 265.173114, - 265.274016, - 265.374945, - 265.475902, - 265.576886, - 265.677898, - 265.778937, - 265.880004, - 265.981098, - 266.08222, - 266.18337, - 266.284547, - 266.385753, - 266.486986, - 266.588247, - 266.689536, - 266.790853, - 266.892198, - 266.993571, - 267.094972, - 267.196402, - 267.297859, - 267.399345, - 267.500859, - 267.602402, - 267.703973, - 267.805572, - 267.907201, - 268.008857, - 268.110543, - 268.212257, - 268.314001, - 268.415773, - 268.517574, - 268.619405, - 268.721264, - 268.823153, - 268.925071, - 269.027019, - 269.128996, - 269.231002, - 269.333038, - 269.435103, - 269.537197, - 269.639321, - 269.741475, - 269.843657, - 269.945869, - 270.048111, - 270.150382, - 270.252682, - 270.355012, - 270.457371, - 270.559759, - 270.662176, - 270.764623, - 270.867099, - 270.969604, - 271.072138, - 271.174701, - 271.277293, - 271.379914, - 271.482564, - 271.585242, - 271.687949, - 271.790685, - 271.89345, - 271.996243, - 272.099064, - 272.201913, - 272.304791, - 272.407697, - 272.51063, - 272.613592, - 272.716581, - 272.819598, - 272.922643, - 273.025715, - 273.128814, - 273.231941, - 273.335095, - 273.438277, - 273.541485, - 273.644721, - 273.747984, - 273.851274, - 273.95459, - 274.057934, - 274.161305, - 274.264702, - 274.368127, - 274.471578, - 274.575056, - 274.678561, - 274.782093, - 274.885651, - 274.989237, - 275.092849, - 275.196488, - 275.300154, - 275.403847, - 275.507567, - 275.611315, - 275.715089, - 275.818891, - 275.92272, - 276.026577, - 276.130462, - 276.234374, - 276.338314, - 276.442282, - 276.546279, - 276.650303, - 276.754356, - 276.858438, - 276.962548, - 277.066687, - 277.170855, - 277.275051, - 277.379277, - 277.483532, - 277.587816, - 277.692129, - 277.796472, - 277.900845, - 278.005247, - 278.109679, - 278.214141, - 278.318633, - 278.423155, - 278.527707, - 278.632289, - 278.736902, - 278.841545, - 278.946218, - 279.050922, - 279.155656, - 279.260421, - 279.365216, - 279.470041, - 279.574897, - 279.679783, - 279.7847, - 279.889646, - 279.994623, - 280.09963, - 280.204667, - 280.309734, - 280.414831, - 280.519957, - 280.625113, - 280.730299, - 280.835513, - 280.940758, - 281.046031, - 281.151333, - 281.256665, - 281.362025, - 281.467413, - 281.572831, - 281.678276, - 281.783751, - 281.889253, - 281.994783, - 282.100341, - 282.205926, - 282.31154, - 282.41718, - 282.522848, - 282.628543, - 282.734265, - 282.840014, - 282.945789, - 283.051591, - 283.15742, - 283.263275, - 283.369156, - 283.475064, - 283.580997, - 283.686957, - 283.792943, - 283.898956, - 284.004994, - 284.111058, - 284.217148, - 284.323265, - 284.429407, - 284.535576, - 284.64177, - 284.747991, - 284.854238, - 284.960511, - 285.066811, - 285.173137, - 285.279489, - 285.385868, - 285.492274, - 285.598707, - 285.705166, - 285.811653, - 285.918166, - 286.024707, - 286.131276, - 286.237872, - 286.344496, - 286.451148, - 286.557828, - 286.664536, - 286.771272, - 286.878037, - 286.98483, - 287.091652, - 287.198503, - 287.305383, - 287.412292, - 287.51923, - 287.626197, - 287.733194, - 287.840221, - 287.947277, - 288.054363, - 288.161479, - 288.268625, - 288.375801, - 288.483007, - 288.590243, - 288.69751, - 288.804806, - 288.912133, - 289.01949, - 289.126877, - 289.234295, - 289.341742, - 289.449219, - 289.556727, - 289.664264, - 289.771831, - 289.879428, - 289.987054, - 290.09471, - 290.202395, - 290.31011, - 290.417853, - 290.525625, - 290.633426, - 290.741256, - 290.849114, - 290.957001, - 291.064915, - 291.172858, - 291.280828, - 291.388826, - 291.496852, - 291.604904, - 291.712984, - 291.821091, - 291.929224, - 292.037384, - 292.14557, - 292.253782, - 292.36202, - 292.470283, - 292.578573, - 292.686887, - 292.795227, - 292.903592, - 293.011981, - 293.120396, - 293.228835, - 293.337298, - 293.445786, - 293.554299, - 293.662835, - 293.771396, - 293.879981, - 293.988591, - 294.097224, - 294.205882, - 294.314564, - 294.42327, - 294.532, - 294.640755, - 294.749533, - 294.858337, - 294.967164, - 295.076016, - 295.184893, - 295.293795, - 295.402721, - 295.511673, - 295.620649, - 295.729651, - 295.838679, - 295.947732, - 296.05681, - 296.165915, - 296.275046, - 296.384203, - 296.493386, - 296.602596, - 296.711833, - 296.821097, - 296.930389, - 297.039707, - 297.149054, - 297.258428, - 297.36783, - 297.47726, - 297.586718, - 297.696204, - 297.805719, - 297.915263, - 298.024835, - 298.134436, - 298.244066, - 298.353725, - 298.463413, - 298.573131, - 298.682877, - 298.792653, - 298.902458, - 299.012292, - 299.122155, - 299.232048, - 299.341969, - 299.45192, - 299.5619, - 299.671908, - 299.781946, - 299.892012, - 300.002107, - 300.11223, - 300.222382, - 300.332561, - 300.442769, - 300.553005, - 300.663268, - 300.773559, - 300.883877, - 300.994223, - 301.104595, - 301.214995, - 301.32542, - 301.435873, - 301.546351, - 301.656856, - 301.767386, - 301.877942, - 301.988523, - 302.099129, - 302.20976, - 302.320416, - 302.431097, - 302.541802, - 302.652531, - 302.763284, - 302.874061, - 302.984862, - 303.095687, - 303.206535, - 303.317406, - 303.428301, - 303.539218, - 303.650159, - 303.761123, - 303.872111, - 303.983121, - 304.094154, - 304.20521, - 304.31629, - 304.427392, - 304.538518, - 304.649666, - 304.760838, - 304.872034, - 304.983252, - 305.094495, - 305.205761, - 305.31705, - 305.428364, - 305.539702, - 305.651064, - 305.76245, - 305.873861, - 305.985297, - 306.096758, - 306.208244, - 306.319756, - 306.431293, - 306.542857, - 306.654446, - 306.766062, - 306.877705, - 306.989375, - 307.101072, - 307.212797, - 307.324549, - 307.436329, - 307.548137, - 307.659974, - 307.771839, - 307.883733, - 307.995656, - 308.107608, - 308.219589, - 308.3316, - 308.44364, - 308.55571, - 308.66781, - 308.77994, - 308.8921, - 309.00429, - 309.11651, - 309.22876, - 309.341041, - 309.453352, - 309.565694, - 309.678066, - 309.790468, - 309.9029, - 310.015363, - 310.127856, - 310.240379, - 310.352932, - 310.465514, - 310.578126, - 310.690768, - 310.803439, - 310.91614, - 311.028869, - 311.141627, - 311.254414, - 311.367229, - 311.480073, - 311.592944, - 311.705844, - 311.818771, - 311.931725, - 312.044707, - 312.157715, - 312.270751, - 312.383813, - 312.496901, - 312.610016, - 312.723157, - 312.836323, - 312.949515, - 313.062732, - 313.175974, - 313.289241, - 313.402533, - 313.51585, - 313.629191, - 313.742556, - 313.855946, - 313.96936, - 314.082799, - 314.196261, - 314.309748, - 314.423258, - 314.536793, - 314.650352, - 314.763935, - 314.877542, - 314.991174, - 315.10483, - 315.21851, - 315.332215, - 315.445945, - 315.559699, - 315.673478, - 315.787283, - 315.901112, - 316.014967, - 316.128847, - 316.242753, - 316.356685, - 316.470643, - 316.584627, - 316.698638, - 316.812675, - 316.926739, - 317.040831, - 317.15495, - 317.269096, - 317.383271, - 317.497474, - 317.611705, - 317.725964, - 317.840253, - 317.95457, - 318.068917, - 318.183293, - 318.297699, - 318.412135, - 318.526601, - 318.641096, - 318.755622, - 318.870178, - 318.984765, - 319.099382, - 319.214029, - 319.328707, - 319.443415, - 319.558154, - 319.672924, - 319.787724, - 319.902555, - 320.017416, - 320.132308, - 320.24723, - 320.362183, - 320.477166, - 320.592179, - 320.707223, - 320.822296, - 320.9374, - 321.052534, - 321.167697, - 321.28289, - 321.398112, - 321.513363, - 321.628643, - 321.743951, - 321.859288, - 321.974654, - 322.090047, - 322.205468, - 322.320916, - 322.436392, - 322.551894, - 322.667424, - 322.782979, - 322.898562, - 323.01417, - 323.129804, - 323.245464, - 323.361149, - 323.47686, - 323.592595, - 323.708356, - 323.824142, - 323.939952, - 324.055787, - 324.171647, - 324.28753, - 324.403438, - 324.51937, - 324.635326, - 324.751306, - 324.867309, - 324.983337, - 325.099388, - 325.215463, - 325.331561, - 325.447684, - 325.56383, - 325.680001, - 325.796195, - 325.912414, - 326.028657, - 326.144924, - 326.261216, - 326.377532, - 326.493874, - 326.61024, - 326.726632, - 326.843049, - 326.959492, - 327.07596, - 327.192455, - 327.308976, - 327.425523, - 327.542097, - 327.658698, - 327.775327, - 327.891982, - 328.008666, - 328.125377, - 328.242116, - 328.358884, - 328.475681, - 328.592506, - 328.709361, - 328.826244, - 328.943158, - 329.060101, - 329.177074, - 329.294077, - 329.41111, - 329.528174, - 329.645268, - 329.762392, - 329.879547, - 329.996733, - 330.11395, - 330.231198, - 330.348476, - 330.465785, - 330.583125, - 330.700496, - 330.817897, - 330.935329, - 331.052792, - 331.170285, - 331.287809, - 331.405363, - 331.522947, - 331.640562, - 331.758206, - 331.875881, - 331.993585, - 332.111318, - 332.229081, - 332.346873, - 332.464694, - 332.582543, - 332.700421, - 332.818327, - 332.93626, - 333.054222, - 333.172211, - 333.290227, - 333.40827, - 333.526339, - 333.644435, - 333.762557, - 333.880704, - 333.998878, - 334.117077, - 334.235301, - 334.35355, - 334.471824, - 334.590123, - 334.708447, - 334.826795, - 334.945168, - 335.063564, - 335.181985, - 335.30043, - 335.418898, - 335.537391, - 335.655907, - 335.774447, - 335.893011, - 336.011599, - 336.13021, - 336.248845, - 336.367504, - 336.486187, - 336.604894, - 336.723624, - 336.842379, - 336.961159, - 337.079962, - 337.198791, - 337.317644, - 337.436522, - 337.555426, - 337.674355, - 337.79331, - 337.91229, - 338.031297, - 338.15033, - 338.26939, - 338.388476, - 338.50759, - 338.626731, - 338.745899, - 338.865095, - 338.984319, - 339.103571, - 339.222852, - 339.342161, - 339.461499, - 339.580866, - 339.700262, - 339.819688, - 339.939143, - 340.058629, - 340.178144, - 340.297689, - 340.417265, - 340.536871, - 340.656508, - 340.776176, - 340.895874, - 341.015603, - 341.135364, - 341.255155, - 341.374977, - 341.494831, - 341.614715, - 341.73463, - 341.854576, - 341.974553, - 342.094561, - 342.2146, - 342.334669, - 342.454768, - 342.574898, - 342.695058, - 342.815248, - 342.935469, - 343.055719, - 343.175998, - 343.296307, - 343.416646, - 343.537013, - 343.65741, - 343.777835, - 343.898288, - 344.01877, - 344.13928, - 344.259817, - 344.380382, - 344.500975, - 344.621594, - 344.742241, - 344.862914, - 344.983614, - 345.104339, - 345.225091, - 345.345869, - 345.466673, - 345.587502, - 345.708356, - 345.829236, - 345.950141, - 346.071071, - 346.192026, - 346.313006, - 346.434011, - 346.55504, - 346.676095, - 346.797174, - 346.918277, - 347.039405, - 347.160558, - 347.281736, - 347.402938, - 347.524165, - 347.645417, - 347.766694, - 347.887996, - 348.009323, - 348.130675, - 348.252053, - 348.373456, - 348.494885, - 348.61634, - 348.737821, - 348.859328, - 348.980862, - 349.102422, - 349.224009, - 349.345623, - 349.467264, - 349.588933, - 349.710629, - 349.832353, - 349.954105, - 350.075886, - 350.197695, - 350.319533, - 350.4414, - 350.563296, - 350.685222, - 350.807177, - 350.929163, - 351.051178, - 351.173223, - 351.295299, - 351.417405, - 351.539542, - 351.661709, - 351.783907, - 351.906136, - 352.028397, - 352.150688, - 352.27301, - 352.395363, - 352.517748, - 352.640163, - 352.76261, - 352.885087, - 353.007596, - 353.130136, - 353.252706, - 353.375308, - 353.49794, - 353.620603, - 353.743297, - 353.866021, - 353.988775, - 354.11156, - 354.234374, - 354.357219, - 354.480093, - 354.602997, - 354.72593, - 354.848892, - 354.971883, - 355.094903, - 355.217951, - 355.341027, - 355.464131, - 355.587263, - 355.710422, - 355.833608, - 355.956821, - 356.080061, - 356.203328, - 356.326621, - 356.449939, - 356.573284, - 356.696655, - 356.820051, - 356.943472, - 357.066919, - 357.190391, - 357.313888, - 357.437409, - 357.560956, - 357.684527, - 357.808123, - 357.931744, - 358.055389, - 358.179059, - 358.302753, - 358.426472, - 358.550215, - 358.673983, - 358.797775, - 358.921591, - 359.045433, - 359.169299, - 359.29319, - 359.417107, - 359.541048, - 359.665015, - 359.789007, - 359.913025, - 0.037068, - 0.161138, - 0.285234, - 0.409356, - 0.533505, - 0.65768, - 0.781882, - 0.906111, - 1.030368, - 1.154652, - 1.278963, - 1.403302, - 1.52767, - 1.652065, - 1.776489, - 1.900942, - 2.025423, - 2.149933, - 2.274472, - 2.399041, - 2.523639, - 2.648267, - 2.772925, - 2.897613, - 3.02233, - 3.147078, - 3.271856, - 3.396664, - 3.521503, - 3.646372, - 3.771271, - 3.896201, - 4.021161, - 4.146152, - 4.271173, - 4.396224, - 4.521305, - 4.646417, - 4.771558, - 4.89673, - 5.021931, - 5.147163, - 5.272424, - 5.397715, - 5.523035, - 5.648384, - 5.773763, - 5.899171, - 6.024608, - 6.150073, - 6.275568, - 6.40109, - 6.526641, - 6.65222, - 6.777827, - 6.903461, - 7.029123, - 7.154813, - 7.280529, - 7.406272, - 7.532042, - 7.657838, - 7.783661, - 7.90951, - 8.035385, - 8.161285, - 8.287212, - 8.413163, - 8.539141, - 8.665143, - 8.791171, - 8.917223, - 9.043301, - 9.169404, - 9.295531, - 9.421683, - 9.547861, - 9.674062, - 9.800289, - 9.92654, - 10.052816, - 10.179117, - 10.305442, - 10.431792, - 10.558167, - 10.684567, - 10.810992, - 10.937442, - 11.063917, - 11.190417, - 11.316943, - 11.443494, - 11.570071, - 11.696673, - 11.823301, - 11.949955, - 12.076636, - 12.203342, - 12.330075, - 12.456835, - 12.583622, - 12.710435, - 12.837276, - 12.964144, - 13.09104, - 13.217964, - 13.344915, - 13.471895, - 13.598903, - 13.72594, - 13.853005, - 13.980099, - 14.107222, - 14.234374, - 14.361555, - 14.488765, - 14.616005, - 14.743275, - 14.870573, - 14.997902, - 15.125261, - 15.252649, - 15.380067, - 15.507515, - 15.634993, - 15.762501, - 15.890038, - 16.017606, - 16.145204, - 16.272832, - 16.400489, - 16.528177, - 16.655894, - 16.783641, - 16.911418, - 17.039225, - 17.167061, - 17.294926, - 17.422821, - 17.550744, - 17.678697, - 17.806679, - 17.934689, - 18.062728, - 18.190795, - 18.318891, - 18.447014, - 18.575166, - 18.703345, - 18.831551, - 18.959785, - 19.088046, - 19.216335, - 19.34465, - 19.472991, - 19.60136, - 19.729755, - 19.858176, - 19.986623, - 20.115096, - 20.243596, - 20.372121, - 20.500672, - 20.629248, - 20.757851, - 20.886478, - 21.015132, - 21.14381, - 21.272514, - 21.401244, - 21.529999, - 21.658779, - 21.787584, - 21.916415, - 22.045271, - 22.174153, - 22.30306, - 22.431993, - 22.560951, - 22.689935, - 22.818946, - 22.947982, - 23.077044, - 23.206132, - 23.335247, - 23.464388, - 23.593556, - 23.722751, - 23.851972, - 23.981221, - 24.110496, - 24.239799, - 24.36913, - 24.498487, - 24.627873, - 24.757286, - 24.886727, - 25.016197, - 25.145694, - 25.27522, - 25.404774, - 25.534358, - 25.663969, - 25.79361, - 25.92328, - 26.05298, - 26.182708, - 26.312466, - 26.442254, - 26.572071, - 26.701918, - 26.831795, - 26.961702, - 27.091638, - 27.221605, - 27.351601, - 27.481628, - 27.611684, - 27.74177, - 27.871886, - 28.002031, - 28.132207, - 28.262412, - 28.392647, - 28.522912, - 28.653206, - 28.78353, - 28.913883, - 29.044266, - 29.174678, - 29.305119, - 29.43559, - 29.56609, - 29.696618, - 29.827176, - 29.957763, - 30.088378, - 30.219022, - 30.349695, - 30.480396, - 30.611125, - 30.741883, - 30.872668, - 31.003482, - 31.134323, - 31.265192, - 31.396088, - 31.527012, - 31.657964, - 31.788942, - 31.919948, - 32.05098, - 32.182039, - 32.313126, - 32.444238, - 32.575378, - 32.706544, - 32.837736, - 32.968955, - 33.1002, - 33.231471, - 33.362768, - 33.494092, - 33.625442, - 33.756818, - 33.888221, - 34.019649, - 34.151104, - 34.282585, - 34.414092, - 34.545625, - 34.677184, - 34.80877, - 34.940382, - 35.07202, - 35.203684, - 35.335375, - 35.467093, - 35.598837, - 35.730607, - 35.862404, - 35.994228, - 36.126079, - 36.257957, - 36.389862, - 36.521795, - 36.653754, - 36.785742, - 36.917756, - 37.049799, - 37.181869, - 37.313967, - 37.446093, - 37.578248, - 37.71043, - 37.842641, - 37.97488, - 38.107148, - 38.239445, - 38.37177, - 38.504124, - 38.636507, - 38.768918, - 38.901359, - 39.033829, - 39.166327, - 39.298855, - 39.431412, - 39.563998, - 39.696613, - 39.829257, - 39.961931, - 40.094634, - 40.227366, - 40.360127, - 40.492917, - 40.625737, - 40.758585, - 40.891463, - 41.024369, - 41.157304, - 41.290268, - 41.423261, - 41.556282, - 41.689331, - 41.822409, - 41.955515, - 42.08865, - 42.221812, - 42.355003, - 42.488221, - 42.621467, - 42.75474, - 42.888041, - 43.02137, - 43.154726, - 43.288109, - 43.421519, - 43.554956, - 43.688419, - 43.82191, - 43.955427, - 44.088971, - 44.222541, - 44.356138, - 44.489761, - 44.62341, - 44.757085, - 44.890786, - 45.024514, - 45.158267, - 45.292047, - 45.425852, - 45.559683, - 45.69354, - 45.827423, - 45.961332, - 46.095266, - 46.229227, - 46.363213, - 46.497225, - 46.631264, - 46.765328, - 46.899418, - 47.033534, - 47.167676, - 47.301844, - 47.436038, - 47.570259, - 47.704505, - 47.838778, - 47.973077, - 48.107402, - 48.241754, - 48.376132, - 48.510536, - 48.644967, - 48.779425, - 48.913909, - 49.04842, - 49.182957, - 49.317522, - 49.452113, - 49.586731, - 49.721376, - 49.856048, - 49.990747, - 50.125474, - 50.260227, - 50.395008, - 50.529816, - 50.664651, - 50.799513, - 50.934403, - 51.06932, - 51.204264, - 51.339236, - 51.474235, - 51.609261, - 51.744315, - 51.879396, - 52.014504, - 52.14964, - 52.284803, - 52.419993, - 52.555211, - 52.690456, - 52.825728, - 52.961028, - 53.096355, - 53.23171, - 53.367091, - 53.5025, - 53.637936, - 53.773399, - 53.908889, - 54.044406, - 54.17995, - 54.315521, - 54.451119, - 54.586745, - 54.722396, - 54.858075, - 54.993781, - 55.129513, - 55.265272, - 55.401057, - 55.536869, - 55.672708, - 55.808573, - 55.944464, - 56.080382, - 56.216325, - 56.352295, - 56.488291, - 56.624313, - 56.760362, - 56.896436, - 57.032535, - 57.168661, - 57.304812, - 57.44099, - 57.577192, - 57.713421, - 57.849675, - 57.985954, - 58.122259, - 58.25859, - 58.394946, - 58.531327, - 58.667734, - 58.804166, - 58.940623, - 59.077106, - 59.213614, - 59.350148, - 59.486707, - 59.623291, - 59.759901, - 59.896536, - 60.033197, - 60.169883, - 60.306594, - 60.443331, - 60.580093, - 60.716881, - 60.853694, - 60.990532, - 61.127397, - 61.264286, - 61.401202, - 61.538142, - 61.675109, - 61.812101, - 61.949119, - 62.086163, - 62.223233, - 62.360328, - 62.49745, - 62.634598, - 62.771771, - 62.908971, - 63.046197, - 63.18345, - 63.320728, - 63.458033, - 63.595365, - 63.732723, - 63.870107, - 64.007518, - 64.144955, - 64.282419, - 64.41991, - 64.557427, - 64.69497, - 64.832541, - 64.970138, - 65.107761, - 65.245412, - 65.383089, - 65.520793, - 65.658523, - 65.796281, - 65.934065, - 66.071876, - 66.209714, - 66.347579, - 66.485472, - 66.623391, - 66.761337, - 66.89931, - 67.03731, - 67.175337, - 67.313391, - 67.451472, - 67.589581, - 67.727716, - 67.865878, - 68.004068, - 68.142284, - 68.280527, - 68.418798, - 68.557095, - 68.69542, - 68.833772, - 68.97215, - 69.110556, - 69.248989, - 69.38745, - 69.525937, - 69.664452, - 69.802993, - 69.941563, - 70.080159, - 70.218783, - 70.357433, - 70.496112, - 70.634817, - 70.77355, - 70.91231, - 71.051097, - 71.189912, - 71.328754, - 71.467623, - 71.606519, - 71.745443, - 71.884394, - 72.023373, - 72.162378, - 72.301412, - 72.440472, - 72.57956, - 72.718675, - 72.857817, - 72.996987, - 73.136184, - 73.275408, - 73.414659, - 73.553938, - 73.693245, - 73.832578, - 73.971939, - 74.111327, - 74.250743, - 74.390186, - 74.529657, - 74.669154, - 74.808679, - 74.948232, - 75.087812, - 75.227419, - 75.367054, - 75.506716, - 75.646405, - 75.786122, - 75.925866, - 76.065637, - 76.205436, - 76.345262, - 76.485116, - 76.624996, - 76.764905, - 76.90484, - 77.044803, - 77.184794, - 77.324812, - 77.464857, - 77.60493, - 77.745031, - 77.885158, - 78.025314, - 78.165496, - 78.305707, - 78.445945, - 78.58621, - 78.726503, - 78.866823, - 79.007172, - 79.147547, - 79.287951, - 79.428382, - 79.568841, - 79.709328, - 79.849842, - 79.990385, - 80.130955, - 80.271553, - 80.412178, - 80.552832, - 80.693513, - 80.834223, - 80.97496, - 81.115725, - 81.256518, - 81.397339, - 81.538187, - 81.679064, - 81.819968, - 81.9609, - 82.10186, - 82.242848, - 82.383863, - 82.524906, - 82.665978, - 82.807077, - 82.948203, - 83.089358, - 83.23054, - 83.37175, - 83.512988, - 83.654253, - 83.795546, - 83.936867, - 84.078215, - 84.219591, - 84.360994, - 84.502425, - 84.643884, - 84.785369, - 84.926882, - 85.068422, - 85.20999, - 85.351585, - 85.493206, - 85.634855, - 85.776531, - 85.918234, - 86.059964, - 86.20172, - 86.343504, - 86.485314, - 86.627151, - 86.769014, - 86.910905, - 87.052822, - 87.194765, - 87.336735, - 87.478732, - 87.620755, - 87.762805, - 87.904881, - 88.046983, - 88.189112, - 88.331267, - 88.473448, - 88.615656, - 88.75789, - 88.900151, - 89.042438, - 89.184752, - 89.327091, - 89.469458, - 89.611851, - 89.75427, - 89.896716, - 90.039188, - 90.181687, - 90.324213, - 90.466765, - 90.609343, - 90.751949, - 90.894581, - 91.037239, - 91.179924, - 91.322636, - 91.465375, - 91.608141, - 91.750933, - 91.893753, - 92.036599, - 92.179473, - 92.322374, - 92.465302, - 92.608257, - 92.75124, - 92.89425, - 93.037287, - 93.180353, - 93.323446, - 93.466567, - 93.609716, - 93.752893, - 93.896098, - 94.039331, - 94.182592, - 94.325881, - 94.469199, - 94.612545, - 94.75592, - 94.899322, - 95.042754, - 95.186214, - 95.329703, - 95.47322, - 95.616766, - 95.760341, - 95.903944, - 96.047577, - 96.191238, - 96.334928, - 96.478648, - 96.622396, - 96.766174, - 96.90998, - 97.053816, - 97.197681, - 97.341575, - 97.485499, - 97.629451, - 97.773433, - 97.917444, - 98.061484, - 98.205553, - 98.349651, - 98.493778, - 98.637934, - 98.782119, - 98.926332, - 99.070574, - 99.214845, - 99.359145, - 99.503472, - 99.647829, - 99.792213, - 99.936626, - 100.081067, - 100.225536, - 100.370033, - 100.514558, - 100.659111, - 100.803691, - 100.9483, - 101.092936, - 101.2376, - 101.382291, - 101.52701, - 101.671757, - 101.816531, - 101.961332, - 102.10616, - 102.251016, - 102.395898, - 102.540808, - 102.685744, - 102.830708, - 102.975698, - 103.120715, - 103.265759, - 103.41083, - 103.555928, - 103.701052, - 103.846203, - 103.991381, - 104.136586, - 104.281818, - 104.427077, - 104.572362, - 104.717675, - 104.863015, - 105.008383, - 105.153778, - 105.2992, - 105.444649, - 105.590126, - 105.735631, - 105.881164, - 106.026725, - 106.172313, - 106.31793, - 106.463575, - 106.609248, - 106.754949, - 106.900679, - 107.046437, - 107.192224, - 107.33804, - 107.483885, - 107.629758, - 107.77566, - 107.921592, - 108.067553, - 108.213543, - 108.359562, - 108.505612, - 108.65169, - 108.797799, - 108.943937, - 109.090105, - 109.236303, - 109.38253, - 109.528788, - 109.675076, - 109.821394, - 109.967742, - 110.11412, - 110.260527, - 110.406965, - 110.553433, - 110.699931, - 110.846459, - 110.993017, - 111.139605, - 111.286223, - 111.43287, - 111.579547, - 111.726255, - 111.872992, - 112.019758, - 112.166555, - 112.313381, - 112.460236, - 112.607121, - 112.754035, - 112.900979, - 113.047952, - 113.194954, - 113.341985, - 113.489045, - 113.636134, - 113.783252, - 113.930398, - 114.077574, - 114.224777, - 114.37201, - 114.51927, - 114.666559, - 114.813876, - 114.961222, - 115.108596, - 115.255997, - 115.403427, - 115.550885, - 115.698371, - 115.845885, - 115.993427, - 116.140997, - 116.288595, - 116.436221, - 116.583875, - 116.731558, - 116.879268, - 117.027006, - 117.174773, - 117.322567, - 117.470389, - 117.61824, - 117.766118, - 117.914025, - 118.06196, - 118.209923, - 118.357914, - 118.505933, - 118.65398, - 118.802056, - 118.95016, - 119.098293, - 119.246455, - 119.394645, - 119.542864, - 119.691112, - 119.839389, - 119.987695, - 120.136031, - 120.284396, - 120.43279, - 120.581214, - 120.729668, - 120.878152, - 121.026665, - 121.175209, - 121.323783, - 121.472387, - 121.621021, - 121.769686, - 121.918381, - 122.067107, - 122.215863, - 122.36465, - 122.513468, - 122.662316, - 122.811196, - 122.960106, - 123.109047, - 123.25802, - 123.407023, - 123.556057, - 123.705122, - 123.854219, - 124.003346, - 124.152505, - 124.301695, - 124.450915, - 124.600167, - 124.74945, - 124.898764, - 125.048109, - 125.197485, - 125.346891, - 125.496328, - 125.645796, - 125.795295, - 125.944823, - 126.094382, - 126.243971, - 126.39359, - 126.543239, - 126.692918, - 126.842626, - 126.992364, - 127.142131, - 127.291927, - 127.441752, - 127.591605, - 127.741488, - 127.8914, - 128.041339, - 128.191308, - 128.341304, - 128.491329, - 128.641382, - 128.791463, - 128.941572, - 129.091709, - 129.241873, - 129.392065, - 129.542284, - 129.692531, - 129.842805, - 129.993106, - 130.143435, - 130.29379, - 130.444173, - 130.594582, - 130.745019, - 130.895482, - 131.045973, - 131.19649, - 131.347035, - 131.497607, - 131.648206, - 131.798832, - 131.949485, - 132.100166, - 132.250875, - 132.401611, - 132.552375, - 132.703166, - 132.853986, - 133.004834, - 133.15571, - 133.306614, - 133.457547, - 133.608508, - 133.759499, - 133.910518, - 134.061566, - 134.212643, - 134.363749, - 134.514885, - 134.66605, - 134.817245, - 134.96847, - 135.119724, - 135.271008, - 135.422323, - 135.573668, - 135.725043, - 135.876449, - 136.027886, - 136.179353, - 136.330851, - 136.48238, - 136.63394, - 136.785532, - 136.937154, - 137.088808, - 137.240493, - 137.392209, - 137.543957, - 137.695736, - 137.847546, - 137.999388, - 138.15126, - 138.303164, - 138.455099, - 138.607066, - 138.759063, - 138.911091, - 139.063151, - 139.215241, - 139.367362, - 139.519514, - 139.671697, - 139.82391, - 139.976154, - 140.128429, - 140.280733, - 140.433068, - 140.585433, - 140.737828, - 140.890252, - 141.042707, - 141.195191, - 141.347705, - 141.500248, - 141.65282, - 141.805421, - 141.958052, - 142.110711, - 142.263399, - 142.416116, - 142.568862, - 142.721636, - 142.874438, - 143.027268, - 143.180127, - 143.333014, - 143.485929, - 143.638872, - 143.791843, - 143.944842, - 144.097869, - 144.250923, - 144.404006, - 144.557117, - 144.710255, - 144.863421, - 145.016615, - 145.169837, - 145.323087, - 145.476365, - 145.629671, - 145.783004, - 145.936366, - 146.089756, - 146.243174, - 146.39662, - 146.550095, - 146.703598, - 146.857129, - 147.010689, - 147.164278, - 147.317896, - 147.471543, - 147.625219, - 147.778925, - 147.93266, - 148.086424, - 148.240218, - 148.394043, - 148.547897, - 148.701781, - 148.855696, - 149.009641, - 149.163617, - 149.317623, - 149.471661, - 149.625729, - 149.779828, - 149.933959, - 150.088121, - 150.242315, - 150.39654, - 150.550796, - 150.705085, - 150.859405, - 151.013757, - 151.168142, - 151.322558, - 151.477006, - 151.631487, - 151.786, - 151.940545, - 152.095122, - 152.249732, - 152.404374, - 152.559048, - 152.713754, - 152.868492, - 153.023263, - 153.178065, - 153.3329, - 153.487767, - 153.642665, - 153.797595, - 153.952557, - 154.107551, - 154.262576, - 154.417632, - 154.57272, - 154.727839, - 154.882988, - 155.038169, - 155.193381, - 155.348623, - 155.503895, - 155.659199, - 155.814532, - 155.969896, - 156.125289, - 156.280713, - 156.436166, - 156.59165, - 156.747163, - 156.902705, - 157.058277, - 157.213879, - 157.369509, - 157.525169, - 157.680858, - 157.836577, - 157.992324, - 158.1481, - 158.303905, - 158.45974, - 158.615603, - 158.771495, - 158.927416, - 159.083366, - 159.239345, - 159.395354, - 159.551391, - 159.707457, - 159.863553, - 160.019678, - 160.175832, - 160.332015, - 160.488228, - 160.644471, - 160.800743, - 160.957045, - 161.113377, - 161.269739, - 161.426131, - 161.582553, - 161.739005, - 161.895488, - 162.052002, - 162.208547, - 162.365122, - 162.521728, - 162.678366, - 162.835034, - 162.991735, - 163.148467, - 163.305231, - 163.462026, - 163.618854, - 163.775714, - 163.932606, - 164.089531, - 164.246488, - 164.403477, - 164.5605, - 164.717555, - 164.874643, - 165.031764, - 165.188918, - 165.346105, - 165.503325, - 165.660577, - 165.817863, - 165.975182, - 166.132534, - 166.28992, - 166.447338, - 166.604789, - 166.762274, - 166.919791, - 167.077342, - 167.234926, - 167.392542, - 167.550192, - 167.707875, - 167.86559, - 168.023338, - 168.181118, - 168.338932, - 168.496777, - 168.654655, - 168.812565, - 168.970507, - 169.128481, - 169.286486, - 169.444524, - 169.602592, - 169.760692, - 169.918823, - 170.076985, - 170.235178, - 170.393401, - 170.551655, - 170.70994, - 170.868254, - 171.0266, - 171.184975, - 171.34338, - 171.501815, - 171.660279, - 171.818774, - 171.977298, - 172.135851, - 172.294434, - 172.453046, - 172.611687, - 172.770357, - 172.929057, - 173.087785, - 173.246542, - 173.405328, - 173.564143, - 173.722987, - 173.88186, - 174.040761, - 174.199692, - 174.358651, - 174.51764, - 174.676657, - 174.835703, - 174.994779, - 175.153884, - 175.313018, - 175.472181, - 175.631374, - 175.790597, - 175.949849, - 176.109131, - 176.268443, - 176.427785, - 176.587157, - 176.74656, - 176.905993, - 177.065456, - 177.224951, - 177.384476, - 177.544031, - 177.703618, - 177.863236, - 178.022886, - 178.182566, - 178.342278, - 178.502022, - 178.661798, - 178.821606, - 178.981445, - 179.141317, - 179.30122, - 179.461156, - 179.621125, - 179.781125, - 179.941159, - 180.101224, - 180.261322, - 180.421453, - 180.581616, - 180.741812, - 180.902041, - 181.062302, - 181.222595, - 181.382921, - 181.54328, - 181.703671, - 181.864095, - 182.024551, - 182.18504, - 182.345561, - 182.506114, - 182.666699, - 182.827317, - 182.987966, - 183.148648, - 183.309361, - 183.470106, - 183.630883, - 183.791691, - 183.952531, - 184.113402, - 184.274305, - 184.435239, - 184.596204, - 184.757199, - 184.918226, - 185.079284, - 185.240373, - 185.401492, - 185.562642, - 185.723823, - 185.885035, - 186.046278, - 186.207551, - 186.368856, - 186.530191, - 186.691558, - 186.852955, - 187.014384, - 187.175844, - 187.337335, - 187.498858, - 187.660411, - 187.821997, - 187.983613, - 188.145262, - 188.306941, - 188.468653, - 188.630395, - 188.79217, - 188.953976, - 189.115815, - 189.277685, - 189.439586, - 189.60152, - 189.763486, - 189.925485, - 190.087515, - 190.249579, - 190.411675, - 190.573804, - 190.735966, - 190.898161, - 191.06039, - 191.222652, - 191.384948, - 191.547278, - 191.709642, - 191.87204, - 192.034471, - 192.196937, - 192.359438, - 192.521972, - 192.684541, - 192.847144, - 193.009782, - 193.172454, - 193.33516, - 193.497902, - 193.660677, - 193.823488, - 193.986333, - 194.149213, - 194.312129, - 194.475079, - 194.638064, - 194.801084, - 194.96414, - 195.127232, - 195.290358, - 195.453521, - 195.616719, - 195.779953, - 195.943222, - 196.106528, - 196.269869, - 196.433246, - 196.596659, - 196.760108, - 196.923593, - 197.087114, - 197.25067, - 197.414262, - 197.57789, - 197.741554, - 197.905253, - 198.068989, - 198.232759, - 198.396566, - 198.560407, - 198.724285, - 198.888198, - 199.052147, - 199.216131, - 199.38015, - 199.544205, - 199.708295, - 199.87242, - 200.03658, - 200.200776, - 200.365006, - 200.529271, - 200.693571, - 200.857905, - 201.022274, - 201.186677, - 201.351114, - 201.515585, - 201.68009, - 201.844628, - 202.0092, - 202.173806, - 202.338445, - 202.503117, - 202.667823, - 202.832561, - 202.997333, - 203.162137, - 203.326975, - 203.491845, - 203.656748, - 203.821684, - 203.986652, - 204.151654, - 204.316688, - 204.481755, - 204.646855, - 204.811987, - 204.977153, - 205.142352, - 205.307583, - 205.472848, - 205.638146, - 205.803477, - 205.968841, - 206.134239, - 206.29967, - 206.465134, - 206.630632, - 206.796163, - 206.961729, - 207.127328, - 207.292961, - 207.458628, - 207.62433, - 207.790066, - 207.955836, - 208.121642, - 208.287481, - 208.453356, - 208.619266, - 208.78521, - 208.95119, - 209.117205, - 209.283256, - 209.449341, - 209.615462, - 209.781619, - 209.947811, - 210.114038, - 210.280301, - 210.4466, - 210.612934, - 210.779303, - 210.945709, - 211.112149, - 211.278626, - 211.445137, - 211.611685, - 211.778267, - 211.944886, - 212.111539, - 212.278229, - 212.444953, - 212.611713, - 212.778508, - 212.945339, - 213.112204, - 213.279105, - 213.446041, - 213.613012, - 213.780018, - 213.947059, - 214.114134, - 214.281245, - 214.44839, - 214.61557, - 214.782785, - 214.950034, - 215.117318, - 215.284637, - 215.45199, - 215.619378, - 215.786801, - 215.954258, - 216.12175, - 216.289277, - 216.456839, - 216.624435, - 216.792066, - 216.959732, - 217.127434, - 217.29517, - 217.462941, - 217.630747, - 217.798588, - 217.966465, - 218.134376, - 218.302323, - 218.470305, - 218.638323, - 218.806376, - 218.974464, - 219.142588, - 219.310747, - 219.478942, - 219.647173, - 219.815439, - 219.983742, - 220.15208, - 220.320454, - 220.488864, - 220.65731, - 220.825792, - 220.99431, - 221.162865, - 221.331456, - 221.500083, - 221.668746, - 221.837446, - 222.006183, - 222.174955, - 222.343765, - 222.512611, - 222.681493, - 222.850413, - 223.019369, - 223.188362, - 223.357391, - 223.526458, - 223.695561, - 223.864701, - 224.033878, - 224.203092, - 224.372344, - 224.541632, - 224.710957, - 224.88032, - 225.04972, - 225.219157, - 225.388631, - 225.558143, - 225.727692, - 225.897279, - 226.066903, - 226.236565, - 226.406264, - 226.576, - 226.745774, - 226.915586, - 227.085435, - 227.255322, - 227.425246, - 227.595208, - 227.765207, - 227.935244, - 228.105319, - 228.275431, - 228.44558, - 228.615768, - 228.785992, - 228.956255, - 229.126555, - 229.296892, - 229.467267, - 229.63768, - 229.808129, - 229.978617, - 230.149141, - 230.319703, - 230.490303, - 230.660939, - 230.831613, - 231.002323, - 231.173071, - 231.343856, - 231.514678, - 231.685537, - 231.856433, - 232.027366, - 232.198336, - 232.369343, - 232.540387, - 232.711468, - 232.882585, - 233.05374, - 233.224931, - 233.396159, - 233.567424, - 233.738726, - 233.910065, - 234.081441, - 234.252853, - 234.424302, - 234.595788, - 234.767311, - 234.938871, - 235.110467, - 235.2821, - 235.45377, - 235.625477, - 235.797221, - 235.969002, - 236.14082, - 236.312674, - 236.484566, - 236.656495, - 236.828461, - 237.000465, - 237.172505, - 237.344584, - 237.516699, - 237.688852, - 237.861043, - 238.033271, - 238.205537, - 238.377841, - 238.550183, - 238.722563, - 238.89498, - 239.067436, - 239.23993, - 239.412462, - 239.585032, - 239.757641, - 239.930287, - 240.102972, - 240.275696, - 240.448458, - 240.621258, - 240.794097, - 240.966974, - 241.13989, - 241.312844, - 241.485837, - 241.658869, - 241.83194, - 242.005049, - 242.178198, - 242.351385, - 242.524611, - 242.697877, - 242.871181, - 243.044525, - 243.217908, - 243.39133, - 243.564791, - 243.738292, - 243.911832, - 244.085411, - 244.25903, - 244.432688, - 244.606385, - 244.780122, - 244.953898, - 245.127714, - 245.301569, - 245.475464, - 245.649398, - 245.823372, - 245.997385, - 246.171438, - 246.345531, - 246.519664, - 246.693836, - 246.868049, - 247.042301, - 247.216593, - 247.390925, - 247.565297, - 247.73971, - 247.914162, - 248.088655, - 248.263188, - 248.437761, - 248.612374, - 248.787028, - 248.961722, - 249.136457, - 249.311232, - 249.486047, - 249.660903, - 249.835799, - 250.010736, - 250.185713, - 250.36073, - 250.535789, - 250.710887, - 250.886027, - 251.061206, - 251.236427, - 251.411688, - 251.58699, - 251.762333, - 251.937716, - 252.11314, - 252.288604, - 252.46411, - 252.639656, - 252.815243, - 252.99087, - 253.166539, - 253.342248, - 253.517998, - 253.693788, - 253.86962, - 254.045492, - 254.221404, - 254.397358, - 254.573352, - 254.749387, - 254.925462, - 255.101579, - 255.277736, - 255.453933, - 255.630172, - 255.806451, - 255.98277, - 256.159131, - 256.335532, - 256.511974, - 256.688457, - 256.86498, - 257.041545, - 257.21815, - 257.394796, - 257.571483, - 257.748211, - 257.92498, - 258.101789, - 258.27864, - 258.455532, - 258.632465, - 258.809439, - 258.986454, - 259.163511, - 259.340608, - 259.517747, - 259.694928, - 259.872149, - 260.049412, - 260.226716, - 260.404062, - 260.58145, - 260.758879, - 260.93635, - 261.113862, - 261.291417, - 261.469013, - 261.646651, - 261.824331, - 262.002053, - 262.179817, - 262.357624, - 262.535472, - 262.713363, - 262.891296, - 263.069272, - 263.24729, - 263.42535, - 263.603453, - 263.781599, - 263.959787, - 264.138018, - 264.316292, - 264.494608, - 264.672967, - 264.851369, - 265.029814, - 265.208302, - 265.386833, - 265.565407, - 265.744025, - 265.922685, - 266.101388, - 266.280135, - 266.458925, - 266.637759, - 266.816635, - 266.995555, - 267.174519, - 267.353526, - 267.532576, - 267.71167, - 267.890807, - 268.069988, - 268.249212, - 268.42848, - 268.607791, - 268.787146, - 268.966544, - 269.145986, - 269.325471, - 269.505, - 269.684573, - 269.864189, - 270.043848, - 270.223551, - 270.403298, - 270.583088, - 270.762921, - 270.942799, - 271.122719, - 271.302684, - 271.482692, - 271.662743, - 271.842838, - 272.022977, - 272.203159, - 272.383384, - 272.563653, - 272.743966, - 272.924322, - 273.104722, - 273.285165, - 273.465652, - 273.646183, - 273.826757, - 274.007374, - 274.188036, - 274.368741, - 274.549489, - 274.730281, - 274.911117, - 275.091997, - 275.272921, - 275.453888, - 275.6349, - 275.815955, - 275.997054, - 276.178197, - 276.359385, - 276.540616, - 276.721892, - 276.903212, - 277.084576, - 277.265985, - 277.447438, - 277.628936, - 277.810478, - 277.992065, - 278.173697, - 278.355374, - 278.537095, - 278.718862, - 278.900674, - 279.082531, - 279.264433, - 279.446381, - 279.628374, - 279.810413, - 279.992497, - 280.174627, - 280.356802, - 280.539024, - 280.721291, - 280.903604, - 281.085963, - 281.268368, - 281.450819, - 281.633316, - 281.815859, - 281.998449, - 282.181084, - 282.363766, - 282.546494, - 282.729268, - 282.912089, - 283.094956, - 283.277869, - 283.460828, - 283.643834, - 283.826886, - 284.009984, - 284.193128, - 284.376319, - 284.559556, - 284.742839, - 284.926168, - 285.109544, - 285.292965, - 285.476433, - 285.659946, - 285.843506, - 286.027111, - 286.210762, - 286.394459, - 286.578202, - 286.761991, - 286.945825, - 287.129705, - 287.31363, - 287.497601, - 287.681618, - 287.86568, - 288.049787, - 288.233939, - 288.418137, - 288.602381, - 288.786669, - 288.971003, - 289.155382, - 289.339806, - 289.524275, - 289.70879, - 289.893349, - 290.077954, - 290.262604, - 290.447299, - 290.63204, - 290.816825, - 291.001656, - 291.186532, - 291.371454, - 291.556421, - 291.741433, - 291.92649, - 292.111594, - 292.296742, - 292.481937, - 292.667177, - 292.852462, - 293.037794, - 293.223171, - 293.408595, - 293.594065, - 293.77958, - 293.965142, - 294.150751, - 294.336406, - 294.522107, - 294.707856, - 294.893651, - 295.079492, - 295.265381, - 295.451317, - 295.6373, - 295.823331, - 296.009409, - 296.195534, - 296.381708, - 296.567928, - 296.754197, - 296.940514, - 297.126879, - 297.313292, - 297.499753, - 297.686262, - 297.87282, - 298.059426, - 298.246081, - 298.432785, - 298.619537, - 298.806338, - 298.993188, - 299.180086, - 299.367034, - 299.554031, - 299.741077, - 299.928171, - 300.115315, - 300.302509, - 300.489751, - 300.677043, - 300.864384, - 301.051774, - 301.239214, - 301.426703, - 301.614241, - 301.801828, - 301.989465, - 302.177151, - 302.364887, - 302.552671, - 302.740505, - 302.928388, - 303.11632, - 303.304302, - 303.492332, - 303.680412, - 303.86854, - 304.056718, - 304.244945, - 304.433221, - 304.621546, - 304.80992, - 304.998343, - 305.186816, - 305.375337, - 305.563907, - 305.752526, - 305.941194, - 306.129911, - 306.318677, - 306.507493, - 306.696357, - 306.885271, - 307.074234, - 307.263246, - 307.452308, - 307.64142, - 307.830581, - 308.019792, - 308.209053, - 308.398364, - 308.587726, - 308.777138, - 308.966601, - 309.156114, - 309.345678, - 309.535293, - 309.72496, - 309.914677, - 310.104446, - 310.294267, - 310.48414, - 310.674064, - 310.864041, - 311.05407, - 311.244152, - 311.434286, - 311.624473, - 311.814714, - 312.005007, - 312.195353, - 312.385753, - 312.576207, - 312.766714, - 312.957274, - 313.147889, - 313.338558, - 313.529282, - 313.720059, - 313.910892, - 314.101779, - 314.29272, - 314.483717, - 314.674769, - 314.865876, - 315.057039, - 315.248256, - 315.439529, - 315.630858, - 315.822242, - 316.013682, - 316.205177, - 316.396728, - 316.588335, - 316.779997, - 316.971716, - 317.16349, - 317.35532, - 317.547206, - 317.739148, - 317.931146, - 318.1232, - 318.31531, - 318.507476, - 318.699698, - 318.891976, - 319.084311, - 319.276702, - 319.469149, - 319.661652, - 319.854211, - 320.046827, - 320.239498, - 320.432226, - 320.62501, - 320.81785, - 321.010746, - 321.203699, - 321.396707, - 321.589771, - 321.782892, - 321.976069, - 322.169301, - 322.36259, - 322.555935, - 322.749335, - 322.942792, - 323.136304, - 323.329872, - 323.523496, - 323.717175, - 323.91091, - 324.104701, - 324.298547, - 324.492448, - 324.686405, - 324.880417, - 325.074484, - 325.268606, - 325.462783, - 325.657016, - 325.851303, - 326.045646, - 326.240043, - 326.434496, - 326.629003, - 326.823566, - 327.018183, - 327.212856, - 327.407583, - 327.602366, - 327.797203, - 327.992095, - 328.187043, - 328.382045, - 328.577102, - 328.772214, - 328.967382, - 329.162604, - 329.357882, - 329.553216, - 329.748604, - 329.944048, - 330.139548, - 330.335104, - 330.530715, - 330.726382, - 330.922106, - 331.117885, - 331.313721, - 331.509614, - 331.705563, - 331.901569, - 332.097632, - 332.293752, - 332.489929, - 332.686163, - 332.882454, - 333.078803, - 333.27521, - 333.471674, - 333.668195, - 333.864775, - 334.061412, - 334.258107, - 334.45486, - 334.651671, - 334.84854, - 335.045466, - 335.242451, - 335.439494, - 335.636596, - 335.833755, - 336.030972, - 336.228248, - 336.425581, - 336.622973, - 336.820423, - 337.01793, - 337.215496, - 337.41312, - 337.610801, - 337.808541, - 338.006338, - 338.204192, - 338.402105, - 338.600075, - 338.798102, - 338.996187, - 339.194329, - 339.392528, - 339.590785, - 339.789099, - 339.98747, - 340.185898, - 340.384383, - 340.582925, - 340.781524, - 340.98018, - 341.178893, - 341.377663, - 341.57649, - 341.775374, - 341.974315, - 342.173313, - 342.372369, - 342.571481, - 342.770651, - 342.969878, - 343.169163, - 343.368504, - 343.567904, - 343.767361, - 343.966875, - 344.166447, - 344.366077, - 344.565765, - 344.765511, - 344.965316, - 345.165178, - 345.365099, - 345.565079, - 345.765117, - 345.965215, - 346.165371, - 346.365586, - 346.565861, - 346.766196, - 346.96659, - 347.167044, - 347.367558, - 347.568133, - 347.768767, - 347.969462, - 348.170218, - 348.371035, - 348.571912, - 348.772851, - 348.973851, - 349.174912, - 349.376035, - 349.57722, - 349.778466, - 349.979774, - 350.181145, - 350.382578, - 350.584073, - 350.78563, - 350.98725, - 351.188933, - 351.390679, - 351.592488, - 351.79436, - 351.996295, - 352.198294, - 352.400356, - 352.602482, - 352.804671, - 353.006924, - 353.209241, - 353.411621, - 353.614066, - 353.816575, - 354.019147, - 354.221784, - 354.424485, - 354.627251, - 354.83008, - 355.032974, - 355.235933, - 355.438955, - 355.642043, - 355.845194, - 356.04841, - 356.251691, - 356.455036, - 356.658446, - 356.86192, - 357.065459, - 357.269063, - 357.472731, - 357.676464, - 357.880261, - 358.084123, - 358.288049, - 358.492039, - 358.696095, - 358.900214, - 359.104398, - 359.308647, - 359.512959, - 359.717336, - 359.921778, - 0.126283, - 0.330853, - 0.535487, - 0.740186, - 0.944948, - 1.149775, - 1.354666, - 1.559622, - 1.764641, - 1.969725, - 2.174873, - 2.380086, - 2.585362, - 2.790703, - 2.996109, - 3.201578, - 3.407113, - 3.612711, - 3.818375, - 4.024102, - 4.229895, - 4.435752, - 4.641674, - 4.847661, - 5.053713, - 5.25983, - 5.466012, - 5.67226, - 5.878573, - 6.084951, - 6.291396, - 6.497906, - 6.704483, - 6.911125, - 7.117834, - 7.32461, - 7.531452, - 7.738361, - 7.945336, - 8.152379, - 8.359489, - 8.566667, - 8.773912, - 8.981225, - 9.188606, - 9.396055, - 9.603572, - 9.811157, - 10.018811, - 10.226534, - 10.434325, - 10.642185, - 10.850114, - 11.058112, - 11.26618, - 11.474317, - 11.682523, - 11.890799, - 12.099145, - 12.307561, - 12.516047, - 12.724603, - 12.933228, - 13.141924, - 13.350691, - 13.559527, - 13.768434, - 13.977411, - 14.186459, - 14.395577, - 14.604765, - 14.814024, - 15.023354, - 15.232754, - 15.442225, - 15.651766, - 15.861378, - 16.071061, - 16.280815, - 16.490639, - 16.700534, - 16.9105, - 17.120536, - 17.330644, - 17.540822, - 17.751072, - 17.961392, - 18.171784, - 18.382246, - 18.59278, - 18.803385, - 19.01406, - 19.224807, - 19.435626, - 19.646515, - 19.857476, - 20.068509, - 20.279613, - 20.490788, - 20.702036, - 20.913354, - 21.124745, - 21.336208, - 21.547742, - 21.759349, - 21.971028, - 22.182779, - 22.394602, - 22.606498, - 22.818467, - 23.030509, - 23.242623, - 23.45481, - 23.66707, - 23.879404, - 24.09181, - 24.30429, - 24.516844, - 24.729471, - 24.942172, - 25.154947, - 25.367796, - 25.580718, - 25.793715, - 26.006787, - 26.219933, - 26.433153, - 26.646448, - 26.859818, - 27.073262, - 27.286782, - 27.500377, - 27.714047, - 27.927792, - 28.141613, - 28.355509, - 28.569481, - 28.783529, - 28.997652, - 29.211852, - 29.426127, - 29.640479, - 29.854907, - 30.069411, - 30.283991, - 30.498648, - 30.713382, - 30.928192, - 31.14308, - 31.358043, - 31.573084, - 31.788202, - 32.003397, - 32.21867, - 32.434019, - 32.649446, - 32.86495, - 33.080532, - 33.296192, - 33.511929, - 33.727743, - 33.943636, - 34.159606, - 34.375655, - 34.591781, - 34.807985, - 35.024267, - 35.240628, - 35.457066, - 35.673583, - 35.890178, - 36.106851, - 36.323603, - 36.540433, - 36.757341, - 36.974328, - 37.191394, - 37.408538, - 37.62576, - 37.843061, - 38.060441, - 38.277899, - 38.495437, - 38.713053, - 38.930747, - 39.148521, - 39.366373, - 39.584305, - 39.802315, - 40.020404, - 40.238573, - 40.45682, - 40.675147, - 40.893552, - 41.112037, - 41.330601, - 41.549245, - 41.767967, - 41.98677, - 42.205652, - 42.424613, - 42.643654, - 42.862775, - 43.081976, - 43.301256, - 43.520617, - 43.740058, - 43.959579, - 44.17918, - 44.398862, - 44.618625, - 44.838468, - 45.058392, - 45.278397, - 45.498482, - 45.718649, - 45.938897, - 46.159227, - 46.379638, - 46.600131, - 46.820705, - 47.041361, - 47.2621, - 47.48292, - 47.703823, - 47.924808, - 48.145876, - 48.367026, - 48.588259, - 48.809575, - 49.030974, - 49.252457, - 49.474022, - 49.695671, - 49.917404, - 50.13922, - 50.361121, - 50.583105, - 50.805173, - 51.027325, - 51.249562, - 51.471883, - 51.694288, - 51.916778, - 52.139353, - 52.362012, - 52.584756, - 52.807586, - 53.0305, - 53.253499, - 53.476584, - 53.699754, - 53.923009, - 54.14635, - 54.369776, - 54.593288, - 54.816886, - 55.040569, - 55.264339, - 55.488194, - 55.712135, - 55.936162, - 56.160276, - 56.384476, - 56.608762, - 56.833134, - 57.057593, - 57.282138, - 57.50677, - 57.731489, - 57.956294, - 58.181186, - 58.406165, - 58.631232, - 58.856385, - 59.081625, - 59.306952, - 59.532367, - 59.757869, - 59.983459, - 60.209136, - 60.4349, - 60.660753, - 60.886693, - 61.112721, - 61.338838, - 61.565042, - 61.791335, - 62.017716, - 62.244185, - 62.470743, - 62.69739, - 62.924126, - 63.15095, - 63.377864, - 63.604867, - 63.831959, - 64.059141, - 64.286413, - 64.513775, - 64.741226, - 64.968768, - 65.1964, - 65.424123, - 65.651936, - 65.87984, - 66.107836, - 66.335922, - 66.5641, - 66.792369, - 67.02073, - 67.249183, - 67.477728, - 67.706366, - 67.935095, - 68.163917, - 68.392833, - 68.621841, - 68.850942, - 69.080137, - 69.309426, - 69.538809, - 69.768285, - 69.997857, - 70.227523, - 70.457283, - 70.687139, - 70.91709, - 71.147137, - 71.377279, - 71.607517, - 71.837851, - 72.068282, - 72.298808, - 72.529432, - 72.760152, - 72.990969, - 73.221883, - 73.452895, - 73.684004, - 73.915211, - 74.146515, - 74.377918, - 74.609419, - 74.841019, - 75.072717, - 75.304514, - 75.536411, - 75.768406, - 76.0005, - 76.232693, - 76.464986, - 76.697378, - 76.929869, - 77.16246, - 77.395151, - 77.627941, - 77.860831, - 78.093822, - 78.326912, - 78.560102, - 78.793393, - 79.026785, - 79.260277, - 79.493871, - 79.727565, - 79.961362, - 80.195259, - 80.429258, - 80.66336, - 80.897563, - 81.131868, - 81.366276, - 81.600786, - 81.835398, - 82.070114, - 82.304931, - 82.539852, - 82.774876, - 83.010002, - 83.245232, - 83.480565, - 83.716001, - 83.951541, - 84.187185, - 84.422933, - 84.658784, - 84.89474, - 85.130801, - 85.366965, - 85.603235, - 85.83961, - 86.076089, - 86.312674, - 86.549364, - 86.78616, - 87.02306, - 87.260067, - 87.497179, - 87.734397, - 87.97172, - 88.20915, - 88.446685, - 88.684325, - 88.922072, - 89.159924, - 89.397883, - 89.635947, - 89.874117, - 90.112393, - 90.350774, - 90.589262, - 90.827856, - 91.066555, - 91.305361, - 91.544273, - 91.783291, - 92.022416, - 92.261646, - 92.500983, - 92.740427, - 92.979977, - 93.219633, - 93.459395, - 93.699264, - 93.93924, - 94.179322, - 94.419511, - 94.659806, - 94.900207, - 95.140715, - 95.38133, - 95.622052, - 95.86288, - 96.103815, - 96.344857, - 96.586007, - 96.827263, - 97.068627, - 97.310098, - 97.551678, - 97.793364, - 98.035159, - 98.277062, - 98.519074, - 98.761193, - 99.003422, - 99.245759, - 99.488205, - 99.73076, - 99.973424, - 100.216197, - 100.45908, - 100.702072, - 100.945174, - 101.188385, - 101.431707, - 101.675138, - 101.91868, - 102.162331, - 102.406093, - 102.649965, - 102.893948, - 103.138041, - 103.382246, - 103.626561, - 103.870987, - 104.115524, - 104.360173, - 104.604933, - 104.849804, - 105.094787, - 105.339882, - 105.585089, - 105.830407, - 106.075838, - 106.32138, - 106.567034, - 106.812801, - 107.05868, - 107.304671, - 107.550774, - 107.79699, - 108.043318, - 108.289758, - 108.536312, - 108.782978, - 109.029756, - 109.276648, - 109.523652, - 109.77077, - 110.018001, - 110.265345, - 110.512802, - 110.760373, - 111.008058, - 111.255856, - 111.503768, - 111.751795, - 111.999935, - 112.24819, - 112.496559, - 112.745043, - 112.993641, - 113.242354, - 113.491182, - 113.740125, - 113.989183, - 114.238357, - 114.487646, - 114.73705, - 114.986571, - 115.236207, - 115.48596, - 115.735828, - 115.985813, - 116.235915, - 116.486134, - 116.73647, - 116.986922, - 117.237493, - 117.488181, - 117.738986, - 117.98991, - 118.240951, - 118.492112, - 118.74339, - 118.994787, - 119.246304, - 119.497939, - 119.749694, - 120.001568, - 120.253562, - 120.505675, - 120.757909, - 121.010263, - 121.262738, - 121.515333, - 121.76805, - 122.020887, - 122.273846, - 122.526927, - 122.780129, - 123.033454, - 123.286901, - 123.54047, - 123.794162, - 124.047977, - 124.301916, - 124.555977, - 124.810163, - 125.064472, - 125.318905, - 125.573463, - 125.828145, - 126.082951, - 126.337883, - 126.592939, - 126.848121, - 127.103428, - 127.35886, - 127.614419, - 127.870103, - 128.125914, - 128.381851, - 128.637914, - 128.894104, - 129.150421, - 129.406865, - 129.663436, - 129.920134, - 130.176959, - 130.433912, - 130.690992, - 130.9482, - 131.205536, - 131.463, - 131.720591, - 131.978311, - 132.236159, - 132.494135, - 132.752239, - 133.010471, - 133.268832, - 133.527321, - 133.785939, - 134.044685, - 134.30356, - 134.562564, - 134.821696, - 135.080957, - 135.340346, - 135.599865, - 135.859513, - 136.119289, - 136.379195, - 136.63923, - 136.899394, - 137.159687, - 137.42011, - 137.680662, - 137.941343, - 138.202154, - 138.463095, - 138.724165, - 138.985366, - 139.246696, - 139.508156, - 139.769747, - 140.031467, - 140.293319, - 140.5553, - 140.817413, - 141.079656, - 141.342031, - 141.604536, - 141.867173, - 142.129942, - 142.392842, - 142.655874, - 142.919039, - 143.182336, - 143.445765, - 143.709327, - 143.973022, - 144.23685, - 144.500811, - 144.764907, - 145.029136, - 145.293499, - 145.557996, - 145.822628, - 146.087395, - 146.352297, - 146.617334, - 146.882507, - 147.147815, - 147.413259, - 147.67884, - 147.944556, - 148.21041, - 148.4764, - 148.742527, - 149.008792, - 149.275194, - 149.541733, - 149.808411, - 150.075226, - 150.34218, - 150.609272, - 150.876503, - 151.143872, - 151.411381, - 151.679028, - 151.946815, - 152.214741, - 152.482807, - 152.751013, - 153.019359, - 153.287845, - 153.556471, - 153.825237, - 154.094144, - 154.363191, - 154.63238, - 154.901709, - 155.171179, - 155.440791, - 155.710543, - 155.980438, - 156.250473, - 156.520651, - 156.79097, - 157.061431, - 157.332034, - 157.602779, - 157.873666, - 158.144695, - 158.415867, - 158.687181, - 158.958638, - 159.230238, - 159.50198, - 159.773866, - 160.045894, - 160.318066, - 160.590381, - 160.862839, - 161.13544, - 161.408186, - 161.681075, - 161.954108, - 162.227284, - 162.500605, - 162.77407, - 163.04768, - 163.321434, - 163.595332, - 163.869375, - 164.143563, - 164.417896, - 164.692374, - 164.966998, - 165.241767, - 165.516681, - 165.791741, - 166.066947, - 166.342298, - 166.617796, - 166.89344, - 167.169231, - 167.445168, - 167.721252, - 167.997483, - 168.273861, - 168.550386, - 168.827059, - 169.103879, - 169.380847, - 169.657963, - 169.935227, - 170.212639, - 170.4902, - 170.767909, - 171.045767, - 171.323774, - 171.60193, - 171.880235, - 172.15869, - 172.437294, - 172.716047, - 172.994951, - 173.274004, - 173.553208, - 173.832561, - 174.112065, - 174.39172, - 174.671525, - 174.95148, - 175.231586, - 175.511843, - 175.792251, - 176.072809, - 176.353519, - 176.634379, - 176.91539, - 177.196553, - 177.477866, - 177.75933, - 178.040945, - 178.322712, - 178.604629, - 178.886697, - 179.168915, - 179.451285, - 179.733805, - 180.016476, - 180.299298, - 180.58227, - 180.865393, - 181.148666, - 181.43209, - 181.715664, - 181.999389, - 182.283265, - 182.567291, - 182.851467, - 183.135794, - 183.420272, - 183.704901, - 183.98968, - 184.27461, - 184.559691, - 184.844924, - 185.130308, - 185.415843, - 185.70153, - 185.987369, - 186.27336, - 186.559503, - 186.845799, - 187.132248, - 187.41885, - 187.705605, - 187.992514, - 188.279577, - 188.566795, - 188.854167, - 189.141695, - 189.429378, - 189.717218, - 190.005213, - 190.293366, - 190.581676, - 190.870144, - 191.158769, - 191.447553, - 191.736495, - 192.025597, - 192.314857, - 192.604278, - 192.893858, - 193.183598, - 193.473499, - 193.76356, - 194.053783, - 194.344167, - 194.634713, - 194.925421, - 195.21629, - 195.507323, - 195.798518, - 196.089875, - 196.381396, - 196.67308, - 196.964927, - 197.256938, - 197.549112, - 197.841451, - 198.133953, - 198.42662, - 198.719451, - 199.012446, - 199.305606, - 199.598931, - 199.89242, - 200.186075, - 200.479895, - 200.77388, - 201.068031, - 201.362347, - 201.656829, - 201.951478, - 202.246292, - 202.541274, - 202.836421, - 203.131736, - 203.427217, - 203.722866, - 204.018682, - 204.314666, - 204.610817, - 204.907136, - 205.203624, - 205.50028, - 205.797105, - 206.094099, - 206.391263, - 206.688596, - 206.986099, - 207.283773, - 207.581618, - 207.879634, - 208.177821, - 208.47618, - 208.774711, - 209.073414, - 209.37229, - 209.671339, - 209.97056, - 210.269955, - 210.569523, - 210.869265, - 211.16918, - 211.469269, - 211.769532, - 212.069969, - 212.37058, - 212.671366, - 212.972326, - 213.273461, - 213.57477, - 213.876254, - 214.177913, - 214.479747, - 214.781756, - 215.08394, - 215.386299, - 215.688833, - 215.991542, - 216.294426, - 216.597486, - 216.900721, - 217.204131, - 217.507716, - 217.811476, - 218.115412, - 218.419523, - 218.723809, - 219.028271, - 219.332908, - 219.63772, - 219.942708, - 220.247872, - 220.553212, - 220.858727, - 221.164418, - 221.470286, - 221.77633, - 222.082551, - 222.388948, - 222.695523, - 223.002274, - 223.309203, - 223.616309, - 223.923593, - 224.231055, - 224.538695, - 224.846513, - 225.15451, - 225.462685, - 225.771039, - 226.079572, - 226.388284, - 226.697176, - 227.006247, - 227.315498, - 227.624929, - 227.93454, - 228.244332, - 228.554304, - 228.864456, - 229.17479, - 229.485304, - 229.795999, - 230.106875, - 230.417933, - 230.729171, - 231.040591, - 231.352193, - 231.663975, - 231.975939, - 232.288085, - 232.600411, - 232.91292, - 233.22561, - 233.538481, - 233.851534, - 234.164768, - 234.478184, - 234.791782, - 235.105561, - 235.419522, - 235.733665, - 236.047989, - 236.362495, - 236.677184, - 236.992053, - 237.307105, - 237.622339, - 237.937755, - 238.253353, - 238.569134, - 238.885097, - 239.201242, - 239.51757, - 239.83408, - 240.150774, - 240.46765, - 240.78471, - 241.101953, - 241.41938, - 241.736991, - 242.054786, - 242.372765, - 242.690928, - 243.009277, - 243.32781, - 243.646529, - 243.965434, - 244.284524, - 244.6038, - 244.923263, - 245.242912, - 245.562749, - 245.882772, - 246.202983, - 246.523381, - 246.843967, - 247.16474, - 247.485703, - 247.806853, - 248.128192, - 248.44972, - 248.771436, - 249.093342, - 249.415437, - 249.737722, - 250.060196, - 250.38286, - 250.705714, - 251.028758, - 251.351992, - 251.675417, - 251.999032, - 252.322838, - 252.646835, - 252.971022, - 253.295401, - 253.619971, - 253.944732, - 254.269685, - 254.594829, - 254.920165, - 255.245693, - 255.571412, - 255.897324, - 256.223428, - 256.549723, - 256.876212, - 257.202893, - 257.529766, - 257.856832, - 258.184092, - 258.511544, - 258.83919, - 259.16703, - 259.495063, - 259.82329, - 260.151711, - 260.480327, - 260.809137, - 261.138143, - 261.467343, - 261.796738, - 262.126329, - 262.456116, - 262.786099, - 263.116278, - 263.446653, - 263.777225, - 264.107994, - 264.43896, - 264.770123, - 265.101484, - 265.433042, - 265.764799, - 266.096754, - 266.428907, - 266.761259, - 267.09381, - 267.426559, - 267.759509, - 268.092657, - 268.426006, - 268.759554, - 269.093302, - 269.427251, - 269.7614, - 270.09575, - 270.4303, - 270.765051, - 271.100003, - 271.435157, - 271.770511, - 272.106067, - 272.441824, - 272.777783, - 273.113943, - 273.450306, - 273.78687, - 274.123636, - 274.460604, - 274.797775, - 275.135148, - 275.472723, - 275.810501, - 276.148482, - 276.486666, - 276.825053, - 277.163643, - 277.502436, - 277.841433, - 278.180633, - 278.520037, - 278.859645, - 279.199457, - 279.539473, - 279.879693, - 280.220117, - 280.560746, - 280.901579, - 281.242617, - 281.58386, - 281.925307, - 282.26696, - 282.608818, - 282.95088, - 283.293149, - 283.635622, - 283.978302, - 284.321187, - 284.664278, - 285.007575, - 285.351078, - 285.694787, - 286.038703, - 286.382825, - 286.727154, - 287.071689, - 287.416431, - 287.761379, - 288.106535, - 288.451897, - 288.797466, - 289.143242, - 289.489225, - 289.835414, - 290.181811, - 290.528415, - 290.875226, - 291.222244, - 291.569469, - 291.916901, - 292.26454, - 292.612386, - 292.960439, - 293.308699, - 293.657167, - 294.005841, - 294.354722, - 294.703811, - 295.053106, - 295.402608, - 295.752317, - 296.102233, - 296.452356, - 296.802685, - 297.153221, - 297.503964, - 297.854913, - 298.206068, - 298.557429, - 298.908997, - 299.26077, - 299.61275, - 299.964935, - 300.317326, - 300.669922, - 301.022724, - 301.375731, - 301.728944, - 302.082362, - 302.435986, - 302.789816, - 303.143851, - 303.498092, - 303.852539, - 304.207193, - 304.562053, - 304.917121, - 305.272395, - 305.627878, - 305.983569, - 306.339469, - 306.695578, - 307.051896, - 307.408425, - 307.765164, - 308.122115, - 308.479277, - 308.836652, - 309.194239, - 309.55204, - 309.910054, - 310.268283, - 310.626726, - 310.985385, - 311.344259, - 311.703349, - 312.062656, - 312.42218, - 312.781921, - 313.14188, - 313.502057, - 313.862453, - 314.223067, - 314.583901, - 314.944955, - 315.306228, - 315.667723, - 316.029437, - 316.391373, - 316.753529, - 317.115907, - 317.478506, - 317.841326, - 318.204368, - 318.56763, - 318.931113, - 319.294818, - 319.658743, - 320.022889, - 320.387256, - 320.751844, - 321.116651, - 321.48168, - 321.846929, - 322.212398, - 322.578087, - 322.943997, - 323.310126, - 323.676476, - 324.043046, - 324.409836, - 324.776846, - 325.144076, - 325.511526, - 325.879197, - 326.247087, - 326.615198, - 326.98353, - 327.352082, - 327.720855, - 328.08985, - 328.459067, - 328.828505, - 329.198166, - 329.568049, - 329.938155, - 330.308484, - 330.679038, - 331.049815, - 331.420817, - 331.792044, - 332.163497, - 332.535175, - 332.907081, - 333.279214, - 333.651574, - 334.024163, - 334.396981, - 334.770028, - 335.143305, - 335.516813, - 335.890551, - 336.264521, - 336.638723, - 337.013156, - 337.387822, - 337.762721, - 338.137853, - 338.513218, - 338.888816, - 339.264648, - 339.640713, - 340.017012, - 340.393545, - 340.770312, - 341.147312, - 341.524547, - 341.902015, - 342.279717, - 342.657652, - 343.035822, - 343.414224, - 343.792861, - 344.17173, - 344.550833, - 344.930169, - 345.309738, - 345.68954, - 346.069574, - 346.449841, - 346.83034, - 347.211072, - 347.592036, - 347.973232, - 348.354661, - 348.736321, - 349.118213, - 349.500337, - 349.882694, - 350.265282, - 350.648102, - 351.031155, - 351.41444, - 351.797957, - 352.181707, - 352.565689, - 352.949905, - 353.334353, - 353.719035, - 354.10395, - 354.489099, - 354.874482, - 355.260099, - 355.645951, - 356.032037, - 356.418358, - 356.804914, - 357.191705, - 357.578731, - 357.965994, - 358.353492, - 358.741226, - 359.129197, - 359.517404, - 359.905848, - 0.294529, - 0.683447, - 1.072602, - 1.461994, - 1.851623, - 2.24149, - 2.631594, - 3.021936, - 3.412515, - 3.803331, - 4.194385, - 4.585676, - 4.977205, - 5.36897, - 5.760973, - 6.153213, - 6.54569, - 6.938404, - 7.331356, - 7.724544, - 8.117969, - 8.51163, - 8.905529, - 9.299665, - 9.694037, - 10.088647, - 10.483493, - 10.878577, - 11.273898, - 11.669456, - 12.065251, - 12.461284, - 12.857555, - 13.254064, - 13.650811, - 14.047795, - 14.445019, - 14.842481, - 15.240181, - 15.638121, - 16.0363, - 16.434718, - 16.833377, - 17.232275, - 17.631414, - 18.030793, - 18.430413, - 18.830274, - 19.230377, - 19.630721, - 20.031307, - 20.432136, - 20.833206, - 21.23452, - 21.636076, - 22.037875, - 22.439917, - 22.842203, - 23.244732, - 23.647505, - 24.050522, - 24.453782, - 24.857287, - 25.261035, - 25.665028, - 26.069264, - 26.473745, - 26.87847, - 27.283439, - 27.688652, - 28.09411, - 28.499811, - 28.905757, - 29.311946, - 29.71838, - 30.125058, - 30.53198, - 30.939145, - 31.346555, - 31.754209, - 32.162106, - 32.570247, - 32.978632, - 33.387261, - 33.796134, - 34.205251, - 34.614611, - 35.024216, - 35.434064, - 35.844157, - 36.254495, - 36.665076, - 37.075903, - 37.486974, - 37.89829, - 38.309852, - 38.721658, - 39.133711, - 39.54601, - 39.958554, - 40.371345, - 40.784383, - 41.197668, - 41.611199, - 42.024979, - 42.439005, - 42.85328, - 43.267802, - 43.682573, - 44.097591, - 44.512859, - 44.928375, - 45.344139, - 45.760153, - 46.176416, - 46.592928, - 47.009689, - 47.426699, - 47.843959, - 48.261469, - 48.679228, - 49.097237, - 49.515495, - 49.934003, - 50.352761, - 50.771768, - 51.191024, - 51.61053, - 52.030284, - 52.450288, - 52.870541, - 53.291042, - 53.711791, - 54.132789, - 54.554034, - 54.975526, - 55.397265, - 55.819252, - 56.241484, - 56.663962, - 57.086686, - 57.509655, - 57.932868, - 58.356325, - 58.780025, - 59.203968, - 59.628152, - 60.052578, - 60.477244, - 60.90215, - 61.327295, - 61.752679, - 62.1783, - 62.604158, - 63.030253, - 63.456584, - 63.883151, - 64.309953, - 64.736991, - 65.164265, - 65.591774, - 66.01952, - 66.447502, - 66.875723, - 67.304181, - 67.732879, - 68.161817, - 68.590996, - 69.020417, - 69.450083, - 69.879993, - 70.310148, - 70.740551, - 71.171202, - 71.602102, - 72.033252, - 72.464652, - 72.896303, - 73.328206, - 73.760361, - 74.192767, - 74.625426, - 75.058338, - 75.491503, - 75.924921, - 76.358593, - 76.792519, - 77.226699, - 77.661133, - 78.095822, - 78.530767, - 78.965968, - 79.401424, - 79.837138, - 80.273108, - 80.709335, - 81.145819, - 81.582561, - 82.01956, - 82.456817, - 82.894331, - 83.332102, - 83.770129, - 84.208412, - 84.64695, - 85.085742, - 85.524788, - 85.964086, - 86.403635, - 86.843435, - 87.283484, - 87.723782, - 88.164328, - 88.605122, - 89.046163, - 89.48745, - 89.928983, - 90.370762, - 90.812787, - 91.255057, - 91.697574, - 92.140336, - 92.583345, - 93.0266, - 93.470103, - 93.913852, - 94.357849, - 94.802093, - 95.246585, - 95.691325, - 96.136314, - 96.581551, - 97.027036, - 97.472771, - 97.918755, - 98.364989, - 98.811473, - 99.258207, - 99.705192, - 100.152429, - 100.599918, - 101.04766, - 101.495656, - 101.943906, - 102.392411, - 102.841171, - 103.290189, - 103.739463, - 104.188995, - 104.638785, - 105.088833, - 105.53914, - 105.989706, - 106.440531, - 106.891615, - 107.342958, - 107.794559, - 108.246419, - 108.698536, - 109.150911, - 109.603543, - 110.056432, - 110.509577, - 110.962977, - 111.416633, - 111.870543, - 112.324708, - 112.779127, - 113.233799, - 113.688724, - 114.143903, - 114.599334, - 115.055018, - 115.510954, - 115.967142, - 116.423581, - 116.880272, - 117.337214, - 117.794408, - 118.251852, - 118.709546, - 119.167491, - 119.625686, - 120.084131, - 120.542826, - 121.00177, - 121.460964, - 121.920408, - 122.380101, - 122.840044, - 123.300237, - 123.76068, - 124.221374, - 124.682319, - 125.143515, - 125.604962, - 126.066662, - 126.528614, - 126.990819, - 127.453277, - 127.915988, - 128.378954, - 128.842174, - 129.305648, - 129.769377, - 130.23336, - 130.697598, - 131.162091, - 131.626838, - 132.09184, - 132.557096, - 133.022607, - 133.488371, - 133.954389, - 134.420661, - 134.887186, - 135.353963, - 135.820994, - 136.288277, - 136.755812, - 137.223599, - 137.691638, - 138.159928, - 138.628469, - 139.097261, - 139.566303, - 140.035596, - 140.505138, - 140.97493, - 141.444971, - 141.91526, - 142.385798, - 142.856584, - 143.327618, - 143.798899, - 144.270427, - 144.742201, - 145.214222, - 145.686489, - 146.159003, - 146.631762, - 147.104767, - 147.578018, - 148.051515, - 148.525259, - 148.999249, - 149.473486, - 149.94797, - 150.422701, - 150.897679, - 151.372906, - 151.848381, - 152.324105, - 152.800077, - 153.2763, - 153.752771, - 154.229493, - 154.706465, - 155.183688, - 155.661162, - 156.138887, - 156.616863, - 157.095091, - 157.57357, - 158.0523, - 158.531282, - 159.010515, - 159.49, - 159.969737, - 160.449725, - 160.929966, - 161.410458, - 161.891203, - 162.372199, - 162.853447, - 163.334947, - 163.816699, - 164.298702, - 164.780956, - 165.263462, - 165.746218, - 166.229224, - 166.71248, - 167.195985, - 167.67974, - 168.163742, - 168.647992, - 169.13249, - 169.617233, - 170.102223, - 170.587458, - 171.072938, - 171.558663, - 172.044632, - 172.530845, - 173.017301, - 173.504001, - 173.990943, - 174.478127, - 174.965553, - 175.453221, - 175.94113, - 176.429279, - 176.917669, - 177.406298, - 177.895167, - 178.384274, - 178.873618, - 179.363199, - 179.853015, - 180.343066, - 180.833351, - 181.323867, - 181.814615, - 182.305593, - 182.796799, - 183.288234, - 183.779895, - 184.271782, - 184.763895, - 185.256234, - 185.748797, - 186.241586, - 186.734602, - 187.227843, - 187.721313, - 188.215012, - 188.708941, - 189.203102, - 189.697496, - 190.192126, - 190.686993, - 191.182099, - 191.677445, - 192.173032, - 192.668861, - 193.164935, - 193.661252, - 194.157815, - 194.654623, - 195.151676, - 195.648976, - 196.146521, - 196.644313, - 197.14235, - 197.640634, - 198.139163, - 198.637939, - 199.136961, - 199.636229, - 200.135744, - 200.635506, - 201.135516, - 201.635775, - 202.136282, - 202.63704, - 203.138047, - 203.639306, - 204.140817, - 204.642579, - 205.144593, - 205.64686, - 206.149378, - 206.652148, - 207.155168, - 207.658438, - 208.161955, - 208.66572, - 209.169731, - 209.673985, - 210.178483, - 210.683222, - 211.188201, - 211.693419, - 212.198874, - 212.704567, - 213.210495, - 213.716658, - 214.223055, - 214.729687, - 215.236553, - 215.743652, - 216.250984, - 216.75855, - 217.26635, - 217.774383, - 218.282649, - 218.791149, - 219.299883, - 219.80885, - 220.318051, - 220.827486, - 221.337155, - 221.847058, - 222.357194, - 222.867565, - 223.37817, - 223.889009, - 224.400083, - 224.911392, - 225.422936, - 225.934717, - 226.446735, - 226.95899, - 227.471484, - 227.984216, - 228.497189, - 229.010402, - 229.523857, - 230.037554, - 230.551493, - 231.065676, - 231.580103, - 232.094773, - 232.609687, - 233.124845, - 233.640247, - 234.155893, - 234.671782, - 235.187914, - 235.704289, - 236.220905, - 236.737762, - 237.25486, - 237.772198, - 238.289775, - 238.80759, - 239.325644, - 239.843935, - 240.362462, - 240.881226, - 241.400226, - 241.919461, - 242.43893, - 242.958634, - 243.478571, - 243.998741, - 244.519144, - 245.039779, - 245.560645, - 246.081741, - 246.603066, - 247.124621, - 247.646404, - 248.168416, - 248.690655, - 249.213121, - 249.735815, - 250.258734, - 250.78188, - 251.305253, - 251.828851, - 252.352675, - 252.876725, - 253.401001, - 253.925503, - 254.450232, - 254.975187, - 255.500368, - 256.025777, - 256.551412, - 257.077275, - 257.603365, - 258.129683, - 258.656229, - 259.183002, - 259.710003, - 260.237233, - 260.76469, - 261.292375, - 261.820287, - 262.348426, - 262.876793, - 263.405386, - 263.934205, - 264.46325, - 264.992521, - 265.522017, - 266.051737, - 266.581681, - 267.111849, - 267.64224, - 268.172853, - 268.703689, - 269.234746, - 269.766023, - 270.297522, - 270.82924, - 271.361177, - 271.893332, - 272.425705, - 272.958295, - 273.491102, - 274.024124, - 274.55736, - 275.090811, - 275.624475, - 276.158352, - 276.692441, - 277.22674, - 277.761251, - 278.295972, - 278.830902, - 279.366042, - 279.90139, - 280.436947, - 280.972713, - 281.508687, - 282.044868, - 282.581257, - 283.117853, - 283.654657, - 284.191668, - 284.728887, - 285.266312, - 285.803946, - 286.341787, - 286.879835, - 287.418091, - 287.956554, - 288.495224, - 289.034101, - 289.573185, - 290.112474, - 290.651971, - 291.191673, - 291.73158, - 292.271693, - 292.81201, - 293.352531, - 293.893255, - 294.434182, - 294.975312, - 295.516644, - 296.058177, - 296.599911, - 297.141845, - 297.683978, - 298.22631, - 298.768839, - 299.311564, - 299.854482, - 300.397593, - 300.940895, - 301.484384, - 302.028059, - 302.571918, - 303.115959, - 303.660179, - 304.204575, - 304.749147, - 305.293893, - 305.838811, - 306.383901, - 306.929161, - 307.474592, - 308.020195, - 308.56597, - 309.111919, - 309.658043, - 310.204344, - 310.750824, - 311.297484, - 311.844329, - 312.391358, - 312.938574, - 313.485979, - 314.033573, - 314.581358, - 315.129335, - 315.677503, - 316.225864, - 316.774416, - 317.32316, - 317.872095, - 318.421221, - 318.970538, - 319.520045, - 320.069742, - 320.61963, - 321.169708, - 321.719979, - 322.270442, - 322.821098, - 323.37195, - 323.922998, - 324.474244, - 325.02569, - 325.577336, - 326.129185, - 326.681236, - 327.23349, - 327.785948, - 328.338609, - 328.891473, - 329.444539, - 329.997804, - 330.551268, - 331.104929, - 331.658783, - 332.21283, - 332.767066, - 333.321489, - 333.876097, - 334.430888, - 334.985861, - 335.541013, - 336.096343, - 336.651851, - 337.207535, - 337.763396, - 338.319432, - 338.875644, - 339.432032, - 339.988595, - 340.545335, - 341.10225, - 341.659342, - 342.216611, - 342.774055, - 343.331676, - 343.889472, - 344.447445, - 345.005592, - 345.563915, - 346.122413, - 346.681086, - 347.239933, - 347.798955, - 348.358152, - 348.917524, - 349.477071, - 350.036796, - 350.596698, - 351.156778, - 351.717039, - 352.27748, - 352.838104, - 353.398912, - 353.959906, - 354.521085, - 355.082453, - 355.644009, - 356.205754, - 356.767688, - 357.329812, - 357.892126, - 358.454631, - 359.017325, - 359.580209, - 0.143281, - 0.706542, - 1.269991, - 1.833626, - 2.397447, - 2.961453, - 3.525643, - 4.090015, - 4.65457, - 5.219305, - 5.78422, - 6.349315, - 6.914589, - 7.480041, - 8.045671, - 8.611477, - 9.17746, - 9.743618, - 10.309952, - 10.87646, - 11.443142, - 12.009997, - 12.577025, - 13.144224, - 13.711594, - 14.279134, - 14.846844, - 15.414722, - 15.982769, - 16.550983, - 17.119365, - 17.687913, - 18.256628, - 18.82551, - 19.394558, - 19.963774, - 20.533156, - 21.102706, - 21.672424, - 22.242311, - 22.812368, - 23.382594, - 23.952991, - 24.523559, - 25.094298, - 25.66521, - 26.236295, - 26.807552, - 27.378983, - 27.950587, - 28.522364, - 29.094313, - 29.666436, - 30.238731, - 30.811198, - 31.383838, - 31.956648, - 32.529629, - 33.102781, - 33.676102, - 34.249592, - 34.823251, - 35.397078, - 35.971072, - 36.545233, - 37.11956, - 37.694053, - 38.268711, - 38.843532, - 39.418518, - 39.993665, - 40.568975, - 41.144445, - 41.720075, - 42.295864, - 42.871811, - 43.447915, - 44.024175, - 44.600589, - 45.177158, - 45.75388, - 46.330755, - 46.907781, - 47.484957, - 48.062284, - 48.63976, - 49.217385, - 49.795159, - 50.373081, - 50.951152, - 51.52937, - 52.107736, - 52.68625, - 53.264912, - 53.843721, - 54.422678, - 55.001783, - 55.581035, - 56.160435, - 56.739982, - 57.319676, - 57.899516, - 58.479502, - 59.059634, - 59.639909, - 60.220327, - 60.800886, - 61.381586, - 61.962424, - 62.543399, - 63.124509, - 63.705752, - 64.287127, - 64.868633, - 65.450269, - 66.032033, - 66.613927, - 67.195948, - 67.778098, - 68.360377, - 68.942785, - 69.525325, - 70.107996, - 70.690801, - 71.273742, - 71.85682, - 72.440036, - 73.023392, - 73.606889, - 74.190528, - 74.77431, - 75.358235, - 75.942302, - 76.526512, - 77.110864, - 77.695357, - 78.27999, - 78.864762, - 79.449673, - 80.034721, - 80.619905, - 81.205225, - 81.79068, - 82.37627, - 82.961995, - 83.547856, - 84.133853, - 84.719987, - 85.30626, - 85.892673, - 86.479227, - 87.065925, - 87.652766, - 88.239753, - 88.826886, - 89.414165, - 90.001592, - 90.589165, - 91.176884, - 91.764749, - 92.352758, - 92.940909, - 93.529202, - 94.117635, - 94.706205, - 95.294911, - 95.883752, - 96.472726, - 97.061831, - 97.651066, - 98.24043, - 98.829923, - 99.419545, - 100.009295, - 100.599175, - 101.189184, - 101.779324, - 102.369594, - 102.959996, - 103.55053, - 104.141196, - 104.731996, - 105.322929, - 105.913994, - 106.505193, - 107.096523, - 107.687985, - 108.279579, - 108.871302, - 109.463155, - 110.055137, - 110.647247, - 111.239485, - 111.831851, - 112.424344, - 113.016966, - 113.609715, - 114.202594, - 114.795603, - 115.388742, - 115.982014, - 116.575419, - 117.168959, - 117.762634, - 118.356445, - 118.950394, - 119.544481, - 120.138707, - 120.733071, - 121.327574, - 121.922216, - 122.516996, - 123.111914, - 123.706969, - 124.30216, - 124.897486, - 125.492946, - 126.08854, - 126.684266, - 127.280124, - 127.876113, - 128.472232, - 129.068481, - 129.664861, - 130.261369, - 130.858008, - 131.454775, - 132.051672, - 132.648697, - 133.245852, - 133.843135, - 134.440547, - 135.038087, - 135.635754, - 136.233549, - 136.831471, - 137.429518, - 138.027692, - 138.62599, - 139.224413, - 139.822959, - 140.421628, - 141.020419, - 141.619332, - 142.218366, - 142.817522, - 143.416798, - 144.016196, - 144.615715, - 145.215355, - 145.815118, - 146.415002, - 147.01501, - 147.615141, - 148.215396, - 148.815776, - 149.41628, - 150.01691, - 150.617666, - 151.218548, - 151.819557, - 152.420691, - 153.021952, - 153.623338, - 154.224851, - 154.826488, - 155.428251, - 156.030137, - 156.632148, - 157.234282, - 157.836539, - 158.438918, - 159.04142, - 159.644043, - 160.246788, - 160.849654, - 161.452642, - 162.05575, - 162.658978, - 163.262327, - 163.865796, - 164.469384, - 165.073092, - 165.676918, - 166.280862, - 166.884923, - 167.489102, - 168.093395, - 168.697804, - 169.302326, - 169.90696, - 170.511706, - 171.116561, - 171.721526, - 172.326598, - 172.931779, - 173.537066, - 174.14246, - 174.747959, - 175.353563, - 175.959272, - 176.565085, - 177.171002, - 177.777022, - 178.383145, - 178.989369, - 179.595694, - 180.202118, - 180.808641, - 181.415261, - 182.021975, - 182.628784, - 183.235684, - 183.842674, - 184.449752, - 185.056917, - 185.664167, - 186.271501, - 186.878919, - 187.486422, - 188.094008, - 188.701681, - 189.30944, - 189.917288, - 190.525228, - 191.133262, - 191.741393, - 192.349624, - 192.957957, - 193.566395, - 194.17494, - 194.783594, - 195.392357, - 196.001232, - 196.610216, - 197.219311, - 197.828516, - 198.437829, - 199.04725, - 199.656776, - 200.266406, - 200.87614, - 201.485975, - 202.09591, - 202.705946, - 203.316082, - 203.926318, - 204.536654, - 205.147092, - 205.757633, - 206.368278, - 206.979029, - 207.589887, - 208.200853, - 208.811929, - 209.423116, - 210.034413, - 210.645821, - 211.257341, - 211.86897, - 212.480708, - 213.092553, - 213.704503, - 214.316557, - 214.928711, - 215.540963, - 216.153311, - 216.765753, - 217.378286, - 217.990909, - 218.60362, - 219.216418, - 219.829303, - 220.442275, - 221.055333, - 221.668478, - 222.281712, - 222.895034, - 223.508446, - 224.12195, - 224.735545, - 225.349234, - 225.963018, - 226.576896, - 227.19087, - 227.804939, - 228.419103, - 229.033364, - 229.647719, - 230.262169, - 230.876714, - 231.491352, - 232.106084, - 232.72091, - 233.335828, - 233.95084, - 234.565946, - 235.181146, - 235.796442, - 236.411833, - 237.027322, - 237.64291, - 238.258598, - 238.874387, - 239.490279, - 240.106275, - 240.722375, - 241.338581, - 241.954894, - 242.571313, - 243.187839, - 243.804471, - 244.421208, - 245.038051, - 245.654998, - 246.272047, - 246.889199, - 247.506451, - 248.123802, - 248.741252, - 249.358798, - 249.976441, - 250.594179, - 251.212011, - 251.829938, - 252.447958, - 253.066072, - 253.684279, - 254.30258, - 254.920973, - 255.53946, - 256.158038, - 256.77671, - 257.395473, - 258.014329, - 258.633276, - 259.252314, - 259.871444, - 260.490663, - 261.109972, - 261.72937, - 262.348856, - 262.96843, - 263.588091, - 264.207837, - 264.82767, - 265.447589, - 266.067594, - 266.687684, - 267.30786, - 267.928123, - 268.548473, - 269.168911, - 269.789437, - 270.410053, - 271.030758, - 271.651555, - 272.272443, - 272.893423, - 273.514496, - 274.135661, - 274.75692, - 275.378272, - 275.999717, - 276.621254, - 277.242884, - 277.864605, - 278.486418, - 279.108321, - 279.730315, - 280.352397, - 280.974568, - 281.596828, - 282.219175, - 282.841609, - 283.464131, - 284.086739, - 284.709433, - 285.332214, - 285.955081, - 286.578033, - 287.201072, - 287.824195, - 288.447404, - 289.070697, - 289.694075, - 290.317536, - 290.941079, - 291.564705, - 292.188411, - 292.812198, - 293.436065, - 294.060009, - 294.684031, - 295.30813, - 295.932304, - 296.556552, - 297.180874, - 297.805269, - 298.429736, - 299.054274, - 299.678881, - 300.303557, - 300.928301, - 301.553112, - 302.177987, - 302.802926, - 303.427926, - 304.052987, - 304.678106, - 305.303283, - 305.928515, - 306.553803, - 307.179145, - 307.804541, - 308.429992, - 309.055498, - 309.681062, - 310.306684, - 310.932369, - 311.558118, - 312.183934, - 312.80982, - 313.435778, - 314.061812, - 314.687924, - 315.314115, - 315.940386, - 316.566738, - 317.193172, - 317.819686, - 318.44628, - 319.072953, - 319.699703, - 320.326528, - 320.953428, - 321.5804, - 322.207443, - 322.834556, - 323.461739, - 324.08899, - 324.716311, - 325.343701, - 325.971163, - 326.598697, - 327.226304, - 327.853986, - 328.481746, - 329.109583, - 329.737501, - 330.365499, - 330.993579, - 331.62174, - 332.249982, - 332.878305, - 333.506708, - 334.135188, - 334.763744, - 335.392374, - 336.021076, - 336.649846, - 337.278683, - 337.907585, - 338.536549, - 339.165574, - 339.794658, - 340.423802, - 341.053004, - 341.682264, - 342.311583, - 342.940961, - 343.5704, - 344.199901, - 344.829464, - 345.459092, - 346.088786, - 346.718546, - 347.348374, - 347.97827, - 348.608235, - 349.23827, - 349.868375, - 350.498549, - 351.128793, - 351.759106, - 352.389487, - 353.019937, - 353.650455, - 354.28104, - 354.911693, - 355.542414, - 356.173202, - 356.80406, - 357.434986, - 358.065983, - 358.697051, - 359.328192, - 359.959406, - 0.590696, - 1.222063, - 1.853507, - 2.485029, - 3.116631, - 3.748312, - 4.380073, - 5.011914, - 5.643835, - 6.275834, - 6.907912, - 7.540066, - 8.172297, - 8.804602, - 9.43698, - 10.069431, - 10.701952, - 11.334544, - 11.967204, - 12.599933, - 13.232729, - 13.865593, - 14.498523, - 15.13152, - 15.764584, - 16.397715, - 17.030912, - 17.664177, - 18.297508, - 18.930907, - 19.564373, - 20.197905, - 20.831505, - 21.46517, - 22.098902, - 22.732699, - 23.36656, - 24.000486, - 24.634476, - 25.268528, - 25.902644, - 26.536822, - 27.171062, - 27.805364, - 28.439728, - 29.074156, - 29.708646, - 30.3432, - 30.977819, - 31.612502, - 32.247252, - 32.882069, - 33.516954, - 34.151907, - 34.78693, - 35.422022, - 36.057185, - 36.692418, - 37.327723, - 37.963097, - 38.598542, - 39.234058, - 39.869643, - 40.505298, - 41.14102, - 41.776811, - 42.41267, - 43.048594, - 43.684585, - 44.320641, - 44.956762, - 45.592946, - 46.229195, - 46.865507, - 47.501882, - 48.138319, - 48.774819, - 49.411381, - 50.048004, - 50.684688, - 51.321433, - 51.958237, - 52.595101, - 53.232024, - 53.869005, - 54.506043, - 55.143137, - 55.780287, - 56.417491, - 57.054748, - 57.692057, - 58.329417, - 58.966827, - 59.604285, - 60.241789, - 60.879339, - 61.516933, - 62.154569, - 62.792244, - 63.429958, - 64.067708, - 64.705493, - 65.343312, - 65.981163, - 66.619045, - 67.256959, - 67.894904, - 68.532881, - 69.170891, - 69.808937, - 70.44702, - 71.085144, - 71.723312, - 72.361526, - 72.999791, - 73.638108, - 74.276482, - 74.914914, - 75.553406, - 76.19196, - 76.830576, - 77.469256, - 78.107997, - 78.746801, - 79.385664, - 80.024588, - 80.663568, - 81.302605, - 81.941696, - 82.580841, - 83.220038, - 83.859287, - 84.498589, - 85.137942, - 85.777349, - 86.416809, - 87.056325, - 87.695898, - 88.33553, - 88.975222, - 89.614975, - 90.254791, - 90.89467, - 91.534614, - 92.174621, - 92.814691, - 93.454823, - 94.095015, - 94.735266, - 95.375574, - 96.015935, - 96.656347, - 97.296807, - 97.937314, - 98.577864, - 99.218455, - 99.859086, - 100.499756, - 101.140463, - 101.781208, - 102.421989, - 103.062809, - 103.703667, - 104.344564, - 104.985502, - 105.626482, - 106.267505, - 106.908573, - 107.549686, - 108.190846, - 108.832053, - 109.473307, - 110.114609, - 110.755959, - 111.397357, - 112.038802, - 112.680295, - 113.321834, - 113.963419, - 114.605051, - 115.246729, - 115.888454, - 116.530225, - 117.172045, - 117.813913, - 118.455831, - 119.0978, - 119.739822, - 120.381899, - 121.024031, - 121.666221, - 122.308471, - 122.950781, - 123.593152, - 124.235586, - 124.878082, - 125.520642, - 126.163264, - 126.805948, - 127.448695, - 128.091501, - 128.734368, - 129.377292, - 130.020274, - 130.663311, - 131.306402, - 131.949546, - 132.592743, - 133.23599, - 133.879287, - 134.522635, - 135.166031, - 135.809477, - 136.452971, - 137.096515, - 137.740108, - 138.38375, - 139.027441, - 139.671182, - 140.314972, - 140.958811, - 141.602698, - 142.246634, - 142.890617, - 143.534648, - 144.178725, - 144.822848, - 145.467016, - 146.111228, - 146.755484, - 147.399784, - 148.044126, - 148.688512, - 149.33294, - 149.977412, - 150.621927, - 151.266487, - 151.911091, - 152.555741, - 153.200437, - 153.84518, - 154.489972, - 155.134813, - 155.779704, - 156.424645, - 157.069638, - 157.714681, - 158.359777, - 159.004924, - 159.650123, - 160.295373, - 160.940674, - 161.586026, - 162.231428, - 162.87688, - 163.522381, - 164.16793, - 164.813527, - 165.459171, - 166.104863, - 166.750601, - 167.396385, - 168.042215, - 168.68809, - 169.334011, - 169.979976, - 170.625986, - 171.27204, - 171.918138, - 172.56428, - 173.210464, - 173.85669, - 174.502958, - 175.149267, - 175.795615, - 176.442002, - 177.088427, - 177.734888, - 178.381384, - 179.027914, - 179.674476, - 180.321068, - 180.967689, - 181.614336, - 182.261008, - 182.907702, - 183.554418, - 184.201152, - 184.847903, - 185.49467, - 186.141452, - 186.788247, - 187.435057, - 188.08188, - 188.728719, - 189.375574, - 190.022448, - 190.669344, - 191.316263, - 191.963211, - 192.610189, - 193.257201, - 193.904251, - 194.551341, - 195.198473, - 195.84565, - 196.492873, - 197.140143, - 197.787459, - 198.434821, - 199.082229, - 199.729682, - 200.377178, - 201.024715, - 201.672292, - 202.319908, - 202.967562, - 203.615253, - 204.26298, - 204.910745, - 205.558547, - 206.206387, - 206.854267, - 207.502189, - 208.150154, - 208.798163, - 209.446219, - 210.094323, - 210.742476, - 211.390679, - 212.038932, - 212.687235, - 213.335587, - 213.983988, - 214.632435, - 215.280926, - 215.929459, - 216.578032, - 217.226641, - 217.875283, - 218.523957, - 219.17266, - 219.82139, - 220.470145, - 221.118923, - 221.767725, - 222.416551, - 223.065399, - 223.714271, - 224.363167, - 225.01209, - 225.66104, - 226.310018, - 226.959027, - 227.608067, - 228.257139, - 228.906245, - 229.555386, - 230.204561, - 230.853771, - 231.503017, - 232.152298, - 232.801614, - 233.450964, - 234.100349, - 234.749768, - 235.399221, - 236.048707, - 236.698229, - 237.347785, - 237.997376, - 238.647004, - 239.29667, - 239.946375, - 240.596121, - 241.245909, - 241.895741, - 242.545618, - 243.195543, - 243.845515, - 244.495536, - 245.145607, - 245.795729, - 246.4459, - 247.096122, - 247.746394, - 248.396714, - 249.047082, - 249.697497, - 250.347957, - 250.998461, - 251.649007, - 252.299595, - 252.950223, - 253.60089, - 254.251594, - 254.902336, - 255.553114, - 256.203928, - 256.854779, - 257.505664, - 258.156585, - 258.807542, - 259.458535, - 260.109563, - 260.760626, - 261.411725, - 262.06286, - 262.714029, - 263.365233, - 264.016471, - 264.667743, - 265.319048, - 265.970386, - 266.621756, - 267.273157, - 267.924589, - 268.576053, - 269.227547, - 269.879072, - 270.530628, - 271.182215, - 271.833835, - 272.485487, - 273.137174, - 273.788894, - 274.440651, - 275.092444, - 275.744275, - 276.396144, - 277.048053, - 277.700003, - 278.351993, - 279.004024, - 279.656097, - 280.308212, - 280.960368, - 281.612566, - 282.264805, - 282.917085, - 283.569405, - 284.221765, - 284.874164, - 285.526602, - 286.179078, - 286.831591, - 287.484141, - 288.136727, - 288.789349, - 289.442006, - 290.094698, - 290.747425, - 291.400185, - 292.05298, - 292.705807, - 293.358668, - 294.01156, - 294.664485, - 295.31744, - 295.970424, - 296.623438, - 297.27648, - 297.929548, - 298.582641, - 299.235758, - 299.888896, - 300.542054, - 301.195229, - 301.84842, - 302.501623, - 303.154837, - 303.80806, - 304.461288, - 305.114521, - 305.767756, - 306.420992, - 307.074228, - 307.727465, - 308.380703, - 309.033943, - 309.687187, - 310.340437, - 310.993696, - 311.646968, - 312.300256, - 312.953564, - 313.606895, - 314.260252, - 314.91364, - 315.567059, - 316.220512, - 316.874001, - 317.527525, - 318.181086, - 318.834682, - 319.488313, - 320.141976, - 320.795672, - 321.449398, - 322.103153, - 322.756935, - 323.410743, - 324.064578, - 324.718439, - 325.372327, - 326.026241, - 326.680184, - 327.334158, - 327.988163, - 328.642202, - 329.296277, - 329.95039, - 330.604542, - 331.258734, - 331.912966, - 332.56724, - 333.221554, - 333.875908, - 334.530301, - 335.184729, - 335.839191, - 336.493684, - 337.148205, - 337.802751, - 338.45732, - 339.111908, - 339.766513, - 340.421133, - 341.075767, - 341.730413, - 342.385071, - 343.03974, - 343.694422, - 344.349115, - 345.003823, - 345.658545, - 346.313283, - 346.968039, - 347.622814, - 348.277609, - 348.932426, - 349.587265, - 350.242127, - 350.897012, - 351.551921, - 352.206853, - 352.861809, - 353.516787, - 354.171789, - 354.826812, - 355.481858, - 356.136926, - 356.792016, - 357.447128, - 358.102264, - 358.757425, - 359.41261, - 0.067823, - 0.723064, - 1.378336, - 2.03364, - 2.688977, - 3.34435, - 3.99976, - 4.655209, - 5.310696, - 5.966224, - 6.621793, - 7.277402, - 7.933051, - 8.58874, - 9.244467, - 9.900233, - 10.556035, - 11.211872, - 11.867742, - 12.523645, - 13.179578, - 13.835541, - 14.491533, - 15.147552, - 15.803597, - 16.459669, - 17.115767, - 17.77189, - 18.428039, - 19.084213, - 19.740412, - 20.396638, - 21.052888, - 21.709165, - 22.365466, - 23.021793, - 23.678145, - 24.334521, - 24.990922, - 25.647346, - 26.303792, - 26.960261, - 27.616752, - 28.273263, - 28.929796, - 29.586349, - 30.242922, - 30.899516, - 31.55613, - 32.212766, - 32.869424, - 33.526104, - 34.182807, - 34.839535, - 35.496288, - 36.153068, - 36.809875, - 37.466711, - 38.123576, - 38.780471, - 39.437396, - 40.094353, - 40.751341, - 41.408361, - 42.065412, - 42.722495, - 43.379609, - 44.036753, - 44.693928, - 45.351132, - 46.008366, - 46.665628, - 47.322918, - 47.980236, - 48.637581, - 49.294952, - 49.952349, - 50.609772, - 51.26722, - 51.924694, - 52.582191, - 53.239713, - 53.897259, - 54.554828, - 55.21242, - 55.870034, - 56.527668, - 57.185324, - 57.842998, - 58.50069, - 59.158398, - 59.816121, - 60.473856, - 61.131602, - 61.789356, - 62.447115, - 63.104879, - 63.762643, - 64.420406, - 65.078166, - 65.735921, - 66.393669, - 67.05141, - 67.709143, - 68.36687, - 69.024591, - 69.682307, - 70.340023, - 70.99774, - 71.655462, - 72.313193, - 72.970936, - 73.628694, - 74.286473, - 74.944274, - 75.6021, - 76.259953, - 76.917834, - 77.575745, - 78.233685, - 78.891655, - 79.549652, - 80.207676, - 80.865726, - 81.523799, - 82.181895, - 82.840012, - 83.498149, - 84.156307, - 84.814483, - 85.47268, - 86.130898, - 86.789138, - 87.447401, - 88.10569, - 88.764007, - 89.422353, - 90.08073, - 90.73914, - 91.397584, - 92.056063, - 92.714576, - 93.373124, - 94.031704, - 94.690317, - 95.34896, - 96.00763, - 96.666324, - 97.32504, - 97.983774, - 98.642524, - 99.301287, - 99.96006, - 100.61884, - 101.277627, - 101.936419, - 102.595215, - 103.254015, - 103.912819, - 104.571628, - 105.230442, - 105.889264, - 106.548095, - 107.206935, - 107.865788, - 108.524653, - 109.183533, - 109.842428, - 110.501339, - 111.160266, - 111.819211, - 112.478173, - 113.137151, - 113.796147, - 114.455159, - 115.114187, - 115.773231, - 116.432292, - 117.091369, - 117.750463, - 118.409574, - 119.068704, - 119.727854, - 120.387026, - 121.046221, - 121.705441, - 122.364687, - 123.023963, - 123.683269, - 124.342607, - 125.001979, - 125.661385, - 126.320827, - 126.980305, - 127.639819, - 128.299369, - 128.958953, - 129.618572, - 130.278224, - 130.937908, - 131.597622, - 132.257365, - 132.917136, - 133.576932, - 134.236753, - 134.896598, - 135.556465, - 136.216354, - 136.876263, - 137.536193, - 138.196143, - 138.856114, - 139.516104, - 140.176113, - 140.836143, - 141.496192, - 142.156261, - 142.816349, - 143.476456, - 144.136582, - 144.796726, - 145.456887, - 146.117065, - 146.777259, - 0 - ], - "yaxis": "y2" - }, - { - "mode": "lines", - "name": " GenTq_(kN-m)", - "type": "scatter", - "xaxis": "x3", - "y": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0.000001, - 0.000001, - 0.000002, - 0.000003, - 0.000004, - 0.000006, - 0.000007, - 0.000009, - 0.00001, - 0.000011, - 0.000012, - 0.000012, - 0.000012, - 0.000012, - 0.000012, - 0.000011, - 0.00001, - 0.00001, - 0.000009, - 0.000008, - 0.000008, - 0.000008, - 0.000007, - 0.000008, - 0.000008, - 0.000008, - 0.000009, - 0.00001, - 0.000012, - 0.000013, - 0.000015, - 0.000017, - 0.000019, - 0.000022, - 0.000024, - 0.000027, - 0.000029, - 0.000032, - 0.000035, - 0.000037, - 0.00004, - 0.000043, - 0.000047, - 0.000051, - 0.000055, - 0.00006, - 0.000066, - 0.000073, - 0.000081, - 0.00009, - 0.0001, - 0.000112, - 0.000124, - 0.000138, - 0.000153, - 0.000169, - 0.000186, - 0.000203, - 0.000221, - 0.000238, - 0.000256, - 0.000273, - 0.00029, - 0.000306, - 0.000322, - 0.000336, - 0.00035, - 0.000363, - 0.000376, - 0.000388, - 0.000399, - 0.000411, - 0.000422, - 0.000433, - 0.000445, - 0.000457, - 0.000468, - 0.00048, - 0.000492, - 0.000504, - 0.000516, - 0.000528, - 0.000539, - 0.00055, - 0.000561, - 0.000571, - 0.00058, - 0.000589, - 0.000598, - 0.000606, - 0.000614, - 0.000622, - 0.00063, - 0.000638, - 0.000647, - 0.000657, - 0.000668, - 0.00068, - 0.000694, - 0.000709, - 0.000725, - 0.000743, - 0.000762, - 0.000783, - 0.000805, - 0.000828, - 0.000851, - 0.000875, - 0.0009, - 0.000924, - 0.000948, - 0.000972, - 0.000994, - 0.001016, - 0.001036, - 0.001056, - 0.001074, - 0.00109, - 0.001105, - 0.001119, - 0.001132, - 0.001143, - 0.001154, - 0.001163, - 0.001171, - 0.001178, - 0.001184, - 0.00119, - 0.001194, - 0.001197, - 0.0012, - 0.001201, - 0.001201, - 0.0012, - 0.001198, - 0.001195, - 0.001191, - 0.001187, - 0.001181, - 0.001176, - 0.001169, - 0.001163, - 0.001157, - 0.001152, - 0.001147, - 0.001143, - 0.00114, - 0.001139, - 0.001139, - 0.001141, - 0.001145, - 0.001151, - 0.001159, - 0.001169, - 0.001181, - 0.001195, - 0.001211, - 0.001228, - 0.001248, - 0.001269, - 0.001291, - 0.001315, - 0.00134, - 0.001366, - 0.001392, - 0.001419, - 0.001447, - 0.001476, - 0.001505, - 0.001534, - 0.001563, - 0.001593, - 0.001623, - 0.001653, - 0.001683, - 0.001712, - 0.001742, - 0.001772, - 0.001801, - 0.00183, - 0.001858, - 0.001886, - 0.001913, - 0.001939, - 0.001964, - 0.001987, - 0.00201, - 0.002032, - 0.002053, - 0.002072, - 0.002091, - 0.002109, - 0.002126, - 0.002143, - 0.002159, - 0.002176, - 0.002192, - 0.00221, - 0.002227, - 0.002246, - 0.002266, - 0.002287, - 0.00231, - 0.002334, - 0.002359, - 0.002386, - 0.002415, - 0.002446, - 0.002479, - 0.002513, - 0.002548, - 0.002585, - 0.002624, - 0.002664, - 0.002705, - 0.002747, - 0.00279, - 0.002835, - 0.00288, - 0.002926, - 0.002973, - 0.00302, - 0.003068, - 0.003116, - 0.003165, - 0.003213, - 0.003262, - 0.003311, - 0.003359, - 0.003408, - 0.003455, - 0.003502, - 0.003547, - 0.003592, - 0.003635, - 0.003677, - 0.003717, - 0.003755, - 0.003792, - 0.003826, - 0.003859, - 0.003889, - 0.003918, - 0.003945, - 0.003971, - 0.003994, - 0.004016, - 0.004037, - 0.004057, - 0.004076, - 0.004093, - 0.004111, - 0.004127, - 0.004144, - 0.00416, - 0.004176, - 0.004192, - 0.004208, - 0.004224, - 0.00424, - 0.004257, - 0.004274, - 0.004291, - 0.004309, - 0.004328, - 0.004347, - 0.004366, - 0.004386, - 0.004406, - 0.004428, - 0.00445, - 0.004472, - 0.004496, - 0.00452, - 0.004545, - 0.004571, - 0.004597, - 0.004625, - 0.004653, - 0.004681, - 0.00471, - 0.00474, - 0.00477, - 0.0048, - 0.00483, - 0.00486, - 0.004891, - 0.004921, - 0.00495, - 0.00498, - 0.005008, - 0.005037, - 0.005064, - 0.005092, - 0.005118, - 0.005144, - 0.005169, - 0.005194, - 0.005218, - 0.005242, - 0.005265, - 0.005287, - 0.00531, - 0.005332, - 0.005353, - 0.005375, - 0.005396, - 0.005417, - 0.005438, - 0.005459, - 0.00548, - 0.005501, - 0.005523, - 0.005544, - 0.005566, - 0.005588, - 0.005611, - 0.005635, - 0.005659, - 0.005684, - 0.00571, - 0.005737, - 0.005765, - 0.005794, - 0.005825, - 0.005857, - 0.005891, - 0.005926, - 0.005964, - 0.006002, - 0.006043, - 0.006086, - 0.00613, - 0.006176, - 0.006224, - 0.006274, - 0.006325, - 0.006378, - 0.006433, - 0.006489, - 0.006547, - 0.006605, - 0.006666, - 0.006727, - 0.006789, - 0.006852, - 0.006916, - 0.006981, - 0.007046, - 0.007112, - 0.007178, - 0.007244, - 0.007311, - 0.007377, - 0.007443, - 0.007509, - 0.007574, - 0.007638, - 0.007702, - 0.007764, - 0.007826, - 0.007886, - 0.007945, - 0.008002, - 0.008058, - 0.008112, - 0.008165, - 0.008215, - 0.008265, - 0.008312, - 0.008358, - 0.008402, - 0.008445, - 0.008487, - 0.008527, - 0.008567, - 0.008605, - 0.008643, - 0.00868, - 0.008717, - 0.008753, - 0.00879, - 0.008826, - 0.008862, - 0.008899, - 0.008937, - 0.008974, - 0.009013, - 0.009052, - 0.009092, - 0.009133, - 0.009175, - 0.009218, - 0.009262, - 0.009308, - 0.009354, - 0.009401, - 0.009449, - 0.009499, - 0.009549, - 0.0096, - 0.009652, - 0.009705, - 0.009758, - 0.009811, - 0.009865, - 0.009919, - 0.009973, - 0.010026, - 0.01008, - 0.010132, - 0.010184, - 0.010235, - 0.010284, - 0.010332, - 0.010379, - 0.010425, - 0.010468, - 0.01051, - 0.01055, - 0.010588, - 0.010625, - 0.010659, - 0.010692, - 0.010723, - 0.010752, - 0.010779, - 0.010806, - 0.01083, - 0.010854, - 0.010877, - 0.010899, - 0.01092, - 0.010941, - 0.010962, - 0.010983, - 0.011004, - 0.011026, - 0.011048, - 0.011072, - 0.011096, - 0.011123, - 0.01115, - 0.01118, - 0.011211, - 0.011245, - 0.01128, - 0.011318, - 0.011359, - 0.011402, - 0.011447, - 0.011495, - 0.011546, - 0.011599, - 0.011655, - 0.011713, - 0.011773, - 0.011835, - 0.011899, - 0.011966, - 0.012033, - 0.012102, - 0.012173, - 0.012244, - 0.012316, - 0.012388, - 0.01246, - 0.012533, - 0.012605, - 0.012677, - 0.012748, - 0.012819, - 0.012888, - 0.012957, - 0.013024, - 0.01309, - 0.013154, - 0.013218, - 0.013279, - 0.01334, - 0.013399, - 0.013456, - 0.013513, - 0.013568, - 0.013622, - 0.013676, - 0.013728, - 0.01378, - 0.013832, - 0.013883, - 0.013934, - 0.013986, - 0.014038, - 0.01409, - 0.014143, - 0.014197, - 0.014253, - 0.014309, - 0.014368, - 0.014427, - 0.014489, - 0.014553, - 0.014618, - 0.014686, - 0.014756, - 0.014828, - 0.014902, - 0.014979, - 0.015057, - 0.015137, - 0.01522, - 0.015304, - 0.015389, - 0.015477, - 0.015565, - 0.015654, - 0.015744, - 0.015835, - 0.015926, - 0.016017, - 0.016108, - 0.016198, - 0.016288, - 0.016377, - 0.016465, - 0.016551, - 0.016636, - 0.01672, - 0.016801, - 0.01688, - 0.016958, - 0.017032, - 0.017105, - 0.017175, - 0.017243, - 0.017308, - 0.017371, - 0.017432, - 0.01749, - 0.017546, - 0.0176, - 0.017652, - 0.017702, - 0.017751, - 0.017798, - 0.017843, - 0.017888, - 0.017931, - 0.017974, - 0.018016, - 0.018058, - 0.0181, - 0.018142, - 0.018184, - 0.018226, - 0.018269, - 0.018313, - 0.018357, - 0.018403, - 0.018449, - 0.018496, - 0.018545, - 0.018594, - 0.018645, - 0.018697, - 0.01875, - 0.018805, - 0.01886, - 0.018917, - 0.018974, - 0.019033, - 0.019092, - 0.019153, - 0.019214, - 0.019275, - 0.019338, - 0.0194, - 0.019463, - 0.019527, - 0.01959, - 0.019654, - 0.019717, - 0.019781, - 0.019844, - 0.019908, - 0.019971, - 0.020033, - 0.020096, - 0.020158, - 0.020219, - 0.020281, - 0.020342, - 0.020402, - 0.020463, - 0.020523, - 0.020583, - 0.020642, - 0.020702, - 0.020762, - 0.020821, - 0.020881, - 0.020941, - 0.021001, - 0.021062, - 0.021123, - 0.021184, - 0.021246, - 0.021309, - 0.021372, - 0.021436, - 0.021501, - 0.021567, - 0.021634, - 0.021702, - 0.021771, - 0.021841, - 0.021912, - 0.021984, - 0.022058, - 0.022132, - 0.022208, - 0.022285, - 0.022363, - 0.022442, - 0.022522, - 0.022603, - 0.022686, - 0.022769, - 0.022853, - 0.022939, - 0.023025, - 0.023112, - 0.0232, - 0.023289, - 0.023379, - 0.023469, - 0.023559, - 0.02365, - 0.023742, - 0.023833, - 0.023925, - 0.024017, - 0.02411, - 0.024202, - 0.024294, - 0.024385, - 0.024477, - 0.024568, - 0.024659, - 0.024749, - 0.024839, - 0.024928, - 0.025017, - 0.025105, - 0.025192, - 0.025278, - 0.025363, - 0.025448, - 0.025532, - 0.025614, - 0.025696, - 0.025777, - 0.025857, - 0.025936, - 0.026014, - 0.026091, - 0.026168, - 0.026243, - 0.026318, - 0.026392, - 0.026466, - 0.026539, - 0.026612, - 0.026684, - 0.026756, - 0.026828, - 0.0269, - 0.026972, - 0.027044, - 0.027117, - 0.02719, - 0.027263, - 0.027337, - 0.027412, - 0.027487, - 0.027563, - 0.027641, - 0.027719, - 0.027798, - 0.027877, - 0.027958, - 0.02804, - 0.028123, - 0.028207, - 0.028291, - 0.028377, - 0.028463, - 0.02855, - 0.028637, - 0.028725, - 0.028813, - 0.028901, - 0.028989, - 0.029077, - 0.029165, - 0.029252, - 0.029339, - 0.029425, - 0.029509, - 0.029593, - 0.029676, - 0.029758, - 0.029838, - 0.029916, - 0.029993, - 0.030068, - 0.030142, - 0.030214, - 0.030284, - 0.030353, - 0.03042, - 0.030485, - 0.030549, - 0.030611, - 0.030673, - 0.030733, - 0.030792, - 0.03085, - 0.030908, - 0.030965, - 0.031022, - 0.031079, - 0.031136, - 0.031193, - 0.031251, - 0.031309, - 0.031369, - 0.031429, - 0.031491, - 0.031555, - 0.03162, - 0.031687, - 0.031756, - 0.031826, - 0.0319, - 0.031975, - 0.032052, - 0.032132, - 0.032215, - 0.032299, - 0.032386, - 0.032476, - 0.032567, - 0.032661, - 0.032757, - 0.032854, - 0.032954, - 0.033055, - 0.033158, - 0.033261, - 0.033367, - 0.033473, - 0.033579, - 0.033687, - 0.033794, - 0.033902, - 0.03401, - 0.034118, - 0.034225, - 0.034332, - 0.034439, - 0.034545, - 0.03465, - 0.034754, - 0.034858, - 0.03496, - 0.035062, - 0.035163, - 0.035263, - 0.035362, - 0.035461, - 0.035559, - 0.035656, - 0.035753, - 0.03585, - 0.035946, - 0.036043, - 0.03614, - 0.036237, - 0.036334, - 0.036432, - 0.03653, - 0.03663, - 0.03673, - 0.036831, - 0.036933, - 0.037036, - 0.03714, - 0.037246, - 0.037352, - 0.03746, - 0.037569, - 0.037679, - 0.03779, - 0.037902, - 0.038014, - 0.038128, - 0.038242, - 0.038357, - 0.038472, - 0.038587, - 0.038702, - 0.038817, - 0.038932, - 0.039046, - 0.03916, - 0.039272, - 0.039384, - 0.039494, - 0.039604, - 0.039711, - 0.039817, - 0.039921, - 0.040024, - 0.040125, - 0.040223, - 0.04032, - 0.040415, - 0.040508, - 0.040598, - 0.040687, - 0.040774, - 0.04086, - 0.040943, - 0.041025, - 0.041105, - 0.041185, - 0.041263, - 0.04134, - 0.041416, - 0.041491, - 0.041566, - 0.041641, - 0.041716, - 0.041791, - 0.041866, - 0.041942, - 0.042018, - 0.042096, - 0.042174, - 0.042254, - 0.042335, - 0.042417, - 0.042501, - 0.042586, - 0.042674, - 0.042763, - 0.042853, - 0.042946, - 0.04304, - 0.043136, - 0.043234, - 0.043333, - 0.043434, - 0.043537, - 0.043641, - 0.043746, - 0.043852, - 0.04396, - 0.044068, - 0.044177, - 0.044287, - 0.044397, - 0.044508, - 0.04462, - 0.044731, - 0.044842, - 0.044954, - 0.045065, - 0.045176, - 0.045287, - 0.045397, - 0.045506, - 0.045616, - 0.045724, - 0.045832, - 0.045938, - 0.046045, - 0.04615, - 0.046254, - 0.046358, - 0.046461, - 0.046563, - 0.046665, - 0.046766, - 0.046866, - 0.046965, - 0.047064, - 0.047163, - 0.047261, - 0.047359, - 0.047457, - 0.047554, - 0.047652, - 0.047749, - 0.047846, - 0.047944, - 0.048041, - 0.048139, - 0.048237, - 0.048336, - 0.048435, - 0.048534, - 0.048634, - 0.048734, - 0.048835, - 0.048937, - 0.049039, - 0.049142, - 0.049246, - 0.04935, - 0.049455, - 0.049561, - 0.049668, - 0.049776, - 0.049884, - 0.049993, - 0.050103, - 0.050214, - 0.050326, - 0.050438, - 0.050552, - 0.050665, - 0.05078, - 0.050895, - 0.051011, - 0.051128, - 0.051245, - 0.051363, - 0.051482, - 0.0516, - 0.05172, - 0.05184, - 0.05196, - 0.05208, - 0.052201, - 0.052323, - 0.052444, - 0.052566, - 0.052688, - 0.05281, - 0.052933, - 0.053055, - 0.053178, - 0.0533, - 0.053423, - 0.053545, - 0.053668, - 0.05379, - 0.053913, - 0.054035, - 0.054157, - 0.054279, - 0.0544, - 0.054522, - 0.054643, - 0.054764, - 0.054885, - 0.055006, - 0.055127, - 0.055247, - 0.055367, - 0.055487, - 0.055606, - 0.055726, - 0.055845, - 0.055963, - 0.056082, - 0.0562, - 0.056318, - 0.056435, - 0.056552, - 0.056669, - 0.056786, - 0.056901, - 0.057017, - 0.057132, - 0.057247, - 0.057361, - 0.057474, - 0.057587, - 0.057699, - 0.057811, - 0.057922, - 0.058032, - 0.058142, - 0.05825, - 0.058358, - 0.058465, - 0.058571, - 0.058677, - 0.058781, - 0.058884, - 0.058987, - 0.059088, - 0.059189, - 0.059288, - 0.059387, - 0.059484, - 0.059581, - 0.059677, - 0.059772, - 0.059866, - 0.059959, - 0.060052, - 0.060144, - 0.060236, - 0.060327, - 0.060419, - 0.06051, - 0.060601, - 0.060692, - 0.060784, - 0.060876, - 0.060969, - 0.061063, - 0.061157, - 0.061253, - 0.06135, - 0.061449, - 0.061549, - 0.061651, - 0.061754, - 0.06186, - 0.061968, - 0.062078, - 0.06219, - 0.062305, - 0.062422, - 0.062542, - 0.062664, - 0.062789, - 0.062916, - 0.063046, - 0.063178, - 0.063312, - 0.063449, - 0.063588, - 0.063729, - 0.063872, - 0.064017, - 0.064164, - 0.064312, - 0.064462, - 0.064613, - 0.064765, - 0.064918, - 0.065072, - 0.065226, - 0.065381, - 0.065535, - 0.06569, - 0.065845, - 0.065999, - 0.066152, - 0.066305, - 0.066457, - 0.066608, - 0.066758, - 0.066906, - 0.067053, - 0.067199, - 0.067343, - 0.067486, - 0.067626, - 0.067765, - 0.067903, - 0.068038, - 0.068172, - 0.068304, - 0.068435, - 0.068564, - 0.068692, - 0.068818, - 0.068943, - 0.069066, - 0.069189, - 0.069311, - 0.069432, - 0.069552, - 0.069672, - 0.069791, - 0.06991, - 0.070029, - 0.070147, - 0.070266, - 0.070385, - 0.070504, - 0.070623, - 0.070743, - 0.070863, - 0.070984, - 0.071105, - 0.071226, - 0.071348, - 0.071471, - 0.071594, - 0.071718, - 0.071842, - 0.071967, - 0.072092, - 0.072218, - 0.072344, - 0.07247, - 0.072596, - 0.072723, - 0.07285, - 0.072978, - 0.073105, - 0.073233, - 0.073361, - 0.073489, - 0.073617, - 0.073745, - 0.073874, - 0.074002, - 0.074131, - 0.07426, - 0.074389, - 0.074519, - 0.074648, - 0.074778, - 0.074909, - 0.07504, - 0.075171, - 0.075303, - 0.075435, - 0.075568, - 0.075702, - 0.075837, - 0.075973, - 0.076109, - 0.076247, - 0.076385, - 0.076525, - 0.076665, - 0.076807, - 0.07695, - 0.077094, - 0.077239, - 0.077385, - 0.077532, - 0.077681, - 0.07783, - 0.077979, - 0.07813, - 0.078281, - 0.078433, - 0.078585, - 0.078738, - 0.07889, - 0.079043, - 0.079196, - 0.079348, - 0.0795, - 0.079651, - 0.079801, - 0.079951, - 0.0801, - 0.080247, - 0.080393, - 0.080538, - 0.080681, - 0.080823, - 0.080962, - 0.0811, - 0.081236, - 0.081371, - 0.081503, - 0.081633, - 0.081762, - 0.081888, - 0.082013, - 0.082136, - 0.082257, - 0.082377, - 0.082495, - 0.082612, - 0.082727, - 0.082842, - 0.082955, - 0.083068, - 0.08318, - 0.083292, - 0.083404, - 0.083516, - 0.083628, - 0.08374, - 0.083853, - 0.083967, - 0.084081, - 0.084197, - 0.084314, - 0.084432, - 0.084552, - 0.084674, - 0.084797, - 0.084922, - 0.08505, - 0.085179, - 0.085311, - 0.085445, - 0.085581, - 0.085719, - 0.08586, - 0.086003, - 0.086148, - 0.086296, - 0.086446, - 0.086598, - 0.086752, - 0.086908, - 0.087066, - 0.087227, - 0.087389, - 0.087552, - 0.087718, - 0.087884, - 0.088053, - 0.088222, - 0.088393, - 0.088565, - 0.088737, - 0.088911, - 0.089085, - 0.089259, - 0.089435, - 0.08961, - 0.089786, - 0.089961, - 0.090137, - 0.090312, - 0.090487, - 0.090662, - 0.090836, - 0.09101, - 0.091183, - 0.091355, - 0.091526, - 0.091696, - 0.091866, - 0.092033, - 0.0922, - 0.092365, - 0.092529, - 0.092692, - 0.092853, - 0.093012, - 0.09317, - 0.093325, - 0.093479, - 0.093631, - 0.093782, - 0.09393, - 0.094076, - 0.094221, - 0.094363, - 0.094504, - 0.094643, - 0.094779, - 0.094914, - 0.095047, - 0.095179, - 0.095308, - 0.095436, - 0.095563, - 0.095688, - 0.095811, - 0.095934, - 0.096055, - 0.096175, - 0.096294, - 0.096412, - 0.09653, - 0.096647, - 0.096763, - 0.096879, - 0.096995, - 0.097112, - 0.097228, - 0.097344, - 0.097461, - 0.097578, - 0.097696, - 0.097814, - 0.097934, - 0.098055, - 0.098176, - 0.098299, - 0.098424, - 0.09855, - 0.098677, - 0.098806, - 0.098937, - 0.09907, - 0.099204, - 0.09934, - 0.099479, - 0.099619, - 0.099762, - 0.099906, - 0.100053, - 0.100201, - 0.100352, - 0.100505, - 0.10066, - 0.100817, - 0.100975, - 0.101136, - 0.101299, - 0.101464, - 0.10163, - 0.101799, - 0.101969, - 0.102141, - 0.102314, - 0.102489, - 0.102666, - 0.102844, - 0.103023, - 0.103204, - 0.103386, - 0.103569, - 0.103753, - 0.103938, - 0.104124, - 0.10431, - 0.104497, - 0.104685, - 0.104873, - 0.105061, - 0.10525, - 0.105438, - 0.105626, - 0.105814, - 0.106001, - 0.106187, - 0.106373, - 0.106557, - 0.106741, - 0.106923, - 0.107104, - 0.107283, - 0.10746, - 0.107635, - 0.107809, - 0.10798, - 0.108149, - 0.108316, - 0.10848, - 0.108643, - 0.108802, - 0.108959, - 0.109114, - 0.109266, - 0.109416, - 0.109563, - 0.109708, - 0.109851, - 0.109992, - 0.11013, - 0.110267, - 0.110401, - 0.110535, - 0.110666, - 0.110797, - 0.110926, - 0.111055, - 0.111182, - 0.11131, - 0.111437, - 0.111564, - 0.111692, - 0.11182, - 0.111948, - 0.112078, - 0.112208, - 0.112341, - 0.112474, - 0.11261, - 0.112747, - 0.112887, - 0.113028, - 0.113173, - 0.11332, - 0.113469, - 0.113621, - 0.113776, - 0.113934, - 0.114095, - 0.114259, - 0.114426, - 0.114596, - 0.114769, - 0.114944, - 0.115122, - 0.115303, - 0.115487, - 0.115673, - 0.115861, - 0.116051, - 0.116244, - 0.116438, - 0.116634, - 0.116831, - 0.11703, - 0.11723, - 0.117431, - 0.117632, - 0.117835, - 0.118037, - 0.11824, - 0.118443, - 0.118645, - 0.118848, - 0.11905, - 0.119251, - 0.119452, - 0.119652, - 0.119851, - 0.120049, - 0.120246, - 0.120441, - 0.120635, - 0.120828, - 0.121019, - 0.121209, - 0.121397, - 0.121584, - 0.121768, - 0.121951, - 0.122133, - 0.122312, - 0.12249, - 0.122666, - 0.12284, - 0.123013, - 0.123183, - 0.123352, - 0.123519, - 0.123684, - 0.123846, - 0.124007, - 0.124167, - 0.124324, - 0.124479, - 0.124633, - 0.124784, - 0.124934, - 0.125083, - 0.125229, - 0.125374, - 0.125518, - 0.12566, - 0.125801, - 0.12594, - 0.126079, - 0.126217, - 0.126353, - 0.126489, - 0.126625, - 0.12676, - 0.126895, - 0.12703, - 0.127165, - 0.1273, - 0.127436, - 0.127572, - 0.127709, - 0.127847, - 0.127987, - 0.128127, - 0.128269, - 0.128413, - 0.128559, - 0.128707, - 0.128857, - 0.12901, - 0.129165, - 0.129323, - 0.129484, - 0.129648, - 0.129815, - 0.129985, - 0.130158, - 0.130335, - 0.130515, - 0.130698, - 0.130885, - 0.131075, - 0.131269, - 0.131466, - 0.131666, - 0.131869, - 0.132075, - 0.132285, - 0.132497, - 0.132712, - 0.132929, - 0.133148, - 0.13337, - 0.133593, - 0.133818, - 0.134045, - 0.134273, - 0.134501, - 0.134731, - 0.13496, - 0.13519, - 0.13542, - 0.135649, - 0.135878, - 0.136106, - 0.136333, - 0.136559, - 0.136783, - 0.137005, - 0.137226, - 0.137444, - 0.13766, - 0.137874, - 0.138085, - 0.138293, - 0.138498, - 0.138701, - 0.1389, - 0.139096, - 0.139288, - 0.139478, - 0.139664, - 0.139846, - 0.140025, - 0.140201, - 0.140373, - 0.140542, - 0.140708, - 0.14087, - 0.14103, - 0.141186, - 0.14134, - 0.14149, - 0.141638, - 0.141784, - 0.141927, - 0.142068, - 0.142207, - 0.142345, - 0.14248, - 0.142615, - 0.142748, - 0.142881, - 0.143013, - 0.143144, - 0.143275, - 0.143407, - 0.143538, - 0.14367, - 0.143803, - 0.143937, - 0.144072, - 0.144208, - 0.144346, - 0.144486, - 0.144627, - 0.144771, - 0.144917, - 0.145066, - 0.145217, - 0.145371, - 0.145528, - 0.145688, - 0.145851, - 0.146017, - 0.146187, - 0.14636, - 0.146536, - 0.146716, - 0.146899, - 0.147086, - 0.147276, - 0.14747, - 0.147667, - 0.147867, - 0.148071, - 0.148277, - 0.148487, - 0.1487, - 0.148915, - 0.149133, - 0.149353, - 0.149576, - 0.1498, - 0.150027, - 0.150255, - 0.150485, - 0.150716, - 0.150948, - 0.151181, - 0.151415, - 0.151649, - 0.151884, - 0.152118, - 0.152352, - 0.152586, - 0.152819, - 0.153051, - 0.153282, - 0.153512, - 0.153741, - 0.153967, - 0.154192, - 0.154415, - 0.154636, - 0.154854, - 0.15507, - 0.155283, - 0.155494, - 0.155702, - 0.155907, - 0.156108, - 0.156307, - 0.156503, - 0.156696, - 0.156886, - 0.157072, - 0.157256, - 0.157436, - 0.157614, - 0.157789, - 0.15796, - 0.158129, - 0.158296, - 0.15846, - 0.158621, - 0.15878, - 0.158937, - 0.159092, - 0.159245, - 0.159397, - 0.159546, - 0.159695, - 0.159843, - 0.159989, - 0.160135, - 0.16028, - 0.160426, - 0.160571, - 0.160716, - 0.160862, - 0.161009, - 0.161156, - 0.161305, - 0.161455, - 0.161607, - 0.16176, - 0.161915, - 0.162073, - 0.162233, - 0.162395, - 0.162561, - 0.162729, - 0.1629, - 0.163075, - 0.163253, - 0.163434, - 0.163619, - 0.163808, - 0.164, - 0.164197, - 0.164397, - 0.164601, - 0.164809, - 0.165021, - 0.165237, - 0.165457, - 0.165681, - 0.165908, - 0.166139, - 0.166374, - 0.166611, - 0.166852, - 0.167096, - 0.167343, - 0.167592, - 0.167844, - 0.168098, - 0.168353, - 0.16861, - 0.168869, - 0.169128, - 0.169389, - 0.169649, - 0.16991, - 0.170171, - 0.170431, - 0.17069, - 0.170949, - 0.171206, - 0.171461, - 0.171715, - 0.171967, - 0.172216, - 0.172462, - 0.172706, - 0.172946, - 0.173184, - 0.173417, - 0.173647, - 0.173874, - 0.174096, - 0.174314, - 0.174529, - 0.174739, - 0.174944, - 0.175146, - 0.175343, - 0.175536, - 0.175725, - 0.17591, - 0.17609, - 0.176267, - 0.17644, - 0.17661, - 0.176776, - 0.176939, - 0.1771, - 0.177257, - 0.177412, - 0.177565, - 0.177716, - 0.177865, - 0.178013, - 0.178159, - 0.178305, - 0.17845, - 0.178595, - 0.17874, - 0.178885, - 0.179031, - 0.179178, - 0.179326, - 0.179475, - 0.179626, - 0.179779, - 0.179934, - 0.180091, - 0.180251, - 0.180414, - 0.180579, - 0.180748, - 0.180921, - 0.181097, - 0.181276, - 0.181459, - 0.181647, - 0.181838, - 0.182033, - 0.182233, - 0.182436, - 0.182644, - 0.182856, - 0.183072, - 0.183293, - 0.183517, - 0.183745, - 0.183978, - 0.184214, - 0.184454, - 0.184698, - 0.184945, - 0.185196, - 0.18545, - 0.185707, - 0.185967, - 0.186229, - 0.186494, - 0.186762, - 0.187031, - 0.187302, - 0.187575, - 0.187849, - 0.188124, - 0.1884, - 0.188676, - 0.188953, - 0.189229, - 0.189506, - 0.189781, - 0.190056, - 0.19033, - 0.190602, - 0.190873, - 0.191142, - 0.191408, - 0.191672, - 0.191933, - 0.192192, - 0.192447, - 0.192699, - 0.192947, - 0.193192, - 0.193432, - 0.193669, - 0.193902, - 0.19413, - 0.194354, - 0.194573, - 0.194788, - 0.194998, - 0.195204, - 0.195405, - 0.195602, - 0.195794, - 0.195982, - 0.196165, - 0.196345, - 0.196521, - 0.196692, - 0.196861, - 0.197025, - 0.197187, - 0.197346, - 0.197502, - 0.197656, - 0.197808, - 0.197958, - 0.198107, - 0.198255, - 0.198402, - 0.198548, - 0.198695, - 0.198842, - 0.198989, - 0.199138, - 0.199287, - 0.199439, - 0.199592, - 0.199747, - 0.199905, - 0.200066, - 0.20023, - 0.200398, - 0.200569, - 0.200743, - 0.200922, - 0.201105, - 0.201293, - 0.201485, - 0.201681, - 0.201883, - 0.202089, - 0.2023, - 0.202516, - 0.202737, - 0.202962, - 0.203193, - 0.203428, - 0.203668, - 0.203912, - 0.204161, - 0.204414, - 0.20467, - 0.204931, - 0.205195, - 0.205463, - 0.205734, - 0.206008, - 0.206284, - 0.206563, - 0.206844, - 0.207126, - 0.20741, - 0.207695, - 0.207981, - 0.208268, - 0.208555, - 0.208841, - 0.209127, - 0.209413, - 0.209698, - 0.209981, - 0.210262, - 0.210542, - 0.21082, - 0.211095, - 0.211367, - 0.211636, - 0.211902, - 0.212165, - 0.212424, - 0.212679, - 0.21293, - 0.213177, - 0.21342, - 0.213658, - 0.213892, - 0.214121, - 0.214346, - 0.214566, - 0.214782, - 0.214993, - 0.215199, - 0.215401, - 0.215598, - 0.215791, - 0.21598, - 0.216165, - 0.216345, - 0.216523, - 0.216696, - 0.216867, - 0.217034, - 0.217199, - 0.217361, - 0.21752, - 0.217678, - 0.217835, - 0.217989, - 0.218143, - 0.218297, - 0.21845, - 0.218603, - 0.218757, - 0.218911, - 0.219066, - 0.219223, - 0.219381, - 0.219542, - 0.219705, - 0.219871, - 0.220039, - 0.220211, - 0.220387, - 0.220566, - 0.220749, - 0.220936, - 0.221128, - 0.221324, - 0.221525, - 0.221731, - 0.221942, - 0.222158, - 0.222379, - 0.222606, - 0.222837, - 0.223074, - 0.223316, - 0.223563, - 0.223815, - 0.224071, - 0.224333, - 0.2246, - 0.224871, - 0.225146, - 0.225425, - 0.225708, - 0.225995, - 0.226285, - 0.226578, - 0.226874, - 0.227173, - 0.227473, - 0.227776, - 0.22808, - 0.228385, - 0.228691, - 0.228998, - 0.229305, - 0.229612, - 0.229918, - 0.230224, - 0.230528, - 0.230832, - 0.231133, - 0.231432, - 0.231729, - 0.232024, - 0.232315, - 0.232603, - 0.232888, - 0.233169, - 0.233446, - 0.233719, - 0.233988, - 0.234252, - 0.234511, - 0.234766, - 0.235016, - 0.23526, - 0.2355, - 0.235734, - 0.235963, - 0.236188, - 0.236407, - 0.236621, - 0.236829, - 0.237034, - 0.237233, - 0.237428, - 0.237618, - 0.237804, - 0.237986, - 0.238164, - 0.238339, - 0.238511, - 0.238679, - 0.238845, - 0.239009, - 0.239171, - 0.239331, - 0.23949, - 0.239648, - 0.239806, - 0.239963, - 0.240121, - 0.24028, - 0.240439, - 0.2406, - 0.240763, - 0.240928, - 0.241096, - 0.241266, - 0.24144, - 0.241617, - 0.241798, - 0.241983, - 0.242173, - 0.242367, - 0.242566, - 0.24277, - 0.24298, - 0.243195, - 0.243416, - 0.243642, - 0.243874, - 0.244112, - 0.244356, - 0.244606, - 0.244861, - 0.245122, - 0.245389, - 0.245662, - 0.24594, - 0.246223, - 0.246511, - 0.246804, - 0.247102, - 0.247403, - 0.247709, - 0.248019, - 0.248332, - 0.248648, - 0.248966, - 0.249287, - 0.24961, - 0.249935, - 0.250261, - 0.250588, - 0.250915, - 0.251242, - 0.251569, - 0.251895, - 0.252221, - 0.252544, - 0.252866, - 0.253186, - 0.253504, - 0.253818, - 0.25413, - 0.254438, - 0.254743, - 0.255043, - 0.25534, - 0.255632, - 0.255919, - 0.256202, - 0.256479, - 0.256752, - 0.257019, - 0.257281, - 0.257537, - 0.257789, - 0.258034, - 0.258274, - 0.258509, - 0.258739, - 0.258963, - 0.259182, - 0.259396, - 0.259605, - 0.25981, - 0.26001, - 0.260206, - 0.260397, - 0.260585, - 0.26077, - 0.260951, - 0.26113, - 0.261305, - 0.261479, - 0.26165, - 0.26182, - 0.261989, - 0.262157, - 0.262325, - 0.262492, - 0.26266, - 0.262828, - 0.262997, - 0.263167, - 0.263339, - 0.263514, - 0.26369, - 0.26387, - 0.264052, - 0.264238, - 0.264428, - 0.264622, - 0.264819, - 0.265022, - 0.265229, - 0.265441, - 0.265658, - 0.265881, - 0.266109, - 0.266342, - 0.266582, - 0.266826, - 0.267077, - 0.267333, - 0.267595, - 0.267863, - 0.268136, - 0.268415, - 0.268699, - 0.268988, - 0.269282, - 0.269581, - 0.269885, - 0.270193, - 0.270505, - 0.270821, - 0.271141, - 0.271463, - 0.271789, - 0.272117, - 0.272447, - 0.272779, - 0.273112, - 0.273446, - 0.273781, - 0.274116, - 0.274451, - 0.274785, - 0.275118, - 0.275449, - 0.275779, - 0.276106, - 0.276431, - 0.276753, - 0.277072, - 0.277387, - 0.277698, - 0.278004, - 0.278307, - 0.278604, - 0.278897, - 0.279184, - 0.279466, - 0.279742, - 0.280013, - 0.280278, - 0.280537, - 0.28079, - 0.281038, - 0.281279, - 0.281515, - 0.281745, - 0.281969, - 0.282188, - 0.282402, - 0.28261, - 0.282813, - 0.283012, - 0.283206, - 0.283395, - 0.283581, - 0.283764, - 0.283943, - 0.284119, - 0.284292, - 0.284464, - 0.284633, - 0.284801, - 0.284969, - 0.285135, - 0.285302, - 0.285468, - 0.285635, - 0.285803, - 0.285973, - 0.286145, - 0.286318, - 0.286494, - 0.286673, - 0.286856, - 0.287042, - 0.287232, - 0.287426, - 0.287625, - 0.287829, - 0.288038, - 0.288252, - 0.288471, - 0.288696, - 0.288927, - 0.289164, - 0.289407, - 0.289656, - 0.289911, - 0.290172, - 0.290439, - 0.290713, - 0.290992, - 0.291277, - 0.291567, - 0.291864, - 0.292165, - 0.292472, - 0.292784, - 0.293101, - 0.293422, - 0.293747, - 0.294076, - 0.294409, - 0.294745, - 0.295083, - 0.295424, - 0.295768, - 0.296113, - 0.296459, - 0.296806, - 0.297153, - 0.297501, - 0.297848, - 0.298195, - 0.29854, - 0.298883, - 0.299225, - 0.299564, - 0.299901, - 0.300234, - 0.300564, - 0.30089, - 0.301212, - 0.301529, - 0.301842, - 0.30215, - 0.302453, - 0.302751, - 0.303043, - 0.303329, - 0.30361, - 0.303885, - 0.304154, - 0.304417, - 0.304673, - 0.304924, - 0.305169, - 0.305408, - 0.305641, - 0.305869, - 0.30609, - 0.306307, - 0.306519, - 0.306725, - 0.306927, - 0.307125, - 0.307318, - 0.307508, - 0.307695, - 0.307879, - 0.30806, - 0.308238, - 0.308415, - 0.308591, - 0.308766, - 0.30894, - 0.309113, - 0.309287, - 0.309462, - 0.309638, - 0.309815, - 0.309994, - 0.310175, - 0.310359, - 0.310546, - 0.310736, - 0.31093, - 0.311128, - 0.311331, - 0.311537, - 0.311749, - 0.311966, - 0.312188, - 0.312416, - 0.312649, - 0.312888, - 0.313133, - 0.313385, - 0.313642, - 0.313906, - 0.314175, - 0.314451, - 0.314733, - 0.315022, - 0.315316, - 0.315616, - 0.315921, - 0.316233, - 0.316549, - 0.316871, - 0.317197, - 0.317528, - 0.317864, - 0.318203, - 0.318546, - 0.318892, - 0.319241, - 0.319592, - 0.319946, - 0.320301, - 0.320658, - 0.321016, - 0.321374, - 0.321732, - 0.32209, - 0.322448, - 0.322804, - 0.323158, - 0.323511, - 0.323861, - 0.324209, - 0.324553, - 0.324894, - 0.325231, - 0.325564, - 0.325892, - 0.326216, - 0.326534, - 0.326848, - 0.327156, - 0.327458, - 0.327754, - 0.328044, - 0.328329, - 0.328607, - 0.328879, - 0.329145, - 0.329404, - 0.329657, - 0.329905, - 0.330146, - 0.330381, - 0.330611, - 0.330835, - 0.331054, - 0.331268, - 0.331477, - 0.331682, - 0.331883, - 0.332079, - 0.332273, - 0.332463, - 0.33265, - 0.332835, - 0.333019, - 0.3332, - 0.333381, - 0.333561, - 0.333741, - 0.333922, - 0.334103, - 0.334285, - 0.334468, - 0.334654, - 0.334842, - 0.335032, - 0.335226, - 0.335423, - 0.335624, - 0.335828, - 0.336038, - 0.336252, - 0.33647, - 0.336694, - 0.336924, - 0.337158, - 0.337399, - 0.337645, - 0.337898, - 0.338156, - 0.33842, - 0.338691, - 0.338967, - 0.33925, - 0.339538, - 0.339833, - 0.340133, - 0.340438, - 0.34075, - 0.341066, - 0.341387, - 0.341713, - 0.342043, - 0.342378, - 0.342716, - 0.343058, - 0.343403, - 0.343751, - 0.344102, - 0.344454, - 0.344809, - 0.345164, - 0.345521, - 0.345878, - 0.346235, - 0.346592, - 0.346948, - 0.347304, - 0.347658, - 0.34801, - 0.34836, - 0.348707, - 0.349051, - 0.349393, - 0.34973, - 0.350064, - 0.350393, - 0.350718, - 0.351038, - 0.351353, - 0.351662, - 0.351967, - 0.352265, - 0.352558, - 0.352844, - 0.353125, - 0.3534, - 0.353668, - 0.353931, - 0.354187, - 0.354437, - 0.354681, - 0.35492, - 0.355153, - 0.35538, - 0.355602, - 0.355818, - 0.35603, - 0.356238, - 0.356441, - 0.356639, - 0.356835, - 0.357027, - 0.357215, - 0.357402, - 0.357586, - 0.357768, - 0.357949, - 0.358129, - 0.358308, - 0.358487, - 0.358667, - 0.358847, - 0.359028, - 0.359211, - 0.359396, - 0.359583, - 0.359774, - 0.359967, - 0.360164, - 0.360365, - 0.36057, - 0.36078, - 0.360994, - 0.361214, - 0.361438, - 0.361669, - 0.361905, - 0.362147, - 0.362395, - 0.362649, - 0.362909, - 0.363175, - 0.363448, - 0.363727, - 0.364012, - 0.364303, - 0.3646, - 0.364904, - 0.365212, - 0.365527, - 0.365847, - 0.366172, - 0.366501, - 0.366836, - 0.367174, - 0.367517, - 0.367864, - 0.368213, - 0.368566, - 0.368921, - 0.369279, - 0.369638, - 0.369999, - 0.370361, - 0.370724, - 0.371086, - 0.371449, - 0.371811, - 0.372172, - 0.372532, - 0.37289, - 0.373246, - 0.373599, - 0.37395, - 0.374297, - 0.374641, - 0.374981, - 0.375316, - 0.375648, - 0.375975, - 0.376297, - 0.376614, - 0.376925, - 0.377231, - 0.377532, - 0.377827, - 0.378116, - 0.3784, - 0.378678, - 0.37895, - 0.379216, - 0.379476, - 0.379731, - 0.379981, - 0.380225, - 0.380464, - 0.380698, - 0.380927, - 0.381152, - 0.381373, - 0.381589, - 0.381802, - 0.382012, - 0.382218, - 0.382422, - 0.382624, - 0.382824, - 0.383022, - 0.383219, - 0.383416, - 0.383612, - 0.383809, - 0.384006, - 0.384204, - 0.384403, - 0.384604, - 0.384808, - 0.385013, - 0.385222, - 0.385434, - 0.38565, - 0.38587, - 0.386093, - 0.386322, - 0.386555, - 0.386793, - 0.387037, - 0.387285, - 0.38754, - 0.3878, - 0.388066, - 0.388338, - 0.388616, - 0.3889, - 0.38919, - 0.389486, - 0.389788, - 0.390096, - 0.390409, - 0.390729, - 0.391054, - 0.391384, - 0.39172, - 0.39206, - 0.392406, - 0.392755, - 0.393109, - 0.393467, - 0.393828, - 0.394192, - 0.39456, - 0.39493, - 0.395301, - 0.395675, - 0.39605, - 0.396426, - 0.396803, - 0.39718, - 0.397556, - 0.397933, - 0.398308, - 0.398682, - 0.399054, - 0.399424, - 0.399792, - 0.400157, - 0.400519, - 0.400878, - 0.401233, - 0.401584, - 0.401931, - 0.402273, - 0.402611, - 0.402944, - 0.403272, - 0.403595, - 0.403913, - 0.404225, - 0.404532, - 0.404834, - 0.40513, - 0.40542, - 0.405705, - 0.405985, - 0.40626, - 0.406529, - 0.406794, - 0.407053, - 0.407308, - 0.407558, - 0.407805, - 0.408047, - 0.408286, - 0.408521, - 0.408753, - 0.408982, - 0.409209, - 0.409434, - 0.409657, - 0.409878, - 0.410099, - 0.410319, - 0.410539, - 0.41076, - 0.41098, - 0.411202, - 0.411425, - 0.41165, - 0.411877, - 0.412106, - 0.412338, - 0.412573, - 0.412811, - 0.413053, - 0.4133, - 0.41355, - 0.413805, - 0.414065, - 0.414329, - 0.414599, - 0.414874, - 0.415154, - 0.41544, - 0.415731, - 0.416029, - 0.416331, - 0.41664, - 0.416954, - 0.417274, - 0.417599, - 0.41793, - 0.418266, - 0.418607, - 0.418953, - 0.419303, - 0.419659, - 0.420018, - 0.420382, - 0.420749, - 0.42112, - 0.421494, - 0.421871, - 0.422251, - 0.422632, - 0.423015, - 0.4234, - 0.423786, - 0.424172, - 0.424559, - 0.424946, - 0.425332, - 0.425718, - 0.426103, - 0.426486, - 0.426867, - 0.427246, - 0.427623, - 0.427997, - 0.428367, - 0.428735, - 0.429098, - 0.429458, - 0.429813, - 0.430165, - 0.430511, - 0.430853, - 0.43119, - 0.431522, - 0.431849, - 0.432171, - 0.432487, - 0.432798, - 0.433104, - 0.433405, - 0.433701, - 0.433992, - 0.434277, - 0.434558, - 0.434834, - 0.435106, - 0.435373, - 0.435637, - 0.435896, - 0.436152, - 0.436404, - 0.436653, - 0.436899, - 0.437143, - 0.437385, - 0.437624, - 0.437863, - 0.4381, - 0.438336, - 0.438571, - 0.438807, - 0.439042, - 0.439279, - 0.439516, - 0.439754, - 0.439994, - 0.440236, - 0.44048, - 0.440727, - 0.440976, - 0.441229, - 0.441485, - 0.441745, - 0.442008, - 0.442276, - 0.442548, - 0.442824, - 0.443106, - 0.443392, - 0.443682, - 0.443978, - 0.444279, - 0.444585, - 0.444896, - 0.445212, - 0.445533, - 0.44586, - 0.446191, - 0.446527, - 0.446868, - 0.447213, - 0.447563, - 0.447918, - 0.448276, - 0.448638, - 0.449003, - 0.449372, - 0.449745, - 0.45012, - 0.450497, - 0.450877, - 0.451258, - 0.451641, - 0.452026, - 0.452411, - 0.452798, - 0.453184, - 0.45357, - 0.453956, - 0.454342, - 0.454726, - 0.455109, - 0.45549, - 0.45587, - 0.456247, - 0.456622, - 0.456994, - 0.457363, - 0.457728, - 0.45809, - 0.458449, - 0.458803, - 0.459153, - 0.459499, - 0.459841, - 0.460178, - 0.460511, - 0.460839, - 0.461162, - 0.46148, - 0.461794, - 0.462103, - 0.462408, - 0.462708, - 0.463003, - 0.463294, - 0.463581, - 0.463864, - 0.464143, - 0.464419, - 0.464691, - 0.464959, - 0.465225, - 0.465488, - 0.465749, - 0.466007, - 0.466263, - 0.466518, - 0.466772, - 0.467024, - 0.467276, - 0.467528, - 0.46778, - 0.468032, - 0.468284, - 0.468538, - 0.468793, - 0.46905, - 0.469308, - 0.469569, - 0.469832, - 0.470098, - 0.470366, - 0.470639, - 0.470914, - 0.471193, - 0.471477, - 0.471764, - 0.472055, - 0.472351, - 0.472651, - 0.472956, - 0.473265, - 0.473579, - 0.473898, - 0.474221, - 0.474549, - 0.474881, - 0.475218, - 0.47556, - 0.475905, - 0.476255, - 0.47661, - 0.476968, - 0.477329, - 0.477695, - 0.478064, - 0.478436, - 0.478811, - 0.479188, - 0.479569, - 0.479951, - 0.480335, - 0.480721, - 0.481109, - 0.481497, - 0.481887, - 0.482276, - 0.482667, - 0.483057, - 0.483446, - 0.483836, - 0.484224, - 0.484611, - 0.484997, - 0.485381, - 0.485763, - 0.486142, - 0.48652, - 0.486895, - 0.487267, - 0.487636, - 0.488002, - 0.488364, - 0.488723, - 0.489079, - 0.48943, - 0.489778, - 0.490122, - 0.490462, - 0.490798, - 0.491131, - 0.491459, - 0.491783, - 0.492104, - 0.492421, - 0.492734, - 0.493043, - 0.493349, - 0.493652, - 0.493951, - 0.494247, - 0.494541, - 0.494832, - 0.495121, - 0.495407, - 0.495691, - 0.495974, - 0.496255, - 0.496535, - 0.496814, - 0.497092, - 0.49737, - 0.497648, - 0.497926, - 0.498204, - 0.498483, - 0.498763, - 0.499044, - 0.499327, - 0.499611, - 0.499898, - 0.500187, - 0.500478, - 0.500772, - 0.501068, - 0.501368, - 0.501671, - 0.501977, - 0.502287, - 0.5026, - 0.502918, - 0.503239, - 0.503564, - 0.503892, - 0.504225, - 0.504562, - 0.504902, - 0.505247, - 0.505595, - 0.505947, - 0.506303, - 0.506663, - 0.507026, - 0.507392, - 0.507762, - 0.508135, - 0.50851, - 0.508889, - 0.50927, - 0.509653, - 0.510039, - 0.510427, - 0.510816, - 0.511207, - 0.511599, - 0.511992, - 0.512386, - 0.512781, - 0.513175, - 0.51357, - 0.513965, - 0.514359, - 0.514752, - 0.515145, - 0.515536, - 0.515926, - 0.516315, - 0.516701, - 0.517086, - 0.517468, - 0.517849, - 0.518226, - 0.518601, - 0.518974, - 0.519343, - 0.519709, - 0.520073, - 0.520433, - 0.520789, - 0.521143, - 0.521493, - 0.52184, - 0.522184, - 0.522524, - 0.522861, - 0.523195, - 0.523525, - 0.523853, - 0.524177, - 0.524499, - 0.524818, - 0.525134, - 0.525448, - 0.525759, - 0.526068, - 0.526375, - 0.52668, - 0.526984, - 0.527287, - 0.527588, - 0.527888, - 0.528187, - 0.528486, - 0.528785, - 0.529083, - 0.529381, - 0.52968, - 0.52998, - 0.53028, - 0.530581, - 0.530883, - 0.531187, - 0.531492, - 0.5318, - 0.532109, - 0.53242, - 0.532733, - 0.533049, - 0.533368, - 0.533689, - 0.534013, - 0.53434, - 0.53467, - 0.535003, - 0.535339, - 0.535678, - 0.53602, - 0.536365, - 0.536713, - 0.537064, - 0.537419, - 0.537776, - 0.538136, - 0.538499, - 0.538865, - 0.539233, - 0.539604, - 0.539977, - 0.540353, - 0.54073, - 0.541109, - 0.541491, - 0.541873, - 0.542257, - 0.542643, - 0.543029, - 0.543416, - 0.543804, - 0.544192, - 0.544581, - 0.54497, - 0.545358, - 0.545747, - 0.546134, - 0.546522, - 0.546908, - 0.547293, - 0.547677, - 0.54806, - 0.548441, - 0.54882, - 0.549198, - 0.549574, - 0.549947, - 0.550319, - 0.550688, - 0.551055, - 0.55142, - 0.551782, - 0.552142, - 0.552499, - 0.552855, - 0.553207, - 0.553558, - 0.553905, - 0.554251, - 0.554594, - 0.554935, - 0.555273, - 0.55561, - 0.555944, - 0.556276, - 0.556607, - 0.556935, - 0.557262, - 0.557587, - 0.55791, - 0.558232, - 0.558553, - 0.558873, - 0.559192, - 0.559509, - 0.559827, - 0.560143, - 0.56046, - 0.560776, - 0.561092, - 0.561409, - 0.561725, - 0.562042, - 0.56236, - 0.562679, - 0.562998, - 0.563319, - 0.563641, - 0.563964, - 0.564288, - 0.564615, - 0.564942, - 0.565272, - 0.565603, - 0.565937, - 0.566272, - 0.566609, - 0.566949, - 0.567291, - 0.567635, - 0.567981, - 0.56833, - 0.568681, - 0.569034, - 0.56939, - 0.569748, - 0.570108, - 0.57047, - 0.570834, - 0.571201, - 0.571569, - 0.571939, - 0.572311, - 0.572684, - 0.57306, - 0.573436, - 0.573814, - 0.574193, - 0.574573, - 0.574954, - 0.575335, - 0.575718, - 0.576101, - 0.576484, - 0.576867, - 0.577251, - 0.577634, - 0.578018, - 0.578401, - 0.578783, - 0.579165, - 0.579547, - 0.579927, - 0.580307, - 0.580685, - 0.581063, - 0.581439, - 0.581813, - 0.582187, - 0.582559, - 0.582929, - 0.583298, - 0.583665, - 0.58403, - 0.584394, - 0.584756, - 0.585117, - 0.585476, - 0.585833, - 0.586189, - 0.586544, - 0.586898, - 0.58725, - 0.587601, - 0.587951, - 0.5883, - 0.588648, - 0.588995, - 0.589341, - 0.589686, - 0.590031, - 0.590375, - 0.590718, - 0.591061, - 0.591403, - 0.591746, - 0.592087, - 0.592429, - 0.592771, - 0.593113, - 0.593454, - 0.593796, - 0.594139, - 0.594481, - 0.594825, - 0.595169, - 0.595513, - 0.595859, - 0.596205, - 0.596552, - 0.5969, - 0.597249, - 0.5976, - 0.597951, - 0.598304, - 0.598657, - 0.599013, - 0.599369, - 0.599727, - 0.600085, - 0.600446, - 0.600807, - 0.60117, - 0.601535, - 0.601901, - 0.602268, - 0.602636, - 0.603006, - 0.603377, - 0.60375, - 0.604123, - 0.604498, - 0.604874, - 0.605252, - 0.60563, - 0.606009, - 0.606389, - 0.60677, - 0.607152, - 0.607534, - 0.607917, - 0.608301, - 0.608685, - 0.609069, - 0.609454, - 0.609838, - 0.610223, - 0.610608, - 0.610993, - 0.611378, - 0.611762, - 0.612146, - 0.61253, - 0.612914, - 0.613297, - 0.613679, - 0.614061, - 0.614442, - 0.614823, - 0.615203, - 0.615582, - 0.615961, - 0.616338, - 0.616715, - 0.617091, - 0.617466, - 0.617841, - 0.618214, - 0.618587, - 0.61896, - 0.619331, - 0.619702, - 0.620072, - 0.620442, - 0.620812, - 0.621181, - 0.621549, - 0.621918, - 0.622286, - 0.622654, - 0.623021, - 0.623389, - 0.623756, - 0.624124, - 0.624491, - 0.624859, - 0.625226, - 0.625594, - 0.625962, - 0.62633, - 0.626698, - 0.627066, - 0.627434, - 0.627803, - 0.628172, - 0.628541, - 0.628911, - 0.62928, - 0.629651, - 0.630021, - 0.630392, - 0.630764, - 0.631135, - 0.631508, - 0.63188, - 0.632253, - 0.632626, - 0.633, - 0.633374, - 0.633749, - 0.634124, - 0.634499, - 0.634875, - 0.63525, - 0.635627, - 0.636003, - 0.63638, - 0.636757, - 0.637134, - 0.637512, - 0.63789, - 0.638268, - 0.638646, - 0.639024, - 0.639403, - 0.639782, - 0.640161, - 0.64054, - 0.640919, - 0.641298, - 0.641677, - 0.642056, - 0.642435, - 0.642814, - 0.643194, - 0.643573, - 0.643952, - 0.64433, - 0.644709, - 0.645087, - 0.645466, - 0.645844, - 0.646222, - 0.6466, - 0.646977, - 0.647355, - 0.647732, - 0.648109, - 0.648486, - 0.648863, - 0.64924, - 0.649616, - 0.649992, - 0.650369, - 0.650745, - 0.651121, - 0.651497, - 0.651874, - 0.65225, - 0.652626, - 0.653003, - 0.653379, - 0.653756, - 0.654133, - 0.654511, - 0.654889, - 0.655267, - 0.655646, - 0.656026, - 0.656406, - 0.656786, - 0.657167, - 0.657549, - 0.657932, - 0.658315, - 0.658699, - 0.659084, - 0.659469, - 0.659854, - 0.66024, - 0.660627, - 0.661014, - 0.661401, - 0.661789, - 0.662177, - 0.662565, - 0.662953, - 0.663342, - 0.66373, - 0.664119, - 0.664507, - 0.664896, - 0.665284, - 0.665672, - 0.66606, - 0.666448, - 0.666835, - 0.667222, - 0.667608, - 0.667994, - 0.66838, - 0.668765, - 0.669149, - 0.669533, - 0.669916, - 0.670298, - 0.670679, - 0.67106, - 0.67144, - 0.671819, - 0.672197, - 0.672575, - 0.672951, - 0.673327, - 0.673702, - 0.674077, - 0.67445, - 0.674823, - 0.675195, - 0.675567, - 0.675938, - 0.676309, - 0.676679, - 0.677049, - 0.677418, - 0.677787, - 0.678155, - 0.678523, - 0.678892, - 0.679259, - 0.679627, - 0.679995, - 0.680362, - 0.680729, - 0.681097, - 0.681464, - 0.681832, - 0.6822, - 0.682568, - 0.682936, - 0.683304, - 0.683674, - 0.684043, - 0.684414, - 0.684785, - 0.685157, - 0.68553, - 0.685904, - 0.686279, - 0.686655, - 0.687033, - 0.687412, - 0.687792, - 0.688173, - 0.688556, - 0.68894, - 0.689326, - 0.689713, - 0.690101, - 0.690491, - 0.690882, - 0.691274, - 0.691668, - 0.692063, - 0.692459, - 0.692856, - 0.693255, - 0.693655, - 0.694055, - 0.694457, - 0.69486, - 0.695264, - 0.695669, - 0.696075, - 0.696482, - 0.696889, - 0.697296, - 0.697704, - 0.698113, - 0.698521, - 0.69893, - 0.699339, - 0.699747, - 0.700155, - 0.700563, - 0.70097, - 0.701377, - 0.701783, - 0.702188, - 0.702592, - 0.702995, - 0.703397, - 0.703797, - 0.704197, - 0.704595, - 0.704992, - 0.705387, - 0.705781, - 0.706174, - 0.706565, - 0.706955, - 0.707343, - 0.70773, - 0.708116, - 0.7085, - 0.708882, - 0.709264, - 0.709643, - 0.710022, - 0.710399, - 0.710774, - 0.711149, - 0.711522, - 0.711894, - 0.712265, - 0.712634, - 0.713003, - 0.713371, - 0.713738, - 0.714104, - 0.71447, - 0.714836, - 0.715201, - 0.715565, - 0.71593, - 0.716294, - 0.716659, - 0.717024, - 0.717389, - 0.717755, - 0.718121, - 0.718488, - 0.718855, - 0.719224, - 0.719594, - 0.719964, - 0.720336, - 0.72071, - 0.721085, - 0.721462, - 0.72184, - 0.722221, - 0.722604, - 0.722989, - 0.723377, - 0.723766, - 0.724159, - 0.724554, - 0.724952, - 0.725352, - 0.725756, - 0.726162, - 0.72657, - 0.726982, - 0.727396, - 0.727812, - 0.728231, - 0.728652, - 0.729076, - 0.729501, - 0.729929, - 0.730358, - 0.730789, - 0.731222, - 0.731655, - 0.73209, - 0.732526, - 0.732962, - 0.733399, - 0.733836, - 0.734274, - 0.734711, - 0.735149, - 0.735586, - 0.736022, - 0.736457, - 0.736892, - 0.737325, - 0.737757, - 0.738187, - 0.738615, - 0.739041, - 0.739466, - 0.739888, - 0.740307, - 0.740724, - 0.741139, - 0.741551, - 0.74196, - 0.742366, - 0.74277, - 0.743171, - 0.743569, - 0.743965, - 0.744358, - 0.744748, - 0.745136, - 0.745522, - 0.745905, - 0.746286, - 0.746664, - 0.747041, - 0.747415, - 0.747788, - 0.748159, - 0.748529, - 0.748896, - 0.749263, - 0.749628, - 0.749992, - 0.750355, - 0.750717, - 0.751078, - 0.751439, - 0.751799, - 0.752159, - 0.752519, - 0.752879, - 0.753239, - 0.7536, - 0.753961, - 0.754323, - 0.754686, - 0.75505, - 0.755415, - 0.755782, - 0.75615, - 0.75652, - 0.756892, - 0.757265, - 0.757641, - 0.758019, - 0.7584, - 0.758783, - 0.759169, - 0.759558, - 0.75995, - 0.760344, - 0.760741, - 0.761142, - 0.761545, - 0.761952, - 0.762362, - 0.762774, - 0.76319, - 0.763609, - 0.76403, - 0.764454, - 0.764881, - 0.76531, - 0.765742, - 0.766176, - 0.766612, - 0.76705, - 0.76749, - 0.767931, - 0.768374, - 0.768818, - 0.769263, - 0.769708, - 0.770154, - 0.770601, - 0.771047, - 0.771494, - 0.77194, - 0.772385, - 0.772829, - 0.773273, - 0.773714, - 0.774155, - 0.774593, - 0.775029, - 0.775463, - 0.775894, - 0.776323, - 0.776749, - 0.777172, - 0.777591, - 0.778007, - 0.77842, - 0.778829, - 0.779235, - 0.779637, - 0.780035, - 0.78043, - 0.780821, - 0.781208, - 0.781592, - 0.781973, - 0.78235, - 0.782724, - 0.783095, - 0.783462, - 0.783827, - 0.784189, - 0.784547, - 0.784904, - 0.785257, - 0.785609, - 0.785958, - 0.786305, - 0.786651, - 0.786994, - 0.787336, - 0.787677, - 0.788017, - 0.788355, - 0.788694, - 0.789031, - 0.789369, - 0.789706, - 0.790044, - 0.790383, - 0.790722, - 0.791062, - 0.791403, - 0.791746, - 0.792091, - 0.792438, - 0.792786, - 0.793137, - 0.793491, - 0.793848, - 0.794207, - 0.794569, - 0.794935, - 0.795304, - 0.795677, - 0.796053, - 0.796433, - 0.796817, - 0.797204, - 0.797596, - 0.797991, - 0.79839, - 0.798793, - 0.7992, - 0.799611, - 0.800025, - 0.800443, - 0.800864, - 0.801289, - 0.801716, - 0.802147, - 0.80258, - 0.803016, - 0.803454, - 0.803894, - 0.804336, - 0.804779, - 0.805224, - 0.805669, - 0.806116, - 0.806562, - 0.807008, - 0.807454, - 0.8079, - 0.808344, - 0.808788, - 0.80923, - 0.80967, - 0.810108, - 0.810543, - 0.810976, - 0.811406, - 0.811833, - 0.812257, - 0.812677, - 0.813094, - 0.813506, - 0.813915, - 0.81432, - 0.814721, - 0.815117, - 0.81551, - 0.815898, - 0.816282, - 0.816662, - 0.817038, - 0.81741, - 0.817779, - 0.818143, - 0.818504, - 0.818861, - 0.819215, - 0.819566, - 0.819913, - 0.820258, - 0.8206, - 0.82094, - 0.821277, - 0.821612, - 0.821946, - 0.822277, - 0.822608, - 0.822937, - 0.823265, - 0.823593, - 0.82392, - 0.824247, - 0.824574, - 0.824902, - 0.82523, - 0.825559, - 0.825889, - 0.826221, - 0.826554, - 0.826889, - 0.827227, - 0.827567, - 0.827909, - 0.828254, - 0.828602, - 0.828953, - 0.829308, - 0.829666, - 0.830028, - 0.830394, - 0.830764, - 0.831138, - 0.831516, - 0.831898, - 0.832285, - 0.832677, - 0.833073, - 0.833474, - 0.83388, - 0.834291, - 0.834706, - 0.835126, - 0.835551, - 0.835981, - 0.836415, - 0.836853, - 0.837296, - 0.837743, - 0.838194, - 0.838648, - 0.839106, - 0.839568, - 0.840032, - 0.840499, - 0.840968, - 0.841439, - 0.841912, - 0.842386, - 0.842861, - 0.843337, - 0.843813, - 0.844289, - 0.844764, - 0.845239, - 0.845713, - 0.846185, - 0.846656, - 0.847124, - 0.84759, - 0.848053, - 0.848513, - 0.84897, - 0.849423, - 0.849872, - 0.850318, - 0.850759, - 0.851195, - 0.851628, - 0.852055, - 0.852478, - 0.852896, - 0.85331, - 0.853718, - 0.854122, - 0.854522, - 0.854916, - 0.855307, - 0.855693, - 0.856075, - 0.856453, - 0.856827, - 0.857197, - 0.857565, - 0.857929, - 0.85829, - 0.858648, - 0.859004, - 0.859358, - 0.85971, - 0.86006, - 0.860409, - 0.860758, - 0.861105, - 0.861452, - 0.861799, - 0.862147, - 0.862495, - 0.862844, - 0.863194, - 0.863546, - 0.863901, - 0.864257, - 0.864616, - 0.864977, - 0.865342, - 0.86571, - 0.866082, - 0.866458, - 0.866837, - 0.867221, - 0.867608, - 0.868001, - 0.868397, - 0.868798, - 0.869204, - 0.869614, - 0.870029, - 0.870449, - 0.870873, - 0.871302, - 0.871736, - 0.872174, - 0.872616, - 0.873063, - 0.873515, - 0.87397, - 0.874429, - 0.874893, - 0.87536, - 0.87583, - 0.876304, - 0.876781, - 0.877261, - 0.877743, - 0.878228, - 0.878714, - 0.879202, - 0.879691, - 0.88018, - 0.880671, - 0.881161, - 0.881651, - 0.88214, - 0.882628, - 0.883115, - 0.883601, - 0.884084, - 0.884565, - 0.885044, - 0.88552, - 0.885993, - 0.886463, - 0.886929, - 0.887392, - 0.887851, - 0.888307, - 0.888758, - 0.889205, - 0.889649, - 0.890087, - 0.890522, - 0.890952, - 0.891377, - 0.891798, - 0.892214, - 0.892626, - 0.893032, - 0.893435, - 0.893833, - 0.894226, - 0.894615, - 0.895, - 0.895381, - 0.895759, - 0.896132, - 0.896503, - 0.89687, - 0.897234, - 0.897596, - 0.897956, - 0.898313, - 0.898669, - 0.899023, - 0.899376, - 0.899729, - 0.900081, - 0.900432, - 0.900784, - 0.901136, - 0.901489, - 0.901842, - 0.902197, - 0.902554, - 0.902912, - 0.903273, - 0.903636, - 0.904002, - 0.904371, - 0.904743, - 0.905119, - 0.905499, - 0.905883, - 0.906271, - 0.906664, - 0.907061, - 0.907464, - 0.907871, - 0.908283, - 0.908701, - 0.909123, - 0.909551, - 0.909985, - 0.910423, - 0.910867, - 0.911315, - 0.911769, - 0.912228, - 0.912691, - 0.913159, - 0.913632, - 0.914109, - 0.91459, - 0.915075, - 0.915564, - 0.916056, - 0.916551, - 0.917048, - 0.917548, - 0.91805, - 0.918554, - 0.919059, - 0.919565, - 0.920071, - 0.920577, - 0.921083, - 0.921589, - 0.922093, - 0.922595, - 0.923096, - 0.923594, - 0.92409, - 0.924583, - 0.925072, - 0.925558, - 0.926041, - 0.926519, - 0.926993, - 0.927463, - 0.927928, - 0.928389, - 0.928845, - 0.929296, - 0.929742, - 0.930183, - 0.930619, - 0.93105, - 0.931476, - 0.931897, - 0.932313, - 0.932724, - 0.93313, - 0.933531, - 0.933928, - 0.93432, - 0.934708, - 0.935092, - 0.935472, - 0.935848, - 0.936221, - 0.936591, - 0.936958, - 0.937323, - 0.937685, - 0.938045, - 0.938405, - 0.938762, - 0.93912, - 0.939476, - 0.939833, - 0.94019, - 0.940547, - 0.940905, - 0.941265, - 0.941626, - 0.941989, - 0.942353, - 0.942721, - 0.943091, - 0.943464, - 0.943841, - 0.944221, - 0.944605, - 0.944994, - 0.945386, - 0.945784, - 0.946186, - 0.946593, - 0.947005, - 0.947423, - 0.947846, - 0.948274, - 0.948708, - 0.949147, - 0.949592, - 0.950042, - 0.950498, - 0.950959, - 0.951425, - 0.951896, - 0.952372, - 0.952852, - 0.953337, - 0.953825, - 0.954318, - 0.954814, - 0.955313, - 0.955816, - 0.956321, - 0.956828, - 0.957338, - 0.95785, - 0.958363, - 0.958877, - 0.959392, - 0.959908, - 0.960423, - 0.960939, - 0.961454, - 0.961969, - 0.962482, - 0.962994, - 0.963504, - 0.964012, - 0.964517, - 0.96502, - 0.96552, - 0.966017, - 0.96651, - 0.967, - 0.967486, - 0.967968, - 0.968445, - 0.968919, - 0.969388, - 0.969853, - 0.970313, - 0.970769, - 0.97122, - 0.971666, - 0.972108, - 0.972546, - 0.972978, - 0.973407, - 0.973831, - 0.974251, - 0.974667, - 0.975078, - 0.975486, - 0.975891, - 0.976291, - 0.976689, - 0.977083, - 0.977475, - 0.977864, - 0.978251, - 0.978636, - 0.979019, - 0.979401, - 0.979782, - 0.980162, - 0.980542, - 0.980922, - 0.981302, - 0.981683, - 0.982065, - 0.982448, - 0.982833, - 0.98322, - 0.983609, - 0.984001, - 0.984396, - 0.984794, - 0.985195, - 0.9856, - 0.986009, - 0.986422, - 0.986839, - 0.987261, - 0.987687, - 0.988117, - 0.988553, - 0.988993, - 0.989438, - 0.989888, - 0.990343, - 0.990803, - 0.991268, - 0.991737, - 0.992212, - 0.99269, - 0.993174, - 0.993662, - 0.994154, - 0.994651, - 0.995152, - 0.995656, - 0.996164, - 0.996676, - 0.99719, - 0.997708, - 0.998228, - 0.998751, - 0.999275, - 0.999801, - 1.000329, - 1.000857, - 1.001387, - 1.001916, - 1.002445, - 1.002975, - 1.003503, - 1.00403, - 1.004556, - 1.005079, - 1.005601, - 1.006121, - 1.006637, - 1.007151, - 1.007662, - 1.008169, - 1.008672, - 1.009172, - 1.009668, - 1.01016, - 1.010647, - 1.011131, - 1.011609, - 1.012084, - 1.012553, - 1.013018, - 1.013478, - 1.013934, - 1.014385, - 1.014831, - 1.015272, - 1.015708, - 1.01614, - 1.016567, - 1.016989, - 1.017408, - 1.017822, - 1.018231, - 1.018638, - 1.01904, - 1.019439, - 1.019835, - 1.020229, - 1.02062, - 1.021009, - 1.021396, - 1.021781, - 1.022166, - 1.02255, - 1.022934, - 1.023317, - 1.023702, - 1.024086, - 1.024473, - 1.02486, - 1.02525, - 1.025641, - 1.026035, - 1.026432, - 1.026833, - 1.027236, - 1.027644, - 1.028055, - 1.028471, - 1.028891, - 1.029316, - 1.029745, - 1.03018, - 1.03062, - 1.031064, - 1.031514, - 1.031969, - 1.032429, - 1.032894, - 1.033364, - 1.033838, - 1.034317, - 1.034801, - 1.035288, - 1.03578, - 1.036276, - 1.036775, - 1.037278, - 1.037783, - 1.038292, - 1.038804, - 1.039317, - 1.039833, - 1.040351, - 1.040871, - 1.041392, - 1.041914, - 1.042437, - 1.042961, - 1.043485, - 1.044008, - 1.044532, - 1.045055, - 1.045577, - 1.046098, - 1.046618, - 1.047136, - 1.047652, - 1.048166, - 1.048677, - 1.049186, - 1.049692, - 1.050195, - 1.050695, - 1.051191, - 1.051685, - 1.052174, - 1.05266, - 1.053143, - 1.053622, - 1.054097, - 1.054568, - 1.055035, - 1.055499, - 1.055959, - 1.056415, - 1.056867, - 1.057316, - 1.057761, - 1.058202, - 1.05864, - 1.059074, - 1.059505, - 1.059933, - 1.060357, - 1.060778, - 1.061197, - 1.061612, - 1.062025, - 1.062435, - 1.062844, - 1.06325, - 1.063655, - 1.064058, - 1.06446, - 1.064861, - 1.065262, - 1.065662, - 1.066063, - 1.066463, - 1.066864, - 1.067266, - 1.067669, - 1.068074, - 1.06848, - 1.068888, - 1.069299, - 1.069712, - 1.070128, - 1.070546, - 1.070968, - 1.071394, - 1.071823, - 1.072255, - 1.072692, - 1.073132, - 1.073576, - 1.074025, - 1.074477, - 1.074934, - 1.075396, - 1.075861, - 1.076331, - 1.076805, - 1.077284, - 1.077766, - 1.078253, - 1.078743, - 1.079238, - 1.079736, - 1.080238, - 1.080743, - 1.081252, - 1.081763, - 1.082277, - 1.082794, - 1.083313, - 1.083834, - 1.084357, - 1.084881, - 1.085407, - 1.085933, - 1.08646, - 1.086987, - 1.087514, - 1.088041, - 1.088568, - 1.089093, - 1.089618, - 1.090141, - 1.090663, - 1.091183, - 1.091701, - 1.092217, - 1.092731, - 1.093243, - 1.093751, - 1.094257, - 1.09476, - 1.09526, - 1.095757, - 1.096251, - 1.096741, - 1.097228, - 1.097711, - 1.098191, - 1.098667, - 1.099139, - 1.099607, - 1.100072, - 1.100534, - 1.100991, - 1.101445, - 1.101896, - 1.102343, - 1.102786, - 1.103227, - 1.103665, - 1.104099, - 1.104531, - 1.104961, - 1.105389, - 1.105814, - 1.106238, - 1.106661, - 1.107082, - 1.107503, - 1.107923, - 1.108342, - 1.108762, - 1.109182, - 1.109603, - 1.110024, - 1.110447, - 1.110871, - 1.111296, - 1.111724, - 1.112154, - 1.112586, - 1.113022, - 1.11346, - 1.113901, - 1.114346, - 1.114795, - 1.115247, - 1.115703, - 1.116163, - 1.116626, - 1.117094, - 1.117566, - 1.118042, - 1.118522, - 1.119006, - 1.119494, - 1.119986, - 1.120481, - 1.120979, - 1.121481, - 1.121986, - 1.122493, - 1.123004, - 1.123517, - 1.124032, - 1.12455, - 1.12507, - 1.125591, - 1.126115, - 1.12664, - 1.127166, - 1.127694, - 1.128222, - 1.128752, - 1.129282, - 1.129813, - 1.130344, - 1.130875, - 1.131406, - 1.131936, - 1.132467, - 1.132996, - 1.133525, - 1.134052, - 1.134578, - 1.135103, - 1.135626, - 1.136148, - 1.136667, - 1.137185, - 1.1377, - 1.138214, - 1.138725, - 1.139234, - 1.139741, - 1.140245, - 1.140747, - 1.141247, - 1.141744, - 1.142239, - 1.142732, - 1.143223, - 1.143711, - 1.144197, - 1.144681, - 1.145162, - 1.145642, - 1.146119, - 1.146595, - 1.147068, - 1.147539, - 1.148009, - 1.148476, - 1.148942, - 1.149406, - 1.149867, - 1.150328, - 1.150786, - 1.151244, - 1.151699, - 1.152154, - 1.152607, - 1.153059, - 1.15351, - 1.153961, - 1.154411, - 1.15486, - 1.15531, - 1.155759, - 1.156208, - 1.156658, - 1.157109, - 1.15756, - 1.158012, - 1.158465, - 1.158919, - 1.159375, - 1.159832, - 1.160291, - 1.160752, - 1.161215, - 1.16168, - 1.162147, - 1.162617, - 1.16309, - 1.163565, - 1.164042, - 1.164523, - 1.165006, - 1.165493, - 1.165982, - 1.166475, - 1.166971, - 1.167469, - 1.167971, - 1.168476, - 1.168983, - 1.169493, - 1.170006, - 1.170522, - 1.17104, - 1.17156, - 1.172083, - 1.172607, - 1.173133, - 1.17366, - 1.174189, - 1.174719, - 1.175249, - 1.17578, - 1.176311, - 1.176843, - 1.177374, - 1.177905, - 1.178435, - 1.178964, - 1.179493, - 1.18002, - 1.180545, - 1.181069, - 1.181592, - 1.182112, - 1.18263, - 1.183146, - 1.183659, - 1.18417, - 1.184678, - 1.185183, - 1.185686, - 1.186185, - 1.186682, - 1.187176, - 1.187666, - 1.188154, - 1.188639, - 1.189121, - 1.189601, - 1.190078, - 1.190552, - 1.191024, - 1.191493, - 1.191961, - 1.192426, - 1.192889, - 1.193351, - 1.193811, - 1.19427, - 1.194727, - 1.195183, - 1.195639, - 1.196093, - 1.196547, - 1.197001, - 1.197454, - 1.197908, - 1.198361, - 1.198815, - 1.199269, - 1.199723, - 1.200179, - 1.200635, - 1.201092, - 1.20155, - 1.20201, - 1.20247, - 1.202933, - 1.203396, - 1.203861, - 1.204328, - 1.204797, - 1.205267, - 1.205738, - 1.206211, - 1.206686, - 1.207162, - 1.20764, - 1.208119, - 1.2086, - 1.209082, - 1.209566, - 1.21005, - 1.210536, - 1.211023, - 1.211511, - 1.212, - 1.212491, - 1.212982, - 1.213474, - 1.213966, - 1.21446, - 1.214954, - 1.215449, - 1.215944, - 1.21644, - 1.216936, - 1.217433, - 1.21793, - 1.218427, - 1.218925, - 1.219422, - 1.21992, - 1.220417, - 1.220915, - 1.221412, - 1.221909, - 1.222406, - 1.222903, - 1.223399, - 1.223895, - 1.224391, - 1.224886, - 1.22538, - 1.225875, - 1.226368, - 1.226861, - 1.227354, - 1.227846, - 1.228337, - 1.228828, - 1.229317, - 1.229806, - 1.230295, - 1.230782, - 1.231269, - 1.231755, - 1.23224, - 1.232724, - 1.233207, - 1.233689, - 1.23417, - 1.23465, - 1.235129, - 1.235607, - 1.236084, - 1.23656, - 1.237034, - 1.237508, - 1.23798, - 1.238451, - 1.23892, - 1.239389, - 1.239856, - 1.240322, - 1.240787, - 1.24125, - 1.241713, - 1.242174, - 1.242635, - 1.243094, - 1.243553, - 1.24401, - 1.244468, - 1.244924, - 1.24538, - 1.245836, - 1.246292, - 1.246747, - 1.247203, - 1.247659, - 1.248115, - 1.248571, - 1.249029, - 1.249487, - 1.249945, - 1.250405, - 1.250866, - 1.251328, - 1.251791, - 1.252255, - 1.25272, - 1.253187, - 1.253655, - 1.254124, - 1.254595, - 1.255067, - 1.25554, - 1.256014, - 1.25649, - 1.256968, - 1.257446, - 1.257926, - 1.258407, - 1.258889, - 1.259373, - 1.259858, - 1.260344, - 1.260831, - 1.261319, - 1.261809, - 1.262299, - 1.26279, - 1.263282, - 1.263775, - 1.264268, - 1.264763, - 1.265257, - 1.265752, - 1.266248, - 1.266744, - 1.26724, - 1.267736, - 1.268232, - 1.268729, - 1.269225, - 1.269722, - 1.270219, - 1.270715, - 1.271212, - 1.271709, - 1.272206, - 1.272703, - 1.2732, - 1.273697, - 1.274194, - 1.274692, - 1.27519, - 1.275688, - 1.276187, - 1.276686, - 1.277185, - 1.277684, - 1.278184, - 1.278683, - 1.279184, - 1.279684, - 1.280185, - 1.280686, - 1.281188, - 1.28169, - 1.282192, - 1.282695, - 1.283199, - 1.283702, - 1.284206, - 1.284711, - 1.285216, - 1.285722, - 1.286228, - 1.286735, - 1.287242, - 1.28775, - 1.288258, - 1.288766, - 1.289275, - 1.289784, - 1.290293, - 1.290803, - 1.291313, - 1.291823, - 1.292333, - 1.292843, - 1.293353, - 1.293864, - 1.294374, - 1.294884, - 1.295394, - 1.295904, - 1.296414, - 1.296923, - 1.297433, - 1.297942, - 1.298451, - 1.29896, - 1.299469, - 1.299977, - 1.300486, - 1.300995, - 1.301503, - 1.302012, - 1.302521, - 1.303029, - 1.303538, - 1.304047, - 1.304556, - 1.305066, - 1.305576, - 1.306086, - 1.306596, - 1.307107, - 1.307617, - 1.308129, - 1.30864, - 1.309152, - 1.309664, - 1.310177, - 1.31069, - 1.311204, - 1.311718, - 1.312232, - 1.312747, - 1.313262, - 1.313778, - 1.314294, - 1.31481, - 1.315327, - 1.315844, - 1.316362, - 1.31688, - 1.317398, - 1.317917, - 1.318437, - 1.318957, - 1.319477, - 1.319998, - 1.320519, - 1.321041, - 1.321564, - 1.322087, - 1.32261, - 1.323135, - 1.32366, - 1.324185, - 1.324711, - 1.325237, - 1.325764, - 1.326291, - 1.326819, - 1.327346, - 1.327874, - 1.328402, - 1.32893, - 1.329458, - 1.329986, - 1.330514, - 1.331042, - 1.331569, - 1.332097, - 1.332623, - 1.33315, - 1.333676, - 1.334201, - 1.334726, - 1.33525, - 1.335774, - 1.336297, - 1.336819, - 1.33734, - 1.337861, - 1.338381, - 1.338899, - 1.339417, - 1.339934, - 1.34045, - 1.340965, - 1.341479, - 1.341992, - 1.342504, - 1.343015, - 1.343524, - 1.344032, - 1.34454, - 1.345045, - 1.34555, - 1.346054, - 1.346557, - 1.347059, - 1.347559, - 1.348059, - 1.348558, - 1.349056, - 1.349554, - 1.350051, - 1.350547, - 1.351043, - 1.351539, - 1.352034, - 1.352529, - 1.353024, - 1.35352, - 1.354015, - 1.354511, - 1.355007, - 1.355504, - 1.356002, - 1.3565, - 1.357, - 1.3575, - 1.358002, - 1.358505, - 1.359009, - 1.359514, - 1.360021, - 1.360529, - 1.361039, - 1.36155, - 1.362062, - 1.362575, - 1.36309, - 1.363606, - 1.364123, - 1.364642, - 1.365162, - 1.365683, - 1.366205, - 1.366729, - 1.367254, - 1.36778, - 1.368307, - 1.368836, - 1.369366, - 1.369898, - 1.370431, - 1.370966, - 1.371503, - 1.372041, - 1.372581, - 1.373122, - 1.373666, - 1.374211, - 1.374757, - 1.375306, - 1.375856, - 1.376407, - 1.376961, - 1.377515, - 1.378071, - 1.378629, - 1.379188, - 1.379748, - 1.380309, - 1.380871, - 1.381435, - 1.381999, - 1.382564, - 1.383129, - 1.383696, - 1.384263, - 1.38483, - 1.385398, - 1.385966, - 1.386534, - 1.387102, - 1.38767, - 1.388238, - 1.388805, - 1.389371, - 1.389937, - 1.390501, - 1.391065, - 1.391627, - 1.392187, - 1.392746, - 1.393302, - 1.393857, - 1.394409, - 1.394959, - 1.395507, - 1.396052, - 1.396594, - 1.397134, - 1.397672, - 1.398206, - 1.398739, - 1.399269, - 1.399796, - 1.400321, - 1.400844, - 1.401366, - 1.401885, - 1.402403, - 1.402919, - 1.403434, - 1.403948, - 1.40446, - 1.404972, - 1.405483, - 1.405994, - 1.406504, - 1.407014, - 1.407524, - 1.408034, - 1.408545, - 1.409056, - 1.409567, - 1.41008, - 1.410593, - 1.411108, - 1.411624, - 1.412142, - 1.412662, - 1.413183, - 1.413707, - 1.414233, - 1.414761, - 1.415293, - 1.415827, - 1.416363, - 1.416903, - 1.417446, - 1.417992, - 1.418541, - 1.419094, - 1.419649, - 1.420208, - 1.420769, - 1.421334, - 1.421901, - 1.422472, - 1.423045, - 1.423621, - 1.424199, - 1.424779, - 1.425362, - 1.425947, - 1.426533, - 1.427122, - 1.427712, - 1.428304, - 1.428897, - 1.429491, - 1.430087, - 1.430683, - 1.43128, - 1.431878, - 1.432476, - 1.433074, - 1.433672, - 1.43427, - 1.434868, - 1.435465, - 1.436061, - 1.436657, - 1.437252, - 1.437845, - 1.438437, - 1.439028, - 1.439617, - 1.440205, - 1.440791, - 1.441375, - 1.441957, - 1.442538, - 1.443116, - 1.443693, - 1.444268, - 1.44484, - 1.445411, - 1.44598, - 1.446547, - 1.447112, - 1.447675, - 1.448237, - 1.448796, - 1.449354, - 1.44991, - 1.450464, - 1.451017, - 1.451568, - 1.452118, - 1.452666, - 1.453213, - 1.453759, - 1.454303, - 1.454847, - 1.45539, - 1.455933, - 1.456476, - 1.457018, - 1.45756, - 1.458103, - 1.458646, - 1.45919, - 1.459735, - 1.46028, - 1.460827, - 1.461375, - 1.461924, - 1.462474, - 1.463026, - 1.46358, - 1.464135, - 1.464692, - 1.46525, - 1.46581, - 1.466372, - 1.466935, - 1.4675, - 1.468067, - 1.468636, - 1.469207, - 1.46978, - 1.470356, - 1.470933, - 1.471512, - 1.472094, - 1.472679, - 1.473266, - 1.473855, - 1.474447, - 1.475042, - 1.475639, - 1.476239, - 1.476842, - 1.477448, - 1.478056, - 1.478667, - 1.47928, - 1.479896, - 1.480515, - 1.481135, - 1.481758, - 1.482383, - 1.483009, - 1.483637, - 1.484266, - 1.484897, - 1.485529, - 1.486161, - 1.486793, - 1.487427, - 1.48806, - 1.488693, - 1.489325, - 1.489957, - 1.490588, - 1.491218, - 1.491847, - 1.492474, - 1.4931, - 1.493724, - 1.494345, - 1.494964, - 1.495581, - 1.496194, - 1.496805, - 1.497412, - 1.498016, - 1.498616, - 1.499213, - 1.499806, - 1.500394, - 1.500979, - 1.501559, - 1.502135, - 1.502707, - 1.503275, - 1.503839, - 1.5044, - 1.504956, - 1.505509, - 1.506058, - 1.506605, - 1.507148, - 1.507689, - 1.508227, - 1.508763, - 1.509297, - 1.50983, - 1.510361, - 1.510891, - 1.51142, - 1.511949, - 1.512477, - 1.513005, - 1.513533, - 1.514062, - 1.514591, - 1.515121, - 1.515653, - 1.516186, - 1.516721, - 1.517257, - 1.517796, - 1.518338, - 1.518882, - 1.519429, - 1.519979, - 1.520532, - 1.521089, - 1.52165, - 1.522215, - 1.522783, - 1.523356, - 1.523933, - 1.524514, - 1.525099, - 1.525689, - 1.526283, - 1.526881, - 1.527483, - 1.528089, - 1.528699, - 1.529312, - 1.529929, - 1.53055, - 1.531173, - 1.5318, - 1.532429, - 1.533061, - 1.533696, - 1.534333, - 1.534972, - 1.535612, - 1.536255, - 1.536899, - 1.537544, - 1.538191, - 1.538838, - 1.539486, - 1.540135, - 1.540783, - 1.541432, - 1.54208, - 1.542728, - 1.543375, - 1.544021, - 1.544665, - 1.545308, - 1.54595, - 1.546589, - 1.547227, - 1.547862, - 1.548495, - 1.549125, - 1.549753, - 1.550378, - 1.551, - 1.551619, - 1.552235, - 1.552848, - 1.553457, - 1.554064, - 1.554667, - 1.555267, - 1.555865, - 1.556459, - 1.557049, - 1.557637, - 1.558222, - 1.558804, - 1.559384, - 1.559961, - 1.560535, - 1.561106, - 1.561676, - 1.562243, - 1.562808, - 1.563372, - 1.563934, - 1.564494, - 1.565053, - 1.565612, - 1.566169, - 1.566726, - 1.567283, - 1.567839, - 1.568396, - 1.568953, - 1.569511, - 1.57007, - 1.57063, - 1.571191, - 1.571754, - 1.572319, - 1.572885, - 1.573453, - 1.574024, - 1.574597, - 1.575172, - 1.575751, - 1.576332, - 1.576916, - 1.577503, - 1.578093, - 1.578687, - 1.579284, - 1.579884, - 1.580489, - 1.581097, - 1.581709, - 1.582325, - 1.582945, - 1.583569, - 1.584196, - 1.584828, - 1.585464, - 1.586103, - 1.586746, - 1.587393, - 1.588044, - 1.588698, - 1.589355, - 1.590016, - 1.590679, - 1.591346, - 1.592015, - 1.592687, - 1.59336, - 1.594036, - 1.594714, - 1.595393, - 1.596073, - 1.596754, - 1.597436, - 1.598118, - 1.598801, - 1.599483, - 1.600165, - 1.600846, - 1.601527, - 1.602206, - 1.602883, - 1.603559, - 1.604233, - 1.604905, - 1.605574, - 1.60624, - 1.606903, - 1.607563, - 1.60822, - 1.608874, - 1.609524, - 1.61017, - 1.610812, - 1.611451, - 1.612085, - 1.612716, - 1.613343, - 1.613966, - 1.614586, - 1.615202, - 1.615814, - 1.616423, - 1.617028, - 1.617631, - 1.618231, - 1.618828, - 1.619423, - 1.620016, - 1.620608, - 1.621197, - 1.621786, - 1.622374, - 1.622961, - 1.623547, - 1.624134, - 1.624721, - 1.625308, - 1.625896, - 1.626485, - 1.627076, - 1.627668, - 1.628262, - 1.628858, - 1.629456, - 1.630057, - 1.630661, - 1.631268, - 1.631877, - 1.63249, - 1.633106, - 1.633726, - 1.634349, - 1.634975, - 1.635606, - 1.636239, - 1.636877, - 1.637518, - 1.638163, - 1.638812, - 1.639464, - 1.64012, - 1.64078, - 1.641443, - 1.64211, - 1.64278, - 1.643453, - 1.64413, - 1.64481, - 1.645493, - 1.64618, - 1.646869, - 1.647561, - 1.648256, - 1.648953, - 1.649653, - 1.650355, - 1.651059, - 1.651765, - 1.652473, - 1.653182, - 1.653891, - 1.654602, - 1.655313, - 1.656024, - 1.656736, - 1.657447, - 1.658158, - 1.658868, - 1.659577, - 1.660285, - 1.660991, - 1.661696, - 1.6624, - 1.663101, - 1.6638, - 1.664497, - 1.665191, - 1.665883, - 1.666572, - 1.667258, - 1.667942, - 1.668621, - 1.669298, - 1.669971, - 1.670641, - 1.671306, - 1.671968, - 1.672627, - 1.673281, - 1.673931, - 1.674577, - 1.67522, - 1.675858, - 1.676493, - 1.677123, - 1.67775, - 1.678374, - 1.678994, - 1.679611, - 1.680225, - 1.680837, - 1.681445, - 1.682052, - 1.682656, - 1.683259, - 1.68386, - 1.684459, - 1.685058, - 1.685656, - 1.686253, - 1.68685, - 1.687447, - 1.688044, - 1.688642, - 1.689241, - 1.689841, - 1.690443, - 1.691046, - 1.691651, - 1.692258, - 1.692868, - 1.69348, - 1.694095, - 1.694714, - 1.695336, - 1.695961, - 1.69659, - 1.697224, - 1.697861, - 1.698502, - 1.699147, - 1.699797, - 1.70045, - 1.701108, - 1.70177, - 1.702437, - 1.703107, - 1.703781, - 1.704459, - 1.705141, - 1.705827, - 1.706516, - 1.707208, - 1.707903, - 1.708601, - 1.709301, - 1.710004, - 1.71071, - 1.711417, - 1.712126, - 1.712836, - 1.713547, - 1.714259, - 1.714972, - 1.715686, - 1.716399, - 1.717112, - 1.717825, - 1.718537, - 1.719248, - 1.719958, - 1.720667, - 1.721374, - 1.722079, - 1.722783, - 1.723484, - 1.724183, - 1.72488, - 1.725574, - 1.726266, - 1.726955, - 1.727641, - 1.728324, - 1.729004, - 1.729681, - 1.730356, - 1.731027, - 1.731696, - 1.732362, - 1.733025, - 1.733685, - 1.734343, - 1.734999, - 1.735652, - 1.736303, - 1.736953, - 1.7376, - 1.738247, - 1.738893, - 1.739538, - 1.740183, - 1.740829, - 1.741476, - 1.742123, - 1.742773, - 1.743424, - 1.744078, - 1.744735, - 1.745395, - 1.746058, - 1.746725, - 1.747396, - 1.748071, - 1.74875, - 1.749434, - 1.750121, - 1.750813, - 1.751509, - 1.752209, - 1.752912, - 1.75362, - 1.75433, - 1.755044, - 1.755761, - 1.75648, - 1.757203, - 1.757928, - 1.758656, - 1.759386, - 1.760118, - 1.760853, - 1.761591, - 1.76233, - 1.763072, - 1.763816, - 1.764562, - 1.765311, - 1.766061, - 1.766813, - 1.767567, - 1.768322, - 1.769079, - 1.769837, - 1.770597, - 1.771358, - 1.77212, - 1.772883, - 1.773647, - 1.774411, - 1.775177, - 1.775943, - 1.77671, - 1.777478, - 1.778247, - 1.779017, - 1.779788, - 1.78056, - 1.781334, - 1.782109, - 1.782886, - 1.783664, - 1.784444, - 1.785226, - 1.78601, - 1.786795, - 1.787582, - 1.788371, - 1.789161, - 1.789953, - 1.790745, - 1.791539, - 1.792333, - 1.793127, - 1.793922, - 1.794716, - 1.79551, - 1.796304, - 1.797097, - 1.797888, - 1.798678, - 1.799466, - 1.800253, - 1.801038, - 1.80182, - 1.802599, - 1.803376, - 1.80415, - 1.804921, - 1.805689, - 1.806453, - 1.807214, - 1.807971, - 1.808724, - 1.809474, - 1.810219, - 1.81096, - 1.811697, - 1.812429, - 1.813158, - 1.813883, - 1.814604, - 1.815321, - 1.816034, - 1.816744, - 1.817452, - 1.818156, - 1.818859, - 1.819559, - 1.820257, - 1.820955, - 1.821652, - 1.822349, - 1.823046, - 1.823744, - 1.824444, - 1.825145, - 1.825849, - 1.826556, - 1.827265, - 1.827979, - 1.828696, - 1.829418, - 1.830144, - 1.830875, - 1.831611, - 1.832352, - 1.833099, - 1.83385, - 1.834606, - 1.835368, - 1.836135, - 1.836907, - 1.837683, - 1.838465, - 1.839251, - 1.840041, - 1.840835, - 1.841633, - 1.842434, - 1.843238, - 1.844045, - 1.844854, - 1.845665, - 1.846477, - 1.847291, - 1.848105, - 1.848919, - 1.849733, - 1.850546, - 1.851358, - 1.852169, - 1.852978, - 1.853785, - 1.85459, - 1.855392, - 1.856192, - 1.856989, - 1.857783, - 1.858575, - 1.859363, - 1.860148, - 1.860931, - 1.861711, - 1.862488, - 1.863262, - 1.864034, - 1.864804, - 1.865572, - 1.866338, - 1.867103, - 1.867866, - 1.868628, - 1.869389, - 1.87015, - 1.87091, - 1.87167, - 1.87243, - 1.873191, - 1.873952, - 1.874715, - 1.875478, - 1.876243, - 1.87701, - 1.877778, - 1.878549, - 1.879321, - 1.880096, - 1.880874, - 1.881654, - 1.882437, - 1.883223, - 1.884011, - 1.884802, - 1.885596, - 1.886392, - 1.887191, - 1.887993, - 1.888797, - 1.889603, - 1.890411, - 1.891221, - 1.892033, - 1.892846, - 1.893661, - 1.894478, - 1.895295, - 1.896114, - 1.896933, - 1.897753, - 1.898574, - 1.899396, - 1.900218, - 1.90104, - 1.901863, - 1.902687, - 1.90351, - 1.904335, - 1.905159, - 1.905984, - 1.906809, - 1.907635, - 1.908462, - 1.909289, - 1.910116, - 1.910944, - 1.911774, - 1.912604, - 1.913435, - 1.914267, - 1.9151, - 1.915935, - 1.916771, - 1.917608, - 1.918447, - 1.919288, - 1.92013, - 1.920974, - 1.92182, - 1.922667, - 1.923516, - 1.924367, - 1.92522, - 1.926075, - 1.926931, - 1.927788, - 1.928647, - 1.929508, - 1.930369, - 1.931231, - 1.932095, - 1.932958, - 1.933823, - 1.934687, - 1.935552, - 1.936417, - 1.937281, - 1.938145, - 1.939009, - 1.939872, - 1.940734, - 1.941595, - 1.942455, - 1.943314, - 1.944171, - 1.945027, - 1.945882, - 1.946735, - 1.947587, - 1.948437, - 1.949285, - 1.950131, - 1.950976, - 1.951819, - 1.95266, - 1.9535, - 1.954338, - 1.955176, - 1.956011, - 1.956846, - 1.95768, - 1.958514, - 1.959347, - 1.96018, - 1.961012, - 1.961845, - 1.962678, - 1.963512, - 1.964346, - 1.965181, - 1.966017, - 1.966853, - 1.967691, - 1.968531, - 1.969371, - 1.970213, - 1.971057, - 1.971901, - 1.972748, - 1.973596, - 1.974445, - 1.975296, - 1.976149, - 1.977003, - 1.977859, - 1.978717, - 1.979576, - 1.980437, - 1.9813, - 1.982164, - 1.983031, - 1.983899, - 1.984769, - 1.985641, - 1.986515, - 1.98739, - 1.988268, - 1.989147, - 1.990029, - 1.990912, - 1.991797, - 1.992684, - 1.993573, - 1.994463, - 1.995355, - 1.996248, - 1.997143, - 1.998039, - 1.998936, - 1.999834, - 2.000733, - 2.001634, - 2.002535, - 2.003437, - 2.00434, - 2.005244, - 2.006148, - 2.007054, - 2.00796, - 2.008867, - 2.009775, - 2.010683, - 2.011593, - 2.012503, - 2.013414, - 2.014326, - 2.015239, - 2.016153, - 2.017068, - 2.017983, - 2.0189, - 2.019817, - 2.020736, - 2.021655, - 2.022575, - 2.023496, - 2.024418, - 2.025341, - 2.026265, - 2.02719, - 2.028116, - 2.029042, - 2.02997, - 2.030899, - 2.031829, - 2.032761, - 2.033693, - 2.034627, - 2.035562, - 2.036499, - 2.037437, - 2.038376, - 2.039317, - 2.040259, - 2.041203, - 2.042148, - 2.043094, - 2.044042, - 2.044991, - 2.045942, - 2.046893, - 2.047846, - 2.048799, - 2.049754, - 2.050709, - 2.051666, - 2.052622, - 2.05358, - 2.054537, - 2.055496, - 2.056454, - 2.057413, - 2.058372, - 2.059331, - 2.06029, - 2.061249, - 2.062209, - 2.063168, - 2.064127, - 2.065086, - 2.066045, - 2.067003, - 2.067962, - 2.06892, - 2.069878, - 2.070835, - 2.071793, - 2.07275, - 2.073707, - 2.074664, - 2.075621, - 2.076578, - 2.077534, - 2.078491, - 2.079447, - 2.080404, - 2.081361, - 2.082318, - 2.083276, - 2.084234, - 2.085193, - 2.086152, - 2.087112, - 2.088073, - 2.089035, - 2.089998, - 2.090963, - 2.091928, - 2.092895, - 2.093864, - 2.094834, - 2.095805, - 2.096778, - 2.097753, - 2.09873, - 2.099708, - 2.100689, - 2.101671, - 2.102655, - 2.10364, - 2.104628, - 2.105617, - 2.106608, - 2.107601, - 2.108596, - 2.109593, - 2.110591, - 2.111591, - 2.112593, - 2.113597, - 2.114602, - 2.11561, - 2.116618, - 2.117629, - 2.118641, - 2.119655, - 2.12067, - 2.121687, - 2.122705, - 2.123724, - 2.124745, - 2.125768, - 2.126791, - 2.127816, - 2.128842, - 2.12987, - 2.130898, - 2.131928, - 2.132958, - 2.13399, - 2.135023, - 2.136057, - 2.137093, - 2.138129, - 2.139166, - 2.140204, - 2.141244, - 2.142284, - 2.143326, - 2.144368, - 2.145411, - 2.146456, - 2.147501, - 2.148546, - 2.149593, - 2.15064, - 2.151688, - 2.152737, - 2.153785, - 2.154834, - 2.155884, - 2.156934, - 2.157983, - 2.159033, - 2.160083, - 2.161133, - 2.162182, - 2.163232, - 2.164281, - 2.16533, - 2.166379, - 2.167428, - 2.168477, - 2.169525, - 2.170573, - 2.171621, - 2.172669, - 2.173716, - 2.174764, - 2.175811, - 2.176859, - 2.177906, - 2.178954, - 2.180002, - 2.18105, - 2.182099, - 2.183148, - 2.184197, - 2.185248, - 2.186299, - 2.187351, - 2.188404, - 2.189458, - 2.190514, - 2.191571, - 2.192629, - 2.193689, - 2.194751, - 2.195815, - 2.19688, - 2.197948, - 2.199018, - 2.20009, - 2.201164, - 2.202241, - 2.203321, - 2.204402, - 2.205487, - 2.206574, - 2.207664, - 2.208757, - 2.209853, - 2.210951, - 2.212053, - 2.213157, - 2.214264, - 2.215374, - 2.216487, - 2.217602, - 2.21872, - 2.219841, - 2.220964, - 2.222089, - 2.223217, - 2.224346, - 2.225478, - 2.226611, - 2.227746, - 2.228883, - 2.23002, - 2.231159, - 2.232299, - 2.233439, - 2.234581, - 2.235722, - 2.236864, - 2.238006, - 2.239148, - 2.240289, - 2.24143, - 2.242571, - 2.24371, - 2.244849, - 2.245987, - 2.247124, - 2.24826, - 2.249395, - 2.250528, - 2.25166, - 2.25279, - 2.253919, - 2.255046, - 2.256172, - 2.257297, - 2.258419, - 2.25954, - 2.26066, - 2.261778, - 2.262895, - 2.26401, - 2.265124, - 2.266237, - 2.267349, - 2.268459, - 2.269569, - 2.270677, - 2.271785, - 2.272892, - 2.273999, - 2.275105, - 2.276211, - 2.277317, - 2.278423, - 2.279529, - 2.280635, - 2.281743, - 2.28285, - 2.283959, - 2.285069, - 2.28618, - 2.287292, - 2.288406, - 2.289521, - 2.290639, - 2.291758, - 2.29288, - 2.294004, - 2.29513, - 2.296259, - 2.297391, - 2.298525, - 2.299662, - 2.300803, - 2.301946, - 2.303093, - 2.304243, - 2.305396, - 2.306553, - 2.307713, - 2.308877, - 2.310044, - 2.311215, - 2.31239, - 2.313567, - 2.314749, - 2.315934, - 2.317123, - 2.318315, - 2.31951, - 2.320709, - 2.321911, - 2.323117, - 2.324325, - 2.325537, - 2.326751, - 2.327968, - 2.329188, - 2.330411, - 2.331635, - 2.332862, - 2.334091, - 2.335322, - 2.336554, - 2.337788, - 2.339024, - 2.340261, - 2.341499, - 2.342738, - 2.343978, - 2.345219, - 2.346461, - 2.347703, - 2.348946, - 2.350188, - 2.351431, - 2.352675, - 2.353918, - 2.35516, - 2.356403, - 2.357645, - 2.358887, - 2.360128, - 2.361368, - 2.362608, - 2.363847, - 2.365085, - 2.366321, - 2.367557, - 2.368792, - 2.370026, - 2.371259, - 2.372491, - 2.373723, - 2.374954, - 2.376184, - 2.377413, - 2.378642, - 2.379871, - 2.381099, - 2.382328, - 2.383556, - 2.384786, - 2.386015, - 2.387246, - 2.388478, - 2.389711, - 2.390946, - 2.392184, - 2.393424, - 2.394667, - 2.395913, - 2.397164, - 2.398419, - 2.399678, - 2.400942, - 2.402212, - 2.403488, - 2.40477, - 2.406058, - 2.407352, - 2.408654, - 2.409962, - 2.411277, - 2.412599, - 2.413929, - 2.415266, - 2.41661, - 2.41796, - 2.419318, - 2.420682, - 2.422053, - 2.42343, - 2.424813, - 2.426201, - 2.427594, - 2.428992, - 2.430394, - 2.431801, - 2.433211, - 2.434624, - 2.43604, - 2.437459, - 2.43888, - 2.440304, - 2.441729, - 2.443156, - 2.444584, - 2.446013, - 2.447444, - 2.448875, - 2.450306, - 2.451739, - 2.453171, - 2.454604, - 2.456037, - 2.45747, - 2.458904, - 2.460337, - 2.461771, - 2.463205, - 2.464639, - 2.466073, - 2.467508, - 2.468944, - 2.47038, - 2.471816, - 2.473254, - 2.474693, - 2.476132, - 2.477573, - 2.479015, - 2.480458, - 2.481903, - 2.483349, - 2.484796, - 2.486244, - 2.487694, - 2.489145, - 2.490597, - 2.49205, - 2.493504, - 2.494959, - 2.496414, - 2.49787, - 2.499326, - 2.500782, - 2.502239, - 2.503695, - 2.50515, - 2.506605, - 2.508059, - 2.509512, - 2.510963, - 2.512413, - 2.513861, - 2.515306, - 2.516749, - 2.51819, - 2.519628, - 2.521064, - 2.522496, - 2.523926, - 2.525353, - 2.526778, - 2.5282, - 2.52962, - 2.531037, - 2.532453, - 2.533867, - 2.53528, - 2.536692, - 2.538103, - 2.539514, - 2.540925, - 2.542337, - 2.543749, - 2.545163, - 2.546579, - 2.547996, - 2.549416, - 2.550839, - 2.552266, - 2.553695, - 2.555129, - 2.556567, - 2.55801, - 2.559458, - 2.560911, - 2.56237, - 2.563835, - 2.565305, - 2.566781, - 2.568264, - 2.569753, - 2.571248, - 2.572749, - 2.574257, - 2.57577, - 2.577289, - 2.578814, - 2.580344, - 2.58188, - 2.583419, - 2.584963, - 2.586511, - 2.588061, - 2.589615, - 2.591171, - 2.592728, - 2.594287, - 2.595846, - 2.597405, - 2.598965, - 2.600523, - 2.602081, - 2.603636, - 2.60519, - 2.606741, - 2.60829, - 2.609836, - 2.611379, - 2.612919, - 2.614455, - 2.615987, - 2.617516, - 2.619041, - 2.620562, - 2.62208, - 2.623594, - 2.625105, - 2.626613, - 2.628117, - 2.629619, - 2.631118, - 2.632614, - 2.634109, - 2.635602, - 2.637094, - 2.638584, - 2.640075, - 2.641565, - 2.643056, - 2.644547, - 2.64604, - 2.647535, - 2.649031, - 2.65053, - 2.652032, - 2.653538, - 2.655047, - 2.656559, - 2.658076, - 2.659598, - 2.661124, - 2.662655, - 2.664191, - 2.665732, - 2.667278, - 2.66883, - 2.670387, - 2.671949, - 2.673517, - 2.67509, - 2.676668, - 2.678252, - 2.679841, - 2.681435, - 2.683034, - 2.684639, - 2.686249, - 2.687863, - 2.689483, - 2.691107, - 2.692736, - 2.69437, - 2.696009, - 2.697652, - 2.699299, - 2.700951, - 2.702607, - 2.704267, - 2.705932, - 2.7076, - 2.709273, - 2.710949, - 2.71263, - 2.714314, - 2.716002, - 2.717694, - 2.719389, - 2.721088, - 2.722791, - 2.724498, - 2.726208, - 2.727921, - 2.729639, - 2.731359, - 2.733083, - 2.734811, - 2.736541, - 2.738275, - 2.740012, - 2.741752, - 2.743495, - 2.745241, - 2.746989, - 2.74874, - 2.750493, - 2.752248, - 2.754005, - 2.755764, - 2.757524, - 2.759286, - 2.761049, - 2.762813, - 2.764578, - 2.766344, - 2.76811, - 2.769876, - 2.771643, - 2.773409, - 2.775176, - 2.776942, - 2.778708, - 2.780473, - 2.782238, - 2.784002, - 2.785765, - 2.787527, - 2.789288, - 2.791049, - 2.792808, - 2.794566, - 2.796323, - 2.798078, - 2.799833, - 2.801587, - 2.80334, - 2.805092, - 2.806844, - 2.808595, - 2.810346, - 2.812097, - 2.813848, - 2.815599, - 2.817351, - 2.819103, - 2.820857, - 2.822612, - 2.824368, - 2.826126, - 2.827886, - 2.829649, - 2.831414, - 2.833181, - 2.834952, - 2.836726, - 2.838503, - 2.840284, - 2.84207, - 2.843859, - 2.845653, - 2.847452, - 2.849255, - 2.851064, - 2.852878, - 2.854697, - 2.856522, - 2.858353, - 2.86019, - 2.862033, - 2.863882, - 2.865737, - 2.867599, - 2.869467, - 2.871341, - 2.873221, - 2.875108, - 2.877001, - 2.878899, - 2.880804, - 2.882714, - 2.88463, - 2.886551, - 2.888478, - 2.89041, - 2.892346, - 2.894287, - 2.896232, - 2.898182, - 2.900136, - 2.902093, - 2.904053, - 2.906017, - 2.907984, - 2.909953, - 2.911925, - 2.9139, - 2.915876, - 2.917854, - 2.919833, - 2.921814, - 2.923796, - 2.925779, - 2.927762, - 2.929746, - 2.93173, - 2.933715, - 2.9357, - 2.937685, - 2.939669, - 2.941654, - 2.943639, - 2.945624, - 2.947608, - 2.949593, - 2.951578, - 2.953564, - 2.95555, - 2.957536, - 2.959524, - 2.961512, - 2.963502, - 2.965493, - 2.967486, - 2.96948, - 2.971477, - 2.973475, - 2.975477, - 2.977481, - 2.979487, - 2.981497, - 2.98351, - 2.985527, - 2.987547, - 2.989571, - 2.991599, - 2.99363, - 2.995667, - 2.997707, - 2.999752, - 3.001801, - 3.003855, - 3.005914, - 3.007977, - 3.010046, - 3.012119, - 3.014196, - 3.016279, - 3.018367, - 3.020459, - 3.022555, - 3.024657, - 3.026763, - 3.028873, - 3.030988, - 3.033107, - 3.03523, - 3.037358, - 3.039489, - 3.041624, - 3.043763, - 3.045906, - 3.048052, - 3.050202, - 3.052356, - 3.054513, - 3.056673, - 3.058837, - 3.061004, - 3.063174, - 3.065348, - 3.067524, - 3.069704, - 3.071887, - 3.074074, - 3.076263, - 3.078456, - 3.080652, - 3.082851, - 3.085053, - 3.087258, - 3.089467, - 3.091678, - 3.093893, - 3.096112, - 3.098333, - 3.100558, - 3.102786, - 3.105017, - 3.107252, - 3.10949, - 3.111731, - 3.113975, - 3.116222, - 3.118473, - 3.120727, - 3.122984, - 3.125243, - 3.127506, - 3.129771, - 3.132039, - 3.134309, - 3.136582, - 3.138857, - 3.141134, - 3.143413, - 3.145694, - 3.147977, - 3.150261, - 3.152548, - 3.154835, - 3.157124, - 3.159414, - 3.161706, - 3.163999, - 3.166293, - 3.168588, - 3.170884, - 3.173181, - 3.175479, - 3.177779, - 3.18008, - 3.182382, - 3.184685, - 3.186989, - 3.189296, - 3.191603, - 3.193913, - 3.196224, - 3.198537, - 3.200852, - 3.20317, - 3.20549, - 3.207813, - 3.210138, - 3.212467, - 3.214799, - 3.217135, - 3.219474, - 3.221817, - 3.224165, - 3.226517, - 3.228873, - 3.231234, - 3.2336, - 3.235971, - 3.238348, - 3.24073, - 3.243117, - 3.24551, - 3.247908, - 3.250312, - 3.252722, - 3.255137, - 3.257558, - 3.259985, - 3.262418, - 3.264856, - 3.2673, - 3.26975, - 3.272204, - 3.274665, - 3.27713, - 3.279601, - 3.282076, - 3.284557, - 3.287042, - 3.289532, - 3.292027, - 3.294526, - 3.297029, - 3.299537, - 3.302048, - 3.304563, - 3.307083, - 3.309606, - 3.312132, - 3.314662, - 3.317195, - 3.319732, - 3.322271, - 3.324814, - 3.32736, - 3.329909, - 3.332461, - 3.335015, - 3.337573, - 3.340133, - 3.342697, - 3.345263, - 3.347832, - 3.350403, - 3.352978, - 3.355556, - 3.358136, - 3.360719, - 3.363306, - 3.365895, - 3.368487, - 3.371083, - 3.373681, - 3.376283, - 3.378887, - 3.381496, - 3.384107, - 3.386722, - 3.38934, - 3.391961, - 3.394586, - 3.397215, - 3.399847, - 3.402482, - 3.405121, - 3.407764, - 3.410411, - 3.413061, - 3.415716, - 3.418374, - 3.421036, - 3.423702, - 3.426373, - 3.429047, - 3.431726, - 3.43441, - 3.437098, - 3.43979, - 3.442488, - 3.44519, - 3.447897, - 3.45061, - 3.453328, - 3.456051, - 3.45878, - 3.461515, - 3.464256, - 3.467003, - 3.469757, - 3.472517, - 3.475284, - 3.478058, - 3.480839, - 3.483627, - 3.486422, - 3.489224, - 3.492034, - 3.494852, - 3.497677, - 3.500509, - 3.503349, - 3.506197, - 3.509052, - 3.511916, - 3.514787, - 3.517666, - 3.520553, - 3.523448, - 3.526352, - 3.529263, - 3.532183, - 3.535112, - 3.538048, - 3.540993, - 3.543947, - 3.546909, - 3.549878, - 3.552857, - 3.555843, - 3.558837, - 3.561838, - 3.564848, - 3.567865, - 3.570889, - 3.57392, - 3.576959, - 3.580004, - 3.583056, - 3.586114, - 3.589179, - 3.592251, - 3.595328, - 3.598411, - 3.601501, - 3.604595, - 3.607695, - 3.6108, - 3.613909, - 3.617023, - 3.62014, - 3.623262, - 3.626386, - 3.629514, - 3.632644, - 3.635778, - 3.638914, - 3.642053, - 3.645195, - 3.64834, - 3.651489, - 3.654641, - 3.657798, - 3.660958, - 3.664124, - 3.667295, - 3.670471, - 3.673654, - 3.676843, - 3.680039, - 3.683242, - 3.686452, - 3.68967, - 3.692896, - 3.69613, - 3.699371, - 3.70262, - 3.705878, - 3.709143, - 3.712416, - 3.715696, - 3.718985, - 3.72228, - 3.725583, - 3.728894, - 3.732211, - 3.735536, - 3.738867, - 3.742205, - 3.745549, - 3.7489, - 3.752256, - 3.755618, - 3.758986, - 3.762358, - 3.765735, - 3.769116, - 3.772501, - 3.775889, - 3.77928, - 3.782673, - 3.786067, - 3.789463, - 3.79286, - 3.796257, - 3.799654, - 3.80305, - 3.806446, - 3.809841, - 3.813235, - 3.816629, - 3.820021, - 3.823412, - 3.826802, - 3.830192, - 3.833581, - 3.836971, - 3.840361, - 3.843751, - 3.847143, - 3.850536, - 3.853931, - 3.857328, - 3.860728, - 3.86413, - 3.867536, - 3.870946, - 3.874359, - 3.877778, - 3.8812, - 3.884628, - 3.888062, - 3.891501, - 3.894947, - 3.898399, - 3.901858, - 3.905324, - 3.908798, - 3.912279, - 3.915769, - 3.919266, - 3.922773, - 3.926288, - 3.929812, - 3.933344, - 3.936886, - 3.940436, - 3.943995, - 3.947562, - 3.951138, - 3.954722, - 3.958313, - 3.961912, - 3.965518, - 3.969131, - 3.972749, - 3.976374, - 3.980004, - 3.983638, - 3.987278, - 3.990921, - 3.994569, - 3.99822, - 4.001874, - 4.005532, - 4.009192, - 4.012855, - 4.016521, - 4.02019, - 4.023861, - 4.027535, - 4.031212, - 4.034891, - 4.038572, - 4.042257, - 4.045944, - 4.049634, - 4.053327, - 4.057023, - 4.060722, - 4.064425, - 4.068131, - 4.071841, - 4.075555, - 4.079273, - 4.082995, - 4.086722, - 4.090454, - 4.09419, - 4.097933, - 4.101681, - 4.105435, - 4.109195, - 4.112962, - 4.116735, - 4.120516, - 4.124303, - 4.128098, - 4.131901, - 4.135711, - 4.139529, - 4.143354, - 4.147188, - 4.151029, - 4.154878, - 4.158736, - 4.1626, - 4.166473, - 4.170354, - 4.174242, - 4.178138, - 4.182041, - 4.185952, - 4.189871, - 4.193797, - 4.197731, - 4.201672, - 4.205621, - 4.209578, - 4.213543, - 4.217515, - 4.221495, - 4.225483, - 4.229478, - 4.233482, - 4.237494, - 4.241514, - 4.245542, - 4.249579, - 4.253624, - 4.257678, - 4.261741, - 4.265812, - 4.269892, - 4.273982, - 4.278081, - 4.282189, - 4.286307, - 4.290435, - 4.294573, - 4.298721, - 4.302878, - 4.307047, - 4.311225, - 4.315414, - 4.319614, - 4.323824, - 4.328045, - 4.332276, - 4.336518, - 4.34077, - 4.345032, - 4.349305, - 4.353587, - 4.35788, - 4.362182, - 4.366494, - 4.370814, - 4.375144, - 4.379482, - 4.383829, - 4.388184, - 4.392546, - 4.396916, - 4.401293, - 4.405677, - 4.410068, - 4.414465, - 4.418867, - 4.423276, - 4.427689, - 4.432108, - 4.436531, - 4.440959, - 4.445391, - 4.449827, - 4.454266, - 4.458709, - 4.463154, - 4.467603, - 4.472055, - 4.476509, - 4.480966, - 4.485425, - 4.489886, - 4.49435, - 4.498816, - 4.503285, - 4.507756, - 4.51223, - 4.516706, - 4.521185, - 4.525668, - 4.530153, - 4.534642, - 4.539135, - 4.543632, - 4.548133, - 4.552639, - 4.55715, - 4.561666, - 4.566188, - 4.570715, - 4.575249, - 4.57979, - 4.584337, - 4.588891, - 4.593454, - 4.598024, - 4.602602, - 4.607189, - 4.611785, - 4.61639, - 4.621005, - 4.625629, - 4.630264, - 4.634908, - 4.639564, - 4.64423, - 4.648907, - 4.653595, - 4.658295, - 4.663006, - 4.667729, - 4.672464, - 4.677211, - 4.681969, - 4.68674, - 4.691522, - 4.696317, - 4.701123, - 4.705942, - 4.710772, - 4.715613, - 4.720467, - 4.725332, - 4.730208, - 4.735095, - 4.739993, - 4.744902, - 4.749822, - 4.754751, - 4.759691, - 4.76464, - 4.769599, - 4.774567, - 4.779544, - 4.78453, - 4.789524, - 4.794526, - 4.799536, - 4.804554, - 4.809579, - 4.814612, - 4.819651, - 4.824697, - 4.829751, - 4.83481, - 4.839877, - 4.844949, - 4.850028, - 4.855113, - 4.860204, - 4.865302, - 4.870405, - 4.875515, - 4.880631, - 4.885752, - 4.890881, - 4.896015, - 4.901155, - 4.906302, - 4.911455, - 4.916615, - 4.921781, - 4.926953, - 4.932132, - 4.937317, - 4.942509, - 4.947708, - 4.952913, - 4.958125, - 4.963344, - 4.96857, - 4.973803, - 4.979043, - 4.98429, - 4.989544, - 4.994806, - 5.000074, - 5.00535, - 5.010634, - 5.015925, - 5.021223, - 5.026529, - 5.031843, - 5.037164, - 5.042494, - 5.047831, - 5.053176, - 5.058529, - 5.063891, - 5.06926, - 5.074638, - 5.080024, - 5.085419, - 5.090822, - 5.096234, - 5.101655, - 5.107084, - 5.112523, - 5.11797, - 5.123427, - 5.128893, - 5.134368, - 5.139852, - 5.145347, - 5.150851, - 5.156364, - 5.161887, - 5.16742, - 5.172963, - 5.178516, - 5.184078, - 5.18965, - 5.195232, - 5.200823, - 5.206423, - 5.212033, - 5.217652, - 5.22328, - 5.228917, - 5.234562, - 5.240215, - 5.245876, - 5.251544, - 5.257219, - 5.262901, - 5.268589, - 5.274283, - 5.279982, - 5.285685, - 5.291393, - 5.297104, - 5.302819, - 5.308535, - 5.314254, - 5.319974, - 5.325695, - 5.331416, - 5.337136, - 5.342856, - 5.348574, - 5.354291, - 5.360006, - 5.365719, - 5.37143, - 5.377138, - 5.382844, - 5.388548, - 5.39425, - 5.39995, - 5.405648, - 5.411346, - 5.417044, - 5.422743, - 5.428443, - 5.434145, - 5.439851, - 5.445561, - 5.451277, - 5.457, - 5.462731, - 5.468472, - 5.474223, - 5.479987, - 5.485765, - 5.491557, - 5.497365, - 5.503191, - 5.509036, - 5.5149, - 5.520786, - 5.526694, - 5.532625, - 5.53858, - 5.544561, - 5.550567, - 5.556599, - 5.562659, - 5.568745, - 5.574858, - 5.580998, - 5.587164, - 5.593356, - 5.599573, - 5.605815, - 5.61208, - 5.618368, - 5.624676, - 5.631005, - 5.637352, - 5.643715, - 5.650095, - 5.656488, - 5.662894, - 5.669311, - 5.675737, - 5.682172, - 5.688613, - 5.69506, - 5.701512, - 5.707966, - 5.714423, - 5.720882, - 5.727342, - 5.733802, - 5.740262, - 5.746723, - 5.753183, - 5.759644, - 5.766105, - 5.772567, - 5.77903, - 5.785496, - 5.791964, - 5.798437, - 5.804915, - 5.8114, - 5.817892, - 5.824393, - 5.830904, - 5.837427, - 5.843963, - 5.850513, - 5.857078, - 5.863659, - 5.870257, - 5.876873, - 5.883509, - 5.890164, - 5.89684, - 5.903538, - 5.910257, - 5.916998, - 5.923762, - 5.930549, - 5.937359, - 5.944192, - 5.951049, - 5.957928, - 5.96483, - 5.971754, - 5.978699, - 5.985665, - 5.992651, - 5.999655, - 6.006677, - 6.013715, - 6.020768, - 6.027834, - 6.034912, - 6.042001, - 6.049098, - 6.056203, - 6.063314, - 6.070429, - 6.077547, - 6.084667, - 6.091789, - 6.098909, - 6.106029, - 6.113147, - 6.120263, - 6.127376, - 6.134485, - 6.141591, - 6.148694, - 6.155793, - 6.16289, - 6.169983, - 6.177075, - 6.184164, - 6.191253, - 6.198341, - 6.20543, - 6.212521, - 6.219614, - 6.226712, - 6.233815, - 6.240924, - 6.248041, - 6.255168, - 6.262305, - 6.269455, - 6.276617, - 6.283795, - 6.290989, - 6.298199, - 6.305428, - 6.312676, - 6.319943, - 6.327231, - 6.33454, - 6.34187, - 6.349222, - 6.356594, - 6.363988, - 6.371403, - 6.378839, - 6.386294, - 6.393768, - 6.401261, - 6.408771, - 6.416298, - 6.42384, - 6.431396, - 6.438965, - 6.446546, - 6.454137, - 6.461737, - 6.469345, - 6.476959, - 6.484579, - 6.492203, - 6.499829, - 6.507457, - 6.515085, - 6.522713, - 6.53034, - 6.537965, - 6.545587, - 6.553207, - 6.560823, - 6.568436, - 6.576045, - 6.583652, - 6.591256, - 6.598857, - 6.606457, - 6.614056, - 6.621655, - 6.629255, - 6.636857, - 6.644461, - 6.65207, - 6.659685, - 6.667305, - 6.674934, - 6.682572, - 6.690221, - 6.697881, - 6.705554, - 6.713242, - 6.720944, - 6.728663, - 6.736399, - 6.744154, - 6.751927, - 6.759721, - 6.767534, - 6.775369, - 6.783225, - 6.791103, - 6.799004, - 6.806926, - 6.81487, - 6.822837, - 6.830825, - 6.838835, - 6.846866, - 6.854917, - 6.862989, - 6.871079, - 6.879188, - 6.887314, - 6.895456, - 6.903614, - 6.911787, - 6.919973, - 6.928171, - 6.93638, - 6.9446, - 6.952829, - 6.961067, - 6.969312, - 6.977565, - 6.985823, - 6.994087, - 7.002357, - 7.010632, - 7.018911, - 7.027194, - 7.035482, - 7.043775, - 7.052072, - 7.060373, - 7.06868, - 7.076993, - 7.085311, - 7.093635, - 7.101967, - 7.110306, - 7.118654, - 7.12701, - 7.135376, - 7.143752, - 7.15214, - 7.16054, - 7.168952, - 7.177378, - 7.185818, - 7.194273, - 7.202743, - 7.21123, - 7.219734, - 7.228256, - 7.236795, - 7.245353, - 7.253931, - 7.262527, - 7.271143, - 7.279779, - 7.288434, - 7.297109, - 7.305804, - 7.314519, - 7.323252, - 7.332005, - 7.340777, - 7.349567, - 7.358374, - 7.367199, - 7.376041, - 7.384899, - 7.393773, - 7.402662, - 7.411566, - 7.420484, - 7.429415, - 7.438359, - 7.447316, - 7.456285, - 7.465265, - 7.474256, - 7.483258, - 7.49227, - 7.501292, - 7.510323, - 7.519363, - 7.528411, - 7.537468, - 7.546533, - 7.555606, - 7.564687, - 7.573776, - 7.582872, - 7.591975, - 7.601087, - 7.610206, - 7.619333, - 7.628468, - 7.637612, - 7.646765, - 7.655927, - 7.665099, - 7.67428, - 7.683473, - 7.692676, - 7.701891, - 7.711118, - 7.720358, - 7.72961, - 7.738875, - 7.748153, - 7.757446, - 7.766752, - 7.776072, - 7.785406, - 7.794754, - 7.804116, - 7.813492, - 7.822883, - 7.832287, - 7.841705, - 7.851136, - 7.86058, - 7.870037, - 7.879507, - 7.888989, - 7.898483, - 7.907988, - 7.917505, - 7.927033, - 7.93657, - 7.946118, - 7.955675, - 7.965242, - 7.974816, - 7.984399, - 7.993989, - 8.003586, - 8.01319, - 8.0228, - 8.032416, - 8.042036, - 8.051662, - 8.061292, - 8.070926, - 8.080563, - 8.090204, - 8.099849, - 8.109496, - 8.119146, - 8.1288, - 8.138456, - 8.148114, - 8.157776, - 8.16744, - 8.177106, - 8.186776, - 8.196449, - 8.206124, - 8.215802, - 8.225483, - 8.235167, - 8.244853, - 8.254542, - 8.264234, - 8.273927, - 8.283623, - 8.29332, - 8.303019, - 8.312718, - 8.322419, - 8.332121, - 8.341824, - 8.351527, - 8.361232, - 8.370937, - 8.380645, - 8.390355, - 8.400068, - 8.409786, - 8.41951, - 8.429241, - 8.438983, - 8.448735, - 8.458503, - 8.468286, - 8.47809, - 8.487915, - 8.497766, - 8.507646, - 8.517556, - 8.527501, - 8.537483, - 8.547504, - 8.557568, - 8.567675, - 8.57783, - 8.588031, - 8.598282, - 8.608584, - 8.618935, - 8.629337, - 8.639789, - 8.650291, - 8.66084, - 8.671436, - 8.682076, - 8.692759, - 8.703482, - 8.714242, - 8.725037, - 8.735863, - 8.746717, - 8.757596, - 8.768497, - 8.779415, - 8.790347, - 8.80129, - 8.812239, - 8.823191, - 8.834142, - 8.845089, - 8.856027, - 8.866954, - 8.877867, - 8.888763, - 8.89964, - 8.910496, - 8.92133, - 8.932141, - 8.942928, - 8.953692, - 8.964433, - 8.975152, - 8.985851, - 8.996531, - 9.007195, - 9.017845, - 9.028483, - 9.039114, - 9.049741, - 9.060368, - 9.070998, - 9.081636, - 9.092286, - 9.102953, - 9.11364, - 9.124353, - 9.135095, - 9.145871, - 9.156684, - 9.167537, - 9.178435, - 9.18938, - 9.200374, - 9.21142, - 9.22252, - 9.233675, - 9.244886, - 9.256154, - 9.267479, - 9.278861, - 9.2903, - 9.301794, - 9.313344, - 9.324946, - 9.336599, - 9.348301, - 9.360049, - 9.37184, - 9.38367, - 9.395537, - 9.407436, - 9.419363, - 9.431315, - 9.443287, - 9.455274, - 9.467274, - 9.47928, - 9.49129, - 9.503299, - 9.515304, - 9.527301, - 9.539287, - 9.551258, - 9.563213, - 9.575148, - 9.587063, - 9.598955, - 9.610825, - 9.62267, - 9.634492, - 9.64629, - 9.658065, - 9.669818, - 9.681551, - 9.693265, - 9.704964, - 9.716648, - 9.728321, - 9.739986, - 9.751645, - 9.763303, - 9.774963, - 9.786627, - 9.798301, - 9.809986, - 9.821686, - 9.833406, - 9.845147, - 9.856914, - 9.868709, - 9.880534, - 9.892393, - 9.904286, - 9.916217, - 9.928186, - 9.940194, - 9.952243, - 9.964332, - 9.976461, - 9.988631, - 10.000839, - 10.013086, - 10.025369, - 10.037688, - 10.050039, - 10.062421, - 10.074831, - 10.087268, - 10.099727, - 10.112207, - 10.124704, - 10.137216, - 10.14974, - 10.162273, - 10.174811, - 10.187353, - 10.199896, - 10.212437, - 10.224974, - 10.237504, - 10.250027, - 10.26254, - 10.275042, - 10.287532, - 10.300009, - 10.312473, - 10.324924, - 10.337362, - 10.349787, - 10.3622, - 10.374603, - 10.386997, - 10.399383, - 10.411763, - 10.424141, - 10.436518, - 10.448896, - 10.46128, - 10.473671, - 10.486073, - 10.498488, - 10.510921, - 10.523372, - 10.535847, - 10.548347, - 10.560874, - 10.573432, - 10.586022, - 10.598646, - 10.611306, - 10.624004, - 10.63674, - 10.649516, - 10.662331, - 10.675186, - 10.688081, - 10.701016, - 10.713989, - 10.727, - 10.740048, - 10.75313, - 10.766246, - 10.779393, - 10.792569, - 10.805771, - 10.818998, - 10.832246, - 10.845513, - 10.858797, - 10.872094, - 10.885402, - 10.898719, - 10.912041, - 10.925367, - 10.938694, - 10.95202, - 10.965343, - 10.978661, - 10.991974, - 11.005279, - 11.018576, - 11.031864, - 11.045143, - 11.058413, - 11.071673, - 11.084924, - 11.098168, - 11.111404, - 11.124633, - 11.137858, - 11.151079, - 11.164299, - 11.177518, - 11.190739, - 11.203965, - 11.217197, - 11.230437, - 11.243688, - 11.256952, - 11.270232, - 11.28353, - 11.296848, - 11.310189, - 11.323554, - 11.336946, - 11.350366, - 11.363817, - 11.3773, - 11.390816, - 11.404367, - 11.417953, - 11.431576, - 11.445234, - 11.45893, - 11.472661, - 11.486429, - 11.500231, - 11.514068, - 11.527937, - 11.541836, - 11.555766, - 11.569722, - 11.583703, - 11.597707, - 11.611731, - 11.625772, - 11.639829, - 11.653899, - 11.667978, - 11.682066, - 11.696158, - 11.710253, - 11.724349, - 11.738443, - 11.752533, - 11.766618, - 11.780695, - 11.794763, - 11.80882, - 11.822866, - 11.836897, - 11.850914, - 11.864916, - 11.878901, - 11.892868, - 11.906817, - 11.920748, - 11.934658, - 11.948549, - 11.96242, - 11.976269, - 11.990097, - 12.003902, - 12.017684, - 12.031441, - 12.045174, - 12.05888, - 12.072559, - 12.086208, - 12.099827, - 12.113415, - 12.12697, - 12.140491, - 12.153978, - 12.16743, - 12.180848, - 12.194233, - 12.207586, - 12.22091, - 12.234209, - 12.247488, - 12.260752, - 12.274009, - 12.287266, - 12.300532, - 12.313817, - 12.327132, - 12.340488, - 12.353897, - 12.36737, - 12.380919, - 12.394555, - 12.40829, - 12.422132, - 12.43609, - 12.450171, - 12.464382, - 12.478724, - 12.4932, - 12.50781, - 12.522551, - 12.537421, - 12.552412, - 12.567519, - 12.582733, - 12.598044, - 12.61344, - 12.628912, - 12.644447, - 12.660032, - 12.675655, - 12.691304, - 12.706967, - 12.722631, - 12.738287, - 12.753922, - 12.769528, - 12.785095, - 12.800614, - 12.816078, - 12.83148, - 12.846814, - 12.862073, - 12.877254, - 12.892351, - 12.907361, - 12.922282, - 12.937112, - 12.951849, - 12.966492, - 12.981044, - 12.995506, - 13.00988, - 13.024172, - 13.038386, - 13.052529, - 13.066609, - 13.080634, - 13.094614, - 13.108561, - 13.122485, - 13.136398, - 13.150313, - 13.164244, - 13.178201, - 13.192197, - 13.206245, - 13.220355, - 13.234537, - 13.2488, - 13.263153, - 13.277602, - 13.292151, - 13.306806, - 13.321569, - 13.336442, - 13.351424, - 13.366514, - 13.381712, - 13.397014, - 13.412416, - 13.427914, - 13.443503, - 13.459177, - 13.47493, - 13.490755, - 13.506646, - 13.522594, - 13.538591, - 13.554631, - 13.570703, - 13.586801, - 13.602914, - 13.619035, - 13.635153, - 13.65126, - 13.667348, - 13.683407, - 13.699429, - 13.715407, - 13.731333, - 13.7472, - 13.763003, - 13.778736, - 13.794396, - 13.80998, - 13.825485, - 13.840913, - 13.856262, - 13.871535, - 13.886736, - 13.901867, - 13.916934, - 13.931944, - 13.946902, - 13.961817, - 13.976695, - 13.991547, - 14.006379, - 14.021201, - 14.036021, - 14.050848, - 14.06569, - 14.080555, - 14.095449, - 14.110381, - 14.125355, - 14.140379, - 14.155456, - 14.170592, - 14.185791, - 14.201055, - 14.216388, - 14.231791, - 14.247265, - 14.262812, - 14.278432, - 14.294123, - 14.309884, - 14.325713, - 14.341608, - 14.357565, - 14.37358, - 14.389647, - 14.405762, - 14.421918, - 14.438108, - 14.454326, - 14.470565, - 14.486815, - 14.503071, - 14.519323, - 14.535565, - 14.551788, - 14.567985, - 14.58415, - 14.600275, - 14.616357, - 14.632389, - 14.648367, - 14.664288, - 14.68015, - 14.695951, - 14.71169, - 14.727367, - 14.742984, - 14.758543, - 14.774045, - 14.789493, - 14.804893, - 14.820247, - 14.835561, - 14.850839, - 14.866088, - 14.881312, - 14.896517, - 14.91171, - 14.926897, - 14.942083, - 14.957275, - 14.972479, - 14.987702, - 15.002948, - 15.018225, - 15.033538, - 15.048891, - 15.064291, - 15.079742, - 15.095248, - 15.110813, - 15.12644, - 15.142133, - 15.157892, - 15.173719, - 15.189614, - 15.205579, - 15.221611, - 15.23771, - 15.253872, - 15.270096, - 15.286376, - 15.302709, - 15.319088, - 15.33551, - 15.351966, - 15.368452, - 15.384961, - 15.401486, - 15.418021, - 15.434559, - 15.451095, - 15.467622, - 15.484135, - 15.50063, - 15.5171, - 15.533543, - 15.549955, - 15.566331, - 15.58267, - 15.598968, - 15.615223, - 15.631434, - 15.647599, - 15.663718, - 15.679788, - 15.69581, - 15.711784, - 15.727709, - 15.743587, - 15.759418, - 15.775205, - 15.790949, - 15.806652, - 15.822318, - 15.837949, - 15.853548, - 15.86912, - 15.884667, - 15.900194, - 15.915703, - 15.931199, - 15.946685, - 15.962163, - 15.977635, - 15.993105, - 16.008571, - 16.024036, - 16.039497, - 16.054953, - 16.070401, - 16.085836, - 16.101254, - 16.11665, - 16.132017, - 16.147349, - 16.162639, - 16.17788, - 16.193066, - 16.208193, - 16.223255, - 16.238251, - 16.25318, - 16.268044, - 16.282847, - 16.297596, - 16.312299, - 16.326969, - 16.341619, - 16.356267, - 16.370929, - 16.385626, - 16.400377, - 16.415202, - 16.430123, - 16.445158, - 16.460325, - 16.475641, - 16.49112, - 16.506773, - 16.52261, - 16.538634, - 16.554849, - 16.571253, - 16.587845, - 16.604615, - 16.621556, - 16.638654, - 16.655896, - 16.673266, - 16.690748, - 16.708322, - 16.725972, - 16.743679, - 16.761426, - 16.779195, - 16.796969, - 16.814734, - 16.832473, - 16.850175, - 16.867825, - 16.885413, - 16.902927, - 16.920357, - 16.937692, - 16.954924, - 16.972044, - 16.989043, - 17.005914, - 17.022652, - 17.039249, - 17.055703, - 17.072009, - 17.088166, - 17.104173, - 17.120033, - 17.135748, - 17.151324, - 17.166769, - 17.18209, - 17.1973, - 17.21241, - 17.227436, - 17.242393, - 17.257296, - 17.272165, - 17.287016, - 17.301868, - 17.316738, - 17.331644, - 17.346603, - 17.361629, - 17.376738, - 17.391942, - 17.407251, - 17.422676, - 17.438224, - 17.453901, - 17.469712, - 17.485658, - 17.501742, - 17.517963, - 17.534319, - 17.550807, - 17.567423, - 17.584163, - 17.60102, - 17.617987, - 17.635057, - 17.65222, - 17.669468, - 17.686791, - 17.704177, - 17.721616, - 17.739096, - 17.756605, - 17.774129, - 17.791655, - 17.809171, - 17.826663, - 17.844117, - 17.86152, - 17.87886, - 17.896125, - 17.913305, - 17.930388, - 17.947366, - 17.964232, - 17.980979, - 17.997605, - 18.014105, - 18.03048, - 18.046729, - 18.062855, - 18.078863, - 18.094758, - 18.110546, - 18.126235, - 18.141835, - 18.157352, - 18.172798, - 18.188182, - 18.203516, - 18.218809, - 18.234073, - 18.249318, - 18.264555, - 18.279795, - 18.295047, - 18.310321, - 18.325625, - 18.340968, - 18.356357, - 18.371799, - 18.3873, - 18.402865, - 18.418498, - 18.434203, - 18.449982, - 18.465837, - 18.481769, - 18.497776, - 18.513858, - 18.530012, - 18.546236, - 18.562524, - 18.578871, - 18.595272, - 18.61172, - 18.628206, - 18.644722, - 18.661259, - 18.677809, - 18.69436, - 18.710903, - 18.727427, - 18.743924, - 18.760382, - 18.776793, - 18.793148, - 18.809438, - 18.825656, - 18.841795, - 18.857849, - 18.873815, - 18.889686, - 18.905462, - 18.921141, - 18.93672, - 18.952202, - 18.967586, - 18.982875, - 18.998072, - 19.013179, - 19.028202, - 19.043144, - 19.058011, - 19.072809, - 19.087543, - 19.102221, - 19.116848, - 19.131432, - 19.145979, - 19.160499, - 19.174997, - 19.189482, - 19.20396, - 19.21844, - 19.232927, - 19.247428, - 19.261951, - 19.276498, - 19.291078, - 19.305693, - 19.32035, - 19.33505, - 19.349798, - 19.364596, - 19.379444, - 19.394342, - 19.40929, - 19.424286, - 19.439326, - 19.454406, - 19.469522, - 19.484668, - 19.499838, - 19.515024, - 19.530218, - 19.545409, - 19.560591, - 19.575752, - 19.590886, - 19.605981, - 19.621029, - 19.636023, - 19.650953, - 19.66581, - 19.680587, - 19.695273, - 19.709862, - 19.724342, - 19.738705, - 19.75294, - 19.767037, - 19.780985, - 19.794774, - 19.808393, - 19.821833, - 19.835085, - 19.848141, - 19.860998, - 19.873651, - 19.886102, - 19.898355, - 19.910418, - 19.922303, - 19.934028, - 19.945615, - 19.957088, - 19.968479, - 19.979821, - 19.99115, - 20.002505, - 20.013924, - 20.025449, - 20.037117, - 20.048966, - 20.061028, - 20.073334, - 20.08591, - 20.098774, - 20.111942, - 20.125424, - 20.13922, - 20.15333, - 20.167744, - 20.182449, - 20.197428, - 20.21266, - 20.228119, - 20.243781, - 20.259617, - 20.275599, - 20.291699, - 20.30789, - 20.324143, - 20.340435, - 20.356739, - 20.373034, - 20.389297, - 20.405509, - 20.421649, - 20.437698, - 20.453639, - 20.469454, - 20.485125, - 20.500635, - 20.515966, - 20.531104, - 20.546031, - 20.560734, - 20.5752, - 20.589417, - 20.603377, - 20.617073, - 20.630503, - 20.643667, - 20.656569, - 20.669219, - 20.681627, - 20.69381, - 20.705787, - 20.717582, - 20.72922, - 20.74073, - 20.752142, - 20.763486, - 20.774796, - 20.786102, - 20.797436, - 20.808827, - 20.820303, - 20.831889, - 20.843609, - 20.855481, - 20.867523, - 20.879748, - 20.892168, - 20.90479, - 20.917619, - 20.930657, - 20.943906, - 20.957363, - 20.971024, - 20.984886, - 20.99894, - 21.013179, - 21.027593, - 21.042173, - 21.056907, - 21.071782, - 21.086785, - 21.101897, - 21.117106, - 21.132391, - 21.147736, - 21.163119, - 21.178523, - 21.193925, - 21.209305, - 21.224642, - 21.239915, - 21.255103, - 21.270185, - 21.285142, - 21.299958, - 21.314615, - 21.3291, - 21.3434, - 21.357507, - 21.371413, - 21.385115, - 21.398612, - 21.411906, - 21.425001, - 21.437905, - 21.450626, - 21.463178, - 21.475574, - 21.487829, - 21.499959, - 21.511982, - 21.523916, - 21.535779, - 21.54759, - 21.559366, - 21.571125, - 21.582884, - 21.594658, - 21.606464, - 21.618314, - 21.630223, - 21.642202, - 21.654263, - 21.666414, - 21.678665, - 21.691022, - 21.703494, - 21.716084, - 21.728797, - 21.741635, - 21.7546, - 21.767692, - 21.780909, - 21.794247, - 21.807702, - 21.821268, - 21.834937, - 21.848699, - 21.862542, - 21.876456, - 21.890425, - 21.904435, - 21.918471, - 21.932516, - 21.946553, - 21.960566, - 21.974538, - 21.988452, - 22.002292, - 22.016043, - 22.029693, - 22.043227, - 22.056635, - 22.069908, - 22.083037, - 22.096016, - 22.108842, - 22.12151, - 22.134021, - 22.146374, - 22.158572, - 22.170618, - 22.182517, - 22.194274, - 22.205896, - 22.217391, - 22.228769, - 22.240037, - 22.251207, - 22.262289, - 22.273292, - 22.28423, - 22.295113, - 22.305953, - 22.316761, - 22.327549, - 22.338329, - 22.349113, - 22.35991, - 22.370732, - 22.381588, - 22.392488, - 22.40344, - 22.41445, - 22.425526, - 22.436671, - 22.447889, - 22.459181, - 22.470545, - 22.481981, - 22.493482, - 22.505041, - 22.516649, - 22.528294, - 22.539961, - 22.551634, - 22.563293, - 22.57492, - 22.586491, - 22.597986, - 22.609384, - 22.620662, - 22.631802, - 22.642787, - 22.653602, - 22.664237, - 22.674686, - 22.684947, - 22.695021, - 22.704919, - 22.714651, - 22.724236, - 22.733697, - 22.743058, - 22.752349, - 22.7616, - 22.770845, - 22.780116, - 22.789444, - 22.79886, - 22.80839, - 22.81806, - 22.827889, - 22.837892, - 22.848081, - 22.858464, - 22.869042, - 22.879812, - 22.890767, - 22.901897, - 22.913189, - 22.924627, - 22.936194, - 22.947872, - 22.959644, - 22.971493, - 22.983403, - 22.995358, - 23.007345, - 23.019352, - 23.031369, - 23.043386, - 23.055394, - 23.067387, - 23.079355, - 23.091292, - 23.103188, - 23.115035, - 23.126822, - 23.138539, - 23.150174, - 23.161715, - 23.173149, - 23.184463, - 23.195646, - 23.206684, - 23.217569, - 23.228288, - 23.238838, - 23.249213, - 23.259415, - 23.269445, - 23.279311, - 23.289024, - 23.298598, - 23.308048, - 23.317395, - 23.32666, - 23.335866, - 23.345036, - 23.354193, - 23.36336, - 23.372559, - 23.38181, - 23.391129, - 23.400533, - 23.410032, - 23.419638, - 23.429357, - 23.439193, - 23.449149, - 23.459224, - 23.469418, - 23.479728, - 23.49015, - 23.500681, - 23.511316, - 23.52205, - 23.532879, - 23.543799, - 23.554806, - 23.565895, - 23.577062, - 23.588302, - 23.59961, - 23.61098, - 23.622404, - 23.633876, - 23.645385, - 23.656921, - 23.668472, - 23.680026, - 23.691567, - 23.703082, - 23.714556, - 23.725972, - 23.737317, - 23.748576, - 23.759735, - 23.770784, - 23.781712, - 23.792511, - 23.803176, - 23.813703, - 23.824092, - 23.834343, - 23.844461, - 23.85445, - 23.864318, - 23.874073, - 23.883726, - 23.893287, - 23.902768, - 23.912181, - 23.921538, - 23.930851, - 23.940131, - 23.949389, - 23.958634, - 23.967877, - 23.977126, - 23.986389, - 23.995673, - 24.004984, - 24.014328, - 24.023712, - 24.03314, - 24.042618, - 24.05215, - 24.06174, - 24.071393, - 24.081113, - 24.090903, - 24.100766, - 24.110704, - 24.120718, - 24.130809, - 24.140977, - 24.151218, - 24.161531, - 24.17191, - 24.182349, - 24.19284, - 24.203376, - 24.213944, - 24.224536, - 24.235138, - 24.245739, - 24.256327, - 24.266887, - 24.277409, - 24.287881, - 24.298291, - 24.30863, - 24.318888, - 24.329059, - 24.339136, - 24.349114, - 24.358988, - 24.368757, - 24.37842, - 24.387975, - 24.397423, - 24.406766, - 24.416006, - 24.425144, - 24.434184, - 24.443128, - 24.451976, - 24.460733, - 24.4694, - 24.477982, - 24.48648, - 24.4949, - 24.503247, - 24.511524, - 24.519738, - 24.527893, - 24.535997, - 24.544055, - 24.552073, - 24.560057, - 24.568011, - 24.57594, - 24.583846, - 24.591731, - 24.599594, - 24.607432, - 24.615242, - 24.623017, - 24.630749, - 24.638429, - 24.646046, - 24.653588, - 24.661047, - 24.668411, - 24.675673, - 24.682829, - 24.689877, - 24.696821, - 24.703667, - 24.710429, - 24.717124, - 24.723775, - 24.730409, - 24.737055, - 24.743747, - 24.750517, - 24.757402, - 24.764432, - 24.77164, - 24.779053, - 24.786692, - 24.794576, - 24.802715, - 24.811114, - 24.819772, - 24.828678, - 24.83782, - 24.847178, - 24.856727, - 24.866439, - 24.876285, - 24.886233, - 24.896252, - 24.90631, - 24.916378, - 24.926431, - 24.936444, - 24.946397, - 24.956273, - 24.966056, - 24.975738, - 24.985309, - 24.994763, - 25.004096, - 25.013303, - 25.022382, - 25.03133, - 25.040142, - 25.048815, - 25.057343, - 25.06572, - 25.07394, - 25.081995, - 25.08988, - 25.097587, - 25.105113, - 25.112454, - 25.119611, - 25.126586, - 25.133385, - 25.140018, - 25.146499, - 25.152845, - 25.159078, - 25.16522, - 25.171299, - 25.177343, - 25.183382, - 25.189447, - 25.195565, - 25.201766, - 25.208077, - 25.21452, - 25.221116, - 25.227881, - 25.23483, - 25.24197, - 25.249307, - 25.256841, - 25.264572, - 25.272494, - 25.2806, - 25.28888, - 25.297322, - 25.305916, - 25.314648, - 25.323506, - 25.332477, - 25.341549, - 25.350709, - 25.359946, - 25.369248, - 25.378605, - 25.388005, - 25.397436, - 25.406888, - 25.416348, - 25.425803, - 25.435239, - 25.444643, - 25.453997, - 25.463288, - 25.472498, - 25.481613, - 25.490615, - 25.499489, - 25.508223, - 25.516804, - 25.525221, - 25.533467, - 25.541536, - 25.549426, - 25.557138, - 25.564675, - 25.572044, - 25.579254, - 25.586313, - 25.593237, - 25.600039, - 25.606737, - 25.613347, - 25.619888, - 25.626378, - 25.632835, - 25.639274, - 25.645714, - 25.652167, - 25.658647, - 25.665166, - 25.671733, - 25.678358, - 25.685047, - 25.691806, - 25.69864, - 25.705552, - 25.712546, - 25.719623, - 25.726785, - 25.734034, - 25.74137, - 25.748795, - 25.756307, - 25.763908, - 25.771596, - 25.779369, - 25.787224, - 25.795158, - 25.803166, - 25.811241, - 25.819374, - 25.827558, - 25.835781, - 25.844031, - 25.852295, - 25.86056, - 25.868811, - 25.877034, - 25.885213, - 25.893336, - 25.901387, - 25.909356, - 25.91723, - 25.925, - 25.932659, - 25.9402, - 25.947619, - 25.954914, - 25.962084, - 25.96913, - 25.976055, - 25.982862, - 25.989555, - 25.996141, - 26.002626, - 26.009015, - 26.015317, - 26.021537, - 26.027682, - 26.033759, - 26.039774, - 26.045732, - 26.05164, - 26.057502, - 26.063321, - 26.069103, - 26.07485, - 26.080563, - 26.086244, - 26.091893, - 26.097508, - 26.103087, - 26.108625, - 26.114115, - 26.119552, - 26.124927, - 26.13023, - 26.135452, - 26.140585, - 26.145619, - 26.150548, - 26.155368, - 26.160079, - 26.164685, - 26.169194, - 26.17362, - 26.177982, - 26.182303, - 26.186611, - 26.190937, - 26.195316, - 26.199783, - 26.204373, - 26.20912, - 26.214057, - 26.21921, - 26.224604, - 26.230253, - 26.23617, - 26.242358, - 26.248812, - 26.255524, - 26.262475, - 26.269644, - 26.277004, - 26.284524, - 26.292172, - 26.299914, - 26.307715, - 26.315543, - 26.323369, - 26.331163, - 26.338903, - 26.346567, - 26.35414, - 26.361608, - 26.368962, - 26.376196, - 26.383305, - 26.390288, - 26.397142, - 26.403867, - 26.410461, - 26.416923, - 26.423251, - 26.429441, - 26.435488, - 26.441387, - 26.447133, - 26.452719, - 26.458142, - 26.463396, - 26.468481, - 26.473396, - 26.478146, - 26.482738, - 26.487182, - 26.491493, - 26.495689, - 26.499793, - 26.503829, - 26.507824, - 26.511808, - 26.51581, - 26.519859, - 26.523987, - 26.528219, - 26.532583, - 26.537101, - 26.541793, - 26.546672, - 26.551752, - 26.557038, - 26.562533, - 26.568237, - 26.574144, - 26.580246, - 26.586534, - 26.592994, - 26.599613, - 26.606376, - 26.613266, - 26.62027, - 26.627372, - 26.634557, - 26.641812, - 26.649124, - 26.656479, - 26.663867, - 26.671276, - 26.678694, - 26.686109, - 26.69351, - 26.700885, - 26.70822, - 26.715503, - 26.722718, - 26.729853, - 26.736892, - 26.743821, - 26.750626, - 26.757294, - 26.763814, - 26.770175, - 26.77637, - 26.782393, - 26.78824, - 26.793914, - 26.799415, - 26.804752, - 26.809931, - 26.814966, - 26.81987, - 26.824659, - 26.829351, - 26.833964, - 26.838518, - 26.843031, - 26.847523, - 26.852013, - 26.856516, - 26.861049, - 26.865626, - 26.870259, - 26.874958, - 26.879733, - 26.88459, - 26.889535, - 26.894571, - 26.899703, - 26.904931, - 26.910258, - 26.915683, - 26.921207, - 26.926829, - 26.932549, - 26.938365, - 26.944275, - 26.950278, - 26.956369, - 26.962546, - 26.968802, - 26.975132, - 26.981528, - 26.987983, - 26.994485, - 27.001025, - 27.007589, - 27.014165, - 27.020738, - 27.027294, - 27.033817, - 27.040293, - 27.046706, - 27.053042, - 27.059288, - 27.065432, - 27.071462, - 27.077371, - 27.08315, - 27.088795, - 27.094301, - 27.099667, - 27.104893, - 27.10998, - 27.114932, - 27.119754, - 27.12445, - 27.129028, - 27.133494, - 27.137857, - 27.142123, - 27.146301, - 27.150398, - 27.154421, - 27.158377, - 27.162271, - 27.166108, - 27.169891, - 27.173622, - 27.177301, - 27.180927, - 27.184496, - 27.188005, - 27.191446, - 27.194814, - 27.1981, - 27.201296, - 27.204397, - 27.207396, - 27.21029, - 27.213079, - 27.215767, - 27.218362, - 27.220877, - 27.223332, - 27.22575, - 27.228159, - 27.230594, - 27.233089, - 27.235684, - 27.238418, - 27.241329, - 27.244455, - 27.247829, - 27.251478, - 27.255427, - 27.259691, - 27.264277, - 27.269188, - 27.274414, - 27.279943, - 27.285751, - 27.291812, - 27.298093, - 27.304558, - 27.311168, - 27.317883, - 27.324665, - 27.331476, - 27.338279, - 27.345044, - 27.35174, - 27.358344, - 27.364836, - 27.371198, - 27.377418, - 27.383486, - 27.389395, - 27.395138, - 27.400713, - 27.406115, - 27.411341, - 27.416386, - 27.421246, - 27.425916, - 27.430391, - 27.434663, - 27.438729, - 27.442581, - 27.446218, - 27.449637, - 27.452839, - 27.45583, - 27.458615, - 27.461209, - 27.463626, - 27.465889, - 27.46802, - 27.470049, - 27.472006, - 27.473926, - 27.475843, - 27.477792, - 27.47981, - 27.481929, - 27.484182, - 27.486597, - 27.489199, - 27.492009, - 27.495044, - 27.498315, - 27.501828, - 27.505588, - 27.509591, - 27.513833, - 27.518305, - 27.522996, - 27.527893, - 27.532981, - 27.538246, - 27.54367, - 27.549238, - 27.554936, - 27.560747, - 27.566658, - 27.572655, - 27.578723, - 27.58485, - 27.59102, - 27.597222, - 27.60344, - 27.609659, - 27.615863, - 27.622036, - 27.628158, - 27.634213, - 27.640182, - 27.646045, - 27.651783, - 27.65738, - 27.662817, - 27.668081, - 27.67316, - 27.678042, - 27.682721, - 27.687195, - 27.691462, - 27.695527, - 27.699396, - 27.70308, - 27.706593, - 27.70995, - 27.71317, - 27.716273, - 27.719279, - 27.72221, - 27.725088, - 27.727934, - 27.730767, - 27.733608, - 27.736472, - 27.739376, - 27.742334, - 27.745358, - 27.748457, - 27.751641, - 27.754915, - 27.758287, - 27.761761, - 27.765339, - 27.769026, - 27.772822, - 27.77673, - 27.780751, - 27.784884, - 27.78913, - 27.793486, - 27.797951, - 27.802522, - 27.807194, - 27.811961, - 27.816817, - 27.821751, - 27.826754, - 27.831815, - 27.83692, - 27.842054, - 27.847203, - 27.85235, - 27.857478, - 27.862572, - 27.867613, - 27.872587, - 27.877479, - 27.882274, - 27.88696, - 27.891527, - 27.895965, - 27.900267, - 27.904429, - 27.908448, - 27.912323, - 27.916054, - 27.919644, - 27.923096, - 27.926416, - 27.92961, - 27.932683, - 27.935644, - 27.938499, - 27.941255, - 27.943918, - 27.946495, - 27.948989, - 27.951405, - 27.953744, - 27.956007, - 27.958192, - 27.960297, - 27.962317, - 27.964248, - 27.966082, - 27.967813, - 27.969435, - 27.970943, - 27.972334, - 27.973608, - 27.974768, - 27.975821, - 27.976781, - 27.977665, - 27.978497, - 27.979304, - 27.980121, - 27.980984, - 27.981934, - 27.983014, - 27.984265, - 27.985729, - 27.987445, - 27.989446, - 27.991762, - 27.994414, - 27.997419, - 28.000781, - 28.004499, - 28.008563, - 28.012955, - 28.017651, - 28.022618, - 28.027821, - 28.033221, - 28.038775, - 28.044441, - 28.050177, - 28.055943, - 28.061702, - 28.067419, - 28.073064, - 28.078612, - 28.084041, - 28.089335, - 28.09448, - 28.099465, - 28.104283, - 28.108927, - 28.113393, - 28.117677, - 28.121774, - 28.12568, - 28.129389, - 28.132895, - 28.136192, - 28.139273, - 28.142134, - 28.144768, - 28.147174, - 28.149349, - 28.151297, - 28.153022, - 28.154536, - 28.155851, - 28.156987, - 28.157968, - 28.158819, - 28.159574, - 28.160265, - 28.16093, - 28.161606, - 28.162332, - 28.163144, - 28.164079, - 28.165171, - 28.166449, - 28.16794, - 28.169664, - 28.171639, - 28.173876, - 28.17638, - 28.179155, - 28.182197, - 28.185499, - 28.189051, - 28.19284, - 28.196851, - 28.201067, - 28.205469, - 28.210041, - 28.214763, - 28.219617, - 28.224586, - 28.229653, - 28.2348, - 28.240011, - 28.245271, - 28.250563, - 28.255871, - 28.261178, - 28.266467, - 28.271721, - 28.276922, - 28.282051, - 28.287088, - 28.292015, - 28.296812, - 28.301461, - 28.305945, - 28.310248, - 28.314357, - 28.31826, - 28.321948, - 28.325418, - 28.328666, - 28.331696, - 28.334514, - 28.337127, - 28.33955, - 28.341798, - 28.343889, - 28.345843, - 28.347682, - 28.34943, - 28.351111, - 28.352747, - 28.354362, - 28.355978, - 28.357615, - 28.359293, - 28.361028, - 28.362838, - 28.364733, - 28.366728, - 28.36883, - 28.371048, - 28.373389, - 28.375859, - 28.37846, - 28.381197, - 28.384071, - 28.387084, - 28.390236, - 28.393526, - 28.396953, - 28.400514, - 28.404207, - 28.408025, - 28.411962, - 28.416011, - 28.420161, - 28.424403, - 28.428723, - 28.433108, - 28.43754, - 28.442005, - 28.446484, - 28.450958, - 28.455408, - 28.459816, - 28.464162, - 28.468428, - 28.472598, - 28.476656, - 28.480586, - 28.484377, - 28.488019, - 28.491503, - 28.494823, - 28.497976, - 28.50096, - 28.503776, - 28.506425, - 28.508913, - 28.511243, - 28.513423, - 28.515459, - 28.51736, - 28.519131, - 28.520781, - 28.522314, - 28.523737, - 28.525051, - 28.526261, - 28.527364, - 28.528361, - 28.529247, - 28.530018, - 28.53067, - 28.531197, - 28.531593, - 28.531856, - 28.531985, - 28.531981, - 28.531851, - 28.531606, - 28.531264, - 28.530847, - 28.530383, - 28.529906, - 28.529456, - 28.529075, - 28.52881, - 28.528707, - 28.528813, - 28.529173, - 28.529829, - 28.530816, - 28.532165, - 28.533897, - 28.536026, - 28.538555, - 28.54148, - 28.544787, - 28.548454, - 28.552451, - 28.556741, - 28.561286, - 28.566039, - 28.570955, - 28.575988, - 28.581092, - 28.586225, - 28.591345, - 28.596418, - 28.601411, - 28.606299, - 28.611057, - 28.61567, - 28.620121, - 28.6244, - 28.628498, - 28.632407, - 28.636123, - 28.639638, - 28.642946, - 28.646042, - 28.648918, - 28.651566, - 28.653979, - 28.656148, - 28.658067, - 28.65973, - 28.661135, - 28.662281, - 28.663171, - 28.663813, - 28.66422, - 28.664408, - 28.664399, - 28.664221, - 28.663905, - 28.663486, - 28.663002, - 28.662493, - 28.662002, - 28.66157, - 28.661236, - 28.661041, - 28.661019, - 28.661202, - 28.661617, - 28.662285, - 28.663225, - 28.664446, - 28.665956, - 28.667754, - 28.669837, - 28.672198, - 28.674825, - 28.677704, - 28.680819, - 28.684153, - 28.687687, - 28.691403, - 28.695281, - 28.699304, - 28.703452, - 28.70771, - 28.712058, - 28.716481, - 28.720962, - 28.725484, - 28.730028, - 28.734579, - 28.739116, - 28.743621, - 28.748073, - 28.752452, - 28.756736, - 28.760905, - 28.764937, - 28.768813, - 28.772512, - 28.776018, - 28.779317, - 28.782396, - 28.785246, - 28.787862, - 28.790243, - 28.792391, - 28.794313, - 28.79602, - 28.797524, - 28.798843, - 28.799997, - 28.801007, - 28.801898, - 28.802693, - 28.803419, - 28.804099, - 28.804759, - 28.80542, - 28.806106, - 28.806836, - 28.807629, - 28.808499, - 28.809462, - 28.81053, - 28.811712, - 28.813017, - 28.814452, - 28.816023, - 28.817734, - 28.819587, - 28.821585, - 28.823729, - 28.82602, - 28.828456, - 28.831036, - 28.833756, - 28.836612, - 28.8396, - 28.842711, - 28.845937, - 28.849269, - 28.852694, - 28.856198, - 28.859767, - 28.863384, - 28.867033, - 28.870693, - 28.874347, - 28.877974, - 28.881556, - 28.885073, - 28.888507, - 28.89184, - 28.895058, - 28.898146, - 28.901092, - 28.903887, - 28.906521, - 28.908992, - 28.911294, - 28.913428, - 28.915394, - 28.917195, - 28.918836, - 28.920322, - 28.921659, - 28.922855, - 28.923914, - 28.924845, - 28.925651, - 28.926337, - 28.926906, - 28.927357, - 28.927691, - 28.927905, - 28.927996, - 28.927959, - 28.927788, - 28.927481, - 28.927033, - 28.926445, - 28.925719, - 28.924862, - 28.923887, - 28.922811, - 28.921658, - 28.920458, - 28.919246, - 28.918063, - 28.916954, - 28.915966, - 28.915148, - 28.914549, - 28.914216, - 28.914191, - 28.914514, - 28.915214, - 28.916315, - 28.917832, - 28.919769, - 28.922122, - 28.924877, - 28.928012, - 28.931497, - 28.935294, - 28.939362, - 28.943655, - 28.948125, - 28.952724, - 28.957403, - 28.962118, - 28.966826, - 28.97149, - 28.976074, - 28.98055, - 28.984894, - 28.989085, - 28.993108, - 28.996949, - 29.000598, - 29.004048, - 29.007289, - 29.010317, - 29.013124, - 29.015703, - 29.018046, - 29.020145, - 29.021993, - 29.023581, - 29.024902, - 29.025951, - 29.026725, - 29.027223, - 29.02745, - 29.027413, - 29.027125, - 29.026604, - 29.025874, - 29.024963, - 29.023903, - 29.022731, - 29.021489, - 29.020219, - 29.018965, - 29.017771, - 29.016681, - 29.015737, - 29.014976, - 29.014433, - 29.014138, - 29.014116, - 29.014386, - 29.01496, - 29.015846, - 29.017048, - 29.018562, - 29.02038, - 29.022493, - 29.024885, - 29.027542, - 29.030443, - 29.03357, - 29.036903, - 29.040422, - 29.044107, - 29.047937, - 29.051894, - 29.055957, - 29.060109, - 29.06433, - 29.0686, - 29.0729, - 29.077211, - 29.08151, - 29.085775, - 29.089985, - 29.094117, - 29.098146, - 29.102049, - 29.105803, - 29.109385, - 29.112776, - 29.115956, - 29.118908, - 29.12162, - 29.124081, - 29.126287, - 29.128234, - 29.129925, - 29.131367, - 29.132571, - 29.13355, - 29.134322, - 29.134909, - 29.135333, - 29.135618, - 29.135792, - 29.13588, - 29.135909, - 29.135905, - 29.135893, - 0 - ], - "yaxis": "y3" - }, - { - "mode": "lines", - "name": " GenPwr_(kW)", - "type": "scatter", - "xaxis": "x4", - "y": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000001, - 0.000002, - 0.000002, - 0.000002, - 0.000003, - 0.000003, - 0.000004, - 0.000004, - 0.000004, - 0.000005, - 0.000006, - 0.000006, - 0.000007, - 0.000008, - 0.000009, - 0.000011, - 0.000012, - 0.000014, - 0.000017, - 0.00002, - 0.000023, - 0.000027, - 0.000032, - 0.000037, - 0.000043, - 0.000049, - 0.000057, - 0.000064, - 0.000072, - 0.00008, - 0.000088, - 0.000097, - 0.000105, - 0.000113, - 0.00012, - 0.000128, - 0.000135, - 0.000142, - 0.000149, - 0.000156, - 0.000163, - 0.000169, - 0.000176, - 0.000183, - 0.000191, - 0.000198, - 0.000206, - 0.000213, - 0.000221, - 0.000229, - 0.000237, - 0.000245, - 0.000252, - 0.00026, - 0.000267, - 0.000273, - 0.00028, - 0.000286, - 0.000291, - 0.000297, - 0.000303, - 0.000309, - 0.000315, - 0.000322, - 0.000329, - 0.000338, - 0.000347, - 0.000357, - 0.000369, - 0.000382, - 0.000396, - 0.000411, - 0.000428, - 0.000446, - 0.000465, - 0.000486, - 0.000506, - 0.000528, - 0.000549, - 0.000571, - 0.000592, - 0.000613, - 0.000633, - 0.000652, - 0.00067, - 0.000688, - 0.000704, - 0.000718, - 0.000732, - 0.000744, - 0.000756, - 0.000766, - 0.000775, - 0.000783, - 0.000791, - 0.000797, - 0.000802, - 0.000806, - 0.00081, - 0.000812, - 0.000813, - 0.000814, - 0.000813, - 0.000811, - 0.000808, - 0.000804, - 0.000799, - 0.000794, - 0.000788, - 0.000782, - 0.000775, - 0.000769, - 0.000764, - 0.000759, - 0.000755, - 0.000752, - 0.000751, - 0.000751, - 0.000753, - 0.000757, - 0.000763, - 0.000771, - 0.000781, - 0.000793, - 0.000807, - 0.000823, - 0.000842, - 0.000862, - 0.000884, - 0.000907, - 0.000932, - 0.000959, - 0.000986, - 0.001015, - 0.001045, - 0.001076, - 0.001108, - 0.001141, - 0.001174, - 0.001208, - 0.001243, - 0.001278, - 0.001313, - 0.001349, - 0.001385, - 0.001422, - 0.001458, - 0.001494, - 0.00153, - 0.001566, - 0.001601, - 0.001635, - 0.001669, - 0.001701, - 0.001732, - 0.001762, - 0.00179, - 0.001818, - 0.001844, - 0.001869, - 0.001893, - 0.001916, - 0.001939, - 0.001961, - 0.001984, - 0.002007, - 0.00203, - 0.002055, - 0.002081, - 0.002108, - 0.002138, - 0.00217, - 0.002204, - 0.00224, - 0.002279, - 0.002321, - 0.002365, - 0.002412, - 0.002462, - 0.002514, - 0.002569, - 0.002627, - 0.002687, - 0.00275, - 0.002814, - 0.002881, - 0.00295, - 0.003021, - 0.003094, - 0.003168, - 0.003244, - 0.003321, - 0.0034, - 0.00348, - 0.003561, - 0.003642, - 0.003724, - 0.003806, - 0.003888, - 0.00397, - 0.00405, - 0.00413, - 0.004208, - 0.004284, - 0.004358, - 0.004429, - 0.004498, - 0.004564, - 0.004626, - 0.004685, - 0.004742, - 0.004794, - 0.004844, - 0.004891, - 0.004934, - 0.004975, - 0.005014, - 0.005051, - 0.005086, - 0.005119, - 0.005152, - 0.005183, - 0.005214, - 0.005244, - 0.005274, - 0.005305, - 0.005335, - 0.005366, - 0.005397, - 0.005429, - 0.005462, - 0.005495, - 0.00553, - 0.005565, - 0.005601, - 0.005639, - 0.005678, - 0.005718, - 0.005759, - 0.005802, - 0.005847, - 0.005893, - 0.00594, - 0.00599, - 0.006041, - 0.006093, - 0.006148, - 0.006203, - 0.006261, - 0.006319, - 0.006379, - 0.006439, - 0.0065, - 0.006562, - 0.006624, - 0.006685, - 0.006747, - 0.006808, - 0.006869, - 0.006928, - 0.006987, - 0.007045, - 0.007102, - 0.007157, - 0.007212, - 0.007265, - 0.007317, - 0.007368, - 0.007418, - 0.007467, - 0.007515, - 0.007563, - 0.00761, - 0.007656, - 0.007702, - 0.007748, - 0.007793, - 0.007839, - 0.007884, - 0.00793, - 0.007976, - 0.008022, - 0.008069, - 0.008117, - 0.008166, - 0.008216, - 0.008268, - 0.008321, - 0.008376, - 0.008433, - 0.008493, - 0.008556, - 0.008621, - 0.00869, - 0.008762, - 0.008838, - 0.008918, - 0.009002, - 0.00909, - 0.009183, - 0.00928, - 0.009382, - 0.009488, - 0.009599, - 0.009714, - 0.009833, - 0.009957, - 0.010085, - 0.010218, - 0.010354, - 0.010494, - 0.010637, - 0.010784, - 0.010934, - 0.011087, - 0.011243, - 0.011401, - 0.011562, - 0.011724, - 0.011888, - 0.012053, - 0.012219, - 0.012385, - 0.012552, - 0.012718, - 0.012884, - 0.013049, - 0.013212, - 0.013374, - 0.013533, - 0.013689, - 0.013842, - 0.013993, - 0.014139, - 0.014282, - 0.014421, - 0.014555, - 0.014686, - 0.014813, - 0.014936, - 0.015055, - 0.015171, - 0.015283, - 0.015392, - 0.015499, - 0.015604, - 0.015706, - 0.015808, - 0.015908, - 0.016008, - 0.016108, - 0.016208, - 0.016308, - 0.01641, - 0.016513, - 0.016618, - 0.016726, - 0.016835, - 0.016947, - 0.017062, - 0.01718, - 0.017301, - 0.017425, - 0.017553, - 0.017684, - 0.017818, - 0.017955, - 0.018096, - 0.01824, - 0.018387, - 0.018536, - 0.018688, - 0.018841, - 0.018997, - 0.019153, - 0.01931, - 0.019468, - 0.019625, - 0.019781, - 0.019936, - 0.020088, - 0.020239, - 0.020386, - 0.02053, - 0.02067, - 0.020805, - 0.020936, - 0.021062, - 0.021182, - 0.021297, - 0.021407, - 0.021511, - 0.02161, - 0.021704, - 0.021793, - 0.021877, - 0.021956, - 0.022032, - 0.022104, - 0.022174, - 0.022241, - 0.022306, - 0.02237, - 0.022434, - 0.022499, - 0.022564, - 0.022631, - 0.0227, - 0.022773, - 0.022849, - 0.022929, - 0.023015, - 0.023106, - 0.023204, - 0.023308, - 0.023419, - 0.023537, - 0.023663, - 0.023798, - 0.02394, - 0.024091, - 0.024251, - 0.024418, - 0.024594, - 0.024778, - 0.024969, - 0.025168, - 0.025373, - 0.025585, - 0.025802, - 0.026025, - 0.026252, - 0.026482, - 0.026715, - 0.026951, - 0.027188, - 0.027426, - 0.027663, - 0.0279, - 0.028136, - 0.02837, - 0.028601, - 0.028829, - 0.029053, - 0.029274, - 0.029491, - 0.029704, - 0.029913, - 0.030117, - 0.030317, - 0.030513, - 0.030705, - 0.030893, - 0.031078, - 0.031261, - 0.031441, - 0.03162, - 0.031798, - 0.031975, - 0.032152, - 0.03233, - 0.03251, - 0.032692, - 0.032878, - 0.033067, - 0.03326, - 0.033459, - 0.033663, - 0.033874, - 0.034092, - 0.034316, - 0.034549, - 0.034789, - 0.035038, - 0.035295, - 0.03556, - 0.035834, - 0.036115, - 0.036405, - 0.036702, - 0.037007, - 0.037318, - 0.037635, - 0.037958, - 0.038285, - 0.038616, - 0.03895, - 0.039286, - 0.039624, - 0.039962, - 0.040299, - 0.040635, - 0.040968, - 0.041298, - 0.041624, - 0.041944, - 0.04226, - 0.042568, - 0.04287, - 0.043165, - 0.043451, - 0.043729, - 0.043999, - 0.04426, - 0.044512, - 0.044755, - 0.044989, - 0.045215, - 0.045432, - 0.045642, - 0.045844, - 0.04604, - 0.046229, - 0.046412, - 0.046591, - 0.046765, - 0.046936, - 0.047104, - 0.04727, - 0.047435, - 0.0476, - 0.047765, - 0.047931, - 0.048099, - 0.048269, - 0.048442, - 0.048618, - 0.048799, - 0.048983, - 0.049172, - 0.049365, - 0.049563, - 0.049766, - 0.049975, - 0.050188, - 0.050406, - 0.05063, - 0.050858, - 0.05109, - 0.051327, - 0.051568, - 0.051812, - 0.05206, - 0.052311, - 0.052564, - 0.05282, - 0.053078, - 0.053337, - 0.053597, - 0.053859, - 0.05412, - 0.054382, - 0.054644, - 0.054905, - 0.055166, - 0.055426, - 0.055685, - 0.055943, - 0.0562, - 0.056456, - 0.056711, - 0.056964, - 0.057217, - 0.05747, - 0.057721, - 0.057973, - 0.058224, - 0.058476, - 0.058728, - 0.058981, - 0.059235, - 0.05949, - 0.059748, - 0.060007, - 0.06027, - 0.060534, - 0.060803, - 0.061074, - 0.06135, - 0.061629, - 0.061913, - 0.062201, - 0.062494, - 0.062792, - 0.063095, - 0.063403, - 0.063717, - 0.064036, - 0.064361, - 0.064691, - 0.065027, - 0.065368, - 0.065715, - 0.066068, - 0.066426, - 0.06679, - 0.067159, - 0.067533, - 0.067911, - 0.068295, - 0.068684, - 0.069076, - 0.069473, - 0.069874, - 0.070278, - 0.070685, - 0.071095, - 0.071508, - 0.071923, - 0.072339, - 0.072757, - 0.073176, - 0.073596, - 0.074016, - 0.074435, - 0.074855, - 0.075274, - 0.075691, - 0.076107, - 0.076522, - 0.076934, - 0.077344, - 0.077752, - 0.078157, - 0.078559, - 0.078957, - 0.079353, - 0.079744, - 0.080132, - 0.080517, - 0.080897, - 0.081274, - 0.081647, - 0.082016, - 0.082381, - 0.082743, - 0.083102, - 0.083458, - 0.083812, - 0.084163, - 0.084512, - 0.084859, - 0.085205, - 0.085551, - 0.085896, - 0.086242, - 0.086588, - 0.086936, - 0.087286, - 0.087638, - 0.087993, - 0.088352, - 0.088714, - 0.08908, - 0.089451, - 0.089827, - 0.090207, - 0.090593, - 0.090984, - 0.09138, - 0.091782, - 0.092189, - 0.092601, - 0.093018, - 0.09344, - 0.093865, - 0.094295, - 0.094727, - 0.095163, - 0.0956, - 0.096039, - 0.096479, - 0.096919, - 0.097358, - 0.097795, - 0.09823, - 0.098662, - 0.099089, - 0.099512, - 0.09993, - 0.100342, - 0.100747, - 0.101145, - 0.101535, - 0.101918, - 0.102293, - 0.102659, - 0.103017, - 0.103367, - 0.103709, - 0.104044, - 0.104371, - 0.104691, - 0.105006, - 0.105314, - 0.105618, - 0.105918, - 0.106215, - 0.10651, - 0.106804, - 0.107097, - 0.107392, - 0.107688, - 0.107988, - 0.108292, - 0.1086, - 0.108915, - 0.109238, - 0.109568, - 0.109907, - 0.110256, - 0.110615, - 0.110986, - 0.111368, - 0.111762, - 0.112169, - 0.112589, - 0.113022, - 0.113468, - 0.113927, - 0.114398, - 0.114882, - 0.115378, - 0.115886, - 0.116405, - 0.116934, - 0.117473, - 0.11802, - 0.118576, - 0.119138, - 0.119706, - 0.120279, - 0.120856, - 0.121436, - 0.122018, - 0.122601, - 0.123185, - 0.123767, - 0.124348, - 0.124927, - 0.125504, - 0.126077, - 0.126646, - 0.127212, - 0.127774, - 0.128332, - 0.128886, - 0.129437, - 0.129984, - 0.130528, - 0.131069, - 0.131608, - 0.132146, - 0.132683, - 0.13322, - 0.133757, - 0.134296, - 0.134837, - 0.135381, - 0.135928, - 0.13648, - 0.137036, - 0.137598, - 0.138166, - 0.138741, - 0.139322, - 0.139911, - 0.140507, - 0.14111, - 0.141721, - 0.142339, - 0.142964, - 0.143596, - 0.144235, - 0.144879, - 0.145529, - 0.146183, - 0.146841, - 0.147502, - 0.148165, - 0.14883, - 0.149494, - 0.150157, - 0.150818, - 0.151476, - 0.15213, - 0.152779, - 0.153422, - 0.154058, - 0.154687, - 0.155307, - 0.155917, - 0.156518, - 0.157109, - 0.157689, - 0.158258, - 0.158816, - 0.159364, - 0.1599, - 0.160425, - 0.16094, - 0.161445, - 0.16194, - 0.162427, - 0.162905, - 0.163376, - 0.16384, - 0.164299, - 0.164753, - 0.165204, - 0.165653, - 0.1661, - 0.166548, - 0.166997, - 0.167448, - 0.167903, - 0.168362, - 0.168827, - 0.169299, - 0.169778, - 0.170266, - 0.170763, - 0.17127, - 0.171787, - 0.172315, - 0.172855, - 0.173405, - 0.173967, - 0.174541, - 0.175125, - 0.175721, - 0.176327, - 0.176944, - 0.17757, - 0.178206, - 0.178851, - 0.179503, - 0.180163, - 0.18083, - 0.181502, - 0.182179, - 0.182861, - 0.183547, - 0.184235, - 0.184925, - 0.185617, - 0.186309, - 0.187001, - 0.187692, - 0.188382, - 0.18907, - 0.189756, - 0.190438, - 0.191117, - 0.191792, - 0.192464, - 0.193131, - 0.193794, - 0.194453, - 0.195107, - 0.195758, - 0.196404, - 0.197046, - 0.197685, - 0.19832, - 0.198953, - 0.199583, - 0.20021, - 0.200836, - 0.201461, - 0.202084, - 0.202707, - 0.20333, - 0.203953, - 0.204577, - 0.205203, - 0.20583, - 0.206459, - 0.20709, - 0.207725, - 0.208363, - 0.209004, - 0.209649, - 0.210298, - 0.210952, - 0.211611, - 0.212274, - 0.212943, - 0.213617, - 0.214297, - 0.214983, - 0.215674, - 0.216372, - 0.217075, - 0.217785, - 0.218501, - 0.219223, - 0.219951, - 0.220685, - 0.221425, - 0.22217, - 0.222922, - 0.223679, - 0.224441, - 0.225209, - 0.225982, - 0.22676, - 0.227542, - 0.228329, - 0.22912, - 0.229916, - 0.230715, - 0.231519, - 0.232325, - 0.233135, - 0.233948, - 0.234764, - 0.235582, - 0.236403, - 0.237226, - 0.238051, - 0.238877, - 0.239705, - 0.240534, - 0.241365, - 0.242196, - 0.243027, - 0.243859, - 0.244691, - 0.245524, - 0.246356, - 0.247188, - 0.24802, - 0.248852, - 0.249684, - 0.250514, - 0.251345, - 0.252175, - 0.253004, - 0.253832, - 0.25466, - 0.255487, - 0.256313, - 0.257138, - 0.257963, - 0.258786, - 0.259608, - 0.260429, - 0.261248, - 0.262066, - 0.262882, - 0.263697, - 0.264509, - 0.26532, - 0.266128, - 0.266934, - 0.267737, - 0.268537, - 0.269335, - 0.270129, - 0.270919, - 0.271706, - 0.272488, - 0.273267, - 0.274041, - 0.27481, - 0.275574, - 0.276332, - 0.277085, - 0.277833, - 0.278574, - 0.279309, - 0.280038, - 0.280761, - 0.281477, - 0.282187, - 0.282891, - 0.283588, - 0.284279, - 0.284965, - 0.285645, - 0.28632, - 0.286991, - 0.287657, - 0.28832, - 0.28898, - 0.289639, - 0.290296, - 0.290953, - 0.291611, - 0.29227, - 0.292933, - 0.293599, - 0.294271, - 0.294949, - 0.295635, - 0.29633, - 0.297035, - 0.29775, - 0.298479, - 0.29922, - 0.299976, - 0.300746, - 0.301533, - 0.302337, - 0.303159, - 0.303998, - 0.304856, - 0.305733, - 0.306629, - 0.307545, - 0.308479, - 0.309433, - 0.310406, - 0.311397, - 0.312407, - 0.313434, - 0.314478, - 0.315537, - 0.316613, - 0.317702, - 0.318804, - 0.319918, - 0.321043, - 0.322177, - 0.32332, - 0.324469, - 0.325624, - 0.326782, - 0.327943, - 0.329105, - 0.330267, - 0.331428, - 0.332585, - 0.333738, - 0.334886, - 0.336028, - 0.337162, - 0.338287, - 0.339404, - 0.34051, - 0.341605, - 0.342689, - 0.343762, - 0.344822, - 0.345871, - 0.346907, - 0.347932, - 0.348945, - 0.349946, - 0.350937, - 0.351917, - 0.352887, - 0.353848, - 0.354801, - 0.355747, - 0.356686, - 0.35762, - 0.35855, - 0.359475, - 0.360399, - 0.36132, - 0.362241, - 0.363163, - 0.364085, - 0.365009, - 0.365935, - 0.366865, - 0.367798, - 0.368735, - 0.369677, - 0.370623, - 0.371574, - 0.37253, - 0.373491, - 0.374457, - 0.375428, - 0.376404, - 0.377384, - 0.378369, - 0.379358, - 0.380351, - 0.381347, - 0.382347, - 0.38335, - 0.384355, - 0.385364, - 0.386374, - 0.387387, - 0.388403, - 0.38942, - 0.390439, - 0.39146, - 0.392483, - 0.393508, - 0.394535, - 0.395565, - 0.396597, - 0.397633, - 0.398671, - 0.399713, - 0.400759, - 0.401809, - 0.402864, - 0.403924, - 0.404991, - 0.406064, - 0.407143, - 0.408231, - 0.409326, - 0.41043, - 0.411542, - 0.412664, - 0.413796, - 0.414937, - 0.416089, - 0.417251, - 0.418422, - 0.419604, - 0.420796, - 0.421997, - 0.423207, - 0.424425, - 0.425652, - 0.426885, - 0.428126, - 0.429371, - 0.430622, - 0.431876, - 0.433132, - 0.43439, - 0.435648, - 0.436904, - 0.438159, - 0.43941, - 0.440656, - 0.441896, - 0.443128, - 0.444352, - 0.445566, - 0.44677, - 0.447962, - 0.449141, - 0.450307, - 0.451459, - 0.452596, - 0.453718, - 0.454825, - 0.455916, - 0.456993, - 0.458054, - 0.459101, - 0.460133, - 0.461152, - 0.462158, - 0.463152, - 0.464136, - 0.46511, - 0.466076, - 0.467035, - 0.467988, - 0.468938, - 0.469884, - 0.47083, - 0.471777, - 0.472726, - 0.473679, - 0.474637, - 0.475603, - 0.476576, - 0.47756, - 0.478555, - 0.479563, - 0.480585, - 0.481622, - 0.482675, - 0.483745, - 0.484834, - 0.485941, - 0.487068, - 0.488214, - 0.489381, - 0.490569, - 0.491778, - 0.493007, - 0.494257, - 0.495528, - 0.49682, - 0.498131, - 0.499462, - 0.500813, - 0.502181, - 0.503568, - 0.504971, - 0.506391, - 0.507826, - 0.509275, - 0.510738, - 0.512214, - 0.513701, - 0.515199, - 0.516706, - 0.518221, - 0.519744, - 0.521274, - 0.522809, - 0.524347, - 0.525889, - 0.527433, - 0.528978, - 0.530523, - 0.532067, - 0.533609, - 0.535148, - 0.536683, - 0.538213, - 0.539738, - 0.541256, - 0.542766, - 0.544268, - 0.545761, - 0.547245, - 0.548718, - 0.550179, - 0.551629, - 0.553065, - 0.554489, - 0.555898, - 0.557293, - 0.558673, - 0.560037, - 0.561386, - 0.562718, - 0.564034, - 0.565334, - 0.566617, - 0.567884, - 0.569134, - 0.570368, - 0.571586, - 0.572789, - 0.573976, - 0.575149, - 0.576308, - 0.577454, - 0.578587, - 0.579708, - 0.580819, - 0.581919, - 0.58301, - 0.584094, - 0.58517, - 0.586241, - 0.587306, - 0.588369, - 0.589429, - 0.590489, - 0.591549, - 0.59261, - 0.593674, - 0.594742, - 0.595815, - 0.596895, - 0.597983, - 0.59908, - 0.600186, - 0.601304, - 0.602435, - 0.603579, - 0.604737, - 0.60591, - 0.607099, - 0.608306, - 0.609529, - 0.610771, - 0.612031, - 0.613311, - 0.614609, - 0.615928, - 0.617267, - 0.618625, - 0.620004, - 0.621404, - 0.622823, - 0.624263, - 0.625723, - 0.627202, - 0.628701, - 0.63022, - 0.631757, - 0.633313, - 0.634888, - 0.63648, - 0.638089, - 0.639715, - 0.641357, - 0.643015, - 0.644688, - 0.646376, - 0.648077, - 0.649791, - 0.651518, - 0.653256, - 0.655004, - 0.656762, - 0.658528, - 0.660302, - 0.662082, - 0.663867, - 0.665655, - 0.667446, - 0.669238, - 0.671029, - 0.672818, - 0.674603, - 0.676384, - 0.678158, - 0.679923, - 0.68168, - 0.683425, - 0.685157, - 0.686876, - 0.688579, - 0.690265, - 0.691934, - 0.693584, - 0.695214, - 0.696824, - 0.698411, - 0.699977, - 0.701521, - 0.703041, - 0.704539, - 0.706013, - 0.707465, - 0.708895, - 0.710303, - 0.711689, - 0.713056, - 0.714403, - 0.715732, - 0.717045, - 0.718343, - 0.719627, - 0.7209, - 0.722163, - 0.723418, - 0.724667, - 0.725913, - 0.727158, - 0.728403, - 0.729652, - 0.730905, - 0.732167, - 0.733438, - 0.734721, - 0.736019, - 0.737333, - 0.738665, - 0.740018, - 0.741392, - 0.74279, - 0.744212, - 0.745661, - 0.747137, - 0.748642, - 0.750176, - 0.751739, - 0.753333, - 0.754957, - 0.756611, - 0.758295, - 0.76001, - 0.761754, - 0.763527, - 0.765327, - 0.767155, - 0.769008, - 0.770886, - 0.772787, - 0.77471, - 0.776653, - 0.778614, - 0.780591, - 0.782584, - 0.784589, - 0.786606, - 0.788632, - 0.790666, - 0.792705, - 0.794749, - 0.796795, - 0.798841, - 0.800887, - 0.80293, - 0.804969, - 0.807002, - 0.809029, - 0.811048, - 0.813058, - 0.815057, - 0.817046, - 0.819022, - 0.820986, - 0.822936, - 0.824871, - 0.826792, - 0.828698, - 0.830588, - 0.832462, - 0.83432, - 0.836161, - 0.837985, - 0.839792, - 0.841582, - 0.843354, - 0.845108, - 0.846844, - 0.848561, - 0.850261, - 0.851941, - 0.853603, - 0.855247, - 0.856871, - 0.858478, - 0.860067, - 0.861637, - 0.863191, - 0.864727, - 0.866248, - 0.867753, - 0.869244, - 0.870721, - 0.872185, - 0.873638, - 0.87508, - 0.876513, - 0.877939, - 0.879358, - 0.880772, - 0.882183, - 0.883591, - 0.885, - 0.886411, - 0.887825, - 0.889245, - 0.890671, - 0.892108, - 0.893555, - 0.895016, - 0.896491, - 0.897984, - 0.899496, - 0.901029, - 0.902585, - 0.904166, - 0.905773, - 0.907408, - 0.909073, - 0.91077, - 0.912498, - 0.914261, - 0.916058, - 0.917891, - 0.91976, - 0.921666, - 0.92361, - 0.92559, - 0.927609, - 0.929664, - 0.931757, - 0.933885, - 0.936049, - 0.938247, - 0.940478, - 0.942741, - 0.945034, - 0.947355, - 0.949703, - 0.952075, - 0.954468, - 0.956882, - 0.959312, - 0.961758, - 0.964215, - 0.966682, - 0.969155, - 0.971632, - 0.97411, - 0.976587, - 0.979059, - 0.981525, - 0.983981, - 0.986425, - 0.988855, - 0.991268, - 0.993662, - 0.996035, - 0.998385, - 1.000709, - 1.003007, - 1.005276, - 1.007516, - 1.009724, - 1.011899, - 1.014041, - 1.016148, - 1.01822, - 1.020257, - 1.022258, - 1.024222, - 1.026151, - 1.028043, - 1.0299, - 1.031722, - 1.033509, - 1.035263, - 1.036985, - 1.038675, - 1.040336, - 1.041969, - 1.043575, - 1.045157, - 1.046716, - 1.048254, - 1.049773, - 1.051277, - 1.052766, - 1.054244, - 1.055713, - 1.057174, - 1.058632, - 1.060089, - 1.061546, - 1.063007, - 1.064475, - 1.065951, - 1.067438, - 1.068939, - 1.070456, - 1.071992, - 1.073548, - 1.075126, - 1.07673, - 1.07836, - 1.080019, - 1.081709, - 1.08343, - 1.085185, - 1.086974, - 1.0888, - 1.090663, - 1.092564, - 1.094504, - 1.096483, - 1.098502, - 1.100562, - 1.102661, - 1.104801, - 1.10698, - 1.109199, - 1.111456, - 1.113751, - 1.116083, - 1.118451, - 1.120853, - 1.123288, - 1.125754, - 1.12825, - 1.130773, - 1.133322, - 1.135894, - 1.138488, - 1.141101, - 1.14373, - 1.146375, - 1.149031, - 1.151696, - 1.154369, - 1.157046, - 1.159726, - 1.162405, - 1.16508, - 1.167751, - 1.170413, - 1.173066, - 1.175705, - 1.17833, - 1.180938, - 1.183526, - 1.186093, - 1.188637, - 1.191156, - 1.193647, - 1.196111, - 1.198545, - 1.200948, - 1.203319, - 1.205657, - 1.207962, - 1.210233, - 1.21247, - 1.214672, - 1.21684, - 1.218974, - 1.221073, - 1.22314, - 1.225174, - 1.227176, - 1.229146, - 1.231087, - 1.232999, - 1.234884, - 1.236743, - 1.238577, - 1.240388, - 1.242179, - 1.24395, - 1.245705, - 1.247445, - 1.249174, - 1.250892, - 1.252604, - 1.25431, - 1.256015, - 1.257721, - 1.25943, - 1.261146, - 1.26287, - 1.264606, - 1.266356, - 1.268123, - 1.269909, - 1.271718, - 1.27355, - 1.27541, - 1.277299, - 1.279219, - 1.281172, - 1.283161, - 1.285188, - 1.287254, - 1.289361, - 1.29151, - 1.293704, - 1.295942, - 1.298227, - 1.30056, - 1.30294, - 1.305368, - 1.307845, - 1.31037, - 1.312944, - 1.315565, - 1.318234, - 1.320949, - 1.323709, - 1.326512, - 1.329357, - 1.332242, - 1.335165, - 1.338123, - 1.341115, - 1.344136, - 1.347185, - 1.350258, - 1.353353, - 1.356466, - 1.359593, - 1.362732, - 1.365878, - 1.369029, - 1.37218, - 1.375328, - 1.37847, - 1.381602, - 1.38472, - 1.387822, - 1.390902, - 1.393959, - 1.39699, - 1.39999, - 1.402958, - 1.40589, - 1.408783, - 1.411637, - 1.414447, - 1.417213, - 1.419933, - 1.422605, - 1.425228, - 1.427801, - 1.430323, - 1.432794, - 1.435215, - 1.437585, - 1.439906, - 1.442177, - 1.444401, - 1.446578, - 1.44871, - 1.4508, - 1.452849, - 1.454861, - 1.456837, - 1.45878, - 1.460694, - 1.462581, - 1.464444, - 1.466288, - 1.468115, - 1.469929, - 1.471734, - 1.473532, - 1.475328, - 1.477125, - 1.478926, - 1.480735, - 1.482556, - 1.484391, - 1.486245, - 1.488119, - 1.490018, - 1.491945, - 1.493902, - 1.495892, - 1.497919, - 1.499984, - 1.502089, - 1.504238, - 1.506432, - 1.508673, - 1.510963, - 1.513302, - 1.515693, - 1.518135, - 1.520631, - 1.52318, - 1.525783, - 1.52844, - 1.531151, - 1.533916, - 1.536734, - 1.539605, - 1.542527, - 1.5455, - 1.548523, - 1.551594, - 1.554711, - 1.557873, - 1.561078, - 1.564324, - 1.567609, - 1.57093, - 1.574285, - 1.57767, - 1.581084, - 1.584524, - 1.587985, - 1.591466, - 1.594963, - 1.598473, - 1.601991, - 1.605516, - 1.609042, - 1.612568, - 1.616088, - 1.6196, - 1.6231, - 1.626585, - 1.63005, - 1.633493, - 1.63691, - 1.640297, - 1.643653, - 1.646973, - 1.650254, - 1.653495, - 1.656692, - 1.659843, - 1.662946, - 1.665999, - 1.669, - 1.671947, - 1.674839, - 1.677675, - 1.680454, - 1.683177, - 1.685841, - 1.688448, - 1.690998, - 1.693492, - 1.69593, - 1.698315, - 1.700647, - 1.702928, - 1.705161, - 1.707349, - 1.709494, - 1.711599, - 1.713668, - 1.715703, - 1.71771, - 1.71969, - 1.72165, - 1.723591, - 1.72552, - 1.72744, - 1.729355, - 1.73127, - 1.733189, - 1.735117, - 1.737058, - 1.739017, - 1.740998, - 1.743004, - 1.745042, - 1.747113, - 1.749222, - 1.751374, - 1.75357, - 1.755815, - 1.758111, - 1.760461, - 1.762868, - 1.765333, - 1.76786, - 1.770448, - 1.773101, - 1.775818, - 1.7786, - 1.781449, - 1.784363, - 1.787342, - 1.790387, - 1.793496, - 1.796668, - 1.799901, - 1.803194, - 1.806545, - 1.809952, - 1.813411, - 1.816921, - 1.820477, - 1.824078, - 1.82772, - 1.831399, - 1.835112, - 1.838855, - 1.842624, - 1.846414, - 1.850223, - 1.854046, - 1.857879, - 1.861718, - 1.865557, - 1.869395, - 1.873225, - 1.877044, - 1.880848, - 1.884633, - 1.888394, - 1.892128, - 1.895832, - 1.899501, - 1.903132, - 1.906722, - 1.910267, - 1.913766, - 1.917215, - 1.920612, - 1.923955, - 1.927242, - 1.930471, - 1.933642, - 1.936752, - 1.939802, - 1.942791, - 1.945718, - 1.948585, - 1.95139, - 1.954136, - 1.956822, - 1.959451, - 1.962023, - 1.964542, - 1.967008, - 1.969424, - 1.971794, - 1.97412, - 1.976405, - 1.978653, - 1.980868, - 1.983053, - 1.985212, - 1.98735, - 1.989471, - 1.991579, - 1.99368, - 1.995777, - 1.997876, - 1.999981, - 2.002097, - 2.004228, - 2.00638, - 2.008557, - 2.010762, - 2.013002, - 2.015279, - 2.017598, - 2.019963, - 2.022377, - 2.024843, - 2.027366, - 2.029948, - 2.032591, - 2.035298, - 2.038072, - 2.040915, - 2.043827, - 2.046811, - 2.049867, - 2.052997, - 2.0562, - 2.059477, - 2.062827, - 2.06625, - 2.069744, - 2.073309, - 2.076943, - 2.080644, - 2.08441, - 2.088237, - 2.092124, - 2.096067, - 2.100063, - 2.104108, - 2.108199, - 2.112331, - 2.116501, - 2.120705, - 2.124937, - 2.129193, - 2.13347, - 2.137761, - 2.142063, - 2.146372, - 2.150681, - 2.154987, - 2.159285, - 2.163571, - 2.167839, - 2.172086, - 2.176307, - 2.180497, - 2.184653, - 2.18877, - 2.192844, - 2.196872, - 2.200851, - 2.204776, - 2.208644, - 2.212453, - 2.2162, - 2.219883, - 2.223499, - 2.227047, - 2.230525, - 2.233933, - 2.237269, - 2.240534, - 2.243726, - 2.246848, - 2.249898, - 2.252879, - 2.255791, - 2.258637, - 2.261419, - 2.264138, - 2.266799, - 2.269403, - 2.271954, - 2.274456, - 2.276912, - 2.279328, - 2.281707, - 2.284054, - 2.286373, - 2.288671, - 2.290952, - 2.293221, - 2.295484, - 2.297746, - 2.300013, - 2.302291, - 2.304584, - 2.306899, - 2.309241, - 2.311615, - 2.314026, - 2.31648, - 2.318981, - 2.321533, - 2.324143, - 2.326813, - 2.329548, - 2.332352, - 2.335227, - 2.338178, - 2.341206, - 2.344315, - 2.347506, - 2.350781, - 2.354142, - 2.357589, - 2.361122, - 2.364742, - 2.368449, - 2.372241, - 2.376117, - 2.380076, - 2.384116, - 2.388234, - 2.392428, - 2.396694, - 2.401029, - 2.40543, - 2.409892, - 2.41441, - 2.418981, - 2.4236, - 2.428261, - 2.43296, - 2.43769, - 2.442447, - 2.447225, - 2.452019, - 2.456823, - 2.461631, - 2.466437, - 2.471237, - 2.476024, - 2.480794, - 2.48554, - 2.490258, - 2.494943, - 2.49959, - 2.504194, - 2.508751, - 2.513257, - 2.517706, - 2.522097, - 2.526424, - 2.530686, - 2.534878, - 2.539, - 2.543047, - 2.547019, - 2.550913, - 2.554729, - 2.558467, - 2.562124, - 2.565703, - 2.569203, - 2.572624, - 2.575969, - 2.579238, - 2.582434, - 2.585559, - 2.588615, - 2.591605, - 2.594533, - 2.597401, - 2.600215, - 2.602977, - 2.605692, - 2.608364, - 2.610999, - 2.6136, - 2.616173, - 2.618724, - 2.621257, - 2.623778, - 2.626292, - 2.628805, - 2.631322, - 2.633849, - 2.636392, - 2.638956, - 2.641546, - 2.644169, - 2.646828, - 2.649531, - 2.65228, - 2.655082, - 2.657941, - 2.66086, - 2.663846, - 2.6669, - 2.670028, - 2.673231, - 2.676514, - 2.679878, - 2.683325, - 2.686858, - 2.690478, - 2.694185, - 2.697981, - 2.701865, - 2.705838, - 2.709898, - 2.714045, - 2.718278, - 2.722594, - 2.726991, - 2.731468, - 2.73602, - 2.740645, - 2.745338, - 2.750098, - 2.754917, - 2.759794, - 2.764721, - 2.769696, - 2.774711, - 2.779762, - 2.784842, - 2.789947, - 2.795069, - 2.800204, - 2.805344, - 2.810483, - 2.815615, - 2.820735, - 2.825835, - 2.830909, - 2.835953, - 2.840959, - 2.845922, - 2.850838, - 2.8557, - 2.860504, - 2.865245, - 2.869919, - 2.874521, - 2.879049, - 2.883499, - 2.887868, - 2.892153, - 2.896353, - 2.900465, - 2.904489, - 2.908424, - 2.912268, - 2.916024, - 2.91969, - 2.923268, - 2.92676, - 2.930167, - 2.933492, - 2.936737, - 2.939905, - 2.943001, - 2.946028, - 2.94899, - 2.951892, - 2.954739, - 2.957536, - 2.960288, - 2.963001, - 2.965681, - 2.968333, - 2.970965, - 2.973581, - 2.976189, - 2.978794, - 2.981403, - 2.984022, - 2.986659, - 2.989318, - 2.992006, - 2.994729, - 2.997494, - 3.000306, - 3.00317, - 3.006093, - 3.009079, - 3.012133, - 3.015259, - 3.018463, - 3.021747, - 3.025116, - 3.028573, - 3.03212, - 3.035759, - 3.039493, - 3.043323, - 3.04725, - 3.051275, - 3.055398, - 3.059619, - 3.063937, - 3.068352, - 3.072861, - 3.077462, - 3.082155, - 3.086935, - 3.0918, - 3.096746, - 3.101771, - 3.106868, - 3.112035, - 3.117266, - 3.122557, - 3.127901, - 3.133293, - 3.138729, - 3.1442, - 3.149702, - 3.155227, - 3.16077, - 3.166323, - 3.17188, - 3.177434, - 3.182979, - 3.188508, - 3.194014, - 3.199492, - 3.204934, - 3.210335, - 3.215688, - 3.220989, - 3.226232, - 3.231412, - 3.236524, - 3.241563, - 3.246527, - 3.25141, - 3.25621, - 3.260923, - 3.265548, - 3.270081, - 3.274522, - 3.278868, - 3.283119, - 3.287275, - 3.291335, - 3.2953, - 3.299171, - 3.302949, - 3.306637, - 3.310237, - 3.313751, - 3.317184, - 3.320538, - 3.323819, - 3.32703, - 3.330177, - 3.333265, - 3.3363, - 3.339287, - 3.342232, - 3.345142, - 3.348024, - 3.350883, - 3.353726, - 3.356561, - 3.359394, - 3.362231, - 3.36508, - 3.367946, - 3.370838, - 3.373761, - 3.376721, - 3.379725, - 3.382779, - 3.385888, - 3.389059, - 3.392295, - 3.395604, - 3.398988, - 3.402454, - 3.406003, - 3.409642, - 3.413372, - 3.417197, - 3.421119, - 3.42514, - 3.429263, - 3.433489, - 3.437817, - 3.44225, - 3.446786, - 3.451426, - 3.456167, - 3.461009, - 3.46595, - 3.470987, - 3.476118, - 3.481339, - 3.486646, - 3.492036, - 3.497504, - 3.503045, - 3.508654, - 3.514326, - 3.520055, - 3.525835, - 3.531661, - 3.537525, - 3.543421, - 3.549343, - 3.555283, - 3.561235, - 3.567193, - 3.573148, - 3.579095, - 3.585025, - 3.590933, - 3.596811, - 3.602653, - 3.608453, - 3.614203, - 3.619898, - 3.625532, - 3.6311, - 3.636595, - 3.642014, - 3.647351, - 3.652602, - 3.657764, - 3.662834, - 3.667807, - 3.672682, - 3.677458, - 3.682132, - 3.686703, - 3.691172, - 3.695539, - 3.699803, - 3.703966, - 3.70803, - 3.711997, - 3.71587, - 3.719651, - 3.723345, - 3.726954, - 3.730485, - 3.733941, - 3.737328, - 3.740651, - 3.743917, - 3.747131, - 3.750301, - 3.753433, - 3.756533, - 3.75961, - 3.76267, - 3.76572, - 3.768768, - 3.771822, - 3.774888, - 3.777973, - 3.781086, - 3.784232, - 3.787418, - 3.790652, - 3.793938, - 3.797283, - 3.800694, - 3.804174, - 3.80773, - 3.811367, - 3.815087, - 3.818897, - 3.822799, - 3.826796, - 3.830892, - 3.835089, - 3.839388, - 3.843791, - 3.8483, - 3.852914, - 3.857633, - 3.862457, - 3.867385, - 3.872416, - 3.877546, - 3.882775, - 3.888098, - 3.893512, - 3.899014, - 3.9046, - 3.910264, - 3.916003, - 3.92181, - 3.927681, - 3.933609, - 3.939589, - 3.945615, - 3.951679, - 3.957777, - 3.963901, - 3.970044, - 3.9762, - 3.982361, - 3.988522, - 3.994676, - 4.000814, - 4.006931, - 4.01302, - 4.019075, - 4.025088, - 4.031053, - 4.036964, - 4.042816, - 4.048602, - 4.054317, - 4.059955, - 4.065513, - 4.070985, - 4.076367, - 4.081656, - 4.086849, - 4.091943, - 4.096936, - 4.101825, - 4.106611, - 4.111292, - 4.115868, - 4.120339, - 4.124707, - 4.128972, - 4.133136, - 4.137203, - 4.141174, - 4.145053, - 4.148844, - 4.15255, - 4.156177, - 4.159729, - 4.163211, - 4.16663, - 4.169991, - 4.1733, - 4.176565, - 4.179791, - 4.182986, - 4.186158, - 4.189313, - 4.192459, - 4.195604, - 4.198755, - 4.20192, - 4.205106, - 4.208321, - 4.211572, - 4.214867, - 4.218211, - 4.221613, - 4.225078, - 4.228613, - 4.232223, - 4.235914, - 4.239692, - 4.243559, - 4.247522, - 4.251583, - 4.255746, - 4.260015, - 4.26439, - 4.268875, - 4.273471, - 4.278178, - 4.282997, - 4.287928, - 4.29297, - 4.298123, - 4.303384, - 4.308752, - 4.314223, - 4.319796, - 4.325466, - 4.33123, - 4.337083, - 4.34302, - 4.349037, - 4.355127, - 4.361286, - 4.367507, - 4.373784, - 4.380111, - 4.38648, - 4.392885, - 4.399319, - 4.405775, - 4.412246, - 4.418724, - 4.425202, - 4.431674, - 4.438131, - 4.444567, - 4.450975, - 4.457348, - 4.463679, - 4.469962, - 4.476191, - 4.482359, - 4.488462, - 4.494493, - 4.500448, - 4.506323, - 4.512112, - 4.517812, - 4.52342, - 4.528933, - 4.534349, - 4.539665, - 4.54488, - 4.549993, - 4.555004, - 4.559912, - 4.564719, - 4.569424, - 4.574031, - 4.57854, - 4.582954, - 4.587276, - 4.591509, - 4.595658, - 4.599726, - 4.603719, - 4.607641, - 4.611498, - 4.615295, - 4.61904, - 4.622737, - 4.626395, - 4.630019, - 4.633617, - 4.637197, - 4.640765, - 4.644329, - 4.647897, - 4.651477, - 4.655074, - 4.658698, - 4.662356, - 4.666053, - 4.669799, - 4.673598, - 4.677458, - 4.681385, - 4.685384, - 4.689462, - 4.693623, - 4.697872, - 4.702214, - 4.706653, - 4.711192, - 4.715835, - 4.720583, - 4.72544, - 4.730408, - 4.735486, - 4.740677, - 4.745981, - 4.751397, - 4.756925, - 4.762563, - 4.768311, - 4.774165, - 4.780124, - 4.786183, - 4.79234, - 4.798591, - 4.80493, - 4.811355, - 4.817858, - 4.824435, - 4.831081, - 4.837788, - 4.844551, - 4.851363, - 4.858217, - 4.865108, - 4.872027, - 4.878967, - 4.885922, - 4.892885, - 4.899847, - 4.906803, - 4.913744, - 4.920665, - 4.927557, - 4.934415, - 4.941232, - 4.948002, - 4.954718, - 4.961375, - 4.967967, - 4.974489, - 4.980936, - 4.987304, - 4.993588, - 4.999786, - 5.005893, - 5.011908, - 5.017827, - 5.023649, - 5.029372, - 5.034996, - 5.04052, - 5.045945, - 5.05127, - 5.056497, - 5.061627, - 5.066663, - 5.071606, - 5.076461, - 5.08123, - 5.085917, - 5.090526, - 5.095062, - 5.099531, - 5.103937, - 5.108287, - 5.112585, - 5.11684, - 5.121057, - 5.125242, - 5.129404, - 5.133548, - 5.137683, - 5.141815, - 5.145952, - 5.150101, - 5.154269, - 5.158463, - 5.16269, - 5.166957, - 5.171271, - 5.175638, - 5.180065, - 5.184557, - 5.18912, - 5.193759, - 5.19848, - 5.203288, - 5.208186, - 5.213178, - 5.218269, - 5.223461, - 5.228756, - 5.234158, - 5.239667, - 5.245284, - 5.251012, - 5.256848, - 5.262794, - 5.268849, - 5.27501, - 5.281277, - 5.287646, - 5.294115, - 5.300681, - 5.307341, - 5.314088, - 5.320921, - 5.327833, - 5.334819, - 5.341874, - 5.348992, - 5.356167, - 5.363392, - 5.370662, - 5.37797, - 5.385308, - 5.39267, - 5.40005, - 5.407439, - 5.414831, - 5.422219, - 5.429596, - 5.436955, - 5.444289, - 5.451591, - 5.458855, - 5.466074, - 5.473243, - 5.480355, - 5.487405, - 5.494387, - 5.501297, - 5.50813, - 5.514881, - 5.521548, - 5.528126, - 5.534612, - 5.541005, - 5.547303, - 5.553503, - 5.559605, - 5.565609, - 5.571514, - 5.57732, - 5.58303, - 5.588644, - 5.594163, - 5.599592, - 5.604931, - 5.610184, - 5.615355, - 5.620448, - 5.625467, - 5.630417, - 5.635302, - 5.640128, - 5.644901, - 5.649627, - 5.654311, - 5.65896, - 5.66358, - 5.668178, - 5.672761, - 5.677335, - 5.681908, - 5.686486, - 5.691076, - 5.695684, - 5.700319, - 5.704985, - 5.70969, - 5.71444, - 5.719241, - 5.724098, - 5.729018, - 5.734006, - 5.739066, - 5.744204, - 5.749423, - 5.754728, - 5.760122, - 5.765609, - 5.77119, - 5.776869, - 5.782647, - 5.788526, - 5.794506, - 5.800589, - 5.806774, - 5.81306, - 5.819447, - 5.825934, - 5.832518, - 5.839198, - 5.84597, - 5.852832, - 5.859781, - 5.866812, - 5.873921, - 5.881103, - 5.888355, - 5.89567, - 5.903044, - 5.910471, - 5.917945, - 5.92546, - 5.933009, - 5.940588, - 5.948188, - 5.955804, - 5.96343, - 5.971058, - 5.978683, - 5.986297, - 5.993894, - 6.001469, - 6.009014, - 6.016524, - 6.023993, - 6.031416, - 6.038786, - 6.046099, - 6.053349, - 6.060532, - 6.067645, - 6.074682, - 6.08164, - 6.088516, - 6.095308, - 6.102013, - 6.108629, - 6.115155, - 6.12159, - 6.127934, - 6.134186, - 6.140347, - 6.146417, - 6.152399, - 6.158294, - 6.164104, - 6.169832, - 6.175481, - 6.181055, - 6.186557, - 6.191991, - 6.197362, - 6.202675, - 6.207935, - 6.213147, - 6.218317, - 6.223451, - 6.228555, - 6.233634, - 6.238695, - 6.243745, - 6.24879, - 6.253836, - 6.258891, - 6.263959, - 6.269049, - 6.274166, - 6.279316, - 6.284507, - 6.289742, - 6.295029, - 6.300373, - 6.305779, - 6.311252, - 6.316796, - 6.322416, - 6.328116, - 6.333899, - 6.339769, - 6.345727, - 6.351777, - 6.35792, - 6.364158, - 6.370491, - 6.376921, - 6.383446, - 6.390068, - 6.396784, - 6.403595, - 6.410498, - 6.417491, - 6.424572, - 6.431739, - 6.438989, - 6.446317, - 6.453722, - 6.461197, - 6.468741, - 6.476347, - 6.484011, - 6.491729, - 6.499495, - 6.507303, - 6.515149, - 6.523026, - 6.530929, - 6.538852, - 6.546789, - 6.554735, - 6.562683, - 6.570627, - 6.578562, - 6.586483, - 6.594382, - 6.602256, - 6.610098, - 6.617904, - 6.625668, - 6.633386, - 6.641053, - 6.648666, - 6.65622, - 6.663712, - 6.671138, - 6.678495, - 6.685781, - 6.692994, - 6.700132, - 6.707193, - 6.714176, - 6.721081, - 6.727906, - 6.734653, - 6.741322, - 6.747914, - 6.75443, - 6.760872, - 6.767241, - 6.773541, - 6.779774, - 6.785943, - 6.792052, - 6.798104, - 6.804104, - 6.810056, - 6.815964, - 6.821833, - 6.827669, - 6.833475, - 6.839258, - 6.845023, - 6.850776, - 6.856522, - 6.862266, - 6.868015, - 6.873774, - 6.87955, - 6.885346, - 6.89117, - 6.897027, - 6.902921, - 6.908858, - 6.914844, - 6.920882, - 6.926977, - 6.933133, - 6.939355, - 6.945645, - 6.952008, - 6.958445, - 6.96496, - 6.971555, - 6.97823, - 6.984988, - 6.99183, - 6.998756, - 7.005767, - 7.012861, - 7.02004, - 7.027301, - 7.034645, - 7.042068, - 7.04957, - 7.057148, - 7.0648, - 7.072522, - 7.080312, - 7.088167, - 7.096083, - 7.104055, - 7.112081, - 7.120155, - 7.128273, - 7.13643, - 7.144623, - 7.152845, - 7.161092, - 7.169359, - 7.17764, - 7.18593, - 7.194224, - 7.202517, - 7.210804, - 7.21908, - 7.227339, - 7.235576, - 7.243788, - 7.25197, - 7.260117, - 7.268226, - 7.276291, - 7.284311, - 7.292281, - 7.300198, - 7.30806, - 7.315863, - 7.323606, - 7.331286, - 7.338901, - 7.346451, - 7.353934, - 7.361349, - 7.368696, - 7.375975, - 7.383186, - 7.390329, - 7.397406, - 7.404418, - 7.411367, - 7.418254, - 7.425081, - 7.431852, - 7.438568, - 7.445233, - 7.451851, - 7.458425, - 7.464958, - 7.471454, - 7.477919, - 7.484355, - 7.490767, - 7.497161, - 7.50354, - 7.509908, - 7.516272, - 7.522635, - 7.529002, - 7.535378, - 7.541768, - 7.548176, - 7.554607, - 7.561065, - 7.567555, - 7.574081, - 7.580647, - 7.587257, - 7.593914, - 7.600623, - 7.607385, - 7.614205, - 7.621084, - 7.628025, - 7.63503, - 7.6421, - 7.649238, - 7.656443, - 7.663717, - 7.671059, - 7.678471, - 7.685952, - 7.6935, - 7.701116, - 7.708798, - 7.716544, - 7.724353, - 7.732223, - 7.740152, - 7.748137, - 7.756175, - 7.764264, - 7.7724, - 7.78058, - 7.788801, - 7.797059, - 7.80535, - 7.813671, - 7.822017, - 7.830384, - 7.838769, - 7.847168, - 7.855575, - 7.863987, - 7.8724, - 7.88081, - 7.889211, - 7.897602, - 7.905976, - 7.914331, - 7.922663, - 7.930968, - 7.939242, - 7.947482, - 7.955686, - 7.96385, - 7.971973, - 7.980052, - 7.988086, - 7.996073, - 8.004013, - 8.011903, - 8.019743, - 8.027534, - 8.035274, - 8.042963, - 8.050603, - 8.058193, - 8.065733, - 8.073225, - 8.080669, - 8.088066, - 8.095418, - 8.102725, - 8.10999, - 8.117214, - 8.1244, - 8.131549, - 8.138664, - 8.145748, - 8.152802, - 8.159831, - 8.166837, - 8.173824, - 8.180795, - 8.187753, - 8.194702, - 8.201645, - 8.208587, - 8.215531, - 8.222481, - 8.229439, - 8.236411, - 8.243398, - 8.250404, - 8.257433, - 8.264487, - 8.271569, - 8.278683, - 8.28583, - 8.293014, - 8.300236, - 8.3075, - 8.314807, - 8.322158, - 8.329557, - 8.337004, - 8.344501, - 8.352049, - 8.359649, - 8.367302, - 8.375008, - 8.382767, - 8.39058, - 8.398445, - 8.406363, - 8.414333, - 8.422353, - 8.430422, - 8.438539, - 8.446702, - 8.454908, - 8.463156, - 8.471444, - 8.479768, - 8.488126, - 8.496516, - 8.504934, - 8.513378, - 8.521845, - 8.530332, - 8.538836, - 8.547355, - 8.555884, - 8.564421, - 8.572964, - 8.581508, - 8.590052, - 8.598592, - 8.607125, - 8.615649, - 8.62416, - 8.632655, - 8.641133, - 8.649589, - 8.658023, - 8.66643, - 8.67481, - 8.683161, - 8.69148, - 8.699768, - 8.708022, - 8.716243, - 8.72443, - 8.732583, - 8.740703, - 8.74879, - 8.756845, - 8.764869, - 8.772863, - 8.780828, - 8.788766, - 8.796679, - 8.804567, - 8.812433, - 8.820277, - 8.828102, - 8.835909, - 8.843698, - 8.851473, - 8.859233, - 8.866981, - 8.874719, - 8.882447, - 8.890169, - 8.897885, - 8.905597, - 8.913308, - 8.92102, - 8.928735, - 8.936454, - 8.944181, - 8.951918, - 8.959666, - 8.967428, - 8.975206, - 8.983002, - 8.990818, - 8.998655, - 9.006516, - 9.014401, - 9.022313, - 9.030251, - 9.038217, - 9.046213, - 9.054239, - 9.062295, - 9.070382, - 9.078502, - 9.086654, - 9.094839, - 9.103057, - 9.111308, - 9.119593, - 9.127912, - 9.136265, - 9.144651, - 9.15307, - 9.161522, - 9.170006, - 9.178521, - 9.187067, - 9.195642, - 9.204246, - 9.212876, - 9.221531, - 9.23021, - 9.23891, - 9.247631, - 9.256369, - 9.265124, - 9.273893, - 9.282675, - 9.291467, - 9.300268, - 9.309075, - 9.317888, - 9.326704, - 9.335521, - 9.344339, - 9.353154, - 9.361967, - 9.370774, - 9.379576, - 9.388369, - 9.397154, - 9.405929, - 9.414692, - 9.423442, - 9.432179, - 9.440901, - 9.449608, - 9.458299, - 9.466975, - 9.475634, - 9.484278, - 9.492905, - 9.501518, - 9.510116, - 9.518701, - 9.527272, - 9.535833, - 9.544382, - 9.552923, - 9.561455, - 9.569981, - 9.578501, - 9.587017, - 9.59553, - 9.60404, - 9.612549, - 9.621058, - 9.629568, - 9.638079, - 9.646592, - 9.655108, - 9.663628, - 9.672152, - 9.680681, - 9.689216, - 9.697757, - 9.706305, - 9.714861, - 9.723425, - 9.731997, - 9.740579, - 9.749171, - 9.757772, - 9.766385, - 9.775008, - 9.783643, - 9.792289, - 9.800947, - 9.809618, - 9.8183, - 9.826994, - 9.8357, - 9.844418, - 9.853147, - 9.861888, - 9.87064, - 9.879402, - 9.888175, - 9.896959, - 9.905752, - 9.914555, - 9.923367, - 9.932188, - 9.941018, - 9.949856, - 9.958702, - 9.967555, - 9.976417, - 9.985285, - 9.994159, - 10.00304, - 10.011927, - 10.020819, - 10.029715, - 10.038616, - 10.047521, - 10.056428, - 10.065339, - 10.074251, - 10.083164, - 10.092078, - 10.100992, - 10.109906, - 10.11882, - 10.127732, - 10.136643, - 10.145553, - 10.154461, - 10.163367, - 10.172272, - 10.181174, - 10.190076, - 10.198976, - 10.207875, - 10.216773, - 10.22567, - 10.234566, - 10.243463, - 10.25236, - 10.261258, - 10.270157, - 10.279059, - 10.287963, - 10.296871, - 10.305783, - 10.314702, - 10.323627, - 10.332561, - 10.341504, - 10.350458, - 10.359424, - 10.368404, - 10.377399, - 10.386409, - 10.395435, - 10.404479, - 10.41354, - 10.42262, - 10.431717, - 10.440833, - 10.449966, - 10.459116, - 10.468283, - 10.477466, - 10.486663, - 10.495874, - 10.505097, - 10.514332, - 10.523577, - 10.532832, - 10.542095, - 10.551364, - 10.560639, - 10.569919, - 10.579202, - 10.588487, - 10.597773, - 10.607059, - 10.616343, - 10.625624, - 10.634901, - 10.644174, - 10.653439, - 10.662697, - 10.671946, - 10.681185, - 10.690413, - 10.699629, - 10.708832, - 10.718021, - 10.727195, - 10.736354, - 10.745496, - 10.754622, - 10.763731, - 10.772823, - 10.781897, - 10.790955, - 10.799997, - 10.809022, - 10.818032, - 10.827027, - 10.836008, - 10.844976, - 10.853931, - 10.862876, - 10.87181, - 10.880735, - 10.889652, - 10.898561, - 10.907465, - 10.916362, - 10.925256, - 10.934146, - 10.943033, - 10.951919, - 10.960805, - 10.96969, - 10.978577, - 10.987466, - 10.996359, - 11.005257, - 11.014161, - 11.023074, - 11.031997, - 11.040931, - 11.04988, - 11.058846, - 11.06783, - 11.076835, - 11.085864, - 11.094917, - 11.103998, - 11.113109, - 11.12225, - 11.131423, - 11.14063, - 11.149872, - 11.159148, - 11.168461, - 11.177809, - 11.187193, - 11.196614, - 11.206071, - 11.215563, - 11.225091, - 11.234653, - 11.244251, - 11.253882, - 11.263547, - 11.273244, - 11.282974, - 11.292735, - 11.302526, - 11.312347, - 11.322196, - 11.332072, - 11.341972, - 11.351896, - 11.361841, - 11.371804, - 11.381784, - 11.391777, - 11.401782, - 11.411794, - 11.421811, - 11.431829, - 11.441847, - 11.45186, - 11.461866, - 11.471861, - 11.481843, - 11.49181, - 11.501758, - 11.511685, - 11.52159, - 11.531471, - 11.541325, - 11.551152, - 11.560951, - 11.570719, - 11.580457, - 11.590163, - 11.599837, - 11.609479, - 11.619088, - 11.628664, - 11.638206, - 11.647716, - 11.657192, - 11.666636, - 11.676047, - 11.685425, - 11.694772, - 11.704087, - 11.713372, - 11.722628, - 11.731855, - 11.741055, - 11.750229, - 11.75938, - 11.768509, - 11.777618, - 11.78671, - 11.795787, - 11.804852, - 11.813907, - 11.822956, - 11.832001, - 11.841045, - 11.850091, - 11.859141, - 11.868199, - 11.877267, - 11.886348, - 11.895446, - 11.904562, - 11.913699, - 11.922862, - 11.932053, - 11.941275, - 11.950533, - 11.959829, - 11.969167, - 11.978551, - 11.987983, - 11.997469, - 12.007009, - 12.016609, - 12.02627, - 12.035995, - 12.045786, - 12.055646, - 12.065576, - 12.075576, - 12.085647, - 12.095789, - 12.106003, - 12.116285, - 12.126636, - 12.137054, - 12.147535, - 12.158078, - 12.168679, - 12.179335, - 12.190043, - 12.200798, - 12.211597, - 12.222435, - 12.233309, - 12.244214, - 12.255146, - 12.266099, - 12.27707, - 12.288054, - 12.299045, - 12.31004, - 12.321032, - 12.332017, - 12.342989, - 12.353944, - 12.364876, - 12.37578, - 12.386651, - 12.397486, - 12.408278, - 12.419024, - 12.429719, - 12.44036, - 12.450944, - 12.461468, - 12.47193, - 12.482328, - 12.49266, - 12.502927, - 12.513127, - 12.523261, - 12.533329, - 12.543332, - 12.553271, - 12.563148, - 12.572964, - 12.582722, - 12.592422, - 12.602068, - 12.611662, - 12.621205, - 12.6307, - 12.640151, - 12.649559, - 12.658927, - 12.668258, - 12.677556, - 12.686823, - 12.696062, - 12.705278, - 12.714473, - 12.723653, - 12.732819, - 12.741977, - 12.751131, - 12.760284, - 12.769442, - 12.778609, - 12.787788, - 12.796984, - 12.806201, - 12.815444, - 12.824717, - 12.834023, - 12.843367, - 12.852753, - 12.862185, - 12.871667, - 12.881202, - 12.890796, - 12.90045, - 12.910169, - 12.919956, - 12.929814, - 12.939745, - 12.949751, - 12.959835, - 12.969998, - 12.980241, - 12.990565, - 13.000971, - 13.011457, - 13.022023, - 13.032668, - 13.043391, - 13.05419, - 13.065062, - 13.076006, - 13.087017, - 13.098092, - 13.109229, - 13.120423, - 13.131669, - 13.142963, - 13.154302, - 13.165678, - 13.177089, - 13.188527, - 13.199988, - 13.211467, - 13.222956, - 13.23445, - 13.245944, - 13.25743, - 13.268902, - 13.280355, - 13.291782, - 13.303175, - 13.31453, - 13.32584, - 13.337099, - 13.348301, - 13.35944, - 13.370513, - 13.381513, - 13.392437, - 13.403282, - 13.414042, - 13.424717, - 13.435304, - 13.445801, - 13.456207, - 13.466522, - 13.476746, - 13.486878, - 13.496921, - 13.506874, - 13.516741, - 13.526521, - 13.536219, - 13.545835, - 13.555373, - 13.564836, - 13.574225, - 13.583545, - 13.592799, - 13.601989, - 13.611121, - 13.620197, - 13.629222, - 13.638201, - 13.647137, - 13.656036, - 13.664903, - 13.673743, - 13.682563, - 13.691367, - 13.700161, - 13.708953, - 13.717747, - 13.726551, - 13.735371, - 13.744213, - 13.753083, - 13.761987, - 13.770933, - 13.779925, - 13.788971, - 13.798075, - 13.807243, - 13.816479, - 13.82579, - 13.83518, - 13.844653, - 13.854212, - 13.863863, - 13.873607, - 13.883447, - 13.893387, - 13.903429, - 13.913572, - 13.92382, - 13.934172, - 13.944629, - 13.955189, - 13.965853, - 13.976617, - 13.987481, - 13.998441, - 14.009494, - 14.020636, - 14.031863, - 14.04317, - 14.054551, - 14.066001, - 14.077513, - 14.089082, - 14.1007, - 14.11236, - 14.124054, - 14.135776, - 14.147517, - 14.15927, - 14.171026, - 14.182778, - 14.194517, - 14.206236, - 14.217925, - 14.229578, - 14.241186, - 14.252742, - 14.264239, - 14.275669, - 14.287027, - 14.298305, - 14.3095, - 14.320605, - 14.331616, - 14.342529, - 14.353342, - 14.364051, - 14.374655, - 14.385152, - 14.395542, - 14.405824, - 14.416, - 14.426069, - 14.436034, - 14.445896, - 14.455658, - 14.465322, - 14.474892, - 14.484371, - 14.493762, - 14.50307, - 14.512299, - 14.521454, - 14.530539, - 14.53956, - 14.548522, - 14.55743, - 14.566291, - 14.575109, - 14.583893, - 14.592647, - 14.601379, - 14.610095, - 14.618801, - 14.627506, - 14.636216, - 14.644938, - 14.653678, - 14.662445, - 14.671244, - 14.680082, - 14.688967, - 14.697905, - 14.706901, - 14.715962, - 14.725094, - 14.734303, - 14.743593, - 14.752971, - 14.76244, - 14.772006, - 14.781673, - 14.791445, - 14.801326, - 14.81132, - 14.821431, - 14.83166, - 14.842012, - 14.852489, - 14.863093, - 14.873826, - 14.884689, - 14.895684, - 14.906809, - 14.918065, - 14.929451, - 14.940965, - 14.952603, - 14.964364, - 14.976243, - 14.988236, - 15.000337, - 15.012541, - 15.024841, - 15.03723, - 15.049702, - 15.062248, - 15.074859, - 15.087528, - 15.100246, - 15.113004, - 15.125792, - 15.138601, - 15.151422, - 15.164244, - 15.177059, - 15.189857, - 15.202629, - 15.215364, - 15.228055, - 15.240692, - 15.253266, - 15.265769, - 15.278194, - 15.290532, - 15.302777, - 15.314922, - 15.326961, - 15.33889, - 15.350702, - 15.362396, - 15.373967, - 15.385414, - 15.396735, - 15.407931, - 15.419, - 15.429945, - 15.440768, - 15.451469, - 15.462053, - 15.472523, - 15.482884, - 15.493138, - 15.503292, - 15.513351, - 15.52332, - 15.533206, - 15.543013, - 15.55275, - 15.562424, - 15.57204, - 15.581608, - 15.591134, - 15.600628, - 15.610096, - 15.619549, - 15.628994, - 15.638442, - 15.6479, - 15.657378, - 15.666886, - 15.676431, - 15.686023, - 15.695672, - 15.705384, - 15.715167, - 15.725031, - 15.734981, - 15.745024, - 15.755166, - 15.765413, - 15.77577, - 15.786242, - 15.796831, - 15.807542, - 15.818376, - 15.829338, - 15.840427, - 15.851646, - 15.862995, - 15.874474, - 15.886083, - 15.897821, - 15.909688, - 15.921682, - 15.933801, - 15.946044, - 15.958407, - 15.970888, - 15.983484, - 15.99619, - 16.009001, - 16.021912, - 16.034916, - 16.048009, - 16.061181, - 16.074426, - 16.087734, - 16.101097, - 16.114506, - 16.127951, - 16.141421, - 16.154908, - 16.1684, - 16.181888, - 16.195362, - 16.208811, - 16.222228, - 16.235603, - 16.248927, - 16.262194, - 16.275396, - 16.288526, - 16.301578, - 16.314546, - 16.327424, - 16.340209, - 16.352896, - 16.365479, - 16.377956, - 16.390323, - 16.402576, - 16.414713, - 16.426731, - 16.438628, - 16.450402, - 16.462051, - 16.473576, - 16.484974, - 16.496248, - 16.507398, - 16.518425, - 16.529333, - 16.540124, - 16.550803, - 16.561374, - 16.571841, - 16.582212, - 16.592492, - 16.602688, - 16.612807, - 16.622857, - 16.632845, - 16.64278, - 16.652668, - 16.662519, - 16.67234, - 16.68214, - 16.691926, - 16.701707, - 16.711492, - 16.721288, - 16.731104, - 16.74095, - 16.750833, - 16.760762, - 16.770746, - 16.780794, - 16.790913, - 16.801113, - 16.8114, - 16.821784, - 16.832271, - 16.842868, - 16.853583, - 16.86442, - 16.875386, - 16.886485, - 16.897721, - 16.909099, - 16.920621, - 16.932288, - 16.944104, - 16.956069, - 16.968183, - 16.980446, - 16.992858, - 17.005416, - 17.018118, - 17.030962, - 17.043944, - 17.05706, - 17.070306, - 17.083676, - 17.097164, - 17.110765, - 17.12447, - 17.138273, - 17.152164, - 17.166135, - 17.180177, - 17.194279, - 17.208431, - 17.222623, - 17.236844, - 17.251081, - 17.265324, - 17.279561, - 17.29378, - 17.307971, - 17.322121, - 17.336222, - 17.350262, - 17.364232, - 17.378123, - 17.391927, - 17.405637, - 17.419244, - 17.432742, - 17.446127, - 17.459391, - 17.472532, - 17.485545, - 17.498426, - 17.511173, - 17.523784, - 17.536257, - 17.54859, - 17.560783, - 17.572837, - 17.58475, - 17.596525, - 17.608162, - 17.619663, - 17.631033, - 17.642273, - 17.653388, - 17.664384, - 17.675265, - 17.686038, - 17.696709, - 17.707287, - 17.717779, - 17.728194, - 17.738541, - 17.748828, - 17.759066, - 17.769264, - 17.779432, - 17.789579, - 17.799715, - 17.80985, - 17.819993, - 17.830154, - 17.840342, - 17.850566, - 17.860835, - 17.871159, - 17.881546, - 17.892006, - 17.902546, - 17.913176, - 17.923904, - 17.934737, - 17.945683, - 17.95675, - 17.967944, - 17.979272, - 17.990739, - 18.002352, - 18.014113, - 18.026028, - 18.038099, - 18.050329, - 18.062718, - 18.075267, - 18.087975, - 18.100843, - 18.113866, - 18.127042, - 18.140368, - 18.153839, - 18.16745, - 18.181194, - 18.195066, - 18.209059, - 18.223165, - 18.237378, - 18.251688, - 18.266089, - 18.280571, - 18.295127, - 18.309748, - 18.324424, - 18.339147, - 18.353909, - 18.368699, - 18.383509, - 18.398328, - 18.413148, - 18.427959, - 18.442751, - 18.457514, - 18.472239, - 18.486916, - 18.501537, - 18.516093, - 18.530576, - 18.544978, - 18.559292, - 18.57351, - 18.587628, - 18.601639, - 18.615538, - 18.629322, - 18.642986, - 18.656528, - 18.669945, - 18.683235, - 18.696397, - 18.709429, - 18.722333, - 18.735107, - 18.747754, - 18.760273, - 18.772667, - 18.784938, - 18.797089, - 18.809122, - 18.821042, - 18.832854, - 18.844561, - 18.856169, - 18.867685, - 18.879115, - 18.890466, - 18.901746, - 18.912963, - 18.924126, - 18.935243, - 18.946323, - 18.957377, - 18.968414, - 18.979443, - 18.990474, - 19.001518, - 19.012584, - 19.023681, - 19.03482, - 19.046009, - 19.057259, - 19.068577, - 19.079974, - 19.091456, - 19.103033, - 19.114711, - 19.126498, - 19.1384, - 19.150423, - 19.162573, - 19.174852, - 19.187267, - 19.19982, - 19.212513, - 19.22535, - 19.238331, - 19.251457, - 19.264729, - 19.278148, - 19.291711, - 19.305419, - 19.319269, - 19.333259, - 19.347388, - 19.36165, - 19.376044, - 19.390563, - 19.405204, - 19.419961, - 19.434828, - 19.449798, - 19.464865, - 19.48002, - 19.495256, - 19.510564, - 19.525935, - 19.54136, - 19.556828, - 19.57233, - 19.587856, - 19.603395, - 19.618936, - 19.634469, - 19.649983, - 19.665469, - 19.680915, - 19.696312, - 19.711652, - 19.726925, - 19.742123, - 19.757239, - 19.772264, - 19.787194, - 19.802021, - 19.816741, - 19.831348, - 19.845839, - 19.860208, - 19.874453, - 19.888571, - 19.902558, - 19.916413, - 19.930133, - 19.943717, - 19.957163, - 19.970471, - 19.98364, - 19.996671, - 20.009565, - 20.022323, - 20.034947, - 20.04744, - 20.059807, - 20.072051, - 20.084179, - 20.096196, - 20.108108, - 20.119925, - 20.131653, - 20.143302, - 20.154882, - 20.166401, - 20.177871, - 20.189301, - 20.200703, - 20.212087, - 20.223463, - 20.234844, - 20.246238, - 20.257659, - 20.269115, - 20.280618, - 20.292178, - 20.303806, - 20.315511, - 20.327304, - 20.339193, - 20.351188, - 20.363296, - 20.375527, - 20.387887, - 20.400382, - 20.413019, - 20.425802, - 20.438735, - 20.451819, - 20.465058, - 20.478452, - 20.491999, - 20.5057, - 20.519552, - 20.533552, - 20.547696, - 20.561981, - 20.5764, - 20.59095, - 20.605623, - 20.620414, - 20.635317, - 20.650324, - 20.665429, - 20.680626, - 20.695906, - 20.711262, - 20.726688, - 20.742176, - 20.757717, - 20.773304, - 20.78893, - 20.804585, - 20.820262, - 20.835952, - 20.851645, - 20.867334, - 20.88301, - 20.898663, - 20.914287, - 20.929871, - 20.945409, - 20.960893, - 20.976315, - 20.991669, - 21.006949, - 21.022147, - 21.03726, - 21.052282, - 21.067209, - 21.082037, - 21.096764, - 21.111386, - 21.125901, - 21.140309, - 21.154607, - 21.168795, - 21.182872, - 21.196838, - 21.210693, - 21.224438, - 21.238072, - 21.251597, - 21.265014, - 21.278324, - 21.291529, - 21.304631, - 21.317632, - 21.330535, - 21.343345, - 21.356063, - 21.368696, - 21.381247, - 21.393723, - 21.406128, - 21.418471, - 21.430757, - 21.442993, - 21.455189, - 21.467351, - 21.479489, - 21.491611, - 21.503725, - 21.515841, - 21.527967, - 21.540113, - 21.552287, - 21.564498, - 21.576756, - 21.589068, - 21.601444, - 21.61389, - 21.626415, - 21.639025, - 21.651729, - 21.664531, - 21.677438, - 21.690455, - 21.703586, - 21.716837, - 21.730211, - 21.74371, - 21.757337, - 21.771096, - 21.784986, - 21.799009, - 21.813166, - 21.827457, - 21.841881, - 21.856437, - 21.871123, - 21.885937, - 21.900877, - 21.915938, - 21.931117, - 21.946408, - 21.961807, - 21.977307, - 21.992903, - 22.008587, - 22.024351, - 22.040189, - 22.056092, - 22.072052, - 22.08806, - 22.104108, - 22.120187, - 22.136288, - 22.152402, - 22.16852, - 22.184634, - 22.200736, - 22.216818, - 22.232873, - 22.248892, - 22.26487, - 22.280799, - 22.296673, - 22.312486, - 22.328233, - 22.343909, - 22.359507, - 22.375024, - 22.390456, - 22.405797, - 22.421045, - 22.436196, - 22.451247, - 22.466195, - 22.481037, - 22.495773, - 22.510399, - 22.524916, - 22.539321, - 22.553616, - 22.567801, - 22.581877, - 22.595845, - 22.609708, - 22.623468, - 22.63713, - 22.650698, - 22.664176, - 22.677569, - 22.690885, - 22.704129, - 22.717309, - 22.730431, - 22.743504, - 22.756536, - 22.769536, - 22.782511, - 22.795471, - 22.808424, - 22.82138, - 22.834347, - 22.847334, - 22.860351, - 22.873405, - 22.886507, - 22.899664, - 22.912886, - 22.926179, - 22.939553, - 22.953015, - 22.966572, - 22.980231, - 22.993998, - 23.007878, - 23.021876, - 23.035996, - 23.050241, - 23.064613, - 23.079113, - 23.093741, - 23.108497, - 23.123381, - 23.138389, - 23.153519, - 23.168767, - 23.18413, - 23.199603, - 23.21518, - 23.230857, - 23.246628, - 23.262489, - 23.278432, - 23.294454, - 23.310549, - 23.326712, - 23.342937, - 23.35922, - 23.375556, - 23.391938, - 23.408363, - 23.424824, - 23.441317, - 23.457835, - 23.474372, - 23.490922, - 23.507479, - 23.524037, - 23.540589, - 23.557129, - 23.573651, - 23.590149, - 23.606617, - 23.62305, - 23.639442, - 23.655788, - 23.672083, - 23.688324, - 23.704507, - 23.72063, - 23.736689, - 23.752683, - 23.76861, - 23.784468, - 23.800257, - 23.815977, - 23.831627, - 23.847208, - 23.86272, - 23.878163, - 23.893539, - 23.908847, - 23.92409, - 23.939266, - 23.954379, - 23.969427, - 23.984413, - 23.999337, - 24.014199, - 24.029002, - 24.043746, - 24.058432, - 24.073063, - 24.087638, - 24.102162, - 24.116634, - 24.131059, - 24.145439, - 24.159777, - 24.174077, - 24.188343, - 24.202578, - 24.216788, - 24.230977, - 24.24515, - 24.259314, - 24.273473, - 24.287635, - 24.301804, - 24.315987, - 24.33019, - 24.344418, - 24.358678, - 24.372975, - 24.387314, - 24.4017, - 24.416139, - 24.430635, - 24.445193, - 24.459818, - 24.474515, - 24.489287, - 24.504138, - 24.519073, - 24.534095, - 24.549207, - 24.564412, - 24.579712, - 24.595109, - 24.610606, - 24.626202, - 24.641898, - 24.657694, - 24.673589, - 24.689581, - 24.705669, - 24.72185, - 24.73812, - 24.754475, - 24.77091, - 24.787421, - 24.804002, - 24.820646, - 24.837347, - 24.854098, - 24.870892, - 24.887722, - 24.90458, - 24.921458, - 24.93835, - 24.955249, - 24.972146, - 24.989035, - 25.005909, - 25.022761, - 25.039584, - 25.056372, - 25.073118, - 25.089815, - 25.106458, - 25.123041, - 25.139559, - 25.156007, - 25.172379, - 25.188674, - 25.204886, - 25.221013, - 25.237053, - 25.253004, - 25.268865, - 25.284636, - 25.300317, - 25.315908, - 25.331411, - 25.346828, - 25.36216, - 25.37741, - 25.392582, - 25.407679, - 25.422705, - 25.437664, - 25.452561, - 25.467399, - 25.482184, - 25.496921, - 25.511616, - 25.526273, - 25.540897, - 25.555495, - 25.570071, - 25.584631, - 25.599181, - 25.613726, - 25.628271, - 25.642822, - 25.657384, - 25.671961, - 25.686559, - 25.701183, - 25.715837, - 25.730526, - 25.745252, - 25.760021, - 25.774835, - 25.789697, - 25.804609, - 25.819573, - 25.83459, - 25.849662, - 25.864788, - 25.87997, - 25.895206, - 25.910496, - 25.925838, - 25.941233, - 25.956678, - 25.972171, - 25.987712, - 26.003299, - 26.018929, - 26.034602, - 26.050314, - 26.066066, - 26.081854, - 26.097677, - 26.113533, - 26.129421, - 26.145338, - 26.161283, - 26.177253, - 26.193247, - 26.209262, - 26.225297, - 26.241349, - 26.257416, - 26.273495, - 26.289586, - 26.305685, - 26.32179, - 26.3379, - 26.354013, - 26.370127, - 26.38624, - 26.402351, - 26.418459, - 26.434561, - 26.450656, - 26.466744, - 26.482822, - 26.498889, - 26.514945, - 26.530988, - 26.547016, - 26.563029, - 26.579025, - 26.595005, - 26.610966, - 26.626907, - 26.642829, - 26.658729, - 26.674608, - 26.690464, - 26.706296, - 26.722103, - 26.737885, - 26.753641, - 26.769369, - 26.785069, - 26.800739, - 26.81638, - 26.831988, - 26.847565, - 26.863108, - 26.878616, - 26.89409, - 26.909528, - 26.924929, - 26.940293, - 26.95562, - 26.970909, - 26.986161, - 27.001377, - 27.016556, - 27.0317, - 27.046809, - 27.061887, - 27.076933, - 27.091952, - 27.106944, - 27.121914, - 27.136864, - 27.151799, - 27.166721, - 27.181636, - 27.196547, - 27.211459, - 27.226377, - 27.241304, - 27.256246, - 27.271207, - 27.28619, - 27.3012, - 27.316239, - 27.331312, - 27.346419, - 27.361565, - 27.376751, - 27.391979, - 27.40725, - 27.422565, - 27.437926, - 27.453333, - 27.468786, - 27.484286, - 27.499833, - 27.515426, - 27.531066, - 27.546753, - 27.562486, - 27.578264, - 27.594087, - 27.609955, - 27.625866, - 27.64182, - 27.657816, - 27.673853, - 27.689929, - 27.706042, - 27.722191, - 27.738374, - 27.754588, - 27.770831, - 27.787101, - 27.803394, - 27.819708, - 27.83604, - 27.852388, - 27.868749, - 27.885121, - 27.901502, - 27.917891, - 27.934285, - 27.950685, - 27.967089, - 27.983499, - 27.999912, - 28.016331, - 28.032756, - 28.049186, - 28.065624, - 28.082069, - 28.098523, - 28.114987, - 28.131461, - 28.147946, - 28.164443, - 28.180952, - 28.197474, - 28.214009, - 28.230556, - 28.247116, - 28.26369, - 28.280278, - 28.296879, - 28.313495, - 28.330126, - 28.346772, - 28.363434, - 28.380113, - 28.396808, - 28.413522, - 28.430255, - 28.447007, - 28.463778, - 28.480569, - 28.49738, - 28.51421, - 28.53106, - 28.547929, - 28.564815, - 28.58172, - 28.59864, - 28.615576, - 28.632527, - 28.649491, - 28.666466, - 28.683453, - 28.700448, - 28.717451, - 28.734459, - 28.751473, - 28.768489, - 28.785508, - 28.802527, - 28.819547, - 28.836565, - 28.853581, - 28.870595, - 28.887607, - 28.904617, - 28.921624, - 28.93863, - 28.955634, - 28.972639, - 28.989644, - 29.006651, - 29.023661, - 29.040676, - 29.057695, - 29.074721, - 29.091755, - 29.108798, - 29.125851, - 29.142914, - 29.15999, - 29.177077, - 29.194178, - 29.211292, - 29.22842, - 29.245563, - 29.262721, - 29.279894, - 29.297083, - 29.314289, - 29.331511, - 29.348751, - 29.366008, - 29.383282, - 29.400574, - 29.417883, - 29.435209, - 29.452553, - 29.469914, - 29.487292, - 29.504688, - 29.5221, - 29.53953, - 29.556977, - 29.574443, - 29.591927, - 29.609431, - 29.626955, - 29.644499, - 29.662066, - 29.679654, - 29.697265, - 29.714899, - 29.732556, - 29.750236, - 29.767939, - 29.785663, - 29.803408, - 29.821172, - 29.838955, - 29.856753, - 29.874565, - 29.89239, - 29.910225, - 29.928067, - 29.945915, - 29.963767, - 29.98162, - 29.999472, - 30.017321, - 30.035165, - 30.053002, - 30.070831, - 30.088649, - 30.106455, - 30.124248, - 30.142025, - 30.159785, - 30.177526, - 30.195248, - 30.212949, - 30.230627, - 30.248282, - 30.265911, - 30.283514, - 30.301089, - 30.318635, - 30.336151, - 30.353635, - 30.371086, - 30.388504, - 30.405887, - 30.423236, - 30.440548, - 30.457825, - 30.475066, - 30.49227, - 30.50944, - 30.526576, - 30.543678, - 30.56075, - 30.577792, - 30.594807, - 30.611797, - 30.628764, - 30.645709, - 30.662637, - 30.679549, - 30.696449, - 30.71334, - 30.730225, - 30.747109, - 30.763994, - 30.780887, - 30.79779, - 30.814708, - 30.831645, - 30.848607, - 30.865597, - 30.882619, - 30.899677, - 30.916775, - 30.933914, - 30.951098, - 30.968328, - 30.985606, - 31.002932, - 31.020308, - 31.037734, - 31.05521, - 31.072734, - 31.090307, - 31.107928, - 31.125596, - 31.143312, - 31.161073, - 31.17888, - 31.196733, - 31.214632, - 31.232576, - 31.250568, - 31.268608, - 31.286698, - 31.304838, - 31.323031, - 31.341279, - 31.359582, - 31.377944, - 31.396365, - 31.414847, - 31.43339, - 31.451996, - 31.470664, - 31.489395, - 31.508188, - 31.527042, - 31.545957, - 31.564931, - 31.583962, - 31.603048, - 31.622188, - 31.64138, - 31.660619, - 31.679905, - 31.699235, - 31.718606, - 31.738015, - 31.75746, - 31.776937, - 31.796444, - 31.815978, - 31.835535, - 31.855113, - 31.874706, - 31.894311, - 31.913923, - 31.933539, - 31.953153, - 31.972759, - 31.992352, - 32.011926, - 32.031475, - 32.050992, - 32.070471, - 32.089906, - 32.10929, - 32.128617, - 32.147881, - 32.167077, - 32.1862, - 32.205245, - 32.22421, - 32.243092, - 32.261888, - 32.280598, - 32.299221, - 32.31776, - 32.336215, - 32.35459, - 32.372887, - 32.39111, - 32.409264, - 32.427353, - 32.445382, - 32.463358, - 32.481285, - 32.499169, - 32.517015, - 32.534828, - 32.552616, - 32.570382, - 32.588133, - 32.605875, - 32.623612, - 32.641351, - 32.659099, - 32.67686, - 32.694642, - 32.71245, - 32.730292, - 32.748173, - 32.7661, - 32.78408, - 32.802119, - 32.820224, - 32.838401, - 32.856657, - 32.874997, - 32.893428, - 32.911954, - 32.930581, - 32.949312, - 32.968151, - 32.987101, - 33.006163, - 33.025339, - 33.044629, - 33.064033, - 33.083549, - 33.103176, - 33.122911, - 33.142752, - 33.162695, - 33.182737, - 33.202873, - 33.2231, - 33.243413, - 33.263808, - 33.28428, - 33.304825, - 33.325438, - 33.346114, - 33.366847, - 33.387633, - 33.408467, - 33.429342, - 33.450254, - 33.471195, - 33.492161, - 33.513144, - 33.534139, - 33.555138, - 33.576136, - 33.597127, - 33.618103, - 33.639059, - 33.659989, - 33.680888, - 33.70175, - 33.72257, - 33.743345, - 33.764071, - 33.784744, - 33.805363, - 33.825923, - 33.846424, - 33.866864, - 33.887242, - 33.907556, - 33.927806, - 33.947991, - 33.968112, - 33.988168, - 34.00816, - 34.028089, - 34.047956, - 34.067761, - 34.087506, - 34.107192, - 34.12682, - 34.146392, - 34.16591, - 34.185377, - 34.204794, - 34.224166, - 34.243496, - 34.26279, - 34.282051, - 34.301285, - 34.3205, - 34.3397, - 34.358893, - 34.378086, - 34.397286, - 34.416499, - 34.435732, - 34.454991, - 34.474281, - 34.493609, - 34.512979, - 34.532395, - 34.55186, - 34.571378, - 34.590952, - 34.610584, - 34.630274, - 34.650025, - 34.669839, - 34.689715, - 34.709657, - 34.729664, - 34.74974, - 34.769886, - 34.790103, - 34.810395, - 34.830762, - 34.851209, - 34.871738, - 34.892351, - 34.913051, - 34.933841, - 34.954723, - 34.975701, - 34.996777, - 35.017952, - 35.039227, - 35.060604, - 35.082084, - 35.103664, - 35.125345, - 35.147125, - 35.169001, - 35.19097, - 35.213029, - 35.235172, - 35.257396, - 35.279693, - 35.302058, - 35.324484, - 35.346964, - 35.36949, - 35.392055, - 35.414652, - 35.437271, - 35.459906, - 35.482548, - 35.505189, - 35.527821, - 35.550436, - 35.573027, - 35.595584, - 35.618101, - 35.640568, - 35.662979, - 35.685324, - 35.707596, - 35.729788, - 35.75189, - 35.773896, - 35.795797, - 35.817586, - 35.839256, - 35.860802, - 35.882216, - 35.903494, - 35.924633, - 35.945629, - 35.96648, - 35.987186, - 36.007747, - 36.028165, - 36.048444, - 36.068587, - 36.088598, - 36.108486, - 36.128256, - 36.147915, - 36.167473, - 36.186938, - 36.206319, - 36.225624, - 36.244865, - 36.264049, - 36.283186, - 36.302286, - 36.321358, - 36.340411, - 36.359455, - 36.378499, - 36.397553, - 36.416625, - 36.435726, - 36.454864, - 36.474049, - 36.493291, - 36.512598, - 36.531979, - 36.551444, - 36.571002, - 36.59066, - 36.610427, - 36.630312, - 36.650321, - 36.670463, - 36.690742, - 36.711165, - 36.731737, - 36.752462, - 36.773341, - 36.794378, - 36.815573, - 36.836925, - 36.858435, - 36.880098, - 36.901913, - 36.923875, - 36.94598, - 36.968223, - 36.990598, - 37.013099, - 37.035721, - 37.058456, - 37.081299, - 37.104243, - 37.127282, - 37.150408, - 37.173616, - 37.196897, - 37.220246, - 37.243655, - 37.267116, - 37.290622, - 37.314165, - 37.337736, - 37.361328, - 37.384932, - 37.408538, - 37.432139, - 37.455725, - 37.479287, - 37.502818, - 37.526307, - 37.549748, - 37.573132, - 37.596452, - 37.619701, - 37.642873, - 37.665961, - 37.688962, - 37.711869, - 37.734679, - 37.757389, - 37.779994, - 37.802492, - 37.824882, - 37.847161, - 37.869329, - 37.891385, - 37.91333, - 37.935165, - 37.95689, - 37.978508, - 38.00002, - 38.021429, - 38.042738, - 38.06395, - 38.085068, - 38.106097, - 38.12704, - 38.147902, - 38.16869, - 38.189408, - 38.210064, - 38.230664, - 38.251216, - 38.271727, - 38.292205, - 38.312659, - 38.333098, - 38.35353, - 38.373963, - 38.394408, - 38.414872, - 38.435365, - 38.455894, - 38.476467, - 38.497092, - 38.517776, - 38.538527, - 38.559351, - 38.580254, - 38.601242, - 38.622322, - 38.643498, - 38.664777, - 38.686163, - 38.707663, - 38.72928, - 38.751022, - 38.772891, - 38.794892, - 38.81703, - 38.839307, - 38.861728, - 38.884295, - 38.907009, - 38.929873, - 38.952887, - 38.976051, - 38.999366, - 39.02283, - 39.04644, - 39.070196, - 39.094093, - 39.118128, - 39.142296, - 39.166594, - 39.191014, - 39.215551, - 39.240199, - 39.26495, - 39.289797, - 39.314731, - 39.339744, - 39.364827, - 39.389971, - 39.415166, - 39.440403, - 39.465671, - 39.490961, - 39.516261, - 39.541563, - 39.566854, - 39.592126, - 39.617366, - 39.642567, - 39.667717, - 39.692806, - 39.717826, - 39.742767, - 39.76762, - 39.792377, - 39.81703, - 39.841571, - 39.865995, - 39.890295, - 39.914467, - 39.938506, - 39.96241, - 39.986175, - 40.009801, - 40.033288, - 40.056635, - 40.079844, - 40.102918, - 40.125861, - 40.148678, - 40.171373, - 40.193954, - 40.216427, - 40.238801, - 40.261085, - 40.283287, - 40.305417, - 40.327485, - 40.349501, - 40.371475, - 40.393419, - 40.415343, - 40.437258, - 40.459174, - 40.481103, - 40.503055, - 40.52504, - 40.54707, - 40.569155, - 40.591304, - 40.613526, - 40.635831, - 40.658227, - 40.680722, - 40.703322, - 40.726035, - 40.748865, - 40.77182, - 40.794903, - 40.818118, - 40.84147, - 40.864961, - 40.888592, - 40.912366, - 40.936283, - 40.960343, - 40.984547, - 41.008893, - 41.033381, - 41.05801, - 41.082779, - 41.107686, - 41.13273, - 41.157908, - 41.18322, - 41.208662, - 41.234231, - 41.259926, - 41.285743, - 41.311677, - 41.337724, - 41.36388, - 41.390137, - 41.416491, - 41.442934, - 41.469459, - 41.496056, - 41.522718, - 41.549434, - 41.576196, - 41.602994, - 41.629819, - 41.656659, - 41.683506, - 41.710349, - 41.737181, - 41.763991, - 41.790771, - 41.817513, - 41.84421, - 41.870852, - 41.897434, - 41.923949, - 41.950389, - 41.976748, - 42.003021, - 42.0292, - 42.05528, - 42.081255, - 42.10712, - 42.132868, - 42.158496, - 42.183997, - 42.209367, - 42.234602, - 42.259699, - 42.284654, - 42.309465, - 42.334131, - 42.35865, - 42.383024, - 42.407253, - 42.43134, - 42.455289, - 42.479103, - 42.502788, - 42.526349, - 42.549794, - 42.57313, - 42.596365, - 42.619507, - 42.642565, - 42.665548, - 42.688466, - 42.711329, - 42.734146, - 42.756927, - 42.779682, - 42.802422, - 42.825157, - 42.847897, - 42.870652, - 42.893434, - 42.916253, - 42.939119, - 42.962042, - 42.985034, - 43.008105, - 43.031264, - 43.054521, - 43.077887, - 43.101369, - 43.124977, - 43.148718, - 43.172599, - 43.196627, - 43.220807, - 43.245144, - 43.269642, - 43.294303, - 43.319129, - 43.344122, - 43.369281, - 43.394605, - 43.420092, - 43.445739, - 43.471543, - 43.497499, - 43.523603, - 43.549849, - 43.576231, - 43.602742, - 43.629376, - 43.656124, - 43.682979, - 43.709931, - 43.736973, - 43.764094, - 43.791286, - 43.818537, - 43.845838, - 43.87318, - 43.90055, - 43.927941, - 43.95534, - 43.982739, - 44.010127, - 44.037495, - 44.064834, - 44.092135, - 44.11939, - 44.14659, - 44.173729, - 44.2008, - 44.227795, - 44.25471, - 44.281536, - 44.308271, - 44.334909, - 44.361447, - 44.387882, - 44.414212, - 44.440435, - 44.466552, - 44.492561, - 44.518464, - 44.544262, - 44.569956, - 44.59555, - 44.621045, - 44.646447, - 44.67176, - 44.69699, - 44.722146, - 44.747236, - 44.772273, - 44.797268, - 44.822235, - 44.847189, - 44.872145, - 44.897121, - 44.922133, - 44.947197, - 44.97233, - 44.997549, - 45.022867, - 45.0483, - 45.07386, - 45.099558, - 45.125406, - 45.15141, - 45.177578, - 45.203912, - 45.230415, - 45.257086, - 45.283924, - 45.310924, - 45.338081, - 45.36539, - 45.392843, - 45.420434, - 45.448156, - 45.476002, - 45.503966, - 45.532044, - 45.56023, - 45.588522, - 45.616917, - 45.645412, - 45.674006, - 45.702697, - 45.731483, - 45.760362, - 45.789331, - 45.818389, - 45.847533, - 45.87676, - 45.906066, - 45.935448, - 45.9649, - 45.994419, - 46.024, - 46.053637, - 46.083327, - 46.113065, - 46.142847, - 46.17267, - 46.202533, - 46.232433, - 46.262371, - 46.292348, - 46.322365, - 46.352424, - 46.382531, - 46.412687, - 46.4429, - 46.473172, - 46.503509, - 46.533914, - 46.564392, - 46.594945, - 46.625574, - 46.656279, - 46.68706, - 46.717913, - 46.748835, - 46.77982, - 46.810863, - 46.841956, - 46.87309, - 46.904257, - 46.935447, - 46.966649, - 46.997854, - 47.029051, - 47.06023, - 47.091381, - 47.122493, - 47.153557, - 47.184564, - 47.215504, - 47.246369, - 47.277151, - 47.30784, - 47.33843, - 47.368913, - 47.399281, - 47.429527, - 47.459644, - 47.489627, - 47.519468, - 47.549164, - 47.57871, - 47.608102, - 47.637338, - 47.666417, - 47.695339, - 47.724105, - 47.752719, - 47.781186, - 47.809511, - 47.837704, - 47.865772, - 47.893727, - 47.921581, - 47.949346, - 47.977038, - 48.004674, - 48.032271, - 48.059849, - 48.087427, - 48.115026, - 48.142666, - 48.170367, - 48.19815, - 48.226032, - 48.254033, - 48.282167, - 48.31045, - 48.338896, - 48.367517, - 48.396322, - 48.425322, - 48.454522, - 48.483929, - 48.513545, - 48.543374, - 48.573416, - 48.603669, - 48.634132, - 48.6648, - 48.695669, - 48.726731, - 48.757978, - 48.789402, - 48.82099, - 48.852731, - 48.884614, - 48.916622, - 48.948744, - 48.980961, - 49.01326, - 49.045622, - 49.078032, - 49.110472, - 49.142926, - 49.175378, - 49.207811, - 49.24021, - 49.272562, - 49.304853, - 49.337072, - 49.369209, - 49.401254, - 49.433201, - 49.465044, - 49.49678, - 49.528406, - 49.559921, - 49.591326, - 49.622622, - 49.653814, - 49.684904, - 49.7159, - 49.746806, - 49.77763, - 49.80838, - 49.839063, - 49.869689, - 49.900268, - 49.930807, - 49.961319, - 49.991812, - 50.022297, - 50.052784, - 50.083284, - 50.113808, - 50.144365, - 50.174966, - 50.205622, - 50.23634, - 50.267131, - 50.298003, - 50.328963, - 50.360019, - 50.391177, - 50.422442, - 50.453818, - 50.485309, - 50.516916, - 50.54864, - 50.580481, - 50.612438, - 50.644508, - 50.676689, - 50.708977, - 50.741366, - 50.773852, - 50.806428, - 50.839089, - 50.871829, - 50.904642, - 50.93752, - 50.970459, - 51.003452, - 51.036494, - 51.069581, - 51.102708, - 51.13587, - 51.169064, - 51.202288, - 51.235538, - 51.268812, - 51.302111, - 51.335431, - 51.368774, - 51.402139, - 51.435528, - 51.468941, - 51.502381, - 51.53585, - 51.569349, - 51.602883, - 51.636454, - 51.670066, - 51.703721, - 51.737425, - 51.771179, - 51.80499, - 51.838859, - 51.872791, - 51.906789, - 51.940856, - 51.974996, - 52.009211, - 52.043503, - 52.077874, - 52.112325, - 52.146856, - 52.181467, - 52.216156, - 52.250922, - 52.285761, - 52.320671, - 52.355645, - 52.390679, - 52.425767, - 52.460903, - 52.496079, - 52.531289, - 52.566526, - 52.601782, - 52.637051, - 52.672326, - 52.7076, - 52.742867, - 52.778121, - 52.813355, - 52.848564, - 52.883742, - 52.918885, - 52.953987, - 52.989043, - 53.02405, - 53.059004, - 53.093902, - 53.12874, - 53.163518, - 53.198233, - 53.232885, - 53.267474, - 53.302003, - 53.336472, - 53.370886, - 53.405249, - 53.439566, - 53.473842, - 53.508084, - 53.5423, - 53.576496, - 53.61068, - 53.64486, - 53.679044, - 53.71324, - 53.747456, - 53.781699, - 53.815974, - 53.85029, - 53.88465, - 53.919059, - 53.953523, - 53.988044, - 54.022626, - 54.057272, - 54.091984, - 54.126765, - 54.161617, - 54.196539, - 54.231535, - 54.266604, - 54.301747, - 54.336964, - 54.372257, - 54.407627, - 54.443073, - 54.478597, - 54.514201, - 54.549885, - 54.585651, - 54.6215, - 54.657434, - 54.693453, - 54.729559, - 54.765752, - 54.802033, - 54.838401, - 54.874855, - 54.911395, - 54.948018, - 54.984723, - 55.021506, - 55.058365, - 55.095296, - 55.132296, - 55.169362, - 55.20649, - 55.243676, - 55.280917, - 55.318211, - 55.355553, - 55.392943, - 55.430378, - 55.467856, - 55.505377, - 55.542939, - 55.580543, - 55.618188, - 55.655875, - 55.693604, - 55.731376, - 55.769191, - 55.80705, - 55.844955, - 55.882904, - 55.9209, - 55.958941, - 55.997029, - 56.035164, - 56.073345, - 56.111573, - 56.149846, - 56.188167, - 56.226533, - 56.264946, - 56.303406, - 56.341913, - 56.380467, - 56.419071, - 56.457724, - 56.496429, - 56.535186, - 56.573998, - 56.612866, - 56.651793, - 56.69078, - 56.729831, - 56.768946, - 56.808127, - 56.847376, - 56.886694, - 56.926082, - 56.96554, - 57.005067, - 57.044664, - 57.084328, - 57.124057, - 57.163851, - 57.203705, - 57.243618, - 57.283585, - 57.323603, - 57.363669, - 57.403779, - 57.443929, - 57.484115, - 57.524335, - 57.564583, - 57.604858, - 57.645157, - 57.685476, - 57.725812, - 57.766164, - 57.806529, - 57.846905, - 57.88729, - 57.927681, - 57.968078, - 58.008479, - 58.048882, - 58.089287, - 58.129692, - 58.170097, - 58.210503, - 58.250908, - 58.291313, - 58.331718, - 58.372124, - 58.412532, - 58.452944, - 58.493359, - 58.533782, - 58.574213, - 58.614655, - 58.655112, - 58.695587, - 58.736082, - 58.776603, - 58.817153, - 58.857737, - 58.89836, - 58.939025, - 58.979738, - 59.020502, - 59.061323, - 59.102204, - 59.143149, - 59.184163, - 59.225247, - 59.266406, - 59.307642, - 59.348958, - 59.390355, - 59.431836, - 59.473401, - 59.515053, - 59.556791, - 59.598617, - 59.64053, - 59.682531, - 59.72462, - 59.766796, - 59.80906, - 59.851411, - 59.893849, - 59.936373, - 59.978984, - 60.02168, - 60.06446, - 60.107325, - 60.150272, - 60.193301, - 60.236411, - 60.2796, - 60.322866, - 60.366209, - 60.409626, - 60.453116, - 60.496677, - 60.540307, - 60.584005, - 60.62777, - 60.671599, - 60.715491, - 60.759445, - 60.80346, - 60.847536, - 60.89167, - 60.935863, - 60.980113, - 61.024421, - 61.068786, - 61.113208, - 61.157687, - 61.202221, - 61.24681, - 61.291455, - 61.336152, - 61.380903, - 61.425704, - 61.470555, - 61.515454, - 61.560398, - 61.605384, - 61.65041, - 61.695473, - 61.740568, - 61.785693, - 61.830844, - 61.876018, - 61.921211, - 61.966421, - 62.011645, - 62.05688, - 62.102124, - 62.147374, - 62.19263, - 62.237889, - 62.283151, - 62.328414, - 62.373679, - 62.418946, - 62.464214, - 62.509483, - 62.554756, - 62.600033, - 62.645315, - 62.690603, - 62.735901, - 62.78121, - 62.826532, - 62.871872, - 62.917232, - 62.962615, - 63.008027, - 63.05347, - 63.09895, - 63.144471, - 63.190038, - 63.235656, - 63.281329, - 63.327063, - 63.372864, - 63.418735, - 63.464684, - 63.510714, - 63.556831, - 63.603039, - 63.649343, - 63.695748, - 63.742258, - 63.788877, - 63.835609, - 63.882458, - 63.929428, - 63.976521, - 64.023742, - 64.071092, - 64.118575, - 64.166191, - 64.213944, - 64.261833, - 64.309859, - 64.358021, - 64.40632, - 64.454753, - 64.503319, - 64.552014, - 64.600837, - 64.649782, - 64.698847, - 64.748025, - 64.797312, - 64.846703, - 64.896191, - 64.945769, - 64.995432, - 65.045172, - 65.094981, - 65.144852, - 65.194778, - 65.24475, - 65.294761, - 65.344803, - 65.394868, - 65.444948, - 65.495037, - 65.545126, - 65.59521, - 65.645281, - 65.695334, - 65.745363, - 65.795363, - 65.845329, - 65.895257, - 65.945142, - 65.994982, - 66.044772, - 66.094512, - 66.144199, - 66.193832, - 66.243409, - 66.29293, - 66.342395, - 66.391805, - 66.44116, - 66.490461, - 66.539711, - 66.588912, - 66.638065, - 66.687175, - 66.736244, - 66.785277, - 66.834278, - 66.883251, - 66.932202, - 66.981136, - 67.030059, - 67.078977, - 67.127896, - 67.176822, - 67.225764, - 67.274727, - 67.323718, - 67.372746, - 67.421817, - 67.470939, - 67.520119, - 67.569365, - 67.618684, - 67.668084, - 67.717571, - 67.767152, - 67.816835, - 67.866626, - 67.916531, - 67.966557, - 68.016709, - 68.066994, - 68.117416, - 68.16798, - 68.218692, - 68.269555, - 68.320574, - 68.371751, - 68.423091, - 68.474595, - 68.526267, - 68.578108, - 68.63012, - 68.682304, - 68.73466, - 68.787189, - 68.83989, - 68.892763, - 68.945807, - 68.99902, - 69.0524, - 69.105944, - 69.159649, - 69.213512, - 69.267528, - 69.321692, - 69.375999, - 69.430444, - 69.485021, - 69.539723, - 69.594545, - 69.649479, - 69.704519, - 69.759659, - 69.814893, - 69.870213, - 69.925614, - 69.981089, - 70.036633, - 70.092239, - 70.147902, - 70.203615, - 70.259373, - 70.31517, - 70.371001, - 70.42686, - 70.482741, - 70.53864, - 70.594552, - 70.650471, - 70.706392, - 70.76231, - 70.81822, - 70.874116, - 70.929996, - 70.985854, - 71.041688, - 71.097495, - 71.153274, - 71.209024, - 71.264745, - 71.32044, - 71.376107, - 71.431749, - 71.48737, - 71.542971, - 71.598558, - 71.654134, - 71.709704, - 71.765274, - 71.820851, - 71.876442, - 71.932055, - 71.9877, - 72.043388, - 72.099132, - 72.154943, - 72.210838, - 72.266832, - 72.322941, - 72.379185, - 72.435581, - 72.492149, - 72.548907, - 72.605875, - 72.663071, - 72.720513, - 72.778217, - 72.836197, - 72.894467, - 72.95304, - 73.011924, - 73.071132, - 73.13067, - 73.190545, - 73.250762, - 73.311321, - 73.372224, - 73.433467, - 73.495047, - 73.556956, - 73.619186, - 73.681726, - 73.744563, - 73.807683, - 73.87107, - 73.934709, - 73.998583, - 74.062674, - 74.126966, - 74.191444, - 74.256092, - 74.320895, - 74.385839, - 74.450911, - 74.516098, - 74.581388, - 74.64677, - 74.712234, - 74.777769, - 74.843368, - 74.909022, - 74.974724, - 75.040468, - 75.106248, - 75.172061, - 75.237903, - 75.303772, - 75.369667, - 75.435588, - 75.501534, - 75.567509, - 75.633514, - 75.699554, - 75.765631, - 75.831752, - 75.89792, - 75.964142, - 76.030422, - 76.096765, - 76.163177, - 76.22966, - 76.296219, - 76.362855, - 76.429572, - 76.496368, - 76.563246, - 76.630203, - 76.697238, - 76.764347, - 76.831528, - 76.898776, - 76.966085, - 77.03345, - 77.100864, - 77.16832, - 77.23581, - 77.303326, - 77.370859, - 77.438399, - 77.505938, - 77.573464, - 77.640967, - 77.708434, - 77.775856, - 77.843219, - 77.910513, - 77.977727, - 78.044852, - 78.111879, - 78.178803, - 78.245619, - 78.312325, - 78.378922, - 78.44541, - 78.511794, - 78.57808, - 78.644276, - 78.710392, - 78.77644, - 78.842433, - 78.908387, - 78.974311, - 79.040228, - 79.106149, - 79.172094, - 79.23808, - 79.304127, - 79.370252, - 79.436473, - 79.502811, - 79.569284, - 79.63591, - 79.702708, - 79.769695, - 79.836889, - 79.904306, - 79.971962, - 80.039871, - 80.108046, - 80.176499, - 80.245241, - 80.314281, - 80.383625, - 80.45328, - 80.523249, - 80.593532, - 80.664129, - 80.735036, - 80.806247, - 80.877753, - 80.949542, - 81.021602, - 81.093916, - 81.166467, - 81.239235, - 81.312199, - 81.385337, - 81.458625, - 81.532041, - 81.605559, - 81.679156, - 81.752809, - 81.826492, - 81.900184, - 81.973864, - 82.047509, - 82.121102, - 82.194623, - 82.268057, - 82.341389, - 82.414606, - 82.487696, - 82.560651, - 82.633462, - 82.706125, - 82.778636, - 82.850993, - 82.923196, - 82.995247, - 83.067151, - 83.138913, - 83.210539, - 83.28204, - 83.353424, - 83.424706, - 83.495897, - 83.567013, - 83.638072, - 83.709089, - 83.780085, - 83.851078, - 83.922089, - 83.993138, - 84.064246, - 84.135435, - 84.206725, - 84.278136, - 84.349687, - 84.421398, - 84.493285, - 84.565364, - 84.637652, - 84.71016, - 84.782902, - 84.855887, - 84.929124, - 85.002622, - 85.076385, - 85.15042, - 85.224729, - 85.299316, - 85.374181, - 85.449326, - 85.52475, - 85.600454, - 85.676435, - 85.752694, - 85.829226, - 85.906031, - 85.983105, - 86.060446, - 86.138051, - 86.215916, - 86.294038, - 86.372412, - 86.451036, - 86.529906, - 86.609018, - 86.688368, - 86.767952, - 86.847767, - 86.92781, - 87.008077, - 87.088564, - 87.16927, - 87.250192, - 87.331327, - 87.412672, - 87.494227, - 87.575989, - 87.657956, - 87.740128, - 87.822503, - 87.905079, - 87.987855, - 88.070829, - 88.154, - 88.237365, - 88.320922, - 88.404667, - 88.488599, - 88.572712, - 88.657003, - 88.741466, - 88.826096, - 88.910888, - 88.995834, - 89.080926, - 89.166158, - 89.25152, - 89.337005, - 89.422602, - 89.508303, - 89.594099, - 89.679982, - 89.765941, - 89.851969, - 89.938057, - 90.024197, - 90.110381, - 90.196601, - 90.282851, - 90.369122, - 90.455408, - 90.541702, - 90.627999, - 90.714292, - 90.800576, - 90.886846, - 90.973098, - 91.059329, - 91.145536, - 91.231717, - 91.317871, - 91.403998, - 91.490101, - 91.57618, - 91.66224, - 91.748284, - 91.83432, - 91.920352, - 92.006389, - 92.092439, - 92.178511, - 92.264615, - 92.350761, - 92.436961, - 92.523227, - 92.609569, - 92.696001, - 92.782533, - 92.86918, - 92.955952, - 93.042863, - 93.129925, - 93.217151, - 93.304553, - 93.392143, - 93.479935, - 93.56794, - 93.656169, - 93.744636, - 93.833352, - 93.922328, - 94.011575, - 94.101104, - 94.190924, - 94.281045, - 94.371476, - 94.462223, - 94.553295, - 94.644696, - 94.736431, - 94.828504, - 94.920919, - 95.013675, - 95.106773, - 95.200212, - 95.29399, - 95.388103, - 95.482546, - 95.577313, - 95.672399, - 95.767794, - 95.863491, - 95.959481, - 96.055753, - 96.152298, - 96.249105, - 96.346163, - 96.443461, - 96.540988, - 96.638731, - 96.736679, - 96.834821, - 96.933144, - 97.031636, - 97.130285, - 97.229079, - 97.328006, - 97.427055, - 97.526215, - 97.625473, - 97.724819, - 97.824244, - 97.923737, - 98.023291, - 98.122897, - 98.222548, - 98.322241, - 98.421969, - 98.521732, - 98.621526, - 98.721353, - 98.821213, - 98.921109, - 99.021045, - 99.121026, - 99.221058, - 99.321148, - 99.421305, - 99.521536, - 99.621852, - 99.722262, - 99.822777, - 99.923407, - 100.024163, - 100.125056, - 100.226097, - 100.327297, - 100.428665, - 100.530213, - 100.63195, - 100.733887, - 100.836031, - 100.938393, - 101.04098, - 101.143801, - 101.246864, - 101.350175, - 101.45374, - 101.557567, - 101.661659, - 101.766021, - 101.870658, - 101.975571, - 102.080764, - 102.186238, - 102.291992, - 102.398027, - 102.504342, - 102.610934, - 102.717802, - 102.824942, - 102.932352, - 103.040026, - 103.14796, - 103.25615, - 103.364592, - 103.47328, - 103.582211, - 103.691378, - 103.800779, - 103.910409, - 104.020264, - 104.130341, - 104.240636, - 104.351147, - 104.461871, - 104.572806, - 104.68395, - 104.795302, - 104.90686, - 105.018623, - 105.130591, - 105.242762, - 105.355137, - 105.467715, - 105.580496, - 105.693479, - 105.806666, - 105.920057, - 106.033652, - 106.147452, - 106.261458, - 106.375671, - 106.490093, - 106.604723, - 106.719564, - 106.834615, - 106.949877, - 107.065351, - 107.181035, - 107.296929, - 107.413032, - 107.529341, - 107.645855, - 107.76257, - 107.879482, - 107.996588, - 108.113884, - 108.231363, - 108.34902, - 108.46685, - 108.584847, - 108.703004, - 108.821315, - 108.939774, - 109.058376, - 109.177113, - 109.295981, - 109.414974, - 109.534087, - 109.653316, - 109.772657, - 109.892107, - 110.011663, - 110.131323, - 110.251086, - 110.37095, - 110.490915, - 110.610982, - 110.731153, - 110.851429, - 110.971813, - 111.092308, - 111.212919, - 111.33365, - 111.454507, - 111.575496, - 111.696624, - 111.8179, - 111.939332, - 112.060929, - 112.182701, - 112.304657, - 112.42681, - 112.54917, - 112.671748, - 112.794557, - 112.917607, - 113.04091, - 113.164478, - 113.288321, - 113.41245, - 113.536875, - 113.661605, - 113.786649, - 113.912014, - 114.037708, - 114.163737, - 114.290105, - 114.416816, - 114.543875, - 114.671282, - 114.79904, - 114.927148, - 115.055607, - 115.184415, - 115.31357, - 115.443069, - 115.57291, - 115.703087, - 115.833598, - 115.964436, - 116.095597, - 116.227075, - 116.358864, - 116.490958, - 116.623351, - 116.756036, - 116.889007, - 117.022257, - 117.155779, - 117.289567, - 117.423614, - 117.557915, - 117.692462, - 117.82725, - 117.962274, - 118.097528, - 118.233009, - 118.368712, - 118.504634, - 118.640771, - 118.77712, - 118.91368, - 119.050447, - 119.187422, - 119.324602, - 119.461987, - 119.599576, - 119.73737, - 119.875369, - 120.013574, - 120.151986, - 120.290607, - 120.429438, - 120.568481, - 120.707739, - 120.847213, - 120.986907, - 121.126822, - 121.266961, - 121.407327, - 121.547921, - 121.688747, - 121.829807, - 121.971104, - 122.112639, - 122.254415, - 122.396436, - 122.538703, - 122.681219, - 122.823987, - 122.967011, - 123.110292, - 123.253834, - 123.397641, - 123.541717, - 123.686066, - 123.830691, - 123.975598, - 124.120791, - 124.266275, - 124.412057, - 124.558142, - 124.704537, - 124.851248, - 124.998285, - 125.145653, - 125.293361, - 125.441419, - 125.589837, - 125.738622, - 125.887788, - 126.037343, - 126.187297, - 126.337661, - 126.488444, - 126.639657, - 126.791305, - 126.943399, - 127.095943, - 127.248944, - 127.402407, - 127.556338, - 127.710738, - 127.865614, - 128.020966, - 128.1768, - 128.333118, - 128.489924, - 128.647222, - 128.805016, - 128.963312, - 129.122115, - 129.281428, - 129.441259, - 129.601611, - 129.762486, - 129.923889, - 130.085819, - 130.248277, - 130.411264, - 130.574776, - 130.738811, - 130.903364, - 131.068429, - 131.234002, - 131.400073, - 131.566639, - 131.73369, - 131.901219, - 132.069216, - 132.23767, - 132.406574, - 132.575924, - 132.74571, - 132.915929, - 133.086572, - 133.25763, - 133.429094, - 133.600951, - 133.773187, - 133.945787, - 134.118734, - 134.292011, - 134.465598, - 134.639479, - 134.813638, - 134.988059, - 135.16273, - 135.337643, - 135.51279, - 135.688171, - 135.863787, - 136.039644, - 136.215751, - 136.392124, - 136.568779, - 136.745736, - 136.923017, - 137.100647, - 137.278648, - 137.457047, - 137.635865, - 137.815126, - 137.994849, - 138.175051, - 138.355747, - 138.53695, - 138.718667, - 138.900906, - 139.08367, - 139.266961, - 139.450777, - 139.635117, - 139.819978, - 140.005355, - 140.191244, - 140.377638, - 140.564532, - 140.751919, - 140.939793, - 141.128147, - 141.31697, - 141.506255, - 141.69599, - 141.886162, - 142.076757, - 142.267759, - 142.459149, - 142.650906, - 142.84301, - 143.035434, - 143.228153, - 143.42114, - 143.614368, - 143.807808, - 144.001432, - 144.195214, - 144.389127, - 144.583148, - 144.777253, - 144.971424, - 145.165646, - 145.359907, - 145.554198, - 145.748517, - 145.942864, - 146.137243, - 146.331664, - 146.526139, - 146.720683, - 146.915312, - 147.110048, - 147.304909, - 147.499918, - 147.695096, - 147.890465, - 148.086047, - 148.281864, - 148.477938, - 148.674289, - 148.870939, - 149.06791, - 149.265222, - 149.462897, - 149.660957, - 149.859421, - 150.058312, - 150.25765, - 150.457454, - 150.657744, - 150.858541, - 151.059862, - 151.261725, - 151.464146, - 151.667138, - 151.870715, - 152.074886, - 152.279659, - 152.485038, - 152.691023, - 152.897614, - 153.104803, - 153.312582, - 153.520939, - 153.729858, - 153.939323, - 154.149313, - 154.359807, - 154.570783, - 154.782217, - 154.994084, - 155.20636, - 155.419023, - 155.63205, - 155.845421, - 156.059118, - 156.273122, - 156.487421, - 156.702002, - 156.916855, - 157.131972, - 157.347347, - 157.562976, - 157.778856, - 157.994988, - 158.21137, - 158.428005, - 158.644894, - 158.862042, - 159.079452, - 159.29713, - 159.515082, - 159.733314, - 159.951836, - 160.170656, - 160.389784, - 160.609231, - 160.82901, - 161.049134, - 161.269617, - 161.490475, - 161.711722, - 161.933375, - 162.155451, - 162.377967, - 162.600939, - 162.824384, - 163.048319, - 163.272757, - 163.497712, - 163.723198, - 163.949225, - 164.175803, - 164.40294, - 164.630642, - 164.858914, - 165.08776, - 165.317182, - 165.54718, - 165.777755, - 166.008905, - 166.240629, - 166.472925, - 166.705792, - 166.939226, - 167.173228, - 167.407795, - 167.642928, - 167.878626, - 168.114891, - 168.351723, - 168.589125, - 168.827099, - 169.065648, - 169.304776, - 169.544486, - 169.784783, - 170.025672, - 170.267158, - 170.509247, - 170.751944, - 170.995256, - 171.23919, - 171.483754, - 171.728955, - 171.974802, - 172.221303, - 172.468469, - 172.716307, - 172.96483, - 173.214045, - 173.463963, - 173.714595, - 173.96595, - 174.218037, - 174.470864, - 174.72444, - 174.978771, - 175.233864, - 175.489721, - 175.746346, - 176.003741, - 176.261905, - 176.520835, - 176.780528, - 177.040978, - 177.302179, - 177.564121, - 177.826793, - 178.090186, - 178.354285, - 178.619076, - 178.884545, - 179.150676, - 179.417453, - 179.684859, - 179.952875, - 180.221485, - 180.49067, - 180.760411, - 181.030689, - 181.301487, - 181.572785, - 181.844563, - 182.116804, - 182.389489, - 182.6626, - 182.936118, - 183.210028, - 183.484313, - 183.758958, - 184.033947, - 184.309268, - 184.58491, - 184.860861, - 185.137113, - 185.413658, - 185.690492, - 185.967611, - 186.245014, - 186.522701, - 186.800675, - 187.078942, - 187.357506, - 187.636378, - 187.915568, - 188.195087, - 188.474949, - 188.755169, - 189.035764, - 189.31675, - 189.598146, - 189.87997, - 190.162243, - 190.444985, - 190.728217, - 191.011959, - 191.296234, - 191.581063, - 191.866469, - 192.152473, - 192.439096, - 192.726361, - 193.014288, - 193.302898, - 193.592213, - 193.882252, - 194.173035, - 194.46458, - 194.756907, - 195.050032, - 195.343971, - 195.63874, - 195.934355, - 196.230827, - 196.528169, - 196.826391, - 197.125503, - 197.425513, - 197.726427, - 198.028251, - 198.330988, - 198.63464, - 198.939208, - 199.24469, - 199.551085, - 199.858389, - 200.166596, - 200.475699, - 200.785691, - 201.096563, - 201.408303, - 201.720902, - 202.034346, - 202.348622, - 202.663716, - 202.979612, - 203.296296, - 203.613752, - 203.931962, - 204.250911, - 204.570582, - 204.89096, - 205.212028, - 205.533771, - 205.856175, - 206.179227, - 206.502914, - 206.827223, - 207.152145, - 207.47767, - 207.803789, - 208.130497, - 208.457786, - 208.785653, - 209.114094, - 209.443107, - 209.77269, - 210.102842, - 210.433564, - 210.764856, - 211.09672, - 211.429159, - 211.762173, - 212.095767, - 212.429944, - 212.764706, - 213.100057, - 213.436001, - 213.772542, - 214.109683, - 214.447429, - 214.785783, - 215.124749, - 215.464332, - 215.804537, - 216.145366, - 216.486825, - 216.828919, - 217.171653, - 217.51503, - 217.859057, - 218.203738, - 218.549078, - 218.895083, - 219.241756, - 219.589104, - 219.937132, - 220.285844, - 220.635246, - 220.985343, - 221.336141, - 221.687644, - 222.039858, - 222.392789, - 222.746442, - 223.100824, - 223.455941, - 223.811799, - 224.168405, - 224.525766, - 224.883889, - 225.242781, - 225.602451, - 225.962906, - 226.324152, - 226.6862, - 227.049054, - 227.412724, - 227.777215, - 228.142535, - 228.508689, - 228.875683, - 229.24352, - 229.612205, - 229.98174, - 230.352126, - 230.723362, - 231.095446, - 231.468375, - 231.842142, - 232.216741, - 232.592163, - 232.968395, - 233.345426, - 233.723241, - 234.101822, - 234.48115, - 234.861204, - 235.241961, - 235.623396, - 236.005481, - 236.388189, - 236.771487, - 237.155342, - 237.539721, - 237.924587, - 238.309902, - 238.69563, - 239.081729, - 239.468163, - 239.854891, - 240.241877, - 240.629083, - 241.016474, - 241.40402, - 241.791691, - 242.179461, - 242.56731, - 242.955222, - 243.343185, - 243.731194, - 244.119249, - 244.507359, - 244.895537, - 245.283805, - 245.672192, - 246.060731, - 246.449468, - 246.838449, - 247.227734, - 247.617386, - 248.007477, - 248.398083, - 248.789283, - 249.181168, - 249.573822, - 249.967337, - 250.361806, - 250.757321, - 251.153973, - 251.551856, - 251.951061, - 252.351676, - 252.753792, - 253.157494, - 253.562867, - 253.969988, - 254.378932, - 254.789766, - 255.202551, - 255.617339, - 256.034172, - 256.453077, - 256.874073, - 257.297162, - 257.722336, - 258.149576, - 258.578846, - 259.010105, - 259.443298, - 259.87836, - 260.315216, - 260.753783, - 261.193972, - 261.63569, - 262.078838, - 262.523316, - 262.969024, - 263.415857, - 263.863715, - 264.312496, - 264.762104, - 265.212444, - 265.663428, - 266.114975, - 266.56701, - 267.019466, - 267.472292, - 267.925443, - 268.378885, - 268.832598, - 269.286568, - 269.740794, - 270.195284, - 270.65006, - 271.105151, - 271.560597, - 272.016452, - 272.472782, - 272.929658, - 273.387161, - 273.845376, - 274.304391, - 274.764299, - 275.22519, - 275.687155, - 276.150285, - 276.614664, - 277.080377, - 277.547503, - 278.016114, - 278.486282, - 278.958071, - 279.431539, - 279.906742, - 280.383728, - 280.862539, - 281.343212, - 281.825775, - 282.310253, - 282.796659, - 283.285, - 283.775275, - 284.26747, - 284.761565, - 285.257528, - 285.755315, - 286.254875, - 286.756142, - 287.259043, - 287.763497, - 288.269409, - 288.776684, - 289.285219, - 289.794907, - 290.305642, - 290.817315, - 291.329819, - 291.843051, - 292.356908, - 292.871296, - 293.386126, - 293.901316, - 294.416794, - 294.932496, - 295.448366, - 295.964361, - 296.480446, - 296.996599, - 297.512806, - 298.029064, - 298.545379, - 299.061767, - 299.578252, - 300.094867, - 300.611654, - 301.128663, - 301.645951, - 302.163586, - 302.681641, - 303.200198, - 303.719342, - 304.239168, - 304.759772, - 305.281252, - 305.803713, - 306.327256, - 306.851986, - 307.378002, - 307.905403, - 308.434278, - 308.964715, - 309.496789, - 310.030569, - 310.566115, - 311.103473, - 311.642682, - 312.183768, - 312.726745, - 313.271615, - 313.818369, - 314.366988, - 314.917441, - 315.469688, - 316.023679, - 316.579356, - 317.136653, - 317.695497, - 318.255808, - 318.817501, - 319.380488, - 319.944675, - 320.509967, - 321.07627, - 321.643486, - 322.211517, - 322.780269, - 323.349649, - 323.919567, - 324.489939, - 325.060687, - 325.631739, - 326.203032, - 326.774513, - 327.34614, - 327.917879, - 328.489711, - 329.061626, - 329.633627, - 330.205727, - 330.777951, - 331.350335, - 331.922924, - 332.495774, - 333.068947, - 333.642515, - 334.216556, - 334.791153, - 335.366396, - 335.942376, - 336.519189, - 337.096931, - 337.675701, - 338.255595, - 338.836711, - 339.419143, - 340.002981, - 340.588314, - 341.175223, - 341.763785, - 342.354074, - 342.946155, - 343.540086, - 344.135921, - 344.733704, - 345.333471, - 345.935252, - 346.539067, - 347.144929, - 347.752841, - 348.362797, - 348.974784, - 349.588778, - 350.204748, - 350.822653, - 351.442447, - 352.064075, - 352.687475, - 353.312582, - 353.939324, - 354.567627, - 355.197413, - 355.828605, - 356.461122, - 357.094889, - 357.729829, - 358.365871, - 359.002947, - 359.640993, - 360.279955, - 360.919781, - 361.560429, - 362.201863, - 362.844056, - 363.486988, - 364.130647, - 364.775028, - 365.420135, - 366.065978, - 366.712574, - 367.359946, - 368.008125, - 368.657144, - 369.307045, - 369.957872, - 370.609674, - 371.262503, - 371.916415, - 372.571468, - 373.227721, - 373.885235, - 374.544072, - 375.204294, - 375.865961, - 376.529136, - 377.193877, - 377.860243, - 378.528287, - 379.198063, - 379.869618, - 380.542996, - 381.218237, - 381.895374, - 382.574436, - 383.255443, - 383.938412, - 384.623351, - 385.310264, - 385.999147, - 386.68999, - 387.382778, - 388.07749, - 388.774101, - 389.472582, - 390.172899, - 390.875017, - 391.578897, - 392.284499, - 392.991781, - 393.700699, - 394.411212, - 395.123277, - 395.83685, - 396.551892, - 397.268361, - 397.986219, - 398.705428, - 399.425952, - 400.147757, - 400.870808, - 401.595074, - 402.320527, - 403.047138, - 403.774883, - 404.503739, - 405.233688, - 405.964714, - 406.696805, - 407.429953, - 408.164155, - 408.899411, - 409.635728, - 410.373118, - 411.111595, - 411.851182, - 412.591902, - 413.333786, - 414.076866, - 414.821177, - 415.566757, - 416.313644, - 417.061878, - 417.811496, - 418.562535, - 419.315032, - 420.069018, - 420.824523, - 421.581573, - 422.34019, - 423.100392, - 423.862192, - 424.6256, - 425.390621, - 426.157256, - 426.925502, - 427.695353, - 428.466798, - 429.239826, - 430.014419, - 430.790561, - 431.568229, - 432.347402, - 433.128054, - 433.910159, - 434.693688, - 435.47861, - 436.264893, - 437.052504, - 437.841408, - 438.631567, - 439.422944, - 440.2155, - 441.009196, - 441.803991, - 442.599848, - 443.396725, - 444.194584, - 444.993389, - 445.793102, - 446.593692, - 447.395126, - 448.197376, - 449.000417, - 449.804226, - 450.608786, - 451.414081, - 452.2201, - 453.026833, - 453.834276, - 454.642426, - 455.451282, - 456.260846, - 457.07112, - 457.882108, - 458.693812, - 459.506234, - 460.319375, - 461.133232, - 461.947801, - 462.763075, - 463.579043, - 464.39569, - 465.213, - 466.030954, - 466.849531, - 467.66871, - 468.488471, - 469.308798, - 470.129675, - 470.951099, - 471.773071, - 472.595603, - 473.418723, - 474.242472, - 475.06691, - 475.892112, - 476.718181, - 477.545234, - 478.373417, - 479.202895, - 480.033857, - 480.866502, - 481.701064, - 482.53777, - 483.376871, - 484.218624, - 485.063284, - 485.911109, - 486.762354, - 487.617261, - 488.476066, - 489.338986, - 490.206216, - 491.077929, - 491.954273, - 492.835365, - 493.721286, - 494.612077, - 495.507754, - 496.408286, - 497.313618, - 498.223646, - 499.138213, - 500.057221, - 500.980428, - 501.907678, - 502.838726, - 503.773339, - 504.711257, - 505.652206, - 506.595898, - 507.542032, - 508.490299, - 509.440378, - 510.391944, - 511.344667, - 512.298218, - 513.252274, - 514.206519, - 515.160654, - 516.114397, - 517.067486, - 518.01969, - 518.970813, - 519.920692, - 520.869207, - 521.816278, - 522.761863, - 523.705966, - 524.648628, - 525.589932, - 526.529999, - 527.468986, - 528.407084, - 529.344516, - 530.281535, - 531.218424, - 532.155496, - 533.09308, - 534.031535, - 534.97123, - 535.912548, - 536.855882, - 537.80162, - 538.75015, - 539.701846, - 540.65707, - 541.616163, - 542.579446, - 543.54721, - 544.519723, - 545.497219, - 546.479906, - 547.467957, - 548.461511, - 549.460676, - 550.465523, - 551.476089, - 552.492377, - 553.514354, - 554.541951, - 555.575068, - 556.613569, - 557.657284, - 558.70601, - 559.759517, - 560.817541, - 561.879796, - 562.945966, - 564.01572, - 565.088706, - 566.164558, - 567.242903, - 568.323362, - 569.405552, - 570.489096, - 571.573624, - 572.658777, - 573.744214, - 574.829613, - 575.914677, - 576.999137, - 578.082754, - 579.165323, - 580.246675, - 581.326678, - 582.405239, - 583.482304, - 584.557859, - 585.631925, - 586.704562, - 587.775867, - 588.845969, - 589.915029, - 590.983245, - 592.050833, - 593.118042, - 594.185137, - 595.252404, - 596.320143, - 597.388665, - 598.458287, - 599.529333, - 600.602122, - 601.676973, - 602.754196, - 603.834092, - 604.916946, - 606.003029, - 607.092589, - 608.18585, - 609.283012, - 610.384245, - 611.489687, - 612.599445, - 613.713588, - 614.832152, - 615.955134, - 617.082505, - 618.214193, - 619.350106, - 620.490115, - 621.634069, - 622.781792, - 623.933084, - 625.087729, - 626.245493, - 627.40613, - 628.569383, - 629.73499, - 630.902682, - 632.072191, - 633.24325, - 634.415597, - 635.588974, - 636.763137, - 637.937853, - 639.11291, - 640.288109, - 641.463277, - 642.638261, - 643.812933, - 644.987193, - 646.160969, - 647.334213, - 648.506914, - 649.679085, - 650.850772, - 652.022051, - 653.193027, - 654.363836, - 655.53464, - 656.705626, - 657.877008, - 659.049018, - 660.221909, - 661.395946, - 662.571408, - 663.748579, - 664.927748, - 666.109203, - 667.293225, - 668.480091, - 669.670063, - 670.863391, - 672.060306, - 673.261019, - 674.465721, - 675.674577, - 676.887727, - 678.105283, - 679.327328, - 680.553917, - 681.785074, - 683.020795, - 684.261046, - 685.505765, - 686.754862, - 688.008219, - 689.265697, - 690.52713, - 691.792332, - 693.061098, - 694.333209, - 695.608429, - 696.886518, - 698.167221, - 699.450286, - 700.735454, - 702.022469, - 703.311081, - 704.601044, - 705.892125, - 707.184104, - 708.476776, - 709.769955, - 711.063475, - 712.357194, - 713.650992, - 714.944777, - 716.238482, - 717.532064, - 718.82551, - 720.118831, - 721.412063, - 722.705265, - 723.998522, - 725.291937, - 726.585637, - 727.879765, - 729.174483, - 730.46997, - 731.766418, - 733.064031, - 734.363024, - 735.663622, - 736.966052, - 738.270548, - 739.577345, - 740.886676, - 742.198772, - 743.513859, - 744.832153, - 746.153863, - 747.479183, - 748.808293, - 750.141354, - 751.478508, - 752.819875, - 754.16555, - 755.515603, - 756.870076, - 758.228983, - 759.59231, - 760.960011, - 762.332012, - 763.708213, - 765.088483, - 766.472669, - 767.860596, - 769.252065, - 770.646864, - 772.044765, - 773.445529, - 774.84891, - 776.254657, - 777.662517, - 779.072239, - 780.483572, - 781.896274, - 783.310107, - 784.724843, - 786.140263, - 787.556159, - 788.972335, - 790.388607, - 791.804805, - 793.220769, - 794.636353, - 796.051423, - 797.465856, - 798.879541, - 800.29238, - 801.704285, - 803.115178, - 804.524992, - 805.933661, - 807.341128, - 808.747331, - 810.15221, - 811.555695, - 812.957709, - 814.358167, - 815.756969, - 817.154005, - 818.549152, - 819.942277, - 821.333242, - 822.721904, - 824.108126, - 825.491779, - 826.872759, - 828.250993, - 829.626454, - 830.999164, - 832.369224, - 833.736804, - 835.10217, - 836.465724, - 837.827908, - 839.189353, - 840.550743, - 841.912903, - 843.276754, - 844.643313, - 846.013674, - 847.388996, - 848.770481, - 850.159349, - 851.556816, - 852.964061, - 854.382197, - 855.812248, - 857.255106, - 858.711533, - 860.1821, - 861.667205, - 863.167006, - 864.681583, - 866.210673, - 867.753957, - 869.310855, - 870.880658, - 872.462501, - 874.055392, - 875.658236, - 877.269858, - 878.889022, - 880.514457, - 882.144875, - 883.778991, - 885.415546, - 887.053314, - 888.691114, - 890.327833, - 891.962438, - 893.593951, - 895.221483, - 896.844217, - 898.461406, - 900.072374, - 901.676518, - 903.273303, - 904.862267, - 906.44302, - 908.01525, - 909.578736, - 911.133338, - 912.679018, - 914.215845, - 915.744004, - 917.263801, - 918.775664, - 920.28015, - 921.777936, - 923.26982, - 924.756718, - 926.239662, - 927.719788, - 929.198307, - 930.676502, - 932.155697, - 933.63723, - 935.12244, - 936.61263, - 938.10906, - 939.612908, - 941.125266, - 942.64711, - 944.179301, - 945.722563, - 947.277485, - 948.844514, - 950.423962, - 952.016003, - 953.620684, - 955.237929, - 956.867556, - 958.509275, - 960.162711, - 961.827405, - 963.502821, - 965.188363, - 966.883378, - 968.587159, - 970.298954, - 972.01797, - 973.743375, - 975.474302, - 977.209854, - 978.949104, - 980.691107, - 982.434897, - 984.179505, - 985.923955, - 987.667286, - 989.40856, - 991.146865, - 992.881342, - 994.611185, - 996.335662, - 998.054125, - 999.766019, - 1001.470903, - 1003.168446, - 1004.858445, - 1006.540827, - 1008.215647, - 1009.883091, - 1011.543471, - 1013.197219, - 1014.844877, - 1016.487088, - 1018.124583, - 1019.758165, - 1021.388697, - 1023.017084, - 1024.644258, - 1026.271162, - 1027.898738, - 1029.527909, - 1031.159573, - 1032.794589, - 1034.43377, - 1036.077877, - 1037.72761, - 1039.38361, - 1041.046451, - 1042.716641, - 1044.394621, - 1046.080763, - 1047.775368, - 1049.478668, - 1051.190825, - 1052.911925, - 1054.641982, - 1056.380933, - 1058.128635, - 1059.88487, - 1061.649338, - 1063.421659, - 1065.201378, - 1066.987962, - 1068.780809, - 1070.579249, - 1072.382555, - 1074.189946, - 1076.000601, - 1077.813669, - 1079.62828, - 1081.443558, - 1083.258634, - 1085.072659, - 1086.884817, - 1088.694337, - 1090.500508, - 1092.302687, - 1094.100311, - 1095.892902, - 1097.680074, - 1099.461538, - 1101.237107, - 1103.006688, - 1104.770291, - 1106.528015, - 1108.280049, - 1110.026663, - 1111.768203, - 1113.50508, - 1115.237764, - 1116.966778, - 1118.692687, - 1120.416092, - 1122.137623, - 1123.857938, - 1125.57771, - 1127.297627, - 1129.018387, - 1130.740693, - 1132.465245, - 1134.19274, - 1135.923864, - 1137.659285, - 1139.399654, - 1141.145591, - 1142.897681, - 1144.656469, - 1146.42245, - 1148.196063, - 1149.97769, - 1151.767637, - 1153.566141, - 1155.373354, - 1157.189348, - 1159.014124, - 1160.847681, - 1162.689743, - 1164.540144, - 1166.398473, - 1168.264314, - 1170.137145, - 1172.016386, - 1173.901398, - 1175.791495, - 1177.685963, - 1179.584065, - 1181.485058, - 1183.388201, - 1185.292768, - 1187.198057, - 1189.103396, - 1191.008152, - 1192.911737, - 1194.813607, - 1196.71327, - 1198.610282, - 1200.504249, - 1202.394825, - 1204.281709, - 1206.164644, - 1208.043414, - 1209.917844, - 1211.787797, - 1213.65317, - 1215.513851, - 1217.369872, - 1219.2212, - 1221.067937, - 1222.910234, - 1224.74822, - 1226.582157, - 1228.412287, - 1230.238926, - 1232.062416, - 1233.883136, - 1235.701488, - 1237.517888, - 1239.332762, - 1241.146526, - 1242.959582, - 1244.772297, - 1246.584993, - 1248.39795, - 1250.211426, - 1252.025453, - 1253.840115, - 1255.655253, - 1257.470651, - 1259.285947, - 1261.100672, - 1262.914255, - 1264.726085, - 1266.535362, - 1268.341367, - 1270.143259, - 1271.940268, - 1273.731663, - 1275.51682, - 1277.295255, - 1279.066672, - 1280.831002, - 1282.588432, - 1284.339442, - 1286.084804, - 1287.825606, - 1289.563235, - 1291.299359, - 1293.035903, - 1294.774994, - 1296.518902, - 1298.270056, - 1300.030862, - 1301.803753, - 1303.59104, - 1305.394917, - 1307.217321, - 1309.059957, - 1310.924222, - 1312.811161, - 1314.72145, - 1316.655407, - 1318.612965, - 1320.593789, - 1322.596977, - 1324.621526, - 1326.665967, - 1328.728665, - 1330.807772, - 1332.901269, - 1335.007064, - 1337.123, - 1339.246913, - 1341.376678, - 1343.510229, - 1345.645585, - 1347.780869, - 1349.91432, - 1352.044289, - 1354.169242, - 1356.28775, - 1358.398482, - 1360.500159, - 1362.591448, - 1364.671382, - 1366.738743, - 1368.792636, - 1370.832125, - 1372.856404, - 1374.864768, - 1376.856647, - 1378.831632, - 1380.789475, - 1382.730137, - 1384.653773, - 1386.560773, - 1388.451747, - 1390.327557, - 1392.189293, - 1394.038266, - 1395.876006, - 1397.704225, - 1399.524801, - 1401.339745, - 1403.151164, - 1404.961237, - 1406.772193, - 1408.586169, - 1410.405326, - 1412.231666, - 1414.067096, - 1415.913356, - 1417.772016, - 1419.644451, - 1421.531831, - 1423.435121, - 1425.355074, - 1427.292239, - 1429.246965, - 1431.219415, - 1433.209571, - 1435.217249, - 1437.242117, - 1439.2837, - 1441.341393, - 1443.414476, - 1445.502115, - 1447.603373, - 1449.717215, - 1451.842513, - 1453.978049, - 1456.122523, - 1458.274544, - 1460.432666, - 1462.595361, - 1464.761055, - 1466.92813, - 1469.094931, - 1471.2598, - 1473.421082, - 1475.577153, - 1477.726445, - 1479.86747, - 1481.998844, - 1484.119312, - 1486.227764, - 1488.323265, - 1490.405061, - 1492.4726, - 1494.525535, - 1496.563732, - 1498.587267, - 1500.59642, - 1502.591667, - 1504.573671, - 1506.543271, - 1508.501412, - 1510.44916, - 1512.387443, - 1514.317722, - 1516.241031, - 1518.158818, - 1520.072374, - 1521.983067, - 1523.89224, - 1525.801218, - 1527.711292, - 1529.623701, - 1531.53963, - 1533.460188, - 1535.386402, - 1537.319225, - 1539.259505, - 1541.208001, - 1543.16537, - 1545.132161, - 1547.108815, - 1549.095657, - 1551.092896, - 1553.100624, - 1555.118806, - 1557.147286, - 1559.185778, - 1561.233874, - 1563.291042, - 1565.35663, - 1567.429871, - 1569.509894, - 1571.595728, - 1573.686313, - 1575.78051, - 1577.877125, - 1579.974909, - 1582.072592, - 1584.168888, - 1586.262524, - 1588.352252, - 1590.436869, - 1592.515236, - 1594.586292, - 1596.649068, - 1598.702702, - 1600.746445, - 1602.779671, - 1604.801882, - 1606.812709, - 1608.81191, - 1610.799375, - 1612.775112, - 1614.739247, - 1616.692014, - 1618.633746, - 1620.564871, - 1622.485898, - 1624.397407, - 1626.30005, - 1628.194537, - 1630.081638, - 1631.962165, - 1633.836977, - 1635.706966, - 1637.573052, - 1639.436178, - 1641.297299, - 1643.157378, - 1645.017372, - 1646.878227, - 1648.740817, - 1650.605819, - 1652.474252, - 1654.346655, - 1656.223852, - 1658.106435, - 1659.994977, - 1661.889954, - 1663.791748, - 1665.700634, - 1667.616772, - 1669.540198, - 1671.470788, - 1673.40819, - 1675.352155, - 1677.302044, - 1679.257313, - 1681.217205, - 1683.180902, - 1685.147494, - 1687.11593, - 1689.08473, - 1691.053171, - 1693.019647, - 1694.983218, - 1696.942629, - 1698.896751, - 1700.844448, - 1702.7846, - 1704.716088, - 1706.637785, - 1708.548543, - 1710.447178, - 1712.332462, - 1714.20311, - 1716.057796, - 1717.895141, - 1719.713749, - 1721.512216, - 1723.289175, - 1725.043336, - 1726.773539, - 1728.478824, - 1730.158493, - 1731.812186, - 1733.439947, - 1735.042294, - 1736.620275, - 1738.175509, - 1739.710209, - 1741.22719, - 1742.729845, - 1744.222097, - 1745.708338, - 1747.193332, - 1748.682112, - 1750.179865, - 1751.691817, - 1753.223033, - 1754.778355, - 1756.362216, - 1757.978586, - 1759.630796, - 1761.321562, - 1763.052833, - 1764.825803, - 1766.640901, - 1768.497798, - 1770.395433, - 1772.332115, - 1774.305555, - 1776.313001, - 1778.351305, - 1780.417034, - 1782.506584, - 1784.616253, - 1786.742329, - 1788.881167, - 1791.029228, - 1793.183124, - 1795.339638, - 1797.495728, - 1799.648518, - 1801.795282, - 1803.93342, - 1806.060428, - 1808.173876, - 1810.271394, - 1812.350628, - 1814.409274, - 1816.445064, - 1818.455794, - 1820.439366, - 1822.393823, - 1824.317393, - 1826.208562, - 1828.066127, - 1829.889251, - 1831.677508, - 1833.430948, - 1835.150106, - 1836.836043, - 1838.490339, - 1840.115094, - 1841.712896, - 1843.286784, - 1844.840194, - 1846.376911, - 1847.900918, - 1849.416421, - 1850.927653, - 1852.438855, - 1853.954164, - 1855.47754, - 1857.012693, - 1858.56303, - 1860.131607, - 1861.721095, - 1863.333764, - 1864.971478, - 1866.635697, - 1868.327496, - 1870.04759, - 1871.796348, - 1873.573842, - 1875.379859, - 1877.213946, - 1879.075427, - 1880.963424, - 1882.876905, - 1884.814648, - 1886.775302, - 1888.757349, - 1890.759127, - 1892.778754, - 1894.81391, - 1896.862756, - 1898.922609, - 1900.991198, - 1903.065867, - 1905.143932, - 1907.22262, - 1909.299089, - 1911.370471, - 1913.433901, - 1915.486557, - 1917.525702, - 1919.548735, - 1921.553229, - 1923.536984, - 1925.498067, - 1927.434848, - 1929.346036, - 1931.230703, - 1933.088301, - 1934.918667, - 1936.722028, - 1938.498984, - 1940.250493, - 1941.977844, - 1943.682621, - 1945.366667, - 1947.032039, - 1948.680963, - 1950.315792, - 1951.938962, - 1953.552944, - 1955.160213, - 1956.763213, - 1958.364323, - 1959.965841, - 1961.569955, - 1963.178733, - 1964.794097, - 1966.417845, - 1968.051613, - 1969.6969, - 1971.355053, - 1973.027268, - 1974.71459, - 1976.417906, - 1978.137939, - 1979.875245, - 1981.630204, - 1983.403007, - 1985.193651, - 1987.001931, - 1988.827428, - 1990.669507, - 1992.527312, - 1994.399758, - 1996.285553, - 1998.183187, - 2000.090964, - 2002.007012, - 2003.929311, - 2005.855715, - 2007.78399, - 2009.711839, - 2011.636942, - 2013.556987, - 2015.469688, - 2017.372888, - 2019.264495, - 2021.142606, - 2023.005475, - 2024.851552, - 2026.679509, - 2028.488239, - 2030.276875, - 2032.044814, - 2033.791637, - 2035.517214, - 2037.22151, - 2038.904875, - 2040.567676, - 2042.21059, - 2043.834392, - 2045.440023, - 2047.028552, - 2048.601159, - 2050.159125, - 2051.703815, - 2053.236668, - 2054.759181, - 2056.2729, - 2057.779405, - 2059.2803, - 2060.777201, - 2062.271721, - 2063.765459, - 2065.259983, - 2066.756815, - 2068.257412, - 2069.763151, - 2071.275303, - 2072.795016, - 2074.323293, - 2075.860965, - 2077.408672, - 2078.966839, - 2080.535651, - 2082.115032, - 2083.704621, - 2085.303758, - 2086.911436, - 2088.526219, - 2090.146602, - 2091.770488, - 2093.39564, - 2095.019229, - 2096.638809, - 2098.251104, - 2099.853112, - 2101.441938, - 2103.014501, - 2104.568203, - 2106.100612, - 2107.609755, - 2109.094135, - 2110.552826, - 2111.98554, - 2113.392658, - 2114.775267, - 2116.135154, - 2117.474775, - 2118.797201, - 2120.106036, - 2121.40531, - 2122.699358, - 2123.992737, - 2125.28997, - 2126.595527, - 2127.913598, - 2129.248049, - 2130.602223, - 2131.978972, - 2133.380476, - 2134.808419, - 2136.263793, - 2137.746744, - 2139.257054, - 2140.793689, - 2142.355246, - 2143.939858, - 2145.545382, - 2147.169441, - 2148.809579, - 2150.463318, - 2152.128248, - 2153.802104, - 2155.482792, - 2157.168426, - 2158.857327, - 2160.548015, - 2162.239171, - 2163.929605, - 2165.618196, - 2167.303852, - 2168.985446, - 2170.661793, - 2172.3316, - 2173.993452, - 2175.645821, - 2177.287056, - 2178.915403, - 2180.529065, - 2182.126228, - 2183.705136, - 2185.264156, - 2186.801767, - 2188.31634, - 2189.807419, - 2191.274048, - 2192.716439, - 2194.134958, - 2195.530595, - 2196.904816, - 2198.259564, - 2199.597207, - 2200.92047, - 2202.232369, - 2203.536149, - 2204.835074, - 2206.132496, - 2207.431612, - 2208.73547, - 2210.046868, - 2211.368317, - 2212.701924, - 2214.049482, - 2215.412365, - 2216.791534, - 2218.187675, - 2219.601073, - 2221.03179, - 2222.479639, - 2223.944264, - 2225.42518, - 2226.921825, - 2228.433592, - 2229.959864, - 2231.500021, - 2233.05346, - 2234.619568, - 2236.197766, - 2237.787416, - 2239.387862, - 2240.998357, - 2242.618052, - 2244.245966, - 2245.880946, - 2247.521677, - 2249.166649, - 2250.814184, - 2252.462426, - 2254.109386, - 2255.752962, - 2257.390995, - 2259.021303, - 2260.641753, - 2262.250302, - 2263.84506, - 2265.424343, - 2266.98672, - 2268.531046, - 2270.056497, - 2271.562586, - 2273.049164, - 2274.516423, - 2275.96487, - 2277.395276, - 2278.808515, - 2280.20602, - 2281.589035, - 2282.959228, - 2284.318219, - 2285.667723, - 2287.009454, - 2288.345096, - 2289.676277, - 2291.004542, - 2292.331339, - 2293.65801, - 2294.985785, - 2296.315792, - 2297.649061, - 2298.986534, - 2300.329084, - 2301.677523, - 2303.032612, - 2304.395069, - 2305.765581, - 2307.144792, - 2308.533313, - 2309.931699, - 2311.340449, - 2312.759982, - 2314.19062, - 2315.632568, - 2317.085892, - 2318.550494, - 2320.026101, - 2321.512245, - 2323.008255, - 2324.513246, - 2326.026141, - 2327.545667, - 2329.070382, - 2330.598704, - 2332.128934, - 2333.659298, - 2335.187986, - 2336.713184, - 2338.233123, - 2339.746106, - 2341.250547, - 2342.745, - 2344.228177, - 2345.698966, - 2347.156442, - 2348.599868, - 2350.028694, - 2351.442549, - 2352.841221, - 2354.224651, - 2355.592903, - 2356.946155, - 2358.284675, - 2359.608792, - 2360.918892, - 2362.21531, - 2363.498013, - 2364.767853, - 2366.024779, - 2367.269516, - 2368.502484, - 2369.724287, - 2370.935565, - 2372.137033, - 2373.329461, - 2374.51368, - 2375.690577, - 2376.86099, - 2378.025805, - 2379.185804, - 2380.341707, - 2381.494123, - 2382.643407, - 2383.789777, - 2384.933136, - 2386.073144, - 2387.209168, - 2388.340296, - 2389.465358, - 2390.582965, - 2391.691579, - 2392.789601, - 2393.875476, - 2394.947834, - 2396.005511, - 2397.047851, - 2398.074629, - 2399.086291, - 2400.083949, - 2401.069448, - 2402.045363, - 2403.014989, - 2403.982175, - 2404.951341, - 2405.927229, - 2406.914824, - 2407.919097, - 2408.944891, - 2409.996707, - 2411.078507, - 2412.193631, - 2413.34458, - 2414.53299, - 2415.759572, - 2417.024037, - 2418.3252, - 2419.660974, - 2421.028493, - 2422.424245, - 2423.844184, - 2425.283919, - 2426.738871, - 2428.204421, - 2429.676072, - 2431.149578, - 2432.621036, - 2434.086964, - 2435.544392, - 2436.990776, - 2438.423992, - 2439.842553, - 2441.24512, - 2442.630845, - 2443.999016, - 2445.349095, - 2446.680599, - 2447.993048, - 2449.285898, - 2450.558489, - 2451.810052, - 2453.039693, - 2454.246429, - 2455.429235, - 2456.587112, - 2457.71917, - 2458.824709, - 2459.903317, - 2460.954948, - 2461.979997, - 2462.979362, - 2463.954481, - 2464.907351, - 2465.840515, - 2466.757036, - 2467.66044, - 2468.55465, - 2469.443838, - 2470.332389, - 2471.22471, - 2472.125158, - 2473.0379, - 2473.966805, - 2474.915353, - 2475.886551, - 2476.882878, - 2477.906245, - 2478.957983, - 2480.038852, - 2481.149065, - 2482.288341, - 2483.455956, - 2484.650819, - 2485.871542, - 2487.116514, - 2488.383975, - 2489.672082, - 2490.978957, - 2492.302736, - 2493.641592, - 2494.993752, - 2496.357502, - 2497.731171, - 2499.113114, - 2500.501695, - 2501.895244, - 2503.29204, - 2504.69027, - 2506.088029, - 2507.483284, - 2508.873898, - 2510.257613, - 2511.632097, - 2512.994959, - 2514.343809, - 2515.676301, - 2516.990202, - 2518.283452, - 2519.554228, - 2520.801002, - 2522.022598, - 2523.218228, - 2524.38753, - 2525.530579, - 2526.647893, - 2527.740418, - 2528.809436, - 2529.856293, - 2530.883309, - 2531.892352, - 2532.886058, - 2533.866932, - 2534.837653, - 2535.800889, - 2536.759265, - 2537.715296, - 2538.671344, - 2539.629583, - 2540.591969, - 2541.560227, - 2542.53585, - 2543.520102, - 2544.514034, - 2545.518506, - 2546.534211, - 2547.561701, - 2548.601411, - 2549.653676, - 2550.718766, - 2551.796879, - 2552.888165, - 2553.992717, - 2555.110561, - 2556.24168, - 2557.385902, - 2558.542995, - 2559.712541, - 2560.893973, - 2562.086532, - 2563.289259, - 2564.500985, - 2565.72033, - 2566.945713, - 2568.175364, - 2569.407347, - 2570.639607, - 2571.869995, - 2573.096327, - 2574.316425, - 2575.528172, - 2576.729556, - 2577.918724, - 2579.09401, - 2580.253982, - 2581.397455, - 2582.523521, - 2583.631554, - 2584.721172, - 2585.792286, - 2586.845025, - 2587.879745, - 2588.896989, - 2589.897457, - 2590.881969, - 2591.851437, - 2592.806834, - 2593.749161, - 2594.679426, - 2595.598622, - 2596.507713, - 2597.407617, - 2598.299199, - 2599.18326, - 2600.060527, - 2600.931647, - 2601.797165, - 2602.65748, - 2603.512946, - 2604.363673, - 2605.209672, - 2606.050723, - 2606.886398, - 2607.716004, - 2608.538679, - 2609.353341, - 2610.158758, - 2610.953577, - 2611.736357, - 2612.505723, - 2613.260384, - 2613.999397, - 2614.722155, - 2615.428623, - 2616.11937, - 2616.795683, - 2617.4596, - 2618.113921, - 2618.76217, - 2619.408523, - 2620.057692, - 2620.714797, - 2621.385134, - 2622.074039, - 2622.786639, - 2623.527705, - 2624.301389, - 2625.111153, - 2625.95953, - 2626.848119, - 2627.777445, - 2628.747006, - 2629.755249, - 2630.799691, - 2631.876987, - 2632.983111, - 2634.113493, - 2635.263212, - 2636.427183, - 2637.600328, - 2638.777747, - 2639.954859, - 2641.127516, - 2642.292089, - 2643.445509, - 2644.585287, - 2645.709487, - 2646.816684, - 2647.905913, - 2648.976522, - 2650.028173, - 2651.060626, - 2652.073744, - 2653.067347, - 2654.041174, - 2654.994832, - 2655.927776, - 2656.839327, - 2657.728718, - 2658.595036, - 2659.437472, - 2660.255232, - 2661.047748, - 2661.814728, - 2662.556255, - 2663.272873, - 2663.965648, - 2664.636204, - 2665.286755, - 2665.92007, - 2666.539457, - 2667.148683, - 2667.751854, - 2668.353176, - 2668.957383, - 2669.568819, - 2670.192051, - 2670.83126, - 2671.49034, - 2672.172727, - 2672.881335, - 2673.618485, - 2674.385873, - 2675.184554, - 2676.014956, - 2676.876908, - 2677.769702, - 2678.692156, - 2679.642694, - 2680.619434, - 2681.620272, - 2682.642964, - 2683.685198, - 2684.74466, - 2685.819084, - 2686.906286, - 2688.004183, - 2689.110799, - 2690.224254, - 2691.342746, - 2692.464521, - 2693.587842, - 2694.710961, - 2695.832078, - 2696.949329, - 2698.060762, - 2699.164346, - 2700.257956, - 2701.33942, - 2702.406533, - 2703.457115, - 2704.489051, - 2705.500364, - 2706.489266, - 2707.454229, - 2708.394047, - 2709.307872, - 2710.195278, - 2711.056271, - 2711.891314, - 2712.701323, - 2713.487654, - 2714.252066, - 2714.996678, - 2715.723915, - 2716.436436, - 2717.137068, - 2717.828728, - 2718.514349, - 2719.196812, - 2719.878881, - 2720.563145, - 2721.251983, - 2721.947526, - 2722.651642, - 2723.365934, - 2724.091721, - 2724.830087, - 2725.581867, - 2726.347695, - 2727.128026, - 2727.923166, - 2728.733303, - 2729.558529, - 2730.398856, - 2731.25423, - 2732.12453, - 2733.009566, - 2733.909071, - 2734.822684, - 2735.749931, - 2736.690209, - 2737.642762, - 2738.606666, - 2739.580815, - 2740.563909, - 2741.554453, - 2742.550757, - 2743.55096, - 2744.553033, - 2745.554815, - 2746.55406, - 2747.548461, - 2748.535709, - 2749.513539, - 2750.479774, - 2751.432379, - 2752.369495, - 2753.289482, - 2754.190948, - 2755.072771, - 2755.934094, - 2756.774389, - 2757.593367, - 2758.391047, - 2759.167679, - 2759.923744, - 2760.659925, - 2761.37707, - 2762.076161, - 2762.758281, - 2763.424583, - 2764.076253, - 2764.714471, - 2765.34036, - 2765.955045, - 2766.559476, - 2767.154531, - 2767.740891, - 2768.319054, - 2768.889292, - 2769.45164, - 2770.005879, - 2770.551543, - 2771.087922, - 2771.6141, - 2772.129002, - 2772.631458, - 2773.120274, - 2773.594428, - 2774.053053, - 2774.495666, - 2774.922244, - 2775.333369, - 2775.730311, - 2776.115122, - 2776.490653, - 2776.860555, - 2777.229222, - 2777.601695, - 2777.983521, - 2778.380596, - 2778.798926, - 2779.244452, - 2779.722817, - 2780.239113, - 2780.797742, - 2781.402166, - 2782.054823, - 2782.757007, - 2783.508808, - 2784.309129, - 2785.155729, - 2786.045308, - 2786.97365, - 2787.935793, - 2788.926197, - 2789.938974, - 2790.968069, - 2792.007467, - 2793.051367, - 2794.094334, - 2795.131417, - 2796.158231, - 2797.171015, - 2798.166643, - 2799.142545, - 2800.096745, - 2801.027716, - 2801.934339, - 2802.815756, - 2803.671319, - 2804.50045, - 2805.302588, - 2806.077116, - 2806.82333, - 2807.540425, - 2808.227517, - 2808.883683, - 2809.508035, - 2810.099797, - 2810.658406, - 2811.183613, - 2811.675567, - 2812.134931, - 2812.562929, - 2812.961415, - 2813.332893, - 2813.680517, - 2814.008058, - 2814.319841, - 2814.620662, - 2814.915675, - 2815.210261, - 2815.50989, - 2815.819972, - 2816.145716, - 2816.491994, - 2816.863217, - 2817.263235, - 2817.695259, - 2818.161808, - 2818.664682, - 2819.204967, - 2819.783056, - 2820.398706, - 2821.0511, - 2821.738932, - 2822.460497, - 2823.213784, - 2823.996566, - 2824.806487, - 2825.64113, - 2826.498081, - 2827.374967, - 2828.269486, - 2829.179412, - 2830.102591, - 2831.036917, - 2831.980308, - 2832.930671, - 2833.885867, - 2834.843672, - 2835.801755, - 2836.757651, - 2837.708759, - 2838.652352, - 2839.585589, - 2840.505568, - 2841.409364, - 2842.2941, - 2843.157016, - 2843.995549, - 2844.807405, - 2845.590639, - 2846.343724, - 2847.065602, - 2847.75573, - 2848.414109, - 2849.041289, - 2849.638359, - 2850.206921, - 2850.749041, - 2851.267195, - 2851.764191, - 2852.243095, - 2852.707144, - 2853.15966, - 2853.603966, - 2854.043311, - 2854.480811, - 2854.919379, - 2855.3617, - 2855.810187, - 2856.266979, - 2856.733925, - 2857.212602, - 2857.704328, - 2858.210186, - 2858.731056, - 2859.267645, - 2859.820513, - 2860.390094, - 2860.976719, - 2861.580621, - 2862.201941, - 2862.840724, - 2863.496903, - 2864.170292, - 2864.860554, - 2865.567191, - 2866.289515, - 2867.02663, - 2867.777416, - 2868.540522, - 2869.314362, - 2870.097118, - 2870.886763, - 2871.681078, - 2872.477686, - 2873.274092, - 2874.067716, - 2874.855991, - 2875.636335, - 2876.406293, - 2877.163523, - 2877.905877, - 2878.63143, - 2879.338519, - 2880.025767, - 2880.692098, - 2881.336745, - 2881.959248, - 2882.55944, - 2883.137434, - 2883.693593, - 2884.228497, - 2884.7429, - 2885.237732, - 2885.713999, - 2886.172803, - 2886.615227, - 2887.042355, - 2887.455175, - 2887.854565, - 2888.241243, - 2888.615734, - 2888.978338, - 2889.329121, - 2889.667891, - 2889.994219, - 2890.307444, - 2890.606725, - 2890.891087, - 2891.159509, - 2891.411041, - 2891.644897, - 2891.860611, - 2892.05815, - 2892.238026, - 2892.401428, - 2892.550296, - 2892.687402, - 2892.81635, - 2892.941568, - 2893.068228, - 2893.202125, - 2893.349524, - 2893.516967, - 2893.71103, - 2893.938118, - 2894.204217, - 2894.514648, - 2894.873901, - 2895.285412, - 2895.751471, - 2896.273092, - 2896.850006, - 2897.48065, - 2898.162258, - 2898.890953, - 2899.661915, - 2900.469565, - 2901.307759, - 2902.170035, - 2903.049788, - 2903.940517, - 2904.835976, - 2905.730344, - 2906.618341, - 2907.495308, - 2908.357253, - 2909.200863, - 2910.023465, - 2910.82295, - 2911.597725, - 2912.346565, - 2913.068538, - 2913.762881, - 2914.428908, - 2915.065933, - 2915.673217, - 2916.249924, - 2916.795145, - 2917.307898, - 2917.787197, - 2918.23213, - 2918.641935, - 2919.016119, - 2919.354544, - 2919.657509, - 2919.925962, - 2920.161387, - 2920.366031, - 2920.542807, - 2920.695332, - 2920.827872, - 2920.94527, - 2921.052849, - 2921.156286, - 2921.261468, - 2921.374342, - 2921.500757, - 2921.646307, - 2921.816193, - 2922.01509, - 2922.247044, - 2922.515392, - 2922.822708, - 2923.170782, - 2923.560626, - 2923.992496, - 2924.465963, - 2924.979967, - 2925.532921, - 2926.122797, - 2926.747227, - 2927.403605, - 2928.089166, - 2928.801074, - 2929.536476, - 2930.292553, - 2931.066553, - 2931.855796, - 2932.657679, - 2933.469659, - 2934.289229, - 2935.113886, - 2935.941106, - 2936.768308, - 2937.592839, - 2938.41195, - 2939.222802, - 2940.022469, - 2940.807968, - 2941.576297, - 2942.324489, - 2943.04967, - 2943.749139, - 2944.420432, - 2945.06141, - 2945.670318, - 2946.24586, - 2946.787243, - 2947.294221, - 2947.767116, - 2948.206816, - 2948.614767, - 2948.992938, - 2949.34377, - 2949.670114, - 2949.975156, - 2950.262334, - 2950.535254, - 2950.797595, - 2951.053034, - 2951.305163, - 2951.557424, - 2951.813052, - 2952.075031, - 2952.346065, - 2952.628558, - 2952.924609, - 2953.236024, - 2953.564328, - 2953.910787, - 2954.276437, - 2954.662105, - 2955.068436, - 2955.495913, - 2955.944871, - 2956.415506, - 2956.907878, - 2957.42191, - 2957.957373, - 2958.513873, - 2959.090824, - 2959.687466, - 2960.302794, - 2960.93559, - 2961.584379, - 2962.24744, - 2962.922798, - 2963.608241, - 2964.301332, - 2964.999444, - 2965.699788, - 2966.399463, - 2967.095501, - 2967.784921, - 2968.464779, - 2969.132238, - 2969.784611, - 2970.419415, - 2971.034421, - 2971.627687, - 2972.197591, - 2972.742848, - 2973.262523, - 2973.756028, - 2974.223114, - 2974.663851, - 2975.0786, - 2975.467979, - 2975.832817, - 2976.174106, - 2976.492947, - 2976.790489, - 2977.06787, - 2977.326158, - 2977.566293, - 2977.789036, - 2977.994935, - 2978.18428, - 2978.357099, - 2978.513151, - 2978.651945, - 2978.772795, - 2978.874883, - 2978.957358, - 2979.019453, - 2979.060622, - 2979.080718, - 2979.080091, - 2979.059745, - 2979.02146, - 2978.96786, - 2978.902495, - 2978.829824, - 2978.755184, - 2978.684682, - 2978.625057, - 2978.583483, - 2978.567338, - 2978.583961, - 2978.640395, - 2978.743102, - 2978.897765, - 2979.109008, - 2979.380278, - 2979.713659, - 2980.109822, - 2980.568006, - 2981.086045, - 2981.660464, - 2982.286633, - 2982.958924, - 2983.670963, - 2984.415828, - 2985.186309, - 2985.975138, - 2986.775205, - 2987.579747, - 2988.382509, - 2989.177852, - 2989.96083, - 2990.727225, - 2991.473534, - 2992.1969, - 2992.89508, - 2993.566296, - 2994.209161, - 2994.822545, - 2995.405471, - 2995.95701, - 2996.476215, - 2996.96205, - 2997.413347, - 2997.82896, - 2998.207588, - 2998.548059, - 2998.849276, - 2999.11039, - 2999.330893, - 2999.510743, - 2999.650471, - 2999.751289, - 2999.815093, - 2999.844602, - 2999.843271, - 2999.81533, - 2999.765696, - 2999.69989, - 2999.623914, - 2999.544108, - 2999.466996, - 2999.399106, - 2999.346801, - 2999.316135, - 2999.312668, - 2999.341364, - 2999.406472, - 2999.511451, - 2999.658923, - 2999.850662, - 3000.087605, - 3000.369901, - 3000.696975, - 3001.067611, - 3001.480057, - 3001.932124, - 3002.421293, - 3002.944819, - 3003.499819, - 3004.08335, - 3004.692472, - 3005.324286, - 3005.975964, - 3006.644746, - 3007.327939, - 3008.022889, - 3008.726954, - 3009.437468, - 3010.151709, - 3010.866867, - 3011.580021, - 3012.288131, - 3012.988037, - 3013.676475, - 3014.350119, - 3015.00562, - 3015.639675, - 3016.249102, - 3016.830912, - 3017.382404, - 3017.901238, - 3018.385516, - 3018.833854, - 3019.245426, - 3019.62001, - 3019.958003, - 3020.260422, - 3020.528881, - 3020.765554, - 3020.973115, - 3021.15467, - 3021.313671, - 3021.453827, - 3021.579009, - 3021.693161, - 3021.800207, - 3021.903972, - 3022.00811, - 3022.11605, - 3022.230944, - 3022.355631, - 3022.492655, - 3022.644213, - 3022.812213, - 3022.998257, - 3023.20368, - 3023.429569, - 3023.676789, - 3023.946011, - 3024.237725, - 3024.552265, - 3024.889812, - 3025.25039, - 3025.633881, - 3026.039992, - 3026.46826, - 3026.918024, - 3027.388411, - 3027.878318, - 3028.386395, - 3028.911038, - 3029.450384, - 3030.002318, - 3030.56448, - 3031.134295, - 3031.708998, - 3032.285676, - 3032.861313, - 3033.432844, - 3033.99721, - 3034.551403, - 3035.092548, - 3035.617936, - 3036.12509, - 3036.611803, - 3037.076176, - 3037.516649, - 3037.932015, - 3038.321427, - 3038.684397, - 3039.020781, - 3039.330749, - 3039.614752, - 3039.873476, - 3040.107787, - 3040.31867, - 3040.507166, - 3040.674305, - 3040.821039, - 3040.948185, - 3041.05637, - 3041.145994, - 3041.217203, - 3041.269876, - 3041.303647, - 3041.317939, - 3041.312036, - 3041.285177, - 3041.236682, - 3041.16609, - 3041.073319, - 3040.958816, - 3040.823693, - 3040.66991, - 3040.500233, - 3040.318446, - 3040.129222, - 3039.938164, - 3039.751666, - 3039.576773, - 3039.420987, - 3039.292033, - 3039.197593, - 3039.145051, - 3039.141205, - 3039.192019, - 3039.30241, - 3039.47603, - 3039.715159, - 3040.020596, - 3040.391638, - 3040.826129, - 3041.320532, - 3041.870087, - 3042.468992, - 3043.110618, - 3043.787763, - 3044.492881, - 3045.21834, - 3045.956641, - 3046.700615, - 3047.443591, - 3048.17952, - 3048.903051, - 3049.609587, - 3050.295267, - 3050.956903, - 3051.59196, - 3052.198397, - 3052.774598, - 3053.319233, - 3053.831157, - 3054.309298, - 3054.752585, - 3055.159884, - 3055.529947, - 3055.861556, - 3056.153365, - 3056.404193, - 3056.61288, - 3056.778604, - 3056.900839, - 3056.979576, - 3057.015389, - 3057.009546, - 3056.964081, - 3056.881838, - 3056.766485, - 3056.622489, - 3056.455057, - 3056.270048, - 3056.073845, - 3055.873207, - 3055.675108, - 3055.486555, - 3055.314412, - 3055.165222, - 3055.045051, - 3054.959339, - 3054.912792, - 3054.909289, - 3054.951832, - 3055.042523, - 3055.182573, - 3055.372346, - 3055.611419, - 3055.898669, - 3056.232368, - 3056.610308, - 3057.029885, - 3057.488229, - 3057.982284, - 3058.508898, - 3059.064888, - 3059.64708, - 3060.25235, - 3060.877619, - 3061.519856, - 3062.176054, - 3062.843206, - 3063.518267, - 3064.198126, - 3064.879574, - 3065.559286, - 3066.233813, - 3066.899585, - 3067.552939, - 3068.190151, - 3068.807494, - 3069.401302, - 3069.96805, - 3070.504439, - 3071.007483, - 3071.474597, - 3071.903677, - 3072.29317, - 3072.642127, - 3072.950252, - 3073.217906, - 3073.446122, - 3073.636568, - 3073.791514, - 3073.913768, - 3074.0066, - 3074.073659, - 3074.118871, - 3074.14635, - 3074.160295, - 3074.164896, - 3074.164257, - 3074.162315, - 0 - ], - "yaxis": "y4" - } - ], - "layout": { - "annotations": [ - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " Wind1VelX_(m/s)", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 1, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " Azimuth_(deg)", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 0.71875, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " GenTq_(kN-m)", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 0.4375, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 16 - }, - "showarrow": false, - "text": " GenPwr_(kW)", - "x": 0.5, - "xanchor": "center", - "xref": "paper", - "y": 0.15625, - "yanchor": "bottom", - "yref": "paper" - } - ], - "height": 1200, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "fillpattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "title": { - "text": "TurbId: 1 - Time = 99.99 (s)" - }, - "xaxis": { - "anchor": "y", - "domain": [ - 0, - 1 - ] - }, - "xaxis2": { - "anchor": "y2", - "domain": [ - 0, - 1 - ] - }, - "xaxis3": { - "anchor": "y3", - "domain": [ - 0, - 1 - ] - }, - "xaxis4": { - "anchor": "y4", - "domain": [ - 0, - 1 - ] - }, - "yaxis": { - "anchor": "x", - "domain": [ - 0.84375, - 1 - ] - }, - "yaxis2": { - "anchor": "x2", - "domain": [ - 0.5625, - 0.71875 - ] - }, - "yaxis3": { - "anchor": "x3", - "domain": [ - 0.28125, - 0.4375 - ] - }, - "yaxis4": { - "anchor": "x4", - "domain": [ - 0, - 0.15625 - ] - } - } - } - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Subscription to FAST channel closed.\n" - ] - } - ], - "source": [ - "rfi.fast_sub(200, plot=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test 01 - Message Integrity" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from openfast_toolbox.io import FASTOutputFile\n", - "\n", - "fastout = FASTOutputFile('../templatesDir/OFZMQ_test01/OFZMQ_test01_2.outb').toDataFrame()\n", - "zmqout = rfi.sub_dict " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['TurbId', ' Time', ' Wind1VelX_(m/s)', ' Azimuth_(deg)', ' GenTq_(kN-m)', ' GenPwr_(kW)'])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "zmqout.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import gzip \n", - "import pickle \n", - "\n", - "with open('./zmq_logs/OFZMQ_test01.pkl.gz', 'rb') as f:\n", - " zmqout = pickle.load(gzip.open(f))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "10000" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(zmqout[' Time']) " - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np \n", - "# remove last point because it's the EOF signal\n", - "\n", - "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-2], zmqout[' Wind1VelX_(m/s)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['Azimuth_[deg]'][:-2], zmqout[' Azimuth_(deg)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenTq_[kN-m]'][:-2], zmqout[' GenTq_(kN-m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenPwr_[kW]'][:-2], zmqout[' GenPwr_(kW)'][:-1], atol=1e-5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Test 02 - Message integrity with `DT_OUT != DT_FAST` " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ZMQ Real Time interactor for FAST initialized. \n", - " PUB-SUB protocol: tcp://127.0.0.1:5557 | REQ-REP protocol: None\n", - "Communication log will be saved at: ./zmq_logs/ \n", - "\n" - ] - } - ], - "source": [ - "from real_fast_interactor import RFInteractor\n", - "\n", - "rfi = RFInteractor(ZmqInAddress=None, ZmqOutAddress='tcp://127.0.0.1:5557', verbose=False, save_comms_log=True, path_out='./zmq_logs/', \n", - " live_plot=False, name='OFZMQ_test02')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Subscription to FAST channel closed.\n" - ] - } - ], - "source": [ - "rfi.fast_sub(100, plot=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from openfast_toolbox.io import FASTOutputFile\n", - "\n", - "fastout = FASTOutputFile('../templatesDir/OFZMQ_test02/OFZMQ_test02.outb').toDataFrame()\n", - "zmqout = rfi.sub_dict " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import gzip \n", - "import pickle \n", - "\n", - "with open('./zmq_logs/OFZMQ_test02.pkl.gz', 'rb') as f:\n", - " zmqout = pickle.load(gzip.open(f))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "dt_fast = 0.005 \n", - "dt_zmq_out = 0.5 \n", - "step = int(dt_zmq_out/dt_fast)\n", - "\n", - "\n", - "assert np.allclose(fastout['Wind1VelX_[m/s]'][:-1:step], zmqout[' Wind1VelX: (m/s)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['Azimuth_[deg]'][:-1:step], zmqout[' Azimuth: (deg)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenTq_[kN-m]'][:-1:step], zmqout[' GenTq: (kN-m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['GenPwr_[kW]'][:-1:step], zmqout[' GenPwr: (kW)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['OoPDefl1_[m]'][:-1:step], zmqout[' OoPDefl1: (m)'][:-1], atol=1e-5)\n", - "assert np.allclose(fastout['IPDefl1_[m]'][:-1:step], zmqout[' IPDefl1: (m)'][:-1], atol=1e-5)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "100.0" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0,\n", - " 0.005,\n", - " 0.01,\n", - " 0.015,\n", - " 0.02,\n", - " 0.025,\n", - " 0.03,\n", - " 0.035,\n", - " 0.04,\n", - " 0.045,\n", - " 0.05,\n", - " 0.055,\n", - " 0.06,\n", - " 0.065,\n", - " 0.07,\n", - " 0.075,\n", - " 0.08,\n", - " 0.085,\n", - " 0.09,\n", - " 0.095,\n", - " 0.1,\n", - " 0.105,\n", - " 0.11,\n", - " 0.115,\n", - " 0.12,\n", - " 0.125,\n", - " 0.13,\n", - " 0.135,\n", - " 0.14,\n", - " 0.145,\n", - " 0.15,\n", - " 0.155,\n", - " 0.16,\n", - " 0.165,\n", - " 0.17,\n", - " 0.175,\n", - " 0.18,\n", - " 0.185,\n", - " 0.19,\n", - " 0.195,\n", - " 0.2,\n", - " 0.205,\n", - " 0.21,\n", - " 0.215,\n", - " 0.22,\n", - " 0.225,\n", - " 0.23,\n", - " 0.235,\n", - " 0.24,\n", - " 0.245,\n", - " 0.25,\n", - " 0.255,\n", - " 0.26,\n", - " 0.265,\n", - " 0.27,\n", - " 0.275,\n", - " 0.28,\n", - " 0.285,\n", - " 0.29,\n", - " 0.295,\n", - " 0.3,\n", - " 0.305,\n", - " 0.31,\n", - " 0.315,\n", - " 0.32,\n", - " 0.325,\n", - " 0.33,\n", - " 0.335,\n", - " 0.34,\n", - " 0.345,\n", - " 0.35,\n", - " 0.355,\n", - " 0.36,\n", - " 0.365,\n", - " 0.37,\n", - " 0.375,\n", - " 0.38,\n", - " 0.385,\n", - " 0.39,\n", - " 0.395,\n", - " 0.4,\n", - " 0.405,\n", - " 0.41,\n", - " 0.415,\n", - " 0.42,\n", - " 0.425,\n", - " 0.43,\n", - " 0.435,\n", - " 0.44,\n", - " 0.445,\n", - " 0.45,\n", - " 0.455,\n", - " 0.46,\n", - " 0.465,\n", - " 0.47,\n", - " 0.475,\n", - " 0.48,\n", - " 0.485,\n", - " 0.49,\n", - " 0.495,\n", - " 0.5,\n", - " 0.505,\n", - " 0.51,\n", - " 0.515,\n", - " 0.52,\n", - " 0.525,\n", - " 0.53,\n", - " 0.535,\n", - " 0.54,\n", - " 0.545,\n", - " 0.55,\n", - " 0.555,\n", - " 0.56,\n", - " 0.565,\n", - " 0.57,\n", - " 0.575,\n", - " 0.58,\n", - " 0.585,\n", - " 0.59,\n", - " 0.595,\n", - " 0.6,\n", - " 0.605,\n", - " 0.61,\n", - " 0.615,\n", - " 0.62,\n", - " 0.625,\n", - " 0.63,\n", - " 0.635,\n", - " 0.64,\n", - " 0.645,\n", - " 0.65,\n", - " 0.655,\n", - " 0.66,\n", - " 0.665,\n", - " 0.67,\n", - " 0.675,\n", - " 0.68,\n", - " 0.685,\n", - " 0.69,\n", - " 0.695,\n", - " 0.7,\n", - " 0.705,\n", - " 0.71,\n", - " 0.715,\n", - " 0.72,\n", - " 0.725,\n", - " 0.73,\n", - " 0.735,\n", - " 0.74,\n", - " 0.745,\n", - " 0.75,\n", - " 0.755,\n", - " 0.76,\n", - " 0.765,\n", - " 0.77,\n", - " 0.775,\n", - " 0.78,\n", - " 0.785,\n", - " 0.79,\n", - " 0.795,\n", - " 0.8,\n", - " 0.805,\n", - " 0.81,\n", - " 0.815,\n", - " 0.82,\n", - " 0.825,\n", - " 0.83,\n", - " 0.835,\n", - " 0.84,\n", - " 0.845,\n", - " 0.85,\n", - " 0.855,\n", - " 0.86,\n", - " 0.865,\n", - " 0.87,\n", - " 0.875,\n", - " 0.88,\n", - " 0.885,\n", - " 0.89,\n", - " 0.895,\n", - " 0.9,\n", - " 0.905,\n", - " 0.91,\n", - " 0.915,\n", - " 0.92,\n", - " 0.925,\n", - " 0.93,\n", - " 0.935,\n", - " 0.94,\n", - " 0.945,\n", - " 0.95,\n", - " 0.955,\n", - " 0.96,\n", - " 0.965,\n", - " 0.97,\n", - " 0.975,\n", - " 0.98,\n", - " 0.985,\n", - " 0.99,\n", - " 0.995,\n", - " 1,\n", - " 1.005,\n", - " 1.01,\n", - " 1.015,\n", - " 1.02,\n", - " 1.025,\n", - " 1.03,\n", - " 1.035,\n", - " 1.04,\n", - " 1.045,\n", - " 1.05,\n", - " 1.055,\n", - " 1.06,\n", - " 1.065,\n", - " 1.07,\n", - " 1.075,\n", - " 1.08,\n", - " 1.085,\n", - " 1.09,\n", - " 1.095,\n", - " 1.1,\n", - " 1.105,\n", - " 1.11,\n", - " 1.115,\n", - " 1.12,\n", - " 1.125,\n", - " 1.13,\n", - " 1.135,\n", - " 1.14,\n", - " 1.145,\n", - " 1.15,\n", - " 1.155,\n", - " 1.16,\n", - " 1.165,\n", - " 1.17,\n", - " 1.175,\n", - " 1.18,\n", - " 1.185,\n", - " 1.19,\n", - " 1.195,\n", - " 1.2,\n", - " 1.205,\n", - " 1.21,\n", - " 1.215,\n", - " 1.22,\n", - " 1.225,\n", - " 1.23,\n", - " 1.235,\n", - " 1.24,\n", - " 1.245,\n", - " 1.25,\n", - " 1.255,\n", - " 1.26,\n", - " 1.265,\n", - " 1.27,\n", - " 1.275,\n", - " 1.28,\n", - " 1.285,\n", - " 1.29,\n", - " 1.295,\n", - " 1.3,\n", - " 1.305,\n", - " 1.31,\n", - " 1.315,\n", - " 1.32,\n", - " 1.325,\n", - " 1.33,\n", - " 1.335,\n", - " 1.34,\n", - " 1.345,\n", - " 1.35,\n", - " 1.355,\n", - " 1.36,\n", - " 1.365,\n", - " 1.37,\n", - " 1.375,\n", - " 1.38,\n", - " 1.385,\n", - " 1.39,\n", - " 1.395,\n", - " 1.4,\n", - " 1.405,\n", - " 1.41,\n", - " 1.415,\n", - " 1.42,\n", - " 1.425,\n", - " 1.43,\n", - " 1.435,\n", - " 1.44,\n", - " 1.445,\n", - " 1.45,\n", - " 1.455,\n", - " 1.46,\n", - " 1.465,\n", - " 1.47,\n", - " 1.475,\n", - " 1.48,\n", - " 1.485,\n", - " 1.49,\n", - " 1.495,\n", - " 1.5,\n", - " 1.505,\n", - " 1.51,\n", - " 1.515,\n", - " 1.52,\n", - " 1.525,\n", - " 1.53,\n", - " 1.535,\n", - " 1.54,\n", - " 1.545,\n", - " 1.55,\n", - " 1.555,\n", - " 1.56,\n", - " 1.565,\n", - " 1.57,\n", - " 1.575,\n", - " 1.58,\n", - " 1.585,\n", - " 1.59,\n", - " 1.595,\n", - " 1.6,\n", - " 1.605,\n", - " 1.61,\n", - " 1.615,\n", - " 1.62,\n", - " 1.625,\n", - " 1.63,\n", - " 1.635,\n", - " 1.64,\n", - " 1.645,\n", - " 1.65,\n", - " 1.655,\n", - " 1.66,\n", - " 1.665,\n", - " 1.67,\n", - " 1.675,\n", - " 1.68,\n", - " 1.685,\n", - " 1.69,\n", - " 1.695,\n", - " 1.7,\n", - " 1.705,\n", - " 1.71,\n", - " 1.715,\n", - " 1.72,\n", - " 1.725,\n", - " 1.73,\n", - " 1.735,\n", - " 1.74,\n", - " 1.745,\n", - " 1.75,\n", - " 1.755,\n", - " 1.76,\n", - " 1.765,\n", - " 1.77,\n", - " 1.775,\n", - " 1.78,\n", - " 1.785,\n", - " 1.79,\n", - " 1.795,\n", - " 1.8,\n", - " 1.805,\n", - " 1.81,\n", - " 1.815,\n", - " 1.82,\n", - " 1.825,\n", - " 1.83,\n", - " 1.835,\n", - " 1.84,\n", - " 1.845,\n", - " 1.85,\n", - " 1.855,\n", - " 1.86,\n", - " 1.865,\n", - " 1.87,\n", - " 1.875,\n", - " 1.88,\n", - " 1.885,\n", - " 1.89,\n", - " 1.895,\n", - " 1.9,\n", - " 1.905,\n", - " 1.91,\n", - " 1.915,\n", - " 1.92,\n", - " 1.925,\n", - " 1.93,\n", - " 1.935,\n", - " 1.94,\n", - " 1.945,\n", - " 1.95,\n", - " 1.955,\n", - " 1.96,\n", - " 1.965,\n", - " 1.97,\n", - " 1.975,\n", - " 1.98,\n", - " 1.985,\n", - " 1.99,\n", - " 1.995,\n", - " 2,\n", - " 2.005,\n", - " 2.01,\n", - " 2.015,\n", - " 2.02,\n", - " 2.025,\n", - " 2.03,\n", - " 2.035,\n", - " 2.04,\n", - " 2.045,\n", - " 2.05,\n", - " 2.055,\n", - " 2.06,\n", - " 2.065,\n", - " 2.07,\n", - " 2.075,\n", - " 2.08,\n", - " 2.085,\n", - " 2.09,\n", - " 2.095,\n", - " 2.1,\n", - " 2.105,\n", - " 2.11,\n", - " 2.115,\n", - " 2.12,\n", - " 2.125,\n", - " 2.13,\n", - " 2.135,\n", - " 2.14,\n", - " 2.145,\n", - " 2.15,\n", - " 2.155,\n", - " 2.16,\n", - " 2.165,\n", - " 2.17,\n", - " 2.175,\n", - " 2.18,\n", - " 2.185,\n", - " 2.19,\n", - " 2.195,\n", - " 2.2,\n", - " 2.205,\n", - " 2.21,\n", - " 2.215,\n", - " 2.22,\n", - " 2.225,\n", - " 2.23,\n", - " 2.235,\n", - " 2.24,\n", - " 2.245,\n", - " 2.25,\n", - " 2.255,\n", - " 2.26,\n", - " 2.265,\n", - " 2.27,\n", - " 2.275,\n", - " 2.28,\n", - " 2.285,\n", - " 2.29,\n", - " 2.295,\n", - " 2.3,\n", - " 2.305,\n", - " 2.31,\n", - " 2.315,\n", - " 2.32,\n", - " 2.325,\n", - " 2.33,\n", - " 2.335,\n", - " 2.34,\n", - " 2.345,\n", - " 2.35,\n", - " 2.355,\n", - " 2.36,\n", - " 2.365,\n", - " 2.37,\n", - " 2.375,\n", - " 2.38,\n", - " 2.385,\n", - " 2.39,\n", - " 2.395,\n", - " 2.4,\n", - " 2.405,\n", - " 2.41,\n", - " 2.415,\n", - " 2.42,\n", - " 2.425,\n", - " 2.43,\n", - " 2.435,\n", - " 2.44,\n", - " 2.445,\n", - " 2.45,\n", - " 2.455,\n", - " 2.46,\n", - " 2.465,\n", - " 2.47,\n", - " 2.475,\n", - " 2.48,\n", - " 2.485,\n", - " 2.49,\n", - " 2.495,\n", - " 2.5,\n", - " 2.505,\n", - " 2.51,\n", - " 2.515,\n", - " 2.52,\n", - " 2.525,\n", - " 2.53,\n", - " 2.535,\n", - " 2.54,\n", - " 2.545,\n", - " 2.55,\n", - " 2.555,\n", - " 2.56,\n", - " 2.565,\n", - " 2.57,\n", - " 2.575,\n", - " 2.58,\n", - " 2.585,\n", - " 2.59,\n", - " 2.595,\n", - " 2.6,\n", - " 2.605,\n", - " 2.61,\n", - " 2.615,\n", - " 2.62,\n", - " 2.625,\n", - " 2.63,\n", - " 2.635,\n", - " 2.64,\n", - " 2.645,\n", - " 2.65,\n", - " 2.655,\n", - " 2.66,\n", - " 2.665,\n", - " 2.67,\n", - " 2.675,\n", - " 2.68,\n", - " 2.685,\n", - " 2.69,\n", - " 2.695,\n", - " 2.7,\n", - " 2.705,\n", - " 2.71,\n", - " 2.715,\n", - " 2.72,\n", - " 2.725,\n", - " 2.73,\n", - " 2.735,\n", - " 2.74,\n", - " 2.745,\n", - " 2.75,\n", - " 2.755,\n", - " 2.76,\n", - " 2.765,\n", - " 2.77,\n", - " 2.775,\n", - " 2.78,\n", - " 2.785,\n", - " 2.79,\n", - " 2.795,\n", - " 2.8,\n", - " 2.805,\n", - " 2.81,\n", - " 2.815,\n", - " 2.82,\n", - " 2.825,\n", - " 2.83,\n", - " 2.835,\n", - " 2.84,\n", - " 2.845,\n", - " 2.85,\n", - " 2.855,\n", - " 2.86,\n", - " 2.865,\n", - " 2.87,\n", - " 2.875,\n", - " 2.88,\n", - " 2.885,\n", - " 2.89,\n", - " 2.895,\n", - " 2.9,\n", - " 2.905,\n", - " 2.91,\n", - " 2.915,\n", - " 2.92,\n", - " 2.925,\n", - " 2.93,\n", - " 2.935,\n", - " 2.94,\n", - " 2.945,\n", - " 2.95,\n", - " 2.955,\n", - " 2.96,\n", - " 2.965,\n", - " 2.97,\n", - " 2.975,\n", - " 2.98,\n", - " 2.985,\n", - " 2.99,\n", - " 2.995,\n", - " 3,\n", - " 3.005,\n", - " 3.01,\n", - " 3.015,\n", - " 3.02,\n", - " 3.025,\n", - " 3.03,\n", - " 3.035,\n", - " 3.04,\n", - " 3.045,\n", - " 3.05,\n", - " 3.055,\n", - " 3.06,\n", - " 3.065,\n", - " 3.07,\n", - " 3.075,\n", - " 3.08,\n", - " 3.085,\n", - " 3.09,\n", - " 3.095,\n", - " 3.1,\n", - " 3.105,\n", - " 3.11,\n", - " 3.115,\n", - " 3.12,\n", - " 3.125,\n", - " 3.13,\n", - " 3.135,\n", - " 3.14,\n", - " 3.145,\n", - " 3.15,\n", - " 3.155,\n", - " 3.16,\n", - " 3.165,\n", - " 3.17,\n", - " 3.175,\n", - " 3.18,\n", - " 3.185,\n", - " 3.19,\n", - " 3.195,\n", - " 3.2,\n", - " 3.205,\n", - " 3.21,\n", - " 3.215,\n", - " 3.22,\n", - " 3.225,\n", - " 3.23,\n", - " 3.235,\n", - " 3.24,\n", - " 3.245,\n", - " 3.25,\n", - " 3.255,\n", - " 3.26,\n", - " 3.265,\n", - " 3.27,\n", - " 3.275,\n", - " 3.28,\n", - " 3.285,\n", - " 3.29,\n", - " 3.295,\n", - " 3.3,\n", - " 3.305,\n", - " 3.31,\n", - " 3.315,\n", - " 3.32,\n", - " 3.325,\n", - " 3.33,\n", - " 3.335,\n", - " 3.34,\n", - " 3.345,\n", - " 3.35,\n", - " 3.355,\n", - " 3.36,\n", - " 3.365,\n", - " 3.37,\n", - " 3.375,\n", - " 3.38,\n", - " 3.385,\n", - " 3.39,\n", - " 3.395,\n", - " 3.4,\n", - " 3.405,\n", - " 3.41,\n", - " 3.415,\n", - " 3.42,\n", - " 3.425,\n", - " 3.43,\n", - " 3.435,\n", - " 3.44,\n", - " 3.445,\n", - " 3.45,\n", - " 3.455,\n", - " 3.46,\n", - " 3.465,\n", - " 3.47,\n", - " 3.475,\n", - " 3.48,\n", - " 3.485,\n", - " 3.49,\n", - " 3.495,\n", - " 3.5,\n", - " 3.505,\n", - " 3.51,\n", - " 3.515,\n", - " 3.52,\n", - " 3.525,\n", - " 3.53,\n", - " 3.535,\n", - " 3.54,\n", - " 3.545,\n", - " 3.55,\n", - " 3.555,\n", - " 3.56,\n", - " 3.565,\n", - " 3.57,\n", - " 3.575,\n", - " 3.58,\n", - " 3.585,\n", - " 3.59,\n", - " 3.595,\n", - " 3.6,\n", - " 3.605,\n", - " 3.61,\n", - " 3.615,\n", - " 3.62,\n", - " 3.625,\n", - " 3.63,\n", - " 3.635,\n", - " 3.64,\n", - " 3.645,\n", - " 3.65,\n", - " 3.655,\n", - " 3.66,\n", - " 3.665,\n", - " 3.67,\n", - " 3.675,\n", - " 3.68,\n", - " 3.685,\n", - " 3.69,\n", - " 3.695,\n", - " 3.7,\n", - " 3.705,\n", - " 3.71,\n", - " 3.715,\n", - " 3.72,\n", - " 3.725,\n", - " 3.73,\n", - " 3.735,\n", - " 3.74,\n", - " 3.745,\n", - " 3.75,\n", - " 3.755,\n", - " 3.76,\n", - " 3.765,\n", - " 3.77,\n", - " 3.775,\n", - " 3.78,\n", - " 3.785,\n", - " 3.79,\n", - " 3.795,\n", - " 3.8,\n", - " 3.805,\n", - " 3.81,\n", - " 3.815,\n", - " 3.82,\n", - " 3.825,\n", - " 3.83,\n", - " 3.835,\n", - " 3.84,\n", - " 3.845,\n", - " 3.85,\n", - " 3.855,\n", - " 3.86,\n", - " 3.865,\n", - " 3.87,\n", - " 3.875,\n", - " 3.88,\n", - " 3.885,\n", - " 3.89,\n", - " 3.895,\n", - " 3.9,\n", - " 3.905,\n", - " 3.91,\n", - " 3.915,\n", - " 3.92,\n", - " 3.925,\n", - " 3.93,\n", - " 3.935,\n", - " 3.94,\n", - " 3.945,\n", - " 3.95,\n", - " 3.955,\n", - " 3.96,\n", - " 3.965,\n", - " 3.97,\n", - " 3.975,\n", - " 3.98,\n", - " 3.985,\n", - " 3.99,\n", - " 3.995,\n", - " 4,\n", - " 4.005,\n", - " 4.01,\n", - " 4.015,\n", - " 4.02,\n", - " 4.025,\n", - " 4.03,\n", - " 4.035,\n", - " 4.04,\n", - " 4.045,\n", - " 4.05,\n", - " 4.055,\n", - " 4.06,\n", - " 4.065,\n", - " 4.07,\n", - " 4.075,\n", - " 4.08,\n", - " 4.085,\n", - " 4.09,\n", - " 4.095,\n", - " 4.1,\n", - " 4.105,\n", - " 4.11,\n", - " 4.115,\n", - " 4.12,\n", - " 4.125,\n", - " 4.13,\n", - " 4.135,\n", - " 4.14,\n", - " 4.145,\n", - " 4.15,\n", - " 4.155,\n", - " 4.16,\n", - " 4.165,\n", - " 4.17,\n", - " 4.175,\n", - " 4.18,\n", - " 4.185,\n", - " 4.19,\n", - " 4.195,\n", - " 4.2,\n", - " 4.205,\n", - " 4.21,\n", - " 4.215,\n", - " 4.22,\n", - " 4.225,\n", - " 4.23,\n", - " 4.235,\n", - " 4.24,\n", - " 4.245,\n", - " 4.25,\n", - " 4.255,\n", - " 4.26,\n", - " 4.265,\n", - " 4.27,\n", - " 4.275,\n", - " 4.28,\n", - " 4.285,\n", - " 4.29,\n", - " 4.295,\n", - " 4.3,\n", - " 4.305,\n", - " 4.31,\n", - " 4.315,\n", - " 4.32,\n", - " 4.325,\n", - " 4.33,\n", - " 4.335,\n", - " 4.34,\n", - " 4.345,\n", - " 4.35,\n", - " 4.355,\n", - " 4.36,\n", - " 4.365,\n", - " 4.37,\n", - " 4.375,\n", - " 4.38,\n", - " 4.385,\n", - " 4.39,\n", - " 4.395,\n", - " 4.4,\n", - " 4.405,\n", - " 4.41,\n", - " 4.415,\n", - " 4.42,\n", - " 4.425,\n", - " 4.43,\n", - " 4.435,\n", - " 4.44,\n", - " 4.445,\n", - " 4.45,\n", - " 4.455,\n", - " 4.46,\n", - " 4.465,\n", - " 4.47,\n", - " 4.475,\n", - " 4.48,\n", - " 4.485,\n", - " 4.49,\n", - " 4.495,\n", - " 4.5,\n", - " 4.505,\n", - " 4.51,\n", - " 4.515,\n", - " 4.52,\n", - " 4.525,\n", - " 4.53,\n", - " 4.535,\n", - " 4.54,\n", - " 4.545,\n", - " 4.55,\n", - " 4.555,\n", - " 4.56,\n", - " 4.565,\n", - " 4.57,\n", - " 4.575,\n", - " 4.58,\n", - " 4.585,\n", - " 4.59,\n", - " 4.595,\n", - " 4.6,\n", - " 4.605,\n", - " 4.61,\n", - " 4.615,\n", - " 4.62,\n", - " 4.625,\n", - " 4.63,\n", - " 4.635,\n", - " 4.64,\n", - " 4.645,\n", - " 4.65,\n", - " 4.655,\n", - " 4.66,\n", - " 4.665,\n", - " 4.67,\n", - " 4.675,\n", - " 4.68,\n", - " 4.685,\n", - " 4.69,\n", - " 4.695,\n", - " 4.7,\n", - " 4.705,\n", - " 4.71,\n", - " 4.715,\n", - " 4.72,\n", - " 4.725,\n", - " 4.73,\n", - " 4.735,\n", - " 4.74,\n", - " 4.745,\n", - " 4.75,\n", - " 4.755,\n", - " 4.76,\n", - " 4.765,\n", - " 4.77,\n", - " 4.775,\n", - " 4.78,\n", - " 4.785,\n", - " 4.79,\n", - " 4.795,\n", - " 4.8,\n", - " 4.805,\n", - " 4.81,\n", - " 4.815,\n", - " 4.82,\n", - " 4.825,\n", - " 4.83,\n", - " 4.835,\n", - " 4.84,\n", - " 4.845,\n", - " 4.85,\n", - " 4.855,\n", - " 4.86,\n", - " 4.865,\n", - " 4.87,\n", - " 4.875,\n", - " 4.88,\n", - " 4.885,\n", - " 4.89,\n", - " 4.895,\n", - " 4.9,\n", - " 4.905,\n", - " 4.91,\n", - " 4.915,\n", - " 4.92,\n", - " 4.925,\n", - " 4.93,\n", - " 4.935,\n", - " 4.94,\n", - " 4.945,\n", - " 4.95,\n", - " 4.955,\n", - " 4.96,\n", - " 4.965,\n", - " 4.97,\n", - " 4.975,\n", - " 4.98,\n", - " 4.985,\n", - " 4.99,\n", - " 4.995,\n", - " ...]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "yoda", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.1.-1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat b/zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat deleted file mode 100644 index 81527249cd..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/ex_files/tsim.dat +++ /dev/null @@ -1,12001 +0,0 @@ - Time U Uh Ut V W u' v' w' u'w' u'v' v'w' TKE CTKE - 0.00 13.407 13.408 13.409 0.164 -0.158 1.295 0.164 -0.158 -0.204 0.212 -0.026 0.864 0.148 - 0.05 13.459 13.462 13.468 0.266 -0.419 1.346 0.266 -0.419 -0.564 0.359 -0.112 1.029 0.339 - 0.10 13.452 13.463 13.476 0.554 -0.583 1.339 0.554 -0.583 -0.781 0.742 -0.323 1.221 0.563 - 0.15 13.281 13.309 13.320 0.865 -0.523 1.169 0.865 -0.523 -0.611 1.011 -0.452 1.193 0.632 - 0.20 13.445 13.466 13.471 0.764 -0.334 1.332 0.764 -0.334 -0.445 1.018 -0.255 1.235 0.570 - 0.25 13.351 13.394 13.397 1.073 -0.260 1.238 1.073 -0.260 -0.321 1.329 -0.279 1.376 0.698 - 0.30 13.301 13.328 13.330 0.838 -0.245 1.189 0.838 -0.245 -0.291 0.996 -0.205 1.088 0.529 - 0.35 13.208 13.220 13.221 0.568 0.140 1.095 0.568 0.140 0.154 0.623 0.080 0.771 0.323 - 0.40 12.615 12.641 12.641 0.804 0.119 0.502 0.804 0.119 0.060 0.404 0.096 0.456 0.210 - 0.45 12.577 12.599 12.599 0.760 0.016 0.464 0.760 0.016 0.007 0.352 0.012 0.396 0.176 - 0.50 12.888 12.894 12.896 0.380 -0.258 0.775 0.380 -0.258 -0.200 0.295 -0.098 0.406 0.185 - 0.55 12.776 12.786 12.789 0.510 -0.292 0.663 0.510 -0.292 -0.193 0.338 -0.149 0.392 0.209 - 0.60 12.880 12.899 12.932 0.705 -0.924 0.767 0.705 -0.924 -0.709 0.541 -0.651 0.969 0.552 - 0.65 12.935 12.962 12.991 0.831 -0.870 0.822 0.831 -0.870 -0.715 0.683 -0.723 1.061 0.612 - 0.70 12.893 12.924 12.944 0.898 -0.721 0.780 0.898 -0.721 -0.562 0.700 -0.647 0.967 0.553 - 0.75 12.641 12.675 12.694 0.929 -0.693 0.528 0.929 -0.693 -0.366 0.491 -0.644 0.811 0.444 - 0.80 12.687 12.711 12.729 0.769 -0.686 0.574 0.769 -0.686 -0.394 0.442 -0.528 0.696 0.397 - 0.85 12.909 12.929 12.936 0.723 -0.409 0.796 0.723 -0.409 -0.326 0.576 -0.296 0.662 0.362 - 0.90 12.859 12.871 12.876 0.561 -0.362 0.746 0.561 -0.362 -0.270 0.419 -0.203 0.501 0.269 - 0.95 13.050 13.064 13.073 0.617 -0.469 0.937 0.617 -0.469 -0.439 0.579 -0.290 0.739 0.391 - 1.00 12.941 12.953 12.955 0.568 -0.211 0.828 0.568 -0.211 -0.174 0.470 -0.120 0.526 0.258 - 1.05 12.959 12.975 12.980 0.661 -0.337 0.846 0.661 -0.337 -0.285 0.559 -0.223 0.633 0.333 - 1.10 12.861 12.908 12.908 1.100 0.080 0.748 1.100 0.080 0.060 0.823 0.088 0.888 0.415 - 1.15 12.460 12.504 12.506 1.046 0.220 0.348 1.046 0.220 0.076 0.364 0.230 0.632 0.218 - 1.20 12.449 12.516 12.520 1.288 0.327 0.336 1.288 0.327 0.110 0.433 0.422 0.940 0.307 - 1.25 12.658 12.749 12.760 1.513 0.534 0.546 1.513 0.534 0.291 0.825 0.808 1.436 0.596 - 1.30 12.964 13.046 13.063 1.462 0.666 0.851 1.462 0.666 0.566 1.244 0.973 1.652 0.839 - 1.35 12.642 12.709 12.726 1.310 0.646 0.529 1.310 0.646 0.341 0.693 0.846 1.207 0.573 - 1.40 12.683 12.710 12.734 0.829 0.782 0.570 0.829 0.782 0.445 0.472 0.648 0.811 0.459 - 1.45 12.867 12.896 12.909 0.866 0.577 0.754 0.866 0.577 0.435 0.653 0.499 0.825 0.465 - 1.50 13.089 13.090 13.098 0.206 0.441 0.976 0.206 0.441 0.431 0.201 0.091 0.595 0.242 - 1.55 12.912 12.912 12.912 -0.089 0.045 0.799 -0.089 0.045 0.036 -0.071 -0.004 0.324 0.040 - 1.60 12.680 12.681 12.682 -0.120 -0.120 0.568 -0.120 -0.120 -0.068 -0.068 0.014 0.176 0.049 - 1.65 12.665 12.665 12.665 -0.005 0.014 0.552 -0.005 0.014 0.008 -0.003 -0.000 0.153 0.004 - 1.70 12.857 12.858 12.858 0.129 0.050 0.745 0.129 0.050 0.037 0.096 0.006 0.287 0.051 - 1.75 12.831 12.834 12.835 0.273 0.175 0.718 0.273 0.175 0.126 0.196 0.048 0.311 0.119 - 1.80 13.091 13.091 13.092 0.005 0.124 0.978 0.005 0.124 0.122 0.005 0.001 0.486 0.061 - 1.85 13.257 13.258 13.258 0.142 -0.077 1.144 0.142 -0.077 -0.089 0.162 -0.011 0.668 0.093 - 1.90 13.226 13.227 13.231 0.150 0.324 1.113 0.150 0.324 0.360 0.167 0.049 0.683 0.200 - 1.95 13.158 13.158 13.160 -0.041 0.237 1.045 -0.041 0.237 0.248 -0.043 -0.010 0.575 0.126 - 2.00 12.887 12.888 12.891 0.211 0.242 0.774 0.211 0.242 0.187 0.164 0.051 0.351 0.127 - 2.05 13.148 13.150 13.151 0.232 -0.145 1.035 0.232 -0.145 -0.150 0.241 -0.034 0.573 0.143 - 2.10 13.104 13.108 13.114 0.337 -0.378 0.991 0.337 -0.378 -0.374 0.334 -0.127 0.619 0.259 - 2.15 12.552 12.555 12.568 0.296 -0.576 0.439 0.296 -0.576 -0.253 0.130 -0.170 0.306 0.166 - 2.20 12.077 12.079 12.080 -0.179 -0.173 -0.036 -0.179 -0.173 0.006 0.006 0.031 0.032 0.016 - 2.25 11.861 11.861 11.862 -0.129 -0.111 -0.252 -0.129 -0.111 0.028 0.032 0.014 0.046 0.023 - 2.30 11.981 11.981 11.984 0.056 -0.255 -0.132 0.056 -0.255 0.034 -0.007 -0.014 0.043 0.019 - 2.35 11.905 11.908 11.909 0.277 -0.150 -0.208 0.277 -0.150 0.031 -0.058 -0.041 0.071 0.039 - 2.40 11.879 11.895 11.896 0.618 0.154 -0.234 0.618 0.154 -0.036 -0.144 0.095 0.230 0.088 - 2.45 12.078 12.097 12.098 0.679 0.138 -0.035 0.679 0.138 -0.005 -0.024 0.093 0.241 0.048 - 2.50 12.120 12.155 12.158 0.931 -0.232 0.007 0.931 -0.232 -0.002 0.006 -0.216 0.461 0.108 - 2.55 12.114 12.135 12.136 0.721 -0.134 0.001 0.721 -0.134 -0.000 0.001 -0.097 0.269 0.048 - 2.60 12.084 12.093 12.094 0.466 -0.175 -0.029 0.466 -0.175 0.005 -0.014 -0.081 0.124 0.041 - 2.65 12.256 12.263 12.273 0.392 -0.510 0.143 0.392 -0.510 -0.073 0.056 -0.200 0.217 0.110 - 2.70 12.138 12.144 12.159 0.369 -0.616 0.025 0.369 -0.616 -0.016 0.009 -0.227 0.258 0.114 - 2.75 12.124 12.126 12.128 0.255 -0.177 0.011 0.255 -0.177 -0.002 0.003 -0.045 0.048 0.023 - 2.80 11.984 11.985 11.988 0.186 -0.241 -0.129 0.186 -0.241 0.031 -0.024 -0.045 0.055 0.030 - 2.85 12.065 12.066 12.066 0.136 -0.146 -0.048 0.136 -0.146 0.007 -0.007 -0.020 0.021 0.011 - 2.90 11.901 11.902 11.904 0.124 -0.241 -0.212 0.124 -0.241 0.051 -0.026 -0.030 0.059 0.032 - 2.95 11.809 11.814 11.814 0.339 0.066 -0.304 0.339 0.066 -0.020 -0.103 0.022 0.106 0.054 - 3.00 11.952 11.953 11.953 0.147 -0.106 -0.161 0.147 -0.106 0.017 -0.024 -0.016 0.030 0.017 - 3.05 12.044 12.044 12.055 0.010 0.500 -0.068 0.010 0.500 -0.034 -0.001 0.005 0.128 0.017 - 3.10 12.139 12.141 12.144 -0.193 0.263 0.026 -0.193 0.263 0.007 -0.005 -0.051 0.054 0.026 - 3.15 12.246 12.246 12.257 -0.032 0.532 0.133 -0.032 0.532 0.071 -0.004 -0.017 0.151 0.036 - 3.20 12.393 12.395 12.424 0.178 0.862 0.280 0.178 0.862 0.242 0.050 0.153 0.427 0.145 - 3.25 12.098 12.098 12.132 0.036 0.915 -0.015 0.036 0.915 -0.014 -0.001 0.033 0.420 0.018 - 3.30 11.961 11.964 12.005 -0.300 0.985 -0.152 -0.300 0.985 -0.150 0.046 -0.296 0.542 0.167 - 3.35 11.881 11.881 11.921 -0.020 0.980 -0.232 -0.020 0.980 -0.228 0.005 -0.019 0.508 0.114 - 3.40 11.900 11.900 11.936 -0.125 0.923 -0.213 -0.125 0.923 -0.197 0.027 -0.115 0.457 0.115 - 3.45 12.125 12.126 12.161 -0.132 0.932 0.012 -0.132 0.932 0.011 -0.002 -0.123 0.443 0.062 - 3.50 12.100 12.101 12.163 -0.174 1.229 -0.013 -0.174 1.229 -0.016 0.002 -0.214 0.770 0.107 - 3.55 11.981 11.988 12.038 -0.431 1.090 -0.132 -0.431 1.090 -0.144 0.057 -0.469 0.695 0.247 - 3.60 12.118 12.118 12.154 -0.131 0.930 0.005 -0.131 0.930 0.004 -0.001 -0.122 0.441 0.061 - 3.65 12.148 12.149 12.193 -0.151 1.032 0.036 -0.151 1.032 0.037 -0.005 -0.156 0.544 0.080 - 3.70 12.233 12.233 12.272 -0.027 0.984 0.120 -0.027 0.984 0.118 -0.003 -0.026 0.492 0.061 - 3.75 12.541 12.541 12.570 0.087 0.854 0.428 0.087 0.854 0.365 0.037 0.074 0.460 0.187 - 3.80 12.402 12.403 12.431 0.113 0.845 0.289 0.113 0.845 0.244 0.033 0.095 0.405 0.132 - 3.85 12.188 12.188 12.204 0.095 0.608 0.075 0.095 0.608 0.046 0.007 0.058 0.192 0.037 - 3.90 12.007 12.007 12.015 0.107 0.438 -0.106 0.107 0.438 -0.046 -0.011 0.047 0.107 0.034 - 3.95 11.915 11.915 11.928 -0.038 0.550 -0.197 -0.038 0.550 -0.109 0.008 -0.021 0.172 0.055 - 4.00 11.962 11.963 11.972 0.095 0.469 -0.150 0.095 0.469 -0.071 -0.014 0.045 0.126 0.042 - 4.05 12.224 12.228 12.237 -0.329 0.448 0.111 -0.329 0.448 0.050 -0.037 -0.147 0.161 0.080 - 4.10 12.280 12.291 12.306 -0.529 0.594 0.167 -0.529 0.594 0.099 -0.088 -0.314 0.330 0.171 - 4.15 12.202 12.205 12.212 -0.234 0.434 0.090 -0.234 0.434 0.039 -0.021 -0.102 0.126 0.055 - 4.20 11.876 11.876 11.885 -0.029 0.453 -0.237 -0.029 0.453 -0.107 0.007 -0.013 0.131 0.054 - 4.25 11.894 11.895 11.905 0.171 0.477 -0.219 0.171 0.477 -0.104 -0.037 0.082 0.152 0.069 - 4.30 11.960 11.962 11.969 0.222 0.422 -0.153 0.222 0.422 -0.065 -0.034 0.094 0.125 0.059 - 4.35 12.152 12.155 12.156 0.256 0.189 0.039 0.256 0.189 0.007 0.010 0.048 0.051 0.025 - 4.40 12.233 12.234 12.234 0.136 -0.013 0.120 0.136 -0.013 -0.002 0.016 -0.002 0.017 0.008 - 4.45 11.882 11.884 11.884 0.198 -0.012 -0.231 0.198 -0.012 0.003 -0.046 -0.002 0.046 0.023 - 4.50 11.987 11.987 11.987 0.022 -0.058 -0.126 0.022 -0.058 0.007 -0.003 -0.001 0.010 0.004 - 4.55 12.099 12.104 12.109 -0.343 0.339 -0.013 -0.343 0.339 -0.005 0.005 -0.116 0.116 0.058 - 4.60 12.318 12.321 12.325 -0.264 0.299 0.205 -0.264 0.299 0.061 -0.054 -0.079 0.101 0.057 - 4.65 11.937 11.940 11.956 -0.271 0.617 -0.176 -0.271 0.617 -0.109 0.048 -0.167 0.242 0.102 - 4.70 11.668 11.671 11.704 -0.256 0.882 -0.445 -0.256 0.882 -0.392 0.114 -0.226 0.521 0.233 - 4.75 11.792 11.800 11.823 -0.448 0.731 -0.321 -0.448 0.731 -0.235 0.144 -0.328 0.419 0.214 - 4.80 11.723 11.729 11.737 -0.381 0.433 -0.390 -0.381 0.433 -0.169 0.148 -0.165 0.242 0.139 - 4.85 11.713 11.714 11.722 -0.165 0.438 -0.400 -0.165 0.438 -0.175 0.066 -0.072 0.189 0.100 - 4.90 11.459 11.460 11.473 0.099 0.545 -0.653 0.099 0.545 -0.356 -0.065 0.054 0.367 0.183 - 4.95 11.735 11.735 11.747 -0.097 0.528 -0.378 -0.097 0.528 -0.200 0.037 -0.051 0.216 0.105 - 5.00 11.466 11.469 11.473 0.251 0.308 -0.647 0.251 0.308 -0.199 -0.162 0.077 0.288 0.134 - 5.05 11.104 11.105 11.116 0.141 0.496 -1.009 0.141 0.496 -0.500 -0.142 0.070 0.641 0.262 - 5.10 11.085 11.085 11.086 -0.048 0.142 -1.028 -0.048 0.142 -0.146 0.050 -0.007 0.539 0.077 - 5.15 11.021 11.026 11.026 -0.310 -0.100 -1.092 -0.310 -0.100 0.109 0.338 0.031 0.649 0.178 - 5.20 10.690 10.698 10.701 -0.414 -0.271 -1.423 -0.414 -0.271 0.385 0.589 0.112 1.135 0.356 - 5.25 10.479 10.479 10.479 -0.067 0.084 -1.634 -0.067 0.084 -0.138 0.109 -0.006 1.341 0.088 - 5.30 10.750 10.750 10.751 -0.131 0.114 -1.363 -0.131 0.114 -0.155 0.179 -0.015 0.944 0.119 - 5.35 10.804 10.806 10.808 -0.191 0.217 -1.308 -0.191 0.217 -0.283 0.250 -0.041 0.898 0.190 - 5.40 10.742 10.746 10.749 -0.276 0.248 -1.371 -0.276 0.248 -0.340 0.379 -0.068 1.008 0.257 - 5.45 10.857 10.861 10.863 -0.301 0.159 -1.256 -0.301 0.159 -0.200 0.378 -0.048 0.846 0.215 - 5.50 10.910 10.926 10.926 -0.590 -0.036 -1.203 -0.590 -0.036 0.043 0.710 0.021 0.898 0.356 - 5.55 10.984 10.987 10.992 -0.267 -0.327 -1.129 -0.267 -0.327 0.369 0.301 0.087 0.726 0.242 - 5.60 11.195 11.195 11.195 -0.143 0.017 -0.918 -0.143 0.017 -0.016 0.131 -0.002 0.432 0.066 - 5.65 11.028 11.028 11.029 0.015 0.177 -1.085 0.015 0.177 -0.192 -0.017 0.003 0.604 0.096 - 5.70 10.832 10.832 10.848 0.052 0.588 -1.281 0.052 0.588 -0.753 -0.067 0.031 0.995 0.378 - 5.75 11.050 11.051 11.054 0.171 0.238 -1.063 0.171 0.238 -0.253 -0.181 0.041 0.608 0.157 - 5.80 11.073 11.078 11.085 0.329 0.369 -1.039 0.329 0.369 -0.384 -0.342 0.122 0.663 0.264 - 5.85 10.713 10.713 10.725 -0.066 0.493 -1.400 -0.066 0.493 -0.691 0.092 -0.032 1.104 0.349 - 5.90 10.802 10.802 10.815 0.054 0.519 -1.311 0.054 0.519 -0.680 -0.071 0.028 0.995 0.342 - 5.95 10.612 10.613 10.626 0.178 0.517 -1.501 0.178 0.517 -0.775 -0.267 0.092 1.276 0.413 - 6.00 10.583 10.584 10.602 0.158 0.616 -1.530 0.158 0.616 -0.943 -0.241 0.097 1.373 0.489 - 6.05 10.148 10.151 10.177 0.263 0.729 -1.965 0.263 0.729 -1.432 -0.517 0.192 2.231 0.767 - 6.10 10.435 10.436 10.444 0.107 0.419 -1.678 0.107 0.419 -0.703 -0.179 0.045 1.501 0.364 - 6.15 10.487 10.489 10.506 0.204 0.598 -1.626 0.204 0.598 -0.972 -0.331 0.122 1.521 0.517 - 6.20 10.096 10.096 10.113 -0.008 0.588 -2.017 -0.008 0.588 -1.186 0.017 -0.005 2.207 0.593 - 6.25 10.066 10.068 10.074 0.162 0.374 -2.047 0.162 0.374 -0.764 -0.332 0.061 2.177 0.418 - 6.30 10.354 10.355 10.361 -0.160 0.344 -1.759 -0.160 0.344 -0.604 0.281 -0.055 1.618 0.334 - 6.35 10.233 10.235 10.244 -0.231 0.425 -1.880 -0.231 0.425 -0.800 0.434 -0.098 1.885 0.458 - 6.40 10.286 10.290 10.292 -0.288 0.237 -1.827 -0.288 0.237 -0.433 0.527 -0.068 1.739 0.343 - 6.45 10.173 10.185 10.187 -0.487 0.190 -1.939 -0.487 0.190 -0.368 0.944 -0.092 2.017 0.509 - 6.50 10.043 10.052 10.053 -0.431 0.137 -2.070 -0.431 0.137 -0.284 0.892 -0.059 2.245 0.469 - 6.55 10.264 10.277 10.281 -0.506 0.301 -1.849 -0.506 0.301 -0.556 0.936 -0.152 1.882 0.550 - 6.60 10.014 10.052 10.056 -0.863 0.283 -2.098 -0.863 0.283 -0.594 1.812 -0.244 2.614 0.961 - 6.65 9.838 9.915 9.915 -1.231 0.060 -2.274 -1.231 0.060 -0.137 2.801 -0.074 3.346 1.403 - 6.70 9.860 9.931 9.931 -1.181 0.041 -2.253 -1.181 0.041 -0.091 2.661 -0.048 3.236 1.331 - 6.75 9.926 9.989 9.989 -1.115 0.000 -2.187 -1.115 0.000 -0.000 2.438 -0.000 3.012 1.219 - 6.80 10.129 10.172 10.172 -0.928 0.105 -1.983 -0.928 0.105 -0.207 1.841 -0.097 2.403 0.928 - 6.85 10.015 10.067 10.071 -1.023 0.285 -2.098 -1.023 0.285 -0.597 2.146 -0.291 2.765 1.123 - 6.90 9.975 10.014 10.016 -0.882 0.203 -2.138 -0.882 0.203 -0.434 1.885 -0.179 2.695 0.972 - 6.95 10.395 10.434 10.434 -0.901 0.013 -1.718 -0.901 0.013 -0.022 1.549 -0.012 1.883 0.775 - 7.00 10.415 10.455 10.455 -0.914 -0.021 -1.697 -0.914 -0.021 0.036 1.551 0.020 1.858 0.776 - 7.05 10.647 10.675 10.677 -0.767 -0.206 -1.466 -0.767 -0.206 0.302 1.124 0.158 1.390 0.587 - 7.10 10.478 10.529 10.538 -1.031 -0.436 -1.634 -1.031 -0.436 0.712 1.685 0.449 1.962 0.942 - 7.15 10.616 10.645 10.671 -0.780 -0.747 -1.497 -0.780 -0.747 1.119 1.167 0.583 1.703 0.859 - 7.20 10.418 10.469 10.510 -1.036 -0.921 -1.695 -1.036 -0.921 1.562 1.757 0.955 2.398 1.268 - 7.25 10.173 10.219 10.271 -0.970 -1.033 -1.940 -0.970 -1.033 2.004 1.881 1.002 2.885 1.463 - 7.30 10.419 10.454 10.471 -0.849 -0.601 -1.694 -0.849 -0.601 1.019 1.438 0.511 1.976 0.918 - 7.35 10.485 10.516 10.535 -0.807 -0.632 -1.628 -0.807 -0.632 1.029 1.314 0.510 1.851 0.873 - 7.40 10.185 10.215 10.236 -0.783 -0.652 -1.928 -0.783 -0.652 1.257 1.509 0.510 2.377 1.015 - 7.45 10.153 10.166 10.198 -0.525 -0.798 -1.960 -0.525 -0.798 1.565 1.030 0.419 2.378 0.960 - 7.50 10.237 10.284 10.340 -0.984 -1.075 -1.876 -0.984 -1.075 2.018 1.846 1.058 2.822 1.466 - 7.55 10.021 10.090 10.121 -1.177 -0.798 -2.092 -1.177 -0.798 1.668 2.463 0.939 3.199 1.560 - 7.60 9.976 10.037 10.076 -1.103 -0.885 -2.137 -1.103 -0.885 1.892 2.357 0.977 3.283 1.588 - 7.65 10.177 10.229 10.247 -1.022 -0.617 -1.935 -1.022 -0.617 1.194 1.979 0.631 2.586 1.198 - 7.70 10.059 10.098 10.099 -0.889 -0.164 -2.054 -0.889 -0.164 0.337 1.825 0.146 2.517 0.931 - 7.75 9.889 9.950 9.953 -1.102 -0.235 -2.224 -1.102 -0.235 0.522 2.451 0.259 3.108 1.260 - 7.80 10.119 10.154 10.167 -0.834 -0.527 -1.993 -0.834 -0.527 1.050 1.662 0.439 2.473 1.007 - 7.85 10.005 10.111 10.119 -1.460 -0.397 -2.108 -1.460 -0.397 0.838 3.078 0.580 3.367 1.621 - 7.90 10.043 10.121 10.128 -1.250 -0.382 -2.070 -1.250 -0.382 0.791 2.587 0.477 2.996 1.373 - 7.95 10.160 10.229 10.245 -1.185 -0.565 -1.953 -1.185 -0.565 1.102 2.314 0.669 2.768 1.324 - 8.00 10.203 10.258 10.272 -1.062 -0.543 -1.910 -1.062 -0.543 1.038 2.029 0.577 2.536 1.176 - 8.05 10.577 10.631 10.652 -1.065 -0.675 -1.536 -1.065 -0.675 1.037 1.636 0.719 1.974 1.033 - 8.10 10.602 10.697 10.712 -1.426 -0.558 -1.511 -1.426 -0.558 0.843 2.154 0.795 2.313 1.223 - 8.15 10.551 10.633 10.647 -1.315 -0.552 -1.562 -1.315 -0.552 0.863 2.053 0.726 2.236 1.171 - 8.20 10.901 10.953 10.979 -1.064 -0.765 -1.212 -1.064 -0.765 0.927 1.289 0.814 1.593 0.892 - 8.25 10.981 11.012 11.060 -0.835 -1.025 -1.132 -0.835 -1.025 1.160 0.945 0.856 1.515 0.862 - 8.30 10.948 10.975 11.013 -0.770 -0.916 -1.165 -0.770 -0.916 1.067 0.896 0.705 1.394 0.781 - 8.35 11.236 11.255 11.276 -0.658 -0.683 -0.877 -0.658 -0.683 0.599 0.577 0.450 0.835 0.473 - 8.40 11.418 11.459 11.493 -0.967 -0.889 -0.695 -0.967 -0.889 0.618 0.672 0.859 1.104 0.627 - 8.45 11.428 11.468 11.521 -0.958 -1.103 -0.685 -0.958 -1.103 0.755 0.656 1.056 1.301 0.727 - 8.50 11.355 11.399 11.451 -1.009 -1.089 -0.758 -1.009 -1.089 0.825 0.765 1.098 1.389 0.786 - 8.55 11.422 11.437 11.492 -0.592 -1.117 -0.691 -0.592 -1.117 0.771 0.409 0.661 1.037 0.547 - 8.60 11.475 11.486 11.534 -0.490 -1.058 -0.637 -0.490 -1.058 0.675 0.312 0.519 0.883 0.453 - 8.65 11.239 11.251 11.329 -0.519 -1.331 -0.874 -0.519 -1.331 1.163 0.453 0.690 1.402 0.713 - 8.70 11.343 11.353 11.382 -0.480 -0.807 -0.770 -0.480 -0.807 0.621 0.369 0.387 0.737 0.410 - 8.75 11.286 11.318 11.343 -0.850 -0.752 -0.827 -0.850 -0.752 0.622 0.703 0.639 0.986 0.568 - 8.80 11.306 11.341 11.355 -0.890 -0.562 -0.807 -0.890 -0.562 0.453 0.718 0.500 0.880 0.493 - 8.85 11.029 11.091 11.093 -1.179 -0.172 -1.084 -1.179 -0.172 0.186 1.278 0.202 1.297 0.653 - 8.90 11.025 11.072 11.072 -1.025 0.024 -1.088 -1.025 0.024 -0.027 1.115 -0.025 1.117 0.558 - 8.95 11.132 11.147 11.157 -0.595 -0.450 -0.981 -0.595 -0.450 0.441 0.584 0.267 0.759 0.389 - 9.00 11.214 11.233 11.238 -0.642 -0.352 -0.898 -0.642 -0.352 0.316 0.577 0.226 0.672 0.348 - 9.05 10.971 10.985 10.986 -0.552 -0.156 -1.142 -0.552 -0.156 0.178 0.631 0.086 0.816 0.330 - 9.10 10.950 10.971 10.972 -0.682 -0.107 -1.163 -0.682 -0.107 0.124 0.793 0.073 0.914 0.403 - 9.15 10.629 10.659 10.662 -0.796 0.258 -1.484 -0.796 0.258 -0.382 1.180 -0.205 1.450 0.629 - 9.20 10.348 10.378 10.380 -0.795 0.209 -1.765 -0.795 0.209 -0.368 1.403 -0.166 1.895 0.730 - 9.25 10.407 10.441 10.442 -0.844 -0.112 -1.706 -0.844 -0.112 0.190 1.440 0.094 1.817 0.728 - 9.30 10.463 10.485 10.491 -0.687 -0.354 -1.650 -0.687 -0.354 0.583 1.133 0.243 1.660 0.649 - 9.35 10.470 10.488 10.492 -0.604 -0.293 -1.643 -0.604 -0.293 0.481 0.992 0.177 1.574 0.558 - 9.40 10.765 10.798 10.798 -0.840 -0.065 -1.348 -0.840 -0.065 0.087 1.132 0.054 1.263 0.568 - 9.45 10.986 11.017 11.020 -0.815 -0.277 -1.126 -0.815 -0.277 0.312 0.918 0.226 1.005 0.498 - 9.50 11.132 11.170 11.170 -0.919 -0.075 -0.981 -0.919 -0.075 0.074 0.901 0.069 0.905 0.453 - 9.55 11.181 11.224 11.225 -0.988 -0.155 -0.932 -0.988 -0.155 0.144 0.921 0.153 0.935 0.472 - 9.60 10.814 10.841 10.843 -0.772 -0.217 -1.299 -0.772 -0.217 0.282 1.003 0.167 1.165 0.527 - 9.65 10.573 10.619 10.619 -0.995 -0.072 -1.540 -0.995 -0.072 0.111 1.532 0.072 1.683 0.769 - 9.70 10.058 10.129 10.129 -1.197 0.138 -2.055 -1.197 0.138 -0.283 2.460 -0.165 2.838 1.241 - 9.75 10.072 10.128 10.131 -1.061 0.258 -2.041 -1.061 0.258 -0.527 2.166 -0.274 2.679 1.123 - 9.80 10.251 10.319 10.322 -1.185 0.235 -1.862 -1.185 0.235 -0.438 2.207 -0.279 2.464 1.134 - 9.85 10.264 10.326 10.327 -1.128 -0.142 -1.849 -1.128 -0.142 0.262 2.086 0.160 2.355 1.054 - 9.90 10.342 10.373 10.373 -0.801 -0.141 -1.771 -0.801 -0.141 0.250 1.419 0.113 1.900 0.723 - 9.95 10.269 10.294 10.299 -0.712 0.332 -1.844 -0.712 0.332 -0.613 1.313 -0.237 2.009 0.734 - 10.00 10.256 10.298 10.301 -0.929 0.225 -1.857 -0.929 0.225 -0.418 1.725 -0.209 2.181 0.894 - 10.05 10.468 10.512 10.514 -0.957 0.210 -1.644 -0.957 0.210 -0.346 1.573 -0.201 1.832 0.812 - 10.10 10.860 10.901 10.901 -0.938 -0.088 -1.253 -0.938 -0.088 0.110 1.175 0.083 1.228 0.592 - 10.15 10.790 10.807 10.810 -0.605 0.293 -1.323 -0.605 0.293 -0.387 0.800 -0.177 1.101 0.453 - 10.20 10.805 10.822 10.839 -0.613 0.596 -1.308 -0.613 0.596 -0.779 0.802 -0.365 1.221 0.588 - 10.25 11.078 11.091 11.103 -0.540 0.525 -1.035 -0.540 0.525 -0.544 0.559 -0.284 0.820 0.415 - 10.30 11.062 11.068 11.088 -0.372 0.660 -1.051 -0.372 0.660 -0.694 0.390 -0.245 0.839 0.416 - 10.35 11.162 11.169 11.201 -0.386 0.846 -0.950 -0.386 0.846 -0.804 0.367 -0.326 0.884 0.471 - 10.40 11.230 11.238 11.260 -0.433 0.705 -0.883 -0.433 0.705 -0.622 0.383 -0.305 0.732 0.396 - 10.45 11.315 11.319 11.345 -0.295 0.776 -0.798 -0.295 0.776 -0.619 0.236 -0.229 0.663 0.351 - 10.50 11.528 11.540 11.563 -0.521 0.726 -0.585 -0.521 0.726 -0.425 0.305 -0.379 0.570 0.323 - 10.55 11.099 11.108 11.119 -0.448 0.490 -1.014 -0.448 0.490 -0.496 0.454 -0.219 0.734 0.354 - 10.60 11.273 11.276 11.293 -0.281 0.618 -0.840 -0.281 0.618 -0.519 0.236 -0.174 0.584 0.298 - 10.65 11.336 11.340 11.364 -0.324 0.736 -0.777 -0.324 0.736 -0.572 0.252 -0.238 0.625 0.334 - 10.70 11.054 11.063 11.079 -0.453 0.584 -1.059 -0.453 0.584 -0.619 0.480 -0.265 0.834 0.413 - 10.75 11.416 11.417 11.418 -0.154 -0.107 -0.697 -0.154 -0.107 0.074 0.108 0.016 0.260 0.066 - 10.80 11.331 11.332 11.332 0.024 -0.109 -0.781 0.024 -0.109 0.085 -0.019 -0.003 0.311 0.044 - 10.85 11.032 11.032 11.033 0.031 0.123 -1.080 0.031 0.123 -0.133 -0.034 0.004 0.592 0.069 - 10.90 11.207 11.208 11.210 -0.182 0.179 -0.906 -0.182 0.179 -0.162 0.165 -0.033 0.443 0.117 - 10.95 11.620 11.620 11.622 -0.018 0.227 -0.493 -0.018 0.227 -0.112 0.009 -0.004 0.148 0.056 - 11.00 11.616 11.616 11.617 0.042 0.153 -0.496 0.042 0.153 -0.076 -0.021 0.006 0.136 0.040 - 11.05 11.584 11.587 11.587 -0.248 -0.002 -0.528 -0.248 -0.002 0.001 0.131 0.000 0.170 0.065 - 11.10 11.559 11.562 11.562 -0.257 0.074 -0.554 -0.257 0.074 -0.041 0.142 -0.019 0.189 0.075 - 11.15 11.582 11.585 11.585 -0.252 0.001 -0.530 -0.252 0.001 -0.000 0.134 -0.000 0.173 0.067 - 11.20 11.445 11.446 11.446 0.039 -0.101 -0.667 0.039 -0.101 0.068 -0.026 -0.004 0.229 0.036 - 11.25 11.274 11.274 11.275 0.056 0.197 -0.839 0.056 0.197 -0.166 -0.047 0.011 0.373 0.086 - 11.30 11.160 11.163 11.164 -0.267 0.148 -0.953 -0.267 0.148 -0.141 0.254 -0.039 0.501 0.147 - 11.35 11.121 11.123 11.123 -0.198 -0.030 -0.992 -0.198 -0.030 0.030 0.197 0.006 0.512 0.100 - 11.40 11.307 11.317 11.318 -0.488 0.123 -0.806 -0.488 0.123 -0.099 0.394 -0.060 0.452 0.205 - 11.45 10.958 10.974 10.976 -0.583 0.209 -1.154 -0.583 0.209 -0.241 0.673 -0.122 0.858 0.363 - 11.50 10.680 10.703 10.704 -0.697 -0.106 -1.433 -0.697 -0.106 0.151 0.999 0.074 1.275 0.507 - 11.55 10.691 10.699 10.701 -0.423 -0.218 -1.422 -0.423 -0.218 0.310 0.602 0.092 1.124 0.342 - 11.60 10.613 10.621 10.622 -0.419 0.165 -1.500 -0.419 0.165 -0.248 0.628 -0.069 1.227 0.340 - 11.65 10.409 10.413 10.413 -0.311 -0.012 -1.704 -0.311 -0.012 0.020 0.530 0.004 1.500 0.265 - 11.70 10.363 10.378 10.378 -0.558 -0.063 -1.750 -0.558 -0.063 0.110 0.977 0.035 1.689 0.492 - 11.75 10.499 10.512 10.513 -0.521 0.135 -1.614 -0.521 0.135 -0.218 0.841 -0.071 1.447 0.436 - 11.80 10.543 10.552 10.553 -0.448 0.154 -1.570 -0.448 0.154 -0.241 0.704 -0.069 1.345 0.373 - 11.85 10.723 10.738 10.739 -0.569 -0.155 -1.390 -0.569 -0.155 0.216 0.791 0.088 1.140 0.413 - 11.90 10.563 10.589 10.589 -0.737 0.089 -1.550 -0.737 0.089 -0.137 1.143 -0.065 1.477 0.576 - 11.95 10.760 10.780 10.797 -0.650 0.616 -1.353 -0.650 0.616 -0.834 0.879 -0.400 1.316 0.638 - 12.00 11.053 11.092 11.100 -0.927 0.423 -1.060 -0.927 0.423 -0.449 0.982 -0.392 1.081 0.574 - 12.05 11.391 11.429 11.431 -0.926 0.203 -0.722 -0.926 0.203 -0.147 0.668 -0.188 0.710 0.355 - 12.10 11.438 11.478 11.483 -0.953 0.340 -0.675 -0.953 0.340 -0.229 0.643 -0.324 0.739 0.378 - 12.15 11.359 11.415 11.421 -1.131 0.359 -0.754 -1.131 0.359 -0.270 0.853 -0.406 0.988 0.491 - 12.20 11.317 11.366 11.374 -1.058 0.411 -0.796 -1.058 0.411 -0.327 0.842 -0.435 0.961 0.501 - 12.25 11.351 11.370 11.380 -0.659 0.489 -0.762 -0.659 0.489 -0.372 0.502 -0.322 0.627 0.352 - 12.30 11.533 11.545 11.555 -0.508 0.497 -0.579 -0.508 0.497 -0.288 0.294 -0.252 0.420 0.241 - 12.35 11.242 11.243 11.246 0.107 0.252 -0.871 0.107 0.252 -0.219 -0.093 0.027 0.416 0.120 - 12.40 10.979 10.981 10.981 0.179 0.064 -1.133 0.179 0.064 -0.073 -0.203 0.012 0.660 0.108 - 12.45 10.970 10.973 10.976 -0.251 0.267 -1.143 -0.251 0.267 -0.305 0.286 -0.067 0.720 0.212 - 12.50 10.406 10.411 10.412 -0.324 0.170 -1.707 -0.324 0.170 -0.291 0.553 -0.055 1.524 0.314 - 12.55 10.232 10.233 10.239 -0.143 0.338 -1.881 -0.143 0.338 -0.635 0.270 -0.048 1.835 0.346 - 12.60 10.246 10.247 10.249 0.165 0.194 -1.867 0.165 0.194 -0.363 -0.308 0.032 1.775 0.239 - 12.65 10.387 10.389 10.395 0.193 0.350 -1.726 0.193 0.350 -0.603 -0.332 0.067 1.568 0.346 - 12.70 10.244 10.247 10.256 0.242 0.435 -1.869 0.242 0.435 -0.813 -0.452 0.105 1.871 0.468 - 12.75 10.215 10.217 10.252 0.165 0.852 -1.897 0.165 0.852 -1.617 -0.314 0.141 2.177 0.827 - 12.80 10.279 10.285 10.346 0.364 1.119 -1.834 0.364 1.119 -2.053 -0.668 0.408 2.374 1.098 - 12.85 10.300 10.307 10.420 0.383 1.526 -1.813 0.383 1.526 -2.766 -0.694 0.584 2.880 1.455 - 12.90 10.065 10.068 10.138 0.240 1.190 -2.048 0.240 1.190 -2.438 -0.492 0.286 2.834 1.252 - 12.95 10.004 10.006 10.041 0.198 0.842 -2.109 0.198 0.842 -1.775 -0.417 0.166 2.598 0.915 - 13.00 10.453 10.455 10.473 0.194 0.612 -1.660 0.194 0.612 -1.016 -0.322 0.119 1.584 0.536 - 13.05 10.713 10.732 10.754 0.641 0.696 -1.400 0.641 0.696 -0.975 -0.897 0.446 1.428 0.699 - 13.10 10.598 10.637 10.660 0.906 0.707 -1.515 0.906 0.707 -1.071 -1.372 0.641 1.808 0.928 - 13.15 10.729 10.775 10.808 0.993 0.841 -1.384 0.993 0.841 -1.164 -1.374 0.835 1.804 0.993 - 13.20 10.487 10.548 10.596 1.128 1.009 -1.626 1.128 1.009 -1.640 -1.834 1.138 2.467 1.355 - 13.25 10.391 10.435 10.494 0.963 1.111 -1.722 0.963 1.111 -1.912 -1.658 1.070 2.563 1.374 - 13.30 10.287 10.313 10.406 0.733 1.385 -1.826 0.733 1.385 -2.529 -1.338 1.015 2.895 1.518 - 13.35 10.478 10.514 10.577 0.858 1.158 -1.634 0.858 1.158 -1.893 -1.403 0.994 2.375 1.279 - 13.40 11.119 11.138 11.202 0.654 1.196 -0.994 0.654 1.196 -1.188 -0.650 0.782 1.423 0.782 - 13.45 11.024 11.044 11.111 0.653 1.219 -1.089 0.653 1.219 -1.327 -0.711 0.797 1.550 0.852 - 13.50 10.900 10.961 11.022 1.148 1.156 -1.212 1.148 1.156 -1.401 -1.392 1.327 2.062 1.190 - 13.55 11.242 11.260 11.300 0.631 0.949 -0.870 0.631 0.949 -0.826 -0.549 0.599 1.028 0.579 - 13.60 11.132 11.141 11.177 0.436 0.900 -0.981 0.436 0.900 -0.883 -0.427 0.392 0.981 0.528 - 13.65 11.251 11.259 11.277 0.430 0.640 -0.862 0.430 0.640 -0.552 -0.371 0.275 0.669 0.360 - 13.70 11.261 11.266 11.280 0.339 0.554 -0.852 0.339 0.554 -0.472 -0.288 0.188 0.574 0.292 - 13.75 11.087 11.107 11.127 0.668 0.660 -1.025 0.668 0.660 -0.677 -0.685 0.441 0.967 0.530 - 13.80 11.061 11.068 11.087 0.399 0.642 -1.052 0.399 0.642 -0.676 -0.420 0.256 0.839 0.418 - 13.85 11.160 11.168 11.186 0.403 0.641 -0.953 0.403 0.641 -0.611 -0.384 0.259 0.741 0.383 - 13.90 11.390 11.412 11.432 0.702 0.677 -0.723 0.702 0.677 -0.489 -0.507 0.475 0.737 0.425 - 13.95 11.274 11.304 11.310 0.821 0.363 -0.838 0.821 0.363 -0.305 -0.689 0.298 0.755 0.405 - 14.00 11.150 11.191 11.220 0.959 0.797 -0.963 0.959 0.797 -0.767 -0.923 0.764 1.241 0.711 - 14.05 11.019 11.080 11.114 1.167 0.862 -1.094 1.167 0.862 -0.943 -1.277 1.005 1.650 0.939 - 14.10 11.031 11.095 11.098 1.190 0.293 -1.082 1.190 0.293 -0.317 -1.288 0.349 1.337 0.686 - 14.15 10.722 10.837 10.842 1.579 0.327 -1.391 1.579 0.327 -0.455 -2.197 0.516 2.268 1.151 - 14.20 10.827 10.907 10.919 1.317 0.530 -1.286 1.317 0.530 -0.681 -1.694 0.698 1.835 0.977 - 14.25 10.941 11.017 11.019 1.290 0.212 -1.172 1.290 0.212 -0.249 -1.511 0.274 1.541 0.778 - 14.30 11.321 11.403 11.407 1.366 0.291 -0.792 1.366 0.291 -0.231 -1.082 0.398 1.289 0.588 - 14.35 11.528 11.577 11.577 1.057 0.084 -0.584 1.057 0.084 -0.049 -0.618 0.089 0.733 0.313 - 14.40 11.368 11.431 11.441 1.201 0.463 -0.745 1.201 0.463 -0.345 -0.895 0.556 1.106 0.554 - 14.45 11.553 11.595 11.621 0.990 0.780 -0.560 0.990 0.780 -0.437 -0.554 0.772 0.951 0.523 - 14.50 11.377 11.395 11.444 0.644 1.060 -0.736 0.644 1.060 -0.780 -0.474 0.683 1.040 0.570 - 14.55 11.178 11.181 11.235 0.292 1.099 -0.935 0.292 1.099 -1.028 -0.273 0.321 1.084 0.555 - 14.60 11.205 11.220 11.259 0.595 0.927 -0.908 0.595 0.927 -0.842 -0.540 0.551 1.019 0.571 - 14.65 11.002 11.008 11.061 0.359 1.084 -1.110 0.359 1.084 -1.203 -0.398 0.389 1.268 0.663 - 14.70 10.991 11.002 11.073 0.474 1.253 -1.121 0.474 1.253 -1.406 -0.531 0.594 1.527 0.808 - 14.75 11.115 11.127 11.165 0.505 0.922 -0.997 0.505 0.922 -0.920 -0.504 0.465 1.050 0.574 - 14.80 11.099 11.116 11.131 0.600 0.580 -1.013 0.600 0.580 -0.588 -0.608 0.348 0.862 0.457 - 14.85 11.111 11.114 11.124 0.273 0.473 -1.002 0.273 0.473 -0.474 -0.274 0.129 0.651 0.281 - 14.90 11.179 11.179 11.194 -0.019 0.591 -0.934 -0.019 0.591 -0.552 0.017 -0.011 0.611 0.276 - 14.95 11.208 11.208 11.239 0.067 0.836 -0.905 0.067 0.836 -0.757 -0.060 0.056 0.761 0.381 - 15.00 11.438 11.438 11.460 0.067 0.704 -0.675 0.067 0.704 -0.475 -0.045 0.047 0.478 0.240 - 15.05 11.242 11.242 11.263 0.034 0.672 -0.870 0.034 0.672 -0.585 -0.030 0.023 0.605 0.293 - 15.10 11.353 11.353 11.376 -0.123 0.714 -0.760 -0.123 0.714 -0.543 0.094 -0.088 0.552 0.279 - 15.15 11.161 11.165 11.191 -0.290 0.759 -0.951 -0.290 0.759 -0.722 0.276 -0.220 0.782 0.402 - 15.20 10.906 10.915 10.940 -0.423 0.743 -1.206 -0.423 0.743 -0.896 0.511 -0.314 1.093 0.539 - 15.25 11.047 11.048 11.087 -0.175 0.925 -1.066 -0.175 0.925 -0.985 0.187 -0.162 1.011 0.508 - 15.30 11.486 11.491 11.511 -0.350 0.672 -0.627 -0.350 0.672 -0.422 0.219 -0.235 0.484 0.265 - 15.35 11.690 11.697 11.718 -0.424 0.692 -0.423 -0.424 0.692 -0.293 0.180 -0.294 0.419 0.226 - 15.40 11.667 11.673 11.702 -0.377 0.830 -0.446 -0.377 0.830 -0.370 0.168 -0.313 0.515 0.256 - 15.45 11.653 11.673 11.697 -0.678 0.762 -0.460 -0.678 0.762 -0.350 0.312 -0.516 0.626 0.349 - 15.50 11.625 11.648 11.688 -0.745 0.967 -0.488 -0.745 0.967 -0.472 0.364 -0.720 0.864 0.467 - 15.55 11.686 11.691 11.712 -0.325 0.711 -0.427 -0.325 0.711 -0.303 0.139 -0.231 0.397 0.203 - 15.60 11.653 11.664 11.677 -0.503 0.558 -0.460 -0.503 0.558 -0.257 0.231 -0.281 0.388 0.223 - 15.65 11.491 11.492 11.530 -0.146 0.938 -0.622 -0.146 0.938 -0.583 0.091 -0.137 0.644 0.303 - 15.70 11.645 11.645 11.664 -0.123 0.663 -0.468 -0.123 0.663 -0.311 0.058 -0.082 0.337 0.163 - 15.75 11.560 11.563 11.564 -0.259 0.131 -0.553 -0.259 0.131 -0.072 0.143 -0.034 0.195 0.082 - 15.80 11.729 11.730 11.731 0.099 0.136 -0.383 0.099 0.136 -0.052 -0.038 0.013 0.088 0.033 - 15.85 11.638 11.639 11.642 0.142 0.236 -0.474 0.142 0.236 -0.112 -0.068 0.034 0.151 0.068 - 15.90 11.492 11.500 11.500 0.428 -0.031 -0.621 0.428 -0.031 0.019 -0.266 -0.013 0.285 0.133 - 15.95 11.193 11.199 11.199 0.364 0.069 -0.920 0.364 0.069 -0.063 -0.335 0.025 0.492 0.171 - 16.00 11.191 11.200 11.204 0.452 -0.308 -0.922 0.452 -0.308 0.284 -0.416 -0.139 0.575 0.261 - 16.05 11.203 11.223 11.226 0.668 -0.259 -0.910 0.668 -0.259 0.236 -0.607 -0.173 0.670 0.337 - 16.10 11.045 11.075 11.075 0.825 0.044 -1.068 0.825 0.044 -0.048 -0.881 0.037 0.911 0.441 - 16.15 11.230 11.251 11.254 0.683 0.263 -0.882 0.683 0.263 -0.232 -0.602 0.179 0.657 0.335 - 16.20 11.270 11.278 11.280 0.424 0.235 -0.843 0.424 0.235 -0.198 -0.358 0.100 0.473 0.210 - 16.25 11.209 11.219 11.222 0.485 0.229 -0.904 0.485 0.229 -0.207 -0.439 0.111 0.552 0.249 - 16.30 11.424 11.431 11.434 0.396 0.291 -0.689 0.396 0.291 -0.201 -0.273 0.115 0.358 0.179 - 16.35 11.362 11.378 11.382 0.608 0.301 -0.751 0.608 0.301 -0.226 -0.457 0.183 0.512 0.271 - 16.40 11.642 11.663 11.667 0.696 0.313 -0.470 0.696 0.313 -0.147 -0.327 0.218 0.402 0.210 - 16.45 11.698 11.710 11.710 0.528 -0.005 -0.414 0.528 -0.005 0.002 -0.219 -0.002 0.225 0.109 - 16.50 11.646 11.650 11.651 0.315 -0.062 -0.467 0.315 -0.062 0.029 -0.147 -0.020 0.160 0.075 - 16.55 11.816 11.817 11.817 0.119 -0.075 -0.296 0.119 -0.075 0.022 -0.035 -0.009 0.054 0.021 - 16.60 11.540 11.546 11.546 0.342 0.137 -0.572 0.342 0.137 -0.078 -0.196 0.047 0.231 0.108 - 16.65 11.571 11.571 11.571 0.095 0.102 -0.542 0.095 0.102 -0.055 -0.051 0.010 0.157 0.038 - 16.70 11.336 11.340 11.343 0.294 0.240 -0.777 0.294 0.240 -0.186 -0.229 0.071 0.374 0.152 - 16.75 11.529 11.543 11.570 0.572 0.779 -0.584 0.572 0.779 -0.454 -0.334 0.446 0.637 0.359 - 16.80 11.720 11.731 11.746 0.517 0.602 -0.393 0.517 0.602 -0.237 -0.203 0.311 0.392 0.220 - 16.85 11.806 11.809 11.828 0.266 0.662 -0.307 0.266 0.662 -0.203 -0.082 0.176 0.302 0.141 - 16.90 11.838 11.839 11.849 -0.155 0.499 -0.275 -0.155 0.499 -0.137 0.043 -0.077 0.174 0.082 - 16.95 11.870 11.874 11.875 -0.329 0.093 -0.243 -0.329 0.093 -0.023 0.080 -0.031 0.088 0.044 - 17.00 11.508 11.513 11.522 -0.349 0.436 -0.605 -0.349 0.436 -0.264 0.211 -0.152 0.339 0.185 - 17.05 11.806 11.807 11.809 0.036 0.251 -0.306 0.036 0.251 -0.077 -0.011 0.009 0.079 0.039 - 17.10 11.833 11.840 11.845 0.400 0.345 -0.280 0.400 0.345 -0.097 -0.112 0.138 0.179 0.101 - 17.15 11.436 11.439 11.454 0.262 0.590 -0.677 0.262 0.590 -0.399 -0.177 0.155 0.437 0.232 - 17.20 11.389 11.390 11.422 0.125 0.863 -0.724 0.125 0.863 -0.625 -0.091 0.108 0.642 0.320 - 17.25 11.142 11.142 11.167 0.051 0.753 -0.971 0.051 0.753 -0.731 -0.049 0.038 0.756 0.367 - 17.30 11.023 11.024 11.038 -0.096 0.562 -1.090 -0.096 0.562 -0.613 0.105 -0.054 0.756 0.312 - 17.35 10.732 10.736 10.752 -0.291 0.593 -1.381 -0.291 0.593 -0.820 0.402 -0.173 1.172 0.465 - 17.40 10.922 10.931 10.937 -0.439 0.363 -1.190 -0.439 0.363 -0.433 0.523 -0.160 0.871 0.349 - 17.45 10.951 10.960 10.974 -0.427 0.560 -1.161 -0.427 0.560 -0.651 0.496 -0.239 0.923 0.426 - 17.50 11.062 11.066 11.068 -0.312 0.231 -1.051 -0.312 0.231 -0.243 0.328 -0.072 0.628 0.207 - 17.55 11.295 11.296 11.300 -0.128 0.294 -0.818 -0.128 0.294 -0.240 0.105 -0.038 0.386 0.132 - 17.60 11.150 11.154 11.159 -0.297 0.336 -0.963 -0.297 0.336 -0.324 0.286 -0.100 0.564 0.222 - 17.65 11.353 11.354 11.366 -0.105 0.526 -0.760 -0.105 0.526 -0.400 0.080 -0.055 0.433 0.206 - 17.70 11.662 11.662 11.675 -0.004 0.547 -0.450 -0.004 0.547 -0.246 0.002 -0.002 0.251 0.123 - 17.75 11.626 11.626 11.632 -0.026 0.378 -0.487 -0.026 0.378 -0.184 0.013 -0.010 0.190 0.092 - 17.80 11.578 11.578 11.594 0.066 0.613 -0.535 0.066 0.613 -0.328 -0.035 0.040 0.333 0.166 - 17.85 11.311 11.314 11.319 0.287 0.318 -0.802 0.287 0.318 -0.255 -0.230 0.091 0.414 0.178 - 17.90 11.532 11.544 11.544 0.522 0.106 -0.581 0.522 0.106 -0.062 -0.303 0.056 0.311 0.157 - 17.95 11.764 11.772 11.772 0.411 0.117 -0.348 0.411 0.117 -0.041 -0.143 0.048 0.152 0.078 - 18.00 11.882 11.888 11.893 0.378 0.341 -0.231 0.378 0.341 -0.079 -0.087 0.129 0.156 0.087 - 18.05 12.068 12.075 12.078 0.412 0.282 -0.045 0.412 0.282 -0.013 -0.018 0.116 0.126 0.059 - 18.10 12.044 12.047 12.052 0.271 0.359 -0.069 0.271 0.359 -0.025 -0.019 0.097 0.103 0.051 - 18.15 12.342 12.348 12.354 0.372 0.397 0.230 0.372 0.397 0.091 0.085 0.148 0.174 0.097 - 18.20 12.267 12.285 12.294 0.655 0.471 0.154 0.655 0.471 0.073 0.101 0.308 0.337 0.166 - 18.25 12.099 12.115 12.129 0.622 0.592 -0.014 0.622 0.592 -0.008 -0.009 0.368 0.369 0.184 - 18.30 12.452 12.474 12.475 0.750 0.131 0.339 0.750 0.131 0.044 0.254 0.098 0.347 0.138 - 18.35 12.324 12.339 12.339 0.607 0.039 0.211 0.607 0.039 0.008 0.128 0.024 0.208 0.065 - 18.40 12.165 12.180 12.190 0.611 0.486 0.052 0.611 0.486 0.025 0.032 0.297 0.306 0.150 - 18.45 11.981 12.030 12.048 1.086 0.664 -0.132 1.086 0.664 -0.088 -0.143 0.722 0.819 0.370 - 18.50 12.122 12.169 12.183 1.071 0.570 0.009 1.071 0.570 0.005 0.010 0.610 0.736 0.305 - 18.55 11.725 11.784 11.795 1.176 0.518 -0.388 1.176 0.518 -0.201 -0.456 0.609 0.900 0.393 - 18.60 11.890 11.941 11.942 1.107 0.110 -0.223 1.107 0.110 -0.024 -0.247 0.121 0.644 0.138 - 18.65 11.902 11.947 11.948 1.036 0.191 -0.211 1.036 0.191 -0.040 -0.219 0.198 0.577 0.149 - 18.70 11.985 12.061 12.067 1.360 0.367 -0.128 1.360 0.367 -0.047 -0.174 0.500 1.000 0.266 - 18.75 12.133 12.225 12.258 1.498 0.898 0.020 1.498 0.898 0.018 0.030 1.346 1.526 0.673 - 18.80 11.989 12.047 12.068 1.183 0.707 -0.124 1.183 0.707 -0.087 -0.146 0.837 0.958 0.427 - 18.85 11.828 11.859 11.886 0.858 0.802 -0.285 0.858 0.802 -0.228 -0.244 0.689 0.731 0.383 - 18.90 11.953 11.980 12.004 0.801 0.756 -0.160 0.801 0.756 -0.121 -0.128 0.605 0.619 0.315 - 18.95 11.960 11.987 12.037 0.793 1.102 -0.152 0.793 1.102 -0.168 -0.121 0.873 0.932 0.449 - 19.00 12.050 12.071 12.130 0.720 1.189 -0.063 0.720 1.189 -0.075 -0.045 0.857 0.969 0.431 - 19.05 11.908 11.939 11.987 0.858 1.078 -0.205 0.858 1.078 -0.221 -0.176 0.924 0.969 0.483 - 19.10 11.896 11.901 11.937 0.314 0.933 -0.216 0.314 0.933 -0.202 -0.068 0.293 0.508 0.181 - 19.15 11.983 11.983 12.010 -0.005 0.806 -0.130 -0.005 0.806 -0.105 0.001 -0.004 0.333 0.053 - 19.20 11.860 11.860 11.901 -0.124 0.980 -0.253 -0.124 0.980 -0.248 0.031 -0.121 0.520 0.139 - 19.25 11.598 11.598 11.682 0.003 1.400 -0.515 0.003 1.400 -0.721 -0.002 0.004 1.113 0.361 - 19.30 11.395 11.397 11.492 0.214 1.481 -0.718 0.214 1.481 -1.064 -0.154 0.318 1.378 0.560 - 19.35 11.357 11.358 11.480 0.147 1.669 -0.756 0.147 1.669 -1.261 -0.111 0.244 1.688 0.645 - 19.40 11.484 11.488 11.603 -0.304 1.633 -0.629 -0.304 1.633 -1.028 0.191 -0.497 1.578 0.579 - 19.45 11.487 11.493 11.595 -0.383 1.531 -0.626 -0.383 1.531 -0.958 0.240 -0.586 1.441 0.574 - 19.50 11.863 11.864 11.974 -0.180 1.616 -0.250 -0.180 1.616 -0.403 0.045 -0.290 1.352 0.249 - 19.55 11.890 11.891 11.980 -0.123 1.461 -0.223 -0.123 1.461 -0.325 0.027 -0.179 1.099 0.186 - 19.60 11.506 11.509 11.595 -0.246 1.414 -0.607 -0.246 1.414 -0.858 0.149 -0.348 1.213 0.469 - 19.65 11.507 11.510 11.606 -0.264 1.490 -0.606 -0.264 1.490 -0.903 0.160 -0.393 1.328 0.499 - 19.70 11.685 11.686 11.730 -0.204 1.008 -0.428 -0.204 1.008 -0.432 0.087 -0.206 0.621 0.243 - 19.75 11.956 11.956 11.992 -0.015 0.940 -0.157 -0.015 0.940 -0.148 0.002 -0.014 0.454 0.074 - 19.80 11.867 11.868 11.893 -0.138 0.765 -0.245 -0.138 0.765 -0.188 0.034 -0.105 0.332 0.109 - 19.85 12.017 12.023 12.054 -0.375 0.868 -0.096 -0.375 0.868 -0.083 0.036 -0.325 0.451 0.169 - 19.90 11.998 12.002 12.057 -0.309 1.151 -0.114 -0.309 1.151 -0.132 0.035 -0.356 0.717 0.191 - 19.95 11.834 11.834 11.874 -0.146 0.971 -0.279 -0.146 0.971 -0.271 0.041 -0.142 0.521 0.154 - 20.00 11.758 11.761 11.775 -0.262 0.566 -0.354 -0.262 0.566 -0.201 0.093 -0.148 0.257 0.133 - 20.05 11.809 11.814 11.825 -0.363 0.507 -0.304 -0.363 0.507 -0.154 0.111 -0.184 0.241 0.132 - 20.10 11.310 11.320 11.334 -0.486 0.549 -0.803 -0.486 0.549 -0.441 0.390 -0.267 0.591 0.323 - 20.15 11.103 11.133 11.168 -0.821 0.877 -1.010 -0.821 0.877 -0.885 0.828 -0.719 1.231 0.705 - 20.20 11.560 11.607 11.632 -1.037 0.771 -0.552 -1.037 0.771 -0.426 0.573 -0.799 0.987 0.536 - 20.25 11.588 11.606 11.631 -0.644 0.768 -0.525 -0.644 0.768 -0.403 0.338 -0.495 0.640 0.361 - 20.30 12.075 12.089 12.090 -0.584 0.041 -0.037 -0.584 0.041 -0.002 0.022 -0.024 0.172 0.016 - 20.35 11.872 11.877 11.886 -0.325 0.482 -0.241 -0.325 0.482 -0.116 0.078 -0.157 0.198 0.105 - 20.40 11.266 11.273 11.291 -0.407 0.633 -0.847 -0.407 0.633 -0.536 0.344 -0.257 0.642 0.344 - 20.45 11.359 11.360 11.379 -0.181 0.649 -0.754 -0.181 0.649 -0.490 0.137 -0.118 0.512 0.261 - 20.50 11.643 11.646 11.651 -0.250 0.338 -0.469 -0.250 0.338 -0.158 0.117 -0.084 0.198 0.107 - 20.55 12.001 12.004 12.004 -0.255 0.088 -0.111 -0.255 0.088 -0.010 0.028 -0.022 0.043 0.019 - 20.60 11.563 11.567 11.568 -0.322 -0.156 -0.550 -0.322 -0.156 0.086 0.177 0.050 0.215 0.102 - 20.65 11.249 11.250 11.251 -0.161 0.076 -0.863 -0.161 0.076 -0.066 0.139 -0.012 0.389 0.077 - 20.70 11.536 11.538 11.539 -0.230 -0.161 -0.577 -0.230 -0.161 0.093 0.133 0.037 0.206 0.083 - 20.75 11.753 11.757 11.757 -0.301 -0.033 -0.359 -0.301 -0.033 0.012 0.108 0.010 0.110 0.055 - 20.80 11.740 11.741 11.741 -0.158 0.104 -0.373 -0.158 0.104 -0.039 0.059 -0.016 0.087 0.036 - 20.85 11.760 11.760 11.762 0.051 -0.228 -0.353 0.051 -0.228 0.081 -0.018 -0.012 0.090 0.042 - 20.90 11.690 11.690 11.707 -0.105 -0.624 -0.423 -0.105 -0.624 0.264 0.044 0.065 0.290 0.138 - 20.95 11.610 11.613 11.626 -0.259 -0.553 -0.503 -0.259 -0.553 0.278 0.130 0.143 0.313 0.170 - 21.00 11.643 11.649 11.686 -0.373 -0.936 -0.470 -0.373 -0.936 0.440 0.175 0.349 0.619 0.294 - 21.05 11.768 11.776 11.795 -0.433 -0.663 -0.344 -0.433 -0.663 0.228 0.149 0.287 0.373 0.198 - 21.10 11.452 11.463 11.476 -0.517 -0.532 -0.661 -0.517 -0.532 0.351 0.342 0.275 0.494 0.281 - 21.15 11.210 11.220 11.225 -0.459 -0.329 -0.902 -0.459 -0.329 0.297 0.414 0.151 0.567 0.266 - 21.20 11.388 11.393 11.394 -0.325 -0.125 -0.724 -0.325 -0.125 0.091 0.235 0.041 0.323 0.128 - 21.25 11.494 11.500 11.501 -0.367 -0.146 -0.619 -0.367 -0.146 0.090 0.227 0.054 0.269 0.125 - 21.30 11.360 11.367 11.373 -0.400 -0.379 -0.753 -0.400 -0.379 0.285 0.301 0.151 0.435 0.221 - 21.35 11.319 11.335 11.338 -0.590 -0.258 -0.793 -0.590 -0.258 0.204 0.468 0.152 0.522 0.266 - 21.40 11.464 11.491 11.492 -0.780 -0.156 -0.648 -0.780 -0.156 0.101 0.506 0.121 0.527 0.265 - 21.45 11.163 11.210 11.210 -1.022 0.001 -0.950 -1.022 0.001 -0.001 0.971 -0.001 0.974 0.485 - 21.50 11.269 11.315 11.322 -1.026 -0.388 -0.844 -1.026 -0.388 0.327 0.866 0.398 0.958 0.504 - 21.55 11.406 11.457 11.467 -1.089 -0.461 -0.707 -1.089 -0.461 0.326 0.770 0.502 0.949 0.488 - 21.60 11.546 11.685 11.695 -1.797 -0.480 -0.566 -1.797 -0.480 0.272 1.018 0.863 1.890 0.681 - 21.65 11.705 11.820 11.836 -1.647 -0.619 -0.408 -1.647 -0.619 0.253 0.672 1.019 1.631 0.623 - 21.70 11.657 11.766 11.789 -1.596 -0.749 -0.456 -1.596 -0.749 0.341 0.728 1.195 1.658 0.720 - 21.75 11.522 11.609 11.652 -1.414 -1.003 -0.590 -1.414 -1.003 0.592 0.835 1.419 1.677 0.875 - 21.80 11.141 11.205 11.222 -1.195 -0.620 -0.972 -1.195 -0.620 0.603 1.162 0.741 1.379 0.752 - 21.85 11.295 11.362 11.367 -1.227 -0.336 -0.817 -1.227 -0.336 0.275 1.003 0.412 1.143 0.559 - 21.90 11.340 11.429 11.431 -1.425 -0.235 -0.773 -1.425 -0.235 0.182 1.102 0.335 1.342 0.583 - 21.95 11.780 11.879 11.880 -1.528 -0.177 -0.333 -1.528 -0.177 0.059 0.508 0.271 1.238 0.289 - 22.00 11.749 11.811 11.813 -1.209 -0.214 -0.364 -1.209 -0.214 0.078 0.440 0.259 0.820 0.258 - 22.05 11.725 11.769 11.773 -1.021 -0.308 -0.388 -1.021 -0.308 0.120 0.396 0.315 0.644 0.260 - 22.10 11.517 11.555 11.565 -0.939 -0.480 -0.596 -0.939 -0.480 0.286 0.560 0.451 0.734 0.387 - 22.15 11.463 11.521 11.524 -1.158 -0.243 -0.650 -1.158 -0.243 0.158 0.752 0.281 0.911 0.409 - 22.20 11.553 11.610 11.610 -1.144 0.133 -0.560 -1.144 0.133 -0.075 0.640 -0.152 0.820 0.331 - 22.25 11.305 11.340 11.350 -0.889 0.476 -0.807 -0.889 0.476 -0.385 0.718 -0.423 0.835 0.459 - 22.30 11.176 11.193 11.207 -0.612 0.566 -0.937 -0.612 0.566 -0.531 0.573 -0.347 0.786 0.427 - 22.35 11.419 11.432 11.433 -0.559 -0.093 -0.694 -0.559 -0.093 0.065 0.388 0.052 0.402 0.199 - 22.40 11.549 11.560 11.560 -0.489 -0.061 -0.564 -0.489 -0.061 0.034 0.275 0.030 0.280 0.140 - 22.45 11.357 11.374 11.374 -0.614 0.062 -0.755 -0.614 0.062 -0.047 0.464 -0.038 0.476 0.234 - 22.50 11.409 11.425 11.429 -0.613 0.304 -0.704 -0.613 0.304 -0.214 0.431 -0.186 0.482 0.258 - 22.55 11.536 11.564 11.569 -0.802 0.322 -0.576 -0.802 0.322 -0.186 0.462 -0.258 0.539 0.280 - 22.60 11.437 11.466 11.468 -0.813 0.194 -0.676 -0.813 0.194 -0.131 0.549 -0.158 0.577 0.293 - 22.65 12.075 12.104 12.108 -0.841 -0.310 -0.038 -0.841 -0.310 0.012 0.032 0.260 0.402 0.131 - 22.70 11.968 12.012 12.013 -1.029 -0.134 -0.145 -1.029 -0.134 0.019 0.149 0.138 0.549 0.102 - 22.75 11.718 11.729 11.735 -0.507 -0.394 -0.395 -0.507 -0.394 0.156 0.200 0.200 0.285 0.162 - 22.80 11.715 11.733 11.734 -0.651 -0.163 -0.398 -0.651 -0.163 0.065 0.259 0.106 0.305 0.144 - 22.85 11.806 11.834 11.835 -0.819 -0.099 -0.307 -0.819 -0.099 0.030 0.251 0.081 0.387 0.133 - 22.90 11.814 11.833 11.833 -0.676 0.098 -0.299 -0.676 0.098 -0.029 0.202 -0.066 0.278 0.107 - 22.95 11.805 11.813 11.819 -0.442 0.368 -0.308 -0.442 0.368 -0.113 0.136 -0.162 0.213 0.120 - 23.00 11.591 11.593 11.604 -0.233 0.491 -0.522 -0.233 0.491 -0.256 0.121 -0.114 0.284 0.153 - 23.05 11.703 11.710 11.724 -0.395 0.581 -0.409 -0.395 0.581 -0.238 0.162 -0.229 0.330 0.184 - 23.10 11.765 11.771 11.786 -0.365 0.602 -0.347 -0.365 0.602 -0.209 0.127 -0.219 0.308 0.164 - 23.15 11.832 11.838 11.844 -0.398 0.370 -0.281 -0.398 0.370 -0.104 0.112 -0.147 0.187 0.106 - 23.20 11.960 11.969 11.969 -0.441 -0.017 -0.152 -0.441 -0.017 0.003 0.067 0.007 0.109 0.034 - 23.25 11.976 11.982 11.985 -0.392 -0.266 -0.137 -0.392 -0.266 0.037 0.054 0.104 0.122 0.062 - 23.30 11.588 11.597 11.612 -0.456 -0.591 -0.524 -0.456 -0.591 0.310 0.239 0.270 0.416 0.238 - 23.35 11.565 11.576 11.601 -0.522 -0.760 -0.548 -0.522 -0.760 0.416 0.286 0.397 0.575 0.321 - 23.40 11.445 11.455 11.464 -0.472 -0.462 -0.668 -0.472 -0.462 0.309 0.315 0.218 0.441 0.246 - 23.45 11.242 11.243 11.246 0.200 -0.213 -0.871 0.200 -0.213 0.185 -0.174 -0.043 0.422 0.129 - 23.50 11.191 11.193 11.203 -0.236 -0.460 -0.922 -0.236 -0.460 0.424 0.218 0.109 0.559 0.245 - 23.55 11.359 11.362 11.364 -0.243 -0.223 -0.754 -0.243 -0.223 0.168 0.183 0.054 0.338 0.127 - 23.60 11.411 11.421 11.427 -0.469 -0.382 -0.702 -0.469 -0.382 0.268 0.329 0.179 0.429 0.230 - 23.65 11.353 11.380 11.386 -0.779 -0.371 -0.760 -0.779 -0.371 0.282 0.592 0.289 0.661 0.358 - 23.70 11.625 11.665 11.674 -0.960 -0.472 -0.488 -0.960 -0.472 0.230 0.468 0.453 0.691 0.345 - 23.75 11.772 11.813 11.828 -0.983 -0.599 -0.341 -0.983 -0.599 0.204 0.335 0.589 0.721 0.354 - 23.80 12.026 12.083 12.089 -1.170 -0.385 -0.087 -1.170 -0.385 0.033 0.102 0.450 0.762 0.231 - 23.85 12.177 12.207 12.222 -0.853 -0.615 0.064 -0.853 -0.615 -0.040 -0.055 0.524 0.555 0.264 - 23.90 12.164 12.176 12.206 -0.535 -0.865 0.051 -0.535 -0.865 -0.044 -0.027 0.463 0.519 0.233 - 23.95 12.099 12.123 12.135 -0.762 -0.538 -0.014 -0.762 -0.538 0.007 0.011 0.410 0.435 0.205 - 24.00 12.121 12.147 12.165 -0.796 -0.666 0.008 -0.796 -0.666 -0.005 -0.007 0.530 0.539 0.265 - 24.05 12.251 12.262 12.290 -0.529 -0.827 0.138 -0.529 -0.827 -0.114 -0.073 0.437 0.491 0.229 - 24.10 12.279 12.284 12.301 -0.367 -0.646 0.166 -0.367 -0.646 -0.107 -0.061 0.237 0.290 0.134 - 24.15 12.590 12.592 12.633 -0.212 -1.025 0.477 -0.212 -1.025 -0.489 -0.101 0.218 0.661 0.272 - 24.20 12.481 12.483 12.536 0.185 -1.157 0.369 0.185 -1.157 -0.427 0.068 -0.214 0.754 0.241 - 24.25 12.049 12.053 12.089 0.300 -0.931 -0.064 0.300 -0.931 0.059 -0.019 -0.279 0.480 0.143 - 24.30 11.850 11.851 11.898 -0.163 -1.061 -0.263 -0.163 -1.061 0.279 0.043 0.173 0.611 0.166 - 24.35 11.841 11.851 11.891 -0.501 -0.975 -0.272 -0.501 -0.975 0.265 0.136 0.488 0.637 0.286 - 24.40 11.836 11.837 11.890 -0.157 -1.114 -0.276 -0.157 -1.114 0.308 0.043 0.175 0.671 0.178 - 24.45 11.497 11.498 11.528 -0.148 -0.823 -0.616 -0.148 -0.823 0.507 0.091 0.122 0.539 0.265 - 24.50 11.901 11.902 11.926 0.058 -0.759 -0.211 0.058 -0.759 0.160 -0.012 -0.044 0.312 0.083 - 24.55 12.119 12.120 12.135 0.197 -0.596 0.006 0.197 -0.596 -0.004 0.001 -0.118 0.197 0.059 - 24.60 11.921 11.921 11.923 0.019 -0.217 -0.192 0.019 -0.217 0.042 -0.004 -0.004 0.042 0.021 - 24.65 11.968 11.974 11.976 -0.382 -0.227 -0.145 -0.382 -0.227 0.033 0.055 0.086 0.109 0.054 - 24.70 12.216 12.220 12.220 0.292 -0.022 0.104 0.292 -0.022 -0.002 0.030 -0.006 0.048 0.015 - 24.75 12.519 12.523 12.524 0.321 -0.167 0.406 0.321 -0.167 -0.068 0.130 -0.053 0.148 0.078 - 24.80 12.374 12.375 12.375 0.085 -0.114 0.261 0.085 -0.114 -0.030 0.022 -0.010 0.044 0.019 - 24.85 12.476 12.479 12.479 0.279 -0.139 0.363 0.279 -0.139 -0.051 0.101 -0.039 0.114 0.060 - 24.90 12.628 12.633 12.645 0.351 -0.559 0.515 0.351 -0.559 -0.288 0.181 -0.196 0.351 0.196 - 24.95 12.547 12.557 12.560 0.508 -0.284 0.434 0.508 -0.284 -0.123 0.220 -0.144 0.263 0.145 - 25.00 12.332 12.350 12.350 0.656 -0.041 0.220 0.656 -0.041 -0.009 0.144 -0.027 0.240 0.073 - 25.05 11.883 11.888 11.891 0.360 -0.258 -0.230 0.360 -0.258 0.059 -0.083 -0.093 0.124 0.069 - 25.10 11.996 12.000 12.002 0.301 -0.210 -0.117 0.301 -0.210 0.025 -0.035 -0.063 0.074 0.038 - 25.15 12.286 12.298 12.315 0.538 -0.644 0.174 0.538 -0.644 -0.112 0.093 -0.346 0.367 0.188 - 25.20 12.188 12.190 12.246 0.205 -1.174 0.076 0.205 -1.174 -0.089 0.015 -0.240 0.713 0.128 - 25.25 12.788 12.789 12.827 0.193 -0.977 0.675 0.193 -0.977 -0.660 0.131 -0.189 0.724 0.349 - 25.30 12.738 12.746 12.805 0.447 -1.227 0.626 0.447 -1.227 -0.768 0.280 -0.549 1.049 0.492 - 25.35 12.441 12.448 12.544 0.436 -1.545 0.328 0.436 -1.545 -0.507 0.143 -0.673 1.342 0.427 - 25.40 12.584 12.584 12.679 0.056 -1.546 0.471 0.056 -1.546 -0.729 0.026 -0.086 1.308 0.367 - 25.45 12.723 12.726 12.836 -0.303 -1.679 0.610 -0.303 -1.679 -1.024 -0.185 0.508 1.641 0.579 - 25.50 12.994 12.995 13.089 -0.162 -1.567 0.881 -0.162 -1.567 -1.381 -0.143 0.254 1.630 0.706 - 25.55 13.187 13.189 13.254 -0.234 -1.317 1.074 -0.234 -1.317 -1.415 -0.252 0.309 1.472 0.735 - 25.60 12.932 12.933 13.003 0.194 -1.347 0.819 0.194 -1.347 -1.103 0.158 -0.261 1.261 0.572 - 25.65 13.116 13.121 13.221 0.372 -1.624 1.003 0.372 -1.624 -1.629 0.374 -0.605 1.891 0.889 - 25.70 12.975 12.980 13.093 0.359 -1.718 0.862 0.359 -1.718 -1.481 0.310 -0.617 1.912 0.817 - 25.75 12.683 12.687 12.789 0.308 -1.611 0.571 0.308 -1.611 -0.919 0.176 -0.496 1.508 0.530 - 25.80 12.612 12.612 12.727 0.058 -1.701 0.499 0.058 -1.701 -0.849 0.029 -0.099 1.573 0.428 - 25.85 12.683 12.685 12.793 0.198 -1.661 0.570 0.198 -1.661 -0.948 0.113 -0.330 1.562 0.505 - 25.90 12.830 12.830 12.903 -0.068 -1.369 0.717 -0.068 -1.369 -0.981 -0.048 0.092 1.196 0.493 - 25.95 12.879 12.879 12.934 0.020 -1.189 0.766 0.020 -1.189 -0.911 0.015 -0.024 1.000 0.456 - 26.00 12.527 12.527 12.549 0.027 -0.745 0.414 0.027 -0.745 -0.308 0.011 -0.020 0.363 0.155 - 26.05 12.606 12.606 12.646 0.038 -1.012 0.493 0.038 -1.012 -0.499 0.019 -0.039 0.634 0.250 - 26.10 12.780 12.794 12.833 0.595 -0.995 0.668 0.595 -0.995 -0.664 0.397 -0.592 0.895 0.487 - 26.15 13.042 13.053 13.075 0.530 -0.763 0.929 0.530 -0.763 -0.709 0.492 -0.404 0.863 0.477 - 26.20 13.296 13.298 13.326 0.258 -0.865 1.183 0.258 -0.865 -1.023 0.305 -0.223 1.107 0.545 - 26.25 13.236 13.243 13.260 0.424 -0.679 1.123 0.424 -0.679 -0.763 0.476 -0.288 0.951 0.472 - 26.30 13.393 13.410 13.453 0.687 -1.065 1.280 0.687 -1.065 -1.363 0.880 -0.732 1.622 0.890 - 26.35 13.403 13.414 13.480 0.556 -1.326 1.290 0.556 -1.326 -1.710 0.717 -0.737 1.865 0.998 - 26.40 13.243 13.253 13.281 0.499 -0.874 1.130 0.499 -0.874 -0.988 0.564 -0.436 1.145 0.609 - 26.45 12.988 12.991 13.061 0.268 -1.349 0.875 0.268 -1.349 -1.181 0.235 -0.362 1.330 0.629 - 26.50 12.804 12.810 12.836 0.397 -0.806 0.691 0.397 -0.806 -0.558 0.275 -0.320 0.643 0.350 - 26.55 13.000 13.003 13.018 0.293 -0.623 0.887 0.293 -0.623 -0.552 0.260 -0.183 0.630 0.319 - 26.60 13.267 13.268 13.292 0.117 -0.799 1.154 0.117 -0.799 -0.922 0.135 -0.094 0.992 0.468 - 26.65 13.229 13.233 13.269 0.294 -0.981 1.117 0.294 -0.981 -1.096 0.328 -0.288 1.148 0.590 - 26.70 13.102 13.105 13.125 0.277 -0.730 0.989 0.277 -0.730 -0.722 0.274 -0.202 0.794 0.399 - 26.75 12.889 12.890 12.899 -0.185 -0.491 0.776 -0.185 -0.491 -0.381 -0.143 0.091 0.439 0.209 - 26.80 13.030 13.032 13.043 0.233 -0.522 0.917 0.233 -0.522 -0.479 0.214 -0.122 0.584 0.269 - 26.85 13.277 13.280 13.311 0.280 -0.908 1.164 0.280 -0.908 -1.057 0.326 -0.254 1.129 0.567 - 26.90 13.350 13.351 13.358 0.109 -0.427 1.238 0.109 -0.427 -0.529 0.135 -0.047 0.863 0.274 - 26.95 13.385 13.386 13.390 0.144 -0.342 1.272 0.144 -0.342 -0.435 0.183 -0.049 0.878 0.237 - 27.00 13.485 13.487 13.496 -0.198 -0.499 1.373 -0.198 -0.499 -0.684 -0.272 0.099 1.086 0.372 - 27.05 13.519 13.525 13.542 -0.415 -0.668 1.406 -0.415 -0.668 -0.939 -0.583 0.277 1.298 0.570 - 27.10 13.606 13.607 13.624 -0.198 -0.677 1.493 -0.198 -0.677 -1.011 -0.296 0.134 1.363 0.531 - 27.15 13.534 13.535 13.549 -0.121 -0.626 1.422 -0.121 -0.626 -0.890 -0.172 0.076 1.214 0.455 - 27.20 13.403 13.404 13.405 -0.105 -0.200 1.290 -0.105 -0.200 -0.258 -0.136 0.021 0.858 0.146 - 27.25 13.199 13.202 13.209 0.283 -0.428 1.087 0.283 -0.428 -0.466 0.307 -0.121 0.722 0.285 - 27.30 13.141 13.143 13.154 0.205 -0.543 1.028 0.205 -0.543 -0.558 0.211 -0.111 0.697 0.303 - 27.35 13.440 13.446 13.464 0.391 -0.712 1.327 0.391 -0.712 -0.945 0.518 -0.278 1.211 0.557 - 27.40 13.533 13.544 13.565 0.562 -0.749 1.420 0.562 -0.749 -1.064 0.797 -0.421 1.446 0.697 - 27.45 13.467 13.477 13.511 0.531 -0.946 1.354 0.531 -0.946 -1.281 0.719 -0.502 1.505 0.776 - 27.50 12.903 12.909 12.919 0.392 -0.522 0.790 0.392 -0.522 -0.413 0.310 -0.205 0.525 0.277 - 27.55 13.043 13.046 13.062 0.266 -0.650 0.930 0.266 -0.650 -0.605 0.247 -0.173 0.679 0.338 - 27.60 12.807 12.811 12.822 0.333 -0.527 0.694 0.333 -0.527 -0.366 0.231 -0.176 0.435 0.234 - 27.65 12.866 12.892 12.907 0.817 -0.624 0.753 0.817 -0.624 -0.470 0.615 -0.509 0.811 0.463 - 27.70 12.746 12.763 12.788 0.659 -0.811 0.633 0.659 -0.811 -0.513 0.417 -0.534 0.746 0.425 - 27.75 12.312 12.319 12.350 0.387 -0.886 0.200 0.387 -0.886 -0.177 0.077 -0.343 0.487 0.197 - 27.80 12.295 12.299 12.315 0.309 -0.641 0.182 0.309 -0.641 -0.117 0.056 -0.198 0.270 0.118 - 27.85 12.247 12.247 12.251 0.021 -0.300 0.134 0.021 -0.300 -0.040 0.003 -0.006 0.054 0.020 - 27.90 12.378 12.378 12.382 0.058 -0.314 0.265 0.058 -0.314 -0.083 0.015 -0.018 0.086 0.043 - 27.95 12.526 12.527 12.540 -0.130 -0.579 0.414 -0.130 -0.579 -0.239 -0.054 0.075 0.262 0.128 - 28.00 12.596 12.600 12.608 -0.324 -0.443 0.483 -0.324 -0.443 -0.214 -0.157 0.144 0.268 0.151 - 28.05 12.649 12.651 12.651 -0.221 0.090 0.536 -0.221 0.090 0.048 -0.118 -0.020 0.172 0.065 - 28.10 12.584 12.584 12.584 0.063 0.003 0.471 0.063 0.003 0.002 0.030 0.000 0.113 0.015 - 28.15 12.750 12.756 12.758 -0.399 0.235 0.637 -0.399 0.235 0.150 -0.254 -0.094 0.310 0.155 - 28.20 12.725 12.726 12.726 0.084 -0.015 0.613 0.084 -0.015 -0.009 0.051 -0.001 0.191 0.026 - 28.25 12.463 12.463 12.465 0.040 -0.189 0.351 0.040 -0.189 -0.066 0.014 -0.008 0.080 0.034 - 28.30 12.627 12.636 12.637 0.478 -0.142 0.514 0.478 -0.142 -0.073 0.246 -0.068 0.257 0.133 - 28.35 12.486 12.490 12.491 0.286 -0.196 0.374 0.286 -0.196 -0.073 0.107 -0.056 0.130 0.071 - 28.40 12.218 12.218 12.222 0.087 -0.314 0.105 0.087 -0.314 -0.033 0.009 -0.027 0.058 0.022 - 28.45 12.508 12.513 12.523 0.371 -0.486 0.395 0.371 -0.486 -0.192 0.146 -0.180 0.265 0.151 - 28.50 12.772 12.773 12.785 0.151 -0.546 0.659 0.151 -0.546 -0.360 0.100 -0.083 0.378 0.191 - 28.55 12.873 12.874 12.874 0.071 -0.029 0.761 0.071 -0.029 -0.022 0.054 -0.002 0.292 0.029 - 28.60 12.992 12.994 12.995 -0.261 -0.089 0.879 -0.261 -0.089 -0.078 -0.230 0.023 0.424 0.122 - 28.65 12.898 12.898 12.898 -0.031 -0.008 0.785 -0.031 -0.008 -0.006 -0.024 0.000 0.309 0.012 - 28.70 12.955 12.958 12.958 -0.234 0.075 0.843 -0.234 0.075 0.063 -0.197 -0.017 0.385 0.104 - 28.75 13.078 13.078 13.079 -0.023 -0.169 0.966 -0.023 -0.169 -0.164 -0.022 0.004 0.481 0.083 - 28.80 13.355 13.356 13.359 0.156 -0.294 1.242 0.156 -0.294 -0.366 0.194 -0.046 0.827 0.208 - 28.85 12.787 12.788 12.792 -0.110 -0.314 0.675 -0.110 -0.314 -0.212 -0.074 0.035 0.283 0.114 - 28.90 12.862 12.876 12.881 -0.597 -0.356 0.749 -0.597 -0.356 -0.267 -0.447 0.212 0.522 0.281 - 28.95 12.841 12.841 12.842 -0.133 -0.110 0.728 -0.133 -0.110 -0.080 -0.097 0.015 0.280 0.063 - 29.00 12.789 12.790 12.792 0.128 -0.222 0.676 0.128 -0.222 -0.150 0.087 -0.028 0.262 0.088 - 29.05 12.672 12.673 12.683 0.203 -0.503 0.559 0.203 -0.503 -0.281 0.113 -0.102 0.303 0.160 - 29.10 12.853 12.856 12.860 0.281 -0.343 0.740 0.281 -0.343 -0.254 0.208 -0.096 0.372 0.171 - 29.15 12.946 12.954 12.968 0.470 -0.591 0.833 0.470 -0.591 -0.492 0.391 -0.277 0.631 0.343 - 29.20 13.229 13.237 13.254 0.452 -0.667 1.117 0.452 -0.667 -0.745 0.505 -0.302 0.948 0.475 - 29.25 13.288 13.293 13.321 0.371 -0.861 1.175 0.371 -0.861 -1.012 0.436 -0.319 1.130 0.573 - 29.30 13.461 13.461 13.485 -0.035 -0.811 1.348 -0.035 -0.811 -1.093 -0.048 0.029 1.238 0.547 - 29.35 13.176 13.177 13.192 -0.081 -0.635 1.064 -0.081 -0.635 -0.675 -0.086 0.051 0.771 0.341 - 29.40 13.201 13.203 13.205 0.221 -0.244 1.089 0.221 -0.244 -0.265 0.240 -0.054 0.646 0.181 - 29.45 13.002 13.008 13.018 0.379 -0.507 0.889 0.379 -0.507 -0.451 0.337 -0.192 0.596 0.297 - 29.50 12.851 12.852 12.852 0.127 -0.128 0.738 0.127 -0.128 -0.095 0.094 -0.016 0.289 0.067 - 29.55 13.039 13.039 13.041 -0.001 -0.181 0.927 -0.001 -0.181 -0.167 -0.001 0.000 0.446 0.084 - 29.60 13.138 13.145 13.152 0.442 -0.409 1.025 0.442 -0.409 -0.419 0.453 -0.181 0.706 0.321 - 29.65 12.819 12.822 12.823 0.319 -0.064 0.706 0.319 -0.064 -0.045 0.225 -0.020 0.302 0.115 - 29.70 12.760 12.761 12.762 -0.189 0.056 0.647 -0.189 0.056 0.036 -0.122 -0.011 0.229 0.064 - 29.75 12.672 12.674 12.674 -0.197 0.082 0.559 -0.197 0.082 0.046 -0.110 -0.016 0.179 0.060 - 29.80 12.826 12.842 12.842 -0.633 -0.081 0.714 -0.633 -0.081 -0.058 -0.452 0.051 0.458 0.229 - 29.85 12.786 12.792 12.795 -0.382 -0.278 0.673 -0.382 -0.278 -0.187 -0.258 0.106 0.338 0.168 - 29.90 12.443 12.447 12.447 -0.310 -0.026 0.330 -0.310 -0.026 -0.008 -0.102 0.008 0.103 0.051 - 29.95 12.891 12.896 12.900 -0.360 -0.305 0.778 -0.360 -0.305 -0.237 -0.280 0.110 0.414 0.192 - 30.00 12.831 12.849 12.849 -0.675 0.085 0.718 -0.675 0.085 0.061 -0.485 -0.057 0.489 0.246 - 30.05 12.933 12.942 12.958 -0.485 0.631 0.820 -0.485 0.631 0.518 -0.398 -0.306 0.653 0.360 - 30.10 13.016 13.025 13.036 -0.469 0.553 0.903 -0.469 0.553 0.500 -0.424 -0.260 0.671 0.352 - 30.15 13.081 13.085 13.090 -0.305 0.374 0.968 -0.305 0.374 0.363 -0.296 -0.114 0.586 0.241 - 30.20 12.916 12.917 12.917 -0.087 0.137 0.804 -0.087 0.137 0.110 -0.070 -0.012 0.336 0.066 - 30.25 12.945 12.948 12.948 -0.270 0.015 0.833 -0.270 0.015 0.013 -0.225 -0.004 0.383 0.113 - 30.30 13.105 13.117 13.119 -0.579 -0.177 0.992 -0.579 -0.177 -0.176 -0.575 0.103 0.675 0.305 - 30.35 13.184 13.196 13.197 -0.564 -0.160 1.071 -0.564 -0.160 -0.172 -0.604 0.090 0.745 0.317 - 30.40 13.037 13.048 13.050 -0.546 -0.247 0.924 -0.546 -0.247 -0.228 -0.505 0.135 0.606 0.285 - 30.45 13.285 13.307 13.307 -0.760 -0.041 1.172 -0.760 -0.041 -0.048 -0.891 0.031 0.977 0.446 - 30.50 13.087 13.106 13.107 -0.712 -0.138 0.974 -0.712 -0.138 -0.135 -0.694 0.098 0.738 0.357 - 30.55 13.331 13.367 13.370 -0.982 -0.264 1.218 -0.982 -0.264 -0.321 -1.196 0.259 1.259 0.633 - 30.60 13.242 13.300 13.306 -1.244 -0.390 1.129 -1.244 -0.390 -0.441 -1.405 0.485 1.487 0.775 - 30.65 13.662 13.723 13.731 -1.295 -0.463 1.549 -1.295 -0.463 -0.717 -2.006 0.599 2.146 1.107 - 30.70 13.556 13.647 13.650 -1.566 -0.304 1.444 -1.566 -0.304 -0.439 -2.261 0.477 2.315 1.176 - 30.75 13.492 13.548 13.557 -1.223 -0.502 1.379 -1.223 -0.502 -0.692 -1.687 0.614 1.825 0.962 - 30.80 13.426 13.472 13.495 -1.114 -0.780 1.313 -1.114 -0.780 -1.024 -1.463 0.869 1.787 0.993 - 30.85 13.390 13.442 13.470 -1.182 -0.871 1.277 -1.182 -0.871 -1.112 -1.510 1.030 1.893 1.070 - 30.90 13.255 13.329 13.366 -1.397 -0.995 1.143 -1.397 -0.995 -1.137 -1.596 1.390 2.124 1.201 - 30.95 13.253 13.363 13.388 -1.710 -0.817 1.140 -1.710 -0.817 -0.932 -1.950 1.397 2.447 1.287 - 31.00 13.347 13.416 13.432 -1.359 -0.656 1.234 -1.359 -0.656 -0.810 -1.677 0.892 1.900 1.032 - 31.05 13.474 13.526 13.537 -1.175 -0.565 1.362 -1.175 -0.565 -0.769 -1.599 0.664 1.776 0.947 - 31.10 13.492 13.548 13.551 -1.232 -0.277 1.379 -1.232 -0.277 -0.383 -1.699 0.342 1.749 0.888 - 31.15 14.012 14.035 14.043 -0.812 -0.466 1.899 -0.812 -0.466 -0.885 -1.542 0.378 2.242 0.909 - 31.20 13.940 13.960 13.961 -0.752 -0.149 1.827 -0.752 -0.149 -0.273 -1.374 0.112 1.964 0.703 - 31.25 13.823 13.842 13.844 -0.716 -0.270 1.710 -0.716 -0.270 -0.462 -1.225 0.193 1.756 0.662 - 31.30 13.909 13.935 13.944 -0.849 -0.490 1.796 -0.849 -0.490 -0.880 -1.525 0.416 2.094 0.905 - 31.35 13.839 13.882 13.896 -1.092 -0.613 1.727 -1.092 -0.613 -1.059 -1.885 0.670 2.275 1.132 - 31.40 13.522 13.551 13.558 -0.885 -0.449 1.409 -0.885 -0.449 -0.632 -1.246 0.397 1.485 0.726 - 31.45 13.312 13.348 13.349 -0.971 0.209 1.200 -0.971 0.209 0.250 -1.164 -0.203 1.212 0.604 - 31.50 13.789 13.808 13.811 -0.717 0.308 1.677 -0.717 0.308 0.517 -1.201 -0.221 1.710 0.663 - 31.55 13.882 13.894 13.895 -0.575 -0.178 1.770 -0.575 -0.178 -0.316 -1.018 0.103 1.747 0.535 - 31.60 13.667 13.678 13.680 -0.556 -0.244 1.554 -0.556 -0.244 -0.379 -0.865 0.136 1.392 0.477 - 31.65 13.500 13.505 13.505 -0.365 -0.094 1.387 -0.365 -0.094 -0.130 -0.506 0.034 1.033 0.262 - 31.70 13.614 13.617 13.617 -0.266 0.085 1.502 -0.266 0.085 0.128 -0.399 -0.023 1.166 0.210 - 31.75 13.573 13.584 13.585 -0.562 0.117 1.460 -0.562 0.117 0.171 -0.821 -0.066 1.230 0.420 - 31.80 13.642 13.663 13.664 -0.759 0.148 1.529 -0.759 0.148 0.227 -1.161 -0.113 1.468 0.594 - 31.85 13.503 13.515 13.520 -0.573 0.385 1.390 -0.573 0.385 0.535 -0.797 -0.221 1.204 0.492 - 31.90 13.241 13.244 13.245 -0.290 0.174 1.128 -0.290 0.174 0.197 -0.328 -0.051 0.694 0.193 - 31.95 13.071 13.073 13.076 -0.204 0.273 0.958 -0.204 0.273 0.261 -0.195 -0.056 0.517 0.165 - 32.00 13.153 13.158 13.158 -0.370 -0.004 1.040 -0.370 -0.004 -0.004 -0.385 0.002 0.609 0.192 - 32.05 13.088 13.092 13.092 -0.295 -0.033 0.976 -0.295 -0.033 -0.033 -0.288 0.010 0.520 0.145 - 32.10 13.100 13.105 13.105 -0.327 -0.147 0.988 -0.327 -0.147 -0.145 -0.323 0.048 0.552 0.179 - 32.15 13.002 13.003 13.004 -0.128 0.189 0.889 -0.128 0.189 0.168 -0.114 -0.024 0.421 0.102 - 32.20 12.965 12.966 12.966 -0.101 0.064 0.852 -0.101 0.064 0.054 -0.086 -0.006 0.370 0.051 - 32.25 12.921 12.923 12.926 -0.192 0.287 0.808 -0.192 0.287 0.232 -0.155 -0.055 0.386 0.142 - 32.30 12.921 12.926 12.941 -0.363 0.622 0.808 -0.363 0.622 0.502 -0.293 -0.225 0.586 0.312 - 32.35 13.154 13.162 13.168 -0.466 0.414 1.041 -0.466 0.414 0.431 -0.485 -0.193 0.736 0.338 - 32.40 13.426 13.427 13.428 -0.164 0.142 1.313 -0.164 0.142 0.186 -0.216 -0.023 0.886 0.143 - 32.45 13.157 13.160 13.171 0.283 0.541 1.044 0.283 0.541 0.565 0.296 0.153 0.732 0.328 - 32.50 13.155 13.156 13.183 0.156 0.841 1.042 0.156 0.841 0.876 0.162 0.131 0.909 0.450 - 32.55 13.161 13.162 13.183 -0.156 0.734 1.049 -0.156 0.734 0.770 -0.164 -0.115 0.831 0.398 - 32.60 13.313 13.313 13.332 -0.092 0.706 1.200 -0.092 0.706 0.847 -0.110 -0.065 0.973 0.428 - 32.65 13.560 13.564 13.581 -0.322 0.690 1.447 -0.322 0.690 0.998 -0.466 -0.222 1.337 0.562 - 32.70 13.633 13.634 13.634 -0.124 0.133 1.520 -0.124 0.133 0.203 -0.188 -0.017 1.172 0.139 - 32.75 13.413 13.414 13.415 0.157 0.118 1.300 0.157 0.118 0.154 0.204 0.019 0.865 0.128 - 32.80 13.419 13.422 13.431 0.272 0.502 1.306 0.272 0.502 0.656 0.356 0.137 1.016 0.379 - 32.85 13.604 13.612 13.621 0.452 0.510 1.492 0.452 0.510 0.761 0.674 0.231 1.345 0.521 - 32.90 13.653 13.671 13.676 0.702 0.378 1.540 0.702 0.378 0.583 1.081 0.266 1.504 0.628 - 32.95 13.695 13.715 13.715 0.750 0.033 1.582 0.750 0.033 0.052 1.186 0.024 1.533 0.594 - 33.00 13.516 13.572 13.578 1.227 0.434 1.403 1.227 0.434 0.609 1.721 0.532 1.831 0.951 - 33.05 13.361 13.403 13.403 1.062 0.043 1.248 1.062 0.043 0.054 1.325 0.046 1.343 0.663 - 33.10 13.265 13.314 13.315 1.140 -0.105 1.152 1.140 -0.105 -0.121 1.314 -0.120 1.320 0.663 - 33.15 13.065 13.091 13.092 0.838 0.034 0.952 0.838 0.034 0.033 0.798 0.029 0.805 0.399 - 33.20 13.170 13.186 13.186 0.640 -0.017 1.057 0.640 -0.017 -0.018 0.677 -0.011 0.764 0.339 - 33.25 12.928 12.943 12.953 0.627 0.513 0.815 0.627 0.513 0.418 0.511 0.322 0.660 0.367 - 33.30 13.259 13.271 13.281 0.565 0.513 1.146 0.565 0.513 0.588 0.648 0.290 0.948 0.461 - 33.35 13.202 13.203 13.203 0.135 0.136 1.089 0.135 0.136 0.148 0.147 0.018 0.611 0.105 - 33.40 13.109 13.109 13.109 0.045 0.040 0.996 0.045 0.040 0.040 0.044 0.002 0.498 0.030 - 33.45 13.150 13.150 13.151 -0.092 0.177 1.037 -0.092 0.177 0.184 -0.095 -0.016 0.557 0.104 - 33.50 13.066 13.071 13.085 -0.364 0.616 0.953 -0.364 0.616 0.587 -0.347 -0.224 0.710 0.359 - 33.55 13.131 13.136 13.140 -0.390 0.297 1.018 -0.390 0.297 0.302 -0.397 -0.116 0.638 0.256 - 33.60 12.970 12.986 12.987 -0.632 0.181 0.858 -0.632 0.181 0.155 -0.542 -0.114 0.584 0.288 - 33.65 12.784 12.788 12.791 -0.293 0.305 0.671 -0.293 0.305 0.205 -0.196 -0.089 0.315 0.149 - 33.70 12.492 12.492 12.494 -0.003 0.205 0.380 -0.003 0.205 0.078 -0.001 -0.001 0.093 0.039 - 33.75 12.415 12.417 12.417 -0.250 0.036 0.302 -0.250 0.036 0.011 -0.076 -0.009 0.078 0.038 - 33.80 12.425 12.426 12.427 -0.171 -0.144 0.312 -0.171 -0.144 -0.045 -0.053 0.025 0.074 0.037 - 33.85 12.700 12.711 12.713 -0.536 -0.204 0.587 -0.536 -0.204 -0.120 -0.315 0.109 0.337 0.177 - 33.90 12.552 12.560 12.560 -0.435 0.040 0.440 -0.435 0.040 0.017 -0.191 -0.017 0.192 0.096 - 33.95 12.752 12.771 12.778 -0.703 0.415 0.639 -0.703 0.415 0.265 -0.449 -0.292 0.538 0.299 - 34.00 12.852 12.867 12.881 -0.630 0.593 0.739 -0.630 0.593 0.438 -0.465 -0.373 0.647 0.370 - 34.05 12.710 12.715 12.719 -0.348 0.321 0.598 -0.348 0.321 0.192 -0.208 -0.111 0.290 0.152 - 34.10 12.321 12.322 12.323 -0.137 0.178 0.208 -0.137 0.178 0.037 -0.029 -0.024 0.047 0.026 - 34.15 12.127 12.129 12.129 -0.203 0.041 0.014 -0.203 0.041 0.001 -0.003 -0.008 0.022 0.004 - 34.20 12.215 12.215 12.215 -0.043 -0.010 0.102 -0.043 -0.010 -0.001 -0.004 0.000 0.006 0.002 - 34.25 12.514 12.514 12.514 0.029 -0.037 0.401 0.029 -0.037 -0.015 0.012 -0.001 0.082 0.010 - 34.30 12.631 12.631 12.632 0.097 0.129 0.518 0.097 0.129 0.067 0.050 0.012 0.147 0.042 - 34.35 12.677 12.679 12.685 0.249 0.383 0.564 0.249 0.383 0.216 0.140 0.095 0.263 0.137 - 34.40 12.786 12.788 12.794 0.225 0.379 0.674 0.225 0.379 0.255 0.152 0.085 0.324 0.155 - 34.45 13.180 13.180 13.180 0.012 0.035 1.067 0.012 0.035 0.037 0.013 0.000 0.570 0.020 - 34.50 13.160 13.160 13.163 -0.044 -0.273 1.047 -0.044 -0.273 -0.286 -0.047 0.012 0.587 0.145 - 34.55 13.303 13.303 13.303 -0.063 0.029 1.190 -0.063 0.029 0.034 -0.075 -0.002 0.710 0.041 - 34.60 13.372 13.372 13.372 0.033 -0.025 1.260 0.033 -0.025 -0.031 0.042 -0.001 0.794 0.026 - 34.65 13.463 13.466 13.467 0.274 0.123 1.350 0.274 0.123 0.166 0.370 0.034 0.957 0.203 - 34.70 13.386 13.390 13.390 0.344 0.042 1.273 0.344 0.042 0.053 0.438 0.014 0.871 0.221 - 34.75 13.370 13.374 13.376 0.347 -0.189 1.257 0.347 -0.189 -0.238 0.436 -0.066 0.868 0.251 - 34.80 13.503 13.514 13.514 0.528 -0.096 1.390 0.528 -0.096 -0.134 0.734 -0.051 1.110 0.374 - 34.85 13.251 13.255 13.255 0.323 -0.036 1.138 0.323 -0.036 -0.041 0.368 -0.012 0.701 0.185 - 34.90 13.267 13.269 13.269 -0.222 -0.100 1.154 -0.222 -0.100 -0.116 -0.256 0.022 0.696 0.141 - 34.95 13.050 13.050 13.055 0.086 -0.359 0.937 0.086 -0.359 -0.336 0.081 -0.031 0.507 0.174 - 35.00 13.183 13.189 13.191 0.382 -0.216 1.071 0.382 -0.216 -0.231 0.409 -0.082 0.669 0.239 - 35.05 12.682 12.683 12.686 0.186 -0.263 0.569 0.186 -0.263 -0.150 0.106 -0.049 0.214 0.095 - 35.10 12.692 12.694 12.704 0.246 -0.497 0.579 0.246 -0.497 -0.288 0.142 -0.122 0.321 0.172 - 35.15 12.968 12.970 12.991 0.219 -0.738 0.855 0.219 -0.738 -0.631 0.187 -0.161 0.662 0.339 - 35.20 12.964 12.978 12.998 0.610 -0.718 0.851 0.610 -0.718 -0.611 0.519 -0.438 0.806 0.457 - 35.25 13.246 13.263 13.284 0.685 -0.739 1.133 0.685 -0.739 -0.837 0.776 -0.506 1.149 0.624 - 35.30 12.856 12.883 12.912 0.833 -0.857 0.744 0.833 -0.857 -0.637 0.620 -0.714 0.991 0.570 - 35.35 12.968 12.989 13.040 0.726 -1.151 0.856 0.726 -1.151 -0.985 0.621 -0.835 1.291 0.716 - 35.40 12.628 12.635 12.718 0.425 -1.444 0.515 0.425 -1.444 -0.744 0.219 -0.613 1.266 0.494 - 35.45 12.854 12.856 12.921 0.202 -1.297 0.741 0.202 -1.297 -0.961 0.150 -0.262 1.136 0.504 - 35.50 13.085 13.088 13.150 0.299 -1.274 0.972 0.299 -1.274 -1.238 0.291 -0.381 1.329 0.664 - 35.55 13.078 13.079 13.135 0.167 -1.214 0.965 0.167 -1.214 -1.172 0.161 -0.203 1.217 0.600 - 35.60 13.169 13.173 13.213 0.329 -1.029 1.056 0.329 -1.029 -1.087 0.348 -0.339 1.141 0.595 - 35.65 12.989 12.996 13.022 0.445 -0.822 0.876 0.445 -0.822 -0.720 0.390 -0.366 0.821 0.449 - 35.70 12.925 12.926 12.953 0.116 -0.839 0.812 0.116 -0.839 -0.681 0.094 -0.097 0.688 0.347 - 35.75 12.938 12.941 12.955 0.283 -0.596 0.826 0.283 -0.596 -0.492 0.234 -0.169 0.559 0.285 - 35.80 12.765 12.793 12.805 0.848 -0.558 0.652 0.848 -0.558 -0.364 0.553 -0.474 0.728 0.407 - 35.85 12.910 12.918 12.936 0.451 -0.682 0.798 0.451 -0.682 -0.544 0.359 -0.307 0.652 0.360 - 35.90 13.129 13.141 13.166 0.562 -0.810 1.016 0.562 -0.810 -0.823 0.571 -0.455 1.002 0.550 - 35.95 13.164 13.181 13.217 0.658 -0.976 1.052 0.658 -0.976 -1.027 0.692 -0.642 1.246 0.697 - 36.00 13.431 13.443 13.492 0.576 -1.150 1.318 0.576 -1.150 -1.515 0.760 -0.663 1.695 0.910 - 36.05 13.313 13.336 13.413 0.784 -1.438 1.200 0.784 -1.438 -1.726 0.940 -1.127 2.061 1.133 - 36.10 13.223 13.235 13.316 0.555 -1.464 1.111 0.555 -1.464 -1.626 0.616 -0.812 1.842 0.960 - 36.15 13.177 13.197 13.268 0.737 -1.364 1.064 0.737 -1.364 -1.451 0.784 -1.005 1.768 0.966 - 36.20 13.317 13.359 13.407 1.050 -1.138 1.204 1.050 -1.138 -1.370 1.265 -1.195 1.924 1.107 - 36.25 13.230 13.270 13.292 1.033 -0.755 1.117 1.033 -0.755 -0.844 1.154 -0.780 1.442 0.814 - 36.30 13.206 13.250 13.264 1.074 -0.605 1.093 1.074 -0.605 -0.661 1.175 -0.650 1.358 0.748 - 36.35 13.155 13.206 13.227 1.162 -0.747 1.042 1.162 -0.747 -0.779 1.211 -0.869 1.498 0.841 - 36.40 13.154 13.207 13.233 1.180 -0.841 1.041 1.180 -0.841 -0.875 1.228 -0.992 1.591 0.903 - 36.45 12.957 13.045 13.069 1.512 -0.781 0.844 1.512 -0.781 -0.659 1.277 -1.180 1.805 0.930 - 36.50 13.060 13.146 13.179 1.501 -0.927 0.947 1.501 -0.927 -0.878 1.422 -1.392 2.005 1.087 - 36.55 13.031 13.092 13.118 1.263 -0.826 0.918 1.263 -0.826 -0.759 1.160 -1.044 1.561 0.868 - 36.60 12.852 12.893 12.900 1.019 -0.435 0.740 1.019 -0.435 -0.322 0.754 -0.443 0.887 0.466 - 36.65 12.997 13.016 13.028 0.696 -0.569 0.885 0.696 -0.569 -0.504 0.616 -0.396 0.796 0.444 - 36.70 13.057 13.078 13.097 0.738 -0.701 0.945 0.738 -0.701 -0.662 0.697 -0.517 0.964 0.546 - 36.75 13.178 13.221 13.235 1.067 -0.592 1.065 1.067 -0.592 -0.631 1.137 -0.632 1.312 0.723 - 36.80 13.249 13.308 13.325 1.252 -0.666 1.136 1.252 -0.666 -0.757 1.422 -0.834 1.651 0.907 - 36.85 13.219 13.260 13.278 1.042 -0.678 1.106 1.042 -0.678 -0.750 1.153 -0.707 1.385 0.773 - 36.90 13.199 13.221 13.250 0.766 -0.872 1.086 0.766 -0.872 -0.947 0.831 -0.668 1.263 0.713 - 36.95 13.189 13.235 13.256 1.098 -0.756 1.076 1.098 -0.756 -0.814 1.182 -0.830 1.468 0.829 - 37.00 13.375 13.424 13.437 1.153 -0.577 1.262 1.153 -0.577 -0.729 1.455 -0.665 1.627 0.879 - 37.05 13.421 13.472 13.477 1.174 -0.372 1.308 1.174 -0.372 -0.487 1.536 -0.437 1.614 0.835 - 37.10 13.469 13.520 13.520 1.173 0.103 1.356 1.173 0.103 0.140 1.591 0.121 1.613 0.801 - 37.15 13.424 13.482 13.486 1.245 0.357 1.311 1.245 0.357 0.468 1.633 0.444 1.698 0.878 - 37.20 13.502 13.552 13.562 1.161 0.502 1.390 1.161 0.502 0.698 1.614 0.583 1.766 0.926 - 37.25 13.531 13.560 13.573 0.886 0.593 1.418 0.886 0.593 0.841 1.257 0.525 1.574 0.800 - 37.30 13.664 13.691 13.719 0.866 0.861 1.551 0.866 0.861 1.335 1.344 0.746 1.949 1.018 - 37.35 13.669 13.686 13.718 0.678 0.951 1.556 0.678 0.951 1.479 1.055 0.645 1.892 0.964 - 37.40 13.968 13.980 14.001 0.574 0.773 1.855 0.574 0.773 1.435 1.064 0.444 2.184 0.920 - 37.45 13.882 13.893 13.905 0.548 0.592 1.769 0.548 0.592 1.047 0.969 0.324 1.890 0.731 - 37.50 13.901 13.906 13.914 0.399 0.447 1.788 0.399 0.447 0.798 0.713 0.178 1.778 0.543 - 37.55 13.907 13.923 13.927 0.686 0.297 1.794 0.686 0.297 0.533 1.231 0.204 1.888 0.678 - 37.60 13.919 13.946 13.947 0.867 0.171 1.806 0.867 0.171 0.308 1.567 0.148 2.022 0.802 - 37.65 13.605 13.631 13.636 0.841 0.398 1.492 0.841 0.398 0.594 1.254 0.335 1.545 0.714 - 37.70 13.730 13.768 13.769 1.021 -0.089 1.618 1.021 -0.089 -0.145 1.651 -0.091 1.834 0.830 - 37.75 13.537 13.556 13.557 0.719 -0.138 1.425 0.719 -0.138 -0.197 1.024 -0.099 1.283 0.524 - 37.80 13.550 13.588 13.593 1.026 -0.347 1.437 1.026 -0.347 -0.498 1.475 -0.356 1.619 0.798 - 37.85 14.071 14.098 14.110 0.880 -0.569 1.958 0.880 -0.569 -1.113 1.723 -0.500 2.466 1.056 - 37.90 14.110 14.149 14.165 1.051 -0.673 1.998 1.051 -0.673 -1.345 2.100 -0.708 2.774 1.296 - 37.95 14.320 14.358 14.364 1.036 -0.408 2.208 1.036 -0.408 -0.902 2.287 -0.423 3.057 1.247 - 38.00 14.213 14.265 14.275 1.218 -0.555 2.100 1.218 -0.555 -1.165 2.558 -0.676 3.100 1.445 - 38.05 14.183 14.291 14.301 1.758 -0.537 2.070 1.758 -0.537 -1.111 3.639 -0.943 3.832 1.960 - 38.10 14.028 14.163 14.168 1.948 -0.384 1.916 1.948 -0.384 -0.735 3.732 -0.748 3.807 1.939 - 38.15 14.275 14.410 14.428 1.963 -0.721 2.163 1.963 -0.721 -1.560 4.244 -1.416 4.525 2.369 - 38.20 13.947 14.047 14.062 1.674 -0.648 1.834 1.674 -0.648 -1.188 3.070 -1.084 3.293 1.733 - 38.25 14.099 14.164 14.179 1.364 -0.649 1.986 1.364 -0.649 -1.289 2.708 -0.885 3.112 1.564 - 38.30 14.120 14.187 14.201 1.380 -0.632 2.007 1.380 -0.632 -1.268 2.770 -0.872 3.166 1.584 - 38.35 14.049 14.103 14.114 1.232 -0.555 1.936 1.232 -0.555 -1.075 2.386 -0.684 2.788 1.352 - 38.40 14.271 14.313 14.332 1.099 -0.729 2.158 1.099 -0.729 -1.574 2.371 -0.801 3.199 1.478 - 38.45 14.412 14.474 14.490 1.347 -0.670 2.299 1.347 -0.670 -1.541 3.095 -0.903 3.774 1.787 - 38.50 13.990 14.030 14.042 1.060 -0.576 1.877 1.060 -0.576 -1.082 1.989 -0.611 2.490 1.173 - 38.55 14.039 14.066 14.089 0.868 -0.799 1.926 0.868 -0.799 -1.540 1.672 -0.694 2.551 1.188 - 38.60 13.743 13.786 13.807 1.092 -0.753 1.630 1.092 -0.753 -1.228 1.780 -0.822 2.209 1.157 - 38.65 13.739 13.778 13.789 1.033 -0.542 1.627 1.033 -0.542 -0.881 1.680 -0.560 2.003 0.989 - 38.70 13.914 13.960 13.968 1.133 -0.464 1.801 1.133 -0.464 -0.836 2.041 -0.526 2.371 1.134 - 38.75 13.624 13.673 13.682 1.166 -0.495 1.511 1.166 -0.495 -0.748 1.761 -0.577 1.943 0.999 - 38.80 13.697 13.743 13.749 1.123 -0.379 1.585 1.123 -0.379 -0.601 1.779 -0.426 1.958 0.963 - 38.85 14.038 14.068 14.083 0.917 -0.660 1.925 0.917 -0.660 -1.270 1.765 -0.605 2.491 1.129 - 38.90 13.875 13.919 13.942 1.114 -0.799 1.762 1.114 -0.799 -1.409 1.963 -0.891 2.493 1.288 - 38.95 13.824 13.840 13.869 0.671 -0.895 1.711 0.671 -0.895 -1.532 1.149 -0.601 2.090 1.003 - 39.00 13.849 13.859 13.891 0.531 -0.943 1.736 0.531 -0.943 -1.638 0.921 -0.501 2.093 0.973 - 39.05 14.024 14.037 14.081 0.595 -1.112 1.911 0.595 -1.112 -2.125 1.137 -0.661 2.621 1.249 - 39.10 14.339 14.340 14.381 0.147 -1.084 2.226 0.147 -1.084 -2.413 0.327 -0.159 3.076 1.220 - 39.15 14.293 14.296 14.320 0.294 -0.836 2.180 0.294 -0.836 -1.823 0.641 -0.246 2.769 0.974 - 39.20 14.270 14.273 14.284 0.291 -0.575 2.157 0.291 -0.575 -1.241 0.628 -0.167 2.534 0.700 - 39.25 14.471 14.473 14.510 0.240 -1.033 2.358 0.240 -1.033 -2.435 0.566 -0.248 3.342 1.256 - 39.30 14.354 14.358 14.436 0.308 -1.502 2.242 0.308 -1.502 -3.366 0.691 -0.463 3.687 1.734 - 39.35 14.482 14.485 14.612 0.252 -1.925 2.370 0.252 -1.925 -4.562 0.597 -0.485 4.692 2.313 - 39.40 14.417 14.422 14.545 0.364 -1.891 2.304 0.364 -1.891 -4.358 0.839 -0.688 4.509 2.245 - 39.45 14.374 14.384 14.493 0.551 -1.772 2.261 0.551 -1.772 -4.007 1.245 -0.976 4.278 2.154 - 39.50 14.622 14.630 14.754 0.475 -1.905 2.510 0.475 -1.905 -4.781 1.191 -0.904 5.076 2.505 - 39.55 14.490 14.506 14.630 0.670 -1.902 2.377 0.670 -1.902 -4.523 1.592 -1.274 4.860 2.481 - 39.60 14.522 14.534 14.655 0.592 -1.877 2.409 0.592 -1.877 -4.523 1.425 -1.110 4.840 2.435 - 39.65 14.461 14.472 14.563 0.589 -1.618 2.348 0.589 -1.618 -3.799 1.382 -0.953 4.238 2.077 - 39.70 14.701 14.731 14.816 0.926 -1.589 2.589 0.926 -1.589 -4.113 2.397 -1.471 5.041 2.491 - 39.75 14.468 14.483 14.607 0.664 -1.900 2.355 0.664 -1.900 -4.475 1.564 -1.262 4.799 2.453 - 39.80 14.286 14.292 14.389 0.411 -1.672 2.173 0.411 -1.672 -3.632 0.893 -0.687 3.842 1.901 - 39.85 14.098 14.101 14.167 0.312 -1.358 1.985 0.312 -1.358 -2.695 0.619 -0.423 2.941 1.399 - 39.90 13.842 13.862 13.909 0.740 -1.151 1.729 0.740 -1.151 -1.990 1.280 -0.852 2.431 1.257 - 39.95 13.940 13.953 14.033 0.594 -1.497 1.828 0.594 -1.497 -2.736 1.086 -0.890 2.967 1.538 - 40.00 13.734 13.735 13.802 0.188 -1.356 1.621 0.188 -1.356 -2.198 0.304 -0.254 2.250 1.117 - 40.05 14.030 14.031 14.093 0.193 -1.318 1.917 0.193 -1.318 -2.527 0.370 -0.255 2.725 1.283 - 40.10 14.073 14.074 14.112 -0.149 -1.039 1.960 -0.149 -1.039 -2.037 -0.292 0.155 2.472 1.032 - 40.15 14.375 14.376 14.406 0.171 -0.924 2.262 0.171 -0.924 -2.091 0.388 -0.158 3.000 1.066 - 40.20 14.493 14.493 14.542 -0.122 -1.196 2.380 -0.122 -1.196 -2.846 -0.289 0.145 3.554 1.432 - 40.25 14.745 14.747 14.783 -0.226 -1.037 2.632 -0.226 -1.037 -2.731 -0.594 0.234 4.028 1.402 - 40.30 14.762 14.770 14.802 -0.466 -0.974 2.650 -0.466 -0.974 -2.580 -1.235 0.454 4.093 1.448 - 40.35 14.661 14.669 14.684 -0.490 -0.659 2.548 -0.490 -0.659 -1.680 -1.248 0.323 3.584 1.059 - 40.40 14.687 14.694 14.710 -0.426 -0.691 2.575 -0.426 -0.691 -1.779 -1.098 0.295 3.644 1.056 - 40.45 14.620 14.631 14.641 -0.565 -0.532 2.508 -0.565 -0.532 -1.333 -1.417 0.300 3.445 0.984 - 40.50 14.714 14.723 14.736 -0.514 -0.621 2.601 -0.514 -0.621 -1.615 -1.338 0.319 3.708 1.061 - 40.55 14.473 14.477 14.477 -0.309 -0.133 2.361 -0.309 -0.133 -0.314 -0.730 0.041 2.843 0.398 - 40.60 14.506 14.508 14.510 -0.225 -0.238 2.394 -0.225 -0.238 -0.570 -0.537 0.053 2.918 0.392 - 40.65 14.751 14.751 14.753 -0.001 -0.272 2.638 -0.001 -0.272 -0.718 -0.004 0.000 3.516 0.359 - 40.70 14.959 14.959 14.964 0.075 -0.388 2.846 0.075 -0.388 -1.105 0.214 -0.029 4.129 0.563 - 40.75 14.781 14.790 14.793 -0.516 -0.320 2.668 -0.516 -0.320 -0.853 -1.378 0.165 3.744 0.814 - 40.80 14.393 14.395 14.396 -0.236 -0.192 2.280 -0.236 -0.192 -0.437 -0.538 0.045 2.646 0.347 - 40.85 14.425 14.429 14.429 -0.322 0.014 2.312 -0.322 0.014 0.032 -0.744 -0.005 2.725 0.372 - 40.90 14.710 14.710 14.710 -0.089 -0.012 2.597 -0.089 -0.012 -0.031 -0.231 0.001 3.376 0.116 - 40.95 14.691 14.691 14.691 -0.066 0.078 2.578 -0.066 0.078 0.202 -0.171 -0.005 3.328 0.132 - 41.00 14.655 14.656 14.662 -0.171 0.442 2.542 -0.171 0.442 1.123 -0.434 -0.076 3.343 0.603 - 41.05 14.640 14.641 14.656 -0.206 0.653 2.527 -0.206 0.653 1.650 -0.521 -0.135 3.427 0.868 - 41.10 14.504 14.507 14.526 -0.290 0.736 2.392 -0.290 0.736 1.759 -0.693 -0.213 3.173 0.951 - 41.15 14.150 14.150 14.166 -0.067 0.674 2.037 -0.067 0.674 1.374 -0.136 -0.045 2.304 0.691 - 41.20 13.865 13.865 13.884 -0.067 0.735 1.752 -0.067 0.735 1.288 -0.118 -0.050 1.807 0.647 - 41.25 13.949 13.951 13.985 -0.233 0.974 1.836 -0.233 0.974 1.788 -0.427 -0.226 2.187 0.926 - 41.30 13.964 13.964 13.986 0.088 0.788 1.851 0.088 0.788 1.459 0.162 0.069 2.028 0.735 - 41.35 13.449 13.457 13.484 0.470 0.853 1.336 0.470 0.853 1.139 0.628 0.401 1.366 0.681 - 41.40 13.379 13.387 13.399 0.478 0.559 1.266 0.478 0.559 0.707 0.605 0.267 1.072 0.484 - 41.45 13.255 13.255 13.285 -0.003 0.890 1.142 -0.003 0.890 1.017 -0.003 -0.002 1.048 0.508 - 41.50 13.088 13.089 13.108 -0.136 0.706 0.975 -0.136 0.706 0.689 -0.133 -0.096 0.734 0.354 - 41.55 13.287 13.287 13.315 -0.038 0.859 1.175 -0.038 0.859 1.009 -0.045 -0.033 1.059 0.505 - 41.60 13.209 13.212 13.214 -0.266 0.269 1.096 -0.266 0.269 0.295 -0.292 -0.072 0.672 0.211 - 41.65 13.366 13.369 13.370 -0.286 -0.146 1.253 -0.286 -0.146 -0.184 -0.359 0.042 0.837 0.203 - 41.70 13.241 13.242 13.242 -0.140 -0.067 1.129 -0.140 -0.067 -0.075 -0.158 0.009 0.649 0.088 - 41.75 13.166 13.166 13.167 0.029 0.157 1.053 0.029 0.157 0.165 0.031 0.005 0.567 0.084 - 41.80 13.118 13.118 13.119 0.092 -0.182 1.005 0.092 -0.182 -0.183 0.092 -0.017 0.526 0.103 - 41.85 12.999 12.999 13.008 0.002 -0.485 0.887 0.002 -0.485 -0.430 0.001 -0.001 0.511 0.215 - 41.90 13.269 13.269 13.270 0.097 -0.149 1.156 0.097 -0.149 -0.172 0.112 -0.014 0.684 0.103 - 41.95 13.283 13.284 13.286 0.205 0.190 1.170 0.205 0.190 0.222 0.240 0.039 0.724 0.165 - 42.00 13.158 13.158 13.160 -0.054 0.197 1.046 -0.054 0.197 0.206 -0.057 -0.011 0.568 0.107 - 42.05 12.833 12.835 12.835 0.208 0.130 0.720 0.208 0.130 0.094 0.150 0.027 0.290 0.089 - 42.10 12.658 12.658 12.661 -0.105 -0.271 0.545 -0.105 -0.271 -0.148 -0.057 0.029 0.191 0.081 - 42.15 12.572 12.572 12.583 -0.014 -0.529 0.459 -0.014 -0.529 -0.243 -0.007 0.008 0.246 0.122 - 42.20 12.448 12.449 12.451 0.191 -0.185 0.335 0.191 -0.185 -0.062 0.064 -0.035 0.091 0.048 - 42.25 12.517 12.523 12.525 0.384 -0.234 0.405 0.384 -0.234 -0.095 0.155 -0.090 0.183 0.101 - 42.30 12.577 12.584 12.584 0.427 -0.015 0.464 0.427 -0.015 -0.007 0.198 -0.007 0.199 0.099 - 42.35 12.833 12.841 12.841 0.461 -0.012 0.720 0.461 -0.012 -0.008 0.332 -0.005 0.366 0.166 - 42.40 12.707 12.734 12.734 0.816 0.043 0.595 0.816 0.043 0.025 0.485 0.035 0.511 0.244 - 42.45 12.463 12.505 12.507 1.032 0.219 0.350 1.032 0.219 0.077 0.361 0.227 0.618 0.217 - 42.50 12.498 12.530 12.536 0.891 0.393 0.385 0.891 0.393 0.151 0.343 0.350 0.549 0.256 - 42.55 12.622 12.646 12.651 0.787 0.356 0.509 0.787 0.356 0.181 0.401 0.280 0.503 0.261 - 42.60 12.613 12.649 12.655 0.950 0.399 0.500 0.950 0.399 0.200 0.475 0.379 0.656 0.320 - 42.65 12.955 12.975 12.975 0.723 -0.135 0.842 0.723 -0.135 -0.114 0.608 -0.098 0.625 0.313 - 42.70 12.976 12.991 12.992 0.639 -0.097 0.863 0.639 -0.097 -0.084 0.551 -0.062 0.581 0.280 - 42.75 12.753 12.776 12.776 0.761 -0.001 0.640 0.761 -0.001 -0.001 0.488 -0.001 0.495 0.244 - 42.80 12.559 12.610 12.610 1.136 -0.089 0.446 1.136 -0.089 -0.040 0.506 -0.101 0.748 0.259 - 42.85 12.735 12.774 12.778 0.993 0.326 0.622 0.993 0.326 0.203 0.618 0.323 0.739 0.363 - 42.90 12.679 12.706 12.707 0.834 0.161 0.566 0.834 0.161 0.091 0.472 0.134 0.521 0.250 - 42.95 12.504 12.556 12.559 1.143 0.235 0.391 1.143 0.235 0.092 0.447 0.269 0.757 0.265 - 43.00 12.626 12.681 12.686 1.188 0.343 0.513 1.188 0.343 0.176 0.609 0.408 0.896 0.377 - 43.05 13.043 13.098 13.098 1.203 0.047 0.930 1.203 0.047 0.044 1.119 0.056 1.158 0.561 - 43.10 13.164 13.211 13.213 1.104 -0.261 1.052 1.104 -0.261 -0.275 1.161 -0.289 1.196 0.614 - 43.15 12.909 12.933 12.946 0.797 -0.572 0.796 0.797 -0.572 -0.455 0.634 -0.455 0.798 0.452 - 43.20 12.870 12.879 12.887 0.501 -0.458 0.757 0.501 -0.458 -0.347 0.379 -0.229 0.517 0.281 - 43.25 13.033 13.036 13.039 0.284 -0.275 0.921 0.284 -0.275 -0.253 0.261 -0.078 0.502 0.186 - 43.30 13.163 13.177 13.181 0.612 -0.311 1.050 0.612 -0.311 -0.327 0.642 -0.190 0.787 0.373 - 43.35 13.228 13.246 13.246 0.687 -0.013 1.115 0.687 -0.013 -0.015 0.766 -0.009 0.858 0.383 - 43.40 12.936 12.940 12.940 0.314 0.002 0.823 0.314 0.002 0.001 0.258 0.001 0.388 0.129 - 43.45 12.751 12.751 12.754 0.001 0.263 0.639 0.001 0.263 0.168 0.001 0.000 0.239 0.084 - 43.50 13.021 13.022 13.023 0.161 -0.088 0.909 0.161 -0.088 -0.080 0.146 -0.014 0.430 0.083 - 43.55 12.833 12.834 12.836 0.160 0.218 0.720 0.160 0.218 0.157 0.115 0.035 0.296 0.099 - 43.60 12.686 12.688 12.692 0.211 0.335 0.573 0.211 0.335 0.192 0.121 0.071 0.242 0.119 - 43.65 12.493 12.493 12.495 0.013 0.225 0.380 0.013 0.225 0.086 0.005 0.003 0.098 0.043 - 43.70 11.970 11.970 11.974 -0.069 0.304 -0.143 -0.069 0.304 -0.043 0.010 -0.021 0.059 0.025 - 43.75 11.635 11.635 11.638 -0.063 0.274 -0.478 -0.063 0.274 -0.131 0.030 -0.017 0.154 0.068 - 43.80 11.735 11.735 11.748 0.005 0.565 -0.378 0.005 0.565 -0.214 -0.002 0.003 0.231 0.107 - 43.85 11.832 11.833 11.847 0.159 0.567 -0.280 0.159 0.567 -0.159 -0.045 0.090 0.213 0.094 - 43.90 11.910 11.932 11.938 0.719 0.374 -0.203 0.719 0.374 -0.076 -0.146 0.268 0.348 0.157 - 43.95 11.838 11.847 11.859 0.477 0.519 -0.275 0.477 0.519 -0.143 -0.131 0.248 0.286 0.157 - 44.00 11.864 11.865 11.885 -0.100 0.683 -0.248 -0.100 0.683 -0.170 0.025 -0.068 0.269 0.092 - 44.05 11.695 11.701 11.714 -0.384 0.547 -0.418 -0.384 0.547 -0.228 0.161 -0.210 0.311 0.175 - 44.10 11.776 11.781 11.791 -0.343 0.474 -0.337 -0.343 0.474 -0.160 0.115 -0.162 0.228 0.128 - 44.15 11.731 11.746 11.754 -0.603 0.408 -0.382 -0.603 0.408 -0.156 0.230 -0.246 0.338 0.186 - 44.20 11.666 11.705 11.713 -0.954 0.458 -0.447 -0.954 0.458 -0.205 0.427 -0.437 0.660 0.322 - 44.25 11.503 11.521 11.545 -0.650 0.746 -0.610 -0.650 0.746 -0.455 0.396 -0.485 0.675 0.387 - 44.30 11.545 11.600 11.647 -1.125 1.046 -0.567 -1.125 1.046 -0.594 0.638 -1.176 1.340 0.732 - 44.35 11.804 11.848 11.949 -1.019 1.553 -0.309 -1.019 1.553 -0.480 0.315 -1.583 1.774 0.842 - 44.40 12.000 12.013 12.089 -0.570 1.350 -0.113 -0.570 1.350 -0.153 0.064 -0.770 1.081 0.394 - 44.45 11.982 11.985 12.014 -0.256 0.842 -0.131 -0.256 0.842 -0.110 0.034 -0.216 0.396 0.122 - 44.50 12.128 12.132 12.145 -0.345 0.555 0.015 -0.345 0.555 0.008 -0.005 -0.191 0.213 0.096 - 44.55 12.247 12.254 12.257 -0.397 0.266 0.135 -0.397 0.266 0.036 -0.053 -0.106 0.123 0.062 - 44.60 11.954 11.960 11.960 -0.362 -0.104 -0.158 -0.362 -0.104 0.016 0.057 0.037 0.083 0.035 - 44.65 11.978 11.990 11.990 -0.520 -0.082 -0.134 -0.520 -0.082 0.011 0.070 0.043 0.148 0.041 - 44.70 12.388 12.396 12.397 -0.446 -0.123 0.275 -0.446 -0.123 -0.034 -0.123 0.055 0.145 0.069 - 44.75 12.287 12.298 12.300 -0.515 -0.228 0.174 -0.515 -0.228 -0.040 -0.090 0.117 0.174 0.076 - 44.80 12.309 12.316 12.321 -0.407 -0.344 0.196 -0.407 -0.344 -0.068 -0.080 0.140 0.161 0.087 - 44.85 12.220 12.220 12.222 0.069 -0.230 0.107 0.069 -0.230 -0.025 0.007 -0.016 0.035 0.015 - 44.90 12.003 12.007 12.008 -0.321 -0.133 -0.110 -0.321 -0.133 0.015 0.035 0.043 0.067 0.029 - 44.95 12.421 12.433 12.433 -0.541 0.048 0.308 -0.541 0.048 0.015 -0.167 -0.026 0.195 0.085 - 45.00 12.469 12.473 12.481 -0.342 -0.432 0.356 -0.342 -0.432 -0.154 -0.122 0.148 0.215 0.123 - 45.05 12.085 12.086 12.094 -0.158 -0.437 -0.028 -0.158 -0.437 0.012 0.004 0.069 0.108 0.035 - 45.10 12.240 12.254 12.255 -0.587 -0.090 0.128 -0.587 -0.090 -0.011 -0.075 0.053 0.185 0.046 - 45.15 12.262 12.271 12.271 -0.454 0.046 0.150 -0.454 0.046 0.007 -0.068 -0.021 0.115 0.036 - 45.20 12.469 12.473 12.473 -0.294 0.028 0.356 -0.294 0.028 0.010 -0.105 -0.008 0.107 0.053 - 45.25 12.444 12.457 12.457 -0.572 -0.053 0.331 -0.572 -0.053 -0.018 -0.189 0.031 0.220 0.096 - 45.30 12.302 12.309 12.309 -0.406 -0.106 0.189 -0.406 -0.106 -0.020 -0.077 0.043 0.106 0.045 - 45.35 12.068 12.076 12.079 -0.451 -0.269 -0.045 -0.451 -0.269 0.012 0.020 0.121 0.139 0.062 - 45.40 11.917 11.933 11.940 -0.623 -0.406 -0.196 -0.623 -0.406 0.080 0.122 0.253 0.296 0.146 - 45.45 12.037 12.059 12.061 -0.724 -0.245 -0.076 -0.724 -0.245 0.019 0.055 0.177 0.295 0.093 - 45.50 11.906 11.941 11.949 -0.913 -0.448 -0.207 -0.913 -0.448 0.093 0.189 0.409 0.538 0.230 - 45.55 12.032 12.075 12.094 -1.021 -0.672 -0.081 -1.021 -0.672 0.054 0.083 0.686 0.750 0.346 - 45.60 12.137 12.189 12.191 -1.128 -0.183 0.024 -1.128 -0.183 -0.004 -0.027 0.207 0.653 0.104 - 45.65 12.234 12.263 12.265 -0.841 -0.209 0.121 -0.841 -0.209 -0.025 -0.102 0.176 0.383 0.102 - 45.70 11.957 11.998 12.003 -1.001 -0.329 -0.156 -1.001 -0.329 0.051 0.156 0.329 0.567 0.184 - 45.75 11.949 12.000 12.000 -1.102 -0.095 -0.164 -1.102 -0.095 0.016 0.180 0.105 0.625 0.104 - 45.80 11.749 11.780 11.780 -0.849 0.013 -0.364 -0.849 0.013 -0.005 0.309 -0.011 0.427 0.155 - 45.85 11.954 11.965 11.965 -0.498 -0.134 -0.158 -0.498 -0.134 0.021 0.079 0.067 0.146 0.053 - 45.90 11.834 11.848 11.848 -0.563 -0.089 -0.279 -0.563 -0.089 0.025 0.157 0.050 0.201 0.083 - 45.95 11.726 11.750 11.750 -0.755 0.025 -0.387 -0.755 0.025 -0.010 0.292 -0.019 0.360 0.147 - 46.00 11.847 11.885 11.885 -0.951 0.090 -0.266 -0.951 0.090 -0.024 0.253 -0.086 0.492 0.134 - 46.05 11.668 11.696 11.696 -0.809 -0.093 -0.445 -0.809 -0.093 0.042 0.360 0.076 0.431 0.185 - 46.10 11.862 11.898 11.898 -0.929 -0.075 -0.251 -0.929 -0.075 0.019 0.233 0.070 0.466 0.122 - 46.15 11.918 11.943 11.944 -0.774 -0.150 -0.195 -0.774 -0.150 0.029 0.151 0.116 0.330 0.096 - 46.20 11.932 11.962 11.962 -0.834 -0.101 -0.180 -0.834 -0.101 0.018 0.150 0.085 0.369 0.087 - 46.25 11.750 11.777 11.780 -0.795 -0.279 -0.363 -0.795 -0.279 0.101 0.289 0.222 0.421 0.189 - 46.30 11.380 11.405 11.408 -0.761 -0.263 -0.733 -0.761 -0.263 0.193 0.558 0.200 0.593 0.312 - 46.35 11.350 11.389 11.389 -0.942 -0.031 -0.762 -0.942 -0.031 0.024 0.718 0.030 0.735 0.360 - 46.40 11.520 11.551 11.552 -0.846 0.174 -0.593 -0.846 0.174 -0.103 0.502 -0.147 0.549 0.267 - 46.45 11.840 11.866 11.867 -0.786 -0.101 -0.272 -0.786 -0.101 0.028 0.214 0.080 0.351 0.115 - 46.50 11.696 11.744 11.747 -1.065 -0.275 -0.417 -1.065 -0.275 0.115 0.444 0.293 0.692 0.272 - 46.55 11.741 11.818 11.843 -1.348 -0.766 -0.372 -1.348 -0.766 0.285 0.501 1.033 1.271 0.591 - 46.60 11.707 11.795 11.807 -1.443 -0.530 -0.406 -1.443 -0.530 0.215 0.586 0.765 1.264 0.494 - 46.65 12.050 12.114 12.117 -1.239 -0.275 -0.063 -1.239 -0.275 0.017 0.078 0.341 0.807 0.175 - 46.70 12.210 12.273 12.278 -1.242 -0.343 0.097 -1.242 -0.343 -0.033 -0.121 0.426 0.835 0.222 - 46.75 12.314 12.372 12.373 -1.203 -0.103 0.201 -1.203 -0.103 -0.021 -0.242 0.124 0.749 0.136 - 46.80 12.508 12.553 12.555 -1.063 0.234 0.395 -1.063 0.234 0.092 -0.420 -0.249 0.670 0.248 - 46.85 12.682 12.709 12.709 -0.820 -0.003 0.569 -0.820 -0.003 -0.002 -0.467 0.002 0.498 0.233 - 46.90 12.470 12.520 12.520 -1.120 0.105 0.357 -1.120 0.105 0.038 -0.400 -0.118 0.697 0.209 - 46.95 12.766 12.783 12.789 -0.659 0.389 0.653 -0.659 0.389 0.254 -0.430 -0.257 0.506 0.281 - 47.00 12.719 12.724 12.727 -0.340 -0.296 0.606 -0.340 -0.296 -0.179 -0.206 0.101 0.286 0.146 - 47.05 12.244 12.247 12.247 0.255 -0.034 0.131 0.255 -0.034 -0.004 0.033 -0.009 0.042 0.017 - 47.10 12.380 12.381 12.383 0.157 -0.260 0.267 0.157 -0.260 -0.069 0.042 -0.041 0.082 0.045 - 47.15 12.451 12.451 12.454 -0.024 -0.259 0.338 -0.024 -0.259 -0.088 -0.008 0.006 0.091 0.044 - 47.20 12.631 12.644 12.645 0.573 -0.186 0.518 0.573 -0.186 -0.096 0.297 -0.106 0.316 0.165 - 47.25 12.828 12.832 12.836 0.309 -0.305 0.715 0.309 -0.305 -0.218 0.221 -0.094 0.350 0.162 - 47.30 12.810 12.818 12.818 0.464 -0.039 0.697 0.464 -0.039 -0.027 0.323 -0.018 0.351 0.162 - 47.35 12.699 12.715 12.718 0.636 0.259 0.587 0.636 0.259 0.152 0.373 0.165 0.408 0.218 - 47.40 12.881 12.896 12.897 0.632 -0.131 0.768 0.632 -0.131 -0.101 0.486 -0.083 0.503 0.251 - 47.45 12.685 12.686 12.686 -0.120 -0.057 0.572 -0.120 -0.057 -0.032 -0.068 0.007 0.173 0.038 - 47.50 12.701 12.709 12.710 -0.451 0.126 0.589 -0.451 0.126 0.074 -0.266 -0.057 0.283 0.141 - 47.55 12.671 12.676 12.677 -0.365 -0.135 0.558 -0.365 -0.135 -0.075 -0.204 0.049 0.231 0.111 - 47.60 12.550 12.564 12.565 -0.591 -0.149 0.437 -0.591 -0.149 -0.065 -0.258 0.088 0.281 0.140 - 47.65 12.380 12.388 12.388 -0.443 0.017 0.267 -0.443 0.017 0.005 -0.118 -0.008 0.134 0.059 - 47.70 12.489 12.503 12.503 -0.590 0.038 0.376 -0.590 0.038 0.014 -0.222 -0.022 0.245 0.112 - 47.75 12.886 12.898 12.898 -0.540 -0.079 0.773 -0.540 -0.079 -0.061 -0.418 0.043 0.448 0.212 - 47.80 13.346 13.362 13.365 -0.648 -0.319 1.233 -0.648 -0.319 -0.393 -0.800 0.207 1.021 0.457 - 47.85 13.050 13.077 13.077 -0.842 -0.089 0.937 -0.842 -0.089 -0.083 -0.789 0.075 0.798 0.399 - 47.90 12.922 12.953 12.953 -0.903 0.056 0.809 -0.903 0.056 0.045 -0.730 -0.050 0.736 0.367 - 47.95 12.907 12.953 12.955 -1.087 0.206 0.794 -1.087 0.206 0.164 -0.863 -0.224 0.927 0.453 - 48.00 13.035 13.073 13.075 -1.000 0.178 0.922 -1.000 0.178 0.164 -0.923 -0.178 0.942 0.477 - 48.05 13.079 13.105 13.106 -0.823 0.154 0.966 -0.823 0.154 0.149 -0.795 -0.127 0.817 0.410 - 48.10 13.331 13.378 13.391 -1.124 0.587 1.218 -1.124 0.587 0.715 -1.369 -0.660 1.545 0.840 - 48.15 13.488 13.527 13.529 -1.028 0.203 1.376 -1.028 0.203 0.279 -1.414 -0.209 1.495 0.728 - 48.20 13.446 13.486 13.488 -1.039 0.221 1.334 -1.039 0.221 0.295 -1.386 -0.230 1.453 0.718 - 48.25 13.553 13.610 13.613 -1.244 0.256 1.440 -1.244 0.256 0.369 -1.792 -0.318 1.844 0.928 - 48.30 13.416 13.491 13.494 -1.420 0.279 1.303 -1.420 0.279 0.363 -1.850 -0.396 1.896 0.963 - 48.35 13.347 13.397 13.401 -1.156 0.304 1.235 -1.156 0.304 0.376 -1.428 -0.352 1.477 0.759 - 48.40 13.197 13.227 13.227 -0.884 -0.120 1.084 -0.884 -0.120 -0.130 -0.958 0.106 0.986 0.486 - 48.45 13.468 13.516 13.518 -1.144 -0.233 1.355 -1.144 -0.233 -0.316 -1.549 0.267 1.599 0.802 - 48.50 13.713 13.802 13.814 -1.565 -0.567 1.601 -1.565 -0.567 -0.908 -2.504 0.888 2.666 1.404 - 48.55 13.569 13.636 13.646 -1.342 -0.546 1.457 -1.342 -0.546 -0.796 -1.955 0.733 2.110 1.117 - 48.60 13.637 13.665 13.669 -0.874 -0.320 1.525 -0.874 -0.320 -0.488 -1.333 0.280 1.596 0.724 - 48.65 13.626 13.668 13.676 -1.080 -0.452 1.513 -1.080 -0.452 -0.684 -1.634 0.488 1.830 0.919 - 48.70 13.492 13.518 13.523 -0.840 -0.356 1.379 -0.840 -0.356 -0.490 -1.158 0.299 1.367 0.646 - 48.75 13.484 13.508 13.516 -0.811 -0.476 1.371 -0.811 -0.476 -0.652 -1.112 0.386 1.382 0.673 - 48.80 13.315 13.327 13.347 -0.577 -0.725 1.202 -0.577 -0.725 -0.871 -0.693 0.418 1.151 0.595 - 48.85 13.539 13.559 13.567 -0.731 -0.468 1.426 -0.731 -0.468 -0.668 -1.042 0.342 1.393 0.642 - 48.90 13.568 13.591 13.593 -0.795 -0.209 1.455 -0.795 -0.209 -0.304 -1.158 0.166 1.397 0.604 - 48.95 13.503 13.509 13.510 -0.411 0.126 1.390 -0.411 0.126 0.175 -0.571 -0.052 1.059 0.300 - 49.00 13.197 13.206 13.210 -0.479 0.333 1.084 -0.479 0.333 0.362 -0.519 -0.160 0.758 0.326 - 49.05 13.058 13.059 13.061 -0.081 0.237 0.946 -0.081 0.237 0.224 -0.077 -0.019 0.479 0.119 - 49.10 12.796 12.797 12.798 -0.108 0.217 0.683 -0.108 0.217 0.148 -0.074 -0.023 0.263 0.083 - 49.15 12.411 12.412 12.414 0.087 0.207 0.299 0.087 0.207 0.062 0.026 0.018 0.070 0.035 - 49.20 12.753 12.754 12.754 0.150 0.108 0.640 0.150 0.108 0.069 0.096 0.016 0.222 0.060 - 49.25 12.749 12.761 12.765 0.549 0.338 0.636 0.549 0.338 0.215 0.349 0.186 0.410 0.225 - 49.30 12.773 12.783 12.788 0.522 0.341 0.660 0.522 0.341 0.225 0.344 0.178 0.412 0.224 - 49.35 12.445 12.457 12.467 0.565 0.496 0.332 0.565 0.496 0.165 0.187 0.281 0.338 0.188 - 49.40 12.592 12.601 12.602 0.479 0.167 0.479 0.479 0.167 0.080 0.230 0.080 0.244 0.128 - 49.45 12.857 12.865 12.872 0.461 0.429 0.744 0.461 0.429 0.319 0.343 0.198 0.475 0.254 - 49.50 12.718 12.722 12.722 0.325 -0.096 0.605 0.325 -0.096 -0.058 0.196 -0.031 0.240 0.104 - 49.55 12.711 12.711 12.712 -0.004 0.153 0.598 -0.004 0.153 0.092 -0.003 -0.001 0.191 0.046 - 49.60 12.605 12.610 12.615 0.350 0.361 0.493 0.350 0.361 0.178 0.172 0.126 0.248 0.139 - 49.65 12.803 12.821 12.829 0.685 0.435 0.690 0.685 0.435 0.300 0.473 0.298 0.568 0.317 - 49.70 12.498 12.517 12.518 0.689 0.198 0.385 0.689 0.198 0.076 0.265 0.137 0.331 0.154 - 49.75 12.580 12.600 12.601 0.707 0.150 0.467 0.707 0.150 0.070 0.330 0.106 0.370 0.177 - 49.80 12.889 12.927 12.934 0.984 0.430 0.776 0.984 0.430 0.334 0.764 0.423 0.878 0.468 - 49.85 12.890 12.913 12.919 0.777 0.365 0.777 0.777 0.365 0.284 0.604 0.284 0.671 0.363 - 49.90 12.527 12.554 12.557 0.828 0.268 0.414 0.828 0.268 0.111 0.343 0.221 0.464 0.212 - 49.95 12.569 12.616 12.618 1.086 0.271 0.456 1.086 0.271 0.124 0.495 0.295 0.731 0.295 - 50.00 12.633 12.664 12.681 0.886 0.645 0.521 0.886 0.645 0.336 0.461 0.571 0.736 0.404 - 50.05 12.866 12.913 12.924 1.101 0.520 0.753 1.101 0.520 0.392 0.830 0.573 1.025 0.541 - 50.10 12.831 12.904 12.921 1.372 0.656 0.718 1.372 0.656 0.471 0.986 0.900 1.415 0.708 - 50.15 12.631 12.731 12.748 1.593 0.660 0.518 1.593 0.660 0.342 0.825 1.052 1.621 0.690 - 50.20 12.754 12.898 12.917 1.920 0.702 0.641 1.920 0.702 0.450 1.231 1.348 2.295 0.940 - 50.25 12.853 12.977 12.981 1.796 0.296 0.740 1.796 0.296 0.219 1.328 0.531 1.929 0.724 - 50.30 12.871 12.963 12.963 1.539 -0.005 0.758 1.539 -0.005 -0.004 1.167 -0.008 1.471 0.584 - 50.35 12.996 13.077 13.077 1.451 0.057 0.883 1.451 0.057 0.051 1.282 0.083 1.444 0.643 - 50.40 13.323 13.388 13.391 1.314 -0.318 1.210 1.314 -0.318 -0.385 1.591 -0.419 1.647 0.845 - 50.45 13.090 13.149 13.178 1.238 -0.874 0.977 1.238 -0.874 -0.854 1.210 -1.082 1.626 0.917 - 50.50 13.218 13.276 13.290 1.238 -0.606 1.105 1.238 -0.606 -0.670 1.369 -0.751 1.562 0.850 - 50.55 13.247 13.342 13.373 1.589 -0.905 1.135 1.589 -0.905 -1.026 1.803 -1.438 2.315 1.262 - 50.60 13.326 13.427 13.465 1.644 -1.004 1.213 1.644 -1.004 -1.219 1.995 -1.651 2.592 1.431 - 50.65 13.499 13.576 13.622 1.446 -1.123 1.386 1.446 -1.123 -1.557 2.005 -1.625 2.637 1.507 - 50.70 13.230 13.275 13.308 1.087 -0.943 1.117 1.087 -0.943 -1.053 1.214 -1.024 1.659 0.953 - 50.75 13.010 13.053 13.090 1.059 -0.980 0.897 1.059 -0.980 -0.880 0.950 -1.037 1.443 0.830 - 50.80 12.876 12.882 12.951 0.396 -1.333 0.763 0.396 -1.333 -1.017 0.302 -0.528 1.258 0.592 - 50.85 12.470 12.474 12.549 0.307 -1.368 0.358 0.307 -1.368 -0.489 0.110 -0.420 1.046 0.327 - 50.90 12.680 12.687 12.809 0.421 -1.757 0.568 0.421 -1.757 -0.997 0.239 -0.740 1.793 0.632 - 50.95 12.762 12.772 12.919 0.499 -1.944 0.649 0.499 -1.944 -1.262 0.324 -0.969 2.224 0.812 - 51.00 12.456 12.474 12.552 0.672 -1.403 0.343 0.672 -1.403 -0.481 0.230 -0.943 1.268 0.542 - 51.05 12.482 12.500 12.561 0.670 -1.235 0.369 0.670 -1.235 -0.456 0.247 -0.827 1.055 0.488 - 51.10 12.325 12.338 12.378 0.573 -0.996 0.212 0.573 -0.996 -0.211 0.121 -0.570 0.683 0.310 - 51.15 12.452 12.485 12.557 0.911 -1.341 0.339 0.911 -1.341 -0.454 0.309 -1.222 1.372 0.670 - 51.20 12.648 12.665 12.726 0.642 -1.248 0.536 0.642 -1.248 -0.668 0.344 -0.801 1.128 0.549 - 51.25 12.850 12.851 12.890 0.146 -1.002 0.737 0.146 -1.002 -0.739 0.107 -0.146 0.784 0.380 - 51.30 13.100 13.105 13.125 0.332 -0.726 0.988 0.332 -0.726 -0.717 0.328 -0.241 0.806 0.412 - 51.35 12.734 12.761 12.771 0.825 -0.519 0.621 0.825 -0.519 -0.323 0.513 -0.429 0.669 0.371 - 51.40 12.709 12.735 12.754 0.817 -0.682 0.596 0.817 -0.682 -0.407 0.487 -0.557 0.744 0.422 - 51.45 12.562 12.592 12.625 0.874 -0.913 0.449 0.874 -0.913 -0.410 0.392 -0.798 0.900 0.490 - 51.50 12.609 12.631 12.659 0.741 -0.837 0.496 0.741 -0.837 -0.416 0.368 -0.621 0.748 0.416 - 51.55 12.680 12.701 12.726 0.726 -0.802 0.567 0.726 -0.802 -0.455 0.412 -0.583 0.747 0.423 - 51.60 12.568 12.601 12.622 0.902 -0.743 0.455 0.902 -0.743 -0.338 0.411 -0.670 0.786 0.428 - 51.65 12.646 12.680 12.689 0.930 -0.483 0.533 0.930 -0.483 -0.258 0.496 -0.449 0.691 0.358 - 51.70 12.527 12.561 12.563 0.912 -0.262 0.415 0.912 -0.262 -0.109 0.378 -0.239 0.536 0.230 - 51.75 12.709 12.735 12.735 0.809 -0.096 0.596 0.809 -0.096 -0.057 0.482 -0.078 0.510 0.246 - 51.80 12.479 12.512 12.512 0.909 0.021 0.366 0.909 0.021 0.008 0.333 0.019 0.480 0.167 - 51.85 12.572 12.581 12.581 0.497 -0.034 0.459 0.497 -0.034 -0.016 0.228 -0.017 0.229 0.115 - 51.90 12.940 12.951 12.952 0.530 -0.087 0.828 0.530 -0.087 -0.072 0.438 -0.046 0.487 0.223 - 51.95 13.166 13.167 13.167 0.058 -0.028 1.054 0.058 -0.028 -0.029 0.061 -0.002 0.557 0.034 - 52.00 12.903 12.907 12.908 0.307 0.189 0.790 0.307 0.189 0.150 0.243 0.058 0.377 0.146 - 52.05 12.684 12.688 12.688 0.314 0.071 0.571 0.314 0.071 0.041 0.179 0.022 0.215 0.093 - 52.10 12.715 12.724 12.724 0.460 0.015 0.602 0.460 0.015 0.009 0.277 0.007 0.288 0.139 - 52.15 12.712 12.728 12.728 0.638 -0.043 0.600 0.638 -0.043 -0.026 0.382 -0.027 0.384 0.192 - 52.20 12.723 12.750 12.750 0.818 -0.049 0.611 0.818 -0.049 -0.030 0.500 -0.040 0.522 0.251 - 52.25 12.690 12.715 12.726 0.793 -0.522 0.577 0.793 -0.522 -0.302 0.458 -0.414 0.618 0.344 - 52.30 12.236 12.269 12.280 0.898 -0.509 0.123 0.898 -0.509 -0.063 0.111 -0.457 0.540 0.237 - 52.35 12.688 12.713 12.717 0.807 -0.307 0.575 0.807 -0.307 -0.177 0.464 -0.248 0.538 0.277 - 52.40 12.371 12.431 12.441 1.223 -0.498 0.258 1.223 -0.498 -0.128 0.315 -0.608 0.905 0.349 - 52.45 12.328 12.385 12.386 1.183 -0.146 0.215 1.183 -0.146 -0.031 0.255 -0.173 0.734 0.155 - 52.50 12.078 12.099 12.101 0.713 0.165 -0.034 0.713 0.165 -0.006 -0.025 0.117 0.268 0.060 - 52.55 12.057 12.067 12.069 0.503 0.199 -0.056 0.503 0.199 -0.011 -0.028 0.100 0.148 0.052 - 52.60 12.400 12.427 12.428 0.818 -0.138 0.288 0.818 -0.138 -0.040 0.235 -0.113 0.386 0.132 - 52.65 12.507 12.542 12.542 0.932 -0.137 0.394 0.932 -0.137 -0.054 0.367 -0.127 0.521 0.196 - 52.70 12.762 12.792 12.793 0.870 -0.177 0.649 0.870 -0.177 -0.115 0.565 -0.154 0.605 0.298 - 52.75 12.815 12.834 12.838 0.696 -0.322 0.702 0.696 -0.322 -0.226 0.488 -0.224 0.540 0.291 - 52.80 12.762 12.773 12.774 0.537 -0.116 0.649 0.537 -0.116 -0.075 0.348 -0.062 0.361 0.181 - 52.85 12.569 12.575 12.575 0.380 -0.078 0.456 0.380 -0.078 -0.036 0.173 -0.030 0.179 0.090 - 52.90 12.576 12.578 12.578 0.189 -0.074 0.464 0.189 -0.074 -0.034 0.088 -0.014 0.128 0.048 - 52.95 12.727 12.727 12.729 -0.037 0.203 0.614 -0.037 0.203 0.125 -0.023 -0.008 0.210 0.064 - 53.00 12.773 12.775 12.782 -0.250 0.413 0.660 -0.250 0.413 0.272 -0.165 -0.103 0.334 0.167 - 53.05 12.925 12.925 12.939 -0.095 0.593 0.812 -0.095 0.593 0.481 -0.077 -0.056 0.510 0.245 - 53.10 13.027 13.028 13.030 0.087 0.231 0.914 0.087 0.231 0.211 0.079 0.020 0.449 0.113 - 53.15 13.227 13.227 13.243 -0.074 0.636 1.114 -0.074 0.636 0.709 -0.082 -0.047 0.826 0.358 - 53.20 13.233 13.235 13.246 -0.277 0.540 1.120 -0.277 0.540 0.604 -0.310 -0.149 0.811 0.348 - 53.25 13.269 13.282 13.297 -0.587 0.633 1.156 -0.587 0.633 0.732 -0.679 -0.371 1.041 0.532 - 53.30 13.193 13.206 13.215 -0.573 0.507 1.080 -0.573 0.507 0.548 -0.619 -0.290 0.876 0.438 - 53.35 13.396 13.405 13.422 -0.483 0.678 1.283 -0.483 0.678 0.870 -0.619 -0.327 1.170 0.558 - 53.40 13.786 13.787 13.819 -0.147 0.952 1.673 -0.147 0.952 1.592 -0.246 -0.140 1.863 0.809 - 53.45 14.025 14.025 14.036 -0.042 0.545 1.913 -0.042 0.545 1.043 -0.080 -0.023 1.979 0.523 - 53.50 14.153 14.168 14.176 0.650 0.488 2.040 0.650 0.488 0.995 1.327 0.317 2.412 0.844 - 53.55 13.948 13.961 13.974 0.604 0.586 1.836 0.604 0.586 1.075 1.108 0.353 2.038 0.792 - 53.60 13.850 13.866 13.880 0.658 0.623 1.738 0.658 0.623 1.082 1.143 0.410 1.920 0.813 - 53.65 13.816 13.832 13.863 0.670 0.924 1.703 0.670 0.924 1.574 1.142 0.620 2.102 1.020 - 53.70 13.442 13.488 13.540 1.115 1.186 1.329 1.115 1.186 1.577 1.483 1.323 2.209 1.268 - 53.75 13.492 13.558 13.608 1.338 1.166 1.379 1.338 1.166 1.608 1.845 1.559 2.525 1.451 - 53.80 13.516 13.544 13.609 0.867 1.327 1.403 0.867 1.327 1.862 1.217 1.151 2.241 1.252 - 53.85 13.408 13.410 13.456 0.255 1.103 1.295 0.255 1.103 1.429 0.330 0.281 1.480 0.747 - 53.90 13.649 13.650 13.718 -0.119 1.367 1.536 -0.119 1.367 2.100 -0.182 -0.162 2.122 1.057 - 53.95 13.395 13.395 13.450 -0.037 1.215 1.282 -0.037 1.215 1.558 -0.048 -0.045 1.561 0.779 - 54.00 13.236 13.236 13.293 0.113 1.229 1.123 0.113 1.229 1.380 0.127 0.139 1.392 0.696 - 54.05 13.014 13.015 13.069 0.172 1.184 0.901 0.172 1.184 1.067 0.155 0.204 1.121 0.548 - 54.10 12.815 12.817 12.861 0.204 1.068 0.702 0.204 1.068 0.750 0.143 0.218 0.838 0.397 - 54.15 13.184 13.184 13.212 0.092 0.849 1.071 0.092 0.849 0.909 0.098 0.078 0.938 0.459 - 54.20 13.291 13.291 13.316 -0.008 0.822 1.178 -0.008 0.822 0.969 -0.009 -0.007 1.032 0.484 - 54.25 13.354 13.358 13.389 -0.326 0.907 1.241 -0.326 0.907 1.126 -0.404 -0.295 1.235 0.616 - 54.30 13.712 13.726 13.764 -0.611 1.026 1.600 -0.611 1.026 1.641 -0.978 -0.627 1.992 1.005 - 54.35 13.637 13.648 13.691 -0.559 1.077 1.524 -0.559 1.077 1.642 -0.852 -0.602 1.898 0.973 - 54.40 13.307 13.312 13.344 -0.351 0.929 1.194 -0.351 0.929 1.109 -0.419 -0.326 1.206 0.615 - 54.45 13.255 13.270 13.277 -0.641 0.417 1.142 -0.641 0.417 0.476 -0.732 -0.268 0.944 0.457 - 54.50 13.067 13.081 13.097 -0.588 0.651 0.955 -0.588 0.651 0.622 -0.562 -0.383 0.841 0.461 - 54.55 13.060 13.068 13.107 -0.471 1.009 0.947 -0.471 1.009 0.956 -0.446 -0.475 1.068 0.578 - 54.60 13.051 13.056 13.099 -0.354 1.059 0.938 -0.354 1.059 0.994 -0.332 -0.375 1.063 0.556 - 54.65 12.881 12.881 12.910 -0.034 0.867 0.768 -0.034 0.867 0.666 -0.026 -0.030 0.671 0.334 - 54.70 12.913 12.916 12.941 -0.263 0.803 0.801 -0.263 0.803 0.642 -0.210 -0.211 0.677 0.354 - 54.75 13.135 13.136 13.151 -0.123 0.633 1.022 -0.123 0.633 0.647 -0.125 -0.078 0.730 0.332 - 54.80 13.165 13.165 13.172 -0.045 0.430 1.052 -0.045 0.430 0.452 -0.047 -0.019 0.647 0.228 - 54.85 13.205 13.206 13.219 0.123 0.594 1.092 0.123 0.594 0.649 0.135 0.073 0.781 0.333 - 54.90 13.263 13.263 13.276 -0.103 0.584 1.150 -0.103 0.584 0.671 -0.118 -0.060 0.837 0.342 - 54.95 13.131 13.131 13.157 -0.113 0.817 1.018 -0.113 0.817 0.832 -0.116 -0.093 0.858 0.422 - 55.00 12.864 12.864 12.900 -0.025 0.964 0.751 -0.025 0.964 0.724 -0.019 -0.024 0.747 0.362 - 55.05 12.950 12.952 13.006 0.234 1.181 0.838 0.234 1.181 0.989 0.196 0.276 1.075 0.523 - 55.10 13.150 13.151 13.214 0.169 1.285 1.037 0.169 1.285 1.333 0.175 0.217 1.378 0.681 - 55.15 13.076 13.076 13.123 0.110 1.108 0.963 0.110 1.108 1.067 0.106 0.122 1.084 0.540 - 55.20 13.281 13.281 13.330 0.046 1.145 1.168 0.046 1.145 1.338 0.054 0.053 1.339 0.670 - 55.25 13.136 13.137 13.151 0.195 0.606 1.023 0.195 0.606 0.620 0.200 0.118 0.726 0.331 - 55.30 13.246 13.247 13.249 0.190 0.210 1.133 0.190 0.210 0.238 0.215 0.040 0.682 0.162 - 55.35 13.107 13.107 13.118 0.143 0.523 0.994 0.143 0.523 0.520 0.142 0.075 0.641 0.272 - 55.40 13.281 13.281 13.288 0.037 0.416 1.168 0.037 0.416 0.486 0.043 0.015 0.770 0.244 - 55.45 12.952 12.953 12.960 -0.071 0.433 0.840 -0.071 0.433 0.363 -0.060 -0.031 0.449 0.185 - 55.50 13.210 13.211 13.224 -0.188 0.588 1.097 -0.188 0.588 0.645 -0.207 -0.111 0.792 0.343 - 55.55 13.124 13.125 13.134 -0.150 0.500 1.011 -0.150 0.500 0.506 -0.152 -0.075 0.647 0.267 - 55.60 12.972 12.973 12.978 -0.171 0.348 0.859 -0.171 0.348 0.299 -0.147 -0.060 0.444 0.169 - 55.65 13.100 13.102 13.127 -0.202 0.818 0.987 -0.202 0.818 0.808 -0.199 -0.165 0.842 0.424 - 55.70 13.255 13.255 13.263 -0.021 0.457 1.142 -0.021 0.457 0.522 -0.024 -0.010 0.757 0.261 - 55.75 13.194 13.196 13.200 -0.226 0.347 1.081 -0.226 0.347 0.375 -0.245 -0.079 0.670 0.227 - 55.80 13.407 13.409 13.417 -0.257 0.456 1.294 -0.257 0.456 0.590 -0.333 -0.117 0.974 0.344 - 55.85 13.695 13.695 13.716 -0.020 0.752 1.582 -0.020 0.752 1.190 -0.031 -0.015 1.535 0.595 - 55.90 13.623 13.628 13.661 -0.379 0.950 1.510 -0.379 0.950 1.435 -0.573 -0.360 1.664 0.793 - 55.95 13.574 13.578 13.605 -0.315 0.858 1.462 -0.315 0.858 1.254 -0.460 -0.270 1.486 0.681 - 56.00 13.787 13.791 13.800 -0.352 0.488 1.674 -0.352 0.488 0.816 -0.590 -0.172 1.582 0.511 - 56.05 13.774 13.777 13.787 -0.314 0.518 1.661 -0.314 0.518 0.860 -0.522 -0.163 1.563 0.510 - 56.10 13.574 13.576 13.577 -0.217 0.189 1.461 -0.217 0.189 0.276 -0.318 -0.041 1.109 0.211 - 56.15 13.626 13.627 13.629 -0.203 0.177 1.513 -0.203 0.177 0.268 -0.307 -0.036 1.181 0.204 - 56.20 13.584 13.584 13.585 0.127 0.118 1.471 0.127 0.118 0.173 0.188 0.015 1.097 0.128 - 56.25 13.535 13.537 13.539 0.250 0.206 1.422 0.250 0.206 0.293 0.355 0.051 1.063 0.231 - 56.30 13.396 13.396 13.401 -0.089 0.346 1.283 -0.089 0.346 0.444 -0.114 -0.031 0.887 0.230 - 56.35 13.282 13.283 13.290 -0.134 0.428 1.170 -0.134 0.428 0.500 -0.157 -0.057 0.784 0.264 - 56.40 13.297 13.309 13.324 -0.557 0.629 1.185 -0.557 0.629 0.745 -0.660 -0.351 1.055 0.528 - 56.45 13.203 13.212 13.227 -0.497 0.633 1.090 -0.497 0.633 0.689 -0.542 -0.314 0.917 0.466 - 56.50 12.974 12.979 12.993 -0.373 0.600 0.861 -0.373 0.600 0.516 -0.321 -0.224 0.620 0.324 - 56.55 12.848 12.848 12.863 0.036 0.619 0.735 0.036 0.619 0.455 0.026 0.022 0.462 0.228 - 56.60 12.877 12.881 12.900 -0.346 0.700 0.764 -0.346 0.700 0.535 -0.264 -0.242 0.597 0.322 - 56.65 12.775 12.777 12.781 -0.237 0.300 0.662 -0.237 0.300 0.199 -0.157 -0.071 0.292 0.131 - 56.70 12.901 12.906 12.917 -0.347 0.536 0.788 -0.347 0.536 0.422 -0.274 -0.186 0.514 0.268 - 56.75 12.748 12.757 12.769 -0.467 0.550 0.635 -0.467 0.550 0.349 -0.296 -0.257 0.462 0.263 - 56.80 12.585 12.587 12.602 -0.233 0.605 0.472 -0.233 0.605 0.286 -0.110 -0.141 0.322 0.169 - 56.85 12.509 12.510 12.516 -0.172 0.387 0.396 -0.172 0.387 0.153 -0.068 -0.067 0.168 0.090 - 56.90 12.984 12.987 12.997 -0.248 0.520 0.871 -0.248 0.520 0.453 -0.216 -0.129 0.546 0.259 - 56.95 12.916 12.917 12.924 -0.174 0.419 0.803 -0.174 0.419 0.337 -0.139 -0.073 0.426 0.186 - 57.00 13.148 13.149 13.152 -0.165 0.250 1.035 -0.165 0.250 0.259 -0.171 -0.041 0.581 0.156 - 57.05 12.866 12.867 12.869 0.163 0.238 0.753 0.163 0.238 0.179 0.123 0.039 0.325 0.110 - 57.10 12.922 12.928 12.930 0.380 0.245 0.809 0.380 0.245 0.198 0.307 0.093 0.430 0.189 - 57.15 12.766 12.772 12.784 0.408 0.563 0.653 0.408 0.563 0.368 0.266 0.230 0.455 0.254 - 57.20 12.739 12.744 12.772 0.361 0.849 0.626 0.361 0.849 0.531 0.226 0.307 0.622 0.327 - 57.25 12.884 12.912 12.942 0.849 0.877 0.771 0.849 0.877 0.676 0.655 0.745 1.042 0.600 - 57.30 12.806 12.818 12.841 0.552 0.774 0.693 0.552 0.774 0.536 0.383 0.428 0.692 0.393 - 57.35 12.802 12.810 12.821 0.443 0.532 0.689 0.443 0.532 0.366 0.305 0.235 0.477 0.266 - 57.40 13.084 13.094 13.102 0.522 0.468 0.971 0.522 0.468 0.455 0.507 0.245 0.717 0.362 - 57.45 13.252 13.259 13.263 0.408 0.327 1.140 0.408 0.327 0.373 0.465 0.133 0.786 0.305 - 57.50 13.228 13.236 13.236 0.471 0.020 1.115 0.471 0.020 0.022 0.525 0.009 0.733 0.263 - 57.55 13.224 13.240 13.240 0.637 0.132 1.111 0.637 0.132 0.147 0.708 0.084 0.829 0.364 - 57.60 13.119 13.129 13.130 0.498 0.175 1.007 0.498 0.175 0.176 0.501 0.087 0.646 0.269 - 57.65 13.193 13.208 13.209 0.631 0.140 1.080 0.631 0.140 0.151 0.681 0.088 0.792 0.352 - 57.70 13.217 13.222 13.223 0.348 0.142 1.104 0.348 0.142 0.157 0.384 0.049 0.681 0.209 - 57.75 13.386 13.395 13.395 0.480 -0.032 1.274 0.480 -0.032 -0.041 0.611 -0.015 0.927 0.306 - 57.80 13.307 13.321 13.323 0.615 0.241 1.194 0.615 0.241 0.288 0.735 0.148 0.931 0.401 - 57.85 13.090 13.139 13.143 1.134 0.304 0.978 1.134 0.304 0.297 1.109 0.344 1.167 0.599 - 57.90 13.161 13.191 13.192 0.879 0.143 1.049 0.879 0.143 0.150 0.922 0.126 0.946 0.471 - 57.95 13.137 13.152 13.152 0.622 0.015 1.024 0.622 0.015 0.015 0.637 0.009 0.718 0.319 - 58.00 12.979 12.986 12.987 0.434 0.129 0.866 0.434 0.129 0.111 0.376 0.056 0.478 0.198 - 58.05 12.699 12.703 12.706 0.319 0.274 0.586 0.319 0.274 0.160 0.187 0.087 0.260 0.131 - 58.10 12.778 12.779 12.780 0.096 0.213 0.666 0.096 0.213 0.142 0.064 0.021 0.249 0.078 - 58.15 13.023 13.025 13.026 0.229 0.129 0.910 0.229 0.129 0.117 0.208 0.029 0.449 0.120 - 58.20 13.130 13.141 13.142 0.533 0.181 1.017 0.533 0.181 0.184 0.542 0.096 0.676 0.290 - 58.25 12.840 12.876 12.878 0.963 0.220 0.727 0.963 0.220 0.160 0.700 0.212 0.752 0.374 - 58.30 12.950 12.974 12.975 0.800 0.100 0.837 0.800 0.100 0.084 0.670 0.080 0.675 0.340 - 58.35 12.921 12.955 12.956 0.944 -0.190 0.808 0.944 -0.190 -0.154 0.763 -0.180 0.790 0.399 - 58.40 13.168 13.194 13.205 0.824 -0.532 1.055 0.824 -0.532 -0.561 0.869 -0.438 1.037 0.562 - 58.45 13.201 13.231 13.239 0.882 -0.466 1.089 0.882 -0.466 -0.507 0.960 -0.411 1.090 0.581 - 58.50 12.957 12.973 12.978 0.637 -0.370 0.844 0.637 -0.370 -0.312 0.538 -0.236 0.628 0.332 - 58.55 12.905 12.919 12.924 0.586 -0.378 0.792 0.586 -0.378 -0.299 0.464 -0.221 0.557 0.297 - 58.60 12.884 12.889 12.889 0.361 -0.054 0.771 0.361 -0.054 -0.041 0.278 -0.019 0.364 0.141 - 58.65 12.529 12.535 12.536 0.376 0.166 0.416 0.376 0.166 0.069 0.156 0.063 0.171 0.091 - 58.70 12.607 12.626 12.629 0.706 0.234 0.494 0.706 0.234 0.116 0.349 0.165 0.399 0.201 - 58.75 12.643 12.673 12.676 0.873 0.265 0.530 0.873 0.265 0.141 0.463 0.232 0.557 0.268 - 58.80 12.256 12.281 12.289 0.786 0.433 0.143 0.786 0.433 0.062 0.113 0.340 0.413 0.182 - 58.85 12.414 12.440 12.446 0.808 0.381 0.301 0.808 0.381 0.115 0.243 0.308 0.444 0.204 - 58.90 12.342 12.355 12.368 0.563 0.578 0.229 0.563 0.578 0.133 0.129 0.325 0.352 0.187 - 58.95 12.302 12.327 12.329 0.776 0.229 0.190 0.776 0.229 0.043 0.147 0.178 0.345 0.117 - 59.00 11.868 11.903 11.911 0.912 0.441 -0.245 0.912 0.441 -0.108 -0.223 0.403 0.543 0.236 - 59.05 11.758 11.803 11.803 1.023 0.118 -0.355 1.023 0.118 -0.042 -0.363 0.120 0.593 0.192 - 59.10 11.454 11.489 11.495 0.897 0.383 -0.659 0.897 0.383 -0.252 -0.591 0.343 0.692 0.364 - 59.15 11.740 11.769 11.769 0.820 0.109 -0.372 0.820 0.109 -0.041 -0.305 0.090 0.411 0.160 - 59.20 11.611 11.631 11.635 0.684 -0.305 -0.502 0.684 -0.305 0.153 -0.343 -0.209 0.406 0.215 - 59.25 11.697 11.723 11.725 0.787 -0.160 -0.416 0.787 -0.160 0.066 -0.327 -0.126 0.409 0.178 - 59.30 11.595 11.631 11.633 0.904 -0.251 -0.517 0.904 -0.251 0.130 -0.468 -0.227 0.574 0.268 - 59.35 11.657 11.700 11.704 1.002 -0.325 -0.456 1.002 -0.325 0.148 -0.457 -0.325 0.658 0.290 - 59.40 11.477 11.544 11.551 1.244 -0.397 -0.636 1.244 -0.397 0.253 -0.791 -0.494 1.055 0.483 - 59.45 11.488 11.504 11.504 0.616 -0.063 -0.625 0.616 -0.063 0.040 -0.385 -0.039 0.387 0.194 - 59.50 11.178 11.195 11.196 0.630 -0.136 -0.935 0.630 -0.136 0.127 -0.589 -0.086 0.645 0.304 - 59.55 11.005 11.031 11.032 0.761 -0.177 -1.108 0.761 -0.177 0.196 -0.843 -0.134 0.919 0.438 - 59.60 11.115 11.138 11.140 0.720 0.222 -0.998 0.720 0.222 -0.221 -0.718 0.160 0.782 0.384 - 59.65 11.075 11.102 11.104 0.766 0.242 -1.038 0.766 0.242 -0.251 -0.794 0.185 0.861 0.427 - 59.70 11.347 11.349 11.349 0.237 0.089 -0.766 0.237 0.089 -0.068 -0.181 0.021 0.326 0.098 - 59.75 11.384 11.389 11.404 -0.321 0.585 -0.728 -0.321 0.585 -0.426 0.234 -0.188 0.488 0.261 - 59.80 11.408 11.408 11.421 0.080 0.542 -0.705 0.080 0.542 -0.382 -0.056 0.043 0.399 0.194 - 59.85 11.464 11.466 11.478 0.214 0.524 -0.649 0.214 0.524 -0.340 -0.139 0.112 0.371 0.192 - 59.90 11.537 11.538 11.544 0.132 0.374 -0.576 0.132 0.374 -0.215 -0.076 0.050 0.245 0.117 - 59.95 11.624 11.624 11.627 0.127 0.262 -0.489 0.127 0.262 -0.128 -0.062 0.033 0.162 0.073 - 60.00 11.957 11.962 11.963 0.362 -0.158 -0.156 0.362 -0.158 0.025 -0.057 -0.057 0.090 0.042 - 60.05 11.970 11.974 11.976 0.327 -0.198 -0.143 0.327 -0.198 0.028 -0.047 -0.065 0.083 0.042 - 60.10 11.811 11.822 11.827 0.513 -0.360 -0.302 0.513 -0.360 0.109 -0.155 -0.185 0.242 0.132 - 60.15 12.250 12.263 12.268 0.558 -0.349 0.138 0.558 -0.349 -0.048 0.077 -0.195 0.226 0.107 - 60.20 12.130 12.140 12.152 0.498 -0.548 0.017 0.498 -0.548 -0.009 0.008 -0.273 0.274 0.136 - 60.25 12.398 12.411 12.433 0.553 -0.740 0.285 0.553 -0.740 -0.211 0.158 -0.410 0.468 0.244 - 60.30 12.743 12.755 12.776 0.566 -0.737 0.630 0.566 -0.737 -0.464 0.356 -0.417 0.630 0.359 - 60.35 12.827 12.828 12.845 0.103 -0.667 0.714 0.103 -0.667 -0.476 0.074 -0.069 0.483 0.243 - 60.40 12.600 12.600 12.608 0.080 -0.433 0.487 0.080 -0.433 -0.211 0.039 -0.035 0.216 0.109 - 60.45 12.601 12.601 12.608 0.030 -0.425 0.488 0.030 -0.425 -0.207 0.015 -0.013 0.210 0.104 - 60.50 12.688 12.688 12.689 -0.116 -0.080 0.575 -0.116 -0.080 -0.046 -0.067 0.009 0.175 0.041 - 60.55 12.765 12.765 12.766 0.023 -0.121 0.652 0.023 -0.121 -0.079 0.015 -0.003 0.220 0.040 - 60.60 12.693 12.693 12.695 0.060 0.227 0.580 0.060 0.227 0.132 0.035 0.014 0.196 0.068 - 60.65 12.839 12.842 12.849 0.255 0.445 0.726 0.255 0.445 0.323 0.185 0.113 0.395 0.195 - 60.70 13.010 13.013 13.016 0.305 0.253 0.897 0.305 0.253 0.227 0.274 0.077 0.481 0.182 - 60.75 13.115 13.115 13.115 -0.034 0.114 1.002 -0.034 0.114 0.114 -0.034 -0.004 0.509 0.060 - 60.80 12.905 12.906 12.909 0.157 0.270 0.793 0.157 0.270 0.214 0.125 0.042 0.363 0.126 - 60.85 12.987 12.987 12.988 -0.134 0.140 0.874 -0.134 0.140 0.123 -0.117 -0.019 0.401 0.085 - 60.90 12.823 12.824 12.824 0.074 0.120 0.711 0.074 0.120 0.086 0.053 0.009 0.262 0.050 - 60.95 12.734 12.739 12.739 0.340 0.099 0.621 0.340 0.099 0.061 0.211 0.034 0.256 0.111 - 61.00 12.757 12.761 12.763 0.327 0.222 0.644 0.327 0.222 0.143 0.210 0.072 0.286 0.132 - 61.05 12.713 12.716 12.716 0.296 -0.024 0.600 0.296 -0.024 -0.014 0.177 -0.007 0.224 0.089 - 61.10 12.947 12.967 12.969 0.717 -0.236 0.835 0.717 -0.236 -0.197 0.598 -0.169 0.633 0.326 - 61.15 12.792 12.795 12.795 0.257 0.012 0.679 0.257 0.012 0.008 0.174 0.003 0.264 0.087 - 61.20 12.388 12.390 12.391 0.260 -0.152 0.275 0.260 -0.152 -0.042 0.071 -0.039 0.083 0.046 - 61.25 12.586 12.588 12.588 0.173 -0.089 0.474 0.173 -0.089 -0.042 0.082 -0.015 0.131 0.047 - 61.30 13.013 13.014 13.015 -0.136 -0.150 0.900 -0.136 -0.150 -0.135 -0.122 0.020 0.426 0.092 - 61.35 12.745 12.745 12.747 -0.096 -0.221 0.632 -0.096 -0.221 -0.140 -0.061 0.021 0.229 0.077 - 61.40 12.645 12.648 12.649 -0.256 -0.146 0.532 -0.256 -0.146 -0.078 -0.136 0.037 0.185 0.081 - 61.45 12.439 12.442 12.442 -0.280 -0.076 0.326 -0.280 -0.076 -0.025 -0.091 0.021 0.095 0.049 - 61.50 12.623 12.625 12.626 -0.232 0.101 0.510 -0.232 0.101 0.052 -0.119 -0.023 0.162 0.066 - 61.55 12.518 12.518 12.519 -0.044 0.156 0.405 -0.044 0.156 0.063 -0.018 -0.007 0.095 0.033 - 61.60 12.475 12.478 12.478 0.276 0.126 0.362 0.276 0.126 0.045 0.100 0.035 0.111 0.058 - 61.65 12.323 12.332 12.335 0.470 0.285 0.210 0.470 0.285 0.060 0.099 0.134 0.173 0.088 - 61.70 12.238 12.239 12.240 0.115 0.139 0.126 0.115 0.139 0.017 0.014 0.016 0.024 0.014 - 61.75 12.375 12.377 12.382 -0.266 -0.333 0.262 -0.266 -0.333 -0.087 -0.070 0.089 0.125 0.071 - 61.80 12.354 12.357 12.363 0.273 -0.361 0.242 0.273 -0.361 -0.087 0.066 -0.099 0.132 0.074 - 61.85 12.220 12.223 12.225 0.284 0.198 0.107 0.284 0.198 0.021 0.030 0.056 0.066 0.034 - 61.90 12.258 12.258 12.264 -0.036 0.380 0.145 -0.036 0.380 0.055 -0.005 -0.014 0.083 0.028 - 61.95 12.444 12.449 12.455 -0.377 0.354 0.331 -0.377 0.354 0.117 -0.125 -0.134 0.189 0.109 - 62.00 12.068 12.068 12.082 -0.028 0.591 -0.045 -0.028 0.591 -0.026 0.001 -0.016 0.176 0.016 - 62.05 12.311 12.312 12.315 0.183 0.285 0.198 0.183 0.285 0.056 0.036 0.052 0.077 0.042 - 62.10 12.310 12.310 12.315 0.105 0.331 0.197 0.105 0.331 0.065 0.021 0.035 0.080 0.038 - 62.15 12.208 12.208 12.225 0.028 0.637 0.095 0.028 0.637 0.061 0.003 0.018 0.208 0.032 - 62.20 12.261 12.262 12.267 0.110 0.372 0.148 0.110 0.372 0.055 0.016 0.041 0.086 0.035 - 62.25 12.028 12.028 12.038 0.104 0.497 -0.085 0.104 0.497 -0.042 -0.009 0.052 0.132 0.034 - 62.30 11.815 11.829 11.845 0.571 0.618 -0.298 0.571 0.618 -0.184 -0.170 0.353 0.398 0.216 - 62.35 12.038 12.049 12.067 0.519 0.658 -0.075 0.519 0.658 -0.049 -0.039 0.341 0.354 0.174 - 62.40 11.926 11.932 11.961 0.370 0.834 -0.187 0.370 0.834 -0.156 -0.069 0.309 0.434 0.176 - 62.45 11.982 11.990 12.005 0.434 0.608 -0.131 0.434 0.608 -0.080 -0.057 0.264 0.288 0.141 - 62.50 12.099 12.108 12.109 0.453 0.151 -0.014 0.453 0.151 -0.002 -0.006 0.069 0.114 0.034 - 62.55 11.917 11.920 11.922 0.272 0.202 -0.196 0.272 0.202 -0.040 -0.053 0.055 0.077 0.043 - 62.60 11.731 11.734 11.743 0.249 0.457 -0.382 0.249 0.457 -0.174 -0.095 0.114 0.208 0.114 - 62.65 11.842 11.843 11.858 0.173 0.601 -0.271 0.173 0.601 -0.163 -0.047 0.104 0.232 0.099 - 62.70 11.721 11.721 11.737 0.014 0.602 -0.392 0.014 0.602 -0.236 -0.005 0.008 0.258 0.118 - 62.75 11.895 11.898 11.906 -0.272 0.448 -0.218 -0.272 0.448 -0.098 0.059 -0.122 0.161 0.083 - 62.80 12.054 12.056 12.073 -0.211 0.640 -0.058 -0.211 0.640 -0.037 0.012 -0.135 0.229 0.070 - 62.85 11.891 11.891 11.943 -0.059 1.104 -0.222 -0.059 1.104 -0.245 0.013 -0.065 0.636 0.127 - 62.90 11.841 11.843 11.892 -0.194 1.075 -0.271 -0.194 1.075 -0.292 0.053 -0.209 0.633 0.181 - 62.95 12.113 12.129 12.159 -0.606 0.863 0.001 -0.606 0.863 0.001 -0.000 -0.522 0.555 0.261 - 63.00 12.038 12.039 12.055 -0.129 0.625 -0.074 -0.129 0.625 -0.046 0.010 -0.080 0.206 0.047 - 63.05 11.651 11.651 11.661 0.076 0.464 -0.462 0.076 0.464 -0.214 -0.035 0.035 0.217 0.110 - 63.10 11.627 11.627 11.643 0.013 0.614 -0.486 0.013 0.614 -0.298 -0.006 0.008 0.306 0.149 - 63.15 11.731 11.732 11.745 0.127 0.550 -0.381 0.127 0.550 -0.210 -0.048 0.070 0.232 0.113 - 63.20 11.696 11.698 11.715 -0.217 0.639 -0.417 -0.217 0.639 -0.267 0.090 -0.138 0.315 0.157 - 63.25 11.458 11.463 11.475 -0.334 0.526 -0.655 -0.334 0.526 -0.345 0.219 -0.176 0.409 0.222 - 63.30 11.331 11.340 11.343 -0.457 0.260 -0.782 -0.457 0.260 -0.203 0.357 -0.119 0.444 0.214 - 63.35 11.416 11.417 11.417 -0.169 0.004 -0.697 -0.169 0.004 -0.003 0.118 -0.001 0.257 0.059 - 63.40 11.454 11.458 11.464 -0.309 0.387 -0.659 -0.309 0.387 -0.255 0.204 -0.120 0.340 0.174 - 63.45 11.583 11.587 11.591 -0.293 0.319 -0.530 -0.293 0.319 -0.169 0.155 -0.094 0.234 0.124 - 63.50 11.225 11.227 11.229 -0.177 0.222 -0.887 -0.177 0.222 -0.197 0.157 -0.039 0.434 0.127 - 63.55 11.103 11.104 11.111 -0.124 0.388 -1.010 -0.124 0.388 -0.392 0.125 -0.048 0.593 0.207 - 63.60 11.176 11.176 11.193 0.022 0.626 -0.937 0.022 0.626 -0.586 -0.021 0.014 0.635 0.293 - 63.65 11.077 11.077 11.093 -0.064 0.590 -1.036 -0.064 0.590 -0.612 0.066 -0.038 0.713 0.308 - 63.70 10.936 10.936 10.978 0.099 0.950 -1.177 0.099 0.950 -1.118 -0.116 0.094 1.149 0.564 - 63.75 10.927 10.928 10.985 0.154 1.118 -1.186 0.154 1.118 -1.326 -0.183 0.173 1.340 0.675 - 63.80 11.095 11.097 11.161 0.214 1.189 -1.018 0.214 1.189 -1.211 -0.218 0.255 1.248 0.628 - 63.85 11.367 11.367 11.479 0.117 1.597 -0.746 0.117 1.597 -1.191 -0.087 0.186 1.561 0.605 - 63.90 11.584 11.585 11.678 -0.125 1.471 -0.529 -0.125 1.471 -0.778 0.066 -0.183 1.229 0.401 - 63.95 11.056 11.058 11.149 -0.227 1.423 -1.057 -0.227 1.423 -1.504 0.239 -0.322 1.597 0.778 - 64.00 10.865 10.866 10.946 -0.125 1.322 -1.248 -0.125 1.322 -1.649 0.156 -0.165 1.659 0.832 - 64.05 11.127 11.132 11.261 -0.306 1.703 -0.985 -0.306 1.703 -1.678 0.301 -0.520 1.983 0.891 - 64.10 11.092 11.099 11.270 -0.382 1.959 -1.020 -0.382 1.959 -1.999 0.389 -0.747 2.512 1.085 - 64.15 11.016 11.025 11.212 0.442 2.039 -1.097 0.442 2.039 -2.236 -0.485 0.901 2.778 1.230 - 64.20 11.120 11.135 11.258 0.585 1.660 -0.993 0.585 1.660 -1.648 -0.581 0.972 2.042 1.000 - 64.25 11.268 11.271 11.394 0.261 1.668 -0.845 0.261 1.668 -1.409 -0.220 0.435 1.781 0.746 - 64.30 11.256 11.258 11.360 0.201 1.520 -0.857 0.201 1.520 -1.302 -0.172 0.306 1.542 0.674 - 64.35 11.367 11.380 11.453 0.553 1.287 -0.746 0.553 1.287 -0.960 -0.412 0.712 1.260 0.632 - 64.40 11.239 11.249 11.316 0.453 1.234 -0.873 0.453 1.234 -1.078 -0.395 0.558 1.245 0.638 - 64.45 11.115 11.116 11.203 0.138 1.400 -0.998 0.138 1.400 -1.398 -0.138 0.193 1.488 0.709 - 64.50 10.914 10.915 11.001 0.115 1.373 -1.199 0.115 1.373 -1.646 -0.137 0.157 1.668 0.830 - 64.55 10.973 10.981 11.081 0.425 1.483 -1.140 0.425 1.483 -1.691 -0.485 0.631 1.840 0.934 - 64.60 11.015 11.044 11.140 0.792 1.460 -1.098 0.792 1.460 -1.602 -0.870 1.156 1.981 1.079 - 64.65 11.102 11.120 11.231 0.644 1.572 -1.011 0.644 1.572 -1.590 -0.651 1.012 1.954 0.997 - 64.70 11.154 11.159 11.286 0.342 1.691 -0.959 0.342 1.691 -1.622 -0.328 0.578 1.949 0.877 - 64.75 11.497 11.505 11.650 0.423 1.829 -0.616 0.423 1.829 -1.126 -0.261 0.774 1.952 0.696 - 64.80 11.914 11.914 12.067 0.087 1.916 -0.199 0.087 1.916 -0.382 -0.017 0.167 1.860 0.208 - 64.85 12.230 12.231 12.377 -0.160 1.894 0.117 -0.160 1.894 0.222 -0.019 -0.302 1.813 0.188 - 64.90 11.766 11.773 11.908 -0.393 1.791 -0.347 -0.393 1.791 -0.621 0.136 -0.704 1.741 0.474 - 64.95 11.808 11.809 11.943 0.092 1.786 -0.305 0.092 1.786 -0.544 -0.028 0.165 1.645 0.284 - 65.00 12.235 12.254 12.376 0.679 1.738 0.122 0.679 1.738 0.212 0.083 1.180 1.748 0.601 - 65.05 12.193 12.225 12.338 0.886 1.660 0.081 0.886 1.660 0.134 0.071 1.471 1.774 0.740 - 65.10 12.039 12.051 12.159 0.545 1.617 -0.074 0.545 1.617 -0.119 -0.040 0.881 1.458 0.445 - 65.15 12.125 12.137 12.221 0.537 1.436 0.012 0.537 1.436 0.017 0.006 0.771 1.175 0.386 - 65.20 12.106 12.118 12.231 0.548 1.659 -0.007 0.548 1.659 -0.012 -0.004 0.909 1.527 0.455 - 65.25 12.059 12.090 12.170 0.862 1.396 -0.054 0.862 1.396 -0.075 -0.046 1.202 1.346 0.603 - 65.30 12.285 12.322 12.374 0.949 1.136 0.172 0.949 1.136 0.196 0.164 1.078 1.110 0.554 - 65.35 12.310 12.339 12.380 0.854 0.997 0.197 0.854 0.997 0.196 0.168 0.851 0.881 0.445 - 65.40 12.582 12.600 12.631 0.674 0.876 0.470 0.674 0.876 0.412 0.317 0.591 0.722 0.393 - 65.45 12.769 12.788 12.813 0.697 0.808 0.656 0.697 0.808 0.530 0.457 0.563 0.784 0.449 - 65.50 12.602 12.621 12.661 0.701 1.002 0.489 0.701 1.002 0.490 0.343 0.702 0.867 0.461 - 65.55 12.466 12.470 12.548 0.328 1.396 0.353 0.328 1.396 0.493 0.116 0.458 1.091 0.341 - 65.60 12.452 12.457 12.483 0.373 0.799 0.339 0.373 0.799 0.271 0.126 0.298 0.446 0.211 - 65.65 12.294 12.323 12.380 0.838 1.189 0.182 0.838 1.189 0.216 0.152 0.996 1.074 0.515 - 65.70 12.365 12.394 12.463 0.848 1.308 0.252 0.848 1.308 0.330 0.214 1.109 1.246 0.588 - 65.75 12.571 12.603 12.633 0.894 0.871 0.458 0.894 0.871 0.399 0.410 0.779 0.884 0.483 - 65.80 12.480 12.489 12.505 0.462 0.640 0.368 0.462 0.640 0.235 0.170 0.296 0.379 0.207 - 65.85 12.521 12.528 12.551 0.417 0.751 0.409 0.417 0.751 0.307 0.171 0.313 0.452 0.235 - 65.90 12.737 12.737 12.753 0.059 0.654 0.624 0.059 0.654 0.408 0.037 0.038 0.410 0.206 - 65.95 12.552 12.553 12.566 0.150 0.569 0.439 0.150 0.569 0.250 0.066 0.085 0.269 0.136 - 66.00 12.598 12.598 12.655 0.097 1.199 0.485 0.097 1.199 0.582 0.047 0.116 0.842 0.298 - 66.05 12.580 12.580 12.667 0.029 1.485 0.467 0.029 1.485 0.694 0.014 0.044 1.212 0.348 - 66.10 12.597 12.599 12.664 0.242 1.280 0.484 0.242 1.280 0.620 0.117 0.310 0.966 0.351 - 66.15 12.414 12.427 12.478 0.572 1.127 0.301 0.572 1.127 0.339 0.172 0.644 0.844 0.374 - 66.20 12.217 12.232 12.271 0.607 0.977 0.104 0.607 0.977 0.102 0.063 0.594 0.667 0.303 - 66.25 12.264 12.268 12.296 0.324 0.833 0.151 0.324 0.833 0.126 0.049 0.270 0.410 0.151 - 66.30 12.104 12.104 12.132 0.122 0.825 -0.009 0.122 0.825 -0.007 -0.001 0.100 0.347 0.050 - 66.35 12.276 12.283 12.287 0.414 0.289 0.163 0.414 0.289 0.047 0.068 0.120 0.141 0.073 - 66.40 12.479 12.480 12.490 0.157 0.497 0.367 0.157 0.497 0.182 0.058 0.078 0.203 0.103 - 66.45 12.435 12.435 12.460 0.055 0.798 0.322 0.055 0.798 0.257 0.018 0.044 0.372 0.131 - 66.50 12.274 12.277 12.283 0.268 0.386 0.161 0.268 0.386 0.062 0.043 0.103 0.123 0.064 - 66.55 12.221 12.225 12.227 0.338 0.220 0.108 0.338 0.220 0.024 0.036 0.074 0.087 0.043 - 66.60 12.024 12.024 12.030 0.143 0.363 -0.089 0.143 0.363 -0.032 -0.013 0.052 0.080 0.031 - 66.65 11.448 11.448 11.457 -0.032 0.446 -0.665 -0.032 0.446 -0.296 0.021 -0.014 0.321 0.149 - 66.70 11.414 11.414 11.433 0.080 0.666 -0.699 0.080 0.666 -0.465 -0.056 0.053 0.469 0.236 - 66.75 11.715 11.715 11.736 0.072 0.700 -0.398 0.072 0.700 -0.279 -0.028 0.050 0.327 0.142 - 66.80 11.494 11.494 11.541 0.039 1.045 -0.619 0.039 1.045 -0.647 -0.024 0.041 0.739 0.324 - 66.85 11.346 11.347 11.408 -0.013 1.187 -0.766 -0.013 1.187 -0.910 0.010 -0.016 0.999 0.455 - 66.90 11.128 11.128 11.197 0.040 1.240 -0.984 0.040 1.240 -1.221 -0.040 0.050 1.255 0.611 - 66.95 11.141 11.142 11.215 0.145 1.276 -0.972 0.145 1.276 -1.240 -0.141 0.185 1.297 0.631 - 67.00 11.262 11.270 11.370 0.435 1.502 -0.851 0.435 1.502 -1.278 -0.370 0.653 1.585 0.741 - 67.05 11.019 11.035 11.085 0.604 1.045 -1.094 0.604 1.045 -1.143 -0.661 0.631 1.327 0.732 - 67.10 10.837 10.858 10.897 0.679 0.917 -1.276 0.679 0.917 -1.170 -0.866 0.623 1.465 0.792 - 67.15 10.804 10.817 10.892 0.521 1.273 -1.308 0.521 1.273 -1.666 -0.682 0.664 1.802 0.959 - 67.20 10.715 10.763 10.836 1.010 1.259 -1.397 1.010 1.259 -1.760 -1.412 1.272 2.280 1.295 - 67.25 10.485 10.503 10.570 0.606 1.191 -1.628 0.606 1.191 -1.939 -0.986 0.722 2.218 1.146 - 67.30 10.774 10.793 10.834 0.653 0.932 -1.339 0.653 0.932 -1.248 -0.875 0.609 1.544 0.820 - 67.35 10.896 10.909 10.927 0.517 0.628 -1.217 0.517 0.628 -0.764 -0.629 0.325 1.071 0.521 - 67.40 11.054 11.071 11.079 0.610 0.435 -1.059 0.610 0.435 -0.461 -0.646 0.266 0.842 0.419 - 67.45 11.166 11.179 11.187 0.535 0.435 -0.947 0.535 0.435 -0.412 -0.507 0.233 0.686 0.347 - 67.50 11.225 11.229 11.233 0.315 0.303 -0.888 0.315 0.303 -0.269 -0.280 0.096 0.490 0.200 - 67.55 10.927 10.932 10.965 0.328 0.851 -1.186 0.328 0.851 -1.009 -0.389 0.279 1.119 0.558 - 67.60 10.795 10.823 10.859 0.775 0.889 -1.318 0.775 0.889 -1.171 -1.021 0.689 1.563 0.850 - 67.65 10.564 10.585 10.641 0.669 1.084 -1.549 0.669 1.084 -1.678 -1.036 0.725 2.010 1.051 - 67.70 10.216 10.222 10.278 0.342 1.074 -1.897 0.342 1.074 -2.037 -0.650 0.368 2.434 1.085 - 67.75 10.588 10.596 10.678 0.424 1.313 -1.525 0.424 1.313 -2.003 -0.647 0.557 2.115 1.089 - 67.80 10.507 10.515 10.576 0.412 1.127 -1.606 0.412 1.127 -1.809 -0.661 0.464 2.009 0.991 - 67.85 10.468 10.468 10.493 0.003 0.724 -1.644 0.003 0.724 -1.190 -0.005 0.002 1.614 0.595 - 67.90 10.338 10.339 10.364 -0.149 0.710 -1.774 -0.149 0.710 -1.260 0.265 -0.106 1.838 0.646 - 67.95 10.216 10.219 10.260 0.232 0.919 -1.897 0.232 0.919 -1.743 -0.439 0.213 2.247 0.905 - 68.00 10.079 10.081 10.180 0.190 1.415 -2.033 0.190 1.415 -2.877 -0.386 0.268 3.086 1.458 - 68.05 9.809 9.810 9.903 0.161 1.348 -2.304 0.161 1.348 -3.105 -0.370 0.216 3.575 1.567 - 68.10 10.101 10.105 10.213 0.277 1.487 -2.012 0.277 1.487 -2.992 -0.557 0.412 3.168 1.535 - 68.15 10.519 10.525 10.665 0.342 1.722 -1.593 0.342 1.722 -2.744 -0.545 0.589 2.811 1.430 - 68.20 10.732 10.742 10.863 0.466 1.616 -1.381 0.466 1.616 -2.232 -0.643 0.753 2.368 1.221 - 68.25 10.489 10.498 10.642 0.441 1.744 -1.624 0.441 1.744 -2.832 -0.716 0.769 2.936 1.510 - 68.30 10.538 10.549 10.715 0.490 1.878 -1.575 0.490 1.878 -2.957 -0.772 0.921 3.124 1.596 - 68.35 10.787 10.787 10.958 -0.042 1.924 -1.326 -0.042 1.924 -2.551 0.056 -0.081 2.731 1.276 - 68.40 11.111 11.118 11.255 -0.388 1.755 -1.002 -0.388 1.755 -1.758 0.389 -0.681 2.117 0.962 - 68.45 11.164 11.169 11.283 -0.349 1.595 -0.949 -0.349 1.595 -1.514 0.331 -0.556 1.783 0.823 - 68.50 11.225 11.231 11.291 -0.365 1.163 -0.888 -0.365 1.163 -1.033 0.324 -0.425 1.138 0.582 - 68.55 11.152 11.159 11.220 -0.414 1.161 -0.961 -0.414 1.161 -1.116 0.398 -0.481 1.222 0.640 - 68.60 11.173 11.176 11.257 -0.270 1.343 -0.940 -0.270 1.343 -1.262 0.254 -0.363 1.380 0.669 - 68.65 11.123 11.132 11.240 -0.447 1.552 -0.989 -0.447 1.552 -1.535 0.442 -0.693 1.793 0.871 - 68.70 11.343 11.346 11.425 -0.259 1.341 -0.770 -0.259 1.341 -1.032 0.199 -0.347 1.229 0.554 - 68.75 11.336 11.337 11.362 0.096 0.756 -0.776 0.096 0.756 -0.587 -0.074 0.072 0.591 0.298 - 68.80 11.566 11.568 11.588 -0.208 0.683 -0.547 -0.208 0.683 -0.373 0.114 -0.142 0.404 0.208 - 68.85 11.469 11.474 11.498 -0.352 0.736 -0.644 -0.352 0.736 -0.474 0.226 -0.259 0.540 0.293 - 68.90 11.841 11.841 11.867 -0.022 0.795 -0.272 -0.022 0.795 -0.216 0.006 -0.018 0.353 0.109 - 68.95 12.068 12.068 12.081 0.022 0.550 -0.045 0.022 0.550 -0.024 -0.001 0.012 0.153 0.014 - 69.00 12.250 12.254 12.271 -0.298 0.651 0.138 -0.298 0.651 0.090 -0.041 -0.194 0.266 0.109 - 69.05 12.213 12.219 12.245 -0.412 0.795 0.100 -0.412 0.795 0.079 -0.041 -0.327 0.405 0.169 - 69.10 12.333 12.339 12.365 -0.386 0.803 0.220 -0.386 0.803 0.176 -0.085 -0.310 0.421 0.183 - 69.15 12.065 12.066 12.130 -0.149 1.249 -0.048 -0.149 1.249 -0.060 0.007 -0.186 0.792 0.098 - 69.20 11.980 11.981 12.076 -0.214 1.509 -0.133 -0.214 1.509 -0.201 0.029 -0.324 1.171 0.191 - 69.25 12.230 12.231 12.338 -0.158 1.623 0.117 -0.158 1.623 0.190 -0.018 -0.256 1.336 0.160 - 69.30 12.442 12.442 12.511 -0.088 1.309 0.329 -0.088 1.309 0.431 -0.029 -0.115 0.914 0.223 - 69.35 12.524 12.524 12.588 0.069 1.266 0.411 0.069 1.266 0.520 0.028 0.087 0.889 0.264 - 69.40 12.427 12.430 12.507 0.256 1.385 0.314 0.256 1.385 0.435 0.080 0.354 1.041 0.283 - 69.45 12.231 12.246 12.343 0.598 1.545 0.118 0.598 1.545 0.183 0.071 0.924 1.380 0.472 - 69.50 11.982 11.988 12.090 0.381 1.569 -0.131 0.381 1.569 -0.206 -0.050 0.598 1.312 0.317 - 69.55 12.228 12.228 12.316 0.088 1.469 0.115 0.088 1.469 0.169 0.010 0.129 1.089 0.107 - 69.60 12.462 12.464 12.536 0.211 1.340 0.350 0.211 1.340 0.469 0.074 0.282 0.981 0.276 - 69.65 12.577 12.590 12.638 0.569 1.104 0.464 0.569 1.104 0.512 0.264 0.628 0.879 0.426 - 69.70 12.483 12.494 12.561 0.539 1.297 0.370 0.539 1.297 0.480 0.199 0.699 1.055 0.435 - 69.75 12.180 12.197 12.271 0.643 1.344 0.067 0.643 1.344 0.090 0.043 0.864 1.111 0.435 - 69.80 12.473 12.506 12.586 0.912 1.414 0.360 0.912 1.414 0.509 0.328 1.289 1.480 0.712 - 69.85 12.183 12.222 12.276 0.968 1.159 0.070 0.968 1.159 0.082 0.068 1.122 1.143 0.563 - 69.90 12.116 12.185 12.224 1.291 0.980 0.004 1.291 0.980 0.004 0.005 1.265 1.314 0.633 - 69.95 12.009 12.062 12.079 1.131 0.644 -0.104 1.131 0.644 -0.067 -0.118 0.729 0.853 0.371 - 70.00 12.245 12.287 12.316 1.017 0.848 0.132 1.017 0.848 0.112 0.134 0.862 0.885 0.440 - 70.05 12.319 12.394 12.423 1.354 0.847 0.207 1.354 0.847 0.175 0.280 1.147 1.297 0.597 - 70.10 12.631 12.703 12.730 1.356 0.820 0.518 1.356 0.820 0.424 0.702 1.111 1.389 0.691 - 70.15 12.860 12.911 12.917 1.142 0.407 0.747 1.142 0.407 0.304 0.853 0.464 1.014 0.509 - 70.20 12.519 12.550 12.569 0.881 0.685 0.406 0.881 0.685 0.278 0.358 0.603 0.705 0.377 - 70.25 12.222 12.242 12.268 0.698 0.800 0.109 0.698 0.800 0.087 0.076 0.559 0.570 0.285 - 70.30 12.464 12.473 12.481 0.466 0.463 0.351 0.466 0.463 0.163 0.163 0.215 0.277 0.158 - 70.35 12.367 12.372 12.379 0.374 0.417 0.254 0.374 0.417 0.106 0.095 0.156 0.189 0.105 - 70.40 12.563 12.565 12.578 0.189 0.586 0.450 0.189 0.586 0.264 0.085 0.111 0.291 0.149 - 70.45 12.523 12.525 12.529 0.224 0.312 0.410 0.224 0.312 0.128 0.092 0.070 0.158 0.086 - 70.50 12.481 12.483 12.489 0.241 0.365 0.368 0.241 0.365 0.134 0.089 0.088 0.163 0.092 - 70.55 12.419 12.437 12.439 0.658 0.230 0.306 0.658 0.230 0.070 0.202 0.151 0.290 0.131 - 70.60 12.225 12.254 12.254 0.836 0.053 0.112 0.836 0.053 0.006 0.094 0.044 0.357 0.052 - 70.65 12.468 12.489 12.490 0.721 0.159 0.355 0.721 0.159 0.056 0.256 0.114 0.336 0.143 - 70.70 12.704 12.717 12.719 0.579 0.227 0.591 0.579 0.227 0.134 0.342 0.131 0.368 0.195 - 70.75 12.423 12.436 12.439 0.567 0.263 0.311 0.567 0.263 0.082 0.176 0.149 0.243 0.122 - 70.80 12.324 12.325 12.333 0.136 0.445 0.211 0.136 0.445 0.094 0.029 0.060 0.131 0.058 - 70.85 12.383 12.383 12.390 -0.091 0.414 0.270 -0.091 0.414 0.112 -0.025 -0.038 0.126 0.060 - 70.90 12.620 12.630 12.631 0.504 0.201 0.507 0.504 0.201 0.102 0.256 0.101 0.276 0.147 - 70.95 12.594 12.602 12.603 0.441 -0.155 0.481 0.441 -0.155 -0.075 0.212 -0.068 0.225 0.117 - 71.00 12.904 12.906 12.906 0.200 0.080 0.791 0.200 0.080 0.063 0.158 0.016 0.336 0.085 - 71.05 12.915 12.918 12.921 0.236 0.286 0.803 0.236 0.286 0.230 0.190 0.068 0.391 0.153 - 71.10 13.019 13.019 13.019 0.012 -0.038 0.906 0.012 -0.038 -0.035 0.011 -0.000 0.411 0.018 - 71.15 13.043 13.055 13.060 -0.561 0.359 0.931 -0.561 0.359 0.334 -0.522 -0.201 0.655 0.326 - 71.20 12.604 12.637 12.657 -0.910 0.718 0.491 -0.910 0.718 0.353 -0.447 -0.653 0.793 0.433 - 71.25 12.708 12.730 12.760 -0.752 0.872 0.595 -0.752 0.872 0.519 -0.447 -0.656 0.840 0.474 - 71.30 12.807 12.820 12.833 -0.586 0.570 0.694 -0.586 0.570 0.395 -0.406 -0.334 0.575 0.329 - 71.35 12.467 12.468 12.495 -0.138 0.818 0.354 -0.138 0.818 0.290 -0.049 -0.113 0.407 0.157 - 71.40 12.182 12.183 12.204 -0.090 0.717 0.069 -0.090 0.717 0.050 -0.006 -0.065 0.263 0.041 - 71.45 12.219 12.221 12.237 -0.178 0.631 0.107 -0.178 0.631 0.067 -0.019 -0.112 0.221 0.066 - 71.50 11.997 11.998 12.015 -0.166 0.623 -0.116 -0.166 0.623 -0.072 0.019 -0.104 0.214 0.064 - 71.55 12.036 12.036 12.060 -0.130 0.754 -0.077 -0.130 0.754 -0.058 0.010 -0.098 0.295 0.057 - 71.60 12.187 12.194 12.239 -0.417 1.045 0.075 -0.417 1.045 0.078 -0.031 -0.436 0.636 0.222 - 71.65 12.141 12.143 12.182 -0.219 0.973 0.028 -0.219 0.973 0.027 -0.006 -0.213 0.498 0.108 - 71.70 12.590 12.594 12.617 -0.348 0.760 0.477 -0.348 0.760 0.362 -0.166 -0.265 0.463 0.239 - 71.75 12.600 12.610 12.633 -0.510 0.756 0.487 -0.510 0.756 0.368 -0.248 -0.385 0.534 0.294 - 71.80 12.781 12.807 12.819 -0.811 0.562 0.669 -0.811 0.562 0.376 -0.542 -0.456 0.711 0.401 - 71.85 12.831 12.866 12.888 -0.945 0.762 0.718 -0.945 0.762 0.547 -0.678 -0.720 0.994 0.565 - 71.90 13.013 13.031 13.050 -0.689 0.711 0.900 -0.689 0.711 0.639 -0.620 -0.490 0.895 0.508 - 71.95 13.063 13.094 13.119 -0.898 0.817 0.950 -0.898 0.817 0.776 -0.853 -0.733 1.188 0.683 - 72.00 12.903 12.925 12.937 -0.741 0.560 0.791 -0.741 0.560 0.442 -0.586 -0.415 0.744 0.422 - 72.05 12.774 12.774 12.787 -0.052 0.563 0.661 -0.052 0.563 0.372 -0.034 -0.029 0.378 0.187 - 72.10 12.820 12.820 12.835 0.076 0.613 0.707 0.076 0.613 0.434 0.054 0.047 0.441 0.220 - 72.15 12.944 12.948 12.951 0.298 0.300 0.831 0.298 0.300 0.250 0.248 0.089 0.435 0.181 - 72.20 13.103 13.119 13.120 0.642 0.150 0.990 0.642 0.150 0.149 0.636 0.096 0.708 0.330 - 72.25 13.473 13.497 13.498 0.810 -0.120 1.360 0.810 -0.120 -0.163 1.102 -0.097 1.260 0.559 - 72.30 13.323 13.327 13.331 0.333 -0.309 1.210 0.333 -0.309 -0.374 0.403 -0.103 0.835 0.280 - 72.35 13.128 13.137 13.137 0.488 -0.100 1.015 0.488 -0.100 -0.102 0.496 -0.049 0.639 0.254 - 72.40 13.306 13.315 13.317 0.497 -0.263 1.193 0.497 -0.263 -0.314 0.593 -0.131 0.870 0.342 - 72.45 13.324 13.325 13.338 0.204 -0.575 1.211 0.204 -0.575 -0.696 0.247 -0.117 0.919 0.374 - 72.50 13.446 13.446 13.448 -0.078 -0.192 1.333 -0.078 -0.192 -0.256 -0.104 0.015 0.911 0.139 - 72.55 13.503 13.506 13.506 -0.291 0.039 1.390 -0.291 0.039 0.054 -0.404 -0.011 1.009 0.204 - 72.60 13.520 13.529 13.529 -0.478 -0.050 1.408 -0.478 -0.050 -0.071 -0.673 0.024 1.106 0.339 - 72.65 13.548 13.557 13.557 -0.500 0.132 1.435 -0.500 0.132 0.190 -0.718 -0.066 1.163 0.373 - 72.70 13.304 13.329 13.329 -0.817 0.080 1.191 -0.817 0.080 0.095 -0.973 -0.065 1.046 0.490 - 72.75 13.630 13.667 13.668 -1.009 -0.113 1.517 -1.009 -0.113 -0.172 -1.531 0.114 1.667 0.773 - 72.80 13.679 13.692 13.692 -0.592 0.009 1.566 -0.592 0.009 0.014 -0.927 -0.005 1.402 0.463 - 72.85 13.544 13.552 13.552 -0.460 0.067 1.431 -0.460 0.067 0.096 -0.659 -0.031 1.133 0.333 - 72.90 13.447 13.448 13.448 -0.080 0.082 1.335 -0.080 0.082 0.110 -0.107 -0.007 0.897 0.077 - 72.95 13.367 13.367 13.367 -0.087 0.071 1.254 -0.087 0.071 0.089 -0.109 -0.006 0.792 0.070 - 73.00 13.640 13.641 13.641 -0.123 -0.139 1.527 -0.123 -0.139 -0.213 -0.188 0.017 1.184 0.142 - 73.05 13.425 13.425 13.430 -0.057 -0.337 1.312 -0.057 -0.337 -0.442 -0.075 0.019 0.920 0.224 - 73.10 13.277 13.278 13.288 0.183 -0.506 1.164 0.183 -0.506 -0.589 0.213 -0.092 0.822 0.317 - 73.15 13.409 13.419 13.428 0.519 -0.491 1.296 0.519 -0.491 -0.637 0.672 -0.255 1.095 0.480 - 73.20 13.503 13.506 13.507 0.302 -0.136 1.390 0.302 -0.136 -0.189 0.421 -0.041 1.021 0.231 - 73.25 13.354 13.361 13.361 0.436 0.061 1.241 0.436 0.061 0.075 0.541 0.026 0.867 0.273 - 73.30 13.103 13.122 13.123 0.705 0.163 0.990 0.705 0.163 0.162 0.698 0.115 0.752 0.363 - 73.35 13.004 13.041 13.042 0.988 -0.113 0.891 0.988 -0.113 -0.100 0.881 -0.111 0.892 0.447 - 73.40 13.015 13.053 13.054 1.005 -0.151 0.902 1.005 -0.151 -0.136 0.907 -0.152 0.923 0.465 - 73.45 12.563 12.582 12.585 0.684 -0.294 0.450 0.684 -0.294 -0.132 0.308 -0.201 0.379 0.196 - 73.50 12.605 12.647 12.651 1.027 -0.302 0.492 1.027 -0.302 -0.149 0.506 -0.311 0.694 0.306 - 73.55 12.603 12.656 12.660 1.152 -0.337 0.490 1.152 -0.337 -0.166 0.565 -0.389 0.841 0.353 - 73.60 12.230 12.277 12.277 1.068 -0.075 0.118 1.068 -0.075 -0.009 0.126 -0.080 0.581 0.075 - 73.65 12.161 12.240 12.240 1.392 0.001 0.048 1.392 0.001 0.000 0.067 0.002 0.970 0.033 - 73.70 12.178 12.274 12.274 1.531 -0.043 0.066 1.531 -0.043 -0.003 0.100 -0.065 1.176 0.060 - 73.75 12.146 12.263 12.264 1.688 0.158 0.033 1.688 0.158 0.005 0.056 0.266 1.437 0.136 - 73.80 12.551 12.677 12.677 1.781 -0.055 0.438 1.781 -0.055 -0.024 0.780 -0.099 1.684 0.393 - 73.85 12.740 12.826 12.826 1.479 0.101 0.627 1.479 0.101 0.063 0.928 0.149 1.296 0.471 - 73.90 12.681 12.750 12.751 1.319 -0.137 0.569 1.319 -0.137 -0.078 0.750 -0.180 1.041 0.388 - 73.95 12.763 12.835 12.841 1.358 -0.396 0.650 1.358 -0.396 -0.257 0.883 -0.537 1.211 0.533 - 74.00 12.688 12.770 12.792 1.444 -0.737 0.576 1.444 -0.737 -0.424 0.831 -1.065 1.480 0.708 - 74.05 12.306 12.354 12.398 1.088 -1.049 0.193 1.088 -1.049 -0.202 0.210 -1.142 1.161 0.589 - 74.10 12.104 12.138 12.168 0.906 -0.845 -0.008 0.906 -0.845 0.007 -0.008 -0.766 0.768 0.383 - 74.15 12.039 12.055 12.075 0.622 -0.687 -0.074 0.622 -0.687 0.051 -0.046 -0.427 0.432 0.216 - 74.20 12.234 12.262 12.286 0.839 -0.761 0.121 0.839 -0.761 -0.092 0.101 -0.638 0.649 0.326 - 74.25 12.176 12.231 12.237 1.162 -0.381 0.063 1.162 -0.381 -0.024 0.073 -0.443 0.750 0.225 - 74.30 12.376 12.416 12.416 0.993 -0.051 0.263 0.993 -0.051 -0.014 0.261 -0.051 0.529 0.133 - 74.35 12.742 12.773 12.773 0.885 -0.089 0.630 0.885 -0.089 -0.056 0.557 -0.078 0.593 0.283 - 74.40 13.192 13.215 13.233 0.781 -0.690 1.079 0.781 -0.690 -0.744 0.843 -0.539 1.125 0.624 - 74.45 13.443 13.453 13.467 0.509 -0.616 1.331 0.509 -0.616 -0.820 0.678 -0.314 1.205 0.555 - 74.50 13.736 13.755 13.774 0.737 -0.714 1.623 0.737 -0.714 -1.159 1.196 -0.526 1.843 0.873 - 74.55 13.493 13.514 13.522 0.749 -0.467 1.380 0.749 -0.467 -0.645 1.033 -0.350 1.342 0.634 - 74.60 13.265 13.274 13.282 0.483 -0.467 1.152 0.483 -0.467 -0.538 0.557 -0.226 0.890 0.403 - 74.65 13.286 13.294 13.312 0.467 -0.689 1.173 0.467 -0.689 -0.809 0.548 -0.322 1.035 0.514 - 74.70 13.219 13.221 13.223 0.220 -0.221 1.106 0.220 -0.221 -0.244 0.244 -0.049 0.661 0.174 - 74.75 12.926 12.932 12.936 0.395 -0.302 0.813 0.395 -0.302 -0.246 0.321 -0.119 0.454 0.211 - 74.80 13.008 13.031 13.049 0.765 -0.684 0.895 0.765 -0.684 -0.613 0.685 -0.524 0.928 0.529 - 74.85 12.983 13.005 13.035 0.757 -0.886 0.870 0.757 -0.886 -0.771 0.658 -0.670 1.057 0.608 - 74.90 13.491 13.512 13.545 0.766 -0.939 1.378 0.766 -0.939 -1.294 1.055 -0.719 1.683 0.909 - 74.95 13.289 13.332 13.375 1.069 -1.067 1.176 1.069 -1.067 -1.255 1.257 -1.141 1.833 1.056 - 75.00 13.228 13.292 13.328 1.299 -0.981 1.116 1.299 -0.981 -1.094 1.450 -1.274 1.947 1.109 - 75.05 13.126 13.167 13.170 1.038 -0.304 1.013 1.038 -0.304 -0.307 1.051 -0.315 1.098 0.570 - 75.10 13.256 13.318 13.319 1.284 -0.147 1.143 1.284 -0.147 -0.168 1.469 -0.189 1.489 0.745 - 75.15 13.272 13.363 13.363 1.557 -0.135 1.159 1.557 -0.135 -0.156 1.804 -0.209 1.892 0.911 - 75.20 13.434 13.513 13.526 1.464 -0.580 1.321 1.464 -0.580 -0.767 1.934 -0.850 2.113 1.124 - 75.25 13.508 13.573 13.586 1.327 -0.601 1.395 1.327 -0.601 -0.839 1.851 -0.798 2.034 1.092 - 75.30 13.273 13.349 13.369 1.421 -0.727 1.160 1.421 -0.727 -0.844 1.649 -1.034 1.948 1.061 - 75.35 13.225 13.295 13.315 1.361 -0.735 1.112 1.361 -0.735 -0.818 1.514 -1.001 1.815 0.995 - 75.40 13.555 13.656 13.664 1.658 -0.470 1.442 1.658 -0.470 -0.677 2.391 -0.779 2.524 1.302 - 75.45 13.485 13.557 13.562 1.397 -0.341 1.372 1.397 -0.341 -0.468 1.917 -0.476 1.976 1.015 - 75.50 13.231 13.289 13.290 1.240 -0.191 1.118 1.240 -0.191 -0.214 1.386 -0.237 1.412 0.711 - 75.55 13.212 13.240 13.241 0.860 0.141 1.100 0.860 0.141 0.155 0.946 0.122 0.984 0.483 - 75.60 13.144 13.161 13.163 0.658 0.222 1.032 0.658 0.222 0.229 0.678 0.146 0.773 0.365 - 75.65 13.081 13.113 13.113 0.922 -0.088 0.968 0.922 -0.088 -0.085 0.892 -0.081 0.897 0.450 - 75.70 13.061 13.080 13.080 0.693 -0.035 0.949 0.693 -0.035 -0.034 0.658 -0.025 0.691 0.330 - 75.75 12.886 12.892 12.892 0.370 -0.008 0.773 0.370 -0.008 -0.006 0.286 -0.003 0.368 0.143 - 75.80 12.971 12.978 12.978 0.412 -0.013 0.859 0.412 -0.013 -0.011 0.353 -0.005 0.453 0.177 - 75.85 12.884 12.906 12.907 0.748 0.190 0.771 0.748 0.190 0.147 0.577 0.142 0.595 0.306 - 75.90 12.894 12.938 12.938 1.073 0.054 0.781 1.073 0.054 0.042 0.837 0.058 0.882 0.420 - 75.95 12.521 12.545 12.545 0.779 -0.054 0.408 0.779 -0.054 -0.022 0.318 -0.042 0.388 0.161 - 76.00 12.744 12.746 12.746 0.232 -0.125 0.631 0.232 -0.125 -0.079 0.146 -0.029 0.234 0.084 - 76.05 12.780 12.781 12.782 0.169 -0.152 0.667 0.169 -0.152 -0.102 0.113 -0.026 0.249 0.077 - 76.10 12.784 12.792 12.794 0.452 -0.217 0.672 0.452 -0.217 -0.146 0.303 -0.098 0.351 0.175 - 76.15 12.774 12.782 12.782 0.450 0.102 0.661 0.450 0.102 0.068 0.298 0.046 0.325 0.154 - 76.20 13.061 13.081 13.081 0.714 -0.060 0.948 0.714 -0.060 -0.057 0.677 -0.043 0.706 0.340 - 76.25 13.208 13.218 13.221 0.526 -0.291 1.095 0.526 -0.291 -0.319 0.576 -0.153 0.780 0.338 - 76.30 13.092 13.092 13.092 -0.007 -0.011 0.979 -0.007 -0.011 -0.010 -0.007 0.000 0.479 0.006 - 76.35 13.202 13.207 13.207 -0.346 0.029 1.090 -0.346 0.029 0.032 -0.377 -0.010 0.654 0.189 - 76.40 13.209 13.212 13.212 -0.283 -0.104 1.096 -0.283 -0.104 -0.113 -0.310 0.029 0.646 0.166 - 76.45 13.271 13.277 13.279 -0.391 -0.234 1.158 -0.391 -0.234 -0.271 -0.453 0.092 0.775 0.268 - 76.50 13.353 13.353 13.354 -0.082 0.120 1.240 -0.082 0.120 0.148 -0.101 -0.010 0.780 0.090 - 76.55 13.447 13.447 13.454 -0.029 -0.434 1.334 -0.029 -0.434 -0.580 -0.039 0.013 0.985 0.290 - 76.60 13.384 13.384 13.392 -0.041 -0.445 1.271 -0.041 -0.445 -0.566 -0.053 0.018 0.908 0.285 - 76.65 13.486 13.486 13.491 0.103 -0.362 1.373 0.103 -0.362 -0.498 0.142 -0.037 1.013 0.259 - 76.70 13.607 13.608 13.610 0.085 -0.238 1.495 0.085 -0.238 -0.355 0.127 -0.020 1.149 0.189 - 76.75 13.670 13.670 13.671 0.056 -0.118 1.558 0.056 -0.118 -0.184 0.087 -0.007 1.222 0.102 - 76.80 13.718 13.719 13.722 -0.118 -0.273 1.606 -0.118 -0.273 -0.439 -0.189 0.032 1.333 0.239 - 76.85 13.755 13.756 13.777 0.197 -0.759 1.642 0.197 -0.759 -1.246 0.324 -0.150 1.656 0.648 - 76.90 13.529 13.547 13.559 0.698 -0.570 1.416 0.698 -0.570 -0.808 0.988 -0.398 1.409 0.669 - 76.95 13.399 13.400 13.409 0.168 -0.475 1.286 0.168 -0.475 -0.611 0.216 -0.080 0.954 0.326 - 77.00 13.193 13.193 13.200 0.092 -0.422 1.080 0.092 -0.422 -0.456 0.099 -0.039 0.676 0.234 - 77.05 13.013 13.013 13.014 0.105 -0.135 0.900 0.105 -0.135 -0.121 0.095 -0.014 0.420 0.077 - 77.10 12.795 12.810 12.810 -0.606 -0.068 0.682 -0.606 -0.068 -0.046 -0.414 0.041 0.419 0.209 - 77.15 13.234 13.243 13.246 -0.501 0.288 1.121 -0.501 0.288 0.323 -0.562 -0.144 0.795 0.332 - 77.20 13.028 13.028 13.034 0.027 0.393 0.915 0.027 0.393 0.360 0.024 0.010 0.496 0.180 - 77.25 13.020 13.021 13.027 0.151 0.383 0.907 0.151 0.383 0.347 0.137 0.058 0.496 0.189 - 77.30 13.080 13.080 13.091 -0.039 0.525 0.967 -0.039 0.525 0.508 -0.038 -0.021 0.606 0.255 - 77.35 13.386 13.387 13.396 -0.157 0.484 1.274 -0.157 0.484 0.617 -0.199 -0.076 0.940 0.326 - 77.40 13.425 13.434 13.443 -0.501 0.486 1.312 -0.501 0.486 0.638 -0.658 -0.244 1.105 0.474 - 77.45 13.463 13.472 13.485 -0.485 0.594 1.350 -0.485 0.594 0.803 -0.655 -0.289 1.206 0.538 - 77.50 13.519 13.531 13.532 -0.582 0.147 1.406 -0.582 0.147 0.207 -0.818 -0.086 1.168 0.424 - 77.55 13.418 13.420 13.424 -0.274 0.328 1.305 -0.274 0.328 0.428 -0.358 -0.090 0.943 0.282 - 77.60 13.574 13.574 13.589 -0.113 0.621 1.461 -0.113 0.621 0.908 -0.165 -0.070 1.267 0.463 - 77.65 13.633 13.633 13.644 0.014 0.555 1.520 0.014 0.555 0.843 0.022 0.008 1.310 0.422 - 77.70 13.769 13.769 13.772 -0.048 0.254 1.657 -0.048 0.254 0.420 -0.079 -0.012 1.405 0.214 - 77.75 13.671 13.671 13.676 0.055 0.382 1.558 0.055 0.382 0.595 0.086 0.021 1.288 0.301 - 77.80 13.527 13.527 13.532 0.112 0.364 1.414 0.112 0.364 0.515 0.158 0.041 1.072 0.270 - 77.85 13.527 13.528 13.534 -0.049 0.410 1.415 -0.049 0.410 0.581 -0.069 -0.020 1.086 0.292 - 77.90 13.621 13.622 13.639 0.144 0.684 1.509 0.144 0.684 1.032 0.217 0.098 1.382 0.530 - 77.95 14.142 14.152 14.159 0.545 0.436 2.029 0.545 0.436 0.884 1.106 0.238 2.302 0.718 - 78.00 13.941 13.955 13.960 0.629 0.385 1.828 0.629 0.385 0.703 1.150 0.242 1.942 0.685 - 78.05 13.688 13.698 13.716 0.519 0.710 1.575 0.519 0.710 1.118 0.817 0.368 1.627 0.716 - 78.10 13.696 13.697 13.703 0.204 0.403 1.583 0.204 0.403 0.638 0.324 0.082 1.355 0.360 - 78.15 13.398 13.399 13.402 0.163 0.260 1.285 0.163 0.260 0.334 0.209 0.042 0.873 0.198 - 78.20 13.619 13.619 13.619 0.136 0.069 1.506 0.136 0.069 0.104 0.204 0.009 1.145 0.115 - 78.25 13.824 13.828 13.829 0.355 0.097 1.711 0.355 0.097 0.166 0.607 0.034 1.531 0.315 - 78.30 13.625 13.635 13.636 0.520 -0.172 1.512 0.520 -0.172 -0.261 0.786 -0.090 1.293 0.417 - 78.35 13.563 13.575 13.576 0.578 -0.074 1.450 0.578 -0.074 -0.107 0.838 -0.043 1.221 0.423 - 78.40 13.307 13.318 13.318 0.550 0.051 1.194 0.550 0.051 0.061 0.657 0.028 0.865 0.330 - 78.45 13.430 13.436 13.440 0.407 0.354 1.317 0.407 0.354 0.466 0.536 0.144 1.013 0.362 - 78.50 13.160 13.166 13.172 0.403 0.398 1.047 0.403 0.398 0.416 0.421 0.160 0.708 0.307 - 78.55 12.802 12.804 12.807 0.203 0.307 0.689 0.203 0.307 0.211 0.140 0.062 0.305 0.131 - 78.60 12.697 12.700 12.701 -0.251 0.202 0.584 -0.251 0.202 0.118 -0.147 -0.051 0.223 0.097 - 78.65 12.548 12.556 12.556 -0.441 -0.005 0.436 -0.441 -0.005 -0.002 -0.192 0.002 0.192 0.096 - 78.70 12.803 12.808 12.809 -0.349 0.159 0.690 -0.349 0.159 0.110 -0.241 -0.056 0.312 0.135 - 78.75 12.768 12.774 12.774 -0.393 0.058 0.655 -0.393 0.058 0.038 -0.258 -0.023 0.294 0.131 - 78.80 12.912 12.925 12.925 -0.574 0.002 0.799 -0.574 0.002 0.002 -0.459 -0.001 0.484 0.230 - 78.85 13.030 13.034 13.039 -0.345 -0.353 0.917 -0.345 -0.353 -0.324 -0.316 0.122 0.542 0.234 - 78.90 12.862 12.868 12.881 -0.379 -0.588 0.749 -0.379 -0.588 -0.441 -0.284 0.223 0.525 0.285 - 78.95 13.080 13.083 13.090 -0.241 -0.453 0.968 -0.241 -0.453 -0.438 -0.233 0.109 0.600 0.254 - 79.00 12.968 12.969 12.979 -0.138 -0.513 0.855 -0.138 -0.513 -0.439 -0.118 0.071 0.507 0.230 - 79.05 12.952 12.953 12.957 -0.141 -0.335 0.839 -0.141 -0.335 -0.281 -0.118 0.047 0.418 0.154 - 79.10 13.079 13.079 13.100 0.141 -0.743 0.966 0.141 -0.743 -0.717 0.136 -0.104 0.752 0.369 - 79.15 12.831 12.831 12.866 -0.039 -0.947 0.718 -0.039 -0.947 -0.680 -0.028 0.037 0.707 0.341 - 79.20 12.688 12.693 12.707 -0.373 -0.590 0.575 -0.373 -0.590 -0.339 -0.215 0.220 0.409 0.229 - 79.25 12.508 12.523 12.559 -0.615 -0.952 0.395 -0.615 -0.952 -0.376 -0.243 0.585 0.720 0.368 - 79.30 12.857 12.889 12.957 -0.907 -1.326 0.744 -0.907 -1.326 -0.987 -0.675 1.203 1.567 0.848 - 79.35 12.926 12.956 13.025 -0.876 -1.343 0.813 -0.876 -1.343 -1.093 -0.712 1.177 1.617 0.878 - 79.40 12.943 12.998 13.086 -1.196 -1.520 0.830 -1.196 -1.520 -1.261 -0.992 1.817 2.214 1.212 - 79.45 12.741 12.777 12.852 -0.960 -1.390 0.628 -0.960 -1.390 -0.873 -0.603 1.335 1.624 0.853 - 79.50 12.513 12.535 12.607 -0.754 -1.345 0.400 -0.754 -1.345 -0.538 -0.301 1.014 1.268 0.593 - 79.55 12.491 12.520 12.597 -0.853 -1.391 0.378 -0.853 -1.391 -0.525 -0.322 1.187 1.403 0.669 - 79.60 12.625 12.654 12.780 -0.861 -1.791 0.512 -0.861 -1.791 -0.916 -0.441 1.543 2.105 0.924 - 79.65 12.601 12.613 12.707 -0.540 -1.540 0.488 -0.540 -1.540 -0.752 -0.264 0.832 1.451 0.576 - 79.70 12.905 12.917 12.999 -0.560 -1.457 0.792 -0.560 -1.457 -1.154 -0.444 0.816 1.532 0.741 - 79.75 12.615 12.622 12.667 -0.421 -1.058 0.502 -0.421 -1.058 -0.531 -0.212 0.446 0.774 0.363 - 79.80 12.838 12.849 12.933 -0.530 -1.470 0.725 -0.530 -1.470 -1.066 -0.385 0.779 1.484 0.688 - 79.85 12.927 12.928 12.985 -0.083 -1.215 0.815 -0.083 -1.215 -0.990 -0.068 0.101 1.073 0.499 - 79.90 13.002 13.002 13.038 -0.136 -0.966 0.889 -0.136 -0.966 -0.858 -0.121 0.131 0.871 0.438 - 79.95 13.172 13.174 13.209 -0.215 -0.958 1.060 -0.215 -0.958 -1.015 -0.228 0.206 1.043 0.530 - 80.00 12.805 12.807 12.837 -0.208 -0.877 0.692 -0.208 -0.877 -0.607 -0.144 0.182 0.646 0.325 - 80.05 13.100 13.100 13.150 0.027 -1.143 0.988 0.027 -1.143 -1.129 0.027 -0.031 1.141 0.565 - 80.10 12.896 12.902 12.935 0.406 -0.923 0.783 0.406 -0.923 -0.722 0.318 -0.374 0.814 0.437 - 80.15 12.731 12.734 12.748 0.267 -0.598 0.618 0.267 -0.598 -0.370 0.165 -0.160 0.405 0.218 - 80.20 12.853 12.853 12.871 -0.023 -0.683 0.740 -0.023 -0.683 -0.505 -0.017 0.016 0.507 0.253 - 80.25 12.879 12.879 12.895 0.001 -0.645 0.766 0.001 -0.645 -0.494 0.001 -0.001 0.502 0.247 - 80.30 12.852 12.855 12.864 -0.271 -0.489 0.739 -0.271 -0.489 -0.361 -0.200 0.133 0.429 0.217 - 80.35 12.912 12.912 12.913 -0.102 -0.164 0.799 -0.102 -0.164 -0.131 -0.081 0.017 0.338 0.078 - 80.40 12.735 12.736 12.736 0.136 -0.157 0.622 0.136 -0.157 -0.098 0.084 -0.021 0.215 0.065 - 80.45 12.563 12.565 12.570 0.253 -0.348 0.450 0.253 -0.348 -0.157 0.114 -0.088 0.194 0.106 - 80.50 12.500 12.502 12.504 0.250 -0.227 0.387 0.250 -0.227 -0.088 0.097 -0.057 0.132 0.071 - 80.55 12.403 12.410 12.415 0.427 -0.319 0.290 0.427 -0.319 -0.093 0.124 -0.136 0.184 0.103 - 80.60 12.547 12.567 12.575 0.706 -0.468 0.434 0.706 -0.468 -0.203 0.306 -0.331 0.453 0.247 - 80.65 12.475 12.475 12.486 0.008 -0.533 0.362 0.008 -0.533 -0.193 0.003 -0.004 0.207 0.096 - 80.70 12.325 12.327 12.332 -0.194 -0.349 0.212 -0.194 -0.349 -0.074 -0.041 0.068 0.102 0.054 - 80.75 12.117 12.121 12.129 0.312 -0.426 0.004 0.312 -0.426 -0.002 0.001 -0.133 0.140 0.067 - 80.80 12.210 12.221 12.241 0.526 -0.689 0.097 0.526 -0.689 -0.067 0.051 -0.363 0.381 0.186 - 80.85 12.533 12.540 12.562 0.426 -0.735 0.420 0.426 -0.735 -0.309 0.179 -0.313 0.449 0.237 - 80.90 12.523 12.547 12.556 0.778 -0.464 0.410 0.778 -0.464 -0.190 0.319 -0.361 0.494 0.259 - 80.95 12.403 12.418 12.440 0.603 -0.751 0.290 0.603 -0.751 -0.218 0.175 -0.453 0.506 0.266 - 81.00 12.487 12.493 12.515 0.395 -0.740 0.374 0.395 -0.740 -0.277 0.148 -0.292 0.422 0.214 - 81.05 12.526 12.536 12.536 0.499 -0.103 0.413 0.499 -0.103 -0.043 0.206 -0.052 0.215 0.108 - 81.10 12.716 12.731 12.732 0.616 -0.156 0.603 0.616 -0.156 -0.094 0.371 -0.096 0.383 0.197 - 81.15 12.785 12.786 12.789 0.204 -0.265 0.672 0.204 -0.265 -0.178 0.137 -0.054 0.282 0.116 - 81.20 12.485 12.485 12.486 0.123 0.178 0.372 0.123 0.178 0.066 0.046 0.022 0.092 0.042 - 81.25 12.246 12.248 12.249 0.241 -0.118 0.133 0.241 -0.118 -0.016 0.032 -0.028 0.045 0.023 - 81.30 12.138 12.143 12.143 0.354 -0.064 0.025 0.354 -0.064 -0.002 0.009 -0.023 0.065 0.012 - 81.35 11.868 11.869 11.870 0.171 0.094 -0.245 0.171 0.094 -0.023 -0.042 0.016 0.049 0.025 - 81.40 12.201 12.201 12.210 0.006 0.468 0.088 0.006 0.468 0.041 0.001 0.003 0.113 0.021 - 81.45 11.925 11.929 11.929 0.300 0.069 -0.188 0.300 0.069 -0.013 -0.056 0.021 0.065 0.031 - 81.50 11.885 11.888 11.891 0.272 -0.235 -0.227 0.272 -0.235 0.054 -0.062 -0.064 0.091 0.052 - 81.55 12.203 12.203 12.203 0.072 -0.024 0.090 0.072 -0.024 -0.002 0.007 -0.002 0.007 0.004 - 81.60 12.022 12.022 12.022 -0.057 0.058 -0.091 -0.057 0.058 -0.005 0.005 -0.003 0.007 0.004 - 81.65 11.826 11.826 11.827 0.058 0.051 -0.287 0.058 0.051 -0.015 -0.017 0.003 0.044 0.011 - 81.70 11.912 11.914 11.916 -0.204 0.229 -0.201 -0.204 0.229 -0.046 0.041 -0.047 0.067 0.039 - 81.75 11.778 11.779 11.780 -0.102 0.169 -0.334 -0.102 0.169 -0.056 0.034 -0.017 0.075 0.034 - 81.80 11.663 11.670 11.675 0.411 0.344 -0.450 0.411 0.344 -0.155 -0.185 0.141 0.245 0.140 - 81.85 11.479 11.487 11.500 0.435 0.529 -0.634 0.435 0.529 -0.335 -0.276 0.230 0.435 0.246 - 81.90 11.578 11.589 11.609 0.512 0.670 -0.535 0.512 0.670 -0.358 -0.274 0.343 0.498 0.283 - 81.95 11.790 11.798 11.807 0.449 0.447 -0.323 0.449 0.447 -0.144 -0.145 0.200 0.253 0.143 - 82.00 11.507 11.509 11.509 0.223 0.064 -0.606 0.223 0.064 -0.039 -0.135 0.014 0.211 0.071 - 82.05 11.566 11.569 11.569 0.251 -0.056 -0.547 0.251 -0.056 0.031 -0.137 -0.014 0.183 0.071 - 82.10 11.448 11.450 11.454 0.188 -0.317 -0.665 0.188 -0.317 0.211 -0.125 -0.060 0.289 0.126 - 82.15 11.595 11.596 11.617 0.160 -0.705 -0.518 0.160 -0.705 0.365 -0.083 -0.113 0.395 0.195 - 82.20 11.360 11.361 11.376 0.075 -0.582 -0.752 0.075 -0.582 0.437 -0.056 -0.043 0.455 0.222 - 82.25 10.917 10.917 10.919 -0.070 -0.165 -1.196 -0.070 -0.165 0.197 0.084 0.012 0.731 0.107 - 82.30 10.786 10.788 10.789 -0.175 -0.164 -1.327 -0.175 -0.164 0.217 0.232 0.029 0.909 0.159 - 82.35 10.990 10.990 10.993 0.023 -0.250 -1.123 0.023 -0.250 0.281 -0.026 -0.006 0.662 0.141 - 82.40 11.069 11.069 11.076 -0.034 -0.394 -1.044 -0.034 -0.394 0.411 0.035 0.013 0.623 0.206 - 82.45 10.918 10.919 10.935 0.152 -0.600 -1.195 0.152 -0.600 0.718 -0.182 -0.091 0.906 0.373 - 82.50 11.328 11.329 11.385 0.160 -1.133 -0.785 0.160 -1.133 0.890 -0.125 -0.181 0.963 0.458 - 82.55 11.276 11.276 11.352 0.008 -1.311 -0.836 0.008 -1.311 1.097 -0.007 -0.010 1.209 0.548 - 82.60 10.955 10.955 11.002 -0.080 -1.010 -1.158 -0.080 -1.010 1.170 0.092 0.080 1.184 0.588 - 82.65 10.734 10.734 10.770 -0.059 -0.879 -1.379 -0.059 -0.879 1.212 0.081 0.052 1.339 0.608 - 82.70 10.967 10.967 11.055 -0.042 -1.385 -1.145 -0.042 -1.385 1.587 0.048 0.058 1.617 0.794 - 82.75 10.894 10.899 10.985 -0.335 -1.368 -1.218 -0.335 -1.368 1.667 0.408 0.458 1.734 0.888 - 82.80 11.072 11.082 11.159 -0.466 -1.313 -1.041 -0.466 -1.313 1.367 0.485 0.612 1.512 0.787 - 82.85 11.463 11.464 11.555 -0.042 -1.448 -0.649 -0.042 -1.448 0.940 0.027 0.061 1.261 0.471 - 82.90 11.437 11.439 11.559 0.225 -1.661 -0.676 0.225 -1.661 1.122 -0.152 -0.373 1.633 0.596 - 82.95 11.408 11.409 11.463 -0.110 -1.111 -0.705 -0.110 -1.111 0.783 0.078 0.122 0.871 0.398 - 83.00 11.135 11.137 11.152 0.195 -0.565 -0.977 0.195 -0.565 0.552 -0.191 -0.110 0.656 0.297 - 83.05 11.217 11.222 11.230 0.336 -0.400 -0.895 0.336 -0.400 0.358 -0.301 -0.135 0.537 0.243 - 83.10 11.146 11.147 11.158 0.168 -0.493 -0.967 0.168 -0.493 0.476 -0.163 -0.083 0.603 0.255 - 83.15 11.110 11.121 11.156 0.484 -0.884 -1.003 0.484 -0.884 0.886 -0.485 -0.427 1.010 0.549 - 83.20 10.767 10.775 10.789 0.405 -0.563 -1.346 0.405 -0.563 0.757 -0.545 -0.228 1.146 0.480 - 83.25 10.709 10.722 10.723 0.535 -0.116 -1.404 0.535 -0.116 0.164 -0.752 -0.062 1.136 0.386 - 83.30 10.887 10.914 10.914 0.766 -0.077 -1.226 0.766 -0.077 0.095 -0.939 -0.059 1.047 0.473 - 83.35 11.006 11.018 11.022 0.512 -0.307 -1.107 0.512 -0.307 0.340 -0.567 -0.157 0.791 0.340 - 83.40 11.156 11.175 11.188 0.648 -0.542 -0.957 0.648 -0.542 0.519 -0.620 -0.351 0.815 0.441 - 83.45 11.325 11.338 11.351 0.539 -0.548 -0.788 0.539 -0.548 0.431 -0.424 -0.295 0.605 0.337 - 83.50 10.932 10.943 10.944 0.497 0.100 -1.181 0.497 0.100 -0.118 -0.587 0.050 0.826 0.300 - 83.55 11.054 11.063 11.063 0.448 -0.087 -1.059 0.448 -0.087 0.092 -0.475 -0.039 0.665 0.242 - 83.60 11.235 11.253 11.253 0.633 0.033 -0.878 0.633 0.033 -0.029 -0.556 0.021 0.586 0.278 - 83.65 11.582 11.601 11.602 0.674 -0.099 -0.531 0.674 -0.099 0.053 -0.358 -0.067 0.373 0.184 - 83.70 11.381 11.403 11.403 0.704 0.052 -0.732 0.704 0.052 -0.038 -0.515 0.037 0.517 0.259 - 83.75 11.402 11.433 11.433 0.840 0.004 -0.711 0.840 0.004 -0.003 -0.597 0.003 0.606 0.299 - 83.80 11.561 11.601 11.603 0.958 -0.228 -0.552 0.958 -0.228 0.126 -0.529 -0.219 0.637 0.293 - 83.85 11.507 11.587 11.591 1.362 -0.279 -0.606 1.362 -0.279 0.169 -0.825 -0.381 1.150 0.462 - 83.90 11.740 11.785 11.800 1.030 -0.595 -0.372 1.030 -0.595 0.222 -0.384 -0.613 0.777 0.378 - 83.95 11.678 11.714 11.730 0.927 -0.607 -0.435 0.927 -0.607 0.264 -0.404 -0.563 0.709 0.371 - 84.00 11.561 11.601 11.620 0.966 -0.664 -0.552 0.966 -0.664 0.367 -0.534 -0.642 0.840 0.456 - 84.05 11.817 11.835 11.847 0.652 -0.538 -0.296 0.652 -0.538 0.159 -0.193 -0.351 0.402 0.216 - 84.10 11.933 11.943 11.950 0.488 -0.415 -0.180 0.488 -0.415 0.075 -0.088 -0.203 0.222 0.117 - 84.15 11.799 11.800 11.816 0.191 -0.613 -0.314 0.191 -0.613 0.192 -0.060 -0.117 0.255 0.117 - 84.20 11.788 11.790 11.800 0.222 -0.492 -0.325 0.222 -0.492 0.160 -0.072 -0.109 0.198 0.103 - 84.25 11.798 11.800 11.800 0.228 -0.093 -0.315 0.228 -0.093 0.029 -0.072 -0.021 0.080 0.040 - 84.30 11.874 11.874 11.877 0.131 0.263 -0.239 0.131 0.263 -0.063 -0.031 0.034 0.072 0.039 - 84.35 11.753 11.767 11.767 0.578 0.056 -0.360 0.578 0.056 -0.020 -0.208 0.032 0.233 0.106 - 84.40 11.945 11.952 11.952 0.386 -0.101 -0.168 0.386 -0.101 0.017 -0.065 -0.039 0.094 0.039 - 84.45 12.077 12.083 12.088 0.396 -0.341 -0.036 0.396 -0.341 0.012 -0.014 -0.135 0.137 0.068 - 84.50 11.895 11.907 11.912 0.531 -0.327 -0.218 0.531 -0.327 0.071 -0.115 -0.174 0.218 0.110 - 84.55 11.823 11.825 11.830 0.236 0.342 -0.290 0.236 0.342 -0.099 -0.068 0.081 0.129 0.073 - 84.60 11.762 11.763 11.785 -0.090 0.717 -0.350 -0.090 0.717 -0.251 0.031 -0.064 0.323 0.131 - 84.65 11.534 11.534 11.556 0.026 0.720 -0.579 0.026 0.720 -0.417 -0.015 0.019 0.427 0.209 - 84.70 11.351 11.353 11.361 0.185 0.428 -0.761 0.185 0.428 -0.326 -0.141 0.079 0.398 0.182 - 84.75 11.750 11.752 11.752 0.214 0.127 -0.363 0.214 0.127 -0.046 -0.078 0.027 0.097 0.047 - 84.80 11.842 11.843 11.843 -0.039 -0.085 -0.270 -0.039 -0.085 0.023 0.011 0.003 0.041 0.013 - 84.85 11.606 11.607 11.614 0.106 -0.424 -0.507 0.106 -0.424 0.215 -0.054 -0.045 0.224 0.113 - 84.90 11.350 11.357 11.358 0.387 -0.184 -0.763 0.387 -0.184 0.140 -0.295 -0.071 0.383 0.167 - 84.95 11.202 11.211 11.212 0.450 -0.115 -0.911 0.450 -0.115 0.105 -0.410 -0.052 0.522 0.213 - 85.00 11.276 11.288 11.290 0.519 -0.187 -0.837 0.519 -0.187 0.156 -0.434 -0.097 0.502 0.236 - 85.05 11.202 11.215 11.215 0.556 -0.044 -0.911 0.556 -0.044 0.040 -0.506 -0.025 0.570 0.254 - 85.10 11.364 11.380 11.380 0.591 -0.009 -0.748 0.591 -0.009 0.007 -0.442 -0.005 0.454 0.221 - 85.15 11.645 11.663 11.664 0.648 -0.164 -0.468 0.648 -0.164 0.077 -0.303 -0.106 0.333 0.165 - 85.20 11.581 11.591 11.594 0.482 -0.268 -0.532 0.482 -0.268 0.143 -0.256 -0.129 0.294 0.160 - 85.25 11.523 11.531 11.534 0.439 -0.259 -0.590 0.439 -0.259 0.153 -0.259 -0.114 0.304 0.161 - 85.30 11.695 11.697 11.698 0.244 -0.117 -0.418 0.244 -0.117 0.049 -0.102 -0.029 0.124 0.058 - 85.35 11.989 11.989 11.991 -0.076 -0.220 -0.124 -0.076 -0.220 0.027 0.009 0.017 0.035 0.017 - 85.40 12.369 12.372 12.397 -0.275 -0.786 0.256 -0.275 -0.786 -0.201 -0.070 0.216 0.379 0.152 - 85.45 12.077 12.081 12.095 -0.311 -0.583 -0.036 -0.311 -0.583 0.021 0.011 0.181 0.219 0.091 - 85.50 11.592 11.592 11.604 0.098 -0.513 -0.521 0.098 -0.513 0.267 -0.051 -0.050 0.272 0.138 - 85.55 11.667 11.670 11.677 0.257 -0.401 -0.446 0.257 -0.401 0.179 -0.114 -0.103 0.213 0.118 - 85.60 11.549 11.556 11.562 0.413 -0.368 -0.564 0.413 -0.368 0.207 -0.233 -0.152 0.312 0.173 - 85.65 11.334 11.337 11.357 0.253 -0.681 -0.779 0.253 -0.681 0.531 -0.197 -0.172 0.567 0.296 - 85.70 11.287 11.287 11.311 0.121 -0.735 -0.826 0.121 -0.735 0.607 -0.100 -0.089 0.619 0.311 - 85.75 11.250 11.255 11.262 0.342 -0.381 -0.863 0.342 -0.381 0.329 -0.295 -0.130 0.503 0.230 - 85.80 11.524 11.524 11.524 -0.002 -0.031 -0.589 -0.002 -0.031 0.018 0.001 0.000 0.174 0.009 - 85.85 11.682 11.684 11.686 0.241 -0.214 -0.431 0.241 -0.214 0.092 -0.104 -0.052 0.145 0.074 - 85.90 11.430 11.430 11.432 -0.067 -0.245 -0.683 -0.067 -0.245 0.167 0.046 0.016 0.266 0.087 - 85.95 11.336 11.336 11.341 -0.017 -0.334 -0.777 -0.017 -0.334 0.260 0.013 0.006 0.358 0.130 - 86.00 11.208 11.208 11.219 0.064 -0.502 -0.905 0.064 -0.502 0.454 -0.057 -0.032 0.538 0.230 - 86.05 10.876 10.876 10.877 -0.032 -0.128 -1.237 -0.032 -0.128 0.158 0.039 0.004 0.773 0.081 - 86.10 11.022 11.023 11.023 -0.075 0.040 -1.090 -0.075 0.040 -0.043 0.082 -0.003 0.598 0.046 - 86.15 11.109 11.111 11.114 0.225 0.244 -1.004 0.225 0.244 -0.245 -0.225 0.055 0.559 0.169 - 86.20 10.984 10.987 11.011 0.244 0.723 -1.128 0.244 0.723 -0.816 -0.275 0.176 0.928 0.439 - 86.25 11.079 11.080 11.093 0.145 0.545 -1.034 0.145 0.545 -0.564 -0.150 0.079 0.694 0.294 - 86.30 11.018 11.022 11.037 0.311 0.573 -1.095 0.311 0.573 -0.627 -0.341 0.178 0.812 0.368 - 86.35 10.980 10.980 11.022 -0.022 0.964 -1.133 -0.022 0.964 -1.093 0.025 -0.022 1.107 0.547 - 86.40 10.915 10.915 10.938 0.059 0.710 -1.198 0.059 0.710 -0.851 -0.071 0.042 0.972 0.428 - 86.45 10.812 10.816 10.829 0.269 0.537 -1.301 0.269 0.537 -0.698 -0.350 0.144 1.026 0.397 - 86.50 10.974 10.985 10.998 0.491 0.523 -1.139 0.491 0.523 -0.596 -0.560 0.257 0.906 0.428 - 86.55 11.170 11.180 11.190 0.458 0.485 -0.942 0.458 0.485 -0.457 -0.432 0.222 0.667 0.333 - 86.60 11.140 11.157 11.159 0.604 0.217 -0.973 0.604 0.217 -0.211 -0.587 0.131 0.679 0.319 - 86.65 10.815 10.834 10.836 0.647 0.190 -1.298 0.647 0.190 -0.247 -0.839 0.123 1.069 0.442 - 86.70 10.845 10.856 10.856 0.470 0.096 -1.267 0.470 0.096 -0.121 -0.595 0.045 0.918 0.305 - 86.75 10.985 10.987 10.999 0.195 -0.527 -1.128 0.195 -0.527 0.595 -0.220 -0.103 0.794 0.321 - 86.80 10.948 10.948 10.959 -0.106 -0.489 -1.165 -0.106 -0.489 0.570 0.124 0.052 0.804 0.293 - 86.85 10.719 10.719 10.721 -0.030 -0.209 -1.394 -0.030 -0.209 0.291 0.042 0.006 0.994 0.147 - 86.90 10.796 10.805 10.805 0.426 -0.075 -1.316 0.426 -0.075 0.099 -0.560 -0.032 0.960 0.285 - 86.95 10.681 10.699 10.702 0.619 0.272 -1.432 0.619 0.272 -0.389 -0.886 0.168 1.253 0.491 - 87.00 10.736 10.752 10.753 0.598 0.137 -1.377 0.598 0.137 -0.188 -0.824 0.082 1.137 0.425 - 87.05 11.046 11.059 11.060 0.535 0.183 -1.067 0.535 0.183 -0.196 -0.570 0.098 0.729 0.305 - 87.10 11.087 11.109 11.110 0.705 0.039 -1.026 0.705 0.039 -0.040 -0.723 0.027 0.775 0.362 - 87.15 10.973 10.981 10.984 0.416 -0.279 -1.140 0.416 -0.279 0.318 -0.475 -0.116 0.775 0.292 - 87.20 11.008 11.025 11.033 0.610 -0.419 -1.105 0.610 -0.419 0.462 -0.674 -0.255 0.884 0.428 - 87.25 10.968 10.986 11.012 0.616 -0.757 -1.144 0.616 -0.757 0.867 -0.705 -0.466 1.131 0.605 - 87.30 10.834 10.848 10.869 0.549 -0.684 -1.279 0.549 -0.684 0.875 -0.703 -0.376 1.203 0.592 - 87.35 10.583 10.601 10.607 0.618 -0.376 -1.530 0.618 -0.376 0.575 -0.946 -0.232 1.432 0.566 - 87.40 10.311 10.314 10.317 0.250 -0.249 -1.802 0.250 -0.249 0.449 -0.451 -0.062 1.687 0.320 - 87.45 10.600 10.605 10.625 0.330 -0.641 -1.513 0.330 -0.641 0.969 -0.499 -0.211 1.404 0.555 - 87.50 10.752 10.755 10.812 0.256 -1.114 -1.361 0.256 -1.114 1.516 -0.349 -0.286 1.579 0.791 - 87.55 10.823 10.826 10.892 -0.273 -1.193 -1.290 -0.273 -1.193 1.540 0.352 0.325 1.581 0.806 - 87.60 10.940 10.946 10.980 -0.373 -0.869 -1.173 -0.373 -0.869 1.019 0.438 0.324 1.136 0.578 - 87.65 10.934 10.936 10.971 0.196 -0.881 -1.179 0.196 -0.881 1.038 -0.230 -0.172 1.101 0.539 - 87.70 10.793 10.794 10.832 0.131 -0.913 -1.320 0.131 -0.913 1.206 -0.173 -0.119 1.297 0.612 - 87.75 10.727 10.727 10.764 0.036 -0.891 -1.385 0.036 -0.891 1.234 -0.050 -0.032 1.357 0.618 - 87.80 11.104 11.105 11.126 0.131 -0.689 -1.009 0.131 -0.689 0.695 -0.132 -0.090 0.755 0.357 - 87.85 10.926 10.932 10.968 -0.368 -0.876 -1.187 -0.368 -0.876 1.040 0.436 0.322 1.155 0.586 - 87.90 10.827 10.834 10.869 -0.374 -0.880 -1.285 -0.374 -0.880 1.131 0.480 0.329 1.283 0.636 - 87.95 10.703 10.704 10.716 -0.143 -0.517 -1.410 -0.143 -0.517 0.730 0.202 0.074 1.138 0.380 - 88.00 10.926 10.928 10.948 0.201 -0.666 -1.187 0.201 -0.666 0.790 -0.238 -0.134 0.946 0.418 - 88.05 10.721 10.730 10.766 0.432 -0.882 -1.392 0.432 -0.882 1.228 -0.601 -0.381 1.451 0.710 - 88.10 10.539 10.547 10.561 0.415 -0.543 -1.574 0.415 -0.543 0.854 -0.654 -0.225 1.473 0.550 - 88.15 10.707 10.709 10.738 0.239 -0.778 -1.406 0.239 -0.778 1.094 -0.336 -0.186 1.320 0.580 - 88.20 10.537 10.539 10.554 0.203 -0.559 -1.575 0.203 -0.559 0.880 -0.320 -0.113 1.418 0.472 - 88.25 10.399 10.399 10.412 -0.046 -0.522 -1.714 -0.046 -0.522 0.895 0.080 0.024 1.607 0.450 - 88.30 10.300 10.303 10.303 -0.258 -0.027 -1.813 -0.258 -0.027 0.050 0.468 0.007 1.677 0.235 - 88.35 10.487 10.512 10.512 -0.730 0.037 -1.626 -0.730 0.037 -0.060 1.187 -0.027 1.589 0.595 - 88.40 10.145 10.175 10.175 -0.777 0.089 -1.968 -0.777 0.089 -0.175 1.528 -0.069 2.241 0.770 - 88.45 10.274 10.310 10.313 -0.851 0.250 -1.838 -0.851 0.250 -0.459 1.564 -0.212 2.083 0.822 - 88.50 10.366 10.387 10.388 -0.659 0.185 -1.747 -0.659 0.185 -0.323 1.152 -0.122 1.760 0.601 - 88.55 10.611 10.648 10.654 -0.889 0.364 -1.502 -0.889 0.364 -0.546 1.335 -0.323 1.589 0.739 - 88.60 10.581 10.627 10.628 -0.985 -0.104 -1.532 -0.985 -0.104 0.160 1.509 0.103 1.664 0.760 - 88.65 10.500 10.515 10.522 -0.552 -0.384 -1.612 -0.552 -0.384 0.619 0.890 0.212 1.526 0.552 - 88.70 10.572 10.602 10.607 -0.799 -0.329 -1.541 -0.799 -0.329 0.506 1.230 0.262 1.560 0.678 - 88.75 10.384 10.443 10.448 -1.110 -0.317 -1.729 -1.110 -0.317 0.548 1.919 0.352 2.161 1.013 - 88.80 10.151 10.208 10.208 -1.077 0.012 -1.962 -1.077 0.012 -0.024 2.114 -0.013 2.506 1.057 - 88.85 10.088 10.126 10.127 -0.883 -0.113 -2.025 -0.883 -0.113 0.230 1.789 0.100 2.447 0.903 - 88.90 10.123 10.159 10.168 -0.855 -0.422 -1.990 -0.855 -0.422 0.840 1.702 0.361 2.434 0.966 - 88.95 10.177 10.195 10.215 -0.606 -0.640 -1.936 -0.606 -0.640 1.239 1.172 0.388 2.262 0.875 - 89.00 10.277 10.279 10.297 -0.199 -0.621 -1.836 -0.199 -0.621 1.141 0.365 0.124 1.898 0.602 - 89.05 10.126 10.135 10.153 -0.421 -0.607 -1.986 -0.421 -0.607 1.207 0.837 0.256 2.246 0.745 - 89.10 10.426 10.433 10.462 -0.375 -0.772 -1.686 -0.375 -0.772 1.301 0.633 0.290 1.790 0.738 - 89.15 10.354 10.360 10.378 -0.337 -0.623 -1.759 -0.337 -0.623 1.096 0.593 0.210 1.798 0.632 - 89.20 10.526 10.537 10.588 -0.485 -1.041 -1.587 -0.485 -1.041 1.652 0.770 0.505 1.919 0.946 - 89.25 10.444 10.453 10.475 -0.431 -0.686 -1.669 -0.431 -0.686 1.145 0.719 0.296 1.721 0.692 - 89.30 10.375 10.396 10.422 -0.650 -0.743 -1.738 -0.650 -0.743 1.290 1.130 0.483 1.997 0.891 - 89.35 10.555 10.580 10.607 -0.727 -0.757 -1.558 -0.727 -0.757 1.179 1.132 0.550 1.764 0.862 - 89.40 10.462 10.492 10.522 -0.790 -0.799 -1.651 -0.790 -0.799 1.320 1.304 0.631 1.994 0.980 - 89.45 10.507 10.540 10.568 -0.833 -0.765 -1.605 -0.833 -0.765 1.228 1.337 0.637 1.928 0.962 - 89.50 10.411 10.505 10.544 -1.403 -0.911 -1.702 -1.403 -0.911 1.550 2.388 1.278 2.848 1.561 - 89.55 10.570 10.645 10.694 -1.264 -1.019 -1.543 -1.264 -1.019 1.572 1.950 1.288 2.509 1.408 - 89.60 10.623 10.720 10.768 -1.440 -1.020 -1.490 -1.440 -1.020 1.521 2.145 1.469 2.667 1.506 - 89.65 10.652 10.752 10.803 -1.464 -1.048 -1.461 -1.464 -1.048 1.531 2.139 1.534 2.688 1.522 - 89.70 10.836 10.974 11.037 -1.733 -1.174 -1.276 -1.733 -1.174 1.498 2.212 2.034 3.005 1.679 - 89.75 11.112 11.305 11.391 -2.076 -1.398 -1.000 -2.076 -1.398 1.398 2.077 2.902 3.633 1.917 - 89.80 10.759 10.924 10.974 -1.890 -1.050 -1.354 -1.890 -1.050 1.421 2.559 1.983 3.253 1.768 - 89.85 10.686 10.891 10.935 -2.102 -0.977 -1.426 -2.102 -0.977 1.393 2.999 2.053 3.704 1.946 - 89.90 10.628 10.784 10.835 -1.830 -1.051 -1.485 -1.830 -1.051 1.561 2.718 1.924 3.330 1.839 - 89.95 10.701 10.844 10.890 -1.760 -0.994 -1.412 -1.760 -0.994 1.404 2.486 1.750 3.041 1.674 - 90.00 10.576 10.694 10.765 -1.584 -1.236 -1.537 -1.584 -1.236 1.900 2.435 1.959 3.200 1.829 - 90.05 10.408 10.510 10.577 -1.459 -1.187 -1.705 -1.459 -1.187 2.023 2.487 1.732 3.222 1.822 - 90.10 10.695 10.860 10.913 -1.885 -1.073 -1.418 -1.885 -1.073 1.522 2.673 2.023 3.358 1.841 - 90.15 10.941 11.094 11.152 -1.837 -1.133 -1.172 -1.837 -1.133 1.328 2.154 2.081 3.017 1.638 - 90.20 10.977 11.131 11.191 -1.842 -1.158 -1.136 -1.842 -1.158 1.315 2.092 2.134 3.013 1.633 - 90.25 11.034 11.190 11.291 -1.865 -1.507 -1.079 -1.865 -1.507 1.626 2.012 2.810 3.456 1.909 - 90.30 11.273 11.445 11.550 -1.979 -1.549 -0.840 -1.979 -1.549 1.301 1.662 3.065 3.510 1.861 - 90.35 11.521 11.690 11.786 -1.980 -1.504 -0.592 -1.980 -1.504 0.890 1.172 2.977 3.266 1.660 - 90.40 11.298 11.390 11.485 -1.445 -1.473 -0.815 -1.445 -1.473 1.200 1.177 2.129 2.461 1.356 - 90.45 11.455 11.628 11.744 -1.997 -1.646 -0.658 -1.997 -1.646 1.082 1.313 3.286 3.564 1.850 - 90.50 12.058 12.243 12.310 -2.124 -1.279 -0.055 -2.124 -1.279 0.071 0.117 2.717 3.075 1.360 - 90.55 11.725 11.891 11.942 -1.982 -1.095 -0.388 -1.982 -1.095 0.425 0.769 2.171 2.640 1.171 - 90.60 11.874 12.020 12.097 -1.869 -1.359 -0.239 -1.869 -1.359 0.325 0.446 2.541 2.699 1.300 - 90.65 12.011 12.187 12.237 -2.067 -1.103 -0.102 -2.067 -1.103 0.112 0.210 2.281 2.750 1.147 - 90.70 12.218 12.355 12.416 -1.838 -1.233 0.105 -1.838 -1.233 -0.129 -0.193 2.266 2.454 1.139 - 90.75 12.252 12.353 12.394 -1.580 -1.012 0.139 -1.580 -1.012 -0.140 -0.219 1.599 1.771 0.810 - 90.80 12.270 12.331 12.377 -1.230 -1.063 0.157 -1.230 -1.063 -0.167 -0.193 1.307 1.334 0.666 - 90.85 11.944 12.013 12.065 -1.282 -1.115 -0.169 -1.282 -1.115 0.188 0.216 1.429 1.458 0.729 - 90.90 11.559 11.633 11.672 -1.311 -0.953 -0.554 -1.311 -0.953 0.528 0.726 1.249 1.467 0.769 - 90.95 11.616 11.678 11.745 -1.201 -1.246 -0.496 -1.201 -1.246 0.618 0.596 1.495 1.620 0.862 - 91.00 11.774 11.851 11.911 -1.350 -1.197 -0.339 -1.350 -1.197 0.406 0.458 1.616 1.685 0.864 - 91.05 11.826 11.880 11.917 -1.138 -0.932 -0.287 -1.138 -0.932 0.268 0.327 1.061 1.123 0.571 - 91.10 11.802 11.839 11.867 -0.938 -0.810 -0.311 -0.938 -0.810 0.252 0.291 0.760 0.816 0.426 - 91.15 11.805 11.829 11.875 -0.749 -1.050 -0.308 -0.749 -1.050 0.324 0.231 0.786 0.879 0.441 - 91.20 11.725 11.767 11.800 -0.989 -0.890 -0.388 -0.989 -0.890 0.345 0.383 0.880 0.960 0.510 - 91.25 11.659 11.688 11.726 -0.824 -0.949 -0.454 -0.824 -0.949 0.431 0.374 0.782 0.892 0.484 - 91.30 11.668 11.768 11.817 -1.531 -1.074 -0.445 -1.531 -1.074 0.478 0.681 1.643 1.847 0.921 - 91.35 11.820 11.931 11.961 -1.621 -0.849 -0.292 -1.621 -0.849 0.248 0.474 1.376 1.716 0.738 - 91.40 11.938 12.008 12.014 -1.295 -0.375 -0.175 -1.295 -0.375 0.066 0.227 0.486 0.925 0.270 - 91.45 11.830 11.909 11.938 -1.373 -0.819 -0.283 -1.373 -0.819 0.232 0.388 1.125 1.319 0.606 - 91.50 11.628 11.700 11.718 -1.292 -0.657 -0.484 -1.292 -0.657 0.318 0.626 0.848 1.168 0.551 - 91.55 11.605 11.686 11.710 -1.376 -0.749 -0.508 -1.376 -0.749 0.380 0.699 1.030 1.356 0.651 - 91.60 11.351 11.397 11.416 -1.019 -0.659 -0.762 -1.019 -0.659 0.502 0.776 0.671 1.027 0.571 - 91.65 11.205 11.264 11.284 -1.150 -0.668 -0.908 -1.150 -0.668 0.606 1.044 0.769 1.297 0.716 - 91.70 11.044 11.132 11.168 -1.392 -0.902 -1.069 -1.392 -0.902 0.964 1.488 1.256 1.947 1.086 - 91.75 11.234 11.285 11.324 -1.070 -0.944 -0.879 -1.070 -0.944 0.830 0.941 1.011 1.405 0.806 - 91.80 11.233 11.270 11.282 -0.911 -0.511 -0.879 -0.911 -0.511 0.449 0.801 0.466 0.932 0.515 - 91.85 11.363 11.383 11.400 -0.686 -0.611 -0.750 -0.686 -0.611 0.458 0.515 0.420 0.704 0.404 - 91.90 11.127 11.155 11.175 -0.791 -0.677 -0.986 -0.791 -0.677 0.667 0.780 0.535 1.028 0.579 - 91.95 11.159 11.189 11.200 -0.816 -0.488 -0.954 -0.816 -0.488 0.466 0.778 0.398 0.907 0.495 - 92.00 11.342 11.364 11.376 -0.715 -0.511 -0.771 -0.715 -0.511 0.394 0.551 0.365 0.684 0.385 - 92.05 11.434 11.487 11.497 -1.104 -0.491 -0.679 -1.104 -0.491 0.333 0.749 0.542 0.960 0.491 - 92.10 11.407 11.454 11.454 -1.038 -0.026 -0.706 -1.038 -0.026 0.018 0.732 0.027 0.788 0.367 - 92.15 11.294 11.365 11.367 -1.271 -0.193 -0.819 -1.271 -0.193 0.158 1.041 0.245 1.162 0.540 - 92.20 11.338 11.496 11.502 -1.897 -0.393 -0.775 -1.897 -0.393 0.305 1.469 0.746 2.176 0.838 - 92.25 11.320 11.511 11.520 -2.091 -0.434 -0.793 -2.091 -0.434 0.344 1.658 0.908 2.596 0.961 - 92.30 11.309 11.538 11.546 -2.287 -0.437 -0.804 -2.287 -0.437 0.352 1.840 1.001 3.035 1.062 - 92.35 11.141 11.351 11.361 -2.177 -0.464 -0.972 -2.177 -0.464 0.451 2.117 1.009 2.950 1.194 - 92.40 11.286 11.498 11.506 -2.200 -0.438 -0.827 -2.200 -0.438 0.363 1.820 0.964 2.858 1.046 - 92.45 10.995 11.176 11.183 -2.006 -0.393 -1.118 -2.006 -0.393 0.439 2.243 0.788 2.714 1.209 - 92.50 11.142 11.329 11.335 -2.054 -0.349 -0.971 -2.054 -0.349 0.339 1.995 0.717 2.642 1.073 - 92.55 10.812 11.031 11.036 -2.185 -0.354 -1.301 -2.185 -0.354 0.460 2.841 0.774 3.295 1.490 - 92.60 10.811 11.005 11.015 -2.061 -0.472 -1.302 -2.061 -0.472 0.614 2.683 0.972 3.082 1.459 - 92.65 10.945 11.084 11.093 -1.750 -0.432 -1.167 -1.750 -0.432 0.505 2.044 0.757 2.307 1.118 - 92.70 10.992 11.157 11.160 -1.915 -0.242 -1.121 -1.915 -0.242 0.271 2.146 0.463 2.490 1.106 - 92.75 10.912 11.127 11.136 -2.179 -0.452 -1.201 -2.179 -0.452 0.542 2.617 0.984 3.197 1.424 - 92.80 11.055 11.326 11.327 -2.463 -0.122 -1.058 -2.463 -0.122 0.129 2.606 0.299 3.600 1.313 - 92.85 11.219 11.468 11.473 -2.373 -0.339 -0.893 -2.373 -0.339 0.302 2.120 0.803 3.272 1.143 - 92.90 11.154 11.333 11.333 -2.002 0.101 -0.958 -2.002 0.101 -0.097 1.918 -0.202 2.468 0.966 - 92.95 10.778 10.884 10.897 -1.519 0.529 -1.335 -1.519 0.529 -0.706 2.028 -0.803 2.185 1.146 - 93.00 10.726 10.848 10.849 -1.619 0.133 -1.386 -1.619 0.133 -0.185 2.245 -0.216 2.281 1.131 - 93.05 10.856 10.979 10.981 -1.635 0.214 -1.256 -1.635 0.214 -0.269 2.054 -0.349 2.148 1.050 - 93.10 11.049 11.166 11.166 -1.613 0.048 -1.064 -1.613 0.048 -0.051 1.716 -0.077 1.868 0.859 - 93.15 10.648 10.703 10.703 -1.087 0.092 -1.465 -1.087 0.092 -0.135 1.593 -0.100 1.669 0.801 - 93.20 10.875 10.927 10.928 -1.071 0.118 -1.238 -1.071 0.118 -0.146 1.326 -0.126 1.347 0.670 - 93.25 10.814 10.897 10.901 -1.344 0.272 -1.299 -1.344 0.272 -0.353 1.745 -0.365 1.783 0.909 - 93.30 10.546 10.597 10.601 -1.034 0.287 -1.567 -1.034 0.287 -0.450 1.620 -0.297 1.803 0.854 - 93.35 10.511 10.551 10.552 -0.918 0.120 -1.601 -0.918 0.120 -0.192 1.470 -0.110 1.711 0.743 - 93.40 10.636 10.696 10.697 -1.138 0.153 -1.477 -1.138 0.153 -0.225 1.680 -0.174 1.750 0.852 - 93.45 10.472 10.518 10.525 -0.983 0.376 -1.640 -0.983 0.376 -0.617 1.612 -0.370 1.899 0.882 - 93.50 10.474 10.509 10.509 -0.857 0.042 -1.639 -0.857 0.042 -0.069 1.405 -0.036 1.711 0.703 - 93.55 10.339 10.372 10.375 -0.821 0.242 -1.773 -0.821 0.242 -0.429 1.456 -0.198 1.939 0.765 - 93.60 10.497 10.509 10.513 -0.502 0.273 -1.616 -0.502 0.273 -0.442 0.811 -0.137 1.469 0.467 - 93.65 10.575 10.581 10.584 -0.361 0.257 -1.538 -0.361 0.257 -0.395 0.555 -0.093 1.281 0.344 - 93.70 10.641 10.662 10.667 -0.666 0.330 -1.472 -0.666 0.330 -0.486 0.981 -0.220 1.360 0.558 - 93.75 10.486 10.510 10.511 -0.723 0.096 -1.627 -0.723 0.096 -0.156 1.177 -0.069 1.590 0.595 - 93.80 10.383 10.400 10.413 -0.588 0.527 -1.729 -0.588 0.527 -0.912 1.016 -0.310 1.807 0.700 - 93.85 10.180 10.214 10.237 -0.825 0.693 -1.932 -0.825 0.693 -1.339 1.594 -0.572 2.448 1.079 - 93.90 10.155 10.188 10.199 -0.822 0.484 -1.958 -0.822 0.484 -0.947 1.610 -0.398 2.372 0.955 - 93.95 10.490 10.528 10.533 -0.887 0.331 -1.622 -0.887 0.331 -0.538 1.440 -0.294 1.765 0.782 - 94.00 10.556 10.594 10.595 -0.902 0.134 -1.557 -0.902 0.134 -0.208 1.404 -0.120 1.627 0.712 - 94.05 10.468 10.513 10.516 -0.973 0.239 -1.645 -0.973 0.239 -0.393 1.601 -0.233 1.855 0.832 - 94.10 10.240 10.258 10.263 -0.607 0.322 -1.873 -0.607 0.322 -0.602 1.136 -0.195 1.990 0.650 - 94.15 10.210 10.248 10.257 -0.872 0.432 -1.902 -0.872 0.432 -0.821 1.659 -0.377 2.283 0.944 - 94.20 10.432 10.452 10.453 -0.649 0.069 -1.680 -0.649 0.069 -0.115 1.090 -0.045 1.625 0.548 - 94.25 10.464 10.468 10.468 -0.295 -0.022 -1.649 -0.295 -0.022 0.037 0.486 0.007 1.404 0.244 - 94.30 10.140 10.140 10.141 0.005 0.152 -1.973 0.005 0.152 -0.300 -0.010 0.001 1.958 0.150 - 94.35 9.810 9.814 9.818 -0.268 -0.295 -2.303 -0.268 -0.295 0.680 0.617 0.079 2.731 0.461 - 94.40 9.678 9.714 9.718 -0.829 -0.293 -2.434 -0.829 -0.293 0.713 2.019 0.243 3.350 1.077 - 94.45 9.704 9.747 9.747 -0.910 -0.076 -2.409 -0.910 -0.076 0.184 2.192 0.069 3.317 1.100 - 94.50 9.596 9.614 9.616 -0.593 -0.152 -2.517 -0.593 -0.152 0.383 1.493 0.090 3.355 0.772 - 94.55 9.594 9.596 9.597 -0.206 -0.137 -2.519 -0.206 -0.137 0.346 0.520 0.028 3.203 0.313 - 94.60 9.644 9.645 9.646 -0.052 -0.195 -2.468 -0.052 -0.195 0.482 0.128 0.010 3.067 0.250 - 94.65 9.462 9.475 9.478 -0.510 0.224 -2.651 -0.510 0.224 -0.593 1.352 -0.114 3.670 0.740 - 94.70 9.774 9.780 9.782 -0.323 -0.200 -2.338 -0.323 -0.200 0.468 0.755 0.065 2.806 0.445 - 94.75 9.888 9.889 9.894 -0.187 -0.315 -2.225 -0.187 -0.315 0.700 0.416 0.059 2.542 0.408 - 94.80 9.849 9.851 9.863 0.205 -0.482 -2.264 0.205 -0.482 1.092 -0.464 -0.099 2.700 0.595 - 94.85 10.116 10.122 10.154 0.344 -0.802 -1.997 0.344 -0.802 1.602 -0.686 -0.276 2.374 0.882 - 94.90 10.011 10.017 10.021 0.357 -0.264 -2.102 0.357 -0.264 0.554 -0.750 -0.094 2.308 0.469 - 94.95 9.880 9.898 9.898 0.596 0.000 -2.233 0.596 0.000 -0.000 -1.332 0.000 2.672 0.666 - 95.00 9.927 9.931 9.934 0.286 0.243 -2.186 0.286 0.243 -0.530 -0.624 0.069 2.459 0.411 - 95.05 9.985 9.985 9.995 0.001 0.439 -2.127 0.001 0.439 -0.934 -0.002 0.000 2.359 0.467 - 95.10 10.076 10.076 10.078 0.059 0.175 -2.037 0.059 0.175 -0.357 -0.120 0.010 2.092 0.188 - 95.15 10.136 10.152 10.153 0.573 -0.149 -1.977 0.573 -0.149 0.294 -1.134 -0.085 2.130 0.587 - 95.20 10.359 10.370 10.373 0.480 -0.243 -1.754 0.480 -0.243 0.426 -0.841 -0.117 1.682 0.475 - 95.25 10.188 10.193 10.196 0.321 -0.225 -1.925 0.321 -0.225 0.434 -0.618 -0.072 1.929 0.379 - 95.30 10.032 10.057 10.060 0.716 -0.224 -2.081 0.716 -0.224 0.466 -1.491 -0.161 2.447 0.785 - 95.35 9.970 9.985 9.991 0.551 -0.361 -2.143 0.551 -0.361 0.773 -1.181 -0.199 2.514 0.713 - 95.40 10.176 10.185 10.188 0.412 -0.269 -1.937 0.412 -0.269 0.521 -0.797 -0.111 1.996 0.479 - 95.45 9.992 9.993 9.993 0.164 -0.013 -2.121 0.164 -0.013 0.028 -0.348 -0.002 2.262 0.175 - 95.50 10.106 10.111 10.113 0.301 -0.213 -2.007 0.301 -0.213 0.428 -0.604 -0.064 2.081 0.372 - 95.55 10.187 10.193 10.194 0.354 -0.125 -1.926 0.354 -0.125 0.240 -0.683 -0.044 1.925 0.363 - 95.60 10.053 10.056 10.056 0.250 -0.020 -2.060 0.250 -0.020 0.041 -0.514 -0.005 2.153 0.258 - 95.65 10.123 10.134 10.134 0.480 0.008 -1.990 0.480 0.008 -0.015 -0.955 0.004 2.095 0.477 - 95.70 10.284 10.284 10.288 0.045 0.272 -1.829 0.045 0.272 -0.498 -0.083 0.012 1.711 0.253 - 95.75 10.490 10.495 10.498 -0.319 0.251 -1.622 -0.319 0.251 -0.406 0.518 -0.080 1.398 0.332 - 95.80 10.805 10.814 10.817 -0.420 0.272 -1.307 -0.420 0.272 -0.355 0.549 -0.114 0.980 0.332 - 95.85 11.108 11.110 11.113 0.198 0.252 -1.005 0.198 0.252 -0.253 -0.199 0.050 0.556 0.163 - 95.90 11.218 11.240 11.240 0.708 -0.036 -0.895 0.708 -0.036 0.032 -0.634 -0.025 0.652 0.318 - 95.95 11.177 11.193 11.197 0.594 0.303 -0.936 0.594 0.303 -0.283 -0.556 0.180 0.660 0.325 - 96.00 11.178 11.190 11.197 0.527 0.407 -0.935 0.527 0.407 -0.380 -0.492 0.214 0.659 0.329 - 96.05 11.354 11.366 11.369 0.526 0.272 -0.759 0.526 0.272 -0.206 -0.399 0.143 0.463 0.236 - 96.10 11.319 11.325 11.331 0.341 0.373 -0.793 0.341 0.373 -0.296 -0.271 0.127 0.442 0.210 - 96.15 11.443 11.443 11.452 0.032 0.444 -0.670 0.032 0.444 -0.297 -0.021 0.014 0.323 0.149 - 96.20 11.529 11.529 11.544 -0.050 0.585 -0.584 -0.050 0.585 -0.341 0.029 -0.029 0.343 0.172 - 96.25 11.352 11.352 11.359 -0.006 0.396 -0.761 -0.006 0.396 -0.301 0.004 -0.002 0.368 0.151 - 96.30 11.334 11.337 11.346 0.247 0.446 -0.779 0.247 0.446 -0.347 -0.192 0.110 0.433 0.206 - 96.35 11.528 11.532 11.553 0.308 0.697 -0.585 0.308 0.697 -0.407 -0.180 0.215 0.461 0.247 - 96.40 11.266 11.272 11.289 0.374 0.624 -0.847 0.374 0.624 -0.528 -0.317 0.233 0.623 0.329 - 96.45 11.092 11.133 11.171 0.963 0.920 -1.021 0.963 0.920 -0.939 -0.984 0.886 1.408 0.811 - 96.50 10.983 11.028 11.043 0.992 0.588 -1.130 0.992 0.588 -0.665 -1.121 0.583 1.303 0.714 - 96.55 10.775 10.826 10.845 1.045 0.650 -1.338 1.045 0.650 -0.870 -1.398 0.679 1.652 0.891 - 96.60 10.732 10.781 10.802 1.028 0.673 -1.381 1.028 0.673 -0.929 -1.420 0.692 1.709 0.916 - 96.65 10.833 10.853 10.857 0.653 0.282 -1.280 0.653 0.282 -0.361 -0.836 0.184 1.072 0.464 - 96.70 11.042 11.048 11.051 0.339 0.285 -1.070 0.339 0.285 -0.305 -0.363 0.097 0.671 0.242 - 96.75 10.719 10.726 10.729 0.406 0.245 -1.394 0.406 0.245 -0.341 -0.566 0.099 1.084 0.334 - 96.80 11.067 11.074 11.079 0.401 0.308 -1.046 0.401 0.308 -0.323 -0.419 0.124 0.675 0.272 - 96.85 11.259 11.274 11.274 0.580 0.053 -0.854 0.580 0.053 -0.045 -0.495 0.031 0.534 0.249 - 96.90 11.187 11.211 11.230 0.732 0.644 -0.926 0.732 0.644 -0.596 -0.678 0.471 0.904 0.509 - 96.95 11.365 11.385 11.400 0.684 0.578 -0.748 0.684 0.578 -0.433 -0.512 0.396 0.681 0.389 - 97.00 11.405 11.417 11.425 0.529 0.418 -0.708 0.529 0.418 -0.296 -0.375 0.221 0.478 0.263 - 97.05 11.252 11.263 11.281 0.491 0.643 -0.861 0.491 0.643 -0.553 -0.423 0.316 0.698 0.382 - 97.10 11.469 11.470 11.478 0.158 0.428 -0.644 0.158 0.428 -0.275 -0.102 0.068 0.311 0.151 - 97.15 11.291 11.291 11.307 0.122 0.596 -0.822 0.122 0.596 -0.490 -0.101 0.073 0.523 0.253 - 97.20 11.438 11.441 11.448 0.229 0.405 -0.674 0.229 0.405 -0.273 -0.154 0.093 0.336 0.164 - 97.25 11.405 11.406 11.406 0.157 0.082 -0.708 0.157 0.082 -0.058 -0.111 0.013 0.266 0.063 - 97.30 11.609 11.612 11.612 -0.277 0.057 -0.504 -0.277 0.057 -0.029 0.140 -0.016 0.167 0.072 - 97.35 11.556 11.557 11.557 0.120 0.054 -0.557 0.120 0.054 -0.030 -0.067 0.006 0.164 0.037 - 97.40 11.439 11.446 11.446 0.408 0.022 -0.674 0.408 0.022 -0.015 -0.275 0.009 0.311 0.138 - 97.45 11.512 11.521 11.525 0.462 -0.298 -0.601 0.462 -0.298 0.179 -0.277 -0.138 0.332 0.179 - 97.50 11.637 11.643 11.646 0.362 -0.267 -0.476 0.362 -0.267 0.127 -0.172 -0.096 0.214 0.117 - 97.55 11.405 11.410 11.411 0.326 -0.179 -0.708 0.326 -0.179 0.127 -0.231 -0.059 0.320 0.135 - 97.60 11.517 11.520 11.523 0.250 -0.241 -0.596 0.250 -0.241 0.144 -0.149 -0.060 0.238 0.108 - 97.65 11.349 11.349 11.357 0.135 -0.422 -0.764 0.135 -0.422 0.323 -0.103 -0.057 0.390 0.172 - 97.70 11.390 11.390 11.398 0.074 -0.440 -0.723 0.074 -0.440 0.319 -0.054 -0.033 0.361 0.162 - 97.75 11.483 11.483 11.500 0.010 -0.613 -0.630 0.010 -0.613 0.386 -0.006 -0.006 0.386 0.193 - 97.80 11.506 11.508 11.543 -0.189 -0.897 -0.606 -0.189 -0.897 0.544 0.114 0.169 0.604 0.290 - 97.85 11.503 11.503 11.523 0.028 -0.683 -0.610 0.028 -0.683 0.417 -0.017 -0.019 0.420 0.209 - 97.90 11.406 11.407 11.422 0.091 -0.588 -0.706 0.091 -0.588 0.415 -0.065 -0.054 0.427 0.212 - 97.95 11.169 11.173 11.192 0.306 -0.656 -0.944 0.306 -0.656 0.619 -0.289 -0.201 0.708 0.356 - 98.00 11.376 11.377 11.414 0.176 -0.915 -0.737 0.176 -0.915 0.674 -0.130 -0.161 0.705 0.352 - 98.05 11.104 11.107 11.119 0.258 -0.527 -1.009 0.258 -0.527 0.532 -0.260 -0.136 0.681 0.304 - 98.10 11.174 11.174 11.194 -0.021 -0.665 -0.939 -0.021 -0.665 0.625 0.020 0.014 0.662 0.313 - 98.15 11.224 11.224 11.240 0.017 -0.592 -0.889 0.017 -0.592 0.526 -0.015 -0.010 0.570 0.263 - 98.20 10.984 10.984 10.996 -0.005 -0.506 -1.129 -0.005 -0.506 0.572 0.005 0.002 0.765 0.286 - 98.25 11.196 11.197 11.200 0.048 -0.259 -0.916 0.048 -0.259 0.237 -0.044 -0.012 0.455 0.121 - 98.30 11.141 11.143 11.147 0.241 -0.280 -0.972 0.241 -0.280 0.272 -0.234 -0.067 0.541 0.183 - 98.35 11.134 11.134 11.150 -0.019 -0.607 -0.979 -0.019 -0.607 0.595 0.019 0.012 0.664 0.298 - 98.40 10.856 10.857 10.908 0.108 -1.058 -1.257 0.108 -1.058 1.329 -0.135 -0.114 1.355 0.671 - 98.45 10.753 10.755 10.776 0.166 -0.685 -1.359 0.166 -0.685 0.931 -0.225 -0.113 1.172 0.482 - 98.50 10.928 10.948 10.957 0.662 -0.440 -1.185 0.662 -0.440 0.521 -0.785 -0.291 1.018 0.493 - 98.55 11.234 11.246 11.256 0.514 -0.484 -0.879 0.514 -0.484 0.426 -0.452 -0.249 0.636 0.334 - 98.60 11.195 11.197 11.216 0.171 -0.656 -0.917 0.171 -0.656 0.602 -0.157 -0.112 0.651 0.316 - 98.65 10.908 10.914 10.921 0.363 -0.402 -1.205 0.363 -0.402 0.485 -0.437 -0.146 0.873 0.334 - 98.70 11.081 11.087 11.094 0.378 -0.384 -1.032 0.378 -0.384 0.396 -0.390 -0.145 0.678 0.287 - 98.75 11.066 11.066 11.080 -0.060 -0.542 -1.047 -0.060 -0.542 0.567 0.063 0.033 0.696 0.286 - 98.80 11.245 11.245 11.253 0.014 -0.437 -0.868 0.014 -0.437 0.379 -0.013 -0.006 0.472 0.190 - 98.85 11.121 11.122 11.128 0.162 -0.351 -0.992 0.162 -0.351 0.348 -0.160 -0.057 0.567 0.194 - 98.90 11.363 11.371 11.373 0.409 -0.243 -0.749 0.409 -0.243 0.182 -0.306 -0.099 0.394 0.185 - 98.95 11.186 11.209 11.212 0.725 -0.230 -0.927 0.725 -0.230 0.213 -0.672 -0.166 0.718 0.362 - 99.00 11.072 11.093 11.099 0.676 -0.371 -1.040 0.676 -0.371 0.386 -0.703 -0.251 0.839 0.420 - 99.05 10.655 10.672 10.681 0.607 -0.420 -1.458 0.607 -0.420 0.613 -0.885 -0.255 1.335 0.553 - 99.10 10.704 10.729 10.749 0.732 -0.664 -1.409 0.732 -0.664 0.935 -1.031 -0.486 1.481 0.737 - 99.15 10.925 10.977 10.987 1.067 -0.471 -1.188 1.067 -0.471 0.559 -1.267 -0.503 1.386 0.737 - 99.20 10.602 10.669 10.676 1.189 -0.397 -1.510 1.189 -0.397 0.600 -1.796 -0.472 1.926 0.976 - 99.25 10.329 10.391 10.395 1.134 -0.313 -1.784 1.134 -0.313 0.558 -2.024 -0.355 2.284 1.065 - 99.30 10.399 10.468 10.469 1.199 -0.179 -1.714 1.199 -0.179 0.307 -2.054 -0.215 2.203 1.044 - 99.35 10.551 10.599 10.599 1.012 -0.038 -1.562 1.012 -0.038 0.060 -1.581 -0.039 1.733 0.791 - 99.40 10.767 10.821 10.821 1.077 0.039 -1.345 1.077 0.039 -0.052 -1.449 0.041 1.485 0.725 - 99.45 11.187 11.228 11.228 0.951 -0.073 -0.925 0.951 -0.073 0.067 -0.880 -0.069 0.883 0.443 - 99.50 10.772 10.823 10.827 1.050 -0.294 -1.341 1.050 -0.294 0.395 -1.408 -0.309 1.494 0.747 - 99.55 10.470 10.544 10.544 1.249 -0.011 -1.643 1.249 -0.011 0.018 -2.052 -0.014 2.129 1.026 - 99.60 10.307 10.381 10.381 1.242 0.033 -1.806 1.242 0.033 -0.060 -2.243 0.041 2.403 1.122 - 99.65 10.396 10.448 10.450 1.045 -0.201 -1.717 1.045 -0.201 0.345 -1.793 -0.210 2.039 0.919 - 99.70 10.216 10.270 10.274 1.049 -0.281 -1.897 1.049 -0.281 0.533 -1.991 -0.295 2.389 1.041 - 99.75 10.440 10.518 10.535 1.280 -0.602 -1.673 1.280 -0.602 1.007 -2.142 -0.770 2.400 1.244 - 99.80 10.377 10.474 10.480 1.424 -0.374 -1.736 1.424 -0.374 0.649 -2.472 -0.532 2.591 1.305 - 99.85 10.386 10.479 10.481 1.394 -0.206 -1.727 1.394 -0.206 0.355 -2.408 -0.287 2.484 1.225 - 99.90 10.029 10.095 10.097 1.155 -0.178 -2.084 1.155 -0.178 0.371 -2.408 -0.206 2.855 1.222 - 99.95 9.984 10.061 10.066 1.237 -0.331 -2.129 1.237 -0.331 0.706 -2.633 -0.410 3.085 1.378 - 100.00 10.062 10.144 10.150 1.291 -0.334 -2.051 1.291 -0.334 0.685 -2.648 -0.431 2.993 1.384 - 100.05 9.998 10.065 10.065 1.163 0.060 -2.115 1.163 0.060 -0.126 -2.459 0.069 2.914 1.232 - 100.10 9.704 9.755 9.755 0.998 -0.032 -2.409 0.998 -0.032 0.077 -2.404 -0.032 3.401 1.203 - 100.15 10.024 10.082 10.083 1.083 0.166 -2.089 1.083 0.166 -0.346 -2.262 0.179 2.782 1.147 - 100.20 10.418 10.477 10.485 1.109 -0.409 -1.695 1.109 -0.409 0.693 -1.880 -0.453 2.135 1.027 - 100.25 10.521 10.592 10.620 1.221 -0.780 -1.592 1.221 -0.780 1.242 -1.944 -0.953 2.317 1.248 - 100.30 10.508 10.644 10.679 1.698 -0.866 -1.605 1.698 -0.866 1.389 -2.725 -1.469 3.103 1.696 - 100.35 10.559 10.709 10.731 1.783 -0.689 -1.554 1.783 -0.689 1.070 -2.770 -1.228 3.033 1.607 - 100.40 10.520 10.690 10.706 1.901 -0.582 -1.593 1.901 -0.582 0.928 -3.028 -1.107 3.245 1.677 - 100.45 10.561 10.667 10.680 1.500 -0.515 -1.552 1.500 -0.515 0.798 -2.327 -0.772 2.461 1.289 - 100.50 10.742 10.830 10.837 1.377 -0.382 -1.371 1.377 -0.382 0.524 -1.887 -0.526 1.961 1.014 - 100.55 10.540 10.652 10.665 1.542 -0.518 -1.573 1.542 -0.518 0.814 -2.425 -0.798 2.559 1.340 - 100.60 10.586 10.705 10.719 1.592 -0.535 -1.527 1.592 -0.535 0.817 -2.431 -0.852 2.576 1.351 - 100.65 11.033 11.182 11.188 1.821 -0.356 -1.080 1.821 -0.356 0.384 -1.967 -0.648 2.305 1.053 - 100.70 11.170 11.367 11.384 2.107 -0.625 -0.943 2.107 -0.625 0.590 -1.986 -1.318 2.860 1.228 - 100.75 10.428 10.626 10.634 2.043 -0.392 -1.685 2.043 -0.392 0.661 -3.442 -0.801 3.583 1.798 - 100.80 10.516 10.675 10.688 1.837 -0.541 -1.597 1.837 -0.541 0.864 -2.934 -0.993 3.109 1.608 - 100.85 10.200 10.370 10.372 1.873 -0.199 -1.913 1.873 -0.199 0.380 -3.582 -0.372 3.603 1.811 - 100.90 10.410 10.635 10.642 2.176 -0.399 -1.703 2.176 -0.399 0.679 -3.705 -0.867 3.896 1.933 - 100.95 10.360 10.561 10.561 2.054 -0.010 -1.753 2.054 -0.010 0.017 -3.600 -0.020 3.645 1.800 - 101.00 10.215 10.482 10.482 2.348 -0.096 -1.897 2.348 -0.096 0.182 -4.455 -0.225 4.561 2.232 - 101.05 10.402 10.549 10.551 1.755 0.216 -1.711 1.755 0.216 -0.369 -3.002 0.378 3.026 1.524 - 101.10 10.101 10.245 10.247 1.708 0.218 -2.012 1.708 0.218 -0.438 -3.436 0.372 3.505 1.742 - 101.15 10.152 10.346 10.346 1.994 -0.021 -1.961 1.994 -0.021 0.042 -3.909 -0.042 3.910 1.955 - 101.20 10.147 10.282 10.296 1.658 0.537 -1.966 1.658 0.537 -1.056 -3.260 0.891 3.451 1.770 - 101.25 10.132 10.305 10.318 1.878 0.523 -1.981 1.878 0.523 -1.035 -3.720 0.982 3.862 1.992 - 101.30 10.117 10.244 10.255 1.611 0.473 -1.996 1.611 0.473 -0.943 -3.215 0.761 3.401 1.718 - 101.35 10.179 10.305 10.307 1.606 0.197 -1.934 1.606 0.197 -0.381 -3.105 0.316 3.179 1.572 - 101.40 10.111 10.232 10.253 1.572 0.660 -2.002 1.572 0.660 -1.321 -3.148 1.037 3.458 1.784 - 101.45 10.471 10.580 10.612 1.519 0.818 -1.642 1.519 0.818 -1.343 -2.495 1.242 2.836 1.547 - 101.50 10.238 10.374 10.418 1.674 0.951 -1.874 1.674 0.951 -1.782 -3.137 1.591 3.609 1.972 - 101.55 10.278 10.384 10.424 1.482 0.908 -1.835 1.482 0.908 -1.666 -2.720 1.346 3.195 1.731 - 101.60 10.509 10.623 10.658 1.551 0.863 -1.604 1.551 0.863 -1.385 -2.487 1.339 2.861 1.573 - 101.65 10.618 10.747 10.812 1.661 1.177 -1.495 1.661 1.177 -1.760 -2.483 1.956 3.190 1.809 - 101.70 10.743 10.856 10.935 1.561 1.315 -1.370 1.561 1.315 -1.801 -2.138 2.053 3.021 1.734 - 101.75 10.770 10.873 10.949 1.491 1.293 -1.343 1.491 1.293 -1.737 -2.002 1.928 2.849 1.639 - 101.80 10.844 10.959 11.010 1.579 1.057 -1.268 1.579 1.057 -1.341 -2.002 1.668 2.609 1.466 - 101.85 10.815 10.912 10.969 1.454 1.115 -1.298 1.454 1.115 -1.448 -1.887 1.621 2.521 1.439 - 101.90 10.864 10.916 10.977 1.062 1.155 -1.248 1.062 1.155 -1.442 -1.326 1.226 2.010 1.155 - 101.95 11.036 11.097 11.160 1.168 1.180 -1.077 1.168 1.180 -1.271 -1.259 1.379 1.959 1.129 - 102.00 11.254 11.307 11.331 1.088 0.736 -0.858 1.088 0.736 -0.631 -0.934 0.800 1.231 0.691 - 102.05 11.265 11.331 11.340 1.225 0.458 -0.848 1.225 0.458 -0.389 -1.039 0.561 1.215 0.622 - 102.10 11.301 11.379 11.387 1.329 0.430 -0.812 1.329 0.430 -0.349 -1.079 0.571 1.305 0.635 - 102.15 11.162 11.213 11.232 1.073 0.650 -0.951 1.073 0.650 -0.619 -1.020 0.697 1.239 0.691 - 102.20 11.468 11.560 11.572 1.454 0.530 -0.645 1.454 0.530 -0.341 -0.937 0.770 1.405 0.630 - 102.25 11.796 11.851 11.862 1.146 0.508 -0.317 1.146 0.508 -0.161 -0.364 0.582 0.836 0.352 - 102.30 11.940 12.001 12.013 1.204 0.540 -0.173 1.204 0.540 -0.093 -0.208 0.650 0.886 0.344 - 102.35 11.475 11.538 11.543 1.202 0.338 -0.638 1.202 0.338 -0.215 -0.767 0.406 0.983 0.447 - 102.40 11.464 11.576 11.578 1.607 0.238 -0.649 1.607 0.238 -0.154 -1.043 0.382 1.530 0.561 - 102.45 11.432 11.493 11.494 1.181 0.144 -0.680 1.181 0.144 -0.098 -0.804 0.170 0.940 0.414 - 102.50 11.586 11.652 11.652 1.238 0.038 -0.527 1.238 0.038 -0.020 -0.652 0.048 0.905 0.327 - 102.55 11.547 11.633 11.639 1.405 0.392 -0.565 1.405 0.392 -0.222 -0.795 0.551 1.224 0.496 - 102.60 11.171 11.251 11.268 1.340 0.625 -0.942 1.340 0.625 -0.589 -1.262 0.837 1.536 0.812 - 102.65 11.391 11.494 11.515 1.533 0.686 -0.721 1.533 0.686 -0.495 -1.106 1.051 1.670 0.802 - 102.70 11.597 11.698 11.716 1.529 0.662 -0.516 1.529 0.662 -0.341 -0.788 1.013 1.521 0.664 - 102.75 11.680 11.787 11.811 1.587 0.752 -0.433 1.587 0.752 -0.326 -0.688 1.193 1.636 0.707 - 102.80 11.813 11.903 11.926 1.462 0.744 -0.300 1.462 0.744 -0.223 -0.439 1.088 1.391 0.597 - 102.85 11.747 11.839 11.841 1.474 0.240 -0.366 1.474 0.240 -0.088 -0.540 0.354 1.182 0.326 - 102.90 12.046 12.114 12.121 1.277 0.428 -0.066 1.277 0.428 -0.028 -0.085 0.547 0.909 0.277 - 102.95 12.170 12.251 12.258 1.401 0.423 0.057 1.401 0.423 0.024 0.080 0.593 1.073 0.299 - 103.00 12.289 12.352 12.352 1.246 0.054 0.176 1.246 0.054 0.010 0.219 0.068 0.793 0.115 - 103.05 12.431 12.478 12.479 1.083 -0.177 0.318 1.083 -0.177 -0.056 0.344 -0.192 0.653 0.199 - 103.10 12.196 12.260 12.266 1.250 0.394 0.083 1.250 0.394 0.033 0.104 0.493 0.863 0.252 - 103.15 12.261 12.315 12.321 1.155 0.373 0.148 1.155 0.373 0.055 0.171 0.431 0.747 0.234 - 103.20 12.265 12.346 12.357 1.409 0.521 0.152 1.409 0.521 0.079 0.215 0.735 1.140 0.385 - 103.25 12.418 12.545 12.551 1.784 0.375 0.305 1.784 0.375 0.114 0.544 0.669 1.708 0.435 - 103.30 12.730 12.857 12.863 1.806 0.364 0.617 1.806 0.364 0.225 1.115 0.657 1.887 0.657 - 103.35 12.856 13.028 13.028 2.112 0.083 0.743 2.112 0.083 0.061 1.569 0.175 2.510 0.790 - 103.40 12.604 12.808 12.810 2.281 0.177 0.491 2.281 0.177 0.087 1.120 0.403 2.738 0.597 - 103.45 12.575 12.801 12.801 2.393 -0.013 0.462 2.393 -0.013 -0.006 1.107 -0.030 2.971 0.554 - 103.50 12.050 12.228 12.229 2.083 -0.108 -0.063 2.083 -0.108 0.007 -0.132 -0.226 2.177 0.131 - 103.55 12.010 12.142 12.143 1.789 0.079 -0.103 1.789 0.079 -0.008 -0.184 0.142 1.609 0.116 - 103.60 12.070 12.198 12.202 1.761 0.292 -0.042 1.761 0.292 -0.012 -0.075 0.514 1.594 0.260 - 103.65 11.771 11.931 11.932 1.945 0.186 -0.342 1.945 0.186 -0.063 -0.664 0.361 1.966 0.379 - 103.70 11.704 11.819 11.819 1.639 0.034 -0.408 1.639 0.034 -0.014 -0.669 0.055 1.427 0.336 - 103.75 11.692 11.809 11.809 1.653 -0.010 -0.420 1.653 -0.010 0.004 -0.695 -0.016 1.455 0.348 - 103.80 11.325 11.420 11.423 1.470 0.234 -0.788 1.470 0.234 -0.185 -1.158 0.345 1.418 0.611 - 103.85 11.460 11.558 11.558 1.495 -0.077 -0.652 1.495 -0.077 0.050 -0.975 -0.116 1.333 0.492 - 103.90 11.609 11.701 11.701 1.469 -0.032 -0.504 1.469 -0.032 0.016 -0.740 -0.048 1.207 0.371 - 103.95 11.237 11.297 11.300 1.168 0.233 -0.876 1.168 0.233 -0.204 -1.023 0.273 1.093 0.539 - 104.00 11.075 11.132 11.137 1.124 0.331 -1.038 1.124 0.331 -0.344 -1.166 0.372 1.225 0.636 - 104.05 11.138 11.200 11.200 1.175 -0.061 -0.975 1.175 -0.061 0.060 -1.146 -0.072 1.168 0.575 - 104.10 10.936 10.998 11.007 1.166 0.455 -1.177 1.166 0.455 -0.535 -1.373 0.530 1.476 0.783 - 104.15 11.111 11.158 11.158 1.025 0.077 -1.002 1.025 0.077 -0.077 -1.027 0.079 1.030 0.516 - 104.20 11.202 11.250 11.251 1.035 -0.157 -0.911 1.035 -0.157 0.143 -0.942 -0.163 0.962 0.483 - 104.25 11.204 11.258 11.259 1.097 0.122 -0.908 1.097 0.122 -0.111 -0.997 0.134 1.022 0.506 - 104.30 11.056 11.118 11.119 1.171 0.158 -1.057 1.171 0.158 -0.167 -1.238 0.185 1.257 0.631 - 104.35 10.808 10.850 10.852 0.954 0.230 -1.305 0.954 0.230 -0.301 -1.245 0.220 1.334 0.650 - 104.40 10.855 10.902 10.902 1.012 0.136 -1.258 1.012 0.136 -0.171 -1.273 0.138 1.313 0.646 - 104.45 10.784 10.796 10.797 0.498 0.137 -1.328 0.498 0.137 -0.182 -0.661 0.068 1.016 0.345 - 104.50 10.746 10.766 10.780 0.656 0.538 -1.367 0.656 0.538 -0.736 -0.897 0.353 1.294 0.606 - 104.55 11.066 11.081 11.092 0.564 0.496 -1.046 0.564 0.496 -0.519 -0.590 0.280 0.829 0.417 - 104.60 11.066 11.111 11.131 1.004 0.654 -1.047 1.004 0.654 -0.685 -1.051 0.657 1.266 0.708 - 104.65 10.872 10.923 10.978 1.048 1.097 -1.240 1.048 1.097 -1.361 -1.300 1.150 1.921 1.103 - 104.70 11.048 11.073 11.096 0.744 0.709 -1.065 0.744 0.709 -0.755 -0.792 0.527 1.095 0.607 - 104.75 10.886 10.915 10.954 0.789 0.921 -1.226 0.789 0.921 -1.130 -0.968 0.727 1.488 0.828 - 104.80 10.826 10.872 10.918 0.991 1.008 -1.287 0.991 1.008 -1.297 -1.275 0.999 1.827 1.038 - 104.85 10.838 10.876 10.919 0.907 0.966 -1.275 0.907 0.966 -1.232 -1.156 0.876 1.691 0.951 - 104.90 10.612 10.686 10.724 1.257 0.903 -1.501 1.257 0.903 -1.354 -1.887 1.135 2.324 1.292 - 104.95 11.018 11.082 11.111 1.198 0.803 -1.095 1.198 0.803 -0.879 -1.312 0.962 1.640 0.925 - 105.00 11.200 11.259 11.282 1.147 0.722 -0.913 1.147 0.722 -0.659 -1.047 0.829 1.335 0.745 - 105.05 10.912 11.001 11.026 1.396 0.739 -1.201 1.396 0.739 -0.888 -1.676 1.032 1.968 1.080 - 105.10 10.584 10.639 10.671 1.087 0.826 -1.529 1.087 0.826 -1.263 -1.662 0.898 2.101 1.136 - 105.15 10.469 10.505 10.537 0.862 0.825 -1.643 0.862 0.825 -1.355 -1.416 0.711 2.062 1.043 - 105.20 10.930 10.980 11.026 1.053 0.999 -1.183 1.053 0.999 -1.182 -1.246 1.053 1.754 1.007 - 105.25 11.203 11.272 11.302 1.247 0.816 -0.910 1.247 0.816 -0.743 -1.134 1.018 1.524 0.848 - 105.30 11.121 11.194 11.211 1.277 0.616 -0.992 1.277 0.616 -0.611 -1.266 0.787 1.497 0.806 - 105.35 10.937 11.024 11.036 1.380 0.517 -1.176 1.380 0.517 -0.608 -1.623 0.713 1.777 0.937 - 105.40 10.929 11.009 11.037 1.323 0.786 -1.184 1.323 0.786 -0.930 -1.566 1.040 1.884 1.049 - 105.45 11.019 11.130 11.161 1.571 0.838 -1.094 1.571 0.838 -0.917 -1.719 1.317 2.184 1.176 - 105.50 10.922 11.020 11.032 1.465 0.509 -1.191 1.465 0.509 -0.606 -1.744 0.746 1.911 0.996 - 105.55 10.917 10.984 10.999 1.210 0.573 -1.196 1.210 0.573 -0.686 -1.448 0.694 1.612 0.873 - 105.60 10.842 10.889 10.935 1.004 1.008 -1.270 1.004 1.008 -1.280 -1.276 1.012 1.819 1.036 - 105.65 10.922 10.968 11.017 1.003 1.033 -1.191 1.003 1.033 -1.229 -1.194 1.036 1.745 1.001 - 105.70 10.906 10.962 11.019 1.106 1.121 -1.207 1.106 1.121 -1.352 -1.335 1.240 1.968 1.135 - 105.75 10.652 10.733 10.800 1.319 1.200 -1.461 1.319 1.200 -1.754 -1.927 1.583 2.657 1.524 - 105.80 10.826 10.964 11.042 1.737 1.312 -1.287 1.737 1.312 -1.689 -2.236 2.279 3.198 1.806 - 105.85 11.138 11.274 11.353 1.745 1.337 -0.975 1.745 1.337 -1.303 -1.701 2.333 2.892 1.584 - 105.90 11.011 11.164 11.246 1.845 1.352 -1.102 1.845 1.352 -1.490 -2.034 2.496 3.224 1.774 - 105.95 11.001 11.129 11.259 1.685 1.704 -1.112 1.685 1.704 -1.895 -1.874 2.872 3.491 1.959 - 106.00 10.807 11.046 11.148 2.286 1.502 -1.306 2.286 1.502 -1.962 -2.986 3.434 4.594 2.478 - 106.05 10.669 11.020 11.158 2.758 1.750 -1.443 2.758 1.750 -2.525 -3.981 4.825 6.376 3.373 - 106.10 10.738 10.965 11.018 2.215 1.087 -1.374 2.215 1.087 -1.494 -3.045 2.407 3.989 2.080 - 106.15 10.745 10.938 10.981 2.050 0.964 -1.368 2.050 0.964 -1.318 -2.804 1.975 3.501 1.837 - 106.20 10.523 10.688 10.790 1.870 1.478 -1.590 1.870 1.478 -2.350 -2.972 2.764 4.104 2.345 - 106.25 10.627 10.772 10.896 1.758 1.644 -1.486 1.758 1.644 -2.442 -2.612 2.890 4.000 2.299 - 106.30 10.732 10.802 10.916 1.222 1.574 -1.380 1.222 1.574 -2.173 -1.687 1.924 2.939 1.679 - 106.35 11.089 11.105 11.201 0.595 1.466 -1.024 0.595 1.466 -1.501 -0.609 0.872 1.775 0.920 - 106.40 10.978 11.004 11.111 0.750 1.542 -1.135 0.750 1.542 -1.750 -0.850 1.156 2.113 1.131 - 106.45 10.864 10.890 11.002 0.755 1.560 -1.249 0.755 1.560 -1.948 -0.942 1.177 2.281 1.231 - 106.50 11.000 11.030 11.092 0.809 1.179 -1.113 0.809 1.179 -1.312 -0.901 0.954 1.642 0.928 - 106.55 10.971 10.974 11.047 0.271 1.264 -1.142 0.271 1.264 -1.444 -0.310 0.343 1.488 0.758 - 106.60 10.970 10.970 11.062 0.130 1.418 -1.143 0.130 1.418 -1.621 -0.148 0.184 1.667 0.819 - 106.65 10.788 10.790 10.914 0.198 1.640 -1.324 0.198 1.640 -2.172 -0.262 0.325 2.241 1.106 - 106.70 10.660 10.663 10.845 0.254 1.978 -1.452 0.254 1.978 -2.872 -0.370 0.503 3.043 1.470 - 106.75 10.911 10.911 11.144 -0.022 2.267 -1.202 -0.022 2.267 -2.725 0.027 -0.051 3.293 1.363 - 106.80 11.139 11.139 11.321 -0.017 2.022 -0.974 -0.017 2.022 -1.969 0.016 -0.034 2.518 0.985 - 106.85 11.312 11.314 11.520 -0.198 2.167 -0.800 -0.198 2.167 -1.735 0.159 -0.430 2.689 0.897 - 106.90 11.356 11.357 11.602 -0.182 2.369 -0.757 -0.182 2.369 -1.793 0.138 -0.432 3.109 0.925 - 106.95 11.486 11.489 11.713 -0.252 2.281 -0.627 -0.252 2.281 -1.430 0.158 -0.575 2.831 0.775 - 107.00 11.711 11.723 11.934 -0.521 2.237 -0.401 -0.521 2.237 -0.898 0.209 -1.165 2.718 0.743 - 107.05 11.592 11.601 11.769 -0.438 1.982 -0.520 -0.438 1.982 -1.032 0.228 -0.869 2.195 0.684 - 107.10 11.563 11.567 11.671 -0.288 1.559 -0.550 -0.288 1.559 -0.857 0.158 -0.449 1.408 0.490 - 107.15 11.436 11.441 11.514 -0.335 1.298 -0.677 -0.335 1.298 -0.878 0.226 -0.434 1.127 0.503 - 107.20 11.429 11.430 11.485 -0.193 1.125 -0.684 -0.193 1.125 -0.770 0.132 -0.218 0.886 0.405 - 107.25 11.640 11.640 11.706 0.097 1.239 -0.473 0.097 1.239 -0.587 -0.046 0.121 0.885 0.300 - 107.30 11.990 11.998 12.089 0.429 1.485 -0.123 0.429 1.485 -0.182 -0.053 0.637 1.202 0.332 - 107.35 11.801 11.810 11.971 0.482 1.953 -0.312 0.482 1.953 -0.610 -0.151 0.942 2.073 0.566 - 107.40 11.835 11.853 12.073 0.653 2.293 -0.277 0.653 2.293 -0.636 -0.181 1.497 2.881 0.818 - 107.45 11.663 11.671 11.925 0.430 2.452 -0.450 0.430 2.452 -1.104 -0.193 1.054 3.201 0.769 - 107.50 11.817 11.818 12.105 0.171 2.621 -0.296 0.171 2.621 -0.775 -0.051 0.449 3.493 0.449 - 107.55 11.879 11.890 12.110 0.505 2.299 -0.234 0.505 2.299 -0.538 -0.118 1.161 2.799 0.643 - 107.60 11.948 11.971 12.225 0.751 2.477 -0.165 0.751 2.477 -0.409 -0.124 1.861 3.363 0.955 - 107.65 12.098 12.110 12.328 0.536 2.306 -0.015 0.536 2.306 -0.034 -0.008 1.235 2.803 0.618 - 107.70 12.186 12.210 12.436 0.759 2.362 0.074 0.759 2.362 0.174 0.056 1.793 3.080 0.901 - 107.75 12.041 12.051 12.260 0.495 2.255 -0.072 0.495 2.255 -0.163 -0.036 1.117 2.667 0.565 - 107.80 11.780 11.781 11.948 0.075 1.994 -0.332 0.075 1.994 -0.663 -0.025 0.149 2.047 0.340 - 107.85 11.798 11.799 12.013 0.123 2.258 -0.315 0.123 2.258 -0.711 -0.039 0.279 2.606 0.382 - 107.90 11.401 11.402 11.709 0.151 2.662 -0.711 0.151 2.662 -1.894 -0.107 0.402 3.808 0.970 - 107.95 11.252 11.252 11.590 0.000 2.778 -0.861 0.000 2.778 -2.391 -0.000 0.001 4.229 1.195 - 108.00 11.381 11.381 11.676 -0.033 2.605 -0.731 -0.033 2.605 -1.906 0.024 -0.086 3.662 0.954 - 108.05 11.358 11.359 11.574 -0.167 2.218 -0.755 -0.167 2.218 -1.675 0.126 -0.370 2.759 0.860 - 108.10 11.394 11.394 11.565 -0.098 1.980 -0.719 -0.098 1.980 -1.424 0.071 -0.194 2.223 0.719 - 108.15 11.634 11.635 11.777 -0.079 1.825 -0.479 -0.079 1.825 -0.873 0.038 -0.145 1.783 0.443 - 108.20 11.655 11.655 11.795 0.108 1.812 -0.458 0.108 1.812 -0.830 -0.050 0.196 1.752 0.427 - 108.25 11.552 11.554 11.746 0.173 2.118 -0.560 0.173 2.118 -1.187 -0.097 0.366 2.415 0.623 - 108.30 11.564 11.565 11.789 0.094 2.286 -0.548 0.094 2.286 -1.254 -0.051 0.214 2.768 0.637 - 108.35 11.601 11.601 11.851 0.040 2.421 -0.512 0.040 2.421 -1.239 -0.020 0.096 3.063 0.621 - 108.40 11.588 11.591 11.825 0.265 2.340 -0.525 0.265 2.340 -1.227 -0.139 0.619 2.909 0.691 - 108.45 11.579 11.581 11.793 0.231 2.225 -0.534 0.231 2.225 -1.188 -0.123 0.514 2.645 0.650 - 108.50 11.390 11.396 11.618 0.368 2.261 -0.723 0.368 2.261 -1.635 -0.266 0.832 2.885 0.927 - 108.55 11.340 11.341 11.529 0.130 2.076 -0.773 0.130 2.076 -1.604 -0.100 0.269 2.461 0.815 - 108.60 11.220 11.220 11.387 0.044 1.944 -0.893 0.044 1.944 -1.737 -0.039 0.085 2.290 0.870 - 108.65 10.907 10.907 11.176 0.057 2.438 -1.206 0.057 2.438 -2.940 -0.069 0.139 3.701 1.472 - 108.70 10.959 10.959 11.210 0.047 2.357 -1.154 0.047 2.357 -2.720 -0.054 0.110 3.445 1.361 - 108.75 10.708 10.708 11.016 -0.096 2.585 -1.405 -0.096 2.585 -3.633 0.135 -0.248 4.334 1.822 - 108.80 10.755 10.765 10.988 -0.455 2.205 -1.358 -0.455 2.205 -2.994 0.618 -1.004 3.457 1.609 - 108.85 10.779 10.792 10.986 -0.524 2.056 -1.334 -0.524 2.056 -2.742 0.699 -1.077 3.140 1.514 - 108.90 11.219 11.244 11.460 -0.749 2.215 -0.894 -0.749 2.215 -1.980 0.669 -1.659 3.132 1.334 - 108.95 10.874 10.920 11.221 -1.000 2.580 -1.238 -1.000 2.580 -3.195 1.238 -2.580 4.595 2.145 - 109.00 10.740 10.791 11.099 -1.051 2.596 -1.373 -1.051 2.596 -3.566 1.444 -2.729 4.866 2.358 - 109.05 11.099 11.144 11.331 -1.006 2.047 -1.014 -1.006 2.047 -2.077 1.020 -2.059 3.116 1.549 - 109.10 11.146 11.186 11.267 -0.947 1.353 -0.967 -0.947 1.353 -1.309 0.916 -1.282 1.832 1.024 - 109.15 11.259 11.314 11.410 -1.116 1.475 -0.854 -1.116 1.475 -1.259 0.953 -1.646 2.075 1.141 - 109.20 11.323 11.368 11.492 -1.004 1.684 -0.790 -1.004 1.684 -1.330 0.793 -1.692 2.235 1.147 - 109.25 11.241 11.275 11.398 -0.884 1.666 -0.872 -0.884 1.666 -1.453 0.771 -1.473 2.159 1.104 - 109.30 10.945 10.964 11.103 -0.649 1.750 -1.168 -0.649 1.750 -2.044 0.758 -1.135 2.424 1.229 - 109.35 10.942 10.962 11.098 -0.667 1.730 -1.171 -0.667 1.730 -2.026 0.781 -1.154 2.405 1.229 - 109.40 11.025 11.073 11.231 -1.029 1.877 -1.087 -1.029 1.877 -2.041 1.119 -1.931 2.882 1.512 - 109.45 10.805 10.842 10.948 -0.892 1.520 -1.308 -0.892 1.520 -1.988 1.167 -1.356 2.408 1.337 - 109.50 10.824 10.858 10.952 -0.851 1.435 -1.289 -0.851 1.435 -1.850 1.097 -1.222 2.223 1.237 - 109.55 10.806 10.823 10.945 -0.597 1.628 -1.307 -0.597 1.628 -2.127 0.779 -0.971 2.357 1.232 - 109.60 10.981 10.982 11.153 -0.111 1.949 -1.131 -0.111 1.949 -2.205 0.125 -0.215 2.545 1.109 - 109.65 10.900 10.901 11.105 -0.145 2.121 -1.213 -0.145 2.121 -2.573 0.175 -0.307 2.995 1.298 - 109.70 10.903 10.903 11.133 -0.107 2.250 -1.210 -0.107 2.250 -2.724 0.129 -0.241 3.270 1.369 - 109.75 10.706 10.706 10.877 -0.113 1.921 -1.407 -0.113 1.921 -2.703 0.159 -0.217 2.841 1.358 - 109.80 10.656 10.657 10.797 0.150 1.731 -1.457 0.150 1.731 -2.521 -0.218 0.259 2.570 1.272 - 109.85 10.962 10.974 11.108 0.508 1.718 -1.150 0.508 1.718 -1.976 -0.585 0.873 2.267 1.119 - 109.90 11.393 11.409 11.508 0.607 1.507 -0.720 0.607 1.507 -1.085 -0.437 0.915 1.578 0.742 - 109.95 11.271 11.282 11.405 0.498 1.668 -0.841 0.498 1.668 -1.403 -0.419 0.830 1.868 0.841 - 110.00 11.284 11.286 11.424 0.226 1.773 -0.829 0.226 1.773 -1.470 -0.187 0.401 1.941 0.768 - 110.05 11.491 11.501 11.634 0.485 1.752 -0.622 0.485 1.752 -1.090 -0.302 0.849 1.845 0.707 - 110.10 11.413 11.417 11.544 0.309 1.710 -0.700 0.309 1.710 -1.197 -0.216 0.529 1.756 0.663 - 110.15 11.373 11.375 11.537 0.217 1.928 -0.740 0.217 1.928 -1.427 -0.161 0.419 2.156 0.748 - 110.20 11.367 11.372 11.488 0.335 1.629 -0.746 0.335 1.629 -1.216 -0.250 0.546 1.662 0.678 - 110.25 11.060 11.078 11.265 0.627 2.049 -1.053 0.627 2.049 -2.158 -0.660 1.285 2.850 1.298 - 110.30 10.885 10.906 11.132 0.671 2.235 -1.228 0.671 2.235 -2.744 -0.824 1.500 3.476 1.617 - 110.35 11.324 11.328 11.476 0.287 1.840 -0.789 0.287 1.840 -1.451 -0.226 0.528 2.045 0.780 - 110.40 11.388 11.402 11.547 0.571 1.822 -0.725 0.571 1.822 -1.321 -0.414 1.041 2.086 0.866 - 110.45 11.161 11.202 11.358 0.961 1.877 -0.952 0.961 1.877 -1.786 -0.915 1.804 2.676 1.349 - 110.50 11.170 11.209 11.353 0.937 1.804 -0.943 0.937 1.804 -1.700 -0.884 1.690 2.510 1.278 - 110.55 11.223 11.261 11.436 0.927 1.996 -0.890 0.927 1.996 -1.776 -0.825 1.850 2.817 1.347 - 110.60 11.404 11.446 11.598 0.973 1.873 -0.708 0.973 1.873 -1.327 -0.689 1.823 2.478 1.179 - 110.65 11.540 11.579 11.700 0.951 1.680 -0.573 0.951 1.680 -0.962 -0.545 1.598 2.028 0.972 - 110.70 11.934 11.945 12.058 0.522 1.644 -0.179 0.522 1.644 -0.294 -0.093 0.858 1.503 0.456 - 110.75 12.078 12.081 12.175 0.252 1.510 -0.035 0.252 1.510 -0.052 -0.009 0.380 1.173 0.192 - 110.80 12.085 12.102 12.183 0.636 1.401 -0.028 0.636 1.401 -0.039 -0.018 0.891 1.185 0.446 - 110.85 11.760 11.785 11.897 0.766 1.629 -0.353 0.766 1.629 -0.576 -0.271 1.248 1.683 0.700 - 110.90 12.156 12.170 12.320 0.574 1.917 0.044 0.574 1.917 0.083 0.025 1.100 2.003 0.552 - 110.95 11.951 11.965 12.054 0.578 1.466 -0.162 0.578 1.466 -0.238 -0.094 0.847 1.255 0.442 - 111.00 12.266 12.288 12.358 0.743 1.312 0.153 0.743 1.312 0.200 0.113 0.975 1.149 0.501 - 111.05 12.253 12.283 12.343 0.864 1.210 0.140 0.864 1.210 0.170 0.121 1.045 1.115 0.533 - 111.10 12.404 12.412 12.448 0.436 0.950 0.292 0.436 0.950 0.277 0.127 0.414 0.589 0.257 - 111.15 12.061 12.062 12.082 0.135 0.695 -0.051 0.135 0.695 -0.036 -0.007 0.094 0.252 0.050 - 111.20 12.042 12.044 12.056 0.196 0.532 -0.070 0.196 0.532 -0.037 -0.014 0.104 0.163 0.056 - 111.25 12.162 12.163 12.168 0.191 0.342 0.049 0.191 0.342 0.017 0.009 0.065 0.078 0.034 - 111.30 12.561 12.564 12.565 0.255 0.213 0.448 0.255 0.213 0.095 0.114 0.054 0.156 0.079 - 111.35 12.588 12.598 12.599 0.500 0.097 0.476 0.500 0.097 0.046 0.238 0.049 0.243 0.124 - 111.40 12.503 12.505 12.507 0.203 0.223 0.390 0.203 0.223 0.087 0.079 0.045 0.122 0.063 - 111.45 12.384 12.385 12.388 -0.127 0.277 0.271 -0.127 0.277 0.075 -0.034 -0.035 0.083 0.045 - 111.50 12.158 12.159 12.171 0.158 0.543 0.045 0.158 0.543 0.024 0.007 0.086 0.161 0.045 - 111.55 12.308 12.311 12.332 0.260 0.729 0.195 0.260 0.729 0.142 0.051 0.189 0.318 0.121 - 111.60 12.234 12.243 12.271 -0.478 0.826 0.121 -0.478 0.826 0.100 -0.058 -0.394 0.462 0.206 - 111.65 12.248 12.263 12.283 -0.603 0.699 0.135 -0.603 0.699 0.094 -0.081 -0.422 0.435 0.220 - 111.70 12.030 12.072 12.073 -1.005 0.127 -0.083 -1.005 0.127 -0.010 0.083 -0.127 0.516 0.076 - 111.75 11.723 11.778 11.785 -1.139 0.398 -0.390 -1.139 0.398 -0.155 0.444 -0.453 0.804 0.326 - 111.80 12.238 12.285 12.298 -1.076 0.568 0.125 -1.076 0.568 0.071 -0.135 -0.612 0.748 0.315 - 111.85 12.054 12.166 12.174 -1.645 0.456 -0.059 -1.645 0.456 -0.027 0.096 -0.751 1.458 0.379 - 111.90 11.973 12.075 12.090 -1.569 0.589 -0.140 -1.569 0.589 -0.082 0.219 -0.925 1.415 0.477 - 111.95 12.210 12.298 12.324 -1.464 0.806 0.097 -1.464 0.806 0.079 -0.143 -1.180 1.401 0.596 - 112.00 12.044 12.120 12.150 -1.355 0.842 -0.068 -1.355 0.842 -0.058 0.093 -1.141 1.275 0.573 - 112.05 12.013 12.062 12.085 -1.086 0.733 -0.100 -1.086 0.733 -0.073 0.108 -0.797 0.864 0.404 - 112.10 12.090 12.125 12.147 -0.923 0.734 -0.023 -0.923 0.734 -0.017 0.021 -0.677 0.695 0.339 - 112.15 12.035 12.092 12.117 -1.170 0.779 -0.078 -1.170 0.779 -0.061 0.091 -0.911 0.990 0.459 - 112.20 11.957 12.030 12.093 -1.322 1.234 -0.155 -1.322 1.234 -0.192 0.206 -1.632 1.648 0.828 - 112.25 11.734 11.791 11.873 -1.150 1.398 -0.378 -1.150 1.398 -0.529 0.435 -1.609 1.711 0.874 - 112.30 11.571 11.590 11.659 -0.666 1.265 -0.542 -0.666 1.265 -0.686 0.361 -0.843 1.169 0.572 - 112.35 11.681 11.724 11.806 -1.008 1.387 -0.432 -1.008 1.387 -0.599 0.435 -1.398 1.563 0.791 - 112.40 11.881 11.934 11.999 -1.126 1.246 -0.232 -1.126 1.246 -0.289 0.261 -1.403 1.437 0.728 - 112.45 11.871 11.965 12.008 -1.497 1.021 -0.242 -1.497 1.021 -0.247 0.362 -1.528 1.670 0.795 - 112.50 12.274 12.373 12.402 -1.556 0.847 0.162 -1.556 0.847 0.137 -0.251 -1.318 1.582 0.675 - 112.55 12.584 12.652 12.667 -1.313 0.614 0.471 -1.313 0.614 0.289 -0.618 -0.806 1.161 0.528 - 112.60 12.317 12.349 12.363 -0.900 0.584 0.204 -0.900 0.584 0.119 -0.183 -0.526 0.597 0.285 - 112.65 12.423 12.437 12.461 -0.592 0.783 0.310 -0.592 0.783 0.242 -0.183 -0.464 0.530 0.277 - 112.70 12.389 12.395 12.422 -0.389 0.819 0.276 -0.389 0.819 0.226 -0.107 -0.319 0.449 0.202 - 112.75 12.159 12.163 12.184 -0.338 0.714 0.046 -0.338 0.714 0.033 -0.016 -0.241 0.313 0.122 - 112.80 12.341 12.341 12.367 0.025 0.797 0.229 0.025 0.797 0.182 0.006 0.020 0.344 0.092 - 112.85 12.521 12.522 12.535 -0.137 0.559 0.409 -0.137 0.559 0.229 -0.056 -0.076 0.249 0.124 - 112.90 12.216 12.217 12.219 -0.123 0.199 0.104 -0.123 0.199 0.021 -0.013 -0.025 0.033 0.017 - 112.95 12.169 12.170 12.179 -0.167 0.458 0.056 -0.167 0.458 0.026 -0.009 -0.076 0.120 0.041 - 113.00 12.307 12.314 12.337 -0.391 0.763 0.195 -0.391 0.763 0.149 -0.076 -0.299 0.387 0.171 - 113.05 12.400 12.413 12.424 -0.584 0.516 0.287 -0.584 0.516 0.148 -0.167 -0.301 0.345 0.188 - 113.10 12.329 12.347 12.356 -0.659 0.488 0.216 -0.659 0.488 0.105 -0.142 -0.321 0.359 0.183 - 113.15 12.371 12.384 12.397 -0.568 0.554 0.259 -0.568 0.554 0.143 -0.147 -0.315 0.348 0.188 - 113.20 12.270 12.317 12.327 -1.073 0.520 0.157 -1.073 0.520 0.082 -0.168 -0.558 0.723 0.294 - 113.25 12.272 12.332 12.336 -1.214 0.289 0.160 -1.214 0.289 0.046 -0.194 -0.351 0.792 0.202 - 113.30 12.291 12.320 12.323 -0.850 0.272 0.178 -0.850 0.272 0.049 -0.152 -0.231 0.414 0.140 - 113.35 12.632 12.653 12.655 -0.723 0.229 0.519 -0.723 0.229 0.119 -0.375 -0.166 0.423 0.214 - 113.40 12.788 12.819 12.824 -0.883 0.381 0.675 -0.883 0.381 0.258 -0.596 -0.337 0.691 0.366 - 113.45 13.118 13.146 13.149 -0.844 0.307 1.006 -0.844 0.307 0.308 -0.849 -0.259 0.909 0.470 - 113.50 12.620 12.638 12.654 -0.684 0.630 0.507 -0.684 0.630 0.319 -0.347 -0.431 0.561 0.319 - 113.55 12.374 12.400 12.434 -0.812 0.915 0.261 -0.812 0.915 0.239 -0.212 -0.743 0.782 0.404 - 113.60 12.402 12.426 12.473 -0.774 1.082 0.289 -0.774 1.082 0.313 -0.224 -0.838 0.927 0.461 - 113.65 12.535 12.559 12.600 -0.783 1.007 0.422 -0.783 1.007 0.425 -0.331 -0.789 0.903 0.477 - 113.70 12.339 12.358 12.392 -0.676 0.927 0.226 -0.676 0.927 0.210 -0.153 -0.627 0.684 0.339 - 113.75 12.201 12.213 12.235 -0.547 0.725 0.088 -0.547 0.725 0.064 -0.048 -0.397 0.417 0.202 - 113.80 12.343 12.355 12.390 -0.551 0.936 0.230 -0.551 0.936 0.215 -0.127 -0.516 0.616 0.287 - 113.85 12.426 12.438 12.472 -0.550 0.923 0.313 -0.550 0.923 0.289 -0.172 -0.507 0.626 0.304 - 113.90 12.652 12.672 12.733 -0.718 1.240 0.539 -0.718 1.240 0.669 -0.387 -0.890 1.172 0.589 - 113.95 12.665 12.679 12.767 -0.593 1.499 0.552 -0.593 1.499 0.828 -0.328 -0.889 1.452 0.629 - 114.00 12.681 12.686 12.733 -0.379 1.094 0.568 -0.379 1.094 0.621 -0.215 -0.414 0.831 0.389 - 114.05 12.376 12.388 12.451 -0.548 1.247 0.263 -0.548 1.247 0.328 -0.144 -0.683 0.962 0.386 - 114.10 12.033 12.045 12.081 -0.537 0.926 -0.080 -0.537 0.926 -0.074 0.043 -0.498 0.577 0.252 - 114.15 12.193 12.213 12.226 -0.705 0.556 0.080 -0.705 0.556 0.045 -0.057 -0.392 0.406 0.199 - 114.20 12.400 12.417 12.429 -0.655 0.524 0.287 -0.655 0.524 0.151 -0.188 -0.343 0.393 0.210 - 114.25 12.377 12.403 12.408 -0.790 0.380 0.265 -0.790 0.380 0.101 -0.209 -0.300 0.420 0.190 - 114.30 12.226 12.250 12.259 -0.773 0.470 0.113 -0.773 0.470 0.053 -0.087 -0.363 0.416 0.189 - 114.35 12.218 12.219 12.232 -0.151 0.567 0.105 -0.151 0.567 0.060 -0.016 -0.085 0.178 0.053 - 114.40 12.327 12.331 12.352 0.304 0.724 0.214 0.304 0.724 0.155 0.065 0.220 0.331 0.138 - 114.45 12.521 12.522 12.533 0.167 0.536 0.408 0.167 0.536 0.218 0.068 0.089 0.241 0.123 - 114.50 12.453 12.453 12.458 0.053 0.359 0.340 0.053 0.359 0.122 0.018 0.019 0.124 0.063 - 114.55 12.713 12.714 12.716 0.150 0.257 0.600 0.150 0.257 0.154 0.090 0.038 0.224 0.091 - 114.60 12.855 12.856 12.858 0.207 0.227 0.742 0.207 0.227 0.168 0.154 0.047 0.322 0.116 - 114.65 12.612 12.613 12.614 0.175 0.045 0.499 0.175 0.045 0.023 0.088 0.008 0.141 0.045 - 114.70 12.588 12.588 12.592 0.062 -0.309 0.475 0.062 -0.309 -0.147 0.029 -0.019 0.163 0.075 - 114.75 12.849 12.849 12.863 0.044 -0.592 0.736 0.044 -0.592 -0.436 0.033 -0.026 0.447 0.219 - 114.80 12.635 12.638 12.640 0.304 -0.207 0.522 0.304 -0.207 -0.108 0.159 -0.063 0.204 0.101 - 114.85 13.019 13.021 13.029 0.240 -0.465 0.906 0.240 -0.465 -0.422 0.218 -0.112 0.548 0.244 - 114.90 13.192 13.208 13.220 0.647 -0.573 1.079 0.647 -0.573 -0.618 0.698 -0.371 0.956 0.502 - 114.95 12.990 13.001 13.014 0.534 -0.579 0.877 0.534 -0.579 -0.508 0.468 -0.309 0.695 0.378 - 115.00 12.974 12.980 12.991 0.403 -0.535 0.861 0.403 -0.535 -0.461 0.347 -0.215 0.595 0.308 - 115.05 13.233 13.244 13.249 0.555 -0.353 1.120 0.555 -0.353 -0.396 0.622 -0.196 0.844 0.381 - 115.10 13.281 13.290 13.313 0.491 -0.774 1.168 0.491 -0.774 -0.904 0.574 -0.380 1.102 0.568 - 115.15 13.115 13.149 13.160 0.940 -0.547 1.003 0.940 -0.547 -0.549 0.942 -0.515 1.094 0.603 - 115.20 13.153 13.172 13.188 0.716 -0.645 1.040 0.716 -0.645 -0.671 0.745 -0.462 1.005 0.552 - 115.25 12.947 12.972 12.992 0.792 -0.726 0.834 0.792 -0.726 -0.606 0.661 -0.576 0.926 0.533 - 115.30 12.885 12.892 12.905 0.434 -0.571 0.772 0.434 -0.571 -0.441 0.335 -0.248 0.556 0.304 - 115.35 12.976 12.977 12.992 0.189 -0.622 0.863 0.189 -0.622 -0.536 0.163 -0.117 0.583 0.286 - 115.40 12.845 12.845 12.848 0.067 -0.288 0.732 0.067 -0.288 -0.210 0.049 -0.019 0.311 0.108 - 115.45 12.900 12.916 12.917 0.647 0.167 0.787 0.647 0.167 0.131 0.509 0.108 0.533 0.268 - 115.50 12.932 12.937 12.941 0.363 -0.305 0.819 0.363 -0.305 -0.250 0.297 -0.111 0.448 0.202 - 115.55 13.183 13.185 13.199 0.193 -0.607 1.071 0.193 -0.607 -0.650 0.206 -0.117 0.776 0.346 - 115.60 13.103 13.104 13.176 0.132 -1.372 0.991 0.132 -1.372 -1.359 0.131 -0.182 1.440 0.689 - 115.65 13.186 13.187 13.253 -0.124 -1.322 1.073 -0.124 -1.322 -1.419 -0.133 0.164 1.458 0.717 - 115.70 13.032 13.033 13.067 -0.151 -0.944 0.919 -0.151 -0.944 -0.868 -0.139 0.142 0.879 0.445 - 115.75 13.292 13.292 13.306 0.054 -0.619 1.179 0.054 -0.619 -0.730 0.064 -0.033 0.888 0.367 - 115.80 13.598 13.600 13.614 0.222 -0.629 1.485 0.222 -0.629 -0.935 0.329 -0.140 1.325 0.500 - 115.85 13.708 13.712 13.745 0.311 -0.954 1.596 0.311 -0.954 -1.522 0.496 -0.297 1.776 0.814 - 115.90 13.712 13.715 13.777 0.266 -1.304 1.599 0.266 -1.304 -2.086 0.426 -0.347 2.165 1.079 - 115.95 13.794 13.795 13.863 0.079 -1.376 1.682 0.079 -1.376 -2.314 0.132 -0.108 2.364 1.160 - 116.00 13.987 13.988 14.053 -0.153 -1.352 1.874 -0.153 -1.352 -2.533 -0.286 0.206 2.681 1.279 - 116.05 14.061 14.061 14.115 -0.029 -1.232 1.948 -0.029 -1.232 -2.401 -0.057 0.036 2.658 1.201 - 116.10 13.827 13.827 13.886 -0.089 -1.274 1.714 -0.089 -1.274 -2.183 -0.153 0.114 2.284 1.096 - 116.15 13.921 13.921 13.966 0.076 -1.118 1.808 0.076 -1.118 -2.021 0.138 -0.085 2.262 1.014 - 116.20 14.209 14.210 14.280 -0.181 -1.408 2.096 -0.181 -1.408 -2.951 -0.380 0.255 3.205 1.493 - 116.25 14.055 14.063 14.176 -0.491 -1.786 1.942 -0.491 -1.786 -3.468 -0.954 0.877 3.601 1.851 - 116.30 13.977 13.985 14.129 -0.468 -2.012 1.864 -0.468 -2.012 -3.750 -0.873 0.942 3.871 1.982 - 116.35 14.024 14.036 14.175 -0.579 -1.981 1.911 -0.579 -1.981 -3.786 -1.107 1.147 3.956 2.054 - 116.40 14.349 14.370 14.525 -0.783 -2.114 2.236 -0.783 -2.114 -4.727 -1.752 1.656 5.041 2.653 - 116.45 14.170 14.193 14.375 -0.816 -2.276 2.057 -0.816 -2.276 -4.683 -1.678 1.856 5.039 2.655 - 116.50 14.188 14.196 14.389 -0.493 -2.344 2.075 -0.493 -2.344 -4.863 -1.024 1.156 5.021 2.551 - 116.55 14.080 14.081 14.301 -0.200 -2.497 1.967 -0.200 -2.497 -4.911 -0.394 0.500 5.072 2.476 - 116.60 14.025 14.030 14.274 -0.381 -2.626 1.912 -0.381 -2.626 -5.023 -0.730 1.002 5.350 2.587 - 116.65 14.037 14.039 14.256 -0.265 -2.475 1.924 -0.265 -2.475 -4.761 -0.509 0.655 4.948 2.416 - 116.70 14.188 14.194 14.287 0.393 -1.629 2.076 0.393 -1.629 -3.381 0.817 -0.641 3.558 1.768 - 116.75 13.792 13.807 13.879 0.638 -1.409 1.679 0.638 -1.409 -2.366 1.072 -0.899 2.606 1.374 - 116.80 14.114 14.123 14.180 0.488 -1.274 2.001 0.488 -1.274 -2.550 0.976 -0.622 2.933 1.400 - 116.85 14.234 14.236 14.294 0.244 -1.283 2.121 0.244 -1.283 -2.720 0.517 -0.313 3.102 1.393 - 116.90 14.241 14.245 14.298 0.333 -1.232 2.129 0.333 -1.232 -2.623 0.710 -0.411 3.080 1.374 - 116.95 14.150 14.150 14.244 0.122 -1.635 2.037 0.122 -1.635 -3.331 0.249 -0.200 3.419 1.673 - 117.00 13.868 13.872 13.999 -0.311 -1.886 1.755 -0.311 -1.886 -3.311 -0.545 0.586 3.368 1.703 - 117.05 13.644 13.645 13.756 -0.203 -1.741 1.531 -0.203 -1.741 -2.666 -0.310 0.353 2.708 1.353 - 117.10 13.708 13.719 13.825 -0.557 -1.708 1.595 -0.557 -1.708 -2.725 -0.889 0.952 2.887 1.510 - 117.15 13.835 13.857 13.970 -0.788 -1.774 1.722 -0.788 -1.774 -3.055 -1.356 1.398 3.367 1.812 - 117.20 13.756 13.763 13.934 -0.427 -2.176 1.643 -0.427 -2.176 -3.576 -0.702 0.929 3.809 1.880 - 117.25 13.752 13.752 13.933 0.067 -2.237 1.639 0.067 -2.237 -3.667 0.110 -0.150 3.848 1.836 - 117.30 13.720 13.723 13.870 0.286 -2.012 1.607 0.286 -2.012 -3.234 0.460 -0.576 3.356 1.658 - 117.35 13.538 13.542 13.664 0.335 -1.818 1.425 0.335 -1.818 -2.591 0.478 -0.609 2.724 1.352 - 117.40 13.812 13.815 13.919 -0.321 -1.699 1.699 -0.321 -1.699 -2.886 -0.546 0.546 2.937 1.493 - 117.45 14.297 14.323 14.447 -0.860 -1.888 2.184 -0.860 -1.888 -4.124 -1.878 1.624 4.538 2.407 - 117.50 14.322 14.362 14.459 -1.064 -1.676 2.209 -1.064 -1.676 -3.703 -2.350 1.783 4.411 2.367 - 117.55 14.385 14.439 14.501 -1.248 -1.340 2.272 -1.248 -1.340 -3.044 -2.835 1.672 4.257 2.242 - 117.60 14.451 14.505 14.573 -1.254 -1.403 2.338 -1.254 -1.403 -3.281 -2.931 1.759 4.504 2.369 - 117.65 14.240 14.324 14.408 -1.546 -1.558 2.127 -1.546 -1.558 -3.313 -3.289 2.409 4.671 2.627 - 117.70 14.071 14.112 14.171 -1.077 -1.286 1.958 -1.077 -1.286 -2.518 -2.109 1.385 3.324 1.782 - 117.75 14.239 14.291 14.338 -1.216 -1.168 2.126 -1.216 -1.168 -2.482 -2.585 1.420 3.681 1.927 - 117.80 14.385 14.442 14.502 -1.284 -1.316 2.272 -1.284 -1.316 -2.990 -2.918 1.690 4.271 2.253 - 117.85 14.168 14.222 14.278 -1.243 -1.268 2.055 -1.243 -1.268 -2.605 -2.554 1.576 3.687 1.987 - 117.90 13.891 13.908 13.948 -0.683 -1.049 1.779 -0.683 -1.049 -1.865 -1.215 0.716 2.365 1.169 - 117.95 14.216 14.243 14.302 -0.867 -1.306 2.104 -0.867 -1.306 -2.746 -1.824 1.132 3.441 1.743 - 118.00 13.842 13.856 13.899 -0.619 -1.096 1.729 -0.619 -1.096 -1.896 -1.070 0.678 2.287 1.140 - 118.05 13.831 13.833 13.869 -0.180 -1.009 1.719 -0.180 -1.009 -1.734 -0.309 0.181 2.002 0.885 - 118.10 13.648 13.648 13.686 -0.148 -1.014 1.535 -0.148 -1.014 -1.557 -0.227 0.150 1.703 0.790 - 118.15 13.527 13.527 13.539 0.008 -0.572 1.414 0.008 -0.572 -0.808 0.011 -0.005 1.163 0.404 - 118.20 13.411 13.413 13.417 -0.229 -0.347 1.298 -0.229 -0.347 -0.450 -0.297 0.079 0.929 0.272 - 118.25 13.617 13.617 13.621 -0.021 -0.355 1.504 -0.021 -0.355 -0.534 -0.032 0.008 1.194 0.268 - 118.30 13.600 13.600 13.605 -0.122 -0.371 1.487 -0.122 -0.371 -0.551 -0.181 0.045 1.182 0.291 - 118.35 13.950 13.959 13.984 -0.486 -0.847 1.837 -0.486 -0.847 -1.557 -0.894 0.412 2.165 0.921 - 118.40 14.413 14.415 14.447 -0.265 -0.961 2.300 -0.265 -0.961 -2.211 -0.609 0.255 3.142 1.154 - 118.45 14.701 14.702 14.733 -0.160 -0.946 2.589 -0.160 -0.946 -2.449 -0.414 0.151 3.811 1.244 - 118.50 14.537 14.538 14.562 -0.121 -0.845 2.425 -0.121 -0.845 -2.049 -0.294 0.103 3.304 1.036 - 118.55 14.524 14.524 14.555 -0.047 -0.946 2.411 -0.047 -0.946 -2.282 -0.113 0.044 3.355 1.143 - 118.60 14.532 14.543 14.574 -0.551 -0.960 2.420 -0.551 -0.960 -2.322 -1.333 0.529 3.539 1.365 - 118.65 14.847 14.853 14.879 -0.412 -0.878 2.734 -0.412 -0.878 -2.402 -1.125 0.362 4.209 1.338 - 118.70 14.718 14.726 14.762 -0.479 -1.033 2.605 -0.479 -1.033 -2.693 -1.248 0.495 4.043 1.504 - 118.75 14.727 14.728 14.753 -0.158 -0.851 2.614 -0.158 -0.851 -2.224 -0.412 0.134 3.792 1.133 - 118.80 14.528 14.533 14.558 -0.382 -0.844 2.416 -0.382 -0.844 -2.039 -0.924 0.323 3.347 1.131 - 118.85 14.444 14.449 14.465 -0.350 -0.693 2.331 -0.350 -0.693 -1.616 -0.816 0.243 3.019 0.913 - 118.90 14.513 14.514 14.529 -0.193 -0.668 2.400 -0.193 -0.668 -1.602 -0.462 0.129 3.121 0.836 - 118.95 14.577 14.577 14.624 0.035 -1.169 2.464 0.035 -1.169 -2.880 0.085 -0.040 3.720 1.441 - 119.00 14.475 14.475 14.530 -0.012 -1.260 2.363 -0.012 -1.260 -2.976 -0.029 0.016 3.584 1.488 - 119.05 14.137 14.139 14.187 -0.239 -1.169 2.024 -0.239 -1.169 -2.366 -0.483 0.279 2.760 1.216 - 119.10 14.315 14.320 14.407 -0.390 -1.579 2.202 -0.390 -1.579 -3.478 -0.858 0.616 3.748 1.817 - 119.15 14.278 14.278 14.366 0.045 -1.584 2.165 0.045 -1.584 -3.430 0.097 -0.071 3.600 1.716 - 119.20 14.138 14.139 14.202 -0.117 -1.343 2.025 -0.117 -1.343 -2.720 -0.237 0.157 2.960 1.368 - 119.25 14.091 14.102 14.149 -0.568 -1.151 1.978 -0.568 -1.151 -2.277 -1.124 0.654 2.780 1.311 - 119.30 14.181 14.184 14.254 -0.291 -1.417 2.068 -0.291 -1.417 -2.931 -0.601 0.412 3.185 1.510 - 119.35 14.068 14.069 14.171 -0.125 -1.698 1.956 -0.125 -1.698 -3.320 -0.245 0.213 3.361 1.668 - 119.40 14.209 14.209 14.309 0.110 -1.689 2.096 0.110 -1.689 -3.541 0.231 -0.186 3.630 1.777 - 119.45 14.146 14.146 14.209 -0.081 -1.338 2.033 -0.081 -1.338 -2.720 -0.164 0.108 2.965 1.364 - 119.50 14.084 14.089 14.132 -0.366 -1.104 1.971 -0.366 -1.104 -2.176 -0.722 0.404 2.619 1.164 - 119.55 13.962 13.972 14.009 -0.524 -1.012 1.850 -0.524 -1.012 -1.872 -0.970 0.531 2.360 1.087 - 119.60 13.947 13.947 14.010 -0.083 -1.330 1.834 -0.083 -1.330 -2.440 -0.151 0.110 2.570 1.223 - 119.65 13.962 13.964 14.034 0.242 -1.399 1.850 0.242 -1.399 -2.588 0.448 -0.339 2.719 1.324 - 119.70 13.629 13.629 13.694 -0.025 -1.335 1.516 -0.025 -1.335 -2.024 -0.038 0.033 2.040 1.012 - 119.75 13.433 13.433 13.501 -0.065 -1.354 1.320 -0.065 -1.354 -1.788 -0.086 0.089 1.791 0.896 - 119.80 13.203 13.203 13.259 0.037 -1.212 1.090 0.037 -1.212 -1.321 0.041 -0.045 1.329 0.661 - 119.85 13.228 13.229 13.259 -0.162 -0.893 1.115 -0.162 -0.893 -0.995 -0.181 0.145 1.033 0.511 - 119.90 13.263 13.269 13.299 -0.380 -0.905 1.150 -0.380 -0.905 -1.041 -0.437 0.344 1.143 0.590 - 119.95 13.310 13.312 13.361 -0.220 -1.138 1.198 -0.220 -1.138 -1.362 -0.264 0.250 1.388 0.705 - 120.00 13.287 13.289 13.363 0.215 -1.409 1.174 0.215 -1.409 -1.654 0.253 -0.303 1.705 0.850 - 120.05 13.019 13.026 13.086 0.425 -1.250 0.907 0.425 -1.250 -1.133 0.386 -0.532 1.283 0.655 - 120.10 12.981 13.002 13.048 0.736 -1.092 0.868 0.736 -1.092 -0.948 0.639 -0.803 1.244 0.699 - 120.15 13.020 13.031 13.060 0.538 -0.862 0.907 0.538 -0.862 -0.782 0.489 -0.464 0.928 0.516 - 120.20 13.071 13.087 13.101 0.639 -0.601 0.959 0.639 -0.601 -0.576 0.613 -0.384 0.845 0.463 - 120.25 13.033 13.049 13.061 0.653 -0.543 0.920 0.653 -0.543 -0.499 0.601 -0.354 0.784 0.429 - 120.30 13.050 13.050 13.074 0.108 -0.786 0.937 0.108 -0.786 -0.736 0.101 -0.085 0.754 0.374 - 120.35 13.072 13.074 13.090 0.229 -0.659 0.959 0.229 -0.659 -0.632 0.220 -0.151 0.703 0.343 - 120.40 13.029 13.029 13.041 -0.029 -0.551 0.916 -0.029 -0.551 -0.505 -0.027 0.016 0.572 0.253 - 120.45 13.036 13.036 13.053 -0.150 -0.657 0.923 -0.150 -0.657 -0.606 -0.138 0.098 0.653 0.315 - 120.50 13.235 13.248 13.262 0.594 -0.610 1.122 0.594 -0.610 -0.684 0.666 -0.362 0.992 0.511 - 120.55 13.287 13.320 13.336 0.933 -0.640 1.175 0.933 -0.640 -0.752 1.096 -0.598 1.331 0.729 - 120.60 13.436 13.455 13.468 0.718 -0.582 1.323 0.718 -0.582 -0.770 0.950 -0.418 1.302 0.646 - 120.65 13.326 13.334 13.348 0.446 -0.625 1.214 0.446 -0.625 -0.758 0.542 -0.279 1.031 0.486 - 120.70 13.151 13.161 13.194 0.498 -0.932 1.039 0.498 -0.932 -0.968 0.518 -0.465 1.098 0.596 - 120.75 13.225 13.232 13.273 0.419 -1.042 1.112 0.419 -1.042 -1.159 0.466 -0.437 1.250 0.662 - 120.80 13.161 13.165 13.192 0.318 -0.835 1.048 0.318 -0.835 -0.876 0.333 -0.266 0.949 0.487 - 120.85 13.114 13.132 13.156 0.692 -0.795 1.001 0.692 -0.795 -0.796 0.693 -0.550 1.057 0.595 - 120.90 13.159 13.201 13.217 1.047 -0.660 1.046 1.047 -0.660 -0.691 1.096 -0.691 1.314 0.734 - 120.95 13.216 13.246 13.274 0.895 -0.855 1.103 0.895 -0.855 -0.943 0.987 -0.765 1.374 0.782 - 121.00 13.426 13.437 13.475 0.533 -1.014 1.314 0.533 -1.014 -1.331 0.700 -0.540 1.518 0.799 - 121.05 13.916 13.921 13.968 0.387 -1.144 1.803 0.387 -1.144 -2.064 0.697 -0.442 2.355 1.111 - 121.10 13.966 13.974 14.045 0.460 -1.411 1.854 0.460 -1.411 -2.615 0.853 -0.649 2.819 1.413 - 121.15 13.638 13.650 13.714 0.561 -1.332 1.525 0.561 -1.332 -2.032 0.856 -0.748 2.208 1.164 - 121.20 13.436 13.452 13.516 0.644 -1.318 1.323 0.644 -1.318 -1.744 0.853 -0.849 1.951 1.059 - 121.25 13.451 13.470 13.528 0.725 -1.248 1.338 0.725 -1.248 -1.669 0.970 -0.905 1.936 1.066 - 121.30 13.745 13.751 13.827 0.402 -1.454 1.632 0.402 -1.454 -2.372 0.656 -0.584 2.469 1.265 - 121.35 13.626 13.632 13.720 0.419 -1.545 1.513 0.419 -1.545 -2.338 0.634 -0.647 2.426 1.253 - 121.40 13.767 13.775 13.852 0.486 -1.459 1.654 0.486 -1.459 -2.413 0.804 -0.709 2.550 1.320 - 121.45 13.747 13.769 13.853 0.782 -1.518 1.634 0.782 -1.518 -2.480 1.278 -1.187 2.793 1.516 - 121.50 13.702 13.733 13.806 0.924 -1.416 1.589 0.924 -1.416 -2.251 1.468 -1.308 2.692 1.494 - 121.55 13.430 13.452 13.513 0.769 -1.288 1.317 0.769 -1.288 -1.696 1.013 -0.990 1.992 1.105 - 121.60 13.159 13.190 13.245 0.910 -1.200 1.046 0.910 -1.200 -1.255 0.952 -1.092 1.681 0.958 - 121.65 13.053 13.071 13.122 0.679 -1.155 0.940 0.679 -1.155 -1.086 0.638 -0.784 1.340 0.742 - 121.70 13.065 13.083 13.113 0.690 -0.882 0.952 0.690 -0.882 -0.840 0.657 -0.609 1.081 0.614 - 121.75 13.313 13.336 13.393 0.776 -1.237 1.200 0.776 -1.237 -1.484 0.932 -0.960 1.786 0.999 - 121.80 13.416 13.424 13.466 0.471 -1.062 1.303 0.471 -1.062 -1.384 0.614 -0.501 1.524 0.797 - 121.85 13.620 13.624 13.668 0.358 -1.088 1.507 0.358 -1.088 -1.640 0.540 -0.390 1.792 0.885 - 121.90 13.805 13.810 13.838 0.381 -0.870 1.692 0.381 -0.870 -1.473 0.645 -0.332 1.884 0.821 - 121.95 13.803 13.803 13.826 -0.145 -0.789 1.690 -0.145 -0.789 -1.333 -0.245 0.114 1.750 0.680 - 122.00 13.792 13.795 13.848 0.291 -1.205 1.679 0.291 -1.205 -2.023 0.489 -0.351 2.178 1.055 - 122.05 13.404 13.408 13.453 0.311 -1.104 1.291 0.311 -1.104 -1.425 0.402 -0.344 1.491 0.760 - 122.10 13.158 13.167 13.190 0.495 -0.773 1.045 0.495 -0.773 -0.808 0.517 -0.383 0.967 0.516 - 122.15 12.880 12.896 12.899 0.626 -0.302 0.768 0.626 -0.302 -0.232 0.480 -0.189 0.536 0.283 - 122.20 12.773 12.802 12.804 0.861 -0.253 0.660 0.861 -0.253 -0.167 0.568 -0.218 0.620 0.315 - 122.25 12.456 12.464 12.467 0.431 -0.272 0.343 0.431 -0.272 -0.093 0.148 -0.117 0.189 0.105 - 122.30 12.590 12.616 12.621 0.808 -0.336 0.477 0.808 -0.336 -0.161 0.386 -0.272 0.497 0.249 - 122.35 12.560 12.592 12.599 0.903 -0.397 0.447 0.903 -0.397 -0.177 0.404 -0.358 0.586 0.284 - 122.40 12.523 12.554 12.560 0.881 -0.408 0.410 0.881 -0.408 -0.167 0.361 -0.360 0.556 0.268 - 122.45 12.513 12.525 12.526 0.555 0.135 0.400 0.555 0.135 0.054 0.222 0.075 0.243 0.120 - 122.50 12.522 12.534 12.535 0.536 -0.202 0.409 0.536 -0.202 -0.083 0.219 -0.108 0.248 0.129 - 122.55 12.683 12.705 12.710 0.752 -0.346 0.570 0.752 -0.346 -0.197 0.429 -0.260 0.505 0.269 - 122.60 12.618 12.652 12.656 0.931 -0.323 0.505 0.931 -0.323 -0.163 0.470 -0.301 0.613 0.291 - 122.65 12.845 12.912 12.914 1.315 -0.209 0.732 1.315 -0.209 -0.153 0.963 -0.274 1.155 0.506 - 122.70 13.245 13.323 13.325 1.440 -0.197 1.132 1.440 -0.197 -0.223 1.630 -0.284 1.697 0.835 - 122.75 13.210 13.250 13.251 1.035 -0.142 1.097 1.035 -0.142 -0.155 1.136 -0.146 1.147 0.578 - 122.80 13.121 13.137 13.140 0.636 -0.319 1.008 0.636 -0.319 -0.321 0.641 -0.203 0.762 0.373 - 122.85 13.051 13.063 13.074 0.564 -0.520 0.938 0.564 -0.520 -0.488 0.530 -0.294 0.735 0.389 - 122.90 12.984 13.015 13.016 0.898 -0.223 0.871 0.898 -0.223 -0.194 0.782 -0.201 0.807 0.415 - 122.95 12.915 12.926 12.938 0.538 -0.549 0.802 0.538 -0.549 -0.440 0.431 -0.295 0.617 0.342 - 123.00 12.895 12.944 12.969 1.127 -0.807 0.782 1.127 -0.807 -0.631 0.881 -0.910 1.267 0.708 - 123.05 12.894 12.953 12.976 1.232 -0.766 0.781 1.232 -0.766 -0.598 0.962 -0.943 1.357 0.737 - 123.10 13.236 13.328 13.348 1.566 -0.730 1.123 1.566 -0.730 -0.820 1.759 -1.144 2.123 1.126 - 123.15 13.245 13.367 13.397 1.804 -0.890 1.132 1.804 -0.890 -1.008 2.042 -1.606 2.664 1.393 - 123.20 13.511 13.620 13.645 1.718 -0.836 1.398 1.718 -0.836 -1.169 2.402 -1.437 2.803 1.517 - 123.25 13.515 13.587 13.608 1.388 -0.764 1.403 1.388 -0.764 -1.072 1.947 -1.061 2.239 1.231 - 123.30 13.366 13.441 13.464 1.411 -0.792 1.254 1.411 -0.792 -0.993 1.769 -1.118 2.095 1.158 - 123.35 13.603 13.677 13.733 1.419 -1.241 1.491 1.419 -1.241 -1.851 2.115 -1.761 2.888 1.658 - 123.40 13.367 13.452 13.499 1.505 -1.130 1.254 1.505 -1.130 -1.417 1.887 -1.700 2.557 1.454 - 123.45 13.310 13.370 13.410 1.269 -1.030 1.197 1.269 -1.030 -1.233 1.519 -1.307 2.052 1.177 - 123.50 13.302 13.334 13.395 0.932 -1.276 1.189 0.932 -1.276 -1.517 1.108 -1.189 1.955 1.111 - 123.55 13.239 13.255 13.336 0.662 -1.471 1.126 0.662 -1.471 -1.656 0.746 -0.974 1.935 1.030 - 123.60 13.159 13.185 13.247 0.830 -1.278 1.046 0.830 -1.278 -1.336 0.868 -1.061 1.708 0.957 - 123.65 13.059 13.073 13.154 0.593 -1.459 0.946 0.593 -1.459 -1.381 0.561 -0.865 1.688 0.862 - 123.70 13.101 13.114 13.191 0.581 -1.423 0.988 0.581 -1.423 -1.406 0.574 -0.828 1.670 0.865 - 123.75 13.234 13.248 13.329 0.618 -1.462 1.121 0.618 -1.462 -1.640 0.693 -0.903 1.889 0.998 - 123.80 13.230 13.235 13.303 0.370 -1.347 1.117 0.370 -1.347 -1.504 0.414 -0.499 1.600 0.819 - 123.85 13.101 13.110 13.157 0.469 -1.120 0.988 0.469 -1.120 -1.107 0.463 -0.525 1.226 0.655 - 123.90 12.949 12.955 13.005 0.413 -1.135 0.836 0.413 -1.135 -0.948 0.345 -0.469 1.078 0.556 - 123.95 12.746 12.766 12.789 0.722 -0.759 0.633 0.722 -0.759 -0.481 0.457 -0.548 0.749 0.430 - 124.00 12.747 12.758 12.775 0.537 -0.654 0.634 0.537 -0.654 -0.415 0.341 -0.352 0.559 0.321 - 124.05 12.967 12.972 12.988 0.358 -0.654 0.854 0.358 -0.654 -0.558 0.306 -0.234 0.642 0.339 - 124.10 12.733 12.736 12.753 0.310 -0.658 0.620 0.310 -0.658 -0.408 0.192 -0.204 0.457 0.248 - 124.15 13.002 13.016 13.027 0.596 -0.539 0.889 0.596 -0.539 -0.479 0.530 -0.321 0.718 0.392 - 124.20 12.991 13.037 13.067 1.089 -0.893 0.878 1.089 -0.893 -0.784 0.956 -0.973 1.377 0.787 - 124.25 12.990 13.014 13.063 0.791 -1.130 0.877 0.791 -1.130 -0.992 0.694 -0.894 1.337 0.753 - 124.30 12.989 13.009 13.040 0.731 -0.893 0.876 0.731 -0.893 -0.782 0.641 -0.653 1.049 0.602 - 124.35 12.992 13.013 13.039 0.740 -0.817 0.879 0.740 -0.817 -0.718 0.650 -0.604 0.994 0.571 - 124.40 12.866 12.878 12.897 0.565 -0.690 0.753 0.565 -0.690 -0.520 0.426 -0.390 0.682 0.388 - 124.45 12.955 12.967 12.990 0.549 -0.780 0.842 0.549 -0.780 -0.657 0.462 -0.428 0.810 0.455 - 124.50 12.769 12.793 12.809 0.774 -0.645 0.656 0.774 -0.645 -0.423 0.508 -0.499 0.723 0.414 - 124.55 13.071 13.085 13.092 0.593 -0.435 0.959 0.593 -0.435 -0.417 0.569 -0.258 0.730 0.375 - 124.60 13.273 13.287 13.296 0.606 -0.510 1.160 0.606 -0.510 -0.591 0.703 -0.309 0.987 0.485 - 124.65 13.528 13.538 13.555 0.511 -0.682 1.415 0.511 -0.682 -0.966 0.723 -0.349 1.365 0.628 - 124.70 13.671 13.672 13.685 0.201 -0.587 1.558 0.201 -0.587 -0.915 0.313 -0.118 1.406 0.487 - 124.75 13.687 13.688 13.693 0.167 -0.368 1.574 0.167 -0.368 -0.578 0.262 -0.061 1.320 0.319 - 124.80 13.811 13.815 13.822 0.340 -0.451 1.698 0.340 -0.451 -0.766 0.577 -0.153 1.601 0.486 - 124.85 13.647 13.648 13.649 0.182 -0.107 1.534 0.182 -0.107 -0.164 0.279 -0.019 1.199 0.162 - 124.90 13.934 13.934 13.937 -0.107 -0.290 1.821 -0.107 -0.290 -0.527 -0.195 0.031 1.706 0.281 - 124.95 14.188 14.191 14.198 -0.287 -0.462 2.075 -0.287 -0.462 -0.959 -0.597 0.133 2.301 0.569 - 125.00 14.319 14.320 14.329 -0.190 -0.488 2.206 -0.190 -0.488 -1.077 -0.420 0.093 2.571 0.580 - 125.05 14.382 14.383 14.383 -0.166 0.075 2.269 -0.166 0.075 0.171 -0.376 -0.012 2.591 0.206 - 125.10 14.225 14.227 14.228 -0.267 0.160 2.112 -0.267 0.160 0.337 -0.564 -0.043 2.279 0.329 - 125.15 14.186 14.187 14.192 -0.170 0.376 2.073 -0.170 0.376 0.779 -0.352 -0.064 2.233 0.429 - 125.20 13.881 13.881 13.885 0.046 0.314 1.768 0.046 0.314 0.556 0.082 0.015 1.614 0.281 - 125.25 13.862 13.863 13.871 -0.192 0.483 1.749 -0.192 0.483 0.845 -0.336 -0.093 1.664 0.457 - 125.30 13.995 13.997 13.997 -0.201 0.139 1.882 -0.201 0.139 0.261 -0.378 -0.028 1.801 0.230 - 125.35 13.945 13.947 13.947 -0.195 0.099 1.833 -0.195 0.099 0.181 -0.357 -0.019 1.703 0.201 - 125.40 14.179 14.180 14.181 -0.153 0.218 2.066 -0.153 0.218 0.451 -0.316 -0.033 2.170 0.276 - 125.45 14.200 14.201 14.202 -0.146 0.156 2.087 -0.146 0.156 0.325 -0.304 -0.023 2.202 0.223 - 125.50 14.111 14.112 14.112 -0.170 0.047 1.999 -0.170 0.047 0.094 -0.339 -0.008 2.013 0.176 - 125.55 14.289 14.290 14.294 0.147 0.339 2.176 0.147 0.339 0.737 0.321 0.050 2.436 0.403 - 125.60 14.351 14.358 14.359 0.472 0.144 2.238 0.472 0.144 0.323 1.056 0.068 2.626 0.553 - 125.65 14.034 14.037 14.037 0.262 0.079 1.921 0.262 0.079 0.151 0.504 0.021 1.883 0.263 - 125.70 14.050 14.050 14.051 -0.024 -0.215 1.937 -0.024 -0.215 -0.416 -0.046 0.005 1.899 0.209 - 125.75 14.101 14.102 14.105 0.174 -0.281 1.989 0.174 -0.281 -0.559 0.346 -0.049 2.032 0.329 - 125.80 13.879 13.882 13.888 0.300 -0.412 1.766 0.300 -0.412 -0.727 0.530 -0.124 1.689 0.454 - 125.85 13.672 13.676 13.676 0.293 0.018 1.560 0.293 0.018 0.028 0.457 0.005 1.259 0.229 - 125.90 13.727 13.728 13.729 0.176 0.145 1.614 0.176 0.145 0.234 0.284 0.026 1.329 0.185 - 125.95 13.743 13.744 13.745 0.121 0.191 1.631 0.121 0.191 0.312 0.197 0.023 1.355 0.185 - 126.00 13.675 13.678 13.682 0.286 0.367 1.562 0.286 0.367 0.573 0.447 0.105 1.328 0.367 - 126.05 13.475 13.475 13.475 0.080 0.067 1.362 0.080 0.067 0.092 0.109 0.005 0.933 0.071 - 126.10 13.241 13.241 13.241 -0.036 0.018 1.128 -0.036 0.018 0.020 -0.041 -0.001 0.637 0.023 - 126.15 13.087 13.099 13.100 0.565 0.065 0.974 0.565 0.065 0.063 0.550 0.037 0.636 0.278 - 126.20 12.942 12.961 12.961 0.698 0.019 0.829 0.698 0.019 0.016 0.579 0.013 0.587 0.290 - 126.25 12.715 12.728 12.728 0.570 0.070 0.602 0.570 0.070 0.042 0.343 0.040 0.346 0.174 - 126.30 12.960 12.971 12.971 0.539 -0.122 0.847 0.539 -0.122 -0.103 0.456 -0.066 0.511 0.236 - 126.35 13.027 13.027 13.031 -0.020 -0.292 0.915 -0.020 -0.292 -0.267 -0.019 0.006 0.461 0.134 - 126.40 13.055 13.058 13.070 0.285 -0.564 0.942 0.285 -0.564 -0.531 0.268 -0.160 0.643 0.308 - 126.45 13.027 13.028 13.042 0.176 -0.600 0.914 0.176 -0.600 -0.549 0.161 -0.106 0.614 0.291 - 126.50 12.902 12.910 12.925 0.440 -0.618 0.790 0.440 -0.618 -0.488 0.347 -0.272 0.599 0.329 - 126.55 13.065 13.065 13.074 0.062 -0.485 0.952 0.062 -0.485 -0.461 0.059 -0.030 0.572 0.233 - 126.60 13.359 13.359 13.385 -0.016 -0.845 1.246 -0.016 -0.845 -1.053 -0.020 0.013 1.134 0.527 - 126.65 13.456 13.456 13.480 0.026 -0.809 1.343 0.026 -0.809 -1.087 0.035 -0.021 1.230 0.544 - 126.70 13.235 13.236 13.253 0.173 -0.653 1.123 0.173 -0.653 -0.733 0.194 -0.113 0.858 0.383 - 126.75 13.151 13.154 13.185 0.291 -0.905 1.038 0.291 -0.905 -0.940 0.302 -0.264 0.991 0.511 - 126.80 13.189 13.193 13.228 0.319 -0.968 1.076 0.319 -0.968 -1.041 0.343 -0.309 1.098 0.570 - 126.85 13.209 13.225 13.258 0.659 -0.932 1.096 0.659 -0.932 -1.022 0.722 -0.614 1.252 0.697 - 126.90 13.350 13.365 13.400 0.628 -0.965 1.237 0.628 -0.965 -1.194 0.777 -0.606 1.429 0.774 - 126.95 13.259 13.260 13.273 0.175 -0.596 1.146 0.175 -0.596 -0.683 0.201 -0.104 0.849 0.360 - 127.00 13.190 13.196 13.223 0.404 -0.850 1.077 0.404 -0.850 -0.916 0.435 -0.343 1.023 0.535 - 127.05 13.477 13.484 13.509 0.434 -0.820 1.364 0.434 -0.820 -1.119 0.593 -0.356 1.361 0.658 - 127.10 13.619 13.620 13.652 0.136 -0.936 1.506 0.136 -0.936 -1.410 0.204 -0.127 1.581 0.715 - 127.15 13.456 13.458 13.513 0.230 -1.221 1.343 0.230 -1.221 -1.639 0.309 -0.281 1.673 0.846 - 127.20 13.049 13.055 13.080 0.406 -0.809 0.936 0.406 -0.809 -0.757 0.380 -0.328 0.847 0.454 - 127.25 12.898 12.920 12.949 0.753 -0.866 0.785 0.753 -0.866 -0.680 0.591 -0.652 0.966 0.556 - 127.30 13.211 13.237 13.268 0.826 -0.904 1.098 0.826 -0.904 -0.993 0.907 -0.747 1.353 0.770 - 127.35 13.133 13.172 13.182 1.016 -0.497 1.020 1.016 -0.497 -0.507 1.037 -0.505 1.160 0.630 - 127.40 13.203 13.242 13.256 1.020 -0.612 1.090 1.020 -0.612 -0.667 1.112 -0.624 1.302 0.720 - 127.45 13.283 13.341 13.348 1.252 -0.402 1.170 1.252 -0.402 -0.470 1.464 -0.503 1.549 0.809 - 127.50 13.265 13.327 13.328 1.283 -0.212 1.152 1.283 -0.212 -0.244 1.477 -0.272 1.508 0.761 - 127.55 13.399 13.468 13.473 1.363 -0.355 1.286 1.363 -0.355 -0.457 1.752 -0.484 1.818 0.937 - 127.60 13.556 13.648 13.655 1.583 -0.420 1.443 1.583 -0.420 -0.607 2.284 -0.665 2.382 1.228 - 127.65 13.376 13.463 13.464 1.536 -0.154 1.263 1.536 -0.154 -0.195 1.940 -0.237 1.989 0.982 - 127.70 13.355 13.437 13.442 1.480 -0.362 1.243 1.480 -0.362 -0.449 1.839 -0.535 1.933 0.984 - 127.75 13.351 13.416 13.422 1.318 -0.394 1.238 1.318 -0.394 -0.488 1.632 -0.519 1.713 0.890 - 127.80 13.519 13.569 13.575 1.161 -0.416 1.406 1.161 -0.416 -0.585 1.633 -0.483 1.750 0.900 - 127.85 13.659 13.696 13.699 1.014 -0.294 1.546 1.014 -0.294 -0.455 1.567 -0.298 1.752 0.829 - 127.90 13.617 13.667 13.667 1.171 -0.105 1.504 1.171 -0.105 -0.158 1.761 -0.123 1.822 0.886 - 127.95 13.753 13.805 13.809 1.199 0.328 1.640 1.199 0.328 0.537 1.967 0.393 2.117 1.038 - 128.00 13.812 13.838 13.839 0.848 0.106 1.700 0.848 0.106 0.180 1.441 0.090 1.809 0.727 - 128.05 14.043 14.058 14.059 0.662 0.073 1.930 0.662 0.073 0.141 1.277 0.048 2.084 0.643 - 128.10 14.028 14.036 14.038 0.463 0.258 1.915 0.463 0.258 0.494 0.887 0.119 1.974 0.511 - 128.15 13.911 13.912 13.919 0.188 0.434 1.798 0.188 0.434 0.780 0.338 0.082 1.728 0.427 - 128.20 13.589 13.594 13.599 0.341 0.368 1.477 0.341 0.368 0.543 0.503 0.125 1.216 0.376 - 128.25 13.375 13.376 13.382 0.170 0.404 1.262 0.170 0.404 0.510 0.214 0.068 0.893 0.279 - 128.30 13.471 13.478 13.478 0.436 0.121 1.358 0.436 0.121 0.164 0.593 0.053 1.024 0.309 - 128.35 13.271 13.300 13.304 0.881 0.341 1.158 0.881 0.341 0.395 1.020 0.300 1.116 0.567 - 128.40 13.240 13.270 13.270 0.889 0.088 1.127 0.889 0.088 0.100 1.002 0.079 1.034 0.505 - 128.45 13.416 13.451 13.451 0.965 0.141 1.303 0.965 0.141 0.184 1.258 0.136 1.325 0.639 - 128.50 13.222 13.242 13.243 0.726 -0.186 1.109 0.726 -0.186 -0.207 0.805 -0.135 0.896 0.421 - 128.55 12.960 12.968 12.977 0.466 -0.463 0.847 0.466 -0.463 -0.392 0.395 -0.215 0.574 0.298 - 128.60 12.692 12.712 12.719 0.714 -0.433 0.579 0.714 -0.433 -0.250 0.413 -0.309 0.516 0.287 - 128.65 12.504 12.530 12.532 0.811 -0.228 0.391 0.811 -0.228 -0.089 0.317 -0.185 0.431 0.189 - 128.70 12.563 12.598 12.599 0.936 -0.183 0.450 0.936 -0.183 -0.082 0.421 -0.171 0.556 0.231 - 128.75 12.272 12.295 12.298 0.753 -0.245 0.159 0.753 -0.245 -0.039 0.120 -0.184 0.326 0.112 - 128.80 12.126 12.137 12.138 0.517 -0.202 0.013 0.517 -0.202 -0.003 0.007 -0.104 0.154 0.052 - 128.85 12.194 12.203 12.203 0.457 -0.113 0.081 0.457 -0.113 -0.009 0.037 -0.052 0.114 0.032 - 128.90 12.035 12.047 12.047 0.527 0.108 -0.077 0.527 0.108 -0.008 -0.041 0.057 0.148 0.035 - 128.95 12.363 12.376 12.382 0.562 0.375 0.250 0.562 0.375 0.094 0.141 0.211 0.260 0.135 - 129.00 12.142 12.146 12.154 0.306 0.428 0.029 0.306 0.428 0.013 0.009 0.131 0.139 0.066 - 129.05 12.367 12.374 12.376 0.397 0.234 0.255 0.397 0.234 0.060 0.101 0.093 0.139 0.075 - 129.10 12.540 12.544 12.549 0.297 0.379 0.427 0.297 0.379 0.162 0.127 0.113 0.207 0.117 - 129.15 12.337 12.354 12.357 0.642 0.283 0.224 0.642 0.283 0.063 0.144 0.182 0.271 0.120 - 129.20 12.182 12.190 12.190 0.440 -0.006 0.069 0.440 -0.006 -0.000 0.031 -0.003 0.099 0.015 - 129.25 11.975 11.979 11.981 0.285 -0.215 -0.138 0.285 -0.215 0.030 -0.039 -0.061 0.073 0.039 - 129.30 11.841 11.856 11.861 0.581 -0.374 -0.271 0.581 -0.374 0.102 -0.158 -0.218 0.276 0.144 - 129.35 11.725 11.746 11.746 0.694 0.069 -0.388 0.694 0.069 -0.027 -0.269 0.048 0.318 0.137 - 129.40 11.700 11.724 11.724 0.761 0.012 -0.413 0.761 0.012 -0.005 -0.314 0.009 0.375 0.157 - 129.45 11.636 11.672 11.672 0.914 0.029 -0.477 0.914 0.029 -0.014 -0.436 0.026 0.532 0.218 - 129.50 11.550 11.597 11.600 1.041 0.283 -0.563 1.041 0.283 -0.159 -0.586 0.295 0.740 0.337 - 129.55 11.645 11.712 11.712 1.252 0.055 -0.468 1.252 0.055 -0.026 -0.586 0.069 0.894 0.295 - 129.60 11.551 11.607 11.607 1.139 -0.033 -0.561 1.139 -0.033 0.018 -0.639 -0.037 0.806 0.320 - 129.65 11.599 11.665 11.666 1.241 0.169 -0.514 1.241 0.169 -0.087 -0.638 0.210 0.917 0.339 - 129.70 11.547 11.623 11.628 1.326 0.362 -0.566 1.326 0.362 -0.205 -0.751 0.480 1.105 0.457 - 129.75 11.685 11.752 11.758 1.249 0.363 -0.427 1.249 0.363 -0.155 -0.534 0.454 0.938 0.359 - 129.80 11.870 11.910 11.911 0.975 0.094 -0.242 0.975 0.094 -0.023 -0.236 0.092 0.509 0.127 - 129.85 11.406 11.436 11.440 0.826 0.319 -0.707 0.826 0.319 -0.226 -0.584 0.264 0.642 0.340 - 129.90 11.522 11.573 11.573 1.079 -0.114 -0.590 1.079 -0.114 0.067 -0.637 -0.123 0.763 0.326 - 129.95 11.404 11.453 11.456 1.057 -0.277 -0.709 1.057 -0.277 0.197 -0.750 -0.293 0.849 0.414 - 130.00 11.146 11.193 11.197 1.027 -0.297 -0.967 1.027 -0.297 0.287 -0.993 -0.305 1.039 0.539 - 130.05 11.423 11.468 11.470 1.012 -0.190 -0.689 1.012 -0.190 0.131 -0.697 -0.193 0.767 0.368 - 130.10 11.275 11.318 11.319 0.985 -0.201 -0.838 0.985 -0.201 0.168 -0.826 -0.198 0.857 0.433 - 130.15 11.719 11.776 11.789 1.161 -0.547 -0.394 1.161 -0.547 0.215 -0.457 -0.635 0.901 0.406 - 130.20 11.485 11.569 11.578 1.393 -0.464 -0.628 1.393 -0.464 0.292 -0.875 -0.647 1.275 0.563 - 130.25 11.585 11.719 11.723 1.765 -0.297 -0.527 1.765 -0.297 0.157 -0.931 -0.524 1.740 0.540 - 130.30 11.305 11.439 11.441 1.747 -0.220 -0.808 1.747 -0.220 0.178 -1.411 -0.385 1.876 0.737 - 130.35 11.159 11.356 11.365 2.105 -0.450 -0.953 2.105 -0.450 0.429 -2.007 -0.947 2.771 1.130 - 130.40 11.160 11.352 11.360 2.078 -0.429 -0.953 2.078 -0.429 0.409 -1.980 -0.892 2.705 1.105 - 130.45 11.088 11.331 11.332 2.334 -0.145 -1.025 2.334 -0.145 0.148 -2.393 -0.337 3.261 1.211 - 130.50 11.128 11.329 11.336 2.126 -0.403 -0.985 2.126 -0.403 0.397 -2.094 -0.856 2.826 1.148 - 130.55 11.458 11.629 11.634 1.987 -0.337 -0.655 1.987 -0.337 0.221 -1.301 -0.670 2.246 0.740 - 130.60 11.581 11.689 11.694 1.585 -0.337 -0.532 1.585 -0.337 0.179 -0.843 -0.534 1.454 0.507 - 130.65 11.925 11.991 11.996 1.262 -0.344 -0.188 1.262 -0.344 0.065 -0.237 -0.434 0.873 0.249 - 130.70 11.932 12.001 12.007 1.287 -0.374 -0.181 1.287 -0.374 0.068 -0.233 -0.481 0.915 0.269 - 130.75 12.104 12.154 12.161 1.109 -0.407 -0.009 1.109 -0.407 0.004 -0.010 -0.452 0.698 0.226 - 130.80 11.883 11.938 11.962 1.154 -0.745 -0.230 1.154 -0.745 0.171 -0.266 -0.859 0.969 0.458 - 130.85 11.908 11.961 11.974 1.121 -0.560 -0.205 1.121 -0.560 0.115 -0.230 -0.628 0.806 0.339 - 130.90 11.817 11.872 11.879 1.138 -0.396 -0.296 1.138 -0.396 0.117 -0.336 -0.451 0.770 0.287 - 130.95 11.448 11.508 11.528 1.173 -0.668 -0.665 1.173 -0.668 0.444 -0.780 -0.784 1.132 0.596 - 131.00 11.265 11.306 11.323 0.956 -0.619 -0.847 0.956 -0.619 0.524 -0.810 -0.591 1.007 0.566 - 131.05 11.377 11.424 11.431 1.027 -0.406 -0.735 1.027 -0.406 0.299 -0.755 -0.417 0.880 0.457 - 131.10 11.199 11.244 11.252 1.008 -0.439 -0.914 1.008 -0.439 0.401 -0.921 -0.442 1.022 0.549 - 131.15 11.267 11.310 11.317 0.983 -0.396 -0.846 0.983 -0.396 0.335 -0.831 -0.390 0.919 0.489 - 131.20 11.319 11.378 11.379 1.152 -0.196 -0.794 1.152 -0.196 0.156 -0.914 -0.226 0.998 0.477 - 131.25 11.487 11.539 11.539 1.093 -0.115 -0.626 1.093 -0.115 0.072 -0.684 -0.126 0.799 0.350 - 131.30 11.582 11.619 11.620 0.931 -0.158 -0.531 0.931 -0.158 0.084 -0.494 -0.148 0.587 0.261 - 131.35 11.777 11.819 11.819 0.993 -0.054 -0.336 0.993 -0.054 0.018 -0.334 -0.054 0.551 0.169 - 131.40 11.819 11.820 11.839 0.173 -0.678 -0.294 0.173 -0.678 0.199 -0.051 -0.117 0.288 0.118 - 131.45 11.804 11.805 11.816 0.172 -0.511 -0.309 0.172 -0.511 0.158 -0.053 -0.088 0.193 0.094 - 131.50 11.642 11.650 11.652 0.419 -0.195 -0.470 0.419 -0.195 0.092 -0.197 -0.082 0.217 0.116 - 131.55 11.547 11.555 11.569 0.424 -0.573 -0.565 0.424 -0.573 0.324 -0.240 -0.243 0.414 0.235 - 131.60 11.764 11.767 11.805 0.270 -0.952 -0.349 0.270 -0.952 0.332 -0.094 -0.257 0.550 0.215 - 131.65 11.532 11.538 11.559 0.381 -0.702 -0.581 0.381 -0.702 0.408 -0.221 -0.267 0.488 0.268 - 131.70 11.330 11.332 11.350 0.220 -0.630 -0.782 0.220 -0.630 0.493 -0.172 -0.139 0.529 0.270 - 131.75 11.047 11.047 11.078 0.112 -0.819 -1.066 0.112 -0.819 0.874 -0.119 -0.092 0.910 0.443 - 131.80 11.239 11.239 11.292 -0.041 -1.093 -0.874 -0.041 -1.093 0.955 0.036 0.045 0.980 0.478 - 131.85 11.212 11.212 11.277 0.013 -1.211 -0.901 0.013 -1.211 1.091 -0.012 -0.016 1.139 0.545 - 131.90 11.166 11.166 11.196 -0.025 -0.813 -0.946 -0.025 -0.813 0.769 0.024 0.021 0.779 0.385 - 131.95 11.154 11.154 11.177 -0.052 -0.712 -0.959 -0.052 -0.712 0.683 0.050 0.037 0.714 0.343 - 132.00 11.093 11.093 11.108 -0.048 -0.563 -1.019 -0.048 -0.563 0.574 0.049 0.027 0.679 0.288 - 132.05 10.909 10.913 10.929 -0.283 -0.592 -1.204 -0.283 -0.592 0.712 0.340 0.167 0.940 0.403 - 132.10 10.783 10.784 10.796 0.177 -0.506 -1.330 0.177 -0.506 0.673 -0.235 -0.089 1.028 0.359 - 132.15 10.796 10.800 10.815 -0.262 -0.580 -1.316 -0.262 -0.580 0.764 0.345 0.152 1.069 0.426 - 132.20 10.600 10.600 10.603 0.005 -0.259 -1.513 0.005 -0.259 0.391 -0.008 -0.001 1.178 0.196 - 132.25 10.744 10.745 10.749 0.171 -0.273 -1.369 0.171 -0.273 0.374 -0.233 -0.047 0.989 0.221 - 132.30 10.975 10.976 10.978 0.096 -0.247 -1.138 0.096 -0.247 0.281 -0.109 -0.024 0.682 0.151 - 132.35 10.947 10.955 10.955 0.404 0.079 -1.166 0.404 0.079 -0.092 -0.471 0.032 0.764 0.240 - 132.40 10.786 10.795 10.803 0.428 0.425 -1.327 0.428 0.425 -0.564 -0.567 0.182 1.062 0.410 - 132.45 10.769 10.774 10.779 0.330 0.310 -1.344 0.330 0.310 -0.416 -0.444 0.102 1.005 0.309 - 132.50 10.535 10.540 10.551 0.331 0.475 -1.578 0.331 0.475 -0.749 -0.521 0.157 1.412 0.463 - 132.55 10.405 10.421 10.427 0.592 0.340 -1.708 0.592 0.340 -0.580 -1.011 0.201 1.692 0.591 - 132.60 10.629 10.650 10.651 0.673 0.131 -1.484 0.673 0.131 -0.195 -0.999 0.088 1.336 0.511 - 132.65 10.503 10.528 10.528 0.721 -0.024 -1.610 0.721 -0.024 0.038 -1.161 -0.017 1.556 0.581 - 132.70 10.339 10.362 10.362 0.683 0.001 -1.773 0.683 0.001 -0.001 -1.211 0.000 1.806 0.606 - 132.75 10.621 10.647 10.647 0.748 -0.105 -1.492 0.748 -0.105 0.157 -1.116 -0.079 1.399 0.565 - 132.80 10.601 10.649 10.650 1.011 -0.149 -1.512 1.011 -0.149 0.225 -1.528 -0.150 1.665 0.776 - 132.85 10.365 10.433 10.433 1.188 0.072 -1.747 1.188 0.072 -0.126 -2.075 0.085 2.235 1.040 - 132.90 10.234 10.271 10.283 0.863 0.499 -1.878 0.863 0.499 -0.937 -1.620 0.430 2.261 0.960 - 132.95 10.423 10.478 10.482 1.070 0.301 -1.690 1.070 0.301 -0.509 -1.807 0.322 2.045 0.953 - 133.00 10.410 10.446 10.451 0.863 0.320 -1.703 0.863 0.320 -0.544 -1.470 0.276 1.873 0.796 - 133.05 10.209 10.227 10.229 0.607 0.224 -1.904 0.607 0.224 -0.427 -1.155 0.136 2.022 0.620 - 133.10 10.381 10.399 10.400 0.607 -0.101 -1.731 0.607 -0.101 0.176 -1.051 -0.062 1.688 0.534 - 133.15 10.684 10.690 10.694 0.357 -0.279 -1.428 0.357 -0.279 0.398 -0.510 -0.100 1.123 0.327 - 133.20 10.496 10.499 10.505 0.231 -0.372 -1.617 0.231 -0.372 0.601 -0.374 -0.086 1.403 0.357 - 133.25 10.274 10.281 10.287 0.370 -0.354 -1.839 0.370 -0.354 0.651 -0.681 -0.131 1.822 0.476 - 133.30 10.420 10.421 10.434 0.139 -0.522 -1.693 0.139 -0.522 0.883 -0.235 -0.072 1.578 0.458 - 133.35 10.401 10.404 10.417 0.271 -0.511 -1.712 0.271 -0.511 0.875 -0.463 -0.138 1.633 0.500 - 133.40 10.676 10.682 10.693 0.348 -0.479 -1.436 0.348 -0.479 0.689 -0.500 -0.167 1.207 0.433 - 133.45 10.548 10.548 10.564 0.038 -0.576 -1.565 0.038 -0.576 0.902 -0.059 -0.022 1.391 0.452 - 133.50 10.518 10.518 10.533 -0.046 -0.563 -1.595 -0.046 -0.563 0.898 0.074 0.026 1.432 0.450 - 133.55 10.536 10.536 10.558 -0.102 -0.677 -1.577 -0.102 -0.677 1.067 0.161 0.069 1.478 0.541 - 133.60 10.681 10.681 10.694 -0.044 -0.525 -1.431 -0.044 -0.525 0.752 0.063 0.023 1.163 0.377 - 133.65 10.402 10.403 10.406 0.143 -0.281 -1.711 0.143 -0.281 0.481 -0.245 -0.040 1.514 0.271 - 133.70 10.425 10.426 10.431 0.148 -0.318 -1.688 0.148 -0.318 0.536 -0.250 -0.047 1.486 0.297 - 133.75 10.251 10.253 10.257 -0.189 -0.301 -1.862 -0.189 -0.301 0.561 0.352 0.057 1.796 0.332 - 133.80 9.975 9.976 9.976 -0.154 -0.016 -2.138 -0.154 -0.016 0.034 0.329 0.002 2.296 0.165 - 133.85 9.976 9.980 9.980 0.272 0.108 -2.137 0.272 0.108 -0.231 -0.581 0.029 2.326 0.313 - 133.90 10.131 10.142 10.144 0.480 -0.202 -1.982 0.480 -0.202 0.401 -0.951 -0.097 2.099 0.518 - 133.95 10.282 10.287 10.291 0.346 0.271 -1.831 0.346 0.271 -0.496 -0.634 0.094 1.773 0.405 - 134.00 10.309 10.309 10.329 0.060 0.639 -1.804 0.060 0.639 -1.153 -0.108 0.038 1.833 0.579 - 134.05 10.496 10.502 10.509 0.370 0.379 -1.617 0.370 0.379 -0.613 -0.598 0.140 1.448 0.434 - 134.10 10.644 10.648 10.653 0.279 0.339 -1.468 0.279 0.339 -0.497 -0.410 0.095 1.174 0.326 - 134.15 10.557 10.557 10.568 0.022 0.493 -1.556 0.022 0.493 -0.767 -0.034 0.011 1.332 0.384 - 134.20 10.585 10.586 10.589 0.133 0.246 -1.528 0.133 0.246 -0.377 -0.203 0.033 1.206 0.215 - 134.25 10.852 10.857 10.859 0.310 -0.228 -1.261 0.310 -0.228 0.288 -0.391 -0.071 0.869 0.245 - 134.30 11.267 11.274 11.277 0.420 -0.225 -0.846 0.420 -0.225 0.190 -0.355 -0.094 0.472 0.207 - 134.35 11.364 11.368 11.373 0.311 -0.352 -0.749 0.311 -0.352 0.264 -0.233 -0.109 0.391 0.184 - 134.40 11.066 11.079 11.081 0.535 -0.206 -1.047 0.535 -0.206 0.216 -0.560 -0.110 0.713 0.305 - 134.45 11.238 11.270 11.280 0.850 -0.483 -0.875 0.850 -0.483 0.423 -0.744 -0.411 0.861 0.475 - 134.50 11.166 11.176 11.185 0.482 -0.428 -0.947 0.482 -0.428 0.405 -0.456 -0.206 0.656 0.322 - 134.55 11.043 11.066 11.068 0.721 -0.205 -1.070 0.721 -0.205 0.219 -0.771 -0.148 0.853 0.408 - 134.60 10.758 10.767 10.768 0.428 -0.172 -1.355 0.428 -0.172 0.233 -0.579 -0.074 1.024 0.314 - 134.65 10.829 10.831 10.833 0.194 -0.225 -1.284 0.194 -0.225 0.289 -0.249 -0.044 0.868 0.192 - 134.70 10.827 10.829 10.829 0.169 -0.020 -1.286 0.169 -0.020 0.026 -0.218 -0.003 0.841 0.110 - 134.75 10.874 10.878 10.886 0.268 0.417 -1.238 0.268 0.417 -0.516 -0.332 0.112 0.890 0.312 - 134.80 10.899 10.903 10.903 0.287 0.043 -1.214 0.287 0.043 -0.053 -0.349 0.012 0.779 0.176 - 134.85 11.079 11.081 11.081 0.159 0.096 -1.033 0.159 0.096 -0.099 -0.165 0.015 0.551 0.096 - 134.90 10.918 10.922 10.922 -0.291 -0.034 -1.194 -0.291 -0.034 0.040 0.347 0.010 0.756 0.175 - 134.95 10.999 11.005 11.005 0.354 -0.072 -1.114 0.354 -0.072 0.080 -0.395 -0.025 0.686 0.202 - 135.00 10.862 10.862 10.864 0.096 -0.232 -1.251 0.096 -0.232 0.290 -0.120 -0.022 0.814 0.157 - 135.05 10.492 10.492 10.492 -0.045 -0.046 -1.621 -0.045 -0.046 0.075 0.073 0.002 1.316 0.052 - 135.10 10.196 10.197 10.200 -0.180 0.230 -1.917 -0.180 0.230 -0.441 0.346 -0.042 1.880 0.281 - 135.15 10.588 10.601 10.603 -0.532 0.178 -1.525 -0.532 0.178 -0.271 0.811 -0.094 1.319 0.430 - 135.20 10.907 10.914 10.916 -0.409 0.180 -1.206 -0.409 0.180 -0.217 0.494 -0.074 0.827 0.272 - 135.25 10.704 10.710 10.719 -0.365 0.427 -1.409 -0.365 0.427 -0.602 0.515 -0.156 1.150 0.404 - 135.30 10.506 10.516 10.551 -0.473 0.859 -1.607 -0.473 0.859 -1.380 0.761 -0.406 1.772 0.814 - 135.35 10.560 10.569 10.597 -0.423 0.778 -1.553 -0.423 0.778 -1.209 0.657 -0.329 1.598 0.707 - 135.40 10.699 10.705 10.730 -0.360 0.723 -1.414 -0.360 0.723 -1.022 0.509 -0.260 1.325 0.585 - 135.45 10.578 10.581 10.632 -0.231 1.039 -1.535 -0.231 1.039 -1.594 0.355 -0.240 1.744 0.825 - 135.50 10.674 10.678 10.725 -0.265 1.008 -1.438 -0.265 1.008 -1.450 0.381 -0.267 1.578 0.761 - 135.55 10.542 10.548 10.568 -0.353 0.638 -1.570 -0.353 0.638 -1.001 0.555 -0.225 1.499 0.583 - 135.60 10.737 10.739 10.752 -0.216 0.520 -1.376 -0.216 0.520 -0.716 0.298 -0.113 1.105 0.392 - 135.65 10.804 10.806 10.820 0.195 0.554 -1.309 0.195 0.554 -0.725 -0.255 0.108 1.029 0.388 - 135.70 11.065 11.066 11.081 0.154 0.569 -1.048 0.154 0.569 -0.596 -0.162 0.088 0.723 0.312 - 135.75 11.286 11.292 11.310 0.387 0.627 -0.827 0.387 0.627 -0.519 -0.320 0.243 0.614 0.328 - 135.80 11.147 11.152 11.172 0.358 0.668 -0.966 0.358 0.668 -0.646 -0.346 0.240 0.754 0.385 - 135.85 11.256 11.267 11.290 0.500 0.714 -0.857 0.500 0.714 -0.612 -0.429 0.357 0.747 0.414 - 135.90 11.514 11.531 11.554 0.622 0.725 -0.598 0.622 0.725 -0.434 -0.372 0.451 0.635 0.364 - 135.95 11.255 11.264 11.296 0.442 0.851 -0.858 0.442 0.851 -0.730 -0.379 0.376 0.828 0.452 - 136.00 11.278 11.288 11.325 0.470 0.923 -0.835 0.470 0.923 -0.770 -0.393 0.434 0.885 0.484 - 136.05 10.885 10.894 10.906 0.441 0.498 -1.228 0.441 0.498 -0.611 -0.541 0.219 0.974 0.423 - 136.10 10.709 10.713 10.723 0.304 0.452 -1.404 0.304 0.452 -0.635 -0.427 0.138 1.134 0.389 - 136.15 10.589 10.589 10.590 0.082 0.171 -1.524 0.082 0.171 -0.260 -0.125 0.014 1.180 0.145 - 136.20 10.461 10.462 10.464 -0.126 0.214 -1.652 -0.126 0.214 -0.354 0.207 -0.027 1.395 0.206 - 136.25 10.434 10.434 10.435 -0.022 0.125 -1.679 -0.022 0.125 -0.211 0.036 -0.003 1.417 0.107 - 136.30 10.432 10.432 10.433 0.043 0.137 -1.681 0.043 0.137 -0.231 -0.073 0.006 1.423 0.121 - 136.35 10.708 10.708 10.708 -0.001 0.100 -1.405 -0.001 0.100 -0.141 0.002 -0.000 0.992 0.070 - 136.40 10.772 10.775 10.784 0.247 0.439 -1.341 0.247 0.439 -0.589 -0.332 0.109 1.026 0.342 - 136.45 10.752 10.761 10.772 0.426 0.479 -1.360 0.426 0.479 -0.652 -0.580 0.204 1.131 0.448 - 136.50 10.889 10.890 10.909 -0.077 0.652 -1.223 -0.077 0.652 -0.798 0.094 -0.050 0.964 0.403 - 136.55 10.993 10.995 11.004 -0.186 0.459 -1.120 -0.186 0.459 -0.514 0.208 -0.085 0.749 0.280 - 136.60 10.588 10.592 10.605 -0.295 0.533 -1.525 -0.295 0.533 -0.812 0.450 -0.157 1.348 0.471 - 136.65 10.755 10.758 10.775 -0.280 0.599 -1.358 -0.280 0.599 -0.813 0.380 -0.167 1.141 0.457 - 136.70 10.770 10.775 10.799 -0.310 0.729 -1.343 -0.310 0.729 -0.979 0.417 -0.226 1.215 0.544 - 136.75 10.896 10.897 10.906 -0.194 0.443 -1.217 -0.194 0.443 -0.539 0.237 -0.086 0.858 0.297 - 136.80 10.956 10.962 10.968 -0.354 0.370 -1.156 -0.354 0.370 -0.428 0.410 -0.131 0.800 0.303 - 136.85 10.717 10.718 10.723 0.102 0.324 -1.396 0.102 0.324 -0.453 -0.142 0.033 1.032 0.238 - 136.90 10.642 10.643 10.645 -0.184 0.177 -1.471 -0.184 0.177 -0.260 0.270 -0.033 1.115 0.188 - 136.95 10.387 10.387 10.387 0.004 0.096 -1.726 0.004 0.096 -0.165 -0.008 0.000 1.494 0.083 - 137.00 10.720 10.720 10.720 0.080 0.024 -1.393 0.080 0.024 -0.033 -0.111 0.002 0.974 0.058 - 137.05 10.615 10.616 10.622 0.162 0.357 -1.498 0.162 0.357 -0.534 -0.243 0.058 1.199 0.295 - 137.10 10.580 10.581 10.581 -0.133 0.056 -1.533 -0.133 0.056 -0.085 0.203 -0.007 1.185 0.110 - 137.15 10.671 10.674 10.676 0.252 0.181 -1.441 0.252 0.181 -0.260 -0.363 0.045 1.087 0.225 - 137.20 10.270 10.270 10.295 0.069 0.707 -1.843 0.069 0.707 -1.303 -0.128 0.049 1.950 0.655 - 137.25 10.417 10.417 10.433 -0.104 0.574 -1.696 -0.104 0.574 -0.973 0.176 -0.060 1.608 0.495 - 137.30 10.724 10.724 10.733 0.101 0.436 -1.389 0.101 0.436 -0.606 -0.141 0.044 1.065 0.312 - 137.35 10.365 10.368 10.370 0.235 0.199 -1.748 0.235 0.199 -0.348 -0.411 0.047 1.575 0.270 - 137.40 10.388 10.388 10.389 0.083 0.115 -1.725 0.083 0.115 -0.198 -0.143 0.010 1.498 0.122 - 137.45 10.524 10.524 10.524 -0.021 -0.022 -1.589 -0.021 -0.022 0.035 0.033 0.000 1.262 0.024 - 137.50 10.459 10.460 10.466 -0.162 0.329 -1.654 -0.162 0.329 -0.543 0.268 -0.053 1.434 0.304 - 137.55 10.316 10.316 10.322 -0.005 0.357 -1.797 -0.005 0.357 -0.641 0.009 -0.002 1.679 0.321 - 137.60 10.381 10.382 10.385 -0.161 0.226 -1.732 -0.161 0.226 -0.391 0.278 -0.036 1.538 0.240 - 137.65 10.759 10.759 10.790 -0.007 0.820 -1.354 -0.007 0.820 -1.110 0.010 -0.006 1.252 0.555 - 137.70 11.005 11.006 11.033 0.141 0.774 -1.107 0.141 0.774 -0.857 -0.156 0.109 0.923 0.439 - 137.75 10.640 10.640 10.675 0.027 0.863 -1.473 0.027 0.863 -1.272 -0.039 0.023 1.458 0.636 - 137.80 10.675 10.675 10.735 0.039 1.132 -1.438 0.039 1.132 -1.628 -0.056 0.044 1.675 0.815 - 137.85 10.646 10.646 10.692 -0.004 0.993 -1.467 -0.004 0.993 -1.457 0.007 -0.004 1.569 0.728 - 137.90 10.709 10.709 10.765 0.033 1.091 -1.403 0.033 1.091 -1.532 -0.046 0.036 1.581 0.766 - 137.95 10.639 10.644 10.701 0.336 1.102 -1.474 0.336 1.102 -1.624 -0.495 0.370 1.750 0.869 - 138.00 10.483 10.490 10.553 0.382 1.156 -1.630 0.382 1.156 -1.884 -0.623 0.442 2.070 1.016 - 138.05 10.456 10.463 10.542 0.375 1.284 -1.656 0.375 1.284 -2.127 -0.622 0.482 2.267 1.134 - 138.10 10.635 10.647 10.707 0.498 1.136 -1.477 0.498 1.136 -1.679 -0.735 0.566 1.861 0.959 - 138.15 10.586 10.586 10.663 0.054 1.274 -1.527 0.054 1.274 -1.944 -0.082 0.068 1.978 0.974 - 138.20 10.980 10.980 11.018 0.062 0.910 -1.133 0.062 0.910 -1.030 -0.071 0.057 1.057 0.517 - 138.25 10.683 10.683 10.725 0.014 0.949 -1.430 0.014 0.949 -1.357 -0.020 0.013 1.473 0.679 - 138.30 10.631 10.631 10.654 0.019 0.701 -1.482 0.019 0.701 -1.038 -0.029 0.014 1.343 0.519 - 138.35 10.769 10.772 10.811 0.243 0.914 -1.344 0.243 0.914 -1.228 -0.326 0.222 1.350 0.645 - 138.40 10.734 10.734 10.781 0.119 1.004 -1.379 0.119 1.004 -1.384 -0.164 0.120 1.462 0.699 - 138.45 10.447 10.453 10.568 -0.360 1.553 -1.666 -0.360 1.553 -2.587 0.600 -0.559 2.659 1.357 - 138.50 10.614 10.616 10.742 -0.232 1.637 -1.499 -0.232 1.637 -2.453 0.348 -0.380 2.489 1.253 - 138.55 10.952 10.958 11.099 -0.369 1.762 -1.161 -0.369 1.762 -2.045 0.429 -0.651 2.295 1.094 - 138.60 10.970 10.973 11.108 -0.233 1.730 -1.142 -0.233 1.730 -1.976 0.266 -0.403 2.176 1.017 - 138.65 11.003 11.013 11.110 -0.455 1.465 -1.110 -0.455 1.465 -1.625 0.505 -0.666 1.792 0.914 - 138.70 10.909 10.922 10.968 -0.528 0.997 -1.203 -0.528 0.997 -1.200 0.635 -0.526 1.360 0.728 - 138.75 11.119 11.126 11.165 -0.407 0.931 -0.994 -0.407 0.931 -0.926 0.404 -0.379 1.010 0.539 - 138.80 11.384 11.385 11.430 -0.193 1.016 -0.729 -0.193 1.016 -0.741 0.141 -0.196 0.801 0.390 - 138.85 11.067 11.068 11.137 0.053 1.245 -1.045 0.053 1.245 -1.301 -0.055 0.065 1.322 0.652 - 138.90 11.010 11.011 11.056 0.144 0.996 -1.103 0.144 0.996 -1.099 -0.159 0.144 1.115 0.560 - 138.95 11.063 11.067 11.104 -0.293 0.912 -1.050 -0.293 0.912 -0.958 0.307 -0.267 1.010 0.520 - 139.00 11.151 11.151 11.180 -0.083 0.798 -0.962 -0.083 0.798 -0.768 0.080 -0.066 0.785 0.387 - 139.05 11.091 11.096 11.117 -0.316 0.695 -1.022 -0.316 0.695 -0.710 0.322 -0.219 0.813 0.405 - 139.10 11.156 11.181 11.204 -0.746 0.717 -0.957 -0.746 0.717 -0.686 0.714 -0.535 0.993 0.563 - 139.15 11.253 11.293 11.296 -0.957 0.263 -0.860 -0.957 0.263 -0.226 0.823 -0.252 0.862 0.445 - 139.20 10.842 10.886 10.887 -0.979 0.068 -1.271 -0.979 0.068 -0.087 1.244 -0.067 1.289 0.624 - 139.25 10.908 10.956 10.956 -1.030 0.008 -1.205 -1.030 0.008 -0.010 1.242 -0.009 1.257 0.621 - 139.30 11.100 11.162 11.166 -1.169 0.309 -1.012 -1.169 0.309 -0.313 1.183 -0.361 1.243 0.638 - 139.35 11.261 11.324 11.326 -1.192 0.223 -0.852 -1.192 0.223 -0.190 1.016 -0.266 1.099 0.534 - 139.40 11.369 11.432 11.432 -1.194 0.102 -0.744 -1.194 0.102 -0.076 0.888 -0.121 0.995 0.450 - 139.45 11.297 11.342 11.342 -1.004 0.088 -0.816 -1.004 0.088 -0.072 0.819 -0.088 0.841 0.413 - 139.50 11.613 11.630 11.631 -0.633 -0.095 -0.500 -0.633 -0.095 0.047 0.316 0.060 0.330 0.163 - 139.55 11.651 11.693 11.693 -0.997 0.042 -0.462 -0.997 0.042 -0.020 0.460 -0.042 0.604 0.231 - 139.60 11.378 11.417 11.421 -0.940 0.308 -0.734 -0.940 0.308 -0.226 0.690 -0.289 0.759 0.391 - 139.65 11.323 11.360 11.362 -0.924 0.202 -0.790 -0.924 0.202 -0.160 0.730 -0.187 0.759 0.385 - 139.70 11.370 11.446 11.452 -1.320 0.371 -0.743 -1.320 0.371 -0.276 0.981 -0.490 1.216 0.565 - 139.75 11.349 11.495 11.496 -1.829 0.135 -0.764 -1.829 0.135 -0.103 1.397 -0.247 1.974 0.711 - 139.80 11.260 11.408 11.413 -1.833 -0.319 -0.853 -1.833 -0.319 0.272 1.563 0.585 2.095 0.846 - 139.85 11.156 11.278 11.300 -1.652 -0.698 -0.956 -1.652 -0.698 0.668 1.580 1.153 2.066 1.034 - 139.90 11.375 11.488 11.547 -1.607 -1.167 -0.738 -1.607 -1.167 0.861 1.185 1.875 2.244 1.190 - 139.95 11.352 11.444 11.512 -1.444 -1.247 -0.760 -1.444 -1.247 0.949 1.098 1.802 2.110 1.157 - 140.00 11.074 11.153 11.219 -1.328 -1.213 -1.039 -1.328 -1.213 1.260 1.379 1.611 2.157 1.233 - 140.05 11.159 11.236 11.301 -1.315 -1.203 -0.954 -1.315 -1.203 1.147 1.254 1.582 2.043 1.161 - 140.10 11.515 11.541 11.660 -0.771 -1.663 -0.598 -0.771 -1.663 0.994 0.461 1.282 1.858 0.843 - 140.15 11.233 11.251 11.332 -0.644 -1.352 -0.880 -0.644 -1.352 1.189 0.567 0.871 1.508 0.790 - 140.20 11.176 11.203 11.253 -0.778 -1.059 -0.937 -0.778 -1.059 0.992 0.729 0.824 1.302 0.741 - 140.25 10.817 10.839 10.901 -0.692 -1.160 -1.296 -0.692 -1.160 1.503 0.897 0.803 1.752 0.963 - 140.30 10.971 10.994 11.045 -0.709 -1.060 -1.142 -0.709 -1.060 1.211 0.810 0.752 1.465 0.820 - 140.35 10.873 10.902 10.946 -0.784 -0.984 -1.239 -0.784 -0.984 1.220 0.972 0.771 1.560 0.870 - 140.40 10.890 10.898 11.001 -0.426 -1.502 -1.223 -0.426 -1.502 1.838 0.521 0.640 1.967 1.007 - 140.45 10.792 10.802 10.941 -0.445 -1.739 -1.320 -0.445 -1.739 2.296 0.588 0.774 2.483 1.247 - 140.50 10.854 10.864 10.947 -0.471 -1.350 -1.259 -0.471 -1.350 1.700 0.593 0.636 1.815 0.955 - 140.55 10.587 10.605 10.681 -0.618 -1.274 -1.526 -0.618 -1.274 1.943 0.944 0.788 2.166 1.150 - 140.60 10.450 10.473 10.580 -0.686 -1.504 -1.662 -0.686 -1.504 2.500 1.141 1.032 2.748 1.468 - 140.65 10.467 10.491 10.624 -0.707 -1.674 -1.645 -0.707 -1.674 2.754 1.164 1.184 3.005 1.608 - 140.70 10.744 10.771 10.896 -0.756 -1.648 -1.369 -0.756 -1.648 2.256 1.035 1.247 2.581 1.389 - 140.75 11.127 11.160 11.307 -0.846 -1.819 -0.985 -0.846 -1.819 1.792 0.834 1.539 2.498 1.253 - 140.80 11.267 11.294 11.392 -0.777 -1.496 -0.846 -0.777 -1.496 1.265 0.657 1.161 1.778 0.919 - 140.85 11.232 11.262 11.349 -0.825 -1.407 -0.881 -0.825 -1.407 1.240 0.727 1.161 1.718 0.924 - 140.90 11.111 11.129 11.191 -0.629 -1.181 -1.002 -0.629 -1.181 1.183 0.630 0.743 1.397 0.766 - 140.95 11.327 11.349 11.413 -0.692 -1.210 -0.785 -0.692 -1.210 0.950 0.543 0.837 1.279 0.689 - 141.00 11.408 11.435 11.510 -0.795 -1.308 -0.705 -0.795 -1.308 0.922 0.561 1.040 1.420 0.749 - 141.05 11.131 11.158 11.214 -0.782 -1.121 -0.982 -0.782 -1.121 1.100 0.767 0.876 1.415 0.801 - 141.10 11.025 11.038 11.069 -0.535 -0.837 -1.088 -0.535 -0.837 0.911 0.582 0.448 1.085 0.585 - 141.15 10.931 10.933 10.943 -0.169 -0.482 -1.182 -0.169 -0.482 0.570 0.199 0.081 0.829 0.305 - 141.20 11.282 11.292 11.307 -0.485 -0.585 -0.831 -0.485 -0.585 0.486 0.403 0.284 0.634 0.346 - 141.25 11.439 11.447 11.460 -0.438 -0.541 -0.674 -0.438 -0.541 0.364 0.295 0.237 0.469 0.263 - 141.30 11.461 11.467 11.483 -0.375 -0.603 -0.652 -0.375 -0.603 0.393 0.245 0.226 0.465 0.258 - 141.35 11.413 11.434 11.459 -0.700 -0.746 -0.700 -0.700 -0.746 0.522 0.490 0.522 0.768 0.443 - 141.40 11.534 11.544 11.603 -0.495 -1.165 -0.579 -0.495 -1.165 0.675 0.287 0.577 0.969 0.466 - 141.45 11.876 11.880 11.956 -0.314 -1.350 -0.237 -0.314 -1.350 0.320 0.074 0.424 0.988 0.268 - 141.50 11.783 11.785 11.820 -0.214 -0.916 -0.330 -0.214 -0.916 0.302 0.071 0.196 0.497 0.184 - 141.55 11.380 11.382 11.397 -0.232 -0.570 -0.733 -0.232 -0.570 0.417 0.170 0.132 0.458 0.235 - 141.60 11.548 11.552 11.556 -0.304 -0.319 -0.565 -0.304 -0.319 0.180 0.172 0.097 0.257 0.134 - 141.65 11.695 11.696 11.711 -0.153 -0.591 -0.417 -0.153 -0.591 0.247 0.064 0.091 0.273 0.135 - 141.70 11.853 11.855 11.878 0.195 -0.741 -0.260 0.195 -0.741 0.193 -0.051 -0.144 0.327 0.123 - 141.75 11.608 11.608 11.648 0.054 -0.960 -0.505 0.054 -0.960 0.485 -0.027 -0.052 0.590 0.244 - 141.80 11.821 11.822 11.859 0.086 -0.936 -0.291 0.086 -0.936 0.273 -0.025 -0.080 0.485 0.143 - 141.85 12.004 12.006 12.028 0.233 -0.730 -0.109 0.233 -0.730 0.080 -0.025 -0.170 0.299 0.095 - 141.90 12.009 12.009 12.036 0.045 -0.803 -0.104 0.045 -0.803 0.083 -0.005 -0.036 0.329 0.045 - 141.95 12.078 12.078 12.108 -0.022 -0.846 -0.035 -0.022 -0.846 0.029 0.001 0.018 0.359 0.017 - 142.00 12.080 12.081 12.117 0.079 -0.936 -0.032 0.079 -0.936 0.030 -0.003 -0.074 0.441 0.040 - 142.05 11.632 11.633 11.675 0.112 -0.989 -0.481 0.112 -0.989 0.475 -0.054 -0.111 0.611 0.246 - 142.10 11.428 11.428 11.440 0.031 -0.524 -0.685 0.031 -0.524 0.359 -0.021 -0.016 0.372 0.180 - 142.15 11.584 11.585 11.594 0.104 -0.473 -0.529 0.104 -0.473 0.250 -0.055 -0.049 0.257 0.130 - 142.20 11.707 11.709 11.716 -0.230 -0.411 -0.406 -0.230 -0.411 0.167 0.093 0.095 0.193 0.107 - 142.25 11.629 11.631 11.632 -0.244 -0.120 -0.484 -0.244 -0.120 0.058 0.118 0.029 0.154 0.067 - 142.30 11.582 11.591 11.594 -0.477 -0.262 -0.531 -0.477 -0.262 0.139 0.254 0.125 0.289 0.158 - 142.35 11.229 11.249 11.249 -0.667 0.096 -0.884 -0.667 0.096 -0.085 0.590 -0.064 0.618 0.300 - 142.40 11.110 11.146 11.146 -0.899 -0.015 -1.003 -0.899 -0.015 0.015 0.902 0.013 0.908 0.451 - 142.45 10.885 10.920 10.920 -0.878 0.044 -1.228 -0.878 0.044 -0.054 1.079 -0.039 1.141 0.540 - 142.50 10.501 10.535 10.555 -0.854 0.645 -1.612 -0.854 0.645 -1.040 1.376 -0.551 1.872 0.905 - 142.55 10.428 10.451 10.460 -0.698 0.417 -1.685 -0.698 0.417 -0.703 1.175 -0.291 1.749 0.700 - 142.60 10.798 10.811 10.812 -0.527 0.149 -1.315 -0.527 0.149 -0.197 0.693 -0.079 1.014 0.362 - 142.65 10.806 10.850 10.850 -0.975 0.049 -1.307 -0.975 0.049 -0.063 1.274 -0.047 1.330 0.638 - 142.70 10.884 10.933 10.935 -1.032 -0.192 -1.229 -1.032 -0.192 0.236 1.267 0.198 1.305 0.652 - 142.75 10.562 10.614 10.614 -1.045 -0.004 -1.550 -1.045 -0.004 0.006 1.620 0.004 1.748 0.810 - 142.80 10.381 10.431 10.433 -1.021 0.200 -1.732 -1.021 0.200 -0.347 1.768 -0.205 2.041 0.907 - 142.85 10.427 10.440 10.444 -0.525 0.288 -1.686 -0.525 0.288 -0.486 0.884 -0.151 1.600 0.510 - 142.90 10.494 10.512 10.512 -0.614 -0.047 -1.618 -0.614 -0.047 0.077 0.994 0.029 1.500 0.499 - 142.95 10.717 10.750 10.751 -0.833 -0.151 -1.395 -0.833 -0.151 0.210 1.163 0.125 1.332 0.594 - 143.00 10.883 10.919 10.923 -0.883 0.294 -1.230 -0.883 0.294 -0.361 1.085 -0.259 1.189 0.586 - 143.05 10.921 10.950 10.966 -0.796 0.589 -1.192 -0.796 0.589 -0.701 0.948 -0.468 1.200 0.635 - 143.10 10.667 10.692 10.705 -0.725 0.538 -1.446 -0.725 0.538 -0.777 1.048 -0.390 1.452 0.681 - 143.15 10.361 10.433 10.451 -1.220 0.612 -1.751 -1.220 0.612 -1.073 2.137 -0.747 2.466 1.253 - 143.20 10.379 10.413 10.440 -0.833 0.760 -1.733 -0.833 0.760 -1.317 1.444 -0.633 2.138 1.027 - 143.25 10.436 10.448 10.463 -0.504 0.554 -1.677 -0.504 0.554 -0.929 0.846 -0.280 1.686 0.644 - 143.30 10.383 10.396 10.441 -0.521 0.968 -1.730 -0.521 0.968 -1.675 0.901 -0.504 2.100 0.984 - 143.35 10.550 10.554 10.598 -0.282 0.962 -1.563 -0.282 0.962 -1.504 0.440 -0.271 1.723 0.795 - 143.40 10.669 10.677 10.697 -0.433 0.653 -1.444 -0.433 0.653 -0.943 0.625 -0.283 1.350 0.583 - 143.45 10.551 10.552 10.578 -0.149 0.743 -1.562 -0.149 0.743 -1.160 0.233 -0.111 1.507 0.594 - 143.50 10.629 10.629 10.666 -0.024 0.894 -1.484 -0.024 0.894 -1.327 0.035 -0.021 1.501 0.664 - 143.55 10.614 10.614 10.646 -0.067 0.822 -1.499 -0.067 0.822 -1.232 0.100 -0.055 1.463 0.619 - 143.60 10.670 10.672 10.689 -0.219 0.604 -1.443 -0.219 0.604 -0.871 0.316 -0.132 1.248 0.468 - 143.65 10.594 10.595 10.607 -0.187 0.500 -1.519 -0.187 0.500 -0.760 0.283 -0.093 1.296 0.408 - 143.70 10.708 10.708 10.713 0.107 0.328 -1.405 0.107 0.328 -0.461 -0.150 0.035 1.046 0.243 - 143.75 10.918 10.918 10.924 -0.008 0.365 -1.195 -0.008 0.365 -0.436 0.010 -0.003 0.781 0.218 - 143.80 11.143 11.149 11.153 0.368 0.306 -0.970 0.368 0.306 -0.297 -0.356 0.112 0.585 0.239 - 143.85 11.210 11.212 11.213 0.199 0.168 -0.903 0.199 0.168 -0.151 -0.179 0.033 0.442 0.119 - 143.90 11.419 11.419 11.423 0.047 -0.328 -0.694 0.047 -0.328 0.228 -0.033 -0.015 0.296 0.115 - 143.95 11.159 11.162 11.164 0.254 -0.218 -0.953 0.254 -0.218 0.208 -0.242 -0.055 0.511 0.162 - 144.00 11.331 11.331 11.339 -0.078 -0.420 -0.782 -0.078 -0.420 0.328 0.061 0.033 0.397 0.168 - 144.05 11.204 11.206 11.207 -0.243 -0.169 -0.909 -0.243 -0.169 0.154 0.221 0.041 0.457 0.136 - 144.10 11.386 11.387 11.389 0.202 -0.207 -0.727 0.202 -0.207 0.151 -0.147 -0.042 0.306 0.107 - 144.15 11.738 11.740 11.740 -0.172 0.062 -0.375 -0.172 0.062 -0.023 0.064 -0.011 0.087 0.035 - 144.20 11.219 11.227 11.229 -0.412 0.205 -0.893 -0.412 0.205 -0.184 0.368 -0.085 0.505 0.210 - 144.25 11.012 11.012 11.030 -0.101 0.631 -1.101 -0.101 0.631 -0.695 0.111 -0.064 0.811 0.353 - 144.30 11.182 11.182 11.183 0.145 0.133 -0.931 0.145 0.133 -0.124 -0.135 0.019 0.453 0.092 - 144.35 11.282 11.292 11.292 0.470 -0.056 -0.831 0.470 -0.056 0.047 -0.390 -0.026 0.457 0.197 - 144.40 11.276 11.284 11.287 0.436 -0.259 -0.837 0.436 -0.259 0.217 -0.365 -0.113 0.479 0.219 - 144.45 11.288 11.304 11.305 0.592 -0.208 -0.825 0.592 -0.208 0.172 -0.489 -0.123 0.537 0.266 - 144.50 11.445 11.459 11.460 0.564 -0.143 -0.667 0.564 -0.143 0.095 -0.377 -0.080 0.392 0.198 - 144.55 11.162 11.176 11.176 0.555 -0.087 -0.951 0.555 -0.087 0.083 -0.528 -0.048 0.610 0.268 - 144.60 11.217 11.242 11.246 0.746 -0.278 -0.895 0.746 -0.278 0.249 -0.668 -0.208 0.718 0.371 - 144.65 10.959 10.977 10.980 0.636 -0.243 -1.154 0.636 -0.243 0.280 -0.734 -0.154 0.898 0.400 - 144.70 11.000 11.026 11.028 0.754 -0.234 -1.113 0.754 -0.234 0.260 -0.839 -0.176 0.931 0.448 - 144.75 11.144 11.158 11.159 0.566 -0.125 -0.969 0.566 -0.125 0.121 -0.549 -0.071 0.637 0.283 - 144.80 11.028 11.060 11.062 0.839 -0.190 -1.084 0.839 -0.190 0.206 -0.909 -0.159 0.958 0.473 - 144.85 11.009 11.021 11.022 0.505 0.178 -1.104 0.505 0.178 -0.196 -0.557 0.090 0.752 0.299 - 144.90 11.000 11.011 11.016 0.491 -0.324 -1.113 0.491 -0.324 0.360 -0.547 -0.159 0.792 0.337 - 144.95 10.950 10.957 10.961 0.393 -0.308 -1.163 0.393 -0.308 0.358 -0.457 -0.121 0.801 0.297 - 145.00 11.115 11.142 11.142 0.773 0.065 -0.997 0.773 0.065 -0.065 -0.771 0.050 0.798 0.388 - 145.05 11.000 11.007 11.010 0.383 0.272 -1.112 0.383 0.272 -0.303 -0.426 0.104 0.729 0.267 - 145.10 11.052 11.052 11.054 0.089 0.185 -1.061 0.089 0.185 -0.197 -0.094 0.016 0.584 0.109 - 145.15 11.231 11.232 11.252 -0.085 0.671 -0.881 -0.085 0.671 -0.592 0.075 -0.057 0.617 0.300 - 145.20 11.314 11.322 11.345 -0.440 0.718 -0.799 -0.440 0.718 -0.574 0.351 -0.315 0.673 0.371 - 145.25 11.340 11.340 11.352 -0.016 0.511 -0.772 -0.016 0.511 -0.395 0.012 -0.008 0.429 0.198 - 145.30 11.228 11.228 11.228 0.022 0.120 -0.885 0.022 0.120 -0.106 -0.020 0.003 0.399 0.054 - 145.35 11.271 11.272 11.275 0.159 0.236 -0.841 0.159 0.236 -0.198 -0.133 0.037 0.394 0.121 - 145.40 11.193 11.195 11.207 0.210 0.516 -0.920 0.210 0.516 -0.475 -0.193 0.108 0.578 0.262 - 145.45 11.208 11.209 11.220 -0.177 0.485 -0.905 -0.177 0.485 -0.439 0.160 -0.086 0.543 0.238 - 145.50 11.146 11.150 11.152 -0.296 0.177 -0.966 -0.296 0.177 -0.171 0.286 -0.053 0.527 0.169 - 145.55 11.199 11.199 11.199 -0.075 0.047 -0.914 -0.075 0.047 -0.043 0.069 -0.004 0.422 0.041 - 145.60 11.179 11.180 11.180 -0.169 0.080 -0.934 -0.169 0.080 -0.075 0.157 -0.014 0.454 0.087 - 145.65 11.215 11.215 11.217 0.053 0.226 -0.898 0.053 0.226 -0.203 -0.048 0.012 0.430 0.104 - 145.70 11.054 11.055 11.059 -0.121 0.312 -1.059 -0.121 0.312 -0.331 0.128 -0.038 0.617 0.178 - 145.75 11.012 11.016 11.024 -0.284 0.411 -1.100 -0.284 0.411 -0.452 0.312 -0.117 0.730 0.281 - 145.80 11.261 11.263 11.268 -0.246 0.322 -0.852 -0.246 0.322 -0.274 0.209 -0.079 0.445 0.177 - 145.85 11.239 11.240 11.247 -0.104 0.415 -0.874 -0.104 0.415 -0.362 0.091 -0.043 0.473 0.188 - 145.90 11.096 11.099 11.116 -0.239 0.623 -1.017 -0.239 0.623 -0.634 0.243 -0.149 0.740 0.347 - 145.95 11.180 11.187 11.191 -0.387 0.311 -0.932 -0.387 0.311 -0.290 0.361 -0.120 0.558 0.239 - 146.00 11.129 11.145 11.155 -0.596 0.467 -0.984 -0.596 0.467 -0.459 0.586 -0.278 0.770 0.397 - 146.05 10.689 10.721 10.731 -0.830 0.472 -1.424 -0.830 0.472 -0.672 1.183 -0.392 1.470 0.708 - 146.10 10.636 10.654 10.659 -0.621 0.347 -1.477 -0.621 0.347 -0.512 0.918 -0.216 1.344 0.537 - 146.15 10.784 10.793 10.801 -0.438 0.418 -1.329 -0.438 0.418 -0.555 0.582 -0.183 1.066 0.412 - 146.20 10.547 10.564 10.573 -0.587 0.447 -1.566 -0.587 0.447 -0.700 0.919 -0.263 1.498 0.593 - 146.25 10.560 10.571 10.587 -0.484 0.579 -1.553 -0.484 0.579 -0.899 0.751 -0.280 1.491 0.602 - 146.30 10.808 10.817 10.834 -0.449 0.601 -1.305 -0.449 0.601 -0.784 0.586 -0.270 1.133 0.508 - 146.35 10.982 11.009 11.022 -0.767 0.532 -1.131 -0.767 0.532 -0.602 0.868 -0.409 1.076 0.566 - 146.40 10.938 10.953 10.953 -0.580 0.081 -1.175 -0.580 0.081 -0.095 0.682 -0.047 0.862 0.345 - 146.45 10.922 10.929 10.930 -0.374 0.169 -1.191 -0.374 0.169 -0.201 0.445 -0.063 0.793 0.246 - 146.50 11.014 11.017 11.019 -0.250 0.222 -1.099 -0.250 0.222 -0.244 0.275 -0.055 0.659 0.186 - 146.55 11.270 11.275 11.277 -0.340 0.221 -0.843 -0.340 0.221 -0.186 0.287 -0.075 0.437 0.175 - 146.60 11.894 11.907 11.916 -0.567 0.451 -0.219 -0.567 0.451 -0.099 0.124 -0.256 0.287 0.151 - 146.65 11.731 11.735 11.742 -0.314 0.399 -0.382 -0.314 0.399 -0.152 0.120 -0.125 0.202 0.115 - 146.70 11.605 11.609 11.609 -0.324 0.099 -0.508 -0.324 0.099 -0.050 0.165 -0.032 0.186 0.087 - 146.75 11.678 11.684 11.684 -0.383 -0.027 -0.435 -0.383 -0.027 0.012 0.166 0.010 0.168 0.084 - 146.80 11.637 11.640 11.644 -0.243 0.311 -0.476 -0.243 0.311 -0.148 0.115 -0.076 0.191 0.101 - 146.85 11.709 11.709 11.711 0.090 0.168 -0.404 0.090 0.168 -0.068 -0.036 0.015 0.100 0.039 - 146.90 11.973 11.973 11.974 -0.017 -0.042 -0.139 -0.017 -0.042 0.006 0.002 0.001 0.011 0.003 - 146.95 12.087 12.088 12.089 0.133 0.106 -0.025 0.133 0.106 -0.003 -0.003 0.014 0.015 0.007 - 147.00 11.739 11.739 11.741 0.053 0.243 -0.374 0.053 0.243 -0.091 -0.020 0.013 0.101 0.047 - 147.05 11.571 11.573 11.574 0.238 0.170 -0.542 0.238 0.170 -0.092 -0.129 0.040 0.190 0.082 - 147.10 11.465 11.475 11.476 0.461 0.185 -0.647 0.461 0.185 -0.120 -0.298 0.085 0.333 0.166 - 147.15 11.826 11.826 11.826 0.037 -0.016 -0.287 0.037 -0.016 0.005 -0.011 -0.001 0.042 0.006 - 147.20 11.703 11.705 11.707 0.202 0.229 -0.410 0.202 0.229 -0.094 -0.083 0.046 0.131 0.067 - 147.25 11.972 11.974 11.974 0.182 0.027 -0.141 0.182 0.027 -0.004 -0.026 0.005 0.027 0.013 - 147.30 12.021 12.021 12.021 -0.044 -0.014 -0.092 -0.044 -0.014 0.001 0.004 0.001 0.005 0.002 - 147.35 11.975 11.979 11.979 0.313 -0.004 -0.138 0.313 -0.004 0.001 -0.043 -0.001 0.059 0.022 - 147.40 12.090 12.091 12.096 -0.124 0.343 -0.022 -0.124 0.343 -0.008 0.003 -0.043 0.067 0.022 - 147.45 11.929 11.929 11.958 -0.033 0.832 -0.184 -0.033 0.832 -0.153 0.006 -0.027 0.364 0.078 - 147.50 11.953 11.954 11.989 -0.098 0.914 -0.160 -0.098 0.914 -0.146 0.016 -0.089 0.435 0.086 - 147.55 12.124 12.127 12.156 -0.256 0.830 0.012 -0.256 0.830 0.010 -0.003 -0.212 0.377 0.106 - 147.60 11.979 11.983 12.012 -0.318 0.839 -0.134 -0.318 0.839 -0.113 0.043 -0.267 0.411 0.146 - 147.65 12.007 12.007 12.010 -0.010 0.275 -0.106 -0.010 0.275 -0.029 0.001 -0.003 0.043 0.015 - 147.70 11.858 11.862 11.865 0.298 0.258 -0.255 0.298 0.258 -0.066 -0.076 0.077 0.110 0.063 - 147.75 11.390 11.401 11.404 0.495 0.249 -0.722 0.495 0.249 -0.180 -0.358 0.123 0.415 0.210 - 147.80 11.354 11.369 11.374 0.600 0.324 -0.759 0.600 0.324 -0.246 -0.456 0.195 0.521 0.277 - 147.85 11.302 11.324 11.334 0.706 0.469 -0.811 0.706 0.469 -0.380 -0.572 0.331 0.688 0.381 - 147.90 11.461 11.463 11.464 0.232 0.074 -0.652 0.232 0.074 -0.048 -0.151 0.017 0.242 0.080 - 147.95 11.387 11.391 11.395 0.275 0.292 -0.725 0.275 0.292 -0.212 -0.200 0.081 0.344 0.151 - 148.00 11.129 11.132 11.135 0.238 0.259 -0.983 0.238 0.259 -0.255 -0.234 0.062 0.545 0.176 - 148.05 11.387 11.390 11.390 0.260 -0.091 -0.726 0.260 -0.091 0.066 -0.189 -0.024 0.301 0.101 - 148.10 11.330 11.334 11.334 0.314 0.017 -0.783 0.314 0.017 -0.013 -0.246 0.005 0.356 0.123 - 148.15 11.393 11.394 11.394 0.108 0.045 -0.719 0.108 0.045 -0.032 -0.078 0.005 0.266 0.042 - 148.20 11.454 11.454 11.456 0.027 0.220 -0.659 0.027 0.220 -0.145 -0.018 0.006 0.242 0.073 - 148.25 11.253 11.253 11.254 0.126 0.113 -0.860 0.126 0.113 -0.097 -0.108 0.014 0.384 0.073 - 148.30 11.298 11.299 11.299 -0.123 -0.026 -0.815 -0.123 -0.026 0.021 0.100 0.003 0.340 0.051 - 148.35 11.364 11.364 11.370 -0.084 -0.365 -0.749 -0.084 -0.365 0.273 0.063 0.031 0.351 0.141 - 148.40 11.309 11.310 11.328 0.163 -0.639 -0.804 0.163 -0.639 0.514 -0.131 -0.104 0.541 0.270 - 148.45 11.058 11.058 11.075 0.054 -0.620 -1.055 0.054 -0.620 0.654 -0.057 -0.034 0.750 0.329 - 148.50 11.376 11.376 11.387 0.064 -0.497 -0.737 0.064 -0.497 0.366 -0.047 -0.032 0.397 0.185 - 148.55 11.509 11.509 11.514 0.013 -0.324 -0.604 0.013 -0.324 0.196 -0.008 -0.004 0.235 0.098 - 148.60 11.346 11.349 11.352 -0.237 -0.286 -0.767 -0.237 -0.286 0.219 0.182 0.068 0.363 0.146 - 148.65 11.236 11.238 11.246 -0.224 -0.422 -0.877 -0.224 -0.422 0.370 0.196 0.094 0.498 0.215 - 148.70 11.202 11.204 11.215 0.181 -0.513 -0.911 0.181 -0.513 0.467 -0.165 -0.093 0.563 0.252 - 148.75 10.983 10.983 10.997 0.008 -0.554 -1.129 0.008 -0.554 0.625 -0.009 -0.005 0.791 0.313 - 148.80 11.052 11.054 11.078 -0.202 -0.719 -1.060 -0.202 -0.719 0.763 0.214 0.145 0.841 0.403 - 148.85 11.188 11.212 11.248 -0.731 -0.896 -0.925 -0.731 -0.896 0.829 0.676 0.655 1.096 0.627 - 148.90 11.496 11.512 11.543 -0.613 -0.836 -0.617 -0.613 -0.836 0.516 0.378 0.513 0.728 0.410 - 148.95 11.455 11.475 11.501 -0.686 -0.775 -0.658 -0.686 -0.775 0.510 0.452 0.532 0.752 0.432 - 149.00 11.631 11.668 11.685 -0.928 -0.644 -0.482 -0.928 -0.644 0.311 0.447 0.597 0.754 0.404 - 149.05 11.677 11.719 11.734 -0.988 -0.602 -0.436 -0.988 -0.602 0.262 0.430 0.595 0.764 0.390 - 149.10 11.672 11.713 11.723 -0.974 -0.486 -0.440 -0.974 -0.486 0.214 0.429 0.473 0.689 0.337 - 149.15 11.664 11.715 11.716 -1.094 -0.107 -0.449 -1.094 -0.107 0.048 0.491 0.118 0.705 0.254 - 149.20 11.775 11.864 11.864 -1.457 0.011 -0.338 -1.457 0.011 -0.004 0.493 -0.016 1.119 0.246 - 149.25 11.714 11.860 11.863 -1.853 -0.260 -0.399 -1.853 -0.260 0.104 0.739 0.482 1.830 0.444 - 149.30 11.294 11.415 11.421 -1.662 -0.341 -0.819 -1.662 -0.341 0.280 1.362 0.567 1.775 0.751 - 149.35 11.467 11.569 11.588 -1.536 -0.663 -0.646 -1.536 -0.663 0.428 0.992 1.019 1.609 0.743 - 149.40 11.513 11.680 11.690 -1.969 -0.476 -0.600 -1.969 -0.476 0.286 1.181 0.938 2.231 0.767 - 149.45 11.465 11.589 11.621 -1.691 -0.857 -0.648 -1.691 -0.857 0.556 1.096 1.450 2.007 0.950 - 149.50 11.508 11.645 11.660 -1.785 -0.577 -0.605 -1.785 -0.577 0.349 1.080 1.029 1.942 0.766 - 149.55 11.593 11.641 11.642 -1.059 -0.133 -0.520 -1.059 -0.133 0.069 0.551 0.141 0.704 0.286 - 149.60 11.589 11.641 11.643 -1.105 -0.179 -0.524 -1.105 -0.179 0.094 0.579 0.198 0.764 0.309 - 149.65 11.547 11.620 11.622 -1.297 -0.230 -0.565 -1.297 -0.230 0.130 0.733 0.298 1.028 0.401 - 149.70 11.505 11.587 11.589 -1.384 0.176 -0.608 -1.384 0.176 -0.107 0.842 -0.244 1.158 0.441 - 149.75 11.702 11.761 11.761 -1.180 0.068 -0.411 -1.180 0.068 -0.028 0.485 -0.080 0.783 0.246 - 149.80 11.552 11.656 11.656 -1.550 0.004 -0.561 -1.550 0.004 -0.002 0.869 -0.005 1.358 0.435 - 149.85 11.358 11.443 11.443 -1.398 0.017 -0.755 -1.398 0.017 -0.013 1.055 -0.023 1.262 0.528 - 149.90 11.280 11.353 11.362 -1.289 0.443 -0.833 -1.289 0.443 -0.369 1.074 -0.570 1.275 0.635 - 149.95 11.308 11.401 11.401 -1.447 0.053 -0.804 -1.447 0.053 -0.043 1.164 -0.077 1.371 0.584 - 150.00 10.894 10.972 10.984 -1.305 0.508 -1.219 -1.305 0.508 -0.620 1.591 -0.664 1.724 0.916 - 150.05 10.895 10.934 10.971 -0.926 0.899 -1.218 -0.926 0.899 -1.095 1.127 -0.832 1.574 0.889 - 150.10 10.621 10.688 10.732 -1.199 0.967 -1.492 -1.199 0.967 -1.443 1.789 -1.159 2.300 1.287 - 150.15 10.926 11.057 11.106 -1.696 1.045 -1.187 -1.696 1.045 -1.241 2.013 -1.773 2.689 1.478 - 150.20 10.987 11.106 11.138 -1.618 0.845 -1.125 -1.618 0.845 -0.951 1.821 -1.367 2.299 1.234 - 150.25 11.146 11.278 11.318 -1.719 0.946 -0.967 -1.719 0.946 -0.915 1.661 -1.626 2.392 1.249 - 150.30 11.077 11.217 11.257 -1.767 0.942 -1.036 -1.767 0.942 -0.975 1.829 -1.664 2.540 1.329 - 150.35 11.341 11.478 11.496 -1.771 0.637 -0.772 -1.771 0.637 -0.492 1.367 -1.129 2.070 0.920 - 150.40 11.108 11.246 11.276 -1.759 0.825 -1.005 -1.759 0.825 -0.829 1.768 -1.451 2.393 1.216 - 150.45 11.371 11.456 11.466 -1.392 0.469 -0.742 -1.392 0.469 -0.348 1.032 -0.653 1.354 0.635 - 150.50 11.604 11.683 11.691 -1.362 0.419 -0.509 -1.362 0.419 -0.213 0.693 -0.570 1.144 0.461 - 150.55 11.750 11.816 11.824 -1.248 0.423 -0.363 -1.248 0.423 -0.153 0.452 -0.528 0.934 0.356 - 150.60 11.758 11.801 11.819 -1.014 0.638 -0.355 -1.014 0.638 -0.227 0.360 -0.647 0.780 0.387 - 150.65 11.976 11.990 12.002 -0.589 0.533 -0.137 -0.589 0.533 -0.073 0.081 -0.314 0.325 0.166 - 150.70 11.839 11.867 11.872 -0.815 0.353 -0.274 -0.815 0.353 -0.097 0.223 -0.288 0.432 0.189 - 150.75 11.585 11.614 11.625 -0.821 0.515 -0.528 -0.821 0.515 -0.272 0.434 -0.423 0.609 0.332 - 150.80 11.416 11.451 11.461 -0.896 0.487 -0.697 -0.896 0.487 -0.339 0.624 -0.436 0.763 0.417 - 150.85 11.425 11.475 11.488 -1.064 0.550 -0.688 -1.064 0.550 -0.378 0.732 -0.585 0.954 0.505 - 150.90 11.526 11.561 11.578 -0.899 0.623 -0.587 -0.899 0.623 -0.365 0.527 -0.560 0.770 0.426 - 150.95 11.291 11.323 11.335 -0.852 0.522 -0.822 -0.852 0.522 -0.429 0.700 -0.445 0.837 0.467 - 151.00 11.332 11.359 11.378 -0.783 0.649 -0.781 -0.783 0.649 -0.507 0.611 -0.508 0.822 0.471 - 151.05 11.329 11.374 11.397 -1.017 0.724 -0.784 -1.017 0.724 -0.568 0.797 -0.736 1.087 0.612 - 151.10 11.857 11.898 11.909 -0.991 0.493 -0.256 -0.991 0.493 -0.126 0.254 -0.489 0.646 0.283 - 151.15 11.711 11.771 11.772 -1.184 0.118 -0.402 -1.184 0.118 -0.047 0.475 -0.139 0.788 0.249 - 151.20 11.431 11.474 11.480 -0.999 0.373 -0.682 -0.999 0.373 -0.255 0.681 -0.373 0.801 0.409 - 151.25 11.292 11.323 11.333 -0.831 0.474 -0.821 -0.831 0.474 -0.389 0.682 -0.394 0.794 0.439 - 151.30 11.306 11.317 11.337 -0.493 0.675 -0.806 -0.493 0.675 -0.545 0.398 -0.333 0.675 0.376 - 151.35 11.180 11.189 11.218 -0.457 0.795 -0.933 -0.457 0.795 -0.742 0.426 -0.364 0.856 0.465 - 151.40 10.904 10.917 10.995 -0.535 1.305 -1.208 -0.535 1.305 -1.578 0.646 -0.698 1.725 0.921 - 151.45 10.841 10.857 10.924 -0.598 1.209 -1.272 -0.598 1.209 -1.538 0.760 -0.723 1.718 0.931 - 151.50 10.716 10.729 10.809 -0.516 1.317 -1.396 -0.516 1.317 -1.840 0.721 -0.680 1.976 1.045 - 151.55 10.938 10.958 11.079 -0.663 1.634 -1.175 -0.663 1.634 -1.920 0.779 -1.084 2.246 1.169 - 151.60 11.164 11.186 11.274 -0.690 1.408 -0.949 -0.690 1.408 -1.335 0.655 -0.972 1.679 0.888 - 151.65 11.444 11.464 11.544 -0.676 1.360 -0.669 -0.676 1.360 -0.910 0.452 -0.920 1.377 0.685 - 151.70 11.491 11.498 11.569 -0.411 1.275 -0.622 -0.411 1.275 -0.793 0.255 -0.524 1.090 0.492 - 151.75 11.434 11.440 11.510 -0.370 1.268 -0.679 -0.370 1.268 -0.860 0.251 -0.469 1.102 0.506 - 151.80 11.436 11.436 11.526 -0.115 1.439 -0.677 -0.115 1.439 -0.974 0.078 -0.165 1.271 0.496 - 151.85 11.467 11.475 11.570 -0.429 1.480 -0.646 -0.429 1.480 -0.956 0.277 -0.635 1.396 0.591 - 151.90 11.439 11.453 11.505 -0.566 1.092 -0.674 -0.566 1.092 -0.736 0.381 -0.618 0.984 0.517 - 151.95 11.110 11.118 11.161 -0.419 0.980 -1.003 -0.419 0.980 -0.982 0.420 -0.411 1.070 0.572 - 152.00 11.268 11.272 11.300 -0.273 0.807 -0.845 -0.273 0.807 -0.682 0.231 -0.220 0.720 0.376 - 152.05 10.945 10.966 10.990 -0.675 0.722 -1.168 -0.675 0.722 -0.843 0.788 -0.487 1.170 0.626 - 152.10 11.047 11.074 11.107 -0.772 0.854 -1.066 -0.772 0.854 -0.910 0.823 -0.659 1.230 0.696 - 152.15 11.077 11.106 11.142 -0.799 0.889 -1.035 -0.799 0.889 -0.920 0.828 -0.710 1.250 0.713 - 152.20 11.422 11.449 11.483 -0.778 0.888 -0.691 -0.778 0.888 -0.613 0.537 -0.690 0.935 0.534 - 152.25 11.197 11.225 11.242 -0.794 0.625 -0.916 -0.794 0.625 -0.573 0.727 -0.496 0.930 0.525 - 152.30 11.161 11.233 11.238 -1.267 0.351 -0.952 -1.267 0.351 -0.334 1.206 -0.445 1.317 0.664 - 152.35 10.979 11.035 11.046 -1.107 0.504 -1.134 -1.107 0.504 -0.571 1.255 -0.558 1.382 0.744 - 152.40 10.987 11.028 11.043 -0.951 0.578 -1.126 -0.951 0.578 -0.651 1.071 -0.550 1.253 0.684 - 152.45 11.227 11.283 11.295 -1.123 0.539 -0.886 -1.123 0.539 -0.478 0.995 -0.605 1.169 0.630 - 152.50 10.915 10.948 10.956 -0.848 0.422 -1.197 -0.848 0.422 -0.506 1.015 -0.358 1.165 0.595 - 152.55 11.074 11.085 11.093 -0.506 0.414 -1.039 -0.506 0.414 -0.430 0.526 -0.210 0.754 0.356 - 152.60 11.219 11.238 11.255 -0.659 0.609 -0.894 -0.659 0.609 -0.544 0.589 -0.401 0.802 0.448 - 152.65 11.166 11.183 11.189 -0.631 0.365 -0.947 -0.631 0.365 -0.346 0.598 -0.231 0.715 0.364 - 152.70 11.301 11.315 11.318 -0.570 0.261 -0.812 -0.570 0.261 -0.212 0.463 -0.149 0.526 0.265 - 152.75 11.291 11.304 11.304 -0.544 0.087 -0.822 -0.544 0.087 -0.071 0.447 -0.047 0.489 0.228 - 152.80 11.178 11.182 11.183 -0.268 0.192 -0.934 -0.268 0.192 -0.180 0.251 -0.052 0.491 0.156 - 152.85 11.028 11.028 11.028 -0.092 0.084 -1.085 -0.092 0.084 -0.091 0.100 -0.008 0.597 0.068 - 152.90 10.898 10.898 10.906 -0.120 0.415 -1.215 -0.120 0.415 -0.504 0.146 -0.050 0.832 0.264 - 152.95 10.844 10.845 10.867 -0.094 0.692 -1.268 -0.094 0.692 -0.878 0.119 -0.065 1.048 0.444 - 153.00 11.008 11.012 11.035 -0.269 0.708 -1.104 -0.269 0.708 -0.782 0.297 -0.191 0.897 0.429 - 153.05 11.305 11.305 11.318 0.038 0.552 -0.808 0.038 0.552 -0.446 -0.031 0.021 0.480 0.224 - 153.10 11.414 11.416 11.424 -0.186 0.430 -0.699 -0.186 0.430 -0.301 0.130 -0.080 0.354 0.168 - 153.15 11.535 11.538 11.556 0.233 0.660 -0.578 0.233 0.660 -0.381 -0.134 0.154 0.412 0.216 - 153.20 11.462 11.467 11.487 0.350 0.677 -0.651 0.350 0.677 -0.441 -0.228 0.237 0.502 0.275 - 153.25 11.410 11.416 11.438 0.368 0.704 -0.703 0.368 0.704 -0.495 -0.258 0.259 0.562 0.308 - 153.30 11.168 11.172 11.214 0.315 0.965 -0.945 0.315 0.965 -0.912 -0.298 0.304 0.962 0.503 - 153.35 10.935 10.942 10.991 0.400 1.026 -1.178 0.400 1.026 -1.209 -0.471 0.410 1.300 0.680 - 153.40 11.083 11.083 11.131 0.010 1.033 -1.029 0.010 1.033 -1.063 -0.011 0.011 1.063 0.532 - 153.45 11.125 11.125 11.169 -0.022 0.994 -0.988 -0.022 0.994 -0.982 0.022 -0.022 0.982 0.491 - 153.50 11.464 11.464 11.480 0.028 0.609 -0.649 0.028 0.609 -0.395 -0.018 0.017 0.397 0.198 - 153.55 11.329 11.331 11.340 -0.197 0.466 -0.784 -0.197 0.466 -0.365 0.154 -0.092 0.435 0.203 - 153.60 11.322 11.327 11.336 -0.339 0.462 -0.791 -0.339 0.462 -0.366 0.268 -0.157 0.477 0.240 - 153.65 11.463 11.473 11.489 -0.478 0.607 -0.650 -0.478 0.607 -0.394 0.311 -0.290 0.509 0.290 - 153.70 11.549 11.550 11.555 -0.082 0.364 -0.563 -0.082 0.364 -0.205 0.046 -0.030 0.229 0.106 - 153.75 11.514 11.515 11.518 -0.130 0.279 -0.599 -0.130 0.279 -0.167 0.078 -0.036 0.227 0.094 - 153.80 11.178 11.178 11.187 -0.123 0.451 -0.935 -0.123 0.451 -0.422 0.115 -0.055 0.547 0.220 - 153.85 11.172 11.174 11.180 -0.192 0.365 -0.941 -0.192 0.365 -0.343 0.181 -0.070 0.527 0.197 - 153.90 11.219 11.219 11.228 -0.000 0.439 -0.894 -0.000 0.439 -0.393 0.000 -0.000 0.496 0.196 - 153.95 11.096 11.100 11.101 -0.292 0.138 -1.016 -0.292 0.138 -0.141 0.297 -0.040 0.569 0.166 - 154.00 10.830 10.832 10.836 -0.206 0.306 -1.283 -0.206 0.306 -0.393 0.265 -0.063 0.891 0.239 - 154.05 10.782 10.782 10.785 -0.010 0.258 -1.331 -0.010 0.258 -0.343 0.013 -0.002 0.918 0.171 - 154.10 10.887 10.897 10.898 -0.471 0.191 -1.226 -0.471 0.191 -0.234 0.577 -0.090 0.881 0.315 - 154.15 10.909 10.913 10.913 -0.324 0.028 -1.204 -0.324 0.028 -0.034 0.391 -0.009 0.778 0.196 - 154.20 10.495 10.496 10.502 -0.161 0.345 -1.618 -0.161 0.345 -0.558 0.261 -0.056 1.382 0.309 - 154.25 10.262 10.267 10.271 -0.299 0.285 -1.850 -0.299 0.285 -0.528 0.553 -0.085 1.797 0.385 - 154.30 10.357 10.358 10.373 -0.141 0.556 -1.756 -0.141 0.556 -0.976 0.248 -0.078 1.705 0.505 - 154.35 10.031 10.035 10.062 -0.307 0.734 -2.082 -0.307 0.734 -1.529 0.638 -0.225 2.485 0.836 - 154.40 10.219 10.219 10.236 -0.120 0.593 -1.894 -0.120 0.593 -1.124 0.227 -0.071 1.977 0.574 - 154.45 10.424 10.427 10.435 -0.276 0.395 -1.689 -0.276 0.395 -0.667 0.467 -0.109 1.542 0.411 - 154.50 10.466 10.474 10.484 -0.395 0.464 -1.647 -0.395 0.464 -0.765 0.651 -0.184 1.542 0.511 - 154.55 10.470 10.492 10.511 -0.678 0.629 -1.643 -0.678 0.629 -1.034 1.114 -0.426 1.777 0.789 - 154.60 10.675 10.691 10.694 -0.584 0.260 -1.438 -0.584 0.260 -0.374 0.839 -0.152 1.238 0.466 - 154.65 10.778 10.788 10.797 -0.462 0.439 -1.335 -0.462 0.439 -0.586 0.617 -0.203 1.094 0.437 - 154.70 10.561 10.563 10.569 -0.204 0.368 -1.552 -0.204 0.368 -0.572 0.316 -0.075 1.293 0.329 - 154.75 10.480 10.482 10.503 -0.243 0.653 -1.633 -0.243 0.653 -1.067 0.397 -0.159 1.576 0.575 - 154.80 10.480 10.486 10.500 -0.340 0.539 -1.633 -0.340 0.539 -0.879 0.555 -0.183 1.536 0.528 - 154.85 10.552 10.553 10.558 -0.195 0.301 -1.561 -0.195 0.301 -0.469 0.304 -0.059 1.283 0.281 - 154.90 10.818 10.819 10.822 0.080 0.279 -1.294 0.080 0.279 -0.362 -0.104 0.022 0.880 0.188 - 154.95 11.004 11.004 11.020 0.120 0.583 -1.109 0.120 0.583 -0.647 -0.133 0.070 0.793 0.332 - 155.00 10.780 10.782 10.814 -0.218 0.832 -1.333 -0.218 0.832 -1.110 0.291 -0.182 1.259 0.581 - 155.05 10.277 10.292 10.313 -0.564 0.649 -1.836 -0.564 0.649 -1.192 1.035 -0.366 2.055 0.810 - 155.10 10.158 10.186 10.226 -0.751 0.906 -1.955 -0.751 0.906 -1.771 1.469 -0.681 2.604 1.200 - 155.15 9.955 10.000 10.028 -0.950 0.747 -2.158 -0.950 0.747 -1.612 2.051 -0.710 3.059 1.352 - 155.20 10.035 10.085 10.114 -1.008 0.754 -2.078 -1.008 0.754 -1.568 2.094 -0.760 2.951 1.362 - 155.25 10.373 10.437 10.452 -1.161 0.552 -1.740 -1.161 0.552 -0.960 2.020 -0.641 2.340 1.163 - 155.30 10.416 10.466 10.481 -1.026 0.559 -1.697 -1.026 0.559 -0.949 1.741 -0.574 2.122 1.032 - 155.35 10.460 10.545 10.548 -1.342 0.213 -1.653 -1.342 0.213 -0.351 2.219 -0.285 2.290 1.132 - 155.40 10.473 10.571 10.572 -1.440 0.077 -1.640 -1.440 0.077 -0.127 2.361 -0.111 2.384 1.184 - 155.45 10.255 10.357 10.361 -1.448 0.280 -1.857 -1.448 0.280 -0.520 2.689 -0.406 2.812 1.384 - 155.50 9.898 9.980 9.997 -1.276 0.585 -2.214 -1.276 0.585 -1.296 2.826 -0.747 3.438 1.599 - 155.55 9.831 9.907 9.919 -1.220 0.494 -2.281 -1.220 0.494 -1.127 2.782 -0.602 3.468 1.531 - 155.60 9.876 9.952 9.969 -1.227 0.567 -2.236 -1.227 0.567 -1.269 2.745 -0.697 3.415 1.552 - 155.65 9.810 9.928 9.930 -1.527 0.164 -2.303 -1.527 0.164 -0.377 3.515 -0.250 3.830 1.772 - 155.70 9.631 9.749 9.753 -1.514 0.284 -2.482 -1.514 0.284 -0.705 3.758 -0.430 4.267 1.924 - 155.75 9.871 9.975 9.983 -1.433 0.403 -2.242 -1.433 0.403 -0.903 3.213 -0.578 3.621 1.694 - 155.80 9.980 10.058 10.076 -1.249 0.590 -2.132 -1.249 0.590 -1.259 2.664 -0.737 3.228 1.519 - 155.85 9.891 9.957 9.959 -1.151 0.163 -2.222 -1.151 0.163 -0.363 2.559 -0.188 3.145 1.296 - 155.90 9.711 9.738 9.738 -0.723 -0.080 -2.402 -0.723 -0.080 0.191 1.737 0.058 3.150 0.874 - 155.95 10.176 10.185 10.185 -0.427 0.046 -1.937 -0.427 0.046 -0.089 0.827 -0.020 1.968 0.416 - 156.00 10.198 10.224 10.226 -0.734 0.179 -1.915 -0.734 0.179 -0.344 1.406 -0.132 2.119 0.727 - 156.05 9.855 9.861 9.863 -0.324 0.218 -2.258 -0.324 0.218 -0.493 0.730 -0.071 2.624 0.442 - 156.10 9.927 9.930 9.943 -0.240 0.518 -2.186 -0.240 0.518 -1.132 0.526 -0.125 2.553 0.627 - 156.15 10.124 10.131 10.132 -0.367 0.129 -1.989 -0.367 0.129 -0.257 0.730 -0.047 2.053 0.388 - 156.20 9.896 9.902 9.906 -0.334 0.280 -2.217 -0.334 0.280 -0.620 0.741 -0.094 2.552 0.485 - 156.25 10.113 10.121 10.128 -0.413 0.373 -2.000 -0.413 0.373 -0.747 0.826 -0.154 2.155 0.562 - 156.30 10.295 10.306 10.332 -0.472 0.739 -1.818 -0.472 0.739 -1.344 0.858 -0.349 2.037 0.816 - 156.35 10.263 10.274 10.287 -0.478 0.528 -1.850 -0.478 0.528 -0.977 0.885 -0.253 1.965 0.671 - 156.40 10.076 10.079 10.080 -0.264 0.161 -2.037 -0.264 0.161 -0.327 0.537 -0.042 2.123 0.315 - 156.45 9.848 9.874 9.880 -0.709 0.362 -2.264 -0.709 0.362 -0.819 1.605 -0.256 2.881 0.910 - 156.50 9.982 10.025 10.035 -0.931 0.449 -2.131 -0.931 0.449 -0.956 1.983 -0.418 2.804 1.120 - 156.55 10.150 10.193 10.198 -0.933 0.312 -1.963 -0.933 0.312 -0.613 1.830 -0.291 2.410 0.976 - 156.60 9.832 9.850 9.854 -0.594 0.284 -2.281 -0.594 0.284 -0.647 1.355 -0.169 2.819 0.756 - 156.65 9.771 9.778 9.788 -0.368 0.435 -2.342 -0.368 0.435 -1.018 0.862 -0.160 2.904 0.672 - 156.70 10.001 10.013 10.015 -0.490 0.220 -2.112 -0.490 0.220 -0.464 1.035 -0.108 2.375 0.570 - 156.75 10.091 10.120 10.120 -0.770 0.075 -2.022 -0.770 0.075 -0.151 1.556 -0.058 2.343 0.782 - 156.80 9.881 9.908 9.909 -0.723 0.151 -2.231 -0.723 0.151 -0.336 1.613 -0.109 2.762 0.826 - 156.85 10.011 10.051 10.051 -0.893 -0.004 -2.101 -0.893 -0.004 0.008 1.876 0.004 2.606 0.938 - 156.90 9.957 9.985 9.986 -0.747 -0.074 -2.155 -0.747 -0.074 0.159 1.610 0.055 2.604 0.809 - 156.95 10.203 10.227 10.227 -0.688 0.093 -1.909 -0.688 0.093 -0.177 1.313 -0.064 2.063 0.663 - 157.00 10.059 10.101 10.107 -0.924 0.356 -2.054 -0.924 0.356 -0.731 1.898 -0.329 2.600 1.030 - 157.05 10.264 10.334 10.343 -1.199 0.422 -1.848 -1.199 0.422 -0.780 2.216 -0.506 2.516 1.202 - 157.10 10.207 10.303 10.337 -1.402 0.833 -1.906 -1.402 0.833 -1.587 2.671 -1.168 3.145 1.660 - 157.15 10.268 10.400 10.431 -1.653 0.804 -1.845 -1.653 0.804 -1.483 3.051 -1.329 3.392 1.822 - 157.20 10.164 10.256 10.294 -1.371 0.874 -1.948 -1.371 0.874 -1.703 2.671 -1.198 3.219 1.693 - 157.25 10.323 10.403 10.427 -1.284 0.710 -1.789 -1.284 0.710 -1.270 2.298 -0.911 2.678 1.390 - 157.30 10.528 10.610 10.624 -1.312 0.559 -1.585 -1.312 0.559 -0.886 2.079 -0.733 2.272 1.188 - 157.35 10.408 10.519 10.575 -1.524 1.088 -1.705 -1.524 1.088 -1.855 2.599 -1.659 3.207 1.799 - 157.40 10.475 10.570 10.630 -1.419 1.124 -1.638 -1.419 1.124 -1.842 2.324 -1.595 2.980 1.683 - 157.45 10.407 10.465 10.529 -1.099 1.162 -1.706 -1.099 1.162 -1.982 1.875 -1.277 2.734 1.506 - 157.50 10.857 10.883 10.945 -0.751 1.164 -1.256 -0.751 1.164 -1.462 0.943 -0.874 1.748 0.974 - 157.55 11.053 11.083 11.142 -0.813 1.149 -1.060 -0.813 1.149 -1.218 0.862 -0.935 1.553 0.880 - 157.60 11.059 11.117 11.142 -1.139 0.742 -1.054 -1.139 0.742 -0.782 1.200 -0.845 1.479 0.832 - 157.65 10.725 10.811 10.831 -1.357 0.651 -1.387 -1.357 0.651 -0.903 1.883 -0.883 2.095 1.134 - 157.70 10.693 10.763 10.781 -1.227 0.617 -1.420 -1.227 0.617 -0.876 1.742 -0.756 1.951 1.046 - 157.75 10.866 10.990 11.005 -1.647 0.561 -1.247 -1.647 0.561 -0.699 2.053 -0.923 2.290 1.178 - 157.80 10.982 11.089 11.121 -1.540 0.836 -1.131 -1.540 0.836 -0.945 1.742 -1.287 2.174 1.181 - 157.85 11.126 11.236 11.255 -1.569 0.651 -0.987 -1.569 0.651 -0.643 1.549 -1.022 1.931 0.982 - 157.90 11.061 11.174 11.182 -1.586 0.441 -1.052 -1.586 0.441 -0.464 1.669 -0.700 1.909 0.934 - 157.95 11.133 11.194 11.194 -1.163 0.108 -0.980 -1.163 0.108 -0.106 1.140 -0.126 1.163 0.576 - 158.00 11.364 11.389 11.389 -0.754 0.058 -0.749 -0.754 0.058 -0.043 0.565 -0.044 0.566 0.284 - 158.05 11.196 11.230 11.231 -0.876 0.108 -0.917 -0.876 0.108 -0.099 0.803 -0.095 0.810 0.407 - 158.10 11.068 11.111 11.112 -0.972 0.145 -1.045 -0.972 0.145 -0.151 1.016 -0.141 1.029 0.518 - 158.15 11.122 11.165 11.166 -0.972 0.206 -0.991 -0.972 0.206 -0.204 0.963 -0.200 0.984 0.502 - 158.20 10.915 10.938 10.954 -0.717 0.587 -1.198 -0.717 0.587 -0.703 0.859 -0.421 1.147 0.594 - 158.25 11.001 11.012 11.066 -0.503 1.087 -1.112 -0.503 1.087 -1.209 0.559 -0.546 1.335 0.720 - 158.30 10.595 10.609 10.666 -0.554 1.099 -1.518 -0.554 1.099 -1.669 0.841 -0.609 1.910 0.983 - 158.35 10.835 10.858 10.932 -0.712 1.273 -1.278 -0.712 1.273 -1.627 0.911 -0.907 1.881 1.037 - 158.40 10.986 11.005 11.066 -0.636 1.165 -1.126 -0.636 1.165 -1.312 0.716 -0.741 1.515 0.834 - 158.45 11.288 11.317 11.374 -0.810 1.138 -0.825 -0.810 1.138 -0.939 0.668 -0.922 1.316 0.738 - 158.50 11.390 11.427 11.479 -0.926 1.095 -0.723 -0.926 1.095 -0.792 0.670 -1.014 1.290 0.725 - 158.55 11.538 11.582 11.637 -1.014 1.132 -0.575 -1.014 1.132 -0.651 0.583 -1.148 1.321 0.722 - 158.60 11.494 11.509 11.546 -0.585 0.929 -0.619 -0.585 0.929 -0.575 0.362 -0.543 0.794 0.435 - 158.65 11.236 11.271 11.309 -0.888 0.928 -0.877 -0.888 0.928 -0.813 0.779 -0.824 1.209 0.698 - 158.70 11.559 11.642 11.682 -1.390 0.958 -0.554 -1.390 0.958 -0.531 0.770 -1.331 1.578 0.813 - 158.75 11.707 11.787 11.852 -1.373 1.237 -0.406 -1.373 1.237 -0.502 0.557 -1.699 1.790 0.928 - 158.80 11.902 11.996 12.040 -1.502 1.029 -0.211 -1.502 1.029 -0.217 0.317 -1.546 1.680 0.796 - 158.85 12.091 12.161 12.207 -1.297 1.066 -0.021 -1.297 1.066 -0.023 0.028 -1.382 1.409 0.691 - 158.90 11.847 11.983 12.027 -1.803 1.021 -0.266 -1.803 1.021 -0.272 0.479 -1.841 2.182 0.961 - 158.95 12.239 12.338 12.370 -1.559 0.889 0.126 -1.559 0.889 0.112 -0.197 -1.386 1.619 0.702 - 159.00 12.145 12.270 12.297 -1.743 0.816 0.033 -1.743 0.816 0.027 -0.057 -1.422 1.852 0.712 - 159.05 11.981 12.124 12.144 -1.852 0.699 -0.131 -1.852 0.699 -0.092 0.243 -1.295 1.968 0.661 - 159.10 11.889 11.978 11.992 -1.458 0.597 -0.224 -1.458 0.597 -0.134 0.327 -0.870 1.265 0.469 - 159.15 11.605 11.703 11.716 -1.512 0.557 -0.508 -1.512 0.557 -0.283 0.768 -0.843 1.427 0.587 - 159.20 11.606 11.719 11.740 -1.626 0.707 -0.507 -1.626 0.707 -0.358 0.825 -1.149 1.700 0.730 - 159.25 11.561 11.635 11.641 -1.311 0.386 -0.552 -1.311 0.386 -0.213 0.724 -0.506 1.086 0.454 - 159.30 11.644 11.720 11.744 -1.333 0.744 -0.469 -1.333 0.744 -0.349 0.625 -0.992 1.275 0.611 - 159.35 11.749 11.853 11.882 -1.569 0.839 -0.364 -1.569 0.839 -0.305 0.571 -1.316 1.649 0.733 - 159.40 11.796 11.878 11.919 -1.401 0.988 -0.317 -1.401 0.988 -0.313 0.444 -1.384 1.520 0.744 - 159.45 12.036 12.094 12.107 -1.185 0.553 -0.077 -1.185 0.553 -0.042 0.091 -0.655 0.858 0.331 - 159.50 12.076 12.181 12.196 -1.596 0.597 -0.037 -1.596 0.597 -0.022 0.059 -0.953 1.452 0.477 - 159.55 12.021 12.126 12.142 -1.592 0.635 -0.092 -1.592 0.635 -0.059 0.147 -1.011 1.473 0.512 - 159.60 12.025 12.147 12.173 -1.717 0.796 -0.088 -1.717 0.796 -0.070 0.151 -1.366 1.795 0.688 - 159.65 12.239 12.336 12.343 -1.549 0.400 0.126 -1.549 0.400 0.050 -0.195 -0.620 1.288 0.326 - 159.70 11.967 12.049 12.055 -1.398 0.401 -0.145 -1.398 0.401 -0.058 0.203 -0.560 1.068 0.299 - 159.75 12.033 12.124 12.133 -1.482 0.489 -0.080 -1.482 0.489 -0.039 0.119 -0.724 1.221 0.368 - 159.80 11.927 12.049 12.060 -1.713 0.507 -0.186 -1.713 0.507 -0.094 0.318 -0.868 1.613 0.465 - 159.85 11.988 12.145 12.152 -1.949 0.410 -0.125 -1.949 0.410 -0.051 0.244 -0.800 1.991 0.419 - 159.90 11.828 11.928 11.934 -1.538 0.375 -0.285 -1.538 0.375 -0.107 0.438 -0.576 1.293 0.366 - 159.95 11.858 11.941 11.970 -1.406 0.845 -0.255 -1.406 0.845 -0.216 0.359 -1.189 1.378 0.630 - 160.00 12.163 12.231 12.257 -1.288 0.806 0.050 -1.288 0.806 0.040 -0.064 -1.038 1.156 0.520 - 160.05 12.176 12.268 12.291 -1.504 0.739 0.063 -1.504 0.739 0.047 -0.095 -1.111 1.406 0.558 - 160.10 12.416 12.539 12.567 -1.758 0.834 0.303 -1.758 0.834 0.252 -0.532 -1.466 1.939 0.790 - 160.15 12.298 12.428 12.472 -1.798 1.041 0.185 -1.798 1.041 0.192 -0.332 -1.871 2.174 0.955 - 160.20 12.336 12.409 12.449 -1.345 0.995 0.223 -1.345 0.995 0.222 -0.300 -1.338 1.425 0.695 - 160.25 12.323 12.394 12.406 -1.323 0.563 0.210 -1.323 0.563 0.118 -0.278 -0.745 1.055 0.402 - 160.30 12.405 12.494 12.506 -1.491 0.541 0.292 -1.491 0.541 0.158 -0.436 -0.806 1.301 0.465 - 160.35 12.450 12.509 12.527 -1.216 0.667 0.337 -1.216 0.667 0.225 -0.410 -0.811 1.019 0.468 - 160.40 13.005 13.071 13.084 -1.303 0.589 0.893 -1.303 0.589 0.525 -1.163 -0.767 1.420 0.744 - 160.45 13.024 13.091 13.108 -1.320 0.672 0.912 -1.320 0.672 0.613 -1.203 -0.887 1.512 0.808 - 160.50 12.810 12.905 12.913 -1.563 0.473 0.697 -1.563 0.473 0.329 -1.089 -0.739 1.576 0.679 - 160.55 12.865 13.018 13.022 -1.989 0.312 0.752 -1.989 0.312 0.235 -1.497 -0.621 2.311 0.819 - 160.60 12.963 13.045 13.049 -1.461 0.339 0.850 -1.461 0.339 0.288 -1.242 -0.495 1.486 0.684 - 160.65 13.067 13.121 13.127 -1.187 0.376 0.955 -1.187 0.376 0.359 -1.133 -0.447 1.231 0.635 - 160.70 12.969 12.989 12.994 -0.714 0.392 0.856 -0.714 0.392 0.335 -0.611 -0.280 0.698 0.376 - 160.75 13.060 13.086 13.087 -0.826 0.130 0.947 -0.826 0.130 0.123 -0.782 -0.108 0.798 0.400 - 160.80 13.056 13.071 13.071 -0.629 0.113 0.943 -0.629 0.113 0.106 -0.593 -0.071 0.649 0.303 - 160.85 13.086 13.102 13.104 -0.646 0.212 0.973 -0.646 0.212 0.206 -0.629 -0.137 0.705 0.338 - 160.90 13.075 13.093 13.093 -0.686 0.037 0.962 -0.686 0.037 0.036 -0.660 -0.025 0.699 0.331 - 160.95 12.902 12.923 12.925 -0.744 -0.196 0.789 -0.744 -0.196 -0.155 -0.587 0.146 0.608 0.312 - 161.00 12.779 12.822 12.823 -1.049 -0.184 0.666 -1.049 -0.184 -0.123 -0.699 0.193 0.789 0.368 - 161.05 12.315 12.361 12.361 -1.070 0.026 0.202 -1.070 0.026 0.005 -0.216 -0.028 0.593 0.109 - 161.10 12.512 12.568 12.577 -1.189 0.464 0.399 -1.189 0.464 0.185 -0.475 -0.552 0.894 0.376 - 161.15 12.255 12.298 12.307 -1.017 0.473 0.143 -1.017 0.473 0.067 -0.145 -0.481 0.640 0.253 - 161.20 11.757 11.811 11.815 -1.128 0.299 -0.356 -1.128 0.299 -0.107 0.402 -0.338 0.745 0.268 - 161.25 11.862 11.931 11.941 -1.281 0.481 -0.250 -1.281 0.481 -0.120 0.321 -0.616 0.967 0.352 - 161.30 12.003 12.036 12.061 -0.890 0.774 -0.110 -0.890 0.774 -0.085 0.098 -0.689 0.702 0.350 - 161.35 11.779 11.814 11.862 -0.908 1.063 -0.333 -0.908 1.063 -0.354 0.303 -0.965 1.033 0.536 - 161.40 11.887 11.919 11.942 -0.878 0.733 -0.226 -0.878 0.733 -0.165 0.198 -0.643 0.679 0.346 - 161.45 11.823 11.849 11.865 -0.780 0.624 -0.290 -0.780 0.624 -0.181 0.226 -0.487 0.541 0.283 - 161.50 12.021 12.049 12.055 -0.816 0.393 -0.091 -0.816 0.393 -0.036 0.075 -0.321 0.414 0.166 - 161.55 12.336 12.401 12.412 -1.265 0.509 0.224 -1.265 0.509 0.114 -0.283 -0.644 0.955 0.356 - 161.60 12.584 12.680 12.683 -1.556 0.258 0.472 -1.556 0.258 0.122 -0.734 -0.402 1.355 0.423 - 161.65 12.363 12.423 12.423 -1.215 0.117 0.251 -1.215 0.117 0.029 -0.304 -0.142 0.776 0.169 - 161.70 12.442 12.496 12.496 -1.155 0.039 0.329 -1.155 0.039 0.013 -0.380 -0.045 0.722 0.192 - 161.75 12.293 12.364 12.364 -1.320 0.103 0.180 -1.320 0.103 0.019 -0.238 -0.136 0.892 0.137 - 161.80 12.260 12.336 12.337 -1.368 -0.192 0.147 -1.368 -0.192 -0.028 -0.201 0.263 0.965 0.166 - 161.85 12.171 12.241 12.245 -1.306 -0.347 0.058 -1.306 -0.347 -0.020 -0.076 0.453 0.915 0.230 - 161.90 12.357 12.401 12.404 -1.042 -0.291 0.244 -1.042 -0.291 -0.071 -0.254 0.303 0.615 0.201 - 161.95 12.265 12.317 12.318 -1.129 -0.178 0.152 -1.129 -0.178 -0.027 -0.171 0.201 0.664 0.133 - 162.00 12.168 12.259 12.261 -1.489 -0.195 0.055 -1.489 -0.195 -0.011 -0.083 0.290 1.130 0.151 - 162.05 12.128 12.204 12.204 -1.360 0.042 0.015 -1.360 0.042 0.001 -0.020 -0.058 0.926 0.031 - 162.10 12.179 12.222 12.222 -1.022 0.126 0.066 -1.022 0.126 0.008 -0.067 -0.128 0.533 0.073 - 162.15 12.085 12.130 12.130 -1.044 -0.049 -0.028 -1.044 -0.049 0.001 0.029 0.051 0.547 0.029 - 162.20 12.203 12.226 12.226 -0.748 0.041 0.090 -0.748 0.041 0.004 -0.068 -0.030 0.285 0.037 - 162.25 11.939 12.007 12.009 -1.274 -0.222 -0.173 -1.274 -0.222 0.039 0.221 0.283 0.852 0.181 - 162.30 11.946 12.016 12.021 -1.299 -0.346 -0.167 -1.299 -0.346 0.058 0.217 0.450 0.917 0.251 - 162.35 11.590 11.675 11.675 -1.403 -0.023 -0.523 -1.403 -0.023 0.012 0.733 0.032 1.121 0.367 - 162.40 11.530 11.626 11.626 -1.493 -0.023 -0.583 -1.493 -0.023 0.013 0.870 0.034 1.285 0.436 - 162.45 11.612 11.691 11.691 -1.353 -0.066 -0.500 -1.353 -0.066 0.033 0.677 0.090 1.043 0.342 - 162.50 11.778 11.809 11.810 -0.856 0.095 -0.335 -0.856 0.095 -0.032 0.286 -0.081 0.427 0.150 - 162.55 11.991 12.028 12.033 -0.939 -0.351 -0.122 -0.939 -0.351 0.043 0.114 0.329 0.510 0.176 - 162.60 12.146 12.155 12.156 -0.474 0.136 0.033 -0.474 0.136 0.005 -0.016 -0.064 0.122 0.033 - 162.65 12.492 12.504 12.507 -0.549 0.303 0.379 -0.549 0.303 0.115 -0.208 -0.166 0.268 0.145 - 162.70 12.394 12.417 12.419 -0.762 0.234 0.281 -0.762 0.234 0.066 -0.214 -0.178 0.357 0.143 - 162.75 12.270 12.337 12.339 -1.290 0.228 0.157 -1.290 0.228 0.036 -0.202 -0.294 0.870 0.179 - 162.80 12.298 12.372 12.379 -1.346 0.426 0.186 -1.346 0.426 0.079 -0.250 -0.574 1.014 0.316 - 162.85 12.204 12.281 12.281 -1.372 -0.083 0.091 -1.372 -0.083 -0.008 -0.125 0.114 0.949 0.085 - 162.90 12.085 12.186 12.186 -1.570 0.074 -0.028 -1.570 0.074 -0.002 0.044 -0.116 1.235 0.062 - 162.95 12.072 12.142 12.142 -1.299 0.003 -0.041 -1.299 0.003 -0.000 0.053 -0.004 0.844 0.026 - 163.00 11.791 11.879 11.879 -1.441 0.092 -0.321 -1.441 0.092 -0.030 0.463 -0.132 1.093 0.241 - 163.05 11.879 12.041 12.043 -1.973 0.208 -0.234 -1.973 0.208 -0.049 0.462 -0.410 1.996 0.310 - 163.10 12.089 12.170 12.171 -1.399 -0.166 -0.024 -1.399 -0.166 0.004 0.033 0.233 0.993 0.118 - 163.15 12.168 12.234 12.236 -1.270 0.214 0.056 -1.270 0.214 0.012 -0.071 -0.272 0.831 0.141 - 163.20 12.311 12.371 12.375 -1.225 0.314 0.198 -1.225 0.314 0.062 -0.242 -0.384 0.819 0.229 - 163.25 12.401 12.451 12.452 -1.115 -0.160 0.288 -1.115 -0.160 -0.046 -0.321 0.178 0.676 0.185 - 163.30 12.570 12.641 12.641 -1.338 -0.022 0.457 -1.338 -0.022 -0.010 -0.612 0.029 1.000 0.306 - 163.35 12.333 12.434 12.437 -1.577 -0.263 0.221 -1.577 -0.263 -0.058 -0.348 0.415 1.303 0.272 - 163.40 12.066 12.169 12.170 -1.578 -0.170 -0.047 -1.578 -0.170 0.008 0.074 0.269 1.260 0.139 - 163.45 12.035 12.104 12.104 -1.296 -0.078 -0.078 -1.296 -0.078 0.006 0.101 0.101 0.846 0.072 - 163.50 12.113 12.161 12.161 -1.079 -0.016 0.000 -1.079 -0.016 -0.000 -0.000 0.017 0.583 0.009 - 163.55 11.940 12.006 12.010 -1.266 0.298 -0.173 -1.266 0.298 -0.052 0.219 -0.378 0.861 0.220 - 163.60 11.690 11.716 11.722 -0.789 0.367 -0.423 -0.789 0.367 -0.155 0.334 -0.290 0.468 0.234 - 163.65 11.658 11.700 11.702 -0.992 0.168 -0.455 -0.992 0.168 -0.076 0.451 -0.166 0.610 0.243 - 163.70 11.452 11.528 11.532 -1.323 0.273 -0.661 -1.323 0.273 -0.181 0.874 -0.362 1.130 0.481 - 163.75 11.563 11.697 11.706 -1.765 0.463 -0.550 -1.765 0.463 -0.255 0.970 -0.818 1.815 0.647 - 163.80 11.811 11.905 11.911 -1.493 0.373 -0.302 -1.493 0.373 -0.113 0.451 -0.557 1.229 0.363 - 163.85 11.958 12.069 12.074 -1.637 0.339 -0.155 -1.637 0.339 -0.053 0.254 -0.556 1.409 0.306 - 163.90 12.014 12.095 12.098 -1.396 0.255 -0.099 -1.396 0.255 -0.025 0.138 -0.356 1.012 0.191 - 163.95 11.805 11.872 11.884 -1.265 0.531 -0.308 -1.265 0.531 -0.164 0.390 -0.671 0.988 0.397 - 164.00 11.598 11.675 11.684 -1.343 0.437 -0.515 -1.343 0.437 -0.225 0.691 -0.587 1.130 0.467 - 164.05 11.839 11.876 11.913 -0.943 0.937 -0.274 -0.943 0.937 -0.257 0.258 -0.883 0.921 0.478 - 164.10 11.876 11.902 11.927 -0.783 0.781 -0.237 -0.783 0.781 -0.185 0.186 -0.612 0.640 0.333 - 164.15 11.973 12.007 12.015 -0.896 0.444 -0.139 -0.896 0.444 -0.062 0.125 -0.398 0.510 0.211 - 164.20 11.931 11.959 11.959 -0.821 0.102 -0.182 -0.821 0.102 -0.019 0.149 -0.084 0.358 0.086 - 164.25 11.873 11.913 11.913 -0.974 0.040 -0.240 -0.974 0.040 -0.010 0.234 -0.039 0.504 0.119 - 164.30 12.068 12.105 12.105 -0.938 -0.009 -0.045 -0.938 -0.009 0.000 0.042 0.008 0.441 0.021 - 164.35 11.985 12.074 12.075 -1.469 0.093 -0.128 -1.469 0.093 -0.012 0.188 -0.136 1.091 0.116 - 164.40 11.920 12.025 12.026 -1.586 -0.196 -0.193 -1.586 -0.196 0.038 0.306 0.310 1.295 0.219 - 164.45 11.785 11.882 11.893 -1.512 -0.508 -0.328 -1.512 -0.508 0.166 0.495 0.767 1.326 0.464 - 164.50 11.496 11.563 11.570 -1.249 -0.397 -0.617 -1.249 -0.397 0.245 0.771 0.496 1.050 0.475 - 164.55 11.515 11.558 11.560 -0.999 -0.211 -0.598 -0.999 -0.211 0.126 0.598 0.211 0.700 0.323 - 164.60 11.586 11.621 11.621 -0.901 0.067 -0.527 -0.901 0.067 -0.035 0.474 -0.060 0.547 0.240 - 164.65 11.535 11.584 11.584 -1.059 0.142 -0.578 -1.059 0.142 -0.082 0.612 -0.150 0.738 0.318 - 164.70 11.794 11.860 11.860 -1.246 0.024 -0.319 -1.246 0.024 -0.008 0.397 -0.030 0.827 0.199 - 164.75 12.297 12.348 12.349 -1.117 -0.128 0.185 -1.117 -0.128 -0.024 -0.206 0.143 0.649 0.126 - 164.80 12.074 12.120 12.131 -1.058 -0.509 -0.039 -1.058 -0.509 0.020 0.041 0.539 0.690 0.270 - 164.85 11.974 11.996 12.015 -0.730 -0.664 -0.139 -0.730 -0.664 0.092 0.101 0.484 0.496 0.252 - 164.90 11.521 11.533 11.541 -0.520 -0.421 -0.591 -0.520 -0.421 0.249 0.308 0.219 0.399 0.226 - 164.95 11.373 11.392 11.396 -0.655 -0.313 -0.740 -0.655 -0.313 0.232 0.485 0.205 0.538 0.288 - 165.00 11.008 11.023 11.023 -0.559 -0.025 -1.104 -0.559 -0.025 0.028 0.617 0.014 0.766 0.309 - 165.05 11.449 11.468 11.470 -0.663 0.201 -0.664 -0.663 0.201 -0.134 0.440 -0.133 0.460 0.239 - 165.10 11.602 11.650 11.651 -1.064 0.088 -0.511 -1.064 0.088 -0.045 0.544 -0.094 0.700 0.277 - 165.15 11.637 11.688 11.691 -1.087 0.241 -0.475 -1.087 0.241 -0.115 0.517 -0.263 0.733 0.295 - 165.20 11.895 11.948 11.953 -1.118 0.342 -0.218 -1.118 0.342 -0.074 0.243 -0.383 0.707 0.230 - 165.25 12.026 12.059 12.059 -0.891 0.039 -0.087 -0.891 0.039 -0.003 0.077 -0.034 0.402 0.042 - 165.30 11.472 11.513 11.517 -0.968 0.302 -0.640 -0.968 0.302 -0.194 0.620 -0.293 0.719 0.356 - 165.35 11.297 11.354 11.358 -1.145 0.295 -0.816 -1.145 0.295 -0.240 0.935 -0.337 1.032 0.511 - 165.40 11.328 11.397 11.398 -1.250 0.164 -0.785 -1.250 0.164 -0.129 0.981 -0.205 1.102 0.505 - 165.45 11.617 11.681 11.681 -1.221 0.121 -0.496 -1.221 0.121 -0.060 0.606 -0.148 0.876 0.313 - 165.50 11.714 11.755 11.760 -0.981 0.362 -0.399 -0.981 0.362 -0.145 0.392 -0.356 0.627 0.274 - 165.55 11.731 11.747 11.747 -0.619 -0.088 -0.382 -0.619 -0.088 0.034 0.236 0.054 0.268 0.122 - 165.60 11.522 11.528 11.531 -0.394 -0.258 -0.591 -0.394 -0.258 0.153 0.233 0.102 0.286 0.148 - 165.65 11.436 11.446 11.452 -0.480 -0.356 -0.677 -0.480 -0.356 0.241 0.325 0.171 0.408 0.220 - 165.70 11.300 11.320 11.324 -0.671 -0.280 -0.812 -0.671 -0.280 0.227 0.545 0.188 0.594 0.310 - 165.75 11.198 11.210 11.216 -0.512 -0.369 -0.914 -0.512 -0.369 0.338 0.468 0.189 0.617 0.304 - 165.80 11.017 11.030 11.036 -0.541 -0.352 -1.096 -0.541 -0.352 0.386 0.593 0.191 0.809 0.366 - 165.85 11.241 11.253 11.253 -0.531 0.011 -0.872 -0.531 0.011 -0.010 0.463 -0.006 0.521 0.231 - 165.90 11.492 11.493 11.493 -0.179 0.026 -0.621 -0.179 0.026 -0.016 0.111 -0.005 0.209 0.056 - 165.95 12.046 12.049 12.052 -0.268 -0.252 -0.067 -0.268 -0.252 0.017 0.018 0.067 0.070 0.036 - 166.00 11.860 11.863 11.874 -0.254 0.510 -0.252 -0.254 0.510 -0.129 0.064 -0.129 0.194 0.097 - 166.05 11.881 11.889 11.895 -0.450 0.354 -0.232 -0.450 0.354 -0.082 0.104 -0.159 0.190 0.103 - 166.10 11.802 11.806 11.815 -0.275 0.482 -0.310 -0.275 0.482 -0.149 0.085 -0.132 0.202 0.109 - 166.15 11.557 11.561 11.579 -0.325 0.639 -0.556 -0.325 0.639 -0.355 0.181 -0.207 0.411 0.225 - 166.20 11.587 11.587 11.617 0.043 0.830 -0.526 0.043 0.830 -0.436 -0.022 0.036 0.484 0.219 - 166.25 11.546 11.549 11.581 0.238 0.862 -0.567 0.238 0.862 -0.489 -0.135 0.205 0.561 0.274 - 166.30 11.760 11.766 11.829 -0.362 1.218 -0.352 -0.362 1.218 -0.429 0.128 -0.441 0.869 0.314 - 166.35 11.491 11.509 11.656 -0.636 1.846 -0.621 -0.636 1.846 -1.147 0.395 -1.174 2.098 0.844 - 166.40 11.565 11.607 11.770 -0.982 1.952 -0.547 -0.982 1.952 -1.069 0.537 -1.916 2.537 1.129 - 166.45 11.411 11.447 11.629 -0.912 2.048 -0.702 -0.912 2.048 -1.437 0.640 -1.868 2.760 1.221 - 166.50 11.601 11.635 11.771 -0.887 1.782 -0.512 -0.887 1.782 -0.912 0.454 -1.580 2.112 0.940 - 166.55 11.758 11.792 11.869 -0.889 1.351 -0.355 -0.889 1.351 -0.479 0.316 -1.202 1.371 0.666 - 166.60 11.621 11.664 11.708 -1.007 1.010 -0.492 -1.007 1.010 -0.497 0.496 -1.018 1.139 0.618 - 166.65 11.826 11.878 11.911 -1.110 0.892 -0.287 -1.110 0.892 -0.256 0.318 -0.990 1.055 0.536 - 166.70 11.736 11.755 11.812 -0.667 1.163 -0.377 -0.667 1.163 -0.439 0.251 -0.775 0.969 0.463 - 166.75 11.234 11.266 11.380 -0.845 1.605 -0.879 -0.845 1.605 -1.410 0.743 -1.357 2.032 1.047 - 166.80 11.333 11.381 11.504 -1.046 1.678 -0.780 -1.046 1.678 -1.308 0.816 -1.756 2.260 1.169 - 166.85 11.367 11.406 11.566 -0.943 1.919 -0.746 -0.943 1.919 -1.431 0.703 -1.810 2.564 1.206 - 166.90 11.345 11.397 11.520 -1.083 1.680 -0.768 -1.083 1.680 -1.290 0.831 -1.819 2.292 1.190 - 166.95 11.392 11.446 11.528 -1.106 1.374 -0.720 -1.106 1.374 -0.989 0.796 -1.519 1.814 0.990 - 167.00 11.140 11.187 11.280 -1.025 1.448 -0.973 -1.025 1.448 -1.409 0.997 -1.484 2.047 1.138 - 167.05 11.359 11.405 11.494 -1.028 1.425 -0.754 -1.028 1.425 -1.075 0.775 -1.465 1.828 0.988 - 167.10 11.223 11.313 11.405 -1.423 1.452 -0.890 -1.423 1.452 -1.293 1.266 -2.066 2.463 1.373 - 167.15 11.425 11.518 11.633 -1.459 1.631 -0.688 -1.459 1.631 -1.122 1.004 -2.380 2.632 1.408 - 167.20 11.464 11.547 11.673 -1.378 1.714 -0.648 -1.378 1.714 -1.112 0.894 -2.362 2.629 1.380 - 167.25 11.656 11.719 11.793 -1.208 1.322 -0.456 -1.208 1.322 -0.603 0.551 -1.597 1.708 0.897 - 167.30 11.936 11.973 12.034 -0.935 1.218 -0.177 -0.935 1.218 -0.215 0.165 -1.138 1.194 0.585 - 167.35 12.040 12.078 12.140 -0.961 1.225 -0.073 -0.961 1.225 -0.089 0.070 -1.177 1.214 0.591 - 167.40 12.103 12.164 12.213 -1.213 1.090 -0.009 -1.213 1.090 -0.010 0.011 -1.321 1.329 0.661 - 167.45 12.005 12.053 12.115 -1.084 1.224 -0.108 -1.084 1.224 -0.132 0.117 -1.326 1.342 0.669 - 167.50 11.919 11.978 12.049 -1.184 1.308 -0.194 -1.184 1.308 -0.253 0.229 -1.549 1.575 0.793 - 167.55 11.872 11.936 12.018 -1.227 1.409 -0.240 -1.227 1.409 -0.339 0.295 -1.729 1.774 0.893 - 167.60 12.018 12.087 12.128 -1.288 0.993 -0.095 -1.288 0.993 -0.094 0.122 -1.279 1.327 0.644 - 167.65 11.798 11.878 11.890 -1.373 0.554 -0.315 -1.373 0.554 -0.174 0.432 -0.760 1.145 0.446 - 167.70 12.158 12.215 12.224 -1.179 0.448 0.046 -1.179 0.448 0.020 -0.054 -0.528 0.796 0.266 - 167.75 12.149 12.241 12.255 -1.494 0.589 0.037 -1.494 0.589 0.022 -0.055 -0.880 1.291 0.441 - 167.80 12.162 12.233 12.240 -1.314 0.416 0.049 -1.314 0.416 0.021 -0.065 -0.547 0.951 0.275 - 167.85 11.813 11.882 11.885 -1.274 0.293 -0.300 -1.274 0.293 -0.088 0.382 -0.374 0.900 0.271 - 167.90 11.913 11.988 11.993 -1.338 0.369 -0.200 -1.338 0.369 -0.074 0.267 -0.494 0.983 0.283 - 167.95 12.019 12.099 12.099 -1.385 0.131 -0.094 -1.385 0.131 -0.012 0.130 -0.181 0.971 0.112 - 168.00 12.044 12.142 12.153 -1.537 0.509 -0.069 -1.537 0.509 -0.035 0.105 -0.783 1.314 0.395 - 168.05 11.766 11.852 11.867 -1.433 0.594 -0.347 -1.433 0.594 -0.206 0.498 -0.851 1.263 0.503 - 168.10 11.697 11.787 11.808 -1.448 0.704 -0.416 -1.448 0.704 -0.292 0.602 -1.019 1.383 0.610 - 168.15 11.804 11.911 11.936 -1.594 0.770 -0.309 -1.594 0.770 -0.238 0.492 -1.228 1.615 0.672 - 168.20 11.899 12.012 12.035 -1.645 0.733 -0.214 -1.645 0.733 -0.157 0.352 -1.206 1.645 0.633 - 168.25 11.616 11.767 11.816 -1.877 1.073 -0.496 -1.877 1.073 -0.533 0.932 -2.014 2.460 1.141 - 168.30 11.893 12.063 12.101 -2.023 0.955 -0.220 -2.023 0.955 -0.210 0.445 -1.932 2.526 0.997 - 168.35 12.130 12.343 12.393 -2.281 1.118 0.018 -2.281 1.118 0.020 -0.040 -2.549 3.226 1.275 - 168.40 12.104 12.258 12.308 -1.940 1.104 -0.009 -1.940 1.104 -0.010 0.017 -2.141 2.490 1.070 - 168.45 12.666 12.858 12.899 -2.218 1.018 0.553 -2.218 1.018 0.563 -1.226 -2.258 3.131 1.315 - 168.50 12.707 12.893 12.922 -2.184 0.864 0.594 -2.184 0.864 0.513 -1.297 -1.887 2.934 1.173 - 168.55 12.918 13.106 13.168 -2.213 1.276 0.805 -2.213 1.276 1.027 -1.782 -2.824 3.587 1.747 - 168.60 12.381 12.644 12.747 -2.563 1.616 0.268 -2.563 1.616 0.433 -0.688 -4.141 4.627 2.110 - 168.65 12.034 12.255 12.381 -2.317 1.758 -0.078 -2.317 1.758 -0.138 0.182 -4.073 4.232 2.040 - 168.70 11.984 12.213 12.330 -2.354 1.690 -0.129 -2.354 1.690 -0.217 0.303 -3.978 4.207 1.998 - 168.75 11.903 12.129 12.182 -2.327 1.139 -0.209 -2.327 1.139 -0.239 0.487 -2.650 3.378 1.353 - 168.80 12.136 12.319 12.353 -2.118 0.912 0.023 -2.118 0.912 0.021 -0.048 -1.931 2.659 0.966 - 168.85 12.241 12.436 12.473 -2.194 0.962 0.128 -2.194 0.962 0.123 -0.282 -2.109 2.877 1.066 - 168.90 12.341 12.482 12.511 -1.871 0.848 0.228 -1.871 0.848 0.194 -0.427 -1.586 2.136 0.827 - 168.95 12.273 12.437 12.466 -2.013 0.853 0.160 -2.013 0.853 0.136 -0.322 -1.716 2.402 0.876 - 169.00 12.008 12.179 12.227 -2.034 1.086 -0.105 -2.034 1.086 -0.114 0.214 -2.209 2.664 1.111 - 169.05 12.055 12.203 12.256 -1.898 1.132 -0.058 -1.898 1.132 -0.066 0.110 -2.149 2.444 1.076 - 169.10 12.221 12.360 12.414 -1.851 1.155 0.108 -1.851 1.155 0.125 -0.200 -2.137 2.386 1.075 - 169.15 12.168 12.348 12.379 -2.103 0.881 0.055 -2.103 0.881 0.048 -0.115 -1.853 2.600 0.929 - 169.20 12.107 12.277 12.289 -2.035 0.537 -0.006 -2.035 0.537 -0.003 0.012 -1.093 2.215 0.547 - 169.25 12.246 12.428 12.464 -2.119 0.950 0.133 -2.119 0.950 0.126 -0.281 -2.013 2.706 1.018 - 169.30 12.329 12.577 12.625 -2.485 1.100 0.216 -2.485 1.100 0.238 -0.537 -2.733 3.717 1.398 - 169.35 12.374 12.570 12.625 -2.209 1.178 0.261 -2.209 1.178 0.308 -0.577 -2.602 3.167 1.341 - 169.40 12.587 12.769 12.805 -2.150 0.958 0.474 -2.150 0.958 0.454 -1.019 -2.059 2.882 1.171 - 169.45 12.338 12.461 12.512 -1.745 1.122 0.226 -1.745 1.122 0.253 -0.394 -1.958 2.177 1.006 - 169.50 12.254 12.355 12.411 -1.576 1.176 0.142 -1.576 1.176 0.167 -0.223 -1.854 1.944 0.938 - 169.55 12.029 12.136 12.238 -1.610 1.577 -0.084 -1.610 1.577 -0.133 0.135 -2.539 2.543 1.273 - 169.60 11.873 12.026 12.156 -1.917 1.767 -0.240 -1.917 1.767 -0.424 0.460 -3.386 3.426 1.722 - 169.65 11.871 12.016 12.139 -1.858 1.728 -0.242 -1.858 1.728 -0.418 0.449 -3.211 3.248 1.634 - 169.70 11.909 12.048 12.178 -1.827 1.772 -0.204 -1.827 1.772 -0.362 0.373 -3.237 3.259 1.639 - 169.75 12.458 12.582 12.696 -1.760 1.697 0.346 -1.760 1.697 0.587 -0.608 -2.986 3.047 1.551 - 169.80 12.312 12.402 12.475 -1.493 1.349 0.199 -1.493 1.349 0.269 -0.298 -2.013 2.043 1.026 - 169.85 12.404 12.494 12.530 -1.492 0.950 0.292 -1.492 0.950 0.277 -0.435 -1.418 1.607 0.754 - 169.90 12.573 12.648 12.689 -1.368 1.026 0.461 -1.368 1.026 0.473 -0.630 -1.403 1.568 0.805 - 169.95 12.360 12.409 12.478 -1.108 1.309 0.247 -1.108 1.309 0.323 -0.274 -1.450 1.500 0.755 - 170.00 12.556 12.627 12.670 -1.329 1.050 0.444 -1.329 1.050 0.466 -0.590 -1.396 1.533 0.793 - 170.05 12.464 12.542 12.598 -1.404 1.179 0.351 -1.404 1.179 0.414 -0.492 -1.655 1.742 0.888 - 170.10 12.180 12.286 12.368 -1.610 1.420 0.067 -1.610 1.420 0.096 -0.109 -2.286 2.307 1.146 - 170.15 12.238 12.374 12.471 -1.828 1.550 0.126 -1.828 1.550 0.195 -0.230 -2.833 2.879 1.424 - 170.20 12.302 12.426 12.494 -1.751 1.297 0.190 -1.751 1.297 0.246 -0.332 -2.271 2.392 1.154 - 170.25 12.325 12.391 12.450 -1.276 1.213 0.212 -1.276 1.213 0.258 -0.271 -1.547 1.572 0.796 - 170.30 12.263 12.369 12.442 -1.618 1.351 0.150 -1.618 1.351 0.203 -0.242 -2.185 2.232 1.104 - 170.35 12.535 12.659 12.730 -1.772 1.343 0.422 -1.772 1.343 0.566 -0.747 -2.379 2.560 1.279 - 170.40 12.276 12.389 12.459 -1.669 1.321 0.163 -1.669 1.321 0.215 -0.272 -2.204 2.278 1.116 - 170.45 12.062 12.148 12.196 -1.447 1.071 -0.051 -1.447 1.071 -0.054 0.074 -1.549 1.621 0.776 - 170.50 12.196 12.269 12.312 -1.337 1.028 0.083 -1.337 1.028 0.086 -0.111 -1.374 1.425 0.691 - 170.55 12.286 12.379 12.394 -1.519 0.608 0.173 -1.519 0.608 0.105 -0.263 -0.923 1.354 0.483 - 170.60 12.075 12.173 12.191 -1.540 0.676 -0.038 -1.540 0.676 -0.026 0.058 -1.041 1.415 0.522 - 170.65 12.280 12.332 12.348 -1.137 0.629 0.167 -1.137 0.629 0.105 -0.190 -0.716 0.858 0.374 - 170.70 12.326 12.357 12.381 -0.876 0.766 0.213 -0.876 0.766 0.163 -0.187 -0.671 0.700 0.358 - 170.75 12.389 12.416 12.474 -0.826 1.200 0.276 -0.826 1.200 0.331 -0.228 -0.991 1.099 0.535 - 170.80 12.760 12.781 12.797 -0.739 0.635 0.647 -0.739 0.635 0.411 -0.478 -0.469 0.684 0.393 - 170.85 12.940 12.982 12.998 -1.052 0.633 0.827 -1.052 0.633 0.523 -0.870 -0.665 1.095 0.607 - 170.90 12.800 12.825 12.841 -0.793 0.655 0.687 -0.793 0.655 0.450 -0.545 -0.519 0.765 0.438 - 170.95 12.990 13.024 13.032 -0.943 0.470 0.877 -0.943 0.470 0.412 -0.827 -0.443 0.939 0.512 - 171.00 13.279 13.292 13.292 -0.586 0.082 1.166 -0.586 0.082 0.095 -0.683 -0.048 0.855 0.346 - 171.05 13.188 13.194 13.206 -0.388 0.557 1.075 -0.388 0.557 0.599 -0.418 -0.216 0.809 0.381 - 171.10 13.490 13.501 13.514 -0.546 0.587 1.378 -0.546 0.587 0.809 -0.753 -0.321 1.271 0.575 - 171.15 13.078 13.089 13.097 -0.530 0.446 0.966 -0.530 0.446 0.431 -0.512 -0.236 0.706 0.355 - 171.20 13.020 13.026 13.032 -0.375 0.390 0.908 -0.375 0.390 0.354 -0.340 -0.146 0.558 0.256 - 171.25 12.984 12.994 12.996 -0.510 0.211 0.871 -0.510 0.211 0.184 -0.444 -0.108 0.532 0.246 - 171.30 12.935 12.955 12.958 -0.709 0.283 0.822 -0.709 0.283 0.233 -0.583 -0.201 0.629 0.330 - 171.35 12.872 12.902 12.903 -0.872 0.178 0.759 -0.872 0.178 0.135 -0.662 -0.155 0.684 0.347 - 171.40 12.944 12.987 12.993 -1.060 0.370 0.831 -1.060 0.370 0.307 -0.881 -0.392 0.975 0.506 - 171.45 12.917 12.970 12.971 -1.174 0.190 0.804 -1.174 0.190 0.153 -0.944 -0.223 1.030 0.491 - 171.50 12.846 12.885 12.890 -1.005 0.370 0.733 -1.005 0.370 0.271 -0.737 -0.372 0.842 0.434 - 171.55 12.746 12.780 12.781 -0.929 0.198 0.633 -0.929 0.198 0.125 -0.588 -0.184 0.652 0.314 - 171.60 13.063 13.099 13.102 -0.966 -0.265 0.951 -0.966 -0.265 -0.252 -0.918 0.256 0.953 0.493 - 171.65 12.950 12.985 12.989 -0.956 -0.339 0.837 -0.956 -0.339 -0.283 -0.800 0.324 0.865 0.454 - 171.70 12.677 12.707 12.715 -0.876 -0.447 0.564 -0.876 -0.447 -0.252 -0.494 0.391 0.643 0.340 - 171.75 12.820 12.877 12.885 -1.208 -0.456 0.707 -1.208 -0.456 -0.323 -0.854 0.551 1.084 0.533 - 171.80 12.823 12.887 12.889 -1.288 -0.210 0.710 -1.288 -0.210 -0.149 -0.914 0.270 1.104 0.482 - 171.85 12.884 12.934 12.941 -1.140 -0.417 0.771 -1.140 -0.417 -0.321 -0.878 0.475 1.033 0.524 - 171.90 12.675 12.723 12.735 -1.098 -0.544 0.563 -1.098 -0.544 -0.306 -0.618 0.597 0.909 0.456 - 171.95 12.748 12.798 12.813 -1.135 -0.614 0.635 -1.135 -0.614 -0.390 -0.721 0.697 1.035 0.538 - 172.00 12.630 12.674 12.677 -1.054 -0.277 0.518 -1.054 -0.277 -0.144 -0.545 0.292 0.727 0.318 - 172.05 12.712 12.756 12.759 -1.058 -0.288 0.599 -1.058 -0.288 -0.173 -0.634 0.305 0.781 0.362 - 172.10 13.138 13.173 13.180 -0.949 -0.434 1.026 -0.949 -0.434 -0.445 -0.973 0.412 1.070 0.573 - 172.15 13.427 13.445 13.451 -0.693 -0.403 1.314 -0.693 -0.403 -0.529 -0.911 0.279 1.185 0.545 - 172.20 13.085 13.090 13.101 -0.347 -0.539 0.972 -0.347 -0.539 -0.524 -0.337 0.187 0.678 0.325 - 172.25 12.591 12.592 12.601 -0.203 -0.474 0.478 -0.203 -0.474 -0.226 -0.097 0.096 0.247 0.132 - 172.30 12.773 12.786 12.811 -0.573 -0.805 0.660 -0.573 -0.805 -0.531 -0.378 0.461 0.705 0.399 - 172.35 12.753 12.767 12.798 -0.594 -0.894 0.640 -0.594 -0.894 -0.572 -0.380 0.531 0.781 0.434 - 172.40 13.005 13.031 13.038 -0.824 -0.415 0.892 -0.824 -0.415 -0.370 -0.735 0.342 0.823 0.446 - 172.45 12.949 12.981 12.990 -0.920 -0.481 0.836 -0.920 -0.481 -0.402 -0.769 0.443 0.888 0.487 - 172.50 12.425 12.466 12.479 -1.013 -0.564 0.312 -1.013 -0.564 -0.176 -0.316 0.571 0.720 0.338 - 172.55 12.528 12.567 12.583 -0.985 -0.643 0.415 -0.985 -0.643 -0.267 -0.409 0.633 0.778 0.400 - 172.60 12.623 12.649 12.650 -0.824 -0.154 0.510 -0.824 -0.154 -0.078 -0.420 0.127 0.481 0.223 - 172.65 12.759 12.780 12.796 -0.725 -0.633 0.647 -0.725 -0.633 -0.409 -0.469 0.459 0.672 0.386 - 172.70 12.761 12.773 12.777 -0.552 -0.329 0.648 -0.552 -0.329 -0.213 -0.358 0.182 0.417 0.227 - 172.75 12.754 12.765 12.775 -0.514 -0.506 0.641 -0.514 -0.506 -0.325 -0.330 0.260 0.466 0.265 - 172.80 12.597 12.607 12.629 -0.491 -0.751 0.484 -0.491 -0.751 -0.364 -0.238 0.369 0.520 0.285 - 172.85 12.954 12.958 13.009 -0.344 -1.140 0.841 -0.344 -1.140 -0.959 -0.289 0.392 1.063 0.538 - 172.90 13.148 13.150 13.200 -0.204 -1.149 1.036 -0.204 -1.149 -1.190 -0.211 0.234 1.217 0.616 - 172.95 13.087 13.090 13.156 -0.246 -1.318 0.975 -0.246 -1.318 -1.284 -0.240 0.325 1.373 0.673 - 173.00 12.940 12.942 13.011 -0.255 -1.332 0.827 -0.255 -1.332 -1.102 -0.211 0.340 1.262 0.586 - 173.05 13.049 13.052 13.132 -0.281 -1.444 0.936 -0.281 -1.444 -1.351 -0.263 0.406 1.520 0.718 - 173.10 13.013 13.015 13.139 -0.229 -1.799 0.901 -0.229 -1.799 -1.620 -0.206 0.412 2.050 0.842 - 173.15 13.043 13.043 13.118 -0.045 -1.401 0.930 -0.045 -1.401 -1.303 -0.042 0.063 1.415 0.653 - 173.20 13.319 13.322 13.365 -0.246 -1.072 1.207 -0.246 -1.072 -1.294 -0.297 0.264 1.333 0.677 - 173.25 13.233 13.237 13.259 -0.340 -0.763 1.120 -0.340 -0.763 -0.855 -0.381 0.259 0.976 0.486 - 173.30 13.115 13.115 13.147 -0.060 -0.927 1.002 -0.060 -0.927 -0.929 -0.060 0.055 0.933 0.466 - 173.35 13.043 13.045 13.071 0.211 -0.828 0.930 0.211 -0.828 -0.770 0.196 -0.175 0.798 0.407 - 173.40 12.877 12.879 12.888 -0.215 -0.485 0.764 -0.215 -0.485 -0.371 -0.164 0.104 0.433 0.209 - 173.45 12.929 12.934 12.947 -0.388 -0.570 0.816 -0.388 -0.570 -0.465 -0.316 0.221 0.570 0.302 - 173.50 13.112 13.127 13.141 -0.625 -0.602 1.000 -0.625 -0.602 -0.601 -0.625 0.376 0.876 0.473 - 173.55 12.993 13.000 13.025 -0.429 -0.801 0.881 -0.429 -0.801 -0.706 -0.378 0.344 0.801 0.435 - 173.60 12.791 12.799 12.805 -0.452 -0.371 0.679 -0.452 -0.371 -0.252 -0.306 0.168 0.401 0.215 - 173.65 12.990 12.998 13.009 -0.432 -0.553 0.878 -0.432 -0.553 -0.486 -0.379 0.239 0.631 0.330 - 173.70 13.059 13.065 13.074 -0.411 -0.492 0.946 -0.411 -0.492 -0.465 -0.388 0.202 0.653 0.319 - 173.75 12.910 12.913 12.925 -0.277 -0.565 0.797 -0.277 -0.565 -0.450 -0.221 0.156 0.516 0.263 - 173.80 12.616 12.617 12.618 -0.181 -0.080 0.503 -0.181 -0.080 -0.040 -0.091 0.014 0.146 0.050 - 173.85 12.653 12.657 12.658 -0.316 -0.160 0.540 -0.316 -0.160 -0.087 -0.171 0.051 0.209 0.099 - 173.90 13.011 13.024 13.024 -0.598 0.011 0.898 -0.598 0.011 0.010 -0.537 -0.007 0.582 0.269 - 173.95 13.101 13.112 13.114 -0.540 0.221 0.988 -0.540 0.221 0.219 -0.533 -0.120 0.658 0.294 - 174.00 13.066 13.077 13.077 -0.545 0.085 0.953 -0.545 0.085 0.081 -0.520 -0.047 0.606 0.264 - 174.05 13.360 13.364 13.364 -0.332 0.005 1.247 -0.332 0.005 0.007 -0.414 -0.002 0.833 0.207 - 174.10 13.204 13.210 13.213 -0.408 0.260 1.091 -0.408 0.260 0.284 -0.445 -0.106 0.713 0.269 - 174.15 12.894 12.895 12.896 -0.214 0.070 0.781 -0.214 0.070 0.055 -0.167 -0.015 0.330 0.088 - 174.20 12.798 12.801 12.802 0.254 -0.196 0.685 0.254 -0.196 -0.134 0.174 -0.050 0.286 0.113 - 174.25 12.941 12.941 12.947 0.041 -0.373 0.829 0.041 -0.373 -0.309 0.034 -0.015 0.414 0.156 - 174.30 12.746 12.746 12.757 -0.013 -0.513 0.634 -0.013 -0.513 -0.325 -0.008 0.007 0.332 0.163 - 174.35 12.732 12.733 12.734 0.146 -0.172 0.619 0.146 -0.172 -0.107 0.090 -0.025 0.217 0.071 - 174.40 12.756 12.759 12.759 0.273 -0.097 0.643 0.273 -0.097 -0.063 0.176 -0.027 0.249 0.094 - 174.45 12.780 12.790 12.793 0.494 -0.271 0.667 0.494 -0.271 -0.181 0.330 -0.134 0.381 0.200 - 174.50 12.587 12.594 12.594 0.422 0.072 0.474 0.422 0.072 0.034 0.200 0.030 0.204 0.103 - 174.55 12.633 12.638 12.638 0.329 -0.079 0.521 0.329 -0.079 -0.041 0.171 -0.026 0.193 0.089 - 174.60 12.603 12.621 12.621 0.674 -0.084 0.490 0.674 -0.084 -0.041 0.330 -0.056 0.351 0.169 - 174.65 12.775 12.794 12.794 0.699 0.036 0.663 0.699 0.036 0.024 0.463 0.025 0.464 0.232 - 174.70 12.889 12.904 12.907 0.621 -0.248 0.777 0.621 -0.248 -0.193 0.482 -0.154 0.525 0.271 - 174.75 12.727 12.744 12.747 0.666 -0.284 0.614 0.666 -0.284 -0.175 0.409 -0.190 0.451 0.242 - 174.80 12.635 12.648 12.649 0.594 0.091 0.522 0.594 0.091 0.047 0.310 0.054 0.317 0.159 - 174.85 12.496 12.515 12.519 0.686 0.327 0.384 0.686 0.327 0.126 0.263 0.225 0.362 0.184 - 174.90 12.718 12.725 12.726 0.419 0.203 0.605 0.419 0.203 0.123 0.253 0.085 0.291 0.147 - 174.95 12.501 12.506 12.533 0.351 0.825 0.388 0.351 0.825 0.321 0.136 0.290 0.478 0.227 - 175.00 12.272 12.309 12.325 0.961 0.626 0.159 0.961 0.626 0.099 0.153 0.601 0.670 0.314 - 175.05 12.409 12.437 12.439 0.828 0.202 0.296 0.828 0.202 0.060 0.246 0.167 0.407 0.151 - 175.10 12.412 12.432 12.435 0.694 -0.282 0.300 0.694 -0.282 -0.084 0.208 -0.196 0.325 0.149 - 175.15 12.583 12.619 12.622 0.955 -0.251 0.470 0.955 -0.251 -0.118 0.449 -0.239 0.598 0.261 - 175.20 12.667 12.672 12.673 0.369 -0.136 0.554 0.369 -0.136 -0.076 0.204 -0.050 0.231 0.112 - 175.25 12.704 12.712 12.713 0.442 -0.146 0.592 0.442 -0.146 -0.086 0.261 -0.064 0.283 0.141 - 175.30 12.643 12.655 12.658 0.555 -0.267 0.530 0.555 -0.267 -0.141 0.294 -0.148 0.330 0.179 - 175.35 12.708 12.709 12.714 0.167 -0.337 0.595 0.167 -0.337 -0.200 0.100 -0.056 0.248 0.115 - 175.40 12.726 12.728 12.737 0.225 -0.482 0.613 0.225 -0.482 -0.295 0.138 -0.109 0.329 0.172 - 175.45 12.980 12.981 12.990 0.162 -0.495 0.867 0.162 -0.495 -0.430 0.140 -0.080 0.512 0.229 - 175.50 12.842 12.843 12.850 0.167 -0.440 0.729 0.167 -0.440 -0.321 0.122 -0.074 0.377 0.176 - 175.55 12.846 12.847 12.847 -0.175 -0.097 0.733 -0.175 -0.097 -0.071 -0.129 0.017 0.289 0.074 - 175.60 13.151 13.154 13.168 -0.282 -0.598 1.038 -0.282 -0.598 -0.621 -0.293 0.169 0.758 0.354 - 175.65 13.302 13.303 13.308 -0.097 -0.387 1.189 -0.097 -0.387 -0.460 -0.115 0.037 0.787 0.238 - 175.70 13.170 13.172 13.179 -0.207 -0.429 1.058 -0.207 -0.429 -0.454 -0.218 0.089 0.673 0.256 - 175.75 13.294 13.301 13.308 -0.436 -0.437 1.181 -0.436 -0.437 -0.516 -0.514 0.190 0.888 0.377 - 175.80 13.293 13.296 13.307 -0.296 -0.541 1.180 -0.296 -0.541 -0.638 -0.350 0.160 0.886 0.372 - 175.85 13.190 13.197 13.225 -0.418 -0.868 1.077 -0.418 -0.868 -0.935 -0.450 0.363 1.044 0.549 - 175.90 13.319 13.319 13.337 -0.069 -0.676 1.206 -0.069 -0.676 -0.816 -0.083 0.047 0.959 0.411 - 175.95 13.402 13.403 13.431 0.167 -0.860 1.289 0.167 -0.860 -1.109 0.216 -0.144 1.215 0.569 - 176.00 13.374 13.374 13.422 0.091 -1.139 1.261 0.091 -1.139 -1.437 0.115 -0.104 1.448 0.723 - 176.05 13.312 13.312 13.346 -0.090 -0.959 1.199 -0.090 -0.959 -1.150 -0.108 0.087 1.183 0.579 - 176.10 13.359 13.359 13.373 0.027 -0.605 1.246 0.027 -0.605 -0.754 0.034 -0.017 0.960 0.378 - 176.15 13.337 13.343 13.347 -0.382 -0.333 1.224 -0.382 -0.333 -0.408 -0.468 0.127 0.878 0.317 - 176.20 13.329 13.342 13.345 -0.594 -0.261 1.216 -0.594 -0.261 -0.318 -0.722 0.155 0.950 0.402 - 176.25 13.258 13.274 13.285 -0.652 -0.541 1.145 -0.652 -0.541 -0.620 -0.747 0.353 1.015 0.516 - 176.30 13.480 13.492 13.497 -0.579 -0.368 1.367 -0.579 -0.368 -0.504 -0.792 0.213 1.170 0.481 - 176.35 13.537 13.543 13.543 -0.403 -0.043 1.424 -0.403 -0.043 -0.061 -0.574 0.017 1.096 0.289 - 176.40 13.303 13.309 13.311 -0.425 -0.217 1.190 -0.425 -0.217 -0.258 -0.506 0.092 0.822 0.288 - 176.45 13.242 13.242 13.242 -0.045 -0.024 1.129 -0.045 -0.024 -0.027 -0.051 0.001 0.639 0.029 - 176.50 13.254 13.254 13.257 -0.115 0.279 1.141 -0.115 0.279 0.318 -0.131 -0.032 0.696 0.173 - 176.55 13.022 13.032 13.032 -0.504 0.122 0.909 -0.504 0.122 0.111 -0.458 -0.061 0.548 0.238 - 176.60 12.855 12.866 12.871 -0.532 -0.350 0.742 -0.532 -0.350 -0.259 -0.395 0.186 0.478 0.254 - 176.65 12.574 12.583 12.591 -0.495 -0.426 0.461 -0.495 -0.426 -0.196 -0.228 0.211 0.320 0.184 - 176.70 12.774 12.779 12.797 -0.364 -0.666 0.661 -0.364 -0.666 -0.441 -0.241 0.242 0.507 0.279 - 176.75 12.859 12.860 12.864 -0.178 -0.304 0.746 -0.178 -0.304 -0.227 -0.133 0.054 0.340 0.134 - 176.80 12.886 12.887 12.887 -0.171 -0.062 0.773 -0.171 -0.062 -0.048 -0.132 0.011 0.315 0.070 - 176.85 13.124 13.130 13.137 -0.392 -0.455 1.011 -0.392 -0.455 -0.460 -0.397 0.178 0.691 0.316 - 176.90 13.097 13.106 13.111 -0.491 -0.371 0.984 -0.491 -0.371 -0.365 -0.483 0.182 0.673 0.316 - 176.95 13.242 13.244 13.248 -0.253 -0.291 1.129 -0.253 -0.291 -0.329 -0.286 0.074 0.712 0.221 - 177.00 13.338 13.340 13.343 -0.270 -0.284 1.225 -0.270 -0.284 -0.348 -0.331 0.077 0.827 0.243 - 177.05 13.484 13.487 13.493 -0.298 -0.395 1.371 -0.298 -0.395 -0.542 -0.409 0.118 1.062 0.344 - 177.10 13.439 13.443 13.446 -0.338 -0.270 1.326 -0.338 -0.270 -0.358 -0.449 0.091 0.973 0.291 - 177.15 13.538 13.543 13.545 -0.366 -0.216 1.425 -0.366 -0.216 -0.308 -0.522 0.079 1.106 0.306 - 177.20 13.484 13.489 13.489 -0.345 -0.115 1.371 -0.345 -0.115 -0.158 -0.473 0.040 1.006 0.250 - 177.25 13.776 13.780 13.780 -0.329 -0.121 1.663 -0.329 -0.121 -0.202 -0.548 0.040 1.444 0.293 - 177.30 13.871 13.873 13.875 -0.218 -0.284 1.758 -0.218 -0.284 -0.499 -0.384 0.062 1.609 0.316 - 177.35 13.591 13.594 13.594 -0.268 -0.022 1.479 -0.268 -0.022 -0.033 -0.397 0.006 1.129 0.199 - 177.40 13.514 13.524 13.530 -0.520 -0.388 1.401 -0.520 -0.388 -0.544 -0.729 0.202 1.192 0.466 - 177.45 13.581 13.588 13.592 -0.440 -0.326 1.468 -0.440 -0.326 -0.478 -0.647 0.143 1.228 0.409 - 177.50 13.757 13.775 13.779 -0.702 -0.350 1.644 -0.702 -0.350 -0.576 -1.155 0.246 1.660 0.657 - 177.55 13.809 13.861 13.877 -1.201 -0.653 1.696 -1.201 -0.653 -1.108 -2.036 0.784 2.373 1.224 - 177.60 13.780 13.814 13.833 -0.968 -0.726 1.667 -0.968 -0.726 -1.211 -1.613 0.703 2.122 1.068 - 177.65 13.891 13.927 13.942 -0.991 -0.648 1.779 -0.991 -0.648 -1.153 -1.763 0.643 2.283 1.101 - 177.70 13.758 13.815 13.836 -1.245 -0.774 1.645 -1.245 -0.774 -1.273 -2.049 0.963 2.428 1.299 - 177.75 13.501 13.542 13.560 -1.057 -0.701 1.388 -1.057 -0.701 -0.973 -1.467 0.742 1.768 0.955 - 177.80 13.598 13.643 13.673 -1.102 -0.900 1.486 -1.102 -0.900 -1.337 -1.638 0.992 2.116 1.168 - 177.85 13.389 13.455 13.516 -1.330 -1.290 1.276 -1.330 -1.290 -1.646 -1.697 1.716 2.531 1.461 - 177.90 13.293 13.377 13.473 -1.501 -1.600 1.180 -1.501 -1.600 -1.888 -1.771 2.402 3.103 1.766 - 177.95 13.492 13.574 13.662 -1.490 -1.554 1.379 -1.490 -1.554 -2.142 -2.055 2.316 3.268 1.882 - 178.00 13.588 13.683 13.795 -1.613 -1.747 1.475 -1.613 -1.747 -2.578 -2.380 2.819 3.916 2.250 - 178.05 13.696 13.780 13.879 -1.515 -1.662 1.583 -1.515 -1.662 -2.631 -2.398 2.517 3.781 2.180 - 178.10 13.758 13.872 13.967 -1.775 -1.625 1.645 -1.775 -1.625 -2.674 -2.921 2.885 4.250 2.450 - 178.15 13.756 13.849 14.001 -1.607 -2.054 1.643 -1.607 -2.054 -3.375 -2.640 3.300 4.750 2.704 - 178.20 14.048 14.149 14.297 -1.689 -2.050 1.935 -1.689 -2.050 -3.968 -3.269 3.464 5.402 3.100 - 178.25 14.228 14.329 14.440 -1.697 -1.787 2.116 -1.697 -1.787 -3.781 -3.591 3.034 5.276 3.017 - 178.30 14.275 14.331 14.460 -1.260 -1.932 2.163 -1.260 -1.932 -4.178 -2.725 2.435 4.998 2.775 - 178.35 14.200 14.267 14.356 -1.381 -1.597 2.087 -1.381 -1.597 -3.332 -2.881 2.204 4.406 2.463 - 178.40 14.271 14.333 14.401 -1.338 -1.393 2.158 -1.338 -1.393 -3.007 -2.888 1.865 4.195 2.284 - 178.45 14.370 14.435 14.501 -1.364 -1.381 2.258 -1.364 -1.381 -3.117 -3.079 1.883 4.432 2.384 - 178.50 14.006 14.068 14.120 -1.325 -1.203 1.893 -1.325 -1.203 -2.277 -2.509 1.594 3.393 1.872 - 178.55 13.476 13.522 13.539 -1.112 -0.685 1.364 -1.112 -0.685 -0.933 -1.516 0.761 1.782 0.968 - 178.60 13.295 13.320 13.339 -0.820 -0.705 1.182 -0.820 -0.705 -0.833 -0.970 0.578 1.284 0.702 - 178.65 13.008 13.057 13.087 -1.130 -0.882 0.895 -1.130 -0.882 -0.789 -1.011 0.996 1.427 0.812 - 178.70 12.948 13.009 13.021 -1.251 -0.573 0.836 -1.251 -0.573 -0.478 -1.045 0.716 1.295 0.677 - 178.75 13.211 13.286 13.302 -1.411 -0.664 1.098 -1.411 -0.664 -0.729 -1.549 0.937 1.819 0.976 - 178.80 13.519 13.625 13.642 -1.692 -0.698 1.406 -1.692 -0.698 -0.981 -2.379 1.180 2.663 1.416 - 178.85 13.433 13.559 13.584 -1.840 -0.830 1.321 -1.840 -0.830 -1.096 -2.430 1.527 2.910 1.536 - 178.90 13.463 13.673 13.704 -2.386 -0.922 1.350 -2.386 -0.922 -1.245 -3.222 2.200 4.183 2.048 - 178.95 13.290 13.507 13.528 -2.410 -0.758 1.177 -2.410 -0.758 -0.892 -2.837 1.826 3.884 1.745 - 179.00 13.094 13.345 13.356 -2.578 -0.539 0.981 -2.578 -0.539 -0.529 -2.530 1.390 3.950 1.467 - 179.05 13.132 13.359 13.396 -2.449 -1.007 1.019 -2.449 -1.007 -1.026 -2.496 2.465 4.025 1.828 - 179.10 13.159 13.362 13.375 -2.321 -0.585 1.046 -2.321 -0.585 -0.612 -2.427 1.357 3.411 1.424 - 179.15 12.867 13.077 13.094 -2.335 -0.670 0.754 -2.335 -0.670 -0.505 -1.762 1.564 3.235 1.205 - 179.20 12.751 12.961 12.964 -2.324 -0.293 0.638 -2.324 -0.293 -0.187 -1.483 0.681 2.948 0.821 - 179.25 12.884 13.031 13.034 -1.951 -0.307 0.771 -1.951 -0.307 -0.236 -1.505 0.598 2.248 0.818 - 179.30 12.690 12.766 12.766 -1.392 0.024 0.577 -1.392 0.024 0.014 -0.803 -0.033 1.135 0.402 - 179.35 12.937 13.010 13.011 -1.380 0.119 0.824 -1.380 0.119 0.098 -1.137 -0.165 1.299 0.577 - 179.40 12.675 12.764 12.764 -1.509 0.042 0.562 -1.509 0.042 0.024 -0.848 -0.063 1.297 0.425 - 179.45 12.818 12.930 12.930 -1.699 -0.048 0.705 -1.699 -0.048 -0.034 -1.198 0.081 1.693 0.601 - 179.50 12.902 12.968 12.969 -1.312 -0.115 0.789 -1.312 -0.115 -0.091 -1.035 0.151 1.178 0.525 - 179.55 12.821 12.904 12.908 -1.462 -0.316 0.708 -1.462 -0.316 -0.224 -1.035 0.463 1.370 0.578 - 179.60 13.062 13.173 13.178 -1.709 -0.359 0.949 -1.709 -0.359 -0.341 -1.622 0.613 1.974 0.883 - 179.65 13.317 13.461 13.463 -1.970 0.167 1.204 -1.970 0.167 0.201 -2.371 -0.329 2.679 1.201 - 179.70 13.085 13.202 13.213 -1.756 0.523 0.972 -1.756 0.523 0.508 -1.707 -0.917 2.151 1.002 - 179.75 13.218 13.300 13.306 -1.476 0.395 1.105 -1.476 0.395 0.436 -1.631 -0.583 1.778 0.893 - 179.80 13.223 13.311 13.326 -1.524 0.631 1.110 -1.524 0.631 0.701 -1.692 -0.962 1.976 1.034 - 179.85 13.447 13.528 13.539 -1.475 0.543 1.334 -1.475 0.543 0.724 -1.968 -0.800 2.125 1.122 - 179.90 13.489 13.533 13.540 -1.100 0.436 1.376 -1.100 0.436 0.599 -1.514 -0.479 1.647 0.849 - 179.95 13.432 13.481 13.489 -1.154 0.455 1.319 -1.154 0.455 0.600 -1.522 -0.525 1.639 0.859 - 180.00 13.184 13.221 13.230 -0.984 0.498 1.072 -0.984 0.498 0.533 -1.054 -0.490 1.182 0.639 - 180.05 13.189 13.215 13.223 -0.830 0.441 1.076 -0.830 0.441 0.475 -0.893 -0.366 1.021 0.538 - 180.10 13.093 13.096 13.108 -0.269 0.567 0.981 -0.269 0.567 0.556 -0.264 -0.152 0.678 0.317 - 180.15 12.561 12.570 12.575 -0.457 0.380 0.449 -0.457 0.380 0.171 -0.205 -0.174 0.278 0.159 - 180.20 12.796 12.806 12.809 -0.517 0.269 0.683 -0.517 0.269 0.184 -0.353 -0.139 0.403 0.211 - 180.25 12.746 12.750 12.751 -0.323 0.183 0.633 -0.323 0.183 0.116 -0.204 -0.059 0.269 0.121 - 180.30 12.099 12.100 12.111 -0.115 0.523 -0.013 -0.115 0.523 -0.007 0.002 -0.060 0.143 0.030 - 180.35 12.191 12.191 12.196 -0.136 0.348 0.078 -0.136 0.348 0.027 -0.011 -0.047 0.073 0.028 - 180.40 12.349 12.361 12.373 -0.555 0.528 0.236 -0.555 0.528 0.125 -0.131 -0.293 0.321 0.172 - 180.45 12.555 12.581 12.591 -0.802 0.512 0.443 -0.802 0.512 0.227 -0.355 -0.411 0.551 0.294 - 180.50 12.861 12.867 12.868 -0.382 0.150 0.748 -0.382 0.150 0.112 -0.286 -0.057 0.364 0.156 - 180.55 12.538 12.553 12.557 -0.601 0.329 0.425 -0.601 0.329 0.140 -0.256 -0.198 0.325 0.176 - 180.60 12.260 12.291 12.293 -0.872 0.201 0.147 -0.872 0.201 0.030 -0.128 -0.176 0.412 0.110 - 180.65 12.339 12.357 12.358 -0.677 0.137 0.226 -0.677 0.137 0.031 -0.153 -0.093 0.264 0.091 - 180.70 12.166 12.189 12.196 -0.749 0.399 0.053 -0.749 0.399 0.021 -0.040 -0.298 0.361 0.151 - 180.75 11.952 11.982 11.992 -0.854 0.472 -0.161 -0.854 0.472 -0.076 0.137 -0.403 0.489 0.216 - 180.80 12.051 12.055 12.063 -0.307 0.434 -0.062 -0.307 0.434 -0.027 0.019 -0.133 0.143 0.069 - 180.85 12.013 12.017 12.021 -0.299 0.308 -0.099 -0.299 0.308 -0.031 0.030 -0.092 0.097 0.051 - 180.90 12.044 12.048 12.052 -0.276 0.329 -0.068 -0.276 0.329 -0.023 0.019 -0.091 0.095 0.048 - 180.95 12.345 12.345 12.366 -0.016 0.720 0.232 -0.016 0.720 0.167 -0.004 -0.011 0.286 0.084 - 181.00 12.279 12.279 12.294 0.053 0.609 0.166 0.053 0.609 0.101 0.009 0.033 0.201 0.053 - 181.05 12.089 12.089 12.095 -0.036 0.369 -0.024 -0.036 0.369 -0.009 0.001 -0.013 0.069 0.008 - 181.10 11.760 11.761 11.769 0.181 0.434 -0.353 0.181 0.434 -0.153 -0.064 0.079 0.173 0.092 - 181.15 11.794 11.796 11.802 0.232 0.374 -0.319 0.232 0.374 -0.119 -0.074 0.087 0.148 0.083 - 181.20 11.672 11.681 11.687 0.462 0.370 -0.441 0.462 0.370 -0.163 -0.204 0.171 0.272 0.156 - 181.25 11.697 11.711 11.727 0.560 0.628 -0.416 0.560 0.628 -0.261 -0.233 0.352 0.440 0.248 - 181.30 11.647 11.653 11.675 0.398 0.718 -0.466 0.398 0.718 -0.335 -0.185 0.286 0.446 0.239 - 181.35 11.630 11.670 11.692 0.960 0.728 -0.483 0.960 0.728 -0.351 -0.463 0.699 0.843 0.455 - 181.40 11.583 11.617 11.652 0.897 0.902 -0.530 0.897 0.902 -0.478 -0.475 0.808 0.949 0.526 - 181.45 11.610 11.633 11.665 0.741 0.864 -0.503 0.741 0.864 -0.435 -0.373 0.641 0.775 0.430 - 181.50 11.588 11.619 11.631 0.840 0.532 -0.524 0.840 0.532 -0.279 -0.441 0.447 0.632 0.343 - 181.55 11.416 11.469 11.490 1.106 0.692 -0.697 1.106 0.692 -0.482 -0.771 0.764 1.093 0.594 - 181.60 11.242 11.296 11.320 1.104 0.742 -0.871 1.104 0.742 -0.646 -0.961 0.819 1.264 0.709 - 181.65 11.457 11.481 11.501 0.752 0.671 -0.656 0.752 0.671 -0.441 -0.494 0.505 0.723 0.416 - 181.70 11.178 11.221 11.232 0.977 0.511 -0.935 0.977 0.511 -0.478 -0.914 0.500 1.045 0.573 - 181.75 11.337 11.367 11.370 0.828 0.288 -0.776 0.828 0.288 -0.224 -0.642 0.239 0.685 0.360 - 181.80 11.264 11.298 11.313 0.877 0.576 -0.849 0.877 0.576 -0.489 -0.744 0.504 0.910 0.512 - 181.85 11.327 11.367 11.377 0.957 0.470 -0.786 0.957 0.470 -0.369 -0.752 0.450 0.877 0.475 - 181.90 11.447 11.485 11.488 0.929 0.239 -0.665 0.929 0.239 -0.159 -0.618 0.222 0.682 0.338 - 181.95 11.415 11.439 11.449 0.730 0.491 -0.697 0.730 0.491 -0.342 -0.509 0.358 0.630 0.355 - 182.00 11.097 11.110 11.166 0.544 1.119 -1.016 0.544 1.119 -1.137 -0.553 0.609 1.290 0.701 - 182.05 11.158 11.165 11.195 0.387 0.824 -0.955 0.387 0.824 -0.787 -0.370 0.319 0.870 0.463 - 182.10 11.252 11.256 11.271 0.321 0.578 -0.861 0.321 0.578 -0.498 -0.276 0.185 0.589 0.299 - 182.15 11.017 11.018 11.052 0.150 0.861 -1.096 0.150 0.861 -0.944 -0.165 0.129 0.983 0.483 - 182.20 11.344 11.344 11.373 -0.003 0.811 -0.769 -0.003 0.811 -0.623 0.002 -0.002 0.624 0.312 - 182.25 11.339 11.342 11.375 -0.227 0.875 -0.773 -0.227 0.875 -0.677 0.176 -0.199 0.708 0.364 - 182.30 11.463 11.464 11.516 -0.160 1.093 -0.650 -0.160 1.093 -0.710 0.104 -0.175 0.821 0.369 - 182.35 11.354 11.356 11.388 -0.234 0.854 -0.759 -0.234 0.854 -0.648 0.177 -0.199 0.680 0.350 - 182.40 11.340 11.341 11.407 -0.116 1.230 -0.773 -0.116 1.230 -0.950 0.090 -0.143 1.062 0.483 - 182.45 11.513 11.514 11.563 -0.191 1.057 -0.600 -0.191 1.057 -0.634 0.115 -0.202 0.756 0.338 - 182.50 11.429 11.429 11.500 -0.108 1.278 -0.684 -0.108 1.278 -0.874 0.074 -0.139 1.056 0.444 - 182.55 11.306 11.311 11.370 -0.345 1.156 -0.807 -0.345 1.156 -0.934 0.279 -0.399 1.054 0.526 - 182.60 11.106 11.106 11.188 -0.014 1.348 -1.007 -0.014 1.348 -1.357 0.014 -0.019 1.416 0.679 - 182.65 11.024 11.034 11.099 0.461 1.202 -1.089 0.461 1.202 -1.308 -0.502 0.554 1.421 0.754 - 182.70 11.085 11.102 11.123 0.610 0.679 -1.028 0.610 0.679 -0.698 -0.627 0.414 0.945 0.513 - 182.75 11.148 11.159 11.179 0.490 0.665 -0.965 0.490 0.665 -0.641 -0.473 0.326 0.806 0.430 - 182.80 11.327 11.331 11.400 0.304 1.258 -0.786 0.304 1.258 -0.989 -0.239 0.382 1.147 0.543 - 182.85 11.542 11.545 11.591 0.230 1.036 -0.570 0.230 1.036 -0.591 -0.131 0.238 0.725 0.325 - 182.90 11.045 11.046 11.068 -0.115 0.701 -1.068 -0.115 0.701 -0.748 0.123 -0.081 0.822 0.381 - 182.95 11.476 11.489 11.502 -0.544 0.547 -0.637 -0.544 0.547 -0.348 0.347 -0.298 0.501 0.287 - 183.00 11.848 11.863 11.870 -0.591 0.411 -0.265 -0.591 0.411 -0.109 0.156 -0.243 0.294 0.154 - 183.05 11.676 11.690 11.701 -0.572 0.510 -0.436 -0.572 0.510 -0.223 0.250 -0.292 0.389 0.222 - 183.10 11.647 11.660 11.662 -0.561 -0.211 -0.466 -0.561 -0.211 0.098 0.262 0.119 0.289 0.152 - 183.15 11.612 11.616 11.618 -0.329 0.195 -0.501 -0.329 0.195 -0.098 0.165 -0.064 0.199 0.101 - 183.20 12.034 12.057 12.058 -0.754 0.106 -0.079 -0.754 0.106 -0.008 0.060 -0.080 0.293 0.050 - 183.25 12.191 12.195 12.195 -0.303 0.120 0.078 -0.303 0.120 0.009 -0.024 -0.036 0.056 0.022 - 183.30 12.364 12.370 12.370 -0.365 0.005 0.252 -0.365 0.005 0.001 -0.092 -0.002 0.098 0.046 - 183.35 12.521 12.523 12.523 -0.210 -0.016 0.409 -0.210 -0.016 -0.007 -0.086 0.003 0.106 0.043 - 183.40 12.292 12.293 12.295 -0.118 -0.265 0.179 -0.118 -0.265 -0.048 -0.021 0.031 0.058 0.030 - 183.45 12.458 12.460 12.460 -0.216 -0.118 0.345 -0.216 -0.118 -0.041 -0.075 0.026 0.090 0.044 - 183.50 12.471 12.472 12.473 0.118 -0.184 0.358 0.118 -0.184 -0.066 0.042 -0.022 0.088 0.041 - 183.55 12.384 12.386 12.392 0.239 0.390 0.271 0.239 0.390 0.106 0.065 0.093 0.141 0.077 - 183.60 12.295 12.298 12.298 0.287 0.088 0.182 0.287 0.088 0.016 0.052 0.025 0.062 0.030 - 183.65 12.327 12.334 12.335 0.396 0.154 0.215 0.396 0.154 0.033 0.085 0.061 0.113 0.055 - 183.70 12.482 12.490 12.492 0.454 0.246 0.369 0.454 0.246 0.091 0.167 0.112 0.201 0.110 - 183.75 12.497 12.505 12.507 0.443 0.209 0.384 0.443 0.209 0.080 0.170 0.093 0.194 0.105 - 183.80 12.266 12.268 12.270 0.248 0.226 0.153 0.248 0.226 0.035 0.038 0.056 0.068 0.038 - 183.85 12.223 12.223 12.229 0.109 0.359 0.110 0.109 0.359 0.039 0.012 0.039 0.076 0.028 - 183.90 12.439 12.440 12.459 0.127 0.687 0.326 0.127 0.687 0.224 0.042 0.087 0.297 0.122 - 183.95 12.481 12.482 12.498 0.194 0.636 0.368 0.194 0.636 0.234 0.071 0.123 0.289 0.137 - 184.00 12.575 12.575 12.582 0.112 0.434 0.462 0.112 0.434 0.200 0.052 0.049 0.207 0.106 - 184.05 12.514 12.518 12.533 0.296 0.613 0.401 0.296 0.613 0.246 0.119 0.181 0.313 0.164 - 184.10 12.399 12.400 12.419 0.120 0.689 0.286 0.120 0.689 0.197 0.034 0.083 0.286 0.108 - 184.15 12.438 12.438 12.455 -0.047 0.645 0.325 -0.047 0.645 0.210 -0.015 -0.030 0.262 0.106 - 184.20 12.439 12.441 12.460 0.254 0.685 0.326 0.254 0.685 0.223 0.083 0.174 0.320 0.147 - 184.25 12.333 12.337 12.354 0.326 0.638 0.220 0.326 0.638 0.140 0.072 0.208 0.281 0.131 - 184.30 12.135 12.148 12.163 0.575 0.603 0.022 0.575 0.603 0.013 0.013 0.347 0.348 0.174 - 184.35 12.184 12.193 12.207 0.465 0.578 0.071 0.465 0.578 0.041 0.033 0.269 0.278 0.137 - 184.40 12.403 12.403 12.411 0.126 0.449 0.290 0.126 0.449 0.130 0.036 0.056 0.151 0.073 - 184.45 12.750 12.751 12.756 0.078 0.384 0.638 0.078 0.384 0.245 0.050 0.030 0.280 0.126 - 184.50 12.942 12.948 12.962 0.385 0.603 0.829 0.385 0.603 0.500 0.319 0.232 0.600 0.319 - 184.55 12.981 12.983 12.993 0.213 0.520 0.868 0.213 0.520 0.451 0.185 0.111 0.535 0.250 - 184.60 12.715 12.715 12.720 -0.061 0.358 0.602 -0.061 0.358 0.215 -0.037 -0.022 0.247 0.110 - 184.65 12.512 12.522 12.539 -0.498 0.656 0.399 -0.498 0.656 0.262 -0.199 -0.327 0.419 0.232 - 184.70 12.423 12.443 12.452 -0.689 0.497 0.311 -0.689 0.497 0.154 -0.214 -0.343 0.409 0.216 - 184.75 12.534 12.542 12.560 -0.450 0.673 0.421 -0.450 0.673 0.284 -0.190 -0.303 0.417 0.228 - 184.80 12.313 12.322 12.389 -0.462 1.290 0.200 -0.462 1.290 0.259 -0.093 -0.596 0.959 0.328 - 184.85 12.071 12.087 12.154 -0.619 1.273 -0.042 -0.619 1.273 -0.053 0.026 -0.788 1.003 0.395 - 184.90 12.171 12.184 12.250 -0.556 1.270 0.058 -0.556 1.270 0.074 -0.032 -0.706 0.962 0.355 - 184.95 12.426 12.433 12.495 -0.443 1.243 0.313 -0.443 1.243 0.389 -0.139 -0.551 0.920 0.344 - 185.00 12.391 12.402 12.444 -0.522 1.025 0.278 -0.522 1.025 0.285 -0.145 -0.535 0.701 0.312 - 185.05 12.553 12.562 12.590 -0.479 0.845 0.440 -0.479 0.845 0.372 -0.211 -0.405 0.568 0.294 - 185.10 12.442 12.442 12.478 0.008 0.949 0.329 0.008 0.949 0.312 0.003 0.008 0.504 0.156 - 185.15 12.152 12.152 12.170 -0.072 0.659 0.039 -0.072 0.659 0.026 -0.003 -0.047 0.221 0.027 - 185.20 12.240 12.243 12.256 -0.256 0.561 0.127 -0.256 0.561 0.071 -0.033 -0.144 0.198 0.082 - 185.25 12.224 12.227 12.247 -0.303 0.686 0.111 -0.303 0.686 0.076 -0.034 -0.208 0.288 0.112 - 185.30 12.457 12.471 12.474 -0.583 0.253 0.345 -0.583 0.253 0.087 -0.201 -0.148 0.262 0.132 - 185.35 12.636 12.649 12.649 -0.567 -0.080 0.524 -0.567 -0.080 -0.042 -0.297 0.045 0.301 0.152 - 185.40 12.378 12.402 12.402 -0.765 0.107 0.265 -0.765 0.107 0.028 -0.203 -0.082 0.334 0.110 - 185.45 12.440 12.472 12.472 -0.885 0.036 0.328 -0.885 0.036 0.012 -0.290 -0.032 0.446 0.146 - 185.50 12.391 12.419 12.420 -0.835 -0.087 0.278 -0.835 -0.087 -0.024 -0.233 0.073 0.391 0.122 - 185.55 12.551 12.587 12.588 -0.960 0.157 0.438 -0.960 0.157 0.069 -0.420 -0.151 0.569 0.226 - 185.60 12.509 12.574 12.575 -1.280 -0.154 0.396 -1.280 -0.154 -0.061 -0.507 0.197 0.910 0.274 - 185.65 12.595 12.662 12.663 -1.299 -0.127 0.483 -1.299 -0.127 -0.061 -0.627 0.164 0.969 0.326 - 185.70 12.684 12.718 12.718 -0.929 -0.104 0.571 -0.929 -0.104 -0.060 -0.531 0.097 0.600 0.271 - 185.75 12.855 12.935 12.935 -1.432 -0.038 0.742 -1.432 -0.038 -0.028 -1.063 0.055 1.301 0.532 - 185.80 12.701 12.749 12.749 -1.109 0.040 0.588 -1.109 0.040 0.024 -0.652 -0.045 0.789 0.327 - 185.85 12.707 12.731 12.733 -0.787 -0.218 0.594 -0.787 -0.218 -0.130 -0.468 0.172 0.510 0.257 - 185.90 12.793 12.838 12.845 -1.082 -0.426 0.680 -1.082 -0.426 -0.290 -0.736 0.461 0.908 0.458 - 185.95 12.830 12.886 12.888 -1.204 -0.181 0.717 -1.204 -0.181 -0.130 -0.863 0.218 0.998 0.450 - 186.00 12.751 12.834 12.840 -1.459 -0.390 0.638 -1.459 -0.390 -0.249 -0.931 0.569 1.344 0.560 - 186.05 12.572 12.608 12.613 -0.953 -0.355 0.459 -0.953 -0.355 -0.163 -0.438 0.338 0.623 0.288 - 186.10 12.352 12.383 12.387 -0.885 -0.296 0.239 -0.885 -0.296 -0.071 -0.211 0.262 0.464 0.172 - 186.15 12.571 12.627 12.631 -1.188 -0.316 0.458 -1.188 -0.316 -0.145 -0.544 0.375 0.861 0.338 - 186.20 12.597 12.642 12.644 -1.070 0.211 0.484 -1.070 0.211 0.102 -0.518 -0.226 0.712 0.287 - 186.25 12.960 13.031 13.031 -1.360 0.096 0.847 -1.360 0.096 0.081 -1.152 -0.130 1.289 0.581 - 186.30 12.699 12.786 12.796 -1.493 0.499 0.586 -1.493 0.499 0.293 -0.875 -0.746 1.411 0.593 - 186.35 12.672 12.736 12.738 -1.280 0.215 0.559 -1.280 0.215 0.120 -0.716 -0.275 0.999 0.388 - 186.40 12.668 12.736 12.739 -1.317 0.297 0.555 -1.317 0.297 0.165 -0.731 -0.391 1.065 0.423 - 186.45 12.708 12.762 12.764 -1.180 0.175 0.595 -1.180 0.175 0.104 -0.702 -0.207 0.888 0.369 - 186.50 12.513 12.596 12.597 -1.446 0.108 0.400 -1.446 0.108 0.043 -0.579 -0.157 1.132 0.301 - 186.55 12.560 12.616 12.616 -1.190 0.035 0.447 -1.190 0.035 0.016 -0.532 -0.042 0.808 0.267 - 186.60 12.482 12.524 12.525 -1.035 0.140 0.369 -1.035 0.140 0.052 -0.382 -0.145 0.613 0.206 - 186.65 12.430 12.474 12.476 -1.051 0.201 0.317 -1.051 0.201 0.064 -0.333 -0.212 0.623 0.200 - 186.70 12.455 12.493 12.500 -0.968 0.404 0.343 -0.968 0.404 0.138 -0.332 -0.391 0.609 0.265 - 186.75 12.431 12.497 12.501 -1.283 0.313 0.318 -1.283 0.313 0.100 -0.408 -0.402 0.922 0.291 - 186.80 12.227 12.272 12.285 -1.046 0.570 0.115 -1.046 0.570 0.065 -0.120 -0.596 0.716 0.306 - 186.85 12.554 12.592 12.601 -0.982 0.463 0.441 -0.982 0.463 0.204 -0.433 -0.455 0.686 0.330 - 186.90 12.695 12.735 12.737 -1.001 0.233 0.583 -1.001 0.233 0.136 -0.583 -0.233 0.698 0.321 - 186.95 12.952 12.984 12.993 -0.915 0.471 0.839 -0.915 0.471 0.396 -0.768 -0.431 0.882 0.483 - 187.00 12.922 12.934 12.949 -0.561 0.627 0.809 -0.561 0.627 0.507 -0.453 -0.351 0.681 0.383 - 187.05 12.763 12.778 12.785 -0.609 0.429 0.650 -0.609 0.429 0.279 -0.396 -0.261 0.489 0.275 - 187.10 12.697 12.700 12.709 -0.274 0.460 0.585 -0.274 0.460 0.269 -0.160 -0.126 0.314 0.169 - 187.15 12.561 12.579 12.582 -0.686 0.260 0.448 -0.686 0.260 0.117 -0.307 -0.178 0.369 0.187 - 187.20 12.703 12.720 12.734 -0.671 0.592 0.590 -0.671 0.592 0.349 -0.396 -0.397 0.574 0.330 - 187.25 12.697 12.704 12.734 -0.426 0.863 0.584 -0.426 0.863 0.504 -0.249 -0.368 0.634 0.336 - 187.30 12.864 12.871 12.887 -0.432 0.647 0.751 -0.432 0.647 0.486 -0.324 -0.279 0.584 0.324 - 187.35 12.409 12.444 12.453 -0.931 0.477 0.296 -0.931 0.477 0.141 -0.276 -0.444 0.591 0.271 - 187.40 12.544 12.574 12.578 -0.857 0.334 0.432 -0.857 0.334 0.144 -0.370 -0.287 0.516 0.245 - 187.45 12.699 12.754 12.763 -1.181 0.491 0.586 -1.181 0.491 0.288 -0.692 -0.580 0.990 0.474 - 187.50 12.768 12.831 12.836 -1.271 0.357 0.655 -1.271 0.357 0.234 -0.833 -0.454 1.086 0.488 - 187.55 12.638 12.706 12.726 -1.310 0.717 0.525 -1.310 0.717 0.376 -0.688 -0.939 1.252 0.612 - 187.60 12.898 12.939 12.981 -1.030 1.039 0.785 -1.030 1.039 0.816 -0.809 -1.070 1.378 0.785 - 187.65 13.057 13.091 13.137 -0.952 1.093 0.944 -0.952 1.093 1.032 -0.898 -1.041 1.496 0.859 - 187.70 13.274 13.309 13.331 -0.964 0.766 1.161 -0.964 0.766 0.890 -1.119 -0.739 1.432 0.805 - 187.75 13.250 13.305 13.325 -1.202 0.725 1.138 -1.202 0.725 0.825 -1.368 -0.872 1.633 0.910 - 187.80 13.272 13.326 13.336 -1.191 0.518 1.160 -1.191 0.518 0.600 -1.381 -0.617 1.516 0.814 - 187.85 13.260 13.312 13.346 -1.174 0.956 1.147 -1.174 0.956 1.097 -1.347 -1.123 1.804 1.034 - 187.90 13.103 13.139 13.167 -0.979 0.851 0.990 -0.979 0.851 0.842 -0.969 -0.833 1.332 0.765 - 187.95 13.495 13.523 13.569 -0.865 1.123 1.382 -0.865 1.123 1.553 -1.196 -0.972 1.960 1.094 - 188.00 13.442 13.483 13.545 -1.048 1.292 1.329 -1.048 1.292 1.718 -1.393 -1.354 2.267 1.297 - 188.05 13.300 13.341 13.403 -1.047 1.282 1.187 -1.047 1.282 1.522 -1.244 -1.342 2.075 1.190 - 188.10 13.605 13.644 13.680 -1.030 0.985 1.493 -1.030 0.985 1.470 -1.538 -1.015 2.130 1.179 - 188.15 13.281 13.362 13.398 -1.469 0.975 1.168 -1.469 0.975 1.139 -1.716 -1.433 2.237 1.255 - 188.20 13.289 13.368 13.397 -1.455 0.885 1.176 -1.455 0.885 1.040 -1.711 -1.287 2.141 1.190 - 188.25 12.894 12.945 12.989 -1.144 1.072 0.781 -1.144 1.072 0.838 -0.894 -1.227 1.535 0.867 - 188.30 12.789 12.856 12.891 -1.305 0.953 0.676 -1.305 0.953 0.645 -0.883 -1.244 1.535 0.828 - 188.35 12.841 12.911 12.965 -1.338 1.188 0.729 -1.338 1.188 0.865 -0.975 -1.590 1.866 1.028 - 188.40 12.397 12.458 12.530 -1.230 1.345 0.284 -1.230 1.345 0.383 -0.350 -1.654 1.701 0.867 - 188.45 12.104 12.146 12.204 -1.012 1.196 -0.009 -1.012 1.196 -0.011 0.009 -1.210 1.227 0.605 - 188.50 12.202 12.227 12.275 -0.789 1.089 0.089 -0.789 1.089 0.097 -0.070 -0.859 0.908 0.434 - 188.55 12.400 12.410 12.449 -0.485 0.991 0.287 -0.485 0.991 0.285 -0.139 -0.481 0.650 0.288 - 188.60 12.677 12.687 12.754 -0.482 1.307 0.565 -0.482 1.307 0.738 -0.272 -0.630 1.130 0.504 - 188.65 12.510 12.515 12.586 -0.356 1.334 0.398 -0.356 1.334 0.530 -0.142 -0.475 1.033 0.363 - 188.70 12.221 12.230 12.269 -0.451 0.983 0.108 -0.451 0.983 0.107 -0.049 -0.443 0.590 0.229 - 188.75 12.511 12.547 12.593 -0.942 1.077 0.398 -0.942 1.077 0.429 -0.375 -1.015 1.103 0.582 - 188.80 12.764 12.796 12.838 -0.896 1.042 0.652 -0.896 1.042 0.679 -0.584 -0.934 1.157 0.647 - 188.85 12.315 12.341 12.380 -0.808 0.977 0.202 -0.808 0.977 0.197 -0.163 -0.789 0.824 0.415 - 188.90 12.173 12.203 12.227 -0.851 0.775 0.060 -0.851 0.775 0.047 -0.051 -0.659 0.664 0.331 - 188.95 12.178 12.208 12.231 -0.845 0.751 0.066 -0.845 0.751 0.049 -0.055 -0.635 0.641 0.319 - 189.00 12.256 12.299 12.318 -1.030 0.673 0.143 -1.030 0.673 0.096 -0.148 -0.694 0.768 0.358 - 189.05 12.601 12.625 12.650 -0.789 0.785 0.488 -0.789 0.785 0.383 -0.385 -0.620 0.739 0.412 - 189.10 12.353 12.386 12.404 -0.901 0.674 0.240 -0.901 0.674 0.162 -0.217 -0.607 0.662 0.332 - 189.15 12.314 12.323 12.325 -0.492 0.213 0.201 -0.492 0.213 0.043 -0.099 -0.105 0.164 0.075 - 189.20 12.165 12.190 12.197 -0.778 0.391 0.053 -0.778 0.391 0.021 -0.041 -0.305 0.381 0.154 - 189.25 12.068 12.093 12.102 -0.766 0.474 -0.045 -0.766 0.474 -0.021 0.034 -0.363 0.407 0.183 - 189.30 12.165 12.192 12.193 -0.803 0.202 0.052 -0.803 0.202 0.011 -0.042 -0.163 0.344 0.084 - 189.35 12.239 12.256 12.261 -0.648 0.330 0.126 -0.648 0.330 0.042 -0.082 -0.214 0.272 0.116 - 189.40 12.094 12.101 12.119 -0.416 0.649 -0.019 -0.416 0.649 -0.012 0.008 -0.270 0.297 0.135 - 189.45 12.016 12.016 12.040 0.061 0.761 -0.097 0.061 0.761 -0.074 -0.006 0.046 0.296 0.044 - 189.50 11.997 12.000 12.026 -0.266 0.793 -0.116 -0.266 0.793 -0.092 0.031 -0.211 0.357 0.116 - 189.55 12.159 12.161 12.195 -0.219 0.910 0.046 -0.219 0.910 0.042 -0.010 -0.199 0.439 0.102 - 189.60 12.467 12.469 12.491 -0.224 0.738 0.355 -0.224 0.738 0.262 -0.080 -0.166 0.360 0.160 - 189.65 12.497 12.504 12.514 -0.433 0.498 0.384 -0.433 0.498 0.191 -0.166 -0.215 0.291 0.166 - 189.70 12.531 12.547 12.552 -0.634 0.361 0.418 -0.634 0.361 0.151 -0.265 -0.229 0.353 0.191 - 189.75 12.368 12.370 12.371 -0.244 0.141 0.255 -0.244 0.141 0.036 -0.062 -0.034 0.072 0.040 - 189.80 12.038 12.054 12.061 -0.629 0.393 -0.075 -0.629 0.393 -0.029 0.047 -0.247 0.278 0.127 - 189.85 11.972 11.985 11.986 -0.553 0.139 -0.141 -0.553 0.139 -0.020 0.078 -0.077 0.172 0.056 - 189.90 11.850 11.869 11.871 -0.671 -0.210 -0.262 -0.671 -0.210 0.055 0.176 0.141 0.281 0.116 - 189.95 11.525 11.554 11.554 -0.809 0.030 -0.587 -0.809 0.030 -0.018 0.475 -0.024 0.500 0.238 - 190.00 11.370 11.395 11.411 -0.744 0.607 -0.743 -0.744 0.607 -0.451 0.552 -0.452 0.737 0.422 - 190.05 11.514 11.554 11.562 -0.966 0.419 -0.599 -0.966 0.419 -0.251 0.579 -0.404 0.734 0.375 - 190.10 11.749 11.759 11.761 -0.503 0.207 -0.364 -0.503 0.207 -0.075 0.183 -0.104 0.214 0.112 - 190.15 11.873 11.893 11.895 -0.686 -0.249 -0.240 -0.686 -0.249 0.060 0.165 0.171 0.295 0.122 - 190.20 11.844 11.856 11.856 -0.513 -0.140 -0.268 -0.513 -0.140 0.038 0.138 0.072 0.177 0.080 - 190.25 12.291 12.331 12.332 -0.995 0.094 0.178 -0.995 0.094 0.017 -0.177 -0.093 0.515 0.101 - 190.30 12.477 12.512 12.513 -0.926 0.191 0.365 -0.926 0.191 0.070 -0.338 -0.176 0.513 0.194 - 190.35 12.741 12.752 12.756 -0.534 0.325 0.628 -0.534 0.325 0.204 -0.335 -0.174 0.393 0.215 - 190.40 12.816 12.849 12.850 -0.924 -0.053 0.703 -0.924 -0.053 -0.037 -0.650 0.049 0.675 0.326 - 190.45 12.383 12.399 12.399 -0.618 -0.130 0.270 -0.618 -0.130 -0.035 -0.167 0.080 0.236 0.094 - 190.50 12.433 12.453 12.457 -0.694 -0.339 0.321 -0.694 -0.339 -0.109 -0.223 0.236 0.350 0.171 - 190.55 12.475 12.492 12.500 -0.638 -0.461 0.363 -0.638 -0.461 -0.167 -0.231 0.294 0.376 0.205 - 190.60 12.638 12.647 12.650 -0.473 -0.284 0.525 -0.473 -0.284 -0.149 -0.249 0.134 0.290 0.160 - 190.65 12.561 12.575 12.580 -0.599 -0.362 0.448 -0.599 -0.362 -0.162 -0.268 0.217 0.345 0.190 - 190.70 12.281 12.283 12.283 -0.216 -0.013 0.168 -0.216 -0.013 -0.002 -0.036 0.003 0.038 0.018 - 190.75 12.343 12.344 12.349 -0.070 0.373 0.231 -0.070 0.373 0.086 -0.016 -0.026 0.099 0.046 - 190.80 12.462 12.464 12.474 -0.225 0.491 0.350 -0.225 0.491 0.172 -0.079 -0.111 0.207 0.109 - 190.85 12.468 12.472 12.483 -0.289 0.522 0.356 -0.289 0.522 0.186 -0.103 -0.151 0.241 0.130 - 190.90 12.487 12.493 12.506 -0.366 0.587 0.374 -0.366 0.587 0.220 -0.137 -0.215 0.310 0.168 - 190.95 12.707 12.722 12.738 -0.623 0.641 0.594 -0.623 0.641 0.381 -0.370 -0.399 0.576 0.332 - 191.00 12.973 13.007 13.009 -0.940 0.180 0.861 -0.940 0.180 0.155 -0.809 -0.170 0.828 0.420 - 191.05 12.830 12.885 12.885 -1.184 -0.069 0.718 -1.184 -0.069 -0.050 -0.850 0.082 0.961 0.428 - 191.10 12.642 12.683 12.683 -1.025 0.041 0.529 -1.025 0.041 0.022 -0.543 -0.042 0.666 0.272 - 191.15 12.768 12.822 12.823 -1.170 -0.197 0.655 -1.170 -0.197 -0.129 -0.767 0.231 0.919 0.406 - 191.20 12.920 12.954 12.957 -0.940 -0.273 0.807 -0.940 -0.273 -0.221 -0.758 0.257 0.805 0.415 - 191.25 13.046 13.069 13.075 -0.767 -0.395 0.933 -0.767 -0.395 -0.369 -0.716 0.303 0.807 0.430 - 191.30 13.133 13.137 13.137 -0.328 -0.086 1.020 -0.328 -0.086 -0.087 -0.334 0.028 0.578 0.173 - 191.35 12.812 12.817 12.818 -0.359 0.135 0.699 -0.359 0.135 0.094 -0.251 -0.048 0.318 0.136 - 191.40 12.875 12.881 12.881 -0.384 -0.043 0.762 -0.384 -0.043 -0.033 -0.293 0.016 0.365 0.148 - 191.45 12.720 12.723 12.723 -0.277 -0.014 0.607 -0.277 -0.014 -0.008 -0.168 0.004 0.223 0.084 - 191.50 12.822 12.832 12.834 -0.487 -0.239 0.710 -0.487 -0.239 -0.170 -0.346 0.116 0.399 0.201 - 191.55 13.108 13.108 13.109 0.001 0.090 0.996 0.001 0.090 0.090 0.001 0.000 0.500 0.045 - 191.60 12.911 12.912 12.915 -0.175 0.267 0.798 -0.175 0.267 0.213 -0.139 -0.047 0.369 0.129 - 191.65 13.066 13.066 13.068 -0.102 0.246 0.953 -0.102 0.246 0.234 -0.097 -0.025 0.489 0.127 - 191.70 13.017 13.017 13.018 -0.109 0.138 0.904 -0.109 0.138 0.125 -0.099 -0.015 0.424 0.080 - 191.75 12.964 12.965 12.965 -0.129 0.132 0.851 -0.129 0.132 0.112 -0.110 -0.017 0.379 0.079 - 191.80 13.134 13.134 13.135 0.014 0.126 1.021 0.014 0.126 0.129 0.015 0.002 0.530 0.065 - 191.85 13.097 13.101 13.101 0.323 0.032 0.984 0.323 0.032 0.031 0.318 0.010 0.537 0.160 - 191.90 13.013 13.017 13.019 0.325 0.233 0.900 0.325 0.233 0.210 0.293 0.076 0.485 0.184 - 191.95 13.061 13.065 13.065 0.321 0.036 0.949 0.321 0.036 0.034 0.304 0.011 0.502 0.153 - 192.00 12.994 12.996 12.996 0.220 0.007 0.881 0.220 0.007 0.007 0.194 0.002 0.412 0.097 - 192.05 12.929 12.931 12.933 0.239 -0.215 0.816 0.239 -0.215 -0.175 0.195 -0.051 0.384 0.133 - 192.10 13.052 13.053 13.059 0.147 -0.421 0.939 0.147 -0.421 -0.395 0.138 -0.062 0.540 0.211 - 192.15 12.639 12.647 12.648 0.455 -0.196 0.526 0.455 -0.196 -0.103 0.239 -0.089 0.261 0.137 - 192.20 12.601 12.620 12.624 0.686 -0.309 0.489 0.686 -0.309 -0.151 0.335 -0.212 0.402 0.212 - 192.25 12.465 12.502 12.504 0.954 -0.247 0.353 0.954 -0.247 -0.087 0.336 -0.236 0.547 0.210 - 192.30 12.494 12.501 12.528 0.412 -0.822 0.381 0.412 -0.822 -0.314 0.157 -0.339 0.496 0.244 - 192.35 12.403 12.404 12.432 0.192 -0.833 0.290 0.192 -0.833 -0.242 0.056 -0.160 0.408 0.148 - 192.40 12.400 12.406 12.417 0.382 -0.525 0.287 0.382 -0.525 -0.151 0.110 -0.201 0.252 0.137 - 192.45 12.575 12.583 12.595 0.458 -0.550 0.462 0.458 -0.550 -0.254 0.212 -0.252 0.363 0.208 - 192.50 12.777 12.778 12.801 0.125 -0.759 0.665 0.125 -0.759 -0.504 0.083 -0.094 0.517 0.260 - 192.55 13.019 13.020 13.064 0.190 -1.064 0.906 0.190 -1.064 -0.964 0.172 -0.202 0.995 0.500 - 192.60 12.850 12.856 12.886 0.419 -0.871 0.737 0.419 -0.871 -0.642 0.309 -0.365 0.738 0.400 - 192.65 12.955 12.955 12.970 -0.040 -0.619 0.842 -0.040 -0.619 -0.521 -0.034 0.025 0.547 0.262 - 192.70 13.183 13.188 13.208 -0.362 -0.728 1.070 -0.362 -0.728 -0.779 -0.387 0.263 0.903 0.455 - 192.75 13.389 13.389 13.400 -0.008 -0.539 1.276 -0.008 -0.539 -0.688 -0.010 0.004 0.960 0.344 - 192.80 13.588 13.589 13.594 -0.101 -0.378 1.476 -0.101 -0.378 -0.558 -0.148 0.038 1.165 0.289 - 192.85 13.460 13.461 13.462 0.086 -0.213 1.348 0.086 -0.213 -0.288 0.116 -0.018 0.935 0.155 - 192.90 13.503 13.503 13.507 -0.036 -0.305 1.390 -0.036 -0.305 -0.423 -0.050 0.011 1.013 0.213 - 192.95 13.628 13.628 13.638 -0.019 -0.526 1.515 -0.019 -0.526 -0.798 -0.029 0.010 1.286 0.399 - 193.00 13.459 13.463 13.478 0.319 -0.632 1.346 0.319 -0.632 -0.850 0.430 -0.202 1.156 0.487 - 193.05 13.602 13.603 13.609 0.142 -0.412 1.489 0.142 -0.412 -0.614 0.211 -0.059 1.204 0.326 - 193.10 13.705 13.706 13.710 -0.133 -0.343 1.593 -0.133 -0.343 -0.546 -0.212 0.046 1.336 0.294 - 193.15 13.718 13.719 13.719 -0.179 0.041 1.605 -0.179 0.041 0.065 -0.288 -0.007 1.306 0.148 - 193.20 13.600 13.601 13.601 -0.139 0.039 1.487 -0.139 0.039 0.059 -0.207 -0.005 1.116 0.107 - 193.25 13.335 13.338 13.343 -0.312 0.337 1.222 -0.312 0.337 0.412 -0.382 -0.105 0.852 0.286 - 193.30 13.277 13.278 13.286 -0.192 0.450 1.164 -0.192 0.450 0.523 -0.223 -0.086 0.797 0.288 - 193.35 13.042 13.048 13.053 -0.404 0.373 0.929 -0.404 0.373 0.346 -0.376 -0.151 0.583 0.266 - 193.40 13.368 13.371 13.371 -0.296 0.034 1.255 -0.296 0.034 0.043 -0.371 -0.010 0.832 0.187 - 193.45 13.406 13.419 13.422 -0.591 -0.291 1.293 -0.591 -0.291 -0.376 -0.764 0.172 1.053 0.434 - 193.50 13.574 13.578 13.585 -0.345 -0.434 1.461 -0.345 -0.434 -0.635 -0.504 0.150 1.221 0.412 - 193.55 13.417 13.426 13.435 -0.488 -0.483 1.304 -0.488 -0.483 -0.630 -0.636 0.236 1.086 0.463 - 193.60 13.496 13.496 13.509 0.021 -0.583 1.383 0.021 -0.583 -0.806 0.029 -0.012 1.127 0.403 - 193.65 13.482 13.482 13.482 0.031 -0.127 1.369 0.031 -0.127 -0.174 0.043 -0.004 0.946 0.090 - 193.70 13.216 13.217 13.221 0.170 0.330 1.103 0.170 0.330 0.364 0.188 0.056 0.678 0.207 - 193.75 13.284 13.291 13.291 0.432 0.032 1.171 0.432 0.032 0.038 0.506 0.014 0.780 0.254 - 193.80 13.256 13.275 13.276 0.715 0.199 1.143 0.715 0.199 0.228 0.817 0.143 0.928 0.430 - 193.85 13.241 13.246 13.247 0.365 0.220 1.128 0.365 0.220 0.248 0.412 0.081 0.727 0.244 - 193.90 13.266 13.266 13.267 0.114 -0.115 1.153 0.114 -0.115 -0.132 0.132 -0.013 0.678 0.094 - 193.95 13.195 13.196 13.196 0.128 -0.074 1.082 0.128 -0.074 -0.080 0.139 -0.009 0.597 0.080 - 194.00 13.269 13.271 13.271 -0.194 -0.064 1.156 -0.194 -0.064 -0.075 -0.224 0.012 0.689 0.118 - 194.05 13.226 13.229 13.229 -0.278 -0.061 1.113 -0.278 -0.061 -0.068 -0.310 0.017 0.660 0.159 - 194.10 13.040 13.040 13.048 -0.013 -0.458 0.927 -0.013 -0.458 -0.425 -0.012 0.006 0.535 0.213 - 194.15 13.384 13.385 13.416 0.213 -0.897 1.271 0.213 -0.897 -1.140 0.270 -0.191 1.233 0.594 - 194.20 13.280 13.285 13.299 -0.360 -0.614 1.167 -0.360 -0.614 -0.717 -0.421 0.221 0.935 0.430 - 194.25 13.386 13.416 13.433 -0.888 -0.689 1.273 -0.888 -0.689 -0.877 -1.130 0.611 1.442 0.778 - 194.30 13.347 13.354 13.378 -0.407 -0.814 1.235 -0.407 -0.814 -1.005 -0.503 0.331 1.176 0.586 - 194.35 13.358 13.360 13.365 -0.220 -0.351 1.245 -0.220 -0.351 -0.437 -0.274 0.077 0.861 0.261 - 194.40 13.825 13.826 13.829 -0.165 -0.305 1.712 -0.165 -0.305 -0.523 -0.282 0.050 1.526 0.298 - 194.45 13.622 13.628 13.635 -0.384 -0.456 1.509 -0.384 -0.456 -0.688 -0.579 0.175 1.317 0.458 - 194.50 13.702 13.709 13.718 -0.457 -0.492 1.589 -0.457 -0.492 -0.781 -0.726 0.225 1.487 0.545 - 194.55 13.805 13.824 13.831 -0.716 -0.446 1.693 -0.716 -0.446 -0.755 -1.212 0.320 1.788 0.732 - 194.60 13.557 13.579 13.591 -0.766 -0.569 1.445 -0.766 -0.569 -0.822 -1.107 0.436 1.499 0.723 - 194.65 13.601 13.606 13.617 -0.347 -0.553 1.489 -0.347 -0.553 -0.823 -0.517 0.192 1.321 0.495 - 194.70 13.799 13.803 13.812 -0.315 -0.503 1.686 -0.315 -0.503 -0.848 -0.531 0.158 1.598 0.506 - 194.75 13.968 13.969 13.987 -0.190 -0.709 1.855 -0.190 -0.709 -1.315 -0.352 0.134 1.990 0.684 - 194.80 14.088 14.089 14.107 -0.120 -0.706 1.976 -0.120 -0.706 -1.395 -0.237 0.085 2.208 0.709 - 194.85 14.220 14.221 14.227 -0.157 -0.394 2.107 -0.157 -0.394 -0.831 -0.331 0.062 2.311 0.448 - 194.90 14.192 14.192 14.193 -0.080 0.118 2.079 -0.080 0.118 0.245 -0.166 -0.009 2.172 0.148 - 194.95 13.958 13.960 13.970 -0.240 0.542 1.845 -0.240 0.542 1.001 -0.442 -0.130 1.877 0.551 - 195.00 13.609 13.614 13.623 -0.395 0.483 1.496 -0.395 0.483 0.722 -0.591 -0.191 1.313 0.476 - 195.05 13.460 13.464 13.470 -0.337 0.404 1.347 -0.337 0.404 0.544 -0.454 -0.136 1.046 0.361 - 195.10 13.216 13.218 13.219 -0.203 0.182 1.104 -0.203 0.182 0.200 -0.224 -0.037 0.646 0.151 - 195.15 13.219 13.220 13.220 -0.051 -0.100 1.107 -0.051 -0.100 -0.111 -0.057 0.005 0.619 0.062 - 195.20 13.453 13.461 13.461 -0.456 -0.123 1.340 -0.456 -0.123 -0.165 -0.612 0.056 1.010 0.318 - 195.25 13.257 13.264 13.264 -0.423 -0.053 1.145 -0.423 -0.053 -0.060 -0.484 0.022 0.746 0.244 - 195.30 13.165 13.171 13.171 -0.399 -0.050 1.052 -0.399 -0.050 -0.053 -0.420 0.020 0.634 0.212 - 195.35 13.248 13.254 13.273 -0.402 -0.700 1.135 -0.402 -0.700 -0.795 -0.457 0.282 0.970 0.480 - 195.40 13.578 13.585 13.603 -0.425 -0.697 1.465 -0.425 -0.697 -1.021 -0.622 0.296 1.406 0.616 - 195.45 13.683 13.708 13.711 -0.834 -0.248 1.570 -0.834 -0.248 -0.389 -1.309 0.207 1.611 0.691 - 195.50 13.424 13.469 13.472 -1.102 -0.275 1.311 -1.102 -0.275 -0.360 -1.444 0.302 1.504 0.759 - 195.55 13.500 13.529 13.540 -0.874 -0.542 1.388 -0.874 -0.542 -0.752 -1.213 0.474 1.492 0.752 - 195.60 13.189 13.192 13.198 -0.288 -0.398 1.076 -0.288 -0.398 -0.429 -0.310 0.115 0.700 0.270 - 195.65 12.968 12.968 12.971 -0.014 -0.244 0.855 -0.014 -0.244 -0.209 -0.012 0.003 0.396 0.104 - 195.70 13.266 13.269 13.278 -0.269 -0.496 1.153 -0.269 -0.496 -0.572 -0.310 0.133 0.824 0.332 - 195.75 13.164 13.166 13.179 -0.224 -0.580 1.051 -0.224 -0.580 -0.610 -0.235 0.130 0.746 0.333 - 195.80 13.109 13.110 13.130 -0.156 -0.719 0.997 -0.156 -0.719 -0.716 -0.156 0.112 0.767 0.371 - 195.85 13.283 13.283 13.296 -0.006 -0.584 1.170 -0.006 -0.584 -0.684 -0.008 0.004 0.855 0.342 - 195.90 13.446 13.447 13.471 -0.125 -0.804 1.334 -0.125 -0.804 -1.073 -0.167 0.101 1.221 0.545 - 195.95 13.371 13.374 13.408 -0.284 -0.949 1.259 -0.284 -0.949 -1.194 -0.357 0.269 1.282 0.637 - 196.00 13.231 13.239 13.257 -0.447 -0.682 1.119 -0.447 -0.682 -0.763 -0.501 0.305 0.958 0.481 - 196.05 13.143 13.143 13.157 -0.042 -0.617 1.030 -0.042 -0.617 -0.636 -0.043 0.026 0.722 0.319 - 196.10 12.793 12.797 12.801 -0.317 -0.320 0.681 -0.317 -0.320 -0.218 -0.216 0.101 0.333 0.161 - 196.15 12.874 12.894 12.899 -0.702 -0.383 0.762 -0.702 -0.383 -0.292 -0.535 0.269 0.610 0.333 - 196.20 12.649 12.680 12.693 -0.890 -0.571 0.536 -0.890 -0.571 -0.306 -0.477 0.508 0.703 0.381 - 196.25 12.572 12.583 12.602 -0.526 -0.700 0.459 -0.526 -0.700 -0.321 -0.241 0.368 0.488 0.272 - 196.30 12.599 12.614 12.626 -0.606 -0.561 0.487 -0.606 -0.561 -0.273 -0.295 0.340 0.460 0.263 - 196.35 12.439 12.475 12.514 -0.946 -0.987 0.326 -0.946 -0.987 -0.322 -0.309 0.934 0.988 0.518 - 196.40 12.537 12.585 12.622 -1.093 -0.970 0.424 -1.093 -0.970 -0.412 -0.464 1.061 1.158 0.614 - 196.45 12.626 12.666 12.697 -0.996 -0.897 0.514 -0.996 -0.897 -0.461 -0.512 0.894 1.030 0.564 - 196.50 12.875 12.901 12.929 -0.813 -0.846 0.762 -0.813 -0.846 -0.645 -0.620 0.688 0.979 0.564 - 196.55 13.043 13.058 13.085 -0.617 -0.850 0.930 -0.617 -0.850 -0.790 -0.574 0.524 0.984 0.554 - 196.60 12.854 12.874 12.893 -0.708 -0.708 0.741 -0.708 -0.708 -0.525 -0.525 0.501 0.776 0.448 - 196.65 12.722 12.737 12.745 -0.609 -0.450 0.610 -0.609 -0.450 -0.274 -0.371 0.274 0.473 0.269 - 196.70 12.549 12.571 12.584 -0.746 -0.572 0.436 -0.746 -0.572 -0.250 -0.325 0.427 0.537 0.296 - 196.75 12.537 12.561 12.581 -0.766 -0.711 0.425 -0.766 -0.711 -0.302 -0.325 0.545 0.636 0.351 - 196.80 12.648 12.657 12.689 -0.488 -0.891 0.535 -0.488 -0.891 -0.477 -0.261 0.435 0.659 0.348 - 196.85 12.783 12.792 12.821 -0.492 -0.866 0.670 -0.492 -0.866 -0.580 -0.329 0.426 0.720 0.396 - 196.90 13.046 13.048 13.057 -0.236 -0.486 0.933 -0.236 -0.486 -0.454 -0.220 0.115 0.582 0.259 - 196.95 13.166 13.166 13.167 -0.088 -0.169 1.053 -0.088 -0.169 -0.177 -0.093 0.015 0.573 0.100 - 197.00 13.244 13.247 13.267 -0.270 -0.717 1.132 -0.270 -0.717 -0.811 -0.306 0.194 0.934 0.444 - 197.05 12.858 12.860 12.872 -0.223 -0.549 0.745 -0.223 -0.549 -0.409 -0.166 0.122 0.453 0.229 - 197.10 12.946 12.946 12.946 0.052 -0.011 0.834 0.052 -0.011 -0.009 0.043 -0.001 0.349 0.022 - 197.15 12.819 12.824 12.838 -0.351 -0.614 0.706 -0.351 -0.614 -0.434 -0.248 0.216 0.499 0.272 - 197.20 12.659 12.668 12.691 -0.473 -0.770 0.546 -0.473 -0.770 -0.421 -0.259 0.365 0.558 0.307 - 197.25 12.241 12.253 12.257 -0.553 -0.308 0.128 -0.553 -0.308 -0.040 -0.071 0.171 0.209 0.095 - 197.30 12.037 12.052 12.055 -0.620 -0.267 -0.076 -0.620 -0.267 0.020 0.047 0.166 0.231 0.087 - 197.35 12.381 12.406 12.421 -0.796 -0.614 0.268 -0.796 -0.614 -0.164 -0.213 0.489 0.541 0.279 - 197.40 12.292 12.302 12.309 -0.499 -0.412 0.180 -0.499 -0.412 -0.074 -0.090 0.206 0.226 0.118 - 197.45 12.408 12.418 12.426 -0.495 -0.435 0.295 -0.495 -0.435 -0.128 -0.146 0.215 0.260 0.145 - 197.50 12.516 12.526 12.534 -0.483 -0.450 0.404 -0.483 -0.450 -0.182 -0.195 0.217 0.299 0.172 - 197.55 12.370 12.380 12.394 -0.509 -0.584 0.257 -0.509 -0.584 -0.150 -0.131 0.297 0.333 0.179 - 197.60 12.192 12.207 12.212 -0.605 -0.327 0.079 -0.605 -0.327 -0.026 -0.048 0.198 0.240 0.103 - 197.65 12.333 12.352 12.359 -0.687 -0.408 0.220 -0.687 -0.408 -0.090 -0.151 0.280 0.343 0.165 - 197.70 12.293 12.298 12.314 -0.346 -0.626 0.181 -0.346 -0.626 -0.113 -0.063 0.217 0.273 0.126 - 197.75 12.254 12.262 12.275 -0.427 -0.566 0.141 -0.427 -0.566 -0.080 -0.060 0.242 0.261 0.131 - 197.80 12.389 12.393 12.399 -0.323 -0.394 0.276 -0.323 -0.394 -0.109 -0.089 0.127 0.168 0.095 - 197.85 12.484 12.489 12.494 -0.352 -0.349 0.371 -0.352 -0.349 -0.130 -0.131 0.123 0.192 0.111 - 197.90 12.688 12.694 12.696 -0.388 -0.215 0.575 -0.388 -0.215 -0.124 -0.223 0.083 0.264 0.134 - 197.95 12.284 12.285 12.285 -0.174 0.050 0.171 -0.174 0.050 0.009 -0.030 -0.009 0.031 0.016 - 198.00 12.105 12.105 12.109 -0.038 0.293 -0.008 -0.038 0.293 -0.002 0.000 -0.011 0.044 0.006 - 198.05 12.287 12.287 12.313 0.016 0.804 0.174 0.016 0.804 0.140 0.003 0.013 0.339 0.070 - 198.10 12.252 12.254 12.270 -0.244 0.629 0.139 -0.244 0.629 0.087 -0.034 -0.154 0.238 0.090 - 198.15 12.006 12.011 12.022 -0.357 0.496 -0.107 -0.357 0.496 -0.053 0.038 -0.177 0.193 0.094 - 198.20 12.262 12.272 12.277 -0.511 0.331 0.149 -0.511 0.331 0.049 -0.076 -0.169 0.196 0.096 - 198.25 12.456 12.474 12.482 -0.672 0.436 0.343 -0.672 0.436 0.150 -0.231 -0.293 0.380 0.201 - 198.30 12.579 12.603 12.604 -0.769 0.166 0.467 -0.769 0.166 0.077 -0.359 -0.128 0.418 0.194 - 198.35 12.614 12.620 12.622 -0.376 0.263 0.501 -0.376 0.263 0.132 -0.188 -0.099 0.231 0.125 - 198.40 12.688 12.695 12.696 -0.438 0.122 0.575 -0.438 0.122 0.070 -0.252 -0.053 0.269 0.133 - 198.45 12.673 12.694 12.702 -0.719 0.468 0.561 -0.719 0.468 0.262 -0.403 -0.336 0.525 0.294 - 198.50 12.418 12.450 12.459 -0.902 0.472 0.305 -0.902 0.472 0.144 -0.275 -0.426 0.565 0.264 - 198.55 12.616 12.663 12.667 -1.085 0.305 0.504 -1.085 0.305 0.153 -0.546 -0.330 0.761 0.328 - 198.60 12.704 12.745 12.777 -1.022 0.894 0.591 -1.022 0.894 0.529 -0.605 -0.914 1.097 0.609 - 198.65 12.178 12.242 12.280 -1.246 0.975 0.065 -1.246 0.975 0.064 -0.081 -1.214 1.253 0.609 - 198.70 12.609 12.662 12.678 -1.157 0.631 0.496 -1.157 0.631 0.313 -0.574 -0.730 0.991 0.490 - 198.75 12.883 12.939 12.939 -1.195 0.092 0.770 -1.195 0.092 0.071 -0.921 -0.110 1.016 0.465 - 198.80 12.642 12.707 12.708 -1.284 0.122 0.529 -1.284 0.122 0.065 -0.680 -0.157 0.972 0.350 - 198.85 12.655 12.739 12.741 -1.464 0.221 0.542 -1.464 0.221 0.120 -0.794 -0.323 1.243 0.433 - 198.90 12.589 12.663 12.663 -1.363 0.081 0.476 -1.363 0.081 0.039 -0.649 -0.111 1.046 0.330 - 198.95 12.520 12.577 12.584 -1.199 0.410 0.407 -1.199 0.410 0.167 -0.488 -0.492 0.886 0.356 - 199.00 12.165 12.206 12.217 -0.990 0.529 0.053 -0.990 0.529 0.028 -0.052 -0.524 0.631 0.264 - 199.05 12.183 12.225 12.237 -1.024 0.536 0.070 -1.024 0.536 0.037 -0.071 -0.549 0.670 0.277 - 199.10 11.921 11.967 11.980 -1.048 0.557 -0.192 -1.048 0.557 -0.107 0.201 -0.584 0.723 0.313 - 199.15 11.968 12.042 12.069 -1.334 0.808 -0.145 -1.334 0.808 -0.117 0.194 -1.077 1.226 0.550 - 199.20 12.053 12.121 12.155 -1.283 0.898 -0.060 -1.283 0.898 -0.053 0.076 -1.152 1.228 0.578 - 199.25 12.196 12.242 12.276 -1.060 0.906 0.083 -1.060 0.906 0.076 -0.088 -0.961 0.976 0.484 - 199.30 11.880 11.936 11.984 -1.158 1.071 -0.233 -1.158 1.071 -0.250 0.270 -1.241 1.271 0.647 - 199.35 12.318 12.358 12.410 -0.991 1.131 0.205 -0.991 1.131 0.232 -0.203 -1.120 1.151 0.581 - 199.40 12.472 12.484 12.514 -0.558 0.867 0.359 -0.558 0.867 0.311 -0.200 -0.484 0.596 0.305 - 199.45 12.237 12.263 12.285 -0.804 0.739 0.124 -0.804 0.739 0.091 -0.099 -0.594 0.604 0.305 - 199.50 12.117 12.119 12.147 -0.176 0.833 0.005 -0.176 0.833 0.004 -0.001 -0.146 0.363 0.073 - 199.55 12.278 12.281 12.335 -0.294 1.151 0.165 -0.294 1.151 0.190 -0.049 -0.338 0.720 0.196 - 199.60 12.563 12.566 12.599 -0.292 0.905 0.450 -0.292 0.905 0.407 -0.132 -0.265 0.554 0.252 - 199.65 12.666 12.666 12.688 -0.034 0.745 0.554 -0.034 0.745 0.412 -0.019 -0.025 0.431 0.207 - 199.70 12.701 12.701 12.724 0.047 0.757 0.588 0.047 0.757 0.445 0.028 0.036 0.460 0.224 - 199.75 12.801 12.801 12.804 0.020 0.236 0.689 0.020 0.236 0.163 0.013 0.005 0.265 0.082 - 199.80 12.705 12.709 12.716 -0.302 0.445 0.592 -0.302 0.445 0.263 -0.179 -0.134 0.320 0.173 - 199.85 12.766 12.770 12.789 -0.298 0.705 0.653 -0.298 0.705 0.461 -0.195 -0.210 0.506 0.271 - 199.90 12.912 12.917 12.929 -0.385 0.553 0.799 -0.385 0.553 0.442 -0.308 -0.213 0.546 0.289 - 199.95 13.020 13.024 13.036 -0.297 0.572 0.908 -0.297 0.572 0.519 -0.270 -0.170 0.619 0.304 - 200.00 12.935 12.940 12.959 -0.375 0.704 0.822 -0.375 0.704 0.579 -0.308 -0.264 0.656 0.354 - 200.05 12.909 12.912 12.931 -0.267 0.696 0.797 -0.267 0.696 0.555 -0.213 -0.186 0.595 0.311 - 200.10 12.673 12.677 12.704 -0.305 0.830 0.560 -0.305 0.830 0.465 -0.171 -0.253 0.548 0.278 - 200.15 12.618 12.624 12.644 -0.373 0.712 0.505 -0.373 0.712 0.360 -0.189 -0.266 0.451 0.243 - 200.20 12.749 12.767 12.795 -0.677 0.859 0.636 -0.677 0.859 0.546 -0.431 -0.582 0.800 0.453 - 200.25 12.546 12.569 12.608 -0.763 0.991 0.433 -0.763 0.991 0.429 -0.330 -0.756 0.876 0.465 - 200.30 12.482 12.513 12.532 -0.873 0.704 0.369 -0.873 0.704 0.260 -0.323 -0.615 0.697 0.371 - 200.35 12.725 12.766 12.786 -1.021 0.724 0.612 -1.021 0.724 0.443 -0.625 -0.739 0.970 0.532 - 200.40 12.434 12.455 12.486 -0.721 0.885 0.321 -0.721 0.885 0.284 -0.232 -0.638 0.703 0.368 - 200.45 12.290 12.309 12.312 -0.674 0.311 0.177 -0.674 0.311 0.055 -0.119 -0.210 0.291 0.124 - 200.50 11.933 11.961 11.961 -0.814 0.131 -0.180 -0.814 0.131 -0.024 0.146 -0.107 0.356 0.091 - 200.55 11.786 11.795 11.811 -0.439 0.621 -0.326 -0.439 0.621 -0.203 0.143 -0.273 0.342 0.184 - 200.60 12.256 12.265 12.283 -0.483 0.648 0.143 -0.483 0.648 0.093 -0.069 -0.313 0.337 0.167 - 200.65 12.115 12.130 12.169 -0.599 0.978 0.002 -0.599 0.978 0.002 -0.001 -0.586 0.658 0.293 - 200.70 12.222 12.253 12.288 -0.868 0.938 0.109 -0.868 0.938 0.102 -0.095 -0.814 0.823 0.413 - 200.75 12.224 12.241 12.280 -0.637 0.976 0.111 -0.637 0.976 0.109 -0.071 -0.622 0.686 0.318 - 200.80 11.786 11.804 11.881 -0.658 1.352 -0.327 -0.658 1.352 -0.442 0.215 -0.889 1.183 0.508 - 200.85 11.843 11.863 11.924 -0.690 1.201 -0.270 -0.690 1.201 -0.324 0.186 -0.829 0.996 0.455 - 200.90 11.813 11.823 11.913 -0.481 1.460 -0.299 -0.481 1.460 -0.437 0.144 -0.703 1.226 0.420 - 200.95 11.988 11.992 12.094 -0.297 1.569 -0.124 -0.297 1.569 -0.195 0.037 -0.465 1.283 0.253 - 201.00 12.235 12.240 12.280 -0.359 0.990 0.122 -0.359 0.990 0.121 -0.044 -0.356 0.562 0.189 - 201.05 12.040 12.056 12.103 -0.614 1.062 -0.072 -0.614 1.062 -0.077 0.044 -0.652 0.755 0.329 - 201.10 12.179 12.187 12.271 -0.450 1.438 0.066 -0.450 1.438 0.095 -0.030 -0.647 1.137 0.327 - 201.15 11.965 11.969 12.101 -0.309 1.785 -0.148 -0.309 1.785 -0.265 0.046 -0.551 1.652 0.307 - 201.20 11.833 11.838 11.974 -0.325 1.800 -0.280 -0.325 1.800 -0.503 0.091 -0.585 1.713 0.389 - 201.25 11.826 11.829 11.982 -0.258 1.909 -0.287 -0.258 1.909 -0.547 0.074 -0.492 1.896 0.370 - 201.30 11.787 11.791 11.965 -0.288 2.032 -0.325 -0.288 2.032 -0.661 0.094 -0.584 2.158 0.444 - 201.35 11.992 11.994 12.096 -0.229 1.565 -0.121 -0.229 1.565 -0.189 0.028 -0.358 1.258 0.203 - 201.40 11.811 11.812 11.885 -0.189 1.317 -0.302 -0.189 1.317 -0.398 0.057 -0.248 0.930 0.236 - 201.45 11.973 11.980 12.024 -0.389 1.030 -0.139 -0.389 1.030 -0.143 0.054 -0.401 0.616 0.215 - 201.50 12.081 12.094 12.167 -0.558 1.329 -0.032 -0.558 1.329 -0.042 0.018 -0.741 1.040 0.371 - 201.55 12.342 12.348 12.435 -0.378 1.469 0.229 -0.378 1.469 0.337 -0.087 -0.556 1.176 0.328 - 201.60 12.381 12.386 12.490 -0.359 1.611 0.268 -0.359 1.611 0.431 -0.096 -0.578 1.397 0.364 - 201.65 12.205 12.212 12.330 -0.437 1.697 0.092 -0.437 1.697 0.156 -0.040 -0.741 1.539 0.379 - 201.70 12.085 12.091 12.232 -0.381 1.854 -0.028 -0.381 1.854 -0.052 0.011 -0.706 1.792 0.354 - 201.75 11.986 11.996 12.120 -0.484 1.732 -0.127 -0.484 1.732 -0.220 0.061 -0.838 1.625 0.434 - 201.80 12.116 12.117 12.237 -0.184 1.713 0.003 -0.184 1.713 0.005 -0.001 -0.315 1.484 0.158 - 201.85 12.249 12.260 12.342 -0.510 1.423 0.136 -0.510 1.423 0.194 -0.070 -0.726 1.152 0.378 - 201.90 12.410 12.423 12.519 -0.559 1.550 0.297 -0.559 1.550 0.461 -0.166 -0.867 1.402 0.498 - 201.95 12.489 12.494 12.625 -0.338 1.816 0.376 -0.338 1.816 0.683 -0.127 -0.614 1.777 0.464 - 202.00 12.040 12.047 12.165 -0.404 1.692 -0.073 -0.404 1.692 -0.123 0.029 -0.684 1.515 0.348 - 202.05 11.819 11.823 12.006 -0.287 2.093 -0.294 -0.287 2.093 -0.615 0.084 -0.601 2.274 0.432 - 202.10 11.747 11.757 11.918 -0.478 1.955 -0.366 -0.478 1.955 -0.715 0.175 -0.934 2.092 0.595 - 202.15 11.977 11.979 12.107 -0.198 1.753 -0.135 -0.198 1.753 -0.237 0.027 -0.347 1.565 0.211 - 202.20 11.964 11.973 12.077 -0.466 1.579 -0.148 -0.466 1.579 -0.234 0.069 -0.736 1.367 0.388 - 202.25 12.138 12.138 12.301 -0.126 1.994 0.025 -0.126 1.994 0.049 -0.003 -0.252 1.996 0.128 - 202.30 12.370 12.371 12.541 -0.129 2.062 0.257 -0.129 2.062 0.531 -0.033 -0.265 2.167 0.297 - 202.35 12.349 12.350 12.494 -0.178 1.888 0.236 -0.178 1.888 0.446 -0.042 -0.336 1.826 0.280 - 202.40 12.468 12.468 12.597 -0.094 1.792 0.355 -0.094 1.792 0.637 -0.033 -0.168 1.672 0.330 - 202.45 12.385 12.385 12.516 0.094 1.804 0.272 0.094 1.804 0.490 0.025 0.169 1.669 0.260 - 202.50 12.433 12.434 12.572 0.160 1.855 0.320 0.160 1.855 0.594 0.051 0.296 1.784 0.333 - 202.55 12.813 12.815 12.959 0.164 1.928 0.701 0.164 1.928 1.351 0.115 0.316 2.117 0.696 - 202.60 12.683 12.683 12.851 0.081 2.072 0.570 0.081 2.072 1.182 0.046 0.168 2.312 0.597 - 202.65 12.531 12.532 12.692 -0.136 2.007 0.419 -0.136 2.007 0.840 -0.057 -0.272 2.110 0.442 - 202.70 12.418 12.419 12.572 -0.179 1.956 0.305 -0.179 1.956 0.596 -0.055 -0.350 1.975 0.347 - 202.75 12.422 12.426 12.597 -0.299 2.072 0.309 -0.299 2.072 0.641 -0.093 -0.619 2.239 0.448 - 202.80 12.262 12.262 12.403 0.088 1.861 0.149 0.088 1.861 0.278 0.013 0.163 1.746 0.161 - 202.85 12.187 12.197 12.375 0.477 2.096 0.075 0.477 2.096 0.156 0.036 1.000 2.313 0.506 - 202.90 12.276 12.286 12.487 0.489 2.233 0.163 0.489 2.233 0.365 0.080 1.092 2.627 0.577 - 202.95 12.422 12.424 12.572 0.247 1.923 0.309 0.247 1.923 0.594 0.076 0.475 1.927 0.382 - 203.00 12.301 12.302 12.450 0.157 1.914 0.189 0.157 1.914 0.361 0.030 0.300 1.861 0.235 - 203.05 12.718 12.718 12.884 -0.057 2.063 0.605 -0.057 2.063 1.249 -0.034 -0.117 2.312 0.627 - 203.10 12.311 12.312 12.448 -0.165 1.839 0.198 -0.165 1.839 0.364 -0.033 -0.304 1.724 0.238 - 203.15 11.998 11.998 12.120 0.052 1.716 -0.115 0.052 1.716 -0.197 -0.006 0.089 1.480 0.108 - 203.20 12.141 12.143 12.247 0.234 1.597 0.028 0.234 1.597 0.044 0.006 0.373 1.303 0.188 - 203.25 12.147 12.149 12.260 0.210 1.645 0.035 0.210 1.645 0.057 0.007 0.345 1.375 0.175 - 203.30 12.216 12.216 12.336 0.043 1.718 0.103 0.043 1.718 0.177 0.004 0.074 1.482 0.096 - 203.35 12.312 12.314 12.434 0.224 1.724 0.199 0.224 1.724 0.343 0.044 0.386 1.531 0.259 - 203.40 12.461 12.464 12.628 0.267 2.028 0.348 0.267 2.028 0.706 0.093 0.542 2.153 0.447 - 203.45 12.643 12.643 12.824 0.068 2.146 0.530 0.068 2.146 1.137 0.036 0.147 2.445 0.574 - 203.50 12.778 12.778 12.880 0.008 1.622 0.665 0.008 1.622 1.078 0.005 0.013 1.536 0.539 - 203.55 12.772 12.772 12.859 0.053 1.497 0.659 0.053 1.497 0.986 0.035 0.079 1.339 0.495 - 203.60 12.603 12.603 12.710 0.140 1.640 0.490 0.140 1.640 0.803 0.069 0.229 1.474 0.419 - 203.65 12.494 12.494 12.567 -0.103 1.349 0.381 -0.103 1.349 0.514 -0.039 -0.138 0.988 0.267 - 203.70 12.276 12.284 12.325 -0.434 1.006 0.163 -0.434 1.006 0.164 -0.071 -0.437 0.613 0.236 - 203.75 12.540 12.548 12.571 -0.452 0.759 0.427 -0.452 0.759 0.324 -0.193 -0.343 0.481 0.255 - 203.80 12.426 12.426 12.452 0.067 0.800 0.313 0.067 0.800 0.250 0.021 0.054 0.371 0.128 - 203.85 12.332 12.332 12.392 0.122 1.213 0.219 0.122 1.213 0.265 0.027 0.148 0.767 0.152 - 203.90 12.219 12.219 12.297 -0.101 1.385 0.106 -0.101 1.385 0.147 -0.011 -0.139 0.970 0.101 - 203.95 12.445 12.447 12.525 -0.257 1.391 0.332 -0.257 1.391 0.462 -0.085 -0.358 1.056 0.295 - 204.00 12.150 12.150 12.259 -0.090 1.629 0.037 -0.090 1.629 0.060 -0.003 -0.147 1.331 0.079 - 204.05 11.881 11.883 11.985 0.181 1.560 -0.231 0.181 1.560 -0.361 -0.042 0.283 1.260 0.230 - 204.10 11.724 11.726 11.869 0.197 1.835 -0.388 0.197 1.835 -0.713 -0.077 0.362 1.778 0.401 - 204.15 11.194 11.200 11.327 0.388 1.688 -0.919 0.388 1.688 -1.552 -0.356 0.654 1.923 0.861 - 204.20 11.430 11.438 11.585 0.438 1.839 -0.683 0.438 1.839 -1.256 -0.299 0.806 2.019 0.761 - 204.25 11.405 11.405 11.548 -0.066 1.810 -0.708 -0.066 1.810 -1.281 0.047 -0.120 1.890 0.644 - 204.30 11.483 11.485 11.690 -0.169 2.180 -0.629 -0.169 2.180 -1.372 0.106 -0.368 2.589 0.712 - 204.35 11.521 11.522 11.808 -0.142 2.585 -0.592 -0.142 2.585 -1.530 0.084 -0.367 3.526 0.788 - 204.40 11.564 11.568 11.905 -0.297 2.813 -0.549 -0.297 2.813 -1.544 0.163 -0.835 4.152 0.882 - 204.45 11.803 11.803 12.096 0.012 2.645 -0.310 0.012 2.645 -0.820 -0.004 0.032 3.546 0.410 - 204.50 12.195 12.198 12.370 -0.267 2.057 0.082 -0.267 2.057 0.169 -0.022 -0.549 2.154 0.288 - 204.55 11.829 11.832 12.025 -0.273 2.143 -0.284 -0.273 2.143 -0.608 0.077 -0.585 2.373 0.423 - 204.60 11.717 11.723 11.982 -0.367 2.478 -0.395 -0.367 2.478 -0.980 0.145 -0.908 3.216 0.672 - 204.65 11.793 11.796 12.036 -0.267 2.390 -0.320 -0.267 2.390 -0.764 0.085 -0.639 2.942 0.500 - 204.70 11.855 11.861 12.022 -0.386 1.960 -0.258 -0.386 1.960 -0.505 0.100 -0.757 2.029 0.458 - 204.75 12.140 12.155 12.313 -0.618 1.963 0.027 -0.618 1.963 0.053 -0.017 -1.213 2.117 0.607 - 204.80 12.228 12.240 12.346 -0.531 1.613 0.116 -0.531 1.613 0.187 -0.061 -0.857 1.449 0.440 - 204.85 12.314 12.337 12.437 -0.751 1.576 0.201 -0.751 1.576 0.317 -0.151 -1.183 1.544 0.617 - 204.90 12.157 12.179 12.289 -0.716 1.647 0.045 -0.716 1.647 0.074 -0.032 -1.179 1.613 0.591 - 204.95 12.140 12.157 12.259 -0.637 1.575 0.027 -0.637 1.575 0.043 -0.018 -1.004 1.444 0.502 - 205.00 11.944 11.979 12.113 -0.905 1.802 -0.168 -0.905 1.802 -0.303 0.152 -1.631 2.047 0.833 - 205.05 12.120 12.154 12.295 -0.901 1.858 0.008 -0.901 1.858 0.014 -0.007 -1.674 2.132 0.837 - 205.10 12.033 12.067 12.173 -0.904 1.599 -0.079 -0.904 1.599 -0.127 0.072 -1.446 1.690 0.727 - 205.15 11.977 12.029 12.115 -1.119 1.438 -0.136 -1.119 1.438 -0.195 0.152 -1.610 1.670 0.814 - 205.20 11.836 11.923 12.023 -1.444 1.546 -0.277 -1.444 1.546 -0.429 0.400 -2.233 2.277 1.155 - 205.25 11.794 11.810 11.857 -0.613 1.052 -0.319 -0.613 1.052 -0.335 0.195 -0.645 0.792 0.376 - 205.30 11.497 11.500 11.532 -0.275 0.859 -0.616 -0.275 0.859 -0.529 0.169 -0.236 0.597 0.302 - 205.35 11.130 11.150 11.160 -0.658 0.478 -0.982 -0.658 0.478 -0.470 0.646 -0.314 0.813 0.429 - 205.40 11.250 11.274 11.279 -0.739 0.316 -0.863 -0.739 0.316 -0.273 0.638 -0.234 0.696 0.366 - 205.45 11.153 11.168 11.178 -0.589 0.453 -0.960 -0.589 0.453 -0.435 0.565 -0.267 0.737 0.381 - 205.50 11.204 11.222 11.229 -0.644 0.387 -0.909 -0.644 0.387 -0.352 0.586 -0.249 0.696 0.364 - 205.55 11.439 11.454 11.458 -0.577 0.304 -0.674 -0.577 0.304 -0.205 0.389 -0.176 0.440 0.237 - 205.60 11.541 11.568 11.569 -0.791 0.151 -0.572 -0.791 0.151 -0.086 0.452 -0.119 0.488 0.238 - 205.65 11.272 11.301 11.301 -0.806 0.108 -0.841 -0.806 0.108 -0.091 0.678 -0.087 0.684 0.345 - 205.70 11.292 11.346 11.353 -1.108 0.391 -0.821 -1.108 0.391 -0.321 0.909 -0.433 1.027 0.529 - 205.75 11.660 11.743 11.747 -1.395 0.306 -0.453 -1.395 0.306 -0.139 0.632 -0.427 1.123 0.388 - 205.80 11.642 11.705 11.727 -1.210 0.709 -0.470 -1.210 0.709 -0.333 0.569 -0.858 1.094 0.541 - 205.85 11.263 11.314 11.333 -1.078 0.653 -0.850 -1.078 0.653 -0.555 0.916 -0.704 1.155 0.641 - 205.90 11.577 11.643 11.658 -1.239 0.593 -0.536 -1.239 0.593 -0.318 0.664 -0.734 1.086 0.520 - 205.95 11.595 11.685 11.696 -1.449 0.504 -0.518 -1.449 0.504 -0.261 0.751 -0.730 1.310 0.540 - 206.00 11.692 11.786 11.817 -1.485 0.854 -0.420 -1.485 0.854 -0.359 0.624 -1.269 1.556 0.729 - 206.05 11.074 11.143 11.204 -1.245 1.168 -1.039 -1.245 1.168 -1.214 1.294 -1.454 1.997 1.147 - 206.10 11.188 11.234 11.289 -1.014 1.113 -0.925 -1.014 1.113 -1.030 0.938 -1.129 1.562 0.897 - 206.15 11.353 11.394 11.427 -0.968 0.868 -0.760 -0.968 0.868 -0.659 0.736 -0.840 1.134 0.648 - 206.20 11.450 11.473 11.518 -0.717 1.015 -0.663 -0.717 1.015 -0.673 0.475 -0.728 0.992 0.550 - 206.25 11.564 11.596 11.641 -0.859 1.027 -0.549 -0.859 1.027 -0.564 0.471 -0.882 1.047 0.574 - 206.30 11.497 11.526 11.571 -0.821 1.018 -0.616 -0.821 1.018 -0.627 0.506 -0.835 1.045 0.580 - 206.35 11.464 11.495 11.556 -0.835 1.186 -0.648 -0.835 1.186 -0.769 0.541 -0.990 1.262 0.683 - 206.40 11.228 11.251 11.302 -0.721 1.077 -0.885 -0.721 1.077 -0.953 0.638 -0.776 1.231 0.692 - 206.45 11.097 11.134 11.193 -0.912 1.147 -1.016 -0.912 1.147 -1.165 0.926 -1.046 1.590 0.910 - 206.50 10.897 10.926 10.986 -0.800 1.142 -1.216 -0.800 1.142 -1.389 0.972 -0.914 1.711 0.963 - 206.55 10.967 10.989 11.058 -0.693 1.237 -1.146 -0.693 1.237 -1.417 0.793 -0.856 1.661 0.918 - 206.60 11.255 11.271 11.293 -0.601 0.707 -0.858 -0.601 0.707 -0.607 0.516 -0.425 0.799 0.451 - 206.65 11.189 11.204 11.216 -0.563 0.518 -0.923 -0.563 0.518 -0.478 0.520 -0.291 0.719 0.382 - 206.70 11.267 11.280 11.288 -0.533 0.432 -0.846 -0.533 0.432 -0.366 0.450 -0.230 0.593 0.312 - 206.75 11.121 11.122 11.149 -0.173 0.783 -0.992 -0.173 0.783 -0.777 0.172 -0.135 0.814 0.403 - 206.80 10.943 10.953 10.977 -0.469 0.728 -1.170 -0.469 0.728 -0.852 0.548 -0.341 1.059 0.535 - 206.85 11.025 11.032 11.067 -0.375 0.885 -1.088 -0.375 0.885 -0.962 0.408 -0.332 1.053 0.548 - 206.90 11.214 11.220 11.234 -0.360 0.567 -0.899 -0.360 0.567 -0.510 0.323 -0.204 0.629 0.319 - 206.95 11.317 11.323 11.336 -0.367 0.531 -0.796 -0.367 0.531 -0.423 0.292 -0.195 0.525 0.275 - 207.00 10.957 10.979 11.005 -0.698 0.759 -1.156 -0.698 0.759 -0.878 0.806 -0.530 1.200 0.652 - 207.05 10.704 10.714 10.729 -0.458 0.558 -1.408 -0.458 0.558 -0.786 0.644 -0.255 1.252 0.524 - 207.10 10.685 10.689 10.698 -0.278 0.439 -1.427 -0.278 0.439 -0.626 0.397 -0.122 1.154 0.376 - 207.15 10.664 10.664 10.664 -0.061 -0.029 -1.449 -0.061 -0.029 0.043 0.089 0.002 1.051 0.049 - 207.20 10.621 10.623 10.624 -0.244 -0.095 -1.492 -0.244 -0.095 0.141 0.363 0.023 1.148 0.195 - 207.25 10.562 10.568 10.569 -0.346 -0.175 -1.551 -0.346 -0.175 0.271 0.536 0.060 1.277 0.302 - 207.30 10.654 10.656 10.657 -0.217 -0.115 -1.459 -0.217 -0.115 0.167 0.317 0.025 1.094 0.179 - 207.35 10.841 10.846 10.850 -0.312 -0.292 -1.272 -0.312 -0.292 0.371 0.397 0.091 0.900 0.276 - 207.40 10.868 10.868 10.870 0.111 -0.168 -1.245 0.111 -0.168 0.209 -0.139 -0.019 0.795 0.126 - 207.45 11.180 11.181 11.182 0.196 -0.154 -0.933 0.196 -0.154 0.144 -0.183 -0.030 0.466 0.117 - 207.50 11.277 11.279 11.279 0.231 0.072 -0.836 0.231 0.072 -0.061 -0.193 0.017 0.379 0.102 - 207.55 11.252 11.252 11.252 0.012 0.046 -0.861 0.012 0.046 -0.039 -0.010 0.001 0.372 0.020 - 207.60 10.912 10.912 10.915 -0.116 0.267 -1.201 -0.116 0.267 -0.321 0.140 -0.031 0.764 0.176 - 207.65 10.867 10.868 10.883 -0.130 0.576 -1.246 -0.130 0.576 -0.718 0.162 -0.075 0.951 0.370 - 207.70 10.775 10.776 10.797 -0.195 0.673 -1.338 -0.195 0.673 -0.900 0.260 -0.131 1.140 0.473 - 207.75 10.586 10.603 10.618 -0.591 0.567 -1.526 -0.591 0.567 -0.865 0.902 -0.335 1.500 0.647 - 207.80 10.451 10.462 10.471 -0.468 0.444 -1.661 -0.468 0.444 -0.737 0.778 -0.208 1.588 0.546 - 207.85 10.757 10.781 10.787 -0.717 0.358 -1.356 -0.717 0.358 -0.485 0.971 -0.256 1.239 0.558 - 207.90 11.025 11.040 11.043 -0.589 -0.221 -1.088 -0.589 -0.221 0.241 0.641 0.130 0.790 0.349 - 207.95 11.201 11.207 11.214 -0.353 -0.388 -0.911 -0.353 -0.388 0.353 0.322 0.137 0.553 0.248 - 208.00 10.911 10.911 10.913 -0.010 -0.213 -1.202 -0.010 -0.213 0.256 0.012 0.002 0.745 0.128 - 208.05 10.934 10.937 10.939 -0.253 -0.221 -1.179 -0.253 -0.221 0.261 0.299 0.056 0.751 0.200 - 208.10 10.793 10.799 10.799 -0.363 -0.079 -1.320 -0.363 -0.079 0.105 0.479 0.029 0.940 0.245 - 208.15 10.598 10.632 10.633 -0.860 -0.111 -1.515 -0.860 -0.111 0.169 1.304 0.096 1.524 0.659 - 208.20 10.500 10.536 10.539 -0.867 0.244 -1.612 -0.867 0.244 -0.393 1.398 -0.211 1.705 0.734 - 208.25 10.525 10.548 10.555 -0.707 0.388 -1.588 -0.707 0.388 -0.617 1.122 -0.274 1.586 0.655 - 208.30 10.332 10.341 10.346 -0.412 0.347 -1.780 -0.412 0.347 -0.617 0.733 -0.143 1.730 0.484 - 208.35 10.203 10.213 10.214 -0.455 0.105 -1.909 -0.455 0.105 -0.200 0.869 -0.048 1.932 0.447 - 208.40 10.351 10.357 10.360 -0.344 0.258 -1.761 -0.344 0.258 -0.455 0.606 -0.089 1.644 0.382 - 208.45 10.471 10.476 10.481 -0.340 0.313 -1.642 -0.340 0.313 -0.514 0.559 -0.107 1.455 0.383 - 208.50 10.432 10.438 10.442 -0.358 0.260 -1.681 -0.358 0.260 -0.437 0.602 -0.093 1.510 0.375 - 208.55 10.173 10.181 10.187 -0.405 0.355 -1.940 -0.405 0.355 -0.688 0.785 -0.144 2.026 0.527 - 208.60 10.572 10.573 10.574 -0.103 0.143 -1.541 -0.103 0.143 -0.220 0.158 -0.015 1.202 0.136 - 208.65 10.598 10.598 10.601 -0.027 0.274 -1.515 -0.027 0.274 -0.415 0.041 -0.007 1.186 0.209 - 208.70 10.338 10.345 10.359 -0.368 0.537 -1.775 -0.368 0.537 -0.953 0.652 -0.197 1.786 0.586 - 208.75 10.298 10.304 10.305 -0.351 0.171 -1.815 -0.351 0.171 -0.310 0.638 -0.060 1.723 0.356 - 208.80 10.318 10.328 10.328 -0.459 -0.075 -1.795 -0.459 -0.075 0.134 0.825 0.034 1.720 0.418 - 208.85 10.307 10.315 10.316 -0.415 -0.118 -1.806 -0.415 -0.118 0.212 0.750 0.049 1.724 0.390 - 208.90 10.620 10.644 10.654 -0.715 -0.470 -1.493 -0.715 -0.470 0.702 1.067 0.336 1.480 0.660 - 208.95 10.316 10.340 10.347 -0.695 -0.399 -1.796 -0.695 -0.399 0.716 1.248 0.277 1.934 0.733 - 209.00 10.335 10.347 10.354 -0.500 -0.381 -1.778 -0.500 -0.381 0.678 0.890 0.191 1.779 0.567 - 209.05 10.103 10.119 10.120 -0.566 -0.131 -2.010 -0.566 -0.131 0.263 1.137 0.074 2.188 0.585 - 209.10 9.983 9.999 9.999 -0.571 -0.042 -2.130 -0.571 -0.042 0.090 1.216 0.024 2.433 0.610 - 209.15 10.037 10.067 10.068 -0.776 -0.081 -2.075 -0.776 -0.081 0.167 1.610 0.063 2.458 0.810 - 209.20 9.950 9.971 9.971 -0.656 -0.028 -2.163 -0.656 -0.028 0.060 1.419 0.018 2.555 0.710 - 209.25 10.189 10.197 10.198 -0.409 0.112 -1.924 -0.409 0.112 -0.215 0.788 -0.046 1.941 0.409 - 209.30 10.262 10.267 10.270 -0.318 -0.235 -1.851 -0.318 -0.235 0.436 0.589 0.075 1.791 0.368 - 209.35 10.060 10.060 10.063 -0.096 -0.256 -2.053 -0.096 -0.256 0.525 0.197 0.025 2.145 0.281 - 209.40 9.909 9.909 9.916 -0.059 -0.374 -2.204 -0.059 -0.374 0.824 0.131 0.022 2.500 0.417 - 209.45 9.672 9.682 9.684 -0.438 -0.174 -2.440 -0.438 -0.174 0.425 1.068 0.076 3.089 0.576 - 209.50 9.572 9.603 9.605 -0.763 -0.225 -2.540 -0.763 -0.225 0.573 1.939 0.172 3.544 1.015 - 209.55 9.638 9.682 9.688 -0.927 -0.343 -2.475 -0.927 -0.343 0.849 2.295 0.318 3.552 1.234 - 209.60 9.688 9.744 9.760 -1.045 -0.555 -2.425 -1.045 -0.555 1.347 2.535 0.581 3.641 1.464 - 209.65 9.711 9.735 9.758 -0.684 -0.661 -2.402 -0.684 -0.661 1.587 1.643 0.452 3.336 1.164 - 209.70 10.064 10.103 10.113 -0.887 -0.453 -2.049 -0.887 -0.453 0.928 1.817 0.401 2.594 1.040 - 209.75 9.574 9.607 9.607 -0.788 0.075 -2.538 -0.788 0.075 -0.189 2.001 -0.059 3.535 1.005 - 209.80 9.449 9.458 9.472 -0.416 0.514 -2.664 -0.416 0.514 -1.368 1.109 -0.214 3.767 0.887 - 209.85 9.362 9.376 9.380 -0.499 0.300 -2.751 -0.499 0.300 -0.824 1.372 -0.149 3.952 0.804 - 209.90 9.666 9.677 9.683 -0.465 0.328 -2.447 -0.465 0.328 -0.803 1.138 -0.153 3.155 0.701 - 209.95 9.823 9.839 9.840 -0.560 0.157 -2.290 -0.560 0.157 -0.359 1.282 -0.088 2.791 0.667 - 210.00 9.746 9.763 9.763 -0.576 0.000 -2.367 -0.576 0.000 -0.001 1.364 -0.000 2.967 0.682 - 210.05 9.707 9.708 9.711 -0.118 -0.256 -2.405 -0.118 -0.256 0.617 0.284 0.030 2.933 0.340 - 210.10 9.754 9.754 9.758 0.059 -0.284 -2.359 0.059 -0.284 0.670 -0.138 -0.017 2.825 0.342 - 210.15 9.660 9.660 9.666 -0.042 -0.340 -2.453 -0.042 -0.340 0.834 0.102 0.014 3.068 0.420 - 210.20 9.662 9.666 9.669 0.267 -0.232 -2.450 0.267 -0.232 0.569 -0.655 -0.062 3.065 0.435 - 210.25 9.552 9.559 9.564 0.356 -0.321 -2.561 0.356 -0.321 0.823 -0.912 -0.114 3.394 0.617 - 210.30 9.594 9.618 9.630 0.678 -0.483 -2.519 0.678 -0.483 1.217 -1.708 -0.328 3.519 1.062 - 210.35 9.859 9.870 9.874 0.464 -0.279 -2.254 0.464 -0.279 0.629 -1.046 -0.129 2.686 0.614 - 210.40 9.785 9.792 9.794 0.390 -0.179 -2.328 0.390 -0.179 0.416 -0.909 -0.070 2.802 0.501 - 210.45 9.831 9.841 9.845 0.432 -0.276 -2.281 0.432 -0.276 0.630 -0.986 -0.119 2.734 0.588 - 210.50 9.810 9.838 9.841 0.741 -0.212 -2.302 0.741 -0.212 0.489 -1.706 -0.157 2.947 0.891 - 210.55 9.615 9.628 9.632 0.491 -0.279 -2.498 0.491 -0.279 0.696 -1.226 -0.137 3.278 0.708 - 210.60 9.528 9.540 9.541 0.477 -0.145 -2.585 0.477 -0.145 0.375 -1.233 -0.069 3.465 0.645 - 210.65 9.443 9.445 9.462 0.170 -0.573 -2.670 0.170 -0.573 1.530 -0.454 -0.097 3.743 0.800 - 210.70 9.634 9.634 9.666 0.018 -0.782 -2.479 0.018 -0.782 1.938 -0.044 -0.014 3.378 0.969 - 210.75 9.845 9.856 9.907 -0.461 -0.999 -2.267 -0.461 -0.999 2.264 1.046 0.461 3.175 1.268 - 210.80 10.066 10.073 10.143 -0.394 -1.185 -2.047 -0.394 -1.185 2.427 0.807 0.467 2.876 1.300 - 210.85 9.997 9.998 10.047 -0.071 -1.000 -2.116 -0.071 -1.000 2.115 0.151 0.071 2.740 1.061 - 210.90 10.063 10.069 10.105 -0.343 -0.847 -2.050 -0.343 -0.847 1.737 0.702 0.290 2.518 0.948 - 210.95 10.037 10.041 10.117 -0.294 -1.238 -2.076 -0.294 -1.238 2.571 0.611 0.364 2.965 1.334 - 211.00 9.873 9.878 9.896 -0.298 -0.602 -2.240 -0.298 -0.602 1.348 0.668 0.180 2.733 0.758 - 211.05 10.015 10.025 10.027 -0.458 -0.171 -2.098 -0.458 -0.171 0.358 0.960 0.078 2.320 0.514 - 211.10 10.088 10.157 10.158 -1.185 0.128 -2.025 -1.185 0.128 -0.260 2.399 -0.152 2.760 1.209 - 211.15 10.128 10.175 10.176 -0.979 -0.141 -1.985 -0.979 -0.141 0.279 1.944 0.138 2.459 0.984 - 211.20 10.187 10.198 10.206 -0.485 -0.384 -1.926 -0.485 -0.384 0.740 0.935 0.187 2.046 0.603 - 211.25 10.382 10.406 10.412 -0.706 -0.360 -1.731 -0.706 -0.360 0.623 1.222 0.254 1.813 0.698 - 211.30 10.553 10.572 10.575 -0.645 -0.242 -1.560 -0.645 -0.242 0.377 1.006 0.156 1.454 0.543 - 211.35 10.716 10.725 10.732 -0.441 -0.378 -1.397 -0.441 -0.378 0.528 0.616 0.167 1.144 0.414 - 211.40 10.570 10.577 10.579 -0.403 -0.180 -1.543 -0.403 -0.180 0.277 0.621 0.072 1.288 0.342 - 211.45 10.605 10.641 10.641 -0.879 -0.031 -1.508 -0.879 -0.031 0.047 1.325 0.027 1.523 0.663 - 211.50 10.721 10.769 10.769 -1.011 -0.024 -1.391 -1.011 -0.024 0.033 1.406 0.024 1.479 0.703 - 211.55 11.299 11.318 11.318 -0.663 0.004 -0.814 -0.663 0.004 -0.003 0.539 -0.003 0.551 0.270 - 211.60 11.350 11.369 11.369 -0.658 -0.117 -0.763 -0.658 -0.117 0.089 0.502 0.077 0.514 0.258 - 211.65 11.427 11.434 11.434 -0.409 -0.088 -0.686 -0.409 -0.088 0.060 0.281 0.036 0.323 0.145 - 211.70 11.572 11.572 11.583 -0.011 -0.496 -0.541 -0.011 -0.496 0.268 0.006 0.005 0.269 0.134 - 211.75 11.174 11.178 11.178 0.315 -0.015 -0.939 0.315 -0.015 0.014 -0.295 -0.005 0.490 0.148 - 211.80 11.407 11.419 11.419 0.509 0.079 -0.706 0.509 0.079 -0.055 -0.359 0.040 0.382 0.183 - 211.85 11.325 11.333 11.335 0.427 0.214 -0.788 0.427 0.214 -0.169 -0.336 0.091 0.424 0.194 - 211.90 11.323 11.324 11.329 0.144 0.333 -0.790 0.144 0.333 -0.263 -0.114 0.048 0.378 0.145 - 211.95 11.383 11.385 11.392 -0.202 0.387 -0.730 -0.202 0.387 -0.283 0.147 -0.078 0.362 0.164 - 212.00 11.491 11.505 11.515 -0.561 0.479 -0.622 -0.561 0.479 -0.298 0.349 -0.269 0.466 0.266 - 212.05 11.272 11.294 11.294 -0.712 -0.006 -0.841 -0.712 -0.006 0.005 0.599 0.004 0.607 0.299 - 212.10 11.078 11.102 11.103 -0.733 0.081 -1.035 -0.733 0.081 -0.084 0.758 -0.060 0.807 0.383 - 212.15 10.982 11.009 11.014 -0.758 0.336 -1.130 -0.758 0.336 -0.380 0.857 -0.255 0.983 0.486 - 212.20 10.889 10.924 10.926 -0.877 0.214 -1.224 -0.877 0.214 -0.262 1.073 -0.188 1.156 0.560 - 212.25 11.531 11.565 11.566 -0.884 0.158 -0.582 -0.884 0.158 -0.092 0.515 -0.140 0.573 0.271 - 212.30 11.151 11.181 11.206 -0.824 0.744 -0.962 -0.824 0.744 -0.716 0.793 -0.613 1.079 0.616 - 212.35 10.908 10.948 10.978 -0.940 0.812 -1.205 -0.940 0.812 -0.979 1.133 -0.764 1.498 0.840 - 212.40 10.781 10.804 10.833 -0.700 0.786 -1.331 -0.700 0.786 -1.046 0.932 -0.550 1.440 0.753 - 212.45 10.943 10.953 10.973 -0.466 0.656 -1.169 -0.466 0.656 -0.767 0.545 -0.305 1.007 0.494 - 212.50 11.376 11.405 11.412 -0.821 0.389 -0.737 -0.821 0.389 -0.286 0.605 -0.319 0.684 0.371 - 212.55 11.172 11.178 11.184 -0.359 0.377 -0.941 -0.359 0.377 -0.355 0.338 -0.135 0.578 0.254 - 212.60 11.141 11.145 11.169 -0.300 0.722 -0.972 -0.300 0.722 -0.702 0.291 -0.216 0.778 0.395 - 212.65 11.275 11.276 11.324 0.108 1.045 -0.838 0.108 1.045 -0.875 -0.090 0.113 0.902 0.443 - 212.70 11.418 11.419 11.486 0.160 1.235 -0.695 0.160 1.235 -0.858 -0.111 0.198 1.017 0.444 - 212.75 11.499 11.499 11.543 -0.102 1.003 -0.614 -0.102 1.003 -0.616 0.063 -0.103 0.697 0.314 - 212.80 11.634 11.634 11.687 0.098 1.112 -0.479 0.098 1.112 -0.532 -0.047 0.109 0.737 0.273 - 212.85 11.541 11.543 11.605 -0.184 1.195 -0.571 -0.184 1.195 -0.683 0.105 -0.220 0.895 0.363 - 212.90 11.338 11.342 11.425 -0.275 1.379 -0.775 -0.275 1.379 -1.068 0.213 -0.379 1.288 0.576 - 212.95 11.448 11.448 11.573 -0.023 1.696 -0.665 -0.023 1.696 -1.127 0.015 -0.039 1.660 0.564 - 213.00 11.202 11.202 11.285 -0.000 1.364 -0.911 -0.000 1.364 -1.242 0.000 -0.000 1.345 0.621 - 213.05 11.203 11.205 11.299 -0.226 1.449 -0.910 -0.226 1.449 -1.318 0.206 -0.328 1.489 0.687 - 213.10 11.114 11.114 11.210 -0.053 1.464 -0.999 -0.053 1.464 -1.462 0.053 -0.077 1.572 0.733 - 213.15 11.323 11.325 11.416 0.208 1.440 -0.790 0.208 1.440 -1.137 -0.164 0.299 1.370 0.594 - 213.20 11.624 11.625 11.745 0.116 1.674 -0.488 0.116 1.674 -0.817 -0.057 0.194 1.527 0.421 - 213.25 11.710 11.712 11.820 0.227 1.594 -0.403 0.227 1.594 -0.643 -0.092 0.363 1.378 0.372 - 213.30 11.700 11.700 11.782 0.020 1.388 -0.413 0.020 1.388 -0.573 -0.008 0.028 1.048 0.287 - 213.35 11.478 11.483 11.553 -0.353 1.265 -0.635 -0.353 1.265 -0.803 0.224 -0.447 1.064 0.473 - 213.40 11.690 11.699 11.774 -0.457 1.327 -0.423 -0.457 1.327 -0.561 0.193 -0.607 1.075 0.424 - 213.45 11.806 11.815 11.931 -0.464 1.654 -0.307 -0.464 1.654 -0.507 0.142 -0.768 1.523 0.466 - 213.50 11.973 12.008 12.090 -0.919 1.403 -0.140 -0.919 1.403 -0.196 0.129 -1.289 1.417 0.655 - 213.55 12.133 12.159 12.232 -0.808 1.327 0.020 -0.808 1.327 0.026 -0.016 -1.073 1.208 0.536 - 213.60 11.864 11.882 11.970 -0.654 1.454 -0.249 -0.654 1.454 -0.362 0.163 -0.951 1.302 0.515 - 213.65 11.770 11.776 11.853 -0.391 1.352 -0.343 -0.391 1.352 -0.464 0.134 -0.528 1.050 0.358 - 213.70 11.887 11.888 11.935 0.097 1.062 -0.225 0.097 1.062 -0.239 -0.022 0.103 0.594 0.131 - 213.75 12.011 12.019 12.049 0.414 0.849 -0.101 0.414 0.849 -0.086 -0.042 0.351 0.451 0.182 - 213.80 11.586 11.587 11.654 0.129 1.246 -0.527 0.129 1.246 -0.656 -0.068 0.161 0.923 0.340 - 213.85 11.516 11.521 11.553 0.358 0.856 -0.597 0.358 0.856 -0.511 -0.214 0.306 0.608 0.316 - 213.90 11.480 11.487 11.524 0.397 0.931 -0.633 0.397 0.931 -0.590 -0.251 0.369 0.713 0.370 - 213.95 11.401 11.403 11.437 0.194 0.890 -0.712 0.194 0.890 -0.633 -0.138 0.173 0.668 0.335 - 214.00 11.333 11.333 11.399 -0.002 1.219 -0.779 -0.002 1.219 -0.950 0.002 -0.003 1.047 0.475 - 214.05 11.697 11.697 11.735 -0.079 0.943 -0.416 -0.079 0.943 -0.392 0.033 -0.074 0.534 0.200 - 214.10 11.650 11.650 11.685 -0.039 0.901 -0.463 -0.039 0.901 -0.417 0.018 -0.035 0.513 0.209 - 214.15 11.820 11.821 11.848 -0.156 0.795 -0.293 -0.156 0.795 -0.233 0.046 -0.124 0.371 0.134 - 214.20 11.776 11.776 11.827 -0.015 1.097 -0.337 -0.015 1.097 -0.369 0.005 -0.017 0.659 0.185 - 214.25 12.074 12.083 12.141 0.456 1.189 -0.038 0.456 1.189 -0.046 -0.018 0.543 0.812 0.272 - 214.30 11.751 11.761 11.849 0.478 1.444 -0.362 0.478 1.444 -0.523 -0.173 0.690 1.222 0.441 - 214.35 11.678 11.694 11.790 0.596 1.504 -0.434 0.596 1.504 -0.653 -0.259 0.897 1.403 0.570 - 214.40 11.820 11.831 11.904 0.508 1.319 -0.293 0.508 1.319 -0.386 -0.149 0.670 1.042 0.394 - 214.45 11.941 11.945 11.995 0.311 1.100 -0.172 0.311 1.100 -0.189 -0.054 0.342 0.668 0.197 - 214.50 11.882 11.884 11.939 0.206 1.143 -0.231 0.206 1.143 -0.263 -0.047 0.235 0.701 0.178 - 214.55 12.087 12.091 12.136 0.343 1.035 -0.026 0.343 1.035 -0.027 -0.009 0.355 0.595 0.178 - 214.60 11.999 12.001 12.040 0.218 0.963 -0.114 0.218 0.963 -0.109 -0.025 0.210 0.494 0.119 - 214.65 11.969 11.974 12.033 0.358 1.184 -0.144 0.358 1.184 -0.170 -0.051 0.424 0.775 0.230 - 214.70 11.908 11.916 11.997 0.449 1.385 -0.205 0.449 1.385 -0.284 -0.092 0.621 1.081 0.345 - 214.75 11.795 11.796 11.860 0.116 1.233 -0.317 0.116 1.233 -0.391 -0.037 0.143 0.817 0.209 - 214.80 12.016 12.018 12.101 -0.205 1.422 -0.097 -0.205 1.422 -0.138 0.020 -0.292 1.037 0.162 - 214.85 11.968 11.969 12.039 0.167 1.303 -0.145 0.167 1.303 -0.189 -0.024 0.217 0.873 0.144 - 214.90 12.044 12.044 12.131 0.063 1.452 -0.069 0.063 1.452 -0.100 -0.004 0.092 1.058 0.068 - 214.95 11.960 11.961 12.042 0.099 1.391 -0.152 0.099 1.391 -0.212 -0.015 0.137 0.984 0.126 - 215.00 11.627 11.632 11.729 0.329 1.507 -0.485 0.329 1.507 -0.732 -0.160 0.496 1.308 0.449 - 215.05 11.550 11.567 11.679 0.623 1.618 -0.563 0.623 1.618 -0.910 -0.351 1.008 1.661 0.702 - 215.10 11.402 11.425 11.559 0.740 1.751 -0.711 0.740 1.751 -1.246 -0.526 1.295 2.060 0.936 - 215.15 11.222 11.232 11.362 0.478 1.714 -0.891 0.478 1.714 -1.527 -0.426 0.819 1.980 0.892 - 215.20 11.143 11.160 11.240 0.623 1.335 -0.970 0.623 1.335 -1.295 -0.605 0.832 1.556 0.827 - 215.25 11.039 11.056 11.122 0.610 1.207 -1.074 0.610 1.207 -1.296 -0.655 0.737 1.491 0.814 - 215.30 11.191 11.193 11.259 0.211 1.212 -0.922 0.211 1.212 -1.117 -0.194 0.256 1.181 0.581 - 215.35 10.959 10.959 11.032 -0.014 1.267 -1.154 -0.014 1.267 -1.462 0.016 -0.018 1.468 0.731 - 215.40 11.099 11.100 11.139 -0.141 0.938 -1.014 -0.141 0.938 -0.951 0.143 -0.132 0.964 0.485 - 215.45 11.184 11.184 11.203 0.030 0.643 -0.929 0.030 0.643 -0.597 -0.028 0.019 0.638 0.299 - 215.50 10.887 10.891 10.931 0.296 0.941 -1.226 0.296 0.941 -1.154 -0.363 0.279 1.238 0.621 - 215.55 10.908 10.908 10.951 0.049 0.962 -1.205 0.049 0.962 -1.159 -0.059 0.047 1.189 0.581 - 215.60 11.036 11.036 11.142 0.098 1.533 -1.077 0.098 1.533 -1.651 -0.106 0.150 1.760 0.831 - 215.65 10.999 11.000 11.113 0.116 1.583 -1.114 0.116 1.583 -1.763 -0.129 0.184 1.880 0.889 - 215.70 11.325 11.329 11.441 0.304 1.599 -0.788 0.304 1.599 -1.260 -0.239 0.485 1.635 0.686 - 215.75 11.376 11.386 11.622 0.482 2.332 -0.737 0.482 2.332 -1.719 -0.355 1.123 3.108 1.042 - 215.80 11.118 11.140 11.306 0.700 1.933 -0.995 0.700 1.933 -1.924 -0.696 1.353 2.609 1.226 - 215.85 11.100 11.129 11.272 0.801 1.787 -1.012 0.801 1.787 -1.809 -0.811 1.431 2.429 1.222 - 215.90 11.091 11.126 11.261 0.871 1.740 -1.021 0.871 1.740 -1.777 -0.890 1.516 2.414 1.250 - 215.95 10.765 10.797 10.970 0.830 1.939 -1.348 0.830 1.939 -2.614 -1.118 1.609 3.134 1.634 - 216.00 10.698 10.737 10.935 0.911 2.070 -1.415 0.911 2.070 -2.929 -1.289 1.887 3.559 1.857 - 216.05 10.675 10.728 10.927 1.070 2.074 -1.438 1.070 2.074 -2.982 -1.539 2.220 3.757 2.012 - 216.10 11.168 11.220 11.444 1.073 2.254 -0.945 1.073 2.254 -2.129 -1.013 2.418 3.561 1.689 - 216.15 11.713 11.781 11.955 1.262 2.033 -0.399 1.262 2.033 -0.812 -0.504 2.566 2.942 1.369 - 216.20 11.781 11.825 11.951 1.009 1.732 -0.331 1.009 1.732 -0.574 -0.334 1.748 2.064 0.935 - 216.25 12.226 12.245 12.358 0.682 1.668 0.114 0.682 1.668 0.189 0.077 1.138 1.631 0.578 - 216.30 12.020 12.057 12.146 0.934 1.475 -0.093 0.934 1.475 -0.136 -0.086 1.378 1.529 0.694 - 216.35 11.850 11.932 12.044 1.395 1.638 -0.263 1.395 1.638 -0.430 -0.366 2.284 2.348 1.176 - 216.40 11.783 11.870 11.963 1.435 1.487 -0.329 1.435 1.487 -0.490 -0.473 2.135 2.190 1.120 - 216.45 11.760 11.811 11.905 1.091 1.491 -0.352 1.091 1.491 -0.525 -0.385 1.627 1.769 0.876 - 216.50 11.800 11.846 11.937 1.038 1.472 -0.313 1.038 1.472 -0.460 -0.325 1.528 1.671 0.814 - 216.55 11.810 11.856 11.975 1.039 1.685 -0.303 1.039 1.685 -0.510 -0.315 1.751 2.005 0.925 - 216.60 11.850 11.898 12.008 1.064 1.625 -0.263 1.064 1.625 -0.427 -0.280 1.729 1.921 0.901 - 216.65 11.502 11.547 11.662 1.026 1.631 -0.611 1.026 1.631 -0.997 -0.627 1.673 2.043 1.023 - 216.70 11.112 11.118 11.220 0.352 1.509 -1.001 0.352 1.509 -1.510 -0.353 0.532 1.702 0.820 - 216.75 11.221 11.245 11.364 0.738 1.642 -0.892 0.738 1.642 -1.465 -0.659 1.213 2.019 1.006 - 216.80 11.165 11.195 11.346 0.814 1.847 -0.948 0.814 1.847 -1.750 -0.771 1.503 2.486 1.216 - 216.85 11.257 11.286 11.477 0.802 2.086 -0.856 0.802 2.086 -1.785 -0.686 1.672 2.864 1.270 - 216.90 11.246 11.279 11.393 0.866 1.609 -0.867 0.866 1.609 -1.396 -0.751 1.394 2.046 1.056 - 216.95 11.255 11.285 11.365 0.815 1.350 -0.858 0.815 1.350 -1.158 -0.699 1.100 1.612 0.872 - 217.00 11.335 11.350 11.449 0.581 1.500 -0.777 0.581 1.500 -1.166 -0.452 0.872 1.596 0.762 - 217.05 11.305 11.318 11.405 0.548 1.400 -0.808 0.548 1.400 -1.130 -0.443 0.767 1.456 0.718 - 217.10 11.202 11.216 11.277 0.565 1.165 -0.911 0.565 1.165 -1.061 -0.515 0.658 1.253 0.675 - 217.15 11.746 11.751 11.806 0.362 1.133 -0.367 0.362 1.133 -0.416 -0.133 0.410 0.775 0.300 - 217.20 11.878 11.898 11.968 0.700 1.291 -0.235 0.700 1.291 -0.303 -0.165 0.904 1.106 0.484 - 217.25 12.071 12.088 12.181 0.655 1.502 -0.042 0.655 1.502 -0.063 -0.028 0.983 1.343 0.493 - 217.30 11.965 11.988 12.081 0.748 1.493 -0.148 0.748 1.493 -0.221 -0.111 1.116 1.404 0.572 - 217.35 11.921 11.946 12.069 0.784 1.713 -0.192 0.784 1.713 -0.329 -0.151 1.343 1.793 0.695 - 217.40 11.811 11.816 11.885 0.342 1.274 -0.301 0.342 1.274 -0.384 -0.103 0.435 0.915 0.295 - 217.45 11.776 11.790 11.853 0.570 1.220 -0.337 0.570 1.220 -0.411 -0.192 0.695 0.963 0.415 - 217.50 11.999 12.023 12.069 0.762 1.057 -0.114 0.762 1.057 -0.121 -0.087 0.806 0.856 0.410 - 217.55 11.642 11.645 11.684 0.252 0.949 -0.470 0.252 0.949 -0.447 -0.119 0.239 0.593 0.260 - 217.60 11.547 11.548 11.597 0.185 1.061 -0.566 0.185 1.061 -0.601 -0.105 0.196 0.740 0.320 - 217.65 11.894 11.898 11.930 0.305 0.882 -0.219 0.305 0.882 -0.193 -0.067 0.269 0.459 0.169 - 217.70 11.539 11.559 11.593 0.684 0.886 -0.574 0.684 0.886 -0.508 -0.393 0.606 0.791 0.441 - 217.75 11.451 11.475 11.519 0.744 1.009 -0.662 0.744 1.009 -0.668 -0.492 0.751 1.005 0.559 - 217.80 11.660 11.680 11.701 0.675 0.698 -0.452 0.675 0.698 -0.316 -0.305 0.471 0.574 0.322 - 217.85 11.956 11.961 11.980 0.351 0.680 -0.157 0.351 0.680 -0.107 -0.055 0.239 0.305 0.134 - 217.90 12.125 12.125 12.141 0.061 0.631 0.012 0.061 0.631 0.008 0.001 0.039 0.201 0.020 - 217.95 11.802 11.802 11.808 0.115 0.348 -0.311 0.115 0.348 -0.108 -0.036 0.040 0.116 0.060 - 218.00 11.955 11.957 11.960 0.228 0.260 -0.158 0.228 0.260 -0.041 -0.036 0.059 0.072 0.040 - 218.05 12.088 12.088 12.107 0.133 0.674 -0.025 0.133 0.674 -0.017 -0.003 0.090 0.236 0.046 - 218.10 12.117 12.118 12.137 0.183 0.664 0.004 0.183 0.664 0.003 0.001 0.121 0.237 0.061 - 218.15 12.196 12.197 12.214 0.177 0.644 0.083 0.177 0.644 0.053 0.015 0.114 0.227 0.063 - 218.20 12.431 12.437 12.444 0.381 0.423 0.319 0.381 0.423 0.135 0.121 0.161 0.213 0.121 - 218.25 12.197 12.210 12.218 0.579 0.428 0.084 0.579 0.428 0.036 0.049 0.248 0.262 0.127 - 218.30 11.934 11.939 11.944 0.344 0.355 -0.179 0.344 0.355 -0.064 -0.062 0.122 0.138 0.075 - 218.35 11.579 11.581 11.610 0.203 0.824 -0.534 0.203 0.824 -0.440 -0.108 0.167 0.503 0.241 - 218.40 11.540 11.541 11.579 -0.138 0.946 -0.573 -0.138 0.946 -0.542 0.079 -0.130 0.621 0.282 - 218.45 11.799 11.799 11.807 -0.083 0.428 -0.314 -0.083 0.428 -0.135 0.026 -0.036 0.145 0.071 - 218.50 12.139 12.143 12.144 -0.313 0.135 0.026 -0.313 0.135 0.004 -0.008 -0.042 0.058 0.022 - 218.55 12.269 12.282 12.282 -0.556 0.067 0.156 -0.556 0.067 0.011 -0.087 -0.037 0.169 0.048 - 218.60 12.105 12.109 12.109 -0.328 -0.074 -0.008 -0.328 -0.074 0.001 0.003 0.024 0.057 0.012 - 218.65 12.149 12.158 12.158 -0.462 -0.112 0.036 -0.462 -0.112 -0.004 -0.017 0.052 0.114 0.027 - 218.70 12.030 12.042 12.043 -0.530 -0.141 -0.083 -0.530 -0.141 0.012 0.044 0.075 0.154 0.044 - 218.75 11.760 11.776 11.776 -0.607 -0.038 -0.353 -0.607 -0.038 0.014 0.214 0.023 0.247 0.108 - 218.80 11.985 11.988 11.991 -0.252 -0.290 -0.128 -0.252 -0.290 0.037 0.032 0.073 0.082 0.044 - 218.85 12.115 12.117 12.120 -0.216 -0.304 0.002 -0.216 -0.304 -0.001 -0.000 0.066 0.070 0.033 - 218.90 11.869 11.873 11.882 -0.296 -0.469 -0.243 -0.296 -0.469 0.114 0.072 0.139 0.184 0.097 - 218.95 11.948 11.948 11.953 0.081 -0.318 -0.165 0.081 -0.318 0.052 -0.013 -0.026 0.068 0.030 - 219.00 12.014 12.014 12.015 0.098 -0.139 -0.099 0.098 -0.139 0.014 -0.010 -0.014 0.019 0.011 - 219.05 11.882 11.882 11.890 -0.014 -0.433 -0.231 -0.014 -0.433 0.100 0.003 0.006 0.121 0.050 - 219.10 12.085 12.085 12.090 -0.027 -0.359 -0.028 -0.027 -0.359 0.010 0.001 0.010 0.065 0.007 - 219.15 12.168 12.170 12.174 -0.215 -0.322 0.055 -0.215 -0.322 -0.018 -0.012 0.069 0.076 0.036 - 219.20 12.062 12.063 12.063 0.182 0.025 -0.051 0.182 0.025 -0.001 -0.009 0.004 0.018 0.005 - 219.25 12.188 12.188 12.188 0.075 -0.024 0.075 0.075 -0.024 -0.002 0.006 -0.002 0.006 0.003 - 219.30 12.460 12.460 12.460 -0.098 -0.034 0.347 -0.098 -0.034 -0.012 -0.034 0.003 0.066 0.018 - 219.35 12.212 12.215 12.217 0.243 -0.239 0.099 0.243 -0.239 -0.024 0.024 -0.058 0.063 0.034 - 219.40 12.056 12.058 12.058 0.217 -0.090 -0.057 0.217 -0.090 0.005 -0.012 -0.019 0.029 0.012 - 219.45 12.573 12.574 12.575 0.175 -0.114 0.460 0.175 -0.114 -0.052 0.081 -0.020 0.128 0.049 - 219.50 12.404 12.405 12.406 -0.133 -0.155 0.291 -0.133 -0.155 -0.045 -0.039 0.021 0.063 0.031 - 219.55 12.162 12.166 12.172 -0.307 0.367 0.049 -0.307 0.367 0.018 -0.015 -0.113 0.116 0.058 - 219.60 12.057 12.058 12.065 0.141 0.412 -0.056 0.141 0.412 -0.023 -0.008 0.058 0.096 0.031 - 219.65 11.721 11.721 11.722 0.051 0.138 -0.392 0.051 0.138 -0.054 -0.020 0.007 0.088 0.029 - 219.70 11.662 11.662 11.663 -0.035 0.126 -0.451 -0.035 0.126 -0.057 0.016 -0.004 0.110 0.030 - 219.75 11.593 11.607 11.607 -0.570 -0.036 -0.520 -0.570 -0.036 0.019 0.297 0.021 0.298 0.149 - 219.80 11.191 11.195 11.201 -0.303 0.368 -0.922 -0.303 0.368 -0.339 0.280 -0.112 0.539 0.227 - 219.85 11.581 11.581 11.581 0.062 0.003 -0.532 0.062 0.003 -0.002 -0.033 0.000 0.143 0.016 - 219.90 11.309 11.309 11.309 -0.101 0.003 -0.804 -0.101 0.003 -0.003 0.082 -0.000 0.328 0.041 - 219.95 11.094 11.095 11.096 -0.174 -0.135 -1.019 -0.174 -0.135 0.137 0.177 0.023 0.543 0.112 - 220.00 11.053 11.058 11.061 -0.338 -0.241 -1.060 -0.338 -0.241 0.256 0.358 0.081 0.648 0.224 - 220.05 10.741 10.746 10.750 -0.325 -0.278 -1.372 -0.325 -0.278 0.381 0.445 0.090 1.032 0.297 - 220.10 10.710 10.713 10.719 -0.237 -0.353 -1.402 -0.237 -0.353 0.495 0.332 0.084 1.074 0.301 - 220.15 10.950 10.963 10.973 -0.549 -0.468 -1.163 -0.549 -0.468 0.545 0.638 0.257 0.937 0.439 - 220.20 11.094 11.112 11.121 -0.636 -0.430 -1.019 -0.636 -0.430 0.438 0.648 0.274 0.814 0.414 - 220.25 11.143 11.174 11.190 -0.833 -0.591 -0.970 -0.833 -0.591 0.573 0.807 0.492 0.991 0.553 - 220.30 11.084 11.109 11.120 -0.741 -0.497 -1.029 -0.741 -0.497 0.511 0.763 0.368 0.927 0.495 - 220.35 11.244 11.258 11.295 -0.557 -0.916 -0.869 -0.557 -0.916 0.796 0.484 0.511 0.953 0.531 - 220.40 10.978 10.978 11.028 -0.090 -1.049 -1.135 -0.090 -1.049 1.191 0.102 0.094 1.198 0.599 - 220.45 11.064 11.064 11.118 -0.091 -1.099 -1.049 -0.091 -1.099 1.153 0.096 0.100 1.159 0.581 - 220.50 11.302 11.308 11.351 0.343 -0.996 -0.810 0.343 -0.996 0.808 -0.278 -0.342 0.884 0.460 - 220.55 11.517 11.520 11.535 0.255 -0.587 -0.596 0.255 -0.587 0.350 -0.152 -0.150 0.382 0.205 - 220.60 11.459 11.460 11.462 -0.102 -0.233 -0.654 -0.102 -0.233 0.152 0.067 0.024 0.246 0.084 - 220.65 11.700 11.701 11.705 -0.110 -0.330 -0.413 -0.110 -0.330 0.136 0.046 0.036 0.146 0.074 - 220.70 11.695 11.701 11.706 -0.393 -0.330 -0.418 -0.393 -0.330 0.138 0.164 0.130 0.219 0.125 - 220.75 11.496 11.497 11.499 -0.093 -0.250 -0.617 -0.093 -0.250 0.154 0.057 0.023 0.226 0.083 - 220.80 11.750 11.750 11.764 -0.051 -0.579 -0.363 -0.051 -0.579 0.210 0.018 0.029 0.235 0.107 - 220.85 11.913 11.915 11.973 -0.206 -1.178 -0.200 -0.206 -1.178 0.235 0.041 0.243 0.735 0.170 - 220.90 11.918 11.925 11.978 -0.388 -1.127 -0.194 -0.388 -1.127 0.219 0.075 0.437 0.730 0.248 - 220.95 12.101 12.109 12.172 -0.426 -1.235 -0.011 -0.426 -1.235 0.014 0.005 0.526 0.854 0.263 - 221.00 12.057 12.061 12.126 -0.304 -1.262 -0.056 -0.304 -1.262 0.071 0.017 0.384 0.844 0.195 - 221.05 11.828 11.830 11.870 -0.182 -0.971 -0.284 -0.182 -0.971 0.276 0.052 0.176 0.529 0.166 - 221.10 12.042 12.044 12.094 -0.191 -1.100 -0.071 -0.191 -1.100 0.078 0.013 0.210 0.625 0.112 - 221.15 11.821 11.822 11.860 -0.106 -0.948 -0.291 -0.106 -0.948 0.276 0.031 0.100 0.497 0.148 - 221.20 11.603 11.603 11.651 0.058 -1.050 -0.510 0.058 -1.050 0.536 -0.030 -0.061 0.683 0.270 - 221.25 11.647 11.648 11.688 0.135 -0.975 -0.466 0.135 -0.975 0.454 -0.063 -0.131 0.593 0.239 - 221.30 11.794 11.794 11.839 0.115 -1.023 -0.319 0.115 -1.023 0.326 -0.037 -0.117 0.581 0.174 - 221.35 11.751 11.752 11.790 0.153 -0.951 -0.362 0.153 -0.951 0.344 -0.055 -0.145 0.529 0.189 - 221.40 11.670 11.672 11.713 -0.210 -0.982 -0.443 -0.210 -0.982 0.435 0.093 0.207 0.603 0.245 - 221.45 11.486 11.486 11.519 -0.062 -0.870 -0.627 -0.062 -0.870 0.545 0.039 0.054 0.577 0.275 - 221.50 11.054 11.055 11.057 -0.055 -0.220 -1.058 -0.055 -0.220 0.232 0.058 0.012 0.586 0.120 - 221.55 11.099 11.103 11.103 0.284 -0.129 -1.014 0.284 -0.129 0.131 -0.288 -0.037 0.563 0.159 - 221.60 11.182 11.185 11.185 0.259 0.031 -0.930 0.259 0.031 -0.029 -0.241 0.008 0.467 0.122 - 221.65 11.246 11.246 11.251 0.041 -0.326 -0.867 0.041 -0.326 0.282 -0.035 -0.013 0.430 0.142 - 221.70 11.380 11.381 11.398 0.126 -0.620 -0.733 0.126 -0.620 0.455 -0.092 -0.078 0.469 0.235 - 221.75 11.316 11.317 11.323 0.122 -0.372 -0.796 0.122 -0.372 0.296 -0.097 -0.045 0.394 0.157 - 221.80 11.445 11.446 11.449 0.124 -0.273 -0.667 0.124 -0.273 0.182 -0.083 -0.034 0.268 0.101 - 221.85 11.452 11.453 11.457 0.092 -0.314 -0.660 0.092 -0.314 0.208 -0.060 -0.029 0.272 0.109 - 221.90 11.267 11.296 11.309 0.802 -0.554 -0.846 0.802 -0.554 0.469 -0.678 -0.444 0.832 0.468 - 221.95 11.157 11.223 11.281 1.215 -1.141 -0.955 1.215 -1.141 1.090 -1.161 -1.386 1.845 1.056 - 222.00 11.177 11.216 11.250 0.935 -0.882 -0.936 0.935 -0.882 0.826 -0.876 -0.825 1.264 0.729 - 222.05 11.212 11.256 11.297 0.993 -0.961 -0.901 0.993 -0.961 0.866 -0.895 -0.954 1.361 0.784 - 222.10 11.268 11.318 11.362 1.071 -0.998 -0.845 1.071 -0.998 0.843 -0.905 -1.068 1.428 0.817 - 222.15 11.215 11.280 11.309 1.212 -0.807 -0.898 1.212 -0.807 0.725 -1.089 -0.978 1.464 0.817 - 222.20 11.323 11.355 11.385 0.858 -0.817 -0.790 0.858 -0.817 0.645 -0.677 -0.700 1.013 0.584 - 222.25 11.344 11.375 11.397 0.841 -0.712 -0.769 0.841 -0.712 0.548 -0.646 -0.599 0.903 0.519 - 222.30 11.405 11.452 11.479 1.037 -0.785 -0.708 1.037 -0.785 0.556 -0.734 -0.814 1.097 0.615 - 222.35 11.501 11.527 11.556 0.775 -0.822 -0.612 0.775 -0.822 0.503 -0.474 -0.637 0.825 0.470 - 222.40 11.623 11.643 11.665 0.690 -0.707 -0.490 0.690 -0.707 0.346 -0.338 -0.488 0.608 0.344 - 222.45 11.296 11.311 11.348 0.598 -0.915 -0.817 0.598 -0.915 0.748 -0.488 -0.547 0.931 0.524 - 222.50 11.102 11.144 11.177 0.978 -0.852 -1.011 0.978 -0.852 0.861 -0.989 -0.833 1.352 0.777 - 222.55 11.098 11.154 11.193 1.112 -0.940 -1.014 1.112 -0.940 0.953 -1.128 -1.045 1.575 0.905 - 222.60 10.975 11.064 11.094 1.402 -0.816 -1.138 1.402 -0.816 0.929 -1.595 -1.145 1.963 1.086 - 222.65 11.089 11.177 11.189 1.407 -0.509 -1.024 1.407 -0.509 0.521 -1.441 -0.716 1.644 0.846 - 222.70 10.933 11.070 11.079 1.735 -0.446 -1.179 1.735 -0.446 0.526 -2.047 -0.774 2.301 1.125 - 222.75 10.974 11.102 11.108 1.683 -0.370 -1.139 1.683 -0.370 0.422 -1.917 -0.623 2.133 1.030 - 222.80 10.884 11.021 11.025 1.734 -0.293 -1.229 1.734 -0.293 0.360 -2.131 -0.508 2.302 1.110 - 222.85 11.397 11.542 11.588 1.827 -1.029 -0.716 1.827 -1.029 0.737 -1.308 -1.880 2.455 1.203 - 222.90 11.260 11.371 11.406 1.588 -0.888 -0.853 1.588 -0.888 0.757 -1.354 -1.409 2.018 1.048 - 222.95 11.166 11.275 11.299 1.564 -0.728 -0.947 1.564 -0.728 0.689 -1.481 -1.138 1.936 0.995 - 223.00 11.291 11.404 11.416 1.598 -0.528 -0.822 1.598 -0.528 0.434 -1.313 -0.843 1.754 0.810 - 223.05 10.898 11.070 11.081 1.948 -0.491 -1.215 1.948 -0.491 0.596 -2.367 -0.956 2.756 1.311 - 223.10 11.032 11.219 11.237 2.043 -0.626 -1.081 2.043 -0.626 0.676 -2.209 -1.278 2.868 1.320 - 223.15 10.920 11.082 11.112 1.889 -0.820 -1.193 1.889 -0.820 0.978 -2.254 -1.548 2.831 1.452 - 223.20 10.886 11.019 11.065 1.711 -1.002 -1.227 1.711 -1.002 1.230 -2.100 -1.714 2.718 1.488 - 223.25 11.078 11.220 11.272 1.776 -1.082 -1.034 1.776 -1.082 1.119 -1.837 -1.922 2.697 1.442 - 223.30 11.098 11.254 11.283 1.866 -0.804 -1.014 1.866 -0.804 0.815 -1.893 -1.500 2.579 1.275 - 223.35 10.854 11.051 11.086 2.082 -0.871 -1.259 2.082 -0.871 1.097 -2.622 -1.814 3.340 1.686 - 223.40 10.789 10.968 11.004 1.974 -0.884 -1.324 1.974 -0.884 1.171 -2.613 -1.746 3.216 1.677 - 223.45 10.974 11.066 11.129 1.427 -1.185 -1.139 1.427 -1.185 1.349 -1.625 -1.690 2.368 1.353 - 223.50 11.102 11.183 11.285 1.340 -1.513 -1.010 1.340 -1.513 1.528 -1.354 -2.027 2.552 1.438 - 223.55 10.987 11.000 11.081 0.530 -1.340 -1.126 0.530 -1.340 1.508 -0.597 -0.710 1.672 0.885 - 223.60 11.382 11.383 11.475 0.157 -1.450 -0.731 0.157 -1.450 1.060 -0.115 -0.227 1.330 0.545 - 223.65 11.244 11.256 11.327 0.523 -1.266 -0.869 0.523 -1.266 1.100 -0.454 -0.662 1.316 0.681 - 223.70 11.288 11.313 11.345 0.740 -0.858 -0.824 0.740 -0.858 0.707 -0.610 -0.635 0.981 0.565 - 223.75 11.237 11.246 11.271 0.434 -0.749 -0.876 0.434 -0.749 0.656 -0.380 -0.325 0.758 0.412 - 223.80 11.210 11.234 11.260 0.733 -0.757 -0.903 0.733 -0.757 0.683 -0.662 -0.555 0.962 0.550 - 223.85 11.469 11.480 11.492 0.496 -0.527 -0.644 0.496 -0.527 0.340 -0.320 -0.262 0.470 0.267 - 223.90 11.387 11.392 11.412 0.332 -0.681 -0.726 0.332 -0.681 0.495 -0.241 -0.226 0.551 0.297 - 223.95 11.523 11.527 11.545 0.311 -0.640 -0.590 0.311 -0.640 0.378 -0.184 -0.199 0.427 0.232 - 224.00 11.361 11.386 11.406 0.757 -0.669 -0.752 0.757 -0.669 0.503 -0.569 -0.506 0.793 0.456 - 224.05 11.616 11.632 11.664 0.602 -0.871 -0.497 0.602 -0.871 0.433 -0.299 -0.525 0.684 0.371 - 224.10 11.539 11.557 11.585 0.644 -0.809 -0.574 0.644 -0.809 0.465 -0.370 -0.521 0.699 0.395 - 224.15 11.226 11.249 11.287 0.721 -0.935 -0.887 0.721 -0.935 0.830 -0.640 -0.674 1.091 0.623 - 224.20 11.348 11.367 11.383 0.666 -0.587 -0.765 0.666 -0.587 0.449 -0.509 -0.391 0.686 0.392 - 224.25 11.424 11.428 11.442 0.284 -0.577 -0.689 0.284 -0.577 0.397 -0.195 -0.164 0.444 0.236 - 224.30 11.527 11.529 11.549 -0.187 -0.687 -0.586 -0.187 -0.687 0.402 0.110 0.128 0.425 0.218 - 224.35 11.327 11.327 11.352 0.070 -0.745 -0.786 0.070 -0.745 0.585 -0.055 -0.052 0.588 0.295 - 224.40 11.302 11.310 11.319 -0.432 -0.440 -0.811 -0.432 -0.440 0.357 0.350 0.190 0.519 0.267 - 224.45 10.989 11.006 11.009 -0.609 -0.266 -1.124 -0.609 -0.266 0.299 0.684 0.162 0.852 0.382 - 224.50 10.884 10.909 10.923 -0.727 -0.562 -1.228 -0.727 -0.562 0.691 0.893 0.409 1.177 0.601 - 224.55 11.474 11.510 11.523 -0.912 -0.531 -0.639 -0.912 -0.531 0.339 0.582 0.484 0.760 0.415 - 224.60 11.546 11.581 11.595 -0.899 -0.564 -0.567 -0.899 -0.564 0.319 0.509 0.506 0.723 0.393 - 224.65 11.559 11.604 11.617 -1.015 -0.549 -0.553 -1.015 -0.549 0.304 0.562 0.558 0.820 0.424 - 224.70 11.572 11.609 11.644 -0.928 -0.900 -0.541 -0.928 -0.900 0.487 0.502 0.835 0.982 0.545 - 224.75 11.964 11.995 12.039 -0.854 -1.037 -0.149 -0.854 -1.037 0.154 0.127 0.885 0.913 0.454 - 224.80 11.859 11.906 11.929 -1.051 -0.744 -0.254 -1.051 -0.744 0.189 0.267 0.782 0.861 0.424 - 224.85 12.105 12.140 12.147 -0.914 -0.404 -0.007 -0.914 -0.404 0.003 0.007 0.369 0.500 0.185 - 224.90 12.356 12.402 12.416 -1.065 -0.605 0.243 -1.065 -0.605 -0.147 -0.259 0.644 0.780 0.355 - 224.95 12.118 12.138 12.156 -0.700 -0.661 0.005 -0.700 -0.661 -0.003 -0.004 0.463 0.464 0.231 - 225.00 12.066 12.081 12.092 -0.594 -0.505 -0.046 -0.594 -0.505 0.023 0.028 0.300 0.305 0.151 - 225.05 11.733 11.753 11.753 -0.689 0.074 -0.380 -0.689 0.074 -0.028 0.262 -0.051 0.313 0.134 - 225.10 11.951 11.967 11.973 -0.620 -0.378 -0.162 -0.620 -0.378 0.061 0.100 0.234 0.276 0.131 - 225.15 11.876 11.899 11.909 -0.727 -0.503 -0.236 -0.727 -0.503 0.119 0.172 0.365 0.418 0.210 - 225.20 11.604 11.608 11.613 -0.273 -0.347 -0.508 -0.273 -0.347 0.177 0.139 0.095 0.227 0.122 - 225.25 11.715 11.715 11.718 -0.075 -0.251 -0.398 -0.075 -0.251 0.100 0.030 0.019 0.113 0.053 - 225.30 11.509 11.509 11.509 -0.002 0.051 -0.604 -0.002 0.051 -0.031 0.001 -0.000 0.184 0.016 - 225.35 11.872 11.878 11.878 0.350 0.051 -0.240 0.350 0.051 -0.012 -0.084 0.018 0.091 0.043 - 225.40 11.471 11.471 11.476 0.059 -0.333 -0.642 0.059 -0.333 0.214 -0.038 -0.020 0.263 0.109 - 225.45 11.370 11.372 11.383 -0.202 -0.491 -0.742 -0.202 -0.491 0.364 0.150 0.099 0.416 0.203 - 225.50 11.689 11.693 11.709 -0.298 -0.624 -0.424 -0.298 -0.624 0.264 0.126 0.186 0.329 0.174 - 225.55 11.661 11.670 11.695 -0.462 -0.769 -0.452 -0.462 -0.769 0.347 0.209 0.355 0.505 0.270 - 225.60 11.909 11.924 11.959 -0.596 -0.916 -0.204 -0.596 -0.916 0.186 0.121 0.546 0.618 0.295 - 225.65 11.800 11.809 11.857 -0.439 -1.066 -0.312 -0.439 -1.066 0.333 0.137 0.468 0.714 0.295 - 225.70 11.704 11.704 11.725 0.060 -0.701 -0.409 0.060 -0.701 0.286 -0.025 -0.042 0.331 0.145 - 225.75 11.518 11.518 11.529 0.092 -0.512 -0.595 0.092 -0.512 0.305 -0.055 -0.047 0.312 0.157 - 225.80 11.356 11.362 11.364 0.373 -0.245 -0.757 0.373 -0.245 0.185 -0.283 -0.091 0.386 0.175 - 225.85 11.337 11.344 11.344 0.404 0.076 -0.776 0.404 0.076 -0.059 -0.314 0.031 0.386 0.160 - 225.90 11.704 11.704 11.707 0.106 -0.238 -0.409 0.106 -0.238 0.097 -0.043 -0.025 0.118 0.055 - 225.95 11.859 11.862 11.868 0.273 -0.386 -0.254 0.273 -0.386 0.098 -0.069 -0.105 0.144 0.080 - 226.00 11.575 11.575 11.582 -0.060 -0.381 -0.538 -0.060 -0.381 0.205 0.032 0.023 0.219 0.104 - 226.05 11.501 11.501 11.502 0.007 -0.139 -0.612 0.007 -0.139 0.085 -0.004 -0.001 0.197 0.043 - 226.10 11.624 11.624 11.629 0.068 -0.340 -0.489 0.068 -0.340 0.166 -0.033 -0.023 0.180 0.086 - 226.15 11.615 11.615 11.624 -0.026 -0.447 -0.498 -0.026 -0.447 0.222 0.013 0.011 0.224 0.112 - 226.20 11.621 11.621 11.648 0.045 -0.806 -0.492 0.045 -0.806 0.397 -0.022 -0.037 0.447 0.200 - 226.25 11.502 11.502 11.519 0.043 -0.639 -0.611 0.043 -0.639 0.390 -0.027 -0.028 0.392 0.196 - 226.30 11.172 11.175 11.197 0.262 -0.713 -0.941 0.262 -0.713 0.671 -0.247 -0.187 0.731 0.369 - 226.35 10.970 10.988 11.010 0.627 -0.689 -1.142 0.627 -0.689 0.787 -0.717 -0.432 1.087 0.574 - 226.40 10.897 10.924 10.932 0.768 -0.408 -1.216 0.768 -0.408 0.496 -0.934 -0.313 1.117 0.551 - 226.45 10.718 10.747 10.766 0.781 -0.637 -1.394 0.781 -0.637 0.888 -1.089 -0.498 1.480 0.745 - 226.50 10.615 10.621 10.650 0.342 -0.780 -1.497 0.342 -0.780 1.168 -0.512 -0.267 1.484 0.651 - 226.55 10.665 10.670 10.680 0.343 -0.454 -1.448 0.343 -0.454 0.658 -0.497 -0.156 1.210 0.419 - 226.60 10.679 10.684 10.685 0.353 0.066 -1.434 0.353 0.066 -0.095 -0.507 0.023 1.093 0.258 - 226.65 10.837 10.846 10.849 0.430 0.257 -1.275 0.430 0.257 -0.328 -0.548 0.111 0.939 0.324 - 226.70 11.007 11.007 11.008 0.037 0.045 -1.105 0.037 0.045 -0.050 -0.041 0.002 0.613 0.032 - 226.75 11.150 11.157 11.160 0.390 0.254 -0.962 0.390 0.254 -0.244 -0.375 0.099 0.571 0.229 - 226.80 11.098 11.099 11.106 0.161 0.395 -1.015 0.161 0.395 -0.401 -0.163 0.063 0.606 0.219 - 226.85 11.061 11.061 11.064 0.046 0.250 -1.052 0.046 0.250 -0.263 -0.048 0.011 0.586 0.134 - 226.90 11.311 11.320 11.322 0.459 -0.197 -0.802 0.459 -0.197 0.158 -0.368 -0.090 0.446 0.205 - 226.95 11.551 11.586 11.586 0.894 -0.060 -0.562 0.894 -0.060 0.034 -0.502 -0.054 0.559 0.253 - 227.00 11.577 11.601 11.602 0.748 -0.046 -0.536 0.748 -0.046 0.025 -0.400 -0.034 0.424 0.201 - 227.05 11.205 11.249 11.249 1.000 -0.039 -0.908 1.000 -0.039 0.035 -0.908 -0.039 0.913 0.455 - 227.10 11.082 11.102 11.104 0.660 -0.247 -1.031 0.660 -0.247 0.255 -0.680 -0.163 0.779 0.372 - 227.15 10.977 11.003 11.004 0.750 -0.166 -1.135 0.750 -0.166 0.188 -0.851 -0.124 0.939 0.440 - 227.20 10.609 10.621 10.621 0.498 -0.078 -1.503 0.498 -0.078 0.117 -0.749 -0.039 1.257 0.379 - 227.25 10.958 10.974 10.977 0.587 0.290 -1.155 0.587 0.290 -0.335 -0.677 0.170 0.881 0.387 - 227.30 10.876 10.891 10.896 0.574 0.348 -1.237 0.574 0.348 -0.431 -0.710 0.200 0.991 0.427 - 227.35 11.060 11.079 11.091 0.654 0.511 -1.053 0.654 0.511 -0.539 -0.689 0.334 0.899 0.468 - 227.40 11.096 11.106 11.107 0.462 0.179 -1.017 0.462 0.179 -0.182 -0.470 0.082 0.640 0.255 - 227.45 11.159 11.172 11.182 0.543 0.479 -0.954 0.543 0.479 -0.457 -0.518 0.260 0.717 0.369 - 227.50 11.157 11.159 11.168 0.239 0.440 -0.956 0.239 0.440 -0.420 -0.229 0.105 0.582 0.245 - 227.55 10.894 10.908 10.913 0.560 0.330 -1.219 0.560 0.330 -0.402 -0.682 0.185 0.954 0.407 - 227.60 10.934 10.973 10.985 0.935 0.494 -1.179 0.935 0.494 -0.583 -1.103 0.462 1.255 0.665 - 227.65 10.683 10.698 10.700 0.557 0.200 -1.430 0.557 0.200 -0.286 -0.797 0.112 1.197 0.427 - 227.70 10.441 10.452 10.460 0.472 0.431 -1.672 0.472 0.431 -0.721 -0.789 0.204 1.602 0.544 - 227.75 10.954 10.954 10.956 -0.040 0.192 -1.159 -0.040 0.192 -0.222 0.047 -0.008 0.691 0.113 - 227.80 10.812 10.814 10.816 0.234 -0.150 -1.301 0.234 -0.150 0.195 -0.304 -0.035 0.885 0.182 - 227.85 11.070 11.086 11.097 0.594 -0.500 -1.043 0.594 -0.500 0.521 -0.620 -0.297 0.845 0.431 - 227.90 11.480 11.521 11.539 0.976 -0.646 -0.633 0.976 -0.646 0.409 -0.618 -0.630 0.885 0.486 - 227.95 11.601 11.631 11.635 0.826 -0.326 -0.511 0.826 -0.326 0.167 -0.422 -0.269 0.525 0.264 - 228.00 11.458 11.472 11.478 0.557 -0.382 -0.655 0.557 -0.382 0.250 -0.364 -0.212 0.442 0.245 - 228.05 11.614 11.650 11.675 0.909 -0.769 -0.499 0.909 -0.769 0.383 -0.453 -0.699 0.833 0.458 - 228.10 11.846 11.867 11.900 0.710 -0.882 -0.267 0.710 -0.882 0.235 -0.189 -0.626 0.676 0.347 - 228.15 11.988 12.039 12.067 1.106 -0.825 -0.125 1.106 -0.825 0.103 -0.138 -0.912 0.959 0.464 - 228.20 12.203 12.229 12.251 0.797 -0.727 0.090 0.797 -0.727 -0.066 0.072 -0.579 0.586 0.294 - 228.25 11.787 11.819 11.854 0.865 -0.912 -0.326 0.865 -0.912 0.297 -0.282 -0.789 0.843 0.444 - 228.30 11.740 11.771 11.806 0.849 -0.910 -0.372 0.849 -0.910 0.339 -0.316 -0.773 0.844 0.451 - 228.35 11.693 11.746 11.787 1.115 -0.978 -0.420 1.115 -0.978 0.411 -0.468 -1.091 1.188 0.628 - 228.40 11.595 11.675 11.709 1.359 -0.898 -0.518 1.359 -0.898 0.465 -0.704 -1.221 1.462 0.742 - 228.45 11.446 11.487 11.488 0.971 -0.168 -0.667 0.971 -0.168 0.112 -0.647 -0.163 0.707 0.338 - 228.50 11.389 11.442 11.445 1.098 -0.262 -0.724 1.098 -0.262 0.190 -0.795 -0.288 0.899 0.433 - 228.55 11.508 11.546 11.571 0.939 -0.757 -0.605 0.939 -0.757 0.458 -0.568 -0.711 0.910 0.509 - 228.60 11.564 11.572 11.615 0.440 -0.990 -0.549 0.440 -0.990 0.543 -0.241 -0.435 0.737 0.368 - 228.65 11.575 11.594 11.636 0.654 -0.995 -0.537 0.654 -0.995 0.535 -0.351 -0.651 0.853 0.456 - 228.70 11.143 11.175 11.195 0.847 -0.657 -0.970 0.847 -0.657 0.637 -0.821 -0.556 1.044 0.589 - 228.75 10.942 10.951 10.955 0.450 -0.314 -1.171 0.450 -0.314 0.368 -0.527 -0.142 0.836 0.329 - 228.80 11.280 11.286 11.289 0.390 -0.258 -0.833 0.390 -0.258 0.215 -0.325 -0.100 0.456 0.201 - 228.85 11.269 11.269 11.271 -0.066 -0.172 -0.844 -0.066 -0.172 0.145 0.056 0.011 0.373 0.078 - 228.90 11.538 11.540 11.541 0.210 -0.164 -0.575 0.210 -0.164 0.094 -0.121 -0.034 0.201 0.078 - 228.95 11.367 11.368 11.371 0.082 -0.285 -0.745 0.082 -0.285 0.212 -0.061 -0.023 0.322 0.111 - 229.00 11.082 11.082 11.091 0.100 -0.437 -1.031 0.100 -0.437 0.451 -0.103 -0.044 0.632 0.232 - 229.05 11.223 11.223 11.226 -0.131 -0.261 -0.890 -0.131 -0.261 0.233 0.117 0.034 0.439 0.131 - 229.10 11.558 11.563 11.575 -0.332 -0.516 -0.554 -0.332 -0.516 0.286 0.184 0.171 0.342 0.190 - 229.15 11.300 11.301 11.321 -0.169 -0.681 -0.813 -0.169 -0.681 0.554 0.137 0.115 0.577 0.291 - 229.20 11.356 11.357 11.365 0.110 -0.431 -0.757 0.110 -0.431 0.326 -0.083 -0.047 0.385 0.170 - 229.25 11.528 11.528 11.528 0.075 -0.018 -0.585 0.075 -0.018 0.010 -0.044 -0.001 0.174 0.023 - 229.30 11.592 11.596 11.597 0.309 -0.188 -0.521 0.309 -0.188 0.098 -0.161 -0.058 0.201 0.099 - 229.35 11.523 11.527 11.531 0.316 -0.274 -0.590 0.316 -0.274 0.162 -0.186 -0.087 0.261 0.131 - 229.40 11.576 11.580 11.583 0.305 -0.283 -0.537 0.305 -0.283 0.152 -0.164 -0.086 0.231 0.120 - 229.45 11.917 11.917 11.920 0.016 -0.289 -0.196 0.016 -0.289 0.057 -0.003 -0.005 0.061 0.028 - 229.50 11.663 11.663 11.663 -0.016 0.123 -0.450 -0.016 0.123 -0.055 0.007 -0.002 0.109 0.028 - 229.55 11.570 11.571 11.572 -0.054 0.157 -0.542 -0.054 0.157 -0.085 0.029 -0.009 0.161 0.045 - 229.60 11.431 11.432 11.432 -0.136 -0.006 -0.682 -0.136 -0.006 0.004 0.093 0.001 0.242 0.046 - 229.65 11.162 11.166 11.171 -0.297 0.333 -0.951 -0.297 0.333 -0.317 0.283 -0.099 0.552 0.218 - 229.70 11.184 11.199 11.202 -0.576 0.296 -0.929 -0.576 0.296 -0.275 0.535 -0.171 0.641 0.313 - 229.75 10.957 10.970 10.976 -0.539 0.350 -1.156 -0.539 0.350 -0.405 0.624 -0.189 0.875 0.383 - 229.80 11.008 11.015 11.034 -0.388 0.650 -1.105 -0.388 0.650 -0.718 0.428 -0.252 0.897 0.437 - 229.85 11.082 11.084 11.104 -0.195 0.661 -1.031 -0.195 0.661 -0.681 0.201 -0.129 0.768 0.361 - 229.90 10.857 10.874 10.896 -0.608 0.700 -1.256 -0.608 0.700 -0.879 0.763 -0.425 1.218 0.620 - 229.95 10.973 11.006 11.044 -0.841 0.915 -1.139 -0.841 0.915 -1.043 0.958 -0.770 1.421 0.806 - 230.00 10.901 10.942 10.953 -0.946 0.499 -1.212 -0.946 0.499 -0.604 1.146 -0.471 1.305 0.689 - 230.05 10.815 10.824 10.827 -0.454 0.259 -1.298 -0.454 0.259 -0.336 0.590 -0.117 0.979 0.344 - 230.10 10.508 10.519 10.523 -0.490 0.286 -1.605 -0.490 0.286 -0.458 0.787 -0.140 1.450 0.461 - 230.15 10.621 10.660 10.669 -0.914 0.444 -1.492 -0.914 0.444 -0.662 1.363 -0.405 1.629 0.784 - 230.20 11.218 11.255 11.264 -0.909 0.441 -0.895 -0.909 0.441 -0.395 0.814 -0.401 0.911 0.495 - 230.25 11.075 11.105 11.105 -0.812 0.115 -1.038 -0.812 0.115 -0.119 0.842 -0.093 0.874 0.428 - 230.30 10.857 10.891 10.893 -0.860 -0.180 -1.256 -0.860 -0.180 0.226 1.079 0.155 1.174 0.557 - 230.35 11.057 11.110 11.114 -1.085 -0.286 -1.056 -1.085 -0.286 0.302 1.146 0.310 1.187 0.612 - 230.40 11.034 11.093 11.093 -1.134 -0.086 -1.078 -1.134 -0.086 0.093 1.223 0.098 1.228 0.615 - 230.45 11.047 11.080 11.083 -0.852 0.233 -1.066 -0.852 0.233 -0.248 0.908 -0.198 0.958 0.481 - 230.50 11.330 11.347 11.359 -0.624 0.525 -0.783 -0.624 0.525 -0.411 0.488 -0.327 0.639 0.359 - 230.55 11.194 11.219 11.244 -0.763 0.740 -0.919 -0.763 0.740 -0.680 0.702 -0.564 0.987 0.564 - 230.60 11.268 11.283 11.317 -0.589 0.876 -0.845 -0.589 0.876 -0.740 0.498 -0.516 0.914 0.515 - 230.65 11.518 11.535 11.579 -0.626 1.009 -0.595 -0.626 1.009 -0.600 0.372 -0.632 0.882 0.474 - 230.70 11.518 11.530 11.586 -0.533 1.140 -0.595 -0.533 1.140 -0.678 0.317 -0.608 0.969 0.482 - 230.75 11.748 11.758 11.810 -0.465 1.106 -0.364 -0.465 1.106 -0.403 0.169 -0.514 0.786 0.337 - 230.80 11.751 11.757 11.842 -0.370 1.418 -0.362 -0.370 1.418 -0.513 0.134 -0.524 1.140 0.373 - 230.85 11.599 11.605 11.648 -0.371 0.999 -0.513 -0.371 0.999 -0.513 0.191 -0.371 0.699 0.330 - 230.90 11.608 11.609 11.650 -0.199 0.968 -0.505 -0.199 0.968 -0.489 0.101 -0.192 0.615 0.267 - 230.95 11.430 11.430 11.494 -0.044 1.218 -0.683 -0.044 1.218 -0.832 0.030 -0.054 0.976 0.417 - 231.00 11.271 11.272 11.328 0.156 1.123 -0.842 0.156 1.123 -0.945 -0.131 0.175 0.997 0.485 - 231.05 11.302 11.302 11.367 -0.055 1.210 -0.811 -0.055 1.210 -0.981 0.044 -0.066 1.062 0.492 - 231.10 11.441 11.445 11.497 -0.310 1.091 -0.672 -0.310 1.091 -0.733 0.208 -0.338 0.869 0.417 - 231.15 11.249 11.250 11.315 -0.145 1.213 -0.864 -0.145 1.213 -1.047 0.125 -0.176 1.118 0.535 - 231.20 11.698 11.709 11.755 -0.507 1.048 -0.415 -0.507 1.048 -0.435 0.211 -0.531 0.764 0.359 - 231.25 11.392 11.399 11.469 -0.408 1.258 -0.721 -0.408 1.258 -0.906 0.294 -0.513 1.134 0.541 - 231.30 11.523 11.535 11.624 -0.529 1.437 -0.590 -0.529 1.437 -0.848 0.312 -0.760 1.347 0.590 - 231.35 11.613 11.622 11.676 -0.477 1.119 -0.500 -0.477 1.119 -0.560 0.238 -0.534 0.865 0.405 - 231.40 11.540 11.556 11.580 -0.614 0.739 -0.573 -0.614 0.739 -0.423 0.352 -0.454 0.626 0.357 - 231.45 11.459 11.472 11.526 -0.559 1.108 -0.654 -0.559 1.108 -0.725 0.366 -0.619 0.984 0.511 - 231.50 11.406 11.423 11.458 -0.629 0.894 -0.707 -0.629 0.894 -0.632 0.444 -0.562 0.847 0.477 - 231.55 11.602 11.609 11.625 -0.385 0.612 -0.510 -0.385 0.612 -0.312 0.196 -0.235 0.391 0.219 - 231.60 11.878 11.901 11.919 -0.742 0.655 -0.235 -0.742 0.655 -0.154 0.175 -0.486 0.517 0.269 - 231.65 11.444 11.476 11.506 -0.848 0.830 -0.668 -0.848 0.830 -0.555 0.567 -0.703 0.927 0.530 - 231.70 11.539 11.597 11.625 -1.151 0.809 -0.574 -1.151 0.809 -0.464 0.660 -0.932 1.155 0.616 - 231.75 11.657 11.739 11.781 -1.391 0.986 -0.456 -1.391 0.986 -0.450 0.634 -1.371 1.557 0.788 - 231.80 11.604 11.700 11.712 -1.492 0.521 -0.508 -1.492 0.521 -0.265 0.759 -0.778 1.378 0.559 - 231.85 11.392 11.487 11.493 -1.476 0.374 -0.721 -1.476 0.374 -0.270 1.064 -0.552 1.419 0.614 - 231.90 11.362 11.423 11.454 -1.181 0.837 -0.751 -1.181 0.837 -0.628 0.887 -0.988 1.329 0.734 - 231.95 11.294 11.325 11.339 -0.836 0.570 -0.819 -0.836 0.570 -0.467 0.685 -0.477 0.848 0.478 - 232.00 11.190 11.204 11.226 -0.566 0.703 -0.923 -0.566 0.703 -0.649 0.523 -0.398 0.833 0.462 - 232.05 11.113 11.131 11.149 -0.625 0.637 -1.000 -0.625 0.637 -0.637 0.624 -0.398 0.898 0.488 - 232.10 10.899 10.914 10.930 -0.555 0.603 -1.213 -0.555 0.603 -0.732 0.673 -0.334 1.072 0.524 - 232.15 10.881 10.897 10.900 -0.586 0.280 -1.232 -0.586 0.280 -0.345 0.722 -0.164 0.970 0.409 - 232.20 10.918 10.946 10.951 -0.784 0.336 -1.195 -0.784 0.336 -0.401 0.937 -0.263 1.078 0.526 - 232.25 10.792 10.842 10.847 -1.045 0.328 -1.321 -1.045 0.328 -0.434 1.381 -0.343 1.473 0.744 - 232.30 10.786 10.882 10.884 -1.447 0.180 -1.327 -1.447 0.180 -0.239 1.920 -0.261 1.944 0.976 - 232.35 11.035 11.185 11.193 -1.826 0.434 -1.078 -1.826 0.434 -0.468 1.969 -0.793 2.342 1.087 - 232.40 11.286 11.448 11.454 -1.918 0.382 -0.827 -1.918 0.382 -0.316 1.586 -0.733 2.255 0.888 - 232.45 11.646 11.822 11.822 -2.033 -0.005 -0.467 -2.033 -0.005 0.002 0.949 0.010 2.176 0.474 - 232.50 11.227 11.419 11.420 -2.082 0.149 -0.886 -2.082 0.149 -0.132 1.844 -0.311 2.572 0.937 - 232.55 11.099 11.304 11.310 -2.144 0.345 -1.014 -2.144 0.345 -0.349 2.173 -0.739 2.872 1.161 - 232.60 10.902 11.116 11.119 -2.173 0.242 -1.211 -2.173 0.242 -0.293 2.631 -0.526 3.123 1.350 - 232.65 11.097 11.299 11.306 -2.123 0.415 -1.015 -2.123 0.415 -0.422 2.156 -0.882 2.855 1.183 - 232.70 11.219 11.473 11.474 -2.403 0.157 -0.894 -2.403 0.157 -0.140 2.149 -0.376 3.300 1.093 - 232.75 11.194 11.470 11.470 -2.503 -0.077 -0.919 -2.503 -0.077 0.071 2.301 0.194 3.559 1.155 - 232.80 11.319 11.645 11.646 -2.738 0.162 -0.794 -2.738 0.162 -0.128 2.174 -0.443 4.077 1.111 - 232.85 11.188 11.684 11.685 -3.369 0.110 -0.925 -3.369 0.110 -0.102 3.115 -0.372 6.108 1.569 - 232.90 10.855 11.312 11.312 -3.182 -0.087 -1.258 -3.182 -0.087 0.110 4.004 0.278 5.859 2.008 - 232.95 10.913 11.363 11.364 -3.165 -0.146 -1.200 -3.165 -0.146 0.175 3.797 0.461 5.739 1.914 - 233.00 10.694 11.231 11.233 -3.431 -0.237 -1.419 -3.431 -0.237 0.336 4.869 0.813 6.922 2.474 - 233.05 10.660 11.210 11.210 -3.468 0.001 -1.452 -3.468 0.001 -0.002 5.037 -0.005 7.067 2.518 - 233.10 10.500 11.054 11.054 -3.453 0.059 -1.612 -3.453 0.059 -0.094 5.568 -0.202 7.264 2.786 - 233.15 10.273 10.900 10.903 -3.642 0.262 -1.839 -3.642 0.262 -0.481 6.699 -0.953 8.359 3.392 - 233.20 10.103 10.719 10.729 -3.581 0.476 -2.010 -3.581 0.476 -0.956 7.199 -1.704 8.547 3.730 - 233.25 10.118 10.724 10.734 -3.556 0.459 -1.995 -3.556 0.459 -0.915 7.093 -1.632 8.416 3.668 - 233.30 10.113 10.628 10.656 -3.269 0.780 -2.000 -3.269 0.780 -1.560 6.538 -2.549 7.647 3.594 - 233.35 10.156 10.575 10.592 -2.946 0.608 -1.957 -2.946 0.608 -1.190 5.765 -1.792 6.439 3.077 - 233.40 10.102 10.565 10.599 -3.095 0.847 -2.011 -3.095 0.847 -1.704 6.226 -2.622 7.172 3.484 - 233.45 10.138 10.660 10.691 -3.298 0.812 -1.975 -3.298 0.812 -1.604 6.514 -2.679 7.718 3.612 - 233.50 10.278 10.784 10.794 -3.264 0.465 -1.835 -3.264 0.465 -0.853 5.989 -1.518 7.119 3.119 - 233.55 10.549 10.985 10.989 -3.063 0.310 -1.564 -3.063 0.310 -0.484 4.790 -0.949 5.962 2.454 - 233.60 10.811 11.206 11.208 -2.949 0.193 -1.302 -2.949 0.193 -0.252 3.838 -0.570 5.213 1.944 - 233.65 11.128 11.522 11.522 -2.987 0.031 -0.985 -2.987 0.031 -0.030 2.943 -0.092 4.948 1.472 - 233.70 10.832 11.210 11.214 -2.888 0.309 -1.281 -2.888 0.309 -0.396 3.700 -0.893 5.039 1.913 - 233.75 11.131 11.470 11.488 -2.768 0.630 -0.981 -2.768 0.630 -0.619 2.716 -1.745 4.512 1.644 - 233.80 11.112 11.551 11.557 -3.153 0.369 -1.001 -3.153 0.369 -0.369 3.156 -1.163 5.541 1.692 - 233.85 11.215 11.844 11.844 -3.808 -0.057 -0.898 -3.808 -0.057 0.051 3.419 0.216 7.655 1.713 - 233.90 11.515 12.214 12.216 -4.072 -0.213 -0.597 -4.072 -0.213 0.127 2.432 0.869 8.490 1.293 - 233.95 11.623 12.159 12.160 -3.571 0.056 -0.489 -3.571 0.056 -0.027 1.747 -0.200 6.496 0.879 - 234.00 11.542 12.053 12.054 -3.473 0.058 -0.571 -3.473 0.058 -0.033 1.982 -0.200 6.196 0.996 - 234.05 11.707 12.155 12.155 -3.270 -0.053 -0.406 -3.270 -0.053 0.021 1.328 0.172 5.431 0.670 - 234.10 11.919 12.367 12.367 -3.300 -0.017 -0.194 -3.300 -0.017 0.003 0.641 0.057 5.466 0.322 - 234.15 12.061 12.514 12.514 -3.335 -0.139 -0.052 -3.335 -0.139 0.007 0.172 0.464 5.572 0.247 - 234.20 12.035 12.441 12.445 -3.152 0.298 -0.078 -3.152 0.298 -0.023 0.245 -0.939 5.016 0.485 - 234.25 11.943 12.370 12.381 -3.224 0.502 -0.170 -3.224 0.502 -0.085 0.548 -1.620 5.337 0.856 - 234.30 11.832 12.153 12.162 -2.775 0.464 -0.281 -2.775 0.464 -0.130 0.779 -1.289 3.998 0.756 - 234.35 11.724 11.976 11.991 -2.444 0.589 -0.388 -2.444 0.589 -0.229 0.949 -1.440 3.235 0.870 - 234.40 12.000 12.272 12.293 -2.570 0.725 -0.113 -2.570 0.725 -0.082 0.291 -1.862 3.571 0.943 - 234.45 11.948 12.158 12.184 -2.247 0.802 -0.165 -2.247 0.802 -0.132 0.370 -1.803 2.861 0.923 - 234.50 12.057 12.250 12.271 -2.162 0.721 -0.055 -2.162 0.721 -0.040 0.120 -1.558 2.598 0.782 - 234.55 12.205 12.374 12.385 -2.041 0.524 0.092 -2.041 0.524 0.048 -0.188 -1.069 2.223 0.543 - 234.60 12.398 12.532 12.541 -1.828 0.472 0.285 -1.828 0.472 0.135 -0.521 -0.863 1.822 0.508 - 234.65 12.602 12.723 12.746 -1.756 0.756 0.489 -1.756 0.756 0.369 -0.858 -1.327 1.946 0.811 - 234.70 12.495 12.623 12.638 -1.793 0.612 0.382 -1.793 0.612 0.234 -0.685 -1.097 1.868 0.657 - 234.75 12.763 12.879 12.901 -1.724 0.751 0.650 -1.724 0.751 0.488 -1.121 -1.294 1.980 0.890 - 234.80 12.903 13.061 13.065 -2.023 0.314 0.791 -2.023 0.314 0.248 -1.600 -0.635 2.409 0.869 - 234.85 12.358 12.515 12.521 -1.976 0.382 0.245 -1.976 0.382 0.094 -0.485 -0.754 2.055 0.451 - 234.90 12.507 12.689 12.691 -2.144 0.190 0.394 -2.144 0.190 0.075 -0.845 -0.407 2.394 0.470 - 234.95 12.504 12.686 12.686 -2.141 -0.034 0.391 -2.141 -0.034 -0.013 -0.837 0.073 2.369 0.420 - 235.00 12.179 12.375 12.381 -2.192 -0.385 0.067 -2.192 -0.385 -0.026 -0.146 0.843 2.478 0.428 - 235.05 12.383 12.585 12.592 -2.248 -0.411 0.270 -2.248 -0.411 -0.111 -0.608 0.923 2.647 0.555 - 235.10 12.466 12.625 12.625 -1.998 -0.137 0.353 -1.998 -0.137 -0.048 -0.705 0.273 2.067 0.379 - 235.15 12.202 12.359 12.360 -1.961 -0.192 0.089 -1.961 -0.192 -0.017 -0.175 0.376 1.944 0.208 - 235.20 12.088 12.284 12.284 -2.190 0.003 -0.025 -2.190 0.003 -0.000 0.055 -0.007 2.399 0.028 - 235.25 11.916 12.201 12.202 -2.624 0.157 -0.197 -2.624 0.157 -0.031 0.518 -0.412 3.476 0.331 - 235.30 11.881 12.160 12.161 -2.587 0.171 -0.232 -2.587 0.171 -0.040 0.600 -0.443 3.389 0.373 - 235.35 11.697 11.893 11.893 -2.151 -0.050 -0.416 -2.151 -0.050 0.021 0.894 0.109 2.401 0.450 - 235.40 11.635 11.900 11.901 -2.495 -0.161 -0.478 -2.495 -0.161 0.077 1.191 0.402 3.238 0.630 - 235.45 11.457 11.806 11.808 -2.852 -0.184 -0.656 -2.852 -0.184 0.121 1.871 0.524 4.299 0.973 - 235.50 11.302 11.638 11.657 -2.775 -0.666 -0.811 -2.775 -0.666 0.540 2.249 1.848 4.400 1.480 - 235.55 11.605 11.888 11.910 -2.577 -0.721 -0.508 -2.577 -0.721 0.366 1.308 1.857 3.709 1.151 - 235.60 11.668 11.888 11.905 -2.278 -0.626 -0.445 -2.278 -0.626 0.279 1.013 1.426 2.889 0.886 - 235.65 11.311 11.535 11.540 -2.264 -0.332 -0.802 -2.264 -0.332 0.266 1.815 0.751 2.940 0.991 - 235.70 11.325 11.486 11.487 -1.922 -0.019 -0.788 -1.922 -0.019 0.015 1.515 0.037 2.159 0.758 - 235.75 10.877 11.113 11.115 -2.276 0.237 -1.235 -2.276 0.237 -0.293 2.811 -0.540 3.380 1.439 - 235.80 10.752 10.976 10.978 -2.204 0.250 -1.361 -2.204 0.250 -0.340 3.000 -0.551 3.387 1.535 - 235.85 10.459 10.702 10.711 -2.268 0.439 -1.654 -2.268 0.439 -0.726 3.750 -0.995 4.035 1.974 - 235.90 10.420 10.674 10.678 -2.313 0.299 -1.693 -2.313 0.299 -0.506 3.915 -0.691 4.152 2.004 - 235.95 10.500 10.673 10.685 -1.914 0.513 -1.613 -1.914 0.513 -0.827 3.087 -0.981 3.263 1.671 - 236.00 10.740 10.893 10.908 -1.820 0.555 -1.372 -1.820 0.555 -0.762 2.498 -1.010 2.752 1.400 - 236.05 10.654 10.813 10.832 -1.844 0.640 -1.458 -1.844 0.640 -0.934 2.690 -1.181 2.969 1.541 - 236.10 10.750 10.918 10.941 -1.905 0.711 -1.363 -1.905 0.711 -0.968 2.596 -1.354 2.996 1.542 - 236.15 10.511 10.711 10.729 -2.060 0.615 -1.602 -2.060 0.615 -0.985 3.300 -1.267 3.594 1.835 - 236.20 10.710 10.951 10.970 -2.281 0.646 -1.402 -2.281 0.646 -0.906 3.199 -1.474 3.794 1.819 - 236.25 10.553 10.729 10.756 -1.934 0.756 -1.560 -1.934 0.756 -1.180 3.016 -1.463 3.372 1.777 - 236.30 10.420 10.585 10.625 -1.860 0.917 -1.692 -1.860 0.917 -1.552 3.148 -1.705 3.583 1.951 - 236.35 10.436 10.568 10.599 -1.667 0.812 -1.677 -1.667 0.812 -1.362 2.796 -1.354 3.125 1.696 - 236.40 10.471 10.619 10.624 -1.763 0.327 -1.641 -1.763 0.327 -0.536 2.895 -0.576 2.955 1.500 - 236.45 10.501 10.619 10.629 -1.579 0.467 -1.612 -1.579 0.467 -0.752 2.546 -0.737 2.656 1.378 - 236.50 10.406 10.526 10.531 -1.582 0.336 -1.707 -1.582 0.336 -0.573 2.700 -0.531 2.764 1.405 - 236.55 10.535 10.669 10.669 -1.685 0.087 -1.578 -1.685 0.087 -0.137 2.659 -0.146 2.668 1.333 - 236.60 10.777 10.920 10.921 -1.762 -0.076 -1.335 -1.762 -0.076 0.102 2.352 0.135 2.446 1.179 - 236.65 10.781 10.892 10.893 -1.549 0.139 -1.332 -1.549 0.139 -0.186 2.064 -0.216 2.097 1.042 - 236.70 10.542 10.624 10.627 -1.319 -0.252 -1.571 -1.319 -0.252 0.395 2.072 0.332 2.136 1.068 - 236.75 10.527 10.632 10.633 -1.485 -0.164 -1.585 -1.485 -0.164 0.260 2.354 0.244 2.373 1.191 - 236.80 10.442 10.567 10.582 -1.616 -0.571 -1.671 -1.616 -0.571 0.954 2.701 0.923 2.865 1.504 - 236.85 10.433 10.607 10.640 -1.909 -0.842 -1.680 -1.909 -0.842 1.414 3.207 1.608 3.587 1.928 - 236.90 10.332 10.473 10.512 -1.713 -0.902 -1.780 -1.713 -0.902 1.606 3.049 1.545 3.458 1.888 - 236.95 10.463 10.607 10.647 -1.740 -0.921 -1.650 -1.740 -0.921 1.519 2.871 1.602 3.299 1.811 - 237.00 10.558 10.698 10.783 -1.722 -1.356 -1.555 -1.722 -1.356 2.108 2.677 2.334 3.609 2.065 - 237.05 10.483 10.637 10.687 -1.801 -1.035 -1.630 -1.801 -1.035 1.686 2.934 1.863 3.484 1.932 - 237.10 10.382 10.485 10.536 -1.468 -1.032 -1.731 -1.468 -1.032 1.787 2.542 1.516 3.109 1.728 - 237.15 10.018 10.102 10.138 -1.301 -0.855 -2.095 -1.301 -0.855 1.791 2.726 1.113 3.406 1.723 - 237.20 10.382 10.456 10.472 -1.241 -0.573 -1.730 -1.241 -0.573 0.991 2.147 0.711 2.431 1.235 - 237.25 10.455 10.511 10.542 -1.083 -0.810 -1.658 -1.083 -0.810 1.343 1.796 0.878 2.289 1.204 - 237.30 10.280 10.385 10.435 -1.472 -1.022 -1.833 -1.472 -1.022 1.874 2.699 1.505 3.286 1.807 - 237.35 10.200 10.291 10.332 -1.365 -0.924 -1.913 -1.365 -0.924 1.767 2.611 1.261 3.188 1.698 - 237.40 10.290 10.430 10.468 -1.706 -0.892 -1.823 -1.706 -0.892 1.626 3.110 1.521 3.514 1.912 - 237.45 10.311 10.419 10.487 -1.498 -1.191 -1.802 -1.498 -1.191 2.147 2.699 1.784 3.455 1.941 - 237.50 10.683 10.806 10.870 -1.624 -1.183 -1.430 -1.624 -1.183 1.691 2.322 1.921 3.040 1.728 - 237.55 10.672 10.752 10.807 -1.302 -1.095 -1.440 -1.302 -1.095 1.577 1.875 1.425 2.484 1.417 - 237.60 10.694 10.794 10.860 -1.463 -1.199 -1.419 -1.463 -1.199 1.701 2.075 1.753 2.795 1.603 - 237.65 10.738 10.853 10.955 -1.573 -1.492 -1.375 -1.573 -1.492 2.052 2.163 2.348 3.296 1.897 - 237.70 10.739 10.818 10.906 -1.311 -1.383 -1.374 -1.311 -1.383 1.900 1.801 1.812 2.759 1.592 - 237.75 10.680 10.733 10.800 -1.065 -1.198 -1.433 -1.065 -1.198 1.716 1.526 1.276 2.311 1.314 - 237.80 10.707 10.760 10.835 -1.065 -1.271 -1.406 -1.065 -1.271 1.788 1.498 1.354 2.364 1.348 - 237.85 10.794 10.878 10.968 -1.354 -1.398 -1.319 -1.354 -1.398 1.844 1.786 1.893 2.764 1.595 - 237.90 10.959 11.016 11.102 -1.112 -1.383 -1.153 -1.112 -1.383 1.595 1.282 1.537 2.239 1.280 - 237.95 11.213 11.260 11.311 -1.027 -1.077 -0.900 -1.027 -1.077 0.969 0.924 1.106 1.512 0.868 - 238.00 11.007 11.057 11.065 -1.058 -0.403 -1.106 -1.058 -0.403 0.446 1.170 0.426 1.253 0.661 - 238.05 10.717 10.751 10.756 -0.850 -0.318 -1.395 -0.850 -0.318 0.444 1.186 0.271 1.385 0.647 - 238.10 10.701 10.722 10.729 -0.664 -0.404 -1.412 -0.664 -0.404 0.570 0.938 0.268 1.298 0.565 - 238.15 10.487 10.515 10.523 -0.763 -0.405 -1.625 -0.763 -0.405 0.659 1.240 0.309 1.694 0.719 - 238.20 10.561 10.583 10.585 -0.681 -0.182 -1.551 -0.681 -0.182 0.282 1.056 0.124 1.452 0.550 - 238.25 10.407 10.413 10.413 -0.360 0.040 -1.706 -0.360 0.040 -0.068 0.614 -0.014 1.521 0.309 - 238.30 10.690 10.697 10.702 -0.401 -0.312 -1.423 -0.401 -0.312 0.444 0.571 0.125 1.142 0.367 - 238.35 10.594 10.599 10.600 -0.329 -0.123 -1.519 -0.329 -0.123 0.186 0.499 0.040 1.215 0.267 - 238.40 10.476 10.486 10.487 -0.468 0.169 -1.637 -0.468 0.169 -0.277 0.766 -0.079 1.464 0.409 - 238.45 10.317 10.354 10.360 -0.874 -0.351 -1.796 -0.874 -0.351 0.630 1.570 0.307 2.057 0.860 - 238.50 10.394 10.407 10.411 -0.511 -0.300 -1.718 -0.511 -0.300 0.516 0.877 0.153 1.652 0.515 - 238.55 10.394 10.423 10.424 -0.770 0.196 -1.719 -0.770 0.196 -0.337 1.324 -0.151 1.793 0.687 - 238.60 10.622 10.638 10.643 -0.587 0.331 -1.491 -0.587 0.331 -0.494 0.875 -0.194 1.339 0.512 - 238.65 10.779 10.805 10.812 -0.752 0.400 -1.334 -0.752 0.400 -0.534 1.004 -0.301 1.253 0.588 - 238.70 10.900 10.922 10.923 -0.699 0.139 -1.213 -0.699 0.139 -0.169 0.848 -0.097 0.990 0.435 - 238.75 10.936 10.960 10.960 -0.720 -0.075 -1.177 -0.720 -0.075 0.088 0.848 0.054 0.955 0.427 - 238.80 10.897 10.920 10.920 -0.708 0.031 -1.216 -0.708 0.031 -0.038 0.861 -0.022 0.990 0.431 - 238.85 11.169 11.178 11.178 -0.460 -0.074 -0.944 -0.460 -0.074 0.070 0.434 0.034 0.554 0.221 - 238.90 11.052 11.060 11.062 -0.423 -0.230 -1.061 -0.423 -0.230 0.244 0.448 0.097 0.678 0.260 - 238.95 11.268 11.284 11.284 -0.606 0.045 -0.845 -0.606 0.045 -0.038 0.512 -0.027 0.542 0.257 - 239.00 11.441 11.470 11.471 -0.812 -0.132 -0.671 -0.812 -0.132 0.089 0.545 0.107 0.564 0.281 - 239.05 11.279 11.312 11.313 -0.866 0.126 -0.833 -0.866 0.126 -0.105 0.721 -0.109 0.730 0.369 - 239.10 11.247 11.315 11.315 -1.239 0.063 -0.866 -1.239 0.063 -0.055 1.073 -0.079 1.145 0.539 - 239.15 11.303 11.365 11.368 -1.182 0.262 -0.810 -1.182 0.262 -0.212 0.957 -0.309 1.061 0.514 - 239.20 11.328 11.389 11.389 -1.178 -0.031 -0.785 -1.178 -0.031 0.024 0.924 0.037 1.002 0.462 - 239.25 11.568 11.642 11.652 -1.313 -0.475 -0.545 -1.313 -0.475 0.259 0.716 0.623 1.124 0.492 - 239.30 11.639 11.719 11.723 -1.361 -0.301 -0.473 -1.361 -0.301 0.142 0.644 0.409 1.083 0.388 - 239.35 11.554 11.609 11.610 -1.131 0.051 -0.559 -1.131 0.051 -0.029 0.632 -0.058 0.797 0.317 - 239.40 11.580 11.638 11.638 -1.162 -0.010 -0.533 -1.162 -0.010 0.005 0.619 0.012 0.817 0.310 - 239.45 11.508 11.554 11.554 -1.032 0.010 -0.605 -1.032 0.010 -0.006 0.624 -0.010 0.716 0.312 - 239.50 11.454 11.534 11.535 -1.359 0.093 -0.659 -1.359 0.093 -0.061 0.895 -0.126 1.144 0.453 - 239.55 11.570 11.677 11.680 -1.572 0.264 -0.542 -1.572 0.264 -0.143 0.853 -0.416 1.418 0.480 - 239.60 11.346 11.433 11.434 -1.408 -0.026 -0.766 -1.408 -0.026 0.020 1.079 0.036 1.285 0.540 - 239.65 11.087 11.143 11.146 -1.119 -0.260 -1.026 -1.119 -0.260 0.267 1.148 0.291 1.186 0.607 - 239.70 11.218 11.311 11.323 -1.452 -0.503 -0.895 -1.452 -0.503 0.450 1.300 0.731 1.582 0.779 - 239.75 11.117 11.185 11.199 -1.231 -0.571 -0.996 -1.231 -0.571 0.568 1.226 0.702 1.416 0.761 - 239.80 11.244 11.309 11.317 -1.210 -0.425 -0.869 -1.210 -0.425 0.369 1.051 0.515 1.199 0.613 - 239.85 11.182 11.239 11.245 -1.125 -0.389 -0.931 -1.125 -0.389 0.362 1.047 0.437 1.141 0.595 - 239.90 11.597 11.656 11.669 -1.178 -0.547 -0.516 -1.178 -0.547 0.282 0.608 0.644 0.976 0.465 - 239.95 11.809 11.837 11.842 -0.811 -0.348 -0.303 -0.811 -0.348 0.106 0.246 0.282 0.436 0.195 - 240.00 11.619 11.657 11.658 -0.944 -0.148 -0.494 -0.944 -0.148 0.073 0.467 0.139 0.579 0.246 - 240.05 11.338 11.383 11.386 -1.014 0.249 -0.775 -1.014 0.249 -0.193 0.786 -0.253 0.845 0.424 - 240.10 11.330 11.386 11.386 -1.127 -0.105 -0.783 -1.127 -0.105 0.082 0.882 0.118 0.947 0.447 - 240.15 11.244 11.312 11.317 -1.240 -0.336 -0.869 -1.240 -0.336 0.292 1.078 0.416 1.203 0.596 - 240.20 11.248 11.295 11.326 -1.028 -0.838 -0.865 -1.028 -0.838 0.724 0.889 0.861 1.253 0.717 - 240.25 11.420 11.465 11.482 -1.023 -0.615 -0.693 -1.023 -0.615 0.426 0.709 0.629 0.952 0.519 - 240.30 11.564 11.654 11.671 -1.446 -0.627 -0.549 -1.446 -0.627 0.344 0.794 0.907 1.393 0.627 - 240.35 11.601 11.690 11.705 -1.442 -0.596 -0.512 -1.442 -0.596 0.305 0.738 0.860 1.348 0.587 - 240.40 11.780 11.844 11.886 -1.229 -0.993 -0.333 -1.229 -0.993 0.330 0.409 1.221 1.304 0.664 - 240.45 11.807 11.893 11.928 -1.425 -0.921 -0.306 -1.425 -0.921 0.282 0.436 1.313 1.487 0.706 - 240.50 11.619 11.724 11.764 -1.564 -0.975 -0.494 -1.564 -0.975 0.481 0.772 1.525 1.820 0.888 - 240.55 11.507 11.611 11.638 -1.551 -0.794 -0.605 -1.551 -0.794 0.480 0.939 1.231 1.701 0.810 - 240.60 11.511 11.582 11.595 -1.282 -0.544 -0.602 -1.282 -0.544 0.327 0.771 0.698 1.151 0.545 - 240.65 11.673 11.733 11.748 -1.187 -0.584 -0.440 -1.187 -0.584 0.257 0.522 0.693 0.972 0.452 - 240.70 11.846 11.889 11.902 -1.017 -0.555 -0.267 -1.017 -0.555 0.148 0.272 0.564 0.707 0.322 - 240.75 11.888 11.912 11.917 -0.752 -0.353 -0.225 -0.752 -0.353 0.079 0.169 0.265 0.370 0.162 - 240.80 11.887 11.970 11.974 -1.408 -0.295 -0.226 -1.408 -0.295 0.067 0.318 0.416 1.060 0.264 - 240.85 11.868 11.966 11.989 -1.535 -0.732 -0.245 -1.535 -0.732 0.180 0.376 1.124 1.477 0.600 - 240.90 12.002 12.064 12.101 -1.227 -0.945 -0.111 -1.227 -0.945 0.105 0.137 1.159 1.205 0.586 - 240.95 11.933 11.970 12.006 -0.941 -0.937 -0.180 -0.941 -0.937 0.169 0.170 0.881 0.898 0.457 - 241.00 11.775 11.798 11.823 -0.738 -0.766 -0.338 -0.738 -0.766 0.259 0.249 0.565 0.623 0.335 - 241.05 11.847 11.896 11.930 -1.078 -0.901 -0.266 -1.078 -0.901 0.239 0.286 0.971 1.022 0.520 - 241.10 11.771 11.806 11.840 -0.919 -0.891 -0.342 -0.919 -0.891 0.305 0.314 0.819 0.878 0.464 - 241.15 11.847 11.877 11.901 -0.842 -0.767 -0.266 -0.842 -0.767 0.204 0.224 0.646 0.684 0.357 - 241.20 11.835 11.860 11.879 -0.769 -0.663 -0.277 -0.769 -0.663 0.184 0.213 0.510 0.554 0.291 - 241.25 12.072 12.097 12.116 -0.776 -0.686 -0.041 -0.776 -0.686 0.028 0.032 0.532 0.537 0.267 - 241.30 11.951 11.989 12.020 -0.951 -0.857 -0.161 -0.951 -0.857 0.138 0.153 0.815 0.832 0.420 - 241.35 12.003 12.040 12.054 -0.943 -0.578 -0.109 -0.943 -0.578 0.063 0.103 0.545 0.617 0.279 - 241.40 11.960 11.979 11.998 -0.682 -0.670 -0.153 -0.682 -0.670 0.102 0.104 0.457 0.469 0.240 - 241.45 11.784 11.801 11.826 -0.617 -0.771 -0.328 -0.617 -0.771 0.253 0.202 0.475 0.541 0.288 - 241.50 11.803 11.816 11.833 -0.547 -0.640 -0.310 -0.547 -0.640 0.198 0.170 0.350 0.403 0.218 - 241.55 11.926 11.943 11.964 -0.636 -0.709 -0.187 -0.636 -0.709 0.133 0.119 0.451 0.471 0.242 - 241.60 11.986 11.995 12.015 -0.484 -0.696 -0.127 -0.484 -0.696 0.089 0.062 0.337 0.367 0.177 - 241.65 12.319 12.357 12.374 -0.966 -0.641 0.207 -0.966 -0.641 -0.132 -0.199 0.619 0.693 0.332 - 241.70 12.227 12.252 12.311 -0.771 -1.211 0.115 -0.771 -1.211 -0.139 -0.088 0.934 1.038 0.474 - 241.75 12.394 12.397 12.435 -0.258 -0.976 0.282 -0.258 -0.976 -0.275 -0.073 0.252 0.549 0.190 - 241.80 12.276 12.278 12.306 -0.178 -0.834 0.163 -0.178 -0.834 -0.136 -0.029 0.148 0.377 0.102 - 241.85 12.198 12.203 12.217 -0.349 -0.586 0.086 -0.349 -0.586 -0.050 -0.030 0.205 0.236 0.106 - 241.90 12.346 12.379 12.394 -0.900 -0.609 0.233 -0.900 -0.609 -0.142 -0.210 0.548 0.618 0.302 - 241.95 12.464 12.484 12.514 -0.701 -0.870 0.351 -0.701 -0.870 -0.306 -0.246 0.610 0.686 0.363 - 242.00 12.187 12.191 12.214 -0.325 -0.744 0.074 -0.325 -0.744 -0.055 -0.024 0.241 0.332 0.124 - 242.05 12.006 12.009 12.016 -0.274 -0.403 -0.107 -0.274 -0.403 0.043 0.029 0.110 0.124 0.061 - 242.10 12.410 12.415 12.446 -0.355 -0.884 0.297 -0.355 -0.884 -0.262 -0.105 0.314 0.498 0.211 - 242.15 12.314 12.320 12.342 -0.388 -0.738 0.201 -0.388 -0.738 -0.148 -0.078 0.286 0.367 0.166 - 242.20 12.332 12.337 12.343 -0.335 -0.388 0.219 -0.335 -0.388 -0.085 -0.073 0.130 0.155 0.086 - 242.25 12.007 12.010 12.010 -0.239 -0.129 -0.106 -0.239 -0.129 0.014 0.025 0.031 0.043 0.021 - 242.30 11.855 11.855 11.857 -0.023 0.258 -0.258 -0.023 0.258 -0.067 0.006 -0.006 0.067 0.034 - 242.35 11.932 11.932 11.932 0.038 0.099 -0.181 0.038 0.099 -0.018 -0.007 0.004 0.022 0.010 - 242.40 11.991 11.993 11.993 0.193 -0.085 -0.122 0.193 -0.085 0.010 -0.024 -0.016 0.030 0.015 - 242.45 12.212 12.216 12.216 0.300 -0.116 0.099 0.300 -0.116 -0.011 0.030 -0.035 0.057 0.024 - 242.50 12.240 12.240 12.244 0.123 0.290 0.127 0.123 0.290 0.037 0.016 0.036 0.058 0.027 - 242.55 12.092 12.094 12.101 -0.225 0.401 -0.021 -0.225 0.401 -0.008 0.005 -0.090 0.106 0.045 - 242.60 12.180 12.180 12.183 -0.127 0.255 0.067 -0.127 0.255 0.017 -0.009 -0.032 0.043 0.019 - 242.65 12.127 12.132 12.132 -0.318 0.069 0.015 -0.318 0.069 0.001 -0.005 -0.022 0.053 0.011 - 242.70 12.248 12.259 12.264 -0.506 0.362 0.135 -0.506 0.362 0.049 -0.068 -0.183 0.203 0.101 - 242.75 12.006 12.006 12.009 -0.007 0.261 -0.107 -0.007 0.261 -0.028 0.001 -0.002 0.040 0.014 - 242.80 11.865 11.866 11.866 -0.130 0.005 -0.248 -0.130 0.005 -0.001 0.032 -0.001 0.039 0.016 - 242.85 11.803 11.817 11.820 -0.569 0.260 -0.310 -0.569 0.260 -0.080 0.176 -0.148 0.243 0.122 - 242.90 12.109 12.115 12.115 -0.371 0.037 -0.004 -0.371 0.037 -0.000 0.001 -0.014 0.070 0.007 - 242.95 12.166 12.180 12.180 -0.585 0.074 0.053 -0.585 0.074 0.004 -0.031 -0.043 0.175 0.027 - 243.00 12.424 12.444 12.445 -0.700 -0.141 0.312 -0.700 -0.141 -0.044 -0.218 0.099 0.303 0.122 - 243.05 12.619 12.635 12.643 -0.642 -0.446 0.506 -0.642 -0.446 -0.226 -0.325 0.286 0.434 0.244 - 243.10 12.627 12.646 12.647 -0.689 -0.162 0.514 -0.689 -0.162 -0.083 -0.354 0.112 0.383 0.190 - 243.15 12.563 12.569 12.571 -0.375 -0.250 0.450 -0.375 -0.250 -0.113 -0.169 0.094 0.203 0.112 - 243.20 12.665 12.669 12.672 -0.321 -0.274 0.552 -0.321 -0.274 -0.152 -0.178 0.088 0.242 0.125 - 243.25 12.860 12.872 12.876 -0.559 -0.310 0.747 -0.559 -0.310 -0.231 -0.417 0.173 0.483 0.254 - 243.30 12.696 12.721 12.722 -0.796 -0.145 0.583 -0.796 -0.145 -0.084 -0.464 0.115 0.497 0.243 - 243.35 12.669 12.687 12.687 -0.668 -0.069 0.556 -0.668 -0.069 -0.038 -0.371 0.046 0.380 0.188 - 243.40 12.520 12.546 12.547 -0.800 -0.134 0.408 -0.800 -0.134 -0.055 -0.326 0.107 0.412 0.174 - 243.45 12.314 12.318 12.319 -0.315 -0.150 0.201 -0.315 -0.150 -0.030 -0.063 0.047 0.081 0.042 - 243.50 12.099 12.099 12.103 -0.097 -0.293 -0.014 -0.097 -0.293 0.004 0.001 0.028 0.048 0.014 - 243.55 12.241 12.242 12.254 -0.193 -0.541 0.128 -0.193 -0.541 -0.069 -0.025 0.105 0.173 0.064 - 243.60 12.405 12.407 12.413 -0.258 -0.364 0.292 -0.258 -0.364 -0.106 -0.075 0.094 0.142 0.080 - 243.65 12.623 12.623 12.629 -0.019 -0.373 0.511 -0.019 -0.373 -0.190 -0.010 0.007 0.200 0.095 - 243.70 12.384 12.390 12.392 0.376 -0.197 0.271 0.376 -0.197 -0.053 0.102 -0.074 0.127 0.069 - 243.75 12.341 12.347 12.352 0.382 -0.358 0.228 0.382 -0.358 -0.082 0.087 -0.137 0.163 0.091 - 243.80 12.362 12.368 12.378 0.374 -0.503 0.249 0.374 -0.503 -0.126 0.093 -0.188 0.228 0.122 - 243.85 12.366 12.378 12.401 0.536 -0.753 0.253 0.536 -0.753 -0.191 0.136 -0.403 0.459 0.233 - 243.90 12.464 12.472 12.478 0.448 -0.373 0.352 0.448 -0.373 -0.131 0.158 -0.167 0.232 0.132 - 243.95 12.699 12.710 12.711 0.531 -0.054 0.587 0.531 -0.054 -0.032 0.311 -0.029 0.314 0.157 - 244.00 12.558 12.559 12.560 0.162 -0.107 0.445 0.162 -0.107 -0.048 0.072 -0.017 0.118 0.044 - 244.05 12.581 12.588 12.589 0.417 -0.109 0.469 0.417 -0.109 -0.051 0.195 -0.045 0.203 0.104 - 244.10 12.517 12.525 12.525 0.449 -0.083 0.404 0.449 -0.083 -0.034 0.182 -0.037 0.186 0.094 - 244.15 12.410 12.427 12.429 0.647 -0.216 0.297 0.647 -0.216 -0.064 0.192 -0.140 0.277 0.123 - 244.20 12.082 12.087 12.092 0.358 -0.340 -0.031 0.358 -0.340 0.010 -0.011 -0.122 0.123 0.061 - 244.25 12.169 12.169 12.174 0.051 -0.356 0.056 0.051 -0.356 -0.020 0.003 -0.018 0.066 0.014 - 244.30 12.122 12.122 12.124 0.056 -0.242 0.009 0.056 -0.242 -0.002 0.001 -0.014 0.031 0.007 - 244.35 12.260 12.260 12.264 0.106 -0.300 0.147 0.106 -0.300 -0.044 0.016 -0.032 0.061 0.028 - 244.40 12.139 12.139 12.143 -0.042 -0.308 0.026 -0.042 -0.308 -0.008 -0.001 0.013 0.049 0.008 - 244.45 12.451 12.452 12.455 0.125 -0.275 0.338 0.125 -0.275 -0.093 0.042 -0.034 0.103 0.054 - 244.50 12.330 12.331 12.332 0.129 -0.096 0.218 0.129 -0.096 -0.021 0.028 -0.012 0.037 0.019 - 244.55 12.082 12.089 12.092 0.423 0.234 -0.031 0.423 0.234 -0.007 -0.013 0.099 0.117 0.050 - 244.60 12.468 12.489 12.511 0.724 0.730 0.356 0.724 0.730 0.260 0.257 0.529 0.592 0.321 - 244.65 12.542 12.555 12.571 0.577 0.630 0.429 0.577 0.630 0.270 0.248 0.363 0.457 0.258 - 244.70 12.628 12.640 12.660 0.532 0.722 0.516 0.532 0.722 0.372 0.274 0.384 0.535 0.301 - 244.75 12.560 12.568 12.604 0.463 0.953 0.447 0.463 0.953 0.426 0.207 0.441 0.661 0.324 - 244.80 12.525 12.531 12.556 0.418 0.785 0.412 0.418 0.785 0.323 0.172 0.328 0.480 0.246 - 244.85 12.604 12.611 12.638 0.438 0.823 0.491 0.438 0.823 0.404 0.215 0.361 0.555 0.291 - 244.90 12.462 12.481 12.525 0.683 1.054 0.349 0.683 1.054 0.368 0.239 0.720 0.850 0.421 - 244.95 12.378 12.381 12.461 0.260 1.417 0.265 0.260 1.417 0.376 0.069 0.369 1.073 0.265 - 245.00 12.588 12.589 12.639 0.165 1.124 0.475 0.165 1.124 0.534 0.078 0.186 0.758 0.285 - 245.05 12.768 12.768 12.797 0.081 0.865 0.655 0.081 0.865 0.567 0.053 0.070 0.592 0.287 - 245.10 12.832 12.832 12.884 0.027 1.152 0.719 0.027 1.152 0.829 0.020 0.032 0.923 0.415 - 245.15 13.169 13.169 13.189 0.030 0.722 1.056 0.030 0.722 0.763 0.031 0.021 0.819 0.382 - 245.20 12.870 12.874 12.903 0.325 0.865 0.757 0.325 0.865 0.655 0.246 0.281 0.713 0.377 - 245.25 12.601 12.614 12.655 0.580 1.016 0.488 0.580 1.016 0.496 0.283 0.589 0.803 0.410 - 245.30 12.475 12.479 12.512 0.336 0.903 0.362 0.336 0.903 0.327 0.122 0.304 0.530 0.231 - 245.35 12.824 12.832 12.846 0.441 0.606 0.711 0.441 0.606 0.431 0.314 0.267 0.534 0.298 - 245.40 12.538 12.549 12.568 0.544 0.686 0.425 0.544 0.686 0.292 0.231 0.374 0.474 0.264 - 245.45 12.603 12.619 12.634 0.622 0.622 0.491 0.622 0.622 0.305 0.305 0.387 0.508 0.290 - 245.50 12.642 12.683 12.708 1.014 0.798 0.530 1.014 0.798 0.423 0.537 0.809 0.973 0.530 - 245.55 12.634 12.659 12.688 0.782 0.859 0.522 0.782 0.859 0.448 0.408 0.672 0.811 0.453 - 245.60 12.781 12.791 12.816 0.505 0.798 0.668 0.505 0.798 0.533 0.337 0.403 0.669 0.374 - 245.65 12.711 12.713 12.737 0.224 0.790 0.598 0.224 0.790 0.472 0.134 0.177 0.515 0.261 - 245.70 12.457 12.463 12.481 0.387 0.682 0.344 0.387 0.682 0.235 0.133 0.264 0.367 0.189 - 245.75 12.585 12.592 12.611 0.415 0.699 0.472 0.415 0.699 0.330 0.196 0.290 0.442 0.241 - 245.80 12.717 12.723 12.751 0.401 0.843 0.604 0.401 0.843 0.509 0.242 0.338 0.618 0.329 - 245.85 12.824 12.842 12.856 0.667 0.607 0.711 0.667 0.607 0.432 0.474 0.405 0.660 0.379 - 245.90 12.985 13.009 13.016 0.781 0.442 0.873 0.781 0.442 0.385 0.681 0.345 0.783 0.428 - 245.95 12.713 12.734 12.747 0.735 0.574 0.600 0.735 0.574 0.345 0.441 0.422 0.615 0.350 - 246.00 12.420 12.471 12.478 1.117 0.421 0.308 1.117 0.421 0.129 0.344 0.470 0.760 0.298 - 246.05 12.330 12.354 12.364 0.763 0.492 0.218 0.763 0.492 0.107 0.166 0.375 0.435 0.212 - 246.10 12.450 12.465 12.488 0.602 0.760 0.337 0.602 0.760 0.257 0.203 0.458 0.527 0.281 - 246.15 12.764 12.779 12.804 0.631 0.793 0.651 0.631 0.793 0.516 0.411 0.501 0.726 0.414 - 246.20 12.593 12.605 12.621 0.548 0.621 0.481 0.548 0.621 0.299 0.264 0.341 0.459 0.262 - 246.25 12.542 12.558 12.567 0.633 0.473 0.430 0.633 0.473 0.203 0.272 0.299 0.404 0.226 - 246.30 12.377 12.400 12.413 0.758 0.575 0.264 0.758 0.575 0.152 0.200 0.436 0.488 0.252 - 246.35 12.882 12.887 12.905 0.386 0.673 0.769 0.386 0.673 0.517 0.297 0.260 0.596 0.325 - 246.40 12.857 12.878 12.908 0.742 0.877 0.744 0.742 0.877 0.653 0.552 0.651 0.937 0.537 - 246.45 12.611 12.636 12.673 0.793 0.964 0.498 0.793 0.964 0.480 0.395 0.764 0.903 0.493 - 246.50 12.769 12.798 12.808 0.862 0.509 0.656 0.862 0.509 0.334 0.565 0.439 0.716 0.395 - 246.55 12.915 12.942 12.948 0.822 0.412 0.803 0.822 0.412 0.330 0.660 0.338 0.745 0.406 - 246.60 12.900 12.923 12.927 0.772 0.297 0.788 0.772 0.297 0.234 0.608 0.229 0.652 0.345 - 246.65 12.732 12.741 12.753 0.490 0.559 0.619 0.490 0.559 0.346 0.303 0.274 0.468 0.268 - 246.70 12.782 12.784 12.808 0.239 0.775 0.669 0.239 0.775 0.518 0.160 0.186 0.553 0.287 - 246.75 12.925 12.926 12.951 -0.118 0.804 0.812 -0.118 0.804 0.653 -0.096 -0.095 0.660 0.333 - 246.80 12.843 12.847 12.863 -0.312 0.641 0.730 -0.312 0.641 0.468 -0.228 -0.200 0.520 0.279 - 246.85 12.798 12.803 12.813 -0.370 0.505 0.685 -0.370 0.505 0.346 -0.254 -0.187 0.431 0.234 - 246.90 12.853 12.868 12.887 -0.624 0.695 0.740 -0.624 0.695 0.514 -0.462 -0.434 0.710 0.408 - 246.95 12.686 12.700 12.715 -0.607 0.617 0.573 -0.607 0.617 0.354 -0.348 -0.375 0.539 0.311 - 247.00 12.582 12.593 12.615 -0.515 0.752 0.469 -0.515 0.752 0.353 -0.242 -0.387 0.525 0.288 - 247.05 12.826 12.837 12.855 -0.517 0.696 0.713 -0.517 0.696 0.496 -0.369 -0.360 0.630 0.358 - 247.10 12.445 12.460 12.487 -0.609 0.817 0.332 -0.609 0.817 0.271 -0.202 -0.498 0.574 0.301 - 247.15 12.383 12.399 12.418 -0.636 0.682 0.270 -0.636 0.682 0.184 -0.172 -0.434 0.472 0.251 - 247.20 12.559 12.571 12.584 -0.566 0.559 0.446 -0.566 0.559 0.249 -0.252 -0.316 0.416 0.238 - 247.25 12.743 12.757 12.775 -0.609 0.677 0.630 -0.609 0.677 0.426 -0.384 -0.413 0.613 0.353 - 247.30 12.565 12.578 12.598 -0.567 0.704 0.453 -0.567 0.704 0.319 -0.257 -0.399 0.511 0.286 - 247.35 12.741 12.751 12.757 -0.521 0.400 0.628 -0.521 0.400 0.251 -0.327 -0.208 0.413 0.231 - 247.40 12.710 12.718 12.726 -0.448 0.475 0.597 -0.448 0.475 0.283 -0.268 -0.213 0.391 0.222 - 247.45 12.558 12.562 12.575 -0.332 0.567 0.445 -0.332 0.567 0.252 -0.148 -0.188 0.315 0.174 - 247.50 12.406 12.407 12.444 -0.081 0.959 0.293 -0.081 0.959 0.281 -0.024 -0.078 0.506 0.146 - 247.55 12.255 12.255 12.287 0.029 0.875 0.142 0.029 0.875 0.125 0.004 0.026 0.394 0.064 - 247.60 12.424 12.425 12.445 -0.089 0.720 0.311 -0.089 0.720 0.224 -0.028 -0.064 0.312 0.118 - 247.65 12.549 12.549 12.579 -0.061 0.868 0.437 -0.061 0.868 0.379 -0.026 -0.053 0.474 0.192 - 247.70 12.680 12.680 12.714 -0.035 0.924 0.568 -0.035 0.924 0.524 -0.020 -0.032 0.588 0.263 - 247.75 12.575 12.576 12.612 -0.127 0.960 0.462 -0.127 0.960 0.444 -0.059 -0.122 0.576 0.232 - 247.80 12.784 12.785 12.800 0.194 0.615 0.671 0.194 0.615 0.413 0.130 0.119 0.433 0.225 - 247.85 13.000 13.001 13.011 -0.087 0.522 0.888 -0.087 0.522 0.464 -0.077 -0.045 0.534 0.236 - 247.90 12.854 12.860 12.864 -0.397 0.298 0.741 -0.397 0.298 0.221 -0.294 -0.118 0.398 0.193 - 247.95 12.893 12.904 12.904 -0.523 0.080 0.781 -0.523 0.080 0.062 -0.408 -0.042 0.445 0.208 - 248.00 12.619 12.663 12.663 -1.049 -0.027 0.506 -1.049 -0.027 -0.014 -0.531 0.028 0.678 0.266 - 248.05 12.412 12.424 12.434 -0.547 0.488 0.300 -0.547 0.488 0.146 -0.164 -0.267 0.314 0.173 - 248.10 12.258 12.263 12.266 -0.345 0.280 0.145 -0.345 0.280 0.041 -0.050 -0.097 0.109 0.058 - 248.15 12.448 12.448 12.450 -0.009 0.223 0.335 -0.009 0.223 0.075 -0.003 -0.002 0.081 0.037 - 248.20 12.537 12.537 12.549 -0.050 0.560 0.424 -0.050 0.560 0.237 -0.021 -0.028 0.248 0.120 - 248.25 12.407 12.407 12.434 0.027 0.816 0.295 0.027 0.816 0.240 0.008 0.022 0.377 0.121 - 248.30 12.237 12.242 12.251 -0.344 0.481 0.124 -0.344 0.481 0.060 -0.043 -0.166 0.183 0.091 - 248.35 12.321 12.326 12.339 -0.364 0.557 0.208 -0.364 0.557 0.116 -0.076 -0.203 0.243 0.123 - 248.40 12.263 12.263 12.284 0.035 0.726 0.150 0.035 0.726 0.109 0.005 0.026 0.275 0.056 - 248.45 11.969 11.976 11.996 0.412 0.691 -0.144 0.412 0.691 -0.099 -0.059 0.284 0.334 0.153 - 248.50 12.094 12.098 12.106 0.307 0.436 -0.018 0.307 0.436 -0.008 -0.006 0.134 0.142 0.067 - 248.55 12.317 12.318 12.320 0.125 0.192 0.205 0.125 0.192 0.039 0.026 0.024 0.047 0.026 - 248.60 12.408 12.423 12.434 0.612 0.529 0.295 0.612 0.529 0.156 0.181 0.324 0.371 0.201 - 248.65 12.612 12.621 12.640 0.492 0.692 0.499 0.492 0.692 0.346 0.245 0.341 0.485 0.272 - 248.70 13.011 13.011 13.014 -0.025 0.284 0.898 -0.025 0.284 0.255 -0.023 -0.007 0.444 0.128 - 248.75 13.147 13.150 13.150 -0.255 -0.071 1.034 -0.255 -0.071 -0.074 -0.264 0.018 0.570 0.137 - 248.80 13.250 13.250 13.252 -0.109 -0.185 1.137 -0.109 -0.185 -0.210 -0.124 0.020 0.669 0.122 - 248.85 13.183 13.192 13.192 -0.478 0.047 1.070 -0.478 0.047 0.050 -0.511 -0.022 0.688 0.257 - 248.90 13.087 13.096 13.102 -0.483 0.423 0.974 -0.483 0.423 0.412 -0.470 -0.204 0.680 0.329 - 248.95 13.126 13.150 13.169 -0.799 0.709 1.013 -0.799 0.709 0.719 -0.810 -0.567 1.084 0.611 - 249.00 13.354 13.396 13.405 -1.070 0.482 1.241 -1.070 0.482 0.598 -1.328 -0.515 1.458 0.772 - 249.05 13.188 13.235 13.240 -1.116 0.359 1.075 -1.116 0.359 0.386 -1.200 -0.401 1.265 0.661 - 249.10 13.417 13.441 13.443 -0.800 0.232 1.304 -0.800 0.232 0.302 -1.044 -0.185 1.198 0.551 - 249.15 13.452 13.489 13.492 -1.004 0.298 1.339 -1.004 0.298 0.400 -1.344 -0.300 1.445 0.717 - 249.20 13.429 13.490 13.497 -1.287 0.434 1.316 -1.287 0.434 0.570 -1.694 -0.558 1.788 0.936 - 249.25 13.545 13.588 13.588 -1.069 0.003 1.433 -1.069 0.003 0.005 -1.531 -0.004 1.597 0.765 - 249.30 13.638 13.683 13.684 -1.108 0.212 1.525 -1.108 0.212 0.323 -1.689 -0.235 1.799 0.868 - 249.35 13.707 13.747 13.749 -1.051 0.237 1.594 -1.051 0.237 0.378 -1.675 -0.250 1.851 0.868 - 249.40 14.004 14.030 14.030 -0.855 0.104 1.891 -0.855 0.104 0.198 -1.616 -0.089 2.158 0.815 - 249.45 14.072 14.095 14.098 -0.790 0.320 1.960 -0.790 0.320 0.628 -1.547 -0.253 2.283 0.844 - 249.50 14.250 14.286 14.304 -1.014 0.710 2.137 -1.014 0.710 1.517 -2.166 -0.719 3.050 1.370 - 249.55 14.216 14.235 14.252 -0.748 0.684 2.103 -0.748 0.684 1.437 -1.572 -0.511 2.724 1.095 - 249.60 13.850 13.866 13.886 -0.669 0.747 1.737 -0.669 0.747 1.298 -1.163 -0.500 2.012 0.906 - 249.65 13.884 13.904 13.916 -0.756 0.563 1.771 -0.756 0.563 0.998 -1.339 -0.426 2.013 0.862 - 249.70 13.553 13.603 13.629 -1.170 0.838 1.440 -1.170 0.838 1.207 -1.685 -0.981 2.073 1.147 - 249.75 13.428 13.477 13.494 -1.152 0.676 1.315 -1.152 0.676 0.888 -1.515 -0.778 1.756 0.960 - 249.80 13.046 13.092 13.112 -1.088 0.729 0.934 -1.088 0.729 0.680 -1.016 -0.793 1.293 0.728 - 249.85 12.831 12.908 12.917 -1.406 0.484 0.718 -1.406 0.484 0.347 -1.010 -0.680 1.363 0.633 - 249.90 13.120 13.191 13.207 -1.367 0.634 1.008 -1.367 0.634 0.638 -1.377 -0.866 1.643 0.874 - 249.95 12.968 13.068 13.090 -1.618 0.749 0.855 -1.618 0.749 0.640 -1.383 -1.211 1.954 0.974 - 250.00 13.200 13.305 13.315 -1.671 0.508 1.087 -1.671 0.508 0.552 -1.816 -0.848 2.115 1.040 - 250.05 13.000 13.109 13.109 -1.683 0.152 0.887 -1.683 0.152 0.135 -1.493 -0.255 1.822 0.760 - 250.10 12.790 12.861 12.873 -1.344 0.548 0.678 -1.344 0.548 0.371 -0.911 -0.737 1.283 0.614 - 250.15 12.813 12.861 12.864 -1.112 0.234 0.701 -1.112 0.234 0.164 -0.779 -0.260 0.891 0.419 - 250.20 12.863 12.899 12.899 -0.962 -0.058 0.751 -0.962 -0.058 -0.043 -0.722 0.056 0.746 0.363 - 250.25 13.029 13.048 13.053 -0.704 0.359 0.916 -0.704 0.359 0.328 -0.645 -0.253 0.732 0.383 - 250.30 13.410 13.432 13.432 -0.765 0.019 1.297 -0.765 0.019 0.025 -0.993 -0.015 1.135 0.497 - 250.35 13.410 13.446 13.448 -0.990 -0.235 1.297 -0.990 -0.235 -0.305 -1.284 0.233 1.358 0.670 - 250.40 13.333 13.371 13.379 -1.011 -0.467 1.220 -1.011 -0.467 -0.570 -1.234 0.472 1.365 0.719 - 250.45 13.031 13.090 13.103 -1.239 -0.588 0.918 -1.239 -0.588 -0.540 -1.138 0.729 1.362 0.727 - 250.50 12.703 12.751 12.772 -1.108 -0.736 0.590 -1.108 -0.736 -0.434 -0.654 0.815 1.059 0.566 - 250.55 12.733 12.772 12.797 -1.005 -0.791 0.620 -1.005 -0.791 -0.491 -0.623 0.795 1.010 0.562 - 250.60 13.117 13.172 13.193 -1.205 -0.755 1.004 -1.205 -0.755 -0.758 -1.209 0.910 1.515 0.846 - 250.65 13.458 13.515 13.536 -1.246 -0.747 1.345 -1.246 -0.747 -1.005 -1.675 0.931 1.959 1.082 - 250.70 13.408 13.458 13.480 -1.156 -0.779 1.295 -1.156 -0.779 -1.009 -1.498 0.901 1.811 1.009 - 250.75 12.910 12.997 13.042 -1.506 -1.078 0.797 -1.506 -1.078 -0.859 -1.200 1.623 2.032 1.097 - 250.80 12.749 12.801 12.862 -1.148 -1.253 0.637 -1.148 -1.253 -0.798 -0.731 1.438 1.646 0.900 - 250.85 12.674 12.751 12.829 -1.397 -1.419 0.561 -1.397 -1.419 -0.796 -0.784 1.982 2.140 1.138 - 250.90 12.567 12.617 12.676 -1.121 -1.220 0.454 -1.121 -1.220 -0.554 -0.509 1.368 1.476 0.781 - 250.95 12.302 12.341 12.398 -0.976 -1.182 0.190 -0.976 -1.182 -0.224 -0.185 1.154 1.193 0.595 - 251.00 12.399 12.437 12.471 -0.971 -0.918 0.286 -0.971 -0.918 -0.263 -0.278 0.892 0.934 0.485 - 251.05 12.784 12.817 12.834 -0.912 -0.662 0.671 -0.912 -0.662 -0.445 -0.612 0.604 0.860 0.484 - 251.10 12.631 12.643 12.658 -0.547 -0.607 0.518 -0.547 -0.607 -0.314 -0.283 0.332 0.468 0.269 - 251.15 12.647 12.673 12.684 -0.809 -0.518 0.534 -0.809 -0.518 -0.277 -0.432 0.419 0.604 0.331 - 251.20 12.579 12.606 12.612 -0.811 -0.415 0.467 -0.811 -0.415 -0.194 -0.378 0.336 0.524 0.271 - 251.25 12.403 12.428 12.428 -0.780 0.005 0.290 -0.780 0.005 0.001 -0.226 -0.004 0.346 0.113 - 251.30 12.411 12.421 12.421 -0.516 -0.033 0.298 -0.516 -0.033 -0.010 -0.154 0.017 0.178 0.078 - 251.35 12.398 12.414 12.414 -0.633 0.124 0.285 -0.633 0.124 0.035 -0.180 -0.079 0.249 0.100 - 251.40 12.348 12.353 12.356 -0.364 -0.260 0.235 -0.364 -0.260 -0.061 -0.086 0.095 0.128 0.071 - 251.45 12.601 12.605 12.608 -0.313 -0.282 0.489 -0.313 -0.282 -0.138 -0.153 0.088 0.208 0.112 - 251.50 12.790 12.802 12.803 -0.550 -0.196 0.677 -0.550 -0.196 -0.133 -0.373 0.108 0.400 0.205 - 251.55 13.013 13.036 13.040 -0.783 -0.324 0.900 -0.783 -0.324 -0.292 -0.705 0.254 0.764 0.402 - 251.60 12.891 12.921 12.925 -0.886 -0.324 0.778 -0.886 -0.324 -0.252 -0.690 0.287 0.748 0.394 - 251.65 12.560 12.606 12.606 -1.067 -0.077 0.448 -1.067 -0.077 -0.035 -0.478 0.082 0.672 0.243 - 251.70 12.641 12.712 12.714 -1.347 -0.195 0.528 -1.347 -0.195 -0.103 -0.711 0.263 1.065 0.383 - 251.75 12.885 12.960 12.962 -1.395 -0.193 0.772 -1.395 -0.193 -0.149 -1.077 0.270 1.290 0.560 - 251.80 13.041 13.114 13.115 -1.380 -0.193 0.928 -1.380 -0.193 -0.179 -1.281 0.266 1.401 0.660 - 251.85 12.788 12.810 12.810 -0.751 -0.027 0.675 -0.751 -0.027 -0.018 -0.507 0.020 0.510 0.254 - 251.90 12.572 12.590 12.591 -0.658 -0.165 0.459 -0.658 -0.165 -0.076 -0.302 0.109 0.336 0.165 - 251.95 12.598 12.615 12.617 -0.662 -0.219 0.485 -0.662 -0.219 -0.106 -0.321 0.145 0.361 0.184 - 252.00 12.473 12.485 12.491 -0.533 -0.407 0.360 -0.533 -0.407 -0.147 -0.192 0.217 0.290 0.162 - 252.05 12.364 12.367 12.367 -0.290 0.023 0.251 -0.290 0.023 0.006 -0.073 -0.007 0.074 0.037 - 252.10 12.553 12.555 12.559 -0.248 0.313 0.440 -0.248 0.313 0.138 -0.109 -0.078 0.177 0.096 - 252.15 12.607 12.608 12.608 -0.170 -0.029 0.494 -0.170 -0.029 -0.015 -0.084 0.005 0.137 0.043 - 252.20 12.525 12.529 12.531 -0.319 -0.213 0.413 -0.319 -0.213 -0.088 -0.131 0.068 0.159 0.086 - 252.25 12.281 12.289 12.292 -0.455 -0.273 0.168 -0.455 -0.273 -0.046 -0.076 0.124 0.155 0.076 - 252.30 12.236 12.239 12.239 -0.281 -0.117 0.123 -0.281 -0.117 -0.014 -0.034 0.033 0.054 0.025 - 252.35 12.360 12.366 12.367 -0.389 0.158 0.247 -0.389 0.158 0.039 -0.096 -0.061 0.119 0.060 - 252.40 12.382 12.396 12.400 -0.600 0.288 0.269 -0.600 0.288 0.077 -0.161 -0.173 0.258 0.124 - 252.45 12.362 12.371 12.373 -0.462 0.261 0.249 -0.462 0.261 0.065 -0.115 -0.120 0.172 0.089 - 252.50 12.431 12.442 12.442 -0.504 0.112 0.319 -0.504 0.112 0.036 -0.161 -0.056 0.184 0.087 - 252.55 12.098 12.108 12.117 -0.498 0.476 -0.015 -0.498 0.476 -0.007 0.007 -0.237 0.237 0.119 - 252.60 12.007 12.027 12.046 -0.694 0.669 -0.106 -0.694 0.669 -0.071 0.073 -0.465 0.470 0.238 - 252.65 12.386 12.434 12.435 -1.091 0.175 0.273 -1.091 0.175 0.048 -0.298 -0.191 0.648 0.179 - 252.70 12.333 12.368 12.368 -0.921 0.130 0.220 -0.921 0.130 0.029 -0.203 -0.120 0.457 0.119 - 252.75 12.223 12.256 12.259 -0.896 0.260 0.110 -0.896 0.260 0.029 -0.099 -0.233 0.441 0.127 - 252.80 12.265 12.293 12.300 -0.830 0.410 0.152 -0.830 0.410 0.062 -0.126 -0.340 0.440 0.184 - 252.85 12.184 12.207 12.219 -0.758 0.538 0.071 -0.758 0.538 0.038 -0.054 -0.408 0.435 0.207 - 252.90 11.995 12.009 12.009 -0.567 0.045 -0.117 -0.567 0.045 -0.005 0.067 -0.025 0.169 0.036 - 252.95 11.922 11.945 11.947 -0.743 0.178 -0.191 -0.743 0.178 -0.034 0.142 -0.132 0.310 0.098 - 253.00 11.730 11.746 11.749 -0.612 0.229 -0.383 -0.612 0.229 -0.088 0.234 -0.140 0.287 0.143 - 253.05 11.514 11.527 11.534 -0.534 0.404 -0.598 -0.534 0.404 -0.242 0.320 -0.216 0.403 0.228 - 253.10 11.433 11.441 11.448 -0.432 0.400 -0.680 -0.432 0.400 -0.272 0.293 -0.173 0.404 0.218 - 253.15 11.650 11.652 11.654 -0.263 -0.166 -0.463 -0.263 -0.166 0.077 0.122 0.044 0.156 0.075 - 253.20 11.624 11.629 11.630 0.349 -0.112 -0.489 0.349 -0.112 0.055 -0.171 -0.039 0.187 0.092 - 253.25 11.856 11.859 11.860 0.252 0.150 -0.256 0.252 0.150 -0.038 -0.064 0.038 0.076 0.042 - 253.30 12.054 12.060 12.061 0.400 0.109 -0.059 0.400 0.109 -0.006 -0.024 0.044 0.088 0.025 - 253.35 12.148 12.158 12.158 0.502 0.028 0.035 0.502 0.028 0.001 0.018 0.014 0.127 0.011 - 253.40 12.119 12.120 12.120 0.156 -0.041 0.006 0.156 -0.041 -0.000 0.001 -0.006 0.013 0.003 - 253.45 12.307 12.313 12.314 -0.388 0.055 0.194 -0.388 0.055 0.011 -0.076 -0.021 0.096 0.040 - 253.50 12.277 12.279 12.279 -0.228 -0.093 0.164 -0.228 -0.093 -0.015 -0.037 0.021 0.044 0.023 - 253.55 12.483 12.483 12.493 -0.098 -0.502 0.370 -0.098 -0.502 -0.186 -0.036 0.049 0.199 0.098 - 253.60 12.455 12.455 12.459 0.012 -0.299 0.342 0.012 -0.299 -0.102 0.004 -0.004 0.103 0.051 - 253.65 12.155 12.155 12.158 0.088 -0.245 0.042 0.088 -0.245 -0.010 0.004 -0.022 0.035 0.012 - 253.70 12.247 12.256 12.268 0.473 -0.523 0.135 0.473 -0.523 -0.070 0.064 -0.247 0.258 0.133 - 253.75 12.514 12.577 12.590 1.263 -0.573 0.401 1.263 -0.573 -0.230 0.506 -0.724 1.043 0.457 - 253.80 12.006 12.110 12.120 1.585 -0.490 -0.107 1.585 -0.490 0.053 -0.170 -0.777 1.382 0.399 - 253.85 12.216 12.312 12.325 1.528 -0.581 0.104 1.528 -0.581 -0.060 0.158 -0.888 1.342 0.452 - 253.90 12.210 12.313 12.318 1.587 -0.358 0.097 1.587 -0.358 -0.035 0.154 -0.569 1.328 0.295 - 253.95 12.608 12.708 12.710 1.591 -0.223 0.495 1.591 -0.223 -0.110 0.787 -0.355 1.412 0.435 - 254.00 12.503 12.581 12.581 1.395 -0.001 0.390 1.395 -0.001 -0.000 0.544 -0.002 1.050 0.272 - 254.05 12.495 12.549 12.549 1.164 -0.074 0.382 1.164 -0.074 -0.028 0.444 -0.086 0.753 0.227 - 254.10 12.475 12.538 12.543 1.254 -0.379 0.362 1.254 -0.379 -0.137 0.454 -0.476 0.924 0.336 - 254.15 12.584 12.653 12.668 1.314 -0.620 0.471 1.314 -0.620 -0.292 0.620 -0.814 1.167 0.532 - 254.20 12.531 12.606 12.633 1.378 -0.817 0.418 1.378 -0.817 -0.342 0.576 -1.126 1.371 0.655 - 254.25 12.576 12.656 12.678 1.420 -0.749 0.463 1.420 -0.749 -0.347 0.657 -1.064 1.397 0.649 - 254.30 12.757 12.832 12.853 1.386 -0.726 0.644 1.386 -0.726 -0.468 0.893 -1.006 1.431 0.712 - 254.35 12.422 12.451 12.456 0.860 -0.332 0.309 0.860 -0.332 -0.103 0.266 -0.286 0.473 0.202 - 254.40 12.211 12.246 12.270 0.932 -0.763 0.098 0.932 -0.763 -0.075 0.091 -0.711 0.730 0.360 - 254.45 12.191 12.228 12.264 0.953 -0.944 0.078 0.953 -0.944 -0.074 0.074 -0.899 0.902 0.453 - 254.50 12.255 12.285 12.338 0.863 -1.141 0.142 0.863 -1.141 -0.162 0.122 -0.985 1.034 0.503 - 254.55 12.342 12.386 12.438 1.042 -1.136 0.229 1.042 -1.136 -0.261 0.239 -1.184 1.215 0.618 - 254.60 12.346 12.377 12.408 0.873 -0.876 0.234 0.873 -0.876 -0.205 0.204 -0.765 0.792 0.409 - 254.65 12.232 12.290 12.310 1.194 -0.701 0.119 1.194 -0.701 -0.084 0.143 -0.837 0.966 0.427 - 254.70 12.190 12.251 12.267 1.223 -0.621 0.077 1.223 -0.621 -0.048 0.094 -0.759 0.943 0.383 - 254.75 12.124 12.188 12.192 1.243 -0.304 0.011 1.243 -0.304 -0.003 0.014 -0.377 0.818 0.189 - 254.80 12.001 12.058 12.060 1.175 -0.173 -0.112 1.175 -0.173 0.019 -0.131 -0.203 0.711 0.121 - 254.85 11.698 11.787 11.787 1.444 0.003 -0.415 1.444 0.003 -0.001 -0.599 0.005 1.128 0.299 - 254.90 11.565 11.613 11.619 1.055 0.364 -0.547 1.055 0.364 -0.199 -0.578 0.384 0.773 0.361 - 254.95 11.988 12.010 12.010 0.710 0.024 -0.124 0.710 0.024 -0.003 -0.088 0.017 0.260 0.045 - 255.00 12.032 12.048 12.050 0.627 -0.219 -0.081 0.627 -0.219 0.018 -0.051 -0.137 0.224 0.074 - 255.05 11.974 11.982 11.985 0.445 0.244 -0.139 0.445 0.244 -0.034 -0.062 0.108 0.138 0.065 - 255.10 11.750 11.759 11.764 0.460 0.364 -0.363 0.460 0.364 -0.132 -0.167 0.167 0.238 0.135 - 255.15 11.350 11.371 11.385 0.689 0.568 -0.763 0.689 0.568 -0.433 -0.526 0.391 0.690 0.393 - 255.20 11.459 11.493 11.504 0.885 0.507 -0.654 0.885 0.507 -0.332 -0.578 0.449 0.734 0.402 - 255.25 11.651 11.684 11.688 0.880 0.305 -0.462 0.880 0.305 -0.141 -0.407 0.268 0.540 0.253 - 255.30 11.231 11.263 11.263 0.851 -0.040 -0.882 0.851 -0.040 0.035 -0.750 -0.034 0.752 0.376 - 255.35 11.627 11.656 11.657 0.814 0.136 -0.485 0.814 0.136 -0.066 -0.395 0.110 0.458 0.208 - 255.40 11.725 11.739 11.739 0.564 0.110 -0.388 0.564 0.110 -0.043 -0.219 0.062 0.240 0.116 - 255.45 11.681 11.718 11.720 0.922 -0.210 -0.431 0.922 -0.210 0.091 -0.398 -0.194 0.540 0.226 - 255.50 11.815 11.870 11.880 1.144 -0.477 -0.298 1.144 -0.477 0.142 -0.341 -0.546 0.813 0.330 - 255.55 11.981 12.043 12.048 1.229 -0.331 -0.132 1.229 -0.331 0.044 -0.163 -0.407 0.819 0.220 - 255.60 11.779 11.841 11.842 1.212 -0.094 -0.334 1.212 -0.094 0.031 -0.404 -0.114 0.794 0.211 - 255.65 12.035 12.055 12.055 0.692 -0.117 -0.078 0.692 -0.117 0.009 -0.054 -0.081 0.249 0.049 - 255.70 11.743 11.774 11.775 0.851 0.168 -0.370 0.851 0.168 -0.062 -0.315 0.143 0.445 0.176 - 255.75 11.902 11.954 11.955 1.112 0.154 -0.211 1.112 0.154 -0.032 -0.235 0.171 0.653 0.146 - 255.80 12.187 12.227 12.234 0.985 0.395 0.075 0.985 0.395 0.029 0.074 0.389 0.566 0.199 - 255.85 12.089 12.170 12.181 1.403 0.530 -0.024 1.403 0.530 -0.013 -0.034 0.743 1.124 0.372 - 255.90 12.019 12.098 12.110 1.382 0.539 -0.094 1.382 0.539 -0.050 -0.130 0.744 1.105 0.379 - 255.95 11.905 11.948 11.979 1.020 0.851 -0.208 1.020 0.851 -0.177 -0.212 0.868 0.904 0.455 - 256.00 12.043 12.086 12.107 1.025 0.705 -0.070 1.025 0.705 -0.049 -0.072 0.722 0.776 0.364 - 256.05 11.953 11.994 11.997 0.988 0.277 -0.159 0.988 0.277 -0.044 -0.157 0.273 0.539 0.159 - 256.10 11.671 11.737 11.740 1.247 0.253 -0.442 1.247 0.253 -0.112 -0.551 0.315 0.907 0.322 - 256.15 11.503 11.595 11.597 1.458 0.195 -0.610 1.458 0.195 -0.119 -0.889 0.284 1.268 0.470 - 256.20 11.654 11.720 11.721 1.238 0.175 -0.459 1.238 0.175 -0.080 -0.568 0.216 0.887 0.306 - 256.25 11.712 11.796 11.815 1.409 0.665 -0.401 1.409 0.665 -0.267 -0.565 0.936 1.294 0.563 - 256.30 11.838 11.912 11.948 1.331 0.917 -0.275 1.331 0.917 -0.252 -0.366 1.221 1.344 0.650 - 256.35 11.695 11.795 11.819 1.536 0.737 -0.418 1.536 0.737 -0.308 -0.642 1.132 1.539 0.669 - 256.40 11.659 11.793 11.802 1.774 0.462 -0.454 1.774 0.462 -0.210 -0.806 0.820 1.784 0.584 - 256.45 11.437 11.618 11.636 2.043 0.637 -0.675 2.043 0.637 -0.430 -1.380 1.302 2.518 0.973 - 256.50 11.231 11.503 11.531 2.487 0.804 -0.882 2.487 0.804 -0.710 -2.194 2.000 3.804 1.526 - 256.55 11.374 11.630 11.662 2.424 0.865 -0.739 2.424 0.865 -0.639 -1.790 2.097 3.584 1.415 - 256.60 11.797 12.100 12.115 2.690 0.592 -0.315 2.690 0.592 -0.187 -0.848 1.594 3.843 0.908 - 256.65 11.848 12.108 12.114 2.494 0.403 -0.265 2.494 0.403 -0.107 -0.660 1.005 3.227 0.604 - 256.70 11.911 12.191 12.191 2.599 0.067 -0.202 2.599 0.067 -0.014 -0.525 0.175 3.400 0.277 - 256.75 11.773 12.025 12.026 2.450 -0.103 -0.340 2.450 -0.103 0.035 -0.832 -0.253 3.064 0.435 - 256.80 11.388 11.645 11.645 2.432 -0.075 -0.725 2.432 -0.075 0.055 -1.763 -0.183 3.223 0.887 - 256.85 11.301 11.536 11.543 2.320 -0.398 -0.812 2.320 -0.398 0.323 -1.884 -0.923 3.101 1.061 - 256.90 11.276 11.473 11.480 2.118 -0.402 -0.837 2.118 -0.402 0.337 -1.773 -0.852 2.674 0.998 - 256.95 10.905 11.104 11.113 2.089 -0.448 -1.207 2.089 -0.448 0.540 -2.522 -0.935 3.011 1.372 - 257.00 10.943 11.079 11.090 1.732 -0.486 -1.170 1.732 -0.486 0.568 -2.027 -0.841 2.303 1.133 - 257.05 11.117 11.262 11.267 1.804 -0.304 -0.996 1.804 -0.304 0.303 -1.796 -0.549 2.169 0.951 - 257.10 11.259 11.392 11.412 1.740 -0.667 -0.854 1.740 -0.667 0.570 -1.486 -1.161 2.101 0.985 - 257.15 11.395 11.551 11.609 1.895 -1.159 -0.718 1.895 -1.159 0.832 -1.361 -2.196 2.725 1.357 - 257.20 11.389 11.559 11.633 1.976 -1.309 -0.723 1.976 -1.309 0.947 -1.429 -2.586 3.070 1.551 - 257.25 11.503 11.639 11.690 1.772 -1.085 -0.609 1.772 -1.085 0.661 -1.080 -1.922 2.344 1.151 - 257.30 11.585 11.715 11.773 1.741 -1.165 -0.528 1.741 -1.165 0.615 -0.920 -2.028 2.334 1.155 - 257.35 11.749 11.864 11.899 1.645 -0.914 -0.364 1.645 -0.914 0.332 -0.598 -1.503 1.836 0.826 - 257.40 11.594 11.684 11.721 1.445 -0.938 -0.519 1.445 -0.938 0.487 -0.750 -1.356 1.619 0.812 - 257.45 11.642 11.692 11.747 1.087 -1.136 -0.471 1.087 -1.136 0.535 -0.512 -1.234 1.346 0.719 - 257.50 11.813 11.856 11.913 1.013 -1.170 -0.300 1.013 -1.170 0.351 -0.304 -1.185 1.242 0.636 - 257.55 12.008 12.080 12.124 1.312 -1.041 -0.105 1.312 -1.041 0.109 -0.138 -1.366 1.409 0.689 - 257.60 12.061 12.143 12.175 1.414 -0.882 -0.052 1.414 -0.882 0.046 -0.074 -1.247 1.390 0.625 - 257.65 11.925 12.024 12.075 1.538 -1.108 -0.188 1.538 -1.108 0.208 -0.289 -1.703 1.813 0.870 - 257.70 11.986 12.089 12.140 1.573 -1.109 -0.127 1.573 -1.109 0.141 -0.200 -1.745 1.861 0.881 - 257.75 12.009 12.092 12.179 1.413 -1.452 -0.104 1.413 -1.452 0.151 -0.147 -2.052 2.058 1.031 - 257.80 11.749 11.870 11.921 1.690 -1.103 -0.363 1.690 -1.103 0.401 -0.614 -1.863 2.102 1.001 - 257.85 11.845 11.964 12.008 1.680 -1.027 -0.268 1.680 -1.027 0.275 -0.450 -1.725 1.975 0.902 - 257.90 11.590 11.685 11.718 1.489 -0.875 -0.523 1.489 -0.875 0.458 -0.779 -1.303 1.628 0.793 - 257.95 11.641 11.704 11.756 1.214 -1.101 -0.472 1.214 -1.101 0.519 -0.573 -1.337 1.455 0.772 - 258.00 11.626 11.684 11.716 1.165 -0.864 -0.487 1.165 -0.864 0.421 -0.567 -1.006 1.170 0.615 - 258.05 11.460 11.502 11.543 0.974 -0.972 -0.652 0.974 -0.972 0.635 -0.636 -0.948 1.160 0.653 - 258.10 11.325 11.351 11.375 0.767 -0.746 -0.788 0.767 -0.746 0.588 -0.605 -0.573 0.883 0.510 - 258.15 11.469 11.538 11.557 1.259 -0.663 -0.644 1.259 -0.663 0.427 -0.810 -0.835 1.219 0.620 - 258.20 11.516 11.545 11.566 0.808 -0.709 -0.596 0.808 -0.709 0.423 -0.482 -0.573 0.756 0.430 - 258.25 11.711 11.763 11.791 1.108 -0.811 -0.402 1.108 -0.811 0.326 -0.445 -0.898 1.023 0.527 - 258.30 11.584 11.610 11.637 0.786 -0.784 -0.529 0.786 -0.784 0.415 -0.416 -0.616 0.756 0.425 - 258.35 11.270 11.295 11.327 0.744 -0.848 -0.842 0.744 -0.848 0.714 -0.627 -0.631 0.991 0.570 - 258.40 11.574 11.577 11.587 0.269 -0.489 -0.539 0.269 -0.489 0.264 -0.145 -0.132 0.301 0.164 - 258.45 11.590 11.594 11.601 0.322 -0.410 -0.523 0.322 -0.410 0.215 -0.169 -0.132 0.273 0.152 - 258.50 11.550 11.553 11.558 0.265 -0.345 -0.563 0.265 -0.345 0.194 -0.149 -0.091 0.253 0.131 - 258.55 11.675 11.686 11.689 0.510 -0.290 -0.438 0.510 -0.290 0.127 -0.224 -0.148 0.268 0.148 - 258.60 11.918 11.923 11.930 0.342 -0.386 -0.194 0.342 -0.386 0.075 -0.067 -0.132 0.152 0.083 - 258.65 12.043 12.058 12.064 0.602 -0.382 -0.070 0.602 -0.382 0.027 -0.042 -0.230 0.257 0.118 - 258.70 11.705 11.719 11.720 0.579 -0.155 -0.408 0.579 -0.155 0.063 -0.236 -0.090 0.263 0.130 - 258.75 12.065 12.076 12.086 0.500 -0.505 -0.047 0.500 -0.505 0.024 -0.024 -0.253 0.254 0.127 - 258.80 11.973 11.982 12.008 0.457 -0.789 -0.139 0.457 -0.789 0.110 -0.064 -0.361 0.426 0.191 - 258.85 12.162 12.171 12.190 0.468 -0.679 0.049 0.468 -0.679 -0.033 0.023 -0.318 0.341 0.160 - 258.90 11.946 11.948 11.957 0.239 -0.452 -0.167 0.239 -0.452 0.076 -0.040 -0.108 0.145 0.069 - 258.95 12.194 12.197 12.198 0.295 -0.130 0.081 0.295 -0.130 -0.011 0.024 -0.038 0.055 0.023 - 259.00 12.100 12.111 12.126 0.525 -0.614 -0.013 0.525 -0.614 0.008 -0.007 -0.322 0.326 0.161 - 259.05 12.117 12.130 12.141 0.556 -0.506 0.005 0.556 -0.506 -0.002 0.003 -0.281 0.283 0.141 - 259.10 12.263 12.274 12.278 0.524 -0.290 0.150 0.524 -0.290 -0.044 0.079 -0.152 0.191 0.088 - 259.15 12.571 12.592 12.602 0.716 -0.516 0.458 0.716 -0.516 -0.237 0.328 -0.370 0.495 0.274 - 259.20 12.188 12.225 12.238 0.949 -0.562 0.075 0.949 -0.562 -0.042 0.071 -0.533 0.611 0.270 - 259.25 12.339 12.362 12.389 0.754 -0.821 0.226 0.754 -0.821 -0.186 0.171 -0.619 0.647 0.334 - 259.30 12.269 12.280 12.313 0.533 -0.897 0.156 0.533 -0.897 -0.140 0.083 -0.478 0.556 0.252 - 259.35 12.389 12.402 12.469 0.561 -1.299 0.276 0.561 -1.299 -0.359 0.155 -0.729 1.039 0.413 - 259.40 12.408 12.432 12.521 0.771 -1.493 0.295 0.771 -1.493 -0.441 0.228 -1.151 1.455 0.627 - 259.45 12.507 12.511 12.596 0.312 -1.466 0.394 0.312 -1.466 -0.577 0.123 -0.457 1.200 0.373 - 259.50 12.589 12.590 12.632 0.110 -1.031 0.476 0.110 -1.031 -0.491 0.052 -0.114 0.651 0.253 - 259.55 12.608 12.608 12.660 0.030 -1.145 0.495 0.030 -1.145 -0.566 0.015 -0.035 0.778 0.284 - 259.60 12.940 12.941 13.007 0.203 -1.305 0.827 0.203 -1.305 -1.079 0.168 -0.265 1.214 0.562 - 259.65 13.082 13.085 13.200 0.285 -1.739 0.969 0.285 -1.739 -1.685 0.276 -0.495 2.022 0.889 - 259.70 13.160 13.161 13.274 0.121 -1.734 1.047 0.121 -1.734 -1.816 0.126 -0.209 2.059 0.916 - 259.75 12.822 12.822 12.927 0.112 -1.638 0.709 0.112 -1.638 -1.161 0.079 -0.183 1.599 0.589 - 259.80 12.840 12.842 12.985 0.206 -1.921 0.728 0.206 -1.921 -1.397 0.150 -0.396 2.130 0.730 - 259.85 12.785 12.791 12.897 0.385 -1.651 0.673 0.385 -1.651 -1.110 0.259 -0.636 1.663 0.653 - 259.90 12.836 12.845 12.901 0.497 -1.199 0.723 0.497 -1.199 -0.867 0.359 -0.595 1.103 0.556 - 259.95 12.612 12.626 12.674 0.585 -1.100 0.500 0.585 -1.100 -0.549 0.292 -0.644 0.901 0.448 - 260.00 12.549 12.576 12.620 0.823 -1.044 0.437 0.823 -1.044 -0.456 0.359 -0.860 0.979 0.519 - 260.05 12.529 12.553 12.584 0.769 -0.880 0.417 0.769 -0.880 -0.367 0.320 -0.676 0.769 0.417 - 260.10 12.721 12.740 12.784 0.693 -1.056 0.609 0.693 -1.056 -0.643 0.422 -0.732 0.983 0.531 - 260.15 13.103 13.150 13.219 1.120 -1.344 0.990 1.120 -1.344 -1.330 1.109 -1.505 2.020 1.147 - 260.20 13.089 13.136 13.213 1.109 -1.428 0.976 1.109 -1.428 -1.394 1.082 -1.584 2.111 1.186 - 260.25 13.108 13.146 13.200 0.990 -1.201 0.995 0.990 -1.201 -1.196 0.986 -1.189 1.707 0.977 - 260.30 12.744 12.770 12.808 0.808 -0.985 0.631 0.808 -0.985 -0.622 0.510 -0.796 1.011 0.566 - 260.35 12.613 12.617 12.638 0.316 -0.728 0.500 0.316 -0.728 -0.364 0.158 -0.230 0.440 0.229 - 260.40 12.290 12.291 12.310 0.152 -0.690 0.177 0.152 -0.690 -0.122 0.027 -0.105 0.265 0.082 - 260.45 12.521 12.525 12.552 0.325 -0.823 0.408 0.325 -0.823 -0.336 0.133 -0.268 0.475 0.225 - 260.50 12.615 12.635 12.672 0.716 -0.963 0.502 0.716 -0.963 -0.484 0.359 -0.689 0.846 0.458 - 260.55 12.678 12.693 12.760 0.633 -1.302 0.565 0.633 -1.302 -0.736 0.357 -0.824 1.208 0.581 - 260.60 12.984 13.015 13.048 0.895 -0.922 0.872 0.895 -0.922 -0.804 0.780 -0.826 1.206 0.696 - 260.65 13.035 13.070 13.114 0.947 -1.082 0.922 0.947 -1.082 -0.998 0.873 -1.024 1.459 0.838 - 260.70 13.133 13.152 13.204 0.704 -1.170 1.021 0.704 -1.170 -1.194 0.719 -0.824 1.453 0.810 - 260.75 13.063 13.083 13.125 0.729 -1.041 0.950 0.729 -1.041 -0.989 0.693 -0.758 1.258 0.713 - 260.80 13.414 13.424 13.535 0.530 -1.729 1.301 0.530 -1.729 -2.249 0.689 -0.916 2.481 1.262 - 260.85 13.058 13.065 13.192 0.425 -1.827 0.945 0.425 -1.827 -1.727 0.402 -0.777 2.206 0.968 - 260.90 12.660 12.662 12.752 0.236 -1.510 0.547 0.236 -1.510 -0.826 0.129 -0.356 1.317 0.454 - 260.95 12.459 12.460 12.539 0.202 -1.402 0.346 0.202 -1.402 -0.485 0.070 -0.284 1.063 0.283 - 261.00 12.276 12.278 12.327 0.238 -1.095 0.163 0.238 -1.095 -0.178 0.039 -0.260 0.641 0.159 - 261.05 11.982 11.991 12.036 0.482 -1.040 -0.131 0.482 -1.040 0.136 -0.063 -0.501 0.666 0.262 - 261.10 11.799 11.804 11.823 0.344 -0.680 -0.314 0.344 -0.680 0.214 -0.108 -0.233 0.339 0.167 - 261.15 11.875 11.884 11.892 0.452 -0.446 -0.237 0.452 -0.446 0.106 -0.107 -0.201 0.230 0.126 - 261.20 11.664 11.682 11.688 0.635 -0.378 -0.448 0.635 -0.378 0.170 -0.285 -0.240 0.374 0.205 - 261.25 11.483 11.496 11.496 0.535 -0.031 -0.630 0.535 -0.031 0.020 -0.337 -0.017 0.342 0.169 - 261.30 11.698 11.718 11.719 0.672 0.156 -0.414 0.672 0.156 -0.064 -0.278 0.105 0.324 0.152 - 261.35 11.807 11.838 11.840 0.861 -0.172 -0.306 0.861 -0.172 0.053 -0.263 -0.148 0.432 0.153 - 261.40 11.534 11.588 11.589 1.120 -0.158 -0.579 1.120 -0.158 0.092 -0.649 -0.177 0.807 0.339 - 261.45 11.376 11.450 11.453 1.299 -0.292 -0.737 1.299 -0.292 0.215 -0.957 -0.379 1.158 0.526 - 261.50 11.243 11.288 11.291 1.006 -0.279 -0.870 1.006 -0.279 0.243 -0.875 -0.280 0.923 0.475 - 261.55 11.364 11.385 11.394 0.700 -0.429 -0.749 0.700 -0.429 0.321 -0.524 -0.300 0.617 0.342 - 261.60 11.312 11.328 11.336 0.617 -0.427 -0.801 0.617 -0.427 0.342 -0.494 -0.263 0.603 0.328 - 261.65 11.546 11.551 11.558 0.360 -0.401 -0.567 0.360 -0.401 0.228 -0.204 -0.144 0.306 0.169 - 261.70 11.708 11.712 11.724 0.303 -0.534 -0.405 0.303 -0.534 0.216 -0.123 -0.162 0.270 0.148 - 261.75 11.660 11.660 11.696 -0.042 -0.918 -0.453 -0.042 -0.918 0.415 0.019 0.039 0.524 0.209 - 261.80 11.768 11.771 11.787 -0.269 -0.616 -0.345 -0.269 -0.616 0.212 0.093 0.165 0.285 0.142 - 261.85 11.790 11.803 11.835 -0.551 -0.870 -0.322 -0.551 -0.870 0.281 0.178 0.479 0.582 0.292 - 261.90 11.949 11.951 11.996 -0.218 -1.033 -0.163 -0.218 -1.033 0.169 0.036 0.225 0.570 0.142 - 261.95 11.998 11.998 12.067 -0.080 -1.290 -0.115 -0.080 -1.290 0.148 0.009 0.104 0.841 0.090 - 262.00 11.975 11.983 12.026 -0.423 -1.016 -0.137 -0.423 -1.016 0.140 0.058 0.430 0.615 0.228 - 262.05 12.241 12.253 12.276 -0.546 -0.754 0.128 -0.546 -0.754 -0.097 -0.070 0.411 0.441 0.214 - 262.10 12.318 12.324 12.375 -0.398 -1.118 0.205 -0.398 -1.118 -0.229 -0.082 0.444 0.725 0.253 - 262.15 12.524 12.526 12.582 -0.234 -1.181 0.411 -0.234 -1.181 -0.486 -0.096 0.276 0.809 0.284 - 262.20 12.464 12.468 12.530 -0.315 -1.238 0.352 -0.315 -1.238 -0.435 -0.111 0.390 0.878 0.297 - 262.25 12.352 12.355 12.397 -0.262 -1.022 0.239 -0.262 -1.022 -0.245 -0.063 0.268 0.586 0.184 - 262.30 12.233 12.236 12.269 0.251 -0.902 0.120 0.251 -0.902 -0.109 0.030 -0.226 0.446 0.126 - 262.35 12.328 12.331 12.381 0.244 -1.111 0.216 0.244 -1.111 -0.240 0.053 -0.271 0.670 0.183 - 262.40 12.533 12.534 12.576 0.174 -1.019 0.420 0.174 -1.019 -0.428 0.073 -0.177 0.623 0.235 - 262.45 12.385 12.386 12.414 -0.071 -0.838 0.273 -0.071 -0.838 -0.228 -0.019 0.060 0.391 0.118 - 262.50 12.581 12.596 12.619 -0.622 -0.765 0.468 -0.622 -0.765 -0.358 -0.291 0.476 0.596 0.331 - 262.55 12.518 12.554 12.592 -0.953 -0.977 0.405 -0.953 -0.977 -0.395 -0.386 0.931 1.013 0.541 - 262.60 12.766 12.800 12.842 -0.929 -1.035 0.653 -0.929 -1.035 -0.676 -0.607 0.962 1.181 0.662 - 262.65 12.732 12.776 12.795 -1.057 -0.707 0.619 -1.057 -0.707 -0.438 -0.655 0.747 1.000 0.543 - 262.70 12.522 12.546 12.560 -0.771 -0.597 0.409 -0.771 -0.597 -0.244 -0.315 0.460 0.559 0.304 - 262.75 12.522 12.536 12.576 -0.598 -1.000 0.409 -0.598 -1.000 -0.409 -0.245 0.598 0.763 0.382 - 262.80 12.475 12.483 12.543 -0.445 -1.223 0.362 -0.445 -1.223 -0.443 -0.161 0.545 0.913 0.360 - 262.85 12.805 12.823 12.880 -0.684 -1.206 0.692 -0.684 -1.206 -0.835 -0.473 0.825 1.201 0.633 - 262.90 12.558 12.576 12.610 -0.676 -0.935 0.445 -0.676 -0.935 -0.416 -0.300 0.632 0.764 0.407 - 262.95 12.442 12.465 12.559 -0.758 -1.535 0.329 -0.758 -1.535 -0.506 -0.250 1.163 1.519 0.646 - 263.00 12.097 12.117 12.212 -0.699 -1.518 -0.016 -0.699 -1.518 0.024 0.011 1.061 1.396 0.530 - 263.05 12.253 12.271 12.324 -0.660 -1.142 0.141 -0.660 -1.142 -0.161 -0.093 0.754 0.880 0.388 - 263.10 12.121 12.155 12.191 -0.919 -0.931 0.008 -0.919 -0.931 -0.007 -0.007 0.856 0.856 0.428 - 263.15 11.854 11.883 11.915 -0.829 -0.875 -0.259 -0.829 -0.875 0.227 0.215 0.725 0.760 0.395 - 263.20 12.027 12.043 12.095 -0.619 -1.127 -0.086 -0.619 -1.127 0.097 0.053 0.698 0.830 0.353 - 263.25 11.918 11.927 11.941 -0.466 -0.580 -0.195 -0.466 -0.580 0.113 0.091 0.270 0.296 0.153 - 263.30 11.565 11.575 11.583 -0.489 -0.427 -0.548 -0.489 -0.427 0.234 0.268 0.209 0.361 0.206 - 263.35 11.385 11.398 11.400 -0.533 -0.231 -0.728 -0.533 -0.231 0.168 0.388 0.123 0.434 0.220 - 263.40 11.393 11.413 11.414 -0.667 0.129 -0.719 -0.667 0.129 -0.093 0.480 -0.086 0.490 0.248 - 263.45 11.224 11.242 11.243 -0.630 -0.108 -0.888 -0.630 -0.108 0.095 0.560 0.068 0.599 0.286 - 263.50 11.209 11.240 11.242 -0.832 0.224 -0.904 -0.832 0.224 -0.202 0.752 -0.186 0.780 0.401 - 263.55 11.074 11.095 11.097 -0.682 0.225 -1.039 -0.682 0.225 -0.234 0.709 -0.154 0.798 0.381 - 263.60 11.051 11.051 11.056 0.054 0.319 -1.062 0.054 0.319 -0.339 -0.057 0.017 0.616 0.172 - 263.65 11.111 11.111 11.111 -0.061 -0.003 -1.002 -0.061 -0.003 0.003 0.061 0.000 0.504 0.031 - 263.70 11.488 11.491 11.494 -0.251 -0.288 -0.625 -0.251 -0.288 0.180 0.157 0.072 0.268 0.125 - 263.75 11.262 11.278 11.279 -0.591 -0.156 -0.850 -0.591 -0.156 0.133 0.502 0.092 0.548 0.264 - 263.80 11.218 11.223 11.227 -0.319 -0.300 -0.895 -0.319 -0.300 0.269 0.285 0.096 0.496 0.202 - 263.85 11.222 11.227 11.227 -0.336 -0.004 -0.890 -0.336 -0.004 0.003 0.300 0.001 0.453 0.150 - 263.90 11.495 11.499 11.515 -0.283 -0.604 -0.617 -0.283 -0.604 0.373 0.175 0.171 0.413 0.223 - 263.95 11.457 11.469 11.483 -0.521 -0.567 -0.656 -0.521 -0.567 0.372 0.342 0.296 0.512 0.293 - 264.00 11.511 11.520 11.536 -0.454 -0.612 -0.602 -0.454 -0.612 0.368 0.273 0.278 0.471 0.268 - 264.05 11.718 11.723 11.738 -0.318 -0.591 -0.394 -0.318 -0.591 0.233 0.126 0.188 0.303 0.162 - 264.10 11.533 11.534 11.541 -0.118 -0.416 -0.580 -0.118 -0.416 0.241 0.068 0.049 0.262 0.128 - 264.15 11.480 11.482 11.490 0.227 -0.422 -0.633 0.227 -0.422 0.267 -0.143 -0.096 0.315 0.159 - 264.20 11.195 11.198 11.200 0.263 -0.226 -0.918 0.263 -0.226 0.207 -0.242 -0.059 0.482 0.162 - 264.25 11.164 11.167 11.176 0.240 -0.450 -0.949 0.240 -0.450 0.426 -0.228 -0.108 0.580 0.248 - 264.30 11.220 11.228 11.244 0.436 -0.602 -0.893 0.436 -0.602 0.538 -0.389 -0.262 0.675 0.357 - 264.35 11.319 11.321 11.340 0.207 -0.662 -0.794 0.207 -0.662 0.526 -0.165 -0.137 0.556 0.284 - 264.40 11.325 11.341 11.353 -0.598 -0.521 -0.787 -0.598 -0.521 0.410 0.471 0.312 0.625 0.349 - 264.45 10.955 10.956 10.965 -0.176 -0.436 -1.158 -0.176 -0.436 0.505 0.204 0.077 0.781 0.275 - 264.50 10.899 10.900 10.902 0.136 -0.204 -1.214 0.136 -0.204 0.248 -0.165 -0.028 0.767 0.150 - 264.55 10.916 10.916 10.917 -0.118 0.068 -1.197 -0.118 0.068 -0.081 0.141 -0.008 0.726 0.082 - 264.60 11.393 11.395 11.395 -0.201 -0.020 -0.720 -0.201 -0.020 0.014 0.145 0.004 0.279 0.073 - 264.65 11.393 11.394 11.395 0.132 -0.188 -0.720 0.132 -0.188 0.135 -0.095 -0.025 0.285 0.083 - 264.70 11.259 11.260 11.260 -0.067 0.059 -0.853 -0.067 0.059 -0.051 0.057 -0.004 0.368 0.038 - 264.75 11.192 11.192 11.193 0.004 0.149 -0.920 0.004 0.149 -0.137 -0.003 0.001 0.435 0.069 - 264.80 11.169 11.169 11.176 0.040 -0.370 -0.944 0.040 -0.370 0.349 -0.038 -0.015 0.514 0.176 - 264.85 11.129 11.133 11.166 -0.299 -0.863 -0.984 -0.299 -0.863 0.849 0.294 0.258 0.901 0.467 - 264.90 11.029 11.030 11.062 -0.113 -0.844 -1.084 -0.113 -0.844 0.915 0.122 0.095 0.950 0.464 - 264.95 11.046 11.047 11.078 -0.134 -0.827 -1.067 -0.134 -0.827 0.882 0.143 0.111 0.920 0.450 - 265.00 11.091 11.092 11.104 0.104 -0.510 -1.021 0.104 -0.510 0.521 -0.107 -0.053 0.657 0.267 - 265.05 11.387 11.391 11.391 0.304 -0.041 -0.726 0.304 -0.041 0.030 -0.221 -0.012 0.311 0.112 - 265.10 11.255 11.256 11.261 -0.140 -0.355 -0.858 -0.140 -0.355 0.305 0.120 0.050 0.441 0.166 - 265.15 11.053 11.057 11.060 -0.315 -0.229 -1.060 -0.315 -0.229 0.243 0.334 0.072 0.638 0.210 - 265.20 11.298 11.316 11.316 -0.640 -0.004 -0.815 -0.640 -0.004 0.004 0.522 0.003 0.537 0.261 - 265.25 10.785 10.791 10.792 -0.381 -0.065 -1.328 -0.381 -0.065 0.086 0.506 0.025 0.957 0.257 - 265.30 10.717 10.726 10.732 -0.430 0.349 -1.396 -0.430 0.349 -0.487 0.601 -0.150 1.127 0.394 - 265.35 10.591 10.607 10.619 -0.581 0.517 -1.522 -0.581 0.517 -0.786 0.884 -0.300 1.460 0.610 - 265.40 10.638 10.655 10.662 -0.605 0.384 -1.475 -0.605 0.384 -0.567 0.892 -0.232 1.345 0.541 - 265.45 10.586 10.601 10.601 -0.563 0.072 -1.527 -0.563 0.072 -0.110 0.860 -0.041 1.327 0.434 - 265.50 10.183 10.194 10.196 -0.463 0.208 -1.929 -0.463 0.208 -0.401 0.892 -0.096 1.990 0.491 - 265.55 10.322 10.329 10.329 -0.374 0.024 -1.791 -0.374 0.024 -0.043 0.670 -0.009 1.674 0.336 - 265.60 10.422 10.422 10.427 0.136 0.303 -1.691 0.136 0.303 -0.512 -0.230 0.041 1.485 0.281 - 265.65 10.572 10.573 10.580 0.133 0.373 -1.541 0.133 0.373 -0.575 -0.205 0.050 1.265 0.306 - 265.70 10.716 10.716 10.726 0.048 0.466 -1.397 0.048 0.466 -0.652 -0.067 0.023 1.086 0.328 - 265.75 10.572 10.574 10.588 -0.171 0.556 -1.541 -0.171 0.556 -0.856 0.263 -0.095 1.356 0.450 - 265.80 10.873 10.873 10.884 -0.124 0.487 -1.240 -0.124 0.487 -0.604 0.154 -0.060 0.895 0.313 - 265.85 10.754 10.756 10.761 0.192 0.336 -1.359 0.192 0.336 -0.457 -0.261 0.065 0.998 0.265 - 265.90 10.518 10.522 10.524 0.270 0.236 -1.595 0.270 0.236 -0.376 -0.430 0.064 1.336 0.287 - 265.95 10.572 10.575 10.575 0.251 -0.092 -1.541 0.251 -0.092 0.142 -0.386 -0.023 1.223 0.206 - 266.00 10.685 10.686 10.688 0.172 -0.199 -1.428 0.172 -0.199 0.285 -0.245 -0.034 1.054 0.189 - 266.05 10.621 10.621 10.628 0.101 -0.383 -1.492 0.101 -0.383 0.572 -0.151 -0.039 1.191 0.296 - 266.10 10.555 10.555 10.565 -0.034 -0.446 -1.558 -0.034 -0.446 0.695 0.052 0.015 1.313 0.349 - 266.15 10.761 10.764 10.783 -0.233 -0.642 -1.351 -0.233 -0.642 0.867 0.314 0.149 1.146 0.467 - 266.20 10.541 10.549 10.553 -0.404 -0.271 -1.571 -0.404 -0.271 0.426 0.635 0.109 1.353 0.386 - 266.25 10.394 10.396 10.396 -0.231 0.036 -1.719 -0.231 0.036 -0.061 0.396 -0.008 1.505 0.201 - 266.30 10.424 10.425 10.427 -0.120 0.237 -1.689 -0.120 0.237 -0.400 0.202 -0.028 1.461 0.224 - 266.35 10.188 10.188 10.191 -0.073 0.238 -1.925 -0.073 0.238 -0.458 0.141 -0.017 1.884 0.240 - 266.40 10.209 10.209 10.212 0.038 0.250 -1.904 0.038 0.250 -0.477 -0.073 0.010 1.845 0.241 - 266.45 10.075 10.083 10.084 0.393 0.131 -2.038 0.393 0.131 -0.268 -0.800 0.052 2.162 0.423 - 266.50 10.019 10.047 10.047 0.739 -0.114 -2.093 0.739 -0.114 0.238 -1.546 -0.084 2.470 0.783 - 266.55 10.018 10.048 10.051 0.773 -0.242 -2.095 0.773 -0.242 0.507 -1.620 -0.187 2.523 0.854 - 266.60 9.978 9.993 10.008 0.531 -0.552 -2.134 0.531 -0.552 1.178 -1.134 -0.293 2.571 0.831 - 266.65 10.182 10.189 10.197 0.383 -0.393 -1.931 0.383 -0.393 0.758 -0.739 -0.150 2.015 0.535 - 266.70 10.529 10.537 10.541 0.402 -0.313 -1.584 0.402 -0.313 0.496 -0.637 -0.126 1.384 0.408 - 266.75 10.611 10.613 10.615 0.223 -0.179 -1.502 0.223 -0.179 0.269 -0.335 -0.040 1.168 0.216 - 266.80 10.769 10.769 10.770 -0.076 -0.177 -1.344 -0.076 -0.177 0.238 0.102 0.013 0.922 0.130 - 266.85 10.619 10.619 10.622 0.054 -0.218 -1.494 0.054 -0.218 0.326 -0.081 -0.012 1.141 0.168 - 266.90 10.364 10.368 10.371 0.304 0.240 -1.749 0.304 0.240 -0.420 -0.532 0.073 1.604 0.341 - 266.95 10.137 10.137 10.141 0.141 0.254 -1.976 0.141 0.254 -0.502 -0.279 0.036 1.995 0.288 - 267.00 10.085 10.088 10.091 -0.242 0.246 -2.028 -0.242 0.246 -0.499 0.490 -0.059 2.116 0.351 - 267.05 10.159 10.160 10.167 -0.085 0.386 -1.954 -0.085 0.386 -0.754 0.166 -0.033 1.986 0.386 - 267.10 9.933 9.933 9.934 0.082 0.118 -2.180 0.082 0.118 -0.257 -0.178 0.010 2.387 0.156 - 267.15 9.826 9.829 9.829 -0.229 0.059 -2.286 -0.229 0.059 -0.134 0.525 -0.013 2.642 0.271 - 267.20 9.496 9.498 9.517 -0.220 0.596 -2.617 -0.220 0.596 -1.559 0.575 -0.131 3.626 0.833 - 267.25 9.673 9.673 9.695 -0.115 0.647 -2.440 -0.115 0.647 -1.580 0.279 -0.074 3.194 0.803 - 267.30 9.575 9.575 9.618 -0.015 0.903 -2.538 -0.015 0.903 -2.292 0.039 -0.014 3.628 1.146 - 267.35 9.465 9.466 9.495 0.094 0.742 -2.648 0.094 0.742 -1.964 -0.249 0.070 3.784 0.991 - 267.40 9.672 9.672 9.694 -0.107 0.656 -2.441 -0.107 0.656 -1.601 0.261 -0.070 3.201 0.812 - 267.45 9.564 9.565 9.586 -0.135 0.629 -2.549 -0.135 0.629 -1.605 0.344 -0.085 3.456 0.822 - 267.50 9.301 9.301 9.324 0.037 0.656 -2.812 0.037 0.656 -1.845 -0.104 0.024 4.170 0.924 - 267.55 9.123 9.132 9.174 -0.392 0.875 -2.989 -0.392 0.875 -2.614 1.172 -0.343 4.927 1.443 - 267.60 9.284 9.287 9.329 -0.233 0.877 -2.828 -0.233 0.877 -2.481 0.658 -0.204 4.412 1.287 - 267.65 9.448 9.450 9.470 -0.157 0.611 -2.664 -0.157 0.611 -1.628 0.418 -0.096 3.748 0.842 - 267.70 9.567 9.575 9.593 -0.395 0.592 -2.546 -0.395 0.592 -1.507 1.005 -0.234 3.494 0.914 - 267.75 9.640 9.648 9.673 -0.373 0.702 -2.472 -0.373 0.702 -1.737 0.921 -0.262 3.373 0.992 - 267.80 9.630 9.632 9.639 -0.190 0.363 -2.483 -0.190 0.363 -0.902 0.471 -0.069 3.166 0.510 - 267.85 9.615 9.616 9.627 -0.158 0.456 -2.498 -0.158 0.456 -1.139 0.395 -0.072 3.235 0.604 - 267.90 9.696 9.697 9.706 -0.142 0.413 -2.417 -0.142 0.413 -0.998 0.343 -0.059 3.015 0.528 - 267.95 9.665 9.669 9.713 -0.293 0.923 -2.448 -0.293 0.923 -2.260 0.718 -0.271 3.466 1.193 - 268.00 9.518 9.526 9.553 -0.396 0.722 -2.595 -0.396 0.722 -1.875 1.027 -0.286 3.707 1.078 - 268.05 9.666 9.668 9.698 -0.208 0.760 -2.447 -0.208 0.760 -1.859 0.510 -0.158 3.305 0.967 - 268.10 9.708 9.708 9.717 -0.080 0.428 -2.405 -0.080 0.428 -1.029 0.193 -0.034 2.987 0.524 - 268.15 10.054 10.057 10.104 -0.224 0.972 -2.058 -0.224 0.972 -2.002 0.462 -0.218 2.616 1.033 - 268.20 9.889 9.894 9.949 -0.316 1.038 -2.223 -0.316 1.038 -2.307 0.703 -0.328 3.060 1.217 - 268.25 9.759 9.759 9.818 -0.043 1.075 -2.354 -0.043 1.075 -2.530 0.102 -0.047 3.349 1.266 - 268.30 9.915 9.919 9.923 -0.292 0.250 -2.198 -0.292 0.250 -0.550 0.642 -0.073 2.489 0.424 - 268.35 9.873 9.892 9.902 -0.603 0.454 -2.239 -0.603 0.454 -1.016 1.350 -0.274 2.792 0.856 - 268.40 9.834 9.857 9.887 -0.678 0.766 -2.279 -0.678 0.766 -1.746 1.545 -0.519 3.120 1.194 - 268.45 10.087 10.111 10.127 -0.696 0.568 -2.026 -0.696 0.568 -1.151 1.410 -0.395 2.455 0.931 - 268.50 10.062 10.103 10.124 -0.912 0.650 -2.051 -0.912 0.650 -1.333 1.869 -0.592 2.729 1.185 - 268.55 9.888 9.903 9.921 -0.553 0.589 -2.225 -0.553 0.589 -1.311 1.231 -0.326 2.801 0.914 - 268.60 9.972 9.984 9.991 -0.485 0.375 -2.141 -0.485 0.375 -0.802 1.039 -0.182 2.480 0.662 - 268.65 10.044 10.073 10.082 -0.768 0.419 -2.069 -0.768 0.419 -0.867 1.589 -0.322 2.523 0.919 - 268.70 10.260 10.290 10.296 -0.786 0.341 -1.852 -0.786 0.341 -0.632 1.456 -0.268 2.083 0.805 - 268.75 10.097 10.128 10.139 -0.792 0.455 -2.015 -0.792 0.455 -0.917 1.596 -0.360 2.448 0.938 - 268.80 10.571 10.602 10.615 -0.812 0.525 -1.542 -0.812 0.525 -0.810 1.252 -0.427 1.656 0.775 - 268.85 10.736 10.752 10.754 -0.593 0.186 -1.377 -0.593 0.186 -0.256 0.816 -0.110 1.141 0.431 - 268.90 10.699 10.730 10.756 -0.823 0.748 -1.414 -0.823 0.748 -1.058 1.164 -0.615 1.618 0.844 - 268.95 10.775 10.802 10.813 -0.765 0.482 -1.338 -0.765 0.482 -0.646 1.023 -0.369 1.304 0.632 - 269.00 10.889 10.918 10.918 -0.795 0.104 -1.224 -0.795 0.104 -0.128 0.974 -0.083 1.071 0.493 - 269.05 10.786 10.831 10.841 -0.992 0.472 -1.327 -0.992 0.472 -0.627 1.316 -0.468 1.484 0.766 - 269.10 10.601 10.619 10.638 -0.611 0.630 -1.511 -0.611 0.630 -0.952 0.924 -0.385 1.527 0.691 - 269.15 10.772 10.785 10.807 -0.537 0.681 -1.341 -0.537 0.681 -0.913 0.721 -0.366 1.275 0.610 - 269.20 10.696 10.718 10.733 -0.683 0.574 -1.417 -0.683 0.574 -0.813 0.967 -0.392 1.401 0.661 - 269.25 10.903 10.914 10.950 -0.467 0.894 -1.209 -0.467 0.894 -1.081 0.565 -0.418 1.240 0.645 - 269.30 10.852 10.868 10.892 -0.600 0.713 -1.261 -0.600 0.713 -0.900 0.756 -0.428 1.229 0.625 - 269.35 10.686 10.696 10.724 -0.469 0.773 -1.427 -0.469 0.773 -1.103 0.669 -0.362 1.427 0.670 - 269.40 11.075 11.092 11.141 -0.613 1.049 -1.038 -0.613 1.049 -1.089 0.636 -0.643 1.276 0.708 - 269.45 10.895 10.904 10.940 -0.446 0.888 -1.218 -0.446 0.888 -1.081 0.543 -0.396 1.235 0.636 - 269.50 10.959 10.972 11.006 -0.523 0.864 -1.153 -0.523 0.864 -0.997 0.604 -0.452 1.175 0.625 - 269.55 11.051 11.077 11.105 -0.758 0.794 -1.062 -0.758 0.794 -0.843 0.805 -0.602 1.166 0.656 - 269.60 10.758 10.770 10.778 -0.515 0.429 -1.355 -0.515 0.429 -0.581 0.698 -0.221 1.143 0.467 - 269.65 11.001 11.019 11.026 -0.626 0.410 -1.112 -0.626 0.410 -0.455 0.696 -0.256 0.898 0.435 - 269.70 10.903 10.909 10.914 -0.361 0.315 -1.209 -0.361 0.315 -0.381 0.437 -0.114 0.846 0.295 - 269.75 11.252 11.255 11.257 -0.244 0.223 -0.861 -0.244 0.223 -0.192 0.210 -0.054 0.425 0.145 - 269.80 11.172 11.178 11.178 -0.368 0.123 -0.941 -0.368 0.123 -0.116 0.346 -0.045 0.518 0.184 - 269.85 11.097 11.101 11.101 -0.272 0.119 -1.015 -0.272 0.119 -0.121 0.277 -0.033 0.560 0.152 - 269.90 10.912 10.913 10.917 -0.112 0.311 -1.201 -0.112 0.311 -0.374 0.135 -0.035 0.776 0.200 - 269.95 11.080 11.081 11.092 0.153 0.485 -1.032 0.153 0.485 -0.501 -0.157 0.074 0.662 0.265 - 270.00 11.212 11.215 11.220 0.228 0.345 -0.900 0.228 0.345 -0.311 -0.205 0.079 0.491 0.190 - 270.05 11.302 11.307 11.320 0.353 0.546 -0.811 0.353 0.546 -0.443 -0.286 0.193 0.540 0.281 - 270.10 11.237 11.241 11.262 0.303 0.700 -0.876 0.303 0.700 -0.613 -0.265 0.212 0.674 0.350 - 270.15 11.360 11.360 11.381 0.078 0.686 -0.753 0.078 0.686 -0.517 -0.059 0.054 0.522 0.261 - 270.20 11.374 11.377 11.400 -0.254 0.724 -0.739 -0.254 0.724 -0.535 0.188 -0.184 0.568 0.298 - 270.25 11.145 11.155 11.188 -0.481 0.859 -0.968 -0.481 0.859 -0.832 0.465 -0.413 0.953 0.519 - 270.30 11.064 11.089 11.116 -0.730 0.783 -1.048 -0.730 0.783 -0.821 0.766 -0.572 1.123 0.630 - 270.35 11.160 11.188 11.205 -0.791 0.605 -0.952 -0.791 0.605 -0.576 0.754 -0.479 0.950 0.531 - 270.40 11.258 11.310 11.312 -1.091 0.171 -0.855 -1.091 0.171 -0.146 0.933 -0.186 0.976 0.481 - 270.45 11.387 11.460 11.460 -1.291 0.021 -0.726 -1.291 0.021 -0.015 0.938 -0.027 1.098 0.469 - 270.50 11.538 11.624 11.626 -1.411 0.220 -0.575 -1.411 0.220 -0.127 0.812 -0.311 1.186 0.439 - 270.55 11.684 11.730 11.733 -1.039 0.219 -0.428 -1.039 0.219 -0.094 0.445 -0.227 0.656 0.254 - 270.60 11.546 11.620 11.625 -1.312 0.340 -0.567 -1.312 0.340 -0.193 0.744 -0.446 1.079 0.444 - 270.65 11.408 11.500 11.503 -1.447 0.289 -0.705 -1.447 0.289 -0.204 1.020 -0.419 1.338 0.561 - 270.70 11.122 11.249 11.250 -1.685 0.181 -0.991 -1.685 0.181 -0.179 1.669 -0.305 1.926 0.853 - 270.75 11.246 11.308 11.318 -1.183 0.458 -0.867 -1.183 0.458 -0.397 1.025 -0.542 1.180 0.613 - 270.80 11.265 11.303 11.328 -0.929 0.756 -0.848 -0.929 0.756 -0.641 0.788 -0.702 1.077 0.618 - 270.85 11.085 11.094 11.098 -0.442 0.306 -1.028 -0.442 0.306 -0.314 0.454 -0.135 0.672 0.284 - 270.90 11.194 11.196 11.199 -0.236 0.262 -0.919 -0.236 0.262 -0.241 0.216 -0.062 0.484 0.165 - 270.95 11.754 11.755 11.756 -0.184 0.030 -0.359 -0.184 0.030 -0.011 0.066 -0.005 0.082 0.033 - 271.00 11.566 11.574 11.574 -0.426 0.116 -0.547 -0.426 0.116 -0.063 0.233 -0.049 0.247 0.123 - 271.05 11.216 11.257 11.258 -0.957 0.142 -0.896 -0.957 0.142 -0.127 0.858 -0.136 0.870 0.439 - 271.10 11.330 11.348 11.350 -0.640 0.202 -0.783 -0.640 0.202 -0.158 0.501 -0.129 0.532 0.271 - 271.15 11.445 11.464 11.467 -0.666 -0.246 -0.668 -0.666 -0.246 0.164 0.445 0.164 0.475 0.251 - 271.20 11.779 11.792 11.794 -0.547 -0.247 -0.334 -0.547 -0.247 0.082 0.183 0.135 0.236 0.121 - 271.25 11.774 11.778 11.784 -0.308 -0.365 -0.339 -0.308 -0.365 0.124 0.104 0.112 0.171 0.099 - 271.30 11.886 11.908 11.912 -0.710 -0.332 -0.226 -0.710 -0.332 0.075 0.161 0.236 0.333 0.148 - 271.35 11.802 11.814 11.818 -0.530 -0.283 -0.310 -0.530 -0.283 0.088 0.165 0.150 0.229 0.120 - 271.40 11.726 11.758 11.758 -0.878 0.008 -0.387 -0.878 0.008 -0.003 0.340 -0.007 0.460 0.170 - 271.45 11.955 11.991 11.991 -0.922 0.032 -0.158 -0.922 0.032 -0.005 0.145 -0.029 0.438 0.074 - 271.50 11.636 11.683 11.701 -1.057 0.637 -0.477 -1.057 0.637 -0.304 0.504 -0.673 0.875 0.447 - 271.55 11.606 11.677 11.695 -1.283 0.643 -0.506 -1.283 0.643 -0.326 0.650 -0.825 1.159 0.550 - 271.60 11.414 11.501 11.503 -1.413 0.194 -0.699 -1.413 0.194 -0.136 0.987 -0.274 1.261 0.517 - 271.65 11.209 11.276 11.276 -1.229 -0.002 -0.904 -1.229 -0.002 0.002 1.111 0.003 1.164 0.555 - 271.70 11.080 11.213 11.214 -1.725 0.121 -1.033 -1.725 0.121 -0.125 1.782 -0.208 2.028 0.899 - 271.75 11.114 11.241 11.241 -1.687 0.043 -0.999 -1.687 0.043 -0.043 1.685 -0.072 1.923 0.844 - 271.80 10.946 11.030 11.031 -1.359 -0.127 -1.167 -1.359 -0.127 0.149 1.586 0.173 1.613 0.801 - 271.85 11.090 11.249 11.254 -1.888 -0.339 -1.023 -1.888 -0.339 0.347 1.931 0.640 2.362 1.032 - 271.90 10.649 10.772 10.772 -1.626 -0.057 -1.464 -1.626 -0.057 0.084 2.381 0.093 2.395 1.192 - 271.95 10.864 10.962 10.964 -1.466 0.194 -1.249 -1.466 0.194 -0.242 1.830 -0.284 1.873 0.934 - 272.00 11.066 11.143 11.153 -1.313 0.469 -1.047 -1.313 0.469 -0.491 1.375 -0.616 1.521 0.792 - 272.05 10.749 10.776 10.803 -0.754 0.770 -1.364 -0.754 0.770 -1.050 1.028 -0.580 1.510 0.790 - 272.10 11.003 11.038 11.057 -0.873 0.650 -1.110 -0.873 0.650 -0.721 0.969 -0.567 1.208 0.667 - 272.15 11.114 11.141 11.174 -0.785 0.861 -0.999 -0.785 0.861 -0.860 0.784 -0.676 1.178 0.673 - 272.20 11.234 11.255 11.270 -0.678 0.586 -0.879 -0.678 0.586 -0.514 0.596 -0.397 0.787 0.441 - 272.25 11.594 11.606 11.609 -0.540 0.244 -0.519 -0.540 0.244 -0.127 0.280 -0.132 0.310 0.167 - 272.30 11.579 11.618 11.627 -0.943 0.465 -0.534 -0.943 0.465 -0.248 0.503 -0.439 0.696 0.356 - 272.35 11.491 11.526 11.559 -0.887 0.878 -0.621 -0.887 0.878 -0.546 0.551 -0.779 0.972 0.550 - 272.40 11.367 11.422 11.457 -1.114 0.902 -0.746 -1.114 0.902 -0.673 0.831 -1.005 1.305 0.734 - 272.45 11.176 11.228 11.248 -1.083 0.664 -0.937 -1.083 0.664 -0.622 1.015 -0.719 1.246 0.695 - 272.50 11.090 11.119 11.126 -0.793 0.409 -1.023 -0.793 0.409 -0.418 0.811 -0.324 0.921 0.484 - 272.55 10.924 10.936 10.955 -0.522 0.636 -1.189 -0.522 0.636 -0.756 0.620 -0.332 1.045 0.516 - 272.60 11.161 11.197 11.212 -0.888 0.592 -0.952 -0.888 0.592 -0.563 0.845 -0.525 1.022 0.572 - 272.65 11.116 11.163 11.217 -1.019 1.095 -0.996 -1.019 1.095 -1.091 1.015 -1.116 1.615 0.931 - 272.70 11.224 11.264 11.288 -0.943 0.729 -0.888 -0.943 0.729 -0.647 0.838 -0.688 1.105 0.631 - 272.75 11.401 11.416 11.440 -0.577 0.742 -0.712 -0.577 0.742 -0.528 0.411 -0.428 0.695 0.397 - 272.80 11.609 11.626 11.638 -0.635 0.526 -0.504 -0.635 0.526 -0.265 0.320 -0.334 0.467 0.266 - 272.85 11.499 11.525 11.541 -0.778 0.602 -0.614 -0.778 0.602 -0.369 0.478 -0.468 0.672 0.382 - 272.90 11.561 11.586 11.592 -0.748 0.382 -0.551 -0.748 0.382 -0.211 0.413 -0.286 0.505 0.272 - 272.95 11.190 11.212 11.220 -0.702 0.415 -0.923 -0.702 0.415 -0.383 0.648 -0.292 0.759 0.404 - 273.00 11.074 11.086 11.115 -0.532 0.805 -1.039 -0.532 0.805 -0.836 0.552 -0.428 1.005 0.545 - 273.05 10.985 11.009 11.028 -0.727 0.652 -1.128 -0.727 0.652 -0.736 0.820 -0.474 1.113 0.600 - 273.10 10.933 10.941 10.978 -0.410 0.899 -1.179 -0.410 0.899 -1.060 0.484 -0.369 1.184 0.611 - 273.15 11.077 11.079 11.130 -0.217 1.059 -1.036 -0.217 1.059 -1.097 0.224 -0.229 1.121 0.572 - 273.20 10.909 10.919 10.984 -0.454 1.191 -1.204 -0.454 1.191 -1.433 0.546 -0.541 1.537 0.813 - 273.25 10.764 10.778 10.841 -0.530 1.175 -1.348 -0.530 1.175 -1.585 0.715 -0.623 1.740 0.923 - 273.30 10.693 10.719 10.806 -0.734 1.372 -1.419 -0.734 1.372 -1.948 1.042 -1.007 2.218 1.214 - 273.35 10.524 10.555 10.690 -0.803 1.694 -1.589 -0.803 1.694 -2.691 1.276 -1.360 3.019 1.637 - 273.40 10.864 10.889 11.051 -0.733 1.886 -1.248 -0.733 1.886 -2.355 0.915 -1.382 2.827 1.440 - 273.45 11.242 11.244 11.425 -0.248 2.027 -0.871 -0.248 2.027 -1.766 0.216 -0.503 2.464 0.924 - 273.50 11.594 11.598 11.763 -0.318 1.961 -0.519 -0.318 1.961 -1.018 0.165 -0.624 2.108 0.602 - 273.55 11.603 11.621 11.790 -0.638 1.992 -0.510 -0.638 1.992 -1.015 0.325 -1.270 2.317 0.829 - 273.60 11.509 11.523 11.692 -0.577 1.975 -0.604 -0.577 1.975 -1.193 0.348 -1.139 2.300 0.843 - 273.65 11.187 11.211 11.308 -0.733 1.474 -0.926 -0.733 1.474 -1.364 0.679 -1.080 1.783 0.934 - 273.70 10.933 10.951 11.038 -0.630 1.386 -1.180 -0.630 1.386 -1.635 0.743 -0.873 1.855 0.998 - 273.75 10.941 10.950 11.109 -0.435 1.876 -1.172 -0.435 1.876 -2.198 0.509 -0.815 2.540 1.199 - 273.80 10.881 10.888 11.049 -0.413 1.875 -1.232 -0.413 1.875 -2.310 0.509 -0.775 2.602 1.245 - 273.85 11.007 11.013 11.172 -0.345 1.880 -1.106 -0.345 1.880 -2.078 0.382 -0.649 2.438 1.105 - 273.90 10.945 10.947 11.077 -0.198 1.697 -1.168 -0.198 1.697 -1.982 0.231 -0.335 2.141 1.011 - 273.95 10.771 10.779 10.859 -0.419 1.317 -1.342 -0.419 1.317 -1.767 0.563 -0.552 1.856 0.968 - 274.00 11.109 11.123 11.218 -0.552 1.455 -1.004 -0.552 1.455 -1.461 0.555 -0.804 1.715 0.879 - 274.05 11.051 11.060 11.226 -0.442 1.925 -1.062 -0.442 1.925 -2.045 0.470 -0.851 2.515 1.132 - 274.10 10.942 10.946 11.168 -0.290 2.214 -1.171 -0.290 2.214 -2.593 0.339 -0.642 3.179 1.346 - 274.15 10.739 10.739 10.949 -0.049 2.137 -1.374 -0.049 2.137 -2.937 0.068 -0.106 3.230 1.470 - 274.20 10.250 10.250 10.440 -0.078 1.984 -1.863 -0.078 1.984 -3.695 0.146 -0.155 3.706 1.851 - 274.25 10.413 10.416 10.624 -0.250 2.091 -1.700 -0.250 2.091 -3.555 0.425 -0.523 3.662 1.809 - 274.30 10.437 10.437 10.608 0.046 1.900 -1.676 0.046 1.900 -3.185 -0.077 0.087 3.211 1.594 - 274.35 10.603 10.604 10.742 0.126 1.716 -1.509 0.126 1.716 -2.590 -0.191 0.217 2.619 1.303 - 274.40 10.324 10.325 10.414 0.151 1.357 -1.788 0.151 1.357 -2.427 -0.270 0.205 2.531 1.225 - 274.45 9.939 9.945 10.038 0.348 1.363 -2.174 0.348 1.363 -2.963 -0.756 0.474 3.352 1.547 - 274.50 9.723 9.724 9.783 0.129 1.072 -2.390 0.129 1.072 -2.563 -0.309 0.139 3.439 1.293 - 274.55 9.850 9.850 9.883 0.005 0.802 -2.263 0.005 0.802 -1.815 -0.011 0.004 2.882 0.907 - 274.60 9.669 9.669 9.707 0.009 0.863 -2.444 0.009 0.863 -2.109 -0.021 0.008 3.359 1.055 - 274.65 9.785 9.785 9.829 -0.077 0.925 -2.328 -0.077 0.925 -2.154 0.178 -0.071 3.141 1.081 - 274.70 9.882 9.883 9.943 -0.143 1.088 -2.231 -0.143 1.088 -2.426 0.320 -0.156 3.090 1.226 - 274.75 9.892 9.898 9.932 -0.337 0.826 -2.221 -0.337 0.826 -1.835 0.748 -0.278 2.865 1.001 - 274.80 9.546 9.552 9.556 -0.342 0.268 -2.567 -0.342 0.268 -0.688 0.877 -0.092 3.389 0.559 - 274.85 9.735 9.735 9.743 -0.032 0.406 -2.378 -0.032 0.406 -0.965 0.075 -0.013 2.910 0.484 - 274.90 9.801 9.803 9.835 -0.212 0.790 -2.312 -0.212 0.790 -1.826 0.490 -0.167 3.007 0.949 - 274.95 9.948 9.956 10.001 -0.384 0.947 -2.165 -0.384 0.947 -2.049 0.831 -0.363 2.864 1.121 - 275.00 10.001 10.002 10.039 -0.134 0.860 -2.111 -0.134 0.860 -1.815 0.282 -0.115 2.607 0.920 - 275.05 10.006 10.010 10.031 -0.277 0.648 -2.107 -0.277 0.648 -1.366 0.584 -0.180 2.468 0.748 - 275.10 10.204 10.230 10.240 -0.729 0.450 -1.909 -0.729 0.450 -0.860 1.391 -0.328 2.189 0.834 - 275.15 10.385 10.444 10.454 -1.100 0.466 -1.727 -1.100 0.466 -0.804 1.900 -0.512 2.205 1.063 - 275.20 10.543 10.585 10.600 -0.934 0.562 -1.569 -0.934 0.562 -0.883 1.466 -0.525 1.826 0.895 - 275.25 10.265 10.283 10.287 -0.596 0.307 -1.847 -0.596 0.307 -0.567 1.101 -0.183 1.931 0.626 - 275.30 10.061 10.094 10.095 -0.824 -0.088 -2.052 -0.824 -0.088 0.180 1.690 0.072 2.449 0.851 - 275.35 10.116 10.144 10.144 -0.750 -0.055 -1.997 -0.750 -0.055 0.110 1.498 0.041 2.276 0.751 - 275.40 10.205 10.219 10.220 -0.531 0.162 -1.908 -0.531 0.162 -0.310 1.012 -0.086 1.974 0.531 - 275.45 10.586 10.596 10.596 -0.448 0.031 -1.527 -0.448 0.031 -0.048 0.684 -0.014 1.266 0.343 - 275.50 10.886 10.893 10.895 -0.390 0.204 -1.226 -0.390 0.204 -0.250 0.479 -0.080 0.849 0.273 - 275.55 10.944 10.950 10.952 -0.363 0.201 -1.169 -0.363 0.201 -0.235 0.425 -0.073 0.769 0.245 - 275.60 10.771 10.786 10.786 -0.569 0.031 -1.342 -0.569 0.031 -0.042 0.764 -0.018 1.063 0.383 - 275.65 10.781 10.796 10.796 -0.565 -0.104 -1.332 -0.565 -0.104 0.138 0.753 0.059 1.052 0.384 - 275.70 10.595 10.604 10.607 -0.430 -0.230 -1.517 -0.430 -0.230 0.349 0.653 0.099 1.270 0.374 - 275.75 10.825 10.827 10.830 -0.203 -0.270 -1.288 -0.203 -0.270 0.348 0.261 0.055 0.886 0.219 - 275.80 10.645 10.647 10.648 -0.206 -0.173 -1.468 -0.206 -0.173 0.253 0.303 0.036 1.114 0.198 - 275.85 10.511 10.512 10.513 -0.132 -0.175 -1.602 -0.132 -0.175 0.280 0.211 0.023 1.307 0.176 - 275.90 10.283 10.286 10.291 -0.262 -0.309 -1.830 -0.262 -0.309 0.566 0.479 0.081 1.756 0.373 - 275.95 10.658 10.664 10.671 -0.358 -0.394 -1.455 -0.358 -0.394 0.574 0.521 0.141 1.200 0.394 - 276.00 10.734 10.746 10.751 -0.524 -0.307 -1.379 -0.524 -0.307 0.423 0.722 0.161 1.135 0.426 - 276.05 10.659 10.676 10.693 -0.603 -0.608 -1.454 -0.603 -0.608 0.884 0.876 0.366 1.424 0.649 - 276.10 10.839 10.842 10.851 -0.257 -0.433 -1.273 -0.257 -0.433 0.551 0.328 0.111 0.937 0.325 - 276.15 10.922 10.925 10.946 -0.239 -0.689 -1.191 -0.239 -0.689 0.821 0.285 0.165 0.975 0.442 - 276.20 11.118 11.121 11.140 -0.222 -0.652 -0.995 -0.222 -0.652 0.649 0.221 0.145 0.732 0.350 - 276.25 10.948 10.950 10.969 -0.217 -0.646 -1.165 -0.217 -0.646 0.752 0.253 0.140 0.911 0.403 - 276.30 11.022 11.022 11.043 -0.025 -0.674 -1.091 -0.025 -0.674 0.735 0.027 0.017 0.823 0.368 - 276.35 11.041 11.051 11.075 -0.475 -0.722 -1.072 -0.475 -0.722 0.774 0.510 0.343 0.949 0.494 - 276.40 11.121 11.156 11.186 -0.885 -0.813 -0.992 -0.885 -0.813 0.806 0.878 0.720 1.214 0.696 - 276.45 10.909 10.942 10.951 -0.844 -0.438 -1.204 -0.844 -0.438 0.527 1.016 0.370 1.177 0.602 - 276.50 10.985 10.995 11.043 -0.455 -1.029 -1.128 -0.455 -1.029 1.160 0.514 0.469 1.269 0.676 - 276.55 10.824 10.827 10.880 -0.242 -1.072 -1.289 -0.242 -1.072 1.382 0.312 0.259 1.434 0.720 - 276.60 10.655 10.656 10.711 -0.112 -1.085 -1.457 -0.112 -1.085 1.582 0.164 0.122 1.657 0.797 - 276.65 10.593 10.593 10.703 -0.016 -1.528 -1.520 -0.016 -1.528 2.322 0.025 0.025 2.322 1.161 - 276.70 10.477 10.477 10.598 0.031 -1.598 -1.636 0.031 -1.598 2.614 -0.050 -0.049 2.615 1.307 - 276.75 10.490 10.490 10.595 0.020 -1.482 -1.622 0.020 -1.482 2.404 -0.032 -0.029 2.414 1.202 - 276.80 10.679 10.683 10.759 -0.268 -1.275 -1.433 -0.268 -1.275 1.827 0.384 0.341 1.876 0.949 - 276.85 10.607 10.614 10.693 -0.375 -1.298 -1.506 -0.375 -1.298 1.954 0.564 0.487 2.046 1.046 - 276.90 10.892 10.892 10.948 -0.099 -1.106 -1.221 -0.099 -1.106 1.351 0.121 0.110 1.363 0.680 - 276.95 10.991 10.991 11.026 -0.041 -0.872 -1.122 -0.041 -0.872 0.978 0.046 0.036 1.010 0.490 - 277.00 11.048 11.049 11.086 0.175 -0.901 -1.065 0.175 -0.901 0.960 -0.187 -0.158 0.988 0.495 - 277.05 11.039 11.041 11.119 0.216 -1.314 -1.074 0.216 -1.314 1.411 -0.232 -0.284 1.463 0.729 - 277.10 10.648 10.651 10.704 0.233 -1.059 -1.464 0.233 -1.059 1.551 -0.341 -0.247 1.660 0.804 - 277.15 10.636 10.642 10.656 0.343 -0.542 -1.477 0.343 -0.542 0.800 -0.506 -0.186 1.296 0.482 - 277.20 10.647 10.647 10.691 0.083 -0.963 -1.466 0.083 -0.963 1.412 -0.122 -0.080 1.542 0.710 - 277.25 11.145 11.159 11.188 0.552 -0.813 -0.968 0.552 -0.813 0.787 -0.534 -0.448 0.951 0.526 - 277.30 10.951 10.957 10.966 0.356 -0.461 -1.162 0.356 -0.461 0.536 -0.413 -0.164 0.845 0.348 - 277.35 11.257 11.262 11.288 0.335 -0.767 -0.856 0.335 -0.767 0.656 -0.287 -0.257 0.717 0.381 - 277.40 11.121 11.125 11.147 0.275 -0.708 -0.992 0.275 -0.708 0.702 -0.273 -0.195 0.780 0.389 - 277.45 10.934 10.940 10.967 0.364 -0.762 -1.179 0.364 -0.762 0.898 -0.429 -0.277 1.051 0.516 - 277.50 10.520 10.520 10.551 -0.028 -0.803 -1.593 -0.028 -0.803 1.279 0.045 0.023 1.591 0.640 - 277.55 10.383 10.383 10.406 -0.011 -0.688 -1.730 -0.011 -0.688 1.191 0.019 0.008 1.733 0.595 - 277.60 10.670 10.674 10.698 -0.297 -0.711 -1.443 -0.297 -0.711 1.026 0.429 0.211 1.338 0.566 - 277.65 10.432 10.445 10.458 -0.521 -0.521 -1.681 -0.521 -0.521 0.875 0.876 0.271 1.684 0.634 - 277.70 10.237 10.238 10.238 -0.048 0.020 -1.875 -0.048 0.020 -0.037 0.090 -0.001 1.760 0.049 - 277.75 10.223 10.224 10.227 -0.127 -0.259 -1.890 -0.127 -0.259 0.490 0.241 0.033 1.828 0.273 - 277.80 10.214 10.218 10.228 0.272 -0.450 -1.898 0.272 -0.450 0.855 -0.516 -0.122 1.940 0.503 - 277.85 10.352 10.353 10.367 0.190 -0.524 -1.761 0.190 -0.524 0.923 -0.335 -0.100 1.706 0.494 - 277.90 10.613 10.616 10.623 0.252 -0.379 -1.500 0.252 -0.379 0.569 -0.377 -0.095 1.228 0.345 - 277.95 10.717 10.718 10.737 0.124 -0.650 -1.396 0.124 -0.650 0.907 -0.174 -0.081 1.193 0.464 - 278.00 10.843 10.843 10.844 0.055 -0.174 -1.270 0.055 -0.174 0.221 -0.070 -0.010 0.823 0.116 - 278.05 11.179 11.180 11.182 0.119 0.196 -0.934 0.119 0.196 -0.183 -0.111 0.023 0.462 0.108 - 278.10 11.280 11.285 11.285 0.302 0.112 -0.832 0.302 0.112 -0.093 -0.251 0.034 0.398 0.135 - 278.15 11.301 11.302 11.302 0.166 0.093 -0.812 0.166 0.093 -0.075 -0.135 0.015 0.348 0.078 - 278.20 11.377 11.379 11.379 0.235 -0.028 -0.736 0.235 -0.028 0.021 -0.173 -0.007 0.299 0.087 - 278.25 11.500 11.506 11.506 0.369 -0.017 -0.613 0.369 -0.017 0.010 -0.226 -0.006 0.256 0.113 - 278.30 11.023 11.034 11.038 0.503 0.275 -1.090 0.503 0.275 -0.300 -0.548 0.138 0.758 0.320 - 278.35 11.080 11.086 11.087 0.344 0.139 -1.032 0.344 0.139 -0.143 -0.356 0.048 0.602 0.193 - 278.40 11.348 11.357 11.363 0.462 0.342 -0.765 0.462 0.342 -0.261 -0.353 0.158 0.457 0.233 - 278.45 11.245 11.256 11.277 0.499 0.687 -0.867 0.499 0.687 -0.595 -0.433 0.343 0.736 0.406 - 278.50 11.214 11.224 11.234 0.459 0.482 -0.899 0.459 0.482 -0.433 -0.413 0.221 0.625 0.319 - 278.55 11.338 11.347 11.353 0.444 0.377 -0.775 0.444 0.377 -0.292 -0.344 0.167 0.469 0.240 - 278.60 11.330 11.344 11.345 0.562 0.134 -0.783 0.562 0.134 -0.105 -0.440 0.075 0.473 0.229 - 278.65 11.368 11.388 11.393 0.684 0.310 -0.745 0.684 0.310 -0.231 -0.509 0.212 0.559 0.299 - 278.70 11.471 11.491 11.507 0.684 0.604 -0.642 0.684 0.604 -0.388 -0.439 0.413 0.622 0.358 - 278.75 11.419 11.423 11.427 0.288 0.294 -0.694 0.288 0.294 -0.204 -0.199 0.085 0.325 0.149 - 278.80 11.466 11.469 11.469 0.265 -0.084 -0.647 0.265 -0.084 0.054 -0.172 -0.022 0.248 0.091 - 278.85 11.511 11.523 11.527 0.528 -0.306 -0.602 0.528 -0.306 0.184 -0.318 -0.162 0.368 0.201 - 278.90 11.504 11.537 11.549 0.875 -0.518 -0.609 0.875 -0.518 0.316 -0.533 -0.453 0.702 0.384 - 278.95 11.703 11.740 11.768 0.923 -0.822 -0.410 0.923 -0.822 0.336 -0.378 -0.758 0.847 0.456 - 279.00 11.962 11.977 12.001 0.587 -0.754 -0.150 0.587 -0.754 0.113 -0.088 -0.443 0.468 0.233 - 279.05 11.800 11.841 11.867 0.984 -0.790 -0.313 0.984 -0.790 0.248 -0.308 -0.778 0.846 0.436 - 279.10 11.525 11.563 11.576 0.932 -0.548 -0.588 0.932 -0.548 0.322 -0.547 -0.510 0.757 0.407 - 279.15 11.718 11.735 11.768 0.627 -0.884 -0.395 0.627 -0.884 0.349 -0.247 -0.555 0.666 0.350 - 279.20 11.778 11.808 11.828 0.839 -0.689 -0.335 0.839 -0.689 0.231 -0.281 -0.578 0.645 0.341 - 279.25 11.563 11.596 11.611 0.877 -0.595 -0.550 0.877 -0.595 0.327 -0.482 -0.522 0.712 0.391 - 279.30 11.595 11.622 11.628 0.796 -0.381 -0.518 0.796 -0.381 0.197 -0.413 -0.303 0.524 0.274 - 279.35 11.695 11.703 11.715 0.431 -0.521 -0.417 0.431 -0.521 0.218 -0.180 -0.224 0.316 0.180 - 279.40 11.589 11.591 11.599 0.199 -0.434 -0.524 0.199 -0.434 0.227 -0.104 -0.086 0.251 0.132 - 279.45 11.553 11.553 11.560 0.124 -0.408 -0.560 0.124 -0.408 0.229 -0.069 -0.050 0.248 0.122 - 279.50 11.713 11.716 11.725 0.291 -0.449 -0.400 0.291 -0.449 0.180 -0.116 -0.131 0.223 0.125 - 279.55 11.702 11.702 11.712 0.116 -0.469 -0.411 0.116 -0.469 0.193 -0.048 -0.055 0.201 0.103 - 279.60 11.751 11.752 11.774 -0.148 -0.724 -0.362 -0.148 -0.724 0.262 0.054 0.107 0.338 0.144 - 279.65 12.264 12.264 12.297 -0.102 -0.901 0.151 -0.102 -0.901 -0.136 -0.015 0.092 0.422 0.082 - 279.70 12.105 12.106 12.116 0.095 -0.514 -0.008 0.095 -0.514 0.004 -0.001 -0.049 0.136 0.025 - 279.75 12.027 12.027 12.047 0.008 -0.687 -0.086 0.008 -0.687 0.059 -0.001 -0.006 0.240 0.030 - 279.80 12.175 12.179 12.216 -0.315 -0.959 0.062 -0.315 -0.959 -0.059 -0.019 0.302 0.512 0.154 - 279.85 12.221 12.224 12.296 -0.276 -1.324 0.108 -0.276 -1.324 -0.143 -0.030 0.365 0.921 0.197 - 279.90 12.343 12.343 12.419 -0.033 -1.368 0.230 -0.033 -1.368 -0.315 -0.008 0.045 0.963 0.159 - 279.95 12.136 12.136 12.179 -0.018 -1.022 0.023 -0.018 -1.022 -0.024 -0.000 0.018 0.523 0.015 - 280.00 12.312 12.312 12.356 0.017 -1.035 0.199 0.017 -1.035 -0.206 0.003 -0.018 0.556 0.104 - 280.05 12.117 12.117 12.142 0.109 -0.764 0.004 0.109 -0.764 -0.003 0.000 -0.083 0.298 0.042 - 280.10 12.129 12.137 12.147 0.428 -0.514 0.016 0.428 -0.514 -0.008 0.007 -0.220 0.224 0.110 - 280.15 12.105 12.107 12.116 0.213 -0.454 -0.007 0.213 -0.454 0.003 -0.002 -0.097 0.126 0.048 - 280.20 12.081 12.083 12.090 -0.206 -0.420 -0.031 -0.206 -0.420 0.013 0.006 0.086 0.110 0.044 - 280.25 12.031 12.031 12.039 -0.079 -0.438 -0.082 -0.079 -0.438 0.036 0.007 0.035 0.102 0.025 - 280.30 12.004 12.005 12.016 0.180 -0.498 -0.109 0.180 -0.498 0.054 -0.020 -0.090 0.146 0.053 - 280.35 11.851 11.851 11.863 0.096 -0.531 -0.262 0.096 -0.531 0.139 -0.025 -0.051 0.180 0.075 - 280.40 11.981 11.983 11.996 0.214 -0.566 -0.132 0.214 -0.566 0.075 -0.028 -0.121 0.192 0.073 - 280.45 12.003 12.005 12.014 0.228 -0.452 -0.110 0.228 -0.452 0.050 -0.025 -0.103 0.134 0.059 - 280.50 11.978 11.978 11.979 -0.035 -0.195 -0.135 -0.035 -0.195 0.026 0.005 0.007 0.029 0.014 - 280.55 12.162 12.162 12.167 -0.103 -0.344 0.049 -0.103 -0.344 -0.017 -0.005 0.035 0.066 0.020 - 280.60 12.265 12.267 12.271 -0.215 -0.327 0.152 -0.215 -0.327 -0.050 -0.033 0.070 0.088 0.046 - 280.65 12.062 12.064 12.068 -0.211 -0.321 -0.050 -0.211 -0.321 0.016 0.011 0.068 0.075 0.035 - 280.70 12.102 12.103 12.112 -0.043 -0.480 -0.010 -0.043 -0.480 0.005 0.000 0.021 0.116 0.011 - 280.75 12.137 12.138 12.143 0.169 -0.326 0.024 0.169 -0.326 -0.008 0.004 -0.055 0.068 0.028 - 280.80 11.848 11.848 11.857 -0.058 -0.471 -0.265 -0.058 -0.471 0.125 0.015 0.027 0.148 0.064 - 280.85 12.021 12.022 12.052 0.175 -0.852 -0.092 0.175 -0.852 0.079 -0.016 -0.149 0.383 0.085 - 280.90 11.990 12.002 12.041 0.517 -0.973 -0.122 0.517 -0.973 0.119 -0.063 -0.503 0.614 0.260 - 280.95 11.852 11.862 11.891 0.490 -0.830 -0.261 0.490 -0.830 0.217 -0.128 -0.407 0.498 0.239 - 281.00 12.079 12.083 12.106 0.335 -0.739 -0.034 0.335 -0.739 0.025 -0.011 -0.247 0.329 0.124 - 281.05 12.122 12.122 12.153 -0.105 -0.869 0.009 -0.105 -0.869 -0.008 -0.001 0.091 0.383 0.046 - 281.10 11.828 11.828 11.841 0.054 -0.559 -0.285 0.054 -0.559 0.159 -0.015 -0.030 0.198 0.081 - 281.15 11.786 11.786 11.815 0.075 -0.833 -0.327 0.075 -0.833 0.272 -0.024 -0.062 0.403 0.140 - 281.20 11.642 11.645 11.656 0.293 -0.496 -0.471 0.293 -0.496 0.233 -0.138 -0.145 0.277 0.154 - 281.25 11.629 11.640 11.668 0.496 -0.807 -0.484 0.496 -0.807 0.390 -0.240 -0.401 0.566 0.304 - 281.30 11.671 11.679 11.728 0.417 -1.071 -0.442 0.417 -1.071 0.473 -0.184 -0.447 0.758 0.338 - 281.35 11.962 11.968 12.011 0.359 -1.017 -0.150 0.359 -1.017 0.153 -0.054 -0.365 0.593 0.200 - 281.40 11.970 11.997 12.039 0.798 -1.006 -0.142 0.798 -1.006 0.143 -0.114 -0.802 0.834 0.411 - 281.45 11.806 11.821 11.869 0.602 -1.071 -0.307 0.602 -1.071 0.329 -0.185 -0.645 0.802 0.374 - 281.50 11.619 11.626 11.682 0.391 -1.139 -0.493 0.391 -1.139 0.562 -0.193 -0.446 0.847 0.372 - 281.55 11.902 11.912 11.959 0.489 -1.061 -0.211 0.489 -1.061 0.224 -0.103 -0.519 0.705 0.287 - 281.60 11.867 11.871 11.904 0.307 -0.876 -0.245 0.307 -0.876 0.215 -0.075 -0.269 0.461 0.176 - 281.65 11.756 11.757 11.770 0.190 -0.542 -0.357 0.190 -0.542 0.193 -0.068 -0.103 0.228 0.115 - 281.70 11.689 11.689 11.711 -0.086 -0.714 -0.424 -0.086 -0.714 0.303 0.036 0.061 0.349 0.156 - 281.75 11.647 11.649 11.665 0.247 -0.609 -0.466 0.247 -0.609 0.284 -0.115 -0.151 0.325 0.171 - 281.80 11.433 11.438 11.447 0.334 -0.451 -0.680 0.334 -0.451 0.306 -0.227 -0.150 0.388 0.205 - 281.85 11.643 11.646 11.655 0.259 -0.442 -0.469 0.259 -0.442 0.207 -0.122 -0.114 0.241 0.133 - 281.90 11.824 11.824 11.830 -0.092 -0.367 -0.289 -0.092 -0.367 0.106 0.027 0.034 0.113 0.057 - 281.95 11.625 11.625 11.639 0.016 -0.569 -0.488 0.016 -0.569 0.277 -0.008 -0.009 0.281 0.139 - 282.00 11.687 11.689 11.711 -0.192 -0.719 -0.426 -0.192 -0.719 0.306 0.082 0.138 0.368 0.173 - 282.05 11.698 11.698 11.736 0.072 -0.940 -0.415 0.072 -0.940 0.390 -0.030 -0.068 0.530 0.198 - 282.10 11.874 11.874 11.928 0.109 -1.129 -0.239 0.109 -1.129 0.270 -0.026 -0.123 0.671 0.149 - 282.15 12.046 12.046 12.105 0.073 -1.196 -0.067 0.073 -1.196 0.080 -0.005 -0.087 0.720 0.059 - 282.20 12.157 12.158 12.227 0.187 -1.298 0.044 0.187 -1.298 -0.057 0.008 -0.242 0.861 0.125 - 282.25 12.266 12.268 12.329 0.249 -1.225 0.153 0.249 -1.225 -0.187 0.038 -0.305 0.793 0.180 - 282.30 12.601 12.618 12.687 0.661 -1.321 0.488 0.661 -1.321 -0.645 0.323 -0.873 1.210 0.566 - 282.35 12.762 12.770 12.827 0.446 -1.212 0.649 0.446 -1.212 -0.787 0.289 -0.540 1.045 0.499 - 282.40 12.572 12.577 12.638 0.360 -1.241 0.459 0.360 -1.241 -0.570 0.165 -0.447 0.940 0.371 - 282.45 12.796 12.804 12.844 0.448 -1.019 0.683 0.448 -1.019 -0.696 0.306 -0.456 0.852 0.443 - 282.50 12.851 12.856 12.909 0.366 -1.161 0.738 0.366 -1.161 -0.857 0.270 -0.425 1.013 0.497 - 282.55 12.629 12.629 12.692 0.136 -1.256 0.516 0.136 -1.256 -0.648 0.070 -0.171 0.931 0.337 - 282.60 13.030 13.031 13.112 0.169 -1.456 0.917 0.169 -1.456 -1.335 0.155 -0.246 1.494 0.683 - 282.65 13.444 13.444 13.513 0.014 -1.365 1.331 0.014 -1.365 -1.817 0.019 -0.019 1.818 0.909 - 282.70 13.221 13.221 13.277 -0.056 -1.211 1.108 -0.056 -1.211 -1.342 -0.062 0.068 1.349 0.673 - 282.75 13.093 13.094 13.128 0.051 -0.947 0.981 0.051 -0.947 -0.929 0.050 -0.049 0.930 0.466 - 282.80 12.825 12.825 12.843 0.070 -0.687 0.712 0.070 -0.687 -0.489 0.050 -0.048 0.491 0.247 - 282.85 12.744 12.745 12.793 0.148 -1.107 0.631 0.148 -1.107 -0.699 0.093 -0.164 0.823 0.362 - 282.90 12.935 12.937 13.023 0.217 -1.496 0.822 0.217 -1.496 -1.230 0.179 -0.325 1.480 0.642 - 282.95 13.156 13.157 13.221 -0.099 -1.304 1.043 -0.099 -1.304 -1.361 -0.104 0.129 1.400 0.685 - 283.00 12.885 12.885 12.952 0.042 -1.313 0.773 0.042 -1.313 -1.014 0.032 -0.055 1.161 0.508 - 283.05 12.400 12.400 12.462 0.022 -1.242 0.287 0.022 -1.242 -0.357 0.006 -0.028 0.813 0.179 - 283.10 12.164 12.164 12.219 0.035 -1.159 0.052 0.035 -1.159 -0.060 0.002 -0.040 0.673 0.036 - 283.15 12.287 12.292 12.328 0.336 -0.941 0.174 0.336 -0.941 -0.164 0.059 -0.316 0.514 0.180 - 283.20 12.088 12.098 12.119 0.489 -0.725 -0.025 0.489 -0.725 0.018 -0.012 -0.355 0.383 0.178 - 283.25 11.811 11.828 11.838 0.623 -0.490 -0.302 0.623 -0.490 0.148 -0.188 -0.306 0.360 0.194 - 283.30 12.037 12.066 12.075 0.832 -0.484 -0.076 0.832 -0.484 0.037 -0.063 -0.402 0.466 0.205 - 283.35 11.903 11.929 11.936 0.790 -0.428 -0.210 0.790 -0.428 0.090 -0.166 -0.338 0.426 0.194 - 283.40 12.283 12.298 12.302 0.609 -0.296 0.170 0.609 -0.296 -0.050 0.104 -0.180 0.244 0.107 - 283.45 12.425 12.441 12.441 0.645 -0.065 0.312 0.645 -0.065 -0.020 0.201 -0.042 0.259 0.103 - 283.50 12.248 12.264 12.265 0.638 -0.073 0.135 0.638 -0.073 -0.010 0.086 -0.047 0.215 0.049 - 283.55 12.092 12.110 12.110 0.658 0.001 -0.020 0.658 0.001 -0.000 -0.013 0.001 0.217 0.007 - 283.60 11.980 11.997 11.998 0.631 -0.130 -0.133 0.631 -0.130 0.017 -0.084 -0.082 0.217 0.059 - 283.65 11.729 11.776 11.777 1.057 -0.122 -0.384 1.057 -0.122 0.047 -0.406 -0.129 0.640 0.214 - 283.70 11.999 12.011 12.015 0.555 -0.291 -0.114 0.555 -0.291 0.033 -0.063 -0.161 0.203 0.088 - 283.75 12.255 12.269 12.275 0.590 -0.388 0.142 0.590 -0.388 -0.055 0.084 -0.229 0.259 0.125 - 283.80 12.208 12.237 12.241 0.835 -0.323 0.095 0.835 -0.323 -0.031 0.080 -0.270 0.406 0.142 - 283.85 12.279 12.310 12.310 0.865 -0.045 0.166 0.865 -0.045 -0.007 0.144 -0.039 0.389 0.075 - 283.90 12.362 12.387 12.389 0.783 -0.223 0.249 0.783 -0.223 -0.056 0.195 -0.175 0.362 0.134 - 283.95 12.249 12.298 12.302 1.101 -0.289 0.136 1.101 -0.289 -0.039 0.150 -0.318 0.657 0.177 - 284.00 12.340 12.385 12.387 1.058 -0.213 0.227 1.058 -0.213 -0.048 0.240 -0.225 0.608 0.166 - 284.05 12.230 12.257 12.264 0.816 -0.399 0.117 0.816 -0.399 -0.047 0.095 -0.326 0.420 0.171 - 284.10 12.495 12.534 12.539 0.988 -0.347 0.382 0.988 -0.347 -0.133 0.378 -0.342 0.621 0.263 - 284.15 12.389 12.415 12.418 0.812 -0.275 0.276 0.812 -0.275 -0.076 0.224 -0.223 0.405 0.163 - 284.20 12.477 12.495 12.495 0.669 -0.076 0.364 0.669 -0.076 -0.028 0.244 -0.051 0.293 0.125 - 284.25 12.487 12.501 12.501 0.587 0.083 0.374 0.587 0.083 0.031 0.220 0.049 0.246 0.114 - 284.30 12.519 12.527 12.531 0.468 0.295 0.406 0.468 0.295 0.120 0.190 0.138 0.235 0.132 - 284.35 12.106 12.125 12.131 0.686 0.354 -0.007 0.686 0.354 -0.002 -0.005 0.243 0.298 0.121 - 284.40 12.073 12.093 12.094 0.683 0.202 -0.040 0.683 0.202 -0.008 -0.027 0.138 0.254 0.070 - 284.45 12.178 12.195 12.195 0.637 0.020 0.065 0.637 0.020 0.001 0.042 0.013 0.205 0.022 - 284.50 12.415 12.424 12.425 0.467 -0.141 0.302 0.467 -0.141 -0.043 0.141 -0.066 0.165 0.081 - 284.55 12.434 12.434 12.434 0.094 0.078 0.321 0.094 0.078 0.025 0.030 0.007 0.059 0.020 - 284.60 12.465 12.467 12.469 -0.194 0.248 0.353 -0.194 0.248 0.087 -0.068 -0.048 0.112 0.060 - 284.65 12.416 12.419 12.423 -0.284 0.316 0.303 -0.284 0.316 0.096 -0.086 -0.090 0.136 0.078 - 284.70 12.392 12.392 12.409 -0.121 0.648 0.279 -0.121 0.648 0.181 -0.034 -0.079 0.256 0.100 - 284.75 12.702 12.702 12.709 0.009 0.400 0.589 0.009 0.400 0.236 0.005 0.004 0.254 0.118 - 284.80 12.553 12.553 12.566 0.095 0.556 0.440 0.095 0.556 0.245 0.042 0.053 0.256 0.127 - 284.85 12.564 12.564 12.566 -0.035 0.254 0.451 -0.035 0.254 0.114 -0.016 -0.009 0.134 0.058 - 284.90 12.837 12.837 12.839 -0.119 0.165 0.724 -0.119 0.165 0.119 -0.086 -0.020 0.283 0.074 - 284.95 12.843 12.844 12.844 -0.166 -0.074 0.730 -0.166 -0.074 -0.054 -0.121 0.012 0.283 0.066 - 285.00 12.647 12.652 12.652 -0.338 0.026 0.534 -0.338 0.026 0.014 -0.181 -0.009 0.200 0.091 - 285.05 12.722 12.724 12.725 -0.227 -0.132 0.609 -0.227 -0.132 -0.081 -0.138 0.030 0.220 0.081 - 285.10 12.620 12.621 12.623 0.134 -0.216 0.507 0.134 -0.216 -0.110 0.068 -0.029 0.161 0.066 - 285.15 12.254 12.255 12.257 0.121 0.224 0.141 0.121 0.224 0.032 0.017 0.027 0.042 0.023 - 285.20 12.321 12.323 12.323 0.219 0.105 0.208 0.219 0.105 0.022 0.046 0.023 0.051 0.028 - 285.25 12.057 12.059 12.070 0.243 0.515 -0.056 0.243 0.515 -0.029 -0.014 0.125 0.164 0.065 - 285.30 11.742 11.745 11.775 0.300 0.838 -0.371 0.300 0.838 -0.311 -0.111 0.251 0.465 0.208 - 285.35 11.561 11.571 11.616 0.470 1.022 -0.552 0.470 1.022 -0.564 -0.259 0.480 0.784 0.392 - 285.40 11.613 11.621 11.648 0.433 0.788 -0.499 0.433 0.788 -0.394 -0.216 0.341 0.529 0.282 - 285.45 11.379 11.386 11.395 0.399 0.448 -0.734 0.399 0.448 -0.329 -0.293 0.179 0.449 0.238 - 285.50 11.094 11.105 11.129 0.495 0.730 -1.019 0.495 0.730 -0.744 -0.505 0.362 0.908 0.484 - 285.55 11.252 11.268 11.300 0.591 0.848 -0.861 0.591 0.848 -0.730 -0.509 0.501 0.905 0.511 - 285.60 11.397 11.411 11.426 0.557 0.584 -0.716 0.557 0.584 -0.418 -0.398 0.325 0.581 0.331 - 285.65 11.515 11.528 11.530 0.554 0.184 -0.598 0.554 0.184 -0.110 -0.331 0.102 0.349 0.182 - 285.70 11.535 11.546 11.546 0.498 -0.106 -0.578 0.498 -0.106 0.062 -0.288 -0.053 0.296 0.149 - 285.75 11.548 11.557 11.558 0.464 -0.100 -0.565 0.464 -0.100 0.057 -0.262 -0.046 0.272 0.136 - 285.80 11.463 11.471 11.475 0.440 0.283 -0.650 0.440 0.283 -0.184 -0.286 0.124 0.348 0.181 - 285.85 11.364 11.369 11.377 0.349 0.417 -0.749 0.349 0.417 -0.312 -0.261 0.146 0.428 0.216 - 285.90 11.385 11.388 11.394 0.235 0.365 -0.728 0.235 0.365 -0.266 -0.171 0.086 0.359 0.164 - 285.95 11.483 11.484 11.485 0.118 0.197 -0.630 0.118 0.197 -0.124 -0.074 0.023 0.225 0.073 - 286.00 11.823 11.832 11.835 0.469 0.281 -0.290 0.469 0.281 -0.081 -0.136 0.132 0.191 0.103 - 286.05 12.000 12.001 12.001 0.149 0.014 -0.113 0.149 0.014 -0.002 -0.017 0.002 0.017 0.008 - 286.10 12.035 12.037 12.039 0.187 0.241 -0.078 0.187 0.241 -0.019 -0.014 0.045 0.050 0.025 - 286.15 11.962 11.962 11.963 0.002 0.117 -0.151 0.002 0.117 -0.018 -0.000 0.000 0.018 0.009 - 286.20 11.915 11.915 11.918 0.029 -0.274 -0.198 0.029 -0.274 0.054 -0.006 -0.008 0.057 0.027 - 286.25 11.512 11.512 11.514 0.062 0.194 -0.601 0.062 0.194 -0.117 -0.038 0.012 0.201 0.062 - 286.30 11.353 11.359 11.360 0.363 0.152 -0.760 0.363 0.152 -0.115 -0.276 0.055 0.366 0.152 - 286.35 11.400 11.404 11.410 0.314 0.363 -0.713 0.314 0.363 -0.259 -0.224 0.114 0.369 0.180 - 286.40 11.714 11.717 11.724 0.297 0.382 -0.399 0.297 0.382 -0.152 -0.118 0.113 0.197 0.112 - 286.45 11.570 11.581 11.583 0.511 0.177 -0.543 0.511 0.177 -0.096 -0.278 0.090 0.294 0.154 - 286.50 11.465 11.488 11.489 0.715 0.156 -0.647 0.715 0.156 -0.101 -0.463 0.112 0.477 0.243 - 286.55 11.545 11.563 11.564 0.658 0.164 -0.568 0.658 0.164 -0.093 -0.374 0.108 0.391 0.200 - 286.60 11.232 11.242 11.260 0.460 0.651 -0.881 0.460 0.651 -0.573 -0.405 0.300 0.706 0.382 - 286.65 11.033 11.046 11.071 0.542 0.748 -1.080 0.542 0.748 -0.808 -0.585 0.405 1.010 0.538 - 286.70 10.746 10.755 10.777 0.443 0.694 -1.367 0.443 0.694 -0.949 -0.606 0.308 1.274 0.584 - 286.75 11.043 11.047 11.060 0.288 0.532 -1.070 0.288 0.532 -0.569 -0.309 0.153 0.755 0.332 - 286.80 11.147 11.151 11.157 0.272 0.391 -0.965 0.272 0.391 -0.377 -0.263 0.106 0.579 0.236 - 286.85 11.162 11.168 11.176 0.355 0.413 -0.951 0.355 0.413 -0.392 -0.337 0.147 0.600 0.269 - 286.90 11.216 11.232 11.246 0.581 0.569 -0.896 0.581 0.569 -0.510 -0.521 0.331 0.733 0.400 - 286.95 11.056 11.074 11.082 0.645 0.395 -1.057 0.645 0.395 -0.418 -0.682 0.255 0.845 0.420 - 287.00 10.922 10.928 10.929 0.351 0.139 -1.190 0.351 0.139 -0.165 -0.417 0.049 0.780 0.226 - 287.05 11.114 11.129 11.131 0.580 0.233 -0.999 0.580 0.233 -0.233 -0.579 0.135 0.694 0.319 - 287.10 11.036 11.054 11.073 0.627 0.651 -1.076 0.627 0.651 -0.701 -0.675 0.408 0.988 0.528 - 287.15 11.056 11.078 11.090 0.694 0.524 -1.057 0.694 0.524 -0.554 -0.734 0.364 0.937 0.494 - 287.20 11.163 11.194 11.219 0.841 0.741 -0.950 0.841 0.741 -0.704 -0.799 0.624 1.080 0.617 - 287.25 11.208 11.225 11.239 0.617 0.554 -0.905 0.617 0.554 -0.501 -0.558 0.341 0.753 0.412 - 287.30 11.224 11.244 11.260 0.667 0.596 -0.889 0.667 0.596 -0.530 -0.593 0.398 0.795 0.445 - 287.35 11.177 11.208 11.226 0.831 0.636 -0.936 0.831 0.636 -0.595 -0.777 0.528 0.985 0.556 - 287.40 11.384 11.396 11.423 0.529 0.782 -0.729 0.529 0.782 -0.570 -0.386 0.414 0.711 0.401 - 287.45 11.332 11.342 11.360 0.457 0.650 -0.780 0.457 0.650 -0.507 -0.357 0.297 0.620 0.344 - 287.50 11.378 11.384 11.410 0.370 0.771 -0.735 0.370 0.771 -0.566 -0.272 0.285 0.636 0.345 - 287.55 11.433 11.433 11.449 0.071 0.602 -0.680 0.071 0.602 -0.409 -0.048 0.043 0.414 0.207 - 287.60 11.370 11.371 11.372 -0.157 0.175 -0.743 -0.157 0.175 -0.130 0.117 -0.028 0.304 0.089 - 287.65 11.264 11.265 11.265 -0.118 0.044 -0.849 -0.118 0.044 -0.037 0.100 -0.005 0.368 0.053 - 287.70 11.613 11.625 11.626 -0.519 0.173 -0.499 -0.519 0.173 -0.087 0.259 -0.090 0.274 0.144 - 287.75 11.608 11.635 11.639 -0.800 -0.300 -0.505 -0.800 -0.300 0.151 0.404 0.240 0.492 0.247 - 287.80 11.869 11.879 11.880 -0.487 0.202 -0.244 -0.487 0.202 -0.049 0.119 -0.098 0.169 0.081 - 287.85 11.689 11.692 11.703 -0.277 0.498 -0.424 -0.277 0.498 -0.211 0.117 -0.138 0.252 0.139 - 287.90 11.464 11.476 11.482 -0.521 0.392 -0.649 -0.521 0.392 -0.254 0.338 -0.204 0.423 0.235 - 287.95 11.366 11.367 11.378 -0.180 0.482 -0.747 -0.180 0.482 -0.360 0.134 -0.087 0.411 0.197 - 288.00 11.408 11.408 11.416 0.049 0.418 -0.705 0.049 0.418 -0.295 -0.035 0.021 0.337 0.149 - 288.05 10.948 10.952 10.967 0.308 0.569 -1.165 0.308 0.569 -0.662 -0.358 0.175 0.887 0.386 - 288.10 11.065 11.074 11.085 0.448 0.487 -1.048 0.448 0.487 -0.510 -0.469 0.218 0.768 0.363 - 288.15 10.767 10.768 10.787 0.125 0.642 -1.346 0.125 0.642 -0.864 -0.168 0.080 1.119 0.442 - 288.20 11.051 11.051 11.085 0.030 0.866 -1.062 0.030 0.866 -0.920 -0.032 0.026 0.939 0.460 - 288.25 11.219 11.219 11.252 0.052 0.860 -0.893 0.052 0.860 -0.768 -0.046 0.044 0.770 0.385 - 288.30 11.205 11.207 11.222 -0.218 0.580 -0.908 -0.218 0.580 -0.526 0.198 -0.126 0.604 0.288 - 288.35 11.507 11.515 11.536 0.434 0.695 -0.606 0.434 0.695 -0.421 -0.263 0.302 0.519 0.290 - 288.40 11.671 11.672 11.676 0.191 0.276 -0.442 0.191 0.276 -0.122 -0.084 0.053 0.154 0.079 - 288.45 11.581 11.581 11.581 0.073 0.094 -0.532 0.073 0.094 -0.050 -0.039 0.007 0.149 0.032 - 288.50 11.390 11.392 11.396 0.236 0.316 -0.723 0.236 0.316 -0.228 -0.170 0.074 0.339 0.147 - 288.55 11.438 11.438 11.441 0.033 0.290 -0.675 0.033 0.290 -0.196 -0.022 0.010 0.271 0.099 - 288.60 11.433 11.433 11.436 -0.006 0.274 -0.680 -0.006 0.274 -0.187 0.004 -0.002 0.269 0.093 - 288.65 11.207 11.211 11.214 -0.312 0.252 -0.906 -0.312 0.252 -0.228 0.283 -0.079 0.491 0.186 - 288.70 11.359 11.359 11.363 -0.005 0.296 -0.754 -0.005 0.296 -0.223 0.004 -0.001 0.328 0.112 - 288.75 11.405 11.410 11.437 0.330 0.790 -0.707 0.330 0.790 -0.559 -0.234 0.261 0.617 0.330 - 288.80 11.285 11.294 11.320 0.436 0.775 -0.827 0.436 0.775 -0.641 -0.360 0.337 0.737 0.405 - 288.85 11.198 11.205 11.229 0.390 0.736 -0.915 0.390 0.736 -0.673 -0.357 0.287 0.766 0.407 - 288.90 11.187 11.188 11.199 -0.161 0.497 -0.926 -0.161 0.497 -0.460 0.149 -0.080 0.565 0.245 - 288.95 11.117 11.117 11.131 -0.054 0.541 -0.996 -0.054 0.541 -0.539 0.054 -0.029 0.644 0.271 - 289.00 11.230 11.232 11.250 0.205 0.643 -0.883 0.205 0.643 -0.568 -0.181 0.132 0.618 0.305 - 289.05 11.151 11.152 11.176 -0.120 0.741 -0.962 -0.120 0.741 -0.713 0.115 -0.089 0.744 0.364 - 289.10 11.396 11.399 11.412 -0.290 0.529 -0.717 -0.290 0.529 -0.379 0.208 -0.153 0.439 0.229 - 289.15 11.481 11.484 11.491 -0.265 0.401 -0.632 -0.265 0.401 -0.253 0.167 -0.106 0.315 0.161 - 289.20 11.580 11.586 11.594 -0.378 0.431 -0.533 -0.378 0.431 -0.229 0.202 -0.163 0.306 0.173 - 289.25 11.487 11.487 11.498 0.036 0.507 -0.626 0.036 0.507 -0.318 -0.022 0.018 0.325 0.159 - 289.30 11.438 11.444 11.451 -0.366 0.420 -0.675 -0.366 0.420 -0.283 0.247 -0.153 0.383 0.203 - 289.35 11.176 11.182 11.204 -0.361 0.707 -0.937 -0.361 0.707 -0.662 0.338 -0.255 0.754 0.393 - 289.40 11.117 11.117 11.166 -0.003 1.046 -0.996 -0.003 1.046 -1.042 0.003 -0.003 1.043 0.521 - 289.45 11.307 11.307 11.359 0.098 1.087 -0.806 0.098 1.087 -0.876 -0.079 0.107 0.920 0.443 - 289.50 10.934 10.934 11.000 -0.070 1.200 -1.179 -0.070 1.200 -1.415 0.082 -0.084 1.417 0.710 - 289.55 11.050 11.050 11.121 -0.044 1.250 -1.063 -0.044 1.250 -1.329 0.047 -0.055 1.347 0.665 - 289.60 11.285 11.287 11.367 -0.217 1.343 -0.828 -0.217 1.343 -1.112 0.180 -0.292 1.268 0.582 - 289.65 11.604 11.607 11.690 -0.296 1.384 -0.509 -0.296 1.384 -0.705 0.151 -0.410 1.131 0.414 - 289.70 11.587 11.588 11.679 0.156 1.459 -0.526 0.156 1.459 -0.768 -0.082 0.227 1.215 0.402 - 289.75 11.189 11.189 11.291 0.103 1.511 -0.924 0.103 1.511 -1.396 -0.095 0.156 1.573 0.704 - 289.80 11.264 11.264 11.370 -0.002 1.546 -0.849 -0.002 1.546 -1.312 0.002 -0.003 1.555 0.656 - 289.85 11.550 11.551 11.611 -0.144 1.173 -0.562 -0.144 1.173 -0.659 0.081 -0.169 0.856 0.343 - 289.90 11.517 11.517 11.566 0.086 1.064 -0.596 0.086 1.064 -0.634 -0.051 0.091 0.747 0.321 - 289.95 11.584 11.586 11.646 0.223 1.175 -0.529 0.223 1.175 -0.621 -0.118 0.262 0.855 0.342 - 290.00 11.477 11.480 11.508 -0.258 0.802 -0.636 -0.258 0.802 -0.510 0.164 -0.207 0.557 0.287 - 290.05 11.414 11.416 11.444 -0.234 0.801 -0.699 -0.234 0.801 -0.560 0.163 -0.187 0.592 0.306 - 290.10 11.855 11.859 11.878 -0.305 0.688 -0.258 -0.305 0.688 -0.178 0.079 -0.210 0.316 0.143 - 290.15 11.657 11.665 11.696 -0.424 0.850 -0.455 -0.424 0.850 -0.387 0.193 -0.360 0.555 0.281 - 290.20 12.000 12.007 12.036 -0.400 0.830 -0.113 -0.400 0.830 -0.093 0.045 -0.332 0.431 0.174 - 290.25 11.639 11.645 11.661 -0.383 0.617 -0.474 -0.383 0.617 -0.292 0.182 -0.236 0.376 0.209 - 290.30 11.667 11.667 11.681 0.096 0.560 -0.446 0.096 0.560 -0.249 -0.043 0.053 0.261 0.129 - 290.35 11.821 11.822 11.855 0.170 0.873 -0.292 0.170 0.873 -0.255 -0.050 0.148 0.438 0.149 - 290.40 11.886 11.891 11.949 0.335 1.175 -0.227 0.335 1.175 -0.266 -0.076 0.394 0.772 0.241 - 290.45 11.773 11.773 11.823 0.088 1.090 -0.340 0.088 1.090 -0.371 -0.030 0.096 0.656 0.192 - 290.50 11.695 11.696 11.774 0.150 1.351 -0.417 0.150 1.351 -0.564 -0.063 0.203 1.011 0.301 - 290.55 11.853 11.853 11.906 0.031 1.123 -0.260 0.031 1.123 -0.292 -0.008 0.035 0.665 0.147 - 290.60 11.662 11.664 11.769 -0.190 1.569 -0.451 -0.190 1.569 -0.707 0.086 -0.298 1.350 0.386 - 290.65 11.538 11.540 11.655 -0.184 1.636 -0.575 -0.184 1.636 -0.940 0.106 -0.301 1.521 0.497 - 290.70 11.551 11.556 11.655 -0.337 1.516 -0.562 -0.337 1.516 -0.851 0.189 -0.511 1.364 0.505 - 290.75 11.690 11.696 11.731 -0.379 0.907 -0.423 -0.379 0.907 -0.384 0.160 -0.344 0.572 0.270 - 290.80 11.790 11.799 11.832 -0.466 0.886 -0.323 -0.466 0.886 -0.286 0.151 -0.413 0.553 0.262 - 290.85 11.843 11.848 11.923 -0.362 1.328 -0.270 -0.362 1.328 -0.358 0.098 -0.481 0.984 0.304 - 290.90 11.818 11.830 11.960 -0.533 1.757 -0.294 -0.533 1.757 -0.517 0.157 -0.937 1.729 0.541 - 290.95 11.768 11.775 11.880 -0.385 1.581 -0.344 -0.385 1.581 -0.545 0.133 -0.609 1.384 0.414 - 291.00 11.859 11.860 11.974 -0.184 1.650 -0.254 -0.184 1.650 -0.419 0.047 -0.303 1.411 0.260 - 291.05 12.221 12.221 12.348 0.089 1.765 0.108 0.089 1.765 0.190 0.010 0.157 1.568 0.124 - 291.10 12.167 12.170 12.264 -0.297 1.513 0.054 -0.297 1.513 0.081 -0.016 -0.449 1.191 0.228 - 291.15 12.462 12.462 12.537 0.018 1.367 0.350 0.018 1.367 0.478 0.006 0.024 0.995 0.239 - 291.20 12.515 12.521 12.562 0.396 1.012 0.402 0.396 1.012 0.407 0.159 0.401 0.672 0.297 - 291.25 12.353 12.354 12.408 0.153 1.156 0.240 0.153 1.156 0.277 0.037 0.177 0.708 0.165 - 291.30 11.901 11.901 11.967 0.036 1.257 -0.212 0.036 1.257 -0.266 -0.008 0.046 0.813 0.135 - 291.35 12.208 12.208 12.266 -0.031 1.183 0.096 -0.031 1.183 0.113 -0.003 -0.036 0.705 0.059 - 291.40 12.254 12.255 12.319 0.079 1.253 0.142 0.079 1.253 0.177 0.011 0.099 0.798 0.102 - 291.45 12.759 12.759 12.813 0.024 1.175 0.646 0.024 1.175 0.759 0.015 0.028 0.900 0.380 - 291.50 12.633 12.634 12.682 -0.162 1.102 0.520 -0.162 1.102 0.573 -0.084 -0.179 0.756 0.303 - 291.55 12.465 12.465 12.505 0.007 0.999 0.352 0.007 0.999 0.352 0.002 0.007 0.561 0.176 - 291.60 11.997 11.998 12.041 -0.140 1.014 -0.116 -0.140 1.014 -0.117 0.016 -0.142 0.531 0.092 - 291.65 12.338 12.342 12.406 -0.325 1.257 0.225 -0.325 1.257 0.282 -0.073 -0.408 0.868 0.251 - 291.70 12.318 12.319 12.423 -0.139 1.603 0.205 -0.139 1.603 0.329 -0.029 -0.223 1.316 0.199 - 291.75 12.265 12.266 12.365 0.048 1.567 0.153 0.048 1.567 0.239 0.007 0.075 1.240 0.125 - 291.80 12.373 12.374 12.449 -0.153 1.366 0.260 -0.153 1.366 0.355 -0.040 -0.209 0.978 0.207 - 291.85 12.268 12.268 12.321 -0.003 1.142 0.155 -0.003 1.142 0.177 -0.000 -0.003 0.664 0.089 - 291.90 11.980 11.981 12.060 0.203 1.379 -0.133 0.203 1.379 -0.184 -0.027 0.280 0.980 0.168 - 291.95 11.841 11.841 11.878 0.040 0.937 -0.272 0.040 0.937 -0.255 -0.011 0.037 0.477 0.129 - 292.00 11.827 11.828 11.847 -0.017 0.678 -0.285 -0.017 0.678 -0.194 0.005 -0.012 0.271 0.097 - 292.05 12.023 12.023 12.056 0.014 0.883 -0.089 0.014 0.883 -0.079 -0.001 0.012 0.394 0.040 - 292.10 11.812 11.814 11.876 -0.200 1.213 -0.301 -0.200 1.213 -0.365 0.060 -0.243 0.801 0.221 - 292.15 11.928 11.936 11.982 -0.437 1.054 -0.185 -0.437 1.054 -0.195 0.081 -0.461 0.668 0.253 - 292.20 12.101 12.105 12.117 -0.315 0.535 -0.012 -0.315 0.535 -0.006 0.004 -0.168 0.193 0.084 - 292.25 11.982 11.983 11.994 -0.172 0.500 -0.131 -0.172 0.500 -0.065 0.022 -0.086 0.148 0.055 - 292.30 11.885 11.885 11.897 -0.033 0.545 -0.228 -0.033 0.545 -0.124 0.008 -0.018 0.175 0.063 - 292.35 12.070 12.070 12.087 -0.106 0.631 -0.043 -0.106 0.631 -0.027 0.005 -0.067 0.206 0.036 - 292.40 12.008 12.016 12.026 -0.444 0.487 -0.105 -0.444 0.487 -0.051 0.047 -0.216 0.223 0.114 - 292.45 11.788 11.813 11.823 -0.775 0.477 -0.325 -0.775 0.477 -0.155 0.252 -0.370 0.467 0.237 - 292.50 12.001 12.045 12.065 -1.018 0.704 -0.111 -1.018 0.704 -0.078 0.113 -0.717 0.772 0.365 - 292.55 12.163 12.227 12.243 -1.248 0.623 0.050 -1.248 0.623 0.031 -0.063 -0.778 0.974 0.391 - 292.60 12.477 12.512 12.516 -0.944 0.307 0.364 -0.944 0.307 0.112 -0.343 -0.289 0.559 0.231 - 292.65 12.732 12.769 12.777 -0.972 0.461 0.619 -0.972 0.461 0.286 -0.602 -0.449 0.770 0.401 - 292.70 12.791 12.850 12.852 -1.233 0.207 0.678 -1.233 0.207 0.140 -0.836 -0.255 1.011 0.443 - 292.75 12.805 12.853 12.858 -1.107 0.366 0.692 -1.107 0.366 0.253 -0.766 -0.405 0.919 0.452 - 292.80 12.641 12.651 12.656 -0.514 0.366 0.528 -0.514 0.366 0.193 -0.271 -0.188 0.338 0.191 - 292.85 12.537 12.544 12.546 -0.436 0.211 0.424 -0.436 0.211 0.089 -0.185 -0.092 0.207 0.112 - 292.90 13.015 13.023 13.038 -0.458 0.607 0.903 -0.458 0.607 0.548 -0.413 -0.278 0.696 0.370 - 292.95 12.935 12.960 12.979 -0.803 0.707 0.822 -0.803 0.707 0.581 -0.660 -0.568 0.910 0.523 - 293.00 12.723 12.756 12.762 -0.926 0.389 0.610 -0.926 0.389 0.237 -0.565 -0.360 0.691 0.355 - 293.05 12.850 12.884 12.887 -0.927 0.288 0.738 -0.927 0.288 0.213 -0.684 -0.267 0.743 0.382 - 293.10 12.589 12.625 12.640 -0.958 0.605 0.476 -0.958 0.605 0.288 -0.456 -0.580 0.755 0.396 - 293.15 12.738 12.790 12.807 -1.154 0.659 0.625 -1.154 0.659 0.412 -0.721 -0.760 1.078 0.563 - 293.20 12.652 12.693 12.721 -1.014 0.843 0.540 -1.014 0.843 0.455 -0.547 -0.855 1.015 0.556 - 293.25 12.710 12.740 12.781 -0.866 1.020 0.598 -0.866 1.020 0.610 -0.518 -0.884 1.074 0.596 - 293.30 13.069 13.090 13.155 -0.745 1.305 0.956 -0.745 1.305 1.247 -0.712 -0.972 1.586 0.867 - 293.35 12.757 12.784 12.840 -0.827 1.195 0.644 -0.827 1.195 0.770 -0.533 -0.989 1.264 0.681 - 293.40 12.490 12.514 12.533 -0.768 0.691 0.377 -0.768 0.691 0.261 -0.290 -0.530 0.605 0.329 - 293.45 12.541 12.558 12.586 -0.657 0.837 0.428 -0.657 0.837 0.358 -0.281 -0.550 0.658 0.357 - 293.50 12.599 12.635 12.674 -0.945 0.995 0.487 -0.945 0.995 0.484 -0.460 -0.940 1.060 0.577 - 293.55 12.686 12.715 12.739 -0.855 0.784 0.573 -0.855 0.784 0.449 -0.490 -0.671 0.837 0.472 - 293.60 12.659 12.668 12.705 -0.462 0.973 0.547 -0.462 0.973 0.532 -0.253 -0.450 0.730 0.370 - 293.65 12.457 12.457 12.504 -0.109 1.079 0.344 -0.109 1.079 0.371 -0.038 -0.118 0.647 0.196 - 293.70 12.530 12.530 12.593 -0.036 1.253 0.417 -0.036 1.253 0.523 -0.015 -0.046 0.873 0.262 - 293.75 12.652 12.654 12.746 -0.249 1.526 0.539 -0.249 1.526 0.823 -0.134 -0.380 1.341 0.458 - 293.80 12.656 12.659 12.743 -0.277 1.461 0.543 -0.277 1.461 0.794 -0.151 -0.405 1.253 0.452 - 293.85 12.750 12.752 12.856 -0.208 1.637 0.637 -0.208 1.637 1.043 -0.132 -0.340 1.565 0.553 - 293.90 12.987 12.988 13.144 -0.120 2.017 0.875 -0.120 2.017 1.764 -0.105 -0.241 2.423 0.892 - 293.95 13.261 13.266 13.434 -0.347 2.118 1.149 -0.347 2.118 2.433 -0.398 -0.735 2.963 1.286 - 294.00 12.791 12.792 12.921 -0.145 1.823 0.678 -0.145 1.823 1.236 -0.098 -0.264 1.902 0.634 - 294.05 12.611 12.611 12.733 -0.084 1.758 0.498 -0.084 1.758 0.875 -0.042 -0.147 1.672 0.444 - 294.10 12.574 12.576 12.663 -0.236 1.481 0.461 -0.236 1.481 0.683 -0.109 -0.349 1.231 0.387 - 294.15 12.562 12.564 12.656 -0.202 1.527 0.450 -0.202 1.527 0.686 -0.091 -0.309 1.287 0.379 - 294.20 12.504 12.504 12.577 -0.132 1.349 0.391 -0.132 1.349 0.528 -0.051 -0.178 0.996 0.280 - 294.25 12.553 12.553 12.628 -0.011 1.367 0.441 -0.011 1.367 0.602 -0.005 -0.015 1.032 0.301 - 294.30 12.799 12.799 12.844 -0.025 1.080 0.686 -0.025 1.080 0.740 -0.017 -0.027 0.818 0.371 - 294.35 12.872 12.875 12.929 -0.250 1.187 0.759 -0.250 1.187 0.902 -0.190 -0.297 1.025 0.484 - 294.40 12.868 12.873 12.901 -0.358 0.854 0.755 -0.358 0.854 0.645 -0.271 -0.306 0.714 0.382 - 294.45 12.969 12.976 13.010 -0.432 0.947 0.856 -0.432 0.947 0.811 -0.370 -0.409 0.908 0.490 - 294.50 13.183 13.201 13.223 -0.678 0.769 1.070 -0.678 0.769 0.824 -0.726 -0.522 1.099 0.608 - 294.55 13.095 13.102 13.122 -0.415 0.726 0.982 -0.415 0.726 0.713 -0.407 -0.301 0.832 0.437 - 294.60 12.986 13.004 13.028 -0.689 0.778 0.873 -0.689 0.778 0.679 -0.602 -0.536 0.921 0.527 - 294.65 12.773 12.779 12.807 -0.386 0.845 0.660 -0.386 0.845 0.558 -0.255 -0.326 0.649 0.347 - 294.70 12.831 12.837 12.885 -0.384 1.112 0.718 -0.384 1.112 0.798 -0.276 -0.427 0.950 0.473 - 294.75 12.560 12.570 12.605 -0.522 0.931 0.447 -0.522 0.931 0.416 -0.233 -0.486 0.670 0.341 - 294.80 12.380 12.390 12.464 -0.477 1.358 0.268 -0.477 1.358 0.363 -0.128 -0.647 1.071 0.377 - 294.85 12.606 12.613 12.699 -0.424 1.481 0.493 -0.424 1.481 0.730 -0.209 -0.627 1.307 0.492 - 294.90 12.706 12.707 12.766 -0.139 1.229 0.594 -0.139 1.229 0.729 -0.083 -0.171 0.941 0.377 - 294.95 12.445 12.452 12.496 -0.443 1.037 0.332 -0.443 1.037 0.344 -0.147 -0.460 0.691 0.296 - 295.00 12.393 12.403 12.447 -0.502 1.047 0.280 -0.502 1.047 0.293 -0.141 -0.526 0.713 0.309 - 295.05 12.289 12.300 12.346 -0.528 1.057 0.176 -0.528 1.057 0.186 -0.093 -0.558 0.713 0.298 - 295.10 12.472 12.484 12.506 -0.555 0.743 0.359 -0.555 0.743 0.267 -0.199 -0.412 0.494 0.265 - 295.15 12.476 12.478 12.507 -0.224 0.848 0.364 -0.224 0.848 0.308 -0.082 -0.190 0.450 0.186 - 295.20 12.320 12.322 12.344 -0.242 0.734 0.207 -0.242 0.734 0.152 -0.050 -0.178 0.320 0.119 - 295.25 12.261 12.262 12.287 -0.093 0.795 0.148 -0.093 0.795 0.118 -0.014 -0.074 0.331 0.070 - 295.30 12.493 12.494 12.506 0.168 0.541 0.380 0.168 0.541 0.206 0.064 0.091 0.233 0.117 - 295.35 12.768 12.770 12.801 0.250 0.891 0.655 0.250 0.891 0.584 0.164 0.223 0.643 0.323 - 295.40 12.980 12.986 13.035 0.411 1.125 0.867 0.411 1.125 0.975 0.356 0.462 1.093 0.568 - 295.45 12.777 12.789 12.855 0.536 1.301 0.665 0.536 1.301 0.865 0.356 0.697 1.211 0.583 - 295.50 12.775 12.785 12.816 0.487 0.891 0.663 0.487 0.891 0.590 0.323 0.434 0.735 0.400 - 295.55 12.903 12.909 12.922 0.376 0.586 0.790 0.376 0.586 0.463 0.297 0.220 0.555 0.296 - 295.60 13.129 13.132 13.142 0.265 0.513 1.016 0.265 0.513 0.521 0.270 0.136 0.683 0.301 - 295.65 13.185 13.187 13.206 0.207 0.706 1.073 0.207 0.706 0.757 0.222 0.146 0.846 0.401 - 295.70 13.656 13.657 13.659 0.211 0.205 1.543 0.211 0.205 0.316 0.326 0.043 1.234 0.228 - 295.75 13.773 13.773 13.776 -0.013 0.310 1.660 -0.013 0.310 0.515 -0.022 -0.004 1.426 0.258 - 295.80 13.671 13.671 13.692 -0.017 0.757 1.558 -0.017 0.757 1.179 -0.026 -0.013 1.500 0.590 - 295.85 13.483 13.483 13.485 -0.056 0.212 1.371 -0.056 0.212 0.290 -0.077 -0.012 0.963 0.150 - 295.90 13.544 13.546 13.557 0.222 0.552 1.431 0.222 0.552 0.790 0.317 0.122 1.201 0.430 - 295.95 13.413 13.414 13.424 0.183 0.515 1.300 0.183 0.515 0.669 0.238 0.094 0.994 0.358 - 296.00 13.330 13.331 13.346 0.087 0.643 1.218 0.087 0.643 0.782 0.106 0.056 0.952 0.396 - 296.05 13.218 13.218 13.243 0.000 0.816 1.105 0.000 0.816 0.901 0.000 0.000 0.943 0.451 - 296.10 13.725 13.726 13.761 -0.174 0.978 1.612 -0.174 0.978 1.577 -0.280 -0.170 1.793 0.805 - 296.15 13.996 14.006 14.037 -0.534 0.920 1.883 -0.534 0.920 1.733 -1.005 -0.491 2.339 1.031 - 296.20 13.651 13.666 13.685 -0.644 0.717 1.538 -0.644 0.717 1.103 -0.990 -0.462 1.647 0.776 - 296.25 13.477 13.493 13.512 -0.669 0.703 1.364 -0.669 0.703 0.959 -0.913 -0.471 1.401 0.703 - 296.30 13.882 13.900 13.914 -0.714 0.622 1.769 -0.714 0.622 1.101 -1.263 -0.444 2.013 0.867 - 296.35 13.917 13.939 13.958 -0.776 0.728 1.804 -0.776 0.728 1.313 -1.399 -0.564 2.193 1.000 - 296.40 13.606 13.608 13.640 -0.236 0.939 1.493 -0.236 0.939 1.401 -0.353 -0.222 1.583 0.731 - 296.45 13.395 13.399 13.428 -0.315 0.886 1.282 -0.315 0.886 1.136 -0.404 -0.279 1.264 0.619 - 296.50 13.382 13.383 13.394 -0.175 0.535 1.270 -0.175 0.535 0.680 -0.223 -0.094 0.965 0.361 - 296.55 13.335 13.335 13.345 0.034 0.506 1.222 0.034 0.506 0.619 0.041 0.017 0.876 0.310 - 296.60 13.645 13.648 13.659 -0.292 0.544 1.532 -0.292 0.544 0.833 -0.448 -0.159 1.364 0.480 - 296.65 13.541 13.551 13.559 -0.522 0.460 1.428 -0.522 0.460 0.656 -0.746 -0.240 1.262 0.511 - 296.70 13.311 13.333 13.338 -0.763 0.346 1.198 -0.763 0.346 0.415 -0.914 -0.264 1.069 0.519 - 296.75 13.135 13.150 13.157 -0.634 0.431 1.022 -0.634 0.431 0.441 -0.648 -0.273 0.816 0.415 - 296.80 12.946 12.956 12.971 -0.517 0.630 0.833 -0.517 0.630 0.525 -0.431 -0.326 0.679 0.377 - 296.85 13.057 13.072 13.075 -0.625 0.289 0.944 -0.625 0.289 0.273 -0.590 -0.181 0.683 0.337 - 296.90 13.167 13.188 13.188 -0.736 -0.007 1.054 -0.736 -0.007 -0.007 -0.776 0.005 0.827 0.388 - 296.95 13.514 13.527 13.529 -0.591 -0.220 1.401 -0.591 -0.220 -0.309 -0.828 0.130 1.181 0.447 - 297.00 13.691 13.699 13.706 -0.469 -0.439 1.578 -0.469 -0.439 -0.692 -0.740 0.206 1.451 0.517 - 297.05 13.593 13.598 13.601 -0.394 -0.283 1.480 -0.394 -0.283 -0.419 -0.583 0.112 1.213 0.363 - 297.10 13.629 13.633 13.635 -0.342 -0.217 1.516 -0.342 -0.217 -0.329 -0.518 0.074 1.231 0.309 - 297.15 13.519 13.544 13.552 -0.822 -0.464 1.406 -0.822 -0.464 -0.652 -1.155 0.381 1.434 0.690 - 297.20 13.726 13.759 13.768 -0.952 -0.499 1.613 -0.952 -0.499 -0.804 -1.535 0.475 1.878 0.898 - 297.25 13.543 13.553 13.555 -0.530 -0.223 1.430 -0.530 -0.223 -0.318 -0.758 0.118 1.188 0.415 - 297.30 13.610 13.631 13.633 -0.765 -0.224 1.497 -0.765 -0.224 -0.335 -1.146 0.171 1.439 0.603 - 297.35 13.959 13.970 13.982 -0.556 -0.588 1.846 -0.556 -0.588 -1.085 -1.027 0.327 2.031 0.765 - 297.40 14.030 14.037 14.043 -0.413 -0.434 1.918 -0.413 -0.434 -0.833 -0.793 0.180 2.018 0.582 - 297.45 13.791 13.803 13.816 -0.570 -0.593 1.679 -0.570 -0.593 -0.995 -0.957 0.338 1.747 0.711 - 297.50 13.996 13.997 14.010 -0.214 -0.584 1.883 -0.214 -0.584 -1.100 -0.402 0.125 1.966 0.589 - 297.55 13.909 13.909 13.927 0.123 -0.700 1.796 0.123 -0.700 -1.257 0.221 -0.086 1.866 0.640 - 297.60 13.995 13.995 14.016 -0.039 -0.771 1.882 -0.039 -0.771 -1.451 -0.073 0.030 2.069 0.727 - 297.65 13.966 13.968 13.996 -0.258 -0.881 1.853 -0.258 -0.881 -1.632 -0.478 0.227 2.138 0.858 - 297.70 14.125 14.125 14.174 -0.097 -1.178 2.012 -0.097 -1.178 -2.370 -0.195 0.114 2.722 1.191 - 297.75 13.930 13.930 14.002 -0.001 -1.424 1.817 -0.001 -1.424 -2.586 -0.001 0.001 2.664 1.293 - 297.80 13.810 13.810 13.873 0.001 -1.320 1.697 0.001 -1.320 -2.241 0.002 -0.001 2.312 1.120 - 297.85 13.678 13.683 13.745 0.383 -1.300 1.565 0.383 -1.300 -2.034 0.599 -0.498 2.143 1.089 - 297.90 14.013 14.019 14.061 0.415 -1.083 1.900 0.415 -1.083 -2.057 0.789 -0.449 2.478 1.124 - 297.95 14.054 14.054 14.095 -0.114 -1.074 1.941 -0.114 -1.074 -2.085 -0.220 0.122 2.467 1.050 - 298.00 13.872 13.872 13.886 -0.060 -0.608 1.759 -0.060 -0.608 -1.070 -0.106 0.037 1.735 0.538 - 298.05 13.601 13.601 13.614 -0.110 -0.578 1.488 -0.110 -0.578 -0.860 -0.164 0.064 1.280 0.439 - 298.10 13.762 13.763 13.773 0.222 -0.513 1.649 0.222 -0.513 -0.846 0.367 -0.114 1.516 0.465 - 298.15 13.896 13.909 13.942 0.591 -0.959 1.784 0.591 -0.959 -1.710 1.055 -0.567 2.225 1.044 - 298.20 14.105 14.106 14.120 -0.064 -0.637 1.993 -0.064 -0.637 -1.270 -0.128 0.041 2.190 0.639 - 298.25 13.922 13.922 13.924 -0.040 -0.215 1.809 -0.040 -0.215 -0.389 -0.072 0.009 1.661 0.198 - 298.30 13.720 13.722 13.727 0.259 -0.364 1.607 0.259 -0.364 -0.584 0.417 -0.094 1.391 0.362 - 298.35 13.708 13.712 13.721 0.331 -0.511 1.595 0.331 -0.511 -0.816 0.528 -0.169 1.458 0.493 - 298.40 13.971 13.972 13.986 0.218 -0.619 1.858 0.218 -0.619 -1.149 0.404 -0.135 1.941 0.613 - 298.45 14.102 14.105 14.141 0.279 -1.004 1.990 0.279 -1.004 -1.997 0.555 -0.280 2.522 1.046 - 298.50 14.327 14.327 14.360 0.010 -0.972 2.214 0.010 -0.972 -2.151 0.022 -0.010 2.923 1.076 - 298.55 14.381 14.381 14.396 -0.017 -0.650 2.269 -0.017 -0.650 -1.476 -0.039 0.011 2.785 0.738 - 298.60 14.228 14.234 14.251 -0.400 -0.704 2.116 -0.400 -0.704 -1.488 -0.845 0.281 2.565 0.867 - 298.65 14.233 14.233 14.249 -0.115 -0.667 2.120 -0.115 -0.667 -1.414 -0.244 0.077 2.476 0.718 - 298.70 14.067 14.067 14.071 -0.007 -0.344 1.954 -0.007 -0.344 -0.672 -0.015 0.003 1.968 0.336 - 298.75 13.909 13.912 13.918 0.297 -0.403 1.796 0.297 -0.403 -0.723 0.533 -0.119 1.738 0.453 - 298.80 13.702 13.703 13.705 -0.171 -0.251 1.589 -0.171 -0.251 -0.398 -0.272 0.043 1.308 0.242 - 298.85 13.886 13.886 13.889 -0.094 -0.274 1.773 -0.094 -0.274 -0.486 -0.166 0.026 1.614 0.257 - 298.90 13.849 13.852 13.865 -0.256 -0.615 1.737 -0.256 -0.615 -1.068 -0.445 0.158 1.730 0.584 - 298.95 13.787 13.788 13.794 -0.148 -0.409 1.674 -0.148 -0.409 -0.684 -0.248 0.060 1.496 0.365 - 299.00 13.972 13.977 13.986 -0.375 -0.498 1.859 -0.375 -0.498 -0.926 -0.698 0.187 1.922 0.587 - 299.05 13.868 13.870 13.880 -0.212 -0.537 1.755 -0.212 -0.537 -0.942 -0.372 0.114 1.707 0.509 - 299.10 13.878 13.882 13.886 -0.341 -0.313 1.765 -0.341 -0.313 -0.553 -0.601 0.107 1.665 0.412 - 299.15 14.072 14.072 14.073 0.011 -0.082 1.960 0.011 -0.082 -0.161 0.022 -0.001 1.923 0.081 - 299.20 14.267 14.268 14.268 0.162 -0.122 2.154 0.162 -0.122 -0.262 0.349 -0.020 2.340 0.218 - 299.25 14.142 14.143 14.144 0.183 0.094 2.029 0.183 0.094 0.191 0.372 0.017 2.080 0.209 - 299.30 13.897 13.902 13.902 0.363 -0.004 1.784 0.363 -0.004 -0.008 0.648 -0.002 1.658 0.324 - 299.35 13.943 13.943 13.952 0.038 -0.511 1.830 0.038 -0.511 -0.935 0.069 -0.019 1.805 0.469 - 299.40 13.923 13.925 13.936 -0.200 -0.563 1.811 -0.200 -0.563 -1.020 -0.362 0.113 1.818 0.544 - 299.45 14.131 14.132 14.167 -0.190 -0.996 2.018 -0.190 -0.996 -2.009 -0.384 0.189 2.550 1.027 - 299.50 14.378 14.381 14.414 -0.277 -0.971 2.266 -0.277 -0.971 -2.199 -0.627 0.269 3.076 1.151 - 299.55 14.451 14.457 14.480 -0.390 -0.830 2.339 -0.390 -0.830 -1.941 -0.913 0.324 3.155 1.085 - 299.60 14.152 14.156 14.170 -0.334 -0.641 2.039 -0.334 -0.641 -1.308 -0.682 0.214 2.340 0.745 - 299.65 14.308 14.312 14.336 -0.330 -0.836 2.195 -0.330 -0.836 -1.835 -0.723 0.275 2.813 0.996 - 299.70 14.491 14.491 14.504 -0.041 -0.612 2.378 -0.041 -0.612 -1.455 -0.097 0.025 3.016 0.729 - 299.75 14.141 14.142 14.165 0.196 -0.808 2.028 0.196 -0.808 -1.639 0.398 -0.158 2.402 0.847 - 299.80 13.963 13.969 13.987 0.432 -0.698 1.850 0.432 -0.698 -1.291 0.798 -0.301 2.048 0.774 - 299.85 13.998 13.999 14.012 0.175 -0.619 1.885 0.175 -0.619 -1.166 0.330 -0.108 1.983 0.608 - 299.90 14.012 14.012 14.018 0.108 -0.400 1.899 0.108 -0.400 -0.759 0.204 -0.043 1.889 0.394 - 299.95 14.095 14.095 14.102 -0.018 -0.445 1.982 -0.018 -0.445 -0.881 -0.036 0.008 2.063 0.441 - 300.00 14.168 14.169 14.177 0.139 -0.487 2.055 0.139 -0.487 -1.002 0.285 -0.068 2.240 0.522 - 300.05 14.396 14.398 14.406 0.234 -0.469 2.283 0.234 -0.469 -1.070 0.535 -0.110 2.744 0.601 - 300.10 14.187 14.190 14.190 0.283 0.026 2.074 0.283 0.026 0.055 0.587 0.007 2.191 0.295 - 300.15 14.218 14.220 14.220 0.239 0.086 2.105 0.239 0.086 0.181 0.503 0.021 2.248 0.268 - 300.20 14.266 14.267 14.267 0.143 0.075 2.153 0.143 0.075 0.162 0.307 0.011 2.332 0.174 - 300.25 14.142 14.142 14.148 0.065 0.398 2.029 0.065 0.398 0.809 0.132 0.026 2.141 0.410 - 300.30 14.298 14.300 14.310 -0.245 0.551 2.185 -0.245 0.551 1.203 -0.535 -0.135 2.568 0.662 - 300.35 14.487 14.493 14.506 -0.396 0.630 2.374 -0.396 0.630 1.495 -0.940 -0.249 3.096 0.892 - 300.40 14.247 14.250 14.253 -0.301 0.268 2.134 -0.301 0.268 0.571 -0.641 -0.080 2.358 0.431 - 300.45 14.202 14.208 14.209 -0.410 0.127 2.089 -0.410 0.127 0.265 -0.856 -0.052 2.275 0.449 - 300.50 13.947 13.959 13.962 -0.590 0.273 1.834 -0.590 0.273 0.500 -1.081 -0.161 1.893 0.601 - 300.55 13.857 13.866 13.867 -0.493 0.169 1.744 -0.493 0.169 0.295 -0.859 -0.083 1.656 0.456 - 300.60 13.866 13.867 13.867 -0.145 0.060 1.753 -0.145 0.060 0.104 -0.255 -0.009 1.549 0.138 - 300.65 13.763 13.777 13.777 -0.604 -0.017 1.650 -0.604 -0.017 -0.029 -0.998 0.011 1.545 0.499 - 300.70 13.988 14.002 14.003 -0.626 0.164 1.875 -0.626 0.164 0.307 -1.174 -0.103 1.967 0.609 - 300.75 13.827 13.838 13.839 -0.572 -0.073 1.714 -0.572 -0.073 -0.125 -0.981 0.042 1.635 0.495 - 300.80 13.990 13.994 13.994 -0.338 -0.110 1.877 -0.338 -0.110 -0.206 -0.635 0.037 1.825 0.334 - 300.85 13.943 13.958 13.960 -0.648 0.235 1.830 -0.648 0.235 0.430 -1.185 -0.152 1.912 0.635 - 300.90 13.654 13.663 13.665 -0.497 0.266 1.541 -0.497 0.266 0.409 -0.766 -0.132 1.346 0.439 - 300.95 13.156 13.160 13.168 -0.322 0.474 1.043 -0.322 0.474 0.494 -0.336 -0.153 0.708 0.308 - 301.00 13.156 13.160 13.166 -0.326 0.420 1.043 -0.326 0.420 0.437 -0.340 -0.137 0.685 0.285 - 301.05 13.564 13.570 13.575 -0.419 0.372 1.451 -0.419 0.372 0.540 -0.608 -0.156 1.210 0.414 - 301.10 13.575 13.586 13.589 -0.524 0.316 1.463 -0.524 0.316 0.463 -0.767 -0.166 1.257 0.455 - 301.15 13.339 13.357 13.363 -0.682 0.423 1.226 -0.682 0.423 0.519 -0.837 -0.289 1.074 0.513 - 301.20 13.402 13.429 13.445 -0.861 0.655 1.289 -0.861 0.655 0.845 -1.110 -0.564 1.416 0.752 - 301.25 13.584 13.603 13.615 -0.715 0.565 1.471 -0.715 0.565 0.831 -1.051 -0.404 1.497 0.700 - 301.30 13.575 13.608 13.621 -0.944 0.597 1.462 -0.944 0.597 0.872 -1.381 -0.563 1.693 0.864 - 301.35 13.722 13.760 13.770 -1.018 0.536 1.609 -1.018 0.536 0.863 -1.639 -0.546 1.957 0.966 - 301.40 13.581 13.600 13.629 -0.703 0.894 1.469 -0.703 0.894 1.313 -1.032 -0.628 1.725 0.892 - 301.45 13.752 13.754 13.777 -0.242 0.800 1.639 -0.242 0.800 1.311 -0.397 -0.194 1.693 0.692 - 301.50 13.635 13.640 13.663 -0.351 0.800 1.523 -0.351 0.800 1.218 -0.535 -0.281 1.541 0.680 - 301.55 13.817 13.827 13.852 -0.519 0.826 1.705 -0.519 0.826 1.409 -0.885 -0.429 1.929 0.859 - 301.60 14.048 14.076 14.092 -0.891 0.669 1.935 -0.891 0.669 1.295 -1.723 -0.596 2.492 1.118 - 301.65 14.123 14.139 14.155 -0.663 0.676 2.011 -0.663 0.676 1.358 -1.333 -0.448 2.469 0.977 - 301.70 14.037 14.046 14.047 -0.505 0.166 1.924 -0.505 0.166 0.319 -0.972 -0.084 1.993 0.513 - 301.75 14.226 14.233 14.234 -0.449 -0.210 2.113 -0.449 -0.210 -0.445 -0.948 0.094 2.355 0.526 - 301.80 14.277 14.289 14.296 -0.582 -0.442 2.164 -0.582 -0.442 -0.956 -1.261 0.257 2.609 0.801 - 301.85 14.449 14.464 14.477 -0.649 -0.609 2.336 -0.649 -0.609 -1.423 -1.517 0.395 3.126 1.059 - 301.90 14.647 14.658 14.660 -0.550 -0.275 2.534 -0.550 -0.275 -0.696 -1.393 0.151 3.400 0.782 - 301.95 14.715 14.718 14.719 -0.309 -0.165 2.602 -0.309 -0.165 -0.429 -0.804 0.051 3.446 0.456 - 302.00 14.620 14.620 14.622 0.024 -0.212 2.507 0.024 -0.212 -0.533 0.060 -0.005 3.166 0.268 - 302.05 14.818 14.820 14.822 -0.248 -0.245 2.706 -0.248 -0.245 -0.663 -0.672 0.061 3.721 0.473 - 302.10 14.797 14.797 14.798 0.102 -0.197 2.684 0.102 -0.197 -0.528 0.273 -0.020 3.626 0.297 - 302.15 14.595 14.595 14.598 0.039 -0.281 2.482 0.039 -0.281 -0.697 0.096 -0.011 3.121 0.352 - 302.20 14.951 14.952 14.962 -0.100 -0.543 2.839 -0.100 -0.543 -1.540 -0.283 0.054 4.181 0.783 - 302.25 15.190 15.190 15.206 0.032 -0.695 3.078 0.032 -0.695 -2.140 0.098 -0.022 4.978 1.071 - 302.30 15.056 15.056 15.088 0.007 -0.991 2.943 0.007 -0.991 -2.916 0.020 -0.007 4.821 1.458 - 302.35 14.816 14.816 14.837 -0.117 -0.779 2.703 -0.117 -0.779 -2.106 -0.315 0.091 3.963 1.066 - 302.40 14.683 14.687 14.702 -0.323 -0.674 2.570 -0.323 -0.674 -1.733 -0.831 0.218 3.583 0.967 - 302.45 14.892 14.898 14.918 -0.411 -0.784 2.779 -0.411 -0.784 -2.179 -1.143 0.323 4.254 1.241 - 302.50 15.129 15.136 15.152 -0.478 -0.683 3.016 -0.478 -0.683 -2.060 -1.442 0.327 4.896 1.268 - 302.55 15.545 15.545 15.557 -0.164 -0.603 3.432 -0.164 -0.603 -2.069 -0.564 0.099 6.084 1.073 - 302.60 15.213 15.213 15.221 -0.090 -0.485 3.100 -0.090 -0.485 -1.503 -0.278 0.043 4.927 0.765 - 302.65 15.646 15.646 15.651 -0.094 -0.369 3.533 -0.094 -0.369 -1.303 -0.331 0.035 6.314 0.672 - 302.70 15.526 15.526 15.530 -0.045 -0.324 3.414 -0.045 -0.324 -1.105 -0.152 0.014 5.880 0.558 - 302.75 15.250 15.251 15.258 -0.160 -0.475 3.137 -0.160 -0.475 -1.491 -0.501 0.076 5.047 0.788 - 302.80 15.309 15.314 15.324 -0.397 -0.548 3.196 -0.397 -0.548 -1.753 -1.269 0.218 5.338 1.087 - 302.85 14.944 14.957 14.960 -0.629 -0.298 2.831 -0.629 -0.298 -0.845 -1.780 0.188 4.249 0.989 - 302.90 15.206 15.227 15.228 -0.806 -0.166 3.093 -0.806 -0.166 -0.513 -2.494 0.134 5.122 1.275 - 302.95 15.044 15.063 15.063 -0.753 -0.132 2.931 -0.753 -0.132 -0.386 -2.207 0.099 4.588 1.121 - 303.00 14.643 14.674 14.675 -0.951 -0.151 2.530 -0.951 -0.151 -0.381 -2.407 0.143 3.665 1.221 - 303.05 14.349 14.380 14.380 -0.945 0.008 2.236 -0.945 0.008 0.018 -2.112 -0.007 2.946 1.056 - 303.10 14.460 14.471 14.472 -0.561 -0.176 2.347 -0.561 -0.176 -0.412 -1.316 0.099 2.927 0.692 - 303.15 14.687 14.688 14.697 -0.171 -0.522 2.574 -0.171 -0.522 -1.343 -0.440 0.089 3.463 0.708 - 303.20 14.399 14.402 14.409 -0.294 -0.442 2.286 -0.294 -0.442 -1.010 -0.672 0.130 2.754 0.610 - 303.25 14.328 14.334 14.375 -0.418 -1.082 2.215 -0.418 -1.082 -2.397 -0.925 0.452 3.126 1.304 - 303.30 14.209 14.211 14.258 -0.280 -1.149 2.096 -0.280 -1.149 -2.408 -0.587 0.322 2.896 1.250 - 303.35 14.560 14.565 14.621 -0.407 -1.270 2.447 -0.407 -1.270 -3.108 -0.996 0.517 3.883 1.652 - 303.40 14.524 14.529 14.573 -0.391 -1.127 2.411 -0.391 -1.127 -2.716 -0.944 0.441 3.617 1.454 - 303.45 14.513 14.515 14.571 -0.281 -1.277 2.400 -0.281 -1.277 -3.065 -0.674 0.359 3.735 1.579 - 303.50 14.504 14.504 14.539 0.030 -1.018 2.391 0.030 -1.018 -2.433 0.071 -0.030 3.377 1.217 - 303.55 14.736 14.737 14.773 0.109 -1.042 2.623 0.109 -1.042 -2.734 0.286 -0.113 3.990 1.376 - 303.60 14.527 14.532 14.561 0.361 -0.919 2.415 0.361 -0.919 -2.218 0.871 -0.331 3.402 1.203 - 303.65 14.450 14.451 14.471 0.127 -0.770 2.337 0.127 -0.770 -1.799 0.297 -0.098 3.036 0.913 - 303.70 14.302 14.302 14.305 -0.138 -0.291 2.189 -0.138 -0.291 -0.636 -0.302 0.040 2.447 0.353 - 303.75 14.334 14.334 14.339 -0.096 -0.381 2.221 -0.096 -0.381 -0.846 -0.213 0.037 2.543 0.437 - 303.80 14.367 14.371 14.381 0.350 -0.529 2.254 0.350 -0.529 -1.192 0.790 -0.185 2.741 0.721 - 303.85 14.103 14.104 14.104 0.188 -0.029 1.990 0.188 -0.029 -0.058 0.373 -0.006 1.998 0.189 - 303.90 14.234 14.236 14.236 0.205 -0.114 2.121 0.205 -0.114 -0.242 0.435 -0.023 2.277 0.249 - 303.95 14.415 14.419 14.419 0.309 0.053 2.303 0.309 0.053 0.122 0.712 0.016 2.700 0.361 - 304.00 14.350 14.351 14.351 0.137 0.022 2.238 0.137 0.022 0.050 0.307 0.003 2.513 0.155 - 304.05 14.180 14.187 14.189 -0.452 0.238 2.067 -0.452 0.238 0.491 -0.934 -0.107 2.267 0.531 - 304.10 14.301 14.304 14.304 -0.320 0.013 2.188 -0.320 0.013 0.029 -0.700 -0.004 2.445 0.350 - 304.15 14.214 14.216 14.219 -0.264 0.247 2.101 -0.264 0.247 0.518 -0.554 -0.065 2.273 0.381 - 304.20 14.162 14.172 14.172 -0.522 0.031 2.049 -0.522 0.031 0.063 -1.069 -0.016 2.237 0.535 - 304.25 14.151 14.177 14.182 -0.851 -0.367 2.039 -0.851 -0.367 -0.748 -1.735 0.312 2.508 0.957 - 304.30 14.178 14.201 14.208 -0.816 -0.455 2.065 -0.816 -0.455 -0.939 -1.685 0.371 2.568 0.982 - 304.35 13.852 13.863 13.886 -0.548 -0.791 1.739 -0.548 -0.791 -1.375 -0.954 0.433 1.976 0.864 - 304.40 13.756 13.758 13.769 -0.256 -0.530 1.643 -0.256 -0.530 -0.872 -0.420 0.136 1.523 0.488 - 304.45 13.856 13.860 13.865 -0.342 -0.370 1.743 -0.342 -0.370 -0.644 -0.597 0.127 1.647 0.444 - 304.50 13.731 13.751 13.761 -0.737 -0.529 1.619 -0.737 -0.529 -0.856 -1.193 0.389 1.721 0.759 - 304.55 13.675 13.678 13.703 -0.271 -0.827 1.562 -0.271 -0.827 -1.292 -0.424 0.224 1.599 0.689 - 304.60 13.515 13.517 13.538 -0.253 -0.759 1.402 -0.253 -0.759 -1.064 -0.355 0.192 1.303 0.569 - 304.65 13.428 13.428 13.432 -0.058 -0.316 1.315 -0.058 -0.316 -0.416 -0.077 0.018 0.917 0.212 - 304.70 13.169 13.173 13.174 -0.353 0.095 1.056 -0.353 0.095 0.101 -0.373 -0.034 0.624 0.194 - 304.75 13.195 13.199 13.199 -0.332 0.026 1.082 -0.332 0.026 0.028 -0.360 -0.008 0.641 0.180 - 304.80 13.355 13.355 13.356 -0.038 0.158 1.242 -0.038 0.158 0.196 -0.047 -0.006 0.785 0.101 - 304.85 13.500 13.500 13.500 0.107 0.005 1.387 0.107 0.005 0.007 0.148 0.001 0.968 0.074 - 304.90 13.493 13.493 13.494 -0.096 0.126 1.380 -0.096 0.126 0.174 -0.132 -0.012 0.965 0.109 - 304.95 13.705 13.706 13.706 -0.218 -0.011 1.592 -0.218 -0.011 -0.017 -0.347 0.002 1.291 0.174 - 305.00 13.798 13.798 13.798 0.073 -0.019 1.685 0.073 -0.019 -0.032 0.124 -0.001 1.423 0.064 - 305.05 13.887 13.888 13.889 0.172 -0.156 1.774 0.172 -0.156 -0.277 0.304 -0.027 1.600 0.206 - 305.10 13.933 13.938 13.941 0.359 -0.269 1.821 0.359 -0.269 -0.490 0.654 -0.097 1.758 0.412 - 305.15 13.648 13.650 13.654 0.222 -0.330 1.535 0.222 -0.330 -0.507 0.341 -0.073 1.257 0.307 - 305.20 13.725 13.728 13.737 0.302 -0.492 1.612 0.302 -0.492 -0.794 0.487 -0.149 1.466 0.471 - 305.25 14.049 14.049 14.051 -0.022 -0.258 1.936 -0.022 -0.258 -0.499 -0.042 0.006 1.907 0.250 - 305.30 14.006 14.007 14.007 -0.126 0.065 1.893 -0.126 0.065 0.124 -0.239 -0.008 1.802 0.135 - 305.35 14.078 14.078 14.082 -0.161 0.336 1.965 -0.161 0.336 0.661 -0.316 -0.054 2.000 0.367 - 305.40 13.575 13.575 13.576 -0.110 0.168 1.462 -0.110 0.168 0.246 -0.161 -0.018 1.088 0.147 - 305.45 13.494 13.505 13.506 -0.535 0.151 1.382 -0.535 0.151 0.208 -0.739 -0.081 1.109 0.386 - 305.50 13.545 13.554 13.555 -0.496 0.173 1.432 -0.496 0.173 0.248 -0.711 -0.086 1.164 0.379 - 305.55 13.611 13.617 13.624 -0.424 0.414 1.498 -0.424 0.414 0.621 -0.635 -0.176 1.298 0.453 - 305.60 13.626 13.631 13.646 -0.370 0.639 1.513 -0.370 0.639 0.966 -0.560 -0.236 1.417 0.571 - 305.65 13.678 13.686 13.703 -0.481 0.683 1.565 -0.481 0.683 1.069 -0.752 -0.328 1.574 0.674 - 305.70 13.550 13.551 13.572 -0.143 0.744 1.438 -0.143 0.744 1.070 -0.205 -0.106 1.320 0.547 - 305.75 13.484 13.498 13.520 -0.611 0.762 1.372 -0.611 0.762 1.045 -0.838 -0.466 1.417 0.709 - 305.80 13.179 13.205 13.224 -0.830 0.710 1.066 -0.830 0.710 0.757 -0.884 -0.589 1.164 0.652 - 305.85 12.562 12.570 12.603 -0.471 0.905 0.449 -0.471 0.905 0.406 -0.211 -0.426 0.621 0.313 - 305.90 12.605 12.618 12.631 -0.566 0.570 0.493 -0.566 0.570 0.281 -0.279 -0.323 0.444 0.255 - 305.95 12.765 12.783 12.788 -0.673 0.366 0.652 -0.673 0.366 0.239 -0.439 -0.247 0.507 0.279 - 306.00 12.872 12.907 12.907 -0.961 0.005 0.759 -0.961 0.005 0.003 -0.730 -0.004 0.750 0.365 - 306.05 13.012 13.043 13.046 -0.908 -0.241 0.899 -0.908 -0.241 -0.217 -0.817 0.219 0.846 0.436 - 306.10 12.873 12.904 12.904 -0.903 -0.039 0.760 -0.903 -0.039 -0.030 -0.686 0.036 0.697 0.344 - 306.15 12.736 12.775 12.777 -0.993 -0.259 0.623 -0.993 -0.259 -0.162 -0.619 0.258 0.721 0.345 - 306.20 12.827 12.842 12.847 -0.620 -0.343 0.714 -0.620 -0.343 -0.245 -0.443 0.213 0.506 0.275 - 306.25 12.944 12.956 12.957 -0.542 0.151 0.832 -0.542 0.151 0.126 -0.451 -0.082 0.504 0.238 - 306.30 12.868 12.874 12.875 -0.391 0.198 0.755 -0.391 0.198 0.149 -0.295 -0.077 0.381 0.170 - 306.35 13.244 13.251 13.251 -0.428 -0.111 1.131 -0.428 -0.111 -0.126 -0.484 0.048 0.738 0.251 - 306.40 13.465 13.468 13.468 -0.296 -0.059 1.352 -0.296 -0.059 -0.079 -0.401 0.017 0.960 0.204 - 306.45 13.103 13.108 13.108 -0.339 0.010 0.991 -0.339 0.010 0.010 -0.336 -0.003 0.548 0.168 - 306.50 13.019 13.023 13.023 -0.319 -0.048 0.906 -0.319 -0.048 -0.043 -0.289 0.015 0.463 0.146 - 306.55 13.045 13.046 13.046 -0.183 0.101 0.932 -0.183 0.101 0.094 -0.170 -0.018 0.456 0.098 - 306.60 13.351 13.351 13.359 -0.098 0.451 1.238 -0.098 0.451 0.559 -0.122 -0.044 0.873 0.287 - 306.65 13.338 13.338 13.339 0.048 0.107 1.225 0.048 0.107 0.131 0.058 0.005 0.758 0.072 - 306.70 13.187 13.187 13.187 0.016 -0.022 1.074 0.016 -0.022 -0.023 0.017 -0.000 0.577 0.014 - 306.75 13.865 13.866 13.869 -0.178 0.269 1.752 -0.178 0.269 0.471 -0.311 -0.048 1.587 0.283 - 306.80 13.924 13.926 13.928 -0.212 0.253 1.812 -0.212 0.253 0.458 -0.383 -0.053 1.695 0.300 - 306.85 13.750 13.751 13.762 -0.126 0.559 1.638 -0.126 0.559 0.915 -0.206 -0.070 1.505 0.470 - 306.90 13.745 13.747 13.750 0.210 0.275 1.632 0.210 0.275 0.449 0.343 0.058 1.392 0.284 - 306.95 13.811 13.811 13.814 0.077 0.280 1.698 0.077 0.280 0.476 0.131 0.022 1.485 0.247 - 307.00 13.908 13.908 13.908 0.049 0.027 1.795 0.049 0.027 0.049 0.087 0.001 1.613 0.050 - 307.05 13.857 13.863 13.863 -0.382 -0.124 1.745 -0.382 -0.124 -0.216 -0.667 0.047 1.603 0.351 - 307.10 13.566 13.566 13.567 -0.125 0.123 1.453 -0.125 0.123 0.179 -0.182 -0.015 1.071 0.128 - 307.15 13.645 13.645 13.648 0.088 0.283 1.532 0.088 0.283 0.434 0.135 0.025 1.218 0.228 - 307.20 14.125 14.126 14.135 -0.139 0.489 2.013 -0.139 0.489 0.985 -0.279 -0.068 2.155 0.513 - 307.25 13.948 13.949 13.968 -0.154 0.724 1.836 -0.154 0.724 1.328 -0.283 -0.111 1.958 0.681 - 307.30 13.990 13.991 14.013 0.098 0.790 1.877 0.098 0.790 1.483 0.185 0.078 2.079 0.748 - 307.35 13.835 13.843 13.859 0.467 0.663 1.723 0.467 0.663 1.143 0.804 0.310 1.813 0.716 - 307.40 14.095 14.107 14.119 0.579 0.573 1.982 0.579 0.573 1.136 1.147 0.331 2.296 0.824 - 307.45 14.225 14.229 14.234 0.332 0.386 2.112 0.332 0.386 0.815 0.700 0.128 2.360 0.541 - 307.50 13.959 13.964 13.970 0.351 0.423 1.846 0.351 0.423 0.781 0.649 0.149 1.856 0.513 - 307.55 13.726 13.738 13.738 0.561 0.132 1.613 0.561 0.132 0.213 0.905 0.074 1.467 0.466 - 307.60 13.690 13.697 13.697 0.421 0.078 1.577 0.421 0.078 0.123 0.665 0.033 1.336 0.338 - 307.65 13.450 13.456 13.457 0.409 0.121 1.337 0.409 0.121 0.162 0.547 0.049 0.985 0.286 - 307.70 13.654 13.658 13.660 0.326 -0.248 1.541 0.326 -0.248 -0.383 0.503 -0.081 1.272 0.319 - 307.75 13.875 13.883 13.890 0.466 -0.425 1.762 0.466 -0.425 -0.749 0.821 -0.198 1.752 0.565 - 307.80 14.146 14.157 14.159 0.571 -0.179 2.033 0.571 -0.179 -0.364 1.161 -0.102 2.246 0.610 - 307.85 14.053 14.071 14.073 0.713 -0.275 1.940 0.713 -0.275 -0.534 1.383 -0.196 2.173 0.748 - 307.90 13.945 13.964 13.964 0.734 0.082 1.832 0.734 0.082 0.150 1.345 0.060 1.950 0.677 - 307.95 13.928 13.942 13.942 0.614 0.096 1.815 0.614 0.096 0.174 1.114 0.059 1.841 0.565 - 308.00 13.863 13.878 13.880 0.649 0.199 1.750 0.649 0.199 0.348 1.136 0.129 1.762 0.598 - 308.05 13.931 13.931 13.936 0.046 0.377 1.818 0.046 0.377 0.686 0.083 0.017 1.725 0.345 - 308.10 13.758 13.762 13.766 -0.317 0.333 1.646 -0.317 0.333 0.549 -0.521 -0.106 1.460 0.382 - 308.15 13.683 13.683 13.685 -0.084 0.242 1.570 -0.084 0.242 0.380 -0.132 -0.020 1.265 0.201 - 308.20 13.565 13.567 13.568 -0.189 0.193 1.453 -0.189 0.193 0.281 -0.275 -0.037 1.092 0.197 - 308.25 13.759 13.764 13.774 -0.352 0.534 1.646 -0.352 0.534 0.879 -0.580 -0.188 1.560 0.535 - 308.30 13.724 13.733 13.735 -0.482 0.265 1.612 -0.482 0.265 0.427 -0.776 -0.127 1.450 0.447 - 308.35 13.901 13.916 13.917 -0.652 0.203 1.788 -0.652 0.203 0.363 -1.166 -0.132 1.831 0.614 - 308.40 14.092 14.097 14.097 -0.382 0.051 1.979 -0.382 0.051 0.101 -0.755 -0.019 2.032 0.381 - 308.45 14.248 14.261 14.261 -0.605 0.038 2.135 -0.605 0.038 0.082 -1.292 -0.023 2.463 0.647 - 308.50 14.521 14.534 14.535 -0.606 -0.197 2.408 -0.606 -0.197 -0.474 -1.460 0.119 3.103 0.770 - 308.55 14.375 14.377 14.377 -0.194 -0.146 2.263 -0.194 -0.146 -0.331 -0.440 0.028 2.589 0.276 - 308.60 13.986 13.995 13.995 -0.497 -0.018 1.873 -0.497 -0.018 -0.034 -0.930 0.009 1.878 0.466 - 308.65 14.116 14.123 14.123 -0.453 0.055 2.003 -0.453 0.055 0.109 -0.908 -0.025 2.110 0.458 - 308.70 14.005 14.016 14.017 -0.564 -0.104 1.892 -0.564 -0.104 -0.196 -1.066 0.058 1.954 0.543 - 308.75 14.079 14.091 14.095 -0.564 -0.346 1.967 -0.564 -0.346 -0.680 -1.110 0.195 2.153 0.658 - 308.80 14.056 14.090 14.091 -0.978 -0.176 1.943 -0.978 -0.176 -0.342 -1.901 0.172 2.382 0.970 - 308.85 13.915 13.983 13.984 -1.378 0.149 1.802 -1.378 0.149 0.268 -2.483 -0.205 2.584 1.253 - 308.90 13.868 13.904 13.907 -0.993 0.317 1.755 -0.993 0.317 0.556 -1.743 -0.314 2.084 0.928 - 308.95 14.162 14.171 14.171 -0.502 0.084 2.049 -0.502 0.084 0.171 -1.028 -0.042 2.228 0.522 - 309.00 13.823 13.833 13.835 -0.518 0.256 1.710 -0.518 0.256 0.437 -0.885 -0.132 1.629 0.498 - 309.05 13.880 13.886 13.887 -0.409 0.186 1.767 -0.409 0.186 0.329 -0.723 -0.076 1.662 0.399 - 309.10 14.024 14.025 14.026 -0.219 0.135 1.911 -0.219 0.135 0.257 -0.418 -0.029 1.859 0.246 - 309.15 14.210 14.210 14.215 -0.084 0.349 2.097 -0.084 0.349 0.731 -0.176 -0.029 2.263 0.376 - 309.20 14.342 14.343 14.350 0.142 0.456 2.229 0.142 0.456 1.016 0.318 0.065 2.599 0.533 - 309.25 14.180 14.181 14.190 -0.194 0.511 2.067 -0.194 0.511 1.057 -0.400 -0.099 2.285 0.567 - 309.30 14.139 14.139 14.148 0.035 0.529 2.026 0.035 0.529 1.071 0.071 0.019 2.192 0.537 - 309.35 13.716 13.719 13.724 0.292 0.395 1.603 0.292 0.395 0.633 0.467 0.115 1.405 0.398 - 309.40 13.582 13.582 13.583 0.147 0.071 1.469 0.147 0.071 0.104 0.216 0.010 1.092 0.120 - 309.45 13.426 13.433 13.437 0.445 0.314 1.313 0.445 0.314 0.412 0.584 0.139 1.010 0.364 - 309.50 13.336 13.348 13.349 0.554 0.157 1.223 0.554 0.157 0.192 0.678 0.087 0.914 0.355 - 309.55 13.713 13.725 13.730 0.572 -0.369 1.600 0.572 -0.369 -0.590 0.915 -0.211 1.512 0.554 - 309.60 13.680 13.691 13.706 0.533 -0.657 1.568 0.533 -0.657 -1.029 0.835 -0.350 1.586 0.686 - 309.65 13.556 13.562 13.586 0.405 -0.801 1.443 0.405 -0.801 -1.156 0.585 -0.325 1.444 0.668 - 309.70 13.496 13.499 13.514 0.290 -0.627 1.383 0.290 -0.627 -0.867 0.402 -0.182 1.195 0.486 - 309.75 13.469 13.470 13.484 0.130 -0.624 1.356 0.130 -0.624 -0.846 0.177 -0.081 1.123 0.434 - 309.80 13.676 13.679 13.686 -0.284 -0.437 1.563 -0.284 -0.437 -0.684 -0.444 0.124 1.358 0.412 - 309.85 13.925 13.926 13.936 -0.133 -0.513 1.813 -0.133 -0.513 -0.931 -0.242 0.068 1.783 0.482 - 309.90 13.859 13.859 13.876 -0.079 -0.691 1.746 -0.079 -0.691 -1.206 -0.138 0.055 1.766 0.607 - 309.95 13.768 13.770 13.798 0.251 -0.873 1.655 0.251 -0.873 -1.445 0.415 -0.219 1.782 0.760 - 310.00 13.668 13.670 13.723 0.252 -1.199 1.555 0.252 -1.199 -1.864 0.391 -0.302 1.959 0.964 - 310.05 13.429 13.429 13.460 0.086 -0.919 1.316 0.086 -0.919 -1.210 0.114 -0.079 1.292 0.609 - 310.10 13.245 13.248 13.282 0.285 -0.951 1.132 0.285 -0.951 -1.076 0.323 -0.271 1.134 0.578 - 310.15 13.097 13.097 13.140 0.067 -1.065 0.984 0.067 -1.065 -1.048 0.066 -0.071 1.054 0.526 - 310.20 13.351 13.352 13.414 0.126 -1.289 1.238 0.126 -1.289 -1.596 0.156 -0.163 1.605 0.806 - 310.25 13.479 13.479 13.537 0.092 -1.253 1.366 0.092 -1.253 -1.712 0.125 -0.115 1.722 0.860 - 310.30 13.720 13.727 13.771 0.442 -1.098 1.607 0.442 -1.098 -1.764 0.710 -0.485 1.991 0.981 - 310.35 13.325 13.351 13.407 0.825 -1.232 1.212 0.825 -1.232 -1.494 1.000 -1.016 1.834 1.032 - 310.40 13.158 13.204 13.291 1.103 -1.513 1.045 1.103 -1.513 -1.582 1.153 -1.670 2.300 1.286 - 310.45 12.949 13.015 13.071 1.307 -1.210 0.836 1.307 -1.210 -1.011 1.093 -1.582 1.936 1.086 - 310.50 12.935 12.984 13.037 1.135 -1.170 0.822 1.135 -1.170 -0.961 0.933 -1.327 1.666 0.943 - 310.55 13.417 13.454 13.497 1.002 -1.079 1.304 1.002 -1.079 -1.407 1.307 -1.081 1.934 1.102 - 310.60 13.302 13.339 13.401 0.999 -1.285 1.189 0.999 -1.285 -1.529 1.188 -1.284 2.032 1.161 - 310.65 13.449 13.474 13.563 0.812 -1.551 1.336 0.812 -1.551 -2.073 1.085 -1.259 2.425 1.328 - 310.70 13.210 13.223 13.285 0.606 -1.279 1.097 0.606 -1.279 -1.403 0.664 -0.775 1.603 0.867 - 310.75 13.118 13.147 13.217 0.872 -1.364 1.005 0.872 -1.364 -1.370 0.877 -1.190 1.815 1.008 - 310.80 13.582 13.615 13.662 0.953 -1.131 1.469 0.953 -1.131 -1.662 1.399 -1.078 2.173 1.213 - 310.85 13.376 13.415 13.436 1.021 -0.751 1.263 1.021 -0.751 -0.949 1.290 -0.767 1.602 0.888 - 310.90 13.182 13.251 13.279 1.352 -0.860 1.069 1.352 -0.860 -0.920 1.446 -1.163 1.856 1.036 - 310.95 12.947 13.018 13.034 1.359 -0.654 0.834 1.359 -0.654 -0.546 1.133 -0.889 1.485 0.770 - 311.00 12.943 13.037 13.048 1.557 -0.536 0.831 1.557 -0.536 -0.445 1.293 -0.835 1.701 0.801 - 311.05 13.194 13.286 13.291 1.562 -0.364 1.082 1.562 -0.364 -0.393 1.689 -0.568 1.871 0.913 - 311.10 13.266 13.334 13.337 1.342 -0.294 1.154 1.342 -0.294 -0.339 1.549 -0.395 1.610 0.817 - 311.15 13.374 13.437 13.440 1.303 -0.274 1.261 1.303 -0.274 -0.345 1.643 -0.357 1.682 0.858 - 311.20 13.449 13.511 13.516 1.296 -0.341 1.336 1.296 -0.341 -0.456 1.732 -0.443 1.791 0.923 - 311.25 13.137 13.174 13.176 0.977 -0.227 1.025 0.977 -0.227 -0.233 1.001 -0.222 1.028 0.526 - 311.30 12.939 12.977 12.978 0.997 -0.103 0.826 0.997 -0.103 -0.085 0.824 -0.102 0.844 0.417 - 311.35 12.738 12.752 12.763 0.591 -0.523 0.626 0.591 -0.523 -0.327 0.370 -0.309 0.507 0.291 - 311.40 12.768 12.777 12.788 0.482 -0.541 0.655 0.482 -0.541 -0.354 0.316 -0.261 0.477 0.271 - 311.45 12.716 12.737 12.751 0.737 -0.592 0.603 0.737 -0.592 -0.357 0.445 -0.437 0.629 0.359 - 311.50 12.965 12.982 13.016 0.664 -0.945 0.852 0.664 -0.945 -0.805 0.566 -0.628 1.030 0.584 - 311.55 12.632 12.643 12.670 0.518 -0.833 0.519 0.518 -0.833 -0.433 0.269 -0.431 0.616 0.334 - 311.60 12.585 12.610 12.631 0.787 -0.719 0.473 0.787 -0.719 -0.340 0.372 -0.566 0.680 0.379 - 311.65 12.826 12.855 12.904 0.871 -1.114 0.713 0.871 -1.114 -0.794 0.621 -0.971 1.255 0.700 - 311.70 12.613 12.630 12.683 0.649 -1.161 0.500 0.649 -1.161 -0.580 0.325 -0.754 1.009 0.503 - 311.75 12.762 12.788 12.846 0.816 -1.214 0.649 0.816 -1.214 -0.789 0.530 -0.991 1.281 0.687 - 311.80 12.845 12.877 12.929 0.899 -1.158 0.732 0.899 -1.158 -0.848 0.659 -1.042 1.343 0.748 - 311.85 13.053 13.081 13.127 0.855 -1.105 0.940 0.855 -1.105 -1.039 0.803 -0.944 1.417 0.809 - 311.90 13.046 13.062 13.105 0.650 -1.064 0.933 0.650 -1.064 -0.993 0.606 -0.691 1.212 0.676 - 311.95 12.835 12.836 12.878 0.185 -1.030 0.722 0.185 -1.030 -0.744 0.133 -0.190 0.809 0.390 - 312.00 12.705 12.705 12.780 0.022 -1.382 0.592 0.022 -1.382 -0.818 0.013 -0.031 1.130 0.409 - 312.05 12.627 12.628 12.722 -0.140 -1.541 0.515 -0.140 -1.541 -0.793 -0.072 0.216 1.330 0.412 - 312.10 12.912 12.913 12.967 -0.172 -1.176 0.799 -0.172 -1.176 -0.940 -0.137 0.202 1.026 0.486 - 312.15 12.861 12.870 12.926 -0.481 -1.208 0.748 -0.481 -1.208 -0.903 -0.360 0.581 1.124 0.566 - 312.20 13.081 13.083 13.138 -0.262 -1.201 0.968 -0.262 -1.201 -1.162 -0.253 0.314 1.223 0.615 - 312.25 13.124 13.138 13.177 -0.596 -1.020 1.011 -0.596 -1.020 -1.032 -0.603 0.608 1.209 0.670 - 312.30 12.820 12.840 12.876 -0.726 -0.962 0.707 -0.726 -0.962 -0.680 -0.513 0.699 0.976 0.551 - 312.35 12.929 12.949 12.972 -0.721 -0.774 0.816 -0.721 -0.774 -0.632 -0.588 0.558 0.892 0.514 - 312.40 13.085 13.107 13.121 -0.748 -0.615 0.973 -0.748 -0.615 -0.598 -0.728 0.460 0.942 0.524 - 312.45 13.123 13.157 13.171 -0.945 -0.617 1.010 -0.945 -0.617 -0.624 -0.954 0.583 1.147 0.640 - 312.50 12.979 13.000 13.016 -0.740 -0.642 0.867 -0.740 -0.642 -0.556 -0.641 0.475 0.855 0.486 - 312.55 13.021 13.034 13.045 -0.595 -0.526 0.908 -0.595 -0.526 -0.478 -0.540 0.313 0.728 0.393 - 312.60 13.085 13.096 13.099 -0.519 -0.284 0.973 -0.519 -0.284 -0.276 -0.505 0.148 0.648 0.297 - 312.65 13.202 13.226 13.228 -0.811 -0.178 1.089 -0.811 -0.178 -0.194 -0.883 0.144 0.937 0.458 - 312.70 13.066 13.080 13.081 -0.611 -0.087 0.953 -0.611 -0.087 -0.083 -0.583 0.053 0.645 0.296 - 312.75 13.071 13.092 13.094 -0.746 -0.232 0.958 -0.746 -0.232 -0.223 -0.715 0.173 0.764 0.384 - 312.80 13.080 13.112 13.118 -0.912 -0.377 0.968 -0.912 -0.377 -0.364 -0.883 0.344 0.955 0.507 - 312.85 12.738 12.766 12.772 -0.842 -0.388 0.625 -0.842 -0.388 -0.243 -0.526 0.327 0.625 0.333 - 312.90 12.374 12.413 12.414 -0.983 -0.138 0.261 -0.983 -0.138 -0.036 -0.257 0.135 0.527 0.146 - 312.95 12.510 12.553 12.556 -1.046 -0.273 0.397 -1.046 -0.273 -0.108 -0.415 0.285 0.663 0.258 - 313.00 12.710 12.717 12.728 -0.439 -0.511 0.597 -0.439 -0.511 -0.305 -0.262 0.224 0.405 0.230 - 313.05 12.777 12.787 12.790 -0.488 -0.295 0.664 -0.488 -0.295 -0.196 -0.324 0.144 0.383 0.203 - 313.10 12.479 12.495 12.496 -0.626 -0.170 0.366 -0.626 -0.170 -0.062 -0.229 0.106 0.278 0.130 - 313.15 12.544 12.557 12.557 -0.554 -0.010 0.431 -0.554 -0.010 -0.004 -0.239 0.005 0.247 0.120 - 313.20 12.603 12.607 12.614 -0.336 -0.411 0.490 -0.336 -0.411 -0.201 -0.165 0.138 0.261 0.147 - 313.25 12.478 12.478 12.491 -0.059 -0.564 0.365 -0.059 -0.564 -0.206 -0.021 0.033 0.228 0.105 - 313.30 12.450 12.450 12.451 -0.069 -0.161 0.337 -0.069 -0.161 -0.054 -0.023 0.011 0.072 0.030 - 313.35 12.240 12.242 12.242 0.203 -0.050 0.127 0.203 -0.050 -0.006 0.026 -0.010 0.030 0.014 - 313.40 12.334 12.338 12.339 0.309 0.167 0.221 0.309 0.167 0.037 0.068 0.052 0.086 0.047 - 313.45 12.539 12.539 12.542 0.062 0.297 0.426 0.062 0.297 0.127 0.026 0.018 0.137 0.065 - 313.50 12.799 12.802 12.812 -0.233 0.525 0.687 -0.233 0.525 0.361 -0.160 -0.123 0.401 0.207 - 313.55 12.744 12.752 12.754 -0.437 0.215 0.632 -0.437 0.215 0.136 -0.276 -0.094 0.318 0.161 - 313.60 12.555 12.559 12.560 -0.335 0.150 0.442 -0.335 0.150 0.066 -0.148 -0.050 0.165 0.085 - 313.65 12.675 12.676 12.688 -0.094 0.560 0.563 -0.094 0.560 0.315 -0.053 -0.053 0.319 0.162 - 313.70 12.955 12.956 12.965 -0.136 0.489 0.843 -0.136 0.489 0.412 -0.114 -0.066 0.484 0.216 - 313.75 13.371 13.373 13.375 0.201 0.248 1.258 0.201 0.248 0.312 0.253 0.050 0.843 0.202 - 313.80 13.579 13.580 13.580 -0.199 -0.033 1.466 -0.199 -0.033 -0.048 -0.292 0.007 1.095 0.148 - 313.85 13.856 13.861 13.872 -0.357 -0.562 1.743 -0.357 -0.562 -0.979 -0.623 0.201 1.741 0.589 - 313.90 13.544 13.547 13.553 -0.286 -0.416 1.431 -0.286 -0.416 -0.596 -0.409 0.119 1.152 0.366 - 313.95 13.393 13.400 13.412 -0.417 -0.585 1.280 -0.417 -0.585 -0.749 -0.534 0.244 1.078 0.476 - 314.00 13.425 13.434 13.438 -0.473 -0.353 1.312 -0.473 -0.353 -0.463 -0.621 0.167 1.036 0.396 - 314.05 13.616 13.618 13.619 -0.228 -0.181 1.503 -0.228 -0.181 -0.272 -0.343 0.041 1.172 0.220 - 314.10 13.592 13.612 13.612 -0.741 0.035 1.479 -0.741 0.035 0.051 -1.096 -0.026 1.370 0.549 - 314.15 13.634 13.664 13.664 -0.908 -0.023 1.521 -0.908 -0.023 -0.034 -1.381 0.021 1.569 0.691 - 314.20 13.924 13.950 13.952 -0.853 -0.232 1.811 -0.853 -0.232 -0.420 -1.546 0.198 2.031 0.807 - 314.25 13.874 13.918 13.920 -1.100 -0.277 1.761 -1.100 -0.277 -0.487 -1.937 0.304 2.194 1.010 - 314.30 14.201 14.247 14.250 -1.141 -0.283 2.088 -1.141 -0.283 -0.592 -2.383 0.323 2.872 1.238 - 314.35 14.252 14.314 14.321 -1.327 -0.462 2.140 -1.327 -0.462 -0.988 -2.839 0.613 3.276 1.534 - 314.40 14.089 14.157 14.157 -1.387 -0.134 1.976 -1.387 -0.134 -0.265 -2.741 0.186 2.923 1.380 - 314.45 14.261 14.366 14.368 -1.738 -0.240 2.148 -1.738 -0.240 -0.515 -3.734 0.416 3.847 1.896 - 314.50 14.644 14.713 14.717 -1.425 -0.358 2.531 -1.425 -0.358 -0.906 -3.607 0.510 4.283 1.877 - 314.55 14.382 14.463 14.463 -1.531 -0.084 2.269 -1.531 -0.084 -0.190 -3.474 0.128 3.750 1.741 - 314.60 14.512 14.564 14.566 -1.233 -0.265 2.399 -1.233 -0.265 -0.636 -2.957 0.327 3.672 1.521 - 314.65 14.454 14.531 14.533 -1.494 -0.240 2.341 -1.494 -0.240 -0.562 -3.498 0.359 3.885 1.780 - 314.70 14.475 14.540 14.542 -1.373 -0.238 2.362 -1.373 -0.238 -0.561 -3.242 0.326 3.760 1.653 - 314.75 14.432 14.505 14.511 -1.453 -0.420 2.319 -1.453 -0.420 -0.975 -3.370 0.611 3.833 1.780 - 314.80 13.999 14.080 14.090 -1.506 -0.526 1.886 -1.506 -0.526 -0.992 -2.842 0.792 3.052 1.556 - 314.85 13.713 13.790 13.793 -1.458 -0.263 1.600 -1.458 -0.263 -0.420 -2.333 0.383 2.378 1.201 - 314.90 13.524 13.550 13.550 -0.835 -0.090 1.411 -0.835 -0.090 -0.127 -1.178 0.075 1.349 0.594 - 314.95 13.500 13.555 13.556 -1.217 -0.190 1.387 -1.217 -0.190 -0.263 -1.688 0.231 1.721 0.862 - 315.00 13.352 13.393 13.401 -1.050 -0.457 1.239 -1.050 -0.457 -0.567 -1.301 0.480 1.424 0.749 - 315.05 12.996 13.024 13.029 -0.847 -0.363 0.883 -0.847 -0.363 -0.321 -0.748 0.308 0.815 0.435 - 315.10 13.238 13.272 13.280 -0.949 -0.477 1.125 -0.949 -0.477 -0.536 -1.067 0.452 1.197 0.639 - 315.15 13.545 13.571 13.583 -0.846 -0.576 1.432 -0.846 -0.576 -0.824 -1.212 0.487 1.549 0.772 - 315.20 13.753 13.765 13.772 -0.562 -0.455 1.640 -0.562 -0.455 -0.747 -0.922 0.256 1.607 0.607 - 315.25 13.971 13.984 13.995 -0.596 -0.554 1.859 -0.596 -0.554 -1.030 -1.107 0.330 2.058 0.774 - 315.30 14.157 14.192 14.206 -0.995 -0.646 2.044 -0.995 -0.646 -1.320 -2.033 0.643 2.792 1.254 - 315.35 14.075 14.097 14.136 -0.797 -1.044 1.962 -0.797 -1.044 -2.048 -1.565 0.832 2.788 1.354 - 315.40 14.136 14.158 14.171 -0.784 -0.612 2.023 -0.784 -0.612 -1.239 -1.586 0.480 2.541 1.035 - 315.45 14.024 14.028 14.031 -0.350 -0.287 1.911 -0.350 -0.287 -0.549 -0.668 0.101 1.929 0.435 - 315.50 14.046 14.047 14.048 -0.230 -0.092 1.933 -0.230 -0.092 -0.178 -0.445 0.021 1.899 0.240 - 315.55 14.186 14.188 14.189 -0.224 0.174 2.073 -0.224 0.174 0.360 -0.464 -0.039 2.190 0.294 - 315.60 14.078 14.086 14.087 -0.493 0.093 1.965 -0.493 0.093 0.183 -0.970 -0.046 2.056 0.494 - 315.65 14.125 14.140 14.141 -0.649 0.156 2.012 -0.649 0.156 0.313 -1.306 -0.101 2.247 0.674 - 315.70 14.236 14.247 14.251 -0.569 0.300 2.123 -0.569 0.300 0.637 -1.207 -0.171 2.461 0.688 - 315.75 14.275 14.283 14.296 -0.477 0.607 2.162 -0.477 0.607 1.313 -1.031 -0.289 2.636 0.847 - 315.80 14.276 14.278 14.293 -0.247 0.671 2.163 -0.247 0.671 1.451 -0.533 -0.165 2.594 0.777 - 315.85 14.085 14.088 14.096 -0.315 0.463 1.972 -0.315 0.463 0.913 -0.622 -0.146 2.101 0.557 - 315.90 14.120 14.121 14.125 -0.190 0.332 2.007 -0.190 0.332 0.666 -0.381 -0.063 2.087 0.385 - 315.95 14.389 14.390 14.390 -0.175 0.027 2.276 -0.175 0.027 0.061 -0.397 -0.005 2.606 0.201 - 316.00 14.391 14.395 14.397 -0.335 -0.238 2.279 -0.335 -0.238 -0.543 -0.763 0.080 2.681 0.470 - 316.05 14.211 14.211 14.215 -0.110 -0.341 2.098 -0.110 -0.341 -0.716 -0.231 0.038 2.265 0.376 - 316.10 14.289 14.291 14.302 0.255 -0.557 2.176 0.255 -0.557 -1.213 0.554 -0.142 2.555 0.670 - 316.15 14.511 14.515 14.527 0.322 -0.600 2.398 0.322 -0.600 -1.439 0.771 -0.193 3.107 0.822 - 316.20 14.418 14.420 14.424 0.191 -0.351 2.306 0.191 -0.351 -0.809 0.441 -0.067 2.738 0.462 - 316.25 14.181 14.181 14.181 0.093 -0.017 2.068 0.093 -0.017 -0.035 0.192 -0.002 2.143 0.097 - 316.30 13.900 13.901 13.902 0.127 -0.147 1.788 0.127 -0.147 -0.263 0.228 -0.019 1.617 0.174 - 316.35 13.687 13.688 13.692 -0.162 -0.320 1.574 -0.162 -0.320 -0.503 -0.255 0.052 1.303 0.283 - 316.40 13.647 13.648 13.652 -0.157 -0.338 1.534 -0.157 -0.338 -0.519 -0.241 0.053 1.246 0.287 - 316.45 13.675 13.675 13.676 0.087 -0.166 1.562 0.087 -0.166 -0.259 0.137 -0.015 1.237 0.147 - 316.50 13.657 13.657 13.659 -0.068 -0.231 1.544 -0.068 -0.231 -0.357 -0.105 0.016 1.221 0.186 - 316.55 13.381 13.382 13.383 -0.162 -0.099 1.269 -0.162 -0.099 -0.126 -0.206 0.016 0.823 0.121 - 316.60 13.308 13.308 13.308 0.075 0.001 1.195 0.075 0.001 0.002 0.090 0.000 0.716 0.045 - 316.65 13.722 13.725 13.726 0.287 0.062 1.610 0.287 0.062 0.100 0.461 0.018 1.338 0.236 - 316.70 13.811 13.822 13.822 0.545 0.084 1.698 0.545 0.084 0.142 0.926 0.046 1.594 0.469 - 316.75 13.689 13.691 13.691 0.247 0.054 1.576 0.247 0.054 0.085 0.389 0.013 1.274 0.199 - 316.80 13.643 13.643 13.647 -0.006 -0.359 1.530 -0.006 -0.359 -0.549 -0.009 0.002 1.235 0.275 - 316.85 13.873 13.878 13.879 0.350 -0.201 1.760 0.350 -0.201 -0.355 0.617 -0.071 1.631 0.357 - 316.90 13.726 13.726 13.726 0.132 -0.017 1.613 0.132 -0.017 -0.027 0.212 -0.002 1.309 0.107 - 316.95 13.685 13.686 13.686 -0.130 -0.020 1.572 -0.130 -0.020 -0.032 -0.205 0.003 1.245 0.104 - 317.00 13.534 13.534 13.535 0.078 0.076 1.421 0.078 0.076 0.108 0.111 0.006 1.016 0.077 - 317.05 13.588 13.605 13.606 0.669 -0.182 1.475 0.669 -0.182 -0.269 0.987 -0.122 1.329 0.515 - 317.10 13.762 13.768 13.772 0.386 -0.322 1.650 0.386 -0.322 -0.531 0.637 -0.124 1.487 0.419 - 317.15 13.327 13.341 13.344 0.624 0.254 1.214 0.624 0.254 0.308 0.757 0.158 0.964 0.416 - 317.20 13.079 13.084 13.090 0.371 0.386 0.966 0.371 0.386 0.373 0.358 0.143 0.610 0.268 - 317.25 13.078 13.102 13.109 0.798 0.437 0.965 0.798 0.437 0.422 0.769 0.349 0.879 0.472 - 317.30 13.383 13.409 13.416 0.823 0.444 1.270 0.823 0.444 0.564 1.046 0.365 1.244 0.622 - 317.35 13.292 13.327 13.334 0.970 0.409 1.179 0.970 0.409 0.482 1.144 0.397 1.249 0.652 - 317.40 12.988 13.043 13.044 1.197 0.122 0.875 1.197 0.122 0.107 1.048 0.147 1.107 0.532 - 317.45 13.084 13.137 13.137 1.177 0.010 0.972 1.177 0.010 0.010 1.143 0.012 1.164 0.572 - 317.50 13.343 13.360 13.360 0.659 -0.009 1.231 0.659 -0.009 -0.011 0.811 -0.006 0.974 0.405 - 317.55 13.265 13.273 13.273 0.461 -0.033 1.152 0.461 -0.033 -0.038 0.531 -0.015 0.770 0.266 - 317.60 12.960 12.963 12.965 0.263 -0.235 0.848 0.263 -0.235 -0.199 0.223 -0.062 0.421 0.153 - 317.65 12.884 12.884 12.886 -0.075 -0.197 0.771 -0.075 -0.197 -0.152 -0.058 0.015 0.320 0.082 - 317.70 12.866 12.866 12.873 0.011 -0.429 0.753 0.011 -0.429 -0.323 0.008 -0.005 0.376 0.162 - 317.75 13.042 13.043 13.055 -0.084 -0.566 0.930 -0.084 -0.566 -0.526 -0.078 0.047 0.596 0.267 - 317.80 13.205 13.207 13.221 -0.208 -0.609 1.093 -0.208 -0.609 -0.666 -0.228 0.127 0.804 0.357 - 317.85 12.988 12.988 13.000 -0.019 -0.554 0.875 -0.019 -0.554 -0.485 -0.017 0.011 0.536 0.242 - 317.90 13.084 13.085 13.106 0.218 -0.732 0.971 0.218 -0.732 -0.711 0.212 -0.160 0.763 0.379 - 317.95 13.392 13.392 13.435 -0.025 -1.075 1.279 -0.025 -1.075 -1.375 -0.033 0.027 1.397 0.688 - 318.00 13.203 13.203 13.244 -0.047 -1.047 1.090 -0.047 -1.047 -1.141 -0.051 0.049 1.143 0.571 - 318.05 13.255 13.255 13.284 0.089 -0.871 1.142 0.089 -0.871 -0.995 0.102 -0.078 1.036 0.502 - 318.10 13.299 13.299 13.326 0.087 -0.843 1.186 0.087 -0.843 -0.999 0.103 -0.073 1.062 0.504 - 318.15 13.202 13.208 13.232 0.398 -0.798 1.089 0.398 -0.798 -0.869 0.434 -0.318 0.990 0.511 - 318.20 13.129 13.163 13.195 0.948 -0.922 1.016 0.948 -0.922 -0.937 0.963 -0.874 1.390 0.801 - 318.25 13.364 13.390 13.402 0.846 -0.569 1.251 0.846 -0.569 -0.712 1.058 -0.482 1.302 0.682 - 318.30 13.559 13.577 13.616 0.692 -1.039 1.446 0.692 -1.039 -1.503 1.000 -0.719 1.825 0.972 - 318.35 13.116 13.131 13.180 0.640 -1.135 1.003 0.640 -1.135 -1.138 0.641 -0.726 1.351 0.747 - 318.40 13.179 13.190 13.243 0.543 -1.181 1.066 0.543 -1.181 -1.260 0.579 -0.641 1.414 0.764 - 318.45 12.930 12.934 12.997 0.328 -1.275 0.817 0.328 -1.275 -1.042 0.269 -0.419 1.200 0.577 - 318.50 12.957 12.961 13.053 0.325 -1.546 0.844 0.325 -1.546 -1.305 0.274 -0.503 1.604 0.713 - 318.55 12.841 12.845 12.933 0.316 -1.506 0.728 0.316 -1.506 -1.097 0.230 -0.476 1.450 0.609 - 318.60 13.058 13.058 13.171 -0.070 -1.723 0.945 -0.070 -1.723 -1.628 -0.066 0.121 1.933 0.817 - 318.65 13.166 13.170 13.263 0.338 -1.565 1.053 0.338 -1.565 -1.648 0.356 -0.529 1.836 0.883 - 318.70 13.086 13.086 13.162 -0.064 -1.416 0.973 -0.064 -1.416 -1.378 -0.063 0.091 1.478 0.691 - 318.75 13.114 13.115 13.171 -0.153 -1.214 1.001 -0.153 -1.214 -1.215 -0.154 0.186 1.250 0.620 - 318.80 13.498 13.499 13.561 -0.218 -1.287 1.385 -0.218 -1.287 -1.782 -0.302 0.280 1.811 0.915 - 318.85 13.429 13.446 13.496 -0.657 -1.163 1.317 -0.657 -1.163 -1.531 -0.865 0.764 1.759 0.959 - 318.90 13.246 13.268 13.297 -0.768 -0.881 1.133 -0.768 -0.881 -0.998 -0.870 0.676 1.324 0.743 - 318.95 13.214 13.226 13.246 -0.563 -0.725 1.101 -0.563 -0.725 -0.799 -0.620 0.408 1.028 0.545 - 319.00 12.937 12.947 12.970 -0.522 -0.763 0.824 -0.522 -0.763 -0.629 -0.430 0.398 0.767 0.430 - 319.05 13.159 13.177 13.199 -0.685 -0.749 1.047 -0.685 -0.749 -0.784 -0.717 0.513 1.063 0.590 - 319.10 12.977 12.985 13.038 -0.460 -1.180 0.864 -0.460 -1.180 -1.019 -0.397 0.543 1.175 0.611 - 319.15 13.102 13.108 13.185 -0.420 -1.422 0.989 -0.420 -1.422 -1.406 -0.415 0.598 1.588 0.792 - 319.20 12.953 12.954 13.008 -0.174 -1.175 0.840 -0.174 -1.175 -0.988 -0.146 0.204 1.059 0.510 - 319.25 12.975 12.977 13.038 -0.191 -1.258 0.863 -0.191 -1.258 -1.085 -0.165 0.240 1.181 0.562 - 319.30 13.059 13.059 13.118 0.010 -1.236 0.947 0.010 -1.236 -1.170 0.009 -0.012 1.212 0.585 - 319.35 12.803 12.803 12.906 0.093 -1.628 0.690 0.093 -1.628 -1.123 0.064 -0.151 1.568 0.568 - 319.40 12.671 12.680 12.744 0.478 -1.277 0.558 0.478 -1.277 -0.713 0.267 -0.610 1.086 0.488 - 319.45 12.652 12.659 12.719 0.442 -1.230 0.539 0.442 -1.230 -0.663 0.238 -0.543 0.999 0.445 - 319.50 12.632 12.643 12.691 0.525 -1.107 0.519 0.525 -1.107 -0.574 0.273 -0.581 0.885 0.431 - 319.55 12.504 12.530 12.548 0.802 -0.666 0.392 0.802 -0.666 -0.261 0.314 -0.535 0.621 0.336 - 319.60 12.508 12.530 12.556 0.737 -0.806 0.395 0.737 -0.806 -0.319 0.291 -0.594 0.675 0.367 - 319.65 12.679 12.682 12.691 0.253 -0.481 0.566 0.253 -0.481 -0.273 0.143 -0.122 0.308 0.166 - 319.70 12.752 12.759 12.779 0.423 -0.727 0.639 0.423 -0.727 -0.464 0.270 -0.307 0.558 0.310 - 319.75 12.799 12.808 12.843 0.460 -0.946 0.687 0.460 -0.946 -0.649 0.316 -0.435 0.789 0.422 - 319.80 12.891 12.901 12.944 0.497 -1.054 0.778 0.497 -1.054 -0.820 0.387 -0.524 0.982 0.524 - 319.85 13.254 13.269 13.334 0.630 -1.315 1.141 0.630 -1.315 -1.501 0.719 -0.829 1.715 0.930 - 319.90 13.465 13.470 13.529 0.364 -1.262 1.352 0.364 -1.262 -1.707 0.493 -0.460 1.777 0.917 - 319.95 13.196 13.196 13.263 0.041 -1.340 1.083 0.041 -1.340 -1.450 0.044 -0.054 1.484 0.726 - 320.00 13.253 13.253 13.314 0.058 -1.273 1.140 0.058 -1.273 -1.452 0.066 -0.074 1.462 0.728 - 320.05 13.098 13.098 13.124 0.111 -0.824 0.985 0.111 -0.824 -0.812 0.109 -0.091 0.831 0.412 - 320.10 12.984 12.988 13.023 0.340 -0.955 0.871 0.340 -0.955 -0.832 0.296 -0.324 0.893 0.470 - 320.15 12.846 12.848 12.864 0.212 -0.631 0.734 0.212 -0.631 -0.463 0.155 -0.134 0.491 0.253 - 320.20 12.858 12.862 12.877 0.319 -0.605 0.746 0.319 -0.605 -0.451 0.238 -0.193 0.512 0.273 - 320.25 12.895 12.895 12.910 0.067 -0.628 0.782 0.067 -0.628 -0.491 0.053 -0.042 0.505 0.248 - 320.30 12.737 12.737 12.749 -0.018 -0.561 0.624 -0.018 -0.561 -0.350 -0.011 0.010 0.352 0.175 - 320.35 12.400 12.400 12.407 0.089 -0.411 0.287 0.089 -0.411 -0.118 0.026 -0.037 0.130 0.063 - 320.40 12.393 12.395 12.409 -0.222 -0.582 0.280 -0.222 -0.582 -0.163 -0.062 0.129 0.234 0.109 - 320.45 12.812 12.812 12.859 -0.082 -1.092 0.699 -0.082 -1.092 -0.764 -0.058 0.090 0.845 0.386 - 320.50 12.984 12.985 13.011 -0.163 -0.812 0.872 -0.163 -0.812 -0.707 -0.142 0.133 0.723 0.367 - 320.55 12.678 12.679 12.693 -0.141 -0.590 0.565 -0.141 -0.590 -0.333 -0.080 0.083 0.344 0.176 - 320.60 12.639 12.639 12.644 -0.031 -0.359 0.526 -0.031 -0.359 -0.189 -0.016 0.011 0.204 0.095 - 320.65 12.586 12.591 12.597 -0.368 -0.388 0.473 -0.368 -0.388 -0.184 -0.174 0.143 0.255 0.145 - 320.70 12.562 12.567 12.570 -0.346 -0.290 0.450 -0.346 -0.290 -0.130 -0.156 0.100 0.203 0.113 - 320.75 12.408 12.418 12.422 -0.498 -0.296 0.295 -0.498 -0.296 -0.087 -0.147 0.147 0.211 0.113 - 320.80 12.375 12.381 12.383 -0.379 -0.230 0.262 -0.379 -0.230 -0.060 -0.099 0.087 0.133 0.073 - 320.85 12.125 12.130 12.130 -0.360 -0.036 0.012 -0.360 -0.036 -0.000 -0.004 0.013 0.065 0.007 - 320.90 12.148 12.149 12.153 -0.158 -0.292 0.036 -0.158 -0.292 -0.010 -0.006 0.046 0.056 0.024 - 320.95 11.970 11.971 11.973 -0.199 -0.198 -0.143 -0.199 -0.198 0.028 0.028 0.039 0.050 0.028 - 321.00 11.801 11.811 11.811 -0.504 -0.008 -0.312 -0.504 -0.008 0.003 0.157 0.004 0.176 0.079 - 321.05 11.603 11.625 11.627 -0.728 -0.187 -0.510 -0.728 -0.187 0.095 0.371 0.136 0.412 0.203 - 321.10 11.836 11.849 11.849 -0.552 -0.046 -0.277 -0.552 -0.046 0.013 0.153 0.026 0.192 0.078 - 321.15 11.873 11.874 11.881 -0.195 0.404 -0.240 -0.195 0.404 -0.097 0.047 -0.079 0.129 0.067 - 321.20 11.818 11.819 11.819 0.180 0.001 -0.295 0.180 0.001 -0.000 -0.053 0.000 0.060 0.027 - 321.25 11.593 11.600 11.603 0.406 0.266 -0.520 0.406 0.266 -0.138 -0.211 0.108 0.253 0.137 - 321.30 11.692 11.693 11.693 0.124 0.030 -0.420 0.124 0.030 -0.013 -0.052 0.004 0.097 0.027 - 321.35 11.665 11.666 11.666 0.111 -0.059 -0.447 0.111 -0.059 0.027 -0.050 -0.007 0.108 0.028 - 321.40 11.430 11.435 11.437 0.363 -0.172 -0.683 0.363 -0.172 0.118 -0.248 -0.063 0.314 0.141 - 321.45 11.314 11.322 11.323 0.440 -0.119 -0.799 0.440 -0.119 0.095 -0.352 -0.053 0.423 0.184 - 321.50 11.412 11.423 11.424 0.506 -0.172 -0.701 0.506 -0.172 0.121 -0.355 -0.087 0.389 0.192 - 321.55 11.279 11.290 11.290 0.485 -0.073 -0.834 0.485 -0.073 0.061 -0.405 -0.036 0.468 0.205 - 321.60 11.295 11.318 11.319 0.732 -0.156 -0.818 0.732 -0.156 0.128 -0.599 -0.114 0.615 0.311 - 321.65 10.928 10.947 10.951 0.644 0.314 -1.185 0.644 0.314 -0.372 -0.763 0.202 0.959 0.437 - 321.70 11.085 11.092 11.100 0.378 0.431 -1.027 0.378 0.431 -0.442 -0.388 0.163 0.692 0.305 - 321.75 11.170 11.170 11.182 0.006 0.506 -0.942 0.006 0.506 -0.477 -0.005 0.003 0.572 0.239 - 321.80 11.335 11.335 11.380 -0.031 1.006 -0.778 -0.031 1.006 -0.782 0.024 -0.031 0.809 0.392 - 321.85 11.208 11.208 11.253 0.119 0.997 -0.905 0.119 0.997 -0.903 -0.108 0.119 0.914 0.458 - 321.90 10.984 10.985 11.014 -0.098 0.799 -1.128 -0.098 0.799 -0.902 0.111 -0.079 0.961 0.456 - 321.95 11.284 11.285 11.294 -0.156 0.455 -0.829 -0.156 0.455 -0.378 0.129 -0.071 0.460 0.203 - 322.00 11.176 11.176 11.178 -0.035 -0.199 -0.937 -0.035 -0.199 0.186 0.033 0.007 0.459 0.095 - 322.05 11.525 11.525 11.533 0.071 -0.428 -0.588 0.071 -0.428 0.252 -0.042 -0.030 0.267 0.128 - 322.10 11.570 11.570 11.570 0.124 -0.016 -0.543 0.124 -0.016 0.009 -0.067 -0.002 0.155 0.034 - 322.15 11.110 11.111 11.111 0.158 0.070 -1.003 0.158 0.070 -0.070 -0.158 0.011 0.518 0.087 - 322.20 11.178 11.183 11.183 0.329 -0.051 -0.935 0.329 -0.051 0.047 -0.308 -0.017 0.493 0.156 - 322.25 11.242 11.243 11.243 -0.123 -0.041 -0.870 -0.123 -0.041 0.036 0.107 0.005 0.387 0.057 - 322.30 11.146 11.146 11.147 -0.014 0.141 -0.967 -0.014 0.141 -0.137 0.013 -0.002 0.477 0.069 - 322.35 11.224 11.225 11.229 -0.128 0.309 -0.889 -0.128 0.309 -0.274 0.113 -0.039 0.451 0.150 - 322.40 11.091 11.093 11.107 -0.192 0.551 -1.021 -0.192 0.551 -0.563 0.196 -0.106 0.692 0.303 - 322.45 10.809 10.816 10.841 -0.390 0.728 -1.303 -0.390 0.728 -0.948 0.508 -0.284 1.190 0.556 - 322.50 10.735 10.751 10.770 -0.571 0.648 -1.377 -0.571 0.648 -0.893 0.786 -0.370 1.322 0.623 - 322.55 11.082 11.092 11.094 -0.468 0.232 -1.031 -0.468 0.232 -0.240 0.483 -0.109 0.668 0.275 - 322.60 10.917 10.928 10.944 -0.486 0.589 -1.196 -0.486 0.589 -0.704 0.581 -0.286 1.006 0.478 - 322.65 10.929 10.939 10.962 -0.459 0.710 -1.183 -0.459 0.710 -0.841 0.544 -0.326 1.058 0.526 - 322.70 11.251 11.260 11.289 -0.452 0.807 -0.862 -0.452 0.807 -0.695 0.390 -0.365 0.799 0.438 - 322.75 11.189 11.207 11.247 -0.630 0.949 -0.923 -0.630 0.949 -0.876 0.582 -0.598 1.075 0.605 - 322.80 11.094 11.107 11.119 -0.532 0.532 -1.019 -0.532 0.532 -0.543 0.542 -0.283 0.802 0.409 - 322.85 11.089 11.112 11.137 -0.726 0.738 -1.024 -0.726 0.738 -0.756 0.744 -0.536 1.060 0.594 - 322.90 11.155 11.188 11.192 -0.859 0.326 -0.958 -0.859 0.326 -0.312 0.823 -0.280 0.881 0.462 - 322.95 11.188 11.226 11.227 -0.917 -0.141 -0.924 -0.917 -0.141 0.130 0.847 0.129 0.857 0.433 - 323.00 11.347 11.385 11.386 -0.932 0.068 -0.766 -0.932 0.068 -0.052 0.713 -0.064 0.729 0.359 - 323.05 11.507 11.557 11.561 -1.078 0.272 -0.606 -1.078 0.272 -0.164 0.653 -0.293 0.801 0.367 - 323.10 11.407 11.470 11.500 -1.201 0.822 -0.706 -1.201 0.822 -0.580 0.847 -0.988 1.308 0.712 - 323.15 11.416 11.488 11.519 -1.285 0.836 -0.697 -1.285 0.836 -0.583 0.895 -1.075 1.418 0.758 - 323.20 11.600 11.654 11.702 -1.111 1.058 -0.512 -1.111 1.058 -0.542 0.569 -1.176 1.309 0.707 - 323.25 11.685 11.722 11.779 -0.938 1.157 -0.428 -0.938 1.157 -0.495 0.401 -1.085 1.201 0.629 - 323.30 11.603 11.633 11.657 -0.834 0.746 -0.509 -0.834 0.746 -0.380 0.425 -0.622 0.756 0.422 - 323.35 11.523 11.548 11.573 -0.755 0.762 -0.590 -0.755 0.762 -0.449 0.445 -0.575 0.749 0.428 - 323.40 11.671 11.715 11.738 -1.013 0.725 -0.441 -1.013 0.725 -0.320 0.447 -0.734 0.873 0.459 - 323.45 11.839 11.910 11.920 -1.291 0.498 -0.273 -1.291 0.498 -0.136 0.353 -0.643 0.995 0.373 - 323.50 11.796 11.867 11.892 -1.293 0.783 -0.317 -1.293 0.783 -0.248 0.410 -1.013 1.193 0.560 - 323.55 11.968 12.047 12.067 -1.374 0.704 -0.145 -1.374 0.704 -0.102 0.199 -0.968 1.203 0.496 - 323.60 11.986 12.082 12.111 -1.524 0.836 -0.127 -1.524 0.836 -0.106 0.193 -1.274 1.518 0.646 - 323.65 12.019 12.146 12.189 -1.755 1.015 -0.094 -1.755 1.015 -0.095 0.165 -1.782 2.060 0.896 - 323.70 12.096 12.259 12.318 -1.988 1.204 -0.016 -1.988 1.204 -0.020 0.033 -2.393 2.701 1.197 - 323.75 11.828 11.916 11.984 -1.443 1.282 -0.285 -1.443 1.282 -0.365 0.411 -1.850 1.904 0.965 - 323.80 11.893 11.989 12.026 -1.514 0.941 -0.220 -1.514 0.941 -0.207 0.332 -1.425 1.613 0.739 - 323.85 11.910 11.971 11.995 -1.201 0.761 -0.202 -1.201 0.761 -0.154 0.243 -0.914 1.032 0.479 - 323.90 12.254 12.297 12.312 -1.027 0.610 0.141 -1.027 0.610 0.086 -0.145 -0.626 0.723 0.324 - 323.95 12.148 12.203 12.213 -1.154 0.496 0.035 -1.154 0.496 0.018 -0.041 -0.572 0.789 0.287 - 324.00 12.039 12.069 12.076 -0.854 0.406 -0.074 -0.854 0.406 -0.030 0.063 -0.346 0.450 0.177 - 324.05 12.237 12.266 12.274 -0.841 0.457 0.124 -0.841 0.457 0.057 -0.104 -0.385 0.466 0.201 - 324.10 12.204 12.239 12.252 -0.929 0.562 0.091 -0.929 0.562 0.051 -0.085 -0.522 0.593 0.266 - 324.15 12.615 12.652 12.716 -0.969 1.271 0.502 -0.969 1.271 0.638 -0.487 -1.232 1.404 0.735 - 324.20 12.304 12.330 12.396 -0.805 1.275 0.191 -0.805 1.275 0.243 -0.154 -1.026 1.155 0.533 - 324.25 12.329 12.345 12.406 -0.615 1.233 0.217 -0.615 1.233 0.267 -0.133 -0.758 0.973 0.407 - 324.30 12.279 12.286 12.381 -0.420 1.531 0.166 -0.420 1.531 0.254 -0.070 -0.642 1.274 0.347 - 324.35 12.328 12.338 12.428 -0.477 1.495 0.216 -0.477 1.495 0.322 -0.103 -0.713 1.255 0.395 - 324.40 12.286 12.292 12.355 -0.402 1.247 0.173 -0.402 1.247 0.216 -0.069 -0.501 0.874 0.275 - 324.45 12.473 12.490 12.540 -0.648 1.121 0.361 -0.648 1.121 0.404 -0.234 -0.726 0.903 0.431 - 324.50 12.291 12.321 12.353 -0.867 0.888 0.178 -0.867 0.888 0.158 -0.154 -0.770 0.786 0.400 - 324.55 12.421 12.442 12.490 -0.722 1.093 0.308 -0.722 1.093 0.337 -0.223 -0.789 0.905 0.443 - 324.60 12.512 12.541 12.589 -0.855 1.104 0.399 -0.855 1.104 0.440 -0.341 -0.944 1.055 0.548 - 324.65 12.499 12.517 12.564 -0.669 1.094 0.386 -0.669 1.094 0.422 -0.258 -0.732 0.896 0.442 - 324.70 12.587 12.589 12.697 -0.204 1.650 0.475 -0.204 1.650 0.783 -0.097 -0.336 1.495 0.429 - 324.75 12.438 12.448 12.520 -0.487 1.340 0.325 -0.487 1.340 0.436 -0.158 -0.652 1.069 0.400 - 324.80 12.483 12.518 12.579 -0.936 1.236 0.370 -0.936 1.236 0.457 -0.346 -1.157 1.270 0.645 - 324.85 12.344 12.386 12.479 -1.025 1.517 0.231 -1.025 1.517 0.350 -0.237 -1.555 1.702 0.806 - 324.90 12.401 12.443 12.546 -1.026 1.601 0.288 -1.026 1.601 0.462 -0.296 -1.642 1.849 0.866 - 324.95 12.234 12.277 12.393 -1.028 1.691 0.121 -1.028 1.691 0.205 -0.124 -1.738 1.965 0.877 - 325.00 12.117 12.165 12.287 -1.083 1.726 0.004 -1.083 1.726 0.007 -0.004 -1.869 2.076 0.935 - 325.05 12.352 12.408 12.506 -1.179 1.560 0.239 -1.179 1.560 0.373 -0.282 -1.838 1.939 0.948 - 325.10 12.495 12.565 12.618 -1.327 1.151 0.382 -1.327 1.151 0.440 -0.507 -1.528 1.616 0.834 - 325.15 12.504 12.570 12.615 -1.292 1.060 0.391 -1.292 1.060 0.415 -0.505 -1.370 1.473 0.759 - 325.20 12.549 12.598 12.654 -1.118 1.180 0.436 -1.118 1.180 0.514 -0.487 -1.319 1.416 0.749 - 325.25 12.805 12.867 12.920 -1.265 1.171 0.692 -1.265 1.171 0.810 -0.875 -1.481 1.725 0.951 - 325.30 12.930 12.989 13.036 -1.236 1.105 0.817 -1.236 1.105 0.903 -1.010 -1.366 1.709 0.962 - 325.35 12.679 12.785 12.837 -1.644 1.160 0.566 -1.644 1.160 0.656 -0.930 -1.907 2.184 1.110 - 325.40 12.461 12.531 12.569 -1.318 0.977 0.349 -1.318 0.977 0.340 -0.459 -1.287 1.406 0.704 - 325.45 12.344 12.376 12.399 -0.899 0.755 0.231 -0.899 0.755 0.174 -0.208 -0.679 0.716 0.366 - 325.50 12.115 12.160 12.215 -1.046 1.156 0.002 -1.046 1.156 0.002 -0.002 -1.209 1.215 0.604 - 325.55 11.895 11.954 12.020 -1.185 1.261 -0.218 -1.185 1.261 -0.274 0.258 -1.494 1.521 0.770 - 325.60 11.635 11.666 11.718 -0.850 1.097 -0.478 -0.850 1.097 -0.524 0.406 -0.932 1.077 0.572 - 325.65 11.424 11.438 11.506 -0.558 1.251 -0.689 -0.558 1.251 -0.861 0.384 -0.698 1.175 0.587 - 325.70 11.355 11.372 11.433 -0.612 1.180 -0.757 -0.612 1.180 -0.893 0.464 -0.722 1.170 0.619 - 325.75 11.469 11.476 11.523 -0.395 1.036 -0.644 -0.395 1.036 -0.666 0.254 -0.410 0.822 0.411 - 325.80 11.521 11.525 11.562 -0.294 0.936 -0.592 -0.294 0.936 -0.554 0.174 -0.275 0.656 0.321 - 325.85 11.497 11.499 11.516 -0.238 0.624 -0.616 -0.238 0.624 -0.384 0.146 -0.148 0.413 0.219 - 325.90 11.619 11.623 11.636 -0.300 0.550 -0.494 -0.300 0.550 -0.272 0.148 -0.165 0.318 0.175 - 325.95 11.716 11.716 11.722 0.002 0.354 -0.396 0.002 0.354 -0.140 -0.001 0.001 0.141 0.070 - 326.00 11.815 11.815 11.816 0.023 0.161 -0.298 0.023 0.161 -0.048 -0.007 0.004 0.058 0.024 - 326.05 11.956 11.957 11.957 0.166 0.035 -0.157 0.166 0.035 -0.005 -0.026 0.006 0.027 0.014 - 326.10 11.734 11.734 11.734 -0.037 0.024 -0.379 -0.037 0.024 -0.009 0.014 -0.001 0.073 0.008 - 326.15 11.712 11.713 11.717 -0.175 0.320 -0.401 -0.175 0.320 -0.128 0.070 -0.056 0.147 0.078 - 326.20 12.001 12.005 12.009 -0.316 0.309 -0.112 -0.316 0.309 -0.035 0.035 -0.098 0.104 0.055 - 326.25 12.033 12.041 12.051 -0.443 0.505 -0.080 -0.443 0.505 -0.040 0.035 -0.224 0.229 0.115 - 326.30 12.239 12.242 12.249 -0.251 0.412 0.126 -0.251 0.412 0.052 -0.032 -0.104 0.125 0.060 - 326.35 12.495 12.496 12.505 -0.178 0.458 0.382 -0.178 0.458 0.175 -0.068 -0.082 0.194 0.102 - 326.40 12.772 12.772 12.772 0.001 0.089 0.659 0.001 0.089 0.059 0.001 0.000 0.221 0.029 - 326.45 12.575 12.575 12.577 0.010 0.222 0.462 0.010 0.222 0.103 0.005 0.002 0.132 0.051 - 326.50 12.677 12.683 12.692 0.410 0.469 0.564 0.410 0.469 0.264 0.231 0.192 0.353 0.200 - 326.55 12.665 12.667 12.683 0.229 0.623 0.552 0.229 0.623 0.344 0.127 0.143 0.373 0.197 - 326.60 12.483 12.484 12.507 -0.198 0.760 0.370 -0.198 0.760 0.281 -0.073 -0.151 0.377 0.164 - 326.65 12.788 12.790 12.793 -0.201 0.296 0.675 -0.201 0.296 0.200 -0.135 -0.059 0.292 0.124 - 326.70 12.542 12.543 12.543 -0.193 0.052 0.429 -0.193 0.052 0.022 -0.083 -0.010 0.112 0.043 - 326.75 12.315 12.316 12.318 -0.191 0.210 0.202 -0.191 0.210 0.042 -0.039 -0.040 0.061 0.035 - 326.80 12.707 12.707 12.713 -0.100 0.364 0.594 -0.100 0.364 0.216 -0.059 -0.036 0.248 0.114 - 326.85 12.699 12.701 12.703 -0.211 0.213 0.587 -0.211 0.213 0.125 -0.124 -0.045 0.217 0.091 - 326.90 12.792 12.798 12.801 -0.362 -0.302 0.680 -0.362 -0.302 -0.205 -0.246 0.109 0.342 0.169 - 326.95 12.761 12.769 12.770 -0.463 -0.164 0.648 -0.463 -0.164 -0.107 -0.300 0.076 0.331 0.164 - 327.00 12.712 12.713 12.714 -0.167 -0.070 0.600 -0.167 -0.070 -0.042 -0.100 0.012 0.196 0.055 - 327.05 12.341 12.342 12.343 -0.087 0.169 0.229 -0.087 0.169 0.039 -0.020 -0.015 0.044 0.023 - 327.10 12.389 12.394 12.395 -0.367 -0.173 0.276 -0.367 -0.173 -0.048 -0.101 0.064 0.120 0.064 - 327.15 12.811 12.815 12.817 -0.318 -0.198 0.699 -0.318 -0.198 -0.138 -0.222 0.063 0.314 0.135 - 327.20 12.796 12.798 12.798 -0.243 -0.063 0.683 -0.243 -0.063 -0.043 -0.166 0.015 0.265 0.086 - 327.25 12.573 12.576 12.578 -0.256 -0.237 0.460 -0.256 -0.237 -0.109 -0.118 0.061 0.167 0.086 - 327.30 12.732 12.733 12.735 -0.150 -0.190 0.620 -0.150 -0.190 -0.118 -0.093 0.029 0.221 0.076 - 327.35 12.042 12.042 12.042 0.019 -0.010 -0.071 0.019 -0.010 0.001 -0.001 -0.000 0.003 0.001 - 327.40 11.891 11.894 11.896 0.300 0.172 -0.222 0.300 0.172 -0.038 -0.067 0.052 0.084 0.046 - 327.45 11.788 11.793 11.794 0.320 0.171 -0.324 0.320 0.171 -0.055 -0.104 0.055 0.119 0.065 - 327.50 11.759 11.760 11.761 0.205 -0.055 -0.354 0.205 -0.055 0.020 -0.072 -0.011 0.085 0.038 - 327.55 11.627 11.647 11.648 0.681 0.151 -0.486 0.681 0.151 -0.073 -0.331 0.103 0.361 0.177 - 327.60 11.646 11.661 11.663 0.601 0.174 -0.467 0.601 0.174 -0.081 -0.281 0.105 0.305 0.155 - 327.65 11.362 11.362 11.363 0.071 0.108 -0.751 0.071 0.108 -0.081 -0.053 0.008 0.290 0.049 - 327.70 11.356 11.360 11.362 0.305 0.235 -0.757 0.305 0.235 -0.178 -0.231 0.072 0.361 0.150 - 327.75 11.714 11.718 11.721 0.303 0.276 -0.399 0.303 0.276 -0.110 -0.121 0.084 0.164 0.092 - 327.80 11.826 11.826 11.835 0.021 0.468 -0.287 0.021 0.468 -0.134 -0.006 0.010 0.151 0.067 - 327.85 11.896 11.896 11.898 0.105 0.220 -0.217 0.105 0.220 -0.048 -0.023 0.023 0.053 0.029 - 327.90 11.822 11.823 11.826 0.069 0.292 -0.290 0.069 0.292 -0.085 -0.020 0.020 0.087 0.045 - 327.95 11.806 11.806 11.809 -0.113 0.264 -0.307 -0.113 0.264 -0.081 0.035 -0.030 0.088 0.047 - 328.00 11.888 11.891 11.903 -0.279 0.528 -0.225 -0.279 0.528 -0.119 0.063 -0.147 0.204 0.100 - 328.05 11.887 11.897 11.912 -0.490 0.583 -0.225 -0.490 0.583 -0.131 0.110 -0.285 0.315 0.167 - 328.10 11.692 11.707 11.717 -0.599 0.481 -0.421 -0.599 0.481 -0.203 0.252 -0.288 0.383 0.216 - 328.15 11.756 11.770 11.784 -0.568 0.578 -0.357 -0.568 0.578 -0.206 0.202 -0.328 0.392 0.219 - 328.20 11.798 11.805 11.833 -0.425 0.815 -0.315 -0.425 0.815 -0.257 0.134 -0.346 0.472 0.226 - 328.25 12.128 12.132 12.157 -0.305 0.789 0.015 -0.305 0.789 0.012 -0.005 -0.240 0.358 0.120 - 328.30 12.223 12.223 12.252 -0.078 0.839 0.110 -0.078 0.839 0.092 -0.009 -0.065 0.361 0.057 - 328.35 12.444 12.445 12.472 0.158 0.817 0.331 0.158 0.817 0.271 0.052 0.129 0.401 0.152 - 328.40 12.242 12.250 12.289 0.460 0.980 0.129 0.460 0.980 0.126 0.059 0.451 0.595 0.236 - 328.45 12.157 12.167 12.240 0.479 1.341 0.044 0.479 1.341 0.059 0.021 0.642 1.015 0.323 - 328.50 12.418 12.426 12.459 0.459 0.902 0.305 0.459 0.902 0.275 0.140 0.414 0.559 0.258 - 328.55 12.328 12.332 12.395 0.314 1.246 0.215 0.314 1.246 0.268 0.067 0.391 0.849 0.239 - 328.60 12.185 12.196 12.313 0.510 1.697 0.072 0.510 1.697 0.122 0.037 0.866 1.573 0.438 - 328.65 12.015 12.019 12.106 0.330 1.447 -0.098 0.330 1.447 -0.142 -0.032 0.478 1.107 0.250 - 328.70 11.997 11.997 12.059 0.112 1.218 -0.116 0.112 1.218 -0.141 -0.013 0.136 0.754 0.098 - 328.75 12.044 12.045 12.073 0.121 0.834 -0.069 0.121 0.834 -0.057 -0.008 0.101 0.357 0.058 - 328.80 12.094 12.095 12.107 0.108 0.554 -0.018 0.108 0.554 -0.010 -0.002 0.060 0.159 0.030 - 328.85 12.105 12.106 12.112 -0.103 0.382 -0.007 -0.103 0.382 -0.003 0.001 -0.039 0.078 0.020 - 328.90 12.250 12.261 12.284 -0.515 0.752 0.137 -0.515 0.752 0.103 -0.071 -0.387 0.425 0.203 - 328.95 12.174 12.183 12.225 -0.478 1.011 0.061 -0.478 1.011 0.062 -0.029 -0.483 0.627 0.244 - 329.00 12.262 12.297 12.357 -0.927 1.221 0.149 -0.927 1.221 0.182 -0.138 -1.132 1.187 0.578 - 329.05 12.540 12.590 12.648 -1.122 1.203 0.427 -1.122 1.203 0.514 -0.479 -1.350 1.445 0.761 - 329.10 12.965 12.990 13.032 -0.806 1.041 0.853 -0.806 1.041 0.887 -0.687 -0.839 1.230 0.700 - 329.15 12.914 12.940 12.985 -0.824 1.068 0.801 -0.824 1.068 0.856 -0.660 -0.880 1.231 0.697 - 329.20 12.794 12.842 12.903 -1.109 1.246 0.682 -1.109 1.246 0.849 -0.756 -1.382 1.624 0.895 - 329.25 12.617 12.669 12.769 -1.150 1.588 0.504 -1.150 1.588 0.801 -0.580 -1.826 2.049 1.038 - 329.30 12.709 12.753 12.850 -1.065 1.576 0.596 -1.065 1.576 0.939 -0.635 -1.679 1.987 1.013 - 329.35 12.867 12.925 13.010 -1.225 1.487 0.754 -1.225 1.487 1.121 -0.924 -1.823 2.141 1.165 - 329.40 12.966 13.004 13.052 -0.992 1.119 0.853 -0.992 1.119 0.954 -0.846 -1.110 1.482 0.845 - 329.45 12.820 12.842 12.868 -0.752 0.806 0.707 -0.752 0.806 0.570 -0.532 -0.607 0.858 0.494 - 329.50 12.716 12.738 12.797 -0.736 1.236 0.603 -0.736 1.236 0.746 -0.444 -0.910 1.217 0.629 - 329.55 12.838 12.845 12.904 -0.426 1.232 0.725 -0.426 1.232 0.893 -0.309 -0.525 1.113 0.541 - 329.60 12.594 12.602 12.638 -0.452 0.952 0.481 -0.452 0.952 0.458 -0.218 -0.431 0.671 0.333 - 329.65 12.888 12.898 12.940 -0.500 1.045 0.776 -0.500 1.045 0.811 -0.388 -0.523 0.972 0.520 - 329.70 12.908 12.913 12.949 -0.338 0.976 0.795 -0.338 0.976 0.776 -0.269 -0.330 0.849 0.442 - 329.75 12.631 12.637 12.680 -0.387 1.048 0.518 -0.387 1.048 0.543 -0.200 -0.405 0.758 0.353 - 329.80 12.714 12.720 12.755 -0.390 0.945 0.602 -0.390 0.945 0.569 -0.235 -0.369 0.704 0.359 - 329.85 12.479 12.491 12.529 -0.538 0.981 0.366 -0.538 0.981 0.359 -0.197 -0.528 0.693 0.334 - 329.90 12.366 12.368 12.391 -0.219 0.762 0.253 -0.219 0.762 0.193 -0.055 -0.167 0.347 0.131 - 329.95 12.585 12.589 12.653 -0.308 1.270 0.472 -0.308 1.270 0.600 -0.145 -0.391 0.965 0.365 - 330.00 12.505 12.505 12.562 0.022 1.187 0.393 0.022 1.187 0.466 0.009 0.027 0.781 0.233 - 330.05 12.732 12.732 12.802 -0.061 1.341 0.619 -0.061 1.341 0.829 -0.038 -0.082 1.092 0.417 - 330.10 13.173 13.182 13.221 0.481 1.013 1.060 0.481 1.013 1.074 0.510 0.488 1.191 0.643 - 330.15 12.921 12.930 12.970 0.486 1.015 0.808 0.486 1.015 0.820 0.393 0.493 0.959 0.517 - 330.20 13.078 13.102 13.120 0.804 0.686 0.965 0.804 0.686 0.662 0.776 0.552 1.024 0.580 - 330.25 12.719 12.727 12.742 0.453 0.623 0.606 0.453 0.623 0.377 0.275 0.282 0.480 0.273 - 330.30 12.618 12.647 12.669 0.852 0.742 0.506 0.852 0.742 0.375 0.431 0.632 0.766 0.426 - 330.35 12.718 12.750 12.763 0.906 0.561 0.605 0.906 0.561 0.340 0.548 0.509 0.751 0.411 - 330.40 12.663 12.690 12.706 0.832 0.640 0.550 0.832 0.640 0.352 0.458 0.532 0.702 0.393 - 330.45 12.804 12.838 12.848 0.935 0.505 0.691 0.935 0.505 0.349 0.646 0.472 0.803 0.437 - 330.50 13.084 13.144 13.147 1.254 0.317 0.971 1.254 0.317 0.308 1.218 0.398 1.308 0.659 - 330.55 13.180 13.236 13.242 1.214 0.404 1.067 1.214 0.404 0.431 1.296 0.490 1.388 0.725 - 330.60 13.052 13.116 13.123 1.291 0.429 0.940 1.291 0.429 0.403 1.213 0.553 1.366 0.696 - 330.65 12.957 13.021 13.024 1.288 0.271 0.844 1.288 0.271 0.229 1.087 0.350 1.222 0.582 - 330.70 12.774 12.820 12.822 1.081 0.248 0.661 1.081 0.248 0.164 0.715 0.268 0.834 0.390 - 330.75 13.039 13.096 13.104 1.217 0.462 0.927 1.217 0.462 0.428 1.128 0.563 1.277 0.666 - 330.80 12.940 13.000 13.005 1.250 0.380 0.827 1.250 0.380 0.314 1.033 0.475 1.195 0.590 - 330.85 12.841 12.889 12.890 1.107 0.201 0.728 1.107 0.201 0.146 0.806 0.222 0.898 0.424 - 330.90 12.896 12.921 12.922 0.805 0.096 0.783 0.805 0.096 0.075 0.630 0.077 0.635 0.320 - 330.95 12.787 12.817 12.818 0.884 0.080 0.674 0.884 0.080 0.054 0.596 0.071 0.621 0.301 - 331.00 12.735 12.743 12.744 0.460 -0.160 0.622 0.460 -0.160 -0.099 0.286 -0.074 0.312 0.156 - 331.05 13.054 13.056 13.061 0.225 -0.380 0.941 0.225 -0.380 -0.357 0.212 -0.085 0.540 0.212 - 331.10 13.074 13.077 13.082 0.280 -0.392 0.961 0.280 -0.392 -0.377 0.269 -0.110 0.578 0.238 - 331.15 12.975 12.995 12.995 0.716 0.010 0.862 0.716 0.010 0.009 0.617 0.007 0.628 0.309 - 331.20 12.844 12.863 12.867 0.701 0.305 0.731 0.701 0.305 0.223 0.512 0.213 0.559 0.299 - 331.25 12.887 12.900 12.901 0.585 0.146 0.774 0.585 0.146 0.113 0.452 0.085 0.481 0.237 - 331.30 13.045 13.058 13.061 0.588 -0.282 0.932 0.588 -0.282 -0.263 0.548 -0.166 0.647 0.315 - 331.35 12.922 12.945 12.949 0.778 -0.313 0.809 0.778 -0.313 -0.254 0.629 -0.244 0.679 0.360 - 331.40 13.053 13.076 13.076 0.766 -0.120 0.940 0.766 -0.120 -0.113 0.720 -0.092 0.743 0.368 - 331.45 13.152 13.165 13.166 0.583 -0.198 1.039 0.583 -0.198 -0.206 0.605 -0.116 0.729 0.325 - 331.50 13.194 13.207 13.208 0.593 -0.178 1.081 0.593 -0.178 -0.193 0.641 -0.106 0.776 0.339 - 331.55 13.504 13.515 13.529 0.544 -0.598 1.392 0.544 -0.598 -0.832 0.758 -0.325 1.295 0.586 - 331.60 13.331 13.334 13.340 0.267 -0.409 1.218 0.267 -0.409 -0.498 0.325 -0.109 0.861 0.302 - 331.65 13.005 13.007 13.020 -0.247 -0.565 0.892 -0.247 -0.565 -0.504 -0.220 0.139 0.588 0.284 - 331.70 13.306 13.306 13.322 0.049 -0.650 1.193 0.049 -0.650 -0.776 0.058 -0.032 0.924 0.389 - 331.75 13.446 13.448 13.456 0.236 -0.472 1.333 0.236 -0.472 -0.630 0.314 -0.111 1.028 0.356 - 331.80 13.663 13.667 13.677 0.359 -0.526 1.550 0.359 -0.526 -0.816 0.556 -0.189 1.404 0.503 - 331.85 13.433 13.436 13.438 0.291 -0.216 1.320 0.291 -0.216 -0.285 0.384 -0.063 0.937 0.241 - 331.90 13.519 13.529 13.530 0.526 0.132 1.406 0.526 0.132 0.186 0.739 0.070 1.135 0.383 - 331.95 13.370 13.380 13.380 0.524 0.108 1.257 0.524 0.108 0.136 0.659 0.057 0.933 0.338 - 332.00 13.562 13.580 13.580 0.688 0.049 1.450 0.688 0.049 0.071 0.997 0.034 1.289 0.500 - 332.05 13.863 13.892 13.894 0.899 -0.214 1.750 0.899 -0.214 -0.375 1.573 -0.193 1.959 0.814 - 332.10 13.811 13.829 13.854 0.703 -0.845 1.698 0.703 -0.845 -1.435 1.193 -0.594 2.046 0.979 - 332.15 13.887 13.921 13.970 0.969 -1.175 1.774 0.969 -1.175 -2.084 1.720 -1.139 2.734 1.466 - 332.20 13.849 13.890 13.935 1.074 -1.123 1.736 1.074 -1.123 -1.949 1.865 -1.206 2.714 1.477 - 332.25 13.849 13.885 13.909 1.011 -0.813 1.736 1.011 -0.813 -1.412 1.754 -0.822 2.348 1.199 - 332.30 13.672 13.708 13.730 0.990 -0.780 1.559 0.990 -0.780 -1.216 1.544 -0.772 2.010 1.056 - 332.35 13.827 13.841 13.872 0.612 -0.935 1.714 0.612 -0.935 -1.603 1.049 -0.572 2.094 1.000 - 332.40 13.489 13.497 13.515 0.481 -0.691 1.376 0.481 -0.691 -0.951 0.661 -0.332 1.301 0.603 - 332.45 13.471 13.481 13.512 0.534 -0.906 1.358 0.534 -0.906 -1.230 0.725 -0.483 1.475 0.754 - 332.50 13.550 13.587 13.605 1.002 -0.695 1.438 1.002 -0.695 -0.999 1.441 -0.696 1.777 0.943 - 332.55 13.578 13.629 13.636 1.180 -0.440 1.465 1.180 -0.440 -0.645 1.728 -0.520 1.866 0.958 - 332.60 13.583 13.610 13.613 0.852 -0.322 1.470 0.852 -0.322 -0.474 1.253 -0.275 1.496 0.684 - 332.65 13.771 13.786 13.797 0.642 -0.544 1.658 0.642 -0.544 -0.903 1.065 -0.349 1.729 0.719 - 332.70 13.913 13.935 13.955 0.788 -0.742 1.800 0.788 -0.742 -1.337 1.418 -0.585 2.207 1.017 - 332.75 13.480 13.523 13.531 1.070 -0.464 1.368 1.070 -0.464 -0.634 1.464 -0.496 1.615 0.835 - 332.80 13.502 13.523 13.529 0.767 -0.403 1.389 0.767 -0.403 -0.560 1.066 -0.309 1.340 0.621 - 332.85 13.730 13.759 13.766 0.898 -0.433 1.617 0.898 -0.433 -0.700 1.452 -0.389 1.804 0.829 - 332.90 13.928 13.956 13.958 0.892 -0.250 1.815 0.892 -0.250 -0.454 1.618 -0.223 2.076 0.848 - 332.95 13.577 13.593 13.593 0.663 0.053 1.464 0.663 0.053 0.078 0.971 0.035 1.293 0.487 - 333.00 13.436 13.469 13.469 0.932 0.055 1.324 0.932 0.055 0.073 1.234 0.051 1.312 0.618 - 333.05 13.423 13.460 13.464 0.996 -0.318 1.310 0.996 -0.318 -0.417 1.305 -0.317 1.405 0.703 - 333.10 13.617 13.661 13.664 1.104 -0.271 1.504 1.104 -0.271 -0.408 1.659 -0.300 1.776 0.867 - 333.15 13.382 13.443 13.453 1.280 -0.510 1.269 1.280 -0.510 -0.647 1.625 -0.653 1.755 0.934 - 333.20 13.411 13.479 13.492 1.357 -0.587 1.298 1.357 -0.587 -0.762 1.761 -0.796 1.935 1.039 - 333.25 13.553 13.609 13.625 1.233 -0.648 1.440 1.233 -0.648 -0.934 1.776 -0.799 2.008 1.080 - 333.30 13.217 13.254 13.266 0.998 -0.569 1.104 0.998 -0.569 -0.628 1.101 -0.567 1.269 0.694 - 333.35 13.412 13.461 13.475 1.156 -0.613 1.299 1.156 -0.613 -0.796 1.501 -0.708 1.699 0.920 - 333.40 13.282 13.344 13.357 1.285 -0.568 1.170 1.285 -0.568 -0.664 1.503 -0.730 1.671 0.899 - 333.45 13.175 13.253 13.279 1.435 -0.821 1.063 1.435 -0.821 -0.872 1.525 -1.178 1.932 1.058 - 333.50 13.167 13.186 13.222 0.707 -0.964 1.055 0.707 -0.964 -1.017 0.746 -0.682 1.271 0.717 - 333.55 12.876 12.900 12.908 0.794 -0.443 0.763 0.794 -0.443 -0.338 0.606 -0.352 0.705 0.389 - 333.60 12.640 12.647 12.648 0.402 -0.163 0.528 0.402 -0.163 -0.086 0.212 -0.066 0.233 0.119 - 333.65 12.728 12.740 12.744 0.556 -0.312 0.615 0.556 -0.312 -0.192 0.342 -0.173 0.392 0.214 - 333.70 13.015 13.030 13.032 0.640 -0.226 0.902 0.640 -0.226 -0.204 0.578 -0.145 0.637 0.315 - 333.75 13.350 13.368 13.371 0.684 -0.292 1.237 0.684 -0.292 -0.362 0.846 -0.200 1.042 0.471 - 333.80 13.310 13.343 13.354 0.944 -0.540 1.197 0.944 -0.540 -0.646 1.130 -0.510 1.308 0.699 - 333.85 13.098 13.119 13.119 0.737 0.067 0.985 0.737 0.067 0.066 0.726 0.049 0.759 0.365 - 333.90 13.268 13.299 13.300 0.919 0.134 1.155 0.919 0.134 0.155 1.061 0.123 1.098 0.540 - 333.95 13.323 13.358 13.358 0.974 -0.058 1.210 0.974 -0.058 -0.070 1.178 -0.056 1.208 0.591 - 334.00 13.107 13.143 13.144 0.967 0.153 0.994 0.967 0.153 0.152 0.962 0.148 0.974 0.492 - 334.05 13.198 13.220 13.220 0.754 0.072 1.085 0.754 0.072 0.079 0.818 0.055 0.876 0.412 - 334.10 12.972 12.978 12.989 0.384 0.522 0.860 0.384 0.522 0.449 0.330 0.200 0.579 0.296 - 334.15 12.835 12.851 12.864 0.653 0.575 0.722 0.653 0.575 0.415 0.472 0.376 0.639 0.366 - 334.20 12.967 12.980 12.986 0.586 0.387 0.854 0.586 0.387 0.330 0.500 0.227 0.611 0.320 - 334.25 12.782 12.823 12.837 1.027 0.601 0.669 1.027 0.601 0.402 0.687 0.617 0.931 0.503 - 334.30 12.827 12.866 12.867 0.998 0.183 0.714 0.998 0.183 0.131 0.713 0.183 0.770 0.374 - 334.35 12.735 12.791 12.795 1.190 0.342 0.622 1.190 0.342 0.213 0.741 0.407 0.960 0.436 - 334.40 12.690 12.764 12.767 1.370 0.283 0.577 1.370 0.283 0.163 0.791 0.388 1.145 0.448 - 334.45 12.613 12.661 12.667 1.103 0.365 0.500 1.103 0.365 0.183 0.552 0.403 0.800 0.354 - 334.50 12.764 12.793 12.807 0.859 0.605 0.651 0.859 0.605 0.394 0.559 0.520 0.764 0.430 - 334.55 12.821 12.872 12.874 1.144 0.195 0.708 1.144 0.195 0.138 0.811 0.223 0.925 0.426 - 334.60 12.765 12.836 12.847 1.355 0.518 0.652 1.355 0.518 0.338 0.883 0.702 1.265 0.589 - 334.65 12.989 13.060 13.070 1.357 0.510 0.876 1.357 0.510 0.447 1.189 0.692 1.435 0.723 - 334.70 13.224 13.305 13.308 1.463 0.294 1.111 1.463 0.294 0.326 1.625 0.430 1.730 0.856 - 334.75 13.308 13.373 13.373 1.311 0.038 1.196 1.311 0.038 0.045 1.568 0.050 1.575 0.785 - 334.80 13.278 13.374 13.380 1.596 0.411 1.165 1.596 0.411 0.479 1.860 0.656 2.037 1.015 - 334.85 13.708 13.831 13.831 1.845 0.094 1.595 1.845 0.094 0.150 2.942 0.173 2.978 1.475 - 334.90 13.601 13.704 13.705 1.681 -0.099 1.488 1.681 -0.099 -0.148 2.501 -0.167 2.524 1.255 - 334.95 13.613 13.689 13.691 1.438 -0.263 1.500 1.438 -0.263 -0.394 2.157 -0.378 2.193 1.112 - 335.00 13.414 13.487 13.506 1.401 -0.705 1.302 1.401 -0.705 -0.918 1.823 -0.988 2.076 1.134 - 335.05 13.354 13.430 13.450 1.427 -0.724 1.241 1.427 -0.724 -0.899 1.771 -1.033 2.050 1.119 - 335.10 13.404 13.425 13.456 0.745 -0.915 1.291 0.745 -0.915 -1.182 0.961 -0.681 1.530 0.834 - 335.15 13.335 13.344 13.362 0.483 -0.697 1.222 0.483 -0.697 -0.852 0.590 -0.337 1.106 0.545 - 335.20 13.303 13.320 13.331 0.661 -0.538 1.190 0.661 -0.538 -0.641 0.787 -0.355 1.072 0.537 - 335.25 13.269 13.275 13.284 0.394 -0.474 1.157 0.394 -0.474 -0.548 0.456 -0.187 0.859 0.369 - 335.30 13.385 13.395 13.406 0.500 -0.541 1.273 0.500 -0.541 -0.688 0.637 -0.271 1.081 0.488 - 335.35 13.292 13.317 13.327 0.819 -0.523 1.179 0.819 -0.523 -0.617 0.965 -0.428 1.167 0.611 - 335.40 13.041 13.081 13.092 1.022 -0.534 0.929 1.022 -0.534 -0.496 0.949 -0.545 1.096 0.601 - 335.45 13.337 13.379 13.395 1.060 -0.666 1.224 1.060 -0.666 -0.816 1.297 -0.706 1.533 0.844 - 335.50 13.311 13.368 13.385 1.232 -0.673 1.198 1.232 -0.673 -0.807 1.475 -0.829 1.703 0.937 - 335.55 13.184 13.221 13.233 0.991 -0.570 1.071 0.991 -0.570 -0.611 1.061 -0.565 1.227 0.674 - 335.60 13.088 13.135 13.137 1.115 -0.225 0.975 1.115 -0.225 -0.219 1.087 -0.251 1.122 0.568 - 335.65 13.212 13.263 13.263 1.154 0.053 1.099 1.154 0.053 0.058 1.269 0.061 1.271 0.636 - 335.70 13.047 13.085 13.085 1.001 -0.057 0.934 1.001 -0.057 -0.053 0.935 -0.057 0.939 0.469 - 335.75 13.181 13.220 13.220 1.004 -0.091 1.069 1.004 -0.091 -0.097 1.073 -0.091 1.079 0.541 - 335.80 13.276 13.314 13.323 1.002 -0.494 1.164 1.002 -0.494 -0.575 1.166 -0.495 1.301 0.695 - 335.85 13.491 13.521 13.521 0.889 -0.020 1.379 0.889 -0.020 -0.027 1.226 -0.018 1.346 0.613 - 335.90 13.334 13.375 13.389 1.050 0.610 1.221 1.050 0.610 0.745 1.282 0.640 1.483 0.808 - 335.95 13.866 13.892 13.898 0.850 0.393 1.754 0.850 0.393 0.689 1.490 0.334 1.976 0.838 - 336.00 14.243 14.261 14.267 0.713 0.405 2.131 0.713 0.405 0.863 1.518 0.289 2.606 0.885 - 336.05 14.219 14.245 14.248 0.853 0.328 2.106 0.853 0.328 0.692 1.797 0.280 2.636 0.973 - 336.10 14.179 14.191 14.201 0.576 0.536 2.067 0.576 0.536 1.108 1.190 0.309 2.445 0.827 - 336.15 14.237 14.243 14.245 0.435 0.191 2.124 0.435 0.191 0.407 0.925 0.083 2.369 0.507 - 336.20 14.572 14.580 14.581 0.483 0.095 2.460 0.483 0.095 0.235 1.187 0.046 3.146 0.606 - 336.25 14.701 14.702 14.702 0.165 0.055 2.588 0.165 0.055 0.142 0.428 0.009 3.364 0.225 - 336.30 14.587 14.589 14.590 0.239 0.174 2.474 0.239 0.174 0.430 0.592 0.042 3.104 0.366 - 336.35 14.725 14.725 14.725 0.107 -0.076 2.612 0.107 -0.076 -0.199 0.279 -0.008 3.420 0.171 - 336.40 14.887 14.889 14.890 0.212 -0.228 2.774 0.212 -0.228 -0.633 0.588 -0.048 3.897 0.432 - 336.45 14.836 14.836 14.837 -0.036 -0.154 2.724 -0.036 -0.154 -0.419 -0.097 0.005 3.721 0.215 - 336.50 14.848 14.849 14.853 -0.179 -0.362 2.735 -0.179 -0.362 -0.989 -0.490 0.065 3.821 0.553 - 336.55 14.364 14.365 14.366 0.173 -0.207 2.251 0.173 -0.207 -0.466 0.389 -0.036 2.570 0.304 - 336.60 14.014 14.021 14.021 0.434 0.145 1.901 0.434 0.145 0.276 0.824 0.063 1.912 0.436 - 336.65 13.790 13.795 13.795 0.361 0.119 1.677 0.361 0.119 0.200 0.605 0.043 1.479 0.319 - 336.70 13.526 13.537 13.537 0.544 0.113 1.413 0.544 0.113 0.160 0.769 0.062 1.152 0.394 - 336.75 13.470 13.483 13.483 0.592 0.017 1.357 0.592 0.017 0.023 0.803 0.010 1.097 0.402 - 336.80 13.832 13.848 13.851 0.661 0.296 1.720 0.661 0.296 0.508 1.137 0.195 1.741 0.630 - 336.85 13.665 13.691 13.702 0.846 0.537 1.552 0.846 0.537 0.833 1.314 0.454 1.707 0.810 - 336.90 13.807 13.831 13.833 0.819 0.218 1.694 0.819 0.218 0.369 1.387 0.178 1.793 0.723 - 336.95 13.995 14.005 14.005 0.542 0.044 1.882 0.542 0.044 0.083 1.019 0.024 1.918 0.511 - 337.00 14.082 14.082 14.084 -0.039 -0.229 1.970 -0.039 -0.229 -0.451 -0.076 0.009 1.967 0.229 - 337.05 13.835 13.835 13.842 -0.130 -0.443 1.722 -0.130 -0.443 -0.762 -0.223 0.057 1.589 0.398 - 337.10 13.743 13.743 13.746 0.021 -0.283 1.631 0.021 -0.283 -0.461 0.035 -0.006 1.370 0.231 - 337.15 13.480 13.480 13.490 -0.054 -0.513 1.367 -0.054 -0.513 -0.702 -0.073 0.028 1.067 0.353 - 337.20 13.603 13.604 13.610 -0.167 -0.401 1.491 -0.167 -0.401 -0.598 -0.250 0.067 1.206 0.326 - 337.25 13.832 13.832 13.836 -0.003 -0.339 1.719 -0.003 -0.339 -0.583 -0.005 0.001 1.535 0.292 - 337.30 13.713 13.714 13.720 -0.173 -0.419 1.600 -0.173 -0.419 -0.670 -0.277 0.072 1.382 0.364 - 337.35 13.854 13.855 13.886 -0.151 -0.936 1.741 -0.151 -0.936 -1.630 -0.262 0.141 1.966 0.829 - 337.40 13.889 13.899 13.934 -0.529 -0.993 1.776 -0.529 -0.993 -1.764 -0.940 0.526 2.211 1.033 - 337.45 13.848 13.864 13.892 -0.665 -0.871 1.736 -0.665 -0.871 -1.511 -1.154 0.579 2.106 0.994 - 337.50 13.718 13.740 13.784 -0.778 -1.094 1.605 -0.778 -1.094 -1.756 -1.249 0.851 2.189 1.158 - 337.55 13.185 13.195 13.250 -0.517 -1.199 1.072 -0.517 -1.199 -1.286 -0.555 0.621 1.428 0.766 - 337.60 12.906 12.914 12.935 -0.455 -0.732 0.793 -0.455 -0.732 -0.581 -0.361 0.333 0.686 0.380 - 337.65 12.907 12.935 12.955 -0.852 -0.707 0.794 -0.852 -0.707 -0.562 -0.677 0.602 0.928 0.533 - 337.70 12.942 12.978 13.008 -0.956 -0.886 0.829 -0.956 -0.886 -0.735 -0.793 0.847 1.193 0.687 - 337.75 13.145 13.181 13.204 -0.964 -0.789 1.032 -0.964 -0.789 -0.814 -0.995 0.760 1.309 0.747 - 337.80 12.869 12.892 12.911 -0.765 -0.697 0.756 -0.765 -0.697 -0.527 -0.579 0.533 0.821 0.473 - 337.85 13.046 13.047 13.068 -0.197 -0.742 0.933 -0.197 -0.742 -0.692 -0.184 0.146 0.730 0.366 - 337.90 13.159 13.164 13.192 -0.379 -0.849 1.046 -0.379 -0.849 -0.888 -0.396 0.321 0.979 0.512 - 337.95 13.170 13.174 13.231 -0.331 -1.223 1.057 -0.331 -1.223 -1.293 -0.350 0.405 1.362 0.700 - 338.00 13.108 13.109 13.161 -0.191 -1.174 0.995 -0.191 -1.174 -1.167 -0.190 0.224 1.202 0.602 - 338.05 13.244 13.250 13.299 -0.386 -1.143 1.131 -0.386 -1.143 -1.293 -0.437 0.442 1.367 0.717 - 338.10 13.052 13.070 13.104 -0.694 -0.942 0.939 -0.694 -0.942 -0.885 -0.652 0.654 1.126 0.639 - 338.15 12.923 12.969 13.004 -1.091 -0.958 0.810 -1.091 -0.958 -0.776 -0.884 1.045 1.382 0.787 - 338.20 13.107 13.141 13.180 -0.938 -1.014 0.995 -0.938 -1.014 -1.009 -0.933 0.951 1.449 0.836 - 338.25 13.259 13.272 13.314 -0.568 -1.058 1.147 -0.568 -1.058 -1.213 -0.651 0.601 1.379 0.751 - 338.30 13.199 13.202 13.252 -0.293 -1.151 1.086 -0.293 -1.151 -1.250 -0.318 0.337 1.295 0.667 - 338.35 13.380 13.384 13.422 -0.313 -1.013 1.268 -0.313 -1.013 -1.285 -0.397 0.317 1.366 0.691 - 338.40 13.364 13.367 13.403 -0.274 -0.983 1.251 -0.274 -0.983 -1.230 -0.343 0.270 1.303 0.652 - 338.45 13.122 13.123 13.142 -0.175 -0.700 1.009 -0.175 -0.700 -0.706 -0.176 0.122 0.769 0.369 - 338.50 12.975 12.977 12.998 0.236 -0.742 0.862 0.236 -0.742 -0.640 0.203 -0.175 0.675 0.347 - 338.55 13.066 13.071 13.091 0.365 -0.728 0.953 0.365 -0.728 -0.694 0.348 -0.266 0.786 0.410 - 338.60 12.994 12.996 13.010 0.186 -0.607 0.881 0.186 -0.607 -0.535 0.164 -0.113 0.590 0.285 - 338.65 13.146 13.146 13.173 0.128 -0.834 1.033 0.128 -0.834 -0.861 0.133 -0.107 0.889 0.439 - 338.70 13.064 13.064 13.097 -0.058 -0.917 0.951 -0.058 -0.917 -0.872 -0.055 0.053 0.875 0.438 - 338.75 13.043 13.043 13.078 0.003 -0.954 0.931 0.003 -0.954 -0.888 0.002 -0.002 0.888 0.444 - 338.80 13.182 13.186 13.219 0.317 -0.941 1.069 0.317 -0.941 -1.006 0.339 -0.299 1.065 0.552 - 338.85 13.182 13.183 13.207 0.120 -0.801 1.069 0.120 -0.801 -0.856 0.129 -0.096 0.900 0.436 - 338.90 13.312 13.313 13.333 -0.113 -0.735 1.199 -0.113 -0.735 -0.882 -0.136 0.083 0.996 0.448 - 338.95 13.294 13.300 13.338 -0.402 -1.012 1.181 -0.402 -1.012 -1.195 -0.475 0.407 1.290 0.675 - 339.00 12.994 13.001 13.030 -0.449 -0.863 0.881 -0.449 -0.863 -0.761 -0.396 0.388 0.862 0.470 - 339.05 12.935 12.937 12.953 -0.255 -0.645 0.822 -0.255 -0.645 -0.530 -0.209 0.164 0.578 0.297 - 339.10 13.060 13.068 13.089 -0.479 -0.727 0.947 -0.479 -0.727 -0.688 -0.453 0.348 0.827 0.447 - 339.15 13.470 13.476 13.488 -0.388 -0.561 1.358 -0.388 -0.561 -0.761 -0.527 0.218 1.154 0.476 - 339.20 13.449 13.456 13.483 -0.440 -0.850 1.336 -0.440 -0.850 -1.137 -0.588 0.374 1.351 0.667 - 339.25 13.209 13.223 13.242 -0.613 -0.698 1.096 -0.613 -0.698 -0.766 -0.672 0.428 1.033 0.553 - 339.30 13.070 13.082 13.099 -0.575 -0.649 0.957 -0.575 -0.649 -0.621 -0.550 0.373 0.833 0.455 - 339.35 13.125 13.136 13.163 -0.537 -0.844 1.012 -0.537 -0.844 -0.854 -0.543 0.453 1.012 0.554 - 339.40 12.966 12.978 13.020 -0.553 -1.048 0.853 -0.553 -1.048 -0.894 -0.472 0.580 1.066 0.583 - 339.45 12.751 12.756 12.768 -0.326 -0.552 0.639 -0.326 -0.552 -0.352 -0.208 0.180 0.409 0.224 - 339.50 12.644 12.644 12.664 -0.009 -0.728 0.531 -0.009 -0.728 -0.387 -0.005 0.006 0.406 0.193 - 339.55 12.662 12.663 12.687 -0.126 -0.781 0.549 -0.126 -0.781 -0.429 -0.069 0.098 0.464 0.223 - 339.60 12.535 12.535 12.552 -0.001 -0.664 0.422 -0.001 -0.664 -0.280 -0.000 0.001 0.310 0.140 - 339.65 12.776 12.778 12.817 0.201 -0.997 0.664 0.201 -0.997 -0.662 0.133 -0.200 0.737 0.352 - 339.70 13.011 13.015 13.048 0.343 -0.917 0.898 0.343 -0.917 -0.824 0.308 -0.315 0.883 0.467 - 339.75 13.072 13.075 13.113 0.299 -0.996 0.959 0.299 -0.996 -0.955 0.286 -0.297 1.000 0.520 - 339.80 12.900 12.911 12.987 0.528 -1.400 0.787 0.528 -1.400 -1.102 0.416 -0.740 1.430 0.696 - 339.85 12.870 12.870 12.921 -0.078 -1.143 0.757 -0.078 -1.143 -0.865 -0.059 0.089 0.943 0.436 - 339.90 12.750 12.750 12.797 0.022 -1.096 0.637 0.022 -1.096 -0.698 0.014 -0.024 0.804 0.349 - 339.95 12.682 12.684 12.747 -0.221 -1.262 0.570 -0.221 -1.262 -0.719 -0.126 0.279 0.983 0.391 - 340.00 12.771 12.774 12.844 -0.289 -1.335 0.658 -0.289 -1.335 -0.878 -0.190 0.386 1.149 0.489 - 340.05 12.625 12.625 12.666 -0.035 -1.022 0.512 -0.035 -1.022 -0.523 -0.018 0.036 0.654 0.262 - 340.10 12.678 12.678 12.717 -0.074 -0.990 0.565 -0.074 -0.990 -0.560 -0.042 0.073 0.653 0.283 - 340.15 12.951 12.952 12.978 -0.202 -0.820 0.838 -0.202 -0.820 -0.687 -0.169 0.166 0.708 0.363 - 340.20 13.120 13.123 13.135 -0.303 -0.555 1.007 -0.303 -0.555 -0.559 -0.305 0.168 0.707 0.330 - 340.25 13.379 13.380 13.398 -0.149 -0.699 1.266 -0.149 -0.699 -0.885 -0.189 0.104 1.057 0.456 - 340.30 13.442 13.445 13.451 -0.303 -0.398 1.329 -0.303 -0.398 -0.529 -0.402 0.120 1.008 0.338 - 340.35 13.439 13.452 13.454 -0.591 -0.218 1.326 -0.591 -0.218 -0.289 -0.784 0.129 1.078 0.423 - 340.40 13.192 13.208 13.212 -0.657 -0.333 1.079 -0.657 -0.333 -0.359 -0.709 0.219 0.853 0.412 - 340.45 13.378 13.391 13.410 -0.582 -0.710 1.266 -0.582 -0.710 -0.899 -0.736 0.413 1.222 0.617 - 340.50 13.127 13.146 13.200 -0.710 -1.197 1.014 -0.710 -1.197 -1.214 -0.720 0.850 1.482 0.824 - 340.55 13.049 13.061 13.121 -0.553 -1.261 0.936 -0.553 -1.261 -1.180 -0.517 0.697 1.385 0.732 - 340.60 13.298 13.307 13.374 -0.499 -1.335 1.185 -0.499 -1.335 -1.581 -0.591 0.666 1.717 0.907 - 340.65 13.393 13.396 13.474 -0.289 -1.445 1.280 -0.289 -1.445 -1.850 -0.370 0.418 1.905 0.966 - 340.70 13.430 13.430 13.463 -0.077 -0.942 1.317 -0.077 -0.942 -1.241 -0.102 0.073 1.314 0.624 - 340.75 13.070 13.071 13.087 0.121 -0.658 0.957 0.121 -0.658 -0.629 0.115 -0.079 0.682 0.322 - 340.80 12.993 12.994 13.038 0.139 -1.074 0.880 0.139 -1.074 -0.946 0.122 -0.149 0.974 0.483 - 340.85 13.025 13.030 13.082 0.378 -1.161 0.912 0.378 -1.161 -1.059 0.344 -0.439 1.161 0.598 - 340.90 13.058 13.069 13.114 0.518 -1.086 0.946 0.518 -1.086 -1.027 0.490 -0.562 1.170 0.634 - 340.95 12.899 12.907 12.985 0.455 -1.420 0.786 0.455 -1.420 -1.116 0.358 -0.647 1.421 0.669 - 341.00 12.758 12.771 12.816 0.577 -1.081 0.645 0.577 -1.081 -0.697 0.372 -0.624 0.959 0.504 - 341.05 12.646 12.657 12.679 0.526 -0.749 0.533 0.526 -0.749 -0.400 0.281 -0.394 0.561 0.314 - 341.10 12.660 12.663 12.713 0.294 -1.128 0.547 0.294 -1.128 -0.617 0.161 -0.331 0.828 0.359 - 341.15 12.878 12.879 12.988 0.159 -1.681 0.765 0.159 -1.681 -1.287 0.122 -0.268 1.719 0.660 - 341.20 13.000 13.000 13.133 -0.087 -1.865 0.887 -0.087 -1.865 -1.654 -0.077 0.161 2.136 0.832 - 341.25 12.935 12.936 13.057 -0.123 -1.776 0.823 -0.123 -1.776 -1.461 -0.102 0.219 1.923 0.740 - 341.30 13.011 13.011 13.116 -0.025 -1.656 0.899 -0.025 -1.656 -1.488 -0.022 0.041 1.775 0.744 - 341.35 13.118 13.121 13.201 -0.247 -1.452 1.005 -0.247 -1.452 -1.460 -0.249 0.359 1.590 0.762 - 341.40 13.006 13.010 13.133 -0.325 -1.788 0.894 -0.325 -1.788 -1.598 -0.291 0.582 2.051 0.863 - 341.45 12.678 12.678 12.800 0.094 -1.763 0.565 0.094 -1.763 -0.996 0.053 -0.165 1.718 0.505 - 341.50 12.598 12.599 12.662 0.155 -1.266 0.485 0.155 -1.266 -0.614 0.075 -0.196 0.931 0.325 - 341.55 12.285 12.286 12.323 0.160 -0.949 0.172 0.160 -0.949 -0.163 0.028 -0.152 0.478 0.113 - 341.60 12.716 12.717 12.750 0.144 -0.916 0.604 0.144 -0.916 -0.553 0.087 -0.132 0.612 0.287 - 341.65 13.161 13.168 13.207 0.422 -1.017 1.048 0.422 -1.017 -1.066 0.443 -0.429 1.156 0.616 - 341.70 13.043 13.065 13.094 0.750 -0.880 0.930 0.750 -0.880 -0.819 0.698 -0.660 1.101 0.631 - 341.75 12.972 12.996 13.031 0.794 -0.954 0.859 0.794 -0.954 -0.820 0.682 -0.758 1.139 0.654 - 341.80 13.065 13.069 13.134 0.341 -1.307 0.952 0.341 -1.307 -1.244 0.324 -0.445 1.365 0.680 - 341.85 12.943 12.944 13.002 0.160 -1.229 0.830 0.160 -1.229 -1.020 0.132 -0.196 1.113 0.524 - 341.90 13.003 13.010 13.086 0.417 -1.410 0.891 0.417 -1.410 -1.256 0.372 -0.588 1.477 0.718 - 341.95 13.057 13.057 13.124 0.077 -1.324 0.944 0.077 -1.324 -1.250 0.072 -0.102 1.325 0.628 - 342.00 13.032 13.032 13.093 0.046 -1.264 0.919 0.046 -1.264 -1.161 0.042 -0.058 1.221 0.582 - 342.05 13.141 13.144 13.228 0.275 -1.487 1.028 0.275 -1.487 -1.529 0.283 -0.409 1.672 0.804 - 342.10 13.097 13.097 13.120 0.024 -0.777 0.984 0.024 -0.777 -0.764 0.024 -0.019 0.786 0.382 - 342.15 13.396 13.396 13.427 0.085 -0.910 1.283 0.085 -0.910 -1.168 0.109 -0.078 1.241 0.588 - 342.20 13.455 13.456 13.468 0.187 -0.573 1.342 0.187 -0.573 -0.768 0.251 -0.107 1.082 0.408 - 342.25 13.189 13.190 13.200 0.121 -0.514 1.076 0.121 -0.514 -0.553 0.130 -0.062 0.718 0.286 - 342.30 13.411 13.414 13.421 0.318 -0.408 1.298 0.318 -0.408 -0.529 0.413 -0.130 0.976 0.342 - 342.35 13.269 13.278 13.282 0.483 -0.331 1.156 0.483 -0.331 -0.383 0.559 -0.160 0.840 0.348 - 342.40 13.313 13.316 13.316 0.294 -0.127 1.200 0.294 -0.127 -0.152 0.353 -0.037 0.771 0.193 - 342.45 13.325 13.329 13.331 0.327 0.244 1.212 0.327 0.244 0.295 0.397 0.080 0.818 0.250 - 342.50 13.178 13.182 13.187 0.320 0.368 1.066 0.320 0.368 0.392 0.341 0.118 0.687 0.266 - 342.55 13.173 13.189 13.193 0.637 0.318 1.061 0.637 0.318 0.337 0.676 0.203 0.816 0.391 - 342.60 13.354 13.377 13.379 0.784 -0.186 1.242 0.784 -0.186 -0.230 0.973 -0.145 1.095 0.505 - 342.65 13.167 13.193 13.206 0.822 -0.597 1.054 0.822 -0.597 -0.629 0.867 -0.491 1.071 0.589 - 342.70 13.548 13.575 13.595 0.849 -0.730 1.436 0.849 -0.730 -1.048 1.219 -0.620 1.658 0.862 - 342.75 13.581 13.606 13.609 0.822 -0.259 1.469 0.822 -0.259 -0.380 1.207 -0.213 1.450 0.642 - 342.80 12.995 13.017 13.020 0.752 -0.283 0.883 0.752 -0.283 -0.250 0.664 -0.213 0.712 0.370 - 342.85 13.059 13.070 13.072 0.549 -0.199 0.946 0.549 -0.199 -0.189 0.519 -0.109 0.618 0.282 - 342.90 13.209 13.219 13.219 0.510 -0.037 1.096 0.510 -0.037 -0.041 0.559 -0.019 0.732 0.280 - 342.95 13.598 13.605 13.611 0.414 -0.402 1.486 0.414 -0.402 -0.597 0.615 -0.166 1.270 0.436 - 343.00 13.335 13.340 13.340 0.380 0.055 1.222 0.380 0.055 0.068 0.465 0.021 0.820 0.235 - 343.05 13.118 13.125 13.130 0.424 0.366 1.005 0.424 0.366 0.368 0.426 0.155 0.662 0.292 - 343.10 13.329 13.332 13.334 0.270 0.224 1.217 0.270 0.224 0.272 0.329 0.060 0.802 0.216 - 343.15 13.491 13.493 13.496 0.264 0.247 1.378 0.264 0.247 0.341 0.364 0.065 1.015 0.252 - 343.20 13.554 13.556 13.560 0.189 0.339 1.441 0.189 0.339 0.488 0.273 0.064 1.114 0.281 - 343.25 13.641 13.641 13.641 -0.019 0.056 1.528 -0.019 0.056 0.085 -0.028 -0.001 1.170 0.045 - 343.30 13.532 13.532 13.537 -0.060 0.343 1.419 -0.060 0.343 0.487 -0.085 -0.020 1.068 0.247 - 343.35 13.385 13.385 13.385 -0.096 -0.079 1.272 -0.096 -0.079 -0.101 -0.122 0.008 0.817 0.079 - 343.40 13.681 13.683 13.684 0.255 -0.179 1.568 0.255 -0.179 -0.281 0.399 -0.046 1.278 0.245 - 343.45 13.401 13.405 13.405 0.300 -0.040 1.289 0.300 -0.040 -0.052 0.387 -0.012 0.876 0.195 - 343.50 13.355 13.360 13.360 0.364 -0.018 1.242 0.364 -0.018 -0.023 0.451 -0.007 0.837 0.226 - 343.55 13.385 13.390 13.390 0.354 -0.037 1.272 0.354 -0.037 -0.047 0.451 -0.013 0.873 0.227 - 343.60 13.256 13.256 13.256 -0.005 0.155 1.143 -0.005 0.155 0.177 -0.005 -0.001 0.665 0.088 - 343.65 13.592 13.595 13.597 -0.252 0.233 1.480 -0.252 0.233 0.345 -0.372 -0.059 1.154 0.255 - 343.70 13.572 13.574 13.574 -0.209 0.130 1.459 -0.209 0.130 0.189 -0.306 -0.027 1.095 0.180 - 343.75 13.672 13.677 13.681 -0.378 0.337 1.559 -0.378 0.337 0.525 -0.590 -0.128 1.344 0.400 - 343.80 13.675 13.694 13.697 -0.722 0.268 1.562 -0.722 0.268 0.419 -1.128 -0.194 1.517 0.609 - 343.85 13.617 13.630 13.634 -0.597 0.338 1.504 -0.597 0.338 0.508 -0.897 -0.202 1.366 0.525 - 343.90 13.603 13.611 13.625 -0.460 0.633 1.490 -0.460 0.633 0.943 -0.685 -0.291 1.416 0.600 - 343.95 13.315 13.323 13.331 -0.467 0.468 1.202 -0.467 0.468 0.562 -0.561 -0.219 0.941 0.412 - 344.00 13.284 13.293 13.300 -0.483 0.447 1.171 -0.483 0.447 0.524 -0.566 -0.216 0.903 0.401 - 344.05 13.045 13.066 13.110 -0.736 1.075 0.932 -0.736 1.075 1.002 -0.686 -0.791 1.283 0.725 - 344.10 13.289 13.294 13.315 -0.386 0.736 1.176 -0.386 0.736 0.865 -0.454 -0.284 1.037 0.509 - 344.15 13.406 13.413 13.430 -0.424 0.683 1.293 -0.424 0.683 0.883 -0.549 -0.290 1.159 0.540 - 344.20 13.356 13.388 13.427 -0.925 1.012 1.244 -0.925 1.012 1.259 -1.150 -0.936 1.713 0.972 - 344.25 13.518 13.548 13.583 -0.903 0.966 1.405 -0.903 0.966 1.357 -1.268 -0.872 1.861 1.026 - 344.30 13.523 13.532 13.552 -0.482 0.749 1.410 -0.482 0.749 1.056 -0.680 -0.361 1.391 0.654 - 344.35 13.403 13.430 13.465 -0.851 0.974 1.290 -0.851 0.974 1.256 -1.098 -0.828 1.668 0.931 - 344.40 13.501 13.513 13.543 -0.566 0.902 1.389 -0.566 0.902 1.253 -0.786 -0.511 1.531 0.782 - 344.45 13.624 13.630 13.639 -0.404 0.507 1.511 -0.404 0.507 0.766 -0.611 -0.205 1.352 0.501 - 344.50 13.434 13.442 13.448 -0.479 0.390 1.321 -0.479 0.390 0.515 -0.632 -0.187 1.063 0.418 - 344.55 13.467 13.479 13.480 -0.589 0.151 1.354 -0.589 0.151 0.204 -0.797 -0.089 1.101 0.414 - 344.60 13.601 13.607 13.608 -0.430 0.158 1.488 -0.430 0.158 0.235 -0.639 -0.068 1.212 0.342 - 344.65 13.603 13.624 13.627 -0.758 0.254 1.490 -0.758 0.254 0.379 -1.129 -0.192 1.430 0.603 - 344.70 13.644 13.653 13.653 -0.482 0.039 1.531 -0.482 0.039 0.060 -0.738 -0.019 1.289 0.370 - 344.75 13.511 13.511 13.511 -0.057 0.026 1.398 -0.057 0.026 0.036 -0.080 -0.001 0.980 0.044 - 344.80 13.144 13.144 13.146 0.046 0.186 1.032 0.046 0.186 0.192 0.047 0.008 0.550 0.099 - 344.85 13.265 13.266 13.268 -0.201 0.209 1.152 -0.201 0.209 0.240 -0.231 -0.042 0.705 0.168 - 344.90 13.182 13.185 13.186 -0.321 0.091 1.069 -0.321 0.091 0.097 -0.343 -0.029 0.627 0.179 - 344.95 13.149 13.158 13.158 -0.492 0.044 1.036 -0.492 0.044 0.046 -0.510 -0.022 0.659 0.256 - 345.00 13.293 13.320 13.320 -0.846 -0.057 1.181 -0.846 -0.057 -0.067 -0.998 0.048 1.056 0.501 - 345.05 13.388 13.436 13.437 -1.143 -0.118 1.275 -1.143 -0.118 -0.151 -1.457 0.135 1.473 0.736 - 345.10 13.216 13.280 13.280 -1.300 0.095 1.103 -1.300 0.095 0.105 -1.434 -0.124 1.458 0.722 - 345.15 13.054 13.144 13.148 -1.533 0.338 0.941 -1.533 0.338 0.318 -1.442 -0.518 1.674 0.783 - 345.20 12.898 12.998 12.998 -1.610 -0.040 0.785 -1.610 -0.040 -0.031 -1.264 0.064 1.605 0.633 - 345.25 13.104 13.168 13.169 -1.297 -0.213 0.991 -1.297 -0.213 -0.211 -1.285 0.277 1.355 0.666 - 345.30 13.230 13.266 13.266 -0.974 0.007 1.117 -0.974 0.007 0.008 -1.089 -0.007 1.099 0.544 - 345.35 13.350 13.378 13.381 -0.854 -0.295 1.237 -0.854 -0.295 -0.365 -1.057 0.252 1.174 0.573 - 345.40 13.323 13.337 13.341 -0.621 -0.320 1.210 -0.621 -0.320 -0.387 -0.751 0.199 0.976 0.434 - 345.45 13.284 13.296 13.300 -0.556 -0.318 1.172 -0.556 -0.318 -0.372 -0.651 0.177 0.891 0.385 - 345.50 13.308 13.316 13.319 -0.475 -0.253 1.195 -0.475 -0.253 -0.302 -0.568 0.120 0.859 0.327 - 345.55 13.423 13.431 13.442 -0.478 -0.531 1.310 -0.478 -0.531 -0.696 -0.627 0.254 1.114 0.485 - 345.60 13.311 13.321 13.332 -0.509 -0.539 1.198 -0.509 -0.539 -0.645 -0.610 0.274 0.993 0.465 - 345.65 12.827 12.835 12.841 -0.443 -0.390 0.714 -0.443 -0.390 -0.279 -0.316 0.173 0.429 0.228 - 345.70 12.712 12.714 12.715 -0.222 -0.166 0.600 -0.222 -0.166 -0.099 -0.133 0.037 0.218 0.085 - 345.75 12.951 12.952 12.954 -0.135 -0.214 0.839 -0.135 -0.214 -0.180 -0.113 0.029 0.384 0.107 - 345.80 13.171 13.173 13.181 -0.220 -0.448 1.058 -0.220 -0.448 -0.474 -0.233 0.098 0.684 0.268 - 345.85 13.019 13.020 13.020 0.067 -0.140 0.907 0.067 -0.140 -0.127 0.060 -0.009 0.423 0.071 - 345.90 13.075 13.075 13.075 0.049 -0.118 0.962 0.049 -0.118 -0.114 0.047 -0.006 0.471 0.062 - 345.95 13.062 13.063 13.063 0.138 0.027 0.950 0.138 0.027 0.025 0.131 0.004 0.461 0.067 - 346.00 13.045 13.049 13.050 0.328 -0.182 0.932 0.328 -0.182 -0.169 0.306 -0.060 0.505 0.177 - 346.05 12.822 12.825 12.825 0.257 0.064 0.709 0.257 0.064 0.045 0.182 0.016 0.287 0.094 - 346.10 12.708 12.719 12.719 0.529 -0.056 0.595 0.529 -0.056 -0.033 0.315 -0.030 0.319 0.159 - 346.15 12.665 12.688 12.688 0.757 -0.004 0.553 0.757 -0.004 -0.002 0.418 -0.003 0.439 0.209 - 346.20 12.900 12.929 12.930 0.866 -0.174 0.787 0.866 -0.174 -0.137 0.681 -0.151 0.699 0.355 - 346.25 12.724 12.741 12.741 0.669 0.023 0.611 0.669 0.023 0.014 0.409 0.016 0.411 0.205 - 346.30 13.016 13.025 13.026 0.469 -0.152 0.903 0.469 -0.152 -0.137 0.424 -0.071 0.530 0.226 - 346.35 13.033 13.041 13.054 0.451 -0.592 0.920 0.451 -0.592 -0.545 0.415 -0.267 0.700 0.367 - 346.40 13.165 13.167 13.167 0.192 -0.117 1.052 0.192 -0.117 -0.123 0.202 -0.022 0.579 0.119 - 346.45 13.434 13.444 13.444 0.524 0.026 1.321 0.524 0.026 0.034 0.692 0.014 1.011 0.347 - 346.50 13.887 13.907 13.907 0.734 -0.114 1.774 0.734 -0.114 -0.202 1.303 -0.083 1.850 0.660 - 346.55 14.064 14.087 14.093 0.801 0.385 1.952 0.801 0.385 0.751 1.564 0.308 2.300 0.881 - 346.60 13.719 13.764 13.770 1.115 0.422 1.606 1.115 0.422 0.678 1.791 0.471 2.001 0.986 - 346.65 13.448 13.481 13.485 0.943 0.355 1.335 0.943 0.355 0.473 1.259 0.334 1.399 0.693 - 346.70 13.725 13.760 13.764 0.982 0.333 1.612 0.982 0.333 0.537 1.583 0.327 1.837 0.851 - 346.75 13.768 13.809 13.815 1.064 0.425 1.655 1.064 0.425 0.703 1.760 0.452 2.025 0.974 - 346.80 13.685 13.737 13.744 1.197 0.445 1.572 1.197 0.445 0.699 1.881 0.532 2.050 1.038 - 346.85 13.378 13.410 13.423 0.918 0.588 1.266 0.918 0.588 0.744 1.162 0.540 1.395 0.741 - 346.90 13.503 13.536 13.546 0.949 0.533 1.390 0.949 0.533 0.741 1.320 0.506 1.559 0.798 - 346.95 13.415 13.442 13.449 0.841 0.450 1.303 0.841 0.450 0.586 1.096 0.379 1.304 0.650 - 347.00 13.379 13.388 13.400 0.482 0.579 1.266 0.482 0.579 0.733 0.611 0.279 1.085 0.497 - 347.05 13.434 13.450 13.470 0.661 0.739 1.321 0.661 0.739 0.977 0.874 0.489 1.364 0.699 - 347.10 13.672 13.684 13.707 0.576 0.780 1.560 0.576 0.780 1.216 0.898 0.449 1.686 0.789 - 347.15 13.580 13.607 13.617 0.859 0.531 1.467 0.859 0.531 0.778 1.260 0.456 1.586 0.775 - 347.20 13.566 13.652 13.662 1.530 0.512 1.454 1.530 0.512 0.744 2.224 0.783 2.358 1.236 - 347.25 13.437 13.481 13.491 1.098 0.520 1.324 1.098 0.520 0.689 1.454 0.571 1.614 0.853 - 347.30 13.414 13.491 13.513 1.440 0.766 1.301 1.440 0.766 0.996 1.874 1.103 2.177 1.196 - 347.35 13.405 13.487 13.498 1.485 0.556 1.292 1.485 0.556 0.718 1.918 0.825 2.091 1.104 - 347.40 13.451 13.538 13.538 1.531 -0.039 1.339 1.531 -0.039 -0.052 2.050 -0.059 2.069 1.026 - 347.45 13.401 13.487 13.491 1.525 -0.305 1.288 1.525 -0.305 -0.393 1.964 -0.465 2.038 1.028 - 347.50 13.235 13.336 13.343 1.642 -0.415 1.122 1.642 -0.415 -0.466 1.843 -0.682 2.064 1.010 - 347.55 13.716 13.776 13.783 1.276 -0.465 1.603 1.276 -0.465 -0.746 2.046 -0.594 2.208 1.129 - 347.60 13.420 13.480 13.484 1.269 -0.327 1.307 1.269 -0.327 -0.428 1.659 -0.416 1.713 0.881 - 347.65 13.167 13.248 13.270 1.463 -0.765 1.054 1.463 -0.765 -0.806 1.542 -1.119 1.918 1.034 - 347.70 13.245 13.304 13.322 1.259 -0.683 1.132 1.259 -0.683 -0.773 1.425 -0.860 1.666 0.917 - 347.75 13.218 13.306 13.323 1.523 -0.673 1.106 1.523 -0.673 -0.744 1.684 -1.025 1.997 1.053 - 347.80 13.022 13.125 13.146 1.641 -0.756 0.909 1.641 -0.756 -0.687 1.491 -1.241 2.046 1.029 - 347.85 13.058 13.157 13.223 1.610 -1.315 0.945 1.610 -1.315 -1.243 1.522 -2.118 2.608 1.444 - 347.90 13.298 13.363 13.424 1.316 -1.281 1.185 1.316 -1.281 -1.518 1.560 -1.686 2.389 1.377 - 347.95 13.400 13.474 13.567 1.405 -1.588 1.288 1.405 -1.588 -2.044 1.810 -2.231 3.077 1.763 - 348.00 13.522 13.600 13.684 1.453 -1.508 1.410 1.453 -1.508 -2.126 2.048 -2.191 3.186 1.838 - 348.05 13.463 13.531 13.568 1.356 -1.010 1.350 1.356 -1.010 -1.363 1.831 -1.369 2.340 1.331 - 348.10 13.550 13.610 13.644 1.271 -0.971 1.437 1.271 -0.971 -1.396 1.827 -1.235 2.313 1.305 - 348.15 13.756 13.809 13.849 1.217 -1.049 1.643 1.217 -1.049 -1.723 1.999 -1.276 2.640 1.466 - 348.20 13.814 13.878 13.931 1.326 -1.218 1.701 1.326 -1.218 -2.072 2.256 -1.615 3.068 1.731 - 348.25 13.757 13.834 13.888 1.454 -1.225 1.645 1.454 -1.225 -2.015 2.391 -1.781 3.160 1.799 - 348.30 13.662 13.702 13.725 1.042 -0.793 1.550 1.042 -0.793 -1.229 1.614 -0.826 2.058 1.095 - 348.35 13.135 13.177 13.189 1.049 -0.558 1.023 1.049 -0.558 -0.571 1.073 -0.586 1.229 0.675 - 348.40 13.010 13.035 13.042 0.812 -0.425 0.897 0.812 -0.425 -0.381 0.729 -0.345 0.823 0.446 - 348.45 13.330 13.361 13.382 0.922 -0.737 1.217 0.922 -0.737 -0.897 1.122 -0.679 1.437 0.794 - 348.50 13.383 13.399 13.426 0.658 -0.857 1.270 0.658 -0.857 -1.088 0.835 -0.563 1.390 0.741 - 348.55 13.208 13.222 13.260 0.611 -0.993 1.095 0.611 -0.993 -1.088 0.669 -0.606 1.279 0.707 - 348.60 13.280 13.305 13.330 0.812 -0.822 1.167 0.812 -0.822 -0.959 0.948 -0.667 1.348 0.752 - 348.65 13.085 13.109 13.129 0.784 -0.736 0.972 0.784 -0.736 -0.716 0.762 -0.577 1.051 0.597 - 348.70 13.223 13.239 13.268 0.649 -0.866 1.111 0.649 -0.866 -0.961 0.721 -0.562 1.202 0.663 - 348.75 12.810 12.816 12.832 0.389 -0.648 0.697 0.389 -0.648 -0.452 0.271 -0.252 0.529 0.292 - 348.80 12.474 12.479 12.503 0.325 -0.774 0.362 0.325 -0.774 -0.280 0.118 -0.252 0.417 0.197 - 348.85 12.654 12.665 12.711 0.524 -1.080 0.541 0.524 -1.080 -0.585 0.284 -0.566 0.867 0.431 - 348.90 12.860 12.870 12.918 0.506 -1.115 0.748 0.506 -1.115 -0.833 0.378 -0.564 1.029 0.538 - 348.95 12.783 12.790 12.825 0.422 -0.954 0.670 0.422 -0.954 -0.640 0.283 -0.402 0.769 0.403 - 349.00 12.642 12.647 12.701 0.350 -1.175 0.529 0.350 -1.175 -0.622 0.185 -0.411 0.891 0.384 - 349.05 12.994 13.010 13.104 0.654 -1.570 0.881 0.654 -1.570 -1.383 0.576 -1.026 1.835 0.908 - 349.10 13.008 13.026 13.102 0.701 -1.405 0.895 0.701 -1.405 -1.257 0.627 -0.984 1.633 0.858 - 349.15 12.688 12.699 12.754 0.533 -1.180 0.575 0.533 -1.180 -0.679 0.307 -0.629 1.004 0.487 - 349.20 12.682 12.708 12.757 0.817 -1.109 0.569 0.817 -1.109 -0.631 0.465 -0.906 1.111 0.599 - 349.25 12.702 12.751 12.789 1.111 -0.995 0.589 1.111 -0.995 -0.586 0.655 -1.106 1.286 0.706 - 349.30 12.645 12.699 12.729 1.167 -0.871 0.532 1.167 -0.871 -0.463 0.621 -1.016 1.201 0.639 - 349.35 12.650 12.688 12.727 0.984 -0.991 0.537 0.984 -0.991 -0.532 0.529 -0.975 1.119 0.615 - 349.40 12.314 12.364 12.393 1.109 -0.843 0.201 1.109 -0.843 -0.170 0.224 -0.935 0.991 0.488 - 349.45 12.420 12.497 12.554 1.384 -1.195 0.307 1.384 -1.195 -0.367 0.425 -1.654 1.719 0.873 - 349.50 12.663 12.713 12.804 1.129 -1.527 0.550 1.129 -1.527 -0.840 0.621 -1.724 1.955 1.008 - 349.55 12.616 12.652 12.708 0.959 -1.191 0.503 0.959 -1.191 -0.600 0.482 -1.142 1.296 0.689 - 349.60 12.605 12.608 12.652 0.286 -1.060 0.492 0.286 -1.060 -0.521 0.141 -0.303 0.724 0.310 - 349.65 12.449 12.450 12.493 0.196 -1.026 0.336 0.196 -1.026 -0.345 0.066 -0.201 0.602 0.202 - 349.70 12.502 12.505 12.536 0.305 -0.883 0.389 0.305 -0.883 -0.343 0.119 -0.270 0.512 0.226 - 349.75 12.676 12.685 12.712 0.470 -0.824 0.563 0.470 -0.824 -0.464 0.265 -0.387 0.609 0.330 - 349.80 12.421 12.426 12.449 0.342 -0.759 0.308 0.342 -0.759 -0.234 0.105 -0.259 0.394 0.182 - 349.85 12.444 12.446 12.480 0.200 -0.916 0.332 0.200 -0.916 -0.304 0.066 -0.183 0.495 0.180 - 349.90 12.901 12.901 12.927 0.020 -0.822 0.788 0.020 -0.822 -0.647 0.016 -0.017 0.648 0.324 - 349.95 12.713 12.716 12.742 -0.247 -0.812 0.601 -0.247 -0.812 -0.488 -0.149 0.201 0.541 0.274 - 350.00 12.935 12.939 12.978 -0.300 -1.006 0.822 -0.300 -1.006 -0.827 -0.247 0.302 0.889 0.457 - 350.05 12.988 12.989 13.024 -0.170 -0.956 0.875 -0.170 -0.956 -0.837 -0.149 0.163 0.854 0.433 - 350.10 12.890 12.891 12.915 -0.144 -0.796 0.777 -0.144 -0.796 -0.619 -0.112 0.114 0.629 0.319 - 350.15 12.647 12.649 12.664 -0.258 -0.611 0.534 -0.258 -0.611 -0.326 -0.138 0.158 0.362 0.194 - 350.20 12.867 12.876 12.892 -0.470 -0.637 0.754 -0.470 -0.637 -0.481 -0.355 0.300 0.598 0.334 - 350.25 12.953 12.964 12.987 -0.541 -0.773 0.840 -0.541 -0.773 -0.650 -0.455 0.418 0.798 0.448 - 350.30 13.341 13.354 13.380 -0.575 -0.832 1.229 -0.575 -0.832 -1.022 -0.706 0.478 1.266 0.665 - 350.35 13.422 13.454 13.471 -0.922 -0.685 1.309 -0.922 -0.685 -0.897 -1.207 0.631 1.516 0.815 - 350.40 13.445 13.468 13.478 -0.783 -0.520 1.332 -0.783 -0.520 -0.692 -1.043 0.407 1.329 0.658 - 350.45 13.607 13.614 13.649 -0.442 -0.975 1.494 -0.442 -0.975 -1.457 -0.661 0.431 1.690 0.829 - 350.50 13.839 13.842 13.870 -0.310 -0.875 1.726 -0.310 -0.875 -1.510 -0.535 0.271 1.920 0.812 - 350.55 13.538 13.540 13.566 -0.235 -0.840 1.425 -0.235 -0.840 -1.198 -0.335 0.197 1.396 0.630 - 350.60 13.556 13.557 13.585 -0.091 -0.884 1.444 -0.091 -0.884 -1.277 -0.131 0.081 1.437 0.643 - 350.65 13.653 13.655 13.671 -0.270 -0.655 1.540 -0.270 -0.655 -1.009 -0.416 0.177 1.437 0.553 - 350.70 13.354 13.359 13.389 -0.368 -0.895 1.241 -0.368 -0.895 -1.111 -0.456 0.329 1.238 0.623 - 350.75 13.651 13.665 13.704 -0.616 -1.032 1.539 -0.616 -1.032 -1.588 -0.948 0.636 1.906 0.978 - 350.80 13.846 13.875 13.918 -0.902 -1.094 1.733 -0.902 -1.094 -1.897 -1.562 0.987 2.507 1.324 - 350.85 13.595 13.623 13.661 -0.870 -1.026 1.482 -0.870 -1.026 -1.521 -1.289 0.893 2.003 1.092 - 350.90 13.559 13.567 13.613 -0.480 -1.120 1.446 -0.480 -1.120 -1.619 -0.695 0.538 1.788 0.921 - 350.95 13.711 13.715 13.766 -0.342 -1.174 1.598 -0.342 -1.174 -1.876 -0.546 0.401 2.024 0.997 - 351.00 13.466 13.467 13.502 0.130 -0.977 1.353 0.130 -0.977 -1.323 0.175 -0.127 1.402 0.670 - 351.05 13.649 13.649 13.658 -0.001 -0.484 1.536 -0.001 -0.484 -0.743 -0.001 0.000 1.297 0.371 - 351.10 13.642 13.642 13.644 -0.065 0.227 1.529 -0.065 0.227 0.347 -0.099 -0.015 1.197 0.180 - 351.15 14.098 14.104 14.106 -0.408 -0.244 1.985 -0.408 -0.244 -0.485 -0.809 0.100 2.083 0.474 - 351.20 13.700 13.710 13.714 -0.525 -0.295 1.588 -0.525 -0.295 -0.469 -0.834 0.155 1.442 0.485 - 351.25 13.354 13.358 13.360 -0.318 0.232 1.242 -0.318 0.232 0.288 -0.394 -0.074 0.848 0.247 - 351.30 13.244 13.245 13.246 -0.208 0.149 1.131 -0.208 0.149 0.169 -0.235 -0.031 0.672 0.146 - 351.35 13.446 13.446 13.451 -0.007 0.362 1.334 -0.007 0.362 0.483 -0.009 -0.003 0.955 0.241 - 351.40 13.389 13.390 13.391 0.156 0.185 1.276 0.156 0.185 0.237 0.199 0.029 0.844 0.155 - 351.45 13.229 13.230 13.230 0.141 0.123 1.116 0.141 0.123 0.137 0.157 0.017 0.640 0.105 - 351.50 13.417 13.421 13.421 0.318 0.048 1.305 0.318 0.048 0.062 0.415 0.015 0.903 0.210 - 351.55 13.438 13.441 13.444 0.269 -0.290 1.325 0.269 -0.290 -0.384 0.357 -0.078 0.956 0.265 - 351.60 13.694 13.698 13.700 0.311 -0.242 1.581 0.311 -0.242 -0.382 0.491 -0.075 1.328 0.313 - 351.65 13.635 13.641 13.641 0.402 -0.093 1.522 0.402 -0.093 -0.141 0.613 -0.037 1.243 0.315 - 351.70 13.428 13.429 13.429 0.167 -0.017 1.315 0.167 -0.017 -0.023 0.219 -0.003 0.879 0.110 - 351.75 13.715 13.715 13.717 -0.053 -0.268 1.602 -0.053 -0.268 -0.430 -0.085 0.014 1.320 0.219 - 351.80 13.766 13.770 13.773 -0.339 -0.277 1.653 -0.339 -0.277 -0.459 -0.561 0.094 1.463 0.365 - 351.85 13.427 13.438 13.440 -0.528 0.243 1.315 -0.528 0.243 0.319 -0.694 -0.128 1.033 0.387 - 351.90 13.741 13.743 13.749 -0.213 0.403 1.628 -0.213 0.403 0.657 -0.347 -0.086 1.430 0.374 - 351.95 13.609 13.612 13.618 -0.315 0.388 1.496 -0.315 0.388 0.580 -0.471 -0.122 1.243 0.378 - 352.00 13.173 13.181 13.205 -0.461 0.784 1.060 -0.461 0.784 0.831 -0.489 -0.362 0.976 0.515 - 352.05 13.398 13.412 13.427 -0.616 0.635 1.285 -0.616 0.635 0.816 -0.792 -0.391 1.218 0.602 - 352.10 13.363 13.374 13.387 -0.537 0.595 1.251 -0.537 0.595 0.744 -0.672 -0.319 1.103 0.526 - 352.15 13.293 13.308 13.335 -0.620 0.848 1.181 -0.620 0.848 1.001 -0.732 -0.526 1.249 0.674 - 352.20 13.382 13.390 13.434 -0.468 1.083 1.269 -0.468 1.083 1.374 -0.594 -0.507 1.501 0.791 - 352.25 13.055 13.065 13.160 -0.531 1.574 0.942 -0.531 1.574 1.482 -0.500 -0.836 1.823 0.887 - 352.30 13.020 13.031 13.132 -0.520 1.633 0.907 -0.520 1.633 1.481 -0.472 -0.849 1.880 0.886 - 352.35 13.000 13.018 13.086 -0.676 1.334 0.888 -0.676 1.334 1.184 -0.600 -0.901 1.512 0.802 - 352.40 13.017 13.056 13.106 -1.012 1.135 0.904 -1.012 1.135 1.026 -0.915 -1.149 1.565 0.896 - 352.45 12.862 12.898 12.956 -0.960 1.221 0.749 -0.960 1.221 0.915 -0.720 -1.172 1.487 0.826 - 352.50 12.936 12.977 13.044 -1.032 1.319 0.823 -1.032 1.319 1.086 -0.850 -1.361 1.741 0.969 - 352.55 12.976 13.041 13.138 -1.308 1.587 0.863 -1.308 1.587 1.370 -1.129 -2.077 2.488 1.366 - 352.60 13.109 13.175 13.271 -1.310 1.595 0.997 -1.310 1.595 1.589 -1.305 -2.089 2.626 1.466 - 352.65 12.900 12.985 13.074 -1.489 1.519 0.787 -1.489 1.519 1.196 -1.171 -2.261 2.572 1.407 - 352.70 12.681 12.771 12.882 -1.516 1.685 0.568 -1.516 1.685 0.958 -0.861 -2.553 2.729 1.430 - 352.75 12.581 12.672 12.761 -1.515 1.502 0.468 -1.515 1.502 0.704 -0.710 -2.276 2.386 1.243 - 352.80 12.860 12.933 12.998 -1.366 1.297 0.748 -1.366 1.297 0.970 -1.021 -1.772 2.054 1.132 - 352.85 12.929 13.022 13.118 -1.548 1.585 0.817 -1.548 1.585 1.294 -1.264 -2.454 2.788 1.524 - 352.90 12.745 12.815 12.919 -1.341 1.632 0.632 -1.341 1.632 1.031 -0.847 -2.187 2.430 1.281 - 352.95 13.295 13.371 13.528 -1.430 2.055 1.182 -1.430 2.055 2.428 -1.690 -2.938 3.832 2.085 - 353.00 13.378 13.439 13.601 -1.274 2.094 1.265 -1.274 2.094 2.650 -1.612 -2.668 3.805 2.046 - 353.05 13.186 13.223 13.375 -0.984 2.011 1.073 -0.984 2.011 2.158 -1.056 -1.978 3.082 1.556 - 353.10 12.920 12.955 13.109 -0.961 2.002 0.807 -0.961 2.002 1.616 -0.775 -1.924 2.792 1.315 - 353.15 13.019 13.033 13.175 -0.598 1.930 0.906 -0.598 1.930 1.749 -0.542 -1.154 2.452 1.082 - 353.20 13.559 13.564 13.656 -0.355 1.585 1.447 -0.355 1.585 2.293 -0.514 -0.563 2.366 1.208 - 353.25 13.612 13.621 13.741 -0.486 1.812 1.500 -0.486 1.812 2.718 -0.729 -0.881 2.885 1.474 - 353.30 13.640 13.645 13.728 -0.353 1.514 1.527 -0.353 1.514 2.312 -0.540 -0.535 2.375 1.217 - 353.35 13.906 13.925 13.990 -0.728 1.344 1.793 -0.728 1.344 2.411 -1.305 -0.978 2.776 1.455 - 353.40 13.722 13.746 13.816 -0.798 1.397 1.610 -0.798 1.397 2.249 -1.285 -1.115 2.590 1.410 - 353.45 14.036 14.052 14.099 -0.684 1.149 1.923 -0.684 1.149 2.208 -1.314 -0.785 2.742 1.344 - 353.50 14.130 14.140 14.153 -0.548 0.596 2.017 -0.548 0.596 1.203 -1.106 -0.327 2.362 0.833 - 353.55 13.935 13.939 13.950 -0.305 0.552 1.822 -0.305 0.552 1.005 -0.555 -0.168 1.859 0.580 - 353.60 13.896 13.901 13.913 -0.377 0.573 1.783 -0.377 0.573 1.023 -0.671 -0.216 1.825 0.621 - 353.65 13.627 13.642 13.663 -0.648 0.767 1.514 -0.648 0.767 1.160 -0.981 -0.497 1.649 0.799 - 353.70 13.895 13.921 13.936 -0.858 0.636 1.782 -0.858 0.636 1.133 -1.529 -0.545 2.158 0.990 - 353.75 14.129 14.169 14.176 -1.071 0.435 2.016 -1.071 0.435 0.877 -2.160 -0.466 2.701 1.189 - 353.80 14.140 14.170 14.179 -0.913 0.511 2.027 -0.913 0.511 1.037 -1.851 -0.467 2.603 1.086 - 353.85 14.148 14.177 14.196 -0.910 0.725 2.035 -0.910 0.725 1.476 -1.852 -0.660 2.748 1.229 - 353.90 13.869 13.946 13.951 -1.465 0.383 1.756 -1.465 0.383 0.672 -2.572 -0.561 2.688 1.359 - 353.95 13.654 13.722 13.730 -1.369 0.477 1.541 -1.369 0.477 0.735 -2.109 -0.653 2.237 1.163 - 354.00 13.351 13.419 13.435 -1.350 0.660 1.238 -1.350 0.660 0.817 -1.671 -0.890 1.895 1.031 - 354.05 13.654 13.709 13.713 -1.225 0.317 1.541 -1.225 0.317 0.489 -1.888 -0.389 1.989 0.995 - 354.10 13.600 13.669 13.672 -1.369 0.297 1.488 -1.369 0.297 0.443 -2.037 -0.407 2.088 1.062 - 354.15 13.387 13.446 13.463 -1.262 0.673 1.274 -1.262 0.673 0.858 -1.608 -0.850 1.835 1.006 - 354.20 13.431 13.518 13.555 -1.532 1.004 1.318 -1.532 1.004 1.323 -2.019 -1.538 2.546 1.431 - 354.25 13.350 13.453 13.486 -1.659 0.955 1.237 -1.659 0.955 1.181 -2.052 -1.584 2.597 1.424 - 354.30 13.263 13.381 13.406 -1.769 0.819 1.150 -1.769 0.819 0.942 -2.035 -1.449 2.562 1.335 - 354.35 13.257 13.332 13.357 -1.420 0.804 1.144 -1.420 0.804 0.920 -1.624 -1.142 1.986 1.094 - 354.40 12.973 13.038 13.070 -1.297 0.922 0.860 -1.297 0.922 0.793 -1.115 -1.196 1.636 0.909 - 354.45 12.810 12.862 12.897 -1.163 0.941 0.697 -1.163 0.941 0.656 -0.810 -1.094 1.362 0.756 - 354.50 12.841 12.893 12.931 -1.151 1.001 0.728 -1.151 1.001 0.729 -0.838 -1.152 1.428 0.800 - 354.55 12.702 12.788 12.820 -1.477 0.908 0.589 -1.477 0.908 0.535 -0.870 -1.342 1.677 0.843 - 354.60 12.850 12.922 12.961 -1.360 1.002 0.737 -1.360 1.002 0.739 -1.002 -1.363 1.698 0.923 - 354.65 12.830 12.884 12.910 -1.174 0.825 0.717 -1.174 0.825 0.592 -0.842 -0.969 1.287 0.707 - 354.70 13.104 13.164 13.182 -1.255 0.685 0.992 -1.255 0.685 0.680 -1.245 -0.860 1.515 0.829 - 354.75 13.327 13.362 13.413 -0.967 1.161 1.215 -0.967 1.161 1.410 -1.175 -1.123 1.879 1.076 - 354.80 13.404 13.437 13.455 -0.935 0.706 1.291 -0.935 0.706 0.912 -1.208 -0.660 1.520 0.826 - 354.85 13.238 13.263 13.288 -0.804 0.810 1.126 -0.804 0.810 0.912 -0.905 -0.651 1.285 0.720 - 354.90 13.079 13.119 13.151 -1.031 0.917 0.966 -1.031 0.917 0.886 -0.996 -0.946 1.419 0.817 - 354.95 13.240 13.269 13.279 -0.872 0.523 1.127 -0.872 0.523 0.589 -0.983 -0.456 1.152 0.617 - 355.00 13.327 13.349 13.372 -0.768 0.784 1.214 -0.768 0.784 0.952 -0.932 -0.602 1.339 0.731 - 355.05 13.023 13.057 13.105 -0.948 1.115 0.910 -0.948 1.115 1.015 -0.863 -1.057 1.485 0.850 - 355.10 13.300 13.323 13.386 -0.788 1.293 1.187 -0.788 1.293 1.535 -0.935 -1.019 1.851 1.033 - 355.15 13.192 13.221 13.292 -0.865 1.371 1.079 -0.865 1.371 1.480 -0.934 -1.187 1.897 1.057 - 355.20 13.191 13.211 13.279 -0.738 1.339 1.078 -0.738 1.339 1.443 -0.796 -0.988 1.750 0.961 - 355.25 13.382 13.398 13.476 -0.659 1.442 1.269 -0.659 1.442 1.831 -0.837 -0.951 2.063 1.113 - 355.30 13.666 13.670 13.714 -0.307 1.101 1.553 -0.307 1.101 1.710 -0.477 -0.338 1.860 0.904 - 355.35 13.310 13.318 13.348 -0.453 0.898 1.197 -0.453 0.898 1.075 -0.542 -0.407 1.223 0.636 - 355.40 12.968 12.985 13.026 -0.676 1.031 0.855 -0.676 1.031 0.882 -0.578 -0.697 1.125 0.632 - 355.45 13.000 13.008 13.055 -0.451 1.115 0.887 -0.451 1.115 0.989 -0.400 -0.503 1.116 0.590 - 355.50 13.241 13.251 13.265 -0.518 0.608 1.128 -0.518 0.608 0.685 -0.585 -0.315 0.955 0.477 - 355.55 13.471 13.479 13.493 -0.461 0.615 1.358 -0.461 0.615 0.836 -0.627 -0.284 1.218 0.541 - 355.60 13.433 13.435 13.443 -0.205 0.472 1.320 -0.205 0.472 0.623 -0.271 -0.097 1.004 0.343 - 355.65 13.058 13.059 13.060 -0.227 0.113 0.945 -0.227 0.113 0.106 -0.214 -0.026 0.478 0.120 - 355.70 13.417 13.419 13.421 -0.229 0.223 1.305 -0.229 0.223 0.291 -0.298 -0.051 0.902 0.210 - 355.75 13.476 13.479 13.486 -0.313 0.444 1.363 -0.313 0.444 0.604 -0.426 -0.139 1.076 0.376 - 355.80 13.416 13.427 13.428 -0.555 0.154 1.303 -0.555 0.154 0.201 -0.723 -0.086 1.015 0.378 - 355.85 13.224 13.233 13.241 -0.483 0.449 1.111 -0.483 0.449 0.499 -0.537 -0.217 0.835 0.382 - 355.90 13.318 13.321 13.323 -0.277 0.248 1.205 -0.277 0.248 0.299 -0.334 -0.069 0.795 0.227 - 355.95 13.270 13.271 13.272 0.155 0.183 1.157 0.155 0.183 0.212 0.180 0.028 0.699 0.140 - 356.00 13.271 13.275 13.282 0.331 0.437 1.158 0.331 0.437 0.507 0.383 0.145 0.821 0.326 - 356.05 13.224 13.225 13.229 0.164 0.304 1.111 0.164 0.304 0.338 0.182 0.050 0.677 0.194 - 356.10 13.271 13.274 13.276 0.247 0.236 1.159 0.247 0.236 0.273 0.286 0.058 0.729 0.200 - 356.15 13.253 13.253 13.257 -0.091 0.297 1.140 -0.091 0.297 0.338 -0.104 -0.027 0.698 0.178 - 356.20 13.072 13.073 13.076 0.181 0.298 0.959 0.181 0.298 0.286 0.174 0.054 0.521 0.170 - 356.25 13.229 13.231 13.233 0.252 0.257 1.116 0.252 0.257 0.287 0.281 0.065 0.687 0.203 - 356.30 13.111 13.112 13.115 0.124 0.310 0.998 0.124 0.310 0.309 0.124 0.039 0.554 0.168 - 356.35 13.116 13.116 13.122 0.103 0.412 1.003 0.103 0.412 0.413 0.103 0.042 0.593 0.214 - 356.40 13.259 13.259 13.260 0.082 0.159 1.146 0.082 0.159 0.183 0.094 0.013 0.673 0.103 - 356.45 13.245 13.250 13.251 0.353 0.187 1.132 0.353 0.187 0.211 0.400 0.066 0.721 0.229 - 356.50 13.203 13.212 13.213 0.475 0.197 1.090 0.475 0.197 0.215 0.517 0.094 0.726 0.284 - 356.55 13.421 13.422 13.422 0.188 -0.062 1.308 0.188 -0.062 -0.081 0.246 -0.012 0.875 0.130 - 356.60 13.083 13.085 13.094 0.222 0.477 0.970 0.222 0.477 0.463 0.215 0.106 0.609 0.261 - 356.65 13.167 13.175 13.191 0.450 0.665 1.054 0.450 0.665 0.701 0.475 0.299 0.878 0.449 - 356.70 12.991 13.004 13.006 0.565 0.229 0.878 0.565 0.229 0.202 0.496 0.130 0.572 0.276 - 356.75 12.760 12.778 12.778 0.688 0.036 0.647 0.688 0.036 0.024 0.445 0.025 0.447 0.223 - 356.80 12.998 13.016 13.016 0.687 0.026 0.885 0.687 0.026 0.023 0.608 0.018 0.628 0.304 - 356.85 13.266 13.271 13.272 0.377 0.117 1.153 0.377 0.117 0.135 0.435 0.044 0.743 0.229 - 356.90 13.014 13.021 13.021 0.417 0.093 0.901 0.417 0.093 0.084 0.376 0.039 0.498 0.194 - 356.95 12.833 12.835 12.835 0.258 0.039 0.720 0.258 0.039 0.028 0.186 0.010 0.293 0.094 - 357.00 13.084 13.086 13.088 0.225 0.210 0.971 0.225 0.210 0.204 0.219 0.047 0.519 0.151 - 357.05 13.253 13.256 13.256 0.257 0.048 1.141 0.257 0.048 0.055 0.293 0.012 0.685 0.149 - 357.10 13.283 13.300 13.301 0.669 0.114 1.170 0.669 0.114 0.133 0.783 0.076 0.915 0.399 - 357.15 13.204 13.233 13.237 0.872 0.309 1.092 0.872 0.309 0.338 0.952 0.270 1.024 0.523 - 357.20 13.564 13.584 13.585 0.745 -0.131 1.451 0.745 -0.131 -0.190 1.081 -0.097 1.339 0.551 - 357.25 13.796 13.805 13.809 0.513 -0.327 1.683 0.513 -0.327 -0.551 0.864 -0.168 1.602 0.519 - 357.30 13.834 13.847 13.850 0.592 -0.304 1.722 0.592 -0.304 -0.523 1.018 -0.180 1.703 0.579 - 357.35 13.808 13.820 13.826 0.575 -0.428 1.695 0.575 -0.428 -0.726 0.975 -0.246 1.693 0.620 - 357.40 13.435 13.446 13.446 0.542 -0.016 1.322 0.542 -0.016 -0.022 0.717 -0.009 1.022 0.359 - 357.45 13.513 13.521 13.521 0.463 0.078 1.400 0.463 0.078 0.109 0.648 0.036 1.090 0.329 - 357.50 13.897 13.903 13.903 0.416 -0.125 1.784 0.416 -0.125 -0.224 0.741 -0.052 1.685 0.388 - 357.55 13.843 13.848 13.848 0.342 0.032 1.731 0.342 0.032 0.055 0.593 0.011 1.557 0.298 - 357.60 13.666 13.674 13.675 0.449 0.174 1.553 0.449 0.174 0.270 0.697 0.078 1.322 0.376 - 357.65 13.534 13.565 13.565 0.907 -0.152 1.422 0.907 -0.152 -0.216 1.289 -0.138 1.433 0.657 - 357.70 13.659 13.699 13.699 1.039 -0.056 1.547 1.039 -0.056 -0.086 1.608 -0.058 1.738 0.805 - 357.75 13.774 13.810 13.811 1.002 -0.134 1.661 1.002 -0.134 -0.223 1.664 -0.135 1.891 0.842 - 357.80 13.822 13.868 13.868 1.119 -0.119 1.710 1.119 -0.119 -0.203 1.914 -0.133 2.095 0.964 - 357.85 13.700 13.731 13.731 0.921 0.070 1.587 0.921 0.070 0.111 1.461 0.065 1.686 0.733 - 357.90 13.647 13.698 13.698 1.180 -0.086 1.534 1.180 -0.086 -0.131 1.811 -0.101 1.877 0.909 - 357.95 13.652 13.688 13.688 0.992 -0.120 1.539 0.992 -0.120 -0.185 1.527 -0.120 1.684 0.772 - 358.00 13.735 13.770 13.770 0.974 0.085 1.622 0.974 0.085 0.137 1.581 0.082 1.794 0.794 - 358.05 13.768 13.802 13.803 0.973 -0.178 1.655 0.973 -0.178 -0.294 1.610 -0.173 1.859 0.823 - 358.10 13.920 13.930 13.930 0.510 -0.002 1.808 0.510 -0.002 -0.003 0.921 -0.001 1.763 0.461 - 358.15 13.983 13.986 13.992 0.267 0.415 1.871 0.267 0.415 0.777 0.499 0.111 1.871 0.465 - 358.20 13.616 13.619 13.630 0.305 0.539 1.503 0.305 0.539 0.810 0.458 0.164 1.321 0.472 - 358.25 13.107 13.124 13.140 0.669 0.647 0.994 0.669 0.647 0.643 0.664 0.432 0.927 0.510 - 358.30 12.728 12.742 12.749 0.595 0.438 0.615 0.595 0.438 0.269 0.366 0.260 0.462 0.262 - 358.35 13.115 13.126 13.126 0.532 0.120 1.002 0.532 0.120 0.120 0.533 0.064 0.651 0.275 - 358.40 13.008 13.010 13.016 0.246 0.392 0.895 0.246 0.392 0.351 0.220 0.096 0.508 0.212 - 358.45 13.109 13.112 13.113 0.287 0.202 0.996 0.287 0.202 0.201 0.286 0.058 0.557 0.177 - 358.50 13.295 13.303 13.305 0.452 0.254 1.182 0.452 0.254 0.300 0.535 0.115 0.834 0.312 - 358.55 13.141 13.152 13.157 0.531 0.339 1.029 0.531 0.339 0.349 0.547 0.180 0.728 0.337 - 358.60 13.200 13.231 13.238 0.910 0.423 1.087 0.910 0.423 0.460 0.990 0.385 1.095 0.578 - 358.65 13.377 13.406 13.422 0.879 0.648 1.264 0.879 0.648 0.819 1.111 0.569 1.395 0.747 - 358.70 13.247 13.280 13.310 0.930 0.905 1.134 0.930 0.905 1.026 1.054 0.841 1.484 0.847 - 358.75 13.395 13.414 13.444 0.717 0.897 1.282 0.717 0.897 1.150 0.919 0.643 1.481 0.803 - 358.80 13.112 13.124 13.167 0.578 1.052 0.999 0.578 1.052 1.051 0.577 0.608 1.219 0.672 - 358.85 12.795 12.807 12.857 0.558 1.131 0.683 0.558 1.131 0.772 0.381 0.631 1.028 0.534 - 358.90 13.024 13.029 13.047 0.359 0.695 0.911 0.359 0.695 0.633 0.327 0.249 0.721 0.378 - 358.95 13.348 13.358 13.369 0.509 0.548 1.236 0.509 0.548 0.677 0.628 0.279 1.043 0.482 - 359.00 13.207 13.218 13.249 0.540 0.906 1.094 0.540 0.906 0.991 0.591 0.489 1.155 0.627 - 359.05 13.047 13.066 13.086 0.704 0.724 0.934 0.704 0.724 0.677 0.658 0.510 0.947 0.537 - 359.10 13.099 13.129 13.146 0.888 0.662 0.986 0.888 0.662 0.653 0.876 0.587 1.099 0.620 - 359.15 13.387 13.437 13.451 1.164 0.610 1.274 1.164 0.610 0.777 1.482 0.710 1.674 0.909 - 359.20 12.773 12.821 12.849 1.102 0.860 0.660 1.102 0.860 0.568 0.728 0.947 1.195 0.661 - 359.25 12.653 12.696 12.725 1.036 0.855 0.541 1.036 0.855 0.462 0.560 0.886 1.048 0.573 - 359.30 12.985 13.016 13.046 0.898 0.883 0.873 0.898 0.883 0.771 0.783 0.793 1.173 0.677 - 359.35 12.952 12.983 12.997 0.897 0.602 0.839 0.897 0.602 0.505 0.753 0.540 0.936 0.528 - 359.40 12.984 13.028 13.037 1.076 0.479 0.871 1.076 0.479 0.417 0.937 0.515 1.073 0.574 - 359.45 12.824 12.869 12.891 1.078 0.760 0.711 1.078 0.760 0.540 0.766 0.819 1.122 0.622 - 359.50 12.814 12.853 12.881 1.003 0.854 0.701 1.003 0.854 0.599 0.703 0.857 1.114 0.630 - 359.55 13.011 13.066 13.100 1.200 0.944 0.898 1.200 0.944 0.848 1.077 1.132 1.568 0.889 - 359.60 13.236 13.300 13.330 1.309 0.892 1.123 1.309 0.892 1.002 1.470 1.167 1.885 1.064 - 359.65 13.148 13.247 13.273 1.618 0.842 1.035 1.618 0.842 0.871 1.674 1.362 2.198 1.163 - 359.70 13.074 13.167 13.200 1.560 0.938 0.961 1.560 0.938 0.902 1.500 1.464 2.120 1.141 - 359.75 13.188 13.307 13.340 1.772 0.942 1.076 1.772 0.942 1.014 1.906 1.670 2.593 1.365 - 359.80 13.166 13.323 13.347 2.042 0.795 1.053 2.042 0.795 0.837 2.150 1.623 2.955 1.410 - 359.85 12.777 12.972 12.993 2.239 0.750 0.664 2.239 0.750 0.498 1.487 1.678 3.007 1.148 - 359.90 12.636 12.838 12.871 2.266 0.919 0.524 2.266 0.919 0.481 1.186 2.083 3.127 1.223 - 359.95 12.666 12.882 12.909 2.347 0.838 0.553 2.347 0.838 0.464 1.298 1.967 3.258 1.201 - 360.00 12.792 13.031 13.073 2.483 1.047 0.679 2.483 1.047 0.711 1.686 2.600 3.861 1.590 - 360.05 12.766 12.990 13.023 2.402 0.933 0.653 2.402 0.933 0.610 1.569 2.242 3.534 1.402 - 360.10 12.690 12.962 13.000 2.640 0.997 0.578 2.640 0.997 0.576 1.525 2.631 4.148 1.548 - 360.15 12.769 13.018 13.076 2.533 1.236 0.656 2.533 1.236 0.811 1.662 3.131 4.187 1.818 - 360.20 12.608 12.882 12.941 2.641 1.230 0.496 2.641 1.230 0.609 1.309 3.248 4.366 1.777 - 360.25 12.599 12.845 12.970 2.502 1.802 0.486 2.502 1.802 0.876 1.216 4.508 4.871 2.375 - 360.30 12.778 13.053 13.157 2.665 1.657 0.665 2.665 1.657 1.102 1.772 4.416 5.145 2.442 - 360.35 12.625 12.863 12.935 2.460 1.369 0.512 2.460 1.369 0.702 1.261 3.369 4.095 1.832 - 360.40 12.751 12.945 13.004 2.233 1.233 0.638 2.233 1.233 0.787 1.425 2.753 3.457 1.599 - 360.45 12.746 12.912 12.948 2.067 0.961 0.633 2.067 0.961 0.609 1.309 1.987 2.799 1.228 - 360.50 12.683 12.867 12.880 2.167 0.583 0.571 2.167 0.583 0.333 1.236 1.264 2.680 0.899 - 360.55 12.869 12.997 13.015 1.815 0.690 0.756 1.815 0.690 0.522 1.373 1.253 2.172 0.966 - 360.60 12.919 13.016 13.027 1.591 0.537 0.806 1.591 0.537 0.432 1.282 0.854 1.734 0.800 - 360.65 12.822 12.907 12.937 1.485 0.872 0.709 1.485 0.872 0.618 1.052 1.294 1.733 0.889 - 360.70 12.955 13.033 13.059 1.426 0.823 0.842 1.426 0.823 0.694 1.201 1.174 1.711 0.909 - 360.75 12.889 12.945 12.986 1.205 1.029 0.776 1.205 1.029 0.799 0.936 1.241 1.557 0.874 - 360.80 12.977 13.063 13.098 1.492 0.960 0.864 1.492 0.960 0.830 1.290 1.433 1.949 1.050 - 360.85 12.710 12.834 12.854 1.780 0.709 0.597 1.780 0.709 0.424 1.064 1.262 2.014 0.852 - 360.90 12.873 12.963 12.983 1.530 0.706 0.760 1.530 0.706 0.537 1.162 1.080 1.708 0.837 - 360.95 13.011 13.063 13.075 1.164 0.558 0.898 1.164 0.558 0.501 1.045 0.649 1.236 0.664 - 361.00 12.969 13.007 13.010 0.994 0.273 0.856 0.994 0.273 0.233 0.851 0.271 0.898 0.462 - 361.05 13.189 13.231 13.231 1.047 0.017 1.077 1.047 0.017 0.018 1.127 0.018 1.128 0.564 - 361.10 13.038 13.078 13.078 1.023 0.010 0.925 1.023 0.010 0.009 0.946 0.010 0.951 0.473 - 361.15 13.289 13.319 13.319 0.890 -0.093 1.177 0.890 -0.093 -0.110 1.047 -0.083 1.093 0.528 - 361.20 13.527 13.561 13.567 0.953 -0.419 1.414 0.953 -0.419 -0.593 1.348 -0.399 1.542 0.763 - 361.25 13.559 13.596 13.612 0.993 -0.665 1.446 0.993 -0.665 -0.962 1.436 -0.660 1.760 0.925 - 361.30 13.676 13.752 13.758 1.451 -0.381 1.563 1.451 -0.381 -0.595 2.268 -0.553 2.347 1.205 - 361.35 13.799 13.872 13.881 1.413 -0.511 1.687 1.413 -0.511 -0.861 2.383 -0.721 2.550 1.317 - 361.40 14.104 14.169 14.186 1.357 -0.684 1.991 1.357 -0.684 -1.361 2.703 -0.928 3.138 1.583 - 361.45 14.261 14.330 14.357 1.405 -0.878 2.148 1.405 -0.878 -1.887 3.019 -1.234 3.681 1.884 - 361.50 14.222 14.339 14.372 1.825 -0.973 2.109 1.825 -0.973 -2.053 3.850 -1.776 4.364 2.356 - 361.55 14.130 14.226 14.238 1.651 -0.572 2.017 1.651 -0.572 -1.154 3.331 -0.945 3.562 1.825 - 361.60 13.637 13.730 13.739 1.598 -0.490 1.524 1.598 -0.490 -0.746 2.436 -0.783 2.558 1.332 - 361.65 13.278 13.361 13.363 1.489 -0.213 1.165 1.489 -0.213 -0.248 1.735 -0.317 1.810 0.891 - 361.70 12.935 13.007 13.007 1.366 0.092 0.822 1.366 0.092 0.076 1.123 0.126 1.275 0.566 - 361.75 13.143 13.196 13.200 1.189 0.305 1.030 1.189 0.305 0.314 1.225 0.363 1.284 0.658 - 361.80 13.340 13.406 13.410 1.331 0.300 1.227 1.331 0.300 0.369 1.633 0.400 1.684 0.861 - 361.85 13.306 13.375 13.385 1.362 0.506 1.193 1.362 0.506 0.604 1.624 0.689 1.767 0.932 - 361.90 13.123 13.177 13.183 1.195 0.385 1.010 1.195 0.385 0.389 1.207 0.460 1.299 0.675 - 361.95 12.774 12.842 12.851 1.327 0.465 0.661 1.327 0.465 0.307 0.877 0.617 1.207 0.558 - 362.00 12.748 12.796 12.799 1.109 0.284 0.635 1.109 0.284 0.180 0.704 0.315 0.857 0.396 - 362.05 12.981 13.046 13.046 1.301 -0.082 0.868 1.301 -0.082 -0.072 1.130 -0.107 1.227 0.569 - 362.10 13.111 13.197 13.201 1.502 -0.310 0.999 1.502 -0.310 -0.310 1.500 -0.466 1.674 0.800 - 362.15 13.201 13.310 13.323 1.706 -0.572 1.088 1.706 -0.572 -0.622 1.856 -0.976 2.211 1.094 - 362.20 12.988 13.092 13.100 1.648 -0.438 0.875 1.648 -0.438 -0.383 1.443 -0.722 1.837 0.829 - 362.25 12.934 13.052 13.055 1.751 -0.255 0.821 1.751 -0.255 -0.209 1.438 -0.446 1.903 0.760 - 362.30 12.970 13.077 13.082 1.668 -0.355 0.858 1.668 -0.355 -0.305 1.431 -0.592 1.823 0.789 - 362.35 12.906 13.035 13.044 1.828 -0.478 0.793 1.828 -0.478 -0.379 1.450 -0.874 2.100 0.867 - 362.40 12.580 12.711 12.719 1.815 -0.454 0.468 1.815 -0.454 -0.212 0.849 -0.823 1.859 0.601 - 362.45 12.935 13.058 13.059 1.787 -0.191 0.822 1.787 -0.191 -0.157 1.470 -0.341 1.953 0.758 - 362.50 13.043 13.128 13.132 1.494 -0.319 0.930 1.494 -0.319 -0.296 1.389 -0.476 1.599 0.749 - 362.55 13.074 13.150 13.166 1.408 -0.658 0.961 1.408 -0.658 -0.633 1.353 -0.927 1.670 0.879 - 362.60 12.874 12.996 13.020 1.775 -0.793 0.761 1.775 -0.793 -0.603 1.351 -1.407 2.179 1.021 - 362.65 12.594 12.728 12.738 1.841 -0.521 0.481 1.841 -0.521 -0.251 0.886 -0.959 1.946 0.665 - 362.70 12.475 12.608 12.612 1.825 -0.345 0.362 1.825 -0.345 -0.125 0.661 -0.629 1.789 0.460 - 362.75 12.576 12.688 12.688 1.682 -0.091 0.463 1.682 -0.091 -0.042 0.779 -0.153 1.527 0.398 - 362.80 12.863 12.984 12.988 1.764 -0.336 0.750 1.764 -0.336 -0.252 1.324 -0.594 1.894 0.736 - 362.85 13.105 13.213 13.219 1.687 -0.394 0.992 1.687 -0.394 -0.391 1.674 -0.665 1.993 0.922 - 362.90 12.993 13.098 13.101 1.649 -0.304 0.881 1.649 -0.304 -0.267 1.452 -0.501 1.793 0.779 - 362.95 13.090 13.166 13.168 1.407 -0.266 0.978 1.407 -0.266 -0.260 1.375 -0.374 1.502 0.724 - 363.00 13.070 13.166 13.170 1.587 -0.314 0.957 1.587 -0.314 -0.300 1.519 -0.498 1.767 0.813 - 363.05 13.075 13.233 13.239 2.044 -0.372 0.962 2.044 -0.372 -0.358 1.966 -0.761 2.621 1.069 - 363.10 12.702 12.773 12.783 1.346 -0.503 0.589 1.346 -0.503 -0.296 0.793 -0.677 1.206 0.542 - 363.15 12.744 12.782 12.811 0.991 -0.859 0.631 0.991 -0.859 -0.542 0.625 -0.851 1.059 0.594 - 363.20 12.817 12.864 12.874 1.092 -0.521 0.704 1.092 -0.521 -0.367 0.769 -0.569 0.980 0.512 - 363.25 12.822 12.879 12.883 1.209 -0.293 0.710 1.209 -0.293 -0.208 0.858 -0.354 1.025 0.475 - 363.30 12.428 12.470 12.475 1.020 0.345 0.315 1.020 0.345 0.109 0.322 0.352 0.629 0.244 - 363.35 12.640 12.699 12.701 1.222 0.232 0.528 1.222 0.232 0.122 0.645 0.283 0.913 0.357 - 363.40 12.579 12.657 12.657 1.403 -0.037 0.466 1.403 -0.037 -0.017 0.654 -0.052 1.094 0.328 - 363.45 12.373 12.509 12.517 1.840 -0.450 0.260 1.840 -0.450 -0.117 0.478 -0.828 1.828 0.482 - 363.50 12.874 13.029 13.031 2.001 -0.259 0.761 2.001 -0.259 -0.197 1.524 -0.518 2.326 0.811 - 363.55 12.783 12.944 12.947 2.034 -0.298 0.670 2.034 -0.298 -0.200 1.363 -0.607 2.337 0.753 - 363.60 12.813 12.957 12.978 1.926 -0.729 0.701 1.926 -0.729 -0.511 1.349 -1.404 2.365 1.006 - 363.65 12.622 12.748 12.775 1.786 -0.827 0.509 1.786 -0.827 -0.421 0.910 -1.477 2.067 0.893 - 363.70 12.535 12.649 12.674 1.699 -0.793 0.422 1.699 -0.793 -0.335 0.717 -1.348 1.847 0.781 - 363.75 12.823 12.926 12.981 1.626 -1.195 0.711 1.626 -1.195 -0.849 1.155 -1.943 2.288 1.207 - 363.80 12.862 12.971 13.016 1.679 -1.076 0.749 1.679 -1.076 -0.806 1.258 -1.806 2.268 1.172 - 363.85 12.487 12.589 12.602 1.598 -0.592 0.374 1.598 -0.592 -0.221 0.598 -0.947 1.523 0.571 - 363.90 12.446 12.534 12.542 1.478 -0.470 0.333 1.478 -0.470 -0.157 0.493 -0.694 1.258 0.433 - 363.95 12.288 12.371 12.373 1.433 -0.217 0.175 1.433 -0.217 -0.038 0.251 -0.311 1.065 0.201 - 364.00 12.403 12.486 12.488 1.436 -0.219 0.290 1.436 -0.219 -0.063 0.416 -0.314 1.097 0.263 - 364.05 12.738 12.800 12.803 1.265 -0.265 0.625 1.265 -0.265 -0.166 0.790 -0.335 1.030 0.437 - 364.10 12.572 12.614 12.617 1.027 -0.286 0.459 1.027 -0.286 -0.131 0.472 -0.294 0.674 0.286 - 364.15 12.308 12.348 12.349 0.985 -0.193 0.196 0.985 -0.193 -0.038 0.193 -0.190 0.523 0.137 - 364.20 12.243 12.256 12.262 0.559 -0.388 0.131 0.559 -0.388 -0.051 0.073 -0.217 0.240 0.117 - 364.25 12.467 12.479 12.484 0.537 -0.366 0.355 0.537 -0.366 -0.130 0.190 -0.197 0.274 0.151 - 364.30 12.765 12.781 12.781 0.642 -0.033 0.652 0.642 -0.033 -0.021 0.419 -0.021 0.419 0.210 - 364.35 12.982 12.995 12.996 0.575 0.094 0.870 0.575 0.094 0.082 0.500 0.054 0.548 0.255 - 364.40 13.107 13.117 13.120 0.520 -0.252 0.994 0.520 -0.252 -0.250 0.517 -0.131 0.661 0.295 - 364.45 13.095 13.109 13.113 0.609 -0.326 0.982 0.609 -0.326 -0.321 0.598 -0.199 0.721 0.354 - 364.50 13.379 13.406 13.408 0.855 -0.178 1.266 0.855 -0.178 -0.226 1.082 -0.152 1.183 0.558 - 364.55 13.131 13.151 13.152 0.716 -0.222 1.018 0.716 -0.222 -0.227 0.729 -0.159 0.799 0.390 - 364.60 13.068 13.083 13.083 0.630 -0.027 0.955 0.630 -0.027 -0.025 0.602 -0.017 0.655 0.301 - 364.65 13.144 13.175 13.175 0.897 0.110 1.031 0.897 0.110 0.114 0.925 0.099 0.941 0.469 - 364.70 13.135 13.180 13.180 1.086 -0.025 1.022 1.086 -0.025 -0.025 1.110 -0.027 1.112 0.555 - 364.75 13.111 13.146 13.151 0.960 -0.352 0.998 0.960 -0.352 -0.352 0.958 -0.338 1.021 0.538 - 364.80 12.877 12.925 12.927 1.112 -0.222 0.765 1.112 -0.222 -0.169 0.850 -0.246 0.935 0.451 - 364.85 12.973 13.009 13.023 0.969 -0.590 0.860 0.969 -0.590 -0.508 0.834 -0.572 1.014 0.566 - 364.90 12.783 12.812 12.836 0.863 -0.796 0.670 0.863 -0.796 -0.533 0.578 -0.686 0.913 0.522 - 364.95 12.945 12.957 12.998 0.571 -1.027 0.832 0.571 -1.027 -0.854 0.475 -0.586 1.036 0.570 - 365.00 13.001 13.015 13.079 0.601 -1.300 0.888 0.601 -1.300 -1.154 0.534 -0.781 1.419 0.746 - 365.05 13.169 13.204 13.255 0.970 -1.154 1.056 0.970 -1.154 -1.219 1.025 -1.120 1.694 0.973 - 365.10 12.701 12.778 12.799 1.405 -0.722 0.588 1.405 -0.722 -0.425 0.826 -1.015 1.421 0.688 - 365.15 12.903 12.953 12.960 1.140 -0.442 0.790 1.140 -0.442 -0.349 0.900 -0.504 1.059 0.544 - 365.20 12.609 12.646 12.657 0.962 -0.518 0.497 0.962 -0.518 -0.257 0.478 -0.498 0.720 0.368 - 365.25 12.424 12.469 12.478 1.062 -0.468 0.311 1.062 -0.468 -0.145 0.330 -0.497 0.721 0.307 - 365.30 12.557 12.597 12.602 1.003 -0.353 0.444 1.003 -0.353 -0.157 0.446 -0.354 0.664 0.295 - 365.35 12.806 12.844 12.850 0.982 -0.376 0.694 0.982 -0.376 -0.261 0.681 -0.369 0.793 0.409 - 365.40 12.692 12.710 12.712 0.692 0.172 0.579 0.692 0.172 0.099 0.401 0.119 0.422 0.215 - 365.45 12.728 12.753 12.754 0.805 -0.082 0.615 0.805 -0.082 -0.050 0.495 -0.066 0.516 0.251 - 365.50 12.866 12.928 12.934 1.267 -0.402 0.753 1.267 -0.402 -0.302 0.954 -0.509 1.167 0.561 - 365.55 13.174 13.246 13.253 1.378 -0.429 1.061 1.378 -0.429 -0.455 1.462 -0.591 1.604 0.821 - 365.60 13.331 13.398 13.403 1.333 -0.369 1.219 1.333 -0.369 -0.449 1.624 -0.491 1.698 0.877 - 365.65 13.093 13.146 13.149 1.178 -0.292 0.980 1.178 -0.292 -0.286 1.155 -0.344 1.217 0.619 - 365.70 13.108 13.167 13.170 1.243 -0.283 0.996 1.243 -0.283 -0.282 1.237 -0.352 1.308 0.658 - 365.75 13.026 13.085 13.092 1.244 -0.407 0.913 1.244 -0.407 -0.371 1.136 -0.506 1.273 0.649 - 365.80 13.008 13.075 13.083 1.325 -0.443 0.895 1.325 -0.443 -0.396 1.186 -0.586 1.376 0.690 - 365.85 13.134 13.224 13.236 1.539 -0.561 1.022 1.539 -0.561 -0.573 1.573 -0.864 1.864 0.942 - 365.90 12.883 12.987 13.023 1.639 -0.972 0.770 1.639 -0.972 -0.748 1.263 -1.593 2.113 1.083 - 365.95 12.891 12.989 13.004 1.596 -0.622 0.778 1.596 -0.622 -0.484 1.242 -0.993 1.770 0.831 - 366.00 13.386 13.459 13.483 1.400 -0.807 1.273 1.400 -0.807 -1.028 1.782 -1.130 2.116 1.174 - 366.05 13.749 13.828 13.844 1.477 -0.664 1.636 1.477 -0.664 -1.086 2.417 -0.980 2.650 1.413 - 366.10 13.636 13.687 13.691 1.173 -0.332 1.523 1.173 -0.332 -0.506 1.787 -0.389 1.904 0.949 - 366.15 13.774 13.837 13.841 1.327 -0.301 1.661 1.327 -0.301 -0.499 2.204 -0.399 2.305 1.148 - 366.20 13.526 13.608 13.615 1.489 -0.429 1.414 1.489 -0.429 -0.606 2.105 -0.638 2.200 1.141 - 366.25 13.170 13.230 13.232 1.255 -0.253 1.057 1.255 -0.253 -0.267 1.327 -0.317 1.378 0.695 - 366.30 13.254 13.319 13.320 1.317 0.113 1.141 1.317 0.113 0.128 1.503 0.148 1.525 0.758 - 366.35 13.113 13.173 13.175 1.264 0.235 1.000 1.264 0.235 0.235 1.263 0.298 1.326 0.660 - 366.40 13.210 13.283 13.284 1.386 -0.132 1.098 1.386 -0.132 -0.145 1.521 -0.183 1.571 0.769 - 366.45 13.161 13.232 13.232 1.369 0.074 1.048 1.369 0.074 0.078 1.434 0.102 1.488 0.720 - 366.50 13.018 13.098 13.099 1.445 0.074 0.906 1.445 0.074 0.067 1.309 0.107 1.457 0.657 - 366.55 13.340 13.405 13.407 1.315 -0.235 1.228 1.315 -0.235 -0.288 1.614 -0.309 1.646 0.834 - 366.60 13.702 13.738 13.738 0.990 -0.038 1.589 0.990 -0.038 -0.060 1.574 -0.037 1.754 0.788 - 366.65 13.607 13.640 13.640 0.953 0.115 1.494 0.953 0.115 0.172 1.424 0.110 1.576 0.719 - 366.70 13.457 13.492 13.492 0.979 0.040 1.344 0.979 0.040 0.054 1.316 0.039 1.383 0.659 - 366.75 13.318 13.341 13.342 0.786 -0.094 1.205 0.786 -0.094 -0.113 0.948 -0.074 1.040 0.479 - 366.80 13.195 13.223 13.224 0.868 0.115 1.082 0.868 0.115 0.124 0.939 0.100 0.968 0.476 - 366.85 13.358 13.388 13.389 0.893 -0.125 1.245 0.893 -0.125 -0.156 1.113 -0.112 1.182 0.565 - 366.90 13.315 13.368 13.371 1.191 -0.252 1.202 1.191 -0.252 -0.303 1.432 -0.300 1.464 0.747 - 366.95 12.916 12.950 12.959 0.930 -0.489 0.803 0.930 -0.489 -0.393 0.747 -0.455 0.875 0.479 - 367.00 13.204 13.248 13.262 1.082 -0.596 1.091 1.082 -0.596 -0.650 1.180 -0.645 1.358 0.747 - 367.05 13.295 13.341 13.346 1.100 -0.373 1.183 1.100 -0.373 -0.441 1.301 -0.411 1.374 0.717 - 367.10 13.268 13.293 13.294 0.822 -0.145 1.155 0.822 -0.145 -0.167 0.949 -0.119 1.015 0.486 - 367.15 13.380 13.415 13.423 0.969 -0.455 1.268 0.969 -0.455 -0.577 1.228 -0.441 1.376 0.713 - 367.20 13.706 13.740 13.743 0.957 -0.293 1.593 0.957 -0.293 -0.466 1.524 -0.280 1.770 0.809 - 367.25 13.678 13.712 13.720 0.974 -0.477 1.565 0.974 -0.477 -0.747 1.524 -0.465 1.812 0.880 - 367.30 13.556 13.571 13.582 0.635 -0.549 1.443 0.635 -0.549 -0.792 0.917 -0.349 1.394 0.630 - 367.35 13.533 13.567 13.577 0.966 -0.507 1.420 0.966 -0.507 -0.720 1.372 -0.490 1.604 0.813 - 367.40 13.243 13.311 13.319 1.345 -0.450 1.130 1.345 -0.450 -0.509 1.521 -0.606 1.645 0.857 - 367.45 13.011 13.044 13.073 0.919 -0.876 0.898 0.919 -0.876 -0.787 0.826 -0.805 1.209 0.698 - 367.50 12.971 13.014 13.027 1.051 -0.590 0.859 1.051 -0.590 -0.507 0.903 -0.621 1.096 0.604 - 367.55 12.894 12.946 12.950 1.152 -0.348 0.782 1.152 -0.348 -0.272 0.900 -0.400 1.029 0.511 - 367.60 13.191 13.239 13.243 1.118 -0.350 1.079 1.118 -0.350 -0.377 1.205 -0.391 1.267 0.661 - 367.65 13.176 13.201 13.202 0.813 -0.104 1.063 0.813 -0.104 -0.111 0.864 -0.085 0.901 0.438 - 367.70 13.251 13.270 13.274 0.713 -0.332 1.138 0.713 -0.332 -0.377 0.811 -0.236 0.956 0.463 - 367.75 13.089 13.107 13.112 0.704 -0.349 0.976 0.704 -0.349 -0.341 0.686 -0.246 0.785 0.402 - 367.80 13.098 13.129 13.130 0.911 -0.104 0.985 0.911 -0.104 -0.102 0.897 -0.095 0.905 0.454 - 367.85 12.826 12.865 12.867 0.998 0.222 0.713 0.998 0.222 0.158 0.711 0.222 0.777 0.381 - 367.90 12.867 12.909 12.909 1.033 0.096 0.755 1.033 0.096 0.072 0.780 0.099 0.823 0.395 - 367.95 12.953 13.014 13.027 1.255 0.588 0.840 1.255 0.588 0.494 1.055 0.738 1.314 0.690 - 368.00 13.218 13.266 13.290 1.122 0.796 1.106 1.122 0.796 0.880 1.240 0.893 1.557 0.882 - 368.05 13.006 13.035 13.055 0.860 0.728 0.894 0.860 0.728 0.651 0.769 0.626 1.034 0.593 - 368.10 12.838 12.870 12.887 0.913 0.660 0.725 0.913 0.660 0.478 0.662 0.602 0.897 0.507 - 368.15 13.095 13.128 13.142 0.930 0.606 0.982 0.930 0.606 0.595 0.913 0.564 1.098 0.614 - 368.20 13.103 13.159 13.170 1.216 0.543 0.990 1.216 0.543 0.537 1.204 0.660 1.377 0.737 - 368.25 13.043 13.089 13.092 1.102 0.296 0.930 1.102 0.296 0.275 1.024 0.326 1.083 0.555 - 368.30 12.684 12.728 12.761 1.057 0.914 0.571 1.057 0.914 0.522 0.604 0.966 1.140 0.627 - 368.35 12.803 12.839 12.900 0.953 1.252 0.690 0.953 1.252 0.864 0.658 1.193 1.476 0.807 - 368.40 12.569 12.595 12.628 0.805 0.907 0.457 0.805 0.907 0.414 0.368 0.730 0.840 0.458 - 368.45 12.716 12.751 12.777 0.948 0.812 0.603 0.948 0.812 0.490 0.572 0.770 0.961 0.538 - 368.50 12.700 12.728 12.776 0.833 1.111 0.588 0.833 1.111 0.653 0.490 0.926 1.137 0.617 - 368.55 12.627 12.635 12.682 0.467 1.087 0.514 0.467 1.087 0.558 0.240 0.508 0.832 0.396 - 368.60 12.489 12.499 12.522 0.500 0.751 0.377 0.500 0.751 0.283 0.188 0.375 0.478 0.253 - 368.65 12.427 12.431 12.438 0.307 0.421 0.315 0.307 0.421 0.133 0.097 0.129 0.185 0.104 - 368.70 12.701 12.727 12.740 0.813 0.579 0.588 0.813 0.579 0.341 0.478 0.471 0.671 0.376 - 368.75 12.685 12.695 12.699 0.508 0.304 0.572 0.508 0.304 0.174 0.291 0.155 0.339 0.186 - 368.80 12.633 12.660 12.662 0.825 0.254 0.520 0.825 0.254 0.132 0.429 0.210 0.508 0.248 - 368.85 12.979 12.994 12.994 0.612 -0.035 0.867 0.612 -0.035 -0.030 0.531 -0.021 0.564 0.266 - 368.90 12.671 12.678 12.679 0.409 0.173 0.559 0.409 0.173 0.097 0.228 0.071 0.255 0.129 - 368.95 12.498 12.501 12.504 0.245 0.283 0.385 0.245 0.283 0.109 0.094 0.069 0.144 0.080 - 369.00 12.605 12.607 12.611 0.216 0.320 0.492 0.216 0.320 0.157 0.106 0.069 0.196 0.101 - 369.05 12.785 12.785 12.792 0.116 0.402 0.672 0.116 0.402 0.270 0.078 0.047 0.313 0.143 - 369.10 12.856 12.860 12.865 0.331 0.375 0.743 0.331 0.375 0.278 0.246 0.124 0.401 0.196 - 369.15 12.806 12.820 12.837 0.589 0.667 0.693 0.589 0.667 0.463 0.408 0.393 0.636 0.366 - 369.20 12.999 13.005 13.022 0.381 0.664 0.886 0.381 0.664 0.589 0.337 0.253 0.686 0.362 - 369.25 12.677 12.699 12.716 0.750 0.660 0.564 0.750 0.660 0.372 0.423 0.495 0.658 0.375 - 369.30 12.299 12.346 12.357 1.078 0.531 0.186 1.078 0.531 0.099 0.200 0.572 0.739 0.307 - 369.35 12.314 12.375 12.391 1.231 0.631 0.201 1.231 0.631 0.127 0.247 0.777 0.977 0.412 - 369.40 12.443 12.497 12.503 1.156 0.409 0.330 1.156 0.409 0.135 0.382 0.473 0.807 0.311 - 369.45 12.476 12.553 12.554 1.391 0.140 0.363 1.391 0.140 0.051 0.505 0.195 1.043 0.272 - 369.50 12.520 12.614 12.615 1.532 0.179 0.408 1.532 0.179 0.073 0.624 0.274 1.272 0.343 - 369.55 12.575 12.626 12.626 1.138 0.020 0.462 1.138 0.020 0.009 0.526 0.023 0.754 0.263 - 369.60 12.720 12.762 12.763 1.042 0.028 0.607 1.042 0.028 0.017 0.633 0.029 0.727 0.317 - 369.65 12.872 12.901 12.908 0.875 0.432 0.759 0.875 0.432 0.328 0.664 0.378 0.764 0.416 - 369.70 12.531 12.590 12.593 1.219 0.277 0.418 1.219 0.277 0.116 0.510 0.337 0.869 0.311 - 369.75 12.450 12.484 12.497 0.930 0.565 0.337 0.930 0.565 0.190 0.313 0.526 0.649 0.320 - 369.80 12.469 12.497 12.511 0.845 0.579 0.356 0.845 0.579 0.206 0.301 0.489 0.588 0.305 - 369.85 11.952 12.015 12.026 1.231 0.500 -0.161 1.231 0.500 -0.080 -0.198 0.616 0.896 0.326 - 369.90 11.968 12.016 12.042 1.077 0.791 -0.145 1.077 0.791 -0.115 -0.156 0.851 0.903 0.437 - 369.95 12.098 12.146 12.180 1.086 0.908 -0.015 1.086 0.908 -0.014 -0.016 0.987 1.003 0.494 - 370.00 12.476 12.484 12.531 0.438 1.088 0.364 0.438 1.088 0.395 0.159 0.476 0.753 0.320 - 370.05 12.293 12.308 12.356 0.600 1.089 0.181 0.600 1.089 0.197 0.108 0.653 0.790 0.345 - 370.10 12.182 12.188 12.208 0.403 0.702 0.069 0.403 0.702 0.048 0.028 0.283 0.330 0.144 - 370.15 12.012 12.024 12.058 0.537 0.904 -0.101 0.537 0.904 -0.091 -0.054 0.485 0.558 0.248 - 370.20 11.932 11.949 12.003 0.650 1.138 -0.181 0.650 1.138 -0.206 -0.118 0.740 0.875 0.389 - 370.25 12.061 12.063 12.131 0.216 1.285 -0.052 0.216 1.285 -0.067 -0.011 0.277 0.850 0.143 - 370.30 12.312 12.313 12.396 0.055 1.438 0.200 0.055 1.438 0.287 0.011 0.078 1.055 0.149 - 370.35 12.274 12.274 12.319 0.046 1.047 0.161 0.046 1.047 0.169 0.007 0.048 0.562 0.088 - 370.40 12.619 12.623 12.668 0.301 1.069 0.506 0.301 1.069 0.541 0.152 0.322 0.745 0.324 - 370.45 12.537 12.541 12.581 0.328 1.003 0.424 0.328 1.003 0.425 0.139 0.329 0.646 0.278 - 370.50 12.395 12.398 12.428 -0.258 0.874 0.282 -0.258 0.874 0.247 -0.073 -0.225 0.455 0.171 - 370.55 12.529 12.538 12.582 -0.462 1.060 0.416 -0.462 1.060 0.441 -0.192 -0.490 0.756 0.344 - 370.60 12.665 12.669 12.712 -0.312 1.037 0.553 -0.312 1.037 0.573 -0.172 -0.323 0.738 0.340 - 370.65 12.639 12.655 12.683 -0.631 0.851 0.526 -0.631 0.851 0.448 -0.332 -0.537 0.700 0.387 - 370.70 12.937 12.953 12.986 -0.640 0.928 0.825 -0.640 0.928 0.765 -0.527 -0.594 0.975 0.551 - 370.75 13.046 13.068 13.083 -0.762 0.634 0.933 -0.762 0.634 0.591 -0.711 -0.483 0.926 0.522 - 370.80 12.983 13.008 13.048 -0.817 1.017 0.870 -0.817 1.017 0.885 -0.711 -0.831 1.230 0.704 - 370.85 12.667 12.725 12.753 -1.215 0.849 0.554 -1.215 0.849 0.470 -0.673 -1.031 1.252 0.659 - 370.90 12.623 12.647 12.668 -0.785 0.724 0.510 -0.785 0.724 0.369 -0.401 -0.568 0.700 0.394 - 370.95 12.561 12.580 12.586 -0.681 0.398 0.448 -0.681 0.398 0.178 -0.305 -0.271 0.411 0.223 - 371.00 12.181 12.196 12.212 -0.592 0.638 0.068 -0.592 0.638 0.044 -0.041 -0.378 0.381 0.191 - 371.05 12.139 12.154 12.201 -0.592 1.071 0.026 -0.592 1.071 0.028 -0.016 -0.635 0.750 0.318 - 371.10 11.777 11.802 11.843 -0.757 0.993 -0.335 -0.757 0.993 -0.333 0.254 -0.751 0.835 0.430 - 371.15 11.289 11.301 11.367 -0.514 1.221 -0.823 -0.514 1.221 -1.006 0.423 -0.628 1.217 0.629 - 371.20 11.150 11.162 11.202 -0.531 0.942 -0.963 -0.531 0.942 -0.907 0.512 -0.501 1.049 0.578 - 371.25 11.098 11.100 11.134 -0.197 0.871 -1.014 -0.197 0.871 -0.884 0.200 -0.172 0.913 0.461 - 371.30 11.115 11.116 11.143 0.109 0.785 -0.998 0.109 0.785 -0.783 -0.109 0.086 0.812 0.398 - 371.35 11.431 11.432 11.447 0.201 0.575 -0.682 0.201 0.575 -0.392 -0.137 0.116 0.418 0.216 - 371.40 11.725 11.732 11.766 0.408 0.888 -0.388 0.408 0.888 -0.344 -0.158 0.362 0.553 0.262 - 371.45 11.869 11.887 11.900 0.660 0.561 -0.244 0.660 0.561 -0.137 -0.161 0.370 0.405 0.213 - 371.50 11.740 11.750 11.770 0.476 0.682 -0.372 0.476 0.682 -0.254 -0.177 0.325 0.415 0.224 - 371.55 11.469 11.490 11.538 0.708 1.048 -0.644 0.708 1.048 -0.675 -0.456 0.742 1.008 0.551 - 371.60 11.567 11.577 11.598 0.479 0.702 -0.546 0.479 0.702 -0.383 -0.262 0.337 0.510 0.287 - 371.65 11.466 11.473 11.489 0.406 0.600 -0.647 0.406 0.600 -0.388 -0.263 0.244 0.472 0.264 - 371.70 11.402 11.408 11.418 0.348 0.483 -0.710 0.348 0.483 -0.343 -0.247 0.168 0.430 0.228 - 371.75 11.450 11.453 11.463 0.254 0.470 -0.663 0.254 0.470 -0.312 -0.169 0.120 0.363 0.187 - 371.80 11.490 11.503 11.515 0.549 0.527 -0.623 0.549 0.527 -0.328 -0.342 0.289 0.483 0.277 - 371.85 11.699 11.707 11.730 0.415 0.736 -0.413 0.415 0.736 -0.304 -0.172 0.306 0.442 0.232 - 371.90 11.483 11.501 11.521 0.646 0.673 -0.630 0.646 0.673 -0.424 -0.407 0.434 0.633 0.365 - 371.95 11.701 11.719 11.723 0.663 0.296 -0.412 0.663 0.296 -0.122 -0.273 0.196 0.349 0.179 - 372.00 11.176 11.198 11.200 0.716 0.164 -0.937 0.716 0.164 -0.154 -0.671 0.118 0.709 0.349 - 372.05 10.997 11.016 11.019 0.640 0.269 -1.115 0.640 0.269 -0.301 -0.714 0.173 0.863 0.397 - 372.10 11.217 11.220 11.225 0.275 0.304 -0.896 0.275 0.304 -0.273 -0.247 0.084 0.485 0.189 - 372.15 10.944 10.954 10.956 0.467 0.214 -1.169 0.467 0.214 -0.250 -0.546 0.100 0.815 0.304 - 372.20 10.770 10.775 10.780 0.343 0.310 -1.343 0.343 0.310 -0.416 -0.460 0.106 1.008 0.315 - 372.25 10.856 10.856 10.859 0.090 0.256 -1.257 0.090 0.256 -0.322 -0.113 0.023 0.826 0.171 - 372.30 10.527 10.531 10.542 0.286 0.475 -1.586 0.286 0.475 -0.753 -0.453 0.136 1.411 0.445 - 372.35 10.152 10.178 10.185 0.719 0.384 -1.960 0.719 0.384 -0.754 -1.409 0.276 2.254 0.811 - 372.40 10.415 10.425 10.428 0.468 0.249 -1.698 0.468 0.249 -0.423 -0.794 0.117 1.582 0.454 - 372.45 10.575 10.577 10.577 0.173 0.096 -1.538 0.173 0.096 -0.148 -0.266 0.017 1.202 0.152 - 372.50 10.731 10.731 10.734 0.032 0.244 -1.382 0.032 0.244 -0.337 -0.044 0.008 0.985 0.170 - 372.55 10.836 10.836 10.840 -0.104 0.294 -1.277 -0.104 0.294 -0.376 0.133 -0.031 0.864 0.200 - 372.60 11.034 11.040 11.046 -0.383 0.339 -1.079 -0.383 0.339 -0.366 0.413 -0.130 0.713 0.283 - 372.65 10.803 10.805 10.814 -0.168 0.439 -1.309 -0.168 0.439 -0.574 0.219 -0.073 0.968 0.310 - 372.70 10.928 10.928 10.929 -0.100 0.096 -1.185 -0.100 0.096 -0.114 0.119 -0.010 0.712 0.082 - 372.75 11.179 11.180 11.180 -0.150 -0.067 -0.934 -0.150 -0.067 0.063 0.140 0.010 0.450 0.077 - 372.80 11.074 11.078 11.078 0.319 -0.040 -1.039 0.319 -0.040 0.041 -0.331 -0.013 0.591 0.167 - 372.85 11.262 11.274 11.275 0.506 -0.165 -0.850 0.506 -0.165 0.140 -0.430 -0.083 0.503 0.230 - 372.90 11.298 11.309 11.310 0.511 -0.040 -0.815 0.511 -0.040 0.032 -0.416 -0.020 0.463 0.209 - 372.95 11.461 11.467 11.467 0.352 0.070 -0.651 0.352 0.070 -0.045 -0.229 0.025 0.277 0.118 - 373.00 11.384 11.400 11.402 0.612 0.208 -0.729 0.612 0.208 -0.152 -0.446 0.127 0.475 0.244 - 373.05 11.156 11.187 11.189 0.826 0.226 -0.957 0.826 0.226 -0.216 -0.791 0.187 0.825 0.420 - 373.10 11.494 11.526 11.531 0.865 -0.328 -0.619 0.865 -0.328 0.203 -0.535 -0.283 0.619 0.319 - 373.15 11.445 11.470 11.483 0.758 -0.529 -0.667 0.758 -0.529 0.353 -0.506 -0.401 0.650 0.368 - 373.20 11.300 11.325 11.335 0.742 -0.475 -0.813 0.742 -0.475 0.386 -0.603 -0.353 0.718 0.399 - 373.25 11.136 11.167 11.183 0.833 -0.593 -0.976 0.833 -0.593 0.579 -0.813 -0.493 0.999 0.557 - 373.30 11.160 11.190 11.193 0.816 -0.247 -0.952 0.816 -0.247 0.236 -0.777 -0.202 0.817 0.419 - 373.35 11.212 11.229 11.231 0.627 -0.200 -0.901 0.627 -0.200 0.181 -0.565 -0.126 0.622 0.303 - 373.40 11.361 11.387 11.388 0.769 -0.095 -0.752 0.769 -0.095 0.071 -0.578 -0.073 0.583 0.294 - 373.45 11.369 11.383 11.395 0.562 -0.541 -0.744 0.562 -0.541 0.403 -0.418 -0.304 0.581 0.328 - 373.50 11.423 11.441 11.460 0.635 -0.671 -0.690 0.635 -0.671 0.463 -0.438 -0.426 0.665 0.383 - 373.55 11.532 11.571 11.580 0.949 -0.447 -0.580 0.949 -0.447 0.259 -0.551 -0.424 0.719 0.371 - 373.60 11.360 11.440 11.443 1.352 -0.279 -0.753 1.352 -0.279 0.210 -1.018 -0.377 1.236 0.553 - 373.65 11.372 11.442 11.444 1.271 -0.190 -0.741 1.271 -0.190 0.141 -0.942 -0.242 1.100 0.491 - 373.70 11.451 11.492 11.493 0.970 -0.135 -0.662 0.970 -0.135 0.089 -0.642 -0.131 0.698 0.330 - 373.75 11.370 11.431 11.431 1.180 -0.043 -0.743 1.180 -0.043 0.032 -0.877 -0.051 0.974 0.440 - 373.80 11.250 11.292 11.293 0.972 -0.159 -0.863 0.972 -0.159 0.137 -0.839 -0.154 0.857 0.432 - 373.85 11.398 11.438 11.438 0.947 0.111 -0.714 0.947 0.111 -0.080 -0.677 0.106 0.710 0.345 - 373.90 11.513 11.524 11.525 0.509 0.157 -0.600 0.509 0.157 -0.094 -0.305 0.080 0.322 0.165 - 373.95 11.594 11.599 11.599 0.308 -0.104 -0.518 0.308 -0.104 0.054 -0.160 -0.032 0.187 0.086 - 374.00 11.566 11.567 11.572 -0.134 -0.327 -0.547 -0.134 -0.327 0.179 0.073 0.044 0.212 0.099 - 374.05 11.591 11.591 11.592 -0.030 -0.135 -0.522 -0.030 -0.135 0.070 0.016 0.004 0.146 0.036 - 374.10 11.560 11.560 11.560 -0.085 -0.114 -0.553 -0.085 -0.114 0.063 0.047 0.010 0.163 0.040 - 374.15 11.390 11.390 11.391 -0.007 0.184 -0.723 -0.007 0.184 -0.133 0.005 -0.001 0.278 0.067 - 374.20 11.732 11.733 11.736 0.175 0.268 -0.381 0.175 0.268 -0.102 -0.067 0.047 0.124 0.065 - 374.25 12.264 12.271 12.284 0.418 0.579 0.151 0.418 0.579 0.087 0.063 0.242 0.266 0.132 - 374.30 11.982 11.982 11.998 0.053 0.615 -0.131 0.053 0.615 -0.080 -0.007 0.032 0.199 0.043 - 374.35 12.164 12.164 12.168 0.069 0.307 0.051 0.069 0.307 0.016 0.004 0.021 0.051 0.013 - 374.40 11.963 11.964 11.965 0.035 0.185 -0.149 0.035 0.185 -0.028 -0.005 0.006 0.029 0.014 - 374.45 11.725 11.725 11.727 0.056 0.165 -0.387 0.056 0.165 -0.064 -0.022 0.009 0.090 0.034 - 374.50 11.699 11.700 11.701 0.159 0.172 -0.414 0.159 0.172 -0.071 -0.066 0.027 0.113 0.050 - 374.55 11.755 11.769 11.769 0.571 0.021 -0.358 0.571 0.021 -0.007 -0.204 0.012 0.227 0.102 - 374.60 11.812 11.814 11.814 0.211 0.077 -0.301 0.211 0.077 -0.023 -0.063 0.016 0.070 0.035 - 374.65 11.828 11.829 11.833 0.168 -0.296 -0.285 0.168 -0.296 0.084 -0.048 -0.050 0.099 0.055 - 374.70 11.584 11.584 11.584 0.120 -0.021 -0.529 0.120 -0.021 0.011 -0.063 -0.002 0.147 0.032 - 374.75 11.830 11.836 11.840 0.351 -0.326 -0.282 0.351 -0.326 0.092 -0.099 -0.114 0.155 0.089 - 374.80 12.006 12.007 12.021 0.188 -0.577 -0.107 0.188 -0.577 0.062 -0.020 -0.108 0.190 0.063 - 374.85 12.162 12.176 12.176 0.579 -0.039 0.050 0.579 -0.039 -0.002 0.029 -0.023 0.170 0.018 - 374.90 12.196 12.201 12.201 0.355 0.030 0.083 0.355 0.030 0.002 0.030 0.011 0.067 0.016 - 374.95 11.945 11.956 11.957 0.512 -0.176 -0.168 0.512 -0.176 0.029 -0.086 -0.090 0.161 0.064 - 375.00 12.083 12.104 12.105 0.712 0.090 -0.029 0.712 0.090 -0.003 -0.021 0.064 0.258 0.034 - 375.05 11.783 11.799 11.802 0.606 0.293 -0.330 0.606 0.293 -0.097 -0.200 0.177 0.281 0.142 - 375.10 11.576 11.581 11.584 0.322 0.286 -0.537 0.322 0.286 -0.153 -0.173 0.092 0.237 0.124 - 375.15 11.627 11.627 11.628 0.140 0.087 -0.486 0.140 0.087 -0.042 -0.068 0.012 0.132 0.041 - 375.20 11.527 11.527 11.532 -0.082 0.336 -0.586 -0.082 0.336 -0.197 0.048 -0.028 0.231 0.102 - 375.25 11.594 11.601 11.601 0.394 0.084 -0.519 0.394 0.084 -0.044 -0.204 0.033 0.216 0.106 - 375.30 11.529 11.545 11.547 0.608 -0.234 -0.584 0.608 -0.234 0.136 -0.355 -0.142 0.383 0.203 - 375.35 11.581 11.597 11.605 0.617 -0.425 -0.532 0.617 -0.425 0.226 -0.328 -0.262 0.422 0.238 - 375.40 11.388 11.394 11.394 0.379 0.011 -0.725 0.379 0.011 -0.008 -0.275 0.004 0.335 0.137 - 375.45 11.504 11.505 11.505 0.114 0.100 -0.608 0.114 0.100 -0.061 -0.069 0.011 0.196 0.046 - 375.50 11.562 11.562 11.565 -0.104 -0.281 -0.551 -0.104 -0.281 0.155 0.057 0.029 0.197 0.084 - 375.55 11.585 11.585 11.586 0.092 -0.125 -0.528 0.092 -0.125 0.066 -0.049 -0.011 0.151 0.041 - 375.60 11.360 11.360 11.364 -0.057 -0.277 -0.753 -0.057 -0.277 0.209 0.043 0.016 0.323 0.107 - 375.65 11.260 11.261 11.261 0.133 -0.100 -0.853 0.133 -0.100 0.085 -0.113 -0.013 0.377 0.071 - 375.70 11.352 11.355 11.356 0.263 -0.135 -0.761 0.263 -0.135 0.103 -0.200 -0.036 0.333 0.114 - 375.75 11.547 11.548 11.551 0.167 -0.252 -0.566 0.167 -0.252 0.143 -0.095 -0.042 0.206 0.088 - 375.80 11.757 11.758 11.758 0.111 -0.023 -0.356 0.111 -0.023 0.008 -0.040 -0.003 0.070 0.020 - 375.85 11.783 11.785 11.785 0.212 0.107 -0.330 0.212 0.107 -0.035 -0.070 0.023 0.083 0.041 - 375.90 11.514 11.515 11.519 0.123 0.324 -0.599 0.123 0.324 -0.194 -0.074 0.040 0.239 0.106 - 375.95 11.688 11.688 11.688 -0.020 -0.074 -0.425 -0.020 -0.074 0.032 0.008 0.001 0.093 0.016 - 376.00 11.758 11.759 11.761 -0.167 0.202 -0.355 -0.167 0.202 -0.072 0.059 -0.034 0.097 0.049 - 376.05 11.768 11.769 11.770 -0.158 -0.063 -0.344 -0.158 -0.063 0.022 0.054 0.010 0.074 0.030 - 376.10 11.436 11.453 11.454 -0.615 0.203 -0.677 -0.615 0.203 -0.137 0.416 -0.125 0.439 0.228 - 376.15 11.466 11.480 11.480 -0.574 -0.001 -0.647 -0.574 -0.001 0.001 0.371 0.000 0.374 0.186 - 376.20 11.661 11.671 11.672 -0.483 0.165 -0.452 -0.483 0.165 -0.075 0.219 -0.080 0.233 0.122 - 376.25 11.540 11.597 11.604 -1.147 0.388 -0.573 -1.147 0.388 -0.222 0.657 -0.444 0.897 0.412 - 376.30 11.520 11.548 11.548 -0.810 -0.038 -0.593 -0.810 -0.038 0.022 0.481 0.031 0.505 0.241 - 376.35 11.543 11.558 11.559 -0.572 -0.197 -0.569 -0.572 -0.197 0.112 0.326 0.113 0.345 0.181 - 376.40 11.493 11.520 11.523 -0.786 -0.245 -0.620 -0.786 -0.245 0.152 0.487 0.192 0.530 0.272 - 376.45 11.600 11.636 11.640 -0.920 0.310 -0.513 -0.920 0.310 -0.159 0.472 -0.285 0.602 0.287 - 376.50 11.759 11.786 11.787 -0.807 0.079 -0.354 -0.807 0.079 -0.028 0.286 -0.063 0.391 0.147 - 376.55 11.729 11.765 11.768 -0.918 0.241 -0.384 -0.918 0.241 -0.093 0.352 -0.221 0.524 0.213 - 376.60 11.871 11.885 11.885 -0.575 0.066 -0.242 -0.575 0.066 -0.016 0.139 -0.038 0.197 0.072 - 376.65 11.809 11.824 11.825 -0.590 0.198 -0.304 -0.590 0.198 -0.060 0.179 -0.117 0.240 0.111 - 376.70 11.386 11.403 11.409 -0.615 0.375 -0.727 -0.615 0.375 -0.273 0.447 -0.231 0.523 0.286 - 376.75 11.236 11.270 11.270 -0.871 -0.075 -0.876 -0.871 -0.075 0.066 0.763 0.065 0.766 0.384 - 376.80 11.108 11.127 11.129 -0.655 0.221 -1.005 -0.655 0.221 -0.222 0.659 -0.145 0.744 0.355 - 376.85 11.208 11.249 11.258 -0.961 0.455 -0.905 -0.961 0.455 -0.412 0.870 -0.437 0.975 0.529 - 376.90 11.188 11.281 11.281 -1.448 0.086 -0.925 -1.448 0.086 -0.079 1.339 -0.124 1.479 0.674 - 376.95 11.277 11.328 11.328 -1.080 -0.023 -0.836 -1.080 -0.023 0.020 0.903 0.025 0.933 0.452 - 377.00 11.582 11.623 11.644 -0.974 -0.694 -0.531 -0.974 -0.694 0.368 0.517 0.676 0.856 0.464 - 377.05 11.362 11.428 11.433 -1.221 -0.360 -0.751 -1.221 -0.360 0.270 0.917 0.440 1.092 0.526 - 377.10 11.287 11.327 11.328 -0.949 -0.173 -0.826 -0.949 -0.173 0.143 0.784 0.164 0.806 0.407 - 377.15 11.413 11.424 11.425 -0.520 -0.140 -0.700 -0.520 -0.140 0.098 0.364 0.073 0.390 0.192 - 377.20 11.613 11.623 11.625 -0.460 -0.251 -0.499 -0.460 -0.251 0.126 0.230 0.116 0.262 0.143 - 377.25 11.736 11.743 11.743 -0.413 0.078 -0.377 -0.413 0.078 -0.029 0.156 -0.032 0.159 0.081 - 377.30 11.794 11.800 11.802 -0.363 -0.198 -0.319 -0.363 -0.198 0.063 0.116 0.072 0.136 0.075 - 377.35 11.726 11.738 11.742 -0.533 -0.315 -0.387 -0.533 -0.315 0.122 0.206 0.168 0.266 0.146 - 377.40 11.662 11.679 11.680 -0.629 -0.183 -0.451 -0.629 -0.183 0.083 0.284 0.115 0.317 0.159 - 377.45 11.590 11.620 11.625 -0.840 0.331 -0.523 -0.840 0.331 -0.173 0.440 -0.278 0.545 0.274 - 377.50 11.423 11.458 11.464 -0.902 0.359 -0.690 -0.902 0.359 -0.248 0.623 -0.324 0.710 0.372 - 377.55 11.433 11.465 11.466 -0.861 0.151 -0.680 -0.861 0.151 -0.103 0.586 -0.130 0.613 0.304 - 377.60 11.346 11.404 11.406 -1.154 0.167 -0.767 -1.154 0.167 -0.128 0.885 -0.193 0.974 0.458 - 377.65 10.945 10.997 10.997 -1.068 -0.039 -1.168 -1.068 -0.039 0.046 1.248 0.042 1.254 0.625 - 377.70 10.908 10.942 10.944 -0.856 0.235 -1.204 -0.856 0.235 -0.283 1.031 -0.201 1.119 0.544 - 377.75 10.996 11.059 11.060 -1.178 0.168 -1.117 -1.178 0.168 -0.188 1.316 -0.198 1.332 0.672 - 377.80 10.763 10.815 10.823 -1.053 0.416 -1.350 -1.053 0.416 -0.561 1.421 -0.438 1.552 0.795 - 377.85 11.017 11.073 11.085 -1.109 0.529 -1.096 -1.109 0.529 -0.579 1.215 -0.586 1.355 0.734 - 377.90 10.994 11.031 11.041 -0.894 0.488 -1.118 -0.894 0.488 -0.545 1.000 -0.436 1.144 0.610 - 377.95 10.870 10.892 10.905 -0.687 0.524 -1.242 -0.687 0.524 -0.651 0.854 -0.360 1.146 0.566 - 378.00 11.028 11.055 11.057 -0.772 0.201 -1.085 -0.772 0.201 -0.218 0.837 -0.155 0.906 0.439 - 378.05 11.135 11.161 11.162 -0.766 0.153 -0.978 -0.766 0.153 -0.150 0.749 -0.117 0.783 0.386 - 378.10 11.284 11.305 11.323 -0.690 0.639 -0.829 -0.690 0.639 -0.530 0.572 -0.441 0.786 0.448 - 378.15 11.260 11.261 11.264 -0.107 0.268 -0.852 -0.107 0.268 -0.228 0.091 -0.029 0.405 0.124 - 378.20 10.965 10.967 10.983 0.178 0.609 -1.148 0.178 0.609 -0.699 -0.205 0.109 0.860 0.368 - 378.25 10.812 10.816 10.849 0.269 0.849 -1.300 0.269 0.849 -1.104 -0.349 0.228 1.242 0.590 - 378.30 10.915 10.916 10.947 0.147 0.814 -1.197 0.147 0.814 -0.974 -0.176 0.120 1.059 0.499 - 378.35 11.018 11.021 11.101 0.273 1.335 -1.095 0.273 1.335 -1.462 -0.299 0.365 1.528 0.768 - 378.40 11.135 11.144 11.235 0.448 1.429 -0.978 0.448 1.429 -1.398 -0.438 0.641 1.600 0.799 - 378.45 11.290 11.296 11.361 0.391 1.213 -0.823 0.391 1.213 -0.998 -0.322 0.474 1.151 0.576 - 378.50 11.155 11.158 11.233 0.238 1.298 -0.957 0.238 1.298 -1.243 -0.228 0.309 1.329 0.650 - 378.55 11.320 11.320 11.348 0.023 0.794 -0.793 0.023 0.794 -0.629 -0.018 0.018 0.630 0.315 - 378.60 11.393 11.396 11.409 0.289 0.542 -0.720 0.289 0.542 -0.391 -0.208 0.157 0.448 0.235 - 378.65 11.187 11.221 11.227 0.873 0.374 -0.926 0.873 0.374 -0.346 -0.809 0.326 0.880 0.469 - 378.70 11.084 11.164 11.210 1.337 1.012 -1.029 1.337 1.012 -1.041 -1.376 1.353 1.936 1.097 - 378.75 11.398 11.439 11.499 0.963 1.174 -0.715 0.963 1.174 -0.839 -0.688 1.130 1.408 0.783 - 378.80 11.754 11.806 11.860 1.107 1.133 -0.359 1.107 1.133 -0.406 -0.397 1.254 1.319 0.688 - 378.85 11.642 11.671 11.724 0.829 1.108 -0.471 0.829 1.108 -0.522 -0.391 0.919 1.069 0.564 - 378.90 11.488 11.511 11.570 0.738 1.161 -0.625 0.738 1.161 -0.726 -0.461 0.856 1.141 0.607 - 378.95 11.603 11.635 11.680 0.867 1.022 -0.510 0.867 1.022 -0.522 -0.442 0.886 1.029 0.560 - 379.00 11.655 11.694 11.721 0.961 0.794 -0.458 0.961 0.794 -0.364 -0.440 0.763 0.882 0.477 - 379.05 11.673 11.700 11.712 0.803 0.518 -0.440 0.803 0.518 -0.228 -0.353 0.417 0.554 0.296 - 379.10 11.713 11.731 11.740 0.651 0.465 -0.400 0.651 0.465 -0.186 -0.260 0.303 0.400 0.220 - 379.15 11.824 11.868 11.875 1.019 0.428 -0.289 1.019 0.428 -0.124 -0.294 0.437 0.653 0.271 - 379.20 11.527 11.543 11.551 0.597 0.437 -0.585 0.597 0.437 -0.256 -0.349 0.261 0.445 0.253 - 379.25 11.429 11.455 11.459 0.776 0.299 -0.684 0.776 0.299 -0.204 -0.530 0.232 0.579 0.307 - 379.30 11.284 11.308 11.321 0.746 0.538 -0.829 0.746 0.538 -0.446 -0.618 0.401 0.766 0.431 - 379.35 11.475 11.494 11.512 0.662 0.657 -0.638 0.662 0.657 -0.419 -0.422 0.435 0.638 0.368 - 379.40 11.273 11.281 11.334 0.438 1.092 -0.840 0.438 1.092 -0.918 -0.368 0.478 1.045 0.549 - 379.45 11.299 11.303 11.328 0.294 0.745 -0.814 0.294 0.745 -0.606 -0.240 0.219 0.652 0.344 - 379.50 11.497 11.497 11.512 -0.044 0.587 -0.616 -0.044 0.587 -0.361 0.027 -0.026 0.363 0.182 - 379.55 11.677 11.678 11.681 -0.145 0.251 -0.436 -0.145 0.251 -0.109 0.063 -0.036 0.137 0.066 - 379.60 11.731 11.732 11.743 -0.136 0.506 -0.381 -0.136 0.506 -0.193 0.052 -0.069 0.210 0.106 - 379.65 11.595 11.601 11.626 -0.372 0.757 -0.518 -0.372 0.757 -0.392 0.192 -0.281 0.489 0.260 - 379.70 11.386 11.392 11.418 -0.382 0.769 -0.727 -0.382 0.769 -0.559 0.278 -0.294 0.633 0.345 - 379.75 11.308 11.311 11.330 -0.248 0.657 -0.805 -0.248 0.657 -0.529 0.200 -0.163 0.571 0.294 - 379.80 11.272 11.273 11.297 -0.165 0.739 -0.841 -0.165 0.739 -0.622 0.139 -0.122 0.640 0.324 - 379.85 11.391 11.391 11.400 -0.067 0.458 -0.722 -0.067 0.458 -0.331 0.048 -0.031 0.368 0.168 - 379.90 11.275 11.285 11.298 -0.487 0.531 -0.838 -0.487 0.531 -0.445 0.408 -0.258 0.611 0.328 - 379.95 11.356 11.393 11.396 -0.910 0.257 -0.757 -0.910 0.257 -0.195 0.689 -0.234 0.734 0.377 - 380.00 11.299 11.323 11.323 -0.728 0.128 -0.814 -0.728 0.128 -0.104 0.592 -0.093 0.604 0.304 - 380.05 11.328 11.341 11.341 -0.538 0.023 -0.784 -0.538 0.023 -0.018 0.422 -0.012 0.453 0.211 - 380.10 11.501 11.516 11.518 -0.598 -0.193 -0.612 -0.598 -0.193 0.118 0.366 0.115 0.384 0.201 - 380.15 11.313 11.333 11.334 -0.665 0.126 -0.799 -0.665 0.126 -0.101 0.532 -0.084 0.549 0.274 - 380.20 11.329 11.347 11.348 -0.641 -0.085 -0.784 -0.641 -0.085 0.067 0.502 0.054 0.516 0.255 - 380.25 11.442 11.450 11.450 -0.440 -0.055 -0.671 -0.440 -0.055 0.037 0.295 0.024 0.323 0.149 - 380.30 11.177 11.178 11.182 -0.167 0.307 -0.936 -0.167 0.307 -0.288 0.156 -0.051 0.499 0.166 - 380.35 11.641 11.641 11.649 0.055 0.424 -0.472 0.055 0.424 -0.200 -0.026 0.023 0.202 0.101 - 380.40 11.643 11.644 11.644 0.201 -0.002 -0.470 0.201 -0.002 0.001 -0.095 -0.000 0.131 0.047 - 380.45 11.596 11.603 11.603 0.408 0.115 -0.517 0.408 0.115 -0.059 -0.211 0.047 0.224 0.112 - 380.50 11.435 11.438 11.444 0.271 0.389 -0.678 0.271 0.389 -0.264 -0.184 0.105 0.343 0.169 - 380.55 11.414 11.414 11.422 0.023 0.413 -0.699 0.023 0.413 -0.289 -0.016 0.010 0.330 0.145 - 380.60 11.372 11.374 11.381 -0.225 0.389 -0.741 -0.225 0.389 -0.288 0.166 -0.087 0.375 0.172 - 380.65 11.252 11.261 11.264 -0.447 0.289 -0.861 -0.447 0.289 -0.248 0.385 -0.129 0.512 0.238 - 380.70 10.904 10.912 10.917 -0.406 0.338 -1.209 -0.406 0.338 -0.408 0.490 -0.137 0.870 0.326 - 380.75 10.810 10.812 10.814 -0.219 0.167 -1.303 -0.219 0.167 -0.217 0.285 -0.036 0.886 0.180 - 380.80 11.221 11.222 11.222 -0.083 0.034 -0.891 -0.083 0.034 -0.031 0.074 -0.003 0.401 0.040 - 380.85 11.446 11.452 11.452 0.374 0.001 -0.667 0.374 0.001 -0.000 -0.250 0.000 0.292 0.125 - 380.90 11.993 12.005 12.005 0.556 -0.000 -0.120 0.556 -0.000 0.000 -0.067 -0.000 0.162 0.033 - 380.95 12.002 12.002 12.004 -0.031 0.246 -0.111 -0.031 0.246 -0.027 0.003 -0.008 0.037 0.014 - 381.00 11.785 11.787 11.791 -0.181 0.306 -0.328 -0.181 0.306 -0.100 0.059 -0.055 0.117 0.064 - 381.05 11.568 11.568 11.572 -0.058 0.310 -0.545 -0.058 0.310 -0.169 0.032 -0.018 0.198 0.086 - 381.10 11.179 11.179 11.204 -0.069 0.753 -0.934 -0.069 0.753 -0.703 0.064 -0.052 0.722 0.354 - 381.15 10.992 10.993 11.022 -0.074 0.807 -1.120 -0.074 0.807 -0.904 0.083 -0.060 0.956 0.455 - 381.20 10.737 10.737 10.763 -0.002 0.748 -1.376 -0.002 0.748 -1.029 0.003 -0.001 1.226 0.514 - 381.25 10.697 10.699 10.700 0.188 0.170 -1.416 0.188 0.170 -0.240 -0.266 0.032 1.034 0.180 - 381.30 10.717 10.723 10.724 0.371 -0.106 -1.396 0.371 -0.106 0.148 -0.518 -0.039 1.049 0.270 - 381.35 10.784 10.785 10.787 0.142 -0.210 -1.329 0.142 -0.210 0.280 -0.189 -0.030 0.915 0.169 - 381.40 10.907 10.907 10.910 0.027 -0.220 -1.205 0.027 -0.220 0.266 -0.032 -0.006 0.751 0.134 - 381.45 11.102 11.112 11.117 0.457 -0.352 -1.011 0.457 -0.352 0.356 -0.462 -0.161 0.677 0.303 - 381.50 11.364 11.367 11.369 0.270 -0.223 -0.749 0.270 -0.223 0.167 -0.202 -0.060 0.342 0.135 - 381.55 11.479 11.482 11.483 -0.254 -0.132 -0.634 -0.254 -0.132 0.084 0.161 0.033 0.242 0.092 - 381.60 11.460 11.468 11.474 -0.425 -0.370 -0.653 -0.425 -0.370 0.241 0.277 0.157 0.372 0.200 - 381.65 11.325 11.327 11.331 0.237 -0.306 -0.788 0.237 -0.306 0.241 -0.187 -0.073 0.385 0.157 - 381.70 11.110 11.122 11.148 0.508 -0.758 -1.002 0.508 -0.758 0.760 -0.509 -0.385 0.919 0.496 - 381.75 10.877 10.887 10.903 0.477 -0.586 -1.236 0.477 -0.586 0.725 -0.590 -0.280 1.050 0.488 - 381.80 10.734 10.743 10.755 0.451 -0.514 -1.379 0.451 -0.514 0.708 -0.622 -0.232 1.185 0.485 - 381.85 11.049 11.063 11.069 0.554 -0.376 -1.064 0.554 -0.376 0.400 -0.590 -0.208 0.790 0.371 - 381.90 11.154 11.174 11.181 0.669 -0.385 -0.959 0.669 -0.385 0.369 -0.641 -0.257 0.757 0.392 - 381.95 11.334 11.383 11.389 1.058 -0.379 -0.779 1.058 -0.379 0.295 -0.824 -0.401 0.935 0.482 - 382.00 11.501 11.541 11.547 0.957 -0.387 -0.612 0.957 -0.387 0.237 -0.585 -0.371 0.720 0.366 - 382.05 11.600 11.649 11.659 1.063 -0.477 -0.512 1.063 -0.477 0.244 -0.545 -0.507 0.810 0.391 - 382.10 11.391 11.448 11.461 1.143 -0.539 -0.722 1.143 -0.539 0.389 -0.826 -0.617 1.060 0.551 - 382.15 11.570 11.595 11.633 0.767 -0.933 -0.543 0.767 -0.933 0.507 -0.416 -0.716 0.877 0.485 - 382.20 11.738 11.753 11.768 0.587 -0.603 -0.375 0.587 -0.603 0.226 -0.220 -0.354 0.424 0.237 - 382.25 11.776 11.795 11.837 0.662 -0.992 -0.336 0.662 -0.992 0.334 -0.223 -0.657 0.768 0.385 - 382.30 11.808 11.823 11.861 0.599 -0.955 -0.305 0.599 -0.955 0.291 -0.183 -0.572 0.682 0.334 - 382.35 11.924 11.951 11.976 0.802 -0.783 -0.189 0.802 -0.783 0.148 -0.152 -0.628 0.646 0.331 - 382.40 12.011 12.020 12.062 0.471 -0.999 -0.102 0.471 -0.999 0.102 -0.048 -0.471 0.616 0.242 - 382.45 12.164 12.172 12.268 0.456 -1.532 0.051 0.456 -1.532 -0.078 0.023 -0.699 1.279 0.352 - 382.50 12.130 12.153 12.262 0.756 -1.628 0.017 0.756 -1.628 -0.027 0.013 -1.230 1.610 0.615 - 382.55 12.196 12.222 12.289 0.804 -1.282 0.083 0.804 -1.282 -0.106 0.066 -1.030 1.147 0.519 - 382.60 11.929 11.952 12.024 0.741 -1.311 -0.184 0.741 -1.311 0.241 -0.136 -0.972 1.151 0.505 - 382.65 11.888 11.892 11.953 0.304 -1.200 -0.224 0.304 -1.200 0.270 -0.068 -0.365 0.792 0.229 - 382.70 11.832 11.835 11.923 0.273 -1.443 -0.281 0.273 -1.443 0.405 -0.077 -0.395 1.118 0.285 - 382.75 11.603 11.617 11.732 0.567 -1.640 -0.510 0.567 -1.640 0.836 -0.289 -0.929 1.635 0.641 - 382.80 11.534 11.536 11.622 0.222 -1.409 -0.579 0.222 -1.409 0.816 -0.129 -0.313 1.184 0.442 - 382.85 11.489 11.490 11.566 0.139 -1.324 -0.624 0.139 -1.324 0.827 -0.087 -0.184 1.081 0.426 - 382.90 11.698 11.703 11.770 0.354 -1.253 -0.415 0.354 -1.253 0.520 -0.147 -0.443 0.934 0.349 - 382.95 11.673 11.688 11.738 0.590 -1.083 -0.440 0.590 -1.083 0.476 -0.260 -0.639 0.857 0.419 - 383.00 11.696 11.704 11.752 0.423 -1.059 -0.417 0.423 -1.059 0.441 -0.176 -0.448 0.738 0.327 - 383.05 11.580 11.592 11.636 0.527 -1.007 -0.533 0.527 -1.007 0.537 -0.281 -0.531 0.788 0.403 - 383.10 11.245 11.257 11.292 0.518 -0.888 -0.867 0.518 -0.888 0.770 -0.449 -0.460 0.905 0.502 - 383.15 11.314 11.317 11.354 0.269 -0.912 -0.799 0.269 -0.912 0.729 -0.215 -0.246 0.772 0.399 - 383.20 11.192 11.193 11.247 0.185 -1.097 -0.921 0.185 -1.097 1.010 -0.170 -0.202 1.042 0.522 - 383.25 11.402 11.417 11.473 0.587 -1.132 -0.711 0.587 -1.132 0.805 -0.417 -0.664 1.066 0.562 - 383.30 12.082 12.102 12.178 0.688 -1.363 -0.030 0.688 -1.363 0.042 -0.021 -0.938 1.166 0.469 - 383.35 12.119 12.155 12.244 0.931 -1.472 0.006 0.931 -1.472 -0.009 0.006 -1.371 1.518 0.686 - 383.40 12.394 12.420 12.476 0.807 -1.180 0.281 0.807 -1.180 -0.331 0.227 -0.952 1.061 0.517 - 383.45 12.376 12.400 12.418 0.763 -0.676 0.263 0.763 -0.676 -0.178 0.201 -0.516 0.555 0.291 - 383.50 12.187 12.202 12.235 0.607 -0.894 0.074 0.607 -0.894 -0.066 0.045 -0.543 0.587 0.274 - 383.55 11.617 11.630 11.662 0.533 -0.866 -0.495 0.533 -0.866 0.429 -0.264 -0.462 0.639 0.342 - 383.60 11.278 11.279 11.316 0.163 -0.917 -0.835 0.163 -0.917 0.766 -0.136 -0.150 0.783 0.396 - 383.65 11.593 11.593 11.629 0.054 -0.910 -0.519 0.054 -0.910 0.473 -0.028 -0.050 0.551 0.238 - 383.70 11.775 11.782 11.814 0.384 -0.875 -0.338 0.384 -0.875 0.295 -0.130 -0.336 0.513 0.233 - 383.75 11.894 11.908 11.945 0.583 -0.939 -0.219 0.583 -0.939 0.206 -0.128 -0.547 0.635 0.299 - 383.80 11.520 11.522 11.539 0.222 -0.633 -0.593 0.222 -0.633 0.375 -0.131 -0.140 0.400 0.211 - 383.85 11.782 11.782 11.806 0.019 -0.747 -0.331 0.019 -0.747 0.247 -0.006 -0.014 0.334 0.124 - 383.90 11.651 11.651 11.676 0.068 -0.761 -0.462 0.068 -0.761 0.351 -0.031 -0.051 0.398 0.178 - 383.95 11.946 11.947 11.975 0.173 -0.811 -0.167 0.173 -0.811 0.135 -0.029 -0.140 0.358 0.098 - 384.00 12.100 12.107 12.129 0.393 -0.733 -0.013 0.393 -0.733 0.009 -0.005 -0.288 0.346 0.144 - 384.05 12.346 12.360 12.411 0.581 -1.127 0.234 0.581 -1.127 -0.263 0.136 -0.655 0.832 0.360 - 384.10 12.205 12.225 12.302 0.697 -1.381 0.092 0.697 -1.381 -0.127 0.064 -0.962 1.201 0.486 - 384.15 12.121 12.138 12.174 0.636 -0.931 0.008 0.636 -0.931 -0.008 0.005 -0.592 0.635 0.296 - 384.20 12.041 12.046 12.083 0.323 -0.946 -0.072 0.323 -0.946 0.068 -0.023 -0.305 0.502 0.157 - 384.25 11.915 11.922 11.981 0.395 -1.188 -0.198 0.395 -1.188 0.235 -0.078 -0.470 0.804 0.266 - 384.30 11.808 11.811 11.855 0.260 -1.018 -0.304 0.260 -1.018 0.310 -0.079 -0.265 0.599 0.208 - 384.35 11.736 11.736 11.767 0.138 -0.842 -0.377 0.138 -0.842 0.318 -0.052 -0.116 0.435 0.171 - 384.40 11.697 11.702 11.768 0.325 -1.244 -0.416 0.325 -1.244 0.517 -0.135 -0.405 0.913 0.335 - 384.45 11.768 11.770 11.819 0.187 -1.080 -0.345 0.187 -1.080 0.372 -0.064 -0.202 0.660 0.214 - 384.50 11.993 11.993 12.057 -0.064 -1.243 -0.120 -0.064 -1.243 0.149 0.008 0.080 0.782 0.085 - 384.55 12.047 12.047 12.116 -0.035 -1.288 -0.065 -0.035 -1.288 0.084 0.002 0.045 0.833 0.048 - 384.60 12.098 12.098 12.159 -0.021 -1.216 -0.015 -0.021 -1.216 0.018 0.000 0.025 0.740 0.016 - 384.65 12.212 12.217 12.291 -0.361 -1.342 0.099 -0.361 -1.342 -0.133 -0.036 0.484 0.971 0.252 - 384.70 12.127 12.133 12.188 -0.363 -1.159 0.014 -0.363 -1.159 -0.017 -0.005 0.421 0.738 0.211 - 384.75 12.061 12.064 12.099 -0.278 -0.915 -0.052 -0.278 -0.915 0.048 0.015 0.255 0.459 0.130 - 384.80 11.868 11.873 11.885 -0.340 -0.519 -0.244 -0.340 -0.519 0.127 0.083 0.177 0.222 0.116 - 384.85 12.197 12.201 12.217 -0.299 -0.617 0.085 -0.299 -0.617 -0.052 -0.025 0.184 0.238 0.097 - 384.90 12.251 12.258 12.301 -0.424 -1.022 0.138 -0.424 -1.022 -0.141 -0.059 0.433 0.622 0.230 - 384.95 12.367 12.372 12.434 -0.336 -1.245 0.254 -0.336 -1.245 -0.317 -0.086 0.419 0.864 0.266 - 385.00 12.533 12.534 12.608 -0.166 -1.365 0.420 -0.166 -1.365 -0.574 -0.070 0.227 1.034 0.310 - 385.05 12.363 12.364 12.419 -0.079 -1.175 0.251 -0.079 -1.175 -0.294 -0.020 0.093 0.725 0.155 - 385.10 12.429 12.430 12.525 -0.098 -1.540 0.317 -0.098 -1.540 -0.487 -0.031 0.152 1.240 0.256 - 385.15 12.531 12.531 12.629 -0.145 -1.568 0.418 -0.145 -1.568 -0.655 -0.061 0.228 1.327 0.348 - 385.20 12.508 12.512 12.614 -0.301 -1.605 0.395 -0.301 -1.605 -0.634 -0.119 0.484 1.411 0.403 - 385.25 12.664 12.664 12.750 -0.131 -1.472 0.551 -0.131 -1.472 -0.811 -0.072 0.193 1.244 0.418 - 385.30 12.586 12.598 12.656 -0.543 -1.207 0.474 -0.543 -1.207 -0.572 -0.257 0.656 0.989 0.454 - 385.35 12.905 12.906 12.979 -0.184 -1.372 0.792 -0.184 -1.372 -1.087 -0.146 0.252 1.272 0.563 - 385.40 12.863 12.863 12.947 -0.014 -1.468 0.750 -0.014 -1.468 -1.101 -0.010 0.020 1.359 0.551 - 385.45 12.943 12.944 13.048 -0.147 -1.645 0.830 -0.147 -1.645 -1.365 -0.122 0.241 1.708 0.696 - 385.50 13.215 13.222 13.307 -0.429 -1.510 1.102 -0.429 -1.510 -1.663 -0.473 0.648 1.839 0.923 - 385.55 13.229 13.236 13.293 -0.427 -1.234 1.116 -0.427 -1.234 -1.378 -0.476 0.527 1.476 0.775 - 385.60 12.889 12.892 12.931 -0.281 -1.001 0.776 -0.281 -1.001 -0.777 -0.218 0.282 0.842 0.427 - 385.65 13.021 13.023 13.084 -0.241 -1.261 0.908 -0.241 -1.261 -1.145 -0.219 0.305 1.236 0.602 - 385.70 13.221 13.235 13.270 -0.614 -0.964 1.108 -0.614 -0.964 -1.068 -0.681 0.592 1.267 0.699 - 385.75 13.303 13.326 13.352 -0.784 -0.844 1.190 -0.784 -0.844 -1.004 -0.933 0.662 1.372 0.761 - 385.80 12.894 12.922 12.938 -0.844 -0.646 0.781 -0.844 -0.646 -0.504 -0.659 0.545 0.869 0.496 - 385.85 12.771 12.794 12.811 -0.766 -0.656 0.658 -0.766 -0.656 -0.432 -0.504 0.503 0.726 0.417 - 385.90 13.066 13.109 13.146 -1.068 -0.979 0.953 -1.068 -0.979 -0.933 -1.018 1.045 1.503 0.866 - 385.95 12.646 12.684 12.694 -0.978 -0.515 0.533 -0.978 -0.515 -0.274 -0.521 0.504 0.753 0.388 - 386.00 12.729 12.757 12.781 -0.835 -0.789 0.616 -0.835 -0.789 -0.487 -0.515 0.659 0.850 0.484 - 386.05 12.533 12.565 12.583 -0.899 -0.667 0.420 -0.899 -0.667 -0.280 -0.378 0.599 0.715 0.381 - 386.10 12.544 12.576 12.596 -0.897 -0.697 0.431 -0.897 -0.697 -0.301 -0.387 0.626 0.739 0.397 - 386.15 12.593 12.597 12.606 -0.305 -0.476 0.480 -0.305 -0.476 -0.229 -0.146 0.145 0.275 0.154 - 386.20 13.070 13.078 13.110 -0.456 -0.917 0.957 -0.456 -0.917 -0.878 -0.437 0.418 0.983 0.533 - 386.25 13.024 13.040 13.073 -0.652 -0.925 0.911 -0.652 -0.925 -0.843 -0.594 0.603 1.056 0.597 - 386.30 13.235 13.272 13.304 -0.983 -0.925 1.123 -0.983 -0.925 -1.039 -1.103 0.909 1.541 0.883 - 386.35 13.336 13.386 13.436 -1.147 -1.169 1.224 -1.147 -1.169 -1.430 -1.403 1.340 2.089 1.205 - 386.40 13.293 13.328 13.351 -0.965 -0.791 1.180 -0.965 -0.791 -0.933 -1.139 0.763 1.475 0.829 - 386.45 13.453 13.491 13.504 -1.013 -0.604 1.340 -1.013 -0.604 -0.809 -1.357 0.612 1.593 0.847 - 386.50 13.513 13.540 13.565 -0.855 -0.815 1.400 -0.855 -0.815 -1.141 -1.198 0.697 1.678 0.898 - 386.55 13.548 13.570 13.620 -0.771 -1.169 1.435 -0.771 -1.169 -1.677 -1.106 0.901 2.009 1.101 - 386.60 13.536 13.565 13.638 -0.875 -1.414 1.424 -0.875 -1.414 -2.014 -1.246 1.238 2.396 1.336 - 386.65 13.457 13.509 13.568 -1.183 -1.262 1.344 -1.183 -1.262 -1.696 -1.591 1.493 2.399 1.382 - 386.70 13.478 13.557 13.602 -1.467 -1.105 1.365 -1.467 -1.105 -1.509 -2.003 1.622 2.619 1.493 - 386.75 13.268 13.321 13.359 -1.183 -1.018 1.155 -1.183 -1.018 -1.176 -1.366 1.204 1.885 1.084 - 386.80 13.373 13.438 13.493 -1.319 -1.215 1.260 -1.319 -1.215 -1.531 -1.663 1.603 2.403 1.386 - 386.85 13.320 13.397 13.439 -1.430 -1.067 1.208 -1.430 -1.067 -1.289 -1.727 1.526 2.321 1.320 - 386.90 13.121 13.199 13.238 -1.428 -1.017 1.009 -1.428 -1.017 -1.026 -1.440 1.453 2.046 1.144 - 386.95 13.440 13.486 13.520 -1.120 -0.952 1.327 -1.120 -0.952 -1.264 -1.486 1.066 1.961 1.112 - 387.00 13.432 13.454 13.480 -0.768 -0.835 1.319 -0.768 -0.835 -1.101 -1.013 0.641 1.513 0.814 - 387.05 13.320 13.333 13.346 -0.596 -0.601 1.207 -0.596 -0.601 -0.725 -0.720 0.358 1.086 0.541 - 387.10 13.120 13.129 13.151 -0.477 -0.775 1.007 -0.477 -0.775 -0.781 -0.480 0.370 0.921 0.494 - 387.15 13.466 13.479 13.504 -0.602 -0.820 1.353 -0.602 -0.820 -1.110 -0.815 0.494 1.433 0.731 - 387.20 13.362 13.384 13.394 -0.770 -0.501 1.249 -0.770 -0.501 -0.625 -0.962 0.385 1.202 0.605 - 387.25 13.559 13.585 13.593 -0.851 -0.440 1.446 -0.851 -0.440 -0.637 -1.231 0.375 1.504 0.718 - 387.30 13.405 13.433 13.443 -0.869 -0.529 1.292 -0.869 -0.529 -0.683 -1.122 0.459 1.351 0.696 - 387.35 13.654 13.670 13.703 -0.663 -0.949 1.542 -0.663 -0.949 -1.462 -1.022 0.629 1.858 0.946 - 387.40 13.577 13.592 13.608 -0.623 -0.668 1.464 -0.623 -0.668 -0.978 -0.913 0.416 1.489 0.700 - 387.45 13.567 13.589 13.601 -0.771 -0.561 1.455 -0.771 -0.561 -0.817 -1.121 0.433 1.512 0.726 - 387.50 13.491 13.515 13.518 -0.813 -0.248 1.378 -0.813 -0.248 -0.341 -1.120 0.201 1.311 0.594 - 387.55 13.409 13.426 13.445 -0.679 -0.717 1.296 -0.679 -0.717 -0.929 -0.880 0.486 1.327 0.684 - 387.60 13.462 13.481 13.550 -0.722 -1.367 1.349 -0.722 -1.367 -1.844 -0.974 0.987 2.105 1.154 - 387.65 13.224 13.256 13.285 -0.916 -0.878 1.112 -0.916 -0.878 -0.976 -1.018 0.804 1.423 0.812 - 387.70 13.172 13.181 13.232 -0.495 -1.160 1.059 -0.495 -1.160 -1.229 -0.525 0.575 1.357 0.727 - 387.75 13.237 13.244 13.264 -0.417 -0.728 1.124 -0.417 -0.728 -0.819 -0.469 0.304 0.984 0.496 - 387.80 13.446 13.453 13.462 -0.435 -0.506 1.333 -0.435 -0.506 -0.675 -0.580 0.220 1.111 0.458 - 387.85 13.298 13.305 13.308 -0.459 -0.244 1.185 -0.459 -0.244 -0.289 -0.544 0.112 0.837 0.313 - 387.90 13.344 13.350 13.350 -0.402 -0.103 1.231 -0.402 -0.103 -0.127 -0.494 0.042 0.843 0.256 - 387.95 12.984 12.989 12.989 -0.360 0.065 0.871 -0.360 0.065 0.056 -0.314 -0.023 0.446 0.160 - 388.00 12.601 12.606 12.608 -0.358 0.231 0.488 -0.358 0.231 0.113 -0.175 -0.083 0.210 0.112 - 388.05 12.914 12.916 12.919 -0.214 0.282 0.802 -0.214 0.282 0.226 -0.171 -0.060 0.384 0.145 - 388.10 13.240 13.240 13.241 -0.109 0.116 1.127 -0.109 0.116 0.131 -0.123 -0.013 0.648 0.090 - 388.15 13.294 13.306 13.310 -0.570 0.318 1.181 -0.570 0.318 0.375 -0.674 -0.181 0.911 0.396 - 388.20 13.346 13.373 13.383 -0.853 0.513 1.233 -0.853 0.513 0.633 -1.052 -0.438 1.256 0.652 - 388.25 13.565 13.582 13.595 -0.663 0.598 1.453 -0.663 0.598 0.869 -0.963 -0.396 1.453 0.678 - 388.30 13.286 13.298 13.314 -0.566 0.644 1.173 -0.566 0.644 0.755 -0.664 -0.364 1.056 0.535 - 388.35 13.330 13.333 13.353 -0.251 0.740 1.218 -0.251 0.740 0.901 -0.306 -0.186 1.047 0.485 - 388.40 13.748 13.748 13.753 -0.068 0.361 1.635 -0.068 0.361 0.591 -0.111 -0.025 1.404 0.301 - 388.45 13.533 13.533 13.536 -0.051 0.264 1.420 -0.051 0.264 0.375 -0.073 -0.014 1.045 0.191 - 388.50 13.783 13.787 13.787 0.352 -0.001 1.670 0.352 -0.001 -0.002 0.587 -0.000 1.456 0.294 - 388.55 13.839 13.844 13.848 0.389 0.310 1.726 0.389 0.310 0.536 0.671 0.121 1.613 0.433 - 388.60 13.670 13.675 13.676 0.349 0.218 1.557 0.349 0.218 0.340 0.543 0.076 1.297 0.322 - 388.65 13.863 13.866 13.866 0.272 0.073 1.750 0.272 0.073 0.128 0.476 0.020 1.572 0.247 - 388.70 13.625 13.631 13.633 0.432 0.203 1.512 0.432 0.203 0.306 0.653 0.088 1.257 0.363 - 388.75 13.552 13.560 13.566 0.466 0.413 1.439 0.466 0.413 0.595 0.670 0.193 1.229 0.458 - 388.80 13.541 13.557 13.562 0.657 0.342 1.429 0.657 0.342 0.488 0.939 0.224 1.295 0.541 - 388.85 13.458 13.471 13.475 0.591 0.349 1.345 0.591 0.349 0.470 0.794 0.206 1.140 0.473 - 388.90 13.285 13.301 13.312 0.650 0.543 1.172 0.650 0.543 0.637 0.762 0.353 1.046 0.527 - 388.95 13.067 13.102 13.112 0.947 0.527 0.955 0.947 0.527 0.503 0.904 0.499 1.043 0.575 - 389.00 12.879 12.919 12.930 1.011 0.531 0.766 1.011 0.531 0.407 0.775 0.537 0.946 0.514 - 389.05 12.921 12.958 12.966 0.975 0.450 0.809 0.975 0.450 0.364 0.789 0.439 0.904 0.487 - 389.10 13.093 13.116 13.120 0.777 0.306 0.981 0.777 0.306 0.300 0.762 0.238 0.829 0.426 - 389.15 12.767 12.778 12.778 0.520 0.083 0.655 0.520 0.083 0.055 0.340 0.043 0.353 0.174 - 389.20 12.862 12.874 12.874 0.558 0.078 0.749 0.558 0.078 0.058 0.418 0.043 0.439 0.212 - 389.25 12.955 12.967 12.967 0.558 -0.090 0.842 0.558 -0.090 -0.076 0.470 -0.050 0.514 0.239 - 389.30 12.894 12.898 12.899 0.334 0.122 0.781 0.334 0.122 0.095 0.261 0.041 0.368 0.140 - 389.35 13.121 13.121 13.121 0.058 -0.010 1.008 0.058 -0.010 -0.010 0.058 -0.001 0.510 0.029 - 389.40 12.840 12.840 12.840 -0.012 0.108 0.727 -0.012 0.108 0.079 -0.008 -0.001 0.270 0.040 - 389.45 12.512 12.528 12.529 0.634 0.114 0.399 0.634 0.114 0.046 0.253 0.072 0.287 0.134 - 389.50 12.397 12.419 12.420 0.748 0.153 0.284 0.748 0.153 0.044 0.212 0.115 0.332 0.123 - 389.55 12.395 12.411 12.415 0.635 0.289 0.282 0.635 0.289 0.082 0.179 0.183 0.283 0.135 - 389.60 12.625 12.643 12.645 0.677 0.250 0.512 0.677 0.250 0.128 0.347 0.169 0.392 0.203 - 389.65 12.857 12.879 12.879 0.738 0.084 0.745 0.738 0.084 0.063 0.550 0.062 0.553 0.278 - 389.70 13.203 13.241 13.245 0.992 -0.338 1.091 0.992 -0.338 -0.368 1.082 -0.335 1.144 0.596 - 389.75 13.314 13.347 13.351 0.927 -0.352 1.202 0.927 -0.352 -0.423 1.114 -0.327 1.214 0.618 - 389.80 13.014 13.038 13.040 0.798 -0.211 0.901 0.798 -0.211 -0.190 0.719 -0.168 0.746 0.381 - 389.85 13.089 13.096 13.099 0.429 -0.263 0.977 0.429 -0.263 -0.257 0.419 -0.113 0.603 0.252 - 389.90 13.119 13.146 13.147 0.849 0.163 1.006 0.849 0.163 0.164 0.854 0.138 0.880 0.440 - 389.95 13.036 13.094 13.097 1.232 0.285 0.923 1.232 0.285 0.263 1.137 0.351 1.225 0.609 - 390.00 13.170 13.217 13.218 1.103 0.170 1.058 1.103 0.170 0.180 1.167 0.188 1.182 0.598 - 390.05 13.190 13.273 13.290 1.485 0.669 1.077 1.485 0.669 0.721 1.600 0.994 1.907 1.008 - 390.10 13.113 13.203 13.214 1.545 0.525 1.000 1.545 0.525 0.525 1.545 0.811 1.831 0.911 - 390.15 13.417 13.502 13.506 1.514 0.310 1.304 1.514 0.310 0.404 1.975 0.469 2.045 1.035 - 390.20 13.427 13.508 13.509 1.483 0.078 1.314 1.483 0.078 0.103 1.949 0.116 1.967 0.978 - 390.25 13.178 13.270 13.273 1.566 0.262 1.065 1.566 0.262 0.279 1.667 0.410 1.827 0.870 - 390.30 13.152 13.229 13.233 1.422 0.313 1.039 1.422 0.313 0.325 1.478 0.445 1.600 0.789 - 390.35 13.067 13.133 13.150 1.315 0.668 0.954 1.315 0.668 0.637 1.255 0.878 1.543 0.830 - 390.40 13.312 13.392 13.408 1.461 0.664 1.199 1.461 0.664 0.796 1.752 0.971 2.007 1.078 - 390.45 13.139 13.252 13.256 1.727 0.319 1.026 1.727 0.319 0.328 1.772 0.551 2.068 0.942 - 390.50 12.484 12.597 12.602 1.691 0.337 0.371 1.691 0.337 0.125 0.627 0.570 1.555 0.428 - 390.55 12.556 12.649 12.659 1.529 0.489 0.444 1.529 0.489 0.217 0.678 0.748 1.387 0.516 - 390.60 12.860 12.918 12.919 1.221 0.161 0.748 1.221 0.161 0.120 0.913 0.196 1.038 0.471 - 390.65 12.802 12.857 12.857 1.188 0.029 0.689 1.188 0.029 0.020 0.819 0.035 0.944 0.410 - 390.70 12.756 12.795 12.796 0.994 0.157 0.643 0.994 0.157 0.101 0.639 0.156 0.713 0.333 - 390.75 12.930 12.975 12.978 1.079 0.304 0.817 1.079 0.304 0.249 0.881 0.328 0.962 0.486 - 390.80 12.764 12.786 12.786 0.738 0.005 0.652 0.738 0.005 0.004 0.481 0.004 0.485 0.240 - 390.85 12.785 12.818 12.831 0.924 -0.581 0.672 0.924 -0.581 -0.391 0.621 -0.537 0.821 0.454 - 390.90 12.569 12.603 12.609 0.918 -0.396 0.457 0.918 -0.396 -0.181 0.419 -0.364 0.604 0.292 - 390.95 12.445 12.484 12.497 0.992 -0.561 0.332 0.992 -0.561 -0.186 0.329 -0.556 0.704 0.336 - 391.00 12.383 12.406 12.434 0.749 -0.831 0.271 0.749 -0.831 -0.225 0.203 -0.622 0.662 0.346 - 391.05 12.687 12.726 12.748 0.997 -0.742 0.574 0.997 -0.742 -0.426 0.573 -0.741 0.938 0.514 - 391.10 12.554 12.582 12.618 0.835 -0.949 0.442 0.835 -0.949 -0.419 0.369 -0.792 0.896 0.484 - 391.15 12.306 12.308 12.344 0.234 -0.932 0.193 0.234 -0.932 -0.180 0.045 -0.218 0.480 0.143 - 391.20 12.385 12.402 12.464 0.641 -1.248 0.272 0.641 -1.248 -0.340 0.175 -0.800 1.021 0.443 - 391.25 12.623 12.632 12.700 0.484 -1.307 0.510 0.484 -1.307 -0.667 0.247 -0.632 1.101 0.476 - 391.30 12.598 12.612 12.664 0.583 -1.145 0.485 0.583 -1.145 -0.556 0.283 -0.668 0.944 0.457 - 391.35 12.560 12.563 12.646 0.302 -1.445 0.447 0.302 -1.445 -0.646 0.135 -0.437 1.190 0.396 - 391.40 12.750 12.759 12.809 0.488 -1.133 0.637 0.488 -1.133 -0.721 0.311 -0.553 0.963 0.480 - 391.45 12.467 12.469 12.495 0.207 -0.807 0.355 0.207 -0.807 -0.286 0.073 -0.167 0.410 0.170 - 391.50 12.395 12.397 12.414 0.238 -0.655 0.282 0.238 -0.655 -0.185 0.067 -0.156 0.282 0.125 - 391.55 12.307 12.310 12.334 0.280 -0.761 0.194 0.280 -0.761 -0.148 0.054 -0.213 0.347 0.132 - 391.60 12.399 12.400 12.459 0.166 -1.207 0.286 0.166 -1.207 -0.345 0.048 -0.200 0.783 0.201 - 391.65 12.484 12.484 12.532 -0.057 -1.097 0.371 -0.057 -1.097 -0.407 -0.021 0.063 0.672 0.206 - 391.70 12.703 12.706 12.748 -0.260 -1.029 0.591 -0.260 -1.029 -0.608 -0.153 0.267 0.738 0.341 - 391.75 13.119 13.121 13.169 -0.228 -1.115 1.007 -0.228 -1.115 -1.122 -0.230 0.255 1.154 0.587 - 391.80 12.941 12.945 12.982 -0.337 -0.982 0.828 -0.337 -0.982 -0.813 -0.279 0.330 0.881 0.460 - 391.85 13.080 13.088 13.150 -0.461 -1.275 0.967 -0.461 -1.275 -1.233 -0.445 0.587 1.387 0.718 - 391.90 13.104 13.131 13.181 -0.844 -1.140 0.991 -0.844 -1.140 -1.130 -0.837 0.963 1.498 0.852 - 391.95 13.049 13.073 13.108 -0.795 -0.955 0.936 -0.795 -0.955 -0.894 -0.744 0.759 1.210 0.695 - 392.00 13.008 13.060 13.112 -1.170 -1.168 0.895 -1.170 -1.168 -1.046 -1.047 1.368 1.768 1.008 - 392.05 13.168 13.229 13.281 -1.263 -1.177 1.055 -1.263 -1.177 -1.243 -1.333 1.487 2.047 1.176 - 392.10 13.036 13.122 13.180 -1.503 -1.239 0.923 -1.503 -1.239 -1.144 -1.388 1.863 2.324 1.295 - 392.15 12.986 13.145 13.194 -2.042 -1.128 0.873 -2.042 -1.128 -0.985 -1.782 2.304 3.102 1.537 - 392.20 13.192 13.322 13.368 -1.857 -1.112 1.079 -1.857 -1.112 -1.200 -2.004 2.066 2.925 1.559 - 392.25 12.848 12.912 12.977 -1.286 -1.297 0.735 -1.286 -1.297 -0.953 -0.945 1.667 1.937 1.070 - 392.30 13.169 13.254 13.329 -1.501 -1.407 1.056 -1.501 -1.407 -1.486 -1.585 2.112 2.674 1.515 - 392.35 13.208 13.263 13.294 -1.204 -0.909 1.096 -1.204 -0.909 -0.996 -1.319 1.095 1.739 0.991 - 392.40 13.389 13.442 13.453 -1.189 -0.551 1.276 -1.189 -0.551 -0.704 -1.518 0.656 1.674 0.899 - 392.45 13.188 13.267 13.272 -1.444 -0.351 1.076 -1.444 -0.351 -0.377 -1.553 0.506 1.682 0.838 - 392.50 13.558 13.649 13.653 -1.571 -0.337 1.445 -1.571 -0.337 -0.488 -2.270 0.530 2.334 1.191 - 392.55 13.530 13.616 13.625 -1.534 -0.476 1.417 -1.534 -0.476 -0.674 -2.174 0.730 2.294 1.195 - 392.60 13.546 13.664 13.666 -1.794 -0.184 1.433 -1.794 -0.184 -0.263 -2.572 0.330 2.654 1.303 - 392.65 13.502 13.610 13.617 -1.707 -0.438 1.390 -1.707 -0.438 -0.609 -2.372 0.748 2.518 1.280 - 392.70 13.592 13.707 13.717 -1.775 -0.519 1.479 -1.775 -0.519 -0.767 -2.625 0.921 2.804 1.443 - 392.75 13.659 13.741 13.747 -1.502 -0.409 1.546 -1.502 -0.409 -0.633 -2.322 0.615 2.407 1.242 - 392.80 13.474 13.592 13.592 -1.786 0.003 1.361 -1.786 0.003 0.004 -2.431 -0.005 2.521 1.216 - 392.85 13.625 13.737 13.737 -1.750 -0.014 1.512 -1.750 -0.014 -0.020 -2.646 0.024 2.675 1.323 - 392.90 13.894 14.004 14.005 -1.756 0.134 1.781 -1.756 0.134 0.239 -3.128 -0.236 3.137 1.573 - 392.95 13.770 13.883 13.883 -1.769 0.058 1.657 -1.769 0.058 0.095 -2.931 -0.102 2.939 1.467 - 393.00 13.617 13.739 13.742 -1.826 0.290 1.504 -1.826 0.290 0.436 -2.746 -0.529 2.839 1.415 - 393.05 13.820 13.911 13.919 -1.590 0.451 1.707 -1.590 0.451 0.771 -2.715 -0.718 2.823 1.456 - 393.10 13.562 13.613 13.614 -1.171 0.131 1.450 -1.171 0.131 0.190 -1.698 -0.153 1.745 0.858 - 393.15 13.464 13.545 13.545 -1.472 -0.058 1.352 -1.472 -0.058 -0.078 -1.989 0.085 1.998 0.996 - 393.20 13.667 13.754 13.756 -1.551 -0.189 1.554 -1.551 -0.189 -0.293 -2.411 0.293 2.428 1.223 - 393.25 13.953 14.077 14.080 -1.868 -0.291 1.840 -1.868 -0.291 -0.535 -3.437 0.543 3.480 1.760 - 393.30 13.572 13.677 13.683 -1.694 -0.420 1.459 -1.694 -0.420 -0.612 -2.471 0.711 2.587 1.321 - 393.35 13.587 13.685 13.695 -1.635 -0.529 1.474 -1.635 -0.529 -0.779 -2.410 0.865 2.563 1.338 - 393.40 13.742 13.800 13.809 -1.254 -0.505 1.630 -1.254 -0.505 -0.823 -2.043 0.633 2.241 1.146 - 393.45 13.592 13.644 13.666 -1.195 -0.772 1.479 -1.195 -0.772 -1.141 -1.767 0.922 2.105 1.148 - 393.50 13.773 13.828 13.880 -1.236 -1.192 1.660 -1.236 -1.192 -1.979 -2.052 1.473 2.853 1.605 - 393.55 13.806 13.838 13.881 -0.937 -1.093 1.693 -0.937 -1.093 -1.850 -1.588 1.024 2.470 1.322 - 393.60 13.523 13.569 13.587 -1.109 -0.700 1.410 -1.109 -0.700 -0.987 -1.564 0.776 1.854 1.003 - 393.65 13.607 13.680 13.695 -1.416 -0.626 1.494 -1.416 -0.626 -0.936 -2.116 0.887 2.315 1.239 - 393.70 13.813 13.885 13.906 -1.409 -0.769 1.700 -1.409 -0.769 -1.308 -2.395 1.083 2.733 1.468 - 393.75 14.007 14.076 14.094 -1.391 -0.701 1.894 -1.391 -0.701 -1.327 -2.636 0.975 3.008 1.554 - 393.80 14.002 14.038 14.071 -1.012 -0.951 1.889 -1.012 -0.951 -1.796 -1.911 0.962 2.748 1.397 - 393.85 13.947 13.968 14.002 -0.768 -0.978 1.834 -0.768 -0.978 -1.794 -1.408 0.751 2.455 1.200 - 393.90 14.197 14.218 14.253 -0.780 -0.995 2.084 -0.780 -0.995 -2.073 -1.625 0.776 2.971 1.373 - 393.95 14.261 14.283 14.323 -0.799 -1.074 2.148 -0.799 -1.074 -2.307 -1.716 0.858 3.203 1.500 - 394.00 14.544 14.579 14.605 -1.010 -0.878 2.431 -1.010 -0.878 -2.135 -2.456 0.887 3.850 1.686 - 394.05 14.430 14.479 14.507 -1.193 -0.898 2.317 -1.193 -0.898 -2.081 -2.765 1.072 3.800 1.812 - 394.10 14.541 14.592 14.620 -1.214 -0.916 2.428 -1.214 -0.916 -2.224 -2.948 1.112 4.105 1.928 - 394.15 14.346 14.379 14.395 -0.980 -0.680 2.233 -0.980 -0.680 -1.518 -2.189 0.666 3.204 1.373 - 394.20 14.078 14.119 14.139 -1.080 -0.760 1.965 -1.080 -0.760 -1.493 -2.122 0.821 2.802 1.361 - 394.25 13.947 14.032 14.051 -1.548 -0.732 1.834 -1.548 -0.732 -1.343 -2.839 1.134 3.148 1.669 - 394.30 13.854 13.931 13.938 -1.460 -0.448 1.741 -1.460 -0.448 -0.780 -2.541 0.654 2.681 1.369 - 394.35 13.864 13.898 13.905 -0.965 -0.457 1.751 -0.965 -0.457 -0.801 -1.690 0.441 2.104 0.961 - 394.40 14.096 14.100 14.125 -0.338 -0.838 1.983 -0.338 -0.838 -1.662 -0.670 0.283 2.374 0.907 - 394.45 14.108 14.115 14.139 -0.452 -0.834 1.995 -0.452 -0.834 -1.664 -0.901 0.377 2.439 0.965 - 394.50 14.534 14.541 14.575 -0.454 -0.983 2.422 -0.454 -0.983 -2.380 -1.099 0.446 3.518 1.329 - 394.55 14.409 14.414 14.438 -0.378 -0.823 2.297 -0.378 -0.823 -1.891 -0.869 0.311 3.048 1.052 - 394.60 14.430 14.446 14.476 -0.668 -0.931 2.318 -0.668 -0.931 -2.158 -1.547 0.621 3.342 1.363 - 394.65 14.235 14.247 14.264 -0.581 -0.700 2.122 -0.581 -0.700 -1.485 -1.233 0.407 2.666 0.986 - 394.70 14.349 14.362 14.370 -0.612 -0.460 2.236 -0.612 -0.460 -1.029 -1.369 0.281 2.794 0.868 - 394.75 14.468 14.503 14.511 -1.008 -0.467 2.355 -1.008 -0.467 -1.101 -2.375 0.471 3.391 1.330 - 394.80 14.468 14.490 14.495 -0.797 -0.385 2.355 -0.797 -0.385 -0.907 -1.877 0.307 3.164 1.053 - 394.85 14.155 14.163 14.173 -0.455 -0.542 2.043 -0.455 -0.542 -1.107 -0.929 0.247 2.337 0.733 - 394.90 13.980 13.982 13.988 -0.188 -0.405 1.868 -0.188 -0.405 -0.756 -0.350 0.076 1.844 0.418 - 394.95 14.053 14.054 14.060 -0.193 -0.411 1.940 -0.193 -0.411 -0.797 -0.374 0.079 1.985 0.442 - 395.00 13.684 13.691 13.706 -0.447 -0.625 1.571 -0.447 -0.625 -0.983 -0.702 0.280 1.530 0.620 - 395.05 13.484 13.485 13.527 -0.178 -1.068 1.371 -0.178 -1.068 -1.464 -0.244 0.190 1.526 0.748 - 395.10 13.565 13.565 13.592 -0.020 -0.846 1.452 -0.020 -0.846 -1.228 -0.029 0.017 1.413 0.614 - 395.15 13.848 13.848 13.886 0.073 -1.028 1.735 0.073 -1.028 -1.784 0.127 -0.075 2.036 0.895 - 395.20 13.776 13.776 13.813 -0.012 -1.001 1.663 -0.012 -1.001 -1.666 -0.019 0.012 1.885 0.833 - 395.25 13.574 13.576 13.615 0.255 -1.021 1.461 0.255 -1.021 -1.492 0.373 -0.261 1.621 0.780 - 395.30 13.864 13.872 13.907 0.475 -0.981 1.751 0.475 -0.981 -1.717 0.832 -0.466 2.127 0.982 - 395.35 13.821 13.829 13.868 0.463 -1.044 1.708 0.463 -1.044 -1.784 0.791 -0.483 2.111 1.005 - 395.40 13.601 13.613 13.638 0.557 -0.830 1.489 0.557 -0.830 -1.236 0.830 -0.463 1.608 0.779 - 395.45 13.731 13.751 13.769 0.736 -0.704 1.618 0.736 -0.704 -1.139 1.191 -0.518 1.828 0.864 - 395.50 13.888 13.897 13.912 0.485 -0.643 1.776 0.485 -0.643 -1.141 0.862 -0.312 1.901 0.732 - 395.55 13.844 13.861 13.879 0.701 -0.707 1.731 0.701 -0.707 -1.224 1.213 -0.495 1.993 0.896 - 395.60 13.938 13.948 13.965 0.522 -0.700 1.825 0.522 -0.700 -1.277 0.953 -0.366 2.047 0.818 - 395.65 14.021 14.026 14.052 0.386 -0.847 1.908 0.386 -0.847 -1.617 0.736 -0.327 2.254 0.903 - 395.70 14.399 14.406 14.469 0.473 -1.346 2.286 0.473 -1.346 -3.076 1.081 -0.637 3.630 1.661 - 395.75 14.335 14.343 14.389 0.475 -1.149 2.222 0.475 -1.149 -2.554 1.057 -0.546 3.242 1.408 - 395.80 14.295 14.305 14.343 0.538 -1.033 2.182 0.538 -1.033 -2.255 1.175 -0.556 3.060 1.301 - 395.85 14.252 14.262 14.306 0.536 -1.128 2.139 0.536 -1.128 -2.413 1.146 -0.604 3.067 1.369 - 395.90 14.290 14.297 14.339 0.449 -1.098 2.177 0.449 -1.098 -2.391 0.977 -0.493 3.074 1.315 - 395.95 14.277 14.284 14.346 0.434 -1.333 2.165 0.434 -1.333 -2.885 0.940 -0.579 3.325 1.545 - 396.00 14.229 14.229 14.266 -0.049 -1.032 2.116 -0.049 -1.032 -2.183 -0.104 0.051 2.772 1.093 - 396.05 14.403 14.403 14.468 0.057 -1.373 2.290 0.057 -1.373 -3.143 0.132 -0.079 3.566 1.574 - 396.10 14.604 14.612 14.667 0.468 -1.277 2.491 0.468 -1.277 -3.182 1.166 -0.598 4.029 1.721 - 396.15 14.241 14.250 14.312 0.512 -1.333 2.128 0.512 -1.333 -2.837 1.089 -0.682 3.284 1.557 - 396.20 14.620 14.631 14.692 0.571 -1.337 2.507 0.571 -1.337 -3.353 1.432 -0.764 4.200 1.862 - 396.25 14.658 14.665 14.686 0.471 -0.778 2.545 0.471 -0.778 -1.981 1.199 -0.367 3.653 1.172 - 396.30 14.858 14.871 14.881 0.602 -0.549 2.746 0.602 -0.549 -1.508 1.653 -0.331 4.101 1.131 - 396.35 14.789 14.795 14.818 0.438 -0.830 2.676 0.438 -0.830 -2.222 1.173 -0.364 4.021 1.269 - 396.40 14.558 14.565 14.601 0.433 -1.026 2.446 0.433 -1.026 -2.509 1.060 -0.445 3.611 1.380 - 396.45 14.653 14.659 14.713 0.400 -1.257 2.541 0.400 -1.257 -3.193 1.016 -0.502 4.097 1.694 - 396.50 14.407 14.409 14.497 0.263 -1.595 2.294 0.263 -1.595 -3.659 0.603 -0.419 3.938 1.866 - 396.55 14.580 14.581 14.723 0.136 -2.042 2.467 0.136 -2.042 -5.037 0.336 -0.278 5.137 2.528 - 396.60 14.274 14.275 14.437 0.172 -2.156 2.161 0.172 -2.156 -4.659 0.373 -0.372 4.674 2.344 - 396.65 14.267 14.267 14.385 0.075 -1.839 2.154 0.075 -1.839 -3.963 0.163 -0.139 4.015 1.984 - 396.70 14.114 14.119 14.221 -0.371 -1.708 2.001 -0.371 -1.708 -3.417 -0.742 0.634 3.529 1.777 - 396.75 14.048 14.050 14.137 -0.196 -1.568 1.936 -0.196 -1.568 -3.034 -0.380 0.308 3.121 1.537 - 396.80 13.859 13.861 13.994 -0.195 -1.931 1.746 -0.195 -1.931 -3.372 -0.341 0.377 3.408 1.705 - 396.85 14.052 14.054 14.208 -0.189 -2.087 1.939 -0.189 -2.087 -4.048 -0.366 0.394 4.077 2.042 - 396.90 13.823 13.831 13.962 -0.456 -1.913 1.710 -0.456 -1.913 -3.271 -0.779 0.872 3.395 1.737 - 396.95 13.932 13.934 14.068 -0.232 -1.937 1.819 -0.232 -1.937 -3.524 -0.423 0.450 3.558 1.789 - 397.00 14.165 14.167 14.254 -0.262 -1.564 2.052 -0.262 -1.564 -3.210 -0.539 0.411 3.364 1.641 - 397.05 14.092 14.095 14.156 -0.288 -1.315 1.979 -0.288 -1.315 -2.602 -0.570 0.379 2.864 1.345 - 397.10 13.922 13.927 13.972 -0.354 -1.126 1.810 -0.354 -1.126 -2.037 -0.640 0.399 2.334 1.086 - 397.15 13.825 13.828 13.870 -0.310 -1.076 1.712 -0.310 -1.076 -1.841 -0.531 0.334 2.092 0.973 - 397.20 13.803 13.806 13.843 -0.302 -1.002 1.690 -0.302 -1.002 -1.694 -0.510 0.302 1.976 0.897 - 397.25 13.952 13.956 13.993 -0.338 -1.018 1.839 -0.338 -1.018 -1.873 -0.621 0.344 2.267 1.002 - 397.30 14.000 14.006 14.044 -0.422 -1.025 1.887 -0.422 -1.025 -1.935 -0.796 0.432 2.395 1.068 - 397.35 14.082 14.090 14.156 -0.450 -1.367 1.970 -0.450 -1.367 -2.692 -0.887 0.616 2.975 1.450 - 397.40 13.941 13.954 14.005 -0.603 -1.195 1.828 -0.603 -1.195 -2.184 -1.102 0.720 2.566 1.275 - 397.45 13.866 13.885 13.915 -0.718 -0.912 1.754 -0.718 -0.912 -1.599 -1.260 0.655 2.211 1.069 - 397.50 13.970 13.981 14.010 -0.544 -0.901 1.858 -0.544 -0.901 -1.674 -1.011 0.490 2.279 1.008 - 397.55 13.737 13.757 13.778 -0.746 -0.750 1.624 -0.746 -0.750 -1.218 -1.211 0.559 1.878 0.903 - 397.60 13.630 13.647 13.661 -0.688 -0.621 1.517 -0.688 -0.621 -0.942 -1.044 0.428 1.580 0.735 - 397.65 14.021 14.029 14.047 -0.461 -0.709 1.908 -0.461 -0.709 -1.352 -0.880 0.327 2.178 0.823 - 397.70 14.173 14.181 14.189 -0.473 -0.491 2.060 -0.473 -0.491 -1.012 -0.973 0.232 2.354 0.712 - 397.75 13.967 13.973 13.986 -0.423 -0.589 1.854 -0.423 -0.589 -1.092 -0.784 0.249 1.982 0.684 - 397.80 13.762 13.773 13.788 -0.553 -0.652 1.649 -0.553 -0.652 -1.075 -0.912 0.361 1.725 0.728 - 397.85 13.543 13.559 13.575 -0.644 -0.674 1.430 -0.644 -0.674 -0.965 -0.922 0.435 1.458 0.702 - 397.90 13.074 13.088 13.098 -0.603 -0.527 0.961 -0.603 -0.527 -0.506 -0.579 0.318 0.782 0.416 - 397.95 13.188 13.198 13.215 -0.521 -0.679 1.075 -0.521 -0.679 -0.730 -0.560 0.354 0.944 0.493 - 398.00 13.025 13.040 13.065 -0.622 -0.801 0.913 -0.622 -0.801 -0.731 -0.568 0.498 0.931 0.526 - 398.05 12.916 12.922 12.941 -0.403 -0.694 0.803 -0.403 -0.694 -0.558 -0.324 0.280 0.645 0.351 - 398.10 12.870 12.871 12.884 -0.119 -0.597 0.757 -0.119 -0.597 -0.452 -0.090 0.071 0.472 0.233 - 398.15 12.918 12.921 12.953 -0.255 -0.912 0.806 -0.255 -0.912 -0.735 -0.206 0.233 0.773 0.399 - 398.20 12.895 12.899 12.938 -0.337 -1.003 0.782 -0.337 -1.003 -0.785 -0.264 0.338 0.866 0.447 - 398.25 12.927 12.927 12.964 -0.101 -0.982 0.814 -0.101 -0.982 -0.800 -0.082 0.099 0.819 0.405 - 398.30 12.898 12.900 12.951 -0.223 -1.155 0.785 -0.223 -1.155 -0.907 -0.175 0.257 1.000 0.479 - 398.35 12.530 12.533 12.564 -0.278 -0.885 0.417 -0.278 -0.885 -0.369 -0.116 0.246 0.517 0.229 - 398.40 12.554 12.554 12.567 -0.033 -0.580 0.441 -0.033 -0.580 -0.256 -0.014 0.019 0.266 0.129 - 398.45 12.446 12.449 12.459 -0.270 -0.495 0.333 -0.270 -0.495 -0.165 -0.090 0.134 0.214 0.115 - 398.50 12.804 12.809 12.810 -0.368 -0.130 0.691 -0.368 -0.130 -0.090 -0.254 0.048 0.315 0.137 - 398.55 13.045 13.048 13.048 -0.272 -0.049 0.933 -0.272 -0.049 -0.045 -0.253 0.013 0.473 0.129 - 398.60 13.128 13.129 13.130 -0.171 -0.047 1.015 -0.171 -0.047 -0.048 -0.174 0.008 0.531 0.090 - 398.65 12.897 12.898 12.898 -0.102 0.104 0.785 -0.102 0.104 0.082 -0.080 -0.011 0.318 0.057 - 398.70 12.653 12.657 12.657 -0.279 0.130 0.541 -0.279 0.130 0.070 -0.151 -0.036 0.194 0.085 - 398.75 12.449 12.451 12.451 -0.260 -0.004 0.336 -0.260 -0.004 -0.001 -0.087 0.001 0.090 0.044 - 398.80 12.674 12.676 12.677 -0.182 -0.161 0.562 -0.182 -0.161 -0.090 -0.102 0.029 0.187 0.070 - 398.85 12.539 12.539 12.541 0.104 -0.209 0.426 0.104 -0.209 -0.089 0.044 -0.022 0.118 0.051 - 398.90 12.192 12.194 12.196 0.235 -0.248 0.079 0.235 -0.248 -0.019 0.018 -0.058 0.061 0.032 - 398.95 12.209 12.231 12.231 0.733 0.021 0.096 0.733 0.021 0.002 0.070 0.015 0.273 0.036 - 399.00 12.008 12.033 12.033 0.774 -0.132 -0.105 0.774 -0.132 0.014 -0.081 -0.102 0.314 0.066 - 399.05 12.069 12.092 12.099 0.753 -0.393 -0.044 0.753 -0.393 0.017 -0.033 -0.296 0.362 0.149 - 399.10 12.170 12.210 12.213 0.985 -0.287 0.057 0.985 -0.287 -0.016 0.056 -0.282 0.528 0.144 - 399.15 12.127 12.168 12.168 0.993 0.051 0.015 0.993 0.051 0.001 0.015 0.051 0.494 0.027 - 399.20 12.161 12.176 12.176 0.619 0.036 0.048 0.619 0.036 0.002 0.030 0.022 0.193 0.018 - 399.25 11.888 11.894 11.898 0.386 -0.278 -0.225 0.386 -0.278 0.062 -0.087 -0.107 0.138 0.076 - 399.30 11.895 11.903 11.909 0.441 -0.380 -0.218 0.441 -0.380 0.083 -0.096 -0.168 0.193 0.105 - 399.35 11.936 11.941 11.944 0.352 -0.265 -0.177 0.352 -0.265 0.047 -0.062 -0.094 0.113 0.061 - 399.40 12.106 12.110 12.114 0.283 -0.313 -0.006 0.283 -0.313 0.002 -0.002 -0.089 0.089 0.044 - 399.45 11.931 11.946 11.951 0.610 -0.332 -0.182 0.610 -0.332 0.060 -0.111 -0.203 0.258 0.119 - 399.50 12.200 12.224 12.241 0.772 -0.633 0.087 0.772 -0.633 -0.055 0.067 -0.489 0.502 0.248 - 399.55 12.187 12.225 12.260 0.960 -0.929 0.074 0.960 -0.929 -0.069 0.071 -0.892 0.895 0.449 - 399.60 12.275 12.324 12.352 1.108 -0.831 0.162 1.108 -0.831 -0.134 0.179 -0.921 0.972 0.474 - 399.65 12.184 12.249 12.271 1.254 -0.740 0.071 1.254 -0.740 -0.053 0.090 -0.928 1.062 0.467 - 399.70 11.977 12.057 12.080 1.384 -0.747 -0.136 1.384 -0.747 0.101 -0.188 -1.033 1.245 0.528 - 399.75 12.244 12.334 12.361 1.484 -0.809 0.132 1.484 -0.809 -0.107 0.195 -1.201 1.437 0.611 - 399.80 12.361 12.423 12.450 1.247 -0.821 0.248 1.247 -0.821 -0.203 0.309 -1.023 1.144 0.544 - 399.85 12.487 12.548 12.595 1.244 -1.085 0.374 1.244 -1.085 -0.406 0.465 -1.350 1.432 0.742 - 399.90 12.415 12.470 12.526 1.168 -1.183 0.303 1.168 -1.183 -0.358 0.354 -1.382 1.427 0.735 - 399.95 12.285 12.340 12.396 1.170 -1.176 0.172 1.170 -1.176 -0.202 0.201 -1.376 1.391 0.703 - 400.00 12.318 12.355 12.398 0.951 -1.028 0.206 0.951 -1.028 -0.211 0.196 -0.978 1.002 0.510 - 400.05 12.055 12.109 12.145 1.144 -0.928 -0.058 1.144 -0.928 0.053 -0.066 -1.061 1.086 0.532 - 400.10 12.246 12.289 12.323 1.026 -0.913 0.133 1.026 -0.913 -0.122 0.137 -0.937 0.952 0.477 - 400.15 12.361 12.388 12.461 0.820 -1.350 0.248 0.820 -1.350 -0.335 0.203 -1.107 1.278 0.587 - 400.20 12.602 12.615 12.725 0.567 -1.673 0.489 0.567 -1.673 -0.819 0.278 -0.949 1.680 0.642 - 400.25 12.565 12.574 12.641 0.463 -1.306 0.452 0.463 -1.306 -0.591 0.209 -0.604 1.063 0.435 - 400.30 12.420 12.427 12.481 0.416 -1.167 0.307 0.416 -1.167 -0.358 0.128 -0.485 0.814 0.308 - 400.35 12.278 12.304 12.331 0.802 -0.812 0.165 0.802 -0.812 -0.134 0.133 -0.651 0.664 0.339 - 400.40 12.075 12.107 12.145 0.877 -0.962 -0.038 0.877 -0.962 0.036 -0.033 -0.844 0.849 0.423 - 400.45 12.183 12.200 12.239 0.634 -0.982 0.070 0.634 -0.982 -0.069 0.045 -0.623 0.686 0.314 - 400.50 12.327 12.341 12.369 0.596 -0.836 0.214 0.596 -0.836 -0.179 0.128 -0.498 0.550 0.272 - 400.55 12.460 12.477 12.539 0.665 -1.247 0.347 0.665 -1.247 -0.432 0.231 -0.829 1.058 0.481 - 400.60 12.170 12.171 12.212 0.174 -0.998 0.057 0.174 -0.998 -0.057 0.010 -0.173 0.515 0.091 - 400.65 12.034 12.038 12.096 0.321 -1.178 -0.079 0.321 -1.178 0.093 -0.025 -0.378 0.748 0.195 - 400.70 12.059 12.065 12.107 0.383 -1.005 -0.054 0.383 -1.005 0.054 -0.021 -0.385 0.580 0.195 - 400.75 12.156 12.170 12.231 0.574 -1.224 0.043 0.574 -1.224 -0.053 0.025 -0.702 0.914 0.352 - 400.80 12.313 12.326 12.398 0.565 -1.331 0.200 0.565 -1.331 -0.267 0.113 -0.752 1.066 0.403 - 400.85 12.423 12.443 12.506 0.705 -1.260 0.310 0.705 -1.260 -0.390 0.218 -0.888 1.090 0.497 - 400.90 12.282 12.290 12.417 0.443 -1.774 0.169 0.443 -1.774 -0.300 0.075 -0.785 1.685 0.422 - 400.95 12.614 12.623 12.807 0.459 -2.165 0.501 0.459 -2.165 -1.085 0.230 -0.995 2.575 0.745 - 401.00 12.727 12.740 12.911 0.579 -2.096 0.614 0.579 -2.096 -1.286 0.356 -1.214 2.552 0.902 - 401.05 12.668 12.688 12.835 0.714 -1.936 0.555 0.714 -1.936 -1.075 0.397 -1.382 2.283 0.898 - 401.10 12.931 12.944 13.019 0.582 -1.391 0.818 0.582 -1.391 -1.139 0.476 -0.809 1.472 0.738 - 401.15 12.819 12.821 12.924 0.220 -1.625 0.706 0.220 -1.625 -1.148 0.155 -0.357 1.594 0.606 - 401.20 12.246 12.248 12.431 0.253 -2.124 0.133 0.253 -2.124 -0.283 0.034 -0.538 2.297 0.305 - 401.25 12.230 12.230 12.386 0.030 -1.962 0.117 0.030 -1.962 -0.230 0.003 -0.059 1.932 0.118 - 401.30 12.188 12.196 12.323 0.423 -1.764 0.075 0.423 -1.764 -0.133 0.032 -0.746 1.648 0.379 - 401.35 11.974 11.978 12.130 0.315 -1.911 -0.139 0.315 -1.911 0.265 -0.044 -0.602 1.885 0.330 - 401.40 12.344 12.345 12.552 0.155 -2.270 0.231 0.155 -2.270 -0.525 0.036 -0.351 2.615 0.316 - 401.45 11.978 11.978 12.175 -0.105 -2.182 -0.135 -0.105 -2.182 0.295 0.014 0.229 2.395 0.187 - 401.50 11.963 11.966 12.183 0.240 -2.292 -0.149 0.240 -2.292 0.342 -0.036 -0.551 2.666 0.325 - 401.55 12.069 12.070 12.243 0.149 -2.055 -0.044 0.149 -2.055 0.091 -0.007 -0.306 2.123 0.159 - 401.60 11.883 11.884 12.061 -0.117 -2.059 -0.230 -0.117 -2.059 0.473 0.027 0.242 2.153 0.266 - 401.65 11.721 11.721 11.868 0.050 -1.859 -0.391 0.050 -1.859 0.728 -0.019 -0.092 1.806 0.367 - 401.70 11.778 11.779 11.915 -0.132 -1.793 -0.334 -0.132 -1.793 0.600 0.044 0.236 1.673 0.323 - 401.75 11.528 11.528 11.658 -0.062 -1.735 -0.585 -0.062 -1.735 1.015 0.036 0.107 1.678 0.511 - 401.80 11.084 11.084 11.264 0.062 -2.003 -1.029 0.062 -2.003 2.060 -0.064 -0.125 2.536 1.032 - 401.85 11.271 11.274 11.478 0.268 -2.151 -0.842 0.268 -2.151 1.811 -0.225 -0.576 2.704 0.957 - 401.90 11.368 11.379 11.583 0.491 -2.167 -0.745 0.491 -2.167 1.613 -0.366 -1.065 2.745 0.984 - 401.95 11.595 11.597 11.777 0.164 -2.052 -0.517 0.164 -2.052 1.061 -0.085 -0.335 2.252 0.558 - 402.00 11.465 11.465 11.654 0.108 -2.090 -0.648 0.108 -2.090 1.354 -0.070 -0.226 2.399 0.687 - 402.05 11.461 11.462 11.665 -0.069 -2.167 -0.651 -0.069 -2.167 1.412 0.045 0.150 2.563 0.710 - 402.10 11.446 11.450 11.658 0.287 -2.194 -0.667 0.287 -2.194 1.462 -0.191 -0.630 2.669 0.802 - 402.15 11.310 11.326 11.497 0.588 -1.974 -0.802 0.588 -1.974 1.584 -0.472 -1.162 2.444 1.010 - 402.20 11.292 11.301 11.458 0.437 -1.891 -0.820 0.437 -1.891 1.551 -0.358 -0.826 2.220 0.897 - 402.25 11.216 11.237 11.362 0.688 -1.683 -0.897 0.688 -1.683 1.510 -0.618 -1.159 2.056 1.001 - 402.30 11.286 11.292 11.452 0.369 -1.906 -0.827 0.369 -1.906 1.576 -0.305 -0.703 2.226 0.876 - 402.35 11.226 11.242 11.420 0.584 -2.013 -0.886 0.584 -2.013 1.785 -0.518 -1.176 2.590 1.100 - 402.40 11.116 11.130 11.332 0.552 -2.131 -0.997 0.552 -2.131 2.124 -0.550 -1.177 2.920 1.245 - 402.45 10.856 10.857 11.061 0.140 -2.116 -1.257 0.140 -2.116 2.659 -0.176 -0.295 3.038 1.341 - 402.50 10.961 10.966 11.166 0.337 -2.103 -1.152 0.337 -2.103 2.423 -0.388 -0.708 2.932 1.277 - 402.55 10.652 10.662 10.818 0.460 -1.831 -1.461 0.460 -1.831 2.674 -0.672 -0.842 2.848 1.441 - 402.60 10.936 10.948 11.168 0.526 -2.206 -1.177 0.526 -2.206 2.597 -0.620 -1.161 3.265 1.456 - 402.65 10.973 10.994 11.210 0.692 -2.189 -1.140 0.692 -2.189 2.496 -0.789 -1.515 3.286 1.512 - 402.70 10.639 10.665 10.898 0.734 -2.244 -1.473 0.734 -2.244 3.306 -1.081 -1.647 3.873 1.924 - 402.75 10.525 10.542 10.862 0.608 -2.618 -1.588 0.608 -2.618 4.157 -0.966 -1.592 4.872 2.278 - 402.80 10.468 10.498 10.819 0.790 -2.613 -1.644 0.790 -2.613 4.297 -1.299 -2.064 5.078 2.470 - 402.85 10.172 10.216 10.509 0.957 -2.463 -1.941 0.957 -2.463 4.782 -1.858 -2.358 5.377 2.823 - 402.90 10.262 10.302 10.576 0.915 -2.389 -1.851 0.915 -2.389 4.422 -1.693 -2.185 4.984 2.607 - 402.95 10.441 10.501 10.827 1.122 -2.639 -1.672 1.122 -2.639 4.412 -1.875 -2.959 5.508 2.817 - 403.00 10.439 10.497 10.907 1.104 -2.961 -1.674 1.104 -2.961 4.955 -1.848 -3.270 6.393 3.109 - 403.05 10.785 10.810 11.134 0.736 -2.667 -1.328 0.736 -2.667 3.541 -0.977 -1.963 4.709 2.082 - 403.10 11.205 11.209 11.549 0.289 -2.785 -0.908 0.289 -2.785 2.529 -0.263 -0.806 4.332 1.333 - 403.15 11.059 11.077 11.447 0.629 -2.888 -1.054 0.629 -2.888 3.043 -0.662 -1.816 4.923 1.802 - 403.20 10.585 10.629 10.948 0.964 -2.625 -1.528 0.964 -2.625 4.011 -1.473 -2.532 5.078 2.483 - 403.25 10.572 10.601 10.862 0.785 -2.366 -1.541 0.785 -2.366 3.645 -1.209 -1.856 4.293 2.133 - 403.30 10.790 10.791 10.990 0.154 -2.082 -1.323 0.154 -2.082 2.754 -0.204 -0.321 3.054 1.390 - 403.35 10.917 10.917 11.139 0.047 -2.214 -1.196 0.047 -2.214 2.648 -0.056 -0.104 3.167 1.325 - 403.40 10.840 10.845 10.996 0.326 -1.818 -1.273 0.326 -1.818 2.315 -0.415 -0.593 2.517 1.213 - 403.45 10.693 10.696 10.801 0.243 -1.503 -1.420 0.243 -1.503 2.134 -0.345 -0.365 2.167 1.096 - 403.50 10.390 10.399 10.476 0.436 -1.267 -1.723 0.436 -1.267 2.182 -0.752 -0.553 2.381 1.186 - 403.55 10.437 10.443 10.509 0.328 -1.182 -1.675 0.328 -1.182 1.980 -0.550 -0.388 2.156 1.046 - 403.60 10.446 10.446 10.504 -0.014 -1.106 -1.667 -0.014 -1.106 1.844 0.023 0.015 2.001 0.922 - 403.65 10.109 10.110 10.197 0.159 -1.326 -2.004 0.159 -1.326 2.657 -0.318 -0.210 2.899 1.342 - 403.70 10.158 10.159 10.253 0.122 -1.388 -1.955 0.122 -1.388 2.713 -0.239 -0.169 2.881 1.364 - 403.75 10.417 10.417 10.506 0.091 -1.363 -1.696 0.091 -1.363 2.311 -0.154 -0.124 2.371 1.160 - 403.80 10.621 10.622 10.724 0.144 -1.477 -1.492 0.144 -1.477 2.203 -0.216 -0.213 2.214 1.112 - 403.85 10.739 10.740 10.877 -0.043 -1.722 -1.373 -0.043 -1.722 2.365 0.059 0.074 2.426 1.183 - 403.90 10.693 10.693 10.813 0.055 -1.610 -1.420 0.055 -1.610 2.286 -0.078 -0.089 2.306 1.145 - 403.95 10.689 10.689 10.786 -0.025 -1.448 -1.424 -0.025 -1.448 2.061 0.035 0.036 2.062 1.031 - 404.00 10.791 10.794 10.887 -0.243 -1.422 -1.322 -0.243 -1.422 1.881 0.321 0.345 1.915 0.969 - 404.05 10.558 10.561 10.639 -0.215 -1.288 -1.554 -0.215 -1.288 2.002 0.334 0.277 2.061 1.024 - 404.10 10.515 10.518 10.627 -0.246 -1.520 -1.598 -0.246 -1.520 2.429 0.393 0.374 2.463 1.245 - 404.15 10.629 10.629 10.723 -0.066 -1.420 -1.484 -0.066 -1.420 2.107 0.097 0.093 2.111 1.056 - 404.20 10.491 10.492 10.538 0.156 -0.975 -1.621 0.156 -0.975 1.581 -0.253 -0.152 1.802 0.804 - 404.25 10.405 10.406 10.438 0.082 -0.823 -1.707 0.082 -0.823 1.406 -0.140 -0.067 1.800 0.707 - 404.30 10.429 10.429 10.454 0.016 -0.725 -1.684 0.016 -0.725 1.221 -0.027 -0.012 1.681 0.611 - 404.35 10.508 10.509 10.532 0.101 -0.703 -1.604 0.101 -0.703 1.127 -0.162 -0.071 1.539 0.570 - 404.40 10.532 10.533 10.542 0.082 -0.454 -1.580 0.082 -0.454 0.718 -0.130 -0.037 1.356 0.365 - 404.45 10.507 10.507 10.509 0.006 -0.165 -1.605 0.006 -0.165 0.265 -0.010 -0.001 1.302 0.132 - 404.50 10.415 10.422 10.422 0.384 -0.019 -1.698 0.384 -0.019 0.032 -0.652 -0.007 1.515 0.327 - 404.55 10.401 10.404 10.404 0.269 0.060 -1.712 0.269 0.060 -0.103 -0.460 0.016 1.504 0.236 - 404.60 10.840 10.842 10.845 0.156 -0.290 -1.272 0.156 -0.290 0.369 -0.198 -0.045 0.864 0.211 - 404.65 10.843 10.850 10.852 0.385 -0.229 -1.270 0.385 -0.229 0.290 -0.489 -0.088 0.907 0.288 - 404.70 10.818 10.832 10.833 0.568 -0.039 -1.295 0.568 -0.039 0.051 -0.735 -0.022 1.001 0.369 - 404.75 11.165 11.196 11.197 0.837 -0.128 -0.948 0.837 -0.128 0.121 -0.793 -0.107 0.808 0.405 - 404.80 11.315 11.341 11.345 0.769 -0.308 -0.798 0.769 -0.308 0.245 -0.614 -0.237 0.661 0.351 - 404.85 11.276 11.311 11.312 0.890 -0.148 -0.836 0.890 -0.148 0.124 -0.745 -0.132 0.757 0.383 - 404.90 11.235 11.273 11.275 0.925 0.189 -0.878 0.925 0.189 -0.166 -0.812 0.175 0.831 0.423 - 404.95 11.067 11.106 11.116 0.936 0.469 -1.046 0.936 0.469 -0.491 -0.979 0.439 1.095 0.590 - 405.00 11.213 11.272 11.280 1.156 0.412 -0.900 1.156 0.412 -0.371 -1.041 0.476 1.158 0.602 - 405.05 11.272 11.317 11.322 0.998 0.348 -0.840 0.998 0.348 -0.293 -0.839 0.347 0.912 0.477 - 405.10 11.002 11.044 11.053 0.966 0.441 -1.111 0.966 0.441 -0.490 -1.073 0.426 1.181 0.627 - 405.15 10.832 10.871 10.883 0.925 0.508 -1.281 0.925 0.508 -0.651 -1.185 0.470 1.378 0.716 - 405.20 10.831 10.870 10.893 0.912 0.709 -1.281 0.912 0.709 -0.908 -1.169 0.646 1.488 0.808 - 405.25 11.128 11.158 11.181 0.816 0.705 -0.984 0.816 0.705 -0.694 -0.804 0.575 1.066 0.604 - 405.30 11.165 11.183 11.218 0.641 0.884 -0.948 0.641 0.884 -0.838 -0.608 0.566 1.045 0.590 - 405.35 11.239 11.252 11.269 0.533 0.625 -0.874 0.533 0.625 -0.546 -0.466 0.333 0.719 0.396 - 405.40 11.288 11.301 11.304 0.558 0.219 -0.825 0.558 0.219 -0.180 -0.460 0.122 0.520 0.254 - 405.45 11.179 11.186 11.187 0.395 0.126 -0.934 0.395 0.126 -0.118 -0.369 0.050 0.522 0.195 - 405.50 11.347 11.347 11.348 -0.073 0.105 -0.766 -0.073 0.105 -0.081 0.056 -0.008 0.302 0.049 - 405.55 10.980 10.980 10.981 0.015 -0.084 -1.133 0.015 -0.084 0.095 -0.017 -0.001 0.645 0.048 - 405.60 11.317 11.319 11.319 -0.250 0.034 -0.796 -0.250 0.034 -0.027 0.199 -0.008 0.349 0.101 - 405.65 11.242 11.242 11.243 -0.140 0.076 -0.871 -0.140 0.076 -0.066 0.122 -0.011 0.392 0.069 - 405.70 11.127 11.135 11.135 -0.416 0.077 -0.986 -0.416 0.077 -0.076 0.410 -0.032 0.575 0.209 - 405.75 11.520 11.520 11.521 -0.009 -0.148 -0.593 -0.009 -0.148 0.088 0.005 0.001 0.187 0.044 - 405.80 11.783 11.784 11.784 0.161 -0.075 -0.330 0.161 -0.075 0.025 -0.053 -0.012 0.070 0.030 - 405.85 11.627 11.642 11.642 0.587 0.123 -0.486 0.587 0.123 -0.060 -0.285 0.072 0.298 0.150 - 405.90 11.550 11.556 11.556 0.355 0.104 -0.563 0.355 0.104 -0.059 -0.200 0.037 0.227 0.106 - 405.95 11.526 11.531 11.536 0.343 0.336 -0.587 0.343 0.336 -0.197 -0.201 0.115 0.288 0.152 - 406.00 11.512 11.515 11.520 0.250 0.336 -0.601 0.250 0.336 -0.202 -0.150 0.084 0.268 0.133 - 406.05 11.685 11.689 11.702 0.310 0.549 -0.428 0.310 0.549 -0.235 -0.132 0.170 0.290 0.159 - 406.10 11.883 11.898 11.900 0.590 0.201 -0.229 0.590 0.201 -0.046 -0.135 0.118 0.220 0.093 - 406.15 11.743 11.769 11.770 0.786 0.099 -0.370 0.786 0.099 -0.037 -0.291 0.078 0.382 0.152 - 406.20 11.843 11.890 11.890 1.052 0.054 -0.270 1.052 0.054 -0.014 -0.284 0.056 0.591 0.145 - 406.25 11.759 11.809 11.816 1.091 0.406 -0.354 1.091 0.406 -0.144 -0.386 0.443 0.740 0.302 - 406.30 11.811 11.845 11.860 0.901 0.592 -0.302 0.901 0.592 -0.179 -0.272 0.534 0.627 0.313 - 406.35 11.662 11.683 11.701 0.699 0.651 -0.451 0.699 0.651 -0.294 -0.315 0.455 0.558 0.313 - 406.40 11.610 11.629 11.661 0.674 0.863 -0.503 0.674 0.863 -0.434 -0.339 0.582 0.726 0.401 - 406.45 11.402 11.408 11.453 0.384 1.009 -0.711 0.384 1.009 -0.717 -0.273 0.387 0.835 0.430 - 406.50 11.407 11.415 11.492 0.407 1.330 -0.705 0.407 1.330 -0.938 -0.287 0.541 1.216 0.560 - 406.55 11.417 11.424 11.480 0.389 1.134 -0.696 0.389 1.134 -0.789 -0.270 0.441 0.960 0.472 - 406.60 11.340 11.357 11.404 0.637 1.029 -0.773 0.637 1.029 -0.796 -0.492 0.655 1.031 0.571 - 406.65 11.514 11.535 11.590 0.698 1.122 -0.598 0.698 1.122 -0.672 -0.418 0.783 1.052 0.556 - 406.70 11.496 11.499 11.542 0.263 0.995 -0.616 0.263 0.995 -0.613 -0.162 0.262 0.719 0.343 - 406.75 11.246 11.247 11.310 -0.102 1.193 -0.867 -0.102 1.193 -1.034 0.088 -0.121 1.092 0.522 - 406.80 10.729 10.729 10.852 -0.047 1.628 -1.384 -0.047 1.628 -2.253 0.066 -0.077 2.284 1.128 - 406.85 11.049 11.049 11.162 -0.032 1.587 -1.064 -0.032 1.587 -1.688 0.034 -0.051 1.825 0.845 - 406.90 10.798 10.810 10.894 -0.509 1.355 -1.315 -0.509 1.355 -1.782 0.669 -0.689 1.912 1.012 - 406.95 10.782 10.805 10.943 -0.708 1.730 -1.331 -0.708 1.730 -2.303 0.942 -1.225 2.633 1.387 - 407.00 11.145 11.163 11.322 -0.639 1.889 -0.968 -0.639 1.889 -1.828 0.618 -1.206 2.456 1.138 - 407.05 11.326 11.358 11.523 -0.854 1.944 -0.787 -0.854 1.944 -1.530 0.673 -1.661 2.564 1.178 - 407.10 11.236 11.277 11.427 -0.955 1.848 -0.877 -0.955 1.848 -1.620 0.838 -1.766 2.548 1.269 - 407.15 11.218 11.255 11.360 -0.918 1.540 -0.895 -0.918 1.540 -1.378 0.821 -1.413 2.007 1.069 - 407.20 11.176 11.230 11.335 -1.107 1.539 -0.937 -1.107 1.539 -1.442 1.038 -1.704 2.236 1.231 - 407.25 11.377 11.451 11.539 -1.296 1.419 -0.735 -1.296 1.419 -1.043 0.953 -1.839 2.117 1.160 - 407.30 11.579 11.656 11.705 -1.331 1.076 -0.533 -1.331 1.076 -0.574 0.710 -1.431 1.606 0.849 - 407.35 11.942 12.039 12.078 -1.522 0.973 -0.171 -1.522 0.973 -0.166 0.260 -1.480 1.645 0.756 - 407.40 11.771 11.853 11.858 -1.387 0.330 -0.341 -1.387 0.330 -0.113 0.474 -0.458 1.075 0.334 - 407.45 11.724 11.826 11.845 -1.553 0.664 -0.389 -1.553 0.664 -0.258 0.604 -1.031 1.501 0.611 - 407.50 11.795 11.868 11.896 -1.314 0.816 -0.318 -1.314 0.816 -0.259 0.417 -1.072 1.246 0.590 - 407.55 11.721 11.784 11.832 -1.214 1.064 -0.391 -1.214 1.064 -0.416 0.475 -1.292 1.379 0.719 - 407.60 11.751 11.803 11.859 -1.102 1.152 -0.361 -1.102 1.152 -0.416 0.398 -1.270 1.336 0.697 - 407.65 11.646 11.719 11.741 -1.307 0.719 -0.467 -1.307 0.719 -0.336 0.610 -0.940 1.221 0.585 - 407.70 11.479 11.524 11.569 -1.012 1.019 -0.634 -1.012 1.019 -0.646 0.641 -1.032 1.232 0.688 - 407.75 11.377 11.412 11.453 -0.892 0.966 -0.736 -0.892 0.966 -0.711 0.656 -0.862 1.135 0.648 - 407.80 11.310 11.338 11.359 -0.799 0.677 -0.803 -0.799 0.677 -0.544 0.641 -0.541 0.871 0.500 - 407.85 11.339 11.400 11.415 -1.182 0.569 -0.774 -1.182 0.569 -0.440 0.915 -0.673 1.160 0.609 - 407.90 11.360 11.398 11.406 -0.938 0.410 -0.753 -0.938 0.410 -0.309 0.706 -0.385 0.808 0.431 - 407.95 11.705 11.757 11.761 -1.100 0.321 -0.408 -1.100 0.321 -0.131 0.449 -0.354 0.740 0.293 - 408.00 11.750 11.791 11.796 -0.976 0.365 -0.362 -0.976 0.365 -0.132 0.354 -0.357 0.609 0.260 - 408.05 11.795 11.844 11.848 -1.080 0.315 -0.318 -1.080 0.315 -0.100 0.343 -0.340 0.683 0.247 - 408.10 11.725 11.756 11.758 -0.850 0.206 -0.387 -0.850 0.206 -0.080 0.329 -0.175 0.458 0.191 - 408.15 11.724 11.763 11.765 -0.946 0.254 -0.388 -0.946 0.254 -0.099 0.367 -0.240 0.555 0.225 - 408.20 11.823 11.874 11.882 -1.098 0.444 -0.290 -1.098 0.444 -0.129 0.319 -0.488 0.744 0.298 - 408.25 12.014 12.048 12.061 -0.907 0.545 -0.099 -0.907 0.545 -0.054 0.089 -0.494 0.564 0.252 - 408.30 12.556 12.576 12.594 -0.706 0.676 0.443 -0.706 0.676 0.300 -0.313 -0.478 0.576 0.323 - 408.35 12.508 12.530 12.545 -0.744 0.601 0.395 -0.744 0.601 0.238 -0.294 -0.447 0.535 0.293 - 408.40 12.538 12.567 12.610 -0.857 1.039 0.425 -0.857 1.039 0.442 -0.364 -0.891 0.998 0.529 - 408.45 12.498 12.534 12.590 -0.947 1.185 0.385 -0.947 1.185 0.456 -0.365 -1.122 1.225 0.633 - 408.50 12.143 12.174 12.235 -0.868 1.222 0.031 -0.868 1.222 0.037 -0.026 -1.060 1.124 0.531 - 408.55 12.113 12.165 12.215 -1.125 1.104 0.000 -1.125 1.104 0.001 -0.001 -1.242 1.243 0.621 - 408.60 11.852 11.910 11.934 -1.170 0.770 -0.261 -1.170 0.770 -0.201 0.305 -0.901 1.015 0.486 - 408.65 11.827 11.849 11.896 -0.727 1.057 -0.286 -0.727 1.057 -0.302 0.208 -0.768 0.863 0.426 - 408.70 12.118 12.130 12.152 -0.534 0.736 0.005 -0.534 0.736 0.004 -0.003 -0.393 0.413 0.196 - 408.75 12.172 12.174 12.191 -0.217 0.644 0.059 -0.217 0.644 0.038 -0.013 -0.140 0.233 0.073 - 408.80 11.948 11.967 12.017 -0.680 1.093 -0.165 -0.680 1.093 -0.180 0.112 -0.744 0.843 0.387 - 408.85 11.900 11.918 11.959 -0.647 0.994 -0.212 -0.647 0.994 -0.211 0.137 -0.643 0.726 0.345 - 408.90 11.889 11.903 11.924 -0.564 0.718 -0.224 -0.564 0.718 -0.160 0.126 -0.405 0.441 0.227 - 408.95 11.787 11.800 11.822 -0.542 0.727 -0.325 -0.542 0.727 -0.237 0.176 -0.394 0.464 0.246 - 409.00 11.688 11.714 11.754 -0.780 0.973 -0.425 -0.780 0.973 -0.413 0.331 -0.759 0.868 0.463 - 409.05 11.576 11.589 11.605 -0.564 0.603 -0.537 -0.564 0.603 -0.324 0.303 -0.340 0.485 0.280 - 409.10 11.780 11.791 11.803 -0.498 0.541 -0.333 -0.498 0.541 -0.180 0.166 -0.269 0.326 0.182 - 409.15 11.672 11.684 11.690 -0.525 0.393 -0.441 -0.525 0.393 -0.173 0.231 -0.206 0.312 0.177 - 409.20 11.795 11.809 11.809 -0.573 0.046 -0.318 -0.573 0.046 -0.015 0.182 -0.027 0.216 0.092 - 409.25 12.102 12.125 12.126 -0.742 -0.213 -0.011 -0.742 -0.213 0.002 0.008 0.158 0.298 0.079 - 409.30 11.915 11.962 11.965 -1.065 -0.249 -0.198 -1.065 -0.249 0.049 0.211 0.265 0.617 0.171 - 409.35 11.812 11.842 11.847 -0.854 -0.324 -0.301 -0.854 -0.324 0.098 0.257 0.277 0.462 0.195 - 409.40 12.367 12.378 12.400 -0.520 -0.731 0.254 -0.520 -0.731 -0.186 -0.132 0.380 0.435 0.222 - 409.45 12.316 12.343 12.344 -0.814 -0.167 0.204 -0.814 -0.167 -0.034 -0.166 0.136 0.366 0.108 - 409.50 12.313 12.352 12.363 -0.981 -0.529 0.200 -0.981 -0.529 -0.106 -0.197 0.519 0.641 0.282 - 409.55 12.292 12.353 12.356 -1.224 -0.260 0.179 -1.224 -0.260 -0.047 -0.219 0.319 0.799 0.195 - 409.60 12.445 12.511 12.513 -1.274 -0.269 0.333 -1.274 -0.269 -0.089 -0.424 0.342 0.903 0.276 - 409.65 12.748 12.817 12.827 -1.335 -0.490 0.635 -1.335 -0.490 -0.311 -0.847 0.654 1.213 0.557 - 409.70 12.795 12.847 12.860 -1.150 -0.573 0.682 -1.150 -0.573 -0.391 -0.785 0.659 1.058 0.548 - 409.75 12.572 12.628 12.645 -1.189 -0.656 0.459 -1.189 -0.656 -0.301 -0.545 0.780 1.027 0.499 - 409.80 12.712 12.767 12.768 -1.184 -0.166 0.599 -1.184 -0.166 -0.100 -0.710 0.197 0.895 0.372 - 409.85 12.548 12.586 12.587 -0.980 -0.166 0.435 -0.980 -0.166 -0.072 -0.426 0.163 0.588 0.231 - 409.90 12.470 12.503 12.504 -0.901 0.128 0.358 -0.901 0.128 0.046 -0.322 -0.115 0.478 0.173 - 409.95 12.466 12.484 12.484 -0.673 -0.056 0.353 -0.673 -0.056 -0.020 -0.238 0.038 0.290 0.121 - 410.00 12.159 12.189 12.189 -0.857 -0.045 0.046 -0.857 -0.045 -0.002 -0.039 0.039 0.369 0.028 - 410.05 12.392 12.414 12.414 -0.727 -0.046 0.280 -0.727 -0.046 -0.013 -0.203 0.034 0.304 0.103 - 410.10 12.444 12.483 12.491 -0.976 0.468 0.332 -0.976 0.468 0.155 -0.324 -0.457 0.641 0.290 - 410.15 12.193 12.244 12.245 -1.125 0.133 0.080 -1.125 0.133 0.011 -0.090 -0.150 0.645 0.088 - 410.20 11.799 11.839 11.843 -0.978 0.309 -0.314 -0.978 0.309 -0.097 0.307 -0.302 0.575 0.221 - 410.25 11.945 11.981 11.985 -0.925 0.285 -0.167 -0.925 0.285 -0.048 0.155 -0.264 0.483 0.155 - 410.30 12.182 12.195 12.195 -0.554 0.035 0.069 -0.554 0.035 0.002 -0.038 -0.019 0.157 0.022 - 410.35 12.162 12.167 12.169 -0.356 -0.180 0.049 -0.356 -0.180 -0.009 -0.018 0.064 0.081 0.033 - 410.40 11.931 11.942 11.943 -0.517 -0.114 -0.182 -0.517 -0.114 0.021 0.094 0.059 0.157 0.057 - 410.45 11.915 11.941 11.941 -0.789 -0.069 -0.198 -0.789 -0.069 0.014 0.156 0.055 0.333 0.083 - 410.50 11.795 11.824 11.827 -0.824 0.259 -0.317 -0.824 0.259 -0.082 0.262 -0.213 0.424 0.174 - 410.55 11.917 11.950 11.952 -0.896 0.163 -0.196 -0.896 0.163 -0.032 0.176 -0.146 0.434 0.115 - 410.60 11.735 11.762 11.765 -0.799 0.249 -0.378 -0.799 0.249 -0.094 0.302 -0.199 0.422 0.187 - 410.65 11.731 11.791 11.791 -1.186 0.100 -0.382 -1.186 0.100 -0.038 0.453 -0.118 0.781 0.235 - 410.70 11.649 11.732 11.733 -1.394 -0.181 -0.464 -1.394 -0.181 0.084 0.647 0.252 1.095 0.350 - 410.75 11.261 11.324 11.325 -1.198 -0.175 -0.852 -1.198 -0.175 0.149 1.021 0.210 1.097 0.527 - 410.80 11.343 11.376 11.376 -0.856 -0.005 -0.769 -0.856 -0.005 0.004 0.658 0.005 0.662 0.329 - 410.85 10.917 10.973 10.975 -1.109 -0.212 -1.196 -1.109 -0.212 0.254 1.325 0.235 1.352 0.685 - 410.90 11.057 11.148 11.158 -1.422 -0.476 -1.056 -1.422 -0.476 0.503 1.502 0.677 1.682 0.861 - 410.95 10.968 11.032 11.034 -1.191 -0.200 -1.145 -1.191 -0.200 0.229 1.363 0.239 1.385 0.702 - 411.00 11.102 11.172 11.172 -1.249 -0.118 -1.011 -1.249 -0.118 0.119 1.263 0.147 1.298 0.639 - 411.05 11.472 11.530 11.545 -1.160 -0.588 -0.641 -1.160 -0.588 0.377 0.744 0.682 1.051 0.538 - 411.10 11.521 11.591 11.620 -1.267 -0.822 -0.592 -1.267 -0.822 0.486 0.749 1.041 1.315 0.686 - 411.15 11.600 11.659 11.693 -1.168 -0.893 -0.512 -1.168 -0.893 0.458 0.599 1.043 1.213 0.644 - 411.20 11.922 11.983 12.023 -1.201 -0.985 -0.190 -1.201 -0.985 0.188 0.229 1.183 1.225 0.610 - 411.25 11.731 11.805 11.824 -1.321 -0.665 -0.381 -1.321 -0.665 0.254 0.504 0.878 1.166 0.522 - 411.30 11.896 11.906 11.928 -0.481 -0.728 -0.216 -0.481 -0.728 0.157 0.104 0.350 0.404 0.199 - 411.35 11.835 11.868 11.888 -0.875 -0.699 -0.278 -0.875 -0.699 0.194 0.243 0.611 0.665 0.343 - 411.40 12.056 12.082 12.110 -0.794 -0.826 -0.057 -0.794 -0.826 0.047 0.045 0.656 0.658 0.330 - 411.45 12.065 12.081 12.123 -0.618 -1.017 -0.048 -0.618 -1.017 0.049 0.030 0.629 0.710 0.316 - 411.50 11.956 11.963 12.008 -0.425 -1.040 -0.157 -0.425 -1.040 0.163 0.067 0.441 0.643 0.238 - 411.55 11.816 11.821 11.872 -0.344 -1.094 -0.297 -0.344 -1.094 0.325 0.102 0.377 0.702 0.254 - 411.60 11.663 11.673 11.735 -0.487 -1.201 -0.450 -0.487 -1.201 0.540 0.219 0.584 0.941 0.413 - 411.65 11.889 11.896 11.992 -0.412 -1.517 -0.224 -0.412 -1.517 0.339 0.092 0.625 1.260 0.359 - 411.70 11.659 11.661 11.777 -0.192 -1.647 -0.453 -0.192 -1.647 0.747 0.087 0.316 1.478 0.408 - 411.75 11.552 11.552 11.671 0.003 -1.666 -0.561 0.003 -1.666 0.935 -0.002 -0.005 1.546 0.467 - 411.80 11.467 11.469 11.517 0.205 -1.050 -0.645 0.205 -1.050 0.678 -0.132 -0.215 0.780 0.362 - 411.85 11.949 11.957 12.013 0.421 -1.162 -0.163 0.421 -1.162 0.190 -0.069 -0.489 0.776 0.264 - 411.90 11.867 11.870 11.929 0.247 -1.192 -0.246 0.247 -1.192 0.293 -0.061 -0.294 0.771 0.210 - 411.95 11.925 11.931 11.976 0.378 -1.046 -0.188 0.378 -1.046 0.197 -0.071 -0.396 0.636 0.224 - 412.00 11.590 11.600 11.626 0.471 -0.785 -0.523 0.471 -0.785 0.410 -0.246 -0.370 0.556 0.302 - 412.05 11.711 11.722 11.758 0.517 -0.923 -0.402 0.517 -0.923 0.371 -0.208 -0.477 0.640 0.320 - 412.10 11.940 11.963 11.987 0.743 -0.755 -0.173 0.743 -0.755 0.131 -0.128 -0.561 0.576 0.295 - 412.15 12.037 12.053 12.059 0.626 -0.365 -0.076 0.626 -0.365 0.028 -0.047 -0.228 0.265 0.117 - 412.20 11.938 11.975 11.982 0.937 -0.418 -0.174 0.937 -0.418 0.073 -0.163 -0.391 0.541 0.215 - 412.25 11.908 11.974 11.988 1.254 -0.584 -0.205 1.254 -0.584 0.120 -0.257 -0.733 0.978 0.393 - 412.30 11.639 11.691 11.711 1.104 -0.682 -0.474 1.104 -0.682 0.323 -0.523 -0.752 0.954 0.486 - 412.35 11.396 11.445 11.459 1.058 -0.566 -0.717 1.058 -0.566 0.406 -0.758 -0.599 0.977 0.524 - 412.40 11.445 11.522 11.537 1.336 -0.587 -0.668 1.336 -0.587 0.392 -0.893 -0.784 1.289 0.626 - 412.45 11.230 11.259 11.275 0.803 -0.596 -0.883 0.803 -0.596 0.526 -0.708 -0.478 0.889 0.502 - 412.50 11.052 11.084 11.092 0.836 -0.438 -1.061 0.836 -0.438 0.465 -0.887 -0.367 1.008 0.533 - 412.55 10.789 10.819 10.830 0.807 -0.481 -1.324 0.807 -0.481 0.636 -1.068 -0.388 1.317 0.651 - 412.60 10.618 10.649 10.656 0.811 -0.388 -1.494 0.811 -0.388 0.579 -1.212 -0.314 1.521 0.690 - 412.65 10.399 10.407 10.414 0.402 -0.382 -1.714 0.402 -0.382 0.654 -0.689 -0.153 1.622 0.481 - 412.70 10.585 10.586 10.594 0.196 -0.406 -1.528 0.196 -0.406 0.620 -0.299 -0.079 1.269 0.346 - 412.75 10.517 10.517 10.517 0.101 0.050 -1.596 0.101 0.050 -0.080 -0.161 0.005 1.280 0.090 - 412.80 10.565 10.565 10.577 -0.075 -0.507 -1.548 -0.075 -0.507 0.785 0.116 0.038 1.330 0.397 - 412.85 10.534 10.534 10.538 -0.015 -0.306 -1.579 -0.015 -0.306 0.482 0.024 0.005 1.293 0.242 - 412.90 10.193 10.199 10.200 0.357 -0.140 -1.920 0.357 -0.140 0.268 -0.686 -0.050 1.917 0.369 - 412.95 10.329 10.343 10.343 0.553 0.017 -1.784 0.553 0.017 -0.031 -0.986 0.010 1.745 0.493 - 413.00 10.472 10.476 10.477 0.321 -0.096 -1.641 0.321 -0.096 0.158 -0.527 -0.031 1.403 0.275 - 413.05 10.470 10.471 10.473 0.182 0.204 -1.643 0.182 0.204 -0.335 -0.299 0.037 1.387 0.225 - 413.10 10.686 10.693 10.693 0.387 0.051 -1.427 0.387 0.051 -0.073 -0.552 0.020 1.094 0.278 - 413.15 10.628 10.630 10.630 0.193 0.003 -1.485 0.193 0.003 -0.004 -0.287 0.001 1.121 0.143 - 413.20 10.643 10.644 10.644 0.103 0.072 -1.469 0.103 0.072 -0.106 -0.152 0.007 1.088 0.093 - 413.25 11.024 11.026 11.026 -0.197 0.010 -1.088 -0.197 0.010 -0.011 0.215 -0.002 0.612 0.107 - 413.30 11.248 11.250 11.258 -0.180 0.428 -0.865 -0.180 0.428 -0.370 0.156 -0.077 0.482 0.204 - 413.35 11.257 11.260 11.290 0.246 0.826 -0.855 0.246 0.826 -0.707 -0.211 0.203 0.738 0.383 - 413.40 10.965 10.978 10.988 0.531 0.485 -1.148 0.531 0.485 -0.557 -0.610 0.258 0.918 0.433 - 413.45 11.122 11.133 11.139 0.502 0.372 -0.991 0.502 0.372 -0.368 -0.498 0.187 0.686 0.323 - 413.50 11.029 11.040 11.044 0.487 0.288 -1.084 0.487 0.288 -0.312 -0.528 0.140 0.747 0.314 - 413.55 11.019 11.021 11.033 0.188 0.518 -1.094 0.188 0.518 -0.566 -0.206 0.098 0.750 0.305 - 413.60 11.248 11.262 11.283 0.565 0.688 -0.865 0.565 0.688 -0.595 -0.488 0.389 0.770 0.431 - 413.65 11.408 11.418 11.421 0.491 0.244 -0.705 0.491 0.244 -0.172 -0.346 0.120 0.399 0.202 - 413.70 11.472 11.497 11.505 0.762 0.414 -0.641 0.762 0.414 -0.265 -0.489 0.316 0.582 0.320 - 413.75 11.384 11.426 11.446 0.984 0.666 -0.729 0.984 0.666 -0.485 -0.717 0.655 0.972 0.543 - 413.80 11.477 11.525 11.538 1.049 0.556 -0.636 1.049 0.556 -0.354 -0.667 0.583 0.907 0.477 - 413.85 11.735 11.752 11.753 0.633 0.192 -0.378 0.633 0.192 -0.073 -0.239 0.121 0.290 0.139 - 413.90 11.539 11.565 11.565 0.779 -0.013 -0.574 0.779 -0.013 0.008 -0.447 -0.010 0.468 0.224 - 413.95 11.671 11.696 11.697 0.773 0.147 -0.442 0.773 0.147 -0.065 -0.342 0.113 0.407 0.183 - 414.00 11.456 11.470 11.471 0.576 0.089 -0.657 0.576 0.089 -0.058 -0.378 0.051 0.385 0.193 - 414.05 11.204 11.221 11.227 0.603 0.388 -0.908 0.603 0.388 -0.352 -0.547 0.234 0.669 0.346 - 414.10 10.895 10.919 10.940 0.715 0.680 -1.217 0.715 0.680 -0.828 -0.871 0.486 1.228 0.648 - 414.15 10.760 10.772 10.799 0.506 0.767 -1.353 0.506 0.767 -1.037 -0.684 0.388 1.337 0.651 - 414.20 10.845 10.864 10.884 0.650 0.659 -1.268 0.650 0.659 -0.836 -0.824 0.429 1.233 0.625 - 414.25 10.927 10.941 10.957 0.562 0.585 -1.186 0.562 0.585 -0.694 -0.666 0.329 1.032 0.508 - 414.30 11.055 11.061 11.065 0.385 0.285 -1.058 0.385 0.285 -0.301 -0.408 0.110 0.675 0.259 - 414.35 10.650 10.666 10.667 0.572 -0.128 -1.462 0.572 -0.128 0.188 -0.837 -0.074 1.241 0.430 - 414.40 10.649 10.684 10.685 0.865 -0.166 -1.464 0.865 -0.166 0.243 -1.266 -0.144 1.459 0.649 - 414.45 10.853 10.935 10.935 1.330 -0.014 -1.259 1.330 -0.014 0.017 -1.675 -0.018 1.678 0.838 - 414.50 11.091 11.223 11.223 1.715 -0.025 -1.022 1.715 -0.025 0.025 -1.753 -0.042 1.994 0.877 - 414.55 10.928 11.113 11.116 2.017 0.269 -1.185 2.017 0.269 -0.319 -2.390 0.544 2.772 1.236 - 414.60 10.794 10.960 10.971 1.901 0.492 -1.319 1.901 0.492 -0.648 -2.508 0.935 2.798 1.377 - 414.65 10.535 10.596 10.613 1.136 0.595 -1.578 1.136 0.595 -0.940 -1.793 0.677 2.068 1.067 - 414.70 10.403 10.447 10.462 0.960 0.557 -1.710 0.960 0.557 -0.952 -1.642 0.535 2.078 0.986 - 414.75 10.613 10.691 10.696 1.291 0.344 -1.500 1.291 0.344 -0.517 -1.937 0.445 2.018 1.027 - 414.80 10.697 10.780 10.788 1.335 0.401 -1.415 1.335 0.401 -0.567 -1.889 0.535 1.973 1.022 - 414.85 10.524 10.639 10.661 1.559 0.688 -1.588 1.559 0.688 -1.093 -2.476 1.073 2.713 1.456 - 414.90 10.342 10.473 10.496 1.656 0.685 -1.771 1.656 0.685 -1.213 -2.932 1.134 3.174 1.685 - 414.95 10.600 10.700 10.714 1.462 0.549 -1.513 1.462 0.549 -0.831 -2.211 0.803 2.363 1.247 - 415.00 10.557 10.636 10.666 1.293 0.798 -1.556 1.293 0.798 -1.241 -2.012 1.031 2.364 1.289 - 415.05 10.726 10.780 10.841 1.087 1.139 -1.387 1.087 1.139 -1.581 -1.508 1.239 2.202 1.256 - 415.10 10.945 11.065 11.122 1.626 1.119 -1.168 1.626 1.119 -1.307 -1.898 1.819 2.629 1.468 - 415.15 10.737 10.884 10.922 1.787 0.902 -1.376 1.787 0.902 -1.241 -2.460 1.612 2.951 1.596 - 415.20 10.795 10.992 11.035 2.071 0.968 -1.318 2.071 0.968 -1.275 -2.729 2.005 3.482 1.809 - 415.25 10.916 11.127 11.168 2.161 0.955 -1.197 2.161 0.955 -1.143 -2.587 2.064 3.507 1.750 - 415.30 10.876 11.003 11.006 1.664 0.262 -1.237 1.664 0.262 -0.323 -2.058 0.435 2.184 1.064 - 415.35 10.649 10.749 10.755 1.465 0.351 -1.464 1.465 0.351 -0.514 -2.145 0.515 2.206 1.132 - 415.40 10.467 10.562 10.572 1.417 0.452 -1.646 1.417 0.452 -0.744 -2.332 0.641 2.461 1.265 - 415.45 10.516 10.613 10.622 1.430 0.429 -1.597 1.430 0.429 -0.685 -2.283 0.614 2.389 1.231 - 415.50 10.580 10.671 10.677 1.392 0.356 -1.533 1.392 0.356 -0.545 -2.134 0.495 2.208 1.129 - 415.55 10.516 10.602 10.606 1.343 0.287 -1.597 1.343 0.287 -0.458 -2.145 0.386 2.218 1.114 - 415.60 10.637 10.718 10.723 1.317 0.332 -1.476 1.317 0.332 -0.491 -1.943 0.438 2.011 1.026 - 415.65 10.797 10.881 10.882 1.355 0.148 -1.316 1.355 0.148 -0.195 -1.784 0.201 1.796 0.903 - 415.70 10.740 10.841 10.841 1.479 0.034 -1.373 1.479 0.034 -0.047 -2.030 0.050 2.037 1.016 - 415.75 10.575 10.672 10.672 1.432 0.066 -1.537 1.432 0.066 -0.101 -2.202 0.094 2.209 1.103 - 415.80 10.555 10.641 10.641 1.348 0.109 -1.558 1.348 0.109 -0.170 -2.100 0.147 2.128 1.056 - 415.85 10.730 10.824 10.825 1.418 0.194 -1.383 1.418 0.194 -0.268 -1.961 0.275 1.980 0.999 - 415.90 10.548 10.660 10.664 1.536 0.283 -1.564 1.536 0.283 -0.442 -2.403 0.434 2.443 1.241 - 415.95 10.472 10.541 10.560 1.205 0.634 -1.641 1.205 0.634 -1.040 -1.977 0.764 2.273 1.181 - 416.00 10.676 10.754 10.780 1.296 0.751 -1.437 1.296 0.751 -1.079 -1.862 0.973 2.154 1.181 - 416.05 10.801 10.922 10.957 1.619 0.872 -1.311 1.619 0.872 -1.144 -2.124 1.412 2.551 1.398 - 416.10 10.839 10.944 10.963 1.517 0.640 -1.274 1.517 0.640 -0.815 -1.933 0.970 2.167 1.156 - 416.15 10.681 10.782 10.808 1.472 0.747 -1.432 1.472 0.747 -1.070 -2.107 1.100 2.387 1.303 - 416.20 10.559 10.621 10.689 1.153 1.199 -1.554 1.153 1.199 -1.863 -1.792 1.382 2.591 1.466 - 416.25 10.409 10.443 10.486 0.836 0.945 -1.703 0.836 0.945 -1.610 -1.424 0.790 2.247 1.145 - 416.30 10.495 10.516 10.543 0.662 0.755 -1.617 0.662 0.755 -1.222 -1.071 0.500 1.813 0.850 - 416.35 10.452 10.476 10.495 0.714 0.631 -1.661 0.714 0.631 -1.049 -1.186 0.451 1.834 0.823 - 416.40 10.325 10.351 10.370 0.737 0.619 -1.788 0.737 0.619 -1.106 -1.317 0.456 2.061 0.890 - 416.45 10.228 10.263 10.270 0.842 0.392 -1.885 0.842 0.392 -0.738 -1.587 0.330 2.207 0.890 - 416.50 10.307 10.347 10.353 0.908 0.363 -1.806 0.908 0.363 -0.656 -1.640 0.330 2.109 0.898 - 416.55 10.085 10.098 10.099 0.518 0.120 -2.028 0.518 0.120 -0.244 -1.050 0.062 2.197 0.540 - 416.60 9.839 9.883 9.885 0.925 0.206 -2.273 0.925 0.206 -0.469 -2.104 0.191 3.034 1.082 - 416.65 10.096 10.147 10.147 1.015 0.040 -2.017 1.015 0.040 -0.080 -2.047 0.040 2.550 1.025 - 416.70 9.907 9.982 9.983 1.227 0.042 -2.206 1.227 0.042 -0.092 -2.706 0.051 3.187 1.354 - 416.75 9.431 9.495 9.505 1.101 0.441 -2.682 1.101 0.441 -1.183 -2.953 0.486 4.300 1.609 - 416.80 9.361 9.388 9.417 0.704 0.740 -2.752 0.704 0.740 -2.036 -1.938 0.521 4.308 1.430 - 416.85 9.293 9.336 9.352 0.893 0.549 -2.820 0.893 0.549 -1.548 -2.518 0.490 4.525 1.498 - 416.90 9.227 9.278 9.308 0.970 0.748 -2.886 0.970 0.748 -2.158 -2.800 0.725 4.914 1.804 - 416.95 9.774 9.841 9.872 1.149 0.776 -2.339 1.149 0.776 -1.814 -2.687 0.891 3.696 1.681 - 417.00 9.727 9.808 9.825 1.258 0.579 -2.386 1.258 0.579 -1.383 -3.002 0.729 3.806 1.692 - 417.05 9.845 9.910 9.920 1.130 0.459 -2.268 1.130 0.459 -1.042 -2.563 0.519 3.316 1.408 - 417.10 9.596 9.658 9.682 1.097 0.670 -2.517 1.097 0.670 -1.685 -2.760 0.734 3.993 1.658 - 417.15 9.584 9.615 9.646 0.765 0.782 -2.529 0.765 0.782 -1.978 -1.934 0.598 3.795 1.415 - 417.20 9.483 9.535 9.578 0.992 0.911 -2.630 0.992 0.911 -2.396 -2.608 0.904 4.365 1.828 - 417.25 9.715 9.763 9.785 0.964 0.662 -2.398 0.964 0.662 -1.588 -2.313 0.639 3.559 1.438 - 417.30 9.824 9.859 9.902 0.824 0.920 -2.289 0.824 0.920 -2.107 -1.887 0.759 3.382 1.464 - 417.35 9.416 9.460 9.477 0.912 0.576 -2.697 0.912 0.576 -1.553 -2.460 0.525 4.219 1.478 - 417.40 8.938 8.992 9.024 0.986 0.757 -3.175 0.986 0.757 -2.402 -3.131 0.746 5.812 2.008 - 417.45 8.992 9.034 9.080 0.877 0.908 -3.121 0.877 0.908 -2.833 -2.737 0.796 5.667 2.009 - 417.50 9.218 9.288 9.340 1.145 0.978 -2.895 1.145 0.978 -2.832 -3.314 1.120 5.325 2.250 - 417.55 9.204 9.336 9.366 1.566 0.756 -2.909 1.566 0.756 -2.198 -4.554 1.183 5.743 2.597 - 417.60 9.298 9.436 9.465 1.611 0.740 -2.815 1.611 0.740 -2.083 -4.534 1.192 5.533 2.565 - 417.65 8.831 8.981 9.013 1.636 0.759 -3.282 1.636 0.759 -2.490 -5.369 1.242 7.011 3.024 - 417.70 9.075 9.210 9.228 1.572 0.570 -3.038 1.572 0.570 -1.731 -4.775 0.896 6.011 2.579 - 417.75 9.160 9.268 9.299 1.409 0.762 -2.952 1.409 0.762 -2.249 -4.161 1.074 5.642 2.425 - 417.80 9.210 9.308 9.320 1.347 0.478 -2.903 1.347 0.478 -1.387 -3.910 0.644 5.234 2.099 - 417.85 9.298 9.384 9.402 1.269 0.572 -2.815 1.269 0.572 -1.610 -3.573 0.726 4.930 1.993 - 417.90 9.099 9.249 9.295 1.660 0.922 -3.014 1.660 0.922 -2.779 -5.002 1.530 6.344 2.961 - 417.95 9.036 9.170 9.239 1.563 1.124 -3.077 1.563 1.124 -3.459 -4.809 1.757 6.587 3.089 - 418.00 8.936 9.051 9.111 1.442 1.038 -3.177 1.442 1.038 -3.298 -4.581 1.497 6.625 2.920 - 418.05 8.979 9.086 9.126 1.393 0.856 -3.134 1.393 0.856 -2.682 -4.366 1.192 6.248 2.630 - 418.10 8.809 8.933 9.007 1.483 1.152 -3.304 1.483 1.152 -3.807 -4.899 1.708 7.222 3.218 - 418.15 8.855 8.926 9.046 1.127 1.465 -3.258 1.127 1.465 -4.775 -3.673 1.652 7.017 3.123 - 418.20 9.104 9.180 9.269 1.178 1.282 -3.009 1.178 1.282 -3.858 -3.544 1.510 6.042 2.726 - 418.25 8.738 8.813 8.930 1.150 1.439 -3.375 1.150 1.439 -4.858 -3.882 1.656 7.393 3.218 - 418.30 8.670 8.811 8.945 1.570 1.544 -3.443 1.570 1.544 -5.314 -5.404 2.423 8.350 3.979 - 418.35 8.997 9.177 9.301 1.805 1.517 -3.116 1.805 1.517 -4.726 -5.625 2.738 7.634 3.920 - 418.40 9.239 9.427 9.565 1.875 1.615 -2.874 1.875 1.615 -4.642 -5.388 3.028 7.191 3.865 - 418.45 9.367 9.586 9.754 2.033 1.808 -2.745 2.033 1.808 -4.962 -5.583 3.676 7.470 4.162 - 418.50 9.364 9.532 9.739 1.783 1.999 -2.749 1.783 1.999 -5.494 -4.902 3.564 7.366 4.090 - 418.55 9.568 9.740 9.940 1.821 1.983 -2.545 1.821 1.983 -5.045 -4.633 3.609 6.860 3.871 - 418.60 9.726 9.855 10.027 1.592 1.848 -2.387 1.592 1.848 -4.411 -3.799 2.942 5.823 3.261 - 418.65 9.603 9.769 9.882 1.789 1.494 -2.510 1.789 1.494 -3.750 -4.491 2.674 5.867 3.217 - 418.70 9.560 9.762 9.889 1.975 1.581 -2.553 1.975 1.581 -4.037 -5.042 3.123 6.459 3.587 - 418.75 9.523 9.714 9.895 1.915 1.885 -2.589 1.915 1.885 -4.881 -4.960 3.611 6.964 3.920 - 418.80 9.222 9.387 9.575 1.748 1.891 -2.891 1.748 1.891 -5.466 -5.054 3.306 7.494 4.073 - 418.85 9.181 9.322 9.440 1.611 1.493 -2.931 1.611 1.493 -4.377 -4.724 2.406 6.710 3.437 - 418.90 9.419 9.567 9.652 1.678 1.279 -2.694 1.678 1.279 -3.445 -4.520 2.145 5.853 3.037 - 418.95 9.685 9.791 9.910 1.435 1.533 -2.428 1.435 1.533 -3.722 -3.485 2.200 5.153 2.777 - 419.00 10.032 10.131 10.258 1.416 1.608 -2.081 1.416 1.608 -3.347 -2.948 2.278 4.462 2.504 - 419.05 10.272 10.332 10.414 1.109 1.307 -1.841 1.109 1.307 -2.406 -2.042 1.450 3.163 1.736 - 419.10 10.104 10.190 10.301 1.318 1.513 -2.009 1.318 1.513 -3.039 -2.647 1.994 4.031 2.248 - 419.15 10.354 10.422 10.537 1.190 1.555 -1.759 1.190 1.555 -2.736 -2.093 1.850 3.464 1.955 - 419.20 9.951 10.097 10.216 1.707 1.560 -2.162 1.707 1.560 -3.373 -3.690 2.664 5.011 2.832 - 419.25 10.244 10.461 10.552 2.120 1.381 -1.869 2.120 1.381 -2.581 -3.963 2.928 4.948 2.781 - 419.30 10.020 10.228 10.317 2.048 1.355 -2.092 2.048 1.355 -2.836 -4.286 2.777 5.206 2.921 - 419.35 10.056 10.232 10.316 1.891 1.316 -2.057 1.891 1.316 -2.708 -3.890 2.489 4.770 2.677 - 419.40 10.129 10.263 10.315 1.655 1.027 -1.984 1.655 1.027 -2.037 -3.284 1.700 3.865 2.111 - 419.45 10.117 10.286 10.300 1.856 0.538 -1.995 1.856 0.538 -1.073 -3.704 0.998 3.858 1.992 - 419.50 10.092 10.262 10.264 1.860 0.239 -2.021 1.860 0.239 -0.484 -3.759 0.445 3.800 1.908 - 419.55 9.703 9.880 9.892 1.861 0.488 -2.409 1.861 0.488 -1.176 -4.484 0.909 4.754 2.362 - 419.60 9.814 9.963 9.982 1.719 0.611 -2.299 1.719 0.611 -1.405 -3.952 1.051 4.307 2.162 - 419.65 9.707 9.841 9.869 1.617 0.747 -2.406 1.617 0.747 -1.798 -3.889 1.208 4.480 2.226 - 419.70 9.909 10.020 10.041 1.486 0.646 -2.204 1.486 0.646 -1.424 -3.275 0.960 3.741 1.849 - 419.75 9.948 10.037 10.039 1.339 0.184 -2.165 1.339 0.184 -0.398 -2.899 0.246 3.257 1.468 - 419.80 9.591 9.677 9.682 1.285 0.305 -2.521 1.285 0.305 -0.769 -3.240 0.392 4.051 1.676 - 419.85 9.325 9.461 9.467 1.599 0.334 -2.788 1.599 0.334 -0.931 -4.457 0.534 5.219 2.292 - 419.90 9.552 9.676 9.683 1.542 0.368 -2.561 1.542 0.368 -0.941 -3.948 0.567 4.535 2.049 - 419.95 9.705 9.872 9.875 1.807 0.259 -2.408 1.807 0.259 -0.624 -4.352 0.468 4.565 2.211 - 420.00 9.927 10.130 10.139 2.019 0.426 -2.186 2.019 0.426 -0.930 -4.413 0.859 4.518 2.296 - 420.05 9.927 10.113 10.141 1.928 0.758 -2.185 1.928 0.758 -1.657 -4.213 1.462 4.534 2.379 - 420.10 10.268 10.414 10.445 1.736 0.804 -1.844 1.736 0.804 -1.483 -3.201 1.395 3.530 1.897 - 420.15 10.178 10.283 10.300 1.465 0.594 -1.935 1.465 0.594 -1.149 -2.834 0.870 3.121 1.590 - 420.20 9.892 10.016 10.045 1.571 0.762 -2.221 1.571 0.762 -1.693 -3.488 1.197 3.990 2.029 - 420.25 10.189 10.314 10.329 1.596 0.557 -1.923 1.596 0.557 -1.072 -3.070 0.890 3.279 1.686 - 420.30 10.288 10.386 10.396 1.424 0.448 -1.824 1.424 0.448 -0.818 -2.597 0.638 2.778 1.398 - 420.35 10.456 10.510 10.548 1.062 0.890 -1.656 1.062 0.890 -1.474 -1.759 0.945 2.332 1.241 - 420.40 10.300 10.326 10.380 0.719 1.058 -1.812 0.719 1.058 -1.918 -1.303 0.761 2.461 1.220 - 420.45 9.851 9.880 9.933 0.748 1.030 -2.262 0.748 1.030 -2.330 -1.691 0.771 3.368 1.490 - 420.50 9.945 9.952 10.009 0.383 1.068 -2.168 0.383 1.068 -2.316 -0.830 0.409 2.994 1.247 - 420.55 9.917 9.930 9.986 0.506 1.061 -2.196 0.506 1.061 -2.331 -1.112 0.537 3.102 1.319 - 420.60 10.146 10.165 10.207 0.618 0.923 -1.967 0.618 0.923 -1.814 -1.216 0.571 2.551 1.129 - 420.65 9.847 9.859 9.907 0.488 0.974 -2.265 0.488 0.974 -2.207 -1.105 0.475 3.159 1.257 - 420.70 9.844 9.858 9.877 0.520 0.619 -2.269 0.520 0.619 -1.404 -1.181 0.322 2.900 0.931 - 420.75 10.184 10.190 10.210 0.341 0.642 -1.929 0.341 0.642 -1.238 -0.657 0.219 2.124 0.709 - 420.80 10.187 10.191 10.212 0.289 0.658 -1.926 0.289 0.658 -1.267 -0.557 0.190 2.113 0.699 - 420.85 10.207 10.213 10.247 0.332 0.837 -1.905 0.332 0.837 -1.594 -0.632 0.278 2.220 0.869 - 420.90 10.137 10.138 10.152 0.149 0.524 -1.976 0.149 0.524 -1.036 -0.294 0.078 2.100 0.540 - 420.95 10.207 10.208 10.227 0.079 0.635 -1.905 0.079 0.635 -1.210 -0.150 0.050 2.020 0.610 - 421.00 10.218 10.219 10.234 0.151 0.559 -1.895 0.151 0.559 -1.059 -0.286 0.084 1.963 0.550 - 421.05 10.288 10.289 10.300 0.117 0.489 -1.825 0.117 0.489 -0.892 -0.214 0.057 1.791 0.459 - 421.10 10.310 10.310 10.310 -0.060 0.040 -1.803 -0.060 0.040 -0.072 0.108 -0.002 1.627 0.065 - 421.15 10.242 10.246 10.248 -0.278 -0.171 -1.870 -0.278 -0.171 0.320 0.520 0.048 1.803 0.306 - 421.20 10.271 10.271 10.272 -0.080 -0.022 -1.842 -0.080 -0.022 0.041 0.147 0.002 1.699 0.076 - 421.25 10.375 10.378 10.382 0.238 0.293 -1.738 0.238 0.293 -0.510 -0.413 0.070 1.581 0.330 - 421.30 10.218 10.236 10.237 0.602 0.145 -1.894 0.602 0.145 -0.274 -1.140 0.087 1.986 0.588 - 421.35 10.386 10.421 10.429 0.850 -0.401 -1.726 0.850 -0.401 0.692 -1.467 -0.341 1.932 0.829 - 421.40 10.542 10.590 10.625 1.005 -0.859 -1.571 1.005 -0.859 1.348 -1.578 -0.862 2.107 1.124 - 421.45 10.315 10.377 10.411 1.133 -0.831 -1.797 1.133 -0.831 1.494 -2.037 -0.942 2.603 1.348 - 421.50 10.357 10.438 10.458 1.295 -0.656 -1.756 1.295 -0.656 1.152 -2.273 -0.849 2.594 1.343 - 421.55 10.399 10.511 10.518 1.528 -0.393 -1.713 1.528 -0.393 0.674 -2.617 -0.601 2.712 1.384 - 421.60 10.467 10.556 10.567 1.370 -0.477 -1.646 1.370 -0.477 0.785 -2.254 -0.653 2.406 1.237 - 421.65 10.578 10.606 10.617 0.770 -0.482 -1.535 0.770 -0.482 0.741 -1.182 -0.371 1.591 0.722 - 421.70 10.594 10.600 10.605 0.354 -0.309 -1.519 0.354 -0.309 0.469 -0.538 -0.109 1.264 0.361 - 421.75 10.415 10.415 10.428 0.049 -0.530 -1.698 0.049 -0.530 0.900 -0.084 -0.026 1.584 0.452 - 421.80 10.688 10.689 10.702 -0.150 -0.528 -1.425 -0.150 -0.528 0.753 0.213 0.079 1.166 0.393 - 421.85 10.841 10.847 10.883 -0.358 -0.889 -1.272 -0.358 -0.889 1.130 0.455 0.318 1.268 0.630 - 421.90 10.500 10.500 10.509 -0.041 -0.421 -1.613 -0.041 -0.421 0.679 0.066 0.017 1.390 0.341 - 421.95 10.417 10.420 10.426 -0.273 -0.336 -1.696 -0.273 -0.336 0.571 0.463 0.092 1.532 0.370 - 422.00 10.773 10.774 10.779 -0.174 -0.332 -1.340 -0.174 -0.332 0.445 0.233 0.058 0.968 0.253 - 422.05 10.612 10.612 10.612 -0.033 -0.067 -1.501 -0.033 -0.067 0.100 0.050 0.002 1.129 0.056 - 422.10 10.716 10.716 10.719 -0.090 -0.216 -1.397 -0.090 -0.216 0.301 0.125 0.019 1.003 0.163 - 422.15 10.782 10.792 10.792 0.460 -0.090 -1.331 0.460 -0.090 0.120 -0.612 -0.041 0.995 0.312 - 422.20 10.822 10.833 10.835 0.481 0.201 -1.291 0.481 0.201 -0.260 -0.621 0.097 0.969 0.340 - 422.25 10.649 10.662 10.676 0.520 0.552 -1.464 0.520 0.552 -0.808 -0.761 0.287 1.359 0.573 - 422.30 10.554 10.571 10.577 0.603 0.363 -1.559 0.603 0.363 -0.566 -0.940 0.219 1.463 0.559 - 422.35 10.137 10.158 10.172 0.647 0.545 -1.976 0.647 0.545 -1.076 -1.279 0.352 2.310 0.854 - 422.40 9.728 9.752 9.759 0.682 0.382 -2.385 0.682 0.382 -0.910 -1.627 0.260 3.150 0.941 - 422.45 10.063 10.109 10.117 0.961 0.400 -2.049 0.961 0.400 -0.819 -1.970 0.384 2.642 1.084 - 422.50 9.860 9.953 9.959 1.355 0.355 -2.252 1.355 0.355 -0.799 -3.052 0.480 3.517 1.596 - 422.55 9.860 9.897 9.906 0.854 0.415 -2.253 0.854 0.415 -0.935 -1.924 0.355 2.988 1.084 - 422.60 9.623 9.675 9.676 1.009 0.085 -2.490 1.009 0.085 -0.212 -2.512 0.086 3.613 1.261 - 422.65 9.619 9.669 9.670 0.977 0.129 -2.494 0.977 0.129 -0.323 -2.436 0.126 3.595 1.230 - 422.70 9.615 9.729 9.736 1.481 -0.364 -2.497 1.481 -0.364 0.910 -3.699 -0.540 4.282 1.924 - 422.75 9.316 9.449 9.455 1.584 -0.330 -2.797 1.584 -0.330 0.923 -4.429 -0.522 5.220 2.277 - 422.80 9.103 9.211 9.211 1.408 -0.020 -3.010 1.408 -0.020 0.059 -4.239 -0.028 5.522 2.120 - 422.85 9.089 9.163 9.163 1.156 -0.101 -3.023 1.156 -0.101 0.305 -3.497 -0.117 5.244 1.756 - 422.90 9.390 9.482 9.482 1.317 -0.002 -2.723 1.317 -0.002 0.006 -3.587 -0.003 4.575 1.794 - 422.95 9.563 9.648 9.650 1.278 -0.187 -2.550 1.278 -0.187 0.477 -3.258 -0.239 4.085 1.651 - 423.00 10.145 10.209 10.211 1.142 -0.203 -1.968 1.142 -0.203 0.400 -2.246 -0.232 2.608 1.147 - 423.05 10.289 10.347 10.348 1.097 -0.129 -1.824 1.097 -0.129 0.236 -2.000 -0.142 2.273 1.010 - 423.10 10.452 10.558 10.565 1.492 -0.394 -1.661 1.492 -0.394 0.654 -2.478 -0.587 2.570 1.315 - 423.15 10.173 10.287 10.287 1.525 0.105 -1.940 1.525 0.105 -0.204 -2.959 0.160 3.050 1.485 - 423.20 9.891 9.956 9.963 1.139 0.359 -2.222 1.139 0.359 -0.798 -2.530 0.409 3.181 1.342 - 423.25 9.746 9.790 9.822 0.924 0.793 -2.367 0.924 0.793 -1.876 -2.188 0.733 3.543 1.487 - 423.30 9.843 9.878 9.948 0.830 1.176 -2.270 0.830 1.176 -2.669 -1.885 0.977 3.612 1.705 - 423.35 9.465 9.536 9.652 1.160 1.491 -2.648 1.160 1.491 -3.949 -3.071 1.730 5.290 2.647 - 423.40 9.649 9.741 9.883 1.335 1.669 -2.464 1.335 1.669 -4.111 -3.288 2.227 5.317 2.858 - 423.45 10.075 10.149 10.261 1.227 1.512 -2.038 1.227 1.512 -3.081 -2.501 1.855 3.973 2.190 - 423.50 9.947 10.008 10.116 1.106 1.470 -2.166 1.106 1.470 -3.183 -2.395 1.626 4.037 2.152 - 423.55 9.851 9.909 10.019 1.075 1.479 -2.262 1.075 1.479 -3.346 -2.432 1.590 4.231 2.216 - 423.60 10.030 10.061 10.120 0.790 1.086 -2.082 0.790 1.086 -2.262 -1.645 0.858 3.070 1.463 - 423.65 10.112 10.155 10.210 0.942 1.053 -2.001 0.942 1.053 -2.108 -1.885 0.992 3.001 1.499 - 423.70 10.037 10.092 10.128 1.060 0.851 -2.076 1.060 0.851 -1.767 -2.201 0.902 3.080 1.482 - 423.75 10.065 10.159 10.203 1.379 0.945 -2.048 1.379 0.945 -1.936 -2.825 1.304 3.495 1.832 - 423.80 9.757 9.814 9.847 1.064 0.802 -2.356 1.064 0.802 -1.890 -2.507 0.853 3.663 1.627 - 423.85 10.024 10.123 10.147 1.410 0.701 -2.089 1.410 0.701 -1.463 -2.945 0.988 3.420 1.717 - 423.90 10.248 10.323 10.343 1.239 0.646 -1.865 1.239 0.646 -1.205 -2.310 0.800 2.715 1.363 - 423.95 10.419 10.494 10.501 1.255 0.378 -1.694 1.255 0.378 -0.640 -2.126 0.475 2.294 1.135 - 424.00 10.020 10.061 10.089 0.904 0.751 -2.093 0.904 0.751 -1.571 -1.891 0.679 2.880 1.275 - 424.05 10.084 10.122 10.140 0.876 0.616 -2.029 0.876 0.616 -1.249 -1.778 0.539 2.632 1.119 - 424.10 10.141 10.176 10.183 0.844 0.368 -1.972 0.844 0.368 -0.726 -1.665 0.311 2.368 0.921 - 424.15 10.175 10.218 10.233 0.931 0.565 -1.937 0.931 0.565 -1.094 -1.805 0.526 2.470 1.087 - 424.20 10.388 10.409 10.420 0.658 0.483 -1.725 0.658 0.483 -0.833 -1.135 0.318 1.821 0.722 - 424.25 10.415 10.448 10.463 0.829 0.567 -1.698 0.829 0.567 -0.963 -1.408 0.470 1.946 0.885 - 424.30 10.597 10.615 10.633 0.625 0.618 -1.516 0.625 0.618 -0.937 -0.948 0.386 1.536 0.694 - 424.35 10.562 10.566 10.575 0.271 0.449 -1.551 0.271 0.449 -0.697 -0.420 0.122 1.340 0.411 - 424.40 10.338 10.339 10.373 0.194 0.832 -1.775 0.194 0.832 -1.477 -0.345 0.162 1.941 0.763 - 424.45 10.919 10.920 10.938 0.180 0.627 -1.194 0.180 0.627 -0.748 -0.215 0.113 0.925 0.393 - 424.50 10.621 10.621 10.640 -0.055 0.631 -1.492 -0.055 0.631 -0.942 0.082 -0.035 1.314 0.473 - 424.55 10.503 10.505 10.534 -0.163 0.780 -1.609 -0.163 0.780 -1.256 0.262 -0.127 1.613 0.645 - 424.60 10.270 10.275 10.289 0.308 0.540 -1.842 0.308 0.540 -0.995 -0.567 0.166 1.890 0.579 - 424.65 10.159 10.160 10.164 0.143 0.282 -1.954 0.143 0.282 -0.551 -0.280 0.040 1.959 0.310 - 424.70 10.169 10.171 10.176 0.189 0.329 -1.944 0.189 0.329 -0.639 -0.368 0.062 1.961 0.370 - 424.75 10.299 10.306 10.318 0.370 0.506 -1.813 0.370 0.506 -0.917 -0.670 0.187 1.840 0.575 - 424.80 10.562 10.568 10.578 0.333 0.467 -1.551 0.333 0.467 -0.725 -0.516 0.156 1.367 0.452 - 424.85 10.404 10.405 10.437 0.180 0.815 -1.709 0.180 0.815 -1.393 -0.307 0.146 1.809 0.717 - 424.90 10.388 10.388 10.435 -0.054 0.993 -1.725 -0.054 0.993 -1.713 0.093 -0.054 1.983 0.858 - 424.95 10.585 10.586 10.647 -0.115 1.141 -1.527 -0.115 1.141 -1.744 0.176 -0.131 1.825 0.879 - 425.00 10.553 10.554 10.582 -0.125 0.775 -1.560 -0.125 0.775 -1.209 0.194 -0.097 1.524 0.614 - 425.05 10.596 10.600 10.634 -0.284 0.849 -1.516 -0.284 0.849 -1.287 0.431 -0.241 1.550 0.689 - 425.10 10.774 10.779 10.790 -0.332 0.483 -1.339 -0.332 0.483 -0.647 0.444 -0.160 1.068 0.400 - 425.15 10.809 10.810 10.832 0.184 0.687 -1.304 0.184 0.687 -0.896 -0.240 0.127 1.103 0.468 - 425.20 10.871 10.873 10.905 0.246 0.829 -1.242 0.246 0.829 -1.029 -0.305 0.204 1.145 0.546 - 425.25 11.327 11.330 11.375 0.263 1.009 -0.786 0.263 1.009 -0.793 -0.207 0.266 0.853 0.431 - 425.30 11.238 11.239 11.294 0.107 1.115 -0.875 0.107 1.115 -0.975 -0.094 0.119 1.010 0.493 - 425.35 11.105 11.105 11.141 -0.090 0.898 -1.008 -0.090 0.898 -0.905 0.091 -0.081 0.915 0.457 - 425.40 11.208 11.208 11.267 0.041 1.147 -0.905 0.041 1.147 -1.038 -0.037 0.047 1.068 0.520 - 425.45 11.397 11.400 11.439 -0.282 0.947 -0.716 -0.282 0.947 -0.678 0.202 -0.267 0.744 0.378 - 425.50 11.257 11.262 11.291 -0.329 0.813 -0.856 -0.329 0.813 -0.696 0.282 -0.268 0.751 0.398 - 425.55 10.978 10.983 11.019 -0.331 0.885 -1.135 -0.331 0.885 -1.005 0.376 -0.293 1.091 0.556 - 425.60 11.023 11.041 11.093 -0.641 1.067 -1.090 -0.641 1.067 -1.162 0.698 -0.683 1.368 0.759 - 425.65 10.920 10.954 11.004 -0.856 1.052 -1.192 -0.856 1.052 -1.254 1.021 -0.900 1.630 0.925 - 425.70 11.105 11.113 11.157 -0.438 0.986 -1.008 -0.438 0.986 -0.994 0.442 -0.432 1.091 0.585 - 425.75 11.332 11.353 11.382 -0.693 0.810 -0.781 -0.693 0.810 -0.633 0.541 -0.561 0.873 0.502 - 425.80 11.647 11.662 11.672 -0.598 0.476 -0.466 -0.598 0.476 -0.222 0.279 -0.285 0.401 0.228 - 425.85 11.907 11.922 11.965 -0.598 1.017 -0.206 -0.598 1.017 -0.210 0.123 -0.608 0.717 0.328 - 425.90 11.689 11.705 11.747 -0.625 0.991 -0.424 -0.625 0.991 -0.420 0.265 -0.620 0.777 0.397 - 425.95 11.651 11.684 11.694 -0.879 0.489 -0.462 -0.879 0.489 -0.226 0.406 -0.429 0.612 0.316 - 426.00 11.573 11.606 11.620 -0.876 0.561 -0.539 -0.876 0.561 -0.303 0.472 -0.491 0.686 0.373 - 426.05 11.314 11.331 11.331 -0.624 -0.043 -0.799 -0.624 -0.043 0.034 0.498 0.027 0.514 0.250 - 426.10 11.026 11.033 11.033 -0.378 0.001 -1.086 -0.378 0.001 -0.001 0.410 -0.000 0.661 0.205 - 426.15 11.153 11.154 11.156 -0.126 -0.205 -0.959 -0.126 -0.205 0.197 0.121 0.026 0.489 0.116 - 426.20 11.222 11.226 11.226 -0.273 0.045 -0.890 -0.273 0.045 -0.040 0.243 -0.012 0.435 0.123 - 426.25 11.024 11.033 11.033 -0.438 0.064 -1.089 -0.438 0.064 -0.070 0.477 -0.028 0.691 0.241 - 426.30 11.074 11.081 11.082 -0.396 0.157 -1.039 -0.396 0.157 -0.163 0.411 -0.062 0.630 0.223 - 426.35 11.298 11.304 11.305 -0.378 0.135 -0.815 -0.378 0.135 -0.110 0.308 -0.051 0.412 0.165 - 426.40 11.288 11.306 11.307 -0.653 -0.110 -0.825 -0.653 -0.110 0.091 0.539 0.072 0.560 0.275 - 426.45 11.290 11.319 11.319 -0.812 -0.003 -0.823 -0.812 -0.003 0.003 0.668 0.003 0.668 0.334 - 426.50 11.671 11.697 11.701 -0.777 -0.312 -0.442 -0.777 -0.312 0.138 0.343 0.242 0.448 0.221 - 426.55 11.742 11.749 11.749 -0.411 -0.023 -0.371 -0.411 -0.023 0.009 0.152 0.010 0.153 0.076 - 426.60 11.793 11.817 11.818 -0.756 -0.086 -0.320 -0.756 -0.086 0.028 0.242 0.065 0.341 0.126 - 426.65 11.572 11.584 11.584 -0.519 -0.013 -0.541 -0.519 -0.013 0.007 0.281 0.007 0.281 0.140 - 426.70 11.732 11.740 11.740 -0.425 0.020 -0.380 -0.425 0.020 -0.008 0.162 -0.009 0.163 0.081 - 426.75 11.719 11.729 11.731 -0.485 0.222 -0.394 -0.485 0.222 -0.088 0.191 -0.108 0.220 0.118 - 426.80 11.694 11.694 11.704 -0.103 0.495 -0.419 -0.103 0.495 -0.208 0.043 -0.051 0.216 0.109 - 426.85 11.612 11.622 11.622 -0.469 0.124 -0.501 -0.469 0.124 -0.062 0.235 -0.058 0.243 0.125 - 426.90 11.716 11.724 11.724 -0.447 0.015 -0.397 -0.447 0.015 -0.006 0.177 -0.007 0.179 0.089 - 426.95 11.794 11.804 11.807 -0.486 0.231 -0.318 -0.486 0.231 -0.074 0.155 -0.112 0.196 0.102 - 427.00 11.513 11.530 11.530 -0.630 -0.058 -0.600 -0.630 -0.058 0.035 0.378 0.036 0.380 0.191 - 427.05 11.230 11.275 11.275 -1.004 0.101 -0.883 -1.004 0.101 -0.090 0.886 -0.102 0.899 0.448 - 427.10 11.043 11.097 11.098 -1.100 0.167 -1.070 -1.100 0.167 -0.179 1.177 -0.184 1.192 0.602 - 427.15 10.853 10.906 10.906 -1.074 -0.092 -1.260 -1.074 -0.092 0.116 1.353 0.099 1.375 0.681 - 427.20 11.165 11.209 11.209 -0.992 0.019 -0.948 -0.992 0.019 -0.018 0.940 -0.019 0.941 0.470 - 427.25 11.259 11.293 11.294 -0.881 0.103 -0.854 -0.881 0.103 -0.088 0.752 -0.091 0.758 0.381 - 427.30 11.499 11.531 11.531 -0.853 0.047 -0.614 -0.853 0.047 -0.029 0.523 -0.040 0.553 0.263 - 427.35 11.831 11.879 11.885 -1.065 0.376 -0.282 -1.065 0.376 -0.106 0.300 -0.400 0.677 0.256 - 427.40 11.758 11.767 11.775 -0.467 0.419 -0.355 -0.467 0.419 -0.149 0.166 -0.196 0.260 0.148 - 427.45 11.460 11.465 11.487 -0.338 0.715 -0.653 -0.338 0.715 -0.467 0.221 -0.242 0.526 0.285 - 427.50 11.605 11.611 11.618 -0.360 0.403 -0.507 -0.360 0.403 -0.205 0.182 -0.145 0.275 0.155 - 427.55 11.497 11.497 11.500 0.005 0.264 -0.616 0.005 0.264 -0.163 -0.003 0.001 0.225 0.081 - 427.60 11.754 11.754 11.760 -0.097 0.378 -0.359 -0.097 0.378 -0.136 0.035 -0.036 0.141 0.072 - 427.65 11.819 11.819 11.832 0.046 0.547 -0.294 0.046 0.547 -0.161 -0.014 0.025 0.194 0.082 - 427.70 11.771 11.773 11.804 0.212 0.860 -0.342 0.212 0.860 -0.294 -0.073 0.182 0.450 0.177 - 427.75 11.734 11.744 11.771 0.472 0.804 -0.379 0.472 0.804 -0.304 -0.179 0.380 0.506 0.259 - 427.80 11.451 11.452 11.457 0.194 0.318 -0.662 0.194 0.318 -0.210 -0.128 0.062 0.288 0.127 - 427.85 11.486 11.488 11.490 0.235 -0.214 -0.627 0.235 -0.214 0.134 -0.147 -0.050 0.247 0.103 - 427.90 11.871 11.872 11.876 0.184 -0.293 -0.242 0.184 -0.293 0.071 -0.045 -0.054 0.089 0.050 - 427.95 11.862 11.864 11.864 0.203 -0.106 -0.251 0.203 -0.106 0.027 -0.051 -0.021 0.058 0.031 - 428.00 11.997 11.998 12.000 0.156 -0.215 -0.115 0.156 -0.215 0.025 -0.018 -0.034 0.042 0.023 - 428.05 11.928 11.928 11.928 -0.025 -0.049 -0.185 -0.025 -0.049 0.009 0.005 0.001 0.019 0.005 - 428.10 12.262 12.262 12.262 0.054 0.018 0.149 0.054 0.018 0.003 0.008 0.001 0.013 0.004 - 428.15 12.294 12.294 12.294 0.070 -0.077 0.181 0.070 -0.077 -0.014 0.013 -0.005 0.022 0.010 - 428.20 12.567 12.571 12.572 0.311 0.137 0.454 0.311 0.137 0.062 0.141 0.043 0.161 0.080 - 428.25 12.670 12.681 12.689 0.530 0.448 0.557 0.530 0.448 0.249 0.295 0.237 0.396 0.227 - 428.30 12.529 12.529 12.536 -0.047 0.404 0.416 -0.047 0.404 0.168 -0.020 -0.019 0.169 0.085 - 428.35 12.356 12.356 12.357 0.074 0.159 0.243 0.074 0.159 0.039 0.018 0.012 0.045 0.022 - 428.40 12.369 12.369 12.370 0.109 0.088 0.256 0.109 0.088 0.023 0.028 0.010 0.043 0.019 - 428.45 12.497 12.497 12.497 -0.025 -0.091 0.384 -0.025 -0.091 -0.035 -0.010 0.002 0.078 0.018 - 428.50 12.401 12.401 12.404 -0.004 -0.239 0.289 -0.004 -0.239 -0.069 -0.001 0.001 0.070 0.034 - 428.55 12.243 12.244 12.246 -0.074 -0.218 0.131 -0.074 -0.218 -0.028 -0.010 0.016 0.035 0.017 - 428.60 12.386 12.387 12.388 -0.090 -0.180 0.274 -0.090 -0.180 -0.049 -0.025 0.016 0.058 0.029 - 428.65 12.405 12.407 12.412 -0.202 -0.365 0.292 -0.202 -0.365 -0.107 -0.059 0.074 0.130 0.071 - 428.70 12.278 12.278 12.280 -0.061 -0.256 0.165 -0.061 -0.256 -0.042 -0.010 0.016 0.048 0.023 - 428.75 12.438 12.438 12.439 0.031 -0.124 0.325 0.031 -0.124 -0.040 0.010 -0.004 0.061 0.021 - 428.80 12.794 12.797 12.798 -0.266 -0.173 0.681 -0.266 -0.173 -0.118 -0.181 0.046 0.282 0.110 - 428.85 12.611 12.611 12.611 0.001 0.082 0.498 0.001 0.082 0.041 0.000 0.000 0.127 0.021 - 428.90 12.596 12.597 12.598 0.195 0.101 0.483 0.195 0.101 0.049 0.094 0.020 0.141 0.054 - 428.95 12.442 12.450 12.452 0.454 0.209 0.329 0.454 0.209 0.069 0.149 0.095 0.179 0.095 - 429.00 12.554 12.567 12.567 0.555 0.012 0.442 0.555 0.012 0.005 0.245 0.007 0.251 0.123 - 429.05 12.742 12.747 12.748 0.358 -0.161 0.629 0.358 -0.161 -0.101 0.225 -0.058 0.275 0.127 - 429.10 12.832 12.846 12.848 0.601 0.164 0.720 0.601 0.164 0.118 0.433 0.099 0.453 0.230 - 429.15 12.789 12.801 12.801 0.554 0.071 0.676 0.554 0.071 0.048 0.374 0.039 0.384 0.190 - 429.20 12.861 12.865 12.867 0.311 0.221 0.749 0.311 0.221 0.166 0.233 0.069 0.353 0.147 - 429.25 13.156 13.156 13.157 -0.130 0.094 1.043 -0.130 0.094 0.098 -0.135 -0.012 0.557 0.084 - 429.30 12.974 12.974 12.974 0.110 0.102 0.861 0.110 0.102 0.088 0.095 0.011 0.382 0.065 - 429.35 12.478 12.478 12.479 0.013 0.199 0.365 0.013 0.199 0.073 0.005 0.003 0.086 0.036 - 429.40 12.454 12.455 12.455 -0.166 0.031 0.341 -0.166 0.031 0.011 -0.057 -0.005 0.073 0.029 - 429.45 12.653 12.656 12.657 -0.281 -0.128 0.540 -0.281 -0.128 -0.069 -0.152 0.036 0.193 0.085 - 429.50 12.460 12.466 12.467 -0.398 -0.155 0.347 -0.398 -0.155 -0.054 -0.138 0.062 0.152 0.080 - 429.55 12.661 12.663 12.664 -0.230 -0.215 0.548 -0.230 -0.215 -0.118 -0.126 0.049 0.200 0.090 - 429.60 12.864 12.864 12.873 0.025 -0.485 0.751 0.025 -0.485 -0.364 0.019 -0.012 0.400 0.182 - 429.65 12.720 12.730 12.739 0.515 -0.468 0.607 0.515 -0.468 -0.284 0.313 -0.241 0.427 0.243 - 429.70 13.097 13.104 13.108 0.423 -0.306 0.984 0.423 -0.306 -0.301 0.417 -0.129 0.621 0.265 - 429.75 13.067 13.067 13.069 0.119 0.231 0.954 0.119 0.231 0.221 0.114 0.028 0.489 0.125 - 429.80 13.011 13.011 13.011 -0.071 -0.027 0.898 -0.071 -0.027 -0.025 -0.064 0.002 0.406 0.034 - 429.85 13.223 13.224 13.224 -0.093 0.145 1.110 -0.093 0.145 0.160 -0.103 -0.013 0.631 0.096 - 429.90 13.328 13.330 13.331 -0.250 -0.057 1.215 -0.250 -0.057 -0.069 -0.304 0.014 0.771 0.156 - 429.95 13.078 13.078 13.078 -0.055 0.055 0.965 -0.055 0.055 0.053 -0.053 -0.003 0.469 0.038 - 430.00 13.294 13.295 13.295 -0.163 0.049 1.181 -0.163 0.049 0.058 -0.192 -0.008 0.712 0.100 - 430.05 13.091 13.099 13.100 -0.477 0.054 0.978 -0.477 0.054 0.052 -0.467 -0.026 0.593 0.235 - 430.10 12.938 12.944 12.945 -0.415 0.103 0.825 -0.415 0.103 0.085 -0.342 -0.043 0.432 0.178 - 430.15 12.726 12.734 12.734 -0.450 0.020 0.613 -0.450 0.020 0.012 -0.276 -0.009 0.289 0.138 - 430.20 12.838 12.857 12.858 -0.698 0.148 0.725 -0.698 0.148 0.107 -0.506 -0.103 0.517 0.264 - 430.25 12.892 12.902 12.906 -0.516 0.301 0.779 -0.516 0.301 0.235 -0.402 -0.155 0.482 0.245 - 430.30 13.037 13.043 13.045 -0.400 0.221 0.924 -0.400 0.221 0.204 -0.369 -0.088 0.531 0.215 - 430.35 13.011 13.029 13.029 -0.697 -0.009 0.898 -0.697 -0.009 -0.008 -0.626 0.006 0.646 0.313 - 430.40 12.784 12.788 12.788 -0.288 -0.045 0.672 -0.288 -0.045 -0.030 -0.193 0.013 0.268 0.098 - 430.45 12.737 12.746 12.748 -0.496 -0.222 0.624 -0.496 -0.222 -0.138 -0.309 0.110 0.342 0.178 - 430.50 12.789 12.814 12.817 -0.800 -0.248 0.677 -0.800 -0.248 -0.168 -0.541 0.199 0.580 0.300 - 430.55 12.754 12.760 12.760 -0.403 0.003 0.641 -0.403 0.003 0.002 -0.258 -0.001 0.287 0.129 - 430.60 12.679 12.679 12.680 0.004 -0.134 0.566 0.004 -0.134 -0.076 0.002 -0.000 0.169 0.038 - 430.65 12.930 12.933 12.938 0.292 -0.343 0.817 0.292 -0.343 -0.280 0.239 -0.100 0.435 0.191 - 430.70 12.853 12.854 12.860 0.131 -0.391 0.740 0.131 -0.391 -0.289 0.097 -0.051 0.359 0.155 - 430.75 12.600 12.600 12.601 0.086 -0.122 0.487 0.086 -0.122 -0.059 0.042 -0.010 0.130 0.037 - 430.80 12.884 12.887 12.894 -0.259 -0.437 0.772 -0.259 -0.437 -0.337 -0.200 0.113 0.427 0.204 - 430.85 12.969 12.973 12.981 -0.343 -0.433 0.856 -0.343 -0.433 -0.370 -0.293 0.148 0.519 0.248 - 430.90 13.025 13.033 13.038 -0.476 -0.341 0.912 -0.476 -0.341 -0.311 -0.434 0.162 0.587 0.279 - 430.95 12.783 12.787 12.787 -0.329 -0.050 0.670 -0.329 -0.050 -0.033 -0.220 0.016 0.280 0.112 - 431.00 12.611 12.619 12.619 -0.458 0.095 0.498 -0.458 0.095 0.047 -0.228 -0.044 0.233 0.119 - 431.05 12.695 12.704 12.709 -0.497 0.351 0.582 -0.497 0.351 0.204 -0.289 -0.174 0.354 0.197 - 431.10 12.643 12.651 12.662 -0.462 0.521 0.530 -0.462 0.521 0.276 -0.245 -0.241 0.383 0.220 - 431.15 12.886 12.893 12.901 -0.431 0.465 0.773 -0.431 0.465 0.359 -0.333 -0.201 0.500 0.265 - 431.20 12.767 12.777 12.785 -0.487 0.463 0.654 -0.487 0.463 0.303 -0.319 -0.225 0.440 0.247 - 431.25 12.741 12.745 12.767 -0.299 0.751 0.629 -0.299 0.751 0.472 -0.188 -0.225 0.525 0.278 - 431.30 12.446 12.449 12.481 -0.273 0.885 0.334 -0.273 0.885 0.295 -0.091 -0.241 0.485 0.196 - 431.35 12.520 12.524 12.536 -0.331 0.541 0.407 -0.331 0.541 0.220 -0.134 -0.179 0.284 0.157 - 431.40 12.749 12.753 12.753 -0.345 0.036 0.636 -0.345 0.036 0.023 -0.220 -0.012 0.262 0.111 - 431.45 12.660 12.680 12.685 -0.711 -0.363 0.547 -0.711 -0.363 -0.199 -0.389 0.258 0.468 0.254 - 431.50 12.829 12.844 12.851 -0.628 -0.423 0.716 -0.628 -0.423 -0.303 -0.450 0.266 0.543 0.302 - 431.55 13.007 13.014 13.014 -0.432 -0.025 0.894 -0.432 -0.025 -0.022 -0.386 0.011 0.493 0.194 - 431.60 12.934 12.942 12.943 -0.457 0.199 0.821 -0.457 0.199 0.164 -0.375 -0.091 0.461 0.210 - 431.65 12.722 12.735 12.749 -0.580 0.597 0.609 -0.580 0.597 0.363 -0.353 -0.346 0.532 0.307 - 431.70 12.806 12.830 12.845 -0.787 0.622 0.693 -0.787 0.622 0.431 -0.545 -0.489 0.743 0.425 - 431.75 12.696 12.719 12.745 -0.769 0.811 0.583 -0.769 0.811 0.473 -0.448 -0.623 0.794 0.451 - 431.80 12.794 12.834 12.851 -1.005 0.658 0.682 -1.005 0.658 0.448 -0.685 -0.661 0.953 0.526 - 431.85 12.531 12.609 12.613 -1.398 0.346 0.418 -1.398 0.346 0.145 -0.585 -0.484 1.125 0.386 - 431.90 12.571 12.602 12.616 -0.880 0.606 0.458 -0.880 0.606 0.278 -0.403 -0.533 0.675 0.362 - 431.95 12.288 12.320 12.337 -0.895 0.645 0.175 -0.895 0.645 0.113 -0.157 -0.577 0.623 0.304 - 432.00 12.558 12.592 12.599 -0.929 0.431 0.445 -0.929 0.431 0.192 -0.413 -0.400 0.623 0.303 - 432.05 12.243 12.286 12.298 -1.026 0.532 0.131 -1.026 0.532 0.069 -0.134 -0.546 0.677 0.283 - 432.10 12.207 12.243 12.257 -0.942 0.593 0.094 -0.942 0.593 0.056 -0.088 -0.559 0.624 0.284 - 432.15 12.593 12.626 12.633 -0.912 0.415 0.480 -0.912 0.415 0.200 -0.438 -0.379 0.617 0.306 - 432.20 12.565 12.591 12.591 -0.795 0.136 0.453 -0.795 0.136 0.061 -0.360 -0.108 0.428 0.190 - 432.25 12.610 12.632 12.632 -0.756 0.012 0.497 -0.756 0.012 0.006 -0.375 -0.009 0.409 0.188 - 432.30 12.690 12.733 12.733 -1.040 0.100 0.577 -1.040 0.100 0.058 -0.600 -0.105 0.713 0.306 - 432.35 12.899 12.965 12.970 -1.311 -0.365 0.786 -1.311 -0.365 -0.287 -1.030 0.479 1.235 0.586 - 432.40 12.972 12.998 13.005 -0.811 -0.444 0.859 -0.811 -0.444 -0.382 -0.697 0.360 0.797 0.436 - 432.45 12.809 12.835 12.852 -0.819 -0.650 0.696 -0.819 -0.650 -0.453 -0.571 0.533 0.789 0.451 - 432.50 13.026 13.082 13.096 -1.203 -0.612 0.913 -1.203 -0.612 -0.559 -1.099 0.736 1.328 0.718 - 432.55 13.332 13.415 13.418 -1.492 -0.277 1.219 -1.492 -0.277 -0.337 -1.818 0.413 1.894 0.947 - 432.60 13.523 13.582 13.586 -1.264 -0.353 1.410 -1.264 -0.353 -0.497 -1.782 0.446 1.855 0.952 - 432.65 13.330 13.361 13.371 -0.920 -0.501 1.217 -0.920 -0.501 -0.610 -1.120 0.461 1.290 0.678 - 432.70 13.513 13.558 13.564 -1.105 -0.413 1.400 -1.105 -0.413 -0.579 -1.547 0.457 1.676 0.857 - 432.75 13.364 13.440 13.442 -1.423 -0.262 1.251 -1.423 -0.262 -0.328 -1.780 0.373 1.829 0.924 - 432.80 13.311 13.401 13.401 -1.548 -0.018 1.198 -1.548 -0.018 -0.021 -1.855 0.027 1.916 0.927 - 432.85 13.055 13.126 13.126 -1.360 0.005 0.942 -1.360 0.005 0.004 -1.281 -0.006 1.369 0.641 - 432.90 13.080 13.118 13.118 -0.993 -0.136 0.967 -0.993 -0.136 -0.132 -0.960 0.135 0.970 0.489 - 432.95 13.140 13.166 13.166 -0.836 0.034 1.027 -0.836 0.034 0.035 -0.859 -0.029 0.877 0.430 - 433.00 13.291 13.353 13.353 -1.281 0.108 1.179 -1.281 0.108 0.127 -1.510 -0.138 1.521 0.761 - 433.05 13.498 13.547 13.549 -1.156 -0.212 1.385 -1.156 -0.212 -0.294 -1.600 0.246 1.649 0.823 - 433.10 13.563 13.582 13.588 -0.726 -0.419 1.450 -0.726 -0.419 -0.608 -1.052 0.304 1.402 0.626 - 433.15 13.453 13.453 13.455 -0.033 -0.260 1.340 -0.033 -0.260 -0.349 -0.045 0.009 0.932 0.176 - 433.20 13.680 13.681 13.698 0.086 -0.693 1.567 0.086 -0.693 -1.087 0.135 -0.060 1.473 0.548 - 433.25 14.004 14.005 14.042 -0.125 -1.024 1.892 -0.125 -1.024 -1.937 -0.236 0.128 2.321 0.978 - 433.30 13.824 13.825 13.869 -0.112 -1.103 1.712 -0.112 -1.103 -1.888 -0.192 0.124 2.080 0.951 - 433.35 13.890 13.890 13.930 -0.085 -1.043 1.777 -0.085 -1.043 -1.854 -0.151 0.089 2.127 0.931 - 433.40 14.124 14.125 14.150 -0.122 -0.857 2.011 -0.122 -0.857 -1.723 -0.246 0.105 2.397 0.872 - 433.45 14.272 14.274 14.341 -0.240 -1.377 2.159 -0.240 -1.377 -2.973 -0.518 0.330 3.308 1.518 - 433.50 13.895 13.907 13.959 -0.571 -1.205 1.783 -0.571 -1.205 -2.148 -1.017 0.687 2.478 1.237 - 433.55 13.970 13.981 14.050 -0.546 -1.395 1.857 -0.546 -1.395 -2.590 -1.013 0.761 2.846 1.442 - 433.60 14.089 14.094 14.135 -0.382 -1.069 1.976 -0.382 -1.069 -2.113 -0.755 0.408 2.598 1.140 - 433.65 14.095 14.096 14.119 -0.225 -0.798 1.982 -0.225 -0.798 -1.581 -0.447 0.180 2.307 0.826 - 433.70 13.810 13.811 13.827 -0.193 -0.654 1.697 -0.193 -0.654 -1.111 -0.327 0.126 1.673 0.582 - 433.75 13.839 13.840 13.843 0.132 -0.315 1.726 0.132 -0.315 -0.544 0.227 -0.041 1.549 0.296 - 433.80 14.010 14.014 14.017 0.343 -0.287 1.897 0.343 -0.287 -0.544 0.651 -0.098 1.900 0.427 - 433.85 13.799 13.799 13.804 -0.049 -0.367 1.687 -0.049 -0.367 -0.619 -0.082 0.018 1.491 0.312 - 433.90 13.672 13.672 13.672 -0.001 -0.034 1.559 -0.001 -0.034 -0.053 -0.001 0.000 1.215 0.027 - 433.95 13.626 13.627 13.628 0.153 0.096 1.514 0.153 0.096 0.146 0.232 0.015 1.162 0.137 - 434.00 13.572 13.572 13.572 0.007 -0.025 1.460 0.007 -0.025 -0.036 0.010 -0.000 1.066 0.019 - 434.05 13.698 13.699 13.699 0.087 0.101 1.586 0.087 0.101 0.161 0.137 0.009 1.266 0.106 - 434.10 13.662 13.664 13.668 0.204 -0.323 1.549 0.204 -0.323 -0.500 0.316 -0.066 1.273 0.298 - 434.15 13.507 13.508 13.508 0.181 0.051 1.394 0.181 0.051 0.071 0.252 0.009 0.990 0.131 - 434.20 13.393 13.394 13.394 0.147 -0.067 1.280 0.147 -0.067 -0.086 0.189 -0.010 0.832 0.104 - 434.25 13.066 13.066 13.066 -0.096 -0.047 0.953 -0.096 -0.047 -0.045 -0.091 0.005 0.460 0.051 - 434.30 12.971 12.972 12.978 -0.175 -0.391 0.858 -0.175 -0.391 -0.335 -0.150 0.069 0.460 0.187 - 434.35 12.905 12.906 12.909 -0.222 -0.264 0.792 -0.222 -0.264 -0.209 -0.176 0.059 0.373 0.140 - 434.40 13.367 13.367 13.370 -0.034 -0.303 1.254 -0.034 -0.303 -0.381 -0.043 0.010 0.833 0.192 - 434.45 13.477 13.478 13.481 0.194 -0.267 1.364 0.194 -0.267 -0.364 0.265 -0.052 0.985 0.227 - 434.50 13.512 13.518 13.520 0.430 0.173 1.399 0.430 0.173 0.242 0.602 0.074 1.086 0.326 - 434.55 13.434 13.443 13.443 0.486 -0.005 1.322 0.486 -0.005 -0.007 0.642 -0.003 0.991 0.321 - 434.60 13.859 13.878 13.879 0.735 -0.195 1.746 0.735 -0.195 -0.341 1.283 -0.143 1.813 0.668 - 434.65 13.632 13.643 13.644 0.565 0.059 1.519 0.565 0.059 0.090 0.858 0.033 1.315 0.432 - 434.70 13.301 13.303 13.310 0.253 0.428 1.188 0.253 0.428 0.508 0.301 0.108 0.829 0.300 - 434.75 13.179 13.179 13.186 0.032 0.434 1.066 0.032 0.434 0.462 0.034 0.014 0.663 0.232 - 434.80 13.185 13.186 13.190 0.138 0.351 1.072 0.138 0.351 0.377 0.148 0.048 0.646 0.204 - 434.85 13.388 13.400 13.410 0.582 0.503 1.275 0.582 0.503 0.642 0.742 0.293 1.109 0.512 - 434.90 13.097 13.119 13.142 0.757 0.788 0.984 0.757 0.788 0.775 0.745 0.597 1.081 0.615 - 434.95 12.944 12.990 13.028 1.090 0.990 0.831 1.090 0.990 0.823 0.906 1.079 1.430 0.816 - 435.00 12.982 13.017 13.079 0.944 1.279 0.870 0.944 1.279 1.112 0.821 1.207 1.641 0.918 - 435.05 13.022 13.056 13.095 0.947 1.009 0.909 0.947 1.009 0.917 0.861 0.955 1.370 0.790 - 435.10 13.070 13.105 13.119 0.950 0.622 0.957 0.950 0.622 0.596 0.910 0.591 1.103 0.619 - 435.15 12.996 13.012 13.022 0.638 0.499 0.884 0.638 0.499 0.441 0.563 0.318 0.718 0.392 - 435.20 12.996 13.019 13.041 0.772 0.758 0.883 0.772 0.758 0.669 0.682 0.585 0.975 0.560 - 435.25 12.897 12.923 12.957 0.812 0.935 0.784 0.812 0.935 0.734 0.637 0.759 1.075 0.617 - 435.30 13.067 13.080 13.089 0.572 0.488 0.954 0.572 0.488 0.466 0.546 0.279 0.738 0.385 - 435.35 13.065 13.083 13.086 0.678 0.291 0.952 0.678 0.291 0.277 0.646 0.197 0.726 0.365 - 435.40 12.848 12.850 12.854 0.251 0.288 0.735 0.251 0.288 0.212 0.185 0.073 0.343 0.145 - 435.45 12.630 12.632 12.633 0.206 0.143 0.518 0.206 0.143 0.074 0.106 0.029 0.165 0.066 - 435.50 12.735 12.736 12.743 0.118 0.408 0.623 0.118 0.408 0.254 0.074 0.048 0.284 0.134 - 435.55 12.639 12.643 12.650 0.298 0.414 0.527 0.298 0.414 0.218 0.157 0.123 0.269 0.148 - 435.60 12.657 12.658 12.663 0.166 0.344 0.544 0.166 0.344 0.187 0.090 0.057 0.221 0.108 - 435.65 12.641 12.645 12.648 0.328 0.264 0.528 0.328 0.264 0.139 0.173 0.087 0.228 0.119 - 435.70 12.675 12.677 12.680 0.225 0.314 0.562 0.225 0.314 0.176 0.126 0.071 0.232 0.114 - 435.75 12.634 12.636 12.637 0.184 0.189 0.521 0.184 0.189 0.099 0.096 0.035 0.171 0.071 - 435.80 12.213 12.225 12.228 0.544 0.268 0.100 0.544 0.268 0.027 0.054 0.146 0.189 0.079 - 435.85 11.933 11.942 11.942 0.482 -0.024 -0.180 0.482 -0.024 0.004 -0.087 -0.012 0.133 0.044 - 435.90 11.944 11.958 11.958 0.577 0.008 -0.168 0.577 0.008 -0.001 -0.097 0.005 0.181 0.049 - 435.95 11.877 11.881 11.881 0.297 0.021 -0.236 0.297 0.021 -0.005 -0.070 0.006 0.072 0.035 - 436.00 12.108 12.124 12.124 0.608 -0.007 -0.004 0.608 -0.007 0.000 -0.003 -0.004 0.185 0.002 - 436.05 11.889 11.909 11.909 0.686 0.068 -0.224 0.686 0.068 -0.015 -0.153 0.047 0.263 0.081 - 436.10 11.818 11.869 11.871 1.096 -0.225 -0.294 1.096 -0.225 0.066 -0.323 -0.247 0.669 0.206 - 436.15 11.966 12.028 12.031 1.219 -0.289 -0.147 1.219 -0.289 0.042 -0.179 -0.352 0.796 0.199 - 436.20 11.856 11.915 11.920 1.178 -0.372 -0.257 1.178 -0.372 0.095 -0.302 -0.438 0.796 0.270 - 436.25 11.856 11.900 11.914 1.020 -0.581 -0.257 1.020 -0.581 0.149 -0.262 -0.593 0.722 0.333 - 436.30 11.584 11.620 11.620 0.912 0.109 -0.529 0.912 0.109 -0.058 -0.482 0.099 0.561 0.248 - 436.35 11.641 11.715 11.720 1.317 0.314 -0.472 1.317 0.314 -0.148 -0.621 0.413 1.028 0.380 - 436.40 11.623 11.681 11.694 1.160 0.551 -0.490 1.160 0.551 -0.270 -0.568 0.640 0.945 0.449 - 436.45 11.732 11.802 11.805 1.283 0.253 -0.381 1.283 0.253 -0.096 -0.488 0.325 0.928 0.297 - 436.50 11.575 11.621 11.625 1.035 0.301 -0.538 1.035 0.301 -0.162 -0.557 0.312 0.726 0.329 - 436.55 11.565 11.593 11.602 0.804 0.454 -0.548 0.804 0.454 -0.249 -0.440 0.365 0.576 0.312 - 436.60 11.675 11.719 11.738 1.016 0.678 -0.438 1.016 0.678 -0.297 -0.445 0.689 0.842 0.436 - 436.65 11.590 11.608 11.637 0.644 0.822 -0.523 0.644 0.822 -0.430 -0.337 0.529 0.681 0.380 - 436.70 11.686 11.735 11.739 1.074 0.314 -0.427 1.074 0.314 -0.134 -0.459 0.338 0.718 0.293 - 436.75 11.768 11.796 11.797 0.809 0.109 -0.345 0.809 0.109 -0.038 -0.279 0.088 0.393 0.147 - 436.80 11.875 11.923 11.923 1.068 -0.074 -0.238 1.068 -0.074 0.018 -0.254 -0.079 0.602 0.133 - 436.85 11.760 11.797 11.797 0.934 -0.077 -0.353 0.934 -0.077 0.027 -0.329 -0.072 0.501 0.169 - 436.90 11.878 11.926 11.933 1.071 -0.413 -0.235 1.071 -0.413 0.097 -0.252 -0.442 0.687 0.259 - 436.95 12.091 12.136 12.141 1.043 -0.349 -0.022 1.043 -0.349 0.008 -0.023 -0.363 0.604 0.182 - 437.00 12.082 12.105 12.120 0.746 -0.610 -0.031 0.746 -0.610 0.019 -0.023 -0.455 0.465 0.228 - 437.05 12.206 12.232 12.236 0.803 -0.298 0.093 0.803 -0.298 -0.028 0.075 -0.239 0.371 0.126 - 437.10 12.078 12.092 12.093 0.584 -0.170 -0.035 0.584 -0.170 0.006 -0.020 -0.100 0.186 0.051 - 437.15 12.041 12.054 12.055 0.576 -0.110 -0.072 0.576 -0.110 0.008 -0.042 -0.063 0.175 0.038 - 437.20 12.089 12.107 12.109 0.646 0.224 -0.023 0.646 0.224 -0.005 -0.015 0.145 0.234 0.073 - 437.25 12.222 12.243 12.244 0.717 0.175 0.109 0.717 0.175 0.019 0.078 0.125 0.278 0.074 - 437.30 12.192 12.197 12.198 0.357 0.087 0.079 0.357 0.087 0.007 0.028 0.031 0.071 0.021 - 437.35 12.165 12.182 12.186 0.633 -0.336 0.052 0.633 -0.336 -0.018 0.033 -0.213 0.258 0.108 - 437.40 12.205 12.232 12.238 0.808 -0.375 0.092 0.808 -0.375 -0.035 0.075 -0.303 0.401 0.157 - 437.45 12.189 12.207 12.220 0.676 -0.548 0.076 0.676 -0.548 -0.042 0.051 -0.370 0.381 0.188 - 437.50 12.265 12.290 12.306 0.783 -0.615 0.153 0.783 -0.615 -0.094 0.120 -0.482 0.508 0.253 - 437.55 12.241 12.255 12.267 0.587 -0.542 0.128 0.587 -0.542 -0.069 0.075 -0.318 0.327 0.167 - 437.60 12.365 12.369 12.382 0.330 -0.565 0.252 0.330 -0.565 -0.142 0.083 -0.186 0.245 0.124 - 437.65 12.162 12.165 12.171 0.262 -0.382 0.049 0.262 -0.382 -0.019 0.013 -0.100 0.108 0.051 - 437.70 12.135 12.155 12.156 0.703 -0.055 0.022 0.703 -0.055 -0.001 0.016 -0.039 0.249 0.021 - 437.75 12.207 12.225 12.228 0.654 -0.280 0.094 0.654 -0.280 -0.026 0.062 -0.183 0.257 0.097 - 437.80 12.186 12.210 12.220 0.778 -0.476 0.073 0.778 -0.476 -0.035 0.057 -0.371 0.419 0.188 - 437.85 12.276 12.296 12.298 0.708 -0.222 0.163 0.708 -0.222 -0.036 0.115 -0.157 0.288 0.099 - 437.90 12.339 12.362 12.364 0.753 -0.227 0.226 0.753 -0.227 -0.051 0.170 -0.171 0.335 0.123 - 437.95 12.400 12.424 12.424 0.774 -0.008 0.287 0.774 -0.008 -0.002 0.222 -0.006 0.341 0.111 - 438.00 12.366 12.367 12.368 0.179 -0.171 0.253 0.179 -0.171 -0.043 0.045 -0.031 0.063 0.035 - 438.05 12.301 12.302 12.302 0.164 0.007 0.188 0.164 0.007 0.001 0.031 0.001 0.031 0.015 - 438.10 12.499 12.504 12.506 0.337 0.218 0.386 0.337 0.218 0.084 0.130 0.073 0.155 0.086 - 438.15 12.942 12.950 12.950 0.476 -0.006 0.829 0.476 -0.006 -0.005 0.395 -0.003 0.457 0.197 - 438.20 12.664 12.678 12.684 0.580 -0.409 0.552 0.580 -0.409 -0.225 0.320 -0.237 0.404 0.229 - 438.25 12.348 12.352 12.365 0.331 -0.569 0.235 0.331 -0.569 -0.134 0.078 -0.188 0.244 0.122 - 438.30 12.266 12.274 12.275 0.435 -0.152 0.153 0.435 -0.152 -0.023 0.067 -0.066 0.118 0.048 - 438.35 12.385 12.389 12.398 0.328 -0.453 0.272 0.328 -0.453 -0.123 0.089 -0.148 0.193 0.106 - 438.40 12.346 12.352 12.353 0.388 -0.175 0.233 0.388 -0.175 -0.041 0.091 -0.068 0.118 0.060 - 438.45 12.757 12.767 12.767 0.496 -0.101 0.644 0.496 -0.101 -0.065 0.320 -0.050 0.336 0.165 - 438.50 12.693 12.704 12.706 0.527 -0.264 0.580 0.527 -0.264 -0.153 0.306 -0.139 0.342 0.185 - 438.55 12.808 12.813 12.816 0.367 -0.254 0.695 0.367 -0.254 -0.177 0.255 -0.093 0.341 0.162 - 438.60 13.024 13.031 13.035 0.429 -0.310 0.911 0.429 -0.310 -0.283 0.391 -0.133 0.556 0.250 - 438.65 13.013 13.020 13.020 0.428 -0.067 0.900 0.428 -0.067 -0.060 0.385 -0.029 0.499 0.196 - 438.70 12.960 12.965 12.965 0.354 0.081 0.847 0.354 0.081 0.068 0.300 0.029 0.425 0.154 - 438.75 12.909 12.913 12.913 0.288 -0.152 0.797 0.288 -0.152 -0.121 0.229 -0.044 0.370 0.132 - 438.80 13.108 13.117 13.120 0.472 -0.300 0.995 0.472 -0.300 -0.298 0.470 -0.142 0.652 0.287 - 438.85 13.132 13.146 13.147 0.620 0.106 1.019 0.620 0.106 0.108 0.632 0.066 0.717 0.322 - 438.90 13.204 13.218 13.221 0.605 -0.269 1.091 0.605 -0.269 -0.293 0.660 -0.163 0.815 0.370 - 438.95 13.370 13.385 13.388 0.628 -0.277 1.257 0.628 -0.277 -0.349 0.790 -0.174 1.026 0.440 - 439.00 13.449 13.454 13.462 0.344 -0.466 1.336 0.344 -0.466 -0.623 0.460 -0.160 1.061 0.395 - 439.05 13.552 13.556 13.559 0.321 -0.296 1.440 0.321 -0.296 -0.426 0.463 -0.095 1.132 0.318 - 439.10 13.353 13.353 13.357 0.109 -0.321 1.240 0.109 -0.321 -0.398 0.135 -0.035 0.826 0.211 - 439.15 13.106 13.107 13.108 0.125 -0.197 0.993 0.125 -0.197 -0.196 0.124 -0.025 0.521 0.116 - 439.20 13.127 13.130 13.130 0.298 -0.034 1.014 0.298 -0.034 -0.034 0.302 -0.010 0.559 0.152 - 439.25 13.227 13.239 13.239 0.561 -0.087 1.114 0.561 -0.087 -0.097 0.625 -0.049 0.782 0.317 - 439.30 13.498 13.506 13.510 0.456 -0.331 1.385 0.456 -0.331 -0.459 0.632 -0.151 1.119 0.398 - 439.35 13.600 13.600 13.624 -0.062 -0.798 1.487 -0.062 -0.798 -1.186 -0.092 0.050 1.426 0.595 - 439.40 13.468 13.468 13.485 0.128 -0.666 1.355 0.128 -0.666 -0.902 0.174 -0.085 1.148 0.461 - 439.45 13.431 13.431 13.450 -0.007 -0.723 1.318 -0.007 -0.723 -0.953 -0.009 0.005 1.130 0.476 - 439.50 13.336 13.336 13.358 -0.036 -0.769 1.223 -0.036 -0.769 -0.941 -0.044 0.028 1.044 0.471 - 439.55 13.041 13.045 13.073 0.303 -0.856 0.929 0.303 -0.856 -0.795 0.281 -0.259 0.843 0.441 - 439.60 13.081 13.088 13.107 0.429 -0.703 0.968 0.429 -0.703 -0.681 0.415 -0.301 0.808 0.426 - 439.65 12.847 12.849 12.882 0.216 -0.916 0.735 0.216 -0.916 -0.673 0.159 -0.198 0.712 0.359 - 439.70 12.992 12.997 13.054 0.340 -1.228 0.879 0.340 -1.228 -1.080 0.299 -0.417 1.198 0.598 - 439.75 12.653 12.653 12.738 0.102 -1.471 0.540 0.102 -1.471 -0.794 0.055 -0.150 1.233 0.405 - 439.80 12.669 12.670 12.755 -0.138 -1.473 0.556 -0.138 -1.473 -0.819 -0.077 0.203 1.250 0.424 - 439.85 12.696 12.701 12.758 -0.333 -1.212 0.583 -0.333 -1.212 -0.707 -0.194 0.403 0.960 0.418 - 439.90 12.723 12.731 12.792 -0.473 -1.246 0.610 -0.473 -1.246 -0.760 -0.289 0.590 1.074 0.502 - 439.95 12.978 12.983 13.013 -0.377 -0.884 0.865 -0.377 -0.884 -0.765 -0.326 0.334 0.836 0.448 - 440.00 13.049 13.049 13.081 -0.053 -0.920 0.936 -0.053 -0.920 -0.861 -0.049 0.048 0.863 0.432 - 440.05 13.095 13.096 13.131 -0.113 -0.966 0.982 -0.113 -0.966 -0.949 -0.111 0.109 0.956 0.481 - 440.10 13.113 13.116 13.150 -0.268 -0.950 1.000 -0.268 -0.950 -0.950 -0.268 0.255 0.987 0.510 - 440.15 13.189 13.194 13.223 -0.365 -0.863 1.076 -0.365 -0.863 -0.929 -0.393 0.315 1.018 0.528 - 440.20 12.996 12.998 13.043 -0.276 -1.075 0.883 -0.276 -1.075 -0.949 -0.243 0.296 1.005 0.512 - 440.25 13.258 13.261 13.286 -0.284 -0.803 1.146 -0.284 -0.803 -0.920 -0.325 0.228 1.019 0.501 - 440.30 13.020 13.023 13.041 -0.293 -0.690 0.907 -0.293 -0.690 -0.625 -0.266 0.202 0.692 0.354 - 440.35 12.843 12.849 12.885 -0.389 -0.962 0.730 -0.389 -0.962 -0.703 -0.284 0.374 0.805 0.423 - 440.40 12.670 12.677 12.688 -0.402 -0.538 0.558 -0.402 -0.538 -0.300 -0.224 0.216 0.381 0.216 - 440.45 12.781 12.793 12.794 -0.554 -0.165 0.668 -0.554 -0.165 -0.110 -0.370 0.091 0.390 0.198 - 440.50 13.047 13.054 13.058 -0.408 0.343 0.935 -0.408 0.343 0.321 -0.381 -0.140 0.579 0.259 - 440.55 12.772 12.776 12.777 -0.343 0.102 0.659 -0.343 0.102 0.067 -0.226 -0.035 0.281 0.119 - 440.60 13.013 13.017 13.017 -0.334 -0.120 0.900 -0.334 -0.120 -0.108 -0.300 0.040 0.468 0.161 - 440.65 12.924 12.927 12.928 -0.292 -0.097 0.811 -0.292 -0.097 -0.079 -0.237 0.028 0.376 0.126 - 440.70 13.081 13.082 13.082 -0.133 -0.138 0.968 -0.133 -0.138 -0.134 -0.129 0.018 0.487 0.093 - 440.75 13.519 13.519 13.531 -0.082 -0.563 1.406 -0.082 -0.563 -0.792 -0.115 0.046 1.151 0.401 - 440.80 13.233 13.238 13.245 -0.365 -0.450 1.120 -0.365 -0.450 -0.504 -0.409 0.165 0.795 0.335 - 440.85 13.314 13.325 13.343 -0.547 -0.677 1.201 -0.547 -0.677 -0.813 -0.658 0.371 1.101 0.555 - 440.90 13.256 13.256 13.269 0.062 -0.585 1.143 0.062 -0.585 -0.668 0.071 -0.036 0.826 0.337 - 440.95 12.968 12.970 12.976 -0.226 -0.398 0.855 -0.226 -0.398 -0.340 -0.193 0.090 0.470 0.201 - 441.00 12.811 12.822 12.825 -0.533 -0.303 0.698 -0.533 -0.303 -0.211 -0.372 0.161 0.431 0.229 - 441.05 12.708 12.727 12.730 -0.702 -0.242 0.595 -0.702 -0.242 -0.144 -0.418 0.169 0.452 0.237 - 441.10 12.066 12.104 12.107 -0.949 -0.279 -0.046 -0.949 -0.279 0.013 0.044 0.264 0.490 0.134 - 441.15 11.657 11.689 11.690 -0.869 0.110 -0.456 -0.869 0.110 -0.050 0.396 -0.096 0.488 0.205 - 441.20 11.896 11.909 11.940 -0.553 0.858 -0.217 -0.553 0.858 -0.186 0.120 -0.474 0.544 0.262 - 441.25 11.937 11.962 11.994 -0.779 0.881 -0.176 -0.779 0.881 -0.155 0.137 -0.687 0.707 0.359 - 441.30 11.882 11.893 11.946 -0.501 1.128 -0.231 -0.501 1.128 -0.260 0.116 -0.566 0.789 0.317 - 441.35 11.703 11.738 11.797 -0.897 1.178 -0.409 -0.897 1.178 -0.482 0.367 -1.056 1.180 0.609 - 441.40 12.055 12.071 12.098 -0.613 0.812 -0.057 -0.613 0.812 -0.047 0.035 -0.498 0.520 0.251 - 441.45 12.365 12.381 12.395 -0.629 0.592 0.252 -0.629 0.592 0.149 -0.159 -0.373 0.405 0.216 - 441.50 12.230 12.261 12.275 -0.883 0.568 0.117 -0.883 0.568 0.066 -0.103 -0.502 0.558 0.258 - 441.55 12.145 12.195 12.212 -1.096 0.656 0.032 -1.096 0.656 0.021 -0.036 -0.719 0.817 0.360 - 441.60 12.042 12.105 12.110 -1.231 0.334 -0.071 -1.231 0.334 -0.024 0.087 -0.411 0.815 0.210 - 441.65 12.281 12.341 12.352 -1.216 0.524 0.168 -1.216 0.524 0.088 -0.205 -0.637 0.891 0.337 - 441.70 12.294 12.360 12.361 -1.278 0.160 0.181 -1.278 0.160 0.029 -0.231 -0.205 0.846 0.155 - 441.75 12.428 12.479 12.479 -1.130 0.054 0.315 -1.130 0.054 0.017 -0.356 -0.061 0.690 0.181 - 441.80 12.328 12.390 12.390 -1.233 -0.011 0.215 -1.233 -0.011 -0.002 -0.266 0.013 0.784 0.133 - 441.85 12.071 12.162 12.169 -1.486 0.400 -0.041 -1.486 0.400 -0.017 0.062 -0.595 1.185 0.299 - 441.90 11.986 12.077 12.079 -1.479 0.198 -0.127 -1.479 0.198 -0.025 0.188 -0.292 1.122 0.174 - 441.95 12.120 12.163 12.175 -1.027 0.544 0.007 -1.027 0.544 0.004 -0.007 -0.558 0.675 0.279 - 442.00 11.699 11.771 11.774 -1.300 0.274 -0.414 -1.300 0.274 -0.114 0.538 -0.357 0.969 0.328 - 442.05 11.757 11.803 11.804 -1.044 0.147 -0.356 -1.044 0.147 -0.052 0.371 -0.154 0.619 0.203 - 442.10 11.965 12.049 12.050 -1.416 0.201 -0.148 -1.416 0.201 -0.030 0.209 -0.285 1.034 0.177 - 442.15 12.127 12.204 12.206 -1.364 0.234 0.014 -1.364 0.234 0.003 -0.020 -0.319 0.957 0.160 - 442.20 12.195 12.264 12.268 -1.301 0.325 0.082 -1.301 0.325 0.027 -0.107 -0.423 0.903 0.219 - 442.25 12.396 12.471 12.476 -1.366 0.366 0.283 -1.366 0.366 0.104 -0.387 -0.500 1.041 0.320 - 442.30 12.353 12.389 12.402 -0.939 0.580 0.240 -0.939 0.580 0.139 -0.226 -0.545 0.638 0.303 - 442.35 12.477 12.508 12.522 -0.877 0.607 0.364 -0.877 0.607 0.221 -0.319 -0.532 0.635 0.329 - 442.40 12.316 12.319 12.328 -0.292 0.479 0.203 -0.292 0.479 0.097 -0.059 -0.140 0.178 0.090 - 442.45 12.361 12.366 12.384 -0.362 0.676 0.248 -0.362 0.676 0.168 -0.090 -0.245 0.325 0.155 - 442.50 12.444 12.458 12.477 -0.574 0.693 0.332 -0.574 0.693 0.230 -0.190 -0.398 0.460 0.249 - 442.55 12.228 12.245 12.278 -0.655 0.892 0.115 -0.655 0.892 0.103 -0.075 -0.585 0.619 0.299 - 442.60 12.408 12.436 12.467 -0.834 0.880 0.295 -0.834 0.880 0.259 -0.246 -0.733 0.778 0.408 - 442.65 12.436 12.461 12.493 -0.790 0.892 0.323 -0.790 0.892 0.288 -0.255 -0.705 0.762 0.402 - 442.70 12.304 12.333 12.375 -0.845 1.022 0.191 -0.845 1.022 0.195 -0.161 -0.864 0.898 0.450 - 442.75 12.523 12.538 12.577 -0.613 0.991 0.410 -0.613 0.991 0.407 -0.252 -0.607 0.763 0.387 - 442.80 12.455 12.465 12.502 -0.505 0.951 0.342 -0.505 0.951 0.325 -0.173 -0.480 0.638 0.302 - 442.85 12.305 12.308 12.346 -0.243 0.970 0.193 -0.243 0.970 0.187 -0.047 -0.236 0.518 0.152 - 442.90 12.061 12.062 12.104 -0.133 1.002 -0.052 -0.133 1.002 -0.052 0.007 -0.133 0.512 0.071 - 442.95 12.136 12.142 12.188 -0.402 1.050 0.023 -0.402 1.050 0.024 -0.009 -0.422 0.633 0.212 - 443.00 12.100 12.105 12.136 -0.355 0.856 -0.013 -0.355 0.856 -0.011 0.004 -0.303 0.429 0.152 - 443.05 11.837 11.844 11.879 -0.406 0.909 -0.275 -0.406 0.909 -0.250 0.112 -0.369 0.534 0.230 - 443.10 12.098 12.107 12.155 -0.460 1.079 -0.014 -0.460 1.079 -0.015 0.007 -0.496 0.688 0.248 - 443.15 12.096 12.106 12.196 -0.478 1.484 -0.016 -0.478 1.484 -0.024 0.008 -0.709 1.215 0.355 - 443.20 12.211 12.214 12.297 -0.284 1.425 0.098 -0.284 1.425 0.140 -0.028 -0.404 1.061 0.214 - 443.25 12.371 12.378 12.418 -0.411 0.999 0.258 -0.411 0.999 0.258 -0.106 -0.410 0.617 0.248 - 443.30 12.217 12.223 12.239 -0.378 0.624 0.104 -0.378 0.624 0.065 -0.039 -0.236 0.272 0.124 - 443.35 12.083 12.083 12.103 -0.100 0.691 -0.030 -0.100 0.691 -0.021 0.003 -0.069 0.244 0.036 - 443.40 12.072 12.074 12.092 -0.200 0.659 -0.041 -0.200 0.659 -0.027 0.008 -0.132 0.238 0.067 - 443.45 11.896 11.896 11.918 0.049 0.733 -0.217 0.049 0.733 -0.159 -0.011 0.036 0.293 0.082 - 443.50 12.141 12.141 12.154 0.019 0.559 0.028 0.019 0.559 0.016 0.001 0.011 0.157 0.010 - 443.55 12.166 12.172 12.173 -0.391 0.153 0.053 -0.391 0.153 0.008 -0.021 -0.060 0.089 0.032 - 443.60 12.249 12.250 12.257 -0.157 0.409 0.136 -0.157 0.409 0.056 -0.021 -0.064 0.105 0.044 - 443.65 12.365 12.365 12.377 0.054 0.547 0.252 0.054 0.547 0.138 0.014 0.030 0.183 0.071 - 443.70 12.121 12.121 12.131 0.034 0.503 0.008 0.034 0.503 0.004 0.000 0.017 0.127 0.009 - 443.75 12.008 12.011 12.014 0.258 0.259 -0.104 0.258 0.259 -0.027 -0.027 0.067 0.072 0.038 - 443.80 12.010 12.011 12.012 0.169 0.171 -0.103 0.169 0.171 -0.018 -0.017 0.029 0.034 0.019 - 443.85 12.092 12.092 12.106 -0.031 0.568 -0.020 -0.031 0.568 -0.012 0.001 -0.018 0.162 0.011 - 443.90 11.845 11.845 11.866 0.063 0.699 -0.268 0.063 0.699 -0.187 -0.017 0.044 0.282 0.097 - 443.95 11.827 11.829 11.837 -0.205 0.429 -0.286 -0.205 0.429 -0.123 0.059 -0.088 0.154 0.081 - 444.00 11.590 11.592 11.602 -0.178 0.474 -0.522 -0.178 0.474 -0.247 0.093 -0.084 0.264 0.139 - 444.05 11.397 11.401 11.435 -0.306 0.879 -0.716 -0.306 0.879 -0.629 0.219 -0.269 0.689 0.359 - 444.10 11.302 11.312 11.335 -0.493 0.723 -0.811 -0.493 0.723 -0.586 0.400 -0.357 0.712 0.397 - 444.15 11.271 11.305 11.327 -0.879 0.707 -0.842 -0.879 0.707 -0.595 0.740 -0.622 0.991 0.568 - 444.20 11.391 11.432 11.445 -0.969 0.538 -0.722 -0.969 0.538 -0.388 0.700 -0.521 0.875 0.477 - 444.25 11.420 11.438 11.440 -0.636 0.238 -0.693 -0.636 0.238 -0.165 0.441 -0.152 0.471 0.247 - 444.30 11.341 11.346 11.351 -0.328 0.350 -0.772 -0.328 0.350 -0.270 0.253 -0.115 0.413 0.194 - 444.35 11.221 11.226 11.242 -0.349 0.598 -0.892 -0.349 0.598 -0.534 0.311 -0.209 0.638 0.326 - 444.40 11.362 11.371 11.375 -0.452 0.298 -0.751 -0.452 0.298 -0.224 0.339 -0.135 0.428 0.214 - 444.45 11.420 11.442 11.450 -0.713 0.428 -0.693 -0.713 0.428 -0.297 0.494 -0.305 0.586 0.326 - 444.50 11.317 11.331 11.352 -0.572 0.677 -0.796 -0.572 0.677 -0.539 0.455 -0.387 0.709 0.402 - 444.55 11.442 11.444 11.450 -0.204 0.378 -0.671 -0.204 0.378 -0.254 0.137 -0.077 0.317 0.149 - 444.60 11.511 11.512 11.517 -0.063 0.339 -0.601 -0.063 0.339 -0.204 0.038 -0.022 0.240 0.104 - 444.65 11.119 11.121 11.122 -0.232 0.115 -0.994 -0.232 0.115 -0.115 0.230 -0.027 0.527 0.129 - 444.70 10.955 10.956 10.956 0.146 -0.006 -1.158 0.146 -0.006 0.007 -0.169 -0.001 0.681 0.085 - 444.75 10.870 10.871 10.876 0.059 -0.335 -1.242 0.059 -0.335 0.417 -0.073 -0.020 0.830 0.212 - 444.80 11.041 11.041 11.049 0.028 -0.420 -1.072 0.028 -0.420 0.450 -0.030 -0.012 0.663 0.226 - 444.85 10.931 10.931 10.933 0.055 -0.205 -1.182 0.055 -0.205 0.242 -0.065 -0.011 0.721 0.125 - 444.90 11.202 11.203 11.208 -0.111 -0.349 -0.910 -0.111 -0.349 0.318 0.101 0.039 0.482 0.168 - 444.95 11.041 11.046 11.051 -0.317 -0.329 -1.071 -0.317 -0.329 0.352 0.340 0.104 0.678 0.250 - 445.00 10.859 10.864 10.873 -0.332 -0.439 -1.254 -0.332 -0.439 0.550 0.417 0.146 0.938 0.353 - 445.05 11.202 11.211 11.246 -0.462 -0.878 -0.911 -0.462 -0.878 0.800 0.421 0.406 0.907 0.495 - 445.10 11.287 11.291 11.336 -0.304 -1.005 -0.826 -0.304 -1.005 0.830 0.251 0.305 0.892 0.460 - 445.15 11.062 11.065 11.099 0.245 -0.871 -1.051 0.245 -0.871 0.915 -0.258 -0.214 0.962 0.487 - 445.20 11.062 11.063 11.097 0.087 -0.877 -1.051 0.087 -0.877 0.922 -0.092 -0.077 0.941 0.465 - 445.25 11.386 11.388 11.484 -0.221 -1.483 -0.727 -0.221 -1.483 1.078 0.161 0.328 1.388 0.569 - 445.30 11.220 11.222 11.358 -0.176 -1.752 -0.892 -0.176 -1.752 1.563 0.157 0.308 1.948 0.800 - 445.35 11.277 11.285 11.452 -0.418 -1.950 -0.836 -0.418 -1.950 1.631 0.350 0.816 2.339 0.928 - 445.40 11.238 11.242 11.356 -0.319 -1.603 -0.875 -0.319 -1.603 1.403 0.279 0.512 1.719 0.760 - 445.45 11.546 11.548 11.708 -0.216 -1.930 -0.567 -0.216 -1.930 1.095 0.123 0.417 2.047 0.589 - 445.50 11.575 11.577 11.752 -0.188 -2.023 -0.538 -0.188 -2.023 1.087 0.101 0.380 2.208 0.578 - 445.55 11.632 11.633 11.850 -0.204 -2.257 -0.481 -0.204 -2.257 1.086 0.098 0.460 2.682 0.592 - 445.60 11.745 11.747 11.912 -0.169 -1.976 -0.367 -0.169 -1.976 0.726 0.062 0.334 2.034 0.401 - 445.65 12.087 12.091 12.255 -0.322 -1.994 -0.026 -0.322 -1.994 0.051 0.008 0.642 2.040 0.322 - 445.70 11.881 11.894 12.060 -0.553 -1.998 -0.232 -0.553 -1.998 0.464 0.128 1.105 2.176 0.603 - 445.75 11.950 11.963 12.148 -0.544 -2.113 -0.162 -0.544 -2.113 0.343 0.088 1.149 2.394 0.601 - 445.80 12.076 12.096 12.265 -0.701 -2.028 -0.037 -0.701 -2.028 0.075 0.026 1.421 2.303 0.712 - 445.85 12.096 12.106 12.230 -0.488 -1.738 -0.017 -0.488 -1.738 0.029 0.008 0.848 1.630 0.424 - 445.90 11.879 11.884 11.978 -0.347 -1.496 -0.234 -0.347 -1.496 0.349 0.081 0.519 1.206 0.316 - 445.95 12.160 12.174 12.239 -0.598 -1.252 0.047 -0.598 -1.252 -0.059 -0.028 0.749 0.964 0.376 - 446.00 11.723 11.728 11.782 -0.356 -1.121 -0.390 -0.356 -1.121 0.437 0.139 0.399 0.768 0.304 - 446.05 11.618 11.624 11.702 0.365 -1.347 -0.495 0.365 -1.347 0.666 -0.181 -0.492 1.096 0.424 - 446.10 11.408 11.408 11.508 -0.018 -1.514 -0.705 -0.018 -1.514 1.067 0.013 0.028 1.395 0.534 - 446.15 11.260 11.261 11.392 0.193 -1.719 -0.853 0.193 -1.719 1.466 -0.165 -0.332 1.860 0.756 - 446.20 11.189 11.200 11.423 0.510 -2.243 -0.924 0.510 -2.243 2.073 -0.472 -1.145 3.073 1.207 - 446.25 11.260 11.260 11.448 0.066 -2.065 -0.853 0.066 -2.065 1.761 -0.056 -0.137 2.498 0.884 - 446.30 11.361 11.363 11.464 -0.183 -1.524 -0.751 -0.183 -1.524 1.145 0.138 0.279 1.460 0.593 - 446.35 11.336 11.337 11.408 0.095 -1.273 -0.776 0.095 -1.273 0.988 -0.073 -0.120 1.116 0.499 - 446.40 11.122 11.122 11.182 -0.129 -1.152 -0.991 -0.129 -1.152 1.142 0.128 0.149 1.163 0.579 - 446.45 11.037 11.038 11.114 -0.075 -1.298 -1.075 -0.075 -1.298 1.395 0.081 0.098 1.423 0.701 - 446.50 11.003 11.003 11.035 -0.091 -0.833 -1.110 -0.091 -0.833 0.924 0.101 0.076 0.967 0.466 - 446.55 11.050 11.055 11.098 0.315 -0.974 -1.062 0.315 -0.974 1.035 -0.335 -0.307 1.088 0.565 - 446.60 11.322 11.326 11.395 0.308 -1.251 -0.791 0.308 -1.251 0.989 -0.244 -0.386 1.143 0.545 - 446.65 11.455 11.458 11.535 0.256 -1.332 -0.658 0.256 -1.332 0.876 -0.168 -0.341 1.136 0.478 - 446.70 11.440 11.444 11.546 0.298 -1.528 -0.673 0.298 -1.528 1.028 -0.200 -0.455 1.438 0.571 - 446.75 11.463 11.464 11.569 0.166 -1.554 -0.650 0.166 -1.554 1.010 -0.108 -0.258 1.433 0.524 - 446.80 11.526 11.526 11.604 -0.026 -1.341 -0.587 -0.026 -1.341 0.787 0.015 0.034 1.072 0.394 - 446.85 11.492 11.493 11.616 0.097 -1.687 -0.620 0.097 -1.687 1.047 -0.060 -0.163 1.620 0.530 - 446.90 11.759 11.763 11.864 0.308 -1.542 -0.353 0.308 -1.542 0.545 -0.109 -0.475 1.299 0.365 - 446.95 11.791 11.800 11.879 0.445 -1.371 -0.321 0.445 -1.371 0.441 -0.143 -0.610 1.091 0.383 - 447.00 11.521 11.531 11.622 0.475 -1.448 -0.591 0.475 -1.448 0.856 -0.281 -0.687 1.335 0.567 - 447.05 11.240 11.243 11.287 0.265 -0.987 -0.873 0.265 -0.987 0.861 -0.232 -0.262 0.903 0.465 - 447.10 11.252 11.268 11.313 0.598 -1.006 -0.861 0.598 -1.006 0.866 -0.515 -0.601 1.055 0.587 - 447.15 11.317 11.329 11.394 0.517 -1.214 -0.796 0.517 -1.214 0.966 -0.411 -0.627 1.187 0.611 - 447.20 11.374 11.378 11.416 0.320 -0.926 -0.739 0.320 -0.926 0.684 -0.236 -0.296 0.753 0.391 - 447.25 11.366 11.373 11.391 0.392 -0.642 -0.747 0.392 -0.642 0.479 -0.292 -0.252 0.562 0.308 - 447.30 11.212 11.231 11.243 0.651 -0.508 -0.900 0.651 -0.508 0.457 -0.586 -0.331 0.746 0.407 - 447.35 10.784 10.790 10.827 0.371 -0.889 -1.329 0.371 -0.889 1.182 -0.493 -0.330 1.348 0.661 - 447.40 10.971 10.981 10.999 0.472 -0.618 -1.142 0.472 -0.618 0.706 -0.538 -0.292 0.954 0.467 - 447.45 11.036 11.077 11.093 0.951 -0.581 -1.076 0.951 -0.581 0.625 -1.024 -0.553 1.200 0.660 - 447.50 10.952 10.984 10.989 0.830 -0.339 -1.161 0.830 -0.339 0.394 -0.963 -0.281 1.075 0.539 - 447.55 10.734 10.768 10.770 0.851 -0.202 -1.378 0.851 -0.202 0.278 -1.173 -0.172 1.332 0.609 - 447.60 10.858 10.880 10.881 0.703 0.144 -1.255 0.703 0.144 -0.181 -0.883 0.101 1.045 0.453 - 447.65 11.102 11.117 11.118 0.581 0.095 -1.011 0.581 0.095 -0.096 -0.587 0.055 0.684 0.299 - 447.70 11.331 11.340 11.341 0.459 0.129 -0.782 0.459 0.129 -0.101 -0.359 0.059 0.420 0.189 - 447.75 11.411 11.414 11.415 0.228 0.150 -0.702 0.228 0.150 -0.105 -0.160 0.034 0.283 0.097 - 447.80 11.441 11.448 11.448 0.397 0.061 -0.672 0.397 0.061 -0.041 -0.267 0.024 0.306 0.135 - 447.85 11.591 11.612 11.612 0.695 0.079 -0.522 0.695 0.079 -0.041 -0.363 0.055 0.381 0.185 - 447.90 11.486 11.519 11.519 0.866 -0.104 -0.626 0.866 -0.104 0.065 -0.542 -0.090 0.577 0.277 - 447.95 11.471 11.495 11.499 0.749 -0.296 -0.642 0.749 -0.296 0.190 -0.481 -0.221 0.530 0.281 - 448.00 11.478 11.507 11.513 0.816 -0.380 -0.635 0.816 -0.380 0.241 -0.518 -0.310 0.607 0.325 - 448.05 11.287 11.302 11.302 0.594 -0.007 -0.826 0.594 -0.007 0.006 -0.490 -0.004 0.517 0.245 - 448.10 11.278 11.298 11.300 0.687 0.160 -0.835 0.687 0.160 -0.134 -0.574 0.110 0.598 0.300 - 448.15 11.264 11.302 11.303 0.932 0.139 -0.849 0.932 0.139 -0.118 -0.792 0.130 0.805 0.405 - 448.20 11.518 11.542 11.543 0.734 0.145 -0.594 0.734 0.145 -0.086 -0.436 0.107 0.456 0.229 - 448.25 11.804 11.827 11.833 0.741 0.391 -0.309 0.741 0.391 -0.121 -0.229 0.289 0.398 0.194 - 448.30 11.819 11.843 11.852 0.763 0.459 -0.294 0.763 0.459 -0.135 -0.224 0.350 0.439 0.219 - 448.35 11.614 11.663 11.670 1.070 0.390 -0.499 1.070 0.390 -0.194 -0.534 0.417 0.773 0.352 - 448.40 11.372 11.398 11.411 0.761 0.539 -0.740 0.761 0.539 -0.399 -0.564 0.410 0.709 0.402 - 448.45 11.507 11.521 11.539 0.574 0.647 -0.606 0.574 0.647 -0.392 -0.348 0.371 0.558 0.321 - 448.50 11.775 11.801 11.809 0.779 0.447 -0.338 0.779 0.447 -0.151 -0.263 0.348 0.461 0.231 - 448.55 11.785 11.806 11.809 0.697 0.275 -0.328 0.697 0.275 -0.090 -0.229 0.192 0.335 0.156 - 448.60 11.834 11.852 11.853 0.650 0.177 -0.279 0.650 0.177 -0.049 -0.181 0.115 0.266 0.110 - 448.65 11.950 11.996 11.997 1.060 0.116 -0.163 1.060 0.116 -0.019 -0.173 0.123 0.582 0.107 - 448.70 11.974 11.987 11.989 0.559 0.227 -0.139 0.559 0.227 -0.032 -0.078 0.127 0.192 0.076 - 448.75 11.811 11.812 11.815 0.178 0.237 -0.302 0.178 0.237 -0.072 -0.054 0.042 0.090 0.050 - 448.80 11.924 11.930 11.933 -0.384 0.270 -0.189 -0.384 0.270 -0.051 0.073 -0.104 0.128 0.068 - 448.85 11.776 11.783 11.786 -0.391 0.249 -0.336 -0.391 0.249 -0.084 0.131 -0.097 0.164 0.092 - 448.90 11.712 11.712 11.713 -0.085 0.124 -0.401 -0.085 0.124 -0.050 0.034 -0.011 0.091 0.031 - 448.95 11.707 11.711 11.713 0.308 -0.225 -0.406 0.308 -0.225 0.091 -0.125 -0.069 0.155 0.085 - 449.00 11.573 11.580 11.591 0.421 -0.489 -0.540 0.421 -0.489 0.264 -0.228 -0.206 0.354 0.202 - 449.05 11.573 11.573 11.580 -0.080 -0.403 -0.540 -0.080 -0.403 0.217 0.043 0.032 0.230 0.112 - 449.10 11.415 11.418 11.432 0.284 -0.553 -0.698 0.284 -0.553 0.386 -0.198 -0.157 0.437 0.231 - 449.15 11.498 11.498 11.517 -0.035 -0.656 -0.615 -0.035 -0.656 0.403 0.022 0.023 0.405 0.202 - 449.20 11.811 11.811 11.858 0.039 -1.056 -0.302 0.039 -1.056 0.319 -0.012 -0.041 0.604 0.161 - 449.25 12.177 12.178 12.199 0.161 -0.717 0.064 0.161 -0.717 -0.046 0.010 -0.115 0.272 0.062 - 449.30 12.012 12.012 12.020 0.020 -0.439 -0.101 0.020 -0.439 0.044 -0.002 -0.009 0.102 0.023 - 449.35 12.102 12.104 12.138 -0.216 -0.911 -0.011 -0.216 -0.911 0.010 0.002 0.197 0.438 0.099 - 449.40 12.080 12.089 12.114 -0.476 -0.780 -0.033 -0.476 -0.780 0.026 0.016 0.371 0.418 0.186 - 449.45 12.248 12.255 12.289 -0.406 -0.909 0.135 -0.406 -0.909 -0.123 -0.055 0.369 0.505 0.197 - 449.50 11.989 11.993 12.052 -0.304 -1.185 -0.123 -0.304 -1.185 0.146 0.037 0.360 0.756 0.195 - 449.55 11.847 11.855 11.912 -0.438 -1.170 -0.266 -0.438 -1.170 0.312 0.117 0.513 0.817 0.306 - 449.60 11.567 11.577 11.637 -0.480 -1.175 -0.546 -0.480 -1.175 0.641 0.262 0.564 0.954 0.446 - 449.65 11.678 11.704 11.751 -0.771 -1.051 -0.435 -0.771 -1.051 0.457 0.335 0.810 0.944 0.494 - 449.70 11.708 11.727 11.743 -0.661 -0.613 -0.404 -0.661 -0.613 0.248 0.267 0.405 0.488 0.273 - 449.75 11.930 11.945 11.963 -0.593 -0.651 -0.183 -0.593 -0.651 0.119 0.108 0.387 0.405 0.209 - 449.80 11.596 11.623 11.635 -0.788 -0.526 -0.516 -0.788 -0.526 0.272 0.407 0.415 0.582 0.321 - 449.85 11.821 11.857 11.869 -0.920 -0.547 -0.292 -0.920 -0.547 0.160 0.268 0.503 0.615 0.296 - 449.90 11.726 11.767 11.768 -0.978 -0.200 -0.387 -0.978 -0.200 0.077 0.378 0.196 0.573 0.216 - 449.95 11.870 11.890 11.891 -0.679 -0.182 -0.243 -0.679 -0.182 0.044 0.165 0.124 0.277 0.105 - 450.00 11.709 11.728 11.728 -0.678 0.025 -0.404 -0.678 0.025 -0.010 0.274 -0.017 0.312 0.137 - 450.05 11.697 11.749 11.758 -1.100 0.467 -0.416 -1.100 0.467 -0.194 0.457 -0.514 0.801 0.358 - 450.10 11.629 11.681 11.683 -1.110 0.189 -0.484 -1.110 0.189 -0.091 0.537 -0.210 0.751 0.292 - 450.15 11.807 11.845 11.850 -0.949 0.363 -0.306 -0.949 0.363 -0.111 0.290 -0.344 0.562 0.232 - 450.20 11.623 11.676 11.678 -1.113 0.219 -0.490 -1.113 0.219 -0.107 0.545 -0.244 0.763 0.303 - 450.25 10.964 11.015 11.017 -1.054 0.205 -1.149 -1.054 0.205 -0.235 1.211 -0.216 1.236 0.626 - 450.30 10.961 11.018 11.022 -1.118 0.313 -1.152 -1.118 0.313 -0.360 1.288 -0.350 1.338 0.691 - 450.35 11.273 11.332 11.334 -1.159 0.231 -0.840 -1.159 0.231 -0.194 0.974 -0.268 1.051 0.514 - 450.40 11.661 11.704 11.707 -0.993 0.280 -0.451 -0.993 0.280 -0.126 0.448 -0.278 0.634 0.271 - 450.45 11.719 11.755 11.758 -0.928 0.229 -0.394 -0.928 0.229 -0.090 0.366 -0.213 0.535 0.216 - 450.50 11.439 11.515 11.518 -1.318 0.263 -0.674 -1.318 0.263 -0.177 0.888 -0.347 1.131 0.485 - 450.55 11.634 11.705 11.706 -1.282 -0.165 -0.478 -1.282 -0.165 0.079 0.613 0.212 0.950 0.327 - 450.60 11.683 11.760 11.760 -1.343 -0.041 -0.430 -1.343 -0.041 0.018 0.577 0.055 0.995 0.290 - 450.65 11.584 11.644 11.644 -1.179 -0.071 -0.529 -1.179 -0.071 0.038 0.624 0.084 0.837 0.315 - 450.70 11.173 11.248 11.248 -1.296 -0.059 -0.940 -1.296 -0.059 0.055 1.218 0.076 1.283 0.611 - 450.75 11.163 11.267 11.270 -1.527 -0.269 -0.950 -1.527 -0.269 0.255 1.451 0.411 1.654 0.765 - 450.80 11.163 11.268 11.273 -1.537 -0.340 -0.950 -1.537 -0.340 0.323 1.460 0.523 1.690 0.792 - 450.85 10.914 11.008 11.011 -1.436 -0.244 -1.199 -1.436 -0.244 0.293 1.722 0.351 1.780 0.891 - 450.90 11.034 11.104 11.105 -1.242 -0.190 -1.079 -1.242 -0.190 0.205 1.340 0.236 1.372 0.688 - 450.95 11.123 11.230 11.237 -1.551 -0.383 -0.990 -1.551 -0.383 0.379 1.536 0.594 1.767 0.845 - 451.00 11.167 11.259 11.264 -1.439 -0.336 -0.946 -1.439 -0.336 0.317 1.361 0.483 1.538 0.739 - 451.05 11.146 11.210 11.210 -1.193 0.002 -0.966 -1.193 0.002 -0.002 1.153 -0.002 1.179 0.577 - 451.10 11.156 11.252 11.253 -1.468 0.165 -0.957 -1.468 0.165 -0.158 1.405 -0.242 1.549 0.717 - 451.15 11.311 11.419 11.422 -1.567 0.219 -0.801 -1.567 0.219 -0.176 1.256 -0.344 1.574 0.657 - 451.20 11.717 11.840 11.844 -1.702 -0.322 -0.396 -1.702 -0.322 0.128 0.674 0.548 1.579 0.439 - 451.25 11.872 11.992 12.002 -1.690 -0.488 -0.241 -1.690 -0.488 0.117 0.407 0.825 1.576 0.464 - 451.30 11.637 11.783 11.783 -1.847 -0.072 -0.476 -1.847 -0.072 0.034 0.878 0.133 1.822 0.445 - 451.35 11.381 11.515 11.516 -1.752 0.086 -0.731 -1.752 0.086 -0.063 1.282 -0.151 1.806 0.646 - 451.40 11.287 11.374 11.378 -1.407 0.275 -0.826 -1.407 0.275 -0.227 1.161 -0.387 1.368 0.623 - 451.45 11.536 11.693 11.701 -1.908 0.442 -0.576 -1.908 0.442 -0.255 1.100 -0.843 2.084 0.704 - 451.50 11.277 11.414 11.427 -1.764 0.537 -0.836 -1.764 0.537 -0.449 1.474 -0.948 2.049 0.904 - 451.55 11.375 11.476 11.476 -1.516 0.024 -0.738 -1.516 0.024 -0.017 1.118 -0.036 1.422 0.560 - 451.60 11.452 11.564 11.564 -1.605 0.090 -0.661 -1.605 0.090 -0.060 1.061 -0.145 1.510 0.536 - 451.65 11.562 11.659 11.659 -1.505 0.091 -0.551 -1.505 0.091 -0.050 0.830 -0.136 1.289 0.421 - 451.70 11.657 11.744 11.745 -1.422 0.143 -0.455 -1.422 0.143 -0.065 0.647 -0.204 1.124 0.341 - 451.75 11.752 11.858 11.858 -1.583 0.012 -0.361 -1.583 0.012 -0.004 0.571 -0.019 1.318 0.286 - 451.80 11.803 11.963 11.964 -1.950 0.188 -0.310 -1.950 0.188 -0.058 0.604 -0.366 1.967 0.354 - 451.85 11.828 11.961 11.961 -1.779 0.010 -0.285 -1.779 0.010 -0.003 0.506 -0.018 1.623 0.253 - 451.90 11.821 11.949 11.950 -1.746 0.131 -0.292 -1.746 0.131 -0.038 0.510 -0.229 1.576 0.280 - 451.95 11.867 11.973 11.974 -1.594 0.159 -0.246 -1.594 0.159 -0.039 0.392 -0.254 1.313 0.235 - 452.00 11.567 11.711 11.711 -1.830 0.073 -0.546 -1.830 0.073 -0.040 0.998 -0.134 1.826 0.504 - 452.05 11.560 11.746 11.747 -2.085 0.114 -0.553 -2.085 0.114 -0.063 1.154 -0.237 2.334 0.590 - 452.10 11.634 11.851 11.851 -2.259 0.002 -0.479 -2.259 0.002 -0.001 1.082 -0.005 2.666 0.541 - 452.15 11.476 11.660 11.660 -2.061 -0.117 -0.637 -2.061 -0.117 0.075 1.312 0.242 2.333 0.668 - 452.20 11.454 11.632 11.632 -2.027 -0.061 -0.659 -2.027 -0.061 0.040 1.336 0.124 2.274 0.671 - 452.25 11.553 11.768 11.770 -2.242 -0.226 -0.560 -2.242 -0.226 0.127 1.256 0.508 2.695 0.680 - 452.30 11.637 11.826 11.841 -2.107 -0.590 -0.476 -2.107 -0.590 0.281 1.003 1.242 2.506 0.810 - 452.35 11.814 11.998 12.025 -2.094 -0.808 -0.299 -2.094 -0.808 0.242 0.627 1.691 2.564 0.910 - 452.40 11.914 12.107 12.117 -2.154 -0.490 -0.199 -2.154 -0.490 0.097 0.428 1.055 2.459 0.571 - 452.45 12.078 12.369 12.393 -2.665 -0.785 -0.035 -2.665 -0.785 0.027 0.093 2.092 3.860 1.047 - 452.50 12.375 12.646 12.655 -2.606 -0.452 0.262 -2.606 -0.452 -0.119 -0.683 1.179 3.532 0.684 - 452.55 12.301 12.527 12.534 -2.369 -0.402 0.188 -2.369 -0.402 -0.076 -0.446 0.953 2.906 0.527 - 452.60 12.439 12.710 12.728 -2.612 -0.669 0.326 -2.612 -0.669 -0.218 -0.852 1.749 3.689 0.979 - 452.65 12.158 12.508 12.541 -2.938 -0.903 0.045 -2.938 -0.903 -0.041 -0.134 2.654 4.725 1.329 - 452.70 12.340 12.628 12.653 -2.683 -0.800 0.227 -2.683 -0.800 -0.181 -0.608 2.146 3.944 1.119 - 452.75 12.254 12.547 12.560 -2.697 -0.563 0.141 -2.697 -0.563 -0.079 -0.381 1.518 3.806 0.784 - 452.80 12.172 12.544 12.550 -3.034 -0.387 0.059 -3.034 -0.387 -0.023 -0.178 1.175 4.680 0.594 - 452.85 12.167 12.524 12.526 -2.967 -0.272 0.054 -2.967 -0.272 -0.015 -0.161 0.808 4.440 0.412 - 452.90 12.117 12.466 12.473 -2.928 -0.413 0.004 -2.928 -0.413 -0.002 -0.013 1.210 4.373 0.605 - 452.95 12.356 12.705 12.712 -2.958 -0.418 0.243 -2.958 -0.418 -0.102 -0.720 1.237 4.492 0.717 - 453.00 12.419 12.803 12.806 -3.112 -0.265 0.306 -3.112 -0.265 -0.081 -0.953 0.824 4.924 0.631 - 453.05 12.636 13.020 13.030 -3.138 -0.496 0.524 -3.138 -0.496 -0.260 -1.643 1.558 5.182 1.139 - 453.10 12.488 12.936 12.938 -3.374 -0.226 0.375 -3.374 -0.226 -0.085 -1.266 0.762 5.787 0.740 - 453.15 12.557 12.932 12.932 -3.093 -0.078 0.444 -3.093 -0.078 -0.035 -1.372 0.241 4.883 0.697 - 453.20 12.485 12.810 12.810 -2.863 0.138 0.373 -2.863 0.138 0.052 -1.067 -0.396 4.178 0.570 - 453.25 12.228 12.519 12.530 -2.683 0.517 0.116 -2.683 0.517 0.060 -0.310 -1.387 3.741 0.711 - 453.30 12.121 12.407 12.428 -2.649 0.722 0.008 -2.649 0.722 0.006 -0.021 -1.913 3.769 0.957 - 453.35 12.198 12.507 12.529 -2.764 0.741 0.085 -2.764 0.741 0.063 -0.235 -2.048 4.098 1.031 - 453.40 12.503 12.859 12.862 -3.006 0.249 0.390 -3.006 0.249 0.097 -1.174 -0.747 4.626 0.697 - 453.45 12.402 12.763 12.764 -3.014 0.121 0.289 -3.014 0.121 0.035 -0.872 -0.365 4.591 0.473 - 453.50 12.032 12.329 12.329 -2.692 0.019 -0.081 -2.692 0.019 -0.002 0.218 -0.050 3.626 0.112 - 453.55 11.985 12.269 12.269 -2.620 -0.131 -0.127 -2.620 -0.131 0.017 0.334 0.342 3.449 0.239 - 453.60 11.927 12.253 12.254 -2.809 0.170 -0.186 -2.809 0.170 -0.032 0.523 -0.478 3.977 0.354 - 453.65 12.090 12.321 12.328 -2.371 0.430 -0.022 -2.371 0.430 -0.010 0.053 -1.019 2.903 0.510 - 453.70 12.251 12.521 12.534 -2.589 0.561 0.138 -2.589 0.561 0.077 -0.357 -1.454 3.520 0.749 - 453.75 12.258 12.461 12.468 -2.242 0.415 0.145 -2.242 0.415 0.060 -0.326 -0.931 2.609 0.494 - 453.80 12.460 12.734 12.754 -2.626 0.708 0.347 -2.626 0.708 0.246 -0.912 -1.860 3.759 1.043 - 453.85 12.314 12.569 12.605 -2.524 0.940 0.201 -2.524 0.940 0.189 -0.507 -2.374 3.647 1.217 - 453.90 12.140 12.322 12.382 -2.113 1.214 0.027 -2.113 1.214 0.033 -0.057 -2.566 2.971 1.283 - 453.95 12.348 12.491 12.571 -1.886 1.415 0.235 -1.886 1.415 0.332 -0.443 -2.670 2.808 1.363 - 454.00 12.307 12.539 12.577 -2.404 0.975 0.194 -2.404 0.975 0.189 -0.466 -2.343 3.383 1.198 - 454.05 12.266 12.462 12.494 -2.203 0.898 0.153 -2.203 0.898 0.137 -0.336 -1.979 2.842 1.006 - 454.10 12.139 12.358 12.393 -2.316 0.932 0.026 -2.316 0.932 0.025 -0.061 -2.159 3.117 1.080 - 454.15 11.916 12.153 12.228 -2.389 1.351 -0.197 -2.389 1.351 -0.266 0.470 -3.227 3.786 1.636 - 454.20 11.937 12.156 12.227 -2.296 1.310 -0.175 -2.296 1.310 -0.230 0.403 -3.008 3.509 1.522 - 454.25 12.092 12.312 12.367 -2.316 1.171 -0.021 -2.316 1.171 -0.024 0.048 -2.713 3.368 1.357 - 454.30 12.122 12.354 12.413 -2.380 1.213 0.010 -2.380 1.213 0.012 -0.023 -2.886 3.567 1.443 - 454.35 12.218 12.444 12.507 -2.359 1.262 0.105 -2.359 1.262 0.133 -0.248 -2.976 3.583 1.495 - 454.40 12.275 12.508 12.561 -2.402 1.157 0.162 -2.402 1.157 0.188 -0.390 -2.777 3.566 1.406 - 454.45 12.221 12.450 12.542 -2.377 1.514 0.108 -2.377 1.514 0.164 -0.258 -3.598 3.976 1.805 - 454.50 12.457 12.639 12.715 -2.140 1.385 0.344 -2.140 1.385 0.476 -0.736 -2.964 3.308 1.545 - 454.55 12.674 12.832 12.895 -2.009 1.274 0.561 -2.009 1.274 0.715 -1.127 -2.560 2.987 1.443 - 454.60 12.857 12.987 13.034 -1.832 1.112 0.744 -1.832 1.112 0.827 -1.363 -2.037 2.573 1.293 - 454.65 12.543 12.721 12.758 -2.122 0.960 0.430 -2.122 0.960 0.413 -0.913 -2.036 2.805 1.135 - 454.70 12.219 12.485 12.528 -2.565 1.033 0.106 -2.565 1.033 0.110 -0.272 -2.650 3.828 1.333 - 454.75 12.275 12.536 12.593 -2.544 1.201 0.162 -2.544 1.201 0.195 -0.413 -3.056 3.970 1.545 - 454.80 12.341 12.570 12.640 -2.389 1.327 0.228 -2.389 1.327 0.303 -0.546 -3.170 3.760 1.616 - 454.85 12.274 12.467 12.540 -2.184 1.352 0.161 -2.184 1.352 0.218 -0.352 -2.954 3.313 1.492 - 454.90 12.574 12.758 12.810 -2.159 1.155 0.461 -2.159 1.155 0.532 -0.995 -2.493 3.103 1.368 - 454.95 12.411 12.591 12.635 -2.120 1.055 0.298 -2.120 1.055 0.315 -0.632 -2.237 2.849 1.173 - 455.00 12.587 12.899 12.914 -2.820 0.630 0.474 -2.820 0.630 0.299 -1.337 -1.775 4.286 1.121 - 455.05 12.724 13.059 13.078 -2.942 0.693 0.611 -2.942 0.693 0.423 -1.797 -2.040 4.756 1.376 - 455.10 12.362 12.677 12.715 -2.807 0.979 0.249 -2.807 0.979 0.244 -0.700 -2.749 4.450 1.424 - 455.15 12.214 12.631 12.683 -3.219 1.155 0.101 -3.219 1.155 0.117 -0.325 -3.717 5.853 1.867 - 455.20 12.228 12.658 12.714 -3.270 1.195 0.115 -3.270 1.195 0.138 -0.376 -3.909 6.069 1.965 - 455.25 12.278 12.608 12.657 -2.867 1.105 0.165 -2.867 1.105 0.182 -0.473 -3.167 4.734 1.604 - 455.30 12.355 12.614 12.666 -2.542 1.146 0.242 -2.542 1.146 0.278 -0.616 -2.913 3.916 1.495 - 455.35 12.204 12.497 12.532 -2.690 0.942 0.091 -2.690 0.942 0.086 -0.245 -2.535 4.067 1.274 - 455.40 12.268 12.562 12.610 -2.698 1.109 0.156 -2.698 1.109 0.172 -0.420 -2.991 4.266 1.513 - 455.45 12.319 12.561 12.604 -2.453 1.041 0.206 -2.453 1.041 0.215 -0.506 -2.554 3.573 1.306 - 455.50 12.172 12.420 12.497 -2.467 1.385 0.060 -2.467 1.385 0.083 -0.147 -3.416 4.003 1.710 - 455.55 11.983 12.217 12.332 -2.378 1.682 -0.130 -2.378 1.682 -0.218 0.309 -3.998 4.249 2.008 - 455.60 12.133 12.391 12.483 -2.517 1.509 0.020 -2.517 1.509 0.031 -0.051 -3.797 4.305 1.899 - 455.65 11.992 12.205 12.289 -2.271 1.433 -0.121 -2.271 1.433 -0.173 0.274 -3.254 3.613 1.635 - 455.70 11.693 11.877 11.921 -2.079 1.028 -0.419 -2.079 1.028 -0.431 0.872 -2.137 2.778 1.174 - 455.75 11.888 12.083 12.110 -2.165 0.802 -0.225 -2.165 0.802 -0.180 0.487 -1.736 2.691 0.906 - 455.80 12.004 12.143 12.201 -1.835 1.186 -0.109 -1.835 1.186 -0.129 0.200 -2.177 2.394 1.095 - 455.85 11.749 11.947 11.981 -2.162 0.905 -0.364 -2.162 0.905 -0.329 0.786 -1.956 2.813 1.067 - 455.90 11.694 11.886 11.906 -2.129 0.687 -0.419 -2.129 0.687 -0.288 0.892 -1.462 2.591 0.868 - 455.95 11.659 11.901 11.911 -2.387 0.480 -0.454 -2.387 0.480 -0.218 1.083 -1.146 3.068 0.796 - 456.00 11.209 11.500 11.524 -2.567 0.753 -0.903 -2.567 0.753 -0.680 2.318 -1.933 3.985 1.547 - 456.05 11.261 11.530 11.557 -2.475 0.782 -0.851 -2.475 0.782 -0.666 2.107 -1.936 3.731 1.469 - 456.10 11.367 11.672 11.685 -2.653 0.542 -0.746 -2.653 0.542 -0.404 1.979 -1.438 3.943 1.240 - 456.15 11.656 11.962 11.962 -2.690 -0.052 -0.457 -2.690 -0.052 0.024 1.229 0.141 3.724 0.619 - 456.20 11.742 12.028 12.030 -2.605 -0.234 -0.371 -2.605 -0.234 0.087 0.966 0.610 3.489 0.573 - 456.25 11.699 11.958 11.959 -2.477 -0.172 -0.414 -2.477 -0.172 0.071 1.026 0.427 3.169 0.557 - 456.30 11.493 11.708 11.708 -2.233 -0.081 -0.620 -2.233 -0.081 0.050 1.385 0.180 2.689 0.699 - 456.35 11.404 11.593 11.593 -2.082 0.032 -0.709 -2.082 0.032 -0.023 1.475 -0.067 2.419 0.739 - 456.40 11.132 11.281 11.281 -1.829 -0.050 -0.981 -1.829 -0.050 0.049 1.794 0.091 2.154 0.898 - 456.45 11.424 11.569 11.575 -1.826 -0.366 -0.689 -1.826 -0.366 0.252 1.258 0.668 1.971 0.723 - 456.50 11.435 11.592 11.593 -1.901 -0.109 -0.677 -1.901 -0.109 0.074 1.288 0.207 2.043 0.653 - 456.55 11.257 11.423 11.424 -1.944 0.105 -0.856 -1.944 0.105 -0.090 1.665 -0.203 2.262 0.840 - 456.60 11.197 11.386 11.386 -2.065 0.068 -0.916 -2.065 0.068 -0.063 1.892 -0.141 2.554 0.949 - 456.65 11.091 11.244 11.255 -1.850 0.486 -1.022 -1.850 0.486 -0.497 1.890 -0.899 2.351 1.076 - 456.70 11.414 11.555 11.559 -1.803 0.292 -0.699 -1.803 0.292 -0.204 1.260 -0.527 1.911 0.690 - 456.75 11.322 11.482 11.484 -1.913 0.198 -0.791 -1.913 0.198 -0.157 1.513 -0.380 2.162 0.784 - 456.80 11.338 11.444 11.444 -1.555 0.017 -0.775 -1.555 0.017 -0.013 1.205 -0.026 1.510 0.603 - 456.85 11.432 11.496 11.496 -1.209 0.071 -0.681 -1.209 0.071 -0.049 0.823 -0.086 0.965 0.414 - 456.90 11.343 11.427 11.428 -1.383 0.081 -0.770 -1.383 0.081 -0.063 1.065 -0.113 1.256 0.536 - 456.95 11.162 11.250 11.254 -1.399 0.307 -0.951 -1.399 0.307 -0.291 1.330 -0.429 1.477 0.714 - 457.00 10.822 10.921 10.921 -1.467 0.140 -1.291 -1.467 0.140 -0.181 1.895 -0.205 1.920 0.957 - 457.05 11.058 11.123 11.123 -1.197 -0.046 -1.055 -1.197 -0.046 0.049 1.262 0.056 1.273 0.632 - 457.10 11.071 11.111 11.111 -0.939 0.037 -1.042 -0.939 0.037 -0.038 0.978 -0.034 0.984 0.490 - 457.15 11.186 11.214 11.214 -0.796 -0.019 -0.927 -0.796 -0.019 0.018 0.738 0.015 0.747 0.369 - 457.20 11.247 11.260 11.262 -0.531 0.202 -0.866 -0.531 0.202 -0.175 0.460 -0.107 0.536 0.252 - 457.25 11.430 11.456 11.466 -0.765 0.491 -0.683 -0.765 0.491 -0.335 0.522 -0.375 0.646 0.363 - 457.30 11.166 11.191 11.199 -0.738 0.423 -0.946 -0.738 0.423 -0.400 0.698 -0.312 0.809 0.431 - 457.35 10.993 11.012 11.020 -0.644 0.425 -1.119 -0.644 0.425 -0.476 0.721 -0.274 0.925 0.453 - 457.40 10.604 10.645 10.662 -0.939 0.602 -1.509 -0.939 0.602 -0.909 1.417 -0.565 1.760 0.888 - 457.45 10.469 10.505 10.524 -0.876 0.633 -1.644 -0.876 0.633 -1.041 1.440 -0.555 1.936 0.931 - 457.50 10.504 10.537 10.586 -0.829 1.020 -1.609 -0.829 1.020 -1.641 1.334 -0.846 2.158 1.139 - 457.55 10.515 10.561 10.625 -0.987 1.169 -1.598 -0.987 1.169 -1.869 1.577 -1.153 2.447 1.352 - 457.60 10.562 10.582 10.633 -0.651 1.033 -1.551 -0.651 1.033 -1.602 1.009 -0.672 1.948 1.005 - 457.65 10.354 10.375 10.426 -0.649 1.036 -1.758 -0.649 1.036 -1.822 1.142 -0.673 2.293 1.126 - 457.70 10.537 10.550 10.585 -0.523 0.862 -1.576 -0.523 0.862 -1.359 0.825 -0.451 1.751 0.826 - 457.75 10.650 10.663 10.681 -0.522 0.611 -1.463 -0.522 0.611 -0.893 0.764 -0.319 1.392 0.609 - 457.80 10.776 10.804 10.867 -0.779 1.163 -1.337 -0.779 1.163 -1.554 1.041 -0.906 1.873 1.039 - 457.85 10.938 10.946 11.007 -0.421 1.154 -1.175 -0.421 1.154 -1.356 0.495 -0.486 1.445 0.761 - 457.90 10.805 10.812 10.852 -0.398 0.934 -1.308 -0.398 0.934 -1.222 0.520 -0.372 1.371 0.690 - 457.95 10.821 10.842 10.846 -0.671 0.322 -1.292 -0.671 0.322 -0.416 0.867 -0.216 1.111 0.493 - 458.00 10.976 11.000 11.002 -0.733 0.226 -1.137 -0.733 0.226 -0.257 0.833 -0.165 0.940 0.444 - 458.05 10.989 11.016 11.019 -0.764 0.252 -1.123 -0.764 0.252 -0.283 0.859 -0.193 0.955 0.462 - 458.10 10.873 10.889 10.890 -0.595 -0.117 -1.240 -0.595 -0.117 0.145 0.737 0.069 0.952 0.377 - 458.15 11.104 11.120 11.122 -0.585 -0.235 -1.008 -0.585 -0.235 0.237 0.590 0.137 0.707 0.325 - 458.20 11.156 11.162 11.162 -0.351 0.008 -0.957 -0.351 0.008 -0.007 0.336 -0.003 0.519 0.168 - 458.25 11.074 11.093 11.095 -0.649 0.217 -1.039 -0.649 0.217 -0.225 0.674 -0.141 0.774 0.362 - 458.30 11.030 11.045 11.045 -0.568 0.065 -1.082 -0.568 0.065 -0.071 0.615 -0.037 0.749 0.310 - 458.35 11.289 11.311 11.312 -0.719 -0.035 -0.824 -0.719 -0.035 0.029 0.592 0.025 0.598 0.297 - 458.40 11.466 11.479 11.484 -0.529 -0.339 -0.646 -0.529 -0.339 0.219 0.342 0.179 0.406 0.222 - 458.45 11.385 11.398 11.402 -0.526 -0.333 -0.727 -0.526 -0.333 0.242 0.383 0.175 0.458 0.243 - 458.50 11.343 11.355 11.361 -0.531 -0.353 -0.770 -0.531 -0.353 0.272 0.409 0.187 0.500 0.263 - 458.55 11.407 11.413 11.416 -0.387 -0.242 -0.706 -0.387 -0.242 0.171 0.273 0.094 0.354 0.168 - 458.60 11.255 11.276 11.284 -0.695 -0.429 -0.858 -0.695 -0.429 0.368 0.597 0.298 0.702 0.381 - 458.65 11.366 11.386 11.409 -0.661 -0.734 -0.747 -0.661 -0.734 0.548 0.494 0.485 0.767 0.442 - 458.70 11.500 11.512 11.522 -0.531 -0.492 -0.613 -0.531 -0.492 0.302 0.326 0.261 0.450 0.258 - 458.75 11.185 11.207 11.236 -0.717 -0.804 -0.928 -0.717 -0.804 0.746 0.665 0.576 1.011 0.577 - 458.80 11.167 11.206 11.219 -0.935 -0.546 -0.946 -0.935 -0.546 0.516 0.884 0.510 1.033 0.572 - 458.85 11.510 11.560 11.577 -1.072 -0.629 -0.603 -1.072 -0.629 0.379 0.646 0.675 0.955 0.504 - 458.90 11.604 11.623 11.642 -0.666 -0.669 -0.509 -0.666 -0.669 0.341 0.339 0.446 0.576 0.328 - 458.95 11.681 11.684 11.708 -0.290 -0.751 -0.432 -0.290 -0.751 0.324 0.126 0.218 0.417 0.205 - 459.00 11.633 11.634 11.648 -0.145 -0.575 -0.480 -0.145 -0.575 0.276 0.069 0.083 0.291 0.148 - 459.05 11.726 11.727 11.741 -0.187 -0.571 -0.387 -0.187 -0.571 0.221 0.072 0.107 0.256 0.128 - 459.10 11.645 11.662 11.673 -0.628 -0.494 -0.468 -0.628 -0.494 0.231 0.294 0.310 0.429 0.243 - 459.15 11.539 11.551 11.554 -0.534 -0.274 -0.574 -0.534 -0.274 0.157 0.306 0.146 0.345 0.187 - 459.20 11.480 11.480 11.496 -0.099 -0.606 -0.633 -0.099 -0.606 0.384 0.063 0.060 0.389 0.197 - 459.25 11.612 11.620 11.647 -0.405 -0.797 -0.500 -0.405 -0.797 0.399 0.203 0.323 0.525 0.276 - 459.30 11.669 11.673 11.687 -0.270 -0.583 -0.443 -0.270 -0.583 0.258 0.120 0.157 0.304 0.163 - 459.35 11.673 11.686 11.721 -0.538 -0.916 -0.440 -0.538 -0.916 0.403 0.237 0.493 0.661 0.340 - 459.40 11.672 11.687 11.747 -0.592 -1.178 -0.440 -0.592 -1.178 0.519 0.261 0.698 0.966 0.454 - 459.45 11.533 11.541 11.610 -0.439 -1.263 -0.580 -0.439 -1.263 0.732 0.254 0.554 1.062 0.476 - 459.50 11.696 11.705 11.826 -0.463 -1.688 -0.417 -0.463 -1.688 0.704 0.193 0.781 1.619 0.534 - 459.55 11.869 11.881 11.986 -0.533 -1.580 -0.244 -0.533 -1.580 0.385 0.130 0.842 1.420 0.468 - 459.60 12.102 12.112 12.225 -0.502 -1.660 -0.011 -0.502 -1.660 0.018 0.006 0.834 1.503 0.417 - 459.65 12.221 12.227 12.322 -0.385 -1.530 0.108 -0.385 -1.530 -0.165 -0.042 0.589 1.251 0.307 - 459.70 12.115 12.128 12.192 -0.554 -1.252 0.002 -0.554 -1.252 -0.003 -0.001 0.694 0.937 0.347 - 459.75 12.293 12.331 12.397 -0.966 -1.275 0.180 -0.966 -1.275 -0.230 -0.174 1.232 1.296 0.633 - 459.80 12.241 12.268 12.396 -0.816 -1.774 0.128 -0.816 -1.774 -0.228 -0.105 1.448 1.914 0.735 - 459.85 12.065 12.075 12.176 -0.489 -1.567 -0.047 -0.489 -1.567 0.074 0.023 0.766 1.348 0.385 - 459.90 12.050 12.060 12.098 -0.488 -0.954 -0.063 -0.488 -0.954 0.060 0.031 0.466 0.577 0.235 - 459.95 11.953 11.963 12.002 -0.505 -0.965 -0.160 -0.505 -0.965 0.154 0.081 0.487 0.605 0.258 - 460.00 11.972 11.990 12.050 -0.650 -1.200 -0.140 -0.650 -1.200 0.169 0.091 0.780 0.941 0.402 - 460.05 11.800 11.830 11.869 -0.848 -0.962 -0.313 -0.848 -0.962 0.301 0.265 0.816 0.872 0.455 - 460.10 11.659 11.672 11.686 -0.544 -0.583 -0.454 -0.544 -0.583 0.264 0.247 0.317 0.421 0.241 - 460.15 11.829 11.833 11.861 -0.322 -0.803 -0.284 -0.322 -0.803 0.228 0.091 0.259 0.414 0.178 - 460.20 11.544 11.547 11.587 -0.266 -0.968 -0.569 -0.266 -0.968 0.551 0.152 0.258 0.666 0.313 - 460.25 11.456 11.461 11.484 -0.331 -0.726 -0.657 -0.331 -0.726 0.477 0.217 0.240 0.534 0.288 - 460.30 11.581 11.581 11.599 -0.000 -0.649 -0.531 -0.000 -0.649 0.345 0.000 0.000 0.352 0.173 - 460.35 11.533 11.533 11.544 0.096 -0.502 -0.580 0.096 -0.502 0.291 -0.056 -0.048 0.299 0.150 - 460.40 11.495 11.497 11.511 0.209 -0.560 -0.618 0.209 -0.560 0.346 -0.129 -0.117 0.369 0.193 - 460.45 11.730 11.730 11.753 -0.097 -0.742 -0.383 -0.097 -0.742 0.284 0.037 0.072 0.354 0.148 - 460.50 11.624 11.631 11.651 -0.401 -0.671 -0.488 -0.401 -0.671 0.328 0.196 0.269 0.425 0.234 - 460.55 11.477 11.502 11.507 -0.763 -0.331 -0.636 -0.763 -0.331 0.210 0.485 0.252 0.548 0.293 - 460.60 11.605 11.608 11.608 -0.249 0.032 -0.507 -0.249 0.032 -0.016 0.127 -0.008 0.160 0.064 - 460.65 11.829 11.839 11.845 -0.479 -0.386 -0.283 -0.479 -0.386 0.109 0.136 0.185 0.229 0.127 - 460.70 12.146 12.154 12.174 -0.438 -0.698 0.033 -0.438 -0.698 -0.023 -0.015 0.305 0.340 0.153 - 460.75 12.340 12.343 12.361 -0.280 -0.673 0.227 -0.280 -0.673 -0.153 -0.064 0.188 0.291 0.125 - 460.80 12.586 12.589 12.610 -0.248 -0.730 0.474 -0.248 -0.730 -0.346 -0.117 0.181 0.410 0.204 - 460.85 12.629 12.635 12.651 -0.399 -0.641 0.516 -0.399 -0.641 -0.331 -0.206 0.256 0.418 0.233 - 460.90 12.906 12.906 12.918 -0.059 -0.566 0.793 -0.059 -0.566 -0.449 -0.047 0.033 0.476 0.226 - 460.95 13.053 13.058 13.080 -0.370 -0.753 0.940 -0.370 -0.753 -0.708 -0.348 0.278 0.794 0.418 - 461.00 12.805 12.807 12.817 -0.240 -0.485 0.692 -0.240 -0.485 -0.336 -0.166 0.116 0.386 0.196 - 461.05 12.594 12.594 12.601 -0.071 -0.420 0.481 -0.071 -0.420 -0.202 -0.034 0.030 0.206 0.103 - 461.10 12.432 12.432 12.439 0.004 -0.417 0.320 0.004 -0.417 -0.133 0.001 -0.002 0.138 0.067 - 461.15 12.424 12.425 12.425 0.167 -0.062 0.311 0.167 -0.062 -0.019 0.052 -0.010 0.064 0.028 - 461.20 12.332 12.333 12.333 0.110 -0.100 0.220 0.110 -0.100 -0.022 0.024 -0.011 0.035 0.017 - 461.25 12.380 12.381 12.384 0.105 0.265 0.268 0.105 0.265 0.071 0.028 0.028 0.076 0.041 - 461.30 12.589 12.589 12.597 0.082 0.434 0.476 0.082 0.434 0.206 0.039 0.036 0.211 0.107 - 461.35 12.553 12.556 12.556 0.304 0.054 0.440 0.304 0.054 0.024 0.134 0.016 0.144 0.068 - 461.40 12.558 12.562 12.564 0.340 0.237 0.445 0.340 0.237 0.106 0.151 0.081 0.185 0.101 - 461.45 12.737 12.739 12.740 0.270 0.127 0.624 0.270 0.127 0.079 0.168 0.034 0.239 0.095 - 461.50 12.739 12.746 12.747 0.432 -0.116 0.626 0.432 -0.116 -0.072 0.270 -0.050 0.296 0.142 - 461.55 12.884 12.898 12.915 0.606 -0.662 0.771 0.606 -0.662 -0.511 0.468 -0.401 0.700 0.400 - 461.60 12.954 12.957 12.971 0.305 -0.591 0.841 0.305 -0.591 -0.497 0.256 -0.180 0.574 0.294 - 461.65 12.825 12.828 12.829 0.257 -0.152 0.712 0.257 -0.152 -0.108 0.183 -0.039 0.298 0.108 - 461.70 12.649 12.654 12.654 0.356 -0.083 0.536 0.356 -0.083 -0.044 0.191 -0.029 0.211 0.099 - 461.75 12.239 12.239 12.241 -0.017 -0.168 0.127 -0.017 -0.168 -0.021 -0.002 0.003 0.022 0.011 - 461.80 12.095 12.095 12.097 0.048 -0.214 -0.018 0.048 -0.214 0.004 -0.001 -0.010 0.024 0.005 - 461.85 11.958 11.959 11.959 0.146 0.021 -0.155 0.146 0.021 -0.003 -0.023 0.003 0.023 0.012 - 461.90 11.855 11.858 11.865 0.269 -0.416 -0.258 0.269 -0.416 0.107 -0.069 -0.112 0.156 0.085 - 461.95 11.873 11.875 11.875 0.236 -0.067 -0.240 0.236 -0.067 0.016 -0.057 -0.016 0.059 0.031 - 462.00 12.061 12.061 12.062 0.040 -0.085 -0.052 0.040 -0.085 0.004 -0.002 -0.003 0.006 0.003 - 462.05 12.126 12.127 12.129 -0.184 0.190 0.013 -0.184 0.190 0.002 -0.002 -0.035 0.035 0.018 - 462.10 12.136 12.140 12.140 -0.290 0.058 0.023 -0.290 0.058 0.001 -0.007 -0.017 0.044 0.009 - 462.15 12.233 12.234 12.234 -0.139 -0.131 0.120 -0.139 -0.131 -0.016 -0.017 0.018 0.025 0.015 - 462.20 12.536 12.538 12.538 -0.199 0.021 0.423 -0.199 0.021 0.009 -0.084 -0.004 0.110 0.042 - 462.25 12.434 12.443 12.443 -0.478 0.053 0.321 -0.478 0.053 0.017 -0.153 -0.025 0.167 0.078 - 462.30 12.331 12.338 12.342 -0.423 0.300 0.218 -0.423 0.300 0.065 -0.092 -0.127 0.158 0.085 - 462.35 12.075 12.075 12.080 -0.097 0.342 -0.038 -0.097 0.342 -0.013 0.004 -0.033 0.064 0.018 - 462.40 12.248 12.248 12.251 -0.086 0.243 0.135 -0.086 0.243 0.033 -0.012 -0.021 0.042 0.020 - 462.45 12.316 12.317 12.318 0.156 -0.135 0.203 0.156 -0.135 -0.027 0.032 -0.021 0.042 0.023 - 462.50 12.277 12.281 12.281 0.299 0.065 0.165 0.299 0.065 0.011 0.049 0.020 0.060 0.027 - 462.55 12.181 12.182 12.182 0.155 0.105 0.068 0.155 0.105 0.007 0.011 0.016 0.020 0.010 - 462.60 12.257 12.259 12.268 -0.209 0.468 0.145 -0.209 0.468 0.068 -0.030 -0.098 0.142 0.061 - 462.65 12.408 12.410 12.439 -0.231 0.850 0.295 -0.231 0.850 0.251 -0.068 -0.197 0.432 0.163 - 462.70 12.436 12.436 12.486 -0.113 1.112 0.323 -0.113 1.112 0.359 -0.036 -0.125 0.677 0.191 - 462.75 12.377 12.377 12.395 0.009 0.669 0.264 0.009 0.669 0.177 0.002 0.006 0.259 0.088 - 462.80 12.266 12.266 12.286 0.067 0.710 0.153 0.067 0.710 0.108 0.010 0.048 0.266 0.059 - 462.85 12.416 12.426 12.438 0.491 0.548 0.303 0.491 0.548 0.166 0.149 0.269 0.316 0.175 - 462.90 12.360 12.404 12.404 1.033 0.019 0.248 1.033 0.019 0.005 0.256 0.020 0.564 0.128 - 462.95 12.249 12.300 12.300 1.119 0.141 0.136 1.119 0.141 0.019 0.152 0.158 0.645 0.110 - 463.00 12.242 12.262 12.265 0.708 0.255 0.129 0.708 0.255 0.033 0.091 0.180 0.291 0.102 - 463.05 12.307 12.309 12.310 0.179 0.207 0.194 0.179 0.207 0.040 0.035 0.037 0.056 0.032 - 463.10 12.535 12.536 12.536 -0.166 0.076 0.422 -0.166 0.076 0.032 -0.070 -0.013 0.106 0.039 - 463.15 12.839 12.840 12.841 0.178 0.149 0.726 0.178 0.149 0.108 0.129 0.026 0.290 0.085 - 463.20 12.872 12.875 12.875 0.266 -0.084 0.759 0.266 -0.084 -0.063 0.202 -0.022 0.327 0.107 - 463.25 12.839 12.841 12.842 0.255 -0.130 0.726 0.255 -0.130 -0.094 0.185 -0.033 0.304 0.105 - 463.30 12.868 12.871 12.871 0.278 0.031 0.755 0.278 0.031 0.023 0.210 0.009 0.324 0.106 - 463.35 12.923 12.931 12.937 0.463 0.382 0.810 0.463 0.382 0.310 0.375 0.177 0.508 0.259 - 463.40 12.654 12.658 12.661 0.330 0.272 0.541 0.330 0.272 0.147 0.179 0.090 0.238 0.124 - 463.45 12.867 12.868 12.872 -0.037 0.339 0.755 -0.037 0.339 0.256 -0.028 -0.012 0.343 0.129 - 463.50 12.838 12.840 12.849 0.238 0.480 0.725 0.238 0.480 0.348 0.172 0.114 0.406 0.202 - 463.55 12.842 12.851 12.858 0.495 0.406 0.729 0.495 0.406 0.296 0.361 0.201 0.471 0.254 - 463.60 12.689 12.700 12.723 0.507 0.768 0.577 0.507 0.768 0.443 0.292 0.389 0.590 0.329 - 463.65 12.501 12.513 12.523 0.551 0.486 0.389 0.551 0.486 0.189 0.214 0.268 0.345 0.196 - 463.70 12.300 12.318 12.343 0.662 0.792 0.187 0.662 0.792 0.148 0.124 0.525 0.551 0.280 - 463.75 12.356 12.387 12.430 0.868 1.034 0.244 0.868 1.034 0.252 0.211 0.897 0.940 0.478 - 463.80 12.456 12.472 12.512 0.619 1.008 0.344 0.619 1.008 0.346 0.213 0.624 0.758 0.372 - 463.85 12.453 12.465 12.483 0.559 0.661 0.340 0.559 0.661 0.225 0.190 0.369 0.432 0.236 - 463.90 12.478 12.497 12.501 0.691 0.332 0.365 0.691 0.332 0.121 0.252 0.229 0.360 0.181 - 463.95 12.761 12.785 12.785 0.784 0.097 0.648 0.784 0.097 0.063 0.508 0.076 0.522 0.259 - 464.00 12.673 12.683 12.698 0.494 0.628 0.560 0.494 0.628 0.351 0.277 0.310 0.476 0.272 - 464.05 12.543 12.544 12.576 0.139 0.900 0.430 0.139 0.900 0.387 0.060 0.125 0.507 0.206 - 464.10 12.621 12.629 12.663 0.450 0.937 0.508 0.450 0.937 0.476 0.229 0.422 0.670 0.338 - 464.15 12.517 12.523 12.579 0.383 1.183 0.404 0.383 1.183 0.478 0.155 0.453 0.855 0.338 - 464.20 12.925 12.927 12.953 0.210 0.816 0.813 0.210 0.816 0.663 0.171 0.172 0.686 0.353 - 464.25 13.031 13.031 13.052 0.082 0.737 0.918 0.082 0.737 0.676 0.075 0.061 0.696 0.342 - 464.30 13.104 13.107 13.123 0.279 0.644 0.991 0.279 0.644 0.638 0.277 0.180 0.737 0.359 - 464.35 13.390 13.390 13.399 -0.002 0.483 1.277 -0.002 0.483 0.616 -0.003 -0.001 0.932 0.308 - 464.40 13.182 13.183 13.204 0.116 0.752 1.069 0.116 0.752 0.804 0.124 0.087 0.861 0.409 - 464.45 13.002 13.002 13.022 0.004 0.721 0.890 0.004 0.721 0.641 0.003 0.003 0.656 0.321 - 464.50 12.965 12.965 12.973 0.007 0.477 0.852 0.007 0.477 0.407 0.006 0.003 0.477 0.203 - 464.55 12.971 12.972 12.975 0.155 0.285 0.858 0.155 0.285 0.244 0.133 0.044 0.421 0.141 - 464.60 13.023 13.024 13.043 -0.132 0.703 0.910 -0.132 0.703 0.640 -0.120 -0.093 0.670 0.329 - 464.65 12.919 12.920 12.942 0.163 0.749 0.806 0.163 0.749 0.604 0.132 0.122 0.619 0.315 - 464.70 12.950 12.950 12.969 -0.044 0.701 0.837 -0.044 0.701 0.587 -0.037 -0.031 0.597 0.294 - 464.75 12.812 12.812 12.843 -0.112 0.893 0.699 -0.112 0.893 0.624 -0.078 -0.100 0.649 0.319 - 464.80 12.939 12.943 12.980 0.350 0.972 0.826 0.350 0.972 0.803 0.289 0.341 0.875 0.459 - 464.85 12.718 12.729 12.742 0.521 0.577 0.605 0.521 0.577 0.349 0.316 0.301 0.486 0.279 - 464.90 12.663 12.689 12.699 0.802 0.509 0.551 0.802 0.509 0.280 0.442 0.408 0.603 0.332 - 464.95 12.677 12.697 12.719 0.716 0.746 0.564 0.716 0.746 0.421 0.404 0.534 0.693 0.395 - 465.00 12.546 12.557 12.596 0.518 1.001 0.433 0.518 1.001 0.434 0.224 0.519 0.729 0.356 - 465.05 12.442 12.455 12.490 0.563 0.933 0.329 0.563 0.933 0.307 0.185 0.525 0.648 0.318 - 465.10 12.273 12.292 12.332 0.681 0.990 0.160 0.681 0.990 0.158 0.109 0.674 0.735 0.351 - 465.15 12.364 12.396 12.425 0.893 0.846 0.251 0.893 0.846 0.212 0.224 0.755 0.788 0.408 - 465.20 12.398 12.445 12.474 1.081 0.855 0.285 1.081 0.855 0.243 0.308 0.924 0.990 0.502 - 465.25 12.502 12.559 12.577 1.197 0.680 0.389 1.197 0.680 0.264 0.465 0.813 1.023 0.487 - 465.30 12.540 12.597 12.617 1.191 0.725 0.427 1.191 0.725 0.310 0.509 0.863 1.063 0.525 - 465.35 12.737 12.803 12.842 1.303 1.001 0.624 1.303 1.001 0.625 0.813 1.304 1.545 0.830 - 465.40 12.549 12.611 12.658 1.241 1.090 0.437 1.241 1.090 0.476 0.542 1.353 1.460 0.767 - 465.45 12.437 12.510 12.559 1.356 1.103 0.324 1.356 1.103 0.357 0.439 1.496 1.581 0.800 - 465.50 12.620 12.693 12.747 1.358 1.168 0.507 1.358 1.168 0.593 0.689 1.587 1.734 0.915 - 465.55 12.669 12.725 12.810 1.197 1.477 0.556 1.197 1.477 0.821 0.665 1.768 1.962 1.030 - 465.60 12.605 12.655 12.717 1.120 1.256 0.492 1.120 1.256 0.618 0.552 1.407 1.537 0.816 - 465.65 12.824 12.853 12.887 0.858 0.941 0.711 0.858 0.941 0.669 0.610 0.807 1.064 0.607 - 465.70 12.669 12.687 12.736 0.685 1.107 0.556 0.685 1.107 0.616 0.381 0.758 1.002 0.524 - 465.75 12.693 12.696 12.775 0.270 1.420 0.580 0.270 1.420 0.823 0.157 0.384 1.213 0.461 - 465.80 12.471 12.476 12.637 0.369 2.010 0.358 0.369 2.010 0.720 0.132 0.742 2.153 0.521 - 465.85 12.554 12.563 12.666 0.476 1.605 0.442 0.476 1.605 0.709 0.210 0.764 1.499 0.532 - 465.90 12.468 12.471 12.620 0.285 1.932 0.355 0.285 1.932 0.686 0.101 0.551 1.970 0.443 - 465.95 12.233 12.243 12.350 0.515 1.619 0.120 0.515 1.619 0.194 0.062 0.833 1.450 0.429 - 466.00 12.168 12.192 12.292 0.754 1.571 0.056 0.754 1.571 0.087 0.042 1.184 1.519 0.594 - 466.05 12.224 12.232 12.306 0.430 1.347 0.112 0.430 1.347 0.150 0.048 0.580 1.006 0.300 - 466.10 11.941 11.949 12.031 0.425 1.407 -0.172 0.425 1.407 -0.241 -0.073 0.598 1.094 0.324 - 466.15 12.028 12.032 12.157 0.322 1.737 -0.085 0.322 1.737 -0.148 -0.027 0.560 1.564 0.290 - 466.20 12.077 12.088 12.181 0.514 1.497 -0.035 0.514 1.497 -0.053 -0.018 0.770 1.254 0.386 - 466.25 12.207 12.207 12.288 0.077 1.410 0.094 0.077 1.410 0.132 0.007 0.109 1.002 0.086 - 466.30 12.122 12.124 12.191 -0.235 1.274 0.009 -0.235 1.274 0.012 -0.002 -0.299 0.839 0.150 - 466.35 12.219 12.219 12.301 0.074 1.411 0.106 0.074 1.411 0.150 0.008 0.104 1.004 0.091 - 466.40 12.383 12.386 12.480 -0.278 1.529 0.270 -0.278 1.529 0.413 -0.075 -0.426 1.245 0.299 - 466.45 12.678 12.685 12.727 -0.419 1.036 0.565 -0.419 1.036 0.586 -0.237 -0.434 0.784 0.383 - 466.50 12.676 12.681 12.753 -0.383 1.348 0.563 -0.383 1.348 0.758 -0.215 -0.516 1.140 0.471 - 466.55 12.588 12.592 12.678 -0.298 1.474 0.476 -0.298 1.474 0.701 -0.142 -0.439 1.244 0.420 - 466.60 12.609 12.626 12.706 -0.646 1.428 0.496 -0.646 1.428 0.709 -0.321 -0.922 1.351 0.603 - 466.65 12.323 12.335 12.424 -0.538 1.480 0.210 -0.538 1.480 0.312 -0.113 -0.796 1.262 0.431 - 466.70 12.424 12.443 12.507 -0.702 1.258 0.311 -0.702 1.258 0.391 -0.218 -0.883 1.086 0.495 - 466.75 12.583 12.626 12.672 -1.047 1.078 0.470 -1.047 1.078 0.507 -0.492 -1.128 1.239 0.666 - 466.80 12.300 12.326 12.354 -0.789 0.831 0.188 -0.789 0.831 0.156 -0.148 -0.655 0.674 0.345 - 466.85 12.450 12.483 12.512 -0.909 0.849 0.337 -0.909 0.849 0.286 -0.306 -0.772 0.831 0.439 - 466.90 12.675 12.693 12.729 -0.667 0.958 0.563 -0.667 0.958 0.539 -0.375 -0.639 0.839 0.458 - 466.95 12.900 12.963 12.978 -1.274 0.625 0.788 -1.274 0.625 0.493 -1.003 -0.797 1.317 0.686 - 467.00 12.792 12.833 12.842 -1.017 0.488 0.680 -1.017 0.488 0.332 -0.691 -0.496 0.867 0.457 - 467.05 12.851 12.883 12.891 -0.906 0.462 0.738 -0.906 0.462 0.341 -0.669 -0.419 0.790 0.430 - 467.10 12.953 13.010 13.025 -1.208 0.629 0.841 -1.208 0.629 0.528 -1.015 -0.759 1.280 0.687 - 467.15 12.779 12.824 12.842 -1.075 0.683 0.666 -1.075 0.683 0.455 -0.716 -0.734 1.033 0.561 - 467.20 12.656 12.691 12.706 -0.938 0.624 0.543 -0.938 0.624 0.339 -0.509 -0.585 0.782 0.423 - 467.25 12.664 12.693 12.699 -0.856 0.393 0.551 -0.856 0.393 0.217 -0.472 -0.336 0.595 0.309 - 467.30 12.751 12.805 12.806 -1.166 -0.158 0.639 -1.166 -0.158 -0.101 -0.745 0.184 0.896 0.387 - 467.35 12.597 12.630 12.631 -0.906 0.197 0.485 -0.906 0.197 0.096 -0.439 -0.179 0.547 0.242 - 467.40 12.720 12.729 12.729 -0.485 0.024 0.607 -0.485 0.024 0.014 -0.295 -0.011 0.302 0.148 - 467.45 12.753 12.756 12.757 -0.287 -0.159 0.640 -0.287 -0.159 -0.102 -0.183 0.046 0.258 0.107 - 467.50 12.350 12.366 12.370 -0.632 0.297 0.237 -0.632 0.297 0.070 -0.150 -0.187 0.272 0.125 - 467.55 12.192 12.196 12.199 -0.328 0.270 0.079 -0.328 0.270 0.021 -0.026 -0.089 0.093 0.047 - 467.60 12.393 12.405 12.406 -0.532 0.204 0.280 -0.532 0.204 0.057 -0.149 -0.108 0.201 0.097 - 467.65 12.862 12.872 12.876 -0.499 0.316 0.749 -0.499 0.316 0.237 -0.374 -0.158 0.455 0.235 - 467.70 12.851 12.863 12.873 -0.556 0.506 0.738 -0.556 0.506 0.373 -0.410 -0.281 0.555 0.311 - 467.75 12.837 12.848 12.854 -0.548 0.380 0.724 -0.548 0.380 0.275 -0.397 -0.208 0.484 0.263 - 467.80 12.690 12.695 12.695 -0.344 0.040 0.577 -0.344 0.040 0.023 -0.198 -0.014 0.227 0.100 - 467.85 12.826 12.835 12.836 -0.484 -0.056 0.714 -0.484 -0.056 -0.040 -0.345 0.027 0.373 0.174 - 467.90 12.769 12.780 12.780 -0.537 -0.031 0.656 -0.537 -0.031 -0.020 -0.352 0.017 0.360 0.177 - 467.95 12.893 12.905 12.906 -0.574 0.158 0.780 -0.574 0.158 0.123 -0.448 -0.091 0.481 0.236 - 468.00 13.059 13.076 13.077 -0.668 0.089 0.946 -0.668 0.089 0.084 -0.633 -0.059 0.675 0.320 - 468.05 13.154 13.181 13.184 -0.853 -0.275 1.041 -0.853 -0.275 -0.287 -0.888 0.235 0.944 0.481 - 468.10 13.037 13.057 13.058 -0.737 0.119 0.924 -0.737 0.119 0.110 -0.681 -0.088 0.705 0.348 - 468.15 12.889 12.922 12.924 -0.934 0.214 0.776 -0.934 0.214 0.166 -0.724 -0.200 0.760 0.385 - 468.20 12.874 12.941 12.941 -1.309 -0.030 0.762 -1.309 -0.030 -0.023 -0.997 0.039 1.147 0.499 - 468.25 13.035 13.128 13.128 -1.563 -0.082 0.922 -1.563 -0.082 -0.076 -1.441 0.128 1.650 0.724 - 468.30 13.370 13.465 13.465 -1.591 0.012 1.258 -1.591 0.012 0.015 -2.001 -0.019 2.057 1.001 - 468.35 13.373 13.419 13.421 -1.112 0.268 1.260 -1.112 0.268 0.337 -1.401 -0.297 1.447 0.735 - 468.40 13.259 13.325 13.325 -1.321 0.067 1.146 -1.321 0.067 0.077 -1.514 -0.088 1.532 0.759 - 468.45 13.166 13.218 13.218 -1.163 -0.120 1.054 -1.163 -0.120 -0.126 -1.226 0.140 1.239 0.620 - 468.50 13.211 13.275 13.276 -1.307 0.076 1.098 -1.307 0.076 0.084 -1.435 -0.100 1.460 0.721 - 468.55 13.206 13.277 13.278 -1.373 -0.198 1.093 -1.373 -0.198 -0.217 -1.500 0.272 1.559 0.770 - 468.60 13.598 13.686 13.696 -1.550 -0.502 1.486 -1.550 -0.502 -0.745 -2.302 0.777 2.430 1.271 - 468.65 13.679 13.737 13.759 -1.260 -0.784 1.566 -1.260 -0.784 -1.228 -1.973 0.988 2.327 1.263 - 468.70 13.699 13.746 13.762 -1.126 -0.680 1.587 -1.126 -0.680 -1.079 -1.786 0.766 2.124 1.111 - 468.75 13.780 13.831 13.844 -1.178 -0.599 1.668 -1.178 -0.599 -0.999 -1.964 0.706 2.264 1.157 - 468.80 14.003 14.063 14.081 -1.299 -0.718 1.890 -1.299 -0.718 -1.356 -2.455 0.932 2.887 1.478 - 468.85 13.872 13.921 13.941 -1.169 -0.750 1.759 -1.169 -0.750 -1.320 -2.056 0.877 2.512 1.298 - 468.90 13.687 13.736 13.746 -1.149 -0.540 1.575 -1.149 -0.540 -0.850 -1.809 0.620 2.046 1.046 - 468.95 14.142 14.185 14.199 -1.106 -0.633 2.029 -1.106 -0.633 -1.285 -2.245 0.701 2.872 1.340 - 469.00 14.206 14.236 14.259 -0.923 -0.821 2.093 -0.923 -0.821 -1.719 -1.932 0.758 2.954 1.348 - 469.05 14.472 14.493 14.524 -0.773 -0.942 2.360 -0.773 -0.942 -2.223 -1.824 0.728 3.526 1.483 - 469.10 14.688 14.704 14.715 -0.679 -0.575 2.575 -0.679 -0.575 -1.480 -1.747 0.390 3.711 1.161 - 469.15 14.344 14.368 14.376 -0.832 -0.482 2.231 -0.832 -0.482 -1.076 -1.855 0.401 2.951 1.091 - 469.20 14.135 14.166 14.180 -0.941 -0.635 2.022 -0.941 -0.635 -1.283 -1.903 0.597 2.689 1.186 - 469.25 14.106 14.162 14.172 -1.257 -0.554 1.993 -1.257 -0.554 -1.104 -2.504 0.696 2.929 1.412 - 469.30 14.195 14.226 14.244 -0.942 -0.729 2.082 -0.942 -0.729 -1.518 -1.960 0.687 2.876 1.286 - 469.35 14.233 14.260 14.303 -0.883 -1.108 2.120 -0.883 -1.108 -2.350 -1.871 0.978 3.251 1.580 - 469.40 14.246 14.259 14.320 -0.612 -1.327 2.133 -0.612 -1.327 -2.830 -1.306 0.813 3.343 1.611 - 469.45 13.968 13.968 14.010 -0.087 -1.088 1.855 -0.087 -1.088 -2.018 -0.162 0.095 2.316 1.013 - 469.50 13.997 13.997 14.031 -0.036 -0.970 1.884 -0.036 -0.970 -1.827 -0.067 0.035 2.246 0.914 - 469.55 14.299 14.302 14.360 -0.317 -1.285 2.186 -0.317 -1.285 -2.810 -0.693 0.407 3.266 1.461 - 469.60 14.217 14.217 14.268 -0.106 -1.206 2.104 -0.106 -1.206 -2.537 -0.223 0.128 2.946 1.275 - 469.65 14.396 14.397 14.455 -0.107 -1.298 2.283 -0.107 -1.298 -2.963 -0.245 0.139 3.455 1.488 - 469.70 14.698 14.701 14.736 0.276 -1.016 2.585 0.276 -1.016 -2.626 0.714 -0.281 3.896 1.368 - 469.75 14.705 14.723 14.781 0.741 -1.310 2.592 0.741 -1.310 -3.394 1.920 -0.970 4.490 2.009 - 469.80 14.787 14.804 14.835 0.712 -0.958 2.674 0.712 -0.958 -2.562 1.903 -0.681 4.288 1.631 - 469.85 14.774 14.810 14.835 1.030 -0.855 2.662 1.030 -0.855 -2.275 2.741 -0.880 4.438 1.835 - 469.90 14.832 14.870 14.918 1.070 -1.200 2.719 1.070 -1.200 -3.263 2.908 -1.284 4.988 2.278 - 469.95 14.447 14.509 14.598 1.339 -1.610 2.334 1.339 -1.610 -3.759 3.126 -2.157 4.918 2.672 - 470.00 14.227 14.263 14.383 1.026 -1.852 2.114 1.026 -1.852 -3.915 2.168 -1.900 4.475 2.431 - 470.05 14.337 14.375 14.487 1.042 -1.795 2.224 1.042 -1.795 -3.992 2.317 -1.870 4.627 2.490 - 470.10 14.112 14.163 14.310 1.199 -2.045 1.999 1.199 -2.045 -4.089 2.397 -2.453 4.809 2.668 - 470.15 13.622 13.675 13.802 1.203 -1.870 1.509 1.203 -1.870 -2.822 1.816 -2.250 3.611 2.020 - 470.20 13.441 13.499 13.585 1.252 -1.522 1.328 1.252 -1.522 -2.021 1.663 -1.905 2.824 1.619 - 470.25 13.704 13.766 13.849 1.305 -1.516 1.591 1.305 -1.516 -2.411 2.076 -1.978 3.265 1.873 - 470.30 13.640 13.675 13.719 0.977 -1.102 1.527 0.977 -1.102 -1.683 1.492 -1.077 2.251 1.247 - 470.35 13.681 13.723 13.759 1.073 -1.004 1.568 1.073 -1.004 -1.575 1.682 -1.077 2.309 1.272 - 470.40 13.763 13.832 13.897 1.381 -1.338 1.651 1.381 -1.338 -2.208 2.279 -1.847 3.210 1.836 - 470.45 13.746 13.798 13.872 1.193 -1.436 1.633 1.193 -1.436 -2.345 1.949 -1.714 3.077 1.749 - 470.50 13.388 13.407 13.474 0.728 -1.337 1.275 0.728 -1.337 -1.704 0.929 -0.974 1.972 1.086 - 470.55 13.576 13.585 13.638 0.479 -1.202 1.463 0.479 -1.202 -1.759 0.701 -0.575 1.908 0.989 - 470.60 14.162 14.180 14.240 0.721 -1.301 2.049 0.721 -1.301 -2.667 1.477 -0.938 3.206 1.595 - 470.65 14.186 14.205 14.241 0.740 -1.007 2.073 0.740 -1.007 -2.088 1.534 -0.745 2.930 1.348 - 470.70 14.062 14.092 14.120 0.921 -0.889 1.949 0.921 -0.889 -1.732 1.795 -0.819 2.718 1.313 - 470.75 13.777 13.831 13.856 1.227 -0.828 1.664 1.227 -0.828 -1.377 2.042 -1.016 2.480 1.332 - 470.80 13.942 14.032 14.053 1.591 -0.761 1.829 1.591 -0.761 -1.392 2.910 -1.211 3.228 1.723 - 470.85 14.039 14.165 14.193 1.888 -0.882 1.926 1.888 -0.882 -1.698 3.637 -1.665 4.026 2.173 - 470.90 14.209 14.321 14.342 1.788 -0.782 2.096 1.788 -0.782 -1.639 3.749 -1.398 4.102 2.162 - 470.95 14.249 14.364 14.386 1.816 -0.793 2.136 1.816 -0.793 -1.694 3.878 -1.440 4.244 2.235 - 471.00 14.248 14.358 14.390 1.777 -0.958 2.135 1.777 -0.958 -2.046 3.794 -1.703 4.317 2.317 - 471.05 14.103 14.183 14.224 1.506 -1.080 1.990 1.506 -1.080 -2.149 2.997 -1.626 3.697 2.015 - 471.10 14.161 14.255 14.297 1.635 -1.094 2.048 1.635 -1.094 -2.240 3.350 -1.789 4.033 2.204 - 471.15 14.049 14.100 14.130 1.193 -0.925 1.937 1.193 -0.925 -1.790 2.310 -1.103 3.014 1.562 - 471.20 14.273 14.303 14.361 0.924 -1.289 2.160 0.924 -1.289 -2.784 1.996 -1.191 3.591 1.813 - 471.25 13.977 14.023 14.090 1.131 -1.372 1.864 1.131 -1.372 -2.558 2.109 -1.552 3.319 1.830 - 471.30 13.805 13.833 13.923 0.874 -1.584 1.693 0.874 -1.584 -2.680 1.480 -1.385 3.069 1.680 - 471.35 13.850 13.875 13.974 0.833 -1.658 1.737 0.833 -1.658 -2.880 1.448 -1.381 3.230 1.753 - 471.40 13.797 13.802 13.874 0.385 -1.412 1.684 0.385 -1.412 -2.377 0.648 -0.543 2.488 1.262 - 471.45 13.789 13.789 13.841 0.057 -1.194 1.676 0.057 -1.194 -2.002 0.095 -0.068 2.120 1.003 - 471.50 13.608 13.608 13.654 0.019 -1.119 1.495 0.019 -1.119 -1.674 0.028 -0.021 1.745 0.837 - 471.55 13.197 13.198 13.245 -0.101 -1.114 1.085 -0.101 -1.114 -1.208 -0.109 0.112 1.214 0.609 - 471.60 13.269 13.269 13.306 -0.033 -0.995 1.156 -0.033 -0.995 -1.150 -0.038 0.033 1.164 0.576 - 471.65 13.310 13.310 13.383 0.043 -1.390 1.197 0.043 -1.390 -1.664 0.051 -0.059 1.684 0.833 - 471.70 13.522 13.523 13.586 0.159 -1.309 1.409 0.159 -1.309 -1.844 0.224 -0.208 1.862 0.935 - 471.75 13.312 13.315 13.383 0.285 -1.353 1.199 0.285 -1.353 -1.622 0.341 -0.385 1.675 0.851 - 471.80 13.279 13.290 13.352 0.542 -1.280 1.166 0.542 -1.280 -1.493 0.633 -0.694 1.647 0.882 - 471.85 13.407 13.415 13.462 0.438 -1.125 1.295 0.438 -1.125 -1.457 0.567 -0.493 1.567 0.820 - 471.90 13.668 13.668 13.758 0.087 -1.571 1.555 0.087 -1.571 -2.443 0.135 -0.137 2.447 1.225 - 471.95 13.565 13.566 13.664 0.177 -1.629 1.453 0.177 -1.629 -2.366 0.257 -0.288 2.397 1.199 - 472.00 13.439 13.442 13.516 0.291 -1.418 1.326 0.291 -1.418 -1.880 0.385 -0.412 1.926 0.981 - 472.05 13.211 13.211 13.280 0.097 -1.349 1.098 0.097 -1.349 -1.482 0.106 -0.130 1.518 0.746 - 472.10 13.380 13.386 13.430 0.387 -1.081 1.268 0.387 -1.081 -1.370 0.491 -0.418 1.462 0.757 - 472.15 13.606 13.608 13.655 0.220 -1.127 1.493 0.220 -1.127 -1.684 0.328 -0.248 1.775 0.867 - 472.20 13.905 13.912 13.955 0.420 -1.102 1.793 0.420 -1.102 -1.975 0.753 -0.463 2.302 1.082 - 472.25 13.627 13.635 13.656 0.474 -0.742 1.514 0.474 -0.742 -1.123 0.718 -0.352 1.534 0.689 - 472.30 13.634 13.658 13.688 0.809 -0.898 1.521 0.809 -0.898 -1.366 1.231 -0.727 1.888 0.989 - 472.35 13.577 13.584 13.655 0.423 -1.396 1.464 0.423 -1.396 -2.044 0.619 -0.590 2.136 1.108 - 472.40 13.406 13.419 13.481 0.596 -1.284 1.293 0.596 -1.284 -1.661 0.770 -0.765 1.838 0.992 - 472.45 13.576 13.594 13.631 0.690 -1.012 1.463 0.690 -1.012 -1.480 1.010 -0.698 1.820 0.962 - 472.50 13.592 13.603 13.648 0.550 -1.112 1.479 0.550 -1.112 -1.645 0.814 -0.612 1.864 0.967 - 472.55 13.571 13.576 13.630 0.355 -1.213 1.458 0.355 -1.213 -1.769 0.517 -0.430 1.862 0.946 - 472.60 13.314 13.321 13.397 0.437 -1.427 1.201 0.437 -1.427 -1.714 0.525 -0.624 1.835 0.949 - 472.65 13.278 13.290 13.332 0.567 -1.065 1.165 0.567 -1.065 -1.241 0.661 -0.604 1.406 0.765 - 472.70 13.164 13.177 13.199 0.580 -0.767 1.051 0.580 -0.767 -0.806 0.609 -0.445 1.015 0.552 - 472.75 12.587 12.602 12.617 0.608 -0.631 0.474 0.608 -0.631 -0.299 0.288 -0.384 0.496 0.283 - 472.80 12.487 12.501 12.519 0.573 -0.683 0.375 0.573 -0.683 -0.256 0.215 -0.392 0.468 0.257 - 472.85 12.452 12.473 12.510 0.736 -0.955 0.339 0.736 -0.955 -0.324 0.249 -0.703 0.784 0.407 - 472.90 12.560 12.589 12.612 0.859 -0.767 0.447 0.859 -0.767 -0.343 0.384 -0.659 0.763 0.418 - 472.95 12.610 12.644 12.670 0.927 -0.816 0.497 0.927 -0.816 -0.406 0.461 -0.756 0.886 0.487 - 473.00 12.315 12.374 12.395 1.206 -0.721 0.202 1.206 -0.721 -0.146 0.244 -0.870 1.008 0.458 - 473.05 12.307 12.370 12.386 1.241 -0.628 0.195 1.241 -0.628 -0.122 0.242 -0.779 0.986 0.412 - 473.10 12.447 12.478 12.493 0.877 -0.616 0.334 0.877 -0.616 -0.206 0.293 -0.540 0.630 0.324 - 473.15 12.569 12.596 12.617 0.819 -0.722 0.457 0.819 -0.722 -0.330 0.374 -0.592 0.700 0.387 - 473.20 12.386 12.417 12.441 0.869 -0.781 0.274 0.869 -0.781 -0.214 0.238 -0.678 0.720 0.375 - 473.25 12.676 12.720 12.746 1.051 -0.815 0.563 1.051 -0.815 -0.459 0.592 -0.857 1.043 0.569 - 473.30 12.585 12.613 12.639 0.835 -0.806 0.472 0.835 -0.806 -0.381 0.394 -0.673 0.785 0.434 - 473.35 12.363 12.384 12.397 0.723 -0.555 0.251 0.723 -0.555 -0.139 0.181 -0.401 0.447 0.231 - 473.40 12.560 12.578 12.583 0.663 -0.376 0.447 0.663 -0.376 -0.168 0.297 -0.250 0.391 0.211 - 473.45 12.547 12.558 12.566 0.542 -0.442 0.434 0.542 -0.442 -0.192 0.235 -0.240 0.339 0.193 - 473.50 12.664 12.676 12.686 0.545 -0.502 0.552 0.545 -0.502 -0.277 0.301 -0.274 0.427 0.246 - 473.55 12.704 12.719 12.728 0.632 -0.460 0.591 0.632 -0.460 -0.272 0.373 -0.290 0.480 0.273 - 473.60 13.141 13.158 13.175 0.686 -0.662 1.028 0.686 -0.662 -0.681 0.705 -0.454 0.983 0.540 - 473.65 13.157 13.185 13.187 0.857 -0.236 1.044 0.857 -0.236 -0.246 0.895 -0.202 0.940 0.475 - 473.70 12.949 12.975 12.979 0.812 -0.306 0.837 0.812 -0.306 -0.256 0.680 -0.249 0.727 0.384 - 473.75 13.147 13.162 13.176 0.632 -0.601 1.034 0.632 -0.601 -0.622 0.654 -0.380 0.915 0.489 - 473.80 13.186 13.199 13.216 0.586 -0.684 1.073 0.586 -0.684 -0.734 0.629 -0.401 0.981 0.523 - 473.85 13.034 13.050 13.060 0.642 -0.508 0.922 0.642 -0.508 -0.468 0.592 -0.326 0.760 0.411 - 473.90 12.956 12.968 12.979 0.566 -0.532 0.843 0.566 -0.532 -0.448 0.477 -0.301 0.657 0.360 - 473.95 13.080 13.098 13.101 0.677 -0.284 0.967 0.677 -0.284 -0.275 0.655 -0.192 0.737 0.368 - 474.00 13.123 13.139 13.139 0.650 -0.045 1.010 0.650 -0.045 -0.046 0.656 -0.029 0.722 0.329 - 474.05 12.923 12.970 12.972 1.103 -0.257 0.810 1.103 -0.257 -0.208 0.894 -0.284 0.970 0.480 - 474.10 12.805 12.852 12.854 1.092 -0.249 0.693 1.092 -0.249 -0.172 0.756 -0.272 0.867 0.411 - 474.15 12.919 12.986 12.990 1.316 -0.314 0.807 1.316 -0.314 -0.254 1.062 -0.414 1.241 0.584 - 474.20 12.830 12.913 12.917 1.460 -0.323 0.718 1.460 -0.323 -0.232 1.048 -0.471 1.376 0.586 - 474.25 12.869 12.945 12.963 1.402 -0.681 0.756 1.402 -0.681 -0.514 1.059 -0.954 1.499 0.758 - 474.30 12.632 12.703 12.712 1.337 -0.490 0.519 1.337 -0.490 -0.255 0.695 -0.656 1.149 0.494 - 474.35 12.525 12.616 12.622 1.512 -0.388 0.412 1.512 -0.388 -0.160 0.623 -0.587 1.303 0.436 - 474.40 12.457 12.586 12.601 1.797 -0.620 0.344 1.797 -0.620 -0.213 0.619 -1.114 1.867 0.646 - 474.45 12.837 12.941 12.947 1.640 -0.387 0.724 1.640 -0.387 -0.280 1.187 -0.634 1.681 0.687 - 474.50 12.872 12.966 12.967 1.565 -0.095 0.759 1.565 -0.095 -0.072 1.187 -0.148 1.517 0.599 - 474.55 12.739 12.834 12.836 1.565 -0.221 0.626 1.565 -0.221 -0.138 0.979 -0.346 1.445 0.524 - 474.60 12.807 12.870 12.873 1.276 -0.257 0.694 1.276 -0.257 -0.178 0.886 -0.328 1.088 0.481 - 474.65 12.890 12.932 12.933 1.050 -0.111 0.777 1.050 -0.111 -0.086 0.816 -0.116 0.859 0.414 - 474.70 12.901 12.943 12.951 1.044 -0.468 0.788 1.044 -0.468 -0.369 0.823 -0.489 0.965 0.513 - 474.75 13.236 13.274 13.279 1.002 -0.360 1.123 1.002 -0.360 -0.404 1.125 -0.361 1.197 0.624 - 474.80 13.288 13.332 13.341 1.082 -0.495 1.175 1.082 -0.495 -0.582 1.271 -0.536 1.398 0.749 - 474.85 13.118 13.156 13.180 1.000 -0.795 1.005 1.000 -0.795 -0.800 1.006 -0.795 1.322 0.755 - 474.90 12.872 12.896 12.911 0.785 -0.626 0.759 0.785 -0.626 -0.475 0.596 -0.491 0.792 0.453 - 474.95 13.084 13.105 13.119 0.741 -0.611 0.971 0.741 -0.611 -0.594 0.720 -0.453 0.933 0.519 - 475.00 12.958 12.993 13.013 0.943 -0.721 0.846 0.943 -0.721 -0.610 0.797 -0.680 1.062 0.606 - 475.05 12.811 12.832 12.855 0.746 -0.770 0.698 0.746 -0.770 -0.537 0.521 -0.575 0.818 0.472 - 475.10 12.908 12.927 12.943 0.704 -0.643 0.795 0.704 -0.643 -0.511 0.560 -0.453 0.771 0.442 - 475.15 12.948 12.958 12.976 0.525 -0.683 0.835 0.525 -0.683 -0.570 0.438 -0.358 0.719 0.402 - 475.20 12.875 12.877 12.895 0.220 -0.670 0.762 0.220 -0.670 -0.511 0.168 -0.148 0.540 0.279 - 475.25 12.962 12.965 13.009 0.253 -1.075 0.849 0.253 -1.075 -0.913 0.215 -0.272 0.971 0.488 - 475.30 12.920 12.923 12.959 0.257 -0.975 0.807 0.257 -0.975 -0.787 0.207 -0.250 0.834 0.426 - 475.35 12.779 12.789 12.815 0.502 -0.817 0.666 0.502 -0.817 -0.544 0.334 -0.411 0.682 0.380 - 475.40 12.951 12.975 13.009 0.782 -0.939 0.838 0.782 -0.939 -0.787 0.656 -0.735 1.098 0.630 - 475.45 12.941 12.973 13.013 0.906 -1.028 0.828 0.906 -1.028 -0.851 0.751 -0.932 1.282 0.734 - 475.50 12.585 12.598 12.620 0.556 -0.749 0.473 0.556 -0.749 -0.354 0.263 -0.416 0.547 0.303 - 475.55 12.414 12.436 12.446 0.741 -0.494 0.301 0.741 -0.494 -0.149 0.223 -0.366 0.442 0.227 - 475.60 12.568 12.583 12.595 0.624 -0.546 0.455 0.624 -0.546 -0.249 0.284 -0.341 0.447 0.254 - 475.65 12.494 12.509 12.518 0.598 -0.478 0.382 0.598 -0.478 -0.182 0.228 -0.285 0.366 0.204 - 475.70 12.456 12.462 12.468 0.405 -0.380 0.343 0.405 -0.380 -0.130 0.139 -0.154 0.213 0.123 - 475.75 12.451 12.457 12.473 0.399 -0.634 0.338 0.399 -0.634 -0.214 0.135 -0.253 0.337 0.179 - 475.80 12.581 12.593 12.645 0.545 -1.150 0.468 0.545 -1.150 -0.538 0.255 -0.627 0.920 0.432 - 475.85 12.937 12.963 12.986 0.824 -0.776 0.824 0.824 -0.776 -0.640 0.679 -0.640 0.980 0.566 - 475.90 12.934 12.956 12.993 0.742 -0.982 0.821 0.742 -0.982 -0.806 0.610 -0.729 1.095 0.623 - 475.95 12.748 12.764 12.816 0.643 -1.160 0.635 0.643 -1.160 -0.736 0.409 -0.746 1.081 0.563 - 476.00 12.619 12.643 12.685 0.780 -1.028 0.506 0.780 -1.028 -0.521 0.395 -0.803 0.962 0.518 - 476.05 12.526 12.550 12.572 0.781 -0.740 0.413 0.781 -0.740 -0.306 0.323 -0.578 0.664 0.365 - 476.10 12.262 12.278 12.309 0.624 -0.861 0.150 0.624 -0.861 -0.129 0.093 -0.538 0.577 0.280 - 476.15 12.079 12.095 12.113 0.636 -0.650 -0.034 0.636 -0.650 0.022 -0.022 -0.413 0.414 0.207 - 476.20 12.152 12.162 12.181 0.510 -0.669 0.039 0.510 -0.669 -0.026 0.020 -0.341 0.355 0.171 - 476.25 12.102 12.106 12.144 0.301 -0.969 -0.011 0.301 -0.969 0.010 -0.003 -0.292 0.515 0.146 - 476.30 12.334 12.334 12.378 0.062 -1.035 0.221 0.062 -1.035 -0.229 0.014 -0.064 0.562 0.119 - 476.35 12.492 12.492 12.535 -0.080 -1.039 0.379 -0.080 -1.039 -0.394 -0.030 0.083 0.615 0.202 - 476.40 12.544 12.545 12.591 -0.196 -1.070 0.431 -0.196 -1.070 -0.461 -0.085 0.210 0.685 0.257 - 476.45 12.839 12.839 12.875 -0.020 -0.969 0.726 -0.020 -0.969 -0.703 -0.015 0.019 0.733 0.352 - 476.50 12.931 12.934 12.982 0.289 -1.117 0.818 0.289 -1.117 -0.914 0.236 -0.323 1.000 0.499 - 476.55 13.161 13.163 13.204 0.236 -1.041 1.048 0.236 -1.041 -1.091 0.247 -0.246 1.118 0.572 - 476.60 13.397 13.405 13.438 0.474 -0.938 1.284 0.474 -0.938 -1.204 0.609 -0.445 1.377 0.711 - 476.65 13.364 13.398 13.450 0.957 -1.176 1.251 0.957 -1.176 -1.472 1.197 -1.125 1.932 1.103 - 476.70 13.489 13.528 13.632 1.033 -1.677 1.376 1.033 -1.677 -2.308 1.421 -1.732 2.886 1.608 - 476.75 13.362 13.429 13.522 1.348 -1.581 1.249 1.348 -1.581 -1.974 1.684 -2.131 2.938 1.679 - 476.80 13.359 13.445 13.513 1.516 -1.356 1.246 1.516 -1.356 -1.690 1.889 -2.056 2.845 1.632 - 476.85 12.922 13.045 13.108 1.782 -1.290 0.810 1.782 -1.290 -1.044 1.442 -2.298 2.746 1.454 - 476.90 12.787 12.887 12.944 1.605 -1.207 0.674 1.605 -1.207 -0.814 1.082 -1.938 2.244 1.182 - 476.95 12.805 12.960 12.973 2.000 -0.583 0.692 2.000 -0.583 -0.404 1.384 -1.167 2.410 0.927 - 477.00 12.882 13.001 13.014 1.759 -0.563 0.769 1.759 -0.563 -0.433 1.353 -0.990 2.001 0.866 - 477.05 13.092 13.158 13.163 1.312 -0.374 0.979 1.312 -0.374 -0.366 1.285 -0.491 1.411 0.712 - 477.10 13.279 13.361 13.365 1.474 -0.352 1.166 1.474 -0.352 -0.410 1.719 -0.518 1.828 0.921 - 477.15 13.105 13.214 13.221 1.694 -0.439 0.992 1.694 -0.439 -0.436 1.681 -0.743 2.023 0.944 - 477.20 12.767 12.840 12.853 1.371 -0.571 0.654 1.371 -0.571 -0.374 0.896 -0.783 1.317 0.624 - 477.25 12.875 12.941 12.950 1.298 -0.484 0.763 1.298 -0.484 -0.369 0.990 -0.628 1.250 0.614 - 477.30 13.126 13.197 13.207 1.361 -0.532 1.014 1.361 -0.532 -0.539 1.379 -0.724 1.581 0.824 - 477.35 13.622 13.699 13.738 1.445 -1.034 1.510 1.445 -1.034 -1.561 2.181 -1.494 2.718 1.535 - 477.40 13.475 13.539 13.574 1.320 -0.970 1.362 1.320 -0.970 -1.321 1.797 -1.280 2.269 1.286 - 477.45 13.323 13.375 13.409 1.176 -0.959 1.210 1.176 -0.959 -1.160 1.423 -1.127 1.883 1.077 - 477.50 13.355 13.429 13.450 1.407 -0.743 1.242 1.407 -0.743 -0.924 1.748 -1.046 2.038 1.118 - 477.55 13.469 13.521 13.555 1.182 -0.951 1.357 1.182 -0.951 -1.291 1.604 -1.125 2.072 1.173 - 477.60 13.470 13.514 13.545 1.086 -0.918 1.358 1.086 -0.918 -1.247 1.474 -0.997 1.933 1.087 - 477.65 13.341 13.391 13.430 1.154 -1.025 1.228 1.154 -1.025 -1.259 1.418 -1.183 1.946 1.118 - 477.70 13.225 13.260 13.326 0.965 -1.327 1.112 0.965 -1.327 -1.475 1.073 -1.280 1.964 1.114 - 477.75 13.577 13.614 13.676 1.004 -1.295 1.465 1.004 -1.295 -1.897 1.471 -1.300 2.415 1.365 - 477.80 13.726 13.787 13.888 1.300 -1.672 1.613 1.300 -1.672 -2.697 2.097 -2.173 3.544 2.024 - 477.85 13.585 13.665 13.751 1.471 -1.534 1.473 1.471 -1.534 -2.258 2.166 -2.256 3.342 1.929 - 477.90 13.623 13.691 13.789 1.365 -1.637 1.510 1.365 -1.637 -2.472 2.062 -2.235 3.412 1.960 - 477.95 14.069 14.114 14.255 1.123 -2.002 1.956 1.123 -2.002 -3.915 2.197 -2.248 4.547 2.510 - 478.00 14.116 14.200 14.340 1.549 -1.999 2.003 1.549 -1.999 -4.004 3.102 -3.097 5.204 2.968 - 478.05 14.033 14.075 14.176 1.076 -1.689 1.921 1.076 -1.689 -3.244 2.066 -1.817 3.850 2.127 - 478.10 14.110 14.160 14.243 1.185 -1.535 1.997 1.185 -1.535 -3.066 2.366 -1.819 3.874 2.139 - 478.15 13.901 13.966 14.038 1.341 -1.428 1.788 1.341 -1.428 -2.553 2.398 -1.915 3.518 1.996 - 478.20 14.094 14.114 14.194 0.750 -1.504 1.981 0.750 -1.504 -2.980 1.485 -1.127 3.375 1.758 - 478.25 14.141 14.174 14.217 0.957 -1.109 2.029 0.957 -1.109 -2.250 1.941 -1.061 3.130 1.578 - 478.30 14.100 14.121 14.149 0.763 -0.881 1.988 0.763 -0.881 -1.752 1.517 -0.673 2.655 1.207 - 478.35 14.186 14.207 14.256 0.779 -1.179 2.073 0.779 -1.179 -2.444 1.615 -0.919 3.148 1.535 - 478.40 14.197 14.217 14.277 0.753 -1.310 2.084 0.753 -1.310 -2.731 1.570 -0.987 3.314 1.651 - 478.45 13.983 13.990 14.078 0.445 -1.570 1.870 0.445 -1.570 -2.936 0.832 -0.698 3.080 1.565 - 478.50 14.160 14.160 14.246 0.155 -1.562 2.047 0.155 -1.562 -3.197 0.316 -0.241 3.326 1.611 - 478.55 14.279 14.285 14.395 0.397 -1.780 2.166 0.397 -1.780 -3.856 0.861 -0.707 4.010 2.007 - 478.60 14.162 14.168 14.315 0.410 -2.043 2.049 0.410 -2.043 -4.187 0.840 -0.837 4.271 2.176 - 478.65 14.376 14.391 14.576 0.665 -2.312 2.263 0.665 -2.312 -5.232 1.506 -1.538 5.454 2.829 - 478.70 14.610 14.614 14.751 0.305 -2.008 2.498 0.305 -2.008 -5.015 0.761 -0.611 5.181 2.554 - 478.75 14.546 14.558 14.703 0.604 -2.056 2.433 0.604 -2.056 -5.002 1.470 -1.242 5.256 2.680 - 478.80 14.560 14.579 14.753 0.739 -2.262 2.447 0.739 -2.262 -5.536 1.809 -1.672 5.826 3.030 - 478.85 14.556 14.557 14.744 0.191 -2.339 2.443 0.191 -2.339 -5.714 0.467 -0.447 5.737 2.875 - 478.90 13.955 13.955 14.197 -0.004 -2.611 1.842 -0.004 -2.611 -4.811 -0.007 0.010 5.106 2.405 - 478.95 13.604 13.607 13.903 -0.265 -2.852 1.492 -0.265 -2.852 -4.255 -0.395 0.756 5.216 2.170 - 479.00 13.572 13.572 13.854 -0.149 -2.780 1.459 -0.149 -2.780 -4.056 -0.217 0.413 4.940 2.041 - 479.05 13.739 13.744 14.048 -0.379 -2.908 1.626 -0.379 -2.908 -4.729 -0.616 1.101 5.623 2.447 - 479.10 14.106 14.110 14.412 -0.345 -2.938 1.993 -0.345 -2.938 -5.855 -0.688 1.014 6.361 2.991 - 479.15 14.043 14.046 14.336 0.250 -2.870 1.930 0.250 -2.870 -5.540 0.483 -0.718 6.013 2.804 - 479.20 13.946 13.952 14.199 0.402 -2.637 1.833 0.402 -2.637 -4.835 0.738 -1.061 5.239 2.502 - 479.25 13.966 13.968 14.236 0.243 -2.745 1.853 0.243 -2.745 -5.088 0.450 -0.666 5.515 2.575 - 479.30 14.141 14.141 14.328 -0.042 -2.312 2.028 -0.042 -2.312 -4.689 -0.085 0.097 4.730 2.345 - 479.35 13.688 13.689 13.960 -0.080 -2.737 1.576 -0.080 -2.737 -4.313 -0.126 0.219 4.990 2.160 - 479.40 13.818 13.819 14.107 -0.140 -2.837 1.706 -0.140 -2.837 -4.839 -0.238 0.396 5.488 2.430 - 479.45 13.929 13.929 14.269 -0.027 -3.096 1.816 -0.027 -3.096 -5.623 -0.048 0.082 6.443 2.812 - 479.50 14.135 14.136 14.434 -0.061 -2.919 2.023 -0.061 -2.919 -5.903 -0.124 0.179 6.307 2.954 - 479.55 14.121 14.122 14.373 0.165 -2.675 2.008 0.165 -2.675 -5.372 0.331 -0.440 5.608 2.700 - 479.60 13.630 13.630 13.868 -0.047 -2.556 1.517 -0.047 -2.556 -3.877 -0.071 0.119 4.418 1.940 - 479.65 13.733 13.733 13.923 -0.081 -2.291 1.620 -0.081 -2.291 -3.713 -0.131 0.186 3.941 1.860 - 479.70 13.900 13.901 14.014 -0.172 -1.776 1.787 -0.172 -1.776 -3.175 -0.308 0.306 3.190 1.602 - 479.75 13.851 13.851 13.941 -0.160 -1.578 1.738 -0.160 -1.578 -2.742 -0.278 0.252 2.767 1.384 - 479.80 13.949 13.950 14.050 -0.148 -1.677 1.836 -0.148 -1.677 -3.080 -0.271 0.248 3.103 1.551 - 479.85 13.883 13.886 13.954 0.318 -1.376 1.770 0.318 -1.376 -2.436 0.563 -0.438 2.564 1.269 - 479.90 13.676 13.684 13.737 0.480 -1.200 1.563 0.480 -1.200 -1.875 0.751 -0.576 2.056 1.050 - 479.95 13.458 13.469 13.492 0.528 -0.789 1.345 0.528 -0.789 -1.062 0.711 -0.417 1.356 0.672 - 480.00 13.474 13.483 13.503 0.492 -0.738 1.361 0.492 -0.738 -1.005 0.670 -0.363 1.320 0.631 - 480.05 13.364 13.368 13.380 0.306 -0.577 1.252 0.306 -0.577 -0.722 0.384 -0.177 0.996 0.418 - 480.10 13.736 13.744 13.768 0.486 -0.796 1.623 0.486 -0.796 -1.293 0.789 -0.387 1.752 0.781 - 480.15 13.495 13.509 13.528 0.626 -0.723 1.382 0.626 -0.723 -0.999 0.865 -0.452 1.412 0.698 - 480.20 13.454 13.471 13.474 0.681 -0.297 1.341 0.681 -0.297 -0.398 0.913 -0.202 1.175 0.508 - 480.25 13.514 13.529 13.542 0.625 -0.594 1.401 0.625 -0.594 -0.832 0.876 -0.371 1.354 0.632 - 480.30 13.437 13.460 13.470 0.787 -0.538 1.324 0.787 -0.538 -0.713 1.042 -0.424 1.331 0.666 - 480.35 13.280 13.311 13.317 0.907 -0.397 1.168 0.907 -0.397 -0.463 1.059 -0.360 1.171 0.605 - 480.40 13.497 13.517 13.518 0.739 -0.175 1.384 0.739 -0.175 -0.242 1.024 -0.129 1.247 0.530 - 480.45 13.680 13.709 13.709 0.896 0.051 1.567 0.896 0.051 0.080 1.404 0.046 1.630 0.703 - 480.50 13.686 13.707 13.707 0.751 0.133 1.573 0.751 0.133 0.210 1.182 0.100 1.529 0.602 - 480.55 13.394 13.412 13.414 0.698 0.204 1.281 0.698 0.204 0.262 0.894 0.143 1.085 0.471 - 480.60 13.238 13.287 13.287 1.137 0.037 1.125 1.137 0.037 0.042 1.279 0.042 1.280 0.640 - 480.65 13.228 13.297 13.301 1.354 -0.345 1.115 1.354 -0.345 -0.385 1.510 -0.467 1.598 0.813 - 480.70 13.231 13.327 13.329 1.599 -0.230 1.118 1.599 -0.230 -0.257 1.787 -0.367 1.929 0.921 - 480.75 13.220 13.284 13.289 1.306 -0.351 1.107 1.306 -0.351 -0.389 1.446 -0.459 1.527 0.783 - 480.80 13.173 13.213 13.219 1.030 -0.417 1.060 1.030 -0.417 -0.442 1.092 -0.429 1.179 0.627 - 480.85 13.067 13.130 13.155 1.282 -0.808 0.954 1.282 -0.808 -0.771 1.223 -1.035 1.603 0.889 - 480.90 12.918 12.979 13.003 1.257 -0.792 0.805 1.257 -0.792 -0.638 1.012 -0.996 1.428 0.778 - 480.95 13.108 13.147 13.170 1.014 -0.780 0.995 1.014 -0.780 -0.777 1.009 -0.791 1.314 0.750 - 481.00 13.206 13.246 13.269 1.023 -0.783 1.093 1.023 -0.783 -0.856 1.119 -0.801 1.428 0.810 - 481.05 13.122 13.156 13.178 0.937 -0.765 1.010 0.937 -0.765 -0.772 0.946 -0.717 1.241 0.708 - 481.10 13.017 13.023 13.032 0.381 -0.500 0.904 0.381 -0.500 -0.452 0.345 -0.191 0.606 0.300 - 481.15 13.081 13.093 13.113 0.552 -0.724 0.968 0.552 -0.724 -0.701 0.535 -0.400 0.883 0.484 - 481.20 12.824 12.827 12.836 0.296 -0.462 0.711 0.296 -0.462 -0.329 0.211 -0.137 0.404 0.207 - 481.25 12.765 12.766 12.767 0.143 -0.171 0.653 0.143 -0.171 -0.111 0.094 -0.025 0.238 0.074 - 481.30 12.651 12.656 12.669 0.353 -0.592 0.538 0.353 -0.592 -0.319 0.190 -0.209 0.382 0.213 - 481.35 12.670 12.670 12.671 0.050 -0.136 0.557 0.050 -0.136 -0.076 0.028 -0.007 0.166 0.041 - 481.40 12.782 12.785 12.786 0.281 -0.115 0.669 0.281 -0.115 -0.077 0.188 -0.032 0.270 0.103 - 481.45 12.940 12.957 12.957 0.656 -0.135 0.827 0.656 -0.135 -0.111 0.543 -0.088 0.567 0.281 - 481.50 12.926 12.942 12.943 0.626 0.197 0.814 0.626 0.197 0.160 0.509 0.123 0.546 0.274 - 481.55 12.741 12.770 12.770 0.863 0.114 0.628 0.863 0.114 0.071 0.542 0.098 0.576 0.278 - 481.60 12.801 12.824 12.825 0.775 -0.174 0.688 0.775 -0.174 -0.120 0.533 -0.135 0.552 0.281 - 481.65 12.921 12.941 12.942 0.725 -0.095 0.808 0.725 -0.095 -0.077 0.586 -0.069 0.594 0.297 - 481.70 12.658 12.710 12.710 1.143 -0.117 0.546 1.143 -0.117 -0.064 0.624 -0.133 0.809 0.320 - 481.75 12.782 12.828 12.830 1.086 -0.232 0.669 1.086 -0.232 -0.155 0.727 -0.251 0.841 0.392 - 481.80 13.069 13.092 13.097 0.768 -0.361 0.956 0.768 -0.361 -0.345 0.734 -0.277 0.817 0.429 - 481.85 13.040 13.062 13.072 0.760 -0.518 0.927 0.760 -0.518 -0.480 0.705 -0.394 0.853 0.470 - 481.90 13.301 13.314 13.348 0.592 -0.948 1.188 0.592 -0.948 -1.126 0.703 -0.561 1.330 0.721 - 481.95 13.586 13.589 13.626 0.273 -1.006 1.473 0.273 -1.006 -1.483 0.403 -0.275 1.629 0.781 - 482.00 13.618 13.623 13.652 0.332 -0.897 1.506 0.332 -0.897 -1.351 0.500 -0.298 1.591 0.736 - 482.05 13.714 13.722 13.751 0.451 -0.905 1.601 0.451 -0.905 -1.449 0.723 -0.408 1.793 0.835 - 482.10 13.657 13.683 13.714 0.848 -0.923 1.544 0.848 -0.923 -1.425 1.309 -0.782 1.977 1.043 - 482.15 13.789 13.799 13.824 0.516 -0.828 1.676 0.516 -0.828 -1.388 0.865 -0.427 1.881 0.845 - 482.20 13.800 13.833 13.869 0.957 -0.995 1.687 0.957 -0.995 -1.680 1.615 -0.953 2.377 1.259 - 482.25 13.881 13.940 13.994 1.289 -1.222 1.768 1.289 -1.222 -2.161 2.279 -1.576 3.140 1.757 - 482.30 13.848 13.874 13.994 0.858 -1.829 1.735 0.858 -1.829 -3.173 1.488 -1.568 3.545 1.919 - 482.35 14.144 14.160 14.255 0.659 -1.645 2.032 0.659 -1.645 -3.342 1.338 -1.084 3.634 1.880 - 482.40 14.030 14.031 14.123 0.150 -1.608 1.917 0.150 -1.608 -3.082 0.287 -0.241 3.142 1.553 - 482.45 14.249 14.249 14.352 0.143 -1.715 2.136 0.143 -1.715 -3.663 0.306 -0.246 3.762 1.842 - 482.50 14.173 14.174 14.262 0.205 -1.580 2.060 0.205 -1.580 -3.255 0.422 -0.324 3.391 1.649 - 482.55 14.187 14.190 14.270 0.291 -1.506 2.074 0.291 -1.506 -3.124 0.605 -0.439 3.328 1.606 - 482.60 13.868 13.874 13.968 0.431 -1.609 1.755 0.431 -1.609 -2.825 0.757 -0.694 2.928 1.503 - 482.65 13.560 13.562 13.638 0.210 -1.445 1.447 0.210 -1.445 -2.091 0.303 -0.303 2.113 1.067 - 482.70 13.530 13.530 13.590 0.108 -1.270 1.417 0.108 -1.270 -1.801 0.153 -0.137 1.817 0.906 - 482.75 13.486 13.486 13.542 0.060 -1.238 1.373 0.060 -1.238 -1.699 0.082 -0.074 1.710 0.851 - 482.80 13.604 13.608 13.658 -0.326 -1.168 1.491 -0.326 -1.168 -1.742 -0.486 0.381 1.847 0.924 - 482.85 13.875 13.884 13.943 -0.501 -1.285 1.762 -0.501 -1.285 -2.264 -0.883 0.644 2.503 1.257 - 482.90 14.089 14.107 14.176 -0.729 -1.392 1.976 -0.729 -1.392 -2.749 -1.440 1.014 3.186 1.633 - 482.95 14.031 14.044 14.088 -0.609 -1.114 1.918 -0.609 -1.114 -2.137 -1.168 0.678 2.645 1.264 - 483.00 14.009 14.034 14.103 -0.841 -1.392 1.896 -0.841 -1.392 -2.640 -1.595 1.172 3.120 1.650 - 483.05 14.265 14.306 14.367 -1.088 -1.316 2.152 -1.088 -1.316 -2.833 -2.342 1.432 3.774 1.972 - 483.10 14.238 14.285 14.318 -1.156 -0.982 2.125 -1.156 -0.982 -2.087 -2.457 1.136 3.408 1.709 - 483.15 14.362 14.407 14.463 -1.148 -1.268 2.249 -1.148 -1.268 -2.851 -2.581 1.455 3.991 2.056 - 483.20 14.106 14.149 14.214 -1.102 -1.358 1.993 -1.102 -1.358 -2.707 -2.196 1.496 3.515 1.896 - 483.25 13.853 13.933 13.966 -1.489 -0.960 1.740 -1.489 -0.960 -1.671 -2.591 1.430 3.084 1.699 - 483.30 13.712 13.782 13.819 -1.385 -1.016 1.599 -1.385 -1.016 -1.624 -2.216 1.407 2.754 1.543 - 483.35 13.500 13.545 13.585 -1.112 -1.031 1.387 -1.112 -1.031 -1.430 -1.542 1.147 2.112 1.198 - 483.40 13.312 13.344 13.358 -0.930 -0.604 1.199 -0.930 -0.604 -0.724 -1.115 0.562 1.334 0.722 - 483.45 13.345 13.360 13.396 -0.640 -0.983 1.232 -0.640 -0.983 -1.211 -0.788 0.629 1.447 0.788 - 483.50 13.394 13.424 13.456 -0.903 -0.924 1.281 -0.903 -0.924 -1.183 -1.157 0.834 1.655 0.927 - 483.55 13.306 13.360 13.407 -1.195 -1.116 1.194 -1.195 -1.116 -1.332 -1.427 1.334 2.049 1.182 - 483.60 13.193 13.244 13.279 -1.164 -0.963 1.080 -1.164 -0.963 -1.040 -1.258 1.121 1.725 0.990 - 483.65 13.251 13.342 13.364 -1.557 -0.768 1.138 -1.557 -0.768 -0.875 -1.772 1.196 2.154 1.155 - 483.70 13.419 13.519 13.555 -1.638 -0.994 1.306 -1.638 -0.994 -1.299 -2.140 1.629 2.689 1.493 - 483.75 13.213 13.279 13.337 -1.321 -1.238 1.100 -1.321 -1.238 -1.363 -1.453 1.636 2.244 1.289 - 483.80 13.040 13.104 13.158 -1.299 -1.193 0.927 -1.299 -1.193 -1.106 -1.204 1.550 1.985 1.126 - 483.85 13.141 13.177 13.255 -0.976 -1.428 1.028 -0.976 -1.428 -1.468 -1.004 1.394 2.025 1.130 - 483.90 13.183 13.207 13.265 -0.800 -1.236 1.070 -0.800 -1.236 -1.323 -0.856 0.989 1.657 0.930 - 483.95 13.198 13.216 13.272 -0.680 -1.220 1.086 -0.680 -1.220 -1.324 -0.738 0.829 1.564 0.864 - 484.00 13.172 13.206 13.251 -0.940 -1.097 1.059 -0.940 -1.097 -1.162 -0.996 1.031 1.605 0.923 - 484.05 13.524 13.556 13.605 -0.940 -1.143 1.411 -0.940 -1.143 -1.613 -1.326 1.075 2.091 1.174 - 484.10 13.794 13.833 13.897 -1.036 -1.333 1.681 -1.036 -1.333 -2.242 -1.741 1.381 2.839 1.578 - 484.15 13.579 13.630 13.680 -1.172 -1.174 1.467 -1.172 -1.174 -1.722 -1.719 1.376 2.451 1.397 - 484.20 13.642 13.687 13.762 -1.119 -1.433 1.529 -1.119 -1.433 -2.191 -1.711 1.604 2.822 1.605 - 484.25 13.383 13.406 13.487 -0.786 -1.479 1.270 -0.786 -1.479 -1.879 -0.998 1.163 2.209 1.212 - 484.30 13.551 13.601 13.685 -1.169 -1.513 1.438 -1.169 -1.513 -2.176 -1.681 1.769 2.862 1.635 - 484.35 13.556 13.596 13.669 -1.043 -1.415 1.443 -1.043 -1.415 -2.042 -1.505 1.475 2.586 1.467 - 484.40 13.212 13.253 13.297 -1.045 -1.085 1.099 -1.045 -1.085 -1.193 -1.149 1.135 1.739 1.004 - 484.45 13.115 13.148 13.188 -0.933 -1.026 1.002 -0.933 -1.026 -1.028 -0.935 0.958 1.464 0.844 - 484.50 13.197 13.228 13.275 -0.913 -1.113 1.084 -0.913 -1.113 -1.206 -0.990 1.017 1.624 0.931 - 484.55 13.232 13.247 13.293 -0.633 -1.113 1.119 -0.633 -1.113 -1.245 -0.708 0.704 1.446 0.798 - 484.60 13.362 13.388 13.424 -0.837 -0.979 1.249 -0.837 -0.979 -1.224 -1.046 0.820 1.610 0.903 - 484.65 13.184 13.228 13.265 -1.080 -0.984 1.071 -1.080 -0.984 -1.054 -1.157 1.063 1.642 0.946 - 484.70 12.936 12.998 13.013 -1.277 -0.624 0.823 -1.277 -0.624 -0.514 -1.051 0.797 1.348 0.708 - 484.75 12.839 12.887 12.897 -1.108 -0.507 0.726 -1.108 -0.507 -0.368 -0.805 0.562 1.006 0.524 - 484.80 12.808 12.838 12.855 -0.887 -0.662 0.695 -0.887 -0.662 -0.460 -0.616 0.587 0.854 0.484 - 484.85 13.194 13.233 13.245 -1.018 -0.565 1.081 -1.018 -0.565 -0.611 -1.101 0.575 1.262 0.692 - 484.90 13.273 13.302 13.308 -0.871 -0.411 1.160 -0.871 -0.411 -0.477 -1.011 0.358 1.137 0.587 - 484.95 13.029 13.061 13.063 -0.917 -0.209 0.916 -0.917 -0.209 -0.191 -0.840 0.191 0.862 0.441 - 485.00 13.225 13.238 13.238 -0.593 0.021 1.112 -0.593 0.021 0.023 -0.659 -0.012 0.795 0.330 - 485.05 13.397 13.430 13.430 -0.935 0.066 1.285 -0.935 0.066 0.085 -1.202 -0.062 1.265 0.603 - 485.10 13.557 13.601 13.601 -1.093 -0.018 1.444 -1.093 -0.018 -0.026 -1.578 0.020 1.640 0.789 - 485.15 13.527 13.575 13.576 -1.141 0.174 1.414 -1.141 0.174 0.246 -1.613 -0.199 1.666 0.822 - 485.20 13.696 13.735 13.738 -1.037 0.274 1.583 -1.037 0.274 0.434 -1.642 -0.284 1.829 0.861 - 485.25 13.700 13.738 13.743 -1.018 0.367 1.587 -1.018 0.367 0.582 -1.615 -0.373 1.845 0.878 - 485.30 13.396 13.413 13.414 -0.666 0.202 1.283 -0.666 0.202 0.259 -0.855 -0.135 1.066 0.452 - 485.35 13.135 13.147 13.147 -0.561 0.077 1.022 -0.561 0.077 0.079 -0.573 -0.043 0.683 0.290 - 485.40 13.242 13.246 13.246 -0.335 0.035 1.129 -0.335 0.035 0.040 -0.378 -0.012 0.694 0.190 - 485.45 13.003 13.014 13.015 -0.537 0.191 0.890 -0.537 0.191 0.170 -0.478 -0.102 0.559 0.259 - 485.50 12.999 13.005 13.005 -0.396 0.082 0.886 -0.396 0.082 0.073 -0.351 -0.033 0.474 0.180 - 485.55 13.114 13.117 13.119 -0.257 0.262 1.001 -0.257 0.262 0.263 -0.257 -0.067 0.569 0.187 - 485.60 12.805 12.814 12.824 -0.463 0.518 0.692 -0.463 0.518 0.359 -0.320 -0.240 0.481 0.269 - 485.65 13.141 13.151 13.151 -0.527 -0.006 1.028 -0.527 -0.006 -0.006 -0.542 0.003 0.667 0.271 - 485.70 13.046 13.046 13.049 -0.065 0.306 0.933 -0.065 0.306 0.285 -0.060 -0.020 0.484 0.146 - 485.75 13.090 13.091 13.100 -0.159 0.483 0.978 -0.159 0.483 0.472 -0.156 -0.077 0.607 0.251 - 485.80 12.702 12.712 12.730 -0.507 0.670 0.589 -0.507 0.670 0.395 -0.299 -0.340 0.526 0.300 - 485.85 12.632 12.638 12.657 -0.390 0.701 0.519 -0.390 0.701 0.364 -0.202 -0.273 0.456 0.249 - 485.90 12.567 12.573 12.577 -0.396 0.294 0.454 -0.396 0.294 0.134 -0.180 -0.116 0.225 0.126 - 485.95 12.663 12.667 12.670 -0.310 0.267 0.550 -0.310 0.267 0.147 -0.170 -0.083 0.235 0.120 - 486.00 12.714 12.715 12.717 -0.187 0.178 0.601 -0.187 0.178 0.107 -0.113 -0.033 0.214 0.079 - 486.05 12.484 12.488 12.488 -0.339 0.059 0.371 -0.339 0.059 0.022 -0.126 -0.020 0.128 0.065 - 486.10 12.521 12.539 12.542 -0.683 0.287 0.408 -0.683 0.287 0.117 -0.278 -0.196 0.357 0.180 - 486.15 12.416 12.445 12.449 -0.847 0.298 0.304 -0.847 0.298 0.091 -0.257 -0.253 0.449 0.186 - 486.20 12.656 12.681 12.683 -0.798 0.192 0.543 -0.798 0.192 0.105 -0.434 -0.153 0.484 0.236 - 486.25 12.679 12.692 12.693 -0.567 0.144 0.566 -0.567 0.144 0.081 -0.321 -0.082 0.332 0.171 - 486.30 12.566 12.572 12.574 -0.413 0.222 0.453 -0.413 0.222 0.100 -0.187 -0.091 0.212 0.116 - 486.35 12.593 12.594 12.599 -0.188 0.352 0.480 -0.188 0.352 0.169 -0.090 -0.066 0.195 0.101 - 486.40 12.565 12.566 12.580 -0.075 0.592 0.453 -0.075 0.592 0.268 -0.034 -0.044 0.280 0.137 - 486.45 12.282 12.283 12.289 -0.202 0.392 0.169 -0.202 0.392 0.066 -0.034 -0.079 0.112 0.054 - 486.50 12.242 12.244 12.258 0.218 0.592 0.129 0.218 0.592 0.076 0.028 0.129 0.208 0.076 - 486.55 12.240 12.240 12.248 0.056 0.448 0.127 0.056 0.448 0.057 0.007 0.025 0.110 0.031 - 486.60 12.327 12.327 12.327 0.004 0.074 0.214 0.004 0.074 0.016 0.001 0.000 0.026 0.008 - 486.65 12.477 12.477 12.477 0.012 -0.086 0.364 0.012 -0.086 -0.031 0.004 -0.001 0.070 0.016 - 486.70 12.436 12.437 12.439 -0.115 -0.256 0.323 -0.115 -0.256 -0.083 -0.037 0.029 0.092 0.048 - 486.75 12.739 12.742 12.744 -0.282 -0.216 0.626 -0.282 -0.216 -0.135 -0.177 0.061 0.259 0.115 - 486.80 12.743 12.752 12.755 -0.483 -0.294 0.630 -0.483 -0.294 -0.185 -0.304 0.142 0.358 0.192 - 486.85 12.920 12.925 12.932 -0.356 -0.421 0.807 -0.356 -0.421 -0.340 -0.287 0.150 0.478 0.235 - 486.90 12.526 12.526 12.528 0.004 -0.229 0.413 0.004 -0.229 -0.095 0.002 -0.001 0.111 0.047 - 486.95 12.655 12.655 12.660 -0.029 -0.355 0.542 -0.029 -0.355 -0.192 -0.016 0.010 0.210 0.097 - 487.00 12.585 12.591 12.602 -0.384 -0.537 0.472 -0.384 -0.537 -0.253 -0.181 0.206 0.329 0.187 - 487.05 12.516 12.522 12.530 -0.381 -0.455 0.403 -0.381 -0.455 -0.183 -0.153 0.173 0.257 0.148 - 487.10 12.226 12.227 12.241 -0.160 -0.567 0.114 -0.160 -0.567 -0.064 -0.018 0.091 0.180 0.056 - 487.15 12.838 12.839 12.846 0.081 -0.435 0.726 0.081 -0.435 -0.316 0.059 -0.035 0.361 0.162 - 487.20 13.012 13.015 13.021 -0.282 -0.396 0.899 -0.282 -0.396 -0.356 -0.254 0.112 0.523 0.226 - 487.25 12.770 12.773 12.776 -0.258 -0.284 0.658 -0.258 -0.284 -0.187 -0.170 0.073 0.290 0.131 - 487.30 12.754 12.756 12.758 -0.218 -0.243 0.641 -0.218 -0.243 -0.156 -0.140 0.053 0.259 0.108 - 487.35 12.782 12.802 12.805 -0.717 -0.244 0.669 -0.717 -0.244 -0.163 -0.480 0.175 0.511 0.268 - 487.40 13.176 13.179 13.179 -0.266 0.059 1.063 -0.266 0.059 0.063 -0.283 -0.016 0.602 0.145 - 487.45 13.284 13.296 13.296 -0.570 0.105 1.171 -0.570 0.105 0.123 -0.668 -0.060 0.854 0.341 - 487.50 13.261 13.272 13.273 -0.521 0.194 1.149 -0.521 0.194 0.223 -0.598 -0.101 0.814 0.323 - 487.55 13.358 13.370 13.374 -0.548 0.325 1.246 -0.548 0.325 0.405 -0.682 -0.178 0.979 0.407 - 487.60 13.166 13.166 13.178 -0.145 0.558 1.053 -0.145 0.558 0.587 -0.152 -0.081 0.720 0.306 - 487.65 13.368 13.370 13.376 0.213 0.390 1.255 0.213 0.390 0.489 0.267 0.083 0.886 0.282 - 487.70 12.976 12.981 12.985 0.327 0.352 0.864 0.327 0.352 0.304 0.283 0.115 0.488 0.215 - 487.75 12.643 12.650 12.665 0.423 0.627 0.530 0.423 0.627 0.332 0.224 0.265 0.426 0.240 - 487.80 12.747 12.751 12.769 0.288 0.689 0.635 0.288 0.689 0.437 0.183 0.198 0.480 0.257 - 487.85 12.668 12.699 12.709 0.890 0.499 0.555 0.890 0.499 0.277 0.494 0.444 0.675 0.360 - 487.90 12.629 12.701 12.702 1.347 0.206 0.516 1.347 0.206 0.106 0.695 0.277 1.062 0.378 - 487.95 12.756 12.814 12.818 1.224 -0.286 0.643 1.224 -0.286 -0.184 0.787 -0.351 0.997 0.441 - 488.00 12.939 13.005 13.005 1.312 0.043 0.826 1.312 0.043 0.036 1.084 0.057 1.203 0.543 - 488.05 12.618 12.663 12.664 1.064 0.151 0.505 1.064 0.151 0.076 0.538 0.161 0.705 0.283 - 488.10 12.675 12.741 12.741 1.288 -0.037 0.562 1.288 -0.037 -0.021 0.725 -0.047 0.989 0.363 - 488.15 12.815 12.887 12.887 1.361 0.018 0.702 1.361 0.018 0.013 0.955 0.025 1.172 0.478 - 488.20 12.793 12.846 12.848 1.159 -0.249 0.681 1.159 -0.249 -0.169 0.789 -0.289 0.935 0.429 - 488.25 12.861 12.978 12.997 1.745 -0.687 0.748 1.745 -0.687 -0.513 1.305 -1.198 2.038 0.922 - 488.30 12.683 12.816 12.835 1.841 -0.691 0.571 1.841 -0.691 -0.394 1.051 -1.272 2.096 0.848 - 488.35 12.913 13.061 13.066 1.960 -0.342 0.800 1.960 -0.342 -0.274 1.569 -0.670 2.300 0.864 - 488.40 12.689 12.859 12.861 2.085 -0.232 0.576 2.085 -0.232 -0.134 1.201 -0.483 2.367 0.651 - 488.45 12.689 12.769 12.771 1.425 -0.205 0.577 1.425 -0.205 -0.118 0.822 -0.292 1.203 0.440 - 488.50 12.743 12.817 12.817 1.368 -0.042 0.631 1.368 -0.042 -0.027 0.863 -0.058 1.136 0.433 - 488.55 12.699 12.753 12.753 1.172 -0.040 0.586 1.172 -0.040 -0.023 0.687 -0.047 0.859 0.344 - 488.60 12.689 12.727 12.728 0.979 -0.172 0.576 0.979 -0.172 -0.099 0.564 -0.168 0.660 0.298 - 488.65 12.607 12.633 12.644 0.807 -0.517 0.495 0.807 -0.517 -0.256 0.399 -0.417 0.581 0.316 - 488.70 12.690 12.702 12.713 0.544 -0.528 0.577 0.544 -0.528 -0.305 0.314 -0.287 0.454 0.262 - 488.75 12.693 12.703 12.711 0.493 -0.446 0.581 0.493 -0.446 -0.259 0.286 -0.220 0.390 0.222 - 488.80 12.325 12.341 12.353 0.618 -0.565 0.212 0.618 -0.565 -0.120 0.131 -0.349 0.373 0.196 - 488.85 12.327 12.356 12.368 0.855 -0.551 0.214 0.855 -0.551 -0.118 0.183 -0.471 0.540 0.260 - 488.90 11.965 11.993 12.002 0.814 -0.454 -0.147 0.814 -0.454 0.067 -0.120 -0.370 0.446 0.197 - 488.95 11.586 11.598 11.620 0.530 -0.710 -0.527 0.530 -0.710 0.374 -0.279 -0.376 0.531 0.300 - 489.00 11.507 11.521 11.548 0.564 -0.792 -0.605 0.564 -0.792 0.480 -0.342 -0.447 0.656 0.370 - 489.05 11.753 11.782 11.806 0.821 -0.752 -0.360 0.821 -0.752 0.270 -0.295 -0.618 0.685 0.368 - 489.10 11.669 11.721 11.766 1.109 -1.021 -0.444 1.109 -1.021 0.453 -0.493 -1.132 1.235 0.658 - 489.15 11.936 11.971 11.991 0.908 -0.700 -0.176 0.908 -0.700 0.124 -0.160 -0.636 0.673 0.334 - 489.20 11.991 12.009 12.028 0.668 -0.674 -0.122 0.668 -0.674 0.082 -0.082 -0.450 0.458 0.233 - 489.25 11.885 11.923 11.953 0.958 -0.850 -0.228 0.958 -0.850 0.194 -0.219 -0.815 0.846 0.433 - 489.30 11.916 11.995 12.034 1.369 -0.967 -0.196 1.369 -0.967 0.190 -0.269 -1.323 1.424 0.682 - 489.35 11.816 11.862 11.910 1.047 -1.060 -0.297 1.047 -1.060 0.314 -0.311 -1.110 1.154 0.597 - 489.40 11.656 11.696 11.740 0.962 -1.020 -0.457 0.962 -1.020 0.466 -0.439 -0.981 1.087 0.586 - 489.45 11.390 11.406 11.465 0.601 -1.167 -0.723 0.601 -1.167 0.844 -0.435 -0.702 1.123 0.590 - 489.50 11.098 11.123 11.145 0.746 -0.710 -1.015 0.746 -0.710 0.721 -0.757 -0.530 1.046 0.586 - 489.55 11.022 11.036 11.051 0.548 -0.572 -1.091 0.548 -0.572 0.624 -0.598 -0.314 0.909 0.460 - 489.60 11.082 11.089 11.106 0.392 -0.619 -1.031 0.392 -0.619 0.638 -0.404 -0.243 0.800 0.397 - 489.65 11.276 11.289 11.301 0.545 -0.503 -0.837 0.545 -0.503 0.421 -0.456 -0.274 0.624 0.339 - 489.70 10.873 10.875 10.877 0.232 -0.191 -1.240 0.232 -0.191 0.236 -0.288 -0.044 0.814 0.188 - 489.75 11.112 11.112 11.116 0.125 -0.302 -1.001 0.125 -0.302 0.303 -0.125 -0.038 0.555 0.165 - 489.80 11.412 11.415 11.416 0.251 -0.153 -0.700 0.251 -0.153 0.107 -0.176 -0.038 0.288 0.105 - 489.85 11.264 11.269 11.284 0.320 -0.588 -0.849 0.320 -0.588 0.499 -0.271 -0.188 0.584 0.299 - 489.90 11.457 11.472 11.483 0.596 -0.500 -0.656 0.596 -0.500 0.328 -0.391 -0.298 0.517 0.295 - 489.95 11.358 11.363 11.366 0.354 -0.256 -0.755 0.354 -0.256 0.194 -0.267 -0.091 0.381 0.171 - 490.00 10.982 10.987 10.987 0.358 0.032 -1.131 0.358 0.032 -0.036 -0.405 0.011 0.704 0.203 - 490.05 10.978 10.983 10.983 0.320 0.071 -1.135 0.320 0.071 -0.080 -0.363 0.023 0.697 0.186 - 490.10 11.135 11.143 11.143 0.402 0.004 -0.977 0.402 0.004 -0.004 -0.393 0.002 0.559 0.197 - 490.15 11.286 11.289 11.291 0.261 -0.216 -0.826 0.261 -0.216 0.179 -0.215 -0.056 0.399 0.143 - 490.20 11.397 11.398 11.399 0.198 -0.016 -0.716 0.198 -0.016 0.011 -0.141 -0.003 0.276 0.071 - 490.25 11.654 11.664 11.664 0.490 -0.022 -0.459 0.490 -0.022 0.010 -0.225 -0.011 0.226 0.113 - 490.30 11.977 11.992 11.992 0.604 -0.068 -0.136 0.604 -0.068 0.009 -0.082 -0.041 0.194 0.046 - 490.35 12.172 12.181 12.181 0.472 0.018 0.059 0.472 0.018 0.001 0.028 0.008 0.113 0.014 - 490.40 12.141 12.149 12.152 0.434 0.277 0.028 0.434 0.277 0.008 0.012 0.120 0.133 0.060 - 490.45 12.075 12.076 12.077 0.213 -0.120 -0.038 0.213 -0.120 0.005 -0.008 -0.026 0.031 0.014 - 490.50 12.177 12.186 12.186 0.463 0.090 0.065 0.463 0.090 0.006 0.030 0.042 0.113 0.026 - 490.55 12.060 12.083 12.086 0.742 0.295 -0.053 0.742 0.295 -0.016 -0.039 0.219 0.320 0.111 - 490.60 11.985 12.026 12.033 1.000 0.408 -0.128 1.000 0.408 -0.052 -0.128 0.407 0.591 0.215 - 490.65 12.042 12.068 12.072 0.798 0.299 -0.071 0.798 0.299 -0.021 -0.056 0.239 0.365 0.123 - 490.70 12.017 12.041 12.045 0.765 0.320 -0.096 0.765 0.320 -0.031 -0.074 0.245 0.348 0.129 - 490.75 12.092 12.097 12.101 0.343 0.315 -0.021 0.343 0.315 -0.007 -0.007 0.108 0.108 0.054 - 490.80 12.139 12.145 12.146 0.411 0.117 0.026 0.411 0.117 0.003 0.011 0.048 0.092 0.025 - 490.85 12.092 12.111 12.114 0.673 0.299 -0.021 0.673 0.299 -0.006 -0.014 0.201 0.272 0.101 - 490.90 12.486 12.496 12.502 0.501 0.387 0.373 0.501 0.387 0.144 0.187 0.194 0.270 0.153 - 490.95 12.554 12.555 12.556 0.172 0.142 0.442 0.172 0.142 0.063 0.076 0.024 0.122 0.051 - 491.00 12.535 12.537 12.551 0.224 0.582 0.423 0.224 0.582 0.246 0.095 0.131 0.284 0.147 - 491.05 12.621 12.625 12.636 0.330 0.530 0.508 0.330 0.530 0.269 0.168 0.175 0.324 0.181 - 491.10 12.902 12.905 12.913 0.279 0.456 0.789 0.279 0.456 0.360 0.220 0.127 0.454 0.220 - 491.15 12.638 12.638 12.642 0.056 0.330 0.525 0.056 0.330 0.173 0.029 0.019 0.194 0.088 - 491.20 12.604 12.605 12.607 0.161 0.248 0.491 0.161 0.248 0.122 0.079 0.040 0.164 0.075 - 491.25 12.329 12.329 12.340 0.078 0.512 0.216 0.078 0.512 0.110 0.017 0.040 0.157 0.059 - 491.30 12.046 12.048 12.059 0.232 0.502 -0.067 0.232 0.502 -0.034 -0.016 0.116 0.155 0.061 - 491.35 12.013 12.014 12.018 0.078 0.330 -0.099 0.078 0.330 -0.033 -0.008 0.026 0.062 0.021 - 491.40 12.014 12.014 12.038 -0.009 0.751 -0.099 -0.009 0.751 -0.074 0.001 -0.007 0.287 0.037 - 491.45 11.583 11.599 11.600 -0.600 0.136 -0.529 -0.600 0.136 -0.072 0.317 -0.081 0.329 0.168 - 491.50 11.846 11.863 11.863 -0.633 0.008 -0.267 -0.633 0.008 -0.002 0.169 -0.005 0.236 0.084 - 491.55 11.739 11.745 11.746 -0.388 0.117 -0.374 -0.388 0.117 -0.044 0.145 -0.046 0.152 0.079 - 491.60 11.743 11.743 11.746 -0.023 0.266 -0.370 -0.023 0.266 -0.098 0.008 -0.006 0.104 0.050 - 491.65 11.556 11.561 11.565 0.326 0.316 -0.557 0.326 0.316 -0.176 -0.181 0.103 0.258 0.136 - 491.70 11.668 11.668 11.678 0.050 0.467 -0.445 0.050 0.467 -0.207 -0.022 0.023 0.209 0.105 - 491.75 11.617 11.622 11.646 -0.341 0.752 -0.496 -0.341 0.752 -0.373 0.169 -0.257 0.464 0.242 - 491.80 11.650 11.655 11.660 -0.318 0.339 -0.462 -0.318 0.339 -0.157 0.147 -0.108 0.215 0.120 - 491.85 11.415 11.415 11.416 0.018 -0.191 -0.698 0.018 -0.191 0.133 -0.013 -0.003 0.262 0.067 - 491.90 11.516 11.521 11.523 0.327 -0.206 -0.596 0.327 -0.206 0.123 -0.195 -0.067 0.253 0.120 - 491.95 11.688 11.688 11.688 0.056 -0.005 -0.425 0.056 -0.005 0.002 -0.024 -0.000 0.092 0.012 - 492.00 11.551 11.551 11.555 -0.120 -0.300 -0.562 -0.120 -0.300 0.168 0.067 0.036 0.210 0.092 - 492.05 11.506 11.506 11.509 -0.032 -0.239 -0.607 -0.032 -0.239 0.145 0.019 0.008 0.213 0.073 - 492.10 11.303 11.305 11.305 -0.230 0.041 -0.810 -0.230 0.041 -0.033 0.187 -0.009 0.356 0.095 - 492.15 11.115 11.119 11.121 -0.325 0.173 -0.998 -0.325 0.173 -0.173 0.324 -0.056 0.566 0.186 - 492.20 11.217 11.223 11.223 -0.390 0.038 -0.896 -0.390 0.038 -0.034 0.349 -0.015 0.478 0.176 - 492.25 11.271 11.276 11.276 -0.336 0.066 -0.842 -0.336 0.066 -0.055 0.282 -0.022 0.413 0.144 - 492.30 11.530 11.534 11.535 0.269 0.157 -0.582 0.269 0.157 -0.091 -0.156 0.042 0.218 0.093 - 492.35 11.995 12.001 12.002 0.356 -0.161 -0.117 0.356 -0.161 0.019 -0.042 -0.057 0.083 0.037 - 492.40 11.868 11.886 11.894 0.663 -0.438 -0.245 0.663 -0.438 0.108 -0.163 -0.291 0.346 0.175 - 492.45 11.577 11.599 11.609 0.701 -0.483 -0.535 0.701 -0.483 0.258 -0.375 -0.338 0.506 0.284 - 492.50 11.390 11.423 11.428 0.876 -0.322 -0.723 0.876 -0.322 0.233 -0.634 -0.282 0.697 0.366 - 492.55 11.529 11.560 11.590 0.845 -0.834 -0.584 0.845 -0.834 0.487 -0.494 -0.705 0.875 0.494 - 492.60 11.482 11.500 11.515 0.648 -0.585 -0.631 0.648 -0.585 0.369 -0.409 -0.379 0.580 0.335 - 492.65 11.502 11.515 11.523 0.540 -0.436 -0.611 0.540 -0.436 0.267 -0.330 -0.236 0.428 0.243 - 492.70 11.632 11.643 11.681 0.508 -0.936 -0.481 0.508 -0.936 0.450 -0.244 -0.475 0.683 0.349 - 492.75 11.641 11.656 11.676 0.600 -0.685 -0.472 0.600 -0.685 0.323 -0.283 -0.411 0.526 0.297 - 492.80 11.687 11.698 11.702 0.515 -0.314 -0.426 0.515 -0.314 0.134 -0.220 -0.162 0.273 0.152 - 492.85 11.850 11.871 11.881 0.699 -0.495 -0.263 0.699 -0.495 0.130 -0.184 -0.346 0.401 0.206 - 492.90 11.635 11.655 11.662 0.677 -0.415 -0.478 0.677 -0.415 0.198 -0.324 -0.281 0.429 0.236 - 492.95 11.731 11.742 11.743 0.521 -0.145 -0.382 0.521 -0.145 0.055 -0.199 -0.076 0.219 0.110 - 493.00 11.620 11.637 11.639 0.638 -0.200 -0.493 0.638 -0.200 0.098 -0.314 -0.127 0.345 0.177 - 493.05 11.775 11.812 11.816 0.928 -0.302 -0.338 0.928 -0.302 0.102 -0.313 -0.280 0.533 0.216 - 493.10 11.834 11.890 11.900 1.149 -0.496 -0.278 1.149 -0.496 0.138 -0.320 -0.570 0.822 0.334 - 493.15 11.996 12.023 12.048 0.800 -0.770 -0.117 0.800 -0.770 0.090 -0.093 -0.617 0.624 0.315 - 493.20 11.871 11.902 11.938 0.853 -0.929 -0.241 0.853 -0.929 0.224 -0.206 -0.792 0.824 0.424 - 493.25 12.229 12.277 12.305 1.089 -0.825 0.116 1.089 -0.825 -0.096 0.126 -0.898 0.940 0.456 - 493.30 12.397 12.438 12.451 1.009 -0.566 0.284 1.009 -0.566 -0.161 0.286 -0.571 0.709 0.329 - 493.35 12.331 12.380 12.398 1.099 -0.660 0.219 1.099 -0.660 -0.144 0.240 -0.726 0.846 0.389 - 493.40 12.131 12.171 12.219 0.988 -1.085 0.018 0.988 -1.085 -0.019 0.018 -1.072 1.077 0.536 - 493.45 12.154 12.203 12.240 1.093 -0.948 0.042 1.093 -0.948 -0.039 0.045 -1.036 1.047 0.519 - 493.50 12.192 12.263 12.299 1.318 -0.936 0.079 1.318 -0.936 -0.074 0.105 -1.233 1.309 0.620 - 493.55 12.138 12.201 12.230 1.233 -0.838 0.026 1.233 -0.838 -0.022 0.032 -1.033 1.111 0.517 - 493.60 12.080 12.130 12.157 1.102 -0.799 -0.033 1.102 -0.799 0.026 -0.036 -0.880 0.927 0.441 - 493.65 11.933 11.995 12.007 1.216 -0.540 -0.180 1.216 -0.540 0.097 -0.219 -0.657 0.901 0.350 - 493.70 11.815 11.850 11.851 0.916 -0.095 -0.298 0.916 -0.095 0.028 -0.273 -0.087 0.468 0.144 - 493.75 11.962 12.025 12.028 1.230 -0.272 -0.151 1.230 -0.272 0.041 -0.185 -0.335 0.805 0.193 - 493.80 12.323 12.395 12.400 1.338 -0.340 0.210 1.338 -0.340 -0.071 0.281 -0.455 0.975 0.270 - 493.85 12.655 12.736 12.736 1.438 0.055 0.542 1.438 0.055 0.030 0.779 0.079 1.183 0.392 - 493.90 12.991 13.057 13.057 1.309 -0.030 0.878 1.309 -0.030 -0.027 1.150 -0.040 1.243 0.576 - 493.95 13.301 13.353 13.354 1.179 -0.183 1.188 1.179 -0.183 -0.217 1.401 -0.215 1.417 0.717 - 494.00 13.344 13.389 13.390 1.104 -0.160 1.231 1.104 -0.160 -0.197 1.359 -0.177 1.380 0.692 - 494.05 13.162 13.210 13.212 1.125 -0.239 1.049 1.125 -0.239 -0.251 1.180 -0.269 1.212 0.618 - 494.10 12.922 12.978 12.981 1.204 -0.258 0.810 1.204 -0.258 -0.209 0.975 -0.311 1.086 0.522 - 494.15 12.935 12.971 12.973 0.966 -0.238 0.822 0.966 -0.238 -0.196 0.794 -0.230 0.833 0.425 - 494.20 12.986 13.004 13.008 0.669 -0.327 0.874 0.669 -0.327 -0.286 0.584 -0.219 0.659 0.343 - 494.25 12.944 12.955 12.963 0.525 -0.457 0.831 0.525 -0.457 -0.380 0.437 -0.240 0.588 0.313 - 494.30 12.748 12.757 12.764 0.484 -0.442 0.635 0.484 -0.442 -0.280 0.307 -0.214 0.416 0.234 - 494.35 12.796 12.798 12.814 0.180 -0.643 0.684 0.180 -0.643 -0.439 0.123 -0.116 0.457 0.235 - 494.40 12.772 12.776 12.786 0.314 -0.505 0.659 0.314 -0.505 -0.333 0.207 -0.158 0.394 0.211 - 494.45 12.714 12.714 12.735 0.059 -0.728 0.601 0.059 -0.728 -0.438 0.035 -0.043 0.447 0.221 - 494.50 12.610 12.612 12.636 -0.253 -0.779 0.497 -0.253 -0.779 -0.387 -0.126 0.197 0.459 0.226 - 494.55 12.661 12.661 12.666 -0.073 -0.358 0.548 -0.073 -0.358 -0.196 -0.040 0.026 0.217 0.101 - 494.60 12.822 12.826 12.828 0.300 -0.233 0.709 0.300 -0.233 -0.165 0.213 -0.070 0.324 0.139 - 494.65 12.867 12.868 12.875 0.186 -0.427 0.754 0.186 -0.427 -0.322 0.140 -0.079 0.393 0.180 - 494.70 12.833 12.842 12.850 0.475 -0.455 0.720 0.475 -0.455 -0.328 0.342 -0.216 0.475 0.260 - 494.75 12.500 12.501 12.507 0.082 -0.395 0.388 0.082 -0.395 -0.153 0.032 -0.032 0.157 0.080 - 494.80 12.074 12.074 12.080 -0.045 -0.385 -0.039 -0.045 -0.385 0.015 0.002 0.017 0.076 0.011 - 494.85 12.366 12.366 12.386 -0.016 -0.714 0.253 -0.016 -0.714 -0.181 -0.004 0.011 0.287 0.090 - 494.90 12.368 12.368 12.429 -0.048 -1.229 0.255 -0.048 -1.229 -0.313 -0.012 0.059 0.789 0.160 - 494.95 12.556 12.564 12.628 0.462 -1.270 0.443 0.462 -1.270 -0.563 0.205 -0.587 1.011 0.419 - 495.00 12.960 12.961 13.001 0.107 -1.027 0.847 0.107 -1.027 -0.870 0.091 -0.110 0.892 0.441 - 495.05 13.051 13.054 13.073 0.249 -0.703 0.939 0.249 -0.703 -0.660 0.234 -0.175 0.719 0.361 - 495.10 12.935 12.936 12.945 0.171 -0.485 0.822 0.171 -0.485 -0.398 0.141 -0.083 0.470 0.215 - 495.15 13.000 13.002 13.018 0.227 -0.641 0.888 0.227 -0.641 -0.569 0.202 -0.146 0.625 0.310 - 495.20 13.016 13.019 13.040 0.276 -0.741 0.903 0.276 -0.741 -0.669 0.250 -0.205 0.720 0.371 - 495.25 12.927 12.930 12.932 0.275 -0.226 0.815 0.275 -0.226 -0.184 0.224 -0.062 0.395 0.148 - 495.30 12.834 12.834 12.844 0.125 -0.509 0.721 0.125 -0.509 -0.367 0.090 -0.063 0.397 0.191 - 495.35 12.908 12.910 12.917 0.204 -0.432 0.796 0.204 -0.432 -0.344 0.162 -0.088 0.431 0.195 - 495.40 12.725 12.725 12.726 0.039 -0.142 0.612 0.039 -0.142 -0.087 0.024 -0.006 0.198 0.045 - 495.45 12.572 12.573 12.573 -0.098 -0.013 0.459 -0.098 -0.013 -0.006 -0.045 0.001 0.110 0.023 - 495.50 12.737 12.737 12.737 -0.026 0.095 0.624 -0.026 0.095 0.059 -0.016 -0.002 0.200 0.031 - 495.55 12.581 12.581 12.583 0.067 0.216 0.468 0.067 0.216 0.101 0.032 0.015 0.135 0.053 - 495.60 12.533 12.533 12.533 -0.020 0.054 0.420 -0.020 0.054 0.023 -0.008 -0.001 0.090 0.012 - 495.65 12.269 12.275 12.275 0.386 0.103 0.156 0.386 0.103 0.016 0.060 0.040 0.092 0.037 - 495.70 12.527 12.536 12.536 0.470 0.033 0.415 0.470 0.033 0.014 0.195 0.015 0.197 0.098 - 495.75 12.542 12.552 12.552 0.487 -0.148 0.429 0.487 -0.148 -0.063 0.209 -0.072 0.221 0.115 - 495.80 12.300 12.331 12.331 0.875 -0.031 0.188 0.875 -0.031 -0.006 0.164 -0.027 0.401 0.083 - 495.85 12.589 12.598 12.600 0.482 0.258 0.476 0.482 0.258 0.123 0.229 0.124 0.262 0.144 - 495.90 12.537 12.547 12.552 0.499 0.344 0.424 0.499 0.344 0.146 0.212 0.172 0.274 0.155 - 495.95 12.433 12.438 12.441 0.341 0.260 0.320 0.341 0.260 0.083 0.109 0.088 0.143 0.082 - 496.00 12.183 12.185 12.198 -0.235 0.567 0.070 -0.235 0.567 0.040 -0.016 -0.133 0.191 0.070 - 496.05 12.115 12.117 12.124 -0.236 0.420 0.002 -0.236 0.420 0.001 -0.000 -0.099 0.116 0.050 - 496.10 11.995 11.999 12.003 -0.329 0.320 -0.118 -0.329 0.320 -0.038 0.039 -0.105 0.112 0.059 - 496.15 11.873 11.884 11.894 -0.507 0.490 -0.240 -0.507 0.490 -0.117 0.122 -0.249 0.278 0.150 - 496.20 11.554 11.559 11.560 -0.341 0.169 -0.559 -0.341 0.169 -0.094 0.191 -0.058 0.229 0.110 - 496.25 11.287 11.288 11.291 -0.165 0.244 -0.826 -0.165 0.244 -0.201 0.136 -0.040 0.385 0.123 - 496.30 11.002 11.006 11.047 -0.314 0.952 -1.111 -0.314 0.952 -1.058 0.348 -0.299 1.120 0.577 - 496.35 11.139 11.151 11.211 -0.533 1.158 -0.974 -0.533 1.158 -1.128 0.519 -0.617 1.287 0.693 - 496.40 11.313 11.343 11.394 -0.826 1.076 -0.800 -0.826 1.076 -0.861 0.660 -0.888 1.240 0.701 - 496.45 11.076 11.108 11.182 -0.838 1.282 -1.037 -0.838 1.282 -1.329 0.869 -1.074 1.710 0.959 - 496.50 11.114 11.119 11.203 -0.308 1.376 -0.999 -0.308 1.376 -1.374 0.308 -0.424 1.492 0.735 - 496.55 10.861 10.871 10.941 -0.455 1.240 -1.252 -0.455 1.240 -1.552 0.570 -0.565 1.655 0.873 - 496.60 11.045 11.049 11.095 -0.292 1.008 -1.068 -0.292 1.008 -1.077 0.311 -0.294 1.121 0.579 - 496.65 11.321 11.333 11.392 -0.512 1.161 -0.792 -0.512 1.161 -0.919 0.405 -0.594 1.118 0.584 - 496.70 11.273 11.286 11.343 -0.530 1.141 -0.839 -0.530 1.141 -0.957 0.445 -0.605 1.143 0.608 - 496.75 11.338 11.342 11.362 -0.307 0.684 -0.775 -0.307 0.684 -0.530 0.238 -0.210 0.581 0.309 - 496.80 11.399 11.413 11.434 -0.580 0.680 -0.714 -0.580 0.680 -0.486 0.414 -0.395 0.655 0.375 - 496.85 11.600 11.607 11.621 -0.400 0.564 -0.512 -0.400 0.564 -0.289 0.205 -0.225 0.370 0.210 - 496.90 11.853 11.873 11.893 -0.689 0.673 -0.259 -0.689 0.673 -0.175 0.179 -0.464 0.498 0.263 - 496.95 11.906 11.955 11.972 -1.083 0.638 -0.207 -1.083 0.638 -0.132 0.224 -0.691 0.811 0.369 - 497.00 12.052 12.128 12.137 -1.362 0.454 -0.061 -1.362 0.454 -0.028 0.083 -0.618 1.032 0.312 - 497.05 11.990 12.047 12.056 -1.177 0.460 -0.123 -1.177 0.460 -0.057 0.145 -0.541 0.806 0.282 - 497.10 11.840 11.894 11.900 -1.134 0.394 -0.273 -1.134 0.394 -0.108 0.310 -0.447 0.758 0.277 - 497.15 11.895 11.959 11.967 -1.230 0.440 -0.217 -1.230 0.440 -0.096 0.267 -0.541 0.877 0.306 - 497.20 12.124 12.160 12.165 -0.933 0.351 0.011 -0.933 0.351 0.004 -0.010 -0.328 0.497 0.164 - 497.25 11.872 11.897 11.899 -0.781 0.214 -0.241 -0.781 0.214 -0.052 0.188 -0.167 0.357 0.129 - 497.30 11.528 11.562 11.562 -0.882 0.019 -0.584 -0.882 0.019 -0.011 0.515 -0.017 0.560 0.258 - 497.35 11.912 11.926 11.937 -0.591 -0.506 -0.201 -0.591 -0.506 0.102 0.119 0.299 0.323 0.169 - 497.40 11.725 11.728 11.729 -0.262 -0.191 -0.388 -0.262 -0.191 0.074 0.102 0.050 0.128 0.068 - 497.45 11.998 12.009 12.010 -0.522 0.186 -0.115 -0.522 0.186 -0.021 0.060 -0.097 0.160 0.058 - 497.50 12.006 12.018 12.024 -0.531 0.385 -0.107 -0.531 0.385 -0.041 0.057 -0.204 0.221 0.108 - 497.55 11.860 11.881 11.884 -0.700 0.265 -0.253 -0.700 0.265 -0.067 0.177 -0.185 0.312 0.132 - 497.60 11.787 11.803 11.804 -0.626 0.154 -0.326 -0.626 0.154 -0.050 0.204 -0.097 0.261 0.116 - 497.65 11.912 11.915 11.922 -0.272 0.393 -0.200 -0.272 0.393 -0.079 0.054 -0.107 0.134 0.072 - 497.70 11.919 11.921 11.935 -0.201 0.588 -0.194 -0.201 0.588 -0.114 0.039 -0.118 0.212 0.084 - 497.75 11.910 11.910 11.933 -0.034 0.745 -0.203 -0.034 0.745 -0.151 0.007 -0.026 0.299 0.077 - 497.80 11.970 11.970 12.006 0.136 0.918 -0.143 0.136 0.918 -0.131 -0.019 0.124 0.441 0.091 - 497.85 11.846 11.850 11.914 0.302 1.233 -0.267 0.302 1.233 -0.329 -0.081 0.373 0.842 0.252 - 497.90 11.815 11.825 11.870 0.470 1.034 -0.298 0.470 1.034 -0.308 -0.140 0.486 0.690 0.296 - 497.95 11.865 11.877 11.903 0.533 0.795 -0.248 0.533 0.795 -0.197 -0.132 0.424 0.489 0.243 - 498.00 11.977 11.981 12.025 0.293 1.027 -0.135 0.293 1.027 -0.139 -0.040 0.301 0.580 0.167 - 498.05 12.172 12.180 12.203 0.436 0.753 0.059 0.436 0.753 0.044 0.026 0.328 0.380 0.166 - 498.10 11.932 11.939 11.973 0.402 0.906 -0.181 0.402 0.906 -0.164 -0.073 0.364 0.507 0.203 - 498.15 12.009 12.021 12.038 0.542 0.638 -0.104 0.542 0.638 -0.066 -0.056 0.346 0.356 0.178 - 498.20 12.123 12.133 12.143 0.514 0.492 0.010 0.514 0.492 0.005 0.005 0.253 0.253 0.127 - 498.25 11.967 11.969 11.977 0.261 0.431 -0.146 0.261 0.431 -0.063 -0.038 0.113 0.138 0.067 - 498.30 11.849 11.850 11.851 0.177 0.135 -0.264 0.177 0.135 -0.036 -0.047 0.024 0.060 0.032 - 498.35 11.845 11.845 11.847 0.051 0.185 -0.268 0.051 0.185 -0.050 -0.014 0.009 0.054 0.026 - 498.40 11.669 11.672 11.672 0.272 0.032 -0.444 0.272 0.032 -0.014 -0.121 0.009 0.136 0.061 - 498.45 11.534 11.541 11.543 0.401 0.202 -0.579 0.401 0.202 -0.117 -0.232 0.081 0.268 0.136 - 498.50 11.734 11.736 11.740 0.224 0.314 -0.379 0.224 0.314 -0.119 -0.085 0.071 0.146 0.081 - 498.55 11.603 11.603 11.611 -0.052 0.438 -0.510 -0.052 0.438 -0.223 0.026 -0.023 0.227 0.113 - 498.60 11.480 11.493 11.495 -0.530 0.213 -0.632 -0.530 0.213 -0.135 0.335 -0.113 0.363 0.189 - 498.65 11.412 11.444 11.445 -0.851 0.091 -0.700 -0.851 0.091 -0.064 0.596 -0.078 0.612 0.302 - 498.70 11.684 11.699 11.701 -0.583 -0.209 -0.429 -0.583 -0.209 0.090 0.250 0.122 0.283 0.146 - 498.75 11.621 11.623 11.624 -0.214 -0.129 -0.492 -0.214 -0.129 0.063 0.105 0.028 0.152 0.063 - 498.80 11.508 11.513 11.513 -0.325 0.093 -0.605 -0.325 0.093 -0.056 0.196 -0.030 0.240 0.103 - 498.85 11.381 11.382 11.389 -0.155 0.402 -0.732 -0.155 0.402 -0.294 0.113 -0.062 0.361 0.161 - 498.90 11.105 11.108 11.111 -0.270 0.268 -1.008 -0.270 0.268 -0.270 0.272 -0.072 0.581 0.195 - 498.95 11.123 11.128 11.143 -0.309 0.575 -0.989 -0.309 0.575 -0.569 0.306 -0.178 0.703 0.335 - 499.00 11.026 11.050 11.078 -0.728 0.784 -1.087 -0.728 0.784 -0.852 0.792 -0.571 1.163 0.648 - 499.05 11.124 11.140 11.161 -0.600 0.679 -0.989 -0.600 0.679 -0.672 0.594 -0.408 0.900 0.492 - 499.10 11.138 11.149 11.171 -0.497 0.689 -0.975 -0.497 0.689 -0.672 0.484 -0.342 0.836 0.448 - 499.15 10.967 10.975 10.983 -0.423 0.428 -1.146 -0.423 0.428 -0.490 0.485 -0.181 0.837 0.356 - 499.20 10.890 10.891 10.919 -0.058 0.787 -1.222 -0.058 0.787 -0.962 0.070 -0.045 1.059 0.483 - 499.25 10.998 10.998 11.018 0.032 0.671 -1.115 0.032 0.671 -0.748 -0.035 0.021 0.847 0.375 - 499.30 10.996 10.997 11.022 -0.101 0.744 -1.117 -0.101 0.744 -0.831 0.113 -0.075 0.905 0.421 - 499.35 10.956 10.957 10.987 -0.058 0.821 -1.156 -0.058 0.821 -0.949 0.067 -0.047 1.007 0.476 - 499.40 11.075 11.075 11.085 -0.013 0.483 -1.038 -0.013 0.483 -0.502 0.014 -0.006 0.656 0.251 - 499.45 10.995 10.997 11.016 -0.232 0.645 -1.118 -0.232 0.645 -0.721 0.260 -0.150 0.860 0.391 - 499.50 11.112 11.114 11.146 -0.200 0.844 -1.001 -0.200 0.844 -0.845 0.200 -0.169 0.877 0.442 - 499.55 11.025 11.025 11.058 -0.013 0.844 -1.087 -0.013 0.844 -0.917 0.014 -0.011 0.947 0.459 - 499.60 10.783 10.784 10.823 0.147 0.925 -1.330 0.147 0.925 -1.230 -0.196 0.136 1.323 0.627 - 499.65 10.565 10.569 10.578 0.284 0.448 -1.548 0.284 0.448 -0.694 -0.440 0.127 1.339 0.416 - 499.70 10.703 10.722 10.725 0.630 0.276 -1.409 0.630 0.276 -0.389 -0.888 0.174 1.230 0.493 - 499.75 10.703 10.706 10.706 0.258 0.028 -1.410 0.258 0.028 -0.039 -0.364 0.007 1.027 0.183 - 499.80 10.745 10.749 10.749 0.292 0.007 -1.368 0.292 0.007 -0.010 -0.400 0.002 0.978 0.200 - 499.85 10.853 10.854 10.854 0.174 0.064 -1.260 0.174 0.064 -0.081 -0.219 0.011 0.811 0.117 - 499.90 11.011 11.013 11.013 0.182 0.028 -1.101 0.182 0.028 -0.031 -0.201 0.005 0.624 0.102 - 499.95 10.987 10.987 10.987 0.068 0.046 -1.126 0.068 0.046 -0.052 -0.077 0.003 0.637 0.046 - 500.00 10.905 10.905 10.906 -0.088 0.138 -1.208 -0.088 0.138 -0.167 0.106 -0.012 0.743 0.099 - 500.05 10.672 10.672 10.673 -0.009 -0.124 -1.441 -0.009 -0.124 0.179 0.013 0.001 1.046 0.090 - 500.10 10.371 10.371 10.377 0.114 0.340 -1.742 0.114 0.340 -0.592 -0.198 0.039 1.582 0.313 - 500.15 10.408 10.410 10.416 -0.193 0.352 -1.705 -0.193 0.352 -0.601 0.330 -0.068 1.534 0.344 - 500.20 10.480 10.490 10.490 -0.454 0.016 -1.632 -0.454 0.016 -0.027 0.741 -0.007 1.435 0.371 - 500.25 10.774 10.778 10.786 -0.274 -0.414 -1.339 -0.274 -0.414 0.555 0.367 0.114 1.019 0.337 - 500.30 10.766 10.766 10.775 -0.016 -0.447 -1.347 -0.016 -0.447 0.603 0.021 0.007 1.008 0.302 - 500.35 10.645 10.647 10.651 -0.194 -0.293 -1.468 -0.194 -0.293 0.430 0.285 0.057 1.139 0.260 - 500.40 10.786 10.786 10.791 0.085 -0.328 -1.327 0.085 -0.328 0.435 -0.113 -0.028 0.938 0.225 - 500.45 10.796 10.796 10.801 0.025 -0.304 -1.316 0.025 -0.304 0.400 -0.033 -0.008 0.913 0.201 - 500.50 10.498 10.498 10.499 -0.078 0.091 -1.615 -0.078 0.091 -0.146 0.125 -0.007 1.311 0.096 - 500.55 10.296 10.297 10.301 -0.161 0.282 -1.817 -0.161 0.282 -0.513 0.292 -0.045 1.703 0.296 - 500.60 10.349 10.351 10.352 -0.171 0.154 -1.763 -0.171 0.154 -0.272 0.301 -0.026 1.581 0.203 - 500.65 10.564 10.564 10.583 -0.002 0.630 -1.549 -0.002 0.630 -0.975 0.003 -0.001 1.398 0.488 - 500.70 10.251 10.254 10.264 -0.231 0.464 -1.861 -0.231 0.464 -0.864 0.430 -0.107 1.867 0.485 - 500.75 10.590 10.590 10.597 0.041 0.384 -1.523 0.041 0.384 -0.585 -0.063 0.016 1.234 0.294 - 500.80 10.486 10.488 10.513 -0.216 0.714 -1.627 -0.216 0.714 -1.161 0.351 -0.154 1.601 0.611 - 500.85 10.384 10.388 10.407 -0.292 0.631 -1.729 -0.292 0.631 -1.091 0.505 -0.184 1.736 0.608 - 500.90 10.442 10.456 10.467 -0.540 0.471 -1.670 -0.540 0.471 -0.788 0.903 -0.255 1.652 0.612 - 500.95 10.306 10.317 10.326 -0.478 0.430 -1.807 -0.478 0.430 -0.777 0.863 -0.205 1.839 0.590 - 501.00 10.553 10.554 10.566 -0.129 0.518 -1.560 -0.129 0.518 -0.808 0.201 -0.067 1.359 0.418 - 501.05 10.538 10.539 10.561 -0.167 0.683 -1.575 -0.167 0.683 -1.076 0.264 -0.114 1.488 0.557 - 501.10 10.430 10.431 10.439 -0.142 0.418 -1.683 -0.142 0.418 -0.704 0.240 -0.060 1.514 0.373 - 501.15 10.619 10.619 10.621 -0.009 0.192 -1.493 -0.009 0.192 -0.287 0.013 -0.002 1.134 0.144 - 501.20 10.638 10.639 10.645 0.166 0.345 -1.475 0.166 0.345 -0.509 -0.245 0.057 1.161 0.284 - 501.25 10.538 10.539 10.546 0.137 0.405 -1.575 0.137 0.405 -0.639 -0.217 0.056 1.332 0.338 - 501.30 10.267 10.271 10.286 0.277 0.545 -1.845 0.277 0.545 -1.005 -0.511 0.151 1.889 0.569 - 501.35 10.276 10.276 10.281 0.083 0.334 -1.837 0.083 0.334 -0.614 -0.152 0.028 1.747 0.317 - 501.40 10.161 10.166 10.171 0.329 0.305 -1.952 0.329 0.305 -0.595 -0.643 0.100 2.005 0.441 - 501.45 9.915 9.950 9.955 0.835 0.318 -2.198 0.835 0.318 -0.700 -1.834 0.266 2.815 0.991 - 501.50 10.130 10.187 10.194 1.080 0.365 -1.983 1.080 0.365 -0.724 -2.141 0.394 2.616 1.147 - 501.55 10.246 10.274 10.284 0.756 0.453 -1.867 0.756 0.453 -0.845 -1.411 0.342 2.131 0.840 - 501.60 10.184 10.191 10.196 0.379 0.305 -1.928 0.379 0.305 -0.587 -0.731 0.115 1.977 0.472 - 501.65 10.249 10.254 10.257 0.301 0.261 -1.864 0.301 0.261 -0.486 -0.561 0.078 1.816 0.373 - 501.70 10.266 10.276 10.284 0.443 0.417 -1.846 0.443 0.417 -0.771 -0.818 0.185 1.890 0.570 - 501.75 10.208 10.215 10.223 0.388 0.395 -1.905 0.388 0.395 -0.752 -0.740 0.153 1.968 0.533 - 501.80 10.081 10.081 10.084 0.038 0.255 -2.032 0.038 0.255 -0.518 -0.078 0.010 2.097 0.262 - 501.85 10.182 10.186 10.190 0.293 0.289 -1.931 0.293 0.289 -0.559 -0.565 0.085 1.948 0.399 - 501.90 10.048 10.049 10.049 0.043 0.133 -2.064 0.043 0.133 -0.275 -0.088 0.006 2.141 0.145 - 501.95 10.079 10.081 10.082 0.185 0.166 -2.034 0.185 0.166 -0.337 -0.377 0.031 2.099 0.253 - 502.00 10.135 10.159 10.161 0.685 0.227 -1.977 0.685 0.227 -0.449 -1.355 0.156 2.215 0.718 - 502.05 10.169 10.199 10.202 0.782 0.231 -1.944 0.782 0.231 -0.448 -1.519 0.180 2.221 0.797 - 502.10 10.003 10.030 10.032 0.738 0.170 -2.110 0.738 0.170 -0.359 -1.557 0.125 2.512 0.801 - 502.15 9.819 9.830 9.847 0.465 0.592 -2.294 0.465 0.592 -1.358 -1.067 0.275 2.915 0.874 - 502.20 9.717 9.728 9.729 0.471 0.157 -2.396 0.471 0.157 -0.375 -1.129 0.074 2.994 0.596 - 502.25 9.625 9.627 9.629 0.221 0.158 -2.488 0.221 0.158 -0.392 -0.549 0.035 3.132 0.338 - 502.30 9.737 9.738 9.739 0.165 0.081 -2.376 0.165 0.081 -0.192 -0.392 0.013 2.839 0.218 - 502.35 9.775 9.775 9.777 -0.113 -0.159 -2.338 -0.113 -0.159 0.372 0.265 0.018 2.752 0.229 - 502.40 9.848 9.852 9.852 -0.252 0.059 -2.264 -0.252 0.059 -0.133 0.571 -0.015 2.597 0.293 - 502.45 9.823 9.823 9.823 0.051 0.016 -2.289 0.051 0.016 -0.037 -0.117 0.001 2.622 0.062 - 502.50 10.040 10.043 10.044 0.263 -0.065 -2.073 0.263 -0.065 0.135 -0.545 -0.017 2.185 0.281 - 502.55 10.023 10.036 10.036 0.495 -0.026 -2.089 0.495 -0.026 0.054 -1.035 -0.013 2.306 0.518 - 502.60 9.818 9.819 9.820 0.075 -0.154 -2.295 0.075 -0.154 0.354 -0.171 -0.012 2.647 0.197 - 502.65 9.922 9.923 9.923 0.183 0.053 -2.191 0.183 0.053 -0.115 -0.401 0.010 2.419 0.209 - 502.70 10.047 10.057 10.057 0.444 0.047 -2.066 0.444 0.047 -0.096 -0.917 0.021 2.233 0.461 - 502.75 10.152 10.156 10.169 0.282 -0.526 -1.961 0.282 -0.526 1.032 -0.553 -0.148 2.101 0.590 - 502.80 10.199 10.205 10.214 0.333 -0.429 -1.913 0.333 -0.429 0.821 -0.638 -0.143 1.978 0.524 - 502.85 10.031 10.034 10.063 0.238 -0.762 -2.082 0.238 -0.762 1.586 -0.495 -0.181 2.485 0.836 - 502.90 10.106 10.114 10.153 0.397 -0.894 -2.007 0.397 -0.894 1.793 -0.797 -0.355 2.492 0.997 - 502.95 9.789 9.800 9.846 0.461 -0.951 -2.324 0.461 -0.951 2.210 -1.071 -0.439 3.258 1.247 - 503.00 10.064 10.080 10.110 0.571 -0.785 -2.049 0.571 -0.785 1.608 -1.170 -0.448 2.570 1.019 - 503.05 10.113 10.121 10.145 0.400 -0.701 -2.000 0.400 -0.701 1.402 -0.801 -0.281 2.325 0.819 - 503.10 9.945 9.945 9.948 0.009 -0.251 -2.168 0.009 -0.251 0.544 -0.019 -0.002 2.381 0.272 - 503.15 10.048 10.049 10.052 0.110 -0.257 -2.065 0.110 -0.257 0.530 -0.228 -0.028 2.171 0.289 - 503.20 10.152 10.163 10.169 0.474 -0.334 -1.961 0.474 -0.334 0.655 -0.928 -0.158 2.090 0.573 - 503.25 10.361 10.380 10.384 0.625 -0.270 -1.752 0.625 -0.270 0.473 -1.095 -0.169 1.766 0.602 - 503.30 10.325 10.327 10.347 0.224 -0.635 -1.788 0.224 -0.635 1.136 -0.401 -0.143 1.825 0.606 - 503.35 10.395 10.412 10.422 0.597 -0.459 -1.718 0.597 -0.459 0.788 -1.026 -0.274 1.759 0.661 - 503.40 10.414 10.427 10.429 0.527 -0.193 -1.699 0.527 -0.193 0.327 -0.896 -0.102 1.600 0.480 - 503.45 10.252 10.285 10.289 0.827 -0.257 -1.861 0.827 -0.257 0.479 -1.538 -0.213 2.106 0.812 - 503.50 10.160 10.188 10.197 0.758 -0.438 -1.953 0.758 -0.438 0.855 -1.480 -0.331 2.290 0.870 - 503.55 10.192 10.207 10.214 0.551 -0.387 -1.921 0.551 -0.387 0.743 -1.058 -0.213 2.072 0.655 - 503.60 9.885 9.898 9.903 0.509 -0.308 -2.228 0.509 -0.308 0.685 -1.133 -0.156 2.659 0.667 - 503.65 10.240 10.256 10.257 0.576 -0.147 -1.873 0.576 -0.147 0.276 -1.078 -0.085 1.930 0.558 - 503.70 10.242 10.263 10.268 0.661 -0.317 -1.871 0.661 -0.317 0.593 -1.236 -0.209 2.018 0.693 - 503.75 10.353 10.369 10.373 0.577 -0.274 -1.760 0.577 -0.274 0.482 -1.015 -0.158 1.752 0.567 - 503.80 10.316 10.319 10.334 0.280 -0.550 -1.797 0.280 -0.550 0.988 -0.503 -0.154 1.805 0.560 - 503.85 10.091 10.093 10.101 0.156 -0.417 -2.021 0.156 -0.417 0.843 -0.316 -0.065 2.142 0.451 - 503.90 10.271 10.273 10.292 0.191 -0.632 -1.842 0.191 -0.632 1.164 -0.352 -0.121 1.914 0.611 - 503.95 10.302 10.303 10.314 0.182 -0.460 -1.811 0.182 -0.460 0.833 -0.329 -0.084 1.762 0.450 - 504.00 10.457 10.458 10.479 0.081 -0.678 -1.656 0.081 -0.678 1.122 -0.134 -0.055 1.603 0.566 - 504.05 10.332 10.332 10.341 0.119 -0.417 -1.781 0.119 -0.417 0.742 -0.211 -0.049 1.680 0.387 - 504.10 10.529 10.532 10.552 0.256 -0.655 -1.584 0.256 -0.655 1.037 -0.406 -0.168 1.502 0.563 - 504.15 10.483 10.489 10.501 0.353 -0.518 -1.630 0.353 -0.518 0.844 -0.576 -0.183 1.525 0.519 - 504.20 9.934 9.952 9.958 0.612 -0.332 -2.179 0.612 -0.332 0.723 -1.335 -0.203 2.617 0.766 - 504.25 10.055 10.072 10.100 0.576 -0.754 -2.058 0.576 -0.754 1.552 -1.185 -0.435 2.568 1.000 - 504.30 9.716 9.729 9.750 0.505 -0.632 -2.397 0.505 -0.632 1.515 -1.211 -0.319 3.200 0.983 - 504.35 9.689 9.705 9.727 0.564 -0.649 -2.424 0.564 -0.649 1.574 -1.367 -0.366 3.308 1.058 - 504.40 9.648 9.684 9.695 0.830 -0.450 -2.464 0.830 -0.450 1.109 -2.046 -0.374 3.482 1.179 - 504.45 9.382 9.451 9.459 1.137 -0.395 -2.730 1.137 -0.395 1.077 -3.104 -0.449 4.452 1.658 - 504.50 9.352 9.400 9.410 0.950 -0.437 -2.761 0.950 -0.437 1.205 -2.624 -0.415 4.357 1.458 - 504.55 9.459 9.527 9.541 1.141 -0.511 -2.654 1.141 -0.511 1.356 -3.029 -0.583 4.303 1.684 - 504.60 9.833 9.904 9.921 1.180 -0.579 -2.279 1.180 -0.579 1.320 -2.690 -0.684 3.462 1.537 - 504.65 10.234 10.286 10.297 1.034 -0.478 -1.879 1.034 -0.478 0.898 -1.944 -0.495 2.415 1.099 - 504.70 10.272 10.331 10.345 1.101 -0.544 -1.841 1.101 -0.544 1.001 -2.027 -0.599 2.448 1.169 - 504.75 10.350 10.414 10.418 1.150 -0.279 -1.763 1.150 -0.279 0.492 -2.027 -0.321 2.253 1.055 - 504.80 10.323 10.370 10.379 0.986 -0.453 -1.790 0.986 -0.453 0.811 -1.766 -0.447 2.191 0.997 - 504.85 10.298 10.349 10.353 1.030 -0.269 -1.815 1.030 -0.269 0.489 -1.869 -0.277 2.214 0.976 - 504.90 10.244 10.299 10.299 1.056 -0.019 -1.868 1.056 -0.019 0.035 -1.973 -0.020 2.303 0.987 - 504.95 10.533 10.568 10.568 0.860 -0.029 -1.580 0.860 -0.029 0.046 -1.359 -0.025 1.618 0.680 - 505.00 10.733 10.798 10.798 1.178 0.031 -1.379 1.178 0.031 -0.043 -1.625 0.036 1.646 0.813 - 505.05 10.751 10.809 10.810 1.119 -0.038 -1.361 1.119 -0.038 0.051 -1.523 -0.042 1.553 0.762 - 505.10 10.799 10.873 10.877 1.268 -0.319 -1.314 1.268 -0.319 0.419 -1.666 -0.404 1.718 0.882 - 505.15 10.824 10.898 10.910 1.266 -0.525 -1.289 1.266 -0.525 0.676 -1.632 -0.664 1.769 0.943 - 505.20 11.006 11.084 11.118 1.313 -0.869 -1.107 1.313 -0.869 0.963 -1.454 -1.141 1.853 1.042 - 505.25 11.153 11.293 11.311 1.775 -0.638 -0.960 1.775 -0.638 0.613 -1.704 -1.133 2.239 1.068 - 505.30 11.246 11.404 11.443 1.887 -0.942 -0.866 1.887 -0.942 0.816 -1.635 -1.777 2.599 1.274 - 505.35 11.162 11.312 11.338 1.836 -0.777 -0.951 1.836 -0.777 0.739 -1.746 -1.428 2.440 1.187 - 505.40 11.017 11.169 11.203 1.840 -0.870 -1.096 1.840 -0.870 0.953 -2.017 -1.601 2.672 1.373 - 505.45 11.121 11.337 11.364 2.200 -0.782 -0.992 2.200 -0.782 0.775 -2.181 -1.720 3.217 1.442 - 505.50 11.341 11.540 11.551 2.137 -0.488 -0.772 2.137 -0.488 0.377 -1.650 -1.044 2.701 0.994 - 505.55 11.310 11.466 11.467 1.882 -0.173 -0.802 1.882 -0.173 0.139 -1.510 -0.325 2.108 0.775 - 505.60 11.205 11.360 11.360 1.871 -0.092 -0.908 1.871 -0.092 0.083 -1.699 -0.172 2.167 0.855 - 505.65 11.263 11.440 11.442 2.004 -0.190 -0.850 2.004 -0.190 0.162 -1.703 -0.381 2.387 0.876 - 505.70 11.217 11.384 11.384 1.942 -0.047 -0.896 1.942 -0.047 0.042 -1.740 -0.092 2.289 0.872 - 505.75 11.425 11.644 11.644 2.245 0.014 -0.687 2.245 0.014 -0.010 -1.543 0.031 2.757 0.772 - 505.80 11.231 11.407 11.408 1.994 0.128 -0.881 1.994 0.128 -0.113 -1.757 0.255 2.384 0.890 - 505.85 11.068 11.254 11.257 2.038 -0.276 -1.045 2.038 -0.276 0.288 -2.130 -0.562 2.661 1.111 - 505.90 10.872 11.021 11.042 1.805 -0.677 -1.241 1.805 -0.677 0.840 -2.240 -1.222 2.628 1.343 - 505.95 10.690 10.832 10.842 1.746 -0.484 -1.423 1.746 -0.484 0.688 -2.484 -0.844 2.653 1.356 - 506.00 10.367 10.433 10.439 1.168 -0.372 -1.746 1.168 -0.372 0.649 -2.038 -0.434 2.274 1.091 - 506.05 10.344 10.431 10.446 1.345 -0.568 -1.769 1.345 -0.568 1.004 -2.379 -0.763 2.630 1.346 - 506.10 10.617 10.686 10.714 1.218 -0.763 -1.496 1.218 -0.763 1.142 -1.822 -0.930 2.152 1.171 - 506.15 10.416 10.470 10.488 1.068 -0.609 -1.697 1.068 -0.609 1.034 -1.813 -0.651 2.196 1.093 - 506.20 10.477 10.530 10.542 1.059 -0.486 -1.636 1.059 -0.486 0.796 -1.733 -0.515 2.017 0.988 - 506.25 10.591 10.624 10.656 0.842 -0.822 -1.522 0.842 -0.822 1.251 -1.282 -0.692 1.851 0.960 - 506.30 10.459 10.537 10.555 1.285 -0.605 -1.654 1.285 -0.605 1.000 -2.126 -0.777 2.377 1.237 - 506.35 10.579 10.667 10.673 1.366 -0.372 -1.534 1.366 -0.372 0.571 -2.095 -0.508 2.178 1.115 - 506.40 10.454 10.493 10.502 0.904 -0.441 -1.659 0.904 -0.441 0.732 -1.501 -0.399 1.883 0.858 - 506.45 10.650 10.700 10.708 1.035 -0.420 -1.463 1.035 -0.420 0.614 -1.513 -0.434 1.693 0.845 - 506.50 10.425 10.481 10.491 1.089 -0.443 -1.688 1.089 -0.443 0.747 -1.838 -0.482 2.116 1.021 - 506.55 10.237 10.295 10.310 1.096 -0.549 -1.876 1.096 -0.549 1.030 -2.055 -0.601 2.510 1.188 - 506.60 10.215 10.278 10.284 1.138 -0.345 -1.898 1.138 -0.345 0.655 -2.159 -0.393 2.508 1.145 - 506.65 10.408 10.433 10.438 0.720 -0.323 -1.705 0.720 -0.323 0.551 -1.227 -0.233 1.764 0.683 - 506.70 10.644 10.657 10.676 0.536 -0.631 -1.469 0.536 -0.631 0.927 -0.788 -0.339 1.422 0.632 - 506.75 10.377 10.380 10.388 0.269 -0.397 -1.736 0.269 -0.397 0.690 -0.467 -0.107 1.622 0.420 - 506.80 10.340 10.342 10.342 0.185 -0.032 -1.772 0.185 -0.032 0.056 -0.328 -0.006 1.588 0.166 - 506.85 10.564 10.580 10.580 0.576 0.009 -1.549 0.576 0.009 -0.013 -0.893 0.005 1.365 0.446 - 506.90 10.611 10.625 10.635 0.534 0.459 -1.502 0.534 0.459 -0.689 -0.802 0.245 1.376 0.543 - 506.95 10.482 10.485 10.499 0.258 0.543 -1.631 0.258 0.543 -0.885 -0.421 0.140 1.511 0.495 - 507.00 10.627 10.629 10.652 0.203 0.697 -1.486 0.203 0.697 -1.036 -0.301 0.141 1.367 0.544 - 507.05 10.687 10.694 10.701 0.381 0.393 -1.426 0.381 0.393 -0.560 -0.543 0.150 1.166 0.397 - 507.10 10.884 10.891 10.891 0.378 -0.012 -1.229 0.378 -0.012 0.014 -0.465 -0.004 0.826 0.232 - 507.15 10.751 10.751 10.754 0.132 -0.224 -1.362 0.132 -0.224 0.305 -0.180 -0.030 0.962 0.178 - 507.20 10.691 10.703 10.705 0.496 0.219 -1.421 0.496 0.219 -0.311 -0.705 0.109 1.157 0.389 - 507.25 10.961 10.969 10.978 0.441 0.432 -1.152 0.441 0.432 -0.497 -0.509 0.191 0.854 0.368 - 507.30 10.825 10.847 10.852 0.688 0.343 -1.288 0.688 0.343 -0.442 -0.886 0.236 1.125 0.509 - 507.35 11.114 11.121 11.125 0.389 0.298 -0.998 0.389 0.298 -0.297 -0.388 0.116 0.618 0.251 - 507.40 11.230 11.230 11.235 0.098 0.327 -0.883 0.098 0.327 -0.288 -0.087 0.032 0.448 0.151 - 507.45 11.062 11.062 11.075 0.041 0.523 -1.051 0.041 0.523 -0.549 -0.044 0.022 0.689 0.276 - 507.50 11.078 11.078 11.087 0.011 0.463 -1.035 0.011 0.463 -0.479 -0.011 0.005 0.643 0.240 - 507.55 10.920 10.921 10.924 0.193 0.255 -1.193 0.193 0.255 -0.305 -0.230 0.049 0.763 0.192 - 507.60 10.733 10.738 10.739 0.344 0.094 -1.380 0.344 0.094 -0.130 -0.474 0.032 1.016 0.246 - 507.65 10.774 10.776 10.776 0.190 0.030 -1.338 0.190 0.030 -0.040 -0.254 0.006 0.914 0.129 - 507.70 10.421 10.438 10.443 0.596 0.329 -1.692 0.596 0.329 -0.557 -1.009 0.196 1.664 0.584 - 507.75 10.377 10.399 10.406 0.674 0.385 -1.736 0.674 0.385 -0.669 -1.170 0.260 1.808 0.686 - 507.80 10.671 10.717 10.725 0.992 0.431 -1.442 0.992 0.431 -0.622 -1.431 0.428 1.625 0.809 - 507.85 10.447 10.536 10.546 1.360 0.471 -1.665 1.360 0.471 -0.785 -2.265 0.641 2.422 1.240 - 507.90 10.540 10.620 10.628 1.306 0.404 -1.573 1.306 0.404 -0.636 -2.054 0.528 2.171 1.107 - 507.95 10.406 10.517 10.519 1.523 0.211 -1.707 1.523 0.211 -0.360 -2.599 0.321 2.638 1.322 - 508.00 10.229 10.334 10.340 1.471 0.337 -1.884 1.471 0.337 -0.634 -2.771 0.495 2.913 1.443 - 508.05 10.145 10.220 10.229 1.237 0.431 -1.968 1.237 0.431 -0.849 -2.434 0.534 2.795 1.316 - 508.10 10.160 10.195 10.213 0.847 0.596 -1.953 0.847 0.596 -1.164 -1.655 0.505 2.443 1.043 - 508.15 9.861 9.890 9.906 0.754 0.563 -2.252 0.754 0.563 -1.268 -1.699 0.425 2.978 1.081 - 508.20 9.851 9.873 9.893 0.658 0.640 -2.262 0.658 0.640 -1.447 -1.488 0.421 2.980 1.059 - 508.25 9.977 10.000 10.017 0.664 0.600 -2.135 0.664 0.600 -1.281 -1.418 0.398 2.680 0.976 - 508.30 9.796 9.801 9.838 0.314 0.851 -2.317 0.314 0.851 -1.972 -0.728 0.268 3.096 1.060 - 508.35 9.771 9.801 9.856 0.764 1.040 -2.342 0.764 1.040 -2.435 -1.788 0.794 3.575 1.562 - 508.40 9.845 9.868 9.904 0.672 0.850 -2.268 0.672 0.850 -1.929 -1.524 0.571 3.159 1.262 - 508.45 9.873 9.907 9.944 0.823 0.854 -2.240 0.823 0.854 -1.914 -1.843 0.703 3.213 1.374 - 508.50 10.116 10.144 10.192 0.761 0.989 -1.997 0.761 0.989 -1.976 -1.520 0.753 2.774 1.302 - 508.55 9.849 9.862 9.906 0.510 0.929 -2.264 0.510 0.929 -2.103 -1.156 0.474 3.124 1.223 - 508.60 9.725 9.757 9.780 0.781 0.678 -2.388 0.781 0.678 -1.619 -1.864 0.529 3.385 1.263 - 508.65 9.858 9.866 9.876 0.393 0.432 -2.254 0.393 0.432 -0.974 -0.887 0.170 2.712 0.664 - 508.70 10.005 10.010 10.019 0.320 0.432 -2.108 0.320 0.432 -0.911 -0.675 0.138 2.367 0.571 - 508.75 10.307 10.314 10.326 0.402 0.495 -1.806 0.402 0.495 -0.894 -0.725 0.199 1.834 0.584 - 508.80 10.334 10.336 10.343 0.191 0.384 -1.779 0.191 0.384 -0.683 -0.340 0.073 1.674 0.383 - 508.85 10.035 10.056 10.065 0.647 0.411 -2.077 0.647 0.411 -0.855 -1.344 0.266 2.452 0.807 - 508.90 9.771 9.808 9.821 0.857 0.499 -2.342 0.857 0.499 -1.168 -2.008 0.427 3.235 1.181 - 508.95 9.782 9.824 9.844 0.909 0.635 -2.331 0.909 0.635 -1.480 -2.119 0.577 3.332 1.324 - 509.00 10.086 10.161 10.176 1.233 0.562 -2.027 1.233 0.562 -1.138 -2.499 0.692 2.972 1.416 - 509.05 9.922 9.988 10.023 1.149 0.832 -2.191 1.149 0.832 -1.822 -2.518 0.956 3.406 1.626 - 509.10 9.551 9.594 9.645 0.903 0.996 -2.562 0.903 0.996 -2.551 -2.313 0.899 4.184 1.779 - 509.15 9.554 9.576 9.601 0.641 0.693 -2.559 0.641 0.693 -1.773 -1.639 0.444 3.719 1.228 - 509.20 9.755 9.761 9.779 0.338 0.604 -2.358 0.338 0.604 -1.425 -0.796 0.204 3.020 0.823 - 509.25 9.945 9.945 9.968 0.015 0.675 -2.168 0.015 0.675 -1.462 -0.032 0.010 2.577 0.731 - 509.30 10.123 10.123 10.148 0.062 0.709 -1.990 0.062 0.709 -1.411 -0.123 0.044 2.233 0.708 - 509.35 10.156 10.162 10.195 0.349 0.825 -1.957 0.349 0.825 -1.615 -0.683 0.288 2.317 0.889 - 509.40 9.932 9.934 9.944 0.179 0.456 -2.181 0.179 0.456 -0.995 -0.391 0.082 2.498 0.536 - 509.45 9.549 9.557 9.575 0.404 0.582 -2.564 0.404 0.582 -1.493 -1.035 0.235 3.539 0.916 - 509.50 9.636 9.648 9.657 0.469 0.414 -2.477 0.469 0.414 -1.026 -1.162 0.194 3.263 0.781 - 509.55 9.456 9.466 9.481 0.450 0.525 -2.657 0.450 0.525 -1.396 -1.196 0.237 3.770 0.927 - 509.60 9.380 9.381 9.398 0.157 0.562 -2.733 0.157 0.562 -1.535 -0.429 0.088 3.904 0.798 - 509.65 9.369 9.381 9.422 0.487 0.874 -2.744 0.487 0.874 -2.398 -1.337 0.426 4.266 1.389 - 509.70 8.974 8.996 9.027 0.642 0.745 -3.139 0.642 0.745 -2.339 -2.015 0.478 5.411 1.562 - 509.75 8.826 8.828 8.844 0.145 0.536 -3.286 0.145 0.536 -1.762 -0.476 0.078 5.554 0.914 - 509.80 8.825 8.830 8.842 0.281 0.476 -3.288 0.281 0.476 -1.565 -0.923 0.134 5.557 0.911 - 509.85 8.900 8.923 8.924 0.643 0.109 -3.213 0.643 0.109 -0.350 -2.066 0.070 5.374 1.048 - 509.90 9.053 9.102 9.103 0.948 0.107 -3.060 0.948 0.107 -0.326 -2.900 0.101 5.137 1.460 - 509.95 9.331 9.370 9.372 0.850 0.207 -2.782 0.850 0.207 -0.574 -2.366 0.176 4.252 1.220 - 510.00 9.242 9.261 9.270 0.591 0.411 -2.871 0.591 0.411 -1.180 -1.697 0.243 4.380 1.041 - 510.05 9.175 9.180 9.187 0.316 0.340 -2.938 0.316 0.340 -0.998 -0.928 0.107 4.423 0.683 - 510.10 9.185 9.193 9.199 0.402 0.314 -2.928 0.402 0.314 -0.920 -1.176 0.126 4.417 0.749 - 510.15 9.518 9.524 9.527 0.330 0.263 -2.595 0.330 0.263 -0.683 -0.857 0.087 3.455 0.550 - 510.20 9.359 9.369 9.374 0.444 0.308 -2.754 0.444 0.308 -0.847 -1.223 0.137 3.938 0.747 - 510.25 9.256 9.266 9.266 0.434 0.086 -2.857 0.434 0.086 -0.247 -1.240 0.038 4.179 0.633 - 510.30 9.455 9.471 9.472 0.554 0.132 -2.658 0.554 0.132 -0.351 -1.474 0.073 3.696 0.758 - 510.35 9.218 9.254 9.266 0.818 0.471 -2.895 0.818 0.471 -1.363 -2.367 0.385 4.635 1.379 - 510.40 9.220 9.278 9.289 1.038 0.464 -2.893 1.038 0.464 -1.341 -3.005 0.481 4.832 1.663 - 510.45 9.358 9.408 9.410 0.973 0.178 -2.755 0.973 0.178 -0.492 -2.680 0.174 4.283 1.365 - 510.50 9.421 9.454 9.458 0.789 0.250 -2.691 0.789 0.250 -0.672 -2.123 0.197 3.964 1.118 - 510.55 9.669 9.715 9.728 0.943 0.496 -2.443 0.943 0.496 -1.213 -2.303 0.468 3.553 1.322 - 510.60 9.760 9.799 9.810 0.873 0.467 -2.353 0.873 0.467 -1.098 -2.054 0.407 3.258 1.182 - 510.65 9.685 9.740 9.750 1.030 0.449 -2.428 1.030 0.449 -1.091 -2.501 0.463 3.579 1.384 - 510.70 9.704 9.800 9.809 1.372 0.406 -2.409 1.372 0.406 -0.977 -3.305 0.556 3.925 1.745 - 510.75 9.558 9.634 9.658 1.206 0.689 -2.555 1.206 0.689 -1.761 -3.080 0.831 4.228 1.822 - 510.80 9.662 9.729 9.767 1.146 0.854 -2.451 1.146 0.854 -2.092 -2.810 0.979 4.026 1.819 - 510.85 9.774 9.859 9.897 1.290 0.864 -2.339 1.290 0.864 -2.020 -3.018 1.115 3.941 1.900 - 510.90 9.298 9.379 9.411 1.228 0.770 -2.814 1.228 0.770 -2.167 -3.457 0.946 5.011 2.094 - 510.95 9.245 9.318 9.354 1.165 0.821 -2.868 1.165 0.821 -2.354 -3.341 0.956 5.128 2.099 - 511.00 8.867 8.961 9.001 1.296 0.844 -3.246 1.296 0.844 -2.739 -4.207 1.093 6.464 2.569 - 511.05 8.935 9.024 9.063 1.261 0.840 -3.177 1.261 0.840 -2.669 -4.007 1.059 6.196 2.465 - 511.10 8.989 9.067 9.097 1.186 0.743 -3.124 1.186 0.743 -2.322 -3.706 0.882 5.859 2.231 - 511.15 9.088 9.198 9.238 1.416 0.861 -3.024 1.416 0.861 -2.605 -4.284 1.220 5.948 2.580 - 511.20 9.103 9.243 9.330 1.606 1.268 -3.010 1.606 1.268 -3.816 -4.834 2.036 6.623 3.243 - 511.25 9.017 9.138 9.223 1.480 1.255 -3.096 1.480 1.255 -3.886 -4.582 1.857 6.675 3.144 - 511.30 8.902 9.067 9.115 1.724 0.934 -3.211 1.724 0.934 -2.998 -5.535 1.609 7.078 3.249 - 511.35 8.925 9.000 9.032 1.159 0.758 -3.188 1.159 0.758 -2.417 -3.696 0.879 6.041 2.251 - 511.40 9.036 9.073 9.105 0.826 0.761 -3.077 0.826 0.761 -2.342 -2.543 0.629 5.365 1.757 - 511.45 9.040 9.081 9.083 0.866 0.173 -3.073 0.866 0.173 -0.531 -2.660 0.150 5.111 1.358 - 511.50 9.244 9.272 9.277 0.718 -0.302 -2.869 0.718 -0.302 0.867 -2.058 -0.217 4.418 1.122 - 511.55 9.416 9.458 9.460 0.895 -0.141 -2.697 0.895 -0.141 0.380 -2.414 -0.126 4.047 1.224 - 511.60 9.268 9.334 9.335 1.113 -0.108 -2.845 1.113 -0.108 0.308 -3.166 -0.121 4.672 1.592 - 511.65 9.155 9.237 9.237 1.227 -0.039 -2.958 1.227 -0.039 0.114 -3.630 -0.047 5.128 1.816 - 511.70 9.485 9.553 9.554 1.142 0.125 -2.628 1.142 0.125 -0.328 -3.002 0.143 4.114 1.512 - 511.75 9.545 9.578 9.579 0.799 0.127 -2.568 0.799 0.127 -0.327 -2.052 0.102 3.624 1.040 - 511.80 9.609 9.643 9.643 0.811 -0.051 -2.504 0.811 -0.051 0.129 -2.030 -0.042 3.465 1.017 - 511.85 9.846 9.857 9.858 0.465 -0.147 -2.267 0.465 -0.147 0.333 -1.054 -0.068 2.688 0.554 - 511.90 9.756 9.762 9.774 0.341 0.485 -2.357 0.341 0.485 -1.143 -0.803 0.165 2.953 0.703 - 511.95 10.027 10.039 10.045 0.498 0.353 -2.086 0.498 0.353 -0.737 -1.039 0.176 2.363 0.643 - 512.00 10.533 10.545 10.548 0.492 0.268 -1.579 0.492 0.268 -0.423 -0.777 0.132 1.404 0.447 - 512.05 10.486 10.513 10.514 0.751 0.173 -1.627 0.751 0.173 -0.281 -1.222 0.130 1.621 0.630 - 512.10 10.543 10.597 10.604 1.075 0.358 -1.570 1.075 0.358 -0.562 -1.688 0.385 1.875 0.910 - 512.15 10.550 10.599 10.605 1.015 0.340 -1.562 1.015 0.340 -0.531 -1.585 0.345 1.793 0.854 - 512.20 10.498 10.534 10.539 0.876 0.316 -1.615 0.876 0.316 -0.511 -1.415 0.277 1.738 0.765 - 512.25 10.412 10.464 10.465 1.041 0.139 -1.701 1.041 0.139 -0.236 -1.771 0.145 1.998 0.896 - 512.30 10.575 10.658 10.659 1.322 0.205 -1.538 1.322 0.205 -0.315 -2.033 0.271 2.077 1.037 - 512.35 10.869 10.968 10.968 1.467 0.063 -1.244 1.467 0.063 -0.078 -1.825 0.092 1.852 0.914 - 512.40 10.499 10.582 10.583 1.320 0.157 -1.613 1.320 0.157 -0.254 -2.131 0.208 2.186 1.078 - 512.45 10.206 10.317 10.318 1.507 -0.168 -1.906 1.507 -0.168 0.320 -2.873 -0.253 2.966 1.451 - 512.50 10.020 10.123 10.126 1.439 -0.252 -2.093 1.439 -0.252 0.526 -3.011 -0.362 3.256 1.539 - 512.55 10.015 10.142 10.150 1.599 -0.408 -2.098 1.599 -0.408 0.855 -3.354 -0.652 3.561 1.761 - 512.60 9.989 10.112 10.113 1.578 0.072 -2.124 1.578 0.072 -0.152 -3.352 0.113 3.503 1.679 - 512.65 9.971 10.143 10.143 1.859 0.004 -2.142 1.859 0.004 -0.009 -3.981 0.008 4.021 1.990 - 512.70 10.013 10.146 10.155 1.641 -0.420 -2.100 1.641 -0.420 0.882 -3.447 -0.689 3.640 1.812 - 512.75 9.950 10.040 10.065 1.345 -0.707 -2.163 1.345 -0.707 1.529 -2.909 -0.951 3.494 1.711 - 512.80 10.081 10.208 10.222 1.600 -0.536 -2.031 1.600 -0.536 1.088 -3.250 -0.857 3.487 1.767 - 512.85 9.867 10.057 10.070 1.941 -0.522 -2.245 1.941 -0.522 1.171 -4.359 -1.013 4.541 2.313 - 512.90 9.784 9.953 9.992 1.823 -0.883 -2.328 1.823 -0.883 2.057 -4.245 -1.611 4.763 2.492 - 512.95 9.687 9.828 9.832 1.655 -0.281 -2.426 1.655 -0.281 0.682 -4.015 -0.466 4.351 2.050 - 513.00 9.514 9.647 9.648 1.600 -0.087 -2.599 1.600 -0.087 0.226 -4.160 -0.139 4.662 2.084 - 513.05 9.449 9.634 9.656 1.877 -0.660 -2.664 1.877 -0.660 1.759 -4.999 -1.239 5.527 2.721 - 513.10 9.288 9.368 9.379 1.223 -0.455 -2.825 1.223 -0.455 1.284 -3.455 -0.556 4.841 1.864 - 513.15 9.527 9.621 9.636 1.340 -0.530 -2.585 1.340 -0.530 1.371 -3.464 -0.710 4.380 1.896 - 513.20 9.548 9.628 9.652 1.244 -0.674 -2.565 1.244 -0.674 1.728 -3.191 -0.838 4.290 1.862 - 513.25 9.454 9.529 9.541 1.194 -0.491 -2.659 1.194 -0.491 1.306 -3.174 -0.586 4.369 1.741 - 513.30 9.054 9.079 9.086 0.675 -0.345 -3.059 0.675 -0.345 1.055 -2.065 -0.233 4.965 1.165 - 513.35 9.000 9.014 9.023 0.497 -0.416 -3.113 0.497 -0.416 1.295 -1.548 -0.207 5.055 1.014 - 513.40 9.248 9.291 9.313 0.894 -0.645 -2.865 0.894 -0.645 1.848 -2.562 -0.577 4.712 1.606 - 513.45 9.513 9.555 9.577 0.900 -0.645 -2.600 0.900 -0.645 1.678 -2.341 -0.581 3.994 1.469 - 513.50 9.214 9.269 9.281 1.013 -0.476 -2.899 1.013 -0.476 1.379 -2.937 -0.482 4.829 1.640 - 513.55 9.204 9.250 9.268 0.925 -0.575 -2.909 0.925 -0.575 1.672 -2.690 -0.531 4.823 1.606 - 513.60 8.996 9.018 9.026 0.634 -0.372 -3.117 0.634 -0.372 1.161 -1.977 -0.236 5.129 1.152 - 513.65 9.338 9.368 9.395 0.748 -0.711 -2.775 0.748 -0.711 1.972 -2.075 -0.531 4.382 1.456 - 513.70 9.089 9.105 9.133 0.544 -0.709 -3.024 0.544 -0.709 2.145 -1.645 -0.386 4.972 1.365 - 513.75 8.906 8.922 8.936 0.536 -0.499 -3.206 0.536 -0.499 1.600 -1.719 -0.268 5.409 1.182 - 513.80 9.294 9.315 9.322 0.626 -0.363 -2.819 0.626 -0.363 1.024 -1.763 -0.227 4.234 1.026 - 513.85 9.081 9.124 9.131 0.885 -0.366 -3.032 0.885 -0.366 1.111 -2.684 -0.324 5.056 1.461 - 513.90 9.250 9.316 9.350 1.108 -0.794 -2.863 1.108 -0.794 2.273 -3.173 -0.880 5.028 2.001 - 513.95 9.149 9.227 9.298 1.196 -1.143 -2.963 1.196 -1.143 3.386 -3.543 -1.366 5.759 2.544 - 514.00 9.221 9.329 9.411 1.415 -1.239 -2.892 1.415 -1.239 3.582 -4.092 -1.753 5.949 2.857 - 514.05 9.556 9.703 9.756 1.683 -1.011 -2.556 1.683 -1.011 2.584 -4.302 -1.701 5.194 2.649 - 514.10 9.642 9.753 9.796 1.471 -0.910 -2.471 1.471 -0.910 2.249 -3.634 -1.339 4.548 2.239 - 514.15 9.565 9.638 9.700 1.190 -1.088 -2.548 1.190 -1.088 2.773 -3.033 -1.295 4.547 2.154 - 514.20 9.531 9.607 9.651 1.211 -0.916 -2.582 1.211 -0.916 2.366 -3.128 -1.110 4.487 2.038 - 514.25 9.724 9.816 9.831 1.336 -0.553 -2.388 1.336 -0.553 1.320 -3.191 -0.739 3.898 1.766 - 514.30 9.751 9.825 9.841 1.208 -0.555 -2.362 1.208 -0.555 1.311 -2.854 -0.671 3.674 1.606 - 514.35 9.441 9.511 9.531 1.154 -0.615 -2.672 1.154 -0.615 1.644 -3.084 -0.710 4.425 1.783 - 514.40 9.660 9.766 9.803 1.431 -0.855 -2.452 1.431 -0.855 2.097 -3.509 -1.224 4.397 2.134 - 514.45 9.757 9.863 9.907 1.441 -0.932 -2.355 1.441 -0.932 2.195 -3.394 -1.343 4.246 2.130 - 514.50 9.750 9.855 9.902 1.434 -0.966 -2.363 1.434 -0.966 2.283 -3.388 -1.386 4.287 2.157 - 514.55 9.738 9.819 9.882 1.259 -1.116 -2.375 1.259 -1.116 2.651 -2.990 -1.405 4.235 2.118 - 514.60 9.740 9.838 9.863 1.386 -0.699 -2.373 1.386 -0.699 1.660 -3.288 -0.969 4.020 1.904 - 514.65 9.780 9.883 9.897 1.422 -0.527 -2.333 1.422 -0.527 1.230 -3.316 -0.750 3.870 1.808 - 514.70 9.939 10.052 10.083 1.500 -0.788 -2.174 1.500 -0.788 1.712 -3.260 -1.182 3.798 1.934 - 514.75 9.916 10.051 10.078 1.637 -0.744 -2.196 1.637 -0.744 1.633 -3.595 -1.217 4.028 2.066 - 514.80 9.930 10.042 10.061 1.497 -0.607 -2.183 1.497 -0.607 1.325 -3.268 -0.909 3.687 1.821 - 514.85 9.725 9.846 9.870 1.536 -0.686 -2.387 1.536 -0.686 1.638 -3.666 -1.053 4.264 2.076 - 514.90 9.742 9.880 9.891 1.640 -0.477 -2.370 1.640 -0.477 1.131 -3.888 -0.783 4.269 2.062 - 514.95 9.780 9.915 9.919 1.630 -0.282 -2.332 1.630 -0.282 0.659 -3.802 -0.460 4.088 1.943 - 515.00 9.739 9.961 9.961 2.093 0.057 -2.374 2.093 0.057 -0.136 -4.968 0.120 5.009 2.486 - 515.05 9.769 9.954 9.956 1.914 -0.161 -2.344 1.914 -0.161 0.376 -4.486 -0.307 4.591 2.256 - 515.10 9.681 9.873 9.874 1.940 -0.070 -2.432 1.940 -0.070 0.170 -4.717 -0.135 4.840 2.361 - 515.15 9.589 9.784 9.784 1.942 -0.036 -2.524 1.942 -0.036 0.092 -4.900 -0.071 5.070 2.451 - 515.20 9.678 9.854 9.857 1.853 -0.230 -2.435 1.853 -0.230 0.561 -4.513 -0.427 4.708 2.284 - 515.25 9.855 10.053 10.054 1.985 -0.134 -2.257 1.985 -0.134 0.302 -4.481 -0.265 4.527 2.250 - 515.30 9.773 9.949 9.954 1.866 -0.323 -2.340 1.866 -0.323 0.756 -4.367 -0.603 4.532 2.237 - 515.35 9.728 9.922 9.931 1.948 -0.437 -2.384 1.948 -0.437 1.041 -4.644 -0.851 4.835 2.417 - 515.40 9.913 10.025 10.031 1.497 -0.354 -2.200 1.497 -0.354 0.780 -3.295 -0.531 3.604 1.713 - 515.45 9.790 10.021 10.039 2.142 -0.598 -2.323 2.142 -0.598 1.389 -4.977 -1.281 5.172 2.662 - 515.50 9.877 10.166 10.190 2.407 -0.699 -2.236 2.407 -0.699 1.562 -5.382 -1.682 5.641 2.926 - 515.55 9.998 10.270 10.306 2.351 -0.860 -2.115 2.351 -0.860 1.820 -4.972 -2.022 5.370 2.834 - 515.60 9.715 10.022 10.045 2.462 -0.668 -2.398 2.462 -0.668 1.600 -5.903 -1.643 6.128 3.166 - 515.65 9.288 9.614 9.627 2.483 -0.510 -2.825 2.483 -0.510 1.440 -7.014 -1.266 7.202 3.636 - 515.70 8.986 9.226 9.234 2.089 -0.383 -3.127 2.089 -0.383 1.196 -6.531 -0.799 7.143 3.344 - 515.75 8.800 9.067 9.072 2.185 -0.305 -3.313 2.185 -0.305 1.011 -7.240 -0.667 7.923 3.670 - 515.80 9.018 9.271 9.278 2.151 -0.362 -3.095 2.151 -0.362 1.120 -6.657 -0.778 7.167 3.398 - 515.85 8.953 9.111 9.111 1.689 0.001 -3.160 1.689 0.001 -0.005 -5.339 0.002 6.420 2.669 - 515.90 8.922 9.061 9.061 1.584 0.049 -3.191 1.584 0.049 -0.155 -5.055 0.077 6.347 2.529 - 515.95 9.179 9.334 9.334 1.693 -0.089 -2.934 1.693 -0.089 0.260 -4.968 -0.150 5.741 2.488 - 516.00 9.290 9.414 9.419 1.521 -0.323 -2.823 1.521 -0.323 0.911 -4.294 -0.491 5.194 2.209 - 516.05 9.116 9.239 9.239 1.502 0.003 -2.997 1.502 0.003 -0.009 -4.503 0.004 5.620 2.251 - 516.10 8.807 8.968 8.969 1.691 0.155 -3.306 1.691 0.155 -0.513 -5.590 0.262 6.906 2.810 - 516.15 8.927 9.119 9.120 1.863 -0.152 -3.186 1.863 -0.152 0.486 -5.936 -0.284 6.823 2.981 - 516.20 9.164 9.261 9.277 1.332 -0.542 -2.948 1.332 -0.542 1.597 -3.926 -0.721 5.380 2.150 - 516.25 9.636 9.729 9.741 1.346 -0.482 -2.477 1.346 -0.482 1.194 -3.334 -0.648 4.090 1.800 - 516.30 9.489 9.631 9.631 1.652 -0.014 -2.624 1.652 -0.014 0.038 -4.336 -0.024 4.809 2.168 - 516.35 9.310 9.471 9.471 1.740 -0.025 -2.803 1.740 -0.025 0.071 -4.877 -0.044 5.442 2.439 - 516.40 9.158 9.257 9.257 1.350 -0.006 -2.955 1.350 -0.006 0.017 -3.989 -0.008 5.277 1.994 - 516.45 9.212 9.300 9.304 1.277 0.251 -2.901 1.277 0.251 -0.727 -3.705 0.320 5.054 1.895 - 516.50 8.998 9.089 9.101 1.286 0.467 -3.115 1.286 0.467 -1.456 -4.005 0.601 5.788 2.152 - 516.55 8.861 8.948 8.955 1.246 0.351 -3.252 1.246 0.351 -1.143 -4.052 0.438 6.126 2.116 - 516.60 8.675 8.759 8.771 1.213 0.455 -3.438 1.213 0.455 -1.563 -4.171 0.551 6.750 2.244 - 516.65 8.423 8.468 8.490 0.880 0.611 -3.690 0.880 0.611 -2.255 -3.247 0.538 7.383 1.995 - 516.70 8.502 8.542 8.556 0.822 0.500 -3.611 0.822 0.500 -1.807 -2.970 0.412 6.983 1.750 - 516.75 8.491 8.514 8.521 0.623 0.361 -3.622 0.623 0.361 -1.309 -2.256 0.225 6.819 1.309 - 516.80 8.618 8.635 8.646 0.550 0.438 -3.495 0.550 0.438 -1.532 -1.922 0.241 6.356 1.235 - 516.85 8.741 8.788 8.789 0.911 0.147 -3.372 0.911 0.147 -0.495 -3.073 0.134 6.112 1.558 - 516.90 8.964 8.968 8.969 0.275 -0.109 -3.149 0.275 -0.109 0.343 -0.866 -0.030 5.001 0.466 - 516.95 9.019 9.021 9.040 -0.197 -0.595 -3.094 -0.197 -0.595 1.842 0.610 0.117 4.984 0.972 - 517.00 8.706 8.706 8.710 0.036 -0.255 -3.406 0.036 -0.255 0.869 -0.122 -0.009 5.835 0.439 - 517.05 8.531 8.533 8.543 0.207 -0.417 -3.582 0.207 -0.417 1.493 -0.740 -0.086 6.524 0.835 - 517.10 8.361 8.368 8.376 0.330 -0.382 -3.752 0.330 -0.382 1.432 -1.237 -0.126 7.165 0.948 - 517.15 8.545 8.547 8.564 0.201 -0.536 -3.568 0.201 -0.536 1.913 -0.717 -0.108 6.529 1.023 - 517.20 8.785 8.787 8.821 0.177 -0.773 -3.328 0.177 -0.773 2.572 -0.588 -0.136 5.851 1.321 - 517.25 8.749 8.751 8.752 0.177 -0.156 -3.364 0.177 -0.156 0.523 -0.596 -0.028 5.686 0.397 - 517.30 8.350 8.352 8.357 0.174 -0.273 -3.762 0.174 -0.273 1.029 -0.657 -0.048 7.131 0.611 - 517.35 8.493 8.493 8.509 0.063 -0.519 -3.620 0.063 -0.519 1.878 -0.228 -0.033 6.689 0.946 - 517.40 8.662 8.667 8.671 0.311 -0.257 -3.451 0.311 -0.257 0.886 -1.074 -0.080 6.037 0.697 - 517.45 8.701 8.715 8.715 0.501 0.035 -3.412 0.501 0.035 -0.120 -1.709 0.018 5.947 0.857 - 517.50 8.882 8.917 8.917 0.793 0.056 -3.231 0.793 0.056 -0.182 -2.562 0.045 5.536 1.285 - 517.55 8.737 8.777 8.791 0.844 0.489 -3.376 0.844 0.489 -1.652 -2.848 0.413 6.174 1.659 - 517.60 9.178 9.224 9.243 0.924 0.589 -2.935 0.924 0.589 -1.728 -2.711 0.544 4.906 1.630 - 517.65 9.223 9.273 9.311 0.958 0.840 -2.890 0.958 0.840 -2.427 -2.769 0.805 4.987 1.884 - 517.70 9.011 9.027 9.053 0.527 0.698 -3.102 0.527 0.698 -2.166 -1.634 0.368 5.193 1.369 - 517.75 8.887 8.912 8.939 0.668 0.692 -3.226 0.668 0.692 -2.232 -2.155 0.462 5.666 1.569 - 517.80 9.275 9.284 9.292 0.417 0.395 -2.838 0.417 0.395 -1.120 -1.183 0.165 4.192 0.819 - 517.85 9.241 9.246 9.263 0.321 0.567 -2.872 0.321 0.567 -1.628 -0.921 0.182 4.337 0.940 - 517.90 9.355 9.358 9.386 0.268 0.717 -2.758 0.268 0.717 -1.979 -0.741 0.193 4.097 1.061 - 517.95 9.327 9.330 9.344 0.226 0.518 -2.786 0.226 0.518 -1.443 -0.631 0.117 4.040 0.790 - 518.00 9.185 9.188 9.204 0.235 0.541 -2.928 0.235 0.541 -1.583 -0.688 0.127 4.459 0.865 - 518.05 9.297 9.298 9.326 0.153 0.714 -2.816 0.153 0.714 -2.010 -0.431 0.109 4.230 1.029 - 518.10 9.477 9.479 9.481 -0.161 0.208 -2.635 -0.161 0.208 -0.549 0.425 -0.034 3.507 0.348 - 518.15 9.475 9.481 9.481 -0.317 -0.087 -2.638 -0.317 -0.087 0.228 0.836 0.027 3.532 0.434 - 518.20 9.750 9.768 9.768 -0.589 0.055 -2.363 -0.589 0.055 -0.130 1.391 -0.032 2.966 0.699 - 518.25 9.847 9.859 9.860 -0.494 0.146 -2.266 -0.494 0.146 -0.331 1.120 -0.072 2.701 0.585 - 518.30 9.943 9.952 9.952 -0.444 -0.024 -2.170 -0.444 -0.024 0.051 0.963 0.011 2.454 0.482 - 518.35 9.862 9.873 9.873 -0.449 0.006 -2.250 -0.449 0.006 -0.013 1.011 -0.003 2.633 0.505 - 518.40 9.816 9.842 9.849 -0.715 0.376 -2.297 -0.715 0.376 -0.863 1.643 -0.269 2.964 0.938 - 518.45 10.168 10.193 10.211 -0.718 0.616 -1.945 -0.718 0.616 -1.199 1.397 -0.442 2.340 0.947 - 518.50 10.167 10.179 10.184 -0.498 0.304 -1.946 -0.498 0.304 -0.591 0.969 -0.151 2.063 0.573 - 518.55 10.106 10.111 10.126 -0.322 0.548 -2.007 -0.322 0.548 -1.100 0.647 -0.177 2.216 0.644 - 518.60 10.477 10.484 10.502 -0.383 0.629 -1.636 -0.383 0.629 -1.030 0.627 -0.241 1.610 0.615 - 518.65 10.076 10.089 10.103 -0.516 0.536 -2.037 -0.516 0.536 -1.092 1.052 -0.277 2.352 0.771 - 518.70 10.303 10.318 10.357 -0.566 0.898 -1.810 -0.566 0.898 -1.626 1.025 -0.509 2.202 0.994 - 518.75 10.282 10.297 10.389 -0.558 1.379 -1.831 -0.558 1.379 -2.525 1.021 -0.770 2.782 1.415 - 518.80 10.014 10.017 10.120 -0.276 1.438 -2.099 -0.276 1.438 -3.019 0.580 -0.397 3.275 1.550 - 518.85 9.720 9.730 9.802 -0.422 1.191 -2.392 -0.422 1.191 -2.849 1.011 -0.503 3.660 1.532 - 518.90 9.609 9.612 9.673 -0.233 1.086 -2.504 -0.233 1.086 -2.720 0.585 -0.254 3.751 1.397 - 518.95 9.775 9.777 9.816 -0.182 0.879 -2.338 -0.182 0.879 -2.055 0.425 -0.160 3.135 1.052 - 519.00 9.831 9.838 9.879 -0.383 0.901 -2.282 -0.383 0.901 -2.056 0.875 -0.345 3.083 1.130 - 519.05 9.847 9.851 9.879 -0.279 0.749 -2.266 -0.279 0.749 -1.698 0.632 -0.209 2.886 0.912 - 519.10 9.676 9.681 9.714 -0.312 0.797 -2.437 -0.312 0.797 -1.942 0.759 -0.248 3.334 1.050 - 519.15 10.083 10.084 10.144 -0.148 1.101 -2.030 -0.148 1.101 -2.234 0.300 -0.163 2.677 1.130 - 519.20 9.966 9.967 9.988 0.074 0.658 -2.146 0.074 0.658 -1.413 -0.158 0.048 2.523 0.711 - 519.25 9.746 9.750 9.813 -0.292 1.106 -2.367 -0.292 1.106 -2.619 0.691 -0.323 3.456 1.364 - 519.30 9.936 9.957 10.010 -0.646 1.037 -2.177 -0.646 1.037 -2.258 1.406 -0.670 3.116 1.371 - 519.35 9.683 9.696 9.754 -0.507 1.066 -2.430 -0.507 1.066 -2.590 1.231 -0.540 3.649 1.459 - 519.40 9.820 9.823 9.863 -0.230 0.887 -2.293 -0.230 0.887 -2.033 0.528 -0.204 3.048 1.055 - 519.45 9.944 9.950 9.965 -0.336 0.544 -2.168 -0.336 0.544 -1.180 0.729 -0.183 2.556 0.699 - 519.50 9.695 9.702 9.721 -0.344 0.612 -2.417 -0.344 0.612 -1.480 0.832 -0.211 3.169 0.856 - 519.55 9.401 9.401 9.415 -0.059 0.501 -2.712 -0.059 0.501 -1.359 0.159 -0.029 3.804 0.684 - 519.60 9.680 9.684 9.690 -0.272 0.358 -2.433 -0.272 0.358 -0.870 0.662 -0.097 3.060 0.549 - 519.65 9.803 9.805 9.814 -0.235 0.405 -2.310 -0.235 0.405 -0.935 0.544 -0.095 2.778 0.543 - 519.70 9.771 9.772 9.786 -0.129 0.515 -2.341 -0.129 0.515 -1.206 0.301 -0.066 2.882 0.622 - 519.75 9.753 9.753 9.757 -0.123 0.277 -2.360 -0.123 0.277 -0.653 0.289 -0.034 2.831 0.358 - 519.80 10.002 10.012 10.015 -0.454 0.255 -2.111 -0.454 0.255 -0.539 0.959 -0.116 2.364 0.553 - 519.85 10.280 10.290 10.291 -0.465 -0.083 -1.833 -0.465 -0.083 0.152 0.851 0.039 1.791 0.433 - 519.90 10.305 10.308 10.309 -0.250 0.123 -1.807 -0.250 0.123 -0.222 0.451 -0.031 1.672 0.252 - 519.95 10.469 10.472 10.472 -0.234 -0.012 -1.643 -0.234 -0.012 0.019 0.384 0.003 1.378 0.192 - 520.00 10.458 10.458 10.461 -0.093 -0.220 -1.655 -0.093 -0.220 0.364 0.155 0.021 1.398 0.198 - 520.05 10.522 10.525 10.531 0.268 -0.336 -1.591 0.268 -0.336 0.535 -0.426 -0.090 1.358 0.345 - 520.10 10.797 10.797 10.801 0.070 -0.295 -1.316 0.070 -0.295 0.388 -0.092 -0.021 0.912 0.200 - 520.15 10.930 10.931 10.939 -0.184 -0.407 -1.183 -0.184 -0.407 0.482 0.218 0.075 0.800 0.267 - 520.20 10.793 10.795 10.806 -0.247 -0.465 -1.320 -0.247 -0.465 0.614 0.325 0.115 1.010 0.352 - 520.25 10.594 10.610 10.612 -0.583 -0.215 -1.519 -0.583 -0.215 0.327 0.886 0.126 1.347 0.476 - 520.30 11.074 11.113 11.120 -0.927 -0.397 -1.038 -0.927 -0.397 0.412 0.962 0.368 1.047 0.555 - 520.35 11.321 11.369 11.370 -1.041 -0.119 -0.791 -1.041 -0.119 0.094 0.824 0.124 0.862 0.419 - 520.40 11.017 11.055 11.062 -0.922 0.379 -1.096 -0.922 0.379 -0.415 1.010 -0.349 1.097 0.573 - 520.45 11.086 11.115 11.124 -0.809 0.441 -1.027 -0.809 0.441 -0.453 0.831 -0.357 0.952 0.506 - 520.50 11.102 11.129 11.146 -0.769 0.616 -1.010 -0.769 0.616 -0.623 0.777 -0.474 0.996 0.552 - 520.55 11.017 11.066 11.081 -1.048 0.577 -1.096 -1.048 0.577 -0.632 1.149 -0.605 1.316 0.722 - 520.60 10.988 11.054 11.076 -1.202 0.699 -1.124 -1.202 0.699 -0.786 1.352 -0.840 1.599 0.888 - 520.65 10.979 11.023 11.039 -0.990 0.591 -1.134 -0.990 0.591 -0.670 1.122 -0.585 1.307 0.716 - 520.70 11.025 11.046 11.053 -0.673 0.394 -1.088 -0.673 0.394 -0.429 0.732 -0.265 0.896 0.444 - 520.75 11.027 11.065 11.068 -0.917 0.241 -1.086 -0.917 0.241 -0.262 0.996 -0.221 1.040 0.527 - 520.80 11.188 11.232 11.234 -0.994 -0.230 -0.925 -0.994 -0.230 0.213 0.919 0.229 0.948 0.486 - 520.85 10.946 11.026 11.026 -1.321 -0.047 -1.167 -1.321 -0.047 0.055 1.541 0.062 1.554 0.772 - 520.90 11.258 11.347 11.347 -1.413 -0.125 -0.855 -1.413 -0.125 0.107 1.208 0.177 1.371 0.613 - 520.95 11.601 11.691 11.693 -1.451 0.231 -0.512 -1.451 0.231 -0.118 0.743 -0.335 1.210 0.412 - 521.00 11.775 11.868 11.887 -1.479 0.686 -0.338 -1.479 0.686 -0.232 0.499 -1.014 1.386 0.577 - 521.05 11.658 11.734 11.745 -1.330 0.509 -0.455 -1.330 0.509 -0.231 0.605 -0.676 1.117 0.468 - 521.10 11.239 11.315 11.329 -1.305 0.571 -0.874 -1.305 0.571 -0.499 1.140 -0.745 1.396 0.725 - 521.15 11.161 11.298 11.302 -1.756 0.291 -0.952 -1.756 0.291 -0.277 1.672 -0.511 2.037 0.885 - 521.20 10.998 11.092 11.094 -1.442 0.245 -1.115 -1.442 0.245 -0.273 1.608 -0.353 1.691 0.834 - 521.25 11.038 11.112 11.112 -1.280 0.057 -1.075 -1.280 0.057 -0.061 1.376 -0.073 1.399 0.690 - 521.30 11.404 11.497 11.497 -1.459 0.043 -0.709 -1.459 0.043 -0.031 1.034 -0.063 1.316 0.518 - 521.35 11.634 11.705 11.709 -1.285 0.283 -0.478 -1.285 0.283 -0.135 0.615 -0.364 0.980 0.364 - 521.40 11.613 11.729 11.729 -1.649 0.090 -0.500 -1.649 0.090 -0.045 0.825 -0.148 1.489 0.420 - 521.45 11.352 11.502 11.515 -1.852 0.537 -0.761 -1.852 0.537 -0.408 1.409 -0.994 2.148 0.886 - 521.50 11.491 11.630 11.638 -1.794 0.440 -0.622 -1.794 0.440 -0.274 1.116 -0.789 1.899 0.697 - 521.55 11.121 11.314 11.322 -2.081 0.431 -0.992 -2.081 0.431 -0.428 2.064 -0.898 2.751 1.146 - 521.60 10.895 11.045 11.055 -1.812 0.465 -1.218 -1.812 0.465 -0.566 2.207 -0.842 2.492 1.215 - 521.65 11.137 11.288 11.296 -1.844 0.410 -0.976 -1.844 0.410 -0.400 1.800 -0.756 2.261 0.997 - 521.70 11.418 11.532 11.538 -1.616 0.351 -0.694 -1.616 0.351 -0.244 1.122 -0.567 1.609 0.640 - 521.75 11.124 11.246 11.260 -1.652 0.559 -0.989 -1.652 0.559 -0.553 1.633 -0.924 2.009 0.978 - 521.80 11.118 11.254 11.266 -1.745 0.534 -0.995 -1.745 0.534 -0.531 1.737 -0.931 2.161 1.021 - 521.85 11.181 11.314 11.335 -1.731 0.686 -0.932 -1.731 0.686 -0.640 1.612 -1.188 2.167 1.051 - 521.90 11.099 11.239 11.269 -1.769 0.818 -1.013 -1.769 0.818 -0.828 1.792 -1.446 2.412 1.224 - 521.95 11.258 11.411 11.422 -1.863 0.494 -0.855 -1.863 0.494 -0.423 1.592 -0.921 2.223 0.944 - 522.00 11.130 11.227 11.232 -1.468 0.341 -0.983 -1.468 0.341 -0.335 1.443 -0.501 1.619 0.782 - 522.05 11.233 11.287 11.292 -1.102 0.320 -0.880 -1.102 0.320 -0.281 0.969 -0.352 1.045 0.534 - 522.10 11.246 11.288 11.310 -0.976 0.702 -0.867 -0.976 0.702 -0.609 0.847 -0.686 1.099 0.624 - 522.15 10.857 10.888 10.935 -0.828 1.005 -1.256 -0.828 1.005 -1.262 1.040 -0.832 1.636 0.917 - 522.20 10.880 10.895 10.932 -0.578 0.900 -1.233 -0.578 0.900 -1.110 0.712 -0.520 1.332 0.709 - 522.25 10.940 10.948 10.982 -0.409 0.863 -1.173 -0.409 0.863 -1.012 0.480 -0.353 1.144 0.587 - 522.30 10.751 10.758 10.785 -0.386 0.763 -1.362 -0.386 0.763 -1.039 0.526 -0.294 1.293 0.600 - 522.35 10.437 10.447 10.512 -0.448 1.171 -1.676 -0.448 1.171 -1.962 0.750 -0.524 2.190 1.083 - 522.40 10.658 10.667 10.728 -0.436 1.140 -1.454 -0.436 1.140 -1.658 0.634 -0.497 1.802 0.921 - 522.45 10.842 10.869 10.924 -0.765 1.095 -1.271 -0.765 1.095 -1.392 0.972 -0.838 1.700 0.946 - 522.50 10.661 10.710 10.749 -1.016 0.920 -1.452 -1.016 0.920 -1.335 1.475 -0.935 1.993 1.099 - 522.55 10.915 11.000 11.020 -1.364 0.663 -1.197 -1.364 0.663 -0.794 1.633 -0.905 1.867 1.014 - 522.60 10.703 10.807 10.832 -1.496 0.728 -1.410 -1.496 0.728 -1.026 2.108 -1.089 2.377 1.293 - 522.65 10.531 10.610 10.626 -1.295 0.589 -1.582 -1.295 0.589 -0.932 2.050 -0.763 2.264 1.189 - 522.70 10.714 10.803 10.816 -1.387 0.523 -1.399 -1.387 0.523 -0.731 1.940 -0.725 2.077 1.098 - 522.75 10.807 10.919 10.932 -1.563 0.524 -1.306 -1.563 0.524 -0.685 2.042 -0.820 2.212 1.152 - 522.80 10.629 10.736 10.750 -1.509 0.539 -1.483 -1.509 0.539 -0.800 2.238 -0.814 2.384 1.256 - 522.85 10.769 10.856 10.877 -1.371 0.665 -1.343 -1.371 0.665 -0.893 1.842 -0.911 2.063 1.120 - 522.90 10.884 10.947 10.971 -1.170 0.729 -1.229 -1.170 0.729 -0.896 1.438 -0.853 1.705 0.948 - 522.95 10.918 10.969 10.982 -1.052 0.546 -1.195 -1.052 0.546 -0.653 1.256 -0.575 1.416 0.764 - 523.00 10.912 10.936 10.948 -0.728 0.500 -1.201 -0.728 0.500 -0.600 0.874 -0.364 1.111 0.560 - 523.05 10.983 10.994 11.001 -0.511 0.379 -1.130 -0.511 0.379 -0.428 0.577 -0.193 0.841 0.372 - 523.10 11.003 11.007 11.008 -0.323 0.148 -1.110 -0.323 0.148 -0.165 0.358 -0.048 0.679 0.199 - 523.15 10.830 10.837 10.846 -0.398 0.436 -1.283 -0.398 0.436 -0.559 0.510 -0.173 0.997 0.388 - 523.20 10.922 10.927 10.930 -0.340 0.234 -1.191 -0.340 0.234 -0.279 0.405 -0.080 0.794 0.249 - 523.25 10.887 10.895 10.897 -0.398 -0.217 -1.225 -0.398 -0.217 0.266 0.487 0.086 0.853 0.281 - 523.30 11.174 11.179 11.188 -0.335 -0.447 -0.939 -0.335 -0.447 0.419 0.314 0.150 0.597 0.273 - 523.35 11.176 11.187 11.199 -0.488 -0.526 -0.937 -0.488 -0.526 0.493 0.458 0.257 0.696 0.360 - 523.40 11.233 11.247 11.256 -0.559 -0.464 -0.880 -0.559 -0.464 0.408 0.492 0.259 0.651 0.345 - 523.45 11.057 11.079 11.084 -0.696 -0.360 -1.056 -0.696 -0.360 0.381 0.735 0.251 0.865 0.432 - 523.50 10.939 10.965 10.971 -0.754 0.346 -1.174 -0.754 0.346 -0.406 0.885 -0.261 1.033 0.504 - 523.55 10.426 10.454 10.465 -0.764 0.482 -1.686 -0.764 0.482 -0.812 1.288 -0.368 1.830 0.783 - 523.60 10.277 10.312 10.332 -0.848 0.635 -1.836 -0.848 0.635 -1.166 1.557 -0.539 2.247 1.009 - 523.65 10.485 10.539 10.548 -1.068 0.427 -1.628 -1.068 0.427 -0.695 1.738 -0.456 1.986 0.963 - 523.70 10.852 10.873 10.896 -0.674 0.704 -1.260 -0.674 0.704 -0.887 0.849 -0.474 1.269 0.658 - 523.75 10.914 10.929 10.940 -0.577 0.492 -1.199 -0.577 0.492 -0.590 0.692 -0.284 1.006 0.476 - 523.80 11.425 11.445 11.447 -0.677 0.188 -0.688 -0.677 0.188 -0.129 0.465 -0.127 0.483 0.250 - 523.85 11.447 11.487 11.488 -0.961 -0.135 -0.666 -0.961 -0.135 0.090 0.640 0.130 0.693 0.330 - 523.90 11.342 11.364 11.374 -0.704 -0.474 -0.771 -0.704 -0.474 0.366 0.543 0.334 0.658 0.367 - 523.95 11.643 11.647 11.655 -0.318 -0.433 -0.470 -0.318 -0.433 0.203 0.149 0.138 0.254 0.144 - 524.00 11.311 11.319 11.320 -0.429 -0.133 -0.802 -0.429 -0.133 0.107 0.344 0.057 0.422 0.182 - 524.05 11.187 11.207 11.207 -0.655 -0.075 -0.925 -0.655 -0.075 0.069 0.606 0.049 0.646 0.306 - 524.10 11.095 11.105 11.106 -0.489 0.102 -1.018 -0.489 0.102 -0.104 0.498 -0.050 0.643 0.256 - 524.15 11.042 11.066 11.067 -0.726 0.105 -1.070 -0.726 0.105 -0.112 0.777 -0.076 0.842 0.394 - 524.20 11.292 11.323 11.323 -0.825 -0.006 -0.820 -0.825 -0.006 0.005 0.677 0.005 0.677 0.338 - 524.25 11.291 11.313 11.313 -0.708 0.004 -0.822 -0.708 0.004 -0.003 0.581 -0.003 0.588 0.291 - 524.30 11.240 11.260 11.260 -0.679 0.020 -0.873 -0.679 0.020 -0.018 0.593 -0.014 0.612 0.297 - 524.35 11.065 11.078 11.079 -0.538 -0.119 -1.048 -0.538 -0.119 0.125 0.563 0.064 0.701 0.290 - 524.40 10.860 10.866 10.867 -0.354 0.135 -1.253 -0.354 0.135 -0.170 0.443 -0.048 0.856 0.239 - 524.45 11.079 11.085 11.086 -0.367 0.177 -1.034 -0.367 0.177 -0.183 0.379 -0.065 0.618 0.213 - 524.50 11.078 11.079 11.081 -0.164 0.188 -1.035 -0.164 0.188 -0.194 0.170 -0.031 0.566 0.130 - 524.55 10.990 10.990 10.992 0.042 0.246 -1.123 0.042 0.246 -0.276 -0.047 0.010 0.662 0.140 - 524.60 10.916 10.916 10.921 0.020 0.344 -1.197 0.020 0.344 -0.412 -0.024 0.007 0.776 0.206 - 524.65 11.127 11.127 11.135 0.061 0.424 -0.986 0.061 0.424 -0.418 -0.060 0.026 0.577 0.211 - 524.70 11.190 11.191 11.193 0.125 0.230 -0.923 0.125 0.230 -0.212 -0.115 0.029 0.460 0.122 - 524.75 10.821 10.824 10.832 0.245 0.401 -1.291 0.245 0.401 -0.518 -0.316 0.098 0.944 0.307 - 524.80 10.961 10.962 10.967 0.164 0.343 -1.152 0.164 0.343 -0.395 -0.189 0.056 0.736 0.221 - 524.85 11.101 11.104 11.104 -0.238 0.091 -1.011 -0.238 0.091 -0.092 0.241 -0.022 0.544 0.129 - 524.90 10.990 10.990 10.996 -0.097 0.344 -1.123 -0.097 0.344 -0.386 0.108 -0.033 0.694 0.201 - 524.95 10.993 10.994 10.996 0.087 0.215 -1.119 0.087 0.215 -0.241 -0.097 0.019 0.653 0.130 - 525.00 10.988 10.989 10.989 -0.137 -0.137 -1.125 -0.137 -0.137 0.155 0.154 0.019 0.652 0.110 - 525.05 11.158 11.158 11.162 -0.044 -0.262 -0.954 -0.044 -0.262 0.250 0.042 0.012 0.491 0.127 - 525.10 11.165 11.166 11.168 -0.194 -0.170 -0.948 -0.194 -0.170 0.161 0.184 0.033 0.483 0.123 - 525.15 11.085 11.086 11.091 -0.149 -0.338 -1.028 -0.149 -0.338 0.347 0.153 0.050 0.596 0.191 - 525.20 11.251 11.251 11.263 -0.069 -0.518 -0.862 -0.069 -0.518 0.447 0.060 0.036 0.508 0.226 - 525.25 11.115 11.116 11.119 0.181 -0.239 -0.998 0.181 -0.239 0.239 -0.181 -0.043 0.543 0.151 - 525.30 11.513 11.514 11.515 -0.169 -0.142 -0.600 -0.169 -0.142 0.085 0.101 0.024 0.204 0.067 - 525.35 11.663 11.664 11.664 -0.103 -0.032 -0.450 -0.103 -0.032 0.014 0.046 0.003 0.107 0.024 - 525.40 11.934 11.935 11.936 -0.180 0.159 -0.179 -0.180 0.159 -0.028 0.032 -0.029 0.045 0.026 - 525.45 11.877 11.878 11.878 -0.109 -0.048 -0.235 -0.109 -0.048 0.011 0.026 0.005 0.035 0.014 - 525.50 11.994 11.994 12.001 -0.022 0.416 -0.119 -0.022 0.416 -0.050 0.003 -0.009 0.094 0.025 - 525.55 11.768 11.769 11.793 -0.139 0.750 -0.345 -0.139 0.750 -0.259 0.048 -0.104 0.350 0.141 - 525.60 11.844 11.845 11.857 -0.187 0.521 -0.269 -0.187 0.521 -0.140 0.050 -0.097 0.189 0.089 - 525.65 11.852 11.852 11.858 -0.103 0.365 -0.261 -0.103 0.365 -0.095 0.027 -0.038 0.106 0.053 - 525.70 11.902 11.902 11.908 -0.096 0.388 -0.211 -0.096 0.388 -0.082 0.020 -0.037 0.102 0.046 - 525.75 11.637 11.644 11.645 0.403 0.176 -0.476 0.403 0.176 -0.084 -0.192 0.071 0.210 0.111 - 525.80 11.551 11.554 11.557 0.257 0.285 -0.562 0.257 0.285 -0.160 -0.144 0.073 0.231 0.114 - 525.85 11.492 11.492 11.492 -0.013 0.071 -0.621 -0.013 0.071 -0.044 0.008 -0.001 0.195 0.022 - 525.90 11.417 11.417 11.421 -0.031 -0.281 -0.696 -0.031 -0.281 0.196 0.022 0.009 0.282 0.099 - 525.95 11.348 11.351 11.352 0.268 0.087 -0.765 0.268 0.087 -0.067 -0.205 0.023 0.332 0.108 - 526.00 11.508 11.513 11.520 0.351 0.400 -0.605 0.351 0.400 -0.242 -0.212 0.140 0.324 0.176 - 526.05 11.752 11.753 11.764 0.075 0.519 -0.360 0.075 0.519 -0.187 -0.027 0.039 0.203 0.097 - 526.10 11.907 11.910 11.921 -0.291 0.507 -0.206 -0.291 0.507 -0.105 0.060 -0.148 0.193 0.095 - 526.15 11.987 11.987 11.996 0.003 0.454 -0.126 0.003 0.454 -0.057 -0.000 0.002 0.111 0.029 - 526.20 12.114 12.116 12.116 0.220 0.006 0.001 0.220 0.006 0.000 0.000 0.001 0.024 0.001 - 526.25 12.315 12.320 12.320 0.342 0.094 0.202 0.342 0.094 0.019 0.069 0.032 0.083 0.039 - 526.30 12.580 12.587 12.587 0.434 0.082 0.467 0.434 0.082 0.038 0.203 0.035 0.206 0.105 - 526.35 12.454 12.457 12.457 -0.252 -0.001 0.341 -0.252 -0.001 -0.000 -0.086 0.000 0.090 0.043 - 526.40 12.309 12.313 12.313 -0.321 -0.138 0.196 -0.321 -0.138 -0.027 -0.063 0.044 0.080 0.041 - 526.45 12.893 12.893 12.902 -0.066 -0.478 0.780 -0.066 -0.478 -0.373 -0.052 0.032 0.421 0.189 - 526.50 12.617 12.619 12.620 0.242 -0.125 0.504 0.242 -0.125 -0.063 0.122 -0.030 0.164 0.070 - 526.55 12.161 12.163 12.163 0.215 0.049 0.048 0.215 0.049 0.002 0.010 0.011 0.025 0.007 - 526.60 12.337 12.340 12.343 0.277 -0.252 0.224 0.277 -0.252 -0.056 0.062 -0.070 0.095 0.055 - 526.65 12.086 12.086 12.102 -0.072 -0.610 -0.027 -0.072 -0.610 0.016 0.002 0.044 0.189 0.024 - 526.70 12.068 12.079 12.085 -0.513 -0.382 -0.045 -0.513 -0.382 0.017 0.023 0.196 0.206 0.099 - 526.75 12.146 12.183 12.194 -0.936 -0.527 0.034 -0.936 -0.527 -0.018 -0.032 0.493 0.578 0.247 - 526.80 12.265 12.315 12.338 -1.116 -0.744 0.152 -1.116 -0.744 -0.113 -0.169 0.830 0.911 0.427 - 526.85 12.315 12.371 12.401 -1.177 -0.859 0.202 -1.177 -0.859 -0.173 -0.238 1.011 1.082 0.527 - 526.90 12.122 12.149 12.190 -0.801 -1.005 0.009 -0.801 -1.005 -0.009 -0.008 0.806 0.827 0.403 - 526.95 12.094 12.111 12.169 -0.640 -1.187 -0.018 -0.640 -1.187 0.022 0.012 0.760 0.910 0.380 - 527.00 12.055 12.094 12.160 -0.976 -1.269 -0.058 -0.976 -1.269 0.074 0.057 1.239 1.283 0.621 - 527.05 12.366 12.408 12.478 -1.018 -1.326 0.253 -1.018 -1.326 -0.336 -0.258 1.349 1.428 0.707 - 527.10 12.421 12.468 12.539 -1.079 -1.337 0.308 -1.079 -1.337 -0.412 -0.332 1.443 1.524 0.769 - 527.15 12.402 12.444 12.466 -1.031 -0.732 0.289 -1.031 -0.732 -0.212 -0.298 0.755 0.841 0.419 - 527.20 12.102 12.126 12.144 -0.758 -0.670 -0.011 -0.758 -0.670 0.007 0.008 0.508 0.512 0.254 - 527.25 11.643 11.682 11.713 -0.952 -0.852 -0.470 -0.952 -0.852 0.401 0.448 0.811 0.927 0.505 - 527.30 11.596 11.667 11.679 -1.288 -0.525 -0.517 -1.288 -0.525 0.272 0.666 0.676 1.101 0.494 - 527.35 11.525 11.592 11.596 -1.241 -0.322 -0.588 -1.241 -0.322 0.189 0.730 0.400 0.995 0.427 - 527.40 11.833 11.908 11.908 -1.328 0.017 -0.280 -1.328 0.017 -0.005 0.371 -0.023 0.922 0.186 - 527.45 11.802 11.865 11.872 -1.222 -0.387 -0.311 -1.222 -0.387 0.120 0.380 0.473 0.870 0.309 - 527.50 11.934 11.996 12.021 -1.217 -0.773 -0.179 -1.217 -0.773 0.138 0.217 0.941 1.055 0.488 - 527.55 12.119 12.176 12.192 -1.180 -0.624 0.006 -1.180 -0.624 -0.004 -0.007 0.736 0.890 0.368 - 527.60 12.330 12.348 12.360 -0.653 -0.548 0.218 -0.653 -0.548 -0.119 -0.142 0.358 0.387 0.202 - 527.65 12.452 12.483 12.489 -0.886 -0.378 0.339 -0.886 -0.378 -0.128 -0.300 0.335 0.522 0.234 - 527.70 12.647 12.678 12.682 -0.880 -0.338 0.534 -0.880 -0.338 -0.180 -0.470 0.297 0.587 0.292 - 527.75 12.396 12.410 12.426 -0.580 -0.639 0.283 -0.580 -0.639 -0.181 -0.164 0.371 0.413 0.222 - 527.80 12.143 12.147 12.158 -0.302 -0.530 0.030 -0.302 -0.530 -0.016 -0.009 0.160 0.186 0.081 - 527.85 12.456 12.464 12.478 -0.454 -0.594 0.343 -0.454 -0.594 -0.204 -0.156 0.270 0.339 0.186 - 527.90 12.517 12.529 12.582 -0.552 -1.147 0.404 -0.552 -1.147 -0.464 -0.223 0.634 0.892 0.408 - 527.95 12.209 12.227 12.269 -0.651 -1.020 0.097 -0.651 -1.020 -0.099 -0.063 0.664 0.737 0.337 - 528.00 12.522 12.528 12.561 -0.397 -0.907 0.409 -0.397 -0.907 -0.371 -0.163 0.360 0.574 0.271 - 528.05 12.381 12.381 12.409 -0.101 -0.833 0.268 -0.101 -0.833 -0.223 -0.027 0.084 0.388 0.120 - 528.10 12.116 12.116 12.142 0.137 -0.784 0.003 0.137 -0.784 -0.002 0.000 -0.107 0.317 0.054 - 528.15 11.955 11.955 11.973 -0.062 -0.663 -0.158 -0.062 -0.663 0.105 0.010 0.041 0.234 0.057 - 528.20 12.294 12.296 12.316 -0.205 -0.707 0.181 -0.205 -0.707 -0.128 -0.037 0.145 0.287 0.098 - 528.25 12.505 12.512 12.547 -0.429 -0.935 0.392 -0.429 -0.935 -0.366 -0.168 0.401 0.605 0.284 - 528.30 12.423 12.436 12.467 -0.553 -0.882 0.311 -0.553 -0.882 -0.274 -0.172 0.488 0.590 0.293 - 528.35 12.185 12.213 12.234 -0.829 -0.725 0.072 -0.829 -0.725 -0.052 -0.060 0.601 0.609 0.303 - 528.40 12.322 12.347 12.373 -0.787 -0.793 0.209 -0.787 -0.793 -0.166 -0.165 0.624 0.646 0.333 - 528.45 12.518 12.529 12.540 -0.538 -0.523 0.405 -0.538 -0.523 -0.212 -0.218 0.282 0.364 0.207 - 528.50 12.343 12.363 12.367 -0.690 -0.316 0.231 -0.690 -0.316 -0.073 -0.159 0.218 0.315 0.140 - 528.55 12.529 12.552 12.556 -0.759 -0.337 0.416 -0.759 -0.337 -0.140 -0.316 0.256 0.431 0.215 - 528.60 12.739 12.776 12.782 -0.968 -0.393 0.627 -0.968 -0.393 -0.246 -0.607 0.380 0.742 0.379 - 528.65 12.734 12.755 12.769 -0.746 -0.588 0.621 -0.746 -0.588 -0.365 -0.463 0.439 0.644 0.367 - 528.70 12.430 12.459 12.493 -0.843 -0.922 0.318 -0.843 -0.922 -0.293 -0.268 0.777 0.831 0.436 - 528.75 12.713 12.734 12.771 -0.727 -0.965 0.600 -0.727 -0.965 -0.580 -0.437 0.702 0.911 0.505 - 528.80 12.709 12.725 12.756 -0.643 -0.889 0.596 -0.643 -0.889 -0.530 -0.383 0.571 0.780 0.434 - 528.85 12.767 12.792 12.810 -0.804 -0.679 0.654 -0.804 -0.679 -0.444 -0.526 0.546 0.768 0.439 - 528.90 13.115 13.133 13.166 -0.687 -0.919 1.003 -0.687 -0.919 -0.921 -0.689 0.631 1.161 0.656 - 528.95 13.046 13.063 13.095 -0.647 -0.923 0.934 -0.647 -0.923 -0.862 -0.604 0.598 1.071 0.605 - 529.00 12.976 12.989 13.031 -0.577 -1.036 0.864 -0.577 -1.036 -0.895 -0.499 0.598 1.076 0.593 - 529.05 12.992 13.015 13.046 -0.778 -0.888 0.879 -0.778 -0.888 -0.781 -0.684 0.691 1.084 0.624 - 529.10 12.773 12.806 12.825 -0.917 -0.699 0.660 -0.917 -0.699 -0.461 -0.605 0.641 0.882 0.497 - 529.15 12.998 13.040 13.054 -1.053 -0.605 0.885 -1.053 -0.605 -0.535 -0.932 0.637 1.129 0.625 - 529.20 12.993 13.030 13.042 -0.969 -0.578 0.881 -0.969 -0.578 -0.509 -0.853 0.560 1.024 0.570 - 529.25 12.953 12.976 12.990 -0.767 -0.612 0.840 -0.767 -0.612 -0.515 -0.644 0.470 0.834 0.474 - 529.30 13.260 13.292 13.309 -0.909 -0.678 1.148 -0.909 -0.678 -0.778 -1.044 0.617 1.302 0.720 - 529.35 12.934 12.955 12.963 -0.736 -0.455 0.821 -0.736 -0.455 -0.373 -0.604 0.335 0.711 0.393 - 529.40 12.964 12.993 12.994 -0.868 -0.181 0.851 -0.868 -0.181 -0.154 -0.739 0.157 0.755 0.385 - 529.45 13.086 13.126 13.130 -1.023 -0.295 0.974 -1.023 -0.295 -0.288 -0.996 0.302 1.041 0.540 - 529.50 12.828 12.851 12.852 -0.772 -0.057 0.715 -0.772 -0.057 -0.041 -0.552 0.044 0.555 0.278 - 529.55 13.083 13.115 13.118 -0.909 -0.276 0.970 -0.909 -0.276 -0.267 -0.882 0.250 0.922 0.478 - 529.60 13.172 13.223 13.228 -1.163 -0.373 1.059 -1.163 -0.373 -0.395 -1.231 0.434 1.306 0.682 - 529.65 13.210 13.247 13.250 -0.982 -0.294 1.097 -0.982 -0.294 -0.323 -1.078 0.289 1.128 0.581 - 529.70 12.920 12.962 12.962 -1.042 0.035 0.807 -1.042 0.035 0.028 -0.841 -0.036 0.869 0.421 - 529.75 12.694 12.738 12.742 -1.060 0.332 0.581 -1.060 0.332 0.193 -0.616 -0.352 0.785 0.368 - 529.80 12.568 12.627 12.628 -1.213 0.209 0.455 -1.213 0.209 0.095 -0.552 -0.253 0.861 0.307 - 529.85 12.471 12.563 12.568 -1.517 0.383 0.358 -1.517 0.383 0.137 -0.543 -0.581 1.288 0.404 - 529.90 12.324 12.393 12.411 -1.302 0.686 0.211 -1.302 0.686 0.145 -0.275 -0.893 1.106 0.473 - 529.95 12.225 12.278 12.289 -1.131 0.520 0.113 -1.131 0.520 0.058 -0.127 -0.588 0.781 0.302 - 530.00 12.216 12.240 12.277 -0.774 0.952 0.103 -0.774 0.952 0.098 -0.080 -0.737 0.758 0.374 - 530.05 12.295 12.311 12.343 -0.622 0.890 0.183 -0.622 0.890 0.162 -0.114 -0.554 0.606 0.294 - 530.10 12.482 12.502 12.524 -0.708 0.733 0.369 -0.708 0.733 0.271 -0.261 -0.519 0.588 0.321 - 530.15 12.606 12.647 12.668 -1.015 0.722 0.494 -1.015 0.722 0.356 -0.501 -0.733 0.897 0.478 - 530.20 12.748 12.817 12.831 -1.325 0.604 0.635 -1.325 0.604 0.384 -0.842 -0.801 1.263 0.612 - 530.25 12.762 12.850 12.862 -1.507 0.548 0.649 -1.507 0.548 0.356 -0.978 -0.827 1.497 0.664 - 530.30 12.812 12.896 12.902 -1.474 0.395 0.699 -1.474 0.395 0.276 -1.030 -0.582 1.408 0.608 - 530.35 12.836 12.915 12.922 -1.425 0.429 0.723 -1.425 0.429 0.310 -1.030 -0.612 1.368 0.619 - 530.40 12.844 12.919 12.920 -1.385 0.157 0.732 -1.385 0.157 0.115 -1.013 -0.217 1.240 0.521 - 530.45 12.950 13.066 13.067 -1.741 -0.143 0.837 -1.741 -0.143 -0.120 -1.457 0.249 1.876 0.741 - 530.50 13.220 13.280 13.280 -1.257 -0.116 1.107 -1.257 -0.116 -0.128 -1.392 0.145 1.410 0.703 - 530.55 13.418 13.483 13.483 -1.317 -0.102 1.306 -1.317 -0.102 -0.133 -1.719 0.134 1.724 0.865 - 530.60 13.330 13.387 13.387 -1.237 0.071 1.217 -1.237 0.071 0.086 -1.505 -0.088 1.508 0.755 - 530.65 13.380 13.415 13.426 -0.958 0.542 1.268 -0.958 0.542 0.687 -1.215 -0.519 1.409 0.744 - 530.70 13.193 13.212 13.231 -0.715 0.692 1.080 -0.715 0.692 0.748 -0.773 -0.495 1.079 0.592 - 530.75 13.095 13.146 13.158 -1.160 0.549 0.982 -1.160 0.549 0.540 -1.139 -0.637 1.306 0.706 - 530.80 13.073 13.150 13.174 -1.420 0.794 0.960 -1.420 0.794 0.763 -1.364 -1.128 1.785 0.964 - 530.85 13.033 13.108 13.144 -1.397 0.965 0.921 -1.397 0.965 0.889 -1.286 -1.349 1.866 1.032 - 530.90 13.244 13.308 13.345 -1.303 0.995 1.131 -1.303 0.995 1.125 -1.473 -1.296 1.983 1.131 - 530.95 13.036 13.053 13.094 -0.677 1.036 0.923 -0.677 1.036 0.956 -0.625 -0.701 1.191 0.670 - 531.00 12.882 12.903 12.954 -0.741 1.142 0.769 -0.741 1.142 0.879 -0.570 -0.846 1.222 0.673 - 531.05 12.996 13.036 13.056 -1.029 0.718 0.883 -1.029 0.718 0.634 -0.908 -0.739 1.176 0.666 - 531.10 13.159 13.203 13.211 -1.082 0.472 1.046 -1.082 0.472 0.494 -1.132 -0.511 1.244 0.668 - 531.15 13.111 13.161 13.162 -1.144 0.180 0.998 -1.144 0.180 0.179 -1.142 -0.205 1.169 0.587 - 531.20 12.825 12.842 12.843 -0.652 0.154 0.712 -0.652 0.154 0.109 -0.465 -0.100 0.478 0.244 - 531.25 13.081 13.114 13.115 -0.934 0.143 0.968 -0.934 0.143 0.138 -0.904 -0.133 0.914 0.462 - 531.30 13.258 13.310 13.316 -1.173 0.412 1.145 -1.173 0.412 0.472 -1.343 -0.483 1.428 0.751 - 531.35 13.239 13.282 13.282 -1.064 0.073 1.127 -1.064 0.073 0.083 -1.198 -0.078 1.203 0.602 - 531.40 13.362 13.410 13.410 -1.131 -0.067 1.249 -1.131 -0.067 -0.084 -1.413 0.076 1.422 0.709 - 531.45 13.272 13.330 13.332 -1.243 -0.217 1.159 -1.243 -0.217 -0.251 -1.441 0.269 1.468 0.743 - 531.50 13.221 13.283 13.288 -1.272 -0.381 1.109 -1.272 -0.381 -0.423 -1.410 0.485 1.496 0.775 - 531.55 12.925 12.970 12.977 -1.070 -0.435 0.813 -1.070 -0.435 -0.353 -0.870 0.465 0.997 0.524 - 531.60 12.647 12.693 12.702 -1.079 -0.475 0.534 -1.079 -0.475 -0.254 -0.576 0.512 0.837 0.406 - 531.65 12.507 12.529 12.532 -0.748 -0.261 0.394 -0.748 -0.261 -0.103 -0.295 0.195 0.391 0.184 - 531.70 12.486 12.503 12.503 -0.656 0.070 0.373 -0.656 0.070 0.026 -0.245 -0.046 0.287 0.125 - 531.75 12.606 12.625 12.634 -0.698 0.483 0.493 -0.698 0.483 0.238 -0.344 -0.338 0.482 0.269 - 531.80 12.355 12.364 12.384 -0.483 0.696 0.242 -0.483 0.696 0.168 -0.117 -0.336 0.388 0.197 - 531.85 12.129 12.140 12.175 -0.500 0.926 0.016 -0.500 0.926 0.015 -0.008 -0.464 0.555 0.232 - 531.90 11.977 11.994 12.026 -0.625 0.882 -0.135 -0.625 0.882 -0.119 0.085 -0.551 0.594 0.285 - 531.95 12.145 12.162 12.190 -0.644 0.828 0.032 -0.644 0.828 0.027 -0.021 -0.533 0.551 0.267 - 532.00 12.390 12.412 12.432 -0.729 0.700 0.278 -0.729 0.700 0.194 -0.202 -0.510 0.549 0.291 - 532.05 12.314 12.343 12.376 -0.854 0.904 0.201 -0.854 0.904 0.182 -0.172 -0.771 0.793 0.405 - 532.10 12.180 12.212 12.249 -0.886 0.951 0.067 -0.886 0.951 0.064 -0.059 -0.843 0.847 0.424 - 532.15 12.121 12.135 12.167 -0.573 0.886 0.008 -0.573 0.886 0.007 -0.005 -0.508 0.557 0.254 - 532.20 11.996 12.003 12.050 -0.425 1.061 -0.117 -0.425 1.061 -0.124 0.050 -0.451 0.660 0.235 - 532.25 11.981 11.987 12.038 -0.385 1.105 -0.132 -0.385 1.105 -0.145 0.051 -0.425 0.693 0.226 - 532.30 11.937 11.952 11.987 -0.593 0.919 -0.175 -0.593 0.919 -0.161 0.104 -0.545 0.613 0.289 - 532.35 11.857 11.879 11.900 -0.723 0.698 -0.256 -0.723 0.698 -0.178 0.185 -0.504 0.537 0.283 - 532.40 11.914 11.926 11.945 -0.533 0.678 -0.199 -0.533 0.678 -0.135 0.106 -0.361 0.391 0.200 - 532.45 11.999 12.021 12.030 -0.737 0.459 -0.114 -0.737 0.459 -0.052 0.084 -0.338 0.383 0.176 - 532.50 12.044 12.063 12.067 -0.668 0.313 -0.068 -0.668 0.313 -0.021 0.046 -0.209 0.274 0.108 - 532.55 11.948 11.953 11.963 -0.366 0.473 -0.165 -0.366 0.473 -0.078 0.060 -0.173 0.192 0.100 - 532.60 12.034 12.044 12.057 -0.491 0.556 -0.079 -0.491 0.556 -0.044 0.039 -0.273 0.278 0.139 - 532.65 12.042 12.057 12.079 -0.586 0.735 -0.070 -0.586 0.735 -0.052 0.041 -0.430 0.444 0.218 - 532.70 12.161 12.192 12.216 -0.868 0.760 0.049 -0.868 0.760 0.037 -0.042 -0.660 0.667 0.331 - 532.75 12.112 12.148 12.177 -0.934 0.839 -0.001 -0.934 0.839 -0.001 0.001 -0.783 0.788 0.392 - 532.80 12.111 12.151 12.173 -0.986 0.730 -0.002 -0.986 0.730 -0.001 0.001 -0.720 0.753 0.360 - 532.85 12.169 12.199 12.244 -0.861 1.043 0.056 -0.861 1.043 0.058 -0.048 -0.898 0.917 0.451 - 532.90 12.062 12.104 12.162 -1.009 1.188 -0.051 -1.009 1.188 -0.060 0.051 -1.199 1.216 0.601 - 532.95 12.141 12.165 12.214 -0.749 1.102 0.029 -0.749 1.102 0.032 -0.021 -0.826 0.888 0.413 - 533.00 12.024 12.056 12.104 -0.870 1.079 -0.088 -0.870 1.079 -0.095 0.077 -0.939 0.964 0.473 - 533.05 12.071 12.103 12.139 -0.880 0.932 -0.041 -0.880 0.932 -0.039 0.037 -0.820 0.822 0.411 - 533.10 12.115 12.136 12.169 -0.722 0.896 0.002 -0.722 0.896 0.002 -0.001 -0.647 0.663 0.324 - 533.15 11.800 11.817 11.845 -0.632 0.814 -0.313 -0.632 0.814 -0.255 0.198 -0.515 0.580 0.304 - 533.20 11.992 12.001 12.036 -0.481 0.922 -0.121 -0.481 0.922 -0.112 0.058 -0.443 0.548 0.230 - 533.25 11.940 11.941 11.979 -0.151 0.952 -0.172 -0.151 0.952 -0.164 0.026 -0.144 0.480 0.110 - 533.30 11.820 11.826 11.857 0.351 0.861 -0.292 0.351 0.861 -0.252 -0.103 0.302 0.475 0.203 - 533.35 11.650 11.655 11.699 0.346 1.016 -0.463 0.346 1.016 -0.470 -0.160 0.352 0.683 0.304 - 533.40 11.576 11.577 11.659 0.116 1.378 -0.537 0.116 1.378 -0.739 -0.062 0.160 1.099 0.379 - 533.45 11.666 11.667 11.713 0.189 1.038 -0.447 0.189 1.038 -0.464 -0.084 0.196 0.657 0.255 - 533.50 11.513 11.531 11.577 0.642 1.036 -0.600 0.642 1.036 -0.621 -0.385 0.665 0.922 0.494 - 533.55 11.673 11.693 11.721 0.684 0.808 -0.440 0.684 0.808 -0.356 -0.301 0.553 0.657 0.361 - 533.60 11.863 11.866 11.889 0.255 0.745 -0.250 0.255 0.745 -0.186 -0.064 0.190 0.341 0.137 - 533.65 11.822 11.822 11.864 0.045 0.991 -0.291 0.045 0.991 -0.288 -0.013 0.045 0.535 0.146 - 533.70 11.650 11.650 11.668 0.021 0.653 -0.463 0.021 0.653 -0.302 -0.010 0.014 0.320 0.151 - 533.75 11.724 11.726 11.741 0.185 0.600 -0.389 0.185 0.600 -0.233 -0.072 0.111 0.273 0.134 - 533.80 11.679 11.707 11.733 0.820 0.778 -0.434 0.820 0.778 -0.338 -0.356 0.638 0.733 0.402 - 533.85 11.834 11.865 11.902 0.860 0.944 -0.279 0.860 0.944 -0.263 -0.240 0.812 0.854 0.443 - 533.90 12.065 12.087 12.137 0.735 1.101 -0.048 0.735 1.101 -0.053 -0.035 0.809 0.878 0.406 - 533.95 12.424 12.426 12.459 0.170 0.911 0.312 0.170 0.911 0.284 0.053 0.155 0.478 0.164 - 534.00 12.455 12.456 12.477 0.191 0.714 0.342 0.191 0.714 0.244 0.065 0.137 0.332 0.144 - 534.05 12.386 12.388 12.420 0.180 0.903 0.273 0.180 0.903 0.247 0.049 0.162 0.462 0.150 - 534.10 12.516 12.521 12.542 0.351 0.730 0.403 0.351 0.730 0.294 0.141 0.256 0.409 0.207 - 534.15 12.146 12.159 12.174 0.572 0.594 0.033 0.572 0.594 0.020 0.019 0.339 0.340 0.170 - 534.20 12.277 12.277 12.295 0.024 0.670 0.164 0.024 0.670 0.110 0.004 0.016 0.238 0.056 - 534.25 12.286 12.287 12.310 -0.172 0.747 0.173 -0.172 0.747 0.129 -0.030 -0.129 0.309 0.092 - 534.30 12.371 12.371 12.434 -0.078 1.249 0.258 -0.078 1.249 0.322 -0.020 -0.097 0.816 0.169 - 534.35 12.181 12.182 12.251 -0.116 1.301 0.069 -0.116 1.301 0.089 -0.008 -0.151 0.855 0.088 - 534.40 11.906 11.911 11.986 -0.359 1.338 -0.207 -0.359 1.338 -0.277 0.074 -0.481 0.981 0.280 - 534.45 11.646 11.661 11.749 -0.578 1.438 -0.466 -0.578 1.438 -0.671 0.269 -0.831 1.310 0.551 - 534.50 11.501 11.527 11.629 -0.777 1.539 -0.612 -0.777 1.539 -0.942 0.475 -1.195 1.673 0.797 - 534.55 11.470 11.488 11.523 -0.641 0.892 -0.643 -0.641 0.892 -0.573 0.412 -0.571 0.809 0.454 - 534.60 11.554 11.557 11.579 -0.247 0.713 -0.558 -0.247 0.713 -0.398 0.138 -0.176 0.440 0.228 - 534.65 11.389 11.390 11.446 -0.118 1.126 -0.723 -0.118 1.126 -0.815 0.085 -0.133 0.903 0.415 - 534.70 11.907 11.911 11.961 -0.317 1.093 -0.206 -0.317 1.093 -0.225 0.065 -0.346 0.669 0.209 - 534.75 12.183 12.188 12.232 -0.345 1.045 0.070 -0.345 1.045 0.073 -0.024 -0.361 0.608 0.184 - 534.80 12.229 12.238 12.253 -0.466 0.611 0.116 -0.466 0.611 0.071 -0.054 -0.285 0.302 0.149 - 534.85 11.954 11.969 11.992 -0.584 0.749 -0.158 -0.584 0.749 -0.119 0.093 -0.438 0.464 0.231 - 534.90 12.124 12.131 12.144 -0.411 0.573 0.011 -0.411 0.573 0.006 -0.005 -0.236 0.249 0.118 - 534.95 11.875 11.908 11.937 -0.883 0.839 -0.238 -0.883 0.839 -0.199 0.210 -0.740 0.769 0.397 - 535.00 12.172 12.187 12.228 -0.612 0.994 0.059 -0.612 0.994 0.059 -0.036 -0.608 0.683 0.306 - 535.05 12.308 12.312 12.330 -0.320 0.665 0.195 -0.320 0.665 0.130 -0.062 -0.213 0.291 0.128 - 535.10 11.841 11.841 11.873 -0.106 0.858 -0.272 -0.106 0.858 -0.233 0.029 -0.091 0.411 0.126 - 535.15 12.212 12.215 12.233 -0.268 0.663 0.100 -0.268 0.663 0.066 -0.027 -0.178 0.261 0.096 - 535.20 12.114 12.130 12.163 -0.625 0.897 0.001 -0.625 0.897 0.001 -0.001 -0.561 0.598 0.280 - 535.25 11.797 11.837 11.855 -0.977 0.658 -0.316 -0.977 0.658 -0.208 0.309 -0.643 0.743 0.371 - 535.30 11.527 11.539 11.541 -0.539 0.183 -0.586 -0.539 0.183 -0.107 0.316 -0.098 0.334 0.174 - 535.35 11.860 11.862 11.875 -0.227 0.553 -0.253 -0.227 0.553 -0.140 0.057 -0.126 0.211 0.098 - 535.40 11.847 11.847 11.848 0.036 0.096 -0.266 0.036 0.096 -0.025 -0.009 0.003 0.040 0.014 - 535.45 11.788 11.789 11.790 -0.161 -0.160 -0.325 -0.161 -0.160 0.052 0.052 0.026 0.079 0.039 - 535.50 11.636 11.644 11.645 -0.430 0.170 -0.477 -0.430 0.170 -0.081 0.205 -0.073 0.221 0.116 - 535.55 11.550 11.570 11.571 -0.669 0.204 -0.563 -0.669 0.204 -0.115 0.376 -0.137 0.403 0.208 - 535.60 11.269 11.295 11.300 -0.767 0.342 -0.844 -0.767 0.342 -0.288 0.647 -0.262 0.708 0.378 - 535.65 11.067 11.087 11.088 -0.667 -0.177 -1.046 -0.667 -0.177 0.185 0.697 0.118 0.785 0.366 - 535.70 11.233 11.265 11.265 -0.851 -0.006 -0.880 -0.851 -0.006 0.005 0.749 0.005 0.749 0.374 - 535.75 11.369 11.407 11.413 -0.934 0.373 -0.744 -0.934 0.373 -0.277 0.695 -0.348 0.783 0.413 - 535.80 11.529 11.548 11.550 -0.662 0.173 -0.584 -0.662 0.173 -0.101 0.386 -0.115 0.405 0.208 - 535.85 11.266 11.274 11.274 -0.421 -0.054 -0.847 -0.421 -0.054 0.046 0.357 0.023 0.449 0.180 - 535.90 11.345 11.354 11.355 -0.430 0.158 -0.767 -0.430 0.158 -0.121 0.330 -0.068 0.399 0.179 - 535.95 11.398 11.413 11.414 -0.593 0.146 -0.715 -0.593 0.146 -0.104 0.424 -0.086 0.442 0.222 - 536.00 11.313 11.371 11.371 -1.146 -0.083 -0.800 -1.146 -0.083 0.066 0.917 0.095 0.980 0.462 - 536.05 11.236 11.278 11.282 -0.975 0.304 -0.877 -0.975 0.304 -0.266 0.855 -0.296 0.906 0.472 - 536.10 11.571 11.595 11.595 -0.748 0.064 -0.542 -0.748 0.064 -0.034 0.405 -0.048 0.428 0.205 - 536.15 11.825 11.826 11.838 -0.146 0.519 -0.287 -0.146 0.519 -0.149 0.042 -0.076 0.186 0.086 - 536.20 11.579 11.581 11.610 -0.211 0.818 -0.534 -0.211 0.818 -0.436 0.112 -0.172 0.499 0.241 - 536.25 11.211 11.211 11.229 -0.090 0.643 -0.902 -0.090 0.643 -0.580 0.081 -0.058 0.618 0.294 - 536.30 11.126 11.129 11.150 0.257 0.680 -0.986 0.257 0.680 -0.671 -0.253 0.175 0.751 0.369 - 536.35 10.945 10.954 10.987 0.450 0.849 -1.168 0.450 0.849 -0.992 -0.526 0.382 1.144 0.593 - 536.40 10.994 11.015 11.055 0.690 0.938 -1.119 0.690 0.938 -1.050 -0.772 0.647 1.304 0.728 - 536.45 10.927 10.947 10.995 0.662 1.029 -1.186 0.662 1.029 -1.220 -0.785 0.681 1.451 0.801 - 536.50 11.252 11.269 11.307 0.630 0.925 -0.861 0.630 0.925 -0.797 -0.543 0.583 0.997 0.563 - 536.55 11.161 11.166 11.217 0.347 1.064 -0.952 0.347 1.064 -1.012 -0.331 0.370 1.079 0.564 - 536.60 11.388 11.392 11.413 0.326 0.690 -0.725 0.326 0.690 -0.500 -0.237 0.225 0.554 0.299 - 536.65 11.617 11.638 11.662 0.691 0.756 -0.496 0.691 0.756 -0.375 -0.342 0.522 0.647 0.364 - 536.70 11.316 11.328 11.346 0.524 0.640 -0.797 0.524 0.640 -0.510 -0.418 0.335 0.660 0.370 - 536.75 11.371 11.376 11.395 0.346 0.650 -0.742 0.346 0.650 -0.482 -0.256 0.225 0.546 0.295 - 536.80 11.376 11.387 11.403 0.504 0.616 -0.737 0.504 0.616 -0.454 -0.371 0.311 0.589 0.332 - 536.85 11.008 11.019 11.071 0.502 1.074 -1.105 0.502 1.074 -1.187 -0.555 0.539 1.314 0.709 - 536.90 11.121 11.136 11.217 0.582 1.344 -0.992 0.582 1.344 -1.333 -0.577 0.782 1.564 0.825 - 536.95 11.231 11.242 11.302 0.495 1.162 -0.882 0.495 1.162 -1.024 -0.437 0.575 1.186 0.627 - 537.00 11.268 11.269 11.301 0.171 0.847 -0.845 0.171 0.847 -0.715 -0.144 0.144 0.730 0.372 - 537.05 11.475 11.479 11.501 0.324 0.702 -0.638 0.324 0.702 -0.448 -0.206 0.227 0.502 0.272 - 537.10 11.445 11.488 11.505 0.991 0.620 -0.667 0.991 0.620 -0.414 -0.662 0.615 0.906 0.497 - 537.15 11.622 11.675 11.681 1.120 0.377 -0.491 1.120 0.377 -0.185 -0.550 0.423 0.819 0.359 - 537.20 11.619 11.650 11.654 0.838 0.302 -0.493 0.838 0.302 -0.149 -0.413 0.253 0.518 0.254 - 537.25 11.628 11.641 11.644 0.544 0.249 -0.484 0.544 0.249 -0.121 -0.264 0.135 0.296 0.160 - 537.30 11.722 11.724 11.724 0.215 -0.050 -0.391 0.215 -0.050 0.020 -0.084 -0.011 0.101 0.043 - 537.35 11.664 11.666 11.668 0.215 0.221 -0.448 0.215 0.221 -0.099 -0.096 0.048 0.148 0.073 - 537.40 11.656 11.659 11.662 0.259 0.256 -0.456 0.259 0.256 -0.117 -0.118 0.066 0.170 0.089 - 537.45 11.715 11.729 11.730 0.571 0.163 -0.398 0.571 0.163 -0.065 -0.227 0.093 0.255 0.127 - 537.50 11.581 11.581 11.601 0.095 0.671 -0.532 0.095 0.671 -0.357 -0.050 0.064 0.371 0.183 - 537.55 11.522 11.523 11.555 0.155 0.864 -0.591 0.155 0.864 -0.511 -0.091 0.134 0.560 0.268 - 537.60 11.432 11.432 11.473 0.021 0.959 -0.680 0.021 0.959 -0.653 -0.014 0.020 0.692 0.327 - 537.65 11.690 11.691 11.737 -0.168 1.032 -0.423 -0.168 1.032 -0.436 0.071 -0.174 0.636 0.238 - 537.70 11.417 11.418 11.502 -0.160 1.388 -0.696 -0.160 1.388 -0.966 0.111 -0.222 1.218 0.498 - 537.75 11.425 11.433 11.522 -0.425 1.433 -0.688 -0.425 1.433 -0.986 0.292 -0.608 1.354 0.597 - 537.80 11.475 11.479 11.557 -0.321 1.338 -0.638 -0.321 1.338 -0.854 0.205 -0.430 1.150 0.489 - 537.85 11.652 11.666 11.730 -0.569 1.228 -0.461 -0.569 1.228 -0.566 0.262 -0.699 1.022 0.468 - 537.90 11.893 11.900 11.954 -0.408 1.131 -0.220 -0.408 1.131 -0.249 0.090 -0.461 0.747 0.266 - 537.95 11.918 11.942 11.988 -0.758 1.054 -0.195 -0.758 1.054 -0.205 0.148 -0.799 0.862 0.419 - 538.00 11.528 11.569 11.604 -0.974 0.895 -0.585 -0.974 0.895 -0.523 0.570 -0.873 1.046 0.583 - 538.05 11.859 11.890 11.912 -0.848 0.731 -0.253 -0.848 0.731 -0.185 0.215 -0.620 0.659 0.341 - 538.10 12.060 12.090 12.122 -0.848 0.885 -0.053 -0.848 0.885 -0.047 0.045 -0.750 0.752 0.376 - 538.15 12.211 12.240 12.284 -0.839 1.044 0.098 -0.839 1.044 0.102 -0.082 -0.876 0.902 0.443 - 538.20 12.187 12.202 12.262 -0.598 1.218 0.074 -0.598 1.218 0.090 -0.044 -0.728 0.923 0.367 - 538.25 11.949 11.951 11.997 -0.226 1.041 -0.164 -0.226 1.041 -0.170 0.037 -0.235 0.581 0.146 - 538.30 12.177 12.179 12.228 -0.223 1.088 0.064 -0.223 1.088 0.070 -0.014 -0.243 0.619 0.126 - 538.35 11.790 11.791 11.837 -0.169 1.049 -0.323 -0.169 1.049 -0.339 0.055 -0.178 0.617 0.193 - 538.40 11.916 11.916 11.982 -0.116 1.254 -0.197 -0.116 1.254 -0.247 0.023 -0.146 0.813 0.144 - 538.45 11.933 11.936 12.001 0.271 1.250 -0.180 0.271 1.250 -0.225 -0.049 0.339 0.835 0.205 - 538.50 11.979 11.979 12.096 0.003 1.680 -0.134 0.003 1.680 -0.224 -0.000 0.006 1.420 0.112 - 538.55 12.023 12.024 12.159 -0.145 1.807 -0.089 -0.145 1.807 -0.162 0.013 -0.262 1.647 0.154 - 538.60 12.059 12.060 12.147 -0.106 1.455 -0.054 -0.106 1.455 -0.078 0.006 -0.155 1.066 0.087 - 538.65 12.062 12.063 12.132 -0.043 1.297 -0.050 -0.043 1.297 -0.065 0.002 -0.056 0.843 0.043 - 538.70 11.891 11.891 11.949 -0.107 1.174 -0.222 -0.107 1.174 -0.260 0.024 -0.126 0.719 0.145 - 538.75 12.021 12.022 12.088 -0.157 1.260 -0.092 -0.157 1.260 -0.115 0.014 -0.198 0.811 0.115 - 538.80 12.219 12.229 12.310 -0.509 1.404 0.106 -0.509 1.404 0.149 -0.054 -0.715 1.121 0.366 - 538.85 12.079 12.092 12.152 -0.553 1.210 -0.034 -0.553 1.210 -0.041 0.019 -0.669 0.885 0.335 - 538.90 12.317 12.317 12.384 0.013 1.288 0.204 0.013 1.288 0.263 0.003 0.017 0.851 0.132 - 538.95 12.172 12.175 12.215 0.283 0.990 0.059 0.283 0.990 0.058 0.017 0.281 0.532 0.144 - 539.00 12.005 12.010 12.091 0.327 1.401 -0.107 0.327 1.401 -0.151 -0.035 0.457 1.040 0.241 - 539.05 12.104 12.107 12.224 0.270 1.685 -0.009 0.270 1.685 -0.015 -0.002 0.455 1.456 0.227 - 539.10 12.189 12.193 12.296 0.307 1.586 0.077 0.307 1.586 0.121 0.024 0.488 1.307 0.252 - 539.15 12.354 12.357 12.457 0.274 1.571 0.241 0.274 1.571 0.379 0.066 0.430 1.301 0.289 - 539.20 11.882 11.885 11.967 0.274 1.402 -0.231 0.274 1.402 -0.324 -0.063 0.384 1.047 0.253 - 539.25 11.916 11.920 11.936 0.331 0.615 -0.197 0.331 0.615 -0.121 -0.065 0.203 0.263 0.123 - 539.30 11.971 11.971 11.974 -0.045 0.262 -0.142 -0.045 0.262 -0.037 0.006 -0.012 0.045 0.020 - 539.35 11.858 11.860 11.865 -0.234 0.333 -0.255 -0.234 0.333 -0.085 0.060 -0.078 0.115 0.065 - 539.40 11.948 11.949 11.950 -0.132 0.190 -0.165 -0.132 0.190 -0.031 0.022 -0.025 0.040 0.023 - 539.45 12.004 12.005 12.009 -0.152 0.313 -0.109 -0.152 0.313 -0.034 0.017 -0.047 0.066 0.030 - 539.50 12.221 12.222 12.223 -0.153 0.162 0.109 -0.153 0.162 0.018 -0.017 -0.025 0.031 0.017 - 539.55 12.100 12.102 12.105 -0.219 0.264 -0.013 -0.219 0.264 -0.003 0.003 -0.058 0.059 0.029 - 539.60 12.171 12.171 12.173 0.003 0.257 0.058 0.003 0.257 0.015 0.000 0.001 0.035 0.007 - 539.65 12.086 12.086 12.087 -0.127 0.097 -0.027 -0.127 0.097 -0.003 0.003 -0.012 0.013 0.007 - 539.70 12.056 12.056 12.059 -0.059 0.242 -0.057 -0.059 0.242 -0.014 0.003 -0.014 0.033 0.010 - 539.75 12.062 12.066 12.069 -0.310 0.268 -0.051 -0.310 0.268 -0.014 0.016 -0.083 0.085 0.043 - 539.80 12.165 12.165 12.167 -0.033 0.200 0.052 -0.033 0.200 0.010 -0.002 -0.007 0.022 0.006 - 539.85 11.914 11.915 11.916 0.132 0.179 -0.199 0.132 0.179 -0.036 -0.026 0.024 0.044 0.025 - 539.90 12.005 12.006 12.006 -0.094 -0.125 -0.108 -0.094 -0.125 0.013 0.010 0.012 0.018 0.010 - 539.95 11.905 11.908 11.908 0.269 -0.037 -0.208 0.269 -0.037 0.008 -0.056 -0.010 0.058 0.029 - 540.00 11.925 11.928 11.937 0.274 0.449 -0.188 0.274 0.449 -0.084 -0.051 0.123 0.156 0.079 - 540.05 12.026 12.031 12.040 0.375 0.453 -0.087 0.375 0.453 -0.040 -0.033 0.170 0.177 0.089 - 540.10 11.900 11.902 11.910 0.252 0.418 -0.213 0.252 0.418 -0.089 -0.054 0.105 0.142 0.074 - 540.15 11.774 11.786 11.792 0.533 0.365 -0.338 0.533 0.365 -0.124 -0.180 0.195 0.266 0.146 - 540.20 12.096 12.118 12.122 0.731 0.294 -0.017 0.731 0.294 -0.005 -0.012 0.215 0.311 0.108 - 540.25 11.936 11.964 11.970 0.818 0.378 -0.177 0.818 0.378 -0.067 -0.145 0.309 0.422 0.174 - 540.30 12.175 12.211 12.221 0.944 0.478 0.062 0.944 0.478 0.030 0.059 0.451 0.562 0.228 - 540.35 12.193 12.260 12.271 1.283 0.514 0.080 1.283 0.514 0.041 0.103 0.659 0.958 0.334 - 540.40 12.134 12.193 12.207 1.196 0.586 0.022 1.196 0.586 0.013 0.026 0.701 0.887 0.351 - 540.45 12.099 12.162 12.177 1.245 0.599 -0.014 1.245 0.599 -0.009 -0.018 0.746 0.954 0.373 - 540.50 12.534 12.596 12.617 1.246 0.721 0.422 1.246 0.721 0.304 0.525 0.898 1.125 0.542 - 540.55 12.268 12.334 12.351 1.280 0.647 0.155 1.280 0.647 0.100 0.199 0.829 1.041 0.429 - 540.60 11.992 12.046 12.075 1.144 0.833 -0.121 1.144 0.833 -0.101 -0.138 0.953 1.009 0.484 - 540.65 11.962 12.012 12.026 1.097 0.587 -0.151 1.097 0.587 -0.089 -0.166 0.645 0.786 0.336 - 540.70 12.103 12.137 12.152 0.907 0.608 -0.010 0.907 0.608 -0.006 -0.009 0.552 0.596 0.276 - 540.75 12.268 12.330 12.344 1.235 0.578 0.155 1.235 0.578 0.090 0.192 0.714 0.942 0.372 - 540.80 12.343 12.399 12.417 1.183 0.668 0.230 1.183 0.668 0.154 0.272 0.791 0.950 0.425 - 540.85 12.343 12.397 12.422 1.153 0.782 0.230 1.153 0.782 0.180 0.266 0.901 0.996 0.478 - 540.90 12.275 12.308 12.324 0.902 0.614 0.162 0.902 0.614 0.100 0.146 0.554 0.609 0.291 - 540.95 11.988 12.004 12.008 0.626 0.291 -0.125 0.626 0.291 -0.036 -0.078 0.182 0.246 0.101 - 541.00 11.954 11.960 11.960 0.378 -0.060 -0.159 0.378 -0.060 0.009 -0.060 -0.023 0.086 0.032 - 541.05 11.966 11.969 11.972 0.253 -0.281 -0.147 0.253 -0.281 0.041 -0.037 -0.071 0.082 0.045 - 541.10 11.968 11.975 11.988 0.414 -0.544 -0.145 0.414 -0.544 0.079 -0.060 -0.225 0.244 0.123 - 541.15 11.866 11.875 11.879 0.447 -0.308 -0.246 0.447 -0.308 0.076 -0.110 -0.138 0.178 0.096 - 541.20 11.717 11.729 11.730 0.533 -0.126 -0.396 0.533 -0.126 0.050 -0.211 -0.067 0.228 0.114 - 541.25 11.727 11.750 11.751 0.738 0.083 -0.386 0.738 0.083 -0.032 -0.285 0.061 0.350 0.146 - 541.30 11.523 11.545 11.546 0.699 -0.170 -0.589 0.699 -0.170 0.100 -0.412 -0.119 0.432 0.220 - 541.35 11.406 11.426 11.430 0.684 -0.292 -0.707 0.684 -0.292 0.206 -0.484 -0.199 0.526 0.281 - 541.40 11.170 11.216 11.217 1.021 0.127 -0.943 1.021 0.127 -0.120 -0.963 0.129 0.974 0.489 - 541.45 11.091 11.150 11.151 1.149 0.162 -1.022 1.149 0.162 -0.166 -1.174 0.186 1.195 0.600 - 541.50 11.203 11.237 11.240 0.877 0.257 -0.910 0.877 0.257 -0.234 -0.798 0.226 0.832 0.431 - 541.55 11.299 11.317 11.317 0.640 0.051 -0.814 0.640 0.051 -0.042 -0.521 0.033 0.538 0.262 - 541.60 11.503 11.507 11.508 0.299 -0.159 -0.610 0.299 -0.159 0.097 -0.182 -0.047 0.243 0.106 - 541.65 11.168 11.169 11.169 0.156 -0.038 -0.945 0.156 -0.038 0.036 -0.147 -0.006 0.459 0.076 - 541.70 11.448 11.449 11.449 0.106 0.075 -0.664 0.106 0.075 -0.050 -0.070 0.008 0.229 0.043 - 541.75 11.421 11.422 11.422 -0.145 -0.022 -0.692 -0.145 -0.022 0.015 0.101 0.003 0.250 0.051 - 541.80 11.520 11.520 11.520 0.020 0.050 -0.592 0.020 0.050 -0.030 -0.012 0.001 0.177 0.016 - 541.85 11.514 11.514 11.515 -0.033 -0.101 -0.599 -0.033 -0.101 0.061 0.020 0.003 0.185 0.032 - 541.90 11.282 11.284 11.285 0.234 -0.123 -0.831 0.234 -0.123 0.102 -0.194 -0.029 0.380 0.111 - 541.95 11.226 11.228 11.229 0.210 -0.159 -0.887 0.210 -0.159 0.141 -0.186 -0.033 0.428 0.118 - 542.00 11.731 11.732 11.732 0.143 -0.092 -0.382 0.143 -0.092 0.035 -0.055 -0.013 0.087 0.033 - 542.05 12.159 12.162 12.167 0.292 -0.349 0.046 0.292 -0.349 -0.016 0.013 -0.102 0.104 0.052 - 542.10 12.374 12.375 12.377 0.166 -0.201 0.262 0.166 -0.201 -0.053 0.044 -0.034 0.068 0.038 - 542.15 12.166 12.168 12.171 0.258 -0.248 0.053 0.258 -0.248 -0.013 0.014 -0.064 0.065 0.033 - 542.20 11.756 11.759 11.760 0.246 -0.113 -0.356 0.246 -0.113 0.040 -0.088 -0.028 0.100 0.050 - 542.25 11.642 11.644 11.660 0.220 -0.607 -0.471 0.220 -0.607 0.286 -0.103 -0.133 0.319 0.166 - 542.30 11.632 11.632 11.649 0.093 -0.624 -0.481 0.093 -0.624 0.300 -0.045 -0.058 0.315 0.154 - 542.35 11.761 11.766 11.787 0.341 -0.707 -0.352 0.341 -0.707 0.249 -0.120 -0.241 0.370 0.183 - 542.40 11.689 11.698 11.734 0.437 -0.926 -0.423 0.437 -0.926 0.392 -0.185 -0.404 0.614 0.296 - 542.45 11.646 11.651 11.671 0.352 -0.669 -0.467 0.352 -0.669 0.312 -0.164 -0.236 0.395 0.212 - 542.50 11.675 11.682 11.736 0.386 -1.127 -0.437 0.386 -1.127 0.493 -0.169 -0.435 0.805 0.339 - 542.55 11.686 11.703 11.752 0.624 -1.071 -0.427 0.624 -1.071 0.457 -0.266 -0.669 0.860 0.426 - 542.60 12.041 12.045 12.089 0.301 -1.030 -0.072 0.301 -1.030 0.074 -0.022 -0.310 0.578 0.160 - 542.65 12.071 12.074 12.095 0.272 -0.714 -0.042 0.272 -0.714 0.030 -0.011 -0.194 0.293 0.098 - 542.70 12.232 12.232 12.239 0.030 -0.424 0.119 0.030 -0.424 -0.050 0.004 -0.013 0.097 0.026 - 542.75 12.073 12.076 12.096 -0.251 -0.697 -0.040 -0.251 -0.697 0.028 0.010 0.175 0.275 0.089 - 542.80 12.159 12.164 12.214 -0.369 -1.106 0.046 -0.369 -1.106 -0.051 -0.017 0.408 0.681 0.206 - 542.85 11.977 11.982 12.050 -0.360 -1.280 -0.136 -0.360 -1.280 0.174 0.049 0.460 0.893 0.247 - 542.90 12.135 12.141 12.184 -0.383 -1.032 0.022 -0.383 -1.032 -0.023 -0.008 0.396 0.606 0.198 - 542.95 11.717 11.739 11.758 -0.722 -0.670 -0.396 -0.722 -0.670 0.265 0.286 0.483 0.563 0.310 - 543.00 11.799 11.813 11.829 -0.571 -0.624 -0.314 -0.571 -0.624 0.196 0.179 0.357 0.407 0.222 - 543.05 11.927 11.931 11.942 -0.293 -0.533 -0.186 -0.293 -0.533 0.099 0.054 0.156 0.202 0.096 - 543.10 11.766 11.766 11.784 -0.099 -0.646 -0.347 -0.099 -0.646 0.224 0.034 0.064 0.274 0.118 - 543.15 12.157 12.158 12.169 -0.204 -0.519 0.044 -0.204 -0.519 -0.023 -0.009 0.106 0.157 0.054 - 543.20 12.319 12.320 12.329 -0.102 -0.486 0.206 -0.102 -0.486 -0.100 -0.021 0.050 0.145 0.057 - 543.25 12.121 12.122 12.140 -0.167 -0.661 0.008 -0.167 -0.661 -0.005 -0.001 0.110 0.232 0.055 - 543.30 11.961 11.964 11.974 -0.257 -0.498 -0.152 -0.257 -0.498 0.076 0.039 0.128 0.169 0.077 - 543.35 12.322 12.322 12.337 -0.020 -0.597 0.209 -0.020 -0.597 -0.125 -0.004 0.012 0.200 0.063 - 543.40 12.357 12.358 12.373 0.160 -0.605 0.244 0.160 -0.605 -0.148 0.039 -0.097 0.226 0.090 - 543.45 12.204 12.205 12.208 0.175 -0.269 0.091 0.175 -0.269 -0.024 0.016 -0.047 0.056 0.028 - 543.50 12.059 12.060 12.065 -0.192 -0.328 -0.054 -0.192 -0.328 0.018 0.010 0.063 0.074 0.033 - 543.55 11.982 11.987 11.992 -0.351 -0.351 -0.131 -0.351 -0.351 0.046 0.046 0.123 0.132 0.070 - 543.60 12.130 12.132 12.147 -0.171 -0.602 0.018 -0.171 -0.602 -0.011 -0.003 0.103 0.196 0.052 - 543.65 12.157 12.157 12.165 0.001 -0.446 0.044 0.001 -0.446 -0.020 0.000 -0.001 0.100 0.010 - 543.70 12.307 12.311 12.333 0.328 -0.730 0.194 0.328 -0.730 -0.142 0.064 -0.240 0.340 0.143 - 543.75 12.511 12.521 12.565 0.479 -1.060 0.399 0.479 -1.060 -0.423 0.191 -0.508 0.756 0.344 - 543.80 12.653 12.654 12.709 0.118 -1.184 0.540 0.118 -1.184 -0.639 0.064 -0.139 0.853 0.329 - 543.85 12.705 12.706 12.766 0.177 -1.234 0.592 0.177 -1.234 -0.731 0.105 -0.218 0.952 0.385 - 543.90 12.584 12.585 12.610 0.171 -0.790 0.471 0.171 -0.790 -0.372 0.080 -0.135 0.437 0.202 - 543.95 12.939 12.939 12.962 -0.045 -0.770 0.826 -0.045 -0.770 -0.636 -0.037 0.034 0.639 0.319 - 544.00 12.616 12.617 12.661 0.115 -1.059 0.503 0.115 -1.059 -0.533 0.058 -0.122 0.694 0.275 - 544.05 12.340 12.340 12.353 0.103 -0.573 0.227 0.103 -0.573 -0.130 0.023 -0.059 0.195 0.072 - 544.10 12.436 12.445 12.458 0.457 -0.568 0.323 0.457 -0.568 -0.184 0.148 -0.260 0.318 0.175 - 544.15 12.438 12.452 12.481 0.578 -0.857 0.326 0.578 -0.857 -0.279 0.188 -0.495 0.587 0.299 - 544.20 12.146 12.167 12.197 0.718 -0.860 0.033 0.718 -0.860 -0.028 0.024 -0.617 0.628 0.309 - 544.25 12.072 12.087 12.122 0.613 -0.915 -0.041 0.613 -0.915 0.038 -0.025 -0.560 0.607 0.281 - 544.30 11.684 11.721 11.746 0.931 -0.765 -0.429 0.931 -0.765 0.328 -0.399 -0.712 0.818 0.440 - 544.35 11.657 11.701 11.717 1.014 -0.618 -0.456 1.014 -0.618 0.282 -0.462 -0.626 0.808 0.414 - 544.40 11.910 11.954 11.963 1.016 -0.473 -0.202 1.016 -0.473 0.096 -0.206 -0.481 0.649 0.266 - 544.45 11.820 11.870 11.883 1.091 -0.563 -0.293 1.091 -0.563 0.165 -0.320 -0.614 0.796 0.356 - 544.50 11.795 11.817 11.823 0.713 -0.390 -0.317 0.713 -0.390 0.124 -0.226 -0.278 0.381 0.190 - 544.55 11.881 11.908 11.908 0.805 0.024 -0.232 0.805 0.024 -0.006 -0.186 0.019 0.351 0.094 - 544.60 11.903 11.941 11.942 0.948 -0.121 -0.209 0.948 -0.121 0.025 -0.198 -0.114 0.478 0.115 - 544.65 12.146 12.170 12.179 0.768 -0.463 0.033 0.768 -0.463 -0.015 0.025 -0.356 0.403 0.179 - 544.70 12.325 12.356 12.375 0.887 -0.677 0.212 0.887 -0.677 -0.143 0.188 -0.601 0.645 0.323 - 544.75 12.214 12.241 12.250 0.810 -0.479 0.101 0.810 -0.479 -0.048 0.082 -0.387 0.447 0.199 - 544.80 12.061 12.090 12.100 0.832 -0.493 -0.052 0.832 -0.493 0.025 -0.043 -0.410 0.469 0.207 - 544.85 12.098 12.128 12.130 0.847 -0.225 -0.014 0.847 -0.225 0.003 -0.012 -0.191 0.384 0.096 - 544.90 11.934 11.968 11.968 0.902 0.009 -0.178 0.902 0.009 -0.002 -0.161 0.008 0.422 0.081 - 544.95 11.977 12.005 12.005 0.816 -0.015 -0.135 0.816 -0.015 0.002 -0.110 -0.012 0.342 0.056 - 545.00 12.213 12.227 12.229 0.590 -0.194 0.100 0.590 -0.194 -0.019 0.059 -0.115 0.198 0.065 - 545.05 11.989 12.010 12.025 0.711 -0.606 -0.124 0.711 -0.606 0.075 -0.088 -0.431 0.444 0.223 - 545.10 11.781 11.791 11.805 0.484 -0.571 -0.332 0.484 -0.571 0.189 -0.161 -0.276 0.335 0.186 - 545.15 11.601 11.610 11.624 0.473 -0.567 -0.512 0.473 -0.567 0.290 -0.242 -0.268 0.404 0.232 - 545.20 12.010 12.012 12.047 0.214 -0.918 -0.103 0.214 -0.918 0.095 -0.022 -0.196 0.450 0.109 - 545.25 12.122 12.124 12.146 0.234 -0.728 0.009 0.234 -0.728 -0.007 0.002 -0.171 0.293 0.085 - 545.30 12.122 12.126 12.151 0.276 -0.783 0.010 0.276 -0.783 -0.008 0.003 -0.216 0.345 0.108 - 545.35 12.260 12.267 12.295 0.401 -0.822 0.148 0.401 -0.822 -0.121 0.059 -0.329 0.429 0.178 - 545.40 12.004 12.042 12.062 0.955 -0.695 -0.109 0.955 -0.695 0.076 -0.104 -0.664 0.703 0.338 - 545.45 12.098 12.126 12.149 0.809 -0.747 -0.014 0.809 -0.747 0.011 -0.012 -0.605 0.607 0.302 - 545.50 12.145 12.175 12.198 0.859 -0.740 0.032 0.859 -0.740 -0.024 0.028 -0.636 0.643 0.318 - 545.55 12.166 12.189 12.214 0.749 -0.788 0.053 0.749 -0.788 -0.042 0.040 -0.590 0.592 0.296 - 545.60 12.221 12.223 12.258 0.222 -0.927 0.108 0.222 -0.927 -0.101 0.024 -0.206 0.460 0.115 - 545.65 12.253 12.253 12.308 -0.079 -1.167 0.140 -0.079 -1.167 -0.163 -0.011 0.092 0.694 0.094 - 545.70 12.365 12.378 12.419 0.565 -1.003 0.253 0.565 -1.003 -0.253 0.143 -0.567 0.694 0.319 - 545.75 12.576 12.589 12.628 0.573 -0.993 0.463 0.573 -0.993 -0.460 0.265 -0.568 0.764 0.389 - 545.80 12.515 12.515 12.545 -0.004 -0.867 0.402 -0.004 -0.867 -0.348 -0.002 0.004 0.457 0.174 - 545.85 12.510 12.512 12.538 -0.229 -0.817 0.397 -0.229 -0.817 -0.324 -0.091 0.187 0.438 0.192 - 545.90 12.705 12.712 12.739 -0.394 -0.840 0.593 -0.394 -0.840 -0.498 -0.233 0.331 0.606 0.321 - 545.95 12.876 12.880 12.912 -0.349 -0.904 0.763 -0.349 -0.904 -0.689 -0.266 0.315 0.760 0.402 - 546.00 12.854 12.867 12.894 -0.568 -0.836 0.741 -0.568 -0.836 -0.620 -0.421 0.475 0.786 0.443 - 546.05 12.757 12.770 12.792 -0.579 -0.752 0.644 -0.579 -0.752 -0.484 -0.373 0.435 0.658 0.375 - 546.10 12.795 12.798 12.849 -0.262 -1.150 0.682 -0.262 -1.150 -0.785 -0.179 0.301 0.929 0.430 - 546.15 12.793 12.794 12.827 0.072 -0.922 0.681 0.072 -0.922 -0.628 0.049 -0.067 0.660 0.317 - 546.20 12.839 12.840 12.884 -0.159 -1.056 0.727 -0.159 -1.056 -0.768 -0.116 0.168 0.835 0.397 - 546.25 12.848 12.848 12.878 0.076 -0.879 0.735 0.076 -0.879 -0.646 0.056 -0.067 0.660 0.326 - 546.30 12.969 12.971 13.006 0.197 -0.965 0.856 0.197 -0.965 -0.826 0.169 -0.190 0.851 0.432 - 546.35 13.193 13.194 13.256 0.179 -1.280 1.080 0.179 -1.280 -1.382 0.193 -0.229 1.418 0.707 - 546.40 13.046 13.046 13.098 0.039 -1.159 0.933 0.039 -1.159 -1.082 0.036 -0.045 1.108 0.542 - 546.45 12.923 12.928 12.957 -0.376 -0.857 0.810 -0.376 -0.857 -0.695 -0.305 0.323 0.766 0.412 - 546.50 12.715 12.729 12.740 -0.590 -0.519 0.603 -0.590 -0.519 -0.313 -0.355 0.306 0.490 0.282 - 546.55 12.811 12.822 12.832 -0.527 -0.502 0.698 -0.527 -0.502 -0.350 -0.368 0.265 0.509 0.286 - 546.60 12.956 12.970 12.996 -0.589 -0.823 0.843 -0.589 -0.823 -0.694 -0.497 0.485 0.868 0.491 - 546.65 12.901 12.913 12.919 -0.561 -0.392 0.788 -0.561 -0.392 -0.309 -0.442 0.220 0.544 0.291 - 546.70 12.773 12.786 12.801 -0.569 -0.615 0.660 -0.569 -0.615 -0.406 -0.376 0.350 0.569 0.327 - 546.75 12.621 12.633 12.634 -0.543 -0.196 0.508 -0.543 -0.196 -0.100 -0.276 0.107 0.296 0.156 - 546.80 12.584 12.600 12.604 -0.638 -0.288 0.471 -0.638 -0.288 -0.136 -0.300 0.184 0.356 0.189 - 546.85 12.561 12.572 12.574 -0.521 -0.224 0.448 -0.521 -0.224 -0.101 -0.234 0.117 0.261 0.140 - 546.90 12.541 12.544 12.549 -0.262 -0.367 0.428 -0.262 -0.367 -0.157 -0.112 0.096 0.193 0.108 - 546.95 12.623 12.630 12.633 0.404 -0.292 0.510 0.404 -0.292 -0.149 0.206 -0.118 0.254 0.140 - 547.00 12.566 12.573 12.573 0.398 -0.130 0.454 0.398 -0.130 -0.059 0.180 -0.052 0.190 0.098 - 547.05 12.602 12.618 12.618 0.642 0.040 0.489 0.642 0.040 0.020 0.314 0.026 0.326 0.158 - 547.10 12.524 12.540 12.543 0.622 -0.300 0.412 0.622 -0.300 -0.123 0.256 -0.187 0.323 0.170 - 547.15 12.465 12.476 12.476 0.515 -0.153 0.352 0.515 -0.153 -0.054 0.181 -0.079 0.206 0.102 - 547.20 12.335 12.343 12.343 0.429 0.033 0.222 0.429 0.033 0.007 0.095 0.014 0.117 0.048 - 547.25 12.679 12.691 12.693 0.560 -0.246 0.566 0.560 -0.246 -0.139 0.317 -0.138 0.347 0.186 - 547.30 12.554 12.555 12.557 0.125 -0.221 0.441 0.125 -0.221 -0.097 0.055 -0.027 0.130 0.058 - 547.35 12.427 12.433 12.435 0.390 -0.220 0.314 0.390 -0.220 -0.069 0.123 -0.086 0.150 0.082 - 547.40 12.439 12.459 12.461 0.705 0.249 0.326 0.705 0.249 0.081 0.230 0.176 0.333 0.150 - 547.45 12.518 12.526 12.536 0.438 0.518 0.405 0.438 0.518 0.210 0.177 0.227 0.312 0.178 - 547.50 12.696 12.715 12.732 0.696 0.662 0.583 0.696 0.662 0.386 0.406 0.461 0.631 0.363 - 547.55 12.363 12.384 12.385 0.716 0.109 0.251 0.716 0.109 0.027 0.179 0.078 0.293 0.099 - 547.60 12.528 12.560 12.561 0.899 0.135 0.415 0.899 0.135 0.056 0.373 0.121 0.500 0.198 - 547.65 12.684 12.728 12.730 1.061 -0.196 0.571 1.061 -0.196 -0.112 0.606 -0.208 0.745 0.325 - 547.70 12.892 12.930 12.933 0.989 0.301 0.779 0.989 0.301 0.235 0.770 0.298 0.838 0.429 - 547.75 12.751 12.797 12.805 1.073 0.462 0.639 1.073 0.462 0.295 0.686 0.496 0.887 0.448 - 547.80 12.336 12.389 12.418 1.147 0.854 0.223 1.147 0.854 0.190 0.256 0.980 1.048 0.515 - 547.85 12.294 12.356 12.394 1.238 0.973 0.181 1.238 0.973 0.176 0.224 1.205 1.256 0.619 - 547.90 12.443 12.556 12.575 1.680 0.694 0.330 1.680 0.694 0.229 0.554 1.165 1.706 0.655 - 547.95 12.736 12.860 12.873 1.783 0.570 0.623 1.783 0.570 0.355 1.111 1.017 1.946 0.773 - 548.00 12.567 12.681 12.697 1.698 0.638 0.454 1.698 0.638 0.290 0.771 1.083 1.748 0.680 - 548.05 12.379 12.516 12.537 1.849 0.721 0.266 1.849 0.721 0.192 0.492 1.332 2.004 0.716 - 548.10 12.488 12.610 12.648 1.750 0.970 0.376 1.750 0.970 0.365 0.657 1.698 2.072 0.928 - 548.15 12.498 12.616 12.649 1.719 0.920 0.385 1.719 0.920 0.354 0.662 1.581 1.974 0.875 - 548.20 12.352 12.441 12.501 1.482 1.226 0.240 1.482 1.226 0.294 0.355 1.816 1.878 0.937 - 548.25 12.077 12.123 12.176 1.049 1.141 -0.035 1.049 1.141 -0.040 -0.037 1.197 1.202 0.599 - 548.30 11.895 11.949 12.018 1.138 1.284 -0.218 1.138 1.284 -0.280 -0.248 1.462 1.496 0.755 - 548.35 12.236 12.290 12.326 1.157 0.939 0.123 1.157 0.939 0.116 0.142 1.086 1.118 0.551 - 548.40 12.091 12.143 12.179 1.117 0.934 -0.021 1.117 0.934 -0.020 -0.024 1.044 1.061 0.522 - 548.45 11.905 11.929 11.981 0.752 1.110 -0.207 0.752 1.110 -0.230 -0.156 0.834 0.919 0.439 - 548.50 11.952 11.964 12.011 0.526 1.066 -0.160 0.526 1.066 -0.171 -0.084 0.560 0.719 0.296 - 548.55 11.664 11.672 11.719 0.409 1.058 -0.448 0.409 1.058 -0.474 -0.183 0.432 0.743 0.334 - 548.60 11.778 11.785 11.807 0.402 0.715 -0.334 0.402 0.715 -0.239 -0.134 0.287 0.392 0.199 - 548.65 12.200 12.219 12.238 0.683 0.689 0.087 0.683 0.689 0.060 0.059 0.471 0.475 0.239 - 548.70 12.133 12.153 12.171 0.691 0.661 0.020 0.691 0.661 0.014 0.014 0.457 0.458 0.229 - 548.75 11.931 11.952 11.991 0.719 0.966 -0.182 0.719 0.966 -0.176 -0.131 0.695 0.742 0.364 - 548.80 11.945 11.974 11.989 0.832 0.601 -0.168 0.832 0.601 -0.101 -0.140 0.500 0.541 0.265 - 548.85 12.012 12.038 12.050 0.798 0.539 -0.101 0.798 0.539 -0.055 -0.081 0.430 0.469 0.221 - 548.90 11.615 11.626 11.641 0.500 0.597 -0.497 0.500 0.597 -0.297 -0.249 0.298 0.427 0.244 - 548.95 11.761 11.795 11.800 0.900 0.323 -0.352 0.900 0.323 -0.114 -0.316 0.291 0.519 0.222 - 549.00 11.516 11.532 11.534 0.617 0.191 -0.597 0.617 0.191 -0.114 -0.368 0.118 0.387 0.202 - 549.05 11.779 11.796 11.799 0.643 0.248 -0.334 0.643 0.248 -0.083 -0.215 0.160 0.293 0.140 - 549.10 11.548 11.586 11.597 0.932 0.508 -0.565 0.932 0.508 -0.287 -0.526 0.474 0.723 0.382 - 549.15 11.852 11.877 11.893 0.780 0.610 -0.261 0.780 0.610 -0.159 -0.203 0.476 0.524 0.271 - 549.20 11.904 11.919 11.943 0.593 0.760 -0.209 0.593 0.760 -0.159 -0.124 0.451 0.487 0.247 - 549.25 12.322 12.349 12.383 0.812 0.915 0.209 0.812 0.915 0.191 0.170 0.742 0.770 0.393 - 549.30 12.245 12.267 12.284 0.740 0.644 0.132 0.740 0.644 0.085 0.098 0.476 0.490 0.247 - 549.35 12.196 12.210 12.217 0.587 0.424 0.083 0.587 0.424 0.035 0.049 0.249 0.265 0.128 - 549.40 12.526 12.534 12.542 0.446 0.428 0.414 0.446 0.428 0.177 0.185 0.191 0.277 0.160 - 549.45 12.688 12.701 12.714 0.566 0.588 0.575 0.566 0.588 0.338 0.326 0.333 0.499 0.288 - 549.50 12.687 12.709 12.713 0.739 0.314 0.575 0.739 0.314 0.180 0.425 0.232 0.487 0.258 - 549.55 12.413 12.442 12.443 0.849 0.062 0.301 0.849 0.062 0.019 0.255 0.053 0.408 0.131 - 549.60 12.486 12.528 12.530 1.028 -0.239 0.373 1.028 -0.239 -0.089 0.383 -0.246 0.626 0.232 - 549.65 12.669 12.725 12.730 1.191 -0.366 0.556 1.191 -0.366 -0.203 0.662 -0.435 0.930 0.409 - 549.70 12.349 12.407 12.415 1.194 -0.460 0.236 1.194 -0.460 -0.109 0.282 -0.549 0.846 0.313 - 549.75 12.120 12.149 12.152 0.844 -0.292 0.007 0.844 -0.292 -0.002 0.006 -0.246 0.398 0.123 - 549.80 12.243 12.250 12.273 0.388 -0.759 0.131 0.388 -0.759 -0.099 0.051 -0.294 0.371 0.157 - 549.85 12.567 12.573 12.643 0.388 -1.328 0.454 0.388 -1.328 -0.603 0.176 -0.516 1.061 0.406 - 549.90 12.455 12.469 12.531 0.596 -1.241 0.342 0.596 -1.241 -0.425 0.204 -0.739 1.006 0.438 - 549.95 12.100 12.117 12.168 0.637 -1.114 -0.012 0.637 -1.114 0.014 -0.008 -0.710 0.824 0.355 - 550.00 12.127 12.149 12.202 0.724 -1.136 0.014 0.724 -1.136 -0.016 0.010 -0.822 0.907 0.411 - 550.05 12.486 12.511 12.548 0.799 -0.960 0.373 0.799 -0.960 -0.358 0.298 -0.767 0.849 0.449 - 550.10 12.275 12.299 12.322 0.770 -0.758 0.162 0.770 -0.758 -0.123 0.124 -0.584 0.597 0.305 - 550.15 12.112 12.144 12.189 0.882 -1.042 -0.000 0.882 -1.042 0.000 -0.000 -0.919 0.932 0.459 - 550.20 12.156 12.187 12.207 0.864 -0.705 0.043 0.864 -0.705 -0.030 0.037 -0.609 0.622 0.305 - 550.25 12.414 12.449 12.450 0.930 -0.154 0.301 0.930 -0.154 -0.046 0.280 -0.143 0.490 0.159 - 550.30 12.345 12.389 12.392 1.042 0.275 0.232 1.042 0.275 0.064 0.242 0.286 0.607 0.190 - 550.35 12.280 12.326 12.328 1.062 0.231 0.167 1.062 0.231 0.039 0.178 0.246 0.605 0.153 - 550.40 12.420 12.450 12.455 0.855 0.367 0.307 0.855 0.367 0.113 0.263 0.314 0.480 0.212 - 550.45 12.234 12.264 12.266 0.851 0.236 0.122 0.851 0.236 0.029 0.103 0.200 0.397 0.114 - 550.50 12.179 12.204 12.233 0.769 0.841 0.067 0.769 0.841 0.056 0.051 0.647 0.652 0.326 - 550.55 12.425 12.451 12.468 0.799 0.648 0.313 0.799 0.648 0.203 0.250 0.518 0.579 0.305 - 550.60 12.716 12.752 12.784 0.956 0.908 0.603 0.956 0.908 0.548 0.577 0.868 1.051 0.588 - 550.65 12.120 12.165 12.211 1.049 1.061 0.007 1.049 1.061 0.007 0.007 1.113 1.113 0.557 - 550.70 12.294 12.322 12.386 0.833 1.259 0.181 0.833 1.259 0.228 0.151 1.048 1.156 0.542 - 550.75 12.272 12.319 12.404 1.067 1.450 0.160 1.067 1.450 0.231 0.170 1.547 1.633 0.787 - 550.80 12.282 12.354 12.420 1.336 1.282 0.169 1.336 1.282 0.216 0.225 1.713 1.729 0.871 - 550.85 12.351 12.398 12.470 1.087 1.338 0.238 1.087 1.338 0.318 0.259 1.455 1.515 0.756 - 550.90 12.239 12.292 12.364 1.140 1.328 0.127 1.140 1.328 0.168 0.144 1.514 1.540 0.765 - 550.95 12.101 12.138 12.195 0.944 1.173 -0.012 0.944 1.173 -0.014 -0.011 1.108 1.134 0.554 - 551.00 12.210 12.283 12.323 1.343 0.989 0.097 1.343 0.989 0.096 0.130 1.328 1.396 0.669 - 551.05 12.156 12.239 12.284 1.428 1.042 0.043 1.428 1.042 0.045 0.061 1.488 1.563 0.745 - 551.10 12.339 12.424 12.485 1.449 1.229 0.227 1.449 1.229 0.279 0.328 1.780 1.830 0.916 - 551.15 12.498 12.552 12.576 1.158 0.783 0.385 1.158 0.783 0.302 0.447 0.907 1.052 0.527 - 551.20 12.803 12.875 12.894 1.362 0.706 0.690 1.362 0.706 0.487 0.940 0.961 1.415 0.715 - 551.25 12.844 12.920 12.941 1.402 0.736 0.731 1.402 0.736 0.538 1.025 1.033 1.521 0.776 - 551.30 12.979 13.047 13.083 1.329 0.960 0.867 1.329 0.960 0.832 1.152 1.276 1.720 0.955 - 551.35 12.634 12.707 12.751 1.357 1.060 0.521 1.357 1.060 0.553 0.708 1.439 1.619 0.848 - 551.40 12.215 12.303 12.366 1.475 1.244 0.102 1.475 1.244 0.127 0.150 1.835 1.867 0.923 - 551.45 12.255 12.298 12.342 1.028 1.034 0.142 1.028 1.034 0.147 0.146 1.063 1.073 0.542 - 551.50 11.985 12.032 12.093 1.053 1.218 -0.127 1.053 1.218 -0.155 -0.134 1.282 1.304 0.649 - 551.55 11.935 11.972 12.020 0.946 1.071 -0.178 0.946 1.071 -0.191 -0.169 1.014 1.037 0.523 - 551.60 11.869 11.908 11.931 0.966 0.735 -0.244 0.966 0.735 -0.179 -0.236 0.710 0.767 0.385 - 551.65 12.000 12.016 12.031 0.624 0.599 -0.113 0.624 0.599 -0.068 -0.071 0.374 0.381 0.193 - 551.70 11.998 11.999 12.024 0.155 0.780 -0.115 0.155 0.780 -0.089 -0.018 0.121 0.322 0.076 - 551.75 11.323 11.335 11.372 0.528 0.915 -0.790 0.528 0.915 -0.723 -0.417 0.483 0.870 0.482 - 551.80 11.453 11.459 11.474 0.358 0.579 -0.660 0.358 0.579 -0.382 -0.236 0.207 0.449 0.247 - 551.85 11.683 11.690 11.700 0.408 0.471 -0.430 0.408 0.471 -0.202 -0.175 0.192 0.286 0.165 - 551.90 11.679 11.724 11.741 1.021 0.626 -0.433 1.021 0.626 -0.271 -0.443 0.639 0.811 0.412 - 551.95 11.745 11.793 11.796 1.061 0.285 -0.368 1.061 0.285 -0.105 -0.390 0.302 0.671 0.252 - 552.00 11.860 11.889 11.890 0.838 0.132 -0.253 0.838 0.132 -0.033 -0.212 0.110 0.392 0.121 - 552.05 11.783 11.828 11.828 1.026 0.029 -0.329 1.026 0.029 -0.010 -0.338 0.030 0.582 0.170 - 552.10 11.509 11.540 11.541 0.847 -0.183 -0.604 0.847 -0.183 0.111 -0.512 -0.155 0.558 0.273 - 552.15 11.886 11.931 11.943 1.037 -0.538 -0.227 1.037 -0.538 0.122 -0.235 -0.558 0.708 0.309 - 552.20 11.890 11.938 11.945 1.069 -0.382 -0.222 1.069 -0.382 0.085 -0.238 -0.408 0.669 0.240 - 552.25 12.129 12.169 12.204 0.976 -0.936 0.017 0.976 -0.936 -0.016 0.016 -0.913 0.914 0.457 - 552.30 12.235 12.292 12.298 1.176 -0.407 0.122 1.176 -0.407 -0.050 0.144 -0.479 0.782 0.251 - 552.35 12.153 12.185 12.189 0.888 -0.304 0.040 0.888 -0.304 -0.012 0.035 -0.270 0.441 0.136 - 552.40 12.200 12.250 12.250 1.108 -0.064 0.087 1.108 -0.064 -0.006 0.096 -0.071 0.619 0.060 - 552.45 12.162 12.209 12.219 1.075 -0.494 0.049 1.075 -0.494 -0.024 0.053 -0.531 0.701 0.267 - 552.50 12.479 12.514 12.539 0.940 -0.781 0.366 0.940 -0.781 -0.286 0.344 -0.734 0.814 0.430 - 552.55 12.639 12.660 12.680 0.740 -0.710 0.526 0.740 -0.710 -0.373 0.389 -0.525 0.664 0.376 - 552.60 12.544 12.575 12.583 0.889 -0.454 0.431 0.889 -0.454 -0.196 0.383 -0.404 0.591 0.295 - 552.65 12.627 12.642 12.646 0.615 -0.306 0.514 0.615 -0.306 -0.157 0.316 -0.188 0.368 0.200 - 552.70 12.221 12.238 12.238 0.638 -0.109 0.108 0.638 -0.109 -0.012 0.069 -0.070 0.215 0.049 - 552.75 12.235 12.250 12.250 0.616 -0.007 0.122 0.616 -0.007 -0.001 0.075 -0.004 0.197 0.038 - 552.80 11.680 11.697 11.698 0.624 0.151 -0.432 0.624 0.151 -0.065 -0.270 0.094 0.300 0.147 - 552.85 11.510 11.512 11.517 0.229 0.339 -0.603 0.229 0.339 -0.205 -0.138 0.078 0.266 0.129 - 552.90 11.836 11.840 11.842 0.299 0.204 -0.277 0.299 0.204 -0.056 -0.083 0.061 0.104 0.059 - 552.95 11.691 11.698 11.699 0.398 0.115 -0.422 0.398 0.115 -0.049 -0.168 0.046 0.175 0.090 - 553.00 11.317 11.334 11.338 0.613 -0.284 -0.795 0.613 -0.284 0.226 -0.487 -0.174 0.544 0.282 - 553.05 11.529 11.531 11.562 0.248 -0.844 -0.584 0.248 -0.844 0.493 -0.145 -0.209 0.558 0.277 - 553.10 11.830 11.837 11.844 0.428 -0.404 -0.283 0.428 -0.404 0.115 -0.121 -0.173 0.213 0.120 - 553.15 11.509 11.532 11.532 0.733 -0.019 -0.604 0.733 -0.019 0.011 -0.443 -0.014 0.451 0.222 - 553.20 11.576 11.609 11.609 0.881 -0.043 -0.537 0.881 -0.043 0.023 -0.473 -0.038 0.534 0.238 - 553.25 11.679 11.719 11.719 0.960 -0.060 -0.434 0.960 -0.060 0.026 -0.416 -0.057 0.557 0.211 - 553.30 11.651 11.666 11.667 0.587 -0.191 -0.462 0.587 -0.191 0.088 -0.271 -0.112 0.297 0.153 - 553.35 11.617 11.627 11.634 0.489 -0.399 -0.496 0.489 -0.399 0.198 -0.242 -0.195 0.322 0.184 - 553.40 11.656 11.666 11.671 0.475 -0.343 -0.457 0.475 -0.343 0.157 -0.217 -0.163 0.276 0.157 - 553.45 11.691 11.698 11.704 0.404 -0.372 -0.422 0.404 -0.372 0.157 -0.170 -0.150 0.240 0.138 - 553.50 11.417 11.422 11.436 0.328 -0.564 -0.696 0.328 -0.564 0.393 -0.228 -0.185 0.455 0.245 - 553.55 11.379 11.387 11.425 0.433 -0.932 -0.734 0.433 -0.932 0.684 -0.318 -0.404 0.798 0.428 - 553.60 11.513 11.526 11.542 0.535 -0.611 -0.599 0.535 -0.611 0.366 -0.321 -0.327 0.509 0.293 - 553.65 11.425 11.434 11.443 0.441 -0.464 -0.688 0.441 -0.464 0.319 -0.304 -0.205 0.442 0.243 - 553.70 11.225 11.233 11.233 0.431 0.029 -0.888 0.431 0.029 -0.026 -0.383 0.013 0.488 0.192 - 553.75 11.349 11.369 11.370 0.661 0.160 -0.763 0.661 0.160 -0.122 -0.505 0.106 0.523 0.265 - 553.80 11.416 11.428 11.428 0.512 0.041 -0.697 0.512 0.041 -0.029 -0.357 0.021 0.375 0.179 - 553.85 11.527 11.540 11.544 0.550 -0.324 -0.586 0.550 -0.324 0.190 -0.322 -0.178 0.375 0.207 - 553.90 11.390 11.414 11.415 0.740 -0.166 -0.723 0.740 -0.166 0.120 -0.535 -0.122 0.549 0.281 - 553.95 11.652 11.682 11.682 0.836 -0.035 -0.461 0.836 -0.035 0.016 -0.385 -0.029 0.456 0.193 - 554.00 11.586 11.626 11.627 0.958 -0.161 -0.527 0.958 -0.161 0.085 -0.505 -0.155 0.611 0.267 - 554.05 11.395 11.432 11.433 0.924 -0.051 -0.718 0.924 -0.051 0.037 -0.663 -0.047 0.686 0.333 - 554.10 11.326 11.357 11.358 0.846 -0.159 -0.787 0.846 -0.159 0.125 -0.666 -0.134 0.681 0.346 - 554.15 11.074 11.155 11.159 1.337 -0.309 -1.038 1.337 -0.309 0.321 -1.389 -0.413 1.481 0.742 - 554.20 11.550 11.623 11.646 1.295 -0.735 -0.562 1.295 -0.735 0.414 -0.728 -0.953 1.267 0.634 - 554.25 11.548 11.641 11.671 1.473 -0.841 -0.565 1.473 -0.841 0.475 -0.832 -1.238 1.598 0.783 - 554.30 11.676 11.747 11.792 1.288 -1.024 -0.436 1.288 -1.024 0.447 -0.562 -1.319 1.449 0.751 - 554.35 11.743 11.778 11.827 0.917 -1.076 -0.370 0.917 -1.076 0.398 -0.339 -0.986 1.067 0.558 - 554.40 11.516 11.554 11.614 0.930 -1.187 -0.597 0.930 -1.187 0.708 -0.555 -1.104 1.315 0.712 - 554.45 11.544 11.613 11.668 1.260 -1.136 -0.569 1.260 -1.136 0.646 -0.717 -1.432 1.601 0.863 - 554.50 11.610 11.667 11.750 1.148 -1.398 -0.503 1.148 -1.398 0.703 -0.577 -1.606 1.763 0.923 - 554.55 11.440 11.498 11.597 1.153 -1.510 -0.672 1.153 -1.510 1.015 -0.775 -1.740 2.030 1.079 - 554.60 11.271 11.304 11.384 0.860 -1.345 -0.841 0.860 -1.345 1.132 -0.723 -1.156 1.628 0.886 - 554.65 11.321 11.351 11.443 0.836 -1.445 -0.792 0.836 -1.445 1.145 -0.662 -1.207 1.707 0.895 - 554.70 11.001 11.045 11.113 0.977 -1.230 -1.112 0.977 -1.230 1.367 -1.086 -1.202 1.851 1.060 - 554.75 10.717 10.777 10.866 1.136 -1.390 -1.396 1.136 -1.390 1.940 -1.585 -1.578 2.585 1.480 - 554.80 10.654 10.694 10.780 0.918 -1.360 -1.458 0.918 -1.360 1.984 -1.339 -1.249 2.410 1.350 - 554.85 10.610 10.645 10.683 0.862 -0.904 -1.503 0.862 -0.904 1.358 -1.295 -0.779 1.908 1.016 - 554.90 10.882 10.976 11.020 1.435 -0.979 -1.231 1.435 -0.979 1.206 -1.767 -1.406 2.267 1.280 - 554.95 11.365 11.410 11.465 1.011 -1.123 -0.748 1.011 -1.123 0.840 -0.756 -1.135 1.421 0.801 - 555.00 11.259 11.283 11.370 0.732 -1.401 -0.853 0.732 -1.401 1.195 -0.625 -1.026 1.613 0.847 - 555.05 11.231 11.251 11.357 0.670 -1.551 -0.882 0.670 -1.551 1.368 -0.591 -1.038 1.815 0.908 - 555.10 11.278 11.299 11.373 0.688 -1.295 -0.835 0.688 -1.295 1.082 -0.575 -0.892 1.425 0.758 - 555.15 11.233 11.251 11.330 0.639 -1.333 -0.880 0.639 -1.333 1.173 -0.562 -0.851 1.480 0.777 - 555.20 11.316 11.347 11.471 0.840 -1.678 -0.797 0.840 -1.678 1.337 -0.669 -1.409 2.078 1.027 - 555.25 11.042 11.090 11.156 1.034 -1.211 -1.071 1.034 -1.211 1.297 -1.107 -1.252 1.842 1.058 - 555.30 10.965 11.013 11.106 1.036 -1.430 -1.148 1.036 -1.430 1.642 -1.189 -1.481 2.218 1.255 - 555.35 10.953 11.017 11.125 1.187 -1.541 -1.160 1.187 -1.541 1.787 -1.377 -1.830 2.565 1.452 - 555.40 10.807 10.909 10.976 1.494 -1.204 -1.306 1.494 -1.204 1.573 -1.951 -1.798 2.694 1.542 - 555.45 10.878 10.907 11.036 0.791 -1.681 -1.234 0.791 -1.681 2.075 -0.976 -1.329 2.487 1.325 - 555.50 10.687 10.723 10.933 0.880 -2.132 -1.426 0.880 -2.132 3.041 -1.255 -1.876 3.677 1.893 - 555.55 10.523 10.549 10.670 0.741 -1.603 -1.590 0.741 -1.603 2.548 -1.179 -1.188 2.823 1.524 - 555.60 10.826 10.851 10.970 0.742 -1.609 -1.287 0.742 -1.609 2.070 -0.954 -1.193 2.397 1.287 - 555.65 10.876 10.906 11.035 0.804 -1.684 -1.237 0.804 -1.684 2.082 -0.994 -1.354 2.506 1.338 - 555.70 10.734 10.765 10.925 0.818 -1.861 -1.379 0.818 -1.861 2.565 -1.128 -1.522 3.016 1.594 - 555.75 10.727 10.745 10.911 0.609 -1.900 -1.385 0.609 -1.900 2.632 -0.844 -1.158 2.951 1.499 - 555.80 10.787 10.809 10.924 0.689 -1.577 -1.325 0.689 -1.577 2.091 -0.913 -1.086 2.359 1.263 - 555.85 10.700 10.739 10.836 0.907 -1.451 -1.412 0.907 -1.451 2.050 -1.280 -1.316 2.462 1.376 - 555.90 10.787 10.823 10.888 0.881 -1.187 -1.326 0.881 -1.187 1.573 -1.168 -1.045 1.971 1.110 - 555.95 10.542 10.587 10.657 0.976 -1.225 -1.571 0.976 -1.225 1.926 -1.534 -1.196 2.462 1.369 - 556.00 10.436 10.464 10.541 0.760 -1.270 -1.676 0.760 -1.270 2.129 -1.274 -0.965 2.501 1.331 - 556.05 10.304 10.329 10.386 0.716 -1.085 -1.809 0.716 -1.085 1.963 -1.295 -0.777 2.481 1.238 - 556.10 10.185 10.216 10.260 0.802 -0.944 -1.928 0.802 -0.944 1.821 -1.546 -0.757 2.626 1.253 - 556.15 10.484 10.518 10.570 0.840 -1.050 -1.629 0.840 -1.050 1.710 -1.368 -0.882 2.230 1.181 - 556.20 10.655 10.692 10.756 0.899 -1.166 -1.458 0.899 -1.166 1.700 -1.311 -1.048 2.146 1.194 - 556.25 10.437 10.473 10.543 0.868 -1.212 -1.676 0.868 -1.212 2.031 -1.455 -1.052 2.515 1.355 - 556.30 10.520 10.571 10.702 1.044 -1.670 -1.593 1.044 -1.670 2.661 -1.664 -1.744 3.210 1.795 - 556.35 10.893 10.950 11.080 1.121 -1.692 -1.220 1.121 -1.692 2.065 -1.367 -1.897 2.804 1.560 - 556.40 10.988 11.019 11.131 0.824 -1.578 -1.125 0.824 -1.578 1.775 -0.927 -1.301 2.218 1.194 - 556.45 10.808 10.842 10.931 0.860 -1.394 -1.305 0.860 -1.394 1.819 -1.122 -1.199 2.193 1.225 - 556.50 10.436 10.455 10.526 0.627 -1.216 -1.677 0.627 -1.216 2.039 -1.052 -0.763 2.341 1.209 - 556.55 10.383 10.403 10.453 0.646 -1.025 -1.730 0.646 -1.025 1.773 -1.117 -0.662 2.230 1.099 - 556.60 10.556 10.579 10.637 0.695 -1.107 -1.556 0.695 -1.107 1.723 -1.081 -0.769 2.065 1.087 - 556.65 10.573 10.608 10.656 0.861 -1.011 -1.540 0.861 -1.011 1.557 -1.325 -0.870 2.067 1.111 - 556.70 10.563 10.590 10.661 0.759 -1.224 -1.550 0.759 -1.224 1.896 -1.176 -0.928 2.237 1.208 - 556.75 10.620 10.657 10.728 0.884 -1.229 -1.493 0.884 -1.229 1.835 -1.319 -1.087 2.260 1.254 - 556.80 11.031 11.061 11.105 0.820 -0.986 -1.082 0.820 -0.986 1.067 -0.887 -0.808 1.407 0.803 - 556.85 11.189 11.205 11.241 0.597 -0.895 -0.923 0.597 -0.895 0.827 -0.551 -0.534 1.005 0.564 - 556.90 11.203 11.210 11.233 0.397 -0.724 -0.910 0.397 -0.724 0.659 -0.361 -0.287 0.755 0.402 - 556.95 11.213 11.220 11.244 0.418 -0.730 -0.900 0.418 -0.730 0.657 -0.376 -0.305 0.759 0.408 - 557.00 11.198 11.208 11.238 0.477 -0.811 -0.915 0.477 -0.811 0.742 -0.436 -0.386 0.861 0.471 - 557.05 11.501 11.536 11.547 0.905 -0.496 -0.612 0.905 -0.496 0.303 -0.554 -0.449 0.720 0.387 - 557.10 11.728 11.760 11.763 0.859 -0.286 -0.384 0.859 -0.286 0.110 -0.330 -0.246 0.484 0.213 - 557.15 11.631 11.645 11.646 0.573 -0.073 -0.481 0.573 -0.073 0.035 -0.276 -0.042 0.283 0.141 - 557.20 11.308 11.319 11.322 0.497 -0.282 -0.805 0.497 -0.282 0.227 -0.400 -0.140 0.487 0.241 - 557.25 11.442 11.463 11.481 0.688 -0.639 -0.670 0.688 -0.639 0.429 -0.461 -0.440 0.666 0.384 - 557.30 11.629 11.658 11.678 0.828 -0.675 -0.484 0.828 -0.675 0.327 -0.401 -0.559 0.688 0.381 - 557.35 11.659 11.663 11.666 0.314 -0.259 -0.454 0.314 -0.259 0.118 -0.143 -0.081 0.186 0.101 - 557.40 11.393 11.397 11.405 0.296 -0.444 -0.720 0.296 -0.444 0.320 -0.213 -0.131 0.402 0.203 - 557.45 11.275 11.287 11.301 0.516 -0.568 -0.838 0.516 -0.568 0.475 -0.433 -0.293 0.645 0.353 - 557.50 11.213 11.225 11.254 0.527 -0.812 -0.900 0.527 -0.812 0.731 -0.474 -0.428 0.874 0.485 - 557.55 11.052 11.071 11.091 0.657 -0.657 -1.061 0.657 -0.657 0.697 -0.697 -0.432 0.995 0.538 - 557.60 11.174 11.194 11.219 0.677 -0.743 -0.939 0.677 -0.743 0.698 -0.636 -0.503 0.946 0.535 - 557.65 11.377 11.402 11.411 0.758 -0.456 -0.736 0.758 -0.456 0.336 -0.558 -0.346 0.663 0.369 - 557.70 11.462 11.476 11.490 0.579 -0.557 -0.651 0.579 -0.557 0.363 -0.377 -0.323 0.535 0.307 - 557.75 11.446 11.453 11.483 0.399 -0.833 -0.667 0.399 -0.833 0.556 -0.266 -0.333 0.649 0.350 - 557.80 11.240 11.250 11.291 0.464 -0.967 -0.873 0.464 -0.967 0.844 -0.405 -0.449 0.956 0.519 - 557.85 11.202 11.205 11.252 0.231 -1.029 -0.910 0.231 -1.029 0.937 -0.211 -0.238 0.970 0.494 - 557.90 11.000 11.008 11.033 0.432 -0.742 -1.113 0.432 -0.742 0.826 -0.481 -0.320 0.988 0.504 - 557.95 10.957 10.957 11.026 -0.000 -1.227 -1.156 -0.000 -1.227 1.418 0.000 0.000 1.421 0.709 - 558.00 10.474 10.474 10.545 -0.014 -1.227 -1.639 -0.014 -1.227 2.010 0.022 0.017 2.096 1.005 - 558.05 10.642 10.642 10.736 -0.054 -1.413 -1.471 -0.054 -1.413 2.078 0.080 0.077 2.081 1.040 - 558.10 10.641 10.642 10.739 -0.140 -1.442 -1.472 -0.140 -1.442 2.123 0.206 0.202 2.133 1.071 - 558.15 10.489 10.489 10.589 -0.067 -1.449 -1.624 -0.067 -1.449 2.353 0.109 0.097 2.371 1.179 - 558.20 10.749 10.751 10.828 0.196 -1.290 -1.364 0.196 -1.290 1.759 -0.268 -0.253 1.781 0.899 - 558.25 10.603 10.607 10.718 0.267 -1.543 -1.510 0.267 -1.543 2.329 -0.403 -0.411 2.365 1.199 - 558.30 10.768 10.780 10.963 0.504 -1.996 -1.344 0.504 -1.996 2.683 -0.677 -1.005 3.022 1.472 - 558.35 10.645 10.652 10.822 0.378 -1.912 -1.468 0.378 -1.912 2.807 -0.554 -0.722 2.977 1.475 - 558.40 10.758 10.759 10.941 0.116 -1.989 -1.355 0.116 -1.989 2.694 -0.157 -0.230 2.902 1.354 - 558.45 10.727 10.728 10.914 -0.146 -2.005 -1.386 -0.146 -2.005 2.779 0.203 0.293 2.981 1.401 - 558.50 10.902 10.904 11.106 -0.212 -2.110 -1.211 -0.212 -2.110 2.556 0.257 0.448 2.982 1.304 - 558.55 10.917 10.917 11.032 -0.052 -1.586 -1.196 -0.052 -1.586 1.896 0.062 0.082 1.974 0.950 - 558.60 10.989 10.991 11.083 -0.189 -1.425 -1.124 -0.189 -1.425 1.602 0.212 0.270 1.665 0.819 - 558.65 10.976 10.981 11.069 -0.317 -1.397 -1.136 -0.317 -1.397 1.588 0.360 0.442 1.672 0.843 - 558.70 10.793 10.796 10.852 -0.250 -1.097 -1.320 -0.250 -1.097 1.448 0.331 0.275 1.504 0.755 - 558.75 10.729 10.729 10.765 -0.092 -0.871 -1.384 -0.092 -0.871 1.205 0.127 0.080 1.341 0.607 - 558.80 10.619 10.619 10.673 0.080 -1.070 -1.494 0.080 -1.070 1.599 -0.119 -0.085 1.692 0.803 - 558.85 10.875 10.875 10.918 -0.005 -0.970 -1.238 -0.005 -0.970 1.201 0.007 0.005 1.237 0.601 - 558.90 11.027 11.028 11.064 0.155 -0.881 -1.085 0.155 -0.881 0.956 -0.169 -0.137 0.989 0.490 - 558.95 11.145 11.149 11.194 0.281 -1.003 -0.967 0.281 -1.003 0.970 -0.272 -0.282 1.010 0.523 - 559.00 11.176 11.182 11.207 0.376 -0.748 -0.937 0.376 -0.748 0.701 -0.352 -0.281 0.789 0.417 - 559.05 11.238 11.263 11.277 0.741 -0.567 -0.874 0.741 -0.567 0.496 -0.648 -0.421 0.818 0.459 - 559.10 11.209 11.238 11.254 0.803 -0.602 -0.904 0.803 -0.602 0.544 -0.725 -0.483 0.912 0.514 - 559.15 11.259 11.279 11.291 0.661 -0.527 -0.854 0.661 -0.527 0.450 -0.564 -0.348 0.722 0.401 - 559.20 11.280 11.304 11.309 0.729 -0.332 -0.832 0.729 -0.332 0.276 -0.607 -0.242 0.667 0.355 - 559.25 11.058 11.085 11.088 0.784 -0.255 -1.055 0.784 -0.255 0.269 -0.828 -0.200 0.897 0.446 - 559.30 10.826 10.827 10.827 0.168 -0.091 -1.287 0.168 -0.091 0.117 -0.217 -0.015 0.847 0.123 - 559.35 10.899 10.900 10.900 0.086 0.014 -1.214 0.086 0.014 -0.017 -0.104 0.001 0.740 0.053 - 559.40 10.724 10.730 10.734 0.375 0.289 -1.389 0.375 0.289 -0.401 -0.521 0.108 1.077 0.333 - 559.45 10.775 10.809 10.810 0.863 -0.069 -1.338 0.863 -0.069 0.093 -1.154 -0.060 1.270 0.580 - 559.50 10.277 10.290 10.297 0.502 -0.392 -1.835 0.502 -0.392 0.719 -0.922 -0.197 1.887 0.593 - 559.55 10.256 10.269 10.272 0.531 -0.254 -1.857 0.531 -0.254 0.472 -0.986 -0.135 1.898 0.551 - 559.60 10.469 10.479 10.482 0.449 -0.253 -1.644 0.449 -0.253 0.417 -0.738 -0.114 1.484 0.427 - 559.65 10.365 10.372 10.373 0.355 0.185 -1.747 0.355 0.185 -0.324 -0.620 0.066 1.607 0.351 - 559.70 10.258 10.276 10.276 0.606 0.055 -1.855 0.606 0.055 -0.102 -1.124 0.033 1.905 0.565 - 559.75 10.234 10.258 10.261 0.696 -0.252 -1.878 0.696 -0.252 0.474 -1.308 -0.176 2.038 0.701 - 559.80 10.114 10.120 10.121 0.371 -0.097 -1.999 0.371 -0.097 0.194 -0.743 -0.036 2.072 0.384 - 559.85 10.065 10.086 10.092 0.648 0.340 -2.047 0.648 0.340 -0.696 -1.327 0.220 2.364 0.757 - 559.90 10.289 10.317 10.323 0.748 0.375 -1.823 0.748 0.375 -0.683 -1.364 0.280 2.012 0.776 - 559.95 10.527 10.549 10.554 0.691 0.305 -1.586 0.691 0.305 -0.483 -1.096 0.211 1.543 0.608 - 560.00 10.618 10.652 10.658 0.850 0.361 -1.495 0.850 0.361 -0.539 -1.270 0.307 1.543 0.707 - 560.05 10.416 10.423 10.430 0.368 0.392 -1.696 0.368 0.392 -0.665 -0.625 0.144 1.584 0.462 - 560.10 10.411 10.412 10.413 0.126 -0.097 -1.701 0.126 -0.097 0.165 -0.214 -0.012 1.460 0.135 - 560.15 10.536 10.539 10.539 0.238 -0.055 -1.577 0.238 -0.055 0.086 -0.375 -0.013 1.273 0.193 - 560.20 10.753 10.754 10.754 -0.135 0.026 -1.360 -0.135 0.026 -0.036 0.184 -0.004 0.934 0.094 - 560.25 10.585 10.587 10.590 0.207 0.260 -1.528 0.207 0.260 -0.397 -0.317 0.054 1.223 0.255 - 560.30 10.442 10.443 10.444 0.149 0.108 -1.671 0.149 0.108 -0.181 -0.248 0.016 1.413 0.154 - 560.35 10.441 10.442 10.442 -0.125 -0.084 -1.672 -0.125 -0.084 0.140 0.209 0.010 1.409 0.126 - 560.40 10.462 10.463 10.466 -0.100 -0.250 -1.650 -0.100 -0.250 0.412 0.164 0.025 1.398 0.222 - 560.45 10.354 10.354 10.355 -0.047 -0.130 -1.759 -0.047 -0.130 0.229 0.083 0.006 1.556 0.122 - 560.50 10.518 10.521 10.524 0.247 0.242 -1.595 0.247 0.242 -0.385 -0.394 0.060 1.332 0.277 - 560.55 10.564 10.577 10.580 0.519 0.242 -1.549 0.519 0.242 -0.375 -0.804 0.126 1.363 0.448 - 560.60 10.923 10.943 10.953 0.661 -0.460 -1.189 0.661 -0.460 0.547 -0.787 -0.304 1.032 0.503 - 560.65 11.163 11.185 11.193 0.704 -0.427 -0.950 0.704 -0.427 0.406 -0.668 -0.301 0.790 0.419 - 560.70 11.079 11.085 11.097 0.368 -0.508 -1.034 0.368 -0.508 0.525 -0.381 -0.187 0.731 0.337 - 560.75 11.319 11.325 11.341 0.350 -0.608 -0.794 0.350 -0.608 0.483 -0.278 -0.213 0.561 0.298 - 560.80 11.410 11.411 11.424 0.140 -0.546 -0.702 0.140 -0.546 0.383 -0.098 -0.076 0.405 0.202 - 560.85 11.036 11.038 11.046 -0.205 -0.431 -1.077 -0.205 -0.431 0.465 0.221 0.089 0.694 0.261 - 560.90 10.831 10.831 10.839 -0.111 -0.409 -1.282 -0.111 -0.409 0.524 0.142 0.045 0.911 0.273 - 560.95 10.838 10.840 10.850 -0.214 -0.474 -1.275 -0.214 -0.474 0.604 0.273 0.102 0.948 0.335 - 561.00 11.365 11.366 11.375 -0.155 -0.439 -0.748 -0.155 -0.439 0.329 0.116 0.068 0.388 0.178 - 561.05 11.297 11.297 11.303 -0.024 -0.351 -0.815 -0.024 -0.351 0.287 0.020 0.008 0.395 0.144 - 561.10 11.070 11.073 11.074 0.272 -0.145 -1.043 0.272 -0.145 0.152 -0.283 -0.039 0.591 0.162 - 561.15 10.936 10.939 10.940 0.288 0.113 -1.177 0.288 0.113 -0.133 -0.339 0.033 0.741 0.183 - 561.20 10.842 10.845 10.845 0.239 -0.093 -1.270 0.239 -0.093 0.119 -0.303 -0.022 0.840 0.163 - 561.25 11.076 11.084 11.084 0.429 -0.027 -1.037 0.429 -0.027 0.028 -0.445 -0.012 0.630 0.223 - 561.30 11.227 11.228 11.228 0.125 0.061 -0.885 0.125 0.061 -0.054 -0.111 0.008 0.402 0.062 - 561.35 11.289 11.289 11.291 0.034 -0.206 -0.824 0.034 -0.206 0.170 -0.028 -0.007 0.361 0.086 - 561.40 11.471 11.474 11.488 -0.257 -0.562 -0.641 -0.257 -0.562 0.361 0.165 0.145 0.397 0.211 - 561.45 11.335 11.337 11.345 -0.211 -0.440 -0.778 -0.211 -0.440 0.343 0.164 0.093 0.422 0.195 - 561.50 11.322 11.328 11.343 -0.366 -0.587 -0.791 -0.366 -0.587 0.464 0.289 0.215 0.552 0.294 - 561.55 11.262 11.283 11.303 -0.697 -0.670 -0.851 -0.697 -0.670 0.571 0.594 0.467 0.830 0.473 - 561.60 11.540 11.559 11.579 -0.657 -0.674 -0.573 -0.657 -0.674 0.386 0.376 0.443 0.607 0.349 - 561.65 11.387 11.399 11.418 -0.532 -0.650 -0.726 -0.532 -0.650 0.472 0.387 0.346 0.617 0.351 - 561.70 11.588 11.610 11.635 -0.716 -0.761 -0.525 -0.716 -0.761 0.399 0.376 0.545 0.683 0.386 - 561.75 11.429 11.436 11.444 -0.410 -0.431 -0.684 -0.410 -0.431 0.295 0.281 0.177 0.411 0.222 - 561.80 11.271 11.272 11.274 -0.138 -0.225 -0.842 -0.138 -0.225 0.189 0.116 0.031 0.389 0.112 - 561.85 11.029 11.034 11.034 -0.338 -0.024 -1.084 -0.338 -0.024 0.026 0.366 0.008 0.645 0.184 - 561.90 11.017 11.025 11.025 -0.428 -0.042 -1.096 -0.428 -0.042 0.046 0.469 0.018 0.693 0.236 - 561.95 10.990 10.998 10.998 -0.416 -0.087 -1.123 -0.416 -0.087 0.098 0.467 0.036 0.721 0.239 - 562.00 10.860 10.871 10.871 -0.503 0.009 -1.253 -0.503 0.009 -0.011 0.631 -0.005 0.912 0.316 - 562.05 10.923 10.944 10.961 -0.679 -0.620 -1.190 -0.679 -0.620 0.738 0.808 0.421 1.131 0.586 - 562.10 10.596 10.615 10.623 -0.637 -0.399 -1.517 -0.637 -0.399 0.605 0.966 0.254 1.433 0.584 - 562.15 10.559 10.576 10.589 -0.590 -0.534 -1.553 -0.590 -0.534 0.830 0.916 0.315 1.523 0.638 - 562.20 10.784 10.786 10.792 -0.216 -0.346 -1.329 -0.216 -0.346 0.460 0.287 0.075 0.966 0.274 - 562.25 10.549 10.549 10.550 0.042 -0.112 -1.564 0.042 -0.112 0.175 -0.066 -0.005 1.230 0.093 - 562.30 10.349 10.349 10.349 0.051 0.002 -1.764 0.051 0.002 -0.004 -0.090 0.000 1.557 0.045 - 562.35 10.358 10.360 10.361 -0.199 0.099 -1.755 -0.199 0.099 -0.173 0.348 -0.020 1.564 0.195 - 562.40 10.526 10.533 10.533 -0.388 0.083 -1.587 -0.388 0.083 -0.131 0.615 -0.032 1.338 0.315 - 562.45 10.531 10.533 10.544 -0.191 0.471 -1.581 -0.191 0.471 -0.744 0.302 -0.090 1.379 0.404 - 562.50 10.650 10.655 10.670 -0.313 0.563 -1.462 -0.313 0.563 -0.823 0.458 -0.176 1.277 0.479 - 562.55 10.729 10.730 10.746 0.096 0.585 -1.384 0.096 0.585 -0.810 -0.132 0.056 1.133 0.411 - 562.60 10.487 10.499 10.504 0.517 0.302 -1.626 0.517 0.302 -0.491 -0.841 0.156 1.502 0.493 - 562.65 10.593 10.601 10.612 0.416 0.479 -1.520 0.416 0.479 -0.728 -0.633 0.199 1.356 0.492 - 562.70 10.695 10.697 10.737 0.215 0.925 -1.418 0.215 0.925 -1.312 -0.305 0.199 1.456 0.681 - 562.75 10.992 10.997 11.020 -0.336 0.709 -1.121 -0.336 0.709 -0.795 0.377 -0.238 0.936 0.456 - 562.80 10.797 10.809 10.858 -0.517 1.026 -1.316 -0.517 1.026 -1.350 0.680 -0.530 1.525 0.801 - 562.85 11.097 11.118 11.152 -0.676 0.865 -1.015 -0.676 0.865 -0.878 0.686 -0.585 1.118 0.629 - 562.90 11.128 11.136 11.197 -0.419 1.168 -0.985 -0.419 1.168 -1.150 0.412 -0.489 1.255 0.658 - 562.95 10.905 10.912 10.974 -0.389 1.160 -1.207 -0.389 1.160 -1.401 0.469 -0.451 1.478 0.772 - 563.00 10.787 10.795 10.854 -0.398 1.128 -1.325 -0.398 1.128 -1.495 0.527 -0.449 1.594 0.824 - 563.05 10.750 10.758 10.831 -0.421 1.254 -1.363 -0.421 1.254 -1.709 0.574 -0.528 1.803 0.939 - 563.10 10.771 10.782 10.832 -0.486 1.043 -1.342 -0.486 1.043 -1.399 0.652 -0.507 1.562 0.812 - 563.15 10.613 10.614 10.659 -0.149 0.977 -1.500 -0.149 0.977 -1.465 0.224 -0.146 1.613 0.745 - 563.20 10.764 10.764 10.800 0.053 0.878 -1.349 0.053 0.878 -1.184 -0.071 0.046 1.297 0.594 - 563.25 10.588 10.595 10.624 0.384 0.785 -1.525 0.384 0.785 -1.196 -0.586 0.302 1.544 0.683 - 563.30 10.532 10.538 10.554 0.343 0.595 -1.581 0.343 0.595 -0.941 -0.543 0.205 1.486 0.553 - 563.35 10.518 10.518 10.549 0.002 0.813 -1.595 0.002 0.813 -1.296 -0.003 0.002 1.602 0.648 - 563.40 10.674 10.674 10.704 -0.058 0.800 -1.439 -0.058 0.800 -1.152 0.084 -0.047 1.357 0.578 - 563.45 10.531 10.532 10.564 -0.153 0.820 -1.582 -0.153 0.820 -1.297 0.243 -0.126 1.600 0.663 - 563.50 10.281 10.286 10.294 -0.340 0.397 -1.832 -0.340 0.397 -0.727 0.622 -0.135 1.815 0.483 - 563.55 10.339 10.353 10.364 -0.540 0.482 -1.774 -0.540 0.482 -0.855 0.958 -0.260 1.835 0.655 - 563.60 10.391 10.398 10.401 -0.362 0.265 -1.721 -0.362 0.265 -0.457 0.624 -0.096 1.582 0.390 - 563.65 10.459 10.464 10.464 -0.314 0.138 -1.654 -0.314 0.138 -0.228 0.519 -0.043 1.426 0.284 - 563.70 10.617 10.628 10.628 -0.469 -0.016 -1.496 -0.469 -0.016 0.024 0.702 0.008 1.229 0.351 - 563.75 10.710 10.752 10.753 -0.948 0.177 -1.403 -0.948 0.177 -0.249 1.330 -0.168 1.449 0.682 - 563.80 10.636 10.655 10.664 -0.643 0.427 -1.477 -0.643 0.427 -0.631 0.950 -0.275 1.389 0.587 - 563.85 10.864 10.880 10.890 -0.581 0.471 -1.249 -0.581 0.471 -0.588 0.726 -0.274 1.059 0.487 - 563.90 10.751 10.758 10.766 -0.383 0.425 -1.362 -0.383 0.425 -0.579 0.522 -0.163 1.091 0.398 - 563.95 10.538 10.543 10.562 -0.298 0.643 -1.574 -0.298 0.643 -1.012 0.469 -0.191 1.490 0.566 - 564.00 10.647 10.661 10.685 -0.552 0.716 -1.466 -0.552 0.716 -1.050 0.809 -0.395 1.483 0.692 - 564.05 10.890 10.903 10.935 -0.527 0.838 -1.223 -0.527 0.838 -1.024 0.645 -0.442 1.237 0.644 - 564.10 10.745 10.762 10.778 -0.613 0.593 -1.368 -0.613 0.593 -0.811 0.839 -0.363 1.300 0.611 - 564.15 10.634 10.646 10.677 -0.503 0.820 -1.479 -0.503 0.820 -1.213 0.744 -0.413 1.557 0.741 - 564.20 10.674 10.697 10.725 -0.700 0.775 -1.439 -0.700 0.775 -1.116 1.008 -0.543 1.581 0.799 - 564.25 10.623 10.635 10.674 -0.512 0.910 -1.490 -0.512 0.910 -1.356 0.762 -0.466 1.654 0.812 - 564.30 10.846 10.875 10.895 -0.786 0.670 -1.267 -0.786 0.670 -0.849 0.995 -0.527 1.335 0.705 - 564.35 10.728 10.778 10.795 -1.034 0.605 -1.384 -1.034 0.605 -0.838 1.431 -0.625 1.675 0.886 - 564.40 10.982 11.038 11.041 -1.112 0.268 -1.131 -1.112 0.268 -0.303 1.258 -0.298 1.294 0.664 - 564.45 10.841 10.886 10.893 -0.994 0.380 -1.272 -0.994 0.380 -0.483 1.265 -0.377 1.375 0.703 - 564.50 10.621 10.673 10.680 -1.045 0.388 -1.491 -1.045 0.388 -0.578 1.558 -0.405 1.733 0.855 - 564.55 10.758 10.813 10.829 -1.092 0.586 -1.355 -1.092 0.586 -0.794 1.480 -0.640 1.686 0.899 - 564.60 11.077 11.112 11.112 -0.882 0.049 -1.036 -0.882 0.049 -0.051 0.914 -0.043 0.927 0.458 - 564.65 11.096 11.117 11.117 -0.680 -0.028 -1.017 -0.680 -0.028 0.028 0.692 0.019 0.749 0.346 - 564.70 11.248 11.257 11.257 -0.439 0.034 -0.864 -0.439 0.034 -0.030 0.379 -0.015 0.471 0.190 - 564.75 11.122 11.136 11.137 -0.551 -0.167 -0.990 -0.551 -0.167 0.165 0.545 0.092 0.656 0.289 - 564.80 10.758 10.775 10.776 -0.619 0.118 -1.355 -0.619 0.118 -0.159 0.839 -0.073 1.117 0.429 - 564.85 10.819 10.831 10.833 -0.498 0.205 -1.294 -0.498 0.205 -0.265 0.645 -0.102 0.982 0.352 - 564.90 10.971 10.980 10.986 -0.435 0.379 -1.142 -0.435 0.379 -0.433 0.496 -0.165 0.818 0.339 - 564.95 10.998 11.005 11.012 -0.382 0.384 -1.114 -0.382 0.384 -0.428 0.426 -0.147 0.768 0.311 - 565.00 10.456 10.461 10.503 -0.298 0.941 -1.656 -0.298 0.941 -1.558 0.493 -0.280 1.858 0.829 - 565.05 10.266 10.277 10.338 -0.480 1.125 -1.847 -0.480 1.125 -2.078 0.886 -0.540 2.454 1.162 - 565.10 10.051 10.061 10.143 -0.460 1.283 -2.062 -0.460 1.283 -2.646 0.949 -0.591 3.055 1.436 - 565.15 10.568 10.569 10.647 -0.121 1.286 -1.544 -0.121 1.286 -1.986 0.187 -0.156 2.027 1.001 - 565.20 10.073 10.073 10.145 0.053 1.208 -2.040 0.053 1.208 -2.464 -0.107 0.063 2.812 1.234 - 565.25 9.977 9.993 10.105 -0.571 1.497 -2.136 -0.571 1.497 -3.198 1.220 -0.856 3.565 1.764 - 565.30 10.143 10.147 10.318 -0.270 1.873 -1.970 -0.270 1.873 -3.689 0.531 -0.505 3.730 1.880 - 565.35 10.115 10.123 10.325 -0.380 2.034 -1.997 -0.380 2.034 -4.063 0.759 -0.773 4.136 2.103 - 565.40 10.009 10.014 10.178 -0.320 1.817 -2.103 -0.320 1.817 -3.823 0.672 -0.581 3.915 1.962 - 565.45 10.132 10.135 10.297 -0.249 1.821 -1.981 -0.249 1.821 -3.608 0.493 -0.453 3.652 1.835 - 565.50 10.166 10.168 10.344 -0.174 1.904 -1.947 -0.174 1.904 -3.706 0.338 -0.331 3.722 1.868 - 565.55 10.208 10.209 10.386 -0.174 1.904 -1.905 -0.174 1.904 -3.628 0.331 -0.331 3.643 1.829 - 565.60 10.458 10.467 10.606 -0.419 1.712 -1.654 -0.419 1.712 -2.833 0.693 -0.717 2.922 1.502 - 565.65 10.378 10.390 10.497 -0.493 1.497 -1.735 -0.493 1.497 -2.596 0.855 -0.737 2.746 1.415 - 565.70 10.422 10.455 10.573 -0.834 1.573 -1.691 -0.834 1.573 -2.660 1.410 -1.312 3.015 1.642 - 565.75 10.444 10.460 10.521 -0.568 1.137 -1.669 -0.568 1.137 -1.898 0.947 -0.646 2.200 1.109 - 565.80 10.403 10.405 10.450 -0.201 0.975 -1.710 -0.201 0.975 -1.667 0.344 -0.196 1.957 0.857 - 565.85 10.322 10.324 10.398 -0.198 1.239 -1.790 -0.198 1.239 -2.219 0.354 -0.245 2.390 1.130 - 565.90 10.216 10.217 10.329 -0.144 1.514 -1.896 -0.144 1.514 -2.870 0.272 -0.217 2.954 1.446 - 565.95 10.121 10.121 10.250 -0.037 1.621 -1.992 -0.037 1.621 -3.229 0.074 -0.060 3.299 1.615 - 566.00 10.368 10.370 10.435 -0.173 1.165 -1.745 -0.173 1.165 -2.033 0.302 -0.201 2.215 1.032 - 566.05 10.085 10.086 10.157 -0.175 1.198 -2.028 -0.175 1.198 -2.430 0.354 -0.209 2.789 1.232 - 566.10 10.064 10.065 10.105 -0.149 0.898 -2.049 -0.149 0.898 -1.840 0.305 -0.134 2.514 0.935 - 566.15 10.338 10.344 10.371 -0.341 0.749 -1.775 -0.341 0.749 -1.330 0.605 -0.255 1.914 0.741 - 566.20 10.398 10.405 10.416 -0.404 0.464 -1.715 -0.404 0.464 -0.796 0.694 -0.188 1.661 0.536 - 566.25 10.178 10.187 10.199 -0.436 0.486 -1.935 -0.436 0.486 -0.940 0.843 -0.212 2.085 0.640 - 566.30 10.304 10.327 10.330 -0.688 0.255 -1.809 -0.688 0.255 -0.461 1.244 -0.175 1.905 0.669 - 566.35 10.127 10.136 10.139 -0.420 0.255 -1.986 -0.420 0.255 -0.505 0.835 -0.107 2.092 0.491 - 566.40 10.216 10.232 10.233 -0.571 0.100 -1.896 -0.571 0.100 -0.190 1.084 -0.057 1.966 0.551 - 566.45 10.473 10.498 10.499 -0.726 0.051 -1.640 -0.726 0.051 -0.084 1.191 -0.037 1.609 0.597 - 566.50 10.561 10.570 10.570 -0.436 -0.006 -1.552 -0.436 -0.006 0.009 0.677 0.003 1.299 0.338 - 566.55 10.822 10.836 10.839 -0.551 0.241 -1.290 -0.551 0.241 -0.311 0.711 -0.133 1.013 0.394 - 566.60 10.738 10.773 10.780 -0.869 0.375 -1.374 -0.869 0.375 -0.516 1.194 -0.326 1.392 0.670 - 566.65 11.087 11.119 11.126 -0.844 0.393 -1.026 -0.844 0.393 -0.403 0.866 -0.332 0.960 0.506 - 566.70 11.271 11.294 11.297 -0.730 0.253 -0.842 -0.730 0.253 -0.213 0.615 -0.184 0.653 0.338 - 566.75 11.241 11.249 11.259 -0.425 0.475 -0.872 -0.425 0.475 -0.414 0.371 -0.202 0.583 0.295 - 566.80 11.029 11.053 11.065 -0.722 0.508 -1.083 -0.722 0.508 -0.550 0.782 -0.366 0.976 0.512 - 566.85 10.770 10.799 10.823 -0.786 0.723 -1.343 -0.786 0.723 -0.971 1.055 -0.568 1.472 0.771 - 566.90 10.612 10.649 10.680 -0.881 0.816 -1.501 -0.881 0.816 -1.224 1.322 -0.719 1.847 0.970 - 566.95 10.740 10.797 10.824 -1.111 0.758 -1.373 -1.111 0.758 -1.040 1.525 -0.842 1.847 1.014 - 567.00 10.874 10.922 10.944 -1.017 0.699 -1.238 -1.017 0.699 -0.866 1.260 -0.711 1.529 0.843 - 567.05 11.150 11.225 11.234 -1.302 0.453 -0.963 -1.302 0.453 -0.437 1.254 -0.590 1.414 0.727 - 567.10 11.247 11.369 11.380 -1.660 0.498 -0.866 -1.660 0.498 -0.431 1.437 -0.827 1.877 0.857 - 567.15 11.013 11.166 11.187 -1.840 0.682 -1.099 -1.840 0.682 -0.750 2.023 -1.255 2.530 1.248 - 567.20 10.767 10.892 10.911 -1.651 0.630 -1.346 -1.651 0.630 -0.848 2.222 -1.039 2.467 1.298 - 567.25 11.194 11.334 11.346 -1.773 0.523 -0.919 -1.773 0.523 -0.481 1.629 -0.928 2.131 0.968 - 567.30 11.155 11.293 11.309 -1.762 0.600 -0.958 -1.762 0.600 -0.575 1.689 -1.057 2.192 1.037 - 567.35 11.304 11.527 11.535 -2.258 0.425 -0.809 -2.258 0.425 -0.344 1.826 -0.961 2.967 1.046 - 567.40 10.997 11.206 11.206 -2.153 0.107 -1.116 -2.153 0.107 -0.120 2.401 -0.231 2.945 1.208 - 567.45 10.993 11.189 11.223 -2.086 0.879 -1.120 -2.086 0.879 -0.984 2.336 -1.833 3.189 1.564 - 567.50 11.107 11.311 11.323 -2.138 0.533 -1.006 -2.138 0.533 -0.537 2.151 -1.141 2.934 1.247 - 567.55 11.296 11.551 11.577 -2.413 0.776 -0.817 -2.413 0.776 -0.634 1.972 -1.872 3.547 1.396 - 567.60 11.244 11.449 11.466 -2.155 0.635 -0.869 -2.155 0.635 -0.552 1.872 -1.368 2.901 1.192 - 567.65 11.574 11.735 11.735 -1.934 0.047 -0.539 -1.934 0.047 -0.025 1.042 -0.091 2.017 0.523 - 567.70 11.619 11.758 11.759 -1.808 -0.145 -0.494 -1.808 -0.145 0.072 0.893 0.262 1.767 0.467 - 567.75 11.325 11.456 11.457 -1.729 -0.134 -0.788 -1.729 -0.134 0.106 1.362 0.232 1.814 0.693 - 567.80 11.096 11.229 11.229 -1.725 0.033 -1.017 -1.725 0.033 -0.034 1.754 -0.057 2.005 0.878 - 567.85 11.146 11.269 11.271 -1.656 0.215 -0.966 -1.656 0.215 -0.208 1.601 -0.357 1.861 0.826 - 567.90 11.040 11.151 11.160 -1.565 0.462 -1.073 -1.565 0.462 -0.495 1.678 -0.722 1.906 0.947 - 567.95 10.928 11.002 11.013 -1.269 0.502 -1.184 -1.269 0.502 -0.595 1.503 -0.637 1.633 0.869 - 568.00 10.920 11.020 11.020 -1.484 0.057 -1.193 -1.484 0.057 -0.068 1.770 -0.085 1.814 0.887 - 568.05 10.922 11.004 11.004 -1.337 0.082 -1.191 -1.337 0.082 -0.098 1.593 -0.110 1.607 0.800 - 568.10 10.674 10.795 10.796 -1.613 0.173 -1.439 -1.613 0.173 -0.249 2.322 -0.279 2.352 1.176 - 568.15 10.627 10.739 10.739 -1.547 0.048 -1.486 -1.547 0.048 -0.071 2.299 -0.074 2.302 1.151 - 568.20 10.624 10.756 10.756 -1.677 -0.119 -1.489 -1.677 -0.119 0.176 2.497 0.199 2.522 1.256 - 568.25 10.710 10.786 10.790 -1.283 0.281 -1.403 -1.283 0.281 -0.394 1.800 -0.360 1.847 0.939 - 568.30 11.061 11.141 11.149 -1.335 0.402 -1.052 -1.335 0.402 -0.423 1.404 -0.537 1.526 0.781 - 568.35 11.109 11.229 11.266 -1.637 0.911 -1.004 -1.637 0.911 -0.915 1.643 -1.491 2.258 1.200 - 568.40 11.003 11.153 11.171 -1.825 0.631 -1.110 -1.825 0.631 -0.701 2.026 -1.152 2.481 1.217 - 568.45 11.091 11.278 11.287 -2.044 0.463 -1.022 -2.044 0.463 -0.473 2.089 -0.947 2.719 1.171 - 568.50 10.979 11.182 11.188 -2.122 0.364 -1.134 -2.122 0.364 -0.412 2.406 -0.771 2.961 1.280 - 568.55 10.881 11.076 11.076 -2.070 0.022 -1.232 -2.070 0.022 -0.027 2.550 -0.045 2.902 1.275 - 568.60 11.039 11.201 11.202 -1.899 -0.046 -1.074 -1.899 -0.046 0.049 2.039 0.087 2.381 1.021 - 568.65 11.313 11.442 11.442 -1.711 0.072 -0.799 -1.711 0.072 -0.057 1.368 -0.123 1.786 0.687 - 568.70 11.149 11.278 11.279 -1.704 0.099 -0.964 -1.704 0.099 -0.096 1.642 -0.169 1.920 0.827 - 568.75 10.863 10.948 10.950 -1.360 0.243 -1.250 -1.360 0.243 -0.304 1.700 -0.331 1.736 0.879 - 568.80 10.816 10.910 10.915 -1.429 0.329 -1.297 -1.429 0.329 -0.427 1.853 -0.470 1.916 0.980 - 568.85 11.031 11.106 11.107 -1.289 0.170 -1.082 -1.289 0.170 -0.184 1.395 -0.220 1.431 0.712 - 568.90 11.102 11.201 11.201 -1.485 -0.035 -1.011 -1.485 -0.035 0.035 1.501 0.052 1.614 0.751 - 568.95 11.101 11.194 11.198 -1.443 0.287 -1.012 -1.443 0.287 -0.291 1.460 -0.415 1.594 0.773 - 569.00 10.864 10.938 10.958 -1.270 0.663 -1.248 -1.270 0.663 -0.827 1.586 -0.842 1.806 0.988 - 569.05 10.965 11.033 11.098 -1.223 1.202 -1.148 -1.223 1.202 -1.379 1.403 -1.469 2.128 1.228 - 569.10 11.129 11.226 11.258 -1.471 0.846 -0.984 -1.471 0.846 -0.832 1.448 -1.245 1.924 1.041 - 569.15 11.072 11.187 11.221 -1.597 0.870 -1.040 -1.597 0.870 -0.906 1.661 -1.390 2.195 1.174 - 569.20 11.295 11.372 11.422 -1.321 1.069 -0.818 -1.321 1.069 -0.874 1.081 -1.412 1.778 0.991 - 569.25 11.230 11.290 11.345 -1.161 1.114 -0.882 -1.161 1.114 -0.983 1.025 -1.294 1.684 0.961 - 569.30 11.088 11.151 11.205 -1.183 1.090 -1.024 -1.183 1.090 -1.117 1.212 -1.290 1.819 1.046 - 569.35 11.179 11.232 11.273 -1.089 0.962 -0.934 -1.089 0.962 -0.898 1.017 -1.047 1.491 0.857 - 569.40 11.231 11.265 11.318 -0.877 1.094 -0.882 -0.877 1.094 -0.965 0.773 -0.959 1.372 0.782 - 569.45 11.361 11.408 11.440 -1.031 0.857 -0.751 -1.031 0.857 -0.644 0.775 -0.884 1.182 0.670 - 569.50 11.453 11.480 11.532 -0.784 1.092 -0.660 -0.784 1.092 -0.720 0.517 -0.856 1.121 0.616 - 569.55 11.648 11.669 11.719 -0.694 1.082 -0.465 -0.694 1.082 -0.503 0.323 -0.751 0.934 0.480 - 569.60 11.571 11.583 11.601 -0.532 0.646 -0.542 -0.532 0.646 -0.350 0.288 -0.343 0.497 0.284 - 569.65 11.634 11.641 11.695 -0.385 1.125 -0.479 -0.385 1.125 -0.539 0.184 -0.433 0.822 0.358 - 569.70 11.734 11.752 11.812 -0.661 1.189 -0.379 -0.661 1.189 -0.451 0.251 -0.786 0.998 0.470 - 569.75 11.915 11.937 12.022 -0.724 1.425 -0.198 -0.724 1.425 -0.282 0.143 -1.032 1.297 0.540 - 569.80 11.531 11.564 11.608 -0.870 1.006 -0.582 -0.870 1.006 -0.585 0.506 -0.875 1.054 0.584 - 569.85 11.480 11.506 11.550 -0.782 0.998 -0.633 -0.782 0.998 -0.632 0.495 -0.780 1.004 0.560 - 569.90 11.844 11.870 11.909 -0.786 0.959 -0.269 -0.786 0.959 -0.258 0.211 -0.754 0.805 0.412 - 569.95 11.523 11.541 11.593 -0.659 1.094 -0.590 -0.659 1.094 -0.646 0.389 -0.721 0.990 0.522 - 570.00 11.356 11.395 11.492 -0.945 1.486 -0.757 -0.945 1.486 -1.124 0.715 -1.404 1.836 0.968 - 570.05 11.144 11.195 11.285 -1.068 1.424 -0.969 -1.068 1.424 -1.379 1.035 -1.520 2.053 1.149 - 570.10 11.032 11.064 11.118 -0.841 1.102 -1.081 -0.841 1.102 -1.191 0.909 -0.927 1.545 0.881 - 570.15 10.858 10.897 10.946 -0.922 1.024 -1.254 -0.922 1.024 -1.285 1.157 -0.945 1.736 0.985 - 570.20 10.992 11.018 11.065 -0.764 1.011 -1.121 -0.764 1.011 -1.134 0.856 -0.773 1.431 0.809 - 570.25 10.738 10.768 10.776 -0.808 0.414 -1.375 -0.808 0.414 -0.570 1.111 -0.335 1.358 0.646 - 570.30 10.359 10.390 10.401 -0.812 0.477 -1.754 -0.812 0.477 -0.836 1.424 -0.387 1.982 0.848 - 570.35 10.392 10.417 10.421 -0.719 0.315 -1.721 -0.719 0.315 -0.542 1.238 -0.227 1.789 0.685 - 570.40 10.297 10.316 10.319 -0.617 0.268 -1.816 -0.617 0.268 -0.487 1.120 -0.165 1.874 0.616 - 570.45 10.336 10.336 10.340 -0.052 0.272 -1.777 -0.052 0.272 -0.484 0.093 -0.014 1.617 0.246 - 570.50 10.527 10.527 10.556 0.013 0.784 -1.586 0.013 0.784 -1.243 -0.021 0.010 1.565 0.622 - 570.55 10.721 10.721 10.728 0.035 0.392 -1.392 0.035 0.392 -0.546 -0.049 0.014 1.046 0.274 - 570.60 10.727 10.729 10.736 0.226 0.379 -1.386 0.226 0.379 -0.525 -0.313 0.085 1.057 0.308 - 570.65 10.774 10.797 10.800 0.705 0.256 -1.339 0.705 0.256 -0.343 -0.945 0.181 1.178 0.510 - 570.70 11.142 11.147 11.148 0.339 0.175 -0.971 0.339 0.175 -0.170 -0.329 0.059 0.544 0.187 - 570.75 11.266 11.276 11.278 0.475 0.201 -0.846 0.475 0.201 -0.170 -0.402 0.095 0.491 0.223 - 570.80 11.387 11.395 11.402 0.437 0.413 -0.726 0.437 0.413 -0.300 -0.317 0.180 0.444 0.236 - 570.85 11.168 11.174 11.202 0.371 0.791 -0.945 0.371 0.791 -0.748 -0.351 0.294 0.828 0.438 - 570.90 11.237 11.252 11.263 0.562 0.510 -0.875 0.562 0.510 -0.447 -0.492 0.286 0.671 0.362 - 570.95 11.086 11.093 11.097 0.392 0.307 -1.027 0.392 0.307 -0.316 -0.402 0.120 0.652 0.263 - 571.00 10.952 10.966 10.966 0.557 0.000 -1.161 0.557 0.000 -0.000 -0.647 0.000 0.829 0.323 - 571.05 10.828 10.849 10.851 0.684 0.203 -1.285 0.684 0.203 -0.261 -0.878 0.139 1.080 0.463 - 571.10 11.124 11.156 11.159 0.850 0.250 -0.989 0.850 0.250 -0.247 -0.841 0.212 0.881 0.451 - 571.15 10.936 10.940 10.942 0.300 0.230 -1.177 0.300 0.230 -0.270 -0.353 0.069 0.764 0.225 - 571.20 10.700 10.700 10.701 -0.077 0.144 -1.413 -0.077 0.144 -0.203 0.108 -0.011 1.011 0.115 - 571.25 10.389 10.389 10.389 0.087 0.008 -1.724 0.087 0.008 -0.013 -0.149 0.001 1.489 0.075 - 571.30 10.565 10.571 10.574 0.369 -0.230 -1.548 0.369 -0.230 0.356 -0.571 -0.085 1.292 0.339 - 571.35 10.449 10.453 10.453 0.254 -0.082 -1.663 0.254 -0.082 0.136 -0.422 -0.021 1.419 0.222 - 571.40 10.466 10.487 10.487 0.658 -0.088 -1.647 0.658 -0.088 0.145 -1.084 -0.058 1.576 0.547 - 571.45 10.446 10.477 10.479 0.807 0.173 -1.667 0.807 0.173 -0.288 -1.344 0.139 1.729 0.691 - 571.50 10.538 10.588 10.588 1.030 0.071 -1.575 1.030 0.071 -0.112 -1.623 0.073 1.774 0.814 - 571.55 10.455 10.515 10.527 1.122 0.504 -1.658 1.122 0.504 -0.836 -1.860 0.566 2.130 1.058 - 571.60 10.561 10.624 10.645 1.161 0.663 -1.552 1.161 0.663 -1.029 -1.802 0.770 2.098 1.107 - 571.65 10.909 10.951 11.003 0.950 1.073 -1.203 0.950 1.073 -1.291 -1.144 1.020 1.751 1.002 - 571.70 11.018 11.049 11.063 0.829 0.556 -1.095 0.829 0.556 -0.609 -0.908 0.462 1.098 0.594 - 571.75 10.950 11.019 11.030 1.233 0.486 -1.163 1.233 0.486 -0.565 -1.434 0.599 1.555 0.827 - 571.80 11.193 11.251 11.253 1.148 0.210 -0.920 1.148 0.210 -0.193 -1.056 0.241 1.104 0.550 - 571.85 11.251 11.279 11.280 0.800 0.146 -0.862 0.800 0.146 -0.126 -0.689 0.117 0.702 0.355 - 571.90 11.110 11.127 11.127 0.602 0.096 -1.002 0.602 0.096 -0.096 -0.604 0.058 0.688 0.307 - 571.95 11.309 11.354 11.356 1.014 -0.162 -0.804 1.014 -0.162 0.130 -0.815 -0.164 0.850 0.421 - 572.00 11.004 11.060 11.062 1.111 -0.215 -1.109 1.111 -0.215 0.238 -1.231 -0.238 1.254 0.638 - 572.05 10.890 10.940 10.942 1.040 -0.235 -1.222 1.040 -0.235 0.287 -1.271 -0.244 1.315 0.663 - 572.10 11.223 11.258 11.263 0.883 -0.329 -0.889 0.883 -0.329 0.293 -0.785 -0.290 0.839 0.443 - 572.15 11.198 11.247 11.251 1.051 -0.306 -0.915 1.051 -0.306 0.280 -0.961 -0.322 1.017 0.526 - 572.20 10.878 10.933 10.939 1.099 -0.339 -1.235 1.099 -0.339 0.419 -1.357 -0.373 1.424 0.734 - 572.25 10.716 10.788 10.792 1.242 -0.316 -1.397 1.242 -0.316 0.442 -1.735 -0.393 1.797 0.917 - 572.30 10.782 10.860 10.860 1.303 -0.067 -1.331 1.303 -0.067 0.089 -1.735 -0.088 1.737 0.870 - 572.35 10.725 10.794 10.794 1.214 0.022 -1.387 1.214 0.022 -0.031 -1.684 0.027 1.699 0.842 - 572.40 10.749 10.790 10.790 0.936 0.011 -1.363 0.936 0.011 -0.015 -1.277 0.011 1.368 0.638 - 572.45 10.814 10.837 10.840 0.704 0.249 -1.299 0.704 0.249 -0.323 -0.914 0.175 1.122 0.493 - 572.50 10.965 10.990 10.994 0.754 0.277 -1.148 0.754 0.277 -0.318 -0.866 0.209 0.982 0.473 - 572.55 10.922 10.954 10.955 0.846 0.094 -1.191 0.846 0.094 -0.112 -1.008 0.080 1.072 0.508 - 572.60 10.773 10.853 10.853 1.316 0.016 -1.340 1.316 0.016 -0.021 -1.762 0.021 1.763 0.881 - 572.65 10.794 10.947 10.947 1.825 -0.095 -1.319 1.825 -0.095 0.125 -2.406 -0.173 2.539 1.208 - 572.70 10.819 10.974 10.974 1.839 -0.007 -1.294 1.839 -0.007 0.009 -2.380 -0.013 2.529 1.190 - 572.75 11.253 11.390 11.390 1.761 -0.074 -0.860 1.761 -0.074 0.063 -1.514 -0.130 1.923 0.761 - 572.80 11.401 11.545 11.551 1.819 -0.361 -0.712 1.819 -0.361 0.257 -1.294 -0.656 1.972 0.737 - 572.85 11.385 11.520 11.532 1.759 -0.530 -0.728 1.759 -0.530 0.386 -1.281 -0.933 1.953 0.816 - 572.90 11.524 11.624 11.639 1.517 -0.589 -0.588 1.517 -0.589 0.346 -0.892 -0.893 1.497 0.655 - 572.95 11.403 11.548 11.556 1.826 -0.424 -0.710 1.826 -0.424 0.301 -1.296 -0.775 2.010 0.770 - 573.00 11.540 11.624 11.652 1.393 -0.807 -0.573 1.393 -0.807 0.462 -0.798 -1.124 1.460 0.727 - 573.05 11.468 11.511 11.525 0.996 -0.564 -0.645 0.996 -0.564 0.364 -0.642 -0.561 0.863 0.464 - 573.10 11.608 11.645 11.667 0.930 -0.710 -0.505 0.930 -0.710 0.358 -0.469 -0.661 0.812 0.443 - 573.15 11.401 11.439 11.477 0.932 -0.942 -0.712 0.932 -0.942 0.671 -0.664 -0.878 1.131 0.644 - 573.20 11.634 11.668 11.695 0.883 -0.805 -0.479 0.883 -0.805 0.385 -0.422 -0.710 0.828 0.456 - 573.25 11.327 11.392 11.398 1.222 -0.371 -0.786 1.222 -0.371 0.291 -0.960 -0.453 1.124 0.550 - 573.30 11.399 11.442 11.446 0.996 -0.282 -0.714 0.996 -0.282 0.201 -0.711 -0.281 0.790 0.395 - 573.35 11.700 11.734 11.739 0.893 -0.339 -0.413 0.893 -0.339 0.140 -0.369 -0.303 0.542 0.249 - 573.40 11.420 11.429 11.429 0.443 -0.016 -0.692 0.443 -0.016 0.011 -0.307 -0.007 0.338 0.153 - 573.45 11.612 11.632 11.637 0.686 0.348 -0.501 0.686 0.348 -0.174 -0.343 0.238 0.421 0.226 - 573.50 11.822 11.841 11.841 0.665 -0.072 -0.291 0.665 -0.072 0.021 -0.193 -0.048 0.266 0.100 - 573.55 12.029 12.052 12.054 0.740 0.201 -0.084 0.740 0.201 -0.017 -0.062 0.149 0.298 0.081 - 573.60 11.703 11.736 11.748 0.880 0.526 -0.410 0.880 0.526 -0.215 -0.361 0.462 0.609 0.312 - 573.65 11.633 11.646 11.653 0.547 0.397 -0.480 0.547 0.397 -0.191 -0.263 0.217 0.344 0.195 - 573.70 11.456 11.467 11.471 0.505 0.300 -0.657 0.505 0.300 -0.197 -0.332 0.151 0.388 0.207 - 573.75 11.455 11.475 11.476 0.664 -0.136 -0.657 0.664 -0.136 0.090 -0.437 -0.091 0.446 0.227 - 573.80 11.516 11.543 11.549 0.784 -0.364 -0.596 0.784 -0.364 0.217 -0.468 -0.286 0.552 0.295 - 573.85 11.371 11.423 11.426 1.083 -0.267 -0.742 1.083 -0.267 0.198 -0.803 -0.289 0.897 0.438 - 573.90 11.646 11.710 11.711 1.223 -0.103 -0.467 1.223 -0.103 0.048 -0.571 -0.125 0.862 0.293 - 573.95 11.726 11.778 11.778 1.105 -0.089 -0.387 1.105 -0.089 0.034 -0.427 -0.098 0.689 0.220 - 574.00 11.727 11.790 11.790 1.212 0.088 -0.386 1.212 0.088 -0.034 -0.467 0.106 0.812 0.240 - 574.05 11.603 11.642 11.642 0.950 -0.042 -0.510 0.950 -0.042 0.021 -0.484 -0.040 0.582 0.243 - 574.10 11.851 11.893 11.893 0.999 0.040 -0.262 0.999 0.040 -0.011 -0.261 0.040 0.534 0.132 - 574.15 12.011 12.057 12.058 1.055 -0.136 -0.102 1.055 -0.136 0.014 -0.108 -0.143 0.571 0.090 - 574.20 11.916 11.970 11.977 1.138 -0.408 -0.197 1.138 -0.408 0.080 -0.224 -0.464 0.750 0.261 - 574.25 12.004 12.070 12.071 1.260 0.116 -0.109 1.260 0.116 -0.013 -0.137 0.147 0.806 0.100 - 574.30 12.130 12.217 12.220 1.457 -0.253 0.017 1.457 -0.253 -0.004 0.025 -0.369 1.094 0.185 - 574.35 11.970 12.025 12.032 1.151 -0.395 -0.143 1.151 -0.395 0.056 -0.164 -0.455 0.751 0.243 - 574.40 12.180 12.263 12.271 1.430 -0.416 0.067 1.430 -0.416 -0.028 0.096 -0.595 1.112 0.302 - 574.45 12.264 12.341 12.342 1.377 -0.105 0.151 1.377 -0.105 -0.016 0.208 -0.144 0.965 0.127 - 574.50 12.349 12.382 12.382 0.907 0.024 0.236 0.907 0.024 0.006 0.214 0.022 0.440 0.108 - 574.55 12.242 12.303 12.303 1.231 0.003 0.129 1.231 0.003 0.000 0.158 0.004 0.766 0.079 - 574.60 12.097 12.197 12.200 1.556 0.287 -0.016 1.556 0.287 -0.005 -0.025 0.447 1.251 0.224 - 574.65 12.254 12.335 12.336 1.406 0.178 0.141 1.406 0.178 0.025 0.199 0.250 1.014 0.160 - 574.70 12.278 12.355 12.355 1.371 -0.003 0.166 1.371 -0.003 -0.000 0.227 -0.004 0.954 0.114 - 574.75 12.552 12.639 12.639 1.479 -0.038 0.440 1.479 -0.038 -0.017 0.650 -0.056 1.191 0.326 - 574.80 12.555 12.605 12.609 1.122 -0.322 0.442 1.122 -0.322 -0.142 0.496 -0.362 0.779 0.315 - 574.85 12.799 12.818 12.827 0.692 -0.476 0.686 0.692 -0.476 -0.327 0.475 -0.330 0.589 0.332 - 574.90 12.659 12.680 12.689 0.728 -0.476 0.546 0.728 -0.476 -0.260 0.398 -0.347 0.528 0.294 - 574.95 12.205 12.216 12.219 0.524 -0.250 0.092 0.524 -0.250 -0.023 0.048 -0.131 0.173 0.071 - 575.00 12.083 12.096 12.096 0.572 -0.018 -0.030 0.572 -0.018 0.001 -0.017 -0.010 0.164 0.010 - 575.05 11.883 11.903 11.906 0.680 0.297 -0.230 0.680 0.297 -0.068 -0.156 0.202 0.302 0.132 - 575.10 11.870 11.883 11.883 0.572 0.009 -0.243 0.572 0.009 -0.002 -0.139 0.005 0.193 0.070 - 575.15 11.941 11.954 11.955 0.567 0.111 -0.172 0.567 0.111 -0.019 -0.097 0.063 0.181 0.059 - 575.20 12.071 12.071 12.071 0.065 0.057 -0.042 0.065 0.057 -0.002 -0.003 0.004 0.005 0.003 - 575.25 12.209 12.210 12.211 0.158 -0.179 0.096 0.158 -0.179 -0.017 0.015 -0.028 0.033 0.018 - 575.30 12.206 12.211 12.211 0.348 -0.008 0.093 0.348 -0.008 -0.001 0.032 -0.003 0.065 0.016 - 575.35 12.165 12.176 12.182 0.531 -0.379 0.052 0.531 -0.379 -0.020 0.027 -0.201 0.214 0.102 - 575.40 12.363 12.368 12.401 0.351 -0.916 0.250 0.351 -0.916 -0.229 0.088 -0.321 0.512 0.202 - 575.45 12.448 12.448 12.475 -0.132 -0.811 0.335 -0.132 -0.811 -0.272 -0.044 0.107 0.394 0.148 - 575.50 12.513 12.514 12.546 0.096 -0.896 0.401 0.096 -0.896 -0.359 0.039 -0.086 0.487 0.186 - 575.55 12.285 12.286 12.344 0.137 -1.196 0.172 0.137 -1.196 -0.206 0.024 -0.164 0.739 0.132 - 575.60 12.408 12.409 12.493 0.169 -1.444 0.295 0.169 -1.444 -0.426 0.050 -0.244 1.100 0.247 - 575.65 12.635 12.636 12.770 -0.144 -1.846 0.522 -0.144 -1.846 -0.964 -0.075 0.265 1.851 0.501 - 575.70 12.659 12.661 12.812 -0.216 -1.964 0.546 -0.216 -1.964 -1.073 -0.118 0.424 2.101 0.580 - 575.75 12.793 12.793 12.921 -0.132 -1.808 0.680 -0.132 -1.808 -1.230 -0.090 0.238 1.875 0.628 - 575.80 12.836 12.837 12.979 -0.155 -1.914 0.723 -0.155 -1.914 -1.385 -0.112 0.296 2.106 0.710 - 575.85 12.360 12.361 12.445 -0.136 -1.444 0.247 -0.136 -1.444 -0.357 -0.034 0.196 1.082 0.204 - 575.90 12.204 12.204 12.262 -0.067 -1.189 0.091 -0.067 -1.189 -0.108 -0.006 0.079 0.714 0.067 - 575.95 12.173 12.176 12.224 -0.262 -1.083 0.061 -0.262 -1.083 -0.066 -0.016 0.284 0.622 0.146 - 576.00 12.541 12.541 12.588 0.030 -1.085 0.428 0.030 -1.085 -0.464 0.013 -0.032 0.681 0.233 - 576.05 12.434 12.437 12.480 0.269 -1.033 0.322 0.269 -1.033 -0.332 0.086 -0.278 0.621 0.221 - 576.10 12.417 12.421 12.458 0.306 -0.963 0.304 0.306 -0.963 -0.293 0.093 -0.294 0.556 0.213 - 576.15 12.573 12.576 12.608 0.279 -0.887 0.461 0.279 -0.887 -0.409 0.129 -0.248 0.538 0.247 - 576.20 12.528 12.542 12.551 0.578 -0.484 0.416 0.578 -0.484 -0.201 0.240 -0.279 0.370 0.210 - 576.25 12.395 12.397 12.408 0.238 -0.520 0.282 0.238 -0.520 -0.146 0.067 -0.124 0.203 0.102 - 576.30 12.333 12.336 12.352 0.262 -0.643 0.220 0.262 -0.643 -0.141 0.058 -0.168 0.265 0.114 - 576.35 12.488 12.501 12.506 0.553 -0.372 0.375 0.553 -0.372 -0.140 0.208 -0.206 0.293 0.162 - 576.40 12.199 12.206 12.206 0.386 -0.018 0.087 0.386 -0.018 -0.002 0.033 -0.007 0.079 0.017 - 576.45 12.324 12.342 12.342 0.670 0.023 0.211 0.670 0.023 0.005 0.141 0.015 0.247 0.071 - 576.50 12.639 12.681 12.687 1.024 -0.401 0.526 1.024 -0.401 -0.211 0.539 -0.410 0.743 0.355 - 576.55 12.515 12.555 12.557 0.998 -0.250 0.402 0.998 -0.250 -0.101 0.401 -0.250 0.610 0.242 - 576.60 12.428 12.446 12.447 0.678 -0.116 0.315 0.678 -0.116 -0.037 0.214 -0.079 0.286 0.115 - 576.65 12.630 12.644 12.644 0.578 0.025 0.518 0.578 0.025 0.013 0.299 0.014 0.301 0.150 - 576.70 12.598 12.605 12.608 0.418 0.245 0.486 0.418 0.245 0.119 0.203 0.102 0.235 0.128 - 576.75 12.653 12.659 12.661 0.399 0.207 0.540 0.399 0.207 0.112 0.216 0.083 0.247 0.128 - 576.80 12.633 12.636 12.641 0.281 0.359 0.520 0.281 0.359 0.187 0.146 0.101 0.239 0.129 - 576.85 12.650 12.651 12.652 0.168 0.158 0.537 0.168 0.158 0.085 0.090 0.027 0.171 0.063 - 576.90 12.502 12.503 12.505 0.148 0.240 0.389 0.148 0.240 0.093 0.058 0.035 0.115 0.058 - 576.95 12.288 12.292 12.293 0.312 0.209 0.175 0.312 0.209 0.037 0.055 0.065 0.086 0.046 - 577.00 12.062 12.065 12.068 0.265 0.259 -0.051 0.265 0.259 -0.013 -0.014 0.069 0.070 0.036 - 577.05 12.083 12.083 12.086 0.004 0.271 -0.030 0.004 0.271 -0.008 -0.000 0.001 0.037 0.004 - 577.10 11.936 11.938 11.941 -0.181 0.266 -0.176 -0.181 0.266 -0.047 0.032 -0.048 0.067 0.037 - 577.15 12.063 12.066 12.066 0.276 0.050 -0.050 0.276 0.050 -0.002 -0.014 0.014 0.041 0.010 - 577.20 11.946 11.949 11.951 0.269 0.214 -0.167 0.269 0.214 -0.036 -0.045 0.058 0.073 0.041 - 577.25 12.279 12.279 12.283 -0.003 0.313 0.167 -0.003 0.313 0.052 -0.000 -0.001 0.063 0.026 - 577.30 12.412 12.412 12.412 -0.015 0.046 0.299 -0.015 0.046 0.014 -0.005 -0.001 0.046 0.007 - 577.35 12.235 12.236 12.236 -0.110 -0.003 0.122 -0.110 -0.003 -0.000 -0.013 0.000 0.014 0.007 - 577.40 12.237 12.237 12.241 0.015 0.304 0.124 0.015 0.304 0.038 0.002 0.005 0.054 0.019 - 577.45 12.668 12.673 12.678 0.369 0.335 0.555 0.369 0.335 0.186 0.205 0.123 0.278 0.151 - 577.50 12.817 12.825 12.825 0.452 -0.072 0.704 0.452 -0.072 -0.051 0.318 -0.033 0.352 0.162 - 577.55 12.696 12.702 12.703 0.397 0.200 0.583 0.397 0.200 0.117 0.231 0.079 0.269 0.135 - 577.60 12.599 12.601 12.601 0.187 -0.133 0.486 0.187 -0.133 -0.065 0.091 -0.025 0.145 0.057 - 577.65 12.517 12.527 12.528 0.502 -0.156 0.404 0.502 -0.156 -0.063 0.203 -0.078 0.220 0.113 - 577.70 12.319 12.319 12.320 0.034 0.174 0.206 0.034 0.174 0.036 0.007 0.006 0.037 0.019 - 577.75 12.333 12.333 12.334 0.117 -0.164 0.220 0.117 -0.164 -0.036 0.026 -0.019 0.044 0.024 - 577.80 12.635 12.648 12.648 0.582 -0.112 0.522 0.582 -0.112 -0.058 0.304 -0.065 0.312 0.158 - 577.85 12.668 12.677 12.677 0.475 0.102 0.555 0.475 0.102 0.057 0.264 0.049 0.272 0.137 - 577.90 12.883 12.886 12.888 0.267 0.260 0.770 0.267 0.260 0.200 0.206 0.069 0.366 0.148 - 577.95 12.872 12.872 12.873 0.057 -0.036 0.760 0.057 -0.036 -0.027 0.043 -0.002 0.291 0.026 - 578.00 12.971 12.971 12.971 -0.085 0.026 0.858 -0.085 0.026 0.022 -0.073 -0.002 0.372 0.038 - 578.05 12.922 12.926 12.926 0.295 0.035 0.810 0.295 0.035 0.029 0.239 0.010 0.372 0.120 - 578.10 12.845 12.849 12.850 0.327 0.184 0.732 0.327 0.184 0.135 0.239 0.060 0.338 0.141 - 578.15 12.747 12.756 12.782 0.469 0.816 0.635 0.469 0.816 0.518 0.298 0.383 0.645 0.355 - 578.20 12.559 12.569 12.593 0.501 0.778 0.447 0.501 0.778 0.347 0.224 0.390 0.528 0.284 - 578.25 11.916 11.921 11.951 0.342 0.850 -0.197 0.342 0.850 -0.168 -0.067 0.291 0.439 0.171 - 578.30 11.990 11.994 12.004 0.280 0.491 -0.123 0.280 0.491 -0.060 -0.034 0.137 0.167 0.077 - 578.35 12.053 12.055 12.069 0.216 0.578 -0.060 0.216 0.578 -0.035 -0.013 0.125 0.192 0.065 - 578.40 12.040 12.056 12.073 0.605 0.657 -0.072 0.605 0.657 -0.048 -0.044 0.397 0.401 0.201 - 578.45 12.237 12.247 12.263 0.474 0.639 0.125 0.474 0.639 0.080 0.059 0.303 0.324 0.159 - 578.50 12.055 12.066 12.093 0.515 0.811 -0.058 0.515 0.811 -0.047 -0.030 0.418 0.463 0.211 - 578.55 11.699 11.706 11.734 0.409 0.807 -0.414 0.409 0.807 -0.334 -0.169 0.330 0.495 0.250 - 578.60 11.606 11.629 11.653 0.721 0.748 -0.507 0.721 0.748 -0.379 -0.365 0.539 0.667 0.376 - 578.65 11.601 11.638 11.673 0.923 0.898 -0.512 0.923 0.898 -0.460 -0.472 0.829 0.960 0.530 - 578.70 11.678 11.781 11.817 1.557 0.909 -0.435 1.557 0.909 -0.395 -0.677 1.416 1.721 0.809 - 578.75 11.811 11.887 11.920 1.343 0.887 -0.302 1.343 0.887 -0.268 -0.405 1.191 1.341 0.643 - 578.80 11.799 11.849 11.876 1.084 0.799 -0.314 1.084 0.799 -0.251 -0.340 0.866 0.955 0.482 - 578.85 11.630 11.675 11.682 1.022 0.410 -0.483 1.022 0.410 -0.198 -0.493 0.419 0.723 0.339 - 578.90 11.978 12.016 12.035 0.945 0.689 -0.134 0.945 0.689 -0.093 -0.127 0.651 0.693 0.335 - 578.95 11.891 11.990 11.995 1.536 0.374 -0.222 1.536 0.374 -0.083 -0.341 0.575 1.274 0.337 - 579.00 12.013 12.091 12.091 1.371 -0.016 -0.100 1.371 -0.016 0.002 -0.137 -0.023 0.944 0.070 - 579.05 11.838 11.941 11.943 1.560 0.245 -0.274 1.560 0.245 -0.067 -0.428 0.383 1.285 0.289 - 579.10 11.944 12.021 12.022 1.358 -0.080 -0.168 1.358 -0.080 0.014 -0.229 -0.109 0.940 0.127 - 579.15 12.022 12.116 12.117 1.502 0.177 -0.090 1.502 0.177 -0.016 -0.136 0.266 1.148 0.150 - 579.20 11.871 11.965 11.968 1.499 0.261 -0.242 1.499 0.261 -0.063 -0.363 0.391 1.188 0.269 - 579.25 11.928 12.018 12.024 1.466 0.391 -0.185 1.466 0.391 -0.072 -0.271 0.573 1.168 0.319 - 579.30 12.042 12.090 12.090 1.072 0.029 -0.070 1.072 0.029 -0.002 -0.075 0.031 0.578 0.041 - 579.35 11.804 11.865 11.867 1.197 -0.241 -0.308 1.197 -0.241 0.074 -0.369 -0.289 0.793 0.237 - 579.40 11.620 11.674 11.694 1.120 -0.688 -0.493 1.120 -0.688 0.339 -0.552 -0.771 0.986 0.504 - 579.45 11.891 11.939 11.952 1.074 -0.555 -0.222 1.074 -0.555 0.123 -0.238 -0.597 0.756 0.327 - 579.50 12.117 12.174 12.178 1.181 -0.332 0.004 1.181 -0.332 -0.001 0.004 -0.392 0.753 0.196 - 579.55 12.191 12.270 12.277 1.389 -0.433 0.078 1.389 -0.433 -0.034 0.108 -0.601 1.061 0.306 - 579.60 12.387 12.458 12.462 1.330 -0.307 0.274 1.330 -0.307 -0.084 0.364 -0.409 0.969 0.277 - 579.65 12.129 12.169 12.170 0.991 -0.141 0.016 0.991 -0.141 -0.002 0.016 -0.140 0.501 0.070 - 579.70 11.828 11.910 11.910 1.401 0.075 -0.285 1.401 0.075 -0.021 -0.400 0.105 1.025 0.207 - 579.75 11.986 12.035 12.036 1.090 -0.080 -0.127 1.090 -0.080 0.010 -0.138 -0.087 0.605 0.082 - 579.80 11.853 11.889 11.889 0.926 -0.052 -0.260 0.926 -0.052 0.013 -0.241 -0.048 0.464 0.123 - 579.85 11.681 11.742 11.742 1.192 -0.069 -0.432 1.192 -0.069 0.030 -0.515 -0.082 0.806 0.261 - 579.90 11.746 11.785 11.787 0.955 0.215 -0.367 0.955 0.215 -0.079 -0.350 0.205 0.546 0.207 - 579.95 11.524 11.565 11.565 0.978 -0.038 -0.589 0.978 -0.038 0.022 -0.576 -0.037 0.653 0.289 - 580.00 11.987 12.008 12.013 0.709 -0.329 -0.125 0.709 -0.329 0.041 -0.089 -0.234 0.313 0.127 - 580.05 12.176 12.212 12.218 0.945 -0.387 0.063 0.945 -0.387 -0.024 0.059 -0.365 0.523 0.185 - 580.10 12.323 12.373 12.373 1.116 -0.006 0.210 1.116 -0.006 -0.001 0.234 -0.007 0.644 0.117 - 580.15 12.147 12.208 12.209 1.218 -0.153 0.034 1.218 -0.153 -0.005 0.042 -0.186 0.754 0.095 - 580.20 12.155 12.259 12.260 1.590 -0.160 0.043 1.590 -0.160 -0.007 0.068 -0.254 1.278 0.132 - 580.25 11.948 12.091 12.099 1.853 -0.447 -0.165 1.853 -0.447 0.074 -0.306 -0.828 1.831 0.443 - 580.30 12.088 12.190 12.196 1.573 -0.385 -0.025 1.573 -0.385 0.009 -0.039 -0.605 1.311 0.303 - 580.35 12.004 12.094 12.104 1.470 -0.496 -0.109 1.470 -0.496 0.054 -0.160 -0.729 1.209 0.374 - 580.40 12.233 12.315 12.324 1.423 -0.460 0.120 1.423 -0.460 -0.055 0.171 -0.654 1.125 0.339 - 580.45 12.336 12.423 12.429 1.462 -0.391 0.224 1.462 -0.391 -0.088 0.327 -0.572 1.171 0.332 - 580.50 12.242 12.329 12.343 1.462 -0.584 0.129 1.462 -0.584 -0.076 0.189 -0.854 1.248 0.439 - 580.55 12.079 12.145 12.151 1.262 -0.403 -0.034 1.262 -0.403 0.014 -0.043 -0.508 0.878 0.255 - 580.60 12.443 12.478 12.483 0.935 -0.351 0.330 0.935 -0.351 -0.116 0.308 -0.328 0.554 0.233 - 580.65 12.272 12.304 12.314 0.887 -0.504 0.159 0.887 -0.504 -0.080 0.141 -0.448 0.534 0.238 - 580.70 12.254 12.315 12.323 1.225 -0.450 0.141 1.225 -0.450 -0.064 0.173 -0.551 0.862 0.291 - 580.75 12.598 12.650 12.664 1.138 -0.601 0.485 1.138 -0.601 -0.292 0.552 -0.684 0.946 0.463 - 580.80 12.615 12.642 12.656 0.827 -0.590 0.502 0.827 -0.590 -0.296 0.415 -0.489 0.643 0.353 - 580.85 12.336 12.369 12.374 0.913 -0.329 0.223 0.913 -0.329 -0.073 0.203 -0.300 0.496 0.185 - 580.90 12.412 12.431 12.442 0.677 -0.537 0.300 0.677 -0.537 -0.161 0.203 -0.364 0.418 0.223 - 580.95 12.624 12.667 12.678 1.044 -0.509 0.511 1.044 -0.509 -0.260 0.534 -0.531 0.805 0.398 - 581.00 12.722 12.788 12.809 1.292 -0.727 0.610 1.292 -0.727 -0.443 0.788 -0.939 1.284 0.651 - 581.05 12.923 12.957 12.975 0.930 -0.686 0.811 0.930 -0.686 -0.556 0.754 -0.637 0.996 0.566 - 581.10 12.713 12.762 12.777 1.123 -0.612 0.600 1.123 -0.612 -0.367 0.673 -0.687 0.997 0.515 - 581.15 12.901 12.983 12.987 1.459 -0.340 0.788 1.459 -0.340 -0.268 1.149 -0.496 1.432 0.640 - 581.20 13.173 13.236 13.238 1.286 -0.260 1.060 1.286 -0.260 -0.276 1.364 -0.334 1.423 0.715 - 581.25 13.343 13.397 13.398 1.203 -0.157 1.230 1.203 -0.157 -0.194 1.480 -0.189 1.493 0.753 - 581.30 13.047 13.170 13.172 1.798 -0.225 0.934 1.798 -0.225 -0.210 1.679 -0.405 2.078 0.870 - 581.35 13.402 13.502 13.509 1.642 -0.404 1.289 1.642 -0.404 -0.521 2.117 -0.663 2.261 1.139 - 581.40 13.625 13.672 13.672 1.124 -0.062 1.513 1.124 -0.062 -0.094 1.700 -0.070 1.777 0.852 - 581.45 13.321 13.394 13.394 1.395 -0.066 1.208 1.395 -0.066 -0.079 1.686 -0.092 1.705 0.845 - 581.50 13.602 13.689 13.695 1.548 -0.403 1.489 1.548 -0.403 -0.599 2.305 -0.623 2.388 1.231 - 581.55 13.607 13.714 13.753 1.714 -1.035 1.494 1.714 -1.035 -1.547 2.560 -1.774 3.120 1.739 - 581.60 13.805 13.898 13.938 1.606 -1.052 1.693 1.606 -1.052 -1.780 2.718 -1.689 3.275 1.831 - 581.65 13.768 13.857 13.873 1.567 -0.665 1.656 1.567 -0.665 -1.101 2.595 -1.042 2.820 1.503 - 581.70 13.688 13.767 13.779 1.475 -0.579 1.575 1.475 -0.579 -0.911 2.323 -0.854 2.496 1.319 - 581.75 13.829 13.893 13.905 1.337 -0.578 1.716 1.337 -0.578 -0.992 2.294 -0.773 2.533 1.308 - 581.80 13.843 13.870 13.882 0.870 -0.565 1.730 0.870 -0.565 -0.977 1.506 -0.491 2.035 0.930 - 581.85 13.792 13.814 13.817 0.784 -0.259 1.679 0.784 -0.259 -0.436 1.317 -0.203 1.751 0.701 - 581.90 13.967 13.992 13.998 0.834 -0.412 1.854 0.834 -0.412 -0.765 1.546 -0.344 2.152 0.880 - 581.95 14.043 14.051 14.060 0.453 -0.503 1.930 0.453 -0.503 -0.972 0.874 -0.228 2.093 0.663 - 582.00 13.711 13.729 13.746 0.710 -0.675 1.598 0.710 -0.675 -1.079 1.135 -0.480 1.757 0.819 - 582.05 13.619 13.670 13.693 1.174 -0.795 1.506 1.174 -0.795 -1.198 1.768 -0.933 2.139 1.165 - 582.10 13.807 13.865 13.871 1.265 -0.416 1.694 1.265 -0.416 -0.705 2.142 -0.526 2.321 1.158 - 582.15 13.809 13.860 13.868 1.188 -0.474 1.697 1.188 -0.474 -0.805 2.016 -0.564 2.257 1.121 - 582.20 13.963 13.985 13.994 0.783 -0.499 1.850 0.783 -0.499 -0.923 1.449 -0.391 2.142 0.881 - 582.25 14.095 14.128 14.156 0.966 -0.888 1.983 0.966 -0.888 -1.760 1.915 -0.857 2.826 1.369 - 582.30 13.965 13.999 14.051 0.980 -1.211 1.852 0.980 -1.211 -2.243 1.814 -1.187 2.929 1.560 - 582.35 14.061 14.089 14.154 0.899 -1.352 1.948 0.899 -1.352 -2.634 1.752 -1.216 3.216 1.695 - 582.40 14.294 14.319 14.388 0.848 -1.408 2.181 0.848 -1.408 -3.071 1.850 -1.194 3.730 1.890 - 582.45 14.454 14.486 14.595 0.957 -1.782 2.341 0.957 -1.782 -4.171 2.241 -1.706 4.786 2.517 - 582.50 14.616 14.647 14.748 0.958 -1.715 2.503 0.958 -1.715 -4.293 2.399 -1.643 5.063 2.593 - 582.55 14.275 14.299 14.372 0.827 -1.452 2.162 0.827 -1.452 -3.139 1.789 -1.201 3.733 1.904 - 582.60 14.174 14.182 14.247 0.470 -1.362 2.061 0.470 -1.362 -2.808 0.970 -0.641 3.163 1.520 - 582.65 14.040 14.043 14.100 0.296 -1.262 1.927 0.296 -1.262 -2.432 0.570 -0.373 2.697 1.263 - 582.70 14.343 14.362 14.416 0.738 -1.252 2.230 0.738 -1.252 -2.792 1.646 -0.924 3.543 1.685 - 582.75 14.278 14.297 14.343 0.743 -1.146 2.165 0.743 -1.146 -2.481 1.609 -0.852 3.276 1.539 - 582.80 14.393 14.408 14.442 0.671 -0.980 2.280 0.671 -0.980 -2.234 1.530 -0.658 3.304 1.393 - 582.85 14.228 14.286 14.330 1.291 -1.113 2.115 1.291 -1.113 -2.354 2.731 -1.437 3.690 1.941 - 582.90 14.159 14.236 14.280 1.485 -1.112 2.046 1.485 -1.112 -2.275 3.038 -1.650 3.813 2.069 - 582.95 14.346 14.424 14.470 1.499 -1.148 2.233 1.499 -1.148 -2.563 3.348 -1.721 4.276 2.277 - 583.00 14.568 14.620 14.642 1.232 -0.800 2.455 1.232 -0.800 -1.963 3.025 -0.985 4.093 1.869 - 583.05 14.708 14.751 14.767 1.123 -0.687 2.595 1.123 -0.687 -1.783 2.914 -0.772 4.234 1.751 - 583.10 14.537 14.578 14.580 1.084 -0.248 2.424 1.084 -0.248 -0.600 2.629 -0.268 3.557 1.355 - 583.15 14.478 14.530 14.540 1.232 -0.528 2.365 1.232 -0.528 -1.248 2.913 -0.650 3.694 1.618 - 583.20 14.502 14.551 14.568 1.190 -0.708 2.389 1.190 -0.708 -1.692 2.842 -0.843 3.813 1.707 - 583.25 14.438 14.493 14.516 1.263 -0.817 2.325 1.263 -0.817 -1.900 2.937 -1.032 3.835 1.824 - 583.30 14.383 14.442 14.452 1.310 -0.526 2.270 1.310 -0.526 -1.194 2.974 -0.689 3.573 1.639 - 583.35 14.316 14.381 14.385 1.366 -0.296 2.204 1.366 -0.296 -0.653 3.010 -0.405 3.405 1.553 - 583.40 14.181 14.224 14.228 1.100 -0.353 2.068 1.100 -0.353 -0.731 2.275 -0.389 2.806 1.210 - 583.45 14.441 14.489 14.500 1.174 -0.565 2.329 1.174 -0.565 -1.317 2.733 -0.664 3.560 1.553 - 583.50 14.225 14.268 14.284 1.103 -0.672 2.113 1.103 -0.672 -1.420 2.330 -0.741 3.066 1.414 - 583.55 14.249 14.297 14.308 1.166 -0.567 2.137 1.166 -0.567 -1.211 2.491 -0.661 3.123 1.424 - 583.60 14.058 14.091 14.092 0.969 -0.113 1.945 0.969 -0.113 -0.219 1.885 -0.109 2.368 0.950 - 583.65 14.267 14.317 14.320 1.201 -0.266 2.154 1.201 -0.266 -0.574 2.587 -0.320 3.076 1.334 - 583.70 14.211 14.244 14.249 0.968 -0.377 2.098 0.968 -0.377 -0.792 2.031 -0.365 2.741 1.105 - 583.75 13.924 13.961 13.965 1.022 -0.300 1.811 1.022 -0.300 -0.543 1.850 -0.306 2.207 0.976 - 583.80 14.066 14.151 14.166 1.549 -0.636 1.953 1.549 -0.636 -1.242 3.025 -0.984 3.309 1.708 - 583.85 13.667 13.774 13.777 1.711 -0.302 1.554 1.711 -0.302 -0.469 2.660 -0.516 2.718 1.375 - 583.90 13.745 13.837 13.846 1.597 -0.509 1.632 1.597 -0.509 -0.830 2.606 -0.813 2.736 1.427 - 583.95 13.529 13.622 13.625 1.596 -0.262 1.416 1.596 -0.262 -0.371 2.259 -0.418 2.310 1.164 - 584.00 13.482 13.597 13.597 1.761 0.063 1.369 1.761 0.063 0.086 2.411 0.111 2.489 1.208 - 584.05 13.479 13.582 13.582 1.669 0.009 1.366 1.669 0.009 0.013 2.280 0.015 2.325 1.140 - 584.10 13.224 13.307 13.307 1.488 0.056 1.111 1.488 0.056 0.062 1.652 0.084 1.725 0.828 - 584.15 13.240 13.321 13.327 1.475 0.386 1.127 1.475 0.386 0.435 1.662 0.569 1.797 0.905 - 584.20 13.179 13.271 13.272 1.563 -0.099 1.066 1.563 -0.099 -0.106 1.667 -0.155 1.795 0.839 - 584.25 13.397 13.457 13.457 1.264 0.115 1.285 1.264 0.115 0.148 1.624 0.145 1.631 0.819 - 584.30 13.361 13.392 13.398 0.913 0.399 1.248 0.913 0.399 0.498 1.139 0.364 1.275 0.648 - 584.35 13.165 13.214 13.219 1.139 0.374 1.052 1.139 0.374 0.394 1.198 0.426 1.272 0.665 - 584.40 13.455 13.507 13.529 1.182 0.766 1.342 1.182 0.766 1.028 1.587 0.906 1.894 1.049 - 584.45 13.426 13.476 13.492 1.154 0.668 1.313 1.154 0.668 0.877 1.515 0.770 1.751 0.956 - 584.50 13.240 13.261 13.275 0.748 0.595 1.127 0.748 0.595 0.671 0.843 0.445 1.092 0.583 - 584.55 12.943 12.977 12.982 0.937 0.350 0.830 0.937 0.350 0.291 0.778 0.328 0.845 0.447 - 584.60 12.928 12.968 12.973 1.016 0.356 0.815 1.016 0.356 0.290 0.828 0.361 0.911 0.474 - 584.65 13.105 13.188 13.192 1.473 0.321 0.993 1.473 0.321 0.319 1.462 0.473 1.629 0.785 - 584.70 13.274 13.365 13.370 1.558 0.373 1.161 1.558 0.373 0.433 1.809 0.581 1.958 0.975 - 584.75 14.018 14.117 14.118 1.670 0.190 1.905 1.670 0.190 0.363 3.182 0.318 3.228 1.609 - 584.80 14.114 14.195 14.195 1.514 0.099 2.001 1.514 0.099 0.198 3.029 0.150 3.153 1.520 - 584.85 13.799 13.846 13.853 1.135 0.459 1.686 1.135 0.459 0.774 1.913 0.521 2.171 1.064 - 584.90 13.883 13.923 13.931 1.062 0.457 1.770 1.062 0.457 0.808 1.880 0.485 2.235 1.052 - 584.95 13.731 13.752 13.754 0.759 0.193 1.619 0.759 0.193 0.312 1.228 0.146 1.616 0.638 - 585.00 13.827 13.837 13.838 0.539 -0.124 1.714 0.539 -0.124 -0.213 0.923 -0.067 1.622 0.475 - 585.05 13.690 13.695 13.699 0.343 -0.337 1.578 0.343 -0.337 -0.532 0.541 -0.116 1.360 0.384 - 585.10 13.699 13.707 13.716 0.464 -0.515 1.586 0.464 -0.515 -0.816 0.736 -0.239 1.498 0.562 - 585.15 13.614 13.625 13.632 0.533 -0.451 1.502 0.533 -0.451 -0.677 0.800 -0.240 1.371 0.538 - 585.20 13.748 13.759 13.761 0.536 -0.233 1.636 0.536 -0.233 -0.381 0.877 -0.125 1.509 0.482 - 585.25 13.923 13.948 13.953 0.829 -0.398 1.810 0.829 -0.398 -0.721 1.500 -0.330 2.061 0.848 - 585.30 14.056 14.087 14.088 0.946 -0.129 1.943 0.946 -0.129 -0.250 1.837 -0.122 2.342 0.929 - 585.35 14.144 14.175 14.176 0.946 -0.140 2.031 0.946 -0.140 -0.285 1.922 -0.133 2.520 0.974 - 585.40 14.163 14.173 14.173 0.527 -0.101 2.050 0.527 -0.101 -0.208 1.081 -0.053 2.246 0.551 - 585.45 14.276 14.278 14.278 0.218 0.164 2.163 0.218 0.164 0.355 0.471 0.036 2.377 0.295 - 585.50 14.497 14.507 14.508 0.543 -0.147 2.384 0.543 -0.147 -0.350 1.294 -0.080 3.001 0.672 - 585.55 14.650 14.655 14.656 0.385 -0.149 2.537 0.385 -0.149 -0.378 0.977 -0.057 3.303 0.524 - 585.60 14.717 14.718 14.721 0.202 0.281 2.604 0.202 0.281 0.731 0.526 0.057 3.450 0.451 - 585.65 14.946 14.946 14.946 0.063 0.095 2.833 0.063 0.095 0.268 0.179 0.006 4.019 0.161 - 585.70 15.147 15.148 15.149 0.240 -0.084 3.034 0.240 -0.084 -0.255 0.728 -0.020 4.634 0.386 - 585.75 14.933 14.935 14.937 0.270 0.244 2.820 0.270 0.244 0.689 0.763 0.066 4.043 0.515 - 585.80 14.890 14.890 14.900 0.141 0.535 2.777 0.141 0.535 1.485 0.391 0.075 4.008 0.769 - 585.85 14.984 14.985 15.000 0.199 0.678 2.871 0.199 0.678 1.947 0.571 0.135 4.370 1.017 - 585.90 15.061 15.066 15.071 0.370 0.374 2.949 0.370 0.374 1.104 1.092 0.139 4.486 0.779 - 585.95 15.222 15.225 15.228 0.253 0.341 3.110 0.253 0.341 1.059 0.787 0.086 4.925 0.661 - 586.00 15.030 15.033 15.046 0.297 0.617 2.917 0.297 0.617 1.801 0.866 0.183 4.490 1.004 - 586.05 14.767 14.792 14.807 0.864 0.674 2.654 0.864 0.674 1.788 2.292 0.582 4.122 1.483 - 586.10 14.779 14.799 14.808 0.766 0.521 2.666 0.766 0.521 1.388 2.042 0.399 3.983 1.250 - 586.15 14.937 14.953 14.961 0.704 0.491 2.824 0.704 0.491 1.386 1.989 0.346 4.356 1.224 - 586.20 15.270 15.289 15.297 0.769 0.490 3.157 0.769 0.490 1.548 2.429 0.377 5.400 1.452 - 586.25 15.338 15.354 15.364 0.719 0.547 3.225 0.719 0.547 1.764 2.318 0.393 5.607 1.470 - 586.30 15.342 15.362 15.367 0.786 0.398 3.229 0.786 0.398 1.284 2.536 0.312 5.601 1.430 - 586.35 15.238 15.264 15.273 0.880 0.535 3.125 0.880 0.535 1.672 2.751 0.471 5.415 1.627 - 586.40 15.360 15.387 15.421 0.913 1.016 3.247 0.913 1.016 3.300 2.964 0.927 6.205 2.266 - 586.45 15.265 15.278 15.296 0.631 0.730 3.153 0.631 0.730 2.302 1.989 0.461 5.435 1.538 - 586.50 15.354 15.375 15.387 0.816 0.601 3.241 0.816 0.601 1.948 2.645 0.490 5.766 1.661 - 586.55 15.342 15.372 15.378 0.968 0.406 3.229 0.968 0.406 1.311 3.126 0.393 5.764 1.706 - 586.60 15.188 15.220 15.220 0.984 0.079 3.075 0.984 0.079 0.242 3.025 0.077 5.216 1.518 - 586.65 15.197 15.212 15.212 0.686 -0.085 3.084 0.686 -0.085 -0.263 2.115 -0.059 4.994 1.066 - 586.70 15.061 15.091 15.092 0.945 -0.146 2.949 0.945 -0.146 -0.430 2.786 -0.138 4.804 1.411 - 586.75 15.125 15.144 15.144 0.763 0.031 3.012 0.763 0.031 0.093 2.299 0.024 4.827 1.151 - 586.80 14.951 15.000 15.002 1.215 0.202 2.838 1.215 0.202 0.573 3.448 0.245 4.786 1.752 - 586.85 15.052 15.092 15.093 1.110 0.134 2.939 1.110 0.134 0.395 3.262 0.149 4.943 1.645 - 586.90 15.115 15.135 15.143 0.776 -0.481 3.002 0.776 -0.481 -1.443 2.329 -0.373 4.923 1.383 - 586.95 15.473 15.491 15.500 0.751 -0.544 3.360 0.751 -0.544 -1.828 2.522 -0.408 6.074 1.571 - 587.00 15.544 15.557 15.559 0.642 -0.216 3.431 0.642 -0.216 -0.741 2.204 -0.139 6.116 1.165 - 587.05 15.320 15.330 15.330 0.551 -0.033 3.207 0.551 -0.033 -0.105 1.767 -0.018 5.295 0.885 - 587.10 15.109 15.115 15.115 0.416 0.079 2.996 0.416 0.079 0.237 1.246 0.033 4.579 0.634 - 587.15 15.149 15.154 15.154 0.371 0.084 3.036 0.371 0.084 0.255 1.127 0.031 4.682 0.578 - 587.20 15.082 15.083 15.085 0.223 -0.201 2.969 0.223 -0.201 -0.596 0.662 -0.045 4.452 0.446 - 587.25 15.141 15.142 15.144 0.173 -0.293 3.028 0.173 -0.293 -0.888 0.524 -0.051 4.642 0.516 - 587.30 15.095 15.105 15.105 0.543 -0.020 2.982 0.543 -0.020 -0.060 1.619 -0.011 4.594 0.810 - 587.35 15.087 15.092 15.092 0.368 -0.037 2.974 0.368 -0.037 -0.110 1.095 -0.014 4.492 0.551 - 587.40 15.379 15.381 15.391 0.289 -0.544 3.266 0.289 -0.544 -1.775 0.944 -0.157 5.523 1.008 - 587.45 15.514 15.515 15.531 0.161 -0.697 3.402 0.161 -0.697 -2.372 0.546 -0.112 6.041 1.219 - 587.50 15.272 15.290 15.311 0.725 -0.814 3.160 0.725 -0.814 -2.572 2.292 -0.591 5.586 1.748 - 587.55 15.641 15.650 15.680 0.529 -0.964 3.528 0.529 -0.964 -3.401 1.868 -0.510 6.829 1.957 - 587.60 15.569 15.579 15.591 0.560 -0.629 3.456 0.560 -0.629 -2.174 1.935 -0.352 6.326 1.466 - 587.65 15.268 15.292 15.312 0.847 -0.793 3.155 0.847 -0.793 -2.502 2.674 -0.672 5.652 1.862 - 587.70 15.322 15.336 15.353 0.640 -0.728 3.209 0.640 -0.728 -2.335 2.056 -0.466 5.620 1.573 - 587.75 15.430 15.454 15.484 0.866 -0.955 3.317 0.866 -0.955 -3.167 2.872 -0.826 6.332 2.177 - 587.80 15.484 15.516 15.527 1.005 -0.585 3.371 1.005 -0.585 -1.971 3.388 -0.588 6.357 1.982 - 587.85 15.754 15.786 15.807 0.998 -0.814 3.641 0.998 -0.814 -2.964 3.635 -0.812 7.459 2.380 - 587.90 15.801 15.830 15.850 0.970 -0.793 3.688 0.970 -0.793 -2.926 3.576 -0.769 7.585 2.342 - 587.95 15.752 15.773 15.794 0.816 -0.823 3.639 0.816 -0.823 -2.993 2.969 -0.671 7.292 2.135 - 588.00 15.587 15.591 15.621 0.353 -0.967 3.475 0.353 -0.967 -3.360 1.225 -0.341 6.566 1.796 - 588.05 15.476 15.480 15.516 0.363 -1.055 3.363 0.363 -1.055 -3.547 1.220 -0.383 6.277 1.885 - 588.10 15.275 15.279 15.307 0.387 -0.917 3.162 0.387 -0.917 -2.901 1.224 -0.355 5.494 1.584 - 588.15 15.587 15.600 15.641 0.636 -1.128 3.475 0.636 -1.128 -3.920 2.210 -0.718 6.875 2.279 - 588.20 15.526 15.547 15.577 0.797 -0.970 3.413 0.797 -0.970 -3.310 2.722 -0.773 6.614 2.177 - 588.25 15.322 15.338 15.372 0.706 -1.026 3.209 0.706 -1.026 -3.293 2.267 -0.725 5.925 2.032 - 588.30 15.388 15.394 15.433 0.416 -1.101 3.275 0.416 -1.101 -3.607 1.363 -0.458 6.057 1.941 - 588.35 15.241 15.241 15.319 -0.082 -1.542 3.128 -0.082 -1.542 -4.825 -0.256 0.126 6.085 2.416 - 588.40 15.169 15.170 15.240 -0.203 -1.462 3.056 -0.203 -1.462 -4.466 -0.621 0.297 5.758 2.259 - 588.45 15.113 15.113 15.153 0.032 -1.099 3.000 0.032 -1.099 -3.296 0.096 -0.035 5.104 1.649 - 588.50 15.195 15.195 15.242 0.070 -1.194 3.083 0.070 -1.194 -3.680 0.216 -0.084 5.466 1.844 - 588.55 15.461 15.461 15.522 0.141 -1.376 3.348 0.141 -1.376 -4.606 0.474 -0.195 6.561 2.317 - 588.60 15.229 15.229 15.316 0.151 -1.623 3.116 0.151 -1.623 -5.057 0.471 -0.245 6.183 2.542 - 588.65 15.083 15.085 15.139 -0.221 -1.281 2.971 -0.221 -1.281 -3.805 -0.658 0.284 5.257 1.936 - 588.70 14.983 14.986 15.034 -0.329 -1.195 2.870 -0.329 -1.195 -3.430 -0.943 0.393 4.887 1.790 - 588.75 14.984 14.984 15.051 -0.145 -1.417 2.871 -0.145 -1.417 -4.069 -0.417 0.206 5.135 2.048 - 588.80 15.401 15.403 15.444 -0.226 -1.125 3.288 -0.226 -1.125 -3.700 -0.743 0.254 6.065 1.891 - 588.85 15.300 15.304 15.327 -0.340 -0.849 3.187 -0.340 -0.849 -2.707 -1.084 0.289 5.498 1.465 - 588.90 15.326 15.338 15.374 -0.586 -1.052 3.214 -0.586 -1.052 -3.379 -1.885 0.617 5.889 1.959 - 588.95 15.531 15.553 15.597 -0.822 -1.173 3.418 -0.822 -1.173 -4.008 -2.811 0.964 6.868 2.495 - 589.00 15.367 15.398 15.444 -0.971 -1.193 3.255 -0.971 -1.193 -3.883 -3.159 1.158 6.479 2.569 - 589.05 15.263 15.285 15.314 -0.828 -0.934 3.150 -0.828 -0.934 -2.941 -2.608 0.773 5.740 2.003 - 589.10 15.392 15.409 15.442 -0.737 -1.008 3.279 -0.737 -1.008 -3.305 -2.417 0.743 6.155 2.081 - 589.15 15.629 15.631 15.662 -0.257 -0.977 3.517 -0.257 -0.977 -3.437 -0.903 0.251 6.694 1.781 - 589.20 15.785 15.785 15.820 0.098 -1.053 3.672 0.098 -1.053 -3.865 0.361 -0.104 7.301 1.942 - 589.25 15.466 15.467 15.491 0.123 -0.870 3.354 0.123 -0.870 -2.917 0.411 -0.107 6.010 1.474 - 589.30 15.603 15.606 15.640 0.326 -1.032 3.490 0.326 -1.032 -3.601 1.139 -0.337 6.676 1.896 - 589.35 15.805 15.811 15.828 0.465 -0.731 3.692 0.465 -0.731 -2.697 1.717 -0.340 7.190 1.608 - 589.40 15.723 15.726 15.770 0.310 -1.181 3.610 0.310 -1.181 -4.264 1.121 -0.367 7.262 2.212 - 589.45 15.711 15.725 15.790 0.667 -1.426 3.598 0.667 -1.426 -5.132 2.400 -0.952 7.713 2.873 - 589.50 15.287 15.293 15.358 0.439 -1.405 3.174 0.439 -1.405 -4.458 1.394 -0.617 6.120 2.356 - 589.55 15.501 15.503 15.561 0.247 -1.341 3.388 0.247 -1.341 -4.544 0.836 -0.331 6.670 2.316 - 589.60 15.233 15.233 15.269 0.076 -1.045 3.120 0.076 -1.045 -3.261 0.239 -0.080 5.417 1.636 - 589.65 15.557 15.561 15.607 -0.310 -1.205 3.445 -0.310 -1.205 -4.150 -1.070 0.374 6.707 2.151 - 589.70 15.415 15.416 15.462 -0.183 -1.188 3.302 -0.183 -1.188 -3.922 -0.605 0.218 6.175 1.987 - 589.75 15.032 15.034 15.061 -0.282 -0.901 2.919 -0.282 -0.901 -2.630 -0.823 0.254 4.706 1.384 - 589.80 15.441 15.441 15.485 -0.132 -1.159 3.328 -0.132 -1.159 -3.856 -0.440 0.153 6.218 1.942 - 589.85 15.752 15.752 15.795 0.034 -1.177 3.639 0.034 -1.177 -4.282 0.123 -0.040 7.313 2.142 - 589.90 15.506 15.508 15.529 0.234 -0.808 3.393 0.234 -0.808 -2.741 0.795 -0.189 6.111 1.430 - 589.95 15.676 15.681 15.699 0.414 -0.739 3.563 0.414 -0.739 -2.635 1.476 -0.306 6.707 1.518 - 590.00 15.692 15.702 15.729 0.554 -0.928 3.579 0.554 -0.928 -3.323 1.984 -0.514 6.990 1.952 - 590.05 15.593 15.595 15.644 0.271 -1.231 3.480 0.271 -1.231 -4.283 0.943 -0.333 6.850 2.199 - 590.10 15.566 15.567 15.610 0.184 -1.152 3.453 0.184 -1.152 -3.977 0.634 -0.211 6.643 2.017 - 590.15 15.629 15.630 15.661 -0.129 -0.988 3.516 -0.129 -0.988 -3.473 -0.454 0.128 6.679 1.752 - 590.20 15.377 15.377 15.440 -0.003 -1.401 3.264 -0.003 -1.401 -4.573 -0.010 0.004 6.308 2.286 - 590.25 15.602 15.603 15.659 0.117 -1.332 3.489 0.117 -1.332 -4.646 0.407 -0.155 6.981 2.333 - 590.30 15.591 15.592 15.637 0.145 -1.190 3.478 0.145 -1.190 -4.138 0.505 -0.173 6.768 2.086 - 590.35 15.334 15.334 15.374 -0.109 -1.114 3.221 -0.109 -1.114 -3.588 -0.351 0.122 5.813 1.804 - 590.40 15.425 15.425 15.461 0.054 -1.050 3.312 0.054 -1.050 -3.477 0.180 -0.057 6.038 1.741 - 590.45 15.313 15.313 15.357 -0.021 -1.163 3.200 -0.021 -1.163 -3.721 -0.069 0.025 5.796 1.861 - 590.50 15.413 15.413 15.496 -0.061 -1.599 3.300 -0.061 -1.599 -5.276 -0.202 0.098 6.725 2.641 - 590.55 15.643 15.643 15.763 0.060 -1.941 3.530 0.060 -1.941 -6.850 0.213 -0.117 8.115 3.427 - 590.60 15.459 15.464 15.541 0.354 -1.555 3.347 0.354 -1.555 -5.203 1.183 -0.550 6.871 2.682 - 590.65 15.517 15.522 15.600 0.397 -1.562 3.404 0.397 -1.562 -5.317 1.353 -0.621 7.093 2.761 - 590.70 15.541 15.543 15.647 0.270 -1.801 3.428 0.270 -1.801 -6.173 0.924 -0.486 7.533 3.130 - 590.75 15.653 15.655 15.754 0.255 -1.765 3.540 0.255 -1.765 -6.249 0.902 -0.450 7.857 3.165 - 590.80 15.732 15.741 15.837 0.534 -1.737 3.620 0.534 -1.737 -6.289 1.932 -0.928 8.203 3.322 - 590.85 15.111 15.111 15.163 0.080 -1.246 2.998 0.080 -1.246 -3.737 0.240 -0.100 5.275 1.873 - 590.90 14.979 14.979 15.030 -0.042 -1.231 2.866 -0.042 -1.231 -3.528 -0.121 0.052 4.866 1.765 - 590.95 14.944 14.946 15.027 0.208 -1.559 2.831 0.208 -1.559 -4.414 0.588 -0.324 5.245 2.232 - 591.00 15.011 15.036 15.141 0.856 -1.779 2.899 0.856 -1.779 -5.155 2.482 -1.523 6.149 2.960 - 591.05 14.927 14.951 15.052 0.847 -1.739 2.814 0.847 -1.739 -4.895 2.384 -1.473 5.832 2.820 - 591.10 14.918 14.931 14.984 0.628 -1.256 2.805 0.628 -1.256 -3.522 1.762 -0.789 4.919 2.008 - 591.15 14.740 14.750 14.782 0.533 -0.976 2.627 0.533 -0.976 -2.564 1.400 -0.520 4.070 1.484 - 591.20 15.054 15.057 15.077 0.292 -0.782 2.941 0.292 -0.782 -2.301 0.859 -0.229 4.675 1.234 - 591.25 15.120 15.123 15.140 0.300 -0.717 3.007 0.300 -0.717 -2.157 0.902 -0.215 4.824 1.174 - 591.30 15.190 15.194 15.205 0.322 -0.575 3.078 0.322 -0.575 -1.771 0.990 -0.185 4.953 1.019 - 591.35 15.389 15.395 15.408 0.448 -0.616 3.276 0.448 -0.616 -2.019 1.467 -0.276 5.657 1.256 - 591.40 15.653 15.663 15.683 0.553 -0.795 3.540 0.553 -0.795 -2.813 1.959 -0.440 6.736 1.728 - 591.45 15.461 15.489 15.500 0.941 -0.593 3.348 0.941 -0.593 -1.984 3.149 -0.557 6.222 1.882 - 591.50 15.482 15.499 15.523 0.737 -0.848 3.369 0.737 -0.848 -2.858 2.484 -0.625 6.307 1.919 - 591.55 15.190 15.215 15.217 0.873 -0.251 3.077 0.873 -0.251 -0.772 2.686 -0.219 5.148 1.402 - 591.60 15.483 15.497 15.497 0.655 -0.170 3.370 0.655 -0.170 -0.574 2.207 -0.112 5.907 1.142 - 591.65 15.430 15.441 15.448 0.601 -0.442 3.317 0.601 -0.442 -1.466 1.994 -0.266 5.779 1.245 - 591.70 15.108 15.120 15.139 0.597 -0.749 2.996 0.597 -0.749 -2.243 1.789 -0.447 4.945 1.452 - 591.75 15.466 15.475 15.490 0.536 -0.669 3.353 0.536 -0.669 -2.244 1.796 -0.359 5.990 1.448 - 591.80 15.317 15.329 15.329 0.594 -0.157 3.204 0.594 -0.157 -0.502 1.902 -0.093 5.322 0.985 - 591.85 15.080 15.119 15.119 1.077 -0.110 2.968 1.077 -0.110 -0.326 3.195 -0.118 4.989 1.607 - 591.90 14.995 15.058 15.058 1.377 0.015 2.882 1.377 0.015 0.044 3.970 0.021 5.102 1.985 - 591.95 15.168 15.250 15.250 1.571 0.152 3.056 1.571 0.152 0.465 4.800 0.239 5.914 2.414 - 592.00 15.121 15.206 15.207 1.603 0.214 3.008 1.603 0.214 0.645 4.822 0.344 5.832 2.439 - 592.05 14.972 15.068 15.069 1.698 0.168 2.859 1.698 0.168 0.480 4.856 0.285 5.544 2.444 - 592.10 15.196 15.304 15.304 1.815 -0.095 3.083 1.815 -0.095 -0.292 5.595 -0.172 6.404 2.803 - 592.15 14.878 14.950 14.951 1.473 -0.140 2.765 1.473 -0.140 -0.387 4.073 -0.206 4.917 2.048 - 592.20 14.683 14.755 14.759 1.462 -0.346 2.570 1.462 -0.346 -0.889 3.757 -0.505 4.431 1.947 - 592.25 14.666 14.727 14.728 1.340 -0.124 2.553 1.340 -0.124 -0.315 3.422 -0.166 4.166 1.720 - 592.30 14.755 14.839 14.841 1.581 -0.218 2.642 1.581 -0.218 -0.576 4.177 -0.345 4.764 2.116 - 592.35 14.807 14.882 14.890 1.490 -0.496 2.695 1.490 -0.496 -1.335 4.015 -0.738 4.863 2.148 - 592.40 14.683 14.734 14.737 1.218 -0.297 2.570 1.218 -0.297 -0.764 3.132 -0.362 4.090 1.622 - 592.45 14.480 14.540 14.541 1.321 -0.143 2.367 1.321 -0.143 -0.338 3.128 -0.189 3.685 1.576 - 592.50 14.664 14.730 14.731 1.398 -0.169 2.551 1.398 -0.169 -0.430 3.566 -0.236 4.245 1.800 - 592.55 14.510 14.581 14.582 1.433 -0.168 2.397 1.433 -0.168 -0.404 3.437 -0.241 3.915 1.734 - 592.60 14.347 14.417 14.418 1.428 0.044 2.234 1.428 0.044 0.099 3.189 0.063 3.515 1.595 - 592.65 14.276 14.375 14.381 1.682 -0.417 2.163 1.682 -0.417 -0.902 3.639 -0.702 3.842 1.907 - 592.70 14.447 14.502 14.507 1.267 -0.367 2.334 1.267 -0.367 -0.857 2.958 -0.465 3.594 1.557 - 592.75 14.183 14.215 14.219 0.946 -0.321 2.071 0.946 -0.321 -0.664 1.960 -0.303 2.643 1.046 - 592.80 13.904 13.948 13.954 1.114 -0.398 1.791 1.114 -0.398 -0.713 1.995 -0.443 2.303 1.082 - 592.85 13.841 13.870 13.880 0.900 -0.519 1.728 0.900 -0.519 -0.896 1.555 -0.467 2.033 0.927 - 592.90 13.811 13.842 13.850 0.927 -0.447 1.698 0.927 -0.447 -0.760 1.575 -0.415 1.972 0.899 - 592.95 14.436 14.448 14.462 0.582 -0.641 2.323 0.582 -0.641 -1.489 1.353 -0.373 3.074 1.023 - 593.00 14.530 14.533 14.541 0.257 -0.493 2.418 0.257 -0.493 -1.193 0.621 -0.127 3.077 0.675 - 593.05 14.222 14.224 14.224 0.189 0.012 2.110 0.189 0.012 0.025 0.398 0.002 2.243 0.200 - 593.10 14.465 14.468 14.468 0.283 0.051 2.352 0.283 0.051 0.120 0.666 0.014 2.808 0.339 - 593.15 14.183 14.184 14.184 0.135 -0.054 2.071 0.135 -0.054 -0.112 0.279 -0.007 2.154 0.150 - 593.20 14.318 14.318 14.319 0.039 0.189 2.205 0.039 0.189 0.416 0.087 0.007 2.449 0.213 - 593.25 14.150 14.151 14.158 0.101 0.454 2.038 0.101 0.454 0.925 0.206 0.046 2.184 0.474 - 593.30 14.141 14.141 14.141 0.113 -0.026 2.028 0.113 -0.026 -0.053 0.229 -0.003 2.063 0.117 - 593.35 13.919 13.919 13.919 -0.027 -0.061 1.807 -0.027 -0.061 -0.111 -0.048 0.002 1.634 0.060 - 593.40 14.281 14.281 14.282 -0.043 -0.037 2.169 -0.043 -0.037 -0.080 -0.094 0.002 2.353 0.061 - 593.45 13.956 13.958 13.958 -0.252 -0.047 1.843 -0.252 -0.047 -0.087 -0.465 0.012 1.731 0.237 - 593.50 14.194 14.215 14.215 -0.781 -0.059 2.081 -0.781 -0.059 -0.123 -1.625 0.046 2.472 0.815 - 593.55 14.225 14.257 14.259 -0.965 -0.183 2.112 -0.965 -0.183 -0.387 -2.038 0.177 2.712 1.041 - 593.60 14.223 14.233 14.238 -0.544 -0.361 2.110 -0.544 -0.361 -0.761 -1.147 0.196 2.439 0.695 - 593.65 14.280 14.289 14.298 -0.498 -0.531 2.167 -0.498 -0.531 -1.150 -1.079 0.264 2.613 0.800 - 593.70 14.422 14.435 14.461 -0.607 -0.873 2.309 -0.607 -0.873 -2.015 -1.403 0.530 3.231 1.256 - 593.75 14.357 14.359 14.377 -0.199 -0.715 2.245 -0.199 -0.715 -1.606 -0.447 0.142 2.795 0.836 - 593.80 14.552 14.555 14.576 -0.295 -0.779 2.440 -0.295 -0.779 -1.900 -0.720 0.230 3.323 1.022 - 593.85 14.545 14.555 14.568 -0.547 -0.601 2.432 -0.547 -0.601 -1.463 -1.331 0.329 3.288 1.002 - 593.90 14.425 14.434 14.458 -0.536 -0.830 2.312 -0.536 -0.830 -1.920 -1.239 0.445 3.160 1.164 - 593.95 14.676 14.680 14.706 -0.342 -0.877 2.563 -0.342 -0.877 -2.248 -0.876 0.300 3.728 1.216 - 594.00 14.581 14.586 14.619 -0.403 -0.977 2.468 -0.403 -0.977 -2.412 -0.995 0.394 3.604 1.320 - 594.05 14.356 14.365 14.384 -0.506 -0.749 2.243 -0.506 -0.749 -1.681 -1.135 0.379 2.924 1.032 - 594.10 14.286 14.298 14.317 -0.586 -0.731 2.173 -0.586 -0.731 -1.590 -1.274 0.429 2.801 1.041 - 594.15 14.254 14.261 14.280 -0.469 -0.724 2.141 -0.469 -0.724 -1.551 -1.005 0.340 2.664 0.940 - 594.20 14.179 14.189 14.203 -0.527 -0.621 2.066 -0.527 -0.621 -1.284 -1.089 0.328 2.467 0.858 - 594.25 14.073 14.087 14.092 -0.619 -0.372 1.961 -0.619 -0.372 -0.729 -1.214 0.230 2.183 0.717 - 594.30 14.099 14.113 14.117 -0.632 -0.358 1.986 -0.632 -0.358 -0.711 -1.256 0.227 2.236 0.730 - 594.35 14.189 14.196 14.201 -0.417 -0.411 2.077 -0.417 -0.411 -0.853 -0.867 0.172 2.328 0.614 - 594.40 14.287 14.287 14.303 -0.023 -0.664 2.174 -0.023 -0.664 -1.443 -0.050 0.015 2.584 0.722 - 594.45 14.232 14.235 14.243 -0.264 -0.481 2.119 -0.264 -0.481 -1.019 -0.560 0.127 2.396 0.585 - 594.50 13.878 13.886 13.920 -0.473 -0.976 1.765 -0.473 -0.976 -1.722 -0.835 0.462 2.146 0.984 - 594.55 14.014 14.015 14.073 -0.211 -1.277 1.901 -0.211 -1.277 -2.427 -0.400 0.269 2.644 1.237 - 594.60 14.448 14.453 14.541 -0.389 -1.597 2.335 -0.389 -1.597 -3.729 -0.908 0.621 4.077 1.944 - 594.65 14.580 14.580 14.706 -0.112 -1.920 2.467 -0.112 -1.920 -4.737 -0.276 0.215 4.892 2.375 - 594.70 14.686 14.687 14.838 0.199 -2.109 2.573 0.199 -2.109 -5.427 0.511 -0.419 5.554 2.733 - 594.75 14.498 14.502 14.702 0.336 -2.419 2.385 0.336 -2.419 -5.771 0.801 -0.812 5.828 2.941 - 594.80 14.508 14.516 14.736 0.480 -2.535 2.396 0.480 -2.535 -6.072 1.149 -1.216 6.196 3.149 - 594.85 14.298 14.310 14.460 0.600 -2.076 2.185 0.600 -2.076 -4.536 1.311 -1.246 4.722 2.441 - 594.90 14.249 14.250 14.399 0.204 -2.063 2.136 0.204 -2.063 -4.406 0.436 -0.421 4.430 2.224 - 594.95 13.883 13.889 14.057 0.396 -2.166 1.771 0.396 -2.166 -3.834 0.701 -0.857 3.991 1.995 - 595.00 13.795 13.801 13.927 0.381 -1.871 1.683 0.381 -1.871 -3.149 0.640 -0.712 3.239 1.646 - 595.05 13.543 13.543 13.691 -0.082 -2.009 1.430 -0.082 -2.009 -2.873 -0.118 0.165 3.043 1.440 - 595.10 13.559 13.559 13.724 0.032 -2.124 1.446 0.032 -2.124 -3.071 0.046 -0.068 3.301 1.536 - 595.15 13.656 13.658 13.807 0.183 -2.023 1.544 0.183 -2.023 -3.123 0.282 -0.370 3.255 1.579 - 595.20 13.559 13.564 13.712 0.351 -2.008 1.446 0.351 -2.008 -2.904 0.508 -0.706 3.124 1.516 - 595.25 13.642 13.642 13.713 -0.087 -1.397 1.529 -0.087 -1.397 -2.135 -0.132 0.121 2.148 1.071 - 595.30 13.684 13.684 13.740 -0.089 -1.235 1.571 -0.089 -1.235 -1.940 -0.140 0.110 2.001 0.974 - 595.35 13.884 13.884 13.936 -0.017 -1.201 1.771 -0.017 -1.201 -2.128 -0.031 0.021 2.290 1.064 - 595.40 13.853 13.858 13.906 0.361 -1.165 1.740 0.361 -1.165 -2.027 0.629 -0.421 2.257 1.082 - 595.45 13.465 13.468 13.499 0.300 -0.918 1.352 0.300 -0.918 -1.242 0.406 -0.276 1.381 0.668 - 595.50 13.788 13.789 13.866 0.077 -1.460 1.676 0.077 -1.460 -2.447 0.129 -0.112 2.473 1.226 - 595.55 14.072 14.073 14.212 0.088 -1.981 1.960 0.088 -1.981 -3.882 0.173 -0.175 3.886 1.945 - 595.60 13.719 13.722 13.852 0.275 -1.893 1.607 0.275 -1.893 -3.041 0.442 -0.521 3.120 1.559 - 595.65 13.707 13.721 13.845 0.617 -1.849 1.595 0.617 -1.849 -2.948 0.983 -1.140 3.171 1.655 - 595.70 13.639 13.651 13.723 0.560 -1.407 1.527 0.560 -1.407 -2.148 0.855 -0.788 2.312 1.221 - 595.75 13.452 13.455 13.490 0.300 -0.965 1.339 0.300 -0.965 -1.293 0.402 -0.290 1.408 0.692 - 595.80 13.090 13.094 13.107 0.322 -0.581 0.977 0.322 -0.581 -0.568 0.315 -0.187 0.698 0.338 - 595.85 13.167 13.169 13.180 0.228 -0.531 1.055 0.228 -0.531 -0.560 0.240 -0.121 0.723 0.310 - 595.90 13.088 13.091 13.101 0.256 -0.507 0.976 0.256 -0.507 -0.494 0.249 -0.130 0.637 0.284 - 595.95 13.055 13.061 13.072 0.405 -0.536 0.942 0.405 -0.536 -0.505 0.381 -0.217 0.670 0.335 - 596.00 12.746 12.750 12.766 0.319 -0.635 0.633 0.319 -0.635 -0.402 0.202 -0.203 0.453 0.247 - 596.05 12.777 12.780 12.796 0.287 -0.637 0.664 0.287 -0.637 -0.423 0.190 -0.183 0.464 0.249 - 596.10 13.030 13.032 13.064 0.218 -0.916 0.917 0.218 -0.916 -0.840 0.200 -0.200 0.864 0.443 - 596.15 12.882 12.883 12.913 0.095 -0.885 0.770 0.095 -0.885 -0.681 0.073 -0.084 0.692 0.345 - 596.20 13.074 13.074 13.102 -0.009 -0.853 0.961 -0.009 -0.853 -0.820 -0.009 0.008 0.826 0.410 - 596.25 13.081 13.083 13.130 0.178 -1.114 0.969 0.178 -1.114 -1.079 0.173 -0.199 1.106 0.555 - 596.30 13.108 13.114 13.163 0.407 -1.129 0.995 0.407 -1.129 -1.123 0.405 -0.460 1.215 0.640 - 596.35 13.148 13.172 13.206 0.783 -0.956 1.036 0.783 -0.956 -0.990 0.811 -0.748 1.299 0.741 - 596.40 13.117 13.137 13.177 0.731 -1.026 1.004 0.731 -1.026 -1.030 0.734 -0.750 1.297 0.735 - 596.45 13.406 13.441 13.470 0.963 -0.881 1.294 0.963 -0.881 -1.139 1.246 -0.848 1.688 0.945 - 596.50 13.557 13.600 13.621 1.079 -0.763 1.444 1.079 -0.763 -1.101 1.559 -0.823 1.916 1.039 - 596.55 13.733 13.775 13.821 1.082 -1.123 1.620 1.082 -1.123 -1.819 1.754 -1.215 2.528 1.402 - 596.60 13.643 13.674 13.727 0.908 -1.205 1.531 0.908 -1.205 -1.845 1.390 -1.095 2.310 1.278 - 596.65 13.605 13.652 13.739 1.132 -1.540 1.493 1.132 -1.540 -2.299 1.689 -1.743 2.941 1.672 - 596.70 13.455 13.484 13.565 0.888 -1.481 1.342 0.888 -1.481 -1.988 1.192 -1.316 2.393 1.333 - 596.75 13.662 13.681 13.790 0.730 -1.727 1.549 0.730 -1.727 -2.674 1.130 -1.260 2.956 1.582 - 596.80 13.459 13.483 13.596 0.802 -1.752 1.346 0.802 -1.752 -2.359 1.080 -1.405 2.762 1.475 - 596.85 13.491 13.528 13.619 0.999 -1.575 1.378 0.999 -1.575 -2.170 1.377 -1.573 2.688 1.507 - 596.90 13.449 13.487 13.536 1.009 -1.160 1.336 1.009 -1.160 -1.550 1.349 -1.172 2.075 1.183 - 596.95 13.329 13.346 13.368 0.671 -0.761 1.217 0.671 -0.761 -0.926 0.816 -0.511 1.255 0.668 - 597.00 13.379 13.382 13.396 0.290 -0.607 1.266 0.290 -0.607 -0.768 0.367 -0.176 1.028 0.435 - 597.05 13.701 13.709 13.725 0.476 -0.673 1.588 0.476 -0.673 -1.069 0.756 -0.321 1.600 0.674 - 597.10 13.657 13.657 13.674 -0.125 -0.671 1.544 -0.125 -0.671 -1.036 -0.192 0.084 1.425 0.529 - 597.15 13.692 13.692 13.715 0.025 -0.801 1.579 0.025 -0.801 -1.264 0.039 -0.020 1.567 0.633 - 597.20 13.748 13.751 13.780 0.280 -0.886 1.636 0.280 -0.886 -1.449 0.458 -0.248 1.769 0.770 - 597.25 13.619 13.619 13.632 0.064 -0.598 1.506 0.064 -0.598 -0.901 0.096 -0.038 1.315 0.453 - 597.30 13.568 13.568 13.604 -0.142 -0.978 1.455 -0.142 -0.978 -1.423 -0.206 0.139 1.547 0.722 - 597.35 13.502 13.503 13.553 -0.189 -1.158 1.389 -0.189 -1.158 -1.609 -0.263 0.219 1.654 0.823 - 597.40 13.339 13.340 13.372 0.115 -0.933 1.226 0.115 -0.933 -1.144 0.141 -0.107 1.193 0.579 - 597.45 13.729 13.730 13.777 0.170 -1.147 1.616 0.170 -1.147 -1.853 0.275 -0.195 1.977 0.942 - 597.50 13.821 13.821 13.837 -0.018 -0.659 1.708 -0.018 -0.659 -1.125 -0.031 0.012 1.676 0.563 - 597.55 14.277 14.278 14.302 0.161 -0.835 2.164 0.161 -0.835 -1.808 0.349 -0.135 2.704 0.923 - 597.60 14.225 14.225 14.258 0.012 -0.976 2.112 0.012 -0.976 -2.061 0.026 -0.012 2.706 1.031 - 597.65 14.203 14.209 14.236 0.399 -0.879 2.090 0.399 -0.879 -1.838 0.835 -0.351 2.651 1.025 - 597.70 14.141 14.141 14.174 0.003 -0.970 2.028 0.003 -0.970 -1.968 0.006 -0.003 2.528 0.984 - 597.75 13.946 13.948 13.956 0.251 -0.480 1.833 0.251 -0.480 -0.880 0.460 -0.120 1.826 0.500 - 597.80 14.076 14.083 14.090 0.449 -0.436 1.963 0.449 -0.436 -0.856 0.882 -0.196 2.123 0.622 - 597.85 13.809 13.812 13.815 -0.276 -0.303 1.696 -0.276 -0.303 -0.514 -0.468 0.084 1.523 0.350 - 597.90 13.588 13.588 13.590 -0.069 -0.226 1.475 -0.069 -0.226 -0.333 -0.102 0.016 1.116 0.174 - 597.95 13.428 13.429 13.432 0.123 0.307 1.315 0.123 0.307 0.404 0.162 0.038 0.920 0.219 - 598.00 13.368 13.369 13.377 0.094 0.471 1.256 0.094 0.471 0.591 0.117 0.044 0.903 0.302 - 598.05 13.157 13.158 13.170 0.082 0.578 1.045 0.082 0.578 0.603 0.086 0.047 0.716 0.306 - 598.10 13.144 13.144 13.145 0.111 0.106 1.031 0.111 0.106 0.109 0.114 0.012 0.543 0.079 - 598.15 13.034 13.034 13.037 0.090 -0.276 0.921 0.090 -0.276 -0.254 0.083 -0.025 0.466 0.134 - 598.20 13.067 13.067 13.068 0.057 -0.145 0.954 0.057 -0.145 -0.138 0.055 -0.008 0.467 0.074 - 598.25 13.058 13.059 13.062 0.135 -0.267 0.945 0.135 -0.267 -0.252 0.128 -0.036 0.492 0.143 - 598.30 12.987 12.989 12.993 0.201 -0.338 0.875 0.201 -0.338 -0.295 0.176 -0.068 0.460 0.175 - 598.35 13.060 13.061 13.061 0.148 -0.044 0.947 0.148 -0.044 -0.042 0.140 -0.007 0.461 0.073 - 598.40 13.128 13.128 13.129 0.044 0.140 1.015 0.044 0.140 0.142 0.045 0.006 0.526 0.074 - 598.45 13.284 13.284 13.286 0.124 0.183 1.171 0.124 0.183 0.214 0.145 0.023 0.710 0.130 - 598.50 12.978 12.980 12.982 -0.208 -0.221 0.865 -0.208 -0.221 -0.192 -0.180 0.046 0.421 0.134 - 598.55 12.766 12.774 12.777 -0.457 -0.286 0.653 -0.457 -0.286 -0.187 -0.299 0.131 0.359 0.188 - 598.60 12.845 12.852 12.852 -0.411 -0.064 0.732 -0.411 -0.064 -0.047 -0.301 0.026 0.354 0.153 - 598.65 13.055 13.063 13.063 -0.457 -0.022 0.942 -0.457 -0.022 -0.021 -0.431 0.010 0.548 0.216 - 598.70 12.853 12.856 12.858 -0.279 0.256 0.740 -0.279 0.256 0.189 -0.206 -0.071 0.345 0.144 - 598.75 12.769 12.771 12.776 -0.199 0.341 0.657 -0.199 0.341 0.224 -0.131 -0.068 0.294 0.134 - 598.80 12.925 12.926 12.937 -0.194 0.536 0.812 -0.194 0.536 0.435 -0.157 -0.104 0.492 0.237 - 598.85 13.102 13.106 13.110 -0.328 0.336 0.989 -0.328 0.336 0.332 -0.324 -0.110 0.599 0.239 - 598.90 13.128 13.143 13.143 -0.612 -0.094 1.016 -0.612 -0.094 -0.096 -0.621 0.058 0.707 0.315 - 598.95 12.914 12.924 12.928 -0.517 0.312 0.801 -0.517 0.312 0.250 -0.414 -0.161 0.503 0.255 - 599.00 13.133 13.138 13.138 -0.368 -0.001 1.020 -0.368 -0.001 -0.002 -0.375 0.001 0.588 0.188 - 599.05 13.246 13.252 13.254 -0.389 0.197 1.134 -0.389 0.197 0.223 -0.441 -0.077 0.738 0.250 - 599.10 13.277 13.277 13.278 -0.097 0.044 1.164 -0.097 0.044 0.052 -0.113 -0.004 0.683 0.062 - 599.15 13.725 13.725 13.725 -0.022 0.159 1.612 -0.022 0.159 0.256 -0.035 -0.003 1.312 0.129 - 599.20 13.804 13.805 13.805 -0.174 -0.070 1.691 -0.174 -0.070 -0.118 -0.294 0.012 1.448 0.159 - 599.25 13.764 13.765 13.765 -0.193 -0.089 1.651 -0.193 -0.089 -0.148 -0.319 0.017 1.385 0.176 - 599.30 14.144 14.145 14.154 -0.189 -0.494 2.031 -0.189 -0.494 -1.003 -0.384 0.093 2.203 0.539 - 599.35 13.987 13.987 14.023 0.111 -0.991 1.874 0.111 -0.991 -1.857 0.209 -0.110 2.253 0.936 - 599.40 13.701 13.701 13.735 0.076 -0.961 1.588 0.076 -0.961 -1.526 0.121 -0.073 1.726 0.766 - 599.45 13.692 13.692 13.707 0.134 -0.646 1.579 0.134 -0.646 -1.019 0.211 -0.086 1.464 0.522 - 599.50 13.436 13.442 13.460 0.410 -0.709 1.323 0.410 -0.709 -0.937 0.543 -0.291 1.210 0.561 - 599.55 13.435 13.435 13.447 0.131 -0.567 1.322 0.131 -0.567 -0.749 0.174 -0.075 1.043 0.386 - 599.60 13.671 13.672 13.696 0.198 -0.813 1.558 0.198 -0.813 -1.267 0.309 -0.161 1.564 0.657 - 599.65 13.594 13.598 13.613 0.299 -0.655 1.481 0.299 -0.655 -0.970 0.443 -0.196 1.356 0.542 - 599.70 13.668 13.677 13.696 0.506 -0.720 1.555 0.506 -0.720 -1.119 0.787 -0.364 1.596 0.708 - 599.75 13.388 13.399 13.411 0.544 -0.562 1.276 0.544 -0.562 -0.716 0.693 -0.305 1.119 0.521 - 599.80 13.403 13.440 13.445 0.994 -0.356 1.290 0.994 -0.356 -0.459 1.283 -0.354 1.390 0.704 - 599.85 13.466 13.486 13.492 0.738 -0.416 1.353 0.738 -0.416 -0.563 0.998 -0.307 1.274 0.593 - 599.90 13.488 13.501 13.505 0.594 -0.346 1.375 0.594 -0.346 -0.476 0.817 -0.206 1.182 0.484 - 599.95 13.519 13.522 13.529 0.254 -0.430 1.406 0.254 -0.430 -0.605 0.357 -0.109 1.114 0.355 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py deleted file mode 100644 index 3b57e7b111..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Initialize everything""" -# import os -# ROOT = os.path.abspath(os.path.dirname(__file__)) -# with open(os.path.join(ROOT, "..", "VERSION")) as version_file: -# VERSION = version_file.read().strip() -# __version__ = VERSION diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py deleted file mode 100644 index 05f369f9dd..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_directivity.py +++ /dev/null @@ -1,86 +0,0 @@ -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from parse import * -import re, os, platform -from pyFAST.input_output.fast_output_file import FASTOutputFile - -######################################################################################################################################### -## User inputs -# Save plot and/or data? -save_fig = False -save_data = False -fig_ext = '.png' - -# Number of revolutions (n) to average spectra -n = 1 - -######################################################################################################################################### -## Paths to files -if platform.system() == 'Windows': - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -else: - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_1.out' -OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' -locfilename = FAST_directory + os.sep + 'AA_ObserverLocations_Map.dat' -output_dir = os.path.dirname( os.path.realpath(__file__) ) -outputfilename = output_dir + os.sep + "data_output1" - -######################################################################################################################################### -## Read in data, manipulate it, and plot it -# reads in file data -AA_1 = FASTOutputFile(AAfilename).toDataFrame() -OF = FASTOutputFile(OFfilename).toDataFrame() -location = pd.read_csv(locfilename,delimiter='\s+',skiprows=[0,1],names=['x','y','z']) - -# determine number of observers -num_obs = AA_1.shape[1]-1 - -# calculate sample time for n revolutions -rpm = OF[["RotSpeed_[rpm]"]].mean()[0] -yaw = OF[["YawPzn_[deg]"]].mean()[0] / 180. * np.pi -time_revs = n*60/rpm -tot_time = AA_1["Time_[s]"].max() -if time_revs < tot_time: - sample_time = tot_time - time_revs -else: - print("Error: Time for number of revolutions exceeds simulation time. Reduce n.") - raise SystemExit('') - -# slice AA dataframe for t > sample_time -AA_1 = AA_1[AA_1["Time_[s]"] > sample_time] -AA_1=AA_1.drop("Time_[s]",axis=1) - -# average P over rotor revolution -AA_1 = AA_1.mean() - -# merge location info with SPL info -AA_1=AA_1.reset_index() -AA_1=AA_1.drop("index",axis=1) -AA_1=pd.merge(location,AA_1,left_index=True,right_index=True) -AA_1=AA_1.rename(index=str,columns={0:"SPL"}) - -# contour plot of SPL for each location -if num_obs < 3: - print("Error: Need at least 3 observers to generate contour.") -else: - x=AA_1['x']; - y=AA_1['y']; - z=AA_1['SPL']; - fs = 10 - fig,ax=plt.subplots() - ax.set_aspect('equal') - ax.set_xlabel('x [m]', fontsize=fs+2, fontweight='bold') - ax.set_ylabel('y [m]', fontsize=fs+2, fontweight='bold') - tcf=ax.tricontourf(x,y,z, range(58, 84, 1)) - fig.colorbar(tcf,orientation="vertical").set_label(label = 'Overall SPL [dB]', fontsize=fs+2,weight='bold') - if save_fig == True: - fig_name = 'directivity_map' - fig.savefig(output_dir + os.sep + fig_name + fig_ext) - plt.show() - -# export to csv -if save_data == True: - AA_1.to_csv(r'{}-data.csv'.format(outputfilename)) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py deleted file mode 100644 index ec1f928f54..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_mechanisms.py +++ /dev/null @@ -1,112 +0,0 @@ -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from parse import * -import re, os, platform -from pyFAST.input_output.fast_output_file import FASTOutputFile - -######################################################################################################################################### -## User inputs -# Save plot and/or data? -save_fig = False -save_data = False -fig_ext = '.png' - -# Number of revolutions (n) to average spectra -n = 1 - -######################################################################################################################################### -## Paths to files -if platform.system() == 'Windows': - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -else: - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_3.out' -OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' -output_dir = os.path.dirname( os.path.realpath(__file__) ) -outputfilename = output_dir + os.sep + "data_output2" - -######################################################################################################################################### -## Read in data, manipulate it, and plot it - -# Read in file data -AA_3 = FASTOutputFile(AAfilename).toDataFrame() -OF = FASTOutputFile(OFfilename).toDataFrame() - -# Determine number of observers -num_obs = int((AA_3.shape[1]-1)/(7*34)) - -# Calculate sample time for n revolutions -rpm = OF[["RotSpeed_[rpm]"]].mean()[0] -time_revs = n*60/rpm -tot_time = AA_3["Time_[s]"].max() -if time_revs < tot_time: - sample_time = tot_time - time_revs -else: - print("Error: Time for number of revolutions exceeds simulation time. Reduce n.") - raise SystemExit('') - -# Slice AA dataframe for t > sample_time -AA_3 = AA_3[AA_3["Time_[s]"] > sample_time] -AA_3=AA_3.drop("Time_[s]",axis=1) - -# Average SPL for each observer -AA_3 = AA_3.mean() - -# Manipulate PD dataframes -# convert to dataframe with appropriate columns -cols = ['Observer','Mechanism','Frequency (Hz)','SPL (dB)'] -aa_3 = pd.DataFrame(columns=cols) -for i in AA_3.index: - nums = re.findall(r"[-+]?\d*\.\d+|\d+",i) - aa_3.loc[len(aa_3)] = [nums[0],nums[2],nums[1],AA_3[i]] - -AA_3 = aa_3 - -# rename mechanism for legend -for i in range(0,AA_3.last_valid_index()+1): - if AA_3.loc[i,"Mechanism"]=='1': - AA_3.loc[i,"Mechanism"]="LBL-VS" - if AA_3.loc[i,"Mechanism"]=='2': - AA_3.loc[i,"Mechanism"]="TBL-TE-PS" - if AA_3.loc[i,"Mechanism"]=='3': - AA_3.loc[i,"Mechanism"]="TBL-TE-SS" - if AA_3.loc[i,"Mechanism"]=='4': - AA_3.loc[i,"Mechanism"]="TBL-TE-AoA" - if AA_3.loc[i,"Mechanism"]=='5': - AA_3.loc[i,"Mechanism"]="TE Bluntness" - if AA_3.loc[i,"Mechanism"]=='6': - AA_3.loc[i,"Mechanism"]="Tip Vortex" - if AA_3.loc[i,"Mechanism"]=='7': - AA_3.loc[i,"Mechanism"]="TI" - -AA_3["Observer"]=AA_3["Observer"].apply(pd.to_numeric) -AA_3["Frequency (Hz)"]=AA_3["Frequency (Hz)"].apply(pd.to_numeric) -AA_3["SPL (dB)"]=AA_3["SPL (dB)"].apply(pd.to_numeric) - - -# Plot spectra -fs = 10 -for j in range(num_obs): - fig,ax=plt.subplots() - plt.xscale('log') - ax.set_xlabel('Frequency (Hz)', fontsize=fs+2, fontweight='bold') - ax.set_ylabel('SPL (dB)', fontsize=fs+2, fontweight='bold') - for i in range(7): - plt.plot(AA_3["Frequency (Hz)"][j*34*7 + i : j*34*7 + i + 34 * 7:7], AA_3["SPL (dB)"][j*34*7 + i : j*34*7 + i + 34 * 7:7], label = AA_3.loc[i,"Mechanism"]) - ax.set_title('Observer ' + str(j), fontsize=fs+2, fontweight='bold') - plt.grid(color=[0.8,0.8,0.8], linestyle='--') - ax.set_ylim(0,) - ax.legend() - if save_fig == True: - fig_name = 'spectra_Obs' + str(j) + fig_ext - fig.savefig(output_dir + os.sep + fig_name) - plt.show() - -# Export to csv -if save_data == True: - AA_3.to_csv(r'{}-data.csv'.format(outputfilename)) - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py deleted file mode 100644 index bc7b0a2966..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_rotor_map.py +++ /dev/null @@ -1,92 +0,0 @@ -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from parse import * -import re, os, platform -import matplotlib.colors -from pyFAST.input_output.fast_output_file import FASTOutputFile - -######################################################################################################################################### -## User inputs -# Save plot and/or data? -save_fig = False -save_data = False -fig_ext = '.png' -R = 65. -R_hub = 2. - -# Number of revolutions (n) to average spectra -n = 1 - -######################################################################################################################################### -## Paths to files -if platform.system() == 'Windows': - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -else: - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_4.out' -OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' -locfilename = FAST_directory + os.sep + 'AA_ObserverLocations.dat' -output_dir = os.path.dirname( os.path.realpath(__file__) ) -outputfilename = output_dir + os.sep + "data_output4" - -######################################################################################################################################### - - -location = pd.read_csv(locfilename,delimiter='\s+',skiprows=[0,1],names=['x','y','z']) - - -AA_1 = FASTOutputFile(AAfilename).toDataFrame() -OF = FASTOutputFile(OFfilename).toDataFrame() - - -with open(AAfilename, 'r') as f: - f.readline() - f.readline() - f.readline() - n_obs = int(f.readline().split()[-1]) - n_blades = int(f.readline().split()[-1]) - n_nodes = int(f.readline().split()[-1]) -f.close() - -k = np.ones(n_obs) -for i in range(n_obs): - if location['x'][i] < 0: - k[i] = -1 - -phi = OF['Azimuth_[deg]'] / 180. * np.pi -phi_interp = np.interp(AA_1['Time_[s]'], OF['Time_[s]'], phi) -index = [] -for i in range(1, len(phi_interp)): - if phi_interp[i] < phi_interp[i-1]: - index.append(i) - -y_b = np.linspace(R_hub, R, n_nodes) -x_b = np.zeros_like(y_b) - -n_pts = index[-1] - index[-2] - -for j in range(n_obs): - x = np.zeros((n_pts,n_nodes)) - y = np.zeros((n_pts,n_nodes)) - - for i in range(n_pts): - x[i,:] = x_b * np.cos(k[j]*phi_interp[i + index[-2]]) - y_b * np.sin(k[j]*phi_interp[i + index[-2]]) - y[i,:] = x_b * np.sin(k[j]*phi_interp[i + index[-2]]) + y_b * np.cos(k[j]*phi_interp[i + index[-2]]) - - z = np.array(AA_1)[index[-2]:index[-1], 1+j:1 + 30*n_obs + j:n_obs] - fs = 10 - fig,ax=plt.subplots() - ax.set_aspect('equal') - ax.set_xlabel('y [m]', fontsize=fs+2, fontweight='bold') - ax.set_ylabel('z [m]', fontsize=fs+2, fontweight='bold') - ax.set_title('Observer ' + str(j), fontsize=fs+2, fontweight='bold') - tcf=ax.tricontourf(x.flatten(),y.flatten(),z.flatten(), range(20,75)) - fig.colorbar(tcf,orientation="vertical").set_label(label = 'Overall SPL [dB]', fontsize=fs+2,weight='bold') - if save_fig == True: - fig_name = 'rotor_map_Obs' + str(j) + fig_ext - fig.savefig(output_dir + os.sep + fig_name) - plt.show() - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py deleted file mode 100644 index d5fc2afaae..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/plot_spectra.py +++ /dev/null @@ -1,87 +0,0 @@ -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from parse import * -import re, os, platform -from pyFAST.input_output.fast_output_file import FASTOutputFile - -######################################################################################################################################### -## User inputs -# Save plot and/or data? -save_fig = False -save_data = False -fig_ext = '.png' - -# Number of revolutions (n) to average spectra -n = 1 - -######################################################################################################################################### -## Paths to files -if platform.system() == 'Windows': - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -else: - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -AAfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics_2.out' -OFfilename = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.out' -output_dir = os.path.dirname( os.path.realpath(__file__) ) -outputfilename = output_dir + os.sep + "data_output2" - -######################################################################################################################################### -## Read in data, manipulate it, and plot it - -# Read in file data -AA_2 = FASTOutputFile(AAfilename).toDataFrame() -OF = FASTOutputFile(OFfilename).toDataFrame() - -# Determine number of observers -num_obs = int((AA_2.shape[1]-1)/34) - -# Calculate sample time for n revolutions -rpm = OF[["RotSpeed_[rpm]"]].mean()[0] -time_revs = n*60/rpm -tot_time = AA_2["Time_[s]"].max() -if time_revs < tot_time: - sample_time = tot_time - time_revs -else: - print("Error: Time for number of revolutions exceeds simulation time. Reduce n.") - raise SystemExit('') - -# Slice AA dataframe for t > sample_time -AA_2 = AA_2[AA_2["Time_[s]"] > sample_time] -AA_2=AA_2.drop("Time_[s]",axis=1) - -# Average SPL for each observer -AA_2 = AA_2.mean() - -# Manipulate PD dataframes -cols = ['Observer','Frequency (Hz)','SPL (dB)'] -aa_2 = pd.DataFrame(columns=cols) -for i in AA_2.index: - nums = re.findall(r"[-+]?\d*\.\d+|\d+",i) - aa_2.loc[len(aa_2)] = [nums[0],nums[1],AA_2[i]] -AA_2 = aa_2 -AA_2["Frequency (Hz)"]=AA_2["Frequency (Hz)"].apply(pd.to_numeric) -AA_2["SPL (dB)"]=AA_2["SPL (dB)"].apply(pd.to_numeric) - -# Plot spectra -fs = 10 -fig,ax=plt.subplots() -plt.xscale('log') -ax.set_xlabel('Frequency (Hz)', fontsize=fs+2, fontweight='bold') -ax.set_ylabel('SPL (dB)', fontsize=fs+2, fontweight='bold') -for i in range(num_obs): - plt.plot(AA_2["Frequency (Hz)"][i*34:i*34 + 34], AA_2["SPL (dB)"][i*34:i*34 + 34], label = 'Observer ' + str(i)) -plt.grid(color=[0.8,0.8,0.8], linestyle='--') -ax.legend() -if save_fig == True: - fig_name = 'spectra' + fig_ext - fig.savefig(output_dir + os.sep + fig_name) -plt.show() - -# Export to csv -if save_data == True: - AA_2.to_csv(r'{}-data.csv'.format(outputfilename)) - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py deleted file mode 100644 index f3c47be7b8..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/run_OF.py +++ /dev/null @@ -1,18 +0,0 @@ -import os -import platform -import subprocess - -if platform.system() == 'Windows': - FAST_exe = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'build' + os.sep + 'glue-codes' + os.sep + 'openfast_x64.exe' - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -else: - FAST_exe = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'build' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'openfast' - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' - - -FAST_InputFile = FAST_directory + os.sep + 'IEA_LB_RWT-AeroAcoustics.fst' -exec_str = [] -exec_str.append(FAST_exe) -exec_str.append(FAST_InputFile) - -subprocess.call(exec_str) \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py deleted file mode 100644 index ba371bcd9d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/aeroacoustics/write_BLfiles.py +++ /dev/null @@ -1,144 +0,0 @@ -import numpy as np -import os, shutil, platform - -# Path to XFoil -path2xfoil = 'Xfoil/bin/xfoil' - -## inputs -if platform.system() == 'Windows': - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -else: - FAST_directory = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__) ) ) ) ) + os.sep + 'openfast' + os.sep + 'reg_tests' + os.sep + 'r-tests' + os.sep + 'glue-codes' + os.sep + 'openfast' + os.sep + 'IEA_LB_RWT-AeroAcoustics' -folder_inputs = FAST_directory + os.sep + 'Airfoils' -folder_outputs = folder_inputs -n_stations = 30 -aoa = np.linspace(-5., 25., 30) # List of angles of attack -Re = np.array([0.5e+06, 1.e+06, 5.e+06, 10.e+06]) # List of Reynolds numbers -TEoffset = 1 # Number of nodes away from the TE where the BL properties are extracted, TEoffset = 0 is prone to convergence issues -trip = 0 # Flag to set free (0) or force (1) -TEAngle = 10.*np.ones(n_stations) # Distribution of trailing edge angles for BPM trailing edge bluntness noise model -TEThick = 0.005*np.ones(n_stations) # Distribution of trailing edge angles for BPM trailing edge bluntness noise model - -## code - -inputs_list = [] -outputs_list = [] -for i in range(n_stations): - if i < 10: - inputs_list.append(folder_inputs + os.sep + 'AF0' + str(i) + '_Coords.txt') # List of files containing the airfoil coordinates - else: - inputs_list.append(folder_inputs + os.sep + 'AF' + str(i) + '_Coords.txt') # List of files containing the airfoil coordinates - outputs_list.append(folder_outputs + os.sep + 'AF' + str(i) + '_BL.txt') # List of files containing the boundary layer characteristics - - -for id in range(5,len(inputs_list)): - print('Compute BL properties station ' + str(id)) - filename = inputs_list[id] - coord = np.loadtxt(filename, skiprows = 9) - np.savetxt('airfoil.dat', coord) - Ue_Vinf_SS = np.zeros((len(aoa),len(Re))) - Ue_Vinf_PS = np.zeros((len(aoa),len(Re))) - Dstar_SS = np.zeros((len(aoa),len(Re))) - Dstar_PS = np.zeros((len(aoa),len(Re))) - Theta_SS = np.zeros((len(aoa),len(Re))) - Theta_PS = np.zeros((len(aoa),len(Re))) - Cf_SS = np.zeros((len(aoa),len(Re))) - Cf_PS = np.zeros((len(aoa),len(Re))) - H_SS = np.zeros((len(aoa),len(Re))) - H_PS = np.zeros((len(aoa),len(Re))) - - - for k in range(len(Re)): - fid = open('inputxfoil.vbs','w') - fid.write('\n') - fid.write('load airfoil.dat\n') - fid.write('pane\n') - fid.write('plop\n') - fid.write('g\n') - fid.write('%f\n' % 0.8) - fid.write('\n') - fid.write('oper\n') - fid.write('visc %1.3e\n' % (Re[k])) - fid.write('iter\n') - fid.write('%u\n' % 200) - - if trip == 1: - fid.write('vpar\n') - fid.write('xtr 0.05 0.1\n') - fid.write('\n') - - for j in range(len(aoa)): - fid.write('alfa %3.2f\n' % aoa[j]) - fid.write('dump airfoil.bl%u\n' % j) - fid.write('\n') - fid.write('quit\n') - fid.close() - - os.system(path2xfoil + ' < inputxfoil.vbs') - - os.remove('inputxfoil.vbs') - - - for j in range(len(aoa)): - s_counter=0 - i_TE_PS = [] - bl_data = np.array([]) - text_file = 'airfoil.bl' + str(j) - with open(text_file) as xfile: - xfile.readline() - for line in xfile: - data = np.array([float(x) for x in line.strip().split()]) - if s_counter==0: - bl_data = data - else: - if len(data) == 12: - bl_data = np.vstack((bl_data,data)) - elif len(data) == 8: - data = np.hstack((data, np.zeros(4))) - if i_TE_PS == []: - i_TE_PS = s_counter - 1 - else: - pass - - s_counter +=1 - - - Ue_Vinf_SS[j,k] = bl_data[0 + TEoffset , 3] - Ue_Vinf_PS[j,k] = bl_data[i_TE_PS - TEoffset , 3] - Dstar_SS[j,k] = bl_data[0 + TEoffset , 4] - Dstar_PS[j,k] = bl_data[i_TE_PS - TEoffset , 4] - Theta_SS[j,k] = bl_data[0 + TEoffset , 5] - Theta_PS[j,k] = bl_data[i_TE_PS - TEoffset , 5] - Cf_SS[j,k] = bl_data[0 + TEoffset , 6] - Cf_PS[j,k] = bl_data[i_TE_PS - TEoffset , 6] - H_SS[j,k] = bl_data[0 + TEoffset , 7] - H_PS[j,k] = bl_data[i_TE_PS - TEoffset , 7] - - os.remove('airfoil.bl' + str(j)) - - os.remove('airfoil.dat') - - # Compute Delta (nominal boundary layer thickness) from Dstar (boundary layer displacement thickness), Theta (boundary layer momentum thickness), and H (kinematic shape factor) - Delta_SS = Theta_SS*(3.15+1.72/(H_SS-1.))+Dstar_SS - Delta_PS = Theta_PS*(3.15+1.72/(H_PS-1.))+Dstar_PS - - fid=open(outputs_list[id],'w') - fid.write('! Boundary layer characteristics at the trailing edge for the airfoil coordinates of %s\n' % filename) - fid.write('! Legend: aoa - angle of attack (deg), Re - Reynolds number (-, millions), PS - pressure side, SS - suction side, Ue_Vinf - edge velocity (-), Dstar - displacement thickness (-), Delta - nominal boundary layer thickness (-) Cf - friction coefficient (-)\n') - fid.write('%u \t ReListBL - Number of Reynolds numbers (it corresponds to the number of tables)\n' % len(Re)) - fid.write('%u \t aoaListBL - Number of angles of attack (it corresponds to the number of rows in each table)\n' % len(aoa)) - for k in range(len(Re)): - fid.write('%1.2f \t - Re\n' % (Re[k]*1.e-6)) - fid.write('aoa \t \t Ue_Vinf_SS \t Ue_Vinf_PS \t Dstar_SS \t \t Dstar_PS \t \t Delta_SS \t \t Delta_PS \t \t Cf_SS \t \t Cf_PS\n') - fid.write('(deg) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-) \t \t \t (-)\n') - for j in range(len(aoa)): - fid.write('%1.5f \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \t %1.5e \n' % (aoa[j], Ue_Vinf_SS[j,k], Ue_Vinf_PS[j,k], Dstar_SS[j,k], Dstar_PS[j,k], Delta_SS[j,k], Delta_PS[j,k], Cf_SS[j,k], Cf_PS[j,k])) - - fid.write('\n') - fid.write('! Inputs to trailing edge bluntness noise model\n') - fid.write('%1.5f \t TEAngle - Angle of the trailing edge (deg)\n'%TEAngle[id]) - fid.write('%1.5f \t TEThick - Finite thickness of the trailing edge (deg)\n'%TEThick[id]) - - fid.close() - - \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py deleted file mode 100644 index 9b3d5a975c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/DynamicStall.py +++ /dev/null @@ -1,506 +0,0 @@ -import numpy as np -import pandas as pd -from .Polar import Polar as Pol - - -# --------------------------------------------------------------------------------} -# --- Wagner function -# --------------------------------------------------------------------------------{ -A1_Jones, A2_Jones, b1_Jones, b2_Jones = 0.165 , 0.335 , 0.0455 , 0.3 -A1_FAST, A2_FAST, b1_FAST, b2_FAST = 0.3 , 0.7 , 0.14 , 0.53 - -def wagner(tau_t, constants=None, A1=None, A2=None, b1=None, b2=None): - """ - Lift coefficient, Cl, from Wagner function - INPUTS: - - tau_t: dimensionless time - - constants: string in ['Jones', 'OpenFAST'] or None - - A1, A2, b1, b2 : wagner constants, should be provided if constants is None - - Reference: Wagner - R.T Jones approximation (Jones 1938) - """ - if constants in ['Jones','HAWC2']: # R.T Jones approximation to Wagner's function (Jones 1938) - A1, A2, b1, b2 = A1_Jones, A2_Jones, b1_Jones, b2_Jones - elif constants=='OpenFAST': - A1, A2, b1, b2 = A1_FAST, A2_FAST, b1_FAST, b2_FAST - elif constants is None: - if all([A1, A2, b1, b2]): - pass # all good - else: - raise Exception('Provide A1, A2, b1, b2 if constants is None') - - - else: - raise NotImplementedError('Constants {}'.format(constants)) - - Cl = 1-A1_Jones*np.exp(-b1_Jones*tau_t)-A2_Jones*np.exp(-b2_Jones*tau_t) - - return Cl - - -# --------------------------------------------------------------------------------} -# --- MHH dynamic stall -# --------------------------------------------------------------------------------{ -def dynstall_mhh_sim(time, u, p, x0=None, prefix='', method='continuous'): - """ Perform simulation using the MHH/HGM dynamic stall model - Reference: - Hansen Gaunaa Madsen - Riso-R-1354 (2004) A Beddoes-Lieshman type dynamic stall model - - INPUTS: - - time: time vector - - u: dictionary of input functions of time - - p: dictionary of parameters - - x0: initial conditions for the 4 states of the model. If None, the steady steady values are used - - method: 'continuous' or 'discrete' to chose a formulation - - prefix: prefix used for channel names of the dataframe. Use 'AB1N001' to match OpenFAST. - OUTPUTS: - - df: dataframe with outputs similar to UA module of OpenFAST - """ - from scipy.integrate import solve_ivp - - # --- Initial conditions for states - if x0 is None: - # x0 = [0,0,0,0] - x0 = dynstall_mhh_steady(0,u,p) - - # --- Time Integration of states - if method=='continuous': - sol = solve_ivp(lambda t,x: dynstall_mhh_dxdt(t,x,u,p), t_span=[time[0],time[-1]], y0=x0, t_eval=time) - y = sol.y - elif method=='discrete': - y = np.zeros((8,len(time))) - xd = np.zeros(8) - xd[:4] = x0 - xd[4] = u['alpha_34'](time[0]) - xd[5] = 0 # Cl_p - xd[6] = 1.0 # fp - xd[7] = u['U'](time[0]) # U - y[:,0] = xd - for it,t in enumerate(time[1:]): - dt = t - time[it] # Note: time[it] is in fact t-dt - xd = dynstall_mhh_update_discr(t, dt, xd, u, p) - y[:,it+1] = xd - else: - raise NotImplementedError('Method: {}'.format(method)) - - # --- Compute outputs - df=pd.DataFrame() - #print('>>> HACK time 0.002') - df['Time_[s]'] = time - df[prefix + 'Vrel_[m/s]'] = np.zeros(len(time)) - df[prefix + 'alpha_34_[deg]'] = np.zeros(len(time)) - df[prefix + 'Cl_[-]'] = np.zeros(len(time)) - df[prefix + 'Cd_[-]'] = np.zeros(len(time)) - df[prefix + 'Cm_[-]'] = np.zeros(len(time)) - df[prefix + 'Tu_[-]'] = np.zeros(len(time)) - df[prefix + 'alphaE_[deg]'] = np.zeros(len(time)) - df[prefix + 'alphaF_[deg]'] = np.zeros(len(time)) - df[prefix + 'Clp_[-]'] = np.zeros(len(time)) - df[prefix + 'fs_aE_[-]'] = np.zeros(len(time)) - df[prefix + 'fs_aF_[-]'] = np.zeros(len(time)) - df['torsrate'] = np.zeros(len(time)) - df['alpha_34'] = np.zeros(len(time)) - df['U'] = np.zeros(len(time)) - df['T_0'] = np.zeros(len(time)) - df['x1'] = y[0,:] - df['x2'] = y[1,:] - df['x3'] = y[2,:] - df['x4'] = y[3,:] - df['alphaE'] = np.zeros(len(time)) - df['alphaF'] = np.zeros(len(time)) - df['ClP'] = np.zeros(len(time)) - for it,t in enumerate(time): - Cl, Cd, Cm, alphaE, Tu, fs_aE, Cl_fs, alpha_34, omega, U, alphaF, Clp, fs_aF = dynstall_mhh_outputs(t, y[:,it], u, p, calcOutput=True) - df.loc[it,prefix + 'Vrel_[m/s]'] = U - df.loc[it,prefix + 'alpha_34_[deg]'] = alpha_34*180/np.pi - df.loc[it,prefix + 'Cl_[-]'] = Cl - df.loc[it,prefix + 'Cd_[-]'] = Cd - df.loc[it,prefix + 'Cm_[-]'] = Cm - df.loc[it,prefix + 'Tu_[-]'] = Tu - df.loc[it,prefix + 'alphaE_[deg]'] = alphaE*180/np.pi - df.loc[it,prefix + 'alphaF_[deg]'] = alphaF*180/np.pi - df.loc[it,prefix + 'omega_[deg/s]'] = omega*180/np.pi - df.loc[it,prefix + 'Clp_[-]'] = Clp - df.loc[it,prefix + 'fs_aF_[-]'] = fs_aF - df.loc[it,prefix + 'fs_aE_[-]'] = fs_aE - df.loc[it,'U'] = U - df.loc[it,'alpha_34'] = alpha_34 - df.loc[it,'T_0'] = Tu - df.loc[it,'torsrate'] = omega - df.loc[it,'alphaE'] = alphaE - df.loc[it,'ClP'] = Clp - df.loc[it,'alphaF'] = alphaF - df[prefix + 'x1_[rad]'] = y[0,:] - df[prefix + 'x2_[rad]'] = y[1,:] - df[prefix + 'x3_[-]'] = y[2,:] - df[prefix + 'x4_[-]'] = y[3,:] - return df - - -def dynstall_mhh_param_from_polar(P, chord, Tf0=6.0, Tp0=1.5, A1=A1_Jones, A2=A2_Jones, b1=b1_Jones, b2=b2_Jones, constants='Jones', p=None): - if not isinstance(P,Pol): - raise Exception('Input should be an instance of the `Polar` class') - if not P._radians : - raise Exception('MHH dynamic stall implemented for polars in radians only') - - if constants in ['Jones','HAWC2']: - A1, A2, b1, b2 = A1_Jones, A2_Jones, b1_Jones, b2_Jones - Tf0 = 6.0 - Tp0 = 1.5 - elif constants=='OpenFAST': - A1, A2, b1, b2 = A1_FAST, A2_FAST, b1_FAST, b2_FAST - Tf0 = 3.0 - Tp0 = 1.7 - else: - raise NotImplementedError('Constants {}'.format(constants)) - - if p is None: - p=dict() - # Airfoil parameters - p['alpha0'] = P._alpha0 # TODO TODO requires compute params - p['Cla'] = P._linear_slope - if p['alpha0'] is None: - raise Exception('>>>> TODO need to compute params on polar for MHH dyn stall model') - if p['Cla'] is None: - raise Exception('>>>> TODO need to compute params on polar for MHH dyn stall model') - p['chord'] = chord - # Polar functions - p['F_st'] = P.fs_interp - p['Cl_fs'] = P.cl_fs_interp - p['Cl'] = P.cl_interp - p['Cd'] = P.cd_interp - p['Cm'] = P.cm_interp - # Dynamics constants - p['Tf0'] = Tf0 - p['Tp0'] = Tp0 - p['A1'] = A1 - p['A2'] = A2 - p['b1'] = b1 - p['b2'] = b2 - p['alpha0_in_x1x2'] = True - p['U_in_x1x2'] = False - p['scale_x1_x2'] = False - p['old_ClCd_dyn'] = True - return p - -def dynstall_mhh_dxdt(t,x,u,p): - """ Time derivative of states for continous formulation """ - # Inputs - U = u['U'](t) - U_dot = u['U_dot'](t) - omega = u['omega'](t) - alpha_34 = u['alpha_34'](t) - return dynstall_mhh_dxdt_simple(t, x, U, U_dot, omega, alpha_34, p) - -def dynstall_mhh_dxdt_simple(t, x, U, U_dot, omega, alpha_34, p): - """ Time derivative of states for continous formulation """ - # States - x1=x[0] # Downwash memory term 1 - x2=x[1] # Downwash memory term 2 - x3=x[2] # Clp', Lift coefficient with a time lag to the attached lift coeff - x4=x[3] # f'' , Final separation point function - # Parameters - alpha0 = p['alpha0'] - Cla = p['Cla'] - c = p['chord'] - A1 = p['A1'] - A2 = p['A2'] - b1 = p['b1'] - b2 = p['b2'] - F_st = p['F_st'] - # Variables derived from inputs - U = max(U, 0.01) - Tu = max(c/(2*U), 1e-4) # Eq. 23 - Tf = p['Tf0']*Tu # OLD was twice: Tf = p['Tf0']*c/U - Tp = p['Tp0']*Tu # OLD was twice: Tp = p['Tp0']*c/U - # Variables derived from states - if p['alpha0_in_x1x2']: - alphaE = alpha_34*(1-A1-A2)+ x1 + x2 # Eq. 12 - else: - alphaE = (alpha_34-alpha0)*(1-A1-A2)+ x1 + x2 + alpha0 # Eq. 12 - -# alphaE = u['alphaE'](t) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HACK HACK TODO TODO TODO TODO TODO - - Clp = Cla * (alphaE-alpha0) + np.pi * Tu * omega # Eq. 13 - alphaF = x3/Cla+alpha0 # p. 13 - fs_aF = F_st(alphaF) # p. 13 - if(fs_aF<0): - print('Problematic fs:',fs_aF) - x4 = np.clip(x4, 1e-16, 1.0) # Constraining x4 between 0 and 1 increases numerical stability - # State equation - xdot = [0]*4 - if p['alpha0_in_x1x2']: - xdot[0] = -1/Tu * (b1 + c * U_dot/(2*U**2)) * x1 + b1 * A1 / Tu * alpha_34 - xdot[1] = -1/Tu * (b2 + c * U_dot/(2*U**2)) * x2 + b2 * A2 / Tu * alpha_34 - else: - xdot[0] = -1/Tu * (b1 + c * U_dot/(2*U**2)) * x1 + b1 * A1 / Tu * (alpha_34-alpha0) - xdot[1] = -1/Tu * (b2 + c * U_dot/(2*U**2)) * x2 + b2 * A2 / Tu * (alpha_34-alpha0) - xdot[2] = -1/Tp * x3 + 1/Tp * Clp - xdot[3] = -1/Tf * x4 + 1/Tf * fs_aF - return xdot - - - -def dynstall_mhh_update_discr(t, dt, xd_old, u, p): - """ Update discrete states - NOTE: discrete states include additional discrete states - """ - # States - x1_old = xd_old[0] # Downwash memory term 1 - x2_old = xd_old[1] # Downwash memory term 2 - x3_old = xd_old[2] # Clp', Lift coefficient with a time lag to the attached lift coeff - x4_old = xd_old[3] # f'' , Final separation point function - alpha_34_old = xd_old[4] # - Cl_p_old = xd_old[5] # - fs_aF_old = xd_old[6] # - U_old = xd_old[7] # - xd = xd_old.copy() - # Inputs - U = u['U'](t) - U_dot = u['U_dot'](t) - omega = u['omega'](t) - alpha_34 = u['alpha_34'](t) - # Parameters - alpha0 = p['alpha0'] - Cla = p['Cla'] - c = p['chord'] - A1 = p['A1'] - A2 = p['A2'] - b1 = p['b1'] - b2 = p['b2'] - F_st = p['F_st'] - Cl_fs = p['Cl_fs'] - Cd = p['Cd'] - # Variables derived from inputs - U = max(U, 0.01) - Tu = max(c/(2*U), 1e-4) # Eq. 23 - T1 = Tu/b1 - T2 = Tu/b2 - Tp = p['Tp0']*Tu - Tf = p['Tf0']*Tu - # Temporarily remove alpha0 (not necessary) - if p['alpha0_in_x1x2']: - alphaQS_old = alpha_34_old - alphaQS = alpha_34 - else: - alphaQS_old = alpha_34_old - alpha0 - alphaQS = alpha_34 - alpha0 - - eps=1e-4 - exp_val1=np.exp( np.clip(-dt/T1, np.log(eps), 0 )) - exp_val2=np.exp( np.clip(-dt/T2, np.log(eps), 0 )) - exp_val3=np.exp( np.clip(-dt/Tp, np.log(eps), 0 )) - exp_val4=np.exp( np.clip(-dt/Tf, np.log(eps), 0 )) - if ['scale_x1_x2']: - xd[0] = x1_old*exp_val1 + (alpha_34*U-alpha_34_old*U_old) * A1/b1*Tu/dt*(1-exp_val1) * x4_old - xd[1] = x2_old*exp_val2 + (alpha_34*U-alpha_34_old*U_old) * A2/b2*Tu/dt*(1-exp_val2) * x4_old - # x1_ = x1_old*exp + (alpha*U -alpha_old*U_old ) *A1/b1*Tu/dt*(1-exp)*x4 - - else: - if p['U_in_x1x2']: - xd[0] = x1_old*exp_val1 + 0.5*(alphaQS_old+alphaQS) * A1*U*(1-exp_val1) - xd[1] = x2_old*exp_val2 + 0.5*(alphaQS_old+alphaQS) * A2*U*(1-exp_val2) - else: - xd[0] = x1_old*exp_val1 + 0.5*(alphaQS_old+alphaQS) * A1*(1-exp_val1) - xd[1] = x2_old*exp_val2 + 0.5*(alphaQS_old+alphaQS) * A2*(1-exp_val2) - # Effective angle of attack - if ['scale_x1_x2']: - alphaE = alpha_34 - (xd[0]+xd[1])/U - else: - if p['U_in_x1x2']: - alphaE = alphaQS*(1-A1-A2) + (xd[0]+xd[1])/U - else: - alphaE = alphaQS*(1-A1-A2) + (xd[0]+xd[1]) - if p['alpha0_in_x1x2']: - pass - else: - alphaE += alpha0 - alphaQS += alpha0 - -# alphaE = u['alphaE'](t) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HACK HACK TODO TODO TODO TODO TODO - - Cl_p = Cla*(alphaE-alpha0)+np.pi*Tu*omega - xd[2] = x3_old*exp_val3 + 0.5*(Cl_p_old+Cl_p)*(1-exp_val3) - alphaF = xd[2]/Cla + alpha0 - fs_aF = F_st(alphaF) # p. 13 - xd[3] = x4_old*exp_val4 + 0.5*(fs_aF_old + fs_aF)*(1-exp_val4) - # Store "old" values - xd[4] = alpha_34 - xd[5] = Cl_p - xd[6] = fs_aF - xd[7] = U - return xd - -def dynstall_mhh_steady(t, u, p): - """ Return steady state values for the 4 states of the MHH/HGM model""" - # Inputs - U = u['U'](t) - alpha_34 = u['alpha_34'](t) - return dynstall_mhh_steady_simple(U, alpha_34, p) - -def dynstall_mhh_steady_simple(U, alpha_34, p): - # Parameters - c = p['chord'] - alpha0 = p['alpha0'] - Cla = p['Cla'] - A1 = p['A1'] - A2 = p['A2'] - b1 = p['b1'] - b2 = p['b2'] - F_st = p['F_st'] - # Variables derived from inputs - U = max(U, 0.01) - Tu = max(c/(2*U), 1e-4) # Eq. 23 - # Steady states - if p['alpha0_in_x1x2']: - x1 = A1*alpha_34 - x2 = A2*alpha_34 - alphaE = alpha_34*(1-A1-A2) + x1 + x2 # Eq. 12 - else: - x1 = A1*(alpha_34 - alpha0) - x2 = A2*(alpha_34 - alpha0) - alphaE = (alpha_34-alpha0)*(1-A1-A2) + x1 + x2 + alpha0 # Eq. 12 - x3 = Cla * (alphaE-alpha0) - alphaF = x3/Cla+alpha0 # p. 13 - x4 = F_st(alphaF) - return [x1,x2,x3,x4] - -def dynstall_mhh_outputs(t, x, u, p, calcOutput=False): - # Inputs - U = u['U'](t) - U_dot = u['U_dot'](t) - alpha = u['alpha'](t) - omega = u['omega'](t) - alpha_34 = u['alpha_34'](t) - return dynstall_mhh_outputs_simple(t, x, U, U_dot, omega, alpha_34, p, calcOutput=calcOutput) - -def dynstall_mhh_outputs_simple(t, x, U, U_dot, omega, alpha_34, p, calcOutput=False): - # States - x1=x[0] # Downwash memory term 1 - x2=x[1] # Downwash memory term 2 - x3=x[2] # Clp', Lift coefficient with a time lag to the attached lift coeff - x4=x[3] # f'' , Final separation point function - # Parameters - alpha0 = p['alpha0'] - Cla = p['Cla'] - c = p['chord'] - A1 = p['A1'] - A2 = p['A2'] - b1 = p['b1'] - b2 = p['b2'] - F_st = p['F_st'] - Cl_fs = p['Cl_fs'] - Cl = p['Cl'] - Cd = p['Cd'] - Cm = p['Cm'] - - #Cd0 = fCd(alpha0) - #a_st = ?? - # Variables derived from inputs - U = max(U, 0.01) - Tu = max(c/(2*U), 1e-4) # Eq. 23 - - # Variables derived from states - if p['scale_x1_x2']: - alphaE = alpha_34 - (x[0]+x[1])/U - else: - if p['alpha0_in_x1x2']: - if p['U_in_x1x2']: - alphaE = alpha_34*(1-A1-A2)+ (x1 + x2)/U # Eq. 12 - else: - alphaE = alpha_34*(1-A1-A2)+ (x1 + x2) # Eq. 12 - else: - if p['U_in_x1x2']: - alphaE = (alpha_34-alpha0)*(1-A1-A2) + (x1 + x2)/U + alpha0# Eq. 12 - else: - alphaE = (alpha_34-alpha0)*(1-A1-A2) + x1 + x2 + alpha0# Eq. 12 - -# alphaE = u['alphaE'](t) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HACK HACK TODO TODO TODO TODO TODO - - fs_aE = F_st(alphaE) - Cl_sep_e = Cl_fs(alphaE) - Cd_e = Cd(alphaE) - Cm_e = Cm(alphaE) - x4 = np.clip(x4,0,1) - DeltaCdfpp = (np.sqrt(fs_aE)-np.sqrt(x4))/2 - (fs_aE-x4) /4 - - #ast_x4 = (fCm(x4) - fCm(alpha0))/Cl(x4) - #ast_faE = (fCm(fs_aE) - fCm(alpha0))/Cl(fs_aE) - #DeltaCmfpp = (fa_st(x4) - fa_st(fs_aE)) - DeltaCmfpp = 0 # <<<<<<<<0 and nLocks<3: - raise Exception("For now, input files are assumed to have all or none of the columns: (fs, cl_fs, and cl_inv). Otherwise, we\'ll have to ensure consitency, and so far we dont...") - - self.Re = Re - self.alpha = np.array(alpha) - if cl is None: - cl = np.zeros_like(self.alpha) - if cd is None: - cd = np.zeros_like(self.alpha) - if cm is None: - cm = np.zeros_like(self.alpha) - self.cl = np.array(cl) - self.cd = np.array(cd) - self.cm = np.array(cm) - if radians is None: - # If the max alpha is above pi, most likely we are in degrees - self._radians = np.mean(np.abs(self.alpha)) <= np.pi / 2 - else: - self._radians = radians - - # NOTE: method needs to be in harmony for linear_slope and the one used in cl_fully_separated - if compute_params: - self._linear_slope, self._alpha0 = self.cl_linear_slope(method=cl_lin_method) - if not self._cl_fs_lock: - self.cl_fully_separated(method=cl_lin_method) - if not self._cl_inv_lock: - self.cl_inv = self._linear_slope * (self.alpha - self._alpha0) - - def __repr__(self): - s='<{} object>:\n'.format(type(self).__name__) - sunit = 'deg' - if self._radians: - sunit = 'rad' - s+='Parameters:\n' - s+=' - alpha, cl, cd, cm : arrays of size {}\n'.format(len(self.alpha)) - s+=' - Re : {} \n'.format(self.Re) - s+=' - _radians: {} (True if alpha in radians)\n'.format(self._radians) - s+=' - _alpha0: {} [{}]\n'.format(self._alpha0, sunit) - s+=' - _linear_slope: {} [1/{}]\n'.format(self._linear_slope, sunit) - s+='Derived parameters:\n' - s+=' * cl_inv : array of size {} \n'.format(len(self.alpha)) - s+=' * cl_fs : array of size {} \n'.format(len(self.alpha)) - s+=' * fs : array of size {} \n'.format(len(self.alpha)) - s+=' * cl_lin (UNSURE) : array of size {} \n'.format(len(self.alpha)) - s+='Functional parameters:\n' - s+=' * alpha0 : {} [{}]\n'.format(self.alpha0(),sunit) - s+=' * cl_linear_slope : {} [1/{}]\n'.format(self.cl_linear_slope()[0],sunit) - s+=' * cl_max : {} \n'.format(self.cl_max()) - s+=' * unsteadyParams : {} \n'.format(self.unsteadyParams()) - s+='Useful functions: cl_interp, cd_interp, cm_interp, fs_interp \n' - s+=' cl_fs_interp, cl_inv_interp, \n' - s+=' interpolant \n' - s+=' plot, extrapolate\n' - return s - - - # --- Potential read only properties - @property - def cl_inv(self): - if self._cl_inv is None: - self.cl_fully_separated() # computes cl_fs, cl_inv and fs - return self._cl_inv - @cl_inv.setter - def cl_inv(self, cl_inv): - if self._cl_inv_lock: - raise Exception('Cl_inv was set by user, cannot modify it') - else: - self._cl_inv = cl_inv - - @property - def cl_fs(self): - if self._cl_fs is None: - self.cl_fully_separated() # computes cl_fs, cl_inv and fs - return self._cl_fs - @cl_fs.setter - def cl_fs(self, cl_fs): - if self._cl_fs_lock: - raise Exception('cl_fs was set by user, cannot modify it') - else: - self._cl_fs = cl_fs - - @property - def fs(self): - if self._fs is None: - self.cl_fully_separated() # computes fs, cl_inv and fs - return self._fs - @fs.setter - def fs(self, fs): - if self._fs_lock: - raise Exception('fs was set by user, cannot modify it') - else: - self._fs = fs - - - # --- Interpolants - def cl_interp(self, alpha): - return np.interp(alpha, self.alpha, self.cl) - - def cd_interp(self, alpha): - return np.interp(alpha, self.alpha, self.cd) - - def cm_interp(self, alpha): - return np.interp(alpha, self.alpha, self.cm) - - def cn_interp(self, alpha): - return np.interp(alpha, self.alpha, self.cn) - - def fs_interp(self, alpha): - return np.interp(alpha, self.alpha, self.fs) - - def cl_fs_interp(self, alpha): - return np.interp(alpha, self.alpha, self.cl_fs) - - def cl_inv_interp(self, alpha): - return np.interp(alpha, self.alpha, self.cl_inv) - - def interpolant(self, variables=['cl', 'cd', 'cm'], radians=None): - """ - Create an interpolant `f` for a set of requested variables with alpha as input variable: - var_array = f(alpha) - - This is convenient to quickly interpolate multiple polar variables at once. - The interpolant returns an array corresponding to the interpolated values of the - requested `variables`, in the same order as they are requested. - - When alpha is a scalar, f(alpha) is of length nVar = len(variables) - When alpha is an array of length n, f(alpha) is of shape (nVar x n) - - INPUTS: - - variables: list of variables that will be returned by the interpolant - Allowed values: ['alpha', 'cl', 'cd', 'cm', 'fs', 'cl_inv', 'cl_fs'] - - radians: enforce whether `alpha` is in radians or degrees - - OUTPUTS: - - f: interpolant - - """ - from scipy.interpolate import interp1d - - MAP = {'alpha':self.alpha, 'cl':self.cl, 'cd':self.cd, 'cm':self.cm, - 'cl_inv':self.cl_inv, 'cl_fs':self.cl_fs, 'fs':self.fs} - - if radians is None: - radians = self._radians - - # Create a Matrix with columns requested by user - #polCols = polar.columns.values[1:] - M = self.alpha # we start by alpha for convenience - for v in variables: - v = v.lower().strip() - if v not in MAP.keys(): - raise Exception('Polar: cannot create an interpolant for variable `{}`, allowed variables: {}'.format(v, MAP.keys())) - M = np.column_stack( (M, MAP[v]) ) - # We remove alpha - M = M[:,1:] - # Determine the "x" value for the interpolant (alpha in rad or deg) - if radians == self._radians: - alpha = self.alpha # the user requested the same as what we have - else: - if radians: - alpha = np.radians(self.alpha) - else: - alpha = np.degrees(self.alpha) - # Create the interpolant for requested variables with alpha as "x" axis - f = interp1d(alpha, M.T) - return f - - @property - def cn(self): - """ returns : Cl cos(alpha) + Cd sin(alpha) - NOT: Cl cos(alpha) + (Cd-Cd0) sin(alpha) - """ - if self._radians: - return self.cl * np.cos(self.alpha) + self.cd * np.sin(self.alpha) - else: - return self.cl * np.cos(self.alpha * np.pi / 180) + self.cd * np.sin(self.alpha * np.pi / 180) - - @property - def cl_lin(self): # TODO consider removing - print('[WARN] Polar: cl_lin is a bit of a weird property. Not sure if it will be kept') - if self.cl_inv is None: - self.cl_fully_separated() # computes cl_fs, cl_inv and fs - return self.cl_inv - #if (self._linear_slope is None) and (self._alpha0 is None): - # self._linear_slope,self._alpha0=self.cl_linear_slope() - #return self._linear_slope*(self.alpha-self._alpha0) - - @classmethod - def fromfile(cls, filename, fformat='auto', compute_params=False, to_radians=False): - """Constructor based on a filename - # NOTE: this is legacy - """ - print('[WARN] Polar: "fromfile" is depreciated and will be removed in a future release') - return cls(filename, fformat=fformat, compute_params=compute_params, radians=to_radians) - - def correction3D( - self, - r_over_R, - chord_over_r, - tsr, - lift_method="DuSelig", - drag_method="None", - blending_method="linear_25_45", - max_cl_corr=0.25, - alpha_max_corr=None, - alpha_linear_min=None, - alpha_linear_max=None, - ): - """Applies 3-D corrections for rotating sections from the 2-D data. - - Parameters - ---------- - r_over_R : float - local radial position / rotor radius - chord_over_r : float - local chord length / local radial location - tsr : float - tip-speed ratio - lift_method : string, optional - flag switching between Du-Selig and Snel corrections - drag_method : string, optional - flag switching between Eggers correction and None - blending_method: string: - blending method used to blend from 3D to 2D polar. default 'linear_25_45' - max_cl_corr: float, optional - maximum correction allowed, default is 0.25. - alpha_max_corr : float, optional (deg) - maximum angle of attack to apply full correction - alpha_linear_min : float, optional (deg) - angle of attack where linear portion of lift curve slope begins - alpha_linear_max : float, optional (deg) - angle of attack where linear portion of lift curve slope ends - - Returns - ------- - polar : Polar - A new Polar object corrected for 3-D effects - - Notes - ----- - The Du-Selig method :cite:`Du1998A-3-D-stall-del` is used to correct lift, and - the Eggers method :cite:`Eggers-Jr2003An-assessment-o` is used to correct drag. - - """ - - if alpha_max_corr == None and alpha_linear_min == None and alpha_linear_max == None: - alpha_linear_region, _, cl_slope, alpha0 = self.linear_region() - alpha_linear_min = alpha_linear_region[0] - alpha_linear_max = alpha_linear_region[-1] - _, alpha_max_corr = self.cl_max() - find_linear_region = False - elif alpha_max_corr * alpha_linear_min * alpha_linear_max == None: - raise Exception( - "Define all or none of the keyword arguments alpha_max_corr, alpha_linear_min, and alpha_linear_max" - ) - else: - find_linear_region = True - - # rename and convert units for convenience - if self._radians: - alpha = alpha - else: - alpha = np.radians(self.alpha) - cl_2d = self.cl - cd_2d = self.cd - alpha_max_corr = np.radians(alpha_max_corr) - alpha_linear_min = np.radians(alpha_linear_min) - alpha_linear_max = np.radians(alpha_linear_max) - - # parameters in Du-Selig model - a = 1 - b = 1 - d = 1 - lam = tsr / (1 + tsr ** 2) ** 0.5 # modified tip speed ratio - if np.abs(r_over_R)>1e-4: - expon = d / lam / r_over_R - else: - expon = d / lam / 1e-4 - - # find linear region with numpy polyfit - if find_linear_region: - idx = np.logical_and(alpha >= alpha_linear_min, alpha <= alpha_linear_max) - p = np.polyfit(alpha[idx], cl_2d[idx], 1) - cl_slope = p[0] - alpha0 = -p[1] / cl_slope - else: - cl_slope = np.degrees(cl_slope) - alpha0 = np.radians(alpha0) - - if lift_method == "DuSelig": - # Du-Selig correction factor - if np.abs(cl_slope)>1e-4: - fcl = ( - 1.0 - / cl_slope - * (1.6 * chord_over_r / 0.1267 * (a - chord_over_r ** expon) / (b + chord_over_r ** expon) - 1) - ) - # Force fcl to stay non-negative - if fcl < 0.: - fcl = 0. - else: - fcl=0.0 - elif lift_method == "Snel": - # Snel correction - fcl = 3.0 * chord_over_r ** 2.0 - else: - raise Exception("The keyword argument lift_method (3d correction for lift) can only be DuSelig or Snel.") - - # 3D correction for lift - cl_linear = cl_slope * (alpha - alpha0) - cl_corr = fcl * (cl_linear - cl_2d) - # Bound correction +/- max_cl_corr - cl_corr = np.clip(cl_corr, -max_cl_corr, max_cl_corr) - # Blending - if blending_method == "linear_25_45": - # We adjust fully between +/- 25 deg, linearly to +/- 45 - adj_alpha = np.radians([-180, -45, -25, 25, 45, 180]) - adj_value = np.array([0, 0, 1, 1, 0, 0]) - adj = np.interp(alpha, adj_alpha, adj_value) - elif blending_method == "heaviside": - # Apply (arbitrary!) smoothing function to smoothen the 3D corrections and zero them out away from alpha_max_corr - delta_corr = 10 - y1 = 1.0 - smooth_heaviside(alpha, k=1, rng=(alpha_max_corr, alpha_max_corr + np.deg2rad(delta_corr))) - y2 = smooth_heaviside(alpha, k=1, rng=(0.0, np.deg2rad(delta_corr))) - adj = y1 * y2 - else: - raise NotImplementedError("blending :", blending_method) - cl_3d = cl_2d + cl_corr * adj - - # Eggers 2003 correction for drag - if drag_method == "Eggers": - delta_cd = cl_corr * (np.sin(alpha) - 0.12 * np.cos(alpha)) / (np.cos(alpha) + 0.12 * np.sin(alpha)) * adj - elif drag_method == "None": - delta_cd = 0.0 - else: - raise Exception("The keyword argument darg_method (3d correction for drag) can only be Eggers or None.") - - cd_3d = cd_2d + delta_cd - - return type(self)(Re=self.Re, alpha=np.degrees(alpha), cl=cl_3d, cd=cd_3d, cm=self.cm, radians=False) - - def extrapolate(self, cdmax, AR=None, cdmin=0.001, nalpha=15): - """Extrapolates force coefficients up to +/- 180 degrees using Viterna's method - :cite:`Viterna1982Theoretical-and`. - - Parameters - ---------- - cdmax : float - maximum drag coefficient - AR : float, optional - aspect ratio = (rotor radius / chord_75% radius) - if provided, cdmax is computed from AR - cdmin: float, optional - minimum drag coefficient. used to prevent negative values that can sometimes occur - with this extrapolation method - nalpha: int, optional - number of points to add in each segment of Viterna method - - Returns - ------- - polar : Polar - a new Polar object - - Notes - ----- - If the current polar already supplies data beyond 90 degrees then - this method cannot be used in its current form and will just return itself. - - If AR is provided, then the maximum drag coefficient is estimated as - - >>> cdmax = 1.11 + 0.018*AR - - - """ - - if cdmin < 0: - raise Exception("cdmin cannot be < 0") - - # lift coefficient adjustment to account for assymetry - cl_adj = 0.7 - - # estimate CD max - if AR is not None: - cdmax = 1.11 + 0.018 * AR - self.cdmax = max(max(self.cd), cdmax) - - # extract matching info from ends - alpha_high = np.radians(self.alpha[-1]) - cl_high = self.cl[-1] - cd_high = self.cd[-1] - cm_high = self.cm[-1] - - alpha_low = np.radians(self.alpha[0]) - cl_low = self.cl[0] - cd_low = self.cd[0] - - if alpha_high > np.pi / 2: - raise Exception("alpha[-1] > pi/2") - return self - if alpha_low < -np.pi / 2: - raise Exception("alpha[0] < -pi/2") - return self - - # parameters used in model - sa = np.sin(alpha_high) - ca = np.cos(alpha_high) - self.A = (cl_high - self.cdmax * sa * ca) * sa / ca ** 2 - self.B = (cd_high - self.cdmax * sa * sa) / ca - - # alpha_high <-> 90 - alpha1 = np.linspace(alpha_high, np.pi / 2, nalpha) - alpha1 = alpha1[1:] # remove first element so as not to duplicate when concatenating - cl1, cd1 = self.__Viterna(alpha1, 1.0) - - # 90 <-> 180-alpha_high - alpha2 = np.linspace(np.pi / 2, np.pi - alpha_high, nalpha) - alpha2 = alpha2[1:] - cl2, cd2 = self.__Viterna(np.pi - alpha2, -cl_adj) - - # 180-alpha_high <-> 180 - alpha3 = np.linspace(np.pi - alpha_high, np.pi, nalpha) - alpha3 = alpha3[1:] - cl3, cd3 = self.__Viterna(np.pi - alpha3, 1.0) - cl3 = (alpha3 - np.pi) / alpha_high * cl_high * cl_adj # override with linear variation - - if alpha_low <= -alpha_high: - alpha4 = [] - cl4 = [] - cd4 = [] - alpha5max = alpha_low - else: - # -alpha_high <-> alpha_low - # Note: this is done slightly differently than AirfoilPrep for better continuity - alpha4 = np.linspace(-alpha_high, alpha_low, nalpha) - alpha4 = alpha4[1:-2] # also remove last element for concatenation for this case - cl4 = -cl_high * cl_adj + (alpha4 + alpha_high) / (alpha_low + alpha_high) * (cl_low + cl_high * cl_adj) - cd4 = cd_low + (alpha4 - alpha_low) / (-alpha_high - alpha_low) * (cd_high - cd_low) - alpha5max = -alpha_high - - # -90 <-> -alpha_high - alpha5 = np.linspace(-np.pi / 2, alpha5max, nalpha) - alpha5 = alpha5[1:] - if alpha_low == -alpha_high: - alpha5 = alpha5[:-1] - cl5, cd5 = self.__Viterna(-alpha5, -cl_adj) - - # -180+alpha_high <-> -90 - alpha6 = np.linspace(-np.pi + alpha_high, -np.pi / 2, nalpha) - alpha6 = alpha6[1:] - cl6, cd6 = self.__Viterna(alpha6 + np.pi, cl_adj) - - # -180 <-> -180 + alpha_high - alpha7 = np.linspace(-np.pi, -np.pi + alpha_high, nalpha) - cl7, cd7 = self.__Viterna(alpha7 + np.pi, 1.0) - cl7 = (alpha7 + np.pi) / alpha_high * cl_high * cl_adj # linear variation - - alpha = np.concatenate((alpha7, alpha6, alpha5, alpha4, np.radians(self.alpha), alpha1, alpha2, alpha3)) - cl = np.concatenate((cl7, cl6, cl5, cl4, self.cl, cl1, cl2, cl3)) - cd = np.concatenate((cd7, cd6, cd5, cd4, self.cd, cd1, cd2, cd3)) - - cd = np.maximum(cd, cdmin) # don't allow negative drag coefficients - - # Setup alpha and cm to be used in extrapolation - cm1_alpha = np.floor(self.alpha[0] / 10.0) * 10.0 - cm2_alpha = np.ceil(self.alpha[-1] / 10.0) * 10.0 - if cm2_alpha == self.alpha[-1]: - self.alpha = self.alpha[:-1] - self.cm = self.cm[:-1] - alpha_num = abs(int((-180.0 - cm1_alpha) / 10.0 - 1)) - alpha_cm1 = np.linspace(-180.0, cm1_alpha, alpha_num) - alpha_cm2 = np.linspace(cm2_alpha, 180.0, int((180.0 - cm2_alpha) / 10.0 + 1)) - alpha_cm = np.concatenate( - (alpha_cm1, self.alpha, alpha_cm2) - ) # Specific alpha values are needed for cm function to work - cm1 = np.zeros(len(alpha_cm1)) - cm2 = np.zeros(len(alpha_cm2)) - cm_ext = np.concatenate((cm1, self.cm, cm2)) - if np.count_nonzero(self.cm) > 0: - cmCoef = self.__CMCoeff(cl_high, cd_high, cm_high) # get cm coefficient - cl_cm = np.interp(alpha_cm, np.degrees(alpha), cl) # get cl for applicable alphas - cd_cm = np.interp(alpha_cm, np.degrees(alpha), cd) # get cd for applicable alphas - alpha_low_deg = self.alpha[0] - alpha_high_deg = self.alpha[-1] - for i in range(len(alpha_cm)): - cm_new = self.__getCM(i, cmCoef, alpha_cm, cl_cm, cd_cm, alpha_low_deg, alpha_high_deg) - if cm_new is None: - pass # For when it reaches the range of cm's that the user provides - else: - cm_ext[i] = cm_new - cm = np.interp(np.degrees(alpha), alpha_cm, cm_ext) - return type(self)(self.Re, np.degrees(alpha), cl, cd, cm) - - - - - def __Viterna(self, alpha, cl_adj): - """private method to perform Viterna extrapolation""" - - alpha = np.maximum(alpha, 0.0001) # prevent divide by zero - - cl = self.cdmax / 2 * np.sin(2 * alpha) + self.A * np.cos(alpha) ** 2 / np.sin(alpha) - cl = cl * cl_adj - - cd = self.cdmax * np.sin(alpha) ** 2 + self.B * np.cos(alpha) - - return cl, cd - - def __CMCoeff(self, cl_high, cd_high, cm_high): - """private method to obtain CM0 and CMCoeff""" - - found_zero_lift = False - - for i in range(len(self.cm) - 1): - if abs(self.alpha[i]) < 20.0 and self.cl[i] <= 0 and self.cl[i + 1] >= 0: - p = -self.cl[i] / (self.cl[i + 1] - self.cl[i]) - cm0 = self.cm[i] + p * (self.cm[i + 1] - self.cm[i]) - found_zero_lift = True - break - - if not found_zero_lift: - p = -self.cl[0] / (self.cl[1] - self.cl[0]) - cm0 = self.cm[0] + p * (self.cm[1] - self.cm[0]) - self.cm0 = cm0 - alpha_high = np.radians(self.alpha[-1]) - XM = (-cm_high + cm0) / (cl_high * np.cos(alpha_high) + cd_high * np.sin(alpha_high)) - cmCoef = (XM - 0.25) / np.tan((alpha_high - np.pi / 2)) - return cmCoef - - def __getCM(self, i, cmCoef, alpha, cl_ext, cd_ext, alpha_low_deg, alpha_high_deg): - """private method to extrapolate Cm""" - - cm_new = 0 - if alpha[i] >= alpha_low_deg and alpha[i] <= alpha_high_deg: - return - if alpha[i] > -165 and alpha[i] < 165: - if abs(alpha[i]) < 0.01: - cm_new = self.cm0 - else: - if alpha[i] > 0: - x = cmCoef * np.tan(np.radians(alpha[i]) - np.pi / 2) + 0.25 - cm_new = self.cm0 - x * ( - cl_ext[i] * np.cos(np.radians(alpha[i])) + cd_ext[i] * np.sin(np.radians(alpha[i])) - ) - else: - x = cmCoef * np.tan(-np.radians(alpha[i]) - np.pi / 2) + 0.25 - cm_new = -( - self.cm0 - - x * (-cl_ext[i] * np.cos(-np.radians(alpha[i])) + cd_ext[i] * np.sin(-np.radians(alpha[i]))) - ) - else: - if alpha[i] == 165: - cm_new = -0.4 - elif alpha[i] == 170: - cm_new = -0.5 - elif alpha[i] == 175: - cm_new = -0.25 - elif alpha[i] == 180: - cm_new = 0 - elif alpha[i] == -165: - cm_new = 0.35 - elif alpha[i] == -170: - cm_new = 0.4 - elif alpha[i] == -175: - cm_new = 0.2 - elif alpha[i] == -180: - cm_new = 0 - else: - print("Angle encountered for which there is no CM table value " "(near +/-180 deg). Program will stop.") - return cm_new - - def unsteadyParams(self, window_offset=None, nMin=720): - """compute unsteady aero parameters used in AeroDyn input file - - TODO Questions to solve: - - Is alpha 0 defined at zero lift or zero Cn? - - Are Cn1 and Cn2 the stall points of Cn or the regions where Cn deviates from the linear region? - - Is Cd0 Cdmin? - - Should Cd0 be used in cn? - - Should the TSE points be used? - - If so, should we use the linear points or the points on the cn-curve - - Should we prescribe alpha0cn when determining the slope? - NOTE: - alpha0Cl and alpha0Cn are usually within 0.005 deg of each other, less thatn 0.3% difference, with alpha0Cn > alpha0Cl. The difference increase thought towards the root of the blade - - Using the f=0.7 points doesnot change much for the lower point - but it has quite an impact on the upper point - % - - Parameters - ---------- - window_dalpha0: the linear region will be looked for in the region alpha+window_offset - - Returns - ------- - alpha0 : lift or 0 cn (TODO TODO) angle of attack (deg) - alpha1 : angle of attack at f=0.7 (approximately the stall angle) for AOA>alpha0 (deg) - alpha2 : angle of attack at f=0.7 (approximately the stall angle) for AOA= alpha_linear_min, - alpha <= alpha_linear_max) - - # checks for inppropriate data (like cylinders) - if len(idx) < 10 or len(np.unique(cl)) < 10: - return 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,0.0 - - # linear fit - p = np.polyfit(alpha[idx], cn[idx], 1) - m = p[0] - alpha0 = -p[1]/m - - # find cn at "stall onset" locations, when cn deviates from the linear region - alphaUpper = np.radians(np.arange(40.0)) - alphaLower = np.radians(np.arange(5.0, -40.0, -1)) - cnUpper = np.interp(alphaUpper, alpha, cn) - cnLower = np.interp(alphaLower, alpha, cn) - cnLinearUpper = m*(alphaUpper - alpha0) - cnLinearLower = m*(alphaLower - alpha0) - deviation = 0.05 # threshold for cl in detecting stall - - alphaU = np.interp(deviation, cnLinearUpper-cnUpper, alphaUpper) - alphaL = np.interp(deviation, cnLower-cnLinearLower, alphaLower) - - # compute cn at stall according to linear fit - cnStallUpper = m*(alphaU-alpha0) - cnStallLower = m*(alphaL-alpha0) - - # find min cd - minIdx = cd.argmin() - - # return: control setting, stall angle, alpha for 0 cn, cn slope, - # cn at stall+, cn at stall-, alpha for min CD, min(CD) - return (0.0, np.degrees(alphaU), np.degrees(alpha0), m, - cnStallUpper, cnStallLower, alpha[minIdx], cd[minIdx]) - - def plot(self): - """plot cl/cd/cm polar - - Returns - ------- - figs : list of figure handles - - """ - import matplotlib.pyplot as plt - - p = self - - figs = [] - - # plot cl - fig = plt.figure() - figs.append(fig) - ax = fig.add_subplot(111) - plt.plot(p.alpha, p.cl, label="Re = " + str(p.Re / 1e6) + " million") - ax.set_xlabel("angle of attack (deg)") - ax.set_ylabel("lift coefficient") - ax.legend(loc="best") - - # plot cd - fig = plt.figure() - figs.append(fig) - ax = fig.add_subplot(111) - ax.plot(p.alpha, p.cd, label="Re = " + str(p.Re / 1e6) + " million") - ax.set_xlabel("angle of attack (deg)") - ax.set_ylabel("drag coefficient") - ax.legend(loc="best") - - # plot cm - fig = plt.figure() - figs.append(fig) - ax = fig.add_subplot(111) - ax.plot(p.alpha, p.cm, label="Re = " + str(p.Re / 1e6) + " million") - ax.set_xlabel("angle of attack (deg)") - ax.set_ylabel("moment coefficient") - ax.legend(loc="best") - - return figs - - def alpha0(self, window=None): - """ Finds alpha0, angle of zero lift """ - if window is None: - if self._radians: - window = [np.radians(-30), np.radians(30)] - else: - window = [-30, 30] - window = _alpha_window_in_bounds(self.alpha, window) - # print(window) - # print(self.alpha) - # print(self._radians) - # print(self.cl) - # print(window) - - return _find_alpha0(self.alpha, self.cl, window) - - def linear_region(self, delta_alpha0=4, method_linear_fit="max"): - cl_slope, alpha0 = self.cl_linear_slope() - alpha_linear_region = np.asarray(_find_TSE_region(self.alpha, self.cl, cl_slope, alpha0, deviation=0.05)) - cl_linear_region = (alpha_linear_region - alpha0) * cl_slope - - return alpha_linear_region, cl_linear_region, cl_slope, alpha0 - - def cl_max(self, window=None): - """ Finds cl_max , returns (Cl_max,alpha_max) """ - if window is None: - if self._radians: - window = [np.radians(-40), np.radians(40)] - else: - window = [-40, 40] - - # Constant case or only one value - if np.all(self.cl == self.cl[0]) or len(self.cl) == 1: - return self.cl, self.alpha - - # Ensuring window is within our alpha values - window = _alpha_window_in_bounds(self.alpha, window) - - # Finding max within window - iwindow = np.where((self.alpha >= window[0]) & (self.alpha <= window[1])) - alpha = self.alpha[iwindow] - cl = self.cl[iwindow] - i_max = np.argmax(cl) - if i_max == len(iwindow): - raise Exception( - "Max cl is at the window boundary ([{};{}]), increase window (TODO automatically)".format( - window[0], window[1] - ) - ) - pass - cl_max = cl[i_max] - alpha_cl_max = alpha[i_max] - # alpha_zc,i_zc = _zero_crossings(x=alpha,y=cl,direction='up') - # if len(alpha_zc)>1: - # raise Exception('Cannot find alpha0, {} zero crossings of Cl in the range of alpha values: [{} {}] '.format(len(alpha_zc),window[0],window[1])) - # elif len(alpha_zc)==0: - # raise Exception('Cannot find alpha0, no zero crossing of Cl in the range of alpha values: [{} {}] '.format(window[0],window[1])) - # - # alpha0=alpha_zc[0] - return cl_max, alpha_cl_max - - - def cl_linear_slope(self, window=None, method="optim", radians=False): - """Find slope of linear region - Outputs: a 2-tuplet of: - slope (in inverse units of alpha, or in radians-1 if radians=True) - alpha_0 in the same unit as alpha, or in radians if radians=True - """ - return cl_linear_slope(self.alpha, self.cl, window=window, method=method, inputInRadians=self._radians, radians=radians) - - def cl_fully_separated(self, method='max'): - alpha0 = self.alpha0() - cla,_, = self.cl_linear_slope(method=method) - if cla == 0: - cl_fs = self.cl # when fs ==1 - fs = self.cl * 0 - else: - cl_ratio = self.cl / (cla * (self.alpha - alpha0)) - cl_ratio[np.where(cl_ratio < 0)] = 0 - if self._fs_lock: - fs = self.fs - else: - fs = (2 * np.sqrt(cl_ratio) - 1) ** 2 - fs[np.where(fs < 1e-15)] = 0 - # Initialize to linear region (in fact only at singularity, where fs=1) - cl_fs = self.cl / 2.0 # when fs ==1 - # Region where fs<1, merge - I = np.where(fs < 1) - cl_fs[I] = (self.cl[I] - cla * (self.alpha[I] - alpha0) * fs[I]) / (1.0 - fs[I]) - # Outside region, use steady data - iHig = np.ma.argmin(np.ma.MaskedArray(fs, self.alpha < alpha0)) - iLow = np.ma.argmin(np.ma.MaskedArray(fs, self.alpha > alpha0)) - cl_fs[0 : iLow + 1] = self.cl[0 : iLow + 1] - cl_fs[iHig + 1 : -1] = self.cl[iHig + 1 : -1] - - # Ensuring everything is consistent (but we cant with user provided values..) - cl_inv = cla * (self.alpha - alpha0) - if not self._fs_lock: - fs = (self.cl - cl_fs) / (cl_inv - cl_fs + 1e-10) - fs[np.where(fs < 1e-15)] = 0 - fs[np.where(fs > 1)] = 1 - # Storing - self.fs = fs - self.cl_fs = cl_fs - if not self._cl_inv_lock: - self.cl_inv = cl_inv - return cl_fs, fs - - def dynaStallOye_DiscreteStep(self, alpha_t, tau, fs_prev, dt): - # compute aerodynamical force from aerodynamic data - # interpolation from data - fs = self.fs_interp(alpha_t) - Clinv = self.cl_inv_interp(alpha_t) - Clfs = self.cl_fs_interp(alpha_t) - # dynamic stall model - fs_dyn = fs + (fs_prev - fs) * np.exp(-dt / tau) - Cl = fs_dyn * Clinv + (1 - fs_dyn) * Clfs - return Cl, fs_dyn - - def toAeroDyn(self, filenameOut=None, templateFile=None, Re=1.0, comment=None, unsteadyParams=True): - from pyFAST.input_output.fast_input_file import ADPolarFile - cleanComments=comment is not None - # Read a template file for AeroDyn polars - if templateFile is None: - MyDir=os.path.dirname(__file__) - templateFile = os.path.join(MyDir,'../../data/NREL5MW/5MW_Baseline/Airfoils/Cylinder1.dat') - cleanComments=True - if isinstance(templateFile, ADPolarFile): - ADpol = templateFile - else: - ADpol = ADPolarFile(templateFile) - - - - # --- Updating the AD polar file - ADpol['Re'] = Re # TODO UNKNOWN - - # Compute unsteady parameters - if unsteadyParams: - (alpha0,alpha1,alpha2,cnSlope,cn1,cn2,cd0,cm0)=self.unsteadyParams() - - # Setting unsteady parameters - if np.isnan(alpha0): - ADpol['alpha0'] = 0 - else: - ADpol['alpha0'] = np.around(alpha0, 4) - ADpol['alpha1'] = np.around(alpha1, 4) # TODO approximate - ADpol['alpha2'] = np.around(alpha2, 4) # TODO approximate - ADpol['C_nalpha'] = np.around(cnSlope ,4) - ADpol['Cn1'] = np.around(cn1, 4) # TODO verify - ADpol['Cn2'] = np.around(cn2, 4) - ADpol['Cd0'] = np.around(cd0, 4) - ADpol['Cm0'] = np.around(cm0, 4) - - # Setting polar - PolarTable = np.column_stack((self.alpha, self.cl, self.cd, self.cm)) - ADpol['NumAlf'] = self.cl.shape[0] - ADpol['AFCoeff'] = np.around(PolarTable, 5) - - # --- Comment - if cleanComments: - ADpol.comment='' # remove comment from template - if comment is not None: - ADpol.comment=comment - - if filenameOut is not None: - ADpol.write(filenameOut) - return ADpol - - - - -def blend(pol1, pol2, weight): - """Blend this polar with another one with the specified weighting - - Parameters - ---------- - pol1: (class Polar or array) first polar - pol2: (class Polar or array) second polar - weight: (float) blending parameter between 0 (first polar) and 1 (second polar) - - Returns - ------- - polar : (class Polar or array) a blended Polar - """ - bReturnObject = False - if hasattr(pol1, "cl"): - bReturnObject = True - alpha1 = pol1.alpha - M1 = np.zeros((len(alpha1), 4)) - M1[:, 0] = pol1.alpha - M1[:, 1] = pol1.cl - M1[:, 2] = pol1.cd - M1[:, 3] = pol1.cm - else: - alpha1 = pol1[:, 0] - M1 = pol1 - if hasattr(pol2, "cl"): - bReturnObject = True - alpha2 = pol2.alpha - M2 = np.zeros((len(alpha2), 4)) - M2[:, 0] = pol2.alpha - M2[:, 1] = pol2.cl - M2[:, 2] = pol2.cd - M2[:, 3] = pol2.cm - else: - alpha2 = pol2[:, 0] - M2 = pol2 - # Define range of alpha, merged values and truncate if one set beyond the other range - alpha = np.union1d(alpha1, alpha2) - min_alpha = max(alpha1.min(), alpha2.min()) - max_alpha = min(alpha1.max(), alpha2.max()) - alpha = alpha[np.logical_and(alpha >= min_alpha, alpha <= max_alpha)] - # alpha = np.array([a for a in alpha if a >= min_alpha and a <= max_alpha]) - - # Creating new output matrix to store polar - M = np.zeros((len(alpha), M1.shape[1])) - M[:, 0] = alpha - - # interpolate to new alpha and linearly blend - for j in np.arange(1, M.shape[1]): - v1 = np.interp(alpha, alpha1, M1[:, j]) - v2 = np.interp(alpha, alpha2, M2[:, j]) - M[:, j] = (1 - weight) * v1 + weight * v2 - if hasattr(pol1, "Re"): - Re = pol1.Re + weight * (pol2.Re - pol1.Re) - else: - Re = np.nan - - if bReturnObject: - return type(pol1)(Re=Re, alpha=M[:, 0], cl=M[:, 1], cd=M[:, 2], cm=M[:, 3]) - else: - return M - - -def thicknessinterp_from_one_set(thickness, polarList, polarThickness): - """Returns a set of interpolated polars from one set of polars at known thicknesses and a list of thickness - The nearest polar is used when the thickness is beyond the range of values of the input polars. - """ - thickness = np.asarray(thickness) - polarThickness = np.asarray(polarThickness) - polarList = np.asarray(polarList) - tmax_in = np.max(thickness) - tmax_pol = np.max(polarThickness) - if (tmax_in > 1.2 and tmax_pol <= 1.2) or (tmax_in <= 1.2 and tmax_pol > 1.2): - raise Exception( - "Thicknesses of polars and input thickness need to be both in percent ([0-120]) or in fraction ([0-1.2])" - ) - - # sorting thickness - Isort = np.argsort(polarThickness) - polarThickness = polarThickness[Isort] - polarList = polarList[Isort] - - polars = [] - for it, t in enumerate(thickness): - ihigh = len(polarThickness) - 1 - for ip, tp in enumerate(polarThickness): - if tp > t: - ihigh = ip - break - ilow = 0 - for ip, tp in reversed(list(enumerate(polarThickness))): - if tp < t: - ilow = ip - break - - if ihigh == ilow: - polars.append(polarList[ihigh]) - print("[WARN] Using nearest polar for section {}, t={} , t_near={}".format(it, t, polarThickness[ihigh])) - else: - if (polarThickness[ilow] > t) or (polarThickness[ihigh] < t): - raise Exception("Implementation Error") - weight = (t - polarThickness[ilow]) / (polarThickness[ihigh] - polarThickness[ilow]) - # print(polarThickness[ilow],'<',t,'<',polarThickness[ihigh],'Weight',weight) - pol = blend(polarList[ilow], polarList[ihigh], weight) - polars.append(pol) - # import matplotlib.pyplot as plt - # fig=plt.figure() - # plt.plot(polarList[ilow][: ,0],polarList[ilow][: ,2],'b',label='thick'+str(polarThickness[ilow])) - # plt.plot(pol[:,0],pol[:,2],'k--',label='thick'+str(t)) - # plt.plot(polarList[ihigh][:,0],polarList[ihigh][:,2],'r',label='thick'+str(polarThickness[ihigh])) - # plt.legend() - # plt.show() - return polars - - -def _alpha_window_in_bounds(alpha, window): - """Ensures that the window of alpha values is within the bounds of alpha - Example: alpha in [-30,30], window=[-20,20] => window=[-20,20] - Example: alpha in [-10,10], window=[-20,20] => window=[-10,10] - Example: alpha in [-30,30], window=[-40,10] => window=[-40,10] - """ - IBef = np.where(alpha <= window[0])[0] - if len(IBef) > 0: - im = IBef[-1] - else: - im = 0 - IAft = np.where(alpha >= window[1])[0] - if len(IAft) > 0: - ip = IAft[0] - else: - ip = len(alpha) - 1 - window = [alpha[im], alpha[ip]] - return window - - -def _find_alpha0(alpha, coeff, window, direction='up', value_if_constant = np.nan): - """Finds the point where coeff(alpha)==0 using interpolation. - The search is narrowed to a window that can be specified by the user. The default window is yet enough for cases that make physical sense. - The angle alpha0 is found by looking at a zero up crossing in this window, and interpolation is used to find the exact location. - """ - # Constant case or only one value - if np.all(abs((coeff - coeff[0])<1e-8)) or len(coeff) == 1: - if coeff[0] == 0: - return 0 - else: - return value_if_constant - # Ensuring window is within our alpha values - window = _alpha_window_in_bounds(alpha, window) - - # Finding zero up-crossing within window - iwindow = np.where((alpha >= window[0]) & (alpha <= window[1])) - alpha = alpha[iwindow] - coeff = coeff[iwindow] - alpha_zc, i_zc, s_zc = _zero_crossings(x=alpha, y=coeff, direction=direction) - - if len(alpha_zc) > 1: - print('WARN: Cannot find alpha0, {} zero crossings of Coeff in the range of alpha values: [{} {}] '.format(len(alpha_zc),window[0],window[1])) - print('>>> Using second zero') - alpha_zc=alpha_zc[1:] - #raise Exception('Cannot find alpha0, {} zero crossings of Coeff in the range of alpha values: [{} {}] '.format(len(alpha_zc),window[0],window[1])) - elif len(alpha_zc) == 0: - raise NoCrossingException('Cannot find alpha0, no zero crossing of Coeff in the range of alpha values: [{} {}] '.format(window[0],window[1])) - - alpha0 = alpha_zc[0] - return alpha0 - - -def _find_TSE_region(alpha, coeff, slope, alpha0, deviation): - """Find the Trailing Edge Separation points, when the coefficient separates from its linear region - These points are defined as the points where the difference is equal to +/- `deviation` - Typically deviation is about 0.05 (absolute value) - The linear region is defined as coeff_lin = slope (alpha-alpha0) - - returns: - a_TSE: values of alpha at the TSE point (upper and lower) - - """ - # How off are we from the linear region - DeltaLin = slope * (alpha - alpha0) - coeff - - # Upper and lower regions - bUpp = alpha >= alpha0 - bLow = alpha <= alpha0 - - # Finding the point where the delta is equal to `deviation` - a_TSEUpp = np.interp(deviation, DeltaLin[bUpp], alpha[bUpp]) - a_TSELow = np.interp(-deviation, DeltaLin[bLow], alpha[bLow]) - return a_TSELow, a_TSEUpp - - -def _find_max_points(alpha, coeff, alpha0, method="inflections"): - """Find upper and lower max points in `coeff` vector. - if `method` is "inflection": - These point are detected from slope changes of `coeff`, positive of negative inflections - The upper stall point is the first point after alpha0 with a "hat" inflection - The lower stall point is the first point below alpha0 with a "v" inflection - """ - if method == "inflections": - dC = np.diff(coeff) - IHatInflections = np.where(np.logical_and.reduce((dC[1:] < 0, dC[0:-1] > 0, alpha[1:-1] > alpha0)))[0] - IVeeInflections = np.where(np.logical_and.reduce((dC[1:] > 0, dC[0:-1] < 0, alpha[1:-1] < alpha0)))[0] - if len(IHatInflections) <= 0: - raise NoStallDetectedException("Not able to detect upper stall point of curve") - if len(IVeeInflections) <= 0: - raise NoStallDetectedException("Not able to detect lower stall point of curve") - a_MaxUpp = alpha[IHatInflections[0] + 1] - c_MaxUpp = coeff[IHatInflections[0] + 1] - a_MaxLow = alpha[IVeeInflections[-1] + 1] - c_MaxLow = coeff[IVeeInflections[-1] + 1] - elif method == "minmax": - iMax = np.argmax(coeff) - iMin = np.argmin(coeff) - a_MaxUpp = alpha[iMax] - c_MaxUpp = coeff[iMax] - a_MaxLow = alpha[iMin] - c_MaxLow = coeff[iMin] - else: - raise NotImplementedError() - return (a_MaxUpp, c_MaxUpp, a_MaxLow, c_MaxLow) - - - - -# --------------------------------------------------------------------------------} -# --- Low-level functions -# --------------------------------------------------------------------------------{ -def fn_fullsep(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl): - """ Function that is zero when f=0 from the Kirchhoff theory """ - cl_linear = cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl) - return cl_linear - 0.25* dclda*(alpha-alpha0) - -def cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl): - """ Linear Cl """ - if alpha > alpha_sl_neg and alpha < alpha_sl_pos : - cl = dclda*(alpha-alpha0) - else: - cl=np.interp(alpha, valpha, vCl) - return cl - -def cl_fullsep(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl, alpha_fs_l, alpha_fs_u): - """ fully separated lift coefficient""" - cl_linear = cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl) - if alpha > alpha_sl_neg and alpha < alpha_sl_pos : - cl = cl_linear*0.5 - else: - fp = f_point(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl, alpha_fs_l, alpha_fs_u) - cl=(cl_linear- dclda*(alpha-alpha0)*fp)/(1-fp) - return cl - -def f_point(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl, alpha_fs_l, alpha_fs_u): - """ separation function - # TODO harmonize with cl_fully_separated maybe? - """ - if dclda==0: - return 0 - if alpha < alpha_fs_l or alpha > alpha_fs_u: - return 0 - else: - cl_linear = cl_lin(alpha, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, valpha, vCl) - xx=cl_linear/(dclda*(alpha-alpha0) + np.sign(cl_linear)*1e-15) - return (2*np.sqrt(xx)-1)**2 - - -def polar_params(alpha, cl, cd, cm): - """ - - alpha in radians - """ - # Treat zero-lift sections separately - zero_offset=1e-15 - x1 = -7*np.pi/180 - x2 = 7*np.pi/180 - y1 = np.interp(x1, alpha, cl) - y2 = np.interp(x2, alpha, cl) - - if (y1maxclp: - alpha_maxclp=alpha_sl_pos - maxclp=dclda - relerr=0. - for k in np.arange(nobs): - x1 = alpha0+(k+1)*dalpha - y1 = np.interp(x1, alpha, cl) - y2 = dclda*(x1-alpha0) - relerr=relerr+(y1-y2)/y2 - relerr=relerr/nobs - move_up= relerr>1e-2 - if move_up: - alpha_sl_pos=alpha_sl_pos-dalpha - alpha_sl_pos=max(alpha_maxclp, alpha_sl_pos) - - # Find negative angle of attack stall limit alpha_sl_neg - alpha_sl_neg=-20*np.pi/180 - move_down=True - maxclp=0. - while move_down: - dalpha=(alpha0-alpha_sl_neg)/nobs - y1=np.interp(alpha_sl_neg, alpha, cl) - dclda=y1/(alpha_sl_neg-alpha0) - if dclda>maxclp: - alpha_maxclp=alpha_sl_neg - maxclp=dclda - relerr=0. - for k in np.arange(nobs): - x1=alpha_sl_neg+(k+1)*dalpha - y1 = np.interp(x1, alpha, cl) - y2=dclda*(x1-alpha0) - relerr=relerr+(y1-y2)/y2 - relerr=relerr/nobs - move_down=relerr>1e-2 - if move_down: - alpha_sl_neg=alpha_sl_neg+dalpha - alpha_sl_neg=min(alpha_maxclp, alpha_sl_neg) - - # Compute the final alpha and dclda (linear lift coefficient slope) values - y1=np.interp(alpha_sl_neg, alpha, cl) - y2=np.interp(alpha_sl_pos, alpha, cl) - alpha0=(y1*alpha_sl_pos-y2*alpha_sl_neg)/(y1-y2) - dclda =(y1-y2)/(alpha_sl_neg-alpha_sl_pos) - - # Find Cd0 and Cm0 - Cd0 = np.interp(alpha0, alpha, cd) - Cm0 = np.interp(alpha0, alpha, cm) - # Find upper surface fully stalled angle of attack alpha_fs_u (Upper limit of the Kirchhoff flat plate solution) - y1=-1. - y2=-1. - delta = np.pi/180 - x2=alpha_sl_pos + delta - while y1*y2>0. and x2+delta0. and x2-delta>-np.pi: - x1=x2 - x2=x1-delta - y1=fn_fullsep(x1, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl) - y2=fn_fullsep(x2, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl) - if y1*y2<0: - alpha_fs_l=(0.-y2)/(y1-y2)*x1+(0.-y1)/(y2-y1)*x2 - else: - alpha_fs_l=-np.pi - - # --- Compute values at all angle of attack - Cl_fully_sep = np.zeros(alpha.shape) - fs = np.zeros(alpha.shape) - Cl_linear = np.zeros(alpha.shape) - for i,al in enumerate(alpha): - Cl_fully_sep[i] = cl_fullsep(al, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl, alpha_fs_l, alpha_fs_u) - fs [i] = f_point (al, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl, alpha_fs_l, alpha_fs_u) - Cl_linear [i] = cl_lin (al, dclda, alpha0, alpha_sl_neg, alpha_sl_pos, alpha, cl) - - p=dict() - p['alpha0'] = alpha0 - p['Cd0'] = Cd0 - p['Cm0'] = Cm0 - p['dclda'] = dclda - p['alpha_fs_l'] = alpha_fs_l - p['alpha_fs_u'] = alpha_fs_u - p['alpha_sl_neg'] = alpha_sl_neg - p['alpha_sl_pos'] = alpha_sl_pos - - return p, Cl_linear, Cl_fully_sep, fs - - - -def cl_linear_slope(alpha, cl, window=None, method="max", nInterp=721, inputInRadians=False, radians=False): - """ - Find slope of linear region - Outputs: a 2-tuplet of: - slope (in inverse units of alpha, or in radians-1 if radians=True) - alpha_0 in the same unit as alpha, or in radians if radians=True - - - INPUTS: - - alpha: angle of attack in radians - - Cl : lift coefficient - - window: [alpha_min, alpha_max]: region when linear slope is sought - - method: 'max', 'optim', 'leastsquare', 'leastsquare_constraint' - - OUTPUTS: - - Cl_alpha, alpha0: lift slope (1/rad) and angle of attack (rad) of zero lift - """ - # --- Return function - def myret(sl, a0): - # wrapper function to return degrees or radians # TODO this should be a function of self._radians - if radians: - if inputInRadians: - return sl, a0 - else: - return np.rad2deg(sl), np.deg2rad(a0) # NOTE: slope needs rad2deg, alpha needs deg2rad - else: - return sl, a0 - - # finding alpha0 # TODO TODO TODO THIS IS NOT NECESSARY - if inputInRadians: - windowAlpha0 = [np.radians(-30), np.radians(30)] - else: - windowAlpha0 = [-30, 30] - windowAlpha0 = _alpha_window_in_bounds(alpha, windowAlpha0) - alpha0 = _find_alpha0(alpha, cl, windowAlpha0) - - # Constant case or only one value - if np.all(cl == cl[0]) or len(cl) == 1: - return myret(0, alpha0) - - if window is None: - if np.nanmin(cl) > 0 or np.nanmax(cl) < 0: - window = [alpha[0], alpha[-1]] - else: - # define a window around alpha0 - if inputInRadians: - window = alpha0 + np.radians(np.array([-5, +20])) - else: - window = alpha0 + np.array([-5, +20]) - - # Ensuring window is within our alpha values - window = _alpha_window_in_bounds(alpha, window) - - if method in ["max", "leastsquare"]: - slope, off = _find_slope(alpha, cl, xi=alpha0, window=window, method=method) - - elif method == "leastsquare_constraint": - slope, off = _find_slope(alpha, cl, x0=alpha0, window=window, method="leastsquare") - - elif method == "optim": - # Selecting range of values within window - idx = np.where((alpha >= window[0]) & (alpha <= window[1]) & ~np.isnan(cl))[0] - cl, alpha = cl[idx], alpha[idx] - # Selecting within the min and max of this window to improve accuracy - imin = np.where(cl == np.min(cl))[0][-1] - idx = np.arange(imin, np.argmax(cl) + 1) - window = [alpha[imin], alpha[np.argmax(cl)]] - cl, alpha = cl[idx], alpha[idx] - # Performing minimization of slope - slope, off = _find_slope(alpha, cl, x0=alpha0, window=None, method="optim") - - else: - raise Exception("Method unknown for lift slope determination: {}".format(method)) - - # --- Safety checks - if len(cl) > 10: - # Looking at slope around alpha 0 to see if we are too far off - slope_FD, off_FD = _find_slope(alpha, cl, xi=alpha0, window=window, method="finitediff_1c") - if abs(slope - slope_FD) / slope_FD * 100 > 50: - #raise Exception('Warning: More than 20% error between estimated slope ({:.4f}) and the slope around alpha0 ({:.4f}). The window for the slope search ([{} {}]) is likely wrong.'.format(slope,slope_FD,window[0],window[-1])) - print('[WARN] More than 20% error between estimated slope ({:.4f}) and the slope around alpha0 ({:.4f}). The window for the slope search ([{} {}]) is likely wrong.'.format(slope,slope_FD,window[0],window[-1])) -# print('slope ',slope,' Alpha range: {:.3f} {:.3f} - nLin {} nMin {} nMax {}'.format(alpha[iStart],alpha[iEnd],len(alpha[iStart:iEnd+1]),nMin,len(alpha))) - return myret(slope, off) - -# --------------------------------------------------------------------------------} -# --- Generic curve handling functions -# --------------------------------------------------------------------------------{ -def _find_slope(x, y, xi=None, x0=None, window=None, method="max", opts=None, nInterp=721): - """Find the slope of a curve at x=xi based on a given method. - INPUTS: - x: array of x values - y: array of y values - xi: point where the slope is to be computed - x0: point where y(x0)=0 - if provided the constraint y(x0)=0 is added. - window: - If a `window` is provided the search is restrained to this region of x values. - Typical windows for airfoils are: window=[alpha0,Clmax], or window=[-5,5]+alpha0 - If window is None, the whole extent is used (window=[min(x),max(x)]) - - The methods available are: - 'max' : returns the maximum slope within the window. Needs `xi` - 'leastsquare': use leastsquare (or polyfit), to fit the curve within the window - 'finitediff_1c': first order centered finite difference. Needs `xi` - 'optim': find the slope by looking at all possible slope values, and try to find an optimal where the length of linear region is maximized. - - returns: - (a,x0): such that the slope is a(x-x0) - (x0=-b/a where y=ax+b) - """ - if window is not None: - x_=x - y_=y - if nInterp is not None: - x_ = np.linspace(x[0], x[-1], max(nInterp,len(x))) # using 0.5deg resolution at least - y_ = np.interp(x_, x, y) - I = np.where(np.logical_and(x_>=window[0],x_<=window[1])) - x = x_[I] - y = y_[I] - - - if len(y) <= 1: - raise Exception('Cannot find slope, two points needed ({} after window selection)'.format(len(y))) - - - if len(y)<4 and method=='optim': - method='leastsquare' - #print('[WARN] Not enought data to find slope with optim method, using leastsquare') - - - if method == "max": - if xi is not None: - I = np.nonzero(x - xi) - yi = np.interp(xi, x, y) - a = max((y[I] - yi) / (x[I] - xi)) - x0 = xi - yi / a - else: - raise Exception("For now xi needs to be set to find a slope with the max method") - - elif method == "finitediff_1c": - # First order centered finite difference - if xi is not None: - # First point strictly before xi - im = np.where(x < xi)[0][-1] - dx = x[im + 1] - x[im - 1] - if np.abs(dx) > 1e-7: - a = (y[im + 1] - y[im - 1]) / dx - yi = np.interp(xi, x, y) - x0 = xi - yi / a - else: - a = np.inf - x0 = xi - #print('a',a) - #print('x0',x0) - #print('yi',yi) - dx=(x[im+1]-x[im]) - if np.abs(dx)>1e-7: - a = ( y[im+1] - y[im] ) / dx - yi = np.interp(xi,x,y) - x0 = xi - yi/a - else: - a=np.inf - x0 = xi - #print('a',a) - #print('x0',x0) - #print('yi',yi) - else: - raise Exception("For now xi needs to be set to find a slope with the finite diff method") - - elif method == "leastsquare": - if x0 is not None: - try: - a = np.linalg.lstsq((x - x0).reshape((-1, 1)), y.reshape((-1, 1)), rcond=None)[0][0][0] - except: - a = np.linalg.lstsq((x - x0).reshape((-1, 1)), y.reshape((-1, 1)))[0][0][0] - else: - p = np.polyfit(x, y, 1) - a = p[0] - x0 = -p[1] / a - elif method == "optim": - if opts is None: - nMin = max(3, int(len(x) / 2)) - else: - nMin = opts["nMin"] - - a, x0, iStart, iEnd = _find_linear_region(x, y, nMin, x0) - - else: - raise NotImplementedError() - return a, x0 - -def _find_linear_region(x, y, nMin, x0=None): - """Find a linear region by computing all possible slopes for all possible extent. - The objective function tries to minimize the error with the linear slope - and maximize the length of the linear region. - nMin is the mimum number of points to be present in the region - If x0 is provided, the function a*(x-x0) is fitted - - returns: - slope : - offset: - iStart: index of start of linear region - iEnd : index of end of linear region - """ - if x0 is not None: - x = x.reshape((-1, 1)) - x0 - y = y.reshape((-1, 1)) - n = len(x) - nMin + 1 - err = np.zeros((n, n)) * np.nan - slp = np.zeros((n, n)) * np.nan - off = np.zeros((n, n)) * np.nan - spn = np.zeros((n, n)) * np.nan - for iStart in range(n): - for j in range(iStart, n): - iEnd = j + nMin - if x0 is not None: - sl = np.linalg.lstsq(x[iStart:iEnd], y[iStart:iEnd], rcond=None)[0][0] - slp[iStart, j] = sl - off[iStart, j] = x0 - y_lin = x[iStart:iEnd] * sl - else: - coefs = np.polyfit(x[iStart:iEnd], y[iStart:iEnd], 1) - slp[iStart, j] = coefs[0] - off[iStart, j] = -coefs[1] / coefs[0] - y_lin = x[iStart:iEnd] * coefs[0] + coefs[1] - err[iStart, j] = np.mean((y[iStart:iEnd] - y_lin) ** 2) - spn[iStart, j] = iEnd - iStart - spn = 1 / (spn - nMin + 1) - err = (err) / (np.nanmax(err)) - obj = np.multiply(spn, err) - obj = err - (iStart, j) = np.unravel_index(np.nanargmin(obj), obj.shape) - iEnd = j + nMin - 1 # note -1 since we return the index here - return slp[iStart, j], off[iStart, j], iStart, iEnd - - -def _zero_crossings(y, x=None, direction=None): - - """ - Find zero-crossing points in a discrete vector, using linear interpolation. - direction: 'up' or 'down', to select only up-crossings or down-crossings - Returns: - x values xzc such that y(yzc)==0 - indexes izc, such that the zero is between y[izc] (excluded) and y[izc+1] (included) - if direction is not provided, also returns: - sign, equal to 1 for up crossing - """ - y = np.asarray(y) - if x is None: - x = np.arange(len(y)) - - deltas = x[1:] - x[0:-1] - if np.any( deltas == 0.0): - I=np.where(deltas==0)[0] - print("[WARN] Some x values are repeated at index {}. Removing them.".format(I)) - x=np.delete(x,I) - y=np.delete(x,I) - if np.any(deltas<0): - raise Exception("x values need to be in ascending order") - - # Indices before zero-crossing - iBef = np.where(y[1:] * y[0:-1] < 0.0)[0] - - # Find the zero crossing by linear interpolation - xzc = x[iBef] - y[iBef] * (x[iBef + 1] - x[iBef]) / (y[iBef + 1] - y[iBef]) - - # Selecting points that are exactly 0 and where neighbor change sign - iZero = np.where(y == 0.0)[0] - iZero = iZero[np.where((iZero > 0) & (iZero < x.size - 1))] - iZero = iZero[np.where(y[iZero - 1] * y[iZero + 1] < 0.0)] - - # Concatenate - xzc = np.concatenate((xzc, x[iZero])) - iBef = np.concatenate((iBef, iZero)) - - # Sort - iSort = np.argsort(xzc) - xzc, iBef = xzc[iSort], iBef[iSort] - - # Return up-crossing, down crossing or both - sign = np.sign(y[iBef + 1] - y[iBef]) - if direction == "up": - I = np.where(sign == 1)[0] - return xzc[I], iBef[I], sign[I] - elif direction == "down": - I = np.where(sign == -1)[0] - return xzc[I], iBef[I], sign[I] - elif direction is not None: - raise Exception("Direction should be either `up` or `down`") - return xzc, iBef, sign - - -def _intersections(x1, y1, x2, y2, plot=False, minDist=1e-6, verbose=False): - """ - INTERSECTIONS Intersections of curves. - Computes the (x,y) locations where two curves intersect. The curves - can be broken with NaNs or have vertical segments. - - Written by: Sukhbinder, https://github.com/sukhbinder/intersection - adapted by E.Branlard to allow for minimum distance between points - License: MIT - usage: - x,y=intersection(x1,y1,x2,y2) - - Example: - a, b = 1, 2 - phi = np.linspace(3, 10, 100) - x1 = a*phi - b*np.sin(phi) - y1 = a - b*np.cos(phi) - - x2=phi - y2=np.sin(phi)+2 - x,y=intersections(x1,y1,x2,y2) - - plt.plot(x1,y1,c='r') - plt.plot(x2,y2,c='g') - plt.plot(x,y,'*k') - plt.show() - - """ - - def _rect_inter_inner(x1, x2): - n1 = x1.shape[0] - 1 - n2 = x2.shape[0] - 1 - X1 = np.c_[x1[:-1], x1[1:]] - X2 = np.c_[x2[:-1], x2[1:]] - S1 = np.tile(X1.min(axis=1), (n2, 1)).T - S2 = np.tile(X2.max(axis=1), (n1, 1)) - S3 = np.tile(X1.max(axis=1), (n2, 1)).T - S4 = np.tile(X2.min(axis=1), (n1, 1)) - return S1, S2, S3, S4 - - def _rectangle_intersection_(x1, y1, x2, y2): - S1, S2, S3, S4 = _rect_inter_inner(x1, x2) - S5, S6, S7, S8 = _rect_inter_inner(y1, y2) - - C1 = np.less_equal(S1, S2) - C2 = np.greater_equal(S3, S4) - C3 = np.less_equal(S5, S6) - C4 = np.greater_equal(S7, S8) - - ii, jj = np.nonzero(C1 & C2 & C3 & C4) - return ii, jj - - ii, jj = _rectangle_intersection_(x1, y1, x2, y2) - n = len(ii) - - dxy1 = np.diff(np.c_[x1, y1], axis=0) - dxy2 = np.diff(np.c_[x2, y2], axis=0) - - T = np.zeros((4, n)) - AA = np.zeros((4, 4, n)) - AA[0:2, 2, :] = -1 - AA[2:4, 3, :] = -1 - AA[0::2, 0, :] = dxy1[ii, :].T - AA[1::2, 1, :] = dxy2[jj, :].T - - BB = np.zeros((4, n)) - BB[0, :] = -x1[ii].ravel() - BB[1, :] = -x2[jj].ravel() - BB[2, :] = -y1[ii].ravel() - BB[3, :] = -y2[jj].ravel() - - for i in range(n): - try: - T[:, i] = np.linalg.solve(AA[:, :, i], BB[:, i]) - except: - T[:, i] = np.NaN - - in_range = (T[0, :] >= 0) & (T[1, :] >= 0) & (T[0, :] <= 1) & (T[1, :] <= 1) - - xy0 = T[2:, in_range] - xy0 = xy0.T - - x = xy0[:, 0] - y = xy0[:, 1] - - # --- Remove "duplicates" - if minDist is not None: - pointKept=[(x[0],y[0])] - pointSkipped=[] - for p in zip(x[1:],y[1:]): - distances = np.array([np.sqrt((p[0]-pk[0])**2 + (p[1]-pk[1])**2) for pk in pointKept]) - if all(distances>minDist): - pointKept.append((p[0],p[1])) - else: - pointSkipped.append((p[0],p[1])) - if verbose: - if len(pointSkipped)>0: - print('Polar:Intersection:Point Kept :', pointKept) - print('Polar:Intersection:Point Skipped:', pointSkipped) - - M = np.array(pointKept) - x = M[:,0] - y = M[:,1] - if plot: - import matplotlib.pyplot as plt - plt.plot(x1,y1,'.',c='r') - plt.plot(x2,y2,'',c='g') - plt.plot(x,y,'*k') - - return x, y - - -def smooth_heaviside(x, k=1, rng=(-np.inf, np.inf), method="exp"): - r""" - Smooth approximation of Heaviside function where the step occurs between rng[0] and rng[1]: - if rng[0]=rng[1])=1 - if rng[0]>rng[1]: then f(=rng[0])=0 - exp: - rng=(-inf,inf): H(x)=[1 + exp(-2kx) ]^-1 - rng=(-1,1): H(x)=[1 + exp(4kx/(x^2-1) ]^-1 - rng=(0,1): H(x)=[1 + exp(k(2x-1)/(x(x-1)) ]^-1 - INPUTS: - x : scalar or vector of real x values \in ]-infty; infty[ - k : float >=1, the higher k the "steeper" the heaviside function - rng: tuple of min and max value such that f(<=min)=0 and f(>=max)=1. - Reversing the range makes the Heaviside function from 1 to 0 instead of 0 to 1 - method: smooth approximation used (e.g. exp or tan) - NOTE: an epsilon is introduced in the denominator to avoid overflow of the exponentail - """ - if k < 1: - raise Exception("k needs to be >=1") - eps = 1e-2 - mn, mx = rng - x = np.asarray(x) - H = np.zeros(x.shape) - if mn < mx: - H[x <= mn] = 0 - H[x >= mx] = 1 - b = np.logical_and(x > mn, x < mx) - else: - H[x <= mx] = 1 - H[x >= mn] = 0 - b = np.logical_and(x < mn, x > mx) - x = x[b] - if method == "exp": - if np.abs(mn) == np.inf and np.abs(mx) == np.inf: - # Infinite support - x[k * x > 100] = 100.0 / k - x[k * x < -100] = -100.0 / k - if mn < mx: - H[b] = 1 / (1 + np.exp(-k * x)) - else: - H[b] = 1 / (1 + np.exp(k * x)) - elif np.abs(mn) != np.inf and np.abs(mx) != np.inf: - n = 4.0 - # Compact support - s = 2.0 / (mx - mn) * (x - (mn + mx) / 2.0) # transform compact support into ]-1,1[ - x = -n * s / (s ** 2 - 1.0) # then transform ]-1,1[ into ]-inf,inf[ - x[k * x > 100] = 100.0 / k - x[k * x < -100] = -100.0 / k - H[b] = 1.0 / (1 + np.exp(-k * x)) - else: - raise NotImplementedError("Heaviside with only one bound infinite") - else: - # TODO tan approx - raise NotImplementedError() - return H - - -if __name__ == "__main__": - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py deleted file mode 100644 index ed2833a2c2..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .Polar import * -from .DynamicStall import * diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv deleted file mode 100644 index 11fc9e4578..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/63-235.csv +++ /dev/null @@ -1,152 +0,0 @@ -#Alpha_[deg] Cl_[-] Cd_[-] Cm_[-] --180 0 0.01 0 --175 0.32314 -0.00353 0.32311 --170 0.54698 0.01 0.4 --165 0.67904 0.04941 0.33924 --160 0.72682 0.11352 0.24942 --155 0.70579 0.20019 0.21399 --150 0.66314 0.30328 0.21602 --145 0.64074 0.41646 0.2214 --140 0.62742 0.53657 0.22794 --135 0.60342 0.66092 0.23986 --130 0.56773 0.78571 0.25508 --125 0.52323 0.90699 0.27055 --120 0.4696 1.0213 0.28536 --115 0.40619 1.1252 0.29905 --110 0.3342 1.2155 0.31072 --105 0.25541 1.2893 0.31947 --100 0.17213 1.3458 0.32503 --95 0.08657 1.3833 0.32702 --90 0 1.3971 0.32417 --85 -0.08656 1.3833 0.31555 --80 -0.17213 1.3458 0.30236 --75 -0.25546 1.2893 0.2861 --70 -0.3342 1.2155 0.26733 --65 -0.40601 1.1252 0.24646 --60 -0.4696 1.0213 0.22406 --55 -0.52392 0.90698 0.20089 --50 -0.56773 0.78571 0.17812 --45 -0.60083 0.66096 0.15651 --40 -0.62742 0.53657 0.13462 --35 -0.65043 0.41631 0.1123 --30 -0.66314 0.30328 0.09674 --25 -0.66962 0.20078 0.08937 --21 -0.70796 0.12951 0.07031 --20 -0.72682 0.11352 0.06129 --19 -0.75 0.09836 0.05014 --18 -0.77544 0.08411 0.0374 --17 -0.80056 0.07088 0.02375 --16 -0.82279 0.05876 0.00988 --15 -0.83954 0.04787 -0.00351 --14 -0.84824 0.03829 -0.01574 --13 -0.84632 0.03013 -0.02611 --12 -0.83119 0.0235 -0.03394 --11 -0.80027 0.0185 -0.03853 --10 -0.751 0.01522 -0.0392 --9.5 -0.71909 0.01422 -0.03799 - -9 -0.6841 0.01346 -0.0364 --8.5 -0.64783 0.01275 -0.03504 - -8 -0.6106 0.01207 -0.0339 --7.5 -0.57249 0.01141 -0.03279 - -7 -0.53411 0.01081 -0.03158 --6.5 -0.4962 0.01028 -0.03012 - -6 -0.4595 0.00986 -0.0283 --5.5 -0.42412 0.00956 -0.02608 - -5 -0.3876 0.00935 -0.0239 --4.5 -0.3471 0.00918 -0.02225 - -4 -0.3007 0.00907 -0.0215 --3.5 -0.24776 0.00901 -0.0218 - -3 -0.1918 0.00897 -0.0226 --2.5 -0.13644 0.00891 -0.02334 - -2 -0.0816 0.00885 -0.024 --1.5 -0.02642 0.00884 -0.0247 - -1 0.0294 0.00885 -0.0255 --0.5 0.08586 0.00886 -0.0264 - 0 0.1423 0.00886 -0.0273 -0.5 0.19775 0.00886 -0.02807 - 1 0.2507 0.0089 -0.0284 -1.5 0.29998 0.00899 -0.02807 - 2 0.3462 0.00907 -0.0272 -2.5 0.39032 0.00912 -0.02601 - 3 0.4328 0.00927 -0.0247 -3.5 0.4744 0.00961 -0.02349 - 4 0.5176 0.01002 -0.0227 -4.5 0.56413 0.01037 -0.02249 - 5 0.6109 0.01072 -0.0224 -5.5 0.65458 0.01119 -0.02194 - 6 0.6956 0.01176 -0.0212 -6.5 0.73547 0.01241 -0.02041 - 7 0.7762 0.01307 -0.0198 -7.5 0.81879 0.0137 -0.01946 - 8 0.8598 0.0144 -0.019 -8.5 0.896 0.01528 -0.01806 - 9 0.9295 0.01629 -0.0169 -9.5 0.96294 0.01737 -0.01587 - 10 0.9957 0.01856 -0.0149 -10.5 1.0268 0.01989 -0.01389 - 11 1.0569 0.02131 -0.0129 -11.5 1.0864 0.02282 -0.01196 - 12 1.1121 0.02457 -0.0108 -12.5 1.1312 0.02672 -0.00919 - 13 1.1447 0.02927 -0.0074 -13.5 1.1545 0.03216 -0.00568 - 14 1.1622 0.03527 -0.0038 -14.5 1.1686 0.03854 -0.00171 - 15 1.1721 0.04229 -0.0007 -15.5 1.1708 0.04684 -0.00206 - 16 1.1648 0.05218 -0.00574 -16.5 1.155 0.05824 -0.01141 - 17 1.1421 0.06492 -0.01869 -17.5 1.1267 0.07215 -0.02722 - 18 1.1096 0.07984 -0.03664 -18.5 1.0915 0.0879 -0.0466 - 19 1.0731 0.09626 -0.05673 -19.5 1.0551 0.10483 -0.06667 - 20 1.0383 0.11352 -0.07607 -20.5 1.0232 0.12227 -0.08463 - 21 1.0099 0.13107 -0.09233 -21.5 0.99831 0.13992 -0.09923 - 22 0.9882 0.14882 -0.10538 -22.5 0.97954 0.15779 -0.11084 - 23 0.9722 0.16683 -0.11566 -23.5 0.96608 0.17593 -0.11989 - 24 0.96106 0.18512 -0.12359 -24.5 0.95704 0.19439 -0.1268 - 25 0.95391 0.20374 -0.12959 -25.5 0.95156 0.21319 -0.132 - 26 0.94987 0.22274 -0.1341 -26.5 0.94875 0.23239 -0.13592 - 27 0.94808 0.24215 -0.13753 -27.5 0.94774 0.25202 -0.13899 - 28 0.94764 0.26202 -0.14033 - 30 0.94734 0.30328 -0.1457 - 35 0.92992 0.41551 -0.16709 - 40 0.89632 0.53657 -0.1936 - 45 0.8581 0.66117 -0.21672 - 50 0.81105 0.78571 -0.23738 - 55 0.74863 0.90692 -0.25819 - 60 0.67085 1.0213 -0.27886 - 65 0.57957 1.1252 -0.29854 - 70 0.47743 1.2155 -0.31693 - 75 0.36653 1.2893 -0.33391 - 80 0.24591 1.3458 -0.34957 - 85 0.11777 1.3833 -0.36364 - 90 0 1.3971 -0.37438 - 95 -0.09246 1.3833 -0.38013 -100 -0.17213 1.3458 -0.38128 -105 -0.25384 1.2893 -0.3786 -110 -0.3342 1.2155 -0.37248 -115 -0.40661 1.1252 -0.3633 -120 -0.4696 1.0213 -0.3519 -125 -0.52312 0.90699 -0.33918 -130 -0.56773 0.78571 -0.32579 -135 -0.60345 0.66092 -0.31277 -140 -0.62742 0.53657 -0.30302 -145 -0.64073 0.41646 -0.29879 -150 -0.66314 0.30328 -0.29801 -155 -0.70579 0.20019 -0.30444 -160 -0.72682 0.11352 -0.34975 -165 -0.67904 0.04941 -0.44614 -170 -0.54698 0.01 -0.5 -175 -0.32314 -0.00353 -0.3913 -180 0 0.01 0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv deleted file mode 100644 index ad08cdbed3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.csv +++ /dev/null @@ -1,4 +0,0 @@ -#Alpha_[deg] Cl_[-] Cd_[-] Cm_[-] --180.0 0.0 0.5 0.0 - 0.0 0.0 0.5 0.0 - 180.0 0.0 0.5 0.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat deleted file mode 100644 index 1ba7334541..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/Cylinder.dat +++ /dev/null @@ -1,5 +0,0 @@ -! Alpha Cl Cd Cm -! (deg) (-) (-) (-) - -180.00 0.000 0.5000 0.0 - 0.00 0.000 0.5000 0.0 - 180.00 0.000 0.5000 0.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv deleted file mode 100644 index 4a05f7e7ba..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/DU21_A17.csv +++ /dev/null @@ -1,147 +0,0 @@ -! Table of aerodynamics coefficients -! DU21 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). -! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. -! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! -! (deg) (-) (-) (-) - -180.00 0.000 0.0185 0.0000 - -175.00 0.394 0.0332 0.1978 - -170.00 0.788 0.0945 0.3963 - -160.00 0.670 0.2809 0.2738 - -155.00 0.749 0.3932 0.3118 - -150.00 0.797 0.5112 0.3413 - -145.00 0.818 0.6309 0.3636 - -140.00 0.813 0.7485 0.3799 - -135.00 0.786 0.8612 0.3911 - -130.00 0.739 0.9665 0.3980 - -125.00 0.675 1.0625 0.4012 - -120.00 0.596 1.1476 0.4014 - -115.00 0.505 1.2206 0.3990 - -110.00 0.403 1.2805 0.3943 - -105.00 0.294 1.3265 0.3878 - -100.00 0.179 1.3582 0.3796 - -95.00 0.060 1.3752 0.3700 - -90.00 -0.060 1.3774 0.3591 - -85.00 -0.179 1.3648 0.3471 - -80.00 -0.295 1.3376 0.3340 - -75.00 -0.407 1.2962 0.3199 - -70.00 -0.512 1.2409 0.3049 - -65.00 -0.608 1.1725 0.2890 - -60.00 -0.693 1.0919 0.2722 - -55.00 -0.764 1.0002 0.2545 - -50.00 -0.820 0.8990 0.2359 - -45.00 -0.857 0.7900 0.2163 - -40.00 -0.875 0.6754 0.1958 - -35.00 -0.869 0.5579 0.1744 - -30.00 -0.838 0.4405 0.1520 - -25.00 -0.791 0.3256 0.1262 - -24.00 -0.794 0.3013 0.1170 - -23.00 -0.805 0.2762 0.1059 - -22.00 -0.821 0.2506 0.0931 - -21.00 -0.843 0.2246 0.0788 - -20.00 -0.869 0.1983 0.0631 - -19.00 -0.899 0.1720 0.0464 - -18.00 -0.931 0.1457 0.0286 - -17.00 -0.964 0.1197 0.0102 - -16.00 -0.999 0.0940 -0.0088 - -15.00 -1.033 0.0689 -0.0281 - -14.50 -1.050 0.0567 -0.0378 - -12.01 -0.953 0.0271 -0.0349 - -11.00 -0.900 0.0303 -0.0361 - -9.98 -0.827 0.0287 -0.0464 - -8.12 -0.536 0.0124 -0.0821 - -7.62 -0.467 0.0109 -0.0924 - -7.11 -0.393 0.0092 -0.1015 - -6.60 -0.323 0.0083 -0.1073 - -6.50 -0.311 0.0089 -0.1083 - -6.00 -0.245 0.0082 -0.1112 - -5.50 -0.178 0.0074 -0.1146 - -5.00 -0.113 0.0069 -0.1172 - -4.50 -0.048 0.0065 -0.1194 - -4.00 0.016 0.0063 -0.1213 - -3.50 0.080 0.0061 -0.1232 - -3.00 0.145 0.0058 -0.1252 - -2.50 0.208 0.0057 -0.1268 - -2.00 0.270 0.0057 -0.1282 - -1.50 0.333 0.0057 -0.1297 - -1.00 0.396 0.0057 -0.1310 - -0.50 0.458 0.0057 -0.1324 - 0.00 0.521 0.0057 -0.1337 - 0.50 0.583 0.0057 -0.1350 - 1.00 0.645 0.0058 -0.1363 - 1.50 0.706 0.0058 -0.1374 - 2.00 0.768 0.0059 -0.1385 - 2.50 0.828 0.0061 -0.1395 - 3.00 0.888 0.0063 -0.1403 - 3.50 0.948 0.0066 -0.1406 - 4.00 0.996 0.0071 -0.1398 - 4.50 1.046 0.0079 -0.1390 - 5.00 1.095 0.0090 -0.1378 - 5.50 1.145 0.0103 -0.1369 - 6.00 1.192 0.0113 -0.1353 - 6.50 1.239 0.0122 -0.1338 - 7.00 1.283 0.0131 -0.1317 - 7.50 1.324 0.0139 -0.1291 - 8.00 1.358 0.0147 -0.1249 - 8.50 1.385 0.0158 -0.1213 - 9.00 1.403 0.0181 -0.1177 - 9.50 1.401 0.0211 -0.1142 - 10.00 1.358 0.0255 -0.1103 - 10.50 1.313 0.0301 -0.1066 - 11.00 1.287 0.0347 -0.1032 - 11.50 1.274 0.0401 -0.1002 - 12.00 1.272 0.0468 -0.0971 - 12.50 1.273 0.0545 -0.0940 - 13.00 1.273 0.0633 -0.0909 - 13.50 1.273 0.0722 -0.0883 - 14.00 1.272 0.0806 -0.0865 - 14.50 1.273 0.0900 -0.0854 - 15.00 1.275 0.0987 -0.0849 - 15.50 1.281 0.1075 -0.0847 - 16.00 1.284 0.1170 -0.0850 - 16.50 1.296 0.1270 -0.0858 - 17.00 1.306 0.1368 -0.0869 - 17.50 1.308 0.1464 -0.0883 - 18.00 1.308 0.1562 -0.0901 - 18.50 1.308 0.1664 -0.0922 - 19.00 1.308 0.1770 -0.0949 - 19.50 1.307 0.1878 -0.0980 - 20.00 1.311 0.1987 -0.1017 - 20.50 1.325 0.2100 -0.1059 - 21.00 1.324 0.2214 -0.1105 - 22.00 1.277 0.2499 -0.1172 - 23.00 1.229 0.2786 -0.1239 - 24.00 1.182 0.3077 -0.1305 - 25.00 1.136 0.3371 -0.1370 - 26.00 1.093 0.3664 -0.1433 - 28.00 1.017 0.4246 -0.1556 - 30.00 0.962 0.4813 -0.1671 - 32.00 0.937 0.5356 -0.1778 - 35.00 0.947 0.6127 -0.1923 - 40.00 0.950 0.7396 -0.2154 - 45.00 0.928 0.8623 -0.2374 - 50.00 0.884 0.9781 -0.2583 - 55.00 0.821 1.0846 -0.2782 - 60.00 0.740 1.1796 -0.2971 - 65.00 0.646 1.2617 -0.3149 - 70.00 0.540 1.3297 -0.3318 - 75.00 0.425 1.3827 -0.3476 - 80.00 0.304 1.4202 -0.3625 - 85.00 0.179 1.4423 -0.3763 - 90.00 0.053 1.4512 -0.3890 - 95.00 -0.073 1.4480 -0.4004 - 100.00 -0.198 1.4294 -0.4105 - 105.00 -0.319 1.3954 -0.4191 - 110.00 -0.434 1.3464 -0.4260 - 115.00 -0.541 1.2829 -0.4308 - 120.00 -0.637 1.2057 -0.4333 - 125.00 -0.720 1.1157 -0.4330 - 130.00 -0.787 1.0144 -0.4294 - 135.00 -0.836 0.9033 -0.4219 - 140.00 -0.864 0.7845 -0.4098 - 145.00 -0.869 0.6605 -0.3922 - 150.00 -0.847 0.5346 -0.3682 - 155.00 -0.795 0.4103 -0.3364 - 160.00 -0.711 0.2922 -0.2954 - 170.00 -0.788 0.0969 -0.3966 - 175.00 -0.394 0.0334 -0.1978 - 180.00 0.000 0.0185 0.0000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat deleted file mode 100644 index 32b5a57099..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/data/FFA-W3-241-Re12M.dat +++ /dev/null @@ -1,106 +0,0 @@ -#alpha_[deg] Cl_[-] Cd_[-] Cm_[-] --180.00000 0.00000 0.00000 0.00000 --175.00000 0.17360 0.01140 0.02180 --170.00000 0.34200 0.04520 0.04340 --165.00000 0.50000 0.10050 0.06470 --160.00000 0.64280 0.17550 0.08550 --155.00000 0.76600 0.26790 0.10570 --150.00000 0.86600 0.37500 0.12500 --145.00000 0.93970 0.49350 0.14340 --140.00000 0.98480 0.61970 0.16070 --135.00000 1.00000 0.75000 0.17680 --130.00000 0.98480 0.88030 0.19150 --125.00000 0.93970 1.00650 0.20480 --120.00000 0.86600 1.12500 0.21650 --115.00000 0.76600 1.23210 0.22660 --110.00000 0.64280 1.32450 0.23490 --105.00000 0.50000 1.39950 0.24150 --100.00000 0.34200 1.45480 0.24620 - -95.00000 0.17360 1.48860 0.24900 - -90.00000 0.00000 1.50000 0.25000 - -85.00000 -0.17360 1.48860 0.24900 - -80.00000 -0.34200 1.45480 0.24620 - -75.00000 -0.50000 1.39950 0.24150 - -70.00000 -0.64280 1.32450 0.23490 - -65.00000 -0.76600 1.23210 0.22660 - -60.00000 -0.86600 1.12500 0.21650 - -55.00000 -0.93970 1.00650 0.20480 - -50.00000 -0.98480 0.86030 0.19150 - -45.00000 -1.01200 0.71200 0.17080 - -40.00000 -1.03760 0.54750 0.14160 - -39.00000 -1.04190 0.51650 0.13460 - -38.00000 -1.04620 0.48160 0.12760 - -37.00000 -1.05250 0.44870 0.11850 - -36.00000 -1.05680 0.41770 0.10950 - -35.00000 -1.06110 0.38480 0.10050 - -34.00000 -1.06540 0.35580 0.08940 - -33.00000 -1.07170 0.32890 0.08240 - -32.00000 -1.07650 0.30310 0.06780 - -30.00000 -1.08890 0.25600 0.05080 - -28.00000 -1.09930 0.20900 0.03370 - -26.00000 -1.11680 0.17560 0.02060 - -24.00000 -1.12820 0.14230 0.00750 - -22.00000 -1.12150 0.11830 -0.00080 - -20.00000 -1.11480 0.09430 -0.00910 - -18.00000 -1.09190 0.07650 -0.01230 - -16.00000 -1.06910 0.05870 -0.01560 - -14.00000 -1.03790 0.04540 -0.01560 - -12.00000 -1.00670 0.03210 -0.01550 - -10.00000 -0.84790 0.02300 -0.03180 - -8.00000 -0.68920 0.01380 -0.04800 - -6.00000 -0.42780 0.01180 -0.06110 - -4.00000 -0.16650 0.00980 -0.07420 - -2.00000 0.08630 0.00950 -0.08110 - 0.00000 0.33910 0.00920 -0.08800 - 2.00000 0.58670 0.00940 -0.09330 - 4.00000 0.83010 0.00990 -0.09770 - 6.00000 1.06560 0.01090 -0.10080 - 8.00000 1.29140 0.01240 -0.10260 - 10.00000 1.50120 0.01440 -0.10240 - 12.00000 1.68860 0.01730 -0.09980 - 14.00000 1.81030 0.02260 -0.09410 - 16.00000 1.81390 0.03540 -0.08740 - 18.00000 1.75450 0.06470 -0.08500 - 20.00000 1.60710 0.10350 -0.09130 - 22.00000 1.52570 0.14370 -0.10260 - 24.00000 1.44280 0.18410 -0.11400 - 26.00000 1.38260 0.22900 -0.12820 - 28.00000 1.32180 0.27380 -0.14230 - 30.00000 1.25830 0.32780 -0.15820 - 32.00000 1.19440 0.38160 -0.17390 - 33.00000 1.17340 0.42090 -0.17900 - 34.00000 1.15680 0.45040 -0.18310 - 35.00000 1.13790 0.48150 -0.18730 - 36.00000 1.12480 0.51050 -0.19140 - 37.00000 1.11770 0.54500 -0.19530 - 38.00000 1.10240 0.57370 -0.19930 - 39.00000 1.08910 0.59990 -0.20320 - 40.00000 1.07550 0.62800 -0.20710 - 45.00000 1.01750 0.75780 -0.21610 - 50.00000 0.97160 0.88200 -0.21840 - 55.00000 0.92680 1.01040 -0.22140 - 60.00000 0.86600 1.12500 -0.22550 - 65.00000 0.76600 1.23210 -0.23060 - 70.00000 0.64280 1.32450 -0.23490 - 75.00000 0.50000 1.39950 -0.24150 - 80.00000 0.34200 1.45480 -0.24620 - 85.00000 0.17360 1.48860 -0.24900 - 90.00000 0.00000 1.50000 -0.25000 - 95.00000 -0.17360 1.48860 -0.24900 - 100.00000 -0.34200 1.45480 -0.24620 - 105.00000 -0.50000 1.39950 -0.24150 - 110.00000 -0.64280 1.32450 -0.23490 - 115.00000 -0.76600 1.23210 -0.22660 - 120.00000 -0.86600 1.12500 -0.21650 - 125.00000 -0.93970 1.00650 -0.20480 - 130.00000 -0.98480 0.88030 -0.19150 - 135.00000 -1.00000 0.75000 -0.17680 - 140.00000 -0.98480 0.61970 -0.16070 - 145.00000 -0.93970 0.49350 -0.14340 - 150.00000 -0.86600 0.37500 -0.12500 - 155.00000 -0.76600 0.26790 -0.10570 - 160.00000 -0.64280 0.17550 -0.08550 - 165.00000 -0.50000 0.10050 -0.06470 - 170.00000 -0.34200 0.04520 -0.04340 - 175.00000 -0.17360 0.01140 -0.02180 - 180.00000 0.00000 0.00000 0.00000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py deleted file mode 100644 index 6528f27093..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/correction3D.py +++ /dev/null @@ -1,43 +0,0 @@ -import os -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -# Local -from pyFAST.airfoils.Polar import Polar - -MyDir=os.path.dirname(__file__) - - -def main_correction3D(test=False): - polarFile_in = os.path.join(MyDir,'../data/DU21_A17.csv') - - r_over_R = 0.2 # spanwise location [-] - chord_over_r = 3./5. # chord divided by local radius [-] - tsr = 10 # tip speed ratio [-] - - polar = Polar(polarFile_in, compute_params=True, verbose=False) - #ADpol = polar.toAeroDyn(polarFile_AD) # Optional, write to AeroDyn format - polar3D= polar.correction3D(r_over_R, chord_over_r, tsr) - - # --- Plot - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - ax.plot(polar.alpha, polar.cl ,'k-' , label= r'2D polar') - ax.plot(polar3D.alpha, polar3D.cl , '-' , label= r'3D corrected') - ax.plot(polar.alpha, polar.cl_inv ,'k--' , label= r'inviscid') - ax.tick_params(direction='in', top=True, right=True) - ax.set_xlabel(r'Angle of attack, $\alpha$ [deg]') - ax.set_ylabel(r'Lift coefficient, $C_l$ [-]') - ax.set_title(r'Airfoils - 3D correction') - ax.set_xlim([-50,50]) - ax.set_ylim([-1.5,2]) - ax.legend() - - return polar, polar3D - -polar,polar3D = main_correction3D() - -if __name__ == '__main__': - plt.show() -if __name__ == '__test__': - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py deleted file mode 100644 index fe560ca420..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile.py +++ /dev/null @@ -1,118 +0,0 @@ -""" -Example to generate an AeroDyn polar file from a set of Cl-Cd data - - The various parameters (e.g. unsteady parameters) are computed and updated - - The AD file is written -""" -import numpy as np -import os - -from pyFAST.airfoils.Polar import Polar -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.input_output.csv_file import CSVFile - -# Get current directory so this script can be called from any location -scriptDir=os.path.dirname(__file__) - - -def main_ReWriteADFile(): - """ - Example 1: - - open an existing AeroDyn polar file - - rewrite it (unsteady parameters are recomputed) - """ - AD_polarFile_in = os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Baseline/Airfoils/Cylinder1.dat') - AD_polarFile_out = '_Polar_out.dat.ignore' - - # Open an existing AeroDyn polar file - polar = Polar(AD_polarFile_in, fformat='ADPolar') - # Rewrite it (unsteady parameters are recomputed) - # NOTE: you can provide templateFile=AD_polarFile_in to the function below - # to ensure that the file will look the same - comment = 'Cylinder at Re=6Million\nUpdated unsteady parameters' # Optional comment - Re = 6 # Reynolds number in Million (Optional) - ADpol = polar.toAeroDyn(AD_polarFile_out, Re=6, comment=comment) - - return ADpol, polar - - -def main_WriteADPolar(): - """ - Example 2: - - Open a tabulated file with alpha,Cl,Cd,Cm - - Write an AeroDyn file from it (unsteady parameters are computed) - """ - polarFile_in = os.path.join(scriptDir,'../data/DU21_A17.csv') - polarFile_AD_out = '_Polar_out.dat.ignore' - - # Open a tabulated file with alpha,Cl,Cd,Cm - polar = Polar(polarFile_in, fformat='delimited') - # Write an AeroDyn file from it (unsteady parameters are computed) - # NOTE: you can provide templateFile='ADTemplate.dat' to the function below - # to ensure that the AD file will look the same as the template. - ADpol = polar.toAeroDyn(polarFile_AD_out) - - return ADpol, polar - -def main_WriteADPolarLowLevel(): - """ - Example 3: Same as Example 2, but with low level interface. - """ - # --- Reading an existing AD file, just as a template, we'll replace things in it - templateADFile = os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Baseline/Airfoils/Cylinder1.dat') - ADpol = FASTInputFile(templateADFile) - - # --- Creating a Polar object from Cl-Cd data - polarFile = os.path.join(scriptDir,'../data/DU21_A17.csv') - p=CSVFile(polarFile).toDataFrame().values - polar= Polar(alpha=p[:,0],cl=p[:,1],cd=p[:,2],cm=p[:,3]) - (alpha0,alpha1,alpha2,cnSlope,cn1,cn2,cd0,cm0)=polar.unsteadyParams() - - # --- Updating the AD polar file - # Setting unsteady parameters - ADpol['Re'] = 1.0000 # TODO UNKNOWN - if np.isnan(alpha0): - ADpol['alpha0'] = 0 - else: - ADpol['alpha0'] = np.around(alpha0, 4) - ADpol['alpha1'] = np.around(alpha1, 4) # TODO approximate - ADpol['alpha2'] = np.around(alpha2, 4) # TODO approximate - ADpol['C_nalpha'] = np.around(cnSlope ,4) - ADpol['Cn1'] = np.around(cn1, 4) # TODO verify - ADpol['Cn2'] = np.around(cn2, 4) - ADpol['Cd0'] = np.around(cd0, 4) - ADpol['Cm0'] = np.around(cm0, 4) - - # Setting polar - PolarTable = np.column_stack((polar.alpha,polar.cl,polar.cd,polar.cm)) - ADpol['NumAlf'] = polar.cl.shape[0] - ADpol['AFCoeff'] = np.around(PolarTable, 5) - - filename='_Polar_out.dat.ignore' - ADpol.write(filename) - #print('Writing polar to file:',filename,' thick={}'.format(t)) - - return ADpol, polar - - - -ADpol,polar = main_ReWriteADFile() -ADpol,polar = main_WriteADPolar() -ADpol,polar = main_WriteADPolarLowLevel() - -if __name__ == '__main__': - print(polar) - import matplotlib.pyplot as plt - plt.plot(polar.alpha ,polar.cl , '-' , label= 'cl') - plt.plot(polar.alpha ,polar.cl_lin , '--', label= 'cl_lin') - plt.ylim([-2,2]) - plt.legend() - plt.show() - -if __name__ == '__test__': - ADpol,polar = main_ReWriteADFile() - ADpol,polar = main_WriteADPolar() - ADpol,polar = main_WriteADPolar() - try: - os.remove('_Polar_out.dat.ignore') - except: - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py deleted file mode 100644 index c1b88d6b63..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/examples/createADPolarFile_Basic.py +++ /dev/null @@ -1,65 +0,0 @@ -""" - - Create an AeroDyn polar from a CSV file - - (optional) Read the AeroDyn polar back - - Plot unsteady aerodynamic parameters -""" -import os -import matplotlib.pyplot as plt - -# Get current directory so this script can be called from any location -scriptDir=os.path.dirname(__file__) - -# --- Create an AeroDyn polar from a CSV file -from pyFAST.airfoils.Polar import Polar -polarFile_in = os.path.join(scriptDir,'../data/DU21_A17.csv') -polar = Polar(polarFile_in, fformat='delimited') -ADpol = polar.toAeroDyn('_AeroDyn_Polar_DU21_A17.dat') - - -fig = plt.figure() -plt.plot(polar.alpha, polar.cl, label='Cl') -plt.plot(polar.alpha, polar.cl_lin, label='Cl_lin') -plt.xlabel(r'Angle of attack $\alpha$ [deg]') -plt.ylabel(r'Lift coefficient $C_l$ [-]') -plt.ylim([-1.5,1.9]) -plt.legend() - -# --- Optional: read the AeroDyn polar -from pyFAST.input_output import FASTInputFile -ADpol = FASTInputFile('_AeroDyn_Polar_DU21_A17.dat') - -# --- Plot important data for unsteady aerodynamics -df = ADpol.toDataFrame() -print(df.keys()) -fig = plt.figure() -plt.plot(df['Alpha_[deg]'], df['Cn_[-]'] , label='Cn') -plt.plot(df['Alpha_[deg]'], df['Cn_pot_[-]'], label='Cn_lin') -plt.plot(df['Alpha_[deg]'], df['Cn_012_[-]'],'--', label='Cn_2,0,1') -plt.xlabel(r'Angle of attack $\alpha$ [deg]') -plt.ylabel(r'Normal coefficient $C_n$ [-]') -plt.ylim([-1.5,1.9]) -plt.legend() - - -# --- Alternative using class Polar (latest python toolbox) -try: - fig = plt.figure() - plt.plot(polar.alpha, polar.cn , label='Cn') - plt.plot(polar.alpha, polar.cn_lin, label='Cn_lin') - plt.plot(polar.alpha_201, polar.cn_201 ,'o', label='Cn_2,0,1') - plt.xlabel(r'Angle of attack $\alpha$ [deg]') - plt.ylabel(r'Normal coefficient $C_n$ [-]') - plt.ylim([-1.5,1.9]) - plt.legend() -except: - pass - - -if __name__ == '__main__': - plt.show() - -if __name__ == '__test__': - try: - os.remove('_AeroDyn_Polar_DU21_A17.dat') - except: - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py deleted file mode 100644 index 6d4c746905..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/polar_file.py +++ /dev/null @@ -1,291 +0,0 @@ -""" -This module contains: - - PolarFile: class to read different kind of polar formats - - - -""" - -import os -import numpy as np -import pandas as pd - -# --- Welib polar readers -try: - from pyFAST.input_output.csv_file import CSVFile -except: - CSVFile=None -try: - from pyFAST.input_output.fast_input_file import ADPolarFile -except: - ADPolarFile=None -try: - from pyFAST.input_output.hawc2_ae_file import HAWC2AEFile -except: - HAWC2AEFile=None - -class WrongPolarFormatError(Exception): pass -class BrokenPolarFormatError(Exception): pass - - -# List of columns used to "unify" the dataframes coming out of "PolarFile" -DEFAULT_COLUMNS={'alpha':'Alpha', 'cl':'Cl', 'cd':'Cd', 'cm':'Cm'} -DEFAULT_COLUMNS_EXT={ - 'clinv':'Cl_inv', 'clfs':'Cl_fs', 'fs':'fs', - 'cn':'Cn', 'cnpot':'Cn_pot', 'cnz12':'Cn_012', 'cnf':'Cn_f', 'cncd0off':'Cn_Cd0off' - } - - -# -------------------------------------------------------------------------------- -# --- Small Helper functions -# -------------------------------------------------------------------------------- -def _load_txt(filename, commentChars, skiprows=0, **kwargs): - """ - Similar to np.loadtxt but also works if comments are present anywhere in the file (e.g. end of file) - """ - with open(filename) as f: - lines = (line for iline, line in enumerate(f) if not line.startswith(commentChars) and iline>=skiprows) - Lines = list(lines) - if len(Lines)==0: - raise Exception('Zero lines') - else: - return np.loadtxt(Lines, **kwargs) - - -# --------------------------------------------------------------------------------} -# --- Simple classes -# --------------------------------------------------------------------------------{ -class BasePolarFile(dict): - def __init__(self, filename=None): - super().__init__() - self.COMMENT_CHARS=('#','!','%') - self['header'] = '' - self['columns'] = [] - self['data'] = np.array([[]]) - self['nPolars'] = 0 - if filename is not None: - self.read(filename) - - def __repr__(self): - s='<{} object>:\n'.format(type(self).__name__) - s+='- header: {}\n'.format(self['header']) - s+='- columns: {}\n'.format(self['columns']) - s+='- nPolars:{}\n'.format(self['nPolars']) - s+='- data: shape {}\n'.format(self['data'].shape) - s+=' first: {}\n'.format(self['data'][0,:]) - s+=' last: {}\n'.format(self['data'][-1,:]) - return s - - @staticmethod - def formatName(): raise NotImplementedError() - - def toDataFrame(self): - if self['nPolars']==1: - return pd.DataFrame(data=self['data'], columns=self['columns']) - else: - raise NotImplementedError() - -class PolarFile_OneLineHeader(BasePolarFile): - """ Polar file with exatcly one line of header. - Column names in header can be separated by spaces or commas. - Header may start with the following comment characters: ['#','!','%'] - Data may be space or column separated - """ - @staticmethod - def formatName(): return 'Polar file one header line' - - def read(self, filename): - super().__init__() - with open(filename) as f: - header = f.readline().strip() - second = f.readline() - self['header'] = header - for c in self.COMMENT_CHARS: - header = header.lstrip(c) - sep=',' - try: - self['data'] = np.loadtxt(filename, delimiter=sep, skiprows=1) - except: - sep=None - self['data'] = np.loadtxt(filename, delimiter=sep, skiprows=1) - self['nPolars']=1 - - # --- Detect columns - nCols = self['data'].shape[1] - # First, if all values are numeric, abort - onestring = header.replace(',',' ') - try: - vals = np.array(onestring.split()).astype(float) # This should fail - except: - pass # Great, it actually failed, the first line is not made of floats - else: - raise WrongPolarFormatError('The first line is all numeric, it should contain column names') - # Then, try to split by commas or space - colsComma = header.split(',') - colsSpace = header.split() - if len(colsComma)==nCols: - cols = [c.strip() for c in colsComma] - elif len(colsSpace)==nCols: - cols = colsSpace - else: - raise BrokenPolarFormatError('The number of header columns ({}) does not match the number of columns in the data ({})'.format(len(cols),nCols)) - self['columns'] = cols - -class PolarFile_NoHeader(BasePolarFile): - """ - Polar file with no header, or some "meaningless" comments that starts with ['#','!','%'] - Data may be space or column separated - """ - @staticmethod - def formatName(): return 'Polar file no header' - - def read(self, filename): - self['data'] = _load_txt(filename, self.COMMENT_CHARS) - self['nPolars'] = 1 - # --- Detect columns - nCols = self['data'].shape[1] - d = [DEFAULT_COLUMNS['alpha'], DEFAULT_COLUMNS['cl'], DEFAULT_COLUMNS['cd'], DEFAULT_COLUMNS['cm']] - n2col = {2:d[0:2], 3:d[0:3], 4:d[0:4] } - if nCols in n2col.keys(): - self['columns'] = n2col[nCols] - else: - raise BrokenPolarFormatError('The number of columns in the data ({}) is not amongst the supported ones ({}).'.format(nCols, n2col.keys())) - -class PolarFile_AD_Basic(BasePolarFile): - """ - Reads a basic AeroDyn file - """ - @staticmethod - def formatName(): return 'Polar AeroDyn file basic' - - def read(self, filename): - self['data'] = _load_txt(filename, self.COMMENT_CHARS, skiprows = 53) - self['nPolars'] = 1 - # import pandas as pd - # df=pd.read_csv(filename, skiprows = 53, header=None, delim_whitespace=True, names=['Alpha','Cl','Cd','Cm']).values - # --- Detect columns - nCols = self['data'].shape[1] - n2col = {2:['Alpha','Cl'], 3:['Alpha','Cl', 'Cm'], 4:['Alpha','Cl', 'Cm', 'Cd'] } - if nCols in n2col.keys(): - self['columns'] = n2col[nCols] - else: - raise BrokenPolarFormatError('The number of columns in the data ({}) is not amongst the supported ones ({}).'.format(nCols, n2col.keys())) - - -class PolarFile(BasePolarFile): - """ """ - @staticmethod - def formatName(): return 'Polar file' - - -def loadPolarFile(filename, fformat='auto', to_radians=False, standardizeCols=True, verbose=False): - """ - Loads a PolarFile, return a dataFrame - """ - if not os.path.exists(filename): - raise Exception('File not found:',filename) - print('[WARN] Not all file formats supported ') - - allReaders = [ADPolarFile, PolarFile_OneLineHeader, PolarFile_NoHeader, PolarFile_AD_Basic, CSVFile] - delimReaders = [PolarFile_OneLineHeader, PolarFile_AD_Basic, CSVFile] - - def tryReading(f, reader): - if f is not None: - return f - if reader is None: - return None - try: - if verbose: - print('') - print('PolarFile: trying to read with format: {}'.format(reader.formatName())) - return reader(filename) - except: - if verbose: - print('>>> PolarFile: Failed to read with format: {}'.format(reader.formatName())) - pass - f = None - Re = np.nan # TODO - - if fformat==None: - fformat = 'auto' - - if fformat=='ADPolar': - f = ADPolarFile(filename) - - elif fformat=='delimited': - - for reader in delimReaders: - f = tryReading(f, reader) - if f is not None: - break - - elif fformat=='auto': - - for reader in allReaders: - f = tryReading(f, reader) - if f is not None: - break - - if f is None: - raise Exception('Unable to read the polar {} using the fileformat {}. Use a supported fileformat'.format(filename, fformat)) - - # --- Store in DataFrame - df = f.toDataFrame() - if verbose: - print('PolarFile: Columns before: ',df.columns.values) - - # --- Rename columns - Standardize column names - if standardizeCols: - COLS_TODO= {**DEFAULT_COLUMNS,**DEFAULT_COLUMNS_EXT} - for ic, col in enumerate(df.columns): - c = col.strip().lower().replace('_','') - c = c.replace('aoa','alpha') - c = c.replace('fst','fs') - c = c.replace('012','z12') - c = c.replace('cllin','clinv') - c = c.replace('clpot','clinv') - known_keys = reversed(sorted(list(COLS_TODO.keys()))) - found=False - for kk in known_keys: - if c.startswith(kk): - cnew = COLS_TODO.pop(kk) - #print('changing {} to {}'.format(c, cnew)) - df.columns.values[ic] = cnew # rename column - found=True - break - if not found: - print('[WARN] PolarFile: The following column was not understood: {}'.format(col)) - - # --- Standardize data - for k,v in DEFAULT_COLUMNS.items(): - if v not in df.columns: - df[v] = np.nan - if verbose: - print('PolarFile: Columns after: ',df.columns.values) - - if standardizeCols: - cAlpha = DEFAULT_COLUMNS['alpha'] - if cAlpha not in df.columns: - raise Exception('Angle of attack was not detected as part of the columns') - else: - cAlpha = df.columns.values[0] - - if to_radians: - # First, check the data, if the max alpha is above pi, most likely we are in degrees - _radians = np.mean(np.abs(df[cAlpha])) <= np.pi / 2 - if _radians: - raise Exception('PolarFile: Asked to convert input to radian, but the data is likely already in radians.') - df[cAlpha]*=np.pi/180 - - Re = np.nan - return df, Re - -if __name__ == "__main__": - from welib.tools.clean_exceptions import * -# PolarFile_OneLineHeader('data/63-235.csv') - #f = PolarFile_NoHeader('data/63-235.csv') -# f = loadPolarFile('data/63-235.csv') - f = loadPolarFile('data/FFA-W3-241-Re12M.dat', verbose=True) - #f = loadPolarFile('data/Cylinder.dat') - #f = loadPolarFile('../../data/NREL5MW/5MW_Baseline/Airfoils/DU21_A17.dat') - print(f) - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py deleted file mode 100644 index 7f2108bbfa..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_interp.py +++ /dev/null @@ -1,47 +0,0 @@ -import unittest -import numpy as np -import os -MyDir=os.path.dirname(__file__) -from pyFAST.airfoils.Polar import * - -# --------------------------------------------------------------------------------} -# --- -# --------------------------------------------------------------------------------{ -class TestPolarInterp(unittest.TestCase): - - def test_interp(self): - # --- Interpolation of self is self - P1=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) - P2=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) - P3= blend(P1,P2,0.5) - np.testing.assert_equal(P3.alpha,P1.alpha) - np.testing.assert_equal(P3.cl,P1.cl) - np.testing.assert_equal(P3.cd,P1.cd) - np.testing.assert_equal(P3.cm,P1.cm) - P2.cl=P2.cl+0.3 - P2.cd=P2.cd+0.3 - P2.cm=P2.cm+0.3 - - # --- Interpolation with weight 0 is first - P3= blend(P1,P2,0.0) - np.testing.assert_equal(P3.cl,P1.cl) - np.testing.assert_equal(P3.cd,P1.cd) - np.testing.assert_equal(P3.cm,P1.cm) - # --- Interpolation with weight 1 is second - P3= blend(P1,P2,1.0) - np.testing.assert_equal(P3.cl,P2.cl) - np.testing.assert_equal(P3.cd,P2.cd) - np.testing.assert_equal(P3.cm,P2.cm) - - # --- Interpolation, weight=0.5, same alpha on both - P1.cl=P1.cl*0+1.0 - P1.cd=P1.cl*0+1.0 - P1.cm=P1.cl*0+1.0 - P2.cl=P1.cl*0+2.0 - P2.cd=P1.cl*0+2.0 - P2.cm=P1.cl*0+2.0 - P3= blend(P1,P2,0.5) - np.testing.assert_equal(P3.cl,P2.cl*0+1.5) - np.testing.assert_equal(P3.cd,P2.cl*0+1.5) - np.testing.assert_equal(P3.cm,P2.cl*0+1.5) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py deleted file mode 100644 index 327a23c54b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_manip.py +++ /dev/null @@ -1,23 +0,0 @@ -import unittest -import numpy as np -import os -MyDir=os.path.dirname(__file__) -from pyFAST.airfoils.Polar import * - -# --------------------------------------------------------------------------------} -# --- -# --------------------------------------------------------------------------------{ -class TestPolarManip(unittest.TestCase): - def assertNaN(self,x): - self.assertTrue(np.isnan(x)) - - def test_read(self): - P=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) - self.assertEqual(P.alpha[-1],180) - self.assertEqual(P.cl[-1],0) - - P=Polar(os.path.join(MyDir,'../data/Cylinder.dat')) - self.assertEqual(P.cl.size,3) - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py deleted file mode 100644 index e117d57e8c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_params.py +++ /dev/null @@ -1,256 +0,0 @@ -import unittest -import numpy as np -import os -MyDir=os.path.dirname(__file__) -from pyFAST.airfoils.Polar import * - -# --------------------------------------------------------------------------------} -# --- -# --------------------------------------------------------------------------------{ -class TestPolarParams(unittest.TestCase): - def setUp(self): - self.P235 = Polar(os.path.join(MyDir,'../data/63-235.csv')) - self.PFFA = Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) - self.PCyl = Polar(os.path.join(MyDir,'../data/Cylinder.csv')) - self.PFFA_rad = Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat'), radians=True) - - def assertNaN(self,x): - self.assertTrue(np.isnan(x)) - - def test_alpha0(self): - # --- Polar with one Cl value - # non zero cl, alpha0 is nan - self.assertNaN (Polar(None,[100],[0.1],[],[]).alpha0()) - # cl value is 0, alpha0 is arbitrarily 0 - self.assertEqual(Polar(None,[100],[0.0],[],[]).alpha0(), 0) - - # --- Polar with one zero crossing - P=Polar(None,[-10,10],[-0.1,0.1],[],[]) - # Alpha0 is found as long as the window holds it - self.assertEqual(P.alpha0(window=[-50,50]),0.0) - self.assertEqual(P.alpha0(window=[-10,10]),0.0) - self.assertEqual(P.alpha0(window=[ -2, 2]),0.0) - # Error when window outside, no crossing found - self.assertRaises(Exception,P.alpha0, window=[-100,-50]) - - # --- Polar with many zero crossing - P=Polar(None,[-10,-5,0,5,10],[-0.1,0.1,-0.1,0.1,0.2],[],[]) - self.assertEqual(P.alpha0(window=[-10,-5]), -7.5) - # Error when several zero crossing are found - #self.assertRaises(Exception,P.alpha0, window=[-10,10]) - print('\n\n>>>>> TODO alpha0 with no zero crossing was commented!!\n\n') - - # --- Polar with constant values - # non zero cl, alpha0 is nan - self.assertNaN (Polar(None,[-10,10],[0.1,0.1],[],[]).alpha0()) - # cl is 0, alpha0 is arbitrarily 0 - self.assertEqual(Polar(None,[-10,10],[0.0,0.0],[],[]).alpha0(), 0) - - # --- Real Polars - np.testing.assert_almost_equal(self.P235.alpha0(),-1.26, decimal=2) - np.testing.assert_almost_equal(self.PFFA.alpha0(),-2.68, decimal=2) - np.testing.assert_almost_equal(self.PCyl.alpha0(),0.00, decimal=2) - - - def test_slope(self): - alpha0 = 10 - # --- Polar with two points - P=Polar(None,np.array([-1,1])+alpha0,[-1,1],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,1.0) - np.testing.assert_almost_equal(a0, alpha0) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,1.0) - np.testing.assert_almost_equal(a0,alpha0) - # --- Polar three points lin - P=Polar(None,np.array([-1,0,1])+alpha0,[-1,0,1],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,1.0) - np.testing.assert_almost_equal(a0,alpha0) - # --- Polar three points cst - P=Polar(None,np.array([-1,0,2])+alpha0,[1,1,1],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,0.0) - np.testing.assert_almost_equal(a0,np.nan) # for constant Cl/=0, we return nan - # --- Polar with sine shape - P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2,-1,0,1,0,0],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,1.0) - np.testing.assert_almost_equal(a0,0.0) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,1.0) - np.testing.assert_almost_equal(a0,0.0) - # --- Polar sine with plateaux - P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2,-2,-1,0,1,1],[],[],radians=False) - P.alpha0() - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,1.0) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,1.0) - # --- Polar sine-line - Difficult to evaluate - P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2.1,-2,-1.1,0,1.1,1.2],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,1.0,decimal=1) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,1.0,decimal=1) - # --- Polar with a kink - Difficult - P=Polar(None,[-3,-2,-1,0,1,2,3],[-1,-2,-2,-2,0,1,1],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,1.5,decimal=1) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,2.0) - # --- Polar step function - P=Polar(None,np.array([-3,-2,-1,0,1,2,3])+alpha0,[-.5,-.5,-.5,-.5,.5,.5,.5],[],[]) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(a0,10.5) - np.testing.assert_almost_equal(sl,1.0) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,1.0) - np.testing.assert_almost_equal(a0,10.5) - # --- Sine - alpha = np.linspace(-50,50,100) - Cl = np.sin(alpha*np.pi/180.)*180/np.pi - P=Polar(None,alpha,Cl,[],[]) - sl,a0=P.cl_linear_slope(window=[-10,10]) - np.testing.assert_almost_equal(sl,1.0, decimal=2) - sl,a0=P.cl_linear_slope(window=[-10,10],method='max') - np.testing.assert_almost_equal(sl,1.0, decimal=2) - # --- Real Polars - P=self.PFFA - sl,a0=P.cl_linear_slope(method='optim', radians=True) # Requesting radians outputs - np.testing.assert_almost_equal(sl,7.091, decimal=3) - np.testing.assert_almost_equal(a0,-0.04682, decimal=3) - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,0.123, decimal=3) - np.testing.assert_almost_equal(a0,-2.683, decimal=3) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,0.13, decimal=3) - # --- Real Polars, with alpha already in radians - P=self.PFFA_rad - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,7.091, decimal=3) # This polar is already in radians - np.testing.assert_almost_equal(a0,-0.04682, decimal=3) - sl,a0=P.cl_linear_slope(method='optim', radians=True) - np.testing.assert_almost_equal(sl,7.091, decimal=3) # This polar is already in radians - np.testing.assert_almost_equal(a0,-0.04682, decimal=3) - # --- Cylinder - P=self.PCyl - sl,a0=P.cl_linear_slope(method='optim') - self.assertEqual(sl,0.0) - # --- Real Polars - P=self.P235 - sl,a0=P.cl_linear_slope(method='optim') - np.testing.assert_almost_equal(sl,0.102, decimal=3) - sl,a0=P.cl_linear_slope(method='max') - np.testing.assert_almost_equal(sl,0.113, decimal=3) - # --- Default method (NOTE: Might change in the future!) - sl,a0=P.cl_linear_slope() - np.testing.assert_almost_equal(sl,0.102, decimal=3) - - ##print(sl,a0) - #import matplotlib.pyplot as plt - #fig=plt.figure() - #ax = fig.add_subplot(111) - ## deg - #ax.plot(P.alpha, P.cl) - #ax.plot(WinLin,(np.array(WinLin)-a0)*sl,'o') - #ax.plot(a0,0,'ko') - #ax.plot(WinSearch[0],0,'ko') - #ax.plot(WinSearch[1],0,'ko') - #ax.plot(P.alpha,(P.alpha-a0)*sl,'--') - #ax.set_xlim(np.array(WinLin)+[-20,+20]) - ## rad - ##ax.plot(np.deg2rad(P.alpha), P.cl) - ##ax.plot(WinLin,(np.array(WinLin)-a0)*sl,'o') - ##ax.plot(np.deg2rad(P.alpha),(np.deg2rad(P.alpha)-a0)*sl,'--') - #ax.set_ylim([-3,2.0]) - #plt.show() - - def test_linear_region(self): - - P=self.PCyl - a_lin,cl_lin,slope,alpha0 = P.linear_region() - np.testing.assert_almost_equal(a_lin[0],-180, decimal=1) - np.testing.assert_almost_equal(a_lin[1], 180, decimal=1) - - P=self.P235 - a_lin,cl_lin,slope,alpha0 = P.linear_region() - np.testing.assert_almost_equal(a_lin[0],-6.9, decimal=1) - np.testing.assert_almost_equal(a_lin[1], 6.2, decimal=1) - - P=self.PFFA - a_lin,cl_lin,slope,alpha0 = P.linear_region() - np.testing.assert_almost_equal(a_lin[0],-9.8, decimal=1) - np.testing.assert_almost_equal(a_lin[1], 9.0, decimal=1) - - - #import matplotlib.pyplot as plt - #fig=plt.figure() - #ax = fig.add_subplot(111) - #ax.plot(P.alpha, P.cl) - #ax.plot(P.alpha, slope*(P.alpha-alpha0),'--') - #ax.plot(a_lin,cl_lin) - #ax.plot(a0,0,'ko') - #ax.plot(WinSearch[0],0,'ko') - #ax.plot(WinSearch[1],0,'ko') - #ax.plot(P.alpha,(P.alpha-a0)*sl,'--') - #ax.set_xlim(np.array(WinLin)+[-20,+20]) - #ax.set_ylim([-3,3.0]) - #plt.show() - - def test_fully_sep(self): - # --- 63-235, for that polar - # merging occurs at i=31 and i=120 - # at i=63 there is a singularity (f_st==1, cl_fs=cl/2) - P=self.P235 - cl_fs,f_st=P.cl_fully_separated() - # Below and above merging, fully sep polar is the same as original - np.testing.assert_almost_equal(cl_fs[30] ,P.cl[30]) - np.testing.assert_almost_equal(cl_fs[121],P.cl[121]) - # Singularity at i=63 - np.testing.assert_almost_equal(cl_fs[63],P.cl[63]/2) - np.testing.assert_almost_equal(f_st[63],1.0) - #np.testing.assert_almost_equal(f_st[63],1.0023744) - # Close to singularity, should be not far from cl/2 - np.testing.assert_almost_equal(cl_fs[64],P.cl[64]/2*1.004,decimal=4) - np.testing.assert_almost_equal(cl_fs[62],P.cl[62]/2*0.998,decimal=4) - - # TODO TODO TODO Ensure harmony between f_st if computed with slope that is not max - #P=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat'),compute_params=True) - #cl_fs,f_st0=P.cl_fully_separated() - #f_st=(P.cl-cl_fs)/(P.cl_inv-cl_fs); - - #import matplotlib.pyplot as plt - #fig=plt.figure() - #ax = fig.add_subplot(111) - #ax.plot(P.alpha , f_st0 ) - #ax.plot(P.alpha , f_st ) - #plt.show() - - #import matplotlib.pyplot as plt - #fig=plt.figure() - #ax = fig.add_subplot(111) - #ax.plot(P.alpha,P.cl,label='Cl') - #ax.plot(P.alpha,cl_fs,'--',label='Cl_fs') - #ax.plot(P.alpha,f_st,label='f_st') - #plt.xlim([-50,50]) - #plt.ylim([-3,3]) - #plt.legend() - #plt.show() - #print(f_st) -# -# P=Polar(os.path.join(MyDir,'../data/Cylinder.dat')) -# sl,offset=P.cl_linear_slope() -# -# plt.show() - -# P=Polar(os.path.join(MyDir,'../data/FFA-W3-241-Re12M.dat')) -# P=Polar(os.path.join(MyDir,'../data/63-235.csv')) -# P=Polar(os.path.join(MyDir,'../data/Cylinder.csv')) -# P=Polar(os.path.join(MyDir,'../data/AD_3-63-224_mod.csv')) -# P=Polar(os.path.join(MyDir,'../data/AD_4-63-218_mod.csv')) -# P=Polar(os.path.join(MyDir,'../data/AD_5_63-214_mod.csv')) - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py deleted file mode 100644 index 1b801be85d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_polar_subfunctions.py +++ /dev/null @@ -1,51 +0,0 @@ - -import unittest -import numpy as np -import os -import matplotlib.pyplot as plt -MyDir=os.path.dirname(__file__) -from pyFAST.airfoils.Polar import _intersections - -# --------------------------------------------------------------------------------} -# --- -# --------------------------------------------------------------------------------{ - - -class TestPolarSubFunctions(unittest.TestCase): - - - def test_intersection1(self): - a, b = 1, 2 - phi = np.linspace(3, 10, 100) - x1 = a*phi - b*np.sin(phi) - y1 = a - b*np.cos(phi) - - x2=phi - y2=np.sin(phi)+2 - x,y=_intersections(x1,y1,x2,y2, plot=False) - - np.testing.assert_almost_equal(x,[6.10766,8.3648], decimal=4) - np.testing.assert_almost_equal(y,[1.825397,2.87209], decimal=4) - - def test_intersection2(self): - - alpha = np.linspace(-180,180,121) - Cl = alpha*np.pi/180 * 2*np.pi - Cn = Cl*np.cos(alpha*np.pi/180) - Cn_lin = 0.10876153755016482* (alpha) #*np.pi/180) - Cn_f = Cn_lin * ((1 + np.sqrt(0.7)) / 2) ** 2 - - x1 = alpha - y1 = Cn - - x2 = alpha - y2 = Cn_f - - x,y=_intersections(x1,y1,x2,y2, plot=False, verbose=False) - - np.testing.assert_almost_equal(x,[-33.2116, 0, 33.2116 ], decimal=3) - np.testing.assert_almost_equal(y,[-3.046 , 0 , 3.04623], decimal=3) - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py deleted file mode 100644 index c7051864e5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/airfoils/tests/test_run_Examples.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) - import matplotlib.pyplot as plt - print('\n--------------------------------------------------------------') - for f in files: - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - plt.close('all') - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst deleted file mode 100644 index 000b67d7c3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/README.rst +++ /dev/null @@ -1,3 +0,0 @@ - -More details coming soon! -------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py deleted file mode 100644 index 1aef8194b3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/case_gen.py +++ /dev/null @@ -1,673 +0,0 @@ -import os -import collections -import glob -import pandas as pd -import numpy as np -import shutil -import stat -import re - -# --- Misc fast libraries -import pyFAST.input_output.fast_input_file as fi -import pyFAST.case_generation.runner as runner -import pyFAST.input_output.postpro as postpro -from pyFAST.input_output.fast_wind_file import FASTWndFile from pyFAST.input_output.rosco_performance_file import ROSCOPerformanceFile from pyFAST.input_output.csv_file import CSVFile -# --------------------------------------------------------------------------------} -# --- Template replace -# --------------------------------------------------------------------------------{ -def handleRemoveReadonlyWin(func, path, exc_info): - """ - Error handler for ``shutil.rmtree``. - If the error is due to an access error (read only file) - it attempts to add write permission and then retries. - Usage : ``shutil.rmtree(path, onerror=onerror)`` - """ - if not os.access(path, os.W_OK): - # Is the error an access error ? - os.chmod(path, stat.S_IWUSR) - func(path) - else: - raise - - -def forceCopyFile (sfile, dfile): - # ---- Handling error due to wrong mod - if os.path.isfile(dfile): - if not os.access(dfile, os.W_OK): - os.chmod(dfile, stat.S_IWUSR) - #print(sfile, ' > ', dfile) - shutil.copy2(sfile, dfile) - -def copyTree(src, dst): - """ - Copy a directory to another one, overwritting files if necessary. - copy_tree from distutils and copytree from shutil fail on Windows (in particular on git files) - """ - def forceMergeFlatDir(srcDir, dstDir): - if not os.path.exists(dstDir): - os.makedirs(dstDir) - for item in os.listdir(srcDir): - srcFile = os.path.join(srcDir, item) - dstFile = os.path.join(dstDir, item) - forceCopyFile(srcFile, dstFile) - - def isAFlatDir(sDir): - for item in os.listdir(sDir): - sItem = os.path.join(sDir, item) - if os.path.isdir(sItem): - return False - return True - - for item in os.listdir(src): - s = os.path.join(src, item) - d = os.path.join(dst, item) - if os.path.isfile(s): - if not os.path.exists(dst): - os.makedirs(dst) - forceCopyFile(s,d) - if os.path.isdir(s): - isRecursive = not isAFlatDir(s) - if isRecursive: - copyTree(s, d) - else: - forceMergeFlatDir(s, d) - - -def templateReplaceGeneral(PARAMS, templateDir=None, outputDir=None, main_file=None, removeAllowed=False, removeRefSubFiles=False, oneSimPerDir=False, dryRun=False): - """ Generate inputs files by replacing different parameters from a template file. - The generated files are placed in the output directory `outputDir` - The files are read and written using the library `weio`. - The template file is read and its content can be changed like a dictionary. - Each item of `PARAMS` correspond to a set of parameters that will be replaced - in the template file to generate one input file. - - For "FAST" input files, parameters can be changed recursively. - - - INPUTS: - PARAMS: list of dictionaries. Each key of the dictionary should be a key present in the - template file when read with `weio` (see: weio.read(main_file).keys() ) - - PARAMS[0]={'DT':0.1, 'EDFile|GBRatio':1, 'ServoFile|GenEff':0.8} - - templateDir: if provided, this directory and its content will be copied to `outputDir` - before doing the parametric substitution - - outputDir : directory where files will be generated. - """ - # --- Helper functions - def rebase_rel(wd,s,sid): - split = os.path.splitext(s) - return os.path.join(wd,split[0]+sid+split[1]) - - def get_strID(p) : - if '__name__' in p.keys(): - strID=p['__name__'] - else: - raise Exception('When calling `templateReplace`, provide the key `__name_` in the parameter dictionaries') - return strID - - def splitAddress(sAddress): - sp = sAddress.split('|') - if len(sp)==1: - return sp[0],[] - else: - return sp[0],sp[1:] - - def rebaseFileName(org_filename, workDir, strID): - new_filename_full = rebase_rel(workDir, org_filename,'_'+strID) - new_filename = os.path.relpath(new_filename_full,workDir).replace('\\','/') - return new_filename, new_filename_full - - def replaceRecurse(templatename_or_newname, FileKey, ParamKey, ParamValue, Files, strID, workDir, TemplateFiles): - """ - FileKey: a single key defining which file we are currently modifying e.g. :'AeroFile', 'EDFile','FVWInputFileName' - ParamKey: the address key of the parameter to be changed, relative to the current FileKey - e.g. 'EDFile|IntMethod' (if FileKey is '') - 'IntMethod' (if FileKey is 'EDFile') - ParamValue: the value to be used - Files: dict of files, as returned by weio, keys are "FileKeys" - """ - # --- Special handling for the root - if FileKey=='': - FileKey='Root' - # --- Open (or get if already open) file where a parameter needs to be changed - if FileKey in Files.keys(): - # The file was already opened, it's stored - f = Files[FileKey] - newfilename_full = f.filename - newfilename = os.path.relpath(newfilename_full,workDir).replace('\\','/') - - else: - templatefilename = templatename_or_newname - templatefilename_full = os.path.join(workDir,templatefilename) - TemplateFiles.append(templatefilename_full) - if FileKey=='Root': - # Root files, we start from strID - ext = os.path.splitext(templatefilename)[-1] - newfilename_full = os.path.join(wd,strID+ext) - newfilename = strID+ext - if dryRun: newfilename = os.path.join(workDir, newfilename) obj=type('DummyClass', (object,), {'filename':newfilename}) return newfilename, {'Root':obj} else: - newfilename, newfilename_full = rebaseFileName(templatefilename, workDir, strID) - #print('--------------------------------------------------------------') - #print('TemplateFile :', templatefilename) - #print('TemplateFileFull:', templatefilename_full) - #print('NewFile :', newfilename) - #print('NewFileFull :', newfilename_full) - shutil.copyfile(templatefilename_full, newfilename_full) - f= fi.FASTInputFile(newfilename_full) # open the template file for that filekey - Files[FileKey]=f # store it - - # --- Changing parameters in that file - NewFileKey_or_Key, ChildrenKeys = splitAddress(ParamKey) - if len(ChildrenKeys)==0: - # A simple parameter is changed - Key = NewFileKey_or_Key - #print('Setting', FileKey, '|',Key, 'to',ParamValue) - if Key=='OutList': - if len(ParamValue)>0: - if len(ParamValue[0])==0: - f[Key] = ParamValue # We replace - else: - OutList=f[Key] - f[Key] = addToOutlist(OutList, ParamValue) # we insert - else: - f[Key] = ParamValue - else: - # Parameters needs to be changed in subfiles (children) - NewFileKey = NewFileKey_or_Key - ChildrenKey = '|'.join(ChildrenKeys) - child_templatefilename = f[NewFileKey].strip('"') # old filename that will be used as a template - baseparent = os.path.dirname(newfilename) - #print('Child templatefilename:',child_templatefilename) - #print('Parent base dir :',baseparent) - workDir = os.path.join(workDir, baseparent) - - # - newchildFilename, Files = replaceRecurse(child_templatefilename, NewFileKey, ChildrenKey, ParamValue, Files, strID, workDir, TemplateFiles) - #print('Setting', FileKey, '|',NewFileKey, 'to',newchildFilename) - f[NewFileKey] = '"'+newchildFilename+'"' - - return newfilename, Files - - - # --- Safety checks - if templateDir is None and outputDir is None: - raise Exception('Provide at least a template directory OR an output directory') - - if templateDir is not None: - if not os.path.exists(templateDir): - raise Exception('Template directory does not exist: '+templateDir) - - # Default value of outputDir if not provided - if templateDir[-1]=='/' or templateDir[-1]=='\\' : - templateDir=templateDir[0:-1] - if outputDir is None: - outputDir=templateDir+'_Parametric' - - # --- Main file use as "master" - if templateDir is not None: - main_file=os.path.join(outputDir, os.path.basename(main_file)) - else: - main_file=main_file - - # Params need to be a list - if not isinstance(PARAMS,list): - PARAMS=[PARAMS] - - if oneSimPerDir: - workDirS=[os.path.join(outputDir,get_strID(p)) for p in PARAMS] - else: - workDirS=[outputDir]*len(PARAMS) - # --- Creating outputDir - Copying template folder to outputDir if necessary - # Copying template folder to workDir - for wd in list(set(workDirS)): - if removeAllowed: - removeFASTOuputs(wd) - if os.path.exists(wd) and removeAllowed: - shutil.rmtree(wd, ignore_errors=False, onerror=handleRemoveReadonlyWin) - templateDir = os.path.normpath(templateDir) - wd = os.path.normpath(wd) - # NOTE: need some special handling if path are the sames - if templateDir!=wd: - copyTree(templateDir, wd) - if removeAllowed: - removeFASTOuputs(wd) - - - TemplateFiles=[] - files=[] - nTot=len(PARAMS) - for ip,(wd,p) in enumerate(zip(workDirS,PARAMS)): - if np.mod(ip+1,1000)==0: - print('File {:d}/{:d}'.format(ip,nTot)) - if '__index__' not in p.keys(): - p['__index__']=ip - - main_file_base = os.path.basename(main_file) - strID = get_strID(p) - # --- Setting up files for this simulation - Files=dict() - for k,v in p.items(): - if k =='__index__' or k=='__name__': - continue - new_mainFile, Files = replaceRecurse(main_file_base, '', k, v, Files, strID, wd, TemplateFiles) - if dryRun: break - # --- Writting files - for k,f in Files.items(): - if k=='Root': - files.append(f.filename) - if not dryRun: f.write() - # --- Remove extra files at the end - if removeRefSubFiles: - TemplateFiles, nCounts = np.unique(TemplateFiles, return_counts=True) - if not oneSimPerDir: - # we can only detele template files that were used by ALL simulations - TemplateFiles=[t for nc,t in zip(nCounts, TemplateFiles) if nc==len(PARAMS)] - for tf in TemplateFiles: - try: - os.remove(tf) - except: - print('[FAIL] Removing '+tf) - pass - return files - -# def templateReplace(PARAMS, *args, **kwargs): -def templateReplace(PARAMS, templateDir, outputDir=None, main_file=None, removeAllowed=False, removeRefSubFiles=False, oneSimPerDir=False, dryRun=False): - """ - see templateReplaceGeneral - - Replace parameters in a fast folder using a list of dictionaries where the keys are for instance: - 'DT', 'EDFile|GBRatio', 'ServoFile|GenEff' - """ - # --- For backward compatibility, remove "FAST|" from the keys - for p in PARAMS: - old_keys=[ k for k,_ in p.items() if k.find('FAST|')==0] - for k_old in old_keys: - k_new=k_old.replace('FAST|','') - p[k_new] = p.pop(k_old) - -# return templateReplaceGeneral(PARAMS, *args, **kwargs) - return templateReplaceGeneral(PARAMS, templateDir, outputDir=outputDir, main_file=main_file, - removeAllowed=removeAllowed, removeRefSubFiles=removeRefSubFiles, oneSimPerDir=oneSimPerDir, dryRun=dryRun) - -def addToOutlist(OutList, Signals): - if not isinstance(Signals,list): - raise Exception('Signals must be a list') - if len(Signals)==0: - return - for s in Signals: - if len(s)>0: - ss=s.split()[0].strip().strip('"').strip('\'') - AlreadyIn = any([o.find(ss)==1 for o in OutList ]) - if not AlreadyIn: - OutList.append(s) - if len(OutList[0])>0: - OutList=['']+OutList # ensuring first element has zero length (fast_input_file limitation for now) - return OutList - -def removeFASTOuputs(workDir): - # Cleaning folder - for f in glob.glob(os.path.join(workDir,'*.out')): - os.remove(f) - for f in glob.glob(os.path.join(workDir,'*.outb')): - os.remove(f) - for f in glob.glob(os.path.join(workDir,'*.ech')): - os.remove(f) - for f in glob.glob(os.path.join(workDir,'*.sum')): - os.remove(f) - -# --------------------------------------------------------------------------------} -# --- Tools for template replacement -# --------------------------------------------------------------------------------{ -def paramsSteadyAero(p=None): - p = dict() if p is None else p - p['AeroFile|AFAeroMod']=1 # remove dynamic effects dynamic - p['AeroFile|WakeMod']=1 # remove dynamic inflow dynamic - p['AeroFile|TwrPotent']=0 # remove tower shadow - p['AeroFile|TwrAero']=False # remove tower shadow - return p - -def paramsNoGen(p=None): - p = dict() if p is None else p - p['EDFile|GenDOF' ] = 'False' - return p - -def paramsGen(p=None): - p = dict() if p is None else p - p['EDFile|GenDOF' ] = 'True' - return p - -def paramsNoController(p=None): - p = dict() if p is None else p - p['ServoFile|PCMode'] = 0; - p['ServoFile|VSContrl'] = 0; - p['ServoFile|YCMode'] = 0; - return p - -def paramsControllerDLL(p=None): - p = dict() if p is None else p - p['ServoFile|PCMode'] = 5; - p['ServoFile|VSContrl'] = 5; - p['ServoFile|YCMode'] = 5; - p['EDFile|GenDOF'] = 'True'; - return p - - -def paramsStiff(p=None): - p = dict() if p is None else p - p['EDFile|FlapDOF1'] = 'False' - p['EDFile|FlapDOF2'] = 'False' - p['EDFile|EdgeDOF' ] = 'False' - p['EDFile|TeetDOF' ] = 'False' - p['EDFile|DrTrDOF' ] = 'False' - p['EDFile|YawDOF' ] = 'False' - p['EDFile|TwFADOF1'] = 'False' - p['EDFile|TwFADOF2'] = 'False' - p['EDFile|TwSSDOF1'] = 'False' - p['EDFile|TwSSDOF2'] = 'False' - p['EDFile|PtfmSgDOF'] = 'False' - p['EDFile|PtfmSwDOF'] = 'False' - p['EDFile|PtfmHvDOF'] = 'False' - p['EDFile|PtfmRDOF'] = 'False' - p['EDFile|PtfmPDOF'] = 'False' - p['EDFile|PtfmYDOF'] = 'False' - return p - -def paramsWS_RPM_Pitch(WS, RPM, Pitch, baseDict=None, flatInputs=False, tMax_OneRotation=True, nPerRot=60, dtMax=0.2): - """ - Generate OpenFAST "parameters" (list of dictionaries with "address") - chaing the inputs in ElastoDyn, InflowWind for different wind speed, RPM and Pitch - """ - # --- Ensuring everythin is an iterator - def iterify(x): - if not isinstance(x, collections.Iterable): x = [x] - return x - WS = iterify(WS) - RPM = iterify(RPM) - Pitch = iterify(Pitch) - # --- If inputs are not flat but different vectors to length through, we flatten them (TODO: meshgrid and ravel?) - if not flatInputs : - WS_flat = [] - Pitch_flat = [] - RPM_flat = [] - for pitch in Pitch: - for rpm in RPM: - for ws in WS: - WS_flat.append(ws) - RPM_flat.append(rpm) - Pitch_flat.append(pitch) - else: - WS_flat, Pitch_flat, RPM_flat = WS, Pitch, RPM - - # --- Defining the parametric study - PARAMS=[] - i=0 - for ws,rpm,pitch in zip(WS_flat,RPM_flat,Pitch_flat): - if baseDict is None: - p=dict() - else: - p = baseDict.copy() - if tMax_OneRotation: - # Ensure that tMax is large enough to cover one full rotation - omega = rpm/60*2*np.pi - T = 2*np.pi/omega - dt = min(dtMax, T/nPerRot) - p['DT'] = dt - p['TMax'] = T+3*dt # small buffer - p['DT_Out'] = 'default' - - p['EDFile|RotSpeed'] = rpm - p['InflowFile|HWindSpeed'] = ws - p['InflowFile|WindType'] = 1 # Setting steady wind - p['EDFile|BlPitch(1)'] = pitch - p['EDFile|BlPitch(2)'] = pitch - p['EDFile|BlPitch(3)'] = pitch - - p['__index__'] = i - #p['__name__'] = '{:03d}_ws{:04.1f}_pt{:04.2f}_om{:04.2f}'.format(p['__index__'],p['InflowFile|HWindSpeed'],p['EDFile|BlPitch(1)'],p['EDFile|RotSpeed']) - p['__name__'] = 'ws{:04.1f}_pt{:04.2f}_om{:04.2f}'.format(p['InflowFile|HWindSpeed'],p['EDFile|BlPitch(1)'],p['EDFile|RotSpeed']) - i=i+1 - PARAMS.append(p) - return PARAMS - -def paramsLinearTrim(p=None): - p = dict() if p is None else p - - # Set a few DOFs, move this to main file - p['Linearize'] = True - p['CalcSteady'] = True - p['TrimGain'] = 1e-4 - p['TrimTol'] = 1e-5 - p['CompMooring'] = 0 - p['CompHydro'] = 0 - p['LinOutJac'] = False - p['LinOutMod'] = False - p['OutFmt'] = '"ES20.12E3"' # Important for decent resolution - - p['AeroFile|AFAeroMod'] = 1 - p['AeroFile|CavitCheck'] = 'False' - p['AeroFile|CompAA'] = 'False' - - p['ServoFile|PCMode'] = 0 - p['ServoFile|VSContrl'] = 1 - - p['ServoFile|CompNTMD'] = 'False' - p['ServoFile|CompTTMD'] = 'False' - - # Set all DOFs off, enable as desired - p['EDFile|FlapDOF1'] = 'False' - p['EDFile|FlapDOF2'] = 'False' - p['EDFile|EdgeDOF'] = 'False' - p['EDFile|TeetDOF'] = 'False' - p['EDFile|DrTrDOF'] = 'False' - p['EDFile|GenDOF'] = 'False' - p['EDFile|YawDOF'] = 'False' - p['EDFile|TwFADOF1'] = 'False' - p['EDFile|TwFADOF2'] = 'False' - p['EDFile|TwSSDOF1'] = 'False' - p['EDFile|TwSSDOF2'] = 'False' - p['EDFile|PtfmSgDOF'] = 'False' - p['EDFile|PtfmSwDOF'] = 'False' - p['EDFile|PtfmHvDOF'] = 'False' - p['EDFile|PtfmRDOF'] = 'False' - p['EDFile|PtfmPDOF'] = 'False' - p['EDFile|PtfmYDOF'] = 'False' - - - return p - -# --------------------------------------------------------------------------------} -# --- -# --------------------------------------------------------------------------------{ -def createStepWind(filename,WSstep=1,WSmin=3,WSmax=25,tstep=100,dt=0.5,tmin=0,tmax=999): - f = FASTWndFile() - Steps= np.arange(WSmin,WSmax+WSstep,WSstep) - print(Steps) - nCol = len(f.colNames) - nRow = len(Steps)*2 - M = np.zeros((nRow,nCol)); - M[0,0] = tmin - M[0,1] = WSmin - for i,s in enumerate(Steps[:-1]): - M[2*i+1,0] = tmin + (i+1)*tstep-dt - M[2*i+2,0] = tmin + (i+1)*tstep - M[2*i+1,1] = Steps[i] - if i0: - main_fastfile=os.path.basename(main_fastfile) - - # --- Reading main fast file to get rotor radius - fst = fi.FASTInputFile(os.path.join(refdir,main_fastfile)) - ed = fi.FASTInputFile(os.path.join(refdir,fst['EDFile'].replace('"',''))) - R = ed['TipRad'] - - # --- Making sure we have - if (Omega is not None): - if (Lambda is not None): - WS = np.ones(Omega.shape)*WS_default - elif (WS is not None): - if len(WS)!=len(Omega): - raise Exception('When providing Omega and WS, both vectors should have the same dimension') - else: - WS = np.ones(Omega.shape)*WS_default - else: - Omega = WS_default * Lambda/R*60/(2*np.pi) #[rpm] TODO, use more realistic combinations of WS and Omega - WS = np.ones(Omega.shape)*WS_default - - - # --- Defining flat vectors of operating conditions - WS_flat = [] - RPM_flat = [] - Pitch_flat = [] - for pitch in Pitch: - for (rpm,ws) in zip(Omega,WS): - WS_flat.append(ws) - RPM_flat.append(rpm) - Pitch_flat.append(pitch) - # --- Setting up default options - baseDict={'TMax': TMax, 'DT': 0.01, 'DT_Out': 0.1, 'OutFileFmt':2} # NOTE: Tmax should be at least 2pi/Omega - baseDict['AeroFile|OutList'] = ['', '"RtAeroCp"', '"RtAeroCt"','"RtVAvgxh"'] - baseDict['EDFile|OutList'] = ['', '"Azimuth"' ,'"RotSpeed"', '"BldPitch1"'] - baseDict['InflowFile|PLexp'] = 0 - baseDict['InflowFile|RefHt'] = 90 # Arbitrary - baseDict['InflowFile|NWindVel'] =1 - baseDict['InflowFile|WindVxiList']=0 - baseDict['InflowFile|WindVyiList']=0 - baseDict['InflowFile|WindVziList']=90 # should be same as RefHt - baseDict['InflowFile|OutList'] = ['', '"Wind1VelX"'] - - baseDict = paramsNoController(baseDict) - if bStiff: - baseDict = paramsStiff(baseDict) - if bNoGen: - baseDict = paramsNoGen(baseDict) - if bSteadyAero: - baseDict = paramsSteadyAero(baseDict) - - # --- Creating set of parameters to be changed - PARAMS = paramsWS_RPM_Pitch(WS_flat, RPM_flat, Pitch_flat, baseDict=baseDict, flatInputs=True, tMax_OneRotation=True) - - # --- Generating all files in a workDir - if workDir is None: - workDir = refdir.strip('/').strip('\\')+'_CPLambdaPitch' - print('>>> Generating {} inputs files in {}'.format(len(PARAMS), workDir)) - RemoveAllowed=reRun # If the user want to rerun, we can remove, otherwise we keep existing simulations - fastFiles=templateReplace(PARAMS, refdir, outputDir=workDir,removeRefSubFiles=True,removeAllowed=RemoveAllowed,main_file=main_fastfile, dryRun=skipWrite) - - # --- Creating a batch script just in case - batchFile = os.path.join(workDir,'_RUN_ALL.bat') - runner.writeBatch(batchFile, fastFiles, fastExe=fastExe, nBatches=nCores) - print('>>> Batch script created (if preferred):', batchFile) - - # --- Running fast simulations - print('>>> Running {} simulations...'.format(len(fastFiles))) - runner.run_fastfiles(fastFiles, showOutputs=showOutputs, fastExe=fastExe, nCores=nCores, reRun=reRun) - - # --- Postpro - Computing averages at the end of the simluation - print('>>> Postprocessing...') - outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] - # outFiles = glob.glob(os.path.join(workDir,'*.outb')) - ColKeepStats = ['RotSpeed_[rpm]','BldPitch1_[deg]','RtAeroCp_[-]','RtAeroCt_[-]','Wind1VelX_[m/s]'] - ColSort='RotSpeed_[rpm]' - try: - result = postpro.averagePostPro(outFiles, avgMethod='periods', avgParam=1, ColKeep=ColKeepStats, ColSort=ColSort ) - except: - result = postpro.averagePostPro(outFiles, avgMethod='constantwindow', avgParam=None, ColKeep=ColKeepStats, ColSort=ColSort) - - # --- Adding lambda, sorting and keeping only few columns - result['lambda_[-]'] = result['RotSpeed_[rpm]']* R*2*np.pi/60/result['Wind1VelX_[m/s]'] - result.sort_values(['lambda_[-]','BldPitch1_[deg]'], ascending=[True,True], inplace=True) - ColKeepFinal = ['lambda_[-]','BldPitch1_[deg]','RtAeroCp_[-]','RtAeroCt_[-]'] - result = result[ColKeepFinal] - - # --- Converting to matrices - CP = result['RtAeroCp_[-]'].values - CT = result['RtAeroCt_[-]'].values - MCP = CP.reshape((len(Lambda),len(Pitch))) - MCT = CT.reshape((len(Lambda),len(Pitch))) - - # --- Create a ROSCO PerformanceFile for convenience - turbname = os.path.basename(exportBase) - rs = ROSCOPerformanceFile(pitch=Pitch, tsr=Lambda, CP=MCP, CT=MCT, name=turbname) - - if exportBase is not None: - if exportFmt.lower()=='rosco': - # Write a ROSCO performance file - aeroMapFile = exportBase+'_CPCTCQ.txt' - rs.write(aeroMapFile) - elif exportFmt.lower()=='csv': - # Write individual CSV files - np.savetxt(exportBase+'_Lambda.csv',Lambda,delimiter = ',') - np.savetxt(exportBase+'_Pitch.csv' ,Pitch ,delimiter = ',') - np.savetxt(exportBase+'_CP.csv' ,MCP ,delimiter = ',') - np.savetxt(exportBase+'_CT.csv' ,MCT ,delimiter = ',') - else: - raise NotImplementedError(exportFmt) - - fig = None - if plot is True: - # --- Plotting matrix of CP values - fig = rs.plotCP3D() - return rs, result, fig - - -if __name__=='__main__': - # --- Test of templateReplace - PARAMS = {} - PARAMS['TMax'] = 10 - PARAMS['__name__'] = 'MyName' - PARAMS['DT'] = 0.01 - PARAMS['DT_Out'] = 0.1 - PARAMS['EDFile|RotSpeed'] = 100 - PARAMS['EDFile|BlPitch(1)'] = 1 - PARAMS['EDFile|GBoxEff'] = 0.92 - PARAMS['ServoFile|VS_Rgn2K'] = 0.00038245 - PARAMS['ServoFile|GenEff'] = 0.95 - PARAMS['InflowFile|HWindSpeed'] = 8 - templateReplace(PARAMS,refDir,RemoveRefSubFiles=True) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore deleted file mode 100644 index 34e7effc2a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -NREL5MW/ -NREL5MW_* -*.csv -_* diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py deleted file mode 100644 index a7b98b54eb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_CPLambdaPitch.py +++ /dev/null @@ -1,48 +0,0 @@ -import numpy as np -import os -import matplotlib.pyplot as plt - -import pyFAST.case_generation.case_gen as case_gen -import pyFAST.input_output.postpro as postpro - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - -def CPLambdaExample(): - """ Example to determine the CP-CT Lambda Pitch matrices of a turbine. - This script uses the function CPCT_LambdaPitch which basically does the same as Parametric Examples given in this folder - """ - FAST_EXE = os.path.join(MyDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) - ref_dir = os.path.join(MyDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) - main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template - - # --- Computing CP and CT matrices for range of lambda and pitches - Lambda = np.linspace(0.1,10,3) - Pitch = np.linspace(-10,10,4) - - CP,CT,Lambda,Pitch,MaxVal,result = case_gen.CPCT_LambdaPitch(ref_dir,main_file,Lambda,Pitch,fastExe=FAST_EXE,showOutputs=False,nCores=4,TMax=10) - - print('CP max',MaxVal) - - # --- Plotting matrix of CP values - from mpl_toolkits.mplot3d import Axes3D - from matplotlib import cm - fig = plt.figure() - ax = fig.gca(projection='3d') - LAMBDA, PITCH = np.meshgrid(Lambda, Pitch) - CP[CP<0]=0 - surf = ax.plot_surface(LAMBDA, PITCH, np.transpose(CP), cmap=cm.coolwarm, linewidth=0, antialiased=True,alpha=0.8) - ax.scatter(MaxVal['lambda_opt'],MaxVal['pitch_opt'],MaxVal['CP_max'],c='k',marker='o',s=20) - ax.set_xlabel('lambda') - ax.set_ylabel('pitch') - ax.set_zlabel('CP') - fig.colorbar(surf, shrink=0.5, aspect=5) - - - -if __name__=='__main__': - CPLambdaExample() - plt.show() -if __name__=='__test__': - # Need openfast.exe, doing nothing - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py deleted file mode 100644 index daca408d07..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_ExcelFile.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Generate, run and postprocess openfast cases using an Excelfile which defines the parameters to change for each simulation -""" -import os -import pandas as pd - -import pyFAST.case_generation.case_gen as case_gen -import pyFAST.case_generation.runner as runner -import pyFAST.input_output.postpro as postpro -import pyFAST.input_output as io - -# Get current directory so this script can be called from any location -scriptDir=os.path.dirname(__file__) - - -def main(run=True): - # --- Main Parameters - ref_dir = os.path.join(scriptDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) - FAST_EXE = os.path.join(scriptDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) - main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template - work_dir = os.path.join(scriptDir, '_NREL5MW_ParametricExcel/') # Output folder (will be created) - parametricFile = os.path.join(scriptDir, 'ParametricExcel.xlsx') # Excel file containing set of parameters - - # --- Reading Excel file, converting it to a list of dictionaries, and generate input files - dfs = io.excel_file.ExcelFile(parametricFile).toDataFrame() - if isinstance(dfs, dict): - df = dfs[list(dfs.keys())[0]] - else: - df = dfs - PARAMS = df.to_dict('records') - fastFiles=case_gen.templateReplace(PARAMS, ref_dir, outputDir=work_dir, removeRefSubFiles=True, removeAllowed=False, main_file=main_file) - - if run: - # --- Running fast simulations - print('>>> Running {} simulations in {} ...'.format(len(fastFiles), work_dir)) - runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'),fastFiles,fastExe=FAST_EXE) - runner.run_fastfiles(fastFiles, showOutputs=True, fastExe=FAST_EXE, nCores=4) - - # --- Postpro - Computing averages at the end of the simluation - print('>>> Postprocessing...') - outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] - ColKeepStats = ['RotSpeed_[rpm]','BldPitch1_[deg]','RtAeroCp_[-]','RtAeroCt_[-]','Wind1VelX_[m/s]'] - result = postpro.averagePostPro(outFiles,avgMethod='constantwindow',avgParam=5,ColKeep=ColKeepStats,ColSort='RotSpeed_[rpm]') - csv_file = '_ParametricExcel_Summary.csv' - result.to_csv(csv_file ,sep='\t',index=False) - print('Average values saved to _ParametricExcel_Summary.csv') - return work_dir - -if __name__=='__main__': - main() - -if __name__=='__test__': - work_dir = main(run=False) # Need openfast.exe, not running - import shutil - shutil.rmtree(work_dir) - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py deleted file mode 100644 index 1e3e82f4ee..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_Parametric.py +++ /dev/null @@ -1,112 +0,0 @@ -""" Example to run a set of OpenFAST simulations (parametric study) - -This script uses a reference directory (`ref_dir`) which contains a reference input file (.fst) -1) The reference directory is copied to a working directory (`work_dir`). -2) All the fast input files are generated in this directory based on a list of dictionaries (`PARAMS`). -For each dictionary in this list: - - The keys are "path" to a input parameter, e.g. `EDFile|RotSpeed` or `FAST|TMax`. - These should correspond to the variables used in the FAST inputs files. - - The values are the values corresponding to this parameter -For instance: - PARAMS[0]['EDFile|RotSpeed'] = 5 - PARAMS[0]['InflowFile|HWindSpeed'] = 10 - -3) The simulations are run, successively distributed on `nCores` CPUs. -4) The output files are read, and averaged based on a method (e.g. average over a set of periods, - see averagePostPro in postpro for the different averaging methods). - A pandas DataFrame is returned - -""" -import numpy as np -import os -import pyFAST.case_generation.case_gen as case_gen -import pyFAST.case_generation.runner as runner -import pyFAST.input_output.postpro as postpro -from pyFAST.input_output.fast_input_file import FASTInputFile - -# Get current directory so this script can be called from any location -scriptDir=os.path.dirname(__file__) - -# --- Parameters for this script -FAST_EXE = os.path.join(scriptDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) -ref_dir = os.path.join(scriptDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) -main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template -work_dir = '_NREL5MW_Parametric/' # Output folder (will be created) - - -# --- Reading some reference files/tables to be able to modify tables -# BDBld_ref = FASTInputFile('BeamDyn_Blade_ref.dat') -# print(BDBld_ref.keys()) -# BP_ref = BDBld_ref['BeamProperties'] -# -# HD_ref = FASTInputFile('HD_ref.dat') -# print(HD_ref.keys()) -# SmplProp_ref = HD_ref['SmplProp'] - -# --- Defining the parametric study (list of dictionnaries with keys as FAST parameters) -WS = [4 , 5 , 10 , 12 , 14 , 16] -RPM = [2.5 , 7.5 , 11.3 , 12.1 , 12.1, 12.1] -PITCH = [0 , 0 , 0 , 0 , 8.7 , 10.4] -BaseDict = {'TMax': 10, 'DT': 0.01, 'DT_Out': 0.1} -BaseDict = case_gen.paramsNoController(BaseDict) # Remove the controller -#BaseDict = case_gen.paramsControllerDLL(BaseDict) # Activate the controller -#BaseDict = case_gen.paramsStiff(BaseDict) # Make the turbine stiff (except generator) -#BaseDict = case_gen.paramsNoGen(BaseDict) # Remove the Generator DOF -PARAMS=[] -for i,(wsp,rpm,pitch) in enumerate(zip(WS,RPM,PITCH)): # NOTE: same length of WS and RPM otherwise do multiple for loops - p=BaseDict.copy() - - # --- Changing typical parameters (operating ocnditions) - p['EDFile|RotSpeed'] = rpm - p['EDFile|BlPitch(1)'] = pitch - p['EDFile|BlPitch(2)'] = pitch - p['EDFile|BlPitch(3)'] = pitch - p['InflowFile|HWindSpeed'] = wsp - p['InflowFile|WindType'] = 1 # Setting steady wind - # Defining name for .fst file - p['__name__']='{:03d}_ws{:04.1f}_om{:04.2f}'.format(i,p['InflowFile|HWindSpeed'],p['EDFile|RotSpeed']) - - # --- Examples to change other parameters - # p['AeroFile|TwrAero'] = True - # p['EDFile|BldFile(1)|AdjBlMs'] =1.1 - # p['EDFile|BldFile(2)|AdjBlMs'] =1.1 - # p['EDFile|BldFile(3)|AdjBlMs'] =1.1 - # Changing BeamDyn properties - # BP = BP_ref.copy() # Make a copy to be safe - # BP['K']= BP['K']*i # Modify stiffness - # p['BDBldFile(1)|BldFile|BeamProperties'] = BP # Use the updated stiffness for this case - # Changing HydroDyn properties - # SmplProp = SmplProp_ref.copy() # Make a copy to be safe - # SmplProp[0,0] = Cd[i] # Change Cd value - # p['HDFile|SmplProp'] = SmplProp # Use the updated table for this case,s - - PARAMS.append(p) - -# --- Generating all files in a workdir -fastFiles=case_gen.templateReplace(PARAMS, ref_dir, outputDir=work_dir, removeRefSubFiles=True, main_file=main_file, oneSimPerDir=False) -print('Main input files:') -print(fastFiles) - -# --- Creating a batch script just in case -runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'),fastFiles,fastExe=FAST_EXE) - -if __name__=='__main__': - # --- Running the simulations - runner.run_fastfiles(fastFiles, fastExe=FAST_EXE, parallel=True, showOutputs=False, nCores=4) - - # --- Simple Postprocessing - outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] - avg_results = postpro.averagePostPro(outFiles,avgMethod='periods',avgParam=1, ColMap = {'WS_[m/s]':'Wind1VelX_[m/s]'},ColSort='WS_[m/s]') - print('>> Average results:') - print(avg_results) - - import matplotlib.pyplot as plt - plt.plot(avg_results['WS_[m/s]'], avg_results['RtAeroCp_[-]']) - plt.xlabel('Wind speed [m/s]') - plt.ylabel('Power coefficient [-]') - plt.show() - -if __name__=='__test__': - # Need openfast.exe, not running - import shutil - shutil.rmtree(work_dir) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py deleted file mode 100644 index 8282cfc546..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/Example_PowerCurve_Parametric.py +++ /dev/null @@ -1,123 +0,0 @@ -import numpy as np -import os - -import pyFAST.case_generation.case_gen as case_gen -import pyFAST.case_generation.runner as runner -import pyFAST.input_output.postpro as postpro - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - -def PowerCurveParametricExample1(): - """ Example to run a set of FAST simulations to determine a power curve. - In this example, the WS, RPM and Pitch are set within a for loop. - If the controller and generator are active, these are just "initial conditions". - Additional parameters may be set by adjusting the BaseDict. - - This script is based on a reference directory which contains a reference main input file (.fst) - Everything is copied to a working directory. - The different fast inputs are generated based on a list of dictionaries, named `PARAMS`. - For each dictionary: - - they keys are "path" to a input parameter, e.g. `EDFile|RotSpeed` or `TMax`. - These should correspond to whater name of the variable is used in the FAST inputs files. - - they values are the values corresponding to this parameter - """ - # --- Parameters for this script - FAST_EXE = os.path.join(MyDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) - ref_dir = os.path.join(MyDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) - main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template - work_dir = '_NREL5MW_PowerCurveParametric/' # Output folder (will be created) - - # --- Defining the parametric study (list of dictionnaries with keys as FAST parameters) - WS = [3,5,7,9 ,11,13,15] - RPM = [5,6,7,10,10,10,10] # initial conditions - PITCH = [0,0,0,0 ,5 ,10,15] # initial conditions - BaseDict = {'TMax': 100, 'DT': 0.01, 'DT_Out': 0.1} - #BaseDict = case_gen.paramsNoController(BaseDict) - #BaseDict = case_gen.paramsStiff(BaseDict) - #BaseDict = case_gen.paramsNoGen(BaseDict) - PARAMS=[] - for wsp,rpm,pitch in zip(WS,RPM,PITCH): # NOTE: same length of WS and RPM otherwise do multiple for loops - p=BaseDict.copy() - p['EDFile|RotSpeed'] = rpm - p['EDFile|BlPitch(1)'] = pitch - p['EDFile|BlPitch(2)'] = pitch - p['EDFile|BlPitch(3)'] = pitch - p['InflowFile|HWindSpeed'] = wsp - p['InflowFile|WindType'] = 1 # Setting steady wind - p['__name__'] = 'ws{:04.1f}'.format(p['InflowFile|HWindSpeed']) - PARAMS.append(p) - - # --- Generating all files in a workdir - fastFiles=case_gen.templateReplace(PARAMS, ref_dir, work_dir, removeRefSubFiles=True, main_file=main_file) - print(fastFiles) - - # --- Creating a batch script just in case - runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'), fastFiles,fastExe=FAST_EXE) - # --- Running the simulations - print('>>> Running {} simulations in {} ...'.format(len(fastFiles), work_dir)) - runner.run_fastfiles(fastFiles, fastExe=FAST_EXE, parallel=True, showOutputs=False, nCores=2) - - # --- Simple Postprocessing - outFiles = [os.path.splitext(f)[0]+'.outb' for f in fastFiles] - - avg_results = postpro.averagePostPro(outFiles,avgMethod='constantwindow',avgParam=10, ColMap = {'WS_[m/s]':'Wind1VelX_[m/s]'},ColSort='WS_[m/s]') - print('>>> Average results:') - print(avg_results) - avg_results.to_csv('_PowerCurve1.csv',sep='\t',index=False) - - -def PowerCurveParametricExample2(): - """ Example to run a set of FAST simulations to determine a power curve. - In this example, the WS, RPM and Pitch are set within a for loop. - If the controller and generator are active, these are just "initial conditions". - Additional parameters may be set by adjusting the BaseDict. - - This script is based on a reference directory which contains a reference main input file (.fst) - Everything is copied to a working directory. - The different fast inputs are generated based on a list of dictionaries, named `PARAMS`. - For each dictionary: - - they keys are "path" to a input parameter, e.g. `EDFile|RotSpeed` or `TMax`. - These should correspond to whater name of the variable is used in the FAST inputs files. - - they values are the values corresponding to this parameter - """ - # --- Parameters for this script - FAST_EXE = os.path.join(MyDir, '../../../data/openfast.exe') # Location of a FAST exe (and dll) - ref_dir = os.path.join(MyDir, '../../../data/NREL5MW/') # Folder where the fast input files are located (will be copied) - main_file = 'Main_Onshore.fst' # Main file in ref_dir, used as a template - work_dir = '_NREL5MW_PowerCurveParametric2/' # Output folder (will be created) - out_Ext = '.outb' # Output extension - - # --- Defining the parametric study (list of dictionnaries with keys as FAST parameters) - WS = [3,5,7,9 ,11,13,15] - RPM = [5,6,7,10,10,10,10] - PITCH = [0,0,0,0 ,5 ,10,15] - BaseDict = {'TMax': 10, 'DT': 0.01, 'DT_Out': 0.1} - PARAMS = case_gen.paramsWS_RPM_Pitch(WS, RPM, PITCH, baseDict=BaseDict, flatInputs=True) - - # --- Generating all files in a workdir - fastFiles = case_gen.templateReplace(PARAMS, ref_dir, work_dir, removeRefSubFiles=True, removeAllowed=True, main_file=main_file) - - # --- Creating a batch script just in case - runner.writeBatch(os.path.join(work_dir,'_RUN_ALL.bat'), fastFiles,fastExe=FAST_EXE) - - # --- Running the simulations - runner.run_fastfiles(fastFiles, fastExe=FAST_EXE, parallel=True, showOutputs=False, nCores=2) - - # --- Simple Postprocessing - outFiles = [os.path.splitext(f)[0]+out_Ext for f in fastFiles] - avg_results = postpro.averagePostPro(outFiles,avgMethod='constantwindow',avgParam=10, ColMap = {'WS_[m/s]':'Wind1VelX_[m/s]'},ColSort='WS_[m/s]') - print('>>> Average results:') - print(avg_results) - avg_results.to_csv('_PowerCurve2.csv',sep='\t',index=False) - - - -if __name__=='__main__': - PowerCurveParametricExample1() - PowerCurveParametricExample2() - -if __name__=='__test__': - # Need openfast.exe, doing nothin - pass - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/ParametricExcel.xlsx b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/ParametricExcel.xlsx deleted file mode 100644 index ae1171b179964e3a93ddd7a454f69be6df3e9606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11500 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 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md deleted file mode 100644 index 57ff0d4f9a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/examples/README.md +++ /dev/null @@ -1,7 +0,0 @@ -This folder contains examples of OpenFAST postprocessing: - -- CPLambdaPitch: determine the CP-CT Lambda Pitch matrices of a turbine. -- ExcelFile: Generate, run and postprocess OpenFAST cases using an Excelfile which defines the parameters to change for each simulation -- ParametricStudy: Generate, run and postprocess OpenFAST simulations where the parameters of each cases are defined within a python loop -- PowerCurve: run a set of OpenFAST simulations to determine a power curve. - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py deleted file mode 100644 index c584c2c10f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/runner.py +++ /dev/null @@ -1,319 +0,0 @@ -# --- For cmd.py -import os -import subprocess -import multiprocessing - -import collections -import glob -import pandas as pd -import numpy as np -import shutil -import stat -import re - -# --- Fast libraries -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.input_output.fast_output_file import FASTOutputFile - -FAST_EXE='openfast' - -# --------------------------------------------------------------------------------} -# --- Tools for executing FAST -# --------------------------------------------------------------------------------{ -# --- START cmd.py -def run_cmds(inputfiles, exe, parallel=True, showOutputs=True, nCores=None, showCommand=True, flags=[], verbose=True): - """ Run a set of simple commands of the form `exe input_file` - By default, the commands are run in "parallel" (though the method needs to be improved) - The stdout and stderr may be displayed on screen (`showOutputs`) or hidden. - A better handling is yet required. - """ - Failed=[] - def _report(p): - if p.returncode==0: - if verbose: - print('[ OK ] Input : ',p.input_file) - else: - Failed.append(p) - if verbose: - print('[FAIL] Input : ',p.input_file) - print(' Directory: '+os.getcwd()) - print(' Command : '+p.cmd) - print(' Use `showOutputs=True` to debug, or run the command above.') - #out, err = p.communicate() - #print('StdOut:\n'+out) - #print('StdErr:\n'+err) - ps=[] - iProcess=0 - if nCores is None: - nCores=multiprocessing.cpu_count() - if nCores<0: - nCores=len(inputfiles)+1 - for i,f in enumerate(inputfiles): - if len(flags)>0: - f=flags + [f] - #print('Process {}/{}: {}'.format(i+1,len(inputfiles),f)) - ps.append(run_cmd(f, exe, wait=(not parallel), showOutputs=showOutputs, showCommand=showCommand)) - iProcess += 1 - # waiting once we've filled the number of cores - # TODO: smarter method with proper queue, here processes are run by chunks - if parallel: - if iProcess==nCores: - for p in ps: - p.wait() - for p in ps: - _report(p) - ps=[] - iProcess=0 - # Extra process if not multiptle of nCores (TODO, smarter method) - for p in ps: - p.wait() - for p in ps: - _report(p) - # --- Giving a summary - if len(Failed)==0: - if verbose: - print('[ OK ] All simulations run successfully.') - return True, Failed - else: - print('[FAIL] {}/{} simulations failed:'.format(len(Failed),len(inputfiles))) - for p in Failed: - print(' ',p.input_file) - return False, Failed - -def run_cmd(input_file_or_arglist, exe, wait=True, showOutputs=False, showCommand=True): - """ Run a simple command of the form `exe input_file` or `exe arg1 arg2` """ - # TODO Better capture STDOUT - if not os.path.exists(exe): - raise Exception('Executable not found: {}'.format(exe)) - if isinstance(input_file_or_arglist, list): - input_file = ' '.join(input_file_or_arglist) - args= [exe] + input_file_or_arglist - else: - input_file=input_file_or_arglist - args= [exe,input_file] - args = [a.strip() for a in args] # No surounding spaces, could cause issue - shell=False - if showOutputs: - STDOut= None - else: - STDOut= open(os.devnull, 'w') - if showCommand: - print('Running: '+' '.join(args)) - if wait: - class Dummy(): - pass - p=Dummy() - p.returncode=subprocess.call(args , stdout=STDOut, stderr=subprocess.STDOUT, shell=shell) - else: - p=subprocess.Popen(args, stdout=STDOut, stderr=subprocess.STDOUT, shell=shell) - # Storing some info into the process - p.cmd = ' '.join(args) - p.args = args - p.input_file = input_file - p.exe = exe - return p - -def runBatch(batchfiles, showOutputs=True, showCommand=True, verbose=True): - """ - Run one or several batch files - TODO: error handling, status, parallel - """ - - if showOutputs: - STDOut= None - else: - STDOut= open(os.devnull, 'w') - - curDir = os.getcwd() - print('Current directory', curDir) - - def runOneBatch(batchfile): - batchfile = batchfile.strip() - batchfile = batchfile.replace('\\','/') - batchDir = os.path.dirname(batchfile) - if showCommand: - print('>>>> Running batch file:', batchfile) - print(' in directory:', batchDir) - try: - os.chdir(batchDir) - returncode=subprocess.call([batchfile], stdout=STDOut, stderr=subprocess.STDOUT, shell=shell) - except: - os.chdir(curDir) - returncode=-10 - return returncode - - shell=False - if isinstance(batchfiles,list): - returncodes = [] - Failed=[] - for batchfile in batchfiles: - returncode = runOneBatch(batchfile) - if returncode!=0: - Failed.append(batchfile) - if len(Failed)>0: - returncode=1 - print('[FAIL] {}/{} Batch files failed.'.format(len(Failed),len(batchfiles))) - print(Failed) - else: - returncode=0 - if verbose: - print('[ OK ] {} batch filse ran successfully.'.format(len(batchfiles))) - # TODO - else: - returncode = runOneBatch(batchfiles) - if returncode==0: - if verbose: - print('[ OK ] Batch file ran successfully.') - else: - print('[FAIL] Batch file failed:',batchfiles) - - return returncode - - -# --- END cmd.py - -def run_fastfiles(fastfiles, fastExe=None, parallel=True, showOutputs=True, nCores=None, showCommand=True, reRun=True, verbose=True): - if fastExe is None: - fastExe=FAST_EXE - if not reRun: - # Figure out which files exist - newfiles=[] - for f in fastfiles: - base=os.path.splitext(f)[0] - if os.path.exists(base+'.outb') or os.path.exists(base+'.out'): - print('>>> Skipping existing simulation for: ',f) - pass - else: - newfiles.append(f) - fastfiles=newfiles - - return run_cmds(fastfiles, fastExe, parallel=parallel, showOutputs=showOutputs, nCores=nCores, showCommand=showCommand, verbose=verbose) - -def run_fast(input_file, fastExe=None, wait=True, showOutputs=False, showCommand=True): - if fastExe is None: - fastExe=FAST_EXE - return run_cmd(input_file, fastExe, wait=wait, showOutputs=showOutputs, showCommand=showCommand) - - -def writeBatch(batchfile, fastfiles, fastExe=None, nBatches=1, pause=False, flags='', flags_after='', - run_if_ext_missing=None, - discard_if_ext_present=None, - dispatch=False, - stdOutToFile=False, - echo=True): - """ Write one or several batch file, all paths are written relative to the batch file directory. - The batch file will consist of lines of the form: - [CONDITION] EXE [FLAGS] FILENAME [FLAGS_AFTER] - - INPUTS: - - batchfile: path of the batch file to be written. - If several files are requested (using nBatches) _i is inserted before the extension - - nBatches: split into nBatches files. - - pause: insert a pause statement at the end so that batch file is not closed after execution - - flags: flags (string) to be placed between the executable and the filename - - flags_after: flags (string) to be placed after the filename - - run_if_ext_missing: add a line in the batch file so that the command is only run if - the file `f.EXT` is missing, where .EXT is specified in run_if_ext_missing - If None, the command is always run - - discard_if_ext_present: similar to run_if_ext_missing, but this time, the lines are not written to the batch file - The test for existing outputs is done before writing the batch file - - dispatch: if True, the input files are dispatched (the first nBatches files are dispathced on the nBatches) - - stdOutToFile: if True, the output of the command is redirected to filename.stdout - - example: - writeBatch('dir/MyBatch.bat', ['dir/c1.fst','dir/c2.fst'], 'op.exe', flags='-v', run_if_ext_missing='.outb') - - will generate a file with the following content: - if not exist c1.outb (../of.exe c1.fst) else (echo "Skipping c1.fst") - if not exist c2.outb (../of.exe c2.fst) else (echo "Skipping c2.fst") - - - """ - if fastExe is None: - fastExe=FAST_EXE - fastExe_abs = os.path.abspath(fastExe) - batchfile_abs = os.path.abspath(batchfile) - batchdir = os.path.dirname(batchfile_abs) - fastExe_rel = os.path.relpath(fastExe_abs, batchdir) - if len(flags)>0: - flags=' '+flags - if len(flags_after)>0: - flags_after=' '+flags_after - - # Remove commandlines if outputs are already present - if discard_if_ext_present: - outfiles = [os.path.splitext(f)[0] + discard_if_ext_present for f in fastfiles] - nIn=len(fastfiles) - fastfiles =[f for f,o in zip(fastfiles,outfiles) if not os.path.exists(o)] - nMiss=len(fastfiles) - if nIn>nMiss: - print('[INFO] WriteBatch: discarding simulations, only {}/{} needed'.format(nMiss, nIn)) - - - def writeb(batchfile, fastfiles): - with open(batchfile,'w') as f: - if not echo: - if os.name == 'nt': - f.write('@echo off\n') - for ff in fastfiles: - ff_abs = os.path.abspath(ff) - ff_rel = os.path.relpath(ff_abs, batchdir) - cmd = fastExe_rel + flags + ' '+ ff_rel + flags_after - if stdOutToFile: - stdout = os.path.splitext(ff_rel)[0]+'.stdout' - cmd += ' > ' +stdout - if run_if_ext_missing is not None: - # TODO might be windows only - ff_out = os.path.splitext(ff_rel)[0] + run_if_ext_missing - if os.name == 'nt': - cmd = 'if not exist {} ({}) else (echo Skipping {})'.format(ff_out, cmd, ff_rel) - else: - cmd = 'if [[ ! -f {} ]] ; then {}; else echo Skipping {} ; fi'.format(ff_out, cmd, ff_rel) - f.write("{:s}\n".format(cmd)) - if pause: - f.write("pause\n") # might be windows only.. - - - - if nBatches==1: - writeb(batchfile, fastfiles) - return batchfile - else: - - if dispatch: - # TODO this can probably be done with a one liner - fastfiles2=[] - for i in range(nBatches): - fastfiles2+=fastfiles[i::nBatches] - fastfiles = fastfiles2 - - splits = np.array_split(fastfiles,nBatches) - base, ext = os.path.splitext(batchfile) - batchfiles=[] - for i in np.arange(nBatches): - batchfile = base+'_{:d}'.format(i+1) + ext - batchfiles.append(batchfile) - writeb(batchfile, splits[i]) - return batchfiles - - - - - - -def removeFASTOuputs(workDir): - # Cleaning folder - for f in glob.glob(os.path.join(workDir,'*.out')): - os.remove(f) - for f in glob.glob(os.path.join(workDir,'*.outb')): - os.remove(f) - for f in glob.glob(os.path.join(workDir,'*.ech')): - os.remove(f) - for f in glob.glob(os.path.join(workDir,'*.sum')): - os.remove(f) - -if __name__=='__main__': - run_cmds(['main1.fst','main2.fst'], './Openfast.exe', parallel=True, showOutputs=False, nCores=4, showCommand=True) - pass - # --- Test of templateReplace - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py deleted file mode 100644 index 8b13789179..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py deleted file mode 100644 index c7051864e5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/case_generation/tests/test_run_Examples.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) - import matplotlib.pyplot as plt - print('\n--------------------------------------------------------------') - for f in files: - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - plt.close('all') - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py deleted file mode 100644 index 970b03175f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/common.py +++ /dev/null @@ -1,3 +0,0 @@ - -class PYFASTException(Exception): - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore deleted file mode 100644 index 4a1c923a40..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -*.pyc -*.egg-info -build -dist -_* -!__init__.py -*.spec -*.pdf -*.png - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md deleted file mode 100644 index b284d55c8a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Scripts to convert hawc2 and openfast models, in particular BeamDyn blades. - -See examples folder for examples -See doc folder for some ressources diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py deleted file mode 100644 index 71bd18fe66..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beam.py +++ /dev/null @@ -1,590 +0,0 @@ -""" -Set of tools for stiffness and mass matrix of a beam section -""" - -import numpy as np -from numpy import cos, sin - -# --------------------------------------------------------------------------------} -# --- Functions for 6x6 rigid body mass matrices -# --------------------------------------------------------------------------------{ -def identifyRigidBodyMM(MM): - """ - Based on a 6x6 mass matrix at a reference point: - - Identify the position of the center of mass - - Compute the inertia at the center of mass - """ - mass = MM[0,0] - # Using average of two coeffs to get estimate of COG - xCM = 0.5*( MM[1,5]-MM[2,4])/mass - zCM = 0.5*( MM[0,4]-MM[1,3])/mass - yCM = 0.5*(-MM[0,5]+MM[2,3])/mass - # Destance from refopint to COG - Ref2COG=np.array((xCM,yCM,zCM)) - # Inertia at ref oint - J_P = MM[3:6,3:6].copy() - # Inertia at COG - J_G = translateInertiaMatrixToCOG(J_P, mass, r_PG=Ref2COG ) - return mass, J_G, Ref2COG - -def translateInertiaMatrixToCOG(I_P, Mass, r_PG): - """ Transform inertia matrix with respect to point P to the inertia matrix with respect to the COG - NOTE: the vectors and the inertia matrix needs to be expressed in the same coordinate system. - - INPUTS: - I_G : Inertia matrix 3x3 with respect to COG - Mass : Mass of the body - r_PG: vector from P to COG - """ - I_G = I_P + Mass * np.dot(skew(r_PG), skew(r_PG)) - return I_G - -def translateInertiaMatrixFromCOG(I_G, Mass, r_GP): - """ - Transform inertia matrix with respect to COG to the inertia matrix with respect to point P - NOTE: the vectors and the inertia matrix needs to be expressed in the same coordinate system. - INPUTS: - I_G : Inertia matrix 3x3 with respect to COG - Mass : Mass of the body - r_GP: vector from COG of the body to point P - """ - I_P = I_G - Mass * np.dot(skew(r_GP),skew(r_GP)) - return I_P - -def rigidBodyMassMatrixAtP(m=None, J_G=None, Ref2COG=None): - """ - Rigid body mass matrix (6x6) at a given reference point: - the center of gravity (if Ref2COG is None) - - - INPUTS: - - m/tip: (scalar) body mass - default: None, no mass - - J_G: (3-vector or 3x3 matrix), diagonal coefficients or full inertia matrix - with respect to COG of body! - The inertia is transferred to the reference point if Ref2COG is not None - default: None - - Ref2COG: (3-vector) x,y,z position of center of gravity (COG) with respect to a reference point - default: None, at first/last node. - OUTPUTS: - - M66 (6x6) : rigid body mass matrix at COG or given point - """ - # Default values - if m is None: m=0 - if Ref2COG is None: Ref2COG=(0,0,0) - if J_G is None: J_G=np.zeros((3,3)) - if len(J_G.flatten()==3): J_G = np.eye(3).dot(J_G) - - M66 = np.zeros((6,6)) - x,y,z = Ref2COG - Jxx,Jxy,Jxz = J_G[0,:] - _ ,Jyy,Jyz = J_G[1,:] - _ ,_ ,Jzz = J_G[2,:] - M66[0, :] =[ m , 0 , 0 , 0 , z*m , -y*m ] - M66[1, :] =[ 0 , m , 0 , -z*m , 0 , x*m ] - M66[2, :] =[ 0 , 0 , m , y*m , -x*m , 0 ] - M66[3, :] =[ 0 , -z*m , y*m , Jxx + m*(y**2+z**2) , Jxy - m*x*y , Jxz - m*x*z ] - M66[4, :] =[ z*m , 0 , -x*m , Jxy - m*x*y , Jyy + m*(x**2+z**2) , Jyz - m*y*z ] - M66[5, :] =[ -y*m , x*m , 0 , Jxz - m*x*z , Jyz - m*y*z , Jzz + m*(x**2+y**2) ] - return M66 - -def skew(x): - x=np.asarray(x).ravel() - """ Returns the skew symmetric matrix M, such that: cross(x,v) = M v """ - return np.array([[0, -x[2], x[1]],[x[2],0,-x[0]],[-x[1],x[0],0]]) - - -# --------------------------------------------------------------------------------} -# --- Bauchau -# --------------------------------------------------------------------------------{ -def K_sheartorsion_xbeam(J,K22,K23,K33,x2,x3): - """ Returns Shear-torsion stiffness matrix. See Eq.(13) of DyMore manual """ - return np.array( [ - [J + K22*x3**2 + 2*K23*x2*x3 + K33*x2**2, -K22*x3 - K23*x2, K23*x3 + K33*x2], - [-K22*x3 - K23*x2, K22, -K23], - [K23*x3 + K33*x2, -K23, K33]]) - -def K_axialbending_xbeam(S,H22,H23,H33,x2,x3): - """ Returns Axial-Bending stiffness matrix. See Eq.(20) of DyMore manual """ - return np.array([ - [S, S*x3, -S*x2], - [S*x3, H22 + S*x3**2, -H23 - S*x2*x3], - [-S*x2, -H23 - S*x2*x3, H33 + S*x2**2]]) - -# --------------------------------------------------------------------------------} -# --- BeamDyn -# --------------------------------------------------------------------------------{ -def K_axialbending(EA, EI_x, EI_y, x_C=0, y_C=0, theta_p=0): - """ - Axial bending problem. See KK for notations. - """ - H_xx = EI_x*cos(theta_p)**2 + EI_y*sin(theta_p)**2 - H_yy = EI_x*sin(theta_p)**2 + EI_y*cos(theta_p)**2 - H_xy = (EI_y-EI_x)*sin(theta_p)*cos(theta_p) - return np.array([ - [EA , EA*y_C , -EA*x_C ] , - [EA*y_C , H_xx + EA*y_C**2 , -H_xy - EA*x_C*y_C ] , - [-EA*x_C , -H_xy - EA*x_C*y_C , H_yy + EA*x_C**2 ] - ]) - -def K_sheartorsion(GKt, GA, kxs, kys, x_S=0, y_S=0, theta_s=0): - """ - Shear torsion problem. See KK for notations. - """ - K_xx = GA * ( kxs*cos(theta_s)**2 + kys*sin(theta_s)**2 ) - K_yy = GA * ( kxs*sin(theta_s)**2 + kys*cos(theta_s)**2 ) - K_xy = GA * ( (kys-kxs)*sin(theta_s)*cos(theta_s) ) - return np.array([ - [K_xx , -K_xy , -K_xx*y_S - K_xy*x_S ] , - [-K_xy , K_yy , K_xy*y_S + K_yy*x_S ] , - [-K_xx*y_S - K_xy*x_S , K_xy*y_S + K_yy*x_S , GKt + K_xx*y_S**2 + 2*K_xy*x_S*y_S + K_yy*x_S**2 ] - ]) - - -# --------------------------------------------------------------------------------} -# --- Beam stiffness and mass matrix as function of "beam" properties -# --------------------------------------------------------------------------------{ -def KK(EA, EI_x, EI_y, GKt, GA, kxs, kys, x_C=0, y_C=0, theta_p=0, x_S=0, y_S=0, theta_s=0): - """ - Returns 6x6 stiffness matrix at the cross section origin O, based on inputs at centroid and shear center. - INPUTS: - - EA, EI_x, EI_y: diagonal terms for the axial bending expressed at the centroid and in the principal axis frame - - GKt, GA*kxs, GA*kys: diagonal terms for the shear/torsion expressed at the shear center and in the princial shear direction frame - - kxs, kys: dimensionless shear parameters - - x_C, y_C: coordinates of the centroid (elastic center/ neutral axis), expressed FROM the origin of the cross section O - - x_S, y_S: " shear center " " - - theta_p : angle (around z) FROM the reference axes to the principal axes [rad] - - theta_s : " " " principal shear axes [rad] - """ - H_xx = EI_x*cos(theta_p)**2 + EI_y*sin(theta_p)**2 - H_yy = EI_x*sin(theta_p)**2 + EI_y*cos(theta_p)**2 - H_xy = (EI_y-EI_x)*sin(theta_p)*cos(theta_p) - K_xx = GA * ( kxs*cos(theta_s)**2 + kys*sin(theta_s)**2 ) - K_yy = GA * ( kxs*sin(theta_s)**2 + kys*cos(theta_s)**2 ) - K_xy = GA * ( (kys-kxs)*sin(theta_s)*cos(theta_s) ) - return np.array([ - [K_xx , -K_xy , 0*EA , 0*EA , 0*EA , -K_xx*y_S - K_xy*x_S ] , - [-K_xy , K_yy , 0*EA , 0*EA , 0*EA , K_xy*y_S + K_yy*x_S ] , - [0*EA , 0*EA , EA , EA*y_C , -EA*x_C , 0*EA ] , - [0*EA , 0*EA , EA*y_C , H_xx + EA*y_C**2 , -H_xy - EA*x_C*y_C , 0*EA ] , - [0*EA , 0*EA , -EA*x_C , -H_xy - EA*x_C*y_C , H_yy + EA*x_C**2 , 0*EA ] , - [-K_xx*y_S - K_xy*x_S , K_xy*y_S + K_yy*x_S , 0*EA , 0*EA , 0*EA , GKt + K_xx*y_S**2 + 2*K_xy*x_S*y_S + K_yy*x_S**2 ] - ]) - -def MM(m,I_x,I_y,I_p,x_G=0,y_G=0,theta_i=0): - """ - Returns the mass matrix at a given point O and with respect to given orientation axes based - on the values at the center of gravity and in the inertia axis frame. - The convention is such that: - - x_G,y_G : the distaances FROM point O to point G - - theta_i : angle (around z) FROM the reference axes to the inertial axes - - I_x, I_y, I_p: "diagonal" inertias for the body expressed in the inertial frame and at point G - """ - Ixx = I_x*cos(theta_i)**2 + I_y*sin(theta_i)**2 - Iyy = I_x*sin(theta_i)**2 + I_y*cos(theta_i)**2 - Ixy = (I_y-I_x)*sin(theta_i)*cos(theta_i) - - return np.array([ - [m , 0*m , 0*m , 0*m , 0*m , -m*y_G] , - [0*m , m , 0*m , 0*m , 0*m , m*x_G] , - [0*m , 0*m , m , m*y_G , -m*x_G , 0*m] , - [0*m , 0*m , m*y_G , Ixx + m*y_G**2 , -Ixy - m*x_G*y_G , 0*m] , - [0*m , 0*m , -m*x_G , -Ixy - m*x_G*y_G , Iyy + m*x_G**2 , 0*m] , - [-m*y_G , m*x_G , 0*m , 0*m , 0*m , I_p + m*x_G**2 + m*y_G**2] - ]) - -# --------------------------------------------------------------------------------} -# --- Tools to manipulate 6x6 stiffness and mass matrix -# --------------------------------------------------------------------------------{ -class TransformCrossSectionMatrix(object): - - def CrossSectionTranslationMatrix(self, x, y): - T = np.eye(6) - T[0,5] = y - T[1,5] = -x - T[2,3] = -y - T[2,4] = x - return T - - def CrossSectionRotationMatrix(self, alpha): - c=np.cos(alpha) - s=np.sin(alpha) - R1=[[c,s,0], - [-s,c,0], - [0,0,1]] - R=np.vstack((np.hstack((R1, np.zeros((3,3)))), - np.hstack((np.zeros((3,3)), R1)))) - return R - - def CrossSectionRotoTranslationMatrix(self, M1, x, y, alpha): - # Translation - T = self.CrossSectionTranslationMatrix(x, y) - M2 = T.T @ M1 @ T - # Rotation - R = self.CrossSectionRotationMatrix(alpha) - M3 = R @ M2 @ R.T - return M3 - -class ComputeStiffnessProps(object): - - def ComputeShearCenter(self, K): # shear center equiv. to elastic axes - """ - Shear center location for a 6x6 cross section matrix of a beam oriented along "z" - NOTE: works for BeamDyn or Hawc2 convention - """ - K1 = np.array([[K[i, j] for j in range(3)] for i in range(3)]) - K3 = np.array([[K[i, j+3] for j in range(3)] for i in range(3)]) - Y = np.linalg.solve(K1, -K3) - return [-Y[1,2], Y[0,2]] - - def ComputeTensionCenter(self, K): # tension center equiv. to neutral axes - """ - Tension center (also called elastic center) location for a 6x6 cross section matrix of a beam oriented along "z" - NOTE: works for BeamDyn or Hawc2 convention - """ - K1 = np.array([[K[i, j] for j in range(3)] for i in range(3)]) - K3 = np.array([[K[i, j+3] for j in range(3)] for i in range(3)]) - Y = np.linalg.solve(K1, -K3) - return [Y[2,1], -Y[2,0]] - - def OrientationPrincipalAxesBecas(self, K): - ksub=K[3:5,3:5] - [ val, mod ] = np.linalg.eig(ksub) - val = np.sort(np.diag(val)) - ind = np.argsort(np.diag(val)) - mod = mod[:,ind] - Delta = np.arctan(mod[1,0]/mod[0,0]) - return Delta - - def DecoupleStiffness(self, K): - K1 = np.array([[K[i, j] for j in range(3)] for i in range(3)]) - K3 = np.array([[K[i, j+3] for j in range(3)] for i in range(3)]) - Y = np.linalg.solve(K1, -K3) - I3 = np.eye(3) - Z3 = np.zeros((3,3)) - TL = np.block([[I3, Z3], [Y.T, I3]]) - TR = np.block([[I3, Y], [Z3, I3]]) - return TL @ K @ TR - - def PrincipalAxesRotationAngle(self, decoupledK): - K1 = np.array([[decoupledK[i, j] for j in range(3)] for i in range(3)]) - K3 = np.array([[decoupledK[i+3, j+3] for j in range(3)] for i in range(3)]) - (w1, v1) = np.linalg.eig(K1) - (w3, v3) = np.linalg.eig(K3) - if np.abs(v3[0,0]) < np.abs(v3[0,1]): - angle = np.arccos(v3[0,0]) - else: - angle = -np.arcsin(v3[0,1]) - return angle - -class ComputeInertiaProps(object): - - def ComputeMassCenter(self, M): - """ - Mass center location for a 6x6 cross section matrix of a beam oriented along "z" - NOTE: works for BeamDyn or Hawc2 convention - """ - M1 = np.array([[M[i, j] for j in range(3)] for i in range(3)]) - M3 = np.array([[M[i, j+3] for j in range(3)] for i in range(3)]) - Y = np.linalg.solve(M1, -M3) - return [Y[2,1], -Y[2,0]] - - def Translate(self, M, x, y): - return TranslateSectionMassMatrix(M, x ,y) - - -def TranslateSectionMassMatrix(M, x, y): - """ - Translate a 6x6 section mass matrix to a different point - """ - # First identify main properties (mass, inertia, location of center of mass from previous ref point) - mass, J_G, Ref2COG = identifyRigidBodyMM(M) - # New COG location from new (x,y) ref point - Ref2COG[0] -= x - Ref2COG[1] -= y - Ref2COG[2] = 0 # for sanity - # Compute mass matrix (NOTE: using 6x6 of rigid body here, could use MM but this interface is simpler) - M_new = rigidBodyMassMatrixAtP(mass, J_G, Ref2COG) - return M_new - - -# --------------------------------------------------------------------------------} -# --- Functions to extract "beam" properties from 6x6 matrices -# --------------------------------------------------------------------------------{ -def solvexytheta(Hxx,Hyy,Hxy): - """ - Solve for a system of three unknown, used to get: - - EIy, EIx and thetap given Hxx,Hyy,Hxy - - kxs*GA, kys*GA and thetas given Kxx,Kyy,Kxy - - I_x, I_y and theta_is given Ixx,Iyy,Ixy - """ - from scipy.optimize import fsolve - def residual(x): - EI_x, EI_y, theta_p =x - res=np.array([ - Hxx - EI_x*np.cos(theta_p)**2 - EI_y*np.sin(theta_p)**2 , - Hyy - EI_x*np.sin(theta_p)**2 - EI_y*np.cos(theta_p)**2, - Hxy - (EI_y-EI_x)*np.sin(theta_p)*np.cos(theta_p)] - ).astype(float) - return res - x0 = [Hxx,Hyy,0] - x_opt = fsolve(residual, x0) - EI_x,EI_y,theta_p = x_opt - theta_p = np.mod(theta_p,2*np.pi) - return EI_x, EI_y, theta_p - - -def M66toPropsDecoupled(M, convention='BeamDyn'): - """ - Convert mass properties of a 6x6 section to beam properties - This assumes that the axial and bending loads are decoupled. - Has been tested for BeamDyn coordinate system - - INPUTS: - - M : 6x6 array of mass elements. Each element may be an array (e.g. for all spanwise values) - OUTPUTS: - - m: section mass - - Ixx, Iyy, Ixy: area moment of inertia - - x_G, y_G - """ - M11=M[0,0] - M44=M[3,3] - M55=M[4,4] - M66=M[5,5] - M16=M[0,5] - M26=M[1,5] - M45=M[3,4] - - Mlist = flat2matlist(M) - inertia = ComputeInertiaProps() - - m=M11 - if convention=='BeamDyn': - if np.all(np.abs(m)<1e-16): - Ixi = Iyi = Ipp = x_G = y_G = theta_i = m*0 - return m, Ixi, Iyi, Ipp, x_G, y_G, theta_i - y_G= -M16/m - x_G= M26/m - # sanity - np.testing.assert_array_almost_equal([M[0,3],M[0,4]],[0*M[0,3],0*M[0,3]]) - np.testing.assert_array_almost_equal([M[1,3],M[1,4]],[0*M[0,3],0*M[0,3]]) - np.testing.assert_array_almost_equal([M[3,5],M[4,5]],[0*M[0,3],0*M[0,3]]) - - Ixx = M44-m*y_G**2 - Iyy = M55-m*x_G**2 - Ixy = -M45-m*x_G*y_G - Ipp = M66-m*(x_G**2 + y_G**2) - - if np.all(np.abs(Ixy)<1e-16): - # NOTE: Assumes theta_i ==0 - #print('>>> Assume theta_i 0') - Ixi = Ixx - Iyi = Iyy - theta_i = Ixx*0 - else: - if len(Mlist)==1: - Ixi,Iyi,theta_i = solvexytheta(Ixx,Iyy,Ixy) - else: - #print('>>> Minimize theta_i') - Ixi = np.zeros(Ixx.shape) - Iyi = np.zeros(Ixx.shape) - theta_i = np.zeros(Ixx.shape) - for i, (hxx, hyy, hxy) in enumerate(zip(Ixx,Iyy,Ixy)): - Ixi[i],Iyi[i],theta_i[i] = solvexytheta(hxx,hyy,hxy) - - MM2= MM(m[i],Ixi[i],Iyi[i],Ipp[i],x_G[i],y_G[i],theta_i[i]) - - np.testing.assert_allclose(MM2[3,3], M[3,3][i], rtol=1e-3) - np.testing.assert_allclose(MM2[4,4], M[4,4][i], rtol=1e-3) - np.testing.assert_allclose(MM2[5,5], M[5,5][i], rtol=1e-3) - np.testing.assert_allclose(MM2[3,4], M[3,4][i], rtol=1e-3) - - np.testing.assert_array_almost_equal(Ipp, Ixx+Iyy, 2) - np.testing.assert_array_almost_equal(Ipp, Ixi+Iyi, 2) - - else: - raise NotImplementedError() - - return m, Ixi, Iyi, Ipp, x_G, y_G, theta_i - - - -def K66toPropsDecoupled(K, theta_p_in=None, convention='BeamDyn'): - """ - Convert stiffness properties of a 6x6 section to beam properties - This assumes that the axial and bending loads are decoupled. - Has been tested for BeamDyn coordinate system - - INPUTS: - - K : 6x6 array of stiffness elements. Each element may be an array (e.g. for all spanwise values) - INPUTS OPTIONAL: - - theta_p_in : angle from section to principal axis [rad], positive around z - - convention : to change coordinate systems in the future - OUTPUTS: - - EA, EIx, EIy: axial and bending stiffnesses - - kxGA, kyGA, GKt: shear and torsional stiffness - - xC,yC : centroid - - xS,yS : shear center - - theta_p, theta_s: angle to principal axes and shear axes [rad] - """ - K11=K[0,0] - K22=K[1,1] - K33=K[2,2] - K44=K[3,3] - K55=K[4,4] - K66=K[5,5] - - K12=K[0,1] - K16=K[0,5] - K26=K[1,5] - K34=K[2,3] - K35=K[2,4] - K45=K[3,4] - - Klist = flat2matlist(K) - stiff = ComputeStiffnessProps() - - if convention=='BeamDyn': - # --------------------------------------------------------------------------------} - # --- Axial/bending problem - # --------------------------------------------------------------------------------{ - # Find: EA, EI, position of axial strain centroid (tension center, elastic center), principal axes - EA = K33 - # xC yC - method 1 - yC = K34/EA - xC = -K35/EA - # xC yC - method 2, more general - if len(Klist)==1: - xC2, yC2 = stiff.ComputeTensionCenter(Klist[0]) # tension center - else: - xC2 = np.zeros(xC.shape) - yC2 = np.zeros(yC.shape) - for i,Kloc in enumerate(Klist): - xs, ys = stiff.ComputeTensionCenter(Kloc) # tension center - xC2[i] = xs - yC2[i] = ys - # Sanity checks, comment in future - np.testing.assert_allclose(xC2, xC, rtol=1e-3) - np.testing.assert_allclose(yC2, yC, rtol=1e-3) - - # --- Find EI and theta_p (principal axes) - Hxx= K44-EA*yC**2 - Hyy= K55-EA*xC**2 - Hxy= -K45-EA*xC*yC - if theta_p_in is not None: - theta_p=theta_p_in - print('>>> theta_p given') - C2=np.cos(theta_p)**2 - S2=np.sin(theta_p)**2 - C4=np.cos(theta_p)**4 - S4=np.sin(theta_p)**4 - EIxp = (Hxx*C2 - Hyy*S2)/(C4-S4) - EIyp = (Hxx*S2 - Hyy*C2)/(S4-C4) - Hxyb = (EIyp-EIxp)*np.sin(theta_p)*np.cos(theta_p) - - bNZ=np.logical_and(Hxy!=0, Hxyb!=0) - np.testing.assert_allclose(Hxy[bNZ], Hxyb[bNZ], rtol=1e-3) - np.testing.assert_allclose(EIxp+EIyp, Hxx+Hyy, rtol=1e-3) - - else: - if np.all(np.abs(Hxy)<1e-16): - #print('>>>> assume theta_p=0') - # NOTE: Assumes theta_p ==0 - EIxp = Hxx - EIyp = Hyy - theta_p=0*EA - else: - #print('>>> Minimization for theta_p') - if len(Klist)==1: - EIxp,EIyp,theta_p = solvexytheta(Hxx,Hyy,Hxy) - theta_p=np.asarray(theta_p) - if theta_p>np.pi: - theta_p-=2*np.pi - else: - EIxp= np.zeros(Hxx.shape) - EIyp= np.zeros(Hxx.shape) - theta_p = np.zeros(Hxx.shape) - for i, (hxx, hyy, hxy) in enumerate(zip(Hxx,Hyy,Hxy)): - EIxp[i],EIyp[i],theta_p[i] = solvexytheta(hxx,hyy,hxy) - - theta_p[theta_p>np.pi]=theta_p[theta_p>np.pi]-2*np.pi - - # --------------------------------------------------------------------------------} - # ---Torsion/shear problem - # --------------------------------------------------------------------------------{ - # Find: Torsion, shear terms, shear center - Kxx = K11 - Kxy = -K12 - Kyy = K22 - # Method 1 - yS = (Kyy*K16+Kxy*K26)/(-Kyy*Kxx + Kxy**2) - xS = (Kxy*K16+Kxx*K26)/( Kyy*Kxx - Kxy**2) - # Method 2, more general - if len(Klist)==1: - xS2, yS2 = stiff.ComputeShearCenter(Klist[0]) # shear center - else: - xS2 = np.zeros(xC.shape) - yS2 = np.zeros(yC.shape) - for i,Kloc in enumerate(Klist): - xS2[i], yS2[i] = stiff.ComputeShearCenter(Kloc) # shear center - # Sanity check, comment in future - np.testing.assert_allclose(xS2, xS, rtol=1e-3) - np.testing.assert_allclose(yS2, yS, rtol=1e-3) - - # --- Find shear coefficients and main direction - GKt = K66 - Kxx*yS**2 -2*Kxy*xS*yS - Kyy*xS**2 - if np.all(np.abs(Kxy)<1e-16): - # Assumes theta_s=0 - kxsGA = Kxx # Kxx = kxs*GA - kysGA = Kyy - theta_s=0*EA - else: - if len(Klist)==1: - kxsGA,kysGA,theta_s = solvexytheta(Kxx,Kyy,Kxy) - if theta_s>np.pi: - theta_s-=2*np.pi - else: - kxsGA = np.zeros(Kxx.shape) - kysGA = np.zeros(Kxx.shape) - theta_s = np.zeros(Hxx.shape) - for i, (kxx, kyy, kxy) in enumerate(zip(Kxx,Kyy,Kxy)): - kxsGA[i],kysGA[i],theta_s[i] = solvexytheta(kxx,kyy,kxy) - - theta_s[theta_s>np.pi]=theta_s[theta_s>np.pi]-2*np.pi - - # Sanity checks, comment in future - KK2= KK(EA, EIxp, EIyp, GKt, EA*0+1, kxsGA, kysGA, xC, yC, theta_p, xS, yS, theta_s) - np.testing.assert_allclose(KK2[0,0], K[0,0], rtol=1e-2) - np.testing.assert_allclose(KK2[1,1], K[1,1], rtol=1e-2) - np.testing.assert_allclose(KK2[2,2], K[2,2], rtol=1e-2) - np.testing.assert_allclose(KK2[3,3], K[3,3], rtol=1e-1) -# np.testing.assert_allclose(KK2[4,4], K[4,4], rtol=1e-2) - np.testing.assert_allclose(KK2[5,5], K[5,5], rtol=1e-1) - np.testing.assert_allclose(KK2[2,3], K[2,3], rtol=1e-2) - np.testing.assert_allclose(KK2[2,4], K[2,4], rtol=1e-2) - - np.testing.assert_allclose(K16, -Kxx*yS-Kxy*xS) -# np.testing.assert_allclose(KK2[0,5], K[0,5],rtol=1e-3) -# np.testing.assert_allclose(KK2[1,5], K[1,5],rtol=5e-2) # Kxy harder to get - #np.testing.assert_allclose(KK2[3,4], K[3,4]) # <<< hard to match - - else: - raise NotImplementedError() - - return EA, EIxp, EIyp, kxsGA, kysGA, GKt, xC, yC, xS, yS, theta_p, theta_s - -def flat2matlist(M): - """ - Convert a matrix of size 6x6 where each element is an array of size n - into a list of n 6x6 matrices - """ - Mlist=[] - if not hasattr(M[0,0],'__len__'): - return [M] - for iSpan in np.arange(len(M[0,0])): - Mloc = np.zeros((6,6)) - for i in np.arange(6): - for j in np.arange(6): - Mloc[i,j] = M[i,j][iSpan] - Mlist.append(Mloc) - return Mlist diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py deleted file mode 100644 index d5960591ab..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamDynToHawc2.py +++ /dev/null @@ -1,500 +0,0 @@ -import numpy as np -from numpy import cos, sin -import pandas as pd -import os -# from weio.hawc2_htc_file import HAWC2HTCFile -# from weio.csv_file import CSVFile -# from weio.fast_input_file import FASTInputFile -from pyFAST.input_output.hawc2_htc_file import HAWC2HTCFile -from pyFAST.input_output.csv_file import CSVFile -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.converters.beam import ComputeStiffnessProps, TransformCrossSectionMatrix -from pyFAST.input_output.fast_input_deck import FASTInputDeck - -from .beam import * -from .hawc2 import dfstructure2stfile - - -def arc_length(points): - """ - Compute the distances between points along a curve and return those - cumulative distances as a flat array. - - This function works for 2D, 3D, and N-D arrays. - - Parameters - ---------- - points : numpy array[n_points, n_dimensions] - Array of coordinate points that we compute the arc distances for. - - Returns - ------- - arc_distances : numpy array[n_points] - Array, starting at 0, with the cumulative distance from the first - point in the points array along the arc. - - See Also - -------- - wisdem.commonse.utilities.arc_length_deriv : computes derivatives for - the arc_length function - - Examples - -------- - Here is a simple example of how to use this function to find the cumulative - distances between points on a 2D curve. - - >>> x_values = numpy.linspace(0., 5., 10) - >>> y_values = numpy.linspace(2., 4., 10) - >>> points = numpy.vstack((x_values, y_values)).T - >>> arc_length(points) - array([0. , 0.59835165, 1.19670329, 1.79505494, 2.39340658, - 2.99175823, 3.59010987, 4.18846152, 4.78681316, 5.38516481]) - """ - cartesian_distances = np.sqrt(np.sum(np.diff(points, axis=0) ** 2, axis=1)) - arc_distances = np.r_[0.0, np.cumsum(cartesian_distances)] - - return arc_distances - - -# --------------------------------------------------------------------------------} -# ---beamDynToHawc2 -# --------------------------------------------------------------------------------{ -def beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile=None, H2_stfile=None, bodyname=None, A=None, E=None, G=None, fstIn=None, theta_p_in=None, FPM=False, verbose=False): - """ - - FPM: fully populated matrix, if True, use the FPM format of hawc2 - """ - # --- Read BeamDyn files - if isinstance(BD_mainfile, str): - BD_mainfile = FASTInputFile(BD_mainfile) - if isinstance(BD_bladefile, str): - BD_bladefile = FASTInputFile(BD_bladefile) - bdLine = BD_mainfile.toDataFrame() - prop = BD_bladefile.toDataFrame() - - # Define BeamDyn reference axis - r_bar = prop['Span'].values - - kp_x_raw = bdLine['kp_xr_[m]'].values - kp_y_raw = bdLine['kp_yr_[m]'].values - kp_z_raw = bdLine['kp_zr_[m]'].values - twist_raw = bdLine['initial_twist_[deg]'].values*np.pi/180 # BeamDyn convention - - myarc = arc_length(np.array([kp_x_raw, kp_y_raw, kp_z_raw]).T) - s_coord = myarc/myarc[-1] - - kp_x = np.interp(r_bar, s_coord, kp_x_raw) - kp_y = np.interp(r_bar, s_coord, kp_y_raw) - kp_z = np.interp(r_bar, s_coord, kp_z_raw) - twist = np.interp(r_bar, s_coord, twist_raw) - - # Create K and M matrices - K = np.zeros((6,6),dtype='object') - M = np.zeros((6,6),dtype='object') - for i in np.arange(6): - for j in np.arange(6): - K[i,j]=prop['K{}{}'.format(i+1,j+1)].values - M[i,j]=prop['M{}{}'.format(i+1,j+1)].values - - if fstIn != None: - fst = FASTInputDeck(fstIn, verbose=True) - Bld = fst.fst_vt['AeroDynBlade'] - AF = fst.fst_vt['af_data'] - BlSpn = Bld['BldAeroNodes'][:,0] - n_span = len(BlSpn) - le2ac_raw = np.zeros(n_span) - for iSpan in range(n_span): - le2ac_raw[iSpan] = fst.fst_vt['ac_data'][iSpan]['AirfoilRefPoint'][0] - # Define axis of aero centers - BlCrvAC = Bld['BldAeroNodes'][:,1] - BlSwpAC = Bld['BldAeroNodes'][:,2] - chord = Bld['BldAeroNodes'][:,5] - s_aero = BlSpn/BlSpn[-1] - ac_x = np.interp(r_bar, s_aero, BlCrvAC) - ac_y = np.interp(r_bar, s_aero, BlSwpAC) - le2ac = np.interp(r_bar, s_aero, le2ac_raw) # Leading edge to aerodynamic center (in chord) - - # Get x and y coordinates of c2 axis - ac2c2 = (0.5 - le2ac) * chord - c2_x = ac_x + ac2c2 * np.sin(twist) - c2_y = ac_y + ac2c2 * np.cos(twist) - # Get offsets from BD axis to c2 axis along the twisted frame of reference - c2BD_y = np.sqrt( (c2_y - kp_y)**2 + (c2_x - kp_x)**2 ) - c2BD_x = np.zeros_like(c2BD_y) # no x translation, we should be translating along the twisted chord - - # Translate matrices from BD to c2 axis (translate along chord, x and twist are 0) - transform = TransformCrossSectionMatrix() - for iSpan in np.arange(len(K[0,0])): - K_bd_temp = np.zeros((6,6)) - M_bd_temp = np.zeros((6,6)) - for i in np.arange(6): - for j in np.arange(6): - K_bd_temp[i,j] = K[i,j][iSpan] - M_bd_temp[i,j] = M[i,j][iSpan] - K_c2_temp = transform.CrossSectionRotoTranslationMatrix(K_bd_temp, 0., c2BD_y[iSpan], 0.) - M_c2_temp = transform.CrossSectionRotoTranslationMatrix(M_bd_temp, 0., c2BD_y[iSpan], 0.) - for i in np.arange(6): - for j in np.arange(6): - K[i,j][iSpan]=K_c2_temp[i,j] - M[i,j][iSpan]=M_c2_temp[i,j] - - # Update BeamDyn axis to c2 axis - kp_x = c2_x - kp_y = c2_y - - # Map 6x6 data to "beam" data - # NOTE: theta_* are in [rad] - EA, EIx, EIy, kxsGA, kysGA, GKt, x_C, y_C, x_S, y_S, theta_p, theta_s = K66toPropsDecoupled(K, theta_p_in) - m, Ixi, Iyi, Ip, x_G, y_G, theta_i = M66toPropsDecoupled(M) -# print('kxGA {:e}'.format(np.mean(kxsGA))) -# print('kyGA {:e}'.format(np.mean(kysGA))) -# print('EA {:e}'.format(np.mean(EA))) -# print('EIx {:e}'.format(np.mean(EIx))) -# print('EIy {:e}'.format(np.mean(EIy))) -# print('GKt {:e}'.format(np.mean(GKt))) -# print('xC ',np.mean(x_C)) -# print('yC ',np.mean(y_C)) -# print('xS ',np.mean(x_S)) -# print('yS ',np.mean(y_S)) -# print('thetap',np.mean(theta_p)) -# print('thetas',np.mean(theta_s)) -# print('m ',np.mean(m)) -# print('Ixi ',np.mean(Ixi)) -# print('Iyi ',np.mean(Iyi)) -# print('Ip ',np.mean(Ip)) -# print('x_G ',np.mean(x_G)) -# print('y_G ',np.mean(y_G)) -# print('thetai',np.mean(theta_i)) - - # Convert to Hawc2 system - if FPM: - dfMeanLine , dfStructure = beamDyn2Hawc2FPM_raw(r_bar, - kp_x, kp_y, kp_z, twist, # BeamDyn convention, twist around -z [in rad] - m, Ixi, Iyi, x_G, y_G, theta_i, # theta_i/p around z (in rad) - x_C, y_C, theta_p, K, M) - - else: - - dfMeanLine , dfStructure = beamDyn2Hawc2_raw(r_bar, - kp_x, kp_y, kp_z, twist, - m, Ixi, Iyi, x_G, y_G, theta_i, - EA, EIx, EIy, GKt, kxsGA, kysGA, x_C, y_C, theta_p, x_S, y_S, theta_s, - A=A, E=E, G=G) - - # --- Rewrite st file - if H2_stfile is not None: - try: - os.makedirs(os.path.dirname(H2_stfile)) - except: - pass - if verbose: - print('Writing: ',H2_stfile) - - dfstructure2stfile(dfStructure, H2_stfile) - #with open(H2_stfile, 'w') as f: - # f.write('%i ; number of sets, Nset\n' % 1) - # f.write('-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n') - # f.write('#%i ; set number\n' % 1) - # if FPM: - # cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] - # else: - # cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]', 'x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] - # f.write('\t'.join(['{:20s}'.format(s) for s in cols])+'\n') - # f.write('$%i %i\n' % (1, dfStructure.shape[0])) - # f.write('\n'.join('\t'.join('%19.13e' %x for x in y) for y in dfStructure.values)) - - # --- Rewrite htc file - if H2_htcfile is not None: - def readToMarker(lines, marker, i, nMax=None, noException=False): - l_sel=[] - if nMax is None: nMax=len(lines) - while i=0: - break - l_sel.append(line.strip()) - i+=1 - if line.strip().replace(' ','').lower().find(marker)<0: - if noException: - return None, None, None - else: - raise Exception('Marker not found '+ marker) - return l_sel, line, i - - with open(H2_htcfile, 'r') as f: - lines_in = f.readlines() - lines_out = [] - bodyNotFound=True - iBodyEnd=0 - nBodies=0 - while bodyNotFound and nBodies<10: - _, line, iBodyStart = readToMarker(lines_in, 'beginmain_body',iBodyEnd) - _, line, iBodyEnd = readToMarker(lines_in, 'endmain_body', iBodyStart) - _, line, iBody = readToMarker(lines_in, 'name'+bodyname, iBodyStart, iBodyEnd, True) - nBodies+=1 - if line is None: - iBody=-1 - else: - #print('Body {} found between lines {} and {} '.format(bodyname, iBodyStart+1, iBodyEnd+1)) - bodyNotFound=False - if nBodies>=10: - raise Exception('Body {} not found in file'.format(bodyname)) - - _, line, iC2Start = readToMarker(lines_in, 'beginc2_def', iBodyStart, iBodyEnd) - _, line, iC2End = readToMarker(lines_in, 'endc2_def' , iC2Start, iBodyEnd) - - _, line, iTIStart = readToMarker(lines_in, 'begintimoschenko_input', iBodyStart, iBodyEnd) - _, line, iTIEnd = readToMarker(lines_in, 'endtimoschenko_input' , iTIStart, iBodyEnd) - - - simdir = os.path.dirname(H2_htcfile) - H2_stfile_rel = os.path.relpath(H2_stfile, simdir) - - lines_out = lines_in[:iTIStart+1] - lines_out += [' filename {};\n'.format(H2_stfile_rel)] - if FPM: - lines_out += [' FPM 1 ;\n'] - # lines_out += [' FPM 0 ;\n'] - lines_out += [' set 1 1 ;\n'] - lines_out += lines_in[iTIEnd:iC2Start+1] - lines_out += [' nsec {} ;\n'.format(dfMeanLine.shape[0])] - for i, row in dfMeanLine.iterrows(): - lines_out += [' sec {:4d}\t{:13.6e}\t{:13.6e}\t{:13.6e}\t{:13.6e};\n'.format(i+1, row['x_[m]'],row['y_[m]'],row['z_[m]'],row['twist_[deg]'])] - lines_out += lines_in[iC2End:] - - - if verbose: - print('ReWriting: ',H2_htcfile) - with open(H2_htcfile, 'w') as f: - f.write(''.join(lines_out)) - - return dfMeanLine, dfStructure - - -def beamDyn2Hawc2FPM_raw(r_bar, kp_x, kp_y, kp_z, twist, - m, Ixi, Iyi, x_G, y_G, theta_i, # TODO remove in the future - x_C, y_C, theta_p, # TODO remove in the future - K, M): - """ - Convert spanwise quantities from BeamDyn to Hawc2 - - kp_x, kp_y, kp_z, twist: keypoints positions/orientation as defined in BeamDyn "main" file - - NOTE: all angles are in radians - - """ - import scipy.linalg - nSpan = len(K[0,0]) - # --- BeamDyn to Hawc2 Structural data - # Hawc2 = BeamDyn - x_g = -y_G - y_g = x_G - x_e = -y_C - y_e = x_C - pitch = theta_p*180/np.pi # [deg] NOTE: could use theta_p, theta_i or theta_s - if np.all(np.abs(m)<1e-16): - ri_y = m*0 - ri_x = m*0 - else: - ri_y = np.sqrt(Ixi/m) # [m] - ri_x = np.sqrt(Iyi/m) # [m] - - # Curvilinear position of keypoints (only used to get max radius...) - dr= np.sqrt((kp_x[1:]-kp_x[0:-1])**2 +(kp_y[1:]-kp_y[0:-1])**2 +(kp_z[1:]-kp_z[0:-1])**2) - r_p= np.concatenate(([0],np.cumsum(dr))) - r=r_bar * r_p[-1] - - # From Hawc2/ANBA4 to BeamDyn - RotMat_H2_BD=np.array([ - [ 0, 1, 0], - [-1, 0, 0], - [ 0, 0, 1]]) - RR_H2_BD = scipy.linalg.block_diag(RotMat_H2_BD,RotMat_H2_BD) - # From BeamDyn to Hawc2/ANBA4 - RR_BD_H2 = RR_H2_BD.T - - stiff = ComputeStiffnessProps() - inertia = ComputeInertiaProps() - transform = TransformCrossSectionMatrix() - - # --- Spanwise quantities for HAWC2 input file - x_e_h2 = np.zeros(nSpan) # Point where radial force (z) does not contribute to beanding around x or y - y_e_h2 = np.zeros(nSpan) - x_g_h2 = np.zeros(nSpan) - y_g_h2 = np.zeros(nSpan) - m_h2 = np.zeros(nSpan) - ri_x_h2 = np.zeros(nSpan) - ri_y_h2 = np.zeros(nSpan) - pitch_h2 = np.zeros(nSpan) # angle between xc2 axis and principal axis xe - KH2=np.zeros((6,6,nSpan)) - for iSpan in np.arange(nSpan): - K_bd = np.zeros((6,6)) - M_bd = np.zeros((6,6)) - for i in np.arange(6): - for j in np.arange(6): - K_bd[i,j] = K[i,j][iSpan] - M_bd[i,j] = M[i,j][iSpan] - - # Rotate BD stiffness matrix to Hawc2 reference system - K_h2 = (RR_BD_H2).dot(K_bd).dot(RR_BD_H2.T) - M_h2 = (RR_BD_H2).dot(M_bd).dot(RR_BD_H2.T) - # Compute coordinates of main points - xt , yt = stiff.ComputeTensionCenter(K_h2) # tension/elastic center - xs , ys = stiff.ComputeShearCenter(K_h2) # shear center - xm , ym = inertia.ComputeMassCenter(M_h2) # inertia - x_g_h2[iSpan] = xm - y_g_h2[iSpan] = ym - x_e_h2[iSpan] = xt - y_e_h2[iSpan] = yt - # Inertia properties - m_h2[iSpan] = M_h2[0,0] - #ri_x_h2[iSpan] = TODO - #ri_x_h2[iSpan] = TODO - - # Compute stiffness matrix with decoupled forces and moments - Kdec = stiff.DecoupleStiffness(K_h2) - # Compute Delta, the rotation angle of principal axes (rad) - #Delta = stiff.PrincipalAxesRotationAngle(Kdec) - Delta = - stiff.OrientationPrincipalAxesBecas(Kdec) # appears more robust - pitch_h2[iSpan]=Delta - # Translate K matrix into EC and rotate it by -Delta - Kh2 = transform.CrossSectionRotoTranslationMatrix(K_h2, xt, yt, -Delta) - - for i in np.arange(6): - for j in np.arange(6): - KH2[i,j][iSpan]=Kh2[i,j] - - pitch_h2 *=180/np.pi # [deg] - - # sanity checks between previous method and new (general) method - np.testing.assert_allclose(m , m_h2, rtol=1e-3) - np.testing.assert_allclose(x_e, x_e_h2, rtol=1e-3) - np.testing.assert_allclose(y_e, y_e_h2, rtol=1e-3) - np.testing.assert_allclose(x_g, x_g_h2, rtol=1e-3) - np.testing.assert_allclose(y_g, y_g_h2, rtol=1e-3) - np.testing.assert_allclose(theta_p*180/np.pi, -pitch_h2, rtol=1e-3) - - # Using new values (remove in the future) - pitch = -pitch_h2 - x_e = x_e_h2 - y_e = y_e_h2 - x_g = x_g_h2 - y_g = y_g_h2 - m = m_h2 - if np.mean(pitch)>0: - print('Pitch (delta) is mostly positive') - else: - print('Pitch (delta) is mostly negative') - - - K11 = KH2[0,0] - K22 = KH2[1,1] - K33 = KH2[2,2] - K44 = KH2[3,3] - K55 = KH2[4,4] - K66 = KH2[5,5] - - K12 = KH2[0,1] - K13 = KH2[0,2] - K14 = KH2[0,3] - K15 = KH2[0,4] - K16 = KH2[0,5] - K23 = KH2[1,2] - K24 = KH2[1,3] - K25 = KH2[1,4] - K26 = KH2[1,5] - K34 = KH2[2,3] - K35 = KH2[2,4] - K36 = KH2[2,5] - K44 = KH2[3,3] - K45 = KH2[3,4] - K46 = KH2[3,5] - K55 = KH2[4,4] - K56 = KH2[4,5] - - # --- Create a data frame with spanwise beam data - columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] - data = np.column_stack((r, m, x_g, y_g, ri_x, ri_y, pitch, x_e, y_e, K11,K12,K13,K14,K15,K16,K22,K23,K24,K25,K26,K33,K34,K35,K36,K44,K45,K46,K55,K56,K66)) - dfStructure = pd.DataFrame(data=data, columns=columns) - - # --- BeamDyn to Hawc2 Reference axis - X_H2 = -kp_y - Y_H2 = kp_x - Z_H2 = kp_z - twist_H2 = - twist*180/np.pi # -negative of BeamDyn twist [deg] - columns=['x_[m]', 'y_[m]', 'z_[m]', 'twist_[deg]'] - data = np.column_stack((X_H2, Y_H2, Z_H2, twist_H2)) - dfMeanLine = pd.DataFrame(data=data, columns=columns) - - return dfMeanLine, dfStructure - - - -def beamDyn2Hawc2_raw(r_bar, kp_x, kp_y, kp_z, twist, - m, Ixi, Iyi, x_G, y_G, theta_i, - EA, EIx, EIy, GKt, kxsGA, kysGA, x_C, y_C, theta_p, x_S, y_S, theta_s, - A=None, E=None, G=None): - """ - NOTE: all angles are in radians - """ - # --- BeamDyn to Hawc2 Structural data - if A is None: A = np.ones(x_G.shape) - if E is None: E = EA/A - if G is None: G = E/2/(1+0.3) # Young modulus - # Hawc2 = BeamDyn - x_cg = -y_G - y_cg = x_G - x_sh = -y_S - y_sh = x_S - x_e = -y_C - y_e = x_C - I_y = EIx/E # [m^4] Hawc2 Iy is wrt to principal bending ye axis - I_x = EIy/E # [m^4] Hawc2 Ix is wrt to principal bending xe axis - I_p = GKt/G # [m^4] - k_y = kxsGA/(G*A) - k_x = kysGA/(G*A) - pitch = theta_p*180/np.pi # [deg] NOTE: could use theta_p, theta_i or theta_s - if np.all(np.abs(m)<1e-16): - ri_y = m*0 - ri_x = m*0 - else: - ri_y = np.sqrt(Ixi/m) # [m] - ri_x = np.sqrt(Iyi/m) # [m] - # Curvilinear position of keypoints (only used to get max radius...) - dr= np.sqrt((kp_x[1:]-kp_x[0:-1])**2 +(kp_y[1:]-kp_y[0:-1])**2 +(kp_z[1:]-kp_z[0:-1])**2) - r_p= np.concatenate(([0],np.cumsum(dr))) - r=r_bar * r_p[-1] - - columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] - data = np.column_stack((r,m,x_cg,y_cg,ri_x, ri_y, x_sh, y_sh, E, G, I_x, I_y, I_p, k_x, k_y, A, pitch, x_e, y_e)) - dfStructure = pd.DataFrame(data=data, columns=columns) - - # --- BeamDyn to Hawc2 Reference axis - X_H2 = -kp_y - Y_H2 = kp_x - Z_H2 = kp_z - twist_H2 = - twist*180/np.pi # -[deg] - columns=['x_[m]', 'y_[m]', 'z_[m]', 'twist_[deg]'] - data = np.column_stack((X_H2, Y_H2, Z_H2, twist_H2)) - dfMeanLine = pd.DataFrame(data=data, columns=columns) - - return dfMeanLine, dfStructure - - - -if __name__=='__main__': - np.set_printoptions(linewidth=300) - - # --- BeamDyn 2 Hawc 2 - BD_mainfile = 'solid_beam_BeamDyn.dat' - BD_bladefile = '../solid_beam_BeamDyn_Blade.dat' - H2_htcfile_old = './_template.htc' - H2_htcfile_new = './solid_beam_hawc2.htc' - H2_stfile = './solid_beam_st.dat' - - from shutil import copyfile - copyfile(H2_htcfile_old, H2_htcfile_new) - - beamDyn2Hawc2(BD_mainfile, BD_bladefile, H2_htcfile_new, H2_stfile, 'beam_1', A=None, E=None, G=None) - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py deleted file mode 100644 index 5d6dac99ec..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/beamdyn.py +++ /dev/null @@ -1,2 +0,0 @@ -from .beamDynToHawc2 import * -from .hawc2ToBeamDyn import * diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore deleted file mode 100644 index 1d38ccefe1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -*.aux -*.bbl -*.blg -*.toc -*.log -*.out -*.pdf -*.gz -figs_svgtex/ -tags -_misc* diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex deleted file mode 100644 index 39b454f307..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/BeamDynInput.tex +++ /dev/null @@ -1,950 +0,0 @@ -\documentclass[11pt]{article} -% --------------------------------------------------------------------------------} -% --- Preamble -% --------------------------------------------------------------------------------{ -\usepackage{ifpdf} -\ifpdf - \usepackage{graphicx} - \usepackage{epstopdf} %don't forget the shell-escape command for pdflatex - \usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolor=red,urlcolor=red]{hyperref} -\else - \usepackage{graphicx} - \usepackage[dvips,colorlinks,bookmarksopen,bookmarksnumbered,citecolor=red,urlcolor=red]{hyperref} -\fi -\usepackage{type1cm} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{amsthm} -\usepackage{stmaryrd} %[| |] \llbracket -\usepackage{mhsetup} -\usepackage{mathtools} -\usepackage{relsize} -\usepackage{color} -\usepackage[table]{xcolor} %lots of tools for colors -\usepackage{import} -\usepackage{listings} % for lstlistings -\usepackage{fullpage} -\usepackage{pdflscape} - -\hypersetup{ - colorlinks = false, - linkcolor =[rgb]{0.2,0.2,0.2}, - linkbordercolor =[rgb]{0.7,0.7,0.7} -} - -\setlength{\itemsep}{-10em} -\DeclareGraphicsExtensions{.pdf,.PDF,.png,.jpg,.PNG,.JPG,.eps,.EPS,.Eps} -\graphicspath{{figs/}{figs_svg/}{figs_raw/}} -% --- svgtex -\newcommand{\svgtex}[4]{\begin{figure}[!htb]% - \centering% - \def\svgwidth{#3\columnwidth}% used to be a scalebox - \scalebox{#4}{\import{figs_svgtex/}{#1}}% - \caption{#2}\label{fig:#1}% - \end{figure}% -} -% --- svg -\newcommand{\svg}[3]{\begin{figure}[!htb] - \centering% - \includegraphics[width=#3\textwidth]{#1} - \caption{#2}\label{fig:#1} - \end{figure} -} - -\renewcommand{\v}[1]{\boldsymbol{#1}} -\newcommand{\m}[1]{\boldsymbol{#1}} -\newcommand{\eqdef}{\stackrel{\mathsmaller{\mathsmaller{\mathsmaller{\triangle}}}}{=}} -\newcommand{\weird}[1]{{\color{red}{!!!#1!!!}}} - - -% ---- Commands specific to this project -\newcommand{\sh}{{S}} -\newcommand{\cent}{{C}} -\newcommand{\xsh}{x_\text{sh}} -\newcommand{\ysh}{y_\text{sh}} -\newcommand{\zsh}{z_\text{sh}} -\newcommand{\EA}{{E\!A}\,} -\newcommand{\EI}{E\!I} -\newcommand{\GK}{G\!K_t} -\newcommand{\GA}{G\!A} -\newcommand{\rhotil}{\m{\tilde{\rho}}} -\newcommand{\stil} {\m{\tilde{s}}} - -% --------------------------------------------------------------------------------} -% --- Document -% --------------------------------------------------------------------------------{ -\begin{document} -\title{BeamDyn inputs from sectional beam properties} -\author{E. Branlard, J. Jonkman} -\maketitle - - -\section{Coordinate system} -The coordinate system assumed for BeamDyn in this document is illustrated in \autoref{fig:BeamDynSectionCoord}. -This coordinate system is similar to the one used by OpenFAST, with the exception that in this document angles are assumed positive around $z$, while in OpenFAST the angles are negative around $z$. As a result of this, all angles $\theta$ used in this document, need to be multiplied by $-1$ for applications with OpenFAST or BeamDyn. The OpenFAST coordinate system together with other aero-elastic codes coordinate systems are shown in \autoref{fig:AeroElastCodesCoordConvention}. -% -% -------------------------------------------------------------------------------- -\svgtex{BeamDynSectionCoord}{Coordinate system assumed in this document for BeamDyn. Coordinates $x_b$,$y_b$,$z_b$ are the coordinates at the root of the blade, used to define the reference axis of the beam. Coordinates $x,y,z$ are used for a typical cross section, with $z$ normal to the cross section, tangent to the reference axis. Point $O$ is the origin of the cross section (defined by the reference axis), point $C$ the centroid, point $S$ the shear center and point $G$ the center of gravity. The coordinates of each points are expressed with respect to the origin of the cross section.}{1.0}{0.90} -% -------------------------------------------------------------------------------- -The blade coordinate system includes rigid-body pitch rotation relative to the coned coordinate system. -The position/orientation, velocity, and acceleration of the blade coordinate system are passed from ElastoDyn to BeamDyn at every time step. - - -\section{Stiffness matrix} -The results presented in this section are inspired by the expressions given in the \textit{Dymore} manual~\cite{dymore} but for a different coordinate system\footnote{Note that the signs in equation (11) of \cite{dymore} are erroneous and have to be reversed. Apart from that, the coordinate mapping from this reference to the current document is simply $1\to z$, $2\to x$, $3\to y$.}. - -\subsection{Introduction} -The stiffness matrix that relates the cross-section strains to the loads is assumed to take the following form (valid for orthotropic layups, that is, with no off-axis plies): -\begin{align} - \begin{bmatrix} - F_x \\ F_y\\ F_z \\ M_x \\ M_y\\ M_z\\ - \end{bmatrix} -&= - \begin{bmatrix} -K_{11} & K_{12} & 0 & 0 & 0 & K_{16} \\ -K_{21} & K_{22} & 0 & 0 & 0 & K_{26} \\ -0 & 0 & K_{33} & K_{34} & K_{35} & 0 \\ -0 & 0 & K_{43} & K_{44} & K_{45} & 0 \\ -0 & 0 & K_{53} & K_{54} & K_{55} & 0 \\ -K_{61} & K_{62} & 0 & 0 & 0 & K_{66} \\ -\end{bmatrix} - \begin{bmatrix} - \gamma_{x} \\ \gamma_{y} \\ \epsilon_z \\ \kappa_x \\ \kappa_y\\ \kappa_z \\ - \end{bmatrix} - \quad - \begin{matrix} - \text{(flapwise shear)}\\ - \text{(edgewise shear)}\\ - \text{(axial strain)}\\ - \text{(edgewise bending curvature)}\\ - \text{(flapwise bending curvature)}\\ - \text{(torsion)}\\ - \end{matrix} -\end{align} -where the text in parenthesis follows the convention used in \autoref{fig:BeamDynSectionCoord} to draw the airfoil. -When the stiffness matrix takes such form, the elements of the matrix involved in the axial and bending loads ($F_z,M_x,M_y$) and the elements of the matrix involved in the shear-torsion loads ($F_x,F_y,M_z$) may be determined independently. The two following sections consider these two independent problems. The elements of the matrix for both problems are expressed by considering the centroid and the principal axes of bending for the first problem, and the shear center and the principal shear directions for the second problem. - - - -% \section*{Introduction} -% -% \tableofcontents -% \clearpage -\subsection{Axial force and bending moments} -The axial force is decoupled from the bending moments at the centroid (also referred to as the neutral axis or elastic axis) of the cross section. -Futher, the bending moments are decoupled when expressed about the principal axes. -In this paragraph, the axial forces and bending moments are first expressed with respect to the centroid and the principal axes, then they are rotated to the cross section axis, and last translated to the origin of the cross section. -% -The coordinates of the centroid, expressed from the origin of the cross sections are written $(x_\cent,y_\cent)$. -The principal axes, noted $\hat{x}_p,\hat{y}_p$, are rotated compared to the cross section axis with an angle $\theta_p$. -% -The axial loads and bending moments about the centroid, and with respect to the principal axes of the cross section are: -\begin{align} - \begin{bmatrix}F_z^\cent \\ M_{x_p}^\cent \\ M_{y_p}^\cent\\ \end{bmatrix} - = - \begin{bmatrix}\EA & 0 & 0\\0 & \EI_{x_p} & 0\\0 & 0& \EI_{y_p}\end{bmatrix} - \begin{bmatrix}\epsilon_z^\cent \\ \kappa_{x_p}^\cent \\ \kappa_{y_p}^\cent\\ \end{bmatrix} -\end{align} -where the superscript $\cent$ indicates that the loads, stress and curvature are expressed at the centroid and the subscript $p$ indicates that the values are expressed in the frame of the princpal axes. -The transformation between the principal axes and the cross-section axis is such that: -\begin{align} - \begin{bmatrix}F_z^\cent \\ M_{x}^\cent \\ M_{y}^\cent\\ \end{bmatrix} - &= - \m{T} - \begin{bmatrix}\EA & 0 & 0\\0 & \EI_{x_p} & 0\\0 & 0& \EI_{y_p}\end{bmatrix} - \m{T}^T - \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix} - = - \begin{bmatrix}\EA & 0 & 0\\0 & H_{xx} & - H_{xy}\\0 & - H_{xy} & H_{yy}\end{bmatrix} - \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix} - , - \label{eq:AxialBendingAtCentroid} - \\ -\shortintertext{with} - \m{T}&=\begin{bmatrix}1 & 0 & 0\\0 & \cos\theta_p & -\sin\theta_p\\0 & \sin\theta_p& \cos\theta_p\end{bmatrix} -\end{align} -and where the variables $H_{xx},H_{xy},H_{yy}$ represent the bending stiffnesses in the cross-section coordinates system, obtained from the principal axis stiffnesses as: -\begin{align} -H_{xx} &= \EI_{x_p} \cos^{2}\theta_p + \EI_{y_p} \sin^{2}\theta_p \\ -H_{yy} &= \EI_{x_p} \sin^{2}\theta_p + \EI_{y_p} \cos^{2}{\theta_p} \\ -H_{xy} &= -\EI_{x_p} \sin\theta_p \cos\theta_p + \EI_{y_p} \sin\theta_p \cos\theta_p -\end{align} -% -% -% The axial loads and the bending moments are decoupled , that is: -% \begin{align} -% \begin{bmatrix}F_z^\cent \\ M_x^\cent \\ M_y^\cent\\ \end{bmatrix}= -% \begin{bmatrix}\EA & 0 & 0\\0 & H_{xx} & - H_{xy}\\0 & - H_{xy} & H_{yy}\end{bmatrix} -% \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix} -% \label{eq:AxialBendingAtCentroid} -% \end{align} - -% -% -% -% -% -% -The transformation of the loads, axial stress and curvatures between the origin of the section and the centroid are such that: -\begin{align} - \begin{bmatrix}F_z \\ M_x \\ M_y\\ \end{bmatrix} - = - \begin{bmatrix}1 & 0 & 0\\y_{\cent} & 1 & 0\\- x_{\cent} & 0 & 1\end{bmatrix} - \begin{bmatrix}F_z^\cent \\ M_x^\cent \\ M_y^\cent\\ \end{bmatrix} - %\label{eq:} - ,\qquad - \begin{bmatrix}\epsilon_z^\cent \\ \kappa_x^\cent \\ \kappa_y^\cent\\ \end{bmatrix}= - \begin{bmatrix}1 & y_{\cent} & - x_{\cent}\\0 & 1 & 0\\0 & 0 & 1\end{bmatrix} - \begin{bmatrix}\epsilon_z \\ \kappa_x \\ \kappa_y\\ \end{bmatrix} - \label{eq:AxialBendingCoordTrans} -\end{align} -% -% -Using \autoref{fig:StiffnessMatrixAxialBending}, the signs can be verified as follows: a positive axial force at point $\cent$ ($F_z^\cent>0$), leads to a negative moment about $y$ and a positive moment about $x$ at the origin; a positive $x$-curvature of the beam at the origin ($\kappa_x>0$), leads to an elongation of the fibers at $\cent$, whereas a positive $y$-curvature of the beam at the origin implies a compression of the fibers at point $\cent$ ($\epsilon_z^\cent<0)$ -% -% -------------------------------------------------------------------------------- -\svgtex{StiffnessMatrixAxialBending}{Strain and loads transformation between the centroid $C$ and the origin $O$.}{1.1}{0.85} -% -------------------------------------------------------------------------------- -% -% -Combining \autoref{eq:AxialBendingCoordTrans} and \autoref{eq:AxialBendingAtCentroid} leads to: -\begin{align} - \begin{bmatrix}F_z \\ M_x \\ M_y\\ \end{bmatrix} - = - \begin{bmatrix} - \EA & \EA y_{\cent} & - \EA x_{\cent}\\ - \EA y_{\cent} & H_{xx} + \EA y_{\cent}^{2} & - H_{xy} - \EA x_{\cent} y_{\cent}\\ - - \EA x_{\cent} & - H_{xy} - \EA x_{\cent} y_{\cent} & H_{yy} + \EA x_{\cent}^{2}\end{bmatrix} - \begin{bmatrix}\epsilon_z \\ \kappa_x \\ \kappa_y\\ \end{bmatrix} - \label{eq:AxialBendingOrigin} -\end{align} - - - -% --------------------------------------------------------------------------------} -% --- -% --------------------------------------------------------------------------------{ -\subsection{Twisting moment and shear-forces} -The torsional moment and the shear forces are decoupled at the shear-center of the cross section, noted $\sh$, and of coordinates $(x_\sh, y_\sh)$ with respect to the origin of the cross section. -Further, the shear forces are independent when expressed with respect to the principal shear directions (usually taken as the principal axes direction), which are the axes, noted $\hat{x}_s, \hat{y}_s$, obtained by rotating the cross section axes $\hat{x}$, $\hat{y}$ by an angle $\theta_s$ about the $z$-axis. -The stiffness matrix about the shear center and in the principal shear directions is then: -\begin{align} - \begin{bmatrix} F_{x_s}^\sh \\ F_{y_s}^\sh\\M_z^\sh \\ \end{bmatrix} - = - \begin{bmatrix} - k_x \GA & 0 & 0\\ - 0 & k_y \GA &0 \\ - 0 & 0 & \GK\\ - \end{bmatrix} - \begin{bmatrix}\gamma_{x_s}^\sh \\ \gamma_{y_s}^\sh \\ \kappa_{z}^\sh \end{bmatrix} - \label{eq:ShearTorsionAtShearCenterInShearDirections} -\end{align} -where the superscript $\sh$ indicates that the quantities are expressed at the shear center while the subscript $s$ indicates that the values are related to the principal shear directions. The variables $k_x$ and $k_y$ are the dimensionless shear factor related to shear forces in the $\hat{x}_s$ and $\hat{y}_s$ direction respectively. - The stiffness matrix at the shear center is transformed to the cross-section frame leading to: -\begin{align} - \begin{bmatrix} F_x^\sh \\ F_y^\sh\\M_z^\sh \\ \end{bmatrix} - &= - \begin{bmatrix} - K_{xx} & - K_{xy} & 0\\ - - K_{xy} & K_{yy} &0 \\ - 0 & 0 & \GK\\ - \end{bmatrix} - \begin{bmatrix}\gamma_{x}^\sh \\ \gamma_{y}^\sh \\ \kappa_z^\sh \end{bmatrix} - \label{eq:ShearTorsionAtShearCenter} - \shortintertext{with} -K_{xx}/\GA &= k_{x_s} \cos^{2}\theta_s + k_{y_s} \sin^{2}\theta_s \\ -K_{yy}/\GA &= k_{x_s} \sin^{2}\theta_s + k_{y_s} \cos^{2}{\theta_s} \\ -K_{xy}/\GA &= (k_{y_s}-k_{x_s}) \sin\theta_s \cos\theta_s -% -\end{align} -% The shear center has the coordinates $(x_\sh,y_\sh)$ with respect to the origin of the cross section. -The loads, strains and twisting rate are transferred from the origin to the shear center as follows: -% -\begin{align} - \begin{bmatrix}F_x \\ F_y\\ M_z\\ \end{bmatrix} - = - \begin{bmatrix} - 1 & 0 &0 \\ - 0 & 1 & 0 \\ - - y_{\sh} & x_{\sh}& 1\\ - \end{bmatrix} - \begin{bmatrix} F_x^\sh \\ F_y^\sh\\M_z^\sh \\ \end{bmatrix} -,\qquad - \begin{bmatrix}\gamma_{x}^\sh \\ \gamma_{y}^\sh \\ \kappa_z^\sh \end{bmatrix} - = - \begin{bmatrix}1 & 0 & - y_{\sh}\\0 & 1 & x_{\sh}\\0 & 0 & 1\end{bmatrix} - \begin{bmatrix}\gamma_{x} \\ \gamma_{y} \\ \kappa_z \end{bmatrix} - \label{eq:ShearTorsionCoordTrans} -\end{align} -% The signs can be verified as follows: -% -Combining \autoref{eq:ShearTorsionAtShearCenter} with \autoref{eq:ShearTorsionCoordTrans} leads to: -% -\begin{align} - \begin{bmatrix}F_x \\ F_y\\ M_z\\ \end{bmatrix} - &= - \begin{bmatrix} -K_{xx} & - K_{xy} & - K_{xx} y_{\sh} - K_{xy} x_{\sh}\\- K_{xy} & K_{yy} & K_{xy} y_{\sh} + K_{yy} x_{\sh}\\- K_{xx} y_{\sh} - K_{xy} x_{\sh} & K_{xy} y_{\sh} + K_{yy} x_{\sh} & \GK + K_{xx} y_{\sh}^{2} + 2 K_{xy} x_{\sh} y_{\sh} + K_{yy} x_{\sh}^{2}\end{bmatrix} - \begin{bmatrix}\gamma_{x} \\ \gamma_{y} \\ \kappa_z \end{bmatrix} - \label{eq:ShearTorsionOrigin} -\end{align} - - - - - -\subsection{Summary} -The results given in \autoref{eq:ShearTorsionOrigin} and \autoref{eq:AxialBendingOrigin} are combined below to form the $6\times 6$ stiffness matrix expressed at the origin of the cross section: -\begin{align} - \begin{bmatrix} - F_x \\ F_y\\ F_z \\ M_x \\ M_y\\ M_z\\ - \end{bmatrix} -&= - \begin{bmatrix} -K_{11} & K_{12} & 0 & 0 & 0 & K_{16} \\ -K_{21} & K_{22} & 0 & 0 & 0 & K_{26} \\ -0 & 0 & K_{33} & K_{34} & K_{35} & 0 \\ -0 & 0 & K_{43} & K_{44} & K_{45} & 0 \\ -0 & 0 & K_{53} & K_{54} & K_{55} & 0 \\ -K_{61} & K_{62} & 0 & 0 & 0 & K_{66} \\ -\end{bmatrix} -% - \begin{bmatrix} - \gamma_{x} \\ \gamma_{y} \\ \epsilon_z \\ \kappa_x \\ \kappa_y\\ \kappa_z \\ - \end{bmatrix} - \\ - \begin{bmatrix} -K_{11} & K_{12} & K_{16} \\ -K_{21} & K_{22} & K_{26} \\ -K_{61} & K_{62} & K_{66} \\ -\end{bmatrix} -&= - \begin{bmatrix} -K_{xx} & - K_{xy} & - K_{xx} y_{\sh} - K_{xy} x_{\sh}\\- K_{xy} & K_{yy} & K_{xy} y_{\sh} + K_{yy} x_{\sh}\\- K_{xx} y_{\sh} - K_{xy} x_{\sh} & K_{xy} y_{\sh} + K_{yy} x_{\sh} & \GK + K_{xx} y_{\sh}^{2} + 2 K_{xy} x_{\sh} y_{\sh} + K_{yy} x_{\sh}^{2} -\end{bmatrix} -\nonumber -\\ - \begin{bmatrix} -K_{33} & K_{34} & K_{35} \\ -K_{43} & K_{44} & K_{45} \\ -K_{53} & K_{54} & K_{55} \\ -\end{bmatrix} -&= - \begin{bmatrix}\EA & \EA y_{\cent} & - \EA x_{\cent}\\\EA y_{\cent} & H_{xx} + \EA y_{\cent}^{2} & - H_{xy} - \EA x_{\cent} y_{\cent}\\- \EA x_{\cent} & - H_{xy} - \EA x_{\cent} y_{\cent} & H_{yy} + \EA x_{\cent}^{2}\end{bmatrix} -\nonumber - \\ -H_{xx} &= \EI_{x_p} \cos^{2}\theta_p + \EI_{y_p} \sin^{2}\theta_p \nonumber \\ -H_{yy} &= \EI_{x_p} \sin^{2}\theta_p + \EI_{y_p} \cos^{2}{\theta_p} \nonumber \\ -H_{xy} &= (\EI_{y_p}-\EI_{x_p}) \sin\theta_p \cos\theta_p \nonumber \\ -K_{xx}/\GA &= k_{x_s} \cos^{2}\theta_s + k_{y_s} \sin^{2}\theta_s \nonumber\\ -K_{yy}/\GA &= k_{x_s} \sin^{2}\theta_s + k_{y_s} \cos^{2}{\theta_s} \nonumber \\ -K_{xy}/\GA &= (k_{y_s}-k_{x_s}) \sin\theta_s \cos\theta_s \nonumber -\end{align} - - - - - -\clearpage -% --------------------------------------------------------------------------------} -% --- -% --------------------------------------------------------------------------------{ -\section{Mass matrix} - -\subsection{General form for a rigid body} -The mass matrix of a rigid body expressed at its center of mass is -\begin{align} -\m{M}^G= - \begin{bmatrix} - M\m{I}_3 & 0 \\ - 0 & \m{J}^{G} \\ - \end{bmatrix} -\end{align} -The general form of the mass matrix of a rigid body expressed at a given point $O$ is: -\begin{align} -\m{M}^O= - \begin{bmatrix} - M\m{I}_3 & -M \rhotil \\ - M \rhotil & \m{J}^{O} \\ - \end{bmatrix} -\end{align} -where -$\v{\rho}\eqdef \v{r}_{{O}G}$ is the distance from point $O$ to point $G$ and -$\m{J}^{O}$ is the inertia tensor of the body at $O$, related to the inertia tensor at the COG by: -% \begin{align} -$ - \m{J}^{O}\eqdef - \int \stil_{P}\, \stil_{P}\, dm -=\m{J}_G-M \rhotil\rhotil -$ -, $\v{s}_P=\v{r}_{OP}$ is a point of the body -and where the tilde notation refer to the \textit{skew symmetric matrix}. -Given two vectors $\v{u}$ and $\v{t}$, the skew symmetric matrix is such that $\tilde{\v{u}}\; \v{t} =\v{u}\times\v{t}$. -which is written in matricial form as follows: -\begin{align} -% \text{Skew}(\v{u}) \eqdef - \v{\tilde{u}} \eqdef - \begin{bmatrix} - 0 & -u_z & u_y \\ - u_z & 0 & -u_x \\ - -u_y & u_x & 0 \\ - \end{bmatrix} %\label{eq:} -\end{align} - - - -\subsection{Mass matrix of a cross section} - -Mass matrix about center of mass $G$, and about the principal inertia directions: -\begin{align} -\m{M}_i^G = - \begin{bmatrix} - m & 0 & 0 & 0 & 0 &0 \\ - 0 & m & 0 & 0 & 0 &0 \\ - 0 & 0 & m & 0 & 0 &0 \\ - 0 & 0 & 0 & I_{x_i} & 0 &0 \\ - 0 & 0 & 0 & 0 & I_{y_i} & \\ - 0 & 0 & 0 & 0 & 0 & I_p \\ - \end{bmatrix} - ,\qquad -\end{align} -where $I_p=I_{x_i} + I_{y_i}$. -Rotated to be expressed about the cross section axis, this becomes: -\begin{align} -\m{M}^G &= - \begin{bmatrix} - m & 0 & 0 & 0 & 0 & 0 \\ - 0 & m & 0 & 0 & 0 & 0 \\ - 0 & 0 & m & 0 & 0 & 0 \\ - 0 & 0 & 0 & I_{xx} & -I_{xy} & 0 \\ - 0 & 0 & 0 & -I_{xy} & I_{yy} & \\ - 0 & 0 & 0 & 0 & 0 & I_p \\ - \end{bmatrix} - ,\qquad - \shortintertext{with} - I_{xx} &= I_{x_i} \cos^2\theta_i + I_{y_i} \sin^2\theta_i\\ - I_{yy} &= I_{x_i} \sin^2\theta_i + I_{y_i} \cos^2\theta_i\\ - I_{xy} &= (I_{y_i}-I_{x_i}) \sin\theta_i \cos\theta_i -\end{align} -Transferred to the origin: -\begin{align} -\m{M}^O= -\begin{bmatrix} -m & 0 & 0 & 0 & 0 & - m y_G\\0 & m & 0 & 0 & 0 & m x_G\\0 & 0 & m & m y_G & - m x_G & 0\\0 & 0 & m y_G & I_{xx} + m y_G^{2} & - I_{xy} - m x_G y_G & 0\\0 & 0 & - m x_G & - I_{xy} - m x_G y_G & I_{yy} + m x_G^{2} & 0\\- m y_G & m x_G & 0 & 0 & 0 & I_{p} + m x_G^{2} + m y_G^{2} -\end{bmatrix} -\end{align} - - - - -% -% -% \subsection{Old} -% % \weird{TODO} -% Example of mass matrix , beam directed along $x$ -% % See DeFriasLopez p 17 -% \begin{align} -% \begin{bmatrix} -% m & 0 & 0 & 0 & 0 & 0 \\ -% 0 & m & 0 & z_G m & 0 & 0 \\ -% 0 & 0 & m & -y_G m & 0 & 0 \\ -% 0 & z_G m & -y_G m & \rho_t & 0 & 0 \\ -% 0 & 0 & 0 & \rho_t & 0 & 0 \\ -% 0 & 0 & 0 & 0 & \rho_y & 0 \\ -% 0 & 0 & 0 & 0 & 0 & \rho_z \\ -% \end{bmatrix} -% \end{align} -% -% -% \weird{TODO} -% Example of mass matrix , beam directed along $x$ -% % See FAST documentation -% % https://openfast.readthedocs.io/en/master/source/user/beamdyn/input_files.html#equation-Stiffness -% \begin{align} -% \begin{bmatrix} -% m & 0 & 0 & 0 & 0 & -y_G m \\ -% 0 & m & 0 & 0 & 0 & x_G m \\ -% 0 & 0 & m & y_G m & -m x_G & 0 \\ -% 0 & 0 & y_G m & \rho_t & 0 & 0 \\ -% 0 & 0 & -x_G m & i_\text{Edg} & -i_\text{cp} & 0 \\ -% 0 & 0 & 0 & -i_\text{cp} & i_\text{Flp} & 0 \\ -% -y_G m & m x_G & 0 & 0 & 0 & i_\text{plr} \\ -% \end{bmatrix} -% ,\qquad -% \end{align} -% \weird{$i_\text{plr}=i_\text{Edg}+i_\text{Flp}$, when\ldots} -% -% -% \clearpage -% --------------------------------------------------------------------------------} -% --- -% --------------------------------------------------------------------------------{ -\section{Setting BeamDyn inputs from HAWC2 inputs} -To setup a BeamDyn model based on a HAWC2 model, it is convenient to use the mid-chord as a reference line of the beam. This is indeed the reference used in HAWC2, referred to as the ``c2\_def''-coordinate system. -% The definition of the mean line in BeamDyn and HAWC2 is given in \autoref{tab:MeanLineHAWC2}. -% -The structural file of HAWC2 contains the location of the center of gravity, shear center, and centroid. The centroid is yet referred to as ``elastic-center'' (defined as the point where the axial force is decoupled from the bending around $x$ and $y$). -% -The bending stiffness properties of HAWC2 are defined with respect to the principal axes, rotated by an structural pitch angle $\theta_s$ around $z$, compared to the axis of the cross section. The principal axes and principal shear axis are assumed to be the same. -% -The correspondence between the notations of the current document and HAWC2 is given in \autoref{tab:MeanLineHawc2}. -% ----------------------------------- TABLE -------------------------------------- -% \begin{landscape} -\begin{table}[!h]\centering - \caption{Correspondence between the current definitions and the inputs from HAWC2 for the mean line, section coordinates and stiffness properties} - \label{tab:MeanLineHawc2} -\begin{tabular}{rcl} - \textbf{Current} & & \textbf{HAWC2} \\ - \hline -(\tt{kp\_xr}) $x_O$ & = & $ y_{c2}$ (\tt{y-pos}) \\ -(\tt{kp\_yr}) $y_O$ & = & $ -x_{c2}$ (``-''\tt{x-pos}) \\ -(\tt{kp\_zr}) $z_O$ & = & $ z_{c2}$ (\tt{z-pos}) \\ -(\tt{initial\_twist}) $\theta_{z}$ & = & $ \theta_{z}$(\tt{theta\_z}) \\ - \hline - $x_G$ & = & $ y_{m}$ \\ - $y_G$ & = & $ -x_{m}$ \\ - $x_\sh$ & = & $ y_{s}$ \\ - $y_\sh$ & = & $ -x_{s}$ \\ - $x_\cent$ & = & $ y_{e}$ \\ - $y_\cent$ & = & $ -x_{e}$ \\ -\hline - $\EA$ & = & $ E\, A$ \\ - $\GK$ & = & $ G\, K$ \\ - $k_{x_s}$ & = & $ k_y $ \\ - $k_{y_s}$ & = & $ k_x $ \\ - $\EI_{x_p}$ & = & $ E I_y $ \\ - $\EI_{y_p}$ & = & $ E I_x $ \\ - $\theta_s$ & = & $ \theta_s$ \\ - $\theta_p$ & = & $ \theta_s$ \\ -\hline - $\theta_i$ & = & $ \theta_p$ \\ - $m$ & = & $m$ \\ - $I_{x_i}$ & = & $r_{iy}^2 m$ \\ - $I_{y_i}$ & = & $r_{ix}^2 m$ \\ - $I_{p}$ & = & $K m / A$\\ -\hline - \end{tabular} -\end{table} -% \end{landscape} -% -------------------------------------------------------------------------------- -% ----------------------------------- TABLE -------------------------------------- -% % \begin{landscape} -% \begin{table}[!h]\centering -% \caption{Correspondence of section coordinates between the current document and hawc2} -% \label{tab:SecCoord} -% \begin{tabular}{rcl} -% \textbf{Current} & & \textbf{Hawc2} \\ -% \hline -% $x_G$ & = & $ y_{m}$ \\ -% $y_G$ & = & $ -x_{m}$ \\ -% $x_\sh$ & = & $ y_{s}$ \\ -% $y_\sh$ & = & $ -x_{s}$ \\ -% $x_\cent$ & = & $ y_{e}$ \\ -% $y_\cent$ & = & $ -x_{e}$ \\ -% \hline -% \end{tabular} -% \end{table} -% % \end{landscape} -% -------------------------------------------------------------------------------- -% ----------------------------------- TABLE -------------------------------------- -% % \begin{landscape} -% \begin{table}[!h]\centering -% \caption{Correspondence of stiffness properties between the current document and hawc2} -% \label{tab:StiffHawc2} -% \begin{tabular}{rcl} -% \textbf{Current} & & \textbf{Hawc2} \\ -% \hline -% $\EA$ & = & $ E\, A$ \\ -% $\GK$ & = & $ G\, K$ \\ -% $k_x$ & = & $ k_y $ \\ -% $k_y$ & = & $ k_x $ \\ -% $\EI_{x_p}$ & = & $ E I_y $ \\ -% $\EI_{y_p}$ & = & $ E I_x $ \\ -% $\theta_s$ & = & $ \theta_s$ \\ -% $\theta_p$ & = & $ \theta_s$ \\ -% \hline -% \end{tabular} -% \end{table} -% % \end{landscape} -% -------------------------------------------------------------------------------- - - - - - - - - -% \clearpage -% -% \section{6x6 matrices and element matrices} -% \weird{TODO} -% % See DeFriasLopez p 15 -% \begin{align} -% k_e = \int_{0}^L \m{B_k}^T \m{C} \m{B_k} dx \\ -% m_e = \int_{0}^L \m{B_m}^T \m{\rho} \m{B_m} dx \\ -% \end{align} -% where $\m{B_k}$ and $\m{B_m}$ are usually taken as the Hermit or cubic polynomial matrices. -% -% -% - - - -\appendix - - - - -\clearpage -% --------------------------------------------------------------------------------} -% --- -% --------------------------------------------------------------------------------{ -\section{Typical coordinate systems for different aero-elastic codes} -The OpenFAST coordinate system together with other aero-elastic codes coordinate systems are shown in \autoref{fig:AeroElastCodesCoordConvention}. The OpenFAST coordinate system follows the IEC wind turbine convention. Angles are negative about $z$. -% -------------------------------------------------------------------------------- -\svgtex{AeroElastCodesCoordConvention}{Coordinate systems for three aeroelastic codes: OpenFAST, HAWC2 and Flex. The airfoil cross section is drawn for a typical bending and sweep of an upwind turbine.}{1.3}{0.75} -% -------------------------------------------------------------------------------- -\clearpage - - - - - - -% -% -% \section{3D Beam representation - Timoshenko beam and 3D frames} -% -% -% -% -% -% -% % --------------------------------------------------------------------------------} -% % --- Frame -% % --------------------------------------------------------------------------------{ -% \subsection{3D frame element} -% The 3D frame element stiffness matrix for an element directed along $x$ is directly obtained from the more general Timoshenko element with zero shear deformation parameters ($\Phi_y=\Phi_z=0$) and a shear center at zero ($\ysh=\zsh=0$) in \autoref{eq:KTimoshenkoOffsets}. -% If the frame is directed along $z$, the stiffness matrix from \autoref{eq:KTimoshenkoOffsetsAlongZ} can similarly be used. -% -% % % --- Stiffness matrix -% % a = EA / L ; % a1 -% % b = 12 * EIz / L^3 ; % b1 -% % c = 6 * EIz / L^2 ; % b2 -% % d = 12 * EIy / L^3 ; % c1 -% % e = 6 * EIy / L^2 ; % c2 -% % f = G*Kv / L ; % a2 = G*J/L -% % g = 2 * EIy / L ; % c3 -% % h = 2 * EIz / L ; % b3 -% % -% % % NOTE: OK with -% % % - Serano beam3e function -% % % - Matlab FEM Book -% % % - frame3d_6j -% % % - Panzer-Hubele -% % % NOTE: compatible with by Timoshenko with shear offsets -% % % ux1 uy1 uz1 tx1 ty1 tz1 ux2 uy2 yz2 tx2 ty2 tz2 -% % ke = [ a 0 0 0 0 0 -a 0 0 0 0 0 ;% ux1 -% % 0 b 0 0 0 c 0 -b 0 0 0 c ;% uy1 -% % 0 0 d 0 -e 0 0 0 -d 0 -e 0 ;% uz1 -% % 0 0 0 f 0 0 0 0 0 -f 0 0 ;% tx1 -% % 0 0 -e 0 2*g 0 0 0 e 0 g 0 ;% ty1 -% % 0 c 0 0 0 2*h 0 -c 0 0 0 h ;% tz1 -% % -% % -a 0 0 0 0 0 a 0 0 0 0 0 ;% ux2 -% % 0 -b 0 0 0 -c 0 b 0 0 0 -c ;% uy2 -% % 0 0 -d 0 e 0 0 0 d 0 e 0 ;% yz2 -% % 0 0 0 -f 0 0 0 0 0 f 0 0 ;% tx2 -% % 0 0 -e 0 g 0 0 0 e 0 2*g 0 ;% ty2 -% % 0 c 0 0 0 h 0 -c 0 0 0 2*h];% tz2 -% -% % % SOURCE: What-When-How-FEM-For-Frames. NOTE: the sign was reveresed in front of 35*r2!!!, to be consistent with Panzer-Hubele with Iy and Iz=0 -% % a = L/2 ; a2 = a^2 ; r2 = EIx/E/A; -% % me = Mass/2/105 * [ -% % %ux1 uy1 uz1 tx1 ty1 tz1 ux2 uy2 yz2 tx2 ty2 tz2 -% % 70 0 0 0 0 0 35 0 0 0 0 0 ;% ux1 -% % 0 78 0 0 0 22*a 0 27 0 0 0 -13*a ;% uy1 -% % 0 0 78 0 -22*a 0 0 0 27 0 13*a 0 ;% uz1 -% % 0 0 0 70*r2 0 0 0 0 0 35*r2 0 0 ;% tx1 -% % 0 0 -22*a 0 8*a2 0 0 0 -13*a 0 -6*a2 0 ;% ty1 -% % 0 22*a 0 0 0 8*a2 0 13*a 0 0 0 -6*a2 ;% tz1 -% % % -% % 35 0 0 0 0 0 70 0 0 0 0 0 ;% ux2 -% % 0 27 0 0 0 13*a 0 78 0 0 0 -22*a ;% uy2 -% % 0 0 27 0 -13*a 0 0 0 78 0 22*a 0 ;% yz2 -% % 0 0 0 35*r2 0 0 0 0 0 70*r2 0 0 ;% tx2 -% % 0 0 13*a 0 -6*a2 0 0 0 22*a 0 8*a2 0 ;% ty2 -% % 0 -13*a 0 0 0 -6*a2 0 -22*a 0 0 0 8*a2 ];% tz2 -% -% -% -% -% -% -% -% -% % --------------------------------------------------------------------------------} -% % --- Timoshenko along x -% % --------------------------------------------------------------------------------{ -% \subsection{Timoshenko beam with shear center offsets - Beam along x} -% \label{sec:TimoshenkoBeamAlongX} -% -% The formulation for a Timoshenko beam is found e.g. in the book of Przemieniecki~\cite[p.79]{przemieniecki:book} (see also \cite{panzer:2009}) for $\ysh=\zsh=0$. -% -% % SEE ALSO: - Generating a Parametric Finite Element Model of a 3D Cantilever Timoshenko Beam Using Matlab -% % NOTE: compatible with above -% The general formulation with shear offsets is given below. -% The shear-deformation parameters $\Phi_y$ and $\Phi_z$ are defined as: -% \begin{align} -% \Phi_y -% &= \frac{12 EI_z}{k_y A G L^2} -% = \frac{12 EI_z}{{A_{s_y}} G L^2} -% = 24 ( 1+\nu) \frac{A}{A_{s_y}}\left(\frac{r_z}{L}\right)^2 \nonumber\\ -% \Phi_z -% &= \frac{12 EI_y}{k_z A G L^2} -% = \frac{12 EI_y}{{A_{s_z}} G L^2} -% = 24 ( 1+\nu) \frac{A}{A_{s_z}}\left(\frac{r_y}{L}\right)^2 -% \label{eq:ShearDeformationParams} -% \end{align} -% where the last equality assumes an isotropic linear elastic material such that $G=E/(2\nu +1)$ with $\nu$ the Poisson's ratio, -% where $r_y$ and $r_z$ are the radii of gyration, -% $A_{s_y}$ and $A_{s_y}$ are the effective area of shear (for a rectangular cross section they are both equal to $5/6 th$) -% $k_y$ and $k_z$ are the dimensionless shear factors for the force in the principal bending axis direction $y$ and $z$ respectively. The following notations are sometimes adopted by some authors: $\eta_y=\Phi_z/12$, $\eta_z=\Phi_y/12$, $\rho_y=1/(1+\Phi_z)$, $\rho_z=1/(1+\Phi_y)$ (note the inversion between $y$ and $z$ in these definitions). -% % -% The shear-deformation parameters $\Phi_y$ and $\Phi_z$ are $0$ for a Euler-Bernoulli beam. -% % -% The stiffness matrix for a Timoshenko beam along the $x$ direction, with shear center offsets $\ysh$, $\zsh$ is given in \autoref{eq:KTimoshenkoOffsets}, where the following notation was introduced: -% \begin{align} -% K_\text{sh} = \frac{12E}{L^3}\left[\frac{I_y \ysh^2}{1+\Phi_z} + \frac{I_z \zsh^2}{1+\Phi_y} \right] \label{eq:Ksh} -% \end{align} -% and the notation $k_{ij}$ is used to denote the element of row $i$ and column $j$ of the matrix. -% -% \renewcommand*{\arraystretch}{1.9} -% \begin{align} -% \setcounter{MaxMatrixCols}{20} -% % \m{K}&=\\ -% &\text{Stiffness matrix for a Timoshenko beam element along $x$ with shear center offsets}\label{eq:KTimoshenkoOffsets}\\ -% &\!\! \begin{bmatrix} -% \frac{EA}{L} & & & & & & & & & & & \\ -% 0 & \frac{12 E I_z}{L^3(1+\Phi_y)} & & & & & & & & & & \\ -% 0 & 0 & \frac{12 E I_y}{L^3(1+\Phi_z)} & & & \text{sym.} & & & & & & \\ -% 0 & -k_{22}\,\zsh & k_{33}\,\ysh & \frac{GI_x}{L} + K_\text{sh} & & & & & & & & \\ -% 0 & 0 & -\frac{6EI_y}{L^2(1+\Phi_y)} & k_{53}\,\ysh & \frac{EI_y(4+\Phi_z)}{L(1+\Phi_z)} & & & & & & & \\ -% 0 & \frac{6 EI_z}{L^2(1+\Phi_y)} & 0 & -k_{62}\,\zsh & 0 & \frac{EI_z(4+\Phi_y)}{L(1+\Phi_y)} & & & & & & \\ -% % -% -k_{11} & 0 & 0 & 0 & 0 & 0 & k_{11} & & & & & \\ -% 0 & -k_{22} & 0 & k_{22}\,\zsh & 0 & -k_{62} & 0 & k_{22} & & & & \\ -% 0 & 0 & -k_{33} & -k_{33}\,\ysh & -k_{53} & 0 & 0 & 0 & k_{33} & & & \\ -% 0 & k_{22}\, \zsh & -k_{33}\,\ysh & -k_{44} & -k_{53}\,\ysh & k_{62}\,\zsh & 0 & k_{42} & k_{43} & k_{44} & & \\ -% 0 & 0 & k_{53} & k_{53}\,\ysh & \frac{EI_y(2-\Phi_z)}{L(1+\Phi_z)} & 0 & 0 & 0 & -k_{53} & -k_{54} & k_{55} & \\ -% 0 & k_{62} & 0 & -k_{62}\,\zsh & 0 & \frac{EI_z(2-\Phi_y)}{L(1+\Phi_y)} & 0 & -k_{62} & 0 & -k_{64} & 0 & k_{66} \\ -% \end{bmatrix} -% \nonumber\\ -% &\text{(to be used with the definitions from \autoref{eq:ShearDeformationParams} and \autoref{eq:Ksh})} \nonumber -% \end{align} -% \renewcommand*{\arraystretch}{1} -% -% -% -% -% % --------------------------------------------------------------------------------} -% % --- -% % --------------------------------------------------------------------------------{ -% \subsection{Timoshenko beam with shear center offsets - Beam along z} -% \label{sec:TimoshenkoBeamAlongZ} -% The equations presented in this section are similar to the ones presented in \autoref{sec:TimoshenkoBeamAlongX} but the coordinate system is rotated leading to different definitions. The notations are yet kept the same so the reader should not mix equations from the two sections. -% The coordinates $(x,y,z)$ of \autoref{sec:TimoshenkoBeamAlongZ} are now permuted to $(y,z,x)$. -% The $\Phi_x$, $\Phi_y$ and $K_{sh}$ are then defined as -% \begin{align} -% \Phi_x -% &= \frac{12 EI_y}{k_x A G L^2} -% = \frac{12 EI_y}{{A_{s_x}} G L^2} -% = 24 ( 1+\nu) \frac{A}{A_{s_x}}\left(\frac{r_y}{L}\right)^2 \nonumber\\ -% \Phi_y -% &= \frac{12 EI_x}{k_y A G L^2} -% = \frac{12 EI_x}{{A_{s_y}} G L^2} -% = 24 ( 1+\nu) \frac{A}{A_{s_y}}\left(\frac{r_x}{L}\right)^2 -% \label{eq:ShearDeformationParamsAlongZ} \\ -% K_\text{sh} &= \frac{12E}{L^3}\left[\frac{I_x \xsh^2}{1+\Phi_y} + \frac{I_y \ysh^2}{1+\Phi_x} \right] \label{eq:KshAlongZ} -% \end{align} -% % with the following notation introduced by some authors: $\eta_x=\Phi_y/12$, $\eta_y=\Phi_x/12$, $\rho_x=1/(1+\Phi_y)$, $\rho_y=1/(1+\Phi_x)$ (note the inversion between $x$ and $y$ in these definitions). -% % -% The stiffness matrix for a Timoshenko beam element directed along the $z$ direction, with shear center offsets $\xsh$, $\ysh$ is given in \autoref{eq:KTimoshenkoOffsetsAlongZ}. -% % , where the following notation was introduced: -% % \begin{align} -% % \end{align} -% % and the notation $k_{ij}$ is used to denote the element of row $i$ and column $j$ of the matrix. -% -% \renewcommand*{\arraystretch}{1.9} -% \begin{align} -% \setcounter{MaxMatrixCols}{20} -% % \m{K}&=\\ -% &\text{Stiffness matrix for a Timoshenko beam element along $z$ with shear center offsets}\label{eq:KTimoshenkoOffsetsAlongZ}\\ -% &\!\! \begin{bmatrix} -% \frac{12 E I_y}{L^3(1+\Phi_x)} & & & & & & & & & & & \\ -% 0 & \frac{12 E I_x}{L^3(1+\Phi_y)} & & & & \text{sym.} & & & & & & \\ -% 0 & 0 & \frac{EA}{L} & & & & & & & & & \\ -% 0 & -\frac{6EI_x}{L^2(1+\Phi_y)} & 0 & \frac{EI_x(4+\Phi_y)}{L(1+\Phi_y)} & & & & & & & & \\ -% \frac{6 EI_y}{L^2(1+\Phi_x)} & 0 & 0 & 0 & \frac{EI_y(4+\Phi_z)}{L(1+\Phi_x)} & & & & & & & \\ -% -k_{11}\,\ysh & k_{22}\,\xsh & 0 & k_{42}\,\xsh & -k_{51}\,\ysh & \frac{GI_z}{L} + K_\text{sh} & & & & & & \\ -% -k_{11} & 0 & 0 & 0 & -k_{51} & k_{11}\,\ysh & k_{11} & & & & & \\ -% 0 & -k_{22} & 0 & -k_{42} & 0 & -k_{22}\,\xsh & 0 & k_{22} & & & & \\ -% 0 & 0 & -k_{33} & 0 & 0 & 0 & 0 & 0 & k_{23} & & & \\ -% 0 & k_{42} & 0 & \frac{EI_x(2-\Phi_y)}{L(1+\Phi_y)} & 0 & k_{42}\,\xsh & 0 & -k_{42} & 0 & k_{44} & & \\ -% k_{51} & 0 & 0 & 0 & \frac{EI_y(2-\Phi_x)}{L(1+\Phi_x)} & -k_{51}\,\ysh & -k_{51} & 0 & 0 & 0 & k_{55} & \\ -% k_{11}\, \ysh & -k_{22}\,\xsh & 0 & -k_{42}\,\xsh & k_{51}\,\ysh & -k_{66} & k_{61} & k_{62} & 0 & -k_{64} & -k_{65} & k_{66} \\ -% \end{bmatrix} -% \nonumber -% \\ -% &\text{(to be used with the definitions from \autoref{eq:ShearDeformationParamsAlongZ} and \autoref{eq:KshAlongZ})} \nonumber -% \end{align} -% \renewcommand*{\arraystretch}{1} -% -% -% -% \begin{lstlisting} -% real*8 :: z=0.0d0, & ! curved distance -% m=0.0d0, & ! mass distribution -% x_cg=0.0d0, & ! Center of gravity related to centerline -% y_cg=0.0d0, & ! Center of gravity related to centerline -% ri_x=0.0d0, & ! Radius of gyration related to centeline -% ri_y=0.0d0, & ! Radius of gyration related to centeline -% x_sh=0.0d0, & ! Shear center related to centerline -% y_sh=0.0d0, & ! Shear center related to centerline -% E=0.0d0, & ! Modulus of elasticity -% G=0.0d0, & ! Shear modulus of elasticity -% I_x=0.0d0, & ! Areal moment of inertia related to 1st principal bending axes -% I_y=0.0d0, & ! Areal moment of inertia related to 2nd principal bending axes -% I_p=0.0d0, & ! Torsional stiffness constant -% k_x=0.0d0, & ! Shear parameter -% k_y=0.0d0, & ! Shear parameter -% A=0.0d0, & ! Cross sectional area -% theta_z=0.0d0,& ! Angle between 1st principal bending axe and aerodyn chord -% x_e=0.0d0, & ! Elastic axe center related to chord midpoint -% y_e=0.0d0, & ! Elastic axe center related to chord midpoint -% \end{lstlisting} -% -% -% \begin{align} -% \eta_x = \frac{E I_x}{k_y G A L^2} -% ,\qquad -% \eta_y = \frac{E I_y}{k_x G A L^2} \\ -% \rho_x = \frac{1}{1+12\eta_x} -% ,\qquad -% \rho_y = \frac{1}{1+12\eta_y}\\ -% K_{11} = -% \begin{pmatrix} -% \frac{12 E I_y \rho_y}{L^3} & 0 & 0 & 0 \\ -% \end{pmatrix} -% \end{align} -% % --- -% % Code taken from Timoshenko.f90, ELSTIF -% % --- -% \begin{lstlisting} -% ! Calculates the element stiffness matrix. * -% ETAX = EMOD*IX/(KY*G*A*L**2) -% ETAY = EMOD*IY/(KX*G*A*L**2) -% ROX = 1/(1+12*ETAX) -% ROY = 1/(1+12*ETAY) -% KK = 0.0D0 -% KK( 1, 1) = 12*E*IY*ROY/L**3 -% KK( 1, 5) = 6*E*IY*ROY/L**2 -% KK( 1, 6) = -KK(1,1)*YSH -% KK( 1, 7) = -KK(1,1) -% KK( 1,11) = KK(1,5) -% KK( 1,12) = -KK(1,6) -% KK( 2, 2) = 12*E*IX*ROX/L**3 -% KK( 2, 4) = -6*E*IX*ROX/L**2 -% KK( 2, 6) = KK(2,2)*XSH -% KK( 2, 8) = -KK(2,2) -% KK( 2,10) = KK(2,4) -% KK( 2,12) = -KK(2,6) -% KK( 3, 3) = E*A/L -% KK( 3, 9) = -KK(3,3) -% KK( 4, 4) = 4*E*IX*(1+3*ETAX)*ROX/L -% KK( 4, 6) = KK(2,4)*XSH -% KK( 4, 8) = -KK(2,4) -% KK( 4,10) = 2*E*IX*(1-6*ETAX)*ROX/L -% KK( 4,12) = -KK(4,6) -% KK( 5, 5) = 4*E*IY*(1+3*ETAY)*ROY/L -% KK( 5, 6) = -KK(1,5)*YSH -% KK( 5, 7) = -KK(1,5) -% KK( 5,11) = 2*E*IY*(1-6*ETAY)*ROY/L -% KK( 5,12) = -KK(5,6) -% KK( 6, 6) = G*IZ/L +12*E*(IX*XSH**2*ROX+IY*YSH**2*ROY)/L**3 -% KK( 6, 7) = KK(1,12) -% KK( 6, 8) = KK(2,12) -% KK( 6,10) = -KK(4,12) -% KK( 6,11) = -KK(5,12) -% KK( 6,12) = -KK(6,6) -% KK( 7, 7) = KK(1,1) -% KK( 7,11) = -KK(1,5) -% KK( 7,12) = KK(1,6) -% KK( 8, 8) = KK(2,2) -% KK( 8,10) = -KK(2,4) -% KK( 8,12) = KK(2,6) -% KK( 9, 9) = KK(3,3) -% KK(10,10) = KK(4,4) -% KK(10,12) = -KK(4,6) -% KK(11,11) = KK(5,5) -% KK(11,12) = -KK(5,6) -% KK(12,12) = KK(6,6) -% \end{lstlisting} - - - -% --------------------------------------------------------------------------------} -% --- HAWC2 BeamDyn -% --------------------------------------------------------------------------------{ -% \subsection{HAWC2 - BeamDyn} - - - - -% --------------------------------------------------------------------------------} -% --- -% --------------------------------------------------------------------------------{ -% \section{} - - -% \begin{itemize}\tightlist -% \item -% \end{itemize} -% ----------------------------------- TABLE -------------------------------------- -% \begin{landscape} -% \begin{table}[!htb]\centering -% \caption{} -% \label{tab:Symbols} -% \begin{tabular}{cc} -% \textbf{Symbol} & \textbf{Value} \\ -% x & 2\\ -% \hline -% \end{tabular} -% \end{table} -% \end{landscape} -% -------------------------------------------------------------------------------- -% ---------------------------------- FIGURE -------------------------------------- -% From script: Main*, from folder: , 30-Nov-2016 -% \noindent\begin{figure}[!htbp]\centering% -% \includegraphics[width=0.60\textwidth]{FigureExample} -% \caption{Figure caption} -% \label{fig:Contour}% -% \end{figure} -% -------------------------------------------------------------------------------- -% ---------------------------- SKETCH -------------------------------------------- -% \svgtex{FASTAirfoilSystem}{Sketch title}{0.6}{0.90} -% -------------------------------------------------------------------------------- -% \python -% \begin{lstlisting} -% \end{lstlisting} - - - - -% --------------------------------------------------------------------------------} -% --- BIBLIO -% --------------------------------------------------------------------------------{ -\bibliographystyle{unsrt} -\bibliography{Bibliography} - -\end{document} diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib deleted file mode 100644 index f3df188856..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Bibliography.bib +++ /dev/null @@ -1,15788 +0,0 @@ -% -------------------------------------------------------------------------------- -% --- My papers -% --------------------------------------------------------------------------------{ -@book{branlard:2009, - author = {E. Branlard}, - title = {On the statistics of gusts and their propagation through a wind farm}, - year = {2009}, - month = {February}, - publisher= {ECN - Wind-Memo-09-005} -} -@book{branlard:arctic, - author = {E. Branlard}, - title = {Wind power in arctic conditions: The experience of Greenland}, - year = {2010}, - month = {December}, - publisher= {Ris{\o}-DTU - Arctic Technologies} -} - -@TECHREPORT{branlard:2009fermi, - author = {E. Branlard}, - title = {On the implementation of a 3D space charge algorithm to understand and further study the physics of linear accelerators}, - institution = {Fermilab-Supaero technical report}, - year = {2009}, - month = {August} -} - -@ARTICLE{branlard:diffcalculus, - author = {E. Branlard}, - title = {Useful relations of differential calculus}, - journal = {http://emmanuel.branlard.free.fr}, - year = {2012} -} - -@ARTICLE{branlard:biotsavart, - author = {E. Branlard}, - title = {Biot-savart law}, - journal = {Online}, - year = {2012}, - otherinfo = {} -} - -@TECHREPORT{branlard:spectrum, - author={E. Branlard}, - title={Generation of time series from a spectrum: Generation of Wind times series from the Kaimal spectrum. Generation of wave times series from the JONSWAP spectrum}, - month={February}, - institution={DTU Wind energy, Ris{\o} DTU National Laboratory for Sustainable Energy}, - year=2010, -} - -@mastersthesis{branlard:2011tiploss, - author = {E. Branlard}, - title = {Wind turbine tip-loss corrections: Review, implementation and investigation of new models}, - year = {2011}, - month = {September}, - school={Ris{\o}-DTU, Siemens Energy Inc. (available at DTU's library)}, -} - -@INPROCEEDINGS{branlard:2012ewea, - title = "An improved tip-loss correction based on vortex code results", - publisher = "EWEA - The European Wind Energy Association", - author = "E. Branlard and K. Dixon and M. Gaunaa", - year = "2012", - booktitle = "Proceedings", -} - -@article{branlard:2012torque, - author = {E. Branlard and M. Gaunaa}, - title = {Development of new tip-loss corrections based on vortex theory and vortex methods}, - publisher = "Institute of Physics Publishing", - year = "2014", - doi = "10.1088/1742-6596/555/1/012012", - volume = "555", - pages ={1-8}, - journal = "Journal of Physics: Conference Series (Online)", - issn = "1742-6596" -} - -@article{branlard:2013iet, - title = "Vortex methods to answer the need for improved understanding and modelling of tip-loss factors", - publisher = "The/Institution of Engineering and Technology", - author = "E. Branlard and K. Dixon and M. Gaunaa", - year = "2013", - volume = "7", - number = "4", - pages = "311--320", - journal = "{IET} Renewable Power Generation", - issn = "1752-1416", -} - -@article{branlard:2013amt, - title = "Retrieving wind statistics from average spectrum of continuous-wave lidar", - publisher = "Copernicus GmbH", - author = "Branlard, {Emmanuel} and Pedersen, {Anders Tegtmeier} and Jakob Mann and Nikolas Angelou and Andreas Fischer and Torben Mikkelsen and M. Harris and C. Slinger and Montes, {B. F.}", - year = "2013", - volume = "6", - number = "1", - pages = "1943--1977", - journal = "Atmospheric Measurement Techniques", - issn = "1867-8610", -} - -@INPROCEEDINGS{branlard:2014ewea, - title = "Validation of vortex code viscous models using lidar wake measurements and {CFD}", - publisher = "EWEA - The European Wind Energy Association", - author = "E. Branlard and E. Machefaux and M. Gaunaa and H.H. {Brandenborg S{\o}rensen} and N. Troldborg", - year = "2014", - booktitle = "Proceedings", -} - -@article{branlard:2014yawtorque, - title = "Investigation of a new model accounting for rotors of finite tip-speed ratio in yaw or tilt", - publisher = "Institute of Physics Publishing", - author = "E. Branlard and M. Gaunaa and E. Machefaux", - year = "2014", - doi = "10.1088/1742-6596/524/1/012124", - pages = {1-11}, - volume = "524", - number = "1", - journal = "Journal of Physics: Conference Series (Online)", - issn = "1742-6596", -} - -@article{branlard:2014right, - title = {Cylindrical vortex wake model: right cylinder}, - author = {E. Branlard and M. Gaunaa}, - journal = {Wind Energy}, - pages = {1-15 (Online)}, - year = {2014}, - volume = {524}, - number = {1}, - issn = {10954244, 10991824}, - doi = {10.1002/we.1800} -} - -@article{branlard:2015skew, - title = {Cylindrical vortex wake model: skewed cylinder, application to yawed or tilted rotors}, - author = {E. Branlard and M. Gaunaa}, - journal = {Wind Energy}, - year = "2015", - issn = {1099-1824}, - doi = {10.1002/we.1838}, - pages = {(Online)} -} - -@article{branlard:2015wakerot, - title = {Superposition of vortex cylinders for steady and unsteady simulation of rotors of finite tip-speed ratio}, - author = {E. Branlard and M. Gaunaa}, - journal = {Wind Energy}, - year = "2015", - issn = {1099-1824}, - url = {http://dx.doi.org/10.1002/we.1899}, - doi = {10.1002/we.1899} -} - -@misc{branlard:2015turb, - title = {Impact of a wind turbine on turbulence: un-freezing the turbulence by means of a simple vortex particle approach}, - author = {E. Branlard and M. Gaunaa}, - journal = {Journal of Wind Engineering and Industrial Aerodynamics}, - year = "2016", - volume={151}, - pages={37--7} -} - - -@article{branlard:2015elast, - title = {Aeroelastic large eddy simulations using vortex methods: unfrozen turbulent and sheared inflow}, - author = {E. Branlard and G. Papadakis and M. Gaunaa and G. Winckelmans and T. J. Larsen}, - journal = "Journal of Physics: Conference Series (Online)", - year = "2015", - doi = "10.1088/1742-6596/625/1/012019", - volume = "625", - issn = "1742-6596", -} - -@INPROCEEDINGS{branlard:2015induction, - title = "Using a cylindrical vortex model to assess the induction zone infront of aligned and yawed rotors", - author = "E. Branlard and A. {Meyer Forsting}", - year = "2015", - booktitle = "Proceedings of EWEA Offshore 2015 Conference" -} - -@INPROCEEDINGS{branlard:2015ad, - title = "A vortex based BEM-like algorithm accounting for wake rotation", - author = "E. Branlard and N. Troldborg and M. Gaunaa", - year = "2015", - booktitle = "Proceedings of EWEA Offshore 2015 Conference" -} - - - -@misc{gaunaa:2015, - title = {Modelling the influence of wind shear using a simple vortex rotor model}, - author = {M. Gaunaa and N. Troldborg and E. Branlard}, - journal = {Wind Energy}, - year={2015}, - note={(To appear in \textit{Wind Energy})} -} - -@misc{branlard:vortexbookOnline, - title = {{Vortex theory and vortex methods for wind energy. Annex to PhD thesis}}, - author = {E. Branlard}, - year={2015}, - note={(Avaible upon request)}, - howpublished={\url{https://github.com/elmanuelito/vortex-theory-and-methods-for-wind-energy}} -} - -@PHDthesis{branlard:2015phdthesis, - title = {Analysis of wind turbine aerodynamics and aeroelasticity using vortex-based methods}, - author = {E. Branlard}, - year={2015}, - institution ={Technical University of Denmark (DTU), Wind Energy Department}, - school ={Technical University of Denmark (DTU), Wind Energy Department} -} - -@book{branlard:book, - author = {E. Branlard}, - title = {Wind Turbine Aerodynamics and Vorticity-Based Methods}, - year = {2017}, - publisher= {Springer} -} - - -% ------------------------------------------------------------------------------} -% --- My Online ressources -% --------------------------------------------------------------------------------{ -@misc{YAMSgithub, - author={E. Branlard}, - title={YAMS GitHub repository \url{http://github.com/ebranlard/YAMS/}}, -} - - -% --------------------------------------------------------------------------------} -% --- AOA ANGLE OF ATTACK stuff -% --------------------------------------------------------------------------------{ -@CONFERENCE{guntur:2012, - author = {S. Guntur and N. N. S{\o}rensen}, - title = {An evaluation of several methods of determining the local angle of attack on wind turbine blades}, - booktitle = {Science of Making torque from the Wind, Oldenburg}, - pages={1-6}, - year = {2012}, -} -@CONFERENCE{troldborg:2013ewea, - author = {Niels Troldborg and Christian Bak and Helge A Madsen and Srinivas Guntur and Niels S{\o}rensen and Frederik Zahle}, - title = {EXPERIMENTAL AND NUMERICAL INVESTIGATION OF {3D} AIRFOIL CHARACTERISTICS ON {MW} WIND TURBINE}, - booktitle = {European Wind Energy Conference, Vienna}, - year = {2013}, -} - -@INPROCEEDINGS{bak:2011ewea, - author = {C. Bak and N. Troldborg and H. Madsen}, - title = {DAN-AERO MW: Measured airoil characterisics for a {MW} rotor in atmospheric conditions}, - booktitle = {Europen Wind Energy Conference}, - year = {2011}, -} - -@inbook{shen:2006, -title = "Determination of Angle of Attack (AOA) for Rotating Blades", -publisher = "Springer-Verlag", -author = "Shen, {W. Z.} and Hansen, {M. O. L.} and S{\o}rensen, {J. N.}", -year = "2006", -isbn = "978-3-540-33865-9", -pages = "205-209", -booktitle = "Wind Energy", -} - -@techreport{tani:1934, - author = {I. Tani}, - title = {A simple method of calculating the induced velocity of a monoplane wing - Rep. No. 111 (vol. 9,3)}, - institution = {Aero. Res. Inst., Tokyo Imperial University}, - year = {1934}, - otherinfo = {} -} - -@INPROCEEDINGS{mukherjee:2003, - author = {R. Mukherjee and A. Gopalarathnam}, - title = {An iterative decambering approach for post-stall prediction of wing characteristics using section data}, - year = {2003}, - booktitle = {AIAA 2003-1097}, - otherinfo = {} -} - -@article{nsorensen:2000, -title = "Evaluation of 3D effects from 3D CFD computations", -author = "S{\o}rensen, {Niels N.}", -year = "2000", -journal = "{IEA} Joint Action Committee on Aerodynamics {Annex IV} Aero Experts meeting, Boulder, CO (US), 4-5 Dec", -} - - - -@article{taylor:1926, - author={G. I. Taylor}, - title={Note on the connection between the lift on an Aerofoil in a wind and the circulation round it}, - year={1926}, - journal={Phil. Trans. R. Soc. Lond. A.}, - number={225}, - pages={238-245}, - doi={10.1098/rsta.1926.0005} -} -@article{bryant:1926, - author={L. W. Bryant, D. H. Williams }, - title={An Investigation of the Flow of Air around an Aerofoil of Infinite Span}, - journal={Phil. Trans. R. Soc. Lond. A.}, - year={1926}, - number={225}, - pages={199-237}, - doi={10.1098/rsta.1926.0005} -} - - -% --------------------------------------------------------------------------------} -% --- MATHS - NUMERICAL METHODS -% --------------------------------------------------------------------------------{ -@BOOK{wastonbessel, - author = {G.N. Watson}, - title = {A treatise on the theory of Bessel functions}, - publisher = {Cambridge at the University Press}, - year = {1922} -} - -@MISC{dlmf, - author = {NIST}, - title={Digital Library of Mathematical Functions from http://dlmf.nist.gov/ - Release 2010-05-07}, - publisher={National Institute of Standards and Technology} -} -@BOOK{nist, - title={NIST Handbook of Mathematical functions}, - author = {F.W.J. Olver and D.W. Lozier and R.F. Boisvert and C.W. Clark}, - publisher = {Cambrideg University Press}, - year = {2010}, -} -@BOOK{abramovitz, - author = {M. Abramowitz and I.A. Stegun}, - title = { Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables}, - publisher = {Dover, New York}, - year = {1964} -} -@BOOK{peirce:1899, - title = {A Short table of integrals}, - author = {B.O. Peirce}, - publisher = {Ginn \& Company, Boston, U.S.A.}, - year = {1899}, - edition = {{R}evised} -} - -@BOOK{calcultensoriel, - author = {P. Pern\`es}, - title = {Introduction \`a la m\'ecanique des milieux d\'eformables - El\'ements de calcul tensoriel}, - publisher = {Cemagref Editions, Engees}, - year = {2003} -} -@BOOK{king:2009, - author = {F.W. Kink}, - title = {Hilbert Transforms}, - publisher = {Cambridge University Press}, - year = {2009}, - otherinfo = {} -} - -@BOOK{euler:maths, - author = {L. Euler}, - title = {Institutionum Calculi Intergralis - Volume 1-3}, - publisher = {Impenfis Academiae Imperialis Scientiarum}, - year = {1792} -} - -@ARTICLE{runge:1895, - author = {C. Runge}, - title = {Ueber die numerische Aufl\"osung von Differentialgleichungen}, - journal = {Math. Ann.}, - year = {1895}, - volume = {46}, - pages = {167-178} -} - -@ARTICLE{kutta:1901, - author = {W. Kutta}, - title = {Beitrag zur n{\"a}herungsweisen Integration totaler Differentialgleichungen}, - journal = {Zeitschr. f{\"u}r Math. u. Phys.}, - year = {1901}, - volume = {46}, - pages = {453} -} - -@BOOK{adamsbashforth, - author = {F. Bashforth and J.C. Adams}, - title = {An Attempt to Test the Theories of Capillary Action by Comparing the Theoretical and Measured Forms of Drops of Fluid, with an Explanation of the Method of Integration Employed in Constructing the Tables which Give the Theoretical Forms of Such Drops}, - publisher = {Cambridge Univestiy Press}, - year = {1883} -} - - - -@BOOK{butcher:ode, - author = {J.C. Butcher}, - title = {Numerical Methods for Ordinary Differential Equations, Second Edition}, - publisher = {Jogn Wiley \& Sons}, - year = {2008} -} -@BOOK{hairer:ode, - author = {E. Hairer and S.P. N{\o}rsett and G. Wanner}, - title = {Solving Ordinary Differential Equations I, Corrected 2nd Edition}, - publisher = {Springer}, - year = {2008} -} - -@book{strang:bookCSE, - title = {Computational science and engineering}, - publisher = {Wellesley-Cambridge Press}, - author = {Strang, Gilbert.}, - pages = {716 s}, - year = {2007}, - isbn = {9780961408817} -} - -@book{riley:2005:book, - title={Mathematical Methods for Physics and Engineering: A Comprehensive Guide}, - author={Riley, K.F. and Hobson, P. and Bence, S.J.}, - isbn={9781139450997}, - year={2006}, - publisher={Cambridge University Press} -} -@MISC{wikidel, - author={Wikipedia}, - title={Del in cylindrical and polar coordinates}, - year={2015}, - howpublished = {\url{http://en.wikipedia.org/wiki/Del_in_cylindrical_and_spherical_coordinates}}, -} - -@Article{carlson:1979, -author="B.C. Carlson", -title="Computing elliptic integrals by duplication", -journal="Numerische Mathematik", -year="1979", -volume="33", -number="1", -pages="1--16", -issn="0945-3245", -doi="10.1007/BF01396491", -url="http://dx.doi.org/10.1007/BF01396491" -} - -@book{chapra2010, - author = "Chapra, S.C. and Canale, R.P. ", - title = "Numerical Methods for Engineers", - year = "2010", - publisher = "McGraw-Hill Science/Engineering/Mat" -} - -% --------------------------------------------------------------------------------} -% --- MECANICS - DYNAMICS - AEROELASTICITY - BOOKS -% --------------------------------------------------------------------------------{ - - -@book{nikravesh:book, - title={Computer-aided analysis of mechanical systems}, - author={Nikravesh, P.E.}, - isbn={9780131642201}, - year={1988}, - publisher={Prentice-Hall} -} - -@book{shabana:book, - title={Dynamics of Multibody Systems}, - author={Shabana, A.A.}, - isbn={9781107042650}, - series={Dynamics of Multibody Systems}, - year={2013}, - publisher={Cambridge University Press} -} - -@book{huston:book, - title={Multibody Dynamics}, - author={Huston, R.L.}, - year={1990}, - publisher={Butterworth-Heinemann}, - isbn = {0409900419, 9780409900415} -} - -@book{handbookrobotics, - title={Springer Handbook of Robotics}, - author={Siciliano, B. and Khatib, O.}, - isbn={9783319325521}, - series={Springer Handbooks}, - year={2016}, - publisher={Springer International Publishing} -} - -@book{amirouche:book, - title = {Fundamentals of multibody dynamics: Theory and applications}, - author = {Amirouche, Farid}, - language = {eng}, - publisher = {Birkhauser Boston}, - pages = {1-684}, - year = {2006}, - isbn = {0817642366, 9780817642365}, - abstract = {Because of its versatility in analyzing a broad range of applications, multibody dynamics has grown in the past two decades to be an important tool for designing, prototyping, and simulating complex articulated mechanical systems. This textbook-a result of the author's many years of research and teaching-brings together diverse concepts of dynamics, combining the efforts of many researchers in the field of mechanics. Bridging the gap between dynamics and engineering applications such as microrobotics, virtual reality simulation of interactive mechanical systems, nanomechanics, flexible biosystems, crash simulation, and biomechanics, the book puts into perspective the importance of modeling in the dynamic simulation and solution of problems in these fields. To help engineering students and practicing engineers understand the rigid-body dynamics concepts needed for the book, the author presents a compiled overview of particle dynamics and Newton's second law of motion in the first chapter. A particular strength of the work is its use of matrices to generate kinematic coefficients associated with the formulation of the governing equations of motion. Additional features of the book include: * numerous worked examples at the end of each section * introduction of boundary-element methods (BEM) in the description of flexible systems * up-to-date solution techniques for rigid and flexible multibody dynamics using finite- element methods (FEM) * inclusion of MATLAB-based simulations and graphical solutions * in-depth presentation of constrained systems * presentation of the general form of equations of motion ready for computer implementation * two unique chapters on stability and linearization of the equations of motion Junior/senior undergraduates and first-year graduate engineering students taking a course in dynamics, physics, control, robotics, or biomechanics will find this a useful book with a strong computer orientation towards the subject. The work may also be used as a slf-study resource or research reference for practitioners in the above-mentioned fields. © 2006 Birkhäuser Boston.}, - doi = {10.1007/b137682}, -} - - -@book{boresi:book, - title = {Elasticity in engineering mechanics}, - year = {2000}, - isbn = {0471316148}, - author = {Boresi, A.P. and Lynn, P.P.} -} - -@book{pian:book, - title={Statics of Deformable Solids}, - author={T. H.H. Pian and R. L. Bisplinghoff and J. W. Mar}, - isbn={10 0486789934}, - year = 1965, - publisher={Dover}} -} - -@book{bisplinghoff:bookprinciples, - title={Principles of Aeroelasticity}, - author={Bisplinghoff, R.L. and Ashley, H.}, - isbn={9780486495002}, - lccn={2002019479}, - series={Dover Books on Engineering Series}, - year={1962}, - publisher={Dover Publications} -} - - -@BOOK{bower:book, - author = {A. F. Bower}, - title = {Applied Mechanics of Solid}, - publisher = {CRC PRess,Freely available at http://solidmechanics.org/}, - year = {2009} -} - -@book{roarksformulas, - title={Roark's Formulas for Stress and Strain}, - author={Young, W.C. and Budynas, R.G.}, - isbn={9780071501811}, - series={McGraw Hill professional}, - year={2001}, - publisher={McGraw-Hill Education} -} - -@book{bielawa:2006:book, - title={Rotary wing structural dynamics and aeroelasticity}, - author={Bielawa, R.L.}, - isbn={9781563476983}, - lccn={20067635}, - series={AIAA education series}, - year={2006}, - publisher={American Institute of Aeronautics and Astronautics} -} -@book{bisplinghoff:1996:book, - title={Aeroelasticity}, - author={Bisplinghoff, R.L. and Ashley, H. and Halfman, R.L.}, - isbn={9780486691893}, - lccn={96005412}, - series={Dover Books on Aeronautical Engineering Series}, - year={1996}, - publisher={Dover Publications} -} -@book{bisplinghoff:2013:book, - title={Principles of Aeroelasticity}, - author={Bisplinghoff, R.L. and Ashley, H.}, - isbn={9780486783161}, - series={Dover Books on Engineering}, - year={2013}, - publisher={Dover Publications} -} - -@misc{dymore, - title={Dymore manual}, - author={Bauchau}, -} - -% ------------------------------------------------------------------------------} -% --- DYNAMICS - ARTICLES -% --------------------------------------------------------------------------------{ -@article{kane:1965, - title = {On the Derivation of Equations of Motion}, - language = {eng}, - journal = {Journal of the Society for Industrial and Applied Mathematics}, - volume = {13}, - number = {2}, - pages = {487-492}, - year = {1965}, - issn = {21683484, 03684245}, - doi = {10.1137/0113030}, - author = {Kane, T. R. and Wang, C. F.} -} - -@article{book1984, - author = {W. J. Book}, - title ={Recursive Lagrangian Dynamics of Flexible Manipulator Arms}, - journal = {The International Journal of Robotics Research}, - volume = {3}, - number = {3}, - pages = {87-101}, - year = {1984}, - doi = {10.1177/027836498400300305} -} - - -@Inbook{huston:1994, - author="Huston, R. L. and Wang, Y.", - editor="Seabra Pereira, Manuel F. O. and Ambr{\'o}sio, Jorge A. C.", - title="Flexibility Effects in Multibody Systems", - bookTitle="Computer-Aided Analysis of Rigid and Flexible Mechanical Systems", - year="1994", - publisher="Springer Netherlands", - address="Dordrecht", - pages="351--376", - ISBN={978-94-011-1166-9} -} -@article{kane:1987, - author = {KANE, T. R. and RYAN, R. and BANERJEE, A. K.}, - title = {Dynamics of a cantilever beam attached to a moving base}, - language = {eng}, - journal = {Journal of Guidance, Control, and Dynamics}, - volume = {10}, - number = {2}, - pages = {139-151}, - year = {1987}, - issn = {15333884, 07315090}, - doi = {10.2514/3.20195} -} -@article{shabana:1990, - title = {Dynamics of Flexible Bodies Using Generalized Newton-Euler Equations}, - language = {eng}, - journal = {Journal of Dynamic Systems, Measurement, and Control}, - volume = {112}, - number = {3}, - pages = {496}, - year = {1990}, - issn = {15289028, 00220434}, - doi = {10.1115/1.2896170}, - author = {Shabana, A. A.} -} - -@article{nikravesh:1990, -title = "Systematic reduction of multibody equations of motion to a minimal set", -journal = "International Journal of Non-Linear Mechanics", -volume = "25", -number = "2", -pages = "143 - 151", -year = "1990", -issn = "0020-7462", -doi = "https://doi.org/10.1016/0020-7462(90)90046-C", -url = "http://www.sciencedirect.com/science/article/pii/002074629090046C", -author = "Parviz E. Nikravesh" -} -@article{nikravesh:1993, - author = {Nikravesh PE, Gim G. }, - title = {Systematic Construction of the Equations of Motion for Multibody Systems Containing Closed Kinematic Loops}, - journal={ASME. J. Mech. Des.}, - year ={1993}, - volume ={115}, - number ={1}, - pages ={143-149}, - doi={10.1115/1.2919310} -} -% ------------------------------------------------------------------------------} -% --- GEOMETRICAL STIFFENING -% ------------------------------------------------------------------------------{ -@article{berzeri:2002, - title = {Study of the centrifugal stiffening effect using the finite element absolute nodal coordinate formulation}, - language = {eng}, - publisher = {SPRINGER}, - journal = {Multibody System Dynamics}, - volume = {7}, - number = {4}, - pages = {357-387}, - year = {2002}, - issn = {1573272x, 13845640}, - abstract = {The finite element absolute nodal coordinate formulation is used in this investigation to study the centrifugal stiffening effect on rotating two-dimensional beams. It is demonstrated that the geometric stiffening effect can be automatically accounted for in the above mentioned finite element formulation by using an expression for the elastic forces obtained with a general continuum mechanics approach. The Hill equation that governs the vibration of the rotating beam is obtained in terms of a set of generalized coordinates that describe the beam displacements and slopes. Under the assumption of small deformation, the Hill equation is linearized, and the complete solution is obtained and used to demonstrate analytically that such a solution does not exhibit instabilities as the angular velocity of the beam increases. The results obtained using this finite element procedure are compared with the results reported in the literature.}, - doi = {10.1023/A:1015567829908}, - author = {Berzeri, M and Shabana, AA} -} -@article{wallrapp:1991, - title = {REPRESENTATION OF GEOMETRIC STIFFENING IN MULTIBODY SYSTEM SIMULATION}, - language = {eng}, - publisher = {JOHN WILEY & SONS LTD}, - journal = {International Journal for Numerical Methods in Engineering}, - volume = {32}, - number = {8}, - pages = {1833-1850}, - year = {1991}, - issn = {10970207, 00295981}, - abstract = {Geometric, rotational or dynamic stiffening is a well and long known phenomenon in the analysis of flexible bodies. In multibody dynamics the effect has attracted attention only recently. The objective of this paper is to contribute to the understanding of the modelling of geometric stiffening in multibody system simulation. Today's methods for modelling the effect assume that the (applied) stresses in a flexible system body are zero in its reference configuration, in which it performs large overall motions. The corresponding inertial loads are shown to be balanced by constraint stresses. This can be seen easily when formulating the system equations of motion for non-zero reference stresses. As a result one obtains an efficient alternative to compute the geometric stiffening terms. The method increases the generality of flexible body models for multibody system simulation.}, - doi = {10.1002/nme.1620320818, 10.1002/(ISSN)1097-0207}, - author = {WALLRAPP, O and SCHWERTASSEK, R} -} - -% ------------------------------------------------------------------------------} -% --- Craig Bampton -% --------------------------------------------------------------------------------{ -@TECHREPORT{dnvgl:CB, - author = {{DNV GL}}, - title = {IMPLEMENTING AN INTERFACE BETWEEN BLADED AND SESAM - Verification report of Sesam's Bladed interface}, - institution = {Ris{\o}-DTU}, - year = {2017}, - number={2016-0866, Rev. 1} -} - author={R. Damiani, F. Wendt, W. Musial, Z. Finucane, L. Hulliger, S. Chilka, D. Dolan,}, -@TECHREPORT{damiani:guyan, - title = {Fully vs. Sequentially Coupled Loads Analysis of Offshore Wind Turbines}, - author={R. Damiani and F. Wendt and W. Musial and Z. Finucane and L. Hulliger and S. Chilka and D. Dolan and J. Cushing and D. {O'Connell} and S. Falk}, - institution={NREL}, - number={68368}, - year={2013} -} - - - - - -% --------------------------------------------------------------------------------} -% --- PHYSICS PURE -% --------------------------------------------------------------------------------{ - -@book{einstein:1956, -author = {Einstein, A.}, -title = {{Investigations on the theory of brownian movement}}, -publisher={Dover Publications, Inc}, -year={1956}, -isbn={486-60304-0} -} - -@book{crank:book, - title={The Mathematics of Diffusion}, - author={Crank, J.}, - isbn={9780198534112}, - lccn={75318921}, - series={Oxford science publications}, - year={1979}, - publisher={Clarendon Press} -} - - -@book{davidson:2004:book, - title={Turbulence: An Introduction for Scientists and Engineers}, - author={Davidson, P.A.}, - isbn={9780191589850}, - year={2004}, - publisher={OUP Oxford} -} - -% --------------------------------------------------------------------------------} -% --- ELECTROMAGNETISM -% --------------------------------------------------------------------------------{ -@TECHREPORT{pearson:lecturenotes, - author = {J. Pearson}, - title = {Electrodynamics}, - institution = {University of Manchester}, - year = {2008}, -} - -@TECHREPORT{kambe:fluidmaxwell, - author = {On Fluid Maxwell equations}, - title = {T. Kambe}, - institution = {University of Tokyo}, - year = {2010}, - otherinfo = {} -} -@MISC{mccabe:electrofluid, - author={G. McCabe}, - title = {Electromagnetism, fluid mechanics, and the mathematical universe}, - year={2015}, - note={\url{http://mccabism.blogspot.dk/2012/03/electromagnetism-fluid-mechanics-and.html}} -} - -@MISC{rousseaux:elctrofluid, - author={G. Rousseaux and A. Domps}, - title={Remarques supplémentaires sur l'approximation des régimes quasi-stationnaires en électromagnétisme}, - institution={Union des professeurs de physique et de chimie}, - volume={98}, - year={2004} -} - - - -% --------------------------------------------------------------------------------} -% --- FLUID MECHANICS - REFERENCE BOOKS -% --------------------------------------------------------------------------------{ -@ARTICLE{bonnetportance, - author = {A. Bonnet}, - title = {La Portance ou comment tuer un mythe}, - journal = {I.S.A.E. - SUPAERO}, - year = {2005}, - otherinfo = {}, - note={(in French)} -} -@BOOK{lamb:1916:book, - author = {H. Lamb}, - title = {Hydrodynamics}, - publisher = {Cambridge University Press, Fourth Edition}, - year = {1916}, -} - -@BOOK{lamb:1932:book, - author = {H. Lamb}, - title = {Hydrodynamics}, - publisher = {Cambridge University Press, Sixth Edition}, - year = {1932}, -} - -@BOOK{batchelor:book, - author = {G. K. Batchelor}, - title = {An introduction to fluid dynamics}, - publisher = {Cambridge University Press}, - year = {1967}, -} - - -@BOOK{twaites:1960:book, - author = {B. Twaites}, - title = {Incompressible Aerodynamics}, - publisher = {Oxford University Press}, - year = {1960}, - otherinfo = {} -} - -@BOOK{ashley:1965, - author = {H Ashley and M. Landahl}, - title = {Aerodynamics of Wings and Bodies}, - publisher = {Dover Publications, reprint 1985}, - year = {1965}, - otherinfo = {} -} - - -@book{tennekes:1972:book, - title={A First Course in Turbulence}, - author={Tennekes, H. and Lumley, J.L.}, - isbn={9780262200196}, - lccn={lc77165072}, - year={1972}, - publisher={Pe Men Book Company} -} - -@BOOK{vandyke:1975:book, - author = {M. Van Dyke}, - title = {Perturbation Methods in Fluid Mechanics}, - publisher = {Parabolic Press}, - year = {1975} -} -@BOOK{newman:1977:book, - author = {J.N. Newman}, - publisher = {M.I.T}, - title = {Marine hydrodynamics}, - year = {1977} -} - -@TECHREPORT{rieutord:1985, - author = {R. Rieutord}, - title = {Mecanique des fluides}, - institution = {INSA de Lyon}, - year = {1985}, - otherinfo = {} -} - -@book{bonnetluneau, -author = {A. Bonnet and J. Luneau}, -title = {Aerodynamique: Theorie de la dynamique des fluides}, -year = {1989}, -publisher= {Cepades Edition - SUPAERO}, -note={(in French)} -} - -@book{viscousfluidflow, -author = {F.M. White}, -title = {Viscous fluid flow - Third Edition}, -year = {1991}, -publisher= {Mc Graw Hill} -} -@BOOK{phillipps:2004, - author = {W.F. Phillipps}, - title = {Mechanics of Flight}, - publisher = {John Wiley and Sons}, - year = {2004} -} - -@book{acheson:1990:book, - title={Elementary Fluid Dynamics}, - author={Acheson, D.J.}, - isbn={9780198596790}, - lccn={89022947}, - series={Oxford Applied Mathematics and Computing Science Series}, - year={1990}, - publisher={Clarendon Press} -} -@BOOK{saffman:book, - author = {P.G. Saffman}, - title = {Vortex Dynamics}, - publisher = {Cambridge University Press}, - year = {1992}, -} - -@BOOK{chorin:1992:book, - author = {A.J. Chorin and J.E. Marsden}, - title = {A mathematical introduction to fluid mechanics}, - publisher = {Springer}, - year = {1992}, -} -@book{fay:1994:book, - title={Introduction to Fluid Mechanics}, - author={Fay, J.A.}, - isbn={9780262061650}, - lccn={lc93034567}, - year={1994}, - publisher={MIT Press} -} -@ARTICLE{drela:1998, - author = {M. Drela}, - title = {Assorted views on teaching of aerodynamics}, - journal = {AIAA Paper 98-2792}, - year = {1998} -} - -@TECHREPORT{kerwin:lecturenotes, - author = {J. Kerwin}, - title = {Lecture Notes Hydrofoil and propellers}, - institution = {M.I.T.}, - year = {2000} -} -@TECHREPORT{mcintyre:lecturenotes, - author = {M. E. McIntyre}, - title = {IB lecture notes on fluid dynamics}, - institution = {University of Cambridge}, - year = {2003}, - otherinfo = {\url{http://www.atm.damtp.cam.ac.uk/people/mem/FLUIDS-IB/}} -} -@TECHREPORT{skinner:lecturenotes, - author = {D. Skinner}, - title = {Mathematical Methods}, - institution = {University of Cambridge}, - year = {2014}, - otherinfo = {\url{http://www.atm.damtp.cam.ac.uk/user/dbs26/}} -} -@BOOK{anderson:2001:book, - author = {J.D. Anderson}, - title = {Fundamentals of aerodynamics - Third Edition}, - publisher = {Mc Graw Hill}, - year = {2001}, -} -@book{pozrikidis:2001:book, - title={Introduction to Theoretical and Computational Fluid Dynamics}, - author={Pozrikidis, C.}, - isbn={9780195093209}, - lccn={96026420}, - year={1997}, - publisher={OUP USA} -} -@BOOK{appliedaero, - author = {I. Kroo et al.}, - title = {Applied aerodynamics: a digital textbook}, - publisher = {Desktop Aeronautics}, - year = {1996-2007}, - otherinfo = {Available online at http://www.desktop.aero/appliedaero/} -} - -@BOOK{huerre:2006, - author = {P. Huerre}, - publisher = {Ecole Polytechnique - France}, - title = {M\'ecanique des Fluides - Tome 1}, - year = {2006}, - note={(in French)} -} -@book{pernes:book, - title={M{\'e}canique des milieux continus d{\'e}formables: application {\`a} la m{\'e}canique des liquides parfaits et des liquides newtoniens}, - author={Pern{\`e}s, P.}, - isbn={9782853626132}, - url={https://books.google.dk/books?id=PjyO9Je34LIC}, - year={2003}, - publisher={Cemagref} -} - - -@book{White:2006, -author = {F.M. White}, -title = {Viscous fluid flow, Third Edition}, -publisher = {McGraw Hill International Edition}, -year = 2006, -address = {New York}, -} - - -@BOOK{bertin:2009:book, - author = {J.J. Bertin and R.M. Cummings}, - publisher = {Pearson Prentice Hall}, - title = {Aerodynamics for engineers - 5th Edition}, - year = {2009} -} -@book{drela:2014:book, - title={Flight Vehicle Aerodynamics}, - author={Drela, M.}, - isbn={9780262319935}, - year={2014}, - publisher={MIT Press} -} - -@book{milnethomson:hydrodynamics, - title={Theoretical Hydrodynamics}, - author={Milne-Thomson, L.M.}, - isbn={9780486318691}, - series={Dover Books on Physics}, - year={1968}, - publisher={Dover Publications} -} - -@book{milnethomson:aerodynamics, - title={Theoretical Aerodynamics}, - author={Milne-Thomson, L.M.}, - isbn={9780486619804}, - lccn={lc73085109}, - series={Dover Books on Aeronautical Engineering Series}, - year={1966}, - publisher={Dover Publications} -} - -% --------------------------------------------------------------------------------} -% --- POTENTIAL FLOWS -% --------------------------------------------------------------------------------{ -@article{costi:1974, - title = {Incompressible, inviscid, symmetrical flow about ellipsoids - comparison of an approximate theory with exact results}, - author = {Costi, S. and Portnoy, H.}, - journal = {Technion Israel Inst Technol TAE Rep}, - number = {233}, - year = {1974}, - issn = {00729302, 04383893}, - abstract = {In an earlier report, a first-order theory for thin lifting wings was developed which is uniformly valid near the rounded wing-leading-edges and tips and is also uniformly valid near the effectively rounded edges of the wing wake (assuming an effective displacement boundary to the wake). In this report the method is applied to find the flow on the surface of a thin ellipsoid, without wake, at zero angle of attack and yaw and the results are compared with those obtained from the classical exact potential theory for ellipsoids.} -} -@TECHREPORT{zahm:1979, - author = {A. F. Zahm}, - title = {Flow and drag formulas for simple quadrics}, - institution = {{NACA} Report No. 253}, - year = {1979}, -} -@PHDTHESIS{clarke:2009:phdthesis, - author = {D. B. Clarke}, - title = {Experimental and computational investigation of flow about low aspect ratio ellipsoids at transcritical Reynolds numbers}, - school = {University of Tasmania}, - year = {2009} -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX/VORTICITY - REFERENCE BOOKS -% --------------------------------------------------------------------------------{ -@book{majda:book, -author = {A. J. Majda and Andrea. L. Bertozzi}, -title = {{Vorticity and Incompressible Flow}}, -publisher={Cambridge texts in applied mathematics}, -year={2002}, -} - -@book{wu:book, -author = {Wu, J.-Z. and Ma, H.-Y. and Zhou, M.D.}, -booktitle = {New York}, -isbn = {9783540290278}, -publisher = {Springer}, -title = {{Vorticity and Vortex Dynamics}}, -year = {2005} -} - -@book{hill:book, - author = {M. J. M. Hill}, - booktitle = {On a spherical vortex}, - publisher = {the Royal Society}, - title = {On a spherical vortex}, - year = {1894} -} -@article{amick:1986, - title = {THE UNIQUENESS OF HILL SPHERICAL VORTEX}, - language = {English}, - publisher = {SPRINGER VERLAG}, - author = {Amick, CJ and Fraenkel, LE}, - journal = {Archive for Rational Mechanics and Analysis}, - volume = {92}, - number = {2}, - pages = {91-119}, - year = {1986}, - issn = {00039527, 14320673}, - doi = {10.1007/BF00251252} -} -@article{norbury:1972, - title = {A steady vortex ring close to Hill's spherical vortex}, - author = {Norbury, J.}, - journal = {Mathematical Proceedings of the Cambridge Philosophical Society}, - volume = {72}, - number = {02}, - pages = {253}, - year = {1972}, - issn = {03050041, 14698064}, - doi = {10.1017/S0305004100047083} -} -@article{wan:1988, - title = {VARIATIONAL-PRINCIPLES FOR HILL SPHERICAL VORTEX AND NEARLY SPHERICAL VORTICES}, - language = {English}, - publisher = {AMER MATHEMATICAL SOC}, - author = {WAN, YH}, - journal = {TRANSACTIONS OF THE AMERICAN MATHEMATICAL SOCIETY}, - volume = {308}, - number = {1}, - pages = {299-312}, - year = {1988}, - issn = {00029947, 10886850} -} - -@article{moffatt:1969, -author = {Moffatt,H. K.}, -title = {The degree of knottedness of tangled vortex lines}, -journal = {Journal of Fluid Mechanics}, -volume = {null}, -issue = {01}, -month = {1}, -year = {1969}, -issn = {1469-7645}, -pages = {117--129}, -numpages = {13}, -doi = {10.1017/S0022112069000991}, -URL = {http://journals.cambridge.org/article_S0022112069000991}, -} - -@article{moffatt:1978, - title = {Response of Hills spherical vortex to a small axisymmetric disturbance}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {Moffatt, HK and Moore, DW}, - journal = {Journal Of Fluid Mechanics}, - volume = {87}, - number = {AUG}, - pages = {749-760}, - year = {1978}, - issn = {00221120, 14697645} -} - -@article{batishch:1971, - title = {DIFFUSION OF HILLS SPHERICAL VORTEX UNDER CONDITIONS OF VANISHING VISCOSITY}, - language = {Russian}, - publisher = {MEZHDUNARODNAYA KNIGA}, - author = {BATISHCH.VA and SRUBSHCH.LS}, - journal = {DOKLADY AKADEMII NAUK SSSR}, - volume = {197}, - number = {5}, - pages = {1038}, - year = {1971}, - issn = {00023264} -} -@article{moffatt:1986, - title = {On the existence of localized rotational disturbances which propagate without change of structure in an inviscid fluid}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {Moffatt, HK}, - journal = {Journal Of Fluid Mechanics}, - volume = {173}, - pages = {289-302}, - year = {1986}, - issn = {00221120, 14697645} -} - - -@article{hunt:1988, - title = {Eddies, streams, and convergence zones in turbulent flows}, - author = {J. C. R. Hunt and A. A. Wray and P. Moin}, - journal = {CASI}, - year = {1988}, - abstract = {Recent studies of turbulent shear flows have shown that many of their important kinematical and dynamical properties can be more clearly understood by describing the flows in terms of individual events or streamline patterns. These events or flow regions are studied because they are associated with relatively large contributions to certain average properties of the flow, for example kinetic energy, Reynolds stress, or to particular processes in the flow, such as mixing and chemical reactions, which may be concentrated at locations where streamlines converge for fast chemical reactions (referred to as convergence or C regions), or in recirculating eddying regions for slow chemical reactions. The aim of this project was to use the numerical simulations to develop suitable criteria for defining these eddying or vortical zones. The C and streaming (S) zones were defined in order to define the whole flow field. It is concluded that homogeneous and sheared turbulent flow fields are made up of characteristic flow zones: eddy, C, and S zones. A set of objective criteria were found which describe regions in which the streamlines circulate, converge or diverge, and form high streams of high velocity flow.} -} - -@article{jeong:1995, - title = {ON THE IDENTIFICATION OF A VORTEX}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {Jeong, J. and Hussain, F.}, - journal = {Journal Of Fluid Mechanics}, - volume = {285}, - pages = {69-94}, - year = {1995}, - issn = {00221120, 14697645}, - abstract = {Considerable confusion surrounds the longstanding question of what constitutes a vortex, especially in a turbulent how. This question, frequently misunderstood as academic, has recently acquired particular significance since coherent structures (CS) in turbulent flows are now commonly regarded as vortices. An objective definition of a vortex should permit the use of vortex dynamics concepts to educe CS, to explain formation and evolutionary dynamics of CS, to explore the role of CS in turbulence phenomena, and to develop viable turbulence models and control strategies for turbulence phenomena. We propose a definition of a vortex in an incompressible flow in terms of the eigenvalues of the symmetric tenser S-2+Omega(2); here S and Omega are respectively the symmetric and antisymmetric parts of the velocity gradient tenser del u. This definition captures the pressure minimum in a plane perpendicular to the vortex axis at high Reynolds numbers, and also accurately defines vortex cores at low Reynolds numbers, unlike a pressure-minimum criterion. We compare our definition with prior schemes/definitions using exact and numerical solutions of the Euler and Navier-Stokes equations for a variety of laminar and turbulent flows. In contrast to definitions based on the positive second invariant of del u or the complex eigenvalues of del u, our definition accurately identifies the vortex core in flows where the vortex geometry is intuitively clear.} -} -@article{moore:1998, - title = {On steady compressible flows with compact vorticity; the compressible Hill's spherical vortex}, - language = {eng}, - author = {Moore, D. W. and Pullin, D. I.}, - journal = {Journal of Fluid Mechanics, J. Fluid Mech}, - volume = {374}, - pages = {285-303}, - year = {1998}, - issn = {00221120} -} - -@book{akhmetov:book, - title = {Vortex rings}, - language = {English}, - publisher = {Springer}, - author = {D. G. Akhmetov}, - pages = {1 vol. (X-149 p.)}, - year = {2009}, - isbn = {3642050158, 9783642050152} -} - - -@book{alekseenko:2007:book, - title={Theory of Concentrated Vortices: An Introduction}, - author={Alekseenko, S.V. and Kuibin, P.A. and Okulov, V.L.}, - isbn={9783540733768}, - year={2007}, - publisher={Springer London, Limited} -} - - - - - - - - - - - - - -} -% editor = {Stein, Erwin. and Borst, R. de. and Hughes, Thomas J. R.}, -@INBOOK{winckelmans:bookchapter, - author={G. S. Winckelmans} , - title={Encyclopedia of computational mechanics - Volume 1. Chapter 5: Vortex Methods} , - chapter = {5}, - publisher= {J. Wiley \& Sons, New-York, N.Y.}, - year = {2004}, - isbn = {0470846992, 9780470846995}, - abstract = {Vol. 1. Fundamentals -- Vol. 2. Solids and structures -- Vol. 3. Fluids} -} - -@book{stein:2004a, - title = {Encyclopedia of computational mechanics}, - pages = {3 bd}, - editor = {Stein, Erwin. and Borst, R. de. and Hughes, Thomas J. R.}, - title={Encyclopedia of computational mechanics}, - chapter = {5}, - publisher= {J. Wiley \& Sons, New-York, N.Y.}, - year = {2004}, - isbn = {0470846992, 9780470846995}, - abstract = {Vol. 1. Fundamentals -- Vol. 2. Solids and structures -- Vol. 3. Fluids} -} -@article{haller:2005, - title = {An objective definition of a vortex}, - language = {English}, - publisher = {Cambridge University Press}, - author = {Haller, G.}, - journal = {Journal of Fluid Mechanics}, - volume = {525}, - pages = {1-26}, - year = {2005}, - issn = {00221120, 14697645}, - abstract = {The most widely used definitions of a vortex are not objective: they identify different structures as vortices in frames that rotate relative to each other. Yet a frame-independent vortex definition is essential for rotating flows and for flows with interacting vortices. Here we define a vortex as a set of fluid trajectories along which the strain acceleration tensor is indefinite over directions of zero strain. Physically, this objective criterion identifies vortices as material tubes in which material elements do not align with directions suggested by the strain eigenvectors. We show using examples how this vortex criterion outperforms earlier frame-dependent criteria. As a side result, we also obtain an objective criterion for hyperbolic Lagrangian structures.} -} - - -@MISC{brenner:rayleighstability, - author={Brenner}, - title={Rayleigh stability criterion}, - year={2015}, - howpublished = {\url{http://www.seas.harvard.edu/brenner/taylor/handouts/taylor\_couette/node2.html}}, -} - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - REFERENCE BOOKS -% --------------------------------------------------------------------------------{ -@BOOK{cottet:book, - author = {G.-H. Cottet and P. Koumoutsakos}, - title = {Vortex methods: theory and practice}, - publisher = {Cambridge University Press}, - year = {2000} -} -@book{lewis:book, -author = "R. I. Lewis", -title = {Vortex Element Methods for Fluid Dynamic Analysis of Engineering Systems}, -publisher = {Cambridge University Press}, -year = {1991}, -isbn = {9780511529542}, -note = {Cambridge Books Online}, -url = {http://dx.doi.org/10.1017/CBO9780511529542} -} - -@BOOK{katzplotkin:book, - author = {J. Katz and A. Plotkin}, - title = {Low-Speed Aerodynamics, 2nd Edition}, - publisher = {Cambridge University Press}, - year = {2001}, - month={February}, - series= {Cambridge Aerospace Series(No. 13)}, - ISBN={9780521665520} -} - -@misc{stock:2007, -author = {M. J. Stock}, -title = {{Summary of Vortex Methods Literature ( A living document rife with opinion )}}, -year= {2007}, -note={http://markjstock.org/research/} -} -% --------------------------------------------------------------------------------} -% --- HELMOTZ DECOMPOSITION -% --------------------------------------------------------------------------------{ -@article{petronetto:2008, - author = {Fabiano Petronetto and Afonso Paiva and Marcos Lage and Geovan Tavares and Hélio Lopes and Thomas Lewiner}, - title = {Meshless {H}elmholtz-{H}odge decomposition}, - year = {2010}, - month = {march}, - journal = {Transactions on Visualization and Computer Graphics}, - volume = {16}, - number = {2}, - pages = {338--342}, - publisher = {IEEE}, -} -% --------------------------------------------------------------------------------} -% --- Aero and WT - Propellers or helicopters -% --------------------------------------------------------------------------------{ -@book{martin:book, -author = {M. O. L. Hansen}, -title = {Aerodynamics of Wind Turbines - Second Edition}, -year = {2008}, -address = {London, Sterling, VA}, -publisher= {Earthscan}, -isbn = {978-1-84407-438-9}, -} - - - -@article{hansen:2006, -author = {Hansen, M. O. L. and S{\o}rensen, J. N. and Voutsinas, S. and S{\o}rensen, N. and Madsen, H. Aa.}, -doi = {10.1016/j.paerosci.2006.10.002}, -journal = {Progress in Aerospace Sciences}, -keywords = {aeroelasticity,wind turbines}, -pages = {285--330}, -title = {{State of the art in wind turbine aerodynamics and aeroelasticity}}, -volume = {42}, -year = {2006} -} - -@book{windenergyexplained, -author = {J.F. Manwell and J.G. McGowan and A.L. Rogers}, -title = {Wind Energy Explained}, -month={August}, -year = {2003}, -publisher= {J. Wiley and Sons, LTD} -} -@book{windenergyhandbook, -author = {T. Burton and D. Sharpe and N. Jenkins and E. Bossanyi}, -title = {Wind Energy Handbook}, -year = {2002}, -publisher= {J. Wiley \& Sons, New-York, N.Y.}, -edition={first}, -ISBN={9780471489979}, -url={http://dx.doi.org/10.1002/0470846062}, -doi={10.1002/0470846062}, -} -@book{windenergyhandbooksecond, -author = {T. Burton and D. Sharpe and N. Jenkins and E. Bossanyi}, -title = {Wind Energy Handbook, New-York, N.Y.}, -year = {2011}, -publisher= {J. Wiley \& Sons}, -edition={second}, -ISBN={9780470699751}, -} - -# url={http://dx.doi.org/10.1002/0470846062}, -# doi={10.1002/0470846062}, -#AUTHOR - Burton, Tony -#AUTHOR - Sharpe, David -#AUTHOR - Jenkins, Nick -#AUTHOR - Bossanyi, Ervin - -@book{hau, -author = {E. Hau}, -title = {Wind Turbines - Fundamentals, Technologies, Appplications, Economics}, -year = {2006}, -publisher= {Springer} -} - -@BOOK{rotarywings:book, - author = {W.Z. Stepniewski and C.N. Keys}, - title = {Rotary-Wings Aerodynamics}, - publisher = {Dover Publication}, - year = {1984} -} - -@TECHREPORT{lindenburg:2003, - author = {C. Lindenburg}, - title = {Investigation into Rotor Blade Aerodynamics}, - institution = {ECN}, - year = {2003}, - number={ECN-C-03-025} -} - -@BOOK{leishman:book, - author = {J. G. Leishman}, - title = {Principles of Helicopter Aerodynamics - Second Edition}, - publisher = {Cambridge University Press}, - year = {2006}, - month={april}, - series={Cambridge Aerospace Series(No. 12)}, - isbn={ 9780521858601} -} - -@BOOK{bramwell:book, - author = {A. R. S. Bramwell and G. Done and D. Balmford}, - title = {Bramwell's Helicopter Dynamics, Second Edition}, - publisher = {Butterworth Heinemann}, - year = {2001}, - isbn = {0750650753}, -} - - - -@book{breslin, - author = {John P. Breslin and Poul Andersen}, - title = {Hydrodynamics of Ship Propellers}, - publisher = {Cambridge University Press}, - year = {1993}, -} - -@PHDTHESIS{schepers:phdthesis, - author = {G. Schepers}, - title = {Engineering models in wind energy aerodynamics. Development, implementation and analysis using dedicated aerodynamic measurements}, - school = {Technical University of Delft}, - year = {2012}, -} - -@book{schaffarczyk:2014:book, - title={Introduction to Wind Turbine Aerodynamics}, - author={Schaffarczyk, A.P.}, - isbn={9783642364082}, - series={Green Energy and Technology}, - year={2014}, - publisher={Springer Berlin Heidelberg} -} -@incollection{sorensen:2012:bookchapter, -title = "2.08 - Aerodynamic Analysis of Wind Turbines ", -editor = "Sayigh, Ali ", -booktitle = "Comprehensive Renewable Energy ", -publisher = "Elsevier", -edition = "", -address = "Oxford", -year = "2012", -pages = "225 - 241", -isbn = "978-0-08-087873-7", -doi = "http://dx.doi.org/10.1016/B978-0-08-087872-0.00209-2", -author = "J. N. S{\o}rensen", -abstract = "Abstract The aerodynamics of wind turbines concerns modelling and prediction of the aerodynamic forces on wind turbines. Wind turbine aerodynamics is the most central discipline for design and construction of wind turbine blades. Here we give a status of the most important research areas within the aerodynamics of wind turbines, rotor wakes, and wind farms. This includes an introduction to basic rotor models, such as the blade-element momentum theory, vortex models, numerical actuator disk models, and computational fluid dynamics. Furthermore, a description is given of the optimization of wind turbine rotors with respect to minimizing the cost of energy produced by wind turbines. Finally, an introduction to the prediction of aerodynamic noise from wind turbine rotors is carried out. " -} - -% --------------------------------------------------------------------------------} -% --- BEM -% --------------------------------------------------------------------------------{ -@ARTICLE{madsen:2007, - author = {H. Madsen and R. Mikkelsen and S. {\O}ye and C. Bak and J. Johansen}, - title = {A Detailed investigation of the Blade Element Momentum (BEM) model based on analytical and numerical results and proposal for modifications of the BEM model}, - journal = {Journal of Physics: Conference Series 75}, - year = {2007} -} -@TECHREPORT{bak:2007aeroelasticity, - author = {C. Bak}, - title = {Research in Aeroelasticity EFP-2007}, - institution = {Ris{\o}-DTU}, - year = {2007}, - number={Ris{\o}-R-1649} -} -@TECHREPORT{bak:2007aeroelasticityChapter2, - editor = {C. Bak}, - author= {R. Mikkelsen and H. A. Madsen and M. Hansen and W.Z. Shen and S. {\O}ye}, - title = {Research in Aeroelasticity EFP-2007 - Chapter 2: Analysis of induction near tip}, - institution = {Ris{\o}-DTU}, - year = {2007}, - number={Ris{\o}-R-1649} -} -@ARTICLE{madsen:2009, - author = {H. Madsen and C. Bak and M. D{\o}ssing and R. Mikkelsen and S. {\O}ye}, - title = {Validation and modification of the Blade Element Momentum theory based on comparisons with actuator disc simulations}, - journal = {Wind Energy}, - volume={13}, - year = {2010}, - pages={p373-389} -} -@TECHREPORT{harman:1994, - author = {C. R. Harman}, - title = {{PROPX: Definitions, Derivations, and data Flow}}, - institution = {Oregon State University, Corvallis}, - year = {1994}, - otherinfo = {} -} - - - - - - -% --------------------------------------------------------------------------------} -% --- AERO - OLD REFERENCES -% --------------------------------------------------------------------------------{ -@ARTICLE{prandtl:1904, - author = {L. Prandtl}, - title = {Uber Flussigkeiibewegung bei sehr kleiner Reibung}, - journal = {Proceedings of 4th Mathematics Congress, Heidelberg}, - year = {1904}, - pages = {p484-493}, - note={(in German)} -} - -@ARTICLE{prandtl:1918, - author = {L. Prandtl}, - title = {Tragfl\"ugeltheorie}, - journal = {G{\"o}ttinger Klassiker der Str{\"o}mungsmechanik Bd. 3}, - editor={A. Dillmann}, - institution={Universit{\"a}tsverlag G{\"o}ttingen}, - year = {1918}, - otherinfo = {Reprint 2010}, - note={(in German)} -} - - - -% --------------------------------------------------------------------------------} -% --- OPTIMUM CIRCULATION - TIP LOSSES -% --------------------------------------------------------------------------------{ -@ARTICLE{betz:1919, - author = {A. Betz}, - title = {Schraubenpropeller mit geringstem Energieverlust - Mit einem Zusatz von {L}. {P}randtl}, - journal = {G{\"o}ttinger Klassiker der Str{\"o}mungsmechanik Bd. 3}, - editor={A. Dillmann}, - institution={Universit{\"a}tsverlag G{\"o}ttingen}, - year = {1919}, - pages={p68-88}, - otherinfo = {Reprint 2010}, - note={(in German)} -} -@ARTICLE{prandtl:1919, - author = {L. Prandtl}, - title = {Appendix to {B}etz's article: Schraubenpropeller mit geringstem Energieverlust - Mit einem Zusatz von {L}. {P}randtl}, - journal = {G{\"o}ttinger Klassiker der Str{\"o}mungsmechanik Bd. 3}, - editor={A. Dillmann}, - institution={Universit{\"a}tsverlag G{\"o}ttingen}, - year = {1919}, - pages={p89-92}, - otherinfo = {Reprint 2010}, - note={(in German)} -} -@ARTICLE{betz:1926, - author = {A. Betz}, - title = {Wind Energie und ihre Ausnutzug durch Windm\"ulen (Wind energy and its extraction through wind mills)}, - journal = {Vandenhoeck and Ruprecht}, - institution={Universit{\"a}tsverlag G{\"o}ttingen}, - year = {1926}, - note={(in German)} -} - -@BOOK{prandtlnaca116, - author = {L. Prandtl}, - title = {Applications of modern hydrodynamics to aeronautics}, - publisher = {{NACA} report No. 116}, - year = {1921} -} - -@BOOK{munknaca121, - author = {M. Munk}, - title = {The minimum induced drag of aerofoils}, - publisher = {{NACA} report No. 121}, - year = {1923} -} -@ARTICLE{lock:1925, - author = {C. N. H. Lock and H. Bateman and H. C. H. Townend}, - title = {An extension of the vortex theory of airscrew with applications to airscrews of small pitch, including experimental results}, - journal = {Report and Memoranda}, - volume = {1014}, - year = {1925}, - month ={September}, - publisher = {His majesty's stationery office} -} - -@ARTICLE{helmbold:1924, - author = {H.B. Helmbold}, - title = {Zur Aerodynamik der Treibschraube}, - journal = {Zeitschrift f\:ur Flugtechnik und Motorluftschiffahrt (ZFM)}, - year = {1924}, - volume={15}, - pages={150}, - note={(in German)} -} - -helmbold -@TECHREPORT{goldstein:1929, - author = {S. Goldstein}, - title = {On the vortex theory of screw propellers}, - institution = {St. John's College, Cambridge}, - year = {1929}, - month = {January} -} -@TECHREPORT{goldsteintable, - author = {C.K. Tibery and J.W. Wrench}, - title = {Tables of {G}oldstein factor}, - institution = {Applied mathematics laboratory - Department of the navy - report 1534}, - year = {1964} -} - -@TECHREPORT{nacatm884, - author = {K.N. Kramer }, - title = {The induced efficiency of optimum propellers having a finite number of blades}, - institution = {{NACA - TM - 884}}, - year = {1939} -} -@TECHREPORT{nacatm921, - author = {G.l Sissingh}, - title = {Contribution to the aerodynamics of rotating-wing aircraft}, - institution = {{NACA - TM - 921}}, - year = {1939} -} - -@TECHREPORT{theodorsen:1944, - author = {T. Theodorsen}, - title = {The theory of propellers I-IV}, - institution = {{NACA} reports 775-778}, - year = {1944} -} - -@TECHREPORT{naca924, - author = {C. Crigler}, - title = {Application of Theodorsen's theory to propeller design}, - institution = {{NACA} report 924}, - year = {1949} -} -@BOOK{theodorsen:1948, - author = {T. Theodorsen}, - title = {Theory of propellers}, - publisher = {McGraw-Hill Book Company, New-York}, - year = {1948}, - series={McGraw-Hill publications in aeronautical science}, -} - - - -@UNPUBLISHED{moffitt:2007, - author = {B.A. Moffitt and T.H. Bradley and D.E. Parekh and D.Mavris}, - title = {Validation of vortex propeller theory for UAV design with uncertainty analysis}, - note = {unpublished} -} - - -@ARTICLE{devries:1979, - author = {O. {De Vries}}, - title = {Fluid dynamic aspects of wind energy conversion}, - journal = {AGARD report, Brussels, Belgium}, - volume={AG-243}, - year = {1979}, - chapter={4}, - pages={1-50} -} - -@ARTICLE{larrabee:1983, - author = {E. E. Larrabee and S. E. French}, - title = {Minimum Induced Loss Windmills and Propellers}, - journal = {Journal of wind Engineering and Industrial Aerodynamics}, - year = {1983}, - volume = {15}, - pages={p317-327}, - month={December} -} - -@MASTERSTHESIS{mithelicopter:1991, - author = {K. Y-L. Yang}, - title = {Helicopter Rotor Lift Distribution for minimum Induced Power Loss}, - school = {M.I.T.}, - year = {1991} -} - -@ARTICLE{shen:2005, - author = {W. Z. Shen and R. Mikkelsen and J. N. S{\o}rensen and C. Bak}, - title = {Tip loss corrections for wind turbine computations}, - journal = {Wind Energy}, - year = {2005}, - volume = {8}, - pages = {p457-475} -} - -@TECHREPORT{sankar:2001, - author = {L.N. Sankar}, - title = {Computational studies of horizontal axis wind turbines - Annual status report 2000-2001}, - institution = {NREL - Georgia institute of technology}, - year = {2001} -} -@ARTICLE{okulov:2007, - title = {Optimum operating regimes for the ideal wind turbine}, - author = {V.L. Okulov and J.N. S{\o}rensen}, - journal = {Journal of Physics - Conference series 75}, - year = {2007}, - doi = {10.1088/1742-6596/75/1/012009}, - volume = {75} -} -@article{okulov:2007stability, -author = {Okulov, Valery L and S\o rensen, Jens N}, -title = {{Stability of the Tip Vortices in the Far Wake behind a Wind Turbine}}, -journal = {Progress in Aerospace Sciences}, -pages = {2--5}, -year = 2007 -} -@ARTICLE{okulov:2008, - author = {V.L. Okulov and J.N. S{\o}rensen}, - title = {An Ideal Wind Turbine with a Finite Number of Blades}, - journal = {Doklady Physics}, - year = {2008}, - volume={53}, - pages={p337-342} -} -@article{okulov:2010helicaldynamics, -author = {Okulov, Valery L and S\o rensen, Jens N}, -title = {{Applications of 2D helical vortex dynamics}}, -doi = {10.1007/s00162-009-0136-3}, -journal = {Control}, -keywords = {helical vortices,instability of far wakes,vortex breakdown,vortex theory of rotors}, -pages = {395--401}, -year = {2010} -} -@article{okulov:2010, - title = {{Maximum efficiency of wind turbine rotors using Joukowsky and Betz approaches}}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {V.L. Okulov and J.N. S{\o}rensen}, - journal = {Journal of Fluid Mechanics}, - volume = {649}, - pages = {497-508}, - year = {2010}, - issn = {00221120, 14697645}, - abstract = {On the basis of the concepts outlined by Joukowsky nearly a century ago, an analytical aerodynamic optimization model is developed for rotors with a finite number of blades and constant circulation distribution. In the paper, we show the basics of the new model and compare its efficiency with results for rotors designed using the optimization model of Betz.}, - doi = {10.1017/S0022112010000509} -} -@article{okulov:2012, -title = {{Limit cases for rotor theories with Betz optimization}}, -publisher = "Institute of Physics Publishing", -author = "Valery Okulov", -year = "2014", -doi = "10.1088/1742-6596/524/1/012129", -volume = "524", -pages = "1-7", -number = "1", -journal = "Journal of Physics: Conference Series (Online)", -issn = "1742-6596", -} - - - -@ARTICLE{fukumoto:2005, - author = {Y. Fukumoto and V.L. Okulov}, - title = {The velocity field induced by a helical vortex tube}, - journal = {Physics of fluids}, - year = {2005}, - volume={17} -} - -@article{sorensen:2014, - title = {A New Tip Correction Based on the Decambering Approach}, - language = {English}, - author = {J. N. S{\o}rensen and K. O. Dag and N. Ramos-Garcia}, - journal = {Journal of Physics: Conference Series}, - volume = {524}, - number = {1}, - pages = {012097}, - year = {2014}, - issn = {17426588, 17426596}, - abstract = {A limitation of the standard Blade Element Momentum (BEM) technique is that it represents the surface loading by an averaged value determined by locally computed airfoil characteristics. Thus, it does not take into account the chord wise distribution of the induction. Likewise, lifting line methods suffer from the problem that the induction from the free wake vortices is only evaluated along a line representing the center of pressure. Hence, the effect from the chord wise distribution of the induction is neglected. As a consequence, the loading in the proximity of the tip is generally found to be overestimated. To remedy this problem, a correction has been developed, which modifies the circulation by taking into account the additional influence of the induction of the free wake vortices. This is done by correcting the circulation, using the so-called decambering effect and thin-airfoil theory. The correction is implemented as an additional correction to the Prandtl tip correction. Where the Prandtl tip correction serves to correct the axisymmetric momentum theory for a finite number of blades (see Goldstein, 1929), the new model further corrects the blade element model to represent the line distribution by a surface loading. Comparing computations of the new model with results from a 'standard' BEM model and computations using a 3D panel code, show that the inclusion of the correction greatly improves the results. The new model also explains some of the discrepancies that earlier on have been observed when using a BEM technique based alone upon standard tip corrections (Shen et al., 2005).}, - doi = {10.1088/1742-6596/524/1/012097} -} - - - - - -% --------------------------------------------------------------------------------} -% --- WAKES -% --------------------------------------------------------------------------------{ -@ARTICLE{okulov:2004, - author = {V.L. Okulov and J.N. S{\o}rensen}, - title = {Instability of a Vortex Wake behind Wind Turbines}, - journal = {Doklady Physics}, - year = {2004}, - volume={49}, - pages={p772-777} -} -@article{sorensen:2011, - title = {Multiple helical modes of vortex breakdown}, - language = {eng}, - publisher = {Cambridge University Press}, - author = {J. N. S{\o}rensen and I. V. Naumov and V. Okulov}, - journal = {Journal of Fluid Mechanics}, - volume = {683}, - pages = {430-441}, - year = {2011}, - issn = {00221120, 14697645}, - abstract = {Experimental observations of vortex breakdown in a rotating lid-driven cavity are presented. The results show that vortex breakdown for cavities with high aspect ratios is associated with the appearance of stable helical vortex multiplets. By using results from stability theory generalizing Kelvin’s problem on vortex polygon stability, and systematically exploring the cavity flow, we succeeded in identifying two new stable vortex breakdown states consisting of triple and quadruple helical multiplets.}, - doi = {10.1017/jfm.2011.308} -} - - - -@ARTICLE{vermeer:2003, - author = {L.J. Vermeer and J.N. S{\o}rensen and A. Crespo}, - title = {Wind turbine wake aerodynamics}, - journal = {Progress in Aerospace Sciences}, - year = {2003}, - number={39}, - pages={p467-510} -} -@ARTICLE{shen:1998, - author = {J.N. S{\o}rensen and W.Z. Shen and X. Munduate}, - title = {Analysis of Wake States by a Full-field Actuator Disc Model}, - journal = {Wind Energ.}, - year = {1998}, - volume ={1}, - pages = {73-88} -} -@article{sanderse:2011, -author = {B. Sanderse}, -doi = {10.1002/we}, -journal = {Wind Energy}, -keywords = {cfd,rotor modelling,turbulence modeling,wake aerodynamics,wind energy}, -title = {{Review of computational fluid dynamics for wind turbine wake aerodynamics}}, -year = {2011} -} - -@article{Frandsen2006, - author = "Frandsen, S. and Barthelmie, R. and Pryor, S. and Rathmann, O. and Larsen, S. and H{\o}jstrup, J. and Th{\o}gersen, M.", - title = "Analytical modelling of wind speed deficit in large offshore wind farms", - journal = "Wind Energy", - volume = "9", - number = "1--2", - pages = "39--53", - year = "2006", -} - -@ARTICLE{rathmann:2006, - author = {O. Rathmann and R. Barthelmie and S. Frandsen}, - title = {Turbine Wake Model for Wind Resource Software}, - journal = {Proceedings of EWEC}, - year = {2006}, - otherinfo = {} -} -@article{lissaman:1979, - author = "Lissaman, P.B.S.", - title = "{Energy effectiveness of arbitrary arrays of wind turbines}", - journal = "Journal of Energy", - volume = "3", - number = "6", - pages = "323--328", - year = "1979", -} - - -% ---------------------------------------------------------} -% --- VORTEX METHOD - VISCOUS CORE -% --------------------------------------------------------------------------------{ -@ARTICLE{squire:1965, - author = {H. B. Squire}, - title = {The growth of a vortex in a turbulent flow}, - journal = {Aeronautical Quaterly}, - volume=16, - pages={302-306}, - year = {1965} -} - -@ARTICLE{hoydonck:2012, - author = {W. R. M. {Van Hoydonck} and M.J.L. {van Tooren}}, - title = {Validity of Viscous Core Correction Models for Self-Induced Velocity Calculations}, - year = 2012, - journal = {ArXiv e-prints}, - volume={1204.2378} -} - -@article{ananthan:2002, - title = {The role of filament stretching in the free-vortex modeling of rotor wakes}, - language = {English}, - publisher = {American helicopter society, inc}, - author = {Ananthan, S. and Leishman, J. G. and Ramasamy, M.}, - journal = {Annual forum proceedings- {American Helicopter Society}}, - volume = {58}, - number = {PART 2}, - pages = {2005-2022}, - year = {2002}, - issn = {0733-4249, 07334249} -} - -@CONFERENCE{uzol:2012, - author = {O. Uzol}, - title = {Free-Wake Calculations of Wind Turbine Wake-Rotor Interactions: The Effect of Vortex Filament Core Size, Expansion and Stretching on Performance Prediction}, - booktitle = {Science of making torque from the wind - {Oldenburg}}, - year = {2012}, -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX THEORY AND METHOD - not vortexcodes -% --------------------------------------------------------------------------------{ -@TECHREPORT{risorgaunaa:2011, - author = {M. Gaunaa and P.-E. Rh\'etor\'e and N.S. S{\o}rensen}, - title = {Ris{\o} contributions to final report EFP-Vingetipper}, - institution = {Ris\o-DTU}, - year = {2011}, - number = {Riso-R-xxxx} -} - -@INPROCEEDINGS{oye:1990, - author = {S. {\O}ye}, - title = {A simple vortex model of a turbine rotor}, - booktitle = {Proc. of the third IEA Symposium on the Aerodynamics of Wind Turbines, ETSU, Harwell}, - year = {1990}, - pages={4.1-1.15}, - otherinfo = {} -} - -% ---------------------------------------------------------} -% --- VORTEX CODES - Theoretical derivations -% --------------------------------------------------------------------------------{ -@ARTICLE{james:1972, - author = {R.M. James}, - title = {On the remarkable accuracy of the Vortex Lattice Method}, - journal = {Comput. Methods. Appli. Meth. Eng.}, - year = {1972}, - volume = {1}, -} -@ARTICLE{lan:1974, - author = {C.E. Lan}, - title = {A Quasi-Vortex Lattice Method in Thin Wing Theory}, - journal = {Journal of Aircraft}, - year = {1974}, - volume = {11}, - number = {9} -} -@ARTICLE{stark:1970, - author = {V.J.E. Stark}, - title = {A Generalized Quadrature Formula for Cauchy Integrals}, - journal = {AIAA Journal}, - year = {1970}, - volume = {9}, - number = {9} -} -@TECHREPORT{mangler:1952, - author = {K.W. Mangler}, - title = {Improper Integrals in Theoretical Aerodynamics}, - institution = {Aeronautical Research Council Technical Report no. 94}, - year = {1952}, -} - -@article{voutsinas:1990, - title = {Numerical calculation of singular integrals appearing in three-dimensional potential flow problems}, - language = {English}, - author = {Voutsinas, S. and Bergeles, G.}, - journal = {Applied Mathematical Modelling}, - volume = {14}, - number = {12}, - pages = {618-629}, - year = {1990}, - issn = {0307904x, 18728480}, - abstract = {Two approximate methods for calculating singular integrals appearing in the numerical solution of three-dimensional potential flow problems are presented. The first method is a self-adaptive, fully numerical method based on special copy formulas of Gaussian quadrature rules. The singularity is treated by refining the partitions of the copy formula in the vicinity of the singular point. The second method is a semianalytic method based on asymptotic considerations. Under the small curvature hypothesis, asymptotic expansions are derived for the integrals that are involved in the calculation of the scalar potential, the velocity as well as the deformation field induced from curved quadrilateral surface elements. Compared to other methods, the proposed integration schemes, when applied to practical flow field calculations, require less computational effort.} -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX CODES - EXAMP -% --------------------------------------------------------------------------------{ -@TECHREPORT{vsaero, - author = {B. Maskew}, - title = {Program {VSAero} Theory Document}, - institution = {{NASA} contractor report 4023}, - year = {1987}, -} -@TECHREPORT{hess:1962, - author = {J. L. Hess and A. M. O. Smith}, - title = {Calculation of non-lifting potential flow about arbitrary three-dimensional bodies}, - institution = {Douglas Aircraft Division, Report No. E.S. 40622, AD0282255}, - year = {1962}, -} - -@TECHREPORT{hess:1972, - author = {J. L. Hess}, - title = {Calculation of potential flow about arbitrary three-dimension lifting bodies}, - institution = {Douglas Aircraft Division, Report No. MDC J5679-01, AD0755480}, - year = {1972}, -} - -@PHDTHESIS{walther:1994phdthesis, - author = {J. H. Walther}, - title = {Discrete Vortex Method for Two-dimensional Flow past Bodies of arbitrary Shape undergoing Prescribed Rotary and - Translational Motion}, - school = {Technical University of Denmark - DTU}, - year = {1994} -} - -@article{sbalzarini:2006, -author = {Sbalzarini, I. F. and Walther, J. H. and Bergdorf, M. and Hieber, S. E. and Kotsalis, E. M. and Koumoutsakos, P.}, -doi = {10.1016/j.jcp.2005.11.017}, -journal = {Journal of Computational Physics}, -keywords = {mesh,parallel library,particle,smooth particle hydrodynamics,vortex methods}, -pages = {566--588}, -title = {{PPM - A highly efficient parallel particle - mesh library for the simulation of continuum systems}}, -volume = {215}, -year = {2006} -} -@article{dixon:2008, - title = {A 3D unsteady panel method for vertical axis wind turbines}, - publisher = {European Wind Energy Association}, - author = {Dixon, Kristian and Sim\~{a}o Ferreira, Carlos and Hofemann, Claudia and Van Bussel, Gerard and Van Kuik, Gijs}, - journal = {European Wind Energy Conference and Exhibition 2008}, - volume = {6}, - pages = {2981-2990}, - year = {2008}, - isbn = {9781615671151}, - abstract = {A 3D, unsteady, multi-body, free-wake panel method is developed to model a vertical axis wind turbine of arbitrary configuration. The panel code is intended as a design and research tool to capture the 3D nature of a VAWT and its wake. The model contains methods to realistically treat blade-wake interactions, vortex stretching/contraction and viscous diffusion. Validation is demonstrated by comparison with 3D-stereo Particle Image Velocimetry (PIV) and smoke trail studies for a straight-bladed VAWT. New insight into the near wake structure of a VAWT is developed in addition to how this structure changes as a function of tip speed ratio and height-diameter ratio. Tip vortex dynamics are also discussed.} -} -@inbook{garcia:2013miras, -title = "Development of a Three-Dimensional Viscous-Inviscid coupling Method for Wind Turbine Computations", -publisher = "Technical University of Denmark", -author = "{Ramos Garc\'ia}, N\'estor and S{\o}rensen, {Jens N{\o}rk{\ae}r} and Shen, {Wen Zhong}", -year = "2013", -pages = "69-81", -booktitle = "Proceedings of the 2013 International Conference on aerodynamics of Offshore Wind Energy Systems and wakes (ICOWES2013)", -} - -% ---------------------------------------------------------} -% --- VORTEX RINGS -% --------------------------------------------------------------------------------{ - -@ARTICLE{muller:1926, -author = {K. F. M\"uller}, -title = {Berechnung des Induktivit\"at von Spulen}, -journal = {Archiv f\"ur Elektrotechnik}, -year = {1926}, -volume = {17}, -number = {5}, -pages = {336-353}, -} - -@ARTICLE{foelsch:1936, -author = {K. Foelsch}, -title = {Magnefeld und Indukticit\"at einer zylindrischen Spule}, -journal = {Archiv f\"ur Elektrotechnik}, -year = {1936}, -volume = {30}, -number = {3}, -pages = {139-157}, -} - - -@article{paxton:1959, -title ={Solid angle calculation for a circular disk}, -author = {Paxton, F}, -doi = {10.1063/1.1716590}, -journal = {Review of Scientific Instruments}, -volume = {254}, -year = {1959} -} - -@article{yoon:2004, -author = {Yoon, Sam S and Heister, Stephen D}, -journal = {International Journal for Numerical Methods in Fluids}, -keywords = {biot,savart law,streamfunction,vortex ring}, -number = {October 2003}, -pages = {665--672}, -title = {{Analytical formulas for the velocity field induced by an infinitely thin vortex ring}}, -volume = {672}, -year = {2004} -} -@ARTICLE{nitschekrasny:1994, - author = {Nitsche, M. and Krasny, R.}, - title = {A numerical study of vortex rings formation at the edge of a circular tube}, - journal = {Journal of Fluid. Mech.}, - year = {1994}, - volume={276}, - pages={139-161}, -} - -% ---------------------------------------------------------} -% --- VORTEX CYLINDER -% --------------------------------------------------------------------------------{ -@ARTICLE{george:1980, - author = {M. F. George}, - title = {On the Velocity Induced by a Vortex Elliptic Cylinder}, - journal = {Journal of Ship Research}, - year = {1980}, - volume={24}, - number={1}, - pages={1--7} -} - -@article{gibson:1974, - Author = {I. S. Gibson}, - Title = {Velocity induced by a semi-infinite vortex cylinder - with extension to short solenoid}, - Year = {1974}, - Volume = {78}, - Number = {762}, - Pages = {262-268}, - journal = {Royal aeronautical soc.}, - ISSN = {0001-9240} -} -@TECHREPORT{callaghan:1960, - author = {E. E. Callaghan and S. H. Maslen}, - title = {The magnetic field of a finite solenoid}, - institution = {NASA technical note D-456, Lewis Research Center, Cleveland, Ohio}, - year = {1960}, -} - -@article{rinkel:1925, - title = {Das magnetische Feld von Spulen (The Magnetic field of coils)}, - language = {German}, - author = {Rinkel, R.}, - journal = {Zeitschrift Fur Technische Physik}, - volume = {6}, - number = {1}, - pages = {27-35}, - year = {1925}, - issn = {03730093}, - abstract = {Method of determining self-inductance of cylindrical coil consisting of summation process based on knowledge of field distribution due to single turn of coil; since it is only axial component of magnetic intensity which contributes to self-inductance, it is sufficient to determine this component only.} -} - -@article{protheroe:1996, - title = {The transient magnetic field outside an infinite solenoid}, - language = {English}, - publisher = {AMER INST PHYSICS}, - author = {Protheroe, RJ and Koks, D.}, - Journal = {American Journal Of Physics}, - volume = {64}, - number = {11}, - pages = {1389-1393}, - year = {1996}, - issn = {00029505, 19432909, 00029595}, - abstract = {The electromotive force (emf) in a loop outside an infinite solenoid with changing current is usually calculated using the vector potential because the magnetic field outside an infinite solenoid is supposed to be zero. However, the magnetic field will only be zero for steady currents. A change in the applied voltage will give rise to a change in the current, which will propagate along the solenoid in the same way as a wave on a transmission line. This gives rise to a transient magnetic field outside the solenoid. It is quite possible to calculate this transient magnetic field and use it in Faraday's law to calculate the emf directly without using the vector potential. In practice, it is usually simpler to use the vector potential. However, care should be taken to ensure that students are not given the impression that there is no magnetic field and that it is the vector potential that acts on charges in the loop. We give examples of the magnetic field configuration outside an infinite solenoid for a steplike change in driving voltage and for an ac driving voltage. (C) 1996 American Teachers.} -} - - -% ---------------------------------------------------------} -% --- VORTEX SHEET -% --------------------------------------------------------------------------------{ -@article{birkhoff:1959, - author={Birkhoff, G. and Fisher, J.}, - title={Do vortex sheets roll up?}, - year={1959}, - issn={0009-725X}, - journal={Rendiconti del Circolo Matematico di Palermo}, - volume={8}, - number={1}, - doi={10.1007/BF02843773}, - url={http://dx.doi.org/10.1007/BF02843773}, - publisher={Springer-Verlag}, - pages={77-90}, -} -@INPROCEEDINGS{birkhoff:1962, - author={Birkhoff, G.}, - title={Helmholtz and Taylor instability}, - year={1962}, - booktitle={Proc. Symp. Appl. Math.}, - publisher={Amer. Math. Soc.}, - pages={55-76}, -} -@article{rosenhead:1931, - author = {Rosenhead, L.}, - title = {The Formation of Vortices from a Surface of Discontinuity}, - jstor_articletype = {research-article}, - journal = {Proceedings of the Royal Society of London. Series A, Containing Papers of a Mathematical and Physical Character}, - jstor_issuetitle = {}, - volume = {134}, - number = {823}, - jstor_formatteddate = {Nov. 3, 1931}, - pages = {pp. 170-192}, - url = {http://www.jstor.org/stable/95835}, - ISSN = {09501207}, - abstract = {}, - language = {English}, - year = {1931}, - publisher = {The Royal Society}, - copyright = {Copyright © 1931 The Royal Society}, -} - -@INPROCEEDINGS{nakamura:1982, - title = {Vortex simulation of an inviscid shear layer}, - author = {Nakamura, Y. and Leonard, A. and Spalart, P. R.}, - year = {1982}, - booktitle= {Third Joint Thermophysics, Fluids, Plasma and Heat Transfer Conference, Fluid Dynamics and Co-located Conferences}, - abstract = {The accuracy of the vortex-blob method was tested by simulating a free-shear-layer instability, Kirchhoff's elliptical vortex, and a circular vortex. The main numerical parameters in the vortex-blob method are the density of the vortices, and the distribution of vorticity within each vortex core. The growth rate of a periodic unstable mode of the shear layer was calculated numerically and compared with the exact result. The error is only a few percent for about 10 rows of vortex blobs. The error is reduced by decreasing the spacing between vortices and, correspondingly, the core size. In the simulation of the motion of the elliptical vortex, the rotation of the boundary, without change of shape, and the circular particle paths of the vortical fluid were well simulated. For the circular vortex, optimum sets of parameters were obtained by comparing them with the exact velocity. The results are consistent with convergence theories of the vortex-blob method. In particular, second-order convergence is observed with a Gaussian core from velocity calculation.} -} -@article{krasny:1986a, - title = {Desingularization of periodic vortex sheet roll-up}, - author = {Krasny, R.}, - year = {1986}, - volume={65}, - pages={292-313}, - journal={Journal of Computational Physics}, - abstract = {An analytical approach is used in an attempt to model the evolution of a vortex sheet past the critical time by means of a desingularization method. Evolution of the sheet, which is embedded in a two-dimensional flow, is described by approximating the total circulation between a fixed material point and an imaginary point on the curve of the flow. A linear dispersion relation is defined which shows that the short wavelength modes of the sheet are not unstable and therefore do adversely effect the computations as artifacts of round-off errors. The desingularization approach is demonstrated to converge beyond the critical time for the vortex sheet. Application of the technique for the study of the vortex sheet shed from an elliptically loaded wing is indicated.} -} - -% ---------------------------------------------------------} -% --- VORTEX HELICAL FILAMENTS -% --------------------------------------------------------------------------------{ -@article{hardin:1982, -author = {Hardin, Jay C}, -title = {{The velocity field induced by a helical vortex filament}}, -doi = {10.1063/1.863684}, -year = {1982}, -pages = {1949-1952}, -journal={Phys. Fluids}, -volume = {25}, -} -@ARTICLE{kawada:1936, - author = {S. Kawada}, - title = {Induced velocities of helical vortices}, - journal = {Journal of Aeronautical Sciences}, - year = {1936}, - volume=3, - otherinfo = {Also in Report of the Aeronautical Research Institute, Tokyo, Imperial University, No. 172, 1939.} -} - -@ARTICLE{lerbs:1952, - author = {Lerbs,H. W.}, - title = {Moderately Loaded Propellers with a Finite Number of Blades and an Arbitrary Distribution of Circulation}, - journal = {Transactions of the Society of Naval Architects and Marine Engineer}, - year = {1952}, - volume ={60}, - pages={73-117} -} -@ARTICLE{wrench:1957, - author = {Wrench, J. W.}, - title = {The calculation of propeller induction factors}, - journal = {Reprint of Applied Mathematics Laboratory Tecnical Report 13}, - year = {1957}, -} -@ARTICLE{okulov:1995, - author = {V. L. Okulov}, - title = {The velocity induced by vortex filaments with cylindrical and conic supporting surface.}, - journal = {Russian Journal of Engineering Thermophysics}, - year = {1995}, - volume={5}, - pages={63-75} -} - - -Okulov, V. L. 1995 The velocity field induced by vortex filaments with cylindrical and conic -supporting surface. Russian J. Engng Thermophys. 5, 63–75 - - -% --------------------------------------------------------------------------------} -% --- Vorticity transport -% --------------------------------------------------------------------------------{ -@article{fletcher:2009, -author = {T. M. Fletcher and R. E. Brown }, -doi = {10.1002/we}, -journal = {Wind Energy}, -keywords = {interaction,vtm,wake instability,wind turbine}, -title = {{Simulation of wind turbine wake interaction using the vorticity transport model}}, -year = {2009} -} -% --------------------------------------------------------------------------------} -% --- VORTEX CODE _ NOT LIFTING LINE -% --------------------------------------------------------------------------------{ - -@article{kamemoto:2004, -author = {Kamemoto, K}, -title = {On Contribution of Advanced Vortex Element Methods Toward Virtual Reality of Unsteady Vortical Flows in the New Generation of CFD}, -journal = {Sciences-New York}, -keywords = {bluff body fluid,dynamics,machinery,numerical calculation,unsteady flows,virtual operation of fluid,vortex method}, -number = {4}, -volume = {XXVI}, -year = {2004} -} -@article{leishman:2002, -author = {J. G. Leishman}, -number = {5}, -journal = {Journal of aircraft}, -title = {{Free-Vortex Filament Methods for the Analysis of Helicopter Rotor Wakes}}, -volume = {39}, -year = {2002} -} - - - -@article{marion:2014, - author={L Marion and N Ramos-García and J N Sørensen}, - title={Inviscid double wake model for stalled airfoils}, - journal={Journal of Physics: Conference Series}, - volume={524}, - number={1}, - pages={012132}, - url={http://stacks.iop.org/1742-6596/524/i=1/a=012132}, - year={2014}, - abstract={An inviscid double wake model based on a steady two-dimensional panel method has been developed to predict aerodynamic loads of wind turbine airfoils in the deep stall region. The separated flow is modelled using two constant vorticity sheets which are released at the trailing edge and at the separation point. A calibration of the code through comparison with experiments has been performed using one set of airfoils. A second set of airfoils has been used for the validation of the calibrated model. Predicted aerodynamic forces for a wide range of angles of attack (0 to 90 deg) are in overall good agreement with wind tunnel measurements.} -} -@article {riziotis:2008, -author = {Riziotis, Vasilis A. and Voutsinas, Spyros G.}, -title = {Dynamic stall modelling on airfoils based on strong viscous–inviscid interaction coupling}, -journal = {International Journal for Numerical Methods in Fluids}, -volume = {56}, -number = {2}, -publisher = {John Wiley \& Sons, Ltd.}, -issn = {1097-0363}, -url = {http://dx.doi.org/10.1002/fld.1525}, -doi = {10.1002/fld.1525}, -pages = {185--208}, -keywords = {dynamic stall, boundary layer methods, panel methods, viscous–inviscid interaction}, -year = {2008}, -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - REVIEWS -% --------------------------------------------------------------------------------{ -@techreport{spalart:1988, - title = {Vortex methods for separated flows}, - author = {Spalart, Philippe R.}, - year = {1988}, - institution={NASA-TM-100068}, - abstract = {The numerical solution of the Euler or Navier-Stokes equations by Lagrangian vortex methods is discussed. The mathematical background is presented and includes the relationship with traditional point-vortex studies, convergence to smooth solutions of the Euler equations, and the essential differences between two and three-dimensional cases. The difficulties in extending the method to viscous or compressible flows are explained. Two-dimensional flows around bluff bodies are emphasized. Robustness of the method and the assessment of accuracy, vortex-core profiles, time-marching schemes, numerical dissipation, and efficient programming are treated. Operation counts for unbounded and periodic flows are given, and two algorithms designed to speed up the calculations are described.} -} - -@article{sarpkaya:1989, - title = {Computational methods with vortices - the 1988 freeman scholar lecture}, - language = {English}, - publisher = {ASME-AMER SOC MECHANICAL ENG}, - author = {Sarpkaya, T.}, - journal = {Journal of fluids engineering-transactions of the asme}, - volume = {111}, - number = {1}, - pages = {5-52}, - year = {1989}, - issn = {00982202, 1528901x}, - abstract = {A comprehensive review is presented of the computational methods based upon Helmholtz's powerful concepts of vortex dynamics, making use of Lagrangian or mixed Lagrangian-Eulerian schemes, the Biot-Savart law or the Vortex-in-Cell methods. The approximations and smoothing schemes developed in search of predictive models, qualitative solutions, new insights, or just some inspiration in the simulation of often two-dimensional, occasionally three-dimensional, and almost always incompressible fluids are described in detail. One is forewarned at the onset that chaos awaits at the end of the road. The challenge is to produce results in the face of ever accumulating errors within a time scale appropriate for the investigation. The review is organized around two major sections: Theoretical foundations and practical applications of vortex methods.} -} - -@article{leonard:1980, - author = {A. Leonard}, - title = {Vortex methods for flow simulation}, - journal = {Journal of computational physics}, - year = {1980}, - volume = {37}, - pages = {289-335}, - issn={0021-9997/80/120289} -} - - -@article{leonard:1985, - author = {A. Leonard}, - title = {Computing three-dimensional incompressible flows with vortex elements}, - journal = {Annual Review of Fluid Mechanics}, - year = {1985}, - volume = {17}, - pages = {523-559}, -} - -@article{voutsinas:2012seminar, -author = {Voutsinas, Spyros}, -journal = {TU-Delft - NTUA}, -title = {{Lecture notes: PhD Course in vortex methods}}, -year = {2012} -} - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - THEORY -% --------------------------------------------------------------------------------{ -@article{prager:1928, - author = {W. Pr{\"a}ger}, - title = {Die Drickverteilung an K{\"o}rpern in ebener Potential str{\"omung}}, - journal = {Physik. Zeitschr.}, - year = {1928}, - volume = {29}, - pages = {865-869}, -} -@ARTICLE{voutsinas:2006, - author = {S. G. Voutsinas}, - title = {Vortex methods in aeronautics: how to make things work}, - journal = {International Journal of Computational Fluid Dynamics}, - year = {2006}, - otherinfo = {} -} - -@article{wu:1973, - title = {Numerical solutions of time-dependent incompressible Navier-Stokes equations using an integro-differential formulation}, - language = {English}, - author = {Wu, J. C. and Thompson, J. F.}, - journal = {Computers and Fluids}, - volume = {1}, - number = {2}, - pages = {197-215}, - year = {1973}, - issn = {00457930, 18790747}, - abstract = {A numerical method for the solution of the Navier-Stokes equations is developed using an integro-differential formulation of the equations. The method permits the actual computations to be confined to the viscous region of the flow and offers a drastic reduction in the number of data points required in the numerical procedure. The integro- differential formulation is presented along with discussions of the kinetic and kinematic aspects of the problem and the interplay between the two aspects. Results for several parallel flow problems and for the flow past a circular cylinder are presented. For the circular cylinder, it is shown that the introduction of a splitter plate behind the cylinder suppresses vortex shedding.} -} -@ARTICLE{richardson:1977, - author = {S. M. Richardson and A. R. H. Cornish}, - title = {Solution of three dimensional incompressible flow problems}, - journal = {Journal of Fluid Mechanics}, - year = {1977}, - volume = {82}, - pages = {pp. 309-319}, - doi = {10.1017/S0022112077000688} -} - - -@ARTICLE{hald:1978, - author = {O. H. Hald and V. M. {Del Prete}}, - title = {Convergence of Vortex methods for {E}uler's equation}, - journal = {Mathematics of Computation}, - year = {1978}, - volume = {32}, - number = {143}, - pages = {791--809}, -} - - - -@ARTICLE{hald:1979, - author = {O. H. Hald}, - title = {Convergence of Vortex methods for {E}uler's equation. II}, - journal = {SIAM J. Numer. Anal.}, - year = {1979}, - volume = {16}, - number = {5}, - pages = {726--756}, -} - - - - -@article{beale:1981, -author = {J. T. Beale and A. Majda}, -journal = {Mathematics of Computation}, -pages = {243--259}, -title = {Rates of Convergence for Viscous Splitting of the Navier-Stokes Equations}, -volume = {37}, -year = {1981} -} -@article{beale:1982a, -author = {J. T. Beale and A. Majda}, -title = {{Vortex Methods . I : Convergence in Three Dimensions}}, -journal = {Mathematics of Computation}, -number = {159}, -pages = {1--27}, -volume = {39}, -year = {1982} -} -@article{beale:1982b, -author = {J. T. Beale and A. Majda}, -title = {{Vortex Methods . II : Higher Order Accuracy in Two and Three Dimensions}}, -journal = {Mathematics of Computation}, -number = {159}, -pages = {29--52}, -volume = {39}, -year = {1982} -} -@article{beale:1985, -author = {J. T. Beale and A. Majda}, -journal = {Journal of Computational Physics}, -pages = {188--208}, -title = {{High Order Accurate Vortex Methods with Explicit Velocity Kernels}}, -volume = {208}, -year = {1985} -} - -@article{perlman:1985, -author = {Perlman, Mirta}, -pages = {200--223}, -title = {{On the Accuracy of Vortex Methods}}, -volume = {123}, -journal ={Journal of Computational Physics}, -year = {1985} -} - -@TECHREPORT{cottet:1984, - author = {G. H. Cottet}, - title = {A particle method to solve transport-diffusion equation - Part 1: The linear case}, - institution = {Centre de Mathematiques Appliquees, Ecole Polytechnique, France}, - year = {1984} -} - -@article{monaghan:1985, - title = {Extrapolating B splines for interpolation}, - language = {English}, - author = {Monaghan, J.J}, - journal = {Journal of Computational Physics}, - volume = {60}, - number = {2}, - pages = {253-262}, - year = {1985}, - issn = {00219991, 10902716}, - abstract = {A limit form of Richardson extrapolation is used to obtain interpolation formulae with accuracy of a higher degree than that obtained with the variation diminishing spline approximation.} -} - -@article{monaghan:1989, - title = {ON THE PROBLEM OF PENETRATION IN PARTICLE METHODS}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Monaghan, JJ}, - journal = {Journal Of Computational Physics}, - volume = {82}, - number = {1}, - pages = {1-15}, - year = {1989}, - issn = {00219991, 10902716}, - abstract = {A method is described which prevents penetration when particle methods are used to simulate streams of fluid impinging on each other. The method does not produce dissipation but it does produce extra dispersion.} -} - -@TECHREPORT{cottet:1987, - author = {G. H. Cottet}, - title = {A particle method to solve transport-diffusion equation - Part 2: The Navier-Stokes equation}, - institution = {Centre de Mathematique Appliquees, Ecole Polytechnique, France}, - year = {1987} -} - - - -@ARTICLE{degond:1989a, - author = {P. Degond and S. Mas-Gallic}, - title = {The Weighted Particle Method for Convection-Diffusion Equations. Part 1: The Case of an Isotropic Viscosity}, - journal = {Mathematics of Computation}, - year = {1989}, - volume = {53}, - number = {188}, - pages = {485--507} -} - -@ARTICLE{degond:1989b, - author = {P. Degond and S. Mas-Gallic}, - title = {The Weighted Particle Method for Convection-Diffusion Equations. Part 1: The Anisotropic Case}, - journal = {Mathematics of Computation}, - year = {1989}, - volume = {53}, - number = {188}, - pages = {509--525} -} -@article{nordmark:1991, - title = {Rezoning for higher-order vortex methods}, - language = {English}, - publisher = {Academic press inc jnl-comp subscriptions}, - author = {Nordmark, H}, - journal = {Journal of computational physics}, - volume = {97}, - number = {2}, - pages = {366-397}, - year = {1991}, - issn = {00219991, 10902716} -} -@article{winckelmans:1993, - title = {Contributions to vortex particle methods for the computation of 3-dimensional incompressible unsteady flows}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {G. S. Winckelmans and A. Leonard}, - journal = {Journal Of Computational Physics}, - volume = {109}, - number = {2}, - pages = {247-273}, - year = {1993}, - issn = {00219991, 10902716}, - abstract = {Recent contributions to vortex particle methods for the computation of three-dimensional incompressible unsteady flows are presented. Both singular and regularized vortex particle methods are reviewed, along with an investigation of different evolution equations for the particle strength vector. For the regularized method, a new algebraic smoothing is presented with convergence properties equal to those of Gaussian smoothing. A version of the regularized method which can account for viscous diffusion is developed using a scheme that redistributes the particle strength vectors. Finally, particle methods are investigated with respect to conservation laws, and new expressions for the quadratic diagnostics, energy, helicity, and enstrophy are derived.}, - doi = {10.1006/jcph.1993.1216} -} -@article{cottet:2000, - title = {Vortex methods with spatially varying cores}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {G.-H. Cottet and P. Koumoutsakos and M. L. O Salihi}, - journal = {Journal Of Computational Physics}, - volume = {162}, - number = {1}, - pages = {164-185}, - year = {2000}, - issn = {00219991, 10902716}, - abstract = {The accuracy of vortex methods employing smooth vortex particles/blobs is determined by the blob size, which can be viewed as a mollifier of the vorticity field. For computational efficiency, this core size needs to be spatially variable as particles are used to discretize different parts of the flow field, such as the boundary layer and the wake in bluff body flows. We derive here a consistent approximation for the viscous Navier-Stokes equations using variable size vortex particles. This derivation is based on the implementation of mappings that allow the consistent formulation of the diffusion and convection operators of the Navier-Stokes equations in the context of vortex methods. Several local mappings can be combined giving the capability of "mesh-embedding" to vortex methods. It is shown that the proposed variable method offers a significant improvement on the computational efficiency of constant core size methods while maintaining the adaptive character of the method. The method is ideally suited to flows such as wakes and shear layers and the validity of the approach is illustrated by showing results from cylinder flows and wall-vortex interactions. Using this scheme, previously unattainable simulations of cylinders undergoing rotary oscillations at high Reynolds numbers reveal an interesting mechanism for drastic drag reduction. (C) 2000 Academic Press.}, - doi = {10.1006/jeph.2000.6531} -} -@article{cocle:2008, - title = {Combining the vortex-in-cell and parallel fast multipole methods for efficient domain decomposition simulations}, - language = {English}, - publisher = {Academic Press Inc.}, - author = {Cocle, Roger and Winckelmans, Gr and Daeninck, Go}, - journal = {Journal of Computational Physics}, - volume = {227}, - number = {4}, - pages = {2263-2292}, - year = {2008}, - issn = {00219991, 10902716}, - abstract = {A new combination of vortex-in-cell and parallel fast multipole methods is presented which allows to efficiently simulate, in parallel, unbounded and half-unbounded vortical flows (flows with one flat wall). In the classical vortex-in-cell (VIC) method, the grid used to solve the Poisson equation is typically taken much larger than the vorticity field region, so as to be able to impose suitable far-field boundary conditions and thus approximate the truly unbounded (or half-unbounded) flow; an alternative is to assume periodicity. This approach leads to a solution that depends on the global grid size and, for large problems, to unmanageable memory and CPU requirements. The idea exploited here is to work on a domain that contains tightly the vorticity field and that can be decomposed in several subdomains on which the exact boundary conditions are obtained using the parallel fast multipole (PFM) method. This amounts to solving a 3-D Poisson equation without requiring any iteration between the subdomains (e.g., no Schwarz iteration required): this is so because the PFM method has a global view of the entire vorticity field and satisfies the far-field condition. The solution obtained by this VIC–PFM combination then corresponds to the simulation of a truly unbounded (or half-unbounded) flow. It requires far less memory and leads to a far better computational efficiency compared to simulations done using either (1) the VIC method alone, or (2) the vortex particle method with PFM solver alone. 3-D unbounded flow validation results are presented: instability, non-linear evolution and decay of a vortex ring (first at a moderate Reynolds number using the sequential version of the method, then at a high Reynolds number using the parallel version); instability and non-linear evolution of a two vortex system in ground effect. Finally, a space-developing simulation of an aircraft vortex wake in ground effect is also presented.[All rights reserved Elsevier].} -} -@article{rees:2011, - title = {A comparison of vortex and pseudo-spectral methods for the simulation of periodic vortical flows at high Reynolds numbers}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {van Rees, Wim M. and Leonard, Anthony and Pullin, D. I. and Koumoutsakos, Petros}, - journal = {Journal Of Computational Physics}, - volume = {230}, - number = {8}, - pages = {2794-2805}, - year = {2011}, - issn = {00219991, 10902716}, - abstract = {We present a validation study for the hybrid particle-mesh vortex method against a pseudo-spectral method for the Taylor-Green vortex at Re-Gamma = 1600 as well as in the collision of two antiparallel vortex tubes at Re-Gamma = 10,000. In this study we present diagnostics such as energy spectra and enstrophy as computed by both methods as well as point-wise comparisons of the vorticity field. Using a fourth order accurate kernel for interpolation between the particles and the mesh, the results of the hybrid vortex method and of the pseudo-spectral method agree well in both flow cases. For the Taylor-Green vortex, the vorticity contours computed by both methods around the time of the energy dissipation peak overlap. The energy spectrum shows that only the smallest length scales in the flow are not captured by the vortex method. In the second flow case, where we compute the collision of two anti-parallel vortex tubes at Reynolds number 10,000, the vortex method results and the pseudo-spectral method results are in very good agreement up to and including the first reconnection of the tubes. The maximum error in the effective viscosity is about 2.5% for the vortex method and about 1% for the pseudo-spectral method. At later times the flows computed with the different methods show the same qualitative features, but the quantitative agreement on vortical structures is lost. (C) 2010 Elsevier Inc. All rights reserved.}, - doi = {10.1016/j.jcp.2010.11.031} -} - -@article{eldredge:2002derivatives, - title = {A general deterministic treatment of derivatives in particle methods}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Eldredge, JD and Leonard, A. and Colonius, T.}, - journal = {Journal Of Computational Physics}, - volume = {180}, - number = {2}, - pages = {686-709}, - year = {2002}, - issn = {00219991, 10902716}, - abstract = {A unified approach to approximating spatial derivatives in particle methods using integral operators is presented. The approach is an extension of particle strength exchange, originally developed for treating the Laplacian in advection-diffusion problems. Kernels of high order of accuracy are constructed that can be used to approximate derivatives of any degree. A new treatment for computing derivatives near the edge of particle coverage is introduced, using "one-sided" integrals that only look for information where it is available. The use of these integral approximations in wave propagation applications is considered and their error is analyzed in this context using Fourier methods. Finally, simple tests are performed to demonstrate the characteristics of the treatment, including an assessment of the effects of particle dispersion, and their results are discussed. (C) 2002 Elsevier Science (USA).}, - doi = {10.1006/jcph.2002.7112} -} -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - RANDOM WALKS -% --------------------------------------------------------------------------------{ -@article{chorin:1973, -author = {A. J. Chorin}, -pages = {785--796}, -title = {Numerical study of slightly viscous flow}, -volume = {57}, -year = {1973}, -journal={Journal of Fluid Mechanics} -} -@ARTICLE{roberts:1985, - author = {S. Roberts}, - title = {Accuracy of the random vortex method for a problem with a nonsmooth initial condition}, - journal = {Journal of Computational Physics}, - year = {1989}, - volume = {58}, - pages = {29--43} -} - -@TECHREPORT{spalart:1983phdthesis, - author = {P. R. Spalart and A. Leonard and D. Baganoff}, - title = {Numerical simulation of separated flows}, - institution = {PhD Thesis, also NASA Technical Memorandum 84328}, - year = {1983}, -} -@ARTICLE{deffenbaugh:1976, - author = {F. D. Deffenbaugh and F.J. Marshall}, - title = {Time development of the flow about an impulsively started cylinder}, - journal = {AIAA Journal}, - year = {1976}, - volume = {14}, - pages = {908--913} -} - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - POINT VORTICES -% --------------------------------------------------------------------------------{ -@ARTICLE{kuwahara:1973, - author = {K. Kuwahara and Hideo Takami}, - title = {Numerical Studies of Two-dimensional vortex motion by a system of point vortices}, - journal = {Journal of the physical society of Japan}, - year = {1973}, - volume = {34}, - number = {1}, - pages = {247-253} -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - VISCOSITY - VORTICITY AT BOUNDARIES -% --------------------------------------------------------------------------------{ -@article{koumoutsakos:1994, - title = {Boundary conditions for viscous vortex methods}, - language = {English}, - author = {Koumoutsakos and A. Leonard and Pepin}, - journal = {Journal of Computational Physics}, - volume = {113}, - number = {1}, - pages = {52-61}, - year = {1994}, - issn = {00219991, 10902716}, - abstract = {This paper presents a Neumann-type vorticity boundary condition for the vorticity formulation of the Navier-Stokes equations. The vorticity creation process at the boundary, due to the no-slip condition, is expressed in terms of a vorticity flux. The scheme is incorporated then into a Lagrangian vortex blob method that uses a particle strength exchange algorithm for viscous diffusion. The no-slip condition is not enforced by the generation of new vortices at the boundary but instead by modifying the strength of the vortices in the vicinity of the boundary}, - doi = {10.1006/jcph.1994.1117} -} - -@article{koumoutsakos:1995, - title = {High-resolution simulations of the flow around an impulsively started cylinder using vortex methods}, - language = {English}, - publisher = {Cambridge Univ Press}, - author = {Koumoutsakos, P. and Leonard, A.}, - journal = {Journal of Fluid Mechanics}, - volume = {296}, - pages = {1-38}, - year = {1995}, - issn = {00221120, 14697645}, - abstract = {The development of a two-dimensional viscous incompressible flow generated from a circular cylinder impulsively started into rectilinear motion is studied computationally. An adaptive numerical scheme, based on vortex methods, is used to integrate the vorticity/velocity formulation of the Navier-Stokes equations for a wide range of Reynolds numbers (Re = 40 to 9500). A novel technique is implemented to resolve diffusion effects and enforce the no-slip boundary condition. The Biot-Savart law is employed to compute the velocities, thus eliminating the need for imposing the far-field boundary conditions. An efficient fast summation algorithm was implemented that allows a large number of computational elements, thus producing unprecedented high-resolution simulations. Results are compared to those from other theoretical, experimental and computational works and the relation between the unsteady vorticity field and the forces experienced by the body is discussed.} -} -@article{greengard:1985, - title = {THE CORE SPREADING VORTEX METHOD APPROXIMATES THE WRONG EQUATION}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Greengard, C.}, - journal = {Journal of computational physics}, - volume = {61}, - number = {2}, - pages = {345-348}, - year = {1985}, - issn = {00219991, 10902716}, - abstract = {Points out that the core spreading algorithm is physically wrong and, indeed, converges to a system of equations different from the Navier-Stokes equations. In the core spreading algorithm, vorticity is correctly diffused, but incorrectly convected, even in the limit of infinitely many vortices. The author restricts attention to the simplest case, that is, 2-dimensional flow without boundaries. The viscosity is taken to have value one and denote by η. the vorticity at time t =0, which is assumed to be smooth and of compact support} -} - - -@article{morton:1984, - title = {THE GENERATION AND DECAY OF VORTICITY}, - language = {English}, - publisher = {GORDON BREACH SCI PUBL LTD}, - author = {Morton, B. R.}, - journal = {Geophysical and astrophysical fluid dynamics}, - volume = {28}, - number = {3-4}, - pages = {277-308}, - year = {1984}, - issn = {03091929, 10290419}, - abstract = {This treatment discusses the generation of vorticity at rigid boundaries and its subsequent decay. It is intended to provide a consistent and very broadly applicable framework within which a wide range of questions can be answered explicitly. The rate of generation of vorticity is shown to be the relative tangential acceleration of fluid and boundary without taking viscosity into account and the generating mechanism therefore involves the tangential pressure gradient within the fluid and the external acceleration of the boundary only. The mechanism is inviscid in nature and independent of the no-slip condition at the boundary, although viscous diffusion acts immediately after generation to spread vorticity outward from boundaries. Vorticity diffuses neither out of boundaries nor into them, and the only means of decay is by cross-diffusive annihilation within the fluid} -} - -@incollection{lighthill:1963, -author={M. J. Lighhill}, -title={Introduction: Boundary Layer theory}, -pages={46-113}, -booktitle = {Laminar Boundary Layers}, -editor = {L. Rosenhead}, -publisher = {Oxford University Press}, -year = 1963 -} - -@book{ rosenhead:1963:book, -booktitle = {Laminar Boundary Layers}, -editor = {L. Rosenhead}, -publisher = {Oxford University Press}, -year = 1963 -} - -@article{chorin:1978, - title = {Vortex sheet approximation of boundary-layers}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {A. J. Chorin}, - journal = {Journal Of Computational Physics}, - volume = {27}, - number = {3}, - pages = {428-442}, - year = {1978}, - issn = {00219991, 10902716} -} - -@article{fishelov:1990, - title = {Vortex methods for slightly viscous three-dimensional flow}, - language = {English}, - author = {Fishelov, D.}, - journal = {SIAM Journal on Scientific and Statistical Computing}, - volume = {11}, - number = {3}, - pages = {399-424}, - year = {1990}, - issn = {01965204, 21683417}, - abstract = {Vortex methods have been used extensively for two-dimensional problems, though their most efficient extension to three-dimensional problems is still under investigation. A method that evaluates the vorticity by exactly differentiating an approximate velocity field is applied. Numerical results are presented for a flow past a semi-infinite plate, and they demonstrate three-dimensional features of the flow and transition to turbulence.} -} -@article{chang:1991, - title = {A numerical study of flow around an impulsively started circular cylinder by a deterministic vortex method}, - language = {English}, - author = {Chang, C.-{C}.h and Chern, R.-L.}, - journal = {Journal of Fluid Mechanics}, - volume = {233}, - pages = {243-263}, - year = {1991}, - issn = {00221120, 14697645}, - abstract = {Impulsively started flow around a circular cylinder at various Reynolds numbers is studied by a deterministic hybrid vortex method. The key feature of the method consists in solving the viscous vorticity equation by interlacing a finite-difference method for diffusion and a vortex-in-cell method for convection. The vorticity is updated along the surface of the cylinder to satisfy the no-slip condition. The present method is basically different from previous applications of vortex methods, which are primarily in the context of random vortex algorithms. The Reynolds numbers of the flows under investigation range from 300 to 106. Numerical results are compared with analytical solutions at small times, and compared with finite-difference solutions and flow visualization results at relatively long times} -} - -@article{shankar:1996, - title = {A new diffusion procedure for vortex methods}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Shankar, S. and VanDommelen, L.}, - journal = {JOURNAL OF COMPUTATIONAL PHYSICS}, - volume = {127}, - number = {1}, - pages = {88-109}, - year = {1996}, - issn = {00219991, 10902716}, - abstract = {A new method is proposed for simulating diffusion in vortex methods for two-dimensional incompressible Rows. The method resolves length scales up to the spacing of the vortices. The grid-free nature of vortex methods is fully retained and the distribution of the vortices can be irregular. It is shown for the Stokes equations that in principle, the method can have any order of accuracy. It also conserves circulation, linear, and angular momentum. The method is based on exchanging a conserved quantity between arbitrary computational points. This suggests that extensions to more general flows may be possible. For the two-dimensional incompressible flows studied, circulation is exchanged between vortices to simulate diffusion. The amounts of circulation exchanged must satisfy a linear system of equations. Based on stability considerations, the exchanged amounts should further be positive. A procedure to find a solution to this problem is formulated using linear programming techniques. To test the method, the decay processes of a single point Vortex and of a counterrotating pair of point vortices are computed. Current limitations of the method are discussed. (C) 1996 Academic Press, Inc.}, - doi = {10.1006/jcph.1996.0160} -} -@article{garcia:2013, -title = "A strong viscous-inviscid interaction model for rotating airfoils", -publisher = "John/Wiley \& Sons Ltd.", -author = "{Ramos Garc\'ia}, N\'estor and S{\o}rensen, {Jens N{\o}rk{\ae}r} and Shen, {Wen Zhong}", -year = "2013", -journal = "Wind Energy", -issn = "1095-4244", -} - -@article{prochazka:1998, - title = {Structure and stability of non-symmetric Burgers vortices}, - author = {Pullin, D. I. and Prochazka, Aurelius}, - journal = {Journal of Fluid Mechanics}, - volume = {363}, - pages = {199-228}, - year = {1998}, - issn = {00221120, 14697645} -} -@article{buntine:1989, - title = {Merger and cancellation of strained vortices}, - language = {English}, - author = {Buntine, James D. and Pullin, D.I.}, - journal = {Journal of Fluid Mechanics}, - volume = {205}, - pages = {263-295}, - year = {1989}, - issn = {00221120, 14697645}, - abstract = {Authors study numerically the behaviour of and interaction between Burgers vortices - a known equilibrium solution to the Navier-Stokes equations which incorporates a balance between viscous diffusion and strain intensification of vorticity. A hybrid spectral/finite-difference method is employed to solve the Navier-Stokes equations in vorticity-stream function form for a unidirectional vorticity field on an infinite domain in the presence of a uniform three-dimensional strain field, one principal axis of which is parallel to the vorticity. Merging of two strained vortices is studied over a range of Reynolds numbers Re = Γ/2Ï€v = 10-1280, and the results are used to calculate an energy spectrum for three-dimensional, homogeneous turbulence. The cancellation of two strained vortices with opposing circulation is investigated for Reynolds numbers Re = Γ0/2Ï€v = 0.1-160 (Γ0 is the circulation about one vortex), over a range of strain rates in the direction parallel to the line joining the vortex centres. A solution of the Navier-Stokes equations describing vorticity cancellation in the strain-induced collision of vortex layers (Kambe 1984) is used to estimate the asymptotic, timewise decay of circulation for each vortex. Good agreement with the present numerical results is obtained. Vortex core pressures calculated during the cancellation event are compared to a simple analytical model based on Moore & Saffman (1971).} -} -@article{ledizes:2002, - title = {Viscous interactions of two co-rotating vortices before merging}, - language = {English}, - publisher = {Cambridge University Press}, - author = {Le Dizes, S. and Verga, A.}, - journal = {Journal of Fluid Mechanics}, - volume = {467}, - pages = {389-410}, - year = {2002}, - issn = {00221120, 14697645} -} - - - -@INPROCEEDINGS{spalart:1984, - title = {Two recent extensions of the vortex method}, - booktitle={AIAA 22nd Aerospace Sciences Meeting}, - author = {Spalart, P. R.}, - year = {1984}, - abstract = {The vortex method, coupled to an integral boundary-layer solver, is applied to the numerical simulation of high-Reynolds-number, separated flows in two new cases: a bluff body in a wind tunnel and flow in a cascade. In the bluff body case, the blockage effect of the tunnel walls is included approximately, assuming an inviscid boundary condition at the walls. The resulting increase in drag is computed, and compares well with a small-disturbance theory and with experiments. The results for flow in a cascade are compared with results from two finite-difference codes for a single-blade case, and good agreement is found. When a staggered cascade is treated with five independent blades, the simulation predicts rotating stall, depending on the angle of attack, and the essential features of the flow are correct. The sensitivity of this phenomenon to various parameters is studied and the stall boundary is found.} -} -@article{ploumhans:2000, -title = {{Vortex Methods for High-Resolution Simulations of Viscous Flow Past Bluff Bodies of General Geometry}}, -author = {Ploumhans, P and Winckelmans, G S}, -doi = {10.1006/jcph.2000.6614}, -journal = {Journal of Computational Physics}, -keywords = {general geometry,particle redistribution,viscous flow,vortex methods}, -pages = {354--406}, -volume = {406}, -year = {2000} -} - -@article{ploumhans:2002, - title = {Vortex methods for direct numerical simulation of three-dimensional bluff body flows: Application to the sphere at Re=300, 500, and 1000}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Ploumhans, P. and Winckelmans, GS and Salmon, JK and Leonard, A. and Warren, MS}, - journal = {Journal Of Computational Physics}, - volume = {178}, - number = {2}, - pages = {427-463}, - year = {2002}, - issn = {00219991, 10902716}, - abstract = {Recent contributions to the 3-D vortex methods are presented. Following Cottet, the particles strength exchange (PSE) scheme for diffusion is modified in the vicinity of solid boundaries to avoid a spurious vorticity flux and to enforce a zero-normal component of vorticity during the convection/PSE step. The vortex sheet algorithm used to enforce the no-slip boundary condition through a vorticity flux at the boundary and the technique used to perform accurate redistributions in the presence of bodies of general geometry are extended from their 2-D counterpart. To perform simulations with nonuniform resolution, a mapping of the redistribution lattice is used. Computational efficiency is attained through the use of parallel tree codes based on multipole expansions of vortex particles and of vortex panels. The method is validated, by comparisons with other authors' results, on the flow past a sphere at Re = 300. It is then applied to compute the flow at Re = 500 and 1000. (C) 2002 Elsevier Science (USA).}, - doi = {10.1006/jcph.2002.7035} -} - - -@article{ploumhans:2004, -author = {Ploumhans, P and Daeninck, G and Winckelmans, G}, -title = {{Simulation of Three-Dimensional Bluff-Body Flows Using the Vortex Particle and Boundary Element Methods}}, -journal = {Systems Engineering}, -keywords = {3-d bluff-body flows,boundary element method,dns,les,vortex element method}, -number = {i}, -pages = {117--131}, -year = {2004} -} - -@PHDTHESIS{daeninck:phdthesis, -author = {G. Daeninck}, -title = {{Developments in hybrid approaches: -Vortex method with known separation location Vortex method with near-wall Eulerian solver -RANS-LES coupling}}, -school = {Universit\'e catholique de Louvain, Facult\'e des sciences appliiqu\'ees}, -year = {2006} -} - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - COMPRESSIBILITY and ADVANCED FLUDYN -% --------------------------------------------------------------------------------{ - -@TECHREPORT{morino:1974, - author = {L. Morino}, - title = {A General theory of unsteady compressible potential aerodynamics}, - institution = {NASA-CR-2464}, - year = {1974}, - otherinfo = {} -} -@article{eldredge:2002, - title = {A vortex particle method for two-dimensional compressible flow}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Eldredge, JD and Colonius, T. and Leonard, A.}, - journal = {Journal of computational physics}, - volume = {179}, - number = {2}, - pages = {371-399}, - year = {2002}, - issn = {00219991, 10902716}, - abstract = {A vortex particle method is developed for simulating two-dimensional, unsteady compressible The method uses the Helmholtz decomposition of the velocity field to separately treat the irrotational and solenoidal portions of the Now, and the particles are allowed to change volume to conserve mass. In addition to having vorticity and dilatation properties, the particles also carry density, enthalpy, and entropy. The resulting evolution equations contain terms that are computed with techniques used in some incompressible methods. Truncation of unbounded domains via a nonreflecting boundary condition is also considered. The fast multipole method is adapted to compressible particles in order to make the method computationally efficient. The new method is applied to several problems, including sound generation by corotating vortices and generation of vorticity by baroclinic torque. (C) 2002 Elsevier Science (USA).}, - doi = {10.1006/jcph.2002.7060} -} - -@article{nitsche:2002, - title = {Extension of the gridless vortex method into the compressible flow regime}, - language = {English}, - publisher = {TAYLOR \& FRANCIS LTD}, - author = {Nitsche, M. and Strickland, JH}, - journal = {Journal of turbulence}, - volume = {3}, - pages = {-}, - year = {2002}, - issn = {14685248}, - abstract = {This paper proposes an extension of the gridless vortex method into the compressible flow regime. The proposed method consists of tracking particles in the flow that carry vorticity, divergence, temperature and density. The particle velocity is given by the Helmholtz decomposition law, which is approximated using the trapezoid rule. The evolution equations for the particle vorticity, divergence, temperature and density are evaluated using finite differences or least squares approximations for all derivatives. The method is applied to an isentropic model problem and compared to solutions obtained using an Eulerian scheme. Difficulties with the least squares approximation and with boundary conditions are discussed.} -} - -@article{knio:1992, - title = {Vortex simulation of a 3-dimensional reacting shear-layer with infinite-rate kinetics}, - language = {English}, - publisher = {AMER INST AERONAUT ASTRONAUT}, - author = {Knio, OM and Ghoniem, AF}, - journal = {AIAA Journal}, - volume = {30}, - number = {1}, - pages = {105-116}, - year = {1992}, - issn = {00011452, 1533385x}, - abstract = {The three-dimensional transport element method is extended to solve the conservation equations for reacting flow. The numerical scheme belongs to an adaptive, Lagrangian class of field methods in which computational effort is concentrated in zones of finite vorticity and chemical reaction. We use the low Mach number approximation of combustion and restrict our attention to the case of diffusion flames with no heat release. A single-step, second-order, infinite-rate kinetics chemical reaction model is employed. The scheme is applied to study the effect of flow-induced instabilities on the reaction field in a temporal shear layer. Results are obtained in the high Peclet number regime for a wide range of Damkohler numbers. Changes in the reaction field are related to either the entrainment or the strain field associated with the saturation of the instabilities. With increasing Damkohler number, the reaction region changes from a distributed zone embedded within spanwise and streamwise vortices to a thin sheet surrounding their cores. The product concentration always exhibits strong similarity to the vorticity distribution, realizing its highest values in zones of high vorticity and falling rapidly in regions where the vorticity is small. Variation of the Peclet number yields minor changes in the product distribution and in the reaction zone structure, but strongly affects product formation rates.} -} - - - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - REDISTRIBUTION - MERGING - DIV-FREE -% --------------------------------------------------------------------------------{ -@article{rossi:1997, -author = {Rossi, L.}, -title = {Merging Computational Elements in Vortex Simulations}, -journal = {SIAM Journal on Scientific Computing}, -volume = {18}, -number = {4}, -pages = {1014-1027}, -year = {1997}, -doi = {10.1137/S1064827595285287}, -URL = {http://epubs.siam.org/doi/abs/10.1137/S1064827595285287}, -eprint = {http://epubs.siam.org/doi/pdf/10.1137/S1064827595285287} -} -@article{rossi:1996, - title = {Resurrecting core spreading vortex methods: A new scheme that is both deterministic and convergent}, - language = {English}, - publisher = {SIAM PUBLICATIONS}, - author = {Rossi, L.}, - Journal = {SIAM Journal On Scientific Computing}, - volume = {17}, - number = {2}, - pages = {370-397}, - year = {1996}, - issn = {10648275, 10957197}, - abstract = {A basic core spreading vortex scheme is inconsistent but can be corrected with a splitting algorithm, yielding a deterministic and efficient grid-free method for viscous flows. The splitting algorithm controls the consistency error by maintaining small vortex core sizes. Routine analysis will show that the core spreading method coupled to this splitting process is convergent in L(p) spaces. Analysis of the linearized residual operator establishes the uniform convergence of this method when the exact flow field is known. A sequence of examples demonstrates the sensitivity of the method to numerical parameters as the computed solution converges to the exact solution. These experimental results agree with the linear convergence theory. Finally, direct comparisons between the traditional random walk vortex method and the new method indicate that the new method has several advantages while requiring the same computational effort.} -} - - -@article{cottet:1999, - title = {Multi-purpose regridding in vortex methods}, - language = {English}, - author = {Cottet, G.-H. and Ould Salihi, M.-L. and El Hamroui, M.}, - journal = {ESAIM: Proceedings}, - volume = {7}, - pages = {94-103}, - year = {1999}, - issn = {1270900x}, - doi = {10.1051/proc:1999009} -} - -@article{pedrizzetti:1992, - title = {Insight into singular vortex flows}, - language = {English}, - publisher = {ELSEVIER SCIENCE BV}, - author = {Pedrizzetti, G.}, - journal = {Fluid Dynamics Research}, - volume = {10}, - number = {2}, - pages = {101-115}, - year = {1992}, - issn = {01695983, 18737005}, - abstract = {The method of three-dimensional vortex singularities is analyzed. The fact that it does not represent a weak solution of the Euler equations has little bearing on its validity as an operative model. Other evolution inconsistencies are a major problem. The non-solenoidality of the vortex field is analyzed and a linear filtering feedback procedure, requiring no additional computations, is introduced to allow alignment with the reconstructed solenoidal vorticity field. A rough estimation of the dissipative effect during Vortex reconnection has shown a finite viscous effect that is implicitly present in the model, growing with stretching, representing the mechanism of shifting to reconnected topologies without observing strong velocity gradients. The dividing vorton method is rearranged in order to allow the quantized reproduction of a predefined core evolution law, an error estimation, due to the corpuscularity of the field, is given. Two different numerical computations are performed corresponding to a weak and a strong vortex interaction. The improvements are tested, and confrontations with existing numerical and experimental results are performed showing good agreement. The possibility of the singular vortex flow serving as a rough, but simple, model for verv high Reynolds number complex flows is discussed.}, - doi = {10.1016/0169-5983(92)90011-K} -} -@article{knio:1990, - title = {Numerical study of a three-dimensional vortex method}, - language = {English}, - author = {Knio, O. M. and Ghoniem, A. F.}, - journal = {Journal of Computational Physics}, - volume = {86}, - number = {1}, - pages = {75-106}, - year = {1990}, - issn = {00219991, 10902716}, - abstract = {A three-dimensional vortex method based on the discretization of the vorticity field into vortex vector elements of finite spherical cores is constructed for the simulation of inviscid incompressible flow. The velocity is obtained by summing the contribution of individual elements using the Biot-Savart law desingularized according to the vorticity cores. Vortex elements are transported in Lagrangian coordinates, and vorticity is redistributed, when necessary, among larger number of elements arranged along its direction. The accuracy and convergence of the method are investigated by comparing numerical solutions to analytical results on the propagation and stability of vortex rings. Accurate discretization of the initial vorticity field is shown to be essential for the prediction of the linear growth of azimuthal instability waves on vortex rings. The unstable mode frequency, growth rate and shape are in agreement with analytical results. The late stages of evolution of the instability show the generation of small scales in the form of hair-pin vortex structures. The behavior of the turbulent vortex ring is in good qualitative agreement with experimental data.} -} - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - TURBULENCE - LES -% --------------------------------------------------------------------------------{ - -@article{synge:1943, - title = {On a statistical model of isotropic turbulence}, - author = {Synge and Lin}, - journal = {Transactions of the Royal Society of Canada}, - volume = {37}, - pages = {45-79}, - year = {1943}, - issn = {00359122}, - abstract = {A statistical theory of homogeneous isotropic turbulence is developed by regarding the turbulent fluctuations as due to Hill's vortices moving about chaotically. The calculated velocity correlation tensor of the second order satisfies the general relations of von Kaacutermaacuten, and the shape of the correlation function is in general agreement with experimental results.} -} - -@article{saffman:1997, - title = {Vortex models of isotropic turbulence}, - language = {English}, - publisher = {ROYAL SOC}, - author = {Saffman, PG}, - journal = {Philosophical transactions of the royal society a-mathematical physical and engineering sciences}, - volume = {355}, - number = {1731}, - pages = {1949-1956}, - year = {1997}, - issn = {1364503x, 14712962, 1364503X}, - abstract = {The prospects of vortex models of the fine scales of isotropic turbulence are surveyed. These begin with the calculation by Synge \& Lin in 1943 of longitudinal velocity correlations, using an ensemble of Hill spherical vortices, and are followed by the work of Townsend (1951) employing Burgers vortices to study dissipation range scales. Recent developments by the author and Professor D. I. Pullin based on Lundgren's (1982) work on randomly orientated stretched spiral vortex solutions of the Navier-Stokes equations, for the calculation of higher order moments of one-point velocity gradient statistics and longitudinal velocity correlation functions, will be considered.} -} - -@article{meneveau:1996, - title = {A Lagrangian dynamic subgrid-scale model of turbulence}, - author = {Meneveau, Charles and Lund, Thomas S. and Cabot, William H.}, - journal = {Journal of Fluid Mechanics, J. Fluid Mech}, - volume = {319}, - pages = {353-385}, - year = {1996}, - issn = {00221120}, - abstract = {The dynamic model for large-eddy simulation of turbulence samples information from the resolved velocity field in order to optimize subgrid-scale model coefficients. When the method is used in conjunction with the Smagorinsky eddy-viscosity model, and the sampling process is formulated in a spatially local fashion, the resulting coefficient field is highly variable and contains a significant fraction of negative values. Negative eddy viscosity leads to computational instability and as a result the model is always augmented with a stabilization mechanism. In most applications the model is stabilized by averaging the relevant equations over directions of statistical homogeneity. While this approach is effective, and is consistent with the statistical basis underlying the eddy-viscosity model, it is not applicable to complex-geometry inhomogeneous flows. Existing local formulations, intended for inhomogeneous flows, are most commonly stabilized by artificially constraining the coefficient to be positive. In this paper we introduce a new dynamic model formulation, that combines advantages of the statistical and local approaches. We propose to accumulate the required averages over flow pathlines rather than over directions of statistical homogeneity. This procedure allows the application of the dynamic model with averaging to inhomogeneous flows in complex geometries. We analyse direct numerical simulation data to document the effects of such averaging on the Smagorinsky coefficient. The characteristic Lagrangian time scale over which the averaging is performed is chosen based on measurements of the relevant Lagrangian autocorrelation functions, and on the requirement that the model be purely dissipative, guaranteeing numerical stability when coupled with the Smagorinsky model. The formulation is tested in forced and decaying isotropic turbulence and in fully developed and transitional channel flow. In homogeneous flows, the results are similar to those of the volume-averaged dynamic model, while in channel flow, the predictions are slightly superior to those of the spatially (planar) averaged dynamic model. The relationship between the model and vortical structures in isotropic turbulence, as well as ejection events in channel flow, is investigated. Computational overhead is kept small (about 10% above the CPU requirements of the spatially averaged dynamic model) by using an approximate scheme to advance the Lagrangian tracking through first-order Euler time integration and linear interpolation in space.} -} -@article{meneveau:1997, - title = {The dynamic Smagorinsky model and scale-dependent coefficients in the viscous range of turbulence}, - language = {English}, - publisher = {AMER INST PHYSICS}, - author = {Meneveau, C. and Lund, TS}, - journal = {PHYSICS OF FLUIDS}, - volume = {9}, - number = {12}, - pages = {3932-3934}, - year = {1997}, - issn = {10706631, 10897666}, - abstract = {The standard dynamic procedure is based on the scale-invariance assumption that the model coefficient C is the same at the grid and test-filter levels. In many applications this condition is not met. We consider the case when the filter-length, Delta, approaches the Kolmogorov scale, eta, and C(Delta --> eta) --> 0. Using filtered direct numerical simulation data, we show that the standard dynamic model yields the coefficient corresponding to the test-filter-scale (alpha Delta)instead of the grid scale (Delta). Several approaches to account for scale dependence in the dynamic Smagorinsky model are considered, and the most robust of these is tested in large eddy simulation of forced isotropic turbulence at various Reynolds numbers. (C) 1997 American Institute of Physics. [S1070-6631(97)01412-8].}, - doi = {10.1063/1.869493} -} -@article{aivazis:2001, - title = {On velocity structure functions and the spherical vortex model for isotropic turbulence}, - language = {English}, - publisher = {AMER INST PHYSICS}, - author = {Aivazis, KA and Pullin, DI}, - journal = {Physics of Fluids}, - volume = {13}, - number = {7}, - pages = {2019-2029}, - year = {2001}, - issn = {10706631, 10897666}, - abstract = {We investigate a stochastic model for homogeneous, isotropic turbulence based on Hill's spherical vortex. This is an extension of the method of Synge and Lin [Trans. R. Soc. Can. 37, 45 (1943)], to the calculation of higher even-order velocity structure functions. Isotropic turbulence is represented by a homogeneous distribution of eddies, each modeled by a spherical vortex. The cascade process of eddy breakdown is incorporated into the statistical model through an average over an assumed log-normal distribution of vortex radii. We calculate the statistical properties of the model, in particular order-n velocity structure functions defined by rank-n tensors for the ensemble average of a set of incremental differences in velocity components. We define D-i...s=< (u(i)(x+xi)-u(i)(x))...(u(s)(x+xi)-u(s)(x))>, where <...> denotes the ensemble average. Specifically D-ij, D-ijkl, and the longitudinal component of D-ijklmn are calculated directly from the spherical vortex ensemble. Matching the longitudinal components of D-ij and D-ijkl with experimental results fixes two independent model parameters. The lateral and mixed components of D-ijkl and the longitudinal component of D-ijklmn are then model predictions. (C) 2001 American Institute of Physics.}, - doi = {10.1063/1.1367870} -} - - - @article{albukrek:2002, - title = {Divergence-Free Wavelet Analysis of Turbulent Flows}, - language = {English}, - publisher = {SPRINGER/PLENUM PUBLISHERS}, - author = {Albukrek, Cem M. and Urban, Karsten and Rempfer, Dietmar and Lumley, John L.}, - Journal = {Journal Of Scientific Computing}, - volume = {17}, - number = {1-4}, - pages = {49-66}, - year = {2002}, - issn = {08857474, 15737691}, - abstract = {In this paper we study the application of divergence-free wavelet bases for the analysis of incompressible turbulent flows and perform several experiments. In particular, we analyze various nominally incompressible fields and study the influence of compressible perturbations due to experimental and computational errors. In addition, we investigate the multiscale structure of modes obtained from the Proper Orthogonal Decomposition (POD) method. Finally, we study the divergence-free wavelet compression of turbulent flow data and present results on the energy recovery. Moreover, we utilize wavelet decompositions to investigate the regularity of turbulent flow fields in certain non-classical function spaces, namely Besov spaces. In our experiments, we have observed significantly higher Besov regularity than Sobolev regularity, which indicates the potential for adaptive numerical simulations.}, - doi = {10.1023/A:1015184110888} -} -@article{henshaw:1989, - title = {On the smallest scale for the incompressible Navier-Stokes equations}, - language = {English}, - publisher = {Springer-Verlag}, - author = {Henshaw, W. D. and Kreiss, H. O. and Reyna, L. G.}, - journal = {Theoretical and Computational Fluid Dynamics}, - volume = {1}, - number = {2}, - pages = {65-95}, - year = {1989}, - issn = {09354964, 14322250}, - abstract = {We prove that, for solutions to the two- and three-dimensional incompressible Navier-Stokes equations, the minimum scale is inversely proportional to the square root of the Reynolds number based on the kinematic viscosity and the maximum of the velocity gradients. The bounds on the velocity gradients can be obtained for two-dimensional flows, but have to be assumed in three dimensions. Numerical results in two dimensions are given which illustrate and substantiate the features of the proof. Implications of the minimum scale result, to the decay rate of the energy spectrum are discussed.}, - doi = {10.1007/BF00272138} -} -@article{feynman:1957, - title = {Application of Quantum Mechanics to Liquid Helium}, - language = {English}, - author = {Feynamn, R.P.}, - journal = {Progress of Low Temperature Physics}, - volume = {1}, - pages = {26-53}, - year = {1957} -} -@article{smith:1989, - title = {Postcritical flow around a circular cylinder by the vortex method}, - language = {English}, - author = {Smith, P.A. and Stansby, P.K.}, - journal = {Journal of Fluids and Structures}, - volume = {3}, - number = {3}, - pages = {275-291}, - year = {1989}, - issn = {08899746, 10958622}, - abstract = {Unsteady flow around a circular cylinder at postcritical Reynolds numbers is simulated by the vortex method with a boundary-layer turbulence model. In the fractional step scheme, the vortex-in-cell method with a polar mesh is used for the convection of point vortices and random walks are superimposed to simulate turbulent mixing in the boundary region. The eddy viscosity is determined from the vorticity distribution through an algebraic turbulence model. Transport of vorticity, in a spatially varying viscosity field, requires theoretical development of the random-walk method. Convergence tests for the symmetric early stages of impulsively started flow are used to determine appropriate numerical parameters. The computation is then advanced to longer times, allowing the flow to reach a stationary, nearly periodic state. The mean pressure distribution and the vortex shedding frequency compare reasonably with experimental data.} -} -@article{chorin:1990, - title = {Hairpin removal in vortex interactions}, - language = {English}, - author = {A. J. Chorin}, - journal = {Journal of Computational Physics}, - volume = {87}, - number = {2}, - pages = {496}, - year = {1990}, - issn = {00219991, 10902716} -} -@article{chorin:1993, - title = {Hairpin removal in vortex interactions. II}, - language = {English}, - author = {Chorin, A. J.}, - journal = {Journal of Computational Physics}, - volume = {107}, - number = {1}, - pages = {1-9}, - year = {1993}, - issn = {00219991, 10902716}, - abstract = {For pt.I, see ibid., vol.91, p.1 (1990). A vortex method in three dimensions is simplified through the removal of small folds (`hairpins'). The procedure is justified as a real-space renormalization, within a framework provided by recent results on the statistical equilibria of vortex filaments. An application to a vortex ring is carried out. Applications to other numerical methods as well as open questions are discussed.}, - doi = {10.1006/jcph.1993.1120} -} -@article{cottet:1996, - title = {Artificial viscosity models for vortex and particle methods}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Cottet, GH}, - Journal = {Journal Of Computational Physics}, - volume = {127}, - number = {2}, - pages = {299-308}, - year = {1996}, - issn = {00219991, 10902716}, - abstract = {The analysis of the truncation error produced by particle methods leads to artificial viscosity schemes. For vortex methods, they can be seen as eddy viscosity models, with anisotropic non-linear diffusion tensors. Numerical experiments on decaying incompressible 20 turbulence illustrate the efficiency of the method, and in particular the fact that the diffusion stops acting in large coherent eddies. For compressible flows, this approach allows us to understand the oscillations produced by particle methods and to derive new artificial viscosity schemes. (C) 1996 Academic Press, Inc.}, - doi = {10.1006/jcph.1996.0176} -} - -@article{borue:1998, - title = {Local energy flux and subgrid-scale statistics in three-dimensional turbulence}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {Borue, V. and Orszag, SA}, - Journal = {Journal Of Fluid Mechanics}, - volume = {366}, - pages = {1-31}, - year = {1998}, - issn = {00221120, 14697645}, - abstract = {Statistical properties of the subgrid-scale stress tensor, the local energy flux and filtered velocity gradients are analysed in numerical simulations of forced three-dimensional homogeneous turbulence. High Reynolds numbers are achieved by using hyperviscous dissipation. It is found that in the inertial range the subgrid-scale stress tensor and the local energy flux allow simple parametrization based on a tensor eddy viscosity. This parametrization underlines the role that negative skewness of filtered velocity gradients plays in the local energy transfer. It is found that the local energy flux only weakly correlates with the locally averaged energy dissipation rate. This fact reflects basic difficulties of large-eddy simulations of turbulence, namely the possibility of predicting the locally averaged energy dissipation rate through inertial-range quantities such as the local energy flux is limited. Statistical properties of subgrid-scale velocity gradients are systematically studied in an attempt to reveal the mechanism of local energy transfer.} -} -@article{mansfield:1998, - title = {A dynamic LES scheme for the vorticity transport equation: Formulation and a priori tests}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Mansfield, JR and Knio, OM and Meneveau, C.}, - journal = {Journal Of Computational Physics}, - volume = {145}, - number = {2}, - pages = {693-730}, - year = {1998}, - issn = {00219991, 10902716}, - abstract = {This work aims at the development of a Lagrangian large eddy simulation (LES) scheme. The scheme is based on the filtered vorticity transport equation and on modeling the effects of subfilter scale (SFS) velocity and vorticity fluctuations using a dynamic eddy diffusivity model. The dynamic implementation of the model relies on multiple filtering in order to determine model coefficients from the resolved data. The performance of the dynamic SFS model is examined using a priori tests that are based on direct numerical simulations of forced, homogeneous, isotropic turbulence. The tests show a fair correlation of the model with SFS convection of vorticity. In addition, the computed value of the dynamic model coefficient is in good agreement with predictions based on enstrophy balances. Finally, the direct numerical simulation data is used to compare a three-dimensional particle representation of the model with spectral evaluations. The tests show that when the particle representation is sufficiently resolved, the Lagrangian model predictions are in good agreement with spectral results. (C) 1998 Academic Press.}, - doi = {10.1006/jcph.1998.6051} -} - - -@article{mansfield:1999, - title = {Dynamic LES of colliding vortex rings using a 3D vortex method}, - language = {English}, - publisher = {ACADEMIC PRESS INC}, - author = {Mansfield, JR and Knio, OM and Meneveau, C.}, - Journal = {Journal Of Computational Physics}, - volume = {152}, - number = {1}, - pages = {305-345}, - year = {1999}, - issn = {00219991, 10902716}, - abstract = {A Lagrangian particle method is used to simulate the collision of coaxial vortex rings in three dimensions. The scheme combines a 3D, adaptive, viscous, vortex element method with a dynamic eddy viscosity model of the subfilter scale stresses. The vortex method is based on discretization of the vorticity field into Lagrangian vortex elements and transport of the elements along particle trajectories. The computations incorporate a mesh redistribution algorithm which creates new elements in regions of high strain and locally redistributes the vorticity field into a smaller number of elements when particles tend to cluster. The subfilter scale vorticity model consists of approximating the effect of unresolved vorticity stresses using a gradient-diffusion eddy viscosity model, following the development in Part I (J. R. Mansfield, O. M. Knio, and C. Meneveau, J. Comput. Phys. 145, 693 (1998)). Dynamic implementation of the model relies on determining model coefficients through test-filtering the Lagrangian particle representation of the filtered vorticity field. Computations of ring collisions show that, combined, the mesh redistribution scheme and subfilter scale model result in a robust scheme that can be extended into the late stages of evolution of the flow. In addition, it is shown that the Lagrangian LES scheme captures several experimentally observed features of the ring collisions, including turbulent breakdown into small-scale structures and the generation of small-scale radially propagating vortex rings. (C) 1999 Academic Press.}, - doi = {10.1006/jcph.1999.6258} -} - -@article{nicoud:1999, - title = {Subgrid-scale stress modelling based on the square of the velocity gradient tensor}, - language = {English}, - publisher = {SPRINGER}, - author = {Nicoud, F. and Ducros, F.}, - journal = {FLOW TURBULENCE AND COMBUSTION}, - volume = {62}, - number = {3}, - pages = {183-200}, - year = {1999}, - issn = {13866184, 15731987}, - abstract = {A new subgrid scale model is proposed for Large Eddy Simulations in complex geometries. This model which is based on the square of the velocity gradient tensor accounts for the effects of both the strain and the rotation rate of the smallest resolved turbulent fluctuations. Moreover it recovers the proper y(3) near-wall scaling for the eddy viscosity without requiring dynamic procedure. It is also shown from a periodic turbulent pipe flow computation that the model can handle transition.}, - doi = {10.1023/a:1009995426001} -} -@article{daeninck:2002, - title = {Simulation of three-dimensional bluff-body flows using vortex methods: from direct numerical simulation towards large-eddy simulation modelling}, - language = {English}, - publisher = {IOP}, - author = {Daeninck, G. and Ploumhans, P. and Winckelmans, G. S.}, - journal = {Journal of Turbulence}, - volume = {3}, - year = {2002}, - issn = {14685248}, - abstract = {Recent contributions to the three-dimensional vortex method for bluff-body flows are presented. The numerical method - a vortex method combined with a boundary element method - is briefly reviewed. It is applied to direct numerical simulation of the flow past a sphere (Re 300 and 1000). The on-going work to extend the method towards vortex-based large-eddy simulation for high Reynolds number flows is also presented. Preliminary results for the flow past a hemisphere are discussed.} -} - -@article{cottet:2002, - title = {A comparison of spectral and vortex methods in three-dimensional incompressible flows}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Cottet, GH and Michaux, B. and Ossia, S. and VanderLinden, G.}, - journal = {Journal Of Computational Physics}, - volume = {175}, - number = {2}, - pages = {702-712}, - year = {2002}, - issn = {00219991, 10902716, 01617389}, - abstract = {We present a comparison of the performance of vortex and pseudospectral methods in two reference flows: a homogeneous turbulent flow at low Reynolds number and a vortex reconnection case at a moderate Reynolds number. The results should contribute to a better understanding of the accuracy of vortex methods in both resolved and underresolved simulations. (C) 2002 Elsevier Science (USA).}, - doi = {10.1006/jcph.2001.6963} -} - -@article{cottet:2003, - title = {Vorticity dynamics and turbulence models for Large-Eddy Simulations}, - language = {eng}, - author = {Cottet, Georges Henri and Jiroveanu, Delia and Michaux, Bertrand}, - journal = {Mathematical Modelling and Numerical Analysis, Math. Model. Numer. Anal}, - volume = {37}, - number = {1}, - pages = {187-207}, - year = {2003}, - issn = {0764583x}, - abstract = {We consider in this paper the problem of finding appropriate models for Large Eddy Simulations of turbulent incompressible flows from a mathematical point of view. The Smagorinsky model is analyzed and the vorticity formulation of the Navier-Stokes equations is used to explore more efficient subgrid-scale models as minimal regularizations of these equations. Two classes of variants of the Smagorinsky model emerge from this approach: a model based on anisotropic turbulent viscosity and a selective model based on vorticity angles. The efficiency of these models is demonstrated by comparisons with reference results on decaying turbulence experiments.}, - doi = {10.1051/m2an:2003013} -} - -@article{koumoutsakos:2005, - title = {Multiscale flow simulations using particles}, - language = {English}, - publisher = {ANNUAL REVIEWS}, - author = {Koumoutsakos, P.}, - journal = {ANNUAL REVIEW OF FLUID MECHANICS}, - volume = {37}, - pages = {457-487}, - year = {2005}, - issn = {00664189, 15454479}, - abstract = {Flow simulations are one of the archetypal multiscale problems. Simulations of turbulent and unsteady separated flows have to resolve a multitude of interacting scales, whereas molecular phenomena determine the structure of shocks and the validity of the no-slip boundary condition. Particle simulations of continuum and molecular phenomena can be formulated by following the motion of interacting particles that carry the physical properties of the flow. In this article we review Lagrangian, multiresolution, particle methods such as vortex methods and smooth particle hydrodynamics for the simulation of continuous flows and molecular dynamics for the simulation of flows at the atomistic scale. We review hybrid molecular-continuum simulations with an emphasis on the computational aspects of the problem. We identify the common computational characteristics of particle methods and discuss their properties that enable the formulation of a systematic framework for multiscale flow simulations.}, - doi = {10.1146/annurev.fluid.37.061903.175753} -} - - - -@article{winckelmans:2005, -title = {{Vortex methods and their application to trailing wake vortex simulations}}, -author = {Winckelmans, Gr\'{e}goire and Cocle, Roger and Dufresne, Louis and Capart, Rapha\"{e}l}, -doi = {10.1016/j.crhy.2005.05.001}, -keywords = {direct numerical,lagrangian methods,large-eddy simulation,mots-cl\'{e}s,m\'{e}thodes de particules tourbillon,m\'{e}thodes lagrangiennes,m\'{e}thodes particules-grille,simulation,simulation des grandes \'{e}chelles,simulation num\'{e}rique directe,turbulent flows,unsteady flows,vortex particle methods,vortex-in-cell methods,\'{e}coulements instationnaires,\'{e}coulements turbulents}, -pages = {467--486}, -volume = {6}, -year = {2005}, -journal ={C. R. Physique} -} - -@article{jeanmart:2007, - title = {Investigation of eddy-viscosity models modified using discrete filters: A simplified "regularized variational multiscale model" and an "enhanced field model"}, - language = {English}, - publisher = {AMER INST PHYSICS}, - author = {Jeanmart, H. and Winckelmans, G.}, - journal = {Physics Of Fluids}, - volume = {19}, - number = {5}, - pages = {-}, - year = {2007}, - issn = {10706631, 10897666}, - abstract = {Subgrid-scale (SGS) models for large-eddy simulation (LES) having the formalism of an effective eddy-viscosity model, but that operates on a modified velocity field, are further evaluated and new ones are proposed. The modified field is obtained using regular filtering of the LES field carried out in physical space. This is actually done by using a discrete and compact operator (only using nearest neighbors values), eventually iterated; this ensures that the proper filtering behavior is preserved, even for near wall points. The first model investigated here is inspired by the variational multiscale approach originally proposed by T. J. Hughes [Phys. Fluids 13, 505 (2001)]. Here, the modelling is simplified, leading to a SGS viscosity effect operating on the "small-scale LES field" that is obtained by subtracting the LES field from its filtered counterpart. Such a model (here called RVMM for short) was already proposed and partially evaluated {e.g., see G. S. Winckelmans and H. Jeanmart [Direct and Large-Scale Eddy Simulation IV (Kluwer, Dordrecht, 2001)] and H. Jeanmart and G. S. Winckelmans (CTR Proceedings of the Summer Program, 2002), the "model M2" of A. W. Vreman [Phys. Fluids 15, L61 (2003)], the "high-pass filtered Smagorinsky model" of S. Stolz [Direct and Large-Eddy Simulation V (Kluwer, Dordrecht, 2004) and Phys. Fluids 17, 065103 (2005)]}. The other model investigated here is an "enhanced field model" (EFM). The SGS viscosity model then operates on a LES field that is artificially enhanced at the small scales; that obtained by adding to the LES field the small-scale field. The two model families are presented in a unified way; they have a behavior that combines viscous and hyperviscous effects, while remaining simple and practical. They however do not naturally have the proper y(3) near wall behavior for the SGS dissipation; hence, they need some near wall damping. To ensure the proper near-wall behavior, we use here the dynamic procedure (self-consistent for each model). The performance of both models is compared to that of other models (also dynamic): the Smagorinsky model, hyperviscosity models, and a hybrid model combining explicitly a Smagorinsky term and a hyperviscosity term. The cases here investigated are LES of decaying isotropic turbulence starting at Re-lambda=90 and LES of turbulent channel flow at Re-tau=395. A good behavior of the RVMM and EFM, as compared to the others, is observed in all cases. They constitute an easily implemented and better alternative than the dynamic Smagorinsky model. (C) 2007 American Institute of Physics.}, - doi = {10.1063/1.2728935} -} -@article{yokota:2007, - title = {Calculation of isotropic turbulence using a pure Lagrangian vortex method}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Yokota, R. and Sheel, T. K. and Obi, S.}, - journal = {Journal Of Computational Physics}, - volume = {226}, - number = {2}, - pages = {1589-1606}, - year = {2007}, - issn = {10902716, 00219991}, - abstract = {The vortex method is applied to the calculation of a decaying homogeneous isotropic turbulence of Re-lambda = 25,50 and the results are compared with a spectral method calculation. Vortex method calculations were accelerated by the use of a fast multipole method for periodic boundary conditions. The core spreading method and particle strength exchange were selected as the viscous diffusion scheme. The effect of spatial resolution was examined along with Reynolds number dependence and the effect of spatial adaption of elements. (c) 2007 Elsevier Inc. All rights reserved.}, - doi = {10.1016/j.jcp.2007.06.003} -} -@article{cocle:2009, - author = {Cocle, R. and Bricteux, L. and Winckelmans, G.}, - title = {Scale dependence and asymptotic very high Reynolds number spectral behavior of multiscale subgrid models}, - language = {English}, - publisher = {American Institute of Physics}, - journal = {Physics of Fluids}, - volume = {21}, - number = {8}, - pages = {-}, - year = {2009}, - issn = {10706631, 10897666}, - abstract = {This paper investigates the spectral response of recent multiscale subgrid models, all of eddy viscosity type, in large-eddy simulation (LES) of fully developed turbulence, from moderate to very high Reynolds (Re) number. The objective of this work is to provide useful results about the behavior of the subgrid scale (SGS) models and, in particular, their asymptotic behavior. Such information is indeed important for practitioners using LES to simulate truly high Reynolds number flows. Specifically, we consider LES of homogeneous isotropic turbulence at very high Re and where the LES cutoff (here the grid Δ) is taken well into the inertial range (i.e., Δ/η≥100 with η the Kolmogorov scale). Large LES grids (1283 and 2563) are also used in order to compare and attain the true asymptotic behavior of each SGS model, something not fully observable in LES on smaller grids. An analysis is also carried out to obtain the scale dependence of each model coefficient in the viscous range of turbulence using LES run on several grids and compared to direct numerical simulation. The results provide C for each model and for various Δ/ η. A convenient fit then also provides C/C∞ as a function of Δ/η, where C∞ is the asymptotic coefficient. The comparisons are supported using the evolution of resolved energy (global and spectrum), resolved enstrophy, and effective dissipation. It is shown that the multiscale models acting on the high wavenumber part of the LES field are indeed able to provide a significant k-5/3 inertial subrange, yet it is always followed by an energy pileup effect also called "bottleneck." This effect is also characterized for the various models. © 2009 American Institute of Physics.}, - doi = {10.1063/1.3194302} -} - -@article{rasmussen:2010, - title = {Discrete vortex method simulations of the aerodynamic admittance in bridge aerodynamics}, - author = {J. T. Rasmussen and M. M. Hejlesen and A. Larsen and J-H. Walther}, - journal = {Journal of Wind Engineering and Industrial Aerodynamics}, - volume = {98}, - number = {12}, - pages = {754-766}, - year = {2010}, - issn = {18728197, 01676105}, - abstract = {We present a novel method for the simulation of the aerodynamic admittance in bluff body aerodynamics. The method introduces a model for describing oncoming turbulence in two-dimensional discrete vortex method simulations by seeding the upstream flow with vortex particles. The turbulence is generated prior to the simulations and is based on analytic spectral densities of the atmospheric turbulence and a coherence function deï¬ning the spatial correlation of the flow. The method is validated by simulating the turbulent flow past a flat plate and past the Great Belt East bridge. The results are generally found in good agreement with the potential flow solution due to Liepmann.}, - doi = {10.1016/j.jweia.2010.06.011} -} -@article{kleinhans:2010, - title = {Synthetic Turbulence Models for Wind Turbine Applications}, - language = {English}, - publisher = {SPRINGER-VERLAG BERLIN}, - author = {Kleinhans, D. and Friedrich, R. and Schaffarczyk, A. P. and Peinke, J.}, - journal = {Progress In Turbulence III}, - volume = {131}, - pages = {111-114}, - year = {2010}, - issn = {09308989}, - isbn = {9783642022241}, - abstract = {Wind energy converters such as wind turbines permanently work in the atmospheric boundary layer. For the modelling of the dynamics and for the optimisation of design and material of wind turbines synthetic models for atmospheric turbulence are applied already for a long time. The main purpose of these models is to provide fast and efficient methods for numerical simulation of random fields, that show some characteristic features of atmospheric turbulence. Typically they only have a partial connection to the fundamental equations of fluid dynamics. After a short overview summarizing widespread models by Veers and Mann, that are based on the simulation of random fields in the Fourier domain, advanced models for the simulation of velocity fields are discussed.} -} -@article{chatelain:2013, - title = {Large Eddy Simulation of Wind Turbine Wakes}, - language = {English}, - publisher = {SPRINGER}, - author = {P. Chatelain and S. Backaert and G. Winckelmans and S. Kern}, - journal = {Flow Turbulence And Combustion}, - volume = {91}, - number = {3}, - pages = {587-605}, - year = {2013}, - issn = {13866184, 15731987}, - abstract = {We present the coupling of a vortex particle-mesh method with immersed lifting lines for the Large Eddy Simulation of wind turbine wakes. The method relies on the Lagrangian discretization of the Navier-Stokes equations in vorticity-velocity formulation. Advection is handled by the particles while the mesh allows the evaluation of the differential operators and the use of fast Poisson solvers. We use a Fourier-based fast Poisson solver which simultaneously allows unbounded directions and inlet/outlet boundaries. The method also allows the feeding of a turbulent incoming flow. We apply this methodology to the study of large scale aerodynamics and wake behavior of tandem wind turbines. We analyze the generators performance, unsteady power, loads and aerodynamics they are subjected to. The average flow field of the wakes is also computed and turbulence statistics are extracted. In particular, we investigate the influence of the type of turbulent inflow used-precomputed or synthetic-, and study wake meandering.}, - doi = {10.1007/s10494-013-9474-8} -} - -@article{devissher:2013, - title = {Aircraft Vortices in Stably Stratified and Weakly Turbulent Atmospheres: Simulation and Modeling}, - language = {English}, - publisher = {AMER INST AERONAUT ASTRONAUT}, - author = {De Visscher, I. and Bricteux, L. and Winckelmans, G.}, - journal = {AIAA Journal}, - volume = {51}, - number = {3}, - pages = {551-566}, - year = {2013}, - issn = {00011452, 1533385x}, - abstract = {This study investigates the influence, on aircraft wake vortex behavior, of atmospheres that are stably stratified (neutral to very strong) and weakly turbulent, by means of large-eddy simulations at very high Reynolds number and on relatively fine grids. The atmospheric fields are first generated using large-eddy simulations of forced and stratified turbulence reaching a statistically stationary state. The obtained fields are shown to be realistic and consistent with the literature. A pair of counter-rotating vortices, with relatively tight cores, is then put in the obtained fields and evolved. The evolution of the wake vortex topology, transport, and decay is analyzed in depth by measuring the wake vortex characteristics in all cross planes. The vortex transport and deformation are related to the stratification and turbulence levels. Stratification combined with weak turbulence is seen to strongly affect the Crow instability development. Different decay mechanisms are identified, related to the interactions with the turbulence, the turbulent baroclinic vorticity, and/or between the vortices themselves. Finally, improved simplified models of vortex altitude evolution and of vortex decay (with two phases) are proposed and calibrated on the present results. They yield good agreement with the large-eddy simulation results and are usefully integrated in our operational models.}, - doi = {10.2514/1.J051742} -} - -@article{yokota:2011, - title = {Vortex methods for the simulation of turbulent flows: review}, - language = {English}, - publisher = {Japan Society of Mechanical Engineers}, - author = {R. Yokota and S. Obi}, - journal = {Journal of Fluid Science and Technology}, - volume = {6}, - number = {1}, - pages = {14-29}, - year = {2011}, - issn = {18805558}, - abstract = {Vortex methods are a group of Lagrangian and semi-Lagrangian methods based on the vorticity-streamfunction or vorticity-velocity formulation of the Navier-Stokes equation, and provide an interesting alternative to grid based methods for external flows dominated by unsteady vortical motion. In the present review article, we will assess the advantages and disadvantages of vortex methods for the simulation of incompressible turbulent flows, based on the speed and accuracy benchmarks that have been performed recently. Our goal is to objectively and quantitatively evaluate the performance of this non-standard method, by directly comparing it’s speed and accuracy against finite difference and pseudo-spectral DNS codes under identical calculation conditions. We also present examples of vortex methods in engineering applications of turbulent flows.} -} - -@CONFERENCE{sale:2014, - author = {D. Sale and A. Aliseda and Y. Lic}, - title = {Simulation of Hydrokinetic Turbines in Turbulent Flow Using Vortex Particle Methods}, - booktitle = {Proceedings of the 2nd Marine Energy Technology Symposium: METS2014-April 15-18, 2014, Seattle, WA}, - year = {2014}, - otherinfo = {http://hdl.handle.net/10919/49216} -} -@incollection{backaert:2014, -author={S. Backaert and P. Chatelain and G. Winckelmans and I. De Visscher}, -title={Vortex Particle-Mesh Simulations of Atmospheric Turbulence Effects on Wind Turbine Blade Loading and Wake Dynamics}, -year={2014}, -isbn={978-3-642-54695-2}, -booktitle={Wind Energy - Impact of Turbulence}, -volume={2}, -series={Research Topics in Wind Energy}, -editor={M. H{\"o}lling and J. Peinke and S. Ivanell}, -doi={10.1007/978-3-642-54696-9_20}, -url={http://dx.doi.org/10.1007/978-3-642-54696-9_20}, -publisher={Springer Berlin Heidelberg}, -pages={135-140}, -language={English} -} - -@article{thormann:2014, - title = {Decay of homogeneous, nearly isotropic turbulence behind active fractal grids.}, - author = {A. Thormann and C. Meneveau}, - journal = {Physics of Fluids}, - volume = {26}, - number = {2}, - pages = {1}, - year = {2014}, - issn = {10706631, 10897666}, - abstract = {The study of decaying isotropic turbulent flow is an important point of reference for turbulence theories and numerical simulations. For the past several decades, most experimental results appear to favor power-law decay with exponents between -1.2 and -1.4, approximately. More recently, studies of fractal-generated turbulence with multi-scale passive grids have shown increased Reynolds numbers and exponential or very fast power-law decays following an increase of kinetic energy close to the grid. Other recent studies have confirmed that such non-classical decay is limited to the region near the grid. In order to generate turbulence with multi-scale injection of kinetic energy at more elevated Reynolds numbers and with more spatially homogeneous distributions than available in prior experiments, we use an activegrid consisting of winglets with fractal shapes. We consider various types of fractal winglets, namely, Sierpinski triangle, space-filling squares, and Apollonian gasket type fractal shapes. Regular non-fractal winglets are also considered. Passive fractal grids are studied by keeping the winglets locked in place. Data are acquired using X-wire thermal anemometry and the decay is analyzed between 15 < x/M < 50 (M is the mesh-size). Results exhibit power-law decay with decay exponent approximately between -1.0 and -1.3. The precise values of the decay exponent and the coefficient Cε = εℓ/urms³ depend on the geometry of the initial condition, although it is not possible to discern systematic or monotonic trends with respect to ReMsub>λ, component anisotropy, grid fractal dimension, or blockage ratio.} -} - -@book{progressinturbulence:book, - title = {Progress In Turbulence III}, - publisher = {SPRINGER-VERLAG BERLIN}, - author = {Kleinhans, D. and Friedrich, R. and Schaffarczyk, A. P. and Peinke, J.}, - volume = {131}, - year = {2010}, - issn = {09308989}, - language = {English}, - isbn = {9783642022241} -} - -@book{impactofturbulence:book, -title={Wind Energy - Impact of Turbulence}, -volume={2}, -series={Research Topics in Wind Energy}, -editor={M. H{\"o}lling and J. Peinke and S. Ivanell}, -doi={10.1007/978-3-642-54696-9_20}, -url={http://dx.doi.org/10.1007/978-3-642-54696-9_20}, -publisher={Springer Berlin Heidelberg}, -year={2014}, -isbn={978-3-642-54695-2}, -language={English} -} - -@article{simley:2014, - title = {Investigation of the Impact of the Upstream Induction Zone on LIDAR Measurement Accuracy for Wind Turbine Control Applications using Large-Eddy Simulation}, - language = {English}, - author = {E. Simley and L. Y. Pao and P. Gebraad and M. Churchfield}, - journal = {Journal of Physics: Conference Series}, - volume = {524}, - number = {1}, - pages = {012003}, - year = {2014}, - issn = {17426588, 17426596}, - abstract = {Several sources of error exist in lidar measurements for feedforward control of wind turbines including the ability to detect only radial velocities, spatial averaging, and wind evolution. This paper investigates another potential source of error: the upstream induction zone. The induction zone can directly affect lidar measurements and presents an opportunity for further decorrelation between upstream wind and the wind that interacts with the rotor. The impact of the induction zone is investigated using the combined CFD and aeroelastic code SOWFA. Lidar measurements are simulated upstream of a 5 MW turbine rotor and the true wind disturbances are found using a wind speed estimator and turbine outputs. Lidar performance in the absence of an induction zone is determined by simulating lidar measurements and the turbine response using the aeroelastic code FAST with wind inputs taken far upstream of the original turbine location in the SOWFA wind field. Results indicate that while measurement quality strongly depends on the amount of wind evolution, the induction zone has little effect. However, the optimal lidar preview distance and circular scan radius change slightly due to the presence of the induction zone.}, - doi = {10.1088/1742-6596/524/1/012003} -} - -% --------------------------------------------------------------------------------} -% --- FAST MULTIPOLE METHOD FMM - TREE code -% --------------------------------------------------------------------------------{ -@article{cline:2010, -author = {S. Cline and C. Crawford}, -journal = {AIAA Aerospace Sciences Meeting}, -volume = {48th}, -title = {{Comparison of Potential Flow Wake Models for Horizontal-Axis Wind Turbine Rotors}}, -year = {2010} -} - -@MASTERSTHESIS{cline:2011, - author = {Cline, S.}, - title = {Potential Flow Modelling of Wind Turbines}, - school = {University of Victoria}, - year = {2011}, -} - - -@techreport{multipoleshortcourse, -author = {R. Beatson and L. Greengard}, -institution = {University of Canterbury - New York University}, -title = {{A short course on fast multipole methods}}, -year ={2012} -} - -@article{greengard:1987, - title = {A FAST ALGORITHM FOR PARTICLE SIMULATIONS}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Greengard, L. and Rokhlin, V.}, - journal = {Journal of computational physics}, - volume = {73}, - number = {2}, - pages = {325-348}, - year = {1987}, - issn = {00219991, 10902716}, - abstract = {An algorithm is presented for the rapid evaluation of the potential and force fields in systems involving large numbers of particles whose interactions are Coulombic or gravitational in nature. For a system of N particles, an amount of work of the order O (N2) has traditionally been required to evaluate all pairwise interactions, unless some approximation or truncation method is used. The algorithm of the present paper requires an amount of work proportional to N to evaluate all interactions within roundoff error, making it considerably more practical for large-scale problems encountered in plasma physics, fluid dynamics, molecular dynamics, and celestial mechanics} -} -@ARTICLE{salmon:1994, - author = {J. K. Salmon and M.S. Warren and G.S. Winckelmans}, - title = {Fast parallel tree codes for gravitational and fluid dynamical N-body problems}, - journal = {Intl. J. Supercomput. Appl. High Perf. Comp.}, - year = {1994}, - volume = {8}, - number = {2}, - pages = {192-142}, -} -@article{salmon:1996, -author = {Salmon, J K and Winckelmans, G S and Louvain, Universite Catholique De and Leonard, A and Warren, M S and Astrophysics, Theoretical and Laboratories, Los Alamos National and Alamos, Los and Jodoin, B and Sherbrooke, Universite De}, -pages = {225--240}, -title = {{Application of Fast Parallel and Sequential Tree Codes to Computing Three-Dimensional Flows with the Vortex Element and Boundary Element Methods}}, -volume = {1}, -year = {1996} -} - - -@INPROCEEDINGS{spalart:1981, - title = {Computation of separated flows by a vortex-tracing algorithm}, - author = {Spalart, P. R. and Leonard, A.}, - booktitle = {14th Fluid and Plasma Dynamics Conference}, - year = {1981}, - abstract = {Numerical solutions for two-dimensional, time-dependent, separated flows around bodies are obtained, using a new version of the vortex method. This method provides an efficient representation of flows involving large regions of separation. The modifications incorporated in the new version, which improve its accuracy, versatility, and computing speed, are described. The computer cost is only of the order of the 3/2 power on N, instead of N-squared, for each step with N vortices. Arbitrary shapes can be treated; a conformal mapping is not required. Special attention is paid to the viscous character of the solution and to the accurate computation of the pressure distribution at the body surface. The vortex solution for the outer flow is coupled to an inner solution for the attached part of the boundary layer. Numerical results are presented for several bluff bodies exhibiting dependence on Reynolds number, for stationary airfoils under steady or transient conditions and for oscillating airfoils, including dynamic stalls. These results are compared with other available results, analytical or experimental, and demonstrate the enhanced reliability and accuracy of the improved method.} -} -@article{lambert:1996, - title = {A multipole-based algorithm for efficient calculation of forces and potentials in macroscopic periodic assemblies of particles}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Lambert, CG and Darden, TA and Board, JA}, - journal = {Journal Of Computational Physics}, - volume = {126}, - number = {2}, - pages = {274-285}, - year = {1996}, - issn = {00219991, 10902716}, - abstract = {A new and efficient algorithm based on multipole techniques is presented which calculates the electrostatic forces and potentials in macroscopic periodic assemblies of particles, The fast multipole algorithm (FMA) can be used to compute forces within the n-particle unit cell in O(n) time. For the cubic lattice, forces due to a 3(k) x 3(k) x 3(k) lattice of images of the unit cell, containing 3(3k) n particles, can be computed in O(nk(2) + k(3) log k) time to arbitrary precision. The algorithm was readily added onto an existing FMA implementation, and computational results are presented. Accurate electrostatic computations were done on a 3(8) x 3(8) x 3(8) region of 100000-particle unit cells, giving a volume of 28 quadrillion particles at less than a twofold cost over computing the forces and potentials in the unit cell alone. In practice, a k = 4 ... 6 simulation approximates the true infinite lattice Ewald sum forces (including the shape-dependent dipole correction) to high accuracy, taking 25-30 % more time to compute than only the unit cell. The method extends to noncubic unit cell shapes, and noncubic macroscopic shapes. Simple code modifications allowed computation of forces within macroscopic spheres and ellipsoids, and within near-infinite square, circular, and elliptical surfaces formed of unit cubes replicated along Two of the three axes. In addition to efficient periodic simulations, the method provides a powerful tool to study limiting behavior of various finite crystal shapes, as well as surface phenomena in molecular dynamics simulations. (C) 1996 Academic Press, Inc.}, - doi = {10.1006/jcph.1996.0137} -} - - - -@article{willis:2007, - title = {A combined pFFT-multipole tree code, unsteady panel method with vortex particle wakes}, - language = {eng}, - author = {Willis, David J. and Peraire, Jaime and White, Jacob K.}, - journal = {International Journal for Numerical Methods in Fluids, Int. J. Numer. Methods Fluids}, - volume = {53}, - number = {8}, - pages = {1399-1422}, - year = {2007}, - issn = {10970363, 02712091}, - abstract = {Potential flow solvers for 3-D aerodynamic flows are commonly used in industrial applications. Two main difficulties preventing the even more widespread use of these codes are the limitations on the number of discretization elements and the user expertise and effort required to specify the wake location. In the paper we present an automatic wake generation strategy for a potential flow solver, and accelerate the method using a pFFT-Fast Multipole Tree algorithm. The combined method can be used to simulate both steady and unsteady flows. The steady state solution is achieved by running an unsteady flow simulation until it reaches a steady state. Computation results are given to demonstrate that the method is fast enough to automatically simulate entire heaving and flapping wing crafts in under and hour on a desktop computer. Copyright © 2006 John Wiley \& Sons, Ltd.}, - doi = {10.1002/fld.1240} -} - - -@TECHREPORT{mercier:2014, - author = {P. Mercier}, - title = {Fast vortex method for large scale wind energy simulations}, - institution = {Institut Sup\'erieur de l'A\'eronautique et de l'Espace}, - year = {2014}, - otherinfo = {Student Project} -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - VORTEX IN CELL - HIGH ORDER -% --------------------------------------------------------------------------------{ -@article{birdsall:1969, - title = {Clouds-in-clouds, clouds-in-cells physics for many-body plasma simulation}, - language = {English}, - author = {Birdsall, C. K. and Fuss, D.}, - journal = {Journal of Computational Physics}, - volume = {3}, - number = {4}, - pages = {494-511}, - year = {1969}, - issn = {00219991, 10902716}, - abstract = {A clouds-interacting-with-clouds, clouds-in-cells method (CIC) is presented for many-body nonlinear plasma problems. Density and force are obtained by assuming that the particles have finite size, are tenuous, and may pass through one another; the particles are thus called clouds. They obey a Coulomb force (∼1/r or 1/r2) when separated and a linear force (∼r) when overlapping, allowing simple harmonic oscillations at small separation. CIC is contrasted with the zero-size particle and nearest-grid-point approach, ZSP-NGP.} -} -@article{christiansen:1973, - title = {Numerical simulation of hydrodynamics by the method of point vortices}, - language = {English}, - author = {Christiansen}, - journal = {Journal of Computational Physics}, - volume = {13}, - number = {3}, - pages = {363-379}, - year = {1973}, - issn = {00219991, 10902716}, - abstract = {The motion of a two-dimensional incompressible inviscid and homogeneous fluid can be thought of in terms of the gradual evolution of a continuous vorticity distribution, each scalar vortex element interacting with every other by an instantaneous action at a distance law. This model can be expressed in Hamiltonian form and that it shows many analogies with similar systems in plasma physics. In addition to the standard mesh techniques, a computational description can be obtained if the continuous vorticity distribution is replaced by a finite set of point vortices interacting through a stream function which satisfies Poisson's equation. The point vortices move in a velocity field given on a Cartesian mesh such that there is a close resemblance to particle models used in plasma simulations. The point vortex model is presented with a calculation on a test model and the sources of numerical errors are explained. It is concluded that the point vortex model is useful and versatile for a variety of problems in hydrodynamics as well as in plasma physics} -} - -@article{couet:1981, - title = {Simulation of three-dimensional incompressible flows with a vortex-in-cell method}, - language = {English}, - author = {Couet and Buneman and Leonard}, - journal = {Journal of Computational Physics}, - volume = {39}, - number = {2}, - pages = {305-328}, - year = {1981}, - issn = {00219991, 10902716}, - abstract = {A new method for the numerical simulation of three-dimensional incompressible flows is described. The authors' vortex-in-cell (VIC) method traces the motion of the vortex filaments in the velocity field which these filaments create. The velocity field is not calculated directly by the Biot-Savart law of interaction but by creating a mesh-record of the vorticity field, then integrating a Poisson's equation via the fast Fourier transform to generate a mesh-record of the velocity field. The computed scales of motion are assumed to be essentially inviscid. Results of tracing a periodic array of single vortex rings are compared with a Green's function calculation. The agreement is very good} -} -@article{cottet:1987vic, - title = {Convergence of a vortex in cell method for the two-dimensional {E}uler equations}, - publisher = {amer mathematical soc}, - author = {Cottet, G}, - journal = {mathematics of computation}, - volume = {49}, - number = {180}, - pages = {407-425}, - year = {1987}, - issn = {00255718, 10886842}, - abstract = {a vortex in cell method in which the assignment function used to compute vorticity values at the grid points from particles is twice differentiable, while the velocity need only be continuous, is described. the author proves an error estimate for the velocity in terms of the meshsize, the interparticle distance and the size of the computational domain} -} - -@article{brecht:1990, - title = {Vortex-in-cell calculations in three dimensions}, - language = {English}, - author = {Brecht and Ferrante}, - journal = {Computer Physics Communications}, - volume = {58}, - number = {1-2}, - pages = {25-54}, - year = {1990}, - issn = {00104655, 18792944}, - abstract = {The traditional vortex-in-cell approach has been extended to three dimensions. In this paper the authors discuss the numerical techniques used in constructing the three dimensional vortex-in-cell code, VINCE3D. The discussion covers the equations solved, the numerical methods used, and boundary conditions which were applied. It is found that the code reproduces linear theory and the scaling inherent in the equations being solved. A discussion of the strengths and weaknesses of this formulation is presented. It is found that the code is robust even in situations where the Boussinesq approximation must be abandoned}, - doi = {10.1016/0010-4655(90)90133-L} -} - - -@article{bartholomew:1988, - title = {Velocity field estimates and three-dimensional discrete vortex methods}, - language = {English}, - author = {Bartholomew, R.W.}, - journal = {Computer Methods in Applied Mechanics and Engineering}, - volume = {71}, - number = {1}, - pages = {15-29}, - year = {1988}, - issn = {03742830}, - abstract = {A general three-dimensional vortex-in-cell algorithm is presented. The algorithm uses vortex spreading and velocity interpolation techniques which are performed in real space. This allows the use of an efficient and portable solver for the elliptic boundary value problem that is a result of the formulation. The trade-off that is made is that the representation of the velocity field used to update the position of the vortex markers becomes a sensitive issue. This is illustrated through a number of numerical examples and suggestions are made for the improvement of the velocity field representation.} -} -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - POISSON SOLVER -% --------------------------------------------------------------------------------{ -@article{chatelain:2010, - title = {A Fourier-based elliptic solver for vortical flows with periodic and unbounded directions}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {P. Chatelain and P. Koumoutsakos}, - Journal = {Journal Of Computational Physics}, - volume = {229}, - number = {7}, - pages = {2425-2431}, - year = {2010}, - issn = {00219991, 10902716}, - abstract = {We present a computationally efficient, adaptive solver for the Solution of the Poisson and Helmholtz equation used in flow simulations in domains with combinations Of unbounded and periodic directions The method relies on using FFTs oil art extended domain and it is based oil the method proposed by Hockney and Eastwood for plasma simulations The method is well-suited to problems with dynamically growing domains and in particular flow simulations using vortex particle methods. The efficiency of the method is demonstrated in simulations of trading vortices (C) 2010 Elsevier Inc All rights reserved}, - doi = {10.1016/j.jcp.2009.12.035} -} -@article{chatelain:2008, -author = {P. Chatelain and A. Curioni and M. Bergdorf and D. Rossinelli and W. Andreoni and P. Koumoutsakos}, -doi = {10.1016/j.cma.2007.11.016}, -journal = {Methods}, -keywords = {particle method,vortex method,wake vortices}, -pages = {1296--1304}, -title = {{Billion vortex particle direct numerical simulations of aircraft wakes}}, -volume = {197}, -year = {2008} -} - -@article{hejlesen:2013, - title = {A high order solver for the unbounded Poisson equation}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {M. N. Hejlesen and J. T. Rasmussen and P. Chatelain and J-H. Walther}, - journal = {Journal of Computational Physics}, - volume = {252}, - pages = {458-467}, - year = {2013}, - issn = {00219991, 10902716}, - abstract = {A high order converging Poisson solver is presented, based on the Greenʼs function solution to Poissonʼs equation subject to free-space boundary conditions. The high order convergence is achieved by formulating regularised integration kernels, analogous to a smoothing of the solution field. The method is extended to directly solve the derivatives of the solution to Poissonʼs equation. In this way differential operators such as the divergence or curl of the solution field can be solved to the same high order convergence without additional computational effort. The method, is applied and validated, however not restricted, to the equations of fluid mechanics, and can be used in many applications to solve Poissonʼs equation on a rectangular unbounded domain.}, - doi = {10.1016/j.jcp.2013.05.050} -} - -@article{swartztrauber:1975, - title = {Efficient FORTRAN subprograms for the solution of elliptic partial differential equations (Fishpack)}, - language = {English}, - author = {Swartztrauber, P. and Sweet, R.}, - journal = {SIGNUM Newsletter}, - volume = {10}, - number = {4}, - pages = {30}, - year = {1975}, - issn = {01635778, 15580237}, - abstract = {The purpose of this paper is to describe technical note, NCAR TN/IA-109, which is intended to provide scientists with a package of computer programs which make use of current methods for solving elliptic partial differential equations. Five subroutines for solving a Helmholtz equation in various coordinate systems are described: they are, Cartesian coordinates x and y; polar coordinates r and θ; cylindrical coordinates r and z; interior spherical coordinates r and θ; and surface spherical coordinates θ and 0. An extensive description of two subroutines which can be used to solve elliptic partial differential equations that cannot be solved by the other programs is given.} -} -@article{anderson:1986method, - title={A method of local corrections for computing the velocity field due to a distribution of vortex blobs}, - author={C. R. Anderson}, - journal={Journal of Computational Physics}, - volume={62}, - number={1}, - pages={111--123}, - year={1986}, - publisher={Elsevier}} - -@PHDTHESIS{almgren:1991:phdthesis, - author = {A. Almgren}, - title = {A Fast Adaptive Vortex Method Using Local Correction}, - school = {University of California at Berkeley}, - year = {1991}, - otherinfo = {Center for Pure and Applied Mathematics Technical Report 527} -} - - -@article{adams:1989, - title = {MUDPACK: multigrid portable FORTRAN software for the efficient solution of linear elliptic partial differential equations}, - language = {English}, - author = {Adams, J. C.}, - journal = {Applied Mathematics and Computation}, - volume = {34}, - number = {2}, - pages = {113-146}, - year = {1989}, - issn = {00963003, 18735649}, - abstract = {MUDPACK is a package of portable FORTRAN subprograms which use multigrid iteration for solving real or complex elliptic partial differential equations. The solution regions are rectangles in two dimensions and boxes in three dimensions. Any combination of periodic, Dirichlet, and mixed-derivative boundary conditions is allowed. The equations are automatically discretized using second-order finite differencing. The package vectorizes on Cray computers. Examples are given which demonstrate ease of use, efficiency, and applicability to a wide range of problems.} -} - -@MISC{demmel:1996, - author = {J. Demmel}, - year = {1996}, - title = {{Solving the Discrete Poisson Equation using Jacobi, SOR, Conjugate Gradients and the FFT - Lectures 15 and 16}}, - institution = {U.C. Berkeley}, - note = {www.cs.berkeley.edu/~demmel/cs267/} -} - - - -@article{balls:2002, - title = {A finite difference domain decomposition method using local corrections for the solution of Poisson's equation}, - language = {English}, - publisher = {ACADEMIC PRESS INC ELSEVIER SCIENCE}, - author = {Balls, GT and Colella, P.}, - journal = {Journal Of Computational Physics}, - volume = {180}, - number = {1}, - pages = {25-53}, - year = {2002}, - issn = {00219991, 10902716}, - abstract = {We present a domain decomposition method for computing finite difference solutions to the Poisson equation with infinite domain boundary conditions. Our method is a finite difference analogue of Anderson's Method of Local Corrections. The solution is computed in three steps. First, fine-grid solutions are computed in parallel using, infinite domain boundary conditions on each subdomain. Second, information is transferred globally through a coarse-grid representation of the charge, and a global coarse-grid solution is found. Third, a fine-grid solution is computed on each subdomain using boundary conditions set with the global coarse solution, corrected locally with fine-grid information from nearby subdomains. There are three important features of our algorithm. First, our method requires only a single iteration between the local fine-grid solutions and the global coarse representation. Second, the error introduced by the domain decomposition is small relative to the solution error obtained in a single-grid calculation. Third, the computed solution is second-order accurate and only weakly dependent on the coarse-grid spacing and the number of subdomains. As a result of these features, we are able to compute accurate solutions in parallel with a much smaller ratio of communication to computation than more traditional domain decomposition methods. We present results to verify the overall accuracy, confirm the small communication costs, and demonstrate the parallel scalability of the method. (C) 2002 Elsevier Science (USA).}, - doi = {10.1006/jcph.2002.7068} -} - -@article{greenbaum:1993, - title = {LAPLACE EQUATION AND THE DIRICHLET-NEUMANN MAP IN MULTIPLY CONNECTED DOMAINS}, - language = {English}, - publisher = {ACADEMIC PRESS INC JNL-COMP SUBSCRIPTIONS}, - author = {Greenbaum, A. and Greengard, L. and Mcfadden, GB}, - journal = {Journal Of Computational physics}, - volume = {105}, - number = {2}, - pages = {267-278}, - year = {1993}, - issn = {00219991, 10902716}, - abstract = {A variety of problems in materials science and fluid dynamics require the solution of Laplace's equation in multiply connected domains. Integral equation methods are natural candidates for such problems, since they discretize the boundary alone, require no special effort for free boundaries, and achieve superalgebraic convergence rates on sufficiently smooth domains in two space dimensions, regardless of shape. Current integral equation methods for the Dirichlet problem, however, require the solution of M independent problems of dimension N, where M is the number of boundary components and N is the total number of points in the discretization. The authors present a new boundary integral equation approach, valid for both interior and exterior problems, which requires the solution of a single linear system of dimension N+M. They solve this system by making use of an iterative method (GMRES) combined with the fast multipole method for the rapid calculation of the necessary matrix vector products.}, - doi = {10.1006/jcph.1993.1073} -} -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - AND CFD -% --------------------------------------------------------------------------------{ -@article{ould:2000, - title = {Blending finite-difference and vortex methods for incompressible flow computations.}, - author = {Ould-Salihi, M. L. and Cottet, G. -H. and El Hamraoui, M.}, - journal = {SIAM Journal on Scientific Computing}, - volume = {22}, - number = {5}, - pages = {1665}, - year = {2000}, - issn = {10648275, 10957197}, - abstract = {We describe and illustrate numerical procedures that combine grid and particle solvers for the solution of the incompressible Navier­Stokes equations. These procedures include vortex in cell (VIC) and domain decomposition schemes. Numerical comparisons with pure finite-difference methods demonstrate the effectiveness of these techniques for various flow geometries, bounded or unbounded.} -} - -@article{stock:2010, - title = {Modeling rotor wakes with a hybrid OVERFLOW-vortex method on a GPU cluster}, - publisher = {American Institute of Aeronautics and Astronautics Inc.}, - author = {Stock, Mark J. and Gharakhani, Adrin and Stone, Christopher P.}, - journal = {28th AIAA Applied Aerodynamics Conference}, - pages = {2010-4553}, - year = {2010}, - isbn = {9781617389269}, - abstract = {The vortex core shed from rotorcraft blades maintains coherency - and thus dynamic relevance - many blade turns after its creation. This presents a challenge to traditional Eulerian computational methods, as fine grids are required to suppress numerical diffusion which would weaken the vortex cores after a small number of revolutions. Vortex methods have been used in the past to overcome these problems, as they require computational elements only in vorticity-containing regions, but suffer from greater computational cost per element. In the present work, we will solve these problems with a hybrid Eulerian-Lagrangian method for modeling rotor wakes. An Eulerian OVERFLOW overset grid method computes the near-body flow, while a Lagrangian particle vortex method tracks the wake. The vortex method uses an anisotropic LES model to handle subgrid-scale dissipation explicitly. The computational cost of vortex methods is alleviated by using a parallel adaptive treecode on a cluster of machines each with multi-core CPUs and multiple cost-efficient graphics processing units (GPUs). Simulations of a low-Re sphere, finite wing, and 4-bladed rotor model are presented and are validated by comparisons with computational and experimental data. © 2010 by Applied Scientific Research, Inc.} -} - - -@article{papadakis:2014, - title = {{In view of accelerating CFD simulations through coupling with vortex particle approximations}}, - language = {English}, - author = {G. Papadakis and S. G. Voutsinas}, - journal = {Journal of Physics: Conference Series}, - volume = {524}, - number = {1}, - pages = {012126}, - year = {2014}, - issn = {17426588, 17426596}, - abstract = {In order to exploit the capabilities of Computational Fluid Dynamics in aerodynamic design, the cost should be reduced without compromising accuracy and consistency. In this direction a hybrid methodology is formulated within the context of domain decomposition. The strategy is to choose in each sub-domain the best performing method. Close to solid boundaries a grid-based Eulerian flow solver is used while in the far field the flow is described in Lagrangian coordinates using particle approximations. Aiming at consistently including compressible effects, particles carry mass, dilatation, vorticity and energy and the complete set of conservation laws is solved in Lagrangian coordinates. At software level, the URANS solver MaPFlow is coupled to the vortex code GENUVP. In the present paper the two dimensional formulation is given alongside with validation tests around airfoils in steady and inherently unsteady conditions. It is verified that: purely Eulerian and hybrid simulations are equivalent; the Eulerian domain in the hybrid solver can be effectively restricted to a layer 1.5 chord lengths wide; significant cost reduction reaching up to 1:3 ratio is achieved.}, - doi = {10.1088/1742-6596/524/1/012126} -} -@PHDTHESIS{papadakis:phdthesis, - author = {Papadakis, Giorgos}, - title = {Development of a hybrid compressible vortex particle method and application to external problems including helicopter flows}, - school = {National Technical University of Athens}, - year = {2014}, -} - - -% --------------------------------------------------------------------------------} -% --- VORTEX METHODS - AEROELASTICITY -% --------------------------------------------------------------------------------{ -@article{manolas:2014, - title = {Assessment of 3D aerodynamic effects on the behaviour of floating wind turbines}, - language = {English}, - author = {Manolas, D. and Riziotis, V. and Voutsinas, S.}, - journal = {Journal of Physics: Conference Series}, - volume = {555}, - number = {1}, - pages = {012067}, - year = {2014}, - issn = {17426596, 17426588}, - abstract = {Current state-of-art models for floating wind turbines are built by merging separate modules addressing the four basic aspects leading to a compound hydro-servo-aero-elastic time domain solver. While current state-of-the-art models differ in many aspects, they all use the blade element momentum (BEM) aerodynamic modelling. Due to its low cost, BEM is the standard choice for design purposes. However the use of BEM entails several semi-empirical corrections and add-ons that need reconsideration and recalibration when new features appear. For floating wind turbines, the effect of the floater motions is such a new feature. In the present paper, this aspect is investigated by comparing BEM based results against 3D free-wake simulations. Deterministic as well as stochastic simulations are presented in pure aerodynamic and full aeroelastic context. It is confirmed that asymmetric inflow originating from yaw misalignment and shear give significant differences reflected on mean values and amplitudes.}, - doi = {10.1088/1742-6596/555/1/012067} -} - - -@article{riziotis:2011, - title = {Free-wake Aeroelastic Modelling of Swept Rotor Blades}, - author = {Riziotis, V. A. and Manolas, D. I. and Voutsinas, S. G. }, - journal = {European Wind Energy Conference and Exhibition 2011, {EWEC} 2011}, - year = {2011}, -} - - -@article{devaal:2012, - author={J. B. de Vaal and M. O. L. Hansen and T. Moan}, - title={Validation of a vortex ring wake model suited for aeroelastic simulations of floating wind turbines}, - journal={Journal of Physics: Conference Series}, - volume={555}, - number={1}, - pages={012025}, - url={http://stacks.iop.org/1742-6596/555/i=1/a=012025}, - year={2014}, - abstract={In order to evaluate aerodynamic loads on floating offshore wind turbines, advanced dynamic analysis tools are required. As a unified model that can represent both dynamic inflow and skewed inflow effects in it basic formulation, a wake model based on a vortex ring formulation is discussed. Such a model presents a good intermediate solution between computationally efficient but simple momentum balance methods and computationally expensive but complete computational fluid dynamics models. The model introduced is shown to be capable of modelling typical steady and unsteady test cases with reasonable accuracy.} -} - - -% --------------------------------------------------------------------------------} -% --- Distributed vortex elements -% --------------------------------------------------------------------------------{ -@article{basom:2011, -author = {B.J. Basom and M.D. Maughmer}, -title = {{Inviscid Analysis of Horizontal-Axis Wind Turbines Using Distributed Vorticity Elements}}, -year = {2011}, -journal={AIAA Aerospace Sciences Meeting} -} -@article{bramesfeld:2008, -author={G. Bramesfeld and M.D. Maughmer}, -title = {Relaxed-Wake Vortex-Lattive Method Using Distributed Vorticity Elements}, -doi = {10.2514/1.31665}, -journal ={Journal of aircraft}, -number = {2}, -volume = {45}, -year = {2008} -} - - - - - - -% --------------------------------------------------------------------------------} -% --- LIFTING LINE - THEORY and CODES -% --------------------------------------------------------------------------------{ -@TECHREPORT{ecnAWSM:2003, - author = {A. {van Garrel}}, - title = {Development of a wind turbine aerodynamics simulation module}, - institution = {ECN}, - year = {2003}, - number = {ECN-C--03-079} -} - -@ARTICLE{chattot:2002, - author = {J-J. Chattot}, - title = {Optimization of propellers using helicoidal vortex model}, - journal = {Computational Fluid Dynamics Journal}, - year = {2001} -} - -@ARTICLE{chattot:2002wt, - author = {J-J. Chattot}, - title = {Design and analysis of wind turbines using helicoidal vortex model}, - journal = {Computational Fluid Dynamics Journal}, - year = {2002} -} -@ARTICLE{schmitz:2005, - author = { S. Schmitz and J.-J. Chattot}, - title = {Influence of the vortical wake behind wind turbines using a coupled Navier-Stokes/vortex-panel methodology}, - journal = { Third MIT Conference on Computational Fluid and Solid Mechanics}, - year = {2005}, - pages={p832-836} -} - - - - -@PHDTHESIS{olsen:2001, - author = {A.S. Olsen}, - title = {Optimisation of propellers using the vortex-lattice method}, - school = {Technical University of Denmark - DTU}, - year = {2001} -} -@MASTERSTHESIS{reuventhesis, - author = {R. Shenkar}, - title = {Design and optimization of planar and non planar wind turbine blades using vortex methods}, - school = {Technical University of Denmark - DTU}, - year = {2010}, - month ={September} -} - -@MASTERSTHESIS{kloostermanthesis, - author = {M.H.M. Kloosterman}, - title = {Development of the Near Wake behind a Horizontal Axis Wind Turbine}, - school = {Delft University of Technology}, - year = {2009} -} - - - -@TECHREPORT{ecnAWSM:2011, - author = {F. Grasso and A. {van Garrel} and G. Schepers}, - title = {Development and Validation of Generalized Lifting Line Based Code for Wind Turbine Aerodynamics }, - institution = {ECN}, - year = {2011}, - number = {ECN-M--11-004} -} - -@ARTICLE{sant:2006, - author = {T. Sant and G. van Kuik and G.J.W. van Bussel}, - title = {Estimating the angle of attack from Blade pressure measurements on the NREL Phase VI rotor using a free wake vortex model: axial conditions}, - journal = {Wind energy}, - year = {2006}, - volume={9}, - pages={549-577} -} - -@PHDTHESIS{sant:2007, - author = {T. Sant}, - title = {Improving BEM-based aerodynamics models in Wind turbine design codes}, - school = {DU Wind - Delft University of Technology}, - year = {2007}, -} -@PHDTHESIS{crawford:2006, - author = {C. Crawford}, - title = {Advanced engineering models for wind turbines with application to the design of a coning rotor concept}, - school = {Trinity College, Department of Engineering, University of Cambridge}, - year = {2006} -} - -crawford advanced engineering models for wind turbines - -@ARTICLE{gupta:2005, - author = {S. Gupta and J.G. Leishman}, - title = {Comparison of momentum and vortex methods for the aerodynamic analysis of wind turbines}, - journal = {43rd AIAA Aerospace Scieces and Exhibit}, - year = {2005} -} - - -@MASTERSTHESIS{komninos:2008, - title = {Modeling considerations of the optimum rotor using vortex method}, - author = {Konstantinos Komninos}, - school = {DTU}, - year = {2007}, - otherinfo = {} -} - -% --------------------------------------------------------------------------------} -% --- VORTEX LATTICE -% --------------------------------------------------------------------------------{ -@TECHREPORT{kerwin:1961, - author = {J. Kerwin}, - title = {The Solution of Propeller lifting surface problems by vortex lattice methods}, - institution = {Massachusetts Institute of Technology}, - year = {1961}, - otherinfo = {} -} - -@TECHREPORT{falkner:1943, - author = {V.M. Falkner}, - title = {The calculation of aerodynamics loading on surfaces of any shape}, - institution = {Aeronautical Research Concil R\&M No. 1910}, - year = {1934}, -} -@TECHREPORT{falkner:1947, - author = {V.M. Falkner}, - title = {The solution of lifting-plane problems by vortex lattice theory}, - institution = {Aeronautical Research Concil R\&M No. 2591}, - year = {1972}, -} -@ARTICLE{rehbach:1973, - author = {C. Rehbach}, - title = {Calcul d'ecoulements autour d'ailes sans epaisseur avec nappes tourbillonnaires evolutives}, - journal = {La Recherche Aerospatiale}, - year = {1972}, - volume = {2}, - pages = {53--61} -} - -@article{rehbach:1977, - title = {Numerical calculation of three-dimensional unsteady flows with vortex sheets}, - language = {French}, - author = {Rehbach, C.}, - journal = {Recherche Aerospatiale}, - number = {5}, - pages = {289-298}, - year = {1977}, - issn = {00341223}, - abstract = {Taking into account the vortex sheets generated by lifting obstacles in an incompressible flow with evanescing viscosity raises an important problem in the development of numerical methods for calculating three-dimensional, high Reynolds number, separated flows. The approach proposed is based on a volume discretization of the vortex vector which, in three-dimensional flow, will vary with time as a function of the local distortions of the velocity field in order to respect the conservation theorems pertaining to vortex flows. The Lagrangian integro-differential formulation is established that allows the evolution in time to be followed of a discrete distribution of fluid particles, each carrying a vortex vector. The numerical process is applied to the calculation of the sheet and of the aerodynamic coefficients of a low aspect ratio, rectangular flat plate.} -} - - - -% --------------------------------------------------------------------------------} -% --- LIFTING SURFACE - THEORY and CODES -% --------------------------------------------------------------------------------{ -@ARTICLE{kida:1980, - author = {T. Kida}, - title = {A Theoretical Treatment of Lifting Surface Theory of an Elliptic Wing}, - journal = {ZAMM}, - year = {1980}, - volume = {60}, - pages ={p645-651} -} - -@article{hauptman:1986, - title = {On the exact solution of the linearized lifting-surface problem of an elliptic wing}, - language = {English}, - author = {Hauptman, A. and Miloh, T.}, - journal = {Quarterly Journal of Mechanics and Applied Mathematics}, - volume = {39}, - number = {1}, - pages = {41-66}, - year = {1986}, - issn = {00335614, 14643855}, - abstract = {An analytic solution is presented for the lifting-surface problem of a thin circular or elliptic wing in steady incompressible potential flow. The analysis is based on expansion of the acceleration potential in an infinite series of ellipsoidal harmonics. Unlike previous analyses, which involve inversion of infinite sets of linear equations or the numerical solution of integral equations, the present method leads to rather simple explicit expressions for the lift and moment coefficients in terms of the aspect ratio. These expressions are valid in the whole range of aspect ratios from the two-dimensional airfoil through the circular wing to the slender wind.} -} - -@article{hill:1978, - title = {A surface vorticity theory for propeller ducts and turbofan engine cowls in non-axisymmetric incompressible flow}, - author = {V.P. Hill}, - journal = {I. Mech. E., J. Mech. Eng. Sci.}, - volume = {20}, - number = {4}, - year = {1978} -} - -@ARTICLE{tuck:1993, - author = {E.O. Tuck}, - title = {Some Accurate Solutions of the lifting surface integral equation}, - journal = {J. Austral. Math. Soc. Ser. B}, - year = {1993}, - volume = {35}, - pages={p127-144} -} - -@MASTERSTHESIS{tornado, - author = {T. Melin}, - title = {A vortex lattice MATLAB Implementation for linear Aerodynamic Wing applications}, - school = {Royal Institude of Technology (KTH)}, - year = {2000}, - month={December} -} -@ARTICLE{donadon:2009, - author = {M.V. Donadon and L. Iannucci}, - title = {A vortex lattice program for steady state aerodynamic analysis of flapped and twisted UAV wing planforms}, - journal = {Brazilian Symposium on Aerospace Eng. \& Applications}, - year = {2009} -} - -@article{mctavish:2014, - title = {An investigation of in-field blockage effects in closely spaced lateral wind farm configurations}, - author = {McTavish, S. and Rodrigue, S. and Feszty, D. and Nitzsche, F.}, - journal = {Wind Energy}, - pages = {n/a}, - year = {2014}, - issn = {10954244, 10991824}, - doi = {10.1002/we.1806} -} - - -% --------------------------------------------------------------------------------} -% --- AIRFOILS and AIRFOILS CORRECTIONS -% --------------------------------------------------------------------------------{ - -@book{naca460, -author = {E.N. Jacobs and K.E. Ward and R.M. Pinkerton}, -title = {The Characteristics of 78 related airfoil sections from tests in the variable-density tunnel}, -year = {1933}, -publisher= {National Advisory Committee For Aeronautics}, -note={{NACA} Report 460}, -} - - -@book{theoryofwingsections, -author = {I.H. Abbott and A.E. {Von Doenhoff}}, -title = {Theory of wing sections - Including a summary of airfoil data}, -year = {1959}, -publisher= {Dover Publications Inc, New York} -} -@CONFERENCE{bakadwt1, - author = {C. Bak}, - title = {Aerodynamic airfoil characteristics for wind turbines - 2D and 3D}, - booktitle = {DTU courses}, - year = {2010} -} -@UNPUBLISHED{bak:2010, - author = {C. Bak}, - title = {Aerodynamic design of wind turbine rotors}, - note = {Ris{\o}-I-Report}, - year={2010}, - month={October} -} - -@ARTICLE{bak:2006, - author = {C. Bak and J. Johansen and P.B. Andersen}, - title = {Three-Dimensional Corrections of Airfoil Characteristics Based on Pressure Distributions }, - journal = {European Wind Energy Conference \& Exhibition - Athens, Greece }, - year = {2006} -} -@TECHREPORT{snel:1993RotatingEffect, - author = {H. Snel and R. Houwink and J. Bosschers}, - title = {Sectional prediction of lift coefficient on rotating wind turbine blades in stall}, - institution = {ECN}, - year = {1993}, - number={ECN-C-93-052} -} - - -@ARTICLE{lindenburg:2004, - author = {C. Lindenburg}, - title = {Modelling of Rotational Augmentation Based on Engineering Considerations and Measurements}, - journal = {European Wind Energy Conference - London }, - year = {2004} -} -@ARTICLE{chaviaropoulos:2000, - author = {P.K. Chaviaropoulos and M.O.L. Hansen}, - title = {Investigating three-dimensional and rotational effects on wind turbine blades by means of quasi-3D Navier Stokes solver}, - journal = {J. Fluids Engineering}, - year = {2000}, - volume= {122}, - pages={p330-336}, - month={June} -} -@PHDTHESIS{himmelskamp:1945, - author = {H. Himmelskamp}, - title = {Profile investigations on a rotating airscrew}, - school = {MAP Volkenrode, Translation 832}, - year = {1947} -} -@ARTICLE{rasmussen:1988, - author = {F. Rasmussen and S.M. Petersen and G. Larsen and A. Kretz and P.D. Andersen}, - title = {Investigations of aerodynamics, structural dynamics and fatigue on Danwin 180 kW}, - journal = {Riso-M-2727}, - year = {1988} -} - -@ARTICLE{madsen:1988, - author = {H.A. Madsen and F. Rasmussen}, - title = {Derivation of three-dimensional airfoil data on the basis of experiment and theory}, - journal = {AWEA Conference}, - year = {1988} -} -@ARTICLE{madsen:1995, - author = {H.A. Madsen}, - title = {A CFD analysis of the actuator disc flow compared with momentum theory results}, - journal = {10th IEA Meeting, Edingburg}, - year = {1995} -} - - -@ARTICLE{ronsten:1991, - author = {G. Ronsten}, - title = {Static pressure measurements on a rotating and a non-rotating 2,375m wind turbine blade}, - journal = {EWEC}, - year = {1991} -} -@ARTICLE{bruining:1993, - author = {A. Bruining}, - title = {Pressure measurements on a rotating wind turbine blade on the open air rotor research facility of the Delft Technical University}, - journal = {EWEC}, - year = {1993} -} - - - - - - -@ARTICLE{savino:1985, - author = {J.M. Savino and T.W. Nyland}, - title = {Wind turbine flow visualization studies}, - journal = {NASA lewis Research Center, Cleeveland, Ohio}, - year = {1985} -} - -@ARTICLE{corrigan:1994, - author = {J.J. Corrigan and J.J. Schillings}, - title = {Empirical model for stall delay due to rotation}, - journal = {American Helicopter Society Aeromechanics Specialists conference}, - year = {1994} -} - -@ARTICLE{viterna:1981, - author = {L.A. Viterna and R.D. Corrigan}, - title = {Fixed pitch rotor performance of large horizontal axis wind turbines}, - journal = {DOE/NASA Workshop on large horizontal axis wind turbines}, - year = {1981} -} - -@ARTICLE{du:1998, - author = {Z. Du and M.S. Selig}, - title = {A 3-D stall delay model for horizontal axis wind turbie performance predictio}, - journal = {AIAA}, - year = {1998}, - pages={p9-19} -} -@TECHREPORT{lindenburg:2001, - author = {C. Lindenburg}, - title = {Stall coefficients - Aerodynamic airfoil coefficients at large angles of attack}, - institution = {ECN - RX01004}, - year = {2001} -} - -@TECHREPORT{tangler:2005, - author = {J. Tangler and J. David kocurek}, - title = {Wind turbines post-stall airfoil performance characteristics guidelines for blade-element momentum methods}, - institution = {NREL}, - year = {2005} -} - - -@book{montgomerie:1996, - title={Drag coefficient distribution on a wing at 90 degrees to the wind}, - author={Montgomerie, B.}, - series={ECN-C}, - year={1996}, - publisher={Netherlands Energy Research Foundation} -} - - - - -% --------------------------------------------------------------------------------} -% --- MOMENTUM THEORY - ACTUATOR DISC -% --------------------------------------------------------------------------------{ -@article{rankine:1865, -author = {W. J. Rankine}, -title = {on the mechanical principles of the action of propellers.}, -year = {1865}, -journal= {Transactions of the Institute of Naval Architects}, -volume=6, -pages={p13} -} - -@article{froude:1878, -author = {W. Froude}, -title = {On the mechanical principles of the action of propellers}, -year = {1878}, -journal= {Transactions of the Institute of Naval Architects}, -volume=19, -pages={p47} -} - -@article{froude:1889, -author = {R.E. Froude}, -title = {On the part played in propulsion by differences of fluid pressure}, -year = {1889}, -journal= {Transactions of the Institute of Naval Architects}, -volume=30, -pages={p390-405} -} - - - -@article{drzewiecki:1892, -author = {S. Drzewiecki}, -title = {M\'ethode pour la d\'etermination des \'el\'ements m\'ecaniques des propulseurs h\'elico\"idaux}, -year = {1893}, -journal= {Bulletin de l'Association Technique Maritime No. 3 - Session de 1892}, -publisher={Imprimerie Gauthier-Villars et Fils - Paris}, -pages={p11-31}, -note={(in French)} -} - -@article{lanchester:1915, -author = {F.W. Lanchester}, -title = {A contribution to the theory of propulsion and the screw propeller}, -year = {1920}, -journal= {Transactions of the Institution of Naval Architects}, -volume=57, -pages={p98-116} -} - -@techreport{joukowski:1918, -author = {N. E. Joukowski }, -title = {Travaux du Bureau des Calculs et Essais Aeronautiques}, -year = {1918}, -institution= {Ecole Superieure Technique de Moscou}, -note={Republished by editions Gauthier-Villars in ``Th\'eorie Tourbillonaire de l'h\'elice Propulsive'', Paris 1929 (in French). } -} - -@article{thoma:1925, - title = {Grundsatzliches zur einfachen Strahltheorie der Schraube.}, - author={D. Thoma}, - journal= {Zeitschrift fur Fl\:ugtechnik und Mot.}, - year= 1925, - volume=16, - number=10, - pages={206-208}, -} - -@book{joukowski:1929, - title = {Théorie tourbillonnaire de l'hélice propulsive}, - publisher = {Gauthier-Villars}, - author = {Joukowski, N. E.} , - pages = {204}, - year = {1929} -} - -@ARTICLE{joukowski:propeller1, -author={Joukowski, N. E. }, -title={{Vortex theory of screw propeller, I.}}, -journal={Trudy Otdeleniya Fizicheskikh Nauk Obshchestva Lubitelei Estestvoznaniya}, -year={1912}, -volume={16}, -number={1}, -pages={1-31}, -note={{(in Russian). French translation in: Th\'eorie tourbillonnaire de l'h\'elice propulsive. Gauthier-Villars: Paris, 1929; 1: 1-47.}} -} - -@article{joukowski:1920, -author = {N.E. Joukowski }, -title = {Windmill of the NEJ type}, -year = {1920}, -journal= {Transactions of the Central Institute for Aero-Hydrodynamics of Moscow}, -note={Also published in Joukowski NE. Collected Papers Vol VI. The Joukowski Institute for AeroHydrodynamics, -Moscow: vol VI, 405-409, 1937 (in Russian)} -} - -@article{betz:1920, -author = {A. Betz}, -title = {Das Maximum der theoretisch m\"oglichen Ausn\"utzung des Windes durch Windmotoren}, -year = {1920}, -journal= {Zeitschrift f\"ur das gesante Turbinewesen}, -volume=26, -pages={p307-309}, -note={(in German)} -} - -@TECHREPORT{glauert:1926, - author = {H. Glauert}, - title = {A general theory of the autogyro}, - institution = {{NACA} Reports and Memoranda No. 111}, - year = {1926}, -} - - - -@book{glauert:1935, -author = {H. Glauert}, -title = {Airplane propellers, {D}ivision {L}}, -year = {1935}, -journal= {Aerodynamic Theory}, -edition={{W.F. Durand (ed)}}, -publisher={Julius Springer, Berlin}, -volume={4}, -pages={p169-360} -} - -#Reference 5: -#Title: "Airplane propellers", In: Division L of Aerodynamic Theory, edited by W.F. Durand - -@techreport{wilsonlissaman:1974, -author = {R.E. Wilson and P.B.S. Lissaman}, -title = {Applied Aerodynamics of Wind Power Machines}, -year = {1974}, -month = {May}, -institution={Oregon State University, Corvallis} -} - -@techreport{wilsonlissaman:1976, -author = {R.E. Wilson and P.B.S. Lissaman and S.N. Walker}, -title = {Aerodynamic performance of wind turbines}, -year = {1976}, -month = {June}, -institution={Oregon State University, Corvallis} -} - - -@article{bergey:1979, -author = {K.H. Bergey}, -title = {The Lanchester-Betz Limit}, -year = {1979}, -journal= {Journal of Energy}, -volume={3}, -pages={p382-384} -} - -@article{conway:1995, - title = {Analytical solutions for the actuator disk with variable radial distribution of load}, - language = {English}, - publisher = {Cambridge Univ Press}, - author = {Conway, John T.}, - journal = {Journal of Fluid Mechanics}, - volume = {297}, - pages = {327-355}, - year = {1995}, - issn = {00221120, 14697645}, - abstract = {An analytical method somewhat analogous to finite wing theory has been developed which enables the flow induced by a linearized propeller actuator disk with variable radial distribution of load to be solved in closed form for the first time. Analytical solutions are given for various load distributions including the case of an arbitrary polynomial loading. As in finite wing theory, the case of elliptic loading is exceptionally simple and the induced velocities and stream function are simple expressions of elementary functions. Results are also given for a practical propeller load distribution with finite hub. The method can also be used to solve a wide range of analogous electromagnetic problems.} -} -@article{conway:1998, - title = {Exact actuator disk solutions for non-uniform heavy loading and slipstream contraction}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {Conway, J. T.}, - journal = {Journal Of Fluid Mechanics}, - volume = {365}, - pages = {235-267}, - year = {1998}, - issn = {00221120, 14697645}, - abstract = {A semi-analytical method has been developed to solve for the inviscid incompressible flow induced by a heavily loaded actuator disk with non-uniform loading. The solution takes the contraction of the slipstream fully into account. The method is an extension of the analytical theory of Conway (1995) for the linearized actuator disk and is exact for an incompressible perfect fluid. The solutions for the velocities and stream function are given as one-dimensional integrals of expressions containing complete elliptic integrals. Any load distribution with bounded radial gradient can be treated. Results are presented here for both contra-rotating and normal propellers. For the special case of a contra-rotating propeller with a parabolic velocity profile in the ultimate wake, the vorticity in the slipstream is shown to be the same as in the analytically tractable spherical vortex of Hill (1894) and the related family of steady vortices explored by Fraenkel (1970, 1972) and Norbury (1973).} -} - -@INPROCEEDINGS{conway:2000, - author = {J. T. Conway and F. Tezok}, - title = {Unsteady three-dimensional vortex sheet panel solutions for oscillating wings}, - booktitle = {Third International Conference On Nonlinear Problems in Aviation and Aerospace}, - year = {2000}, -} - - -@INPROCEEDINGS{schaffarczyk:2000, - author = {A. P. Schaffarczyk and J. T. Conway}, - title = {Application of Nonlinear Actuator Disk Theory to Wind Turbines}, - booktitle = {14th Symposium IEA Joing Action on Aerodynamics of Wind Turbines, NREL, Boulder, Colorado}, - year = {2000}, -} - -@article{schaffarczyk:2000viscous, - title = {Comparison of a nonlinear actuator disk theory with numerical integration including viscous effects}, - language = {eng}, - publisher = {CASI}, - author = {A. P. Schaffarczyk and J. T. Conway}, - journal = {Canadian Aeronautics and Space Journal, Can Aeronaut Space J}, - volume = {46}, - number = {4}, - pages = {209-215}, - year = {2000}, - issn = {00082821}, - abstract = {The nonlinear inviscid actuator disk theory of Conway has been compared with a numerical solution of the Navier-Stokes equations for the equivalent disk discontinuity problem in the presence of viscosity. Good agreement between these two different approaches was obtained, confirming that viscous effects are small for the isolated actuator disk, which has no solid boundaries and hence does not have a no-slip boundary condition.} -} - -@INPROCEEDINGS{conway:2002, - author = {J. T. Conway}, - title = {Application of an exact nonlinear actuator disk theory to wind turbines}, - booktitle = {Proceedings of ICNPAA, Melbourne Florida}, - year = {2002}, -} - - - -@INPROCEEDINGS{conway:2003, - author = {J. T. Conway}, - title = {Analytical Solutions for the General Non-Axisymmetric Linearized Actuator Disk}, - booktitle = {Proceedings of AIAA Orlando}, - year = {2003}, -} - - -@article{sharpe:2004, - title = {A general momentum theory applied to an energy-extracting actuator disc}, - language = {English}, - publisher = {JOHN WILEY \& SONS LTD}, - author = {Sharpe, DJ}, - journal = {Wind Energy}, - volume = {7}, - number = {3}, - pages = {177-188}, - year = {2004}, - issn = {10954244, 10991824}, - abstract = {A general momentum theory for an energy-extracting actuator disc modelling a rotor with a multiplicity of blades having radially uniform circulation is presented that includes the effects of wake rotation and expansion. A parallel theory directed at the propeller has been published elsewhere, but not one intended for the wind turbine. The rotation of the wake is shown to be accompanied by a fall in static pressure that is additional to that which occurs across the actuator disc and accounts for the energy extraction from the wind. Energy extraction is recognized in the fully developed wake by the flow regaining the static pressure of the undisturbed wind at the expense of the kinetic energy in the wake. Because the wake is still rotating in the fully developed wake, the additional fall in static pressure appears there also and so does not augment the energy extraction. However, the additional fall in pressure would cause a discontinuity in pressure across the fully developed wake but is prevented by a further slowing down of the wake. The additional slowing down extracts a little more energy from the flow than that predicted by the simple momentum theory, which does not include wake rotation. The overall effect of wake rotation on energy extraction is very small for wind turbines operating at high tip speed ratios but can significantly increase the predicted power output for turbines operating at low tip speed ratios. Copyright (C) 2004 John Wiley Sons, Ltd.}, - doi = {10.1002/we.118} -} - - - -@article{kuik:2004, - title = {An inconsistency in the actuator disc momentum theory}, - language = {English}, - publisher = {JOHN WILEY \& SONS LTD}, - author = {van Kuik, GAM}, - journal = {Wind Energy}, - volume = {7}, - number = {1}, - pages = {9-19}, - year = {2004}, - issn = {10954244, 10991824}, - abstract = {The classical momentum theory for actuator discs with a constant normal load Deltap addresses only the axial momentum balance. Now the radial balance is also derived, which, in the absence of a radial disc load, leads to the requirement that the integral of the static pressure along the disc centre line must be zero. The axial and radial balances appear to be mutually inconsistent. the axial balance provides the well-known results, but the radial balance cannot be satisfied. The inconsistency can be removed by assuming that the actuator disc force held is composed of more than the constant normal load Deltap. It is shown that the modelling by Lee and Greenberg (Journal of Fluid Mechanics 1984, 745:287) of the load and flow of an actuator strip in hover implies the existence of a singular suction force at the edge. Their results deviate, without explanation so for, from the predictions of classical momentum theory. Addition of this edge force to the radial and axial momentum balances provides consistent results. A more general explanation or solution for the inconsistency is not yet ore cable. Comparison the present inviscid analysis with a Navier-Stokes calculation by Mikkelsen et al. (Wind Energy 200 1; 4:12 1) shows that the integrated pressure along the disc centre line is indeed non-zero, but that the radial balance is still satisfied. It is not clear why this deviates from the analysis. Copyright (C) 2004 John Wiley Sons, Ltd.}, - doi = {10.1002/we.104} -} - -@ARTICLE{wald:2006, - author = {Q. R. Wald}, - title = {The aerodynamics of propellers}, - journal = {Progress in Aerospace Science}, - year = {2006}, - volume={42}, - doi = {10.1016/j.paerosci.2006.04.001}, - pages = {85--128}, - otherinfo = {} -} - - - -@article{kuik:2007, -author = {G. A. M. {van Kuik}}, -title = {The Lanchester-Betz-Joukowsky limit}, -year = {2007}, -journal= {Wind Energy}, -publisher={Wiley}, -volume={10}, -pages={p289-291} -} - -@INPROCEEDINGS{kuik:2011, -author = {G. A. M. {van Kuik}}, -title = {The ideal wake of an ideal actuator disc}, -year = {2011}, -pages = {127--132}, -booktitle= {Proceedings of the Wake Conference, Visby} -} - -@ARTICLE{kuik:2014, - author = {G. A. M. {van Kuik}}, - title = {On the generation of vorticity by force fields in rotor- and actuator flows}, - journal = {Renewable Energy}, - year = {2014}, - volume = {70}, - pages={124--128}, - url = {http://dx.doi.org/10.1016/j.renene.2014.02.056} -} - - -@ARTICLE{kuik:2015, - author = {G. A. M. {van Kuik} and L. E. M. Lignarolo}, - title = {Potential flow solutions for energy extracting actuator disc flows}, - journal = {Submitted to Wind Energy}, - year = {2015}, -} -% volume = {70}, -% pages={124--128}, -% url = {http://dx.doi.org/10.1016/j.renene.2014.02.056} - -@article{morino:1986, - title = {Helmholtz decomposition revisited: Vorticity generation and trailing edge condition}, - language = {English}, - publisher = {Springer-Verlag}, - author = {Morino, L.}, - journal = {Computational Mechanics}, - volume = {1}, - number = {1}, - pages = {65-90}, - year = {1986}, - issn = {01787675, 14320924}, - abstract = {The use of the Helmholtz decomposition for exterior incompressible viscous flows is examined, with special emphasis on the issue of the boundary conditions for the vorticity. The problem is addressed by using the decomposition for the infinite space; that is, by using a representation for the velocity that is valid for both the fluid region and the region inside the boundary surface. The motion of the boundary is described as the limiting case of a sequence of impulsive accelerations. It is shown that at each instant of velocity discontinuity, vorticity is generated by the boundary condition on the normal component of the velocity, for both inviscid and viscous flows. In viscous flows, the vorticity is then diffused into the surroundings: this yields that the no-slip conditions are thus automatically satisfied (since the presence of a vortex layer on the surface is required to obtain a velocity slip at the boundary). This result is then used to show that in order for the solution to the Euler equations to be the limit of the solution to the Navier-Stokes equations, a trailing-edge condition (that the vortices be shed as soon as they are formed) must be satisfied. The use of the results for a computational scheme is also discussed. Finally, Lighthill's transpiration velocity is interpreted in terms of Helmholtz decomposition, and extended to unsteady compressible flows.}, - doi = {10.1007/BF00298638} -} - - -@article{okulov:2011, -author = {V. L. Okulov and G. A. M. {van Kuik}}, -title = {The Betz-Joukowsky limit: on the contribution to rotor aerodynamics by the British, German and Russian scientific schools}, -year = {2011}, -journal= {Wind Energy}, -publisher={Wiley}, -volume={464} -} - -@article{sorensen:2010, - author = {J. N. S{\o}rensen and G. A. M. {van Kuik}}, - title = {General momentum theory for wind turbines at low tip speed ratios}, - publisher = {John Wiley \& Sons Ltd.}, - journal = {Wind Energy}, - volume = {14}, - number = {7}, - pages = {821-839}, - year = {2011}, - issn = {10991824, 10954244}, - doi = {10.1002/we.423} -} - -@book{sorensen:book, - title = {General momentum theory for horizontal axis wind turbines}, - author = {J. N. S{\o}rensen}, - publisher = {Springer}, - year = "2016", - isbn = "978-3-319-22113-7" -} - - - -@article{kuik:2015:joukowski, -title = "Rotor theories by Professor Joukowsky: Momentum theories ", -author = "G. A. M. van Kuik and J. N. S{\o}rensen and V. L. Okulov", -journal = "Progress in Aerospace Sciences ", -volume = "73", -number = "0", -pages = "1 - 18", -year = "2015", -issn = "0376-0421", -doi = "http://dx.doi.org/10.1016/j.paerosci.2014.10.001", -abstract = "Abstract This paper is the first of two papers on the history of rotor aerodynamics with special emphasis on the role of Joukowsky. The present one focuses on the development of the momentum theory while the second one surveys the development of vortex theory for rotors. Joukowsky has played a major role in these developments. Although he cooperated with other famous aerodynamicists like Prandtl, his contribution is not well recognized as most of his publications are in Russian. The paper discusses the role of the English, Russian and German research schools in the beginning of the Twentieth Century, and the contributions by individual researchers like Lanchester, Prandtl, Betz and Joukowsky himself. After the one-dimensional momentum theory was well established, the introduction of torque and angular momentum was the next step. Joukowsky has led the basis for this step, but Glauert׳s Blade Element Momentum still is the basis of current rotor design codes. He applied some assumptions limiting the validity to moderate and high tip speed ratios. S{\o}rensen and van Kuik published a solution for wind turbines with very low tip speed ratios, which is now expanded to propellers as well, with one remaining assumption of inviscid flow. For very low tip speed ratios the general momentum theory gives unphysical results which disappear after applying a perturbation parameter representing phenomena not captured by the Euler equations. " -} -@article{okulov:2015:joukowski, -title = "The rotor theories by Professor Joukowsky: Vortex theories ", -author = "V. L. Okulov and J. N. S{\o}rensen and D. H. Wood", -journal = "Progress in Aerospace Sciences ", -volume = "73", -number = "0", -pages = "19 - 46", -year = "2015", -issn = "0376-0421", -doi = "http://dx.doi.org/10.1016/j.paerosci.2014.10.002", -abstract = "Abstract This is the second of two articles with the main, and largely self-explanatory, title “Rotor theories by Professor Joukowskyâ€. This article considers rotors with finite number of blades and is subtitled “Vortex theoriesâ€. The first article with subtitle “Momentum theoriesâ€, assessed the starring role of Joukowsky in aerodynamics in the historical context of rotor theory. The main focus in both articles is on wind turbine rotors, but much of the basic theory applies to propellers and helicopters as well. Thus this second article concentrates on the so-called blade element theory, the Kutta–Joukowsky theorem, and the development of the rotor vortex theory of Joukowsky. This article is to a large extent based on our own work, which constitutes the first successful completion and further development of Joukowsky׳s work by deriving the first analytical solution of his rotor. This rotor has a finite number of blades and will be compared with the rotor analysis of Betz and of others of the German school of aerodynamics. " -} - - - - - - -@article{xiros:2007, - title = {Remarks on wind turbine power absorption increase by including the axial force due to the radial pressure gradient in the general momentum theory}, - language = {English}, - publisher = {JOHN WILEY \& SONS LTD}, - author = {Xiros, M. I. and Xiros, N. I.}, - journal = {Wind Energy}, - volume = {10}, - number = {1}, - pages = {99-102}, - year = {2007}, - issn = {10954244, 10991824}, - abstract = {It is shown that the general momentum theory, in the form that it has been published previously, underestimates the axial force and the absorbed power, possibly by a large amount if the expansion of the wake is large. Consequently, the Betz limit, theoretically, can probably be exceeded by a correspondingly large amount. Copyright (c) 2006 John Wiley \& Sons, Ltd.}, - doi = {10.1002/we.203} -} - -@article{mccutchen:1985, - title = {A THEOREM ON SWIRL LOSS IN PROPELLER WAKES}, - language = {English}, - publisher = {AMER INST AERONAUT ASTRONAUT}, - author = {{Mccutchen, CW}}, - journal = {Journal Of Aircraft}, - volume = {22}, - number = {4}, - pages = {344-346}, - year = {1985}, - issn = {00218669, 15333868}, - abstract = {The wake of a propeller has tangential as well as longitudinal velocity relative to still air. The coarser the spiral the propeller carves in the air, the greater is the ratio of tangential to longitudinal wake velocity. As aircraft with propellers go faster, designers must use higher and higher ratios of pitch to diameter to keep the propeller tips below, or not too far above, the speed of sound. The higher thrusts required for higher speeds demand higher loading. All wake energy losses will rise, the swirl component more than the longitudinal component. If the longitudinal component of velocity is uniform across a propeller wake, the swirl energy in the wake is exactly paid for by the work done by wake suction. For lightly loaded propellers the longitudinal velocity is always fairly uniform, and the relation between swirl energy and wake suction is a good approximation. Either swirl energy or wake suction may be used to measure swirl loss, but not both at once. It is not their sum.} -} -@article{wood:2007, - title = {Including swirl in the actuator disk analysis of wind turbines}, - language = {eng}, - publisher = {Multi-Science Publishing Co. Ltd.}, - author = {Wood, David H.}, - journal = {Wind Engineering, Wind Eng}, - volume = {31}, - number = {5}, - pages = {317-323}, - year = {2007}, - issn = {0309524x, 2048402x}, - abstract = {It is shown that the presence of swirl in the wake of a wind turbine complicates the simple actuator disk analysis that provides such basic results as the Lanchester-Betz limit on the power coefficient. The simple analysis remains valid at high tip speed ratio for a sufficiently small core radius of the hub vortex. As the tip speed ratio decreases, the present analysis eventually becomes invalid. It is, however, reasonable to conclude that including the effects of the hub vortex causes the maximum power coefficient to increase above the Lanchester-Betz limit with decreasing tip speed ratio. The extent to which this conclusion depends on the assumed vortex model was investigated briefly by considering a more general model for the hub vortex. The results strongly imply that some account of the vortex structure of the wake will be required to resolve fully the effects of swirl. Unfortunately there are no measurements currently available for the hub vortex.}, - doi = {10.1260/030952407783418766} -} - -@techreport{houlsbyoldfiled2008, -author = {G.T. Houlsby, S. Draper and M.L.G. Oldfield}, -title = {Application of Linear Momentum Actuator Disc Theory to Open Channel Flow}, -year = {2008}, -institution= {University of Oxford, Department of Engineering Science}, -note={Report No. OUEL 2296/08} -} - -@ARTICLE{troldborg:2010, - author = {N. Troldborg and M. Gaunaa and R. Mikkelsen}, - title = {Actuator disc simulations of influence of wind shear on power production of wind turbines}, - journal = {Torque 2010, The science of making torque from wind, EWEA}, - pages ={p271-297}, - year = {2010} -} - - -@TECHREPORT{bak:2005chapter3, - title = {Inboard rotor/blade aerodynamics and its influence on blade design}, - year = {2005}, - institution={Ris{\o} Laboratory for Sustainable Energy, Roskilde}, - author={H.A. Madsen and R. Mikkelsen and J. Johansen and C. Bak and S. {\O}ye and N.N. S{\o}rensen}, - editor={C. Bak}, - number={Riso-R-1559 - Chapter 3} -} - - - - -% --------------------------------------------------------------------------------} -% --- DYNAMIC INFLOW -% --------------------------------------------------------------------------------{ -@TECHREPORT{snel:1993dynamicinflow, -author = {H. Snel and J. G. Schepers}, -title = {{Investigation and modelling of dynamic inflow effects}}, -institution = {ECN-RX--93-029}, -year = {1993} -} - -@TECHREPORT{snel:1995, -author = {H. Snel and J. G. Schepers}, -title = {Joint investigation of dynamic inflow effects and implementation of an engineering method}, -institution = {ECN-C--94-107, Energy Research Centre of the Netherlands, Petten }, -year = {1995} -} - -@article{snel:1992, - title = {Engineering models for dynamic inflow phenomena}, - language = {English}, - author = {H. Snel and J. G. Schepers}, - journal = {Journal of Wind Engineering and Industrial Aerodynamics}, - volume = {39}, - number = {1-3}, - pages = {267-281}, - year = {1992}, - issn = {01676105}, - abstract = {Within the CEC Joule program, a joint investigation project was started up concerning dynamic inflow effects. These effects describe the wake-induced unsteadiness of the flow in the rotor plane. Aim of the projects is the definition and implementation of engineering models within the current state-of-the-art computer codes for dynamic load calculations. These models are to be qualified by means of comparison with both existing sophisticated models (dynamic vortex wake calculations) and with experiments to be carried out on the Danish Tjaereborg 2 MW turbine. The paper discusses the first results of the project. Proposed engineering models are presented. Comparisons between results of the proposed models and the free vortex wake model of the University of the Bundeswehr, Munich are shown, for simplified cases, viz. a step on the wind speed and simple pitching transients. Finally, measurements for a pitching transient are shown and compared with calculations. Both measurements and calculations show important effects of dynamic inflow, resulting in large overshoots of loads compared to stationary values. The agreement between measurements and calculations is very encouraging} -} - - -% editor = "C. Bak", -@inbook{madsen:2007shear, - title = "Influence of wind shear on rotor aerodynamics, power and loads", - author = "{Madsen Aagaard}, Helge and R. Mikkelsen and S\o{}rensen, {Niels N.} and M.O.L. Hansen and S. \O{}ye and Jeppe Johansen", - year = "2007", - isbn = "978-87-550-3610-9", - series = "Risoe-R-1611", - pages = "101-116", - booktitle = "Research in aeroelasticity EFP-2006 - Editor: C. Bak", - publisher = {Forskningscenter Risoe.} -} - - -@article{larsen:2013, - title = {Validation of the dynamic wake meander model for loads and power production in the Egmond aan Zee wind farm}, - language = {English}, - publisher = {WILEY-BLACKWELL}, - author = {Larsen, Torben J. and Madsen, Helge Aa. and Larsen, Gunner C. and Hansen, Kurt S.}, - journal = {Wind Energy}, - volume = {16}, - number = {4}, - pages = {605-624}, - year = {2013}, - issn = {10954244, 10991824}, - abstract = {This paper investigates wake effects on load and power production by using the dynamic wake meander (DWM) model implemented in the aeroelastic code HAWC2. The instationary wind farm flow characteristics are modeled by treating the wind turbine wakes as passive tracers transported downstream using a meandering process driven by the low frequent cross-wind turbulence components. The model complex is validated by comparing simulated and measured loads for the Dutch Egmond aan Zee wind farm consisting of 36 Vestas V90 turbine located outside the coast of the Netherlands. Loads and production are compared for two distinct wind directionsa free wind situation from the dominating southwest and a full wake situation from northwest, where the observed turbine is operating in wake from five turbines in a row with 7D spacing. The measurements have a very high quality, allowing for detailed comparison of both fatigue and minmeanmax loads for blade root flap, tower yaw and tower bottom bending moments, respectively. Since the observed turbine is located deep inside a row of turbines, a new method on how to handle multiple wakes interaction is proposed. The agreement between measurements and simulations is excellent regarding power production in both free and wake sector, and a very good agreement is seen for the load comparisons too. This enables the conclusion that wake meandering, caused by large scale ambient turbulence, is indeed an important contribution to wake loading in wind farms. Copyright (c) 2012 John Wiley & Sons, Ltd.}, - doi = {10.1002/we.1563} -} - - -@inproceedings{pirrung:2012torque, - title={Improvement of a near wake model for trailing vorticity}, - booktitle={Proceedings of the science of making torque from wind, Oldenburg}, - author={G.~R. Pirrung and M.~H. Hansen and H.~Aa. Madsen}, - year={2012} -} - -@ARTICLE{beddoes:1987, - author = {T.~S. Beddoes}, - title = {A near wake dynamic model }, - journal = {proc. of the AHS national specialist -meeting on aerodynamics and aeroacoustics}, - year = {1987}, -} - - - - -@ARTICLE{madsen:2004, - author = {H.~Aa. Madsen and F. Rasmussen}, - title = {A near wake model for trailing vorticity compared with the blade element momentum theory}, - journal = {Wind Energy}, - year = {2004}, - volume = {7}, - pages = {325-341} -} -% --------------------------------------------------------------------------------} -% --- YAW -% --------------------------------------------------------------------------------{ -@article{coleman:1945, -author = {R. P. Coleman and A. M. Feingold and C. W. Stempin}, -title = {Evaluation of the induced-velocity field of an idealized helicopter rotor}, -year ={1945}, -journal = {{NACA} ARR No. L5E10}, - pages = {1--28} -} -@ARTICLE{drees:1949, - author = {M. Drees}, - title = {A Theory of airflow through rotors and its application to some helicopter problems}, - journal = {Journal of the Helicopter Association of Great Britain}, - year = {1949}, - pages= {79--104}, - volume = {3}, - number = {2}, -} - - - -@TECHREPORT{mangler:1950, -author = {K. W. Mangler and H. B. Squire}, -title = {The induced velocity field of a rotor}, -institution = {Aeronautical Research Council - R.\&M. No. 2642}, -year ={1950} -} -@TECHREPORT{castles:1954, -author = {W. Castles and J. H. {De Leeuw}}, -title = {The Normal Component of the induced velocity in the vicinity of a lifting rotor and some examples of its application}, -institution= {{NACA} Report No. 1184, Giorgia Institute of Technology, Atlanta}, -year= {1954} -} -@TECHREPORT{castles:1956, -author = {W. Castles and H. L. Durham}, -title = {Distribution of normal component of induced velocity in lateral plane of a lifting rotor}, -institution= {{NACA TN-3841}}, -year= {1956} -} -@TECHREPORT{heyson:1956, -author = {H. Heyson and S. Katzoff}, -title = {Normal component of induced velocity field in the vicinity of a lifting rotor with a nonuniform disk loading}, -institution= {{NACA TN-3690}, Langley Aeronautical Laboratory, Langley Field}, -year= {1956} -} -@TECHREPORT{heyson:1957, -author = {H. Heyson and S. Katzoff}, -title = {Induced velocities near a lifting rotor with nonuniform disk loading}, -institution= {{NACA} report 1319}, -year= {1957} -} -@ARTICLE{willmer:1959, - author = {M. A. P. Willmer}, - title = {The loading of helicopter rotor blades in forward flight}, - publisher = {HMSO}, - journal = {Aeronautic Research Council/Report and Memoranda(ARC/R\&M)}, - volume = {3318}, - year = {1959}, - otherinfo={RAE Naval Report Vo. 2-N-76935 April 1959, Report#2-N-76935 - RAE Naval Report, Vol. 2-N-76935, Apr. 1959, Report # 2-N-76935. Lehman -http://discovery.nationalarchives.gov.uk/SearchUI/Details?uri=C2441282 - }, -} - - - -@ARTICLE{pitt:1981, - author = {D. M. Pitt and D. Al. Peters}, - title = {Theoretical Prediction of dynamic-inflow derivatives}, - journal = {Vertica}, - year = {1981}, - volume = {5}, - pages = {21--34}, -} - - - - -@TECHREPORT{bramwell:1974, -author = {Bramwell}, -title = {{Some Remarks on the Induced Velocity Field of a Lifting Rotor and on Glauert's Formula}}, -institution= {Aeronautical Research Council - C.P. No. 1301}, -year= {1974} -} -@TECHREPORT{egolf:1983, - author = {Egolf, A. and Landgrebe, A. J.}, - title = {Helicopter Rotor Wake Geometry and Its Influence in Forward Flight}, - institution = {{NASA} CR-3726}, - year = {1983} -} - -@TECHREPORT{hansen:1992, -author = {A.C. Hansen}, -title = {Yaw Dynamics of horizontal axis wind turbines}, -institution= {{NREL- TP-440-4822}}, -year = {1992} -} -@ARTICLE{oye:1992, - author = {S. {\O}ye}, - title = {Induced velocities for rotors in yaw - An extension of the blade element momentum method}, - journal = {Sixth IEA Symposium on the Aerodynamics of Wind Turbines, ECN, Petten}, - pages = {1--5}, - year = {1992} -} - - -@article{chaney:2001, -author = {K. Chaney and A. J. Eggers and P. J. Moriarty and W. E. Holley}, -doi = {10.1115/1.1410109}, -title = {Skewed Wake Induction Effects on Thrust Distribution on Small Wind Turbine Rotors}, -year= {2001}, -journal={J. Sol. Energy Eng.}, -volume={123}, -number={4}, -pages={290-295} -} - - -@ARTICLE{chaney:2002, - author = {K. Chaney and A. J. Eggers}, - title = {Expanding Wake induction effects on thrust distribution on a rotor disc}, - journal = {Wind Energy}, - year = {2002}, - volume = {5}, - pages = {213-226}, -} - -@MISC{schepers:wp8, - author={J. G. Shepers and R. J. Barthelmie and E. S. Politis}, - year={2010}, - title={Upwind Wp8: Deliverable D8.5, Wake reducing concepts} -} -@book{schepers:1998yaw, - title={An Engineering Model for Yawed Conditions, Developed on the Basis of Wind Tunnel Measurements}, - author={Schepers, J.G.}, - series={ECN-RX-98-057}, - year={1998}, - publisher={Netherlands Energy Research Foundation ECN, Petten} -} - -@ARTICLE{mcwilliam:2011, - author = {M. K. {McWilliam} and S. Lawton and S.Cline and C. Crawford}, - title = {A corrected blade element momentum method for simulating wind turbines in yawed flow}, - journal = {Proceedings of 49th AIAA Meeting, Orlando}, - year = {2011}, - pages={1--10} -} - - -@article{mcwilliam:2014, - author={Michael K McWilliam and Curran Crawford}, - title={Finite Element Based Lagrangian Vortex Dynamics Model for Wind Turbine Aerodynamics}, - journal={Journal of Physics: Conference Series}, - volume={524}, - number={1}, - pages={012127}, - url={http://stacks.iop.org/1742-6596/524/i=1/a=012127}, - year={2014} -} - -Haans, W. "Wind turbine aerodynamics in yaw - unravelling the measured rotor wake" Delft, 271 p. -@PHDTHESIS{haans:2011, - author = {W. Haans}, - title = {Wind turbine aerodynamics in yaw - unravelling the measured rotor wake}, - school = {DU Wind - Delft University of Technology}, - year = {2011} -} - - - - -@INPROCEEDINGS{guntur:2012yaw, -author = {S. Guntur and N. Troldborg and M. Gaunaa}, -title = {Application of engineering models to predict wake deflection due to a tilted wind turbine}, -booktitle = {EWEC, Copenhagen}, -year={2012}, -} - -@INPROCEEDINGS{troldborg:2012, -author = {N. Troldborg and M. Gaunaa and S. Guntur}, -title = {{Modelling the influence of yaw using a simple vortex rotor model}}, -booktitle = {EWEC, Copenhagen}, -year = {2012}, -pages={1--5}, -} - -@article {jimenez:2010, -author = {\'A. Jim\'enez and A. Crespo and E. Migoya}, -title = {Application of a {LES} technique to characterize the wake deflection of a wind turbine in yaw}, -journal = {Wind Energy}, -volume = {13}, -number = {6}, -publisher = {John Wiley \& Sons, Ltd.}, -issn = {1099-1824}, -url = {http://dx.doi.org/10.1002/we.380}, -doi = {10.1002/we.380}, -pages = {559--572}, -keywords = {wind turbine wake, wind turbine in yaw, large-eddy simulation, wake deflection, active control in wind farms}, -year = {2010}, -} -@article{coton:1999, - title = {The prediction of horizontal axis wind turbine performance in yawed flow using an unsteady prescribed wake model}, - language = {English}, - publisher = {MECHANICAL ENGINEERS PUBLICATIONS LTD}, - author = {Coton, F. N. and Wang, T.}, - Journal = {Proceedings- Institution Of Mechanical Engineers Part A Journal Of Power And Energy}, - volume = {213}, - number = {1}, - pages = {33-44}, - year = {1999}, - issn = {0957-6509} -} -@article {coton:2002, -author = {Coton, Frank N. and Wang, Tongguang and Galbraith, Roderick A. McD.}, -title = {An examination of key aerodynamic modelling issues raised by the NREL blind comparison}, -journal = {Wind Energy}, -volume = {5}, -number = {2-3}, -publisher = {John Wiley \& Sons, Ltd.}, -issn = {1099-1824}, -url = {http://dx.doi.org/10.1002/we.58}, -doi = {10.1002/we.58}, -pages = {199--212}, -keywords = {wind turbine, modelling, vortex wake model, prescribed wake}, -year = {2002}, -} - -@article {pereira:2013, -author = {Pereira, Ricardo and Schepers, Gerard and Pavel, Marilena D.}, -title = {Validation of the Beddoes–Leishman dynamic stall model for horizontal axis wind turbines using MEXICO data}, -journal = {Wind Energy}, -volume = {16}, -number = {2}, -issn = {1099-1824}, -url = {http://dx.doi.org/10.1002/we.541}, -doi = {10.1002/we.541}, -pages = {207--219}, -keywords = {HAWT, dynamic stall, Beddoes-Leishman, MEXICO}, -year = {2013}, -} -@article{kominer:2013, - title = {New Actuator-Disk Model for a Skewed Flow}, - language = {English}, - publisher = {AMER INST AERONAUTICS ASTRONAUTICS}, - author = {Kominer, Sivan and Rosen, Aviv}, - journal = {AIAA Journal}, - volume = {51}, - number = {6}, - pages = {1382-1393}, - year = {2013}, - issn = {00011452, 1533385x}, - abstract = {In a previous paper, a novel approach to axisymmetric actuator-disk modeling was presented. In the present paper, this modeling is extended to include the case of a skewed flow, which is asymmetric. Similar to the axisymmetric case, it is assumed that the pressure difference between both sides of each point of the disk is a time average of the pressure difference between both sides of the blade elements that pass through the same point. The influence of the loaded disk on the flowfield is modeled by a distribution of sinks/sources over the disk plane. Closed-form integral expressions are obtained for the induced velocity through and upstream of the disk. By using Bernoulli's equation, which relates between the flow far upstream and the flow just before crossing the disk plane, an additional nonlinear algebraic equation for the induced-velocity distribution over the disk is obtained. Discretization of the integral equations results in a system of nonlinear algebraic equations. An iterative procedure leads to the final solution. The model is efficient, stable, easy to apply, and solve. Comparisons with results of another method from the literature exhibit a very good agreement.}, - doi = {10.2514/1.J052057} -} - - -% --------------------------------------------------------------------------------} -% --- SHEAR -% --------------------------------------------------------------------------------{ -@article{zahle:2008, - title = {Rotor Aerodynamics in Atmospheric Shear Flow}, - publisher = {EWEA}, - author = {Zahle, Frederik and S{\o}rensen, Niels}, - journal = {{EWEC} 2008 Conference Proceedings}, - pages = {120-124}, - year = {2008} -} -@article{ZahleF2010, - author ={F. Zahle and N.N. S{\o}rensen}, - title ={{Navier-Stokes} Rotor Flow Simulations with Dynamic Inflow.}, - journal={Torque Conference,Crete, Greece}, - year = {2010} -} -@article{MicallefD2010, - Author = {Micallef, D. and Ferreira, C.S. and Sant, T. and van Bussel, G.}, - Journal = {3rd Conference on The science of making Torque from Wind, Crete, Greece}, - Year ={2010}, - Title = {{An Analytical Model of Wake Deflection Due to Shear Flow}}, - Pages ={337-347} - } -@techreport{grasso:2010, - author = {Grasso, F.}, - Title = {{Ground and Wind Shear Effects in Aerodynamic Calculations}}, - Institution = {Energy research center of the Netherlands (ECN)}, - Number = {ECN-E--10-016}, - Year = {2010} - } - -@article{ShenX2011, - Author = {X. Shen and X. Zhu and Z. Du}, - Journal = {Energy}, - Volume = {36}, - pages = {1424-1434}, - Title = {{Wind turbine aerodynamics and loads control in wind shear flow}}, - Year = {2011} - } - -@article{madsen:2012, - Author = {Madsen, H.Aa. and Riziotis, V. and , Zahle, F. and Hansen, M.O.L. and Snel, H. and Grasso, F. and Larsen, T.J. and Politis, E. and Rasmussen, F.}, - Title = {Blade element momentum modeling of inflow with shear in comparison with advanced model results}, - Journal = {Wind Energy}, - Volume = {15}, - Pages = {63-81}, - Year = {2012} -} - -@article{SezerUzolN2013, - Author = {Sezer-Uzol, N. and Uzol, O.}, - Journal = {Wind Energy}, - Volume = {16}, - Title = {Effect of steady and transient wind shear on the wake structure and performance of a horizontal axis wind turbine rotor}, - Year = {2013}, - Pages = {1-17} -} -% --------------------------------------------------------------------------------} -% --- ACCELERATION POTENTIAL -% --------------------------------------------------------------------------------{ -% Acceleration potential -@article{vanbussel:1992, -author = {G. J. W. {Van Bussel}}, -pages = {161--172}, -title = {{The use of the asymptotic acceleration potential method for horizontal axis windturbine rotor aerodynamics}}, -journal={Journal of Wind Engineering and Industrial Aerodynamics}, -volume = {39}, -year = {1992} -} - - - -% --------------------------------------------------------------------------------} -% --- DYNAMIC STALL -% --------------------------------------------------------------------------------{ -@TECHREPORT{theodorsen:1935, - title={General theory of aerodynamic instability and the mechanism of flutter}, - author={T. Theodorsen}, - year={1935}, - institution={NACA report no 496, National Advisory Committee for Aeronautics}, - pages={p413–433} -} - -@article{leishmanbeddoes1989, - author = {J. G. Leishman and T.S. Beddoes}, - title = {A semi-empirical model for dynamic stall}, - year = {1989}, - journal= {Journal of the American Helicopter Society}, - volume={34}, - number={3}, - pages={p3-17} -} - -@article{petot:1989a, - title = {Differential equation modeling of dynamic stall}, - language = {English}, - author = {Petot, D.}, - journal = {Recherche Aerospatiale Technical Translation}, - number = {5}, - pages = {59-72}, - year = {1989}, - issn = {0379380x}, - abstract = {This study concerns dynamic stall in a two-dimensional flow, and more precisely the modeling of the global aerodynamic forces by means of differentiel equations derived from wind tunnel tests. The equations were arrived at first by measuring the aerodynamic coefficients on an airfoil subjected to low-amplitude vibrations. When the model took its final form, it was possible to calculate its parameters directly from large-amplitude measurements. The formula proposed here finds the lift, moment and drag for pitching and heaving actions and for a wind speed variation, and has been verified by wind tunnel tests whenever possible. The model equations have a very similar formulation for the three aerodynamic coefficients and are remarkably insensitive to the type of airfoil. They seem to have a character that is both necessary and sufficient for reconstructing the experiment. All of these points conspire to give great confidence in this method, based on experimental data, despite the dispersion encountered in this type of measurement.} -} - -@article{oye:1991, - author = {S. {\O}ye}, - title = {Dynamic stall, simulated as a time lag of separation}, - year = {1991}, - journal= {Proceedings of the 4th IEA Symposium on the Aerodynamics of Wind Turbines}, - publisher={ETSU-N-118, Harwell Laboratory, UK} -} -@article{larsen2007, - author = {J.W. Larsen and S.R.K. Nielsen and S. Krenk}, - title = {Dynamic stall model for wind turbine airfoils}, - journal = {Journal of Fluids and Structures}, - volume = {23}, - number = {7}, - pages = {p959 - 982}, - year = {2007}, - issn = {0889-9746} -} - -@techreport{hansen:2004dynastall, - title = {A Beddoes-Leishman type dynamic stall model in state-space and indicial formulations}, - author = {Hansen, M.H. and Gaunaa, Mac and Aagaard Madsen, Helge}, - year = {2004}, - issn = {01062840}, - isbn = {8755030904}, - institution={Ris{\o} National Laboratory}, - address={Roskilde, Denmark} -} - -@techreport{bergami:2012, - title = {ATEFlap Aerodynamic Model, a dynamic stall model including the effects of trailing edge flap deflection}, - author = {Bergami, Leonardo and Gaunaa, Mac}, - year = {2012}, - issn = {01062840}, - isbn = {9788755039346}, - institution={DTU - Ris{\o} National Laboratory} -} - -@article{holierhoek:2013a, - title = {Comparing different dynamic stall models}, - language = {English}, - publisher = {WILEY-BLACKWELL}, - author = {Holierhoek, J. G. and de Vaal, J. B. and van Zuijlen, A. H. and Bijl, H.}, - journal = {Wind Energy}, - volume = {16}, - number = {1}, - pages = {139-158}, - year = {2013}, - issn = {10954244, 10991824}, - abstract = {The dynamic stall phenomenon and its importance for load calculations and aeroelastic simulations is well known. Different models exist to model the effect of dynamic stall; however, a systematic comparison is still lacking. To investigate if one is performing better than another, three models are used to simulate the Ohio State University measurements and a set of data from the National Aeronautics and Space Administration Ames experimental study of dynamic stall and compare results. These measurements were at conditions and for aerofoils that are typical for wind turbines, and the results are publicly available. The three selected dynamic stall models are the ONERA model, the BeddoesLeishman model and the Snel model. The simulations show that there are still significant differences between measurements and models and that none of the models is significantly better in all cases than the other models. Especially in the deep stall regime, the accuracy of each of the dynamic stall models is limited. Copyright (C) 2012 John Wiley \& Sons, Ltd.}, - doi = {10.1002/we.548} -} - - -% --------------------------------------------------------------------------------} -% --- Tip vortex -% --------------------------------------------------------------------------------{ -@PHDTHESIS{bailey:2006, - author = {S.C.C. Bailey}, - title = {The interaction of a Wing-Tip Vortex and Free-Stream Turbulence}, - school = {University of Ottawa}, - year = {2006} -} - -@ARTICLE{hansen:2004, - author = {M. O. L. Hansen and J. Johansen}, - title = {Tip Studies Using CFD and Comparison with Tip Loss models}, - journal = {Wind Energy}, - year = {2004}, - volume={7}, - pages = {343-356} -} - - -@article{spalart:1998, -author = {Spalart, Philippe R}, -title = {{Airplane trailing vortices}}, -journal ={Annual Reviews of Fluid Mechanics}, -year = {1998}, -volume ={30} -} - -% --------------------------------------------------------------------------------} -% --- Winglets -% --------------------------------------------------------------------------------{ -@ARTICLE{gaunaa:2011, - author = {M. Gaunaa and N.N. S{\o}rensen and M. D{\o}ssing}, - title = {Prediction of steady aerodynamic performance of rotors with winglets using simple prescribed ake methods}, - journal = {AIAA Aerospace Sciences Meeting}, - year = {2011}, - volume={543}, - otherinfo = {Orlando, Florida} -} - - - - -% --------------------------------------------------------------------------------} -% --- CFD -% --------------------------------------------------------------------------------{ -@PHDTHESIS{sorensen:1986, - author = {J. N. S{\o}rensen}, - title = {Three-level, viscous-inviscid interaction technique for the prediction of separated flow past rotating wing}, - school = {Technical University of Denmark - DTU}, - year = {1986} -} - - -@PHDTHESIS{ellipsys, - author={N. N. S{\o}rensen}, - school={Ris{\o}-DTU}, - year=1995, - title={General purpose flow solver applied to flow over hills} -} - -@phdthesis{Michelsen:1992, - author = {Michelsen, J. A.}, - title = {{Basis3D - a Platform for Development of Multiblock PDE Solvers}}, - school = {Technical University of Denmark (DTU) - Deparment of Fluid Mechanics}, - year = {1992} -} -@book{Michelsen:1994-2, - author = {Michelsen, J. A.}, - title = {{B}lock {S}tructured {M}ultigrid Solution of 2{D} and 3{D} elliptic - {PDE}'s.}, - year = {1994}, - publisher={AFM 94-05 - Department of Fluid Mechanics, Technical University of Denmark} -} -@phdthesis{Sorensen:1995, - author = {S{\o}rensen, N. N.}, - title = {General Purpose Flow Solver Applied to Flow over Hills}, - school = {{R}is{\o} {N}ational {L}aboratory.}, - year = {1995} -} - -% AL -@article{sorensenshen:2002, -title = "Numerical Modelling of Wind Turbine Wakes", -publisher = "A S M E International", -author = "S{\o}rensen, {Jens N{\o}rk{\ae}r} and Shen, {Wen Zhong}", -year = "2002", -volume = "124", -number = "2", -pages = "393--399", -journal = "Journal of Fluids Engineering", -issn = "0098-2202", -doi = {10.1115/1.1471361}, -} - -% AD -@PHDTHESIS{mikkelsen:2004, - title = "Actuator Disc Methods Applied to Wind Turbines", - author = "R. F. Mikkelsen", - year = "2004", - series = "MEK-FM-PHD", - school = "DTU-MEK", - isbn = {8774752960} -} -BOOK{mikkelsen2003, - title = {{Actuator Disc Methods Applied to Wind Turbines}}, - year = {2003}, - author = {Mikkelsen, Robert}, - booktitle = {Wind Energy}, -} -@PHDTHESIS{troldborg:2008phdthesis, -title = {{Actuator Line Modeling of Wind Turbine Wakes}}, -author = {N. Troldborg}, -school = {DTU-MEK}, -isbn = {9788789502809}, -year = {2008} -} - - -@ARTICLE{zahle:2007, - author = {F. Zahle and N. N. S{\o}rensen}, - title = {On the Influence of Far-Wake Resolution on Wind Turbine Flow Simulations}, - journal = {Journal of Physics - Conference Series 75}, - year = {2007} -} -@ARTICLE{shen:2007, - title = {Determination of Angle of Attack for Rotating Blades}, - year = {2007}, - journal={Proceedings of the Euromech colloquium - DTU}, - author={W. Z. Shen and M. O. L Hansen and J. N. S{\o}rensen}, - volume={37} -} -@TECHREPORT{bak:2005chapter2, - title = {Advanced rotor aerodynamics including tip and root aerodynamics}, - year = {2005}, - institution={Ris{\o} - DTU}, - author={J. Johansen and N.N. S{\o}rensen and H.A. Madsen and W. Z. Shen and V. Okulov}, - editor={C. Bak}, - number={Riso-R-1559 - Chapter 2} -} - -@ARTICLE{johansen:2004, - author = {Johansen, Jeppe and S{\o}rensen, Niels N.}, - title = {Aerofoil characteristics from 3D CFD rotor computations}, - journal = {Wind Energy}, - volume = {7}, - number = {4}, - publisher = {John Wiley \& Sons, Ltd.}, - pages = {283-294}, - year = {2004}, -} - - -@article{kondo:1997, -author = {Kondo, K. and Murakami, S. and Mochida, A.}, -title = {{Generation of velocity fluctuations for inflow boundary condition of LES}}, -journal = {Journal of Wind Engineering and Industrial Aerodynamics}, -volume={67\&68}, -pages={51-64}, -year = {1997} -} -@article{troldborg:2007, - title = {Actuator line simulation of wake of wind turbine operating in turbulent inflow}, - language = {English}, - publisher = {IOP PUBLISHING LTD}, - author = {N. Troldborg and J. N. Sorensen and R. Mikkelsen}, - journal = {Science Of Making Torque From Wind}, - volume = {75}, - number = {1}, - pages = {-}, - year = {2007}, - issn = {17426596, 17426588}, - abstract = {The wake of a wind turbine operating in an atmospheric turbulent inflow without mean shear is simulated using a numerical method, which combines large eddy simulations with an actuator line technique. A turbulent inflow with the same spectral characteristics as the atmosphere is produced by introducing time varying body forces in a plane upstream the rotor. The results of the simulation are compared to those obtained on a wind turbine in uniform inflow at the same mean wind speed and from this comparison a number of features of the influence of inflow turbulence on wake dynamics are deduced. Furthermore, the results are used to verify the validity of some of the basic assumptions employed in simpler engineering models and to study their bounds of application. The large amount of data from the wake simulation can easily be used in simple engineering methods to model a wind turbine operating in the wake of an upstream turbine.}, - doi = {10.1088/1742-6596/75/1/012063} -} - -@PHDTHESIS{heinz:2013, - author = {J. C. Heinz}, - title = {Partitioned Fluid-Structure Interaction for Full rotor computations using CFD} , - school = {Technical University of Denmark}, - year = {2013}, -} - - -@article{troldborg:2014, - title = {A simple atmospheric boundary layer model applied to large eddy simulations of wind turbine wakes}, - language = {eng}, - publisher = {John Wiley and Sons Ltd}, - author = {N. Troldborg and J. N. S{\o}rensen and R. F. Mikkelsen and N. N. S{\o}rensen}, - journal = {Wind Energy}, - volume = {17}, - number = {4}, - pages = {657-669}, - year = {2014}, - issn = {10991824, 10954244}, - abstract = {A simple model for including the influence of the atmospheric boundary layer in connection with large eddy simulations of wind turbine wakes is presented and validated by comparing computed results with measurements as well as with direct numerical simulations. The model is based on an immersed boundary type technique where volume forces are used to introduce wind shear and atmospheric turbulence. The application of the model for wake studies is demonstrated by combining it with the actuator line method, and predictions are compared with field measurements. Copyright © 2013 John Wiley \& Sons, Ltd.}, - doi = {10.1002/we.1608} -} - - -@article{rethore:2012, - Author = {R\'{e}thor\'{e}, P.-E. and S\o{}rensen, N. N.}, - Journal = {Wind Energy}, - Title = {{A discrete force allocation algorithm for modelling wind turbines in computational fluid dynamics}}, - Volume = {15}, - Pages = {915--926}, - Year = {2012} -} -@article{rethore:2013, - Author = {R\'{e}thor\'{e}, P.-E. and van der Laan, P. and Troldborg, N. and Zahle, F. and S\o{}rensen, N. N.}, - Journal = {Wind Energy}, - Title = {{Verification and validation of an actuator disc model}}, - Volume = {17}, - Pages = {919--937}, - Year = {2013} -} -@article{troldborg:2015, - title = "A consistent method for finite volume discretization of body forces on collocated grids applied to flow through an actuator disk", - keywords = "CFD, Actuator disk, Collocated grid, Finite volume, Discrete body force", - publisher = "Pergamon", - author = "Niels Troldborg and S{\o}rensen, {Niels N.} and Pierre-Elouan R\'ethor\'e and {van der Laan}, Paul", - year = "2015", - doi = "10.1016/j.compfluid.2015.06.028", - volume = "119", - pages = "197--203", - journal = "Computers \& Fluids", - issn = "0045-7930", -} -% --------------------------------------------------------------------------------} -% --- WT CODES -% --------------------------------------------------------------------------------{ -@book{flexoye, - author={S. {\O} ye}, - title={Fix Dynamisk, aeroelastisk beregning af vindm\o llevinger}, - publisher={Report AFM83-08, Fluid Mechanics, DTU}, - year={1983} -} - -@misc{flex4methoder, - author={S. {\O}ye}, - title={Flex4 Metoder}, - year={1990} -} - -@book{flex, - author={S. {\O}ye}, - title={FLEX - http://www.fluid.dtu.dk/}, - year={} -} - -@MANUAL{aerodyntheorymanual, - title = {AeroDyn Theory Manual}, - author = {P. J. Moriarty and A.C. Hansen}, - publisher={NREL}, - year=2005 -} - -@book{xfoil, - author={M. Drela}, - title={XFOIL - http://raphael.mit.edu/xfoil/}, - publisher={MIT}, - year={2000} -} -@INPROCEEDINGS{xfoil:article, - author={M. Drela}, - title={XFOIL: an analysis and design system for low Reynolds number airfoils}, - booktitle={Conference on Low Reynolds Number Aerodynamics}, - publisher={University Notre Dame }, - year = 1989 -} - -@book{bladed, - author={Garrad Hassan}, - title={BLADED - http://www.garradhassan.com/}, - publisher={}, - year={2010} -} - - -@book{hawc, - author={T. J. Larsen and A. M. Hansen}, - title={HAWC2 - User manual}, - year={2007}, - publisher={DTU-Ris\o-R-1597} -} -@book{hawc2, - author={T. J. Larsen and A. M. Hansen}, - title={HAWC2 - User manual}, - year={2007}, - publisher={DTU-Ris\o-R-1597} -} - - -@book{wasp, -author = {WAsP the Wind Atlas Analysis and Application Program}, -title = {http://www.wasp.dk/}, -year = {2010}, -publisher= {RIS\O} -} - - -@TECHREPORT{propdynamic:manual, - title={HAWT Performance With Dynamic Stall}, - author={B. D. Hibbs}, - institution={Solar Energy Research Institute}, - year={1986} -} - -@TECHREPORT{aerodyn:assessment, - title={Assessment of AeroDyn Theory Basis Including Unsteady Aerodynamics Modules}, - author={J. Gordon Leishman}, - institution={Rotor Systems Research LLC}, - year={2011} -} - - -% --- FAST and NREL tools -@MISC{openfast, - author = {OpenFAST}, - title={Available at \url{http://github.com/OpenFAST/OpenFAST/}}, -} -@TECHREPORT{fastuser, - author = {J. M. Jonkman and M. L. Buhl}, - title = {FAST User's Guide}, - institution = {National Renewable Energy Laboratory}, - year = {2005}, - number={NREL/EL-500-38230} -} -@TECHREPORT{jonkman:2013modul, - author = {J. Jonkman}, - title = {The New Modularization Framework for the FAST Wind Turbine CAE Tool}, - institution={National Renewable Energy Laboratory}, - year = {2013}, - number={ NREL/CP-5000-57228} -} -@article{jonkman:2013a, - author = {J. Jonkman}, - title = {The new modularization framework for the FAST wind turbine CAE tool}, - journal = {51st Aiaa Aerospace Sciences Meeting Including the New Horizons Forum and Aerospace Exposition 2013}, - address ={Grapevine, Texas}, - year = {2013}, - isbn = {9781624101816}, -} - -@TECHREPORT{sprague:2015modul, - title={FAST Modular Framework for Wind Turbine Simulation: New Algorithms and Numerical Examples}, - author={Michael A. Sprague, Jason M. Jonkman and Bonnie J. Jonkman}, - institution={National Renewable Energy Laboratory}, - number={NREL/CP-2C00-63203}, - year={2015} -} - -@TECHREPORT{subdyn:manual, - title={SubDyn User's Guide and Theory Manual}, - author={R. Damiani, J. Jonkman and G. Hayman}, - institution={National Renewable Energy Laboratory}, - number={NREL/TP-5000-63062}, - year=2015 -} - -@TECHREPORT{aerodyn:manual, - title = {AeroDyn Theory Manual}, - author = {P. J. Moriarty and A. Craig Hansen}, - institution = {National Renewable Energy Laboratory}, - year = 2005, - month = {December}, - note = {NREL/EL-500-36881} -} - -@TECHREPORT{aerodyn:manualUnsteadyRick, - title = {The Unsteady Aerodynamics Module for FAST 8}, - author = {R. Damiani and G. Hayman}, - year = 2017, - institution = {National Renewable Energy Laboratory}, -} - - -@article{wang:2015, - title = {Beamdyn: A high-fidelity wind turbine blade solver in the FAST modular framework}, - language = {eng}, - publisher = {American Institute of Aeronautics and Astronautics Inc.}, - journal = {33rd Wind Energy Symposium}, - pages = {17 pp., 17 pp.}, - year = {2015}, - isbn = {9781624103445}, - address = {Kissimmee, Florida}, - abstract = {BeamDyn, a Legendre-spectral-finite-element implementation of geometrically exact beam theory (GEBT), was developed to meet the design challenges associated with highly flexible composite wind turbine blades. In this paper, the governing equations of GEBT are reformulated into a nonlinear state-space form to support its coupling within the modular framework of the FAST wind turbine computer-aided engineering (CAE) tool. Different time integration schemes (implicit and explicit) were implemented and examined for wind turbine analysis. Numerical examples are presented to demonstrate the capability of this new beam solver. An example analysis of a realistic wind turbine blade, the CX-100, is also presented as validation.}, - author = {Wang, Qi and Johnson, Nick and Sprague, Michael A. and Jonkman, Jason} -} - - - - - -% --------------------------------------------------------------------------------} -% --- REFERENCE TURBINES (NREL5MW, DTU10MW) - EXPERIMENTS (MEXICO, DANAERO) -% --------------------------------------------------------------------------------{ -@TECHREPORT{danaerofinal, - author = {{Madsen et al.}}, - title = {The DAN-AERO MW Experiments - Final Report}, - institution = {Ris{\o}-DTU}, - year = {2010}, - number={Riso-R-1726} -} - - -@article{breton:2010, -author = {Breton, S}, -number = {January}, -pages = {1--11}, -title = {{Using the Actuator Surface Method to Model the Three-Bladed MEXICO Wind Turbine}}, -year = {2010} -} - -@MASTERSTHESIS{pauvretype, - author = {L. Pascal}, - title = {Mexico project data analysis }, - school = {ISAE-Supaero - ECN Wind Memo-09-010}, - year = {2008}, -} -% otherinfo = {ECN Wind Memo-09-010 - ISAE Supaero Master Thesis} - -@article{guntur:2011, -author = {Guntur, Srinivas and Bak, Christian and S\o rensen, Niels N}, -journal = {Analysis}, -number = {1}, -title = {{Analysis of 3D Stall Models for Wind Turbine Blades Using Data from the MEXICO Experiment}}, -year = {2011} -} - -@phdthesis{guntur:phd, - author = {S. Guntur}, - title = "A Detailed Study of the Rotational Augmentation and Dynamic Stall Phenomena for Wind Turbines", - year = "2013", - school = "DTU Wind Energy", - address = "Denmark", -} - - - -@article{micallef:2009, -author = {Micallef, D and Kloosterman, M and Ferreira, C and Sant, T and Bussel, G Van}, -journal = {Simulation}, -number = {October}, -pages = {46--48}, -title = {{Comparison and Validation of BEM and Free Wake Unsteady Panel Model with the MEXICO Rotor Experiment}}, -year = {2009} -} - -@TECHREPORT{schepers:ieatask29, - author = {J. G. Schepers and K. Boorsma and {et al.}}, - title = {{Final report of IEA Task 29, Mexnext (Phase 1): Analysis of Mexico wind tunnel measurementsc}}, - institution = {IEA Wind - ECN}, - year = {2012}, - otherinfo = {ECN-E–12-004} -} - - -@INPROCEEDINGS{schepers:2012, - author = {J.G. Schepers and K. Boorsma and X. Munduate}, - title = {Final Results from Mexnext-I: "Analysis of detailed aerodynamic measurements on a 4.5 m diameter rotor placed in the large German Dutch Wind Tunnel DNW"}, - booktitle = {The Science of Making Torque from the Wind, Oldenburg}, - year = {2012}, - otherinfo = {} -} - -@article{sorensen:2014mexico, - title = {Near wake Reynolds-averaged Navier-Stokes predictions of the wake behind the MEXICO rotor in axial and yawed flow conditions}, - language = {English}, - publisher = {John Wiley and Sons Ltd}, - author = {S{\o}rensen, N. N. and Bechmann, A. and R\'ethor\'e, P. E. and Zahle, F.}, - journal = {Wind Energy}, - volume = {17}, - number = {1}, - pages = {75-86}, - year = {2014}, - issn = {10954244, 10991824}, - abstract = {In the present paper, Reynolds-averaged Navier-Stokes predictions of the flow field around the MEXICO rotor in yawed conditions are compared with measurements. The paper illustrates the high degree of qualitative and quantitative agreement that can be obtained for this highly unsteady flow situation, by comparing measured and computed velocity profiles for all three Cartesian velocity components along four axial transects and several radial transects}, - doi = {10.1002/we.1559} -} - -@article{shen:2011mexico, - title = {Actuator Line/Navier-Stokes Computations for Flows past the Yawed MEXICO Rotor}, - language = {English}, - author = {Shen, W. Z. and S{\o}rensen, J. N. and Yang, H.}, - journal = {Proceedings of the Wake Conference}, - year = {2011}, - abstract = {In the paper the Actuator Line/Navier-Stokes model has been used to simulate flows past the yawed MEXICO rotor. The computed loads as well as the velocity field behind the yawed rotor are compared to detailed pressure and PIV measurements which were carried out in the EU funded MEXICO project. The computed loading follows in general the experimental counterpart in a period of rotation with a slight overprediction on the mean loading which probably is caused by the inaccuracy of the airfoil data. The predicted wake velocity agrees well with the experiments in the near wake region. Computations with the DNW wind tunnel for the yawed rotor are also performed and show that the tunnel effects are very small in the loading and in the near wake field behind the rotor whereas in the far wake region (>1D) the influence becomes important.} -} - -@techreport{schepers:2007mexico, -author = {J.G. Schepers and H. Snel}, -title = {{Model Experiments in Controlled Conditions}}, -institution = {ECN - ECN-E--07-042}, -year={2007} -} - - -@article{shen:2012mexico, - title = {Actuator line/Navier-Stokes computations for the MEXICO rotor: comparison with detailed measurements}, - language = {English}, - publisher = {WILEY-BLACKWELL}, - author = {Shen, Wen Zhong and Zhu, Wei Jun and Sorensen, Jens Norkaer}, - journal = {Wind Energy}, - volume = {15}, - number = {5}, - pages = {811-825}, - year = {2012}, - issn = {10954244, 10991824}, - abstract = {In the European collaborative MEXICO (Model Experiments in Controlled Conditions) project, a series of experiments was carried out on a 4.5?m diameter wind turbine rotor to validate numerical diagnostics tools. Here, some of the measured data are compared with computations of the combined actuator line/NavierStokes (AL/NS) model developed at the Technical University of Denmark. The AL/NS model was combined with a large eddy simulation technique and used to compute the flow past the MEXICO rotor in free air and in the DNW German-Dutch wind tunnel for three commonly defined test cases at wind speeds of 10, 15 and 24?m?s -1. Two sets of airfoil data were used. Comparisons of blade loadings showed that the AL/NS technique with the modified airfoil data is in better agreement with the measurements than with the original 2D airfoil data. Comparisons of detailed near-wake velocities showed good agreement with the measurements. Computations including the influence of the geometry of the wind tunnel showed that tunnel effects are not significant and the effect of the geometry of the wind tunnel only results in a speedup of 3\% at a thrust coefficient of CT ?=}, - doi = {10.1002/we.510} -} - -@TECHREPORT{nrel5mw, - title ={Definition of a 5MW Reference Wind Turbine for Offshore System Development}, - author = {J. Jonkman and S. Butterfield and W. Musial and G. Scott}, - institution = {National Renewable Energy Laboratory}, - year = {2009}, - number={NREL/TP-500-38060} -} - - - -% --------------------------------------------------------------------------------} -% --- WIND ENERGY - INDUSTRY - WEB SITES and ASSOCIATIONS -% --------------------------------------------------------------------------------{ -@INPROCEEDINGS{siemensperspective:2013, - author = {E. Mayda and J. Obrecht and K. Dixon and A. Zamora and L. Mailly and R. Sievers and M. Singh}, - title = {Wind Turbine Rotor R\&D; an OEM Perspective}, - booktitle = { Conference: International Conference on Future Technologies for Wind Energy, At University of Wyoming }, - year = {2013}, -} - - @book{winddata, -author = {K. Hansen}, -title = {http://www.winddata.dk/}, -year = {2010}, -publisher= {} -} - -@book{nwtcmast, -author = {NWTC M2 tower}, -title = {http://www.nrel.gov/midc/nwtc\_m2}, -year = {2010}, -publisher= {NREL} -} - -@book{windpoweringamerica, -author = {Wind Powering America}, -title = {http://www.windpoweringamerica.gov}, -year = {2010}, -publisher= {DOE} -} - - -@book{nasasrtm, -author = {SRTM NASA Database}, -title = {http://www2.jpl.nasa.gov/srtm}, -year = {2010}, -publisher= {} -} - -@book{ngdc, -author = {National Geophysical Data Center}, -title = {http://www.ngdc.noaa.gov}, -year = {2010}, -publisher= {NOAA} -} -@book{unep, -author = {UNEP}, -title = {Insurance Risk Management for Renewable Energy Projects}, -year = {2010}, -publisher= {UNEP} -} - -% --------------------------------------------------------------------------------} -% --- WAKES -% ---------------------------------------------------------------------------------{ -@inproceedings{Rettenmeier:2010, - author = {Rettenmeier, A. and Bischoff, O. and Hofs\"{a}{\ss}, M. and Schlipf, - D. and Trujillo, J. J.}, - title = {{W}ind {F}ield {A}nalysis {U}sing {A} {N}acelle-{B}ased {L}idar {S}ystem}, - publisher = {EWEC 2010 Warsaw}, - booktitle={Scientific proceedings}, - year = {2010} -} -@ARTICLE{Rettenmeier:2012b, - author = {Rettenmeier, A. and Bischoff, O. and Schlipf, D. and Anger, J. and - Hofs\"{a}{\ss} , M. and Cheng, P.W. and Wagner, R. and Courtney, - M. and Mann, J.}, - title = {Turbulence and wind speed investigations using a nacelle-based Lidar - scanner and a met mast}, - journal = {Presentation Proceedings of EWEA 2012 conference, Copenhagen}, - year = {2012} -} - -@ARTICLE{Rettenmeier:2012, - author = {Rettenmeier, A. and Anger, J. and Bischoff, O. and Hofs\"{a}{\ss}, - M. and Schlipf, D. and W\"{u}rth, I.}, - title = {{Nacelle-Based Lidar Systems}}, - journal = {Summer School in Remote Sensing for Wind Energy, Boulder, Colorado, - 2012}, - year = {2012} -} - -@inproceedings{machefaux:2013, - author = {Machefaux, E. and Larsen, G. C. and Troldborg, N. and Rettenmeier, - A.}, - title = {{S}ingle {W}ake {M}eandering, {A}dvection and {E}xpansion - An analysis - using an adapted {P}ulse {L}idar and {CFD} {LES}-{ACL} simulations}, - publisher = {EWEC 2013 Vienna}, - booktitle={Scientific proceedings}, - year = {2013}, - pages = {50-55} -} - -@ARTICLE{Machefaux:2014b, - author = {Machefaux, E. and Larsen, G. C. and Troldborg, N. and Gaunnaa, M. and Rettenmeier, A.}, - title = {Empirical Modelling of Single Wake Advection and Expansion using - Full Scale Pulsed Lidar based Measurements}, - journal = {Journal of Wind Energy}, - year = {2015} -} -@ARTICLE{machefaux:2015, - title={Experimental and numerical study of the atmospheric stability impact on wind turbine wake}, - author={E. Machefaux and G.C. Larsen and T. Koblitz and N. Troldborg and M. Kelly and Abhijit Chougule and K.S. Hansen and J.S. Rodrigo}, - year={2015}, - note={Submitted to the journal {Wind Energy} in December 2014}, - journal={Wind Energy} -} - - -@article {mctavish:2015, -author = {S. McTavish and S. Rodrigue and D. Feszty and F. Nitzsche}, -title = {An investigation of in-field blockage effects in closely spaced lateral wind farm configurations}, -journal = {Wind Energy}, -volume = {18}, -number = {11}, -issn = {1099-1824}, -url = {http://dx.doi.org/10.1002/we.1806}, -doi = {10.1002/we.1806}, -pages = {1989--2011}, -keywords = {in-field blockage, wind farm experiment, lateral separation, boundary layer wind tunnel, vortex particle method}, -year = {2015}, -} - -% ------------------------------------------------------------------------------} -% --- INDUCTION ZONE -% ---------------------------------------------------------------------------------{ -@article{forsting:2017, - title = "The flow upstream of a row of aligned wind turbine rotors and its effect on power production", - author = "A. R. {Meyer Forsting} and N. Troldborg and M. Gaunaa", - year = "2017", - doi = "10.1002/we.1991", - volume = "20", - pages = "63–77", - journal = "Wind Energy", - issn = "1095-4244", - publisher = "John/Wiley \& Sons Ltd.", - number = "1", -} -@ARTICLE{troldborg:2017, - author = {N. Troldborg, A. R. Meyer Forsting}, - title = {Simulations of wind turbine induction in uniform inflow}, - journal = {Journal of Wind Energy}, - year = {2017} -} - - - -% --------------------------------------------------------------------------------} -% --- WIND FARM -% --------------------------------------------------------------------------------{ -@book{NWTCdesign, -author = {W. Johnson and N. Kelley}, -title = {Design Specifications for the Development of the Initial Validation Software for Processing of NWTC 80-Meter Meteorological Tower Data}, -year = {2000}, -month= {January}, -publisher= {NREL/TP-500-27104} -} - -@book{nwtcea, -author = {DOE-NREL}, -title = {Site-Wide Environmental Assessment of National Renewable Energy Laboratorys National Wind Technology Center}, -year = {2002}, -month= {May}, -publisher= {EA1378} -} - -@book{baoweb, -author = {BAO tower}, -title = {http://www.esrl.noaa.gov/psd/technology/bao}, -year = {2010}, -publisher= {NOAA} -} - -@book{BAOdesign, -author = {NOAA/ERL wave propagation laboratory}, -title = {Turbulence statistics for design of wind turbine generator}, -year = {1980}, -month= {December}, -publisher= {Report to DOE} -} -@book{nrelwest, -author = {Western Wind Ressource Dataset}, -title = {http://wind.nrel.gov/Web\_nrel/}, -year = {2010}, -publisher= {NREL} -} -@book{nrelatlas, -author = {Wind Energy Ressource Atlas of the United States}, -title = {http://rredc.nrel.gov/wind/pubs/atlas/}, -year = {2010}, -publisher= {NREL} -} - - -@book{chicagotribunesmart, -author = {Judith Kohler }, -title = {Boulder on track to become first smart grid city}, -year = {2009}, -month={February}, -day={7}, -publisher= {Chicago Tribune} -} -@book{xcelsmart, -author = {Xcel Energy's}, -title = {Design Plan for Boulder, Colorado}, -year = {2008}, -publisher= {Utility Innovations} -} - -@book{autoblog, -author = {Domenick Yoney}, -title = {http://green.autoblog.com/2008/03/13/boulder-to-become-first-smart-grid-city/ -}, -year = {2008}, -} - -@book{v80, -author = {Vestas Wind Systems A/S}, -title = {Vestas V80 - 2MW - Product brochure}, -year = {2010}, -} - -@book{fluctuwind, -author = {Carsten Albrecht}, -title = {Fluctuations in annual wind energy potential - A method for risk analysis and long term correlation}, -year = {2006}, -publisher={ewec}, -} - -@book{icethrow, -author = {Colin Morgan and Ervin Bossanyi and Mr Henry Seifert}, -title = {Assessment of safety risks arising from wind turbine icing}, -year = {1998}, -publisher={BOREAS IV - Deutsches Windenergie-Institut}, -} - -@book{riskseisme, -author = {Ian Prowell and Paul Veers }, -title = {Assessment of Wind Turbine Seismic Risk}, -year = {2009}, -month={march}, -publisher={Sandia report }, -} - - -@book{coldclim, -author = {Holttinen, Hannele, Morgan, Seifert, and Sntti}, -title = {Wind Energy Production in Cold Climate : Tammelin, Cavaliere}, -year = {1997}, -} - -@inbook{witold:ewea2014, - title = "Parametric approximation of airfoil aerodynamic coefficients at high angles of attack", - keywords = "Aerodynamic coefficients, Lift, Drag, Moment, high angles of attack, Separation, Modelling, Harmonic functions, Even sine, Even cosine", - author = "W.R. Skrzypinski and F. Zahle and C. Bak", - year = "2014", - booktitle = "Proceedings of EWEA 2014", - publisher = "European Wind Energy Association (EWEA)", -} - -@misc{witold:presentationCl, - title = {Increase in the Annual Energy Production due to a Retrofit of Vortex Generators on Blades}, - author = {W.R. Skrzypinski and M. Gaunaa and C. Bak and N. Fiil Br{\o}nnum and E. {Brink Kruse Olsen}}, - institution={DTU}, - year = "2015" -} - -@book{weco, -title={Wind Energy Production in Cold Climate (WECO)}, -author={B. Tammelin and M. Cavaliere and H. Holttinen and C. Morgan and H. Seifert and K. Santti }, -publisher={JOR3-CT95-0014}, -month={December}, -year={1998} -} - - -@book{REDIsummary, -author = { Governor's Energy Office of Colorado}, -title = {Renewable Energy Development Infracture Executive Summary}, -year = {2009}, -publisher= { Government of Colorado} -} - -@book{Chapter3-8, -author = {DOE-NRE}, -title = {Final Site-Wide Environmental Assessment of National Renewable Energy Laboratory's National Wind Technology Center- Chapter 3.8 }, -year = {2002}, -month = {May}, -publisher= {DOE/EA-1378} -} - -@book{nwtcea, -author = {DOE-NREL}, -title = {Site-Wide Environmental Assessment of National Renewable Energy Laboratory - National Wind Technology Center}, -year = {2002}, -month= {May}, -publisher= {EA1378} -} - - - - - -% --------------------------------------------------------------------------------} -% --- TURBULENCE -% --------------------------------------------------------------------------------{ -@article{taylor:1938, - title = {The spectrum of turbulence}, - language = {English}, - publisher = {ROYAL SOC LONDON}, - author = {G. I. Taylor}, - journal = {Proceedings of The Royal Society of London Series A-Mathematical And Physical Sciences}, - volume = {164}, - number = {A919}, - pages = {0476-0490}, - year = {1938}, - issn = {00804630} -} - -@article{karman:1937, - title={On the statistical theory of isotropic turbulence}, - author={T. de K\'arm\'an and L. Howarth}, - year={1937}, - journal = {Proceedings of The Royal Society of London Series A-Mathematical And Physical Sciences}, - volume = {164}, - number = {917}, - pages = {192-215}, -} - - -@article{kaimal:1972, - title = {SPECTRAL CHARACTERISTICS OF SURFACE-LAYER TURBULENCE}, - language = {English}, - publisher = {ROYAL METEOROLOGICAL SOC}, - author = {J. C. Kaimal and Y. Izumi and J. C. Wyngaard and R. Cote}, - journal = {Quarterly Journal Of The Royal Meteorological Society}, - volume = {98}, - number = {417}, - pages = {563-589}, - year = {1972}, - issn = {00359009, 1477870x} -} -@article{kristensen:1979, - title = {On Longitudinal Spectral Coherence}, - author = {Kristensen, L.}, - journal = {Boundary-Layer Meteorology}, - volume = {16}, - number = {3}, - pages = {145-153}, - year = {1979}, - issn = {00068314, 15731472}, - doi = {10.1007/BF03335363} -} - -@article{batchelor:1947, - author = {Batchelor, G. K. and Townsend, A. A.}, - title = {Decay of Vorticity in Isotropic Turbulence}, - volume = {190}, - number = {1023}, - pages = {534--550}, - year = {1947}, - doi = {10.1098/rspa.1947.0095}, - publisher = {The Royal Society}, - abstract = {G. K. Batchelor and A. A. TownsendAbstract - The equation describing the rate of change of the mean square vorticity in homogeneous isotropic turbulence is obtained and the terms occurring therein are discussed. A negative contribution to $\overline{d\omega ^{2}}$/dt arises from the effect of viscosity, while a positive contribution is produced by the tendency for the random diffusive motion to extend the vortex lines. This latter contribution can be related to the skewness of the probability distribution of the rate of extension of line elements of the fluid aligned in any given direction. The results of direct measurements of each of the factors appearing in the vorticity equation are then described. The measurements were made by analyzing electrically the output from a hot-wire anemometer placed downstream from a grid in a uniform stream. Both U$^{2}$/$\overline{u^{2}}$ and $\lambda ^{2}$ are found to increase approximately linearly with time during decay of the turbulence and their rates of change are consistent with the energy equation. The skewness factor mentioned above is approximately constant during decay, with the same value at all Reynolds numbers. It follows that the rate of increase of $\overline{\omega ^{2}}$ due to vortex extension is proportional to ($\overline{\omega ^{2}}$)$^{\frac{3}{2}}$, and further measurements show that the effect of viscosity has a similar dependence, so that the ratio of the two contributions to $\overline{d\omega ^{2}}$/dt remains the same throughout the decay. The viscous contribution is always the greater but the contributions tend to equality as the grid Reynolds number increases. The measurements of all terms in the vorticity equation are shown to satisfy the equation with sufficient accuracy. One of the deductions from the measurements is that the double velocity correlation function tends to a cusp at the origin as the Reynolds number increases indefinitely.}, - issn = {0080-4630}, - journal = {Proceedings of the Royal Society of London A: Mathematical, Physical and Engineering Sciences} -} - -@article{karman:1948, -title={Progress in the statistical theory of turbulence}, -author={T. von K\'arm\'an}, -year={1948}, -journal={Proc. Nat. Akad. Sci.}, -pages={p530-539} -} - - -@article{mcwilliams:1984, - title = {THE EMERGENCE OF ISOLATED COHERENT VORTICES IN TURBULENT-FLOW}, - language = {English}, - publisher = {CAMBRIDGE UNIV PRESS}, - author = {J. C. {McWilliams}}, - journal = {Journal Of Fluid Mechanics}, - volume = {146}, - number = {SEP}, - pages = {21-43}, - year = {1984}, - issn = {00221120, 14697645} -} - -@book{Jensen:1989, -author={Jensen B. L. and Sumer B. M. and Fredse J.}, -title={Turbulent oscillatory boundary layers at high Reynolds numbers}, -publisher={Journal of Fluid Mechan- -ics, Vol. 206, p. 265}, -year={1989} -} - -@book{chorin:1994:bookturb, - title = "Vorticity and turbulence", - author = "Chorin, Alexandre Joel", - series = "Applied mathematical sciences", - publisher = "Springer-Verlag", - address = "New York, Berlin, Paris", - url = "http://opac.inria.fr/record=b1077437", - isbn = "3-540-94197-5", - year = 1994 -} -@book{Sumer:2007, -author = {B. Mutlu Sumer}, -title = {Lecture notes on turbulence}, -year = {2007}, -publisher= {DTU} -} - -@book{monin:1971, - title = "Statistical fluid mechanics mechanics of turbulence. vol. 1", - author = "A. S. Monin and A. M. Yaglom", - publisher = "MIT press", - address = "Cambridge", - isbn={978-0-262-13062-2}, - year = 1971 -} - -@book{eckelmann:1974, -author = {H. Ekelmann}, -title = {The structure of the viscous sublayer and the adjacent wall region in a turbulent channel flow}, -year = {1974}, -publisher= {Journal of Fluid Mechanics, vol 65} -} -@book{Laufer:1954, -author = {J. Laufer}, -title = {The Structure of Turbulence in Fully Developed Pipe Flow}, -year = {1954}, -publisher= {NACA, Report No. 1174} -} -@article{Laufer:1949, - author = {Laufer, J.}, - title = {Investigation of turbulent flow in a two-dimensional channel}, - year = 1949, - journal = {National advisory committee for aeronautics}, - pages = {p1247-1266} -} - -@unpublished{Kollgaard:2010, -author = {Lars Kollgaard}, -title = {Note on turbulence and turbulence models, for course 41323 Advanced Fluid Mechanics DTU}, -year = {2010}, -pages = {} -} - - -@book{turboral, -author = {D. R. Fuhrman}, -title = {Statistical and spectral analysis}, -year = {2007}, -publisher= {DTU} -} - - -% -@article{mann:1994, - title={The spatial structure of neutral atmospheric surface-layer turbulence}, - author={J. Mann}, - year={1994}, - journal={Journal of Fluid Mechanics}, - volume = {273}, - pages={p141-168} -} - - -% -@article{mann:1998, - title={Wind field simulation}, - author={J. Mann}, - year={1998}, - journal={Prob. Engng. Mech.}, - volume = {13}, - number = {4}, - pages={p269-282} -} - -@article{veers:1988, - title = {Three-dimensional wind simulation}, - language = {English}, - publisher = {Publ by American Soc of Mechanical Engineers (ASME)}, - author = {Veers, P.S.}, - journal = {American Society of Mechanical Engineers, Solar Energy Division (Publication) SED}, - volume = {7}, - pages = {23-31}, - year = {1988}, - abstract = {A method for numerically simulating a three-dimensional field of turbulent wind-speed (the 'Sandia method') for use in the aerodynamic and structural analyses of wind turbines is presented. The required inputs are single point power spectral densities (PSDs) and the coherence function. Suggestions for appropriate inputs and an example calculation are included. The simulation method is used to obtain 'rotationally sampled' PSDs, which are compared with measurements obtained by Pacific Northwest Laboratories. The results show that the Sandia method is capable of producing simulations that agree with the measurements, especially when the coherence function is augmented from the usual form to include the ratio of spatial separation over height, raised to the 0.25 power.} -} -@article{derbyshire1993, -title={Structure of turbulence in stably stratified atmospheric boundary layers; comparison of large eddy simulation and theoretical models}, -author={S.H. Derbyshire and P.A. Durbin}, -year={1993}, -journal={Waves and Turbulence in Stably Stratified Flows}, -publisher={Clarendon}, -pages={p23-59} -} - - - -@article{bossanyi:2013, - title = {Un-freezing the turbulence: application to LiDAR-assisted wind turbine control}, - language = {English}, - publisher = {INST ENGINEERING TECHNOLOGY-IET}, - author = {E. Bossanyi}, - journal = {IET Renewable Power Generation}, - volume = {7}, - number = {4}, - pages = {321-329}, - year = {2013}, - issn = {17521424, 17521416}, - abstract = {Recent developments in LiDAR technology have led to much interest in the possibility of improving turbine control by using a turbine-mounted LiDAR, to provide advance information about the approaching wind field. This could significantly reduce turbine loads, bringing improved cost-effectiveness, especially for large turbines. There have also been claims of direct increases in energy capture as a result of using such preview information. This study reports on an independent study employing detailed analytical methods to evaluate the likely benefits of LiDAR-assisted control and advise LiDAR manufacturers about the characteristics of their systems, which are most likely to be useful for this application. Accurate simulation models are vital for assessing the performance of LiDARs and controllers which use them. Current models use Taylor's frozen turbulence hypothesis, but this is not strictly valid when LiDAR is used to measure upstream wind speeds, as the measured wind cannot be assumed to convect unchanged to the turbine. A method for avoiding the frozen turbulence assumption is proposed, and simulation results are presented to illustrate the effect on fatigue load reductions which LiDAR-assisted control might achieve. A detailed assessment of possible LiDAR benefits is made using the UPWIND generic 5 MW turbine as an example.}, - doi = {10.1049/iet-rpg.2012.0260} -} - -@article{larsen:2008, - title = {Wake meandering}, - language = {eng}, - author = {G. C. Larsen and H. A. Madsen and K. Thomsen and T. J. Larsen}, - journal = {Wind Energy}, - volume = {11}, - number = {4}, - pages = {377-395}, - year = {2008}, - issn = {10991824, 10954244}, - abstract = {The phenomenon of wake meandering is long known empirically, but has so far not been treated in a satisfactory manner on the wind turbine load modelling side. We present a consistent, physically based theory for wake meandering, which we consider of crucial importance for the overall description of wind turbine loadings in wind farms. In its present version, the model is confined to single wake situations - including a simple heuristic description of wake interaction with a reflecting surface. Contrary to previous attempts to model wind turbine wake loading, the present approach opens for a unifying description in the sense that turbine power and load aspects can be treated simultaneously. This capability is a direct and attractive consequence of the model being based on the underlying physical process, and it potentially opens for optimization of wind farm topology, wind farm operation, as well as control strategies for the individual turbine. The application of the proposed dynamic wake meandering methodology with existing aeroelastic codes is straightforward and does not involve any code modifications. The strategy is simply to embed the combined effect of atmospheric turbulence, added wake turbulence and the intermittent 'turbulence contribution', caused by wake meandering, in files replacing the traditional turbulence file input to aeroelastic computations. Copyright © 2008 John Wiley & Sons, Ltd.}, - doi = {10.1002/we.267} -} -% --------------------------------------------------------------------------------{ -% --- Wind Ressources ad Loads -% --------------------------------------------------------------------------------} -@book{windloads, -author = {C. Dyrbye and S. O. Hansen}, -title = {Wind loads on structures}, -year = {1997}, -publisher= {John Wiley \& Sons} -} - - -@book{forecastingmarkov, -author = {P. Pinson, H. Madsen}, -title = {Adaptive modelling and forecasting of offshore wind power fluctuations with Markov-switching autoregressive models}, -year = {2009}, -publisher= {Journal of Forecasting} -} - -@book{mannwral, -author = {J. Mann}, -title = {Wind profiles and turbulence spectra}, -year = {2010}, -publisher= {Ris\o\ DTU - Course 45701} -} - - - - - - -% --------------------------------------------------------------------------------{ -% --- FEM -% --------------------------------------------------------------------------------} -@book{topopt, -author = {}, -title = {http://www.topopt.dtu.dk/41525/}, -year = {2009}, -publisher= {DTU} -} -@book{optpauli, -author = {Pauli Pedersen}, -title = {Optimal Designs - Structure and Materials - Problems and Tools}, -year = {2003}, -publisher= {Pre-Print DTU} -} -@book{femlecturenotes, -author = {Ole Sigmund}, -title = {Notes and Exercises for the course: FEM-Heavy}, -month={August}, -year = {2009}, -publisher= {Technical University of Denmark} -} -@book{cook:book, - author = {Robert D. Cook }, - title = {Concepts and Applications of Finite Element Analysis}, - year = {2001}, - publisher= {John Wiley \& Sons} -} -@book{ganguli:book, - title={Finite Element Analysis of Rotating Beam}, - author={R. Ganguli}, - year={2017}, - doi={10.1007/978-981-10-1902-9}, - isbn={978-981-10-1901-2}, - publisher={Springer Singapore} -} - -@book{kwonbang:book, - title={The Finite Element Method Using MATLAB, 2nd edition}, - author={Young W. Kwon and Hyochoong Bang}, - publisher={CRC Press}, - year = {2000}, - isbn={9780849300967} -} -@book{ferreira:book, - title={MATLAB Codes for Finite Element Analysis}, - author={A.J.M. Ferreira}, - publisher={Springer}, - year = {2009}, - isbn={978-1-4020- 9199-5} -} - -@techreport{felippa:book, - title={Introduction to finite element methods - Lecture notes (ASEN 5007)}, - author={Carlos A. Felippa}, - institution={{Department of Aerospace Engineering Sciences and Center for Aerospace Structures, University of Colorado, Boulder, CO, USA}}, - year={2004} -} - -@book{przemieniecki:book, - title={Theory of Matrix Structural Analysis}, - author={Przemieniecki, J.S.}, - isbn={9780486649481}, - lccn={67019151}, - series={Dover Civil and Mechanical Engineering}, - url={https://books.google.com/books?id=Jd6i0k4wvtQC}, - year={1985}, - publisher={Dover} -} - -@TECHREPORT{panzer:2009, - author={Heiko Panzer and J{\:o}rg Hubele and Rudy Eid and Boris Lohmann}, - title={Generating a Parametric Finite Element Model of a 3D Cantilever Timoshenko Beam Using Matlab}, - year=2009, - institution={Techical University of Munich, UM Vol. TRAC-4, Nov. 2009} -} - - -% --------------------------------------------------------------------------------{ -% --- ECN - Gusts -% --------------------------------------------------------------------------------} - - -@book{ECNannualreport, -author = {}, -title = {ECN annual report}, -year = {2007}, -publisher= {ECN} -} - - -@book{riso_meangustshape, -author = {G.Cr. Larsen, W. Bierbooms and K.S. Hansen}, -title = {Mean Gust Shapes}, -month={December}, -year = {2003}, -publisher={Ris\o -R-1133(EN) - Ris\o\ National Laboratory, Roskilde, Denmark} -} -@article{stochasticgustmodel, -title = {Stochastic gust model for design calculation of wind turbines}, -author = {W. Bierbooms, Po-Wen Cheng}, -journal = {Journal of wind energineering and industrial aerodynamics}, -volume=90, -pages={p1237-1251}, -year = {2002} -} - -@book{areliabilitybased, -author = {Po Wen Cheng}, -title = {A reliability based methodology for extreme responses of offshore wind turbines}, -year = {2002}, -publisher= {DU Wind, Delft University wind Energy Research Institute} -} - - -@book{EWTWmeteo, -author = {P.J. Eecen and J.P. Verhoef}, -title = {EWTW Meteorological database. Description June 2003 - May 2006}, -month={September}, -year = {2006}, -publisher= {ECN-E--06-004} -} - -@book{LTVMstats, -author = {P.J. Eecen, L.A.H. Machielse, H. Braam and J.P. Verhoef}, -title = {EWTW statistics}, -month={September}, -year = {2005}, -publisher= {ECN-CX--05-084 Confidential} -} - - - -@article{verificationmeanshape, -title = {Verification of the mean shape of extreme gusts}, -author = {W. Bierbooms, J. B. Dragt and H. Cleijne}, -journal = {Wind Energy, 2, 137-150}, -month={August}, -year = {1999} -} - -@article{agustmodel, -title = {A gust model for wind turbine design}, -author = {W. Bierbooms}, -journal = {JSME International Journal, Series B, Vol.47, No.2}, -year = {2004} -} - - -@article{specificgustshapes, -title = {Specific gust shapes leading to extreme response of Pitch-regulated wind turbines}, -author = {W. Bierbooms}, -journal = {Journal of physics : Conference series 75}, -year = {2007} -} - - -@article{onthestatistics, -title = {On the statistics of wind gusts}, -author = {F. Boettcher, Ch. Renner, H.-P. Waldl and J. Peinke}, -journal = {Boundary layer meteorology, Vol. 108}, -month={August}, -year = {2002} -} - -@article{smallandlargescale, -title = {Smale and large scale fluctuations in atmospheric wind speed}, -author = {F. Boettcher, St. Barth and J. Peinke}, -journal = {}, -month={June}, -year = {2005} -} - -@article{constrainedsimulation, -title = {Constrained simulation of critical wind speed gusts by means of wavelets}, -author = {Gunner Chr. Larsen, Kurt S. Hansen and Bo Juul Pedersen}, -journal = {}, -month={}, -year = {} -} - -@article{wavelet, -title = {A wavelet tour of signal processing}, -author = {S. Mallat}, -journal = {Academic Press}, -month={}, -year = {1998} -} - -@article{smallandlarge, -title = {Small and large scale fluctuations in atmospheric wind speeds}, -author = {F. Bottcher, St. Barth and J. Peinke}, -journal = {}, -month={}, -year = {2006} -} -@article{castaing, -title = {}, -author = {B. Castaing, Y. Gagne, E.J. Hopfinger}, -journal = {Physica D 46,177}, -year = {1990} -} - -@article{turbulenceEWTW, -title = {Turbulence Intensity EWTW according to IEC 61400-1}, -author = {P.J. Eecen}, -journal = {ECN report} -} - -@article{eigenfrequencies, -title = {Kwantificeren invloed mastbewegig op gemeten windsnelheid}, -author = {A.J. Brand and J.J. Heijdra}, -journal = {}, -number = {117}, -month={oktober}, -year = {2001} -} - - -@book{tomtom, -title = {Using Operational Experience for Optimizing O\&M of Offshore Wind Farms}, -author = {T.S. Obdam}, -publisher = {ECN-Wind Memo-07-034}, -year = {2007} -} - - -@article{hourlywindspeed, -title = {Determining wind gusts using mean hourly wind speed}, -author = {Lidija Cvitan}, -journal = {Geofizika Vol.20 - UDC 551.509.52}, -month={August}, -year = {2003} -} - -@article{zhou, -title = {Definition of wind profiles}, -author = {Y. Zhou and A. Kareem}, -journal = {J. Struct. Eng. - ASCE, 128, 1082-1086}, -year = {2002} -} - -@book{extremewind, -author = {P.J. Eecen and S.A.M. Barhorst }, -title = {Extreme wind conditions - Measurements at 50m Meteorological Mast at ECN, Petten}, -month={February}, -year = {2004}, -publisher= {ECN-C--04-019} -} - -% --------------------------------------------------------------------------------} -% --- Helicopters -% --------------------------------------------------------------------------------{ -@book{johnson:1994helicopter, - title={{Helicopter theory, Second edition}}, - author={Johnson, W.}, - series={Dover books on physics}, - year={1994}, - isbn={9780486682303}, - publisher={Dover Publications, Mineola, N.Y.} -} - -@book{johnson:2013rotorcraft, - title = {Rotorcraft aeromechanics}, - publisher = {Cambridge University Press, Cambridge}, - author = {Johnson, W.}, - year = {2013}, - isbn = {1107357780, 9781107028074, 9781107357785} -} - - -% --------------------------------------------------------------------------------} -% --- STANDARDS -% --------------------------------------------------------------------------------{ -@book{IEC61400-1AF, -author = {TC88 WG1}, -title = {IEC 61400-1 Annex F : Statistical extrapolation of loads for ultimate strength analysis}, -year = {2005}, -publisher= {} -} - -@book{IEC61400-3, -author = {TC88 WG3}, -title = {IEC 61400-3 Wind turbines : Design requirements for offshore wind turbines}, -year = {2005}, -publisher= {} -} - -@book{IEC61400-3AG, -author = {TC88 WG3}, -title = {IEC 61400-3 Annex G : Characteristic offshore wind turbine loads for ultimate strength analysis}, -year = {2005}, -publisher= {} -} -@book{IEC61400-1, -author = {TC88 WG1}, -title = {IEC 61400-1 Wind turbines : Design requirements}, -year = {2005}, -publisher= {} -} - -@book{IEC61400-12-1, -author = {{International Standard IEC}}, -title = {IEC 61400-12 Power performance measurements of electricity producing wind turbines}, -year = {2005}, -publisher= {International Electrotechnical Commission, Geneva}, -iSBN={ 2831883334} -} - - -@book{germanischerlloyd, -author={Germanischer Lloyd}, -title={Rules and Guidelines - Industrial Services - Guidelines for the certification of wind turbines}, -publisher={Germanischer Lloyd Wind Energy GmbH}, -year={2003} -} - -@book{risoeguidelines, -author = {DNV and Ris\o wind department}, -title = {Guidelines for design of wind turbines}, -year = {2001}, -publisher= {DNV/Ris\o} -} - - -% --------------------------------------------------------------------------------} -% --- NOT MINE -% --------------------------------------------------------------------------------{ -@article{Michelsen1994, -author = {J. A. Michelsen}, -title = {Block structured Multigrid solution of 2D and 3D elliptic PDE's}, -journal = {Technical Report AFM 94-06, Technical University of Denmark}, -year =1994 -} - -@article{Grass1971, -author = {A.J. Grass}, -title = {Structural features of turbulent flow over smooth and rough boundaries}, -journal = {J. Fluid Mech.}, -year={1971}, -vol = 50, -pages ={p223} -} - - -@book{Monin1973, -author = {A. S. Monin and A. M. Yaglom}, -title = {Statistical Fluid Mechanics: Mechanics of Turbulence}, -publisher = {MIT Press}, -year = {1973}, -address = {Cambridge, Mass.} -} - - - -@book{Bingham:2009, -author = {H. B. Bingham and P. S. Larsen and V. A. Barker}, -title = {Computational Fluid Dynamics Lecture Note for Course no. 41319}, -publisher = {Technical University of Denmark}, -year = 2009, -address = {Lyngby, Denmark}, -annote = {183p} -} - - - - -@article{Capp:1983, - author = {Capp, S.P.}, - title = {Experimental investigation of the turbulent axisymmetric jet, PhD dissertation. University at Buffalo, SUNY.}, - year = {1983} -} - -@article{Hussein:1994, - author = {Hussein, J. H., et al}, - title = {Velocity measurements in a high Reynolds number, momentum conserving, axisymmetric, turbulent jet.}, - year = 1994, - publisher = {J. Fluid Mech, vol 258, pp 31-75.} -} - - -@article{Pedersen:2002, - author = {Pedersen, Meyer.}, - title = {POD analysis of flow structures in a scale model of a ventilated room.}, - year = 2002, - journal = {Experiments in Fluids 33 (2002).} -} - - -% --------------------------------------------------------------------------------} -% --- POWER CURVE -% --------------------------------------------------------------------------------{ - -@book{rozennPhD, -author = {R. Wagner}, -title = {Accounting for the speed shear in wind turbine power performance measurement}, -year = {2010}, -month = April, -publisher= {Ris\o\-PhD-Report-58} -} - - -@article{remote_sens_power_curve, -author = {R. Wagner}, -title = {Remote sensing used for power curves}, -year = {2008}, -publisher= {IOP Conf. Series: Earth and Environmental Science} -} - - -@book{power_perf_complex, -author = {T. Pedersen and S. Gjerding and P. Ingham and P. Enevoldsen and J. Kjaer Hansen and H. Kanstrup J\o rgensen}, -title = {Wind Turbine Power Performance Verification in Complex Terrain and Wind Farms}, -year = {2002}, -month ={April}, -publisher= {Ris\o\ National Laboratory, Roskilde} -} - - -@article{power_curve_farm, -author = {S. Frandsen, et.al.}, -title = {Redefinition of Power Curve for More Accurate Performance Assessment of Wind Farms}, -year = {2002}, -month ={April}, -publisher= {Wind Energy, John Wiley & Sons, 3 2000, pp81-111} -} - - -@book{power_curve_accuracy, -author = {C. J. Christensen et.al.}, -title = {Accuracy of Power Curve Measurements}, -year = {1986}, -month ={November}, -publisher= {Ris\o\ National Laboratory, Roskilde} -} - -@book{power_perf_test, -author={IEA}, -title={Power Performance testing}, -publisher={ IEA Recommendation No. 1}, -year={1990} -} - -@book{power_perf_procedure, -author={IEA}, -title={MEASNET Power Performance Measurement Procedure}, -publisher={ MEASNET}, -year={2009}, -month={November} -} - - - - -% --------------------------------------------------------------------------------} -% --- Lidars -% --------------------------------------------------------------------------------{ - -@article{Mann2010, -author = {J. Mann and A. Pena and F. Bingol and R. Wagner and M.S. Courtney}, -title = {Lidar Scanning of Momentum Flux in and above the Atmospheric Surface Layer}, -year = {2010}, -month={reviewing}, -publisher= {American Meteorological Society} -} - -% from spectra to wind speed by multiplying by lambda/2 -% comparisons cup and lidars at different heights -% no calibration needed -% discussion on non uniform back scatter -@article{lidarSmith2006, -title={Wind Lidar Evaluation at the Danish Wind Test Site in H\o vs\o re}, -author={David A. Smith and Michael Harris and Adrian S. Coffey and Torben Mikkelsen and Hans E. J\o rgensen and Jakob Mann and R\'egis Danielian}, -publisher={John Wiley \& Sons}, -year={2006}, -journal={Wind Energy 9}, -pages={p87-97} -} - -% Now lasers wavelengths compliant with fiber optic components (so-called fiber lasers). -% Rotation, Spectrum and averaging well explained -@article{lidarCourtney2008, -title={Testing and comparison of lidars for profile and turbulence measurements in wind energy}, -author={Michael Courtney and Rozenn Wagner and Petter Lindel\"o w}, -publisher={IOP Publishing}, -year={2008}, -journal={14th International Symposium for the Advancement of Boundary Layer Remote Sensing } -} - -% complex terrain, slope with heights -@article{lidarFoussekis, -title={Wind profile Measurements using a Lidar and a 100m Mast}, -author={D. Foussekis and F. Moussakis and P. Papadopoulos and P. Vionis}, -publisher={}, -year={}, -journal={} -} - - -% Gusts, lidars on nacelles -@article{lidarHarris, -title={Laser Anemometry in Wind Energy Applications}, -author={M. Harris}, -publisher={}, -year={}, -journal={} -} - - -% Theoretical derivation of the spectrum measured by a lidar with a weighting function and turbulence model -@article{lidarMann2009, -title={Comparison of 3D turbulence measurements using three staring wind lidars and a sonic anemometer}, -author={J. Mann et al}, -year={2009}, -journal={Meteorologische Zeitschrift}, -volume = {18}, -number = {2}, -pages={p135-140} -} - - - -% Meaning of the fourier transform of the phi function as the : -% ratio between WS measured by lidar oriented along the wind speed and a sonic one. -% Comparison between lidar-measured spectra and spectra predicted by applying a theoretical lidar sampling filter to -% the three-dimensional turbulence structure -@article{lidarSjoholm2009, -title={Spatial averaging-effects on turbulence measured by a continuous-wave coherent lidar}, -author={MIKAEL SJ\" OHOLM. and TORBEN MIKKELSEN and JAKOB MANN and KAREN ENEVOLDSEN and MICHAEL COURTNEY}, -year={2009}, -journal={Meteorologische Zeitschrift}, -volume = {18}, -number = {3}, -pages={p281-287} -} - - - - - - -% --------------------------------------------------------------------------------} -% --- DIVERS -% --------------------------------------------------------------------------------{ -@book{faopumps, -author = {P.L. Fraenkel}, -title = {Les Machines Elevatoires - Bulletin FAO d'irrigation et de drainage}, -year = {1994}, -publisher= {FAO - Bulletin 43,ISBN 92-5-202515-4} -} - -@book{techniqueseoliennes, -author = {P. Leconte and M. Rapin and E. Szechenyi}, -title = {\'Eolienne}, -year = {2001}, -publisher= {Techniques de l'Ing\'enieur - BM 4640} -} - - -@book{techniquesenergieseoliennes, -author = {J. Martin}, -title = {\'Energies eoliennes}, -year = {1997}, -publisher= {Techniques de l'Ing\'enieur - BM 8585} -} - - - - - - - - - -% --------------------------------------------------------------------------------} -% --- Typical WT designs -% --------------------------------------------------------------------------------{ - -@book{tjaereborgloads, -author={WEGA measurement project}, -title={Tjaereborg wind turbine: Loads during normal operation mode}, -publisher={Elsamprojekt EP92/456}, -year={1994}, -month={June} -} -@book{tjaereborggeom, -author={S. \O ye}, -title={Tjaereborg wind turbine: Geometric and operational data}, -publisher={AFM notat VK-184, Fluid Mechanics, DTU}, -year={1990} -} -@book{tjaereborgstruct, -author={S. \O ye}, -title={Tjaereborg wind turbine: Structural dynamic data}, -publisher={AFM notat VK-186, Fluid Mechanics, DTU}, -year={1991} -} - -@book{nordtankdescr, -author = {K.S. Hansen}, -title = {Description of Nordtank 500/41 at Ris\o National Laboratories}, -year = {2003}, -publisher= {Ris\o} -} - -@TECHREPORT{nrelphasesix, - author = {M.M. Hand and D.A. Simms and L.J. Fingersh and D.W. Jager and J.R. Cotrell and S. Schreck and and S.M. Larwood}, - title = {Unsteady Aerodynamics Experiments Phase VI: Wind Tunnel Test Configurations and Available Data Campaigns}, - institution = {NREL - TP-500-29955}, - year = {2001} -} - -@TECHREPORT{nrelrotor, - author = {P. Giguiere and M.S. Selig}, - title = {Design of a tapered and twisted blade for the NREL combined experiment rotor}, - institution = {NREL}, - year = {1999} -} - - -@MASTERSTHESIS{ewanthesis, - author = {E. Machevaux}, - title = {Analysis of airfoil characteristics from pressure distribution}, - school = {DTU - Siemens}, - year = {2011} -} - -% Giguere? P.,? Selig? M.S.,? ?Design? of? a? Tapered? and? Twisted? Blade? for? the? NREL? -%combined?Experiment?Rotor?,?NREL/SR-500-26173,?NREL,?Golden,?CO,?1999.? - - -%Hand?M.M,?Simms,?Fingersh?L.J.,?Jager?D.W.,?Cortell?J.R.,?Schreck?S.?and?Larwood? -%S.M.,? ??,?NREL?Technical?Report?NREL/TP- -%500-29955,?Golden,?Colorado,?Dec?2001. - -@article{zahle:2014, - title = {{Comprehensive Aerodynamic Analysis of a 10 MW Wind Turbine Rotor Using 3D CFD}}, - language = {English}, - publisher = {American Society of Mechanical Engineers}, - author = {F. Zahle and C. Bak and N. N. S{\o}rensen and S. Guntur and N. Troldborg}, - journal = {Proceedings of 32nd ASME Wind Energy Symposium, National Harbor, Maryland}, - year = {2014}, - pages = {1-14} -} - - - -% --------------------------------------------------------------------------------} -% --- PROGRAMS - SOFTWARE -% --------------------------------------------------------------------------------{ - -@book{rmanual, -author = {W. N. Venables, D. M. Smith and the R Development Core Team}, -title = {An Introduction to R : A Programming Environment for Data Analysis and Graphics}, -year = {2008-10-20} -} - -@book{rwebsite, -author = {CRAN}, -title = {The R project - http://www.r-project.org/}, -} - -@misc{matlab, -author={{MathWorks}}, -title={{MATLAB 8.0 and Statistics Toolbox 8.1}}, -publisher={{The MathWorks, Inc., Natick, Massachusetts, United States.}}, -year={2017}, -} - - -@book{Deitel:2002, -author = {H. M. Deitel and P. J. Deitel and T. R. Nieto}, -title = {Internet \& World Wide Web, How to Program}, -publisher = {Prentice Hall}, -year = 2002, -address = {Upper Saddle River, New Jersey, USA}, -annote = {1366p} -} - - -@book{mathworld, -author = {Mathworld }, -title = {http://www.mathworld.wolfram.com/}, -year = {2011 }, -publisher= {Wolfram } -} - - - - - - - - -% --------------------------------------------------------------------------------} -% --- N-BODY PROBLEM -% --------------------------------------------------------------------------------{ -@article{belhadj:1991, - title = {Molecular dynamics simulations of water with Ewald summation for the long range electrostatic interactions}, - language = {English}, - author = {Belhadj, M. and Alper, H. E. and Levy, R. M.}, - journal = {Chemical Physics Letters}, - volume = {179}, - number = {1-2}, - pages = {13-20}, - year = {1991}, - issn = {00092614, 18734448}, - abstract = {The use of a partial charge version of the Ewald sum method to treat long range electrostatic interactions in molecular dynamics simulations of water has been investigated. The orientational structure and energetic properties of the liquid have been studied for several choices of Ewald sum parameters. The results, including the dielectric constant ε, the radial-dependent Kirkwood factor GK(r), the orientational projection HΔ(r), and the average dipole interaction energy, are compared with those from molecular dynamics simulations of water using the reaction field method. While the orientational structure of the liquid obtained from simulations which treat long range interactions by Ewald summation is different from corresponding results obtained from simulations with a reaction field, consistent values are calculated for the dielectric constant. The sensitivity of the results to variations in the convergence parameter α, the real-space cutoff Rc, and the number of vectors used in the reciprocal space sum was also analyzed.} -} - -@INPROCEEDINGS{flottmann:2003, - title = {Recent improvements to the Astra particle tracking code}, - language = {English}, - publisher = {IEEE}, - author = {Flottmann, K. and Lidia, SM and Piot, P.}, - booktitle = {Proceedings of the 2003 particle accelerator conference, vols 1-5}, - pages = {3500-3502}, - year = {2003}, - isbn = {0780377389}, - abstract = {The Astra simulation code has been successfully used in the design of linac and rf photoinjector systems utilizing beams with azimuthal symmetry. We present recently implemented changes to Astra that allow tracking of beams in beamlines without the assumption of any symmetry. The changes especially include a 3D mesh space charge algorithm and the possibility to import 3D electromagnetic field maps from eigensolver programs.} -} - - - -% --------------------------------------------------------------------------------} -% --- ALL REFERENCES -% -------------------------------------------------------------------------------- - -@article{Lawhite2007, -author = {Lawhite, Niels and Cohn, Ken}, -journal = {Wind Energy}, -number = {May 2002}, -pages = {40019}, -title = {{Characterizing Wind Speed and Direction Shear with SoDAR Data}}, -year = {2007} -} -@article{Lawhite, -author = {Lawhite, Niels and Walls, Elizabeth and Cohn, Ken}, -title = {{Characterizing Wind Speed and Direction Shear with SoDAR Data}} -} -@article{European2007, -author = {European, E L Petersen}, -isbn = {8755014828}, -journal = {Weather}, -number = {1989}, -title = {{European Wind Atlas}}, -year = {2007} -} -@article{Moore, -author = {Moore, Kathleen E and Box, P O and Bailey, Bruce H and Truewind, A W S}, -journal = {Wind Energy}, -pages = {1--11}, -title = {{Classifying Rotor Span Shear Profile Variability and Improving Wind Turbine Production Prediction}} -} - -@article{Landberg2007, -author = {Landberg, L and Bezroukikh, P P}, -isbn = {5754200676}, -number = {2000}, -title = {{Russian Wind Atlas}}, -year = {2007} -} -@book{Hasager2007, -author = {Hasager, C B and Astrup, P and Nielsen, M and Christiansen, M B and Ris\o, Badger and Emd, P Nielsen and Dong, P B S\o rensen}, -isbn = {8755035701}, -number = {April}, -title = {{SAT-WIND project Final report}}, -volume = {1586}, -year = {2007} -} -@article{Delft, -author = {Delft, Technische Universiteit and Prof, Rector Magnificus}, -title = {{A RELIABILITY BASED DESIGN METHODOLOGY FOR EXTREME RESPONSES OF OFFSHORE WIND TURBINES}} -} -@article{Pinson2009, -author = {Pinson, Pierre and Madsen, Henrik}, -journal = {Journal of Forecasting}, -keywords = {adaptive estimation,interval,point forecasting,regime-switching,wind power forecasting}, -pages = {1--41}, -title = {{Adaptive modelling and forecasting of offshore wind power fluctuations with Markov-switching autore- gressive models}}, -year = {2009} -} - -@article{Mann2006, -author = {Mann, Jakob and Width, Spectral}, -journal = {English}, -pages = {8--9}, -title = {{Estimation of energy dissipation from the doppler laser}}, -year = {2006} -} -@article{Angelou2010, -author = {Angelou, Nikolas and Mann, Jakob and Courtney, Mike and Sj\"{o}holm, Mikael and Angelou, Author Nikolas and Mann, Jakob and Courtney, Mike and Sj\"{o}holm, Mikael}, -number = {September}, -title = {{Doppler lidar mounted on a wind turbine nacelle Ris\o-R-Report}}, -year = {2010} -} -@article{Article2009, -author = {Article, Open Access and Divison, Wind Energy}, -doi = {10.1127/0941-2948/2009/0379}, -journal = {Wind Energy}, -number = {3}, -pages = {281--287}, -title = {{Spatial averaging-effects on turbulence measured by a continuous-wave coherent lidar}}, -volume = {18}, -year = {2009} -} -@article{Smith2006, -author = {Smith, David A and Harris, Michael and Coffey, Adrian S and Park, Technology}, -doi = {10.1002/we}, -journal = {Evaluation}, -number = {January}, -pages = {87--93}, -title = {{Wind Test Site in H\o vs\o re}}, -year = {2006} -} -@article{Angelou, -author = {Angelou, Nikolas and Mann, Jakob and Courtney, Mike and Sj\"{o}holm, Mikael and Angelou, Author Nikolas and Mann, Jakob and Courtney, Mike}, -title = {{Doppler lidar mounted on a wind turbine nacelle Ris\o-R-Report}} -} -@article{Bischoff2010, -author = {Bischoff, Oliver and Kuhn, Martin}, -journal = {Wind Energy}, -number = {May}, -title = {{Remote Sensing for Wind Energy}}, -volume = {3068}, -year = {2010} -} -@article{Wagner2009, -author = {Wagner, Rozenn and Mikkelsen, Torben and Courtney, Michael and Wagner, Author Rozenn and Mikkelsen, Torben and Courtney, Michael}, -isbn = {9788755037366}, -number = {March}, -title = {{Investigation of turbulence measurements with a continuous wave , conically scanning LiDAR Ris\o-R-Report}}, -volume = {1682}, -year = {2009} -} - -@article{Dellwik2010, -author = {Dellwik, Ebba and Mann, Jakob and Bing, Ferhat}, -number = {January}, -title = {{Flow tilt angles near forest edges , II : lidar anemometry}}, -year = {2010} -} -@article{Courtney2008, -author = {Courtney, Michael and Wagner, Rozenn and Lindel\"{o}w, Petter}, -doi = {10.1088/1755-1307/1/1/012021}, -journal = {Science}, -title = {{Testing and comparison of lidars for profile and turbulence measurements in wind energy}}, -volume = {012021}, -year = {2008} -} -@article{Project2006, -author = {Project, Master Thesis}, -number = {October}, -title = {{M . Sc . Program in Wind Energy Technical University of Denmark Ashikaga Institute of Technology Collaborative Research Center Investigation of the Savonius †type Magnus Wind Turbine}}, -year = {2006} -} -@article{Mill2005, -author = {Mill, Savonius Wind}, -journal = {Engineering}, -pages = {1--9}, -title = {{WIND ENERGY FOR EARTHKEEPERS}}, -year = {2005} -} -@article{Rahai2005, -author = {Rahai, Hamid R}, -number = {May}, -title = {{DEVELOPMENT OF OPTIMUM DESIGN CONFIGURATION AND PERFORMANCE FOR}}, -year = {2005} -} -@article{Deluxe, -author = {Deluxe, Picoturbine and Plans, Windmill}, -journal = {Construction}, -title = {{PicoTurbine Deluxe Windmill Plans}} -} -@article{Decoste2004, -author = {Decoste, Josh}, -journal = {Constraints}, -title = {{SELF-STARTING DARRIEUS WIND TURBINE}}, -year = {2004} -} -@article{Zhang2004, -author = {Zhang, Jianhui}, -journal = {Mechanical Engineering}, -title = {{Numerical Modeling of Vertical Axis Wind Turbine (VAWT) Master thesis}}, -year = {2004} -} -@article{El-sayed1995, -author = {El-sayed, A F Abdel Azim}, -journal = {Machinery}, -keywords = {aerodynamics,aeroelasticity,darrieus,dynamics,vertical axis}, -number = {1}, -pages = {33--41}, -title = {{Dynamics of Vertical Axis Wind Turbines ( Darrieus Type )}}, -volume = {2}, -year = {1995} -} - -@article{Cooper, -author = {Cooper, Paul and Kennedy, Oliver}, -journal = {Development}, -title = {{Development and Analysis of a Novel Vertical Axis Wind Turbine}} -} -@article{Ajdehak, -author = {Ajdehak, Esmaeil}, -keywords = {a,aerodynamic,airfoil cord length,and airfoil cord,ar,c,interference factor,power fluctuation,ratio between wing length,vertical axis wind turbine}, -title = {{Analysing power generation in Vertical Axis Wind Turbines ( VAWT )}} -} - - -@article{Kist2006, -author = {Kist, E C N G}, -title = {{INTERNATIONAL}}, -volume = {2005}, -year = {2006} -} -@article{Wind2002, -author = {Wind, Gamesa and Aps, Engineering}, -journal = {Measurement}, -title = {{COPYRIGHT © Danish Standards . NOT FOR COMMERCIAL USE OR REPRODUCTION Elproducerende vindm\o ller – Del 13 : M\aa ling af mekaniske laster Wind turbine generator systems – Part 13 : Measurement of mechanical loads Deskriptorer :}}, -year = {2002} -} - - -@article{Draft2008, -author = {Draft, Final and Standard, International and Final, Projet and Internationale, D E Norme}, -journal = {Distribution}, -title = {88/329/fdis}, -year = {2008} -} - -@article{Store2005, -author = {Store, Lica Ansi}, -journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, -title = {{INTERNATIONAL STANDARD}}, -volume = {2005}, -year = {2005} -} -@article{English-language2001, -author = {English-language, This}, -journal = {Measurement}, -title = {{INTERNATIONAL STANDARD INTERNATIONAL STANDARD}}, -volume = {2001}, -year = {2001} -} - -@article{En2005, -author = {En, B S}, -journal = {Terrain}, -title = {{Wind turbines —}}, -volume = {3}, -year = {2005} -} - -@article{Krogh2005, -author = {Krogh, Thomas}, -journal = {Wind Energy}, -pages = {1--2}, -title = {{Coordinate system}}, -year = {2005} -} - -@article{Guide, -author = {Guide, Practical and About, Ranchers}, -journal = {Director}, -title = {{Wind Energy in Colorado}} -} -@article{Specifications, -author = {Specifications, Turbine and Height, Tower and Diameter, Rotor and Area, Swept and Height, Total and Height, Met Tower and Height, Tower and Diameter, Rotor and Area, Swept and Height, Total and Height, Met Tower and Facts, Quick}, -isbn = {3032754097}, -title = {{Multi-Megawatt Turbine Installation at the NWTC}} -} - -@article{Cotrell2007, -author = {Cotrell, Jason}, -pages = {1--13}, -title = {{The DOE / NREL Wind Program}}, -year = {2007} -} -@article{Johnson2000, -author = {Johnson, W and Kelley, N}, -journal = {Contract}, -keywords = {January 2000,NREL/TP-500-27104,Wind energy, Initial Validation Software, Meteorological Tower Data}, -number = {January}, -title = {{Design Specifications for the Development of the Initial Validation Software ( Version 3 . 0 ) for Processing of NWTC 80-Meter Meteorological Tower Data Design Specifications for the Development of the Initial Validation Software ( Version 3 . 0 ) for Processing of NWTC 80-Meter Meteorological Tower Data}}, -year = {2000} -} - -@article{Adel, -author = {Adel, A L I and Mahmoud, S}, -journal = {Synthesis}, -title = {{TESTING \& INSTALLATION By}} -} - -@article{Gale2009, -author = {Gale, T and Range, Operating}, -pages = {2009}, -title = {{GALE T1 Vertical Axis Wind Turbine}}, -year = {2009} -} -@article{Writer2010, -author = {Writer, Associated Press and Energy, Xcel and Xcel, Minneapolis-based}, -title = {chicagotribune.com}, -year = {2010} -} -@article{Mast, -author = {Mast, Self-supporting}, -journal = {Concrete}, -pages = {6000}, -title = {{Proven WT6000 6kW Wind Turbine Proven TM900 9m ( or TM1500 15m )}} -} -@article{Scope2009, -author = {Scope, Project}, -journal = {Energy}, -pages = {1--7}, -title = {{SmartGridCity â„¢ : Design Plan for Boulder , Colo .}}, -year = {2009} -} -@article{Corporation2010, -author = {Corporation, Enernex}, -journal = {Contract}, -keywords = {January 2010,NREL/SR-550-47086,transmission study,utility grid,wind energy integration: wind energy interconnection}, -number = {January}, -title = {{EASTERN WIND INTEGRATION AND TRANSMISSION STUDY : Executive Summary and Project Overview}}, -year = {2010} -} -@article{Designated, -author = {Designated, The and Bedrock, Dipping and County, Jefferson}, -journal = {Building}, -title = {{Designated Dipping Bedrock Area Guide}} -} - -@article{Farms, -author = {Farms, Wind}, -journal = {Development}, -title = {{Wind farm project in Boulder , Colorado Freasibility Report}} -} - -@article{Bell1991, -author = {Bell, M J and Republic, Slovak and Feitosa, E A and Republic, Slovak and Republic, Czech and Republic, Slovak and Troen, I and Frandsen, S and Landberg, L and Rathmann, O and Authority, Energy and Authority, Egyptian Meteorological}, -isbn = {8755021433}, -journal = {Central European}, -title = {{Wind Atlases of the World}}, -year = {1991} -} -@article{Engineering2009, -author = {Engineering, Wasp}, -journal = {Assessment}, -pages = {0--1}, -title = {{WAsP Engineering 2.0}}, -year = {2009} -} -@article{Madsen2009, -author = {Madsen, Peter Hauge}, -title = {{The Wind Energy Division}}, -year = {2009} -} -@article{Division, -author = {Division, Wind Energy}, -title = {{Offshore Wind Energy}} -} -@article{Spallino2010, -author = {Spallino, Roberto}, -journal = {Wind Energy}, -number = {November}, -title = {{Type and Project Certification}}, -year = {2010} -} -@article{Division2008, -author = {Division, Wind Energy}, -journal = {System}, -title = {{Introducing WAsP 9.0}}, -year = {2008} -} -@article{Larsen2010, -author = {Larsen, Torben}, -journal = {Wind Energy}, -title = {{Offshore Wind Turbine Loads and Design}}, -year = {2010} -} -@article{Johnsen2010, -author = {Johnsen, David T}, -journal = {Wind Energy}, -number = {November}, -title = {{Electrical Grid Integration \& Control}}, -year = {2010} -} -@article{Mortensen, -author = {Mortensen, Niels G and Barthelmie, Rebecca J}, -journal = {Offshore (Conroe, TX)}, -title = {{Afternoon program}} -} -@article{Turbines, -author = {Turbines, Seven Wind}, -journal = {Transport}, -title = {{Sprog\o Offshore Wind Farm}} -} -@article{Study1999, -author = {Study, Case}, -number = {6}, -title = {{Tun\o Knob Offshore Wind Farm}}, -year = {1999} -} -@article{Hasager2010, -author = {Hasager, Charlotte Bay and Badger, Merete and Astrup, Poul and Karagali, Ioanna and Badger, Jake and Bing\"{o}l, Ferhat and Nielsen, Morten}, -journal = {Offshore (Conroe, TX)}, -number = {November}, -title = {{Satellite offshore}}, -year = {2010} -} -@article{Badger, -author = {Badger, Jake}, -title = {{Mesoscale modelling for offshore f ff h wind i d energy}} -} -@article{Mikkelsen, -author = {Mikkelsen, Torben and Division, Wind Energy}, -title = {{Remote Sensing-based Research : Wind and Turbulence , Flow around Huge Wind Turbines , On and Offshore Turbines}} -} -@article{Hasager, -author = {Hasager, Charlotte Bay}, -title = {{Offshore wind climates Charlotte Bay Hasager with thanks to Rebecca Barthelmie}} -} -@article{Clausen, -author = {Clausen, Niels-erik}, -title = {{Offshore Wind Energy Technology gy}} -} -@article{Energy, -author = {Energy, Sustainable}, -journal = {Small}, -title = {{Offshore Wind Energy Ris\o DTU}} -} -@article{Karen2010, -author = {Karen, E and Vesth, Allan}, -journal = {Wind Energy}, -number = {November}, -title = {{Offshore Measurement techniques Research and development}}, -year = {2010} -} -@article{Mikkelsen2010, -author = {Mikkelsen, Torben}, -journal = {Wind Energy}, -title = {{LIDAR and SODAR : Introduction t S Sensing i ( RS ) of f Wind Wi d S Speed : d}}, -year = {2010} -} -@article{Mikkelsena, -author = {Mikkelsen, Torben and Division, Wind Energy}, -journal = {Wind Energy}, -title = {{Remote Sensing of Wind}} -} -@article{Gryning2010, -author = {Gryning, Sven-erik}, -journal = {Wind Energy}, -title = {{Lidar and sodar – offshore}}, -year = {2010} -} -@article{Hasager2010a, -author = {Hasager, Charlotte and Clausen, Niels-erik and Division, Wind Energy}, -journal = {Wind Energy}, -number = {November}, -title = {{RIS\O Offshore Off h Wind Wi d Energy}}, -year = {2010} -} -@article{Wind2010, -author = {Wind, Offshore and Course, Energy}, -journal = {Wind Energy}, -title = {{Lidar and sodar – offshore}}, -year = {2010} -} -@article{Renewables2010, -author = {Renewables, Dong Energy}, -journal = {Strategies}, -number = {November}, -title = {{Dong Energy approach to Offshore O \& M}}, -year = {2010} -} -@article{Foundations2010, -author = {Foundations, Offshore}, -journal = {Test}, -number = {November}, -title = {{Ris\o Offshore Wind Energy Course Title : Date :}}, -year = {2010} -} -@article{Wind2010a, -author = {Wind, Offshore and Course, Energy}, -journal = {Offshore (Conroe, TX)}, -number = {November}, -title = {{Environmental Impact Assessment of Offshore Wind Farms Niels-Erik Clausen Ris\o DTU}}, -year = {2010} -} -@article{Selig1999, -author = {Selig, M S}, -journal = {Engineering}, -number = {April}, -title = {{Design of a Tapered and Twisted Blade for the NREL Combined Experiment Rotor Design of a Tapered and Twisted Blade for the NREL Combined Experiment Rotor}}, -year = {1999} -} -@article{Clausen2010, -author = {Clausen, Niels-erik}, -journal = {Nature}, -number = {November}, -pages = {1--3}, -title = {{Offshore wind energy course 11 November 2010 Wrap up Feasibility assessment The four five cornerstones of WF planning}}, -year = {2010} -} -@article{June2004, -author = {June, S E}, -number = {June}, -title = {{Investigation of the NREL NASA/Ames Wind Turbine Aerodynamics Database}}, -year = {2004} -} -@article{Tangler2000, -author = {Tangler, James L}, -journal = {Wind Energy}, -number = {July}, -title = {{The Evolution of Rotor and Blade Design}}, -year = {2000} -} -@article{Johansen2009, -author = {Johansen, Jeppe and Gaunaa, Mac and Bak, Christian}, -doi = {10.1002/we}, -journal = {Design}, -number = {September 2008}, -pages = {261--273}, -title = {{Design of a Wind Turbine Rotor for Maximum Aerodynamic Efficiency}}, -year = {2009} -} -@article{Lee1995, -author = {Lee, Andrew T and Hons, B E and Flay, Richard G J and Hons, B E}, -journal = {October}, -keywords = {aeodynamics,blades - fibre-reinforced composites,wind turbines - compliant}, -pages = {7--12}, -title = {{Compliant blades for wind turbines}}, -year = {1995} -} -@article{Thesis2005, -author = {Thesis, M Sc}, -journal = {Mechanical Engineering}, -number = {June}, -title = {{Load Alleviation on Wind Turbine Blades using Variable Airfoil Geometry ( 2D and 3D study ) Section of Fluid Mechanics}}, -year = {2005} -} -@article{Vermeer2003, -author = {Vermeer, L J and S, J N and Crespo, A}, -doi = {10.1016/S0376-0421(03)00078-2}, -journal = {Progress in Aerospace Sciences}, -pages = {467--510}, -title = {{Wind turbine wake aerodynamics}}, -volume = {39}, -year = {2003} -} - -@article{Sorensen, -author = {S\o rensen, Jens N and Okulov, Valery L}, -journal = {Science}, -pages = {1--4}, -title = {{Modeling of the Far Wake behind a Wind Turbine}} -} -@article{Larsen2008, -author = {Larsen, Gunner C and Madsen, Helge Aa and Torben, J and Troldborg, Niels and Troldborg, Niels}, -journal = {Wind Energy}, -number = {July}, -title = {{Wake modeling and simulation}}, -volume = {1653}, -year = {2008} -} -@article{Simos2008, -author = {Simos, Alexandre N}, -keywords = {potential flow,sector vortex-rings,three-dimensional,variational method}, -number = {2}, -pages = {118--132}, -title = {{A Family of Vortex Rings and a Variational Application to Potential Flows Around Three-dimensional Bodies}}, -volume = {XXX}, -year = {2008} -} -@article{Zhu2004, -author = {Zhu, Baoshan and Kamemoto, Kyoji}, -doi = {10.1016/j.expthermflusci.2004.02.009}, -journal = {Experimental Thermal and Fluid Science}, -keywords = {flow visualization,lock-in boundary,self-oscillation,unsteady flow,vortex shedding}, -pages = {129--135}, -title = {{Probability of self-oscillation induced by vortex shedding from a thin cambered blade}}, -volume = {29}, -year = {2004} -} -@article{Sahin2000, -author = {Sahin, M and Kamemoto, K}, -journal = {Mechanical Engineering}, -keywords = {airfoils,integral equation formulation,non-linear compressibility effect}, -pages = {441--445}, -title = {{A fast higher-order integral equation method for solution of the full potential equation around airfoils}}, -volume = {24}, -year = {2000} -} -@article{Tsutsui1997, -author = {Tsutsui, Takayuki and Igarashi, Tamotsu and Kamemoto, Kyoji}, -journal = {Journal of Wind Engineering and Industrial Aerodynamics}, -keywords = {boundary layer,coanda effect,numerical analysis,separation,vortex method}, -pages = {279--291}, -title = {{Interactive flow around two circular cylinders of different diameters at close proximity . Experiment and numerical analysis by vortex method}}, -volume = {71}, -year = {1997} -} -@article{Kamemoto1994, -author = {Kamemoto, K}, -journal = {October}, -keywords = {flow visualization,lock-in,oscillating,uniform flow,vortex}, -pages = {121--127}, -title = {{Vortex Shedding from an Oscillating Circular Cylinder in a Uniform Flow}}, -year = {1994} -} -@article{Gamst2012, -author = {Gamst, M and Petersen, B}, -doi = {10.1016/j.ejor.2011.10.001}, -issn = {0377-2217}, -journal = {European Journal of Operational Research}, -number = {2}, -pages = {278--286}, -publisher = {Elsevier B.V.}, -title = {{Comparing branch-and-price algorithms for the Multi-Commodity k-splittable Maximum Flow Problem}}, -url = {http://dx.doi.org/10.1016/j.ejor.2011.10.001}, -volume = {217}, -year = {2012} -} -@article{Nakanishi1993, -author = {Nakanishi, Y and Kamemoto, K}, -pages = {363--369}, -title = {{Numerical Simulation of Flow around a Sphere with Vortex Blobs}}, -volume = {47}, -year = {1993} -} -@article{Vries2005, -author = {Vries, De}, -doi = {10.1002/we.153}, -journal = {Online}, -number = {December 2004}, -pages = {457--475}, -title = {{Turbine Computations}}, -year = {2005} -} -@article{Chow, -author = {Chow, Raymond}, -title = {{A Focus on the Flow in the Inboard Part of the Blade}} -} -@article{Moffitt, -author = {Moffitt, Blake A and Bradley, Thomas H and Parekh, David E and Mavris, Dimitri}, -journal = {Aerospace}, -pages = {1--19}, -title = {{Validation of Vortex Propeller Theory for UAV Design with Uncertainty Analysis}} -} -@article{Of, -author = {Of, Tables and Goldstein, T H E}, -number = {December 1964}, -title = {{HYDROMECHANICS TABLES OF THE GOLDSTEIN FACTOR AERODYNAMICS by}} -} -@article{Calculating, -author = {Calculating, F O R and Interference, T H E Axial}, -journal = {Evaluation}, -number = {776}, -title = {{REPORT No. 776}}, -volume = {1} -} -@article{Larrabee, -author = {Larrabee, E Eugene}, -pages = {285--303}, -title = {{DESIGN OF PROPELLERS FOR MOTORSOARERS E. Eugene Larrabee Massachusetts Institute of Technology}} -} -@book{Prandtl, -author = {Prandtl, Ludwig and Hg, Albert Betz}, -isbn = {9783941875425}, -keywords = {Str\"{o}mungsmechanik}, -title = {{Ergebnisse der Aerodynamischen Versuchsanstalt zu G\"{o}ttingen}} -} -@article{Prandtla, -author = {Prandtl, Ludwig and Betz, Albert}, -keywords = {Aerodynamik,Hydrodynamik}, -title = {{Vier Abhandlungen zur Hydrodynamik und Aerodynamik}} -} -@article{War2007, -author = {War, First World}, -doi = {10.1002/we}, -number = {February}, -pages = {289--291}, -title = {{The Lanchester – Betz – Joukowsky Limit}}, -year = {2007} -} -@article{Kuik2004, -author = {Kuik, Gijs A M Van}, -doi = {10.1002/we.104}, -journal = {Control}, -pages = {9--19}, -title = {{Momentum Theory}}, -volume = {19}, -year = {2004} -} -@article{Kuik2003, -author = {Kuik, Gijs A M Van}, -journal = {American Society of Mechanical Engineers}, -title = {{THE EDGE S INGULARITY OF AN ACTUATOR DIS C WITH A CONSTANT}}, -year = {2003} -} - -@article{Okulov2011, -author = {Okulov, Valery L and Kuik, Gijs A M Van}, -doi = {10.1002/we}, -journal = {Wind Energy}, -keywords = {actuator disc theory,betz limit,vortex theory,wind turbine}, -title = {{The Betz – Joukowsky limit : on the contribution to rotor aerodynamics by the British , German and}}, -volume = {1}, -year = {2011} -} -@article{Houlsby, -author = {Houlsby, G T and Draper, S}, -title = {{Application of Linear Momentum Actuator Disc Theory to Open Channel Flow by}} -} -@article{Ragheb2010, -author = {Ragheb, M}, -title = {{FLOW SYSTEM ASYMETRIES AND ENERGY EXTRACTION}}, -year = {2010} -} -@article{Supply1954, -author = {Supply, Ministry O F}, -journal = {Methods}, -number = {2914}, -title = {{A Simple Method of Computing CD from Wake Traverses at High- subsonic Speeds A Simple Method of Computing CD from Wake Traverses at High-subsonic Speeds}}, -volume = {2914}, -year = {1954} -} -@article{S1920, -author = {S, P}, -journal = {Arbeit}, -title = {{K ml Das Maximum der theoretisch m\"{o}g lichen Ausn\"{u}tzung .. des ` Windes durch}}, -year = {1920} -} -@article{Jr, -author = {Jr, Marshall L Buhl}, -journal = {Renewable Energy}, -pages = {1--11}, -title = {{The NWTC Design-Codes Suite : An Overview}} -} -@article{Gaunaa2011, -author = {Gaunaa, Mac and Bergami, Leonardo and Heinz, Joachim}, -journal = {Leonardo}, -number = {January}, -title = {{Indicial response function for finite-thickness airfoils , a semi-empirical approach}}, -year = {2011} -} -@article{Sale2009, -author = {Sale, D}, -journal = {Energy}, -keywords = {August 2009,NREL/CP-500-45021,design code,hydrodynamic efficiency,hydrokinetic turbine,low-cost,mechanical power output,optimization method,stall-regulated rotors,wind energy}, -number = {August}, -title = {{Hydrodynamic Optimization Method and Design Code for Stall-Regulated Hydrokinetic Turbine Rotors}}, -year = {2009} -} -@article{Petrone2011, -author = {Petrone, Giovanni and Nicola, Carlo De and Quagliarella, Domenico and Italiano, Centro and Aerospaziali, Ricerche}, -journal = {Mechanical Engineering}, -number = {January}, -title = {{Wind Turbine Performance Analysis Under Uncertainty}}, -year = {2011} -} -@article{Hepperle, -author = {Hepperle, Martin}, -journal = {Design}, -number = {1}, -title = {{A Procedure for Propeller Design by Inverse Methods}} -} -@article{Yang1993, -author = {Yang, Kyle Yi-ling}, -journal = {Technology}, -number = {1991}, -title = {{Helicopter Rotor Lift Distributions for Minimum Induced Power Loss by}}, -year = {1993} -} -@article{Air2009, -author = {Air, Naval and Command, Training}, -journal = {Contract}, -title = {{WORKBOOK INTRODUCTION TO TH-57}}, -volume = {401}, -year = {2009} -} -@article{Aeronautics, -author = {Aeronautics, National}, -journal = {Analysis}, -number = {September 1985}, -title = {{AN ANALYSIS OF BLADE VORTEX INTERACTION AERODYNAMICS AND ACOUSTICS Stanford University Department of Aeronautics and Astronautics Stanford , CA 94305}} -} -@article{Neill2002, -author = {Neill, Charles O}, -title = {{Helicopter Rotor Unsteady Aerodynamics}}, -year = {2002} -} -@article{Fukumoto2005, -author = {Fukumoto, Y and Okulov, V L}, -doi = {10.1063/1.2061427}, -pages = {1--19}, -title = {{The velocity field induced by a helical vortex tube}}, -year = {2005} -} -@article{Johansen2009a, -author = {Johansen, Nicholas Alan}, -number = {July}, -title = {{Verification of simulated fatigue loads on wind turbines operating in wakes}}, -year = {2009} -} -@article{Murakami2008, -author = {Murakami, Y and Houston, S S}, -number = {3121}, -pages = {47--53}, -title = {{Dynamic inflow modelling for autorotating rotors}}, -year = {2008} -} -@article{Velocity, -author = {Velocity, Induced and Along, Profile}, -journal = {October}, -pages = {2--4}, -title = {{Figure 1 Induced Velocity Profile Along Blade}}, -volume = {05} -} -@book{Gaunaa2002, -author = {Gaunaa, Mac}, -booktitle = {Mechanical Engineering}, -isbn = {8774752588}, -title = {{Unsteady Aerodynamic Forces on NACA 0015 Airfoil in Harmonic Translatory Motion by}}, -year = {2002} -} -@book{Madsen2010, -author = {Madsen, Helge Aagaard and Bak, Christian and Paulsen, Uwe Schmidt and Gaunaa, Mac and Dtu, Ris\o and Fuglsang, Peter and Glasfiber, L M and Romblad, Jonas and Olesen, Niels A and Wind, Vestas and Madsen, Helge Aagaard and Bak, Christian and Schmidt, Uwe and Gaunaa, Mac and Dtu, Ris\o and Lm, Peter Fuglsang}, -isbn = {9788755038097}, -keywords = {September 2010}, -number = {September}, -title = {{The DAN-AERO MW Experiments Final report Ris\o-R-Report}}, -volume = {1726}, -year = {2010} -} -@article{Hand2001, -author = {Hand, M M and Simms, D A and Fingersh, L J and Jager, D W and Cotrell, J R and Schreck, S and Larwood, S M}, -journal = {Data Processing}, -keywords = {December 2001,NASA Ames Wind Tunnel,NREL/TP-500-29955,Unsteady aerodynamics experiment,horizontal-axis wind turbines}, -number = {December}, -title = {{Unsteady Aerodynamics Experiment Phase VI : Wind Tunnel Test Configurations and Available Data Campaigns Unsteady Aerodynamics Experiment Phase VI : Wind Tunnel Test Configurations and Available Data Campaigns}}, -year = {2001} -} -@article{Musial1992, -author = {Musial, W P}, -journal = {October}, -number = {October}, -title = {{Combined Experiment Phase I Final Report Combined Experiment Phase I Final Report}}, -year = {1992} -} -@book{Schepers, -author = {Schepers, J G}, -booktitle = {Analysis}, -isbn = {2020021110}, -title = {{IEA Annex XX : Comparison between calculations and measurements on a wind turbine in the NASA-Ames windtunnel}} -} -@article{Bak, -author = {Bak, Christian and Madsen, Helge A and Paulsen, Uwe Schmidt and Gaunaa, Mac and Fuglsang, Peter and Romblad, Jonas and Olesen, Niels A and Jensen, Leo}, -journal = {Power}, -pages = {1--10}, -title = {{DAN-AERO MW : Detailed aerodynamic measurements on a full scale MW wind turbine}} -} -@article{Field, -author = {Field, Mofett}, -title = {{No Title}} -} -@article{Zahle2007, -author = {Zahle, Frederik and S\o rensen, Niels N}, -doi = {10.1088/1742-6596/75/1/012042}, -pages = {1--9}, -title = {{On the Influence of Far-Wake Resolution on Wind Turbine Flow Simulations}}, -volume = {75}, -year = {2007} -} -@book{Bak2007, -author = {Bak, Christian}, -isbn = {9788755036109}, -number = {July}, -title = {{Research in Aeroelasticity EFP-2006}}, -volume = {1611}, -year = {2007} -} -@article{Døssing2011, -author = {D\o ssing, Mads and Madsen, Helge Aa and Bak, Christian}, -doi = {10.1002/we}, -journal = {Wind Energy}, -keywords = {aerodynamics,blade element momentum method,optimization,wake expansion,wake rotation,wind turbine}, -title = {{Aerodynamic optimization of wind turbine rotors using a blade element momentum method with corrections for wake rotation and expansion}}, -year = {2011} -} -@article{Madsen2007, -author = {Madsen, H Aa and Mikkelsen, R and \O ye, S and Bak, C and Johansen, J}, -doi = {10.1088/1742-6596/75/1/012016}, -pages = {1--11}, -title = {{A Detailed investigation of the Blade Element Momentum ( BEM ) model based on analytical and numerical results and proposal for modifications of the BEM model}}, -volume = {75}, -year = {2007} -} -@book{Bak2008, -author = {Bak, Christian}, -booktitle = {Wind Energy}, -isbn = {9788755036857}, -number = {July}, -title = {{Research in Aeroelasticity EFP-2007}}, -volume = {1649}, -year = {2008} -} -@article{Hansen, -author = {Hansen, A Craig}, -title = {{USER ' S GUIDE to the Wind Turbine Aerodynamics Computer Software}} -} -@article{Moriarty2005, -author = {Moriarty, Patrick J and Hansen, A Craig and Moriarty, Patrick J and Hansen, A Craig}, -journal = {Renewable Energy}, -number = {December}, -title = {{AeroDyn Theory Manual AeroDyn Theory Manual}}, -year = {2005} -} - - - -@article{Jonkman2010, -author = {Jonkman, B J and Jonkman, J M}, -journal = {Contract}, -number = {March}, -title = {{Documentation of Updates to FAST , A2AD , and AeroDyn Including the Revised AeroDyn Interface ALPHA VERSION Documentation of Updates to FAST , A2AD , and AeroDyn Including the Revised AeroDyn Interface ALPHA VERSION}}, -year = {2010} -} -@article{Hansen2004, -author = {Hansen, Martin O L and Technical, The and Mechanics, Fluid}, -doi = {10.1002/we.126}, -number = {April}, -pages = {343--356}, -title = {{Tip Studies Using CFD and Comparison with Tip Loss Models}}, -volume = {356}, -year = {2004} -} -@article{Mauclere2009, -author = {Maucl\`{e}re, Xavier}, -journal = {Evaluation}, -number = {August}, -title = {{Master Thesis}}, -year = {2009} -} -@article{Klausmeyer1997, -author = {Klausmeyer, Steven M and Lin, John C}, -journal = {Nasa Technical Memorandum}, -number = {May}, -title = {{Comparative Results From a CFD Challenge Over a 2D Three-Element High-Lift Airfoil}}, -year = {1997} -} -@article{Sørensen2004, -author = {S\o rensen, N N}, -doi = {10.1115/1.1807854}, -journal = {Journal of Solar Energy Engineering}, -number = {November}, -pages = {1011--1016}, -title = {{Drag Prediction for Blades at High Angle of Attack Using CFD}}, -volume = {126}, -year = {2004} -} -@article{Baka, -author = {Bak, Christian and Scientist, Senior}, -journal = {Design}, -title = {{Aerodynamic airfoil characteristics for wind turbines – 2D and 3D}} -} -@article{Hansen2010, -author = {Hansen, Morten Hartvig}, -pages = {16--17}, -title = {{Airfoil modelling in HAWC2 Black board picture for next years ’ slides Black board picture for next years ’ slides}}, -year = {2010} -} -@article{Kocurek2005, -author = {Kocurek, J David}, -journal = {Power}, -keywords = {NREL/CP-500-36900,October 2004,airfoil,airfoil performance,blade-element momentum,wind energy,wind turbine}, -number = {October 2004}, -title = {{Wind Turbine Post-Stall Airfoil Performance Characteristics Guidelines for Blade-Element Momentum Methods}}, -year = {2005} -} -@article{Gaunaa2010, -author = {Gaunaa, Mac and S\o rensen, Niels N and Bak, Christian}, -journal = {Wind Energy}, -pages = {135--152}, -title = {{Thick Multiple Element Airfoils for use on the Inner Part of Wind Turbine Rotors 1 Introduction}}, -year = {2010} -} -@article{Moriarty2005a, -author = {Moriarty, P J}, -journal = {Renewable Energy}, -number = {January}, -title = {{AeroDyn Theory Manual}}, -year = {2005} -} - -@article{Somers2005, -author = {Somers, D M}, -journal = {Contract}, -number = {January}, -title = {{Airfoils October 1992 – November 1993 The S819 , S820 , and S821 Airfoils}}, -year = {2005} -} -@article{Matilda2003, -author = {Matilda, Port}, -journal = {Contract}, -number = {June}, -title = {{Theoretical Aerodynamic Analyses of Six Airfoils for Use on Small Wind Turbines Period of Performance : Theoretical Aerodynamic Analyses of Six Airfoils for Use on Small Wind Turbines Period of Performance :}}, -year = {2003} -} -@article{Somers2005a, -author = {Somers, D M}, -journal = {Contract}, -number = {January}, -pages = {1994--1995}, -title = {{The S827 and S828 Airfoils Period of Performance : 1994 – 1995 The S827 and S828 Airfoils}}, -year = {2005} -} -@article{Somers2004, -author = {Somers, D M}, -journal = {Contract}, -number = {December}, -title = {{Airfoils October 1991 – July 1992 The S816 , S817 , and S818 Airfoils}}, -year = {2004} -} -@article{Janiszewska1996, -author = {Janiszewska, J M}, -journal = {Matrix}, -number = {July}, -title = {{Wind Tunnel Testing of Three S809 Aileron Configurations for use on Horizontal Axis Wind Turbines}}, -year = {1996} -} -@article{Dahl1998, -author = {Dahl, Kristian S and Fuglsang, Peter}, -journal = {Design}, -number = {December}, -title = {{Design of the Wind Turbine Airfoil Family RIS A XX}}, -year = {1998} -} -@article{Oerlemans, -author = {Oerlemans, S}, -keywords = {aerodynamics,noise,test methods}, -pages = {2--5}, -title = {{No Title}} -} -@book{Oerlemans2004, -author = {Oerlemans, Stefan and Oerlemans, Stefan}, -booktitle = {Contract}, -isbn = {3033846963}, -number = {August}, -title = {{Wind Tunnel Aeroacoustic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance : Wind Tunnel Aeroacoustic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance :}}, -year = {2004} -} -@book{Selig2004, -author = {Selig, Michael S and Mcgranahan, Bryan D and Selig, Michael S and Mcgranahan, Bryan D}, -booktitle = {October}, -isbn = {3033846963}, -keywords = {NREL/SR-500-34515,Revised October 2004,University of Illinois,aerodynamic tests,airfoils,small wind turbines,wind tunnel}, -number = {October}, -title = {{Wind Tunnel Aerodynamic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance : Wind Tunnel Aerodynamic Tests of Six Airfoils for Use on Small Wind Turbines Period of Performance :}}, -year = {2004} -} -@article{Reuss1995, -author = {Reuss, R L and Hoffmann, M J and Gregorek, G M}, -journal = {Renewable Energy}, -number = {December}, -title = {{Effects of Surface Roughness and Vortex Generators on the NACA 4415 Airfoil}}, -year = {1995} -} -@article{Bertagnolio2005, -author = {Bertagnolio, F and Rasmussen, F}, -doi = {10.1115/1.1861927}, -journal = {Wind Energy}, -keywords = {aerodynamic damping,aerodynamics,aeroelasticity,airfoil,computational fluid dynamics,engineering model,tunnel,wind}, -number = {May}, -title = {{New Insight Into the Flow Around a Wind Turbine Airfoil Section 1}}, -volume = {127}, -year = {2005} -} -@article{Timmer2003, -author = {Timmer, W A and Rooij, R P J O M Van}, -journal = {Civil Engineering}, -title = {{No Title}}, -year = {2003} -} -@article{Workshops2008, -author = {Workshops, Dutch Wind}, -journal = {October}, -number = {October}, -title = {{The DUWIND airfoils}}, -year = {2008} -} -@book{Fuglsang2003, -author = {Fuglsang, Peter and Bak, Christian and Gaunaa, Mac}, -isbn = {8755031390}, -number = {January}, -title = {{Wind Tunnel Tests of Ris\o-B1-18 and}}, -volume = {1375}, -year = {2003} -} -@article{Timmer2003a, -author = {Timmer, W A and Rooij, R P J O M Van}, -journal = {Civil Engineering}, -number = {January}, -pages = {2003}, -title = {{Aiaa 2003-352}}, -year = {2003} -} -@article{Timmer2003b, -author = {Timmer, W A}, -journal = {American Society of Mechanical Engineers}, -pages = {1--10}, -title = {{ROUGHNESS SENSITIVITY CONSIDERATIONS FOR THICK ROTOR BLADE}}, -year = {2003} -} -@article{Timmer, -author = {Timmer, W A and Schaffarczyk, A P and Schleswig-holstein, Technologiestiftung}, -journal = {Test}, -keywords = {airfoil characteristics,effects,high reynolds,leading edge roughness adds,numbers,performance due to roughness,roughness sensitivity,thick airfoils,thickness to the}, -title = {{The effect of roughness at high Reynolds numbers on the performance of DU 97-W-300Mod .}} -} -@article{Rooij2004, -author = {Rooij, Ruud Van}, -journal = {Production}, -pages = {1--31}, -title = {{Design of Airfoils for Wind Turbine Blades Nando Timmer Delft University of Technology Faculties :}}, -year = {2004} -} -@article{Holm2000, -author = {Holm, R and Gustavsson, J and Bj, A}, -journal = {Symposium A Quarterly Journal In Modern Foreign Literatures}, -keywords = {2-d airfoil,piv,separated flow,stall,wind tunnel test,wind turbine}, -pages = {1--8}, -title = {{A PIV STUDY OF SEPARATED FLOW AROUND A 2-D AIRFOIL}}, -year = {2000} -} -@article{Holm1999, -author = {Holm, Richard and Gustavsson, Jonas}, -title = {{\$ 3 , 9 6WXG \backslash RI 6HSDUDWHG ) ORZ DURXQG D ' \$ LUIRLO DW + LJK \$ QJOHV RI \$ WWDFN LQ D / RZ 6SHHG : LQG 7XQQHO}}, -year = {1999} -} -@article{Fuglsang2004, -author = {Fuglsang, Peter and Bak, Christian and Box, P O}, -doi = {10.1002/we.117}, -pages = {145--162}, -title = {{Turbine Airfoils}}, -volume = {162}, -year = {2004} -} -@article{Timmer2010, -author = {Timmer, W A}, -journal = {Aerospace Engineering}, -keywords = {airfoil characteristics,airfoils performance at delft,drag ratio,high angles of attack,lift-to-,map the du,uncertainties and to further,university of}, -number = {1}, -pages = {71--80}, -title = {{Aerodynamic characteristics of wind turbine blade airfoils at high angles-of-attack}}, -year = {2010} -} -@article{Timmer2009, -author = {Timmer, W A}, -journal = {Wind Energy}, -number = {January}, -pages = {1--13}, -title = {{An overview of NACA 6-digit airfoil series characteristics with reference to airfoils for large wind turbine blades.}}, -year = {2009} -} -@article{June2004a, -author = {June, S E}, -journal = {Methods}, -number = {June}, -title = {{Methods for Root Effects, Tip Effects and Extending the Angle of Attack Range to ±180°, with Application to Aerodynamics for Blades on Wind Turbines and Propellers}}, -year = {2004} -} -@article{Data, -author = {Data, Aerofoil}, -pages = {397--402}, -title = {{7 . Guidelines for Improving the Reliability of}} -} -@article{Aerodynamics, -author = {Aerodynamics, Airfoil}, -title = {{4 . ROTATIONAL EFFECTS ON THE AERODYNAMIC COEFFICIENTS}} -} -@article{Lindenburg, -author = {Lindenburg, C}, -keywords = {airfoil coefficients}, -title = {{Modelling of rotational augmentation based on engineering considerations and measurements}} -} -@article{Lindenburg2004, -author = {Lindenburg, C}, -journal = {Wind Energy}, -number = {November}, -pages = {22--25}, -title = {{MODELLING OF ROTATIONAL AUGMENTATION BASED ON ENGINEERING CONSIDERATIONS AND MEASUREMENTS}}, -year = {2004} -} -@article{Chaviaropoulos2000, -author = {Chaviaropoulos, P. K. and Hansen, M. O. L.}, -journal = {October}, -number = {June}, -title = {{Investigating Three-Dimensional and Rotational Effects on Wind Turbine Blades by Means of a}}, -volume = {122}, -year = {2000} -} -@article{Bak2006, -author = {Bak, Christian and Johansen, Jeppe and Andersen, Peter B}, -journal = {Wind Energy}, -keywords = {2006,Ris\o National Laboratory,ewec}, -pages = {1--10}, -title = {{Three-Dimensional Corrections of Airfoil Characteristics Based on Pressure Distributions}}, -year = {2006} -} -@book{Hartvig2011, -author = {Hartvig, Morten and Ed, Hansen and Morten, Author and Hansen, Hartvig}, -booktitle = {Design}, -isbn = {9788755039407}, -keywords = {October 2011}, -number = {October}, -title = {{Presentations from Aeroelastic Workshop 2 – latest results from AeroOpt Ris\o-R-Report}}, -volume = {1796}, -year = {2011} -} -@book{Hansen2011, -author = {Hansen, Morten Hartvig}, -booktitle = {Contract}, -isbn = {9788755038851}, -keywords = {February 2011}, -number = {February}, -title = {{Presentations from the Aeroelastic Workshop – latest results from AeroOpt}}, -volume = {1769}, -year = {2011} -} -@book{Thomas2009, -author = {Thomas, Author}, -booktitle = {Wind Energy}, -isbn = {9788755037595}, -number = {June}, -title = {{Ris\o-R-Report}}, -volume = {1698}, -year = {2009} -} -@book{Zahle2002, -author = {Zahle, Frederik and S\o rensen, Niels N and Johansen, Jeppe}, -isbn = {8755031269}, -number = {September}, -title = {{CFD Study of a NACA 63-415 Aerofoil Fitted with Stall Strips}}, -volume = {1370}, -year = {2002} -} -@article{Mortensen2008, -author = {Mortensen, Kasper}, -number = {August}, -title = {{CFD Simulations of an Airfoil With Leading Edge Ice Accretion}}, -year = {2008} -} -@article{Tangler1995, -author = {Tangler, J L and Drive, Rose and Matilda, Port}, -journal = {Wind Energy}, -number = {1}, -pages = {1--12}, -title = {{NREL Airfoil Families for HAWTs}}, -year = {1995} -} -@article{Zhang, -author = {Zhang, Mingming}, -journal = {Test}, -title = {{Introduction to R\&D at IET}} -} -@article{Bakb, -author = {Bak, Christian and Olesen, Niels A and Jensen, Leo}, -journal = {Power}, -title = {{DAN-AERO MW : Comparisons of airfoil characteristics for two airfoils tested in three different wind tunnels}} -} -@article{Abbott, -author = {Abbott, By I R A H}, -journal = {New York}, -title = {{THEORY OF Including a Summary of Airfoil Data}} -} -@article{Al, -author = {Al, Subcourse}, -title = {{BASIC AERODYNAMICS}} -} -@article{Fukudome, -author = {Fukudome, Keiko and Watanabe, Masashi and Iida, Akiyoshi and Mizuno, Akisato}, -journal = {Mechanical Engineering}, -keywords = {a thin tripping,abstract,an angle of attack,axis wind turbine,broadly,flow control,flow visualization,investigation is to develop,of turbine blades in,plus to a minus,separation,symmetric vortex generators are,the aim of this,the high performance vertical,the turbulence promoters for,therefore required to develop,turbulence promoters,vawt,vawt changes from a,wind turbine,with}, -pages = {2--5}, -title = {{Separation Control of High Angle of Attack Airfoil for Vertical Axis Wind Turbines}} -} -@book{Loslaten, -author = {Loslaten, Het}, -isbn = {9039325820}, -title = {{No Title}} -} -@article{Jens1992, -author = {Jens, N S and Myken, Asger}, -journal = {Science}, -pages = {139--149}, -title = {{Unsteady actuator disc model for horizontal axis wind turbines}}, -volume = {39}, -year = {1992} -} -@article{Group, -author = {Group, Advisory and Aerospace, F O R and Report, Agard}, -journal = {Methods}, -title = {{A Comparison of Methods Used in Lifting Surface Theory}} -} -@article{Supply, -author = {Supply, O F}, -journal = {Director}, -number = {2884}, -title = {{Methods for Calculating the Lift Distribution of Wings ( Subsonic Lifting-Surface Theory ) Methods for Calculating the Lift Distribution of Wings}}, -volume = {2884} -} -@article{Johansen2004, -author = {Johansen, Jeppe}, -doi = {10.1002/we.127}, -number = {April}, -pages = {283--294}, -title = {{Rotor Computations}}, -volume = {294}, -year = {2004} -} -@article{Larrabee1983, -author = {Larrabee, E Eugene and French, Susan E}, -journal = {Journal of Wind Engineering}, -pages = {317--327}, -title = {{Journal of Wind Engineering and Industrial Aerodynamics, 15 (1983) 317--327}}, -volume = {15}, -year = {1983} -} -@book{Bak2007a, -author = {Bak, Christian}, -isbn = {9788755036109}, -number = {July}, -title = {{Research in Aeroelasticity EFP-2006}}, -volume = {1611}, -year = {2007} -} -@book{Bak2006a, -author = {Bak, Christian}, -isbn = {8755035213}, -number = {May}, -title = {{Research in Aeroelasticity EFP-2005}}, -volume = {1559}, -year = {2006} -} -@book{Group2006, -author = {Group, Francis}, -booktitle = {Group}, -isbn = {9780849315701}, -title = {{Wind and Solar Power Systems}}, -year = {2006} -} -@article{Mcnames2006, -author = {Mcnames, James}, -journal = {IEEE Signal Processing Magazine}, -number = {January}, -pages = {82--87}, -title = {{An Effective Color Scale for Simultaneous Color and Gray-Scale Publications}}, -year = {2006} -} -@article{Frontmatter2000, -author = {Frontmatter, Carl W}, -journal = {Engineering and Technology}, -title = {{Hall, Carl W. "Frontmatter"}}, -year = {2000} -} -@article{Kusiak2010, -author = {Kusiak, Andrew and Song, Zhe}, -doi = {10.1016/j.renene.2009.08.019}, -issn = {0960-1481}, -journal = {Renewable Energy}, -number = {3}, -pages = {685--694}, -publisher = {Elsevier Ltd}, -title = {{Design of wind farm layout for maximum wind energy capture}}, -url = {http://dx.doi.org/10.1016/j.renene.2009.08.019}, -volume = {35}, -year = {2010} -} -@book{Cardarelli, -author = {Cardarelli, Francois}, -booktitle = {English}, -isbn = {185233682X}, -title = {{Encyclopaedia of Scientific Units , Weights and Measures}} -} -@book{Schmitt, -author = {Schmitt, Ron}, -booktitle = {Time}, -isbn = {0750674032}, -title = {{EXPLAINED}} -} -@article{Harrison, -author = {Harrison, H R}, -journal = {New York}, -title = {{Advanced Engineering Dynamics}} -} -@book{Cheat, -author = {Cheat, Free}, -booktitle = {Director}, -isbn = {9780470496374}, -title = {{Get More and Do More at Dummies . com ®}} -} -@book{Energya, -author = {Energy, Green}, -booktitle = {Outlook}, -isbn = {9783540687627}, -title = {{No Title}} -} -@book{Groupa, -author = {Group, Francis}, -booktitle = {Wind Energy}, -isbn = {9781420075687}, -title = {{WIND}} -} -@article{Smulders2004, -author = {Smulders, P T}, -journal = {Wind Energy}, -number = {January}, -title = {{ROTORS for WIND POWER ROTORS for WIND POWER}}, -year = {2004} -} -@article{Technology, -author = {Technology, Alternative and Course, Windpower and Piggott, Hugh and Nybroe, Claus and Piggott, Hugh and Ian, Thanks and Workshop, Windpower}, -title = {{Small Wind Turbine Design Notes Defining drag vs lift forces}} -} -@article{Lindenburg2003, -author = {Lindenburg, C}, -keywords = {airfoil coefficients,deep stall,rotational augmentation,rotor aerodynamics,tip-loss models,wind turbine}, -number = {July}, -title = {{Investigation into Rotor Blade Aerodynamics Analysis of the stationary measurements on the UAE phase-VI rotor in the NASA-Ames wind tunnel}}, -year = {2003} -} -@article{Power2001, -author = {Power, Wind Turbine and Systems, Wind Energy and Johnson, Gary L}, -journal = {Wind Energy}, -pages = {1--54}, -title = {{WIND TURBINE POWER , ENERGY , AND TORQUE}}, -year = {2001} -} -@article{Ii2001, -author = {Ii, World War and States, United and Systems, Wind Energy and Johnson, Gary L}, -journal = {Wind Energy}, -pages = {1--23}, -title = {{Chapter 1—Introduction 1–1}}, -year = {2001} -} -@book{Delft2008, -author = {Delft, Technische Universiteit and Magnificus, Rector}, -booktitle = {Transformation}, -isbn = {9789090236278}, -number = {november}, -title = {{Aeroelasticity of Large Wind Turbines}}, -year = {2008} -} -@book{Turbinesa, -author = {Turbines, Wind and Edition, Second}, -isbn = {8755028705}, -title = {{for Design of Wind Turbines}} -} -@article{Hansen2006, -author = {Hansen, M.O.L. and S\o rensen, J N and Voutsinas, S and S\o rensen, N and Madsen, H Aa}, -doi = {10.1016/j.paerosci.2006.10.002}, -journal = {Progress in Aerospace Sciences}, -keywords = {aeroelasticity,wind turbines}, -pages = {285--330}, -title = {{State of the art in wind turbine aerodynamics and aeroelasticity}}, -volume = {42}, -year = {2006} -} -@article{Sørensena, -author = {S\o rensen, Jens N\o rk\ae r}, -journal = {Wind Energy}, -title = {{The Aerodynamics of Wind Turbines by}} -} -@article{Mikkelsenb, -author = {Mikkelsen, Robert and Troldborg, Niels and Ivanell, Stefan and Shen, Wen Zhong}, -title = {{Wakes and Wind Farms}} -} -@article{Bakc, -author = {Bak, Christian}, -journal = {Contract}, -keywords = {October 2010}, -title = {{Aerodynamic design of wind turbine rotors}} -} -@article{Resources, -author = {Resources, Wind Energy}, -journal = {Wind Energy}, -title = {{Guided Tour on Wind Energy}} -} -@article{Energyb, -author = {Energy, Capturing Wind}, -journal = {Wind Energy}, -pages = {1--3}, -title = {{Wind Energy}} -} -@article{Overview, -author = {Overview, Wind Energy and Overview, Technology and Systems, Wind Energy and Power, Wind and Wind, Iowa and Data, Energy and Energy, Wind and Overview, Issues and Issues, Legal and Issues, Environmental and Agencies, Government and Tables, Conversion}, -title = {{Wind Energy Manual : Table of Contents}} -} -@article{Decoste2006, -author = {Decoste, Jon}, -title = {{Self-Starting Vertical Axis Wind Turbine Group Members}}, -year = {2006} -} -@article{Energyc, -author = {Energy, Wind}, -title = {{No Title}} -} -@article{Woofenden2007, -author = {Woofenden, Ian and Piggott, Hugh}, -number = {january}, -title = {{R T R ( Blades \& Hub )}}, -year = {2007} -} -@article{Piggott2001, -author = {Piggott, Hugh}, -journal = {Contract}, -number = {July}, -title = {{SMALL WIND SYSTEMS FOR BATTERY CHARGING Contract R 7105 By Simon Dunnett , Smail Khennas and}}, -year = {2001} -} -@article{Wind, -author = {Wind, Power From}, -title = {{Presentation on :}} -} -@book{Twidell, -author = {Twidell, John and Weir, Tony}, -booktitle = {Management}, -isbn = {0419219900}, -title = {{Renewable Energy Resources}} -} -@book{Energyd, -author = {Energy, Renewable}, -booktitle = {Technology}, -isbn = {9783540709473}, -title = {{No Title}} -} -@article{Wind2006, -author = {Wind, G E and Llc, Energy}, -journal = {Power Quality}, -keywords = {Advanced Wind Turbine Program,GE Wind Energy LLC,May 2006,NREL/SR-500-38752,Next Generation Turbine Development project,wind,wind power}, -number = {May}, -title = {{Advanced Wind Turbine Program Next Generation Turbine Development Project Advanced Wind Turbine Program Next Generation Turbine Development Project}}, -year = {2006} -} -@article{Epri1998, -author = {Epri, Energy and Turbine, Wind}, -journal = {Power}, -number = {December}, -title = {{Wisconsin Low Wind Speed Turbine Project Development}}, -year = {1998} -} -@book{Larsson2000, -author = {Larsson, \AA K E}, -booktitle = {Power}, -isbn = {9171979700}, -title = {{The Power Quality of Wind Turbines Department of Electric Power Engineering}}, -year = {2000} -} -@book{Hansen2001, -author = {Hansen, L H and Helle, L and Blaabjerg, F and Ritchie, E and Bindner, H and S\o rensen, P}, -booktitle = {Design}, -isbn = {8755027431}, -number = {December}, -title = {{Conceptual survey of Generators and Power Electronics for Wind Turbines}}, -volume = {1205}, -year = {2001} -} -@book{Zhu2007, -author = {Zhu, Wei Jun}, -booktitle = {Mechanical Engineering}, -isbn = {9788774753483}, -title = {{Aero-Acoustic Computations of}}, -year = {2007} -} -@article{Zhu2004a, -author = {Zhu, Wei Jun}, -title = {{Modelling Of Noise From Wind Turbines}}, -year = {2004} -} -@article{Zhu2011, -author = {Zhu, Wei Jun and Shen, Wen Zhong and S\o rensen, Jens N\o rk\ae r}, -doi = {10.1002/fld}, -journal = {Methods}, -keywords = {acoustics splitting method,computational aeroacoustics,flow,high-order schemes}, -number = {January 2010}, -pages = {17--37}, -title = {{High-order numerical simulations of flow-induced noise}}, -year = {2011} -} -@article{Sørensen2006, -author = {S\o rensen, Jens N}, -journal = {Optimization}, -number = {November}, -title = {{Optimization of Wind Turbines with respect to Noise}}, -year = {2006} -} -@book{Laakso, -author = {Laakso, Timo and Baring-gould, Ian and Durstewitz, Michael and Horbaty, Robert and Lacroix, Antoine and Peltola, Esa and Ronsten, G\"{o}ran and Tallhaug, Lars and Wallenius, Tomas}, -booktitle = {English}, -isbn = {9789513874933}, -keywords = {Wind energy, cold climate, atmospheric icing, ice detection, anti-icing, icing modelling}, -title = {{State-of-the-art of wind energy in cold climates}} -} -@article{Kocurek2005a, -author = {Kocurek, J David}, -journal = {Power}, -number = {October 2004}, -title = {{Wind Turbine Post-Stall Airfoil Performance Characteristics Guidelines for Blade-Element Momentum Methods}}, -year = {2005} -} -@article{Guide2004, -author = {Guide, Buyers and Issue, In This and Exclusives, Web and Paper, Technical}, -journal = {Power Engineering}, -pages = {9--11}, -title = {{Ion Plasma Generator Reduces Wind Turbine Lightning Strikes}}, -volume = {210663}, -year = {2004} -} -@book{Papers, -author = {Papers, V T T Working}, -isbn = {9789513874926}, -title = {{Recommendations for wind energy projects in cold climates}} -} -@article{Danyluk2009, -author = {Danyluk, Ryan}, -journal = {Engineering}, -number = {June}, -title = {{Wind Turbine Blades Master Thesis}}, -year = {2009} -} -@article{Homola2005, -author = {Homola, Matthew Carl}, -journal = {Work}, -number = {November}, -title = {{Impacts and Causes of Icing on Wind Turbines}}, -year = {2005} -} -@book{Report2009, -author = {Report, Annual}, -isbn = {0978638344}, -title = {{IEA WIND ENERGY}}, -year = {2009} -} -@article{Jacob1999, -author = {Jacob, Daniel J}, -journal = {Solutions}, -number = {January}, -title = {{INTRODUCTION TO ATMOSPHERIC CHEMISTRY}}, -year = {1999} -} -@article{Study2009, -author = {Study, Expert Group and Projects, Wind Energy and Climates, Cold}, -journal = {Offshore (Conroe, TX)}, -number = {October}, -title = {{IEA Wind Task 19}}, -year = {2009} -} -@article{Laakso2009, -author = {Laakso, T and Durstewitz, M and Horbaty, R and Lacroix, A and Peltola, E and Ronsten, G and Tallhaug, L and Wallenius, T}, -journal = {Atlantic}, -title = {{State-of-the-art of wind energy in cold climates}}, -year = {2009} -} -@article{For2009, -author = {For, Recommendations}, -journal = {Wind Energy}, -pages = {1--46}, -title = {{RECOMMENDATIONS FOR WIND ENERGY PROJECTS IN COLD CLIMATES Edited by}}, -year = {2009} -} -@article{Seifert, -author = {Seifert, Henry and Westerhellweg, Annette and Kr\"{o}ning, J\"{u}rgen}, -journal = {Boreas}, -number = {April 2003}, -pages = {1--9}, -title = {{Risk analysis of ice throw from wind turbines}} -} -@article{Frohboese2007, -author = {Frohboese, Peter and Anders, Andreas}, -doi = {10.1088/1742-6596/75/1/012061}, -journal = {Business}, -title = {{Effects of Icing on Wind Turbine Fatigue Loads}}, -volume = {012061}, -year = {2007} -} -@article{Durstewitz, -author = {Durstewitz, M and Dobesch, H and Kury, G and Laakso, T and Ronsten, G}, -keywords = {cold climate,downtime,icing,offshore,sensors,wind measurements}, -title = {{European experience with wind turbines in icing conditions}} -} -@article{Turbine2007, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{CLASS IX EMERGING SOLUTIONS FOR IPSs}}, -year = {2007} -} -@article{Turbine2008, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VIII}}, -year = {2008} -} -@article{Turbine2008a, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VI}}, -year = {2008} -} -@article{Of2008, -author = {Of, Modeling and Iced, A N}, -journal = {Database}, -title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VI}}, -year = {2008} -} -@article{Turbine2008b, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{Wind Turbine Ice Prevention Systems Selection and Design CLASS VII IPS - INTRODUCTION IPS - DEFINITIONS The ICING refers to the formation of any type of ice on}}, -year = {2008} -} -@article{Turbine2008c, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{CLASS VI}}, -year = {2008} -} -@article{Turbine2009, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{CLASS II EFFECT OF AIR PRESSURE AND TEMPERATURE ON DESIGN}}, -year = {2009} -} -@article{Turbine2009a, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -number = {June}, -pages = {1--73}, -title = {{Class iii basics on icing for wind turbines}}, -year = {2009} -} -@article{Xii2008, -author = {Xii, Class and Of, Relevance and Prevention, I C E and For, Systems}, -journal = {Wind Energy}, -title = {{Break even analysis for IPS equipped wind turbines RELEVANCE OF ICE PREVENTION SYSTEMS FOR WECS}}, -year = {2008} -} -@article{Turbine2008d, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Engineering}, -title = {{CLASS XI REVIEW OF TECHNICAL SOLUTION IN USE FOR WIND REVIEW OF TECHNICAL SOLUTION IN USE FOR WIND G EXPLOITATION O IN COLD CO CLIMATES CONSEQUENCES OF ICING ON WT - control t l system t CONSEQUENCES OF ICING ON WECs - control t l system t}}, -year = {2008} -} -@article{Turbine2009b, -author = {Turbine, Wind and In, Operations and Climates, Cold}, -journal = {Wind Energy}, -title = {{WIND TURBINE OPERATIONS IN COLD CLIMATES CLASS I WIND ENERGY EXPLOITATION IN COLD CLIMATES}}, -year = {2009} -} -@article{Ing2008, -author = {Ing, Prof and Battisti, Lorenzo}, -journal = {Engineering}, -title = {{CLASS X EXISTING STANDARDS AND RECOMMENDATIONS IEC recommendation for icing conditions}}, -year = {2008} -} -@article{Hotel2001, -author = {Hotel, Le Drift}, -journal = {Power}, -pages = {1--38}, -title = {{Wind Power Systems Compiled by Tracy Dahl}}, -year = {2001} -} -@article{Points, -author = {Points, Credit and St, Structural}, -journal = {Evaluation}, -title = {{Wind Turbine Ice Prevention Systems Selection and Design Given by • Lecture general objectives ( punch lines ) • Lecture organization • Lecture content and details}} -} -@article{Turbine2009c, -author = {Turbine, Wind and Prevention, Ice and Selection, Systems}, -journal = {Database}, -title = {{PROBLEM COMPUTATION OF THE POWER CURVE OF AN ICED}}, -year = {2009} -} -@book{Lindquist2004, -author = {Lindquist, Anna}, -booktitle = {Polar Research}, -isbn = {9197518301}, -title = {{Wind power in Antarctica – a feasibility study for Wasa}}, -year = {2004} -} -@article{Barzanji2008, -author = {Barzanji, Abdulkadir}, -number = {September}, -title = {{Scheme for Installation of Wind Turbines in Small Isolated Power Systems}}, -year = {2008} -} -@article{Dahl, -author = {Dahl, Tracy and Services, C H M Hill Polar}, -journal = {PoLAR}, -title = {{Summit Station Wind Power Pilot Project}} -} -@article{Universitet2009, -author = {Universitet, Danmarks Tekniske}, -title = {{Simulering af energiforsyningen i Sarfannguaq}}, -year = {2009} -} -@article{Garcia2009, -author = {Garc\'{\i}a, Cristina Garc\'{\i}a and Villumsen, Arne}, -journal = {Technology}, -title = {{Heating of Tourist Cottage in the Arctic Supervisor :}}, -year = {2009} -} -@article{Rodr2009, -author = {Rodr, Miguel Goberna}, -number = {July}, -title = {{Energy supply for an Arctic cottage Assaqutaq hybrid system}}, -year = {2009} -} -@article{Testarmata2010, -author = {Testarmata, Margaret}, -journal = {Technology}, -title = {{Performance and Efficiency of a Micro Hybrid Energy System at Assaqutaq , Greenland Technical University of Denmark Arctic Technology Field Course Summer University 2010}}, -year = {2010} -} -@article{Vaillant2009, -author = {Vaillant, Le}, -journal = {Technology}, -title = {{Building Renovation in Assaqutaq}}, -year = {2009} -} -@article{Prof2008, -author = {Prof, Assoc and Hansen, Martin O L}, -journal = {Energy}, -number = {March}, -pages = {1--3}, -title = {{Experience with Wind Turbines in Arctic Environment}}, -year = {2008} -} -@article{Tammelin1998, -author = {Tammelin, B and Cavaliere, M and Holttinen, H and Morgan, C and Seifert, H}, -journal = {Production}, -number = {January 1996}, -pages = {1--38}, -title = {{WIND ENERGY PRODUCTION IN COLD CLIMATE ( WECO )}}, -year = {1998} -} - -@article{Maissan2001, -author = {Maissan, John F and Services, Technical and Corporation, Yukon Energy and Climate, Circumpolar and Summit, Change}, -journal = {October}, -title = {{WIND POWER DEVELOPMENT IN SUB-ARCTIC CONDITIONS WITH SEVERE RIME ICING by}}, -year = {2001} -} -@article{Levinson1999, -author = {Levinson, Laurie H and Potapczuk, Mark G and Mellor, Pamela A}, -number = {January}, -title = {{Software Development Processes Applied to Computational Icing Simulation}}, -year = {1999} -} -@article{Tammelin2001, -author = {Tammelin, Bengt and Seifert, Henry}, -journal = {Boreas}, -keywords = {frost,high terrain,icing,mountains,safety}, -pages = {5--8}, -title = {{Large wind turbines go into cold climate regions}}, -year = {2001} -} -@article{Tammelin1998a, -author = {Tammelin, Bengt}, -journal = {Boreas}, -number = {April}, -pages = {125--132}, -title = {{Icing in europe}}, -year = {1998} -} -@article{Aigoual, -author = {Aigoual, Mont and Aigoual, Mont and Aigoual, Mont}, -title = {{EUMETNET / SWS SITE}} -} -@article{Frohboese2007a, -author = {Frohboese, Peter and Anders, Andreas}, -doi = {10.1088/1742-6596/75/1/012061}, -journal = {Business}, -title = {{Effects of Icing on Wind Turbine Fatigue Loads}}, -volume = {012061}, -year = {2007} -} -@article{Helsinki, -author = {Helsinki, Rovaniemi}, -title = {{EUMETNET SWS II site at Luosto fell in Finland}} -} -@article{Araujo2007, -author = {Ara\'{u}jo, Guilherme and Silvares, Ot\'{a}vio De Mattos and Jorge, Euryale and Jesus, Godoy De and Polit\'{e}cnica, Escola and Paulo, S\~{a}o and Paulo, S\~{a}o}, -doi = {10.2514/1.544}, -journal = {Simulation}, -number = {2}, -title = {{Numerical Simulation of Airfoil Thermal Anti-Ice Operation}}, -volume = {44}, -year = {2007} -} -@article{Peltola2008, -author = {Peltola, Esa}, -journal = {Wind Energy}, -title = {{R \& D and Market Review of Wind Turbines in Cold and Icing Climates}}, -year = {2008} -} -@article{Quality2008, -author = {Quality, Electrical Power and Magazine, Utilization}, -journal = {Power Quality}, -number = {2}, -title = {{Electrical Power Quality \& Utilization Magazine Volume 3 , Issue 2 Grid Connection Requirements for Wind Turbine Systems in selected Countries - Comparison to Turkey EPQU Magazine}}, -volume = {3}, -year = {2008} -} -@article{Chen2001, -author = {Chen, Z and Member, Senior and Spooner, E and Member, Senior}, -journal = {Energy}, -number = {2}, -pages = {148--154}, -title = {{Grid Power Quality with Variable Speed Wind Turbines}}, -volume = {16}, -year = {2001} -} -@article{Thiringer, -author = {Thiringer, T and Hesse, W and Grauers, A and Ottersten, R and Petru, T}, -journal = {Power Engineering}, -title = {{Grid Impact of a 20 kW Variable Speed Wind Turbine}} -} -@article{Standard, -author = {Standard, American National}, -title = {{Agma standarc}}, -volume = {1} -} -@article{Loss, -author = {Loss, C Loss C and Loss, C}, -pages = {1--6}, -title = {{POWER QUALITY ISSUES IN A WIND TURBINE DRIVEN INDUCTION GENERATOR AND}} -} -@article{California, -author = {California, In}, -isbn = {2023832500}, -journal = {Wind Energy}, -title = {{S m al l w i n d}} -} -@article{Free2001, -author = {Free, G N U and License, Documentation}, -number = {c}, -title = {{Wind turbine blade profiles , Scale drawings from Hugh Piggott ’ s " Brakedrum Windmill Plans Year 2000 edition "*}}, -year = {2001} -} -@article{Turbine, -author = {Turbine, Wind}, -title = {{Build Your Own}} -} -@article{Teodoro, -author = {Teodoro, By and Campos, Sanchez and Fernando, Sunith and Piggott, Hugh}, -journal = {Contract}, -title = {{Wind rotor blade construction}} -} -@article{Deluxea, -author = {Deluxe, Picoturbine and Plans, Windmill}, -journal = {Construction}, -title = {{PicoTurbine Deluxe Windmill Plans}} -} -@article{Notes, -author = {Notes, Technical}, -journal = {Notes}, -pages = {1--16}, -title = {{PicoTurbine Windmill Direct Current Experiments}} -} -@article{Notesa, -author = {Notes, Technical}, -journal = {Power}, -pages = {1--28}, -title = {{PicoTurbine Windmill Plans and Experiments}} -} -@article{Sanchez2009, -author = {Sanchez, Justine}, -journal = {Power}, -number = {131}, -title = {{TURBINE What to Know Tracking the Sun}}, -year = {2009} -} -@article{Notesb, -author = {Notes, Technical}, -journal = {October}, -title = {{PicoTurbine 250 Plans Part 1: Blade Design}} -} -@article{Up2007, -author = {Up, Home Sign and Submit, Explore Community}, -journal = {Assembly}, -title = {{Faroun Savonius Wind Turbine}}, -year = {2007} -} -@article{Turbinea, -author = {Turbine, Wind}, -title = {{Build Your Own}} -} -@article{Piggott2001a, -author = {Piggott, Hugh and Electric, Scoraig Wind}, -number = {February}, -pages = {1--49}, -title = {{PMG construction manual}}, -year = {2001} -} -@article{Dellaport2005, -author = {Dellaport, John}, -title = {{Building a Home - Scale Vertical Axis Wind Turbine}}, -year = {2005} -} -@book{Kozlowski2005, -author = {Kozlowski, Jozef A}, -isbn = {0866190627}, -pages = {1--73}, -title = {{Home - English - French - German - Italian - Portuguese - Spanish}}, -year = {2005} -} -@article{Type2006, -author = {Type, Darrieus}, -pages = {1--5}, -title = {{Darrieus Type}}, -year = {2006} -} -@article{Mussell2006, -author = {Mussell, Dave}, -title = {{Wind Turbine}}, -year = {2006} -} -@article{Machine, -author = {Machine, Building A Wind}, -title = {{http://www.HomeBrewPower.co.uk}} -} -@article{Didcot, -author = {Didcot, Chilton and Kingdom, United}, -doi = {10.1106/089270502021455}, -number = {May 2002}, -pages = {267--277}, -title = {{Design, Fatigue Test and NDE of a Sectional Wind Turbine Rotor Blade}}, -volume = {15} -} -@book{Control, -author = {Control, Industrial}, -booktitle = {Engineering}, -isbn = {9781846284922}, -title = {{No Title}} -} -@book{Tom2003, -author = {Tom, A}, -isbn = {9172913061}, -title = {{Modeling of Wind Turbines for Power System Studies Department of Electric Power Engineering}}, -year = {2003} -} -@book{Controla, -author = {Control, Industrial}, -booktitle = {Engineering}, -isbn = {9781846284922}, -title = {{No Title}} -} -@article{Petersson2005, -author = {Petersson, Andreas}, -journal = {Knowledge Creation Diffusion Utilization}, -title = {{Control of a Variable-Speed Pitch-Regulated Wind Turbine}}, -year = {2005} -} -@article{Overview2009, -author = {Overview, Xblade Externals and Generation, Power}, -journal = {Distribution}, -pages = {1--2}, -title = {{Code Name Author Affiliation Language source Source modified Source Description integrated in Xblade executable (*) if not , this means that the external code executable is called as a separate stand-alone *. exe or}}, -year = {2009} -} -@article{Memo2009, -author = {Memo, Internal}, -journal = {Distribution}, -pages = {1--2}, -title = {{B58.5 FAST BHawC comparison Internal Memo E R WP EN 431}}, -year = {2009} -} -@article{Hjort, -author = {Hjort, S\o ren and Laursen, Jesper and Enevoldsen, Peder B}, -journal = {Power}, -title = {{Aerodynamic Winglet Optimization}} -} -@article{Hjorta, -author = {Hjort, S\o ren and Dixon, Kristian and Gineste, Michael and Olsen, Anders S}, -journal = {Design}, -title = {{Fast Prototype Blade Design}} -} -@article{Hjortb, -author = {Hjort, S\o ren}, -journal = {Test}, -number = {00 45}, -pages = {0--8}, -title = {{Noise Optimization of a Siemens Multi-MegaWatt Turbine}} -} -@article{Gibescu2010, -author = {Gibescu, Madeleine and Hendriks, Ralph L}, -journal = {Design}, -pages = {1--22}, -title = {{Why this lecture ?}}, -year = {2010} -} -@article{Bosgra2008, -author = {Bosgra, Okko H}, -journal = {Control}, -title = {{Design Methods for Control Systems}}, -year = {2008} -} -@article{Joosse2010, -author = {Joosse, Peter}, -journal = {Production}, -number = {January}, -title = {{Structural design and production of large rotor blades CTC Customers : Lecture topics â— General introduction}}, -year = {2010} -} -@article{Veldkamp2010, -author = {Veldkamp, Dick}, -journal = {Wind Energy}, -number = {March}, -title = {{27 January 2010 1}}, -year = {2010} -} -@article{Bussel2010, -author = {Bussel, Gerard Van}, -number = {February}, -pages = {1--21}, -title = {{Wind turbine wakes Wakes in windfarms WASP and Windfarmer}}, -year = {2010} -} -@article{Nijssen2010, -author = {Nijssen, Rogier}, -journal = {History}, -title = {{Blade Material Structural Properties Wind turbine Materials \& Constructions}}, -year = {2010} -} -@article{Timmera, -author = {Timmer, Nando}, -journal = {Design}, -pages = {1--64}, -title = {{Wind Turbine Design}} -} -@article{Energye, -author = {Energy, Wind}, -journal = {Design}, -pages = {1--26}, -title = {{Deterministic wind field for load calculations I}} -} -@article{Jong2010, -author = {Jong, Peter De and Otto, Luke}, -journal = {Wind Energy}, -number = {December 2009}, -title = {{Introduction to Wind Energy AE-W02 Assignment 5 : Control}}, -year = {2010} -} -@article{Energyf, -author = {Energy, Wind}, -journal = {Wind Energy}, -title = {{Module 7}} -} -@article{Control2009, -author = {Control, The}, -journal = {Control}, -pages = {1--4}, -title = {{R + G ( s ) G ( s )}}, -year = {2009} -} -@article{Jong2010a, -author = {Jong, Peter De and Otto, Luke}, -journal = {Wind Energy}, -number = {October 2009}, -title = {{Introduction to Wind Energy AE-W02 Assignment 2 : Electrical conversion system}}, -year = {2010} -} -@article{Commission, -author = {Commission, European}, -journal = {Technology}, -title = {{Directorate-General for Energy WIND ENERGY - THE FACTS}}, -volume = {1} -} -@article{Petersen1998, -author = {Petersen, Erik L and Mortensen, Niels G and Landberg, Lars and H\`{u}jstrup, J\`{u}rgen and Frank, Helmut P}, -journal = {Atmospheric Research}, -pages = {55--72}, -title = {{Wind Power Meteorology . Part II : Siting and Models}}, -volume = {72}, -year = {1998} -} -@article{Brande2004, -author = {Brande, Dk-}, -journal = {Wind Energy}, -pages = {1--8}, -title = {{The market for wind turbines is booming. Private investors can share the risks and the profits. But most of the companies are not listed on the stock exchange.The sector is divided into listed and unlisted enterprises, together with subsidiaries of conglomerates.}}, -year = {2004} -} -@article{Petersen1998a, -author = {Petersen, Erik L and Mortensen, Niels G and Landberg, Lars and H\`{u}jstrup, J\`{u}rgen and Frank, Helmut P}, -journal = {Wind Energy}, -pages = {2--22}, -title = {{Wind Power Meteorology . Part I : Climate and Turbulence}}, -volume = {22}, -year = {1998} -} -@article{Monaldo1960, -author = {Monaldo, Frank M and Beal, Robert}, -journal = {Applied Physics}, -pages = {305--320}, -title = {{Chapter 13 . Wind Speed and Direction}}, -year = {1960} -} -@article{Draft2005, -author = {Draft, Final and Standard, International and Final, Projet and Internationale, D E Norme and Voting, Parallel}, -journal = {Terrain}, -title = {88/228/fdis}, -year = {2005} -} -@article{Winda, -author = {Wind, Offshore and Aspects, Farm}, -title = {{Wim Bierbooms}} -} -@article{Heights, -author = {Heights, Design and Load, Extreme}, -journal = {Offshore (Conroe, TX)}, -pages = {1--8}, -title = {{Environmental Loads : Offshore}} -} -@article{Oberink2010, -author = {Oberink, Bart}, -number = {February}, -title = {{Offshore Wind farm project development : finding the optimal development strategy}}, -year = {2010} -} -@article{Bierbooms, -author = {Bierbooms, Wim}, -journal = {Group}, -pages = {1--51}, -title = {{Wind climate}} -} -@article{Design2010, -author = {Design, Overview and Gravity, Monopile and Floating, Tripod Tripile}, -journal = {Source}, -number = {March}, -pages = {1--12}, -title = {{PART I: Introduction Support Structure Design}}, -year = {2010} -} -@article{Diepeveen2010, -author = {Diepeveen, N F B}, -journal = {Offshore (Conroe, TX)}, -title = {{OE5662 Offshore Turbine Selection Review of topics so far What you should have by now : This Lecture : Overview of the Offshore Wind Turbine Market WE Market Shares – Offshore ( > 2001 ) Offshore Wind Turbine Selection Criteria What do we want ? Turbine Selection Criteria • Energy Yield ( of entire wind farm ) Bigger is Better ? • Greater energy yield Overview of Available Turbines • Relatively higher cost of installation}}, -year = {2010} -} -@article{Bussel2010a, -author = {Bussel, Gerard Van}, -journal = {Offshore (Conroe, TX)}, -number = {March}, -pages = {1--33}, -title = {{Operation and Maintenance}}, -year = {2010} -} -@article{Heightsa, -author = {Heights, Design and Load, Extreme}, -journal = {Spectrum}, -pages = {1--7}, -title = {{Environmental Loads : Offshore}} -} -@article{March2010, -author = {March, Segeren and Wind, Offshore and Design, Farm}, -journal = {Offshore (Conroe, TX)}, -title = {{OE5662 – Fabrication}}, -year = {2010} -} -@article{Gibescu2010a, -author = {Gibescu, Madeleine}, -journal = {System}, -pages = {1--18}, -title = {{Electrical Infrastructure Design for Offshore Wind Farms Interconnected power systems Visions for wind power developments in the North Sea Connection solutions for large offshore wind farms Voltage levels in the Dutch system Importance of interconnection capacity for allowing aggregation • A strongly interconnected}}, -year = {2010} -} -@article{Loading, -author = {Loading, Aerodynamic and Loads, Environmental and Loads, Environmental and Forces, Aerodynamic and Loads, Aerodynamic}, -pages = {1--4}, -title = {{Environmental Loads : Offshore Wind Speed Variations in Height}} -} -@article{Not2010, -author = {Not, Links Interactions and Array, London}, -title = {{Design Consideration}}, -year = {2010} -} -@article{Berkel2010, -author = {Berkel, Ed}, -journal = {Change}, -pages = {1--9}, -title = {{Offshore Wind Energy •}}, -year = {2010} -} -@article{Diepeveen2010a, -author = {Diepeveen, N F B}, -journal = {Offshore (Conroe, TX)}, -title = {{OE5662 Offshore Wind Farms Why Offshore Wind ? Nogersund Vindeby Lely Dronten ( Irene Vorrink )}}, -year = {2010} -} -@article{Diepeveen2010b, -author = {Diepeveen, N F B}, -journal = {Offshore (Conroe, TX)}, -title = {{Prerequisites \& Follow-up Course Schedule – Week 1 Course Schedule – Week 2}}, -year = {2010} -} -@article{Barrau, -author = {Barrau, Jean-jacques and Sudre, Michel}, -journal = {Techniques}, -pages = {1--13}, -title = {{Mod\'{e}lisation des structures par \'{e}l\'{e}ments finis}} -} -@article{Solaire2004, -author = {Solaire, Construire}, -pages = {1--3}, -title = {{Construire Solaire Conception et fabrication d ' un capteur exp\'{e}rimental Capteur fabrication}}, -year = {2004} -} -@article{Solaire2004a, -author = {Solaire, Construire}, -pages = {1--3}, -title = {{Construire Solaire Conception et fabrication d ' un capteur exp\'{e}rimental Capteur fabrication}}, -year = {2004} -} -@article{Courbon, -author = {Courbon, Jean}, -journal = {Techniques}, -pages = {1--33}, -title = {{Calcul des structures Voiles minces}} -} -@article{Generators2001, -author = {Generators, Asynchronous and States, United and States, United and Systems, Wind Energy and Johnson, Gary L}, -journal = {Wind Energy}, -pages = {1--44}, -title = {{WIND TURBINES WITH ASYNCHRONOUS}}, -year = {2001} -} -@article{Vermeer2003a, -author = {Vermeer, L J and S, J N and Crespo, A}, -doi = {10.1016/S0376-0421(03)00078-2}, -journal = {Progress in Aerospace Sciences}, -pages = {467--510}, -title = {{Wind turbine wake aerodynamics}}, -volume = {39}, -year = {2003} -} -@article{Miller2003, -author = {Miller, Nicholas W and Price, William W and Sanchez-gasca, Juan J}, -journal = {October}, -title = {{Dynamic Modeling of GE 1 . 5 and Prepared by :}}, -year = {2003} -} -@article{Rasila2003, -author = {Rasila, Mika}, -journal = {Power Engineering}, -title = {{Torque- and Speed Control of a Pitch Regulated Wind Turbine}}, -year = {2003} -} -@article{Schreiber2001, -author = {Schreiber, Dejan}, -journal = {Power}, -keywords = {igbt,power electronics,wind power}, -title = {{State of the Art of Variable Speed Wind Turbines}}, -year = {2001} -} -@article{Di, -author = {Di, By and Meschik, Martin}, -title = {{Savonius turbine with synchron generator using parts from old computers ( for education in technical schools ) Adapting the “ floppy generator â€}} -} -@article{Erdman, -author = {Erdman, W and Behnke, M Benhke and Engineering, Whitaker B E W and Ramon, San}, -journal = {Contract}, -keywords = {COE,NREL/SR-500-38686,November 2005,cost of energy,low wind speed,low wind speed turbine project,variable speed,wind energy,wind turbines}, -title = {{Low Wind Speed Turbine Project Phase II: The Application of Medium-Voltage Electrical Apparatus to the Class of Variable Speed Multi-Megawatt Low Wind Speed Turbines; 15 June 2004--30 April 2005}} -} -@article{Muljadi1998, -author = {Muljadi, E and Pierce, K and Migliore, P}, -journal = {Power}, -number = {April}, -title = {{Control Strategy for Variable-Speed , Stall-Regulated Wind Turbines}}, -year = {1998} -} -@article{Rahimp1995, -author = {Rahimp, M T B and Allet, A and Paraschivoiu, I}, -journal = {Machinery}, -keywords = {advanced technology,aerodynamics,as a result,atmospheric turbulence,come an important commercial,dynamic stall,navier-stokes equations,option for large-,scale power production,there are now more,wind turbine has be-,wind turbines}, -number = {1}, -pages = {15--21}, -title = {{Aerodynamic Analysis Models for Vertical-Axis Wind Turbines}}, -volume = {2}, -year = {1995} -} -@article{Muller2000, -author = {M\"{u}ller, S and Deicke, M and Ieee, Member}, -isbn = {078036404X}, -journal = {System}, -number = {C}, -pages = {4--9}, -title = {{Adjustable Speed Generators for Wind Turbines based on Doubly-fed Induction Machines and 4-Quadrant IGBT Converters Linked to the Rotor}}, -volume = {00}, -year = {2000} -} -@article{Code2006, -author = {Code, Price}, -journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, -title = {{INTERNATIONAL STANDARD}}, -year = {2006} -} -@article{Wind2002a, -author = {Wind, Gamesa and Aps, Engineering}, -journal = {Wind Engineering}, -title = {{COPYRIGHT © Danish Standards . NOT FOR COMMERCIAL USE OR REPRODUCTION Elproducerende vindm\o ller – Del 23 : Strukturpr\o vning i fuld skala af rotorblade Wind turbine generator systems – Part 23 : Full-scale structural testing of rotor blades Deskriptorer :}}, -year = {2002} -} -@article{Norm2002, -author = {Norm, Deutsche}, -journal = {Informationstechnik}, -number = {0127005}, -title = {{En 61400-21}}, -volume = {21}, -year = {2002} -} -@article{Ag, -author = {Ag, Kisssoft}, -pages = {1--60}, -title = {{Wind turbine gearboxes Gear analysis for the gear buyer}} -} -@article{Installation2004, -author = {Installation, First}, -title = {{DERMOND WIND TURBINE}}, -year = {2004} -} -@article{Buhl1998, -author = {Buhl, Marshall L and Wright, Alan D and Tangler, James L}, -journal = {Wind Energy}, -number = {December 1997}, -title = {{W IND T URBINE D ESIGN C ODES : A P RELIMINARY C OMPARISON OF THE A ERODYNAMICS}}, -year = {1998} -} -@article{Savage2006, -author = {Savage, Dave}, -journal = {Administrator}, -title = {{Final Report - 2006 Minnesota Wind Integration Study}}, -volume = {I}, -year = {2006} -} -@article{Minnesota2006, -author = {Minnesota, The and Utilities, Public}, -journal = {Administrator}, -number = {651}, -title = {{Final Report - 2006 Minnesota Wind Integration Study}}, -volume = {II}, -year = {2006} -} -@article{Smith, -author = {Smith, J Charles and Demeo, Edgar A and Parsons, Brian}, -journal = {Group}, -number = {303}, -title = {{WIND POWER IMPACTS ON ELECTRIC POWER SYSTEM OPERATING COSTS : SUMMARY AND PERSPECTIVE ON WORK TO DATE}}, -volume = {80401} -} -@article{Committee2005, -author = {Committee, Development and Meeting, Luncheon}, -journal = {Development}, -title = {{Outline for Today}}, -year = {2005} -} -@article{Holland2006, -author = {Holland, In}, -journal = {Wind Energy}, -pages = {26--27}, -title = {{The sun makes the wind blow.}}, -year = {2006} -} -@article{Margolick2003, -author = {Margolick, Michael and Kun, Nai and Development, Wind}, -journal = {East Asia}, -title = {{Wind energy Technology trends and applications in East Asia Mayflower – Offshore turbine installation vessel}}, -year = {2003} -} -@article{Justus2005, -author = {Justus, Debra and Co-operation, Organisation Economic}, -journal = {Wind Energy}, -title = {{OECD ENVIRONMENT DIRECTORATE INTERNATIONAL ENERGY AGENCY INTERNATIONAL ENERGY TECHNOLOGY Case Study 5 : Wind Power Integration into Electricity Systems}}, -year = {2005} -} -@article{Barsoor, -author = {Barsoor, The and Drdo, At Girola and Drdo, Girola and Svc, Mvar and The, V}, -title = {{1. Introduction}} -} -@article{Flowers2006, -author = {Flowers, Larry}, -journal = {Energy}, -title = {{Wind Energy Update Capacity \& Cost Trends People Want Renewable Energy !}}, -year = {2006} -} -@article{Smitha, -author = {Smith, Paul}, -title = {{Assessing the Impact of Wind Generation on Power System Stability}} -} -@article{Jenkins2006, -author = {Jenkins, Prof Nick and Strbac, Prof Goran and Thornley, Vincent}, -journal = {Energy}, -pages = {1--32}, -title = {{Integration of renewable energy into electric power systems}}, -year = {2006} -} -@article{Sasse, -author = {Sasse, Christian and Manager, General}, -journal = {Technology}, -title = {{No Title}} -} -@article{Farmer2001, -author = {Farmer, Richard G}, -journal = {System}, -title = {{Dynamics and Stability}}, -year = {2001} -} -@article{Course, -author = {Course, Web}, -journal = {Science}, -number = {2}, -title = {{Sample Questions}}, -volume = {1} -} -@article{Systems2007, -author = {Systems, Non-conventional Energy}, -journal = {Science}, -title = {{Syllabus for this chapter 1.}}, -year = {2007} -} -@article{Pacific, -author = {Pacific, Asia and Flats, Kentish}, -journal = {Middle East}, -title = {{VestasGlobal}} -} -@article{Erdman2006, -author = {Erdman, William L and Ramo, San}, -journal = {Offshore (Conroe, TX)}, -title = {{Reductions in the Cost Wind Generated Electricity : The Role of Power Conversion Systems California ’ s Wind Rush of 1980 ’ s}}, -year = {2006} -} -@article{Market, -author = {Market, National Electricity and Limited, Management Company}, -journal = {Power}, -title = {{Assessment of Potential Security Risks due to High Levels of Wind Generation in South Australia - Summary of DIgSILENT Studies ( Stage1 )}} -} -@article{Windb, -author = {Wind, Federal}, -journal = {Secretary}, -title = {{No Title}} -} -@article{Juan, -author = {Juan, M}, -journal = {Wind Energy}, -keywords = {chord and twist distributions,computational fluid dynamics,energy systems,evolutionary algorithms,genetic algorithms,in wind,method to obtain optimal,optimal design,the distributions are computed,this paper shows a,to maxi-,turbine blades by using,wind power}, -title = {{Wind blade chord and twist angle optimization by using genetic algorithms}} -} -@book{Stenberg2009, -author = {Stenberg, Anders and Holttinen, Hannele}, -isbn = {9789513874865}, -keywords = {Wind energy, wind power, power production, statistics, production statistics, failures}, -title = {{Tuulivoiman tuotantotilastot}}, -year = {2009} -} -@article{Bell2007, -author = {Bell, M J and Republic, Slovak and Feitosa, E A and Republic, Slovak and Republic, Czech and Republic, Slovak and Troen, I and Frandsen, S and Landberg, L and Rathmann, O and Authority, Energy and Authority, Egyptian Meteorological}, -isbn = {8755021433}, -journal = {Wind Energy}, -title = {{Wind Atlases of the World}}, -year = {2007} -} -@article{Shen2009, -author = {Shen, Wen Zhong and Hansen, Martin O L and S\o rensen, Jens N\o rk\ae r}, -doi = {10.1002/we}, -keywords = {airfoil,characteristics,wind}, -number = {May 2008}, -pages = {91--98}, -title = {{on Rotor Blades}}, -year = {2009} -} -@article{Xudong2009, -author = {Xudong, Wang and Shen, Wen Zhong and Zhu, Wei Jun and Jin, Chen}, -doi = {10.1002/we}, -journal = {Optimization}, -number = {April}, -pages = {781--803}, -title = {{Shape Optimization of Wind Turbine Blades}}, -year = {2009} -} -@book{Holttinen2008, -author = {Holttinen, Hannele}, -isbn = {9789513871673}, -keywords = {wind energy, wind power, power production, statistics, production statistics, failures}, -title = {{Tuulivoiman tuotantotilastot Vuosiraportti 2007}}, -year = {2008} -} -@article{Okulov2008b, -author = {Okulov, Valery L and S\o rensen, Jens N and Engineering, Mechanical}, -doi = {10.1002/we}, -journal = {Bernoulli}, -keywords = {betz limit,turbine,wind}, -number = {April}, -pages = {415--426}, -title = {{Finite Number of Blades}}, -year = {2008} -} -@article{Sant2009, -author = {Sant, Tonio and Kuik, Gijs Van and Bussel, G J W Van}, -doi = {10.1002/we}, -keywords = {wind}, -number = {April 2006}, -pages = {1--32}, -title = {{Blade Pressure Measurements on a Free Wake Vortex Model : Yawed Conditions}}, -year = {2009} -} -@article{Office, -author = {Office, Paris}, -journal = {Area}, -title = {{National advisory committee foe aj3ronau’jncs. on the elementary relation betw3en pitch, slip, and propul9tion efficiency.}} -} -@article{Fluides, -author = {Fluides, Mecanique D E S}, -pages = {1--14}, -title = {{Physique de Laboratoire et Proc\'{e}d\'{e}s Industriels}} -} -@article{Niepraschk2008, -author = {Niepraschk, Rolf}, -pages = {1--19}, -title = {{The pst-pdf package ∗}}, -year = {2008} -} - - - -@article{Aslaksen2010, -author = {Aslaksen, Helmer}, -journal = {I Can}, -pages = {1--19}, -title = {{Various TEX tricks}}, -year = {2010} -} -@article{Robertson2009, -author = {Robertson, Will and Gro\ss e, Johannes}, -pages = {1--10}, -title = {{The auto-pst-pdf package}}, -year = {2009} -} -@article{Tobias2004, -author = {Tobias, N}, -title = {{Short introduction to PSTricks}}, -year = {2004} -} -@article{Sørensen2009, -author = {S\o rensen, Jens N\o rk\ae r and Kuik, Gijs Van}, -journal = {Power}, -number = {October}, -pages = {1978--1979}, -title = {{Actuator disc momentum theory for low lambda rotors}}, -year = {2009} -} -@article{Kuik2009, -author = {Kuik, G. A. M. Van and Zuylen, A H Van}, -journal = {Interpretation A Journal Of Bible And Theology}, -number = {October}, -pages = {26--28}, -title = {{On actuator disc force fields generating wake vorticity}}, -year = {2009} -} -@article{Nrel2008, -author = {Nrel, S Schreck}, -journal = {Renewable Energy}, -keywords = {December 2008,Horizontal axis wind turbines,International Energy Agency Wind Annex XX research results,NREL/TP-500-43508,wind turbine aerodynamics}, -number = {December}, -title = {{December 2008 IEA Wind Annex XX HAWT Aerodynamics and Models Final Report}}, -year = {2008} -} -@book{Frandsen2007, -author = {Frandsen, Sten}, -isbn = {8755034586}, -number = {January}, -title = {{Turbulence and turbulence- generated structural loading in wind turbine clusters}}, -volume = {1188}, -year = {2007} -} -@article{Okulov2008c, -author = {Okulov, V L and S\o rensen, J N}, -doi = {10.1134/S1028335808060128}, -isbn = {1028335808060}, -journal = {Text}, -number = {6}, -pages = {478--483}, -title = {{An Ideal Wind Turbine with a Finite Number of Blades}}, -volume = {53}, -year = {2008} -} -@article{Battisti2007, -author = {Battisti, L and Soraperra, G and Fedrizzi, R and Zanne, L}, -doi = {10.1088/1742-6596/75/1/012013}, -pages = {1--14}, -title = {{Inverse design-momentum , a method for the preliminary design of horizontal axis wind turbines}}, -volume = {75}, -year = {2007} -} -@article{Of2004, -author = {Of, Epartment and For, Nstitute and In, Eport and Of, Ulfilment and Requirements, T H E and The, O F}, -title = {{A F UNCTIONAL R E - EXAMINATION OF}}, -year = {2004} -} -@article{Kelley1999, -author = {Kelley, Neil D}, -journal = {Design}, -number = {July}, -title = {{A Case for Including Atmospheric Thermodynamic Variables in Wind Turbine Fatigue Loading Parameter Identification}}, -year = {1999} -} -@book{Mattingly1801, -author = {Mattingly, Jack D and Heiser, William H and Pratt, David T}, -booktitle = {Springs}, -isbn = {1563475383}, -title = {{Second Edition dA- \~{} A4-}}, -year = {1801} -} -@article{Shen2009a, -author = {Shen, Wen Zhong and Zhang, Jian Hui}, -doi = {10.1115/1.3027502}, -journal = {Journal of Solar Energy Engineering}, -number = {February}, -pages = {1--9}, -title = {{The Actuator Surface Model : A New Navier – Stokes Based}}, -volume = {131}, -year = {2009} -} -@book{Faculty2007, -author = {Faculty, Mechanical Engineering}, -isbn = {9789993204831}, -title = {{Improving BEM †based Aerodynamic Models in Wind Turbine Design Codes Improving BEM †based Aerodynamic Models Tonio Sant Tonio Sant Improving BEM-based Aerodynamic Models in Wind Turbine Design Codes}}, -year = {2007} -} -@article{Akay, -author = {Akay, B and Sim, C}, -title = {{Experimental and Numerical Investigation of the Effect of Rotor Blockage on Wake Expansion}} -} -@article{Desmet2001, -author = {Desmet, M B and Billard, M J Y and Rey, M R and Caignaert, M G and Bakir, M F}, -title = {{\'{E}COLE NATIONALE SUP\'{E}RIEURE D ’ ARTS ET M\'{E}TIERS CENTRE DE PARIS MODELISATION EN REGIME NOMINAL ET PARTIEL DE L ’ ECOULEMENT M\'{E}RIDIEN DANS LES TURBOMACHINES}}, -year = {2001} -} -@article{Dixon, -author = {Dixon, S L}, -title = {{Fluid Mechanics , Thermodynamics of Turbomachinery}} -} -@article{Vogt2007, -author = {Vogt, Damian}, -journal = {Control}, -pages = {1--7}, -title = {{Review of Basic Laws of Turbomachinery Turbomachine System Discretization}}, -year = {2007} -} -@article{Droits2007, -author = {Droits, Tous and Le, I E}, -title = {{Technique 2007 © 2001/2006,}}, -year = {2007} -} -@article{Gte, -author = {Gte, I U T}, -pages = {1--28}, -title = {{IUT GTE}} -} -@article{Cace, -author = {Cace, Jadranka and Horst, Emil and Syngellakis, Katerina and Power, I T and Niel, Ma\'{\i}te and Clement, Patrick and Heppener, Renate}, -journal = {Power}, -title = {{URBAN WIND TURBINES Wind Energy Integration in the Urban Environment}} -} -@article{Services, -author = {Services, Industrial and Energy, I Wind}, -title = {{Store of Power Ja \~{} od to aaols}} -} -@article{Sutherland2004, -author = {Sutherland, Herbert J and Mandell, John F}, -journal = {Science}, -keywords = {2,and a three-parameter model,blades,doe fatigue data base,fatigue,fiberglass,formulation uses the msu,spectral,their,to describe the mean,turbine blades,typically used in wind,wind}, -pages = {546--555}, -title = {{The Effect of Mean Stress on Damage Predictions for Spectral Loading of Fiberglass Composite Coupons 1 Abstract :}}, -year = {2004} -} -@article{Ashwill2007, -author = {Ashwill, Tom and Kanaby, Gary}, -title = {{Sweep-Twist Adaptive Blade}}, -year = {2007} -} -@article{Ashwill2007a, -author = {Ashwill, Thomas D and Paquette, Joshua A}, -journal = {Wind Energy}, -keywords = {carbon fiber composites,epoxy,evaluation,failure criteria,failure mechanisms,fatigue,glass fiber composites,materials,polyester,prepreg materials,prepreg properties,resins,resistance,testing,vinyl ester,wind turbine blade}, -number = {March}, -pages = {1--25}, -title = {{COMPOSITE MATERIALS FOR INNOVATIVE WIND TURBINE BLADES *}}, -year = {2007} -} -@article{Rumsey, -author = {Rumsey, Mark A and Paquette, Joshua A}, -isbn = {5058443910}, -journal = {Test}, -keywords = {1,244 megawatts,5,acoustic emission,and injected an investment,expanded the nation,fatigue testing,generating capacity by 45,in 2007,in a single calendar,in the united states,macro-fiber composite,mw,of electric generation from,s total wind power,state of wind energy,technology,this,wind energy was installed,wind turbine blades,year}, -title = {{Structural Health Monitoring of Wind Turbine Blades *}} -} -@article{Mandell, -author = {Mandell, John F and Samborsky, Daniel D and Wahl, Neil K and Sutherland, Herbert J}, -journal = {Analysis}, -title = {{Testing and Analysis of Low Cost Composite Materials Under Spectrum Loading and High Cycle Fatigue Conditions}} -} -@article{Sutherland, -author = {Sutherland, Herbert J and Mandell, John F}, -journal = {Cycle}, -pages = {1--12}, -title = {{UPDATED GOODMAN DIAGRAMS FOR FIBERGLASS COMPOSITE MATERIALS USING THE DOE / MSU FATIGUE DATABASE by}} -} -@article{Sutherland1994, -author = {Sutherland, Herbert J}, -journal = {Wind Energy}, -number = {April}, -pages = {1--6}, -title = {{FATIGUE CASE STUDY AND LOADING SPECTRA FOR WIND TURBINES * STUDY : TURBINES FATIGUE OF Example Problem for the Case Study}}, -year = {1994} -} -@article{Box2003, -author = {Box, P O and Ne, Lakeview}, -journal = {Data Processing}, -number = {February}, -title = {{Sandia National Laboratories New Mexico Wind Resource Assessment Lee Ranch Data Summary and Transmittal for September – December 2002 Annual Analysis for January – December 2002 Prepared for : Sandia National Laboratories Prepared by : Global Energy Concepts , LLC}}, -year = {2003} -} -@article{Sutherland1996, -author = {Sutherland, Herbert J}, -journal = {Wind Energy}, -pages = {1--8}, -title = {{DAMAGE ESTIMATES FOR EUROPEAN AND U . S . SITES USING THE U . S . HIGH-CYCLE FATIGUE DATA BASE}}, -year = {1996} -} -@article{Berg, -author = {Berg, Dale E and Wilson, David G and Barone, Matthew F and Resor, Brian R and Berg, Jonathan C and Paquette, Joshua A and Zayas, Jose R}, -journal = {Wind Energy}, -title = {{The Impact of Active Aerodynamic Load Control on Fatigue and Energy Capture at Low Wind Speed Sites *}} -} -@article{Mandell1999, -author = {Mandell, John F and Samborsky, Daniel D}, -journal = {Database}, -keywords = {0,and c,b is then the,close to 1,composites,data bases,fatigue,fatigue coefficient,fiber reinforced plastics,frp,s-n curve,slope of the,termed the,the log-log,the single-cycle ultimate strength,typically has a value,where $\sigma$ o is}, -title = {{Presented at 1999 EWEC Effects of Materials Parameters and Design Details on the Fatigue of Composite Materials for Wind Turbine Blades}}, -year = {1999} -} -@article{Lobitz1984, -author = {Lobitz, Don W}, -journal = {Energy}, -number = {May}, -title = {{A Nastran-Based Computer Program For Structural Dynamic Analysis Of Horizontal Axis Wind Turbines *}}, -year = {1984} -} -@article{Lobitz, -author = {Lobitz, Don W}, -journal = {Wind Energy}, -pages = {1--10}, -title = {{Parameter Sensitivities Affecting the Flutter Speed of a MW-Sized Blade}} -} -@article{Veers1995, -author = {Veers, Paul S}, -journal = {Wind Energy}, -title = {{ALL WIND FARM UNCERTAINTY IS NOT THE SAME : THE ECONOMICS OF COMMON VERSUS INDEPENDENT CAUSES *}}, -year = {1995} -} -@article{Ashwill2006, -author = {Ashwill, Tom}, -journal = {Baseline}, -number = {June}, -pages = {1--12}, -title = {{Blade Technology Innovations for Utility-Scale Turbines}}, -year = {2006} -} -@article{Lobitza, -author = {Lobitz, Don W}, -journal = {Analysis}, -title = {{Flutter Speed Predictions for MW-Sized Wind Turbine Blades}} -} -@article{Paquette, -author = {Paquette, J A}, -journal = {Test}, -keywords = {acoustic emissions,carbon fiber,evaluated in this program,flat-back airfoils,including a passive twist-,structural testing,were constructed and,while three blade designs,wind turbine blade}, -title = {{Increased Strength in Wind Turbine Blades through Innovative Structural Design * Abstract :}} -} -@article{Veers1998, -author = {Veers, Paul and Laboratories, Sandia National and Bir, Gunjit and Renewable, National and Wind, National and Lobitz, Donald and Laboratories, Sandia National}, -journal = {Wind Energy}, -number = {1981}, -title = {{AEROELASTIC TAILORING IN WIND-TURBINE BLADE APPLICATIONS}}, -year = {1998} -} -@article{Sutherland1995, -author = {Sutherland, H J}, -title = {{ENVIRONMENTS}}, -year = {1995} -} -@article{Wilson2009, -author = {Wilson, David G and Berg, Dale E and Resor, Brian R and Barone, Matthew F and Berg, Jonathan C and National, Sandia and Box, Laboratories P O}, -journal = {Fluid Dynamics}, -keywords = {active aerodynamic,independent pitch control,trailing edge devices,wind turbine control}, -pages = {1--12}, -title = {{Combined Individual Pitch Control and Active Aerodynamic Load Controller Investigation for the 5MW UpWind Turbine}}, -year = {2009} -} -@article{Sutherland1992, -author = {Sutherland, Herbert J and Osgood, Richard M}, -journal = {Energy}, -pages = {1--8}, -title = {{Proceedings of WindPower 92, AWEA, Washington, D.C., 1992.}}, -year = {1992} -} -@article{Berga, -author = {Berg, Dale E and Wilson, David G and Resor, Brian R and Barone, Matthew F and Berg, Jon C and Kota, Sridhar and Ervin, Gregory and Arbor, Ann}, -journal = {Baseline}, -pages = {1--12}, -title = {{Active Aerodynamic Blade Load Control Impacts on Utility-Scale Wind}} -} -@article{Berg2008, -author = {Berg, Dale E and Barone, Matthew}, -journal = {Test}, -pages = {4--13}, -title = {{Aerodynamic and Aeroacoustic Properties of a Flatback Airfoil ( Will it Rumble or Whisper ?)}}, -year = {2008} -} -@article{Wilson2008, -author = {Wilson, David G and Berg, Dale E and Lobitz, Don W and Zayas, Jose R and Laboratories, Sandia National and Box, P O}, -journal = {Wind Energy}, -keywords = {fatigue load reduction,trailing edge microtabs,wind turbine control}, -pages = {1--7}, -title = {{Optimized Active Aerodynamic Blade Control for Load Alleviation on Large Wind Turbines}}, -year = {2008} -} -@article{Sutherland1998, -author = {Sutherland, Herbert J and Carlin, Palmer W}, -journal = {Power}, -title = {{AIAA-98-0064 DAMAGE MEASUREMENTS ON THE NWTC DIRECT-DRIVE ,}}, -year = {1998} -} -@article{Metzinger, -author = {Metzinger, K E and Guess, T R and Laboratories, Sandia National}, -pages = {1--10}, -title = {{Aiaa 98-0063}} -} -@article{Metzingera, -author = {Metzinger, K E and Guess, T R}, -journal = {Composites Technology}, -pages = {1--9}, -title = {{HOW GEOMETRIC DETAILS CAN AFFECT THE STRENGTH OF ADHESIVE LAP JOINTS}} -} -@article{Kelley1997, -author = {Kelley, Neil D and Sutherland, Herbert J}, -journal = {Wind Energy}, -pages = {1--10}, -title = {{DAMAGE ESTIMATES FROM LONG-TERM STRUCTURAL ANALYSIS OF A WIND TURBINE IN A U . S . WIND FARM ENVIRONMENT *†}}, -year = {1997} -} -@article{Berg1989, -author = {Berg, D E and Iuimas, P C}, -journal = {Wind Energy}, -number = {January}, -title = {{OF A VAWT BLADE MATERIAL *}}, -year = {1989} -} -@article{Lobitzb, -author = {Lobitz, Don W and Laino, David J}, -title = {{No Title}} -} -@article{Sutherland1996a, -author = {Sutherland, Herbert J and Mandell, John F}, -journal = {Chemical Engineering}, -number = {1992}, -title = {{APPLICATION OF THE U . S . HIGH CYCLE FATIGUE DATA BASE TO WIND TURBINE BLADE LIFETIME PREDICTIONS}}, -year = {1996} -} -@article{Lobitzc, -author = {Lobitz, Don W and Veers, Paul S}, -pages = {1--9}, -title = {{AEROELASTIC BEHAVIOR OF TWIST-COUPLED HAWT BLADES}} -} -@article{Lobitz1987, -author = {Lobitz, D W and Veers, P S and Laboratories, Sandia National and Migliore, P G and Renewable, National}, -journal = {Renewable Energy}, -title = {{Enhanced Performance of HAWTs Using Adaptive Blades}}, -year = {1987} -} -@article{Sutherland1995a, -author = {Sutherland, Herbert J and Burwinkle, Daniel P}, -journal = {Wind Energy}, -pages = {91--97}, -title = {{THE SPECTRAL CONTENT OF THE TORQUE LOADS ON A TURBINE GEAR TOOTH 1 University of New Mexico}}, -volume = {16}, -year = {1995} -} -@article{Veers1997, -author = {Veers, Paul S and Winterstein, Steven R}, -journal = {Wind Energy}, -pages = {1--10}, -title = {{APPLICATION OF MEASURED LOADS TO WIND TURBINE FATIGUE AND RELIABILITY ANALYSIS *}}, -year = {1997} -} -@article{Sutherland1995b, -author = {Sutherland, Herbert J and Veers, Paul S}, -journal = {Wind Energy}, -pages = {83--90}, -title = {{ON FATIGUE LIFE PREDICTIONS 1}}, -volume = {16}, -year = {1995} -} -@article{Sutherland2000, -author = {Sutherland, Herbert J and Veers, Paul S}, -pages = {1--11}, -title = {{The development of confidence limits for fatigue strength data *†}}, -year = {2000} -} -@article{Laird, -author = {Laird, Daniel L and Carne, Thomas G}, -journal = {Contract}, -title = {{ESTIMATION OF UNCERTAIN MATERIAL PARAMETERS AIAA-98-0049}} -} -@article{Berg2002, -author = {Berg, Dale E and Zayas, Jose R}, -journal = {Wind Energy}, -pages = {1--12}, -title = {{Aerodynamic and Aeroacoustic Properties of Flatback Airfoils}}, -year = {2002} -} -@article{Ochs1996, -author = {Ochs, Stuart S}, -journal = {Engineering Sciences}, -pages = {1--8}, -title = {{CFD Calculations of S809}}, -year = {1996} -} -@article{Bergb, -author = {Berg, Dale E and Zayas, Jose R}, -journal = {Wind Energy}, -title = {{Aerodynamic and Aeroacoustic Properties of Flatback Airfoils}} -} -@article{Blades, -author = {Blades, Wind Turbine and Rumsey, Mark A and Paquette, Joshua and Beattie, Alan G}, -journal = {Design Engineering}, -pages = {1--14}, -title = {{Experimental Results of Structural Health Monitoring of}} -} -@article{Paquette2002, -author = {Paquette, Joshua and Dam, Jeroen Van and Hughes, Scott and Assisted, Vacuum and Transfer, Resin and Laboratories, Sandia National and Wind, National and Pressure, High and Pressure, Low and Introduction, I and Engineering, Dynamic Design}, -journal = {Contract}, -number = {425}, -pages = {1--11}, -title = {{Structural Testing of 9 m Carbon Fiber Wind Turbine Research Blades *}}, -year = {2002} -} -@article{Ashwill2007b, -author = {Ashwill, Thomas and Laird, Daniel}, -journal = {Wind Energy}, -number = {January}, -pages = {1--13}, -title = {{Concepts to Facilitate Very Large Blades}}, -year = {2007} -} -@article{Paquette2005, -author = {Paquette, Joshua and Laird, Daniel and Griffith, D Todd and Rip, Laura and Laboratories, Sandia National and Renewable, National and Concepts, Global Energy and Function, Frequency Response and Analysis, Finite Element and Renewable, National}, -journal = {Renewable Energy}, -pages = {1--13}, -title = {{Modeling and Testing of 9m Research Blades *}}, -year = {2005} -} -@article{Sutherland2004a, -author = {Sutherland, Herbert J and Mandell, John F}, -journal = {Wind Energy}, -pages = {1--13}, -title = {{EFFECT OF MEAN STRESS ON THE DAMAGE OF WIND TURBINE BLADES *† R =}}, -year = {2004} -} -@article{Nelson2003, -author = {Nelson, Luke D and Manuel, Lance and Sutherland, Herbert J and Veers, Paul S}, -journal = {Renewable Energy}, -title = {{STATISTICAL ANALYSIS OF INFLOW AND STRUCTURAL RESPONSE DATA FROM THE LIST PROGRAM *†}}, -year = {2003} -} -@article{Malcolm2003, -author = {Malcolm, David J and Laird, Daniel L}, -journal = {Energy}, -title = {{Modeling of blades as equivalent beams for aeroelastic analysis by Abstract Introduction}}, -year = {2003} -} -@article{Pandey2003, -author = {Pandey, M D}, -journal = {Renewable Energy}, -title = {{PROBABILISTIC ANALYSIS OF LIST DATA FOR THE ESTIMATION OF EXTREME DESIGN LOADS FOR WIND TURBINE COMPONENTS *†}}, -year = {2003} -} -@article{Veers2001, -author = {Veers, Paul S}, -journal = {Wind Energy}, -pages = {1--12}, -title = {{PARAMETRIC MODELS FOR ESTIMATING WIND TURBINE FATIGUE LOADS FOR DESIGN}}, -year = {2001} -} -@article{Sutherland2003, -author = {Sutherland, Herbert J and Kelley, Neil D and Hand, M Maureen}, -journal = {Renewable Energy}, -title = {{INFLOW AND FATIGUE RESPONSE OF THE NWTC ADVANCED}}, -year = {2003} -} -@article{Griffin2003, -author = {Griffin, Dayton A and Ne, Lakeview Drive}, -journal = {Wind Energy}, -pages = {1--11}, -title = {{No Title}}, -year = {2003} -} -@article{Fitzwater2001, -author = {Fitzwater, Leroy M and Winterstein, Steven R}, -journal = {Environmental Engineering}, -pages = {1--11}, -title = {{PREDICTING DESIGN WIND TURBINE LOADS FROM LIMITED DATA : COMPARING RANDOM PROCESS AND RANDOM PEAK MODELS}}, -year = {2001} -} -@article{Ashwill2012, -author = {Ashwill, Thomas D}, -journal = {Wind Energy}, -pages = {1--20}, -title = {{Materials and Innovations for Large Blade Structures : Research Opportunities in Wind Energy Technology}}, -year = {2012} -} -@article{Butterfield2001, -author = {Butterfield, Sandy}, -journal = {Design}, -title = {{Extreme Load Estimation for Wind Turbines : Issues and Opportunities for Improved Practice}}, -year = {2001} -} -@article{Doren1999, -author = {Doren, Neal E}, -journal = {October}, -number = {October}, -title = {{Sandia National laboratories}}, -year = {1999} -} -@article{Tsai1999, -author = {Tsai, Stephen W}, -journal = {Distribution}, -number = {June}, -title = {{Bend-Twist D-spar @ I}}, -year = {1999} -} -@article{Gross, -author = {Gross, Erik and Zadoks, Rick I}, -journal = {Techniques}, -pages = {1--6}, -title = {{ALAA 99-0047 Application of Damage Detection Techniques using Wind Turbine Modal Data *}} -} -@article{Government2010, -author = {Government, U S}, -journal = {Database}, -title = {{DOE / MSU COMPOSITE MATERIAL FATIGUE DATABASE}}, -year = {2010} -} -@article{Eisler1998, -author = {Eisler, G Richard and Veers, Paul S}, -journal = {Wind Energy}, -number = {December}, -title = {a}, -year = {1998} -} -@article{Government2009, -author = {Government, U S}, -journal = {Database}, -title = {{DOE / MSU COMPOSITE MATERIAL FATIGUE DATABASE}}, -year = {2009} -} -@article{Mandell1997, -author = {Mandell, John F and Samborsky, Daniel D}, -journal = {Chemical Engineering}, -number = {December}, -title = {{DOE / MSU Composite Material Fatigue Database : Test Methods , Materials , and Analysis}}, -year = {1997} -} -@article{Rumseya, -author = {Rumsey, Mark and Gross, Erik}, -pages = {1--10}, -title = {{AIAA 98-0048}} -} -@article{Lange1996, -author = {Lange, Clifford H}, -journal = {Civil Engineering}, -number = {May}, -title = {{Probabilistic Fatigue Methodology and Wind Turbine Reliability}}, -year = {1996} -} -@article{Street1996, -author = {Street, A and Rafael, San}, -journal = {Evaluation}, -title = {{Final Project Report : Highenergy Rotor Development , Test and Evaluation FloWind Corporation}}, -year = {1996} -} -@article{Ill1996, -author = {Ill, George H James}, -journal = {Distribution}, -number = {April}, -title = {{Development of Structural Health Monitoring Techniques Using Dynamics Testing}}, -year = {1996} -} -@article{Guess1995, -author = {Guess, T R and Reedy, E D and Stavig, M E}, -journal = {Distribution}, -number = {February}, -title = {{Mechanical Properties of Hysol EA-9394 Structural Adhesive}}, -year = {1995} -} -@article{Winterstein, -author = {Winterstein, S R}, -journal = {Civil Engineering}, -title = {{Probability to Fit Four-Moment Distributions to Data}} -} -@article{Wintersteina, -author = {Winterstein, Steven R and Veers, Paul S}, -journal = {Wind Energy}, -number = {January 2000}, -title = {{Analysis of the Fatigue and Reliability of Wind Turbine i I ’ I}} -} -@article{Mandell1992, -author = {Mandell, John F and Reed, Robert M and Samborsky, Daniel D and Hall, Cobleigh}, -journal = {Chemical Engineering}, -number = {August}, -title = {{Fatigue of Fiberglass Wind Turbine Blade Materials}}, -year = {1992} -} -@article{Ashwill1992, -author = {Ashwill, Tom D}, -journal = {Distribution}, -number = {July}, -title = {{Measured Data for the Sandia Vertical Axis Wind Turbine}}, -year = {1992} -} -@article{Ill1993, -author = {Ill, George H James and Carrie, Thomas G and Lauffer, James P}, -journal = {System}, -title = {{The Natural Excitation Technique ( NExT ) for Modal Parameter Extraction From Operating Wind Turbines}}, -year = {1993} -} -@article{Homicz1991, -author = {Homicz, Gregory F}, -journal = {Power}, -title = {{Numerical Simulation of VAWT Stochastic Aerodynamic Loads Produced by Atmospheric Turbulence : VAWT-SAL Code}}, -year = {1991} -} -@article{Validation1990, -author = {Validation, Model}, -journal = {Test}, -number = {February}, -title = {{Initial Structural Response Measurements a Model Validation the Sandia 34-Meter VAWT Test Bed}}, -year = {1990} -} -@article{Release1988, -author = {Release, Unlimited}, -journal = {Distribution}, -title = {{Three-Dimensional nd Simulation}}, -year = {1988} -} -@article{Lauffer1988, -author = {Lauffer, James P and Carrie, Thomas G and Ashwill, Thomas D}, -journal = {Wind Energy}, -number = {April}, -title = {{Modal Testing in the Design Evaluation of Wind Turbines}}, -year = {1988} -} -@article{Carrie1988, -author = {Carrie, G and Lauffer, P and Gomez, J}, -journal = {Distribution}, -number = {April}, -title = {{Modal Testing the EOLE}}, -year = {1988} -} -@article{Lobitz1986, -author = {Lobitz, D W and Ashwill, T D}, -journal = {Contract}, -number = {April}, -title = {{Aeroelastic Effects in the Structural Dynamic Analysis of Vertical Axis Wind Turbines}}, -volume = {29000}, -year = {1986} -} -@article{Berg1985, -author = {Berg, Dale E}, -journal = {Design}, -number = {April}, -title = {{Structural Design of the Sandia 34-Meter Vertical-Axis Wind Turbine}}, -volume = {29}, -year = {1985} -} -@article{Oler1983, -author = {Oler, J W and Strickland, J H and Im, B J and Graham, G H}, -journal = {Power}, -number = {August}, -title = {{Dynamic Stall Regulation of the Darrieus Turbine}}, -year = {1983} -} -@article{Popelka1984, -author = {Popelka, David}, -number = {February 1982}, -title = {{Aeroelastic Stability Analysis of a Darrieus Wind Turbine}}, -year = {1984} -} -@article{Report1984, -author = {Report, Sandia}, -number = {September}, -title = {{Modeling Stochastic Wind Loads , on Vertical Axis Wind Turbines}}, -year = {1984} -} -@article{Veers1983, -author = {Veers, Paul S}, -journal = {Contract}, -number = {October}, -title = {{A General Method for Fatigue Analysis of Vertical Axis Wind Turbine Blades *}}, -year = {1983} -} -@article{Carrie1983, -author = {Carrie, Thomas G and Nord, Arlo R}, -journal = {Contract}, -number = {June}, -title = {{Modal Testing of a Rotating . Wind Turbine}}, -year = {1983} -} -@article{Carrie1982, -author = {Carrie, Thomas G and Lobitz, Donald W and Nerd, Arlo R and Watson, Robert A}, -journal = {October}, -title = {{Finite Element Analysis and Modal Testing of a Rotating Wind Turbine .}}, -year = {1982} -} -@article{Carrie, -author = {Carrie, Thomas G}, -journal = {Energy}, -title = {{Guy Cable Design and Damping for Vertical Axis Wind Turbines}} -} -@article{Sheldahl, -author = {Sheldahl, Robert E}, -journal = {Distribution}, -title = {{k Comparison of Field and Wind Tunnel Darrieus Wind Turbine Data}} -} -@article{Clauss, -author = {Clauss, David B and Carrie, Thomas G}, -journal = {Energy}, -title = {{Vertical Axis Wind Turbine Train Transient Dynamics Drive Printed in the United States of America Available from : National Technical Information Service NTIS Price Codes :}} -} -@article{Laboratories, -author = {Laboratories, Sandiss National and Dep, Ufited States and Government, United States and Govemrnent, United States and Government, United States and Government, United States and States, United and Available, America}, -journal = {Seven}, -title = {{No Title}} -} -@article{Sheldahla, -author = {Sheldahl, Robert E and Klimas, Paulc and Feltz, Louisv}, -title = {{Aerodynamic Performance of a 5-Metre- Diameter Darrieus Turbine With Extruded Aluminum NACA-0015 Blades}} -} -@article{Worstell1982, -author = {Worstell, Mark H}, -number = {August}, -title = {{Aerodynamic Performance of the 17-M-Diameter Darrieus Wind Turbine in the Three-Bladed Configuration : An Addendum}}, -year = {1982} -} -@article{Kaldlec1982, -author = {Kaldlec, Emil G}, -number = {November}, -title = {{Characteristics of Future Vertical Axis Wind Turbines}}, -year = {1982} -} -@article{Worstell1978, -author = {Worstell, Mark H}, -number = {September}, -title = {{Aerodynamic Performance of the 17 Meter Diameter Darrieus Wind Turbine}}, -year = {1978} -} -@article{Reuter1978, -author = {Reuter, Robert C and Worstell, Mark H}, -journal = {Energy}, -number = {April}, -title = {{Torque RippIe in a Vertical Axis Wind Turbine}}, -year = {1978} -} -@article{Reuter1984, -author = {Reuter, Robert C}, -journal = {October}, -number = {December 1977}, -title = {{VERTICALAXIS WIND TURBINETIE-DONN DESIGNWITH AN EXAMPLE Printed December 1977}}, -year = {1984} -} -@article{Laboratoriesa, -author = {Laboratories, Sandia and States, United and Energy, Atomic and Corporation, Sandia and Atomic, States States and Energy, Neither and Government, United and Commisson, United}, -journal = {Atomic Energy}, -title = {{No Title}} -} -@article{Release, -author = {Release, Unlimited}, -title = {{Practical Approximations to a Troposkien}} -} -@article{Robinett, -author = {Robinett, Rush D and Wilson, David G}, -journal = {Nonlinear Dynamics}, -pages = {1--6}, -title = {{Maximizing the Performance of Wind Turbines with Nonlinear Aeroservoelastic Power Flow Control}} -} -@article{Wilson, -author = {Wilson, David G and Resor, Brian R and Berg, Dale E and Laboratories, Sandia National and Box, P O}, -journal = {System}, -pages = {1--10}, -title = {{Active Aerodynamic Blade Distributed Flap Control Design Procedure for Load Reduction on the UpWind 5MW Wind Turbine}} -} -@article{Group2010, -author = {Group, Carver Wind}, -journal = {Group}, -number = {January}, -title = {{Sweep-Twist Adaptive Rotor Blade : Final Project Report}}, -year = {2010} -} -@article{Barone2009, -author = {Barone, Matthew F and Laboratories, Sandia National and Berg, Dale E and Laboratories, Sandia National}, -journal = {Leonardo}, -number = {August}, -title = {{Aerodynamic and Aeroacoustic Tests of a Flatback Version of the DU97-W-300 Airfoil}}, -year = {2009} -} -@article{Wilson2009a, -author = {Wilson, David G and Berg, Dale E and Resor, Brian R and Barone, Matthew F and Berg, Jonathan C and National, Sandia and Box, Laboratories P O}, -journal = {Fluid Dynamics}, -keywords = {active aerodynamic,independent pitch control,trailing edge devices,wind turbine control}, -pages = {1--12}, -title = {{Combined Individual Pitch Control and Active Aerodynamic Load Controller Investigation for the 5MW UpWind Turbine}}, -year = {2009} -} -@article{Griffin2009, -author = {Griffin, Dayton and Ashwill, Tom and Manager, Sandia Technical}, -journal = {Energy}, -number = {May}, -title = {{Blade System Design Study Part II : Final Project Report ( GEC )}}, -year = {2009} -} -@article{Exergy2008, -author = {Exergy, Utilizing and Robinett, Rush D and Wilson, David G}, -journal = {Agenda}, -title = {{Nonlinear Power Flow Control Design :}}, -year = {2008} -} -@article{Wilson2009b, -author = {Wilson, David G and Berg, Dale E and Barone, Mathew F and Berg, Jonathan C and Resor, Brian R and Lobitz, Don W}, -journal = {Wind Energy}, -number = {March}, -title = {{ACTIVE AERODYNAMIC BLADE CONTROL DESIGN FOR LOAD REDUCTION ON}}, -year = {2009} -} -@article{Johnson2008, -author = {Johnson, Scott J and Dam, C P Case Van and Berg, Dale E}, -journal = {Contract}, -keywords = {Sandia, Active Load Control, Smart Systems,}, -number = {August}, -title = {{Active Load Control Techniques for Wind Turbines}}, -year = {2008} -} -@article{Baker2008, -author = {Baker, Jonathon P and Dam, C P Case Van and Gilbert, Benson L}, -journal = {Contract}, -number = {April}, -title = {{Flatback Airfoil Wind Tunnel Experiment}}, -year = {2008} -} -@article{Dam2008, -author = {Dam, C P Case Van and Mayda, Edward A and Chao, David D and Berg, Dale E}, -journal = {Contract}, -number = {March}, -title = {{Computational Design and Analysis of Flatback Airfoil Wind Tunnel Experiment}}, -year = {2008} -} -@article{Dam2008a, -author = {Dam, C P Case Van and Kahn, Daniel L and Berg, Dale E}, -journal = {Contract}, -number = {March}, -title = {{Trailing Edge Modifications for Flatback Airfoils}}, -year = {2008} -} -@article{Chao2008, -author = {Chao, David D and Dam, C P Case Van}, -journal = {Manager}, -number = {April}, -title = {{CFD Analysis of Rotating Two-Bladed Flatback Wind Turbine Rotor}}, -year = {2008} -} -@article{Berry2007, -author = {Berry, Derek and Ashwill, Tom and Manager, Sandia Technical}, -journal = {Vacuum}, -number = {November}, -title = {{TX-100 Manufacturing Final Project Report}}, -year = {2007} -} -@article{Berry2007a, -author = {Berry, Derek S}, -journal = {Composites}, -number = {November}, -title = {{CX-100 Manufacturing Final Project Report}}, -year = {2007} -} -@article{Zayas2008, -author = {Zayas, Jose R and Johnson, Wesley D}, -journal = {Wind Energy}, -number = {March}, -title = {{3X-100 Blade Field Test}}, -year = {2008} -} -@article{Robinett2007, -author = {Robinett, Rush D and Wilson, David G}, -journal = {Analysis}, -number = {April}, -title = {{Collective Systems : Physical and Information Exergies}}, -year = {2007} -} -@article{Berry2007b, -author = {Berry, Derek and Investigator, Principal and Ashwill, Tom and Monitor, Sandia Technical}, -journal = {Design}, -number = {September}, -title = {{Design of 9-Meter Carbon-Fiberglass Prototype Blades : CX-100 and TX-100}}, -year = {2007} -} -@article{Release2007, -author = {Release, Unlimited and Mastbergen, Daniel Blair}, -journal = {October}, -number = {October}, -title = {{Simulation and Testing of Resin Infusion Manufacturing Processes for Large Composite Structures}}, -year = {2007} -} -@article{Release2007a, -author = {Release, Unlimited and Larsen, Eric Barnholt}, -journal = {Organization}, -number = {October}, -title = {{Pressure Bag Molding : Manufacturing , Mechanical Testing , Non-Destructive Evaluation , and Analysis}}, -year = {2007} -} -@book{Release2007b, -author = {Release, Unlimited}, -booktitle = {Knowledge Creation Diffusion Utilization}, -isbn = {9789090212210}, -number = {October}, -title = {{Fatigue Life Prediction and Strength Degradation of Wind Turbine Rotor Blade Composites}}, -year = {2007} -} -@article{Walford2006, -author = {Walford, Christopher A}, -journal = {Energy}, -number = {March}, -title = {{Wind Turbine Reliability : Understanding and Minimizing Wind Turbine Operation and Maintenance Costs}}, -year = {2006} -} -@article{Zayas2005, -author = {Zayas, Jose R and Jones, Perry L and Holman, Adam}, -journal = {Contract}, -number = {December}, -title = {{CX-1100 and TX-100 Blade Field Tests}}, -year = {2005} -} -@article{Hermann2006, -author = {Hermann, Thomas M and Locke, James E and Wetzel, Kyle K}, -journal = {Test}, -keywords = {anisotropic,laminate,hybrid}, -number = {November}, -title = {{Fabrication , Testing , and Analysis of Anisotropic Carbon / Glass Hybrid Composites Volume 2 : Test Data}}, -year = {2006} -} -@article{Hermann2006a, -author = {Hermann, Thomas M and Locke, James E and Wetzel, Kyle K}, -journal = {Composites}, -keywords = {anisotropic,laminate,hybrid}, -number = {November}, -title = {{Fabrication , Testing , and Analysis of Anisotropic Carbon / Glass Hybrid Composites Volume 1 : Technical Report}}, -year = {2006} -} -@article{Ashwill, -author = {Ashwill, Thomas D}, -journal = {Wind Energy}, -title = {{DEVELOPMENTS IN LARGE BLADES}} -} -@article{Sutherlanda, -author = {Sutherland, Herbert J and Mandell, John F}, -journal = {Renewable Energy}, -pages = {1--37}, -title = {{No Title}} -} -@article{Release2004, -author = {Release, Unlimited}, -journal = {System}, -number = {June}, -pages = {3--180}, -title = {{PRINTED JUNE 2004 FLUID FLOW MODELING OF RESIN TRANSFER MOLDING FOR COMPOSITE MATERIAL WIND TURBINE}}, -year = {2004} -} -@article{Street2004, -author = {Street, Market}, -journal = {Analysis}, -number = {May}, -title = {{INNOVATIVE DESIGN APPROACHES FOR LARGE WIND TURBINE BLADES WindPACT Blade System Design Studies}}, -year = {2004} -} -@article{Griffin2004, -author = {Griffin, Dayton A}, -journal = {Design}, -number = {June}, -pages = {3--75}, -title = {{Blade System Design Studies Volume II : Preliminary Blade Designs and Recommended Test Matrix}}, -volume = {II}, -year = {2004} -} -@article{Fitzwater2004, -author = {Fitzwater, Leroy M}, -journal = {Energy}, -number = {January}, -title = {{SANDIA REPORT Estimation Of Fatigue And Extreme Load Distributions From Limited Data With Application To Wind Energy Systems}}, -year = {2004} -} -@article{Composites2003, -author = {Composites, T P I}, -journal = {Power}, -number = {May}, -title = {{Cost Study for Large Wind Turbine Blades : WindPACT Blade System Design Studies}}, -year = {2003} -} -@article{Composites2003a, -author = {Composites, T P I}, -journal = {Design}, -number = {March}, -title = {{Innovative Design Approaches for Large Wind Turbine Blades}}, -year = {2003} -} -@article{Composites2003b, -author = {Composites, T P I}, -journal = {Test}, -number = {May}, -title = {{Blade Manufacturing Improvements Remote Blade Manufacturing Demonstration}}, -year = {2003} -} -@article{Kuraishi2002, -author = {Kuraishi, Akira and Tsai, Stephen W and Wang, Julie}, -journal = {Contract}, -number = {December}, -title = {{Material Characterization of Glass , Carbon , and Hybrid-Fiber SCRIMP Panels}}, -year = {2002} -} -@article{Sherwood2002, -author = {Sherwood, Kent and Investigator, Principal}, -journal = {East}, -number = {October}, -title = {{Blade Manufacturing Improvement Project : Final Report}}, -year = {2002} -} -@article{Release2002, -author = {Release, Unlimited}, -journal = {Transition}, -number = {August}, -title = {{PARAMETRIC STUDY FOR LARGE WIND TURBINE BLADES}}, -year = {2002} -} -@article{Zuteck2002, -author = {Zuteck, Mike}, -journal = {Contract}, -number = {October}, -title = {{Adaptive Blade Concept Assessment : Curved Planform Induced Twist Investigation}}, -year = {2002} -} -@article{Engineering, -author = {Engineering, Aerospace}, -journal = {Aerospace Engineering}, -title = {{Braided gn of a @ Sandia National laboratories}} -} -@article{Report2002, -author = {Report, Sand}, -journal = {Contract}, -number = {August}, -title = {{Evaluation of Design Concepts}}, -year = {2002} -} -@article{Griffin2002, -author = {Griffin, Dayton A}, -journal = {Energy}, -number = {July}, -title = {{Blade System Design Studies Volume I : Composite Technologies for Large Wind Turbine Blades}}, -volume = {I}, -year = {2002} -} -@article{Mandall2002, -author = {Mandall, John F and Samborsky, Daniel D and Cairns, Douglas S}, -journal = {Online}, -number = {March}, -title = {{FATIGUE OF COMPOSITE MATERIALS AND SUBSTRUCTURES FOR WIND TURBINE BLADES}}, -year = {2002} -} -@article{Release2001, -author = {Release, Unlimited and Fitzwater, Leroy M and Winterstein, Steven R}, -journal = {Civil Engineering}, -number = {December}, -title = {{Estimation of Extremes from Limited Time Histories: The Routine MaxFits With Wind Turbine Examples}}, -year = {2001} -} -@article{Mckittrick2001, -author = {Mckittrick, Ladean R and Cairns, Douglas S and Mandell, John and Combs, David C and Rabern, Donald A and Luchene, R Daniel Van}, -journal = {Montana The Magazine Of Western History}, -number = {May}, -title = {{Analysis of a Composite Blade Design for the AOC 15 / 50 Wind Turbine Using a Finite Element Model}}, -year = {2001} -} -@article{Report2001, -author = {Report, Final Project}, -journal = {Online}, -number = {May}, -title = {{Blade Manufacturing Improvements Development of the ERS-100 Blade Final Project Report}}, -year = {2001} -} -@article{Cairns2000, -author = {Cairns, Douglas S and Skramstad, Jon D}, -journal = {Hand, The}, -number = {June}, -title = {{Evaluation of Hand Lay-Up and Resin Transfer Molding in Composite Wind Turbine Blade Manufacturing}}, -year = {2000} -} -@article{Ong, -author = {Ong, Cheng-huat and Tsai, Stephen W}, -journal = {Carbon}, -title = {{THE USE OF CARBON FIBERS IN WIND TURBINE BLADE DESIGN : The Use of Carbon Fibers in Wind Turbine Blade Design : a}} -} -@book{Bowen2004, -author = {Bowen, Anthony J and Mortensen, Niels G}, -booktitle = {Wind Energy}, -isbn = {8755023207}, -number = {December}, -title = {{WAsP prediction errors due to site orography}}, -volume = {995}, -year = {2004} -} -@book{Fuglsang1998, -author = {Fuglsang, Peter and Antoniou, Ioannis and Bak, Christian and Madsen, Helge Aa}, -booktitle = {Test}, -isbn = {8755023290}, -number = {May}, -pages = {1--43}, -title = {{Wind Tunnel Test of the RIS\O-1 Airfoil}}, -volume = {999}, -year = {1998} -} -@book{Fuglsang1998a, -author = {Fuglsang, Peter and Thomsen, Kenneth}, -isbn = {8755023312}, -number = {February}, -title = {{Cost Optimization of Wind Turbines for Large-scale Off-shore Wind Farms}}, -volume = {1000}, -year = {1998} -} -@book{Fuglsang1998b, -author = {Fuglsang, Peter and Antoniou, Ioannis and S\o rensen, Niels N and Madsen, Helge Aa}, -isbn = {8755023002}, -number = {April}, -title = {{Validation of a Wind Tunnel Testing Facility for Blade Surface Pressure Measurements}}, -volume = {981}, -year = {1998} -} -@book{Angelou2010a, -author = {Angelou, Nikolas and Mikkelsen, Torben and Hansen, Kasper H and Sj\"{o}holm, Mikael}, -booktitle = {Contract}, -isbn = {9788755038363}, -number = {August}, -title = {{LIDAR Wind Speed Measurements from a Rotating Spinner : “ SpinnerEx 2009 †Ris\o-R-Report}}, -volume = {1741}, -year = {2010} -} -@book{Lund2010, -author = {Lund, E and Garm, J H}, -booktitle = {Wind Energy}, -isbn = {9788755038257}, -number = {June}, -title = {{Improved design for large wind turbine blades of fibre composites ( Phase 4 ) - Summary report}}, -volume = {1734}, -year = {2010} -} -@book{Data2010, -author = {Data, L T T and Nielsen, Magda and Jensen, Find M and Nielsen, Per H and Martyniuk, Karolina and Roczek, Agnieszka and Sieradzan, Tomasz and Roudnitski, Vatslav and Kucio, Piotr and Bitsche, Robert and Andresen, Peter and Lukassen, Troels and Andrlov\'{a}, Zuzana and Branner, Kim and Bak, Christian and Mcgugan, Malcolm and Knudsen, Henrik and Rasmussen, Anders B and Rasmussen, Jens Jakob and Wedel-heinen, Vestas Jakob and Nielsen, Author Magda and Jensen, Find M and Per, H and Bitsche, Robert and Andresen, Peter and Andrlov\'{a}, Zuzana and Branner, Kim and Kalles\o e, Bjarne and Mcgugan, Malcolm and Lindby, Torben and S\o rensen, Flemming and Jensen, Christian and Knudsen, Henrik and Uldahl, Ulla and Rasmussen, B and Rasmussen, Jens Jakob}, -booktitle = {Contract}, -isbn = {9788755037946}, -number = {January}, -title = {{Ris\o-R-Report}}, -volume = {1718}, -year = {2010} -} -@article{Sørensen2009a, -author = {S\o rensen, B F and Branner, K and Lund, E and S\o rensen, B F and Branner, K and Lund, E}, -isbn = {9788755037618}, -journal = {Wind Energy}, -keywords = {Ris\o National Laboratory for Sustainable Energy 2009}, -number = {June}, -pages = {1--30}, -title = {{Improved design for large wind turbine blades of fibre composites ( Phase 3 ) - Summary report}}, -volume = {1699}, -year = {2009} -} -@article{Lawaetz2009, -author = {Lawaetz, Henrik}, -isbn = {9788755037427}, -keywords = {Marts 2009}, -title = {{Vindm\o ller i en dansk skov}}, -volume = {1687}, -year = {2009} -} -@book{Lemming2008, -author = {Lemming, J\o rgen and Morthorst, Poul Erik and Clausen, Niels-erik and En, Ris\o-r- and Lemming, Author J\o rgen and Morthorst, Poul Erik and Clausen, Niels-erik and Jensen, Peter Hjuler}, -booktitle = {Technology}, -isbn = {9788755037267}, -keywords = {January 2008}, -number = {January}, -title = {{Contribution to the Chapter on Wind Power Energy Technology Perspectives 2008}}, -volume = {1674}, -year = {2008} -} -@book{Bindslev2009, -author = {Bindslev, Henrik}, -isbn = {9788755037588}, -keywords = {Targets and road maps from Workshop on Sustainable Energies, Technical University of Denmark, 14-15 January 2009}, -number = {August}, -pages = {14--15}, -title = {{How ambitious can we be in contributing to the world ’ s energy needs with bioenergy , wind , solar and storage ?}}, -volume = {1697}, -year = {2009} -} -@book{Jensen2008, -author = {Jensen, Find M and Branner, Kim and Nielsen, Per H and Berring, Peter and Antvorskov, Troels S and Nielsen, Magda and Lindahl, Morten and Lund, Brian and Jensen, Christian and Reffs, Joan H and Nielsen, Rune F and Jensen, Peter H and Hansen, Rene S and Laursen, Jeppe H and Klein, Marcus and Stang, Henrik and Wedel-heinen, Jakob}, -booktitle = {Test}, -isbn = {9788755036369}, -number = {March}, -title = {{Full Scale Test of a SSP 34m box girder 1 . Data report}}, -volume = {1622}, -year = {2008} -} -@book{Clausen2008, -author = {Clausen, Niels-erik and Lawaetz, Henrik and Lemming, J\o rgen and Erik, Poul}, -booktitle = {Wind Energy}, -isbn = {9788755036635}, -number = {December}, -title = {{Technologies for production of Electricity and Heat in Sweden Wind Energy – in perspective of international development}}, -year = {2008} -} -@book{Jensen, -author = {Jensen, Find M and Branner, Kim and Nielsen, Per H and Berring, Peter and Antvorskov, Troels S and Nielsen, Magda and Lindahl, Morten and Reffs, Joan H and Jensen, Peter H and Mcgugan, Malcolm}, -booktitle = {Wind Energy}, -isbn = {9788755035744}, -keywords = {Udgivelsesdato f.eks. Januar 2007}, -number = {May 2008}, -title = {{Full Scale Test of a SSP 34m box girder 2 . Data report}}, -volume = {1588} -} -@book{Bertagnolio2006, -author = {Bertagnolio, Franck and S\o rensen, Niels N and Johansen, Jeppe}, -isbn = {8755035639}, -number = {December}, -title = {{Profile Catalogue for Airfoil Sections Based on 3D Computations}}, -volume = {1581}, -year = {2006} -} -@book{Buhl2006, -author = {Buhl, Edited T and Thomsen, K and Risoe, H Markou and Cres, E S Politis}, -booktitle = {Design}, -isbn = {8755035507}, -number = {December}, -title = {{Design guidelines for integrated aeroelastic control of wind turbines – Task-12 Report}}, -volume = {1577}, -year = {2006} -} -@article{Mann2006a, -author = {Mann, Jakob and Broe, Brian Riget}, -isbn = {8755035272}, -number = {July}, -title = {{Conversion of contours to Cartesian grids}}, -volume = {1564}, -year = {2006} -} -@article{Pedersen, -author = {Pedersen, Troels Friis and Dahlberg, Jan-\aa ke and Busche, Peter and Sanz-andres, Angel}, -isbn = {8755035264}, -keywords = {July 2006}, -number = {July 2006}, -title = {{ACCUWIND - Accurate Wind Speed Measurements in Wind Energy Summary Report}}, -volume = {1563} -} -@book{Pedersen2006, -author = {Pedersen, T F and Dahlberg, J and Busche, Peter}, -isbn = {8755035167}, -number = {May}, -title = {{ACCUWIND - Classification of Five Cup Anemometers According to IEC61400-12-1}}, -volume = {1556}, -year = {2006} -} -@book{Dahlberg, -author = {Dahlberg, J and Pedersen, T F and Busche, Peter}, -booktitle = {Methods}, -isbn = {8755035140}, -number = {May 2006}, -title = {{ACCUWIND - Methods for Classification of Cup Anemometers}}, -volume = {1555} -} -@book{Gryning2005, -author = {Gryning, Sven-erik}, -booktitle = {Management Services}, -isbn = {8755034780}, -number = {November}, -title = {{The height of the atmospheric boundary layer during unstable conditions}}, -volume = {1536}, -year = {2005} -} -@article{Johansen2006, -author = {Johansen, Jeppe and S\o rensen, Niels N}, -isbn = {8755034977}, -journal = {Contract}, -keywords = {AERODYNAMICS,MODIFICATIONS,OPTIMIZATION,TURBINE BLADES,WIND TURBINES}, -number = {February}, -title = {{Aerodynamic investigation of Winglets on Wind Turbine Blades using CFD}}, -volume = {1543}, -year = {2006} -} -@book{Sørensen2005, -author = {S\o rensen, Poul and Hansen, Anca D and Thomsen, Kenneth and Morthorst, Poul Erik and Nielsen, Lars Henrik and Iov, Florin and Blaabjerg, Frede and Nielsen, Henrik Aalborg and Madsen, Henrik and Donovan, Martin H and S\o rensen, Author Poul and Hansen, Anca D and Thomsen, Kenneth and Buhl, Thomas and Morthorst, Poul Erik and Nielsen, Lars Henrik and Iov, Florin and Blaabjerg, Frede and Nielsen, Henrik Aalborg and Madsen, Henrik and Donovan, Martin H}, -isbn = {8755034691}, -keywords = {September 2005}, -number = {September}, -title = {{Operation and control of large wind turbines and wind farms - Final report}}, -volume = {1532}, -year = {2005} -} -@article{Frandsen2004, -author = {Frandsen, Sten and Barthelmie, Rebecca and Pryor, Sara and Larsen, S\o ren and H\o jstrup, J\o rgen and Frandsen, Sten and Barthelmie, Rebecca and Pryor, Sara}, -isbn = {8755034470}, -journal = {Wind Energy}, -keywords = {August 2004 -WIND TURBINE ARRAYS,DISTANCE,FLOW MODELS,OFFSHORE SITES,SITE SELECTION,WIND}, -number = {August}, -title = {{The necessary distance between large wind farms offshore - study}}, -volume = {1518}, -year = {2004} -} -@book{Sørensenb, -author = {S\o rensen, Bent F and Branner, Kim and Stang, Henrik and Henrik, M}, -booktitle = {Materials Research}, -isbn = {8755034624}, -keywords = {August 2005}, -number = {August 2005}, -title = {{Improved design of large wind turbine blades of fibre composites ( Phase 2 ) - Summary Report}}, -volume = {1526} -} -@book{Hansen2005, -author = {Hansen, Morten H and Hansen, Anca and Larsen, Torben J and \O ye, Stig and S\o rensen, Poul and Fuglsang, Peter}, -booktitle = {Control}, -isbn = {8755034098}, -number = {January}, -title = {{Control design for a pitch-regulated , vari- able speed wind turbine}}, -volume = {1500}, -year = {2005} -} -@article{Sørensen2005a, -author = {S\o rensen, N N and Johansen, J and Conway, S and Voutsinas, S and Hansen, M O L and St, A}, -journal = {Methods}, -number = {January}, -title = {{KNOW-BLADE Tip Shape Study revised version}}, -volume = {1495}, -year = {2005} -} -@book{Politis2005, -author = {Politis, E S and Nikolaou, I G and Chaviaropoulos, P K}, -booktitle = {Wind Energy}, -isbn = {8755033954}, -number = {January}, -title = {{KNOW-BLADE Task-4 report ; Navier- Stokes Aeroelasticity}}, -volume = {1492}, -year = {2005} -} -@book{Johansen2005, -author = {Johansen, Jeppe and S\o rensen, Niels N and Reck, Mads and Hansen, O L and Stuermer, Arne and Ramboer, Jan and Ekaterinaris, John and Voutsinas, Spyros and Johansen, Jeppe and S\o rensen, Niels N and Reck, Mads and Hansen, O L and Stuermer, Arne and Ramboer, Jan and Hirsch, Charles}, -booktitle = {Contract}, -isbn = {8755033865}, -number = {January}, -title = {{KNOW-BLADE Task-3 . 3 report ; Rotor Blade Computations with 3D Vortex Generators}}, -volume = {1486}, -year = {2005} -} -@book{Johansen2004a, -author = {Johansen, Jeppe and S\o rensen, Niels N and Zahle, Frederik and Nikolaou, Ilias and Politis, Evangelos S and Panagiotis, K and Ekaterinaris, John and Nikolaou, Ilias and Politis, Evangelos S and Panagiotis, K}, -booktitle = {October}, -isbn = {8755033792}, -number = {October}, -title = {{KNOW-BLADE Task-2 report ; Aerodynamic Accessories}}, -volume = {1482}, -year = {2004} -} -@article{Gaunaa2006, -author = {Gaunaa, Mac}, -number = {July}, -title = {{Unsteady 2D Potential-flow Forces on a Thin Variable Geometry Airfoil Undergoing Arbitrary Motion}}, -volume = {1478}, -year = {2006} -} -@book{Pryor2004, -author = {Pryor, S C and Barthelmie, R J}, -booktitle = {Wind Energy}, -isbn = {8755033687}, -keywords = {Climate change, wind energy, near-surface flow, Regional Climate Model}, -number = {August}, -title = {{Use of RCM simulations to assess the impact of climate change on wind energy availability}}, -volume = {1477}, -year = {2004} -} -@book{Krogh2004, -author = {Krogh, Thomas}, -booktitle = {Offshore (Conroe, TX)}, -isbn = {8755033644}, -number = {June}, -title = {{HAWC Load Simulation of Generic 5MW Offshore Wind Turbine Model}}, -volume = {1475}, -year = {2004} -} -@book{Larsen2004, -author = {Larsen, Gunner C and Hansen, Kurt S}, -booktitle = {Management Services}, -isbn = {8755033598}, -keywords = {DATA ANALYSIS,FATIGUE,GUSTS,IMPACT STRENGTH,INFORMATION SYSTEMS,SHEAR,STORMS,TIME-SERIES ANALYSIS,TURBULENCE,VELOCITY,WIND,WIND LOADS,WIND TURBINES}, -number = {June}, -title = {{Database on Wind Characteristics Analyses of Wind Turbine Design Loads}}, -volume = {1473}, -year = {2004} -} -@book{Sørensen2005b, -author = {S\o rensen, Poul and Hansen, Anca D and Iov, Florin and Blaabjerg, Frede and Donovan, Martin H and S\o rensen, Poul and Hansen, Anca D and Iov, Florin and Blaabjerg, Frede and Donovan, Martin H}, -isbn = {8755033229}, -keywords = {August 2005,Ris\o-R-1464(EN)}, -number = {August}, -title = {{Wind farm models and control strategies}}, -volume = {1464}, -year = {2005} -} -@article{Rathmann2004, -author = {Rathmann, Ole and N\o rg\aa rd, Per and Frandsen, Sten}, -isbn = {8755032966}, -keywords = {CZECH REPUBLIC,DENMARK,RESOURCE ASSESSMENT,TECHNOLOGY TRANSFER,WIND POWER}, -number = {June}, -title = {{Danish-Czech Wind Resource Know- how Transfer Project Final Report}}, -volume = {1447}, -year = {2004} -} -@book{Deliverable2004, -author = {Deliverable, D}, -isbn = {8755032907}, -number = {June}, -title = {{Fluctuations and predictability of wind and hydropower Fluctuations and predictability of wind and hydropower}}, -volume = {1443}, -year = {2004} -} -@book{Pedersen2003, -author = {Pedersen, Henrik Broen and Jesper, Ole and Kristensen, Dahl}, -isbn = {8755031692}, -number = {February}, -title = {{Applied Modal Analysis of Wind Turbine Blades}}, -volume = {1388}, -year = {2003} -} -@book{Clausen2004, -author = {Clausen, Niels-erik and Mortensen, Niels G and Carsten, Jens and Clausager, Ib and Jensen, Flemming Pagh and Said, Usama Said}, -booktitle = {Environmental Research}, -isbn = {8755031676}, -number = {November}, -title = {{Wind Farm Planning at the Gulf of Suez}}, -volume = {1387}, -year = {2004} -} -@article{Sørensen2002, -author = {S\o rensen, Niels N}, -isbn = {8755031412}, -number = {November}, -title = {{3D Background Aerodynamics using CFD}}, -volume = {1376}, -year = {2002} -} -@book{Pedersen2004, -author = {Pedersen, Troels Friis}, -isbn = {8755033199}, -keywords = {ANEMOMETERS,CALIBRATION,CLASSIFICATION,PERFORMANCE TESTING,SPECIFICATIONS}, -number = {March}, -title = {{Characterisation and Classification of RIS\O P2546 Cup Anemometer Ris\o National Laboratory , Roskilde}}, -volume = {1364}, -year = {2004} -} -@book{Fuglsang2002, -author = {Fuglsang, Peter and Sangill, Ole and Norwin, A S and Hansen, Peter and S, L M Glasfiber A}, -booktitle = {Power}, -isbn = {8755031374}, -number = {December}, -pages = {1--58}, -title = {{Design of a 21 m Blade with Ris\o-A1 Airfoils for Active Stall Controlled Wind Turbines}}, -volume = {1374}, -year = {2002} -} -@article{Mann2002, -author = {Mann, Jakob and Ott, S\o ren and J\o rgensen, Bo Hoffmann and Frank, P}, -journal = {Engineering}, -number = {August}, -title = {{WAsP Engineering 2000}}, -volume = {1356}, -year = {2002} -} -@article{Johansen2002, -author = {Johansen, Jeppe and S\o rensen, Niels N}, -isbn = {8755030874}, -number = {August}, -title = {{Numerical Investigation of Three Wind Turbine Blade Tips}}, -volume = {1353}, -year = {2002} -} -@article{Baumgart2002, -author = {Baumgart, Andreas and Larsen, Gunner C and Eds, Morten H Hansen}, -journal = {Word Journal Of The International Linguistic Association}, -number = {February}, -title = {{Models for Wind Turbines – a Collection}}, -volume = {1352}, -year = {2002} -} -@article{Ott2002, -author = {Ott, S}, -journal = {Simulation}, -number = {May}, -title = {{in Gas Releases by Industrial Accidents Final Report}}, -volume = {1329}, -year = {2002} -} -@article{Kristensen2002, -author = {Kristensen, Leif and Hansen, Ole Frost}, -journal = {Management Services}, -number = {April}, -title = {{Distance Constant of the Ris\o Cup Anemometer}}, -volume = {1320}, -year = {2002} -} -@book{Larsen2001, -author = {Larsen, Gunner C and Hansen, Kurt S}, -booktitle = {Management Services}, -isbn = {8755029647}, -number = {November}, -title = {{Database on Wind Characteristics Contents of Database Bank}}, -volume = {1301}, -year = {2001} -} -@book{Larsen2001a, -author = {Larsen, Gunner C and Hansen, Kurt S}, -booktitle = {Structure}, -isbn = {8755029604}, -number = {November}, -title = {{Database on Wind Characteristics Structure and Philosophy}}, -volume = {1299}, -year = {2001} -} -@book{Larsen2001b, -author = {Larsen, Gunner C and Hansen, Kurt S}, -booktitle = {Management Services}, -isbn = {8755029620}, -number = {November}, -title = {{Database on Wind Characteristics Users Manual}}, -volume = {1300}, -year = {2001} -} -@book{Hasager2002, -author = {Hasager, Charlotte Bay and Astrup, Poul and Barthelmie, Rebecca and Dellwik, Ebba and J\o rgensen, Bo Hoffmann and Gylling, Niels and Nielsen, Morten and Pryor, Sara and Rathmann, Ole}, -booktitle = {Processing}, -isbn = {8755029590}, -number = {May}, -title = {{Validation of Satellite SAR Offshore Wind Speed Maps to In-Situ Data , Microscale and Mesoscale Model Results}}, -volume = {1298}, -year = {2002} -} -@article{Larsen2001c, -author = {Larsen, Torben J}, -number = {September}, -title = {{Description of the DLL Regulation Interface in HAWC}}, -volume = {1290}, -year = {2001} -} -@book{Sørensen2001, -author = {S\o rensen, Poul and Hansen, Anca and Janosi, Lorand and Bech, John and Bak-jensen, Birgitte}, -isbn = {8755029124}, -number = {December}, -title = {{Simulation of Interaction between Wind Farm and Power System}}, -volume = {1281}, -year = {2001} -} -@book{Lange2001, -author = {Lange, Bernhard and Barthelmie, Rebecca and H\o jstrup, J\o rgen}, -booktitle = {Control}, -isbn = {8755028853}, -number = {May}, -title = {{Description of the R\o dsand field measurement}}, -volume = {1268}, -year = {2001} -} -@book{Clausen2001, -author = {Clausen, Niels-erik and Bindner, Henrik and Frandsen, Sten and Hansen, Jens Carsten and Hansen, Lars Henrik and Lundsager, Per}, -isbn = {8755028608}, -number = {June}, -title = {{Isolated Systems with Wind Power An Implementation Guideline}}, -volume = {1257}, -year = {2001} -} -@book{Lundsager2001, -author = {Lundsager, Per and Bindner, Henrik and Clausen, Niels-erik and Hansen, Lars Henrik and Hansen, Jens Carsten}, -isbn = {8755028586}, -number = {June}, -title = {{Isolated Systems with Wind Power Main Report}}, -volume = {1256}, -year = {2001} -} -@book{Frank2001, -author = {Frank, Helmut P and Rathmann, Ole and Mortensen, Niels G}, -isbn = {8755029094}, -number = {June}, -title = {{the KAMM / W AsP Method}}, -volume = {1252}, -year = {2001} -} -@book{Risø2001, -author = {Ris\o, Henrik Bindner and Saleh, Laila and Hafiez, Salah Abdel and Nrea, Sayed Mansour}, -isbn = {8755028225}, -number = {June}, -title = {{Isolated Systems with Wind Power Results of Measurements in Egypt}}, -volume = {1240}, -year = {2001} -} -@article{Frank2001a, -author = {Frank, Helmut P}, -journal = {Wind Energy}, -number = {May}, -title = {{Extreme Winds over Denmark from the NCEP / NCAR Reanalysis}}, -volume = {1238}, -year = {2001} -} -@book{Larsen2001d, -author = {Larsen, S\o ren E and Skrumsager, Birthe}, -booktitle = {Wind Energy}, -isbn = {8755028004}, -number = {May}, -title = {{Annual Progress Report for 2000 Wind Energy and Atmospheric Physics Department}}, -volume = {1231}, -year = {2001} -} -@book{Hansen2000, -author = {Hansen, Anca D and S\o rensen, Poul and Hansen, Lars H}, -isbn = {8755027741}, -number = {December}, -title = {{Models for a Stand-Alone PV System}}, -volume = {1219}, -year = {2000} -} -@article{Kristensen2001, -author = {Kristensen, Leif and Jensen, Gunnar and Hansen, Arent and Kirkegaard, Peter}, -number = {January}, -title = {{Field Calibration of Cup Anemome- ters}}, -volume = {1218}, -year = {2001} -} -@article{Ott2002a, -author = {Ott, S\o ren and J\o rgensen, Hans E}, -journal = {Environment}, -number = {May}, -title = {{Meteorology and lidar data from the URAHFREP field trials}}, -volume = {1212}, -year = {2002} -} -@book{Lee, -author = {Lee, Wai Kong}, -booktitle = {Measurement}, -isbn = {8755027520}, -number = {January 2001}, -pages = {1--120}, -title = {{European Wind Turbine Testing Procedure Developments Task 1 : Measurement Method to Verify Wind Turbine Performance Character- istics Task coordinator}}, -volume = {1209} -} -@book{Hansen2001a, -author = {Hansen, L H and Helle, L and Blaabjerg, F and Ritchie, E and Bindner, H and S\o rensen, P}, -booktitle = {Design}, -isbn = {8755027431}, -number = {December}, -title = {{Conceptual survey of Generators and Power Electronics for Wind Turbines}}, -volume = {1205}, -year = {2001} -} -@book{Pereira2000, -author = {Pereira, Alexandre De Lemos}, -isbn = {8755027369}, -number = {June}, -title = {{Modular supervisory controller for hybrid power systems}}, -volume = {1202}, -year = {2000} -} -@book{Kozine2000, -author = {Kozine, Igor and Christensen, Palle and Winther-jensen, Martin}, -booktitle = {System}, -isbn = {8755027326}, -number = {January}, -title = {{Failure Database and Tools for Wind Turbine Availability and Reliability Analyses Wind Turbines}}, -volume = {1200}, -year = {2000} -} -@book{Bak2000, -author = {Bak, Christian and Fuglsang, Peter and Johansen, Jeppe}, -isbn = {8755027164}, -number = {December}, -title = {{Wind Tunnel Tests of the NACA 63-415 and a Modified NACA 63-415 Airfoil}}, -volume = {1193}, -year = {2000} -} -@article{Larsen2002, -author = {Larsen, Gunner C and Hansen, Morten H and Carl, Ingemar}, -journal = {Modal Analysis}, -number = {February}, -title = {{Modal Analysis of Wind Turbine Blades}}, -volume = {1181}, -year = {2002} -} -@article{Giebel2000, -author = {Giebel, Gregor}, -isbn = {8755026982}, -number = {May}, -title = {{Equalizing Effects of the Wind Energy Production in Northern Europe Determined from Reanalysis Data}}, -volume = {1182}, -year = {2000} -} -@article{Mann2000, -author = {Mann, Jakob and Astrup, Poul and Kristensen, Leif and Rathmann, Ole and Madsen, Peter Hauge and Heathfield, Duncan}, -number = {May}, -title = {{WAsP Engineering DK}}, -volume = {1179}, -year = {2000} -} -@book{Sørensen2000, -author = {S\o rensen, Poul and Madsen, Peter Hauge and Vikkels\o, Anders and Jensen, K K\o lb\ae k and Fathima, K A and Unnikrishnan, A K and Dci, T}, -booktitle = {Measurement}, -isbn = {8755026761}, -number = {April}, -title = {{Power Quality and Integration of Wind Farms in Weak Grids in India}}, -volume = {1172}, -year = {2000} -} -@book{Graziani2000, -author = {Graziani, Giovanni and Galmarini, Stefano and Ispra, J R C}, -isbn = {8755026826}, -number = {January}, -title = {{RTMOD : Real-Time MODel Evaluation}}, -volume = {1174}, -year = {2000} -} -@book{Larsen2000, -author = {Larsen, S\o ren E and Skrumsager, Birthe}, -booktitle = {Wind Energy}, -isbn = {8755026575}, -number = {June}, -title = {{Annual Progress Report for 1999 Wind Energy and Atmospheric Physics Department}}, -volume = {1161}, -year = {2000} -} -@article{Kristensen1999, -author = {Kristensen, Leif and Jensen, Gunnar}, -journal = {Analysis}, -keywords = {ATMOSPHERIC PRESSURE,BAROMETERS,DENMARK,DRAG,GEODESY,VELOCITY,WIND}, -number = {November}, -title = {{in Denmark : a preliminary study}}, -volume = {1145}, -year = {1999} -} -@article{Ed1999, -author = {Ed, Henrik Bindner}, -isbn = {8755025463}, -number = {March}, -title = {{Power Control for Wind Turbines in Weak Grids : Project summary}}, -volume = {1117}, -year = {1999} -} -@article{Hans1999, -author = {Hans, E J and Nielsen, Morten}, -journal = {Transformation}, -number = {June}, -title = {{Lidar data used in the COFIN project}}, -volume = {1127}, -year = {1999} -} -@book{Bindner1999, -author = {Bindner, Henrik}, -booktitle = {Control}, -isbn = {8755025501}, -number = {March}, -title = {{Power Control for Wind Tur- bines in Weak Grids : Concepts Development}}, -volume = {1118}, -year = {1999} -} -@article{Johansen1999, -author = {Johansen, Jeppe}, -journal = {October}, -number = {October}, -title = {{Unsteady Airfoil Flows with Application to Aeroelastic Stability}}, -volume = {1116}, -year = {1999} -} -@book{Airfoils1999, -author = {Airfoils, Ris\o-a- and Fuglsang, Peter and Dahl, Kristian S and Antoniou, Ioannis and Morbech, Kaj and Slot, Mark}, -isbn = {8755025382}, -number = {June}, -pages = {1--102}, -title = {{FINAL}}, -volume = {1112}, -year = {1999} -} -@book{Larsen1999, -author = {Larsen, Gunner Chr and Ronold, Knut and J\o rgensen, Hans E}, -isbn = {8755025366}, -number = {April}, -title = {{Ultimate Loading of Wind Turbines}}, -volume = {1111}, -year = {1999} -} -@book{Sørensen2001a, -author = {S\o rensen, Poul and Koulouvari, Maria and Larsson, \AA ke}, -booktitle = {Power Quality}, -isbn = {8755024947}, -number = {May}, -title = {{European Wind Turbine Testing Procedure Developments Task 2 : Power Quality Task coordinator Project coordinator Ris\o National Laboratory , Roskilde}}, -volume = {1093}, -year = {2001} -} -@article{Kristensen1999a, -author = {Kristensen, Leif and Rathmann, Ole and Hansen, Svend Ole}, -journal = {Analysis}, -number = {February}, -title = {{Extreme Winds in Denmark}}, -year = {1999} -} -@article{Dp, -author = {Dp, Uddp Y D Q}, -isbn = {8755024653}, -title = {{0HWKRGV IRU 3UREDELOLVWLF ' HVLJQ RI : LQG 7XUELQHV}}, -volume = {5} -} -@book{Bak1999, -author = {Bak, Christian and Fuglsang, Peter and S\o rensen, Niels N and Shen, Wen Zhong and S\o rensen, Jens N\o rk\ae r}, -isbn = {8755024157}, -number = {March}, -title = {{Airfoil Characteristics for Wind Turbines}}, -volume = {1065}, -year = {1999} -} -@article{Aaa, -author = {\'{A}\^{a}\~{a}, \~{A} \AA \AE \"{A} \~{A} \"{A}}, -title = {{No Title}} -} -@book{Bak1998, -author = {Bak, Christian and Madsen, Helge Aagaard and Fuglsang, Peter and Rasmussen, Flemming}, -isbn = {8755023797}, -number = {June}, -title = {{Double Stall}}, -volume = {1043}, -year = {1998} -} -@book{Fuglsang1998c, -author = {Fuglsang, Peter and Antoniou, Ioannis and Dahl, Kristian S and Madsen, Helge Aa}, -isbn = {8755023770}, -number = {December}, -title = {{Wind Tunnel Tests of the FFA-W3-241 , FFA-W3-301 and NACA 63-430 Airfoils}}, -volume = {1041}, -year = {1998} -} -@article{Mann1999, -author = {Mann, Jakob and Ott, S\o ren and Andersen, Jacob Sparre}, -journal = {Design}, -number = {September}, -title = {{Experimental Study of Relative , Turbulent Diffusion}}, -volume = {1036}, -year = {1999} -} -@article{Search2008, -author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Conf, I O P and Environ, Earth and Address, I P}, -doi = {10.1088/1755-1307/1/1/012059}, -journal = {Science}, -title = {{Remote sensing used for power curves}}, -volume = {012059}, -year = {2008} -} -@book{Rethore2009, -author = {R\'{e}thor\'{e}, Pierre-elouan}, -booktitle = {October}, -isbn = {9788755037854}, -keywords = {AAU-DCE thesis no. 22}, -number = {22}, -title = {{Wind Turbine Wake in Atmospheric Turbulence Ris\o-PhD-Report}}, -volume = {53}, -year = {2009} -} -@book{Jensen2008a, -author = {Jensen, Find M\o lholt}, -isbn = {9788755036345}, -number = {May}, -title = {{Ultimate strength of a large wind turbine blade}}, -volume = {34}, -year = {2008} -} -@article{Pedersena, -author = {Pedersen, Troels F}, -title = {{No Title}} -} -@article{Verelst2010, -author = {Verelst, Author David R S and Larsen, Torben J}, -isbn = {9788755038059}, -keywords = {Wind Energy Division, August 2010}, -number = {August}, -title = {{Load Consequences when Sweeping Blades - A Case Study of a 5 MW Pitch Controlled Wind Turbine Ris\o-R-Report}}, -volume = {1724}, -year = {2010} -} -@book{Rozenn2010, -author = {Rozenn, Wagner and Michael, Courtney S and Torben, Larsen J and Uwe, Paulsen S and Rozenn, Author Wagner and Michael, Courtney S and Torben, Larsen J and Uwe, Paulsen S}, -booktitle = {Wind Energy}, -isbn = {9788755038011}, -number = {January}, -title = {{Simulation of shear and turbulence impact on wind turbine performance Ris\o-R-Report}}, -volume = {1722}, -year = {2010} -} -@book{Hasager2009, -author = {Hasager, Charlotte and Pe\~{n}a, Alfredo and Mikkelsen, Torben and Courtney, Mike and S\o rensen, Paul B and Hasager, Charlotte and Pe\~{n}a, Alfredo and Mikkelsen, Torben and Gryning, Erik and Courtney, Mike and S\o rensen, Paul B}, -booktitle = {October}, -isbn = {9788755037465}, -keywords = {June 2009,Ris\o Naitonal Laboratory for Sustainable Eenrgy}, -number = {June}, -title = {{12MW : final report Ris\o-R-Report}}, -volume = {1690}, -year = {2009} -} -@book{Wagner2009a, -author = {Wagner, Rozenn and Courtney, Michael and Wagner, Author Rozenn and Courtney, Michael}, -isbn = {9788755037328}, -keywords = {February 2009}, -number = {February}, -title = {{Multi-MW wind turbine power curve measurements using remote sensing instruments – the first H\o vs\o re campaign Ris\o-R-Report}}, -volume = {1679}, -year = {2009} -} -@article{Lemming2008a, -author = {Lemming, J\o rgen and Morthorst, Poul Erik and Clausen, Niels-erik and En, Ris\o-r- and Morthorst, Poul Erik and Clausen, Niels-erik}, -isbn = {9788755037250}, -journal = {Power}, -keywords = {January 2008}, -number = {January}, -title = {{Offshore Wind Power Experiences , Potential and Key Issues for Deployment}}, -volume = {1673}, -year = {2008} -} -@book{Andersen2010, -author = {Andersen, Peter Bj\o rn}, -booktitle = {Wind Energy}, -isbn = {9788755038240}, -keywords = {February 2010}, -number = {February}, -title = {{Advanced Load Alleviation for Wind Turbines using Adaptive Trailing Edge Flaps : Sensoring and Control Ris\o-PhD-Report}}, -volume = {61}, -year = {2010} -} -@book{Pedersen2002, -author = {Pedersen, Troels Friis and Ingham, Peter and J\o rgensen, Henrik Kanstrup}, -isbn = {8755030289}, -number = {April}, -title = {{Wind Turbine Power Performance Verification in Complex Terrain and Wind Farms Ris\o National Laboratory , Roskilde}}, -volume = {1330}, -year = {2002} -} -@book{Wagner2010, -author = {Wagner, Rozenn}, -booktitle = {Network}, -isbn = {9788755038165}, -number = {April}, -title = {{turbine power performance measurement Ris\o-PhD-Report}}, -volume = {58}, -year = {2010} -} -@book{Rethore2009a, -author = {R\'{e}thor\'{e}, Pierre-elouan}, -booktitle = {October}, -isbn = {9788755037854}, -keywords = {AAU-DCE thesis no. 22}, -number = {22}, -title = {{Wind Turbine Wake in Atmospheric Turbulence Ris\o-PhD-Report}}, -volume = {53}, -year = {2009} -} -@book{Bingol2009, -author = {Bing\"{o}l, Ferhat}, -isbn = {9788755037755}, -keywords = {Wind Energy Division, Ris\o National Laboratory for Sustainable Energy}, -number = {August}, -title = {{Ris\o-PhD-Report}}, -volume = {52}, -year = {2009} -} -@book{Broe2009, -author = {Broe, Brian Riget}, -booktitle = {Energy}, -isbn = {9788755037274}, -keywords = {December 2009,Ris\o National Laboratory for Sustainable Energy}, -title = {{Wind Turbines : Unsteady Aerodynamics and Inflow Noise Ris\o-PhD-Report}}, -volume = {47}, -year = {2009} -} -@book{Jensen2008b, -author = {Jensen, Find M\o lholt}, -isbn = {9788755036345}, -number = {May}, -title = {{Ultimate strength of a large wind turbine blade}}, -volume = {34}, -year = {2008} -} -@book{Christensen1986, -author = {Christensen, C J and Dragt, J B and Carlson, O and Derdelinkx, I R and Hunter, R and Infield, D and Lodge, M A and Meel, J Van and Lysen, E and Kieft, K and Molly, J P and Paulsen, U S}, -booktitle = {Communities}, -isbn = {8755013074}, -number = {November}, -title = {{Accuracy of Power Curve Measurements}}, -year = {1986} -} -@article{Rethore2010, -author = {R\'{e}thor\'{e}, P and S\o rensen, N N and Zahle, F}, -journal = {Wind Energy}, -number = {April}, -pages = {4000}, -title = {{Validation of an Actuator Disc Model}}, -year = {2010} -} -@article{Rathmann, -author = {Rathmann, Ole and Frandsen, Sten and Nielsen, Morten}, -pages = {1--16}, -title = {{Wake decay for the infinite wind turbine array}} -} -@article{Castellani, -author = {Castellani, Francesco and Faina, Nicola and Franceschini, Giordano}, -journal = {Wind Energy}, -keywords = {annual energy production,power curve,turbine operation}, -title = {{: annual energy production, power curve, turbine operation. S}} -} -@article{Devices2005, -author = {Devices, Monitoring}, -journal = {Wind Energy}, -title = {{Rules and Guidelines Industrial Services Guideline for the Certification of Offshore Wind Turbines Safety System , Protective and Monitoring Devices}}, -year = {2005} -} -@article{Johansen2009b, -author = {Johansen, Nick A and Frandsen, Sten T and Hansen, Barthelmie Kurt S and Jensen, Leo E and Kristoffersen, R}, -journal = {Wind Energy}, -pages = {1--10}, -title = {{Systematic wind farm measurement data reinforcement tool for wake model calibration .}}, -year = {2009} -} -@book{Troldborg2008a, -author = {Troldborg, Niels}, -isbn = {9788789502809}, -title = {{Actuator Line Modeling of Wind Turbine Wakes by}}, -year = {2008} -} - -@article{Barthelmie2010, -author = {Barthelmie, R J and Dtu, Ris\o}, -journal = {Wind Energy}, -number = {April}, -pages = {828655}, -title = {{Universal benchmarks for wind turbine wake and wind farm models Abstract The Virtual Wakes Laboratory Types of wake data Benchmarks for single wakes Access Benchmarks for multiple wakes Exercise variables}}, -year = {2010} -} -@article{Gilling2008, -author = {Gilling, Lasse}, -journal = {Methods}, -keywords = {actuator,airfoil,detached eddy simulation,forcing,freestream resolved turbulence}, -pages = {1--9}, -title = {{Imposing Resolved Turbulence by an Actuator in a Detached Eddy Simulation of an Airfoil}}, -year = {2008} -} -@article{Bechmann, -author = {Bechmann, Andreas and Zhale, Frederik}, -journal = {Wind Energy}, -pages = {1--9}, -title = {{Study of the atmospheric wake turbulence of a CFD actuator disc model}} -} -@article{Nielsen2009, -author = {Nielsen, Morten and J\o rgensen, Hans E and Frandsen, Sten T}, -journal = {Wind Energy}, -title = {{Wind and wake models for IEC 61400-1 site assessment}}, -year = {2009} -} -@article{Ott, -author = {Ott, S\o ren and Sogachev, Andrey and Mann, Jakob and J\o rgensen, Hans E and Frandsen, Sten T}, -journal = {Wind Energy}, -title = {{Applying Flow Models of Different Complexity for Estimation of Turbine Wakes .}} -} -@article{Rethorea, -author = {R\'{e}thor\'{e}, Pierre-elouan and Zahle, Frederik and S\o rensen, Niels N}, -title = {{Comparison of an actuator disc model with a full Rotor CFD model under uniform and shear inflow condition Comparison p of an Actuator Disc model with a Full rotor computation}} -} -@article{Farm1995, -author = {Farm, Wind}, -journal = {Wind Energy}, -title = {6 0 6\&}, -year = {1995} -} -@article{Prowell2009, -author = {Prowell, Ian and Veers, Paul}, -journal = {Power}, -number = {March}, -title = {{Assessment of Wind Turbine Seismic Risk : Existing Literature and Simple Study of Tower Moment Demand}}, -year = {2009} -} -@article{Wahl, -author = {Wahl, David}, -journal = {Energy}, -title = {{Ice Shedding and Ice Throw – Risk and Mitigation}} -} -@article{Iv1998, -author = {Iv, Boreas}, -journal = {Boreas}, -number = {April}, -pages = {113--121}, -title = {{BOREAS IV 31 March - 2 April 1998, Hetta, Finland 113}}, -year = {1998} -} -@article{Coursea, -author = {Course, Learning}, -journal = {Renewable Energy}, -title = {{Insurance Risk Management for Renewable Energy Projects Module 3 – Underwriting Guidelines and Policy}} -} -@article{Inf2006, -author = {Inf, Dipl and Albrecht, Carsten and Gmbh, Al-pro and Kg, Co and Gro\ss heide, D-}, -journal = {World}, -pages = {1--5}, -title = {{FLUCTUATIONS IN ANNUAL WIND ENERGY POTENTIAL A METHOD FOR RISK ANALYSIS AND LONG TERM CORRELATION}}, -year = {2006} -} -@article{Courseb, -author = {Course, Learning}, -journal = {Renewable Energy}, -title = {{Insurance Risk Management for Renewable Energy Projects Module 6 – Case Study Risk Assessment for a 100 . 5 MW Wind Farm in Jilin Province , China Overview}} -} -@article{Abdelli2007, -author = {Abdelli, Abdenour}, -journal = {System}, -keywords = {Cha\^{\i}ne \'{e}olienne de petite puissance - Approche syst\`{e}me - Optimisation - Algorithmes g\'{e}n\'{e}tiques - Mod\`{e}les moyens - Sensibilit\'{e} - Profil du vent - Robustesse. KEYWORDS : Small Wind Turbine - System Approach - Optimization - Genetic Algorithms - Sensitivity}, -title = {{Abdenour ABDELLI Optimisation multicrit\`{e}re d ’ une cha\^{\i}ne \'{e}olienne passive Remerciements}}, -year = {2007} -} -@article{Notesc, -author = {Notes, Technical}, -journal = {Power}, -title = {{PicoTurbine Windmill Plans and Experiments}} -} -@article{Mirecki2005, -author = {Mirecki, Adam}, -journal = {Recherche}, -keywords = {Eolien – MPPT – Mod\'{e}lisation - Gestion d’\'{e}nergie – Architecture}, -title = {{Etude comparative de cha\^{\i}nes de conversion d’\'{e}nergie d\'{e}di\'{e}es \`{a} une \'{e}olienne de petite puissance}}, -year = {2005} -} -@article{De2007, -author = {De, L E Titre D E Docteur}, -keywords = {Macrosimulation OES - Turbulence - Instationnarit\'{e} forc\'{e}e - D\'{e}collement - Eolienne - -Mod\'{e}lisation hybride - Cylindre - Corps de Ahmed - Profil d'aile. KEYWORDS : Macrosimulation OES - Turbulence - Forced unsteadyness - Detachment - Wind -turbine - Hybrid}, -title = {{Analyse physique et mod\'{e}lisation d ’ \'{e}coulements instationnaires turbulents autour de profils oscillants et d ’ \'{e}oliennes}}, -year = {2007} -} -@article{Akoury2007, -author = {Akoury, Rajaa El}, -keywords = {Rotation – Turbulence – P.O.D. – Macrosimulation OES – Analyse num\'{e}rique – Mod\'{e}lisation – A\'{e}ronautique – Machines tournantes}, -title = {{Analyse physique des effets de rotation de paroi en \'{e}coulements transitionnels et mod\'{e}lisation d'\'{e}coulements turbulents autour de structures portantes}}, -year = {2007} -} -@article{Lindholm, -author = {Lindholm, Morten}, -title = {{Doubly Fed Drives for Variable Speed Wind Turbines}} -} -@article{Cehlin2009, -author = {Cehlin, Mathias and Mechanics, Fluid}, -title = {{CFD applications at Vattenfall R \& D}}, -year = {2009} -} -@article{Olsen2004, -author = {Olsen, T and Lang, E and Hansen, A C and Cheney, M C and Quandt, G and Vandenbosche, J and Meyer, T and Renewable, National}, -journal = {Baseline}, -number = {December}, -title = {{Low Wind Speed Turbine Project Conceptual Design Study : Advanced Independent Pitch Control Low Wind Speed Turbine Project Conceptual Design Study : Advanced Independent Pitch Control}}, -year = {2004} -} -@article{Systems2008, -author = {Systems, Northern Power}, -isbn = {3033847102}, -journal = {Renewable Energy}, -number = {March 2006}, -pages = {102006}, -title = {{Low Wind Speed Technology Phase II : Development of a 2-MW Direct-Drive Wind Turbine for Low Wind Speed Sites}}, -year = {2008} -} -@article{Technology2006, -author = {Technology, Clipper Windpower}, -isbn = {8056903275}, -journal = {Renewable Energy}, -number = {March}, -pages = {102006}, -title = {{Low Wind Speed Technology Phase I : Clipper Turbine Development Project}}, -year = {2006} -} -@article{Shoufan1985, -author = {Shoufan, Gao and Jianguo, Yin}, -journal = {Irrigation and Drainage}, -number = {1}, -pages = {374--380}, -title = {{Bibliographie}}, -volume = {9}, -year = {1985} -} -@article{Monde, -author = {Monde, Tiers}, -title = {{Energie solaire}} -} -@article{Vert1900, -author = {Vert, Cap}, -title = {{ENERGIE EOLIENNE}}, -year = {1900} -} -@article{Gpl1979, -author = {Gpl, Le}, -title = {{Moteurs a combustion interne}}, -year = {1979} -} -@article{Mondiale1986, -author = {Mondiale, Banque}, -pages = {214--222}, -title = {{Energie electrique}}, -year = {1986} -} -@article{Machines, -author = {Machines, L E S and En, Motrice and Qu, Tant and Une, Element D and Pompage, Installation D E}, -pages = {157--168}, -title = {{Chapitre 4 Alimentation en \'{e}nergie des installations de pompage}} -} -@article{Project, -author = {Project, Water Buffalo and Persane, Roue and Indes, Aux}, -pages = {184--192}, -title = {{Force motrice animale}} -} -@article{De, -author = {De, Pompes}, -pages = {111--137}, -title = {{POMPES ROTO-DYNAMIQUES}} -} -@article{Elevation, -author = {Elevation, Principes D and Ecoulement, E T D and Eaux, D E S}, -title = {{Chapitre 3 Rappel des types de pompes et des techniques d ' \'{e}l\'{e}vation de l ' eau}} -} -@article{Humphrey, -author = {Humphrey, Pompe}, -title = {{Pompes volumetriques rotatives}} -} -@article{Generaux, -author = {Generaux, Principes and Eau, D Elevation D E L}, -journal = {Techniques}, -title = {{Chapitre 2 Techniques d ' \'{e}l\'{e}vation de l ' eau pour l ' irrigation}} -} -@article{Fraenkel, -author = {Fraenkel, P L and Technology, Intermediate}, -isbn = {9252025154}, -journal = {Reading}, -title = {{ii BULLETIN FAO D ' IRRIGATION ET DE DRAINAGE 43 Les machines \'{e}l\'{e}vatoires Organisation des Nations Unies pour l ' alimentation et l ' agriculture Rome ,}} -} -@article{Et1956, -author = {Et, L Objet and Portee, L A and Bulletin, D E C E and Irrigation, L Importance Accrue D E L}, -pages = {1--5}, -title = {{Chapitre 1 Introduction L ' OBJET ET LA PORTEE DE CE BULLETIN L ' IMPORTANCE ACCRUE DE L ' IRRIGATION L ' IRRIGATION ET LA CRISE DE L ' ENERGIE}}, -year = {1956} -} -@article{Calculation, -author = {Calculation, Data and Windpump, O F and Using, Output and Wind, Windspeed and Total, Annual}, -pages = {238--259}, -title = {{Windpump Performance Estimation}}, -volume = {130} -} -@article{Per, -author = {Per, Power and Area, Unit and Wind, O F}, -pages = {212--227}, -title = {{Principles of Wind Energy Conversion}} -} - - - -@book{Hansen2001b, -author = {Hansen, L H and Helle, L and Blaabjerg, F and Ritchie, E and Bindner, H and S\o rensen, P}, -booktitle = {Design}, -isbn = {8755027431}, -number = {December}, -title = {{Conceptual survey of Generators and Power Electronics for Wind Turbines}}, -volume = {1205}, -year = {2001} -} -@article{The1900, -author = {The, Background and Verde, Cape and American, The and American, North and Plains, Great and Us, The}, -pages = {199--211}, -title = {199 4.7}, -year = {1900} -} -@article{Report2009a, -author = {Report, Global Wind}, -title = {{Global wind 2009 report}}, -year = {2009} -} -@article{Pedersen2006a, -author = {Pedersen, T F}, -journal = {Renewable Energy}, -number = {March}, -title = {{Evaluation and Classification of Cup and Sonic Anemometry}}, -year = {2006} -} -@article{Engelen2006, -author = {Engelen, T G Van}, -journal = {Wind Energy}, -keywords = {control design model,higher harmonics control,individual pitch control,rotational modes}, -number = {March}, -title = {{Design model and load reduction assessment for multi-rotational mode individual pitch control ( higher harmonics control )}}, -year = {2006} -} -@article{Vebruggen2004, -author = {Vebruggen, T W and Werff, P A Van Der and Korterink, H and Richon, D and Rey, P and Lancon, F}, -number = {November}, -pages = {22--25}, -title = {{FIBER OPTIC BLADE MONITORING}}, -year = {2004} -} -@article{Hooft, -author = {Hooft, E L Van Der and Engelen, T G Van and Schaak, P and Wiggelinkhuizen, E J}, -journal = {Design}, -title = {{Design tool for wind turbine control algorithms}} -} -@article{Eecen2006, -author = {Eecen, P J and Braam, H}, -journal = {Wind Energy}, -number = {March}, -title = {{DEVELOPEMENT OF OPERATIONS AND MAINTENANCE COST ESTIMATOR}}, -year = {2006} -} -@article{Schaak2004, -author = {Schaak, P and Engelen, T G Van}, -journal = {Wind Energy}, -keywords = {control,converter,generator,power,torque,variable speed,wind turbine}, -number = {November}, -pages = {22--25}, -title = {{TORQUE CONTROL FOR VARIABLE SPEED WIND TURBINES}}, -year = {2004} -} -@article{Engelen2004, -author = {Engelen, T G Van}, -journal = {Wind Energy}, -number = {November}, -pages = {22--25}, -title = {{FREQUENCY DOMAIN LOAD CALCULATION FOR OFFSHORE WIND TURBINES ( TURBU OFFSHORE )}}, -year = {2004} -} -@article{Corten2004, -author = {Corten, G P and Brand, A J}, -journal = {Wind Energy}, -number = {November}, -pages = {22--25}, -title = {{RESOURCE DECREASE BY LARGE SCALE WIND FARMING}}, -year = {2004} -} -@article{Corten2004a, -author = {Corten, G P and Schaak, P and Hegberg, T}, -journal = {Wind Energy}, -number = {November}, -pages = {22--25}, -title = {{VELOCITY PROFILES MEASURED ABOVE A SCALED WIND FARM}}, -year = {2004} -} -@article{Production, -author = {Production, Wind Farm and Induction, Axial and Corten, P}, -journal = {Wind Energy}, -title = {{Heat and Flux}} -} -@article{Corten2004b, -author = {Corten, G P and Schaak, P}, -journal = {Wind Energy}, -number = {November}, -pages = {22--25}, -title = {{MORE POWER AND LESS LOADS IN WIND FARMS : " HEAT AND FLUX '}}, -year = {2004} -} -@article{Snel2004, -author = {Snel, H}, -journal = {Wind Energy}, -number = {November}, -pages = {22--25}, -title = {{APPLICATION OF A MODIFIED THEODORSEN MODEL TO THE ESTIMATION OF AERODYNAMIC FORCES AND AEROELASTIC STABILITY}}, -year = {2004} -} -@article{Lindenburga, -author = {Lindenburg, C and Snel, H}, -journal = {Analysis}, -keywords = {aerodynamic damping,blade vibrations,bladmode,eigenmodes,rotor blade,wind turbine}, -title = {{Aero-elastic stability analysis tools for large wind turbine rotor blades}} -} -@article{Bulder, -author = {Bulder, B H and Henderson, A and Huijsmans, R H M and Peeringa, J M}, -journal = {Structure}, -title = {{Floating OffShore Wind Turbines for Shallow waters}} -} -@article{Lindenburgb, -author = {Lindenburg, C}, -journal = {Engineering}, -keywords = {buckling,crostab,rotor blade,structural design,wind turbine}, -pages = {1--4}, -title = {{Programs for buckling strength prediction of rotor blades}} -} -@article{Schepers2003, -author = {Schepers, J G and Rooij, R Van and Bruining, A}, -journal = {Database}, -keywords = {aerodynamic modelling,experiments,wind turbines}, -pages = {1--8}, -title = {{Detailed aerodynamic measurements on wind turbines : Analyses of results}}, -year = {2003} -} -@article{Buldera, -author = {Bulder, B H and Schepers, J G}, -journal = {Wind Energy}, -keywords = {design tool,optimisation,wind turbine}, -pages = {1--3}, -title = {{A NALYSIS}} -} -@article{Corten2001, -author = {Corten, Gustave P}, -journal = {Energy}, -keywords = {1,boundary layer,heuristics of 3d-flow separation,stall rotation effects,three-dimensional flow effects}, -title = {{Inviscid Stall Model}}, -year = {2001} -} -@article{Centre2001, -author = {Centre, Energy and Petten, N L Z G}, -journal = {Behaviour}, -keywords = {double stall,insect accumulation,stall flags}, -pages = {2--5}, -title = {{Insects Cause Double Stall}}, -year = {2001} -} -@article{Lindenburg2001, -author = {Lindenburg, C}, -number = {January}, -pages = {1--18}, -title = {{Aerodynamic airfoil coefficients at large angeles of attrak}}, -year = {2001} -} -@article{Ozdemir2010, -author = {Ozdemir, H}, -number = {September}, -pages = {13--16}, -title = {{Development of a discontinuous Galerkin method for the unsteady integral boundary layer equations}}, -year = {2010} -} -@article{Engels2010, -author = {Engels, W P and Kanev, S K and Engelen, T G Van}, -journal = {Control}, -number = {October}, -title = {{Distributed Blade Control}}, -year = {2010} -} -@book{Brand2010, -author = {Brand, A J and Wagenaar, J W}, -booktitle = {Brand}, -isbn = {8755028705}, -number = {June}, -title = {{Validation of a quasi-steady wind farm flow model in the context of distributed control of the wind farm}}, -year = {2010} -} -@article{Bot2010, -author = {Bot, E T G}, -journal = {Wind Energy}, -number = {April}, -title = {{Improvements to the ECN wind farm optimisation software ‘ FarmFlow ’ ECN wind farm optimisation software ‘ FarmFlow ’}}, -year = {2010} -} -@article{Sanderse2009, -author = {Sanderse, B}, -journal = {Simulation}, -number = {October}, -pages = {20--22}, -title = {{Energy preservation in the numerical calculation of wind turbine wakes}}, -year = {2009} -} -@article{Brand2009, -author = {Brand, A J}, -journal = {Brand}, -number = {September}, -pages = {14--16}, -title = {{Wind farm design - When other wind farms are close}}, -year = {2009} -} -@article{Wagenaar2010, -author = {Wagenaar, J W}, -journal = {Renewable Energy}, -number = {February}, -title = {{SODARs and WISE guys}}, -year = {2010} -} -@article{Peeringa2009, -author = {Peeringa, J}, -journal = {Wind Energy}, -number = {March}, -pages = {16--19}, -title = {{Comparison of extreme load extrapolations using measured and calculated loads of a MW wind turbine}}, -year = {2009} -} -@article{Braam2009, -author = {Braam, H and Obdam, T S}, -journal = {Offshore (Conroe, TX)}, -pages = {14--16}, -title = {{Operation and maintenance cost estimator ( OMCE ) to estimate the future O \& M costs of offshore wind farms}}, -year = {2009} -} -@article{Kanvev2009, -author = {Kanvev, S K and Engelen, T G Van}, -journal = {Wind Energy}, -number = {March}, -pages = {16--19}, -title = {{Exploring the Limits in Individual Pitch Control}}, -year = {2009} -} -@article{Bijleveld2009, -author = {Bijleveld, H A}, -journal = {Wind Energy}, -pages = {1--6}, -title = {{Quasi-simultaneous interaction for prediction of aerodynamic flow over wind turbine blades}}, -year = {2009} -} -@article{Braam2008, -author = {Braam, H and Obdam, T S}, -keywords = {cost estimation,offshore wind energy,operation and maintenance}, -pages = {1--10}, -title = {{Estimating costs of operation \& maintenance for offshore wind farms}}, -volume = {2008}, -year = {2008} -} -@article{Brand2009a, -author = {Brand, A J}, -journal = {Wind Energy}, -number = {February}, -pages = {16--19}, -title = {{The effect of wind farming on mesocale flow Validation and prediction}}, -year = {2009} -} -@article{Obdam2008, -author = {Obdam, T S and Lloyd, P Frohb\"{o}se Germanischer and Hamburg, N Kruse H A W}, -title = {{Tools for estimating operation and maintenance costs of offshore wind farms : State of the Art}}, -volume = {2008}, -year = {2008} -} - - -@article{Engelen2008, -author = {Engelen, T G Van}, -journal = {Signal Processing}, -keywords = {aero-elastic modeling,load reduction,wind turbine control}, -title = {{Modern wind turbine controller design}}, -year = {2008} -} -@article{Obdam2007, -author = {Obdam, Tom}, -journal = {Wind Energy}, -title = {{Estimating Costs of Operation \& Maintenance for Offshore Wind Farms}}, -year = {2007} -} -@article{Schepers2007, -author = {Schepers, J G and Curvers, A and Oerlemans, S and Braun, K and Lutz, T and Herrig, A and Wuerz, W and Mantesanz, A and Fischer, M and Koegler, K and Maeder, T}, -journal = {Aerospace}, -title = {{SIROCCO : Silent rotors by acoustic optimisation}}, -year = {2007} -} -@article{Wiggelinkhuizen, -author = {Wiggelinkhuizen, E J and Boon, H J Den and Project, E-connection and Dirksen, S and Waardenburg, Bureau}, -journal = {Test}, -pages = {1--4}, -title = {{WT-BIRD ® : BIRD COLLISION MONITORING SYSTEM FOR MULTI-MEGAWATT WIND TURBINES}} -} -@article{Eecen, -author = {Eecen, P J and Braam, H and Obdam, T S}, -pages = {7--10}, -title = {{Estimating costs of operations and maintenance of offshore wind farms}} -} -@article{Snel2007, -author = {Snel, Herman}, -title = {{A short history of wind turbine aerodynamics , or : From Betz to Better}}, -year = {2007} -} -@article{Eecena, -author = {Eecen, P J and Korterink, H and Pijl, S P Van Der and Schepers, J G}, -journal = {Test}, -pages = {7--10}, -title = {{ECN test farm measurements for validation of wake models}} -} -@article{Herman2002, -author = {Herman, S A}, -keywords = {cost model,offshore,owecop,probabilistic model,risk,wind energy}, -number = {May}, -title = {{PROBABILISTIC COST MODEL FOR ANALYSIS OF OFFSHORE WIND ENERGY COSTS AND POTENTIAL}}, -year = {2002} -} -@article{Herman2002a, -author = {Herman, S A}, -keywords = {cable,cost model,costs,foundation,installation,offshore,removal,scour,sea state,soil,transport,vessels,weather window,weibull,wind energy}, -title = {{Analysis of Transport and Installation Costs}}, -year = {2002} -} -@article{Practices2010, -author = {Practices, Recommended and Train, Drive}, -journal = {Framework}, -number = {September}, -pages = {1--81}, -title = {{Recommended Practices for Measuring in Situ the}}, -year = {2010} -} -@article{Engels2009, -author = {Engels, Wouter and Obdam, Tom and Savenije, Feike}, -journal = {Current}, -title = {{Current developments in wind - 2009}}, -year = {2009} -} -@article{Variables2010, -author = {Variables, Critical Design}, -journal = {Design}, -number = {January}, -title = {{Determination of Load Cases and Critical Design Variables}}, -year = {2010} -} -@article{Manuala, -author = {Manual, User}, -title = {{Blade Optimization Tool}} -} -@article{Rademakers, -author = {Rademakers, L W M M}, -journal = {Distribution}, -title = {{Flight Leader Concept for Wind Farm Load Counting Final Report}} -} -@article{Verbruggen, -author = {Verbruggen, T W}, -title = {{Load monitoring for wind turbines Fibre optic sensing and data processing}} -} -@article{Sea, -author = {Sea, Turbu and Savenije, F J}, -title = {{Aero-elastic simulation of offshore wind turbines in the frequency domain}} -} -@article{Schepersa, -author = {Schepers, J G}, -journal = {Framework}, -title = {{Analysis of 4.5 years EWTW wake measurements}} -} -@article{Sea-project2007, -author = {Sea-project, We}, -journal = {Energy}, -title = {{Extreme loads using measured and calculated responses for offshore applications}}, -year = {2007} -} -@article{Brand, -author = {Brand, A J}, -journal = {Brand}, -title = {{Wind Power Plant North Sea - Wind Farm Interaction The effect of wind farming on mesoscale fl ow}} -} -@article{Reporta, -author = {Report, Final}, -title = {{Operation and Maintenance Cost Estimator ( OMCE )}} -} -@article{Eecen2009, -author = {Eecen, P J}, -journal = {Contract}, -number = {December}, -title = {{Measurements of Wind , Wave and Currents at the Offshore Wind Farm Egmond aan Zee}}, -year = {2009} -} -@book{Windc, -author = {Wind, I E A and Xx, Task}, -booktitle = {Energy}, -isbn = {2020021110005}, -title = {{Analysis of aerodynamic measurements on a model wind turbine placed in the NASA-Ames tunnel ECN ’ s and TUD ’ s contribution to IEA Wind Task XX}} -} -@article{Engelen, -author = {Engelen, Tim Van}, -keywords = {blade-effective wind speeds,extreme event,wind direction estimation,wind speed estimation,wind speed estimation, wind direction estimation, blade-effective wind speeds, extreme event recognition, extreme event control, load reduction.}, -title = {{Wind Turbine Extreme Gust Control Recognition and Control of extreme operation gusts and wind direction changes}} -} -@article{Pierik, -author = {Pierik, J T G and Bauer, P}, -journal = {Power}, -keywords = {farm models,offshore wind,offshore wind farm control,offshore wind farm dynamics,offshore wind farm electrical,systems}, -title = {{Wind Farm as Power Plant Dynamic modelling studies}} -} -@article{Barth, -author = {Barth, S and Bot, E T G and Hendriks, H B}, -title = {{Evaluation of “ Heat and Flux †Farm Control - Final Report -}} -} -@article{Rotors2002, -author = {Rotors, Silent and Optimisation, Acoustic and Ustutt, Stuttgart}, -number = {September 2007}, -pages = {1--15}, -title = {{Inal eport}}, -year = {2002} -} -@article{Selvam, -author = {Selvam, Kausihan}, -title = {{Individual Pitch Control for Large scale wind turbines Multivariable control approach}} -} -@article{Hooft2007, -author = {Hooft, E L Van Der and Engelen, T G Van and Schaak, P}, -journal = {Control}, -keywords = {control,modelling,simulation,wind energy,wind turbine}, -number = {June}, -title = {{Real-time Process Simulator for Evaluation of Wind Turbine Control Systems}}, -year = {2007} -} -@article{Manual2006, -author = {Manual, User}, -number = {December}, -title = {{ECN Educational Wind Turbine Control Toolbox}}, -year = {2006} -} -@article{Lindenburgc, -author = {Lindenburg, C}, -journal = {Design}, -title = {{Buckling load prediction tools for rotor blades}} -} -@article{Schaak, -author = {Schaak, P}, -title = {{Heat \& Flux Enabling the Wind Turbine controller}} -} -@article{Eecen2005, -author = {Eecen, P J and Noord, M De}, -journal = {Contract}, -number = {June}, -title = {{Uncertainties in Cup Anemometer Calibrations Type A and Type B uncertainties}}, -year = {2005} -} -@article{Rooij2005, -author = {Rooij, Van}, -number = {June}, -title = {{Final report of the Annexlyse project Analysis of aerodynamic field measurements on}}, -year = {2005} -} -@article{Bladknik, -author = {Bladknik, Dutch}, -journal = {Design}, -title = {{State of the art of rotor blade buckling tools Inventory of the Dutch BLADKNIK project}} -} -@article{Curvers2005, -author = {Curvers, A and Antoniou, I and Bradley, S}, -number = {April}, -title = {{Sodar Power Performance measurements}}, -year = {2005} -} -@article{Schepers2004, -author = {Schepers, J G}, -journal = {Analysis}, -keywords = {design codes,turbines,validation of wind turbine,yaw aerodynamics of wind}, -number = {September}, -title = {{ANNEXLYSE : VALIDATION OF YAW MODELS , ON BASIS OF DETAILED AERODYNAMIC MEASUREMENTS ON WIND TURBINE BLADES}}, -year = {2004} -} -@article{Report2004, -author = {Report, Final Project}, -isbn = {2020021110}, -number = {June}, -title = {{IEA ANNEX XVII INTERNATIONAL DATABASE ON Final Project Report}}, -year = {2004} -} -@article{Pierik2004, -author = {Pierik, G and Morren, J and Wiggelinkhuizen, J and Bozelie, J}, -journal = {Offshore (Conroe, TX)}, -number = {March}, -pages = {1--133}, -title = {{Electrical and Control Aspects of Offshore Wind Farms II ( Erao II )}}, -volume = {2}, -year = {2004} -} -@article{Ecn2004, -author = {Ecn, J T G Pierik}, -journal = {Distribution}, -number = {June}, -title = {{Electrical and Control Aspects of Offshore Wind Farms II ( Erao II )}}, -volume = {1}, -year = {2004} -} -@article{Measurements2004, -author = {Measurements, Wind Tunnel}, -number = {August}, -title = {{TURBINE INTERACTION IN LARGE}}, -year = {2004} -} -@article{Verhoef2004, -author = {Verhoef, J P and Eecen, P J and Nijdam, R J and Korterink, H and Scholtens, H H}, -number = {April}, -title = {{WT-Bird A Low Cost Solution for Detecting Bird Collisions}}, -year = {2004} -} -@article{Farm2004, -author = {Farm, Wind}, -journal = {Offshore (Conroe, TX)}, -number = {August}, -title = {{Turbine Interaction in Large Offshore Wind Farms}}, -year = {2004} -} - - - -@book{Eecen2004, -author = {Eecen, P J}, -booktitle = {October}, -isbn = {2020021110}, -number = {February}, -pages = {1--231}, -title = {{Measurements at 50m Meteorological Mast at ECN , Petten}}, -year = {2004} -} -@article{Engelena, -author = {Engelen, T G Van and Hooft, E L Van Der}, -title = {{Individual Pitch Control Inventory}} -} -@article{Peeringa2003, -author = {Peeringa, J M}, -number = {December}, -title = {{Extrapolation of extreme responses of a multi megawatt wind turbine}}, -year = {2003} -} -@article{Survey2003, -author = {Survey, A Literature}, -isbn = {2020021320008}, -journal = {Time}, -number = {December}, -title = {{INTEGRAL BOUNDARY LAYER METHODS FOR WIND TURBINE AERODYNAMICS A Literature Survey}}, -year = {2003} -} -@article{Hooft2003, -author = {Hooft, E L Van Der and Schaak, P and Engelen, T G Van}, -number = {December}, -title = {{Wind turbine control algorithms}}, -year = {2003} -} -@article{Eecen2003, -author = {Eecen, P J}, -number = {September}, -title = {{Forces due to waves on offshore wind turbines}}, -year = {2003} -} -@article{Garrel2003, -author = {Garrel, A Van}, -journal = {Energy}, -number = {August}, -title = {{DEVELOPMENT OF A WIND TURBINE AERODYNAMICS SIMULATION MODULE}}, -year = {2003} -} -@article{Lindenburg2003a, -author = {Lindenburg, C}, -keywords = {airfoil coefficients,deep stall,rotational augmentation,rotor aerodynamics,tip-loss models,wind turbine}, -number = {July}, -title = {{Investigation into Rotor Blade Aerodynamics Analysis of the stationary measurements on the UAE phase-VI rotor in the NASA-Ames wind tunnel}}, -year = {2003} -} -@article{Lindenburg2003b, -author = {Lindenburg, C}, -journal = {Analysis}, -keywords = {aeroelastic stability}, -number = {June}, -title = {{Aeroelastic Analysis of the LMH64-5 Blade Concept}}, -year = {2003} -} -@article{Bv2002, -author = {Bv, Genius Vos}, -number = {June}, -title = {{Lightning Damage of OWECS Part 3 : “ Case Studies â€}}, -year = {2002} -} -@article{Ecn, -author = {Ecn, Frans Van Hulle and Ecn, Gwen Van Roekel and Arrakis, Jan De Jongh and Borchgrevink, Jan and Carlos, Juan and Nordteco, L\'{o}pez and Rica, Costa}, -journal = {Power}, -title = {{Evaluation of the environmental impact of the 20 MW wind power project in Tejona , Costa Rica Report of Phase 2 of the Tejona Wind Power Project ( TWPP )}} -} -@article{Lindenburg2003c, -author = {Lindenburg, C}, -number = {July}, -title = {{Program for Rotor Blade Mode Analysis}}, -year = {2003} -} -@article{Bv2002a, -author = {Bv, Genius Vos}, -number = {June}, -title = {{Lightning Damage of OWECS Part 1 : “ Parameters Relevant for Cost Modelling â€}}, -year = {2002} -} -@article{Report2001a, -author = {Report, Publishable Final}, -journal = {Contract}, -number = {November}, -pages = {1--20}, -title = {{PROBABILITY DISTRIBUTION OF FATIGUE STRENGTH OF ROTOR BLADES ( PROFAR ) Publishable Final Report}}, -year = {2001} -} -@article{Barhorst2001, -author = {Barhorst, S A M and Schepers, J G and Hagg, F}, -number = {August}, -title = {{Energy Research Centre of the Netherlands ECN by : * Stork Product Engineering}}, -year = {2001} -} -@article{Werff2001, -author = {Werff, P A Van Der}, -journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, -number = {October}, -title = {{Identification of Variables for Site Calibration and Power Curve Assessment in Complex Terrain SiteParIden}}, -year = {2001} -} -@book{Delft2010, -author = {Delft, T U}, -booktitle = {Brand}, -isbn = {9789537619817}, -number = {July}, -title = {{Variability and Predictability of Large-Scale Wind Eergy in the Netherlands}}, -year = {2010} -} -@article{Nqi1988, -author = {Nqi, Certtl and Livkovi, I}, -title = {{V v -1-}}, -year = {1988} -} -@article{Release2004a, -author = {Release, Unlimited and Locke, James and Valencia, Ulyses}, -journal = {Design}, -number = {June}, -title = {{DESIGN STUDIES FOR TWIST-COUPLED WIND TURBINE}}, -year = {2004} -} -@article{Lim2007, -author = {Lim, Kim Kiat}, -journal = {Design}, -pages = {1--69}, -title = {{Design of Wind Turbine}}, -year = {2007} -} -@article{Vihri2002, -author = {Vihri, Harri}, -journal = {October}, -keywords = {a variable speed,control,feed forward control,fixed pitch wind turbine,fuzzy,is,is difficult to control,it is,kalman filter,nonlinear control,stable at below rated,unstable as power output,variable speed,wind power plants,wind speeds but becomes,wind turbines}, -title = {{Control of Variable Speed Wind Turbines}}, -year = {2002} -} -@article{Riley2002, -author = {Riley, Autores William F and Sturges, Leroy D}, -pages = {1--2}, -title = {{Bibliograf\'{\i}a}}, -year = {2002} -} -@article{Dea, -author = {De, Ing\'{e}nieur and Nationale, \'{E}cole and \'{E}cole, De and De, Ing\'{e}nieur and Nationale, \'{E}cole and De, Directeur and A\'{e}rotechnique, Institut}, -journal = {Techniques}, -pages = {1--24}, -title = {{Philippe LECONTE}} -} -@book{Destruction, -author = {Destruction, N O T F O R}, -booktitle = {Fluid Dynamics}, -isbn = {9283600150}, -title = {{Agard 7}}, -volume = {10} -} -@article{Bia, -author = {Bia, Aerodynamique}, -pages = {1--8}, -title = {{Aerodynamique - 1 -}} -} -@article{Trajectoires, -author = {Trajectoires, Laminaire}, -title = {{Introduction \`{a} l ’ a\'{e}rodynamique Types de l ’ \'{e}coulement de l ’ air}} -} -@article{Blackwell1977, -author = {Blackwell, Ben F and Sheldahl, Robert E and Feltz, Louis V}, -title = {{Wind Tunnel Performance Data for TWO- and Three-Bucket Savonius Rotors}}, -year = {1977} -} -@article{Buhl2006a, -author = {Buhl, M L}, -journal = {Renewable Energy}, -keywords = {ADAMS,FAST,January 2006,NREL/CP-500-39113,design codes,wind turbine certification}, -title = {{A Comparison of Wind Turbine Aeroelastic Codes Used for Certification Preprint}}, -year = {2006} -} -@article{One, -author = {One, Chapter}, -pages = {1--138}, -title = {{Chapter one 1.0}} -} -@article{Patil, -author = {Patil, Yogesh M and Upadhyay, Sachinam H and Sangvikar, Neha S}, -title = {{Vertical Axis Wind Turbine Axial Field Generator}} -} -@article{Equations, -author = {Equations, Euler Turbine and Flow, Axial and Turbines, Gas and Compressors, Axial Flow and Temperature, Total}, -title = {{Velocity Vectors}} -} -@article{Gunnerson2009, -author = {Gunnerson, Fred}, -journal = {System}, -title = {{Energy gy \& Momentum}}, -year = {2009} -} -@article{Equationsa, -author = {Equations, Euler Turbine and Flow, Axial and Turbines, Gas and Compressors, Axial Flow and Flow, Free-vortex and Stresses, Blade}, -title = {{AXIAL-FLOW MACHINES Stator Rotor Stator}} -} -@article{Pedersen2008, -author = {Pedersen, Pauli}, -journal = {Building}, -title = {{The basic matrix approach for three simple finite elements}}, -year = {2008} -} -@book{Pedersen2003a, -author = {Pedersen, Pauli}, -booktitle = {Design}, -isbn = {8790416066}, -title = {{- Structures and Materials - Problems and Tools -}}, -year = {2003} -} -@article{Properties, -author = {Properties, Their}, -title = {{No Title}} -} -@article{Shannon2007, -author = {Shannon, Claude}, -journal = {Illinois Research}, -pages = {9--13}, -title = {{4.2 Entropie et d\'{e}sordre}}, -year = {2007} -} -@article{Fourier, -author = {Fourier, Loi De}, -pages = {96--111}, -title = {{3.5 Thermocin\'{e}tique des processus irr\'{e}versibles}} -} -@article{Callen2007, -author = {Callen, Selon}, -pages = {1--15}, -title = {{4 Th\'{e}orie cin\'{e}tique 4 . 1 Distribution de Boltzmann}}, -year = {2007} -} -@article{Phases2007, -author = {Phases, Transitions De}, -journal = {Entropie}, -pages = {83--96}, -title = {{Transitions de phases}}, -year = {2007} -} -@article{Lieb2007, -author = {Lieb, E H and Yngvason, J and April, Physics Today and Yngvason, J}, -journal = {Physics Today}, -number = {April 2000}, -pages = {49--59}, -title = {{3.1 Thermocin\'{e}tique}}, -volume = {310}, -year = {2007} -} -@article{Il, -author = {Il, Exemples Eau}, -journal = {Notes}, -pages = {6--15}, -title = {{2.1 Bilans}}, -volume = {L} -} -@article{Gibbs1873, -author = {Gibbs, W}, -journal = {No\^{u}s}, -pages = {14--23}, -title = {{2.2 Chaleur : temp\'{e}rature et entropie}}, -year = {1873} -} - - -@article{Thermiques, -author = {Thermiques, Machines}, -journal = {No\^{u}s}, -pages = {23--31}, -title = {350 393} -} -@article{Mara2008, -author = {Mara, Thierry Alex}, -pages = {1--16}, -title = {{Travaux Dirig\'{e}s de M\'{e}canique Analytique}}, -year = {2008} -} -@article{Tensors, -author = {Tensors, A}, -journal = {Tensor}, -pages = {155--159}, -title = {{Tensor calculus}} -} -@article{Ansermet2007, -author = {Ansermet, J-ph}, -pages = {2007}, -title = {{Introduction aux principes de la Thermodynamique}}, -year = {2007} -} -@article{St-louis2010, -author = {St-louis, Nicole and Boudreault, Olivier and Marion, De}, -title = {{PHY 1651 ï¶ M\'{e}canique classique I Hiver 2010 – Plan de cours}}, -year = {2010} -} -@article{Lawrence2006, -author = {Lawrence, Philippe}, -journal = {Structure}, -pages = {1--22}, -title = {{APPLICATION DU VIRTUELS AU CALCUL DES STRUCTURES ISOSTATIQUES}}, -year = {2006} -} -@article{Fabrice2003, -author = {Fabrice, Michel}, -title = {{Table des mati\`{e}res}}, -year = {2003} -} -@article{Liberte, -author = {Liberte, Degres D E and Coordonnees, E T}, -pages = {6--7}, -title = {{Equations de lagrange}} -} -@article{Collot, -author = {Collot, Johann}, -title = {{M\'{e}canique Analytique : Formalismes lagrangien et hamiltonien et principe de moindre action}} -} -@article{Elassus1912, -author = {Elassus, E D}, -journal = {No\^{u}s}, -pages = {244--265}, -title = {{S. m. f.}}, -volume = {40}, -year = {1912} -} -@article{Baruh2000, -author = {Baruh, H}, -journal = {Aerospace Engineering}, -pages = {1--16}, -title = {{Another Look at the Describing Equations of D ’ Alembert ’ s Principle}}, -year = {2000} -} -@article{Hautcoeur, -author = {Hautcoeur, Philippe}, -title = {{INTRODUCTION A LA MECANIQUE ANALYTIQUE Formalisme de Lagrange}} -} -@article{Lawrence2006a, -author = {Lawrence, Philippe}, -journal = {Structure}, -title = {{APPLICATION DU VIRTUELS AU CALCUL DES STRUCTURES ISOSTATIQUES Exercice n Ëš 1}}, -year = {2006} -} -@article{Udwadia2006, -author = {Udwadia, Firdaus E and Phohomsiri, Phailaung}, -doi = {10.1098/rspa.2006.1662}, -journal = {Society}, -title = {{Explicit equations of motion for constrained mechanical systems with singular mass matrices and applications to multi-body dynamics mechanical systems with singular mass}}, -year = {2006} -} -@article{Marleau, -author = {Marleau, L}, -title = {{Introduction \`{a} la physique des particules}} -} -@article{Jong2005, -author = {Jong, Ing Chang}, -journal = {Engineering Education}, -title = {{Kindling Students’ Interest in Virtual Work Method:}}, -year = {2005} -} -@article{Udwadia2007, -author = {Udwadia, Firdaus E and Phohomsiri, Phailaung}, -doi = {10.1098/rspa.2007.1825}, -journal = {Society}, -pages = {1421--1434}, -title = {{Explicit Poincar\'{e} equations of motion for general constrained systems . Part I . Analytical results ´ equations of motion for Explicit Poincare general constrained systems . Part I .}}, -year = {2007} -} -@article{Marleaua, -author = {Marleau, P Amiot L}, -title = {{M\'{e}canique Classique II}} -} -@article{Marleaub, -author = {Marleau, L}, -title = {{Tableau des particules et collisionneurs}} -} -@article{Marleauc, -author = {Marleau, L}, -title = {{M\'{e}canique classique I}} -} -@article{Marleaud, -author = {Marleau, L}, -title = {{Unit\'{e}s et constantes fondamentales en physique}} -} -@article{Table2012, -author = {Table, Rappels}, -pages = {2--7}, -title = {{0.1.1.1 vecteur en 2D}}, -year = {2012} -} -@book{Systems, -author = {Systems, O F and Flexible-chain, Containing}, -isbn = {0444823735}, -title = {{Thermodynamic s}} -} -@book{Linder, -author = {Linder, Bruno}, -booktitle = {Work}, -isbn = {9786468600}, -title = {{THERMODYNAMICS AND INTRODUCTORY STATISTICAL MECHANICS}} -} -@article{Microscopic, -author = {Microscopic, From and Behavior, Macroscopic and Problems, Additional and Reading, Further and Concepts, Thermodynamic}, -journal = {Reading}, -title = {{Contents 1}} -} -@book{Nishimori2001, -author = {Nishimori, Hidetoshi}, -booktitle = {Physics}, -isbn = {0198509413}, -title = {{Statistical Physics of Spin Glasses and Information Processing An Introduction}}, -year = {2001} -} -@book{Ehlers, -author = {Ehlers, J and Frisch, U and Hepp, K and Imboden, D}, -booktitle = {Lecture Notes in Physics}, -isbn = {354067750X}, -title = {{Lecture Notes in Physics}} -} -@article{Eliezer, -author = {Eliezer, Shalom and Eliezer, Yaffa}, -journal = {Plasma Physics}, -title = {{No Title}} -} -@book{Introduction, -author = {Introduction, An}, -isbn = {3527302573}, -title = {{No Title}} -} -@book{Principles, -author = {Principles, Basic}, -booktitle = {Library}, -isbn = {0072321075}, -title = {{Semiconductor Physics and Devices}} -} -@article{Walet2003, -author = {Walet, Niels}, -journal = {Representations}, -title = {{P615 : Nuclear and Particle Physics}}, -year = {2003} -} -@article{Fitzpatrick, -author = {Fitzpatrick, Richard}, -journal = {Langmuir}, -title = {{Introduction to Plasma Physics : A graduate level course}} -} -@article{Galperin, -author = {Galperin, Yuri M}, -title = {{Introduction to Modern Solid State Physics}} -} -@article{Bellan, -author = {Bellan, Paul M}, -title = {{Fundamentals of Plasma Physics}} -} -@article{Ofa, -author = {Of, Lectrodynamics and Of, Roperties}, -title = {{No Title}} -} -@article{Computing2005, -author = {Computing, Scientific}, -title = {{THE THIRD BRANCH Essays on Scientific Computing}}, -year = {2005} -} -@article{Oad, -author = {Oad, T H E R and Eality, T O R}, -journal = {Physics}, -title = {{No Title}} -} -@book{Chaos, -author = {Chaos, Quantum}, -isbn = {0306471213}, -title = {{No Title}} -} -@book{Hartmann, -author = {Hartmann, Alexander K and Rieger, Heiko}, -isbn = {3527403078}, -title = {{No Title}} -} -@article{Schulten2000, -author = {Schulten, K and Kosztin, I and Street, N Mathews}, -title = {{Lectures in Theoretical Biophysics}}, -year = {2000} -} -@article{Theories, -author = {Theories, Gauge}, -journal = {Energy}, -title = {{GRAVITY , GAUGE THEORIES AND GEOMETRIC ALGEBRA Anthony Lasenby , Chris Doran and}} -} -@article{Illustrations, -author = {Illustrations, List O F}, -journal = {Quantum}, -title = {{Dear Reader :}} -} -@article{Polchinski, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-th/9411028}, -author = {Polchinski, Joseph}, -eprint = {9411028}, -primaryClass = {arXiv:hep-th}, -title = {{arXiv : hep-th / 9411028 v1 3 Nov 1994 WHAT IS STRING THEORY ?}} -} -@article{Kiritsis, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-th/9709062}, -author = {Kiritsis, Elias}, -eprint = {9709062}, -number = {March 1997}, -primaryClass = {arXiv:hep-th}, -title = {{Introduction to superstring theory}} -} -@book{Siegel, -author = {Siegel, Warren}, -isbn = {9971507315}, -title = {{INTRODUCTION to STRING FIELD THEORY}} -} -@article{Hooft2004, -author = {Hooft, Gerard}, -journal = {Outlook}, -title = {{Introduction to string theory ∗}}, -year = {2004} -} -@book{Gauglitz2003, -author = {Gauglitz, Edited G}, -isbn = {3527297820}, -title = {{Handbook of Spectroscopy Near-Infrared Spectroscopy Handbook of Analytical Techniques In-situ Spectroscopy in Heterogeneous Catalysis}}, -year = {2003} -} - - - - - - -@article{Skagerstam1998, -archivePrefix = {arXiv}, -arxivId = {arXiv:quant-ph/9909086}, -author = {Skagerstam, Bo-sture}, -eprint = {9909086}, -journal = {Science}, -primaryClass = {arXiv:quant-ph}, -title = {{Topics in Modern Quantum Optics}}, -year = {1998} -} -@book{Crc2001, -author = {Crc, Hall and Crc, Hall and Raton, Boca and New, London and Washington, York}, -booktitle = {New York}, -isbn = {1584881976}, -title = {{QUANTUM AND CLASSICAL MECHANICS}}, -year = {2001} -} -@article{Saltsidis1999, -author = {Saltsidis, P}, -journal = {Quantum}, -title = {{Solutions to Problems in Quantum Mechanics}}, -year = {1999} -} -@article{Rae, -author = {Rae, Alastair I M}, -journal = {Text}, -title = {{Quantum Mechanics}} -} -@article{Norbury2000, -author = {Norbury, John W}, -journal = {Differential Equations}, -title = {{Professor John W. Norbury}}, -year = {2000} -} -@article{Timpson2004, -archivePrefix = {arXiv}, -arxivId = {arXiv:quant-ph/0412063}, -author = {Timpson, Christopher Gordon}, -eprint = {0412063}, -primaryClass = {arXiv:quant-ph}, -title = {{Quantum Information Theory and The Foundations of Quantum Mechanics}}, -year = {2004} -} -@article{Schulten2000a, -author = {Schulten, K and Street, N Mathews}, -title = {{Notes on Quantum Mechanics}}, -year = {2000} -} -@article{Alexandrov, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-th/0311273}, -author = {Alexandrov, Sergei}, -eprint = {0311273}, -primaryClass = {arXiv:hep-th}, -title = {{Matrix Quantum Mechanics and Two-dimensional String Theory in Non-trivial Backgrounds}} -} -@article{Teschl, -author = {Teschl, Gerald}, -title = {{Mathematical Methods in Quantum Mechanics}} -} -@article{Cable2005, -archivePrefix = {arXiv}, -arxivId = {arXiv:quant-ph/0602107}, -author = {Cable, Hugo Vaughan}, -eprint = {0602107}, -journal = {October}, -number = {October}, -primaryClass = {arXiv:quant-ph}, -title = {{Localising Relational Degrees of Freedom in Quantum Mechanics by}}, -year = {2005} -} -@article{Landsman1998, -author = {Landsman, N P}, -journal = {Group}, -number = {April}, -title = {{Lecture Notes on C -Algebras and Quantum Mechanics}}, -year = {1998} -} -@book{Kitoh2001, -author = {Kitoh, Tsutomu}, -isbn = {0471406341}, -title = {{ANALYSIS INTRODUCTION TO Solving Maxwell ' s Equations and \`{E} dinger Equation the Schro}}, -volume = {1}, -year = {2001} -} -@article{Fuchs2006, -archivePrefix = {arXiv}, -arxivId = {arXiv:quant-ph/0012089}, -author = {Fuchs, C A and Onofrio, R and Peres, A and Santos, E and Serra, C and Simonius, M and Stomphorst, R G}, -eprint = {0012089}, -primaryClass = {arXiv:quant-ph}, -title = {quantum information}, -volume = {239}, -year = {2006} -} -@book{Ehlersa, -author = {Ehlers, J and Frisch, U and Hepp, K}, -booktitle = {Lecture Notes in Physics}, -isbn = {3540669108}, -title = {{Lecture Notes in Physics}} -} -@article{Clarkson2003, -author = {Clarkson, R}, -journal = {Solutions}, -title = {{Quantum Field Theory 1}}, -year = {2003} -} -@article{Feng, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-ph/0405215}, -author = {Feng, Jonathan L}, -eprint = {0405215}, -primaryClass = {arXiv:hep-ph}, -title = {{Supersymmetry and cosmology}} -} -@book{Gates, -author = {Gates, S James and Grisaru, Marcus T and Siegel, Warren}, -isbn = {0805331603}, -title = {{or One thousand and one}} -} -@article{Edition, -author = {Edition, Second}, -title = {{No Title}} -} -@book{Humphries1999, -author = {Humphries, Stanley}, -booktitle = {Computer Engineering}, -isbn = {0471878782}, -title = {{Particle Acceleration Preface to the Digital Edition Preface to the 1986 Edition}}, -year = {1999} -} -@book{Blin-stoyle, -author = {Blin-stoyle, Roger J}, -booktitle = {Media}, -isbn = {0750304154}, -title = {{Matter and the Universe EUREKA !}} -} -@book{Theory, -author = {Theory, Kinematical}, -booktitle = {Development}, -isbn = {0306471337}, -title = {{No Title}} -} -@article{Humphries2002, -author = {Humphries, Stanley}, -journal = {Computer Engineering}, -title = {{Charged Particle Beams}}, -year = {2002} -} -@book{Ofb, -author = {Of, Locks}, -isbn = {8007624058}, -title = {{B LOCKS OF}} -} -@book{Board, -author = {Board, Editorial}, -booktitle = {Lecture Notes in Physics}, -isbn = {3540214224}, -title = {{Lecture Notes in Physics}} -} -@article{Naturwissenschaften1977, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-th/0603098}, -author = {Naturwissenschaften, Doktor Der}, -eprint = {0603098}, -number = {April}, -primaryClass = {arXiv:hep-th}, -title = {{Aspects of Twistor Geometry and Supersymmetric Field Theories within Superstring Theory}}, -year = {1977} -} -@book{Boarda, -author = {Board, Editorial}, -isbn = {3540231250}, -title = {{Lecture Notes in Physics}} -} -@article{Palamodov2002, -author = {Palamodov, Prof V}, -journal = {Spring}, -title = {{Topics in Mathematical Physics}}, -year = {2002} -} -@article{Seiberg, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-th/9908142}, -author = {Seiberg, Nathan and Witten, Edward}, -eprint = {9908142}, -primaryClass = {arXiv:hep-th}, -title = {{String Theory and Noncommutative Geometry}} -} - -@article{Part, -author = {Part, Introduction and Dirichlet, The and Neumann, The and Chapter, Notes and Dirichlet, The and Dirichlet, The and Chapter, Notes and Neumann, The and Neumann, The and Chapter, Notes and Dirichlet, The}, -title = {$\nu$ 3.5.} -} -@book{Prilepko, -author = {Prilepko, I and Orlovsky, Dmitry G and Vasin, Igor A}, -booktitle = {Physics}, -isbn = {0824719875}, -title = {{METHODS FOR SOLVING INVERSE PROBLEMS IN MATHEMATICAL}} -} -@article{Atomic, -author = {Atomic, International and Agency, Energy}, -journal = {Atomic Energy}, -title = {{Manual on mathematical models in isotope hydrogeology »}} -} -@article{Hints, -author = {Hints, Exercises}, -journal = {Change}, -title = {{Preliminary calculus}} -} -@article{Chowa, -author = {Chow, T A I L}, -title = {{Mathematical Methods for Physicists : A concise introduction Mathematical Methods for Physicists}} -} -@article{Firk2000, -author = {Firk, Frank W K}, -title = {{Introduction to Groups , Invariants and}}, -year = {2000} -} -@article{Dips1998, -archivePrefix = {arXiv}, -arxivId = {arXiv:math.DG/9808130}, -author = {Dips, Preprint and Krasil, Joseph and Verbovetsky, Alexander}, -eprint = {9808130}, -journal = {Evolution}, -pages = {1--150}, -primaryClass = {arXiv:math.DG}, -title = {{Homological methods in equations of mathematical physics 1}}, -year = {1998} -} -@article{Raymond2004, -author = {Raymond, The and Kashdan, Eugene}, -journal = {Performance Computing}, -number = {June}, -title = {{HIGH-ORDER ACCURATE METHODS FOR MAXWELL EQUATIONS}}, -year = {2004} -} -@article{Doran1994, -author = {Doran, Chris J L}, -journal = {October}, -number = {February}, -title = {{Geometric Algebra and its Application to Mathematical Physics}}, -year = {1994} -} -@article{Collins2003, -author = {Collins, George W}, -journal = {Matrix}, -title = {by}, -year = {2003} -} -@article{Evans, -author = {Evans, Lawrence C}, -journal = {Entropy}, -title = {{Entropy and Partial Differential Equations}} -} -@article{Lee2000, -author = {Lee, Jeffrey M}, -journal = {Physics}, -title = {{Differential Geometry , Analysis and Physics}}, -year = {2000} -} -@article{Vein, -author = {Vein, Robert and Dale, Paul}, -title = {{Determinants and Their Applications in Mathematical Physics}} -} -@article{Cvitanovi2006, -author = {Cvitanovi, Predrag}, -title = {{Chaos : Classical and Quantum Part I : Deterministic Chaos}}, -year = {2006} -} -@book{Gmbh, -author = {Gmbh, Wiley-vch Verlag and Kgaa, Co}, -booktitle = {Library}, -isbn = {3527405348}, -title = {{Applied Mathematical Methods in Theoretical Physics}} -} -@article{Snieder1998, -author = {Snieder, Roel}, -title = {{A Guided Tour of Mathematical Physics}}, -year = {1998} -} -@book{Bass, -author = {Bass, Michael}, -isbn = {0387955909}, -title = {{Solid-State Lasers : A Graduate Text}} -} -@book{Dn, -author = {Dn, Team Yyepg and Yyepg, Team and Yyepg, Team and Yyepg, Team}, -isbn = {9780521642293}, -title = {{TeAM YYeP}} -} -@article{Notation, -author = {Notation, New and Number, Atomic and States, Oxidation}, -journal = {Engineering}, -title = {{No}} -} -@article{Einstein, -author = {Einstein, Albert}, -title = {{Relativity: The Special and General Theory}} -} -@article{Sternberg2003, -author = {Sternberg, Shlomo}, -title = {{Semi-Riemann Geometry and General Relativity}}, -year = {2003} -} -@article{Carroll1997, -archivePrefix = {arXiv}, -arxivId = {arXiv:gr-qc/9712019}, -author = {Carroll, Sean M}, -eprint = {9712019}, -primaryClass = {arXiv:gr-qc}, -title = {{Lecture Notes on General Relativity}}, -year = {1997} -} -@article{Bertschinger2000, -author = {Bertschinger, Edmund}, -journal = {Time}, -title = {{Introduction to Tensor Calculus for General Relativity}}, -year = {2000} -} -@article{Waner2005, -author = {Waner, Stefan}, -number = {January}, -title = {{Introduction to Differential Geometry}}, -year = {2005} -} -@article{Lomax1999, -author = {Lomax, Harvard and Pulliam, Thomas H and Zingg, David W}, -journal = {Matrix}, -title = {{Fundamentals of Computational Fluid Dynamics}}, -year = {1999} -} -@book{Dynamics, -author = {Dynamics, Computational Fluid}, -isbn = {0080439446}, -title = {{J. Blazek}} -} -@article{Gallavotti1999, -author = {Gallavotti, Giovanni}, -journal = {Distribution}, -title = {{Statistical mechanics}}, -year = {1999} -} -@book{Bonet, -author = {Bonet, Javier and Wood, Richard D}, -isbn = {052157272X}, -title = {{NONLINEAR CONTINUUM MECHANICS FOR FINITE ELEMENT ANALYSIS}} -} -@article{Lewis2003, -author = {Lewis, Andrew D}, -journal = {Notes}, -number = {April}, -title = {{Math 439 Course Notes Lagrangian Mechanics, Dynamics, and Control}}, -year = {2003} -} -@article{Marsden1998, -author = {Marsden, Jerrold E}, -number = {July}, -title = {{Introduction to Mechanics and Symmetry}}, -year = {1998} -} -@article{Brizard2004, -author = {Brizard, Alain J}, -journal = {Physics}, -title = {{LAGRANGIAN AND HAMILTONIAN MECHANICS}}, -year = {2004} -} -@article{Ruina2002, -author = {Ruina, Andy and Pratap, Rudra}, -journal = {Most}, -number = {January}, -title = {{S TATICS}}, -year = {2002} -} -@book{Takens1861, -author = {Takens, F and Teissier, B and Fondazione, C I M E}, -booktitle = {Lecture Notes in Mathematics}, -isbn = {3540240640}, -title = {{Lecture Notes in Mathematics}}, -year = {1861} -} -@article{Norbury2000a, -author = {Norbury, John W}, -journal = {Physics}, -title = {thermodynamics}, -year = {2000} -} -@article{Mechanics2000, -author = {Mechanics, Elementary}, -journal = {World}, -title = {{ELEMENTARY MECHANICS \& THERMODYNAMICS Professor John W . Norbury}}, -year = {2000} -} -@article{Mechanics, -author = {Mechanics, Continuum}, -journal = {Architectural Engineering}, -title = {{Continuum mechanics}} -} -@article{Ciarlet, -author = {Ciarlet, Philippe G}, -journal = {City}, -title = {{AN INTRODUCTION TO DIFFERENTIAL GEOMETRY WITH}} -} -@article{Claerbout2006, -author = {Claerbout, Jon F}, -journal = {differences}, -title = {{IMAGE ESTIMATION BY EXAMPLE : Geophysical soundings image construction Multidimensional autoregression}}, -year = {2006} -} -@book{Milsom, -author = {Milsom, John}, -isbn = {0470843470}, -title = {{No Title}} -} -@book{Basu2001, -author = {Basu, Dipak}, -booktitle = {Astronomy}, -isbn = {0849328918}, -title = {{GEOPHYSICS , ASTROPHYSICS ,}}, -year = {2001} -} -@article{Ahrens, -author = {Ahrens, J and Best, Myron G and Mclennan, Scott M and Winkler, W and Ahrens, Thomas J and Johnson, Mary L and Bowers, Teresa S and Element, Trace and Jones, John H and Conductivity, Thermal and Huenges, Ernst and Lockner, Duvid A and Evans, Brian and Kohlstedt, David L and Equilibria, Phase and Herzberg, Claude and Spectra, Reflectance and Clark, Roger N and Hunt, P and Moskowitz, Bruce M and Berryman, James G and Banerjee, Subir K}, -journal = {Rheology}, -title = {{No Title}} -} -@article{Anderson1995, -author = {Anderson, Orson L and Isaak, Donald G}, -journal = {Spectroscopy}, -title = {{Published under the aegis of the AGU Books Board}}, -year = {1995} -} -@book{Copyright2004, -author = {Copyright, Panamerican and House, Random and House, Random}, -booktitle = {Quantum}, -isbn = {0375412883}, -title = {{O 2004}}, -year = {2004} -} -@book{Kong2000, -author = {Kong, Jin Au}, -booktitle = {New York}, -isbn = {0471387991}, -title = {{SCATTERING OF ELECTROMAGNETIC WAVES}}, -volume = {1}, -year = {2000} -} -@book{Drillon2002, -author = {Drillon, Marc}, -booktitle = {Molecules}, -isbn = {3527304290}, -title = {{Further Titles of Interest}}, -volume = {0}, -year = {2002} -} -@book{Dorf, -author = {Dorf, Richard C and Editor, Series}, -booktitle = {America}, -isbn = {084931397X}, -title = {{No Title}} -} -@article{Magyar2001, -author = {Magyar, Rudolph J}, -title = {{A Companion to Classical Electrodynamics 3 rd Edition by J . D . Jackson}}, -year = {2001} -} -@article{Norbury1997, -author = {Norbury, John W}, -journal = {Work}, -title = {{for Undergraduates}}, -year = {1997} -} -@book{Waynant, -author = {Waynant, Ronald W and Ediger, Marwood N}, -booktitle = {New York}, -isbn = {0070687161}, -title = {{HANDBOOK}} -} -@article{Marion1997, -author = {Marion, J B and Leighton, R B}, -journal = {Reading}, -title = {{PHY 352K Classical Electromagnetism an upper-division undergraduate level lecture course given by Richard Fitzpatrick The University of Texas at Austin Major sources}}, -volume = {II}, -year = {1997} -} -@book{License, -author = {License, Alike}, -isbn = {0970467087}, -title = {{Light and Matter}} -} -@article{Collins2003a, -author = {Collins, George W}, -title = {{In}}, -year = {2003} -} -@article{Collins2003b, -author = {Collins, George W}, -journal = {Transport}, -title = {{Stellar Astrophysics}}, -year = {2003} -} -@article{Edition2003, -author = {Edition, Second}, -journal = {Leonardo}, -title = {{Handbook of Space Astronomy and Astrophysics Second Edition}}, -year = {2003} -} -@article{Miller1998, -author = {Miller, Diane Fisher}, -number = {April}, -title = {{Basics of Radio Astronomy for the Basics of Radio Astronomy Prepared by}}, -year = {1998} -} -@article{Road2001, -author = {Road, Brunel}, -journal = {Physics}, -number = {785998}, -title = {{( Opik ), Ernst Julius ( 1893 – 1985 )}}, -year = {2001} -} -@article{Bartelmann, -archivePrefix = {arXiv}, -arxivId = {arXiv:astro-ph/9912508}, -author = {Bartelmann, Matthias and Schneider, Peter}, -eprint = {9912508}, -number = {July 2006}, -primaryClass = {arXiv:astro-ph}, -title = {{Weak Gravitational Lensing}} -} -@book{Boardb, -author = {Board, Editorial}, -isbn = {3540227121}, -title = {{Lecture Notes in Physics}} -} -@article{Elvis, -author = {Elvis, M and Natta, A}, -title = {{No Title}} -} -@article{Weinberg, -author = {Weinberg, Steven}, -title = {{The First Three Minutes}} -} - - -@article{Linde1990, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-th/0503203}, -author = {Linde, Andrei}, -eprint = {0503203}, -primaryClass = {arXiv:hep-th}, -title = {{AND INFLATIONARY COSMOLOGY 1}}, -year = {1990} -} -@article{Dolgov2002, -archivePrefix = {arXiv}, -arxivId = {arXiv:hep-ph/0202122}, -author = {Dolgov, A D}, -eprint = {0202122}, -journal = {Direct}, -primaryClass = {arXiv:hep-ph}, -title = {{Neutrinos in cosmology}}, -year = {2002} -} -@article{Cosmology, -author = {Cosmology, Modern}, -journal = {Energy}, -title = {{No Title}} -} -@article{Norbury1997a, -author = {Norbury, John W}, -journal = {Tensor}, -title = {{for Undergraduates}}, -year = {1997} -} -@article{Coles, -author = {Coles, Peter}, -journal = {Physics}, -title = {{No Title}} -} -@article{Group1965, -author = {Group, Theoretical Physics and Road, Prince Consort}, -title = {{Astrophysics and cosmology}}, -year = {1965} -} -@article{Editiona, -author = {Edition, Second}, -title = {{No Title}} -} -@book{Editionb, -author = {Edition, Third}, -isbn = {0470849096}, -title = {{No Title}} -} -@article{Collins2004, -author = {Collins, George W}, -title = {{The Foundations Of Celestial Mechanics By}}, -year = {2004} -} -@book{Nardo, -author = {Nardo, Don}, -booktitle = {New York}, -isbn = {1590181018}, -title = {{Holes by Don Nardo}} -} -@book{Susskind, -author = {Susskind, Leonard and Lindesay, James}, -isbn = {9812560831}, -title = {{No Title}} -} -@book{The, -author = {The, Atlas O F}, -isbn = {9780540087914}, -title = {{REVISED EDITION}} -} -@article{Ofc, -author = {Of, Tory and Of, Iscovery}, -title = {{No Title}} -} -@book{Editionc, -author = {Edition, Second}, -booktitle = {Observatory}, -isbn = {1592570038}, -title = {{No Title}} -} -@article{Halzen, -archivePrefix = {arXiv}, -arxivId = {arXiv:astro-ph/0204527}, -author = {Halzen, Francis and Hooper, Dan}, -eprint = {0204527}, -primaryClass = {arXiv:astro-ph}, -title = {{High-energy Neutrino Astronomy: The Cosmic Ray Connection}} -} -@article{Mediterranean, -author = {Mediterranean, The and Ages, Dark and Europe, Post-roman}, -journal = {Moon}, -title = {{No Title}} -} -@article{Wevers, -author = {Wevers, By J C A}, -title = {{Physics Formulary}} -} -@article{Huggins2000, -author = {Huggins, E R}, -journal = {System}, -title = {{Physics 2000}}, -year = {2000} -} -@article{Schiller, -author = {Schiller, Christoph}, -title = {{Motion mountain}} -} -@book{Physics, -author = {Physics, T O}, -booktitle = {Quantum}, -isbn = {0306484013}, -title = {{No Title}} -} -@book{Physicsa, -author = {Physics, T O}, -isbn = {0306484005}, -title = {{TO PHYSICS}} -} -@article{Bailly2009, -author = {Bailly, Christophe}, -title = {{Plan du cours}}, -year = {2009} -} -@book{Flannery, -author = {Flannery, Brian P}, -isbn = {0521431085}, -title = {{No Title}} -} -@article{Lekien2005, -author = {Lekien, F and Marsden, J}, -doi = {10.1002/nme.1296}, -journal = {Online}, -keywords = {computational dynamics,interpolation,tricubic}, -number = {December 2004}, -pages = {455--471}, -title = {{Tricubic interpolation in three dimensions}}, -year = {2005} -} -@article{Statistics, -author = {Statistics, Applied Multivariate and Handbook, The}, -journal = {Psychology}, -title = {{No Title}} -} -@article{Ii1968, -author = {Ii, Part and Executor, Literary and Fisher, Sir Ronald A and Yates, Frank and Iii, Table and Menti, Nicola and Hayden, Henry and Margolin, Jack}, -title = {r e f}, -year = {1968} -} -@article{Av2002, -author = {Av, Maths and On, K}, -pages = {1--17}, -title = {{On consid` ere les trois normes sur E, dites classiques, d´ ependantes de}}, -year = {2002} -} -@article{Bar-hen, -author = {Bar-hen, Avner}, -title = {{DEA Environnement Marin : processus stochastiques}} -} -@article{Fonction, -author = {Fonction, D U N E}, -pages = {0--1}, -title = {x → x 0 −} -} -@article{Bar-hen2002, -author = {Bar-hen, Avner}, -title = {{DEA Environnement Marin : Table des mati ` eres}}, -year = {2002} -} -@book{Editiond, -author = {Edition, Fourth}, -isbn = {9780123742889}, -title = {{No Title}} -} -@article{Foundation1954, -author = {Foundation, National Science}, -journal = {Science}, -title = {{Preface ’ Preface to the Ninth Printing}}, -volume = {i}, -year = {1954} -} -@article{Tx, -author = {Tx, Austin and Tx, Houston}, -title = {{Global offices of CD-adapco}} -} -@article{Management, -author = {Management, Vehicle Thermal}, -number = {3}, -title = {{issue 3.01 integrate. automate. innovate. Features}} -} -@article{Thinking2008, -author = {Thinking, Alternative and Computer, About}, -number = {october}, -title = {{To achieve precise simulations, sharpen your tools.}}, -year = {2008} -} -@article{Officea, -author = {Office, Melville}, -journal = {Development}, -title = {{Global offices - CD-adapco}} -} -@article{To, -author = {To, Cool and Core, The}, -journal = {Electromagnetics}, -title = {{Three new releases}} -} -@article{Nagy, -author = {Nagy, Dennis}, -journal = {Engineering}, -pages = {1--32}, -title = {{CFD is changing From “ Hero Mountain †to “ Payback Meadow â€}} -} -@article{Arienti, -author = {Arienti, Marco}, -journal = {Electronics}, -title = {{New corporate image for CD-adapco}} -} -@article{Concepts, -author = {Concepts, Tome I and Ii, Tome and Milieux, Tome I I I}, -title = {{PO PO PO PO PO}} -} -@article{Conceptsa, -author = {Concepts, Tome I and Ii, Tome and Milieux, Tome I I I}, -title = {{PO PO PO PO PO}} -} -@article{Conceptsb, -author = {Concepts, Tome I and Ii, Tome and Milieux, Tome I I I}, -title = {{PO PO PO PO PO}} -} -@article{Prieve2000, -author = {Prieve, Dennis C}, -journal = {Time}, -title = {{A Course in Fluid Mechanics with Vector Field Theory by}}, -year = {2000} -} -@article{Edition2006, -author = {Edition, Fifth and Poling, Bruce E and Prausnitz, M}, -journal = {Library}, -title = {{CHAPTER ONE THE ESTIMATION OF PHYSICAL}}, -year = {2006} -} -@article{Nakayama, -author = {Nakayama, Y}, -journal = {Image (Rochester, N.Y.)}, -title = {{Fluid Mechanics}} -} -@book{Editione, -author = {Edition, Second}, -isbn = {0121782514}, -title = {{Pijush k. kundu 0 ira m. cohen}} -} -@book{Sirovich, -author = {Sirovich, Antman J E Marsden L and Holmes, Hale P and Keller, J Keener J and Mielke, B J Matkowsky A and Sreenivasan, C S Peskin K R S}, -booktitle = {Applied Mathematical Sciences}, -isbn = {0387404376}, -title = {{Applied Mathematical Sciences}} -} -@article{Ooa, -author = {\`{O}\`{o}, \'{O} \'{U} and Ã\`{u}, \AA}, -title = {{Ãà \'{U}\'{O}\O\O \`{O} ×}} -} -@article{Zienkiewicz, -author = {Zienkiewicz, O C and Emeritus, Freng}, -journal = {Fluid Dynamics}, -title = {{The Finite Element Method Fifth edition Volume 3 : Fluid Dynamics}}, -volume = {3} -} -@article{Lomax1999a, -author = {Lomax, Harvard and Pulliam, Thomas H and Zingg, David W}, -journal = {Matrix}, -title = {{Fundamentals of Computational Fluid Dynamics}}, -year = {1999} -} -@article{Zamouri2007, -author = {Zamouri, S and Tavoularis, S and Bailey, S}, -journal = {Aerospace Engineering}, -pages = {1--2}, -title = {{FLOW VISUALIZATION OF THE INTERACTION BETWEEN A WING-TIP VORTEX AND FREE-STREAM TURBULENCE}}, -year = {2007} -} -@article{Mechanics1999, -author = {Mechanics, Applied and Grounds, Aberdeen Proving}, -pages = {353--396}, -title = {{Mechanisms for generating coherent packets of hairpin vortices in channel flow}}, -volume = {387}, -year = {1999} -} -@article{Willert1997, -author = {Willert, Christian}, -journal = {Image (Rochester, N.Y.)}, -title = {{Stereoscopic digital particle image velocimetry for application in wind tunnel flows}}, -volume = {1465}, -year = {1997} -} -@article{Wittmer1998, -author = {Wittmer, K S and Devenport, W J and Zsoldos, J S}, -journal = {Sensors (Peterborough, NH)}, -title = {{A four-sensor hot-wire probe system for three-component velocity measurement}}, -volume = {24}, -year = {1998} -} -@article{Wallace1995, -author = {Wallace, James M and Foss, John F}, -keywords = {angular velocity,experimental methods,internal rotation,velocity}, -title = {{VORTICITY IN TURBULENT FLOWS}}, -year = {1995} -} -@article{Search2002, -author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Address, I P}, -keywords = {article are in colour,fluid flow velocity,only in the electronic,particle image velocimetry,some figures in this,three-dimensional,velocity,version,wind tunnel}, -title = {{Two-axes Scheimpflug focusing for particle image velocimetry}}, -volume = {1}, -year = {2002} -} -@article{Vanderwel2009, -author = {Vanderwel, Christina M}, -journal = {Scanning}, -number = {December}, -title = {{COHERENT STRUCTURES IN by}}, -year = {2009} -} -@article{Vanderwel2009a, -author = {Vanderwel, Christina}, -journal = {Mechanical Engineering}, -pages = {2--7}, -title = {{Considerations for the implementation of PIV in a plane normal to the flow direction}}, -year = {2009} -} -@article{Doorne, -author = {Doorne, C W H Van and Westerweel, J and Nieuwstadt, F T M}, -journal = {Technology}, -number = {1999}, -title = {{Measurement Uncertainty of Stereoscopic-PIV for Flow with Large Out-of-plane Motion .}} -} -@article{Westerweel2007, -author = {Westerweel, C W H Van Doorne \AE J}, -doi = {10.1007/s00348-006-0235-5}, -isbn = {0034800602355}, -journal = {Experiments in Fluids}, -pages = {259--279}, -title = {{Measurement of laminar , transitional and turbulent pipe flow using Stereoscopic-PIV}}, -year = {2007} -} -@article{Takahashi2005, -author = {Takahashi, Naoya and Ishii, Hiroyuki and Miyazaki, Takeshi and Introduction, I}, -doi = {10.1063/1.1858532}, -journal = {Physics of Fluids}, -pages = {1--14}, -title = {{The influence of turbulence on a columnar vortex}}, -year = {2005} -} -@article{Diagnostics, -author = {Diagnostics, Laser}, -title = {{Seed Particles for LDV and PIV}} -} - -@article{Prasad2000, -author = {Prasad, A K}, -journal = {Mechanical Engineering}, -number = {February}, -title = {{Stereoscopic particle image velocimetry}}, -volume = {29}, -year = {2000} -} -@article{Prasad1995, -author = {Prasad, Ajay K and Jensen, Kirk}, -journal = {Applied Optics}, -keywords = {of,particle image velocimetry,r 1995 optical society,scheimpflug,stereocamera}, -title = {{Scheimpflug stereocamera for particle image velocimetry in liquid flows}}, -year = {1995} -} -@article{Operation, -author = {Operation, Reliable}, -journal = {Business}, -title = {{Nd : YAG Laser Systems}} -} -@article{Soria2005, -author = {Soria, K Parker \AE K D Von Ellenrieder \AE J}, -doi = {10.1007/s00348-005-0971-y}, -journal = {Nature}, -pages = {281--298}, -title = {{Using stereo multigrid DPIV ( SMDPIV ) measurements to investigate the vortical skeleton behind a finite-span flapping wing}}, -year = {2005} -} -@article{Society2010, -author = {Society, The Royal and Society, Royal and Sciences, Physical}, -journal = {Society}, -number = {1595}, -pages = {491--508}, -title = {{Axial flow in laminar trailing vortices}}, -volume = {333}, -year = {2010} -} -@article{Physics2000, -author = {Physics, Theoretical and Street, Silver}, -pages = {349--378}, -title = {{Linear and nonlinear interactions between a columnar vortex and external turbulence}}, -volume = {402}, -year = {2000} -} -@article{Annuli2010, -author = {Annuli, Vertical Open-ended Exentric}, -number = {April}, -title = {{Research Internship Report Natural , Mixed and Forced Heat Convection in Supervisor :}}, -year = {2010} -} -@article{City2005, -author = {City, Iowa}, -doi = {10.1017/S002211200500580X}, -pages = {221--245}, -title = {{External turbulence interaction with a columnar vortex}}, -volume = {540}, -year = {2005} -} -@article{City1997, -author = {City, Iowa}, -journal = {Mechanical Engineering}, -pages = {1--30}, -title = {{The flow induced by periodic vortex rings wrapped around a columnar vortex core}}, -year = {1997} -} -@article{Diz2010, -author = {Diz, Le and Fabre, David}, -doi = {10.1007/s00162-009-0146-1}, -keywords = {15,20,32,47,breakdown,cd,fe,gv,instability,pacs 47,q-vortex,ring mode,swirling jet,viscosity,vortex}, -pages = {349--361}, -title = {{Viscous ring modes in vortices with axial jet}}, -year = {2010} -} -@article{Iungo2006, -author = {Iungo, Giacomo Valerio and Skinner, Peter}, -journal = {Security}, -number = {June}, -pages = {19--21}, -title = {{Wandering Smoothing Effects on Wing-tip Vortex Eulerian Measurements}}, -year = {2006} -} -@article{Park2008, -author = {Park, Joel T and Ph, D and Aouat, Ahmed Derradji and Ph, D}, -number = {September}, -pages = {0--16}, -title = {{Specialist Committee on Uncertainty Analysis}}, -year = {2008} -} -@article{Park2005, -author = {Park, Joel T and Derradji-aouat, Ahmed and Nishio, Shigeru and Wu, Baoshan}, -number = {Ldv}, -pages = {433--471}, -title = {{The Specialist Committee on Uncertainty Analysis Final Report and Recommendations to the 25th ITTC}}, -volume = {II}, -year = {2005} -} -@article{Igarashi2010, -author = {Igarashi, Hirofumi and Durbin, Paul A and Ma, Hongwei and Hu, Hui}, -journal = {New Horizons}, -number = {January}, -pages = {1--13}, -title = {{A Stereoscopic PIV Study of a Near-field Wingtip Vortex}}, -year = {2010} -} -@article{Confidentiel, -author = {Confidentiel, N O N}, -journal = {Recherche}, -title = {{RAPPORT DE STAGE DE RECHERCHE PIV MEASUREMENTS OF VORTEX WANDERING IN TURBULENT FLOWS}} -} -@article{Holzapfel2003, -author = {Holz\"{a}pfel, Frank and Hofbauer, Thomas and Darracq, Denis and Moet, Henri and Garnier, Fran\c{c}ois and Ferreira, Cecile}, -doi = {10.1016/S1270-9638(03)00026-9}, -journal = {Aerospace Science and Technology}, -keywords = {exhaust jet,numerical simulation,numerische simulation,scherung,schl\"{u}sselw\"{o}rter,secondary vorticity structures,sekund\"{a}rwirbelstrukturen,shear,stabile schichtung,stable stratification,triebwerksstrahl,turbulence,turbulenz,wake vortices,wirbelschleppe}, -pages = {263--275}, -title = {{Analysis of wake vortex decay mechanisms in the atmosphere ✩ Analyse der Zerfallsmechanismen von Wirbelschleppen in der Atmosph\"{a}re}}, -volume = {7}, -year = {2003} -} -@article{Gerz2002, -author = {Gerz, Thomas and Holz, Frank and Darracq, Denis}, -journal = {Progress in Aerospace Sciences}, -pages = {181--208}, -title = {{Commercial aircraft wake vortices}}, -volume = {38}, -year = {2002} -} -@article{Herpin2008, -author = {Herpin, Sophie and Yau, \AE Chong}, -doi = {10.1007/s00348-008-0533-1}, -journal = {Experiments in Fluids}, -pages = {745--763}, -title = {{Stereoscopic PIV measurements of a turbulent boundary layer with a large spatial dynamic range}}, -year = {2008} -} -@article{Pino2010, -author = {Pino, Carlos and Parras, Luis and Felli, Mario and Fernandez-feria, Ram\'{o}n}, -journal = {Insight}, -number = {2001}, -pages = {5--8}, -title = {{PIV measurements of the structure of wing-tip trailing vortices and their comparison with theoretical models}}, -year = {2010} -} -@article{Czech2005, -author = {Czech, Michael and Miller, Gregory and Crouch, Jeffrey and Strelets, Michail}, -doi = {10.1016/j.crhy.2005.05.005}, -keywords = {cfd,fusion de tourbillons,mesures,mots-cl\'{e}s,rans,tourbillons,turbulence,vortex merger,vortices,wake survey}, -pages = {451--466}, -title = {{Predicting the near-field evolution of airplane trailing vortices}}, -volume = {6}, -year = {2005} -} -@article{Cameron2008, -author = {Cameron, Andrew William}, -number = {February}, -title = {{Structure of a Low-Momentum Elevated Jet in a Cross-Flow}}, -year = {2008} -} -@article{Spillers2010, -author = {Spillers, Russell W}, -doi = {10.1007/s00348-010-0825-0}, -journal = {Experiments in Fluids}, -title = {{Meander of a fin trailing vortex and the origin of its turbulence}}, -year = {2010} -} -@article{Univer-2008, -author = {Univer-, Princeton}, -journal = {Aerospace}, -title = {{Measurements of the velocity field of a wing-tip vortex , wandering in grid turbulence}}, -year = {2008} -} -@article{Beninati2005, -author = {Beninati, M L and Marshall, J S}, -doi = {10.1007/s00348-004-0904-1}, -isbn = {0034800409}, -journal = {Experiments in Fluids}, -pages = {244--257}, -title = {{An experimental study of the effect of free-stream turbulence on a trailing vortex}}, -volume = {38}, -year = {2005} -} -@article{Bailey2004, -author = {Bailey, Sean C C}, -number = {May}, -title = {{The Effect of Free-Stream Turbulence and Shear on a Trailing Vortex by}}, -year = {2004} -} -@article{Bailey2006, -author = {Bailey, Sean C C}, -number = {December}, -title = {{The Interaction of a Wing-Tip Vortex and Free-Stream Turbulence by}}, -year = {2006} -} -@article{Adrian2000, -author = {Adrian, R J and Christensen, K T and Liu, Z}, -journal = {Experiments in Fluids}, -number = {95}, -title = {{Analysis and interpretation of instantaneous turbulent velocity fields}}, -volume = {29}, -year = {2000} -} -@book{Nationale, -author = {Nationale, Ecole and Grenoble, Hydraulique De}, -isbn = {030648384X}, -title = {{AN INFORMAL INTRODUCTION TO TURBULENCE Volume 63 Series Editor : R . MOREAU}} -} -@book{Fluids, -author = {Fluids, Turbulence I N}, -booktitle = {Fluid Mechanics and its Applications}, -isbn = {9781402064340}, -title = {{No Title}} -} -@article{Society2010a, -author = {Society, The Royal and Memoirs, Biographical and Society, Royal}, -journal = {Society}, -pages = {335--365}, -title = {{Author ( s ): S . Goldstein Source : Biographical Memoirs of Fellows of the Royal Society , Vol . 12 ( Nov ., 1966 ), pp . 335-365 Published by : The Royal Society Stable URL : http://www.jstor.org/stable/769538}}, -volume = {12}, -year = {2010} -} -@article{Mathematics2010, -author = {Mathematics, Applied and Review, Siam}, -journal = {Society}, -number = {2}, -pages = {447--452}, -title = {{Memories of Von Karman Author ( s ): Geoffrey I . Taylor Source : SIAM Review , Vol . 15 , No . 2 , Part 2 : Anniversary Supplement ( Apr ., 1973 ), pp . 447-452 Published by : Society for Industrial and Applied Mathematics Stable URL : http://www.jstor.org/stable/2028678}}, -volume = {15}, -year = {2010} -} -@article{Smith1998, -author = {Smith, Leslie M and Woodruff, Stephen L}, -journal = {Current}, -keywords = {renormalization-group theory,renormalized perturbation theory,the $\epsilon$ expansion}, -pages = {275--310}, -title = {{RENORMALIZATION-GROUP ANALYSIS OF TURBULENCE}}, -year = {1998} -} -@article{Aerospace1996, -author = {Aerospace, Proo and Vol, Sci and Simpson, Roger L}, -journal = {Science}, -number = {9}, -pages = {457--521}, -title = {{Pergamon ASPECTS OF TURBULENT BOUNDARY-LAYER SEPARATION}}, -volume = {32}, -year = {1996} -} -@article{Armentier2009, -author = {Armentier, M Y P}, -doi = {10.1127/0941-2948/2009/0370}, -isbn = {2007120518}, -journal = {Energy}, -number = {2}, -pages = {135--140}, -title = {{Comparison of 3D turbulence measurements using three staring wind lidars and a sonic anemometer}}, -volume = {18}, -year = {2009} -} -@article{Pedersen2002a, -author = {Pedersen, J M and Meyer, K E}, -doi = {10.1007/s00348-002-0514-8}, -journal = {Experiments in Fluids}, -pages = {940--949}, -title = {{POD analysis of flow structures in a scale model of a ventilated room}}, -volume = {33}, -year = {2002} -} -@article{Mann1998, -author = {Mann, Jakob}, -journal = {Science}, -number = {4}, -pages = {269--282}, -title = {{Wind field simulation}}, -volume = {13}, -year = {1998} -} -@article{Kawahara2005, -author = {Kawahara, Genta and Introduction, I}, -doi = {10.1063/1.1897011}, -pages = {1--13}, -title = {{Energy dissipation in spiral vortex layers wrapped around a straight vortex tube}}, -year = {2005} -} -@article{Hunt2000, -author = {Hunt, Julian C R and Morrison, Jonathan F}, -journal = {Engineering}, -pages = {673--694}, -title = {{Eddy structure in turbulent boundary layers}}, -volume = {19}, -year = {2000} -} -@article{Taylor1920, -author = {Taylor, By G I and May, Received and June, Read}, -title = {196 g. i.}, -volume = {6}, -year = {1920} -} -@article{Amiot, -author = {Amiot, P}, -title = {{P. Amiot}} -} -@article{Allaire2010, -author = {Allaire, G}, -pages = {1--46}, -title = {{ANALYSE NUMERIQUE ET OPTIMISATION Une introduction ` a la mod ´ elisation math ´ ematique et ` a la simulation num ´ erique Introduction ` a la mod ´ elisation math ´ ematique et ` a la simulation num ´ erique}}, -year = {2010} -} -@article{Manual2005, -author = {Manual, Tutorial}, -number = {August}, -title = {{Ansys icemcfd 10.0}}, -year = {2005} -} -@article{Training2006, -author = {Training, Introductory Fluent}, -journal = {Notes}, -title = {{Solver Basics}}, -year = {2006} -} -@article{Training2006a, -author = {Training, Introductory Fluent}, -journal = {Convergence}, -title = {{Solver Settings}}, -year = {2006} -} -@article{Multigrid2006, -author = {Multigrid, Use Full}, -journal = {Read}, -pages = {1--32}, -title = {{Modeling External Compressible Flow}}, -year = {2006} -} -@article{Training2006b, -author = {Training, Introductory Fluent}, -journal = {Notes}, -title = {{Modeling Turbulent Flows What is Turbulence ?}}, -year = {2006} -} -@article{Training2006c, -author = {Training, Introductory Fluent}, -journal = {Notes}, -title = {{Introduction to CFD Analysis What is CFD ?}}, -year = {2006} -} -@article{Training2006d, -author = {Training, Introductory Fluent}, -journal = {Notes}, -title = {{Boundary Conditions}}, -year = {2006} -} -@article{Jacquin2006, -author = {Jacquin, Laurent and Tabeling, Patrick}, -title = {{E u q i}}, -year = {2006} -} -@book{Raffel, -author = {Raffel, Markus and Willert, Christian E and Wereley, Steve T and Kompenhans, J\"{u}rgen}, -isbn = {9783540723073}, -title = {{No Title}} -} -@article{Hysique2007, -author = {Hysique, P Arcours D E P and Iquides, D E S L}, -title = {{Marc Rabaud}}, -year = {2007} -} -@article{Drotz2007, -author = {Drotz, Docteur Alain and Habisreutinger, Marc A}, -title = {{M e}}, -year = {2007} -} -@book{Clark2003, -author = {Clark, Douglas N}, -isbn = {1584880538}, -title = {{Applied math for engineers and scientists of Mathematics}}, -year = {2003} -} -@article{Pelletier2010, -author = {Pelletier, Dominique}, -title = {{FEDSM-ICNMM2010-30033}}, -year = {2010} -} -@article{Celi, -author = {Celi, Roberto}, -pages = {1--39}, -title = {{HELICOPTER FLIGHT DYNAMIC SIMULATION WITH REFINED}} -} -@article{Ilts2008, -author = {Ilts, Dess}, -title = {{A \'{e} rodynamique de l ' h \'{e} licopt \`{e} re Plan de la pr \'{e} sentation}}, -year = {2008} -} -@article{History2006, -author = {History, Early Helicopter and History, Modern Helicopter and Hinges, Flapping and Speed, Maximum Forward and Flight, Forward and Wake, Rotor}, -journal = {Leonardo}, -number = {Tgg}, -title = {{Aerodynamics of a Helicopter Rotor in Forward Flight Early Helicopter History}}, -volume = {2000}, -year = {2006} -} -@article{Gimonet1998, -author = {Gimonet, B}, -journal = {Forum American Bar Association}, -number = {May}, -pages = {5--7}, -title = {{Identification du mod\`{e}le de m\'{e}canique du vol d ’ un h\'{e}licopt\`{e}re aux basses vitesses}}, -volume = {d}, -year = {1998} -} -@article{Brown2000, -author = {Brown, R E}, -number = {4}, -title = {{Comparison of Induced Velocity Models for Helicopter Flight Mechanics}}, -volume = {37}, -year = {2000} -} -@article{Bragg2003, -author = {Bragg, Mike and Loth, Eric and Broeren, Andy and Lee, Sam and Cri, Holly Gurbachi and Hutchison, Tim and Pokhariyal, Devesh and Oltman, Ryan and Merret, Jason and Pan, Jianping and Students, Undergraduate and Lamarre, Chris and Blumenthal, Leia}, -journal = {Test}, -pages = {1--28}, -title = {{Aerodynamics and Flight Mechanics}}, -year = {2003} -} -@article{Bruyere, -author = {Bruyere, Philippe and Vence, Eric}, -title = {{LA DYNAMIQUE DE VOL DE L ’ HELICOPTERE}}, -volume = {D} -} -@article{Masse, -author = {Masse, Nom}, -title = {{Chimie des solutions Thermodynamique}} -} -@article{Normale2000, -author = {Normale, Ecole and Lyon, Sup\'{e}rieure De and Rigaut, Matthieu}, -journal = {No\^{u}s}, -title = {{M\'{e}canique des Fluides Pr\'{e}face}}, -year = {2000} -} -@article{Chatellier2006, -author = {Chatellier, L}, -title = {{M\'{e}canique des fluides instationnaires}}, -year = {2006} -} -@article{Faure2006, -author = {Faure, Th}, -journal = {Sciences-New York}, -pages = {1--204}, -title = {{A\'{e}rodynamique appliqu\'{e}e}}, -year = {2006} -} -@article{Bushnell1991, -author = {Bushnell, D M and Moore, K J}, -journal = {Bone}, -keywords = {flying,resistance minimization,swimming}, -pages = {65--79}, -title = {{DRAG REDUCTION IN NATURE !}}, -year = {1991} -} -@article{Emanuel1991, -author = {Emanuel, Kerry A}, -journal = {Atlantic}, -keywords = {convection,finite-amplitude,moist convection,tropical cyclones}, -number = {1982}, -pages = {179--196}, -title = {{The theory of hurricanes}}, -year = {1991} -} -@article{Jenkinson, -author = {Jenkinson, Lloyd R and Simpkin, Paul and Rhodes, Darren}, -journal = {Analysis}, -title = {{Civil Jet Aircraft Design}} -} -@article{Dirisoft2007, -author = {Dirisoft, Journ\'{e}es}, -title = {{Journ\'{e}es Dirisoft - 6 et 7 D\'{e}cembre 2007 - Mantes la Jolie}}, -year = {2007} -} -@article{Ottavy, -author = {Ottavy, Xavier}, -title = {{Cours de turbomachine \`{a} fluide compressible}} -} -@article{Forme, -author = {Forme, I}, -pages = {2--5}, -title = {{Determination de l' equation d'euler}} -} -@article{En, -author = {En, Exprimees and Fixe, Repere and Mobile, O U}, -title = {{Rappel des equations de conservation locales ou integrales exprimees en repere fixe ou mobile}} -} -@article{Bailly, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation A short introduction to turbulent flows}} -} -@article{Baillya, -author = {Bailly, Christophe and Marsden, Olivier}, -journal = {Wire}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyb, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyc, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyd, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillye, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyf, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyg, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyh, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation}} -} -@article{Baillyi, -author = {Bailly, Christophe and Marsden, Olivier}, -title = {{Turbulence : description physique \& mod\'{e}lisation A short introduction to turbulent flows}} -} -@article{Mary2005, -author = {Mary, Queen}, -doi = {10.1017/S0022112005004453}, -pages = {65--100}, -title = {{The generation of streaks and hairpin vortices from a localized vortex disturbance embedded in unbounded uniform shear flow}}, -volume = {535}, -year = {2005} -} -@article{Spohn, -author = {Spohn, A}, -journal = {Topology}, -keywords = {ahmed body,flow separation,vortex flow,wake flow}, -title = {{Flow Separations Generated by a Simplified Geometry of an Automotive Vehicle}} -} -@article{Gillie2008, -author = {Gillie, Patrick}, -doi = {10.1016/j.compfluid.2008.01.009}, -journal = {Computers \& Fluids}, -pages = {1--11}, -title = {{Analysis and control of the near-wake flow over a square-back geometry}}, -year = {2008} -} -@article{Deb, -author = {De, L E Titre D E Docteur}, -title = {{N° d’ordre 2348}} -} -@article{Lienhart, -author = {Lienhart, H and Stoots, C and Becker, S}, -number = {Figure 3}, -title = {{Flow and Turbulence Structures in the Wake of a Simplified Car Model ( Ahmed Model )}} -} -@article{Fluides2008, -author = {Fluides, Dynamique and Du, L Aide and Actif, Controle and Jet, P A R}, -title = {{N° d’ordre : \ldots\ldots.}}, -year = {2008} -} -@article{Kim2004, -author = {Kim, Jeonglae and Hahn, Seonghyeon and Kim, Jinsung and Lee, Dong-kon and Choi, Jin and Jeon, Woo-pyung and Choi, Haecheon}, -doi = {10.1088/1468-5248/5/1/019}, -journal = {Journal of Turbulence}, -number = {04}, -pages = {1--12}, -title = {{Active control of turbulent flow over a model vehicle for drag reduction *}}, -volume = {5248}, -year = {2004} -} -@article{Amandine, -author = {Amandine, Hamel}, -journal = {System}, -title = {{PROMOTION X2005 Flow visualization and PIV measurements in the wake of a Sport Utility Vehicle Department of Mechanical Engineering}} -} -@article{Guilmineau2007, -author = {Guilmineau, E}, -title = {{Experimental and Numerical Analysis of The Effect of Side Wind on a Simplified Car Model}}, -year = {2007} -} -@article{Gohlke2007, -author = {Gohlke, M and Beaudoin, J F and Amielh, M and Anselmet, F}, -number = {1993}, -pages = {27--31}, -title = {{Structures tourbillonnaires et leur influence sur les efforts subis par un corps 3D en d\'{e}rapage}}, -year = {2007} -} -@article{Anselmet2007, -author = {Anselmet, F}, -doi = {10.1007/s00348-007-0341-z}, -journal = {Experiments in Fluids}, -pages = {579--594}, -title = {{Experimental analysis of flow structures and forces on a 3D-bluff-body in constant cross-wind}}, -year = {2007} -} -@article{Gohlke2008, -author = {Gohlke, M}, -journal = {Control}, -title = {{Drag reduction by flow control at PSA}}, -year = {2008} -} -@article{Fares2006, -author = {Fares, Ehab}, -doi = {10.1016/j.compfluid.2005.04.011}, -journal = {Computers \& Fluids}, -pages = {940--950}, -title = {{Unsteady flow simulation of the Ahmed reference body using a lattice Boltzmann approach}}, -volume = {35}, -year = {2006} -} -@article{Chometon2004, -author = {Chometon, F and Strzelecki, A and National, Conservatoire}, -journal = {Image (Rochester, N.Y.)}, -number = {i}, -title = {{Aerodynamic Characteristics of a New Simple Car Model for Experimental Analysis of Unsteady Wakes}}, -year = {2004} -} -@article{Brunn2007, -author = {Brunn, A and Wassen, E and Sperber, D and Nitsche, W and Thiele, F}, -pages = {247--259}, -title = {{Active Drag Control for a Generic Car Model}}, -year = {2007} -} -@article{Ancey2010, -author = {Ancey, Christophe}, -title = {{\'{E}C O L E P O L Y T E C H N I Q U E Hydraulique \`{a} surface libre Ph\'{e}nom\`{e}nes de propagation : ondes et ruptures de barrage Bases math\'{e}matiques , outils de simulations , applications}}, -year = {2010} -} -@article{National, -author = {National, Centre and Recherche, D E L A}, -journal = {Physics}, -number = {November 2011}, -title = {{The Meso-NH Atmospheric Simulation System : Scientific Documentation Part III : Physics}} -} -@article{National2011, -author = {National, Centre and Recherche, D E L A}, -number = {November}, -title = {{The Meso-NH Atmospheric Simulation System : Scientific Documentation Part II : Model Setup}}, -year = {2011} -} -@article{Nationala, -author = {National, Centre and Recherche, D E L A}, -number = {November 2011}, -title = {{The Meso-NH Atmospheric Simulation System : Scientific Documentation Part I : Dynamics}} -} -@article{Album, -author = {Album, An and Mo-, Fluid}, -journal = {Fluid Dynamics}, -title = {{ME 563 - Intermediate Fluid Dynamics - Su Lecture 0 - Visual fluids examples}} -} -@article{Holman, -author = {Holman, Jack P and Lloyd, John}, -journal = {Refrigeration And Air Conditioning}, -title = {{Fluid Mechanics}} -} -@article{Kapania2008, -author = {Kapania, Nitin R and Terracciano, Katherine and Taylor, Shannon}, -pages = {70--99}, -title = {{Modeling the Fluid Flow around Airfoils Using Conformal Mapping}}, -year = {2008} -} -@article{Randall2006, -author = {Randall, David A}, -journal = {Science}, -number = {1}, -title = {{Reynolds Averaging}}, -year = {2006} -} -@article{Mouvement, -author = {Mouvement, A and Mouvements, B}, -pages = {111--148}, -title = {{\'{E}coulements \`{a} potentiel de fluide incompressible homog\`{e}ne}} -} -@article{Grandeurs, -author = {Grandeurs, A B C D E F G H I J K L}, -title = {de fluides} -} -@article{Notion, -author = {Notion, A and Variables, B and Analyse, C and Flux, E and Classes, J}, -title = {des mouvements} -} -@article{Mouvementa, -author = {Mouvement, A and Mouvements, B}, -pages = {111--148}, -title = {{\'{E}coulements \`{a} potentiel de fluide incompressible homog\`{e}ne}} -} -@article{Grandeursa, -author = {Grandeurs, A B C D E F G H I J K L}, -title = {{\'{E}quations de bilans du mouvement de fluides}} -} -@article{Notiona, -author = {Notion, A and Variables, B and Analyse, C and Flux, E and Classes, J}, -journal = {Solutions}, -title = {des mouvements} -} -@article{Units, -author = {Units, Graphic Processor and Method, Vortex Element}, -journal = {Challenge}, -title = {{Gpu \& vem}} -} -@article{Muskulus2012, -author = {Muskulus, Michael}, -journal = {Science And Technology}, -title = {{A fast vortex method for wind turbine aerodynamics}}, -year = {2012} -} -@article{Hoydonck2011, -author = {Hoydonck, Wim Van and Workshop, Vortex Methods}, -journal = {Methods}, -pages = {13--17}, -title = {{NURBS-based vortex filament method}}, -year = {2011} -} -@article{Gaunaa2012, -author = {Gaunaa, Mac}, -journal = {Wind Energy}, -title = {{Mac ’ s Selection of Assorted Vortex Based Aerodynamic Goodies}}, -year = {2012} -} -@article{Muskulus, -author = {Muskulus, Michael}, -journal = {Seminar}, -title = {{Panel Vortex Code on GPU Where do I come from ?}} -} -@article{Renewable, -author = {Renewable, National and Centre, Energy}, -title = {{Panel code for unsteady modelling of deformable airfoils (ADAPTFOIL)}} -} -@article{Burtscher, -author = {Burtscher, Martin}, -title = {{An Efficient GPU Implementation of the Irregular Barnes Hut N-Body Algorithm High-End CPU and GPU Dies}} -} -@article{Voutsinas2012, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course}}, -year = {2012} -} -@article{Voutsinas2012a, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course Extension to compressible and viscous flows}}, -year = {2012} -} -@article{Voutsinas2012b, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{Fluid-structure interaction using vortex methods : The Wind Turbine problem}}, -year = {2012} -} -@article{Voutsinas2012c, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course Particle \& Vortex Methods}}, -year = {2012} -} -@article{Voutsinas2012d, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course}}, -year = {2012} -} -@article{Voutsinas2012e, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course Vortex methods in 2D airfoil aerodynamics}}, -year = {2012} -} -@article{Voutsinas2012f, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course Formulation of flow problems using vorticity}}, -year = {2012} -} -@article{Voutsinas2012g, -author = {Voutsinas, Spyros}, -title = {{PhD Course From theory to engineering practice Potential flow theory \& elementary flow-fields}}, -year = {2012} -} -@article{Voutsinas2012h, -author = {Voutsinas, Spyros}, -journal = {Mechanical Engineering}, -title = {{PhD Course}}, -year = {2012} -} -@article{Stone2010, -author = {Stone, Christopher P and Duque, Earl P N and Hennes, Christopher C}, -number = {January}, -pages = {2010}, -title = {{Rotor wake modeling with a coupled Eulerian and Vortex Particle Method}}, -year = {2010} -} -@article{Matthies, -author = {Matthies, Hermann G and Niekamp, Rainer and Srisupattarawanit, Tarin}, -journal = {Computing}, -title = {{Fluid-Structure Interaction with Software Components}} -} -@article{Gibbons1998, -author = {Gibbons, Jeremy and Lane, Gipsy}, -number = {1}, -pages = {63--65}, -title = {{‘ Hey — it works !’}}, -volume = {19}, -year = {1998} -} -@article{Veldhuizen2000, -author = {Veldhuizen, Todd}, -journal = {Science}, -number = {August}, -title = {{Techniques for Scienti c C ++ Todd Veldhuizen}}, -year = {2000} -} -@article{This2002, -author = {This, Introduction and Society, American Mathematical}, -journal = {Environments}, -pages = {1--17}, -title = {{Short Math Guide for L TEX Michael Downes}}, -year = {2002} -} -@article{Duffy2010, -author = {Duffy, Austen and Sussman, Mark}, -title = {{A GPU Accelerated PCG Pressure Projection Solver on Dynamic Adaptive Grids}}, -year = {2010} -} -@article{Veldhuizen1997, -author = {Veldhuizen, Todd}, -journal = {Science}, -number = {July}, -title = {{Scientific Computing : C ++ versus Fortran 2 : Why C ++ programs are much faster than they used to be}}, -year = {1997} -} -@article{Beazley, -author = {Beazley, David M}, -journal = {Notes}, -title = {{Interfacing C/C++ and Python with SWIG}} -} -@article{Cupido2002, -author = {Cupido, Noemi Sanchez}, -title = {{Nataci\'{o}n con aletas Resultados}}, -year = {2002} -} -@article{Velte2012, -author = {Velte, Clara M and Okulov, Valery L and Hansen, Martin O L}, -doi = {10.1063/1.3592800}, -journal = {Chaos}, -number = {2011}, -title = {{Alteration of helical vortex core without change in flow topology Alteration of helical vortex core without change in flow topology}}, -volume = {051707}, -year = {2012} -} -@article{Cl, -author = {Cl, Mots}, -pages = {293--348}, -title = {{\'{E}l\'{e}ments de calcul tensoriel}} -} -@article{Burkardt1995, -author = {Burkardt, John and Puglielli, Paul}, -pages = {1--40}, -title = {{MATMUL : An Interactive Matrix Multiplication Benchmark}}, -year = {1995} -} -@article{Leonard1989, -author = {Leonard, A and Chua, K}, -journal = {In Practice}, -pages = {490--496}, -title = {{u ( x ) = -T f Ix- x ' 13}}, -volume = {37}, -year = {1989} -} -@article{Thea, -author = {The, Motivation}, -journal = {Methods}, -pages = {1--8}, -title = {{Solutions of Laplace ’ s equation in 3d}} -} -@article{Simon2010, -author = {Simon, Emmanuel and Branlard, Pierre and Vej, Anker Engelunds}, -number = {61}, -pages = {25182}, -title = {{Danske Bank}}, -year = {2010} -} -@article{Stock2008, -author = {Stock, Mark J and Dahm, J A}, -keywords = {density discontinuity,stratified flow,vortex methods,vortex sheet dynamics,vortex-in-cell}, -number = {June}, -title = {{Impact of a vortex ring on a density interface using a regularized inviscid vortex sheet method}}, -year = {2008} -} -@article{Copy, -author = {Copy, Retention}, -journal = {Energy}, -title = {{F “â€}} -} -@article{Sanderse, -author = {Sanderse, B}, -title = {{Aerodynamics of wind turbine wakes Literature review}} -} -@article{Greengard1995, -author = {Greengard, Leslie and Lee, June-yub}, -journal = {Strain}, -pages = {1--24}, -title = {{A Direct Adaptive Poisson Solver of Arbitrary Order Accuracy}}, -year = {1995} -} -@article{Jackson2005, -author = {Jackson, Kevin J}, -journal = {Design}, -number = {July}, -title = {{Wind Power Generation Trends}}, -year = {2005} -} -@article{Concept2006, -author = {Concept, Coning Rotor}, -journal = {Structures and Materials}, -pages = {1--3}, -title = {{Urran rawford}}, -year = {2006} -} -@article{Jain2011, -author = {Jain, Kartik}, -journal = {German Research}, -title = {{The Computer Language Benchmarks Game}}, -year = {2011} -} -@article{Areias2011, -author = {Areias, P}, -journal = {Memory}, -title = {{Basic considerations}}, -year = {2011} -} -@article{Duffy2008, -author = {Duffy, Austen}, -journal = {Performance Computing}, -title = {{CFD : Compressible Flows High Performance Computing Seminar CFD : Compressible Flows What is a Compressible Flow ?}}, -year = {2008} -} -@article{Teske, -author = {Teske, E}, -journal = {Contractor}, -title = {{E. Teske, HI/02 Uncl\_s 0003611}} -} -@article{Gumerov, -author = {Gumerov, Nail A and Duraiswami, Ramani}, -journal = {Techniques}, -title = {{FMM accelerated BEM for 3D Laplace \& Helmholtz Equations}} -} -@article{Mobile2009, -author = {Mobile, Windows}, -journal = {Notes}, -title = {{Release Notes for Cisco AnyConnect VPN Client ,}}, -year = {2009} -} -@article{Kamemoto2009, -author = {Kamemoto, Kyoji}, -number = {June}, -pages = {1--34}, -title = {{Prospective Characteristics of a Lagrangian Vortex Method in Application into Vortex Flows of Moving Boundary Problems}}, -year = {2009} -} -@article{Ramasamy2004, -author = {Ramasamy, Manikandan and Leishman, J Gordon and Gessow, Alfred}, -journal = {Writing}, -title = {{A G ENERALIZED M ODEL FOR}}, -year = {2004} -} -@article{De2011, -author = {De, Echniques}, -journal = {Techniques}, -title = {{DE L ’ ADEME L ’ \'{e}olien en mer}}, -year = {2011} -} -@article{Conlisk, -author = {Conlisk, A T}, -keywords = {blade-vortex interaction,computational fluid dynamics,dynamic stall,experiments,rotor aerodynamics,tip-vortex,vortex wakes}, -title = {{MODERN HELICOPTER AERODYNAMICS}} -} -@article{Vasilescu2004, -author = {Vasilescu, Roxana}, -number = {November}, -title = {{HELICOPTER BLADE TIP VORTEX MODIFICATIONS IN HOVER USING PIEZOELECTRICALLY MODULATED BLOWING by HELICOPTER BLADE TIP VORTEX MODIFICATIONS IN HOVER USING PIEZOELECTRICALLY MODULATED}}, -year = {2004} -} -@article{On, -author = {On, Academic Program and Technology, Manufacturing and Bandyopadhyay, G}, -journal = {Aerospace Engineering}, -title = {{LECTURE NOTES ON}} -} -@article{Schmitz2005, -author = {Schmitz, Sven}, -doi = {10.1115/1.2035707}, -journal = {Journal of Solar Energy Engineering}, -number = {November}, -pages = {475--487}, -title = {{A Parallelized Coupled Navier-Stokes/Vortex-Panel Solver}}, -volume = {127}, -year = {2005} -} -@article{Carpenter, -author = {Carpenter, Paul I}, -title = {{NATIONAL ADV ! S \_ ORYCOMMITTEE FOR AERONAUTICS}} -} -@article{Mccombes2009, -author = {Mccombes, T and Johnstone, C and Grant, A}, -keywords = {elling,marine current turbine,unsteady mod-,vorticity transport,wake}, -title = {{Unsteady 3D Wake Modelling for Marine Current Turbines}}, -year = {2009} -} -@article{Laserjet, -author = {Laserjet, H P}, -title = {{HP LaserJet 4350 series printer}} -} -@article{Stepniewski, -author = {Stepniewski, W Z and Tarczynski, T and Aeronautics, National}, -journal = {Contractor}, -number = {September 1992}, -title = {{Open Airscrew VTOL Concepts}} -} -@article{Beebe1990, -author = {Beebe, Nelson H F}, -journal = {Matrix}, -number = {3}, -title = {{High-Performance Matrix Multiplication}}, -year = {1990} -} -@article{Tuck1993, -author = {Tuck, E O}, -number = {December 1991}, -pages = {127--144}, -title = {{SOME ACCURATE SOLUTIONS OF THE LIFTING SURFACE INTEGRAL EQUATION}}, -volume = {35}, -year = {1993} -} -@article{Sezer-uzol, -author = {Sezer-uzol, Nilay}, -journal = {Methodology}, -pages = {1--10}, -title = {{Effect of Steady and Transient Wind Shear on the Wake Structure and Performance of a Horizontal Axis Wind Turbine Rotor}} -} -@book{Faculty2007a, -author = {Faculty, Mechanical Engineering}, -isbn = {9789993204831}, -title = {{Improving BEM †based Aerodynamic Models in Wind Turbine Design Codes Improving BEM †based Aerodynamic Models Tonio Sant Tonio Sant Improving BEM-based Aerodynamic Models in Wind Turbine Design Codes}}, -year = {2007} -} -@article{Sant2006, -author = {Sant, Tonio and Kuik, Gijs Van and Bussel, G J W Van}, -doi = {10.1002/we}, -number = {September}, -pages = {549--577}, -title = {{Blade Pressure Measurements on the Wake Vortex Model : Axial Conditions}}, -year = {2006} -} -@book{Døssing2007, -author = {D\o ssing, Mads}, -isbn = {9788755036338}, -keywords = {August 2007}, -number = {August}, -title = {{Vortex Lattice Modelling of Winglets on Wind Turbine Blades}}, -volume = {1621}, -year = {2007} -} -@article{Shenkar2010, -author = {Shenkar, Reuven}, -number = {September}, -title = {{Design and Optimization of Planar and Nonplanar Wind Turbine Blades Using Vortex Methods}}, -year = {2010} -} -@book{Olsen2001, -author = {Olsen, Anders Sm\ae rup}, -booktitle = {Maritime Engineering}, -isbn = {8789502582}, -number = {December}, -title = {{Optimisation of Propellers Using the Vortex-Lattice Method}}, -year = {2001} -} -@article{Herbert, -author = {Herbert, Henry E and Lamar, John E}, -journal = {Nasa Technical Memorandum}, -number = {April 1982}, -title = {{Technical Memorandum}} -} -@article{Lamar, -author = {Lamar, John E}, -journal = {Program}, -title = {{No Title}} -} -@article{Lamar1971, -author = {Lamar, E}, -journal = {Security}, -number = {February}, -title = {{Nasa tn d-6142}}, -year = {1971} -} -@article{Micallef2010, -author = {Micallef, Daniel and Sant, Tonio}, -journal = {New Horizons}, -number = {January}, -pages = {1--10}, -title = {{Aiaa 2010-462}}, -year = {2010} -} -@article{Sc2008, -author = {Sc, K R Dixon B A}, -journal = {Technology}, -keywords = {Darrieus, Vertical Axis Wind Turbine, Vorticity, U}, -title = {{The Near Wake Structure of a Vertical Axis Wind Turbine}}, -year = {2008} -} -@article{Komninos2008, -author = {Komninos, Konstantinos}, -title = {{Modeling considerations of the optimum rotor using vortex method}}, -year = {2008} -} -@article{Kloosterman2009, -author = {Kloosterman, M H M}, -keywords = {intership, msc, subject}, -title = {{Development of the Near Wake}}, -year = {2009} -} -@article{Krua1980, -author = {Krua, T}, -journal = {Arbeit}, -title = {{No Title}}, -volume = {651}, -year = {1980} -} -@article{Leishman2005, -author = {Leishman, J Gordon}, -journal = {Methodology}, -number = {January}, -pages = {1--24}, -title = {{COMPARISON OF MOMENTUM AND VORTEX METHODS FOR THE AERODYNAMIC}}, -year = {2005} -} -@article{Ichikawa1996, -author = {Ichikawa, Masami}, -journal = {Notes}, -number = {3}, -pages = {632--634}, -title = {{Analytical Expression of Induced Drag for a Finite Elliptic Wing}}, -volume = {33}, -year = {1996} -} -@article{Zioutis, -author = {Zioutis, Christos K}, -journal = {International Journal of Engineering}, -number = {3}, -pages = {521--537}, -title = {{Influence of Helicopter Rotor Wake Modeling on Blade Airload Predictions}} -} -@article{Yokota2009, -author = {Yokota, R and Narumi, T and Sakamaki, R and Kameoka, S and Obi, S and Yasuoka, K}, -doi = {10.1016/j.cpc.2009.06.009}, -issn = {0010-4655}, -journal = {Computer Physics Communications}, -keywords = {fast multipole method,graphics processing unit,pseudo-particle method}, -number = {11}, -pages = {2066--2078}, -publisher = {Elsevier B.V.}, -title = {{Fast multipole methods on a cluster of GPUs for the meshless simulation of turbulence D $\omega$ D $\omega$}}, -url = {http://dx.doi.org/10.1016/j.cpc.2009.06.009}, -volume = {180}, -year = {2009} -} -@article{Wie2010, -author = {Wie, Seong Yong and Lee, Jae Hoon and Kwon, Jang Hyuk and Lee, Duck Joo}, -doi = {10.1115/1.4002110}, -journal = {Journal of Fluids Engineering}, -number = {August}, -pages = {1--6}, -title = {{Far-Field Boundary Condition Effects of CFD and Free-Wake Coupling Analysis for Helicopter Rotor}}, -volume = {132}, -year = {2010} -} -@article{Mathematik2006, -author = {Mathematik, Fachbereich and Geometrie, Arbeitsgruppe and Visualisierung, Fachgebiet Mathematische}, -journal = {Group}, -title = {{Real time simulation of fluid flow}}, -year = {2006} -} -@article{Vetter2008, -author = {Vetter, Daniel}, -journal = {Most}, -number = {May}, -title = {{Fast Multipole Algorithm ( FMA ) Seminar Top Ten Algorithms “ Potential Fields in 2D The Fast Multipole Algorithm in 2D Advanced Topics FMA in 3D}}, -year = {2008} -} -@article{Honor1997, -author = {Honor, Jens and Larsen, Allan}, -journal = {Journal of Wind Engineering and Industrial Aerodynamics}, -keywords = {aerodynamic derivatives,conservation of vorticity,discrete vortex method,flow past a flat,moments,plate,vorticity boundary condition}, -pages = {183--193}, -title = {{Two dimensional discrete vortex method for application to bluff body aerodynamics d ¢ S}}, -volume = {68}, -year = {1997} -} -@article{Mitreva, -author = {Mitreva, Makedonka}, -journal = {Nature}, -title = {{The Human Body : An extended community}} -} -@article{Reconstruction, -author = {Reconstruction, Quantitative M R I}, -pages = {2006--2008}, -title = {{Application Case Study – Quantitative MRI Reconstruction}} -} -@article{Visualization2009, -author = {Visualization, Molecular}, -pages = {2007--2009}, -title = {{ECE 498AL Lecture 21-22 : Application Performance Case Studies : Molecular Visualization and Analysis VMD – “ Visual Molecular Dynamics â€}}, -year = {2009} -} -@article{Format2008, -author = {Format, Floating Point}, -number = {1}, -pages = {2006--2008}, -title = {{Floating Point Considerations}}, -volume = {0}, -year = {2008} -} -@article{Execution, -author = {Execution, Thread}, -journal = {Imagine}, -pages = {1--19}, -title = {{Performance Considerations}} -} -@article{Hwu, -author = {Hwu, Wen-mei}, -journal = {Memory}, -pages = {2006--2008}, -title = {{Chapter 4 CUDA Memories}} -} -@article{Hwu2008, -author = {Hwu, Wen-mei}, -pages = {2006--2008}, -title = {{Introduction}}, -year = {2008} -} -@article{Tryggvason1989, -author = {Tryggvason, Grbtar}, -journal = {Journal of Computational Physics}, -title = {{Simulation of Vortex Sheet Roil-up by Vortex Methods}}, -volume = {16}, -year = {1989} -} -@article{Totsuka2007, -author = {Totsuka, Yoshitaka and Obi, Shinnosuke}, -doi = {10.1299/jfst.2.248}, -journal = {Methods}, -keywords = {computational fluid dynamics,fmm,grid-free vortex,method,mps,turbulent flow,viscous dissipation process,vortex}, -number = {1}, -pages = {23--29}, -title = {{Science and A Validation of the Viscous Dissipation Model for Fast Vortex Methods in Simulations of Decaying Turbulence ∗}}, -volume = {2}, -year = {2007} -} -@article{Tchieu2010, -author = {Tchieu, Andrew A}, -journal = {Control}, -title = {{The Development of Low-Order Models for the Study of Fluid-Structure Interactions Thesis by}}, -volume = {2010}, -year = {2010} -} -@article{Tanaka2002, -author = {Tanaka, Nobuatsu}, -journal = {Fluid Dynamics}, -keywords = {discrete vortex method,hamiltonian,symplectic integrator,time integration}, -number = {3}, -pages = {2002}, -title = {{APPLICATION OF SYMPLECTIC INTEGRATORS}}, -volume = {11}, -year = {2002} -} -@article{Tutty1997, -author = {Tutty, O R}, -journal = {Exchange Organizational Behavior Teaching Journal}, -pages = {1--11}, -title = {{No Title}}, -year = {1997} -} -@article{Stone2010a, -author = {Stone, Christopher P and Duque, Earl P N and Hennes, Christopher C}, -number = {January}, -title = {{Rotor wake modeling with a coupled Eulerian and Vortex Particle Method}}, -year = {2010} -} -@article{Stock, -author = {Stock, Mark J and Gharakhani, Adrin}, -pages = {1--13}, -title = {{Toward efficient GPU-accelerated N -body simulations}} -} -@article{Stockb, -author = {Stock, Mark J and Stone, Christopher P and Science, Computational}, -pages = {1--12}, -title = {{Modeling Rotor Wakes with a Hybrid OVERFLOW-Vortex Method on a GPU Cluster}} -} -@article{Stock2006, -author = {Stock, Mark Joseph}, -title = {{A Regularized Inviscid Vortex Sheet Method for Three Dimensional Flows With Density Interfaces by}}, -year = {2006} -} -@article{Stockc, -author = {Stock, Mark J and Stone, Christopher P and Science, Computational}, -pages = {1--12}, -title = {{Modeling Rotor Wakes with a Hybrid OVERFLOW-Vortex Method on a GPU Cluster}} -} -@article{Sheel2008, -author = {Sheel, Tarun Kumar}, -journal = {Engineering}, -number = {March}, -title = {{Development of a Fast Vortex Method for Fluid Flow Simulation using Special-Purpose Computers}}, -year = {2008} -} -@article{Stock2010, -author = {Stock, Mark J and Gharakhani, Adrin}, -pages = {1--12}, -title = {{A GPU-accelerated Boundary Element Method and Vortex Particle Method}}, -year = {2010} -} -@article{Selle2004, -author = {Selle, Andrew}, -journal = {Work}, -keywords = {explosions,fluids,smoke,vortex methods,water}, -title = {{A Vortex Particle Method for Smoke , Water and Explosions}}, -year = {2004} -} -@article{No1996, -author = {No, Article}, -pages = {88--109}, -title = {{A New Diffusion Procedure for Vortex Methods}}, -volume = {109}, -year = {1996} -} -@article{Schmitz, -author = {Schmitz, Sven and Chattot, Jean-jacques}, -journal = {Order A Journal On The Theory Of Ordered Sets And Its Applications}, -number = {1}, -title = {{A Coupled Navier-Stokes / Vortex-Panel Solver for the Numerical Analysis of Wind Turbines}} -} -@article{Schmitza, -author = {Schmitz, Sven and Chattot, Jean-jacques}, -journal = {Science}, -pages = {832--836}, -title = {{Influence of the vortical wake behind wind turbines using a coupled Navier-Stokes / Vortex-Panel methodology}} -} -@article{Scheurich2011, -author = {Scheurich, Frank}, -title = {{Modelling the Aerodynamics of Vertical-Axis Wind Turbines}}, -year = {2011} -} -@article{Sbalzarini:2007, -author = {Sbalzarini, Ivo F}, -title = {{Introduction to Particle Methods for the Simulation of Continuous Systems}}, -year = {2007} -} -@article{Sakajo2007, -author = {Sakajo, Takashi}, -keywords = {fast tree-code algorithms,flows on sphere,vortex,vortex method}, -pages = {1--19}, -title = {{A fast tree-code algorithm for the vortex method}}, -year = {2007} -} -@article{Rubel2007, -author = {Rubel, Michael T}, -title = {{A THEORY OF STATIONARITY AND ASYMPTOTIC APPROACH IN DISSIPATIVE SYSTEMS Thesis by}}, -volume = {2007}, -year = {2007} -} -@article{Rossinelli2010, -author = {Rossinelli, Diego and Bergdorf, Michael and Cottet, Georges-henri and Koumoutsakos, Petros}, -doi = {10.1016/j.jcp.2010.01.004}, -issn = {0021-9991}, -journal = {Journal of Computational Physics}, -number = {9}, -pages = {3316--3333}, -publisher = {Elsevier Inc.}, -title = {{GPU accelerated simulations of bluff body flows using vortex particle methods}}, -url = {http://dx.doi.org/10.1016/j.jcp.2010.01.004}, -volume = {229}, -year = {2010} -} -@article{Rowley, -author = {Rowley, Clarence W and Marsden, Jerrold E}, -journal = {ReCALL}, -pages = {1--7}, -title = {{Variational integrators for degenerate Lagrangians , with application to point vortices}} -} -@article{Society2011, -author = {Society, The Royal and Sciences, Physical}, -journal = {Society}, -number = {1886}, -pages = {481--494}, -title = {{Long-time symplectic integration : the example of four-vortex motion}}, -volume = {432}, -year = {2011} -} -@article{Oxley2009, -author = {Oxley, Gregory S and Eng, B}, -journal = {Simulation}, -number = {July}, -title = {{A 2-D Hybrid Euler-Compressible Vortex Particle Method For Transonic Rotorcraft Flows Doctorate of Philosophy A 2-D Hybrid Euler-Compressible Vortex Particle Method For Transonic Rotorcraft Flows}}, -year = {2009} -} -@article{Oberkampf2002, -author = {Oberkampf, William L and Trucano, Timothy G}, -journal = {Aerospace}, -number = {March}, -title = {{Verification and Validation in Computational Fluid Dynamics 1}}, -year = {2002} -} -@article{Musgrave2009, -author = {Musgrave, Ruth and Moghaddami, Mostafa and Avsarkisov, Victor and Wang, Ruoqian}, -title = {{Point Vortex Dynamics in Two Dimensions}}, -year = {2009} -} -@article{Nyland, -author = {Nyland, Lars and Prins, Jan}, -journal = {Simulation}, -pages = {677--696}, -title = {{Fast N-Body Simulation with CUDA}} -} -@article{Search2005, -author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Address, I P}, -doi = {10.1088/0034-4885/68/8/R01}, -journal = {Online}, -title = {{Smoothed particle hydrodynamics}}, -volume = {1703}, -year = {2005} -} -@article{Moffatt1998, -author = {Moffatt, H K}, -journal = {Advances}, -title = {{www.moffatt.tc FORMATION AND DISRUPTION OF CONCENTRATED VORTICES IN TURBULENCE}}, -year = {1998} -} -@article{Mcwilliams1984, -author = {Mcwilliams, By James C}, -title = {w}, -volume = {146}, -year = {1984} -} -@article{Ii2009, -author = {Ii, Federico and Napoli, Napoli}, -journal = {Notes}, -pages = {1--109}, -title = {{Stallo dinamico}}, -year = {2009} -} -@article{Marichal2011, -author = {Marichal, Y}, -journal = {Engineering}, -number = {November}, -pages = {2011}, -title = {{Development of a coupled vortex particle - finite volume method and application to the flow past a rectangular wing}}, -volume = {2011}, -year = {2011} -} - -@article{Lezar2011, -author = {Lezar, Evan}, -number = {March}, -title = {{GPU Acceleration of Matrix-based Methods in Computational Electromagnetics}}, -year = {2011} -} -@article{Computational1980, -author = {Computational, O F}, -journal = {Journal of Computational Physics}, -pages = {289--335}, -title = {{for Flow Simulation}}, -volume = {335}, -year = {1980} -} -@article{Lee2008, -author = {Lee, E and Moulinec, C and Xu, R and Violeau, D and Laurence, D and Stansby, P}, -doi = {10.1016/j.jcp.2008.06.005}, -journal = {Journal of Computational Physics}, -pages = {8417--8436}, -title = {{Comparisons of weakly compressible and truly incompressible algorithms for the SPH mesh free particle method}}, -volume = {227}, -year = {2008} -} -@article{E2002, -author = {E, Phane L E D I Z and Verga, Alberto}, -journal = {Framework}, -title = {{Viscous interactions of two co-rotating vortices before merging}}, -year = {2002} -} -@article{Koumoutsakos1997, -author = {Koumoutsakos, P}, -keywords = {inviscid vortical flows,vortex methods,vorticity axisymmetri-}, -pages = {821--857}, -title = {{Inviscid Axisymmetrization of an Elliptical Vortex}}, -volume = {857}, -year = {1997} -} -@article{Klamo2007, -author = {Klamo, Joseph Thomas}, -number = {September 2006}, -title = {{Effects of Damping and Reynolds Number on Vortex-Induced Vibrations Thesis by}}, -volume = {2007}, -year = {2007} -} -@article{Jones1996, -author = {Jones, K D and Dohring, C M and Platzer, M F}, -journal = {Methods}, -title = {{AIAA 96 − 0078 WAKE STRUCTURES BEHIND PLUNGING AIRFOILS : A COMPARISON OF NUMERICAL AND EXPERIMENTAL RESULTS Naval Postgraduate School Monterey , CA 34th Aerospace Sciences Meeting \& Exhibit}}, -year = {1996} -} -@article{Hunter2006, -author = {Hunter, John K}, -pages = {1--25}, -title = {{An Introduction to the Incompressible Euler Equations}}, -year = {2006} -} -@article{Ilie2009, -author = {Ilie, Marcel}, -doi = {10.1016/j.compstruc.2008.11.011}, -issn = {0045-7949}, -journal = {Computers and Structures}, -keywords = {helicopter blade,large-eddy simulation,vortex interaction}, -number = {11-12}, -pages = {758--768}, -publisher = {Elsevier Ltd}, -title = {{Numerical study of helicopter blade – vortex mechanism of interaction using large-eddy simulation}}, -url = {http://dx.doi.org/10.1016/j.compstruc.2008.11.011}, -volume = {87}, -year = {2009} -} -@article{Vortex1979, -author = {Vortex, O F}, -journal = {Society}, -number = {5}, -pages = {726--755}, -title = {{Convergence methods ii*}}, -volume = {16}, -year = {1979} -} -@article{Prete2011, -author = {Prete, Del}, -journal = {Society}, -number = {143}, -pages = {791--809}, -title = {{Convergence of Vortex Methods for Euler ' s Equations}}, -volume = {32}, -year = {2011} -} -@article{Gumerov2008, -author = {Gumerov, Nail A and Duraiswami, Ramani}, -doi = {10.1016/j.jcp.2008.05.023}, -journal = {Journal of Computational Physics}, -pages = {8290--8313}, -title = {{Fast multipole methods on graphics processors}}, -volume = {227}, -year = {2008} -} -@article{Graziani1995, -author = {Graziani, G and Ranucci, M and Piva, R}, -journal = {Computational Mechanics}, -title = {method for viscous flows}, -volume = {5}, -year = {1995} -} -@article{Graziani2002, -author = {Graziani, Giorgio and Bassanini, Piero}, -keywords = {forces,viscous flow,vortex shedding}, -pages = {283--303}, -title = {{Unsteady Viscous Flows about Bodies : Vorticity Release and Forces}}, -year = {2002} -} -@article{Publishers1994, -author = {Publishers, Kluweracademic and Sapienza, La}, -journal = {Structure}, -keywords = {viscous flow,vortex dynamics,vorticity structures}, -pages = {465--478}, -title = {{Viscous vs . Inviscid Interaction of a Vorticity Structure with a Circular Cylinder}}, -year = {1994} -} -@article{Getreuer2010, -author = {Getreuer, Pascal}, -number = {April}, -title = {{Writing M ATLAB C / MEX Code}}, -year = {2010} -} -@article{Gallizio, -author = {Gallizio, Federico and Torino, Politecnico}, -title = {model separated flows} -} -@article{Fuentes2003, -author = {Fuentes, O U Velasco and Vela, F A and Introduction, I}, -doi = {10.1063/1.1556293}, -journal = {Physics of Fluids}, -number = {4}, -title = {{Interaction of two equal vortices on a ⤠plane ´}}, -volume = {15}, -year = {2003} -} -@article{Ferreira, -author = {Ferreira, Carlos Sim\~{a}o}, -title = {{The near wake of the VAWT 2D and 3D views of the VAWT aerodynamics}} -} -@article{Deglaire2009, -author = {Deglaire, P and Engblom, S and \AA gren, O and Bernhoff, H}, -doi = {10.1016/j.euromechflu.2008.11.004}, -issn = {0997-7546}, -journal = {European Journal of Mechanics B/Fluids}, -keywords = {vertical axis turbine}, -number = {4}, -pages = {506--520}, -publisher = {Elsevier Masson SAS}, -title = {{European Journal of Mechanics B / Fluids Analytical solutions for a single blade in vertical axis turbine motion in two-dimensions}}, -url = {http://dx.doi.org/10.1016/j.euromechflu.2008.11.004}, -volume = {28}, -year = {2009} -} -@article{Taylor2011, -author = {Taylor, Publisher}, -journal = {Journal of Turbulence}, -number = {September}, -pages = {37--41}, -title = {{Simulation of three-dimensional bluff-body flows using vortex methods :}}, -year = {2011} -} -@article{Dushaw2008, -author = {Dushaw, Brian}, -journal = {Applied Physics}, -pages = {1--25}, -title = {{Matlab and CUDA}}, -year = {2008} -} -@article{Aeninck2006, -author = {Aeninck, R I C D}, -journal = {Movie}, -title = {{D EVELOPMENTS IN HYBRID APPROACHES Vortex method with known separation location Vortex method with near-wall Eulerian solver RANS-LES coupling}}, -year = {2006} -} -@article{Cruz, -author = {Cruz, Felipe A}, -journal = {Evaluation}, -pages = {1--23}, -title = {{Fast summation methods on the GPU with an application to the Adaptive Vortex Method}} -} -@article{Cnndilinnaa, -author = {Cnndilinnaa, Bnunclnry and Properties, Lurmervzaliun}, -journal = {Methods}, -title = {{Cemrerzrs}} -} -@article{No1996a, -author = {No, Article}, -journal = {Interpretation A Journal Of Bible And Theology}, -pages = {299--308}, -title = {{Artificial Viscosity Models for Vortex and Particle Methods}}, -volume = {308}, -year = {1996} -} -@article{Lmc-imag, -author = {Lmc-imag, Cottet and Outline, Joseph Fourier}, -title = {{Particle methods in CFD}} -} -@article{Cottet2002, -author = {Cottet, Georges-henri and Michaux, Bertrand and Ossia, Sepand}, -doi = {10.1006/jcph.2001.6963}, -journal = {Time}, -keywords = {isotropic turbulence,spectral method,vortex and particle method,vortex reconnection}, -title = {{A Comparison of Spectral and Vortex Methods in Three-Dimensional Incompressible Flows}}, -year = {2002} -} -@book{Chorin, -author = {Chorin, Alexandre J}, -isbn = {0387941975}, -title = {{Turbulence Vorticity and Turbulence}} -} -@article{Clarke1994, -author = {Clarke, N R and Tutty, O R}, -journal = {Science}, -number = {6}, -pages = {751--783}, -title = {{Pergamon}}, -volume = {23}, -year = {1994} -} -@article{Chen1998, -author = {Chen, Shiyi and Doolen, Gary D}, -keywords = {fluid flow simulation,lattice boltzmann method,mesoscopic approach}, -number = {Kadanoff 1986}, -title = {{LATTICE BOLTZMANN METHOD}}, -year = {1998} -} -@article{He2009, -author = {He, Chengjian and Zhao, Jinggen and Technology, Advanced Rotorcraft and View, Mountain}, -doi = {10.2514/1.36466}, -journal = {AIAA Journal}, -number = {4}, -title = {{Modeling Rotor Wake Dynamics with Viscous}}, -volume = {47}, -year = {2009} -} -@article{Cheng1997, -author = {Cheng, M and Chew, Y T and Luo, S C}, -journal = {International Journal}, -keywords = {bluff body,hybrid vortex method}, -number = {April 1996}, -pages = {253--274}, -title = {{A hybrid vortex method for flows over a bluff body}}, -volume = {24}, -year = {1997} -} -@article{Chatelain, -author = {Chatelain, Philippe and Curioni, Alessandro and Bergdorf, Michael and Rossinelli, Diego and Andreoni, Wanda and Koumoutsakos, Petros}, -pages = {479--489}, -title = {{Vortex Methods for Massively Parallel Computer Architectures}} -} -@article{Chatelain2010, -author = {Chatelain, Philippe and Bricteux, Laurent and Winckelmans, Gr\'{e}goire}, -journal = {Civil Engineering}, -number = {December}, -title = {{Vortex methods with immersed lifting lines applied to LES of wind turbine wakes Wake crisis}}, -year = {2010} -} -@article{Of2002, -author = {Of, O U R N A L}, -journal = {Journal of Turbulence}, -number = {March}, -pages = {17--20}, -title = {{Face-centred cubic lattices and particle redistribution in vortex methods † Philippe Chatelain and Anthony Leonard}}, -volume = {5248}, -year = {2002} -} -@article{Chatelain2005, -author = {Chatelain, Philippe}, -title = {{Contributions to the Three-Dimensional Vortex Element Method and Spinning Bluff Body Flows Thesis by}}, -volume = {2005}, -year = {2005} -} -@article{Casciola1996, -author = {Casciola, C M and Piva, R}, -journal = {Representations}, -pages = {345--356}, -title = {{Vorticity Generation on a Flat Surface in 3D Flows}}, -volume = {356}, -year = {1996} -} -@article{Search1990, -author = {Search, Home and Journals, Collections and Contact, About and Iopscience, My and Address, I P}, -journal = {Nuclear Physics}, -title = {{Symplectic integration of Hamiltonian systems *}}, -volume = {231}, -year = {1990} -} -@article{Miocchi1998, -author = {Miocchi, P}, -pages = {29--48}, -title = {{A Comparison between the Fast Multipole Algorithm and the Tree-Code to Evaluate Gravitational Forces in 3-D}}, -volume = {48}, -year = {1998} -} -@article{Birdsall1997, -author = {Birdsall, Charles K and Fuss, Dieter}, -journal = {Atomic Energy}, -pages = {141--148}, -title = {{Clouds-in-Clouds , Clouds-in-Cells Physics for Many-Body Plasma Simulation 1}}, -volume = {148}, -year = {1997} -} -@article{Berkman1997, -author = {Berkman, Mert E and Berezin, Charles R and Torok, Michael S}, -journal = {Society}, -number = {c}, -title = {{No Title}}, -year = {1997} -} - - - -@article{Barba2005, -author = {Barba, L A and Leonard, A and Allen, C B}, -journal = {International Journal for Numerical Methods in Fluids}, -keywords = {core spreading,meshless cfd,viscous vortex interactions,vortex method}, -number = {April 2004}, -pages = {841--848}, -title = {{Vortex method with meshless spatial adaption for accurate simulation of viscous , unsteady vortical ows}}, -year = {2005} -} -@article{Bassanini1999, -author = {Bassanini, P and Casciola, C M and Lancia, M R and Piva, R and La, Roma and Matematica, Dipartimento and Moro, Ple A}, -journal = {Most}, -keywords = {aerodynamics,boundary integral equations,edge singularities,fluid dynamics,kutta condition}, -pages = {199--229}, -title = {{Edge Singularities and Kutta Condition in 3D Aerodynamics}}, -year = {1999} -} -@PHDTHESIS{barba:2004thesis, -author = {Barba, L. A.}, -title = {{Vortex Method for computing high-Reynolds number flows : Increased accuracy with a fully mesh-less formulation}}, -school = {California Institute of technology}, -year = {2004} -} -@article{Introduction1982, -author = {Introduction, An}, -pages = {1--72}, -title = {{6 . Aerodynamics of 3D Lifting Surfaces through Vortex Lattice Methods}}, -year = {1982} -} -@article{Anderson1985, -author = {Anderson, Christopher}, -journal = {Society}, -number = {3}, -pages = {413--440}, -title = {{ON VORTEX METHODS *}}, -volume = {22}, -year = {1985} -} -@book{Users, -author = {Users, Information T O}, -booktitle = {Engineering}, -isbn = {0612552942}, -title = {{Information to users}} -} -@article{Gaunaa2011a, -author = {Gaunaa, Mac and Rh, Pierre-elouan}, -journal = {Wind Energy}, -number = {February}, -title = {{Ris\o contributions to final report}}, -year = {2011} -} -@article{Gaunaa2011b, -author = {Gaunaa, Mac and S\o rensen, Niels N and D\o ssing, Mads}, -journal = {Wind Energy}, -number = {January}, -title = {{Prediction of steady aerodynamic performance of rotors with winglets using simple prescribed wake methods}}, -year = {2011} -} -@article{Garrel2003a, -author = {Garrel, A Van}, -journal = {Energy}, -number = {August}, -title = {{DEVELOPMENT OF A WIND TURBINE AERODYNAMICS SIMULATION MODULE}}, -year = {2003} -} -@article{Grasso2011, -author = {Grasso, F and Garrel, A Van and Schepers, J G}, -journal = {Wind Energy}, -number = {January}, -pages = {4--7}, -title = {{Development and Validation of Generalized Lifting Line Based Code for Wind Turbine Aerodynamics}}, -year = {2011} -} -@article{Currin2009, -author = {Currin, Prof Hugh and Long, Prof James}, -journal = {Systems Engineering}, -pages = {1--11}, -title = {{Horizontal Axis Wind Turbine Free Wake Model for AeroDyn}}, -year = {2009} -} -@article{Chattot2004, -author = {Chattot, Jean-jacques}, -journal = {Fluid Dynamics}, -number = {October}, -pages = {1--9}, -title = {{ANALYSIS AND DESIGN OF WINGS AND WING / WINGLET COMBINATIONS AT LOW SPEEDS}}, -volume = {13}, -year = {2004} -} -@article{Chattot2002, -author = {Chattot, Jean-jacques}, -journal = {Fluid Dynamics}, -number = {1}, -pages = {1--5}, -title = {{DESIGN AND ANALYSIS OF WIND TURBINES USING HELICOIDAL VORTEX MODEL Key Words :}}, -volume = {11}, -year = {2002} -} -@article{Chattot2001, -author = {Chattot, Jean-jacques}, -journal = {Fluid Dynamics}, -number = {2}, -title = {{OPTIMIZATION OF PROPELLERS USING HELICOIDAL VORTEX MODEL Key Words :}}, -volume = {9}, -year = {2001} -} -@article{Basom2011, -author = {Basom, Blair J and Maughmer, Mark D}, -number = {January}, -pages = {1--21}, -title = {{Inviscid Analysis of Horizontal-Axis Wind Turbines Using}}, -year = {2011} -} -@article{Introduction1982a, -author = {Introduction, An}, -pages = {1--72}, -title = {{6 . Aerodynamics of 3D Lifting Surfaces through Vortex Lattice Methods}}, -year = {1982} -} -@article{Mal2009, -author = {Mal, Pra\c{c}a and Gomes, Eduardo and Campos-sp, S\~{a}o Jos\'{e}}, -journal = {Control}, -keywords = {aerodynamics,uav,vortex lattice method}, -title = {{A VORTEX LATTICE PROGRAM FOR STEADY STATE AERODYNAMIC}}, -year = {2009} -} diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile deleted file mode 100644 index 94452d9c98..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -MAIN=BeamDynInput - -SVGTEXDIR=svgtex -SVGTEXOUTDIR=figs_svgtex -SVGTEXS=$(notdir $(wildcard $(SVGTEXDIR)/*.svg)) -SVGTEXS2PDFS=$(patsubst %,$(SVGTEXOUTDIR)/%,$(SVGTEXS:.svg=.pdf)) - - -INKSCAPE=inkscape -RM=rm -f -MV=mv -SLASH="/" -ifdef OS - # Windows specific - # INKSCAPE="C:/Program Files/Inkscape/inkscape.exe" - RM=del - MV=move /Y - SLASH="\\" -endif - -all: figspdf pdf - -pdf: figspdf - pdflatex -synctex=1 --file-line-error-style --shell-escape --interaction=nonstopmode $(MAIN) - bibtex $(MAIN).aux - -bibtex: - bibtex $(MAIN).aux - -figspdf: $(SVGTEXOUTDIR) $(SVGTEXS2PDFS) - -$(SVGTEXOUTDIR)/%.pdf:$(SVGTEXDIR)/%.svg - $(INKSCAPE) -z -D -o "$(SVGTEXOUTDIR)/$*.pdf" --export-latex "$<" - $(MV) "$(SVGTEXOUTDIR)$(SLASH)$*.pdf_tex" "$(SVGTEXOUTDIR)$(SLASH)$*.tex" -# $(INKSCAPE) -z -D --file="$<" --export-pdf="$(SVGTEXOUTDIR)/$*.pdf" --export-latex - -$(SVGTEXOUTDIR): - mkdir $@ - -clean: - $(RM) *.log *.aux *.out *.bbl *.blg *.toc diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg deleted file mode 100644 index c95ac3ba07..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/AeroElastCodesCoordConvention.svg +++ /dev/null @@ -1,1798 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - $z_0<0$ - $y_0<0$ - $z_{Fl}$ - $x_{Fl}$ - $y_{Fl}$ - - - - - - - - -   - - - - - - + - - $y_{c/2}<0$ - $x_{c/2}<0$ - $y_H$ - $z_H$ - $x_H$ - - - - - - - - -   - - - - - - + - - - $z_F$ - $x_F$ - $y_F$ - - - - - - - - -   - - - - - - - - - OpenFAST - HAWC2 - Flex - - - - - - - - - $x_F$ - $z_F$ - $y_F$ - $\Omega$ - - - - - - - - - - $y_H$ - $z_H$ - $x_H$ - $\Omega$ - - - - - - - - - $z_{Fl}$ - $x_{Fl}$ - $y_{Fl}$ - $\Omega$ - - - BlCrvAC$<0$ - BlSwpAC$>0$ - Pointing down for $\psi =0$ OpenFAST - HAWC2 - Flex - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg deleted file mode 100644 index b786bf85e6..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord.svg +++ /dev/null @@ -1,1283 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - $z$ - $x$ - $y$ - - - - - - - -   - - - - - - + - - - - - - - - - $O$ - $C$ - $S$ - - - - - - $G$ - $y_S$ - $x_S$ - - - - - - - - - $z$ - $x$ - $y$ - $z_b$ - $x_b$ - $y_b$ - $O$ - - - - (OpenFAST, BeamDyn) - (Document) - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg deleted file mode 100644 index 0ddccc8d77..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/BeamDynSectionCoord_Abstract.svg +++ /dev/null @@ -1,844 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg deleted file mode 100644 index d239bf0bbc..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/doc/svgtex/StiffnessMatrixAxialBending.svg +++ /dev/null @@ -1,1263 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - $C$ - - - $z$ - $y$ - + - - $x$ - - - - $\kappa_x>0$ - - - - - - - - - - - $C$ - - - $z$ - $x$ - + - - $y$ - - - - $\kappa_y>0$ - - - - - $O$ - $O$ - - - - - - - - $F_z^c>0$ - - $F_z^c>0$ - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py deleted file mode 100644 index 506af9db23..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/elastodyn.py +++ /dev/null @@ -1,79 +0,0 @@ -import numpy as np -import pandas as pd - - -def elastodynBlade2Hawc2_raw(dfBld, R, E=3e10): - """ - INPUTS: - - dfBld: dataframe resulting from reading an ElastoDyn blade file - with columns: [ 'BlFract_[-]', 'PitchAxis_[-]', 'StrcTwst_[deg]', 'BMassDen_[kg/m]', 'FlpStff_[Nm^2]', 'EdgStff_[Nm^2]' - - R : rotor radius [m] - OUTPUTS: - - dfMeanLine: hawc2 c2def as DataFrame with columns ['x_[m]','y_[m]','z_[m]','twist_[deg]'] - - dfStructure: hawc2 stdata as Dataframe - """ - r = dfBld['BlFract_[-]'].values*R - twist = dfBld['StrcTwst_[deg]'].values - m = dfBld['BMassDen_[kg/m]'].values - EIflap = dfBld['FlpStff_[Nm^2]'].values - EIedge = dfBld['EdgStff_[Nm^2]'].values - - - # --- ElastoDyn 2 Hawc2 Structural data - columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] - nr = len(r) - dfStructure = pd.DataFrame(data=np.zeros((nr,len(columns))), columns=columns) - dfStructure['r_[m]'] = r - dfStructure['m_[kg/m]'] = m - # 'x_cg_[m]','y_cg_[m]' = 0 - # 'ri_x_[m]','ri_y_[m]' # TODO - # 'x_sh_[m]','y_sh_[m]','E_[N/m^2]', - # dfStructure['x_sh_[m]'] = 0 - # dfStructure['y_sh_[m]']= 0 - dfStructure['E_[N/m^2]'] = E # Arbitrary value - dfStructure['G_[N/m^2]'] = R/2/(1+0.3)*100 # Arbitrary value, but large (ElastoDyn stiff in torsion) - dfStructure['I_x_[m^4]'] = EIedge / E - dfStructure['I_y_[m^4]'] = EIflap / E - dfStructure['I_p_[m^4]'] = np.mean(EIflap+EIedge)/2*E*100 # Ip approximated as mean value of Ix+Iy, large value (ElastoDyn stiff in torsion) - dfStructure['k_x_[-]'] = 0 - dfStructure['k_y_[-]'] = 0 - dfStructure['A_[m^2]'] = 1 # Arbitrary value - dfStructure['pitch_[deg]']= -twist # TODO Taken as structural twist - # 'x_e_[m]','y_e_[m]' =0 - # Hawc2 = BeamDyn - # x_cg = -y_G - # y_cg = x_G - # x_sh = -y_S - # y_sh = x_S - # x_e = -y_C - # y_e = x_C - # I_y = EIx/E # [m^4] Hawc2 Iy is wrt to principal bending ye axis - # I_x = EIy/E # [m^4] Hawc2 Ix is wrt to principal bending xe axis - # I_p = GKt/G # [m^4] - # k_y = kxsGA/(G*A) - # k_x = kysGA/(G*A) - # pitch = theta_p*180/np.pi # [deg] NOTE: could use theta_p, theta_i or theta_s - # if np.all(np.abs(m)<1e-16): - # ri_y = m*0 - # ri_x = m*0 - # else: - # ri_y = np.sqrt(Ixi/m) # [m] - # ri_x = np.sqrt(Iyi/m) # [m] - # # Curvilinear position of keypoints (only used to get max radius...) - # dr= np.sqrt((kp_x[1:]-kp_x[0:-1])**2 +(kp_y[1:]-kp_y[0:-1])**2 +(kp_z[1:]-kp_z[0:-1])**2) - # r_p= np.concatenate(([0],np.cumsum(dr))) - # r=r_bar * r_p[-1] - - - # --- Defining "c2def" meanline (NOTE: ElastoDyn has no prebend or presweep, so x&y are set to zero for now - MMeanLine = np.column_stack((r*0, r*0, r, -twist)) - dfMeanLine = pd.DataFrame(data = MMeanLine, columns=['x_[m]','y_[m]','z_[m]','twist_[deg]']) - # BeamDyn: - # Y_H2 = kp_x - # Z_H2 = kp_z - # twist_H2 = - twist*180/np.pi # -[deg] - # columns=['x_[m]', 'y_[m]', 'z_[m]', 'twist_[deg]'] - # data = np.column_stack((X_H2, Y_H2, Z_H2, twist_H2)) - # dfMeanLine = pd.DataFrame(data=data, columns=columns) - - return dfMeanLine, dfStructure diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore deleted file mode 100644 index 57604f7968..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -_* -data diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py deleted file mode 100644 index 4946652957..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_BeamDynToHawc2.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Convert a BeamDyn blade to a HAWC2 blade. -The part of the htc file defining the c2def line is written based on a template htc file -A new hawc2 "st" is written for the blade, using either: - - "Fully Populated Matrix" (FPM) - - Timoshenko beam peoperties -""" -import os -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -# Local -from shutil import copyfile -np.set_printoptions(linewidth=1500) -import pyFAST.converters.beamdyn as bd - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - -# --- Parameters -FPM = True # Use fully populated matrix or regular st file -ConvertBackAndForth = False # True to check how the model is converted back and forth between hawc2 and beamdyn -# Optional give some values for those, otherwise inferred by minimization... -E = None -G = None -A = None -theta_p = None # Principal axis direction -# TODO Elastic Center location for FPM - -# Derived parameters -suffix='_FPM' if FPM else '' - -# --- BeamDynToHawc2 -htc_template = os.path.join(MyDir,'../../../data/templates/hawc2_template.htc') # readonly -BD_mainfile = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_BeamDyn.dat') # readonly -BD_bladefile = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_BeamDyn_Blade.dat') # readonly -H2_htcfile_new = '_NREL5MW{}.htc'.format(suffix) # will be created -H2_stfile = '_blade_st{}.st'.format(suffix) # will be created -copyfile(htc_template, H2_htcfile_new) # Backup template -df_c2, df_st = bd.beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile_new, H2_stfile, 'blade1', A=A, E=E, G=G, theta_p_in = theta_p, FPM=FPM, verbose=True) - -if ConvertBackAndForth: - # NOTE: beamdyn uses stiffness proportional damping - # Mu = 2 zeta / omega, with omega the blade mode frequencies, zeta damping ratio - # flap edge torsion "edge" "flap" "torsion" - Mu=[0.021955, 0.012818, 0.012818, 0.012818, 0.021955, 0.012818] - - # --- Htc2BeamDyn - H2_htcfile = H2_htcfile_new # readonly - BDMainTemplate = BD_mainfile # readonly, for template - BD_mainfile = '_NREL5MW_BeamDyn_2.dat' # will be created - BD_bladefile = '_NREL5MW_BeamDyn_Blade_2.dat' # will be created - fig = bd.htcToBeamDyn(H2_htcfile_new, 'blade1', BD_bladefile, BD_mainfile, BDMainTemplate, Mu=Mu, poly_exp=[2,3,4,5,6], ref_axis='c2def', bPlot=False) - - # --- BeamDynToHawc2 - H2_htcfile_new2 = '_NREL5MW_2.htc' - H2_stfile2 = '_blade_st_2.st' - copyfile(H2_htcfile_new, H2_htcfile_new2) - bd.beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile_new2, H2_stfile2, 'blade1', A=A, E=E, G=G, FPM=False, verbose=True) - - -if __name__ == '__test__': - # NOTE: NREL5MW is too simple of a tests since straight - np.testing.assert_almost_equal(df_c2['z_[m]'].values[-1] , 61.5 ) - np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[-1], 0 ) - np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[0] , -13.308 ) - np.testing.assert_almost_equal(df_st['x_cg_[m]'].values[10] , 0.0 ) - np.testing.assert_almost_equal(df_st['x_e_[m]'].values[10] , 0.0 ) - np.testing.assert_almost_equal(df_st['pitch_[deg]'].values[10], 0.0 ) - np.testing.assert_almost_equal(df_st['K11'].values[10] , 403729000.0 ) - np.testing.assert_almost_equal(df_st['K44'].values[10] , 4936840000.0 ) - np.testing.assert_almost_equal(df_st['K55'].values[10] , 7009180000.0 ) - np.testing.assert_almost_equal(df_st['K66'].values[10] , 1002120000.0 ) - np.testing.assert_almost_equal(df_st['K11'] , df_st['K22'].values) - - os.remove(H2_htcfile_new) - os.remove(H2_stfile) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py deleted file mode 100644 index 51177909cf..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToAeroDyn.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Convert HAWC2 aerodynamic data to AeroDyn - -NOTE: - - Position of aerodynamic center assumed to be at c/4 from c2def. TODO -""" -import os -import numpy as np -import pandas as pd - -from pyFAST.converters.hawc2ToOpenfast import hawc2toAD -import matplotlib.pyplot as plt - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - -def main(): - np.set_printoptions(linewidth=300) - - # --- Hawc2 aero to AeroDyn - # See documentation in hawc2ToOpenfast.py - - # --- hawc2toAD - htcFilename = os.path.join(MyDir,'../../../data/NREL5MW/hawc2/NREL_5MW_reference_wind_turbine_hs2.htc') # readonly, hawc2 model file - ADbldFilename_out = '_NREL5MW_AD_bld.dat' # full path of AeroDyn blade file to be written - polarFilebase_out = '_Polars/_Polar_' # base path where polars will be written - correction3D = True # Apply 3D correction to polar data - tsr = 9 # Tip speed ratio used for 3D correction - r_AD=None # Radial position for AeroDyn. None = same as HAWC2 - #r_AD=[0.000000 , 2.625000 , 5.250000 , 7.875000 , 10.500000, 13.125000, 15.750000, 18.375000, 21.000000, 23.625000, 26.250000, 28.875000, 31.500000, 34.125000, 36.750000, 39.375000, 42.000000, 44.625000, 47.250000, 49.875000, 52.500000, 55.125000, 57.750000, 60.375000, 63.000000, 63.100000, 63.200000, 63.300000, 63.400000, 63.438000] - - # Convert - return hawc2toAD(htcFilename, r_AD=r_AD, ADbldFilename_out=ADbldFilename_out, polarFilebase_out=polarFilebase_out, correction3D=correction3D, tsr=tsr) - -if __name__=='__main__': - aeroNodes, polars, polarFilenames = main() - print('Polar files: ',polarFilenames) - print(aeroNodes) - plt.show() - -if __name__=='__test__': - main() - import shutil - os.remove('_NREL5MW_AD_bld.dat') - shutil.rmtree('_Polars') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py deleted file mode 100644 index ee5e65c6e7..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_Hawc2ToBeamDyn.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Convert a HAWC2 blade data to BeamDyn -""" -import os -import numpy as np -import pandas as pd - -import pyFAST.converters.beamdyn as bd -import matplotlib.pyplot as plt - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - -def main(): - np.set_printoptions(linewidth=300) - - # --- Hawc2 to BeamDyn - # See documentation in hawc2ToBeamDyn.py - # ref_axis: string defining how the main axis of beamdyn will be defined. - # 'c2def': the reference axis is taken directly as Hawc2 c2def - # 'c2def-polyfit': the reference axis is Hawc2 c2def, smoothened out using a polyfit (see poly_exp) - # 'straight': the reference axis is straight (prebend and sweep are still included as offsets) - - # NOTE: beamdyn uses stiffness proportional damping - # Mu = 2 zeta / omega, with omega the blade mode frequencies, zeta damping ratio - # flap, edge, torsion, "edge" "flap" "torsion" - Mu=[1.0E-03, 1.0E-03, 1.0E-03, 0.0014, 0.0022, 0.0022] - - # --- Htc2BeamDyn - H2_htcfile = os.path.join(MyDir,'../../../data/NREL5MW/hawc2/NREL_5MW_reference_wind_turbine_hs2.htc') # readonly, hawc2 model file - BDMainTemplate = os.path.join(MyDir,'../../../data/templates/BeamDyn.dat') # readonly, template file to write main BD file - BD_mainfile = '_NREL5MW_BeamDyn_Created.dat' # Name of BeamDyn file to be writen - BD_bladefile = '_NREL5MW_BeamDyn_Blade_Created.dat' # Name of BeamDyn blade file to be written - fig = bd.htcToBeamDyn(H2_htcfile, 'blade1', BD_bladefile, BD_mainfile, BDMainTemplate, Mu=Mu, poly_exp=[2,3,4,5,6], ref_axis='c2def', bPlot=True, interpCurvilinear=False) - - return BD_mainfile, BD_bladefile - - -if __name__=='__main__': - main() - plt.show() - -if __name__=='__test__': - BD, BDbld = main() - os.remove(BD) - os.remove(BDbld) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py deleted file mode 100644 index 5afa566698..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/examples/Main_OpenFASTToHawc2.py +++ /dev/null @@ -1,47 +0,0 @@ -""" -Converts an OpenFAST model to HAWC2 for a horizontal axis wind turbine. -A template "htc" file is used, and modified: - - geometry of bodies (tower, towertop/nacelle, shaft, hub, blades) - - orientations - - structural files (blade only, tower todo) - - aerodynamic files (pc-ae) generated - - wind and aero options - - hawcstab2 inputs -""" - -import numpy as np -import pandas as pd -import os -from pyFAST.converters.openfastToHawc2 import FAST2Hawc2 - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - - -htcTemplate = os.path.join(MyDir,'../../../data/templates/hawc2_template.htc') -fstIn = os.path.join(MyDir,'../../../data/NREL5MW/Main_Onshore_OF2_BD.fst') -htcOut = os.path.join(MyDir,'_NREL5MW_from_OF.htc') # will be created -OPfile = None - -# htcTemplate = 'data/templates/hawc2_template.htc' -# fstIn = 'data/BAR0_OF/BAR0.fst' -# htcOut = 'data/BAR0_hawc2/BAR0_from_OF.htc' # will be created -# OPfile = 'data/BAR0_OF/Performance/ccblade.dat' # Optional oper. file - -# htcTemplate = 'templates/hawc2_template.htc' -# fstIn = './IEA-15-240-RWT/IEA-15-240-RWT-Monopile/IEA-15-240-RWT-Monopile_BD.fst' -# htcOut = './IEA-15-240-RWT/IEA_15MW_RWT_from_OF.htc' -# OPfile = None - - -FAST2Hawc2(fstIn, htcTemplate, htcOut, OPfile=OPfile, TwrFAFreq=0.1, TwrSSFreq=0.1, SftTorFreq=4, FPM = False) - - - -if __name__ == '__main__': - pass -if __name__ == '__test__': - try: - os.remove(htc_out) - except: - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py deleted file mode 100644 index 8caedb9be9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2.py +++ /dev/null @@ -1,32 +0,0 @@ - - - -def dfstructure2stfile(dfStructure, H2_stfile): - """ - Write a HAWC2 st file from a pandas dataframe of structural data. - - For fully populated matrices, the columns are: - ['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] - For Timoshenko: - ['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] - - - TODO: - - make the input independent of column order - - use hawc2_st_file.py instead - - """ - - FPM = 'K11' in dfStructure - if FPM: - cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','pitch_[deg]','x_e_[m]','y_e_[m]','K11','K12','K13','K14','K15','K16','K22','K23','K24','K25','K26','K33','K34','K35','K36','K44','K45','K46','K55','K56','K66'] - else: - cols=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]', 'x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] - - with open(H2_stfile, 'w') as f: - f.write('%i ; number of sets, Nset\n' % 1) - f.write('-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n') - f.write('#%i ; set number\n' % 1) - f.write('\t'.join(['{:20s}'.format(s) for s in cols])+'\n') - f.write('$%i %i\n' % (1, dfStructure.shape[0])) - f.write('\n'.join('\t'.join('%19.13e' %x for x in y) for y in dfStructure.values)) # TODO: this assumes a column order diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py deleted file mode 100644 index 09c2705b11..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/hawc2ToBeamDyn.py +++ /dev/null @@ -1,458 +0,0 @@ -import numpy as np -from numpy import cos, sin -import pandas as pd -import os -from pyFAST.input_output.hawc2_htc_file import HAWC2HTCFile -from pyFAST.input_output.csv_file import CSVFile -from pyFAST.input_output.fast_input_file import FASTInputFile, BDFile - -from pyFAST.tools.pandalib import pd_interp1 - - -from .beam import * - -# --------------------------------------------------------------------------------} -# --- Writer function -# --------------------------------------------------------------------------------{ -def write_beamdyn_sections(filename,span,lK,lM,Mu=None,Label=''): - """ Write a BeamDyn section file, - span : list of nSpan span values from 0 to 1 - lK : list of nSpan 6*6 stiffness matrices - lM : list of nSpan 6*6 mass matrices - Mu : damping coefficient - """ - if (Mu is None): - Mu=[0]*6 - damp_type=0 - elif not hasattr(Mu, '__len__'): - Mu=np.asarray([Mu]*6) - Mu = np.asarray(Mu) - if len(Mu)==6: - damp_type=1 - - # --- Helper functions - def mat_tostring(M,fmt='.5e'): - return '\n'.join([' '+' '.join(['{:.6E}'.format(m) for m in M[i,:]]) for i in range(np.size(M,1))]) - def beamdyn_section_mat_tostring(x,K,M): - s='' - s+='{:.6f}\n'.format(x) - s+=mat_tostring(K) - #s+=np.array2string(K) - s+='\n' - s+='\n' - s+=mat_tostring(M) - #s+=np.array2string(M) - s+='\n' - s+='\n' - return s - - # --- Writing - with open(filename, 'w') as f: - f.write('------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE --------------------------\n') - f.write('! {} - Written using {} \n'.format(Label,os.path.basename(__file__))) - f.write('---------------------- BLADE PARAMETERS --------------------------------------\n') - f.write('{:5d} station_total - Number of blade input stations (-)\n'.format(len(span))) - f.write('{:5d} damp_type - Damping type (switch): 0: no damping; 1: viscous damping\n'.format(damp_type)) - f.write('---------------------- DAMPING COEFFICIENT------------------------------------\n') - f.write(' mu1 mu2 mu3 mu4 mu5 mu6\n') - f.write(' (s) (s) (s) (s) (s) (s)\n') - f.write(' {} {} {} {} {} {} \n'.format(*[Mu[i] for i in range(6)])) - f.write('---------------------- DISTRIBUTED PROPERTIES---------------------------------\n') - for s,K,M in zip(span,lK,lM): - f.write(beamdyn_section_mat_tostring(s,K,M)) - -# --------------------------------------------------------------------------------} -# --- Hawc2 to BeamDyn -# --------------------------------------------------------------------------------{ -def mypolyfit(x,y,exponents=[0,1,2,3]): - X_poly=np.array([]) - for i,c in enumerate(exponents): - if i==0: - X_poly = x**c - else: - X_poly = np.vstack((X_poly,x**c)) - try: - coeffs = np.linalg.lstsq(X_poly.T, y, rcond=None)[0] - except: - coeffs = np.linalg.lstsq(X_poly.T, y) - #print('Poly fit coeffs: ' + '+'.join(['{:.5f}^{}'.format(p,c) for p,c in zip(coeffs,exponents)])) - return np.dot(coeffs, X_poly) - -def htcToBeamDyn(HTCFile, bodyname, BDBldFileOut, BDMainFileOut=None, BDMainTemplate=None, Mu = 1.0e-03, - ref_axis='c2def-polyfit', poly_exp=[2,3,4,5], zref=None, Label='', bPlot=False, - bNoOffset=False, bNoPreSweep=False, nRootZeros=0, bCGOnMeanLine=False, interpCurvilinear=True): # Experimental options - """ - Writes BeamDyn inputs files from a HAWC2 htc file and the blade body name - INPUTS: - - HTCFile: path to a htc file - - bodyname - OTHER INPUTS: - see hawc2tobeamdyn - """ - htc = HAWC2HTCFile(HTCFile) - dfs = htc.toDataFrame() - H2MeanLine = dfs[bodyname+'_c2'] - H2Structure = dfs[bodyname+'_st'] - H2MeanLine = H2MeanLine[['x_[m]','y_[m]','z_[m]','twist_[deg]']] # Changing order - if len(Label)==0: - Label='Converted by hawc2ToBeamDyn.py from {}'.format(HTCFile) - - - return hawc2ToBeamDyn(H2MeanLine, H2Structure, BDBldFileOut, BDMainFileOut=BDMainFileOut, BDMainTemplate=BDMainTemplate, Mu=Mu, - ref_axis=ref_axis, poly_exp=poly_exp, zref=zref, Label=Label, bPlot=bPlot, - bNoOffset=bNoOffset, bNoPreSweep=bNoPreSweep, nRootZeros=nRootZeros, bCGOnMeanLine=bCGOnMeanLine, interpCurvilinear=interpCurvilinear) - -def hawc2ToBeamDyn(H2MeanLine, H2Structure, BDBldFileOut, BDMainFileOut=None, BDMainTemplate=None, Mu = 1.0e-03, - ref_axis='c2def-polyfit', poly_exp=[2,3,4,5], zref=None, Label='', bPlot=False, - bNoOffset=False, bNoPreSweep=False, nRootZeros=0, bCGOnMeanLine=False, interpCurvilinear=True): # Experimental options - """ - Writes BeamDyn inputs files from two csv files derived from "Hawc2" inputs - - INPUTS: - - H2MeanLine : dataframe or csv file with one header line, containing c2 def definition, (Hawc2 coordinates) - Column order has to be: ['x_[m]','y_[m]','z_[m]','twist_[deg]'] - - H2Structure: dataframe or csv that contains Hawc2 beam structural properties (typically found in a hawc2 st file) - Colums order has to be: ['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]',... ,'pitch_[deg]','x_e_[m]','y_e_[m]'] - - BDBldFileOut: filepath of the BeamDyn Blade file to be written - - OPTIONAL INPUTS: - - BDMainFileOut: filepath of the BeamDyn main file to be written - The file will contain the mean line definition. Requires BDMainTemplate - - BDMainTemplate: filepath of a BeamDyn main file, will be used as template for BDMainFileOut - - Mu : list of the 6 damping coeffficients to be used in the blade file - - ref_axis: string defining how the main axis of beamdyn will be defined. - 'c2def': the reference axis is taken directly as Hawc2 c2def - 'c2def-polyfit': the reference axis is Hawc2 c2def, smoothened out using a polyfit (see poly_exp) - 'straight': the reference axis is straight (prebend and sweep are still included as offsets) - - poly_exp: list of exponents used to perform the polyfit of Hawc2 c2def line - - zref: specifies "z" locations where sections have to be interpolated to. If "None", hawc2 mean line sections are used - - Label : string used as a label for the blade file - - bPlot : boolean, if true, a plot is generated - - EXPERIMENTAL INPUTS (not recommended, keep as default): - - bNoOffset: do not use offsets from mean line - If used with ref_axis='straight', this results in fully straight blade). - - bCBOnMeanLine: assumes CB on the mean axis - - bNoPreSweep: remove presweep - - nRootZeros: number of points that are set to have zero x and y at the root - """ - # --- Mean line definition (position and orientation) - Hawc2 "c2-def file", BeanDyn point "O" - if isinstance(H2MeanLine, pd.DataFrame): - c2def = H2MeanLine - else: - c2def = CSVFile(H2MeanLine).toDataFrame() - # For the equations below to be generic we force the column names - c2def.columns.values[0:4]=['x_[m]','y_[m]','z_[m]','twist_[deg]'] - - # --- If necessary, interpolate mean line to user defined positions - c2def_old = c2def.copy() - if zref is None: - # we dont interpolate - zref=c2def['z_[m]'].values - else: - z_old = c2def_old['z_[m]'].values - # safety checks - zref=np.asarray(zref) - if z_old[0]!=zref[0]: - raise Exception('`zref` start value should be {} to match input'.format(z_old[0])) - if z_old[-1]!=zref[-1]: - raise Exception('`zref` end value should be {} to match input'.format(z_old[-1])) - # interpolating to zref values - c2def = c2def[0:0] # emptying - for c in c2def_old.columns: - c2def[c] = np.interp(zref, z_old, c2def_old[c]) - - # --- Hawc2 ref axis (in BeamDyn system) - x_O_h2 = c2def['y_[m]'].values # kp_xr - y_O_h2 = - c2def['x_[m]'].values # kp_yr - z_O_h2 = c2def['z_[m]'].values # kp_zr - twist = - c2def['twist_[deg]'].values # initial_twist [deg] Hawc2 angle is positive around z, unlike the "twist" - - # --- Compute r_ref, curvilinear position of keypoints (for st file) - if interpCurvilinear: - dr= np.sqrt((x_O_h2[1:]-x_O_h2[0:-1])**2 +(y_O_h2[1:]-y_O_h2[0:-1])**2 +(z_O_h2[1:]-z_O_h2[0:-1])**2) - r_ref = np.concatenate(([0],np.cumsum(dr))) - else: - r_ref = np.abs(z_O_h2) - - - # --- BeamDyn ref axis - # Default: taken as c2def - x_O = x_O_h2.copy() # kp_xr - y_O = y_O_h2.copy() # kp_yr - z_O = z_O_h2.copy() # kp_zr - x_O[:nRootZeros] = 0 - y_O[:nRootZeros] = 0 - if ref_axis=='c2def': - # (see above) - pass - elif ref_axis=='straight': - # straight axis, with everything as offsets - x_O = 0*x_O_h2 # kp_xr - y_O = 0*y_O_h2 # kp_yr - elif ref_axis=='y-straight-polyfit': - # y-axis straight, x-axis poly fitted, with everything as offsets - y_O = 0*y_O_h2 # kp_yr - x_O = mypolyfit(z_O_h2, x_O, poly_exp) # kp_xr NOTE: we fit x_O (where nRoot was already inforced - x_O[:nRootZeros] =0 # enforcing zero displacements at root - elif ref_axis=='c2def-polyfit': - # Smooth mean line definition (position and orientation) - x_O = mypolyfit(z_O_h2, x_O, poly_exp) # kp_xr NOTE: we fit x_O (where nRoot was already inforced - y_O = mypolyfit(z_O_h2, y_O, poly_exp) # kp_yr - x_O[:nRootZeros] =0 # enforcing zero displacements at root - y_O[:nRootZeros] =0 - else: - raise NotImplementedError('ref_axis: {}'.format(ref_axis)) - - # difference between input_axis and smooth axis in global (blade root, BeamDyn convention) - x_off_g = (x_O_h2-x_O) - y_off_g = (y_O_h2-y_O) - - if bNoOffset: - x_off_g = 0*x_off_g # no offsets - y_off_g = 0*y_off_g - - # transform offset from global to local axis orientation - theta_z = -twist - x_off_s = x_off_g * np.cos(theta_z) + y_off_g * np.sin(theta_z) - y_off_s = -x_off_g * np.sin(theta_z) + y_off_g * np.cos(theta_z) - - - - - # --- Cross section properties - if isinstance(H2Structure, pd.DataFrame): - hwc_in = H2Structure - else: - hwc_in = CSVFile(H2Structure).toDataFrame() - # For the equations below to be generic we force the column names - hwc_in.columns=['r_[m]','m_[kg/m]','x_cg_[m]','y_cg_[m]','ri_x_[m]','ri_y_[m]','x_sh_[m]','y_sh_[m]','E_[N/m^2]','G_[N/m^2]','I_x_[m^4]','I_y_[m^4]','I_p_[m^4]','k_x_[-]','k_y_[-]','A_[m^2]','pitch_[deg]','x_e_[m]','y_e_[m]'] - # --- Interpolating to match c2def positions - hwc = pd_interp1(r_ref, 'r_[m]', hwc_in) - #if r_old[-1]1e-9): - raise Exception('Interpolation failed, radial position mismatch. Debug me.') - - # --- Setting Mass and stiffness matrices of each cross section - lM=[]; lK=[] - vx_G=[]; vy_G=[]; - vx_S=[]; vy_S=[]; - vx_C=[]; vy_C=[]; - for i,row in hwc.iterrows(): - if i=0, j< len(xp)-1) - bLower =j<0 - bUpper =j>=len(xp)-1 - jOK = j[bOK] - dd[bOK] = (x[bOK] - xp[jOK]) / (xp[jOK + 1] - xp[jOK]) - jBef=j - jAft=j+1 - # - # Use first and last values for anything beyond xp - jAft[bUpper] = len(xp)-1 - jBef[bUpper] = len(xp)-1 - jAft[bLower] = 0 - jBef[bLower] = 0 - if extrap=='bounded': - pass - # OK - elif extrap=='nan': - dd[~bOK] = np.nan - else: - raise NotImplementedError() - - return (1 - dd) * fp[:,jBef] + fp[:,jAft] * dd - - -def interpH2Polar(ae, pc, radius, alpha=None, ae_set_nr=1): - """ - Interpolate hawc2 polar to a given radial station - ae: an AEFile instance from wetb - pc: an PCFile instance from wetb - radius: (scalar) radial position where the polar is to be computed - - """ - r_ae = ae.ae_sets[ae_set_nr][:,0] - r_min = np.min(r_ae) - r_max = np.max(r_ae) - if radiusr_max: - raise Exception('Radius ({}) needs to be between {} and {}'.format(radius, r_min, r_max)) - - thickness = ae.thickness(radius, ae_set_nr) - pc_set_nr = ae.pc_set_nr(radius, ae_set_nr) - thicknesses, profiles = pc.pc_sets[pc_set_nr] - index = np.searchsorted(thicknesses, thickness) - if index == 0: - index = 1 - Cx0, Cx1 = profiles[index - 1:index + 1] - alpha0 = Cx0[:, 0] - alpha1 = Cx1[:, 0] - if alpha is None: - alpha = alpha1 - Cxi0 = multiInterp(alpha, alpha0, Cx0.T, extrap='bounded').T - Cxi1 = multiInterp(alpha, alpha1, Cx1.T, extrap='bounded').T - th0, th1 = thicknesses[index - 1:index + 1] - M = Cxi0 + (Cxi1 - Cxi0) * (thickness - th0) / (th1 - th0) - M[:,0] = alpha # to avoid numerics - return M, thickness, pc_set_nr, [th0, th1] - - - -# --------------------------------------------------------------------------------} -# --- From HAWC2 to AeroDyn -# --------------------------------------------------------------------------------{ -def AE_PC_C2_toAD(ae_filename, pc_filename, blade_c2def, r_AD=None, ADbldFilename_out=None, polarFilebase_out='Polar_', ae_set_nr=1, correction3D=True, tsr=9): - """ - Convert aerodynamic data from a hawc2 model (AE, PC, balde C2def) - to AeroDyn (AD) files. - - """ - # --- Read AE and PC file - ae = HAWC2AEFile(ae_filename) - pc = HAWC2PCFile(pc_filename) - ae_base = os.path.basename(ae_filename) - pc_base = os.path.basename(pc_filename) - #print(ae) - #print(pc) - - # --- Setting mean line - # C2def - if blade_c2def.shape[1]==4: - iOff=0 - elif blade_c2def.shape[1]==5: - iOff=1 - else: - raise Exception('blade_c2_def should have 4 or 5 columns') - xC2 = blade_c2def[:,0+iOff] - yC2 = blade_c2def[:,1+iOff] - zC2 = blade_c2def[:,2+iOff] - twistC2 = blade_c2def[:,3+iOff] # [deg] - - ae_set = ae.data.ae_sets[ae_set_nr] - radius_H2 = ae_set[:,0] - - # --- Default radius if user does not provided one - if r_AD is None: - r_AD = radius_H2 - - # --- Aerodynamic spanwise data - # Interpolating AE data to user requested positions - chord_H2 = np.interp(r_AD, ae_set[:,0], ae_set[:,1]) - trel_H2 = np.interp(r_AD, ae_set[:,0], ae_set[:,2]) - pcset_H2 = np.interp(r_AD, ae_set[:,0], ae_set[:,3]) - twist_H2 = np.interp(r_AD, zC2, twistC2) #[deg] - x_H2 = np.interp(r_AD, zC2, xC2) # sweep - y_H2 = np.interp(r_AD, zC2, yC2) # prebend - # Aerodynamic Center - dx_H2 = chord_H2/4 * np.cos(twist_H2*np.pi/180) - dy_H2 = chord_H2/4 * np.sin(twist_H2*np.pi/180) - xAC_H2=(x_H2+dx_H2) - yAC_H2=(y_H2+dy_H2) - - # --- AeroDyn nodes - # BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID - aeroNodes = np.zeros((len(r_AD), 7)) - aeroNodes[:,0] = r_AD - aeroNodes[:,1] = yAC_H2 # BlCrvAC # NOTE: not c2def but AC - aeroNodes[:,2] = -xAC_H2 # BlSwpAC (positive along yOF, negative xH2) # NOTE: not c2def but AC - dr = np.gradient(aeroNodes[:,0]) - dx = np.gradient(aeroNodes[:,1]) - aeroNodes[:,3] = np.degrees(np.arctan2(dx,dr)) - aeroNodes[:,4] = -twist_H2 # [deg] - aeroNodes[:,5] = chord_H2 - aeroNodes[:,6] = (np.arange(len(r_AD))+1).astype(int) # One polar per radius.. - # Write to disk if needed - if ADbldFilename_out is not None: - Bld = ADBladeFile() - Bld.comment='Generated using HAWC2 inputs: AE:{} PC:{}'.format(ae_base, pc_base) - Bld['BldAeroNodes'] = aeroNodes - Bld.write(ADbldFilename_out) - aeroNodes = pd.DataFrame(data=aeroNodes, columns=['BlSpn_[m]', 'BlCrvAC_[m]', 'BlSwpAC_[m]', 'BlCrvAng_[deg]', 'BlTwist_[deg]', 'BlChord_[m]', 'BlAFID_[-]']) - - - # --- Write Polars for each radial station, interpolating on thickness - polarFilenames=[] - polars=[] - vAlpha = np.arange(361)-180 # make it an argument - nAlpha = len(vAlpha) - - writePolars = polarFilebase_out is not None - if writePolars: - baseDir = os.path.dirname(polarFilebase_out) - try: - os.makedirs(baseDir, exist_ok=True) - except: - pass - # Create a default polar file - pol = ADPolarFile() - - r_max = np.max(r_AD) - for ir, (r,c) in enumerate(zip(r_AD, chord_H2)): - M, t, pc_set, thicknesses = interpH2Polar(ae.data, pc.data, r, alpha=vAlpha, ae_set_nr=ae_set_nr) - comment = 'Thickness: {} - pc_set:{} - thicknesses:{}\nGenerated using HAWC2 inputs: AE:{} PC:{}'.format(t, pc_set, thicknesses, ae_base, pc_base) - Re = 1.0 # TODO - # Ensure that first value match last value - M[-1,1:] = M[0,1:] - # Create an instance of Polar class for convenience - P = Polar(Re=Re, alpha=vAlpha, cl=M[:,1], cd=M[:,2], cm=M[:,3], radians=False) - # Apply 3D correction - if r>0 and correction3D: - try: - P = P.correction3D( - r_over_R = r/r_max, - chord_over_r = c/r, - tsr=tsr, - lift_method="DuSelig", drag_method="None", blending_method="linear_25_45", - max_cl_corr=0.25) - except: - print('3D correction not applied at station ', ir) - - # Store polars - M = np.column_stack((P.alpha, P.cl, P.cd, P.cm)) - polars.append(M) - - # Write polar to disk - if writePolars: - polarFilename_out = polarFilebase_out+'{:03d}.dat'.format(ir+1) - P.toAeroDyn(filenameOut=polarFilename_out, templateFile=pol, Re=Re, comment=comment) - #(alpha0,alpha1,alpha2,cnSlope,cn1,cn2,cd0,cm0)=P.unsteadyParams() - #pol['AFCoeff']= M - #pol.comment= comment - #pol.write(polarFilename_out) - polarFilenames.append(polarFilename_out) - - return aeroNodes, polars, polarFilenames - - -def hawc2toAD(htc, r_AD=None, ADbldFilename_out=None, polarFilebase_out='Polar_', bladeBodyName='blade1', correction3D=True, tsr=9): - """ - Convert aerodynamic data from a hawc2 model (taken using an htc file as input) - to AeroDyn (AD) files. - - INPUTS: - - htc: filename of main htc file, or instance of HAWC2HTCFile - - r_AD: radial positions for AeroDyn file. If None, use hawc2 AE stations - - ADbldFilename_out: filename for AeroDyn blade. If None: nothing is written. - - polarFilebase_out: filebase, used to write the polar files. If None: nothing is written - - bladeBodyName: body name of blade in htc file - - TODO: - - Position of aerodynamic center assuemd to be at c/4 from c2def. TODO - """ - if isinstance(htc, HAWC2HTCFile): - pass - else: - # Read htc file - htc = HAWC2HTCFile(htc) - # Extra c2 def of blade - bdy = htc.bodyByName(bladeBodyName) - c2def = htc.bodyC2(bdy) - # Extract ae and pc filenames - if 'aero' not in htc.data.keys(): - raise Exception('Aero section not found in htc file: '.format(htcFilename)) - aero = htc.data['aero'] - ae_filename = os.path.join(htc.data.modelpath, aero.ae_filename[0]) - pc_filename = os.path.join(htc.data.modelpath, aero.pc_filename[0]) - - # Convert to AeroDyn - return AE_PC_C2_toAD(ae_filename, pc_filename, c2def, r_AD=r_AD, ADbldFilename_out=ADbldFilename_out, polarFilebase_out=polarFilebase_out, correction3D=correction3D, tsr=9) - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py deleted file mode 100644 index d045e03262..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/openfastToHawc2.py +++ /dev/null @@ -1,364 +0,0 @@ -import os -import numpy as np -import pandas as pd - -from pyFAST.input_output.hawc2_htc_file import HAWC2HTCFile -from pyFAST.input_output.hawc2_ae_file import HAWC2AEFile -from pyFAST.input_output.hawc2_pc_file import HAWC2PCFile -from pyFAST.input_output.csv_file import CSVFile -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.input_output.fast_input_deck import FASTInputDeck - -import pyFAST.converters.beamdyn as bd -import pyFAST.converters.elastodyn as ed -import pyFAST.converters.hawc2 as h2 - - -def FAST2Hawc2(fstIn, htcTemplate, htcOut, OPfile=None, TwrFAFreq=0.1, TwrSSFreq=0.1, SftTorFreq=4, FPM = False, Bld_E=None, Bld_G=None, Bld_A=None, Bld_theta_p=None): - """ - Write a Hawc2 and hawcstab2 model from an openfat model - """ - - # --- OpenFAST - fst = FASTInputDeck(fstIn, verbose=True) - IW = fst.fst_vt['InflowWind'] - ED = fst.fst_vt['ElastoDyn'] - AD = fst.fst_vt['AeroDyn15'] - Bld = fst.fst_vt['AeroDynBlade'] - AF = fst.fst_vt['af_data'] - twrOF = fst.fst_vt['ElastoDynTower'] - BD = fst.fst_vt['BeamDyn'] - BDbld = fst.fst_vt['BeamDynBlade'] - EDbld = fst.fst_vt['ElastoDynBlade'] - - # print(fst.ED.keys()) - # print(fst.ED['TwrFile']) - # print(fst.AD.keys()) - - # --- Derived parameters - outDir = os.path.dirname(htcOut) - if os.path.basename(outDir)=='htc': - outDir=os.path.dirname(outDir) # we go one more level up - outDataDir = os.path.join(outDir, 'data') - - try: - os.mkdir(outDir) - except: - pass - try: - os.mkdir(outDataDir) - except: - pass - - - # --- Read template htc file - htc = HAWC2HTCFile(htcTemplate) - # --------------------------------------------------------------------------------} - # --- Tower - # --------------------------------------------------------------------------------{ - # Damping - bdy = htc.bodyByName('tower') - bdy.damping_posdef.values[3] = (2*twrOF['TwrFADmp(1)']/100) / (TwrFAFreq*2*np.pi) # 2 zeta / omega - bdy.damping_posdef.values[4] = (2*twrOF['TwrSSDmp(1)']/100) / (TwrSSFreq*2*np.pi) # 2 zeta / omega - bdy.damping_posdef.values[5] = 0.01 # TODO TODO - # Mean line - val = htc.bodyC2(bdy) - val[:,3] = np.linspace(0., -ED['TowerHt'], val.shape[0]) - htc.setBodyC2(bdy, val) - - # --------------------------------------------------------------------------------} - # --- Towertop/nacelle - # --------------------------------------------------------------------------------{ - bdy = htc.bodyByName('towertop') - # Option 1, at node 2 - # bdy.concentrated_mass.values[0] = 2 - # bdy.concentrated_mass.values[1] = np.around(ED['NacCMyn'],4) - # bdy.concentrated_mass.values[2] = np.around(ED['NacCMxn'],4) - # bdy.concentrated_mass.values[3] = np.around(ED['Twr2Shft']-ED['NacCMzn'],4) # z distance from last towertopnode to NacCOG. NOTE: z hawc2 negative - # bdy.concentrated_mass.values[4] = np.around(ED['NacMass'] ,4) - # bdy.concentrated_mass.values[7] = np.around(ED['NacYIner']-ED['NacMass']*ED['NacCMxn']**2,2) # Jz at CM - # bdy.concentrated_mass.values[5] = bdy.concentrated_mass.values[7] # Jx ~ Jz - # bdy.concentrated_mass.values[6] = bdy.concentrated_mass.values[7]/10 # Jy ~ Jz /10 ? TODO - # Option 2, at node 1 - bdy.concentrated_mass.values[0] = 1 - bdy.concentrated_mass.values[1] = np.around(ED['NacCMyn'],4) - bdy.concentrated_mass.values[2] = np.around(ED['NacCMxn'],4) - bdy.concentrated_mass.values[3] = np.around(ED['NacCMzn'],4) - bdy.concentrated_mass.values[4] = np.around(ED['NacMass'] ,4) - NacInerZ = ED['NacYIner'] # TODO - NacInerFA = NacInerZ # TODO - NacInerSS = NacInerZ/10 # TODO - bdy.concentrated_mass.values[5] = NacInerFA - bdy.concentrated_mass.values[6] = NacInerSS - bdy.concentrated_mass.values[7] = NacInerZ - - # Mean line - val = htc.bodyC2(bdy) - val[:,3] = np.linspace(0, -ED['Twr2Shft'], val.shape[0]) - htc.setBodyC2(bdy, val) - # print(bdy) - - # --------------------------------------------------------------------------------} - # --- Shaft - # --------------------------------------------------------------------------------{ - bdy = htc.bodyByName('shaft') - # Torsion - SftOmega = SftTorFreq * 2 * np.pi - SftMass = ED['DTTorSpr']/SftOmega # Shaft omega = sqrt(k/m) - if SftMass >0: - SftZeta = ED['DTTorDmp']*SftOmega/(2*ED['DTTorSpr']) # zeta = c*omega/(2*) - SftBetaTors = 2*SftZeta / SftOmega # beta = 2 zeta/omega - else: - SftBetaTors = 1e-3 - SftBetaBending = 4e-4 # TODO - # Damping - bdy.damping_posdef.values[3] = SftBetaBending - bdy.damping_posdef.values[4] = SftBetaBending - bdy.damping_posdef.values[5] = SftBetaTors - # Mass and inertia - bdy.concentrated_mass.values[7] = np.around(ED['GenIner']*ED['GBRatio']**2, 2) - bdy.concentrated_mass__2.values[7] = np.around(ED['HubIner'],2) - bdy.concentrated_mass__2.values[4] = np.around(ED['HubMass'],2) - # Mean line - val = htc.bodyC2(bdy) - val[:,3] = np.linspace(0, -ED['OverHang'], val.shape[0]) - htc.setBodyC2(bdy, val) - # print(bdy) - - # --------------------------------------------------------------------------------} - # --- Hub - # --------------------------------------------------------------------------------{ - bdy = htc.bodyByName('hub1') - # Mean line - val = htc.bodyC2(bdy) - val[:,3] = np.linspace(0, ED['HubRad'], val.shape[0]) - htc.setBodyC2(bdy, val) - # print(bdy) - - # --------------------------------------------------------------------------------} - # --- Blade - # --------------------------------------------------------------------------------{ - # Mean line - # val[:,3] = np.linspace(0, ED['HubRad'], val.shape[0]) - - st_filefull = os.path.join(outDataDir, 'blade_st.st') # Full path of blade st file - st_file = os.path.relpath(st_filefull, outDir) # Relative to output dir - dfStructure = None - dfMeanLine = None - damp=[0, 0, 0] - if BD is not None: - # --- Convert from BeamDyn to HAWC2 c2def and st data - # also writes st file - # TODO A, E, G, theta_p - dfMeanLine, dfStructure = bd.beamDynToHawc2(BD, BDbld, H2_stfile=st_filefull, A=Bld_A, E=Bld_E, G=Bld_G, theta_p_in = Bld_theta_p, FPM=FPM, verbose=True) - - # --- Damping - damp[0] = BDbld['DampingCoeffs'][0,1] # TODO Check order - damp[1] = BDbld['DampingCoeffs'][0,0] # TODO - damp[2] = BDbld['DampingCoeffs'][0,2] # TODO - - elif EDbld is not None: - print('[WARN] Blade with ElastoDyn is not fully implemented') - if FPM: - print('[WARN] Cannot do FPM with ElastoDyn for now') - FPM = False # Cannot do FPM with ElastoDyn - - # --- ElastoDyn blade properties - M = EDbld['BldProp'] - dfBld = EDbld.toDataFrame() # r/R, PitchAxis(unused), StructuralTwist, m, EIflap, EIdge - R = ED['TipRad'] - ED['HubRad'] - - # --- Convert from ElastoDyn to HAWC2 c2def and st data - dfMeanLine, dfStructure = ed.elastodynBlade2Hawc2_raw(dfBld, R) - # Write st file - h2.dfstructure2stfile(dfStructure, st_filefull) - - # --- - # TODO TODO TODO Damping is completely wrong here - print('[WARN] Damping values for blades are wrong when using ElastoDyn blade') - damp[0] = EDbld['BldFlDmp(1)']/100 # - damp[1] = EDbld['BldFlDmp(2)']/100 - damp[2] = EDbld['BldEdDmp(1)']/100 - - - else: - raise Exception('No BeamDyn or ElastoDyn blade present') - # or throw a warning and skip the section below.. - - # --- Setup HAWC2 "body" data - bdy = htc.bodyByName('blade1') - bdy.nbodies = dfMeanLine.shape[0]-1 # One body per station -1 - bdy.timoschenko_input.ts_filename = st_file - bdy.timoschenko_input.set.values = [1,1] - - if FPM: - bdy.timoschenko_input.fpm = 1 - # Damping - #bdy['damping_aniso'] = bdy.damping_posdef.copy() - bdy.damping_posdef.name_='damping_aniso' - bdy.damping_posdef.name_='damping_aniso' - bdy.damping_posdef.values[0]=0 # no mass proportional damping - bdy.damping_posdef.values[1]=0 # no mass proportional damping - bdy.damping_posdef.values[2]=0 # no mass proportional damping - bdy.damping_posdef.values[3] = damp[0] - bdy.damping_posdef.values[4] = damp[1] - bdy.damping_posdef.values[5] = damp[2] - #raise NotImplementedError('Damping for FPM') - print('>>>> TODO TODO TODO DAMPING ') - else: - bdy.timoschenko_input.fpm = 0 - # Damping - bdy.damping_posdef.values[3] = damp[0] - bdy.damping_posdef.values[4] = damp[1] - bdy.damping_posdef.values[5] = damp[2] - - # Meanline - c2_def = htc.bodyC2(bdy) - c2_def = np.column_stack((np.arange(1,len(dfMeanLine)+1), dfMeanLine.values)) - c2_def = np.around(c2_def, 5) - htc.setBodyC2(bdy, c2_def) - - #print(bdy) - - - # --- Orientation - sec = htc.data.new_htc_structure.orientation - # tower top 2 shaft - #print(sec.relative__2.body2_eulerang__2) - sec.relative__2.body2_eulerang__2.values[0] = -ED['ShftTilt'] - sec.relative__2.body2_ini_rotvec_d1.values[3] = ED['RotSpeed']/60.*2*np.pi - # shaft 2 hubs - sec.relative__3.body2_eulerang__3.values[0] = - ED['PreCone(1)'] - sec.relative__4.body2_eulerang__3.values[0] = - ED['PreCone(2)'] - sec.relative__5.body2_eulerang__3.values[0] = - ED['PreCone(3)'] - # hubs 2 shaft - # sec.relative__6.body2_eulerang.values[2] = - np.around(ED['BlPitch(1)'],4) # TODO sign - # sec.relative__7.body2_eulerang.values[2] = - np.around(ED['BlPitch(2)'],4) # TODO sign - # sec.relative__8.body2_eulerang.values[2] = - np.around(ED['BlPitch(3)'],4) # TODO sign - #print(sec) - - # --------------------------------------------------------------------------------} - # --- Wind - # --------------------------------------------------------------------------------{ - sec = htc.data.wind - sec.density = AD['AirDens'] - sec.wsp = IW['HWindSpeed'] - sec.center_pos0.values[2] = -IW['RefHt'] - sec.shear_format.values[1] = IW['PLexp'] - sec.tower_shadow_method = min(AD['TwrPotent'], 1) - sec.tower_shadow_potential.radius.values[0:2] = [0, AD['TowProp'][0, 1]/2] - sec.tower_shadow_potential.radius__2.values[0:2] = [-AD['TowProp'][-1,0], AD['TowProp'][-1,1]/2] - sec.tower_shadow_potential_2.radius.values[0:2] = [0, AD['TowProp'][0, 1]/2] - sec.tower_shadow_potential_2.radius__2.values[0:2] = [ AD['TowProp'][-1,0], AD['TowProp'][-1,1]/2] - # print(sec) - - # --------------------------------------------------------------------------------} - # --- AeroDynamics - ## --- AE File - radius = Bld['BldAeroNodes'][:,0] - twist = Bld['BldAeroNodes'][:,4] - chord = Bld['BldAeroNodes'][:,5] - polar_id = Bld['BldAeroNodes'][:,6].astype(int) - pc_set_id = np.ones(chord.shape).astype(int) # Only one set - thickness = np.around((1-(polar_id-np.min(polar_id))/(np.max(polar_id)+1-np.min(polar_id)))*100,2) # fake thickness - #print(thickness) - ae = HAWC2AEFile() - ae.add_set(radius=radius, chord=chord, thickness=thickness, pc_set_id= pc_set_id) - ae_filenamefull = os.path.join(outDataDir, 'ae_file.ae') - ae.write(ae_filenamefull) - ae_filename = os.path.relpath(ae_filenamefull, outDir) - - # --- PC File - pc = HAWC2PCFile() - upolar_id, indices = np.unique(polar_id, return_index=True) - uthickness = np.flip(thickness[indices]) # NOTE: we flip - polars = [AF[i-1]['AFCoeff'] for i in np.flip(upolar_id)] # NOTE: we flip - - thicknesses = uthickness - pc.add_set(1, thicknesses, polars) - pc_filenamefull = os.path.join(outDataDir, 'pc_file.pc') - pc.write(pc_filenamefull) - pc_filename = os.path.relpath(pc_filenamefull, outDir) - - # --- Aero HTC - sec = htc.data.aero - sec.pc_filename = pc_filename - sec.ae_filename = ae_filename - sec.induction_method - sec.induction_method = AD['WakeMod'] - sec.tiploss_method = 1 if AD['TipLoss'] else 0 - sec.aerosections = Bld['BldAeroNodes'].shape[0] - - if AD['AFAeroMod']==2: - sec.dynstall_method= 2 - if AD['UAMod']==6: - sec.dynstall_method= 1 - else: - sec.dynstall_method = 0 - # print(sec) - - # print(htc.data) - - - # --------------------------------------------------------------------------------} - # --- Hawcstab2 - # --------------------------------------------------------------------------------{ - # Write operating point file - if OPfile is not None: - dfOP = CSVFile(OPfile).toDataFrame() - WS0=dfOP['Wind Speed (m/s)'] - WS0,Pitch0,RPM0,P0,T0 = dfOP['Wind Speed (m/s)'], dfOP['Pitch Angle (deg)'], dfOP['Rotor Speed (rpm)'], dfOP['Aerodynamic Power (W)']/1000, dfOP['Thrust (N)']/1000 - - # interpolating data to less points - WS=np.arange(np.min(dfOP['Wind Speed (m/s)']),np.max(dfOP['Wind Speed (m/s)'])+0.5,1) - Pitch = np.interp(WS, WS0, Pitch0) - RPM = np.interp(WS, WS0, RPM0) - P = np.interp(WS, WS0, P0) - T = np.interp(WS, WS0, T0) - - op_filenamefull = os.path.join(outDataDir, 'operational_data.opt') - op_filename = os.path.relpath(op_filenamefull, outDir) - with open(op_filenamefull, 'w') as f: - colnames=['Wind speed [m/s]','Pitch [deg]','Rot. speed [rpm]','Aero power [kW]','Aero thrust [kN]'] - f.write('{}\t{}\n'.format(len(WS), '\t'.join(colnames))) - for (ws,pi,rpm,p,t) in zip(WS,Pitch,RPM,P,T): - f.write('{}\t{}\t{}\t{}\t{}\n'.format(ws,pi,rpm,p,t)) - - sec=htc.data.hawcstab2 - sec.operational_data_filename = op_filename - - - # --- Write htc for hawc2 - htc.write(htcOut) - - # --- Write htc for hawcstab2 - del htc.data.output - del htc.data.simulation - del htc.data.dll - del htc.data.output - del htc.data.wind.tower_shadow_potential_2 # hawcstab2 can't handle this subblock - del htc.data.wind.mann - del htc.data.aerodrag # can't handle this either fuck annoying - del htc.data.wind.tower_shadow_potential - del htc.data.wind.tower_shadow_potential_2 - htc.data.wind.turb_format = 0 - htc.data.wind.tower_shadow_method = 0 - htc.data.wind.shear_format.values[0] = 1 - - # interpolate blde to less stations - bdy = htc.bodyByName('blade1') - bdy.nbodies = 24 - c2_def = htc.bodyC2(bdy) - z0 = dfMeanLine['z_[m]'].values - z2 = np.linspace(z0[0],z0[-1],25) - dfMeanLine2 = pd.DataFrame(columns=dfMeanLine.columns) - dfMeanLine2['z_[m]'] = z2 - dfMeanLine2['x_[m]'] = np.interp(z2, z0, dfMeanLine['x_[m]'].values) - dfMeanLine2['y_[m]'] = np.interp(z2, z0, dfMeanLine['y_[m]'].values) - dfMeanLine2['twist_[deg]'] = np.interp(z2, z0, dfMeanLine['twist_[deg]'].values) - c2_def = np.column_stack((np.arange(1,len(dfMeanLine2)+1), dfMeanLine2.values)) - c2_def = np.around(c2_def, 5) - htc.setBodyC2(bdy, c2_def) - - htc.write(htcOut.replace('.htc','_hs2.htc')) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py deleted file mode 100644 index 11762411cc..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_K_BD_H2.py +++ /dev/null @@ -1,152 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.converters.beam import ComputeStiffnessProps, ComputeInertiaProps, TransformCrossSectionMatrix -from pyFAST.converters.beam import MM, KK -from pyFAST.converters.beam import K66toPropsDecoupled, M66toPropsDecoupled - - -class Test(unittest.TestCase): - - def test_BD_H2(self): - - K = np.array([[ 3.22114734e+09, 3.25671541e+07, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, -4.99668423e+07], - [ 3.25671541e+07, 2.43648638e+09, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.71784304e+07], - [ 0.00000000e+00, 0.00000000e+00, 2.44325680e+10, 1.90703565e+08, 1.78086138e+09, 0.00000000e+00], - [ 0.00000000e+00, 0.00000000e+00, 1.90703565e+08, 4.84065153e+10, 4.60061848e+09, 0.00000000e+00], - [ 0.00000000e+00, 0.00000000e+00, 1.78086138e+09, 4.60061848e+09, 5.23688767e+10, 0.00000000e+00], - [-4.99668423e+07, 3.71784304e+07, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 2.33148898e+10]]) - - I = np.array([[1439.88989372 , 0. , 0. , 0. , 0. , -5.92729626], - [ 0. , 1439.88989372 , 0. , 0. , 0. , -68.63720816], - [ 0. , 0. , 1439.88989372 , 5.92729626 , 68.63720816 , 0. ], - [ 0. , 0. , 5.92729626 , 2594.38760678 , 47.71380715 , 0. ], - [ 0. , 0. , 68.63720816 , 47.71380715 , 3434.04030538 , 0. ], - [ -5.92729626 , -68.63720816 , 0. , 0. , 0. , 6028.42791216]]) - - stiff = ComputeStiffnessProps() - inertia = ComputeInertiaProps() - transform = TransformCrossSectionMatrix() - xs , ys = stiff.ComputeShearCenter(K) - xt , yt = stiff.ComputeTensionCenter(K) - xm , ym = inertia.ComputeMassCenter(I) - - # Approach BECAS - # Translate to tension (elastic) center - Kel = transform.CrossSectionRotoTranslationMatrix(K, xt, yt, 0.) - # Find delta - DeltaBecas = stiff.OrientationPrincipalAxesBecas(Kel) - # Rotate by delta - Kel_DeltaBecas = transform.CrossSectionRotoTranslationMatrix(Kel, 0., 0., DeltaBecas) - - # Approach ANBA4 - # Translate to tension (elastic) center - Kdec = stiff.DecoupleStiffness(K) - # Find delta - DeltaANBA4 = stiff.PrincipalAxesRotationAngle(Kdec) - # Rotate by delta - Kel_DeltaANBA4 = transform.CrossSectionRotoTranslationMatrix(Kdec, 0., 0., -DeltaANBA4) - - #print(stiff.ComputeTensionCenter(Kel_DeltaBecas)) - #print(stiff.ComputeTensionCenter(Kel_DeltaANBA4)) - #print(stiff.OrientationPrincipalAxesBecas(Kel_DeltaBecas)) - #print(stiff.OrientationPrincipalAxesBecas(Kel_DeltaANBA4)) - #print(stiff.PrincipalAxesRotationAngle(Kel_DeltaBecas)) - #print(stiff.PrincipalAxesRotationAngle(Kel_DeltaANBA4)) - - np.testing.assert_almost_equal(xs, 0.015468467117843322, 6) - np.testing.assert_almost_equal(ys, 0.015668518364738194, 6) - np.testing.assert_almost_equal(xt, -0.07288883346195946, 6) - np.testing.assert_almost_equal(yt, 0.0078053017185913485, 6) - np.testing.assert_almost_equal(xm, -0.04766837274110846, 6) - np.testing.assert_almost_equal(ym, 0.004116492716458095, 6) - np.testing.assert_almost_equal(DeltaBecas, -0.5874557755802033, 6) - np.testing.assert_almost_equal(DeltaANBA4, 0.5874557755802033, 6) - - # --- Using decoupled methods - EA2, EIx2, EIy2, kxsGA2, kysGA2, GKt2, x_C2, y_C2, x_S2, y_S2, theta_p2, theta_s2 = K66toPropsDecoupled(K) - m2, Ixi2, Iyi2, Ip2, x_G2, y_G2, theta_i2 = M66toPropsDecoupled(I) - - np.testing.assert_almost_equal(x_C2, xt, 6) - np.testing.assert_almost_equal(y_C2, yt, 6) - np.testing.assert_almost_equal(x_S2, xs, 6) - np.testing.assert_almost_equal(y_S2, ys, 6) - np.testing.assert_almost_equal(DeltaANBA4, -theta_p2, 6) - - - - - def test_decoupleMat(self): - # Test the detection of main points (center of mass, tension and shear center) - # for a simple (decoupled) beam cross section matrix in BeamDyn coordinates - - # Main points - x_G = 0.175 - y_G = -0.1 - x_C = 0.164 - y_C = -0.13 - x_S = 0.18 - y_S = -0.136 - # Inertia param - m = 262. - Ixi = 163. - Iyi = 54. - I_p = 217. - theta_i = -0.1 - # Stiffness param - EA = 4.1e10 - EIxp = 2.1e9 - EIyp = 0.9e9 - GKt = 2.3e8 - GA = 3.75e9 - kxs = 0.5 - kys = 0.5 - theta_p = -0.1 - theta_s = -0.1 - # Mass and stiffness matrix for simple beam - M = MM(m, Ixi, Iyi, I_p, x_G, y_G, theta_i) # NOTE: theta_i in rad - K = KK(EA, EIxp, EIyp, GKt, GA, kxs, kys, x_C, y_C, theta_p, x_S, y_S, theta_s) # Note theta_p/s in rad - - # --- Using general methods - stiff = ComputeStiffnessProps() - inertia = ComputeInertiaProps() - xs , ys = stiff.ComputeShearCenter(K) - xt , yt = stiff.ComputeTensionCenter(K) - xm , ym = inertia.ComputeMassCenter(M) - - np.testing.assert_almost_equal(xs, x_S, 6) - np.testing.assert_almost_equal(ys, y_S, 6) - np.testing.assert_almost_equal(xm, x_G, 6) - np.testing.assert_almost_equal(ym, y_G, 6) - np.testing.assert_almost_equal(xt, x_C, 6) - np.testing.assert_almost_equal(yt, y_C, 6) - - # --- Using decoupled methods - EA2, EIx2, EIy2, kxsGA2, kysGA2, GKt2, x_C2, y_C2, x_S2, y_S2, theta_p2, theta_s2 = K66toPropsDecoupled(K) - m2, Ixi2, Iyi2, Ip2, x_G2, y_G2, theta_i2 = M66toPropsDecoupled(M) - - np.testing.assert_almost_equal(x_S2 ,x_S ,6) - np.testing.assert_almost_equal(y_S2 ,y_S ,6) - np.testing.assert_almost_equal(x_G2 ,x_G ,6) - np.testing.assert_almost_equal(y_G2 ,y_G ,6) - np.testing.assert_almost_equal(x_C2 ,x_C ,6) - np.testing.assert_almost_equal(y_C2 ,y_C ,6) - np.testing.assert_almost_equal(EA2 ,EA ,6) - np.testing.assert_almost_equal(EIx2/1e9,EIxp/1e9,6) - np.testing.assert_almost_equal(EIy2/1e9,EIyp/1e9,6) - np.testing.assert_almost_equal(kxsGA2 ,kxs*GA ,6) - np.testing.assert_almost_equal(kysGA2 ,kys*GA ,6) - np.testing.assert_almost_equal(GKt2/1e9,GKt/1e9 ,6) - np.testing.assert_almost_equal(theta_p2,theta_p ,6) - #np.testing.assert_almost_equal(theta_s2,theta_s ,6) # .... - np.testing.assert_almost_equal(m2 ,m ,6) - np.testing.assert_almost_equal(Ixi2 ,Ixi ,6) - np.testing.assert_almost_equal(Iyi2 ,Iyi ,6) - np.testing.assert_almost_equal(Ip2 ,I_p ,6) - - - - -if __name__ == '__main__': - - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py deleted file mode 100644 index b5b87d918b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_beamprops.py +++ /dev/null @@ -1,52 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.converters.beam import * - - -class Test(unittest.TestCase): - - def test_MM_translate(self): - - # Inertia param - m = 262. - I_x = 163. - I_y = 54. - I_p = 217. - theta_i = -0.1 - x_G = 0.175 - y_G = -0.1 - x_A = -1 - y_A = 1 - # Referenec values - Mass and stiffness matrix for simple beam - M = MM(m, I_x, I_y, I_p, x_G, y_G, theta_i) # NOTE: theta_i in rad - M_G_ref = MM(m, I_x, I_y, I_p, 0, 0 , theta_i) - M_A_ref = MM(m, I_x, I_y, I_p, x_G-x_A, y_G-y_A, theta_i) # NOTE: theta_i in rad - J_G_ref = M_G_ref[3:6, 3:6] # Inertia at COG - - # Functions to compute inertial properties - inertia = ComputeInertiaProps() - xm , ym = inertia.ComputeMassCenter(M) - mass, J_G, Ref2COG = identifyRigidBodyMM(M) - - np.testing.assert_almost_equal(xm, x_G, 6) - np.testing.assert_almost_equal(ym, y_G, 6) - np.testing.assert_almost_equal(mass, m, 6) - np.testing.assert_almost_equal(Ref2COG[0], x_G, 6) - np.testing.assert_almost_equal(Ref2COG[1], y_G, 6) - np.testing.assert_almost_equal(Ref2COG[2], 0, 6) - np.testing.assert_almost_equal(J_G, J_G_ref, 6) - - - # Translating to the COG - M_G = TranslateSectionMassMatrix(M, x_G, y_G) - np.testing.assert_almost_equal(M_G, M_G_ref, 6) - - # Translating to another point - M_A = TranslateSectionMassMatrix(M, x_A, y_A) - np.testing.assert_almost_equal(M_A, M_A_ref, 6) - - -if __name__ == '__main__': - - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py deleted file mode 100644 index f7daf39c3d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_hawc2ToBeamDyn.py +++ /dev/null @@ -1,60 +0,0 @@ -import unittest -import os -import numpy as np -from shutil import copyfile -import pyFAST.converters.beamdyn as bd - -class Test(unittest.TestCase): - - def test_BAR0(self): - - # Get current directory so this script can be called from any location - MyDir=os.path.dirname(__file__) - # --- BeamDynToHawc2 - htc_template = os.path.join(MyDir,'../../../data/templates/hawc2_template.htc') # readonly - BD_mainfile = os.path.join(MyDir,'../../../data/BAR0/BAR0_BeamDyn.dat') # readonly - BD_bladefile = os.path.join(MyDir,'../../../data/BAR0/BAR0_BeamDyn_Blade.dat') # readonly - H2_htcfile_new = '_BAR0.htc' # will be created - H2_stfile = '_BAR0_st.st' # will be created - copyfile(htc_template, H2_htcfile_new) # Backup template - df_c2, df_st = bd.beamDynToHawc2(BD_mainfile, BD_bladefile, H2_htcfile_new, H2_stfile, 'blade1', FPM=True, verbose=True) - - # NOTE: NREL5MW is too simple of a tests since straight - np.testing.assert_almost_equal(df_c2['x_[m]'].values[10] , 0.0 ,3) - np.testing.assert_almost_equal(df_c2['y_[m]'].values[-1] , -4.0 ,3) - np.testing.assert_almost_equal(df_c2['z_[m]'].values[-1] ,99.9963 ,3) - np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[-1],2.57534 ,3) - np.testing.assert_almost_equal(df_c2['twist_[deg]'].values[0] ,-20.0020 ,3) - - - np.testing.assert_almost_equal(df_st['m_[kg/m]'].values[10] ,694.6133 ,3) - - np.testing.assert_almost_equal(df_st['x_cg_[m]'].values[10] ,-0.74337 ,3) - np.testing.assert_almost_equal(df_st['y_cg_[m]'].values[10] , 0.01759 ,3) - - np.testing.assert_almost_equal(df_st['x_e_[m]'].values[10] ,-0.75435 ,3) - np.testing.assert_almost_equal(df_st['y_e_[m]'].values[10] , 0.01374 ,3) - - np.testing.assert_almost_equal(df_st['pitch_[deg]'].values[10],-1.48000 ,3) - - np.testing.assert_almost_equal(df_st['ri_x_[m]'].values[10] , 0.57088 ,3) - np.testing.assert_almost_equal(df_st['ri_y_[m]'].values[10] , 1.4513 ,3) - - np.testing.assert_almost_equal(df_st['K11'].values[10]/1e8 ,5.694503 ,3) - np.testing.assert_almost_equal(df_st['K22'].values[10]/1e8 ,2.467721 ,3) - np.testing.assert_almost_equal(df_st['K33'].values[10]/1e8 ,125.1373 ,3) - np.testing.assert_almost_equal(df_st['K44'].values[10]/1e8 ,44.0502 ,3) - np.testing.assert_almost_equal(df_st['K55'].values[10]/1e8 ,274.3825 ,3) - np.testing.assert_almost_equal(df_st['K66'].values[10]/1e8 ,8.232813 ,3) - - np.testing.assert_almost_equal(df_st['K12'].values[10]/1e6 , 1.20013 ,3) - np.testing.assert_almost_equal(df_st['K16'].values[10]/1e6 ,-33.9432 ,3) - np.testing.assert_almost_equal(df_st['K26'].values[10]/1e6 ,211.6052 ,3) - - os.remove(H2_htcfile_new) - os.remove(H2_stfile) - - -if __name__ == '__main__': - - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py deleted file mode 100644 index c4c22baf62..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/converters/tests/test_run_Examples.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) - import matplotlib.pyplot as plt - plt.close('all') - print('\n--------------------------------------------------------------') - for f in files: - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore deleted file mode 100644 index 305dbd7d64..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.sum -*.bts -*.pdf diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py deleted file mode 100644 index a1718524a0..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/AMRWindSimulation.py +++ /dev/null @@ -1,577 +0,0 @@ -import numpy as np -import os - -from pyFAST.fastfarm.FASTFarmCaseCreation import getMultipleOf - -class AMRWindSimulation: - ''' - This class is used to help prepare sampling planes for an AMR-Wind - simulation. The sampling planes will be used to generate inflow - data for FAST.Farm simulations. - Specifically, this class contains info from the AMR-Wind input file, - and it carries out simple calculations about the AMR-Wind - simulation - For reference, see https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html - ''' - - def __init__(self, wts:dict, - dt: float, prob_lo: tuple, prob_hi: tuple, - n_cell: tuple, max_level: int, - incflo_velocity_hh: tuple, - postproc_name='sampling', - buffer_lr = [3,6,3,3,2], - buffer_hr = 0.6, - ds_hr = None, ds_lr = None, - dt_hr = None, dt_lr = None, - mod_wake = None): - ''' - Values from the AMR-Wind input file - Inputs: - * dt: this should be a fixed dt value from the LES run - * incflo_velocity_hh: velocity vector, specifically at hub height - * buffer_lr: buffer for [xmin, xmax, ymin, ymax, zmax] in low-res box, in D - * buffer_hr: buffer for all directions (constant) in high-res box, in D - * mod_wake: Wake formulations within FAST.Farm. 1:polar; 2:curl; 3:cartesian. - ''' - # Process inputs - self.wts = wts - self.dt = dt - self.prob_lo = prob_lo - self.prob_hi = prob_hi - self.n_cell = n_cell - self.max_level = max_level - self.incflo_velocity_hh = incflo_velocity_hh - self.postproc_name_lr = f"{postproc_name}_lr" - self.postproc_name_hr = f"{postproc_name}_hr" - self.buffer_lr = buffer_lr - self.buffer_hr = buffer_hr - self.ds_hr = ds_hr - self.ds_lr = ds_lr - self.dt_hr = dt_hr - self.dt_lr = dt_lr - self.mod_wake = mod_wake - - # Placeholder variables, to be calculated by FFCaseCreation - self.output_frequency_lr = None - self.output_frequency_hr = None - self.sampling_labels_lr = None - self.sampling_labels_hr = None - self.nx_lr = None - self.ny_lr = None - self.nz_lr = None - self.xlow_lr = None - self.xhigh_lr = None - self.ylow_lr = None - self.yhigh_lr = None - self.zlow_lr = None - self.zhigh_lr = None - self.zoffsets_lr = None - self.hr_domains = None - - # Run extra functions - self._checkInputs() - self._calc_simple_params() - self._calc_sampling_params() - - - def __repr__(self): - s = f'<{type(self).__name__} object>\n' - s += f'Requested parameters:\n' - s += f' - Wake model: {self.mod_wake} (1:Polar; 2:Curl; 3:Cartesian)\n' - s += f' - Extent of high-res boxes: {self.extent_high} D to each side\n' - s += f' - Extent of low-res box: xmin={self.extent_low[0]} D, xmax={self.extent_low[1]} D, ymin={self.extent_low[2]} D, ymax={self.extent_low[3]} D, zmax={self.extent_low[4]} D\n' - - s += f'\n' - s += f'LES parameters:\n' - s += f' - velocity hub height: {self.incflo_velocity_hh} m/s\n' - s += f' - ds LES: ({self.dx0}, {self.dy0}, {self.dz0}) m\n' - s += f' - dt LES: {self.dt} s\n' - s += f' - Extents: ({self.prob_hi[0]-self.prob_lo[0]}, {self.prob_hi[1]-self.prob_lo[1]}, {self.prob_hi[2]-self.prob_lo[2]}) m\n' - s += f' - x: {self.prob_lo[0]}:{self.dx0}:{self.prob_hi[0]} m,\t ({self.n_cell[0]} points)\n' - s += f' - y: {self.prob_lo[1]}:{self.dy0}:{self.prob_hi[1]} m,\t ({self.n_cell[1]} points)\n' - s += f' - z: {self.prob_lo[2]}:{self.dz0}:{self.prob_hi[2]} m,\t ({self.n_cell[2]} points)\n' - - s += f'\n' - s += f'Low-res domain: \n' - s += f' - ds low: {self.ds_low_les} m\n' - s += f' - dt low: {self.dt_low_les} s (with LES dt = {self.dt} s, output frequency is {self.output_frequency_lr})\n' - s += f' - Sampling labels: {self.sampling_labels_lr}\n' - s += f' - Extents: ({self.xdist_lr}, {self.ydist_lr}, {self.zdist_lr}) m\n' - s += f' - x: {self.xlow_lr}:{self.ds_low_les}:{self.xhigh_lr} m,\t ({self.nx_lr} points)\n' - s += f' - y: {self.ylow_lr}:{self.ds_low_les}:{self.yhigh_lr} m,\t ({self.ny_lr} points)\n' - s += f' - z: {self.zlow_lr}:{self.ds_low_les}:{self.zhigh_lr} m,\t ({self.nz_lr} points)\n' - - s += f'\n' - s += f'High-res domain: \n' - s += f' - ds high: {self.ds_high_les} m\n' - s += f' - dt high: {self.dt_high_les} s (with LES dt = {self.dt} s, output frequency is {self.output_frequency_hr})\n' - s += f' - Sampling labels: {self.sampling_labels_hr}\n' - for t in np.arange(len(self.hr_domains)): - s += f" - Turbine {t}\n" - s += f" - Extents: ({self.hr_domains[t]['xdist_hr']}, {self.hr_domains[t]['ydist_hr']}, {self.hr_domains[t]['zdist_hr']}) m\n" - s += f" - x: {self.hr_domains[t]['xlow_hr']}:{self.ds_high_les}:{self.hr_domains[t]['xhigh_hr']} m,\t ({self.hr_domains[t]['nx_hr']} points)\n" - s += f" - y: {self.hr_domains[t]['ylow_hr']}:{self.ds_high_les}:{self.hr_domains[t]['yhigh_hr']} m,\t ({self.hr_domains[t]['ny_hr']} points)\n" - s += f" - z: {self.hr_domains[t]['zlow_hr']}:{self.ds_high_les}:{self.hr_domains[t]['zhigh_hr']} m,\t ({self.hr_domains[t]['nz_hr']} points)\n" - return s - - - def _checkInputs(self): - ''' - Check that the AMR-Wind inputs make sense - ''' - if len(self.prob_lo) != 3: - raise ValueError(f"prob_lo must contain 3 elements, but it has {len(self.prob_lo)}") - if len(self.prob_hi) != 3: - raise ValueError(f"prob_hi must contain 3 elements, but it has {len(self.prob_hi)}") - if len(self.incflo_velocity_hh) != 3: - raise ValueError(f"incflo_velocity_hh must contain 3 elements, but it has {len(self.incflo_velocity_hh)}") - if (self.prob_lo[0] >= self.prob_hi[0]): - raise ValueError("x-component of prob_lo larger than x-component of prob_hi") - if (self.prob_lo[1] >= self.prob_hi[1]): - raise ValueError("y-component of prob_lo larger than y-component of prob_hi") - if (self.prob_lo[2] >= self.prob_hi[2]): - raise ValueError("z-component of prob_lo larger than z-component of prob_hi") - if self.mod_wake not in [1,2,3]: - raise ValueError (f'mod_wake parameter can only be 1 (polar), 2 (curl), or 3 (cartesian). Received {self.mod_wake}.') - - def _calc_simple_params(self): - ''' - Calculate simulation parameters, given only AMR-Wind inputs - ''' - # Grid resolution at Level 0 - self.dx0 = (self.prob_hi[0] - self.prob_lo[0]) / self.n_cell[0] - self.dy0 = (self.prob_hi[1] - self.prob_lo[1]) / self.n_cell[1] - self.dz0 = (self.prob_hi[2] - self.prob_lo[2]) / self.n_cell[2] - self.ds0_max = max(self.dx0, self.dy0, self.dz0) - - # Grid resolution at finest refinement level - self.dx_refine = self.dx0/(2**self.max_level) - self.dy_refine = self.dy0/(2**self.max_level) - self.dz_refine = self.dz0/(2**self.max_level) - self.ds_refine_max = max(self.dx_refine, self.dy_refine, self.dz_refine) - - # Hub height wind speed - self.vhub = np.sqrt(self.incflo_velocity_hh[0]**2 + self.incflo_velocity_hh[1]**2) - - def _calc_sampling_params(self): - ''' - Calculate parameters for sampling planes - ''' - - self._calc_sampling_labels() - self._calc_sampling_time() - self._calc_grid_resolution() - self._calc_grid_placement() - - def _calc_sampling_labels(self): - ''' - Calculate labels for AMR-Wind sampling - ''' - sampling_labels_lr = ["Low"] - self.sampling_labels_lr = sampling_labels_lr - - sampling_labels_hr = [] - for turbkey in self.wts: - if 'name' in self.wts[turbkey].keys(): - wt_name = self.wts[turbkey]['name'] - else: - wt_name = f'T{turbkey+1}' - sampling_labels_hr.append(f"High{wt_name}_inflow0deg") - - self.sampling_labels_hr = sampling_labels_hr - - def _calc_sampling_time(self): - ''' - Calculate timestep values and AMR-Wind plane sampling frequency - ''' - - ## High resolution domain, dt_high_les - fmax_max = 0 - for turbkey in self.wts: - fmax_max = max(0, self.wts[turbkey]['fmax']) - if self.dt_hr is None: - # Calculate dt of high-res per guidelines - dt_hr_max = 1 / (2 * fmax_max) - self.dt_high_les = getMultipleOf(dt_hr_max, multipleof=self.dt) # Ensure dt_hr is a multiple of the AMR-Wind timestep - else: - # dt of high-res is given - self.dt_high_les = self.dt_hr - - if self.dt_high_les < self.dt: - raise ValueError(f"AMR-Wind timestep {self.dt} too coarse for high resolution domain! AMR-Wind timestep must be at least {self.dt_high_les} sec.") - - ## Low resolution domain, dt_low_les - cmeander_min = float("inf") - Dwake_min = float("inf") - for turbkey in self.wts: - cmeander_min = min(cmeander_min, self.wts[turbkey]['Cmeander']) - Dwake_min = min(Dwake_min, self.wts[turbkey]['D']) # Approximate D_wake as D_rotor - - cmax_min = float("inf") - for turbkey in self.wts: - self.cmax_min = min(cmax_min, self.wts[turbkey]['cmax']) - - if self.mod_wake == 1: - self.dr = self.cmax_min - dt_lr_max = cmeander_min * Dwake_min / (10 * self.vhub) - else: # mod_wake == 2 or 3 - self.dr = Dwake_min/10 - dt_lr_max = self.dr / (2* self.vhub) - - - if self.dt_lr is None: - # Calculate dt of low-res per guidelines - self.dt_low_les = getMultipleOf(dt_lr_max, multipleof=self.dt_high_les) # Ensure that dt_lr is a multiple of the high res sampling timestep - else: - # dt of low-res is given - self.dt_low_les = self.dt_lr - - - if self.dt_low_les < self.dt: - raise ValueError(f"AMR-Wind timestep {self.dt} too coarse for low resolution domain! AMR-Wind timestep must be at least {self.dt_low_les} sec.") - if self.dt_high_les > self.dt_low_les: - raise ValueError(f"Low resolution timestep ({self.dt_low_les}) is finer than high resolution timestep ({self.dt_high_les})!") - - ## Sampling frequency - self.output_frequency_hr = int(np.floor(round(self.dt_high_les/self.dt,4))) - self.output_frequency_lr = getMultipleOf(self.dt_low_les/self.dt, multipleof=self.output_frequency_hr) - - if self.output_frequency_lr % self.output_frequency_hr != 0: - raise ValueError(f"Low resolution output frequency of {self.output_frequency_lr} not a multiple of the high resolution frequency {self.output_frequency_hr}!") - - def _calc_grid_resolution(self): - ''' - Calculate sampling grid resolutions - ''' - - ## High resolution domain, ds_hr - # ASSUME: FAST.Farm HR zone lies within the region of maxmum AMR-Wind grid refinement - # NOTE: ds_hr is calculated independent of any x/y/z requirements, - # just blade chord length requirements - ds_hr_max = self.cmax_min - - if self.ds_hr is None: # Calculate ds_hr if it is not specified as an input - if ds_hr_max < self.ds_refine_max: - raise ValueError(f"AMR-Wind grid spacing of {self.ds_refine_max} is too coarse for high resolution domain! The high-resolution domain requires "\ - f"AMR-Wind grid spacing to be at least {ds_hr_max} m. If a coarser high-res domain is acceptable, then manually specify the "\ - f"high-resolution grid spacing to be at least {self.ds_refine_max} with ds_hr = {self.ds_refine_max}.") - self.ds_high_les = getMultipleOf(ds_hr_max, multipleof=self.ds_refine_max) # Ensure that ds_hr is a multiple of the refined AMR-Wind grid spacing - - self.ds_hr = self.ds_high_les - else: - self.ds_high_les = self.ds_hr - - if self.ds_high_les < self.ds_refine_max: - raise ValueError(f"AMR-Wind fine grid spacing {self.ds_refine_max} too coarse for high resolution domain! AMR-Wind grid spacing must be at least {self.ds_high_les} m.") - - ## Low resolution domain, ds_lr (s = x/y/z) - # ASSUME: FAST.Farm LR zone uses Level 0 AMR-Wind grid spacing - # NOTE: ds_lr is calculated independent of any x/y/z requirements, - # just time step and velocity requiements - if self.ds_lr is None: - ds_lr_max = self.dt_low_les * self.vhub**2 / 15 - self.ds_low_les = getMultipleOf(ds_lr_max, multipleof=self.ds_hr) # ds_hr is already a multiple of the AMR-Wind grid spacing, so here we need to make sure ds_lr is a multiple of ds_hr - self.ds_lr = self.ds_low_les - else: - self.ds_low_les = self.ds_lr - - if self.ds_low_les < self.ds0_max: - raise ValueError(f"AMR-Wind coarse grid spacing {self.ds0_max} too coarse for high resolution domain! AMR-Wind grid spacing must be at least {self.ds_low_les} m.") - if self.ds_low_les % self.ds_high_les != 0: - raise ValueError(f"Low resolution grid spacing of {self.ds_low_les} not a multiple of the high resolution grid spacing {self.ds_high_les}!") - - def _calc_grid_placement(self): - ''' - Calculate placement of sampling grids - ''' - - self._calc_hr_grid_placement() - self._calc_lr_grid_placement() - - def _calc_hr_grid_placement(self): - ''' - Calculate placement of high resolution grids - ''' - ### ~~~~~~~~~ Calculate high resolution grid placement ~~~~~~~~~ - hr_domains = {} - for turbkey in self.wts: - wt_x = self.wts[turbkey]['x'] - wt_y = self.wts[turbkey]['y'] - wt_z = self.wts[turbkey]['zhub'] - wt_D = self.wts[turbkey]['D'] - - # Calculate minimum/maximum HR domain extents - xlow_hr_min = wt_x - self.buffer_hr * wt_D - xhigh_hr_max = wt_x + self.buffer_hr * wt_D - ylow_hr_min = wt_y - self.buffer_hr * wt_D - yhigh_hr_max = wt_y + self.buffer_hr * wt_D - zhigh_hr_max = wt_z + self.buffer_hr * wt_D - - # Calculate the minimum/maximum HR domain coordinate lengths & number of grid cells - xdist_hr_min = xhigh_hr_max - xlow_hr_min # Minumum possible length of x-extent of HR domain - xdist_hr = self.ds_high_les * np.ceil(xdist_hr_min/self.ds_high_les) - nx_hr = int(xdist_hr/self.ds_high_les) + 1 - - ydist_hr_min = yhigh_hr_max - ylow_hr_min - ydist_hr = self.ds_high_les * np.ceil(ydist_hr_min/self.ds_high_les) - ny_hr = int(ydist_hr/self.ds_high_les) + 1 - - zdist_hr = self.ds_high_les * np.ceil(zhigh_hr_max/self.ds_high_les) - nz_hr = int(zdist_hr/self.ds_high_les) + 1 - - # Calculate actual HR domain extent - # NOTE: Sampling planes should measure at AMR-Wind cell centers, not cell edges - xlow_hr = getMultipleOf(xlow_hr_min, multipleof=self.ds_high_les) - 0.5*self.dx_refine + self.prob_lo[0]%self.ds_high_les - xhigh_hr = xlow_hr + xdist_hr - ylow_hr = getMultipleOf(ylow_hr_min, multipleof=self.ds_high_les) - 0.5*self.dy_refine + self.prob_lo[1]%self.ds_high_les - yhigh_hr = ylow_hr + ydist_hr - zlow_hr = 0.5 * self.dz0 / (2**self.max_level) - zhigh_hr = zlow_hr + zdist_hr - zoffsets_hr = np.arange(zlow_hr, zhigh_hr+self.ds_high_les, self.ds_high_les) - zlow_hr - - # Check domain extents - if xhigh_hr > self.prob_hi[0]: - raise ValueError(f"HR domain point {xhigh_hr} extends beyond maximum AMR-Wind x-extent!") - if xlow_hr < self.prob_lo[0]: - raise ValueError(f"HR domain point {xlow_hr} extends beyond minimum AMR-Wind x-extent!") - if yhigh_hr > self.prob_hi[1]: - raise ValueError(f"HR domain point {yhigh_hr} extends beyond maximum AMR-Wind y-extent!") - if ylow_hr < self.prob_lo[1]: - raise ValueError(f"HR domain point {ylow_hr} extends beyond minimum AMR-Wind y-extent!") - if zhigh_hr > self.prob_hi[2]: - raise ValueError(f"HR domain point {zhigh_hr} extends beyond maximum AMR-Wind z-extent!") - if zlow_hr < self.prob_lo[2]: - raise ValueError(f"HR domain point {zlow_hr} extends beyond minimum AMR-Wind z-extent!") - - # Save out info for FFCaseCreation - self.extent_high = self.buffer_hr*2 - - hr_turb_info = {'nx_hr': nx_hr, 'ny_hr': ny_hr, 'nz_hr': nz_hr, - 'xdist_hr': xdist_hr, 'ydist_hr': ydist_hr, 'zdist_hr': zdist_hr, - 'xlow_hr': xlow_hr, 'ylow_hr': ylow_hr, 'zlow_hr': zlow_hr, - 'xhigh_hr': xhigh_hr, 'yhigh_hr': yhigh_hr, 'zhigh_hr': zhigh_hr, - 'zoffsets_hr': zoffsets_hr} - hr_domains[turbkey] = hr_turb_info - self.hr_domains = hr_domains - - def _calc_lr_grid_placement(self): - ''' - Calculate placement of low resolution grid - ''' - - ### ~~~~~~~~~ Calculate low resolution grid placement ~~~~~~~~~ - # Calculate minimum/maximum LR domain extents - wt_all_x_min = float("inf") # Minimum x-value of any turbine - wt_all_x_max = -1*float("inf") - wt_all_y_min = float("inf") - wt_all_y_max = -1*float("inf") - wt_all_z_max = -1*float("inf") # Tallest rotor disk point of any turbine - Drot_max = -1*float("inf") - for turbkey in self.wts: - wt_all_x_min = min(wt_all_x_min, self.wts[turbkey]['x']) - wt_all_x_max = max(wt_all_x_max, self.wts[turbkey]['x']) - wt_all_y_min = min(wt_all_y_min, self.wts[turbkey]['y']) - wt_all_y_max = max(wt_all_y_min, self.wts[turbkey]['y']) - wt_all_z_max = max(wt_all_z_max, self.wts[turbkey]['zhub'] + 0.5*self.wts[turbkey]['D']) - Drot_max = max(Drot_max, self.wts[turbkey]['D']) - - xlow_lr_min = wt_all_x_min - self.buffer_lr[0] * Drot_max - xhigh_lr_max = wt_all_x_max + self.buffer_lr[1] * Drot_max - ylow_lr_min = wt_all_y_min - self.buffer_lr[2] * Drot_max - yhigh_lr_max = wt_all_y_max + self.buffer_lr[3] * Drot_max - zhigh_lr_max = wt_all_z_max + self.buffer_lr[4] * Drot_max - - # Calculate the minimum/maximum LR domain coordinate lengths & number of grid cells - xdist_lr_min = xhigh_lr_max - xlow_lr_min # Minumum possible length of x-extent of LR domain - self.xdist_lr = self.ds_low_les * np.ceil(xdist_lr_min/self.ds_low_les) # The `+ ds_lr` comes from the +1 to NS_LOW in Sec. 4.2.15.6.4.1.1 - # TODO: adjust xdist_lr calculation by also using `inflow_deg` - self.nx_lr = int(self.xdist_lr/self.ds_low_les) + 1 - - ydist_lr_min = yhigh_lr_max - ylow_lr_min - self.ydist_lr = self.ds_low_les * np.ceil(ydist_lr_min/self.ds_low_les) - # TODO: adjust ydist_lr calculation by also using `inflow_deg` - self.ny_lr = int(self.ydist_lr/self.ds_low_les) + 1 - - self.zdist_lr = self.ds_low_les * np.ceil(zhigh_lr_max/self.ds_low_les) - self.nz_lr = int(self.zdist_lr/self.ds_low_les) + 1 - - ## Calculate actual LR domain extent - # NOTE: Sampling planes should measure at AMR-Wind cell centers, not cell edges - # NOTE: Should we use dx/dy/dz values here or ds_lr? - # - AR: I think it's correct to use ds_lr to get to the xlow values, - # but then offset by 0.5*amr_dx0 if need be - self.xlow_lr = getMultipleOf(xlow_lr_min, multipleof=self.ds_low_les) - 0.5*self.dx0 + self.prob_lo[0]%self.ds_low_les - self.xhigh_lr = self.xlow_lr + self.xdist_lr - self.ylow_lr = getMultipleOf(ylow_lr_min, multipleof=self.ds_low_les) - 0.5*self.dy0 + self.prob_lo[1]%self.ds_low_les - self.yhigh_lr = self.ylow_lr + self.ydist_lr - self.zlow_lr = 0.5 * self.dz0 # Lowest z point is half the height of the lowest grid cell - self.zhigh_lr = self.zlow_lr + self.zdist_lr - self.zoffsets_lr = np.arange(self.zlow_lr, self.zhigh_lr+self.ds_low_les, self.ds_low_les) - self.zlow_lr - - ## Check domain extents - if self.xhigh_lr > self.prob_hi[0]: - raise ValueError(f"LR domain point {self.xhigh_lr} extends beyond maximum AMR-Wind x-extent!") - if self.xlow_lr < self.prob_lo[0]: - raise ValueError(f"LR domain point {self.xlow_lr} extends beyond minimum AMR-Wind x-extent!") - if self.yhigh_lr > self.prob_hi[1]: - raise ValueError(f"LR domain point {self.yhigh_lr} extends beyond maximum AMR-Wind y-extent!") - if self.ylow_lr < self.prob_lo[1]: - raise ValueError(f"LR domain point {self.ylow_lr} extends beyond minimum AMR-Wind y-extent!") - if self.zhigh_lr > self.prob_hi[2]: - raise ValueError(f"LR domain point {self.zhigh_lr} extends beyond maximum AMR-Wind z-extent!") - if self.zlow_lr < self.prob_lo[2]: - raise ValueError(f"LR domain point {self.zlow_lr} extends beyond minimum AMR-Wind z-extent!") - - ## Check grid placement - self._check_grid_placement() - - ## Save out info for FFCaseCreation - self.extent_low = self.buffer_lr - - def _check_grid_placement(self): - ''' - Check the values of parameters that were calculated by _calc_sampling_params - ''' - - ## Check that sampling grids are at cell centers - # Low resolution grid - amr_xgrid_level0 = np.arange(self.prob_lo[0], self.prob_hi[0], self.dx0) - amr_ygrid_level0 = np.arange(self.prob_lo[1], self.prob_hi[1], self.dy0) - amr_zgrid_level0 = np.arange(self.prob_lo[2], self.prob_hi[2], self.dz0) - - amr_xgrid_level0_cc = amr_xgrid_level0 + 0.5*self.dx0 # Cell-centered AMR-Wind x-grid - amr_ygrid_level0_cc = amr_ygrid_level0 + 0.5*self.dy0 - amr_zgrid_level0_cc = amr_zgrid_level0 + 0.5*self.dz0 - - sampling_xgrid_lr = self.xlow_lr + self.ds_lr*np.arange(self.nx_lr) - sampling_ygrid_lr = self.ylow_lr + self.ds_lr*np.arange(self.ny_lr) - sampling_zgrid_lr = self.zlow_lr + self.zoffsets_lr - - # TODO: These for loops could be replaced with a faster operation - for coord in sampling_xgrid_lr: - if coord not in amr_xgrid_level0_cc: - raise ValueError("Low resolution x-sampling grid is not cell cenetered with AMR-Wind's grid!") - for coord in sampling_ygrid_lr: - if coord not in amr_ygrid_level0_cc: - raise ValueError("Low resolution y-sampling grid is not cell cenetered with AMR-Wind's grid!") - for coord in sampling_zgrid_lr: - if coord not in amr_zgrid_level0_cc: - raise ValueError("Low resolution z-sampling grid is not cell cenetered with AMR-Wind's grid!") - - # High resolution grids (span the entire domain to make this check easier) - amr_xgrid_refine = np.arange(self.prob_lo[0], self.prob_hi[0], self.dx_refine) - amr_ygrid_refine = np.arange(self.prob_lo[1], self.prob_hi[1], self.dy_refine) - amr_zgrid_refine = np.arange(self.prob_lo[2], self.prob_hi[2], self.dz_refine) - - amr_xgrid_refine_cc = amr_xgrid_refine + 0.5*self.dx_refine - amr_ygrid_refine_cc = amr_ygrid_refine + 0.5*self.dy_refine - amr_zgrid_refine_cc = amr_zgrid_refine + 0.5*self.dz_refine - - for turbkey in self.hr_domains: - nx_hr = self.hr_domains[turbkey]['nx_hr'] - ny_hr = self.hr_domains[turbkey]['ny_hr'] - xlow_hr = self.hr_domains[turbkey]['xlow_hr'] - ylow_hr = self.hr_domains[turbkey]['ylow_hr'] - - sampling_xgrid_hr = xlow_hr + self.ds_hr*np.arange(nx_hr) - sampling_ygrid_hr = ylow_hr + self.ds_hr*np.arange(ny_hr) - sampling_zgrid_hr = self.hr_domains[turbkey]['zlow_hr'] + self.hr_domains[turbkey]['zoffsets_hr'] - - # TODO: These for loops could be replaced with a faster operation - for coord in sampling_xgrid_hr: - if coord not in amr_xgrid_refine_cc: - raise ValueError("High resolution x-sampling grid is not cell cenetered with AMR-Wind's grid!") - for coord in sampling_ygrid_hr: - if coord not in amr_ygrid_refine_cc: - raise ValueError("High resolution y-sampling grid is not cell cenetered with AMR-Wind's grid!") - for coord in sampling_zgrid_hr: - if coord not in amr_zgrid_refine_cc: - raise ValueError("High resolution z-sampling grid is not cell cenetered with AMR-Wind's grid!") - - - - def write_sampling_params(self, outdir=None): - ''' - Write out text that can be used for the sampling planes in an - AMR-Wind input file - - outdir: str - Input file to be written. If None, result is written to screen - ''' - - # Write high-level info for sampling - sampling_labels_lr_str = " ".join(str(item) for item in self.sampling_labels_lr) - sampling_labels_hr_str = " ".join(str(item) for item in self.sampling_labels_hr) - s = f"# Sampling info generated by AMRWindSamplingCreation.py\n" - s += f"incflo.post_processing = {self.postproc_name_lr} {self.postproc_name_hr} # averaging\n\n\n" - - s += f"# ---- Low-res sampling parameters ----\n" - s += f"{self.postproc_name_lr}.output_format = netcdf\n" - s += f"{self.postproc_name_lr}.output_frequency = {self.output_frequency_lr}\n" - s += f"{self.postproc_name_lr}.fields = velocity # temperature tke\n" - s += f"{self.postproc_name_lr}.labels = {sampling_labels_lr_str}\n\n" - - # Write out low resolution sampling plane info - zoffsets_lr_str = " ".join(str(item) for item in self.zoffsets_lr) - - s += f"# Low sampling grid spacing = {self.ds_lr} m\n" - s += f"{self.postproc_name_lr}.Low.type = PlaneSampler\n" - s += f"{self.postproc_name_lr}.Low.num_points = {self.nx_lr} {self.ny_lr}\n" - s += f"{self.postproc_name_lr}.Low.origin = {self.xlow_lr:.4f} {self.ylow_lr:.4f} {self.zlow_lr:.4f}\n" # Round the float output - s += f"{self.postproc_name_lr}.Low.axis1 = {self.xdist_lr:.4f} 0.0 0.0\n" # Assume: axis1 oriented parallel to AMR-Wind x-axis - s += f"{self.postproc_name_lr}.Low.axis2 = 0.0 {self.ydist_lr:.4f} 0.0\n" # Assume: axis2 oriented parallel to AMR-Wind y-axis - s += f"{self.postproc_name_lr}.Low.normal = 0.0 0.0 1.0\n" - s += f"{self.postproc_name_lr}.Low.offsets = {zoffsets_lr_str}\n\n\n" - - s += f"# ---- High-res sampling parameters ----\n" - s += f"{self.postproc_name_hr}.output_format = netcdf\n" - s += f"{self.postproc_name_hr}.output_frequency = {self.output_frequency_hr}\n" - s += f"{self.postproc_name_hr}.fields = velocity # temperature tke\n" - s += f"{self.postproc_name_hr}.labels = {sampling_labels_hr_str}\n" - - # Write out high resolution sampling plane info - for turbkey in self.hr_domains: - wt_x = self.wts[turbkey]['x'] - wt_y = self.wts[turbkey]['y'] - wt_D = self.wts[turbkey]['D'] - if 'name' in self.wts[turbkey].keys(): - wt_name = self.wts[turbkey]['name'] - else: - wt_name = f'T{turbkey+1}' - sampling_name = f"High{wt_name}_inflow0deg" - nx_hr = self.hr_domains[turbkey]['nx_hr'] - ny_hr = self.hr_domains[turbkey]['ny_hr'] - xlow_hr = self.hr_domains[turbkey]['xlow_hr'] - ylow_hr = self.hr_domains[turbkey]['ylow_hr'] - zlow_hr = self.hr_domains[turbkey]['zlow_hr'] - xdist_hr = self.hr_domains[turbkey]['xdist_hr'] - ydist_hr = self.hr_domains[turbkey]['ydist_hr'] - zoffsets_hr = self.hr_domains[turbkey]['zoffsets_hr'] - zoffsets_hr_str = " ".join(str(item) for item in zoffsets_hr) - - s += f"\n# Turbine {wt_name} at (x,y) = ({wt_x}, {wt_y}), with D = {wt_D}, grid spacing = {self.ds_hr} m\n" - s += f"{self.postproc_name_hr}.{sampling_name}.type = PlaneSampler\n" - s += f"{self.postproc_name_hr}.{sampling_name}.num_points = {nx_hr} {ny_hr}\n" - s += f"{self.postproc_name_hr}.{sampling_name}.origin = {xlow_hr:.4f} {ylow_hr:.4f} {zlow_hr:.4f}\n" # Round the float output - s += f"{self.postproc_name_hr}.{sampling_name}.axis1 = {xdist_hr:.4f} 0.0 0.0\n" # Assume: axis1 oriented parallel to AMR-Wind x-axis - s += f"{self.postproc_name_hr}.{sampling_name}.axis2 = 0.0 {ydist_hr:.4f} 0.0\n" # Assume: axis2 oriented parallel to AMR-Wind y-axis - s += f"{self.postproc_name_hr}.{sampling_name}.normal = 0.0 0.0 1.0\n" - s += f"{self.postproc_name_hr}.{sampling_name}.offsets = {zoffsets_hr_str}\n" - - - if outdir is None: - print(s) - else: - outfile = os.path.join(outdir, 'sampling_config.i') - if not os.path.exists(outdir): - print(f'Path {outdir} does not exist. Creating it') - os.makedirs(outdir) - if os.path.isfile(outfile): - raise FileExistsError(f"{str(outfile)} already exists! Aborting...") - - with open(outfile,"w") as out: - out.write(s) - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py deleted file mode 100644 index 54f9c81f7f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/FASTFarmCaseCreation.py +++ /dev/null @@ -1,2244 +0,0 @@ -import pandas as pd -import numpy as np -import os, sys, shutil -import subprocess -import numpy as np -import xarray as xr - -from pyFAST.input_output import FASTInputFile, FASTOutputFile, TurbSimFile, VTKFile -from pyFAST.fastfarm import writeFastFarm, fastFarmTurbSimExtent, plotFastFarmSetup -from pyFAST.fastfarm.TurbSimCaseCreation import TSCaseCreation, writeTimeSeriesFile - -def cosd(t): return np.cos(np.deg2rad(t)) -def sind(t): return np.sin(np.deg2rad(t)) -def checkIfExists(f): - if os.path.isfile(f): - return True - else: - print(f'File {f} does not exist.') - return False - -def shutilcopy2_untilSuccessful(src, dst): - shutil.copy2(src, dst) - if not checkIfExists(dst): - print(f'File {dst} not created. Trying again.\n') - shutilcopy2_untilSuccessful(src,dst) - -def getMultipleOf(val, multipleof): - ''' - Get integer multiple of a quantity. - The val/multipleof quantity can be within numerical error of an integer - and so additional care must be take - ''' - valmult = int(round(val/multipleof,6))*multipleof - return round(valmult, 4) - -def modifyProperty(fullfilename, entry, value): - ''' - Modify specific properties of certain files - - Inputs - ====== - fullfilename: str - Full filepath of the file. - entry: str - Entry in the input file to be modified - value: - Value to go on the entry. No checks are made - - ''' - # Open the proper file - f = FASTInputFile(fullfilename) - # Change the actual value - f[entry] = value - # Save the new file - f.write(fullfilename) - return - - - -class FFCaseCreation: - - def __init__(self, - path, - wts, - tmax, - zbot, - vhub, - shear, - TIvalue, - inflow_deg, - dt_high_les = None, - ds_high_les = None, - extent_high = None, - dt_low_les = None, - ds_low_les = None, - extent_low = None, - ffbin = None, - mod_wake = 1, - yaw_init = None, - ADmodel = None, - EDmodel = None, - nSeeds = 6, - seedValues = None, - LESpath = None, - sweepWakeSteering = False, - sweepYawMisalignment = False, - refTurb_rot = 0, - verbose = 0): - ''' - Full setup of a FAST.Farm simulations, can create setups for LES- or TurbSim-driven scenarios. - - Inputs - ------ - path: str - Full path for the target case directory - wts: dictionary - Wind farm layout and turbine parameters in dictionary form - tmax: scalar - Max simulation time given in seconds - vhub: list of scalars or single scalar - Wind speeds at hub height to sweep on. Accepts a list or single value - shear: list of scalars or single scalar - Shear values (power-law exponents) to sweep on. Accepts a list or single value - TIvalue: list of scalars or single scalar - TI values at hub height to sweep on. Accepts a list or single value - inflow_deg: list of scalars or single scalar - Inflow angles to sweep on. Accepts a list or single value - dt_high_les: scalar - Time step of the desired high-resolution box. If LES boxes given, should - match LES box; otherwise desired TurbSim boxes. Default values as given in the - modeling guidances are used if none is given - ds_high_les: scalar - Grid resolution of the desired high-resolution box. If LES boxes given, should - match LES box; otherwise desired TurbSim boxes. Default values as given in the - modeling guidances are used if none is given - dt_low_les: scalar - Time step of the desired low-resolution box. If LES boxes given, should match - match LES box; otherwise desired TurbSim boxes. Default values as given in the - modeling guidances are used if none is given - ds_low_les: scalar - Grid resolution of the desired low-resolution box. If LES boxes given, should - match LES box; otherwise desired TurbSim boxes. Default values as given in the - modeling guidances are used if none is given - ff_bin: str - Full path of the FAST.Farm binary to be used. If not specified, the one available - in the $PATH will be used - mod_wake: int - Wake model to be used on the computation of high- and low-res boxes temporal and - spatial resolutions if those are not specified - yaw_init: list of scalars or single scalar - List of yaw to sweep on. Given as a 2-D array if len(inflow_deg)>1. One row of yaw - per wind direction given in inflow_deg. Each row has nTurbines values - ADmodel: list of strings - List of AeroDyn/AeroDisk models to use for each case - EDmodel: list of strings - List of ElastoDym/SimplifiedElastoDyn models to use for each case - nSeeds: int - Number of seeds used for TurbSim simulations. If changing this value, give seedValues - seedValues: list of int - Seed value for each seed of requested TurbSim simulations if nSeeds!=6 - LESpath: str or list of strings - Full path of the LES data, if driven by LES. If None, the setup will be for TurbSim inflow. - LESpath can be a single path, or a list of paths of the same length as the sweep in conditions. - For example, if TIvalue=[8,10,12], then LESpath can be 3 paths, related to each condition. - sweepWakeSteering: bool - Whether or not to perform a sweep with wake steering - sweepYawMisalignment: bool - Whether or not to perform a sweep with and without yaw misalignment perturbations - refTurb_rot: int - Index of reference turbine which the rotation of the farm will occur. Default is 0, the first one. - Not fully tested. - verbose: int - Verbosity level, given as integers <5 - - ''' - - self.path = path - self.wts = wts - self.tmax = tmax - self.zbot = zbot - self.vhub = vhub - self.shear = shear - self.TIvalue = TIvalue - self.inflow_deg = inflow_deg - self.dt_high_les = dt_high_les - self.ds_high_les = ds_high_les - self.dt_low_les = dt_low_les - self.ds_low_les = ds_low_les - self.extent_low = extent_low - self.extent_high = extent_high - self.ffbin = ffbin - self.mod_wake = mod_wake - self.yaw_init = yaw_init - self.ADmodel = ADmodel - self.EDmodel = EDmodel - self.nSeeds = nSeeds - self.LESpath = LESpath - self.sweepWS = sweepWakeSteering - self.sweepYM = sweepYawMisalignment - self.seedValues = seedValues - self.refTurb_rot = refTurb_rot - self.verbose = verbose - self.mod_wake = mod_wake - self.attempt = 1 - - - if self.verbose>0: print(f'Checking inputs...', end='\r') - self._checkInputs() - if self.verbose>0: print(f'Checking inputs... Done.') - - - if self.verbose>0: print(f'Setting rotor parameters...', end='\r') - self._setRotorParameters() - if self.verbose>0: print(f'Setting rotor parameters... Done.') - - - if self.verbose>0: print(f'Creating auxiliary arrays for all conditions and cases...', end='\r') - self.createAuxArrays() - if self.verbose>0: print(f'Creating auxiliary arrays for all conditions and cases... Done.') - - - if self.verbose>0: print(f'Creating directory structure and copying files...', end='\r') - self._create_dir_structure() - if self.verbose>0: print(f'Creating directory structure and copying files... Done.') - - - def __repr__(self): - s = f'Requested parameters:\n' - s += f' - Case path: {self.path}\n' - s += f' - Wake model: {self.mod_wake} (1:Polar; 2:Curl; 3:Cartesian)\n' - if self.LESpath is None: - s += f' - Number of TurbSim seeds: {self.nSeeds}\n' - s += f' - End time: {self.tmax} s\n' - s += f'Requested farm:\n' - s += f' - Number of turbines: {self.nTurbines}\n' - s += f' - Diameter: {self.D} m\n' - s += f' - Hub height: {self.zhub} m\n' - s += f' - Max chord: {self.cmax} m\n' - s += f' - Max excitation freq: {self.fmax:.3f} Hz\n' - s += f' - Meandering constant: {self.Cmeander}\n' - s += f'Requested sweeps:\n' - s += f' - Wind speeds at hub height (m/s): {self.vhub}\n' - s += f' - Shear exponent: {self.shear}\n' - s += f' - TI (%): {self.TIvalue}\n' - s += f'\nCase details:\n' - s += f' - Number of conditions: {self.nConditions}\n' - for c in self.condDirList: - s += f" {c}\n" - s += f' - Number of cases for each condition: {self.nCases}\n' - if self.nCases < 11: - for c in self.caseDirList: - s += f" {c}\n" - else: - for c in self.caseDirList[:5]: - s += f" {c}\n" - s += f" ...\n" - for c in self.caseDirList[-5:]: - s += f" {c}\n" - s += f"\n\n" - - - if self.LESpath is None: - s += f'Turbulence boxes: TurbSim\n' - s += f'TurbSim turbulence boxes details:\n' - else: - s += f'Turbulence boxes: LES\n' - s += f'LES turbulence boxes details:\n' - s += f' Path: {self.LESpath}\n' - - - if self.TSlowBoxFilesCreatedBool or self.LESpath is not None: - s += f' Low-resolution domain: \n' - s += f' - ds low: {self.ds_low_les} m\n' - s += f' - dt low: {self.dt_low_les} s\n' - s += f' - Extent of low-res box (in D): xmin = {self.extent_low[0]}, xmax = {self.extent_low[1]}, ' - s += f'ymin = {self.extent_low[2]}, ymax = {self.extent_low[3]}, zmax = {self.extent_low[4]}\n' - else: - s += f'Low-res boxes not created yet.\n' - - - if self.TShighBoxFilesCreatedBool or self.LESpath is not None: - s += f' High-resolution domain: \n' - s += f' - ds high: {self.ds_high_les} m\n' - s += f' - dt high: {self.dt_high_les} s\n' - s += f' - Extent of high-res boxes: {self.extent_high} D total\n' - else: - s += f'High-res boxes not created yet.\n' - s += f"\n" - - return s - - - def _checkInputs(self): - - # Create case path is doesn't exist - if not os.path.exists(self.path): - os.makedirs(self.path) - - # Check the wind turbine dict - if not isinstance(self.wts,dict): - raise ValueError (f'`wts` needs to be a dictionary with the following entries for each turbine: x, y, z, D, zhub, cmax, fmax, Cmeander.') - self.nTurbines = len(self.wts) - self.D = self.wts[0]['D'] - self.zhub = self.wts[0]['zhub'] - self.cmax = self.wts[0]['cmax'] - self.fmax = self.wts[0]['fmax'] - self.Cmeander = self.wts[0]['Cmeander'] - - # Check values of each turbine - for t in range(self.nTurbines): - t_x = self.wts[t]['x'] - t_y = self.wts[t]['y'] - t_z = self.wts[t]['z'] - t_D = self.wts[t]['D'] - t_zhub = self.wts[t]['zhub'] - t_cmax = self.wts[t]['cmax'] - t_fmax = self.wts[t]['fmax'] - t_Cmeander = self.wts[t]['Cmeander'] - if t_D != self.D: - raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different diamenter.') - if t_zhub != self.zhub: - raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different hub height.') - if t_cmax != self.cmax: - raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different max chord.') - if t_fmax != self.fmax: - raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different max excitation frequency.') - if t_Cmeander != self.Cmeander: - raise ValueError(f'Different turbines are not currently supported. Turbine {t+1} has a different meandering constant.') - - if not isinstance(t_x,(float,int)): - raise ValueError (f'The `x` value for the turbine {t+1} should be an integer or float. Received {t_x}.') - if not isinstance(t_y,(float,int)): - raise ValueError (f'The `y` value for the turbine {t+1} should be an integer or float. Received {t_y}.') - if not isinstance(t_z,(float,int)): - raise ValueError (f'The `z` value for the turbine {t+1} should be an integer or float. Received {t_z}.') - if not isinstance(t_D,(float,int)): - raise ValueError (f'The `D` value for the turbine {t+1} should be an integer or float. Received {t_D}.') - if not isinstance(t_zhub,(float,int)): - raise ValueError (f'The `zhub` value for the turbine {t+1} should be an integer or float. Received {t_zhub}.') - - # Check general variables - if self.cmax <= 0: raise ValueError('cmax cannot be negative') - if self.fmax <= 0: raise ValueError('fmax cannot be negative') - if self.Cmeander <= 0: raise ValueError('Cmeander cannot be negative') - if self.tmax <= 0: raise ValueError('A positive tmax should be requested') - if self.zbot <= 0: raise ValueError('zbot should be greater than 0 (recommended 1)') - - # Ensure quantities are list - self.vhub = [self.vhub] if isinstance(self.vhub,(float,int)) else self.vhub - self.shear = [self.shear] if isinstance(self.shear,(float,int)) else self.shear - self.TIvalue = [self.TIvalue] if isinstance(self.TIvalue,(float,int)) else self.TIvalue - self.inflow_deg = [self.inflow_deg] if isinstance(self.inflow_deg,(float,int)) else self.inflow_deg - - # Fill turbine parameters arrays if not given - if self.yaw_init is None: - yaw = np.ones((1,self.nTurbines))*0 - self.yaw_init = np.repeat(yaw, len(self.inflow_deg), axis=0) - - # Check TI values if given in percent - for t in self.TIvalue: - if t<0: raise ValueError(f'TI cannot be negative. Received {t}.') - if t<1: raise ValueError(f'TI should be given in percentage (e.g. "10" for a 10% TI). Received {t}.') - - # Set domain extents defaults if needed - default_extent_low = [3,6,3,3,2] - default_extent_high = 1.2 # total extent, half of that to each side. - if self.extent_low is None: - self.extent_low = default_extent_low - if self.extent_high is None: - self.extent_high = default_extent_high - - # Check domain extents - if not (np.array(self.extent_low)>=0).all(): - raise ValueError(f'The array for low-res box extents should be given with positive values') - if not isinstance(self.extent_high, (float,int)): - raise ValueError(f'The extent_high should be a scalar') - if self.extent_high<=0: - raise ValueError(f'The extent of high boxes should be positive') - if self.extent_high<1: - raise ValueError(f'The extent of high boxes is not enough to cover the rotor diameter. '\ - 'The extent high is given as the total extent, and it needs to be greater than 1.') - - - # Check the FAST.Farm binary - if self.ffbin is None: - self.ffbin = shutil.which('FAST.Farm') - if not self.ffbin: - raise ValueError(f'No FAST.Farm binary was given and none could be found in $PATH.') - if self.verbose>1: - print('WARNING: No FAST.Farm binary has been given. Using {self.ffbin}') - elif not os.path.isfile(self.ffbin): - raise ValueError (f'The FAST.Farm binary given does not exist.') - - - # Check turbine conditions arrays for consistency - if len(self.inflow_deg) != len(self.yaw_init): - raise ValueError(f'One row for each inflow angle should be given in yaw_init. '\ - f'Currently {len(self.inflow_deg)} inflow angle(s) and {len(self.yaw_init)} yaw entrie(s)') - if self.ADmodel is None: - self.ADmodel = np.tile(['ADyn'],(1,self.nTurbines)) - if self.EDmodel is None: - self.EDmodel = np.tile(['FED'],(1,self.nTurbines)) - if np.shape(self.ADmodel) != np.shape(self.EDmodel): - raise ValueError('Every case should have the aerodynamic and elastic model selected. The number of cases '\ - '(lines) in `ADmodel` and `EDmodel` should be the same') - if self.nTurbines != np.shape(self.ADmodel)[1]: - raise ValueError(f'The number of turbines in wts ({len(self.wts)}) should match the number of turbines '\ - f'in the ADmodel and EDmodel arrays ({np.shape(self.ADmodel)[1]})') - - # Check on seed parameters - if not isinstance(self.nSeeds,int): - raise ValueError(f'An integer number of seeds should be requested. Got {self.nSeeds}.') - if self.nSeeds > 30: - raise ValueError(f'Number of seeds requested is larger than 30. For the case of {self.nSeeds} seeds, '\ - f'pass seedValues as a {self.nSeeds}-sized array of scalars.') - if self.seedValues is None: - self.seedValues = [2318573, 122299, 123456, 389432, -432443, 9849898, 432425, 894832, 849324, 678095, - 1235456, 435342, 897023, 423800, -898881, 2988900, 798911, 482391, 892111, 899190, - 7693202, 587924, 890090, 435646, -454899, -785138, -78564, -17944, -99021, 389432] - self.seedValues = self.seedValues[:self.nSeeds] - if len(self.seedValues) != self.nSeeds: - raise ValueError(f'The array seedValues has been passed, but its length does not correspond '\ - f'to the number of seeds requested.') - - # Check LES parameters - if self.LESpath is None: - self.inflowStr = 'TurbSim' - else: - if isinstance(self.LESpath,str): self.LESpath = [self.LESpath]*len(self.vhub) - self.inflowStr = 'LES' - for p in self.LESpath: - if not os.path.isdir(p): - raise ValueError (f'The LES path {p} does not exist') - # LES is requested, so domain limits must be given - if None in (self.dt_high_les, self.ds_high_les, self.dt_low_les, self.ds_low_les): - raise ValueError (f'An LES-driven case was requested, but one or more grid parameters were not given. '\ - 'Set `dt_high_les`, `ds_high_les`, `dt_low_les`, and `ds_low_les` based on your LES boxes.') - - - # Check the wake model (1:Polar; 2:Curl; 3:Cartesian) - if self.mod_wake not in [1,2,3]: - raise ValueError(f'Wake model `mod_wake` should be 1 (Polar), 2 (Curl), or 3 (Cartesian). Received {self.mod_wake}.') - - - # Check the ds and dt for the high- and low-res boxes. If not given, call the - # AMR-Wind auxiliary function with dummy domain limits. - if None in (self.dt_high_les, self.ds_high_les, self.dt_low_les, self.ds_low_les): - mod_wake_str = ['','polar', 'curled', 'cartesian'] - print(f'WARNING: One or more temporal or spatial resolution for low- and high-res domains were not given.') - print(f' Estimated values for {mod_wake_str[self.mod_wake]} wake model shown below.') - self._determine_resolutions_from_dummy_amrwind_grid() - - # Check the domain extents - if self.dt_low_les%(self.dt_high_les-1e-15) > 1e-12: - raise ValueError(f'The temporal resolution dT_Low should be a multiple of dT_High') - if self.dt_low_les < self.dt_high_les: - raise ValueError(f'The temporal resolution dT_High should not be greater than dT_Low on the LES side') - if self.ds_low_les < self.ds_high_les: - raise ValueError(f'The grid resolution dS_High should not be greater than dS_Low on the LES side') - - - - # Check the reference turbine for rotation - if self.refTurb_rot >= self.nTurbines: - raise ValueError(f'The index for the reference turbine for the farm to be rotated around is greater than the number of turbines') - - # Set aux variable - self.templateFilesCreatedBool = False - self.TSlowBoxFilesCreatedBool = False - self.TShighBoxFilesCreatedBool = False - - - - def _determine_resolutions_from_dummy_amrwind_grid(self): - - from pyFAST.fastfarm.AMRWindSimulation import AMRWindSimulation - - # Create values and keep variable names consistent across interfaces - dummy_dt = 0.1 - dummy_ds = 1 - prob_lo = (-10005, -10005, 0) # The 5 m offset is such that we - prob_hi = ( 10005, 10005, 1000) # have a cell center at (0,0) - n_cell = ((prob_hi[0]-prob_lo[0])/dummy_ds, - (prob_hi[1]-prob_lo[1])/dummy_ds, - (prob_hi[2]-prob_lo[2])/dummy_ds) - max_level = 0 - incflo_velocity_hh = (max(self.vhub), 0, 0) - buffer_lr = self.extent_low - buffer_hr = self.extent_high - - amr = AMRWindSimulation(self.wts, dummy_dt, prob_lo, prob_hi, - n_cell, max_level, incflo_velocity_hh, - buffer_lr = self.extent_low, - buffer_hr = self.extent_high, - mod_wake = self.mod_wake) - - print(f' High-resolution: ds: {amr.ds_hr} m, dt: {amr.dt_high_les} s') - print(f' Low-resolution: ds: {amr.ds_lr} m, dt: {amr.dt_low_les} s\n') - print(f'WARNING: If the above values are too fine or manual tuning is warranted, specify them manually.') - print(f' To do that, specify, e.g., `dt_high_les = {2*amr.dt_high_les}` to the call to `FFCaseCreation`.') - print(f' `ds_high_les = {2*amr.ds_high_les}`') - print(f' `dt_low_les = {2*amr.dt_low_les}`') - print(f' `ds_low_les = {2*amr.ds_low_les}`') - print(f' If the values above are okay, you can safely ignore this warning.\n') - - self.dt_high_les = amr.dt_high_les - self.ds_high_les = amr.dt_high_les - self.dt_low_les = amr.dt_low_les - self.ds_low_les = amr.dt_low_les - - - - - def _create_dir_structure(self): - # Create directory structure CondXX_*/CaseYY_*/Seed_Z/TurbSim; and CondXX_*/Seed_Y - # Also saves the dir structure on array to write on SLURM script in the future. - condDirList = [] - caseDirList_ = [] - for cond in range(self.nConditions): - # Recover information about current condition for directory naming purposes - Vhub_ = self.allCond['vhub' ].isel(cond=cond).values - shear_ = self.allCond['shear' ].isel(cond=cond).values - tivalue_ = self.allCond['TIvalue' ].isel(cond=cond).values - - # Set current path name string - condStr = f'Cond{cond:02d}_v{Vhub_:04.1f}_PL{shear_}_TI{tivalue_}' - condDirList.append(condStr) - condPath = os.path.join(self.path, condStr) - - for case in range(self.nCases): - # Recover information about current case for directory naming purposes - inflow_deg_ = self.allCases['inflow_deg' ].sel(case=case).values - #wakeSteering_ = self.allCases['wakeSteering' ].sel(case=case).values - misalignment_ = self.allCases['misalignment' ].sel(case=case).values - nADyn_ = self.allCases['nFullAeroDyn' ].sel(case=case).values - nFED_ = self.allCases['nFulllElastoDyn'].sel(case=case).values - yawCase_ = self.allCases['yawCase' ].sel(case=case).values - - # Set current path name string. The case is of the following form: Case00_wdirp10_WSfalse_YMfalse_12fED_12ADyn - ndigits = len(str(self.nCases)) - caseStr = f"Case{case:0{ndigits}d}_wdir{f'{int(inflow_deg_):+03d}'.replace('+','p').replace('-','m')}" - # Add standard sweeps to the case name - if self.sweepWS: - caseStr += f"_WS{str(wakeSteering_).lower()}" - if self.sweepYM: - caseStr += f"_YM{str(misalignment_).lower()}" - if self.sweepEDmodel: - caseStr += f"_{nFED_}fED" - if self.sweepADmodel: - caseStr += f"_{nADyn_}ADyn" - - #caseStr = f"Case{case:0{ndigits}d}_wdir{f'{int(inflow_deg_):+03d}'.replace('+','p').replace('-','m')}"\ - # f"_WS{str(wakeSteering_).lower()}_YM{str(misalignment_).lower()}"\ - # f"_{nFED_}fED_{nADyn_}ADyn" - # If sweeping on yaw, then add yaw case to dir name - if len(np.unique(self.allCases.yawCase)) > 1: - caseStr += f"_yawCase{yawCase_}" - - caseDirList_.append(caseStr) - casePath = os.path.join(condPath, caseStr) - if not os.path.exists(casePath): os.makedirs(casePath) - - for seed in range(self.nSeeds): - seedPath = os.path.join(casePath, f'Seed_{seed}') - if not os.path.exists(seedPath): os.makedirs(seedPath) - turbsimPath = os.path.join(seedPath, 'TurbSim') - if not os.path.exists(turbsimPath): os.makedirs(turbsimPath) - - # The following loop creates the turbsim files for low box. That should really only happen if inflowStr is `TurbSim`. - # It does happen regardless because when the inflow is LES, it will be later on deleted. - for seed in range(self.nSeeds): - seedPath = os.path.join(condPath, f'Seed_{seed}') - if not os.path.exists(seedPath): os.makedirs(seedPath) - - # Get rid of duplicate entries due to the nature of the loop (equiv to only getting the first nCases entries) - self.condDirList = condDirList - self.caseDirList = sorted(list(set(caseDirList_))) - assert self.caseDirList==caseDirList_[:self.nCases] - - - - def copyTurbineFilesForEachCase(self, writeFiles=True): - - if not self.templateFilesCreatedBool: - raise SyntaxError('Template files not set. Call `setTemplateFilename` before calling this function.') - - # Loops on all conditions/cases creating DISCON and *Dyn files - for cond in range(self.nConditions): - print(f'Processing condition {self.condDirList[cond]}') - for case in range(self.nCases): - print(f' Processing case {self.caseDirList[case]}', end='\r') - currPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case]) - - # Recover info about the current CondXX_*/CaseYY_* - Vhub_ = self.allCond.sel(cond=cond)['vhub'].values - - # Update parameters to be changed in the HydroDyn files - if self.HydroDynFile != 'unused': - self.HydroDynFile['WaveHs'] = self.bins.sel(wspd=Vhub_, method='nearest').WaveHs.values - self.HydroDynFile['WaveTp'] = self.bins.sel(wspd=Vhub_, method='nearest').WaveTp.values - self.HydroDynFile['WvHiCOffD'] = 2.0*np.pi/self.HydroDynFile['WaveTp'] - self.HydroDynFile['WvLowCOffS'] = 2.0*np.pi/self.HydroDynFile['WaveTp'] - if writeFiles: - self.HydroDynFile.write(os.path.join(currPath, self.HDfilename)) - - # Write updated DISCON - if writeFiles: - shutilcopy2_untilSuccessful(os.path.join(self.templatePath,self.controllerInputfilename), - os.path.join(currPath,self.controllerInputfilename)) - - # Depending on the controller, the controller input file might need to be in the same level as the .fstf input file. - # The ideal solution would be to give the full path to the controller input file, but we may not have control over - # the compilation process and it is likely that a very long string with the full path will get cut. So we need to - # give the relative path. We give the path as the current one, so here we create a link to ensure it will work - # regardless of how the controller was compiled. There is no harm in having this extra link even if it's not needed. - notepath = os.getcwd(); os.chdir(self.path) - for seed in range(self.nSeeds): - try: - src = os.path.join('../', self.controllerInputfilename) - dst = os.path.join(self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', self.controllerInputfilename) - if writeFiles: - os.symlink(src, dst) - except FileExistsError: - pass - os.chdir(notepath) - - # Write InflowWind files. For FAST.FARM, the IW file needs to be inside the Seed* directories. If running standalone openfast, - # it needs to be on the same level as the fst file. Here, we copy to both places so that the workflow is general - self.InflowWindFile['WindType'] = 3 - self.InflowWindFile['PropagationDir'] = 0 - self.InflowWindFile['Filename_BTS'] = '"./TurbSim"' - if writeFiles: - self.InflowWindFile.write( os.path.join(currPath,self.IWfilename)) - for seed in range(self.nSeeds): - self.InflowWindFile.write( os.path.join(currPath,f'Seed_{seed}',self.IWfilename)) - - - for t in range(self.nTurbines): - # Recover info about the current turbine in CondXX_*/CaseYY_ - yaw_deg_ = self.allCases.sel(case=case, turbine=t)['yaw'].values - yaw_mis_deg_ = self.allCases.sel(case=case, turbine=t)['yawmis'].values - ADmodel_ = self.allCases.sel(case=case, turbine=t)['ADmodel'].values - EDmodel_ = self.allCases.sel(case=case, turbine=t)['EDmodel'].values - - # Quickly check that yaw misaligned value is zero if case does not contain yaw misalignment - if self.allCases.sel(case=case, turbine=t)['misalignment'].values: - assert yaw_mis_deg_ != 0 - else: - assert yaw_mis_deg_ == 0 - - if EDmodel_ == 'FED': - # Update each turbine's ElastoDyn - self.ElastoDynFile['RotSpeed'] = self.bins.sel(wspd=Vhub_, method='nearest').RotSpeed.values - self.ElastoDynFile['BlPitch(1)'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values - self.ElastoDynFile['BlPitch(2)'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values - self.ElastoDynFile['BlPitch(3)'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values - - self.ElastoDynFile['NacYaw'] = yaw_deg_ + yaw_mis_deg_ - self.ElastoDynFile['BldFile1'] = self.ElastoDynFile['BldFile2'] = self.ElastoDynFile['BldFile3'] = f'"{self.bladefilename}"' - self.ElastoDynFile['TwrFile'] = f'"{self.towerfilename}"' - self.ElastoDynFile['Azimuth'] = round(np.random.uniform(low=0, high=360)) # start at a random value - if writeFiles: - if t==0: shutilcopy2_untilSuccessful(os.path.join(self.templatePath,self.bladefilename), os.path.join(currPath,self.bladefilename)) - if t==0: shutilcopy2_untilSuccessful(os.path.join(self.templatePath,self.towerfilename), os.path.join(currPath,self.towerfilename)) - self.ElastoDynFile.write(os.path.join(currPath,f'{self.EDfilename}{t+1}_mod.dat')) - - elif EDmodel_ == 'SED': - # Update each turbine's Simplified ElastoDyn - self.SElastoDynFile['RotSpeed'] = self.bins.sel(wspd=Vhub_, method='nearest').RotSpeed.values - self.SElastoDynFile['BlPitch'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values - - self.SElastoDynFile['BlPitch'] = self.bins.sel(wspd=Vhub_, method='nearest').BlPitch.values - self.SElastoDynFile['RotSpeed'] = self.bins.sel(wspd=Vhub_, method='nearest').RotSpeed.values - self.SElastoDynFile['NacYaw'] = yaw_deg_ + yaw_mis_deg_ - if writeFiles: - self.SElastoDynFile.write(os.path.join(currPath,f'{self.SEDfilename}{t+1}_mod.dat')) - - # Update each turbine's ServoDyn - self.ServoDynFile['YawNeut'] = yaw_deg_ + yaw_mis_deg_ - self.ServoDynFile['DLL_FileName'] = f'"{self.DLLfilepath}{t+1}.so"' - if writeFiles: - self.ServoDynFile.write( os.path.join(currPath,f'{self.SrvDfilename}{t+1}_mod.dat')) - - # Update each turbine's OpenFAST input - self.turbineFile['TMax'] = self.tmax - self.turbineFile['CompInflow'] = 1 # 1: InflowWind; 2: OpenFoam (fully coupled; not VTK input to FF) - - if EDmodel_ == 'FED': - self.turbineFile['CompElast'] = 1 # 1: full ElastoDyn; 2: full ElastoDyn + BeamDyn; 3: Simplified ElastoDyn - self.turbineFile['CompSub'] = 1 - self.turbineFile['CompHydro'] = 1 - self.turbineFile['EDFile'] = f'"./{self.EDfilename}{t+1}_mod.dat"' - elif EDmodel_ == 'SED': - self.turbineFile['CompElast'] = 3 # 1: full ElastoDyn; 2: full ElastoDyn + BeamDyn; 3: Simplified ElastoDyn - self.turbineFile['CompSub'] = 0 # need to be disabled with SED - self.turbineFile['CompHydro'] = 0 # need to be disabled with SED - self.turbineFile['IntMethod'] = 3 - self.turbineFile['EDFile'] = f'"./{self.SEDfilename}{t+1}_mod.dat"' - self.turbineFile['BDBldFile(1)'] = f'"{self.BDfilepath}"' - self.turbineFile['BDBldFile(2)'] = f'"{self.BDfilepath}"' - self.turbineFile['BDBldFile(3)'] = f'"{self.BDfilepath}"' - self.turbineFile['InflowFile'] = f'"./{self.IWfilename}"' - if ADmodel_ == 'ADyn': - self.turbineFile['CompAero'] = 2 # 1: AeroDyn v14; 2: AeroDyn v15; 3: AeroDisk - self.turbineFile['AeroFile'] = f'"{self.ADfilepath}"' - elif ADmodel_ == 'ADsk': - # If you use AeroDisk with ElastoDyn, set the blade DOFs to false. - self.turbineFile['CompAero'] = 3 # 1: AeroDyn v14; 2: AeroDyn v15; 3: AeroDisk - self.turbineFile['AeroFile'] = f'"{self.ADskfilepath}"' - if writeFiles: - if t==0: shutilcopy2_untilSuccessful(self.coeffTablefilepath, os.path.join(currPath,self.coeffTablefilename)) - self.turbineFile['ServoFile'] = f'"./{self.SrvDfilename}{t+1}_mod.dat"' - self.turbineFile['HydroFile'] = f'"./{self.HDfilename}"' - self.turbineFile['SubFile'] = f'"{self.SubDfilepath}"' - self.turbineFile['MooringFile'] = f'"unused"' - self.turbineFile['IceFile'] = f'"unused"' - self.turbineFile['TStart'] = 0 # start saving openfast output from time 0 (to see transient) - self.turbineFile['OutFileFmt'] = 3 # 1: .out; 2: .outb; 3: both - - if writeFiles: - self.turbineFile.write( os.path.join(currPath,f'{self.turbfilename}{t+1}.fst')) - - print(f'Done processing condition {self.condDirList[cond]} ') - - # Some files, for some reason, do not get copied properly. This leads to a case crashing due to missing file. - # Let's check if all files have been indded properly copied. If not, the copyTurbineFilesForEachCase will be - # called again until it does (up to 5 times) - if writeFiles: - if self._were_all_turbine_files_copied() == False and self.attempt<=5: - self.attempt += 1 - print(f'Not all files were copied successfully. Trying again. Attempt number {self.attempt}.') - self.copyTurbineFilesForEachCase() - elif self.attempt > 5: - print(f"WARNING: Not all turbine files were copied successfully after 5 tries.") - print(f" Check them manually. This shouldn't occur. Consider finding ") - print(f" and fixing the bug and submitting a PR.") - else: - print(f'Passed check: all files were copied successfully.') - - - def _were_all_turbine_files_copied(self): - ''' - Check if all files created in copyTurbineFilesForEachCase exist - ''' - - for cond in range(self.nConditions): - for case in range(self.nCases): - currPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case]) - - _ = checkIfExists(os.path.join(currPath, self.HDfilename)) - if not _: return False - _ = checkIfExists(os.path.join(currPath,self.controllerInputfilename)) - if not _: return False - _ = checkIfExists( os.path.join(currPath,self.IWfilename)) - if not _: return False - - for seed in range(self.nSeeds): - _ = checkIfExists(os.path.join(currPath,f'Seed_{seed}',self.IWfilename)) - if not _: return False - - for t in range(self.nTurbines): - ADmodel_ = self.allCases.sel(case=case, turbine=t)['ADmodel'].values - EDmodel_ = self.allCases.sel(case=case, turbine=t)['EDmodel'].values - if EDmodel_ == 'FED': - _ = checkIfExists(os.path.join(currPath,self.bladefilename)) - if not _: return False - _ = checkIfExists(os.path.join(currPath,self.towerfilename)) - if not _: return False - _ = checkIfExists(os.path.join(currPath,f'{self.EDfilename}{t+1}_mod.dat')) - if not _: return False - - elif EDmodel_ == 'SED': - _ = checkIfExists(os.path.join(currPath,f'{self.SEDfilename}{t+1}_mod.dat')) - if not _: return False - - _ = checkIfExists(os.path.join(currPath,f'{self.SrvDfilename}{t+1}_mod.dat')) - if not _: return False - - if ADmodel_ == 'ADsk': - _ = checkIfExists(os.path.join(currPath,self.coeffTablefilename)) - if not _: return False - - _ = checkIfExists(os.path.join(currPath,f'{self.turbfilename}{t+1}.fst')) - if not _: return False - - # If we get to this point, all files exist - return True - - - - def setTemplateFilename(self, - templatePath=None, - EDfilename=None, - SEDfilename=None, - HDfilename=None, - SrvDfilename=None, - ADfilename=None, - ADskfilename=None, - SubDfilename=None, - IWfilename=None, - BDfilepath=None, - bladefilename=None, - towerfilename=None, - turbfilename=None, - libdisconfilepath=None, - controllerInputfilename=None, - coeffTablefilename=None, - turbsimLowfilepath=None, - turbsimHighfilepath=None, - FFfilename=None): - ''' - - *filename: str - The filename of the current OpenFAST submodule, no complete path. Assumes it is - inside `templatePath` - *filepath: str - Complete path of the file. May or may not be inside `templatePath` - - ''' - - self.EDfilename = "unused"; self.EDfilepath = "unused" - self.SEDfilename = "unused"; self.SEDfilepath = "unused" - self.HDfilename = "unused"; self.HDfilepath = "unused" - self.SrvDfilename = "unused"; self.SrvDfilepath = "unused" - self.ADfilename = "unused"; self.ADfilepath = "unused" - self.ADskfilename = "unused"; self.ADskfilepath = "unused" - self.SubDfilename = "unused"; self.SubDfilepath = "unused" - self.IWfilename = "unused"; self.IWfilepath = "unused" - self.BDfilepath = "unused"; self.BDfilename = "unused" - self.bladefilename = "unused"; self.bladefilepath = "unused" - self.towerfilename = "unused"; self.towerfilepath = "unused" - - - if templatePath is None: - print(f'--- WARNING: No template files given. Complete setup will not be possible') - return - - if not os.path.isdir(templatePath): - raise ValueError (f'Template path {templatePath} does not seem to exist.') - - self.templatePath = templatePath - - - def checkIfExists(f): - if os.path.basename(f) == 'unused': - return - if not os.path.isfile(f): - raise ValueError (f'File {f} does not exist.') - - if EDfilename is not None and EDfilename != 'unused': - if not EDfilename.endswith('.T'): - raise ValueError (f'Name the template ED file "*.T.dat" and give "*.T" as `EDfilename`') - self.EDfilepath = os.path.join(self.templatePath,f"{EDfilename}.dat") - checkIfExists(self.EDfilepath) - self.EDfilename = EDfilename - - if SEDfilename is not None and SEDfilename != 'unused': - if not SEDfilename.endswith('.T'): - raise ValueError (f'Name the template SED file "*.T.dat" and give "*.T" as `SEDfilename`') - self.SEDfilepath = os.path.join(self.templatePath,f"{SEDfilename}.dat") - checkIfExists(self.SEDfilepath) - self.SEDfilename = SEDfilename - - if HDfilename is not None and HDfilename != 'unused': - if not HDfilename.endswith('.dat'): - raise ValueError (f'The HydroDyn filename should end in `.dat`.') - self.HDfilepath = os.path.join(self.templatePath,HDfilename) - checkIfExists(self.HDfilepath) - self.HDfilename = HDfilename - - if SrvDfilename is not None and SrvDfilename != 'unused': - if not SrvDfilename.endswith('.T'): - raise ValueError (f'Name the template ServoDyn file "*.T.dat" and give "*.T" as `SrvDfilename`') - self.SrvDfilepath = os.path.join(self.templatePath,f"{SrvDfilename}.dat") - checkIfExists(self.SrvDfilepath) - self.SrvDfilename = SrvDfilename - - if ADfilename is not None and ADfilename != 'unused': - if not ADfilename.endswith('.dat'): - raise ValueError (f'The AeroDyn filename should end in `.dat`.') - self.ADfilepath = os.path.join(self.templatePath,ADfilename) - checkIfExists(self.ADfilepath) - self.ADfilename = ADfilename - - if ADskfilename is not None and ADskfilename != 'unused': - if not ADskfilename.endswith('.dat'): - raise ValueError (f'The AeroDisk filename should end in `.dat`.') - self.ADskfilepath = os.path.join(self.templatePath,ADskfilename) - checkIfExists(self.ADskfilepath) - self.ADskfilename = ADskfilename - - if SubDfilename is not None and SubDfilename != 'unused': - if not SubDfilename.endswith('.dat'): - raise ValueError (f'The SubDyn filename should end in `.dat`.') - self.SubDfilepath = os.path.join(self.templatePath,SubDfilename) - checkIfExists(self.SubDfilepath) - self.SubDfilename = SubDfilename - - if IWfilename is not None and IWfilename != 'unused': - if not IWfilename.endswith('.dat'): - raise ValueError (f'The InflowWind filename should end in `.dat`.') - self.IWfilepath = os.path.join(self.templatePath,IWfilename) - checkIfExists(self.IWfilepath) - self.IWfilename = IWfilename - - if BDfilepath is not None and BDfilepath != 'unused': - if not BDfilepath.endswith('.dat'): - raise ValueError (f'The BeamDyn filename should end in `.dat`.') - self.BDfilepath = BDfilepath - checkIfExists(self.BDfilepath) - - if bladefilename is not None: - if not bladefilename.endswith('.dat'): - raise ValueError (f'The blade filename should end in `.dat`.') - self.bladefilepath = os.path.join(self.templatePath,bladefilename) - checkIfExists(self.bladefilepath) - self.bladefilename = bladefilename - - if towerfilename is not None: - if not towerfilename.endswith('.dat'): - raise ValueError (f'The tower filename should end in `.dat`.') - self.towerfilepath = os.path.join(self.templatePath,towerfilename) - checkIfExists(self.towerfilepath) - self.towerfilename = towerfilename - - if turbfilename is not None: - if not turbfilename.endswith('.T'): - raise ValueError (f'Name the template turbine file "*.T.fst" and give "*.T" as `turbfilename`') - self.turbfilepath = os.path.join(self.templatePath,f"{turbfilename}.fst") - checkIfExists(self.turbfilepath) - self.turbfilename = turbfilename - - if libdisconfilepath is not None: - if not libdisconfilepath.endswith('.so'): - raise ValueError (f'The libdiscon `libdisconfilepath` file should end in "*.so"') - self.libdisconfilepath = libdisconfilepath - checkIfExists(self.libdisconfilepath) - self._create_copy_libdiscon() - - if controllerInputfilename is not None: - if not controllerInputfilename.endswith('.IN'): - print(f'--- WARNING: The controller input file typically ends in "*.IN". Currently {controllerInputfilename}. Double check.') - self.controllerInputfilepath = os.path.join(self.templatePath, controllerInputfilename) - checkIfExists(self.controllerInputfilepath) - self.controllerInputfilename = controllerInputfilename - - if coeffTablefilename is not None and coeffTablefilename != 'unused': - if not coeffTablefilename.endswith('.csv'): - raise ValueError (f'The performance table `coeffTablefilename` file should end in "*.csv"') - self.coeffTablefilepath = os.path.join(templatePath, coeffTablefilename) - checkIfExists(self.coeffTablefilepath) - self.coeffTablefilename = coeffTablefilename - - if turbsimLowfilepath is not None: - if not turbsimLowfilepath.endswith('.inp'): - raise ValueError (f'TurbSim file input for low-res box `turbsimLowfilepath` should end in ".inp".') - self.turbsimLowfilepath = turbsimLowfilepath - checkIfExists(self.turbsimLowfilepath) - - if turbsimHighfilepath is not None: - if not turbsimHighfilepath.endswith('.inp'): - raise ValueError (f'TurbSim file input for high-res box `turbsimHighfilepath` should end in ".inp".') - self.turbsimHighfilepath = turbsimHighfilepath - checkIfExists(self.turbsimHighfilepath) - - if FFfilename is not None: - if not FFfilename.endswith('.fstf'): - raise ValueError (f'FAST.Farm input file `FFfilename` should end in ".fstf".') - self.FFfilepath = os.path.join(self.templatePath,FFfilename) - checkIfExists(self.FFfilepath) - self.FFfilename = FFfilename - - self._open_template_files() - - self.templateFilesCreatedBool = True - - return - - - def _create_copy_libdiscon(self): - # Make copies of libdiscon for each turbine if they don't exist - copied = False - for t in range(self.nTurbines): - libdisconfilename = os.path.splitext(os.path.basename(self.libdisconfilepath))[0] - currLibdiscon = os.path.join(os.path.dirname(self.libdisconfilepath), f'{libdisconfilename}.T{t+1}.so') - self.DLLfilepath = os.path.join(os.path.dirname(self.libdisconfilepath), f'{libdisconfilename}.T') - if not os.path.isfile(currLibdiscon): - if self.verbose>0: print(f' Creating a copy of the controller {libdisconfilename}.so in {currLibdiscon}') - shutil.copy2(self.libdisconfilepath, currLibdiscon) - copied=True - - if copied == False and self.verbose>0: - print(f' Copies of the controller {libdisconfilename}.T[1-{self.nTurbines}].so already exists in {os.path.dirname(self.libdisconfilepath)}. Skipped step.') - - - def _open_template_files(self): - - # Open template files - def _check_and_open(f): - if os.path.basename(f) == 'unused': - return 'unused' - else: - return FASTInputFile(f) - - self.ElastoDynFile = _check_and_open(self.EDfilepath) - self.SElastoDynFile = _check_and_open(self.SEDfilepath) - self.HydroDynFile = _check_and_open(self.HDfilepath) - self.ServoDynFile = _check_and_open(self.SrvDfilepath) - self.AeroDiskFile = _check_and_open(self.ADskfilepath) - self.turbineFile = _check_and_open(self.turbfilepath) - self.InflowWindFile = _check_and_open(self.IWfilepath) - - - def print_template_files(self): - raise NotImplementedError (f'Placeholder. Not implemented.') - - - def createAuxArrays(self): - self._rotate_wts() - self._create_all_cond() - self._create_all_cases() - - - def _create_all_cond(self): - - if len(self.vhub)==len(self.shear) and len(self.shear)==len(self.TIvalue): - self.nConditions = len(self.vhub) - - if self.verbose>1: print(f'\nThe length of vhub, shear, and TI are the same. Assuming each position is a condition.', end='\r') - if self.verbose>0: print(f'\nCreating {self.nConditions} conditions') - - self.allCond = xr.Dataset({'vhub': (['cond'], self.vhub ), - 'shear': (['cond'], self.shear ), - 'TIvalue': (['cond'], self.TIvalue)}, - coords={'cond': np.arange(self.nConditions)} ) - - else: - import itertools - self.nConditions = len(self.vhub) * len(self.shear) * len(self.TIvalue) - - if self.verbose>1: print(f'The length of vhub, shear, and TI are different. Assuming sweep on each of them.') - if self.verbose>0: print(f'Creating {self.nConditions} conditions') - - # Repeat arrays as necessary to build xarray Dataset - combination = np.vstack(list(itertools.product(self.vhub,self.shear,self.TIvalue))) - - self.allCond = xr.Dataset({'vhub': (['cond'], combination[:,0]), - 'shear': (['cond'], combination[:,1]), - 'TIvalue': (['cond'], combination[:,2])}, - coords={'cond': np.arange(self.nConditions)} ) - - - - - - def _create_all_cases(self): - # Generate the different "cases" (inflow angle, and misalignment and wakesteer bools). - # If misalignment true, then the actual yaw is yaw[turb]=np.random.uniform(low=-8.0, high=8.0). - - # Set sweep bools and multipliers - nCasesYMmultiplier = 2 if self.sweepYM else 1 - nCasesROmultiplier = len(self.EDmodel) - if len(self.ADmodel) == 1: - self.sweepEDmodel = False - self.sweepADmodel = False - else: - self.sweepEDmodel = True - self.sweepADmodel = True - - # Initialize an empty array to accumulate individual cases - allCases = [] - # Get list of unique yaws, keeping the order - _, ind = np.unique(self.yaw_init, axis=0, return_index=True) - yaw_unique = self.yaw_init[np.sort(ind)] # duplicates removed, same order as original array - - # The main sweep on wind dir and yaw has been given by the user, such that - # only one loop is needed here. - for icase in range(len(self.inflow_deg)): - wdir = self.inflow_deg[icase] - yaw = self.yaw_init[icase] - yaw_case = np.where(np.all(yaw_unique == yaw, axis=1))[0][0]+1 - # Get turbine info - x = self.wts_rot_ds.sel(inflow_deg=wdir)['x'].values - y = self.wts_rot_ds.sel(inflow_deg=wdir)['y'].values - z = self.wts_rot_ds.sel(inflow_deg=wdir)['z'].values - D = self.wts_rot_ds.sel(inflow_deg=wdir)['D'].values - zhub = self.wts_rot_ds.sel(inflow_deg=wdir)['zhub'].values - - oneCase = xr.Dataset({ - 'Tx': (['case','turbine'], [x ]), - 'Ty': (['case','turbine'], [y ]), - 'Tz': (['case','turbine'], [z ]), - 'D': (['case','turbine'], [D ]), - 'zhub': (['case','turbine'], [zhub]), - 'yaw': (['case','turbine'], [yaw] ), - 'inflow_deg': (['case'], [wdir]), - 'yawCase': (['case'], [yaw_case]), - }, - coords={ - 'case': [icase], - 'turbine': np.arange(self.nTurbines), - }, - ) - allCases.append(oneCase) - allCases = xr.concat(allCases, dim='case') - - # ------------------------------------------------------- SWEEP ROM MODELS - # Get the number of cases at before this current sweep - nCases_before_sweep = len(allCases.case) - - # Concat instances of allCases and adjust the case numbering - ds = xr.concat([allCases for i in range(nCasesROmultiplier)], dim='case') - ds['case'] = np.arange(len(ds['case'])) - - # Create an empty array to fill. This way have a generic variable of type object - data = np.empty_like(ds['Tx'].data, dtype=object); data[:] = None - ds['EDmodel'] = (('case','turbine'), data.copy()) - ds['ADmodel'] = (('case','turbine'), data.copy()) - ds['nFulllElastoDyn'] = (('case'), np.zeros_like(ds['inflow_deg']).copy()) - ds['nFullAeroDyn'] = (('case'), np.zeros_like(ds['inflow_deg']).copy()) - - # Now, we fill the array with the new values for the proper sweep - for multi in range(nCasesROmultiplier): - for c in range(nCases_before_sweep): - currCase = nCases_before_sweep*multi + c - currEDmodel = np.array(self.EDmodel)[multi] - currADmodel = np.array(self.ADmodel)[multi] - - ds['EDmodel'].loc[dict(case=currCase, turbine=slice(None))] = currEDmodel - nFED = np.count_nonzero(currEDmodel == 'FED') - ds['nFulllElastoDyn'].loc[dict(case=currCase)] = nFED - - ds['ADmodel'].loc[dict(case=currCase, turbine=slice(None))] = currADmodel - nADyn = np.count_nonzero(currADmodel == 'ADyn') - ds['nFullAeroDyn'].loc[dict(case=currCase)] = nADyn - - allCases = ds.copy() - - # ------------------------------------------------- SWEEP YAW MISALIGNMENT - # Get the number of cases at before this current sweep - nCases_before_sweep = len(allCases.case) - - # Concat instances of allCases and adjust the case numbering - ds = xr.concat([allCases for i in range(nCasesYMmultiplier)], dim='case') - ds['case'] = np.arange(len(ds['case'])) - - # Create an full no-misalignment array to fill when non-aligned - ds['yawmis'] = (('case','turbine'), np.zeros_like(ds['yaw'])) - ds['misalignment'] = (('case'), np.full_like(ds['inflow_deg'], False, dtype=bool)) - - if self.sweepYM: - # Now, we fill the array with the new values on the second half (first half has no misalignment) - for c in range(nCases_before_sweep): - currCase = nCases_before_sweep + c - ds['yawmis'].loc[dict(case=currCase, turbine=slice(None))] = np.random.uniform(size=case.nTurbines,low=-8,high=8) - ds['misalignment'].loc[dict(case=currCase)] = True - - self.allCases = ds.copy() - self.nCases = len(self.allCases['case']) - - - - def _rotate_wts(self): - # Calculate the rotated positions of the turbines wrt the reference turbine - wts_rot={} - for inflow in self.inflow_deg: - for i , turb in self.wts.items(): - ref = self.wts[self.refTurb_rot] - - xori = self.wts[i]['x'] - x = ref['x'] + (self.wts[i]['x']-ref['x'])*cosd(inflow) - (self.wts[i]['y']-ref['y'])*sind(inflow) - yori = self.wts[i]['y'] - y = ref['y'] - (self.wts[i]['x']-ref['x'])*sind(-inflow) + (self.wts[i]['y']-ref['y'])*cosd(-inflow) - z = self.wts[i]['z'] - D = self.wts[i]['D'] - zhub = self.wts[i]['zhub'] - - wts_rot[inflow,i] = {'x':x, 'y':y, 'z':z, - 'D':D, 'zhub':zhub, - } - - self.wts_rot_ds = pd.DataFrame.from_dict(wts_rot, orient='index').to_xarray().rename({'level_0':'inflow_deg','level_1':'turbine'}) - - - - def _setRotorParameters(self): - - if self.D == 220: # 12 MW turbine - self.bins = xr.Dataset({'WaveHs': (['wspd'], [ 1.429, 1.429]), # 1.429 comes from Matt's hydrodyn input file - 'WaveTp': (['wspd'], [ 7.073, 7.073]), # 7.073 comes from Matt's hydrodyn input file - 'RotSpeed': (['wspd'], [ 4.0, 4.0]), # 4 rpm comes from Matt's ED input file - 'BlPitch': (['wspd'], [ 0.0, 0.0]), # 0 deg comes from Matt's ED input file - #'WvHiCOffD': (['wspd'], [0, 0]), # 2nd order wave info. Unused for now - #'WvLowCOffS': (['wspd'], [0, 0]), # 2nd order wave info. Unused for now - }, coords={'wspd': [10, 15]} ) # 15 m/s is 'else', since method='nearest' is used on the variable `bins` - - elif self.D == 240: # IEA 15 MW - self.bins = xr.Dataset({'WaveHs': (['wspd'], [1.172, 1.323, 1.523, 1.764, 2.255]), # higher values on default input from the repository (4.52) - 'WaveTp': (['wspd'], [7.287, 6.963, 7.115, 6.959, 7.067]), # higher values on default input from the repository (9.45) - 'RotSpeed': (['wspd'], [4.995, 6.087, 7.557, 7.557, 7.557]), - 'BlPitch': (['wspd'], [0.315, 0, 0.645, 7.6, 13.8 ]), - #'WvHiCOffD': (['wspd'], [0, 0, 0, 0, 0 ]), # 2nd order wave info. Unused for now. 3.04292 from repo; 0.862 from KS - #'WvLowCOffS': (['wspd'], [0, 0, 0, 0, 0 ]), # 2nd order wave info. Unused for now 0.314159 from repo; 0.862 from KS - }, coords={'wspd': [6.6, 8.6, 10.6, 12.6, 15]} ) # 15 m/s is 'else', since method='nearest' is used on the variable `bins` - - else: - raise ValueError(f'Unknown turbine with diameter {self.D}. Add values to the `_setRotorParameters` function.') - - - - - def TS_low_setup(self, writeFiles=True, runOnce=False): - # Loops on all conditions/seeds creating Low-res TurbSim box (following python-toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py) - - boxType='lowres' - for cond in range(self.nConditions): - for seed in range(self.nSeeds): - seedPath = os.path.join(self.path, self.condDirList[cond], f'Seed_{seed}') - - # ---------------- TurbSim Low boxes setup ------------------ # - # Set file to be created - currentTSLowFile = os.path.join(seedPath, 'Low_stillToBeModified.inp') - - # Get properties needed for the creation of the low-res turbsim inp file - D_ = self.allCases['D' ].max().values - HubHt_ = self.allCases['zhub'].max().values - xlocs_ = self.allCases['Tx' ].values.flatten() # All turbines are needed for proper - ylocs_ = self.allCases['Ty' ].values.flatten() # and consistent extent calculation - Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values - shear_ = self.allCond.sel(cond=cond)['shear' ].values - tivalue_ = self.allCond.sel(cond=cond)['TIvalue'].values - # Coherence parameters - a = 12; b=0.12 # IEC 61400-3 ed4, app C, eq C.16 - Lambda1 = 0.7*HubHt_ if HubHt_<60 else 42 # IEC 61400-3 ed4, sec 6.3.1, eq 5 - - # Create and write new Low.inp files creating the proper box with proper resolution - # By passing low_ext, manual mode for the domain size is activated, and by passing ds_low, - # manual mode for discretization (and further domain size) is also activated - currentTS = TSCaseCreation(D_, HubHt_, Vhub_, tivalue_, shear_, x=xlocs_, y=ylocs_, zbot=self.zbot, cmax=self.cmax, - fmax=self.fmax, Cmeander=self.Cmeander, boxType=boxType, low_ext=self.extent_low, ds_low=self.ds_low_les) - self.TSlowbox = currentTS - if runOnce: - return - currentTS.writeTSFile(self.turbsimLowfilepath, currentTSLowFile, tmax=self.tmax, verbose=self.verbose) - - # Modify some values and save file (some have already been set in the call above) - Lowinp = FASTInputFile(currentTSLowFile) - Lowinp['RandSeed1'] = self.seedValues[seed] - Lowinp['PLExp'] = shear_ - #Lowinp['latitude'] = latitude # Not used when IECKAI model is selected. - Lowinp['InCDec1'] = Lowinp['InCDec2'] = Lowinp['InCDec3'] = f'"{a} {b/(8.1*Lambda1):.8f}"' - # The dt was computed for a proper low-res box but here we will want to compare with the high-res - # and it is convenient to have the same time step. Let's do that change here - Lowinp['TimeStep'] = 1/(2*self.fmax) - if writeFiles: - Lowinp.write( os.path.join(seedPath, 'Low.inp') ) - - # Let's remove the original file - os.remove(os.path.join(seedPath, 'Low_stillToBeModified.inp')) - - self.TSlowBoxFilesCreatedBool = True - - - def TS_low_slurm_prepare(self, slurmfilepath): - - # -------------------------------------------------- - # ----- Prepare SLURM script for Low-res boxes ----- - # -------------------------------------------------- - - if not os.path.isfile(slurmfilepath): - raise ValueError (f'SLURM script for low-res box {slurmfilepath} does not exist.') - self.slurmfilename_low = os.path.basename(slurmfilepath) - - shutil.copy2(slurmfilepath, os.path.join(self.path, self.slurmfilename_low)) - - # Determine memory-per-cpu - memory_per_cpu = int(150000/self.nSeeds) - - # Change job name (for convenience only) - _ = subprocess.call(f"sed -i 's|#SBATCH --job-name=lowBox|#SBATCH --job-name=lowBox_{os.path.basename(self.path)}|g' {self.slurmfilename_low}", cwd=self.path, shell=True) - # Change the path inside the script to the desired one - sed_command = f"sed -i 's|/projects/shellwind/rthedin/Task2_2regis|{self.path}|g' {self.slurmfilename_low}" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Change number of nodes values - _ = subprocess.call(f"sed -i 's|#SBATCH --nodes=2|#SBATCH --nodes={int(np.ceil(self.nConditions*self.nSeeds/6))}|g' {self.slurmfilename_low}", cwd=self.path, shell=True) - # Change memory per cpu - _ = subprocess.call(f"sed -i 's|--mem-per-cpu=25000M|--mem-per-cpu={memory_per_cpu}M|g' {self.slurmfilename_low}", cwd=self.path, shell=True) - # Assemble list of conditions and write it - listtoprint = "' '".join(self.condDirList) - sed_command = f"""sed -i "s|^condList.*|condList=('{listtoprint}')|g" {self.slurmfilename_low}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Change the number of seeds - _ = subprocess.call(f"sed -i 's|nSeeds=6|nSeeds={self.nSeeds}|g' {self.slurmfilename_low}", cwd=self.path, shell=True) - - - if self.nSeeds > 6: - print(f'--- WARNING: The memory-per-cpu on the low-res boxes SLURM script might be too low given {self.nSeeds} seeds.') - - - def TS_low_slurm_submit(self, qos='normal', A=None, t=None, p=None): - # --------------------------------- - # ----- Run turbSim Low boxes ----- - # --------------------------------- - # Submit the script to SLURM - options = f"--qos='{qos}' " - if A is not None: - options += f'-A {A} ' - if t is not None: - options += f'-t {t} ' - if p is not None: - options += f'-p {p} ' - - sub_command = f"sbatch {options}{self.slurmfilename_low}" - print(f'Calling: {sub_command}') - _ = subprocess.call(sub_command, cwd=self.path, shell=True) - - - def TS_low_createSymlinks(self): - # Create symbolic links for all of the time-series and the Low.bts files too - - notepath = os.getcwd() - os.chdir(self.path) - for cond in range(self.nConditions): - for case in range(self.nCases): - for seed in range(self.nSeeds): - try: - src = os.path.join('../../../..', self.condDirList[cond], f'Seed_{seed}', 'Low.bts') - dst = os.path.join(self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim', 'Low.bts') - os.symlink(src, dst) - except FileExistsError: - print(f' File {dst} already exists. Skipping symlink.') - os.chdir(notepath) - - - def getDomainParameters(self): - - # If the low box setup hasn't been called (e.g. LES run), do it once to get domain extents - if not self.TSlowBoxFilesCreatedBool: - if self.verbose>1: print(' Running a TurbSim setup once to get domain extents') - self.TS_low_setup(writeFiles=False, runOnce=True) - - # Figure out how many (and which) high boxes actually need to be executed. Remember that wake steering, yaw misalignment, SED/ADsk models, - # and sweep in yaw do not require extra TurbSim runs - self.nHighBoxCases = len(np.unique(self.inflow_deg)) # some wind dir might be repeated for sweep on yaws - - # Old method to get allHighBoxCases. Doesn't work well if I have weird manual sweeps - allHighBoxCases_old = self.allCases.where(~self.allCases['misalignment'], drop=True).drop_vars('misalignment')\ - .where(self.allCases['nFullAeroDyn']==self.nTurbines, drop=True).drop_vars('ADmodel')\ - .where(self.allCases['nFulllElastoDyn']==self.nTurbines, drop=True).drop_vars('EDmodel')\ - .where(self.allCases['yawCase']==1, drop=True).drop_vars('yawCase') - - # This is a new method, but I'm not sure if it will work always, so let's leave the one above and check it - uniquewdir = np.unique(self.allCases.inflow_deg) - allHighBoxCases = [] - for currwdir in uniquewdir: - # Get first case to have the wind direction currwdir - firstCaseWithInflow_i = self.allCases.where(self.allCases['inflow_deg'] == currwdir, drop=True).isel(case=0) - allHighBoxCases.append(firstCaseWithInflow_i) - self.allHighBoxCases = xr.concat(allHighBoxCases, dim='case') - # But, before I change the algorithm, I want to time-test it, so let's compare both ways - if not allHighBoxCases_old.identical(self.allHighBoxCases): - self.allHighBoxCases_old = allHighBoxCases_old - print(f'!!!!!! WARNING !!!!!!!!!') - print(f'The new method for computing all the high-box cases is not producing the same set of cases as the old algorithm.') - print(f'This should only happen if you have complex sweeps that you modified manually after the code creates the initial arrays') - print(f'Check the variable .allHighBoxCases_old to see the cases using the old algorithm') - print(f'Check the variable .allHighBoxCases to see the cases using the new algorithm') - print(f'You should check which xr.dataset has the correct, unique inflow_deg values. The correct array will only have unique values') - print(f'') - if len(self.allHighBoxCases_old['inflow_deg']) != len(np.unique(self.allHighBoxCases_old['inflow_deg'])): - print(f' Checking the inflow_deg variable, it looks like the old method has non-unique wind directions. The old method is wrong here.') - if len(self.allHighBoxCases['inflow_deg']) != len(np.unique(self.allHighBoxCases['inflow_deg'])): - print(f' Checking the inflow_deg variable, it looks like the new method has non-unique wind directions. The new method is wrong here.') - else: - print(' The new method appears to be correct here! Trust but verify') - print('') - print(f'!!!!!!!!!!!!!!!!!!!!!!!!') - print(f'') - - - if self.nHighBoxCases != len(self.allHighBoxCases.case): - raise ValueError(f'The number of cases do not match as expected. {self.nHighBoxCases} unique wind directions, but {len(self.allHighBoxCases.case)} unique cases.') - - # Determine offsets from turbines coordinate frame to TurbSim coordinate frame - self.yoffset_turbsOrigin2TSOrigin = -( (self.TSlowbox.ymax - self.TSlowbox.ymin)/2 + self.TSlowbox.ymin ) - self.xoffset_turbsOrigin2TSOrigin = - self.extent_low[0]*self.D - - if self.verbose>0: - print(f" The y offset between the turbine ref frame and turbsim is {self.yoffset_turbsOrigin2TSOrigin}") - print(f" The x offset between the turbine ref frame and turbsim is {self.xoffset_turbsOrigin2TSOrigin}") - - if self.verbose>2: - print(f'allHighBoxCases is:') - print(self.allHighBoxCases) - - - def TS_high_get_time_series(self): - - # Loop on all conditions/seeds extracting time series from the Low box at turbines location - boxType='highres' - for cond in range(self.nConditions): - for seed in range(self.nSeeds): - condSeedPath = os.path.join(self.path, self.condDirList[cond], f'Seed_{seed}') - - # Read output .bts for current seed - bts = TurbSimFile(os.path.join(condSeedPath, 'Low.bts')) - bts['t'] = np.round(bts['t'], 6) # rounding single precision read as double precision - bts['dt'] = np.round(bts['dt'], 6) - - for case in range(self.nHighBoxCases): - # Get actual case number given the high-box that need to be saved - case = self.allHighBoxCases.isel(case=case)['case'].values - - caseSeedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim') - - for t in range(self.nTurbines): - # Recover turbine properties of the current case - HubHt_ = self.allCases.sel(case=case, turbine=t)['zhub'].values - xloc_ = self.allCases.sel(case=case, turbine=t)['Tx' ].values - yloc_ = self.allCases.sel(case=case, turbine=t)['Ty' ].values - - # Turbine location in TurbSim reference frame - xt = xloc_ + self.xoffset_turbsOrigin2TSOrigin - yt = yloc_ + self.yoffset_turbsOrigin2TSOrigin - - # Get indices of turbine location in TurbSim files - jTurb, kTurb = bts.closestPoint(y=yt,z=HubHt_) - Hub_series = bts['z'][kTurb] - - # Get indices of the half height position (TurbSim's hub height) - jMid, kMid = bts.iMid - - # Get time series at the box center to get mean vhub and create time array. - #Vhub = bts['u'][0,:,jTurb,kTurb] - Vmid = bts['u'][0,:,jMid,kMid] - time = bts.t - - # The time-series need to be shifted depending on the turbine location, so we need to find how many - # grid points (time steps) the data have convected. We use the mean streamwise component for that - start_time_step = round( (xt/Vmid.mean())/bts.dt ) - - # Get time-series given rolling - uvel = np.roll(bts['u'][0, :, jTurb, kTurb], start_time_step) - vvel = np.roll(bts['u'][1, :, jTurb, kTurb], start_time_step) - wvel = np.roll(bts['u'][2, :, jTurb, kTurb], start_time_step) - - # Checks - assert len(time)==len(uvel) - assert len(uvel)==len(vvel) - assert len(vvel)==len(wvel) - - # Save timeseries as CondXX/Seed_Z/USRTimeSeries_T*.txt. This file will later be copied to CondXX/CaseYY/Seed_Z - timeSeriesOutputFile = os.path.join(caseSeedPath, f'USRTimeSeries_T{t+1}.txt') - - # The reference frame used in the time-series is the inertial frame of the high-res box (local). - # Sometimes the point where we want to place the turbine at exists and then we can set y=0. For example, suppose the low-res - # grid has y = ..., 980, 1000, 1020, ..., and we want to place a turbine at y=1000. The high-res box has 5m resolution. Then, - # the time-series will be pulled from _exactly_ y=1000, and since the low-res grid has a grid point there too, so we can put - # y=0 on the time-series input file. However, if we want the turbine at y=998, we must account for the difference since this - # y value is not a grid point of the low-res box. So we compute an offset between the turbine location and the nearest grid - # point in the low-res box, and then pass this offset to the time-series file. In this example, the offset is 2 m, thus the - # time-series file will have a y of 2 m. - yoffset = bts['y'][jTurb] - yt - if yoffset != 0: - print(f"Seed {seed}, Case {case}: Turbine {t+1} is not at a grid point location. Tubine is at y={yloc_}",\ - f"on the turbine reference frame, which is y={yt} on the low-res TurbSim reference frame. The",\ - f"nearest grid point in y is {bts['y'][jTurb]} so printing y={yoffset} to the time-series file.") - writeTimeSeriesFile(timeSeriesOutputFile, yoffset, Hub_series, uvel, vvel, wvel, time) - - - - - def TS_high_setup(self, writeFiles=True): - - #todo: Check if the low-res boxes were created successfully - - if self.ds_high_les != self.cmax: - print(f'WARNING: The requested ds_high = {self.ds_high_les} m is not actually used. The TurbSim ') - print(f' boxes use the default max chord value ({self.cmax} m here) for the spatial resolution.') - - # Create symbolic links for the low-res boxes - self.TS_low_createSymlinks() - - # Open low-res boxes and extract time-series at turbine locations - self.TS_high_get_time_series() - - # Loop on all conditions/cases/seeds setting up the High boxes - boxType='highres' - for cond in range(self.nConditions): - for case in range(self.nHighBoxCases): - # Get actual case number given the high-box that need to be saved - case = self.allHighBoxCases.isel(case=case)['case'].values - if self.verbose>3: - print(f'Generating high-res box setup for cond {cond} ({self.condDirList[cond]}), case {case} ({self.caseDirList[case]}).') - for seed in range(self.nSeeds): - seedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim') - - for t in range(self.nTurbines): - - # ---------------- TurbSim High boxes setup ------------------ # - currentTSHighFile = os.path.join(seedPath, f'HighT{t+1}_stillToBeModified.inp') - - # Get properties needed for the creation of the high-res turbsim inp file - D_ = self.allCases.sel(case=case, turbine=t)['D' ].values - HubHt_ = self.allCases.sel(case=case, turbine=t)['zhub'].values - xloc_ = self.allCases.sel(case=case, turbine=t)['Tx' ].values - yloc_ = self.allCases.sel(case=case, turbine=t)['Ty' ].values - Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values - shear_ = self.allCond.sel(cond=cond)['shear' ].values - tivalue_ = self.allCond.sel(cond=cond)['TIvalue'].values - - # Coherence parameters - a = 12; b=0.12 # IEC 61400-3 ed4, app C, eq C.16 - Lambda1 = 0.7*HubHt_ if HubHt_<60 else 42 # IEC 61400-3 ed4, sec 6.3.1, eq 5 - - # Create and write new Low.inp files creating the proper box with proper resolution - currentTS = TSCaseCreation(D_, HubHt_, Vhub_, tivalue_, shear_, x=xloc_, y=yloc_, zbot=self.zbot, - cmax=self.cmax, fmax=self.fmax, Cmeander=self.Cmeander, boxType=boxType, high_ext=self.extent_high) - currentTS.writeTSFile(self.turbsimHighfilepath, currentTSHighFile, tmax=self.tmax, turb=t, verbose=self.verbose) - - # Modify some values and save file (some have already been set in the call above) - Highinp = FASTInputFile(currentTSHighFile) - Highinp['RandSeed1'] = self.seedValues[seed] - Highinp['TimeStep'] = 1/(2*self.fmax) - Highinp['TurbModel'] = f'"TIMESR"' - Highinp['UserFile'] = f'"USRTimeSeries_T{t+1}.txt"' - Highinp['RefHt'] = HubHt_ - Highinp['URef'] = Vhub_ - Highinp['PLExp'] = shear_ - #Highinp['latitude'] = latitude # Not used when IECKAI model is selected. - Highinp['InCDec1'] = Highinp['InCDec2'] = Highinp['InCDec3'] = f'"{a} {b/(8.1*Lambda1):.8f}"' - if writeFiles: - Highinp.write( os.path.join(seedPath, f'HighT{t+1}.inp') ) - - # Let's remove the original file - os.remove(os.path.join(seedPath, f'HighT{t+1}_stillToBeModified.inp')) - - self.TShighBoxFilesCreatedBool = True - - - def TS_high_slurm_prepare(self, slurmfilepath): - # --------------------------------------------------- - # ----- Prepare SLURM script for High-res boxes ----- - # --------------------------------------------------- - - if not os.path.isfile(slurmfilepath): - raise ValueError (f'SLURM script for high-res box {slurmfilepath} does not exist.') - self.slurmfilename_high = os.path.basename(slurmfilepath) - - ntasks = self.nConditions*self.nHighBoxCases*self.nSeeds*self.nTurbines - shutil.copy2(slurmfilepath, os.path.join(self.path, self.slurmfilename_high)) - - # Change job name (for convenience only) - _ = subprocess.call(f"sed -i 's|#SBATCH --job-name=highBox|#SBATCH --job-name=highBox_{os.path.basename(self.path)}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) - # Change the path inside the script to the desired one - sed_command = f"sed -i 's|/projects/shellwind/rthedin/Task2_2regis|{self.path}|g' {self.slurmfilename_high}" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Change number of turbines - _ = subprocess.call(f"sed -i 's|nTurbines=12|nTurbines={self.nTurbines}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) - # Change number of seeds - _ = subprocess.call(f"sed -i 's|nSeeds=6|nSeeds={self.nSeeds}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) - # Change number of nodes values - _ = subprocess.call(f"sed -i 's|#SBATCH --nodes=3|#SBATCH --nodes={int(np.ceil(ntasks/36))}|g' {self.slurmfilename_high}", cwd=self.path, shell=True) - # Assemble list of conditions and write it - listtoprint = "' '".join(self.condDirList) - sed_command = f"""sed -i "s|^condList.*|condList=('{listtoprint}')|g" {self.slurmfilename_high}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Assemble list of cases and write it - highBoxesCaseDirList = [self.caseDirList[c] for c in self.allHighBoxCases.case.values] - listtoprint = "' '".join(highBoxesCaseDirList) - sed_command = f"""sed -i "s|^caseList.*|caseList=('{listtoprint}')|g" {self.slurmfilename_high}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - - - - def TS_high_slurm_submit(self, qos='normal', A=None, t=None, p=None): - # ---------------------------------- - # ----- Run turbSim High boxes ----- - # ---------------------------------- - # Submit the script to SLURM - options = f"--qos='{qos}' " - if A is not None: - options += f'-A {A} ' - if t is not None: - options += f'-t {t} ' - if p is not None: - otions += f'-p {p} ' - - sub_command = f"sbatch {options}{self.slurmfilename_high}" - print(f'Calling: {sub_command}') - _ = subprocess.call(sub_command, cwd=self.path, shell=True) - - - def TS_high_create_symlink(self): - - # Create symlink of all the high boxes for the cases with wake steering and yaw misalignment. These are the "repeated" boxes - - if self.verbose>0: - print(f'Creating symlinks for all the high-resolution boxes') - - notepath = os.getcwd() - os.chdir(self.path) - for cond in range(self.nConditions): - for case in range(self.nCases): - # In order to do the symlink let's check if the current case is source (has bts). If so, skip if. If not, find its equivalent source - casematch = self.allHighBoxCases['case'] == case - if len(np.where(casematch)) != 1: - raise ValueError (f'Something is wrong with your allHighBoxCases array. Found repeated case number. Stopping') - - src_id = np.where(casematch)[0] - - if len(src_id) == 1: - # Current case is source (contains bts). Skipping - continue - - # If we are here, the case is destination. Let's find the first case with the same wdir for source - varsToDrop = ['misalignment','yawmis','yaw','yawCase','ADmodel','EDmodel','nFullAeroDyn','nFulllElastoDyn'] - dst_xr = self.allCases.sel(case=case, drop=True).drop_vars(varsToDrop) - currwdir = dst_xr['inflow_deg'] - - src_xr = self.allHighBoxCases.where(self.allHighBoxCases['inflow_deg'] == currwdir, drop=True).drop_vars(varsToDrop) - src_case = src_xr['case'].values[0] - src_xr = src_xr.sel(case=src_case, drop=True) - - # Let's make sure the src and destination are the same case, except yaw misalignment and ROM bools, and yaw angles - # The xarrays we are comparing here contains all self.nTurbines turbines and no info about seed - xr.testing.assert_equal(src_xr, dst_xr) - - # Now that we have the correct arrays, we perform the loop on the turbines and seeds - for t in range(self.nTurbines): - for seed in range(self.nSeeds): - src = os.path.join('../../../..', self.condDirList[cond], self.caseDirList[src_case], f'Seed_{seed}', 'TurbSim', f'HighT{t+1}.bts') - dst = os.path.join(self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim', f'HighT{t+1}.bts') - - try: - os.symlink(src, dst) - except FileExistsError: - if self.verbose>1: print(f' File {dst} already exists. Skipping symlink.') - os.chdir(notepath) - - - def FF_setup(self, outlistFF=None, **kwargs): - ''' - - **kwargs: - seedsToKeep: int - For the LES setup. Often 1, but if you want to run multiple times the same thing, pick a different value - ''' - - if outlistFF is None: - # Output list for FAST.Farm runs. Use 1 at the end for turbines (they will be replicated for all turbines) - outlistFF = [ - "RtAxsXT1 , RtAxsYT1 , RtAxsZT1", - "RtPosXT1 , RtPosYT1 , RtPosZT1", - "YawErrT1", - "TIAmbT1", - 'RtVAmbT1', - 'RtVRelT1', - 'RtSkewT1', - 'RtCtAvgT1', - 'W1VAmbX, W1VAmbY, W1VAmbZ', - "W1VDisX, W1VDisY, W1VDisZ", - "CtT1N01 , CtT1N02 , CtT1N03 , CtT1N04 , CtT1N05 , CtT1N06 , CtT1N07 , CtT1N08 , CtT1N09 , CtT1N10 , CtT1N11 , CtT1N12 , CtT1N13 , CtT1N14 , CtT1N15 , CtT1N16 , CtT1N17 , CtT1N18 , CtT1N19 , CtT1N20", - # "WkAxsXT1D1 , WkAxsXT1D2 , WkAxsXT1D3 , WkAxsXT1D4 , WkAxsXT1D5 , WkAxsXT1D6 , WkAxsXT1D7", - # "WkAxsYT1D1 , WkAxsYT1D2 , WkAxsYT1D3 , WkAxsYT1D4 , WkAxsYT1D5 , WkAxsYT1D6 , WkAxsYT1D7", - # "WkAxsZT1D1 , WkAxsZT1D2 , WkAxsZT1D3 , WkAxsZT1D4 , WkAxsZT1D5 , WkAxsZT1D6 , WkAxsZT1D7", - "WkPosXT1D1 , WkPosXT1D2 , WkPosXT1D3 , WkPosXT1D4 , WkPosXT1D5 , WkPosXT1D6 , WkPosXT1D7 , WkPosXT1D8 , WkPosXT1D9", - "WkPosYT1D1 , WkPosYT1D2 , WkPosYT1D3 , WkPosYT1D4 , WkPosYT1D5 , WkPosYT1D6 , WkPosYT1D7 , WkPosYT1D8 , WkPosYT1D9", - "WkPosZT1D1 , WkPosZT1D2 , WkPosZT1D3 , WkPosZT1D4 , WkPosZT1D5 , WkPosZT1D6 , WkPosZT1D7 , WkPosZT1D8 , WkPosZT1D9", - # "WkDfVxT1N01D1, WkDfVxT1N02D1, WkDfVxT1N03D1, WkDfVxT1N04D1, WkDfVxT1N05D1, WkDfVxT1N06D1, WkDfVxT1N07D1, WkDfVxT1N08D1, WkDfVxT1N09D1, WkDfVxT1N10D1, WkDfVxT1N11D1, WkDfVxT1N12D1, WkDfVxT1N13D1, WkDfVxT1N14D1, WkDfVxT1N15D1, WkDfVxT1N16D1, WkDfVxT1N17D1, WkDfVxT1N18D1, WkDfVxT1N19D1, WkDfVxT1N20D1", - # "WkDfVxT1N01D2, WkDfVxT1N02D2, WkDfVxT1N03D2, WkDfVxT1N04D2, WkDfVxT1N05D2, WkDfVxT1N06D2, WkDfVxT1N07D2, WkDfVxT1N08D2, WkDfVxT1N09D2, WkDfVxT1N10D2, WkDfVxT1N11D2, WkDfVxT1N12D2, WkDfVxT1N13D2, WkDfVxT1N14D2, WkDfVxT1N15D2, WkDfVxT1N16D2, WkDfVxT1N17D2, WkDfVxT1N18D2, WkDfVxT1N19D2, WkDfVxT1N20D2", - # "WkDfVxT1N01D3, WkDfVxT1N02D3, WkDfVxT1N03D3, WkDfVxT1N04D3, WkDfVxT1N05D3, WkDfVxT1N06D3, WkDfVxT1N07D3, WkDfVxT1N08D3, WkDfVxT1N09D3, WkDfVxT1N10D3, WkDfVxT1N11D3, WkDfVxT1N12D3, WkDfVxT1N13D3, WkDfVxT1N14D3, WkDfVxT1N15D3, WkDfVxT1N16D3, WkDfVxT1N17D3, WkDfVxT1N18D3, WkDfVxT1N19D3, WkDfVxT1N20D3", - # "WkDfVxT1N01D4, WkDfVxT1N02D4, WkDfVxT1N03D4, WkDfVxT1N04D4, WkDfVxT1N05D4, WkDfVxT1N06D4, WkDfVxT1N07D4, WkDfVxT1N08D4, WkDfVxT1N09D4, WkDfVxT1N10D4, WkDfVxT1N11D4, WkDfVxT1N12D4, WkDfVxT1N13D4, WkDfVxT1N14D4, WkDfVxT1N15D4, WkDfVxT1N16D4, WkDfVxT1N17D4, WkDfVxT1N18D4, WkDfVxT1N19D4, WkDfVxT1N20D4", - # "WkDfVxT1N01D5, WkDfVxT1N02D5, WkDfVxT1N03D5, WkDfVxT1N04D5, WkDfVxT1N05D5, WkDfVxT1N06D5, WkDfVxT1N07D5, WkDfVxT1N08D5, WkDfVxT1N09D5, WkDfVxT1N10D5, WkDfVxT1N11D5, WkDfVxT1N12D5, WkDfVxT1N13D5, WkDfVxT1N14D5, WkDfVxT1N15D5, WkDfVxT1N16D5, WkDfVxT1N17D5, WkDfVxT1N18D5, WkDfVxT1N19D5, WkDfVxT1N20D5", - # "WkDfVxT1N01D6, WkDfVxT1N02D6, WkDfVxT1N03D6, WkDfVxT1N04D6, WkDfVxT1N05D6, WkDfVxT1N06D6, WkDfVxT1N07D6, WkDfVxT1N08D6, WkDfVxT1N09D6, WkDfVxT1N10D6, WkDfVxT1N11D6, WkDfVxT1N12D6, WkDfVxT1N13D6, WkDfVxT1N14D6, WkDfVxT1N15D6, WkDfVxT1N16D6, WkDfVxT1N17D6, WkDfVxT1N18D6, WkDfVxT1N19D6, WkDfVxT1N20D6", - # "WkDfVxT1N01D7, WkDfVxT1N02D7, WkDfVxT1N03D7, WkDfVxT1N04D7, WkDfVxT1N05D7, WkDfVxT1N06D7, WkDfVxT1N07D7, WkDfVxT1N08D7, WkDfVxT1N09D7, WkDfVxT1N10D7, WkDfVxT1N11D7, WkDfVxT1N12D7, WkDfVxT1N13D7, WkDfVxT1N14D7, WkDfVxT1N15D7, WkDfVxT1N16D7, WkDfVxT1N17D7, WkDfVxT1N18D7, WkDfVxT1N19D7, WkDfVxT1N20D7", - # "WkDfVrT1N01D1, WkDfVrT1N02D1, WkDfVrT1N03D1, WkDfVrT1N04D1, WkDfVrT1N05D1, WkDfVrT1N06D1, WkDfVrT1N07D1, WkDfVrT1N08D1, WkDfVrT1N09D1, WkDfVrT1N10D1, WkDfVrT1N11D1, WkDfVrT1N12D1, WkDfVrT1N13D1, WkDfVrT1N14D1, WkDfVrT1N15D1, WkDfVrT1N16D1, WkDfVrT1N17D1, WkDfVrT1N18D1, WkDfVrT1N19D1, WkDfVrT1N20D1", - # "WkDfVrT1N01D2, WkDfVrT1N02D2, WkDfVrT1N03D2, WkDfVrT1N04D2, WkDfVrT1N05D2, WkDfVrT1N06D2, WkDfVrT1N07D2, WkDfVrT1N08D2, WkDfVrT1N09D2, WkDfVrT1N10D2, WkDfVrT1N11D2, WkDfVrT1N12D2, WkDfVrT1N13D2, WkDfVrT1N14D2, WkDfVrT1N15D2, WkDfVrT1N16D2, WkDfVrT1N17D2, WkDfVrT1N18D2, WkDfVrT1N19D2, WkDfVrT1N20D2", - # "WkDfVrT1N01D3, WkDfVrT1N02D3, WkDfVrT1N03D3, WkDfVrT1N04D3, WkDfVrT1N05D3, WkDfVrT1N06D3, WkDfVrT1N07D3, WkDfVrT1N08D3, WkDfVrT1N09D3, WkDfVrT1N10D3, WkDfVrT1N11D3, WkDfVrT1N12D3, WkDfVrT1N13D3, WkDfVrT1N14D3, WkDfVrT1N15D3, WkDfVrT1N16D3, WkDfVrT1N17D3, WkDfVrT1N18D3, WkDfVrT1N19D3, WkDfVrT1N20D3", - # "WkDfVrT1N01D4, WkDfVrT1N02D4, WkDfVrT1N03D4, WkDfVrT1N04D4, WkDfVrT1N05D4, WkDfVrT1N06D4, WkDfVrT1N07D4, WkDfVrT1N08D4, WkDfVrT1N09D4, WkDfVrT1N10D4, WkDfVrT1N11D4, WkDfVrT1N12D4, WkDfVrT1N13D4, WkDfVrT1N14D4, WkDfVrT1N15D4, WkDfVrT1N16D4, WkDfVrT1N17D4, WkDfVrT1N18D4, WkDfVrT1N19D4, WkDfVrT1N20D4", - # "WkDfVrT1N01D5, WkDfVrT1N02D5, WkDfVrT1N03D5, WkDfVrT1N04D5, WkDfVrT1N05D5, WkDfVrT1N06D5, WkDfVrT1N07D5, WkDfVrT1N08D5, WkDfVrT1N09D5, WkDfVrT1N10D5, WkDfVrT1N11D5, WkDfVrT1N12D5, WkDfVrT1N13D5, WkDfVrT1N14D5, WkDfVrT1N15D5, WkDfVrT1N16D5, WkDfVrT1N17D5, WkDfVrT1N18D5, WkDfVrT1N19D5, WkDfVrT1N20D5", - # "WkDfVrT1N01D6, WkDfVrT1N02D6, WkDfVrT1N03D6, WkDfVrT1N04D6, WkDfVrT1N05D6, WkDfVrT1N06D6, WkDfVrT1N07D6, WkDfVrT1N08D6, WkDfVrT1N09D6, WkDfVrT1N10D6, WkDfVrT1N11D6, WkDfVrT1N12D6, WkDfVrT1N13D6, WkDfVrT1N14D6, WkDfVrT1N15D6, WkDfVrT1N16D6, WkDfVrT1N17D6, WkDfVrT1N18D6, WkDfVrT1N19D6, WkDfVrT1N20D6", - # "WkDfVrT1N01D7, WkDfVrT1N02D7, WkDfVrT1N03D7, WkDfVrT1N04D7, WkDfVrT1N05D7, WkDfVrT1N06D7, WkDfVrT1N07D7, WkDfVrT1N08D7, WkDfVrT1N09D7, WkDfVrT1N10D7, WkDfVrT1N11D7, WkDfVrT1N12D7, WkDfVrT1N13D7, WkDfVrT1N14D7, WkDfVrT1N15D7, WkDfVrT1N16D7, WkDfVrT1N17D7, WkDfVrT1N18D7, WkDfVrT1N19D7, WkDfVrT1N20D7", - ] - self.outlistFF = outlistFF - - - # Planes to save in FAST.Farm. We want the planes through the original farm, so let's get the position of the turbines at wdir=0 - alignedTurbs = self.allCases.where(self.allCases['inflow_deg']==0, drop=True).isel(case=0) - if self.inflowStr == 'TurbSim': - # Turbine location in TurbSim reference frame - xWT = alignedTurbs['Tx'].values + self.xoffset_turbsOrigin2TSOrigin - yWT = alignedTurbs['Ty'].values + self.yoffset_turbsOrigin2TSOrigin - elif self.inflowStr == 'LES': - # Turbine location in LES reference frame - xWT = alignedTurbs['Tx'].values - yWT = alignedTurbs['Ty'].values - - offset=10 - planes_xy = [self.zhub+self.zbot] - planes_yz = np.unique(xWT+offset) - planes_xz = np.unique(yWT) - - # Number of planes must be at most 9 - self.planes_xy = planes_xy[0:9] - self.planes_yz = planes_yz[0:9] - self.planes_xz = planes_xz[0:9] - - - if self.inflowStr == 'LES': - self._FF_setup_LES(**kwargs) - - elif self.inflowStr == 'TurbSim': - # We need to make sure the TurbSim boxes have been executed. Let's check the last line of the logfile - highboxlog_path = os.path.join(self.path, self.condDirList[0], self.caseDirList[0], 'Seed_0', 'TurbSim', 'log.hight1.seed0.txt') - if not os.path.isfile(highboxlog_path): - raise ValueError(f'All TurbSim boxes need to be completed before this step can be done.') - - with open(highboxlog_path) as f: - last = None - for last in (line for line in f if line.rstrip('\n')): pass - - if last is None or 'TurbSim terminated normally' not in last: - raise ValueError(f'All TurbSim boxes need to be completed before this step can be done.') - - self._FF_setup_TS(**kwargs) - - - - def _FF_setup_LES(self, seedsToKeep=1): - - self.seedsToKeep = seedsToKeep - - # Clean unnecessary directories and files created by the general setup - for cond in range(self.nConditions): - for seed in range(self.nSeeds): - currpath = os.path.join(self.path, self.condDirList[cond], f'Seed_{seed}') - if os.path.isdir(currpath): shutil.rmtree(currpath) - - for case in range(self.nCases): - #shutil.rmtree(os.path.join(path, condDirList[cond], caseDirList[case], f'Seed_0','InflowWind.dat')) # needs to exist - for seed in range(seedsToKeep,self.nSeeds): - currpath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}') - if os.path.isdir(currpath): shutil.rmtree(currpath) - - - # Create symlinks for the processed-and-renamed vtk files - LESboxesDirName = 'LESboxes' - - for cond in range(self.nConditions): - for case in range(self.nCases): - for seed in range(self.seedsToKeep): - # Remove TurbSim dir - currpath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', 'TurbSim') - if os.path.isdir(currpath): shutil.rmtree(currpath) - # Create LES boxes dir - currpath = os.path.join(self.path,self.condDirList[cond],self.caseDirList[case],f'Seed_{seed}',LESboxesDirName) - if not os.path.isdir(currpath): os.makedirs(currpath) - - # Low-res box - try: - src = os.path.join(self.LESpath[cond], 'Low') - dst = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', LESboxesDirName, 'Low') - os.symlink(src, dst) - except FileExistsError: - print(f'Directory {dst} already exists. Skipping symlink.') - - # High-res boxes - for t in range(self.nTurbines): - try: - src = os.path.join(self.LESpath[cond], f"HighT{t+1}_inflow{str(self.allCases.sel(case=case).inflow_deg.values).replace('-','m')}deg") - dst = os.path.join(self.path,self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', LESboxesDirName, f'HighT{t+1}') - os.symlink(src, dst) - except FileExistsError: - print(f'Directory {dst} already exists. Skipping symlink.') - - - # Loops on all conditions/cases and cases for FAST.Farm - for cond in range(self.nConditions): - for case in range(self.nCases): - for seed in range(seedsToKeep): - seedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}') - - # Recover case properties - D_ = self.allCases['D' ].max().values # Getting the maximum in case different turbines are present - Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values - # Recover turbine properties (array of length nTurbines) - xWT = self.allCases.sel(case=case)['Tx'].values - yWT = self.allCases.sel(case=case)['Ty'].values - zWT = self.allCases.sel(case=case)['Tz'].values - - # --------------- FAST.Farm ----------------- # - templateFSTF = os.path.join(self.templatePath, self.FFfilename) - outputFSTF = os.path.join(seedPath, 'FFarm_mod.fstf') - - # Write the file (mostly for turbine locations here - writeFastFarm(outputFSTF, templateFSTF, xWT, yWT, zWT, FFTS=None, OutListT1=self.outlistFF, noLeadingZero=True) - - # Open saved file and change additional values manually or make sure we have the correct ones - ff_file = FASTInputFile(outputFSTF) - - # Open output file and change additional values manually or make sure we have the correct ones - ff_file['InflowFile'] = f'"./{self.IWfilename}"' - ff_file['Mod_AmbWind'] = 1 # 1: LES boxes; 2: single TurbSim; 3: multiple TurbSim - ff_file['TMax'] = self.tmax - - # LES-related parameters - ff_file['DT_Low-VTK'] = self.dt_low_les - ff_file['DT_High-VTK'] = self.dt_high_les - ff_file['WindFilePath'] = f'''"{os.path.join(seedPath, LESboxesDirName)}"''' - #if checkWindFiles: - # ff_file['ChkWndFiles'] = 'TRUE' - - # Super controller - ff_file['UseSC'] = False - ff_file['SC_FileName'] = '/path/to/SC_DLL.dll' - - # Wake dynamics - ff_file['Mod_Wake'] = self.mod_wake - if self.mod_wake == 1: # Polar model - self.dr = self.cmax - else: # Curled; Cartesian - self.dr = round(self.D/10) - ff_file['dr'] = self.dr - ff_file['NumRadii'] = int(np.ceil(3*D_/(2*self.dr) + 1)) - ff_file['NumPlanes'] = int(np.ceil( 20*D_/(self.dt_low_les*Vhub_*(1-1/6)) ) ) - - # Vizualization outputs - ff_file['WrDisWind'] = 'False' - ff_file['WrDisDT'] = ff_file['DT_Low-VTK'] # default is the same as DT_Low-VTK - ff_file['NOutDisWindXY'] = len(self.planes_xy) - ff_file['OutDisWindZ'] = ', '.join(map(str, self.planes_xy)) - ff_file['NOutDisWindYZ'] = len(self.planes_yz) - ff_file['OutDisWindX'] = ', '.join(map(str, self.planes_yz)) - ff_file['NOutDisWindXZ'] = len(self.planes_xz) - ff_file['OutDisWindY'] = ', '.join(map(str, self.planes_xz)) - - # Modify wake outputs - ff_file['NOutDist'] = 9 - ff_file['OutDist'] = ', '.join(map(str, [d*D_ for d in [0.5,1,1.5,2,3,4,5,6,7]])) - # Mofidy wind output - ff_file['NWindVel'] = len(xWT[:9]) - ff_file['WindVelX'] = ', '.join(map(str, xWT[:9])) - ff_file['WindVelY'] = ', '.join(map(str, yWT[:9])) - ff_file['WindVelZ'] = ', '.join(map(str, zWT[:9]+self.zhub)) - - ff_file.write(outputFSTF) - - # Update the number of seeds variable for the LES case - self.nSeeds = self.seedsToKeep - - - - def _FF_setup_TS(self): - - # Let's first create the symlinks for the high-res boxes. Remember that only the cases with - # unique winddir in self.allHighBoxCases have executed high-res boxes, the rest is all links - self.TS_high_create_symlink() - - # Loops on all conditions/cases and cases for FAST.Farm - for cond in range(self.nConditions): - print(f'Processing condition {self.condDirList[cond]}') - for case in range(self.nCases): - print(f' Processing all {self.nSeeds} seeds of case {self.caseDirList[case]}', end='\r') - for seed in range(self.nSeeds): - seedPath = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}') - - # Recover case properties - D_ = self.allCases['D' ].max().values # Getting the maximum in case different turbines are present - HubHt_ = self.allCases['zhub'].max().values # Getting the maximum in case different turbines are present - Vhub_ = self.allCond.sel(cond=cond)['vhub' ].values - shear_ = self.allCond.sel(cond=cond)['shear' ].values - tivalue_ = self.allCond.sel(cond=cond)['TIvalue'].values - # Recover turbine properties (array of length nTurbines) - xWT = self.allCases.sel(case=case)['Tx'].values - yWT = self.allCases.sel(case=case)['Ty'].values - zWT = self.allCases.sel(case=case)['Tz'].values - - # # Turbine location in TurbSim reference frame - xt = xWT + self.xoffset_turbsOrigin2TSOrigin - yt = yWT + self.yoffset_turbsOrigin2TSOrigin - - - # --------------- FAST.Farm ----------------- # - templateFSTF = os.path.join(self.templatePath, self.FFfilename) - outputFSTF = os.path.join(seedPath, 'FFarm_mod.fstf') - - # Open TurbSim outputs for the Low box and one High box (they are all of the same size) - lowbts = TurbSimFile(os.path.join(seedPath,'TurbSim', 'Low.bts')) - highbts = TurbSimFile(os.path.join(seedPath,'TurbSim', f'HighT1.bts')) - - # Get dictionary with all the D{X,Y,Z,t}, L{X,Y,Z,t}, N{X,Y,Z,t}, {X,Y,Z}0 - d = self._getBoxesParamsForFF(lowbts, highbts, self.dt_low_les, D_, HubHt_, xWT, yt) - - # Write the file - writeFastFarm(outputFSTF, templateFSTF, xWT, yt, zWT, d, OutListT1=self.outlistFF, noLeadingZero=True) - - - # Open saved file and change additional values manually or make sure we have the correct ones - ff_file = FASTInputFile(outputFSTF) - ff_file['InflowFile'] = f'"./{self.IWfilename}"' - #ff_file['DT']=1.0 - ff_file['Mod_AmbWind'] = 3 # 1: LES boxes; 2: single TurbSim; 3: multiple TurbSim - ff_file['TMax'] = self.tmax - - # Super controller - ff_file['UseSC'] = False - ff_file['SC_FileName'] = '/path/to/SC_DLL.dll' - - # Wake dynamics - ff_file['Mod_Wake'] = self.mod_wake - if self.mod_wake == 1: # Polar model - self.dr = self.cmax - else: # Curled; Cartesian - self.dr = round(self.D/10) - ff_file['dr'] = self.dr - ff_file['NumRadii'] = int(np.ceil(3*D_/(2*self.dr) + 1)) - ff_file['NumPlanes'] = int(np.ceil( 20*D_/(self.dt_low_les*Vhub_*(1-1/6)) ) ) - - # Vizualization outputs - ff_file['WrDisWind'] = 'False' - ff_file['WrDisDT'] = ff_file['DT_Low'] # default is the same as DT_Low - ff_file['NOutDisWindXY'] = len(self.planes_xy) - ff_file['OutDisWindZ'] = ', '.join(map(str, self.planes_xy)) - ff_file['NOutDisWindYZ'] = len(self.planes_yz) - ff_file['OutDisWindX'] = ', '.join(map(str, self.planes_yz)) - ff_file['NOutDisWindXZ'] = len(self.planes_xz) - ff_file['OutDisWindY'] = ', '.join(map(str, self.planes_xz)) - - # Modify wake outputs - ff_file['NOutDist'] = 9 - ff_file['OutDist'] = ', '.join(map(str, [1,1.5,2,2.5,3,3.5,4,5,6]*D_)) - # Mofidy wind output - ff_file['NWindVel'] = len(xWT[:9]) - ff_file['WindVelX'] = ', '.join(map(str, xWT[:9])) - ff_file['WindVelY'] = ', '.join(map(str, yWT[:9])) - ff_file['WindVelZ'] = ', '.join(map(str, zWT[:9]+self.zhub)) - - ff_file.write(outputFSTF) - print(f'Done processing condition {self.condDirList[cond]} ') - - return - - - - def _getBoxesParamsForFF(self, lowbts, highbts, dt_low_desired, D, HubHt, xWT, yt): - # Get mean wind speeds at the half height location (advection speed) - _, meanU_High = highbts.midValues() - _, meanU_Low = lowbts.midValues() - - dT_High = np.round(highbts.dt, 4) - # dX_High can sometimes be too high. So get the closest to the cmax, but multiple of what should have been - dX_High = round(meanU_High*dT_High) - if self.verbose>1: - print(f'original dX_High is {dX_High}') - dX_High = round(self.cmax/dX_High) * dX_High - if self.verbose>1: - print(f'after adjusting to closes multiple of cmax, dX_High is {dX_High}') - dY_High = highbts.y[1] - highbts.y[0] - dZ_High = highbts.z[1] - highbts.z[0] - - - # ----- Low - dT_Low = getMultipleOf(dt_low_desired, multipleof=dT_High) - dX_Low = getMultipleOf(meanU_Low*dT_Low, multipleof=dX_High) - dY_Low = lowbts.y[1] - lowbts.y[0] - dZ_Low = lowbts.z[1] - lowbts.z[0] - - LY_Low = lowbts.y[-1]-lowbts.y[0] - LZ_Low = lowbts.z[-1]-lowbts.z[0] - LT_Low = np.round(lowbts.t[-1]-lowbts.t[0], 4) - - X0_Low = np.floor( (min(xWT) - self.extent_low[0]*D )) - X0_Low = getMultipleOf(X0_Low, multipleof=dX_Low) - Y0_Low = np.floor( -LY_Low/2 ) # Starting on integer value for aesthetics - Z0_Low = lowbts.z[0] # we start at lowest to include tower - - XMax_Low = getMultipleOf(max(xWT) + self.extent_low[1]*D, multipleof=dX_Low) - LX_Low = XMax_Low-X0_Low - - nX_Low = int(np.ceil(LX_Low/dX_Low)+1) - nY_Low = len(lowbts.y) - nZ_Low = len(lowbts.z) - - assert nY_Low == int(np.ceil(LY_Low/dY_Low)+1) - assert nZ_Low == int(np.ceil(LZ_Low/dZ_Low)+1) - assert (nY_Low-1)*dY_Low == LY_Low - assert (nZ_Low-1)*dZ_Low == LZ_Low - - - # ----- High - Z0_High = highbts.z[0] # we start at lowest to include tower - - LX_High = self.extent_high*D - LY_High = highbts.y[-1]-highbts.y[0] - LZ_High = highbts.z[-1]-highbts.z[0] - LT_High = np.round(highbts.t[-1]-highbts.t[0], 4) - - nX_High = int(np.ceil(LX_High/dX_High) + 1) # plus 1 from the guidance - nY_High = len(highbts.y) - nZ_High = len(highbts.z) - - assert nY_High == int(np.ceil(LY_High/dY_High)+1) - assert nZ_High == int(np.ceil(LZ_High/dZ_High)+1) - assert (nY_High-1)*dY_High == LY_High - assert (nZ_High-1)*dZ_High == LZ_High - - # --- High-res location per turbine - X0_desired = np.asarray(xWT)-LX_High/2 # high-res is centered on turbine location - Y0_desired = np.asarray(yt)-LY_High/2 # high-res is centered on turbine location - X0_High = X0_Low + np.floor((X0_desired-X0_Low)/dX_High)*dX_High - Y0_High = Y0_Low + np.floor((Y0_desired-Y0_Low)/dY_High)*dY_High - - if self.verbose>2: - print(f' Low Box \t\t High box ') - print(f'dT_Low: {dT_Low}\t\t dT_High: {dT_High}') - print(f'dX_Low: {dX_Low}\t\t dX_High: {dX_High}') - print(f'dY_Low: {dY_Low}\t\t dY_High: {dY_High}') - print(f'dZ_Low: {dZ_Low}\t\t dZ_High: {dZ_High}') - print(f'LX_Low: {LX_Low}\t\t LX_High: {LX_High}') - print(f'LY_Low: {LY_Low}\t\t LY_High: {LY_High}') - print(f'LZ_Low: {LZ_Low}\t\t LZ_High: {LZ_High}') - print(f'LT_Low: {LT_Low}\t\t LT_High: {LT_High}') - print(f'nX_Low: {nX_Low}\t\t nX_High: {nX_High}') - print(f'nY_Low: {nY_Low}\t\t nY_High: {nY_High}') - print(f'nZ_Low: {nZ_Low}\t\t nZ_High: {nZ_High}') - print(f'X0_Low: {X0_Low}\t\t X0_High: {X0_High}') - print(f'Y0_Low: {Y0_Low} \t Y0_High: {Y0_High}') - print(f'Z0_Low: {Z0_Low}\t\t Z0_High: {Z0_High}') - - - # Fill dictionary with all values - d = dict() - d['DT_Low'] = np.around(dT_Low ,4) - d['DT_High'] = np.around(dT_High,4) - d['NX_Low'] = nX_Low - d['NY_Low'] = nY_Low - d['NZ_Low'] = nZ_Low - d['X0_Low'] = np.around(X0_Low,4) - d['Y0_Low'] = np.around(Y0_Low,4) - d['Z0_Low'] = np.around(Z0_Low,4) - d['dX_Low'] = np.around(dX_Low,4) - d['dY_Low'] = np.around(dY_Low,4) - d['dZ_Low'] = np.around(dZ_Low,4) - d['NX_High'] = nX_High - d['NY_High'] = nY_High - d['NZ_High'] = nZ_High - # --- High extent info for turbine outputs - d['dX_High'] = np.around(dX_High,4) - d['dY_High'] = np.around(dY_High,4) - d['dZ_High'] = np.around(dZ_High,4) - d['X0_High'] = np.around(X0_High,4) - d['Y0_High'] = np.around(Y0_High,4) - d['Z0_High'] = np.around(Z0_High,4) - # --- Misc - d['U_mean_Low'] = meanU_Low - d['U_mean_High'] = meanU_High - - - # --- Sanity check: check that the high res is at "almost" an integer location - X_rel = (np.array(d['X0_High'])-d['X0_Low'])/d['dX_High'] - Y_rel = (np.array(d['Y0_High'])-d['Y0_Low'])/d['dY_High'] - dX = X_rel - np.round(X_rel) # Should be close to zero - dY = Y_rel - np.round(Y_rel) # Should be close to zero - - if any(abs(dX)>1e-3): - print('Deltas:',dX) - raise Exception('Some X0_High are not on an integer multiple of the high-res grid') - if any(abs(dY)>1e-3): - print('Deltas:',dY) - raise Exception('Some Y0_High are not on an integer multiple of the high-res grid') - - return d - - - - def FF_slurm_prepare(self, slurmfilepath): - # ---------------------------------------------- - # ----- Prepare SLURM script for FAST.Farm ----- - # ------------- ONE SCRIPT PER CASE ------------ - # ---------------------------------------------- - - if not os.path.isfile(slurmfilepath): - raise ValueError (f'SLURM script for FAST.Farm {slurmfilepath} does not exist.') - self.slurmfilename_ff = os.path.basename(slurmfilepath) - - - for cond in range(self.nConditions): - for case in range(self.nCases): - for seed in range(self.nSeeds): - - fname = f'runFASTFarm_cond{cond}_case{case}_seed{seed}.sh' - shutil.copy2(slurmfilepath, os.path.join(self.path, fname)) - - # Change job name (for convenience only) - sed_command = f"sed -i 's|#SBATCH --job-name=runFF|#SBATCH --job-name=c{cond}_c{case}_s{seed}_runFF_{os.path.basename(self.path)}|g' {fname}" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Change logfile name (for convenience only) - sed_command = f"sed -i 's|#SBATCH --output log.fastfarm_c0_c0_seed0|#SBATCH --output log.fastfarm_c{cond}_c{case}_s{seed}|g' {fname}" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Change the fastfarm binary to be called - sed_command = f"""sed -i "s|^fastfarmbin.*|fastfarmbin='{self.ffbin}'|g" {fname}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Change the path inside the script to the desired one - sed_command = f"sed -i 's|/projects/shellwind/rthedin/Task2_2regis|{self.path}|g' {fname}" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Write condition - sed_command = f"""sed -i "s|^cond.*|cond='{self.condDirList[cond]}'|g" {fname}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Write case - sed_command = f"""sed -i "s|^case.*|case='{self.caseDirList[case]}'|g" {fname}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - # Write seed - sed_command = f"""sed -i "s|^seed.*|seed={seed}|g" {fname}""" - _ = subprocess.call(sed_command, cwd=self.path, shell=True) - - - - def FF_slurm_submit(self, qos='normal', A=None, t=None, p=None, delay=4): - - # ---------------------------------- - # ---------- Run FAST.Farm --------- - # ------- ONE SCRIPT PER CASE ------ - # ---------------------------------- - import time - - for cond in range(self.nConditions): - for case in range(self.nCases): - for seed in range(self.nSeeds): - - # Submit the script to SLURM - fname = f'runFASTFarm_cond{cond}_case{case}_seed{seed}.sh' - - options = f"--qos='{qos}' " - if A is not None: - options += f'-A {A} ' - if t is not None: - options += f'-t {t} ' - if p is not None: - otions += f'-p {p} ' - - sub_command = f"sbatch {options}{fname}" - print(f'Calling: {sub_command}') - _ = subprocess.call(sub_command, cwd=self.path, shell=True) - time.sleep(delay) # Sometimes the same job gets submitted twice. This gets around it. - - - def FF_check_output(self): - ''' - Check all the FF output files and look for the termination string. - ''' - - ff_run_failed = False - for cond in range(self.nConditions): - for case in range(self.nCases): - if self.verbose>1: print(f'Checking {self.condDirList[cond]}, {self.caseDirList[case]}') - for seed in range(self.nSeeds): - # Let's check the last line of the logfile - fflog_path = os.path.join(self.path, self.condDirList[cond], self.caseDirList[case], f'Seed_{seed}', f'log.fastfarm.seed{seed}.txt') - if not os.path.isfile(fflog_path): - print(f'{self.condDirList[cond]}, {self.caseDirList[case]}, seed {seed}: FAST.Farm log file does not exist.') - ff_run_failed=True - - else: - tail_command = ['tail', '-n', '2', fflog_path] - tail = subprocess.check_output(tail_command).decode('utf-8') - if tail.strip() != 'FAST.Farm terminated normally.': - print(f'{self.condDirList[cond]}, {self.caseDirList[case]}, seed {seed}: FAST.Farm did not complete successfully.') - ff_run_failed=True - - if ff_run_failed: - print('') - raise ValueError(f'Not all FAST.Farm runs were successful') - else: - print(f'All cases finished successfully.') - - - - def plot(self, figsize=(15,7), fontsize=14, saveFig=True, returnFig=False, figFormat='png'): - import matplotlib.pyplot as plt - - fig, ax = plt.subplots(figsize=figsize) - - # for plotting different inflow angles - alphas = np.append(1, np.linspace(0.5,0.2, len(self.wts_rot_ds['inflow_deg'])-1)) - - # low-res box - try: - ax.plot([self.TSlowbox.xmin, self.TSlowbox.xmax, self.TSlowbox.xmax, self.TSlowbox.xmin, self.TSlowbox.xmin], - [self.TSlowbox.ymin, self.TSlowbox.ymin, self.TSlowbox.ymax, self.TSlowbox.ymax, self.TSlowbox.ymin],'--k',lw=2,label='Low') - except AttributeError: - print(f'WARNING: The exact limits of the low-res box have not been computed yet. Showing extents given as inputs') - xmin = self.allCases['Tx'].min()-self.extent_low[0]*self.D - xmax = self.allCases['Tx'].max()+self.extent_low[1]*self.D - ymin = self.allCases['Ty'].min()-self.extent_low[2]*self.D - ymax = self.allCases['Ty'].max()+self.extent_low[3]*self.D - ax.plot([xmin, xmax, xmax, xmin, xmin], - [ymin, ymin, ymax, ymax, ymin],'--k',lw=2,label='Low') - - - for j, inflow in enumerate(self.wts_rot_ds['inflow_deg']): - ax.set_prop_cycle(None) # Reset the colormap for every inflow - for i, currTurbine in enumerate(self.wts_rot_ds.turbine): - color = next(ax._get_lines.prop_cycler)['color'] - - dst = self.wts_rot_ds.sel(turbine=currTurbine, inflow_deg=inflow) - - # plot high-res boxes - xmin, xmax = [dst.x-self.extent_high*dst.D/2, dst.x+self.extent_high*dst.D/2] - ymin, ymax = [dst.y-self.extent_high*dst.D/2, dst.y+self.extent_high*dst.D/2] - # Only add label entry on first (darker) curves - if j==0: - ax.plot([xmin, xmax, xmax, xmin, xmin], - [ymin, ymin, ymax, ymax, ymin], c=color, alpha=alphas[j], label=f'HighT{i+1}') - else: - ax.plot([xmin, xmax, xmax, xmin, xmin], - [ymin, ymin, ymax, ymax, ymin], c=color, alpha=alphas[j]) - - # plot turbine location - ax.scatter(dst.x, dst.y, s=dst.D/6, c=color, marker='o') #, label=f'WT{i+1}') - - # plot turbine disk accoding to all yaws in current wdir - allyaw_currwdir = self.allCases.where(self.allCases['inflow_deg']==inflow,drop=True).sel(turbine=currTurbine)['yaw'] - _, ind = np.unique(allyaw_currwdir, axis=0, return_index=True) - yaw_currwdir = allyaw_currwdir[np.sort(ind)].values # duplicates removed, same order as original array - for yaw in yaw_currwdir: - ax.plot([dst.x.values-(dst.D.values/2)*sind(yaw), dst.x.values+(dst.D.values/2)*sind(yaw)], - [dst.y.values-(dst.D.values/2)*cosd(yaw), dst.y.values+(dst.D.values/2)*cosd(yaw)], c=color, alpha=alphas[j]) - - # plot convex hull of farm (or line) for given inflow - turbs = self.wts_rot_ds.sel(inflow_deg=inflow)[['x','y']].to_array().transpose() - try: - hull = ConvexHull(turbs) - for simplex in hull.simplices: - ax.plot(turbs[simplex, 0], turbs[simplex, 1], 'gray', alpha=alphas[j], label=f'Inflow {inflow.values} deg') - except: - # All turbines are in a line. Plotting a line instead of convex hull - ax.plot(turbs[:,0], turbs[:,1], 'gray', alpha=alphas[j], label=f'Inflow {inflow.values} deg') - - - # Remove duplicate entries from legend - handles, labels = plt.gca().get_legend_handles_labels() - by_label = dict(zip(labels, handles)) - plt.legend(by_label.values(), by_label.keys(), loc='upper left', bbox_to_anchor=(1.02,1.015), fontsize=fontsize) - - ax.set_xlabel("x [m]", fontsize=fontsize) - ax.set_ylabel("y [m]", fontsize=fontsize) - ax.tick_params(axis='both', which='major', labelsize=fontsize) - ax.grid() - ax.set_aspect('equal') - - if saveFig: - if figFormat == 'png': - fig.savefig(os.path.join(self.path,'farm.png'), bbox_inches='tight', facecolor='white', transparent=False) - elif figFormat == 'pdf': - fig.savefig(os.path.join(self.path,'farm.pdf'), bbox_inches='tight', facecolor='white', transparent=False) - else: - raise ValueError (f'Figure format not recognized. Options are png and pdf.') - - if returnFig: - return fig, ax - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md deleted file mode 100644 index 055d0b6dc9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/README.md +++ /dev/null @@ -1,8 +0,0 @@ -#Set of tools to work with FAST.Farm - - -NOTE: the interface of these scripts is still in a preliminary phase and might be updated in the future. - -Look at the folder [examples](examples) for application examples. - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py deleted file mode 100644 index 99644cfe68..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/TurbSimCaseCreation.py +++ /dev/null @@ -1,399 +0,0 @@ -# -*- coding: utf-8 -*- -""" - - The x-y extents of the box are large enough to accomodate all turbines - - The z extent is large enough to include the rotor, start from the user specified `zbot`, - and accomodates for the meandering in the vertical direction . - - The dy and dz resolution is set of the maximum chord of the turbine - - The dt resolution is set based on the maximum frequency expected to be relevant for dynamics - -@author: kshaler -""" -import os, glob, struct -import numpy as np - -class TSCaseCreation: - - def __init__(self, D, HubHt, Vhub, TI, PLexp, x, y, z=None, zbot=1.0, cmax=5.0, fmax=5.0, - Cmeander=1.9, boxType='highres', high_ext=1.2, low_ext=None, ds_low=None): - """ - Instantiate the object. - - Parameters - ---------- - D : float, - rotor diameter (m) - HubHt : float, - turbine hub height (m) - Vhub : float, - mean wind speed at hub height (m/s) - TI : float, - turbulence intensity at hub height - PLexp : float, - power law exponent for shear (-) - x, y, z : float, - x-, y-, and z-location of turbine, respectively - if z is None, z is set to 0 - cmax : float, - maximum blade chord (m). If not specified, set to NREL 5MW value. - fmax : float, - maximum excitation frequency (Hz). If not specified set to NREL 5MW tower value. - boxType : str, - box type, either 'lowres' or 'highres'. Sets the appropriate dt, dy, and dz for discretization - Defaults to `highres` for backward compatibility - high_ext : float - extent of the high-res box around individual turbines (in D). This is the total length - low_ext : list of floats [xmin, xmax, ymin, ymax, zabovehub] - extents for the low-res box. All values should be positive If not specified, resorts to - computations by the manual - """ - - # Perform some checks on the input - if low_ext is not None and len(low_ext) != 5: - raise ValueError('low_ext not defined properly. It should be [xmin, xmax, ymin, ymax, zabovehub]') - - if low_ext is None: - manual_mode = False - else: - manual_mode = True - - if ds_low is None: - manual_ds_low = False - else: - manual_ds_low = True - - # Set parameters for convenience - self.Cmeander = Cmeander - self.boxType = boxType - self.high_ext = high_ext - self.low_ext = low_ext - self.ds_low = ds_low - # Turbine parameters - self.Turb(D, HubHt, cmax, fmax) - # Turbine location - self.turbLocs(x,y,z) - # Discretization - self.discretization(Vhub, TI, PLexp, manual_ds_low) - # Setup domain size - self.domainSize(zbot=zbot, manual_mode=manual_mode) - # Determine origin - # self.originLoc() - - def Turb(self, D, HubHt, cmax=5.0, fmax=5.0): - """ - Define turbine parameters - - Parameters - __________ - D : float, - rotor diameter (m) - HubHt : float, - turbine hub height (m) - tpath : string, - path to base turbine location (.fst) - cmax : float, - maximum blade chord (m). If not specified, set to NREL 5MW value. - fmax : float, - maximum excitation frequency (Hz). If not specified set to NREL 5MW tower value. - """ - - self.D = D - self.RefHt = HubHt - self.cmax = cmax - self.fmax = fmax - - def turbLocs(self,x,y,z=None): - """ - Specify turbine locations - - Parameters - ---------- - x, y, z : float, - x-, y-, and z-location of turbine, respectively - """ - self.x = np.asarray(x) - self.y = np.asarray(y) - if z is None: - self.z = np.asarray(y)*0 - else: - self.z = np.asarray(z) - - def discretization(self, Vhub, TI, Shear, manual_ds_low=False): - ''' - Specify discretization for both the high-res and low-res boxes. Follows guidelines present at - https://openfast.readthedocs.io/en/main/source/user/fast.farm/ModelGuidance.html#low-resolution-domain - - ''' - - self.URef = Vhub - self.TI = TI - self.PLexp = Shear - - # Derived properties - if self.boxType == 'lowres': - self.dt = self.Cmeander*self.D/(10*Vhub) - ds_low = self.Cmeander*self.D*Vhub/150 - if manual_ds_low: - ds_low = self.ds_low - ds_high = self.cmax - self.dy = np.floor(ds_low/ds_high)*ds_high - self.dz = np.floor(ds_low/ds_high)*ds_high - #self.dt = 1.0/(2.0*self.fmax) - #self.dy = self.cmax - #self.dz = self.cmax - - elif self.boxType == 'highres': - self.dt = 1.0/(2.0*self.fmax) - self.dy = self.cmax - self.dz = self.cmax - - else: - raise ValueError("boxType can only be 'lowres' or 'highres'. Stopping.") - - def domainSize(self, zbot, manual_mode=False): - - # Set default - self.ymin = None - self.ymax = None - - if self.boxType == 'lowres': - if manual_mode: - self.ymin = min(self.y) - self.low_ext[2]*self.D - self.ymax = max(self.y) + self.low_ext[3]*self.D - Zdist_Low = self.RefHt + self.low_ext[4]*self.D - else: - self.ymin = min(self.y)-2.23313*self.Cmeander*self.D/2 # JJ: I don't recall where these recommendations came from. I can't find them on the modelling guidance document - self.ymax = max(self.y)+2.23313*self.Cmeander*self.D/2 # JJ: I only see the y0_Low <= WT_Y_min -3*D recommendation - Zdist_Low = self.RefHt + self.D/2 + 2.23313*self.Cmeander*self.D/2 # JJ: ditto - - Ydist_Low = self.ymax - self.ymin - - self.ny = np.ceil(Ydist_Low/self.dy)+1 - self.nz = np.ceil(Zdist_Low/self.dz)+1 - - # We need to make sure the number of points is odd. - if self.ny%2 == 0: - self.ny += 1 - if self.nz%2 == 0: - self.nz += 1 - - - self.Width = self.dy*(self.ny-1) - self.Height = self.dz*(self.nz-1) - - Dgrid=min(self.Height,self.Width) - - # Set the hub height using half of the total grid height - self.HubHt_for_TS = zbot - 0.5*Dgrid + self.Height - - elif self.boxType=='highres': - Ydist_high = self.high_ext*self.D - Zdist_high = self.RefHt + self.high_ext*self.D/2 - zbot - - self.ny = np.ceil(Ydist_high/self.dy)+1 - self.nz = np.ceil(Zdist_high/self.dz)+1 - - # We need to make sure the number of points is odd. - if self.ny%2 == 0: - self.ny += 1 - if self.nz%2 == 0: - self.nz += 1 - - self.Width = self.dy*(self.ny-1) - self.Height = self.dz*(self.nz-1) - - Dgrid = min(self.Height,self.Width) - - # Set the hub height using half of the total grid height - self.HubHt_for_TS = zbot - 0.5*Dgrid + self.Height - - else: - raise ValueError("boxType can only be 'lowres' or 'highres'. Stopping.") - - - def originLoc(self): - raise NotImplementedError - - - - def plotSetup(self, fig=None, ax=None): - """ Plot a figure showing the turbine locations and the extent of the turbulence box""" - if fig is None: - import matplotlib.pyplot as plt - fig = plt.figure(figsize=(6,5)) - ax = fig.add_subplot(111,aspect="equal") - xmin = min(self.x)-self.D - xmax = max(self.x)+self.D - - # high-res boxes - for wt in range(len(self.x)): - ax.plot(self.x[wt],self.y[wt],'x',ms=8,mew=2,label=f"WT{wt+1}") - - # low-res box - # ax.plot([xmin,xmax,xmax,xmin,xmin], - # [ymin,ymin,ymax,ymax,ymin],'--k',lw=2,label='Low') - if self.ymin is not None: - ax.axhline(self.ymin, ls='--', c='k', lw=2, label='Low') - if self.ymax is not None: - ax.axhline(self.ymax, ls='--', c='k', lw=2) - - ax.legend(bbox_to_anchor=(1.05,1.015),frameon=False) - ax.set_xlabel("x-location [m]") - ax.set_ylabel("y-location [m]") - fig.tight_layout - return fig, ax - - def writeTSFile(self, fileIn, fileOut, NewFile=True, tpath=None, tmax=50, turb=None, verbose=0): - """ Write a TurbSim primary input file, - See WriteTSFile below. - """ - WriteTSFile(fileIn, fileOut, self, NewFile=NewFile, tpath=tpath, tmax=tmax, turb=turb, verbose=verbose) - - - -def WriteTSFile(fileIn, fileOut, params, NewFile=True, tpath=None, tmax=50, turb=None, verbose=0): - """ Write a TurbSim primary input file, - - tpath: string, - path to base turbine location (.fst) - only used if NewFile is False - boxType: string, - Box type, either 'lowres' or 'highres'. Writes the proper `TurbModel` - if boxType=='highres', `turb` needs to be specified - turb: int, - turbine number to be printed on the time series file. Only needed - if boxType='highres' - - """ - - if params.boxType=='highres' and not isinstance(turb, int): - raise ValueError("turb needs to be an integer when boxType is 'highres'") - if params.boxType=='lowres' and turb is not None: - print("WARNING: `turb` is not used when boxType is 'lowres'. Remove `turb` to dismiss this warning.") - - if NewFile == True: - if verbose>1: print(f'Writing a new {fileOut} file from scratch') - # --- Writing FFarm input file from scratch - with open(fileOut, 'w') as f: - f.write(f'--------TurbSim v2.00.* Input File------------------------\n') - f.write(f'for Certification Test #1 (Kaimal Spectrum, formatted FF files).\n') - f.write(f'---------Runtime Options-----------------------------------\n') - f.write(f'False\tEcho\t\t- Echo input data to .ech (flag)\n') - f.write(f'123456\tRandSeed1\t\t- First random seed (-2147483648 to 2147483647)\n') - f.write(f'RanLux\tRandSeed2\t\t- Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW"\n') - f.write(f'False\tWrBHHTP\t\t- Output hub-height turbulence parameters in binary form? (Generates RootName.bin)\n') - f.write(f'False\tWrFHHTP\t\t- Output hub-height turbulence parameters in formatted form? (Generates RootName.dat)\n') - f.write(f'False\tWrADHH\t\t- Output hub-height time-series data in AeroDyn form? (Generates RootName.hh)\n') - f.write(f'True\tWrADFF\t\t- Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts)\n') - f.write(f'False\tWrBLFF\t\t- Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd)\n') - f.write(f'False\tWrADTWR\t\t- Output tower time-series data? (Generates RootName.twr)\n') - f.write(f'False\tWrFMTFF\t\t- Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w)\n') - f.write(f'False\tWrACT\t\t- Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts)\n') - f.write(f'True\tClockwise\t\t- Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn)\n') - f.write(f'0\tScaleIEC\t\t- Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales]\n') - f.write(f'\n') - f.write(f'--------Turbine/Model Specifications-----------------------\n') - f.write(f'{params.nz:.0f}\tNumGrid_Z\t\t- Vertical grid-point matrix dimension\n') - f.write(f'{params.ny:.0f}\tNumGrid_Y\t\t- Horizontal grid-point matrix dimension\n') - f.write(f'{params.dt:.6f}\tTimeStep\t\t- Time step [seconds]\n') - f.write(f'{tmax:.4f}\tAnalysisTime\t\t- Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) )\n') - f.write(f'"ALL"\tUsableTime\t\t- Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL")\n') - f.write(f'{params.HubHt_for_TS:.3f}\tHubHt\t\t- Hub height [m] (should be > 0.5*GridHeight)\n') - f.write(f'{params.Height:.3f}\tGridHeight\t\t- Grid height [m]\n') - f.write(f'{params.Width:.3f}\tGridWidth\t\t- Grid width [m] (should be >= 2*(RotorRadius+ShaftLength))\n') - f.write(f'0\tVFlowAng\t\t- Vertical mean flow (uptilt) angle [degrees]\n') - f.write(f'0\tHFlowAng\t\t- Horizontal mean flow (skew) angle [degrees]\n') - f.write(f'\n') - f.write(f'--------Meteorological Boundary Conditions-------------------\n') - if params.boxType=='lowres': - f.write(f'"IECKAI"\tTurbModel\t\t- Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","IECKAI","TIMESR", or "NONE")\n') - f.write(f'"unused"\tUserFile\t\t- Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "IECKAI" and "TIMESR" models)\n') - elif params.boxType=='highres': - f.write(f'"TIMESR"\tTurbModel\t\t- Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","TIMESR", or "NONE")\n') - f.write(f'"USRTimeSeries_T{turb}.txt"\tUserFile\t\t- Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "IECKAI" and "TIMESR" models)\n') - else: - raise ValueError("boxType can only be 'lowres' or 'highres'. Stopping.") - f.write(f'1\tIECstandard\t\t- Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") )\n') - f.write(f'"{params.TI:.3f}\t"\tIECturbc\t\t- IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models)\n') - f.write(f'"NTM"\tIEC_WindType\t\t- IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3)\n') - f.write(f'"default"\tETMc\t\t- IEC Extreme Turbulence Model "c" parameter [m/s]\n') - f.write(f'"PL"\tWindProfileType\t\t- Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"PL";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default")\n') - f.write(f'"unused"\tProfileFile\t\t- Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-]\n') - f.write(f'{params.RefHt:.3f}\tRefHt\t\t- Height of the reference velocity (URef) [m]\n') - f.write(f'{params.URef:.3f}\tURef\t\t- Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds]\n') - f.write(f'350\tZJetMax\t\t- Jet height [m] (used only for JET velocity profile, valid 70-490 m)\n') - f.write(f'"{params.PLexp:.3f}"\tPLExp\t\t- Power law exponent [-] (or "default")\n') - f.write(f'"default"\tZ0\t\t- Surface roughness length [m] (or "default")\n') - f.write(f'\n') - f.write(f'--------Non-IEC Meteorological Boundary Conditions------------\n') - f.write(f'"default"\tLatitude\t\t- Site latitude [degrees] (or "default")\n') - f.write(f'0.05\tRICH_NO\t\t- Gradient Richardson number [-]\n') - f.write(f'"default"\tUStar\t\t- Friction or shear velocity [m/s] (or "default")\n') - f.write(f'"default"\tZI\t\t- Mixing layer depth [m] (or "default")\n') - f.write(f'"default"\tPC_UW\t\t- Hub mean u\'w\' Reynolds stress [m^2/s^2] (or "default" or "none")\n') - f.write(f'"default"\tPC_UV\t\t- Hub mean u\'v\' Reynolds stress [m^2/s^2] (or "default" or "none")\n') - f.write(f'"default"\tPC_VW\t\t- Hub mean v\'w\' Reynolds stress [m^2/s^2] (or "default" or "none")\n') - f.write(f'\n') - f.write(f'--------Spatial Coherence Parameters----------------------------\n') - f.write(f'"IEC"\tSCMod1\t\t- u-component coherence model ("GENERAL","IEC","API","NONE", or "default")\n') - f.write(f'"IEC"\tSCMod2\t\t- v-component coherence model ("GENERAL","IEC","NONE", or "default")\n') - f.write(f'"IEC"\tSCMod3\t\t- w-component coherence model ("GENERAL","IEC","NONE", or "default")\n') - f.write(f'"12.0 {0.12/(8.1*42):.8f}"\tInCDec1\t- u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n') - f.write(f'"12.0 {0.12/(8.1*42):.8f}"\tInCDec2\t- v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n') - f.write(f'"12.0 {0.12/(8.1*42):.8f}"\tInCDec3\t- w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default")\n') - f.write(f'"0.0"\tCohExp\t\t- Coherence exponent for general model [-] (or "default")\n') - f.write(f'\n') - f.write(f'--------Coherent Turbulence Scaling Parameters-------------------\n') - f.write(f'".\\EventData"\tCTEventPath\t\t- Name of the path where event data files are located\n') - f.write(f'"random"\tCTEventFile\t\t- Type of event files ("LES", "DNS", or "RANDOM")\n') - f.write(f'true\tRandomize\t\t- Randomize the disturbance scale and locations? (true/false)\n') - f.write(f'1\tDistScl\t\t- Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.)\n') - f.write(f'0.5\tCTLy\t\t- Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.)\n') - f.write(f'0.5\tCTLz\t\t- Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.)\n') - f.write(f'30\tCTStartTime\t\t- Minimum start time for coherent structures in RootName.cts [seconds]\n') - f.write(f'\n') - f.write(f'====================================================\n') - f.write(f'! NOTE: Do not add or remove any lines in this file!\n') - f.write(f'====================================================\n') - - else: - print(f'Modifying {fileIn} to be {fileOut}') - - NewPars = [int(params.nz), int(params.ny), int(params.dt), format(params.HubHt,'.2f'), format(params.Height,'.2f'), format(params.Width,'.2f'), format(params.TI,'.2f'), format(params.RefHt,'.2f'), format(params.URef,'.2f'), int(params.PLexp)] - ModVars = ['NumGrid_Z','NumGrid_Y','TimeStep','HubHt','GridHeight','GridWidth','IECturb','RefHt','URef','PLExp'] - wt=0 - with open(fileOut, 'w+') as new_file: - with open(fileIn) as old_file: - for line in old_file.readlines(): - newline = line - for index,tmpVar in enumerate(ModVars): - if tmpVar in line: - newline = str(NewPars[index])+'\t!!Orig is: '+line - if '.fst' in line: - newline =str('{params.x[wt]:.3f}\t\t{params.y[wt]:.3f}\t\t{params.z[wt]:.3f}\t\t{tpath}_WT{wt+1:d}.fst"\t{params.X0_High[wt]:.3f}\t\t{params.Y0_High[wt]:.3f}\t\t{params.Z0_High:.3f}\t\t{params.dX_High:.3f}\t\t{params.dY_High:.3f}\t\t{params.dZ_High:.3f}\n') - wt+=1 - new_file.write(newline) - - -def writeTimeSeriesFile(fileOut,yloc,zloc,u,v,w,time): - """ Write a TurbSim primary input file, - - """ - - print(f'Writing {fileOut}') - # --- Writing TurbSim user-defined time series file - with open(fileOut, 'w') as f: - f.write( '--------------TurbSim v2.00.* User Time Series Input File-----------------------\n') - f.write( ' Time series input from low-res turbsim run\n') - f.write( '--------------------------------------------------------------------------------\n') - f.write( ' 3 nComp - Number of velocity components in the file\n') - f.write( ' 1 nPoints - Number of time series points contained in this file (-)\n') - f.write( ' 1 RefPtID - Index of the reference point (1-nPoints)\n') - f.write( ' Pointyi Pointzi ! nPoints listed in order of increasing height\n') - f.write( ' (m) (m)\n') - f.write(f' {yloc:.5f} {zloc:.5f}\n') - f.write( '--------Time Series-------------------------------------------------------------\n') - f.write( 'Elapsed Time Point01u Point01v Point01w\n') - f.write( ' (s) (m/s) (m/s) (m/s)\n') - for i in range(len(time)): - f.write(f'\t{time[i]:.2f}\t\t\t {u[i]:.5f}\t\t\t {v[i]:.5f}\t\t\t {w[i]:.5f}\n') - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py deleted file mode 100644 index c09f2f9cb4..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ - -from .fastfarm import * -from .TurbSimCaseCreation import TSCaseCreation - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py deleted file mode 100644 index c5fad1495f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex1_TurbSimInputSetup.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Create a TurbSim input file for a FAST.Farm simulation: - - The x-y extents of the box are large enough to accomodate all turbines - - The z extent is large enough to include the rotor, start from the user specified `zbot`, - and accomodates for the meandering in the vertical direction . - - The dy and dz resolution is set of the maximum chord of the turbine - - The dt resolution is set based on the maximum frequency expected to be relevant for dynamics -""" -import os, sys -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -# Local -from pyFAST.fastfarm.TurbSimCaseCreation import TSCaseCreation - -MyDir=os.path.dirname(__file__) - -# --- Define parameters necessary for this script -OldTSFile = os.path.join(MyDir, 'SampleFiles/TestCase.inp' ) # Template file used for TurbSim, need to exist -NewTSFile = os.path.join(MyDir, 'SampleFiles/_TestCase_mod.inp') # New file that will be written -D = 77.0 # Turbine diameter (m) -HubHt = 78.045 # Hub Height (m) -Vhub = 6 # mean wind speed at hub height (m/s) -TI = 10 # turbulence intensity at hub height -PLExp = 0.2 # power law exponent for shear (-) -xlocs = [0.0, 265.643] # x positions of turbines -ylocs = [0.0, 50.0 ] # y postitions of turbines - -# --- "Optional" inputs -cmax = 5 # maximum blade chord (m). Turbine specific. -fmax = 5.0 # maximum excitation frequency (Hz). Turbine specific, 5Hz is satisfactory for modern multi-MW turbine. -zbot = 1.0 # vertical start of the turbulence box (m). Depend on hub height and expected vertical meandering of wakes. -Cmeander = 1.9 # Meandering constant (-) - -# --- Use TurbSim Case Creation class to write a new TurbSim file -Case = TSCaseCreation(D, HubHt, Vhub, TI, PLExp, x=xlocs, y=ylocs, zbot=zbot, cmax=cmax, fmax=fmax, Cmeander=Cmeander) -# Rewrite TurbSim Input File -Case.writeTSFile(OldTSFile, NewTSFile, tmax=5, turb=1) -print('NOTE: run TurbSim to generate this new BTS file.') - -# --- Visualize low extent and turbine positions -fig, ax = Case.plotSetup() - - - - -if __name__ == '__main__': - plt.show() - -if __name__ == '__test__': - pass - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py deleted file mode 100644 index 2639140c45..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex2_FFarmInputSetup.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -Setup a FAST.Farm input file based on a TurbSim box. - -The extent of the high res and low res domain are setup according to the guidelines: - https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html - -NOTE: the box SampleFiles/TestCase.bts is not provided as part of this repository - Run TurbSim on SampleFiles/TestCase.inp to generate the box before running this example. - -""" -import os, sys -import numpy as np -import matplotlib.pyplot as plt -import pandas as pd -# Local packages -from pyFAST.fastfarm import fastFarmTurbSimExtent, writeFastFarm, plotFastFarmSetup -from pyFAST.input_output.fast_input_file import FASTInputFile - -MyDir=os.path.dirname(__file__) - -if __name__ == '__main__': - # --- FAST Farm input files - templateFSTF = os.path.join(MyDir,'SampleFiles/TestCase.fstf') # template file used for FastFarm input file, need to exist - outputFSTF = os.path.join(MyDir,'SampleFiles/_TestCase_mod.fstf')# new file that will be written - # --- Parameters for TurbSim Extent - D = 77.0 # Turbine diameter (m) - hubHeight = 78.045 # Hub Height (m) - extent_X_high = 1.2 # x-extent of high res box in diamter around turbine location - extent_YZ_high = 1.2 # y-extent of high res box in diamter around turbine location - chord_max = 5 # maximum blade chord (m). Turbine specific. - Cmeander = 1.9 # Meandering constant (-) - BTSFilename = os.path.join(MyDir,'SampleFiles/TestCase.bts') # TurbSim Box to be used in FAST.Farm simulation, need to exist. - # --- Layout - xWT = [0.0, 265.] # x positions of turbines - yWT = [0.0, 50.0] # y postitions of turbines - zWT = [0.0, 0.0 ] # z postitions of turbines - # --- Output list for turbine 1 (will be replicated for other turbines) - #OutList_Sel=[ - # 'RtAxsXT1, RtAxsYT1, RtAxsZT1', - # 'RtPosXT1, RtPosYT1, RtPosZT1', - # 'RtDiamT1', - # 'YawErrT1', - # "TIAmbT1", - # 'RtVAmbT1', - # 'RtVRelT1', - # 'W1VAmbX, W1VAmbY, W1VAmbZ'] - OutList_Sel=None - - # --- Get box extents - FFTS = fastFarmTurbSimExtent(BTSFilename, hubHeight, D, xWT, yWT, Cmeander=Cmeander, chord_max=chord_max, extent_X=extent_X_high, extent_YZ=extent_YZ_high, meanUAtHubHeight=True) - - # --- Write Fast Farm file with layout and Low and High res extent - writeFastFarm(outputFSTF, templateFSTF, xWT, yWT, zWT, FFTS=FFTS, OutListT1=OutList_Sel) - print('Output file:',outputFSTF) - - # --- Visualize low&high extent and turbine positions - fig = plotFastFarmSetup(outputFSTF, grid=True, D=D, hubHeight=hubHeight, plane='XY') - fig = plotFastFarmSetup(outputFSTF, grid=True, D=D, hubHeight=hubHeight, plane='XZ') - fig = plotFastFarmSetup(outputFSTF, grid=True, D=D, hubHeight=hubHeight, plane='YZ') - - # --- Finer tuning - #fst = FASTInputFile(outputFSTF) - #fst['InflowFile']='"../Inflow/{}_IW.dat"'.format(Case) - #fst['WrDisDT']=1.0 - #fst['DT']=1.0 - #fst.write(outputFile) - plt.show() - - - -if __name__ == '__test__': - # This example cannot be run as a test case because the BTS file is not provided in the repository - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py deleted file mode 100644 index 91c568cae0..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex3_FFarmCompleteSetup.py +++ /dev/null @@ -1,161 +0,0 @@ -""" -Setup a FAST.Farm suite of cases based on input parameters. - -The extent of the high res and low res domain are setup according to the guidelines: - https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html - -NOTE: If driving FAST.Farm using TurbSim inflow, the resulting boxes are necessary to - build the final FAST.Farm case and are not provided as part of this repository. - If driving FAST.Farm using LES inflow, the VTK boxes are not necessary to exist. - -""" - -from pyFAST.fastfarm.FASTFarmCaseCreation import FFCaseCreation - -def main(): - - # ----------------------------------------------------------------------------- - # USER INPUT: Modify these - # For the d{t,s}_{high,low}_les paramters, use AMRWindSimulation.py - # ----------------------------------------------------------------------------- - - # ----------- Case absolute path - path = '/complete/path/of/your/case' - - # ----------- General hard-coded parameters - cmax = 5 # maximum blade chord (m) - fmax = 10/6 # maximum excitation frequency (Hz) - Cmeander = 1.9 # Meandering constant (-) - - # ----------- Wind farm - D = 240 - zhub = 150 - wts = { - 0 :{'x':0.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 1 :{'x':1852.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 2 :{'x':3704.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 3 :{'x':5556.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 4 :{'x':7408.0, 'y':0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 5 :{'x':1852.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 6 :{'x':3704.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 7 :{'x':5556.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 8 :{'x':7408.0, 'y':1852.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 9 :{'x':3704.0, 'y':3704.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 10:{'x':5556.0, 'y':3704.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - 11:{'x':7408.0, 'y':3704.0, 'z':0.0, 'D':D, 'zhub':zhub, 'cmax':cmax, 'fmax':fmax, 'Cmeander':Cmeander}, - } - refTurb_rot = 0 - - # ----------- Additional variables - tmax = 1800 # Total simulation time - nSeeds = 6 # Number of different seeds - zbot = 1 # Bottom of your domain - mod_wake = 1 # Wake model. 1: Polar, 2: Curl, 3: Cartesian - - # ----------- Desired sweeps - vhub = [10] - shear = [0.2] - TIvalue = [10] - inflow_deg = [0] - - # ----------- Turbine parameters - # Set the yaw of each turbine for wind dir. One row for each wind direction. - yaw_init = [ [0,0,0,0,0,0,0,0,0,0,0,0] ] - - # ----------- Low- and high-res boxes parameters - # Should match LES if comparisons are to be made; otherwise, set desired values - # For an automatic computation of such parameters, omit them from the call to FFCaseCreation - # High-res boxes settings - dt_high_les = 0.6 # sampling frequency of high-res files - ds_high_les = 10.0 # dx, dy, dz that you want these high-res files at - extent_high = 1.2 # high-res box extent in y and x for each turbine, in D. - # Low-res boxes settings - dt_low_les = 3 # sampling frequency of low-res files - ds_low_les = 20.0 # dx, dy, dz of low-res files - extent_low = [3, 8, 3, 3, 2] # extent in xmin, xmax, ymin, ymax, zmax, in D - - - # ----------- Execution parameters - ffbin = '/full/path/to/your/binary/.../bin/FAST.Farm' - - # ----------- LES parameters. This variable will dictate whether it is a TurbSim-driven or LES-driven case - LESpath = '/full/path/to/the/LES/case' - #LESpath = None # set as None if TurbSim-driven is desired - - - # ----------------------------------------------------------------------------- - # ----------- Template files - templatePath = '/full/path/where/template/files/are' - - # Put 'unused' to any input that is not applicable to your case - # Files should be in templatePath - EDfilename = 'ElastoDyn.T' - SEDfilename = 'SimplifiedElastoDyn.T' - HDfilename = 'HydroDyn.dat' - SrvDfilename = 'ServoDyn.T' - ADfilename = 'AeroDyn.dat' - ADskfilename = 'AeroDisk.dat' - SubDfilename = 'SubDyn.dat' - IWfilename = 'InflowWind.dat' - BDfilepath = 'unused' - bladefilename = 'Blade.dat' - towerfilename = 'Tower.dat' - turbfilename = 'Model.T' - libdisconfilepath = '/full/path/to/controller/libdiscon.so' - controllerInputfilename = 'DISCON.IN' - coeffTablefilename = 'CpCtCq.csv' - FFfilename = 'Model_FFarm.fstf' - - # TurbSim setups - turbsimLowfilepath = './SampleFiles/template_Low_InflowXX_SeedY.inp' - turbsimHighfilepath = './SampleFiles/template_HighT1_InflowXX_SeedY.inp' - - # SLURM scripts - slurm_TS_high = './SampleFiles/runAllHighBox.sh' - slurm_TS_low = './SampleFiles/runAllLowBox.sh' - slurm_FF_single = './SampleFiles/runFASTFarm_cond0_case0_seed0.sh' - - - # ----------------------------------------------------------------------------- - # END OF USER INPUT - # ----------------------------------------------------------------------------- - - - # Initial setup - case = FFCaseCreation(path, wts, tmax, zbot, vhub, shear, TIvalue, inflow_deg, - dt_high_les, ds_high_les, extent_high, - dt_low_les, ds_low_les, extent_low, - ffbin, mod_wake, yaw_init, - nSeeds=nSeeds, LESpath=LESpath, - verbose=1) - - case.setTemplateFilename(templatePath, EDfilename, SEDfilename, HDfilename, SrvDfilename, ADfilename, - ADskfilename, SubDfilename, IWfilename, BDfilepath, bladefilename, towerfilename, - turbfilename, libdisconfilepath, controllerInputfilename, coeffTablefilename, - turbsimLowfilepath, turbsimHighfilepath, FFfilename) - - # Get domain paramters - case.getDomainParameters() - - # Organize file structure - case.copyTurbineFilesForEachCase() - - # TurbSim setup - if LESpath is None: - case.TS_low_setup() - case.TS_low_slurm_prepare(slurm_TS_low) - #case.TS_low_slurm_submit() - - case.TS_high_setup() - case.TS_high_slurm_prepare(slurm_TS_high) - #case.TS_high_slurm_submit() - - # Final setup - case.FF_setup() - case.FF_slurm_prepare(slurm_FF_single) - #case.FF_slurm_submit() - - -if __name__ == '__main__': - # This example cannot be fully run. - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py deleted file mode 100644 index 58b9ff7170..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/Ex4_AMRWindSamplingSetup.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Set up sampling planes for AMR-Wind to use for inflow winds. -""" - -from pyFAST.fastfarm.AMRWindSimulation import AMRWindSimulation - -def main(): - # ----------------------------------------------------------------------------- - # USER INPUT: Modify these - # ----------------------------------------------------------------------------- - - # ----------- Wind farm - wts = { - 0 :{'x':1280.0, 'y':2560, 'z':0.0, 'D':126.9, 'zhub':86.5, 'cmax':5, 'fmax':10/6, 'Cmeander':1.9, 'name':'T0'}, - 1 :{'x':1280.0, 'y':3200, 'z':0.0, 'D':126.9, 'zhub':86.5, 'cmax':5, 'fmax':10/6, 'Cmeander':1.9, 'name':'T1'}, - 2 :{'x':1280.0, 'y':3840, 'z':0.0, 'D':126.9, 'zhub':86.5, 'cmax':5, 'fmax':10/6, 'Cmeander':1.9, 'name':'T2'}, - } - - # ----------- AMR-Wind parameters - fixed_dt = 0.25 - prob_lo = (0.0, 0.0, 0.0) - prob_hi = (2560.0, 6400.0, 1280.0) - n_cell = (256, 640, 128) - max_level = 1 # Number of grid refinement levels - - incflo_velocity_hh = (0.0, 10.0, 0.0) # Hub-height velocity - postproc_name = 'sampling' - - # ----------- Wake model (1: Polar; 2: Curl; 3: Cartesian) - mod_wake = 1 - - # ----------------------------------------------------------------------------- - # END OF USER INPUT - # ----------------------------------------------------------------------------- - - # Initial setup - amr = AMRWindSimulation(wts, fixed_dt, prob_lo, prob_hi, - n_cell, max_level, incflo_velocity_hh, - postproc_name, - mod_wake = wake_mod) - - # You can print the complete instance by simply - print(amr) - - # The output of AMRWindSimulation can be directly used as input to FFCaseCreation: - # FFCaseCreation(..., dt_high_les=amr.dt_high_les, ds_high_les=amr.ds_high_les, - # dt_low_les=amr.dt_low_les, ds_low_les=amr.ds_low_les, - # extent_high=amr.extent_high, extent_low=amr.extent_low, - # ...) - -if __name__ == '__main__': - main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md deleted file mode 100644 index d3df9f6c3b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/README.md +++ /dev/null @@ -1,10 +0,0 @@ - - -Example 1: Create a TurbSim input file for a FAST.Farm simulation, with proper box extent parameters. - -Example 2: Setup the high and low res parameters of FAST.Farm input using a TurbSim box - -Example 3: Creation of complete setup of FAST.Farm, including TurbSim inputs for high- and low-res boxes. Combination of Examples 1 and 2 above. - - -NOTE: the interface of these scripts is still in a preliminary phase and might be updated in the future. diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf deleted file mode 100644 index c65111ddd1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.fstf +++ /dev/null @@ -1,112 +0,0 @@ -FAST.Farm v1.00.* INPUT FILE -Sample FAST.Farm input file ---- SIMULATION CONTROL --- -False Echo Echo input data to .ech? (flag) -FATAL AbortLevel Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} -2000.0 TMax Total run time (s) [>=0.0] -False UseSC Use a super controller? (flag) -2 Mod_AmbWind Ambient wind model (-) (switch) {1: high-fidelity precursor in VTK format, 2: InflowWind module} ---- SUPER CONTROLLER --- [used only for UseSC=True] -"SC_DLL.dll" SC_FileName Name/location of the dynamic library {.dll [Windows] or .so [Linux]} containing the Super Controller algorithms (quoated string) ---- AMBIENT WIND: PRECURSOR IN VTK FORMAT --- [used only for Mod_AmbWind=1] -2.0 DT_Low-VTK Time step for low -resolution wind data input files; will be used as the global FAST.Farm time step (s) [>0.0] -0.1 DT_High-VTK Time step for high-resolution wind data input files (s) [>0.0] -"unused" WindFilePath Path name to wind data files from precursor (string) -False ChkWndFiles Check all the ambient wind files for data consistency? (flag) ---- AMBIENT WIND: INFLOWWIND MODULE --- [used only for Mod_AmbWind=2 or 3] -2.0 DT_Low Time step for low -resolution wind data interpolation; will be used as the global FAST.Farm time step (s) [>0.0] -0.3333333 DT_High Time step for high-resolution wind data interpolation (s) [>0.0] -133 NX_Low Number of low -resolution spatial nodes in X direction for wind data interpolation (-) [>=2] -158 NY_Low Number of low -resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] -18 NZ_Low Number of low -resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] --231.0 X0_Low Origin of low -resolution spatial nodes in X direction for wind data interpolation (m) --714.55 Y0_Low Origin of low -resolution spatial nodes in Y direction for wind data interpolation (m) -1.0 Z0_Low Origin of low -resolution spatial nodes in Z direction for wind data interpolation (m) -10.0 dX_Low Spacing of low -resolution spatial nodes in X direction for wind data interpolation (m) [>0.0] -9.01 dY_Low Spacing of low -resolution spatial nodes in Y direction for wind data interpolation (m) [>0.0] -9.0 dZ_Low Spacing of low -resolution spatial nodes in Z direction for wind data interpolation (m) [>0.0] -29 NX_High Number of high-resolution spatial nodes in X direction for wind data interpolation (-) [>=2] -32 NY_High Number of high-resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] -54 NZ_High Number of high-resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] -"InflowWind.dat" InflowFile Name of file containing InflowWind module input parameters (quoted string) ---- WIND TURBINES --- -2 NumTurbines Number of wind turbines (-) [>=1] [last 6 columns used only for Mod_AmbWind=2] -WT_X WT_Y WT_Z WT_FASTInFile X0_High Y0_High Z0_High dX_High dY_High dZ_High -(m) (m) (m) (string) (m) (m) (m) (m) (m) (m) -16.926 -420.606 0.0 "../turbineModel/Test18_WT1.fst" -30.0 -507.39 1.0 3.33 3.0 3.0 -0.0 0.866 0.0 "../turbineModel/Test18_WT2.fst" -40.0 -45.03 1.0 3.33 3.0 3.0 ---- WAKE DYNAMICS --- -3.0 dr Radial increment of radial finite-difference grid (m) [>0.0] -50 NumRadii Number of radii in the radial finite-difference grid (-) [>=2] -44 NumPlanes Number of wake planes (-) [>=2] -DEFAULT f_c Cutoff (corner) frequency of the low-pass time-filter for the wake advection, deflection, and meandering model (Hz) [>0.0] or DEFAULT [DEFAULT=0.0007] -DEFAULT C_HWkDfl_O Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor (m ) or DEFAULT [DEFAULT= 0.0 ] -DEFAULT C_HWkDfl_OY Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor scaled with yaw error (m/deg) or DEFAULT [DEFAULT= 0.3 ] -DEFAULT C_HWkDfl_x Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance (- ) or DEFAULT [DEFAULT= 0.0 ] -DEFAULT C_HWkDfl_xY Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance and yaw error (1/deg) or DEFAULT [DEFAULT=-0.004] -DEFAULT C_NearWake Calibrated parameter for the near-wake correction (-) [>1.0 and <2.5] or DEFAULT [DEFAULT=1.8] -DEFAULT k_vAmb Calibrated parameter for the influence of ambient turbulence in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.05 ] -DEFAULT k_vShr Calibrated parameter for the influence of the shear layer in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.016] -DEFAULT C_vAmb_DMin Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 0.0 ] -DEFAULT C_vAmb_DMax Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vAmb_DMin ] or DEFAULT [DEFAULT= 1.0 ] -DEFAULT C_vAmb_FMin Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 1.0 ] -DEFAULT C_vAmb_Exp Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.01] -DEFAULT C_vShr_DMin Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 3.0 ] -DEFAULT C_vShr_DMax Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vShr_DMin ] or DEFAULT [DEFAULT=25.0 ] -DEFAULT C_vShr_FMin Calibrated parameter in the eddy viscosity filter function for the shear layer defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 0.2 ] -DEFAULT C_vShr_Exp Calibrated parameter in the eddy viscosity filter function for the shear layer defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.1 ] -DEFAULT Mod_WakeDiam Wake diameter calculation model (-) (switch) {1: rotor diameter, 2: velocity based, 3: mass-flux based, 4: momentum-flux based} or DEFAULT [DEFAULT=1] -DEFAULT C_WakeDiam Calibrated parameter for wake diameter calculation (-) [>0.0 and <0.99] or DEFAULT [DEFAULT=0.95] [unused for Mod_WakeDiam=1] -DEFAULT Mod_Meander Spatial filter model for wake meandering (-) (switch) {1: uniform, 2: truncated jinc, 3: windowed jinc} or DEFAULT [DEFAULT=3] -DEFAULT C_Meander Calibrated parameter for wake meandering (-) [>=1.0] or DEFAULT [DEFAULT=1.9] ---- VISUALIZATION --- -False WrDisWind Write low- and high-resolution disturbed wind data to .Low.Dis.t.vtk etc.? (flag) -1 NOutDisWindXY Number of XY planes for output of disturbed wind data across the low-resolution domain to .Low.DisXY.t.vtk (-) [0 to 9] -80.0 OutDisWindZ Z coordinates of XY planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXY] [unused for NOutDisWindXY=0] -0 NOutDisWindYZ Number of YZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisYZ.t.vtk (-) [0 to 9] -748.0, 1252.0, 1378.0, 1504.0, 1630.0, 1756.0, 1882.0, 2008.0 OutDisWindX X coordinates of YZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindYZ] [unused for NOutDisWindYZ=0] -0 NOutDisWindXZ Number of XZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisXZ.t.vtk (-) [0 to 9] -0.0 OutDisWindY Y coordinates of XZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXZ] [unused for NOutDisWindXZ=0] -DEFAULT WrDisDT Time step for disturbed wind visualization output (s) [>0.0] or DEFAULT [DEFAULT=DT_Low or DT_Low-VTK] [unused for WrDisWind=False and NOutDisWindXY=NOutDisWindYZ=NOutDisWindXZ=0] ---- OUTPUT --- -True SumPrint Print summary data to .sum? (flag) -99999.9 ChkptTime Amount of time between creating checkpoint files for potential restart (s) [>0.0] -200.0 TStart Time to begin tabular output (s) [>=0.0] -1 OutFileFmt Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both} -True TabDelim Use tab delimiters in text tabular output file? (flag) {uses spaces if False} -"ES10.3E2" OutFmt Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) -20 NOutRadii Number of radial nodes for wake output for an individual rotor (-) [0 to 20] -0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15, 16, 17, 18, 19, 21, 24, 28, 33, 39 OutRadii List of radial nodes for wake output for an individual rotor (-) [1 to NOutRadii] [unused for NOutRadii=0] -7 NOutDist Number of downstream distances for wake output for an individual rotor (-) [0 to 9 ] -252.0, 378.0, 504.0, 630.0, 756.0, 882.0, 1008.0 OutDist List of downstream distances for wake output for an individual rotor (m) [1 to NOutDist ] [unused for NOutDist =0] -1 NWindVel Number of points for wind output (-) [0 to 9] -0.0 WindVelX List of coordinates in the X direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] -0.0 WindVelY List of coordinates in the Y direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] -80.0 WindVelZ List of coordinates in the Z direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] - OutList The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels (quoted string) -"RtAxsXT1 , RtAxsYT1 , RtAxsZT1" -"RtPosXT1 , RtPosYT1 , RtPosZT1" -"YawErrT1" -"TIAmbT1" -"CtT1N01 , CtT1N02 , CtT1N03 , CtT1N04 , CtT1N05 , CtT1N06 , CtT1N07 , CtT1N08 , CtT1N09 , CtT1N10 , CtT1N11 , CtT1N12 , CtT1N13 , CtT1N14 , CtT1N15 , CtT1N16 , CtT1N17 , CtT1N18 , CtT1N19 , CtT1N20" -"WkAxsXT1D1 , WkAxsXT1D2 , WkAxsXT1D3 , WkAxsXT1D4 , WkAxsXT1D5 , WkAxsXT1D6 , WkAxsXT1D7" -"WkAxsYT1D1 , WkAxsYT1D2 , WkAxsYT1D3 , WkAxsYT1D4 , WkAxsYT1D5 , WkAxsYT1D6 , WkAxsYT1D7" -"WkAxsZT1D1 , WkAxsZT1D2 , WkAxsZT1D3 , WkAxsZT1D4 , WkAxsZT1D5 , WkAxsZT1D6 , WkAxsZT1D7" -"WkPosXT1D1 , WkPosXT1D2 , WkPosXT1D3 , WkPosXT1D4 , WkPosXT1D5 , WkPosXT1D6 , WkPosXT1D7" -"WkPosYT1D1 , WkPosYT1D2 , WkPosYT1D3 , WkPosYT1D4 , WkPosYT1D5 , WkPosYT1D6 , WkPosYT1D7" -"WkPosZT1D1 , WkPosZT1D2 , WkPosZT1D3 , WkPosZT1D4 , WkPosZT1D5 , WkPosZT1D6 , WkPosZT1D7" -"WkDfVxT1N01D1, WkDfVxT1N02D1, WkDfVxT1N03D1, WkDfVxT1N04D1, WkDfVxT1N05D1, WkDfVxT1N06D1, WkDfVxT1N07D1, WkDfVxT1N08D1, WkDfVxT1N09D1, WkDfVxT1N10D1, WkDfVxT1N11D1, WkDfVxT1N12D1, WkDfVxT1N13D1, WkDfVxT1N14D1, WkDfVxT1N15D1, WkDfVxT1N16D1, WkDfVxT1N17D1, WkDfVxT1N18D1, WkDfVxT1N19D1, WkDfVxT1N20D1" -"WkDfVxT1N01D2, WkDfVxT1N02D2, WkDfVxT1N03D2, WkDfVxT1N04D2, WkDfVxT1N05D2, WkDfVxT1N06D2, WkDfVxT1N07D2, WkDfVxT1N08D2, WkDfVxT1N09D2, WkDfVxT1N10D2, WkDfVxT1N11D2, WkDfVxT1N12D2, WkDfVxT1N13D2, WkDfVxT1N14D2, WkDfVxT1N15D2, WkDfVxT1N16D2, WkDfVxT1N17D2, WkDfVxT1N18D2, WkDfVxT1N19D2, WkDfVxT1N20D2" -"WkDfVxT1N01D3, WkDfVxT1N02D3, WkDfVxT1N03D3, WkDfVxT1N04D3, WkDfVxT1N05D3, WkDfVxT1N06D3, WkDfVxT1N07D3, WkDfVxT1N08D3, WkDfVxT1N09D3, WkDfVxT1N10D3, WkDfVxT1N11D3, WkDfVxT1N12D3, WkDfVxT1N13D3, WkDfVxT1N14D3, WkDfVxT1N15D3, WkDfVxT1N16D3, WkDfVxT1N17D3, WkDfVxT1N18D3, WkDfVxT1N19D3, WkDfVxT1N20D3" -"WkDfVxT1N01D4, WkDfVxT1N02D4, WkDfVxT1N03D4, WkDfVxT1N04D4, WkDfVxT1N05D4, WkDfVxT1N06D4, WkDfVxT1N07D4, WkDfVxT1N08D4, WkDfVxT1N09D4, WkDfVxT1N10D4, WkDfVxT1N11D4, WkDfVxT1N12D4, WkDfVxT1N13D4, WkDfVxT1N14D4, WkDfVxT1N15D4, WkDfVxT1N16D4, WkDfVxT1N17D4, WkDfVxT1N18D4, WkDfVxT1N19D4, WkDfVxT1N20D4" -"WkDfVxT1N01D5, WkDfVxT1N02D5, WkDfVxT1N03D5, WkDfVxT1N04D5, WkDfVxT1N05D5, WkDfVxT1N06D5, WkDfVxT1N07D5, WkDfVxT1N08D5, WkDfVxT1N09D5, WkDfVxT1N10D5, WkDfVxT1N11D5, WkDfVxT1N12D5, WkDfVxT1N13D5, WkDfVxT1N14D5, WkDfVxT1N15D5, WkDfVxT1N16D5, WkDfVxT1N17D5, WkDfVxT1N18D5, WkDfVxT1N19D5, WkDfVxT1N20D5" -"WkDfVxT1N01D6, WkDfVxT1N02D6, WkDfVxT1N03D6, WkDfVxT1N04D6, WkDfVxT1N05D6, WkDfVxT1N06D6, WkDfVxT1N07D6, WkDfVxT1N08D6, WkDfVxT1N09D6, WkDfVxT1N10D6, WkDfVxT1N11D6, WkDfVxT1N12D6, WkDfVxT1N13D6, WkDfVxT1N14D6, WkDfVxT1N15D6, WkDfVxT1N16D6, WkDfVxT1N17D6, WkDfVxT1N18D6, WkDfVxT1N19D6, WkDfVxT1N20D6" -"WkDfVxT1N01D7, WkDfVxT1N02D7, WkDfVxT1N03D7, WkDfVxT1N04D7, WkDfVxT1N05D7, WkDfVxT1N06D7, WkDfVxT1N07D7, WkDfVxT1N08D7, WkDfVxT1N09D7, WkDfVxT1N10D7, WkDfVxT1N11D7, WkDfVxT1N12D7, WkDfVxT1N13D7, WkDfVxT1N14D7, WkDfVxT1N15D7, WkDfVxT1N16D7, WkDfVxT1N17D7, WkDfVxT1N18D7, WkDfVxT1N19D7, WkDfVxT1N20D7" -"WkDfVrT1N01D1, WkDfVrT1N02D1, WkDfVrT1N03D1, WkDfVrT1N04D1, WkDfVrT1N05D1, WkDfVrT1N06D1, WkDfVrT1N07D1, WkDfVrT1N08D1, WkDfVrT1N09D1, WkDfVrT1N10D1, WkDfVrT1N11D1, WkDfVrT1N12D1, WkDfVrT1N13D1, WkDfVrT1N14D1, WkDfVrT1N15D1, WkDfVrT1N16D1, WkDfVrT1N17D1, WkDfVrT1N18D1, WkDfVrT1N19D1, WkDfVrT1N20D1" -"WkDfVrT1N01D2, WkDfVrT1N02D2, WkDfVrT1N03D2, WkDfVrT1N04D2, WkDfVrT1N05D2, WkDfVrT1N06D2, WkDfVrT1N07D2, WkDfVrT1N08D2, WkDfVrT1N09D2, WkDfVrT1N10D2, WkDfVrT1N11D2, WkDfVrT1N12D2, WkDfVrT1N13D2, WkDfVrT1N14D2, WkDfVrT1N15D2, WkDfVrT1N16D2, WkDfVrT1N17D2, WkDfVrT1N18D2, WkDfVrT1N19D2, WkDfVrT1N20D2" -"WkDfVrT1N01D3, WkDfVrT1N02D3, WkDfVrT1N03D3, WkDfVrT1N04D3, WkDfVrT1N05D3, WkDfVrT1N06D3, WkDfVrT1N07D3, WkDfVrT1N08D3, WkDfVrT1N09D3, WkDfVrT1N10D3, WkDfVrT1N11D3, WkDfVrT1N12D3, WkDfVrT1N13D3, WkDfVrT1N14D3, WkDfVrT1N15D3, WkDfVrT1N16D3, WkDfVrT1N17D3, WkDfVrT1N18D3, WkDfVrT1N19D3, WkDfVrT1N20D3" -"WkDfVrT1N01D4, WkDfVrT1N02D4, WkDfVrT1N03D4, WkDfVrT1N04D4, WkDfVrT1N05D4, WkDfVrT1N06D4, WkDfVrT1N07D4, WkDfVrT1N08D4, WkDfVrT1N09D4, WkDfVrT1N10D4, WkDfVrT1N11D4, WkDfVrT1N12D4, WkDfVrT1N13D4, WkDfVrT1N14D4, WkDfVrT1N15D4, WkDfVrT1N16D4, WkDfVrT1N17D4, WkDfVrT1N18D4, WkDfVrT1N19D4, WkDfVrT1N20D4" -"WkDfVrT1N01D5, WkDfVrT1N02D5, WkDfVrT1N03D5, WkDfVrT1N04D5, WkDfVrT1N05D5, WkDfVrT1N06D5, WkDfVrT1N07D5, WkDfVrT1N08D5, WkDfVrT1N09D5, WkDfVrT1N10D5, WkDfVrT1N11D5, WkDfVrT1N12D5, WkDfVrT1N13D5, WkDfVrT1N14D5, WkDfVrT1N15D5, WkDfVrT1N16D5, WkDfVrT1N17D5, WkDfVrT1N18D5, WkDfVrT1N19D5, WkDfVrT1N20D5" -"WkDfVrT1N01D6, WkDfVrT1N02D6, WkDfVrT1N03D6, WkDfVrT1N04D6, WkDfVrT1N05D6, WkDfVrT1N06D6, WkDfVrT1N07D6, WkDfVrT1N08D6, WkDfVrT1N09D6, WkDfVrT1N10D6, WkDfVrT1N11D6, WkDfVrT1N12D6, WkDfVrT1N13D6, WkDfVrT1N14D6, WkDfVrT1N15D6, WkDfVrT1N16D6, WkDfVrT1N17D6, WkDfVrT1N18D6, WkDfVrT1N19D6, WkDfVrT1N20D6" -"WkDfVrT1N01D7, WkDfVrT1N02D7, WkDfVrT1N03D7, WkDfVrT1N04D7, WkDfVrT1N05D7, WkDfVrT1N06D7, WkDfVrT1N07D7, WkDfVrT1N08D7, WkDfVrT1N09D7, WkDfVrT1N10D7, WkDfVrT1N11D7, WkDfVrT1N12D7, WkDfVrT1N13D7, WkDfVrT1N14D7, WkDfVrT1N15D7, WkDfVrT1N16D7, WkDfVrT1N17D7, WkDfVrT1N18D7, WkDfVrT1N19D7, WkDfVrT1N20D7" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp deleted file mode 100644 index a24cedbe28..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/TestCase.inp +++ /dev/null @@ -1,74 +0,0 @@ ---------TurbSim v2.00.* Input File------------------------ -for Certification Test #1 (Kaimal Spectrum, formatted FF files). ----------Runtime Options----------------------------------- -False Echo - Echo input data to .ech (flag) -123456 RandSeed1 - First random seed (-2147483648 to 2147483647) -RanLux RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" -False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) -False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) -False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) -True WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) -False WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) -False WrADTWR - Output tower time-series data? (Generates RootName.twr) -False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) -False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) -True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) -0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] - ---------Turbine/Model Specifications----------------------- -57 NumGrid_Z - Vertical grid-point matrix dimension -76 NumGrid_Y - Horizontal grid-point matrix dimension -0.100000 TimeStep - Time step [seconds] -5.0000 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) -"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") -141.000 HubHt - Hub height [m] (should be > 0.5*GridHeight) -280.000 GridHeight - Grid height [m] -375.000 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) -0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] -0 HFlowAng - Horizontal mean flow (skew) angle [degrees] - ---------Meteorological Boundary Conditions------------------- -"IECKAI" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","USRVKM","TIMESR", or "NONE") -"unused" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models) -1 IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) -"10.000 " IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) -"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) -"default" ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] -"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"PL";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") -"PowerLaw_6ms02.dat" ProfileFile - Name of the file that contains input profiles for WindProfileType="PL" and/or TurbModel="USRVKM" [-] -78.045 RefHt - Height of the reference velocity (URef) [m] -6.000 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] -350 ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) -"0.200" PLExp - Power law exponent [-] (or "default") -"default" Z0 - Surface roughness length [m] (or "default") - ---------Non-IEC Meteorological Boundary Conditions------------ -"default" Latitude - Site latitude [degrees] (or "default") -0.05 RICH_NO - Gradient Richardson number [-] -"default" UStar - Friction or shear velocity [m/s] (or "default") -"default" ZI - Mixing layer depth [m] (or "default") -"default" PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") -"default" PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") -"default" PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") - ---------Spatial Coherence Parameters---------------------------- -"IEC" SCMod1 - u-component coherence model ("GENERAL","IEC","API","NONE", or "default") -"IEC" SCMod2 - v-component coherence model ("GENERAL","IEC","NONE", or "default") -"IEC" SCMod3 - w-component coherence model ("GENERAL","IEC","NONE", or "default") -"12.0 0.000659" InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"12.0 0.000659" InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"12.0 0.000659" InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"0.0" CohExp - Coherence exponent for general model [-] (or "default") - ---------Coherent Turbulence Scaling Parameters------------------- -".\EventData" CTEventPath - Name of the path where event data files are located -"random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") -true Randomize - Randomize the disturbance scale and locations? (true/false) -1 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) -0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) -0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) -30 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] - -==================================================== -! NOTE: Do not add or remove any lines in this file! -==================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf deleted file mode 100644 index 40492632a8..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/_TestCase_mod.fstf +++ /dev/null @@ -1,113 +0,0 @@ -FAST.Farm v1.00.* - INPUT FILE -Sample FAST.Farm - input file ---- SIMULATION CONTROL --- -False Echo - Echo input data to .ech? (flag) -FATAL AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} -2000.0 TMax - Total run time (s) [>=0.0] -False UseSC - Use a super controller? (flag) -2 Mod_AmbWind - Ambient wind model (-) (switch) {1: high-fidelity precursor in VTK format, 2: InflowWind module} ---- SUPER CONTROLLER --- [used only for UseSC=True] -"SC_DLL.dll" SC_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} containing the Super Controller algorithms (quoated string) ---- AMBIENT WIND: PRECURSOR IN VTK FORMAT --- [used only for Mod_AmbWind=1] -2.0 DT_Low-VTK - Time step for low -resolution wind data input files; will be used as the global FAST.Farm time step (s) [>0.0] -0.1 DT_High-VTK - Time step for high-resolution wind data input files (s) [>0.0] -"unused" WindFilePath - Path name to wind data files from precursor (string) -False ChkWndFiles - Check all the ambient wind files for data consistency? (flag) ---- AMBIENT WIND: INFLOWWIND MODULE --- [used only for Mod_AmbWind=2 or 3] -2.4 DT_Low - Time step for low -resolution wind data interpolation; will be used as the global FAST.Farm time step (s) [>0.0] -0.1 DT_High - Time step for high-resolution wind data interpolation (s) [>0.0] -196 NX_Low - Number of low -resolution spatial nodes in X direction for wind data interpolation (-) [>=2] -75 NY_Low - Number of low -resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] -56 NZ_Low - Number of low -resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] --51.0 X0_Low - Origin of low -resolution spatial nodes in X direction for wind data interpolation (m) --188.0 Y0_Low - Origin of low -resolution spatial nodes in Y direction for wind data interpolation (m) -1 Z0_Low - Origin of low -resolution spatial nodes in Z direction for wind data interpolation (m) -4.775 dX_Low - Spacing of low -resolution spatial nodes in X direction for wind data interpolation (m) [>0.0] -5.0 dY_Low - Spacing of low -resolution spatial nodes in Y direction for wind data interpolation (m) [>0.0] -5 dZ_Low - Spacing of low -resolution spatial nodes in Z direction for wind data interpolation (m) [>0.0] -20 NX_High - Number of high-resolution spatial nodes in X direction for wind data interpolation (-) [>=2] -19 NY_High - Number of high-resolution spatial nodes in Y direction for wind data interpolation (-) [>=2] -25 NZ_High - Number of high-resolution spatial nodes in Z direction for wind data interpolation (-) [>=2] -"InflowWind.dat" InflowFile - Name of file containing InflowWind module input parameters (quoted string) ---- WIND TURBINES --- -2 NumTurbines - Number of wind turbines (-) [>=1] [last 6 columns used only for Mod_AmbWind=2] -WT_X WT_Y WT_Z WT_FASTInFile X0_High Y0_High Z0_High dX_High dY_High dZ_High -(m) (m) (m) (string) (m) (m) (m) (m) (m) (m) - 0 0 0 "../turbineModel/Test18_WT1.fst" -4.62254000e+01 -48 1 4.77460000e+00 5 5 - 265 50 0 "../turbineModel/Test18_WT2.fst" 2.16376700e+02 2 1 4.77460000e+00 5 5 ---- WAKE DYNAMICS --- -3.0 dr - Radial increment of radial finite-difference grid (m) [>0.0] -50 NumRadii - Number of radii in the radial finite-difference grid (-) [>=2] -44 NumPlanes - Number of wake planes (-) [>=2] -DEFAULT f_c - Cutoff (corner) frequency of the low-pass time-filter for the wake advection, deflection, and meandering model (Hz) [>0.0] or DEFAULT [DEFAULT=0.0007] -DEFAULT C_HWkDfl_O - Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor (m ) or DEFAULT [DEFAULT= 0.0 ] -DEFAULT C_HWkDfl_OY - Calibrated parameter in the correction for wake deflection defining the horizontal offset at the rotor scaled with yaw error (m/deg) or DEFAULT [DEFAULT= 0.3 ] -DEFAULT C_HWkDfl_x - Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance (- ) or DEFAULT [DEFAULT= 0.0 ] -DEFAULT C_HWkDfl_xY - Calibrated parameter in the correction for wake deflection defining the horizontal offset scaled with downstream distance and yaw error (1/deg) or DEFAULT [DEFAULT=-0.004] -DEFAULT C_NearWake - Calibrated parameter for the near-wake correction (-) [>1.0 and <2.5] or DEFAULT [DEFAULT=1.8] -DEFAULT k_vAmb - Calibrated parameter for the influence of ambient turbulence in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.05 ] -DEFAULT k_vShr - Calibrated parameter for the influence of the shear layer in the eddy viscosity (-) [>=0.0] or DEFAULT [DEFAULT=0.016] -DEFAULT C_vAmb_DMin - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 0.0 ] -DEFAULT C_vAmb_DMax - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vAmb_DMin ] or DEFAULT [DEFAULT= 1.0 ] -DEFAULT C_vAmb_FMin - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 1.0 ] -DEFAULT C_vAmb_Exp - Calibrated parameter in the eddy viscosity filter function for ambient turbulence defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.01] -DEFAULT C_vShr_DMin - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the minimum and exponential regions (-) [>=0.0 ] or DEFAULT [DEFAULT= 3.0 ] -DEFAULT C_vShr_DMax - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the transitional diameter fraction between the exponential and maximum regions (-) [> C_vShr_DMin ] or DEFAULT [DEFAULT=25.0 ] -DEFAULT C_vShr_FMin - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the value in the minimum region (-) [>=0.0 and <=1.0] or DEFAULT [DEFAULT= 0.2 ] -DEFAULT C_vShr_Exp - Calibrated parameter in the eddy viscosity filter function for the shear layer defining the exponent in the exponential region (-) [> 0.0 ] or DEFAULT [DEFAULT= 0.1 ] -DEFAULT Mod_WakeDiam - Wake diameter calculation model (-) (switch) {1: rotor diameter, 2: velocity based, 3: mass-flux based, 4: momentum-flux based} or DEFAULT [DEFAULT=1] -DEFAULT C_WakeDiam - Calibrated parameter for wake diameter calculation (-) [>0.0 and <0.99] or DEFAULT [DEFAULT=0.95] [unused for Mod_WakeDiam=1] -DEFAULT Mod_Meander - Spatial filter model for wake meandering (-) (switch) {1: uniform, 2: truncated jinc, 3: windowed jinc} or DEFAULT [DEFAULT=3] -DEFAULT C_Meander - Calibrated parameter for wake meandering (-) [>=1.0] or DEFAULT [DEFAULT=1.9] ---- VISUALIZATION --- -False WrDisWind - Write low- and high-resolution disturbed wind data to .Low.Dis.t.vtk etc.? (flag) -1 NOutDisWindXY - Number of XY planes for output of disturbed wind data across the low-resolution domain to .Low.DisXY.t.vtk (-) [0 to 9] -80.0 OutDisWindZ - Z coordinates of XY planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXY] [unused for NOutDisWindXY=0] -0 NOutDisWindYZ - Number of YZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisYZ.t.vtk (-) [0 to 9] -748.0, 1252.0, 1378.0, 1504.0, 1630.0, 1756.0, 1882.0, 2008.0 OutDisWindX - X coordinates of YZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindYZ] [unused for NOutDisWindYZ=0] -0 NOutDisWindXZ - Number of XZ planes for output of disturbed wind data across the low-resolution domain to /Low.DisXZ.t.vtk (-) [0 to 9] -0.0 OutDisWindY - Y coordinates of XZ planes for output of disturbed wind data across the low-resolution domain (m) [1 to NOutDisWindXZ] [unused for NOutDisWindXZ=0] -2.4 WrDisDT - Time step for disturbed wind visualization output (s) [>0.0] or DEFAULT [DEFAULT=DT_Low or DT_Low-VTK] [unused for WrDisWind=False and NOutDisWindXY=NOutDisWindYZ=NOutDisWindXZ=0] ---- OUTPUT --- -True SumPrint - Print summary data to .sum? (flag) -99999.9 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) [>0.0] -200.0 TStart - Time to begin tabular output (s) [>=0.0] -1 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both} -True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if False} -"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) -20 NOutRadii - Number of radial nodes for wake output for an individual rotor (-) [0 to 20] -0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15, 16, 17, 18, 19, 21, 24, 28, 33, 39 OutRadii - List of radial nodes for wake output for an individual rotor (-) [1 to NOutRadii] [unused for NOutRadii=0] -7 NOutDist - Number of downstream distances for wake output for an individual rotor (-) [0 to 9 ] -252.0, 378.0, 504.0, 630.0, 756.0, 882.0, 1008.0 OutDist - List of downstream distances for wake output for an individual rotor (m) [1 to NOutDist ] [unused for NOutDist =0] -1 NWindVel - Number of points for wind output (-) [0 to 9] -0.0 WindVelX - List of coordinates in the X direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] -0.0 WindVelY - List of coordinates in the Y direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] -80.0 WindVelZ - List of coordinates in the Z direction for wind output (m) [1 to NWindVel] [unused for NWindVel=0] - OutList The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels (quoted string) -"RtAxsXT1 , RtAxsYT1 , RtAxsZT1" -"RtPosXT1 , RtPosYT1 , RtPosZT1" -"YawErrT1" -"TIAmbT1" -"CtT1N01 , CtT1N02 , CtT1N03 , CtT1N04 , CtT1N05 , CtT1N06 , CtT1N07 , CtT1N08 , CtT1N09 , CtT1N10 , CtT1N11 , CtT1N12 , CtT1N13 , CtT1N14 , CtT1N15 , CtT1N16 , CtT1N17 , CtT1N18 , CtT1N19 , CtT1N20" -"WkAxsXT1D1 , WkAxsXT1D2 , WkAxsXT1D3 , WkAxsXT1D4 , WkAxsXT1D5 , WkAxsXT1D6 , WkAxsXT1D7" -"WkAxsYT1D1 , WkAxsYT1D2 , WkAxsYT1D3 , WkAxsYT1D4 , WkAxsYT1D5 , WkAxsYT1D6 , WkAxsYT1D7" -"WkAxsZT1D1 , WkAxsZT1D2 , WkAxsZT1D3 , WkAxsZT1D4 , WkAxsZT1D5 , WkAxsZT1D6 , WkAxsZT1D7" -"WkPosXT1D1 , WkPosXT1D2 , WkPosXT1D3 , WkPosXT1D4 , WkPosXT1D5 , WkPosXT1D6 , WkPosXT1D7" -"WkPosYT1D1 , WkPosYT1D2 , WkPosYT1D3 , WkPosYT1D4 , WkPosYT1D5 , WkPosYT1D6 , WkPosYT1D7" -"WkPosZT1D1 , WkPosZT1D2 , WkPosZT1D3 , WkPosZT1D4 , WkPosZT1D5 , WkPosZT1D6 , WkPosZT1D7" -"WkDfVxT1N01D1, WkDfVxT1N02D1, WkDfVxT1N03D1, WkDfVxT1N04D1, WkDfVxT1N05D1, WkDfVxT1N06D1, WkDfVxT1N07D1, WkDfVxT1N08D1, WkDfVxT1N09D1, WkDfVxT1N10D1, WkDfVxT1N11D1, WkDfVxT1N12D1, WkDfVxT1N13D1, WkDfVxT1N14D1, WkDfVxT1N15D1, WkDfVxT1N16D1, WkDfVxT1N17D1, WkDfVxT1N18D1, WkDfVxT1N19D1, WkDfVxT1N20D1" -"WkDfVxT1N01D2, WkDfVxT1N02D2, WkDfVxT1N03D2, WkDfVxT1N04D2, WkDfVxT1N05D2, WkDfVxT1N06D2, WkDfVxT1N07D2, WkDfVxT1N08D2, WkDfVxT1N09D2, WkDfVxT1N10D2, WkDfVxT1N11D2, WkDfVxT1N12D2, WkDfVxT1N13D2, WkDfVxT1N14D2, WkDfVxT1N15D2, WkDfVxT1N16D2, WkDfVxT1N17D2, WkDfVxT1N18D2, WkDfVxT1N19D2, WkDfVxT1N20D2" -"WkDfVxT1N01D3, WkDfVxT1N02D3, WkDfVxT1N03D3, WkDfVxT1N04D3, WkDfVxT1N05D3, WkDfVxT1N06D3, WkDfVxT1N07D3, WkDfVxT1N08D3, WkDfVxT1N09D3, WkDfVxT1N10D3, WkDfVxT1N11D3, WkDfVxT1N12D3, WkDfVxT1N13D3, WkDfVxT1N14D3, WkDfVxT1N15D3, WkDfVxT1N16D3, WkDfVxT1N17D3, WkDfVxT1N18D3, WkDfVxT1N19D3, WkDfVxT1N20D3" -"WkDfVxT1N01D4, WkDfVxT1N02D4, WkDfVxT1N03D4, WkDfVxT1N04D4, WkDfVxT1N05D4, WkDfVxT1N06D4, WkDfVxT1N07D4, WkDfVxT1N08D4, WkDfVxT1N09D4, WkDfVxT1N10D4, WkDfVxT1N11D4, WkDfVxT1N12D4, WkDfVxT1N13D4, WkDfVxT1N14D4, WkDfVxT1N15D4, WkDfVxT1N16D4, WkDfVxT1N17D4, WkDfVxT1N18D4, WkDfVxT1N19D4, WkDfVxT1N20D4" -"WkDfVxT1N01D5, WkDfVxT1N02D5, WkDfVxT1N03D5, WkDfVxT1N04D5, WkDfVxT1N05D5, WkDfVxT1N06D5, WkDfVxT1N07D5, WkDfVxT1N08D5, WkDfVxT1N09D5, WkDfVxT1N10D5, WkDfVxT1N11D5, WkDfVxT1N12D5, WkDfVxT1N13D5, WkDfVxT1N14D5, WkDfVxT1N15D5, WkDfVxT1N16D5, WkDfVxT1N17D5, WkDfVxT1N18D5, WkDfVxT1N19D5, WkDfVxT1N20D5" -"WkDfVxT1N01D6, WkDfVxT1N02D6, WkDfVxT1N03D6, WkDfVxT1N04D6, WkDfVxT1N05D6, WkDfVxT1N06D6, WkDfVxT1N07D6, WkDfVxT1N08D6, WkDfVxT1N09D6, WkDfVxT1N10D6, WkDfVxT1N11D6, WkDfVxT1N12D6, WkDfVxT1N13D6, WkDfVxT1N14D6, WkDfVxT1N15D6, WkDfVxT1N16D6, WkDfVxT1N17D6, WkDfVxT1N18D6, WkDfVxT1N19D6, WkDfVxT1N20D6" -"WkDfVxT1N01D7, WkDfVxT1N02D7, WkDfVxT1N03D7, WkDfVxT1N04D7, WkDfVxT1N05D7, WkDfVxT1N06D7, WkDfVxT1N07D7, WkDfVxT1N08D7, WkDfVxT1N09D7, WkDfVxT1N10D7, WkDfVxT1N11D7, WkDfVxT1N12D7, WkDfVxT1N13D7, WkDfVxT1N14D7, WkDfVxT1N15D7, WkDfVxT1N16D7, WkDfVxT1N17D7, WkDfVxT1N18D7, WkDfVxT1N19D7, WkDfVxT1N20D7" -"WkDfVrT1N01D1, WkDfVrT1N02D1, WkDfVrT1N03D1, WkDfVrT1N04D1, WkDfVrT1N05D1, WkDfVrT1N06D1, WkDfVrT1N07D1, WkDfVrT1N08D1, WkDfVrT1N09D1, WkDfVrT1N10D1, WkDfVrT1N11D1, WkDfVrT1N12D1, WkDfVrT1N13D1, WkDfVrT1N14D1, WkDfVrT1N15D1, WkDfVrT1N16D1, WkDfVrT1N17D1, WkDfVrT1N18D1, WkDfVrT1N19D1, WkDfVrT1N20D1" -"WkDfVrT1N01D2, WkDfVrT1N02D2, WkDfVrT1N03D2, WkDfVrT1N04D2, WkDfVrT1N05D2, WkDfVrT1N06D2, WkDfVrT1N07D2, WkDfVrT1N08D2, WkDfVrT1N09D2, WkDfVrT1N10D2, WkDfVrT1N11D2, WkDfVrT1N12D2, WkDfVrT1N13D2, WkDfVrT1N14D2, WkDfVrT1N15D2, WkDfVrT1N16D2, WkDfVrT1N17D2, WkDfVrT1N18D2, WkDfVrT1N19D2, WkDfVrT1N20D2" -"WkDfVrT1N01D3, WkDfVrT1N02D3, WkDfVrT1N03D3, WkDfVrT1N04D3, WkDfVrT1N05D3, WkDfVrT1N06D3, WkDfVrT1N07D3, WkDfVrT1N08D3, WkDfVrT1N09D3, WkDfVrT1N10D3, WkDfVrT1N11D3, WkDfVrT1N12D3, WkDfVrT1N13D3, WkDfVrT1N14D3, WkDfVrT1N15D3, WkDfVrT1N16D3, WkDfVrT1N17D3, WkDfVrT1N18D3, WkDfVrT1N19D3, WkDfVrT1N20D3" -"WkDfVrT1N01D4, WkDfVrT1N02D4, WkDfVrT1N03D4, WkDfVrT1N04D4, WkDfVrT1N05D4, WkDfVrT1N06D4, WkDfVrT1N07D4, WkDfVrT1N08D4, WkDfVrT1N09D4, WkDfVrT1N10D4, WkDfVrT1N11D4, WkDfVrT1N12D4, WkDfVrT1N13D4, WkDfVrT1N14D4, WkDfVrT1N15D4, WkDfVrT1N16D4, WkDfVrT1N17D4, WkDfVrT1N18D4, WkDfVrT1N19D4, WkDfVrT1N20D4" -"WkDfVrT1N01D5, WkDfVrT1N02D5, WkDfVrT1N03D5, WkDfVrT1N04D5, WkDfVrT1N05D5, WkDfVrT1N06D5, WkDfVrT1N07D5, WkDfVrT1N08D5, WkDfVrT1N09D5, WkDfVrT1N10D5, WkDfVrT1N11D5, WkDfVrT1N12D5, WkDfVrT1N13D5, WkDfVrT1N14D5, WkDfVrT1N15D5, WkDfVrT1N16D5, WkDfVrT1N17D5, WkDfVrT1N18D5, WkDfVrT1N19D5, WkDfVrT1N20D5" -"WkDfVrT1N01D6, WkDfVrT1N02D6, WkDfVrT1N03D6, WkDfVrT1N04D6, WkDfVrT1N05D6, WkDfVrT1N06D6, WkDfVrT1N07D6, WkDfVrT1N08D6, WkDfVrT1N09D6, WkDfVrT1N10D6, WkDfVrT1N11D6, WkDfVrT1N12D6, WkDfVrT1N13D6, WkDfVrT1N14D6, WkDfVrT1N15D6, WkDfVrT1N16D6, WkDfVrT1N17D6, WkDfVrT1N18D6, WkDfVrT1N19D6, WkDfVrT1N20D6" -"WkDfVrT1N01D7, WkDfVrT1N02D7, WkDfVrT1N03D7, WkDfVrT1N04D7, WkDfVrT1N05D7, WkDfVrT1N06D7, WkDfVrT1N07D7, WkDfVrT1N08D7, WkDfVrT1N09D7, WkDfVrT1N10D7, WkDfVrT1N11D7, WkDfVrT1N12D7, WkDfVrT1N13D7, WkDfVrT1N14D7, WkDfVrT1N15D7, WkDfVrT1N16D7, WkDfVrT1N17D7, WkDfVrT1N18D7, WkDfVrT1N19D7, WkDfVrT1N20D7" -END ---------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh deleted file mode 100644 index 1d58539251..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllHighBox.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -#SBATCH --job-name=highBox -#SBATCH --output log.highBox -#SBATCH --nodes=3 -#SBATCH --ntasks-per-node=36 -#SBATCH --time=4:00:00 -#SBATCH --mem=150G -#SBATCH --account=osw - -source $HOME/.bash_profile - -echo "Working directory is" $SLURM_SUBMIT_DIR -echo "Job name is" $SLURM_JOB_NAME -echo "Job ID is " $SLURM_JOBID -echo "Job took the following nodes (SLURM_NODELIST)" $SLURM_NODELIST -echo "Submit time is" $(squeue -u $USER -o '%30j %20V' | grep -e $SLURM_JOB_NAME | awk '{print $2}') -echo "Starting job at: " $(date) - -module purge -module use /nopt/nrel/apps/modules/centos77/modulefiles -module load mkl/2020.1.217 -module load comp-intel/2020.1.217 - -# ********************************** USER INPUT ********************************** # -turbsimbin='/home/rthedin/local/local_openfast_intelCompilers/bin/turbsim' -basepath='/projects/shellwind/rthedin/Task2_2regis' - -condList=('Cond00_v08.6_PL0.2_TI10' 'Cond01_v10.6_PL0.2_TI10' 'Cond02_v12.6_PL0.2_TI10') - -caseList=('Case00_wdirp00_WSfalse_YMfalse' 'Case01_wdirp00_WStrue_YMfalse') - -nSeeds=6 -nTurbines=12 -# ******************************************************************************** # - -rampercpu=$((149000/36)) - -for cond in ${condList[@]}; do - for case in ${caseList[@]}; do - for ((seed=0; seed<$nSeeds; seed++)); do - for ((t=1; t<=$nTurbines; t++)); do - dir=$(printf "%s/%s/%s/Seed_%01d/TurbSim" $basepath $cond $case $seed) - echo "Submitting $dir/HighT$t.inp" - srun -n1 -N1 --exclusive --mem-per-cpu=$rampercpu $turbsimbin $dir/HighT$t.inp > $dir/log.hight$t.seed$seed.txt 2>&1 & - sleep 0.1 - done - done - done -done - -wait - -echo "Ending job at: " $(date) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh deleted file mode 100644 index 4b65c4c55b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runAllLowBox.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -#SBATCH --job-name=lowBox -#SBATCH --output log.lowBox -#SBATCH --nodes=2 -#SBATCH --ntasks-per-node=12 -#SBATCH --time=2-00 -#SBATCH --mem=150G -#SBATCH --account=osw - -source $HOME/.bash_profile - -echo "Working directory is" $SLURM_SUBMIT_DIR -echo "Job name is" $SLURM_JOB_NAME -echo "Job ID is " $SLURM_JOBID -echo "Job took the following nodes (SLURM_NODELIST)" $SLURM_NODELIST -echo "Submit time is" $(squeue -u $USER -o '%30j %20V' | grep -e $SLURM_JOB_NAME | awk '{print $2}') -echo "Starting job at: " $(date) - -nodelist=`scontrol show hostname $SLURM_NODELIST` -nodelist=($nodelist) -echo "Formatted list of nodes is: $nodelist" - -module purge -module use /nopt/nrel/apps/modules/centos77/modulefiles -module load mkl/2020.1.217 -module load comp-intel/2020.1.217 - -# ********************************** USER INPUT ********************************** # -turbsimbin='/home/rthedin/local/local_openfast_intelCompilers/bin/turbsim' -basepath='/projects/shellwind/rthedin/Task2_2regis' - -condList=('Cond00_v08.6_PL0.2_TI10' 'Cond01_v10.6_PL0.2_TI10' 'Cond02_v12.6_PL0.2_TI10') - -nSeeds=6 -# ******************************************************************************** # - -nodeToUse=0 -for cond in ${condList[@]}; do - currNode=${nodelist[$nodeToUse]} - for((seed=0; seed<$nSeeds; seed++)); do - dir=$(printf "%s/%s/Seed_%01d" $basepath $cond $seed) - echo "Submitting $dir/Low.inp in node $currNode" - srun -n1 -N1 --exclusive --nodelist=$currNode --mem-per-cpu=25000M $turbsimbin $dir/Low.inp > $dir/log.low.seed$seed.txt 2>&1 & - done - (( nodeToUse++ )) -done - -wait - -echo "Ending job at: " $(date) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh deleted file mode 100644 index 46ba147a5b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/runFASTFarm_cond0_case0_seed0.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -#SBATCH --job-name=runFF -#SBATCH --output log.fastfarm_c0_c0_seed0 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=36 -#SBATCH --time=10-00 -#SBATCH --account=mmc - -source $HOME/.bash_profile - -echo "Working directory is" $SLURM_SUBMIT_DIR -echo "Job name is" $SLURM_JOB_NAME -echo "Job ID is " $SLURM_JOBID -echo "Job took the following nodes (SLURM_NODELIST)" $SLURM_NODELIST -echo "Submit time is" $(squeue -u $USER -o '%30j %20V' | grep -e $SLURM_JOB_NAME | awk '{print $2}') -echo "Starting job at: " $(date) - -nodelist=`scontrol show hostname $SLURM_NODELIST` -nodelist=($nodelist) -echo "Formatted list of nodes is: $nodelist" - -module purge -module use /nopt/nrel/apps/modules/centos77/modulefiles -module load mkl/2020.1.217 -module load comp-intel/2020.1.217 - -# ********************************** USER INPUT ********************************** # -fastfarmbin='/home/rthedin/local/local_openfast_intelCompilers_3.1.0_openmpPrints/bin/FAST.Farm' -basepath='/projects/shellwind/rthedin/Task2_2regis' - -cond='Cond00_v08.6_PL0.2_TI10' -case='Case00_wdirp00_WSfalse_YMfalse_12fED_12ADyn' - -seed=0 -# ******************************************************************************** # - -dir=$(printf "%s/%s/%s/Seed_%01d" $basepath $cond $case $seed) -cd $dir -echo "Submitting $dir/FFarm_mod.fstf" -$fastfarmbin $dir/FFarm_mod.fstf > $dir/log.fastfarm.seed$seed.txt 2>&1 - -echo "Ending job at: " $(date) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp deleted file mode 100644 index 66c01ca7b1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_HighT1_InflowXX_SeedY.inp +++ /dev/null @@ -1,74 +0,0 @@ ---------TurbSim v2.00.* Input File------------------------ -for Certification Test #1 (Kaimal Spectrum, formatted FF files). ----------Runtime Options----------------------------------- -False Echo - Echo input data to .ech (flag) -1432403720 RandSeed1 - First random seed (-2147483648 to 2147483647) -RanLux RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" -False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) -False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) -False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) -True WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) -False WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) -False WrADTWR - Output tower time-series data? (Generates RootName.twr) -False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) -False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) -True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) -0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] - ---------Turbine/Model Specifications----------------------- -59 NumGrid_Z - Vertical grid-point matrix dimension -60 NumGrid_Y - Horizontal grid-point matrix dimension -0.5000 TimeStep - Time step [seconds] -1750.00 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) -"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") -150.000 HubHt - Hub height [m] (should be > 0.5*GridHeight) -290.000 GridHeight - Grid height [m] -295.000 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) -0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] -0 HFlowAng - Horizontal mean flow (skew) angle [degrees] - ---------Meteorological Boundary Conditions------------------- -"TIMESR" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","IECKAI","TIMESR", or "NONE") -"USRTimeSeries_T1.txt" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "IECKAI" and "TIMESR" models) -1 IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) -"D" IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) -"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) -"default" ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] -"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"PL";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") -"PowerLaw_6ms02.dat" ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-] -148.840 RefHt - Height of the reference velocity (URef) [m] -6.600 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] -350 ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) -"0.100" PLExp - Power law exponent [-] (or "default") -"default" Z0 - Surface roughness length [m] (or "default") - ---------Non-IEC Meteorological Boundary Conditions------------ -"default" Latitude - Site latitude [degrees] (or "default") -0.05 RICH_NO - Gradient Richardson number [-] -"default" UStar - Friction or shear velocity [m/s] (or "default") -"default" ZI - Mixing layer depth [m] (or "default") -"default" PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") -"default" PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") -"default" PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") - ---------Spatial Coherence Parameters---------------------------- -"IEC" SCMod1 - u-component coherence model ("GENERAL","IEC","API","NONE", or "default") -"IEC" SCMod2 - v-component coherence model ("GENERAL","IEC","NONE", or "default") -"IEC" SCMod3 - w-component coherence model ("GENERAL","IEC","NONE", or "default") -"12.0 0.0003527" InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"12.0 0.001058" InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"12.0 0.004329" InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"0.0" CohExp - Coherence exponent for general model [-] (or "default") - ---------Coherent Turbulence Scaling Parameters------------------- -".\EventData" CTEventPath - Name of the path where event data files are located -"random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") -true Randomize - Randomize the disturbance scale and locations? (true/false) -1 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) -0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) -0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) -30 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] - -==================================================== -! NOTE: Do not add or remove any lines in this file! -==================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp deleted file mode 100644 index 3945ea8684..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/examples/SampleFiles/template_Low_InflowXX_SeedY.inp +++ /dev/null @@ -1,74 +0,0 @@ ---------TurbSim v2.00.* Input File------------------------ -for Certification Test #1 (Kaimal Spectrum, formatted FF files). ----------Runtime Options----------------------------------- -False Echo - Echo input data to .ech (flag) -1432403720 RandSeed1 - First random seed (-2147483648 to 2147483647) -RanLux RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" -False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) -False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) -False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) -True WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) -False WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) -False WrADTWR - Output tower time-series data? (Generates RootName.twr) -False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) -False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) -True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) -0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] - ---------Turbine/Model Specifications----------------------- -40 NumGrid_Z - Vertical grid-point matrix dimension -481 NumGrid_Y - Horizontal grid-point matrix dimension -0.5000 TimeStep - Time step [seconds] -1750.00 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) -"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") -395.000 HubHt - Hub height [m] (should be > 0.5*GridHeight) -780.000 GridHeight - Grid height [m] -9600.000 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) -0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] -0 HFlowAng - Horizontal mean flow (skew) angle [degrees] - ---------Meteorological Boundary Conditions------------------- -"IECKAI" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","USRVKM","TIMESR", or "NONE") -"unused" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models) -1 IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) -"D" IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) -"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) -"default" ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] -"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"USR";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") -"PowerLaw_6ms02.dat" ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-] -148.840 RefHt - Height of the reference velocity (URef) [m] -6.600 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] -350 ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) -"0.100" PLExp - Power law exponent [-] (or "default") -"default" Z0 - Surface roughness length [m] (or "default") - ---------Non-IEC Meteorological Boundary Conditions------------ -"default" Latitude - Site latitude [degrees] (or "default") -0.05 RICH_NO - Gradient Richardson number [-] -"default" UStar - Friction or shear velocity [m/s] (or "default") -"default" ZI - Mixing layer depth [m] (or "default") -"default" PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") -"default" PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") -"default" PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") - ---------Spatial Coherence Parameters---------------------------- -"IEC" SCMod1 - u-component coherence model ("GENERAL","IEC","API","NONE", or "default") -"IEC" SCMod2 - v-component coherence model ("GENERAL","IEC","NONE", or "default") -"IEC" SCMod3 - w-component coherence model ("GENERAL","IEC","NONE", or "default") -"12.0 0.0003527" InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"12.0 0.001058" InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"12.0 0.004329" InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -"0.0" CohExp - Coherence exponent for general model [-] (or "default") - ---------Coherent Turbulence Scaling Parameters------------------- -".\EventData" CTEventPath - Name of the path where event data files are located -"random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") -true Randomize - Randomize the disturbance scale and locations? (true/false) -1 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) -0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) -0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) -30 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] - -==================================================== -! NOTE: Do not add or remove any lines in this file! -==================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py deleted file mode 100644 index 6f1b2a1ed0..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/fastfarm.py +++ /dev/null @@ -1,648 +0,0 @@ -import os -import glob -import numpy as np -import pandas as pd -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.input_output.fast_output_file import FASTOutputFile -from pyFAST.input_output.turbsim_file import TurbSimFile -import pyFAST.postpro as fastlib - -# --------------------------------------------------------------------------------} -# --- Small helper functions -# --------------------------------------------------------------------------------{ -def insertTN(s,i,nWT=1000, noLeadingZero=False): - """ insert turbine number in name """ - if nWT<10: - fmt='{:d}' - elif nWT<100: - fmt='{:02d}' - else: - fmt='{:03d}' - - if noLeadingZero: - fmt='{:d}' - - if s.find('T1')>=0: - s=s.replace('T1','T'+fmt.format(i)) - elif s.find('T0')>=0: - print('this should not be printed') - s=s.replace('T0','T'+fmt.format(i)) - else: - sp=os.path.splitext(s) - s=sp[0]+'_T'+fmt.format(i)+sp[1] - return s -def forceCopyFile (sfile, dfile): - # ---- Handling error due to wrong mod - if os.path.isfile(dfile): - if not os.access(dfile, os.W_OK): - os.chmod(dfile, stat.S_IWUSR) - #print(sfile, ' > ', dfile) - shutil.copy2(sfile, dfile) - -# --------------------------------------------------------------------------------} -# --- Tools to create fast farm simulations -# --------------------------------------------------------------------------------{ -def writeFSTandDLL(FstT1Name, nWT): - """ - Write FST files for each turbine, with different ServoDyn files and DLL - FST files, ServoFiles, and DLL files will be written next to their turbine 1 - files, with name Ti. - - FstT1Name: absolute or relative path to the Turbine FST file - """ - - FstT1Full = os.path.abspath(FstT1Name).replace('\\','/') - FstDir = os.path.dirname(FstT1Full) - - fst=FASTInputFile(FstT1Name) - SrvT1Name = fst['ServoFile'].strip('"') - SrvT1Full = os.path.join(FstDir, SrvT1Name).replace('\\','/') - SrvDir = os.path.dirname(SrvT1Full) - SrvT1RelFst = os.path.relpath(SrvT1Full,FstDir) - if os.path.exists(SrvT1Full): - srv=FASTInputFile(SrvT1Full) - DLLT1Name = srv['DLL_FileName'].strip('"') - DLLT1Full = os.path.join(SrvDir, DLLT1Name) - if os.path.exists(DLLT1Full): - servo=True - else: - print('[Info] DLL file not found, not copying servo and dll files ({})'.format(DLLT1Full)) - servo=False - else: - print('[Info] ServoDyn file not found, not copying servo and dll files ({})'.format(SrvT1Full)) - servo=False - - #print(FstDir) - #print(FstT1Full) - #print(SrvT1Name) - #print(SrvT1Full) - #print(SrvT1RelFst) - - for i in np.arange(2,nWT+1): - FstName = insertTN(FstT1Name,i,nWT) - if servo: - # TODO handle the case where T1 not present - SrvName = insertTN(SrvT1Name,i,nWT) - DLLName = insertTN(DLLT1Name,i,nWT) - DLLFullName = os.path.join(SrvDir, DLLName) - - print('') - print('FstName: ',FstName) - if servo: - print('SrvName: ',SrvName) - print('DLLName: ',DLLName) - print('DLLFull: ',DLLFullName) - - # Changing main file - if servo: - fst['ServoFile']='"'+SrvName+'"' - fst.write(FstName) - if servo: - # Changing servo file - srv['DLL_FileName']='"'+DLLName+'"' - srv.write(SrvName) - # Copying dll - forceCopyFile(DLLT1Full, DLLFullName) - - - -def rectangularLayoutSubDomains(D,Lx,Ly): - """ Retuns position of turbines in a rectangular layout - TODO, unfinished function parameters - """ - # --- Parameters - D = 112 # turbine diameter [m] - Lx = 3840 # x dimension of precusor - Ly = 3840 # y dimension of precusor - Height = 0 # Height above ground, likely 0 [m] - nDomains_x = 2 # number of domains in x - nDomains_y = 2 # number of domains in y - # --- 36 WT - nx = 3 # number of turbines to be placed along x in one precursor domain - ny = 3 # number of turbines to be placed along y in one precursor domain - StartX = 1/2 # How close do we start from the x boundary - StartY = 1/2 # How close do we start from the y boundary - # --- Derived parameters - Lx_Domain = Lx * nDomains_x # Full domain size - Ly_Domain = Ly * nDomains_y - DeltaX = Lx / (nx) # Turbine spacing - DeltaY = Ly / (ny) - xWT = np.arange(DeltaX*StartX,Lx_Domain,DeltaX) # Turbine positions - yWT = np.arange(DeltaY*StartY,Ly_Domain,DeltaY) - - print('Full domain size [D] : {:.2f} x {:.2f} '.format(Lx_Domain/D, Ly_Domain/D)) - print('Turbine spacing [D] : {:.2f} x {:.2f} '.format(DeltaX/D,DeltaX/D)) - print('Number of turbines : {:d} x {:d} = {:d}'.format(len(xWT),len(yWT),len(xWT)*len(yWT))) - - XWT,YWT=np.meshgrid(xWT,yWT) - ZWT=XWT*0+Height - - # --- Export coordinates only - M=np.column_stack((XWT.ravel(),YWT.ravel(),ZWT.ravel())) - np.savetxt('Farm_Coordinates.csv', M, delimiter=',',header='X_[m], Y_[m], Z_[m]') - print(M) - - return XWT, YWT, ZWT - - -def fastFarmTurbSimExtent(TurbSimFilename, hubHeight, D, xWT, yWT, Cmeander=1.9, chord_max=3, extent_X=1.1, extent_YZ=1.1, meanUAtHubHeight=False): - """ - Determines "Ambient Wind" box parametesr for FastFarm, based on a TurbSimFile ('bts') - - Implements the guidelines listed here: - https://openfast.readthedocs.io/en/dev/source/user/fast.farm/ModelGuidance.html - - INPUTS: - - TurbSimFilename: name of the BTS file used in the FAST.Farm simulation - - hubHeight : Hub height [m] - - D : turbine diameter [m] - - xWT : vector of x positions of the wind turbines (e.g. [0,300,600]) - - yWT : vector of y positions of the wind turbines (e.g. [0,0,0]) - - Cmeander : parameter for meandering used in FAST.Farm [-] - - chord_max : maximum chord of the wind turbine blade. Used to determine the high resolution - - extent_X : x-extent of high res box in diamter around turbine location - - extent_YZ : y-extent of high res box in diamter around turbine location - - """ - # --- TurbSim data - ts = TurbSimFile(TurbSimFilename) - - if meanUAtHubHeight: - # Use Hub Height to determine convection velocity - iy,iz = ts.closestPoint(y=0,z=hubHeight) - meanU = ts['u'][0,:,iy,iz].mean() - else: - # Use middle of the box to determine convection velocity - zMid, meanU = ts.midValues() - - return fastFarmBoxExtent(ts.y, ts.z, ts.t, meanU, hubHeight, D, xWT, yWT, Cmeander=Cmeander, chord_max=chord_max, extent_X=extent_X, extent_YZ=extent_YZ) - -def fastFarmBoxExtent(yBox, zBox, tBox, meanU, hubHeight, D, xWT, yWT, - Cmeander=1.9, chord_max=3, extent_X=1.1, extent_YZ=1.1, - extent_wake=8, LES=False): - """ - Determines "Ambient Wind" box parametesr for FastFarm, based on turbulence box parameters - INPUTS: - - yBox : y vector of grid points of the box - - zBox : z vector of grid points of the box - - tBox : time vector of the box - - meanU : mean velocity used to convect the box - - hubHeight : Hub height [m] - - D : turbine diameter [m] - - xWT : vector of x positions of the wind turbines (e.g. [0,300,600]) - - yWT : vector of y positions of the wind turbines (e.g. [0,0,0]) - - Cmeander : parameter for meandering used in FAST.Farm [-] - - chord_max : maximum chord of the wind turbine blade. Used to determine the high resolution - - extent_X : x-extent of high-res box (in diameter) around turbine location - - extent_YZ : y-extent of high-res box (in diameter) around turbine location - - extent_wake : extent of low-res box (in diameter) to add beyond the "last" wind turbine - - LES: False for TurbSim box, true for LES. Perform additional checks for LES. - """ - if LES: - raise NotImplementedError() - # --- Box resolution and extents - dY_Box = yBox[1]-yBox[0] - dZ_Box = zBox[1]-zBox[0] - dT_Box = tBox[1]-tBox[0] - dX_Box = dT_Box * meanU - Z0_Box = zBox[0] - LY_Box = yBox[-1]-yBox[0] - LZ_Box = zBox[-1]-zBox[0] - LT_Box = tBox[-1]-tBox[0] - LX_Box = LT_Box * meanU - - # --- Desired resolution, rules of thumb - dX_High_desired = chord_max - dX_Low_desired = Cmeander*D*meanU/150.0 - dY_Low_desired = dX_Low_desired - dZ_Low_desired = dX_Low_desired - dT_Low_desired = Cmeander*D/(10.0*meanU) - - # --- Suitable resolution for high res - dX_High = int(dX_High_desired/dX_Box)*dX_Box - if dX_High==0: raise Exception('The x-resolution of the box ({}) is too large and cannot satisfy the requirements for the high-res domain of dX~{} (based on chord_max). Reduce DX (or DT) of the box.'.format(dX_Box, dX_High_desired)) - dY_High = dY_Box # TODO? - dZ_High = dZ_Box # TODO? - dT_High = dT_Box # TODO? - - # --- Suitable resolution for Low res - dT_Low = int(dT_Low_desired/dT_Box )*dT_Box - dX_Low = int(dX_Low_desired/dX_High)*dX_High - dY_Low = int(dY_Low_desired/dY_High)*dY_High - dZ_Low = int(dZ_Low_desired/dZ_High)*dZ_High - if dT_Low==0: raise Exception('The time-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dT~{} (based on D & U). Reduce the DT of the box.'.format(dT_Box, dT_Low_desired)) - if dX_Low==0: raise Exception('The X-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dX~{} (based on D & U). Reduce the DX of the box.'.format(dX_Box, dX_Low_desired)) - if dY_Low==0: raise Exception('The Y-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dY~{} (based on D & U). Reduce the DY of the box.'.format(dY_Box, dY_Low_desired)) - if dZ_Low==0: raise Exception('The Z-resolution of the box ({}) is too large and cannot satisfy the requirements for the low-res domain of dZ~{} (based on D & U). Reduce the DZ of the box.'.format(dZ_Box, dZ_Low_desired)) - - # --- Low-res domain - # NOTE: more work is needed to make sure the domain encompass the turbines - # Also, we need to know the main flow direction to add a buffere with extent_wake - # Origin - nD_Before = extent_X/2 # Diameters before the first turbine to start the domain - X0_Low = np.floor( (min(xWT)-nD_Before*D-dX_Low)) # Starting on integer value for esthetics. With a dX_Low margin. - Y0_Low = np.floor( -LY_Box/2 ) # Starting on integer value for esthetics - Z0_Low = zBox[0] # we start at lowest to include tower - if LES: - if Y0_Low > min(yWT)-3*D: - Y0_Low = np.floor(min(yWT)-3*D) - # Extent NOTE: this assumes main flow about x. Might need to be changed - - XMax_Low = max(xWT) + extent_wake*D - LX_Low = XMax_Low-X0_Low - LY_Low = LY_Box - LZ_Low = LZ_Box - # Number of points - nX_Low = int(np.ceil(LX_Low/dX_Low)) - nY_Low = int(np.ceil(LY_Low/dY_Low)) - nZ_Low = int(np.ceil(LZ_Low/dZ_Low)) - # Make sure we don't exceed box in Y and Z #rt: this essentially gives us 1 less grid point than what is on the inp/bst files - if (nY_Low*dY_Low>LY_Box): nY_Low=nY_Low-1 - if (nZ_Low*dZ_Low>LZ_Box): nZ_Low=nZ_Low-1 - - # --- High-res domain extent and number of points - ZMax_High = hubHeight+extent_YZ*D/2 - Z0_High = zBox[0] # we start at lowest to include tower - LX_High = extent_X*D - LY_High = min(LY_Box, extent_YZ*D ) # Bounding to not exceed the box dimension - LZ_High = min(LZ_Box, ZMax_High-Z0_High) # Bounding to not exceed the box dimension - nX_High = int(np.ceil(LX_High/dX_High)) - nY_High = int(np.ceil(LY_High/dY_High)) - nZ_High = int(np.ceil(LZ_High/dZ_High)) - # Make sure we don't exceed box in Y and Z - if (nY_High*dY_High>LY_Box): nY_High=nY_High-1 - if (nZ_High*dZ_High>LZ_Box): nZ_High=nZ_High-1 - - # --- High-res location per turbine - X0_desired = np.asarray(xWT)-LX_High/2 # high-res is centered on turbine location - Y0_desired = np.asarray(yWT)-LY_High/2 # high-res is centered on turbine location - X0_High = X0_Low + np.floor((X0_desired-X0_Low)/dX_High)*dX_High - Y0_High = Y0_Low + np.floor((Y0_desired-Y0_Low)/dY_High)*dY_High - - d = dict() - d['DT_Low'] = np.around(dT_Low ,4) - d['DT_High'] = np.around(dT_High,4) - d['NX_Low'] = nX_Low - d['NY_Low'] = nY_Low - d['NZ_Low'] = nZ_Low - d['X0_Low'] = np.around(X0_Low,4) - d['Y0_Low'] = np.around(Y0_Low,4) - d['Z0_Low'] = np.around(Z0_Low,4) - d['dX_Low'] = np.around(dX_Low,4) - d['dY_Low'] = np.around(dY_Low,4) - d['dZ_Low'] = np.around(dZ_Low,4) - d['NX_High'] = nX_High - d['NY_High'] = nY_High - d['NZ_High'] = nZ_High - # --- High extent info for turbine outputs - d['dX_High'] = np.around(dX_High,4) - d['dY_High'] = np.around(dY_High,4) - d['dZ_High'] = np.around(dZ_High,4) - d['X0_High'] = np.around(X0_High,4) - d['Y0_High'] = np.around(Y0_High,4) - d['Z0_High'] = np.around(Z0_High,4) - # --- Misc - d['dX_des_High'] = dX_High_desired - d['dX_des_Low'] = dX_Low_desired - d['DT_des'] = dT_Low_desired - d['U_mean'] = meanU - - # --- Sanity check: check that the high res is at "almost" an integer location - X_rel = (np.array(d['X0_High'])-d['X0_Low'])/d['dX_High'] - Y_rel = (np.array(d['Y0_High'])-d['Y0_Low'])/d['dY_High'] - dX = X_rel - np.round(X_rel) # Should be close to zero - dY = Y_rel - np.round(Y_rel) # Should be close to zero - if any(abs(dX)>1e-3): - print('Deltas:',dX) - print('Exception has been raise. I put this print statement instead. Check with EB.') - print('Exception: Some X0_High are not on an integer multiple of the high-res grid') - #raise Exception('Some X0_High are not on an integer multiple of the high-res grid') - if any(abs(dY)>1e-3): - print('Deltas:',dY) - print('Exception has been raise. I put this print statement instead. Check with EB.') - print('Exception: Some Y0_High are not on an integer multiple of the high-res grid') - #raise Exception('Some Y0_High are not on an integer multiple of the high-res grid') - - return d - - -def writeFastFarm(outputFile, templateFile, xWT, yWT, zWT, FFTS=None, OutListT1=None, noLeadingZero=False): - """ Write FastFarm input file based on a template, a TurbSimFile and the Layout - - outputFile: .fstf file to be written - templateFile: .fstf file that will be used to generate the output_file - XWT,YWT,ZWT: positions of turbines - FFTS: FastFarm TurbSim parameters as returned by fastFarmTurbSimExtent - """ - # --- Read template fast farm file - fst=FASTInputFile(templateFile) - # --- Replace box extent values - if FFTS is not None: - fst['Mod_AmbWind'] = 2 - ModVars = ['DT_Low', 'DT_High', 'NX_Low', 'NY_Low', 'NZ_Low', 'X0_Low', 'Y0_Low', 'Z0_Low', 'dX_Low', 'dY_Low', 'dZ_Low', 'NX_High', 'NY_High', 'NZ_High'] - for k in ModVars: - if isinstance(FFTS[k],int): - fst[k] = FFTS[k] - else: - fst[k] = np.around(FFTS[k],3) - fst['WrDisDT'] = FFTS['DT_Low'] - - # --- Set turbine names, position, and box extent - nWT = len(xWT) - fst['NumTurbines'] = nWT - if FFTS is not None: - nCol= 10 - else: - nCol = 4 - ref_path = fst['WindTurbines'][0,3] - WT = np.array(['']*nWT*nCol,dtype='object').reshape((nWT,nCol)) - for iWT,(x,y,z) in enumerate(zip(xWT,yWT,zWT)): - WT[iWT,0]=x - WT[iWT,1]=y - WT[iWT,2]=z - WT[iWT,3]=insertTN(ref_path,iWT+1,nWT,noLeadingZero=noLeadingZero) - if FFTS is not None: - WT[iWT,4]=FFTS['X0_High'][iWT] - WT[iWT,5]=FFTS['Y0_High'][iWT] - WT[iWT,6]=FFTS['Z0_High'] - WT[iWT,7]=FFTS['dX_High'] - WT[iWT,8]=FFTS['dY_High'] - WT[iWT,9]=FFTS['dZ_High'] - fst['WindTurbines']=WT - - fst.write(outputFile) - if OutListT1 is not None: - setFastFarmOutputs(outputFile, OutListT1) - -def setFastFarmOutputs(fastFarmFile, OutListT1): - """ Duplicate the output list, by replacing "T1" with T1->Tn """ - fst = FASTInputFile(fastFarmFile) - nWTOut = min(fst['NumTurbines'],9) # Limited to 9 turbines - OutList=[''] - for s in OutListT1: - s=s.strip('"') - if 'T1' in s: - OutList+=['"'+s.replace('T1','T{:d}'.format(iWT+1))+'"' for iWT in np.arange(nWTOut) ] - elif 'W1VAmb' in s: # special case for ambient wind - OutList+=['"'+s.replace('1','{:d}'.format(iWT+1))+'"' for iWT in np.arange(nWTOut) ] - elif 'W1VDis' in s: # special case for disturbed wind - OutList+=['"'+s.replace('1','{:d}'.format(iWT+1))+'"' for iWT in np.arange(nWTOut) ] - else: - OutList+='"'+s+'"' - fst['OutList']=OutList - fst.write(fastFarmFile) - - -def plotFastFarmSetup(fastFarmFile, grid=True, fig=None, D=None, plane='XY', hubHeight=None, showLegend=True): - """ """ - import matplotlib.pyplot as plt - - def col(i): - Colrs=plt.rcParams['axes.prop_cycle'].by_key()['color'] - return Colrs[ np.mod(i,len(Colrs)) ] - def boundingBox(x, y): - """ return x and y coordinates to form a box marked by the min and max of x and y""" - x_bound = [x[0],x[-1],x[-1],x[0] ,x[0]] - y_bound = [y[0],y[0] ,y[-1],y[-1],y[0]] - return x_bound, y_bound - - - # --- Read FAST.Farm input file - fst=FASTInputFile(fastFarmFile) - - if fig is None: - fig = plt.figure(figsize=(13.5,8)) - ax = fig.add_subplot(111,aspect="equal") - - WT=fst['WindTurbines'] - xWT = WT[:,0].astype(float) - yWT = WT[:,1].astype(float) - zWT = yWT*0 - if hubHeight is not None: - zWT += hubHeight - - if plane == 'XY': - pass - elif plane == 'XZ': - yWT = zWT - elif plane == 'YZ': - xWT = yWT - yWT = zWT - else: - raise Exception("Plane should be 'XY' 'XZ' or 'YZ'") - - if fst['Mod_AmbWind'] == 2: - x_low = fst['X0_Low'] + np.arange(fst['NX_Low']+1)*fst['DX_Low'] - y_low = fst['Y0_Low'] + np.arange(fst['NY_Low']+1)*fst['DY_Low'] - z_low = fst['Z0_Low'] + np.arange(fst['NZ_Low']+1)*fst['DZ_Low'] - if plane == 'XZ': - y_low = z_low - elif plane == 'YZ': - x_low = y_low - y_low = z_low - # Plot low-res box - x_bound_low, y_bound_low = boundingBox(x_low, y_low) - ax.plot(x_bound_low, y_bound_low ,'--k',lw=2,label='Low-res') - # Plot Low res grid lines - if grid: - ax.vlines(x_low, ymin=y_low[0], ymax=y_low[-1], ls='-', lw=0.3, color=(0.3,0.3,0.3)) - ax.hlines(y_low, xmin=x_low[0], xmax=x_low[-1], ls='-', lw=0.3, color=(0.3,0.3,0.3)) - - X0_High = WT[:,4].astype(float) - Y0_High = WT[:,5].astype(float) - Z0_High = WT[:,6].astype(float) - dX_High = WT[:,7].astype(float)[0] - dY_High = WT[:,8].astype(float)[0] - dZ_High = WT[:,9].astype(float)[0] - nX_High = fst['NX_High'] - nY_High = fst['NY_High'] - nZ_High = fst['NZ_High'] - - # high-res boxes - for wt in range(len(xWT)): - x_high = X0_High[wt] + np.arange(nX_High+1)*dX_High - y_high = Y0_High[wt] + np.arange(nY_High+1)*dY_High - z_high = Z0_High[wt] + np.arange(nZ_High+1)*dZ_High - if plane == 'XZ': - y_high = z_high - elif plane == 'YZ': - x_high = y_high - y_high = z_high - - x_bound_high, y_bound_high = boundingBox(x_high, y_high) - ax.plot(x_bound_high, y_bound_high, '-', lw=2, c=col(wt)) - # Plot High res grid lines - if grid: - ax.vlines(x_high, ymin=y_high[0], ymax=y_high[-1], ls='--', lw=0.4, color=col(wt)) - ax.hlines(y_high, xmin=x_high[0], xmax=x_high[-1], ls='--', lw=0.4, color=col(wt)) - - # Plot turbines - for wt in range(len(xWT)): - ax.plot(xWT[wt], yWT[wt], 'x', ms=8, mew=2, c=col(wt),label="WT{}".format(wt+1)) - if plane=='XY' and D is not None: - ax.plot([xWT[wt],xWT[wt]], [yWT[wt]-D/2,yWT[wt]+D/2], '-', lw=2, c=col(wt)) - elif plane=='XZ' and D is not None and hubHeight is not None: - ax.plot([xWT[wt],xWT[wt]], [yWT[wt]-D/2,yWT[wt]+D/2], '-', lw=2, c=col(wt)) - elif plane=='YZ' and D is not None and hubHeight is not None: - theta = np.linspace(0,2*np.pi, 40) - x = xWT[wt] + D/2*np.cos(theta) - y = yWT[wt] + D/2*np.sin(theta) - ax.plot(x, y, '-', lw=2, c=col(wt)) - - #plt.legend(bbox_to_anchor=(1.05,1.015),frameon=False) - if showLegend: - ax.legend() - if plane=='XY': - ax.set_xlabel("x [m]") - ax.set_ylabel("y [m]") - elif plane=='XZ': - ax.set_xlabel("x [m]") - ax.set_ylabel("z [m]") - elif plane=='YZ': - ax.set_xlabel("y [m]") - ax.set_ylabel("z [m]") - fig.tight_layout - # fig.savefig('FFarmLayout.pdf',bbox_to_inches='tight',dpi=500) - - return fig - -# --------------------------------------------------------------------------------} -# --- Tools for postpro -# --------------------------------------------------------------------------------{ - -def spanwiseColFastFarm(Cols, nWT=9, nD=9): - """ Return column info, available columns and indices that contain AD spanwise data""" - FFSpanMap=dict() - for i in np.arange(nWT): - FFSpanMap[r'^CtT{:d}N(\d*)_\[-\]'.format(i+1)]='CtT{:d}_[-]'.format(i+1) - for i in np.arange(nWT): - for k in np.arange(nD): - FFSpanMap[r'^WkDfVxT{:d}N(\d*)D{:d}_\[m/s\]'.format(i+1,k+1) ]='WkDfVxT{:d}D{:d}_[m/s]'.format(i+1, k+1) - for i in np.arange(nWT): - for k in np.arange(nD): - FFSpanMap[r'^WkDfVrT{:d}N(\d*)D{:d}_\[m/s\]'.format(i+1,k+1) ]='WkDfVrT{:d}D{:d}_[m/s]'.format(i+1, k+1) - - return fastlib.find_matching_columns(Cols, FFSpanMap) - -def diameterwiseColFastFarm(Cols, nWT=9): - """ Return column info, available columns and indices that contain AD spanwise data""" - FFDiamMap=dict() - for i in np.arange(nWT): - for x in ['X','Y','Z']: - FFDiamMap[r'^WkAxs{}T{:d}D(\d*)_\[-\]'.format(x,i+1)] ='WkAxs{}T{:d}_[-]'.format(x,i+1) - for i in np.arange(nWT): - for x in ['X','Y','Z']: - FFDiamMap[r'^WkPos{}T{:d}D(\d*)_\[m\]'.format(x,i+1)] ='WkPos{}T{:d}_[m]'.format(x,i+1) - for i in np.arange(nWT): - for x in ['X','Y','Z']: - FFDiamMap[r'^WkVel{}T{:d}D(\d*)_\[m/s\]'.format(x,i+1)] ='WkVel{}T{:d}_[m/s]'.format(x,i+1) - for i in np.arange(nWT): - for x in ['X','Y','Z']: - FFDiamMap[r'^WkDiam{}T{:d}D(\d*)_\[m\]'.format(x,i+1)] ='WkDiam{}T{:d}_[m]'.format(x,i+1) - return fastlib.find_matching_columns(Cols, FFDiamMap) - -def SensorsFARMRadial(nWT=3,nD=10,nR=30,signals=None): - """ Returns a list of FASTFarm sensors that are used for the radial distribution - of quantities (e.g. Ct, Wake Deficits). - If `signals` is provided, the output is the list of sensors within the list `signals`. - """ - WT = np.arange(nWT) - r = np.arange(nR) - D = np.arange(nD) - sens=[] - sens+=['CtT{:d}N{:02d}_[-]'.format(i+1,j+1) for i in WT for j in r] - sens+=['WkDfVxT{:d}N{:02d}D{:d}_[m/s]'.format(i+1,j+1,k+1) for i in WT for j in r for k in D] - sens+=['WkDfVrT{:d}N{:02d}D{:d}_[m/s]'.format(i+1,j+1,k+1) for i in WT for j in r for k in D] - if signals is not None: - sens = [c for c in sens if c in signals] - return sens - -def SensorsFARMDiam(nWT,nD): - """ Returns a list of FASTFarm sensors that contain quantities at different downstream diameters - (e.g. WkAxs, WkPos, WkVel, WkDiam) - If `signals` is provided, the output is the list of sensors within the list `signals`. - """ - WT = np.arange(nWT) - D = np.arange(nD) - XYZ = ['X','Y','Z'] - sens=[] - sens+=['WkAxs{}T{:d}D{:d}_[-]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] - sens+=['WkPos{}T{:d}D{:d}_[m]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] - sens+=['WkVel{}T{:d}D{:d}_[m/s]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] - sens+=['WkDiam{}T{:d}D{:d}_[m]'.format(x,i+1,j+1) for x in XYZ for i in WT for j in D] - if signals is not None: - sens = [c for c in sens if c in signals] - return sens - - -def extractFFRadialData(fastfarm_out,fastfarm_input,avgMethod='constantwindow',avgParam=30,D=1,df=None): - # LEGACY - return spanwisePostProFF(fastfarm_input,avgMethod=avgMethod,avgParam=avgParam,D=D,df=df,fastfarm_out=fastfarm_out) - - -def spanwisePostProFF(fastfarm_input,avgMethod='constantwindow',avgParam=30,D=1,df=None,fastfarm_out=None): - """ - Opens a FASTFarm output file, extract the radial data, average them and returns spanwise data - - D: diameter TODO, extract it from the main file - - See faslibt.averageDF for `avgMethod` and `avgParam`. - """ - # --- Opening ouputfile - if df is None: - df=FASTOutputFile(fastfarm_out).toDataFrame() - - # --- Opening input file and extracting inportant variables - if fastfarm_input is None: - # We don't have an input file, guess numbers of turbine, diameters, Nodes... - cols, sIdx = fastlib.find_matching_pattern(df.columns.values, r'T(\d+)') - nWT = np.array(sIdx).astype(int).max() - cols, sIdx = fastlib.find_matching_pattern(df.columns.values, r'D(\d+)') - nD = np.array(sIdx).astype(int).max() - cols, sIdx = fastlib.find_matching_pattern(df.columns.values, r'N(\d+)') - nr = np.array(sIdx).astype(int).max() - vr=None - vD=None - D=0 - main = None - else: - main=FASTInputFile(fastfarm_input) - iOut = main['OutRadii'] - dr = main['dr'] # Radial increment of radial finite-difference grid (m) - OutDist = main['OutDist'] # List of downstream distances for wake output for an individual rotor - WT = main['WindTurbines'] - nWT = len(WT) - vr = dr*np.array(iOut) - vD = np.array(OutDist) - nr=len(iOut) - nD=len(vD) - - - # --- Extracting time series of radial data only - colRadial = SensorsFARMRadial(nWT=nWT,nD=nD,nR=nr,signals=df.columns.values) - colRadial=['Time_[s]']+colRadial - dfRadialTime = df[colRadial] # TODO try to do some magic with it, display it with a slider - - # --- Averaging data - dfAvg = fastlib.averageDF(df,avgMethod=avgMethod,avgParam=avgParam) - - # --- Extract radial data - ColsInfo, nrMax = spanwiseColFastFarm(df.columns.values, nWT=nWT, nD=nD) - dfRad = fastlib.extract_spanwise_data(ColsInfo, nrMax, df=None, ts=dfAvg.iloc[0]) - #dfRad = fastlib.insert_radial_columns(dfRad, vr) - if dfRad is not None: - dfRad.insert(0, 'i_[#]', np.arange(nrMax)+1) # For all, to ease comparison - if vr is not None: - dfRad.insert(0, 'r_[m]', vr[:nrMax]) # give priority to r_[m] when available - dfRad['i/n_[-]']=np.arange(nrMax)/nrMax - - # --- Extract downstream data - ColsInfo, nDMax = diameterwiseColFastFarm(df.columns.values, nWT=nWT) - dfDiam = fastlib.extract_spanwise_data(ColsInfo, nDMax, df=None, ts=dfAvg.iloc[0]) - if dfDiam is not None: - dfDiam.insert(0, 'i_[#]', np.arange(nDMax)+1) # For all, to ease comparison - if vD is not None: - dfDiam.insert(0, 'x_[m]', vD[:nDMax]) - dfDiam['i/n_[-]'] = np.arange(nDMax)/nDMax - return dfRad, dfRadialTime, dfDiam - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py deleted file mode 100644 index 1c5f9b4fef..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_run_Examples.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[A-Za-z][_-a-zA-Z0-9]*.py')) - import matplotlib.pyplot as plt - print('\n--------------------------------------------------------------') - for f in files: - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - plt.close('all') - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py deleted file mode 100644 index e8a7c9317c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/fastfarm/tests/test_turbsimExtent.py +++ /dev/null @@ -1,79 +0,0 @@ -import unittest -import os -import numpy as np - -from pyFAST.fastfarm import * - -MyDir=os.path.dirname(__file__) - -class Test(unittest.TestCase): - - def test_box_extent(self): - # Test the turbulence box extent function - - # --- TurbSim Box paarameters - yBox = np.arange(-187.5,188 ,5 ) - zBox = np.arange(1 ,282 ,5 ) - tBox = np.arange(0 ,4.901,0.1) - meanU = 5.968230471458111 - # --- Parameters for TurbSim Extent - D = 77.0 # Turbine diameter (m) - hubHeight = 78.045 # Hub Height (m) - extent_X_high = 1.2 # x-extent of high res box in diamter around turbine location - extent_Y_high = 1.2 # y-extent of high res box in diamter around turbine location - chord_max = 5 # maximum blade chord (m). Turbine specific. - Cmeander = 1.9 # Meandering constant (-) - # --- Layout - xWT = [0.0, 265.] # x positions of turbines - yWT = [0.0, 50.0] # y postitions of turbines - zWT = [0.0, 0.0 ] # z postitions of turbines - - # --- Determine Box extent for FAST>Farm - FFTS = fastFarmBoxExtent(yBox, zBox, tBox, meanU, hubHeight, D, xWT, yWT, Cmeander=Cmeander, chord_max=chord_max, extent_X=extent_X_high, extent_YZ=extent_Y_high) - - # --- Test values - #print(FFTS) - np.testing.assert_almost_equal(FFTS['DT_Low'] , 2.4 , 5) - np.testing.assert_almost_equal(FFTS['DT_High'] , 0.1 , 5) - np.testing.assert_almost_equal(FFTS['NX_Low'] , 196 , 5) - np.testing.assert_almost_equal(FFTS['NY_Low'] , 75 , 5) - np.testing.assert_almost_equal(FFTS['NZ_Low'] , 56 , 5) - np.testing.assert_almost_equal(FFTS['X0_Low'] ,-51 , 5) - np.testing.assert_almost_equal(FFTS['Y0_Low'] ,-188 , 5) - np.testing.assert_almost_equal(FFTS['Z0_Low'] , 1 , 5) - np.testing.assert_almost_equal(FFTS['dX_Low'] , 4.7746 , 5) - np.testing.assert_almost_equal(FFTS['dY_Low'] , 5.0 , 5) - np.testing.assert_almost_equal(FFTS['dZ_Low'] , 5.0 , 5) - np.testing.assert_almost_equal(FFTS['NX_High'] , 20 , 5) - np.testing.assert_almost_equal(FFTS['NY_High'] , 19 , 5) - np.testing.assert_almost_equal(FFTS['NZ_High'] , 25 , 5) - np.testing.assert_almost_equal(FFTS['dX_High'] , 4.7746, 5) - np.testing.assert_almost_equal(FFTS['dY_High'] , 5 , 5) - np.testing.assert_almost_equal(FFTS['dZ_High'] , 5 , 5) - np.testing.assert_almost_equal(FFTS['X0_High'] , [-46.2254, 216.3767], 5) - np.testing.assert_almost_equal(FFTS['Y0_High'] , [-48 , 2 ], 5) - - # --- Write Fast Farm file with layout and Low and High res extent - templateFSTF = os.path.join(MyDir, '../examples/SampleFiles/TestCase.fstf') # template file used for FastFarm input file, need to exist - outputFSTF = os.path.join(MyDir, '../examples/SampleFiles/_TestCase_mod.fstf') # new file that will be written - writeFastFarm(outputFSTF, templateFSTF, xWT, yWT, zWT, FFTS=FFTS) - #import matplotlib.pyplot as plt - #plotFastFarmSetup(outputFSTF, grid=True) - #plt.show() - - # --- Check that locations are at integer locations - X_rel = (np.array(FFTS['X0_High'])-FFTS['X0_Low'])/FFTS['dX_High'] - Y_rel = (np.array(FFTS['Y0_High'])-FFTS['Y0_Low'])/FFTS['dY_High'] - dX = X_rel - np.round(X_rel) - dY = Y_rel - np.round(Y_rel) - np.testing.assert_almost_equal(dX, [0]*len(dX), 3) - np.testing.assert_almost_equal(dY, [0]*len(dY), 3) - - - -if __name__ == '__main__': - unittest.main() - -if __name__ == '__main__': - unittest.main() - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md deleted file mode 100644 index 5c6f8fd32c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/README.md +++ /dev/null @@ -1,63 +0,0 @@ - -# Input output file readers - -This package contains readers and writers for typical files used in OpenFAST simulations: -- FAST input file (`.fst, .dat, .txt`), `Class: FASTInputFile, file: fast_input_file.py`. -- FAST output file (`.out, .outb, .elev`), `Class: FASTOutputFile, file: fast_output_file.py`. -- FAST linearization file (`.lin`), `Class: FASTLinearizationFile, file: fast_linearization_file.py`. -- FAST summary file (`.sum.yaml`), `Class: FASTSummaryFile, file: fast_summary_file.py`. -- TurbSim binary file (`.bts`), `Class: TurbSimFile, file: turbsim_file.py`. -- CSV file (`.csv, .dat, .txt`), `Class: CSVFile, file: csv_file.py`. - - -## Main architecture and interface - -A separate python file and class is used for each file format. -The classes inherit from the standard `File` class, present in the file `file.py`. - -The object returned by each class is (or behaves as) a dictionary. -The main methods are: -- `object = class()` : create an instance of a file object -- `object = class(filename)`: create an instance of a file object, and read a given file -- `object.read(filename)`: read the given file -- `object.write(filename)`: write the object to a file (may overwrite) -- `object.toDataFrame()`: attempts to convert object to a pandas DataFrame - -Additional methods may be present depending on the file format. - - -## Examples -Examples scripts are found in this [folder](examples). -Below are simple examples to get started: - - -Read an AeroDyn file, modifies some values and write the modified file: -```python -from pyFAST.input_output import FASTInputFile -filename = 'AeroDyn.dat' -f = FASTInputFile(filename) -f['TwrAero'] = True -f['AirDens'] = 1.225 -f.write('AeroDyn_Changed.dat') -``` - -Read an OpenFAST binary output file and convert it to a pandas DataFrame -```python -from pyFAST.input_output import FASTOutputFile -df = FASTOutputFile('5MW.outb').toDataFrame() -time = df['Time_[s]'] -Omega = df['RotSpeed_[rpm]'] -``` - -Read a TurbSim binary file -```python -from pyFAST.input_output import TurbSimFile -ts = TurbSimFile('Turb.bts') -print(ts.keys()) -print(ts['u'].shape) -``` -For more examples on how to manipulate TurbSim files see -see [examples](examples/Example_TurbSimBox.py) - -TurbSim input file processing (file modification, run and result export) -see [examples](examples/Example_TurbSim_Processing.py). diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py deleted file mode 100644 index b86f3a63c1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/__init__.py +++ /dev/null @@ -1,307 +0,0 @@ -# --- Making main readers available -from .csv_file import CSVFile -from .excel_file import ExcelFile -from .fast_input_deck import FASTInputDeck -from .fast_input_file import FASTInputFile -from .fast_linearization_file import FASTLinearizationFile -from .fast_output_file import FASTOutputFile -from .fast_summary_file import FASTSummaryFile -from .fast_wind_file import FASTWndFile -# from .bmodes_out_file import BModesOutFile -from .hawc2_pc_file import HAWC2PCFile -from .hawc2_ae_file import HAWC2AEFile -from .hawc2_dat_file import HAWC2DatFile -from .hawc2_htc_file import HAWC2HTCFile -from .hawc2_st_file import HAWC2StFile -# from .hawcstab2_pwr_file import HAWCStab2PwrFile -# from .hawcstab2_ind_file import HAWCStab2IndFile -# from .hawcstab2_cmb_file import HAWCStab2CmbFile -from .mannbox_file import MannBoxFile -# from .flex_blade_file import FLEXBladeFile -# from .flex_profile_file import FLEXProfileFile -# from .flex_out_file import FLEXOutFile -# from .flex_doc_file import FLEXDocFile -# from .flex_wavekin_file import FLEXWaveKinFile -# from .turbsim_ts_file import TurbSimTSFile -from .turbsim_file import TurbSimFile -# from .netcdf_file import NetCDFFile -# from .tdms_file import TDMSFile -# from .tecplot_file import TecplotFile -from .vtk_file import VTKFile -# from .bladed_out_file import BladedFile -# from .parquet_file import ParquetFile -# from .cactus_file import CactusFile -# from .rosco_performance_file import ROSCOPerformanceFile -from .raawmat_file import RAAWMatFile - - -# --- Generic reader / fileformat detection -from .file import File, WrongFormatError, BrokenFormatError, FileNotFoundError, EmptyFileError, OptionalImportError -from .file_formats import FileFormat, isRightFormat -import sys -import os -import numpy as np - -class FormatNotDetectedError(Exception): - pass - -class UserFormatImportError(Exception): - pass - - -_FORMATS=None - -def fileFormats(userpath=None, ignoreErrors=False, verbose=False): - """ return list of fileformats supported by the library - If userpath is provided, - - OUTPUTS: - if ignoreErrors is True: - formats, errors - else: - formats - - """ - global _FORMATS - errors=[] - if _FORMATS is not None: - if ignoreErrors: - return _FORMATS, errors - else: - return _FORMATS - # --- Library formats - from .fast_input_file import FASTInputFile - from .fast_output_file import FASTOutputFile - from .csv_file import CSVFile - from .fast_wind_file import FASTWndFile - from .fast_linearization_file import FASTLinearizationFile - from .fast_summary_file import FASTSummaryFile - from .bmodes_out_file import BModesOutFile - from .hawc2_pc_file import HAWC2PCFile - from .hawc2_ae_file import HAWC2AEFile - from .hawc2_dat_file import HAWC2DatFile - from .hawc2_htc_file import HAWC2HTCFile - from .hawc2_st_file import HAWC2StFile - from .hawcstab2_pwr_file import HAWCStab2PwrFile - from .hawcstab2_ind_file import HAWCStab2IndFile - from .hawcstab2_cmb_file import HAWCStab2CmbFile - from .mannbox_file import MannBoxFile - from .flex_blade_file import FLEXBladeFile - from .flex_profile_file import FLEXProfileFile - from .flex_out_file import FLEXOutFile - from .flex_doc_file import FLEXDocFile - from .flex_wavekin_file import FLEXWaveKinFile - from .excel_file import ExcelFile - from .turbsim_ts_file import TurbSimTSFile - from .turbsim_file import TurbSimFile - from .netcdf_file import NetCDFFile - from .tdms_file import TDMSFile - from .tecplot_file import TecplotFile - from .vtk_file import VTKFile - from .bladed_out_file import BladedFile - from .parquet_file import ParquetFile - from .pickle_file import PickleFile - from .cactus_file import CactusFile - from .raawmat_file import RAAWMatFile - from .rosco_discon_file import ROSCODISCONFile - from .rosco_performance_file import ROSCOPerformanceFile - priorities = [] - formats = [] - def addFormat(priority, fmt): - priorities.append(priority) - formats.append(fmt) - addFormat(0, FileFormat(CSVFile)) - addFormat(0, FileFormat(ExcelFile)) - addFormat(10, FileFormat(TecplotFile)) - addFormat(10, FileFormat(BladedFile)) - addFormat(20, FileFormat(FASTInputFile)) - addFormat(20, FileFormat(FASTOutputFile)) - addFormat(20, FileFormat(FASTWndFile)) - addFormat(20, FileFormat(FASTLinearizationFile)) - addFormat(20, FileFormat(FASTSummaryFile)) - addFormat(20, FileFormat(TurbSimTSFile)) - addFormat(20, FileFormat(TurbSimFile)) - addFormat(30, FileFormat(HAWC2DatFile)) - addFormat(30, FileFormat(HAWC2HTCFile)) - addFormat(30, FileFormat(HAWC2StFile)) - addFormat(30, FileFormat(HAWC2PCFile)) - addFormat(30, FileFormat(HAWC2AEFile)) - addFormat(30, FileFormat(HAWCStab2PwrFile)) - addFormat(30, FileFormat(HAWCStab2IndFile)) - addFormat(30, FileFormat(HAWCStab2CmbFile)) - addFormat(30, FileFormat(MannBoxFile)) - addFormat(40, FileFormat(FLEXBladeFile)) - addFormat(40, FileFormat(FLEXProfileFile)) - addFormat(40, FileFormat(FLEXOutFile)) - addFormat(40, FileFormat(FLEXWaveKinFile)) - addFormat(40, FileFormat(FLEXDocFile)) - addFormat(50, FileFormat(BModesOutFile)) - addFormat(50, FileFormat(ROSCODISCONFile)) - addFormat(50, FileFormat(ROSCOPerformanceFile)) - addFormat(60, FileFormat(NetCDFFile)) - addFormat(60, FileFormat(VTKFile)) - addFormat(60, FileFormat(TDMSFile)) - addFormat(60, FileFormat(ParquetFile)) - addFormat(60, FileFormat(PickleFile)) - addFormat(70, FileFormat(CactusFile)) - addFormat(70, FileFormat(RAAWMatFile)) - - # --- User defined formats from user path - UserClasses, UserPaths, UserModules, UserModuleNames, errors = userFileClasses(userpath, ignoreErrors, verbose=verbose) - for cls, f in zip(UserClasses, UserPaths): - try: - ff = FileFormat(cls) - except Exception as e: - s='Error registering a user fileformat.\n\nThe module location was: {}\n\nThe class name was: {}\n\nMake sure the class has `defaultExtensions` and `formatName` as static methods.\n\nThe exception was:\n{}'.format(f, cls.__name__, e) - if ignoreErrors: - errors.append(s) - continue - else: - raise UserFormatImportError(s) - # Use class.priority - try: - priority = cls.priority() - except: - priority=2 - addFormat(priority, ff) - - # --- Sort fileformats by priorities - formats = np.asarray(formats)[np.argsort(priorities, kind='stable')] - - _FORMATS=formats - if ignoreErrors: - return formats, errors - else: - return formats - - - -def userFileClasses(userpath=None, ignoreErrors=False, verbose=True): - """ return list of user file class in UserData folder""" - if userpath is None: - dataDir = defaultUserDataDir() - userpath = os.path.join(dataDir, 'weio') - errors = [] - UserClasses = [] - UserPaths = [] - UserModules = [] - UserModuleNames = [] - if os.path.exists(userpath): - if verbose: - print('>>> Looking for user modules in folder:',userpath) - import glob - from importlib.machinery import SourceFileLoader - import inspect - pyfiles = glob.glob(os.path.join(userpath,'*.py')) - # Loop through files, look for classes of the form ClassNameFile, - for f in pyfiles: - if f in ['__init__.py']: - continue - mod_name = os.path.basename(os.path.splitext(f)[0]) - try: - if verbose: - print('>>> Trying to load user module:',f) - module = SourceFileLoader(mod_name,f).load_module() - except Exception as e: - s='Error importing a user module.\n\nThe module location was: {}\n\nTry importing this module to debug it.\n\nThe Exception was:\n{}'.format(f, e) - if ignoreErrors: - errors.append(s) - continue - else: - raise UserFormatImportError(s) - found=False - for name, obj in inspect.getmembers(module): - if inspect.isclass(obj): - classname = obj.__name__.lower() - if classname!='file' and classname.find('file')>=0 and classname.find('error')<0: - if verbose: - print(' Found File class with name:',obj.__name__) - UserClasses.append(obj) - UserPaths.append(f) - UserModules.append(module) - UserModuleNames.append(mod_name) - found=True # allowing only one class per file for now.. - break - if not found: - s='Error finding a class named "*File" in the user module.\n\nThe module location was: {}\n\nNo class containing the string "File" in its name was found.'.format(f) - if ignoreErrors: - errors.append(s) - else: - raise UserFormatImportError(s) - return UserClasses, UserPaths, UserModules, UserModuleNames, errors - - -def defaultUserDataDir(): - """ - Returns a parent directory path - where persistent application data can be stored. - # linux: ~/.local/share - # macOS: ~/Library/Application Support - # windows: C:/Users//AppData/Roaming - """ - home = os.path.expanduser('~') - ptfm = sys.platform - if ptfm == "win32": - return os.path.join(home , 'AppData','Roaming') - elif ptfm.startswith("linux"): - return os.path.join(home, '.local', 'share') - elif ptfm == "darwin": - return os.path.join(home, 'Library','Application Support') - else: - print('>>>>>>>>>>>>>>>>> Unknown Platform', sys.platform) - return './UserData' - - - -def detectFormat(filename, **kwargs): - """ Detect the file formats by looping through the known list. - The method may simply try to open the file, if that's the case - the read file is returned. """ - import os - import re - global _FORMATS - if _FORMATS is None: - formats=fileFormats() - else: - formats=_FORMATS - ext = os.path.splitext(filename.lower())[1] - detected = False - i = 0 - while not detected and i0: - extPatMatch = [re.match(pat, ext) is not None for pat in extPatterns] - extMatch = any(extPatMatch) - else: - extMatch = False - if extMatch: # we have a match on the extension - valid, F = isRightFormat(myformat, filename, **kwargs) - if valid: - #print('File detected as :',myformat) - detected=True - return myformat,F - - i += 1 - - if not detected: - raise FormatNotDetectedError('The file format could not be detected for the file: '+filename) - -def read(filename, fileformat=None, **kwargs): - F = None - if not os.path.exists(filename): - raise FileNotFoundError('weio cannot read the following file because it does not exist:\n Inp. path: {}\n Abs. path: {}'.format(filename, os.path.abspath(filename))) - # Detecting format if necessary - if fileformat is None: - fileformat,F = detectFormat(filename, **kwargs) - # Reading the file with the appropriate class if necessary - if not isinstance(F, fileformat.constructor): - F=fileformat.constructor(filename=filename) - return F - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py deleted file mode 100644 index c492779068..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/amrwind_file.py +++ /dev/null @@ -1,125 +0,0 @@ -"""Read AMR-Wind NETCDF file - -""" -import xarray as xr -import numpy as np - -class AMRWindFile(dict): - """ - Read a AMR-Wind output file (.nc) - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.nc'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'NetCDF plane sampling file from AMRWind' - - @staticmethod - def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low - - def __init__(self, filename=None, timestep=None, output_frequency=None, **kwargs): - self.filename = filename - self.amrwind_dt = timestep - self.output_dt = timestep * output_frequency - - if filename: - self.read(**kwargs) - - def read(self, group_name): - """ - Parameters - ---------- - - group_name : str, - group name inside netcdf file that you want to read, e.g. p_slice - - TODO: see if group_name can be avoided, and add a read_group function - """ - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise Exception('File is empty:',self.filename) - - - ds = xr.open_dataset(self.filename,group=group_name) - - coordinates = {"x":(0,"axial"), "y":(1,"lateral"),"z":(2,"vertical")} - c = {} - for coordinate,(i,desc) in coordinates.items(): - c[coordinate] = xr.IndexVariable( - dims=[coordinate], - data=np.sort(np.unique(ds['coordinates'].isel(ndim=i))), - attrs={"description":"{0} coordinate".format(desc),"units":"m"} - ) - c["t"] = xr.IndexVariable( - dims=["t"], - data=ds.num_time_steps*self.output_dt, - attrs={"description":"time from start of simulation","units":"s"} - ) - - self.nt = len(c["t"]) - self.nx = len(c["x"]) - self.ny = len(c["y"]) - self.nz = len(c["z"]) - - coordinates = {"x":(0,"axial","u"), "y":(1,"lateral","v"),"z":(2,"vertical","w")} - v = {} - for coordinate,(i,desc,u) in coordinates.items(): - v[u] = xr.DataArray(np.reshape(getattr(ds,"velocity{0}".format(coordinate)).values,(self.nt,self.nx,self.ny,self.nz)), - coords=c, - dims=["t","x","y","z"], - name="{0} velocity".format(desc), - attrs={"description":"velocity along {0}".format(coordinate),"units":"m/s"}) - - ds = xr.Dataset(data_vars=v, coords=v[u].coords) - ds.attrs = {"original file":self.filename} - - self.data = ds - - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - raise NotImplementedError() - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - # --- Example (returning one DataFrame): - # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) - # --- Example (returning dict of DataFrames): - #dfs={} - #cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] - #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) - #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) - # return dfs - raise NotImplementedError() - - # --- Optional functions - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - #s+='|Main keys:\n' - #s+='| - ID: {}\n'.format(self['ID']) - #s+='| - data : shape {}\n'.format(self['data'].shape) - s+='|Main methods:\n' - s+='| - read, write, toDataFrame, keys' - return s - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py deleted file mode 100644 index d1f0dcd1d2..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bladed_out_file.py +++ /dev/null @@ -1,398 +0,0 @@ -import os -import numpy as np -import re -import pandas as pd -import glob -import shlex -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - - -# --------------------------------------------------------------------------------} -# --- Helper functions -# --------------------------------------------------------------------------------{ -def read_bladed_sensor_file(sensorfile): - """ - Extract relevant informations from a bladed sensor file - """ - with open(sensorfile, 'r') as fid: - sensorLines = fid.readlines() - - dat=dict() # relevant info in sensor file - - ## read sensor file line by line (just read up to line 20) - #while i < 17: - for i, t_line in enumerate(sensorLines): - if i>30: - break - t_line = t_line.replace('\t',' ') - - if t_line.startswith('NDIMENS'): - # check what is matrix dimension of the file. For blade & tower, - # the matrix is 3-dimensional. - temp = t_line[7:].strip().split() - dat['NDIMENS'] = int(temp[-1]); - - elif t_line.startswith('DIMENS'): - # check what is the size of the matrix - # for example, it can be 11x52500 or 12x4x52500 - temp = t_line[6:].strip().split() - dat['nSensors'] = int(temp[0]) - dat['nMajor'] = int(temp[dat['NDIMENS']-1]) - if dat['NDIMENS'] == 2: - dat['nSections'] = 1 - dat['SectionList'] = [] - - elif t_line.startswith('FORMAT'): - # precision: n/a, R*4, R*8, I*4 - temp = t_line[7:].strip() - dat['Precision'] = np.float32 - if temp[-1] == '8': - dat['Precision'] = np.float64 - - elif t_line.startswith('GENLAB'): - # category of the file you are reading: - dat['category'] = t_line[6:].strip().replace('\'','') - - elif t_line.startswith('AXIVAL'): - # Section on the 3rd dimension you are reading - # sometimes, the info is written on "AXITICK" - temp = t_line[7:].split() - dat['SectionList'] = np.array(temp, dtype=float) - dat['nSections'] = len(dat['SectionList']) - - elif t_line.startswith('AXITICK'): - # Section on the 3rd dimension you are reading - # sometimes, the info is written on "AXIVAL" - # Check next line, we concatenate if doesnt start with AXISLAB (Might need more cases) - try: - # Combine the strings into one string - combined_string = ''.join(sensorLines) - - # Search everything betwee AXITICK and AXISLAB with a regex pattern - t_line = re.search(r'(?<=AXITICK).+?(?=AXISLAB)', combined_string, flags=re.DOTALL) - t_line=t_line.group(0) - # Replace consecutive whitespace characters with a single space - t_line = re.sub(r'\s+', ' ', t_line) - except: - pass - - temp = t_line.strip() - temp = temp.strip('\'').split('\' \'') - dat['SectionList'] = np.array(temp, dtype=str) - dat['nSections'] = len(dat['SectionList']) - - elif t_line.startswith('VARIAB'): - # channel names, NOTE: either quoted, non-quoted, and a mix of both - # Check next line, we concatenate if doesnt start with AXISLAB (Might need more cases) - try: - nextLine=sensorLines[i+1].strip() - if not nextLine.startswith('VARUNIT'): - t_line = t_line.strip()+' '+nextLine - except: - pass - dat['ChannelName'] = shlex.split(t_line[6:]) - - elif t_line.startswith('VARUNIT'): - # channel units: - # Check next line, we concatenate if doesnt start with AXISLAB (Might need more cases) - try: - nextLine=sensorLines[i+1].strip() - if not nextLine.startswith('AXISLAB'): - t_line = t_line.strip()+' '+nextLine - except: - pass - def repUnits(s): - s = s.replace('TT','s^2').replace('T','s').replace('A','rad') - s = s.replace('P','W').replace('L','m').replace('F','N').replace('M','kg') - return s - dat['ChannelUnit']=[repUnits(s) for s in shlex.split(t_line[7:].strip())] - - elif t_line.startswith('MIN '): - dat['MIN'] = float(t_line[3:].strip()) # Start time? - - elif t_line.startswith('STEP'): - dat['STEP'] = float(t_line[4:].strip()) # DT? - - - NeededKeys=['ChannelName','nSensors','nMajor','nSections'] - if not all(key in dat.keys() for key in NeededKeys): - raise BrokenFormatError('Broken or unsupported format. Some necessary keys where not found in the bladed sensor file: {}'.format(sensorfile)) - - if len(dat['ChannelName']) != dat['nSensors']: - raise BrokenFormatError('Broken or unsupported format. Wrong number of channels while reading bladed sensor file: {}'.format(sensorfile)) - # if number of channel names are not matching with Sensor number then create dummy ones: - #dat['ChannelName'] = ['Channel' + str(ss) for ss in range(dat['nSensors'])] - - - return dat - -def OrgData(data, **info): - """ Flatten 3D field into 2D table""" - # since some of the matrices are 3 dimensional, we want to make all - # to 2d matrix, so I am organizing them here: - if info['NDIMENS'] == 3: - SName = [] - SUnit = [] - dataOut = np.zeros( (info['nMajor'],len(info['SectionList'])*len(info['ChannelName'])) ) - - col_vec = -1 - for isec,sec in enumerate(info['SectionList']): - for ichan,(chan,unit) in enumerate(zip(info['ChannelName'], info['ChannelUnit'])): - try: - SName.append(str(np.around(float(sec),2)) + 'm-' + chan) - except ValueError: - SName.append(str(sec) + '-' + chan) - SUnit.append(unit) - col_vec +=1 - dataOut[:,col_vec] = data[:,isec,ichan] - - data = dataOut - info['ChannelName'] = SName - info['ChannelUnit'] = SUnit - else: - pass # Nothing to do for 2D - - return data, info - - - -def read_bladed_output(sensorFilename, readTimeFilesOnly=False): - """ - read a bladed sensor file and data file, reorganize a 3D file into 2D table - """ - # --- Read sensor file and extract relevant informations - sensorInfo = read_bladed_sensor_file(sensorFilename) - nSensors = sensorInfo['nSensors'] - nMajor = sensorInfo['nMajor'] - nSections = sensorInfo['nSections'] - hasTime = 'MIN' and 'STEP' in sensorInfo.keys() - # --- Return if caller only wants time series - if readTimeFilesOnly and not hasTime: - return [], {} - - # --- Read data file - dataFilename = sensorFilename.replace('%','$') - - if isBinary(dataFilename): # it is binary - - with open(os.path.join(dataFilename), 'rb') as fid_2: - data = np.fromfile(fid_2, sensorInfo['Precision']) - - try: - if sensorInfo['NDIMENS'] == 3: - data = np.reshape(data,(nMajor, nSections, nSensors), order='C') - - elif sensorInfo['NDIMENS'] == 2: - data = np.reshape(data,(nMajor,nSensors), order='C') - except: - print('>>> Failed to reshape binary file {}'.format(dataFilename)) - raise - - - else: - #print('it is ascii', NDIMENS) - if sensorInfo['NDIMENS'] == 2: - try: - # Data is stored as time, signal, we reshape to signal, time - data = np.loadtxt(dataFilename) - except ValueError as e: - # Most likely this was a binary file... - data = np.empty((nMajor, nSensors)) * np.nan - print('>>> Value error while reading 2d ascii file: {}'.format(dataFilename)) - raise e - except: - data = np.empty((nMajor, nSensors)) * np.nan - print('>>> Failed to read 2d ascii file: {}'.format(dataFilename)) - raise - - - elif sensorInfo['NDIMENS'] == 3: - try: - # Data is stored as sections, time, signal, we reshape to signal, section, time - data = np.loadtxt(dataFilename).reshape((nMajor, nSections, nSensors),order='C') - except: - data = np.empty((nMajor, nSections, nSensors)) * np.nan - print('>>> Failed to read 3d ascii file: {}'.format(dataFilename)) - - return OrgData(data, **sensorInfo) - - -class BladedFile(File): - r""" - Read a Bladed out put file (current version is only binary files) - - Main methods: - read: it finds all % and $ files based on selected .$PJ file and calls "DataValue" to read data from all those files - toDataFrame: create Pandas dataframe output - - Main data stored: - self.dataSets: dictionary of datasets, for each "length" of data - - example: - filename = r'h:\004_Loads\Sim\Bladed\003\Ramp_up\Bladed_out_ascii.$04' - f = BladedFile(filename) - print(f.dataSets.keys()) - df = f.toDataFrame() - - """ - @staticmethod - def defaultExtensions(): - return ['.%*', '.$*'] - - @staticmethod - def formatName(): - return 'Bladed output file' - - def __init__(self, filename=None, **kwargs): - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ read self, or read filename if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # Calling children function - self._read(**kwargs) - - def _read(self): - """ - Read a bladed output file, data are in *.$II and sensors in *%II. - - If the file is a *$PJ file, all output files are read - - Otherwise only the current file is read - """ - - basename, ext = os.path.splitext(self.filename) - if ext.lower()=='.$pj': - readTimeFilesOnly=True - searchPattern = basename + '.%[0-9][0-9]*' # find all files in the folder - else: - readTimeFilesOnly=False - searchPattern = basename + ext.replace('$','%') # sensor file name - - # Look for files matching pattern - files = glob.glob(searchPattern) - - # We'll store the data in "dataSets",dictionaries - dataSets={} - - if len(files)==0: - e= FileNotFoundError(searchPattern) - e.filename=(searchPattern) - raise e - elif len(files)==1: - readTimeFilesOnly=False - - files.sort() - - for i,filename in enumerate(files): - - dataFilename = filename.replace('%','$') - try: - # Call "Read_bladed_file" function to Read and store data: - data, info = read_bladed_output(filename, readTimeFilesOnly=readTimeFilesOnly) - except FileNotFoundError as e: - print('>>> Missing datafile: {}'.format(e.filename)) - if len(files)==1: - raise e - continue - except ValueError as e: - print('>>> ValueError while reading: {}'.format(dataFilename)) - if len(files)==1: - raise e - continue - except: - raise - print('>>> Misc error while reading: {}'.format(dataFilename)) - if len(files)==1: - raise - continue - if len(data)==0: - print('>>> Skipping file since no time present {}'.format(filename)) - continue - - # we use number of data as key, but we'll use "name" later - key = info['nMajor'] - - if key in dataSets.keys(): - # dataset with this length are already present, we concatenate - dset = dataSets[key] - dset['data'] = np.column_stack((dset['data'], data)) - dset['sensors'] += info['ChannelName'] - dset['units'] += info['ChannelUnit'] - dset['name'] = 'Misc_'+str(key) - - else: - # We add a new dataset for this length - dataSets[key] = {} - dset = dataSets[key] - # We force a time vector when possible - if 'MIN' and 'STEP' in info.keys(): - time = np.arange(info['nMajor'])*info['STEP'] + info['MIN'] - data = np.column_stack((time, data)) - info['ChannelName'].insert(0, 'Time') - info['ChannelUnit'].insert(0, 's') - - dset['data'] = data - dset['sensors'] = info['ChannelName'] - dset['units'] = info['ChannelUnit'] - dset['name'] = info['category'] - - # Check if we have "many" misc, if only one, replace by "Misc" - keyMisc = [k for k,v in dataSets.items() if v['name'].startswith('Misc_')] - if len(keyMisc)==1: - #dataSets[keyMisc[0]]['name']='Misc' - # We keep only one dataset for simplicity - self.dataSets= {'Misc': dataSets[keyMisc[0]]} - else: - # Instead of using nMajor as key, we use the "name" - self.dataSets= {v['name']: v for (k, v) in dataSets.items()} - - - def toDataFrame(self): - dfs={} - for k,dset in self.dataSets.items(): - BL_ChannelUnit = [ name+' ['+unit+']' for name,unit in zip(dset['sensors'],dset['units'])] - df = pd.DataFrame(data=dset['data'], columns=BL_ChannelUnit) - # remove duplicate columns - df = df.loc[:,~df.columns.duplicated()] - df.columns.name = k # hack for pyDatView when one dataframe is returned - dfs[k] = df - if len(dfs)==1: - return dfs[next(iter(dfs))] - else: - return dfs - - -def isBinary(filename): - with open(filename, 'r') as f: - try: - # first try to read as string - l = f.readline() - # then look for weird characters - for c in l: - code = ord(c) - if code<10 or (code>14 and code<31): - return True - return False - except UnicodeDecodeError: - return True - -if __name__ == '__main__': - pass - #filename = r'E:\Work_Google Drive\Bladed_Sims\Bladed_out_binary.$41' - #Output = BladedFile(filename) - #df = Output.toDataFrame() - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py deleted file mode 100644 index 7d99546750..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/bmodes_out_file.py +++ /dev/null @@ -1,152 +0,0 @@ -""" -Input/output class for the BModes output files -""" -import numpy as np -import pandas as pd -import os - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File=dict - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - -class BModesOutFile(File): - """ - Read/write a BModes output file. The object behaves as a dictionary. - - Main methods - ------------ - - read, write, toDataFrame, keys - - Examples - -------- - f = BModesOutFile('file.out') - print(f.keys()) - print(f.toDataFrame().columns) - - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.out'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'BModes output file' - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # --- Calling (children) function to read - self._read(**kwargs) - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - # Calling (children) function to write - self._write() - - def _read(self): - """ Reads self.filename and stores data into self. Self is (or behaves like) a dictionary""" - # --- Example: - #self['data']=[] - #with open(self.filename, 'r', errors="surrogateescape") as f: - # for i, line in enumerate(f): - # self['data'].append(line) - - with open(self.filename) as f: - self['frequencies'] = [] - self['mode_shapes'] = [] - row_string = f.readline() - if row_string.find('BModes')<0: - raise WrongFormatError('This file was not generated by BModes, "BModes" is not found on first line') - while row_string: - row_string = f.readline() - freq_id = row_string.find('freq = ') - if freq_id > 0: - self['frequencies'].append(float(row_string[freq_id+7:freq_id+19])) - f.readline() - f.readline() - f.readline() - data=[] - while True: - row_data = f.readline() - if len(row_data.strip())==0 or row_data.find('===')==0: - break - else: - data.append(row_data.split()) - self['mode_shapes'].append(np.asarray(data).astype(float)) - - def _write(self): - """ Writes to self.filename""" - # --- Example: - #with open(self.filename,'w') as f: - # f.write(self.toString) - raise NotImplementedError() - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - dfs={} - cols =['span_loc','s-s disp','s-s slope','f-a disp','f-a slope','twist'] - for iMode,mode in enumerate(self['mode_shapes']): - dfs['Mode_{}'.format(iMode+1)]= pd.DataFrame(data=mode,columns=cols) - return dfs - - # --- Optional functions - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - s+='|Main keys:\n' - s+='| - frequencies: {}\n'.format(self['frequencies']) - s+='| - mode_shapes : {} shapes of shape {}x{}\n'.format(len(self['mode_shapes']), *self['mode_shapes'][0].shape) - s+='|Main methods:\n' - s+='| - read, write, toDataFrame, keys' - return s - - def _get_modal_coefficients(x, y, deg=[2, 3, 4, 5, 6]): - # Normalize x input - xn = (x - x.min()) / (x.max() - x.min()) - # Get coefficients to 6th order polynomial - p6 = np.polynomial.polynomial.polyfit(xn, y, deg) - return p6 - - def _identify(self): - """ identify modes""" - pass - - - -if __name__ == '__main__': - f = BModesOutFile('tests/example_files/BModesOut.out') - df = f.toDataFrame() - print(f) - print(df) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py deleted file mode 100644 index 08e7fbf126..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_element_file.py +++ /dev/null @@ -1,107 +0,0 @@ -import numpy as np -import pandas as pd -import os - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - File=dict - -class CactusElementFile(File): - - @staticmethod - def defaultExtensions(): - return ['.in'] - - @staticmethod - def formatName(): - return 'CACTUS file' - - def __init__(self,filename=None,**kwargs): - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ read self, or read filename if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # Calling children function - self._read(**kwargs) - - def write(self, filename=None): - """ write self, or to filename if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - # Calling children function - self._write() - - def _read(self): - """ """ - import f90nml - from .csv_file import CSVFile - - filepath = self.filename - basepath = '_'.join(filepath.split('_')[:-1]) - basename = os.path.basename(basepath) - parentdir = os.path.dirname(basepath) - mainfile = parentdir[:-6]+basename+'.in' - print(basename) - print(basepath) - print(parentdir) - print(mainfile) - print(os.path.dirname(basepath)) - - - - -# elemfile= -# if len(df.columns)!=len(cols): -# print('column for rename:',cols) -# print('columns in file :',df.columns) -# print(len(df.columns)) -# print(len(cols)) -# raise Exception('Problem with number of columns') -# df.columns=cols -# -# # --- Read elem -# elemfile = f.replace('TimeData','ElementData') -# dsfile = f.replace('TimeData','DSData') -# dfElem = weio.read(elemfile).toDataFrame() - - #with open(self.filename, 'r', errors="surrogateescape") as f: - # for i, line in enumerate(f): - # data.append(line) - - def _write(self): - """ """ - with open(self.filename,'w') as f: - f.write(self.toString) - - def toDataFrame(self): - #cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] - #dfs[name] = pd.DataFrame(data=..., columns=cols) - #df=pd.DataFrame(data=,columns=) - return - - - def toString(self): - s='' - return s - - def __repr__(self): - s ='Class XXXX (attributes: data)\n' - return s - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py deleted file mode 100644 index 265d0d8dc4..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/cactus_file.py +++ /dev/null @@ -1,386 +0,0 @@ -import numpy as np -import pandas as pd -import os - -try: - from .file import File, WrongFormatError, BrokenFormatError, EmptyFileError -except: - File=dict - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - -class CactusFile(File): - - @staticmethod - def defaultExtensions(): - return ['.in'] - - @staticmethod - def formatName(): - return 'CACTUS file' - - def __init__(self,filename=None,**kwargs): - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ read self, or read filename if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # Calling children function - self._read(**kwargs) - - def write(self, filename=None): - """ write self, or to filename if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - # Calling children function - self._write() - - def _read(self): - """ """ - import f90nml - from .csv_file import CSVFile - - filepath = self.filename - basepath = os.path.splitext(filepath)[0] - basename = os.path.basename(basepath) - parentdir = os.path.dirname(basepath) - - # --- Read main input file - nml = f90nml.read(filepath) - for k in ['configinputs','caseinputs']: - self[k] = nml[k] - - # --- Try to read geometry file - arfoilfile = os.path.join(parentdir, nml['caseinputs']['afdpath']) - geomfile = os.path.join(parentdir, nml['caseinputs']['geomfilepath']) - if os.path.exists(geomfile): - with open(geomfile, 'r', errors="surrogateescape") as fid: - geom=dict() - nMax=10 - for i, line in enumerate(fid): - # remove comment - line = line.strip().split('!')[0] - sp = line.strip().split(':') - key = sp[0].strip().lower() - if len(key)>0: - strvalue = sp[1] - try: - value = np.asarray(strvalue.split()).astype(float) - if len(value)==1: - value = value[0] - except: - value = strvalue - geom[key]=value - if i==nMax: - break - self['geom']=geom - self['geom']['file']=geomfile - else: - print('[FAIL] Geom file not found (quantites will be pooorly scaled):',geomfile) - self['geom']={'nblade':1, 'refr':3.28084, 'refar':2, 'file':None} - - # --- Try to read element time data file - timefile = os.path.join(parentdir, 'output', basename+'_TimeData.csv') - if os.path.exists(timefile): - df = CSVFile(timefile).toDataFrame() - nBlades = list(df.columns).count('Blade Fx Coeff. (-)') - self['geom']['nblade'] = list(df.columns).count('Blade Fx Coeff. (-)') - cols=list(df.columns[:8]) - bldCols=['Blade{:d} Fx Coeff. (-)', 'Blade{:d} Fy Coeff. (-)', 'Blade{:d} Fz Coeff. (-)', 'Blade{:d} Torque Coeff. (-)'] - for ib in range(self['geom']['nblade']): - cols+=[b.format(ib+1) for b in bldCols] - df.columns=cols - self['dfTime']=df - - else: - self['dfTime']=None - print('TimeData file not found:',timefile) - - # --- Try to read element data file - elemfile = os.path.join(parentdir, 'output', basename+'_ElementData.csv') - if os.path.exists(elemfile): - dfElem = CSVFile(elemfile).toDataFrame() - self['dfElem'] = dfElem - else: - self['dfElem'] = None - print('ElementData file not found:',elemfile) - - - # --- Read DS file - dsfile = os.path.join(parentdir, 'output', basename+'_DSData.csv') - try: - dfDS =CSVFile(dsfile).toDataFrame() - self['dfDS'] = dfDS - except (FileNotFoundError, EmptyFileError): - self['dfDS'] = None - print('DSData file not found or empty:',dsfile) - - - @property - def omega(self): - return self['caseinputs']['rpm']*2*np.pi/60 - - @property - def TSR(self): - return self['caseinputs']['ut'] - - @property - def RPM(self): - return self['caseinputs']['rpm'] - - @property - def dt(self): - nRot = self['configinputs']['nr'] - nPerRot = self['configinputs']['nti'] - T = 2*np.pi/(self.omega) - return T/nPerRot - - @property - def R(self): - if self['geom']['file'] is not None: - R = self['geom']['refr']/3.28084 # feet to m - else: - R=1 - return R - - @property - def A(self): - # NOTE: Turbine reference area (for force/torque/power normalization) divided by reference radius squared. - if self['geom']['refar'] is not None: - #A = self['geom']['refar']/(3.28084**2) # feet^2 to m^2 - A = self['geom']['refar']*self['geom']['refr']**2 - A /=(3.28084**2) # feet^2 to m^2 - else: - A = (2*self.R)**2 # D^2 - return A - - @property - def U(self): - return self.omega*self.R/self.TSR - - - @property - def time(self): - nRot = self['configinputs']['nr'] - nPerRot = self['configinputs']['nti'] - timeSteps = np.arange(0,nRot*nPerRot) - T = 2*np.pi/(self.omega) - return timeSteps*self.dt - - - def timeDataToOpenFAST(self, df): - """ Convert to similar labels as OpenFAST""" - if df is None: - return None - nRot = self['configinputs']['nr'] - nPerRot = self['configinputs']['nti'] - TSR = self.TSR - CTExcrM = self['caseinputs']['ctexcrm'] - rho = self['caseinputs']['rho']*1.2/0.0023280000 - - time = self.time - if df.shape[0]>> Inconsistent shape, ',iB,ie) - else: - # TODO x/y/R - uix_g=dfSec['IndU (-)'].values*U - uiy_g=dfSec['IndV (-)'].values*U - uiz_g=dfSec['IndW (-)'].values*U - - uix=-(np.cos(psi)*uiz_g + np.sin(psi)*uix_g) - uiy= (np.cos(psi)*uix_g - np.sin(psi)*uiz_g) - - df.insert(c , 'AB{:d}N{:03d}Alpha_[deg]'.format(iB,ie) , alphaSign*dfSec['AOA25 (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Alpha50_[deg]'.format(iB,ie) , alphaSign*dfSec['AOA50 (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Alpha75_[deg]'.format(iB,ie) , alphaSign*dfSec['AOA75 (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Cl_[-]' .format(iB,ie) , alphaSign*dfSec['CL (-)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Cd_[-]' .format(iB,ie) , dfSec['CD (-)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Cm_[-]' .format(iB,ie) , alphaSign*dfSec['CM25 (-)'].values); c+=1 - - #BladeElemOutData(BladeElemOutRow,24)=CN ! Element normal force coefficient (per span) based on local chord and flow velocity - #BladeElemOutData(BladeElemOutRow,25)=CT ! Element tangential force coefficient (per span) based on local chord and flow velocity - df.insert(c , 'AB{:d}N{:03d}Cn_[-]' .format(iB,ie) , alphaSign*dfSec['CN (-)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Ct_[-]' .format(iB,ie) , alphaSign*dfSec['CT (-)'].values); c+=1 - # CT=-CL5*sin(alpha25)+CD5*cos(alpha25) - # CT=-CL5*sin(alpha50)+CD5*cos(alpha50) - Cl= dfSec['CL (-)'].values; Cd= dfSec['CD (-)'].values; alpha= dfSec['AOA25 (deg)'].values*np.pi/180 - df.insert(c , 'AB{:d}N{:03d}Ct2_[-]' .format(iB,ie) , alphaSign*(-Cl*np.sin(alpha) + Cd*np.cos(alpha))); c+=1 - - df.insert(c , 'AB{:d}N{:03d}Cxg_[-]' .format(iB,ie) , dfSec['Fx (-)'].values); c+=1 # TODO, this is likely coefficients related to global coords - df.insert(c , 'AB{:d}N{:03d}Cyg_[-]' .format(iB,ie) , - dfSec['Fz (-)'].values); c+=1 # TODO - df.insert(c , 'AB{:d}N{:03d}Czg_[-]' .format(iB,ie) , dfSec['Fy (-)'].values); c+=1 # TODO - df.insert(c , 'AB{:d}N{:03d}ClC_[-]' .format(iB,ie) , alphaSign*dfSec['CLCirc (-)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}Re_[-]' .format(iB,ie) , dfSec['Re (-)'].values/1e6); c+=1 - df.insert(c , 'AB{:d}N{:03d}Gam_[m^2/s]'.format(iB,ie) , alphaSign*dfSec['GB (?)'].values*U*R); c+=1 # TODO - df.insert(c , 'AB{:d}N{:03d}Vrel_[m/s]' .format(iB,ie) , dfSec['Ur (-)'].values*U); c+=1 - df.insert(c , 'AB{:d}N{:03d}Vindx_[m/s]'.format(iB,ie) , uix ); c+=1 # TODO - df.insert(c , 'AB{:d}N{:03d}Vindy_[m/s]'.format(iB,ie) , uiy ); c+=1 # TODO - - if dfDS is not None: - dfSecDS = dfBld_DS[dfBld_DS['Element']==ie] - df.insert(c , 'AB{:d}N{:03d}alpha_34_[deg]'.format(iB,ie) , alphaSign*dfSecDS['alpha (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}alphaE_[deg]'.format(iB,ie) , alphaSign*dfSecDS['alrefL (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}alphaED_[deg]'.format(iB,ie) , alphaSign*dfSecDS['alrefD (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}adotnorm_[-]'.format(iB,ie) , alphaSign*dfSecDS['adotnorm (-)'].values); c+=1 - #df.insert(c , 'AB{:d}N{:03d}AlphaDot_[-]'.format(iB,ie) , alphaSign*dfSec['AdotNorm (-)'].values); c+=1 # TODO - try: - df.insert(c , 'AB{:d}N{:03d}activeL_[-]'.format(iB,ie) , dfSecDS['DynamicFlagL'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}activeD_[-]'.format(iB,ie) , dfSecDS['DynamicFlagD'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}alphaLagD_[deg]'.format(iB,ie), alphaSign*dfSecDS['alphaLagD (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}delP_[-]'.format(iB,ie) , dfSecDS['delN'].values); c+=1 # NOTE SWAPPING N AND P!!!! - df.insert(c , 'AB{:d}N{:03d}delN_[-]'.format(iB,ie) , dfSecDS['delP'].values); c+=1 # NOTE SWAPPING N AND P!!!! - df.insert(c , 'AB{:d}N{:03d}transA_[-]'.format(iB,ie) , dfSecDS['transA'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}gammaL_[-]'.format(iB,ie) , dfSecDS['gammaL'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}gammaD_[-]'.format(iB,ie) , dfSecDS['gammaD'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}dalphaL_[deg]'.format(iB,ie) , alphaSign*dfSecDS['dalphaL (deg)'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}dalphaD_[deg]'.format(iB,ie) , alphaSign*(dfSecDS['alpha (deg)'].values -dfSecDS['alrefD (deg)'].values)) - df.insert(c , 'AB{:d}N{:03d}Tu_[s]'.format(iB,ie) , dfSecDS['Tu'].values); c+=1 # TODO TODO WRONG - df.insert(c , 'AB{:d}N{:03d}alphaDot_[rad/s]'.format(iB,ie),alphaSign*dfSecDS['alphadot'].values); c+=1 - df.insert(c , 'AB{:d}N{:03d}alphaDot2_[rad/s]'.format(iB,ie),np.concatenate(([0],np.diff(-dfSecDS['alpha (deg)'].values))))*np.pi/180; c+=1 # TODO TODO WRONG - except: - pass - return df,c - - - def _write(self): - """ """ - with open(self.filename,'w') as f: - f.write(self.toString) - - def toDataFrame(self, format='OpenFAST', alphaSign=-1): - # --- - df,c = self.timeDataToOpenFAST(df = self['dfTime']) - df,c = self.elemDataToOpenFAST(dfElem=self['dfElem'], df=df, c=c, dfDS=self['dfDS'], alphaSign=alphaSign) - return df - - - def toString(self): - s='' - return s - - def __repr__(self): - s ='Class XXXX (attributes: data)\n' - return s - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py deleted file mode 100644 index 99dc276517..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/converters.py +++ /dev/null @@ -1,94 +0,0 @@ -import os - - -# -------------------------------------------------------------------------------- -# --- Writing pandas DataFrame to different formats -# -------------------------------------------------------------------------------- -def writeDataFrameToFormat(df, filename, fformat): - """ - Write a dataframe to disk based on user-specified fileformat - - df: pandas dataframe - - filename: filename - - fformat: fileformat in: ['csv', 'outb', 'parquet'] - """ - - if fformat=='outb': - dataFrameToOUTB(df, filename) - elif fformat=='parquet': - dataFrameToParquet(df, filename) - elif fformat=='csv': - dataFrameToCSV(df, filename, sep=',', index=False) - else: - raise Exception('File format not supported for dataframe export `{}`'.format(fformat)) - -def writeDataFrameAutoFormat(df, filename, fformat=None): - """ - Write a dataframe to disk based on extension - - df: pandas dataframe - - filename: filename - """ - if fformat is not None: - raise Exception() - base, ext = os.path.splitext(filename) - ext = ext.lower() - if ext in ['.outb']: - fformat = 'outb' - elif ext in ['.parquet']: - fformat = 'parquet' - elif ext in ['.csv']: - fformat = 'csv' - else: - print('[WARN] defaulting to csv, extension unknown: `{}`'.format(ext)) - fformat = 'csv' - - writeDataFrameToFormat(df, filename, fformat) - -def writeFileDataFrames(fileObject, writer, extension='.conv', filename=None, **kwargs): - """ - From a fileObejct, extract dataframes and write them to disk. - - - fileObject: object inheriting from weio.File with at least - - the attributes .filename - - the method .toDataFrame() - - writer: function with the interface: writer ( dataframe, filename, **kwargs ) - """ - if filename is None: - base, _ = os.path.splitext(fileObject.filename) - filename = base + extension - else: - base, ext = os.path.splitext(filename) - if len(ext)!=0: - extension = ext - if filename == fileObject.filename: - raise Exception('Not overwritting {}. Specify a filename or an extension.'.format(filename)) - - dfs = fileObject.toDataFrame() - if isinstance(dfs, dict): - for name,df in dfs.items(): - filename = base + name + extension - if filename == fileObject.filename: - raise Exception('Not overwritting {}. Specify a filename or an extension.'.format(filename)) - writeDataFrame(df=df, writer=writer, filename=filename, **kwargs) - else: - writeDataFrame(df=dfs, writer=writer, filename=filename, **kwargs) - -def writeDataFrame(df, writer, filename, **kwargs): - """ - Write a dataframe to disk based on a "writer" function. - - df: pandas dataframe - - writer: function with the interface: writer ( dataframe, filename, **kwargs ) - - filename: filename - """ - writer(df, filename, **kwargs) - -# --- Low level writers -def dataFrameToCSV(df, filename, sep=',', index=False, **kwargs): - df.to_csv(filename, sep=sep, index=index, **kwargs) - -def dataFrameToOUTB(df, filename, **kwargs): - from .fast_output_file import writeDataFrame as writeDataFrameToOUTB - writeDataFrameToOUTB(df, filename, binary=True) - -def dataFrameToParquet(df, filename, **kwargs): - df.to_parquet(path=filename, **kwargs) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py deleted file mode 100644 index 5621f0360d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/csv_file.py +++ /dev/null @@ -1,285 +0,0 @@ -import os - -from .file import File, WrongFormatError -import pandas as pd - -class CSVFile(File): - """ - Read/write a CSV file. - - Main methods - ------------ - read, write, toDataFrame - - Examples - -------- - - # Read a csv file and convert it to a pandas dataframe - f = CSVFile('test.csv') - df = f.toDataFrame() - - """ - - @staticmethod - def defaultExtensions(): - return ['.csv','.txt'] - - @staticmethod - def formatName(): - return 'CSV file' - - def __init__(self, filename=None, sep=None, colNames=None, commentChar=None, commentLines=None,\ - colNamesLine=None, detectColumnNames=True, header=None, **kwargs): - colNames = [] if colNames is None else colNames - commentLines = [] if commentLines is None else commentLines - self.sep = sep - self.colNames = colNames - self.commentChar = commentChar - self.commentLines = commentLines - self.colNamesLine = colNamesLine - self.detectColumnNames = detectColumnNames - self.data=[] - if header is None: - self.header=[] - else: - if not hasattr(header, '__len__'): - self.header=[header] - else: - self.header=header - self.nHeader=0 - if (len(self.commentLines)>0) and (self.commentChar is not None): - raise Exception('Provide either `commentChar` or `commentLines` for CSV file types') - if (len(self.colNames)>0) and (self.colNamesLine is not None): - raise Exception('Provide either `colNames` or `colNamesLine` for CSV file types') - super(CSVFile, self).__init__(filename=filename,**kwargs) - - def _read(self): - COMMENT_CHAR=['#','!',';'] - # --- Detecting encoding - # NOTE: done by parent class method - - # --- Subfunctions - def readFirstLines(nLines): - lines=[] - with open(self.filename, 'r', encoding=self.encoding, errors="surrogateescape") as fid: - for i, line in enumerate(fid): - lines.append(line.strip()) - if i==nLines: - break - return lines - - def readline(iLine): - with open(self.filename,'r',encoding=self.encoding) as f: - for i, line in enumerate(f): - if i==iLine: - return line.strip() - elif i>iLine: - break - def split(s): - if s is None: - return [] - if self.sep==r'\s+': - return s.strip().split() - else: - return [c.strip() for c in s.strip().split(self.sep)] - def strIsFloat(s): - try: - float(s) - return True - except: - return False - # --- Safety - if self.sep=='' or self.sep==' ': - self.sep=r'\s+' - - iStartLine=0 - - # --- Exclude some files from the CSV reader --- - line=readline(iStartLine) - words=line.split() - if len(words)>1: - try: - int(words[0]) - word0int = True - except: - word0int = False - if word0int and words[1].isalpha(): - raise WrongFormatError('Input File {}: '.format(self.filename) + 'is not likely a CSV file' ) - - # --- Headers (i.e. comments) - # TODO: read few headers lines instead of multiple read below.. - - self.header = [] - if len(self.commentLines)>0: - # We read the lines - with open(self.filename,'r',encoding=self.encoding) as f: - for i in range(max(self.commentLines)+1): - l = f.readline() - if i in self.commentLines: - self.header.append(l.strip()) - elif self.commentChar is not None: - # we detect the comments lines that start with comment char - with open(self.filename,'r',encoding=self.encoding) as f: - n=0 - while n<100: - l = f.readline().strip() - if (not l) or (l+'_dummy')[0] != self.commentChar[0]: - break - self.header.append(l.strip()) - n+=1 - self.commentLines=list(range(len(self.header))) - else: - # We still believe that some characters are comments - line=readline(iStartLine) - line=str(line).strip() - if len(line)>0 and line[0] in COMMENT_CHAR: - self.commentChar=line[0] - # Nasty copy paste from above - with open(self.filename,'r',encoding=self.encoding) as f: - n=0 - while n<100: - l = f.readline().strip() - if (not l) or (l+'_dummy')[0] != self.commentChar[0]: - break - self.header.append(l.strip()) - n+=1 - - iStartLine = len(self.header) - - # --- File separator - if self.sep is None: - # Detecting separator by reading first lines of the file - try: - with open(self.filename,'r',encoding=self.encoding) as f: - dummy=[next(f).strip() for x in range(iStartLine)] - head=[next(f).strip() for x in range(2)] - # comma, semi columns or tab - if head[1].find(',')>0: - self.sep=',' - elif head[1].find(';')>0: - self.sep=';' - elif head[1].find('\t')>0: - self.sep='\t' - else: - self.sep=r'\s+' - except: - # most likely an empty file - pass - - # --- ColumnNames - if self.colNamesLine is not None: - if self.colNamesLine<0: - # The column names are hidden somwhere in the header - line=readline(iStartLine+self.colNamesLine).strip() - # Removing comment if present (should be present..) - if self.commentChar is not None: - if line.find(self.commentChar)==0: - line=line[len(self.commentChar):].strip() - self.colNames = split(line) - else: - line=readline(self.colNamesLine) - self.colNames=split(line) - iStartLine = max(iStartLine,self.colNamesLine+1) - elif len(self.colNames)>0: - pass - elif not self.detectColumnNames: - pass - else: - # Looking at first line of data, if mainly floats -> it's not the column names - colNames = split(readline(iStartLine)) - nFloat = sum([strIsFloat(s) for s in colNames]) - if nFloat ==0 or (len(colNames)>2 and nFloat <= len(colNames)/2): - # We assume that the line contains the column names - self.colNames=colNames - self.colNamesLine = iStartLine - iStartLine = iStartLine+1 - # --- Now, maybe the user has put some units below - first_line = readline(iStartLine) - #print('>>> first line',first_line) - first_cols = split(first_line) - nFloat = sum([strIsFloat(s) for s in first_cols]) - nPa = first_line.count('(')+first_line.count('[') - #if nFloat == 0 or nPa>len(self.colNames)/2: - if nPa>len(self.colNames)/2: - # that's definitely some units - if len(first_cols)==len(self.colNames): - self.colNames=[c.strip()+'_'+u.strip() for c,u in zip(self.colNames, first_cols)] - iStartLine = iStartLine+1 - elif len(self.header)>0: - # Maybe the columns names are in the header - if self.sep is not None: - first_line = readline(iStartLine) - first_cols = split(first_line) - #print('CommentChar:',self.commentChar) - #print('First line:',first_line) - #print('First col :',first_cols) - for l in self.header: - if self.commentChar is not None: - if len(self.commentChar)>0: - l=l[len(self.commentChar):] - cols=split(l) - nFloat = sum([strIsFloat(s) for s in cols]) - if len(cols)==len(first_cols) and nFloat <= len(colNames)-1: - self.colNames = cols - break - # --- Reading data - skiprows = list(range(iStartLine)) - if (self.colNamesLine is not None): - skiprows.append(self.colNamesLine) - if (self.commentLines is not None) and len(self.commentLines)>0: - skiprows = skiprows + self.commentLines - skiprows =list(sorted(set(skiprows))) - if self.sep is not None: - if self.sep=='\t': - self.sep=r'\s+' - #print(skiprows) - try: -# self.data = pd.read_csv(self.filename,sep=self.sep,skiprows=skiprows,header=None,comment=self.commentChar,encoding=self.encoding) - with open(self.filename,'r',encoding=self.encoding) as f: - self.data = pd.read_csv(f,sep=self.sep,skiprows=skiprows,header=None,comment=self.commentChar) - except pd.errors.ParserError as e: - raise WrongFormatError('CSV File {}: '.format(self.filename)+e.args[0]) - - if (len(self.colNames)==0) or (len(self.colNames)!=len(self.data.columns)): - self.colNames=['C{}'.format(i) for i in range(len(self.data.columns))] - self.data.columns = self.colNames; - self.data.rename(columns=lambda x: x.strip(),inplace=True) - - def _write(self): - # --- Safety - if self.sep==r'\s+' or self.sep=='': - self.sep='\t' - # Write - if len(self.header)>0: - with open(self.filename, 'w', encoding='utf-8') as f: - f.write('\n'.join(self.header)+'\n') - with open(self.filename, 'a', encoding='utf-8') as f: - try: - self.data.to_csv(f, sep=self.sep, index=False,header=False, line_terminator='\n') - except TypeError: - print('[WARN] CSVFile: Pandas failed, likely encoding error. Attempting a quick and dirty fix.') - s='' - vals=self.data.values - for l in vals: - sLine=(self.sep).join([str(v) for v in l]) - s+=sLine+'\n' - f.write(s) - else: - self.data.to_csv(self.filename,sep=self.sep,index=False) - - def __repr__(self): - s = 'CSVFile: {}\n'.format(self.filename) - s += 'sep=`{}` commentChar=`{}`\ncolNamesLine={}'.format(self.sep,self.commentChar,self.colNamesLine) - s += ', encoding={}'.format(self.encoding)+'\n' - s += 'commentLines={}'.format(self.commentLines)+'\n' - s += 'colNames={}'.format(self.colNames) - s += '\n' - if len(self.header)>0: - s += 'header:\n'+ '\n'.join(self.header)+'\n' - if len(self.data)>0: - s += 'size: {}x{}'.format(len(self.data),len(self.data.columns)) - return s - - def _toDataFrame(self): - return self.data - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore deleted file mode 100644 index 34e7effc2a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -NREL5MW/ -NREL5MW_* -*.csv -_* diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py deleted file mode 100644 index 2663a80679..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_ChangeAeroDyn.py +++ /dev/null @@ -1,15 +0,0 @@ -""" -Open an AeroDyn input file, change some parameters (air density) and write to a new file. -""" - -import os -from pyFAST.input_output import FASTInputFile - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -filename = os.path.join(scriptDir, '../../../data/NREL5MW/onshore/AeroDyn.dat') -f = FASTInputFile(filename) -f['TwrAero'] = True -f['AirDens'] = 1.225 -# f.write('_AeroDyn_Changed.dat') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py deleted file mode 100644 index 21e75f176f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_EditOpenFASTModel.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -Example to illustrate how to manipulate different files used within OpenFAST: - - read data from an OpenFAST model - - write modified files - -The main syntax and methods are as follows: -- object = FASTInputFile(filename): read an input file, returns a dictionary-like -- object.keys(): list the available keys -- object.toDataFrame(): attempts to convert object to a pandas DataFrame -- object.write(filename): write the object to a file (may overwrite) - - -""" -import os -import numpy as np -from pyFAST.input_output import FASTInputFile -import matplotlib.pyplot as plt - - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) - - -# --- ElastoDyn file (geometry, inertias, etc.) -# Read some geometrical data, modify them, write a new file -print('------------------- ElastoDyn -------------------------------------') -EDFilename = os.path.join(MyDir,'../../../data/NREL5MW/onshore/ElastoDyn.dat') -ED = FASTInputFile(EDFilename) -print('> Keys:',ED.keys()) -print('> Hub radius: ',ED['HubRad']) -print('> Tip radius: ',ED['TipRad']) -print('> Hub mass: ',ED['HubMass']) -ED['TipRadius'] = 64 # Modifying the data -#ED.write('_NewFile.dat') # write a new file with modified data - - -# --- AeroDyn blade -# Read an AeroDyn blade file, convert to a dataframe for convenience -print('------------------- AeroDyn blade ---------------------------------') -bldFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat') -bld = FASTInputFile(bldFilename) -print('> Keys:',bld.keys()) -data = bld['BldAeroNodes'] # Accessing the blade nodal data directly (numpy array, can be modified) -bld['BldAeroNodes'][:,5] *=2 # Modify (multiply chord by 2) -df = bld.toDataFrame() # Using a dataframe for easy export/manipulation -print('> Dataframe columns:',df.columns.values) -df.plot('BlSpn_[m]','BlChord_[m]') - -# --- Profile file -print('------------------- Profile data ----------------------------------') -PFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/Airfoils/DU21_A17.dat') -P = FASTInputFile(PFilename) -print('> Keys:',P.keys()) -data = P['AFCoeff'] # Accessing the polar data directly (numpy array, can be modified) -df = P.toDataFrame() # Using a dataframe for easy export/manipulation -print('> Dataframe columns:',df.columns.values) -df.plot('Alpha_[deg]','Cl_[-]') - - -# --- ElastoDyn blade file -print('------------------- ElastoDyn blade -------------------------------') -bldFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_Blade.dat') -bld = FASTInputFile(bldFilename) -print('> Keys:',bld.keys()) -data = bld['BldProp'] # Accessing the blade nodal data directly (numpy array, can be modified) -df = bld.toDataFrame() # Using a dataframe for easy export/manipulation -print('> Dataframe columns:',df.columns.values) -df.plot('BlFract_[-]','BMassDen_[kg/m]') - -# --- BeamDyn blade file -print('------------------- BeamDyn blade file ----------------------------') -BDFilename = os.path.join(MyDir,'../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_BeamDyn_Blade.dat') -BD = FASTInputFile(BDFilename) -print('> Keys:',BD.keys()) -BP_ref = BD['BeamProperties'] # access data directly (dictionary) -# Modify blade property in for loop, write new files -#for loop: -# BP = BP_ref.copy() -# BP['K']= BP['K']*i # modify some of the dictionary -# BD['BeamProperties'] =BP -# BD.write('newfile') - - - - - -if __name__ == '__main__': - plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py deleted file mode 100644 index 380841ba1b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_MannBox.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -Example usage for the MannBox class. -""" - -import os -import numpy as np -import matplotlib.pyplot as plt -from pyFAST.input_output.mannbox_file import MannBoxFile - - -scriptDir = os.path.dirname(__file__) - -# --- Inputs -file_u = os.path.join(scriptDir, '../../../data/example_files/MannBox_32x4x8.bin') -dy = 3 # horizontal spacing [m] -dz = 10 # vertical spacing [m] - -# --- Read Mann Box file and display main properties -mb = MannBoxFile(file_u, dy=dy, dz=dz) # create a MannBoxFile object, store it in mb -print(mb) # print misc info about the object -print(mb['field'].shape) # print the shape of your field. -nx, ny, nz = mb['field'].shape # Store the field dimension - - -# --- Plot values of the field at given indices. Note this example has only 2 values in x -# NOTE: can also be obtained directly using: -# u = mb.valuesAt(y=5, z=50) -t = mb.t(dx=1, U=10) -u = mb['field'][:, 3, 5] # Value at indices iy=3, iz=5 -plt.figure(1) -plt.plot(t, u, label='Input') -plt.xlabel('time [s]') -plt.ylabel('u [m/s]') -plt.title('Value of field at chosen location as function of x/t') - - -# --- Plot vertical profile averaged over all x and y -# NOTE: can also be obtained directly using: -# z, means, stds = mb.vertProfile -u_mean_vertical = np.mean(np.mean(mb['field'][:,:,:], axis=0), axis=0) -plt.figure(2) -plt.plot(u_mean_vertical, mb.z, label='Input') -plt.xlabel('u mean [m/s]') -plt.ylabel('z [m]') -plt.title('Average vertical profile for all x and y') - -# --- Compute the mean over all "x" values for each points in the y-z plane -UmeanYZ = np.mean(mb['field'][:,:,:],axis=0) # This has shape ny x nz - -# --- Modify the field (some examples) -mb['field'] -= UmeanYZ # remove the mean of all datapoints along x -mb['field'][:,:,:] *= 2 # multiply the field by 10 everywhere -mb['field'][:,:,:] += UmeanYZ # add the mean again -mb['field'][:,:,:] += 0.5 # add 0.5 everywhere in the field -mb['field'][:,:,0] = 0 # set the velocity to be zero for the first z index - - -# --- Plot value of the field again -u = mb['field'][:, 3, 5] # Value at indices iy=3, iz=5 -plt.figure(1) -plt.plot(t, u, label='Modified') -plt.xlabel('time [s]') -plt.ylabel('u [m/s]') - -# --- Plot the vertical profile again -u_mean_vertical2 = np.mean(np.mean(mb['field'][:,:,:], axis=0), axis=0) -plt.figure(2) -plt.plot(u_mean_vertical2, mb.z, '--', label='Modified') -plt.xlabel('u mean [m/s]') -plt.ylabel('z [m]') - - - - -# --- Write the modified field to disk with another filename -outFile = file_u.replace('.bin','_modified.bin') -mb.write(outFile) -print('File written: ', outFile) - - - -if __name__ == "__main__": - plt.show() - -if __name__=='__test__': - try: - os.remove(outFile) - except: - pass - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py deleted file mode 100644 index f4107e93fd..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBinary.py +++ /dev/null @@ -1,23 +0,0 @@ -""" -- Open and OpenFAST binary file -- Convert it to a pandas dataframe -- Plot a given output channel -""" -import os -import matplotlib.pyplot as plt -from pyFAST.input_output import FASTOutputFile - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -fastoutFilename = os.path.join(scriptDir, '../../../data/example_files/fastout_allnodes.outb') -df = FASTOutputFile(fastoutFilename).toDataFrame() -print(df.keys()) -time = df['Time_[s]'] -Omega = df['RotSpeed_[rpm]'] -plt.plot(time, Omega) -plt.xlabel('Time [s]') -plt.ylabel('RotSpeed [rpm]') - -if __name__ == '__main__': - plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py deleted file mode 100644 index 3679600361..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_PlotBlade.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -- Open an AeroDyn blade file -- Plot the chord as function of span -""" - -import os -import matplotlib.pyplot as plt -from pyFAST.input_output import FASTInputFile - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -df = FASTInputFile(os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat')).toDataFrame() -print(df.keys()) -plt.plot(df['BlSpn_[m]'], df['BlChord_[m]']) -plt.xlabel('Span [m]') -plt.ylabel('Chord [m]') - -if __name__ == '__main__': - plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py deleted file mode 100644 index 7e04d174d3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSimBox.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -Example usage for the TurbSimFile class. - -- Read a TurbSim file and display main properties -- Extract time series at a given y, z location and plot it -- Extract a horizontal plane and plot it -- Compute vertical profile/shear and plot it -- Fit vertical profiel with a power law -- Compute cross corelation in y and z directions -- Modify field (add a constant velocity in the streamwise direction) and write to disk -- Write to Mann Box format -- Write time series at given locations to a CSV file - -NOTE: this example uses an extremely small TurbSim box. - Results will be more "physical" on a more realstic box. -""" -import os -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt - -from pyFAST.input_output import TurbSimFile - -def main(): - MyDir = os.path.dirname(__file__) - - # --- Read a TurbSim file and display main properties - filename = os.path.join(MyDir, '../tests/example_files/TurbSim_WithTwr.bts') - ts = TurbSimFile(filename) - print(ts) - - # --- Extract time series at a given y, z location and plot it - # Method 1 - use object method - u,v,w = ts.valuesAt(y=0, z=90, method='nearest') - # Method 2 - use data directly - iy, iz = ts.closestPoint(y=0, z=90) - u2,v2,w2 = ts['u'][0, :, iy, iz], ts['u'][1, :, iy, iz], ts['u'][2, :, iy, iz] - - fig,ax = plt.subplots(1, 1) - ax.plot(ts.t, u, label='u') - ax.plot(ts.t, v, label='v') - ax.plot(ts.t, w, label='w') - ax.plot(ts.t, u2, 'k--') - ax.plot(ts.t, v2, 'k--') - ax.plot(ts.t, w2, 'k--') - ax.legend() - ax.set_xlabel('Time [s]') - ax.set_ylabel('Velocity [m/s]') - ax.set_title('Velocity at y=0 z=90') - - # --- Extract a horizontal plane and plot it - U, V, W = ts.horizontalPlane(z=90) - T, Y = np.meshgrid(ts.t, ts.y) - fig,ax = plt.subplots(1, 1) - ax.contourf(T, Y, U.T) - ax.set_xlabel('Time [s]') - ax.set_ylabel('y [m]') - ax.set_title('Velocity at z=90') - - # --- Compute vertical profile/shear and plot it - # NOTE: the example file has only three points in y&z - z, u_mean, u_std = ts.vertProfile(y_span='full') - # Fit a power law - u_fit, pfit, model, z_ref = ts.fitPowerLaw() - print('Power law: alpha={:.5f}, u_ref={:.5f}, z_ref={:.5f}'.format(pfit[1],pfit[0],z_ref)) - print('Formula: {} '.format(model['formula'])) - - fig,ax = plt.subplots(1, 1) - ax.plot(u_mean[0,:], z, label='u') - ax.plot(u_mean[1,:], z, label='v') - ax.plot(u_mean[2,:], z, label='w') - ax.plot(u_fit , z, 'k--', label='u fit (power law)') - if 'uTwr' in ts: - ax.plot(np.mean(ts['uTwr'][0,:,:], axis=0), ts['zTwr'], label='u on tower') - ax.legend() - ax.set_xlabel('Velocity [m/s]') - ax.set_ylabel('z [m]') - ax.set_title('Vertical profiles (averaged over y and time)') - - - - - - # --- Compute cross corelation in y and z directions - # NOTE: the example file has only three points in y&z - iy0, iz0 = ts.iMid # Index at middle of the box - y, rho_uu_y, rho_vv_y, rho_ww_y = ts.crosscorr_y(iy0, iz0) - z, rho_uu_z, rho_vv_z, rho_ww_z = ts.crosscorr_z(iy0, iz0) - - fig,ax = plt.subplots(1, 1) - ax.plot(y, rho_uu_y, label=r'rho_uu}') - ax.plot(y, rho_vv_y, label=r'rho_vv}') - ax.plot(y, rho_ww_y, label=r'rho_ww}') - ax.set_xlabel('y [m]') - ax.set_ylabel('Cross correlation') - ax.set_title('Cross correlation in y direction at middle of the box') - ax.legend() - - # --- Convert to "DataFrame" - # Contains relevant time series like vertical profile, midline, coherence, cross correlation - # dfs = ts.toDataFrame() - - # --- Modify field and write to disk - ts['u'][0,:,:,:] += 1 # Adding 1 m/s in the streamwise - ts.makePeriodic() # Make the field periodic by mirroring it in the streamwise direction - ts.write('_MyNewTurbBox.bts') - - # --- Write to Mann Box format - ts.toMannBox() - - # --- Write time series at given locations to a CSV file - ts.writeProbes('_Probes.csv', yProbe=[0], zProbe=[65,115]) - -if __name__ == "__main__": - main() - plt.show() - -if __name__=='__test__': - main() - try: - os.remove('_MyNewTurbBox.bts') - os.remove('_MyNewTurbBox_198x3x4.u') - os.remove('_MyNewTurbBox_198x3x4.v') - os.remove('_MyNewTurbBox_198x3x4.w') - os.remove('_Probes.csv') - except: - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py deleted file mode 100644 index a20da171fb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_TurbSim_Processing.py +++ /dev/null @@ -1,38 +0,0 @@ -from pyFAST.input_output import FASTInputFile -from pyFAST.case_generation import runner -from pyFAST.input_output import TurbSimFile -import pandas as pd -import os - -def main(): - """Modify TurbSim parameters and write""" - MyDir = os.path.dirname(__file__) - filename = os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim.dat') # Name of TurbSim's input file - f = FASTInputFile(filename) - f['WrBLFF'] = False - f['WrADFF'] = True - f['WrADTWR'] = True - f['NumGrid_Z'] = 15 - f['NumGrid_Y'] = 15 - f['AnalysisTime'] = 600 - f.write(os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim_change.dat')) # Modified file name - - """Run TurbSim""" - TurbSim_FILE = os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim_change.dat') # Input file - Turbsim_EXE = os.path.join(MyDir, '../../../../openfast/build/bin/TurbSim_x64.exe') # Change to the path of the TurbSim executable - runner.run_cmd(TurbSim_FILE, Turbsim_EXE, wait=True, showOutputs=False, showCommand=True) - - """Open the turbulence box, containing the wind speed in 3 directions""" - # NOTE: See Example_TurbSimBox for more use cases of the TurbSimFile class - ts = TurbSimFile(os.path.join(MyDir, '../tests/example_files/FASTIn_TurbSim_change.bts')) # Output file - print(ts.keys()) - print(ts['info']) - print(ts['u'].shape) - - """Save wind speed data in CSV format""" - fgp_data = pd.DataFrame(ts['u'][:,:,0,0]).T # 3D turbulence data for the first grid point - fgp_data.columns = ['streamwise wind speed', 'transverse wind speed', 'vertical wind speed'] # add columns name - fgp_data.to_csv(os.path.join(MyDir, '../tests/example_files/wind_data_of_first_grid_point.csv')) # save data in CSV format - -if __name__ == "__main__": - main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py deleted file mode 100644 index 2ec04aa5e7..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/Example_VTKPlanesGrid.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Reads a VTK file containing a velocity Grid/Plane. -The format is typically used as inputs/outputs of FAST.Farm or outputs of OLAF -""" -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -import os -# Local -import pyFAST.input_output as io -import pyFAST.input_output.vtk_file - -# Get current directory so this script can be called from any location -MyDir=os.path.dirname(__file__) -# Read Plane -vtkFileName = os.path.join(MyDir,'../../../data/example_files/Plane.vtk') -vtk = io.vtk_file.VTKFile(vtkFileName) -# Extract field into individual components -u = vtk.point_data_grid['Velocity'][:,:,:,0] -v = vtk.point_data_grid['Velocity'][:,:,:,1] -w = vtk.point_data_grid['Velocity'][:,:,:,2] - - -if __name__ == '__main__': - # Print useful information - print(vtk) - # Plot a cross section - fig,ax = plt.subplots() - im=ax.contourf(vtk.xp_grid, vtk.zp_grid, u[:,0,:].T) - fig.colorbar(im) - ax.set_xlabel('x [m]') - ax.set_ylabel('z [m]') - ax.set_title('Streamwise velocity in vertical plane (simple shear)') - plt.show() - -if __name__=='__test__': - np.testing.assert_array_equal(u.shape, (4,1,6)) - np.testing.assert_almost_equal(u[0,-1,3],10.183994 ) - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md deleted file mode 100644 index 1fabece7a0..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/README.md +++ /dev/null @@ -1,10 +0,0 @@ -This folder contains examples of OpenFAST postprocessing: - -- RadialInterp: interpolate a timeseries to a given radial location based on OpenFAST radial node outputs. -- RadialPostPro: extract average OpenFAST outputs as function of the radial coordinates -- Remap: remap a dataframe: change names, and perform operations (e.g. change units, scale, combine signals) -- TurbSim\_Processing: read a TurbSim input file, modify it, run TurbSim, and open the output file. -- TurbSimBox: read a TurbSim Box, extract some data, plot them, fit a power law, modify the box, write it to disk, write time series at given locations to a CSV file -- VTKPlanesGrid: Reads a VTK file containing a velocity Grid/Plane. The format is typically used as inputs/outputs of FAST.Farm or outputs of OLAF. - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py deleted file mode 100644 index 7fd79adf2d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/examples/SubDynModes.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -- Read a SubDyn summary file and extract the Guyan and Craig Bampton Modes -- Convert the SubDyn file to JSON for 3D visualization -""" -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -import os -# Local -from pyFAST.input_output.fast_summary_file import FASTSummaryFile - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - - -# Read SubDyn summary file -filename = os.path.join(scriptDir, '../../../data/example_files/FASTSum_5MW_OC3Mnpl.SD.sum.yaml') -sds = FASTSummaryFile(filename) - -# Optional: Extract Guyan and Craig-Bampton modes -#dispGY, posGY, _, dispCB, posCB, _ = sds.getModes() - -# Extract Guyan and Craig-Bampton modes and store them in a DataFrame -df = sds.toDataFrame() #sortDim=2, removeZero=True) -print(df.keys()) -plt.plot(df['z_[m]'], df['GuyanMode1x_[m]'], 'o') -plt.plot(df['z_[m]'], df['GuyanMode5x_[m]'], 'o') - - -# Store as JSON for 3d visualization with viz3danim -sds.toJSON('_OUT.json') -sds.toGraph().toJSON('_OUT2.json') - -if __name__ == '__main__': - plt.show() -if __name__=='__test__': - np.testing.assert_array_almost_equal(df['z_[m]'].values[::2], [-20. , -13.333, -6.667, 0. , 6.667]) - np.testing.assert_array_almost_equal(df['GuyanMode1x_[m]'].values[::2], [0. , 0.446041, 1.270304, 2.170204, 2.843171]) - try: - os.remove('_OUT.json') - os.remove('_OUT2.json') - except: - pass diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py deleted file mode 100644 index d61653e525..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/excel_file.py +++ /dev/null @@ -1,81 +0,0 @@ -from .file import File, WrongFormatError, BrokenFormatError -import numpy as np -import pandas as pd - -# from pandas import ExcelWriter -from pandas import ExcelFile - -class ExcelFile(File): - - @staticmethod - def defaultExtensions(): - return ['.xls','.xlsx'] - - @staticmethod - def formatName(): - return 'Excel file' - - def _read(self): - self.data=dict() - # Reading all sheets - xls = pd.ExcelFile(self.filename, engine='openpyxl') - dfs = {} - for sheet_name in xls.sheet_names: - # Reading sheet - df = xls.parse(sheet_name, header=None) - # TODO detect sub tables - # Dropping empty rows and cols - df.dropna(how='all',axis=0,inplace=True) - df.dropna(how='all',axis=1,inplace=True) - #print(df.shape) - if df.shape[0]>0: - # Setting first row as header - df=df.rename(columns=df.iloc[0]).drop(df.index[0]).reset_index(drop=True) - #print(df) - self.data[sheet_name]=df - - #def toString(self): - # s='' - # return s - - def _write(self): - # Create a Pandas Excel writer using XlsxWriter as the engine. - writer = pd.ExcelWriter(self.filename, engine='xlsxwriter') - # Convert the dataframe to an XlsxWriter Excel object. - for k,_ in self.data.items(): - df = self.data[k] - df.to_excel(writer, sheet_name=k, index=False) - # # Account info columns (set size) - # worksheet.set_column('B:D', 20) - # # Total formatting - # total_fmt = workbook.add_format({'align': 'right', 'num_format': '$#,##0', - # 'bold': True, 'bottom':6}) - # # Total percent format - # total_percent_fmt = workbook.add_format({'align': 'right', 'num_format': '0.0%', - # 'bold': True, 'bottom':6}) - # workbook = writer.book - # worksheet = writer.sheets['report'] - # Highlight the top 5 values in Green - #worksheet.conditional_format(color_range, {'type': 'top', - # 'value': '5', - # 'format': format2}) - ## Highlight the bottom 5 values in Red - #worksheet.conditional_format(color_range, {'type': 'bottom', - # 'value': '5', - # 'format': format1}) - # Close the Pandas Excel writer and output the Excel file. - writer.save() - - def __repr__(self): - s ='Class ExcelFile (attributes: data)\n' - return s - - - def _toDataFrame(self): - if len(self.data)==1: - # Return a single dataframe - return self.data[list(self.data.keys())[0]] - else: - # Return dictionary - return self.data - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py deleted file mode 100644 index 9228652096..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_deck.py +++ /dev/null @@ -1,477 +0,0 @@ -import os -import numpy as np -import re -import pandas as pd - -from .fast_input_file import FASTInputFile - -__all__ = ['FASTInputDeck'] -# --------------------------------------------------------------------------------} -# --- Full FAST input deck -# --------------------------------------------------------------------------------{ -class FASTInputDeck(dict): - """Container for input files that make up a FAST input deck""" - - def __init__(self, fullFstPath='', readlist=['all'], verbose=False): - """Read FAST master file and read inputs for FAST modules - - INPUTS: - - fullFstPath: - - readlist: list of module files to be read, or ['all'], modules are identified as follows: - ['Fst','ED','AD','BD','BDbld','EDtwr','EDbld','ADbld','AF','AC','IW','HD','SrvD','SD','MD'] - where: - AF: airfoil polars - AC: airfoil coordinates (if present) - - """ - # Sanity - if type(verbose) is not bool: - raise Exception('`verbose` arguments needs to be a boolean') - - # Main Data - self.inputFilesRead = {} - self.filename = fullFstPath - self.verbose = verbose - self.readlist = readlist - if not type(self.readlist) is list: - self.readlist=[readlist] - if 'all' in self.readlist: - self.readlist = ['Fst','ED','AD','BD','BDbld','EDtwr','EDbld','ADbld','AF','AC','IW','HD','SrvD','SD','MD'] - else: - self.readlist = ['Fst']+self.readlist - - - # --- Harmonization with AeroElasticSE - self.FAST_ver = 'OPENFAST' - self.path2dll = None # Path to dll file - - self.fst_vt={} - self.fst_vt['description'] = '' - self.fst_vt['Fst'] = None - self.fst_vt['ElastoDyn'] = None - self.fst_vt['ElastoDynBlade'] = None - self.fst_vt['ElastoDynTower'] = None - self.fst_vt['InflowWind'] = None - self.fst_vt['AeroDyn14'] = None - self.fst_vt['AeroDyn15'] = None - self.fst_vt['AeroDynBlade'] = None - self.fst_vt['AeroDynTower'] = None - self.fst_vt['AeroDynPolar'] = None - self.fst_vt['ServoDyn'] = None - self.fst_vt['DISCON_in'] = None - self.fst_vt['HydroDyn'] = None - self.fst_vt['MoorDyn'] = None - self.fst_vt['SubDyn'] = None - self.fst_vt['MAP'] = None - self.fst_vt['BeamDyn'] = None - self.fst_vt['BeamDynBlade'] = None # Small change of interface - self.fst_vt['af_data'] = [] # Small change of interface - self.fst_vt['ac_data'] = [] # TODO, how is it stored in WEIS? - - - self.ADversion='' - - # Read all inputs files - if len(fullFstPath)>0: - self.read() - - @property - def ED(self): - ED = self.fst_vt['ElastoDyn'] - if ED is None: - if 'ED' not in self.readlist: - self.readlist.append('ED') - if self.verbose: - print('>>> Reading ED', self.ED_path) - self.fst_vt['ElastoDyn'] = self._read(self.fst_vt['Fst']['EDFile'],'ED') - return self.fst_vt['ElastoDyn'] - else: - return ED - - - def readAD(self, filename=None, readlist=None, verbose=False, key='AeroDyn15'): - """ - readlist: 'AD','AF','AC' - """ - if readlist is not None: - readlist_bkp = self.readlist - self.readlist=readlist - if not type(self.readlist) is list: - self.readlist=[readlist] - if 'all' in self.readlist: - self.readlist = ['Fst','ED','AD','BD','BDbld','EDtwr','EDbld','ADbld','AF','AC','IW','HD','SrvD','SD','MD'] - - if filename is None: - filename = self.fst_vt['Fst']['AeroFile'] - baseDir = os.path.dirname(self.fst_vt['Fst']['AeroFile']) - else: - baseDir = os.path.dirname(filename) - - self.verbose = verbose - - self.fst_vt[key] = self._read(filename,'AD') - - if self.fst_vt[key] is not None: - # Blades - bld_file = os.path.join(baseDir, self.fst_vt[key]['ADBlFile(1)']) - self.fst_vt['AeroDynBlade'] = self._read(bld_file,'ADbld') - #self.fst_vt['AeroDynBlade'] = [] - #for i in range(3): - # bld_file = os.path.join(os.path.dirname(self.fst_vt['Fst']['AeroFile']), self.fst_vt[key]['ADBlFile({})'.format(i+1)]) - # self.fst_vt['AeroDynBlade'].append(self._read(bld_file,'ADbld')) - # Polars - self.fst_vt['af_data']=[] # TODO add to "AeroDyn" - for afi, af_filename in enumerate(self.fst_vt['AeroDyn15']['AFNames']): - af_filename = os.path.join(baseDir,af_filename).replace('"','') - try: - polar = self._read(af_filename, 'AF') - except: - polar=None - print('[FAIL] reading polar {}'.format(af_filename)) - self.fst_vt['af_data'].append(polar) - if polar is not None: - coordFile = polar['NumCoords'] - if isinstance(coordFile,str): - coordFile = coordFile.replace('"','') - baseDirCoord=os.path.dirname(af_filename) - if coordFile[0]=='@': - ac_filename = os.path.join(baseDirCoord,coordFile[1:]) - coords = self._read(ac_filename, 'AC') - self.fst_vt['ac_data'].append(coords) - - # --- Backward compatibility - self.AD = self.fst_vt[key] - self.ADversion='AD15' if key=='AeroDyn15' else 'AD14' - - if readlist is not None: - self.readlist=readlist_bkp - - @property - def FAST_InputFile(self): - return os.path.basename(self.filename) # FAST input file (ext=.fst) - @property - def FAST_directory(self): - return os.path.dirname(self.filename) # Path to fst directory files - - - @property - def inputFiles(self): - files=[] - files+=[self.ED_path, self.ED_twr_path, self.ED_bld_path] - files+=[self.BD_path, self.BD_bld_path] - files+=[self.SD_path] - return [f for f in files if f not in self.unusedNames] - - def _relpath(self, k1, k2=None, k3=None): - try: - if k2 is None: - return self.fst_vt['Fst'][k1].replace('"','') - else: - parent = os.path.dirname(self.fst_vt['Fst'][k1]).replace('"','') - if type(k3)==list: - for k in k3: - if k in self.fst_vt[k2].keys(): - child = self.fst_vt[k2][k].replace('"','') - else: - child = self.fst_vt[k2][k3].replace('"','') - return os.path.join(parent, child) - except: - return 'none' - - @property - def ED_path(self): return self._fullpath(self._relpath('EDFile')) - @property - def SD_path(self): return self._fullpath(self._relpath('SubFile')) - @property - def BD_path(self): return self._fullpath(self._relpath('BDBldFile(1)')) - @property - def BD_bld_path(self): return self._fullpath(self._relpath('BDBldFile(1)','BeamDyn','BldFile')) - @property - def ED_twr_path(self): return self._fullpath(self._relpath('EDFile','ElastoDyn','TwrFile')) - @property - def ED_bld_path(self): return self._fullpath(self._relpath('EDFile','ElastoDyn',['BldFile(1)','BldFile1'])) - - - - def _fullpath(self, relfilepath): - relfilepath = relfilepath.replace('"','') - basename = os.path.basename(relfilepath) - if basename.lower() in self.unusedNames: - return 'none' - else: - return os.path.join(self.FAST_directory, relfilepath) - - - def read(self, filename=None): - """ - Read all OpenFAST inputs files, based on the requested list of modules `readlist` - """ - if filename is not None: - self.filename = filename - - # Read main file (.fst, or .drv) and store into key "Fst" - if self.verbose: - print('Reading:', self.FAST_InputFile) - self.fst_vt['Fst'] = self._read(self.FAST_InputFile, 'Fst') - if self.fst_vt['Fst'] is None: - raise Exception('Error reading main file {}'.format(self.filename)) - keys = self.fst_vt['Fst'].keys() - - # Detect driver or OpenFAST version - if 'NumTurbines' in keys: - self.version='AD_driver' - elif 'DynamicSolve' in keys: - self.version='BD_driver' - elif 'InterpOrder' in self.fst_vt['Fst'].keys(): - self.version='OF2' - else: - self.version='F7' - - - if self.version=='AD_driver': - # ---- AD Driver - # InflowWind - if self.fst_vt['Fst']['CompInflow']>0: - self.fst_vt['InflowWind'] = self._read(self.fst_vt['Fst']['InflowFile'],'IW') - - self.readAD(key='AeroDyn15') - - elif self.version=='BD_driver': - # --- BD driver - self.fst_vt['BeamDyn'] = self._read(self.fst_vt['Fst']['InputFile'],'BD') - if self.fst_vt['BeamDyn'] is not None: - # Blades - bld_file = os.path.join(os.path.dirname(self.fst_vt['Fst']['InputFile']), self.fst_vt['BeamDyn']['BldFile']) - print('bld_file', bld_file) - self.fst_vt['BeamDynBlade']= self._read(bld_file,'BDbld') - - del self.fst_vt['af_data'] - del self.fst_vt['ac_data'] - - elif self.version=='OF2': - # ---- Regular OpenFAST file - # ElastoDyn - if 'EDFile' in self.fst_vt['Fst'].keys(): - self.fst_vt['ElastoDyn'] = self._read(self.fst_vt['Fst']['EDFile'],'ED') - if self.fst_vt['ElastoDyn'] is not None: - twr_file = self.ED_twr_path - bld_file = self.ED_bld_path - self.fst_vt['ElastoDynTower'] = self._read(twr_file,'EDtwr') - self.fst_vt['ElastoDynBlade'] = self._read(bld_file,'EDbld') - - # InflowWind - if self.fst_vt['Fst']['CompInflow']>0: - self.fst_vt['InflowWind'] = self._read(self.fst_vt['Fst']['InflowFile'],'IW') - - # AeroDyn - if self.fst_vt['Fst']['CompAero']>0: - key = 'AeroDyn14' if self.fst_vt['Fst']['CompAero']==1 else 'AeroDyn15' - self.readAD(key=key, readlist=self.readlist) - - # ServoDyn - if self.fst_vt['Fst']['CompServo']>0: - self.fst_vt['ServoDyn'] = self._read(self.fst_vt['Fst']['ServoFile'],'SrvD') - # TODO Discon - - # HydroDyn - if self.fst_vt['Fst']['CompHydro']== 1: - self.fst_vt['HydroDyn'] = self._read(self.fst_vt['Fst']['HydroFile'],'HD') - - # SubDyn - if self.fst_vt['Fst']['CompSub'] == 1: - self.fst_vt['SubDyn'] = self._read(self.fst_vt['Fst']['SubFile'], 'SD') - - # Mooring - if self.fst_vt['Fst']['CompMooring']==1: - self.fst_vt['MAP'] = self._read(self.fst_vt['Fst']['MooringFile'],'MD') - if self.fst_vt['Fst']['CompMooring']==2: - self.fst_vt['MoorDyn'] = self._read(self.fst_vt['Fst']['MooringFile'],'MD') - - # BeamDyn - if self.fst_vt['Fst']['CompElast'] == 2: - self.fst_vt['BeamDyn'] = self._read(self.fst_vt['Fst']['BDBldFile(1)'],'BD') - if self.fst_vt['BeamDyn'] is not None: - # Blades - bld_file = os.path.join(os.path.dirname(self.fst_vt['Fst']['BDBldFile(1)']), self.fst_vt['BeamDyn']['BldFile']) - self.fst_vt['BeamDynBlade']= self._read(bld_file,'BDbld') - - # --- Backward compatibility - self.fst = self.fst_vt['Fst'] - self._ED = self.fst_vt['ElastoDyn'] - if not hasattr(self,'AD'): - self.AD = None - if self.AD is not None: - self.AD.Bld1 = self.fst_vt['AeroDynBlade'] - self.AD.AF = self.fst_vt['af_data'] - self.IW = self.fst_vt['InflowWind'] - self.BD = self.fst_vt['BeamDyn'] - self.BDbld = self.fst_vt['BeamDynBlade'] - self.SD = self.fst_vt['SubDyn'] - - @ property - def unusedNames(self): - return ['unused','nan','na','none'] - - def _read(self, relfilepath, shortkey): - """ read any openfast input """ - relfilepath =relfilepath.replace('"','') - basename = os.path.basename(relfilepath) - - # Only read what the user requested to be read - if shortkey not in self.readlist: - if self.verbose: - print('>>> Skipping ',shortkey) - return None - - # Skip "unused" and "NA" - if basename.lower() in self.unusedNames: - if self.verbose: - print('>>> Unused ',shortkey) - return None - - # Attempt reading - if relfilepath.startswith(self.FAST_directory): - fullpath = relfilepath - else: - fullpath = os.path.join(self.FAST_directory, relfilepath) - try: - data = FASTInputFile(fullpath) - if self.verbose: - print('>>> Read: ',fullpath) - self.inputFilesRead[shortkey] = fullpath - return data - except FileNotFoundError: - print('[WARN] File not found '+fullpath) - return None - - - - def write(self, filename=None, prefix='', suffix='', directory=None): - """ Write a standardized input file deck""" - if filename is None: - filename=self.filename # Overwritting - self.filename=filename - if directory is None: - directory = os.path.dirname(filename) - else: - # Making sure filename is within directory - filename = os.path.join(directory, os.path.basename(filename)) - if not os.path.exists(directory): - os.makedirs(directory) - - basename = os.path.splitext(os.path.basename(filename))[0] - - - fst = self.fst_vt['Fst'] - - - if self.version=='AD_driver': - raise NotImplementedError() - - elif self.version=='BD_driver': - # --- BD driver - filename_BD = os.path.join(directory, prefix+'BD'+suffix+'.dat') - filename_BD_bld = os.path.join(directory, prefix+'BD_bld'+suffix+'.dat') - fst['InputFile'] = '"' + os.path.basename(filename_BD) + '"' - fst.write(filename) - BD = self.fst_vt['BeamDyn'] - BD['BldFile'] = '"'+os.path.basename(filename_BD_bld)+'"' - self.fst_vt['BeamDynBlade'].write(filename_BD_bld) # TODO TODO pick up the proper blade file! - BD.write(filename_BD) - - elif self.version=='OF2': - - # Filenames - filename_ED = os.path.join(directory,prefix+'ED'+suffix+'.dat') if fst['CompElast']>0 else 'none' - filename_IW = os.path.join(directory,prefix+'IW'+suffix+'.dat') if fst['CompInflow']>0 else 'none' - filename_BD = os.path.join(directory,prefix+'BD'+suffix+'.dat') if fst['CompElast']==2 else 'none' - filename_AD = os.path.join(directory,prefix+'AD'+suffix+'.dat') if fst['CompAero']>0 else 'none' - filename_HD = os.path.join(directory,prefix+'HD'+suffix+'.dat') if fst['CompHydro']>0 else 'none' - filename_SD = os.path.join(directory,prefix+'SD'+suffix+'.dat') if fst['CompSub']>0 else 'none' - filename_MD = os.path.join(directory,prefix+'MD'+suffix+'.dat') if fst['CompMooring']>0 else 'none' - filename_SvD = os.path.join(directory,prefix+'SvD'+suffix+'.dat') if fst['CompServo']>0 else 'none' - filename_Ice = os.path.join(directory,prefix+'Ice'+suffix+'.dat') if fst['CompIce']>0 else 'none' - filename_ED_bld = os.path.join(directory,prefix+'ED_bld'+suffix+'.dat') if fst['CompElast']>0 else 'none' - filename_ED_twr = os.path.join(directory,prefix+'ED_twr'+suffix+'.dat') if fst['CompElast']>0 else 'none' - filename_BD_bld = os.path.join(directory,prefix+'BD_bld'+suffix+'.dat') if fst['CompElast']>0 else 'none' - # TODO AD Profiles and OLAF - - fst['EDFile'] = '"' + os.path.basename(filename_ED) + '"' - fst['BDBldFile(1)'] = '"' + os.path.basename(filename_BD) + '"' - fst['BDBldFile(2)'] = '"' + os.path.basename(filename_BD) + '"' - fst['BDBldFile(3)'] = '"' + os.path.basename(filename_BD) + '"' - fst['InflowFile'] = '"' + os.path.basename(filename_IW) + '"' - fst['AeroFile'] = '"' + os.path.basename(filename_AD) + '"' - fst['ServoFile'] = '"' + os.path.basename(filename_AD) + '"' - fst['HydroFile'] = '"' + os.path.basename(filename_HD) + '"' - fst['SubFile'] = '"' + os.path.basename(filename_SD) + '"' - fst['MooringFile'] = '"' + os.path.basename(filename_MD) + '"' - fst['IceFile'] = '"' + os.path.basename(filename_Ice)+ '"' - fst.write(filename) - - - ED = self.fst_vt['ElastoDyn'] - if fst['CompElast']>0: - ED['TwrFile'] = '"' + os.path.basename(filename_ED_twr)+ '"' - self.fst_vt['ElastoDynTower'].write(filename_ED_twr) - if fst['CompElast']==1: - if 'BldFile1' in ED.keys(): - ED['BldFile1'] = '"' + os.path.basename(filename_ED_bld)+ '"' - ED['BldFile2'] = '"' + os.path.basename(filename_ED_bld)+ '"' - ED['BldFile3'] = '"' + os.path.basename(filename_ED_bld)+ '"' - else: - ED['BldFile(1)'] = '"' + os.path.basename(filename_ED_bld)+ '"' - ED['BldFile(2)'] = '"' + os.path.basename(filename_ED_bld)+ '"' - ED['BldFile(3)'] = '"' + os.path.basename(filename_ED_bld)+ '"' - self.fst_vt['ElastoDynBlade'].write(filename_ED_bld) - - elif fst['CompElast']==2: - BD = self.fst_vt['BeamDyn'] - BD['BldFile'] = '"'+os.path.basename(filename_BD_bld)+'"' - self.fst_vt['BeamDynBlade'].write(filename_BD_bld) # TODO TODO pick up the proper blade file! - BD.write(filename_BD) - ED.write(filename_ED) - - - if fst['CompInflow']>0: - self.fst_vt['InflowWind'].write(filename_IW) - - if fst['CompAero']>0: - self.fst_vt['AeroDyn15'].write(filename_AD) - # TODO other files - - if fst['CompServo']>0: - self.fst_vt['ServoDyn'].write(filename_SvD) - - if fst['CompHydro']==1: - self.fst_vt['HydroDyn'].write(filename_HD) - - if fst['CompSub']==1: - self.fst_vt['SubDyn'].write(filename_SD) - elif fst['CompSub']==2: - raise NotImplementedError() - - if fst['CompMooring']==1: - self.fst_vt['MAP'].write(filename_MD) - if self.fst_vt['Fst']['CompMooring']==2: - self.fst_vt['MoorDyn'].write(filename_MD) - - return filename - - - - def __repr__(self): - s=''+'\n' - s+='filename : '+self.filename+'\n' - s+='readlist : {}'.format(self.readlist)+'\n' - s+='version : '+self.version+'\n' - s+='AD version : '+self.ADversion+'\n' - s+='fst_vt : dict{'+','.join([k for k,v in self.fst_vt.items() if v is not None])+'}\n' - s+='inputFiles : {}\n'.format(self.inputFiles) - s+='inputFilesRead : {}\n'.format(self.inputFilesRead) - s+='\n' - return s - -if __name__ == "__main__": - fst=FASTInputDeck('NREL5MW.fst') - print(fst) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py deleted file mode 100644 index 97ff36952a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file.py +++ /dev/null @@ -1,2104 +0,0 @@ -import numpy as np -import os -import pandas as pd -import re -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - -__all__ = ['FASTInputFile'] - -TABTYPE_NOT_A_TAB = 0 -TABTYPE_NUM_WITH_HEADER = 1 -TABTYPE_NUM_WITH_HEADERCOM = 2 -TABTYPE_NUM_NO_HEADER = 4 -TABTYPE_NUM_BEAMDYN = 5 -TABTYPE_NUM_SUBDYNOUT = 7 -TABTYPE_MIX_WITH_HEADER = 6 -TABTYPE_FIL = 3 -TABTYPE_FMT = 9999 # TODO - - - -class FASTInputFile(File): - """ - Read/write an OpenFAST input file. The object behaves like a dictionary. - A generic reader/writer is used at first. - If a dedicated OpenFAST input file is detected, additional functionalities are added. - See at the end of this file for dedicated class that can be used instead of this generic reader. - - Main methods - ------------ - - read, write, toDataFrame, keys, toGraph - - - Return an object which inherits from FASTInputFileBase - - The generic file reader is run first - - If a specific file format/module is detected, a fixed file format object is returned - The fixed file format have additional outputs, sanity checks and methods - """ - - @staticmethod - def defaultExtensions(): - return ['.dat','.fst','.txt','.fstf','.dvr'] - - @staticmethod - def formatName(): - return 'FAST input file' - - def __init__(self, filename=None, **kwargs): - self._fixedfile = None - self.basefile = FASTInputFileBase(filename, **kwargs) # Generic fileformat - - @property - def fixedfile(self): - if self._fixedfile is not None: - return self._fixedfile - elif len(self.basefile.data)>0: - self._fixedfile=self.fixedFormat() - return self._fixedfile - else: - return self.basefile - - @property - def module(self): - if self._fixedfile is None: - return self.basefile.module - else: - return self._fixedfile.module - - @property - def hasNodal(self): - if self._fixedfile is None: - return self.basefile.hasNodal - else: - return self._fixedfile.hasNodal - - def getID(self, label): - return self.basefile.getID(label) - - @property - def data(self): - return self.basefile.data - - def fixedFormat(self): - # --- Creating a dedicated Child - KEYS = list(self.basefile.keys()) - if 'NumBlNds' in KEYS: - return ADBladeFile.from_fast_input_file(self.basefile) - elif 'rhoinf' in KEYS: - return BDFile.from_fast_input_file(self.basefile) - elif 'NBlInpSt' in KEYS: - return EDBladeFile.from_fast_input_file(self.basefile) - elif 'NTwInpSt' in KEYS: - return EDTowerFile.from_fast_input_file(self.basefile) - elif 'MassMatrix' in KEYS and self.module == 'ExtPtfm': - return ExtPtfmFile.from_fast_input_file(self.basefile) - elif 'NumCoords' in KEYS and 'InterpOrd' in KEYS: - return ADPolarFile.from_fast_input_file(self.basefile) - else: - # TODO: HD, SD, SvD, ED, AD, EDbld, BD, - #print('>>>>>>>>>>>> NO FILEFORMAT', KEYS) - return self.basefile - - def read(self, filename=None): - return self.fixedfile.read(filename) - - def write(self, filename=None): - return self.fixedfile.write(filename) - - def toDataFrame(self): - return self.fixedfile.toDataFrame() - - def toString(self): - return self.fixedfile.toString() - - def keys(self): - return self.fixedfile.keys() - - def toGraph(self, **kwargs): - return self.fixedfile.toGraph(**kwargs) - - @property - def filename(self): - return self.fixedfile.filename - - @property - def comment(self): - return self.fixedfile.comment - - @comment.setter - def comment(self,comment): - self.fixedfile.comment = comment - - def __iter__(self): - return self.fixedfile.__iter__() - - def __next__(self): - return self.fixedfile.__next__() - - def __setitem__(self,key,item): - return self.fixedfile.__setitem__(key,item) - - def __getitem__(self,key): - return self.fixedfile.__getitem__(key) - - def __repr__(self): - return self.fixedfile.__repr__() - #s ='Fast input file: {}\n'.format(self.filename) - #return s+'\n'.join(['{:15s}: {}'.format(d['label'],d['value']) for i,d in enumerate(self.data)]) - - -# --------------------------------------------------------------------------------} -# --- BASE INPUT FILE -# --------------------------------------------------------------------------------{ -class FASTInputFileBase(File): - """ - Read/write an OpenFAST input file. The object behaves like a dictionary. - - Main methods - ------------ - - read, write, toDataFrame, keys - - Main keys - --------- - The keys correspond to the keys used in the file. For instance for a .fst file: 'DT','TMax' - - Examples - -------- - - filename = 'AeroDyn.dat' - f = FASTInputFile(filename) - f['TwrAero'] = True - f['AirDens'] = 1.225 - f.write('AeroDyn_Changed.dat') - - """ - @staticmethod - def defaultExtensions(): - return ['.dat','.fst','.txt','.fstf','.dvr'] - - @staticmethod - def formatName(): - return 'FAST input file Base' - - def __init__(self, filename=None, **kwargs): - self._size=None - self.setData() # Init data - if filename: - self.filename = filename - self.read() - - def setData(self, filename=None, data=None, hasNodal=False, module=None): - """ Set the data of this object. This object shouldn't store anything else. """ - if data is None: - self.data = [] - else: - self.data = data - self.hasNodal = hasNodal - self.module = module - self.filename = filename - - def keys(self): - self.labels = [ d['label'] for i,d in enumerate(self.data) if (not d['isComment']) and (i not in self._IComment)] - return self.labels - - def getID(self,label): - i=self.getIDSafe(label) - if i<0: - raise KeyError('Variable `'+ label+'` not found in FAST file:'+self.filename) - else: - return i - def getIDs(self,label): - I=[] - # brute force search - for i in range(len(self.data)): - d = self.data[i] - if d['label'].lower()==label.lower(): - I.append(i) - if len(I)<0: - raise KeyError('Variable `'+ label+'` not found in FAST file:'+self.filename) - else: - return I - - def getIDSafe(self,label): - # brute force search - for i in range(len(self.data)): - d = self.data[i] - if d['label'].lower()==label.lower(): - return i - return -1 - - # Making object an iterator - def __iter__(self): - self.iCurrent=-1 - self.iMax=len(self.data)-1 - return self - - def __next__(self): # Python 2: def next(self) - if self.iCurrent > self.iMax: - raise StopIteration - else: - self.iCurrent += 1 - return self.data[self.iCurrent] - - # Making it behave like a dictionary - def __setitem__(self, key, item): - I = self.getIDs(key) - for i in I: - if self.data[i]['tabType'] != TABTYPE_NOT_A_TAB: - # For tables, we automatically update variable that stores the dimension - nRows = len(item) - if 'tabDimVar' in self.data[i].keys(): - dimVar = self.data[i]['tabDimVar'] - iDimVar = self.getID(dimVar) - self.data[iDimVar]['value'] = nRows # Avoiding a recursive call to __setitem__ here - else: - pass - self.data[i]['value'] = item - - def __getitem__(self,key): - i = self.getID(key) - return self.data[i]['value'] - - def __repr__(self): - s ='Fast input file base: {}\n'.format(self.filename) - return s+'\n'.join(['{:15s}: {}'.format(d['label'],d['value']) for i,d in enumerate(self.data)]) - - def addKeyVal(self, key, val, descr=None): - i=self.getIDSafe(key) - if i<0: - d = getDict() - else: - d = self.data[i] - d['label']=key - d['value']=val - if descr is not None: - d['descr']=descr - if i<0: - self.data.append(d) - - def addValKey(self,val,key,descr=None): - self.addKeyVal(key, val, descr) - - def addComment(self, comment='!'): - d=getDict() - d['isComment'] = True - d['value'] = comment - self.data.append(d) - - def addTable(self, label, tab, cols=None, units=None, tabType=1, tabDimVar=None): - d=getDict() - d['label'] = label - d['value'] = tab - d['tabType'] = tabType - d['tabDimVar'] = tabDimVar - d['tabColumnNames'] = cols - d['tabUnits'] = units - self.data.append(d) - - @property - def comment(self): - return '\n'.join([self.data[i]['value'] for i in self._IComment]) - - @comment.setter - def comment(self, comment): - splits = comment.split('\n') - for i,com in zip(self._IComment, splits): - self.data[i]['value'] = com - self.data[i]['label'] = '' - self.data[i]['descr'] = '' - self.data[i]['isComment'] = True - - @property - def _IComment(self): - """ return indices of comment line""" - return [1] # Typical OpenFAST files have comment on second line [1] - - - def read(self, filename=None): - if filename: - self.filename = filename - if self.filename: - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - self._read() - else: - raise Exception('No filename provided') - - def _read(self): - - # --- Tables that can be detected based on the "Value" (first entry on line) - # TODO members for BeamDyn with mutliple key point ####### TODO PropSetID is Duplicate SubDyn and used in HydroDyn - NUMTAB_FROM_VAL_DETECT = ['HtFract' , 'TwrElev' , 'BlFract' , 'Genspd_TLU' , 'BlSpn' , 'HvCoefID' , 'AxCoefID' , 'JointID' , 'Dpth' , 'FillNumM' , 'MGDpth' , 'SimplCd' , 'RNodes' , 'kp_xr' , 'mu1' , 'TwrHtFr' , 'TwrRe' , 'WT_X'] - NUMTAB_FROM_VAL_DIM_VAR = ['NTwInpSt' , 'NumTwrNds' , 'NBlInpSt' , 'DLL_NumTrq' , 'NumBlNds' , 'NHvCoef' , 'NAxCoef' , 'NJoints' , 'NCoefDpth' , 'NFillGroups' , 'NMGDepths' , 1 , 'BldNodes' , 'kp_total' , 1 , 'NTwrHt' , 'NTwrRe' , 'NumTurbines'] - NUMTAB_FROM_VAL_VARNAME = ['TowProp' , 'TowProp' , 'BldProp' , 'DLLProp' , 'BldAeroNodes' , 'HvCoefs' , 'AxCoefs' , 'Joints' , 'DpthProp' , 'FillGroups' , 'MGProp' , 'SmplProp' , 'BldAeroNodes' , 'MemberGeom' , 'DampingCoeffs' , 'TowerProp' , 'TowerRe', 'WindTurbines'] - NUMTAB_FROM_VAL_NHEADER = [2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 2 , 2 , 1 , 1 , 2 ] - NUMTAB_FROM_VAL_TYPE = ['num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'num' , 'mix' , 'num' , 'num' , 'num' , 'num' , 'mix'] - # SubDyn - NUMTAB_FROM_VAL_DETECT += [ 'RJointID' , 'IJointID' , 'COSMID' , 'CMJointID' ] - NUMTAB_FROM_VAL_DIM_VAR += [ 'NReact' , 'NInterf' , 'NCOSMs' , 'NCmass' ] - NUMTAB_FROM_VAL_VARNAME += [ 'BaseJoints' , 'InterfaceJoints' , 'MemberCosineMatrix' , 'ConcentratedMasses'] - NUMTAB_FROM_VAL_NHEADER += [ 2 , 2 , 2 , 2 ] - NUMTAB_FROM_VAL_TYPE += [ 'mix' , 'num' , 'num' , 'num' ] - # AD Driver old and new - NUMTAB_FROM_VAL_DETECT += [ 'WndSpeed' , 'HWndSpeed' ] - NUMTAB_FROM_VAL_DIM_VAR += [ 'NumCases' , 'NumCases' ] - NUMTAB_FROM_VAL_VARNAME += [ 'Cases' , 'Cases' ] - NUMTAB_FROM_VAL_NHEADER += [ 2 , 2 ] - NUMTAB_FROM_VAL_TYPE += [ 'num' , 'num' ] - - # --- Tables that can be detected based on the "Label" (second entry on line) - # NOTE: MJointID1, used by SubDyn and HydroDyn - NUMTAB_FROM_LAB_DETECT = ['NumAlf' , 'F_X' , 'MemberCd1' , 'MJointID1' , 'NOutLoc' , 'NOutCnt' , 'PropD' ] - NUMTAB_FROM_LAB_DIM_VAR = ['NumAlf' , 'NKInpSt' , 'NCoefMembers' , 'NMembers' , 'NMOutputs' , 'NMOutputs' , 'NPropSets' ] - NUMTAB_FROM_LAB_VARNAME = ['AFCoeff' , 'TMDspProp' , 'MemberProp' , 'Members' , 'MemberOuts' , 'MemberOuts' , 'SectionProp' ] - NUMTAB_FROM_LAB_NHEADER = [2 , 2 , 2 , 2 , 2 , 2 , 2 ] - NUMTAB_FROM_LAB_NOFFSET = [0 , 0 , 0 , 0 , 0 , 0 , 0 ] - NUMTAB_FROM_LAB_TYPE = ['num' , 'num' , 'num' , 'mix' , 'num' , 'sdout' , 'num' ] - # MoorDyn Version 1 and 2 (with AUTO for LAB_DIM_VAR) - NUMTAB_FROM_LAB_DETECT += ['Diam' ,'Type' ,'LineType' , 'Attachment'] - NUMTAB_FROM_LAB_DIM_VAR += ['NTypes:AUTO','NConnects' ,'NLines:AUTO' , 'AUTO'] - NUMTAB_FROM_LAB_VARNAME += ['LineTypes' ,'ConnectionProp' ,'LineProp' , 'Points'] - NUMTAB_FROM_LAB_NHEADER += [ 2 , 2 , 2 , 2 ] - NUMTAB_FROM_LAB_NOFFSET += [ 0 , 0 , 0 , 0 ] - NUMTAB_FROM_LAB_TYPE += ['mix' ,'mix' ,'mix' , 'mix'] - # SubDyn - NUMTAB_FROM_LAB_DETECT += ['GuyanDampSize' , 'YoungE' , 'YoungE' , 'EA' , 'MatDens' ] - NUMTAB_FROM_LAB_DIM_VAR += [6 , 'NPropSets', 'NXPropSets', 'NCablePropSets' , 'NRigidPropSets'] - NUMTAB_FROM_LAB_VARNAME += ['GuyanDampMatrix' , 'BeamProp' , 'BeamPropX' , 'CableProp' , 'RigidProp' ] - NUMTAB_FROM_LAB_NHEADER += [0 , 2 , 2 , 2 , 2 ] - NUMTAB_FROM_LAB_NOFFSET += [1 , 0 , 0 , 0 , 0 ] - NUMTAB_FROM_LAB_TYPE += ['num' , 'num' , 'num' , 'num' , 'num' ] - # OLAF - NUMTAB_FROM_LAB_DETECT += ['GridName' ] - NUMTAB_FROM_LAB_DIM_VAR += ['nGridOut' ] - NUMTAB_FROM_LAB_VARNAME += ['GridOutputs'] - NUMTAB_FROM_LAB_NHEADER += [0 ] - NUMTAB_FROM_LAB_NOFFSET += [2 ] - NUMTAB_FROM_LAB_TYPE += ['mix' ] - - FILTAB_FROM_LAB_DETECT = ['FoilNm' ,'AFNames'] - FILTAB_FROM_LAB_DIM_VAR = ['NumFoil','NumAFfiles'] - FILTAB_FROM_LAB_VARNAME = ['FoilNm' ,'AFNames'] - - # Using lower case to be more tolerant.. - NUMTAB_FROM_VAL_DETECT_L = [s.lower() for s in NUMTAB_FROM_VAL_DETECT] - NUMTAB_FROM_LAB_DETECT_L = [s.lower() for s in NUMTAB_FROM_LAB_DETECT] - FILTAB_FROM_LAB_DETECT_L = [s.lower() for s in FILTAB_FROM_LAB_DETECT] - - # Reset data - self.data = [] - self.hasNodal=False - self.module = None - #with open(self.filename, 'r', errors="surrogateescape") as f: - with open(self.filename, 'r', errors="surrogateescape") as f: - lines=f.read().splitlines() - # IF NEEDED> DO THE FOLLOWING FORMATTING: - #lines = [str(l).encode('utf-8').decode('ascii','ignore') for l in f.read().splitlines()] - - # Fast files start with ! or - - #if lines[0][0]!='!' and lines[0][0]!='-': - # raise Exception('Fast file do not start with ! or -, is it the right format?') - - # Special filetypes - if detectAndReadExtPtfmSE(self, lines): - return - if self.detectAndReadAirfoilAD14(lines): - return - - # Parsing line by line, storing each line into a dictionary - i=0 - nComments = 0 - nWrongLabels = 0 - allowSpaceSeparatedList=False - iTab = 0 - - labOffset='' - while i0 \ - or line.upper().find('MESH-BASED OUTPUTS')>0 \ - or line.upper().find('OUTPUT CHANNELS' )>0: # "OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)'" - # TODO, lazy implementation so far, MAKE SUB FUNCTION - parts = re.match(r'^\W*\w+', line) - if parts: - firstword = parts.group(0).strip() - else: - raise NotImplementedError - remainer = re.sub(r'^\W*\w+\W*', '', line) - # Parsing outlist, and then we continue at a new "i" (to read END etc.) - OutList,i = parseFASTOutList(lines,i+1) - d = getDict() - if self.hasNodal and not firstword.endswith('_Nodal'): - d['label'] = firstword+'_Nodal' - else: - d['label'] = firstword - d['descr'] = remainer - d['tabType'] = TABTYPE_FIL # TODO - d['value'] = ['']+OutList - self.data.append(d) - if i>=len(lines): - break - - # --- Here we cheat and force an exit of the input file - # The reason for this is that some files have a lot of things after the END, which will result in the file being intepreted as a wrong format due to too many comments - if i+20 or lines[i+2].lower().find('bldnd_bloutnd')>0): - self.hasNodal=True - else: - self.data.append(parseFASTInputLine('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)',i+1)) - self.data.append(parseFASTInputLine('---------------------------------------------------------------------------------------',i+2)) - break - elif line.upper().find('SSOUTLIST' )>0 or line.upper().find('SDOUTLIST' )>0: - # SUBDYN Outlist doesn not follow regular format - self.data.append(parseFASTInputLine(line,i)) - # OUTLIST Exception for BeamDyn - OutList,i = parseFASTOutList(lines,i+1) - # TODO - for o in OutList: - d = getDict() - d['isComment'] = True - d['value']=o - self.data.append(d) - # --- Here we cheat and force an exit of the input file - self.data.append(parseFASTInputLine('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)',i+1)) - self.data.append(parseFASTInputLine('---------------------------------------------------------------------------------------',i+2)) - break - elif line.upper().find('ADDITIONAL STIFFNESS')>0: - # TODO, lazy implementation so far, MAKE SUB FUNCTION - self.data.append(parseFASTInputLine(line,i)) - i +=1 - KDAdd = [] - for _ in range(19): - KDAdd.append(lines[i]) - i +=1 - d = getDict() - d['label'] = 'KDAdd' # TODO - d['tabType'] = TABTYPE_FIL # TODO - d['value'] = KDAdd - self.data.append(d) - if i>=len(lines): - break - elif line.upper().find('DISTRIBUTED PROPERTIES')>0: - self.data.append(parseFASTInputLine(line,i)); - i+=1; - self.readBeamDynProps(lines,i) - return - elif line.upper().find('OUTPUTS')>0: - if 'Points' in self.keys() and 'dtM' in self.keys(): - OutList,i = parseFASTOutList(lines,i+1) - d = getDict() - d['label'] = 'Outlist' - d['descr'] = '' - d['tabType'] = TABTYPE_FIL # TODO - d['value'] = OutList - self.addComment('------------------------ OUTPUTS --------------------------------------------') - self.data.append(d) - self.addComment('END') - self.addComment('------------------------- need this line --------------------------------------') - return - - # --- Parsing of standard lines: value(s) key comment - line = lines[i] - d = parseFASTInputLine(line,i,allowSpaceSeparatedList) - labelRaw =d['label'].lower() - d['label']+=labOffset - - # --- Handling of special files - if labelRaw=='kp_total': - # BeamDyn has weird space speparated list around keypoint definition - allowSpaceSeparatedList=True - elif labelRaw=='numcoords': - # TODO, lazy implementation so far, MAKE SUB FUNCTION - if isStr(d['value']): - if d['value'][0]=='@': - # it's a ref to the airfoil coord file - pass - else: - if not strIsInt(d['value']): - raise WrongFormatError('Wrong value of NumCoords') - if int(d['value'])<=0: - pass - else: - self.data.append(d); i+=1; - # 3 comment lines - self.data.append(parseFASTInputLine(lines[i],i)); i+=1; - self.data.append(parseFASTInputLine(lines[i],i)); i+=1; - self.data.append(parseFASTInputLine(lines[i],i)); i+=1; - splits=cleanAfterChar(cleanLine(lines[i]),'!').split() - # Airfoil ref point - try: - pos=[float(splits[0]), float(splits[1])] - except: - raise WrongFormatError('Wrong format while reading coordinates of airfoil reference') - i+=1 - d = getDict() - d['label'] = 'AirfoilRefPoint' - d['value'] = pos - self.data.append(d) - # 2 comment lines - self.data.append(parseFASTInputLine(lines[i],i)); i+=1; - self.data.append(parseFASTInputLine(lines[i],i)); i+=1; - # Table of coordinats itself - d = getDict() - d['label'] = 'AirfoilCoord' - d['tabDimVar'] = 'NumCoords' - d['tabType'] = TABTYPE_NUM_WITH_HEADERCOM - nTabLines = self[d['tabDimVar']]-1 # SOMEHOW ONE DATA POINT LESS - d['value'], d['tabColumnNames'],_ = parseFASTNumTable(self.filename,lines[i:i+nTabLines+1],nTabLines,i,1) - d['tabUnits'] = ['(-)','(-)'] - self.data.append(d) - break - - elif labelRaw=='re': - try: - nAirfoilTab = self['NumTabs'] - iTab +=1 - if nAirfoilTab>1: - labOffset ='_'+str(iTab) - d['label']=labelRaw+labOffset - except: - # Unsteady driver input file... - pass - - - #print('label>',d['label'],'<',type(d['label'])); - #print('value>',d['value'],'<',type(d['value'])); - #print(isStr(d['value'])) - #if isStr(d['value']): - # print(d['value'].lower() in NUMTAB_FROM_VAL_DETECT_L) - - - # --- Handling of tables - if isStr(d['value']) and d['value'].lower() in NUMTAB_FROM_VAL_DETECT_L: - # Table with numerical values, - ii = NUMTAB_FROM_VAL_DETECT_L.index(d['value'].lower()) - tab_type = NUMTAB_FROM_VAL_TYPE[ii] - if tab_type=='num': - d['tabType'] = TABTYPE_NUM_WITH_HEADER - else: - d['tabType'] = TABTYPE_MIX_WITH_HEADER - d['label'] = NUMTAB_FROM_VAL_VARNAME[ii]+labOffset - d['tabDimVar'] = NUMTAB_FROM_VAL_DIM_VAR[ii] - nHeaders = NUMTAB_FROM_VAL_NHEADER[ii] - nTabLines=0 - if isinstance(d['tabDimVar'],int): - nTabLines = d['tabDimVar'] - else: - nTabLines = self[d['tabDimVar']] - #print('Reading table {} Dimension {} (based on {})'.format(d['label'],nTabLines,d['tabDimVar'])); - d['value'], d['tabColumnNames'], d['tabUnits'] = parseFASTNumTable(self.filename,lines[i:i+nTabLines+nHeaders], nTabLines, i, nHeaders, tableType=tab_type, varNumLines=d['tabDimVar']) - i += nTabLines+nHeaders-1 - - # --- Temporary hack for e.g. SubDyn, that has duplicate table, impossible to detect in the current way... - # So we remove the element form the list one read - del NUMTAB_FROM_VAL_DETECT[ii] - del NUMTAB_FROM_VAL_DIM_VAR[ii] - del NUMTAB_FROM_VAL_VARNAME[ii] - del NUMTAB_FROM_VAL_NHEADER[ii] - del NUMTAB_FROM_VAL_TYPE [ii] - del NUMTAB_FROM_VAL_DETECT_L[ii] - - elif isStr(labelRaw) and labelRaw in NUMTAB_FROM_LAB_DETECT_L: - ii = NUMTAB_FROM_LAB_DETECT_L.index(labelRaw) - tab_type = NUMTAB_FROM_LAB_TYPE[ii] - # Special case for airfoil data, the table follows NumAlf, so we add d first - doDelete =True - if labelRaw=='numalf': - doDelete =False - d['tabType']=TABTYPE_NOT_A_TAB - self.data.append(d) - # Creating a new dictionary for the table - d = {'value':None, 'label':'NumAlf'+labOffset, 'isComment':False, 'descr':'', 'tabType':None} - i += 1 - nHeaders = NUMTAB_FROM_LAB_NHEADER[ii] - nOffset = NUMTAB_FROM_LAB_NOFFSET[ii] - if nOffset>0: - # Creating a dictionary for that entry - dd = {'value':d['value'], 'label':d['label']+labOffset, 'isComment':False, 'descr':d['descr'], 'tabType':TABTYPE_NOT_A_TAB} - self.data.append(dd) - - d['label'] = NUMTAB_FROM_LAB_VARNAME[ii] - if d['label'].lower()=='afcoeff' : - d['tabType'] = TABTYPE_NUM_WITH_HEADERCOM - else: - if tab_type=='num': - d['tabType'] = TABTYPE_NUM_WITH_HEADER - elif tab_type=='sdout': - d['tabType'] = TABTYPE_NUM_SUBDYNOUT - else: - d['tabType'] = TABTYPE_MIX_WITH_HEADER - # Finding table dimension (number of lines) - tabDimVar = NUMTAB_FROM_LAB_DIM_VAR[ii] - if isinstance(tabDimVar, int): # dimension hardcoded - d['tabDimVar'] = tabDimVar - nTabLines = d['tabDimVar'] - else: - # We either use a variable name or "AUTO" to find the number of rows - tabDimVars = tabDimVar.split(':') - for tabDimVar in tabDimVars: - d['tabDimVar'] = tabDimVar - if tabDimVar=='AUTO': - # Determine table dimension automatically - nTabLines = findNumberOfTableLines(lines[i+nHeaders:], break_chars=['---','!','#']) - break - else: - try: - nTabLines = self[tabDimVar+labOffset] - break - except KeyError: - #print('Cannot determine table dimension using {}'.format(tabDimVar)) - # Hopefully this table has AUTO as well - pass - - d['label'] += labOffset - #print('Reading table {} Dimension {} (based on {})'.format(d['label'],nTabLines,d['tabDimVar'])); - d['value'], d['tabColumnNames'], d['tabUnits'] = parseFASTNumTable(self.filename,lines[i:i+nTabLines+nHeaders+nOffset],nTabLines,i, nHeaders, tableType=tab_type, nOffset=nOffset, varNumLines=d['tabDimVar']) - i += nTabLines+1-nOffset - - # --- Temporary hack for e.g. SubDyn, that has duplicate table, impossible to detect in the current way... - # So we remove the element form the list one read - if doDelete: - del NUMTAB_FROM_LAB_DETECT[ii] - del NUMTAB_FROM_LAB_DIM_VAR[ii] - del NUMTAB_FROM_LAB_VARNAME[ii] - del NUMTAB_FROM_LAB_NHEADER[ii] - del NUMTAB_FROM_LAB_NOFFSET[ii] - del NUMTAB_FROM_LAB_TYPE [ii] - del NUMTAB_FROM_LAB_DETECT_L[ii] - - elif isStr(d['label']) and d['label'].lower() in FILTAB_FROM_LAB_DETECT_L: - ii = FILTAB_FROM_LAB_DETECT_L.index(d['label'].lower()) - d['label'] = FILTAB_FROM_LAB_VARNAME[ii]+labOffset - d['tabDimVar'] = FILTAB_FROM_LAB_DIM_VAR[ii] - d['tabType'] = TABTYPE_FIL - nTabLines = self[d['tabDimVar']] - #print('Reading table {} Dimension {} (based on {})'.format(d['label'],nTabLines,d['tabDimVar'])); - d['value'] = parseFASTFilTable(lines[i:i+nTabLines],nTabLines,i) - i += nTabLines-1 - - - - self.data.append(d) - i += 1 - # --- Safety checks - if d['isComment']: - #print(line) - nComments +=1 - else: - if hasSpecialChars(d['label']): - nWrongLabels +=1 - #print('label>',d['label'],'<',type(d['label']),line); - if i>3: # first few lines may be comments, we allow it - #print('Line',i,'Label:',d['label']) - raise WrongFormatError('Special Character found in Label: `{}`, for line: `{}`'.format(d['label'],line)) - if len(d['label'])==0: - nWrongLabels +=1 - if nComments>len(lines)*0.35: - #print('Comment fail',nComments,len(lines),self.filename) - raise WrongFormatError('Most lines were read as comments, probably not a FAST Input File: {}'.format(self.filename)) - if nWrongLabels>len(lines)*0.10: - #print('Label fail',nWrongLabels,len(lines),self.filename) - raise WrongFormatError('Too many lines with wrong labels, probably not a FAST Input File {}:'.format(self.filename)) - - # --- END OF FOR LOOP ON LINES - - # --- PostReading checks - labels = self.keys() - duplicates = set([x for x in labels if (labels.count(x) > 1) and x!='OutList' and x.strip()!='-']) - if len(duplicates)>0: - print('[WARN] Duplicate labels found in file: '+self.filename) - print(' Duplicates: '+', '.join(duplicates)) - print(' It\'s strongly recommended to make them unique! ') -# except WrongFormatError as e: -# raise WrongFormatError('Fast File {}: '.format(self.filename)+'\n'+e.args[0]) -# except Exception as e: -# raise e -# # print(e) -# raise Exception('Fast File {}: '.format(self.filename)+'\n'+e.args[0]) - self._lines = lines - - - def toString(self): - s='' - # Special file formats, TODO subclass - def toStringVLD(val,lab,descr): - val='{}'.format(val) - lab='{}'.format(lab) - if len(val)<13: - val='{:13s}'.format(val) - if len(lab)<13: - lab='{:13s}'.format(lab) - return val+' '+lab+' - '+descr.strip().lstrip('-').lstrip() - - def toStringIntFloatStr(x): - try: - if int(x)==x: - s='{:15.0f}'.format(x) - else: - s='{:15.8e}'.format(x) - except: - s=x - return s - - def beamdyn_section_mat_tostring(x,K,M): - def mat_tostring(M,fmt='24.16e'): - return '\n'.join([' '+' '.join(['{:24.16E}'.format(m) for m in M[i,:]]) for i in range(np.size(M,1))]) - s='' - s+='{:.6f}\n'.format(x) - s+=mat_tostring(K) - #s+=np.array2string(K) - s+='\n' - s+='\n' - s+=mat_tostring(M) - #s+=np.array2string(M) - s+='\n' - s+='\n' - return s - - for i in range(len(self.data)): - d=self.data[i] - if d['isComment']: - s+='{}'.format(d['value']) - elif d['tabType']==TABTYPE_NOT_A_TAB: - if isinstance(d['value'], list): - sList=', '.join([str(x) for x in d['value']]) - s+=toStringVLD(sList, d['label'], d['descr']) - else: - s+=toStringVLD(d['value'],d['label'],d['descr']) - elif d['tabType']==TABTYPE_NUM_WITH_HEADER: - if d['tabColumnNames'] is not None: - s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) - #s+=d['descr'] # Not ready for that - if d['tabUnits'] is not None: - s+='\n' - s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) - newline='\n' - else: - newline='' - if np.size(d['value'],0) > 0 : - s+=newline - s+='\n'.join('\t'.join( ('{:15.0f}'.format(x) if int(x)==x else '{:15.8e}'.format(x) ) for x in y) for y in d['value']) - elif d['tabType']==TABTYPE_MIX_WITH_HEADER: - s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) - if d['tabUnits'] is not None: - s+='\n' - s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) - if np.size(d['value'],0) > 0 : - s+='\n' - s+='\n'.join('\t'.join(toStringIntFloatStr(x) for x in y) for y in d['value']) - elif d['tabType']==TABTYPE_NUM_WITH_HEADERCOM: - s+='! {}\n'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) - s+='! {}\n'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) - s+='\n'.join('\t'.join('{:15.8e}'.format(x) for x in y) for y in d['value']) - elif d['tabType']==TABTYPE_FIL: - #f.write('{} {} {}\n'.format(d['value'][0],d['tabDetect'],d['descr'])) - label = d['label'] - if 'kbot' in self.keys(): # Moordyn has no 'OutList' label.. - label='' - if len(d['value'])==1: - s+='{} {} {}'.format(d['value'][0], label, d['descr']) # TODO? - else: - s+='{} {} {}\n'.format(d['value'][0], label, d['descr']) # TODO? - s+='\n'.join(fil for fil in d['value'][1:]) - elif d['tabType']==TABTYPE_NUM_BEAMDYN: - # TODO use dedicated sub-class - data = d['value'] - Cols =['Span'] - Cols+=['K{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] - Cols+=['M{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] - for i in np.arange(len(data['span'])): - x = data['span'][i] - K = data['K'][i] - M = data['M'][i] - s += beamdyn_section_mat_tostring(x,K,M) - elif d['tabType']==TABTYPE_NUM_SUBDYNOUT: - data = d['value'] - s+='{}\n'.format(' '.join(['{:15s}'.format(s) for s in d['tabColumnNames']])) - s+='{}'.format(' '.join(['{:15s}'.format(s) for s in d['tabUnits']])) - if np.size(d['value'],0) > 0 : - s+='\n' - s+='\n'.join('\t'.join('{:15.0f}'.format(x) for x in y) for y in data) - else: - raise Exception('Unknown table type for variable {}'.format(d)) - if i0: - print('[WARN] Creating directory: ',dirname) - os.makedirs(dirname) - - self._write() - else: - raise Exception('No filename provided') - - def _writeSanityChecks(self): - """ Sanity checks before write""" - pass - - def _write(self): - self._writeSanityChecks() - with open(self.filename,'w') as f: - f.write(self.toString()) - - def toDataFrame(self): - return self._toDataFrame() - - def _toDataFrame(self): - dfs={} - - for i in range(len(self.data)): - d=self.data[i] - if d['tabType'] in [TABTYPE_NUM_WITH_HEADER, TABTYPE_NUM_WITH_HEADERCOM, TABTYPE_NUM_NO_HEADER, TABTYPE_MIX_WITH_HEADER]: - Val= d['value'] - if d['tabUnits'] is None: - Cols=d['tabColumnNames'] - else: - Cols=['{}_{}'.format(c,u.replace('(','[').replace(')',']')) for c,u in zip(d['tabColumnNames'],d['tabUnits'])] - #print(Val) - #print(Cols) - - # --- Adding some useful tabulated data for some files (Shapefunctions, polar) - - if self.getIDSafe('TwFAM1Sh(2)')>0: - # Hack for tower files, we add the modes - # NOTE: we provide interpolated shape function just in case the resolution of the input file is low.. - x=Val[:,0] - Modes=np.zeros((x.shape[0],4)) - Modes[:,0] = x**2 * self['TwFAM1Sh(2)'] + x**3 * self['TwFAM1Sh(3)'] + x**4 * self['TwFAM1Sh(4)'] + x**5 * self['TwFAM1Sh(5)'] + x**6 * self['TwFAM1Sh(6)'] - Modes[:,1] = x**2 * self['TwFAM2Sh(2)'] + x**3 * self['TwFAM2Sh(3)'] + x**4 * self['TwFAM2Sh(4)'] + x**5 * self['TwFAM2Sh(5)'] + x**6 * self['TwFAM2Sh(6)'] - Modes[:,2] = x**2 * self['TwSSM1Sh(2)'] + x**3 * self['TwSSM1Sh(3)'] + x**4 * self['TwSSM1Sh(4)'] + x**5 * self['TwSSM1Sh(5)'] + x**6 * self['TwSSM1Sh(6)'] - Modes[:,3] = x**2 * self['TwSSM2Sh(2)'] + x**3 * self['TwSSM2Sh(3)'] + x**4 * self['TwSSM2Sh(4)'] + x**5 * self['TwSSM2Sh(5)'] + x**6 * self['TwSSM2Sh(6)'] - Val = np.hstack((Val,Modes)) - ShapeCols = [c+'_[-]' for c in ['ShapeForeAft1','ShapeForeAft2','ShapeSideSide1','ShapeSideSide2']] - Cols = Cols + ShapeCols - - name=d['label'] - - if name=='DampingCoeffs': - pass - else: - dfs[name]=pd.DataFrame(data=Val,columns=Cols) - elif d['tabType'] in [TABTYPE_NUM_BEAMDYN]: - span = d['value']['span'] - M = d['value']['M'] - K = d['value']['K'] - nSpan=len(span) - MM=np.zeros((nSpan,1+36+36)) - MM[:,0] = span - MM[:,1:37] = K.reshape(nSpan,36) - MM[:,37:] = M.reshape(nSpan,36) - Cols =['Span'] - Cols+=['K{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] - Cols+=['M{}{}'.format(i+1,j+1) for i in range(6) for j in range(6)] - # Putting the main terms first - IAll = range(1+36+36) - IMain= [0] + [i*6+i+1 for i in range(6)] + [i*6+i+37 for i in range(6)] - IOrg = IMain + [i for i in range(1+36+36) if i not in IMain] - Cols = [Cols[i] for i in IOrg] - data = MM[:,IOrg] - name=d['label'] - dfs[name]=pd.DataFrame(data=data,columns=Cols) - if len(dfs)==1: - dfs=dfs[list(dfs.keys())[0]] - return dfs - - def toGraph(self, **kwargs): - from .fast_input_file_graph import fastToGraph - return fastToGraph(self, **kwargs) - - - -# --------------------------------------------------------------------------------} -# --- SubReaders /detectors -# --------------------------------------------------------------------------------{ - - - def detectAndReadAirfoilAD14(self,lines): - if len(lines)<14: - return False - # Reading number of tables - L3 = lines[2].strip().split() - if len(L3)<=0: - return False - if not strIsInt(L3[0]): - return False - nTables=int(L3[0]) - # Reading table ID - L4 = lines[3].strip().split() - if len(L4)<=nTables: - return False - TableID=L4[:nTables] - if nTables==1: - TableID=[''] - # Keywords for file format - KW1=lines[12].strip().split() - KW2=lines[13].strip().split() - if len(KW1)>nTables and len(KW2)>nTables: - if KW1[nTables].lower()=='angle' and KW2[nTables].lower()=='minimum': - d = getDict(); d['isComment'] = True; d['value'] = lines[0]; self.data.append(d); - d = getDict(); d['isComment'] = True; d['value'] = lines[1]; self.data.append(d); - for i in range(2,14): - splits = lines[i].split() - #print(splits) - d = getDict() - d['label'] = ' '.join(splits[1:]) # TODO - d['descr'] = ' '.join(splits[1:]) # TODO - d['value'] = float(splits[0]) - self.data.append(d) - #pass - #for i in range(2,14): - nTabLines=0 - while 14+nTabLines0 : - nTabLines +=1 - #data = np.array([lines[i].strip().split() for i in range(14,len(lines)) if len(lines[i])>0]).astype(float) - #data = np.array([lines[i].strip().split() for i in takewhile(lambda x: len(lines[i].strip())>0, range(14,len(lines)-1))]).astype(float) - data = np.array([lines[i].strip().split() for i in range(14,nTabLines+14)]).astype(float) - #print(data) - d = getDict() - d['label'] = 'Polar' - d['tabDimVar'] = nTabLines - d['tabType'] = TABTYPE_NUM_NO_HEADER - d['value'] = data - if np.size(data,1)==1+nTables*3: - d['tabColumnNames'] = ['Alpha']+[n+l for l in TableID for n in ['Cl','Cd','Cm']] - d['tabUnits'] = ['(deg)']+['(-)' , '(-)' , '(-)']*nTables - elif np.size(data,1)==1+nTables*2: - d['tabColumnNames'] = ['Alpha']+[n+l for l in TableID for n in ['Cl','Cd']] - d['tabUnits'] = ['(deg)']+['(-)' , '(-)']*nTables - else: - d['tabColumnNames'] = ['col{}'.format(j) for j in range(np.size(data,1))] - self.data.append(d) - return True - - def readBeamDynProps(self,lines,iStart): - nStations=self['station_total'] - #M=np.zeros((nStations,1+36+36)) - M = np.zeros((nStations,6,6)) - K = np.zeros((nStations,6,6)) - span = np.zeros(nStations) - i=iStart; - try: - for j in range(nStations): - # Read span location - span[j]=float(lines[i]); i+=1; - # Read stiffness matrix - K[j,:,:]=np.array((' '.join(lines[i:i+6])).split()).astype(float).reshape(6,6) - i+=7 - # Read mass matrix - M[j,:,:]=np.array((' '.join(lines[i:i+6])).split()).astype(float).reshape(6,6) - i+=7 - except: - raise WrongFormatError('An error occured while reading section {}/{}'.format(j+1,nStations)) - d = getDict() - d['label'] = 'BeamProperties' - d['descr'] = '' - d['tabType'] = TABTYPE_NUM_BEAMDYN - d['value'] = {'span':span, 'K':K, 'M':M} - self.data.append(d) - - -# --------------------------------------------------------------------------------} -# --- Helper functions -# --------------------------------------------------------------------------------{ -def isStr(s): - return isinstance(s, str) - -def strIsFloat(s): - #return s.replace('.',',1').isdigit() - try: - float(s) - return True - except: - return False - -def strIsBool(s): - return s.lower() in ['true','false','t','f'] - -def strIsInt(s): - s = str(s) - if s[0] in ('-', '+'): - return s[1:].isdigit() - return s.isdigit() - -def strToBool(s): - return s.lower() in ['true','t'] - -def hasSpecialChars(s): - # fast allows for parenthesis - # For now we allow for - but that's because of BeamDyn geometry members - return not re.match("^[\"\'a-zA-Z0-9_()-]*$", s) - -def cleanLine(l): - # makes a string single space separated - l = l.replace('\t',' ') - l = ' '.join(l.split()) - l = l.strip() - return l - -def cleanAfterChar(l,c): - # remove whats after a character - n = l.find(c); - if n>0: - return l[:n] - else: - return l - -def getDict(): - return {'value':None, 'label':'', 'isComment':False, 'descr':'', 'tabType':TABTYPE_NOT_A_TAB} - -def _merge_value(splits): - - merged = splits.pop(0) - if merged[0] == '"': - while merged[-1] != '"': - merged += " "+splits.pop(0) - splits.insert(0, merged) - - - - -def parseFASTInputLine(line_raw,i,allowSpaceSeparatedList=False): - d = getDict() - #print(line_raw) - try: - # preliminary cleaning (Note: loss of formatting) - line = cleanLine(line_raw) - # Comment - if any(line.startswith(c) for c in ['#','!','--','==']) or len(line)==0: - d['isComment']=True - d['value']=line_raw - return d - if line.lower().startswith('end'): - sp =line.split() - if len(sp)>2 and sp[1]=='of': - d['isComment']=True - d['value']=line_raw - - # Detecting lists - List=[]; - iComma=line.find(',') - if iComma>0 and iComma<30: - fakeline=line.replace(' ',',') - fakeline=re.sub(',+',',',fakeline) - csplits=fakeline.split(',') - # Splitting based on comma and looping while it's numbers of booleans - ii=0 - s=csplits[ii] - #print(csplits) - while strIsFloat(s) or strIsBool(s) and ii=len(csplits): - raise WrongFormatError('Wrong number of list values') - s = csplits[ii] - #print('[INFO] Line {}: Found list: '.format(i),List) - # Defining value and remaining splits - if len(List)>=2: - d['value']=List - line_remaining=line - # eating line, removing each values - for iii in range(ii): - sValue=csplits[iii] - ipos=line_remaining.find(sValue) - line_remaining = line_remaining[ipos+len(sValue):] - splits=line_remaining.split() - iNext=0 - else: - # It's not a list, we just use space as separators - splits=line.split(' ') - _merge_value(splits) - s=splits[0] - - if strIsInt(s): - d['value']=int(s) - if allowSpaceSeparatedList and len(splits)>1: - if strIsInt(splits[1]): - d['value']=splits[0]+ ' '+splits[1] - elif strIsFloat(s): - d['value']=float(s) - elif strIsBool(s): - d['value']=strToBool(s) - else: - d['value']=s - iNext=1 - - # Extracting label (TODO, for now only second split) - bOK=False - while (not bOK) and iNext comment assumed'.format(i+1)) - d['isComment']=True - d['value']=line_raw - iNext = len(splits)+1 - - # Recombining description - if len(splits)>=iNext+1: - d['descr']=' '.join(splits[iNext:]) - except WrongFormatError as e: - raise WrongFormatError('Line {}: '.format(i+1)+e.args[0]) - except Exception as e: - raise Exception('Line {}: '.format(i+1)+e.args[0]) - - return d - -def parseFASTOutList(lines,iStart): - OutList=[] - i = iStart - while i=len(lines): - print('[WARN] End of file reached while reading Outlist') - #i=min(i+1,len(lines)) - return OutList,iStart+len(OutList) - - -def extractWithinParenthesis(s): - mo = re.search(r'\((.*)\)', s) - if mo: - return mo.group(1) - return '' - -def extractWithinBrackets(s): - mo = re.search(r'\((.*)\)', s) - if mo: - return mo.group(1) - return '' - -def detectUnits(s,nRef): - nPOpen=s.count('(') - nPClos=s.count(')') - nBOpen=s.count('[') - nBClos=s.count(']') - - sep='!#@#!' - if (nPOpen == nPClos) and (nPOpen>=nRef): - #that's pretty good - Units=s.replace('(','').replace(')',sep).split(sep)[:-1] - elif (nBOpen == nBClos) and (nBOpen>=nRef): - Units=s.replace('[','').replace(']',sep).split(sep)[:-1] - else: - Units=s.split() - return Units - - -def findNumberOfTableLines(lines, break_chars): - """ Loop through lines until a one of the "break character is found""" - for i, l in enumerate(lines): - for bc in break_chars: - if l.startswith(bc): - return i - # Not found - print('[FAIL] end of table not found') - return len(lines) - - -def parseFASTNumTable(filename,lines,n,iStart,nHeaders=2,tableType='num',nOffset=0, varNumLines=''): - """ - First lines of data starts at: nHeaders+nOffset - - """ - Tab = None - ColNames = None - Units = None - - - if len(lines)!=n+nHeaders+nOffset: - raise BrokenFormatError('Not enough lines in table: {} lines instead of {}\nFile:{}'.format(len(lines)-nHeaders,n,filename)) - try: - if nHeaders==0: - # Extract number of values from number of numerical values on first line - numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?' - rx = re.compile(numeric_const_pattern, re.VERBOSE) - header = cleanAfterChar(lines[nOffset], '!') - if tableType=='num': - dat= np.array(rx.findall(header)).astype(float) - ColNames=['C{}'.format(j) for j in range(len(dat))] - else: - raise NotImplementedError('Reading FAST tables with no headers for type different than num not implemented yet') - - elif nHeaders>=1: - # Extract column names - i = 0 - sTmp = cleanLine(lines[i]) - sTmp = cleanAfterChar(sTmp,'[') - sTmp = cleanAfterChar(sTmp,'(') - sTmp = cleanAfterChar(sTmp,'!') - sTmp = cleanAfterChar(sTmp,'#') - if sTmp.startswith('!'): - sTmp=sTmp[1:].strip() - ColNames=sTmp.split() - if nHeaders>=2: - # Extract units - i = 1 - sTmp = cleanLine(lines[i]) - sTmp = cleanAfterChar(sTmp,'!') - sTmp = cleanAfterChar(sTmp,'#') - if sTmp.startswith('!'): - sTmp=sTmp[1:].strip() - - Units = detectUnits(sTmp,len(ColNames)) - Units = ['({})'.format(u.strip()) for u in Units] - # Forcing user to match number of units and column names - if len(ColNames) != len(Units): - print(ColNames) - print(Units) - print('[WARN] {}: Line {}: Number of column names different from number of units in table'.format(filename, iStart+i+1)) - - nCols=len(ColNames) - - if tableType=='num': - if n==0: - Tab = np.zeros((n, nCols)) - for i in range(nHeaders+nOffset,n+nHeaders+nOffset): - l = cleanAfterChar(lines[i].lower(),'!') - l = cleanAfterChar(l,'#') - v = l.split() - if len(v) != nCols: - # Discarding SubDyn special cases - if ColNames[-1].lower() not in ['nodecnt']: - print('[WARN] {}: Line {}: number of data different from number of column names. ColumnNames: {}'.format(filename, iStart+i+1, ColNames)) - if i==nHeaders+nOffset: - # Node Cnt - if len(v) != nCols: - if ColNames[-1].lower()== 'nodecnt': - ColNames = ColNames+['Col']*(len(v)-nCols) - Units = Units+['Col']*(len(v)-nCols) - - nCols=len(v) - Tab = np.zeros((n, nCols)) - # Accounting for TRUE FALSE and converting to float - v = [s.replace('true','1').replace('false','0').replace('noprint','0').replace('print','1') for s in v] - v = [float(s) for s in v[0:nCols]] - if len(v) < nCols: - raise Exception('Number of data is lower than number of column names') - Tab[i-nHeaders-nOffset,:] = v - elif tableType=='mix': - # a mix table contains a mixed of strings and floats - # For now, we are being a bit more relaxed about the number of columns - if n==0: - Tab = np.zeros((n, nCols)).astype(object) - for i in range(nHeaders+nOffset,n+nHeaders+nOffset): - l = lines[i] - l = cleanAfterChar(l,'!') - l = cleanAfterChar(l,'#') - v = l.split() - if l.startswith('---'): - raise BrokenFormatError('Error reading line {} while reading table. Is the variable `{}` set correctly?'.format(iStart+i+1, varNumLines)) - if len(v) != nCols: - # Discarding SubDyn special cases - if ColNames[-1].lower() not in ['cosmid', 'ssifile']: - print('[WARN] {}: Line {}: Number of data is different than number of column names. Column Names: {}'.format(filename,iStart+1+i, ColNames)) - if i==nHeaders+nOffset: - if len(v)>nCols: - ColNames = ColNames+['Col']*(len(v)-nCols) - Units = Units+['Col']*(len(v)-nCols) - nCols=len(v) - Tab = np.zeros((n, nCols)).astype(object) - v=v[0:min(len(v),nCols)] - Tab[i-nHeaders-nOffset,0:len(v)] = v - # If all values are float, we convert to float - if all([strIsFloat(x) for x in Tab.ravel()]): - Tab=Tab.astype(float) - elif tableType=='sdout': - header = lines[0] - units = lines[1] - Tab=[] - for i in range(nHeaders+nOffset,n+nHeaders+nOffset): - l = cleanAfterChar(lines[i].lower(),'!') - Tab.append( np.array(l.split()).astype(int)) - else: - raise Exception('Unknown table type') - - ColNames = ColNames[0:nCols] - if Units is not None: - Units = Units[0:nCols] - Units = ['('+u.replace('(','').replace(')','')+')' for u in Units] - if nHeaders==0: - ColNames=None - - except Exception as e: - raise BrokenFormatError('Line {}: {}'.format(iStart+i+1,e.args[0])) - return Tab, ColNames, Units - - -def parseFASTFilTable(lines,n,iStart): - Tab = [] - try: - i=0 - if len(lines)!=n: - raise WrongFormatError('Not enough lines in table: {} lines instead of {}'.format(len(lines),n)) - for i in range(n): - l = lines[i].split() - #print(l[0].strip()) - Tab.append(l[0].strip()) - - except Exception as e: - raise Exception('Line {}: '.format(iStart+i+1)+e.args[0]) - return Tab - - - -# --------------------------------------------------------------------------------} -# --------------------------------------------------------------------------------} -# --------------------------------------------------------------------------------} -# --- Predefined types (may change with OpenFAST version..) -# --------------------------------------------------------------------------------{ -# --------------------------------------------------------------------------------{ -# --------------------------------------------------------------------------------{ - - -# --------------------------------------------------------------------------------} -# --- BeamDyn -# --------------------------------------------------------------------------------{ -class BDFile(FASTInputFileBase): - @classmethod - def from_fast_input_file(cls, parent): - self = cls() - self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='BD') - return self - - def __init__(self, filename=None, **kwargs): - FASTInputFileBase.__init__(self, filename, **kwargs) - if filename is None: - # Define a prototype for this file format - self.addComment('--------- BEAMDYN with OpenFAST INPUT FILE -------------------------------------------') - self.addComment('BeamDyn input file, written by BDFile') - self.addComment('---------------------- SIMULATION CONTROL --------------------------------------') - self.addValKey(False , 'Echo' , 'Echo input data to ".ech"? (flag)') - self.addValKey(True , 'QuasiStaticInit' , 'Use quasi-static pre-conditioning with centripetal accelerations in initialization? (flag) [dynamic solve only]') - self.addValKey( 0 , 'rhoinf' , 'Numerical damping parameter for generalized-alpha integrator') - self.addValKey( 2 , 'quadrature' , 'Quadrature method: 1=Gaussian; 2=Trapezoidal (switch)') - self.addValKey("DEFAULT" , 'refine' , 'Refinement factor for trapezoidal quadrature (-) [DEFAULT = 1; used only when quadrature=2]') - self.addValKey("DEFAULT" , 'n_fact' , 'Factorization frequency for the Jacobian in N-R iteration(-) [DEFAULT = 5]') - self.addValKey("DEFAULT" , 'DTBeam' , 'Time step size (s)') - self.addValKey("DEFAULT" , 'load_retries' , 'Number of factored load retries before quitting the simulation [DEFAULT = 20]') - self.addValKey("DEFAULT" , 'NRMax' , 'Max number of iterations in Newton-Raphson algorithm (-) [DEFAULT = 10]') - self.addValKey("DEFAULT" , 'stop_tol' , 'Tolerance for stopping criterion (-) [DEFAULT = 1E-5]') - self.addValKey("DEFAULT" , 'tngt_stf_fd' , 'Use finite differenced tangent stiffness matrix? (flag)') - self.addValKey("DEFAULT" , 'tngt_stf_comp' , 'Compare analytical finite differenced tangent stiffness matrix? (flag)') - self.addValKey("DEFAULT" , 'tngt_stf_pert' , 'Perturbation size for finite differencing (-) [DEFAULT = 1E-6]') - self.addValKey("DEFAULT" , 'tngt_stf_difftol', 'Maximum allowable relative difference between analytical and fd tangent stiffness (-); [DEFAULT = 0.1]') - self.addValKey(True , 'RotStates' , 'Orient states in the rotating frame during linearization? (flag) [used only when linearizing] ') - self.addComment('---------------------- GEOMETRY PARAMETER --------------------------------------') - self.addValKey( 1 , 'member_total' , 'Total number of members (-)') - self.addValKey( 0 , 'kp_total' , 'Total number of key points (-) [must be at least 3]') - self.addValKey( [1, 0] , 'kp_per_member' , 'Member number; Number of key points in this member') - self.addTable('MemberGeom', np.zeros((0,4)), tabType=1, tabDimVar='kp_total', - cols=['kp_xr', 'kp_yr', 'kp_zr', 'initial_twist'], - units=['(m)', '(m)', '(m)', '(deg)']) - self.addComment('---------------------- MESH PARAMETER ------------------------------------------') - self.addValKey( 5 , 'order_elem' , 'Order of interpolation (basis) function (-)') - self.addComment('---------------------- MATERIAL PARAMETER --------------------------------------') - self.addValKey('"undefined"', 'BldFile' , 'Name of file containing properties for blade (quoted string)') - self.addComment('---------------------- PITCH ACTUATOR PARAMETERS -------------------------------') - self.addValKey(False , 'UsePitchAct' , 'Whether a pitch actuator should be used (flag)') - self.addValKey( 1 , 'PitchJ' , 'Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true]') - self.addValKey( 0 , 'PitchK' , 'Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true]') - self.addValKey( 0 , 'PitchC' , 'Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true]') - self.addComment('---------------------- OUTPUTS -------------------------------------------------') - self.addValKey(False , 'SumPrint' , 'Print summary data to ".sum" (flag)') - self.addValKey('"ES10.3E2"' , 'OutFmt' , 'Format used for text tabular output, excluding the time channel.') - self.addValKey( 0 , 'NNodeOuts' , 'Number of nodes to output to file [0 - 9] (-)') - self.addValKey( [1] , 'OutNd' , 'Nodes whose values will be output (-)') - self.addValKey( [''] , 'OutList' , 'The next line(s) contains a list of output parameters. See OutListParameters.xlsx, BeamDyn tab for a listing of available output channels, (-)') - self.addComment('END of OutList (the word "END" must appear in the first 3 columns of this last OutList line)') - self.addComment('---------------------- NODE OUTPUTS --------------------------------------------') - self.addValKey( 99 , 'BldNd_BlOutNd' , 'Blade nodes on each blade (currently unused)') - self.addValKey( [''] , 'OutList_Nodal' , 'The next line(s) contains a list of output parameters. See OutListParameters.xlsx, BeamDyn_Nodes tab for a listing of available output channels, (-)') - self.addComment('END of input file (the word "END" must appear in the first 3 columns of this last OutList line)') - self.addComment('--------------------------------------------------------------------------------') - self.hasNodal=True - #"RootFxr, RootFyr, RootFzr" - #"RootMxr, RootMyr, RootMzr" - #"TipTDxr, TipTDyr, TipTDzr" - #"TipRDxr, TipRDyr, TipRDzr" - - else: - # fix some stuff that generic reader fail at - self.data[1] = {'value':self._lines[1], 'label':'', 'isComment':True, 'descr':'', 'tabType':0} - i = self.getID('kp_total') - listval = [int(v) for v in str(self.data[i+1]['value']).split()] - self.data[i+1]['value']=listval - self.data[i+1]['label']='kp_per_member' - self.data[i+1]['isComment']=False - self.module='BD' - - def _writeSanityChecks(self): - """ Sanity checks before write """ - self['kp_total']=self['MemberGeom'].shape[0] - i = self.getID('kp_total') - self.data[i+1]['value']=[1, self['MemberGeom'].shape[0]] # kp_per_member - self.data[i+1]['label']='kp_per_member' - # Could check length of OutNd - - def _toDataFrame(self): - df = FASTInputFileBase._toDataFrame(self) - # TODO add quadrature points based on trapz/gauss - return df - - @property - def _IComment(self): return [1] - -# --------------------------------------------------------------------------------} -# --- ElastoDyn Blade -# --------------------------------------------------------------------------------{ -class EDBladeFile(FASTInputFileBase): - @classmethod - def from_fast_input_file(cls, parent): - self = cls() - self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='EDBlade') - return self - - def __init__(self, filename=None, **kwargs): - FASTInputFileBase.__init__(self, filename, **kwargs) - if filename is None: - # Define a prototype for this file format - self.addComment('------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE --------------------------') - self.addComment('ElastoDyn blade definition, written by EDBladeFile.') - self.addComment('---------------------- BLADE PARAMETERS ----------------------------------------') - self.addValKey( 0 , 'NBlInpSt' , 'Number of blade input stations (-)') - self.addValKey( 1. , 'BldFlDmp(1)', 'Blade flap mode #1 structural damping in percent of critical (%)') - self.addValKey( 1. , 'BldFlDmp(2)', 'Blade flap mode #2 structural damping in percent of critical (%)') - self.addValKey( 1. , 'BldEdDmp(1)', 'Blade edge mode #1 structural damping in percent of critical (%)') - self.addComment('---------------------- BLADE ADJUSTMENT FACTORS --------------------------------') - self.addValKey( 1. , 'FlStTunr(1)', 'Blade flapwise modal stiffness tuner, 1st mode (-)') - self.addValKey( 1. , 'FlStTunr(2)', 'Blade flapwise modal stiffness tuner, 2nd mode (-)') - self.addValKey( 1. , 'AdjBlMs' , 'Factor to adjust blade mass density (-)') - self.addValKey( 1. , 'AdjFlSt' , 'Factor to adjust blade flap stiffness (-)') - self.addValKey( 1. , 'AdjEdSt' , 'Factor to adjust blade edge stiffness (-)') - self.addComment('---------------------- DISTRIBUTED BLADE PROPERTIES ----------------------------') - self.addTable('BldProp', np.zeros((0,6)), tabType=1, tabDimVar='NBlInpSt', cols=['BlFract', 'PitchAxis', 'StrcTwst', 'BMassDen', 'FlpStff', 'EdgStff'], units=['(-)', '(-)', '(deg)', '(kg/m)', '(Nm^2)', '(Nm^2)']) - self.addComment('---------------------- BLADE MODE SHAPES ---------------------------------------') - self.addValKey( 1.0 , 'BldFl1Sh(2)', 'Flap mode 1, coeff of x^2') - self.addValKey( 0.0 , 'BldFl1Sh(3)', ' , coeff of x^3') - self.addValKey( 0.0 , 'BldFl1Sh(4)', ' , coeff of x^4') - self.addValKey( 0.0 , 'BldFl1Sh(5)', ' , coeff of x^5') - self.addValKey( 0.0 , 'BldFl1Sh(6)', ' , coeff of x^6') - self.addValKey( 0.0 , 'BldFl2Sh(2)', 'Flap mode 2, coeff of x^2') # NOTE: using something not too bad just incase user uses these as is.. - self.addValKey( 0.0 , 'BldFl2Sh(3)', ' , coeff of x^3') - self.addValKey( -13.0 , 'BldFl2Sh(4)', ' , coeff of x^4') - self.addValKey( 27.0 , 'BldFl2Sh(5)', ' , coeff of x^5') - self.addValKey( -13.0 , 'BldFl2Sh(6)', ' , coeff of x^6') - self.addValKey( 1.0 , 'BldEdgSh(2)', 'Edge mode 1, coeff of x^2') - self.addValKey( 0.0 , 'BldEdgSh(3)', ' , coeff of x^3') - self.addValKey( 0.0 , 'BldEdgSh(4)', ' , coeff of x^4') - self.addValKey( 0.0 , 'BldEdgSh(5)', ' , coeff of x^5') - self.addValKey( 0.0 , 'BldEdgSh(6)', ' , coeff of x^6') - else: - # fix some stuff that generic reader fail at - self.data[1] = {'value':self._lines[1], 'label':'', 'isComment':True, 'descr':'', 'tabType':0} - self.module='EDBlade' - - def _writeSanityChecks(self): - """ Sanity checks before write """ - self['NBlInpSt']=self['BldProp'].shape[0] - # Sum of Coeffs should be 1 - for s in ['BldFl1Sh','BldFl2Sh','BldEdgSh']: - sumcoeff=np.sum([self[s+'('+str(i)+')'] for i in [2,3,4,5,6] ]) - if np.abs(sumcoeff-1)>1e-4: - print('[WARN] Sum of coefficients for polynomial {} not equal to 1 ({}). File: {}'.format(s, sumcoeff, self.filename)) - - def _toDataFrame(self): - df = FASTInputFileBase._toDataFrame(self) - # We add the shape functions for EDBladeFile - x=df['BlFract_[-]'].values - Modes=np.zeros((x.shape[0],3)) - Modes[:,0] = x**2 * self['BldFl1Sh(2)'] + x**3 * self['BldFl1Sh(3)'] + x**4 * self['BldFl1Sh(4)'] + x**5 * self['BldFl1Sh(5)'] + x**6 * self['BldFl1Sh(6)'] - Modes[:,1] = x**2 * self['BldFl2Sh(2)'] + x**3 * self['BldFl2Sh(3)'] + x**4 * self['BldFl2Sh(4)'] + x**5 * self['BldFl2Sh(5)'] + x**6 * self['BldFl2Sh(6)'] - Modes[:,2] = x**2 * self['BldEdgSh(2)'] + x**3 * self['BldEdgSh(3)'] + x**4 * self['BldEdgSh(4)'] + x**5 * self['BldEdgSh(5)'] + x**6 * self['BldEdgSh(6)'] - df[['ShapeFlap1_[-]','ShapeFlap2_[-]','ShapeEdge1_[-]']]=Modes - return df - - @property - def _IComment(self): return [1] - -# --------------------------------------------------------------------------------} -# --- ElastoDyn Tower -# --------------------------------------------------------------------------------{ -class EDTowerFile(FASTInputFileBase): - @classmethod - def from_fast_input_file(cls, parent): - self = cls() - self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='EDTower') - return self - - def __init__(self, filename=None, **kwargs): - FASTInputFileBase.__init__(self, filename, **kwargs) - if filename is None: - # Define a prototype for this file format - self.addComment('------- ELASTODYN V1.00.* TOWER INPUT FILE -------------------------------------') - self.addComment('ElastoDyn tower definition, written by EDTowerFile.') - self.addComment('---------------------- TOWER PARAMETERS ----------------------------------------') - self.addValKey( 0 , 'NTwInpSt' , 'Number of blade input stations (-)') - self.addValKey( 1. , 'TwrFADmp(1)' , 'Tower 1st fore-aft mode structural damping ratio (%)') - self.addValKey( 1. , 'TwrFADmp(2)' , 'Tower 2nd fore-aft mode structural damping ratio (%)') - self.addValKey( 1. , 'TwrSSDmp(1)' , 'Tower 1st side-to-side mode structural damping ratio (%)') - self.addValKey( 1. , 'TwrSSDmp(2)' , 'Tower 2nd side-to-side mode structural damping ratio (%)') - self.addComment('---------------------- TOWER ADJUSTMENT FACTORS --------------------------------') - self.addValKey( 1. , 'FAStTunr(1)' , 'Tower fore-aft modal stiffness tuner, 1st mode (-)') - self.addValKey( 1. , 'FAStTunr(2)' , 'Tower fore-aft modal stiffness tuner, 2nd mode (-)') - self.addValKey( 1. , 'SSStTunr(1)' , 'Tower side-to-side stiffness tuner, 1st mode (-)') - self.addValKey( 1. , 'SSStTunr(2)' , 'Tower side-to-side stiffness tuner, 2nd mode (-)') - self.addValKey( 1. , 'AdjTwMa' , 'Factor to adjust tower mass density (-)') - self.addValKey( 1. , 'AdjFASt' , 'Factor to adjust tower fore-aft stiffness (-)') - self.addValKey( 1. , 'AdjSSSt' , 'Factor to adjust tower side-to-side stiffness (-)') - self.addComment('---------------------- DISTRIBUTED TOWER PROPERTIES ----------------------------') - self.addTable('TowProp', np.zeros((0,6)), tabType=1, tabDimVar='NTwInpSt', - cols=['HtFract','TMassDen','TwFAStif','TwSSStif'], - units=['(-)', '(kg/m)', '(Nm^2)', '(Nm^2)']) - self.addComment('---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------') - self.addValKey( 1.0 , 'TwFAM1Sh(2)', 'Mode 1, coefficient of x^2 term') - self.addValKey( 0.0 , 'TwFAM1Sh(3)', ' , coefficient of x^3 term') - self.addValKey( 0.0 , 'TwFAM1Sh(4)', ' , coefficient of x^4 term') - self.addValKey( 0.0 , 'TwFAM1Sh(5)', ' , coefficient of x^5 term') - self.addValKey( 0.0 , 'TwFAM1Sh(6)', ' , coefficient of x^6 term') - self.addValKey( -26. , 'TwFAM2Sh(2)', 'Mode 2, coefficient of x^2 term') # NOTE: using something not too bad just incase user uses these as is.. - self.addValKey( 0.0 , 'TwFAM2Sh(3)', ' , coefficient of x^3 term') - self.addValKey( 27. , 'TwFAM2Sh(4)', ' , coefficient of x^4 term') - self.addValKey( 0.0 , 'TwFAM2Sh(5)', ' , coefficient of x^5 term') - self.addValKey( 0.0 , 'TwFAM2Sh(6)', ' , coefficient of x^6 term') - self.addComment('---------------------- TOWER SIDE-TO-SIDE MODE SHAPES --------------------------') - self.addValKey( 1.0 , 'TwSSM1Sh(2)', 'Mode 1, coefficient of x^2 term') - self.addValKey( 0.0 , 'TwSSM1Sh(3)', ' , coefficient of x^3 term') - self.addValKey( 0.0 , 'TwSSM1Sh(4)', ' , coefficient of x^4 term') - self.addValKey( 0.0 , 'TwSSM1Sh(5)', ' , coefficient of x^5 term') - self.addValKey( 0.0 , 'TwSSM1Sh(6)', ' , coefficient of x^6 term') - self.addValKey( -26. , 'TwSSM2Sh(2)', 'Mode 2, coefficient of x^2 term') # NOTE: using something not too bad just incase user uses these as is.. - self.addValKey( 0.0 , 'TwSSM2Sh(3)', ' , coefficient of x^3 term') - self.addValKey( 27. , 'TwSSM2Sh(4)', ' , coefficient of x^4 term') - self.addValKey( 0.0 , 'TwSSM2Sh(5)', ' , coefficient of x^5 term') - self.addValKey( 0.0 , 'TwSSM2Sh(6)', ' , coefficient of x^6 term') - else: - # fix some stuff that generic reader fail at - self.data[1] = {'value':self._lines[1], 'label':'', 'isComment':True, 'descr':'', 'tabType':0} - self.module='EDTower' - - def _writeSanityChecks(self): - """ Sanity checks before write """ - self['NTwInpSt']=self['TowProp'].shape[0] - # Sum of Coeffs should be 1 - for s in ['TwFAM1Sh','TwFAM2Sh','TwSSM1Sh','TwSSM2Sh']: - sumcoeff=np.sum([self[s+'('+str(i)+')'] for i in [2,3,4,5,6] ]) - if np.abs(sumcoeff-1)>1e-4: - print('[WARN] Sum of coefficients for polynomial {} not equal to 1 ({}). File: {}'.format(s, sumcoeff, self.filename)) - - def _toDataFrame(self): - df = FASTInputFileBase._toDataFrame(self) - # We add the shape functions for EDBladeFile - # NOTE: we provide interpolated shape function just in case the resolution of the input file is low.. - x = df['HtFract_[-]'].values - Modes=np.zeros((x.shape[0],4)) - Modes[:,0] = x**2 * self['TwFAM1Sh(2)'] + x**3 * self['TwFAM1Sh(3)'] + x**4 * self['TwFAM1Sh(4)'] + x**5 * self['TwFAM1Sh(5)'] + x**6 * self['TwFAM1Sh(6)'] - Modes[:,1] = x**2 * self['TwFAM2Sh(2)'] + x**3 * self['TwFAM2Sh(3)'] + x**4 * self['TwFAM2Sh(4)'] + x**5 * self['TwFAM2Sh(5)'] + x**6 * self['TwFAM2Sh(6)'] - Modes[:,2] = x**2 * self['TwSSM1Sh(2)'] + x**3 * self['TwSSM1Sh(3)'] + x**4 * self['TwSSM1Sh(4)'] + x**5 * self['TwSSM1Sh(5)'] + x**6 * self['TwSSM1Sh(6)'] - Modes[:,3] = x**2 * self['TwSSM2Sh(2)'] + x**3 * self['TwSSM2Sh(3)'] + x**4 * self['TwSSM2Sh(4)'] + x**5 * self['TwSSM2Sh(5)'] + x**6 * self['TwSSM2Sh(6)'] - ShapeCols = [c+'_[-]' for c in ['ShapeForeAft1','ShapeForeAft2','ShapeSideSide1','ShapeSideSide2']] - df[ShapeCols]=Modes - return df - - @property - def _IComment(self): return [1] - -# --------------------------------------------------------------------------------} -# --- AeroDyn Blade -# --------------------------------------------------------------------------------{ -class ADBladeFile(FASTInputFileBase): - @classmethod - def from_fast_input_file(cls, parent): - self = cls() - self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='ADBlade') - return self - - def __init__(self, filename=None, **kwargs): - FASTInputFileBase.__init__(self, filename, **kwargs) - if filename is None: - # Define a prototype for this file format - self.addComment('------- AERODYN BLADE DEFINITION INPUT FILE ----------------------------------------------') - self.addComment('Aerodynamic blade definition, written by ADBladeFile') - self.addComment('====== Blade Properties =================================================================') - self.addKeyVal('NumBlNds', 0, 'Number of blade nodes used in the analysis (-)') - self.addTable('BldAeroNodes', np.zeros((0,7)), tabType=1, tabDimVar='NumBlNds', cols=['BlSpn', 'BlCrvAC', 'BlSwpAC', 'BlCrvAng', 'BlTwist', 'BlChord', 'BlAFID'], units=['(m)', '(m)', '(m)', '(deg)', '(deg)', '(m)', '(-)']) - self.module='ADBlade' - - def _writeSanityChecks(self): - """ Sanity checks before write""" - self['NumBlNds']=self['BldAeroNodes'].shape[0] - aeroNodes = self['BldAeroNodes'] - # TODO double check this calculation with gradient - dr = np.gradient(aeroNodes[:,0]) - dx = np.gradient(aeroNodes[:,1]) - crvAng = np.degrees(np.arctan2(dx,dr)) - if np.mean(np.abs(crvAng-aeroNodes[:,3]))>0.1: - print('[WARN] BlCrvAng might not be computed correctly') - - def _toDataFrame(self): - df = FASTInputFileBase._toDataFrame(self) - aeroNodes = self['BldAeroNodes'] - r = aeroNodes[:,0] - chord = aeroNodes[:,5] - twist = aeroNodes[:,4]*np.pi/180 - prebendAC = aeroNodes[:,1] - sweepAC = aeroNodes[:,2] - - # --- IEA 15 - ##'le_location: 'Leading-edge positions from a reference blade axis (usually blade pitch axis). Locations are normalized by the local chord length. Positive in -x direction for airfoil-aligned coordinate system') - ## pitch_axis - ##'1D array of the chordwise position of the pitch axis (0-LE, 1-TE), defined along blade span.') - #grid = [0.0, 0.02040816326530612, 0.04081632653061224, 0.061224489795918366, 0.08163265306122448, 0.1020408163265306, 0.12244897959183673, 0.14285714285714285, 0.16326530612244897, 0.18367346938775508, 0.2040816326530612, 0.22448979591836732, 0.24489795918367346, 0.26530612244897955, 0.2857142857142857, 0.3061224489795918, 0.32653061224489793, 0.3469387755102041, 0.36734693877551017, 0.3877551020408163, 0.4081632653061224, 0.42857142857142855, 0.44897959183673464, 0.4693877551020408, 0.4897959183673469, 0.5102040816326531, 0.5306122448979591, 0.5510204081632653, 0.5714285714285714, 0.5918367346938775, 0.6122448979591836, 0.6326530612244897, 0.6530612244897959, 0.673469387755102, 0.6938775510204082, 0.7142857142857142, 0.7346938775510203, 0.7551020408163265, 0.7755102040816326, 0.7959183673469387, 0.8163265306122448, 0.836734693877551, 0.8571428571428571, 0.8775510204081632, 0.8979591836734693, 0.9183673469387754, 0.9387755102040816, 0.9591836734693877, 0.9795918367346939, 1.0] - #values = [0.5045454545454545, 0.4900186808012221, 0.47270018284548393, 0.4540147730610375, 0.434647782591965, 0.4156278851950606, 0.3979378721273935, 0.38129960745617403, 0.3654920515699109, 0.35160780834472827, 0.34008443128769117, 0.3310670675965599, 0.3241031342163746, 0.3188472934612394, 0.3146895762675238, 0.311488897995355, 0.3088429219529899, 0.3066054031112312, 0.3043613335231313, 0.3018756624023877, 0.2992017656131912, 0.29648581499532917, 0.29397119399704474, 0.2918571873240831, 0.2901098902886204, 0.28880659979944606, 0.28802634398115073, 0.28784151044623507, 0.28794253614539367, 0.28852264941156663, 0.28957685074559625, 0.2911108045758606, 0.2930139151081327, 0.2952412111444283, 0.2977841397364215, 0.300565286724993, 0.3035753776130124, 0.30670446458784534, 0.30988253764299156, 0.3130107259708016, 0.31639042766652853, 0.32021109189825026, 0.32462311714967124, 0.329454188784972, 0.33463306413024474, 0.3401190402144396, 0.3460555975714659, 0.3527211856428439, 0.3600890296396286, 0.36818181818181805] - ##'ref_axis_blade' desc='2D array of the coordinates (x,y,z) of the blade reference axis, defined along blade span. The coordinate system is the one of BeamDyn: it is placed at blade root with x pointing the suction side of the blade, y pointing the trailing edge and z along the blade span. A standard configuration will have negative x values (prebend), if swept positive y values, and positive z values.') - #x_grid = [0.0, 0.02040816326530612, 0.04081632653061224, 0.061224489795918366, 0.08163265306122448, 0.1020408163265306, 0.12244897959183673, 0.14285714285714285, 0.16326530612244897, 0.18367346938775508, 0.2040816326530612, 0.22448979591836732, 0.24489795918367346, 0.26530612244897955, 0.2857142857142857, 0.3061224489795918, 0.32653061224489793, 0.3469387755102041, 0.36734693877551017, 0.3877551020408163, 0.4081632653061224, 0.42857142857142855, 0.44897959183673464, 0.4693877551020408, 0.4897959183673469, 0.5102040816326531, 0.5306122448979591, 0.5510204081632653, 0.5714285714285714, 0.5918367346938775, 0.6122448979591836, 0.6326530612244897, 0.6530612244897959, 0.673469387755102, 0.6938775510204082, 0.7142857142857142, 0.7346938775510203, 0.7551020408163265, 0.7755102040816326, 0.7959183673469387, 0.8163265306122448, 0.836734693877551, 0.8571428571428571, 0.8775510204081632, 0.8979591836734693, 0.9183673469387754, 0.9387755102040816, 0.9591836734693877, 0.9795918367346939, 1.0] - #x_values = [0.0, 0.018400065266506227, 0.04225083661157623, 0.0713435070518306, 0.1036164118664373, 0.13698065932882636, 0.16947761902506267, 0.19850810716711273, 0.22314347791028566, 0.24053558565655847, 0.24886598803245524, 0.2502470372487695, 0.24941257744761433, 0.24756615214432298, 0.24481686563607896, 0.24130290560673967, 0.23698965095246982, 0.23242285078249267, 0.22531163517427788, 0.2110134548882222, 0.18623119147117725, 0.1479307251853749, 0.09847131457569316, 0.04111540547132665, -0.02233952894219675, -0.08884150619038655, -0.15891966620096387, -0.2407441175807782, -0.3366430472730907, -0.44693576549987823, -0.5680658106768092, -0.6975208703059096, -0.8321262196998409, -0.9699653368698024, -1.1090930486685822, -1.255144506570033, -1.4103667735456449, -1.5733007007462756, -1.7434963771088456, -1.9194542609028804, -2.1000907378795275, -2.285501961499942, -2.4756894577736315, -2.6734165188032692, -2.8782701025304545, -3.090085737186208, -3.308459127246535, -3.533712868740941, -3.7641269864926348, -4.0] - #y_grid = [0.0, 1.0] - #y_values = [0.0, 0.0] - #z_grid = [0.0, 0.02040816326530612, 0.04081632653061224, 0.061224489795918366, 0.08163265306122448, 0.1020408163265306, 0.12244897959183673, 0.14285714285714285, 0.16326530612244897, 0.18367346938775508, 0.2040816326530612, 0.22448979591836732, 0.24489795918367346, 0.26530612244897955, 0.2857142857142857, 0.3061224489795918, 0.32653061224489793, 0.3469387755102041, 0.36734693877551017, 0.3877551020408163, 0.4081632653061224, 0.42857142857142855, 0.44897959183673464, 0.4693877551020408, 0.4897959183673469, 0.5102040816326531, 0.5306122448979591, 0.5510204081632653, 0.5714285714285714, 0.5918367346938775, 0.6122448979591836, 0.6326530612244897, 0.6530612244897959, 0.673469387755102, 0.6938775510204082, 0.7142857142857142, 0.7346938775510203, 0.7551020408163265, 0.7755102040816326, 0.7959183673469387, 0.8163265306122448, 0.836734693877551, 0.8571428571428571, 0.8775510204081632, 0.8979591836734693, 0.9183673469387754, 0.9387755102040816, 0.9591836734693877, 0.9795918367346939, 1.0] - #z_values = [0.0, 2.387755102040816, 4.775510204081632, 7.163265306122448, 9.551020408163264, 11.938775510204081, 14.326530612244898, 16.714285714285715, 19.10204081632653, 21.489795918367346, 23.877551020408163, 26.265306122448976, 28.653061224489797, 31.04081632653061, 33.42857142857143, 35.81632653061224, 38.20408163265306, 40.59183673469388, 42.979591836734684, 45.36734693877551, 47.75510204081632, 50.14285714285714, 52.53061224489795, 54.91836734693877, 57.30612244897959, 59.69387755102041, 62.08163265306122, 64.46938775510203, 66.85714285714285, 69.24489795918367, 71.63265306122447, 74.0204081632653, 76.40816326530611, 78.79591836734693, 81.18367346938776, 83.57142857142857, 85.95918367346938, 88.3469387755102, 90.73469387755102, 93.12244897959182, 95.51020408163265, 97.89795918367345, 100.28571428571428, 102.6734693877551, 105.0612244897959, 107.44897959183673, 109.83673469387753, 112.22448979591836, 114.61224489795919, 117.0] - #r_ = [0.0, 0.02, 0.15, 0.245170, 1.0] - #ac = [0.5, 0.5, 0.316, 0.25, 0.25] - #r0 = r/r[-1] - #z = np.interp(r0, z_grid, z_values) - #x = np.interp(r0, x_grid, x_values) - #y = np.interp(r0, y_grid, y_values) - #xp = np.interp(r0, grid, values) - #df['z'] = z - #df['x'] = x - #df['y'] = y - #df['xp'] = xp - #ACloc = np.interp(r0, r_,ac) - - ## Get the absolute offset between pitch axis (rotation center) and aerodynamic center - #ch_offset = inputs['chord'] * (inputs['ac'] - inputs['le_location']) - ## Rotate it by the twist using the AD15 coordinate system - #x , y = util.rotate(0., 0., 0., ch_offset, -np.deg2rad(inputs['theta'])) - ## Apply offset to determine the AC axis - #BlCrvAC = inputs['ref_axis_blade'][:,0] + x - #BlSwpAC = inputs['ref_axis_blade'][:,1] + y - - # --- Adding C2 axis - ACloc = r*0 + 0.25 # distance (in chord) from leading edge to aero center - n=int(len(r)*0.15) # 15% span - ACloc[:n]=np.linspace(0.5,0.25, n) # Root is at 0 - - dx = chord*(0.5-ACloc) * np.sin(twist) # Should be mostly >0 - dy = chord*(0.5-ACloc) * np.cos(twist) # Should be mostly >0 - prebend = prebendAC + dx - sweep = sweepAC + dy - df['c2_Crv_Approx_[m]'] = prebend - df['c2_Swp_Approx_[m]'] = sweep - df['AC_Approx_[-]'] = ACloc - # --- Calc CvrAng - dr = np.gradient(aeroNodes[:,0]) - dx = np.gradient(aeroNodes[:,1]) - df['CrvAng_Calc_[-]'] = np.degrees(np.arctan2(dx,dr)) - return df - - @property - def _IComment(self): return [1] - - -# --------------------------------------------------------------------------------} -# --- AeroDyn Polar -# --------------------------------------------------------------------------------{ -class ADPolarFile(FASTInputFileBase): - @staticmethod - def formatName(): - return 'FAST AeroDyn polar file' - - @classmethod - def from_fast_input_file(cls, parent): - self = cls() - self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='ADPolar') - return self - - def __init__(self, filename=None, hasUA=True, numTabs=1, **kwargs): - FASTInputFileBase.__init__(self, filename, **kwargs) - if filename is None: - # Define a prototype for this file format - self.addComment('! ------------ AirfoilInfo Input File ------------------------------------------') - self.addComment('! Airfoil definition, written by ADPolarFile') - self.addComment('! ') - self.addComment('! ') - self.addComment('! ------------------------------------------------------------------------------') - self.addValKey("DEFAULT", 'InterpOrd' , 'Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=3]') - self.addValKey( 1, 'NonDimArea', 'The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded)') - self.addValKey( 0, 'NumCoords' , 'The number of coordinates in the airfoil shape file. Set to zero if coordinates not included.') - self.addValKey( numTabs , 'NumTabs' , 'Number of airfoil tables in this file. Each table must have lines for Re and Ctrl.') - # TODO multiple tables - for iTab in range(numTabs): - if numTabs==1: - labOffset ='' - else: - labOffset ='_'+str(iTab+1) - self.addComment('! ------------------------------------------------------------------------------') - self.addComment('! data for table {}'.format(iTab+1)) - self.addComment('! ------------------------------------------------------------------------------') - self.addValKey( 1.0 , 'Re' +labOffset , 'Reynolds number in millions') - self.addValKey( 0 , 'Ctrl'+labOffset , 'Control setting') - if hasUA: - self.addValKey(True , 'InclUAdata', 'Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line') - self.addComment('!........................................') - self.addValKey( np.nan , 'alpha0' + labOffset, r"0-lift angle of attack, depends on airfoil.") - self.addValKey( np.nan , 'alpha1' + labOffset, r"Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg)") - self.addValKey( np.nan , 'alpha2' + labOffset, r"Angle of attack at f=0.7, (approximately the stall angle) for AOA1]") - self.addValKey( 0 , 'S2' + labOffset, r"Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1]") - self.addValKey( 0 , 'S3' + labOffset, r"Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1]") - self.addValKey( 0 , 'S4' + labOffset, r"Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1]") - self.addValKey( np.nan , 'Cn1' + labOffset, r"Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers.") - self.addValKey( np.nan , 'Cn2' + labOffset, r"As Cn1 for negative AOAs.") - self.addValKey( "DEFAULT" , 'St_sh' + labOffset, r"Strouhal's shedding frequency constant. [default = 0.19]") - self.addValKey( np.nan , 'Cd0' + labOffset, r"2D drag coefficient value at 0-lift.") - self.addValKey( np.nan , 'Cm0' + labOffset, r"2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0]") - self.addValKey( 0 , 'k0' + labOffset, r"Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1]") - self.addValKey( 0 , 'k1' + labOffset, r"Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1]") - self.addValKey( 0 , 'k2' + labOffset, r"Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1]") - self.addValKey( 0 , 'k3' + labOffset, r"Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1]") - self.addValKey( 0 , 'k1_hat' + labOffset, r"Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1]") - self.addValKey( "DEFAULT" , 'x_cp_bar' + labOffset, r"Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2]") - self.addValKey( "DEFAULT" , 'UACutout' + labOffset, r"Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string 'Default' sets UACutout to 45 degrees]") - self.addValKey( "DEFAULT" , 'filtCutOff'+ labOffset, r"Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5]") - self.addComment('!........................................') - else: - self.addValKey(False , 'InclUAdata'+labOffset, 'Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line') - self.addComment('! Table of aerodynamics coefficients') - self.addValKey(0 , 'NumAlf'+labOffset, '! Number of data lines in the following table') - self.addTable('AFCoeff'+labOffset, np.zeros((0,4)), tabType=2, tabDimVar='NumAlf', cols=['Alpha', 'Cl', 'Cd', 'Cm'], units=['(deg)', '(-)', '(-)', '(-)']) - self.module='ADPolar' - - def _writeSanityChecks(self): - """ Sanity checks before write""" - nTabs = self['NumTabs'] - if nTabs==1: - self['NumAlf']=self['AFCoeff'].shape[0] - else: - for iTab in range(nTabs): - labOffset='_{}'.format(iTab+1) - self['NumAlf'+labOffset] = self['AFCoeff'+labOffset].shape[0] - # Potentially compute unsteady params here - - def _write(self): - nTabs = self['NumTabs'] - if nTabs==1: - FASTInputFileBase._write(self) - else: - self._writeSanityChecks() - Labs=['Re','Ctrl','UserProp','alpha0','alpha1','alpha2','eta_e','C_nalpha','T_f0','T_V0','T_p','T_VL','b1','b2','b5','A1','A2','A5','S1','S2','S3','S4','Cn1','Cn2','St_sh','Cd0','Cm0','k0','k1','k2','k3','k1_hat','x_cp_bar','UACutout','filtCutOff','InclUAdata','NumAlf','AFCoeff'] - # Store all labels - AllLabels=[self.data[i]['label'] for i in range(len(self.data))] - # Removing lab Offset - TODO TEMPORARY HACK - for iTab in range(nTabs): - labOffset='_{}'.format(iTab+1) - for labRaw in Labs: - i = self.getIDSafe(labRaw+labOffset) - if i>0: - self.data[i]['label'] = labRaw - # Write - with open(self.filename,'w') as f: - f.write(self.toString()) - # Restore labels - for i,labFull in enumerate(AllLabels): - self.data[i]['label'] = labFull - - def _toDataFrame(self): - dfs = FASTInputFileBase._toDataFrame(self) - if not isinstance(dfs, dict): - dfs={'AFCoeff':dfs} - - for k,df in dfs.items(): - sp = k.split('_') - if len(sp)==2: - labOffset='_'+sp[1] - else: - labOffset='' - alpha = df['Alpha_[deg]'].values*np.pi/180. - Cl = df['Cl_[-]'].values - Cd = df['Cd_[-]'].values - - # Cn with Cd0 - try: - Cd0 = self['Cd0'+labOffset] - # Cn (with or without Cd0) - Cn1 = Cl*np.cos(alpha)+ (Cd-Cd0)*np.sin(alpha) - df['Cn_Cd0off_[-]'] = Cn1 - except: - pass - - # Regular Cn - Cn = Cl*np.cos(alpha)+ Cd*np.sin(alpha) - df['Cn_[-]'] = Cn - - # Linear Cn - try: - CnLin_ = self['C_nalpha'+labOffset]*(alpha-self['alpha0'+labOffset]*np.pi/180.) - CnLin = CnLin_.copy() - CnLin[alpha<-20*np.pi/180]=np.nan - CnLin[alpha> 30*np.pi/180]=np.nan - df['Cn_pot_[-]'] = CnLin - except: - pass - - # Highlighting points surrounding 0 1 2 Cn points - CnPoints = Cn*np.nan - try: - iBef2 = np.where(alpha0: - if l[0]=='!': - if l.find('!dimension')==0: - self.addKeyVal('nDOF',int(l.split(':')[1])) - nDOFCommon=self['nDOF'] - elif l.find('!time increment')==0: - self.addKeyVal('dt',float(l.split(':')[1])) - elif l.find('!total simulation time')==0: - self.addKeyVal('T',float(l.split(':')[1])) - elif len(l.strip())==0: - pass - else: - raise BrokenFormatError('Unexcepted content found on line {}'.format(i)) - i+=1 - except BrokenFormatError as e: - raise e - except: - raise - - return True - -class ExtPtfmFile(FASTInputFileBase): - @classmethod - def from_fast_input_file(cls, parent): - self = cls() - self.setData(filename=parent.filename, data=parent.data, hasNodal=parent.hasNodal, module='ExtPtfm') - return self - - def __init__(self, filename=None, **kwargs): - FASTInputFileBase.__init__(self, filename, **kwargs) - if filename is None: - # Define a prototype for this file format - self.addValKey(0 , 'nDOF', '') - self.addValKey(1 , 'dt' , '') - self.addValKey(0 , 'T' , '') - self.addTable('MassMatrix' , np.zeros((0,0)), tabType=0) - self.addTable('StiffnessMatrix', np.zeros((0,0)), tabType=0) - self.addTable('DampingMatrix' , np.zeros((0,0)), tabType=0) - self.addTable('Loading' , np.zeros((0,0)), tabType=0) - self.comment='' - self.module='ExtPtfm' - - - def _read(self): - with open(self.filename, 'r', errors="surrogateescape") as f: - lines=f.read().splitlines() - detectAndReadExtPtfmSE(self, lines) - - def toString(self): - s='' - s+='!Comment\n' - s+='!Comment Flex 5 Format\n' - s+='!Dimension: {}\n'.format(self['nDOF']) - s+='!Time increment in simulation: {}\n'.format(self['dt']) - s+='!Total simulation time in file: {}\n'.format(self['T']) - - s+='\n!Mass Matrix\n' - s+='!Dimension: {}\n'.format(self['nDOF']) - s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['MassMatrix']) - - s+='\n\n!Stiffness Matrix\n' - s+='!Dimension: {}\n'.format(self['nDOF']) - s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['StiffnessMatrix']) - - s+='\n\n!Damping Matrix\n' - s+='!Dimension: {}\n'.format(self['nDOF']) - s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['DampingMatrix']) - - s+='\n\n!Loading and Wave Elevation\n' - s+='!Dimension: 1 time column - {} force columns\n'.format(self['nDOF']) - s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['Loading']) - return s - - def _writeSanityChecks(self): - """ Sanity checks before write""" - assert self['MassMatrix'].shape[0] == self['nDOF'] - assert self['StiffnessMatrix'].shape[0] == self['nDOF'] - assert self['DampingMatrix'].shape[0] == self['nDOF'] - assert self['MassMatrix'].shape[0] == self['MassMatrix'].shape[1] - assert self['StiffnessMatrix'].shape[0] == self['StiffnessMatrix'].shape[1] - assert self['DampingMatrix'].shape[0] == self['DampingMatrix'].shape[1] - # if self['T']>0: - # assert self['Loading'].shape[0] == (int(self['T']/self['dT'])+1 - - def _toDataFrame(self): - # Special types, TODO Subclass - nDOF=self['nDOF'] - Cols=['Time_[s]','InpF_Fx_[N]', 'InpF_Fy_[N]', 'InpF_Fz_[N]', 'InpF_Mx_[Nm]', 'InpF_My_[Nm]', 'InpF_Mz_[Nm]'] - Cols+=['CBF_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] - Cols=Cols[:nDOF+1] - #dfs['Loading'] = pd.DataFrame(data = self['Loading'],columns = Cols) - dfs = pd.DataFrame(data = self['Loading'],columns = Cols) - - #Cols=['SurgeAcc_[m/s]', 'SwayAcc_[m/s]', 'HeaveAcc_[m/s]', 'RollAcc_[rad/s]', 'PitchAcc_[rad/s]', 'YawAcc_[rad/s]'] - #Cols+=['CBQD_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] - #Cols=Cols[:nDOF] - #dfs['MassMatrix'] = pd.DataFrame(data = self['MassMatrix'], columns=Cols) - - #Cols=['SurgeVel_[m/s]', 'SwayVel_[m/s]', 'HeaveVel_[m/s]', 'RollVel_[rad/s]', 'PitchVel_[rad/s]', 'YawVel_[rad/s]'] - #Cols+=['CBQD_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] - #Cols=Cols[:nDOF] - #dfs['DampingMatrix'] = pd.DataFrame(data = self['DampingMatrix'], columns=Cols) - - #Cols=['Surge_[m]', 'Sway_[m]', 'Heave_[m]', 'Roll_[rad]', 'Pitch_[rad]', 'Yaw_[rad]'] - #Cols+=['CBQ_{:03d}_[-]'.format(iDOF+1) for iDOF in np.arange(nDOF)] - #Cols=Cols[:nDOF] - #dfs['StiffnessMatrix'] = pd.DataFrame(data = self['StiffnessMatrix'], columns=Cols) - return dfs - - - -if __name__ == "__main__": - f = FASTInputFile('tests/example_files/FASTIn_HD_SeaState.dat') - print(f) - pass - #B=FASTIn('Turbine.outb') - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py deleted file mode 100644 index f38708e5d1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_input_file_graph.py +++ /dev/null @@ -1,352 +0,0 @@ -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt - -# Local -# try: -from pyFAST.input_output.tools.graph import * -# except ImportError: -#from welib.FEM.graph import * - - -# --------------------------------------------------------------------------------} -# --- Wrapper to convert a "fast" input file dictionary into a graph -# --------------------------------------------------------------------------------{ -def fastToGraph(data, **kwargs): - if 'BeamProp' in data.keys(): - return subdynToGraph(data, **kwargs) - - if 'SmplProp' in data.keys(): - return hydrodynToGraph(data, **kwargs) - - if 'DOF2Nodes' in data.keys(): - return subdynSumToGraph(data, **kwargs) - - raise NotImplementedError('Graph for object with keys: {}'.format(data.keys())) - -# --------------------------------------------------------------------------------} -# --- SubDyn -# --------------------------------------------------------------------------------{ -def subdynToGraph(sd, propToNodes=False, propToElem=False): - """ - sd: dict-like object as returned by weio - - -propToNodes: if True, the element properties are also transferred to the nodes for convenience. - NOTE: this is not the default because a same node can have two different diameters in SubDyn (it's by element) - """ - type2Color=[ - (0.1,0.1,0.1), # Watchout based on background - (0.753,0.561,0.05), # 1 Beam - (0.541,0.753,0.05), # 2 Cable - (0.753,0.05,0.204), # 3 Rigid - (0.918,0.702,0.125), # 3 Rigid - ] - - Graph = GraphModel() - # --- Properties - if 'BeamProp' in sd.keys(): - BProps = sd['BeamProp'] - Graph.addNodePropertySet('Beam') - for ip,P in enumerate(BProps): - prop= NodeProperty(ID=P[0], E=P[1], G=P[2], rho=P[3], D=P[4], t=P[5] ) - Graph.addNodeProperty('Beam',prop) - - if 'CableProp' in sd.keys(): - CProps = sd['CableProp'] - Graph.addNodePropertySet('Cable') - for ip,P in enumerate(CProps): - Chan = -1 if len(P)<5 else P[4] - prop= NodeProperty(ID=P[0], EA=P[1], rho=P[2], T0=P[3], Chan=Chan) - Graph.addNodeProperty('Cable',prop) - - if 'RigidProp' in sd.keys(): - RProps = sd['RigidProp'] - Graph.addNodePropertySet('Rigid') - for ip,P in enumerate(RProps): - prop= NodeProperty(ID=P[0], rho=P[1]) - Graph.addNodeProperty('Rigid',prop) - - # --- Nodes and DOFs - Nodes = sd['Joints'] - for iNode,N in enumerate(Nodes): - Type= 1 if len(N)<=4 else N[4] - node = Node(ID=N[0], x=N[1], y=N[2], z=N[3], Type=Type) - Graph.addNode(node) - - # --- Elements - Members = sd['Members'].astype(int) - PropSets = ['Beam','Cable','Rigid'] - for ie,E in enumerate(Members): - Type=1 if len(E)==5 else E[5] - #elem= Element(E[0], E[1:3], propset=PropSets[Type-1], propIDs=E[3:5]) - elem= Element(E[0], E[1:3], Type=PropSets[Type-1], propIDs=E[3:5], propset=PropSets[Type-1]) - elem.data['object']='cylinder' - elem.data['color'] = type2Color[Type] - Graph.addElement(elem) - # Nodal prop data - if propToNodes: - # NOTE: this is disallowed by default because a same node can have two different diameters in SubDyn (it's by element) - Graph.setElementNodalProp(elem, propset=PropSets[Type-1], propIDs=E[3:5]) - if propToElem: - Graph.setElementNodalPropToElem(elem) # TODO, this shouldn't be needed - - # --- Concentrated Masses (in global coordinates), node data - for iC, CM in enumerate(sd['ConcentratedMasses']): - #CMJointID, JMass, JMXX, JMYY, JMZZ, JMXY, JMXZ, JMYZ, MCGX, MCGY, MCGZ - nodeID = CM[0] - n = Graph.getNode(nodeID) - M66 = np.zeros((6,6)) - if len(CM)==11: - m = CM[1] - x, y ,z = (CM[8], CM[9], CM[10]) - Jxx = CM[2]; Jyy = CM[3]; Jzz = CM[4] - Jxy = CM[5]; Jxz = CM[6]; Jyz = CM[7]; - else: - raise NotImplementedError('TODO legacy') - m = CM[1] - Jxx = CM[2]; Jyy = CM[3]; Jzz = CM[4] - Jxy = 0; Jyz =0; Jzz = 0; x,y,z=0,0,0 - M66[0, :] =[ m , 0 , 0 , 0 , z*m , -y*m ] - M66[1, :] =[ 0 , m , 0 , -z*m , 0 , x*m ] - M66[2, :] =[ 0 , 0 , m , y*m , -x*m , 0 ] - M66[3, :] =[ 0 , -z*m , y*m , Jxx + m*(y**2+z**2) , Jxy - m*x*y , Jxz - m*x*z ] - M66[4, :] =[ z*m , 0 , -x*m , Jxy - m*x*y , Jyy + m*(x**2+z**2) , Jyz - m*y*z ] - M66[5, :] =[ -y*m , x*m , 0 , Jxz - m*x*z , Jyz - m*y*z , Jzz + m*(x**2+y**2) ] - n.setData({'addedMassMatrix':M66}) - - # Nodal data - for iN,N in enumerate(sd['InterfaceJoints']): - nodeID = int(N[0]) - Graph.setNodalData(nodeID,IBC=N[1:]) - for iN,N in enumerate(sd['BaseJoints']): - NN=[int(n) if i<7 else n for i,n in enumerate(N)] - nodeID = NN[0] - Graph.setNodalData(nodeID,RBC=NN[1:]) - # print('CMass') - # print(sd['ConcentratedMasses']) - - return Graph - - - - - -# --------------------------------------------------------------------------------} -# --- HydroDyn -# --------------------------------------------------------------------------------{ -def hydrodynToGraph(hd, propToNodes=False, propToElem=False): - """ - hd: dict-like object as returned by weio - - -propToNodes: if True, the element properties are also transferred to the nodes for convenience. - NOTE: this is not the default because a same node can have two different diameters in SubDyn (it's by element) - - - propToElem: This might be due to misunderstanding of graph.. - """ - def type2Color(Pot): - if Pot: - return (0.753,0.05,0.204), # Pot flow - else: - return (0.753,0.561,0.05), # Morison - - - Graph = GraphModel() - - # --- Properties - if 'SectionProp' in hd.keys(): - # NOTE: setting it as element property since two memebrs may connect on the same node with different diameters/thicknesses - Graph.addNodePropertySet('Section') - for ip,P in enumerate(hd['SectionProp']): - # PropSetID PropD PropThck - prop= NodeProperty(ID=P[0], D=P[1], t=P[2]) - Graph.addNodeProperty('Section',prop) - - # --- Hydro Coefs - will be stored in AxCoefs, SimpleCoefs, DepthCoefs, MemberCoefs - if 'AxCoefs' in hd.keys(): - Graph.addNodePropertySet('AxCoefs') - for ip,P in enumerate(hd['AxCoefs']): - prop= NodeProperty(ID=P[0], JAxCd=P[1], JAxCa=P[2], JAxCp=P[3]) - Graph.addNodeProperty('AxCoefs',prop) - if 'SmplProp' in hd.keys(): - Graph.addNodePropertySet('SimpleCoefs') - for ip,P in enumerate(hd['SmplProp']): - # SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCd SimplAxCdMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG - if len(P)==12: - prop= NodeProperty(ID=ip+1, Cd=P[0], CdMG=P[1], Ca=P[2], CaMG=P[3], Cp=P[4], CpMG=P[5], AxCd=P[6], AxCdMG=P[7], AxCa=P[8], AxCaMG=P[9], AxCp=P[10], AxCpMG=P[11]) - elif len(P)==10: - prop= NodeProperty(ID=ip+1, Cd=P[0], CdMG=P[1], Ca=P[2], CaMG=P[3], Cp=P[4], CpMG=P[5], AxCa=P[6], AxCaMG=P[7], AxCp=P[8], AxCpMG=P[9]) - else: - raise NotImplementedError() - Graph.addNodeProperty('SimpleCoefs',prop) - if 'DpthProp' in hd.keys(): - Graph.addMiscPropertySet('DepthCoefs') - for ip,P in enumerate(hd['DpthProp']): - # Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCd DpthAxCdMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG - prop= Property(ID=ip+1, Dpth=P[0], Cd=P[1], CdMG=P[2], Ca=P[3], CaMG=P[4], Cp=P[5], CpMG=P[6], AxCd=P[7], AxCdMG=P[8], AxCa=P[9], AxCaMG=P[10], AxCp=P[11], AxCpMG=P[12]) - Graph.addMiscProperty('DepthCoefs',prop) - - if 'MemberProp' in hd.keys(): - # Member-based hydro coefficinet - Graph.addMiscPropertySet('MemberCoefs') - for ip,P in enumerate(hd['MemberProp']): - # MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCd1 MemberAxCd2 MemberAxCdMG1 MemberAxCdMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 - prop = ElemProperty(ID=ip+1, MemberID=P[0], Cd1=P[1], Cd2=P[2], CdMG1=P[3], CdMG2=P[4], Ca1=P[5], Ca2=P[6], CaMG1=P[7], CaMG2=P[8], Cp1=P[9], Cp2=P[10], CpMG1=P[11], CpMG2=P[12], AxCd1=P[14], AxCd2=P[15], axCdMG1=P[16], axCdMG2=P[17], AxCa1=P[18], AxCa2=P[19], AxCaMG1=P[20], AxCaMG2=P[21], AxCp1=P[22], AxCp2=P[23]) - Graph.addMiscProperty('MemberCoefs',prop) - # --- - if 'FillGroups' in hd.keys(): - # Filled members - Graph.addMiscPropertySet('FillGroups') - print('>>> TODO Filled Groups') - #for ip,P in enumerate(hd['FillGroups']): - # # FillNumM FillMList FillFSLoc FillDens - # raise NotImplementedError('hydroDynToGraph, Fill List might not be properly set, verify below') - # prop = MiscProperty(ID=ip+1, FillNumM=P[0], FillMList=P[1], FillFSLoc=P[2], FillDens=P[3]) - # Graph.addMiscProperty('FillGroups',prop) - - if 'MGProp' in hd.keys(): - # Marine Growth - Graph.addMiscPropertySet('MG') - for ip,P in enumerate(hd['MGProp']): - # MGDpth MGThck MGDens - # (m) (m) (kg/m^3) - prop = Property(ID=ip+1, MGDpth=P[0], MGThck=P[1], MGDens=P[2]) - Graph.addMiscProperty('FillGroups',prop) - - # --- Nodes - Nodes = hd['Joints'] - for iNode,N in enumerate(Nodes): - node = Node(ID=N[0], x=N[1], y=N[2], z=N[3]) - Graph.addNode(node) - Graph.setNodeNodalProp(node, 'AxCoefs', N[4]) - - # --- Elements - PropSets=['SimpleCoefs','DepthCoefs','MemberCoefs'] - Members = hd['Members'] - for ie,E in enumerate(Members): - # MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod PropPot - EE = E[:5].astype(int) - Type = int(E[6]) # MCoefMod - Pot = E[7].lower()[0]=='t' - elem= Element(ID=EE[0], nodeIDs=EE[1:3], propIDs=EE[3:5], propset='Section', CoefMod=PropSets[Type-1], DivSize=float(E[5]), Pot=Pot) - elem.data['object']='cylinder' - elem.data['color'] = type2Color(Pot) - Graph.addElement(elem) - # Nodal prop data NOTE: can't do that anymore for memebrs with different diameters at the same node - if propToNodes: - # NOTE: not by default because of feature with members with different diameters at the same node - Graph.setElementNodalProp(elem, propset='Section', propIDs=EE[3:5]) - if propToElem: - Graph.setElementNodalPropToElem(elem) # TODO, this shouldn't be needed - - if Type==1: - # Simple - Graph.setElementNodalProp(elem, propset='SimpleCoefs', propIDs=[1,1]) - else: - print('>>> TODO type DepthCoefs and MemberCoefs') - # NOTE: this is disallowed by default because a same node can have two different diameters in SubDyn (it's by element) - #Graph.setElementNodalProp(elem, propset=PropSets[Type-1], propIDs=E[3:5]) - - return Graph - - -# --------------------------------------------------------------------------------} -# --- SubDyn Summary file -# --------------------------------------------------------------------------------{ -def subdynSumToGraph(data, Graph=None): - """ - data: dict-like object as returned by weio - """ - type2Color=[ - (0.1,0.1,0.1), # Watchout based on background - (0.753,0.561,0.05), # 1 Beam - (0.541,0.753,0.05), # 2 Cable - (0.753,0.05,0.204), # 3 Rigid - (0.918,0.702,0.125), # 3 Rigid - ] - - #print(data.keys()) - DOF2Nodes = data['DOF2Nodes'] - nDOF = data['nDOF_red'] - - if Graph is None: - Graph = GraphModel() - - # --- Nodes and DOFs - Nodes = data['Nodes'] - for iNode,N in enumerate(Nodes): - if len(N)==9: # Temporary fix - #N[4]=np.float(N[4].split()[0]) - N=N.astype(np.float32) - ID = int(N[0]) - nodeDOFs=DOF2Nodes[(DOF2Nodes[:,1]==ID),0] # NOTE: these were reindex to start at 0 - node = Node(ID=ID, x=N[1], y=N[2], z=N[3], Type=int(N[4]), DOFs=nodeDOFs) - Graph.addNode(node) - - # --- Elements - Elements = data['Elements'] - for ie,E in enumerate(Elements): - nodeIDs=[int(E[1]),int(E[2])] - # shear_[-] Ixx_[m^4] Iyy_[m^4] Jzz_[m^4] T0_[N] - D = np.sqrt(E[7]/np.pi)*4 # <<< Approximation basedon area TODO use I as well - elem= Element(int(E[0]), nodeIDs, Type=int(E[5]), Area=E[7], rho=E[8], E=E[7], G=E[8], D=D) - elem.data['object']='cylinder' - elem.data['color'] = type2Color[int(E[5])] - Graph.addElement(elem) - - #print(self.extent) - #print(self.maxDimension) - - # --- Graph Modes - # Very important sortDims should be None to respect order of nodes - dispGy, posGy, InodesGy, dispCB, posCB, InodesCB = data.getModes(sortDim=None) - for iMode in range(dispGy.shape[2]): - Graph.addMode(displ=dispGy[:,:,iMode],name='GY{:d}'.format(iMode+1), freq=1/(2*np.pi)) - - for iMode in range(dispCB.shape[2]): - Graph.addMode(displ=dispCB[:,:,iMode],name='CB{:d}'.format(iMode+1), freq=data['CB_frequencies'][iMode]) - - #print(Graph.toJSON()) - - - return Graph - - - -if __name__ == '__main__': - from .fast_input_file import FASTInputFile - - filename='../../_data/Monopile/MT100_SD.dat' - # filename='../../_data/Monopile/TetraSpar_SubDyn_v3.dat' - - sd = FASTInputFile(filename) -# sd.write('OutMT.dat') - Graph = sd.toGraph() - Graph.divideElements(2) - print(Graph) - print(Graph.sortNodesBy('z')) - # print(Graph.nodalDataFrame(sortBy='z')) - print(Graph.points) - print(Graph.connectivity) - print(Graph) - -# import numpy as np -# import matplotlib.pyplot as plt -# from matplotlib import collections as mc -# from mpl_toolkits.mplot3d import Axes3D -# fig = plt.figure() -# ax = fig.add_subplot(1,2,1,projection='3d') -# -# lines=Graph.toLines(output='coord') -# for l in lines: -# # ax.add_line(l) -# ax.plot(l[:,0],l[:,1],l[:,2]) -# -# ax.autoscale() -# ax.set_xlim([-40,40]) -# ax.set_ylim([-40,40]) -# ax.set_zlim([-40,40]) -# # ax.margins(0.1) -# -# plt.show() - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py deleted file mode 100644 index e8a13f9269..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_linearization_file.py +++ /dev/null @@ -1,615 +0,0 @@ -import os -import numpy as np -import re -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class BrokenFormatError(Exception): pass - -class SlowReaderNeededError(Exception): - pass - - -_lin_vec = ['x','xd','xdot','u','y','z','header'] -_lin_mat = ['A','B','C','D','dUdu','dUdy', 'StateRotation', 'M'] -_lin_dict = ['x_info','xdot_info','u_info','y_info'] - -class FASTLinearizationFile(File): - """ - Read/write an OpenFAST linearization file. The object behaves like a dictionary. - - Main keys - --------- - - 'x', 'xdot', 'xd', 'u', 'y', 'z', 'A', 'B', 'C', 'D' - - Main methods - ------------ - - read, write, toDataFrame, keys, xdescr, ydescr, udescr - - Examples - -------- - - f = FASTLinearizationFile('5MW.1.lin') - print(f.keys()) - print(f['u']) # input operating point - print(f.udescr()) # description of inputs - - # use a dataframe with "named" columns and rows - df = f.toDataFrame() - print(df['A'].columns) - print(df['A']) - - """ - @staticmethod - def defaultExtensions(): - return ['.lin'] - - @staticmethod - def formatName(): - return 'FAST linearization output' - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, starSub=None, removeStatesPattern=None): - """ Reads the file self.filename, or `filename` if provided - - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - - removeStatesPattern: if None, do nothing - otherwise search for states matching a pattern and remove them - e.g: 'tower|Drivetrain' or '^AD' - see removeStates in this file. - """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - # --- Main Data - self['header']=[] - - # --- StarValues replacement `*****` -> inf - starPattern = re.compile(r"[\*]+") - starSubStr = ' inf ' - starSubFn = lambda si: starPattern.sub(starSubStr, si) - - # Reading function, with slow or fast reader. See sub functions at end of this file - def doRead(slowReader=False): - with open(self.filename, 'r', errors="surrogateescape") as f: - # --- Reader header - self['header'], lastLine=readToMarker(f, 'Jacobians included', 30) - self['header'].append(lastLine) - nx = extractVal(self['header'],'Number of continuous states:' , dtype=int, NA=np.nan, missing=None) - nxd = extractVal(self['header'],'Number of discrete states:' , dtype=int, NA=np.nan, missing=None) - nz = extractVal(self['header'],'Number of constraint states:' , dtype=int, NA=np.nan, missing=None) - nu = extractVal(self['header'],'Number of inputs:' , dtype=int, NA=np.nan, missing=None) - ny = extractVal(self['header'],'Number of outputs:' , dtype=int, NA=np.nan, missing=None) - bJac = extractVal(self['header'],'Jacobians included in this file?', dtype=bool, NA=False, missing=None) - self['Azimuth'] = extractVal(self['header'], 'Azimuth:' , dtype=float, NA=np.nan, missing=None) - self['RotSpeed'] = extractVal(self['header'], 'Rotor Speed:', dtype=float, NA=np.nan, missing=None) # rad/s - self['WindSpeed'] = extractVal(self['header'], 'Wind Speed:' , dtype=float, NA=np.nan, missing=None) - self['t'] = extractVal(self['header'],'Simulation time:' , dtype=float, NA=np.nan, missing=None) - for i, line in enumerate(f): - line = line.strip() - if line.find('Order of continuous states:')>=0: - self['x'], self['x_info'] = readOP(f, nx, 'x', defaultDerivOrder=1, starSubFn=starSubFn, starSub=starSub) - elif line.find('Order of continuous state derivatives:')>=0: - self['xdot'], self['xdot_info'] = readOP(f, nx, 'xdot', defaultDerivOrder=2, starSubFn=starSubFn, starSub=starSub) - elif line.find('Order of discrete states:')>=0: - self['xd'], self['xd_info'] = readOP(f, nxd, 'xd', defaultDerivOrder=2, starSubFn=starSubFn, starSub=starSub) - elif line.find('Order of inputs')>=0: - self['u'], self['u_info'] = readOP(f, nu, 'u', defaultDerivOrder=0, starSubFn=starSubFn, starSub=starSub) - elif line.find('Order of outputs')>=0: - self['y'], self['y_info'] = readOP(f, ny, 'y', defaultDerivOrder=0, starSubFn=starSubFn, starSub=starSub) - elif line.find('Order of constraint states:')>=0: - self['z'], self['z_info'] = readOP(f, nz, 'z', defaultDerivOrder=0, starSubFn=starSubFn, starSub=starSub) - elif line.find('A:')>=0: - self['A'] = readMat(f, nx, nx, 'A', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - elif line.find('B:')>=0: - self['B'] = readMat(f, nx, nu, 'B', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - elif line.find('C:')>=0: - self['C'] = readMat(f, ny, nx, 'C', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - elif line.find('D:')>=0: - self['D'] = readMat(f, ny, nu, 'D', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - elif line.find('dUdu:')>=0: - self['dUdu'] = readMat(f, nu, nu,'dUdu', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - elif line.find('dUdy:')>=0: - self['dUdy'] = readMat(f, nu, ny,'dUdy', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - elif line.find('StateRotation:')>=0: - pass - # TODO - #StateRotation: - elif line.find('ED M:')>=0: - self['EDDOF'] = line[5:].split() - self['M'] = readMat(f, 24, 24,'M', slowReader=slowReader, filename=self.filename, starSubFn=starSubFn, starSub=starSub) - try: - doRead(slowReader=False) - except SlowReaderNeededError: - doRead(slowReader=True) - - if removeStatesPattern is not None: - self.removeStates(pattern=removeStatesPattern) - - def toString(self): - s='' - return s - - def _write(self): - with open(self.filename,'w') as f: - f.write(self.toString()) - - @property - def nx(self): - if 'x' in self.keys(): - return len(self['x']) - return 0 - - @property - def nxd(self): - if 'xd' in self.keys(): - return len(self['xd']) - return 0 - - @property - def nu(self): - if 'u' in self.keys(): - return len(self['u']) - return 0 - - @property - def ny(self): - if 'y' in self.keys(): - return len(self['y']) - return 0 - - @property - def nz(self): - if 'z' in self.keys(): - return len(self['z']) - return 0 - - @property - def u_descr(self): - if self.nu>0: - return self['u_info']['Description'] - else: - return [] - - @property - def x_descr(self): - if self.nx>0: - return self['x_info']['Description'] - else: - return [] - - @property - def xd_descr(self): # Discrete states not derivative! - if self.nxd>0: - return self['xd_info']['Description'] - else: - return [] - - @property - def xdot_descr(self): - if self.nx>0: - return self['xdot_info']['Description'] - else: - return [] - - @property - def y_descr(self): - if self.ny>0: - return self['y_info']['Description'] - else: - return [] - - @property - def z_descr(self): - if self.nz>0: - return self['z_info']['Description'] - else: - return [] - - def __repr__(self): - s='<{} object> with attributes:\n'.format(type(self).__name__) - s+=' - filename: {}\n'.format(self.filename) - s+=' * nx : {}\n'.format(self.nx) - s+=' * nxd : {}\n'.format(self.nxd) - s+=' * nu : {}\n'.format(self.nu) - s+=' * ny : {}\n'.format(self.ny) - s+=' * nz : {}\n'.format(self.nz) - s+='keys:\n' - for k,v in self.items(): - if k in _lin_vec: - s+=' - {:15s}: shape: ({}) \n'.format(k,len(v)) - elif k in _lin_mat: - s+=' - {:15s}: shape: ({} x {})\n'.format(k,v.shape[0], v.shape[1]) - elif k in _lin_dict: - s+=' - {:15s}: dict with keys: {} \n'.format(k,list(v.keys())) - else: - s+=' - {:15s}: {}\n'.format(k,v) - s+='methods:\n' - s+=' - toDataFrame: convert A,B,C,D to dataframes\n' - s+=' - removeStates: remove states\n' - s+=' - eva: eigenvalue analysis\n' - - return s - - def toDataFrame(self): - import pandas as pd - dfs={} - - xdescr_short = short_descr(self.x_descr) - xddescr_short = short_descr(self.xd_descr) - xdotdescr_short = short_descr(self.xdot_descr) - udescr_short = short_descr(self.u_descr) - ydescr_short = short_descr(self.y_descr) - zdescr_short = short_descr(self.z_descr) - - if 'A' in self.keys(): - dfs['A'] = pd.DataFrame(data = self['A'], index=xdescr_short, columns=xdescr_short) - if 'B' in self.keys(): - dfs['B'] = pd.DataFrame(data = self['B'], index=xdescr_short, columns=udescr_short) - if 'C' in self.keys(): - dfs['C'] = pd.DataFrame(data = self['C'], index=ydescr_short, columns=xdescr_short) - if 'D' in self.keys(): - dfs['D'] = pd.DataFrame(data = self['D'], index=ydescr_short, columns=udescr_short) - if 'x' in self.keys(): - dfs['x'] = pd.DataFrame(data = np.asarray(self['x']).reshape((1,-1)), columns=xdescr_short) - if 'xd' in self.keys(): - dfs['xd'] = pd.DataFrame(data = np.asarray(self['xd']).reshape((1,-1))) - if 'xdot' in self.keys(): - dfs['xdot'] = pd.DataFrame(data = np.asarray(self['xdot']).reshape((1,-1)), columns=xdotdescr_short) - if 'u' in self.keys(): - dfs['u'] = pd.DataFrame(data = np.asarray(self['u']).reshape((1,-1)), columns=udescr_short) - if 'y' in self.keys(): - dfs['y'] = pd.DataFrame(data = np.asarray(self['y']).reshape((1,-1)), columns=ydescr_short) - if 'z' in self.keys(): - dfs['z'] = pd.DataFrame(data = np.asarray(self['z']).reshape((1,-1)), columns=zdescr_short) - if 'M' in self.keys(): - dfs['M'] = pd.DataFrame(data = self['M'], index=self['EDDOF'], columns=self['EDDOF']) - if 'dUdu' in self.keys(): - dfs['dUdu'] = pd.DataFrame(data = self['dUdu'], index=udescr_short, columns=udescr_short) - if 'dUdy' in self.keys(): - dfs['dUdy'] = pd.DataFrame(data = self['dUdy'], index=udescr_short, columns=ydescr_short) - - return dfs - - def removeStates(self, pattern=None, Irm=None, verbose=True): - """ - remove states based on pattern or index - - - pattern: e.g: 'tower|Drivetrain' or '^AD' - """ - if self.nx==0: - return - desc = self['x_info']['Description'] - Iall = set(range(len(desc))) - sInfo='' - if pattern is not None: - Irm = [i for i, s in enumerate(desc) if re.search(pattern, s)] - sInfo=' with pattern `{}`'.format(pattern) - if verbose: - print('[INFO] removing {}/{} states{}'.format(len(Irm), len(Iall), sInfo)) - Ikeep = list(Iall.difference(Irm)) - Ikeep.sort() # safety - if len(Ikeep)==0: - raise Exception('All states have been removed{}!'.format(sInfo)) - # Remove states and info in vectors - self['x'] = self['x'][Ikeep] - self['xdot'] = self['xdot'][Ikeep] - for k in self['x_info'].keys(): - self['x_info'][k] = self['x_info'][k][Ikeep] - self['xdot_info'][k] = self['xdot_info'][k][Ikeep] - # Remove states in matrices - if 'A' in self.keys(): - self['A'] = self['A'][np.ix_(Ikeep,Ikeep)] - if 'B' in self.keys(): - self['B'] = self['B'][Ikeep,:] - if 'C' in self.keys(): - self['C'] = self['C'][:, Ikeep] - - - def eva(self, normQ=None, sort=True, discardIm=True): - """ Perform eigenvalue analysis of A matrix and return frequencies and damping """ - # --- Excerpt from welib.tools.eva.eigA - A = self['A'] - n,m = A.shape - if m!=n: - raise Exception('Matrix needs to be square') - # Basic EVA - D,Q = np.linalg.eig(A) - Lambda = np.diag(D) - v = np.diag(Lambda) - - # Selecting eigenvalues with positive imaginary part (frequency) - if discardIm: - Ipos = np.imag(v)>0 - Q = Q[:,Ipos] - v = v[Ipos] - - # Frequencies and damping based on compled eigenvalues - omega_0 = np.abs(v) # natural cylic frequency [rad/s] - freq_d = np.imag(v)/(2*np.pi) # damped frequency [Hz] - zeta = - np.real(v)/omega_0 # damping ratio - freq_0 = omega_0/(2*np.pi) # natural frequency [Hz] - # Sorting - if sort: - I = np.argsort(freq_0) - freq_d = freq_d[I] - freq_0 = freq_0[I] - zeta = zeta[I] - Q = Q[:,I] - - # Normalize Q - if normQ=='byMax': - for j in range(Q.shape[1]): - q_j = Q[:,j] - scale = np.max(np.abs(q_j)) - Q[:,j]= Q[:,j]/scale - return freq_d, zeta, Q, freq_0 - - -def short_descr(slist): - """ Shorten and "unify" the description from lin file """ - def shortname(s): - s=s.strip() - s = s.replace('(m/s)' , '_[m/s]' ); - s = s.replace('(kW)' , '_[kW]' ); - s = s.replace('(deg)' , '_[deg]' ); - s = s.replace('(N)' , '_[N]' ); - s = s.replace('(kN-m)' , '_[kNm]' ); - s = s.replace('(N-m)' , '_[Nm]' ); - s = s.replace('(kN)' , '_[kN]' ); - s = s.replace('(rpm)' , '_[rpm]' ); - s = s.replace('(rad)' , '_[rad]' ); - s = s.replace('(rad/s)' , '_[rad/s]' ); - s = s.replace('(rad/s^2)', '_[rad/s^2]' ); - s = s.replace('(m/s^2)' , '_[m/s^2]'); - s = s.replace('(deg/s^2)','_[deg/s^2]'); - s = s.replace('(m)' , '_[m]' ); - s = s.replace(', m/s/s','_[m/s^2]'); - s = s.replace(', m/s^2','_[m/s^2]'); - s = s.replace(', m/s','_[m/s]'); - s = s.replace(', m','_[m]'); - s = s.replace(', rad/s/s','_[rad/s^2]'); - s = s.replace(', rad/s^2','_[rad/s^2]'); - s = s.replace(', rad/s','_[rad/s]'); - s = s.replace(', rad','_[rad]'); - s = s.replace(', -','_[-]'); - s = s.replace(', Nm/m','_[Nm/m]'); - s = s.replace(', Nm','_[Nm]'); - s = s.replace(', N/m','_[N/m]'); - s = s.replace(', N','_[N]'); - s = s.replace('(1)','1') - s = s.replace('(2)','2') - s = s.replace('(3)','3') - s= re.sub(r'\([^)]*\)','', s) # remove parenthesis - s = s.replace('ED ',''); - s = s.replace('BD_','BD_B'); - s = s.replace('IfW ',''); - s = s.replace('Extended input: ','') - s = s.replace('1st tower ','qt1'); - s = s.replace('2nd tower ','qt2'); - nd = s.count('First time derivative of ') - if nd>=0: - s = s.replace('First time derivative of ' ,''); - if nd==1: - s = 'd_'+s.strip() - elif nd==2: - s = 'dd_'+s.strip() - s = s.replace('Variable speed generator DOF ','psi_rot'); # NOTE: internally in FAST this is the azimuth of the rotor - s = s.replace('fore-aft bending mode DOF ' ,'FA' ); - s = s.replace('side-to-side bending mode DOF','SS' ); - s = s.replace('bending-mode DOF of blade ' ,'' ); - s = s.replace(' rotational-flexibility DOF, rad','-ROT' ); - s = s.replace('rotational displacement in ','rot' ); - s = s.replace('Drivetrain','DT' ); - s = s.replace('translational displacement in ','trans' ); - s = s.replace('finite element node ','N' ); - s = s.replace('-component position of node ','posN') - s = s.replace('-component inflow on tower node','TwrN') - s = s.replace('-component inflow on blade 1, node','Bld1N') - s = s.replace('-component inflow on blade 2, node','Bld2N') - s = s.replace('-component inflow on blade 3, node','Bld3N') - s = s.replace('-component inflow velocity at node','N') - s = s.replace('X translation displacement, node','TxN') - s = s.replace('Y translation displacement, node','TyN') - s = s.replace('Z translation displacement, node','TzN') - s = s.replace('X translation velocity, node','TVxN') - s = s.replace('Y translation velocity, node','TVyN') - s = s.replace('Z translation velocity, node','TVzN') - s = s.replace('X translation acceleration, node','TAxN') - s = s.replace('Y translation acceleration, node','TAyN') - s = s.replace('Z translation acceleration, node','TAzN') - s = s.replace('X orientation angle, node' ,'RxN') - s = s.replace('Y orientation angle, node' ,'RyN') - s = s.replace('Z orientation angle, node' ,'RzN') - s = s.replace('X rotation velocity, node' ,'RVxN') - s = s.replace('Y rotation velocity, node' ,'RVyN') - s = s.replace('Z rotation velocity, node' ,'RVzN') - s = s.replace('X rotation acceleration, node' ,'RAxN') - s = s.replace('Y rotation acceleration, node' ,'RAyN') - s = s.replace('Z rotation acceleration, node' ,'RAzN') - s = s.replace('X force, node','FxN') - s = s.replace('Y force, node','FyN') - s = s.replace('Z force, node','FzN') - s = s.replace('X moment, node','MxN') - s = s.replace('Y moment, node','MyN') - s = s.replace('Z moment, node','MzN') - s = s.replace('FX', 'Fx') - s = s.replace('FY', 'Fy') - s = s.replace('FZ', 'Fz') - s = s.replace('MX', 'Mx') - s = s.replace('MY', 'My') - s = s.replace('MZ', 'Mz') - s = s.replace('FKX', 'FKx') - s = s.replace('FKY', 'FKy') - s = s.replace('FKZ', 'FKz') - s = s.replace('MKX', 'MKx') - s = s.replace('MKY', 'MKy') - s = s.replace('MKZ', 'MKz') - s = s.replace('Nodes motion','') - s = s.replace('cosine','cos' ); - s = s.replace('sine','sin' ); - s = s.replace('collective','coll.'); - s = s.replace('Blade','Bld'); - s = s.replace('rotZ','TORS-R'); - s = s.replace('transX','FLAP-D'); - s = s.replace('transY','EDGE-D'); - s = s.replace('rotX','EDGE-R'); - s = s.replace('rotY','FLAP-R'); - s = s.replace('flapwise','FLAP'); - s = s.replace('edgewise','EDGE'); - s = s.replace('horizontal surge translation DOF','Surge'); - s = s.replace('horizontal sway translation DOF','Sway'); - s = s.replace('vertical heave translation DOF','Heave'); - s = s.replace('roll tilt rotation DOF','Roll'); - s = s.replace('pitch tilt rotation DOF','Pitch'); - s = s.replace('yaw rotation DOF','Yaw'); - s = s.replace('vertical power-law shear exponent','alpha') - s = s.replace('horizontal wind speed ','WS') - s = s.replace('propagation direction','WD') - s = s.replace(' pitch command','pitch') - s = s.replace('HSS_','HSS') - s = s.replace('Bld','B') - s = s.replace('tower','Twr') - s = s.replace('Tower','Twr') - s = s.replace('Nacelle','Nac') - s = s.replace('Platform','Ptfm') - s = s.replace('SrvD','SvD') - s = s.replace('Generator torque','Qgen') - s = s.replace('coll. blade-pitch command','PitchColl') - s = s.replace('wave elevation at platform ref point','WaveElevRefPoint') - s = s.replace('1)','1'); - s = s.replace('2)','2'); - s = s.replace('3)','3'); - s = s.replace(',',''); - s = s.replace(' ',''); - s=s.strip() - return s - return [shortname(s) for s in slist] - - - -def extractVal(lines, key, NA=None, missing=None, dtype=float): - for l in lines: - if l.find(key)>=0: - #l = starPattern.sub(starSubStr, l) - try: - return dtype(l.split(key)[1].split()[0]) - except: - return NA - return missing - -def readToMarker(fid, marker, nMax): - lines=[] - for i, line in enumerate(fid): - if i>nMax: - raise BrokenFormatError('`{}` not found in file'.format(marker)) - if line.find(marker)>=0: - break - lines.append(line.strip()) - return lines, line - -def readOP(fid, n, name='', defaultDerivOrder=1, filename='', starSubFn=None, starSub=None): - OP=[] - Var = {'RotatingFrame': [], 'DerivativeOrder': [], 'Description': []} - colNames=fid.readline().strip() - dummy= fid.readline().strip() - bHasDeriv= colNames.find('Derivative Order')>=0 - for i, line in enumerate(fid): - line = line.strip() - line = starSubFn(line) - sp = line.split() - if sp[1].find(',')>=0: - # Most likely this OP has three values (e.g. orientation angles) - # For now we discard the two other values - OP.append(float(sp[1][:-1])) - iRot=4 - else: - OP.append(float(sp[1])) - iRot=2 - Var['RotatingFrame'].append(sp[iRot]) - if bHasDeriv: - Var['DerivativeOrder'].append(int(sp[iRot+1])) - Var['Description'].append(' '.join(sp[iRot+2:]).strip()) - else: - Var['DerivativeOrder'].append(defaultDerivOrder) - Var['Description'].append(' '.join(sp[iRot+1:]).strip()) - if i>=n-1: - break - OP = np.asarray(OP) - nInf = np.sum(np.isinf(OP)) - if nInf>0: - sErr = 'Some ill-formated/infinite values (e.g. `*******`) were found in the vector `{}`\n\tin linflile: {}'.format(name, filename) - if starSub is None: - raise Exception(sErr) - else: - print('[WARN] '+sErr) - OP[np.isinf(OP)] = starSub - - Var['RotatingFrame'] = np.asarray(Var['RotatingFrame']) - Var['DerivativeOrder'] = np.asarray(Var['DerivativeOrder']) - Var['Description'] = np.asarray(Var['Description']) - return OP, Var - - - -def readMat(fid, n, m, name='', slowReader=False, filename='', starSubFn=None, starSub=None): - if not slowReader: - try: - return np.array([fid.readline().strip().split() for i in np.arange(n)],dtype=float) - except: - print('[INFO] Failed to read some value in matrix {}, trying slower reader'.format(name)) - raise SlowReaderNeededError() - else: - #vals = vals.ravel() - #vals = np.array(list(map(starSubFn, vals))).reshape(n,m) - vals=np.array([starSubFn( fid.readline().strip() ).split() for i in np.arange(n)], dtype=str) - try: - vals = vals.astype(float) # This could potentially fail - except: - raise Exception('Failed to convert into an array of float the matrix `{}`\n\tin linfile: {}'.format(name, filename)) - if vals.shape[0]!=n or vals.shape[1]!=m: - shape1 = vals.shape - shape2 = (n,m) - raise Exception('Shape of matrix `{}` has wrong dimension ({} instead of {})\n\tin linfile: {}'.format(name, shape1, shape2, name, filename)) - - nNaN = np.sum(np.isnan(vals.ravel())) - nInf = np.sum(np.isinf(vals.ravel())) - if nInf>0: - sErr = 'Some ill-formated/infinite values (e.g. `*******`) were found in the matrix `{}`\n\tin linflile: {}'.format(name, filename) - if starSub is None: - raise Exception(sErr) - else: - print('[WARN] '+sErr) - vals[np.isinf(vals)] = starSub - if nNaN>0: - raise Exception('Some NaN values were found in the matrix `{}`\n\tin linfile: `{}`.'.format(name, filename)) - return vals - -if __name__ == '__main__': - f = FASTLinearizationFile('../../data/example_files/StandstillSemi_ForID_EDHD.1.lin') - print(f) - _, zeta1, _, freq1 = f.eva() - f.removeStates(pattern=r'^AD') - print(f) - dfs = f.toDataFrame() - _, zeta2, _, freq2 = f.eva() - print('f',freq1) - print('f',freq2) - print('d',zeta1) - print('d',zeta2) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py deleted file mode 100644 index df03aac3d8..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_output_file.py +++ /dev/null @@ -1,651 +0,0 @@ -""" -Tools to read/write OpenFAST output files - -Main content: - -- class FASTOutputFile() -- data, info = def load_output(filename) -- data, info = def load_ascii_output(filename) -- data, info = def load_binary_output(filename, use_buffer=True) -- def writeDataFrame(df, filename, binary=True) -- def writeBinary(fileName, channels, chanNames, chanUnits, fileID=2, descStr='') - -NOTE: - - load_binary and writeBinary are not "fully reversible" for now. - Some small numerical errors are introduced in the conversion. - Some of the error is likely due to the fact that Python converts to "int" and "float" (double). - Maybe all the operations should be done in single. I tried but failed. - I simply wonder if the operation is perfectly reversible. - - -""" -from itertools import takewhile -import numpy as np -import pandas as pd -import struct -import ctypes -import os -import re -try: - from .file import File, WrongFormatError, BrokenReaderError, EmptyFileError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class WrongReaderError(Exception): pass - class BrokenFormatError(Exception): pass - class EmptyFileError(Exception): pass -try: - from .csv_file import CSVFile -except: - print('CSVFile not available') - - - -FileFmtID_WithTime = 1 # File identifiers used in FAST -FileFmtID_WithoutTime = 2 -FileFmtID_NoCompressWithoutTime = 3 -FileFmtID_ChanLen_In = 4 # Channel length included in file - - -# --------------------------------------------------------------------------------} -# --- OUT FILE -# --------------------------------------------------------------------------------{ -class FASTOutputFile(File): - """ - Read an OpenFAST ouput file (.out, .outb, .elev). - - Main methods - ------------ - - read, write, toDataFrame - - Examples - -------- - - # read an output file, convert it to pandas dataframe, modify it, write it back - f = FASTOutputFile('5MW.outb') - df=f.toDataFrame() - time = df['Time_[s]'] - Omega = df['RotSpeed_[rpm]'] - df['Time_[s]'] -=100 - f.writeDataFrame(df, '5MW_TimeShifted.outb') - - """ - - @staticmethod - def defaultExtensions(): - return ['.out','.outb','.elm','.elev','.dbg','.dbg2'] - - @staticmethod - def formatName(): - return 'FAST output file' - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # --- Calling (children) function to read - self._read(**kwargs) - - def _read(self): - def readline(iLine): - with open(self.filename) as f: - for i, line in enumerate(f): - if i==iLine-1: - return line.strip() - elif i>=iLine: - break - - ext = os.path.splitext(self.filename.lower())[1] - self.info={} - self['binary']=False - try: - if ext in ['.out','.elev','.dbg','.dbg2']: - self.data, self.info = load_ascii_output(self.filename) - elif ext=='.outb': - self.data, self.info = load_binary_output(self.filename) - self['binary']=True - elif ext=='.elm': - F=CSVFile(filename=self.filename, sep=' ', commentLines=[0,2],colNamesLine=1) - self.data = F.data - del F - self.info['attribute_units']=readline(3).replace('sec','s').split() - self.info['attribute_names']=self.data.columns.values - else: - if isBinary(self.filename): - self.data, self.info = load_binary_output(self.filename) - self['binary']=True - else: - self.data, self.info = load_ascii_output(self.filename) - self['binary']=False - except MemoryError as e: - raise BrokenReaderError('FAST Out File {}: Memory error encountered\n{}'.format(self.filename,e)) - except Exception as e: - raise WrongFormatError('FAST Out File {}: {}'.format(self.filename,e.args)) - if self.data.shape[0]==0: - raise EmptyFileError('This FAST output file contains no data: {}'.format(self.filename)) - - if self.info['attribute_units'] is not None: - self.info['attribute_units'] = [re.sub(r'[()\[\]]','',u) for u in self.info['attribute_units']] - - - def _write(self, binary=None, fileID=4): - if binary is None: - binary = self['binary'] - - if binary: - # NOTE: user provide a filename, we allow overwrite - self.toOUTB(filename=self.filename, fileID=fileID, noOverWrite=False) - else: - # ascii output - with open(self.filename,'w') as f: - f.write('\t'.join(['{:>10s}'.format(c) for c in self.info['attribute_names']])+'\n') - f.write('\t'.join(['{:>10s}'.format('('+u+')') for u in self.info['attribute_units']])+'\n') - # TODO better.. - f.write('\n'.join(['\t'.join(['{:10.4f}'.format(y[0])]+['{:10.3e}'.format(x) for x in y[1:]]) for y in self.data])) - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - # --- Example (returning one DataFrame): - # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) - if self.info['attribute_units'] is not None: - if len(self.info['attribute_names'])!=len(self.info['attribute_units']): - cols=self.info['attribute_names'] - print('[WARN] not all columns have units! Skipping units') - else: - cols=[n+'_['+u.replace('sec','s')+']' for n,u in zip(self.info['attribute_names'],self.info['attribute_units'])] - else: - cols=self.info['attribute_names'] - if isinstance(self.data, pd.DataFrame): - df= self.data - df.columns=cols - else: - if len(cols)!=self.data.shape[1]: - raise BrokenFormatError('Inconstistent number of columns between headers ({}) and data ({}) for file {}'.format(len(cols), self.data.shape[1], self.filename)) - df = pd.DataFrame(data=self.data,columns=cols) - - return df - - def writeDataFrame(self, df, filename, binary=True): - writeDataFrame(df, filename, binary=binary) - - def __repr__(self): - s='<{} object> with attributes:\n'.format(type(self).__name__) - s+=' - info ({})\n'.format(type(self.info)) - s+=' - data ({})\n'.format(type(self.data)) - s+='and keys: {}\n'.format(self.keys()) - return s - - # -------------------------------------------------------------------------------- - # --- Converters - # -------------------------------------------------------------------------------- - def toOUTB(self, filename=None, extension='.outb', fileID=4, noOverWrite=True, **kwargs): - #NOTE: we override the File class here - if filename is None: - base, _ = os.path.splitext(self.filename) - filename = base + extension - else: - base, ext = os.path.splitext(filename) - if len(ext)!=0: - extension = ext - if (filename==self.filename) and noOverWrite: - raise Exception('Not overwritting {}. Specify a filename or an extension.'.format(filename)) - - # NOTE: fileID=2 will chop the channels name of long channels use fileID4 instead - channels = self.data - chanNames = self.info['attribute_names'] - chanUnits = self.info['attribute_units'] - descStr = self.info['description'] - if isinstance(descStr, list): - descStr=(''.join(descStr[:2])).replace('\n','') - writeBinary(filename, channels, chanNames, chanUnits, fileID=fileID, descStr=descStr) - - -# -------------------------------------------------------------------------------- -# --- Helper low level functions -# -------------------------------------------------------------------------------- -def isBinary(filename): - with open(filename, 'r') as f: - try: - # first try to read as string - l = f.readline() - # then look for weird characters - for c in l: - code = ord(c) - if code<10 or (code>14 and code<31): - return True - return False - except UnicodeDecodeError: - return True - - - - - -def load_ascii_output(filename, method='numpy', encoding='ascii'): - - - if method in ['forLoop','pandas']: - from .file import numberOfLines - nLines = numberOfLines(filename, method=2) - - with open(filename, encoding=encoding, errors='ignore') as f: - info = {} - info['name'] = os.path.splitext(os.path.basename(filename))[0] - # Header is whatever is before the keyword `time` - header = [] - maxHeaderLines=35 - headerRead = False - for i in range(maxHeaderLines): - l = f.readline() - if not l: - raise Exception('Error finding the end of FAST out file header. Keyword Time missing.') - # Check for utf-16 - if l[:3] == '\x00 \x00': - f.close() - encoding='' - print('[WARN] Attempt to re-read the file with encoding utf-16') - return load_ascii_output(filename=filename, method=method, encoding='utf-16') - first_word = (l+' dummy').lower().split()[0] - in_header= (first_word != 'time') and (first_word != 'alpha') - if in_header: - header.append(l) - else: - info['description'] = header - info['attribute_names'] = l.split() - info['attribute_units'] = [unit[1:-1] for unit in f.readline().split()] - headerRead=True - break - if not headerRead: - raise WrongFormatError('Could not find the keyword "Time" or "Alpha" in the first {} lines of the file'.format(maxHeaderLines)) - - nHeader = len(header)+1 - nCols = len(info['attribute_names']) - - if method=='numpy': - # The most efficient, and will remove empty lines and the lines that starts with "This" - # ("This" is found at the end of some Hydro Out files..) - data = np.loadtxt(f, comments=('This')) - - elif method =='pandas': - # Could probably be made more efficient, but - f.close() - nRows = nLines-nHeader - sep=r'\s+' - cols= ['C{}'.format(i) for i in range(nCols)] - df = pd.read_csv(filename, sep=sep, header=0, skiprows=nHeader, names=cols, dtype=float, na_filter=False, nrows=nRows, engine='pyarrow'); print(df) - data=df.values - - elif method == 'forLoop': - # The most inefficient - nRows = nLines-nHeader - sep=r'\s+' - data = np.zeros((nRows, nCols)) - for i in range(nRows): - l = f.readline().strip() - sp = np.array(l.split()).astype(float) - data[i,:] = sp[:nCols] - - elif method == 'listCompr': - # --- Method 4 - List comprehension - # Data, up to end of file or empty line (potential comment line at the end) - data = np.array([l.strip().split() for l in takewhile(lambda x: len(x.strip())>0, f.readlines())]).astype(float) - else: - raise NotImplementedError() - - return data, info - - -def load_binary_output(filename, use_buffer=True): - """ - 03/09/15: Ported from ReadFASTbinary.m by Mads M Pedersen, DTU Wind - 24/10/18: Low memory/buffered version by E. Branlard, NREL - 18/01/19: New file format for exctended channels, by E. Branlard, NREL - - Info about ReadFASTbinary.m: - % Author: Bonnie Jonkman, National Renewable Energy Laboratory - % (c) 2012, National Renewable Energy Laboratory - % - % Edited for FAST v7.02.00b-bjj 22-Oct-2012 - """ - StructDict = { - 'uint8': ('B', 1, np.uint8), - 'int16':('h', 2, np.int16), - 'int32':('i', 4, np.int32), - 'float32':('f', 4, np.float32), - 'float64':('d', 8, np.float64)} - def fread(fid, n, dtype): - fmt, nbytes, npdtype = StructDict[dtype] - #return np.array(struct.unpack(fmt * n, fid.read(nbytes * n)), dtype=npdtype) - return struct.unpack(fmt * n, fid.read(nbytes * n)) - - def freadRowOrderTableBuffered(fid, n, type_in, nCols, nOff=0, type_out='float64'): - """ - Reads of row-ordered table from a binary file. - - Read `n` data of type `type_in`, assumed to be a row ordered table of `nCols` columns. - Memory usage is optimized by allocating the data only once. - Buffered reading is done for improved performances (in particular for 32bit python) - - `nOff` allows for additional column space at the begining of the storage table. - Typically, `nOff=1`, provides a column at the beginning to store the time vector. - - @author E.Branlard, NREL - - """ - fmt, nbytes = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type_in] - nLines = int(n/nCols) - GoodBufferSize = 4096*40 - nLinesPerBuffer = int(GoodBufferSize/nCols) - BufferSize = nCols * nLinesPerBuffer - nBuffer = int(n/BufferSize) - # Allocation of data - data = np.zeros((nLines,nCols+nOff), dtype = type_out) - # Reading - try: - nIntRead = 0 - nLinesRead = 0 - while nIntRead0: - op,cl = chars - iu=c.rfind(op) - if iu>1: - name = c[:iu] - unit = c[iu+1:].replace(cl,'') - if name[-1]=='_': - name=name[:-1] - - chanNames.append(name) - chanUnits.append(unit) - - if binary: - writeBinary(filename, channels, chanNames, chanUnits, fileID=FileFmtID_ChanLen_In) - else: - NotImplementedError() - - - -if __name__ == "__main__": - B=FASTOutputFile('tests/example_files/FASTOutBin.outb') - df=B.toDataFrame() - B.writeDataFrame(df, 'tests/example_files/FASTOutBin_OUT.outb') - B.toOUTB(extension='.dat.outb') - B.toParquet() - B.toCSV() - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py deleted file mode 100644 index 2fbcb8696c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_summary_file.py +++ /dev/null @@ -1,270 +0,0 @@ -import numpy as np -import pandas as pd -import os -# Local -from .mini_yaml import yaml_read - -try: - from .file import File, EmptyFileError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - File=dict - -# --------------------------------------------------------------------------------} -# --- Main Class -# --------------------------------------------------------------------------------{ -class FASTSummaryFile(File): - """ - Read an OpenFAST summary file (.sum, .yaml). The object behaves as a dictionary. - NOTE: open new subdyn format supported. - - Main methods - ------------ - - read, toDataFrame - - Examples - -------- - - # read a subdyn summary file - sum = FASTSummaryFile('5MW.SD.sum.yaml') - print(sum['module']) # SubDyn - M = sum['M'] # Mass matrix - K = sum['K'] # stiffness matrix - - """ - - @staticmethod - def defaultExtensions(): - return ['.sum','.yaml'] - - @staticmethod - def formatName(): - return 'FAST summary file' - - def __init__(self,filename=None, **kwargs): - self.filename = None - if filename: - self.read(filename, **kwargs) - - def read(self, filename=None, header_only=False): - """ """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - with open(self.filename, 'r', errors="surrogateescape") as fid: - header= readFirstLines(fid, 4) - if any(['subdyn' in s.lower() for s in header]): - self['module']='SubDyn' - readSubDynSum(self) - else: - raise NotImplementedError('This summary file format is not yet supported') - - def toDataFrame(self): - if 'module' not in self.keys(): - raise Exception(''); - - if self['module']=='SubDyn': - raise Exception('This should not happen since class was added to subdyn object') - # dfs=subDynToDataFrame(self) - - return dfs - - def toGraph(self): - from .fast_input_file_graph import fastToGraph - return fastToGraph(self) - - - -# --------------------------------------------------------------------------------} -# --- Helper functions -# --------------------------------------------------------------------------------{ -def readFirstLines(fid, nLines): - lines=[] - for i, line in enumerate(fid): - lines.append(line.strip()) - if i==nLines: - break - return lines - -# --------------------------------------------------------------------------------} -# --- Sub-reader/class for SubDyn summary files -# --------------------------------------------------------------------------------{ -def readSubDynSum(self): - - # Read data - #T=yaml.load(fid, Loader=yaml.SafeLoader) - yaml_read(self.filename, self) - - # --- Treatement of useful data - if self['DOF2Nodes'].shape[1]==3: - self['DOF2Nodes']=np.column_stack((np.arange(self['DOF2Nodes'].shape[0])+1,self['DOF2Nodes'])) - # NOTE: DOFs are reindexed to start at 0 - self['DOF2Nodes'][:,0]-=1 - self['DOF___L'] -=1 # internal DOFs - self['DOF___B'] -=1 # internal - self['DOF___F'] -=1 # fixed DOFs - - self['CB_frequencies']=self['CB_frequencies'].ravel() - self['X'] = self['Nodes'][:,1].astype(float) - self['Y'] = self['Nodes'][:,2].astype(float) - self['Z'] = self['Nodes'][:,3].astype(float) - - # --- Useful methods that will be added to the class - def NodesDisp(self, IDOF, UDOF, maxDisp=None, sortDim=None): - DOF2Nodes = self['DOF2Nodes'] - # NOTE: SubDyn nodes in the summary files are sorted - # so the position we give are for all Nodes - INodes = list(np.sort(np.unique(DOF2Nodes[IDOF,1]))) # Sort - nShapes = UDOF.shape[1] - disp=np.empty((len(INodes),3,nShapes)); disp.fill(np.nan) - pos=np.empty((len(INodes),3)) ; pos.fill(np.nan) - # TODO - # handle T_red for rigid and joints - for i,iDOF in enumerate(IDOF): - iNode = DOF2Nodes[iDOF,1] - nDOFPerNode = DOF2Nodes[iDOF,2] - nodeDOF = DOF2Nodes[iDOF,3] - iiNode = INodes.index(iNode) - if nodeDOF<=3: - pos[iiNode, 0]=self['X'][iNode-1] - pos[iiNode, 1]=self['Y'][iNode-1] - pos[iiNode, 2]=self['Z'][iNode-1] - for iShape in np.arange(nShapes): - disp[iiNode, nodeDOF-1, iShape] = UDOF[i, iShape] - # Scaling - if maxDisp is not None: - for iShape in np.arange(nShapes): - mD=np.nanmax(np.abs(disp[:, :, iShape])) - if mD>1e-5: - disp[:, :, iShape] *= maxDisp/mD - # Sorting according to a dimension - if sortDim is not None: - I=np.argsort(pos[:,sortDim]) - INodes = np.array(INodes)[I] - disp = disp[I,:,:] - pos = pos[I,:] - return disp, pos, INodes - - def getModes(data, maxDisp=None, sortDim=None): - """ return Guyan and CB modes""" - if maxDisp is None: - #compute max disp such as it's 10% of maxdimension - dx = np.max(self['X'])-np.min(self['X']) - dy = np.max(self['Y'])-np.min(self['Y']) - dz = np.max(self['Z'])-np.min(self['Z']) - maxDisp = np.max([dx,dy,dz])*0.1 - - # NOTE: DOF have been reindexed -1 - DOF_B = data['DOF___B'].ravel() - DOF_F = data['DOF___F'].ravel() - DOF_K = (np.concatenate((DOF_B,data['DOF___L'].ravel(), DOF_F))).astype(int) - - # CB modes - PhiM = data['PhiM'] - Phi_CB = np.vstack((np.zeros((len(DOF_B),PhiM.shape[1])),PhiM, np.zeros((len(DOF_F),PhiM.shape[1])))) - dispCB, posCB, INodesCB = data.NodesDisp(DOF_K, Phi_CB, maxDisp=maxDisp, sortDim=sortDim) - # Guyan modes - PhiR = data['PhiR'] - Phi_Guyan = np.vstack((np.eye(len(DOF_B)),PhiR, np.zeros((len(DOF_F),PhiR.shape[1])))) - dispGy, posGy, INodesGy = data.NodesDisp(DOF_K, Phi_Guyan, maxDisp=maxDisp, sortDim=sortDim) - - return dispGy, posGy, INodesGy, dispCB, posCB, INodesCB - - - def subDynToJson(data, outfile=None): - """ Convert to a "JSON" format - - TODO: convert to graph and use graph.toJSON - - """ - #return data.toGraph().toJSON(outfile) - - dispGy, posGy, _, dispCB, posCB, _ = data.getModes(sortDim=None) # Sorting mess things up - - Nodes = self['Nodes'].copy() - Elements = self['Elements'].copy() - Elements[:,0]-=1 - Elements[:,1]-=1 - Elements[:,2]-=1 - CB_freq = data['CB_frequencies'].ravel() - - d=dict(); - d['Connectivity']=Elements[:,[1,2]].astype(int).tolist(); - d['Nodes']=Nodes[:,[1,2,3]].tolist() - d['ElemProps']=[{'shape':'cylinder','type':int(Elements[iElem,5]),'Diam':np.sqrt(Elements[iElem,7]/np.pi)*4} for iElem in range(len(Elements))] # NOTE: diameter is cranked up - # disp[iiNode, nodeDOF-1, iShape] = UDOF[i, iShape] - - d['Modes']=[ - { - 'name':'GY{:d}'.format(iMode+1), - 'omega':1, - 'Displ':dispGy[:,:,iMode].tolist() - } for iMode in range(dispGy.shape[2]) ] - d['Modes']+=[ - { - 'name':'CB{:d}'.format(iMode+1), - 'omega':CB_freq[iMode]*2*np.pi, #in [rad/s] - 'Displ':dispCB[:,:,iMode].tolist() - } for iMode in range(dispCB.shape[2]) ] - d['groundLevel']=np.min(data['Z']) # TODO - - if outfile is not None: - import json - with open(outfile, 'w', encoding='utf-8') as f: - try: - f.write(unicode(json.dumps(d, ensure_ascii=False))) #, indent=2) - except: - json.dump(d, f, indent=2) - return d - - - def subDynToDataFrame(data, sortDim=2, removeZero=True): - """ Convert to DataFrame containing nodal displacements """ - def toDF(pos,disp,preffix=''): - disp[np.isnan(disp)]=0 - disptot=disp.copy() - columns=[] - for ishape in np.arange(disp.shape[2]): - disptot[:,:,ishape]= pos + disp[:,:,ishape] - sMode=preffix+'Mode{:d}'.format(ishape+1) - columns+=[sMode+'x_[m]',sMode+'y_[m]',sMode+'z_[m]'] - disptot= np.moveaxis(disptot,2,1).reshape(disptot.shape[0],disptot.shape[1]*disptot.shape[2]) - disp = np.moveaxis(disp,2,1).reshape(disp.shape[0],disp.shape[1]*disp.shape[2]) - df= pd.DataFrame(data = disptot ,columns = columns) - dfDisp= pd.DataFrame(data = disp ,columns = columns) - # remove mode components that are fully zero - if removeZero: - df = df.loc[:, (dfDisp != 0).any(axis=0)] - dfDisp = dfDisp.loc[:, (dfDisp != 0).any(axis=0)] - dfDisp.columns = [c.replace('Mode','Disp') for c in dfDisp.columns.values] - return df, dfDisp - - dispGy, posGy, _, dispCB, posCB, _ = data.getModes(sortDim=sortDim) - - columns = ['z_[m]','x_[m]','y_[m]'] - dataZXY = np.column_stack((posGy[:,2],posGy[:,0],posGy[:,1])) - dfZXY = pd.DataFrame(data = dataZXY, columns=columns) - df1, df1d = toDF(posGy, dispGy,'Guyan') - df2, df2d = toDF(posCB, dispCB,'CB') - df = pd.concat((dfZXY, df1, df2, df1d, df2d), axis=1) - return df - - # adding method to class dynamically to give it a "SubDyn Summary flavor" - setattr(FASTSummaryFile, 'NodesDisp' , NodesDisp) - setattr(FASTSummaryFile, 'toDataFrame', subDynToDataFrame) - setattr(FASTSummaryFile, 'toJSON' , subDynToJson) - setattr(FASTSummaryFile, 'getModes' , getModes) - - return self - - -if __name__=='__main__': - T=FASTSummaryFile('../Pendulum.SD.sum.yaml') - df=T.toDataFrame() - print(df) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py deleted file mode 100644 index e2a75c53ae..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/fast_wind_file.py +++ /dev/null @@ -1,72 +0,0 @@ -import numpy as np -import pandas as pd -from .csv_file import CSVFile -from .file import isBinary, WrongFormatError - -class FASTWndFile(CSVFile): - - @staticmethod - def defaultExtensions(): - return ['.wnd'] - - @staticmethod - def formatName(): - return 'FAST determ. wind file' - - def __init__(self, *args, **kwargs): - self.colNames=['Time','WindSpeed','WindDir','VertSpeed','HorizShear','VertShear','LinVShear','GustSpeed'] - self.units=['[s]','[m/s]','[deg]','[m/s]','[-]','[-]','[-]','[m/s]'] - Cols=['{}_{}'.format(c,u) for c,u in zip(self.colNames,self.units)] - - header=[] - header+=['!Wind file.'] - header+=['!Time Wind Wind Vert. Horiz. Vert. LinV Gust'] - header+=['! Speed Dir Speed Shear Shear Shear Speed'] - - super(FASTWndFile, self).__init__(sep=' ',commentChar='!',colNames=Cols, header=header, *args, **kwargs) - - def _read(self, *args, **kwargs): - if isBinary(self.filename): - raise WrongFormatError('This is a binary file (turbulence file?) not a FAST ascii determinisctic wind file') - super(FASTWndFile, self)._read(*args, **kwargs) - - def _write(self, *args, **kwargs): - super(FASTWndFile, self)._write(*args, **kwargs) - - - def _toDataFrame(self): - return self.data - - -# --------------------------------------------------------------------------------} -# --- Functions specific to file type -# --------------------------------------------------------------------------------{ - def stepWind(self,WSstep=1,WSmin=3,WSmax=25,tstep=100,dt=0.5,tmin=0,tmax=999): - """ Set the wind file to a step wind - tstep: can be an array of size 2 [tstepmax tstepmin] - - - """ - - Steps= np.arange(WSmin,WSmax+WSstep,WSstep) - if hasattr(tstep,'__len__'): - tstep = np.around(np.linspace(tstep[0], tstep[1], len(Steps)),0) - else: - tstep = len(Steps)*[tstep] - nCol = len(self.colNames) - nRow = len(Steps)*2 - M = np.zeros((nRow,nCol)); - M[0,0] = tmin - M[0,1] = WSmin - for i,s in enumerate(Steps[:-1]): - M[2*i+1,0] = tmin + tstep[i]-dt - M[2*i+2,0] = tmin + tstep[i] - tmin +=tstep[i] - M[2*i+1,1] = Steps[i] - if i14 and code<31): - return True - return False - except UnicodeDecodeError: - return True - - -def numberOfLines(filename, method=1): - - if method==1: - return sum(1 for i in open(filename, 'rb')) - - elif method==2: - def blocks(files, size=65536): - while True: - b = files.read(size) - if not b: break - yield b - with open(filename, "r",encoding="utf-8",errors='ignore') as f: - return sum(bl.count("\n") for bl in blocks(f)) - else: - raise NotImplementedError() - -def ascii_comp(file1,file2,bDelete=False): - """ Compares two ascii files line by line. - Comparison is done ignoring multiple white spaces for now""" - # --- Read original as ascii - with open(file1, 'r') as f1: - lines1 = f1.read().splitlines(); - lines1 = '|'.join([l.replace('\t',' ').strip() for l in lines1]) - lines1 = ' '.join(lines1.split()) - # --- Read second file as ascii - with open(file2, 'r') as f2: - lines2 = f2.read().splitlines(); - lines2 = '|'.join([l.replace('\t',' ').strip() for l in lines2]) - lines2 = ' '.join(lines2.split()) - - if lines1 == lines2: - if bDelete: - os.remove(file2) - return True - else: - return False diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py deleted file mode 100644 index 595d545e23..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/file_formats.py +++ /dev/null @@ -1,31 +0,0 @@ -from .file import WrongFormatError - -def isRightFormat(fileformat, filename, **kwargs): - """ Tries to open a file, return true and the file if it succeeds """ - #raise NotImplementedError("Method must be implemented in the subclass") - try: - F=fileformat.constructor(filename=filename, **kwargs) - return True,F - except MemoryError: - raise - except WrongFormatError: - return False,None - except: - # We Raise the Exception. - # It's the responsability of all the file classes to Return a WrongFormatError - raise - -class FileFormat(): - def __init__(self,fileclass=None): - self.constructor = fileclass - if fileclass is None: - self.extensions = [] - self.name = '' - else: - self.extensions = fileclass.defaultExtensions() - self.name = fileclass.formatName() - - - def __repr__(self): - return 'FileFormat object: {} ({})'.format(self.name,self.extensions[0]) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py deleted file mode 100644 index 5ce5a0ec89..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_blade_file.py +++ /dev/null @@ -1,139 +0,0 @@ -import numpy as np -import pandas as pd -import os - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - -class FLEXBladeFile(File): - - @staticmethod - def defaultExtensions(): - return ['.bld','.bla','.00X'] #'.001 etc..' - - @staticmethod - def formatName(): - return 'FLEX blade file' - - def _read(self): - headers_all = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','GKt_[Nm2]','Mass_[kg/m]','Jxx_[kg.m]','PreBendFlap_[m]','PreBendEdge_[m]'\ - ,'Str.Twist_[deg]','PhiOut_[deg]','Ycog_[m]','Yshc_[m]','CalcOutput_[0/1]'\ - ,'Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]','ProfileSet_[#]'] - with open(self.filename, 'r', errors="surrogateescape") as f: - try: - firstline = f.readline().strip() - nSections = int(f.readline().strip().split()[0]) - except: - raise WrongFormatError('Unable to read first two lines of blade file') - try: - self.version=int(firstline[1:4]) - except: - self.version=0 - # --- Different handling depending on version - if self.version==0: - # Version 0 struct has no GKt - # Version 0 aero has no profile set, no TorsionAero - nColsStruct = 8 - nColsAero = 5 - struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','Mass_[kg/m]','Str.Twist_[deg]','CalcOutput_[0/1]','PreBendFlap_[m]','PreBendEdge_[m]'] - aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]'] - elif self.version==1: - # Version 1 struct has GKt - # Version 1 aero has no profile set - nColsStruct = 8 - nColsAero = 6 - struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','Mass_[kg/m]','Str.Twist_[deg]','CalcOutput_[0/1]','PreBendFlap_[m]','PreBendEdge_[m]'] - aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]'] - elif self.version==2: - nColsStruct = 9 - nColsAero = 7 - struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','Mass_[kg/m]','Str.Twist_[deg]','CalcOutput_[0/1]','PreBendFlap_[m]','PreBendEdge_[m]','GKt_[Nm2]'] - aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]','ProfileSet_[#]'] - elif self.version==3: - nColsStruct = 13 - nColsAero = 7 - struct_headers = ['r_[m]','EIFlap_[Nm2]','EIEdge_[Nm2]','GKt_[Nm2]','Mass_[kg/m]','Jxx_[kg.m]','PreBendFlap_[m]','PreBendEdge_[m]','Str.Twist_[deg]','PhiOut_[deg]','Ycog_[m]','Yshc_[m]','CalcOutput_[0/1]'] - aero_headers = ['X_BladeRoot_[m]','Chord_[m]','AeroTwist_[deg]','RelThickness_[%]','AeroCenter_[m]','AeroTorsion_[0/1]','ProfileSet_[#]'] - else: - raise BrokenFormatError('Blade format not implemented') - - struct = np.zeros((nSections,nColsStruct)) - aero = np.zeros((nSections,nColsAero)) - - # --- Structural data - try: - for iSec in range(nSections): - vals=f.readline().split() - #if len(vals)>=nColsStruct: - struct[iSec,:]=np.array(vals[0:nColsStruct]).astype(float) - #elif self.version==1: - # # version 1 has either 8 or 9 columns - # nColsStruct=nColsStruct-1 - # struct_headers=struct_headers[0:-1] - # struct =struct[:,:-1] - # struct[iSec,:]=np.array(vals[0:nColsStruct]).astype(float) - except: - raise WrongFormatError('Unable to read structural data') - try: - self.BetaC = float(f.readline().strip().split()[0]) - if self.version==3: - f.readline() - self.FlapDamping = [float(v) for v in f.readline().strip().split(';')[0].split()] - self.EdgeDamping = [float(v) for v in f.readline().strip().split(';')[0].split()] - self.TorsDamping = [float(v) for v in f.readline().strip().split(';')[0].split()] - f.readline() - f.readline() - else: - Damping = [float(v) for v in f.readline().strip().split()[0:4]] - self.FlapDamping = Damping[0:2] - self.EdgeDamping = Damping[2:4] - self.TorsDamping = [] - except: - raise - raise WrongFormatError('Unable to read damping data') - - # --- Aero - try: - for iSec in range(nSections): - vals=f.readline().split()[0:nColsAero] - aero[iSec,:]=np.array(vals).astype(float) - except: - raise WrongFormatError('Unable to read aerodynamic data') - - self.ProfileFile=f.readline().strip() - - # --- Concatenating aero and structural data - self._cols = struct_headers+aero_headers[1:] - data = np.column_stack((struct,aero[:,1:])) - dataMiss=pd.DataFrame(data=data, columns=self._cols) - self._nColsStruct=nColsStruct # to remember where to split - # --- Making sure all columns are present, irrespectively of version - self.data=pd.DataFrame(data=[], columns=headers_all) - for c in self._cols: - self.data[c]=dataMiss[c] - -# def toString(self): -# s='' -# if len(self.ProfileSets)>0: -# prefix='PROFILE SET ' -# else: -# prefix='' -# for pset in self.ProfileSets: -# s+=pset.toString(prefix) -# return s -# -# def _write(self): -# with open(self.filename,'w') as f: -# f.write(self.toString) -# - def __repr__(self): - s ='Class FLEXBladeFile (attributes: data, BetaC, FlapDamping, EdgeDamping, ProfileFile)\n' - return s - - def _toDataFrame(self): - return self.data - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py deleted file mode 100644 index 46eef7b4ee..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_doc_file.py +++ /dev/null @@ -1,208 +0,0 @@ -import numpy as np -import pandas as pd -import os -import re -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - -class FLEXDocFile(File): - - @staticmethod - def defaultExtensions(): - return ['.out','doc'] - - @staticmethod - def formatName(): - return 'FLEX WaveKin file' - - def _read(self): - with open(self.filename, 'r', errors="surrogateescape") as f: - line1=f.readline().strip() - if line1.find('#Program')!=0: - raise WrongFormatError() - lines=f.read().splitlines()+[line1] - - ArraysHeader=[ - '#Blade_ShapeFunction_DOF1_Shape', - '#Blade_ShapeFunction_DOF2_Shape', - '#Blade_ShapeFunction_DOF3_Shape', - '#Blade_ShapeFunction_DOF4_Shape', - '#Blade_ShapeFunction_DOF5_Shape', - '#Blade_ShapeFunction_DOF6_Shape', - '#Blade_ShapeFunction_DOF7_Shape', - '#Blade_ShapeFunction_DOF8_Shape', - '#Blade_ShapeFunction_DOF9_Shape', - '#Blade_ShapeFunction_DOF10_Shape', - '#Tower_SectionData', - '#Tower_ShapeFunction_DOF1_Shape', - '#Tower_ShapeFunction_DOF2_Shape', - '#Tower_ShapeFunction_DOF3_Shape', - '#Tower_ShapeFunction_DOF4_Shape', - '#Tower_ShapeFunction_DOF5_Shape', - '#Tower_ShapeFunction_DOF6_Shape', - '#Tower_ShapeFunction_DOF7_Shape', - '#Tower_ShapeFunction_DOF8_Shape', - '#Foundation_SectionData', - '#Foundation_ShapeFunction_DOF1_Shape', - '#Foundation_ShapeFunction_DOF2_Shape', - '#Global_Mode1_Shape', - ] - - ArraysNoHeader=[ - '#Blade_IsolatedMassMatrix' - '#Blade_IsolatedStiffnessMatrix', - '#Blade_IsolatedDampingMatrix', - '#Foundation_IsolatedMassMatrix', - '#Foundation_IsolatedStiffnessMatrix', - '#Foundation_IsolatedStiffnessMatrixCorrection', - '#Foundation_IsolatedDampingMatrix', - '#Tower_MassMatrix', - '#Tower_IsolatedMassMatrix', - '#Tower_IsolatedStiffnessMatrix', - '#Tower_IsolatedStiffnessMatrixCorrection', - '#Tower_IsolatedDampingMatrix', - '#EVA_MassMatrix', - '#EVA_StiffnessMatrix', - '#EVA_DampingMatrix', - '#EVA_Eigenvectors', - '#EVA_Eigenfrequencies', - '#EVA_Eigenvalues', - '#EVA_Damping', - '#EVA_LogDec', - ] - - numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?' - rx = re.compile(numeric_const_pattern, re.VERBOSE) - - i=0 - while i0 and lines[i][0]!='#': - array_lines.append(np.array([float(v) if v not in ['Fnd','Twr','COG'] else ['Fnd','Twr','COG'].index(v) for v in lines[i].split()])) - i=i+1 - # --- Process array - M = np.array(array_lines) - # --- Process header - cols=header.split() - try: - ii=int(cols[0]) - header=' '.join(cols[1:]) - except: - pass - if header.find('[')<=0: - cols=header.split() - else: - header=header.replace('rough','rough_[-]') - header=header.replace('n ','n_[-] ') - spcol=header.split(']') - cols= [v.strip().replace(' ','_').replace('[','_[').replace('__','_').replace('__','_')+']' for v in spcol[:-1]] - - if len(cols)!=M.shape[1]: - cols=['C{}'.format(j) for j in range(M.shape[1])] - # --- Store - keys = sp[0].split('_') - keys[0]=keys[0][1:] - if keys[0] not in self.keys(): - self[keys[0]] = dict() - subkey = '_'.join(keys[1:]) - df = pd.DataFrame(data = M, columns = cols) - self[keys[0]][subkey] = df - continue - # --- Array with no header - elif sp[0] in ArraysNoHeader: - array_lines=[] - i=i+1 - header=lines[i] - i=i+1 - while i0 and lines[i][0]!='#': - array_lines.append(np.array([float(v) for v in lines[i].split()])) - i=i+1 - # --- Process array - M = np.array(array_lines) - # --- Store - keys = sp[0].split('_') - keys[0]=keys[0][1:] - if keys[0] not in self.keys(): - self[keys[0]] = dict() - subkey = '_'.join(keys[1:]) - self[keys[0]][subkey] = M - continue - else: - # --- Regular - keys = sp[0].split('_') - key=keys[0][1:] - subkey = '_'.join(keys[1:]) - values= ' '.join(sp[1:]) - try: - dat= np.array(rx.findall(values)).astype(float) - if len(dat)==1: - dat=dat[0] - except: - dat = values - - if len(key.strip())>0: - if len(subkey)==0: - if key not in self.keys(): - self[key] = dat - else: - print('>>> line',i,l) - print(self.keys()) - raise Exception('Duplicate singleton key:',key) - else: - if key not in self.keys(): - self[key] = dict() - self[key][subkey]=dat - i+=1 - - # --- Some adjustements - try: - df=self['Global']['Mode1_Shape'] - df=df.drop('C0',axis=1) - df.columns=['H_[m]','U_FA_[-]','U_SS_[]'] - self['Global']['Mode1_Shape']=df - except: - pass - -# def _write(self): -# with open(self.filename,'w') as f: -# f.write(self.toString) - - def __repr__(self): - s='<{} object> with keys:\n'.format(type(self).__name__) - for k in self.keys(): - if type(self[k]) is dict: - s+='{:15s}: dict with keys {}\n'.format(k, list(self[k].keys())) - else: - s+='{:15s} : {}\n'.format(k,self[k]) - return s - - def _toDataFrame(self): - dfs={} - for k,v in self.items(): - if type(v) is pd.DataFrame: - dfs[k]=v - #if type(v) is np.ndarray: - # if len(v.shape)>1: - # dfs[k]=v - if type(self[k]) is dict: - for k2,v2 in self[k].items(): - if type(v2) is pd.DataFrame: - dfs[k+'_'+k2]=v2 - return dfs - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py deleted file mode 100644 index 86fc617ab2..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_out_file.py +++ /dev/null @@ -1,205 +0,0 @@ -import numpy as np -import pandas as pd -import os -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - -# --------------------------------------------------------------------------------} -# --- OUT FILE -# --------------------------------------------------------------------------------{ -class FLEXOutFile(File): - - @staticmethod - def defaultExtensions(): - return ['.res','.int'] - - @staticmethod - def formatName(): - return 'FLEX output file' - - def _read(self): - # --- First read the binary file - dtype=np.float32; # Flex internal data is stored in single precision - try: - self.data,self.tmin,self.dt,self.Version,self.DateID,self.title=read_flex_res(self.filename, dtype=dtype) - except WrongFormatError as e: - raise WrongFormatError('FLEX File {}: '.format(self.filename)+'\n'+e.args[0]) - self.nt = np.size(self.data,0) - self.nSensors = np.size(self.data,1) - self.time = np.arange(self.tmin, self.tmin + self.nt * self.dt, self.dt).reshape(self.nt,1).astype(dtype) - - # --- Then the sensor file - parentdir = os.path.dirname(self.filename) - basename = os.path.splitext(os.path.basename(self.filename))[0] - #print(parentdir) - #print(basename) - PossibleFiles=[] - PossibleFiles+=[os.path.join(parentdir, basename+'.Sensor')] - PossibleFiles+=[os.path.join(parentdir, 'Sensor_'+basename)] - PossibleFiles+=[os.path.join(parentdir, 'sensor')] - # We try allow for other files - Found =False - for sf in PossibleFiles: - if os.path.isfile(sf): - self.sensors=read_flex_sensor(sf) - if len(self.sensors['ID'])!=self.nSensors: - Found = False - else: - Found = True - break - if not Found: - # we are being nice and create some fake sensors info - self.sensors=read_flex_sensor_fake(self.nSensors) - - if len(self.sensors['ID'])!=self.nSensors: - raise BrokenFormatError('Inconsistent number of sensors: {} (sensor file) {} (out file), for file: {}'.format(len(self.sensors['ID']),self.nSensors,self.filename)) - - #def _write(self): # TODO - # pass - - def __repr__(self): - return 'Flex Out File: {}\nVersion:{} - DateID:{} - Title:{}\nSize:{}x{} - tmin:{} - dt:{}]\nSensors:{}'.format(self.filename,self.Version,self.DateID,self.title,self.nt,self.nSensors,self.tmin,self.dt,self.sensors['Name']) - - def _toDataFrame(self): - # Appending time to form the dataframe - names = ['Time'] + self.sensors['Name'] - units = ['s'] + self.sensors['Unit'] - units = [u.replace('(','').replace(')','').replace('[','').replace(']','') for u in units] - data = np.concatenate((self.time, self.data), axis=1) - cols=[n+'_['+u+']' for n,u in zip(names,units)] - return pd.DataFrame(data=data,columns=cols) - -# --------------------------------------------------------------------------------} -# --- Helper Functions -# --------------------------------------------------------------------------------{ -def read_flex_res(filename, dtype=np.float32): - # Read flex file - with open(filename,'rb') as fid: - #_ = struct.unpack('i', fid.read(4)) # Dummy - _ = np.fromfile(fid, 'int32', 1) # Dummy - # --- Trying to get DateID - fid.seek(4) # - DateID=np.fromfile(fid, 'int32', 6) - if DateID[0]<32 and DateID[1]<13 and DateID[3]<25 and DateID[4]<61: - # OK, DateID was present - title = fid.read(40).strip() - else: - fid.seek(4) # - DateID = np.fromfile(fid, 'int32', 1) - title = fid.read(60).strip() - _ = np.fromfile(fid, 'int32', 2) # Dummy - # FILE POSITION <<< fid.seek(4 * 19) - nSensors = np.fromfile(fid, 'int32', 1)[0] - IDs = np.fromfile(fid, 'int32', nSensors) - _ = np.fromfile(fid, 'int32', 1) # Dummy - # FILE POSITION <<< fid.seek(4*nSensors+4*21) - Version = np.fromfile(fid, 'int32', 1)[0] - # FILE POSITION <<< fid.seek(4*(nSensors)+4*22) - if Version == 12: - raise NotImplementedError('Flex out file with version 12, TODO. Implement it!') - # TODO - #fseek(o.fid,4*(21+o.nSensors),-1);% seek to the data from beginning of file - #RL=o.nSensors+5; % calculate the length of each row - #A = fread(o.fid,[RL,inf],'single'); % read whole file - #t=A(2,:);% time vector contained in row 2 - #o.SensorData=A(5:end,:); - # save relevant information - #o.tmin = t(1) ; - #o.dt = t(2)-t(1); - #o.t = t ; - #o.nt = length(t); - elif Version in [0,2,3]: - tmin = np.fromfile(fid, 'f', 1)[0] # Dummy - dt = np.fromfile(fid, 'f', 1)[0] # Dummy - scale_factors = np.fromfile(fid, 'f', nSensors).astype(dtype) - # --- Reading Time series - # FILE POSITION <<< fid.seek(8*nSensors + 48*2) - data = np.fromfile(fid, 'int16').astype(dtype) #data = np.fromstring(fid.read(), 'int16').astype(dtype) - nt = int(len(data) / nSensors) - try: - if Version ==3: - data = data.reshape(nSensors, nt).transpose() - else: - data = data.reshape(nt, nSensors) - except ValueError: - raise WrongFormatError("Flat data length {} is not compatible with {}x{} (nt x nSensors)".format(len(data),nt,nSensors)) - for i in range(nSensors): - data[:, i] *= scale_factors[i] - - return (data,tmin,dt,Version,DateID,title) - - -def read_flex_sensor(sensor_file): - with open(sensor_file, 'r') as fid: - sensor_info_lines = fid.readlines()[2:] - sensor_info = [] - d=dict({ 'ID':[],'Gain':[],'Offset':[],'Unit':[],'Name':[],'Description':[]}); - for line in sensor_info_lines: - line = line.strip().split() - d['ID'] .append(int(line[0])) - d['Gain'] .append(float(line[1])) - d['Offset'] .append(float(line[2])) - d['Unit'] .append(line[5]) - d['Name'] .append(line[6]) - d['Description'] .append(' '.join(line[7:])) - return d - -def read_flex_sensor_fake(nSensors): - d=dict({ 'ID':[],'Gain':[],'Offset':[],'Unit':[],'Name':[],'Description':[]}); - for i in range(nSensors): - d['ID'] .append(i+1) - d['Gain'] .append(1.0) - d['Offset'] .append(0.0) - d['Unit'] .append('(NA)') - d['Name'] .append('S{:04d}'.format(i+1)) - d['Description'] .append('NA') - return d - - - - - - -# def write_flex_file(filename,data,tmin,dt): -# ds = dataset -# # Write int data file -# f = open(filename, 'wb') -# f.write(struct.pack('ii', 0, 0)) # 2x empty int -# title = ("%-60s" % str(ds.name)).encode() -# f.write(struct.pack('60s', title)) # title -# f.write(struct.pack('ii', 0, 0)) # 2x empty int -# ns = len(sensors) -# f.write(struct.pack('i', ns)) -# f.write(struct.pack('i' * ns, *range(1, ns + 1))) # sensor number -# f.write(struct.pack('ii', 0, 0)) # 2x empty int -# time = ds.basis_attribute() -# f.write(struct.pack('ff', time[0], time[1] - time[0])) # start time and time step -# -# scale_factors = np.max(np.abs(data), 0) / 32000 -# f.write(struct.pack('f' * len(scale_factors), *scale_factors)) -# # avoid dividing by zero -# not0 = np.where(scale_factors != 0) -# data[:, not0] /= scale_factors[not0] -# #flatten and round -# data = np.round(data.flatten()).astype(np.int16) -# f.write(struct.pack('h' * len(data), *data.tolist())) -# f.close() -# -# # write sensor file -# f = open(os.path.join(os.path.dirname(filename), 'sensor'), 'w') -# f.write("Sensor list for %s\n" % filename) -# f.write(" No forst offset korr. c Volt Unit Navn Beskrivelse------------\n") -# sensorlineformat = "%3s %.3f %.3f 1.00 0.00 %7s %-8s %s\n" -# -# if isinstance(ds, FLEX4Dataset): -# gains = np.r_[ds.gains[1:], np.ones(ds.shape[1] - len(ds.gains))] -# offsets = np.r_[ds.offsets[1:], np.zeros(ds.shape[1] - len(ds.offsets))] -# sensorlines = [sensorlineformat % ((nr + 1), gain, offset, att.unit[:7], att.name.replace(" ", "_")[:8], att.description[:512]) for nr, att, gain, offset in zip(range(ns), sensors, gains, offsets)] -# else: -# sensorlines = [sensorlineformat % ((nr + 1), 1, 0, att.unit[:7], att.name.replace(" ", "_")[:8], att.description[:512]) for nr, att in enumerate(sensors)] -# f.writelines(sensorlines) -# f.close() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py deleted file mode 100644 index 90c4fb895d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_profile_file.py +++ /dev/null @@ -1,144 +0,0 @@ -import numpy as np -import pandas as pd -import os -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - -class ProfileSet(): - def __init__(self,header,thickness,polars,polar_headers): - self.header = header - self.polars = polars - self.thickness = thickness - self.polar_headers = polar_headers - - def toString(self,PREFIX=''): - s =PREFIX+self.header+'\n' - s+=' '.join([str(t) for t in self.thickness])+'\n' - s+=str(self.polars[0].shape[0])+'\n' - for ph,t,polar in zip(self.polar_headers,self.thickness,self.polars): - s+=ph+'\n' - s+='\n'.join([' '.join(['{:15.7e}'.format(v) for v in line]) for line in polar]) -# s+=ph+'\n' - return s - - def __repr__(self): - s ='Class ProfileSet (attributes: header, polars, thickness, polar_headers)\n' - s+=' header : '+self.header+'\n' - s+=' thickness : '+str(self.thickness)+'\n' - s+=' Number of polars: '+str(len(self.thickness))+'\n' - s+=' Alpha values : '+str(self.polars[0].shape[0])+'\n' - for ip,(ph,t) in enumerate(zip(self.polar_headers,self.thickness)): - s+= ' Polar: {}, Thickness: {}, Header: {}\n'.format(ip+1,t,ph) - return s - -class FLEXProfileFile(File): - - @staticmethod - def defaultExtensions(): - return ['.pro','.00X'] #'.001 etc..' - - @staticmethod - def formatName(): - return 'FLEX profile file' - - def _read(self): - self.ProfileSets=[] - setNumber=1 - with open(self.filename, 'r', errors="surrogateescape") as f: - def read_header(allow_empty=False): - """ Reads the header of a profile set (4 first lines) - - The first line may start with "Profile set I:" to indicate a set number - - Second line is number of thicknesses - - Third is thicnkesses - - Fourth is number of alpha values - """ - header=[] - for i, line in enumerate(f): - header.append(line.strip()) - if i==3: - break - if len(header)<4: - if allow_empty: - return [],[],'',False - else: - raise WrongFormatError('A Flex profile file needs at leats 4 lines of headers') - try: - nThickness=int(header[1]) - except: - raise WrongFormatError('Number of thicknesses (integer) should be on line 2') - try: - thickness=np.array(header[2].split()).astype(float) - except: - raise WrongFormatError('Number of thicknesses (integer) should be on line 2') - if len(thickness)!=nThickness: - raise WrongFormatError('Number of thicknesses read ({}) different from the number reported ({})'.format(len(thickness),nThickness)) - try: - nAlpha=int(header[3]) - except: - raise WrongFormatError('Number of alpha values (integer) should be on line 4') - if header[0].lower().find('profile set')==0: - header[0]=header[0][11:] - bHasSets=True - else: - bHasSets=False - return nAlpha,thickness,header[0],bHasSets - - def read_polars(nAlpha,thickness): - polars=[] - polar_headers=[] - for it,t in enumerate(thickness): - polar_headers.append(f.readline().strip()) - polars.append(np.zeros((nAlpha,4))) - try: - for ia in range(nAlpha): - polars[it][ia,:]=np.array([f.readline().split()]).astype(float) - except: - raise BrokenFormatError('An error occured while reading set number {}, polar number {}, (thickness {}), value number {}.'.format(setNumber,it+1,t,ia+1)) - - return polars,polar_headers - - # Reading headers and polars - while True: - nAlpha,thickness,Header,bHasSets = read_header(allow_empty=setNumber>1) - if len(thickness)==0: - break - polars,polar_headers = read_polars(nAlpha,thickness) - PSet= ProfileSet(Header,thickness,polars,polar_headers) - self.ProfileSets.append(PSet) - setNumber=setNumber+1 - - def toString(self): - s='' - if len(self.ProfileSets)>0: - prefix='PROFILE SET ' - else: - prefix='' - for pset in self.ProfileSets: - s+=pset.toString(prefix) - return s - - def _write(self): - with open(self.filename,'w') as f: - f.write(self.toString) - - def __repr__(self): - s ='Class FlexProfileFile (attributes: ProfileSets)\n' - s+=' Number of profiles sets: '+str(len(self.ProfileSets))+'\n' - for ps in self.ProfileSets: - s+=ps.__repr__() - return s - - - def _toDataFrame(self): - cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] - dfs = {} - for iset,pset in enumerate(self.ProfileSets): - for ipol,(thickness,polar) in enumerate(zip(pset.thickness,pset.polars)): - name='pc_set_{}_t_{}'.format(iset+1,thickness) - dfs[name] = pd.DataFrame(data=polar, columns=cols) - return dfs - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py deleted file mode 100644 index d6cdf72b9e..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/flex_wavekin_file.py +++ /dev/null @@ -1,101 +0,0 @@ -import numpy as np -import pandas as pd -import os -import re -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass -from .csv_file import CSVFile - - -class FLEXWaveKinFile(File): - - @staticmethod - def defaultExtensions(): - return ['.wko'] #'.001 etc..' - - @staticmethod - def formatName(): - return 'FLEX WaveKin file' - - def _read(self): - numeric_const_pattern = r'[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?' - rx = re.compile(numeric_const_pattern, re.VERBOSE) - def extract_floats(s): - v=np.array(rx.findall(s)) - return v - - - try: - csv = CSVFile(self.filename, sep=' ', commentLines=list(np.arange(11)),detectColumnNames=False) - except: - raise WrongFormatError('Unable to parse Flex WaveKin file as CSV with 11 header lines') - - header = csv.header - self['header'] = csv.header[0:2] - self['data'] = csv.data - try: - self['MaxCrestHeight'] = float(extract_floats(header[2])[0]) - self['MaxLongiVel'] = float(extract_floats(header[3])[0]) - self['MaxLongiAcc'] = float(extract_floats(header[4])[0]) - dat = extract_floats(header[5]).astype(float) - self['WaterDepth'] = dat[0] - self['Hs'] = dat[1] - self['Tp'] = dat[2] - self['SpecType'] = dat[3] - except: - raise BrokenFormatError('Unable to parse floats from header lines 3-6') - - try: - nDisp = int(extract_floats(header[6])[0]) - nRelD = int(extract_floats(header[8])[0]) - except: - raise BrokenFormatError('Unable to parse int from header lines 7 and 9') - - try: - displ = extract_floats(header[7]).astype(float) - depth = extract_floats(header[9]).astype(float) - except: - raise BrokenFormatError('Unable to parse displacements or depths from header lines 8 and 10') - if len(displ)!=nDisp: - print(displ) - raise BrokenFormatError('Number of displacements ({}) does not match number provided ({})'.format(nDisp, len(displ))) - if len(depth)!=nRelD: - print(depth) - raise BrokenFormatError('Number of rel depth ({}) does not match number provided ({})'.format(nRelD, len(depth))) - - self['RelDepth'] = depth - self['Displacements'] = displ - - cols=['Time_[s]', 'WaveElev_[m]'] - for j,x in enumerate(displ): - for i,z in enumerate(depth): - cols+=['u_z={:.1f}_x={:.1f}_[m/s]'.format(z*self['WaterDepth']*-1,x)] - for i,z in enumerate(depth): - cols+=['a_z={:.1f}_x={:.1f}_[m/s^2]'.format(z*self['WaterDepth'],x)] - - if len(cols)!=len(self['data'].columns): - raise BrokenFormatError('Number of columns not valid') - self['data'].columns = cols - -# def _write(self): -# with open(self.filename,'w') as f: -# f.write(self.toString) - - def __repr__(self): - s='<{} object> with keys:\n'.format(type(self).__name__) - - for k in ['MaxCrestHeight','MaxLongiVel','MaxLongiAcc','WaterDepth','Hs','Tp','SpecType','RelDepth','Displacements']: - s += '{:15s}: {}\n'.format(k,self[k]) - if len(self['header'])>0: - s += 'header : '+ ' ,'.join(self['header'])+'\n' - if len(self['data'])>0: - s += 'data size : {}x{}'.format(self['data'].shape[0],self['data'].shape[1]) - return s - - def _toDataFrame(self): - return self['data'] - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py deleted file mode 100644 index 950fe6a7ea..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_ae_file.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Hawc2 AE file -""" -import os -import numpy as np -import pandas as pd - -try: - from .file import File, WrongFormatError, EmptyFileError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - -from .wetb.hawc2.ae_file import AEFile - -class HAWC2AEFile(File): - - @staticmethod - def defaultExtensions(): - return ['.dat','.ae','.txt'] - - @staticmethod - def formatName(): - return 'HAWC2 AE file' - - def __init__(self,filename=None,**kwargs): - if filename: - self.filename = filename - self.read(**kwargs) - else: - self.filename = None - self.data = AEFile() - - def read(self, filename=None, **kwargs): - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # --- - try: - self.data = AEFile(self.filename) - except Exception as e: - raise WrongFormatError('AE File {}: '.format(self.filename)+e.args[0]) - - def write(self, filename=None): - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - # --- - self.data.save(self.filename) - - def toDataFrame(self): - cols=['radius_[m]','chord_[m]','thickness_[%]','pc_set_[#]'] - nset = len(self.data.ae_sets) - if nset == 1: - return pd.DataFrame(data=self.data.ae_sets[1], columns=cols) - else: - dfs = {} - for iset,aeset in enumerate(self.data.ae_sets): - name='ae_set_{}'.format(iset+1) - dfs[name] = pd.DataFrame(data=self.data.ae_sets[iset+1], columns=cols) - return dfs - - @property - def sets(self): - # Returns a list of ae_sets, otherwise not easy to iterate - sets=[] - for iset,aeset in enumerate(self.data.ae_sets): - sets.append(self.data.ae_sets[iset+1]) - return sets - - # --- Convenient utils - def add_set(self, **kwargs): - self.data.add_set(**kwargs) - - def __repr__(self): - cols=['radius_[m]','chord_[m]','thickness_[%]','pc_set_[#]'] - nRows = [np.asarray(s).shape[0] for s in self.sets] - s='<{} object>\n'.format(type(self).__name__) - s+='| Attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - s+='| - data: AEFile, with attributes `ae_sets`\n' - s+='| Derived attributes:\n' - s+='| * sets: list of {} arrays, length: {}, 4 columns: {}\n'.format(len(self.data.ae_sets), nRows, cols) - s+='| Methods: add_set, toDataFrame\n' - return s diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py deleted file mode 100644 index 7ee37f6371..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_dat_file.py +++ /dev/null @@ -1,144 +0,0 @@ -import numpy as np -import pandas as pd -import os - -from .file import File, WrongFormatError, FileNotFoundError -from .wetb.hawc2.Hawc2io import ReadHawc2 - - -class HAWC2DatFile(File): - - @staticmethod - def defaultExtensions(): - return ['.dat','.sel'] - - @staticmethod - def formatName(): - return 'HAWC2 dat file' - - def __init__(self, filename=None, **kwargs): - self.info={} - self.data=np.array([]) - self.bHawc=False - super(HAWC2DatFile, self).__init__(filename=filename,**kwargs) - - def _read(self): - try: - res_file = ReadHawc2(self.filename) - self.data = res_file.ReadAll() - self.info['attribute_names'] = res_file.ChInfo[0] - self.info['attribute_units'] = res_file.ChInfo[1] - self.info['attribute_descr'] = res_file.ChInfo[2] - if res_file.FileFormat=='BHAWC_ASCII': - self.bHawc=True - except FileNotFoundError: - raise - #raise WrongFormatError('HAWC2 dat File {}: '.format(self.filename)+' File Not Found:'+e.filename) - except Exception as e: -# raise e - raise WrongFormatError('HAWC2 dat File {}: '.format(self.filename)+e.args[0]) - - #def _write(self): - #self.data.to_csv(self.filename,sep=self.false,index=False) - - def _toDataFrame(self): - import re - - # Simplify output names - names=self.info['attribute_names'] - for i,desc in enumerate(self.info['attribute_descr']): - elem = re.findall(r'E-nr:\s*(\d+)', desc) - zrel = re.findall(r'Z-rel:\s*(\d+.\d+)', desc) - node = re.findall(r'nodenr:\s*(\d+)', desc) - mbdy = re.findall(r'Mbdy:([-a-zA-Z0-9_.]*) ', desc) - s = re.findall(r's=\s*(\d+.\d+)\[m\]', desc) - sS = re.findall(r's/S=\s*(\d+.\d+)', desc) - - pref='' - names[i] = names[i].replace(' ','') - names[i] = names[i].replace('coo:global','g').strip() - names[i] = names[i].replace('Statepos','').strip() - names[i] = names[i].replace('axisangle','rot_').strip() - - if len(mbdy)==1: - names[i] = names[i].replace('coo:'+mbdy[0],'b').strip() - pref += mbdy[0] - - if len(zrel)==1 and len(elem)==1: - ielem=int(elem[0]) - fzrel=float(zrel[0]) - if fzrel==0: - pref+= 'N'+str(ielem) - elif fzrel==1: - pref+='N'+str(ielem+1) - else: - pref+='N'+str(ielem+fzrel) - if len(s)==1 and len(sS)==1: - pref+='r'+str(sS[0]) - - if len(node)==1: - pref+='N'+node[0] - names[i]=pref+names[i] - - if self.info['attribute_units'] is not None: - units = [u.replace('(','').replace(')','').replace('[','').replace(']','') for u in self.info['attribute_units']] - - cols=[n+'_['+u+']' for n,u in zip(names,units)] - else: - cols=names - - return pd.DataFrame(data=self.data,columns=cols) -# - def _write(self): - filename=self.filename - ext = os.path.splitext(filename)[-1].lower() - if ext=='.dat': - datfilename=filename - elif ext=='.sel': - datfilename=filename.replace(ext,'.dat') - else: - datfilename=filename+'.dat' - selfilename=datfilename[:-4]+'.sel' - nScans = self.data.shape[0] - nChannels = self.data.shape[1] - SimTime = self.data[-1,0] #-self.data[0,0] - # --- dat file - np.savetxt(datfilename, self.data, fmt=b'%16.8e') - # --- Sel file - with open(selfilename, 'w') as f: - if self.bHawc: - f.write('BHawC channel reference file (sel):\n') - f.write('+===================== (Name) =================== (Time stamp) ========= (Path) ==========================================================+\n') - f.write('Original BHAWC file : NA.dat 2001.01.01 00:00:00 C:\\\n') - f.write('Channel reference file : NA.sel 2001.01.01 00:00:00 C:\\\n') - f.write('Result file : NA.dat 2001.01.01 00:00:00 C:\\\n') - f.write('+=========================================================================================================================================+\n') - f.write('Scans \tChannels \tTime [sec] \tCoordinate convention: Siemens\n') - f.write('{:19s}\t{:25s}\t{:25s}\n\n'.format(str(nScans),str(nChannels),'{:.3f}'.format(SimTime))) - f.write('{:19s}\t{:25s}\t{:25s}\t{:25s}\n'.format('Channel','Variable descriptions','Labels','Units')) - for chan,(label,descr,unit) in enumerate(zip(self.info['attribute_names'],self.info['attribute_descr'],self.info['attribute_units'])): - unit=unit.replace('(','').replace(')','').replace('[','').replace(']','') - f.write('{:19s}\t{:25s}\t{:25s}\t{:25s}\n'.format(str(chan+1),descr[0:26],label[0:26],'['+unit+']')) - else: - - f.write('________________________________________________________________________________________________________________________\n') - f.write(' Version ID : NA\n') - f.write(' Time : 00:00:00\n') - f.write(' Date : 01:01.2001\n') - f.write('________________________________________________________________________________________________________________________\n') - f.write(' Result file : {:s}\n'.format(os.path.basename(datfilename))) - f.write('________________________________________________________________________________________________________________________\n') - f.write(' Scans Channels Time [sec] Format\n') - f.write('{:12s}{:12s}{:16s}{:s}\n'.format(str(nScans),str(nChannels),'{:.3f}'.format(SimTime),'ASCII')) - f.write('\n') - f.write('{:12s}{:31s}{:11s}{:s}'.format('Channel','Name','Unit','Variable Description\n')) - f.write('\n') - for chan,(label,descr,unit) in enumerate(zip(self.info['attribute_names'],self.info['attribute_descr'],self.info['attribute_units'])): - unit=unit.replace('(','').replace(')','').replace('[','').replace(']','') - f.write('{:12s}{:31s}{:11s}{:s}\n'.format(str(chan+1),label[0:30],unit,descr)) - f.write('________________________________________________________________________________________________________________________\n'); - -class BHAWCDatFile(HAWC2DatFile): - def __init__(self, filename=None, **kwargs): - super(HAWC2DatFile, self).__init__(filename=filename,**kwargs) - self.bHawc=False diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py deleted file mode 100644 index 684db1e15c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/hawc2_htc_file.py +++ /dev/null @@ -1,136 +0,0 @@ -""" -Wrapper around wetb to read/write htc files. -TODO: rewrite of c2_def might not be obvious -""" -from .file import File - -import numpy as np -import pandas as pd -import os - -from .wetb.hawc2.htc_file import HTCFile -from .hawc2_st_file import HAWC2StFile - -class HAWC2HTCFile(File): - - @staticmethod - def defaultExtensions(): - return ['.htc'] - - @staticmethod - def formatName(): - return 'HAWC2 htc file' - - def _read(self): - self.data = HTCFile(self.filename) - - def _write(self): - self.data.save(self.filename) - - def __repr__(self): - s='<{} object>\n'.format(type(self).__name__) - s+='| Attributes:\n' - s+='| - data: HTCFile with keys: {}`\n'.format(list(self.data.keys())) - s+='| Derived attributes:\n' - s+='| * bodyNames: {}\n'.format(self.bodyNames) - s+='| * bodyDict: dict with keys bodyNames\n' - s+='| Methods: bodyByName, bodyC2, setBodyC2\n' - return s - - @property - def bodyNames(self): - return list(self.bodyDict.keys()) - - @property - def bodyDict(self): - struct = self.data.new_htc_structure - bodyKeys = [k for k in struct.keys() if k.startswith('main_body')] - #print('>>> keys', struct.keys()) - bdDict={} - for k in bodyKeys: - bodyName = struct[k].name[0] - bdDict[bodyName] = struct[k] - return bdDict - - def bodyByName(self, bodyname): - """ return body inputs given a body name""" - bodyDict= self.bodyDict - if bodyname not in bodyDict.keys(): - raise Exception('No body found with name {} in file {}'.format(bodyname,self.filename)) - return bodyDict[bodyname] - - def bodyC2(self, bdy): - """ return body C2_def given body inputs""" - try: - nsec = bdy.c2_def.nsec[0] - except: - raise Exception('body has no c2_def section') - val = np.array([bdy.c2_def[k].values[0:] for k in bdy.c2_def.keys() if k.startswith('sec')]) - val = val.reshape((-1,5)).astype(float) - val = val[np.argsort(val[:,0]),:] - return val - - def setBodyC2(self, bdy, val): - """ set body C2_def given body inputs and new c2def""" - # TODO different number of section - nsec = bdy.c2_def.nsec[0] - nsec_new = val.shape[0] - sec_keys = [k for k in bdy.c2_def.keys() if k.startswith('sec')] - bdy.c2_def.nsec = nsec_new - if nsec != nsec_new: - if nsec_new -Ly/2 but we flip this to -Ly/2 -> Ly/2 - """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - if N is None: - # try to infer N's from filename with format 'stringN1xN2xN3' - basename = os.path.splitext(os.path.basename(self.filename))[0] - splits = basename.split('x') - temp = re.findall(r'\d+', basename) - res = list(map(int, temp)) - if len(res)>=3: - N=res[-3:] - else: - raise BrokenFormatError('Reading a Mann box requires the knowledge of the dimensions. The dimensions can be inferred from the filename, for instance: `filebase_1024x32x32.u`. Try renaming your file such that the three last digits are the dimensions in x, y and z.') - nx,ny,nz=N - - def _read_buffered(): - data=np.zeros((nx,ny,nz),dtype=np.float32) - with open(self.filename, mode='rb') as f: - for ix in range(nx): - Buffer = np.frombuffer(f.read(4*ny*nz), dtype=np.float32) # 4-bytes - data[ix,:,:] = np.flip(Buffer.reshape((ny,nz)),0) - return data - - def _read_nonbuffered(): - data = np.fromfile(self.filename, np.dtype(' -Ly/2 - # So we flip the y-axis, so that the field is consistent with typical y values - return np.flip(data, 1) # i.e. data=data[:,::-1,:] - -# self['field']= _read_nonbuffered() - self['field']= _read_buffered() - self['dy']=dy - self['dz']=dz - self['y0']=y0 - self['z0']=z0 - self['zMid']=zMid - - def write(self, filename=None): - """ Write mann box """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - nx,ny,nz = self['field'].shape - sfmt='<{:d}f'.format(ny*nz) - with open(self.filename, mode='wb') as f: - for ix in np.arange(nx): - data = np.flip(self['field'][ix,:,:],0).ravel() # We have to flip the y axis again - f.write(struct.pack(sfmt, *data)) - - - def __repr__(self): - s='<{} object> with keys:\n'.format(type(self).__name__) - s+='| - filename: {}\n'.format(self.filename) - s+='| - field: shape {}x{}x{}\n'.format(self['field'].shape[0],self['field'].shape[1],self['field'].shape[2]) - s+='| min: {}, max: {}, mean: {} \n'.format(np.min(self['field']), np.max(self['field']), np.mean(self['field'])) - s+='| - dy, dz: {}, {}\n'.format(self['dy'], self['dz']) - s+='| - y0, z0 zMid: {}, {}, {}\n'.format(self['y0'], self['z0'], self['zMid']) - z=self.z - y=self.y - s+='| * y: [{} ... {}], dy: {}, n: {} \n'.format(y[0],y[-1],self['dy'],len(y)) - s+='| * z: [{} ... {}], dz: {}, n: {} \n'.format(z[0],z[-1],self['dz'],len(z)) - s+='|useful functions:\n' - s+='| - t(dx, U)\n' - s+='| - valuesAt(y,z), vertProfile, fromTurbSim(*), _iMid()\n' - return s - - - @property - def z(self): - zmax = self['z0'] + (self['field'].shape[2]-1+0.1)*self['dz'] - z = np.arange(self['z0'], zmax, self['dz']) - if self['zMid'] is not None: - z+= self['zMid']-np.mean(z) - return z - - @property - def y(self): - if self['y0'] is not None: - ymax = self['y0'] + (self['field'].shape[1]-1+0.1)*self['dy'] - y = np.arange(self['y0'], ymax, self['dy']) - else: - ymax = (self['field'].shape[1]-1+0.1)*self['dy'] - y = np.arange(0, ymax, self['dy']) - y -= np.mean(y) - return y - - def t(self, dx, U): - # 1.5939838 dx - distance (in meters) between points in the x direction (m) - # 99.5 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) - # 6.26 URef - Mean u-component wind speed at the reference height (m/s) - dt = dx/U - nt = self['field'].shape[0] - return np.arange(0, dt*(nt-0.5), dt) - - # --------------------------------------------------------------------------------} - # --- Extracting relevant data - # --------------------------------------------------------------------------------{ - def valuesAt(self, y, z, method='nearest'): - """ return wind speed time series at a point """ - if method == 'nearest': - iy, iz = self.closestPoint(y, z) - u = self['field'][:,iy,iz] - else: - raise NotImplementedError() - return u - - def closestPoint(self, y, z): - iy = np.argmin(np.abs(self.y-y)) - iz = np.argmin(np.abs(self.z-z)) - return iy,iz - - def _iMid(self): - _, ny, nz = self['field'].shape - return int(ny/2), int(nz/2) - - @property - def vertProfile(self): - iy, iz = self._iMid() - m = np.mean(self['field'][:,iy,:], axis=0) - s = np.std (self['field'][:,iy,:], axis=0) - return self.z,m,s - - - def toDataFrame(self): - dfs={} - ny = len(self.y) - nz = len(self.z) - # Index at mid box - iy,iz = self._iMid() - - # Mean vertical profile - z, m, s = self.vertProfile - ti = s/m*100 - cols=['z_[m]','vel_[m/s]','sigma_[m/s]','TI_[%]'] - data = np.column_stack((z,m[:],s[:],ti[:])) - dfs['VertProfile'] = pd.DataFrame(data = data ,columns = cols) - - # Mid time series - u = self['field'][:,iy,iz] - cols=['t/T_[-]','vel_[m/s]'] - fake_t = np.linspace(0, 1, len(u)) - data = np.column_stack((fake_t,u[:])) - dfs['ZMidLine'] = pd.DataFrame(data = data ,columns = cols) - - - # ZMin YEnd time series - u = self['field'][:,-1,iz] - cols=['t/T_[-]','vel_[m/s]'] - fake_t = np.linspace(0, 1, len(u)) - data = np.column_stack((fake_t,u[:])) - dfs['ZMidYEndLine'] = pd.DataFrame(data = data ,columns = cols) - - # ZMin YStart time series - u = self['field'][:,0,iz] - cols=['t/T_[-]','vel_[m/s]'] - fake_t = np.linspace(0, 1, len(u)) - data = np.column_stack((fake_t,u[:])) - dfs['ZMidYStartLine'] = pd.DataFrame(data = data ,columns = cols) - - - -# # Mid crosscorr y -# y, rho_uu_y, rho_vv_y, rho_ww_y = self.crosscorr_y() -# cols = ['y_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] -# data = np.column_stack((y, rho_uu_y, rho_vv_y, rho_ww_y)) -# dfs['Mid_xcorr_y'] = pd.DataFrame(data = data ,columns = cols) -# -# # Mid crosscorr z -# z, rho_uu_z, rho_vv_z, rho_ww_z = self.crosscorr_z() -# cols = ['z_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] -# data = np.column_stack((z, rho_uu_z, rho_vv_z, rho_ww_z)) -# dfs['Mid_xcorr_z'] = pd.DataFrame(data = data ,columns = cols) -# -# # Mid csd -# fc, chi_uu, chi_vv, chi_ww = self.csd_longi() -# cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] -# data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) -# dfs['Mid_csd_longi'] = pd.DataFrame(data = data ,columns = cols) -# -# # Mid csd -# fc, chi_uu, chi_vv, chi_ww = self.csd_lat() -# cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] -# data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) -# dfs['Mid_csd_lat'] = pd.DataFrame(data = data ,columns = cols) -# -# # Mid csd -# fc, chi_uu, chi_vv, chi_ww = self.csd_vert() -# cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] -# data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) -# dfs['Mid_csd_vert'] = pd.DataFrame(data = data ,columns = cols) - return dfs - - - - # Useful converters - def fromTurbSim(self, u, icomp=0, removeConstant=None, removeAllMean=False): - """ - Assumes: - u (3 x nt x ny x nz) - Removes the mean of the turbsim file for the "u" component. - """ - if icomp==0: - if removeAllMean is True: - self['field'] = u[icomp, :, : ,: ]-np.mean(u[icomp,:,:,:],axis=0) - elif removeConstant is not None: - self['field'] = u[icomp, :, : ,: ]-removeConstant - else: - self['field'] = u[icomp, :, : ,: ] - else: - self['field'] = u[icomp, :, : ,: ] - return self - -if __name__=='__main__': - mb = MannBoxFile('mini-u_1024x32x32.bin') -# mb = MannBoxFile('mann_bin/mini-u.bin', N=(2,4,8)) -# F1=mb['field'].ravel() -# mb.write('mann_bin/mini-u-out.bin') -# -# mb2= MannBoxFile('mann_bin/mini-u-out.bin', N=(2,4,8)) -# F2=mb2['field'].ravel() -# print(F1-F2) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py deleted file mode 100644 index 13f1cc2c14..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mannbox_input_file.py +++ /dev/null @@ -1,191 +0,0 @@ -""" -Read/Write Mann Box input file - -""" -import os -import numpy as np -try: - from .file import File, EmptyFileError, BrokenFormatError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - File=dict - -class MannBoxInputFile(File): - def __init__(self, filename=None, **kwargs): - self.filename = None - # Default Init - self['fieldDim'] = None - self['nComp'] = None - self['nx'] = None - self['ny'] = None - self['nz'] = None - self['Lx'] = None - self['Ly'] = None - self['Lz'] = None - self['type'] = None - self['U'] = None - self['z'] = None - self['zNone'] = None - self['spectrum'] = None - # Basic - self['alpha_eps'] = None - self['L'] = None - self['Gamma'] = None - self['seed'] = -1 - self['file_u'] = None - self['file_v'] = None - self['file_w'] = None - for k,v in kwargs.items(): - print('>>> Setting',k,v) - - if filename: - self.read(filename=filename) - - def read(self, filename): - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - with open(self.filename) as f: - print('IO: Reading Mann input file: '+self.filename) - self['fieldDim'] = int(f.readline()) - self['nComp'] = int(f.readline()) - if(self['nComp']==3): - self['nx'] = int(f.readline()) - self['ny'] = int(f.readline()) - self['nz'] = int(f.readline()) - self['Lx'] = float(f.readline()) - self['Ly'] = float(f.readline()) - self['Lz'] = float(f.readline()) - else: - raise Exception('nComp=2') - self['type']=f.readline().strip() - if(self['type']=='basic'): - self['alpha_eps'] = float(f.readline()) - self['L'] = float(f.readline()) - self['Gamma'] = float(f.readline()) - else: - raise Exception('not basic') - self['seed']=int(f.readline()) - if(self['nComp']>=1): - self['file_u']=f.readline().strip() - if(self['nComp']>=2): - self['file_v']=f.readline().strip() - if(self['nComp']>=3): - self['file_w']=f.readline().strip() - - def write(self, filename): - """ Write mann box """ - if filename: - self.filename = filename - - self.defaultFileNames(self.filename) - - with open(self.filename, 'w') as f: - f.write(str(self['fieldDim'])+'\n') - f.write(str(self['nComp'])+'\n') - if(self['nComp']==3): - f.write(str(self['nx'])+'\n') - f.write(str(self['ny'])+'\n') - f.write(str(self['nz'])+'\n') - f.write(str(self['Lx'])+'\n') - f.write(str(self['Ly'])+'\n') - f.write(str(self['Lz'])+'\n') - else: - raise Exception('nComp=2') - - f.write(self['type']+'\n') - if(self['type']=='basic'): - f.write(str(self['alpha_eps'])+'\n'); - f.write(str(self['L'])+'\n'); - f.write(str(self['Gamma'])+'\n'); - else: - raise Exception('not basic') - - f.write(str(self['seed'])+'\n'); - if(self['nComp']>=1): - f.write(self['file_u']+'\n'); - if(self['nComp']>=2): - f.write(self['file_v']+'\n'); - if(self['nComp']>=3): - f.write(self['file_w']+'\n'); - - def defaultFileNames(self, inpfile): - base = os.path.splitext(os.path.basename(inpfile))[0] - nx,ny,nz = self['nx'], self['ny'], self['nz'] - self['file_u'] = base+'_{}x{}x{}.u'.format(nx,ny,nz) - self['file_v'] = base+'_{}x{}x{}.v'.format(nx,ny,nz) - self['file_w'] = base+'_{}x{}x{}.w'.format(nx,ny,nz) - -# def set3Disotropic(self,nx,ny,nz,Lx,Ly,Lz,alpha_eps,L): -# self.fieldDim=3; -# self.NComp=3; -# self.nx=nx; -# self.ny=ny; -# self.nz=nz; -# self.Lx=Lx; -# self.Ly=Ly; -# self.Lz=Lz; -# self.alpha_eps=alpha_eps; -# self.L=L; -# # Isotropic -# self.Gamma=0.0; -# self.type='basic'; -# -# def auto_file_names(self,folder=''): -# if folder is None: -# folder='' -# import os -# if(self.type=='basic' and self.Gamma==0): -# if self.fieldDim==3: -# filenameBase='Isotropic3D_'+str(self.nx)+'_'+str(self.ny)+'_'+str(self.nz)+'_h'+str(int(100*float(self.Lx)/float(self.nx-1))/100.) -# self.filename = os.path.join(folder,filenameBase+'.maninp') -# self.file_u = os.path.join(folder,filenameBase+'_u.dat') -# self.file_v = os.path.join(folder,filenameBase+'_v.dat') -# self.file_w = os.path.join(folder,filenameBase+'_w.dat') -# - - def __repr__(self): - s = '<{} object> with keys:\n'.format(type(self).__name__) - for k,v in self.items(): - s += '{:15s}: {}\n'.format(k,v) - return s - - - -# -# def get_outfile_u(self): -# return self.file_u -# def get_outfile_v(self): -# return self.file_v -# def get_outfile_w(self): -# return self.file_w -# -# if __name__ == "__main__": -# import sys -# if len(sys.argv)>1: -# print 'called with: ', int(sys.argv[1]) -# -# nx=1024; -# ny=256; -# nz=256; -# Lx=100; -# Ly=10; -# Lz=10; -# alpha_eps=0.01 -# L=10; -# -# inp=MannInputFile(); -# inp.set3Disotropic(nx,ny,nz,Lx,Ly,Lz,alpha_eps,L) -# inp.auto_file_names() -# inp.write(); -# # inp2=MannInputFile(inp.filename); -# # inp2.filename='out10.inp' -# # inp2.write() -# diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py deleted file mode 100644 index 2ed922d3c0..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/matlabmat_file.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -Input/output class for the matlab .mat fileformat -""" -import numpy as np -import pandas as pd -import os -import scipy.io - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File=dict - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - -class MatlabMatFile(File): - """ - Read/write a mat file. The object behaves as a dictionary. - - Main methods - ------------ - - read, write, toDataFrame, keys - - Examples - -------- - f = MatlabMatFile('file.mat') - print(f.keys()) - print(f.toDataFrame().columns) - - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.mat'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'Matlab mat file' - - @staticmethod - def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - mfile = scipy.io.loadmat(self.filename) - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - #with open(self.filename,'w') as f: - # f.write(self.toString) - raise NotImplementedError() - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - # --- Example (returning one DataFrame): - # return pd.DataFrame(data=np.zeros((10,2)),columns=['Col1','Col2']) - # --- Example (returning dict of DataFrames): - #dfs={} - #cols=['Alpha_[deg]','Cl_[-]','Cd_[-]','Cm_[-]'] - #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) - #dfs['Polar1'] = pd.DataFrame(data=..., columns=cols) - # return dfs - raise NotImplementedError() - - # --- Optional functions - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - #s+='|Main keys:\n' - #s+='| - ID: {}\n'.format(self['ID']) - #s+='| - data : shape {}\n'.format(self['data'].shape) - s+='|Main methods:\n' - s+='| - read, write, toDataFrame, keys' - return s - - def toString(self): - """ """ - s='' - return s - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py deleted file mode 100644 index 0650c0e12b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/mini_yaml.py +++ /dev/null @@ -1,166 +0,0 @@ -import numpy as np - -def yaml_read(filename=None, dictIn=None, lines=None, text=None): - """ - read yaml files only supports: - - Key value pairs: - key: value - - Key with lists of lists: - key: - - [0,1] - - [0,1] - - Comments are stripped based on first # found (in string or not) - - Keys are found based on first : found (in string or not) - """ - # --- swtich depending on what the user provided - if filename is not None: - # Read all lines at once - with open(filename, 'r', errors="surrogateescape") as f: - lines=f.read().splitlines() - elif text is not None: - lines = text.split('\n') - elif lines is not None: - # OK - pass - - if dictIn is None: - d=dict() - else: - d=dictIn - - # --- Loop on lines - i=0 - while i0: - for i in np.arange(iStart,iEnd+1): - L,_ = _readInlineList(lines[i].lstrip()[1:], mytype=mytype) - M[i-iStart,:] = L - return M, iEnd+1 - -def _readInlineList(line, mytype=None): - """ - Parse a simple list of int, float or string - [a, b, c] - [a, b, c,] - """ - L = _cleanComment(line.replace(']','').replace('[','')).strip().rstrip(',').strip() - if len(L)==0: - return np.array([]), float - L=L.split(',') - L = np.asarray(L) - if mytype is None: - ## try to detect type - try: - L=L.astype(int) - mytype=int - except: - try: - L=L.astype(float) - mytype=float - except: - try: - L=L.astype(str) - mytype=str - L=np.array([c.strip() for c in L]) - except: - raise Exception('Cannot parse list from string: >{}<'.format(line)) - else: - try: - L = L.astype(mytype) - if mytype==str: - L=np.array([c.strip() for c in L]) - except: - raise Exception('Cannot parse list of type {} from string: >{}<'.format(mytype, line)) - - # - return L, mytype - - -if __name__=='__main__': -# #d=yaml_read('test.SD.sum.yaml') - text = """ -# Comment -IS1: 40567 # int scalar -FS1: 40567.32 # float scalar -FA1: # Array1 - - [ 3.97887E+07, 0.00000E+00, 0.00000E+00] - - [ 0.00000E+00, 3.97887E+07, 0.00000E+00] - - [ 0.00000E+00, 0.00000E+00, 0.00000E+00] -FA2: # Array2 - - [ 1.E+00, 0.E+00, 0.E+00,] - - [ 0.E+00, 1.E+00, 0.E+00,] - - [ 0.E+00, 0.E+00, 1.E+00,] -FL1: [ 0.0, 0.0, 1.0 ] # FloatList1 -FL2: [ 0.0, 0.0, 1.0,] # FloatList2 -SL2: [ aa, bb , cc, dd, ] #string list -""" - text=""" -EL1: [ ] #empty list -EL2: #empty list2 - - [ ] # empty list -""" - d=yaml_read(text=text) - print(d) - for k,v, in d.items(): - if hasattr(v,'__len__'): - if len(v)>0: - print('{:12s} {:20s} {}'.format(k, str(type(v[0]))[6:], v[0])) - else: - print('{:12s} {:20s} {}'.format(k, str(type(v))[6:], v)) - else: - print('{:12s} {:20s} {}'.format(k, str(type(v))[6:], v)) - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py deleted file mode 100644 index 7d69b45e43..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/netcdf_file.py +++ /dev/null @@ -1,40 +0,0 @@ -import pandas as pd - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - -class NetCDFFile(File): - - @staticmethod - def defaultExtensions(): - return ['.nc'] - - @staticmethod - def formatName(): - return 'NetCDF file (<=2D)' - - def _read(self): - try: - import xarray as xr - except: - raise Exception('Python module `xarray` not installed') - - self.data=xr.open_dataset(self.filename) - - def _write(self): - self.data.to_netcdf(self.filename) - - def _toDataFrame(self): - dfs={} - for k in self.data.keys(): - # Not pretty... - if len(self.data[k].shape)==2: - dfs[k]=pd.DataFrame(data=self.data[k].values) - elif len(self.data[k].shape)==1: - dfs[k]=pd.DataFrame(data=self.data[k].values) - return dfs - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py deleted file mode 100644 index 7cf8dd159a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/parquet_file.py +++ /dev/null @@ -1,48 +0,0 @@ -import pandas as pd - -from .file import File - - -class ParquetFile(File): - - @staticmethod - def defaultExtensions(): - return ['.parquet'] - - @staticmethod - def formatName(): - return 'Parquet file' - - def __init__(self,filename=None,**kwargs): - self.filename = filename - if filename: - self.read(**kwargs) - - - def _read(self): - """ use pandas read_parquet function to read parquet file""" - self.data=pd.read_parquet(self.filename) - - def _write(self): - """ use pandas DataFrame.to_parquet method to write parquet file """ - self.data.to_parquet(path=self.filename) - - def toDataFrame(self): - #already stored as a data frame in self.data - #just return self.data - return self.data - - def fromDataFrame(self, df): - #data already in dataframe - self.data = df - - def toString(self): - """ use pandas DataFrame.to_string method to convert to a string """ - s=self.data.to_string() - return s - - def __repr__(self): - s ='Class Parquet (attributes: data)\n' - return s - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py deleted file mode 100644 index 97bd289ad1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/pickle_file.py +++ /dev/null @@ -1,174 +0,0 @@ -""" -Input/output class for the pickle fileformats -""" -import numpy as np -import pandas as pd -import os -import pickle -import builtins - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File=dict - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - -class PickleFile(File): - """ - Read/write a pickle file. The object behaves as a dictionary. - - Main methods - ------------ - - read, write, toDataFrame, keys - - Examples - -------- - f = PickleFile('file.pkl') - print(f.keys()) - print(f.toDataFrame().columns) - - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.pkl'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'Pickle file' - - @staticmethod - def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low - - - def __init__(self, filename=None, data=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename and not data: - self.read(**kwargs) - if data: - self._setData(data) - if filename: - self.write() - - def _setData(self, data): - if isinstance(data, dict): - for k,v in data.items(): - self[k] = v - else: - if hasattr(data, '__dict__'): - self.update(data.__dict__) - else: - self['data'] = data - - def addDict(self, data): - self._setData(data) - - def additem(self, key, data): - self[key]=data - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # Reads self.filename and stores data into self. Self is (or behaves like) a dictionary - # If pickle data is a dict we store its keys in self, otherwise with store the pickle in the "data" key - d = pickle.load(open(self.filename, 'rb')) - self._setData(d) - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - with open(self.filename, 'wb') as fid: - pickle.dump(dict(self), fid) - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - dfs={} - for k,v in self.items(): - if isinstance(v, pd.DataFrame): - dfs[k] = v - elif isinstance(v, np.ndarray): - if len(v.shape)==2: - dfs[k] = pd.DataFrame(data=v, columns=['C{}'.format(i) for i in range(v.shape[1])]) - elif len(v.shape)==1: - dfs[k] = pd.DataFrame(data=v, columns=[k]) - if len(dfs)==1: - dfs=dfs[list(dfs.keys())[0]] - return dfs - - # --- Optional functions - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - s+='|Main keys:\n' - for k,v in self.items(): - try: - s+='| - {}: type:{} shape:{}\n'.format(k,type(v),v.shape) - except: - try: - s+='| - {}: type:{} len:{}\n'.format(k,type(v), len(v)) - except: - s+='| - {}: type:{}\n'.format(k,type(v)) - s+='|Main methods:\n' - s+='| - read, write, toDataFrame, keys' - return s - - - # --- Functions speficic to filetype - def toGlobal(self, namespace=None, overwrite=True, verbose=False, force=False) : - #def toGlobal(self, **kwargs): - """ - NOTE: very dangerous, mostly works for global, but then might infect everything - - Inject variables (keys of read dict) into namespace (e.g. globals()). - By default, the namespace of the caller is used - To use the global namespace, use namespace=globals() - """ - import inspect - st = inspect.stack() - if len(st)>2: - if not force: - raise Exception('toGlobal is very dangerous, only use in isolated script. use `force=True` if you really know what you are doing') - else: - print('[WARN] toGlobal is very dangerous, only use in isolated script') - if namespace is None: - # Using parent local namespace - namespace = inspect.currentframe().f_back.f_globals - #namespace = inspect.currentframe().f_back.f_locals # could use f_globals - # Using global (difficult, overwriting won't work) It's best if the user sets namespace=globals() - # import builtins as _builtins - # namespace = _builtins # NOTE: globals() is for the package globals only, we need "builtins" - - gl_keys = list(namespace.keys()) - for k,v in self.items(): - if k in gl_keys: - if not overwrite: - print('[INFO] not overwritting variable {}, already present in global namespace'.format(k)) - continue - else: - print('[WARN] overwritting variable {}, already present in global namespace'.format(k)) - - if verbose: - print('[INFO] inserting in namespace: {}'.format(k)) - namespace[k] = v # OR do: builtins.__setattr__(k,v) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py deleted file mode 100644 index cedd941105..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/postpro.py +++ /dev/null @@ -1,2 +0,0 @@ -from pyFAST.postpro.postpro import * -print('[WARN] pyFAST.input_output.postpro was moved to pyFAST.postpro') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py deleted file mode 100644 index fc5661e576..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/raawmat_file.py +++ /dev/null @@ -1,211 +0,0 @@ -# imports -import pandas as pd -import numpy as np -import os - - -def matfile(path_file,output='pandas',path_key=None): - ''' Function to parse RAAW .mat historical files with specific data structure - - Parameter - --------- - path_file : str - File path to .mat file to read - output : str - Desired output format of 'pandas' or 'xarray' - path_key : str (optional) - File path to .csv channel_key for extra checks and consistent formatting - - Return - ------ - ds : dict - Dict with keys 'data50hz' and 'data1hz' with specified output format - ''' - from scipy.io import loadmat - - # load in the mat file - mfile = loadmat(path_file) - - # flatten the mat file - data = [[row.flat[0] for row in line] for line in mfile['DataCell']] - - # create time column for easy comparison to simulations (0-600 seconds) - time50hz = np.arange(600,step=0.02) - time1hz = np.arange(600,step=1) - names_50hz = ['time'] - names_1hz = ['time'] - dat_50hz = [time50hz] - dat_1hz = [time1hz] - # start data reorganization into lists to be converted into pandas - allnames = [] - for signal in range(mfile['DataCell'].size): - name = data[signal][0][1][0] # get signal name - allnames.append(name) - if data[signal][0][3][0][0] == 0.02: - names_50hz.append(name) - dat_50hz.append(data[signal][0][6].squeeze()) - elif data[signal][0][3][0][0] == 1: - names_1hz.append(name) - dat_1hz.append(data[signal][0][6].squeeze()) - else: - print('ERROR: '+name+' ignored!') - - # create time index for each dataframe - tstamp = np.array2string(data[signal][0][5][0], separator=',') - tstamp = tstamp.replace(' ','').replace('[','').replace(']','') - t0 = pd.to_datetime(tstamp,format='%Y,%m,%d,%H,%M,%S') - tstamp50hz = pd.date_range(start=t0,periods=30000,freq='20ms') - tstamp1hz = pd.date_range(start=t0,periods=600,freq='1s') - - if not path_key==None: - # load in list of channels - channel_key = pd.read_csv(path_key) - list_50hz = channel_key['50hz'].to_list() - list_1hz = channel_key['1hz'].dropna().to_list() - # check if file size matches channel list size - if mfile['DataCell'].size > (len(list_50hz)+len(list_1hz)): - print('WARNING: channel size in file is greater than size of channel names lists!') - # find any missing channels from file - missing50hz = list(set(list_50hz)-set(names_50hz)) - missing1hz = list(set(list_1hz)-set(names_1hz)) - - if output == 'xarray': - import xarray as xr - # add missing columns filled with NaNs - nan50 = np.empty(30000) - nan50[:] = np.nan - nan1 = np.empty(600) - nan1[:] = np.nan - try: - if missing50hz: - for x in missing50hz: dat_50hz.append(nan50) - names_50hz.append(missing50hz) - if missing1hz: - for y in missing1hz: dat_1hz.append(nan1) - names_1hz.append(missing1hz) - except: - pass - # convert lists into xarray - df50hz = xr.DataArray(np.transpose(dat_50hz), dims=('timestamp','channel'),coords={'timestamp':tstamp50hz,'channel':names_50hz}) - df1hz = xr.DataArray(np.transpose(dat_1hz), dims=('timestamp','channel'),coords={'timestamp':tstamp1hz,'channel':names_1hz}) - # store in dict - ds = {'data50hz': df50hz, 'data1hz': df1hz} - return ds - - if output == 'pandas': - # convert lists into pandas - df_50hz = pd.DataFrame(dat_50hz).T - df_50hz.columns = names_50hz - df_1hz = pd.DataFrame(dat_1hz).T - df_1hz.columns = names_1hz - df_50hz.index = tstamp50hz - df_1hz.index = tstamp1hz - try: - # add columns with missing channels filled with NaNs - for x in missing50hz: df_50hz[x] = np.nan - for y in missing1hz: df_1hz[y] = np.nan - except: - pass - # store in dict - ds = {'data50hz': df_50hz, 'data1hz': df_1hz} - return ds - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - File=dict - -class RAAWMatFile(File): - """ - Read a RAAW .mat file. The object behaves as a dictionary. - - Main methods - ------------ - - read, toDataFrame, keys - - Examples - -------- - f = RAAWMatFile('file.mat') - print(f.keys()) - print(f.toDataFrame().columns) - - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.mat'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'RAAW .mat file' - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # --- Calling (children) function to read - self._read(**kwargs) - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - # Calling (children) function to write - self._write() - - def _read(self): - """ Reads self.filename and stores data into self. Self is (or behaves like) a dictionary""" - self['data'] = matfile(self.filename,output='pandas') - - def _write(self): - """ Writes to self.filename""" - # --- Example: - #with open(self.filename,'w') as f: - # f.write(self.toString) - raise NotImplementedError() - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - return self['data'] - - # --- Optional functions - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - #s+='|Main keys:\n' - #s+='| - ID: {}\n'.format(self['ID']) - #s+='| - data : shape {}\n'.format(self['data'].shape) - s+='|Main methods:\n' - s+='| - read, toDataFrame, keys\n' - s+='|Info:\n' - d1=self['data']['data1hz'] - d5=self['data']['data50hz'] - s+='| - data1hz : {} to {} (n:{}, T:{}, dt:{})\n'.format(d1.index[0], d1.index[-1], len(d1), (d1.index[-1]-d1.index[0]).total_seconds(), (d1.index[1]-d1.index[0]).total_seconds()) - s+='| - data50hz: {} to {} (n:{}, T:{}, dt:{})\n'.format(d5.index[0], d5.index[-1], len(d5), (d5.index[-1]-d5.index[0]).total_seconds(), (d5.index[1]-d5.index[0]).total_seconds()) - return s diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py deleted file mode 100644 index b4de969d52..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_discon_file.py +++ /dev/null @@ -1,265 +0,0 @@ -""" -Input/output class for the fileformat ROSCO DISCON file -""" -import numpy as np -import pandas as pd -import os -from collections import OrderedDict - -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File=OrderedDict - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - -class ROSCODISCONFile(File): - """ - Read/write a ROSCO DISCON file. The object behaves as a dictionary. - - Main methods - ------------ - - read, write, toDataFrame, keys - - Examples - -------- - f = ROSCODISCONFile('DISCON.IN') - print(f.keys()) - print(f.toDataFrame().columns) - - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.in'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'ROSCO DISCON file' - - @staticmethod - def priority(): return 60 # Priority in weio.read fileformat list between 0=high and 100:low - - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - # --- Calling (children) function to read - _, comments, lineKeys = read_DISCON(self.filename, self) - self.comments=comments - self.lineKeys=lineKeys - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - with open(self.filename, 'w') as f: - f.write(self.toString()) - - - def toDataFrame(self): - """ Returns object into one DataFrame, or a dictionary of DataFrames""" - dfs={} - low_keys = [s.lower() for s in self.keys()] - if 'pc_gs_n' in low_keys: - M = np.column_stack([self['PC_GS_angles']*180/np.pi, self['PC_GS_KP'], self['PC_GS_KI'], self['PC_GS_KD'], self['PC_GS_TF']] ) - cols = ['Pitch_[deg]', 'KP_[-]', 'KI_[s]', 'KD_[1/s]', 'TF_[-]'] - dfs['PitchSchedule'] = pd.DataFrame(data=M, columns=cols) - if 'ps_bldpitchmin_n' in low_keys: - M = np.column_stack([self['PS_WindSpeeds'], self['PS_BldPitchMin']]) - cols = ['WindSpeed_[m/s]', 'Pitch_[deg]'] - dfs['PitchSaturation'] = pd.DataFrame(data=M, columns=cols) - if 'prc_n' in low_keys: - M = np.column_stack([self['PRC_WindSpeeds'], self['PRC_RotorSpeeds']*30/np.pi]) - cols = ['WindSpeed_[m/s]', 'RotorSpeed_[rpm]'] - dfs['PowerTracking'] = pd.DataFrame(data=M, columns=cols) - - return dfs - - # --- Optional functions - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - #s+='|Main keys:\n' - #s+='| - ID: {}\n'.format(self['ID']) - #s+='| - data : shape {}\n'.format(self['data'].shape) - s+='|Main methods:\n' - s+='| - read, write, toDataFrame, keys' - return s - - def toString(self): - """ """ - maxKeyLengh = np.max([len(k) for k in self.keys()]) - maxKeyLengh = max(maxKeyLengh, 18) - fmtKey = '{:' +str(maxKeyLengh)+'s}' - s='' - for l in self.lineKeys: - if len(l)==0: - s+='\n' - elif l.startswith('!'): - s+=l+'\n' - else: - param = l - comment = self.comments[param] - v = self[param] - sparam = '! '+fmtKey.format(param) - # NOTE: could to "param" specific outputs here - FMTs = {} - FMTs['{:<4.6f}']=['F_NotchBetaNumDen', 'F_FlCornerFreq', 'F_FlpCornerFreq', 'PC_GS_angles', 'PC_GS_KP', 'PC_GS_KI', 'PC_GS_KD', 'PC_GS_TF', 'IPC_Vramp', 'IPC_aziOffset'] - FMTs['{:<4.3e}']=['IPC_KP','IPC_KI'] - FMTs['{:<4.3f}']=['PRC_WindSpeeds', 'PRC_RotorSpeed','PS_WindSpeeds'] - FMTs['{:<4.4f}']=['WE_FOPoles_v'] - FMTs['{:<10.8f}']=['WE_FOPoles'] - FMTs['{:<10.3f}']=['PS_BldPitchMin'] - fmtFloat='{:<014.5f}' - for fmt,keys in FMTs.items(): - if param in keys: - fmtFloat=fmt - break - if type(v) is str: - sval='"{:15s}" '.format(v) - elif hasattr(v, '__len__'): - if isinstance(v[0], (np.floating, float)): - sval=' '.join([fmtFloat.format(vi) for vi in v] )+' ' - else: - sval=' '.join(['{}'.format(vi) for vi in v] )+' ' - elif type(v) is int: - sval='{:<14d} '.format(v) - elif isinstance(v, (np.floating, float)): - sval=fmtFloat.format(v) + ' ' - else: - sval='{} '.format(v) - s+='{}{}{}\n'.format(sval, sparam, comment) - return s - - - - - - -# Some useful constants -pi = np.pi -rad2deg = np.rad2deg(1) -deg2rad = np.deg2rad(1) -rpm2RadSec = 2.0*(np.pi)/60.0 -RadSec2rpm = 60/(2.0 * np.pi) - -def write_DISCON(turbine, controller, param_file='DISCON.IN', txt_filename='Cp_Ct_Cq.txt', rosco_vt = {}): - """ - Print the controller parameters to the DISCON.IN input file for the generic controller - - Parameters: - ----------- - turbine: class - Turbine class containing turbine operation information (ref speeds, etc...) - controller: class - Controller class containing controller operation information (gains, etc...) - param_file: str, optional - filename for parameter input file, should be DISCON.IN - txt_filename: str, optional - filename of rotor performance file - """ - - # Get ROSCO var tree if not provided - if not rosco_vt: - rosco_vt = DISCON_dict(turbine, controller, txt_filename) - - print('Writing new controller parameter file parameter file: %s.' % param_file) - # Should be obvious what's going on here... - file = open(param_file,'w') - - # Write Open loop input - if rosco_vt['OL_Mode'] and hasattr(controller, 'OpenLoop'): - write_ol_control(controller) - -def read_DISCON(DISCON_filename, DISCON_in = None): - ''' - Read the DISCON input file. - Adapted from ROSCO_Toolbox, https:github.com/NREL/ROSCO - - Parameters: - ---------- - DISCON_filename: string - Name of DISCON input file to read - - Returns: - -------- - DISCON_in: Dict - Dictionary containing input parameters from DISCON_in, organized by parameter name - ''' - - if DISCON_in is None: - DISCON_in = OrderedDict() - comments={} - lineKeys=[] - with open(DISCON_filename) as discon: - for line in discon: - line=line.strip() - # empty lines - if len(line)==0: - lineKeys.append('') - continue - # Pure comments - if line[0] == '!': - lineKeys.append(line) - continue - - if (line.split()[1] != '!'): # Array valued entries - sps = line.split() - array_length = sps.index('!') - param = sps[array_length+1] - values = np.array( [float(x) for x in sps[:array_length]] ) - else: # All other entries - param = line.split()[2] - value = line.split()[0] - # Remove printed quotations if string is in quotes - if (value[0] == '"') or (value[0] == "'"): - values = value[1:-1] - else: - if value.find('.')>0: - values = float(value) - else: - values = int(value) - DISCON_in[param] = values - lineKeys.append(param) - - sp = line.split('!') - comment = sp[1].strip() - comment = comment[len(param):].strip() - comments [param] = comment - - return DISCON_in, comments, lineKeys - - -if __name__ == '__main__': - filename = 'DISCON.in' - rd = ROSCODISCONFile(filename) - #print(rd.keys()) -# print(rd.toString()) - rd.write(filename+'_WEIO') - print(rd.toDataFrame()) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py deleted file mode 100644 index c075ef34dc..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/rosco_performance_file.py +++ /dev/null @@ -1,438 +0,0 @@ -""" -Input/output class for the ROSCO performance (Cp,Ct,Cq) fileformat -""" -import numpy as np -import pandas as pd -import os - -try: - from .file import File, EmptyFileError, WrongFormatError, BrokenFormatError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - File=dict - -class ROSCOPerformanceFile(File): - """ - Read/write a ROSCO performance file. The object behaves as a dictionary. - - Main methods - ------------ - - read, write, toDataFrame, keys - - Examples - -------- - f = ROSCOPerformanceFile('Cp_Ct_Cq.txt') - print(f.keys()) - print(f.toDataFrame().columns) - fig = f.plotCP3D() - CPmax, tsr_max, pitch_max = f.CPmax() - CP = fCP([0, 1], [5, 5]) - CT = fCT([0, 1], [5, 5]) - - """ - - @staticmethod - def defaultExtensions(): - """ List of file extensions expected for this fileformat""" - return ['.txt'] - - @staticmethod - def formatName(): - """ Short string (~100 char) identifying the file format""" - return 'ROSCO Performance file' - - def __init__(self, filename=None, pitch=None, tsr=None, WS=None, CP=None, CT=None, CQ=None, name='',**kwargs): - """ Class constructor. If a `filename` is given, the file is read. - Otherwise values may be provided directly - - INPUTS: - - filename: input file for ROSCO Performance file - OR - - pitch: pitch angle [deg], array of length nPitch - - tsr: tip-speed ratio [-], array of length nTSR - - CP,CT,CQ: aerodynamic coefficients, arrays of shape nTSR x nPitch - CQ is optional since CP = tsr*CQ - - name: wind turbine name - """ - self.filename = filename - self.name = name # Turbine name - self['pitch'] = pitch - self['TSR'] = tsr - self['WS'] = WS - self['CP'] = CP - self['CT'] = CT - self['CQ'] = CQ - - if filename: - self.read(**kwargs) - - if self['pitch'] is not None: - self.checkConsistency() - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided - stores data into self. - self is (or behaves like) a dictionary""" - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - pitch, TSR, WS, CP, CT, CQ = load_from_txt(self.filename) - self['pitch'] = pitch - self['TSR'] = TSR - self['WS'] = WS - self['CP'] = CP - self['CT'] = CT - self['CQ'] = CQ - - def write(self, filename=None): - """ Rewrite object to file, or write object to `filename` if provided """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - # Sanity - self.checkConsistency() - # Write - write_rotor_performance(self.filename, self['pitch'], self['TSR'], self['CP'],self['CT'], self['CQ'], self['WS'], TurbineName=self.name) - - def checkConsistency(self): - """ - Check that data makes sense. - in particular, check if CP=lambda CQ - """ - if self['WS'] is not None: - if not hasattr(self['WS'],'__len__' ): - self['WS'] = np.array([self['WS']]).astype(float) - - CQ = self['CQ'] - CP = self['CP'] - tsr = np.asarray(self['TSR']) - TSR = np.tile(tsr.flatten(), (len(self['pitch']),1)).T - if CQ is None and CP is not None: - CQ = CP/TSR - print('[INFO] Computing CQ from CP') - elif CQ is not None and CP is None: - CP = CQ*TSR - print('[INFO] Computing CP from CQ') - elif CQ is not None and CP is not None: - pass - else: - raise Exception('CP and CQ cannot be None') - # Check consistency - CP2 = CQ*TSR - deltaCP = np.abs(CP-CP2)/0.5*100 # relative difference in %, for a mean CP of 0.5 - if np.max(deltaCP)>5: # more than 5% - raise Exception('Inconsitency between power coefficient and torque coefficient') - self['CP'] = CP - self['CQ'] = CQ - - def toDataFrame(self): - """ Returns object into dictionary of DataFrames""" - dfs={} - columns = ['TSR_[-]']+['Pitch_{:.2f}_[deg]'.format(p) for p in self['pitch']] - dfs['CP'] = pd.DataFrame(np.column_stack((self['TSR'], self['CP'])), columns=columns) - dfs['CT'] = pd.DataFrame(np.column_stack((self['TSR'], self['CT'])), columns=columns) - dfs['CQ'] = pd.DataFrame(np.column_stack((self['TSR'], self['CQ'])), columns=columns) - return dfs - - # --- Optional functions - def toAeroDisc(self, filename, R, csv=False, WS=None, omegaRPM=10): - """ Convert to AeroDisc Format - INPUTS: - - filename: filename to be written - - R: rotor radius [m] - - csv: if True write to CSV format, else, use OpenFAST .dat format - either: - - WS: wind speed [m/s] - or - - omegaRPM: rotational speed [rpm] - - Logic to determine wind speed or rotational speed: - - If user provide a wind speed, we use it. Omega is determined from TSR and WS - - If user provide a rotational speed, we use it. WS is determined from TSR and omega - - If ROSCO file contain one wind speed, we use it. - - Otherwise, we don't know what to do so we raise an exception - """ - # --- Logic to determine wind speed or rotational speed - if WS is not None: - WS = WS - elif omegaRPM is not None: - WS = None - omega = omegaRPM*(2*np.pi)/60 - elif self['WS'] is not None and len(self['WS'])==1: - WS = self['WS'][0] - else: - raise Exception('Provide either a wind speed (`WS`) or a rotational speed (`omegaRPM`)') - - with open(filename,'w') as fid: - # Header - if csv: - fid.write("TSR_(-), RtSpd_(rpm) , VRel_(m/s) , Skew_(deg) , Pitch_(deg) , C_Fx_(-) , C_Fy_(-) , C_Fz_(-) , C_Mx_(-) , C_My_(-) , C_Mz_(-)\n") - else: - fid.write(' TSR RtSpd VRel Skew Pitch C_Fx C_Fy C_Fz C_Mx C_My C_Mz\n') - fid.write(' (-) (rpm) (m/s) (deg) (deg) (-) (-) (-) (-) (-) (-)\n') - if csv: - FMT='{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f},{:10.4f}\n' - else: - FMT='{:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f}\n' - # Loop on oper - for j,tsr in enumerate(self['TSR']): - if WS is None: - U0 = omega*R/tsr - else: - U0 = WS - omega = tsr*U0/R - omegaRPM = omega*60/(2*np.pi) - for i,p in enumerate(self['pitch']): - CP=self['CP'][j,i] - CT=self['CT'][j,i] - CQ=self['CQ'][j,i] - skew=0 - cfx=CT - cfy=0 - cfz=0 - cmx=CQ - cmy=0 - cmz=0 - fid.write(FMT.format(tsr, omegaRPM, U0, skew, p, cfx,cfy,cfz,cmx,cmy,cmz)) - - def computeWeights(self): - """ Compute interpolant weights for fast evaluation of CP and CT at intermediate values""" - CP = self['CP'].copy() - CT = self['CT'].copy() - CP = CP[CP<0]=0 - CT = CT[CT<0]=0 - self._fCP = interp2d_pairs(self['pitch'], self['TSR'], CP, kind='cubic') - self._fCT = interp2d_pairs(self['pitch'], self['TSR'], CT, kind='cubic') - - def fCP(self, pitch, tsr): - """ Compute CP for given pitch and tsr, where inputs can be scalar, arrays or matrices""" - if self._fCP is None: - self.computeWeights() - return self.fCP(pitch, tsr) - - def fCT(self, pitch, tsr): - """ Compute CT for given pitch and tsr, where inputs can be scalar, arrays or matrices""" - if self._fCT is None: - self.computeWeights() - return self.fCT(pitch, tsr) - - def CPmax(self): - """ return values at CPmax - TODO: interpolation instead of nearest value.. - """ - CP = self['CP'] - i,j = np.unravel_index(CP.argmax(), CP.shape) - CPmax, tsr_max, pitch_max = CP[i,j], self['TSR'][i], self['pitch'][j] - - return CPmax, tsr_max, pitch_max - - def plotCP3D(self, plotMax=True, trajectory=None): - """ - Plot 3D surface of CP - Optionally plot the maximum and a controller trajectory - """ - import matplotlib.pyplot as plt - from mpl_toolkits.mplot3d import Axes3D - from matplotlib import cm - # Data - LAMBDA, PITCH = np.meshgrid(self['TSR'], self['pitch']) - CP = self['CP'].copy() - CP[CP<0]=0 # - CP_max, tsr_max, pitch_max = self.CPmax() - # plot - fig = plt.figure() - ax = fig.gca(projection='3d') - surf = ax.plot_surface(LAMBDA, PITCH, np.transpose(CP), cmap=cm.coolwarm, linewidth=0, antialiased=True,alpha=0.8, label='$C_p$') - if plotMax: - ax.scatter(tsr_max, pitch_max, CP_max, c='k', marker='o', s=50, label=r'$C_{p,max}$') - if trajectory is not None: - if len(trajectory)==3: - tsr_, pitch_, CP_ = trajectory - else: - tsr_, pitch_ = trajectory - CP_ = self.fCP(tsr_, pitch_) - ax.plot_surface(tsr_, pitch_, CP_, 'k-', linewidth=1 ) - #fig.tight_layout() - #fig.colorbar(surf, shrink=0.5, aspect=15) - ax.view_init(elev=20., azim=26) - ax.set_xlabel('TSR [-]') - ax.set_ylabel('Pitch [deg]') - ax.set_zlabel(r'Power coefficient [-]') - return fig - - def __repr__(self): - """ String that is written to screen when the user calls `print()` on the object. - Provide short and relevant information to save time for the user. - """ - s='<{} object>:\n'.format(type(self).__name__) - s+='|Main attributes:\n' - s+='| - filename: {}\n'.format(self.filename) - # --- Example printing some relevant information for user - s+='|Main keys:\n' - s+='| - pitch: {} values: {}\n'.format(len(self['pitch']) if self['pitch'] is not None else 0, self['pitch']) - s+='| - TSR: {} values: {}\n'.format(len(self['TSR'] ) if self['TSR'] is not None else 0, self['TSR'] ) - s+='| - WS: {} values: {}\n'.format(len(self['WS'] ) if self['WS'] is not None else 0, self['WS'] ) - if self['CP'] is not None: - s+='| - CP,CT,CQ : shape {}\n'.format(self['CP'].shape) - s+='|Main methods:\n' - s+='| - read, write, toDataFrame, keys\n' - s+='| - CPmax, plotCP3d, fCP, fCT, toAeroDisc' - return s - - - - -def load_from_txt(txt_filename): - ''' - Adapted from ROSCO_toolbox/utitities.py by Nikhar Abbas - https://github.com/NREL/ROSCO - Apache 2.0 License - - Load rotor performance data from a *.txt file. - Parameters: - ----------- - txt_filename: str - Filename of the text containing the Cp, Ct, and Cq data. This should be in the format printed by the write_rotorperformance function - ''' - - pitch = None - TSR = None - WS = None - - with open(txt_filename) as pfile: - for iline, line in enumerate(pfile): - # Read Blade Pitch Angles (degrees) - if 'Pitch angle' in line: - pitch = np.array([float(x) for x in pfile.readline().strip().split()]) - - # Read Tip Speed Ratios (rad) - elif 'TSR' in line: - TSR = np.array([float(x) for x in pfile.readline().strip().split()]) - - #Read WS - elif 'Wind speed' in line: - WS = np.array([float(x) for x in pfile.readline().strip().split()]) - - # Read Power Coefficients - elif 'Power' in line: - pfile.readline() - Cp = np.empty((len(TSR),len(pitch))) - for tsr_i in range(len(TSR)): - Cp[tsr_i] = np.array([float(x) for x in pfile.readline().strip().split()]) - - # Read Thrust Coefficients - elif 'Thrust' in line: - pfile.readline() - Ct = np.empty((len(TSR),len(pitch))) - for tsr_i in range(len(TSR)): - Ct[tsr_i] = np.array([float(x) for x in pfile.readline().strip().split()]) - - # Read Torque Coefficients - elif 'Torque' in line: - pfile.readline() - Cq = np.empty((len(TSR),len(pitch))) - for tsr_i in range(len(TSR)): - Cq[tsr_i] = np.array([float(x) for x in pfile.readline().strip().split()]) - - if pitch is None and iline>10: - raise WrongFormatError('This does not appear to be a ROSCO performance file, Pitch vector not found') - - return pitch, TSR, WS, Cp, Ct, Cq - - -def write_rotor_performance(txt_filename, pitch, TSR, CP, CT, CQ, WS=None, TurbineName=''): - ''' - Adapted from ROSCO_toolbox/utitities.py by Nikhar Abbas - https://github.com/NREL/ROSCO - Apache 2.0 License - - Write text file containing rotor performance data - Parameters: - ------------ - txt_filename: str, optional - Desired output filename to print rotor performance data. Default is Cp_Ct_Cq.txt - ''' - file = open(txt_filename,'w') - # Headerlines - file.write('# ----- Rotor performance tables for the wind turbine: {} ----- \n'.format(TurbineName)) - file.write('# ------------ Written using weio\n\n') - - # Pitch angles, TSR, and wind speed - file.write('# Pitch angle vector, {} entries - x axis (matrix columns) (deg)\n'.format(len(pitch))) - for i in range(len(pitch)): - file.write('{:0.4} '.format(pitch[i])) - file.write('\n# TSR vector, {} entries - y axis (matrix rows) (-)\n'.format(len(TSR))) - for i in range(len(TSR)): - file.write('{:0.4} '.format(TSR[i])) - if WS is not None: - file.write('\n# Wind speed vector - z axis (m/s)\n') - for i in range(len(WS)): - file.write('{:0.4f} '.format(WS[i])) - file.write('\n') - - # Cp - file.write('\n# Power coefficient\n\n') - for i in range(len(TSR)): - for j in range(len(pitch)): - file.write('{0:.6f} '.format(CP[i,j])) - file.write('\n') - file.write('\n') - - # Ct - file.write('\n# Thrust coefficient\n\n') - for i in range(len(TSR)): - for j in range(len(pitch)): - file.write('{0:.6f} '.format(CT[i,j])) - file.write('\n') - file.write('\n') - - # Cq - file.write('\n# Torque coefficient\n\n') - for i in range(len(TSR)): - for j in range(len(pitch)): - file.write('{0:.6f} '.format(CQ[i,j])) - file.write('\n') - file.write('\n') - file.close() - - -def interp2d_pairs(*args,**kwargs): - """ Same interface as interp2d but the returned interpolant will evaluate its inputs as pairs of values. - Inputs can therefore be arrays - - example: - f = interp2d_pairs(vx, vy, M, kind='cubic') - - vx: array of length nx - vy: array of length ny - M : array of shape nx x ny - f : interpolant function - v = f(x,y) : if x,y are array of length n, v is of length n - with v_i = f(x_i, y_i) - author: E. Branlard - """ - import scipy.interpolate as si - # Internal function, that evaluates pairs of values, output has the same shape as input - def interpolant(x,y,f): - x,y = np.asarray(x), np.asarray(y) - return (si.dfitpack.bispeu(f.tck[0], f.tck[1], f.tck[2], f.tck[3], f.tck[4], x.ravel(), y.ravel())[0]).reshape(x.shape) - # Wrapping the scipy interp2 function to call out interpolant instead - return lambda x,y: interpolant(x,y,si.interp2d(*args,**kwargs)) - - -if __name__ == '__main__': - f = ROSCOPerformanceFile('./tests/example_files/RoscoPerformance_CpCtCq.txt') - print(f) - dfs = f.toDataFrame() - print(dfs['CP']) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py deleted file mode 100644 index 13f3e9f209..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tdms_file.py +++ /dev/null @@ -1,225 +0,0 @@ -import numpy as np -import pandas as pd -import os - -try: - from .file import File, WrongFormatError, BrokenFormatError, OptionalImportError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - class OptionalImportError(Exception): pass - -class TDMSFile(File): - - @staticmethod - def defaultExtensions(): - return ['.tdms'] - - @staticmethod - def formatName(): - return 'TDMS file' - - def __init__(self, filename=None, **kwargs): - """ Class constructor. If a `filename` is given, the file is read. """ - self.filename = filename - if filename: - self.read(**kwargs) - - def read(self, filename=None, **kwargs): - """ Reads the file self.filename, or `filename` if provided """ - - # --- Standard tests and exceptions (generic code) - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - try: - from nptdms import TdmsFile - except: - raise OptionalImportError('Install the library nptdms to read this file') - - fh = TdmsFile(self.filename, read_metadata_only=False) - # --- OLD, using some kind of old version of tdms and probably specific to one file - # channels_address = list(fh.objects.keys()) - # channels_address = [ s.replace("'",'') for s in channels_address] - # channel_keys= [ s.split('/')[1:] for s in channels_address if len(s.split('/'))==3] - # # --- Setting up list of signals and times - # signals=[] - # times=[] - # for i,ck in enumerate(channel_keys): - # channel = fh.object(ck[0],ck[1]) - # signals.append(channel.data) - # times.append (channel.time_track()) - - # lenTimes = [len(time) for time in times] - # minTimes = [np.min(time) for time in times] - # maxTimes = [np.max(time) for time in times] - # if len(np.unique(lenTimes))>1: - # print(lenTimes) - # raise NotImplementedError('Different time length') - # # NOTE: could use fh.as_dataframe - # if len(np.unique(minTimes))>1: - # print(minTimes) - # raise NotImplementedError('Different time span') - # if len(np.unique(maxTimes))>1: - # print(maxTimes) - # raise NotImplementedError('Different time span') - # # --- Gathering into a data frame with time - # time =times[0] - # signals = [time]+signals - # M = np.column_stack(signals) - # colnames = ['Time_[s]'] + [ck[1] for ck in channel_keys] - # self['data'] = pd.DataFrame(data = M, columns=colnames) - # --- NEW - self['data'] = fh - - #for group in fh.groups(): - # for channel in group.channels(): - # #channel = group['channel name'] - # print('Group:',group.name , 'Chan:',channel.name) - # channel_data = channel[:] - # if len(channel_data)>0: - # print(' ', type(channel_data)) - # #print(' ', len(channel_data)) - # print(' ', channel_data) - # print(' ', channel_data[0]) - # try: - # print(channel.time_track()) - # except KeyError: - # print('>>> No time track') - - def write(self, filename=None, df=None): - """" - Write to TDMS file. - NOTE: for now only using a conversion from dataframe... - """ - if filename is None: - filename = self.filename - if df is None: - df = self.toDataFrame(split=False) - writeTDMSFromDataFrame(filename, df) - - - def groups(self): - return self['data'].groups() - - @property - def groupNames(self): - return [group.name for group in self['data'].groups()] - - def __repr__(self): - s ='Class TDMS (key: data)\n' - s +=' - data: TdmsFile\n' - s +=' * groupNames: {}\n'.format(self.groupNames) - #for group in fh.groups(): - # for channel in group.channels(): - # print(group.name) - # print(channel.name) - return s - - def toDataFrame(self, split=True): - """ Export to one (split=False) or several dataframes (split=True) - Splitting on the group - """ - - def cleanColumns(df): - # Cleanup columns - colnames = df.columns - colnames=[c.replace('\'','') for c in colnames] - colnames=[c[1:] if c.startswith('/') else c for c in colnames] - # If there is only one group, we remove the group key - groupNames = self.groupNames - if len(groupNames)==1: - nChar = len(groupNames[0]) - colnames=[c[nChar+1:] for c in colnames] # +1 for the "/" - df.columns = colnames - - fh = self['data'] - if split: - # --- One dataframe per group. We skip group that have empty data - dfs={} - for group in fh.groups(): - try: - df = group.as_dataframe(time_index=True) - df.insert(0,'Time_[s]', df.index.values) - df.index=np.arange(0,len(df)) - except KeyError: - df = group.as_dataframe(time_index=False) - if len(df)>0: - dfs[group.name] = df - if len(dfs)==1: - dfs=dfs[group.name] - return dfs - else: - # --- One dataframe with all data - try: - df = fh.as_dataframe(time_index=True) - cleanColumns(df) - df.insert(0,'Time_[s]', df.index.values) - df.index=np.arange(0,len(df)) - except KeyError: - df = fh.as_dataframe(time_index=False) - return df - -def writeTDMSFromDataFrame(filename, df, defaultGroupName='default'): - """ - Write a TDMS file from a pandas dataframe - - Example: - # --- Create a TDMS file - One group two channels with time track - time = np.linspace(0,1,20) - colA = np.random.normal(0,1,20) - colB = np.random.normal(0,1,20) - df = pd.DataFrame(data={'Time_[s]':time ,'ColA':colA,'ColB':colB}) - writeTDMSFromDataFrame('out12.tdms', df, defaultGroupName = 'myGroup') - - #--- Create a TDMS file - Two groups, two channels without time track but with timestamp - TS = np.arange('2010-02', '2010-02-21', dtype='datetime64[D]') - df = pd.DataFrame(data={'GroupA/ColTime':time,'GroupA/ColA':colA,'GroupB/ColTimestamp': TS,'GroupB/ColA':colB)}) - writeTDMSFromDataFrame('out22.tdms', df) - - """ - from nptdms import TdmsWriter, ChannelObject - - defaultGroupName = 'default' - - columns =df.columns - - # Check if first column is time - if columns[0].lower().find('time')==0: - t = df.iloc[:,0].values - n = len(t) - dt1 = (np.max(t)-np.min(t))/(n-1) - if n>1: - dt2 = t[1]-t[0] - timeProperties = {'wf_increment':dt1, 'wf_start_offset':t[0]} - columns = columns[1:] # We remove the time column - else: - timeProperties = {} - - with TdmsWriter(filename) as tdms_writer: - - channels=[] - for iCol, col in enumerate(columns): - sp = col.split('/') - if len(sp)==2: - groupName = sp[0] - channelName = sp[1] - else: - groupName = defaultGroupName - channelName = col - data_array = df[col].values - channels.append(ChannelObject(groupName, channelName, data_array, timeProperties)) - tdms_writer.write_segment(channels) - -if __name__ == '__main__': - pass -# f = TDMSFile('TDMS_.tdms') -# dfs = f.toDataFrame(split=True) -# print(f) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py deleted file mode 100644 index 1c9aa2d020..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tecplot_file.py +++ /dev/null @@ -1,222 +0,0 @@ -""" -Read/Write TecPto ascii files -sea read_tecplot documentation below - -Part of weio library: https://github.com/ebranlard/weio - -""" -import pandas as pd -import numpy as np -import os -import struct - -try: - from .file import File, EmptyFileError, WrongFormatError, BrokenFormatError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - File=dict - - - -Keywords=['title','variables','zone','text','geometry','datasetauxdata','customlabels','varauxdata'] -# --------------------------------------------------------------------------------} -# --- Helper functions -# --------------------------------------------------------------------------------{ -def is_number(s): - try: - float(s) - return True - except ValueError: - pass - - try: - import unicodedata - unicodedata.numeric(s) - return True - except (TypeError, ValueError): - pass - - return False - - -def _process_merged_line(line, section, dict_out): - n = len(section) - line = line[n:].strip() - if section=='title': - dict_out[section]=line - elif section=='variables': - line = line.replace('=','').strip() - line = line.replace(',',' ').strip() - line = line.replace(' ',' ').strip() - line = line.replace('[','_[').strip() - line = line.replace('(','_(').strip() - line = line.replace('__','_').strip() - if line.find('"')==0: - line = line.replace('" "',',') - line = line.replace('"','') - sp=line.split(',') - else: - sp=line.split() - dict_out[section]=sp - elif section=='datasetauxdata': - if section not in dict_out.keys(): - dict_out[section]={} # initialixe an empty directory - sp = line.split('=') - key = sp[0] - value = sp[1].replace('"','').strip() - if is_number(value): - value=float(value) - dict_out[section][key]=value - - elif section=='zone': - if section not in dict_out.keys(): - dict_out[section]={} # initialixe an empty directory - sp = line.split('=') - key = sp[0] - value = sp[1].replace('"','').strip() - if is_number(value): - value=float(value) - dict_out[section][key]=value - - else: - print('!!! Reading of section not implemented:') - print('Processing section {}:'.format(section),line) - dict_out[section]=line - -def read_tecplot(filename, dict_out={}): - """ Reads a tecplot file - Limited support: - - title optional - - variables mandatory - - Lines may be continued to next line, stopping when a predefined keyword is detected - For now, assumes that only one section of numerical data is present - """ - - merged_line='' - current_section='' - variables=[] - with open(filename, "r") as f: - dfs = [] # list of dataframes - iline=0 - while True: - line= f.readline().strip() - iline+=1 - if not line: - break - l=line.lower().strip() - # Comment - if l[0]=='#': - continue - new_section = [k for k in Keywords if l.find(k)==0 ] - - if len(new_section)==1: - # --- Start of a new section - # First, process the previous section - if len(merged_line)>0: - _process_merged_line(merged_line, current_section, dict_out) - # Then start the new section - current_section=new_section[0] - merged_line =line - elif len(current_section)==0: - raise WrongFormatError('No section detected') - else: - if current_section=='title' or current_section=='variables': - # OK - pass - else: - if 'variables' not in dict_out.keys(): - raise WrongFormatError('The `variables` section should be present') - sp = l.split() - if is_number(sp[0]): - if len(merged_line)>0: - _process_merged_line(merged_line, current_section, dict_out) - # --- Special case of numerical values outside of zone - f.close() - M = np.loadtxt(filename, skiprows = iline-1) - if M.shape[1]!=len(dict_out['variables']): - raise BrokenFormatError('Number of columns of data does not match number of variables') - dict_out['data']=M - break - else: - # --- Continuation of previous section - merged_line +=' '+line - return dict_out - - -class TecplotFile(File): - - @staticmethod - def defaultExtensions(): - return ['.dat'] - - @staticmethod - def formatName(): - return 'Tecplot ASCII file' - - def __init__(self,filename=None,**kwargs): - self.filename = None - if filename: - self.read(filename=filename,**kwargs) - - def read(self, filename=None): - """ read a tecplot ascii file - sea `read_tecplot` documentation above - """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - try: - read_tecplot(filename,self) - except BrokenFormatError: - raise - except WrongFormatError: - raise - except Exception as e: - raise WrongFormatError('Tecplot dat File {}: '.format(self.filename)+e.args[0]) - - def write(self, filename=None, precision=None): - """ Write tecplot ascii file """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - - with open(self.filename, mode='w') as f: - if 'title' in self.keys(): - f.write('TITLE = {}\n'.format(self['title'])) - f.write('VARIABLES = ' + ','.join(['"{}"'.format(col) for col in self['variables'] ]) + '\n') - for k in Keywords[2:]: - if k in self.keys(): - f.write('{} = {}\n'.format(k,self[k])) - # Data - if 'data' in self.keys(): - for row in self['data']: - srow = np.array2string(row, edgeitems=0, separator=' ', precision=precision) - f.write(srow[1:-1]+'\n') - - - def __repr__(self): - s='<{} object> with keys:\n'.format(type(self).__name__) - for k,v in self.items(): - s+=' - {}: {}\n'.format(k,v) - return s - - def toDataFrame(self): - return pd.DataFrame(data=self['data'],columns=self['variables']) - -if __name__=='__main__': - mb = MannBoxFile('mann_bin/mini-u.bin', N=(2,4,8)) - F1=mb['field'].ravel() - mb.write('mann_bin/mini-u-out.bin') - - mb2= MannBoxFile('mann_bin/mini-u-out.bin', N=(2,4,8)) - F2=mb2['field'].ravel() -# print(F1-F2) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat deleted file mode 100644 index 999e7ce8a5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.dat +++ /dev/null @@ -1,11 +0,0 @@ - 0.0000E+0 1.0933E+2 1.5938E+1 2.2311E+1 2.2735E+3 - 4.0000E-2 1.1315E+2 1.5934E+1 2.2311E+1 2.2949E+3 - 8.0000E-2 1.1698E+2 1.6003E+1 2.2311E+1 2.3138E+3 - 1.2000E-1 1.2083E+2 1.6089E+1 2.2311E+1 2.3751E+3 - 1.6000E-1 1.2470E+2 1.6159E+1 2.2311E+1 2.3511E+3 - 2.0000E-1 1.2859E+2 1.6183E+1 2.2311E+1 2.3488E+3 - 2.4000E-1 1.3246E+2 1.6133E+1 2.2311E+1 2.3243E+3 - 2.8000E-1 1.3633E+2 1.6046E+1 2.2311E+1 2.3094E+3 - 3.2000E-1 1.4017E+2 1.5987E+1 2.2311E+1 2.2997E+3 - 3.6000E-1 1.4401E+2 1.5996E+1 2.2312E+1 2.2814E+3 - 4.0000E-1 1.4785E+2 1.6059E+1 2.2321E+1 2.2979E+3 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel deleted file mode 100644 index cead6ed1b4..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii.sel +++ /dev/null @@ -1,18 +0,0 @@ - BHawC channel reference file (sel): -+=========================================================================================================================================+ - BHawC command file : NA.btc 2001.01.21 00:00:00 C:\Res\ - Channel reference file : NA.sel 2001.01.01 00:00:00 C:\simdatsel - Result file : NA.dat 2001.01.01 00:00:00 C:\simdatsel - -+=========================================================================================================================================+ - Scans Channels Time [sec] Coordinate convention: Siemens - 11 5 000.400 - -Channel Variable description Label Unit - - 1 Time t [s] - 2 Rotor azimuthal position ang_azi [deg] - 3 Frc Tower Elm..1 Nod..1 CoS Ft_x e.1n1 [kN] - 4 Trn Blade 1 Nod.14 CoB uB1_y n14 [m] - 5 RVel DrivetrG Nod..2 TvG av_brk_dsk. [rpm] -+=========================================================================================================================================+ diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat deleted file mode 100644 index 4c71d8f474..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.dat +++ /dev/null @@ -1,20 +0,0 @@ - 0.00000000e+00 1.23885755e+01 0.00000000e+00 1.29639887e+03 1.39557399e+01 -3.29316416e+03 4.47157770e+02 1.27122773e+04 -6.59107884e+01 1.29647398e+03 1.27201394e+04 - 1.00000000e-02 1.23313940e+01 0.00000000e+00 5.48773444e+02 -4.61656524e+01 -3.50884069e+03 7.68303705e+02 7.41623944e+03 -7.40190240e+01 5.50711867e+02 7.45593039e+03 - 2.00000000e-02 1.22742125e+01 0.00000000e+00 -3.34110364e+02 -1.07460319e+02 -4.02048388e+03 1.02675476e+03 7.01185815e+02 -1.09052721e+02 3.50966459e+02 1.24333699e+03 - 3.00000000e-02 1.22170310e+01 0.00000000e+00 -1.31531477e+02 -6.88997364e+01 -4.67534069e+03 4.00864081e+02 2.73182417e+03 -1.44392390e+02 1.48484690e+02 2.76107865e+03 - 4.00000000e-02 1.21598495e+01 0.00000000e+00 6.87298816e+02 2.46828144e+01 -5.36254592e+03 -7.65472350e+02 1.02555504e+04 -1.67646198e+02 6.87741888e+02 1.02840781e+04 - 5.00000000e-02 1.21026681e+01 0.00000000e+00 8.76295272e+02 6.57931084e+01 -6.02247820e+03 -1.55458135e+03 1.30014546e+04 -1.67340226e+02 8.78761706e+02 1.30940652e+04 - 6.00000000e-02 1.20660420e+01 0.00000000e+00 2.62744917e+02 4.12000711e+01 -6.60132539e+03 -1.76409336e+03 8.88131878e+03 -1.45310303e+02 2.65955518e+02 9.05482461e+03 - 7.00000000e-02 1.20294160e+01 0.00000000e+00 -1.73822231e+02 3.31750817e+01 -7.03567481e+03 -2.00720136e+03 5.58009196e+03 -1.16854986e+02 1.76959753e+02 5.93011666e+03 - 8.00000000e-02 1.19927899e+01 0.00000000e+00 1.60696607e+02 8.73539186e+01 -7.27477184e+03 -2.67197874e+03 8.37333931e+03 -1.00944486e+02 1.82904638e+02 8.78932771e+03 - 9.00000000e-02 1.19561639e+01 0.00000000e+00 6.96893982e+02 1.51574150e+02 -7.30063835e+03 -3.36347419e+03 1.31127750e+04 -9.88026876e+01 7.13187174e+02 1.35372755e+04 - 1.00000000e-01 1.19195378e+01 0.00000000e+00 6.56275307e+02 1.60538775e+02 -7.11009452e+03 -3.53515764e+03 1.33661250e+04 -1.01403442e+02 6.75625619e+02 1.38257237e+04 - 1.10000000e-01 1.19152398e+01 0.00000000e+00 1.60053499e+02 1.27143645e+02 -6.70680937e+03 -3.25395654e+03 9.69766867e+03 -9.95676155e+01 2.04407996e+02 1.02290279e+04 - 1.20000000e-01 1.19107550e+01 0.00000000e+00 -6.92272148e+01 1.12510737e+02 -6.12643343e+03 -3.01481657e+03 7.89095074e+03 -8.99295241e+01 1.32102510e+02 8.44726124e+03 - 1.30000000e-01 1.19064571e+01 0.00000000e+00 2.06100002e+02 1.34543904e+02 -5.46056959e+03 -3.00476423e+03 1.02005300e+04 -7.87615769e+01 2.46128570e+02 1.06338807e+04 - 1.40000000e-01 1.19021591e+01 0.00000000e+00 4.86649252e+02 1.50939262e+02 -4.83512600e+03 -2.91799663e+03 1.27839319e+04 -7.58548509e+01 5.09519534e+02 1.31127274e+04 - 1.50000000e-01 1.18976743e+01 0.00000000e+00 3.42567430e+02 1.28916253e+02 -4.34996082e+03 -2.49341737e+03 1.19778184e+04 -8.80936971e+01 3.66021645e+02 1.22345929e+04 - 1.60000000e-01 1.19492498e+01 0.00000000e+00 3.82980612e+00 9.12699103e+01 -4.04341518e+03 -1.91540759e+03 9.40593235e+03 -1.16702000e+02 9.13502268e+01 9.59897648e+03 - 1.70000000e-01 1.20008252e+01 0.00000000e+00 -5.34839413e+01 7.82623166e+01 -3.91090284e+03 -1.53606387e+03 9.00415513e+03 -1.57855121e+02 9.47919943e+01 9.13423789e+03 - 1.80000000e-01 1.20522138e+01 0.00000000e+00 1.98254089e+02 9.08331070e+01 -3.94526921e+03 -1.40564794e+03 1.12932616e+04 -1.97937342e+02 2.18071863e+02 1.13804044e+04 - 1.90000000e-01 1.21037893e+01 0.00000000e+00 3.67339934e+02 9.67045550e+01 -4.15152862e+03 -1.28554888e+03 1.32407295e+04 -2.21344135e+02 3.79855759e+02 1.33029904e+04 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel deleted file mode 100644 index 64014900ad..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/BHAWC_out_ascii1.sel +++ /dev/null @@ -1,21 +0,0 @@ -BHawC channel reference file (sel): -+===================== (Name) =================== (Time stamp) ========= (Path) ==========================================================+ -Original BHAWC file : NA.dat 2001.01.01 00:00:00 C:\ -Channel reference file : NA.sel 2001.01.01 00:00:00 C:\ -Result file : NA.dat 2001.01.01 00:00:00 C:\ -+=========================================================================================================================================+ -Scans Channels Time [sec] Coordinate convention: Siemens -20 11 0.190 - -Channel Variable descriptions Labels Units -1 Time Time [s] -2 Horizontal wind speed V_hor [m/s] -3 Wave elevation Wave elevation [m] -4 Ff_x interface force Ff_x interface [kN] -5 Ff_y interface force Ff_y interface [kN] -6 Ff_z interface force Ff_z interface [kN] -7 Mf_x interface moment Mf_x interface [kNm] -8 Mf_y interface moment Mf_y interface [kNm] -9 Mf_z interface moment Mf_z interface [kNm] -10 Ff_xy interface force Ff_xy interface [kN] -11 Mf_xy interface moment Mf_xy interface [kNm] diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 deleted file mode 100644 index dce38fcf8c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$04 +++ /dev/null @@ -1,200 +0,0 @@ - 1.8998750e+002 0.0000000e+000 1.8180233e+006 9.1210831e+001 9.2043343e+001 -0.0000000e+000 1.9751873e+004 8.0003691e+000 1.8180233e+006 - 1.9003751e+002 0.0000000e+000 1.8181525e+006 9.1210831e+001 9.2047165e+001 -0.0000000e+000 1.9752469e+004 8.0003691e+000 1.8181525e+006 - 1.9008749e+002 0.0000000e+000 1.8182498e+006 9.1210831e+001 9.2049088e+001 -0.0000000e+000 1.9753117e+004 8.0003691e+000 1.8182498e+006 - 1.9013750e+002 0.0000000e+000 1.8183211e+006 9.1210831e+001 9.2049660e+001 -0.0000000e+000 1.9753770e+004 8.0003691e+000 1.8183211e+006 - 1.9018750e+002 0.0000000e+000 1.8183821e+006 9.1210831e+001 9.2049881e+001 -0.0000000e+000 1.9754379e+004 8.0003691e+000 1.8183821e+006 - 1.9023750e+002 0.0000000e+000 1.8184510e+006 9.1210831e+001 9.2050674e+001 -0.0000000e+000 1.9754953e+004 8.0003700e+000 1.8184510e+006 - 1.9028751e+002 0.0000000e+000 1.8185394e+006 9.1210831e+001 9.2052483e+001 -0.0000000e+000 1.9755527e+004 8.0003700e+000 1.8185394e+006 - 1.9033749e+002 0.0000000e+000 1.8186499e+006 9.1210831e+001 9.2055298e+001 -0.0000000e+000 1.9756127e+004 8.0003700e+000 1.8186499e+006 - 1.9038750e+002 0.0000000e+000 1.8187794e+006 9.1210831e+001 9.2058823e+001 -0.0000000e+000 1.9756783e+004 8.0003700e+000 1.8187794e+006 - 1.9043750e+002 0.0000000e+000 1.8189216e+006 9.1210831e+001 9.2062683e+001 -0.0000000e+000 1.9757510e+004 8.0003700e+000 1.8189216e+006 - 1.9048750e+002 0.0000000e+000 1.8190685e+006 9.1210831e+001 9.2066452e+001 -0.0000000e+000 1.9758303e+004 8.0003700e+000 1.8190685e+006 - 1.9053751e+002 0.0000000e+000 1.8192066e+006 9.1210831e+001 9.2069519e+001 -0.0000000e+000 1.9759150e+004 8.0003700e+000 1.8192066e+006 - 1.9058749e+002 0.0000000e+000 1.8193198e+006 9.1210831e+001 9.2071213e+001 -0.0000000e+000 1.9760016e+004 8.0003700e+000 1.8193198e+006 - 1.9063750e+002 0.0000000e+000 1.8193945e+006 9.1210831e+001 9.2071060e+001 -0.0000000e+000 1.9760854e+004 8.0003700e+000 1.8193945e+006 - 1.9068750e+002 0.0000000e+000 1.8194268e+006 9.1210831e+001 9.2069153e+001 -0.0000000e+000 1.9761602e+004 8.0003710e+000 1.8194268e+006 - 1.9073750e+002 0.0000000e+000 1.8194258e+006 9.1210831e+001 9.2066193e+001 -0.0000000e+000 1.9762213e+004 8.0003710e+000 1.8194258e+006 - 1.9078751e+002 0.0000000e+000 1.8194081e+006 9.1210831e+001 9.2063065e+001 -0.0000000e+000 1.9762676e+004 8.0003710e+000 1.8194081e+006 - 1.9083749e+002 0.0000000e+000 1.8193874e+006 9.1210831e+001 9.2060394e+001 -0.0000000e+000 1.9763010e+004 8.0003710e+000 1.8193874e+006 - 1.9088750e+002 0.0000000e+000 1.8193679e+006 9.1210831e+001 9.2058289e+001 -0.0000000e+000 1.9763238e+004 8.0003719e+000 1.8193679e+006 - 1.9093750e+002 0.0000000e+000 1.8193481e+006 9.1210831e+001 9.2056549e+001 -0.0000000e+000 1.9763391e+004 8.0003719e+000 1.8193481e+006 - 1.9098750e+002 0.0000000e+000 1.8193214e+006 9.1210831e+001 9.2054771e+001 -0.0000000e+000 1.9763475e+004 8.0003729e+000 1.8193214e+006 - 1.9103751e+002 0.0000000e+000 1.8192738e+006 9.1210831e+001 9.2052261e+001 -0.0000000e+000 1.9763488e+004 8.0003729e+000 1.8192738e+006 - 1.9108749e+002 0.0000000e+000 1.8191858e+006 9.1210831e+001 9.2048164e+001 -0.0000000e+000 1.9763398e+004 8.0003738e+000 1.8191858e+006 - 1.9113750e+002 0.0000000e+000 1.8190453e+006 9.1210831e+001 9.2042099e+001 -0.0000000e+000 1.9763154e+004 8.0003738e+000 1.8190453e+006 - 1.9118750e+002 0.0000000e+000 1.8188615e+006 9.1210831e+001 9.2034729e+001 -0.0000000e+000 1.9762719e+004 8.0003738e+000 1.8188615e+006 - 1.9123750e+002 0.0000000e+000 1.8186603e+006 9.1210831e+001 9.2027473e+001 -0.0000000e+000 1.9762066e+004 8.0003738e+000 1.8186603e+006 - 1.9128751e+002 0.0000000e+000 1.8184714e+006 9.1210831e+001 9.2021652e+001 -0.0000000e+000 1.9761248e+004 8.0003738e+000 1.8184714e+006 - 1.9133749e+002 0.0000000e+000 1.8183126e+006 9.1210831e+001 9.2017853e+001 -0.0000000e+000 1.9760330e+004 8.0003738e+000 1.8183126e+006 - 1.9138750e+002 0.0000000e+000 1.8181878e+006 9.1210831e+001 9.2015923e+001 -0.0000000e+000 1.9759385e+004 8.0003729e+000 1.8181878e+006 - 1.9143750e+002 0.0000000e+000 1.8180893e+006 9.1210831e+001 9.2015259e+001 -0.0000000e+000 1.9758461e+004 8.0003729e+000 1.8180893e+006 - 1.9148750e+002 0.0000000e+000 1.8180056e+006 9.1210831e+001 9.2015121e+001 -0.0000000e+000 1.9757590e+004 8.0003719e+000 1.8180056e+006 - 1.9153751e+002 0.0000000e+000 1.8179279e+006 9.1210831e+001 9.2014961e+001 -0.0000000e+000 1.9756787e+004 8.0003719e+000 1.8179279e+006 - 1.9158749e+002 0.0000000e+000 1.8178490e+006 9.1210831e+001 9.2014496e+001 -0.0000000e+000 1.9756033e+004 8.0003710e+000 1.8178490e+006 - 1.9163750e+002 0.0000000e+000 1.8177629e+006 9.1210831e+001 9.2013512e+001 -0.0000000e+000 1.9755313e+004 8.0003700e+000 1.8177629e+006 - 1.9168750e+002 0.0000000e+000 1.8176641e+006 9.1210831e+001 9.2011795e+001 -0.0000000e+000 1.9754607e+004 8.0003700e+000 1.8176641e+006 - 1.9173750e+002 0.0000000e+000 1.8175525e+006 9.1210831e+001 9.2009438e+001 -0.0000000e+000 1.9753896e+004 8.0003691e+000 1.8175525e+006 - 1.9178751e+002 0.0000000e+000 1.8174401e+006 9.1210831e+001 9.2007179e+001 -0.0000000e+000 1.9753160e+004 8.0003691e+000 1.8174401e+006 - 1.9183749e+002 0.0000000e+000 1.8173536e+006 9.1210831e+001 9.2006248e+001 -0.0000000e+000 1.9752420e+004 8.0003691e+000 1.8173536e+006 - 1.9188750e+002 0.0000000e+000 1.8173160e+006 9.1210831e+001 9.2007599e+001 -0.0000000e+000 1.9751729e+004 8.0003681e+000 1.8173160e+006 - 1.9193750e+002 0.0000000e+000 1.8173363e+006 9.1210831e+001 9.2011322e+001 -0.0000000e+000 1.9751166e+004 8.0003681e+000 1.8173363e+006 - 1.9198750e+002 0.0000000e+000 1.8174073e+006 9.1210831e+001 9.2016777e+001 -0.0000000e+000 1.9750789e+004 8.0003681e+000 1.8174073e+006 - 1.9203751e+002 0.0000000e+000 1.8175164e+006 9.1210831e+001 9.2023163e+001 -0.0000000e+000 1.9750629e+004 8.0003681e+000 1.8175164e+006 - 1.9208749e+002 0.0000000e+000 1.8176539e+006 9.1210831e+001 9.2029930e+001 -0.0000000e+000 1.9750695e+004 8.0003681e+000 1.8176539e+006 - 1.9213750e+002 0.0000000e+000 1.8178086e+006 9.1210831e+001 9.2036575e+001 -0.0000000e+000 1.9750977e+004 8.0003681e+000 1.8178086e+006 - 1.9218750e+002 0.0000000e+000 1.8179651e+006 9.1210831e+001 9.2042389e+001 -0.0000000e+000 1.9751447e+004 8.0003691e+000 1.8179651e+006 - 1.9223750e+002 0.0000000e+000 1.8181034e+006 9.1210831e+001 9.2046638e+001 -0.0000000e+000 1.9752051e+004 8.0003691e+000 1.8181034e+006 - 1.9228751e+002 0.0000000e+000 1.8182116e+006 9.1210831e+001 9.2049011e+001 -0.0000000e+000 1.9752723e+004 8.0003691e+000 1.8182116e+006 - 1.9233749e+002 0.0000000e+000 1.8182921e+006 9.1210831e+001 9.2049911e+001 -0.0000000e+000 1.9753402e+004 8.0003691e+000 1.8182921e+006 - 1.9238750e+002 0.0000000e+000 1.8183594e+006 9.1210831e+001 9.2050278e+001 -0.0000000e+000 1.9754051e+004 8.0003691e+000 1.8183594e+006 - 1.9243750e+002 0.0000000e+000 1.8184319e+006 9.1210831e+001 9.2051064e+001 -0.0000000e+000 1.9754666e+004 8.0003700e+000 1.8184319e+006 - 1.9248750e+002 0.0000000e+000 1.8185215e+006 9.1210831e+001 9.2052795e+001 -0.0000000e+000 1.9755268e+004 8.0003700e+000 1.8185215e+006 - 1.9253751e+002 0.0000000e+000 1.8186325e+006 9.1210831e+001 9.2055504e+001 -0.0000000e+000 1.9755896e+004 8.0003700e+000 1.8186325e+006 - 1.9258749e+002 0.0000000e+000 1.8187620e+006 9.1210831e+001 9.2058945e+001 -0.0000000e+000 1.9756570e+004 8.0003700e+000 1.8187620e+006 - 1.9263750e+002 0.0000000e+000 1.8189053e+006 9.1210831e+001 9.2062767e+001 -0.0000000e+000 1.9757314e+004 8.0003700e+000 1.8189053e+006 - 1.9268750e+002 0.0000000e+000 1.8190546e+006 9.1210831e+001 9.2066574e+001 -0.0000000e+000 1.9758127e+004 8.0003700e+000 1.8190546e+006 - 1.9273750e+002 0.0000000e+000 1.8191983e+006 9.1210831e+001 9.2069832e+001 -0.0000000e+000 1.9758994e+004 8.0003700e+000 1.8191983e+006 - 1.9278751e+002 0.0000000e+000 1.8193209e+006 9.1210831e+001 9.2071869e+001 -0.0000000e+000 1.9759891e+004 8.0003700e+000 1.8193209e+006 - 1.9283749e+002 0.0000000e+000 1.8194071e+006 9.1210831e+001 9.2072136e+001 -0.0000000e+000 1.9760766e+004 8.0003700e+000 1.8194071e+006 - 1.9288750e+002 0.0000000e+000 1.8194514e+006 9.1210831e+001 9.2070625e+001 -0.0000000e+000 1.9761559e+004 8.0003710e+000 1.8194514e+006 - 1.9293750e+002 0.0000000e+000 1.8194600e+006 9.1210831e+001 9.2067909e+001 -0.0000000e+000 1.9762221e+004 8.0003710e+000 1.8194600e+006 - 1.9298750e+002 0.0000000e+000 1.8194500e+006 9.1210831e+001 9.2064880e+001 -0.0000000e+000 1.9762748e+004 8.0003710e+000 1.8194500e+006 - 1.9303751e+002 0.0000000e+000 1.8194334e+006 9.1210831e+001 9.2062164e+001 -0.0000000e+000 1.9763135e+004 8.0003710e+000 1.8194334e+006 - 1.9308749e+002 0.0000000e+000 1.8194165e+006 9.1210831e+001 9.2059967e+001 -0.0000000e+000 1.9763412e+004 8.0003719e+000 1.8194165e+006 - 1.9313750e+002 0.0000000e+000 1.8193981e+006 9.1210831e+001 9.2058113e+001 -0.0000000e+000 1.9763600e+004 8.0003719e+000 1.8193981e+006 - 1.9318750e+002 0.0000000e+000 1.8193721e+006 9.1210831e+001 9.2056229e+001 -0.0000000e+000 1.9763717e+004 8.0003729e+000 1.8193721e+006 - 1.9323750e+002 0.0000000e+000 1.8193269e+006 9.1210831e+001 9.2053711e+001 -0.0000000e+000 1.9763756e+004 8.0003729e+000 1.8193269e+006 - 1.9328751e+002 0.0000000e+000 1.8192431e+006 9.1210831e+001 9.2049721e+001 -0.0000000e+000 1.9763691e+004 8.0003738e+000 1.8192431e+006 - 1.9333749e+002 0.0000000e+000 1.8191085e+006 9.1210831e+001 9.2043800e+001 -0.0000000e+000 1.9763480e+004 8.0003738e+000 1.8191085e+006 - 1.9338750e+002 0.0000000e+000 1.8189289e+006 9.1210831e+001 9.2036491e+001 -0.0000000e+000 1.9763076e+004 8.0003738e+000 1.8189289e+006 - 1.9343750e+002 0.0000000e+000 1.8187291e+006 9.1210831e+001 9.2029167e+001 -0.0000000e+000 1.9762455e+004 8.0003738e+000 1.8187291e+006 - 1.9348750e+002 0.0000000e+000 1.8185390e+006 9.1210831e+001 9.2023148e+001 -0.0000000e+000 1.9761664e+004 8.0003738e+000 1.8185390e+006 - 1.9353751e+002 0.0000000e+000 1.8183766e+006 9.1210831e+001 9.2019104e+001 -0.0000000e+000 1.9760756e+004 8.0003738e+000 1.8183766e+006 - 1.9358749e+002 0.0000000e+000 1.8182473e+006 9.1210831e+001 9.2016945e+001 -0.0000000e+000 1.9759813e+004 8.0003729e+000 1.8182473e+006 - 1.9363750e+002 0.0000000e+000 1.8181448e+006 9.1210831e+001 9.2016075e+001 -0.0000000e+000 1.9758889e+004 8.0003729e+000 1.8181448e+006 - 1.9368750e+002 0.0000000e+000 1.8180578e+006 9.1210831e+001 9.2015778e+001 -0.0000000e+000 1.9758014e+004 8.0003719e+000 1.8180578e+006 - 1.9373750e+002 0.0000000e+000 1.8179761e+006 9.1210831e+001 9.2015465e+001 -0.0000000e+000 1.9757199e+004 8.0003719e+000 1.8179761e+006 - 1.9378751e+002 0.0000000e+000 1.8178923e+006 9.1210831e+001 9.2014824e+001 -0.0000000e+000 1.9756432e+004 8.0003710e+000 1.8178923e+006 - 1.9383749e+002 0.0000000e+000 1.8178015e+006 9.1210831e+001 9.2013687e+001 -0.0000000e+000 1.9755691e+004 8.0003710e+000 1.8178015e+006 - 1.9388750e+002 0.0000000e+000 1.8176985e+006 9.1210831e+001 9.2011871e+001 -0.0000000e+000 1.9754961e+004 8.0003700e+000 1.8176985e+006 - 1.9393750e+002 0.0000000e+000 1.8175820e+006 9.1210831e+001 9.2009407e+001 -0.0000000e+000 1.9754225e+004 8.0003691e+000 1.8175820e+006 - 1.9398750e+002 0.0000000e+000 1.8174636e+006 9.1210831e+001 9.2006958e+001 -0.0000000e+000 1.9753459e+004 8.0003691e+000 1.8174636e+006 - 1.9403751e+002 0.0000000e+000 1.8173680e+006 9.1210831e+001 9.2005730e+001 -0.0000000e+000 1.9752684e+004 8.0003691e+000 1.8173680e+006 - 1.9408749e+002 0.0000000e+000 1.8173196e+006 9.1210831e+001 9.2006737e+001 -0.0000000e+000 1.9751947e+004 8.0003681e+000 1.8173196e+006 - 1.9413750e+002 0.0000000e+000 1.8173295e+006 9.1210831e+001 9.2010170e+001 -0.0000000e+000 1.9751336e+004 8.0003681e+000 1.8173295e+006 - 1.9418750e+002 0.0000000e+000 1.8173916e+006 9.1210831e+001 9.2015427e+001 -0.0000000e+000 1.9750902e+004 8.0003681e+000 1.8173916e+006 - 1.9423750e+002 0.0000000e+000 1.8174939e+006 9.1210831e+001 9.2021683e+001 -0.0000000e+000 1.9750695e+004 8.0003681e+000 1.8174939e+006 - 1.9428751e+002 0.0000000e+000 1.8176243e+006 9.1210831e+001 9.2028351e+001 -0.0000000e+000 1.9750707e+004 8.0003681e+000 1.8176243e+006 - 1.9433749e+002 0.0000000e+000 1.8177733e+006 9.1210831e+001 9.2034935e+001 -0.0000000e+000 1.9750936e+004 8.0003681e+000 1.8177733e+006 - 1.9438750e+002 0.0000000e+000 1.8179255e+006 9.1210831e+001 9.2040779e+001 -0.0000000e+000 1.9751355e+004 8.0003691e+000 1.8179255e+006 - 1.9443750e+002 0.0000000e+000 1.8180616e+006 9.1210831e+001 9.2045135e+001 -0.0000000e+000 1.9751914e+004 8.0003691e+000 1.8180616e+006 - 1.9448750e+002 0.0000000e+000 1.8181694e+006 9.1210831e+001 9.2047638e+001 -0.0000000e+000 1.9752555e+004 8.0003691e+000 1.8181694e+006 - 1.9453751e+002 0.0000000e+000 1.8182486e+006 9.1210831e+001 9.2048630e+001 -0.0000000e+000 1.9753203e+004 8.0003691e+000 1.8182486e+006 - 1.9458749e+002 0.0000000e+000 1.8183140e+006 9.1210831e+001 9.2049019e+001 -0.0000000e+000 1.9753826e+004 8.0003691e+000 1.8183140e+006 - 1.9463750e+002 0.0000000e+000 1.8183833e+006 9.1210831e+001 9.2049767e+001 -0.0000000e+000 1.9754416e+004 8.0003700e+000 1.8183833e+006 - 1.9468750e+002 0.0000000e+000 1.8184696e+006 9.1210831e+001 9.2051445e+001 -0.0000000e+000 1.9754992e+004 8.0003700e+000 1.8184696e+006 - 1.9473750e+002 0.0000000e+000 1.8185779e+006 9.1210831e+001 9.2054138e+001 -0.0000000e+000 1.9755594e+004 8.0003700e+000 1.8185779e+006 - 1.9478751e+002 0.0000000e+000 1.8187063e+006 9.1210831e+001 9.2057594e+001 -0.0000000e+000 1.9756252e+004 8.0003700e+000 1.8187063e+006 - 1.9483749e+002 0.0000000e+000 1.8188490e+006 9.1210831e+001 9.2061462e+001 -0.0000000e+000 1.9756982e+004 8.0003700e+000 1.8188490e+006 - 1.9488750e+002 0.0000000e+000 1.8189986e+006 9.1210831e+001 9.2065353e+001 -0.0000000e+000 1.9757779e+004 8.0003700e+000 1.8189986e+006 - 1.9493750e+002 0.0000000e+000 1.8191440e+006 9.1210831e+001 9.2068741e+001 -0.0000000e+000 1.9758637e+004 8.0003700e+000 1.8191440e+006 - 1.9498750e+002 0.0000000e+000 1.8192695e+006 9.1210831e+001 9.2070969e+001 -0.0000000e+000 1.9759525e+004 8.0003700e+000 1.8192695e+006 - 1.9503751e+002 0.0000000e+000 1.8193605e+006 9.1210831e+001 9.2071487e+001 -0.0000000e+000 1.9760398e+004 8.0003700e+000 1.8193605e+006 - 1.9508749e+002 0.0000000e+000 1.8194104e+006 9.1210831e+001 9.2070221e+001 -0.0000000e+000 1.9761205e+004 8.0003710e+000 1.8194104e+006 - 1.9513750e+002 0.0000000e+000 1.8194241e+006 9.1210831e+001 9.2067696e+001 -0.0000000e+000 1.9761879e+004 8.0003710e+000 1.8194241e+006 - 1.9518750e+002 0.0000000e+000 1.8194180e+006 9.1210831e+001 9.2064789e+001 -0.0000000e+000 1.9762420e+004 8.0003710e+000 1.8194180e+006 - 1.9523750e+002 0.0000000e+000 1.8194059e+006 9.1210831e+001 9.2062195e+001 -0.0000000e+000 1.9762834e+004 8.0003710e+000 1.8194059e+006 - 1.9528751e+002 0.0000000e+000 1.8193943e+006 9.1210831e+001 9.2060150e+001 -0.0000000e+000 1.9763135e+004 8.0003719e+000 1.8193943e+006 - 1.9533749e+002 0.0000000e+000 1.8193825e+006 9.1210831e+001 9.2058479e+001 -0.0000000e+000 1.9763357e+004 8.0003719e+000 1.8193825e+006 - 1.9538750e+002 0.0000000e+000 1.8193646e+006 9.1210831e+001 9.2056839e+001 -0.0000000e+000 1.9763506e+004 8.0003729e+000 1.8193646e+006 - 1.9543750e+002 0.0000000e+000 1.8193285e+006 9.1210831e+001 9.2054626e+001 -0.0000000e+000 1.9763580e+004 8.0003729e+000 1.8193285e+006 - 1.9548750e+002 0.0000000e+000 1.8192568e+006 9.1210831e+001 9.2051018e+001 -0.0000000e+000 1.9763566e+004 8.0003738e+000 1.8192568e+006 - 1.9553751e+002 0.0000000e+000 1.8191344e+006 9.1210831e+001 9.2045464e+001 -0.0000000e+000 1.9763410e+004 8.0003738e+000 1.8191344e+006 - 1.9558749e+002 0.0000000e+000 1.8189641e+006 9.1210831e+001 9.2038338e+001 -0.0000000e+000 1.9763068e+004 8.0003738e+000 1.8189641e+006 - 1.9563750e+002 0.0000000e+000 1.8187691e+006 9.1210831e+001 9.2030945e+001 -0.0000000e+000 1.9762516e+004 8.0003738e+000 1.8187691e+006 - 1.9568750e+002 0.0000000e+000 1.8185793e+006 9.1210831e+001 9.2024704e+001 -0.0000000e+000 1.9761771e+004 8.0003738e+000 1.8185793e+006 - 1.9573750e+002 0.0000000e+000 1.8184156e+006 9.1210831e+001 9.2020416e+001 -0.0000000e+000 1.9760904e+004 8.0003738e+000 1.8184156e+006 - 1.9578751e+002 0.0000000e+000 1.8182865e+006 9.1210831e+001 9.2018112e+001 -0.0000000e+000 1.9759992e+004 8.0003729e+000 1.8182865e+006 - 1.9583749e+002 0.0000000e+000 1.8181863e+006 9.1210831e+001 9.2017250e+001 -0.0000000e+000 1.9759092e+004 8.0003729e+000 1.8181863e+006 - 1.9588750e+002 0.0000000e+000 1.8181044e+006 9.1210831e+001 9.2017082e+001 -0.0000000e+000 1.9758244e+004 8.0003719e+000 1.8181044e+006 - 1.9593750e+002 0.0000000e+000 1.8180288e+006 9.1210831e+001 9.2016953e+001 -0.0000000e+000 1.9757455e+004 8.0003719e+000 1.8180288e+006 - 1.9598750e+002 0.0000000e+000 1.8179519e+006 9.1210831e+001 9.2016510e+001 -0.0000000e+000 1.9756721e+004 8.0003710e+000 1.8179519e+006 - 1.9603751e+002 0.0000000e+000 1.8178681e+006 9.1210831e+001 9.2015549e+001 -0.0000000e+000 1.9756020e+004 8.0003710e+000 1.8178681e+006 - 1.9608749e+002 0.0000000e+000 1.8177715e+006 9.1210831e+001 9.2013893e+001 -0.0000000e+000 1.9755326e+004 8.0003700e+000 1.8177715e+006 - 1.9613750e+002 0.0000000e+000 1.8176600e+006 9.1210831e+001 9.2011513e+001 -0.0000000e+000 1.9754621e+004 8.0003700e+000 1.8176600e+006 - 1.9618750e+002 0.0000000e+000 1.8175434e+006 9.1210831e+001 9.2008980e+001 -0.0000000e+000 1.9753896e+004 8.0003691e+000 1.8175434e+006 - 1.9623750e+002 0.0000000e+000 1.8174446e+006 9.1210831e+001 9.2007446e+001 -0.0000000e+000 1.9753150e+004 8.0003691e+000 1.8174446e+006 - 1.9628751e+002 0.0000000e+000 1.8173891e+006 9.1210831e+001 9.2008018e+001 -0.0000000e+000 1.9752430e+004 8.0003681e+000 1.8173891e+006 - 1.9633749e+002 0.0000000e+000 1.8173914e+006 9.1210831e+001 9.2011063e+001 -0.0000000e+000 1.9751814e+004 8.0003681e+000 1.8173914e+006 - 1.9638750e+002 0.0000000e+000 1.8174480e+006 9.1210831e+001 9.2016060e+001 -0.0000000e+000 1.9751379e+004 8.0003681e+000 1.8174480e+006 - 1.9643750e+002 0.0000000e+000 1.8175456e+006 9.1210831e+001 9.2022194e+001 -0.0000000e+000 1.9751146e+004 8.0003681e+000 1.8175456e+006 - 1.9648750e+002 0.0000000e+000 1.8176733e+006 9.1210831e+001 9.2028816e+001 -0.0000000e+000 1.9751137e+004 8.0003681e+000 1.8176733e+006 - 1.9653751e+002 0.0000000e+000 1.8178208e+006 9.1210831e+001 9.2035423e+001 -0.0000000e+000 1.9751346e+004 8.0003681e+000 1.8178208e+006 - 1.9658749e+002 0.0000000e+000 1.8179734e+006 9.1210831e+001 9.2041367e+001 -0.0000000e+000 1.9751748e+004 8.0003691e+000 1.8179734e+006 - 1.9663750e+002 0.0000000e+000 1.8181125e+006 9.1210831e+001 9.2045906e+001 -0.0000000e+000 1.9752301e+004 8.0003691e+000 1.8181125e+006 - 1.9668750e+002 0.0000000e+000 1.8182229e+006 9.1210831e+001 9.2048584e+001 -0.0000000e+000 1.9752934e+004 8.0003691e+000 1.8182229e+006 - 1.9673750e+002 0.0000000e+000 1.8183038e+006 9.1210831e+001 9.2049637e+001 -0.0000000e+000 1.9753586e+004 8.0003691e+000 1.8183038e+006 - 1.9678751e+002 0.0000000e+000 1.8183671e+006 9.1210831e+001 9.2049911e+001 -0.0000000e+000 1.9754211e+004 8.0003691e+000 1.8183671e+006 - 1.9683749e+002 0.0000000e+000 1.8184310e+006 9.1210831e+001 9.2050400e+001 -0.0000000e+000 1.9754795e+004 8.0003691e+000 1.8184310e+006 - 1.9688750e+002 0.0000000e+000 1.8185103e+006 9.1210831e+001 9.2051773e+001 -0.0000000e+000 1.9755361e+004 8.0003700e+000 1.8185103e+006 - 1.9693750e+002 0.0000000e+000 1.8186113e+006 9.1210831e+001 9.2054192e+001 -0.0000000e+000 1.9755943e+004 8.0003700e+000 1.8186113e+006 - 1.9698750e+002 0.0000000e+000 1.8187339e+006 9.1210831e+001 9.2057457e+001 -0.0000000e+000 1.9756580e+004 8.0003700e+000 1.8187339e+006 - 1.9703751e+002 0.0000000e+000 1.8188711e+006 9.1210831e+001 9.2061203e+001 -0.0000000e+000 1.9757275e+004 8.0003700e+000 1.8188711e+006 - 1.9708749e+002 0.0000000e+000 1.8190163e+006 9.1210831e+001 9.2065025e+001 -0.0000000e+000 1.9758037e+004 8.0003700e+000 1.8190163e+006 - 1.9713750e+002 0.0000000e+000 1.8191590e+006 9.1210831e+001 9.2068428e+001 -0.0000000e+000 1.9758865e+004 8.0003700e+000 1.8191590e+006 - 1.9718750e+002 0.0000000e+000 1.8192845e+006 9.1210831e+001 9.2070763e+001 -0.0000000e+000 1.9759730e+004 8.0003700e+000 1.8192845e+006 - 1.9723750e+002 0.0000000e+000 1.8193770e+006 9.1210831e+001 9.2071442e+001 -0.0000000e+000 1.9760586e+004 8.0003700e+000 1.8193770e+006 - 1.9728751e+002 0.0000000e+000 1.8194283e+006 9.1210831e+001 9.2070305e+001 -0.0000000e+000 1.9761379e+004 8.0003710e+000 1.8194283e+006 - 1.9733749e+002 0.0000000e+000 1.8194418e+006 9.1210831e+001 9.2067802e+001 -0.0000000e+000 1.9762047e+004 8.0003710e+000 1.8194418e+006 - 1.9738750e+002 0.0000000e+000 1.8194320e+006 9.1210831e+001 9.2064781e+001 -0.0000000e+000 1.9762574e+004 8.0003710e+000 1.8194320e+006 - 1.9743750e+002 0.0000000e+000 1.8194151e+006 9.1210831e+001 9.2061996e+001 -0.0000000e+000 1.9762975e+004 8.0003710e+000 1.8194151e+006 - 1.9748750e+002 0.0000000e+000 1.8193979e+006 9.1210831e+001 9.2059769e+001 -0.0000000e+000 1.9763252e+004 8.0003719e+000 1.8193979e+006 - 1.9753751e+002 0.0000000e+000 1.8193816e+006 9.1210831e+001 9.2058006e+001 -0.0000000e+000 1.9763445e+004 8.0003719e+000 1.8193816e+006 - 1.9758749e+002 0.0000000e+000 1.8193619e+006 9.1210831e+001 9.2056374e+001 -0.0000000e+000 1.9763574e+004 8.0003729e+000 1.8193619e+006 - 1.9763750e+002 0.0000000e+000 1.8193271e+006 9.1210831e+001 9.2054321e+001 -0.0000000e+000 1.9763629e+004 8.0003729e+000 1.8193271e+006 - 1.9768750e+002 0.0000000e+000 1.8192604e+006 9.1210831e+001 9.2051003e+001 -0.0000000e+000 1.9763607e+004 8.0003738e+000 1.8192604e+006 - 1.9773750e+002 0.0000000e+000 1.8191440e+006 9.1210831e+001 9.2045769e+001 -0.0000000e+000 1.9763449e+004 8.0003738e+000 1.8191440e+006 - 1.9778751e+002 0.0000000e+000 1.8189776e+006 9.1210831e+001 9.2038803e+001 -0.0000000e+000 1.9763117e+004 8.0003738e+000 1.8189776e+006 - 1.9783749e+002 0.0000000e+000 1.8187824e+006 9.1210831e+001 9.2031326e+001 -0.0000000e+000 1.9762578e+004 8.0003738e+000 1.8187824e+006 - 1.9788750e+002 0.0000000e+000 1.8185873e+006 9.1210831e+001 9.2024811e+001 -0.0000000e+000 1.9761838e+004 8.0003738e+000 1.8185873e+006 - 1.9793750e+002 0.0000000e+000 1.8184171e+006 9.1210831e+001 9.2020195e+001 -0.0000000e+000 1.9760967e+004 8.0003738e+000 1.8184171e+006 - 1.9798750e+002 0.0000000e+000 1.8182808e+006 9.1210831e+001 9.2017593e+001 -0.0000000e+000 1.9760039e+004 8.0003729e+000 1.8182808e+006 - 1.9803751e+002 0.0000000e+000 1.8181749e+006 9.1210831e+001 9.2016548e+001 -0.0000000e+000 1.9759115e+004 8.0003729e+000 1.8181749e+006 - 1.9808749e+002 0.0000000e+000 1.8180896e+006 9.1210831e+001 9.2016335e+001 -0.0000000e+000 1.9758240e+004 8.0003719e+000 1.8180896e+006 - 1.9813750e+002 0.0000000e+000 1.8180133e+006 9.1210831e+001 9.2016289e+001 -0.0000000e+000 1.9757428e+004 8.0003719e+000 1.8180133e+006 - 1.9818750e+002 0.0000000e+000 1.8179378e+006 9.1210831e+001 9.2016006e+001 -0.0000000e+000 1.9756674e+004 8.0003710e+000 1.8179378e+006 - 1.9823750e+002 0.0000000e+000 1.8178573e+006 9.1210831e+001 9.2015266e+001 -0.0000000e+000 1.9755961e+004 8.0003710e+000 1.8178573e+006 - 1.9828751e+002 0.0000000e+000 1.8177664e+006 9.1210831e+001 9.2013870e+001 -0.0000000e+000 1.9755275e+004 8.0003700e+000 1.8177664e+006 - 1.9833749e+002 0.0000000e+000 1.8176603e+006 9.1210831e+001 9.2011719e+001 -0.0000000e+000 1.9754584e+004 8.0003700e+000 1.8176603e+006 - 1.9838750e+002 0.0000000e+000 1.8175465e+006 9.1210831e+001 9.2009262e+001 -0.0000000e+000 1.9753871e+004 8.0003691e+000 1.8175465e+006 - 1.9843750e+002 0.0000000e+000 1.8174458e+006 9.1210831e+001 9.2007576e+001 -0.0000000e+000 1.9753139e+004 8.0003691e+000 1.8174458e+006 - 1.9848750e+002 0.0000000e+000 1.8173850e+006 9.1210831e+001 9.2007858e+001 -0.0000000e+000 1.9752420e+004 8.0003681e+000 1.8173850e+006 - 1.9853751e+002 0.0000000e+000 1.8173818e+006 9.1210831e+001 9.2010620e+001 -0.0000000e+000 1.9751805e+004 8.0003681e+000 1.8173818e+006 - 1.9858749e+002 0.0000000e+000 1.8174331e+006 9.1210831e+001 9.2015442e+001 -0.0000000e+000 1.9751346e+004 8.0003681e+000 1.8174331e+006 - 1.9863750e+002 0.0000000e+000 1.8175280e+006 9.1210831e+001 9.2021523e+001 -0.0000000e+000 1.9751098e+004 8.0003681e+000 1.8175280e+006 - 1.9868750e+002 0.0000000e+000 1.8176546e+006 9.1210831e+001 9.2028175e+001 -0.0000000e+000 1.9751070e+004 8.0003681e+000 1.8176546e+006 - 1.9873750e+002 0.0000000e+000 1.8178040e+006 9.1210831e+001 9.2034920e+001 -0.0000000e+000 1.9751271e+004 8.0003681e+000 1.8178040e+006 - 1.9878751e+002 0.0000000e+000 1.8179615e+006 9.1210831e+001 9.2041145e+001 -0.0000000e+000 1.9751666e+004 8.0003691e+000 1.8179615e+006 - 1.9883749e+002 0.0000000e+000 1.8181086e+006 9.1210831e+001 9.2046074e+001 -0.0000000e+000 1.9752223e+004 8.0003691e+000 1.8181086e+006 - 1.9888750e+002 0.0000000e+000 1.8182290e+006 9.1210831e+001 9.2049171e+001 -0.0000000e+000 1.9752875e+004 8.0003691e+000 1.8182290e+006 - 1.9893750e+002 0.0000000e+000 1.8183185e+006 9.1210831e+001 9.2050537e+001 -0.0000000e+000 1.9753557e+004 8.0003691e+000 1.8183185e+006 - 1.9898750e+002 0.0000000e+000 1.8183874e+006 9.1210831e+001 9.2050941e+001 -0.0000000e+000 1.9754215e+004 8.0003691e+000 1.8183874e+006 - 1.9903751e+002 0.0000000e+000 1.8184536e+006 9.1210831e+001 9.2051399e+001 -0.0000000e+000 1.9754832e+004 8.0003691e+000 1.8184536e+006 - 1.9908749e+002 0.0000000e+000 1.8185339e+006 9.1210831e+001 9.2052666e+001 -0.0000000e+000 1.9755430e+004 8.0003700e+000 1.8185339e+006 - 1.9913750e+002 0.0000000e+000 1.8186350e+006 9.1210831e+001 9.2054962e+001 -0.0000000e+000 1.9756037e+004 8.0003700e+000 1.8186350e+006 - 1.9918750e+002 0.0000000e+000 1.8187561e+006 9.1210831e+001 9.2058128e+001 -0.0000000e+000 1.9756678e+004 8.0003700e+000 1.8187561e+006 - 1.9923750e+002 0.0000000e+000 1.8188934e+006 9.1210831e+001 9.2061829e+001 -0.0000000e+000 1.9757383e+004 8.0003700e+000 1.8188934e+006 - 1.9928751e+002 0.0000000e+000 1.8190404e+006 9.1210831e+001 9.2065689e+001 -0.0000000e+000 1.9758158e+004 8.0003700e+000 1.8190404e+006 - 1.9933749e+002 0.0000000e+000 1.8191869e+006 9.1210831e+001 9.2069229e+001 -0.0000000e+000 1.9758998e+004 8.0003700e+000 1.8191869e+006 - 1.9938750e+002 0.0000000e+000 1.8193190e+006 9.1210831e+001 9.2071808e+001 -0.0000000e+000 1.9759881e+004 8.0003700e+000 1.8193190e+006 - 1.9943750e+002 0.0000000e+000 1.8194199e+006 9.1210831e+001 9.2072807e+001 -0.0000000e+000 1.9760760e+004 8.0003700e+000 1.8194199e+006 - 1.9948750e+002 0.0000000e+000 1.8194794e+006 9.1210831e+001 9.2071953e+001 -0.0000000e+000 1.9761582e+004 8.0003710e+000 1.8194794e+006 - 1.9953751e+002 0.0000000e+000 1.8194994e+006 9.1210831e+001 9.2069588e+001 -0.0000000e+000 1.9762295e+004 8.0003710e+000 1.8194994e+006 - 1.9958749e+002 0.0000000e+000 1.8194931e+006 9.1210831e+001 9.2066536e+001 -0.0000000e+000 1.9762865e+004 8.0003710e+000 1.8194931e+006 - 1.9963750e+002 0.0000000e+000 1.8194763e+006 9.1210831e+001 9.2063606e+001 -0.0000000e+000 1.9763295e+004 8.0003710e+000 1.8194763e+006 - 1.9968750e+002 0.0000000e+000 1.8194586e+006 9.1210831e+001 9.2061195e+001 -0.0000000e+000 1.9763609e+004 8.0003719e+000 1.8194586e+006 - 1.9973750e+002 0.0000000e+000 1.8194409e+006 9.1210831e+001 9.2059258e+001 -0.0000000e+000 1.9763822e+004 8.0003719e+000 1.8194409e+006 - 1.9978751e+002 0.0000000e+000 1.8194190e+006 9.1210831e+001 9.2057495e+001 -0.0000000e+000 1.9763953e+004 8.0003729e+000 1.8194190e+006 - 1.9983749e+002 0.0000000e+000 1.8193841e+006 9.1210831e+001 9.2055389e+001 -0.0000000e+000 1.9764021e+004 8.0003729e+000 1.8193841e+006 - 1.9988750e+002 0.0000000e+000 1.8193200e+006 9.1210831e+001 9.2052170e+001 -0.0000000e+000 1.9764006e+004 8.0003738e+000 1.8193200e+006 - 1.9993750e+002 0.0000000e+000 1.8192086e+006 9.1210831e+001 9.2047127e+001 -0.0000000e+000 1.9763861e+004 8.0003738e+000 1.8192086e+006 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 deleted file mode 100644 index 7a3191e9c2..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.$41 +++ /dev/null @@ -1,800 +0,0 @@ - -2.7539790e+006 5.2066395e+006 5.8901185e+006 1.1140432e+005 1.4636380e+005 1.4788936e+005 2.0807119e+005 4.1174444e+005 - -8.1026569e+005 2.4957093e+006 2.6239465e+006 9.0228570e+004 1.2245208e+005 6.2065863e+004 1.3728322e+005 2.8640097e+005 - -1.0471470e+005 6.4621475e+005 6.5464394e+005 4.1605594e+004 7.0481867e+004 1.7147863e+004 7.2537875e+004 1.1219445e+005 - 1.4410109e-008 5.8071645e-009 1.5536228e-008 -2.1895366e-007 -1.1670807e-009 7.9273569e-008 7.9282160e-008 -1.1795009e-011 - -2.8093123e+006 5.2177755e+006 5.9259950e+006 1.1278297e+005 1.4636638e+005 1.5078955e+005 2.1014425e+005 4.0421269e+005 - -8.2650669e+005 2.5040133e+006 2.6368913e+006 9.1369406e+004 1.2264096e+005 6.3267480e+004 1.3799847e+005 2.8303166e+005 - -1.0693295e+005 6.4920363e+005 6.5795138e+005 4.2152008e+004 7.0692891e+004 1.7445785e+004 7.2813734e+004 1.1116528e+005 - 7.0191528e-009 2.2906042e-009 7.3834525e-009 -3.2959292e-008 3.3155203e-009 1.2058507e-008 1.2506010e-008 -4.0785153e-012 - -2.8558188e+006 5.2286205e+006 5.9576985e+006 1.1406438e+005 1.4639395e+005 1.5328159e+005 2.1195856e+005 3.9656497e+005 - -8.3970044e+005 2.5117085e+006 2.6483535e+006 9.2433344e+004 1.2283001e+005 6.4268613e+004 1.3862780e+005 2.7960753e+005 - -1.0861304e+005 6.5185394e+005 6.6084069e+005 4.2667785e+004 7.0877250e+004 1.7675734e+004 7.3048039e+004 1.1011945e+005 - 1.2991153e-008 -1.6906245e-009 1.3100697e-008 -1.4731847e-007 4.6262443e-009 5.3238381e-008 5.3439006e-008 -2.8137492e-012 - -2.8938458e+006 5.2395495e+006 5.9855845e+006 1.1525708e+005 1.4643584e+005 1.5535908e+005 2.1349450e+005 3.8879013e+005 - -8.5020538e+005 2.5192230e+006 2.6588218e+006 9.3427594e+004 1.2302762e+005 6.5076570e+004 1.3917886e+005 2.7612269e+005 - -1.0988827e+005 6.5431469e+005 6.6347806e+005 4.3153207e+004 7.1050602e+004 1.7849842e+004 7.3258484e+004 1.0905501e+005 - -4.1570338e-009 2.6137075e-009 4.9104374e-009 8.8208566e-008 -5.2987730e-009 -3.1906893e-008 3.2343884e-008 -4.5332627e-012 - -2.9240260e+006 5.2508150e+006 6.0100735e+006 1.1636721e+005 1.4647689e+005 1.5704284e+005 2.1475086e+005 3.8088288e+005 - -8.5830431e+005 2.5269430e+006 2.6687315e+006 9.4356984e+004 1.2323811e+005 6.5706117e+004 1.3966003e+005 2.7257444e+005 - -1.1082500e+005 6.5674356e+005 6.6602875e+005 4.3606418e+004 7.1228086e+004 1.7975273e+004 7.3461219e+004 1.0797120e+005 - -7.4486495e-010 -1.9892736e-009 2.1241549e-009 3.0640723e-007 5.8601486e-008 -1.0657224e-007 1.2162145e-007 -1.9028334e-011 - -2.9470618e+006 5.2625840e+006 6.0315805e+006 1.1740167e+005 1.4651330e+005 1.5836606e+005 2.1574513e+005 3.7286266e+005 - -8.6417031e+005 2.5350985e+006 2.6783418e+006 9.5225688e+004 1.2346061e+005 6.6175016e+004 1.4007731e+005 2.6897084e+005 - -1.1142255e+005 6.5929244e+005 6.6864150e+005 4.4024883e+004 7.1419906e+004 1.8054166e+004 7.3666516e+004 1.0686985e+005 - 4.2688115e-009 -4.2554547e-009 6.0275736e-009 2.8723694e-008 9.1385886e-009 -9.7633190e-009 1.3372966e-008 9.9618092e-012 - -2.9635573e+006 5.2750625e+006 6.0505335e+006 1.1836488e+005 1.4655689e+005 1.5935298e+005 2.1650011e+005 3.6476888e+005 - -8.6797163e+005 2.5437955e+006 2.6878003e+006 9.6036516e+004 1.2369341e+005 6.6499508e+004 1.4043592e+005 2.6532875e+005 - -1.1168195e+005 6.6208531e+005 6.7143863e+005 4.4408836e+004 7.1631375e+004 1.8088959e+004 7.3880070e+004 1.0575482e+005 - 4.6302406e-009 -1.0771313e-009 4.7538764e-009 1.8116037e-007 -2.0623773e-008 -6.5384590e-008 6.8560084e-008 1.8843593e-011 - -2.9739258e+006 5.2886295e+006 6.0674410e+006 1.1926285e+005 1.4662719e+005 1.6000659e+005 2.1702913e+005 3.5663606e+005 - -8.6996800e+005 2.5531498e+006 2.6972983e+006 9.6794188e+004 1.2394257e+005 6.6690648e+004 1.4074588e+005 2.6166375e+005 - -1.1166615e+005 6.6518813e+005 6.7449581e+005 4.4763051e+004 7.1865695e+004 1.8087020e+004 7.4106805e+004 1.0462979e+005 - 1.1662071e-008 4.6299364e-009 1.2547519e-008 2.7310829e-008 -3.5194702e-008 -1.1469176e-008 3.7016335e-008 -8.9244168e-012 - -2.9783815e+006 5.3038325e+006 6.0828770e+006 1.2011208e+005 1.4674016e+005 1.6031534e+005 2.1733311e+005 3.4847856e+005 - -8.7045550e+005 2.5633695e+006 2.7071305e+006 9.7515688e+004 1.2422506e+005 6.6753063e+004 1.4102425e+005 2.5798398e+005 - -1.1148892e+005 6.6859869e+005 6.7783038e+005 4.5099164e+004 7.2126727e+004 1.8059006e+004 7.4353156e+004 1.0349752e+005 - 1.7537638e-009 -2.2744056e-009 2.8720391e-009 -5.9026526e-009 1.2015235e-008 2.6924454e-009 1.2313210e-008 -2.5437430e-012 - -2.9769070e+006 5.3211630e+006 6.0972740e+006 1.2092414e+005 1.4690172e+005 1.6026639e+005 2.1740614e+005 3.4029616e+005 - -8.6958713e+005 2.5746863e+006 2.7175708e+006 9.8213914e+004 1.2456055e+005 6.6685117e+004 1.4128777e+005 2.5429241e+005 - -1.1122984e+005 6.7226050e+005 6.8140025e+005 4.5426742e+004 7.2417828e+004 1.8011617e+004 7.4624125e+004 1.0236066e+005 - -2.9010327e-009 1.1441410e-008 1.1803468e-008 1.9757147e-007 -5.9924602e-008 -7.2211940e-008 9.3837748e-008 -1.6711965e-011 - -2.9692958e+006 5.3408760e+006 6.1107835e+006 1.2168980e+005 1.4711727e+005 1.5986119e+005 2.1725352e+005 3.3210234e+005 - -8.6721069e+005 2.5871728e+006 2.7286475e+006 9.8881406e+004 1.2496066e+005 6.6481297e+004 1.4154480e+005 2.5059811e+005 - -1.1084802e+005 6.7610613e+005 6.8513269e+005 4.5744566e+004 7.2738742e+004 1.7940699e+004 7.4918578e+004 1.0122395e+005 - 9.9090780e-009 -4.0759787e-009 1.0714636e-008 -2.8072881e-007 3.9073313e-009 9.7989378e-008 9.8067247e-008 6.0680350e-012 - -2.9550958e+006 5.3628545e+006 6.1231365e+006 1.2239624e+005 1.4739367e+005 1.5910523e+005 2.1688563e+005 3.2393200e+005 - -8.6291288e+005 2.6006683e+006 2.7400900e+006 9.9506375e+004 1.2542221e+005 6.6131602e+004 1.4178900e+005 2.4691841e+005 - -1.1020171e+005 6.8009019e+005 6.8896088e+005 4.6046055e+004 7.3084594e+004 1.7832840e+004 7.5228773e+004 1.0009359e+005 - 2.3677145e-009 3.3562300e-009 4.1073536e-009 -9.6511990e-008 -5.9000996e-008 3.0594123e-008 6.6461403e-008 -1.2931878e-012 - -2.9335890e+006 5.3866775e+006 6.1336965e+006 1.2302894e+005 1.4773430e+005 1.5798964e+005 2.1630106e+005 3.1582747e+005 - -8.5621244e+005 2.6148690e+006 2.7514795e+006 1.0007623e+005 1.2593021e+005 6.5620344e+004 1.4200158e+005 2.4327253e+005 - -1.0913813e+005 6.8419488e+005 6.9284469e+005 4.6325492e+004 7.3447922e+004 1.7673447e+004 7.5544344e+004 9.8975125e+004 - 4.0071972e-009 5.5601852e-009 6.8537065e-009 -1.3760601e-007 -7.4668378e-009 4.7040309e-008 4.7629239e-008 5.6843419e-013 - -2.9039308e+006 5.4118430e+006 6.1417310e+006 1.2357833e+005 1.4813409e+005 1.5648875e+005 2.1548188e+005 3.0781972e+005 - -8.4672138e+005 2.6294975e+006 2.7624618e+006 1.0058367e+005 1.2646817e+005 6.4928234e+004 1.4216144e+005 2.3967392e+005 - -1.0756305e+005 6.8840919e+005 6.9676181e+005 4.6579895e+004 7.3821992e+004 1.7452750e+004 7.5857008e+004 9.7871945e+004 - 4.8876085e-009 -1.8841284e-009 5.2381921e-009 2.6748818e-008 -8.7486995e-009 -9.5431147e-009 1.2946458e-008 6.4233063e-012 - -2.8652578e+006 5.4378820e+006 6.1465650e+006 1.2403780e+005 1.4857295e+005 1.5456675e+005 2.1439405e+005 2.9991350e+005 - -8.3417369e+005 2.6444120e+006 2.7728615e+006 1.0102379e+005 1.2702523e+005 6.4034223e+004 1.4225256e+005 2.3612438e+005 - -1.0544619e+005 6.9271156e+005 7.0069125e+005 4.6808801e+004 7.4203641e+004 1.7166246e+004 7.6163375e+004 9.6784383e+004 - 9.0584820e-009 4.0002250e-009 9.9024193e-009 5.5520459e-008 -1.8849263e-008 -1.9676847e-008 2.7248360e-008 2.3305802e-012 - -2.8169153e+006 5.4643680e+006 6.1477090e+006 1.2440137e+005 1.4902350e+005 1.5220289e+005 2.1301109e+005 2.9210222e+005 - -8.1831531e+005 2.6595525e+006 2.7825995e+006 1.0139077e+005 1.2759399e+005 6.2921832e+004 1.4226519e+005 2.3262055e+005 - -1.0274879e+005 6.9706600e+005 7.0459800e+005 4.7009910e+004 7.4592586e+004 1.6808455e+004 7.6462922e+004 9.5711680e+004 - 6.0927210e-009 9.6316857e-009 1.1396957e-008 -9.8884854e-008 -1.5040570e-008 3.2825817e-008 3.6107519e-008 -1.3514523e-011 - -2.7585800e+006 5.4908840e+006 6.1448815e+006 1.2465581e+005 1.4946489e+005 1.4940284e+005 2.1133141e+005 2.8438938e+005 - -7.9885250e+005 2.6748090e+006 2.7915530e+006 1.0167033e+005 1.2816579e+005 6.1583348e+004 1.4219345e+005 2.2916259e+005 - -9.9375195e+004 7.0143850e+005 7.0844294e+005 4.7176629e+004 7.4986828e+004 1.6370068e+004 7.6752875e+004 9.4653648e+004 - 8.4780383e-010 7.6529396e-009 7.6997573e-009 1.1463929e-007 -1.6250851e-008 -3.9067217e-008 4.2312379e-008 -7.9012352e-012 - -2.6902010e+006 5.5169820e+006 6.1379370e+006 1.2472601e+005 1.4988717e+005 1.4618327e+005 2.0936980e+005 2.7679784e+005 - -7.7556644e+005 2.6899680e+006 2.7995413e+006 1.0178959e+005 1.2872822e+005 6.0017891e+004 1.4203205e+005 2.2576005e+005 - -9.5235875e+004 7.0579994e+005 7.1219619e+005 4.7266625e+004 7.5381320e+004 1.5842762e+004 7.7028156e+004 9.3613875e+004 - -1.8381495e-009 1.0278107e-009 2.1059887e-009 3.2357352e-008 -3.3155061e-009 -1.0895896e-008 1.1389167e-008 5.0732751e-012 - -2.6120070e+006 5.5423220e+006 6.1269825e+006 1.2461052e+005 1.5029436e+005 1.4255505e+005 2.0714809e+005 2.6935209e+005 - -7.4850463e+005 2.7047413e+006 2.8064008e+006 1.0174961e+005 1.2927111e+005 5.8232234e+004 1.4178156e+005 2.2241875e+005 - -9.0313492e+004 7.1010081e+005 7.1582100e+005 4.7285211e+004 7.5763219e+004 1.5227601e+004 7.7278359e+004 9.2590922e+004 - 2.1068329e-009 4.3254884e-009 4.8112985e-009 -1.5030125e-007 8.0390379e-009 5.0032227e-008 5.0673957e-008 -3.2684966e-012 - -2.5243200e+006 5.5665165e+006 6.1121435e+006 1.2445129e+005 1.5068388e+005 1.3851072e+005 2.0467255e+005 2.6207038e+005 - -7.1800856e+005 2.7189013e+006 2.8121095e+006 1.0168798e+005 1.2978097e+005 5.6234211e+004 1.4144039e+005 2.1914053e+005 - -8.4725258e+004 7.1433581e+005 7.1934275e+005 4.7308543e+004 7.6129898e+004 1.4535749e+004 7.7505156e+004 9.1580242e+004 - 4.4021964e-010 5.6313487e-009 5.6485292e-009 1.6666181e-008 1.3183595e-008 -5.1760480e-009 1.4163285e-008 1.4352963e-012 - -2.4275670e+006 5.5893015e+006 6.0937160e+006 1.2420225e+005 1.5103756e+005 1.3404203e+005 2.0193963e+005 2.5495006e+005 - -6.8450988e+005 2.7324080e+006 2.8168435e+006 1.0155891e+005 1.3025482e+005 5.4032773e+004 1.4101723e+005 2.1592603e+005 - -7.8629539e+004 7.1847344e+005 7.2276319e+005 4.7314051e+004 7.6482289e+004 1.3781252e+004 7.7713984e+004 9.0584344e+004 - 7.9764095e-010 -6.7178947e-009 6.7650827e-009 4.0058374e-008 -6.9047559e-009 -1.3234427e-008 1.4927348e-008 -5.3859139e-012 - -2.3227158e+006 5.6105550e+006 6.0723420e+006 1.2379109e+005 1.5134133e+005 1.2919271e+005 1.9898481e+005 2.4798805e+005 - -6.4830063e+005 2.7452690e+006 2.8207793e+006 1.0128980e+005 1.3069459e+005 5.1650328e+004 1.4053055e+005 2.1277631e+005 - -7.2075273e+004 7.2244119e+005 7.2602763e+005 4.7261078e+004 7.6820281e+004 1.2969188e+004 7.7907352e+004 8.9606797e+004 - 8.6659036e-010 -1.8653976e-009 2.0568633e-009 9.1977057e-009 -2.7646720e-008 -3.3668428e-009 2.7850975e-008 -6.4517280e-012 - -2.2112778e+006 5.6302480e+006 6.0489210e+006 1.2327739e+005 1.5160350e+005 1.2404818e+005 1.9588664e+005 2.4120495e+005 - -6.0964663e+005 2.7573728e+006 2.8239640e+006 1.0093693e+005 1.3109911e+005 4.9123996e+004 1.4000052e+005 2.0969733e+005 - -6.5022023e+004 7.2619694e+005 7.2910206e+005 4.7176410e+004 7.7137086e+004 1.2101045e+004 7.8080508e+004 8.8646688e+004 - 1.2228465e-009 9.9183808e-009 9.9934789e-009 1.2457473e-008 -4.5347008e-008 -4.4008743e-009 4.5560057e-008 -7.6880724e-012 - -2.0944876e+006 5.6483590e+006 6.0241875e+006 1.2271556e+005 1.5183348e+005 1.1864909e+005 1.9269408e+005 2.3463058e+005 - -5.6908606e+005 2.7686203e+006 2.8265028e+006 1.0055424e+005 1.3146622e+005 4.6483082e+004 1.3944191e+005 2.0670106e+005 - -5.7586254e+004 7.2972938e+005 7.3199806e+005 4.7088641e+004 7.7431359e+004 1.1189806e+004 7.8235711e+004 8.7705555e+004 - 2.8429903e-010 6.8638943e-009 6.8697794e-009 -1.9542050e-008 -5.3267840e-008 6.1428267e-009 5.3620862e-008 -3.0127012e-012 - -1.9732024e+006 5.6648230e+006 5.9986455e+006 1.2209016e+005 1.5202734e+005 1.1298541e+005 1.8941492e+005 2.2827852e+005 - -5.2740025e+005 2.7790053e+006 2.8286078e+006 1.0012799e+005 1.3179489e+005 4.3746938e+004 1.3886572e+005 2.0379578e+005 - -5.0039703e+004 7.3302994e+005 7.3473588e+005 4.6994453e+004 7.7701797e+004 1.0261202e+004 7.8376406e+004 8.6787406e+004 - 2.1377278e-010 1.1228979e-008 1.1231013e-008 4.4440931e-009 -6.1776191e-008 -1.2453540e-009 6.1788739e-008 1.3727686e-011 - -1.8481578e+006 5.6795805e+006 5.9727150e+006 1.2155384e+005 1.5217530e+005 1.0705466e+005 1.8605919e+005 2.2214952e+005 - -4.8521088e+005 2.7885890e+006 2.8304873e+006 9.9804898e+004 1.3208380e+005 4.0932020e+004 1.3828073e+005 2.0098258e+005 - -4.2589219e+004 7.3613144e+005 7.3736244e+005 4.6976383e+004 7.7955734e+004 9.3346650e+003 7.8512625e+004 8.5891391e+004 - -2.6785829e-009 8.5059586e-009 8.9177430e-009 2.3864178e-008 -1.5282126e-008 -7.4678894e-009 1.7009196e-008 1.1084467e-012 - -1.7200655e+006 5.6927635e+006 5.9469475e+006 1.2094874e+005 1.5228080e+005 1.0089475e+005 1.8267236e+005 2.1626802e+005 - -4.4268716e+005 2.7974233e+006 2.8322340e+006 9.9432695e+004 1.3233759e+005 3.8054250e+004 1.3770027e+005 1.9828205e+005 - -3.5252578e+004 7.3903194e+005 7.3987225e+005 4.6940188e+004 7.8190445e+004 8.4133350e+003 7.8641781e+004 8.5031953e+004 - -3.2971790e-009 1.0294796e-009 3.4541594e-009 1.5102319e-008 6.8306434e-008 -5.7441483e-009 6.8547529e-008 7.4749096e-012 - -1.5894776e+006 5.7045780e+006 5.9218790e+006 1.2026538e+005 1.5236184e+005 9.4561031e+004 1.7932072e+005 2.1067219e+005 - -3.9970941e+005 2.8054840e+006 2.8338153e+006 9.9005133e+004 1.3256045e+005 3.5126305e+004 1.3713545e+005 1.9571348e+005 - -2.7918963e+004 7.4174088e+005 7.4226613e+005 4.6880547e+004 7.8405141e+004 7.4889946e+003 7.8761992e+004 8.4215664e+004 - -2.7379750e-009 -4.2857229e-009 5.0856590e-009 -1.3306052e-007 1.9913628e-008 4.1606484e-008 4.6126480e-008 8.9954710e-012 - -1.4566204e+006 5.7153280e+006 5.8980265e+006 1.1948437e+005 1.5244255e+005 8.8085258e+004 1.7606175e+005 2.0540466e+005 - -3.5613391e+005 2.8127783e+006 2.8352343e+006 9.8505531e+004 1.3275650e+005 3.2154877e+004 1.3659513e+005 1.9329720e+005 - -2.0496738e+004 7.4425113e+005 7.4453331e+005 4.6794137e+004 7.8599148e+004 6.5544419e+003 7.8871969e+004 8.3448203e+004 - -6.4086256e-009 2.9363330e-009 7.0492931e-009 1.3818320e-007 3.1175787e-008 -4.4226169e-008 5.4109922e-008 -1.7905677e-012 - -1.3212195e+006 5.7256025e+006 5.8760655e+006 1.1862022e+005 1.5254853e+005 8.1450375e+004 1.7293125e+005 2.0048844e+005 - -3.1195231e+005 2.8194435e+006 2.8366488e+006 9.7947961e+004 1.3294472e+005 2.9131635e+004 1.3609905e+005 1.9104459e+005 - -1.3012050e+004 7.4654888e+005 7.4666231e+005 4.6683848e+004 7.8773313e+004 5.6114873e+003 7.8972930e+004 8.2733133e+004 - 4.7522128e-009 1.1027534e-009 4.8784825e-009 -2.3382609e-007 2.7667753e-008 7.2380971e-008 7.7488771e-008 -1.2178702e-011 - -1.1827593e+006 5.7358945e+006 5.8565695e+006 1.1772162e+005 1.5268589e+005 7.4615602e+004 1.6994255e+005 1.9592145e+005 - -2.6718813e+005 2.8257658e+006 2.8383695e+006 9.7374344e+004 1.3313945e+005 2.6044924e+004 1.3566302e+005 1.8895519e+005 - -5.5363257e+003 7.4862369e+005 7.4864413e+005 4.6583449e+004 7.8936461e+004 4.6641563e+003 7.9074141e+004 8.2069586e+004 - -6.7634218e-009 3.7471004e-009 7.7320523e-009 -1.3231187e-007 -1.1631143e-007 4.5549257e-008 1.2491230e-007 9.8054898e-013 - -1.0405062e+006 5.7467260e+006 5.8401635e+006 1.1680978e+005 1.5285766e+005 6.7546328e+004 1.6711664e+005 1.9169675e+005 - -2.2168498e+005 2.8320295e+006 2.8406928e+006 9.6800016e+004 1.3336161e+005 2.2874111e+004 1.3530908e+005 1.8702913e+005 - 1.9165251e+003 7.5048619e+005 7.5048863e+005 4.6490461e+004 7.9095078e+004 3.7115530e+003 7.9182117e+004 8.1460258e+004 - -1.8672162e-008 5.0911595e-009 1.9353799e-008 4.1832752e-007 3.7069896e-008 -1.3169060e-007 1.3680859e-007 6.7785777e-012 - -8.9388494e+005 5.7582595e+006 5.8272275e+006 1.1576860e+005 1.5305959e+005 6.0249801e+004 1.6449097e+005 1.8782111e+005 - -1.7496597e+005 2.8384015e+006 2.8437890e+006 9.6113539e+004 1.3361492e+005 1.9605127e+004 1.3504558e+005 1.8527303e+005 - 9.4911699e+003 7.5217150e+005 7.5223138e+005 4.6346273e+004 7.9252547e+004 2.7392585e+003 7.9299867e+004 8.0910820e+004 - -2.4646134e-008 5.7123186e-009 2.5299457e-008 2.4472433e-007 -6.2410138e-008 -7.2866364e-008 9.5940258e-008 1.8474111e-013 - -7.4266856e+005 5.7701940e+006 5.8177915e+006 1.1456694e+005 1.5327989e+005 5.2773152e+004 1.6211025e+005 1.8430931e+005 - -1.2639058e+005 2.8448695e+006 2.8476758e+006 9.5285758e+004 1.3388314e+005 1.6234767e+004 1.3486388e+005 1.8369106e+005 - 1.7446309e+004 7.5375463e+005 7.5395650e+005 4.6140633e+004 7.9412016e+004 1.7238691e+003 7.9430727e+004 8.0420750e+004 - -1.1306346e-008 7.8836937e-010 1.1333798e-008 1.8136184e-007 -3.9344314e-008 -5.3912053e-008 6.6741926e-008 3.3679726e-012 - -5.8664231e+005 5.7822905e+006 5.8119730e+006 1.1322705e+005 1.5351870e+005 4.5145621e+004 1.6001913e+005 1.8117734e+005 - -7.5557055e+004 2.8512718e+006 2.8522728e+006 9.4340602e+004 1.3416044e+005 1.2754150e+004 1.3476531e+005 1.8228584e+005 - 2.5958828e+004 7.5533113e+005 7.5577706e+005 4.5866500e+004 7.9573000e+004 6.5021387e+002 7.9575656e+004 7.9987711e+004 - -1.0988002e-008 -1.1530641e-008 1.5927707e-008 3.3992114e-007 4.9353872e-008 -1.0768395e-007 1.1845521e-007 -5.2295945e-012 - -4.2568038e+005 5.7941495e+006 5.8097650e+006 1.1174642e+005 1.5376022e+005 3.7355734e+004 1.5823292e+005 1.7843052e+005 - -2.2479926e+004 2.8575715e+006 2.8576600e+006 9.3273672e+004 1.3442814e+005 9.1623936e+003 1.3474003e+005 1.8105500e+005 - 3.5006930e+004 7.5697300e+005 7.5778200e+005 4.5530734e+004 7.9737383e+004 -4.8011081e+002 7.9738828e+004 7.9607461e+004 - -2.7494991e-008 2.9752565e-009 2.7655499e-008 1.7764394e-007 2.5513870e-008 -5.6239593e-008 6.1756367e-008 -1.8047785e-012 - -2.5979608e+005 5.8056580e+006 5.8114680e+006 1.1015441e+005 1.5399361e+005 2.9371732e+004 1.5676967e+005 1.7605830e+005 - 3.2492109e+004 2.8638103e+006 2.8639948e+006 9.2109719e+004 1.3468298e+005 5.4591836e+003 1.3479358e+005 1.7999020e+005 - 4.4435699e+004 7.5871350e+005 7.6001363e+005 4.5150270e+004 7.9907367e+004 -1.6534775e+003 7.9924477e+004 7.9275453e+004 - -2.9039334e-008 2.3885987e-009 2.9137405e-008 4.7589967e-007 -1.0903415e-007 -1.3756019e-007 1.7553134e-007 1.7138291e-011 - -8.9490250e+004 5.8168800e+006 5.8175685e+006 1.0847368e+005 1.5421416e+005 2.1196980e+004 1.5566413e+005 1.7404570e+005 - 8.8997609e+004 2.8700578e+006 2.8714373e+006 9.0865984e+004 1.3492936e+005 1.6556659e+003 1.3493952e+005 1.7908294e+005 - 5.4130605e+004 7.6053538e+005 7.6245931e+005 4.4736652e+004 8.0084125e+004 -2.8588240e+003 8.0135141e+004 7.8988641e+004 - -3.9373496e-008 7.0926403e-009 4.0007219e-008 4.0329775e-007 1.2847067e-008 -1.2396625e-007 1.2463016e-007 -1.6271429e-011 - 8.4148656e+004 5.8279265e+006 5.8285340e+006 1.0670277e+005 1.5442588e+005 1.2890531e+004 1.5496295e+005 1.7238763e+005 - 1.4681231e+005 2.8763285e+006 2.8800728e+006 8.9540391e+004 1.3517308e+005 -2.2226748e+003 1.3519134e+005 1.7832975e+005 - 6.4092273e+004 7.6238569e+005 7.6507500e+005 4.4289488e+004 8.0266047e+004 -4.0939368e+003 8.0370383e+004 7.8745828e+004 - -4.6190296e-009 9.0298391e-009 1.0142654e-008 2.8418345e-008 -1.3708387e-007 3.3232084e-009 1.3712415e-007 -1.4210855e-014 - 2.5982634e+005 5.8389540e+006 5.8447320e+006 1.0485601e+005 1.5464511e+005 4.5248447e+003 1.5471130e+005 1.7109277e+005 - 2.0565230e+005 2.8825308e+006 2.8898575e+006 8.8140656e+004 1.3541897e+005 -6.1454429e+003 1.3555834e+005 1.7773309e+005 - 7.4332266e+004 7.6420675e+005 7.6781325e+005 4.3806902e+004 8.0448625e+004 -5.3566182e+003 8.0626758e+004 7.8546914e+004 - -1.4285209e-008 6.7180048e-009 1.5786030e-008 2.2309673e-007 6.5885644e-009 -6.8138526e-008 6.8456323e-008 1.4608759e-011 - 4.3634097e+005 5.8499975e+006 5.8662480e+006 1.0294448e+005 1.5488433e+005 -3.8602356e+003 1.5493242e+005 1.7017617e+005 - 2.6499713e+005 2.8885638e+006 2.9006938e+006 8.6681578e+004 1.3566786e+005 -1.0084825e+004 1.3604217e+005 1.7729814e+005 - 8.4730461e+004 7.6595131e+005 7.7062356e+005 4.3298914e+004 8.0627242e+004 -6.6337617e+003 8.0899688e+004 7.8392188e+004 - -1.8138719e-008 -5.3862301e-009 1.8921538e-008 2.8926530e-007 -5.9289292e-008 -8.1243613e-008 1.0057706e-007 7.6170181e-012 - 6.1280738e+005 5.8610370e+006 5.8929865e+006 1.0099920e+005 1.5514847e+005 -1.2268222e+004 1.5563277e+005 1.6964536e+005 - 3.2411053e+005 2.8943518e+006 2.9124423e+006 8.5197977e+004 1.3591970e+005 -1.4020963e+004 1.3664097e+005 1.7702806e+005 - 9.5041414e+004 7.6758600e+005 7.7344756e+005 4.2787301e+004 8.0798719e+004 -7.9020098e+003 8.1184203e+004 7.8282445e+004 - 1.0755017e-009 -2.7423637e-009 2.9457192e-009 -6.9885022e-007 -4.2977092e-008 2.1469194e-007 2.1895127e-007 -1.0913936e-011 - 7.8848400e+005 5.8719360e+006 5.9246385e+006 9.9047602e+004 1.5542952e+005 -2.0703334e+004 1.5680231e+005 1.6949625e+005 - 3.8236619e+005 2.8998525e+006 2.9249528e+006 8.3720820e+004 1.3617323e+005 -1.7937281e+004 1.3734955e+005 1.7692311e+005 - 1.0505390e+005 7.6908206e+005 7.7622394e+005 4.2290844e+004 8.0961711e+004 -9.1414502e+003 8.1476156e+004 7.8219453e+004 - -2.1605969e-008 -1.8101209e-009 2.1681661e-008 -6.5260957e-007 -4.0769976e-008 2.0020308e-007 2.0431216e-007 1.7863044e-011 - 9.6262594e+005 5.8824360e+006 5.9606795e+006 9.7105461e+004 1.5571259e+005 -2.9133703e+004 1.5841459e+005 1.6972058e+005 - 4.3950850e+005 2.9050033e+006 2.9380625e+006 8.2263859e+004 1.3642416e+005 -2.1816463e+004 1.3815755e+005 1.7698313e+005 - 1.1472539e+005 7.7041300e+005 7.7890831e+005 4.1814133e+004 8.1115000e+004 -1.0346840e+004 8.1772250e+004 7.8205727e+004 - 2.0387359e-008 -2.2311806e-009 2.0509086e-008 -6.7337686e-007 3.6964806e-008 1.9665285e-007 2.0009682e-007 -2.0321522e-012 - 1.1345435e+006 5.8921735e+006 6.0004080e+006 9.5164922e+004 1.5598441e+005 -3.7498027e+004 1.6042830e+005 1.7031831e+005 - 4.9561047e+005 2.9096710e+006 2.9515785e+006 8.0814422e+004 1.3666320e+005 -2.5642582e+004 1.3904809e+005 1.7721180e+005 - 1.2415364e+005 7.7156369e+005 7.8148875e+005 4.1342461e+004 8.1256313e+004 -1.1525435e+004 8.2069633e+004 7.8244750e+004 - -3.2804817e-008 3.0669796e-009 3.2947874e-008 6.4484783e-007 2.4098441e-008 -1.9515967e-007 1.9664189e-007 -9.6633812e-013 - 1.3037851e+006 5.9006790e+006 6.0430015e+006 9.3214750e+004 1.5623108e+005 -4.5744688e+004 1.6279044e+005 1.7129641e+005 - 5.5081275e+005 2.9136825e+006 2.9652893e+006 7.9361531e+004 1.3687692e+005 -2.9405684e+004 1.3999995e+005 1.7761372e+005 - 1.3344319e+005 7.7253463e+005 7.8397506e+005 4.0869203e+004 8.1382703e+004 -1.2685415e+004 8.2365430e+004 7.8338117e+004 - -2.8462452e-008 6.7588877e-009 2.9253952e-008 5.5130465e-007 -1.1168970e-007 -1.4880807e-007 1.8606029e-007 4.3343107e-012 - 1.4703428e+006 5.9076570e+006 6.0878830e+006 9.1266758e+004 1.5645109e+005 -5.3867824e+004 1.6546506e+005 1.7266466e+005 - 6.0511600e+005 2.9168373e+006 2.9789435e+006 7.7912070e+004 1.3705427e+005 -3.3106504e+004 1.4099614e+005 1.7819361e+005 - 1.4259688e+005 7.7333938e+005 7.8637631e+005 4.0395719e+004 8.1490672e+004 -1.3826977e+004 8.2655398e+004 7.8486891e+004 - 2.4472435e-008 1.9779200e-010 2.4473234e-008 -1.9042171e-006 2.3550584e-008 5.6118262e-007 5.6167653e-007 2.0889956e-012 - 1.6344551e+006 5.9127515e+006 6.1344990e+006 8.9311016e+004 1.5663223e+005 -6.1892207e+004 1.6841705e+005 1.7442948e+005 - 6.5845431e+005 2.9190893e+006 2.9924310e+006 7.6464078e+004 1.3718527e+005 -3.6751273e+004 1.4202272e+005 1.7895458e+005 - 1.5155020e+005 7.7397425e+005 7.8867206e+005 3.9928754e+004 8.1578633e+004 -1.4945316e+004 8.2936336e+004 7.8691953e+004 - 3.2573242e-009 1.6045778e-009 3.6310921e-009 -5.3566862e-007 -7.8229604e-008 1.6994706e-007 1.8708788e-007 -8.9386276e-012 - 1.7963986e+006 5.9160760e+006 6.1827990e+006 8.7365375e+004 1.5678055e+005 -6.9836523e+004 1.7163123e+005 1.7658350e+005 - 7.1083656e+005 2.9204023e+006 3.0056678e+006 7.5024063e+004 1.3727377e+005 -4.0346824e+004 1.4308023e+005 1.7989441e+005 - 1.6028364e+005 7.7441738e+005 7.9083069e+005 3.9470215e+004 8.1645125e+004 -1.6039358e+004 8.3205695e+004 7.8953594e+004 - -1.3976059e-008 1.2627899e-008 1.8835978e-008 -4.0154387e-007 -4.2548763e-008 1.2509206e-007 1.3213031e-007 -4.5616844e-012 - 1.9562043e+006 5.9178060e+006 6.2327490e+006 8.5422203e+004 1.5689867e+005 -7.7684250e+004 1.7507722e+005 1.7911338e+005 - 7.6244594e+005 2.9208350e+006 3.0187085e+006 7.3580922e+004 1.3732777e+005 -4.3894422e+004 1.4417223e+005 1.8100836e+005 - 1.6887108e+005 7.7462481e+005 7.9281844e+005 3.9011789e+004 8.1690109e+004 -1.7115988e+004 8.3463953e+004 7.9271445e+004 - -3.0832027e-008 -9.1869179e-010 3.0845708e-008 1.3367090e-006 -4.8370424e-008 -3.8660363e-007 3.8961784e-007 1.1098678e-011 - 2.1136953e+006 5.9181880e+006 6.2843185e+006 8.3463328e+004 1.5699388e+005 -8.5397844e+004 1.7871728e+005 1.8200778e+005 - 8.1349850e+005 2.9204583e+006 3.0316425e+006 7.2117211e+004 1.3735652e+005 -4.7390762e+004 1.4530209e+005 1.8229150e+005 - 1.7741891e+005 7.7455538e+005 7.9461531e+005 3.8541012e+004 8.1713641e+004 -1.8184586e+004 8.3712594e+004 7.9644234e+004 - -3.6654658e-008 -9.5239105e-010 3.6667029e-008 9.5723379e-008 5.4626526e-009 -2.9103361e-008 2.9611588e-008 2.4868996e-012 - 2.2686448e+006 5.9174470e+006 6.3374225e+006 8.1479695e+004 1.5707666e+005 -9.2951164e+004 1.8251847e+005 1.8526245e+005 - 8.6404163e+005 2.9193213e+006 3.0445040e+006 7.0625703e+004 1.3736642e+005 -5.0831664e+004 1.4646977e+005 1.8374041e+005 - 1.8596259e+005 7.7419381e+005 7.9621488e+005 3.8052199e+004 8.1715805e+004 -1.9248178e+004 8.3952156e+004 8.0070000e+004 - -7.0588847e-008 -1.2657582e-009 7.0600194e-008 -3.9516132e-007 -5.0662109e-008 1.2497365e-007 1.3485200e-007 8.1001872e-013 - 2.4208893e+006 5.9157900e+006 6.3919700e+006 7.9483336e+004 1.5715875e+005 -1.0034666e+005 1.8646266e+005 1.8887600e+005 - 9.1388338e+005 2.9174510e+006 3.0572380e+006 6.9119641e+004 1.3736308e+005 -5.4214816e+004 1.4767484e+005 1.8535213e+005 - 1.9442870e+005 7.7355706e+005 7.9761713e+005 3.7550379e+004 8.1696945e+004 -2.0300172e+004 8.4181281e+004 8.0546617e+004 - -2.4926457e-008 8.3571594e-009 2.6290119e-008 1.5852244e-009 -3.7729023e-008 6.1749148e-009 3.8230993e-008 -1.5106139e-011 - 2.5702413e+006 5.9132500e+006 6.4476870e+006 7.7483555e+004 1.5723941e+005 -1.0759855e+005 1.9053000e+005 1.9284300e+005 - 9.6273013e+005 2.9149228e+006 3.0697923e+006 6.7606734e+004 1.3734227e+005 -5.7535418e+004 1.4890675e+005 1.8712248e+005 - 2.0269916e+005 7.7267594e+005 7.9882106e+005 3.7045457e+004 8.1659289e+004 -2.1330049e+004 8.4399109e+004 8.1072047e+004 - -6.9540540e-008 9.8340216e-009 7.0232431e-008 9.9878980e-007 -4.6311015e-008 -2.8550960e-007 2.8924114e-007 1.6186164e-011 - 2.7163558e+006 5.9099060e+006 6.5042740e+006 7.5499508e+004 1.5731592e+005 -1.1470117e+005 1.9469119e+005 1.9714611e+005 - 1.0103699e+006 2.9118115e+006 3.0821248e+006 6.6101570e+004 1.3730719e+005 -6.0785996e+004 1.5016058e+005 1.8904320e+005 - 2.1071370e+005 7.7158756e+005 7.9984225e+005 3.6541539e+004 8.1605672e+004 -2.2331803e+004 8.4606117e+004 8.1644070e+004 - -2.1259616e-008 6.0397483e-009 2.2100901e-008 2.9481956e-007 -9.1578315e-008 -6.9623212e-008 1.1503904e-007 -1.8403057e-011 - 2.8586423e+006 5.9058030e+006 6.5612760e+006 7.3540383e+004 1.5738156e+005 -1.2161567e+005 1.9889527e+005 2.0176147e+005 - 1.0567313e+006 2.9082005e+006 3.0942383e+006 6.4609391e+004 1.3726145e+005 -6.3953629e+004 1.5142911e+005 1.9110358e+005 - 2.1849920e+005 7.7032438e+005 8.0071319e+005 3.6034410e+004 8.1539023e+004 -2.3306389e+004 8.4804484e+004 8.2259891e+004 - -1.4070102e-008 -5.9605423e-009 1.5280570e-008 -1.8539140e-007 -3.4100708e-008 6.1155490e-008 7.0020370e-008 2.5153213e-012 - 2.9963403e+006 5.9007875e+006 6.6179565e+006 7.1587570e+004 1.5742336e+005 -1.2828906e+005 2.0307683e+005 2.0667134e+005 - 1.1017645e+006 2.9041625e+006 3.1061300e+006 6.3111039e+004 1.3719616e+005 -6.7019188e+004 1.5269039e+005 1.9329538e+005 - 2.2610252e+005 7.6891431e+005 8.0146838e+005 3.5517363e+004 8.1462984e+004 -2.4256547e+004 8.4997633e+004 8.2916555e+004 - -4.4389893e-008 -1.3403322e-008 4.6369298e-008 1.0521391e-006 1.0590171e-008 -3.1203911e-007 3.1221876e-007 -5.0732751e-012 - 3.1288033e+006 5.8948165e+006 6.6737000e+006 6.9661375e+004 1.5744019e+005 -1.3468823e+005 2.0719153e+005 2.1186481e+005 - 1.1452684e+006 2.8996803e+006 3.1176570e+006 6.1627398e+004 1.3711131e+005 -6.9969266e+004 1.5393248e+005 1.9561227e+005 - 2.3349741e+005 7.6739919e+005 8.0213625e+005 3.4992469e+004 8.1377766e+004 -2.5178273e+004 8.5183836e+004 8.3611188e+004 - 3.2332395e-008 -2.8861891e-009 3.2460957e-008 -6.6451543e-007 5.7661964e-010 1.9578076e-007 1.9578161e-007 2.8606451e-011 - 3.2555393e+006 5.8876995e+006 6.7278185e+006 6.7583055e+004 1.5742939e+005 -1.4081055e+005 2.1121464e+005 2.1734094e+005 - 1.1868840e+006 2.8946980e+006 3.1285733e+006 5.9978688e+004 1.3699600e+005 -7.2791695e+004 1.5513392e+005 1.9805245e+005 - 2.4057556e+005 7.6581206e+005 8.0271088e+005 3.4470504e+004 8.1283492e+004 -2.6060947e+004 8.5359117e+004 8.4342008e+004 - -3.7214402e-008 5.1335958e-009 3.7566817e-008 -2.0516029e-007 -4.7831875e-008 7.0491780e-008 8.5187907e-008 9.4644292e-012 - 3.3761150e+006 5.8795275e+006 6.7798965e+006 6.5950969e+004 1.5739588e+005 -1.4665666e+005 2.1513167e+005 2.2308884e+005 - 1.2262600e+006 2.8892113e+006 3.1386710e+006 5.8761699e+004 1.3685463e+005 -7.5476961e+004 1.5628808e+005 2.0061078e+005 - 2.4721602e+005 7.6415738e+005 8.0315144e+005 3.3963922e+004 8.1178539e+004 -2.6892600e+004 8.5517055e+004 8.5107547e+004 - -8.2167475e-008 8.5553582e-009 8.2611670e-008 3.4369043e-007 7.3686550e-009 -1.0308638e-007 1.0334940e-007 1.2391865e-011 - 3.4900800e+006 5.8702550e+006 6.8293890e+006 6.4209316e+004 1.5734041e+005 -1.5221583e+005 2.1891930e+005 2.2909850e+005 - 1.2631825e+006 2.8831785e+006 3.1477528e+006 5.7415406e+004 1.3668472e+005 -7.8013930e+004 1.5738133e+005 2.0328384e+005 - 2.5337819e+005 7.6241556e+005 8.0341650e+005 3.3477359e+004 8.1061195e+004 -2.7668541e+004 8.5653172e+004 8.5907445e+004 - -1.6560584e-008 -6.9480270e-009 1.7959065e-008 -8.3740082e-007 -9.5230916e-009 2.4973616e-007 2.4991766e-007 -3.2542857e-012 - 3.5968543e+006 5.8600600e+006 6.8758755e+006 6.2566227e+004 1.5726780e+005 -1.5744978e+005 2.2253897e+005 2.3534984e+005 - 1.2975949e+006 2.8766378e+006 3.1557563e+006 5.6143113e+004 1.3649409e+005 -8.0388859e+004 1.5840772e+005 2.0606389e+005 - 2.5908842e+005 7.6053350e+005 8.0345381e+005 3.3015629e+004 8.0930148e+004 -2.8389801e+004 8.5765203e+004 8.6739977e+004 - 9.2718926e-009 1.2118219e-008 1.5258415e-008 1.1737892e-007 -8.0950144e-009 -3.2972295e-008 3.3951459e-008 2.6858515e-012 - 3.6959880e+006 5.8491795e+006 6.9190480e+006 6.1061133e+004 1.5718872e+005 -1.6232725e+005 2.2596111e+005 2.4183028e+005 - 1.3294446e+006 2.8696220e+006 3.1626183e+006 5.4981074e+004 1.3629077e+005 -8.2591617e+004 1.5936294e+005 2.0894586e+005 - 2.6436544e+005 7.5847263e+005 8.0322463e+005 3.2596014e+004 8.0786352e+004 -2.9057256e+004 8.5853125e+004 8.7603016e+004 - -5.4834061e-008 1.8935093e-009 5.4866742e-008 -3.3050591e-007 -1.7017655e-008 1.0190965e-007 1.0332075e-007 1.5958790e-011 - 3.7873118e+006 5.8377495e+006 6.9586675e+006 5.9589770e+004 1.5710756e+005 -1.6684209e+005 2.2917041e+005 2.4853206e+005 - 1.3586103e+006 2.8621728e+006 3.1682573e+006 5.3838984e+004 1.3608072e+005 -8.4620180e+004 1.6024523e+005 2.1192967e+005 - 2.6915213e+005 7.5619163e+005 8.0266344e+005 3.2174545e+004 8.0625539e+004 -2.9665850e+004 8.5910070e+004 8.8499805e+004 - 1.5003810e-008 7.3606765e-009 1.6712088e-008 -8.6941969e-007 -7.3838919e-008 2.7544723e-007 2.8517252e-007 1.2406076e-011 - 3.8709580e+006 5.8259310e+006 6.9946970e+006 5.8119613e+004 1.5704356e+005 -1.7101344e+005 2.3218156e+005 2.5545822e+005 - 1.3849684e+006 2.8542148e+006 3.1724878e+006 5.2684910e+004 1.3586559e+005 -8.6478109e+004 1.6105255e+005 2.1501558e+005 - 2.7338353e+005 7.5369719e+005 8.0174681e+005 3.1713813e+004 8.0449734e+004 -3.0211346e+004 8.5935352e+004 8.9429211e+004 - 4.7050072e-008 -5.2962390e-009 4.7347221e-008 -1.5889675e-007 1.6620447e-009 4.6966107e-008 4.6995506e-008 -5.2438054e-012 - 3.9469685e+006 5.8138925e+006 7.0270835e+006 5.6911508e+004 1.5700513e+005 -1.7484008e+005 2.3498864e+005 2.6259778e+005 - 1.4085869e+006 2.8457918e+006 3.1753185e+006 5.1770992e+004 1.3564778e+005 -8.8165281e+004 1.6178206e+005 2.1819716e+005 - 2.7709703e+005 7.5099756e+005 8.0048738e+005 3.1425770e+004 8.0260734e+004 -3.0695818e+004 8.5930313e+004 9.0387930e+004 - -2.8304935e-008 7.8169515e-009 2.9364504e-008 6.8259220e-007 1.5128876e-008 -2.0752506e-007 2.0807579e-007 3.3111291e-012 - 4.0150978e+006 5.8016160e+006 7.0554770e+006 5.5716141e+004 1.5697733e+005 -1.7828584e+005 2.3754520e+005 2.6992147e+005 - 1.4296834e+006 2.8370015e+006 3.1768810e+006 5.0842879e+004 1.3543163e+005 -8.9675664e+004 1.6242983e+005 2.2146558e+005 - 2.8040916e+005 7.4809725e+005 7.9892356e+005 3.1083707e+004 8.0055578e+004 -3.1128650e+004 8.5894633e+004 9.1376609e+004 - -3.5521246e-008 -1.7090809e-009 3.5562337e-008 -2.0968460e-007 -4.3051145e-008 7.3133407e-008 8.4863984e-008 1.1795009e-012 - 4.0751620e+006 5.7891265e+006 7.0796135e+006 5.4594375e+004 1.5695020e+005 -1.8133189e+005 2.3982206e+005 2.7740469e+005 - 1.4483018e+006 2.8279668e+006 3.1772588e+006 4.9958938e+004 1.3521827e+005 -9.1004945e+004 1.6299042e+005 2.2480972e+005 - 2.8335644e+005 7.4502313e+005 7.9708863e+005 3.0745004e+004 7.9839250e+004 -3.1512600e+004 8.5833266e+004 9.2391016e+004 - -5.4373043e-008 -3.5795047e-009 5.4490741e-008 1.3296670e-006 -4.9927806e-008 -3.8756082e-007 3.9076357e-007 -1.1596057e-011 - 4.1272490e+006 5.7763770e+006 7.0993460e+006 5.3550941e+004 1.5692595e+005 -1.8399956e+005 2.4182967e+005 2.8504738e+005 - 1.4642373e+006 2.8186950e+006 3.1763238e+006 4.9129777e+004 1.3500069e+005 -9.2156461e+004 1.6345641e+005 2.2822838e+005 - 2.8582741e+005 7.4185056e+005 7.9500913e+005 3.0414963e+004 7.9615180e+004 -3.1838900e+004 8.5745508e+004 9.3429938e+004 - -1.3088868e-007 1.5385883e-008 1.3178988e-007 6.9784852e-007 3.5368402e-009 -2.1129225e-007 2.1132185e-007 -1.3343993e-011 - 4.1715018e+006 5.7633175e+006 7.1145805e+006 5.2431895e+004 1.5690809e+005 -1.8631747e+005 2.4358644e+005 2.9285338e+005 - 1.4772686e+006 2.8091470e+006 3.1738983e+006 4.8216539e+004 1.3477456e+005 -9.3134906e+004 1.6382397e+005 2.3172728e+005 - 2.8770334e+005 7.3863313e+005 7.9268663e+005 3.0026699e+004 7.9381914e+004 -3.2097488e+004 8.5625563e+004 9.4499289e+004 - -2.5958103e-008 -3.5199150e-009 2.6195666e-008 1.0887020e-007 -7.4997217e-009 -3.1088632e-008 3.1980445e-008 1.7621460e-012 - 4.2076780e+006 5.7498640e+006 7.1249905e+006 5.1438391e+004 1.5689080e+005 -1.8826953e+005 2.4507170e+005 3.0079409e+005 - 1.4874059e+006 2.7993360e+006 3.1699620e+006 4.7407082e+004 1.3453550e+005 -9.3932422e+004 1.6408261e+005 2.3528669e+005 - 2.8902978e+005 7.3538013e+005 7.9014056e+005 2.9681209e+004 7.9140438e+004 -3.2290527e+004 8.5474484e+004 9.5586914e+004 - -1.2456147e-009 1.2673844e-008 1.2734908e-008 -1.4816821e-007 -8.7093383e-008 6.6650131e-008 1.0966995e-007 -4.1922021e-012 - 4.2356305e+006 5.7358915e+006 7.1302885e+006 5.0564754e+004 1.5685191e+005 -1.8982881e+005 2.4624681e+005 3.0882388e+005 - 1.4948230e+006 2.7893498e+006 3.1646435e+006 4.6687801e+004 1.3428536e+005 -9.4545523e+004 1.6422977e+005 2.3888911e+005 - 2.8989528e+005 7.3207394e+005 7.8738269e+005 2.9366572e+004 7.8894688e+004 -3.2425807e+004 8.5298328e+004 9.6689328e+004 - -1.0059883e-007 -2.0849189e-010 1.0059904e-007 1.5264395e-006 -5.2832490e-008 -4.5194076e-007 4.5501838e-007 6.5369932e-013 - 4.2553060e+006 5.7211595e+006 7.1301680e+006 4.9799168e+004 1.5676763e+005 -1.9097447e+005 2.4707758e+005 3.1689859e+005 - 1.4996814e+006 2.7792348e+006 3.1580358e+006 4.6043758e+004 1.3402113e+005 -9.4973352e+004 1.6426077e+005 2.4251633e+005 - 2.9036975e+005 7.2870419e+005 7.8442613e+005 2.9071469e+004 7.8647117e+004 -3.2509775e+004 8.5101438e+004 9.7801898e+004 - -3.7959687e-008 -2.6278411e-009 3.8050537e-008 -7.4332894e-007 -9.2168051e-009 2.2970696e-007 2.2989178e-007 1.3926638e-011 - 4.2667255e+006 5.7053185e+006 7.1242970e+006 4.9136641e+004 1.5662970e+005 -1.9170261e+005 2.4755353e+005 3.2500581e+005 - 1.5020099e+006 2.7688520e+006 3.1500120e+006 4.5472645e+004 1.3373100e+005 -9.5216750e+004 1.6416519e+005 2.4616223e+005 - 2.9046156e+005 7.2528713e+005 7.8128694e+005 2.8794514e+004 7.8395266e+004 -3.2543189e+004 8.4881547e+004 9.8922102e+004 - -3.2744452e-008 2.0485942e-009 3.2808472e-008 -1.5022533e-007 -6.3284659e-008 6.2132301e-008 8.8686924e-008 1.2732926e-011 - 4.2700365e+006 5.6879880e+006 7.1124130e+006 4.8522203e+004 1.5644395e+005 -1.9203038e+005 2.4769008e+005 3.3316125e+005 - 1.5017208e+006 2.7579278e+006 3.1402755e+006 4.4930387e+004 1.3339833e+005 -9.5279320e+004 1.6393066e+005 2.4983367e+005 - 2.9011850e+005 7.2183981e+005 7.7795981e+005 2.8517756e+004 7.8131031e+004 -3.2521381e+004 8.4629180e+004 1.0005235e+005 - 8.3581533e-009 -3.4139855e-009 9.0285113e-009 -3.3174427e-007 -5.8337363e-008 1.1709758e-007 1.3082467e-007 1.9468871e-012 - 4.2654115e+006 5.6689560e+006 7.0944200e+006 4.7910414e+004 1.5622130e+005 -1.9197775e+005 2.4750869e+005 3.4137144e+005 - 1.4987384e+006 2.7462060e+006 3.1285563e+006 4.4377637e+004 1.3301408e+005 -9.5164805e+004 1.6355148e+005 2.5353238e+005 - 2.8929825e+005 7.1834319e+005 7.7440975e+005 2.8232201e+004 7.7845367e+004 -3.2440053e+004 8.4334211e+004 1.0119280e+005 - 3.4378527e-008 -2.6722615e-009 3.4482227e-008 -1.7747884e-006 -4.8753279e-008 5.6212281e-007 5.6423306e-007 9.4644292e-012 - 4.2530135e+006 5.6482210e+006 7.0703980e+006 4.7450457e+004 1.5596245e+005 -1.9155400e+005 2.4701664e+005 3.4960331e+005 - 1.4931059e+006 2.7336245e+006 3.1148143e+006 4.3952191e+004 1.3258063e+005 -9.4876492e+004 1.6303119e+005 2.5724003e+005 - 2.8800713e+005 7.1474069e+005 7.7058575e+005 2.8005203e+004 7.7537555e+004 -3.2300193e+004 8.3996281e+004 1.0233496e+005 - -4.2654587e-008 3.5929499e-009 4.2805642e-008 1.4500404e-008 2.1786903e-008 -1.0050741e-008 2.3993470e-008 1.9397817e-011 - 4.2328945e+006 5.6259895e+006 7.0405365e+006 4.7121367e+004 1.5565700e+005 -1.9074720e+005 2.4619828e+005 3.5780413e+005 - 1.4850153e+006 2.7203300e+006 3.0992685e+006 4.3626242e+004 1.3211366e+005 -9.4415742e+004 1.6238334e+005 2.6093647e+005 - 2.8631606e+005 7.1092975e+005 7.6641894e+005 2.7812002e+004 7.7208273e+004 -3.2108785e+004 8.3618727e+004 1.0347563e+005 - 3.3617187e-008 5.2007465e-010 3.3621209e-008 -4.3370750e-007 2.8151931e-008 1.2849641e-007 1.3154413e-007 -4.9737992e-013 - 4.2049990e+006 5.6024190e+006 7.0049350e+006 4.6904676e+004 1.5529608e+005 -1.8953978e+005 2.4503509e+005 3.6593016e+005 - 1.4746238e+006 2.7064505e+006 3.0821080e+006 4.3376129e+004 1.3162488e+005 -9.3781195e+004 1.6161689e+005 2.6460391e+005 - 2.8429413e+005 7.0683688e+005 7.6186713e+005 2.7637563e+004 7.6859250e+004 -3.1872285e+004 8.3205695e+004 1.0461073e+005 - 4.7877410e-008 -7.9480849e-009 4.8532655e-008 -1.4244058e-006 -1.7717213e-008 4.5244346e-007 4.5279023e-007 2.9871217e-011 - 4.1693295e+006 5.5773805e+006 6.9635110e+006 4.6790250e+004 1.5488002e+005 -1.8793464e+005 2.4353080e+005 3.7397166e+005 - 1.4618843e+006 2.6919110e+006 3.0632485e+006 4.3194328e+004 1.3110930e+005 -9.2973336e+004 1.6072863e+005 2.6823706e+005 - 2.8191475e+005 7.0245831e+005 7.5691713e+005 2.7479279e+004 7.6488078e+004 -3.1588535e+004 8.2754227e+004 1.0573809e+005 - 8.0209883e-010 1.6410056e-009 1.8265437e-009 -7.2091785e-007 -1.6768738e-008 2.3228895e-007 2.3289343e-007 -9.9191766e-012 - 4.1259538e+006 5.5505305e+006 6.9160600e+006 4.6778574e+004 1.5441570e+005 -1.8595255e+005 2.4170759e+005 3.8194009e+005 - 1.4466025e+006 2.6764683e+006 3.0423908e+006 4.3090566e+004 1.3054965e+005 -9.1994063e+004 1.5970634e+005 2.7183897e+005 - 2.7908597e+005 6.9784581e+005 7.5158350e+005 2.7345199e+004 7.6089398e+004 -3.1249221e+004 8.2256375e+004 1.0685737e+005 - -7.4652199e-008 -3.5481289e-009 7.4736469e-008 -1.7449088e-006 5.8766716e-009 5.5391791e-007 5.5394912e-007 2.2708946e-011 - 4.0748835e+006 5.5215450e+006 6.8623710e+006 4.6870250e+004 1.5390608e+005 -1.8360730e+005 2.3958030e+005 3.8983825e+005 - 1.4286433e+006 2.6599203e+006 3.0193040e+006 4.3070836e+004 1.2993030e+005 -9.0843148e+004 1.5853819e+005 2.7540988e+005 - 2.7575294e+005 6.9305219e+005 7.4589613e+005 2.7240432e+004 7.5659102e+004 -3.0848961e+004 8.1706539e+004 1.0796823e+005 - -1.1165940e-007 3.1964316e-009 1.1170515e-007 1.5978018e-006 -4.0643101e-008 -5.0175339e-007 5.0339679e-007 8.9528385e-013 - 4.0159738e+006 5.4903720e+006 6.8023695e+006 4.7059840e+004 1.5334666e+005 -1.8088884e+005 2.3714125e+005 3.9764413e+005 - 1.4080380e+006 2.6422728e+006 2.9940233e+006 4.3127117e+004 1.2924962e+005 -8.9515984e+004 1.5722142e+005 2.7894069e+005 - 2.7195150e+005 6.8808650e+005 7.3987881e+005 2.7159580e+004 7.5197281e+004 -3.0390111e+004 8.1106039e+004 1.0906860e+005 - 4.7709207e-008 5.7036784e-009 4.8048939e-008 -6.6069339e-007 5.5049682e-008 1.9942796e-007 2.0688638e-007 5.5848659e-012 - 3.9489603e+006 5.4572960e+006 6.7361985e+006 4.7339277e+004 1.5273386e+005 -1.7777342e+005 2.3437369e+005 4.0532181e+005 - 1.3848744e+006 2.6237218e+006 2.9667815e+006 4.3245488e+004 1.2852029e+005 -8.8005398e+004 1.5576397e+005 2.8241684e+005 - 2.6774856e+005 6.8291913e+005 7.3353106e+005 2.7092703e+004 7.4707711e+004 -2.9877949e+004 8.0460758e+004 1.1015479e+005 - 9.0334140e-010 7.0833091e-009 7.1406787e-009 -1.5585729e-006 -4.4420787e-008 5.1783422e-007 5.1973598e-007 1.1297629e-011 - 3.8736985e+006 5.4228535e+006 6.6642990e+006 4.7702063e+004 1.5207897e+005 -1.7425570e+005 2.3128567e+005 4.1284703e+005 - 1.3590943e+006 2.6045023e+006 2.9377830e+006 4.3420160e+004 1.2776057e+005 -8.6308328e+004 1.5418136e+005 2.8582784e+005 - 2.6312688e+005 6.7752225e+005 7.2682331e+005 2.7037273e+004 7.4194328e+004 -2.9310895e+004 7.9774219e+004 1.1122348e+005 - -1.1869476e-008 7.6476558e-009 1.4119883e-008 5.8522926e-007 -2.0379034e-008 -1.8677294e-007 1.8788144e-007 -3.2827074e-012 - 3.7902300e+006 5.3876600e+006 6.5873155e+006 4.8144324e+004 1.5140931e+005 -1.7035420e+005 2.2791519e+005 4.2021694e+005 - 1.3304971e+006 2.5847795e+006 2.9071133e+006 4.3655777e+004 1.2698628e+005 -8.4426828e+004 1.5249067e+005 2.8917172e+005 - 2.5798527e+005 6.7189806e+005 7.1972450e+005 2.6999971e+004 7.3659469e+004 -2.8680393e+004 7.9046078e+004 1.1227354e+005 - -1.6360611e-008 -6.5093175e-009 1.7607976e-008 5.1746235e-007 1.7637333e-008 -1.7533149e-007 1.7621636e-007 -9.2370556e-013 - 3.6987363e+006 5.3523185e+006 6.5059940e+006 4.8661238e+004 1.5075667e+005 -1.6609292e+005 2.2430878e+005 4.2743775e+005 - 1.2989464e+006 2.5646795e+006 2.8748640e+006 4.3956785e+004 1.2621039e+005 -8.2365875e+004 1.5070900e+005 2.9245081e+005 - 2.5224188e+005 6.6607319e+005 7.1223550e+005 2.6987148e+004 7.3104813e+004 -2.7979660e+004 7.8276273e+004 1.1330564e+005 - -4.9938883e-008 -8.8077812e-010 4.9946649e-008 6.8548786e-007 -1.2354832e-008 -2.2552848e-007 2.2586664e-007 -4.9311666e-012 - 3.5994725e+006 5.3173655e+006 6.4211040e+006 4.9244840e+004 1.5014039e+005 -1.6148277e+005 2.2049677e+005 4.3450209e+005 - 1.2645489e+006 2.5443943e+006 2.8413073e+006 4.4316828e+004 1.2544618e+005 -8.0130914e+004 1.4885466e+005 2.9566256e+005 - 2.4592283e+005 6.6008163e+005 7.0440456e+005 2.6995930e+004 7.2534625e+004 -2.7211424e+004 7.7470859e+004 1.1431983e+005 - 3.7768579e-008 9.2190389e-009 3.8877452e-008 -1.4707348e-006 -1.6813431e-008 4.9875365e-007 4.9903696e-007 1.3073986e-011 - 3.4927733e+006 5.2831680e+006 6.3333505e+006 4.9963719e+004 1.4955569e+005 -1.5652411e+005 2.1648719e+005 4.4137559e+005 - 1.2276210e+006 2.5242400e+006 2.8069273e+006 4.4795012e+004 1.2470469e+005 -7.7728359e+004 1.4694542e+005 2.9879063e+005 - 2.3914222e+005 6.5397419e+005 6.9632694e+005 2.7057504e+004 7.1960047e+004 -2.6386656e+004 7.6645313e+004 1.1530982e+005 - -6.6865418e-008 -4.0683341e-009 6.6989074e-008 1.8128915e-007 -1.0428082e-008 -5.9084940e-008 5.9998122e-008 4.8316906e-013 - 3.3792310e+006 5.2500395e+006 6.2435660e+006 5.0746203e+004 1.4898998e+005 -1.5123252e+005 2.1229528e+005 4.4801941e+005 - 1.1885020e+006 2.5045615e+006 2.7722490e+006 4.5315480e+004 1.2399732e+005 -7.5171883e+004 1.4500395e+005 3.0182159e+005 - 2.3199275e+005 6.4782369e+005 6.8811056e+005 2.7124592e+004 7.1391047e+004 -2.5514936e+004 7.5813547e+004 1.1627444e+005 - -5.8783067e-010 -1.6216841e-009 1.7249361e-009 6.6215955e-007 -3.6357335e-009 -2.2605430e-007 2.2608353e-007 -8.1286089e-012 - 3.2595470e+006 5.2179975e+006 6.1524100e+006 5.1558051e+004 1.4842870e+005 -1.4563638e+005 2.0794478e+005 4.5440563e+005 - 1.1474420e+006 2.4855740e+006 2.7376453e+006 4.5846125e+004 1.2332195e+005 -7.2478180e+004 1.4304331e+005 3.0474334e+005 - 2.2451466e+005 6.4174619e+005 6.7988600e+005 2.7179797e+004 7.0837734e+004 -2.4601857e+004 7.4988242e+004 1.1720999e+005 - -2.1686837e-008 -2.9614426e-009 2.1888102e-008 -6.0268633e-008 1.9476005e-008 1.6399866e-008 2.5461155e-008 -1.3457679e-011 - 3.1343935e+006 5.1868200e+006 6.0603235e+006 5.2397789e+004 1.4786584e+005 -1.3976473e+005 2.0346619e+005 4.6053006e+005 - 1.1046381e+006 2.4672723e+006 2.7032680e+006 4.6393055e+004 1.2266459e+005 -6.9663180e+004 1.4106581e+005 3.0755184e+005 - 2.1673442e+005 6.3587869e+005 6.7180019e+005 2.7228803e+004 7.0304180e+004 -2.3650865e+004 7.4175742e+004 1.1811359e+005 - -3.9135159e-008 7.9460243e-009 3.9933695e-008 -3.9946053e-007 -3.7260179e-008 1.4775986e-007 1.5238535e-007 5.4996008e-012 - 3.0043583e+006 5.1562695e+006 5.9676865e+006 5.3258590e+004 1.4730322e+005 -1.3363675e+005 1.9888947e+005 4.6639900e+005 - 1.0603378e+006 2.4495538e+006 2.6692003e+006 4.6957406e+004 1.2201035e+005 -6.6740250e+004 1.3907116e+005 3.1024769e+005 - 2.0871477e+005 6.3033056e+005 6.6398681e+005 2.7275246e+004 6.9790734e+004 -2.2668107e+004 7.3379766e+004 1.1898382e+005 - -4.7648193e-008 -1.3322410e-009 4.7666816e-008 6.8546171e-007 1.3752839e-009 -2.4167173e-007 2.4167565e-007 -7.7875484e-012 - 2.8699228e+006 5.1263400e+006 5.8750165e+006 5.4134051e+004 1.4674355e+005 -1.2726236e+005 1.9424052e+005 4.7200609e+005 - 1.0148488e+006 2.4324073e+006 2.6356258e+006 4.7534234e+004 1.2135645e+005 -6.3719523e+004 1.3706773e+005 3.1282650e+005 - 2.0055803e+005 6.2514138e+005 6.5652519e+005 2.7318400e+004 6.9297820e+004 -2.1663100e+004 7.2604945e+004 1.1981820e+005 - -8.6369297e-008 5.4205449e-009 8.6539231e-008 -1.2128030e-008 -7.5884188e-008 2.0549876e-008 7.8617475e-008 3.2116532e-012 - 2.7314763e+006 5.0973515e+006 5.7830750e+006 5.5021359e+004 1.4619061e+005 -1.2065142e+005 1.8954805e+005 4.7732550e+005 - 9.6842563e+005 2.4159845e+006 2.6028503e+006 4.8116844e+004 1.2071575e+005 -6.0609191e+004 1.3507689e+005 3.1527572e+005 - 1.9234530e+005 6.2027775e+005 6.4941606e+005 2.7356447e+004 6.8827609e+004 -2.0643768e+004 7.1856836e+004 1.2061217e+005 - 6.0416113e-008 3.5432581e-009 6.0519923e-008 -2.0450938e-007 -2.4397863e-008 7.8331297e-008 8.2042959e-008 2.0619950e-011 - 2.5893005e+006 5.0698140e+006 5.6927580e+006 5.5923137e+004 1.4565217e+005 -1.1381971e+005 1.8484989e+005 4.8232650e+005 - 9.2115438e+005 2.4005098e+006 2.5711813e+006 4.8705418e+004 1.2010902e+005 -5.7415926e+004 1.3312688e+005 3.1758063e+005 - 1.8408402e+005 6.1567006e+005 6.4260144e+005 2.7392139e+004 6.8382820e+004 -1.9611766e+004 7.1139523e+004 1.2136055e+005 - 5.7699459e-009 -2.6806726e-009 6.3622543e-009 -5.0084344e-007 3.1141099e-009 1.8016655e-007 1.8019347e-007 -6.4659389e-012 - 2.4435568e+006 5.0441605e+006 5.6048660e+006 5.6841305e+004 1.4514122e+005 -1.0678640e+005 1.8019242e+005 4.8699250e+005 - 8.7295594e+005 2.3861235e+006 2.5407945e+006 4.9305129e+004 1.1955227e+005 -5.4144324e+004 1.3124158e+005 3.1973253e+005 - 1.7571556e+005 6.1126038e+005 6.3601506e+005 2.7433168e+004 6.7964438e+004 -1.8562803e+004 7.0453828e+004 1.2206002e+005 - -1.6954678e-008 2.5175639e-009 1.7140573e-008 -3.9308921e-007 5.5077436e-009 1.4191093e-007 1.4201778e-007 2.6375346e-011 - 2.2943353e+006 5.0205380e+006 5.5199435e+006 5.7776387e+004 1.4467013e+005 -9.9567938e+004 1.7562238e+005 4.9132422e+005 - 8.2370719e+005 2.3728113e+006 2.5117180e+006 4.9924418e+004 1.1904895e+005 -5.0797371e+004 1.2943348e+005 3.2173047e+005 - 1.6717045e+005 6.0702975e+005 6.2962775e+005 2.7488674e+004 6.7570914e+004 -1.7491234e+004 6.9798078e+004 1.2270980e+005 - 1.2339199e-009 1.0731323e-008 1.0802030e-008 -3.4705315e-007 -1.0520955e-007 1.4728434e-007 1.8100201e-007 -9.1091579e-012 - 2.1416865e+006 4.9987340e+006 5.4382130e+006 5.8725094e+004 1.4423791e+005 -9.2172102e+004 1.7117322e+005 4.9532519e+005 - 7.7338438e+005 2.3604600e+006 2.4839273e+006 5.0564297e+004 1.1859053e+005 -4.7375848e+004 1.2770351e+005 3.2357531e+005 - 1.5843675e+005 6.0299481e+005 6.2346206e+005 2.7562777e+004 6.7200398e+004 -1.6396057e+004 6.9171703e+004 1.2331015e+005 - -1.0337059e-008 1.6326496e-011 1.0337072e-008 3.0642212e-007 3.3594816e-008 -1.1930398e-007 1.2394374e-007 -7.8159701e-013 - 1.9856834e+006 4.9782445e+006 5.3596510e+006 5.9683266e+004 1.4382398e+005 -8.4601367e+004 1.6686141e+005 4.9898694e+005 - 7.2208556e+005 2.3489570e+006 2.4574390e+006 5.1218590e+004 1.1816127e+005 -4.3879922e+004 1.2604575e+005 3.2526350e+005 - 1.4956003e+005 5.9919213e+005 6.1757544e+005 2.7653174e+004 6.6852695e+004 -1.5281178e+004 6.8576945e+004 1.2386025e+005 - -2.9091686e-008 5.7340817e-009 2.9651405e-008 1.8060152e-007 1.2332293e-008 -6.9313899e-008 7.0402429e-008 1.7791990e-011 - 1.8264499e+006 4.9583840e+006 5.2840790e+006 6.0638957e+004 1.4339325e+005 -7.6860672e+004 1.6269353e+005 5.0228881e+005 - 6.6993519e+005 2.3382108e+006 2.4322918e+006 5.1870164e+004 1.1774148e+005 -4.0310688e+004 1.2445083e+005 3.2678666e+005 - 1.4059464e+005 5.9567013e+005 6.1203738e+005 2.7752721e+004 6.6529977e+004 -1.4151512e+004 6.8018406e+004 1.2435793e+005 - 2.6069257e-008 2.0441480e-009 2.6149277e-008 -3.6594497e-007 -1.4639923e-008 1.3940245e-007 1.4016908e-007 -5.8548721e-012 - 1.6641399e+006 4.9383275e+006 5.2111840e+006 6.1566160e+004 1.4290623e+005 -6.8962023e+004 1.5867563e+005 5.0521116e+005 - 6.1699081e+005 2.3280905e+006 2.4084608e+006 5.2490730e+004 1.1730646e+005 -3.6670059e+004 1.2290443e+005 3.2813722e+005 - 1.3155975e+005 5.9248438e+005 6.0691488e+005 2.7850516e+004 6.6233820e+004 -1.3008952e+004 6.7499273e+004 1.2480120e+005 - -2.4929577e-008 -1.1859864e-009 2.4957771e-008 -1.4474837e-007 1.0739910e-008 5.2735423e-008 5.3817942e-008 1.5859314e-011 - 1.4989420e+006 4.9172015e+006 5.1405930e+006 6.2406934e+004 1.4233409e+005 -6.0922980e+004 1.5482442e+005 5.0774956e+005 - 5.6323325e+005 2.3183303e+006 2.3857675e+006 5.3029574e+004 1.1682696e+005 -3.2961266e+004 1.2138774e+005 3.2931450e+005 - 1.2243842e+005 5.8968950e+005 6.0226644e+005 2.7926428e+004 6.5962109e+004 -1.1852149e+004 6.7018453e+004 1.2519055e+005 - -4.2432578e-008 6.4484889e-009 4.2919769e-008 1.2134848e-007 -7.2064793e-008 -3.4713011e-008 7.9989547e-008 -2.9132252e-012 - 1.3310275e+006 4.8941160e+006 5.0718840e+006 6.3060410e+004 1.4166009e+005 -5.2757813e+004 1.5116538e+005 5.0991444e+005 - 5.0865659e+005 2.3085053e+006 2.3638800e+006 5.3398535e+004 1.1627187e+005 -2.9186527e+004 1.1987911e+005 3.3032525e+005 - 1.1322891e+005 5.8731013e+005 5.9812538e+005 2.7942193e+004 6.5706906e+004 -1.0680646e+004 6.6569313e+004 1.2552979e+005 - -4.0682053e-008 4.5997357e-009 4.0941263e-008 2.5152221e-007 1.2598122e-008 -9.7649078e-008 9.8458393e-008 -2.1742608e-012 - 1.1605350e+006 4.8682140e+006 5.0046330e+006 6.3372004e+004 1.4087630e+005 -4.4473512e+004 1.4772956e+005 5.1171906e+005 - 4.5331241e+005 2.2980598e+006 2.3423430e+006 5.3457027e+004 1.1561357e+005 -2.5347229e+004 1.1835953e+005 3.3117838e+005 - 1.0396022e+005 5.8529544e+005 5.9445650e+005 2.7827160e+004 6.5453422e+004 -9.4965156e+003 6.6138750e+004 1.2582509e+005 - 1.8085162e-008 -4.0633363e-010 1.8089727e-008 1.8887301e-008 3.9258268e-008 -1.2735150e-008 4.1272212e-008 -1.5276669e-011 - 9.8760969e+005 4.8387090e+006 4.9384690e+006 6.3173535e+004 1.3997902e+005 -3.6079188e+004 1.4455392e+005 5.1316500e+005 - 3.9721556e+005 2.2863178e+006 2.3205665e+006 5.3048344e+004 1.1483463e+005 -2.1446875e+004 1.1682021e+005 3.3187719e+005 - 9.4632297e+004 5.8346956e+005 5.9109394e+005 2.7484922e+004 6.5178625e+004 -8.3000078e+003 6.5704977e+004 1.2608195e+005 - -1.8364661e-008 5.3127902e-010 1.8372344e-008 3.2235840e-007 3.4757363e-008 -1.2871995e-007 1.3333003e-007 2.8180125e-011 - 8.1240663e+005 4.8049720e+006 4.8731675e+006 6.2642316e+004 1.3897103e+005 -2.7596719e+004 1.4168461e+005 5.1422506e+005 - 3.4020244e+005 2.2725613e+006 2.2978843e+006 5.2328598e+004 1.1392886e+005 -1.7491648e+004 1.1526380e+005 3.3240188e+005 - 8.5136648e+004 5.8149281e+005 5.8769219e+005 2.6986869e+004 6.4855988e+004 -7.0835601e+003 6.5241672e+004 1.2629011e+005 - 1.4663311e-009 4.8673279e-009 5.0834053e-009 -1.2884315e-007 -5.9561472e-008 5.7288084e-008 8.2640753e-008 3.2684966e-013 - 6.3513931e+005 4.7671595e+006 4.8092840e+006 6.1953035e+004 1.3788136e+005 -1.9067016e+004 1.3919345e+005 5.1486494e+005 - 2.8194106e+005 2.2562495e+006 2.2737970e+006 5.1468832e+004 1.1292789e+005 -1.3492313e+004 1.1373105e+005 3.3272697e+005 - 7.5251664e+004 5.7877900e+005 5.8365050e+005 2.6424240e+004 6.4444723e+004 -5.8296489e+003 6.4707859e+004 1.2643399e+005 - -1.7922325e-008 7.7673148e-009 1.9533072e-008 3.4217550e-007 -5.2978876e-008 -1.2748653e-007 1.3805642e-007 -4.4053650e-013 - 4.5589291e+005 4.7270350e+006 4.7489680e+006 6.2041895e+004 1.3680088e+005 -1.0514382e+004 1.3720434e+005 5.1503394e+005 - 2.2222330e+005 2.2373308e+006 2.2483400e+006 5.1362223e+004 1.1190833e+005 -9.4503721e+003 1.1230665e+005 3.3280638e+005 - 6.4919984e+004 5.7476350e+005 5.7841825e+005 2.6343789e+004 6.3905578e+004 -4.5262729e+003 6.4065672e+004 1.2647440e+005 - -1.3520808e-008 -3.3628096e-009 1.3932723e-008 -3.3893451e-007 2.3731332e-008 1.3102053e-007 1.3315237e-007 2.7000624e-013 - 2.7507328e+005 4.6867850e+006 4.6948505e+006 6.4187887e+004 1.3579631e+005 -1.9355719e+003 1.3581011e+005 5.1472678e+005 - 1.6140692e+005 2.2166745e+006 2.2225433e+006 5.3206805e+004 1.1092953e+005 -5.3719185e+003 1.1105952e+005 3.3262988e+005 - 5.4328313e+004 5.6950594e+005 5.7209144e+005 2.7408621e+004 6.3261145e+004 -3.1847014e+003 6.3341254e+004 1.2639526e+005 - 7.2206414e-009 1.3913182e-009 7.3534636e-009 -3.0649286e-007 2.1517380e-008 1.1998875e-007 1.2190283e-007 1.9667823e-011 - 9.4433219e+004 4.6489140e+006 4.6498730e+006 6.7601734e+004 1.3490747e+005 6.6308018e+003 1.3507033e+005 5.1406563e+005 - 1.0047254e+005 2.1960708e+006 2.1983678e+006 5.6204773e+004 1.1003465e+005 -1.3024308e+003 1.1004236e+005 3.3230744e+005 - 4.3648238e+004 5.6371981e+005 5.6540713e+005 2.8977684e+004 6.2589977e+004 -1.8347250e+003 6.2616863e+004 1.2627910e+005 - 1.1963142e-008 6.0773964e-010 1.1978568e-008 -7.2182424e-008 1.0788668e-008 2.8137741e-008 3.0135158e-008 1.0160761e-011 - -8.3800250e+004 4.6173065e+006 4.6180670e+006 7.1262977e+004 1.3421600e+005 1.5121382e+004 1.3506514e+005 5.1311459e+005 - 4.0509652e+004 2.1778573e+006 2.1782340e+006 5.9343938e+004 1.0930309e+005 2.7031121e+003 1.0933652e+005 3.3189731e+005 - 3.3089988e+004 5.5823350e+005 5.5921338e+005 3.0401730e+004 6.1980336e+004 -5.0855951e+002 6.1982422e+004 1.2616863e+005 - -7.2360085e-010 -1.7635351e-009 1.9062147e-009 -6.1030136e-008 1.4392896e-008 2.3731687e-008 2.7755151e-008 3.1121772e-012 - -2.5779445e+005 4.5962085e+006 4.6034325e+006 7.4489516e+004 1.3382472e+005 2.3468830e+004 1.3586700e+005 5.1186166e+005 - -1.7724371e+004 2.1642385e+006 2.1643110e+006 6.1991012e+004 1.0884046e+005 6.6025015e+003 1.0904054e+005 3.3139113e+005 - 2.2826002e+004 5.5355481e+005 5.5402525e+005 3.1421029e+004 6.1496457e+004 7.7343042e+002 6.1501320e+004 1.2605702e+005 - -1.1528046e-008 8.1843723e-009 1.4137885e-008 -1.6382275e-007 -6.7812806e-008 7.2003225e-008 9.8909254e-008 7.4322770e-012 - -4.2647966e+005 4.5880585e+006 4.6078375e+006 7.7151039e+004 1.3377806e+005 3.1631107e+004 1.3746672e+005 5.1026584e+005 - -7.3765719e+004 2.1567145e+006 2.1579758e+006 6.4073789e+004 1.0870848e+005 1.0373180e+004 1.0920227e+005 3.3075084e+005 - 1.2995375e+004 5.5001400e+005 5.5016750e+005 3.2135262e+004 6.1180184e+004 1.9992084e+003 6.1212840e+004 1.2591616e+005 - -1.5151405e-008 -1.0757351e-009 1.5189546e-008 1.6858542e-007 -3.7946307e-008 -6.7502803e-008 7.7437399e-008 -1.1141310e-011 - -5.8930906e+005 4.5930660e+006 4.6307170e+006 7.9281336e+004 1.3405869e+005 3.9598895e+004 1.3978484e+005 5.0830363e+005 - -1.2726105e+005 2.1557825e+006 2.1595355e+006 6.5646469e+004 1.0890295e+005 1.4002102e+004 1.0979941e+005 3.2995250e+005 - 3.6977095e+003 5.4791525e+005 5.4792769e+005 3.2580852e+004 6.1052281e+004 3.1584578e+003 6.1133926e+004 1.2573148e+005 - -4.4208770e-009 6.1587935e-009 7.5812192e-009 6.3573147e-008 -5.3274917e-008 -2.3700444e-008 5.8308903e-008 1.9738877e-011 - -7.4618625e+005 4.6096385e+006 4.6696425e+006 8.1032477e+004 1.3460200e+005 4.7371227e+004 1.4269453e+005 5.0596563e+005 - -1.7801794e+005 2.1611535e+006 2.1684730e+006 6.6866805e+004 1.0936642e+005 1.7490967e+004 1.1075626e+005 3.2897828e+005 - -4.9514473e+003 5.4754681e+005 5.4756919e+005 3.2854910e+004 6.1115555e+004 4.2433618e+003 6.1262688e+004 1.2548838e+005 - 1.8274269e-009 1.0258830e-008 1.0420321e-008 1.6269145e-007 -9.0042661e-008 -6.3815754e-008 1.1036363e-007 2.4016344e-011 - -8.9732569e+005 4.6352865e+006 4.7213425e+006 8.2558531e+004 1.3531869e+005 5.4944828e+004 1.4604822e+005 5.0324641e+005 - -2.2611809e+005 2.1720990e+006 2.1838370e+006 6.7886828e+004 1.1001913e+005 2.0848537e+004 1.1197710e+005 3.2781653e+005 - -1.2929668e+004 5.4910569e+005 5.4925788e+005 3.3037164e+004 6.1360762e+004 5.2550444e+003 6.1585375e+004 1.2517648e+005 - 3.8062828e-009 3.8454937e-009 5.4106941e-009 1.9156985e-008 1.1087607e-008 -8.3310354e-009 1.3868713e-008 -6.9348971e-012 - -1.0432889e+006 4.6675770e+006 4.7827530e+006 8.3997195e+004 1.3612673e+005 6.2320207e+004 1.4971405e+005 5.0013344e+005 - -2.7193428e+005 2.1877623e+006 2.2045980e+006 6.8827969e+004 1.1078977e+005 2.4090631e+004 1.1337870e+005 3.2645666e+005 - -2.0321857e+004 5.5262281e+005 5.5299631e+005 3.3187012e+004 6.1771168e+004 6.2041299e+003 6.2081949e+004 1.2478851e+005 - -3.8558876e-009 -1.7225137e-009 4.2231414e-009 6.3087093e-008 5.3002054e-008 -2.7468722e-008 5.9697136e-008 1.0857093e-011 - -1.1848374e+006 4.7046485e+006 4.8515520e+006 8.5435906e+004 1.3696714e+005 6.9503469e+004 1.5359273e+005 4.9661100e+005 - -3.1602569e+005 2.2073118e+006 2.2298200e+006 6.9780500e+004 1.1163394e+005 2.7234406e+004 1.1490800e+005 3.2489038e+005 - -2.7300254e+004 5.5791969e+005 5.5858725e+005 3.3350797e+004 6.2322621e+004 7.1084141e+003 6.2726699e+004 1.2432063e+005 - 1.3746807e-009 1.0866037e-009 1.7522713e-009 -2.7745072e-008 -4.7642047e-008 1.2327270e-008 4.9211035e-008 3.6664005e-012 - -1.3226455e+006 4.7454900e+006 4.9263645e+006 8.6993570e+004 1.3782581e+005 7.6500539e+004 1.5763339e+005 4.9267841e+005 - -3.5892647e+005 2.2299338e+006 2.2586350e+006 7.0856688e+004 1.1253783e+005 3.0293518e+004 1.1654381e+005 3.2311828e+005 - -3.4051000e+004 5.6462263e+005 5.6564844e+005 3.3572621e+004 6.2983434e+004 7.9856294e+003 6.3487664e+004 1.2377420e+005 - -2.1874158e-010 6.0223506e-009 6.0263217e-009 -9.9298290e-008 -3.4221912e-008 4.0726754e-008 5.3195940e-008 9.2086339e-012 - -1.4573315e+006 4.7895070e+006 5.0063150e+006 8.8590555e+004 1.3871698e+005 8.3323742e+004 1.6181856e+005 4.8836016e+005 - -4.0094459e+005 2.2548290e+006 2.2901988e+006 7.1992727e+004 1.1350243e+005 3.3283965e+004 1.1828197e+005 3.2115534e+005 - -4.0640637e+004 5.7222931e+005 5.7367069e+005 3.3858660e+004 6.3717750e+004 8.8439805e+003 6.4328590e+004 1.2315598e+005 - -1.5706612e-009 1.5597950e-009 2.2135800e-009 -5.8160765e-010 1.6781570e-008 1.0648904e-010 1.6781907e-008 4.2632564e-013 - -1.5890878e+006 4.8362140e+006 5.0905960e+006 9.0251680e+004 1.3966905e+005 8.9974109e+004 1.6614084e+005 4.8369934e+005 - -4.4215678e+005 2.2811285e+006 2.3235858e+006 7.3208781e+004 1.1452948e+005 3.6211215e+004 1.2011767e+005 3.1902459e+005 - -4.7089039e+004 5.8022813e+005 5.8213581e+005 3.4220387e+004 6.4488180e+004 9.6851953e+003 6.5211414e+004 1.2247612e+005 - -6.8960526e-010 5.4174487e-009 5.4611635e-009 5.4492411e-009 1.0867183e-009 -2.1611086e-009 2.4189557e-009 -1.2875034e-011 - -1.7179148e+006 4.8848655e+006 5.1781410e+006 9.1985461e+004 1.4069519e+005 9.6448703e+004 1.7057986e+005 4.7873494e+005 - -4.8252303e+005 2.3079813e+006 2.3578818e+006 7.4507180e+004 1.1561110e+005 3.9076570e+004 1.2203649e+005 3.1674775e+005 - -5.3379844e+004 5.8818394e+005 5.9060119e+005 3.4659082e+004 6.5260711e+004 1.0507559e+004 6.6101203e+004 1.2174411e+005 - 7.4325990e-011 -5.1914837e-009 5.1920157e-009 -7.7699092e-010 1.5506942e-008 3.6067860e-010 1.5511135e-008 -6.0396133e-012 - -1.8435568e+006 4.9342740e+006 5.2674245e+006 9.3794508e+004 1.4177298e+005 1.0272732e+005 1.7507850e+005 4.7348188e+005 - -5.2205041e+005 2.3346430e+006 2.3922990e+006 7.5888805e+004 1.1672453e+005 4.1873508e+004 1.2400809e+005 3.1433619e+005 - -5.9552566e+004 5.9579375e+005 5.9876269e+005 3.5174246e+004 6.6010531e+004 1.1313232e+004 6.6972977e+004 1.2096643e+005 - 1.3044622e-009 9.2022123e-010 1.5963799e-009 -1.2452483e-008 -1.7902195e-008 4.6658712e-009 1.8500241e-008 9.1944230e-012 - -1.9655459e+006 4.9827740e+006 5.3564360e+006 9.5675219e+004 1.4284458e+005 1.0877906e+005 1.7954792e+005 4.6793953e+005 - -5.6075175e+005 2.3604570e+006 2.4261493e+006 7.7354844e+004 1.1782981e+005 4.4589199e+004 1.2598437e+005 3.1179441e+005 - -6.5675594e+004 6.0290738e+005 6.0647388e+005 3.5764473e+004 6.6721852e+004 1.2106246e+004 6.7811258e+004 1.2014769e+005 - 1.1929806e-009 6.2017902e-009 6.3154895e-009 -2.7280104e-008 -4.4941018e-008 9.8341815e-009 4.6004413e-008 2.2282620e-011 - -2.0832643e+006 5.0284040e+006 5.4428700e+006 9.7615375e+004 1.4383716e+005 1.1457790e+005 1.8389459e+005 4.6211334e+005 - -5.9846006e+005 2.3847800e+006 2.4587253e+006 7.8895648e+004 1.1887268e+005 4.7208141e+004 1.2790356e+005 3.0912913e+005 - -7.1742906e+004 6.0950838e+005 6.1371613e+005 3.6418746e+004 6.7383969e+004 1.2884231e+004 6.8604680e+004 1.1929320e+005 - 4.5066848e-009 -1.5671997e-009 4.7714068e-009 -2.6749262e-008 -2.0504999e-008 9.7753414e-009 2.2715904e-008 1.1297629e-011 - -2.1960210e+006 5.0692770e+006 5.5244980e+006 9.9592859e+004 1.4468677e+005 1.2011207e+005 1.8804566e+005 4.5602641e+005 - -6.3473919e+005 2.4069868e+006 2.4892728e+006 8.0491148e+004 1.1979542e+005 4.9715289e+004 1.2970178e+005 3.0635375e+005 - -7.7618586e+004 6.1566263e+005 6.2053619e+005 3.7118641e+004 6.7988273e+004 1.3634036e+004 6.9341852e+004 1.1840918e+005 - -3.6766603e-009 -2.1752369e-009 4.2719419e-009 -2.7310707e-008 -4.8902820e-009 1.0168058e-008 1.1282919e-008 1.7763568e-011 - -2.3030998e+006 5.1040720e+006 5.5996270e+006 1.0158479e+005 1.4535455e+005 1.2537488e+005 1.9195522e+005 4.4971106e+005 - -6.6903656e+005 2.4266073e+006 2.5171478e+006 8.2114992e+004 1.2055481e+005 5.2096289e+004 1.3132969e+005 3.0348413e+005 - -8.3106953e+004 6.2145038e+005 6.2698275e+005 3.7844590e+004 6.8528414e+004 1.4337706e+004 7.0012234e+004 1.1750094e+005 - 4.0280472e-009 4.3519028e-009 5.9299428e-009 -1.3694139e-008 -1.0889607e-008 4.8117954e-009 1.1905332e-008 -9.0381036e-012 - -2.4036660e+006 5.1323985e+006 5.6673735e+006 1.0356601e+005 1.4583005e+005 1.3033810e+005 1.9558738e+005 4.4318672e+005 - -7.0096181e+005 2.4435045e+006 2.5420585e+006 8.3740094e+004 1.2113745e+005 5.4332664e+004 1.3276414e+005 3.0052941e+005 - -8.8106094e+004 6.2690900e+005 6.3306994e+005 3.8579742e+004 6.9002828e+004 1.4984816e+004 7.0611156e+004 1.1657088e+005 - -9.6791086e-010 -3.1182879e-010 1.0169015e-009 8.5095699e-009 -6.7660721e-010 -3.1779877e-009 3.2492158e-009 3.4816594e-012 - -2.4968790e+006 5.1548235e+006 5.7277055e+006 1.0551141e+005 1.4612553e+005 1.3495648e+005 1.9891186e+005 4.3645284e+005 - -7.3036181e+005 2.4579190e+006 2.5641363e+006 8.5343656e+004 1.2156321e+005 5.6403426e+004 1.3401105e+005 2.9748963e+005 - -9.2637781e+004 6.3201113e+005 6.3876425e+005 3.9314164e+004 6.9415555e+004 1.5575002e+004 7.1141406e+004 1.1561907e+005 - 9.7281143e-009 5.2500226e-010 9.7422701e-009 -3.6569894e-008 -7.0742061e-009 1.3222660e-008 1.4996104e-008 7.9580786e-013 - -2.5820455e+006 5.1725715e+006 5.7812160e+006 1.0739450e+005 1.4627288e+005 1.3919230e+005 2.0191644e+005 4.2950216e+005 - -7.5714913e+005 2.4703173e+006 2.5837458e+006 8.6903656e+004 1.2187373e+005 5.8289871e+004 1.3509594e+005 2.9436178e+005 - -9.6749852e+004 6.3668444e+005 6.4399350e+005 4.0039586e+004 6.9773758e+004 1.6109956e+004 7.1609414e+004 1.1464547e+005 - 4.9168580e-009 2.7774192e-009 5.6470832e-009 -2.8190229e-008 1.1840484e-010 1.0334304e-008 1.0334983e-008 1.0530243e-011 - -2.6587100e+006 5.1870775e+006 5.8287660e+006 1.0918625e+005 1.4631948e+005 1.4303402e+005 2.0461702e+005 4.2234197e+005 - -7.8111494e+005 2.4811710e+006 2.6012210e+006 8.8393961e+004 1.2211430e+005 5.9980078e+004 1.3604967e+005 2.9114841e+005 - -1.0040671e+005 6.4086038e+005 6.4867831e+005 4.0743098e+004 7.0084172e+004 1.6584721e+004 7.2019750e+004 1.1365172e+005 - 7.4371936e-010 3.6650318e-009 3.7397294e-009 -1.0711551e-007 -7.6295848e-008 3.5864474e-008 8.4304908e-008 1.6314061e-011 - -2.7266255e+006 5.1996220e+006 5.8711630e+006 1.1075180e+005 1.4631917e+005 1.4648870e+005 2.0704647e+005 4.1500594e+005 - -8.0196125e+005 2.4908230e+006 2.6167425e+006 8.9689211e+004 1.2232202e+005 6.1468277e+004 1.3689786e+005 2.8786506e+005 - -1.0350608e+005 6.4450638e+005 6.5276488e+005 4.1353977e+004 7.0349633e+004 1.6989396e+004 7.2372023e+004 1.1264488e+005 - 1.2749884e-010 2.7838443e-010 3.0619249e-010 8.0451557e-008 -3.3626876e-008 -3.0700917e-008 4.5533646e-008 -1.9440449e-011 - -2.7856803e+006 5.2111115e+006 5.9089505e+006 1.1217122e+005 1.4631819e+005 1.4955661e+005 2.0922759e+005 4.0752813e+005 - -8.1954144e+005 2.4994955e+006 2.6304230e+006 9.0862563e+004 1.2251593e+005 6.2754152e+004 1.3765259e+005 2.8451994e+005 - -1.0597832e+005 6.4767031e+005 6.5628363e+005 4.1912258e+004 7.0575305e+004 1.7318197e+004 7.2669070e+004 1.1162252e+005 - -4.9149214e-009 -1.4785586e-009 5.1325029e-009 2.6770905e-009 2.0633365e-008 -4.3485215e-012 2.0633365e-008 2.0776270e-011 - -2.8359133e+006 5.2221505e+006 5.9424960e+006 1.1349227e+005 1.4633958e+005 1.5222516e+005 2.1115816e+005 3.9992978e+005 - -8.3398681e+005 2.5074513e+006 2.6425075e+006 9.1957836e+004 1.2270690e+005 6.3839734e+004 1.3832027e+005 2.8111859e+005 - -1.0787148e+005 6.5045513e+005 6.5933913e+005 4.2440387e+004 7.0770586e+004 1.7575510e+004 7.2920328e+004 1.1058342e+005 - -1.1146257e-008 -6.1451892e-009 1.2728016e-008 5.2406683e-009 2.5158755e-008 -6.7350214e-010 2.5167768e-008 -7.3896445e-012 - -2.8775920e+006 5.2331805e+006 5.9721615e+006 1.1472167e+005 1.4638119e+005 1.5448392e+005 2.1282089e+005 3.9220856e+005 - -8.4562369e+005 2.5150818e+006 2.6534348e+006 9.2980383e+004 1.2290436e+005 6.4730801e+004 1.3890845e+005 2.7765863e+005 - -1.0931026e+005 6.5299825e+005 6.6208413e+005 4.2937504e+004 7.0949313e+004 1.7772625e+004 7.3141445e+004 1.0952629e+005 - 1.6385633e-009 -1.0870504e-009 1.9663593e-009 -1.6573747e-008 -8.1881666e-009 5.5509091e-009 9.8923536e-009 1.6200374e-011 - -2.9112228e+006 5.2444830e+006 5.9983180e+006 1.1586763e+005 1.4642716e+005 1.5634008e+005 2.1420348e+005 3.8435353e+005 - -8.5478763e+005 2.5228005e+006 2.6636788e+006 9.3937305e+004 1.2311413e+005 6.5438711e+004 1.3942494e+005 2.7413475e+005 - -1.1040009e+005 6.5545413e+005 6.6468663e+005 4.3403695e+004 7.1127328e+004 1.7919678e+004 7.3349922e+004 1.0844959e+005 - 5.9995181e-010 7.5262694e-009 7.5501445e-009 6.7231419e-008 -3.5225881e-008 -2.5869689e-008 4.3704731e-008 9.1944230e-012 - -2.9374830e+006 5.2562430e+006 6.0213700e+006 1.1693734e+005 1.4646881e+005 1.5782231e+005 2.1531603e+005 3.7637484e+005 - -8.6169538e+005 2.5308908e+006 2.6735608e+006 9.4834094e+004 1.2333686e+005 6.5980023e+004 1.3987617e+005 2.7055103e+005 - -1.1116700e+005 6.5797700e+005 6.6730188e+005 4.3837121e+004 7.1316508e+004 1.8020844e+004 7.3558109e+004 1.0735430e+005 - 7.6134494e-009 4.8804623e-009 9.0434247e-009 1.4420436e-007 -1.6898341e-008 -5.2347914e-008 5.5007799e-008 -1.1453949e-011 - -2.9570160e+006 5.2686285e+006 6.0417210e+006 1.1793512e+005 1.4651270e+005 1.5896027e+005 2.1618125e+005 3.6830681e+005 - -8.6649606e+005 2.5394848e+006 2.6832440e+006 9.5672914e+004 1.2357016e+005 6.6371750e+004 1.4026686e+005 2.6692219e+005 - -1.1160065e+005 6.6070194e+005 6.7006100e+005 4.4236406e+004 7.1523539e+004 1.8077541e+004 7.3772719e+004 1.0624387e+005 - 1.4663188e-009 -4.3314010e-009 4.5728683e-009 7.9280525e-008 2.9500967e-008 -2.6678656e-008 3.9775088e-008 -1.2519763e-011 - -2.9703000e+006 5.2819380e+006 6.0598310e+006 1.1886682e+005 1.4657630e+005 1.5976663e+005 2.1681788e+005 3.6018816e+005 - -8.6938906e+005 2.5486778e+006 2.6928788e+006 9.6458930e+004 1.2381645e+005 6.6626844e+004 1.4060458e+005 2.6326528e+005 - -1.1172891e+005 6.6371581e+005 6.7305425e+005 4.4604246e+004 7.1751977e+004 1.8094299e+004 7.3998313e+004 1.0512230e+005 - 1.3300749e-009 8.6973042e-009 8.7984207e-009 1.1729819e-007 -6.4486017e-009 -4.1888498e-008 4.2381963e-008 -3.9648285e-012 - -2.9776083e+006 5.2966635e+006 6.0762485e+006 1.1973928e+005 1.4667763e+005 1.6023486e+005 2.1723153e+005 3.5204113e+005 - -8.7064644e+005 2.5586395e+006 2.7027135e+006 9.7197477e+004 1.2408887e+005 6.6752070e+004 1.4090381e+005 2.5959136e+005 - -1.1164297e+005 6.6703988e+005 6.7631825e+005 4.4948750e+004 7.2005203e+004 1.8080211e+004 7.4240438e+004 1.0399266e+005 - -3.1253240e-009 1.1092993e-010 3.1272920e-009 -7.1457706e-008 -6.4875707e-008 2.1875302e-008 6.8464487e-008 1.1127099e-011 - -2.9789733e+006 5.3133240e+006 6.0914440e+006 1.2057229e+005 1.4682472e+005 1.6034870e+005 2.1741481e+005 3.4386759e+005 - -8.7048825e+005 2.5696108e+006 2.7130515e+006 9.7909844e+004 1.2440683e+005 6.6747109e+004 1.4118156e+005 2.5590389e+005 - -1.1144613e+005 6.7063338e+005 6.7983038e+005 4.5281387e+004 7.2287141e+004 1.8044244e+004 7.4505203e+004 1.0285723e+005 - 4.6844097e-009 1.2326158e-009 4.8438662e-009 -1.6274483e-007 -4.9798729e-008 5.4599113e-008 7.3898420e-008 1.1951329e-011 - -2.9742495e+006 5.3322855e+006 6.1056880e+006 1.2136424e+005 1.4702336e+005 1.6010298e+005 2.1736797e+005 3.3567469e+005 - -8.6888631e+005 2.5817335e+006 2.7240248e+006 9.8595828e+004 1.2478610e+005 6.6607539e+004 1.4145011e+005 2.5220914e+005 - -1.1114854e+005 6.7443025e+005 6.8352769e+005 4.5605813e+004 7.2598922e+004 1.7986805e+004 7.4793906e+004 1.0171992e+005 - -1.1985347e-009 1.8815371e-008 1.8853505e-008 8.1898783e-008 -6.9199132e-008 -3.2049122e-008 7.6260520e-008 -9.9475983e-014 - -2.9630713e+006 5.3535605e+006 6.1188560e+006 1.2210195e+005 1.4727969e+005 1.5950222e+005 2.1709966e+005 3.2748978e+005 - -8.6551731e+005 2.5949295e+006 2.7354668e+006 9.9243938e+004 1.2522852e+005 6.6324875e+004 1.4170805e+005 2.4852166e+005 - -1.1064383e+005 6.7837663e+005 6.8734044e+005 4.5916410e+004 7.2937461e+004 1.7897699e+004 7.5101273e+004 1.0058653e+005 - -8.7384400e-010 -2.4936417e-009 2.6423195e-009 1.9432814e-008 -7.7480422e-010 -6.7852000e-009 6.8292940e-009 -8.6970431e-012 - -2.9448123e+006 5.3768155e+006 6.1304210e+006 1.2276976e+005 1.4759828e+005 1.5854420e+005 2.1661375e+005 3.1935378e+005 - -8.5990488e+005 2.6089335e+006 2.7469930e+006 9.9840555e+004 1.2572255e+005 6.5885445e+004 1.4194031e+005 2.4486048e+005 - -1.0977427e+005 6.8244656e+005 6.9121900e+005 4.6207176e+004 7.3295992e+004 1.7761959e+004 7.5417438e+004 9.9462977e+004 - 7.9647471e-009 1.1378641e-008 1.3889228e-008 -1.1840703e-007 -8.9944805e-008 3.6623284e-008 9.7115048e-008 6.3664629e-012 - -2.9186883e+006 5.4015665e+006 6.1396790e+006 1.2335656e+005 1.4797833e+005 1.5721223e+005 2.1590106e+005 3.1130466e+005 - -8.5160506e+005 2.6234423e+006 2.7582025e+006 1.0037646e+005 1.2625141e+005 6.5271758e+004 1.4212606e+005 2.4124228e+005 - -1.0841216e+005 6.8662881e+005 6.9513475e+005 4.6473086e+004 7.3667102e+004 1.7567090e+004 7.5732719e+004 9.8353680e+004 - -6.3768972e-009 -8.8694625e-009 1.0923928e-008 7.0914922e-008 1.5507879e-008 -2.3626242e-008 2.8261168e-008 -1.7479351e-012 - -2.8838170e+006 5.4273220e+006 6.1459110e+006 1.2385526e+005 1.4840422e+005 1.5547145e+005 2.1493066e+005 3.0335522e+005 - -8.4031388e+005 2.6382678e+006 2.7688598e+006 1.0084608e+005 1.2680202e+005 6.4462816e+004 1.4224700e+005 2.3767238e+005 - -1.0650903e+005 6.9090675e+005 6.9906819e+005 4.6713129e+004 7.4046484e+004 1.7307063e+004 7.6042203e+004 9.7259766e+004 - 8.1446565e-009 7.5320914e-009 1.1093594e-008 -1.6886463e-007 -3.6136498e-008 5.6021747e-008 6.6665457e-008 -9.2512664e-012 - -2.8394768e+006 5.4536620e+006 6.1485815e+006 1.2425984e+005 1.4885158e+005 1.5329461e+005 2.1367272e+005 2.9550234e+005 - -8.2579100e+005 2.6533308e+006 2.7788658e+006 1.0124430e+005 1.2736645e+005 6.3440684e+004 1.4229172e+005 2.3414897e+005 - -1.0403644e+005 6.9524938e+005 7.0299019e+005 4.6926176e+004 7.4432961e+004 1.6977428e+004 7.6344602e+004 9.6180766e+004 - 2.7300984e-010 4.3140016e-009 4.3226316e-009 -1.1180913e-007 2.4703866e-009 3.7981550e-008 3.8061803e-008 1.1326051e-011 - -2.7852098e+006 5.4801710e+006 6.1473300e+006 1.2456103e+005 1.4929584e+005 1.5067530e+005 2.1211386e+005 2.8774347e+005 - -8.0777563e+005 2.6685540e+006 2.7881323e+006 1.0156088e+005 1.2793714e+005 6.2193879e+004 1.4225327e+005 2.3067000e+005 - -1.0093087e+005 6.9962063e+005 7.0686356e+005 4.7107207e+004 7.4825555e+004 1.6571135e+004 7.6638547e+004 9.5116125e+004 - 3.4520864e-010 3.7134171e-009 3.7294283e-009 2.7257892e-007 -1.4861357e-008 -9.2313698e-008 9.3502294e-008 8.2422957e-012 - -2.7208935e+006 5.5064020e+006 6.1419645e+006 1.2474416e+005 1.4972272e+005 1.4762898e+005 2.1026461e+005 2.8009394e+005 - -7.8601488e+005 2.6837645e+006 2.7964998e+006 1.0178063e+005 1.2850181e+005 6.0719957e+004 1.4212539e+005 2.2724022e+005 - -9.7093656e+004 7.0399700e+005 7.1066094e+005 4.7247426e+004 7.5221453e+004 1.6078933e+004 7.6920734e+004 9.4066570e+004 - -4.0885240e-010 -2.7867575e-010 4.9479332e-010 -7.2056991e-008 -1.7621630e-008 2.3504896e-008 2.9376896e-008 2.6290081e-012 - -2.6466633e+006 5.5320345e+006 6.1325550e+006 1.2467912e+005 1.5013353e+005 1.4417094e+005 2.0814739e+005 2.7258150e+005 - -7.6044019e+005 2.6987038e+006 2.8037958e+006 1.0178080e+005 1.2905280e+005 5.9022715e+004 1.4190950e+005 2.2387169e+005 - -9.2473000e+004 7.0832481e+005 7.1433556e+005 4.7281133e+004 7.5608547e+004 1.5497876e+004 7.7180547e+004 9.3036906e+004 - 4.0854209e-009 1.2677326e-010 4.0873873e-009 -8.8398728e-009 1.0413572e-008 3.2499869e-009 1.0908937e-008 -3.6664005e-012 - -2.5628488e+006 5.5566645e+006 6.1192085e+006 1.2449566e+005 1.5052905e+005 1.4030283e+005 2.0577628e+005 2.6522747e+005 - -7.3129231e+005 2.7130975e+006 2.8099265e+006 1.0168760e+005 1.2957577e+005 5.7110777e+004 1.4160339e+005 2.2056625e+005 - -8.7136180e+004 7.1258219e+005 7.1789000e+005 4.7279219e+004 7.5980203e+004 1.4835416e+004 7.7414992e+004 9.2021844e+004 - 8.3335205e-009 -3.4756225e-009 9.0292591e-009 -8.1198962e-008 -1.9038751e-008 2.6321558e-008 3.2485357e-008 -6.6791017e-012 - -2.4698913e+006 5.5799505e+006 6.1021480e+006 1.2430649e+005 1.5089850e+005 1.3601688e+005 2.0315253e+005 2.5803772e+005 - -6.9900256e+005 2.7268175e+006 2.8149845e+006 1.0160937e+005 1.3006098e+005 5.4994707e+004 1.4121005e+005 2.1732223e+005 - -8.1230039e+004 7.1675600e+005 7.2134425e+005 4.7306094e+004 7.6336633e+004 1.4105302e+004 7.7628867e+004 9.1017406e+004 - 1.2585275e-009 1.3316391e-008 1.3375730e-008 -2.5666758e-009 -7.3394489e-008 -6.8200023e-010 7.3397658e-008 1.0800250e-011 - -2.3683905e+006 5.6017500e+006 6.0818485e+006 1.2395613e+005 1.5122063e+005 1.3132295e+005 2.0028330e+005 2.5100377e+005 - -6.6394788e+005 2.7399013e+006 2.8191995e+006 1.0139225e+005 1.3051283e+005 5.2686711e+004 1.4074617e+005 2.1414253e+005 - -7.4882570e+004 7.2078488e+005 7.2466425e+005 4.7273484e+004 7.6678805e+004 1.3318586e+004 7.7826883e+004 9.0031328e+004 - 3.2734238e-009 -7.2387518e-010 3.3525063e-009 -7.0920549e-008 -4.5501380e-008 2.2408663e-008 5.0720054e-008 2.1174174e-012 - -2.2597488e+006 5.6219950e+006 6.0591495e+006 1.2348430e+005 1.5149575e+005 1.2630058e+005 1.9723792e+005 2.4413530e+005 - -6.2636581e+005 2.7522818e+006 2.8226563e+006 1.0107252e+005 1.3093041e+005 5.0221426e+004 1.4023183e+005 2.1102867e+005 - -6.8053523e+004 7.2461488e+005 7.2780356e+005 4.7203684e+004 7.7004070e+004 1.2475218e+004 7.8008063e+004 8.9062078e+004 - 2.0320405e-009 -6.4096950e-009 6.7240897e-009 3.6549892e-009 -1.4320364e-008 -1.3339374e-009 1.4382358e-008 -1.1084467e-012 - -2.1453668e+006 5.6406250e+006 6.0348365e+006 1.2296604e+005 1.5173425e+005 1.2101633e+005 1.9408306e+005 2.3746355e+005 - -5.8664756e+005 2.7638280e+006 2.8254028e+006 1.0072409e+005 1.3130986e+005 4.7632500e+004 1.3968227e+005 2.0799200e+005 - -6.0780352e+004 7.2822163e+005 7.3075369e+005 4.7130262e+004 7.7306398e+004 1.1582598e+004 7.8169273e+004 8.8110398e+004 - -3.7305270e-011 2.0583979e-009 2.0587358e-009 -1.5388189e-009 -1.8486574e-008 4.0161297e-010 1.8490935e-008 -1.3869794e-011 - -2.0262050e+006 5.6576390e+006 6.0095245e+006 1.2232793e+005 1.5194092e+005 1.1547632e+005 1.9084241e+005 2.3101511e+005 - -5.4548794e+005 2.7744865e+006 2.8276018e+006 1.0027793e+005 1.3165155e+005 4.4941691e+004 1.3911106e+005 2.0504805e+005 - -5.3283160e+004 7.3159475e+005 7.3353250e+005 4.7015844e+004 7.7583211e+004 1.0662077e+004 7.8312414e+004 8.7183695e+004 - -5.1325699e-010 -1.0711894e-009 1.1878044e-009 3.1462740e-008 -3.7234742e-008 -1.0072796e-008 3.8573141e-008 -2.7995384e-012 - -1.9030343e+006 5.6729120e+006 5.9836000e+006 1.2177484e+005 1.5210442e+005 1.0966895e+005 1.8751808e+005 2.2478798e+005 - -5.0362175e+005 2.7843025e+006 2.8294833e+006 9.9932219e+004 1.3195120e+005 4.2167102e+004 1.3852503e+005 2.0219263e+005 - -4.5810883e+004 7.3476081e+005 7.3618750e+005 4.6979324e+004 7.7841320e+004 9.7370674e+003 7.8447953e+004 8.6276117e+004 - 2.5352582e-009 -7.9570208e-009 8.3511509e-009 1.3675010e-008 -1.5271212e-008 -4.2721524e-009 1.5857527e-008 1.3514523e-011 - -1.7765143e+006 5.6865490e+006 5.9575870e+006 1.2121048e+005 1.5222219e+005 1.0361130e+005 1.8413825e+005 2.1879672e+005 - -4.6140378e+005 2.7933573e+006 2.8312080e+006 9.9592297e+004 1.3221422e+005 3.9322563e+004 1.3793791e+005 1.9944178e+005 - -3.8472152e+004 7.3772800e+005 7.3873044e+005 4.6957910e+004 7.8081781e+004 8.8181445e+003 7.8578141e+004 8.5400172e+004 - 8.0130014e-010 -6.0004890e-010 1.0010697e-009 -1.1011966e-007 6.4065546e-008 3.4236351e-008 7.2639672e-008 1.8530955e-011 - -1.6472588e+006 5.6987540e+006 5.9320535e+006 1.2057316e+005 1.5230634e+005 9.7355016e+004 1.8076289e+005 2.1307150e+005 - -4.1878997e+005 2.8016728e+006 2.8328000e+006 9.9199898e+004 1.3244625e+005 3.6422125e+004 1.3736295e+005 1.9681383e+005 - -3.1186992e+004 7.4050088e+005 7.4115731e+005 4.6913461e+004 7.8302805e+004 7.9001782e+003 7.8700328e+004 8.4564797e+004 - -1.8692834e-009 -6.3543597e-009 6.6236026e-009 -7.2603591e-008 2.3948758e-008 2.2549514e-008 3.2894128e-008 9.0096819e-012 - -1.5156321e+006 5.7097635e+006 5.9074985e+006 1.1983847e+005 1.5237930e+005 9.0945992e+004 1.7745597e+005 2.0765758e+005 - -3.7560153e+005 2.8092305e+006 2.8342288e+006 9.8734586e+004 1.3264878e+005 3.3475707e+004 1.3680761e+005 1.9433055e+005 - -2.3836330e+004 7.4307931e+005 7.4346156e+005 4.6841621e+004 7.8504438e+004 6.9733936e+003 7.8813547e+004 8.3776398e+004 - 1.7611590e-009 -9.6365582e-011 1.7637934e-009 -7.5297123e-008 7.0792652e-009 2.3556240e-008 2.4597000e-008 1.0729195e-011 - -1.3815374e+006 5.7200980e+006 5.8845700e+006 1.1901630e+005 1.5247038e+005 8.4387914e+004 1.7426570e+005 2.0258877e+005 - -3.3175688e+005 2.8160958e+006 2.8355703e+006 9.8207875e+004 1.3283722e+005 3.0479545e+004 1.3628914e+005 1.9200780e+005 - -1.6391295e+004 7.4545588e+005 7.4563606e+005 4.6742844e+004 7.8685328e+004 6.0357090e+003 7.8916477e+004 8.3039438e+004 - -3.5522381e-009 -5.4605263e-009 6.5142722e-009 -9.9195887e-008 1.7900803e-008 3.0619546e-008 3.5468229e-008 -7.1054274e-013 - -1.2445448e+006 5.7302770e+006 5.8638695e+006 1.1809988e+005 1.5259363e+005 7.7646438e+004 1.7121269e+005 1.9787575e+005 - -2.8728025e+005 2.8225025e+006 2.8370848e+006 9.7609922e+004 1.3302519e+005 2.7424279e+004 1.3582266e+005 1.8985188e+005 - -8.9151563e+003 7.4760981e+005 7.4766300e+005 4.6622855e+004 7.8850211e+004 5.0909922e+003 7.9014391e+004 8.2356172e+004 - -4.6860968e-009 -3.1912757e-009 5.6695453e-009 1.9854288e-007 5.7990107e-008 -6.4045864e-008 8.6398643e-008 -8.1143980e-012 - -1.1039931e+006 5.7408325e+006 5.8460205e+006 1.1724145e+005 1.5275142e+005 7.0681258e+004 1.6831172e+005 1.9350359e+005 - -2.4211669e+005 2.8287520e+006 2.8390948e+006 9.7082367e+004 1.3323441e+005 2.4291121e+004 1.3543067e+005 1.8785494e+005 - -1.4528032e+003 7.4956250e+005 7.4956388e+005 4.6551098e+004 7.9011609e+004 4.1407183e+003 7.9120031e+004 8.1722234e+004 - 7.8855233e-009 6.2307404e-009 1.0050054e-008 -7.8918099e-009 2.7186076e-009 2.3504185e-009 3.5937855e-009 -1.4040324e-011 - -9.5917094e+005 5.7521375e+006 5.8315600e+006 1.1625158e+005 1.5294377e+005 6.3475898e+004 1.6559283e+005 1.8947817e+005 - -1.9592913e+005 2.8350900e+006 2.8418520e+006 9.6440102e+004 1.3347678e+005 2.1062246e+004 1.3512834e+005 1.8602723e+005 - 6.0560464e+003 7.5131644e+005 7.5134088e+005 4.6425668e+004 7.9169391e+004 3.1778074e+003 7.9233141e+004 8.1148266e+004 - -9.8359489e-009 9.2163761e-009 1.3479150e-008 9.6646033e-008 -3.3082344e-008 -2.8505276e-008 4.3669122e-008 8.9528385e-013 - -8.0974569e+005 5.7640700e+006 5.8206695e+006 1.1511630e+005 1.5316114e+005 5.6066426e+004 1.6310052e+005 1.8580753e+005 - -1.4812008e+005 2.8415738e+006 2.8454315e+006 9.5670234e+004 1.3374459e+005 1.7730744e+004 1.3491478e+005 1.8437056e+005 - 1.3841538e+004 7.5293744e+005 7.5306463e+005 4.6244043e+004 7.9328867e+004 2.1809492e+003 7.9358844e+004 8.0633516e+004 - 6.8482304e-009 1.0398574e-008 1.2451047e-008 -2.9968095e-007 -5.1830341e-008 9.5429350e-008 1.0859625e-007 -1.5489832e-012 - -6.5553938e+005 5.7763340e+006 5.8134125e+006 1.1383513e+005 1.5339939e+005 4.8495977e+004 1.6088267e+005 1.8250953e+005 - -9.8158820e+004 2.8480775e+006 2.8497685e+006 9.4774922e+004 1.3402648e+005 1.4290646e+004 1.3478620e+005 1.8288913e+005 - 2.2133992e+004 7.5451500e+005 7.5483956e+005 4.5995551e+004 7.9490500e+004 1.1300226e+003 7.9498531e+004 8.0176609e+004 - -1.5087707e-008 7.0043162e-009 1.6634283e-008 1.5431202e-007 -6.5155618e-008 -4.3844807e-008 7.8534207e-008 -1.1510792e-012 - -4.9644566e+005 5.7885045e+006 5.8097540e+006 1.1240505e+005 1.5364631e+005 4.0773258e+004 1.5896430e+005 1.7959603e+005 - -4.5880969e+004 2.8545043e+006 2.8548730e+006 9.3750719e+004 1.3430386e+005 1.0740671e+004 1.3473266e+005 1.8158334e+005 - 3.0998594e+004 7.5613413e+005 7.5676925e+005 4.5680617e+004 7.9655156e+004 1.9259068e+001 7.9655164e+004 7.9774047e+004 - 7.5462880e-009 -2.5165718e-009 7.9548474e-009 -5.2105696e-007 -3.3620736e-008 1.6236453e-007 1.6580891e-007 3.4106051e-012 - -3.3240859e+005 5.8003555e+006 5.8098725e+006 1.1085076e+005 1.5388964e+005 3.2870176e+004 1.5736095e+005 1.7706239e+005 - 8.4546387e+003 2.8608490e+006 2.8608615e+006 9.2619164e+004 1.3456861e+005 7.0790815e+003 1.3475467e+005 1.8044689e+005 - 4.0315602e+004 7.5784881e+005 7.5892044e+005 4.5313789e+004 7.9824719e+004 -1.1408463e+003 7.9832875e+004 7.9421148e+004 - -9.9122026e-009 -2.1479174e-009 1.0142253e-008 -2.0026310e-007 2.2898888e-008 5.9744551e-008 6.3982576e-008 -6.9775297e-012 - -1.6372258e+005 5.8118690e+006 5.8141745e+006 1.0920135e+005 1.5412033e+005 2.4770332e+004 1.5609819e+005 1.7489331e+005 - 6.4440176e+004 2.8671790e+006 2.8679030e+006 9.1403563e+004 1.3482203e+005 3.3120532e+003 1.3486270e+005 1.7947044e+005 - 4.9929602e+004 7.5966275e+005 7.6130181e+005 4.4910797e+004 8.0001078e+004 -2.3360852e+003 8.0035180e+004 7.9114055e+004 - -4.0186581e-008 8.7512406e-009 4.1128402e-008 2.9634771e-007 -3.5505664e-008 -8.7731486e-008 9.4643887e-008 2.7142733e-012 - 8.7348770e+003 5.8231305e+006 5.8231370e+006 1.0746359e+005 1.5433733e+005 1.6510428e+004 1.5521794e+005 1.7307805e+005 - 1.2178306e+005 2.8735415e+006 2.8761210e+006 9.0109109e+004 1.3506966e+005 -5.4009314e+002 1.3507073e+005 1.7864797e+005 - 5.9789352e+004 7.6153394e+005 7.6387744e+005 4.4476566e+004 8.0183898e+004 -3.5602024e+003 8.0262898e+004 7.8850898e+004 - -2.3491930e-008 3.3208938e-009 2.3725494e-008 2.1536468e-007 -7.4600919e-008 -5.9234644e-008 9.5257761e-008 2.9132252e-012 - 1.8372070e+005 5.8343070e+006 5.8371990e+006 1.0565055e+005 1.5455436e+005 8.1624155e+003 1.5476975e+005 1.7161991e+005 - 1.8023873e+005 2.8798720e+006 2.8855068e+006 8.8741039e+004 1.3531747e+005 -4.4481055e+003 1.3539056e+005 1.7797986e+005 - 6.9918563e+004 7.6340275e+005 7.6659788e+005 4.4008313e+004 8.0369422e+004 -4.8122031e+003 8.0513359e+004 7.8631375e+004 - -3.8553809e-009 -4.3557247e-010 3.8799080e-009 6.7376163e-007 -1.3370212e-008 -2.0301192e-007 2.0345172e-007 3.8511416e-012 - 3.5992913e+005 5.8454615e+006 5.8565320e+006 1.0376609e+005 1.5478564e+005 -2.1419301e+002 1.5478578e+005 1.7053400e+005 - 2.3941394e+005 2.8860680e+006 2.8959813e+006 8.7305742e+004 1.3556730e+005 -8.3813994e+003 1.3582614e+005 1.7747134e+005 - 8.0265750e+004 7.6521306e+005 7.6941125e+005 4.3509840e+004 8.0552648e+004 -6.0846943e+003 8.0782133e+004 7.8455875e+004 - -2.8478866e-009 -2.7112090e-010 2.8607630e-009 3.9415789e-007 2.4187344e-008 -1.2142260e-007 1.2380822e-007 -1.1425527e-011 - 5.3635650e+005 5.8566115e+006 5.8811205e+006 1.0183555e+005 1.5504113e+005 -8.6071406e+003 1.5527986e+005 1.6983280e+005 - 2.9864103e+005 2.8920325e+006 2.9074110e+006 8.5831742e+004 1.3581963e+005 -1.2317230e+004 1.3637700e+005 1.7712720e+005 - 9.0628352e+004 7.6692450e+005 7.7226075e+005 4.2998758e+004 8.0729492e+004 -7.3577769e+003 8.1064094e+004 7.8325125e+004 - -1.0462410e-008 -9.9576321e-009 1.4443562e-008 2.8619746e-007 -2.2203992e-008 -8.3810050e-008 8.6701448e-008 -2.7426950e-012 - 7.1224125e+005 5.8676825e+006 5.9107515e+006 9.9889727e+004 1.5531850e+005 -1.7026305e+004 1.5624894e+005 1.6951667e+005 - 3.5721384e+005 2.8977143e+006 2.9196490e+006 8.4354055e+004 1.3607420e+005 -1.6238743e+004 1.3703972e+005 1.7694880e+005 - 1.0076095e+005 7.6850438e+005 7.7508175e+005 4.2496941e+004 8.0897867e+004 -8.6084736e+003 8.1354602e+004 7.8240508e+004 - 7.8806037e-009 1.0936482e-008 1.3480006e-008 -9.5171015e-007 -1.4165678e-008 2.8709039e-007 2.8743966e-007 1.1155521e-011 - 8.8686800e+005 5.8784595e+006 5.9449830e+006 9.7946125e+004 1.5560348e+005 -2.5457568e+004 1.5767223e+005 1.6957755e+005 - 4.1471653e+005 2.9030703e+006 2.9325428e+006 8.2891953e+004 1.3632848e+005 -2.0129715e+004 1.3780661e+005 1.7693575e+005 - 1.1054431e+005 7.6992275e+005 7.7781819e+005 4.2014602e+004 8.1056789e+004 -9.8249951e+003 8.1650070e+004 7.8204375e+004 - -7.0574622e-009 -3.7919650e-009 8.0116642e-009 -2.6528991e-007 6.9816991e-008 7.1066232e-008 9.9623399e-008 3.4106051e-013 - 1.0595518e+006 5.8886280e+006 5.9831925e+006 9.6013203e+004 1.5588247e+005 -3.3850969e+004 1.5951563e+005 1.7001067e+005 - 4.7111891e+005 2.9079968e+006 2.9459120e+006 8.1447742e+004 1.3657531e+005 -2.3974047e+004 1.3866352e+005 1.7708961e+005 - 1.2003144e+005 7.7115888e+005 7.8044444e+005 4.1546453e+004 8.1204383e+004 -1.1010584e+004 8.1947453e+004 7.8219688e+004 - 8.6966105e-009 8.7398710e-009 1.2329492e-008 -3.3145980e-008 -7.9073743e-009 1.0873158e-008 1.3444409e-008 -2.2737368e-013 - 1.2297494e+006 5.8977450e+006 6.0245895e+006 9.4074711e+004 1.5614183e+005 -4.2146637e+004 1.6173005e+005 1.7082155e+005 - 5.2658331e+005 2.9123250e+006 2.9595485e+006 8.0003039e+004 1.3680233e+005 -2.7759465e+004 1.3959036e+005 1.7741555e+005 - 1.2934561e+005 7.7220813e+005 7.8296594e+005 4.1077621e+004 8.1337813e+004 -1.2174971e+004 8.2243969e+004 7.8289320e+004 - 1.1074166e-008 1.2298924e-008 1.6549945e-008 1.5878061e-007 -9.6438896e-008 -3.4548762e-008 1.0244060e-007 1.3244517e-011 - 1.3972698e+006 5.9053570e+006 6.0684105e+006 9.2123805e+004 1.5637078e+005 -5.0317000e+004 1.6426692e+005 1.7202025e+005 - 5.8120106e+005 2.9158740e+006 2.9732333e+006 7.8552898e+004 1.3699525e+005 -3.1482348e+004 1.4056613e+005 1.7791861e+005 - 1.3854277e+005 7.7308019e+005 7.8539613e+005 4.0606461e+004 8.1454039e+004 -1.3322716e+004 8.2536391e+004 7.8414391e+004 - -1.8387507e-008 2.4562272e-009 1.8550834e-008 -5.8942305e-008 -5.4846538e-008 2.5040961e-008 6.0292557e-008 5.4001248e-012 - 1.5623234e+006 5.9112730e+006 6.1142460e+006 9.0180016e+004 1.5657086e+005 -5.8379035e+004 1.6710041e+005 1.7361364e+005 - 6.3491631e+005 2.9184800e+006 2.9867448e+006 7.7109977e+004 1.3714617e+005 -3.5148477e+004 1.4157855e+005 1.7860197e+005 - 1.4757995e+005 7.7378644e+005 7.8773431e+005 4.0138086e+004 8.1549930e+004 -1.4450451e+004 8.2820328e+004 7.8595602e+004 - -7.0483495e-008 9.3424202e-010 7.0489691e-008 1.1197767e-007 -4.1227608e-008 -2.7221347e-008 4.9403617e-008 -1.9895197e-012 - 1.7251836e+006 5.9152725e+006 6.1617130e+006 8.8231203e+004 1.5673130e+005 -6.6357445e+004 1.7019991e+005 1.7560084e+005 - 6.8770144e+005 2.9201575e+006 3.0000423e+006 7.5668641e+004 1.3725042e+005 -3.8764742e+004 1.4261972e+005 1.7946583e+005 - 1.5640659e+005 7.7430969e+005 7.8994844e+005 3.9677355e+004 8.1624828e+004 -1.5554724e+004 8.3093695e+004 7.8833438e+004 - -2.4953675e-008 9.9046549e-009 2.6847497e-008 4.5062924e-007 -7.7161445e-008 -1.2161219e-007 1.4402573e-007 1.6243007e-011 - 1.8860090e+006 5.9175650e+006 6.2108455e+006 8.6288055e+004 1.5685870e+005 -7.4252375e+004 1.7354558e+005 1.7796923e+005 - 7.3966331e+005 2.9209198e+006 3.0131170e+006 7.4228500e+004 1.3731583e+005 -4.2335262e+004 1.4369381e+005 1.8050570e+005 - 1.6505653e+005 7.7461544e+005 7.9200550e+005 3.9220371e+004 8.1678086e+004 -1.6638992e+004 8.3355656e+004 7.9127672e+004 - -2.8709245e-008 1.0437747e-008 3.0547788e-008 1.8723102e-006 1.1385310e-009 -5.5270471e-007 5.5270590e-007 -5.5990768e-012 - 2.0446934e+006 5.9183880e+006 6.2616360e+006 8.4336164e+004 1.5695905e+005 -8.2032430e+004 1.7710297e+005 1.8070602e+005 - 7.9102069e+005 2.9208385e+006 3.0260555e+006 7.2773547e+004 1.3735181e+005 -4.5858195e+004 1.4480503e+005 1.8171652e+005 - 1.7363175e+005 7.7465906e+005 7.9387950e+005 3.8755430e+004 8.1709758e+004 -1.7712359e+004 8.3607484e+004 7.9477367e+004 - 2.5570076e-008 -4.2318362e-009 2.5917894e-008 2.8944675e-007 -6.1486247e-009 -8.4321400e-008 8.4545277e-008 -3.5953462e-012 - 2.2009940e+006 5.9179945e+006 6.3140345e+006 8.2360234e+004 1.5704263e+005 -8.9662711e+004 1.8083636e+005 1.8380434e+005 - 8.4190350e+005 2.9199735e+006 3.0389220e+006 7.1290805e+004 1.3736650e+005 -4.9328887e+004 1.4595511e+005 1.8309428e+005 - 1.8220630e+005 7.7441325e+005 7.9555956e+005 3.8273082e+004 8.1719844e+004 -1.8781203e+004 8.3850266e+004 7.9880797e+004 - -3.4810881e-008 5.4654947e-011 3.4810924e-008 -4.5144720e-008 2.4174483e-008 9.2423562e-009 2.5881011e-008 5.3432814e-012 - 2.3546998e+006 5.9166525e+006 6.3679970e+006 8.0369648e+004 1.5712409e+005 -9.7132789e+004 1.8472347e+005 1.8726209e+005 - 8.9220344e+005 2.9183510e+006 3.0516880e+006 6.9791563e+004 1.3736886e+005 -5.2744469e+004 1.4714681e+005 1.8463580e+005 - 1.9074906e+005 7.7388300e+005 7.9704463e+005 3.7774082e+004 8.1708281e+004 -1.9842549e+004 8.4083117e+004 8.0335805e+004 - -2.8014828e-008 3.5586822e-009 2.8239949e-008 1.7033000e-007 7.3167286e-009 -5.1406374e-008 5.1924463e-008 1.5276669e-011 - 2.5055925e+006 5.9143965e+006 6.4232455e+006 7.8362195e+004 1.5720355e+005 -1.0445320e+005 1.8874170e+005 1.9107711e+005 - 9.4163988e+005 2.9160585e+006 3.0643243e+006 6.8273219e+004 1.3735248e+005 -5.6098648e+004 1.4836698e+005 1.8633811e+005 - 1.9914608e+005 7.7309094e+005 7.9832875e+005 3.7267430e+004 8.1677211e+004 -2.0886350e+004 8.4305438e+004 8.0840305e+004 - -3.2399697e-008 3.9032688e-009 3.2633970e-008 -4.6906996e-007 2.0530806e-008 1.3436309e-007 1.3592260e-007 1.2036594e-011 - 2.6533963e+006 5.9113610e+006 6.4795605e+006 7.6365117e+004 1.5728245e+005 -1.1162958e+005 1.9287023e+005 1.9523556e+005 - 9.8992844e+005 2.9131605e+006 3.0767618e+006 6.6759344e+004 1.3732284e+005 -5.9386313e+004 1.4961383e+005 1.8819389e+005 - 2.0729872e+005 7.7207531e+005 7.9942044e+005 3.6760910e+004 8.1629070e+004 -2.1903369e+004 8.4516641e+004 8.1392102e+004 - -2.2805132e-008 6.1363101e-009 2.3616273e-008 4.1133166e-008 -7.2989636e-008 1.3862405e-009 7.3002795e-008 -1.1809220e-011 - 2.7976038e+006 5.9076040e+006 6.5365415e+006 7.4394539e+004 1.5735480e+005 -1.1863648e+005 1.9706634e+005 1.9971511e+005 - 1.0369303e+006 2.9097430e+006 3.0889850e+006 6.5261590e+004 1.3728359e+005 -6.2596434e+004 1.5088108e+005 1.9019308e+005 - 2.1519591e+005 7.7087275e+005 8.0034625e+005 3.6254188e+004 8.1566859e+004 -2.2891422e+004 8.4718180e+004 8.1988625e+004 - -3.9533401e-008 -6.3370402e-009 4.0038078e-008 -7.4479743e-007 -4.0712820e-009 2.2002715e-007 2.2006481e-007 2.2311042e-012 - 2.9374800e+006 5.9029855e+006 6.5934840e+006 7.2432234e+004 1.5740689e+005 -1.2542313e+005 2.0126572e+005 2.0449644e+005 - 1.0826008e+006 2.9058913e+006 3.1010045e+006 6.3759363e+004 1.3722648e+005 -6.5710344e+004 1.5214781e+005 1.9232706e+005 - 2.2288538e+005 7.6951238e+005 8.0114113e+005 3.5740340e+004 8.1494594e+004 -2.3853365e+004 8.4913789e+004 8.2627180e+004 - 6.4493277e-009 1.0770509e-008 1.2553792e-008 -4.5849018e-007 3.4013539e-009 1.3436782e-007 1.3441087e-007 4.0358827e-012 - 3.0723228e+006 5.8974770e+006 6.6497670e+006 7.0495602e+004 1.5743638e+005 -1.3194538e+005 2.0541616e+005 2.0956531e+005 - 1.1268108e+006 2.9016053e+006 3.1127183e+006 6.2270578e+004 1.3715266e+005 -6.8713359e+004 1.5340266e+005 1.9458838e+005 - 2.3037889e+005 7.6803594e+005 8.0184388e+005 3.5217656e+004 8.1412867e+004 -2.4788369e+004 8.5102984e+004 8.3304844e+004 - -4.6711499e-008 6.7774826e-009 4.7200619e-008 -7.9475291e-007 -6.6760208e-008 2.4763733e-007 2.5647842e-007 -7.5175421e-012 - 3.2015418e+006 5.8908865e+006 6.7046560e+006 6.8584672e+004 1.5743817e+005 -1.3818639e+005 2.0948092e+005 2.1491813e+005 - 1.1692649e+006 2.8968575e+006 3.1239340e+006 6.0795043e+004 1.3705095e+005 -7.1590742e+004 1.5462277e+005 1.9697420e+005 - 2.3760147e+005 7.6647719e+005 8.0245981e+005 3.4692785e+004 8.1322984e+004 -2.5688680e+004 8.5283852e+004 8.4019461e+004 - -7.6053848e-009 2.2144864e-009 7.9212263e-009 6.4883181e-007 -3.0335457e-008 -1.8512182e-007 1.8759086e-007 -3.8511416e-012 - 3.3247313e+006 5.8832005e+006 6.7576540e+006 6.6737148e+004 1.5741553e+005 -1.4415063e+005 2.1344567e+005 2.2054870e+005 - 1.2095865e+006 2.8916015e+006 3.1343993e+006 5.9369090e+004 1.3692172e+005 -7.4334250e+004 1.5579839e+005 1.9948080e+005 - 2.4442627e+005 7.6485956e+005 8.0296594e+005 3.4179281e+004 8.1222805e+004 -2.6541791e+004 8.5449461e+004 8.4769492e+004 - -2.3918792e-008 7.7386950e-009 2.5139531e-008 2.1198409e-007 -2.8163427e-008 -5.6646499e-008 6.3261396e-008 5.1301186e-012 - 3.4414593e+006 5.8744075e+006 6.8082530e+006 6.4963371e+004 1.5736905e+005 -1.4983403e+005 2.1729072e+005 2.2644609e+005 - 1.2474990e+006 2.8858223e+006 3.1439185e+006 5.7999645e+004 1.3676345e+005 -7.6932984e+004 1.5691695e+005 2.0210403e+005 - 2.5077434e+005 7.6316819e+005 8.0331406e+005 3.3685230e+004 8.1111508e+004 -2.7339740e+004 8.5595195e+004 8.5554133e+004 - -5.2850091e-008 3.3676875e-009 5.2957279e-008 6.8501606e-007 4.6857579e-008 -2.1258053e-007 2.1768352e-007 1.1567636e-011 - 3.5512058e+006 5.8646170e+006 6.8560040e+006 6.3268719e+004 1.5730209e+005 -1.5520831e+005 2.2098319e+005 2.3259328e+005 - 1.2829006e+006 2.8795298e+006 3.1523840e+006 5.6687469e+004 1.3658153e+005 -7.9374578e+004 1.5797100e+005 2.0483798e+005 - 2.5665131e+005 7.6136006e+005 8.0345444e+005 3.3210098e+004 8.0987609e+004 -2.8081803e+004 8.5718031e+004 8.6372688e+004 - 1.1287944e-009 1.1632666e-008 1.1687305e-008 4.7914305e-008 -1.1488149e-007 1.1077489e-008 1.1541432e-007 -7.1764816e-012 - 3.6534870e+006 5.8540325e+006 6.9005555e+006 6.1715305e+004 1.5722459e+005 -1.6023850e+005 2.2449042e+005 2.3897517e+005 - 1.3157634e+006 2.8727385e+006 3.1597248e+006 5.5487852e+004 1.3638309e+005 -8.1647813e+004 1.5895506e+005 2.0767570e+005 - 2.6208969e+005 7.5938844e+005 8.0334413e+005 3.2776977e+004 8.0849898e+004 -2.8769795e+004 8.5816125e+004 8.7222234e+004 - -2.5179272e-008 2.1974058e-009 2.5274975e-008 -7.1184701e-007 -1.2324617e-007 2.3866221e-007 2.6860616e-007 4.8316906e-012 - 3.7480118e+006 5.8428315e+006 6.9416330e+006 6.0226539e+004 1.5714308e+005 -1.6490569e+005 2.2778902e+005 2.4558311e+005 - 1.3460126e+006 2.8654860e+006 3.1658743e+006 5.4333711e+004 1.3617547e+005 -8.3747180e+004 1.5986666e+005 2.1061680e+005 - 2.6707538e+005 7.5721394e+005 8.0293350e+005 3.2355639e+004 8.0697773e+004 -2.9402285e+004 8.5887281e+004 8.8104984e+004 - -2.5102450e-008 -2.3967139e-010 2.5103594e-008 3.4692107e-007 -4.9519571e-009 -1.0192450e-007 1.0204472e-007 -4.5048409e-012 - 3.8348235e+006 5.8312050e+006 6.9791705e+006 5.8799574e+004 1.5707173e+005 -1.6922059e+005 2.3088339e+005 2.5241458e+005 - 1.3735215e+006 2.8577670e+006 3.1707088e+006 5.3227344e+004 1.3596302e+005 -8.5675102e+004 1.6070520e+005 2.1366016e+005 - 2.7153559e+005 7.5481881e+005 8.0217394e+005 3.1948500e+004 8.0529773e+004 -2.9973525e+004 8.5927039e+004 8.9020859e+004 - -8.4006196e-008 3.8461474e-009 8.4094196e-008 -4.1045138e-007 -4.8649227e-008 1.3345448e-007 1.4204522e-007 -5.4143356e-012 - 3.9140833e+006 5.8192805e+006 7.0131360e+006 5.7479301e+004 1.5702327e+005 -1.7319780e+005 2.3378148e+005 2.5946584e+005 - 1.3982678e+006 2.8495578e+006 3.1741350e+006 5.2211703e+004 1.3574611e+005 -8.7434805e+004 1.6146780e+005 2.1680220e+005 - 2.7545178e+005 7.5221081e+005 8.0105856e+005 3.1584516e+004 8.0347055e+004 -3.0482621e+004 8.5935094e+004 8.9967289e+004 - 9.0597307e-010 2.8867699e-009 3.0255956e-009 1.2014871e-007 -4.8108348e-008 -2.4556314e-008 5.4013199e-008 8.3844043e-013 - 3.9856723e+006 5.8071530e+006 7.0433380e+006 5.6252535e+004 1.5699381e+005 -1.7681398e+005 2.3645347e+005 2.6671500e+005 - 1.4204335e+006 2.8409295e+006 3.1762418e+006 5.1264871e+004 1.3553036e+005 -8.9022961e+004 1.6215291e+005 2.2003606e+005 - 2.7892256e+005 7.4939956e+005 7.9962331e+005 3.1241236e+004 8.0148453e+004 -3.0936590e+004 8.5911859e+004 9.0944273e+004 - 3.1358681e-008 6.3000725e-009 3.1985277e-008 -4.3287315e-007 -9.3635336e-008 1.5182724e-007 1.7837905e-007 7.8159701e-012 - 4.0493330e+006 5.7947970e+006 7.0694250e+006 5.5076172e+004 1.5696722e+005 -1.8003669e+005 2.3885542e+005 2.7413231e+005 - 1.4401731e+006 2.8320153e+006 3.1771700e+006 5.0340313e+004 1.3531769e+005 -9.0433125e+004 1.6275450e+005 2.2335038e+005 - 2.8203866e+005 7.4639319e+005 7.9790263e+005 3.0890502e+004 7.9936813e+004 -3.1342914e+004 8.5861938e+004 9.1949539e+004 - 4.7259256e-008 -5.4672018e-009 4.7574442e-008 -1.2350670e-006 2.2488450e-008 3.6528780e-007 3.6597936e-007 1.6200374e-011 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 deleted file mode 100644 index d161002b9a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%04 +++ /dev/null @@ -1,39 +0,0 @@ -FILE Steady_8ms_ASCII.$04 -ACCESS S -FORM F -RECL 4 -FORMAT R*4 -CONTENT 'POWPROD' -CONFIG 'STATIONARY' -NDIMENS 2 -DIMENS 9 200 -GENLAB 'Control variables' -VARIAB 'Time from start of simulation' 'Demanded power' 'Measured power' 'Demanded generator speed' 'Measured generator speed' 'Nominal pitch angle' 'Demanded generator torque' 'Nominal wind speed at hub position' 'Measured shaft power' -VARUNIT T P P A/T A/T A FL L/T P -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.0000000E+000 -STEP 5.0000001E-002 -NVARS 0 -ULOADS 1.9993750E+002 0.0000000E+000 1.8192086E+006 9.1210831E+001 9.2047127E+001 -0.0000000E+000 1.9763861E+004 8.0003738E+000 1.8192086E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.9953751E+002 0.0000000E+000 1.8194994E+006 9.1210831E+001 9.2069588E+001 -0.0000000E+000 1.9762295E+004 8.0003710E+000 1.8194994E+006 - 1.9188750E+002 0.0000000E+000 1.8173160E+006 9.1210831E+001 9.2007599E+001 -0.0000000E+000 1.9751729E+004 8.0003681E+000 1.8173160E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.9943750E+002 0.0000000E+000 1.8194199E+006 9.1210831E+001 9.2072807E+001 -0.0000000E+000 1.9760760E+004 8.0003700E+000 1.8194199E+006 - 1.9403751E+002 0.0000000E+000 1.8173680E+006 9.1210831E+001 9.2005730E+001 -0.0000000E+000 1.9752684E+004 8.0003691E+000 1.8173680E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.8998750E+002 0.0000000E+000 1.8180233E+006 9.1210831E+001 9.2043343E+001 -0.0000000E+000 1.9751873E+004 8.0003691E+000 1.8180233E+006 - 1.9983749E+002 0.0000000E+000 1.8193841E+006 9.1210831E+001 9.2055389E+001 -0.0000000E+000 1.9764021E+004 8.0003729E+000 1.8193841E+006 - 1.9203751E+002 0.0000000E+000 1.8175164E+006 9.1210831E+001 9.2023163E+001 -0.0000000E+000 1.9750629E+004 8.0003681E+000 1.8175164E+006 - 1.9108749E+002 0.0000000E+000 1.8191858E+006 9.1210831E+001 9.2048164E+001 -0.0000000E+000 1.9763398E+004 8.0003738E+000 1.8191858E+006 - 1.9188750E+002 0.0000000E+000 1.8173160E+006 9.1210831E+001 9.2007599E+001 -0.0000000E+000 1.9751729E+004 8.0003681E+000 1.8173160E+006 - 1.9953751E+002 0.0000000E+000 1.8194994E+006 9.1210831E+001 9.2069588E+001 -0.0000000E+000 1.9762295E+004 8.0003710E+000 1.8194994E+006 - 1.9188750E+002 0.0000000E+000 1.8173160E+006 9.1210831E+001 9.2007599E+001 -0.0000000E+000 1.9751729E+004 8.0003681E+000 1.8173160E+006 -MAXTIME 9.9500001E+000 0.0000000E+000 9.5500001E+000 0.0000000E+000 9.4500001E+000 0.0000000E+000 9.8500001E+000 1.1000000E+000 9.5500001E+000 -MINTIME 0.0000000E+000 0.0000000E+000 1.9000000E+000 0.0000000E+000 4.0500001E+000 0.0000000E+000 2.0500000E+000 1.9000000E+000 1.9000000E+000 -MEAN 1.9496250E+002 0.0000000E+000 1.8185299E+006 9.1210918E+001 9.2041807E+001 -0.0000000E+000 1.9757653E+004 8.0003668E+000 1.8185299E+006 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 deleted file mode 100644 index 845d7f3fdb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_ascii.%41 +++ /dev/null @@ -1,98 +0,0 @@ -FILE Steady_8ms_ASCII.$41 -ACCESS S -FORM F -RECL 4 -FORMAT R*4 -CONTENT 'POWPROD' -CONFIG 'STATIONARY' -NDIMENS 3 -DIMENS 8 4 200 -GENLAB 'Blade 1 Loads: Root axes' -VARIAB 'Blade 1 Mx (Root axes)' 'Blade 1 My (Root axes)' 'Blade 1 Mxy (Root axes)' 'Blade 1 Mz (Root axes)' 'Blade 1 Fx (Root axes)' 'Blade 1 Fy (Root axes)' 'Blade 1 Fxy (Root axes)' 'Blade 1 Fz (Root axes)' -VARUNIT FL FL FL FL F F F F -AXISLAB 'Distance along blade' -AXIUNIT L -AXIMETH 3 -AXIVAL 0.0000000 20.2000008 40.2000008 61.5000000 -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.0000000E+000 -STEP 5.0000001E-002 -NVARS 0 -ULOADS 4.2700365E+006 5.6879880E+006 7.1124130E+006 4.8522203E+004 1.5644395E+005 -1.9203038E+005 2.4769008E+005 3.3316125E+005 - -2.9789733E+006 5.3133240E+006 6.0914440E+006 1.2057229E+005 1.4682472E+005 1.6034870E+005 2.1741481E+005 3.4386759E+005 - 2.0446934E+006 5.9183880E+006 6.2616360E+006 8.4336164E+004 1.5695905E+005 -8.2032430E+004 1.7710297E+005 1.8070602E+005 - -4.2647966E+005 4.5880585E+006 4.6078375E+006 7.7151039E+004 1.3377806E+005 3.1631107E+004 1.3746672E+005 5.1026584E+005 - 4.2356305E+006 5.7358915E+006 7.1302885E+006 5.0564754E+004 1.5685191E+005 -1.8982881E+005 2.4624681E+005 3.0882388E+005 - -2.5779445E+005 4.5962085E+006 4.6034325E+006 7.4489516E+004 1.3382472E+005 2.3468830E+004 1.3586700E+005 5.1186166E+005 - -2.7208935E+006 5.5064020E+006 6.1419645E+006 1.2474416E+005 1.4972272E+005 1.4762898E+005 2.1026461E+005 2.8009394E+005 - 4.1259538E+006 5.5505305E+006 6.9160600E+006 4.6778574E+004 1.5441570E+005 -1.8595255E+005 2.4170759E+005 3.8194009E+005 - 3.1288033E+006 5.8948165E+006 6.6737000E+006 6.9661375E+004 1.5744019E+005 -1.3468823E+005 2.0719153E+005 2.1186481E+005 - -4.2647966E+005 4.5880585E+006 4.6078375E+006 7.7151039E+004 1.3377806E+005 3.1631107E+004 1.3746672E+005 5.1026584E+005 - -2.9789733E+006 5.3133240E+006 6.0914440E+006 1.2057229E+005 1.4682472E+005 1.6034870E+005 2.1741481E+005 3.4386759E+005 - 4.2700365E+006 5.6879880E+006 7.1124130E+006 4.8522203E+004 1.5644395E+005 -1.9203038E+005 2.4769008E+005 3.3316125E+005 - 4.2700365E+006 5.6879880E+006 7.1124130E+006 4.8522203E+004 1.5644395E+005 -1.9203038E+005 2.4769008E+005 3.3316125E+005 - -8.3800250E+004 4.6173065E+006 4.6180670E+006 7.1262977E+004 1.3421600E+005 1.5121382E+004 1.3506514E+005 5.1311459E+005 - 4.5589291E+005 4.7270350E+006 4.7489680E+006 6.2041895E+004 1.3680088E+005 -1.0514382E+004 1.3720434E+005 5.1503394E+005 - 7.8848400E+005 5.8719360E+006 5.9246385E+006 9.9047602E+004 1.5542952E+005 -2.0703334E+004 1.5680231E+005 1.6949625E+005 -MAXTIME 3.7000001E+000 9.1000001E+000 3.5500001E+000 7.4500001E+000 2.8500000E+000 7.0500001E+000 3.7000001E+000 5.4000001E+000 -MINTIME 7.0500001E+000 5.6500001E+000 5.6000001E+000 4.0000001E+000 5.6500001E+000 3.7000001E+000 5.5500001E+000 2.1000000E+000 -MEAN 3.4850004E+005 5.5026298E+006 6.0608755E+006 9.0276320E+004 1.5060866E+005 -1.4724466E+003 1.9295544E+005 3.0861504E+005 -ULOADS 1.5020099E+006 2.7688520E+006 3.1500120E+006 4.5472645E+004 1.3373100E+005 -9.5216750E+004 1.6416519E+005 2.4616223E+005 - -8.7064644E+005 2.5586395E+006 2.7027135E+006 9.7197477E+004 1.2408887E+005 6.6752070E+004 1.4090381E+005 2.5959136E+005 - 7.3966331E+005 2.9209198E+006 3.0131170E+006 7.4228500E+004 1.3731583E+005 -4.2335262E+004 1.4369381E+005 1.8050570E+005 - -1.2726105E+005 2.1557825E+006 2.1595355E+006 6.5646469E+004 1.0890295E+005 1.4002102E+004 1.0979941E+005 3.2995250E+005 - 1.4483018E+006 2.8279668E+006 3.1772588E+006 4.9958938E+004 1.3521827E+005 -9.1004945E+004 1.6299042E+005 2.2480972E+005 - -7.3765719E+004 2.1567145E+006 2.1579758E+006 6.4073789E+004 1.0870848E+005 1.0373180E+004 1.0920227E+005 3.3075084E+005 - -7.7556644E+005 2.6899680E+006 2.7995413E+006 1.0178959E+005 1.2872822E+005 6.0017891E+004 1.4203205E+005 2.2576005E+005 - 1.4286433E+006 2.6599203E+006 3.0193040E+006 4.3070836E+004 1.2993030E+005 -9.0843148E+004 1.5853819E+005 2.7540988E+005 - 8.9220344E+005 2.9183510E+006 3.0516880E+006 6.9791563E+004 1.3736886E+005 -5.2744469E+004 1.4714681E+005 1.8463580E+005 - -7.3765719E+004 2.1567145E+006 2.1579758E+006 6.4073789E+004 1.0870848E+005 1.0373180E+004 1.0920227E+005 3.3075084E+005 - -8.7045550E+005 2.5633695E+006 2.7071305E+006 9.7515688E+004 1.2422506E+005 6.6753063E+004 1.4102425E+005 2.5798398E+005 - 1.5017208E+006 2.7579278E+006 3.1402755E+006 4.4930387E+004 1.3339833E+005 -9.5279320E+004 1.6393066E+005 2.4983367E+005 - 1.4996814E+006 2.7792348E+006 3.1580358E+006 4.6043758E+004 1.3402113E+005 -9.4973352E+004 1.6426077E+005 2.4251633E+005 - -1.7724371E+004 2.1642385E+006 2.1643110E+006 6.1991012E+004 1.0884046E+005 6.6025015E+003 1.0904054E+005 3.3139113E+005 - 2.2222330E+005 2.2373308E+006 2.2483400E+006 5.1362223E+004 1.1190833E+005 -9.4503721E+003 1.1230665E+005 3.3280638E+005 - 3.8236619E+005 2.8998525E+006 2.9249528E+006 8.3720820E+004 1.3617323E+005 -1.7937281E+004 1.3734955E+005 1.7692311E+005 -MAXTIME 3.6500001E+000 9.0500001E+000 3.3500000E+000 8.5000001E-001 9.2000001E+000 4.0000001E-001 3.6000001E+000 5.4000001E+000 -MINTIME 7.0000001E+000 5.7000001E+000 5.6500001E+000 4.0500001E+000 5.6500001E+000 3.7000001E+000 5.6000001E+000 2.1000000E+000 -MEAN 2.1848354E+005 2.6737498E+006 2.8073533E+006 7.5804670E+004 1.2867567E+005 -7.7045250E+003 1.4065615E+005 2.3958896E+005 -ULOADS 2.9046156E+005 7.2528713E+005 7.8128694E+005 2.8794514E+004 7.8395266E+004 -3.2543189E+004 8.4881547E+004 9.8922102E+004 - -1.1172891E+005 6.6371581E+005 6.7305425E+005 4.4604246E+004 7.1751977E+004 1.8094299E+004 7.3998313E+004 1.0512230E+005 - 1.7363175E+005 7.7465906E+005 7.9387950E+005 3.8755430E+004 8.1709758E+004 -1.7712359E+004 8.3607484E+004 7.9477367E+004 - -4.9514473E+003 5.4754681E+005 5.4756919E+005 3.2854910E+004 6.1115555E+004 4.2433618E+003 6.1262688E+004 1.2548838E+005 - 2.5665131E+005 7.6136006E+005 8.0345444E+005 3.3210098E+004 8.0987609E+004 -2.8081803E+004 8.5718031E+004 8.6372688E+004 - -4.9514473E+003 5.4754681E+005 5.4756919E+005 3.2854910E+004 6.1115555E+004 4.2433618E+003 6.1262688E+004 1.2548838E+005 - -7.8629539E+004 7.1847344E+005 7.2276319E+005 4.7314051E+004 7.6482289E+004 1.3781252E+004 7.7713984E+004 9.0584344E+004 - 6.4919984E+004 5.7476350E+005 5.7841825E+005 2.6343789E+004 6.3905578E+004 -4.5262729E+003 6.4065672E+004 1.2647440E+005 - 1.8220630E+005 7.7441325E+005 7.9555956E+005 3.8273082E+004 8.1719844E+004 -1.8781203E+004 8.3850266E+004 7.9880797E+004 - 3.6977095E+003 5.4791525E+005 5.4792769E+005 3.2580852E+004 6.1052281E+004 3.1584578E+003 6.1133926E+004 1.2573148E+005 - -1.1172891E+005 6.6371581E+005 6.7305425E+005 4.4604246E+004 7.1751977E+004 1.8094299E+004 7.3998313E+004 1.0512230E+005 - 2.9046156E+005 7.2528713E+005 7.8128694E+005 2.8794514E+004 7.8395266E+004 -3.2543189E+004 8.4881547E+004 9.8922102E+004 - 2.7338353E+005 7.5369719E+005 8.0174681E+005 3.1713813E+004 8.0449734E+004 -3.0211346E+004 8.5935352E+004 8.9429211E+004 - 3.6977095E+003 5.4791525E+005 5.4792769E+005 3.2580852E+004 6.1052281E+004 3.1584578E+003 6.1133926E+004 1.2573148E+005 - 6.4919984E+004 5.7476350E+005 5.7841825E+005 2.6343789E+004 6.3905578E+004 -4.5262729E+003 6.4065672E+004 1.2647440E+005 - 1.1054431E+005 7.6992275E+005 7.7781819E+005 4.2014602E+004 8.1056789E+004 -9.8249951E+003 8.1650070E+004 7.8204375E+004 -MAXTIME 3.6500001E+000 9.1000001E+000 9.6500001E+000 1.0000000E+000 9.1500001E+000 6.9500001E+000 3.2000000E+000 5.4000001E+000 -MINTIME 6.9500001E+000 5.7500001E+000 5.7500001E+000 5.4000001E+000 5.7000001E+000 3.6500001E+000 5.7000001E+000 8.7500001E+000 -MEAN 7.2587775E+004 7.0022096E+005 7.1772032E+005 3.8265158E+004 7.5225065E+004 -5.1883994E+003 7.7449200E+004 9.7516890E+004 -ULOADS 6.0416113E-008 3.5432581E-009 6.0519923E-008 -2.0450938E-007 -2.4397863E-008 7.8331297E-008 8.2042959E-008 2.0619950E-011 - -1.3088868E-007 1.5385883E-008 1.3178988E-007 6.9784852E-007 3.5368402E-009 -2.1129225E-007 2.1132185E-007 -1.3343993E-011 - -1.1985347E-009 1.8815371E-008 1.8853505E-008 8.1898783E-008 -6.9199132E-008 -3.2049122E-008 7.6260520E-008 -9.9475983E-014 - -4.4389893E-008 -1.3403322E-008 4.6369298E-008 1.0521391E-006 1.0590171E-008 -3.1203911E-007 3.1221876E-007 -5.0732751E-012 - -1.3088868E-007 1.5385883E-008 1.3178988E-007 6.9784852E-007 3.5368402E-009 -2.1129225E-007 2.1132185E-007 -1.3343993E-011 - 1.2749884E-010 2.7838443E-010 3.0619249E-010 8.0451557E-008 -3.3626876E-008 -3.0700917E-008 4.5533646E-008 -1.9440449E-011 - -2.8709245E-008 1.0437747E-008 3.0547788E-008 1.8723102E-006 1.1385310E-009 -5.5270471E-007 5.5270590E-007 -5.5990768E-012 - 2.4472435E-008 1.9779200E-010 2.4473234E-008 -1.9042171E-006 2.3550584E-008 5.6118262E-007 5.6167653E-007 2.0889956E-012 - -7.0574622E-009 -3.7919650E-009 8.0116642E-009 -2.6528991E-007 6.9816991E-008 7.1066232E-008 9.9623399E-008 3.4106051E-013 - -4.6190296E-009 9.0298391E-009 1.0142654E-008 2.8418345E-008 -1.3708387E-007 3.3232084E-009 1.3712415E-007 -1.4210855E-014 - 3.4378527E-008 -2.6722615E-009 3.4482227E-008 -1.7747884E-006 -4.8753279E-008 5.6212281E-007 5.6423306E-007 9.4644292E-012 - -2.8709245E-008 1.0437747E-008 3.0547788E-008 1.8723102E-006 1.1385310E-009 -5.5270471E-007 5.5270590E-007 -5.5990768E-012 - 3.4378527E-008 -2.6722615E-009 3.4482227E-008 -1.7747884E-006 -4.8753279E-008 5.6212281E-007 5.6423306E-007 9.4644292E-012 - -6.8960526E-010 5.4174487E-009 5.4611635E-009 5.4492411E-009 1.0867183E-009 -2.1611086E-009 2.4189557E-009 -1.2875034E-011 - 4.7877410E-008 -7.9480849E-009 4.8532655E-008 -1.4244058E-006 -1.7717213E-008 4.5244346E-007 4.5279023E-007 2.9871217E-011 - 1.2749884E-010 2.7838443E-010 3.0619249E-010 8.0451557E-008 -3.3626876E-008 -3.0700917E-008 4.5533646E-008 -1.9440449E-011 -MAXTIME 4.7000001E+000 7.1000001E+000 3.4000001E+000 9.0500001E+000 8.7500001E+000 3.7500001E+000 3.7500001E+000 3.9000001E+000 -MINTIME 3.4000001E+000 2.8000000E+000 6.6000001E+000 2.3000000E+000 1.9000000E+000 9.0500001E+000 6.0500001E+000 6.6000001E+000 -MEAN -9.8774774E-009 2.1970034E-009 2.0335806E-008 -2.5283964E-008 -1.8726793E-008 1.0430081E-008 1.1521881E-007 2.2351543E-012 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$04 deleted file mode 100644 index 1de5350ba4ed9758f90746f360d084a70eefae24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21600 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 CL9#6X diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$41 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary.$41 deleted file mode 100644 index 485f293ce5ffdc54c6cc0e29edaabb2a42c45501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76800 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 ve;Kh!*IB=Lo;~vftY+$Rh#J+m z5H&XOZf z2T6CgLy1SYF^Kujk{o$FG_71G3{QeuTnvYO_ RZLRlk`zROa$P)h369Bf;nZp18 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$06 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$06 deleted file mode 100644 index ee265621fdb1980dadab440fb7210f7669400473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmXqEcXM03@1e_f7p`rJ3g z)z>WK$c39phr0`-9Aj68I599Z*hd4+P~mR3iz>6QDblL3mpEl^XWOS>ckjn(uWJ?? z?Gt8(*c{rsYHyoGgj0e^kL#m1hK7U;;37z8(iH>=-{y~fxkN3PaBZJCx` zcb2f7<$;r4nXxPF9o7ijWX_(uclX^;rwe|~t|^h4M-ILgI2Zm<00B%Oij45`{ ze6(!duc)=3W2R(x@E4ce;dLjy>i#da|4^u8V>e^|UW?PAPClm_To1L&9628*b9ldi zo#UsE2s7p?PO%e~Q?aRCUu*AnO3^O6kIRl<>$KP3lI8XX1pREBO*ZcJjtzHme$wpP zxl{ItOSJ!C!JT%F(|V2S+TCAz$}3oTnf(VA7n>~8 zZF{vZhB?hJZE{WNk~*@&CH`=xwyh(J5W&fUTM~95?swP3jGH3Yk~ydW1pp$dqe2htrj99Cfew!NbFG%5=N_=PEYUcWdoM z4#?SAwy@iMxO>8Df8G-N31TWXn{{^Vz5O=C>85q9>vBu6BSxYrhZ`?hIhML3!XwOP zj-Bl{1smq@I(z-!qIN6l{@Q+BaN6t8-?{b|{G@G8zFWCB^me$@#i%OR_Yb*`9C7kF zToP&Oc)2_n?hc-ni|ukPq-~@x)!E-~3QB3im4O5W)hnZZ@>H{9@W_-y|#Ki@&8iBrsrn((@^n~X%V)1l6X znu6J`%^=}&0?XpG=mi=mIl1{3_fY9~7+jS(fquqm$q3?*T$Y<~hke=%c8)p0=pm<> z+MNk~>E7l`?5w@p3^uErV5rDxa>~$P+~{qvwcfEASWWR3L4W47tz=D@D9BCtp2D!h zpgQIgBu0EX&opB27Rb$y*Z_CVVUWJ?3EUH(Do0%n=8JpMU;l~wU*W#)Fv$2Vf}58X sZIz$mu%Pct%|KI4f$~^quM8Æ|‘£Èo«£H»Æ‡I‘‰*Iì LH[2I(®™HÆÐ\¥È—i¥H \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$25 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$25 deleted file mode 100644 index 705e757736e38b62db19b1d92a5a98f49b932e7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PDyJnTtQTdGUX{;ErmZn;P5ii=3BH(tgcw~I*2sT;~Jak@zYdrwOU$xus@ zOt?qU{f$U3bUDTq9F9m<#nH*B73WDo)Tv7_ajHvZNfb!R(1%D+Xh_Dq^@m91E*r`w zg}F)U22o2mPf|-wwi8JFo{UK0_AJJcxr|7P&(O)*5!gvSz^qFtN3BZIs4VT4IYne#n5*x~p+_p&z2U1IhL{m$!DGW%;XqHI449CR9vjLJS+hw{?NUo~9aKwi7Ntjh z-k3-&B*Vo<=9owwuh7Z9CCo|q$+1fYKe9{oNr6WnfR{*vD)YrrjF(8K^cu=any*Q= z!Bk7p;#Es^uYX4WWAqrliH6@QO(LJR8b{60b?rK3GeYSy@Ys0qRE}n~zAVE33tTp^r$l>(I&7 zRJ}; diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$31 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$31 deleted file mode 100644 index f969429255b6e798c090d7f769043658fbd719cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmV-;0Eho!EUiDim*2sq$g@Ho-i<%rYxKeNIIcn#r&d1+fdj(jGN?jX%?UrEmb7llII a$C$sZ2q41P3VTAvUBJK8*B`=H*K0y>dOdgm diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 deleted file mode 100644 index 0704a1463b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$37 +++ /dev/null @@ -1,522 +0,0 @@ - 1.00000001e-007 1.00000001e-007 1.00000001e-007 9.99999997e-007 3.90000000e+001 - 1.09999996e-006 9.99999997e-007 9.99999997e-007 6.06372214e-006 4.30000000e+001 - 7.16372188e-006 6.06372214e-006 6.06372214e-006 2.23819734e-005 3.10000000e+001 - 9.71269947e-006 2.23819734e-005 2.54897736e-006 1.25186389e-005 3.90000000e+001 - 9.99004078e-006 1.25186389e-005 2.77341599e-007 2.77341587e-006 4.50000000e+001 - 1.04492265e-005 2.77341587e-006 4.59185827e-007 4.15931822e-007 2.70000000e+001 - 1.08651584e-005 4.15931822e-007 4.15931822e-007 2.73320461e-006 4.30000000e+001 - 1.35983628e-005 2.73320461e-006 2.73320461e-006 1.22481479e-005 2.30000000e+001 - 2.58465116e-005 1.22481479e-005 1.22481479e-005 4.59457588e-005 2.30000000e+001 - 7.17922667e-005 4.59457588e-005 4.59457588e-005 1.31557274e-004 2.30000000e+001 - 2.03349555e-004 1.31557274e-004 1.31557274e-004 6.59651414e-004 4.30000000e+001 - 6.16022269e-004 6.59651414e-004 4.12672729e-004 1.29619334e-003 2.30000000e+001 - 1.91221561e-003 1.29619334e-003 1.29619334e-003 1.28277950e-003 4.80000000e+001 - 3.19499522e-003 1.28277950e-003 1.28277950e-003 1.51398242e-003 4.80000000e+001 - 4.70897742e-003 1.51398242e-003 1.51398242e-003 1.40180590e-003 4.80000000e+001 - 6.11078367e-003 1.40180590e-003 1.40180590e-003 1.49370986e-003 4.80000000e+001 - 7.60449329e-003 1.49370986e-003 1.49370986e-003 2.41702050e-003 4.80000000e+001 - 1.00215133e-002 2.41702050e-003 2.41702050e-003 4.11686441e-003 4.80000000e+001 - 1.41383782e-002 4.11686441e-003 4.11686441e-003 1.18834423e-002 4.80000000e+001 - 2.60218214e-002 1.18834423e-002 1.18834423e-002 1.57951973e-002 4.80000000e+001 - 4.18170169e-002 1.57951973e-002 1.57951973e-002 1.73934270e-002 4.10000000e+001 - 5.00000007e-002 8.18298198e-003 8.18298198e-003 2.27410011e-002 4.10000000e+001 - 7.27410018e-002 2.27410011e-002 2.27410011e-002 2.37777457e-002 9.00000000e+000 - 9.05157849e-002 2.37777457e-002 1.77747831e-002 1.97250992e-002 7.00000000e+000 - 1.00000001e-001 9.48421657e-003 9.48421657e-003 2.28166748e-002 1.00000000e+001 - 1.10935345e-001 2.28166748e-002 1.09353438e-002 1.14226975e-002 5.00000000e+000 - 1.22358046e-001 1.14226975e-002 1.14226975e-002 1.73314195e-002 1.10000000e+001 - 1.39689460e-001 1.73314195e-002 1.73314195e-002 2.22731773e-002 5.00000000e+000 - 1.50000006e-001 1.03105409e-002 1.03105409e-002 2.36999970e-002 5.00000000e+000 - 1.60120085e-001 2.36999970e-002 1.01200854e-002 1.07514914e-002 9.00000000e+000 - 1.70871586e-001 1.07514914e-002 1.07514914e-002 1.90458894e-002 9.00000000e+000 - 1.89917475e-001 1.90458894e-002 1.90458894e-002 2.06310935e-002 5.00000000e+000 - 2.00000003e-001 1.00825354e-002 1.00825354e-002 2.07613520e-002 1.10000000e+001 - 2.20761359e-001 2.07613520e-002 2.07613520e-002 2.20867749e-002 1.10000000e+001 - 2.42848128e-001 2.20867749e-002 2.20867749e-002 2.46330742e-002 9.00000000e+000 - 2.50000000e-001 7.15187239e-003 7.15187239e-003 2.47527175e-002 8.00000000e+000 - 2.74752706e-001 2.47527175e-002 2.47527175e-002 2.45418195e-002 5.00000000e+000 - 2.89711207e-001 2.45418195e-002 1.49584832e-002 1.37050040e-002 9.00000000e+000 - 3.00000012e-001 1.02888010e-002 1.02888010e-002 1.75118446e-002 9.00000000e+000 - 3.15365672e-001 1.75118446e-002 1.53656732e-002 1.55477561e-002 9.00000000e+000 - 3.30913424e-001 1.55477561e-002 1.55477561e-002 2.09076032e-002 5.00000000e+000 - 3.49999994e-001 1.90865714e-002 1.90865714e-002 1.82817988e-002 5.00000000e+000 - 3.68281811e-001 1.82817988e-002 1.82817988e-002 2.65394375e-002 8.00000000e+000 - 3.87463331e-001 2.65394375e-002 1.91815235e-002 2.10077241e-002 9.00000000e+000 - 4.00000006e-001 1.25366775e-002 1.25366775e-002 1.20385019e-002 2.90000000e+001 - 4.12038505e-001 1.20385019e-002 1.20385019e-002 2.06891522e-002 9.00000000e+000 - 4.27440852e-001 2.06891522e-002 1.54023534e-002 1.85789559e-002 2.90000000e+001 - 4.46019828e-001 1.85789559e-002 1.85789559e-002 2.34137960e-002 9.00000000e+000 - 4.50000018e-001 3.98018956e-003 3.98018956e-003 5.95660228e-003 2.90000000e+001 - 4.55956608e-001 5.95660228e-003 5.95660228e-003 8.34033452e-003 1.10000000e+001 - 4.64296937e-001 8.34033452e-003 8.34033452e-003 1.60274003e-002 3.70000000e+001 - 4.80324358e-001 1.60274003e-002 1.60274003e-002 2.28881817e-002 9.00000000e+000 - 5.00000000e-001 1.96756627e-002 1.96756627e-002 2.08391380e-002 7.00000000e+000 - 5.20839155e-001 2.08391380e-002 2.08391380e-002 2.20011361e-002 9.00000000e+000 - 5.42840302e-001 2.20011361e-002 2.20011361e-002 2.21460555e-002 5.00000000e+000 - 5.50000012e-001 7.15972669e-003 7.15972669e-003 7.09751016e-003 1.50000000e+001 - 5.57097495e-001 7.09751016e-003 7.09751016e-003 1.50501607e-002 1.50000000e+001 - 5.72147667e-001 1.50501607e-002 1.50501607e-002 1.86319258e-002 1.50000000e+001 - 5.90779603e-001 1.86319258e-002 1.86319258e-002 2.77909208e-002 1.10000000e+001 - 6.00000024e-001 9.22040362e-003 9.22040362e-003 1.09847970e-002 9.00000000e+000 - 6.10984802e-001 1.09847970e-002 1.09847970e-002 1.93563215e-002 7.00000000e+000 - 6.30341113e-001 1.93563215e-002 1.93563215e-002 2.88786851e-002 8.00000000e+000 - 6.50000036e-001 1.96588822e-002 1.96588822e-002 2.04996169e-002 3.70000000e+001 - 6.70499623e-001 2.04996169e-002 2.04996169e-002 2.05910653e-002 1.50000000e+001 - 6.91090703e-001 2.05910653e-002 2.05910653e-002 2.31486820e-002 3.60000000e+001 - 6.99999988e-001 8.90931860e-003 8.90931860e-003 9.29251499e-003 1.50000000e+001 - 7.09292531e-001 9.29251499e-003 9.29251499e-003 1.72127504e-002 3.50000000e+001 - 7.26505280e-001 1.72127504e-002 1.72127504e-002 2.48161796e-002 5.00000000e+000 - 7.50000000e-001 2.34947335e-002 2.34947335e-002 2.19880082e-002 1.50000000e+001 - 7.71988034e-001 2.19880082e-002 2.19880082e-002 2.50521209e-002 9.00000000e+000 - 7.97040164e-001 2.50521209e-002 2.50521209e-002 2.53270753e-002 1.10000000e+001 - 8.00000012e-001 2.95987120e-003 2.95987120e-003 5.28612360e-003 3.70000000e+001 - 8.05286109e-001 5.28612360e-003 5.28612360e-003 1.13487355e-002 5.00000000e+000 - 8.16634893e-001 1.13487355e-002 1.13487355e-002 1.96028911e-002 3.70000000e+001 - 8.33570540e-001 1.96028911e-002 1.69356633e-002 1.66237634e-002 5.00000000e+000 - 8.46137583e-001 1.64294783e-002 1.25670442e-002 1.32564399e-002 1.50000000e+001 - 8.50000024e-001 3.86243360e-003 3.86243360e-003 4.46102768e-003 1.50000000e+001 - 8.54461014e-001 4.46102768e-003 4.46102768e-003 9.75258183e-003 4.50000000e+001 - 8.64213645e-001 9.75258183e-003 9.75258183e-003 1.58354137e-002 1.50000000e+001 - 8.80049050e-001 1.58354137e-002 1.58354137e-002 1.75212231e-002 1.50000000e+001 - 8.95768821e-001 1.75212231e-002 1.57197770e-002 2.06265133e-002 1.50000000e+001 - 9.00000036e-001 4.23120055e-003 4.23120055e-003 2.06265133e-002 1.50000000e+001 - 9.20626521e-001 2.06265133e-002 2.06265133e-002 2.22139768e-002 5.00000000e+000 - 9.40020025e-001 2.22139768e-002 1.93934869e-002 2.28900816e-002 1.10000000e+001 - 9.49999988e-001 9.98000056e-003 9.98000056e-003 9.78896488e-003 1.50000000e+001 - 9.59788978e-001 9.78896488e-003 9.78896488e-003 1.76928565e-002 5.00000000e+000 - 9.77481842e-001 1.76928565e-002 1.76928565e-002 2.71279123e-002 1.50000000e+001 - 1.00000000e+000 2.25181784e-002 2.25181784e-002 2.03979798e-002 5.00000000e+000 - 1.02039802e+000 2.03979798e-002 2.03979798e-002 2.06671413e-002 5.00000000e+000 - 1.04106510e+000 2.06671413e-002 2.06671413e-002 2.36375257e-002 3.70000000e+001 - 1.05000007e+000 8.93487968e-003 8.93487968e-003 9.69749875e-003 1.10000000e+001 - 1.05969751e+000 9.69749875e-003 9.69749875e-003 1.75628942e-002 4.50000000e+001 - 1.07726038e+000 1.75628942e-002 1.75628942e-002 2.08862461e-002 1.50000000e+001 - 1.09814668e+000 2.08862461e-002 2.08862461e-002 2.42779832e-002 7.00000000e+000 - 1.10000002e+000 1.85336126e-003 1.85336126e-003 2.42779832e-002 7.00000000e+000 - 1.12427795e+000 2.42779832e-002 2.42779832e-002 2.43623611e-002 4.50000000e+001 - 1.14864039e+000 2.43623611e-002 2.43623611e-002 2.45558210e-002 1.50000000e+001 - 1.14999998e+000 1.35965587e-003 1.35965587e-003 2.45558210e-002 1.50000000e+001 - 1.17455590e+000 2.45558210e-002 2.45558210e-002 2.24102233e-002 1.50000000e+001 - 1.19696605e+000 2.24102233e-002 2.24102233e-002 2.10259221e-002 1.50000000e+001 - 1.20000005e+000 3.03395698e-003 3.03395698e-003 2.10259221e-002 1.10000000e+001 - 1.22102594e+000 2.10259221e-002 2.10259221e-002 2.21147053e-002 1.50000000e+001 - 1.24314070e+000 2.21147053e-002 2.21147053e-002 2.83976886e-002 3.70000000e+001 - 1.25000000e+000 6.85937377e-003 6.85937377e-003 7.46589294e-003 3.70000000e+001 - 1.25746596e+000 7.46589294e-003 7.46589294e-003 1.21333012e-002 3.70000000e+001 - 1.26959920e+000 1.21333012e-002 1.21333012e-002 1.41541725e-002 4.50000000e+001 - 1.28375340e+000 1.41541725e-002 1.41541725e-002 1.98099334e-002 4.50000000e+001 - 1.30000007e+000 1.62466336e-002 1.62466336e-002 2.18388550e-002 9.00000000e+000 - 1.32183886e+000 2.18388550e-002 2.18388550e-002 2.42168680e-002 1.10000000e+001 - 1.34605575e+000 2.42168680e-002 2.42168680e-002 2.94979978e-002 9.00000000e+000 - 1.35000002e+000 3.94427730e-003 3.94427730e-003 2.94979978e-002 7.00000000e+000 - 1.37031102e+000 2.94979978e-002 2.03109570e-002 2.52324305e-002 7.00000000e+000 - 1.39554346e+000 2.52324305e-002 2.52324305e-002 3.07907611e-002 5.00000000e+000 - 1.39999998e+000 4.45661275e-003 4.45661275e-003 3.07907611e-002 2.90000000e+001 - 1.42613304e+000 3.07907611e-002 2.61330642e-002 2.70701032e-002 1.10000000e+001 - 1.45000005e+000 2.38669366e-002 2.38669366e-002 2.49720532e-002 1.50000000e+001 - 1.47497213e+000 2.49720532e-002 2.49720532e-002 2.92371660e-002 7.00000000e+000 - 1.50000000e+000 2.50279475e-002 2.50279475e-002 2.61732060e-002 1.50000000e+001 - 1.52617323e+000 2.61732060e-002 2.61732060e-002 2.59126406e-002 5.00000000e+000 - 1.55000007e+000 2.38267947e-002 2.38267947e-002 2.32506692e-002 1.10000000e+001 - 1.56894910e+000 2.32506692e-002 1.89490467e-002 2.01085601e-002 1.50000000e+001 - 1.58905768e+000 2.01085601e-002 2.01085601e-002 2.45779436e-002 2.70000000e+001 - 1.60000002e+000 1.09423939e-002 1.09423939e-002 1.65136456e-002 2.70000000e+001 - 1.61651373e+000 1.65136456e-002 1.65136456e-002 2.38628164e-002 2.70000000e+001 - 1.64037645e+000 2.38628164e-002 2.38628164e-002 2.19553858e-002 9.00000000e+000 - 1.64999998e+000 9.62353777e-003 9.62353777e-003 1.12750111e-002 3.70000000e+001 - 1.66127503e+000 1.12750111e-002 1.12750111e-002 2.08534561e-002 1.10000000e+001 - 1.68212855e+000 2.08534561e-002 2.08534561e-002 2.87260041e-002 9.00000000e+000 - 1.70000005e+000 1.78715326e-002 1.78715326e-002 1.78794246e-002 1.50000000e+001 - 1.71787941e+000 1.78794246e-002 1.78794246e-002 2.39848346e-002 9.00000000e+000 - 1.73700452e+000 2.39848346e-002 1.91250909e-002 1.96920373e-002 9.00000000e+000 - 1.75000000e+000 1.29954852e-002 1.29954852e-002 1.49335349e-002 3.70000000e+001 - 1.76493359e+000 1.49335349e-002 1.49335349e-002 2.05503311e-002 3.70000000e+001 - 1.78548384e+000 2.05503311e-002 2.05503311e-002 2.62225065e-002 9.00000000e+000 - 1.80000007e+000 1.45161347e-002 1.45161347e-002 2.04397384e-002 2.90000000e+001 - 1.82043982e+000 2.04397384e-002 2.04397384e-002 3.13697234e-002 1.50000000e+001 - 1.84409559e+000 2.95602623e-002 2.36558281e-002 2.66021881e-002 7.00000000e+000 - 1.85000002e+000 5.90443425e-003 5.90443425e-003 2.66021881e-002 2.50000000e+001 - 1.87660217e+000 2.66021881e-002 2.66021881e-002 2.68413574e-002 1.50000000e+001 - 1.89999998e+000 2.33978126e-002 2.33978126e-002 2.66843345e-002 9.00000000e+000 - 1.92668438e+000 2.66843345e-002 2.66843345e-002 3.03133838e-002 1.10000000e+001 - 1.95000005e+000 2.33156662e-002 2.33156662e-002 2.92793140e-002 4.50000000e+001 - 1.97395909e+000 2.92793140e-002 2.39590034e-002 2.61395108e-002 4.50000000e+001 - 2.00000000e+000 2.60409974e-002 2.60409974e-002 3.12448069e-002 3.70000000e+001 - 2.03124475e+000 3.12448069e-002 3.12448069e-002 3.53926234e-002 4.50000000e+001 - 2.04999995e+000 1.87551938e-002 1.87551938e-002 3.25916968e-002 1.10000000e+001 - 2.07830954e+000 3.25916968e-002 2.83095818e-002 2.90316381e-002 9.00000000e+000 - 2.10000014e+000 2.16904189e-002 2.16904189e-002 2.21379008e-002 1.50000000e+001 - 2.12213802e+000 2.21379008e-002 2.21379008e-002 2.75327712e-002 2.90000000e+001 - 2.14967060e+000 2.75327712e-002 2.75327712e-002 3.05028465e-002 3.90000000e+001 - 2.15000010e+000 3.29328177e-004 3.29328177e-004 3.05028465e-002 3.90000000e+001 - 2.17312336e+000 3.05028465e-002 2.31233574e-002 2.25987192e-002 2.90000000e+001 - 2.19572210e+000 2.25987192e-002 2.25987192e-002 2.46350057e-002 1.50000000e+001 - 2.20000005e+000 4.27792408e-003 4.27792408e-003 4.88738017e-003 1.50000000e+001 - 2.20488739e+000 4.88738017e-003 4.88738017e-003 5.87147335e-003 2.90000000e+001 - 2.21075892e+000 5.87147335e-003 5.87147335e-003 8.96947272e-003 2.90000000e+001 - 2.21972847e+000 8.96947272e-003 8.96947272e-003 1.23321004e-002 2.90000000e+001 - 2.23206043e+000 1.23321004e-002 1.23321004e-002 1.96165442e-002 1.50000000e+001 - 2.25000000e+000 1.79395750e-002 1.79395750e-002 2.14174893e-002 4.50000000e+001 - 2.27141762e+000 2.14174893e-002 2.14174893e-002 3.00017800e-002 3.10000000e+001 - 2.29643345e+000 2.85825115e-002 2.50158738e-002 2.72340085e-002 2.90000000e+001 - 2.29999995e+000 3.56663764e-003 3.56663764e-003 5.31830220e-003 2.90000000e+001 - 2.30531836e+000 5.31830220e-003 5.31830220e-003 6.91342726e-003 2.90000000e+001 - 2.31223178e+000 6.91342726e-003 6.91342726e-003 1.19795650e-002 3.70000000e+001 - 2.32421136e+000 1.19795650e-002 1.19795650e-002 2.13524569e-002 4.50000000e+001 - 2.34556389e+000 2.13524569e-002 2.13524569e-002 2.20009014e-002 3.70000000e+001 - 2.35000014e+000 4.43624891e-003 4.43624891e-003 2.20009014e-002 3.70000000e+001 - 2.37200093e+000 2.20009014e-002 2.20009014e-002 2.27109753e-002 3.70000000e+001 - 2.39471197e+000 2.27109753e-002 2.27109753e-002 2.42642127e-002 5.00000000e+000 - 2.40000010e+000 5.28812269e-003 5.28812269e-003 2.42642127e-002 3.10000000e+001 - 2.42426419e+000 2.42642127e-002 2.42642127e-002 2.54806392e-002 3.10000000e+001 - 2.44974494e+000 2.54806392e-002 2.54806392e-002 3.31017040e-002 3.70000000e+001 - 2.45000005e+000 2.55148945e-004 2.55148945e-004 3.31017040e-002 3.70000000e+001 - 2.47592354e+000 3.31017040e-002 2.59234495e-002 2.80497558e-002 1.50000000e+001 - 2.50000000e+000 2.40765512e-002 2.40765512e-002 3.47426385e-002 9.00000000e+000 - 2.53474259e+000 3.47426385e-002 3.47426385e-002 3.53255756e-002 5.00000000e+000 - 2.54999995e+000 1.52573623e-002 1.52573623e-002 1.94439944e-002 3.70000000e+001 - 2.56944394e+000 1.94439944e-002 1.94439944e-002 2.22873185e-002 3.70000000e+001 - 2.59173131e+000 2.22873185e-002 2.22873185e-002 2.46922821e-002 3.70000000e+001 - 2.60000014e+000 8.26868694e-003 8.26868694e-003 9.62440204e-003 3.70000000e+001 - 2.60962439e+000 9.62440204e-003 9.62440204e-003 1.58533007e-002 1.50000000e+001 - 2.62547779e+000 1.58533007e-002 1.58533007e-002 1.66021064e-002 1.50000000e+001 - 2.64207983e+000 1.66021064e-002 1.66021064e-002 1.92888398e-002 3.70000000e+001 - 2.65000010e+000 7.92019255e-003 7.92019255e-003 1.06315371e-002 2.90000000e+001 - 2.66063166e+000 1.06315371e-002 1.06315371e-002 1.80985630e-002 1.50000000e+001 - 2.67873025e+000 1.80985630e-002 1.80985630e-002 1.96564235e-002 1.50000000e+001 - 2.69838667e+000 1.96564235e-002 1.96564235e-002 2.22592205e-002 5.00000000e+000 - 2.70000005e+000 1.61347771e-003 1.61347771e-003 2.22592205e-002 5.00000000e+000 - 2.72225928e+000 2.22592205e-002 2.22592205e-002 2.58834790e-002 5.00000000e+000 - 2.74814272e+000 2.58834790e-002 2.58834790e-002 2.81123035e-002 5.00000000e+000 - 2.75000000e+000 1.85730052e-003 1.85730052e-003 2.81123035e-002 5.00000000e+000 - 2.77811241e+000 2.81123035e-002 2.81123035e-002 2.95099486e-002 9.00000000e+000 - 2.79999995e+000 2.18876973e-002 2.18876973e-002 3.00153866e-002 9.00000000e+000 - 2.83001542e+000 3.00153866e-002 3.00153866e-002 2.89556794e-002 5.00000000e+000 - 2.85000014e+000 1.99846141e-002 1.99846141e-002 2.51792278e-002 4.50000000e+001 - 2.87257099e+000 2.51792278e-002 2.25708820e-002 2.34532077e-002 9.00000000e+000 - 2.89602423e+000 2.34532077e-002 2.34532077e-002 2.57035997e-002 2.70000000e+001 - 2.90000010e+000 3.97591107e-003 3.97591107e-003 5.02867904e-003 1.50000000e+001 - 2.90502882e+000 5.02867904e-003 5.02867904e-003 8.65203608e-003 3.50000000e+001 - 2.91368079e+000 8.65203608e-003 8.65203608e-003 1.04875769e-002 4.50000000e+001 - 2.92416835e+000 1.04875769e-002 1.04875769e-002 1.30167436e-002 3.70000000e+001 - 2.93718505e+000 1.30167436e-002 1.30167436e-002 1.28905205e-002 1.50000000e+001 - 2.94728851e+000 1.28149651e-002 1.01033812e-002 1.10027511e-002 2.90000000e+001 - 2.95000005e+000 2.71158316e-003 2.71158316e-003 3.20843747e-003 2.30000000e+001 - 2.95320845e+000 3.20843747e-003 3.20843747e-003 7.21747475e-003 3.50000000e+001 - 2.96042585e+000 7.21747475e-003 7.21747475e-003 1.05089294e-002 2.30000000e+001 - 2.97093487e+000 1.05089294e-002 1.05089294e-002 1.48290871e-002 2.90000000e+001 - 2.98576403e+000 1.48290871e-002 1.48290871e-002 1.87401511e-002 4.50000000e+001 - 3.00000000e+000 1.42360711e-002 1.42360711e-002 1.70830898e-002 3.70000000e+001 - 3.01708317e+000 1.70830898e-002 1.70830898e-002 1.60043724e-002 9.00000000e+000 - 3.03308749e+000 1.60043724e-002 1.60043724e-002 1.52448434e-002 9.00000000e+000 - 3.04833245e+000 1.52448434e-002 1.52448434e-002 1.82262547e-002 7.00000000e+000 - 3.04999995e+000 1.66769396e-003 1.66769396e-003 1.82262547e-002 7.00000000e+000 - 3.06822634e+000 1.82262547e-002 1.82262547e-002 2.18097903e-002 9.00000000e+000 - 3.09003615e+000 2.18097903e-002 2.18097903e-002 2.16706432e-002 9.00000000e+000 - 3.10000014e+000 9.96395387e-003 9.96395387e-003 1.26174204e-002 9.00000000e+000 - 3.11261749e+000 1.26174204e-002 1.26174204e-002 2.00801250e-002 3.50000000e+001 - 3.13269758e+000 2.00801250e-002 2.00801250e-002 2.26488467e-002 9.00000000e+000 - 3.15000010e+000 1.73024554e-002 1.73024554e-002 2.11464521e-002 9.00000000e+000 - 3.17114639e+000 2.11464521e-002 2.11464521e-002 1.92864425e-002 9.00000000e+000 - 3.18511677e+000 1.92864425e-002 1.39702354e-002 1.41943572e-002 9.00000000e+000 - 3.19931102e+000 1.41943572e-002 1.41943572e-002 1.52893998e-002 9.00000000e+000 - 3.20000005e+000 6.88956759e-004 6.88956759e-004 1.52893998e-002 9.00000000e+000 - 3.21528935e+000 1.52893998e-002 1.52893998e-002 2.47584730e-002 1.10000000e+001 - 3.24004793e+000 2.47584730e-002 2.47584730e-002 2.46770661e-002 9.00000000e+000 - 3.25000000e+000 9.95212886e-003 9.95212886e-003 2.34977268e-002 9.00000000e+000 - 3.27349782e+000 2.34977268e-002 2.34977268e-002 2.15547979e-002 9.00000000e+000 - 3.29505253e+000 2.15547979e-002 2.15547979e-002 1.95150375e-002 9.00000000e+000 - 3.29999995e+000 4.94747702e-003 4.94747702e-003 6.90035336e-003 3.70000000e+001 - 3.30690050e+000 6.90035336e-003 6.90035336e-003 1.11159710e-002 4.30000000e+001 - 3.31801629e+000 1.11159710e-002 1.11159710e-002 1.68087352e-002 3.70000000e+001 - 3.33482504e+000 1.68087352e-002 1.68087352e-002 2.81348154e-002 5.00000000e+000 - 3.35000014e+000 1.51749421e-002 1.51749421e-002 1.81033947e-002 1.50000000e+001 - 3.36810350e+000 1.81033947e-002 1.81033947e-002 2.62243375e-002 4.30000000e+001 - 3.39432788e+000 2.62243375e-002 2.62243375e-002 2.50973906e-002 7.00000000e+000 - 3.40000010e+000 5.67226904e-003 5.67226904e-003 5.73142199e-003 2.90000000e+001 - 3.40573144e+000 5.73142199e-003 5.73142199e-003 9.19183809e-003 3.30000000e+001 - 3.41492343e+000 9.19183809e-003 9.19183809e-003 1.40414666e-002 3.30000000e+001 - 3.42896485e+000 1.40414666e-002 1.40414666e-002 1.76469907e-002 3.30000000e+001 - 3.44661188e+000 1.76469907e-002 1.76469907e-002 1.82769950e-002 3.30000000e+001 - 3.45000005e+000 3.38828331e-003 3.38828331e-003 4.74619307e-003 4.50000000e+001 - 3.45474625e+000 4.74619307e-003 4.74619307e-003 9.10066068e-003 3.30000000e+001 - 3.46384692e+000 9.10066068e-003 9.10066068e-003 1.70701183e-002 7.00000000e+000 - 3.48091698e+000 1.70701183e-002 1.70701183e-002 1.87093522e-002 4.50000000e+001 - 3.49962640e+000 1.87093522e-002 1.87093522e-002 1.94901787e-002 5.00000000e+000 - 3.50000000e+000 3.73676419e-004 3.73676419e-004 1.94901787e-002 5.00000000e+000 - 3.51949024e+000 1.94901787e-002 1.94901787e-002 2.31601764e-002 5.00000000e+000 - 3.54265046e+000 2.31601764e-002 2.31601764e-002 2.53061559e-002 4.30000000e+001 - 3.54873896e+000 7.34964479e-003 6.08860468e-003 7.58182956e-003 4.50000000e+001 - 3.54999995e+000 1.26104010e-003 1.26104010e-003 7.58182956e-003 2.50000000e+001 - 3.55758190e+000 7.58182956e-003 7.58182956e-003 1.65637638e-002 4.30000000e+001 - 3.57414556e+000 1.65637638e-002 1.65637638e-002 1.59659516e-002 4.50000000e+001 - 3.59011149e+000 1.59659516e-002 1.59659516e-002 2.27339379e-002 4.50000000e+001 - 3.60000014e+000 9.88845620e-003 9.88845620e-003 2.71097496e-002 9.00000000e+000 - 3.62710977e+000 2.71097496e-002 2.71097496e-002 2.55956538e-002 7.00000000e+000 - 3.65000010e+000 2.28902511e-002 2.28902511e-002 2.35788487e-002 9.00000000e+000 - 3.66794086e+000 2.35788487e-002 1.79408807e-002 1.95247550e-002 4.50000000e+001 - 3.68746567e+000 1.95247550e-002 1.95247550e-002 2.20299698e-002 5.00000000e+000 - 3.70000005e+000 1.25343651e-002 1.25343651e-002 1.41593050e-002 5.00000000e+000 - 3.71415925e+000 1.41593050e-002 1.41593050e-002 1.96833517e-002 1.50000000e+001 - 3.73384261e+000 1.96833517e-002 1.96833517e-002 2.27563456e-002 5.00000000e+000 - 3.74824023e+000 1.61573440e-002 1.43974600e-002 1.33808963e-002 9.00000000e+000 - 3.75000000e+000 1.75988476e-003 1.75988476e-003 1.89383072e-003 2.90000000e+001 - 3.75189400e+000 1.89383072e-003 1.89383072e-003 2.85229762e-003 9.00000000e+000 - 3.75474620e+000 2.85229762e-003 2.85229762e-003 5.23521844e-003 9.00000000e+000 - 3.75998139e+000 5.23521844e-003 5.23521844e-003 5.06086135e-003 4.50000000e+001 - 3.76504230e+000 5.06086135e-003 5.06086135e-003 7.06311315e-003 4.50000000e+001 - 3.76762176e+000 7.06311315e-003 2.57944036e-003 2.46207626e-003 5.00000000e+000 - 3.77008367e+000 2.46207626e-003 2.46207626e-003 3.43325920e-003 5.00000000e+000 - 3.77351713e+000 3.43325920e-003 3.43325920e-003 5.36888279e-003 5.00000000e+000 - 3.77888584e+000 5.36888279e-003 5.36888279e-003 5.33847744e-003 5.00000000e+000 - 3.78422451e+000 5.33847744e-003 5.33847744e-003 5.51782642e-003 5.00000000e+000 - 3.78974223e+000 5.51782642e-003 5.51782642e-003 6.26468426e-003 5.00000000e+000 - 3.79600692e+000 6.26468426e-003 6.26468426e-003 6.34557568e-003 1.50000000e+001 - 3.79999995e+000 3.99314566e-003 3.99314566e-003 4.56693769e-003 5.00000000e+000 - 3.80456710e+000 4.56693769e-003 4.56693769e-003 6.30745152e-003 5.00000000e+000 - 3.81087446e+000 6.30745152e-003 6.30745152e-003 7.36514525e-003 5.00000000e+000 - 3.81823969e+000 7.36514525e-003 7.36514525e-003 1.26235457e-002 1.10000000e+001 - 3.83086324e+000 1.26235457e-002 1.26235457e-002 1.65244471e-002 5.00000000e+000 - 3.84738755e+000 1.65244471e-002 1.65244471e-002 2.62247454e-002 1.10000000e+001 - 3.85000014e+000 2.61247321e-003 2.61247321e-003 2.62247454e-002 1.10000000e+001 - 3.87021875e+000 2.62247454e-002 2.02186983e-002 2.23418772e-002 1.50000000e+001 - 3.89256072e+000 2.23418772e-002 2.23418772e-002 2.10942607e-002 5.00000000e+000 - 3.90000010e+000 7.43942522e-003 7.43942522e-003 8.51938035e-003 4.50000000e+001 - 3.90851951e+000 8.51938035e-003 8.51938035e-003 1.21158017e-002 3.70000000e+001 - 3.92063522e+000 1.21158017e-002 1.21158017e-002 1.61342379e-002 3.70000000e+001 - 3.93676949e+000 1.61342379e-002 1.61342379e-002 2.12970413e-002 3.70000000e+001 - 3.95000005e+000 1.32305808e-002 1.32305808e-002 1.45980427e-002 4.50000000e+001 - 3.96459818e+000 1.45980427e-002 1.45980427e-002 1.56944972e-002 4.50000000e+001 - 3.98029256e+000 1.56944972e-002 1.56944972e-002 1.78740006e-002 5.00000000e+000 - 3.99437237e+000 1.78740006e-002 1.40797906e-002 1.52956480e-002 4.50000000e+001 - 4.00000000e+000 5.62766893e-003 5.62766893e-003 7.86538329e-003 4.10000000e+001 - 4.00786543e+000 7.86538329e-003 7.86538329e-003 1.47584183e-002 3.50000000e+001 - 4.02262402e+000 1.47584183e-002 1.47584183e-002 2.05913633e-002 5.00000000e+000 - 4.04321527e+000 2.05913633e-002 2.05913633e-002 2.51277518e-002 4.10000000e+001 - 4.05000019e+000 6.78483676e-003 6.78483676e-003 9.39967204e-003 4.10000000e+001 - 4.05939960e+000 9.39967204e-003 9.39967204e-003 1.19817005e-002 4.10000000e+001 - 4.07138157e+000 1.19817005e-002 1.19817005e-002 1.30600445e-002 4.10000000e+001 - 4.08444166e+000 1.30600445e-002 1.30600445e-002 1.46792866e-002 1.50000000e+001 - 4.09912062e+000 1.46792866e-002 1.46792866e-002 2.09672768e-002 4.10000000e+001 - 4.09999990e+000 8.79297673e-004 8.79297673e-004 2.09672768e-002 4.10000000e+001 - 4.11318254e+000 2.09672768e-002 1.31824026e-002 1.72325633e-002 5.00000000e+000 - 4.13041496e+000 1.72325633e-002 1.72325633e-002 2.33208556e-002 2.90000000e+001 - 4.15000010e+000 1.95850357e-002 1.95850357e-002 2.08588485e-002 5.00000000e+000 - 4.17085886e+000 2.08588485e-002 2.08588485e-002 2.24987566e-002 8.00000000e+000 - 4.19335747e+000 2.24987566e-002 2.24987566e-002 2.08807085e-002 8.00000000e+000 - 4.20000029e+000 6.64239516e-003 6.64239516e-003 7.73999700e-003 2.90000000e+001 - 4.20773983e+000 7.73999700e-003 7.73999700e-003 1.21723739e-002 3.90000000e+001 - 4.21991253e+000 1.21723739e-002 1.21723739e-002 2.49400530e-002 4.50000000e+001 - 4.24485254e+000 2.49400530e-002 2.49400530e-002 2.29120702e-002 5.00000000e+000 - 4.25000000e+000 5.14757680e-003 5.14757680e-003 7.64521305e-003 2.90000000e+001 - 4.25764513e+000 7.64521305e-003 7.64521305e-003 1.75681841e-002 2.90000000e+001 - 4.27521324e+000 1.75681841e-002 1.75681841e-002 2.52531506e-002 5.00000000e+000 - 4.30000019e+000 2.47866027e-002 2.47866027e-002 2.26444360e-002 5.00000000e+000 - 4.32264471e+000 2.26444360e-002 2.26444360e-002 2.53014360e-002 1.50000000e+001 - 4.34245539e+000 2.53014360e-002 1.98107101e-002 2.07853224e-002 1.50000000e+001 - 4.34999990e+000 7.54485372e-003 7.54485372e-003 7.88425654e-003 1.50000000e+001 - 4.35788441e+000 7.88425654e-003 7.88425654e-003 1.59540512e-002 1.50000000e+001 - 4.37383842e+000 1.59540512e-002 1.59540512e-002 2.51675267e-002 5.00000000e+000 - 4.38732052e+000 2.51675267e-002 1.34822810e-002 1.34870671e-002 1.50000000e+001 - 4.40000010e+000 1.26794120e-002 1.26794120e-002 1.26350923e-002 3.10000000e+001 - 4.41263533e+000 1.26350923e-002 1.26350923e-002 1.95025206e-002 1.50000000e+001 - 4.43213749e+000 1.95025206e-002 1.95025206e-002 1.87052339e-002 1.50000000e+001 - 4.45000029e+000 1.78623889e-002 1.78623889e-002 2.10452750e-002 2.50000000e+001 - 4.47104549e+000 2.10452750e-002 2.10452750e-002 2.12833714e-002 5.00000000e+000 - 4.49232864e+000 2.12833714e-002 2.12833714e-002 2.03946661e-002 5.00000000e+000 - 4.50000000e+000 7.67135434e-003 7.67135434e-003 8.15666746e-003 2.50000000e+001 - 4.50815678e+000 8.15666746e-003 8.15666746e-003 1.61284227e-002 3.70000000e+001 - 4.52428532e+000 1.61284227e-002 1.61284227e-002 2.08633766e-002 5.00000000e+000 - 4.54514837e+000 2.08633766e-002 2.08633766e-002 2.67717298e-002 5.00000000e+000 - 4.55000019e+000 4.85153310e-003 4.85153310e-003 2.67717298e-002 5.00000000e+000 - 4.57677174e+000 2.67717298e-002 2.67717298e-002 2.61369050e-002 5.00000000e+000 - 4.59999990e+000 2.32282709e-002 2.32282709e-002 2.31254958e-002 5.00000000e+000 - 4.62312555e+000 2.31254958e-002 2.31254958e-002 2.87798122e-002 8.00000000e+000 - 4.65000010e+000 2.68745050e-002 2.68745050e-002 2.59787105e-002 7.00000000e+000 - 4.67597866e+000 2.59787105e-002 2.59787105e-002 2.54812296e-002 5.00000000e+000 - 4.69696379e+000 2.40212902e-002 2.09850315e-002 2.04545688e-002 9.00000000e+000 - 4.70000029e+000 3.03625921e-003 3.03625921e-003 2.04545688e-002 4.10000000e+001 - 4.72045469e+000 2.04545688e-002 2.04545688e-002 2.18011327e-002 9.00000000e+000 - 4.74225569e+000 2.18011327e-002 2.18011327e-002 2.51867883e-002 4.10000000e+001 - 4.74864149e+000 7.74429971e-003 6.38591684e-003 7.95372389e-003 4.10000000e+001 - 4.75000000e+000 1.35838275e-003 1.35838275e-003 7.95372389e-003 4.10000000e+001 - 4.75795364e+000 7.95372389e-003 7.95372389e-003 1.82486251e-002 2.70000000e+001 - 4.77620220e+000 1.82486251e-002 1.82486251e-002 2.10819021e-002 1.50000000e+001 - 4.79728413e+000 2.10819021e-002 2.10819021e-002 2.34708842e-002 1.50000000e+001 - 4.80000019e+000 2.71574920e-003 2.71574920e-003 2.34708842e-002 3.70000000e+001 - 4.82347107e+000 2.34708842e-002 2.34708842e-002 2.50374097e-002 9.00000000e+000 - 4.84850836e+000 2.50374097e-002 2.50374097e-002 2.26493292e-002 4.50000000e+001 - 4.84999990e+000 1.49170670e-003 1.49170670e-003 2.26493292e-002 4.50000000e+001 - 4.87264919e+000 2.26493292e-002 2.26493292e-002 3.10065839e-002 9.00000000e+000 - 4.89668846e+000 2.73506716e-002 2.40388904e-002 2.40270365e-002 9.00000000e+000 - 4.90000010e+000 3.31177982e-003 3.31177982e-003 2.40270365e-002 1.50000000e+001 - 4.92402697e+000 2.40270365e-002 2.40270365e-002 2.61237677e-002 5.00000000e+000 - 4.95000029e+000 2.59729642e-002 2.59729642e-002 2.71526221e-002 8.00000000e+000 - 4.97715282e+000 2.71526221e-002 2.71526221e-002 2.50165835e-002 9.00000000e+000 - 5.00000000e+000 2.28473786e-002 2.28473786e-002 2.52699368e-002 9.00000000e+000 - 5.02207565e+000 2.52699368e-002 2.20757332e-002 2.26081200e-002 9.00000000e+000 - 5.04468393e+000 2.26081200e-002 2.26081200e-002 2.32073534e-002 1.50000000e+001 - 5.05000019e+000 5.31614805e-003 5.31614805e-003 5.64638386e-003 1.50000000e+001 - 5.05564642e+000 5.64638386e-003 5.64638386e-003 9.74362995e-003 1.50000000e+001 - 5.06539011e+000 9.74362995e-003 9.74362995e-003 9.97530390e-003 1.50000000e+001 - 5.07336855e+000 9.97530390e-003 7.97838718e-003 1.23258466e-002 1.50000000e+001 - 5.08569431e+000 1.23258466e-002 1.23258466e-002 1.15560526e-002 1.50000000e+001 - 5.09725046e+000 1.15560526e-002 1.15560526e-002 1.28111178e-002 1.50000000e+001 - 5.09999990e+000 2.74969987e-003 2.74969987e-003 4.63366881e-003 3.30000000e+001 - 5.10463381e+000 4.63366881e-003 4.63366881e-003 7.03985197e-003 3.30000000e+001 - 5.11167383e+000 7.03985197e-003 7.03985197e-003 3.25842500e-002 3.30000000e+001 - 5.14425802e+000 3.25842500e-002 3.25842500e-002 3.33621688e-002 5.00000000e+000 - 5.15000010e+000 5.74222999e-003 5.74222999e-003 1.20297056e-002 5.00000000e+000 - 5.16202974e+000 1.20297056e-002 1.20297056e-002 1.98409054e-002 3.70000000e+001 - 5.18187046e+000 1.98409054e-002 1.98409054e-002 2.26549376e-002 5.00000000e+000 - 5.20000029e+000 1.81293897e-002 1.81293897e-002 2.67486479e-002 5.00000000e+000 - 5.22123289e+000 2.67486479e-002 2.12326590e-002 2.26808917e-002 9.00000000e+000 - 5.24391365e+000 2.26808917e-002 2.26808917e-002 2.55901143e-002 4.50000000e+001 - 5.25000000e+000 6.08645007e-003 6.08645007e-003 2.55901143e-002 9.00000000e+000 - 5.27559042e+000 2.55901143e-002 2.55901143e-002 2.32511554e-002 9.00000000e+000 - 5.29129648e+000 2.32511554e-002 1.57064665e-002 1.81108546e-002 3.70000000e+001 - 5.30000019e+000 8.70341901e-003 8.70341901e-003 1.21820997e-002 4.50000000e+001 - 5.31218195e+000 1.21820997e-002 1.21820997e-002 1.62567142e-002 4.50000000e+001 - 5.32843876e+000 1.62567142e-002 1.62567142e-002 1.71757936e-002 4.50000000e+001 - 5.33806133e+000 1.71757936e-002 9.62229259e-003 1.11503098e-002 4.50000000e+001 - 5.34921169e+000 1.11503098e-002 1.11503098e-002 1.51746217e-002 4.50000000e+001 - 5.34999990e+000 7.88583769e-004 7.88583769e-004 1.51746217e-002 4.50000000e+001 - 5.36517477e+000 1.51746217e-002 1.51746217e-002 2.02184599e-002 4.50000000e+001 - 5.38539314e+000 2.02184599e-002 2.02184599e-002 2.30938811e-002 4.50000000e+001 - 5.40000010e+000 1.46069191e-002 1.46069191e-002 3.11224572e-002 3.70000000e+001 - 5.43112230e+000 3.11224572e-002 3.11224572e-002 2.98052821e-002 5.00000000e+000 - 5.45000029e+000 1.88775435e-002 1.88775435e-002 2.50963196e-002 3.70000000e+001 - 5.47509623e+000 2.50963196e-002 2.50963196e-002 2.31296085e-002 5.00000000e+000 - 5.49822617e+000 2.31296085e-002 2.31296085e-002 2.39867568e-002 5.00000000e+000 - 5.50000000e+000 1.77407241e-003 1.77407241e-003 2.39867568e-002 5.00000000e+000 - 5.52398682e+000 2.39867568e-002 2.39867568e-002 2.59659290e-002 9.00000000e+000 - 5.54995298e+000 2.59659290e-002 2.59659290e-002 2.48278975e-002 1.50000000e+001 - 5.57478046e+000 2.48278975e-002 2.48278975e-002 2.84080207e-002 5.00000000e+000 - 5.59999990e+000 2.52194181e-002 2.52194181e-002 2.53473744e-002 9.00000000e+000 - 5.62141657e+000 2.53473744e-002 2.14163810e-002 2.23751701e-002 9.00000000e+000 - 5.64379168e+000 2.23751701e-002 2.23751701e-002 2.11976506e-002 5.00000000e+000 - 5.65000010e+000 6.20844960e-003 6.20844960e-003 6.54729689e-003 3.70000000e+001 - 5.65654755e+000 6.54729689e-003 6.54729689e-003 1.31446533e-002 3.70000000e+001 - 5.66969204e+000 1.31446533e-002 1.31446533e-002 2.15559267e-002 5.00000000e+000 - 5.68674755e+000 2.15559267e-002 1.70555972e-002 2.35677566e-002 3.70000000e+001 - 5.70000029e+000 1.32524548e-002 1.32524548e-002 2.34443005e-002 4.10000000e+001 - 5.72344446e+000 2.34443005e-002 2.34443005e-002 3.19801345e-002 1.10000000e+001 - 5.75000000e+000 2.65557002e-002 2.65557002e-002 3.36377919e-002 6.00000000e+000 - 5.77083731e+000 3.36377919e-002 2.08370425e-002 2.48640329e-002 5.00000000e+000 - 5.79124880e+000 2.48640329e-002 2.04117559e-002 2.20511220e-002 5.00000000e+000 - 5.80000019e+000 8.75120051e-003 8.75120051e-003 1.17994007e-002 1.50000000e+001 - 5.81179953e+000 1.17994007e-002 1.17994007e-002 2.69280896e-002 7.00000000e+000 - 5.83872747e+000 2.69280896e-002 2.69280896e-002 2.74773426e-002 5.00000000e+000 - 5.84999990e+000 1.12725114e-002 1.12725114e-002 1.97198540e-002 2.50000000e+001 - 5.86971998e+000 1.97198540e-002 1.97198540e-002 2.65872180e-002 2.90000000e+001 - 5.89630699e+000 2.65872180e-002 2.65872180e-002 2.46579777e-002 9.00000000e+000 - 5.90000010e+000 3.69292777e-003 3.69292777e-003 2.46579777e-002 1.00000000e+001 - 5.92465830e+000 2.46579777e-002 2.46579777e-002 2.87287906e-002 9.00000000e+000 - 5.95000029e+000 2.53420230e-002 2.53420230e-002 2.52731591e-002 5.00000000e+000 - 5.97527313e+000 2.52731591e-002 2.52731591e-002 2.47706510e-002 1.50000000e+001 - 6.00000000e+000 2.47268416e-002 2.47268416e-002 2.33987290e-002 9.00000000e+000 - 6.02339888e+000 2.33987290e-002 2.33987290e-002 2.21516918e-002 9.00000000e+000 - 6.04555035e+000 2.21516918e-002 2.21516918e-002 2.13362463e-002 1.50000000e+001 - 6.05000019e+000 4.44957893e-003 4.44957893e-003 5.12802647e-003 1.50000000e+001 - 6.05512810e+000 5.12802647e-003 5.12802647e-003 8.69598705e-003 3.70000000e+001 - 6.06382418e+000 8.69598705e-003 8.69598705e-003 1.82335768e-002 9.00000000e+000 - 6.08205748e+000 1.82335768e-002 1.82335768e-002 2.50912011e-002 7.00000000e+000 - 6.09999990e+000 1.79424100e-002 1.79424100e-002 2.48265732e-002 6.00000000e+000 - 6.12482643e+000 2.48265732e-002 2.48265732e-002 2.73955204e-002 5.00000000e+000 - 6.15000010e+000 2.51734275e-002 2.51734275e-002 2.45076679e-002 9.00000000e+000 - 6.17450762e+000 2.45076679e-002 2.45076679e-002 2.24253424e-002 9.00000000e+000 - 6.19448471e+000 2.24253424e-002 1.99770685e-002 2.24056672e-002 5.00000000e+000 - 6.20000029e+000 5.51526388e-003 5.51526388e-003 7.63834920e-003 2.50000000e+001 - 6.20763826e+000 7.63834920e-003 7.63834920e-003 1.44252935e-002 3.70000000e+001 - 6.22206354e+000 1.44252935e-002 1.44252935e-002 2.76072640e-002 4.50000000e+001 - 6.24531889e+000 2.76072640e-002 2.32553743e-002 2.37520467e-002 9.00000000e+000 - 6.25000000e+000 4.68098465e-003 4.68098465e-003 2.37520467e-002 5.00000000e+000 - 6.27375221e+000 2.37520467e-002 2.37520467e-002 2.28095632e-002 9.00000000e+000 - 6.29656172e+000 2.28095632e-002 2.28095632e-002 2.53989398e-002 5.00000000e+000 - 6.30000019e+000 3.43838939e-003 3.43838939e-003 4.19815117e-003 3.30000000e+001 - 6.30419827e+000 4.19815117e-003 4.19815117e-003 8.46917834e-003 2.90000000e+001 - 6.31266737e+000 8.46917834e-003 8.46917834e-003 1.60087515e-002 3.70000000e+001 - 6.32867622e+000 1.60087515e-002 1.60087515e-002 1.85615681e-002 5.00000000e+000 - 6.34723759e+000 1.85615681e-002 1.85615681e-002 2.28044242e-002 5.00000000e+000 - 6.34999990e+000 2.76235235e-003 2.76235235e-003 4.01682174e-003 3.70000000e+001 - 6.35401678e+000 4.01682174e-003 4.01682174e-003 6.47258433e-003 3.70000000e+001 - 6.36048937e+000 6.47258433e-003 6.47258433e-003 1.53739788e-002 2.90000000e+001 - 6.37586355e+000 1.53739788e-002 1.53739788e-002 2.28644162e-002 8.00000000e+000 - 6.39642715e+000 2.28644162e-002 2.05636118e-002 2.08726171e-002 5.00000000e+000 - 6.40000010e+000 3.57300392e-003 3.57300392e-003 1.36068435e-002 9.00000000e+000 - 6.41360712e+000 1.36068435e-002 1.36068435e-002 1.33091975e-002 9.00000000e+000 - 6.42691612e+000 1.33091975e-002 1.33091975e-002 1.36918277e-002 3.70000000e+001 - 6.44060802e+000 1.36918277e-002 1.36918277e-002 1.63213331e-002 5.00000000e+000 - 6.45000029e+000 9.39213205e-003 9.39213205e-003 8.52674153e-003 3.70000000e+001 - 6.45852661e+000 8.52674153e-003 8.52674153e-003 1.66469645e-002 4.10000000e+001 - 6.47517395e+000 1.66469645e-002 1.66469645e-002 1.96049549e-002 5.00000000e+000 - 6.49044037e+000 1.96049549e-002 1.52664566e-002 1.73625462e-002 5.00000000e+000 - 6.50000000e+000 9.55983810e-003 9.55983810e-003 1.07325893e-002 4.10000000e+001 - 6.51073265e+000 1.07325893e-002 1.07325893e-002 1.85120944e-002 4.10000000e+001 - 6.52924490e+000 1.85120944e-002 1.85120944e-002 2.11116876e-002 5.00000000e+000 - 6.54326582e+000 2.07553171e-002 1.40208416e-002 1.61828082e-002 5.00000000e+000 - 6.55000019e+000 6.73447549e-003 6.73447549e-003 7.82198925e-003 3.70000000e+001 - 6.55782223e+000 7.82198925e-003 7.82198925e-003 1.42915687e-002 4.50000000e+001 - 6.57211351e+000 1.42915687e-002 1.42915687e-002 1.87656786e-002 4.50000000e+001 - 6.59087944e+000 1.87656786e-002 1.87656786e-002 2.61717960e-002 3.70000000e+001 - 6.59999990e+000 9.12076421e-003 9.12076421e-003 1.23430882e-002 3.70000000e+001 - 6.61234331e+000 1.23430882e-002 1.23430882e-002 1.90122332e-002 5.00000000e+000 - 6.63135529e+000 1.90122332e-002 1.90122332e-002 2.34392006e-002 5.00000000e+000 - 6.65000010e+000 1.86446793e-002 1.86446793e-002 1.99231580e-002 5.00000000e+000 - 6.66992331e+000 1.99231580e-002 1.99231580e-002 2.17787717e-002 9.00000000e+000 - 6.69170189e+000 2.17787717e-002 2.17787717e-002 2.55952235e-002 8.00000000e+000 - 6.70000029e+000 8.29807110e-003 8.29807110e-003 1.16713606e-002 2.90000000e+001 - 6.71167135e+000 1.16713606e-002 1.16713606e-002 2.07148809e-002 3.10000000e+001 - 6.73238611e+000 2.07148809e-002 2.07148809e-002 2.00994052e-002 5.00000000e+000 - 6.75000000e+000 1.76137574e-002 1.76137574e-002 2.30700560e-002 9.00000000e+000 - 6.76900387e+000 2.30700560e-002 1.90035552e-002 1.97586548e-002 9.00000000e+000 - 6.78876209e+000 1.97586548e-002 1.97586548e-002 2.48674061e-002 3.70000000e+001 - 6.80000019e+000 1.12377899e-002 1.12377899e-002 1.86537690e-002 3.70000000e+001 - 6.81865406e+000 1.86537690e-002 1.86537690e-002 2.55279932e-002 8.00000000e+000 - 6.84418201e+000 2.55279932e-002 2.55279932e-002 2.32048370e-002 9.00000000e+000 - 6.84999990e+000 5.81823895e-003 5.81823895e-003 2.32048370e-002 1.50000000e+001 - 6.87320471e+000 2.32048370e-002 2.32048370e-002 2.26011463e-002 5.00000000e+000 - 6.89580631e+000 2.26011463e-002 2.26011463e-002 2.31083147e-002 9.00000000e+000 - 6.90000010e+000 4.19401797e-003 4.19401797e-003 5.46649517e-003 4.10000000e+001 - 6.90546656e+000 5.46649517e-003 5.46649517e-003 1.14733214e-002 1.50000000e+001 - 6.91693974e+000 1.14733214e-002 1.14733214e-002 1.33670010e-002 4.10000000e+001 - 6.93030691e+000 1.33670010e-002 1.33670010e-002 1.48211224e-002 1.50000000e+001 - 6.94308853e+000 1.48211224e-002 1.27815083e-002 1.89372841e-002 3.70000000e+001 - 6.95000029e+000 6.91167545e-003 6.91167545e-003 7.25058652e-003 1.50000000e+001 - 6.95725060e+000 7.25058652e-003 7.25058652e-003 1.33143375e-002 1.50000000e+001 - 6.97056484e+000 1.33143375e-002 1.33143375e-002 1.81747209e-002 1.50000000e+001 - 6.98873997e+000 1.81747209e-002 1.81747209e-002 2.32418850e-002 1.50000000e+001 - 6.99831295e+000 1.12602515e-002 9.57311876e-003 1.17313089e-002 1.50000000e+001 - 7.00000000e+000 1.68713229e-003 1.68713229e-003 1.17313089e-002 5.00000000e+000 - 7.01173115e+000 1.17313089e-002 1.17313089e-002 1.18237166e-002 1.50000000e+001 - 7.02355480e+000 1.18237166e-002 1.18237166e-002 1.94364451e-002 2.50000000e+001 - 7.04299164e+000 1.94364451e-002 1.94364451e-002 1.96044445e-002 1.50000000e+001 - 7.05000019e+000 7.00863358e-003 7.00863358e-003 6.94466382e-003 2.50000000e+001 - 7.05694485e+000 6.94466382e-003 6.94466382e-003 1.03408294e-002 2.50000000e+001 - 7.06728554e+000 1.03408294e-002 1.03408294e-002 1.31758517e-002 2.50000000e+001 - 7.08046150e+000 1.31758517e-002 1.31758517e-002 1.75320059e-002 2.90000000e+001 - 7.09799337e+000 1.75320059e-002 1.75320059e-002 2.92596333e-002 3.50000000e+001 - 7.09999990e+000 2.00665067e-003 2.00665067e-003 2.92596333e-002 3.50000000e+001 - 7.12255621e+000 2.92596333e-002 2.25562118e-002 2.41184123e-002 1.50000000e+001 - 7.13810682e+000 2.41184123e-002 1.55503871e-002 1.59810185e-002 4.50000000e+001 - 7.14741373e+000 1.18934009e-002 9.30706691e-003 1.04601616e-002 1.50000000e+001 - 7.15000010e+000 2.58633448e-003 2.58633448e-003 3.29716038e-003 1.50000000e+001 - 7.15329742e+000 3.29716038e-003 3.29716038e-003 9.02590528e-003 1.50000000e+001 - 7.16232300e+000 9.02590528e-003 9.02590528e-003 1.93039272e-002 1.50000000e+001 - 7.18162727e+000 1.93039272e-002 1.93039272e-002 2.62749083e-002 3.90000000e+001 - 7.20000029e+000 1.83730088e-002 1.83730088e-002 1.85478088e-002 3.90000000e+001 - 7.21854782e+000 1.85478088e-002 1.85478088e-002 1.99387781e-002 1.50000000e+001 - 7.23848677e+000 1.99387781e-002 1.99387781e-002 2.38984339e-002 1.50000000e+001 - 7.25000000e+000 1.15134139e-002 1.15134139e-002 1.35619324e-002 1.50000000e+001 - 7.26356220e+000 1.35619324e-002 1.35619324e-002 1.48574291e-002 5.00000000e+000 - 7.27841949e+000 1.48574291e-002 1.48574291e-002 2.10445672e-002 5.00000000e+000 - 7.29946423e+000 2.10445672e-002 2.10445672e-002 2.11236849e-002 1.50000000e+001 - 7.30000019e+000 5.36072650e-004 5.36072650e-004 2.11236849e-002 1.50000000e+001 - 7.32112360e+000 2.11236849e-002 2.11236849e-002 2.83719022e-002 1.50000000e+001 - 7.34949589e+000 2.83719022e-002 2.83719022e-002 3.06385253e-002 9.00000000e+000 - 7.34999990e+000 5.04413620e-004 5.04413620e-004 3.06385253e-002 9.00000000e+000 - 7.38063860e+000 3.06385253e-002 3.06385253e-002 3.11207101e-002 3.70000000e+001 - 7.40000010e+000 1.93614755e-002 1.93614755e-002 1.86129734e-002 4.50000000e+001 - 7.41861296e+000 1.86129734e-002 1.86129734e-002 2.44822372e-002 3.70000000e+001 - 7.44309521e+000 2.44822372e-002 2.44822372e-002 2.33007260e-002 3.70000000e+001 - 7.44999981e+000 6.90448750e-003 6.90448750e-003 2.33007260e-002 9.00000000e+000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$46 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$46 deleted file mode 100644 index 7b380db979a1eb2e8db2561aa74b0063678b3505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 VcmZQzXxPVq0!H~L!7;?c2LQbRB}D)L diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$55 deleted file mode 100644 index c9731d3e529bccdef5b94a0d095b022f16f27f5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmZQ%Kn09IE)$Xvhz|oWahMp4hRK6ykQfNF05M2CjOGHeL6{$iWq{ZYh@F5q1c)a9 c@f9G}0&08=#3z6nw=gp>d;@AW0E!a>0CnsJNdN!< diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$69 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.$69 deleted file mode 100644 index b425c09beb0808b1b7ba907adafa901e9a341baf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmV70EEf?)5}TS9I;E9`3y)Yy_rZjteC}IB!tOg z4arGLKC?>+w5CV72%bpJ0;a|CJA}#Z9Lz}s#<5FrNP$NL*Oy4>#q`DG=Yz>bNXtnd z+^$Q?-=jyss*FhSy8*_v>x0SlmcvQN;;u_3bL&S?K#NF*F{Z_gc!bH-OT9_^Q?g59 q - - 0.2 - - - - - Position - false - - - cdecl - - Continuous - 0 - - - false - 0 - 0 - false - 0 - 0 - - - 6.2831853071795862 - 0.8 - - - 0.3 - - false - - 0 - 0 - - false - - 0 - 0 - - 0 - false - - false - 0 - 0 - 0 - 0 - 0 - - - - - 0 - 0 - - - - false - false - false - false - - - - 0 - 0 - - - Constant - 0 - - - - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 deleted file mode 100644 index 53030723b8..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%04 +++ /dev/null @@ -1,39 +0,0 @@ -FILE demo_a_44.$04 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 2 -DIMENS 9 10 -GENLAB 'Control variables' -VARIAB 'Time from start of simulation' 'Demanded power' 'Measured power' 'Demanded generator speed' 'Measured generator speed' 'Nominal pitch angle' 'Demanded generator torque' 'Nominal wind speed at hub position' 'Measured shaft power' -VARUNIT T P P A/T A/T A FL L/T P -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.000000E+00 0.990000E+21 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 - 0.715000E+01 0.411234E+23 0.191410E+07 0.157079E+03 0.158926E+03 -0.349066E-01 0.126958E+05 0.125669E+02 0.201484E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.730000E+01 0.411234E+23 0.191817E+07 0.157079E+03 0.158835E+03 -0.349066E-01 0.127172E+05 0.126810E+02 0.201912E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 - 0.700000E+01 0.411234E+23 0.191484E+07 0.157079E+03 0.159038E+03 -0.349066E-01 0.126798E+05 0.119510E+02 0.201562E+07 - 0.745000E+01 0.411234E+23 0.194046E+07 0.157079E+03 0.158929E+03 -0.349066E-01 0.128319E+05 0.130701E+02 0.204259E+07 - 0.715000E+01 0.411234E+23 0.191410E+07 0.157079E+03 0.158926E+03 -0.349066E-01 0.126958E+05 0.125669E+02 0.201484E+07 -MAXTIME 0.450000E+00 0.000000E+00 0.450000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.450000E+00 0.450000E+00 0.450000E+00 -MINTIME 0.000000E+00 -0.500000E-01 0.150000E+00 0.000000E+00 0.300000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.150000E+00 -MEAN 0.722500E+01 0.411234E+23 0.192037E+07 0.157079E+03 0.158921E+03 -0.349066E-01 0.127260E+05 0.125565E+02 0.202144E+07 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 deleted file mode 100644 index 3f0f764874..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%06 +++ /dev/null @@ -1,29 +0,0 @@ -FILE demo_a_44.$06 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 2 -DIMENS 4 10 -GENLAB 'Generator variables' -VARIAB 'Generator torque' 'Electrical power' 'Generator power loss' 'Reactive power' -VARUNIT FL P P Q -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.128522E+05 0.194046E+07 0.102130E+06 0.000000E+00 - 0.126738E+05 0.191484E+07 0.100781E+06 0.000000E+00 - 0.128522E+05 0.194046E+07 0.102130E+06 0.000000E+00 - 0.126778E+05 0.191410E+07 0.100742E+06 0.000000E+00 - 0.128522E+05 0.194046E+07 0.102130E+06 0.000000E+00 - 0.126778E+05 0.191410E+07 0.100742E+06 0.000000E+00 - 0.126738E+05 0.191484E+07 0.100781E+06 0.000000E+00 - 0.126738E+05 0.191484E+07 0.100781E+06 0.000000E+00 -MAXTIME 0.450000E+00 0.450000E+00 0.450000E+00 0.000000E+00 -MINTIME 0.000000E+00 0.150000E+00 0.150000E+00 0.000000E+00 -MEAN 0.127198E+05 0.192037E+07 0.101072E+06 0.000000E+00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 deleted file mode 100644 index 7081588cb9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%09 +++ /dev/null @@ -1,59 +0,0 @@ -FILE demo_a_44.$09 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 3 -DIMENS 17 1 10 -GENLAB 'Aerodynamic information: blade 1' -VARIAB ELRAD AXIALA1 TANGA1 TLOSS1 PHI1 ALPHA1 REYN1 CL1 CD1 CM1 WINDSP1 DFOUT1 DFIN1 DPMOM1 VP1 VT1 INFX1 -VARUNIT L N N N A A N N N N L/T F/L F/L FL/L L/T L/T N -AXISLAB 'Distance along blade' -AXIUNIT L -AXIMETH 3 -AXIVAL 26.407 -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.263757E+00 0.112587E-01 0.985023E+00 0.179482E+00 0.156793E+00 0.668376E+07 0.138455E+01 0.129760E-01 -0.833697E-01 0.540552E+02 0.448655E+04 -0.770655E+03 -0.172653E+03 0.131070E+02 0.525947E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.280106E+00 0.109549E-01 0.988745E+00 0.166650E+00 0.143961E+00 0.661097E+07 0.132316E+01 0.901324E-02 -0.769566E-01 0.534665E+02 0.420185E+04 -0.677397E+03 -0.144921E+03 0.123199E+02 0.521545E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.280106E+00 0.109549E-01 0.988745E+00 0.166650E+00 0.143961E+00 0.661097E+07 0.132316E+01 0.901324E-02 -0.769566E-01 0.534665E+02 0.420185E+04 -0.677397E+03 -0.144921E+03 0.123199E+02 0.521545E+02 0.100000E+01 - 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.319649E+00 0.947390E-02 0.995393E+00 0.136238E+00 0.113548E+00 0.671284E+07 0.118213E+01 0.899778E-02 -0.782873E-01 0.542904E+02 0.388817E+04 -0.502898E+03 -0.190484E+03 0.108378E+02 0.532825E+02 0.100000E+01 - 0.276574E+02 0.293917E+00 0.101556E-01 0.991046E+00 0.157636E+00 0.134947E+00 0.653945E+07 0.130386E+01 0.103582E-01 -0.926991E-01 0.528881E+02 0.405790E+04 -0.612012E+03 -0.236838E+03 0.117586E+02 0.517072E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 - 0.276574E+02 0.253601E+00 0.109873E-01 0.982493E+00 0.187366E+00 0.164677E+00 0.676435E+07 0.143393E+01 0.152991E-01 -0.933515E-01 0.547070E+02 0.475387E+04 -0.848848E+03 -0.226851E+03 0.136527E+02 0.531654E+02 0.100000E+01 -MAXTIME 0.000000E+00 0.450000E+00 0.500000E-01 0.450000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.100000E+00 0.000000E+00 0.000000E+00 0.450000E+00 0.100000E+00 0.000000E+00 0.450000E+00 0.000000E+00 -MINTIME 0.000000E+00 0.000000E+00 0.450000E+00 0.000000E+00 0.450000E+00 0.450000E+00 0.300000E+00 0.450000E+00 0.450000E+00 0.000000E+00 0.300000E+00 0.450000E+00 0.000000E+00 0.300000E+00 0.450000E+00 0.300000E+00 0.000000E+00 -MEAN 0.276574E+02 0.288380E+00 0.103229E-01 0.990101E+00 0.160178E+00 0.137489E+00 0.664723E+07 0.130496E+01 0.110595E-01 -0.850990E-01 0.537597E+02 0.419544E+04 -0.644742E+03 -0.199105E+03 0.120309E+02 0.525238E+02 0.100000E+01 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 deleted file mode 100644 index c8aedbd913..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%12 +++ /dev/null @@ -1,47 +0,0 @@ -FILE demo_a_44.$12 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 2 -DIMENS 13 10 -GENLAB 'Electrical variables' -VARIAB POW2 POW3 POW4 REAC2 REAC3 REAC4 PF2 PF3 PF4 VOLTS VOLTF TURBI FARMI -VARUNIT P P P Q Q Q N N N V V I I -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.191534E+07 0.191534E+07 0.191503E+07 0.302640E-04 0.302640E-04 0.303087E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100513E+03 0.100513E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.191534E+07 0.191534E+07 0.191503E+07 0.302640E-04 0.302640E-04 0.303087E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100513E+03 0.100513E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191484E+07 0.191484E+07 0.191453E+07 -0.857543E-05 -0.857543E-05 0.302929E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100487E+03 0.100487E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 - 0.194046E+07 0.194046E+07 0.194015E+07 0.279992E-04 0.279992E-04 0.311090E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110018E+05 0.110018E+05 0.101832E+03 0.101832E+03 - 0.191410E+07 0.191410E+07 0.191380E+07 -0.245270E-04 -0.245270E-04 0.302695E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100448E+03 0.100448E+03 -MAXTIME 0.450000E+00 0.450000E+00 0.450000E+00 0.500000E-01 0.500000E-01 0.450000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.450000E+00 0.450000E+00 0.450000E+00 0.450000E+00 -MINTIME 0.150000E+00 0.150000E+00 0.150000E+00 0.150000E+00 0.150000E+00 0.150000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.150000E+00 0.150000E+00 0.150000E+00 -MEAN 0.192037E+07 0.192037E+07 0.192007E+07 0.581092E-05 0.581092E-05 0.304689E+03 0.100000E+01 0.100000E+01 0.100000E+01 0.110017E+05 0.110017E+05 0.100777E+03 0.100777E+03 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 deleted file mode 100644 index c25f5bb9a5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%23 +++ /dev/null @@ -1,37 +0,0 @@ -FILE demo_a_44.$23 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 2 -DIMENS 8 10 -GENLAB 'Hub loads: fixed frame GL coordinates' -VARIAB 'Stationary hub Mx' 'Stationary hub My' 'Stationary hub Mz' 'Stationary hub Myz' 'Stationary hub Fx' 'Stationary hub Fy' 'Stationary hub Fz' 'Stationary hub Fyz' -VARUNIT FL FL FL FL F F F F -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.111591E+07 0.726479E+06 0.178399E+06 0.748063E+06 0.315027E+06 -0.117953E+05 -0.334988E+06 0.335195E+06 - 0.109298E+07 0.439091E+06 0.242142E+06 0.501432E+06 0.324923E+06 -0.395683E+04 -0.324615E+06 0.324639E+06 - 0.111591E+07 0.726479E+06 0.178399E+06 0.748063E+06 0.315027E+06 -0.117953E+05 -0.334988E+06 0.335195E+06 - 0.109298E+07 0.439091E+06 0.242142E+06 0.501432E+06 0.324923E+06 -0.395683E+04 -0.324615E+06 0.324639E+06 - 0.109298E+07 0.439091E+06 0.242142E+06 0.501432E+06 0.324923E+06 -0.395683E+04 -0.324615E+06 0.324639E+06 - 0.109755E+07 0.576906E+06 0.939693E+05 0.584509E+06 0.316656E+06 -0.124688E+05 -0.324705E+06 0.324944E+06 - 0.111591E+07 0.726479E+06 0.178399E+06 0.748063E+06 0.315027E+06 -0.117953E+05 -0.334988E+06 0.335195E+06 - 0.109779E+07 0.461799E+06 0.165613E+06 0.490598E+06 0.334001E+06 -0.240930E+04 -0.334644E+06 0.334653E+06 - 0.109779E+07 0.461799E+06 0.165613E+06 0.490598E+06 0.334001E+06 -0.240930E+04 -0.334644E+06 0.334653E+06 - 0.111228E+07 0.698521E+06 0.209028E+06 0.729126E+06 0.314737E+06 -0.832075E+04 -0.338662E+06 0.338765E+06 - 0.109554E+07 0.450214E+06 0.224881E+06 0.503253E+06 0.329445E+06 -0.186323E+04 -0.326567E+06 0.326572E+06 - 0.110763E+07 0.702631E+06 0.142612E+06 0.716958E+06 0.316780E+06 -0.140612E+05 -0.327942E+06 0.328243E+06 - 0.110023E+07 0.642055E+06 0.105366E+06 0.650643E+06 0.316823E+06 -0.139339E+05 -0.323937E+06 0.324236E+06 - 0.111228E+07 0.698521E+06 0.209028E+06 0.729126E+06 0.314737E+06 -0.832075E+04 -0.338662E+06 0.338765E+06 - 0.111228E+07 0.698521E+06 0.209028E+06 0.729126E+06 0.314737E+06 -0.832075E+04 -0.338662E+06 0.338765E+06 - 0.110023E+07 0.642055E+06 0.105366E+06 0.650643E+06 0.316823E+06 -0.139339E+05 -0.323937E+06 0.324236E+06 -MAXTIME 0.400000E+00 0.400000E+00 0.100000E+00 0.400000E+00 0.000000E+00 0.500000E-01 0.300000E+00 0.450000E+00 -MINTIME 0.100000E+00 0.100000E+00 0.250000E+00 0.000000E+00 0.450000E+00 0.350000E+00 0.450000E+00 0.300000E+00 -MEAN 0.110094E+07 0.565960E+06 0.167636E+06 0.594012E+06 0.320398E+06 -0.873886E+04 -0.329187E+06 0.329333E+06 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 deleted file mode 100644 index 380979884b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%25 +++ /dev/null @@ -1,60 +0,0 @@ -FILE demo_a_44.$25 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 3 -DIMENS 8 2 10 -GENLAB 'Tower loads GL coordinates' -VARIAB MXT MYT 'Tower Mxy' MZT FXT FYT 'Tower Fxy' FZT -VARUNIT FL FL FL FL F F F F -AXISLAB 'Tower station height' -AXIUNIT L -AXIMETH 3 -AXIVAL -15.000 15.000 -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.193523E+07 0.223290E+08 0.224127E+08 0.949411E+05 0.285783E+06 -0.142219E+05 0.286137E+06 -0.255039E+07 - 0.155100E+07 0.233759E+08 0.234273E+08 0.145314E+06 0.303190E+06 -0.215841E+04 0.303198E+06 -0.254935E+07 - 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 - 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 - 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 - 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 - 0.177004E+07 0.226428E+08 0.227119E+08 0.177328E+06 0.291506E+06 -0.806033E+04 0.291617E+06 -0.253957E+07 - 0.167238E+07 0.233032E+08 0.233631E+08 0.661959E+05 0.310273E+06 -0.778131E+04 0.310371E+06 -0.253879E+07 - 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 - 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 - 0.155100E+07 0.233759E+08 0.234273E+08 0.145314E+06 0.303190E+06 -0.215841E+04 0.303198E+06 -0.254935E+07 - 0.193523E+07 0.223290E+08 0.224127E+08 0.949411E+05 0.285783E+06 -0.142219E+05 0.286137E+06 -0.255039E+07 - 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 - 0.189305E+07 0.222598E+08 0.223402E+08 0.151846E+06 0.278150E+06 -0.128261E+05 0.278446E+06 -0.254252E+07 - 0.167238E+07 0.233032E+08 0.233631E+08 0.661959E+05 0.310273E+06 -0.778131E+04 0.310371E+06 -0.253879E+07 - 0.158753E+07 0.238570E+08 0.239098E+08 0.161275E+06 0.323650E+06 -0.259231E+04 0.323661E+06 -0.255189E+07 -MAXTIME 0.000000E+00 0.450000E+00 0.450000E+00 0.100000E+00 0.450000E+00 0.400000E+00 0.450000E+00 0.250000E+00 -MINTIME 0.400000E+00 0.500000E-01 0.500000E-01 0.250000E+00 0.500000E-01 0.000000E+00 0.500000E-01 0.450000E+00 -MEAN 0.169947E+07 0.230326E+08 0.230957E+08 0.123108E+06 0.300157E+06 -0.712561E+04 0.300270E+06 -0.254371E+07 -ULOADS 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 - 0.142459E+07 0.140976E+08 0.141694E+08 0.832236E+05 0.295676E+06 -0.705929E+04 0.295760E+06 -0.170697E+07 - 0.143419E+07 0.141719E+08 0.142442E+08 0.119811E+06 0.294105E+06 -0.547746E+04 0.294156E+06 -0.171148E+07 - 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 - 0.143419E+07 0.141719E+08 0.142442E+08 0.119811E+06 0.294105E+06 -0.547746E+04 0.294156E+06 -0.171148E+07 - 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 - 0.151470E+07 0.137452E+08 0.138284E+08 0.176604E+06 0.295902E+06 -0.841797E+04 0.296021E+06 -0.170762E+07 - 0.143854E+07 0.139432E+08 0.140172E+08 0.654555E+05 0.306145E+06 -0.713270E+04 0.306228E+06 -0.170685E+07 - 0.147656E+07 0.141467E+08 0.142236E+08 0.160369E+06 0.314998E+06 -0.468302E+04 0.315032E+06 -0.171994E+07 - 0.151978E+07 0.136988E+08 0.137828E+08 0.151257E+06 0.287992E+06 -0.110697E+05 0.288205E+06 -0.171058E+07 - 0.145647E+07 0.141671E+08 0.142418E+08 0.144452E+06 0.303962E+06 -0.399357E+04 0.303989E+06 -0.171741E+07 - 0.152733E+07 0.135974E+08 0.136830E+08 0.943611E+05 0.290799E+06 -0.118690E+05 0.291041E+06 -0.171844E+07 - 0.147656E+07 0.141467E+08 0.142236E+08 0.160369E+06 0.314998E+06 -0.468302E+04 0.315032E+06 -0.171994E+07 - 0.151978E+07 0.136988E+08 0.137828E+08 0.151257E+06 0.287992E+06 -0.110697E+05 0.288205E+06 -0.171058E+07 - 0.143854E+07 0.139432E+08 0.140172E+08 0.654555E+05 0.306145E+06 -0.713270E+04 0.306228E+06 -0.170685E+07 - 0.147656E+07 0.141467E+08 0.142236E+08 0.160369E+06 0.314998E+06 -0.468302E+04 0.315032E+06 -0.171994E+07 -MAXTIME 0.000000E+00 0.350000E+00 0.350000E+00 0.100000E+00 0.450000E+00 0.400000E+00 0.450000E+00 0.250000E+00 -MINTIME 0.300000E+00 0.000000E+00 0.000000E+00 0.250000E+00 0.500000E-01 0.000000E+00 0.500000E-01 0.450000E+00 -MEAN 0.147594E+07 0.139156E+08 0.139937E+08 0.122358E+06 0.301069E+06 -0.723169E+04 0.301168E+06 -0.171176E+07 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 deleted file mode 100644 index 35e5c67cf6..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%31 +++ /dev/null @@ -1,31 +0,0 @@ -FILE demo_a_44.$31 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 3 -DIMENS 3 1 10 -GENLAB 'Blade 1 Absolute motion' -VARIAB 'Blade 1 x-position' 'Blade 1 y-position' 'Blade 1 z-position' -VARUNIT L L L -AXISLAB 'Distance along blade' -AXIUNIT L -AXIMETH 3 -AXIVAL 38.750 -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.135292E+01 -0.279491E+02 0.898919E+02 - -0.150286E+01 -0.399608E+02 0.589603E+02 - 0.135292E+01 -0.279491E+02 0.898919E+02 - -0.119360E+01 -0.400085E+02 0.627606E+02 - 0.135292E+01 -0.279491E+02 0.898919E+02 - -0.150286E+01 -0.399608E+02 0.589603E+02 -MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 -MINTIME 0.450000E+00 0.400000E+00 0.450000E+00 -MEAN -0.180593E-01 -0.359549E+02 0.751973E+02 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 deleted file mode 100644 index 3c6663da87..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%37 +++ /dev/null @@ -1,31 +0,0 @@ -FILE demo_a_44.$37 -ACCESS S -FORM F -RECL 4 -FORMAT R*4 -CONTENT 'POWPROD' -CONFIG 'STATIONARY' -NDIMENS 2 -DIMENS 5 522 -GENLAB 'Simulation step sizes' -VARIAB 'Simulation Time' 'Constrained Step Size' 'Actual Step Size' 'Requested Size of Next Step' 'State with largest error' -VARUNIT T T T T N -AXISLAB 'Step number' -AXIUNIT N -AXIMETH 2 -MIN 0.00000000E+000 -STEP 1.00000000E+000 -NVARS 0 -ULOADS 7.450000E+000 6.904487E-003 6.904487E-003 2.330073E-002 9.000000E+000 - 1.000000E-007 1.000000E-007 1.000000E-007 1.000000E-006 3.900000E+001 - 2.534743E+000 3.474264E-002 3.474264E-002 3.532558E-002 5.000000E+000 - 1.000000E-007 1.000000E-007 1.000000E-007 1.000000E-006 3.900000E+001 - 2.534743E+000 3.474264E-002 3.474264E-002 3.532558E-002 5.000000E+000 - 1.000000E-007 1.000000E-007 1.000000E-007 1.000000E-006 3.900000E+001 - 2.031245E+000 3.124481E-002 3.124481E-002 3.539262E-002 4.500000E+001 - 1.044923E-005 2.773416E-006 4.591858E-007 4.159318E-007 2.700000E+001 - 1.912216E-003 1.296193E-003 1.296193E-003 1.282779E-003 4.800000E+001 - 1.109353E-001 2.281667E-002 1.093534E-002 1.142270E-002 5.000000E+000 -MAXTIME 5.210000E+002 1.750000E+002 1.750000E+002 1.440000E+002 1.200000E+001 -MINTIME 0.000000E+000 0.000000E+000 0.000000E+000 5.000000E+000 2.500000E+001 -MEAN 3.647993E+000 1.482273E-002 1.427202E-002 1.861919E-002 2.054598E+001 \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 deleted file mode 100644 index 7f7f18a1a9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%46 +++ /dev/null @@ -1,56 +0,0 @@ -FILE demo_a_44.$46 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 3 -DIMENS 4 3 10 -GENLAB 'Water particle kinematics' -VARIAB 'Water particle velocity in X direction' 'Water particle velocity in Y direction' -'Water particle acceleration in X direction' 'Water particle acceleration in Y direction' -VARUNIT L/T L/T L/TT L/TT -AXISLAB 'Tower station height' -AXIUNIT L -AXIMETH 3 -AXITICK 'Node 1' 'Node 2' 'Node 3' -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MINTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MEAN -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -ULOADS -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MINTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MEAN -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -ULOADS -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MAXTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MINTIME 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -MEAN -0.250000E+00 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 deleted file mode 100644 index c16b84ea0d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%55 +++ /dev/null @@ -1,17 +0,0 @@ -FILE demo_a_44.$55 -ACCESS D -FORM F -RECL 4 -FORMAT I*4 -CONTENT 'POWPROD' -CONFIG 'TABLE' -NDIMENS 2 -DIMENS 1 50 -GENLAB 'Step size distribution' -VARIAB 'Step size histogram' -VARUNIT N -AXISLAB 'Bin maximum time step' -AXIUNIT T -AXIMETH 3 -AXIVAL 1e-007 1.38038e-007 1.90546e-007 2.63027e-007 3.63078e-007 5.01187e-007 6.91831e-007 9.54993e-007 1.31826e-006 1.8197e-006 2.51189e-006 3.46737e-006 4.7863e-006 6.60693e-006 9.12011e-006 1.25893e-005 1.7378e-005 2.39883e-005 3.31131e-005 4.57088e-005 6.30957e-005 8.70964e-005 0.000120226 0.000165959 0.000229087 0.000316228 0.000436516 0.00060256 0.000831764 0.00114815 0.00158489 0.00218776 0.00301995 0.00416869 0.0057544 0.00794328 0.0109648 0.0151356 0.020893 0.0288403 0.0549541 0.0758578 0.104713 0.144544 0.199526 0.275423 0.380189 0.524807 0.724436 1 -NVARS 0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 deleted file mode 100644 index e61c0282a4..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2.%69 +++ /dev/null @@ -1,33 +0,0 @@ -FILE demo_a_44.$69 -ACCESS D -FORM U -RECL 4 -FORMAT R*4 -CONTENT POWPROD -CONFIG STATIONARY -NDIMENS 2 -DIMENS 6 10 -GENLAB 'Foundation loads' -VARIAB 'Foundation Mx' 'Foundation My' 'Foundation Mz' 'Foundation Fx' 'Foundation Fy' 'Foundation Fz' -VARUNIT FL FL FL F F F -AXISLAB 'Time' -AXIUNIT T -AXIMETH 2 -MIN 0.00000000E+00 -STEP 0.50000001E-01 -NVARS 0 -ULOADS 0.193494E+07 0.223270E+08 0.949585E+05 0.286451E+06 -0.142810E+05 -0.109217E+07 - 0.155071E+07 0.233738E+08 0.145302E+06 0.303888E+06 -0.220653E+04 -0.109113E+07 - 0.158724E+07 0.238550E+08 0.161258E+06 0.324362E+06 -0.264157E+04 -0.109366E+07 - 0.189275E+07 0.222578E+08 0.151863E+06 0.278816E+06 -0.128840E+05 -0.108430E+07 - 0.176975E+07 0.226408E+08 0.177331E+06 0.292182E+06 -0.811495E+04 -0.108134E+07 - 0.167209E+07 0.233011E+08 0.661929E+05 0.310968E+06 -0.783274E+04 -0.108057E+07 - 0.158724E+07 0.238550E+08 0.161258E+06 0.324362E+06 -0.264157E+04 -0.109366E+07 - 0.189275E+07 0.222578E+08 0.151863E+06 0.278816E+06 -0.128840E+05 -0.108430E+07 - 0.155071E+07 0.233738E+08 0.145302E+06 0.303888E+06 -0.220653E+04 -0.109113E+07 - 0.193494E+07 0.223270E+08 0.949585E+05 0.286451E+06 -0.142810E+05 -0.109217E+07 - 0.167209E+07 0.233011E+08 0.661929E+05 0.310968E+06 -0.783274E+04 -0.108057E+07 - 0.158724E+07 0.238550E+08 0.161258E+06 0.324362E+06 -0.264157E+04 -0.109366E+07 -MAXTIME 0.000000E+00 0.450000E+00 0.100000E+00 0.450000E+00 0.400000E+00 0.250000E+00 -MINTIME 0.400000E+00 0.500000E-01 0.250000E+00 0.500000E-01 0.000000E+00 0.450000E+00 -MEAN 0.169918E+07 0.230306E+08 0.123107E+06 0.300845E+06 -0.717798E+04 -0.108548E+07 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.$55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.$55 deleted file mode 100644 index f350cb9799f84e79890c4f681c27dc1669711b70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmZQ%Kn09IE)$Xvhz|oWahMp4hRK6yWHA^UL^A_1NIwXJ_?%G84WxyDSP6(Vf!Gv? Q-GR6sh^v8^4Ty;W0CF?}3jhEB diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 deleted file mode 100644 index c16b84ea0d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/Bladed_out_binary_case2_fail.%55 +++ /dev/null @@ -1,17 +0,0 @@ -FILE demo_a_44.$55 -ACCESS D -FORM F -RECL 4 -FORMAT I*4 -CONTENT 'POWPROD' -CONFIG 'TABLE' -NDIMENS 2 -DIMENS 1 50 -GENLAB 'Step size distribution' -VARIAB 'Step size histogram' -VARUNIT N -AXISLAB 'Bin maximum time step' -AXIUNIT T -AXIMETH 3 -AXIVAL 1e-007 1.38038e-007 1.90546e-007 2.63027e-007 3.63078e-007 5.01187e-007 6.91831e-007 9.54993e-007 1.31826e-006 1.8197e-006 2.51189e-006 3.46737e-006 4.7863e-006 6.60693e-006 9.12011e-006 1.25893e-005 1.7378e-005 2.39883e-005 3.31131e-005 4.57088e-005 6.30957e-005 8.70964e-005 0.000120226 0.000165959 0.000229087 0.000316228 0.000436516 0.00060256 0.000831764 0.00114815 0.00158489 0.00218776 0.00301995 0.00416869 0.0057544 0.00794328 0.0109648 0.0151356 0.020893 0.0288403 0.0549541 0.0758578 0.104713 0.144544 0.199526 0.275423 0.380189 0.524807 0.724436 1 -NVARS 0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt deleted file mode 100644 index a6918724d1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVAutoCommentChar.txt +++ /dev/null @@ -1,21 +0,0 @@ -# string = -# -# -# Time [s] : seconds since the start of the simulation minus spin-up time -# Rotor_Speed [rpm] : wind-turbine rotor speed -# Power [W] : generator power -# Torque [N m] : generator torque -# Pitch [deg] : pitch angle of one blade -# My [N m] : out-of-plane moment at root of one blade -Time,My,Pitch,Power,Rotor_Speed,Torque -0.0,-999.0,-999.0,-999.0,-999.0,-999.0 -1.0,-999.0,-999.0,-999.0,-999.0,-999.0 -2.0,-999.0,-999.0,-999.0,-999.0,-999.0 -3.0,-999.0,-999.0,-999.0,-999.0,-999.0 -4.0,-999.0,-999.0,-999.0,-999.0,-999.0 -5.0,-999.0,-999.0,-999.0,-999.0,-999.0 -6.0,-999.0,-999.0,-999.0,-999.0,-999.0 -7.0,-999.0,-999.0,-999.0,-999.0,-999.0 -8.0,-999.0,-999.0,-999.0,-999.0,-999.0 -9.0,-999.0,-999.0,-999.0,-999.0,-999.0 -10.0,-999.0,-999.0,-999.0,-999.0,-999.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv deleted file mode 100644 index 0774a467de..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader.csv +++ /dev/null @@ -1,5 +0,0 @@ -! Comment -! ColA ColB ColC -! Comment -1 2 3 -4 5 6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv deleted file mode 100644 index e70491e596..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader2.csv +++ /dev/null @@ -1,3 +0,0 @@ -! ColA ColB ColC -1 2 3 -4 5 6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv deleted file mode 100644 index 8f974bb251..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVColInHeader3.csv +++ /dev/null @@ -1,3 +0,0 @@ -#ColA,ColB,ColC -1, 2, 3 -4, 5, 6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv deleted file mode 100644 index 35ea236015..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVComma.csv +++ /dev/null @@ -1,5 +0,0 @@ -ColA,ColB -1,4 -2,9 -3,6 -4,6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv deleted file mode 100644 index 7690b483c4..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVDateNaN.csv +++ /dev/null @@ -1,12 +0,0 @@ -time,strainLP_B1Avg -NaT,NaN -NaT,NaN -NaT,NaN -26-Apr-2017 16:07:29,1.809 -26-Apr-2017 16:18:29,20.12 -26-Apr-2017 16:19:29,15.04 -26-Apr-2017 16:27:29,25.35 -26-Apr-2017 16:31:29,19.08 -26-Apr-2017 16:32:29,13.33 -26-Apr-2017 16:33:29,11.38 -26-Apr-2017 16:34:29,3.674 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv deleted file mode 100644 index aeb1246576..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVNoHeader.csv +++ /dev/null @@ -1,4 +0,0 @@ -1,4 -2,9 -3,6 -4,6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv deleted file mode 100644 index 404e2fbab1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSemi.csv +++ /dev/null @@ -1,4 +0,0 @@ -ColA;ColB -1;4 -2;8 -3;6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv deleted file mode 100644 index f2e6f3d873..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVSpace_ExtraCol.csv +++ /dev/null @@ -1,6 +0,0 @@ -WS WHav WPmin(avgWH) WPmax(avgWH) (psp) - 0.00 13.800 18.515 15.923 - 1.40 14.000 18.516 18.923 - 2.80 14.800 18.517 12.923 - 4.20 16.200 18.518 13.923 - 5.60 16.800 18.519 14.923 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv deleted file mode 100644 index 7454157149..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTab.csv +++ /dev/null @@ -1,6 +0,0 @@ -WS RPM -4. 21.25 -5. 26.47 -6. 31.75 -7. 37.03 -8. 40.98 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt deleted file mode 100644 index 259a2f2158..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVTwoLinesHeaders.txt +++ /dev/null @@ -1,18 +0,0 @@ -############################################################################### -# IEA Wind Task 31 "WakeBench" Example file -############################################################################### -Time,RootMyb1,PtchPMzc1,GenPwr,RtSpeed,GenTq -(s),(kN m),(deg),(kW),(rpm),(kN m) -0.0000,4.619e-01,1.666e+00,2.264e+02,4.381e+01,1.790e+00 -0.0050,2.101e+00,1.666e+00,1.962e+02,4.381e+01,1.551e+00 -0.0100,2.983e+00,1.666e+00,1.776e+02,4.379e+01,1.405e+00 -0.0150,4.537e+00,1.666e+00,1.598e+02,4.376e+01,1.265e+00 -0.0200,5.997e+00,1.666e+00,1.465e+02,4.373e+01,1.161e+00 -0.0250,8.306e+00,1.666e+00,1.352e+02,4.371e+01,1.072e+00 -0.0300,1.078e+01,1.666e+00,1.266e+02,4.369e+01,1.004e+00 -0.0350,1.846e+01,1.666e+00,1.207e+02,4.370e+01,9.569e-01 -0.0400,7.411e+00,1.666e+00,1.166e+02,4.367e+01,9.250e-01 -############################################################################### -# Please add more lines so that time series is long enough to provide -# converged results. -############################################################################### diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv deleted file mode 100644 index 1d026d3620..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/CSVxIsString.csv +++ /dev/null @@ -1,8 +0,0 @@ -#Label_[-], Motivation_[%] -Monday , 30.0 -Tuesday , 90.0 -Wednesday, 80.0 -Thursday , 50.0 -Friday , 10.0 -Saturday , 2.0 -Sunday , 1.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ExcelFile_OneSheet.xlsx b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ExcelFile_OneSheet.xlsx deleted file mode 100644 index 6beadf0f580ed18b705bcdab797ffd8f234c0a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11708 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.AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) - 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} - 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} - 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} -False TwrShadow – Calculate tower influence on wind based on downstream tower shadow? (flag) -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -====== Environmental Conditions =================================================================== - 1.225 AirDens - Air density (kg/m^3) - 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) - 335 SpdSound - Speed of sound (m/s) -====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] - 1 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] -True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] -True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] -true TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] -False AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] -False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] -0.0001 IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] - 100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] -====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] - 3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=GonzalezÂ’s variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] -====== Airfoil Information ========================================================================= - 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) - 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) - 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) - 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) - 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) - 8 NumAFfiles - Number of airfoil files used (-) -"Airfoils_AD15/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) -"Airfoils_AD15/Cylinder2.dat" -"Airfoils_AD15/DU40_A17.dat" -"Airfoils_AD15/DU35_A17.dat" -"Airfoils_AD15/DU30_A17.dat" -"Airfoils_AD15/DU25_A17.dat" -"Airfoils_AD15/DU21_A17.dat" -"Airfoils_AD15/NACA64_A17.dat" -====== Rotor/Blade Properties ===================================================================== -True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) -"TestCase_AD15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) -"TestCase_AD15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] -"TestCase_AD15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] - 11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -TwrElev TwrDiam TwrCd -(m) (m) (-) -1.0000000E+01 6.5000000E+00 1.0000000E+00 -1.7760000E+01 6.2400000E+00 1.0000000E+00 -2.5520000E+01 5.9700000E+00 1.0000000E+00 -3.3280000E+01 5.7100000E+00 1.0000000E+00 -4.1040000E+01 5.4500000E+00 1.0000000E+00 -4.8800000E+01 5.1800000E+00 1.0000000E+00 -5.6560000E+01 4.9200000E+00 1.0000000E+00 -6.4320000E+01 4.6600000E+00 1.0000000E+00 -7.2080000E+01 4.4000000E+00 1.0000000E+00 -7.9840000E+01 4.1300000E+00 1.0000000E+00 -8.7600000E+01 3.8700000E+00 1.0000000E+00 -====== Outputs ==================================================================================== -False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) - 3 NBlOuts - Number of blade node outputs [0 - 9] (-) - 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) - 0 NTwOuts - Number of tower node outputs [0 - 9] (-) - 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"RtAeroCp, RtAeroCt" -"RtSkew" -"B1N3Clrnc, B2N3Clrnc, B3N3Clrnc" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat deleted file mode 100644 index 8d6506fe9e..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arf_multitabs.dat +++ /dev/null @@ -1,146 +0,0 @@ -! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- -! DU25 airfoil with an aspect ratio of 17. Original -180 to 180deg Cl, Cd, and Cm versus AOA data taken from Appendix A of DOWEC document 10046_009.pdf (numerical values obtained from Koert Lindenburg of ECN). -! Cl and Cd values corrected for rotational stall delay and Cd values corrected using the Viterna method for 0 to 90deg AOA by Jason Jonkman using AirfoilPrep_v2p0.xls. -! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! -! ------------------------------------------------------------------------------ -"DEFAULT" InterpOrd - Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=1] -default RelThickness - The non-dimensional thickness of the airfoil (thickness/chord) [only used if UAMod=7] [default=0.2] (-) -1 NonDimArea - The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) -0 NumCoords - The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. -"unused" BL_file - The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. -2 NumTabs - Number of airfoil tables in this file. Each table must have lines for Re and Ctrl. -! ------------------------------------------------------------------------------ -! data for table 1 -! ------------------------------------------------------------------------------ -0.05 Re - Reynolds number in millions -0 UserProp - User property (control) setting -True InclUAdata - Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line -!........................................ --2.1039 alpha0 - 0-lift angle of attack, depends on airfoil. -12.3238 alpha1 - Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) --7.303 alpha2 - Angle of attack at f=0.7, (approximately the stall angle) for AOA1] -0 S2 - Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] -0 S3 - Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] -0 S4 - Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] -1.2824 Cn1 - Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. --0.48392 Cn2 - As Cn1 for negative AOAs. -"DEFAULT" St_sh - Strouhal's shedding frequency constant. [default = 0.19] -0.032848 Cd0 - 2D drag coefficient value at 0-lift. -0 Cm0 - 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] -0 k0 - Constant in the curve best-fit; = ( [ignored if UAMod<>1] -0 k1 - Constant in the curve best-fit. [ignored if UAMod<>1] -0 k2 - Constant in the curve best-fit. [ignored if UAMod<>1] -0 k3 - Constant in the curve best-fit. [ignored if UAMod<>1] -0 k1_hat - Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] -"DEFAULT" x_cp_bar - Constant in the expression of [ignored if UAMod<>1, default = 0.2] -"DEFAULT" UACutout - Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] -"DEFAULT" filtCutOff - Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5] -!........................................ -! Table of aerodynamics coefficients -23 NumAlf - Number of data lines in the following table -! Alpha Cl Cd -! (deg) (-) (-) --1.00000000e+01 -4.63300000e-01 1.92100000e-01 --9.00000000e+00 -4.51700000e-01 1.64500000e-01 --8.00000000e+00 -4.40200000e-01 1.38500000e-01 --7.00000000e+00 -4.17800000e-01 1.15500000e-01 --6.00000000e+00 -3.95500000e-01 9.38000000e-02 --5.00000000e+00 -2.95400000e-01 7.01000000e-02 --4.00000000e+00 -1.95300000e-01 4.67000000e-02 --3.00000000e+00 -9.23000000e-02 3.93000000e-02 --2.00000000e+00 1.07000000e-02 3.21000000e-02 --1.00000000e+00 1.10000000e-01 2.80000000e-02 - 0.00000000e+00 2.01100000e-01 2.40000000e-02 - 1.00000000e+00 3.07500000e-01 2.94000000e-02 - 2.00000000e+00 4.36600000e-01 3.87000000e-02 - 3.00000000e+00 6.04500000e-01 3.30000000e-02 - 4.00000000e+00 7.30600000e-01 3.20000000e-02 - 5.00000000e+00 8.25900000e-01 3.14000000e-02 - 6.00000000e+00 9.27700000e-01 3.15000000e-02 - 7.00000000e+00 1.01760000e+00 3.59000000e-02 - 8.00000000e+00 1.10180000e+00 4.31000000e-02 - 9.00000000e+00 1.17740000e+00 4.63000000e-02 - 1.00000000e+01 1.24710000e+00 5.04000000e-02 - 1.10000000e+01 1.30040000e+00 6.35000000e-02 - 1.20000000e+01 1.21610000e+00 1.07300000e-01 -! ------------------------------------------------------------------------------ -! data for table 2 -! ------------------------------------------------------------------------------ -0.06 Re - Reynolds number in millions -0 UserProp - User property (control) setting -True InclUAdata - Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line -!........................................ --2.3715 alpha0 - 0-lift angle of attack, depends on airfoil. -11.3643 alpha1 - Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) --6.5882 alpha2 - Angle of attack at f=0.7, (approximately the stall angle) for AOA1] -0 S2 - Constant in the f curve best-fit for AOA> alpha1; by definition it depends on the airfoil. [ignored if UAMod<>1] -0 S3 - Constant in the f curve best-fit for alpha2<=AOA< alpha0; by definition it depends on the airfoil. [ignored if UAMod<>1] -0 S4 - Constant in the f curve best-fit for AOA< alpha2; by definition it depends on the airfoil. [ignored if UAMod<>1] -1.3134 Cn1 - Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. --0.44413 Cn2 - As Cn1 for negative AOAs. -"DEFAULT" St_sh - Strouhal's shedding frequency constant. [default = 0.19] -0.042829 Cd0 - 2D drag coefficient value at 0-lift. -0 Cm0 - 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] -0 k0 - Constant in the curve best-fit; = ( [ignored if UAMod<>1] -0 k1 - Constant in the curve best-fit. [ignored if UAMod<>1] -0 k2 - Constant in the curve best-fit. [ignored if UAMod<>1] -0 k3 - Constant in the curve best-fit. [ignored if UAMod<>1] -0 k1_hat - Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] -"DEFAULT" x_cp_bar - Constant in the expression of [ignored if UAMod<>1, default = 0.2] -"DEFAULT" UACutout - Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] -"DEFAULT" filtCutOff - Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5] -!........................................ -! Table of aerodynamics coefficients -24 NumAlf - Number of data lines in the following table -! Alpha Cl Cd -! (deg) (-) (-) --8.00000000e+00 -4.03100000e-01 1.47000000e-01 --7.00000000e+00 -3.91200000e-01 1.20800000e-01 --6.00000000e+00 -3.79100000e-01 9.55000000e-02 --5.00000000e+00 -2.80300000e-01 7.56000000e-02 --4.00000000e+00 -1.73600000e-01 5.28000000e-02 --3.00000000e+00 -6.70000000e-02 4.66000000e-02 --2.00000000e+00 3.96000000e-02 4.06000000e-02 --1.00000000e+00 1.41300000e-01 4.01000000e-02 - 0.00000000e+00 2.43100000e-01 3.98000000e-02 - 1.00000000e+00 3.61600000e-01 4.11000000e-02 - 2.00000000e+00 5.31200000e-01 4.37000000e-02 - 3.00000000e+00 6.49600000e-01 4.01000000e-02 - 4.00000000e+00 7.59200000e-01 3.84000000e-02 - 5.00000000e+00 8.57200000e-01 3.66000000e-02 - 6.00000000e+00 9.47800000e-01 3.67000000e-02 - 7.00000000e+00 1.03400000e+00 3.90000000e-02 - 8.00000000e+00 1.11910000e+00 4.55000000e-02 - 9.00000000e+00 1.19660000e+00 4.97000000e-02 - 1.00000000e+01 1.27230000e+00 5.86000000e-02 - 1.10000000e+01 1.33120000e+00 7.79000000e-02 - 1.20000000e+01 1.20600000e+00 1.82900000e-01 - 1.30000000e+01 1.20490000e+00 1.96000000e-01 - 1.40000000e+01 1.04570000e+00 2.95400000e-01 - 1.50000000e+01 1.06950000e+00 3.19300000e-01 \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat deleted file mode 100644 index 442a89c986..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl.dat +++ /dev/null @@ -1,83 +0,0 @@ -! ------------ AirfoilInfo v1.01.x Input File ---------------------------------- -! AD_63-224 airfoil -! -! note that this file uses Marshall -! --------------------------------- -"DEFAULT" InterpOrd ! I - 1 NonDimArea ! T -@"63-224.txt" NumCoords ! T - 1 NumTabs ! N -! --------------------------------- -! data for table 1 -! --------------------------------- - 2 Re ! R - 0 Ctrl ! C -True InclUAdata ! I -!.................................. - -2.6501 alpha0 ! 0 - 15 alpha1 ! A - -15 alpha2 ! A - 1 eta_e ! R - 6.9763 C_nalpha ! S -"Default" T_f0 ! I -"Default" T_V0 ! I -"Default" T_p ! B -"Default" T_VL ! I -"Default" b1 ! C -"Default" b2 ! C -"Default" b5 ! C -"Default" A1 ! C -"Default" A2 ! C -"Default" A5 ! C - 0 S1 ! C - 0 S2 ! C - 0 S3 ! C - 0 S4 ! C - 1.4356 Cn1 ! C - -0.75848 Cn2 ! A - 0.19 St_sh ! S - 0.0066863 Cd0 ! 2 - -0.03419 Cm0 ! 2 - 0 k0 ! C - 0 k1 ! C - 0 k2 ! C - 0 k3 ! C - 0 k1_hat ! C -"Default" x_cp_bar ! C -"Default" UACutout ! A -"DEFAULT" filtCutOff ! C -!........................................ -! Table of aerodynamics coefficients - 30 NumAlf ! N -! Alpha Cl Cd Cm -! (deg) (-) (-) (-) - -5 -0.4298 0.00693 -0.0262 - -4 -0.30923 0.00678 -0.02835 - -3 -0.1877 0.00668 -0.0306 - -2 -0.0657 0.00663 -0.0329 - -1 0.0563 0.00662 -0.0353 - 0 0.1783 0.00665 -0.0376 - 1 0.3001 0.00671 -0.0399 - 4 0.6622 0.00711 -0.0465 - 5 0.7809 0.00734 -0.0484 - 6 0.89762 0.00763 -0.04997 - 7 1.0092 0.00811 -0.0508 - 8 1.1098 0.00898 -0.05 - 9 1.1819 0.01047 -0.0447 - 10 1.2074 0.01311 -0.0333 - 11 1.224 0.01756 -0.0244 - 12 1.2494 0.02249 -0.0185 - 13 1.2654 0.02877 -0.0136 - 14 1.2793 0.03616 -0.0103 - 15 1.2906 0.04462 -0.0085 - 16 1.2815 0.05536 -0.01498 - 17 1.2532 0.06833 -0.02929 - 18 1.2126 0.08304 -0.0485 - 20 1.1232 0.11579 -0.08995 - 21 1.0872 0.13296 -0.10692 - 22 1.0591 0.15047 -0.12049 - 23 1.038 0.16834 -0.13111 - 24 1.0228 0.18659 -0.13922 - 25 1.0125 0.20524 -0.14529 - 26 1.0059 0.22432 -0.14975 - 30 0.99665 0.30537 -0.16066 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat deleted file mode 100644 index b79e649d7f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_arfl0.dat +++ /dev/null @@ -1,66 +0,0 @@ -! ------------ AirfoilInfo v1.01.x -! TailPlate.dat. Lift and drag on d -! Oct. 14, 2003, Foilchecked by Win -! note that this file uses Marshall -! --------------------------------- -"DEFAULT" InterpOrd ! I - 1 NonDimArea ! T - 0 NumCoords ! T -! ......... x-y coordinates are nex - 1 NumTabs ! N -! --------------------------------- -! data for table 1 -! --------------------------------- - 0.3 Re ! R - 0 Ctrl ! C -True InclUAdata ! I -!.................................. - -4.23 alpha0 ! 0 - 4 alpha1 ! A - -4 alpha2 ! A - 1 eta_e ! R - 2.71555 C_nalpha ! S -"Default" T_f0 ! I -"Default" T_V0 ! I -"Default" T_p ! B -"Default" T_VL ! I -"Default" b1 ! C -"Default" b2 ! C -"Default" b5 ! C -"Default" A1 ! C -"Default" A2 ! C -"Default" A5 ! C - 0 S1 ! C - 0 S2 ! C - 0 S3 ! C - 0 S4 ! C - 1.8588 Cn1 ! C - -0.8 Cn2 ! A -"Default" St_sh ! S - 0.01 Cd0 ! 2 - 0 Cm0 ! 2 - 0 k0 ! C - 0 k1 ! C - 0 k2 ! C - 0 k3 ! C - 0 k1_hat ! C -"Default" x_cp_bar ! C -"Default" UACutout ! A -"DEFAULT" filtCutOff ! C -!.................................. -! Table of aerodynamics coefficient - 11 NumAlf ! N -! Alpha Cl Cd -! (deg) (-) (-) - -180.00 0.000 0.1820 - -140.00 0.524 0.6353 - -100.00 0.147 1.1954 - -40.00 -0.524 0.6353 - 0.00 0.200 0.0100 - 16.00 0.861 0.2190 - 37.00 0.759 0.5800 - 70.00 0.407 1.1219 - 110.00 -0.285 1.1219 - 150.00 -0.431 0.4577 - 180.00 0.000 0.1820 - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat deleted file mode 100644 index 39ab5114ad..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_bld.dat +++ /dev/null @@ -1,26 +0,0 @@ -------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- -NREL 5.0 MW offshore baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file -====== Blade Properties ================================================================= - 19 NumBlNds - Number of blade nodes used in the analysis (-) - BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID - (m) (m) (m) (deg) (deg) (m) (-) -0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 -1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 -4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 -6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 -1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 -1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 -1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 -2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 -2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 -3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 -3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 -3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 -4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 -4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 -5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 -5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 -5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 -6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 -6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat deleted file mode 100644 index df4e6406cc..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_latin.dat +++ /dev/null @@ -1,73 +0,0 @@ -------- AERODYN v15.03.* INPUT FILE ------------------------------------------------ -NREL 5.0 MW offshore baseline aerodynamic input properties. -====== General Options ============================================================================ -False Echo - Echo the input to ".AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) - 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} - 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} - 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} -False TwrShadow – Calculate tower influence on wind based on downstream tower shadow? (flag) -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -====== Environmental Conditions =================================================================== - 1.225 AirDens - Air density (kg/m^3) - 1.464E-05 KinVisc - Kinematic air viscosity (m^2/s) - 335 SpdSound - Speed of sound (m/s) -====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] - 1 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] -True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] -True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] -true TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] -False AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] -False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] -0.0001 IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] - 100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] -====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] - 3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez’s variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] -====== Airfoil Information ========================================================================= - 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) - 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) - 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) - 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) - 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) - 8 NumAFfiles - Number of airfoil files used (-) -"Airfoils_AD15/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) -"Airfoils_AD15/Cylinder2.dat" -"Airfoils_AD15/DU40_A17.dat" -"Airfoils_AD15/DU35_A17.dat" -"Airfoils_AD15/DU30_A17.dat" -"Airfoils_AD15/DU25_A17.dat" -"Airfoils_AD15/DU21_A17.dat" -"Airfoils_AD15/NACA64_A17.dat" -====== Rotor/Blade Properties ===================================================================== -True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) -"TestCase_AD15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) -"TestCase_AD15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] -"TestCase_AD15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] - 11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -TwrElev TwrDiam TwrCd -(m) (m) (-) -1.0000000E+01 6.5000000E+00 1.0000000E+00 -1.7760000E+01 6.2400000E+00 1.0000000E+00 -2.5520000E+01 5.9700000E+00 1.0000000E+00 -3.3280000E+01 5.7100000E+00 1.0000000E+00 -4.1040000E+01 5.4500000E+00 1.0000000E+00 -4.8800000E+01 5.1800000E+00 1.0000000E+00 -5.6560000E+01 4.9200000E+00 1.0000000E+00 -6.4320000E+01 4.6600000E+00 1.0000000E+00 -7.2080000E+01 4.4000000E+00 1.0000000E+00 -7.9840000E+01 4.1300000E+00 1.0000000E+00 -8.7600000E+01 3.8700000E+00 1.0000000E+00 -====== Outputs ==================================================================================== -False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) - 3 NBlOuts - Number of blade node outputs [0 - 9] (-) - 1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) - 0 NTwOuts - Number of tower node outputs [0 - 9] (-) - 1, 2, 6 TwOutNd - Tower nodes whose values will be output (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"RtAeroCp, RtAeroCt" -"RtSkew" -"B1N3Clrnc, B2N3Clrnc, B3N3Clrnc" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat deleted file mode 100644 index 81d3da19ba..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD15_of34.dat +++ /dev/null @@ -1,123 +0,0 @@ -------- AERODYN v15 for OpenFAST INPUT FILE ----------------------------------------------- -NREL 5.0 MW offshore baseline aerodynamic input properties. -====== General Options ============================================================================ -False Echo - Echo the input to ".AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) - 2 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] - 2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] - 1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} - 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] -False Buoyancy - Include buoyancy effects? (flag) -False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] -"unused" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] -====== Environmental Conditions =================================================================== -"default" AirDens - Air density (kg/m^3) -"default" KinVisc - Kinematic viscosity of working fluid (m^2/s) -"default" SpdSound - Speed of sound in working fluid (m/s) -"default" Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] -"default" Pvap - Vapour pressure of working fluid (Pa) [used only when CavitCheck=True] -====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] - 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] -"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] -True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] -True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] -True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] -True AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] -True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] -"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] - 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] -====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] - 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-) [used only when WakeMod=2] - 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1 or 3] -====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] -"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] -====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] - 3 UAMod - Unsteady Aero Model Switch (switch) {2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L 5 states, 6=Oye, 7=Boeing-Vertol} [used only when AFAeroMod=2] -True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] -0.15 UAStartRad - Starting radius for dynamic stall (fraction of rotor radius) [used only when AFAeroMod=2] -1.0 UAEndRad - Ending radius for dynamic stall (fraction of rotor radius) [used only when AFAeroMod=2] -====== Airfoil Information ========================================================================= - 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) - 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) - 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) - 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) - 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) - 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) - 8 NumAFfiles - Number of airfoil files used (-) -"../5MW_Baseline/Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) -"../5MW_Baseline/Airfoils/Cylinder2.dat" -"../5MW_Baseline/Airfoils/DU40_A17.dat" -"../5MW_Baseline/Airfoils/DU35_A17.dat" -"../5MW_Baseline/Airfoils/DU30_A17.dat" -"../5MW_Baseline/Airfoils/DU25_A17.dat" -"../5MW_Baseline/Airfoils/DU21_A17.dat" -"../5MW_Baseline/Airfoils/NACA64_A17.dat" -====== Rotor/Blade Properties ===================================================================== -True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) -"../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) -"../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] -"../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Hub Properties ============================================================================== [used only when Buoyancy=True] -0.0 VolHub - Hub volume (m^3) -0.0 HubCenBx - Hub center of buoyancy x direction offset (m) -====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] -0.0 VolNac - Nacelle volume (m^3) -0,0,0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) -====== Tail fin Aerodynamics ======================================================================== -False TFinAero - Calculate tail fin aerodynamics model (flag) -"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] -====== Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] - 12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] -TwrElev TwrDiam TwrCd TwrTI TwrCb !TwrTI used only with TwrShadow=2, TwrCb used only with Buoyancy=True -(m) (m) (-) (-) (-) -0.0000000E+00 6.0000000E+00 1.0000000E+00 1.0000000E-01 0.0 -8.5261000E+00 5.7870000E+00 1.0000000E+00 1.0000000E-01 0.0 -1.7053000E+01 5.5740000E+00 1.0000000E+00 1.0000000E-01 0.0 -2.5579000E+01 5.3610000E+00 1.0000000E+00 1.0000000E-01 0.0 -3.4105000E+01 5.1480000E+00 1.0000000E+00 1.0000000E-01 0.0 -4.2633000E+01 4.9350000E+00 1.0000000E+00 1.0000000E-01 0.0 -5.1158000E+01 4.7220000E+00 1.0000000E+00 1.0000000E-01 0.0 -5.9685000E+01 4.5090000E+00 1.0000000E+00 1.0000000E-01 0.0 -6.8211000E+01 4.2960000E+00 1.0000000E+00 1.0000000E-01 0.0 -7.6738000E+01 4.0830000E+00 1.0000000E+00 1.0000000E-01 0.0 -8.5268000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0 -8.7600000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0 -====== Outputs ==================================================================================== -False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) - 0 NBlOuts - Number of blade node outputs [0 - 9] (-) - 1, BlOutNd - Blade nodes whose values will be output (-) - 0 NTwOuts - Number of tower node outputs [0 - 9] (-) - 1, TwOutNd - Tower nodes whose values will be output (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -RtSpeed -RtTSR -RtVAvgxh -RtVAvgyh -RtVAvgzh -RtSkew -RtAeroFxh -RtAeroFyh -RtAeroFzh -RtAeroMxh -RtAeroMyh -RtAeroMzh -RtAeroPwr -RtArea -RtAeroCp -RtAeroCq -RtAeroCt -B1N3Clrnc, B2N3Clrnc, B3N3Clrnc -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) -====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section] - 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) - "All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) - OutListAD - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"Fx" -"Fy" -"alpha" -"Cl" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) ---------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat deleted file mode 100644 index 6a03df51ee..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_F7.dat +++ /dev/null @@ -1,45 +0,0 @@ -SNL SWiFT V27 AeroDyn Input File, version 2.0, created on 16-October-2018 -SI SysUnits - System of units for used for input and output [must be SI for FAST] (unquoted string) -BEDDOES StallMod - Dynamic stall included [BEDDOES or STEADY] (unquoted string) -USE_CM UseCm - Use aerodynamic pitching moment model? [USE_CM or NO_CM] (unquoted string) -EQUIL InfModel - Inflow model [DYNIN or EQUIL] (unquoted string) -SWIRL IndModel - Induction-factor model [NONE or WAKE or SWIRL] (unquoted string) -0.005 AToler - Induction-factor tolerance (convergence criteria) (-) -PRANDtl TLModel - Tip-loss model (EQUIL only) [PRANDtl, GTECH, or NONE] (unquoted string) -PRANDtl HLModel - Hub-loss model (EQUIL only) [PRANdtl or NONE] (unquoted string) -"Wind/StepWindSweep_m1mps.wnd" WindFile - Name of file containing wind data (quoted string) -32.1 HH - Wind reference (hub) height [TowerHt+Twr2Shft+OverHang*SIN(ShftTilt)] (m) -0.3 TwrShad - Tower-shadow velocity deficit (-) -1 ShadHWid - Tower-shadow half width (m) -1.87542 T_Shad_Refpt - Tower-shadow reference point (m) -1.064032027823 Rho - Average Air density at SWiFT(kg/m^3) -1.5e-05 KinVisc - Kinematic air viscosity [CURRENTLY IGNORED] (m^2/sec) -0.005 DTAero - Time interval for aerodynamic calculations (sec) -5 NumFoil - Number of airfoil files (-) -"AeroData\AD_1_cylinder.dat" FoilNm - Names of the airfoil files [NumFoil lines] (quoted strings) -"AeroData\AD_2_63-235_mod.dat" -"AeroData\AD_3_63-224_mod.dat" -"AeroData\AD_4_63-218_mod.dat" -"AeroData\AD_5_63-214_mod.dat" -20 BldNodes - Number of blade nodes used for analysis (-) -RNodes AeroTwst DRNodes Chord NFoil PrnElm - 0.82500 13.9573 0.65000 0.589 1 PRINT - 1.47500 13.0025 0.65000 0.979 2 PRINT - 2.12500 12.0596 0.65000 1.2728 2 PRINT - 2.77500 11.1288 0.65000 1.2276 2 PRINT - 3.42500 10.2102 0.65000 1.1823 2 PRINT - 4.07500 9.3046 0.65000 1.1368 3 PRINT - 4.72500 8.3928 0.65000 1.091 3 PRINT - 5.37500 7.4834 0.65000 1.045 3 PRINT - 6.02500 6.6249 0.65000 0.999 3 PRINT - 6.67500 5.8527 0.65000 0.953 3 PRINT - 7.32500 5.1189 0.65000 0.9072 3 PRINT - 7.97500 4.4182 0.65000 0.8614 3 PRINT - 8.62500 3.7563 0.65000 0.8155 4 PRINT - 9.27500 3.1393 0.65000 0.7694 4 PRINT - 9.92500 2.5731 0.65000 0.7231 4 PRINT -10.57500 2.0579 0.65000 0.6764 4 PRINT -11.22500 1.5793 0.65000 0.6295 4 PRINT -11.87500 1.1394 0.65000 0.5823 4 PRINT -12.52500 0.7418 0.65000 0.5348 5 PRINT -13.17500 0.3900 0.65000 0.4871 5 PRINT diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat deleted file mode 100644 index 34b5052a79..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_AD_twr.dat +++ /dev/null @@ -1,40 +0,0 @@ -NREL 5.0 MW baseline land-based aerodynamic tower CD input properties. -Used with AeroDyn 13.00.00 hidden tower influence feature. - 12 NTwrHt - Number of tower input height stations listed (-) - 16 NTwrRe - Number of tower Re values (-) - 1 NTwrCD - Number of tower CD columns (-) Note: For current versions, this MUST be 1. - 0.0 Tower_Wake_Constant - Tower wake constant (-) {0.0: full potential flow, 0.1: Bak model} ----------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- -TwrHtFr TwrWid NTwrCDCol -0.00000 6.000 1 -0.09733 5.787 1 -0.19467 5.574 1 -0.29200 5.361 1 -0.38933 5.148 1 -0.48667 4.935 1 -0.58400 4.722 1 -0.68133 4.509 1 -0.77867 4.296 1 -0.87600 4.083 1 -0.97333 3.870 1 -1.00000 3.870 1 ----------------------- Re v CD PROPERTIES -------------------------------------- -TwrRe TwrCD1 - 0.010 1.11 - 0.020 1.20 - 0.122 1.20 - 0.200 1.17 - 0.300 0.90 - 0.400 0.54 - 0.500 0.31 - 1.000 0.38 - 1.500 0.46 - 2.000 0.53 - 2.500 0.57 - 3.000 0.61 - 3.500 0.64 - 4.000 0.67 - 5.000 0.70 -10.000 0.70 - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat deleted file mode 100644 index 3e26e51d29..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD.dat +++ /dev/null @@ -1,88 +0,0 @@ ---------- BEAMDYN V1.01.* INPUT FILE ------------------------------------------- -NREL 5MW blade ----------------------- SIMULATION CONTROL -------------------------------------- -False Echo - Echo input data to ".ech" (flag) -2 analysis_type - 1: Static analysis; 2: Dynamic analysis -0.0 rhoinf - Numerical Damping Parameter for Generalized-alpha integrator -2 quadrature - 1: Gauss; 2: Trapezoidal -DEFAULT refine - Refinement factor for quadrature 2. DEFAULT = 1 -DEFAULT n_fact - Factorization frequency: The Jacobian is computed every n_fact steps in N-R iteration. DEFAULT = 5 -DEFAULT DTBeam - Time step size -DEFAULT NRMax - Max number of iterations in Newton-Ralphson algorithm -DEFAULT stop_tol - Tolerance for stopping criterion ----------------------- GEOMETRY PARAMETER -------------------------------------- -1 member_total - Total number of member (-) -49 kp_total - Total number of key point (-) -1 49 - Member number; Number of key points in this member - kp_xr kp_yr kp_zr initial_twist - (m) (m) (m) (deg) - 0.000000 0.000000 0.000000 13.308000 - 0.000000 0.000000 0.199875 13.308000 - 0.000000 0.000000 1.199865 13.308000 - 0.000000 0.000000 2.199855 13.308000 - 0.000000 0.000000 3.199845 13.308000 - 0.000000 0.000000 4.199835 13.308000 - 0.000000 0.000000 5.199825 13.308000 - 0.000000 0.000000 6.199815 13.308000 - 0.000000 0.000000 7.199805 13.308000 - 0.000000 0.000000 8.201025 13.308000 - 0.000000 0.000000 9.199785 13.308000 - 0.000000 0.000000 10.199775 13.308000 - 0.000000 0.000000 11.199765 13.181000 - 0.000000 0.000000 12.199755 12.848000 - 0.000000 0.000000 13.200975 12.192000 - 0.000000 0.000000 14.199735 11.561000 - 0.000000 0.000000 15.199725 11.072000 - 0.000000 0.000000 16.199715 10.792000 - 0.000000 0.000000 18.200925 10.232000 - 0.000000 0.000000 20.200290 9.672000 - 0.000000 0.000000 22.200270 9.110000 - 0.000000 0.000000 24.200250 8.534000 - 0.000000 0.000000 26.200230 7.932000 - 0.000000 0.000000 28.200825 7.321000 - 0.000000 0.000000 30.200190 6.711000 - 0.000000 0.000000 32.200170 6.122000 - 0.000000 0.000000 34.200150 5.546000 - 0.000000 0.000000 36.200130 4.971000 - 0.000000 0.000000 38.200725 4.401000 - 0.000000 0.000000 40.200090 3.834000 - 0.000000 0.000000 42.200070 3.332000 - 0.000000 0.000000 44.200050 2.890000 - 0.000000 0.000000 46.200030 2.503000 - 0.000000 0.000000 48.201240 2.116000 - 0.000000 0.000000 50.199990 1.730000 - 0.000000 0.000000 52.199970 1.342000 - 0.000000 0.000000 54.199950 0.954000 - 0.000000 0.000000 55.199940 0.760000 - 0.000000 0.000000 56.199930 0.574000 - 0.000000 0.000000 57.199920 0.404000 - 0.000000 0.000000 57.699915 0.319000 - 0.000000 0.000000 58.201140 0.253000 - 0.000000 0.000000 58.699905 0.216000 - 0.000000 0.000000 59.199900 0.178000 - 0.000000 0.000000 59.699895 0.140000 - 0.000000 0.000000 60.199890 0.101000 - 0.000000 0.000000 60.699885 0.062000 - 0.000000 0.000000 61.199880 0.023000 - 0.000000 0.000000 61.500000 0.000000 ----------------------- MESH PARAMETER ------------------------------------------ -5 order_elem - Order of interpolation (basis) function (-) ----------------------- MATERIAL PARAMETER -------------------------------------- -"TestCase_BD_Blade.dat" BldFile - Name of file containing properties for blade ----------------------- PITCH ACTUATOR PARAMETERS ------------------------------- -False UsePitchAct - Whether a pitch actuator should be used (flag) -200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] -2.0E+7 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] -5.0E+5 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] ----------------------- OUTPUTS ------------------------------------------------- -True SumPrint - Print summary data to ".sum" (flag) -"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) - 0 NNodeOuts - Number of nodes to output to file [0 - 9] (-) - 1,2,3,4,5,6 OutNd - Nodes whose values will be output (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"RootFxr, RootFyr, RootFzr" -"RootMxr, RootMyr, RootMzr" -"TipTDxr, TipTDyr, TipTDzr" -"TipRDxr, TipRDyr, TipRDzr" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) --------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat deleted file mode 100644 index 48b57921ad..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld.dat +++ /dev/null @@ -1,41 +0,0 @@ -------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- -! Constant property beam Tube - ---------------------- BLADE PARAMETERS -------------------------------------- -2 station_total - Number of blade input stations (-) -1 damp_type - Damping type (switch): 0: no damping; 1: viscous damping - ---------------------- DAMPING COEFFICIENT------------------------------------ -mu1 mu2 mu3 mu4 mu5 mu6 -(s) (s) (s) (s) (s) (s) - 1.00000000e-02 1.00000000e-02 1.00000000e-02 1.00000000e-02 1.00000000e-02 1.00000000e-02 - ---------------------- DISTRIBUTED PROPERTIES--------------------------------- -0.000000 - 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000000E+07 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 8.0000000000000000E+04 - - 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 -0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 - 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000001E-01 - -1.000000 - 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 1.8000000000000000E+08 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000000E+07 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5000000000000000E+04 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 8.0000000000000000E+04 - - 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 -5.9999999999999998E-01 - 0.0000000000000000E+00 0.0000000000000000E+00 1.2000000000000000E+00 0.0000000000000000E+00 5.9999999999999998E-01 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 0.0000000000000000E+00 - 0.0000000000000000E+00 0.0000000000000000E+00 5.9999999999999998E-01 0.0000000000000000E+00 1.0000000000000001E-01 0.0000000000000000E+00 - 0.0000000000000000E+00 -5.9999999999999998E-01 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 2.0000000000000001E-01 - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat deleted file mode 100644 index c35db60150..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_BD_bld_2.dat +++ /dev/null @@ -1,39 +0,0 @@ -------- BEAMDYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- -Generated with AeroElasticSE FAST driver ----------------------- BLADE PARAMETERS -------------------------------------- -2 station_total - Number of blade input stations (-) -1 damp_type - Damping type: 0: no damping; 1: damped ----------------------- DAMPING COEFFICIENT------------------------------------ - mu1 mu2 mu3 mu4 mu5 mu6 - (-) (-) (-) (-) (-) (-) - 0.019500 0.019500 0.019500 0.019500 0.019500 0.019500 ----------------------- DISTRIBUTED PROPERTIES--------------------------------- - 0.000000000000000e+00 - 4.675405354157458e+09 2.141174291516585e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 5.727890365279171e+02 - 2.141003810433669e+00 4.675404402613968e+09 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -1.093836309565273e+01 - 0.000000000000000e+00 0.000000000000000e+00 3.191359698380162e+10 -4.213485635770499e+03 2.647091687341770e+01 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 -4.213486360843161e+03 7.787974481210252e+10 6.634230697213651e+01 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 2.647084393975569e+01 6.634218583660905e+01 7.787975917895717e+10 0.000000000000000e+00 - 5.727890373663506e+02 -1.093836352888245e+01 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 4.560397377220657e+10 - - 2.171182764288985e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 2.861477454511874e-04 - 0.000000000000000e+00 2.171182764288985e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -1.962304917357957e-06 - 0.000000000000000e+00 0.000000000000000e+00 2.171182764288985e+03 -2.861477454511874e-04 1.962304917357957e-06 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 -2.861477454511874e-04 5.299669523418404e+03 4.413285872059084e-06 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 1.962304917357957e-06 4.413285872059084e-06 5.299670502957943e+03 0.000000000000000e+00 - 2.861477454511874e-04 -1.962304917357957e-06 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.059934002637635e+04 - - 1.000000000000000e+00 - 3.220939681303522e+09 -1.285051655727086e+07 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -1.196574798525166e+08 --1.285051655711221e+07 3.759525506239275e+09 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 2.003716165818856e+07 - 0.000000000000000e+00 0.000000000000000e+00 2.527665824401771e+10 1.142297845427679e+09 -1.221175225663117e+08 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 1.142297845427751e+09 5.670123248328276e+10 -1.798161923977985e+09 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 -1.221175225651547e+08 -1.798161923978496e+09 5.393504238512602e+10 0.000000000000000e+00 --1.196574798525334e+08 2.003716165818229e+07 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 3.052759169122894e+10 - - 1.636551490280465e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 -7.782570323211117e+01 - 0.000000000000000e+00 1.636551490280465e+03 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 8.087504299308899e+00 - 0.000000000000000e+00 0.000000000000000e+00 1.636551490280465e+03 7.782570323211117e+01 -8.087504299308899e+00 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 7.782570323211117e+01 3.826903356587678e+03 -2.204207304888940e+01 0.000000000000000e+00 - 0.000000000000000e+00 0.000000000000000e+00 -8.087504299308899e+00 -2.204207304888940e+01 3.363921293496516e+03 0.000000000000000e+00 --7.782570323211117e+01 8.087504299308899e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 7.190824650084201e+03 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat deleted file mode 100644 index 2cb5efeddd..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_Blade.dat +++ /dev/null @@ -1,29 +0,0 @@ -------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- -SNL SWiFT V27 baseline aerodynamic blade input properties -====== Blade Properties ================================================================= -22 20 NumBlNds - Number of blade nodes used in the analysis (-) - BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID - (m) (m) (m) (deg) (deg) (m) (-) - 0.0 0.0 0.0 0.0 13.9573 0.589 1 - 0.32500 0.0 0.0 0.0 13.9573 0.589 1 - 0.97500 0.0 0.0 0.0 13.0025 0.979 2 - 1.62500 0.0 0.0 0.0 12.0596 1.2728 2 - 2.27500 0.0 0.0 0.0 11.1288 1.2276 2 - 2.92500 0.0 0.0 0.0 10.2102 1.1823 2 - 3.57500 0.0 0.0 0.0 9.3046 1.1368 3 - 4.22500 0.0 0.0 0.0 8.3928 1.091 3 - 4.87500 0.0 0.0 0.0 7.4834 1.045 3 - 5.52500 0.0 0.0 0.0 6.6249 0.999 3 - 6.17500 0.0 0.0 0.0 5.8527 0.953 3 - 6.82500 0.0 0.0 0.0 5.1189 0.9072 3 - 7.47500 0.0 0.0 0.0 4.4182 0.8614 3 - 8.12500 0.0 0.0 0.0 3.7563 0.8155 4 - 8.77500 0.0 0.0 0.0 3.1393 0.7694 4 - 9.42500 0.0 0.0 0.0 2.5731 0.7231 4 -10.07500 0.0 0.0 0.0 2.0579 0.6764 4 -10.72500 0.0 0.0 0.0 1.5793 0.6295 4 -11.37500 0.0 0.0 0.0 1.1394 0.5823 4 -12.02500 0.0 0.0 0.0 0.7418 0.5348 5 -12.67500 0.0 0.0 0.0 0.3900 0.4871 5 -13.0 0.0 0.0 0.0 0.3900 0.4871 5 - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat deleted file mode 100644 index 8abcebb1a8..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED.dat +++ /dev/null @@ -1,128 +0,0 @@ -------- ELASTODYN v1.03.* INPUT FILE ------------------------------------------- -NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf) ----------------------- SIMULATION CONTROL -------------------------------------- -False Echo - Echo input data to ".ech" (flag) - 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) -"default" DT - Integration time step (s) ----------------------- ENVIRONMENTAL CONDITION --------------------------------- - 9.80665 Gravity - Gravitational acceleration (m/s^2) ----------------------- DEGREES OF FREEDOM -------------------------------------- -True FlapDOF1 - First flapwise blade mode DOF (flag) -True FlapDOF2 - Second flapwise blade mode DOF (flag) -True EdgeDOF - First edgewise blade mode DOF (flag) -False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] -True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) -True GenDOF - Generator DOF (flag) -True YawDOF - Yaw DOF (flag) -True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) -True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) -True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) -True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) -True PtfmSgDOF - Platform horizontal surge translation DOF (flag) -True PtfmSwDOF - Platform horizontal sway translation DOF (flag) -True PtfmHvDOF - Platform vertical heave translation DOF (flag) -True PtfmRDOF - Platform roll tilt rotation DOF (flag) -True PtfmPDOF - Platform pitch tilt rotation DOF (flag) -True PtfmYDOF - Platform yaw rotation DOF (flag) ----------------------- INITIAL CONDITIONS -------------------------------------- - 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) - 0 IPDefl - Initial in-plane blade-tip deflection (meters) - 0 BlPitch(1) - Blade 1 initial pitch (degrees) - 0 BlPitch(2) - Blade 2 initial pitch (degrees) - 0 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] - 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] - 0 Azimuth - Initial azimuth angle for blade 1 (degrees) - 0.2 RotSpeed - Initial or fixed rotor speed (rpm) - 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) - 0 TTDspFA - Initial fore-aft tower-top displacement (meters) - 0 TTDspSS - Initial side-to-side tower-top displacement (meters) - 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) - 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) - 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) - 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) - 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) - 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees) ----------------------- TURBINE CONFIGURATION ----------------------------------- - 3 NumBl - Number of blades (-) - 63 TipRad - The distance from the rotor apex to the blade tip (meters) - 1.5 HubRad - The distance from the rotor apex to the blade root (meters) - -2.5 PreCone(1) - Blade 1 cone angle (degrees) - -2.5 PreCone(2) - Blade 2 cone angle (degrees) - -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] - 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) - 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] - 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] - 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) - -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) - 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) - -5 ShftTilt - Rotor shaft tilt angle (degrees) - 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) - 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) - 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) - -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) - 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) - 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) - 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) - 87.6 TowerHt - Height of tower above ground level [onshore] or MSL [offshore] (meters) - 10 TowerBsHt - Height of tower base above ground level [onshore] or MSL [offshore] (meters) - 0 PtfmCMxt - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) - 0 PtfmCMyt - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) - -89.9155 PtfmCMzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters) - -0 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) ----------------------- MASS AND INERTIA ---------------------------------------- - 0 TipMass(1) - Tip-brake mass, blade 1 (kg) - 0 TipMass(2) - Tip-brake mass, blade 2 (kg) - 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] - 56780 HubMass - Hub mass (kg) - 115926 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2) - 534.116 GenIner - Generator inertia about HSS (kg m^2) - 240000 NacMass - Nacelle mass (kg) -2.60789E+06 NacYIner - Nacelle inertia about yaw axis (kg m^2) - 0 YawBrMass - Yaw bearing mass (kg) -7.46633E+06 PtfmMass - Platform mass (kg) -4.22923E+09 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) -4.22923E+09 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) - 1.6423E+08 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) ----------------------- BLADE --------------------------------------------------- - 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) -"TestCase_ED_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) -"TestCase_ED_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) -"TestCase_ED_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] ----------------------- ROTOR-TEETER -------------------------------------------- - 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] - 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] - 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] - 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] - 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] - 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] - 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] - 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] ----------------------- DRIVETRAIN ---------------------------------------------- - 100 GBoxEff - Gearbox efficiency (%) - 97 GBRatio - Gearbox ratio (-) -8.67637E+08 DTTorSpr - Drivetrain torsional spring (N-m/rad) - 6.215E+06 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) ----------------------- FURLING ------------------------------------------------- -False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) -"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] ----------------------- TOWER --------------------------------------------------- - 20 TwrNodes - Number of tower nodes used for analysis (-) -"TestCase_ED_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) ----------------------- OUTPUT -------------------------------------------------- -False SumPrint - Print summary data to ".sum" (flag) - 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) -True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) -"ES10.3E2" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) - 30 TStart - Time to begin tabular output (s) (currently unused) - 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) - 1 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) - 10 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] - 1 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) - 9 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"BldPitch1" - Pitch angles for blades 1, 2, and 3 -"BldPitch2" - Pitch angles for blades 1, 2, and 3 -"BldPitch3" - Pitch angles for blades 1, 2, and 3 -"TwrBsMyt" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) ---------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat deleted file mode 100644 index df75ee2e18..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld.dat +++ /dev/null @@ -1,81 +0,0 @@ -------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- -NREL 5.0 MW offshore baseline blade input properties. ----------------------- BLADE PARAMETERS ---------------------------------------- - 49 NBlInpSt - Number of blade input stations (-) - 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) - 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) - 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) ----------------------- BLADE ADJUSTMENT FACTORS -------------------------------- - 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) - 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) - 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AD15=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) - 1 AdjFlSt - Factor to adjust blade flap stiffness (-) - 1 AdjEdSt - Factor to adjust blade edge stiffness (-) ----------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- - BlFract PitchAxis StrcTwst BMassDen FlpStff EdgStff - (-) (-) (deg) (kg/m) (Nm^2) (Nm^2) -0.0000000E+00 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 -3.2500000E-03 2.5000000E-01 1.3308000E+01 6.7893500E+02 1.8110000E+10 1.8113600E+10 -1.9510000E-02 2.5049000E-01 1.3308000E+01 7.7336300E+02 1.9424900E+10 1.9558600E+10 -3.5770000E-02 2.5490000E-01 1.3308000E+01 7.4055000E+02 1.7455900E+10 1.9497800E+10 -5.2030000E-02 2.6716000E-01 1.3308000E+01 7.4004200E+02 1.5287400E+10 1.9788800E+10 -6.8290000E-02 2.7941000E-01 1.3308000E+01 5.9249600E+02 1.0782400E+10 1.4858500E+10 -8.4550000E-02 2.9167000E-01 1.3308000E+01 4.5027500E+02 7.2297200E+09 1.0220600E+10 -1.0081000E-01 3.0392000E-01 1.3308000E+01 4.2405400E+02 6.3095400E+09 9.1447000E+09 -1.1707000E-01 3.1618000E-01 1.3308000E+01 4.0063800E+02 5.5283600E+09 8.0631600E+09 -1.3335000E-01 3.2844000E-01 1.3308000E+01 3.8206200E+02 4.9800600E+09 6.8844400E+09 -1.4959000E-01 3.4069000E-01 1.3308000E+01 3.9965500E+02 4.9368400E+09 7.0091800E+09 -1.6585000E-01 3.5294000E-01 1.3308000E+01 4.2632100E+02 4.6916600E+09 7.1676800E+09 -1.8211000E-01 3.6519000E-01 1.3181000E+01 4.1682000E+02 3.9494600E+09 7.2716600E+09 -1.9837000E-01 3.7500000E-01 1.2848000E+01 4.0618600E+02 3.3865200E+09 7.0817000E+09 -2.1465000E-01 3.7500000E-01 1.2192000E+01 3.8142000E+02 2.9337400E+09 6.2445300E+09 -2.3089000E-01 3.7500000E-01 1.1561000E+01 3.5282200E+02 2.5689600E+09 5.0489600E+09 -2.4715000E-01 3.7500000E-01 1.1072000E+01 3.4947700E+02 2.3886500E+09 4.9484900E+09 -2.6341000E-01 3.7500000E-01 1.0792000E+01 3.4653800E+02 2.2719900E+09 4.8080200E+09 -2.9595000E-01 3.7500000E-01 1.0232000E+01 3.3933300E+02 2.0500500E+09 4.5014000E+09 -3.2846000E-01 3.7500000E-01 9.6720000E+00 3.3000400E+02 1.8282500E+09 4.2440700E+09 -3.6098000E-01 3.7500000E-01 9.1100000E+00 3.2199000E+02 1.5887100E+09 3.9952800E+09 -3.9350000E-01 3.7500000E-01 8.5340000E+00 3.1382000E+02 1.3619300E+09 3.7507600E+09 -4.2602000E-01 3.7500000E-01 7.9320000E+00 2.9473400E+02 1.1023800E+09 3.4471400E+09 -4.5855000E-01 3.7500000E-01 7.3210000E+00 2.8712000E+02 8.7580000E+08 3.1390700E+09 -4.9106000E-01 3.7500000E-01 6.7110000E+00 2.6334300E+02 6.8130000E+08 2.7342400E+09 -5.2358000E-01 3.7500000E-01 6.1220000E+00 2.5320700E+02 5.3472000E+08 2.5548700E+09 -5.5610000E-01 3.7500000E-01 5.5460000E+00 2.4166600E+02 4.0890000E+08 2.3340300E+09 -5.8862000E-01 3.7500000E-01 4.9710000E+00 2.2063800E+02 3.1454000E+08 1.8287300E+09 -6.2115000E-01 3.7500000E-01 4.4010000E+00 2.0029300E+02 2.3863000E+08 1.5841000E+09 -6.5366000E-01 3.7500000E-01 3.8340000E+00 1.7940400E+02 1.7588000E+08 1.3233600E+09 -6.8618000E-01 3.7500000E-01 3.3320000E+00 1.6509400E+02 1.2601000E+08 1.1836800E+09 -7.1870000E-01 3.7500000E-01 2.8900000E+00 1.5441100E+02 1.0726000E+08 1.0201600E+09 -7.5122000E-01 3.7500000E-01 2.5030000E+00 1.3893500E+02 9.0880000E+07 7.9781000E+08 -7.8376000E-01 3.7500000E-01 2.1160000E+00 1.2955500E+02 7.6310000E+07 7.0961000E+08 -8.1626000E-01 3.7500000E-01 1.7300000E+00 1.0726400E+02 6.1050000E+07 5.1819000E+08 -8.4878000E-01 3.7500000E-01 1.3420000E+00 9.8776000E+01 4.9480000E+07 4.5487000E+08 -8.8130000E-01 3.7500000E-01 9.5400000E-01 9.0248000E+01 3.9360000E+07 3.9512000E+08 -8.9756000E-01 3.7500000E-01 7.6000000E-01 8.3001000E+01 3.4670000E+07 3.5372000E+08 -9.1382000E-01 3.7500000E-01 5.7400000E-01 7.2906000E+01 3.0410000E+07 3.0473000E+08 -9.3008000E-01 3.7500000E-01 4.0400000E-01 6.8772000E+01 2.6520000E+07 2.8142000E+08 -9.3821000E-01 3.7500000E-01 3.1900000E-01 6.6264000E+01 2.3840000E+07 2.6171000E+08 -9.4636000E-01 3.7500000E-01 2.5300000E-01 5.9340000E+01 1.9630000E+07 1.5881000E+08 -9.5447000E-01 3.7500000E-01 2.1600000E-01 5.5914000E+01 1.6000000E+07 1.3788000E+08 -9.6260000E-01 3.7500000E-01 1.7800000E-01 5.2484000E+01 1.2830000E+07 1.1879000E+08 -9.7073000E-01 3.7500000E-01 1.4000000E-01 4.9114000E+01 1.0080000E+07 1.0163000E+08 -9.7886000E-01 3.7500000E-01 1.0100000E-01 4.5818000E+01 7.5500000E+06 8.5070000E+07 -9.8699000E-01 3.7500000E-01 6.2000000E-02 4.1669000E+01 4.6000000E+06 6.4260000E+07 -9.9512000E-01 3.7500000E-01 2.3000000E-02 1.1453000E+01 2.5000000E+05 6.6100000E+06 -1.0000000E+00 3.7500000E-01 0.0000000E+00 1.0319000E+01 1.7000000E+05 5.0100000E+06 ----------------------- BLADE MODE SHAPES --------------------------------------- - 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 - 1.7254 BldFl1Sh(3) - , coeff of x^3 - -3.2452 BldFl1Sh(4) - , coeff of x^4 - 4.7131 BldFl1Sh(5) - , coeff of x^5 - -2.2555 BldFl1Sh(6) - , coeff of x^6 - -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 - 1.2067 BldFl2Sh(3) - , coeff of x^3 - -15.5349 BldFl2Sh(4) - , coeff of x^4 - 29.7347 BldFl2Sh(5) - , coeff of x^5 - -13.8255 BldFl2Sh(6) - , coeff of x^6 - 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 - 2.5337 BldEdgSh(3) - , coeff of x^3 - -3.5772 BldEdgSh(4) - , coeff of x^4 - 2.376 BldEdgSh(5) - , coeff of x^5 - -0.6952 BldEdgSh(6) - , coeff of x^6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat deleted file mode 100644 index 7da4bce4d9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_bld_F7.dat +++ /dev/null @@ -1,44 +0,0 @@ --------------------------------------------------------------------------------- ----------------------- FAST INDIVIDUAL BLADE FILE ------------------------------ -Comment ----------------------- BLADE PARAMETERS ---------------------------------------- -10 NBlInpSt - Number of blade input stations (-) -F CalcBMode - Calculate blade mode shapes internally {T: ignore mode shapes from below, F: use mode shapes from below} [CURRENTLY IGNORED] (flag) -1.5 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%%) -1.5 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%%) -1.5 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%%) ----------------------- BLADE ADJUSTMENT FACTORS -------------------------------- -1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) -1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) -1 AdjBlMs - Factor to adjust blade mass density (-) -1 AdjFlSt - Factor to adjust blade flap stiffness (-) -1 AdjEdSt - Factor to adjust blade edge stiffness (-) ----------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- -BlFract AeroCent StrcTwst BMassDen FlpStff EdgStff GJStff EAStff Alpha FlpIner EdgIner PrecrvRef PreswpRef FlpcgOf EdgcgOf FlpEAOf EdgEAOf -(-) (-) (deg) (kg/m) (Nm^2) (Nm^2) (Nm^2) (N) (-) (kg m) (kg m) (m) (m) (m) (m) (m) (m) -0.00000 0.250 14.810 90.500 5.26800e+07 5.23e+07 1.27200e+07 1.34400e+09 0.000 3.565 3.541 0.000 0.000 0.000 0.000 0.000 0.000 -0.03846 0.238 14.510 80.250 4.60600e+07 3.59e+07 4.01400e+06 1.11300e+09 0.000 3.258 2.748 0.000 0.000 0.000 0.007 0.000 0.005 -0.11538 0.180 13.030 80.090 3.12400e+07 4.63e+07 3.11900e+06 1.03100e+09 0.000 2.299 5.245 0.000 0.000 0.013 0.050 0.013 0.021 -0.20000 0.221 11.250 70.100 1.93700e+07 3.48e+07 2.06100e+06 8.84700e+08 0.000 1.439 4.270 0.000 0.000 0.017 0.052 0.017 0.020 -0.27692 0.258 9.630 59.580 1.19300e+07 2.46e+07 1.39700e+06 7.32300e+08 0.000 0.902 3.236 0.000 0.000 0.016 0.053 0.017 0.021 -0.43846 0.337 6.230 42.690 4.20400e+06 1.17e+07 5.90800e+05 4.99500e+08 0.000 0.332 1.701 0.000 0.000 0.009 0.052 0.010 0.021 -0.61538 0.386 3.590 32.480 1.34000e+06 6.08e+06 2.18300e+05 3.71100e+08 0.000 0.110 0.918 0.000 0.000 0.008 0.048 0.008 0.020 -0.84615 0.418 1.080 22.520 2.57400e+05 2.22e+06 5.04500e+04 2.53900e+08 0.000 0.023 0.349 0.000 0.000 0.006 0.038 0.006 0.016 -0.96923 0.420 0.220 14.810 1.16300e+05 1.08e+06 2.42100e+04 1.74000e+08 0.000 0.009 0.155 0.000 0.000 0.005 0.030 0.005 0.015 -1.00000 0.420 0.000 14.090 9.03200e+04 9.61e+05 1.88300e+04 1.73300e+08 0.000 0.007 0.130 0.000 0.000 0.004 0.029 0.004 0.015 ----------------------- BLADE MODE SHAPES --------------------------------------- -0.226 BldFl1Sh(2) - Flap mode 1, coeff of x^2 -0.574 BldFl1Sh(3) - , coeff of x^3 --1.10 BldFl1Sh(4) - , coeff of x^4 -3.015 BldFl1Sh(5) - , coeff of x^5 --1.71 BldFl1Sh(6) - , coeff of x^6 --2.66 BldFl2Sh(2) - Flap mode 2, coeff of x^2 -14.29 BldFl2Sh(3) - , coeff of x^3 --46.2 BldFl2Sh(4) - , coeff of x^4 -58.30 BldFl2Sh(5) - , coeff of x^5 --22.6 BldFl2Sh(6) - , coeff of x^6 -1.164 BldEdgSh(2) - Edge mode 1, coeff of x^2 --2.13 BldEdgSh(3) - , coeff of x^3 -5.373 BldEdgSh(4) - , coeff of x^4 --4.84 BldEdgSh(5) - , coeff of x^5 -1.435 BldEdgSh(6) - , coeff of x^6 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat deleted file mode 100644 index 5adcfabfaf..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr.dat +++ /dev/null @@ -1,52 +0,0 @@ -------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- -NREL 5.0 MW offshore baseline tower input properties for the OC3-Hywind spar-buoy. ----------------------- TOWER PARAMETERS ---------------------------------------- - 11 NTwInpSt - Number of input stations to specify tower geometry - 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) - 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) - 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) - 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) ----------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- - 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) - 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) - 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) - 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) - 1 AdjTwMa - Factor to adjust tower mass density (-) - 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) - 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) ----------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- - HtFract TMassDen TwFAStif TwSSStif - (-) (kg/m) (Nm^2) (Nm^2) -0.0000000E+00 4.6670000E+03 6.0390300E+11 6.0390300E+11 -1.0000000E-01 4.3452800E+03 5.1764400E+11 5.1764400E+11 -2.0000000E-01 4.0347600E+03 4.4092500E+11 4.4092500E+11 -3.0000000E-01 3.7354400E+03 3.7302200E+11 3.7302200E+11 -4.0000000E-01 3.4473200E+03 3.1323600E+11 3.1323600E+11 -5.0000000E-01 3.1704000E+03 2.6089700E+11 2.6089700E+11 -6.0000000E-01 2.9046900E+03 2.1536500E+11 2.1536500E+11 -7.0000000E-01 2.6501800E+03 1.7602800E+11 1.7602800E+11 -8.0000000E-01 2.4068800E+03 1.4230100E+11 1.4230100E+11 -9.0000000E-01 2.1747700E+03 1.1363000E+11 1.1363000E+11 -1.0000000E+00 1.9538700E+03 8.9488000E+10 8.9488000E+10 ----------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ - 0.8689 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term - 0.2205 TwFAM1Sh(3) - , coefficient of x^3 term - -0.0908 TwFAM1Sh(4) - , coefficient of x^4 term - 0.1167 TwFAM1Sh(5) - , coefficient of x^5 term - -0.1154 TwFAM1Sh(6) - , coefficient of x^6 term - 42.5859 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term - -18.6419 TwFAM2Sh(3) - , coefficient of x^3 term - -20.357 TwFAM2Sh(4) - , coefficient of x^4 term - -23.2686 TwFAM2Sh(5) - , coefficient of x^5 term - 20.6816 TwFAM2Sh(6) - , coefficient of x^6 term ----------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- - 0.834 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term - 0.2216 TwSSM1Sh(3) - , coefficient of x^3 term - -0.0571 TwSSM1Sh(4) - , coefficient of x^4 term - 0.0934 TwSSM1Sh(5) - , coefficient of x^5 term - -0.0918 TwSSM1Sh(6) - , coefficient of x^6 term - 60.2285 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term - -27.5868 TwSSM2Sh(3) - , coefficient of x^3 term - -30.3887 TwSSM2Sh(4) - , coefficient of x^4 term - -33.6738 TwSSM2Sh(5) - , coefficient of x^5 term - 32.4208 TwSSM2Sh(6) - , coefficient of x^6 term diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat deleted file mode 100644 index a968471d85..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ED_twr_F7.dat +++ /dev/null @@ -1,52 +0,0 @@ --------------------------------------------------------------------------------- ----------------------- FAST TOWER FILE ----------------------------------------- -SNL SWiFT Tower Input File created on 08-May-2014 ----------------------- TOWER PARAMETERS ---------------------------------------- -9 NTwInpSt - Number of input stations to specify tower geometry -False CalcTMode - Calculate tower mode shapes internally {T: ignore mode shapes from below, F: use mode shapes from below} [CURRENTLY IGNORED] (flag) -1.5 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%%) -1.5 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%%) -1.5 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%%) -1.5 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%%) ----------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- -1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) -1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) -1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) -1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) -1 AdjTwMa - Factor to adjust tower mass density (-) -1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) -1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) ----------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- -HtFract TMassDen TwFAStif TwSSStif TwGJStif TwEAStif TwFAIner TwSSIner TwFAcgOf TwSScgOf -(-) (kg/m) (Nm^2) (Nm^2) (Nm^2) (N) (kg m) (kg m) (m) (m) -0.00000 656.400 1.04300e+10 1.04300e+10 7.98300e+09 1.46100e+10 468.60 468.60 0.000 0.000 -0.12258 495.900 7.07500e+09 7.07500e+09 5.36300e+09 1.10400e+10 317.90 317.90 0.000 0.000 -0.24516 460.500 5.66100e+09 5.66100e+09 4.29200e+09 1.02500e+10 254.40 254.40 0.000 0.000 -0.36903 426.600 4.49900e+09 4.49900e+09 3.41100e+09 9.49300e+09 202.20 202.20 0.000 0.000 -0.49419 395.800 3.59200e+09 3.59200e+09 2.72300e+09 8.80900e+09 161.40 161.40 0.000 0.000 -0.61935 364.100 2.77700e+09 2.77700e+09 2.12600e+09 8.10200e+09 124.80 124.80 0.000 0.000 -0.74613 259.500 1.80200e+09 1.80200e+09 1.36600e+09 5.77500e+09 80.96 80.96 0.000 0.000 -0.87323 242.900 1.47700e+09 1.47700e+09 1.11900e+09 5.40600e+09 66.36 66.36 0.000 0.000 -1.00000 223.500 1.14300e+09 1.14300e+09 8.75000e+08 4.97400e+09 51.36 51.36 0.000 0.000 ----------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ -0.894474 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term -1.23308 TwFAM1Sh(3) - , coefficient of x^3 term --2.22157 TwFAM1Sh(4) - , coefficient of x^4 term -1.59799 TwFAM1Sh(5) - , coefficient of x^5 term --0.503972 TwFAM1Sh(6) - , coefficient of x^6 term --4.17834 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term --0.955842 TwFAM2Sh(3) - , coefficient of x^3 term -14.7676 TwFAM2Sh(4) - , coefficient of x^4 term --8.63886 TwFAM2Sh(5) - , coefficient of x^5 term -0.00543437 TwFAM2Sh(6) - , coefficient of x^6 term ----------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- -0.894474 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term -1.23308 TwSSM1Sh(3) - , coefficient of x^3 term --2.22157 TwSSM1Sh(4) - , coefficient of x^4 term -1.59799 TwSSM1Sh(5) - , coefficient of x^5 term --0.503972 TwSSM1Sh(6) - , coefficient of x^6 term --4.17834 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term --0.955842 TwSSM2Sh(3) - , coefficient of x^3 term -14.7676 TwSSM2Sh(4) - , coefficient of x^4 term --8.63886 TwSSM2Sh(5) - , coefficient of x^5 term -0.00543437 TwSSM2Sh(6) - , coefficient of x^6 term diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat deleted file mode 100644 index 7dc9aea127..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_ExtPtfm_SubSef.dat +++ /dev/null @@ -1,31 +0,0 @@ -!Comment -!Comment Flex 5 Format -!Dimension: 3 -!Time increment in simulation: 0.05 -!Total simulation time in file: 0.2 - -!Mass Matrix -!Dimension: 3 - 9.62349663e+05 5.07244708e-11 -4.23103689e-11 - 5.02697235e-11 9.62255787e+05 -3.00720954e-10 - -4.32198636e-11 -3.00720954e-10 9.38302373e+05 - -!Stiffness Matrix -!Dimension: 3 - 8.43408083e+07 1.70093408e+00 -2.98665579e-01 - 1.70093407e+00 8.43407974e+07 -3.47132372e-01 - -2.98666294e-01 -3.47133325e-01 1.96653266e+09 - -!Damping Matrix -!Dimension: 3 - 1.54140226e+05 1.03756979e-03 -1.82186007e-04 - 1.03756979e-03 1.54130201e+05 -2.11750779e-04 - -1.82186444e-04 -2.11751361e-04 1.29971117e+06 - -!Loading and Wave Elevation -!Dimension: 1 time column - 3 force columns - 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 - 5.00000000e-02 9.65000686e+01 6.75167835e+01 6.75167835e+01 - 1.00000000e-01 3.98574430e+02 2.59332684e+02 2.59332684e+02 - 1.50000000e-01 9.20902919e+02 5.57660161e+02 5.57660161e+02 - 2.00000000e-01 1.66074968e+03 9.60831149e+02 9.60831149e+02 \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat deleted file mode 100644 index 653bc93502..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD.dat +++ /dev/null @@ -1,149 +0,0 @@ -------- HydroDyn v2.03.* Input File -------------------------------------------- -NREL 5.0 MW offshore baseline floating platform HydroDyn input properties for the OC3 Hywind. -False Echo - Echo the input file data (flag) ----------------------- ENVIRONMENTAL CONDITIONS -------------------------------- - 1025 WtrDens - Water density (kg/m^3) - 320 WtrDpth - Water depth (meters) - 0 MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] ----------------------- WAVES --------------------------------------------------- - 0 WaveMod - Incident wave kinematics model {0: none=still water, 1: regular (periodic), 1P#: regular with user-specified phase, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: White noise spectrum (irregular), 4: user-defined spectrum from routine UserWaveSpctrm (irregular), 5: Externally generated wave-elevation time series, 6: Externally generated full wave-kinematics time series [option 6 is invalid for PotMod/=0]} (switch) - 0 WaveStMod - Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} (switch) [unused when WaveMod=0 or when PotMod/=0] - 600 WaveTMax - Analysis time for incident wave calculations (sec) [unused when WaveMod=0; determines WaveDOmega=2Pi/WaveTMax in the IFFT] - 0.25 WaveDT - Time step for incident wave calculations (sec) [unused when WaveMod=0; 0.1<=WaveDT<=1.0 recommended; determines WaveOmegaMax=Pi/WaveDT in the IFFT] - 5 WaveHs - Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3] - 12.4 WaveTp - Peak-spectral period of incident waves (sec) [used only when WaveMod=1 or 2] -"DEFAULT" WavePkShp - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz] - 0 WvLowCOff - Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] - 500 WvHiCOff - High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] - 0 WaveDir - Incident wave propagation heading direction (degrees) [unused when WaveMod=0 or 6] - 0 WaveDirMod - Directional spreading function {0: none, 1: COS2S} (-) [only used when WaveMod=2,3, or 4] - 1 WaveDirSpread - Wave direction spreading coefficient ( > 0 ) (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1] - 1 WaveNDir - Number of wave directions (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1; odd number only] - 90 WaveDirRange - Range of wave directions (full range: WaveDir +/- 1/2*WaveDirRange) (degrees) [only used when WaveMod=2,3,or 4 and WaveDirMod=1] - 123456789 WaveSeed(1) - First random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] - 1011121314 WaveSeed(2) - Second random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] -TRUE WaveNDAmp - Flag for normally distributed amplitudes (flag) [only used when WaveMod=2, 3, or 4] -"" WvKinFile - Root name of externally generated wave data file(s) (quoted string) [used only when WaveMod=5 or 6] - 1 NWaveElev - Number of points where the incident wave elevations can be computed (-) [maximum of 9 output locations] - 0 WaveElevxi - List of xi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] - 0 WaveElevyi - List of yi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] ----------------------- 2ND-ORDER WAVES ----------------------------------------- [unused with WaveMod=0 or 6] -FALSE WvDiffQTF - Full difference-frequency 2nd-order wave kinematics (flag) -FALSE WvSumQTF - Full summation-frequency 2nd-order wave kinematics (flag) - 0 WvLowCOffD - Low frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] - 3.5 WvHiCOffD - High frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] - 0.1 WvLowCOffS - Low frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] - 3.5 WvHiCOffS - High frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] ----------------------- CURRENT ------------------------------------------------- [unused with WaveMod=6] - 0 CurrMod - Current profile model {0: none=no current, 1: standard, 2: user-defined from routine UserCurrent} (switch) - 0 CurrSSV0 - Sub-surface current velocity at still water level (m/s) [used only when CurrMod=1] -"DEFAULT" CurrSSDir - Sub-surface current heading direction (degrees) or DEFAULT (string) [used only when CurrMod=1] - 20 CurrNSRef - Near-surface current reference depth (meters) [used only when CurrMod=1] - 0 CurrNSV0 - Near-surface current velocity at still water level (m/s) [used only when CurrMod=1] - 0 CurrNSDir - Near-surface current heading direction (degrees) [used only when CurrMod=1] - 0 CurrDIV - Depth-independent current velocity (m/s) [used only when CurrMod=1] - 0 CurrDIDir - Depth-independent current heading direction (degrees) [used only when CurrMod=1] ----------------------- FLOATING PLATFORM --------------------------------------- [unused with WaveMod=6] - 1 PotMod - Potential-flow model {0: none=no potential flow, 1: frequency-to-time-domain transforms based on WAMIT output, 2: fluid-impulse theory (FIT)} (switch) -"HydroData/Spar" PotFile - Root name of potential-flow model data; WAMIT output files containing the linear, nondimensionalized, hydrostatic restoring matrix (.hst), frequency-dependent hydrodynamic added mass matrix and damping matrix (.1), and frequency- and direction-dependent wave excitation force vector per unit wave amplitude (.3) (quoted string) [MAKE SURE THE FREQUENCIES INHERENT IN THESE WAMIT FILES SPAN THE PHYSICALLY-SIGNIFICANT RANGE OF FREQUENCIES FOR THE GIVEN PLATFORM; THEY MUST CONTAIN THE ZERO- AND INFINITE-FREQUENCY LIMITS!] - 1 WAMITULEN - Characteristic body length scale used to redimensionalize WAMIT output (meters) [only used when PotMod=1] - 8029.21 PtfmVol0 - Displaced volume of water when the platform is in its undisplaced position (m^3) [only used when PotMod=1; USE THE SAME VALUE COMPUTED BY WAMIT AS OUTPUT IN THE .OUT FILE!] - 0 PtfmCOBxt - The xt offset of the center of buoyancy (COB) from the platform reference point (meters) [only used when PotMod=1] - 0 PtfmCOByt - The yt offset of the center of buoyancy (COB) from the platform reference point (meters) [only used when PotMod=1] - 1 RdtnMod - Radiation memory-effect model {0: no memory-effect calculation, 1: convolution, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ss INPUT FILE] - 60 RdtnTMax - Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1; determines RdtnDOmega=Pi/RdtnTMax in the cosine transform; MAKE SURE THIS IS LONG ENOUGH FOR THE RADIATION IMPULSE RESPONSE FUNCTIONS TO DECAY TO NEAR-ZERO FOR THE GIVEN PLATFORM!] - 0.0125 RdtnDT - Time step for wave radiation kernel calculations (sec) [only used when PotMod=1; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform] ----------------------- 2ND-ORDER FLOATING PLATFORM FORCES ---------------------- [unused with WaveMod=0 or 6, or PotMod=0 or 2] - 0 MnDrift - Mean-drift 2nd-order forces computed {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] - 0 NewmanApp - Mean- and slow-drift 2nd-order forces computed with Newman's approximation {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. Used only when WaveDirMod=0] - 0 DiffQTF - Full difference-frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] - 0 SumQTF - Full summation -frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} ----------------------- FLOATING PLATFORM FORCE FLAGS -------------------------- [unused with WaveMod=6] -True PtfmSgF - Platform horizontal surge translation force (flag) or DEFAULT -True PtfmSwF - Platform horizontal sway translation force (flag) or DEFAULT -True PtfmHvF - Platform vertical heave translation force (flag) or DEFAULT -True PtfmRF - Platform roll tilt rotation force (flag) or DEFAULT -True PtfmPF - Platform pitch tilt rotation force (flag) or DEFAULT -True PtfmYF - Platform yaw rotation force (flag) or DEFAULT ----------------------- PLATFORM ADDITIONAL STIFFNESS AND DAMPING -------------- - 0 0 0 0 0 0 AddF0 - Additional preload (N, N-m) - 0 0 0 0 0 0 AddCLin - Additional linear stiffness (N/m, N/rad, N-m/m, N-m/rad) - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 98340000 - 100000 0 0 0 0 0 AddBLin - Additional linear damping(N/(m/s), N/(rad/s), N-m/(m/s), N-m/(rad/s)) - 0 100000 0 0 0 0 - 0 0 130000 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 13000000 - 0 0 0 0 0 0 AddBQuad - Additional quadratic drag(N/(m/s)^2, N/(rad/s)^2, N-m(m/s)^2, N-m/(rad/s)^2) - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 ----------------------- AXIAL COEFFICIENTS -------------------------------------- - 1 NAxCoef - Number of axial coefficients (-) -AxCoefID AxCd AxCa AxCp - (-) (-) (-) (-) - 1 0.00 0.00 1.00 ----------------------- MEMBER JOINTS ------------------------------------------- - 4 NJoints - Number of joints (-) [must be exactly 0 or at least 2] -JointID Jointxi Jointyi Jointzi JointAxID JointOvrlp [JointOvrlp= 0: do nothing at joint, 1: eliminate overlaps by calculating super member] - (-) (m) (m) (m) (-) (switch) - 1 0.00000 0.00000 -120.00000 1 0 - 2 0.00000 0.00000 -12.00000 1 0 - 3 0.00000 0.00000 -4.00000 1 0 - 4 0.00000 0.00000 10.00000 1 0 ----------------------- MEMBER CROSS-SECTION PROPERTIES ------------------------- - 2 NPropSets - Number of member property sets (-) -PropSetID PropD PropThck - (-) (m) (m) - 1 9.40000 0.00010 - 2 6.50000 0.00010 ----------------------- SIMPLE HYDRODYNAMIC COEFFICIENTS (model 1) -------------- - SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG - (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) - 0.60 0.00 0.00 0.00 1.00 1.00 1.00 1.00 1.00 1.00 ----------------------- DEPTH-BASED HYDRODYNAMIC COEFFICIENTS (model 2) --------- - 0 NCoefDpth - Number of depth-dependent coefficients (-) -Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG -(m) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) ----------------------- MEMBER-BASED HYDRODYNAMIC COEFFICIENTS (model 3) -------- - 0 NCoefMembers - Number of member-based coefficients (-) -MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 - (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) --------------------- MEMBERS ------------------------------------------------- - 3 NMembers - Number of members (-) -MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod PropPot [MCoefMod=1: use simple coeff table, 2: use depth-based coeff table, 3: use member-based coeff table] [ PropPot/=0 if member is modeled with potential-flow theory] - (-) (-) (-) (-) (-) (m) (switch) (flag) - 1 1 2 1 1 0.5000 1 TRUE - 2 2 3 1 2 0.5000 1 TRUE - 3 3 4 2 2 0.5000 1 TRUE ----------------------- FILLED MEMBERS ------------------------------------------ - 0 NFillGroups - Number of filled member groups (-) [If FillDens = DEFAULT, then FillDens = WtrDens; FillFSLoc is related to MSL2SWL] -FillNumM FillMList FillFSLoc FillDens -(-) (-) (m) (kg/m^3) ----------------------- MARINE GROWTH ------------------------------------------- - 0 NMGDepths - Number of marine-growth depths specified (-) -MGDpth MGThck MGDens -(m) (m) (kg/m^3) ----------------------- MEMBER OUTPUT LIST -------------------------------------- - 0 NMOutputs - Number of member outputs (-) [must be < 10] -MemberID NOutLoc NodeLocs [NOutLoc < 10; node locations are normalized distance from the start of the member, and must be >=0 and <= 1] [unused if NMOutputs=0] - (-) (-) (-) ----------------------- JOINT OUTPUT LIST --------------------------------------- - 0 NJOutputs - Number of joint outputs [Must be < 10] - 0 JOutLst - List of JointIDs which are to be output (-)[unused if NJOutputs=0] ----------------------- OUTPUT -------------------------------------------------- -False HDSum - Output a summary file [flag] -False OutAll - Output all user-specified member and joint loads (only at each member end, not interior locations) [flag] - 2 OutSwtch - Output requested channels to: [1=Hydrodyn.out, 2=GlueCode.out, 3=both files] -"ES11.4e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] -"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] ----------------------- OUTPUT CHANNELS ----------------------------------------- -"Wave1Elev" - Wave elevation at the platform reference point (0, 0) -END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat deleted file mode 100644 index b913a273b9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD2.dat +++ /dev/null @@ -1,269 +0,0 @@ -------- HydroDyn Input File ---------------------------------------------------- -NREL 5.0 MW offshore baseline floating platform HydroDyn input properties for the OC3 Hywind. -True Echo - Echo the input file data (flag) ----------------------- ENVIRONMENTAL CONDITIONS -------------------------------- - default WtrDens - Water density (kg/m^3) - default WtrDpth - Water depth (meters) - default MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] ----------------------- FLOATING PLATFORM --------------------------------------- [unused with WaveMod=6] - 0 PotMod - Potential-flow model {0: none=no potential flow, 1: frequency-to-time-domain transforms based on WAMIT output, 2: fluid-impulse theory (FIT)} (switch) - 0 ExctnMod - Wave-excitation model {0: no wave-excitation calculation, 1: DFT, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ssexctn INPUT FILE] - 1 ExctnDisp - Method of computing Wave Excitation {0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0 and SeaState's WaveMod>0]} (switch) - 10 ExctnCutOff - Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [used only when PotMod=1, ExctnMod>0, and ExctnDisp=2]) [only used when PotMod=1 and ExctnMod>0 and SeaState's WaveMod>0]} (switch) - 0 RdtnMod - Radiation memory-effect model {0: no memory-effect calculation, 1: convolution, 2: state-space} (switch) [only used when PotMod=1; STATE-SPACE REQUIRES *.ss INPUT FILE] - 0 RdtnTMax - Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1 and RdtnMod=1; determines RdtnDOmega=Pi/RdtnTMax in the cosine transform; MAKE SURE THIS IS LONG ENOUGH FOR THE RADIATION IMPULSE RESPONSE FUNCTIONS TO DECAY TO NEAR-ZERO FOR THE GIVEN PLATFORM!] - 0.01 RdtnDT - Time step for wave radiation kernel calculations (sec) [only used when PotMod=1 and ExctnMod>1 or RdtnMod>0; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform] - 1 NBody - Number of WAMIT bodies to be used (-) [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] - 2 NBodyMod - Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1] - "zeros" PotFile - Root name of potential-flow model data; WAMIT output files containing the linear, nondimensionalized, hydrostatic restoring matrix (.hst), frequency-dependent hydrodynamic added mass matrix and damping matrix (.1), and frequency- and direction-dependent wave excitation force vector per unit wave amplitude (.3) (quoted string) [1 to NBody if NBodyMod>1] [only used when PotMod=1 and ExctnMod>0 or RdtnMod>0] [MAKE SURE THE FREQUENCIES INHERENT IN THESE WAMIT FILES SPAN THE PHYSICALLY-SIGNIFICANT RANGE OF FREQUENCIES FOR THE GIVEN PLATFORM; THEY MUST CONTAIN THE ZERO- AND INFINITE-FREQUENCY LIMITS!] - 1 WAMITULEN - Characteristic body length scale used to redimensionalize WAMIT output (meters) [1 to NBody if NBodyMod>1] [only used when PotMod=1 and ExctnMod=1 or RdtnMod=1] - 0 PtfmRefxt - The xt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1] - 0 PtfmRefyt - The yt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1] - 0 PtfmRefzt - The zt offset of the body reference point(s) from (0,0,0) (meters) [1 to NBody] [only used when PotMod=1. If NBodyMod=2,PtfmRefzt=0.0] - 0 PtfmRefztRot - The rotation about zt of the body reference frame(s) from xt/yt (degrees) [1 to NBody] [only used when PotMod=1] - 0 PtfmVol0 - Displaced volume of water when the body is in its undisplaced position (m^3) [1 to NBody] [only used when PotMod=1; USE THE SAME VALUE COMPUTED BY WAMIT AS OUTPUT IN THE .OUT FILE!] - 0 PtfmCOBxt - The xt offset of the center of buoyancy (COB) from (0,0) (meters) [1 to NBody] [only used when PotMod=1] - 0 PtfmCOByt - The yt offset of the center of buoyancy (COB) from (0,0) (meters) [1 to NBody] [only used when PotMod=1] ----------------------- 2ND-ORDER FLOATING PLATFORM FORCES ---------------------- [unused with WaveMod=0 or 6 or PotMod=0 or 2] - 0 MnDrift - Mean-drift 2nd-order forces computed {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. If NBody>1, MnDrift /=8] - 0 NewmanApp - Mean- and slow-drift 2nd-order forces computed with Newman's approximation {0: None; [7, 8, 9, 10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero. If NBody>1, NewmanApp/=8. Used only when WaveDirMod=0] - 0 DiffQTF - Full difference-frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} [Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero] - 0 SumQTF - Full summation -frequency 2nd-order forces computed with full QTF {0: None; [10, 11, or 12]: WAMIT file to use} ----------------------- PLATFORM ADDITIONAL STIFFNESS AND DAMPING -------------- [unused with PotMod=0 or 2] - 0 AddF0 - Additional preload (N, N-m) [If NBodyMod=1, one size 6*NBody x 1 vector; if NBodyMod>1, NBody size 6 x 1 vectors] - 0 - 0 - 0 - 0 - 0 - 0 0 0 0 0 0 AddCLin - Additional linear stiffness (N/m, N/rad, N-m/m, N-m/rad) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 98340000 - 100000 0 0 0 0 0 AddBLin - Additional linear damping(N/(m/s), N/(rad/s), N-m/(m/s), N-m/(rad/s)) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] - 0 100000 0 0 0 0 - 0 0 130000 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 13000000 - 0 0 0 0 0 0 AddBQuad - Additional quadratic drag(N/(m/s)^2, N/(rad/s)^2, N-m(m/s)^2, N-m/(rad/s)^2) [If NBodyMod=1, one size 6*NBody x 6*NBody matrix; if NBodyMod>1, NBody size 6 x 6 matrices] - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 ----------------------- STRIP THEORY OPTIONS -------------------------------------- - 0 WaveDisp - Method of computing Wave Kinematics {0: use undisplaced position, 1: use displaced position) } (switch) - 0 AMMod - Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 2: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState] ----------------------- AXIAL COEFFICIENTS -------------------------------------- - 2 NAxCoef - Number of axial coefficients (-) -AxCoefID AxCd AxCa AxCp AxFDMod AxVnCOff AxFDLoFSc - (-) (-) (-) (-) (-) (-) (-) - 1 0.00 0.00 0.00 0 0.00 1.00 - 2 0.60 0.00 1.00 0 0.00 1.00 ----------------------- MEMBER JOINTS ------------------------------------------- - 55 NJoints - Number of joints (-) [must be exactly 0 or at least 2] -JointID Jointxi Jointyi Jointzi JointAxID JointOvrlp [JointOvrlp= 0: do nothing at joint, 1: eliminate overlaps by calculating super member] - (-) (m) (m) (m) (-) (switch) - 101 0.0000000 0.000000 16.00000 1 0 - 102 0.0000000 0.000000 14.87000 1 0 - 103 0.0000000 0.000000 -14.03000 1 0 - 104 0.0000000 0.000000 -14.83000 2 0 - 211 2.7600000 0.000000 -13.97000 1 0 - 212 33.3000000 0.000000 -13.97000 1 0 - 213 36.0950000 0.000000 -13.97000 1 0 - 221 -1.3800000 -2.390000 -13.97000 1 0 - 222 -16.6500000 -28.838420 -13.97000 1 0 - 223 -18.0475000 -31.258960 -13.97000 1 0 - 231 -1.3800000 2.390000 -13.97000 1 0 - 232 -16.6500000 28.838420 -13.97000 1 0 - 233 -18.0475000 31.258960 -13.97000 1 0 - 311 3.1700000 0.000000 13.98000 1 0 - 312 4.2777890 0.000000 13.01372 1 0 - 313 30.9250100 0.000000 -10.22968 1 0 - 314 32.0328000 0.000000 -11.19596 1 0 - 321 -1.5850000 -2.745000 13.98000 1 0 - 322 -2.1388944 -3.704373 13.01372 1 0 - 323 -15.4625000 -26.781540 -10.22968 1 0 - 324 -16.0164000 -27.740910 -11.19596 1 0 - 331 -1.5850000 2.745000 13.98000 1 0 - 332 -2.1388944 3.704373 13.01372 1 0 - 333 -15.4625000 26.781540 -10.22968 1 0 - 334 -16.0164000 27.740910 -11.19596 1 0 - 411 32.3960000 -2.410000 -13.97000 1 0 - 412 27.7800800 -5.075000 -13.97000 1 0 - 413 -9.48585500 -26.590500 -13.97000 1 0 - 414 -14.10090000 -29.255000 -13.97000 1 0 - 421 -18.28512000 -26.850530 -13.97000 1 0 - 422 -18.28512000 -21.520530 -13.97000 1 0 - 423 -18.28512000 21.510470 -13.97000 1 0 - 424 -18.28512000 26.839470 -13.97000 1 0 - 431 -14.11088000 29.260530 -13.97000 1 0 - 432 -9.49496300 26.595530 -13.97000 1 0 - 433 27.77098000 5.080029 -13.97000 1 0 - 434 32.38603000 2.415529 -13.97000 1 0 - 511 20.50000000 33.492000 -61.46800 1 0 - 512 20.50000000 25.417000 -61.46800 1 0 - 513 20.50000000 18.721000 -61.46800 1 0 - 514 20.50000000 -18.719000 -61.46800 1 0 - 515 20.50000000 -25.419000 -61.46800 1 0 - 516 20.50000000 -33.489000 -61.46800 1 0 - 521 18.76795000 -34.489000 -61.46800 1 0 - 522 11.77479000 -30.451500 -61.46800 1 0 - 523 5.97588800 -27.103500 -61.46800 1 0 - 524 -26.44810000 -8.383500 -61.46800 1 0 - 525 -32.25047000 -5.033500 -61.46800 1 0 - 526 -39.23930000 -0.998500 -61.46800 1 0 - 531 -39.23930000 1.001500 -61.46800 1 0 - 532 -32.24614000 5.039000 -61.46800 1 0 - 533 -26.44724000 8.387000 -61.46800 1 0 - 534 5.97675400 27.107000 -61.46800 1 0 - 535 11.77912000 30.457000 -61.46800 1 0 - 536 18.76795000 34.492000 -61.46800 1 0 ----------------------- MEMBER CROSS-SECTION PROPERTIES ------------------------- - 12 NPropSets - Number of member property sets (-) -PropSetID PropD PropThck - (-) (m) (m) - 1 4.3 0.06000 - 2 3.462 0.02200 - 3 0.3462 0.00220 - 4 2.125 0.02500 - 5 2.16 0.02000 - 6 2.2 0.03000 - 7 4 0.02200 - 8 2 0.10000 - 9 4.1 0.02800 - 10 4.1 0.02800 - 11 4.1 0.02800 - 13 0.10762 0.05381 ----------------------- SIMPLE HYDRODYNAMIC COEFFICIENTS (model 1) -------------- - SimplCd SimplCdMG SimplCa SimplCaMG SimplCp SimplCpMG SimplAxCd SimplAxCdMG SimplAxCa SimplAxCaMG SimplAxCp SimplAxCpMG - (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) - 0.60 0.60 0.00 0.00 1.00 1.00 0.60 0.60 0.00 0.00 1.00 1.00 ----------------------- DEPTH-BASED HYDRODYNAMIC COEFFICIENTS (model 2) --------- - 0 NCoefDpth - Number of depth-dependent coefficients (-) -Dpth DpthCd DpthCdMG DpthCa DpthCaMG DpthCp DpthCpMG DpthAxCd DpthAxCdMG DpthAxCa DpthAxCaMG DpthAxCp DpthAxCpMG -(m) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) ----------------------- MEMBER-BASED HYDRODYNAMIC COEFFICIENTS (model 3) -------- - 0 NCoefMembers - Number of member-based coefficients (-) -MemberID MemberCd1 MemberCd2 MemberCdMG1 MemberCdMG2 MemberCa1 MemberCa2 MemberCaMG1 MemberCaMG2 MemberCp1 MemberCp2 MemberCpMG1 MemberCpMG2 MemberAxCd1 MemberAxCd2 MemberAxCdMG1 MemberAxCdMG2 MemberAxCa1 MemberAxCa2 MemberAxCaMG1 MemberAxCaMG2 MemberAxCp1 MemberAxCp2 MemberAxCpMG1 MemberAxCpMG2 - (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) --------------------- MEMBERS ------------------------------------------------- - 48 NMembers - Number of members (-) -MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MDivSize MCoefMod PropPot [MCoefMod=1: use simple coeff table, 2: use depth-based coeff table, 3: use member-based coeff table] [ PropPot/=0 if member is modeled with potential-flow theory] - (-) (-) (-) (-) (-) (m) (switch) (flag) R. Bergua comments: Dummy beams removed from the hydro. It is supposed that those beams are underneath other beams. - 1 101 102 1 1 5 1 FALSE - 2 102 103 1 1 1 1 FALSE - 3 103 104 1 1 5 1 FALSE - 4 211 212 2 2 5 1 FALSE - 5 212 213 2 3 5 1 FALSE - 6 221 222 2 2 5 1 FALSE - 7 222 223 2 3 5 1 FALSE - 8 231 232 2 2 5 1 FALSE - 9 232 233 2 3 5 1 FALSE - 10 311 312 4 5 5 1 FALSE - 11 312 313 5 5 1 1 FALSE - 12 313 314 5 4 5 1 FALSE - 13 321 322 4 5 5 1 FALSE - 14 322 323 5 5 1 1 FALSE - 15 323 324 5 4 5 1 FALSE - 16 331 332 4 5 5 1 FALSE - 17 332 333 5 5 1 1 FALSE - 18 333 334 5 4 5 1 FALSE - 19 411 412 6 7 5 1 FALSE - 20 412 413 7 7 5 1 FALSE - 21 413 414 7 6 5 1 FALSE - 22 421 422 6 7 5 1 FALSE - 23 422 423 7 7 5 1 FALSE - 24 423 424 7 6 5 1 FALSE - 25 431 432 6 7 5 1 FALSE - 26 432 433 7 7 5 1 FALSE - 27 433 434 7 6 5 1 FALSE - 28 511 512 8 9 5 1 FALSE - 29 512 513 10 10 5 1 FALSE - 30 513 514 11 11 5 1 FALSE - 31 514 515 10 10 5 1 FALSE - 32 515 516 9 8 5 1 FALSE - 33 521 522 8 9 5 1 FALSE - 34 522 523 10 10 5 1 FALSE - 35 523 524 11 11 5 1 FALSE - 36 524 525 10 10 5 1 FALSE - 37 525 526 9 8 5 1 FALSE - 38 531 532 8 9 5 1 FALSE - 39 532 533 10 10 5 1 FALSE - 40 533 534 11 11 5 1 FALSE - 41 534 535 10 10 5 1 FALSE - 42 535 536 9 8 5 1 FALSE - 61 213 511 13 13 5 1 FALSE - 62 213 516 13 13 5 1 FALSE - 63 223 521 13 13 5 1 FALSE - 64 223 526 13 13 5 1 FALSE - 65 233 531 13 13 5 1 FALSE - 66 233 536 13 13 5 1 FALSE ----------------------- FILLED MEMBERS ------------------------------------------ - 0 NFillGroups - Number of filled member groups (-) [If FillDens = DEFAULT, then FillDens = WtrDens; FillFSLoc is related to MSL2SWL] -FillNumM FillMList FillFSLoc FillDens -(-) (-) (m) (kg/m^3) ----------------------- MARINE GROWTH ------------------------------------------- - 0 NMGDepths - Number of marine-growth depths specified (-) -MGDpth MGThck MGDens -(m) (m) (kg/m^3) ----------------------- MEMBER OUTPUT LIST -------------------------------------- - 0 NMOutputs - Number of member outputs (-) [must be < 10] -MemberID NOutLoc NodeLocs [NOutLoc < 10; node locations are normalized distance from the start of the member, and must be >=0 and <= 1] [unused if NMOutputs=0] - (-) (-) (-) ----------------------- JOINT OUTPUT LIST --------------------------------------- - 0 NJOutputs - Number of joint outputs [Must be < 10] - 0 JOutLst - List of JointIDs which are to be output (-)[unused if NJOutputs=0] ----------------------- OUTPUT -------------------------------------------------- -False HDSum - Output a summary file [flag] -False OutAll - Output all user-specified member and joint loads (only at each member end, not interior locations) [flag] - 2 OutSwtch - Output requested channels to: [1=Hydrodyn.out, 2=GlueCode.out, 3=both files] -"ES11.4e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] -"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] ----------------------- OUTPUT CHANNELS ----------------------------------------- -HydroFxi -HydroFyi -HydroFzi -HydroMxi -HydroMyi -HydroMzi -B1Surge -B1Sway -B1Heave -B1Roll -B1Pitch -B1Yaw -B1TVxi -B1TVyi -B1TVzi -B1RVxi -B1RVyi -B1RVzi -B1TAxi -B1TAyi -B1TAzi -B1RAxi -B1RAyi -B1RAzi -B1WvsFxi -B1WvsFyi -B1WvsFzi -B1WvsMxi -B1WvsMyi -B1WvsMzi -B1HDSFxi -B1HDSFyi -B1HDSFzi -B1HDSMxi -B1HDSMyi -B1HDSMzi -B1RdtFxi -B1RdtFyi -B1RdtFzi -B1RdtMxi -B1RdtMyi -B1RdtMzi -END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat deleted file mode 100644 index d53f29602b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_SeaState.dat +++ /dev/null @@ -1,96 +0,0 @@ -------- SeaState Input File ---------------------------------------------------- -Updated HydroDyn input file for the TCF project. Full scale model to verify OpenFAST against OrcaFlex for the TetraSpar project. -False Echo - Echo the input file data (flag) ----------------------- ENVIRONMENTAL CONDITIONS -------------------------------- - default WtrDens - Water density (kg/m^3) - default WtrDpth - Water depth (meters) - default MSL2SWL - Offset between still-water level and mean sea level (meters) [positive upward; unused when WaveMod = 6; must be zero if PotMod=1 or 2] ----------------------- SPATIAL DISCRETIZATION --------------------------------------------------- - 30 X_HalfWidth - Half-width of the domain in the X direction (m) [>0, NOTE: X[nX] = nX*dX, where nX = {-NX+1,-NX+2,…,NX-1} and dX = X_HalfWidth/(NX-1)] - 30 Y_HalfWidth - Half-width of the domain in the Y direction (m) [>0, NOTE: Y[nY] = nY*dY, where nY = {-NY+1,-NY+2,…,NY-1} and dY = Y_HalfWidth/(NY-1)] - default Z_Depth - Depth of the domain the Z direction (m) relative to SWL [0 < Z_Depth <= WtrDpth+MSL2SWL; "default": Z_Depth = WtrDpth+MSL2SWL; Z[nZ] = ( COS( nZ*dthetaZ ) – 1 )*Z_Depth, where nZ = {0,1,…NZ-1} and dthetaZ = pi/( 2*(NZ-1) )] - 3 NX - Number of nodes in half of the X-direction domain (-) [>=2] - 3 NY - Number of nodes in half of the Y-direction domain (-) [>=2] - 40 NZ - Number of nodes in the Z direction (-) [>=2] ----------------------- WAVES --------------------------------------------------- - 0 WaveMod - Incident wave kinematics model {0: none=still water, 1: regular (periodic), 1P#: regular with user-specified phase, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: White noise spectrum (irregular), 4: user-defined spectrum from routine UserWaveSpctrm (irregular), 5: Externally generated wave-elevation time series, 6: Externally generated full wave-kinematics time series [option 6 is invalid for PotMod/=0]} (switch) - 0 WaveStMod - Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} (switch) [unused when WaveMod=0 or when PotMod/=0] - 20000 WaveTMax - Analysis time for incident wave calculations (sec) [unused when WaveMod=0; determines WaveDOmega=2Pi/WaveTMax in the IFFT] - 0.2 WaveDT - Time step for incident wave calculations (sec) [unused when WaveMod=0; 0.1<=WaveDT<=1.0 recommended; determines WaveOmegaMax=Pi/WaveDT in the IFFT] - 9.41 WaveHs - Significant wave height of incident waves (meters) [used only when WaveMod=1, 2, or 3] - 14.3 WaveTp - Peak-spectral period of incident waves (sec) [used only when WaveMod=1 or 2] -"DEFAULT" WavePkShp - Peak-shape parameter of incident wave spectrum (-) or DEFAULT (string) [used only when WaveMod=2; use 1.0 for Pierson-Moskowitz] - 0.15708 WvLowCOff - Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] - 3.1416 WvHiCOff - High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) [unused when WaveMod=0, 1, or 6] - 0 WaveDir - Incident wave propagation heading direction (degrees) [unused when WaveMod=0 or 6] - 0 WaveDirMod - Directional spreading function {0: none, 1: COS2S} (-) [only used when WaveMod=2,3, or 4] - 1 WaveDirSpread - Wave direction spreading coefficient ( > 0 ) (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1] - 1 WaveNDir - Number of wave directions (-) [only used when WaveMod=2,3, or 4 and WaveDirMod=1; odd number only] - 0 WaveDirRange - Range of wave directions (full range: WaveDir +/- 1/2*WaveDirRange) (degrees) [only used when WaveMod=2,3,or 4 and WaveDirMod=1] - 123456789 WaveSeed(1) - First random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] - 1011121314 WaveSeed(2) - Second random seed of incident waves [-2147483648 to 2147483647] (-) [unused when WaveMod=0, 5, or 6] -FALSE WaveNDAmp - Flag for normally distributed amplitudes (flag) [only used when WaveMod=2, 3, or 4] -"" WvKinFile - Root name of externally generated wave data file(s) (quoted string) [used only when WaveMod=5 or 6] ----------------------- 2ND-ORDER WAVES ----------------------------------------- [unused with WaveMod=0 or 6] -FALSE WvDiffQTF - Full difference-frequency 2nd-order wave kinematics (flag) -FALSE WvSumQTF - Full summation-frequency 2nd-order wave kinematics (flag) - 0 WvLowCOffD - Low frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] - 0.1 WvHiCOffD - High frequency cutoff used in the difference-frequencies (rad/s) [Only used with a difference-frequency method] - 0 WvLowCOffS - Low frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] - 0.1 WvHiCOffS - High frequency cutoff used in the summation-frequencies (rad/s) [Only used with a summation-frequency method] ----------------------- CONSTRAINED WAVES --------------------------------------- - 0 ConstWaveMod - Constrained wave model: 0=none; 1=Constrained wave with specified crest elevation, alpha; 2=Constrained wave with guaranteed peak-to-trough crest height, HCrest (flag) - 1 CrestHmax - Crest height (2*alpha for ConstWaveMod=1 or HCrest for ConstWaveMod=2), must be larger than WaveHs (m) [unused when ConstWaveMod=0] - 60 CrestTime - Time at which the crest appears (s) [unused when ConstWaveMod=0] - 0 CrestXi - X-position of the crest (m) [unused when ConstWaveMod=0] - 0 CrestYi - Y-position of the crest (m) [unused when ConstWaveMod=0] ----------------------- CURRENT ------------------------------------------------- [unused with WaveMod=6] - 0 CurrMod - Current profile model {0: none=no current, 1: standard, 2: user-defined from routine UserCurrent} (switch) - 0 CurrSSV0 - Sub-surface current velocity at still water level (m/s) [used only when CurrMod=1] -"DEFAULT" CurrSSDir - Sub-surface current heading direction (degrees) or DEFAULT (string) [used only when CurrMod=1] - 0 CurrNSRef - Near-surface current reference depth (meters) [used only when CurrMod=1] - 0 CurrNSV0 - Near-surface current velocity at still water level (m/s) [used only when CurrMod=1] - 0 CurrNSDir - Near-surface current heading direction (degrees) [used only when CurrMod=1] - 0 CurrDIV - Depth-independent current velocity (m/s) [used only when CurrMod=1] - 0 CurrDIDir - Depth-independent current heading direction (degrees) [used only when CurrMod=1] ----------------------- MacCamy-Fuchs diffraction model ------------------------- - 0 MCFD - MacCamy-Fuchs member radius (ignored if radius <= 0) [must be 0 when WaveMod 0 or 6] ----------------------- OUTPUT -------------------------------------------------- -False SeaStSum - Output a summary file [flag] - 2 OutSwtch - Output requested channels to: [1=SeaState.out, 2=GlueCode.out, 3=both files] -"ES11.4e2" OutFmt - Output format for numerical results (quoted string) [not checked for validity!] -"A11" OutSFmt - Output format for header strings (quoted string) [not checked for validity!] - 1 NWaveElev - Number of points where the incident wave elevations can be computed (-) [maximum of 9 output locations] - 0 WaveElevxi - List of xi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] - 0 WaveElevyi - List of yi-coordinates for points where the incident wave elevations can be output (meters) [NWaveElev points, separated by commas or white space; usused if NWaveElev = 0] - 0 NWaveKin - Number of points where the wave kinematics can be output (-) [maximum of 9 output locations] - 0, WaveKinxi - List of xi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] - 0, WaveKinyi - List of yi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] - 0, WaveKinzi - List of zi-coordinates for points where the wave kinematics can be output (meters) [NWaveKin points, separated by commas or white space; usused if NWaveKin = 0] ----------------------- OUTPUT CHANNELS ----------------------------------------- -"Wave1Elev" - Wave elevation at the platform reference point (0, 0) -"HydroFxi" - Hydro force [N] in the X direction. -"HydroFyi" - Hydro force [N] in the Y direction. -"HydroFzi" - Hydro force [N] in the vertical direction (Z). -"HydroMxi" - Hydro moment [N] in the X direction. -"HydroMyi" - Hydro moment [N] in the Y direction. -"HydroMzi" - Hydro moment [N] in the vertical direction (Z). -"PRPSurge" -"PRPSway" -"PRPHeave" -"PRPRoll" -"PRPPitch" -"PRPYaw" -"PRPTVxi" -"PRPTVyi" -"PRPTVzi" -"PRPRVxi" -"PRPRVyi" -"PRPRVzi" -"PRPTAxi" -"PRPTAyi" -"PRPTAzi" -"PRPRAxi" -"PRPRAyi" -"PRPRAzi" -END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr deleted file mode 100644 index a0e93c854b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_HD_driver.dvr +++ /dev/null @@ -1,27 +0,0 @@ -------- HydroDyn Driver file ------------------------------------------------- -Compatible with HydroDyn v3.00 -FALSE Echo - Echo the input file data (flag) ----------------------- ENVIRONMENTAL CONDITIONS ------------------------------- -9.80665 Gravity - Gravity (m/s^2) -1025 WtrDens - Water density (kg/m^3) -220 WtrDpth - Water depth (m) -0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] ----------------------- HYDRODYN ----------------------------------------------- -"./HD_NoCa.dat" HDInputFile - Primary HydroDyn input file name (quoted string) -"./hd_driver_NoCa" OutRootName - The name which prefixes all HydroDyn generated files (quoted string) -True Linearize - Flag to enable linearization -1001 NSteps - Number of time steps in the simulations (-) -0.0125 TimeInterval - TimeInterval for the simulation (sec) ----------------------- PRP INPUTS (Platform Reference Point) ------------------ -1 PRPInputsMod - Model for the PRP (principal reference point) inputs {0: all inputs are zero for every timestep, 1: steadystate inputs, 2: read inputs from a file (InputsFile)} (switch) -16 PtfmRefzt - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters) -"OpenFAST_DisplacementTimeseries.dat" PRPInputsFile - Filename for the PRP HydroDyn input InputsMod = 2 (quoted string) ----------------------- PRP STEADY STATE INPUTS ------------------------------- -0.0 0.0 0.0 0.0 0.0 0.0 uPRPInSteady - PRP Steady-state displacements and rotations at the platform reference point (m, rads) -0.0 0.0 0.0 0.0 0.0 0.0 uDotPRPInSteady - PRP Steady-state translational and rotational velocities at the platform reference point (m/s, rads/s) -0.0 0.0 0.0 0.0 0.0 0.0 uDotDotPRPInSteady - PRP Steady-state translational and rotational accelerations at the platform reference point (m/s^2, rads/s^2) ----------------------- Waves multipoint elevation output ---------------------- -FALSE WaveElevSeriesFlag - T/F flag to calculate the wave elevation field (for movies) -5.0 5.0 WaveElevDX WaveElevDY - WaveElevSeries spacing -- WaveElevDX WaveElevDY -3 3 WaveElevNX WaveElevNY - WaveElevSeries points -- WaveElevNX WaveElevNY -END of driver input file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat deleted file mode 100644 index 492e378c0b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_IF_NoHead.dat +++ /dev/null @@ -1,55 +0,0 @@ -------- InflowWind v3.01.* INPUT FILE ------------------------------------------------------------------------- -Turbulent 16 m/s winds at 35m for FAST CertTest #17 ---------------------------------------------------------------------------------------------------------------- -False Echo - Echo input data to .ech (flag) - 4 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined) - 0.0 PropagationDir - Direction of wind propagation (meteoroligical rotation from aligned with X (positive rotates towards -Y) -- degrees) - 1 NWindVel - Number of points to output the wind velocity (0 to 9) - 0 WindVxiList - List of coordinates in the inertial X direction (m) - 0 WindVyiList - List of coordinates in the inertial Y direction (m) - 34.6189 WindVziList - List of coordinates in the inertial Z direction (m) -================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= - 0 HWindSpeed - Horizontal windspeed (m/s) - 34.6189 RefHtT1 - Reference height for horizontal wind speed (m) - 0.2 PLexp - Power law exponent (-) -================== Parameters for Uniform wind file [used only for WindType = 2] ============================ -"Wind/35m_16mps" FilenameT2 - Filename of time series data for uniform wind field. (-) - 34.6189 RefHtT2 - Reference height for horizontal wind speed (m) - 5.8 RefLength - Reference length for linear horizontal and vertical sheer (-) -================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== -"Wind/35m_16mps" FilenameT3 - Name of the Full field wind file to use (.bts) -================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4] ========= -"Wind/35m_16mps" FilenameRoot - Rootname of the full-field wind file to use (.wnd, .sum) -False TowerFile - Have tower file (.twr) (flag) -================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== -"wasp\Output\basic_5u.bin" FileName_u - name of the file containing the u-component fluctuating wind (.bin) -"wasp\Output\basic_5v.bin" FileName_v - name of the file containing the v-component fluctuating wind (.bin) -"wasp\Output\basic_5w.bin" FileName_w - name of the file containing the w-component fluctuating wind (.bin) - 64 nx - number of grids in the x direction (in the 3 files above) (-) - 32 ny - number of grids in the y direction (in the 3 files above) (-) - 32 nz - number of grids in the z direction (in the 3 files above) (-) - 16 dx - distance (in meters) between points in the x direction (m) - 3 dy - distance (in meters) between points in the y direction (m) - 3 dz - distance (in meters) between points in the z direction (m) - 34.6189 RefHtT5 - reference height; the height (in meters) of the vertical center of the grid (m) - ------------- Scaling parameters for turbulence --------------------------------------------------------- - 1 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] - 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] - 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] - 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] - 12 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] - 8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] - 2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] - ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- - 5 URef - Mean u-component wind speed at the reference height (m/s) - 2 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) - 0.2 PLExp - Power law exponent (-) (used for PL wind profile type only) - 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) -====================== OUTPUT ================================================== -False SumPrint - Print summary data to .IfW.sum (flag) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"Wind1VelX" X-direction wind velocity at point WindList(1) -"Wind1VelY" Y-direction wind velocity at point WindList(1) -"Wind1VelZ" Z-direction wind velocity at point WindList(1) -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) ---------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat deleted file mode 100644 index c1e9aa6ca3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v1.dat +++ /dev/null @@ -1,64 +0,0 @@ -------------------- MoorDyn v1.01.* Input File ------------------------------------ -MoorDyn input template for spar mooring with chain bottom segment and bridle attachment -FALSE Echo - echo the input file data (flag) ----------------------- LINE DICTIONARY ----------------------------------------------------- -2 NTypes - number of LineTypes -LineType Diam MassDenInAir EA cIntDamp Can Cat Cdn Cdt -(-) (m) (kg/m) (N) (Pa-s) (-) (-) (-) (-) -chain 0.02 200 400.0e6 -0.8 1.0 0.0 1.6 0.05 -synth 0.02 4.5 121.0e6 -0.8 1.0 0.0 1.6 0.05 ----------------------- POINT PROPERTIES ----------------------------------------------------- -12 NConnects - number of connections including anchors and fairleads -Node Type X Y Z M V FX FY FZ CdA Ca -(-) (-) (m) (m) (m) (kg) (m^3) (kN) (kN) (kN) (m2) () -1 Fixed 656 0.0 -600 0 0 0 0 0 0 0 -2 Connect 590 0.0 -580 0 0 0 0 0 0 0 -3 Connect 20 0.0 -40 0 0 0 0 0 0 0 -4 Fixed -328 568.112 -600 0 0 0 0 0 0 0 -5 Connect -295 510.9549 -580 0 0 0 0 0 0 0 -6 Connect -10 17.3205 -40 0 0 0 0 0 0 0 -7 Fixed -328 -568.1126 -600 0 0 0 0 0 0 0 -8 Connect -295 -510.9549 -580 0 0 0 0 0 0 0 -9 Connect -10 -17.3205 -40 0 0 0 0 0 0 0 -10 Vessel 4.0 -6.928 -21 0 0 0 0 0 0 0 -11 Vessel 4.0 6.928 -21 0 0 0 0 0 0 0 -12 Vessel -8.0 0.0 -21 0 0 0 0 0 0 0 ----------------------- LINE PROPERTIES ----------------------------------------------------- -12 NLines - number of line objects -Line LineType UnstrLen NumSegs NodeAnch NodeFair Flags/Outputs -(-) (-) (m) (-) (-) (-) (-) -1 chain 80.0 10 1 2 - -2 synth 560.0 20 2 3 - -3 synth 30.0 3 3 10 - -4 synth 30.0 3 3 11 - -5 chain 80.0 10 4 5 - -6 synth 560.0 20 5 6 - -7 synth 30.0 3 6 11 - -8 synth 30.0 3 6 12 - -9 chain 80.0 10 7 8 - -10 synth 560.0 20 8 9 - -11 synth 30.0 3 9 12 - -12 synth 30.0 3 9 10 - ----------------------- SOLVER OPTIONS ---------------------------------------- -0.001 dtM - time step to use in mooring integration (s) -3e6 kbot - bottom stiffness (Pa/m) -3e5 cbot - bottom damping (Pa-s/m) -2 dtIC - time interval for analyzing convergence during IC gen (s) -600 TmaxIC - max time for ic gen (s) -10 CdScaleIC - factor by which to scale drag coefficients during dynamic relaxation (-) -0.01 threshIC - threshold for IC convergence (-) -----------------------------OUTPUTS-------------------------------------------- -FairTen1 -FairTen2 -FairTen3 -FairTen4 -FairTen5 -FairTen6 -FairTen7 -FairTen8 -FairTen9 -FairTen10 -FairTen11 -FairTen12 -END ---------------------- need this line ------------------ \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat deleted file mode 100644 index 226bc4435d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_MD-v2.dat +++ /dev/null @@ -1,39 +0,0 @@ ---------------------- MoorDyn Input File ------------------------------------ -Mooring system for OC4-DeepCwind Semi -FALSE Echo - echo the input file data (flag) ------------------------ LINE TYPES ------------------------------------------ -Name Diam MassDen EA BA/-zeta EI Cd Ca CdAx CaAx -(-) (m) (kg/m) (N) (N-s/-) (-) (-) (-) (-) (-) -main 0.0766 113.35 7.536E8 -1.0 0 2.0 0.8 0.4 0.25 ----------------------- POINTS -------------------------------- -ID Attachment X Y Z M V CdA CA -(-) (-) (m) (m) (m) (kg) (m^3) (m^2) (-) -1 Fixed 418.8 725.383 -200.0 0 0 0 0 -2 Fixed -837.6 0.0 -200.0 0 0 0 0 -3 Fixed 418.8 -725.383 -200.0 0 0 0 0 -4 Vessel 20.434 35.393 -14.0 0 0 0 0 -5 Vessel -40.868 0.0 -14.0 0 0 0 0 -6 Vessel 20.434 -35.393 -14.0 0 0 0 0 ----------------------- LINES -------------------------------------- -ID LineType AttachA AttachB UnstrLen NumSegs Outputs -(-) (-) (-) (-) (m) (-) (-) -1 main 1 4 835.35 20 - -2 main 2 5 835.35 20 - -3 main 3 6 835.35 20 - ----------------------- SOLVER OPTIONS --------------------------------------- -0.001 dtM - time step to use in mooring integration (s) -3.0e6 kbot - bottom stiffness (Pa/m) -3.0e5 cbot - bottom damping (Pa-s/m) -2.0 dtIC - time interval for analyzing convergence during IC gen (s) -60.0 TmaxIC - max time for ic gen (s) -4.0 CdScaleIC - factor by which to scale drag coefficients during dynamic relaxation (-) -0.01 threshIC - threshold for IC convergence (-) ------------------------- OUTPUTS -------------------------------------------- -FairTen1 -FairTen2 -FairTen3 -AnchTen1 -AnchTen2 -AnchTen3 -END -------------------------- need this line -------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat deleted file mode 100644 index 9b37f34d70..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SD.dat +++ /dev/null @@ -1,97 +0,0 @@ -------- SERVODYN v1.05.* INPUT FILE -------------------------------------------- -FAST certification Test #16: FAST m ----------------------- SIMULATION C -False Echo - Echo i - 0.001 DT - Commun ----------------------- PITCH CONTRO - 0 PCMode - Pitch - 9999.9 TPCOn - Time t - 9999.9 TPitManS(1) - Time t - 9999.9 TPitManS(2) - Time t - 9999.9 TPitManS(3) - Time t - 2 PitManRat(1) - Pitch - 2 PitManRat(2) - Pitch - 2 PitManRat(3) - Pitch - 11.44 BlPitchF(1) - Blade - 11.44 BlPitchF(2) - Blade - 11.44 BlPitchF(3) - Blade ----------------------- GENERATOR AN - 3 VSContrl - Variab - 1 GenModel - Genera - 83 GenEff - Genera -True GenTiStr - Method -True GenTiStp - Method - 9999.9 SpdGenOn - Genera - 0 TimGenOn - Time t - 9999.9 TimGenOf - Time t ----------------------- SIMPLE VARIA - 9999.9 VS_RtGnSp - Rated - 9999.9 VS_RtTq - Rated - 9999.9 VS_Rgn2K - Genera - 9999.9 VS_SlPc - Rated ----------------------- SIMPLE INDUC - 9999.9 SIG_SlPc - Rated - 9999.9 SIG_SySp - Synchr - 9999.9 SIG_RtTq - Rated - 9999.9 SIG_PORt - Pull-o ----------------------- THEVENIN-EQU - 9999.9 TEC_Freq - Line f - 9998 TEC_NPol - Number - 9999.9 TEC_SRes - Stator - 9999.9 TEC_RRes - Rotor - 9999.9 TEC_VLL - Line-t - 9999.9 TEC_SLR - Stator - 9999.9 TEC_RLR - Rotor - 9999.9 TEC_MR - Magnet ----------------------- HIGH-SPEED S - 0 HSSBrMode - HSS br - 9999.9 THSSBrDp - Time t - 9999.9 HSSBrDT - Time f - 9999.9 HSSBrTqF - Fully ----------------------- NACELLE-YAW - 0 YCMode - Yaw co - 9999.9 TYCOn - Time t - 0 YawNeut - Neutra - 0 YawSpr - Nacell - 0 YawDamp - Nacell - 9999.9 TYawManS - Time t - 2 YawManRat - Yaw ma - 0 NacYawF - Final ----------------------- TUNED MASS D -False CompNTMD - Comput -"unused" NTMDfile - Name o -False CompTTMD - Comput -"unused" TTMDfile - Name o ----------------------- BLADED INTER -"unused" DLL_FileName - Name/l -"DISCON.IN" DLL_InFile - Name -"DISCON" DLL_ProcName - Name o -"default" DLL_DT - Commun -false DLL_Ramp - Whethe - 9999.9 BPCutoff - Cuttof - 0 NacYaw_North - Refere - 0 Ptch_Cntrl - Record - 0 Ptch_SetPnt - Record - 0 Ptch_Min - Record - 0 Ptch_Max - Record - 0 PtchRate_Min - Record - 0 PtchRate_Max - Record - 0 Gain_OM - Record - 0 GenSpd_MinOM - Record - 0 GenSpd_MaxOM - Record - 0 GenSpd_Dem - Record - 0 GenTrq_Dem - Record - 0 GenPwr_Dem - Record ----------------------- BLADED INTER - 0 DLL_NumTrq - Record - GenSpd_TLU GenTrq_TLU - (rpm) (Nm) ----------------------- OUTPUT ----- -True SumPrint - Print - 1 OutFile - Switch -True TabDelim - Use ta -"ES10.3E2" OutFmt - Format - 5 TStart - Time t - OutList - The ne -END of input file (the word "END" m ------------------------------------ diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat deleted file mode 100644 index 9ece3bf43f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD.dat +++ /dev/null @@ -1,70 +0,0 @@ ------------ SubDyn v1.01.x MultiMember Support Structure Input File ------------ -OC3 Monopile configuration (pile only). ----- SIMULATION CONTROL --------------------------------- -False Echo - Echo input data to ".SD.ech" (flag) -"DEFAULT" SDdeltaT - Local Integration Step. If "default", the glue-code integration step will be used. - 3 IntMethod - Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2]. -False SttcSolve - Solve dynamics about static equilibrium point ----- FEA and CRAIG-BAMPTON PARAMETERS--------------------------- - 1 FEMMod - FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B); 2=Tapered E-B (unavailable); 3= 2-node Timoshenko; 4= 2-node tapered Timoshenko (unavailable)] - 10 NDiv - Number of sub-elements per member -True CBMod - [T/F] If True perform C-B reduction, else full FEM dofs will be retained. If True, select Nmodes to retain in C-B reduced system. - 2 Nmodes - Number of internal modes to retain (ignored if CBMod=False). If Nmodes=0 --> Guyan Reduction. - 10 JDampings - Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes). ----- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)--- - 2 NJoints - Number of joints (-) -JointID JointXss JointYss JointZss [Coordinates of Member joints in SS-Coordinate System] - (-) (m) (m) (m) - 1 0.00000 0.00000 -100.00000 - 2 0.00000 0.00000 0.00000 ------ BASE REACTION JOINTS: 1/0 for Locked/Free DOF @ each Reaction Node --------------------- - 1 NReact - Number of Joints with reaction forces; be sure to remove all rigid motion DOFs of the structure (else det([K])=[0]) -RJointID RctTDXss RctTDYss RctTDZss RctRDXss RctRDYss RctRDZss SSIFile [Global Coordinate System] - (-) (flag) (flag) (flag) (flag) (flag) (flag) (-) - 1 1 1 1 1 1 1 "soil.txt" -------- INTERFACE JOINTS: 1/0 for Locked (to the TP)/Free DOF @each Interface Joint (only Locked-to-TP implemented thus far (=rigid TP)) --------- - 1 NInterf - Number of interface joints locked to the Transition Piece (TP): be sure to remove all rigid motion dofs -IJointID ItfTDXss ItfTDYss ItfTDZss ItfRDXss ItfRDYss ItfRDZss [Global Coordinate System] - (-) (flag) (flag) (flag) (flag) (flag) (flag) - 2 1 1 1 1 1 1 -------- MEMBERS -------------------------------------- - 1 NMembers - Number of frame members -MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 COSMID - (-) (-) (-) (-) (-) (-) - 1 1 2 1 1 -------- MEMBER X-SECTION PROPERTY data 1/2 [isotropic material for now: use this table for circular-tubular elements] ------------------------ - 1 NPropSets - Number of structurally unique x-sections (i.e. how many groups of X-sectional properties are utilized throughout all of the members) -PropSetID YoungE ShearG MatDens XsecD XsecT - (-) (N/m2) (N/m2) (kg/m3) (m) (m) - 1 2.10000e+11 7.93000e+10 7500.00 8.000000 0.045000 -------- MEMBER X-SECTION PROPERTY data 2/2 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below] ------------------------ - 0 NXPropSets - Number of structurally unique non-circular x-sections (if 0 the following table is ignored) -PropSetID YoungE ShearG MatDens XsecA XsecAsx XsecAsy XsecJxx XsecJyy XsecJ0 - (-) (N/m2) (N/m2) (kg/m3) (m2) (m2) (m2) (m4) (m4) (m4) --------- MEMBER COSINE MATRICES COSM(i,j) ------------------------ - 0 NCOSMs - Number of unique cosine matrices (i.e., of unique member alignments including principal axis rotations); ignored if NXPropSets=0 or 9999 in any element below -COSMID COSM11 COSM12 COSM13 COSM21 COSM22 COSM23 COSM31 COSM32 COSM33 - (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) -------- JOINT ADDITIONAL CONCENTRATED MASSES-------------------------- - 0 NCmass - Number of joints with concentrated masses; Global Coordinate System -CMJointID JMass JMXX JMYY JMZZ - (-) (kg) (kg*m^2) (kg*m^2) (kg*m^2) ----------------------------- OUTPUT: SUMMARY & OUTFILE ------------------------------ -True SSSum - Output a Summary File (flag).It contains: matrices K,M and C-B reduced M_BB, M-BM, K_BB, K_MM(OMG^2), PHI_R, PHI_L. It can also contain COSMs if requested. -False OutCOSM - Output cosine matrices with the selected output member forces (flag) -False OutAll - [T/F] Output all members' end forces - 2 OutSwtch - [1/2/3] Output requested channels to: 1=.SD.out; 2=.out (generated by FAST); 3=both files. -True TabDelim - Generate a tab-delimited output in the .SD.out file - 1 OutDec - Decimation of output in the .SD.out file -"ES11.4e2" OutFmt - Output format for numerical results in the .SD.out file -"A11" OutSFmt - Output format for header strings in the .SD.out file -------------------------- MEMBER OUTPUT LIST ------------------------------------------ - 1 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 9]. -MemberID NOutCnt NodeCnt [NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well. - (-) (-) (-) - 1 1 1 -------------------------- SSOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------ -"M1N1MKxe, M1N1MKye" - The local side-to-side and fore-aft bending moments at node 1 of member 1 -"-ReactFXss, -ReactFYss, -ReactFZss" - Base reactions: fore-aft shear, side-to-side shear and vertical forces at the mudline. -"-ReactMXss, -ReactMYss, -ReactMZss" - Base reactions: side-to-side, fore-aft and yaw moments at the mudline. -END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat deleted file mode 100644 index 24a982b4de..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_SbD_comments.dat +++ /dev/null @@ -1,165 +0,0 @@ ------------ SubDyn MultiMember Support Structure Input File ------------ -BIWF 'Jacket' SubStructure Input File. The grouted connection is simulated with an equivalent tubular beam of enhanced properties. RRD 10/15/2013 --------------------------- SIMULATION CONTROL --------------------------------- -False Echo - Echo input data to ".SD.ech" (flag) -"DEFAULT" SDdeltaT - Local Integration Step. If "default", the glue-code integration step will be used. - 3 IntMethod - Integration Method [1/2/3/4 = RK4/AB4/ABM4/AM2]. -True SttcSolve - Solve dynamics about static equilibrium point -True GuyanLoadCorrection - Include extra moment from lever arm at interface and rotate FEM for floating. --------------------- FEA and CRAIG-BAMPTON PARAMETERS--------------------------- - 1 FEMMod - FEM switch: element model in the FEM. [1= Euler-Bernoulli(E-B); 2=Tapered E-B (unavailable); 3= 2-node Timoshenko; 4= 2-node tapered Timoshenko (unavailable)] - 1 NDiv - Number of sub-elements per member -True CBMod - [T/F] If True perform C-B reduction, else full FEM dofs will be retained. If True, select Nmodes to retain in C-B reduced system. - 8 Nmodes - Number of internal modes to retain (ignored if CBMod=False). If Nmodes=0 --> Guyan Reduction. - 1 JDampings - Damping Ratios for each retained mode (% of critical) If Nmodes>0, list Nmodes structural damping ratios for each retained mode (% of critical), or a single damping ratio to be applied to all retained modes. (last entered value will be used for all remaining modes). - 0 GuyanDampMod - Guyan damping {0=none, 1=Rayleigh Damping, 2=user specified 6x6 matrix} - 0.000, 0.000 RayleighDamp - Mass and stiffness proportional damping coefficients (Rayleigh Damping) [only if GuyanDampMod=1] - 6 GuyanDampSize - Guyan damping matrix (6x6) [only if GuyanDampMod=2] - 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 - 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 - 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 - 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 - 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 - 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 ----- STRUCTURE JOINTS: joints connect structure members (~Hydrodyn Input File)--- - 19 NJoints - Number of joints (-) -JointID JointXss JointYss JointZss JointType JointDirX JointDirY JointDirZ JointStiff ! Comment Columns - (-) (m) (m) (m) (-) (-) (-) (-) (Nm/rad) ! Comment unit - 43 0.00000 0.00000 23.20000 1 0.0 0.0 0.0 0.0 ! First tower node - 44 0.00000 0.00000 28.50000 1 0.0 0.0 0.0 0.0 - 45 0.00000 0.00000 30.30000 1 0.0 0.0 0.0 0.0 - 46 0.00000 0.00000 35.30000 1 0.0 0.0 0.0 0.0 - 47 0.00000 0.00000 40.30000 1 0.0 0.0 0.0 0.0 - 48 0.00000 0.00000 45.30000 1 0.0 0.0 0.0 0.0 - 49 0.00000 0.00000 49.90000 1 0.0 0.0 0.0 0.0 - 50 0.00000 0.00000 52.75000 1 0.0 0.0 0.0 0.0 - 51 0.00000 0.00000 60.82000 1 0.0 0.0 0.0 0.0 - 52 0.00000 0.00000 74.40000 1 0.0 0.0 0.0 0.0 - 53 0.00000 0.00000 77.73000 1 0.0 0.0 0.0 0.0 - 54 0.00000 0.00000 81.06000 1 0.0 0.0 0.0 0.0 - 55 0.00000 0.00000 84.39000 1 0.0 0.0 0.0 0.0 - 56 0.00000 0.00000 87.72000 1 0.0 0.0 0.0 0.0 - 57 0.00000 0.00000 91.05000 1 0.0 0.0 0.0 0.0 - 58 0.00000 0.00000 94.38000 1 0.0 0.0 0.0 0.0 - 59 0.00000 0.00000 97.71000 1 0.0 0.0 0.0 0.0 - 60 0.00000 0.00000 100.0930 1 0.0 0.0 0.0 0.0 - 61 0.00000 0.00000 102.7930 1 0.0 0.0 0.0 0.0 ! Tower top -------------------- BASE REACTION JOINTS: 1/0 for Locked/Free DOF @ each Reaction Node --------------------- - 1 NReact - Number of Joints with reaction forces; be sure to remove all rigid motion DOFs of the structure (else det([K])=[0]) -RJointID RctTDXss RctTDYss RctTDZss RctRDXss RctRDYss RctRDZss SSIfile [Global Coordinate System] ! Comment colnames - (-) (flag) (flag) (flag) (flag) (flag) (flag) (string) ! Comment units - 43 1 1 1 1 1 1 "" ! Tower top -------- INTERFACE JOINTS: 1/0 for Locked (to the TP)/Free DOF @each Interface Joint (only Locked-to-TP implemented thus far (=rigid TP)) --------- - 1 NInterf - Number of interface joints locked to the Transition Piece (TP): be sure to remove all rigid motion dofs -IJointID ItfTDXss ItfTDYss ItfTDZss ItfRDXss ItfRDYss ItfRDZss [Global Coordinate System] ! Comment - (-) (flag) (flag) (flag) (flag) (flag) (flag) ! Comment - 61 1 1 1 1 1 1 ! Tower top ------------------------------------ MEMBERS -------------------------------------- - 18 NMembers - Number of frame members -MemberID MJointID1 MJointID2 MPropSetID1 MPropSetID2 MType COSMID ! Column headers - (-) (-) (-) (-) (-) (-) (-) - 77 61 60 11 11 1 ! Tower top - 78 60 59 12 12 1 ! Tower top - 79 59 58 13 13 1 - 80 58 57 14 14 1 - 81 57 56 15 15 1 - 82 56 55 16 16 1 - 83 55 54 17 17 1 - 84 54 53 18 18 1 - 85 53 52 19 19 1 - 86 52 51 20 20 1 - 87 51 50 21 21 1 - 88 50 49 22 22 1 - 89 49 48 23 23 1 - 90 48 47 24 24 1 - 91 47 46 25 25 1 - 92 46 45 26 26 1 - 93 45 44 27 27 1 - 94 44 43 28 28 1 ------------------- MEMBER X-SECTION PROPERTY data 1/2 [isotropic material for now: use this table for circular-tubular elements] ------------------------ - 26 NPropSets - Number of structurally unique x-sections (i.e. how many groups of X-sectional properties are utilized throughout all of the members) -PropSetID YoungE ShearG MatDens XsecD XsecT - (-) (N/m2) (N/m2) (kg/m3) (m) (m) - 1 2.00000e+11 8.07690e+10 8000.00 0.60960 0.015875 - 2 2.00000e+11 8.07690e+10 8000.00 0.76200 0.019050 - 3 2.00000e+11 8.07690e+10 8000.00 0.91440 0.019050 - 4 2.00000e+11 8.07690e+10 8000.00 1.52400 0.063500 - 5 2.00000e+11 8.07690e+10 8000.00 1.62560 0.012700 - 6 2.00000e+11 8.07690e+10 8000.00 1.72720 0.025400 - 11 2.00000e+11 8.07690e+10 8000.00 4.09400 0.03800 ! tower - 12 2.00000e+11 8.07690e+10 8000.00 4.27000 0.02800 ! tower - 13 2.00000e+11 8.07690e+10 8000.00 4.46800 0.02400 ! tower - 14 2.00000e+11 8.07690e+10 8000.00 4.70000 0.02400 ! tower - 15 2.00000e+11 8.07690e+10 8000.00 4.93100 0.02400 ! tower - 16 2.00000e+11 8.07690e+10 8000.00 5.16200 0.02400 ! tower - 17 2.00000e+11 8.07690e+10 8000.00 5.39300 0.02400 ! tower - 18 2.00000e+11 8.07690e+10 8000.00 5.62400 0.02400 ! tower - 19 2.00000e+11 8.07690e+10 8000.00 5.85500 0.02400 ! tower - 20 2.00000e+11 8.07690e+10 8000.00 5.97100 0.02400 ! tower - 21 2.00000e+11 8.07690e+10 8000.00 5.97300 0.02500 ! tower - 22 2.00000e+11 8.07690e+10 8000.00 5.97300 0.02600 ! tower - 23 2.00000e+11 8.07690e+10 8000.00 5.98100 0.02600 ! tower - 24 2.00000e+11 8.07690e+10 8000.00 5.98200 0.02700 ! tower - 25 2.00000e+11 8.07690e+10 8000.00 5.98400 0.02800 ! tower - 26 2.00000e+11 8.07690e+10 8000.00 5.98500 0.02900 ! tower - 27 2.00000e+11 8.07690e+10 8000.00 5.98700 0.03600 ! tower - 28 2.00000e+11 8.07690e+10 8000.00 5.98700 0.03800 ! tower - 29 2.00000e+11 8.07690e+10 8000.00 5.98900 0.04200 ! tower - 30 2.00000e+12 8.07690e+10 0.00 1.72720 0.02540 ! "rigid dummy beam" ------------------- MEMBER X-SECTION PROPERTY data 2/2 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below] ------------------------ - 0 NXPropSets - Number of structurally unique non-circular x-sections (if 0 the following table is ignored) -PropSetID YoungE ShearG MatDens XsecA XsecAsx XsecAsy XsecJxx XsecJyy XsecJ0 - (-) (N/m2) (N/m2) (kg/m3) (m2) (m2) (m2) (m4) (m4) (m4) --------------------------- CABLE PROPERTIES ------------------------------------- - 0 NCablePropSets - Number of cable cable properties -PropSetID EA MatDens T0 - (-) (N) (kg/m) (N) ------------------------ RIGID LINK PROPERTIES ------------------------------------ - 0 NRigidPropSets - Number of rigid link properties -PropSetID MatDens - (-) (kg/m) ----------------------- MEMBER COSINE MATRICES COSM(i,j) ------------------------ - 0 NCOSMs - Number of unique cosine matrices (i.e., of unique member alignments including principal axis rotations); ignored if NXPropSets=0 or 9999 in any element below -COSMID COSM11 COSM12 COSM13 COSM21 COSM22 COSM23 COSM31 COSM32 COSM33 - (-) (-) (-) (-) (-) (-) (-) (-) (-) (-) ------------------------- JOINT ADDITIONAL CONCENTRATED MASSES-------------------------- - 8 NCmass - Number of joints with concentrated masses; Global Coordinate System -CMJointID JMass JMXX JMYY JMZZ JMXY JMXZ JMYZ MCGX MCGY MCGZ - (-) (kg) (kg*m^2) (kg*m^2) (kg*m^2) (kg*m^2) (kg*m^2) (kg*m^2) (m) (m) (m) - 1 5355 0 0 0 0 0 0 0 0 0 - 2 5355 0 0 0 0 0 0 0 0 0 - 3 5355 0 0 0 0 0 0 0 0 0 - 4 5355 0 0 0 0 0 0 0 0 0 - 36 5355 0 0 0 0 0 0 0 0 0 - 37 5355 0 0 0 0 0 0 0 0 0 - 38 5355 0 0 0 0 0 0 0 0 0 - 39 5355 0 0 0 0 0 0 0 0 0 ----------------------------- OUTPUT: SUMMARY & OUTFILE ------------------------------ -True SumPrint - Output a Summary File (flag).It contains: matrices K,M and C-B reduced M_BB, M-BM, K_BB, K_MM(OMG^2), PHI_R, PHI_L. It can also contain COSMs if requested. -False OutCOSM - Output cosine matrices with the selected output member forces (flag) -False OutAll - [T/F] Output all members' end forces - 2 OutSwtch - [1/2/3] Output requested channels to: 1=.SD.out; 2=.out (generated by FAST); 3=both files. -True TabDelim - Generate a tab-delimited output in the .SD.out file - 1 OutDec - Decimation of output in the .SD.out file -"ES11.4e2" OutFmt - Output format for numerical results in the .SD.out file -"A11" OutSFmt - Output format for header strings in the .SD.out file -------------------------- MEMBER OUTPUT LIST ------------------------------------------ - 8 NMOutputs - Number of members whose forces/displacements/velocities/accelerations will be output (-) [Must be <= 9]. -MemberID NOutCnt NodeCnt [NOutCnt=how many nodes to get output for [< 10]; NodeCnt are local ordinal numbers from the start of the member, and must be >=1 and <= NDiv+1] If NMOutputs=0 leave blank as well. - (-) (-) (-) - 30 2 1 2 ! M1 - 31 2 1 2 ! M2 - 32 2 1 2 ! M3 - 58 2 1 2 ! M4 - 26 2 1 2 ! M5 - 27 2 1 2 ! M6 - 28 2 1 2 ! M7 - 29 2 1 2 ! M8 -------------------------- SDOutList: The next line(s) contains a list of output parameters that will be output in .SD.out or .out. ------ -"M1N1FKZe, M2N1FKZe" - Axial force in leg 2 at K1L2 and in leg 4 at K1L4 -"M3N1TDXss, M3N1TDYss, M3N1TDZss, M4N1TDXss, M4N1TDYss, M4N1TDZss" - Deflections at X2S2, X2S3: use cosdir matrix to get Out-of-plane (OOP) deflection -"M5N2TDXss, M5N2TDYss, M5N2TDZss, M6N2TDXss, M6N2TDYss, M6N2TDZss" - Deflections at X4S2, X4S3: use cosdir matrix to get OOP deflection -"M5N1FKXe,M5N1FKYe,M5N1FKZe,M6N1FKXe,M6N1FKYe,M6N1FKZe" - Forces OOP and Axial at mid brace points x,y, z >> *we will need to do some post-processing using the direction cosine matrices to get OOP forces -"M7N1FKZe, M8N1FKZe" - Axial force in leg 2 and leg 4 at mudbrace level: MudbraceL2, MudbraceL4 -"-ReactFXss, -ReactFYss, -ReactMXss, -ReactMYss, -ReactMZss, -ReactFZss" - Base reactions: fore-aft shear, side-to-side shear, side-to-side moment, fore-aft moment, yaw moment, vertical force -END of output channels and end of file. (the word "END" must appear in the first 3 columns of this line) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat deleted file mode 100644 index aa29daac5e..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_TurbSim.dat +++ /dev/null @@ -1,74 +0,0 @@ ----------TurbSim v2.00.* Input File------------------------ -Example input file for TurbSim. ----------Runtime Options----------------------------------- -False Echo - Echo input data to .ech (flag) -2318573 RandSeed1 - First random seed (-2147483648 to 2147483647) -RANLUX RandSeed2 - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW" -False WrBHHTP - Output hub-height turbulence parameters in binary form? (Generates RootName.bin) -False WrFHHTP - Output hub-height turbulence parameters in formatted form? (Generates RootName.dat) -False WrADHH - Output hub-height time-series data in AeroDyn form? (Generates RootName.hh) -False WrADFF - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts) -True WrBLFF - Output full-field time-series data in BLADED/AeroDyn form? (Generates RootName.wnd) -False WrADTWR - Output tower time-series data? (Generates RootName.twr) -False WrFMTFF - Output full-field time-series data in formatted (readable) form? (Generates RootName.u, RootName.v, RootName.w) -False WrACT - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts) -True Clockwise - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn) - 0 ScaleIEC - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales] - ---------Turbine/Model Specifications----------------------- -13 NumGrid_Z - Vertical grid-point matrix dimension -13 NumGrid_Y - Horizontal grid-point matrix dimension -0.05 TimeStep - Time step [seconds] -600 AnalysisTime - Length of analysis time series [seconds] (program will add time if necessary: AnalysisTime = MAX(AnalysisTime, UsableTime+GridWidth/MeanHHWS) ) -"ALL" UsableTime - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds unless UsableTime is "ALL") -84.2876 HubHt - Hub height [m] (should be > 0.5*GridHeight) -80.00 GridHeight - Grid height [m] -80.00 GridWidth - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength)) -0 VFlowAng - Vertical mean flow (uptilt) angle [degrees] -0 HFlowAng - Horizontal mean flow (skew) angle [degrees] - ---------Meteorological Boundary Conditions------------------- -"SMOOTH" TurbModel - Turbulence model ("IECKAI","IECVKM","GP_LLJ","NWTCUP","SMOOTH","WF_UPW","WF_07D","WF_14D","TIDAL","API","USRINP","TIMESR", or "NONE") -"unused" UserFile - Name of the file that contains inputs for user-defined spectra or time series inputs (used only for "USRINP" and "TIMESR" models) -"1-Ed3" IECstandard - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") ) -"A" IECturbc - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP model, not used for other models) -"NTM" IEC_WindType - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3) -default ETMc - IEC Extreme Turbulence Model "c" parameter [m/s] -"PL" WindProfileType - Velocity profile type ("LOG";"PL"=power law;"JET";"H2L"=Log law for TIDAL model;"API";"USR";"TS";"IEC"=PL on rotor disk, LOG elsewhere; or "default") -"unused" ProfileFile - Name of the file that contains input profiles for WindProfileType="USR" and/or TurbModel="USRVKM" [-] -84.2876 RefHt - Height of the reference velocity (URef) [m] -18.2 URef - Mean (total) velocity at the reference height [m/s] (or "default" for JET velocity profile) [must be 1-hr mean for API model; otherwise is the mean over AnalysisTime seconds] -default ZJetMax - Jet height [m] (used only for JET velocity profile, valid 70-490 m) -default PLExp - Power law exponent [-] (or "default") -default Z0 - Surface roughness length [m] (or "default") - ---------Non-IEC Meteorological Boundary Conditions------------ -default Latitude - Site latitude [degrees] (or "default") -0.05 RICH_NO - Gradient Richardson number [-] -default UStar - Friction or shear velocity [m/s] (or "default") -default ZI - Mixing layer depth [m] (or "default") -default PC_UW - Hub mean u'w' Reynolds stress [m^2/s^2] (or "default" or "none") -default PC_UV - Hub mean u'v' Reynolds stress [m^2/s^2] (or "default" or "none") -default PC_VW - Hub mean v'w' Reynolds stress [m^2/s^2] (or "default" or "none") - ---------Spatial Coherence Parameters---------------------------- -default SCMod1 - u-component coherence model ("GENERAL", "IEC", "API", "NONE", or "default") -default SCMod2 - v-component coherence model ("GENERAL", "IEC", "NONE", or "default") -default SCMod3 - w-component coherence model ("GENERAL", "IEC", "NONE", or "default") -default InCDec1 - u-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -default InCDec2 - v-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -default InCDec3 - w-component coherence parameters for general or IEC models [-, m^-1] (e.g. "10.0 0.3e-3" in quotes) (or "default") -default CohExp - Coherence exponent for general model [-] (or "default") - ---------Coherent Turbulence Scaling Parameters------------------- -"../tests/example_files/EventData" CTEventPath - Name of the path where event data files are located -"Random" CTEventFile - Type of event files ("LES", "DNS", or "RANDOM") -true Randomize - Randomize the disturbance scale and locations? (true/false) - 1.0 DistScl - Disturbance scale [-] (ratio of event dataset height to rotor disk). (Ignored when Randomize = true.) - 0.5 CTLy - Fractional location of tower centerline from right [-] (looking downwind) to left side of the dataset. (Ignored when Randomize = true.) - 0.5 CTLz - Fractional location of hub height from the bottom of the dataset. [-] (Ignored when Randomize = true.) -30.0 CTStartTime - Minimum start time for coherent structures in RootName.cts [seconds] - -==================================================== -! NOTE: Do not add or remove any lines in this file! -==================================================== \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt deleted file mode 100644 index aa31ac26b2..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTIn_arf_coords.txt +++ /dev/null @@ -1,407 +0,0 @@ - 400 NumCoords ! The number of coordinates in the airfoil shape file (including an extra coordinate for airfoil reference). Set to zero if coordinates not included. -! ......... x-y coordinates are next if NumCoords > 0 ............. -! x-y coordinate of airfoil reference -! x/c y/c -0.25 0 -! coordinates of airfoil shape; data from TU Delft as posted here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=2&t=440 -! NACA 64-618 (interpolated to 399 points) -! x/c y/c -1.000000 0.000000 -0.990000 0.003385 -0.980000 0.006126 -0.975000 0.007447 -0.970000 0.008767 -0.965000 0.010062 -0.960000 0.011357 -0.955000 0.012639 -0.950000 0.013921 -0.945000 0.015200 -0.940000 0.016478 -0.935000 0.017757 -0.930000 0.019036 -0.925000 0.020317 -0.920000 0.021598 -0.915000 0.022881 -0.910000 0.024163 -0.905000 0.025448 -0.900000 0.026733 -0.887500 0.029951 -0.875000 0.033169 -0.862500 0.036386 -0.850000 0.039603 -0.837500 0.042804 -0.825000 0.046004 -0.812500 0.049171 -0.800000 0.052337 -0.787500 0.055452 -0.775000 0.058566 -0.762500 0.061611 -0.750000 0.064656 -0.737500 0.067615 -0.725000 0.070573 -0.712500 0.073429 -0.700000 0.076285 -0.687500 0.079029 -0.675000 0.081773 -0.662500 0.084393 -0.650000 0.087012 -0.637500 0.089490 -0.625000 0.091967 -0.612500 0.094283 -0.600000 0.096599 -0.587500 0.098743 -0.575000 0.100887 -0.562500 0.102843 -0.550000 0.104799 -0.537500 0.106549 -0.525000 0.108299 -0.512500 0.109830 -0.500000 0.111360 -0.487500 0.112649 -0.475000 0.113937 -0.462500 0.114964 -0.450000 0.115990 -0.445000 0.116320 -0.440000 0.116650 -0.435000 0.116931 -0.430000 0.117211 -0.425000 0.117439 -0.420000 0.117667 -0.415000 0.117835 -0.410000 0.118003 -0.405000 0.118104 -0.400000 0.118204 -0.395000 0.118231 -0.390000 0.118258 -0.385000 0.118213 -0.380000 0.118168 -0.375000 0.118057 -0.370000 0.117946 -0.365000 0.117777 -0.360000 0.117607 -0.355000 0.117383 -0.350000 0.117159 -0.345000 0.116881 -0.340000 0.116603 -0.335000 0.116273 -0.330000 0.115942 -0.325000 0.115562 -0.320000 0.115181 -0.315000 0.114750 -0.310000 0.114319 -0.305000 0.113838 -0.300000 0.113356 -0.295000 0.112824 -0.290000 0.112292 -0.285000 0.111710 -0.280000 0.111127 -0.275000 0.110495 -0.270000 0.109863 -0.265000 0.109180 -0.260000 0.108497 -0.255000 0.107762 -0.250000 0.107027 -0.245000 0.106241 -0.240000 0.105454 -0.235000 0.104614 -0.230000 0.103774 -0.225000 0.102880 -0.220000 0.101985 -0.215000 0.101035 -0.210000 0.100084 -0.205000 0.099076 -0.200000 0.098068 -0.195000 0.097001 -0.190000 0.095934 -0.185000 0.094805 -0.180000 0.093676 -0.175000 0.092484 -0.170000 0.091291 -0.165000 0.090032 -0.160000 0.088772 -0.155000 0.087441 -0.150000 0.086110 -0.145000 0.084704 -0.140000 0.083298 -0.135000 0.081814 -0.130000 0.080329 -0.125000 0.078759 -0.120000 0.077188 -0.115000 0.075525 -0.110000 0.073862 -0.105000 0.072098 -0.100000 0.070334 -0.097500 0.069412 -0.095000 0.068489 -0.092500 0.067537 -0.090000 0.066584 -0.087500 0.065601 -0.085000 0.064617 -0.082500 0.063600 -0.080000 0.062583 -0.077500 0.061531 -0.075000 0.060478 -0.072500 0.059388 -0.070000 0.058297 -0.067500 0.057165 -0.065000 0.056032 -0.062500 0.054854 -0.060000 0.053676 -0.057500 0.052447 -0.055000 0.051218 -0.052500 0.049933 -0.050000 0.048647 -0.047500 0.047299 -0.045000 0.045950 -0.042500 0.044530 -0.040000 0.043110 -0.037500 0.041606 -0.035000 0.040102 -0.032500 0.038501 -0.030000 0.036899 -0.027500 0.035177 -0.025000 0.033454 -0.022500 0.031574 -0.020000 0.029694 -0.018750 0.028680 -0.017500 0.027666 -0.016250 0.026589 -0.015000 0.025511 -0.013750 0.024354 -0.012500 0.023197 -0.011250 0.021936 -0.010000 0.020674 -0.009500 0.020131 -0.009000 0.019587 -0.008500 0.019017 -0.008000 0.018447 -0.007500 0.017844 -0.007000 0.017241 -0.006500 0.016598 -0.006000 0.015955 -0.005500 0.015260 -0.005000 0.014565 -0.004500 0.013801 -0.004000 0.013037 -0.003500 0.012167 -0.003000 0.011296 -0.002500 0.010262 -0.002000 0.009227 -0.001875 0.008930 -0.001750 0.008633 -0.001625 0.008315 -0.001500 0.007997 -0.001375 0.007655 -0.001250 0.007312 -0.001125 0.006934 -0.001000 0.006555 -0.000875 0.006125 -0.000750 0.005695 -0.000625 0.005184 -0.000500 0.004672 -0.000400 0.004190 -0.000350 0.003913 -0.000300 0.003636 -0.000200 0.002970 -0.000100 0.002104 -0.000050 0.001052 -0.000000 0.000000 -0.000050 -0.001046 -0.000100 -0.002092 -0.000200 -0.002954 -0.000300 -0.003613 -0.000350 -0.003891 -0.000400 -0.004169 -0.000500 -0.004658 -0.000625 -0.005178 -0.000750 -0.005698 -0.000875 -0.006135 -0.001000 -0.006572 -0.001125 -0.006956 -0.001250 -0.007340 -0.001375 -0.007684 -0.001500 -0.008027 -0.001625 -0.008341 -0.001750 -0.008654 -0.001875 -0.008943 -0.002000 -0.009231 -0.002500 -0.010204 -0.003000 -0.011176 -0.003500 -0.011953 -0.004000 -0.012729 -0.004500 -0.013380 -0.005000 -0.014030 -0.005500 -0.014595 -0.006000 -0.015160 -0.006500 -0.015667 -0.007000 -0.016174 -0.007500 -0.016636 -0.008000 -0.017098 -0.008500 -0.017526 -0.009000 -0.017953 -0.009500 -0.018352 -0.010000 -0.018750 -0.011250 -0.019644 -0.012500 -0.020537 -0.013750 -0.021322 -0.015000 -0.022107 -0.016250 -0.022812 -0.017500 -0.023517 -0.018750 -0.024160 -0.020000 -0.024803 -0.022500 -0.025948 -0.025000 -0.027092 -0.027500 -0.028097 -0.030000 -0.029102 -0.032500 -0.030003 -0.035000 -0.030904 -0.037500 -0.031725 -0.040000 -0.032546 -0.042500 -0.033304 -0.045000 -0.034061 -0.047500 -0.034767 -0.050000 -0.035472 -0.052500 -0.036132 -0.055000 -0.036792 -0.057500 -0.037414 -0.060000 -0.038035 -0.062500 -0.038622 -0.065000 -0.039209 -0.067500 -0.039766 -0.070000 -0.040322 -0.072500 -0.040852 -0.075000 -0.041381 -0.077500 -0.041885 -0.080000 -0.042389 -0.082500 -0.042870 -0.085000 -0.043350 -0.087500 -0.043809 -0.090000 -0.044268 -0.092500 -0.044707 -0.095000 -0.045145 -0.097500 -0.045566 -0.100000 -0.045987 -0.105000 -0.046782 -0.110000 -0.047576 -0.115000 -0.048313 -0.120000 -0.049050 -0.125000 -0.049734 -0.130000 -0.050417 -0.135000 -0.051053 -0.140000 -0.051688 -0.145000 -0.052278 -0.150000 -0.052868 -0.155000 -0.053418 -0.160000 -0.053967 -0.165000 -0.054478 -0.170000 -0.054988 -0.175000 -0.055461 -0.180000 -0.055934 -0.185000 -0.056373 -0.190000 -0.056811 -0.195000 -0.057216 -0.200000 -0.057621 -0.205000 -0.057993 -0.210000 -0.058365 -0.215000 -0.058705 -0.220000 -0.059045 -0.225000 -0.059355 -0.230000 -0.059664 -0.235000 -0.059944 -0.240000 -0.060224 -0.245000 -0.060474 -0.250000 -0.060723 -0.255000 -0.060943 -0.260000 -0.061163 -0.265000 -0.061354 -0.270000 -0.061545 -0.275000 -0.061708 -0.280000 -0.061871 -0.285000 -0.062004 -0.290000 -0.062137 -0.295000 -0.062240 -0.300000 -0.062343 -0.305000 -0.062417 -0.310000 -0.062490 -0.315000 -0.062534 -0.320000 -0.062577 -0.325000 -0.062590 -0.330000 -0.062602 -0.335000 -0.062583 -0.340000 -0.062563 -0.345000 -0.062512 -0.350000 -0.062460 -0.355000 -0.062374 -0.360000 -0.062287 -0.365000 -0.062164 -0.370000 -0.062040 -0.375000 -0.061878 -0.380000 -0.061716 -0.385000 -0.061509 -0.390000 -0.061301 -0.395000 -0.061040 -0.400000 -0.060778 -0.405000 -0.060458 -0.410000 -0.060138 -0.415000 -0.059763 -0.420000 -0.059388 -0.425000 -0.058966 -0.430000 -0.058544 -0.435000 -0.058083 -0.440000 -0.057622 -0.445000 -0.057127 -0.450000 -0.056632 -0.462500 -0.055265 -0.475000 -0.053897 -0.487500 -0.052374 -0.500000 -0.050850 -0.512500 -0.049195 -0.525000 -0.047539 -0.537500 -0.045777 -0.550000 -0.044014 -0.562500 -0.042165 -0.575000 -0.040316 -0.587500 -0.038401 -0.600000 -0.036486 -0.612500 -0.034526 -0.625000 -0.032565 -0.637500 -0.030575 -0.650000 -0.028585 -0.662500 -0.026594 -0.675000 -0.024603 -0.687500 -0.022632 -0.700000 -0.020660 -0.712500 -0.018728 -0.725000 -0.016795 -0.737500 -0.014922 -0.750000 -0.013048 -0.762500 -0.011260 -0.775000 -0.009472 -0.787500 -0.007797 -0.800000 -0.006122 -0.812500 -0.004594 -0.825000 -0.003065 -0.837500 -0.001721 -0.850000 -0.000376 -0.862500 0.000742 -0.875000 0.001859 -0.887500 0.002698 -0.900000 0.003536 -0.905000 0.003780 -0.910000 0.004023 -0.915000 0.004205 -0.920000 0.004387 -0.925000 0.004504 -0.930000 0.004620 -0.935000 0.004661 -0.940000 0.004702 -0.945000 0.004658 -0.950000 0.004614 -0.955000 0.004476 -0.960000 0.004338 -0.965000 0.004084 -0.970000 0.003829 -0.975000 0.003436 -0.980000 0.003042 -0.990000 0.001910 -1.000000 0.000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin deleted file mode 100644 index fbf9404acf..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin.lin +++ /dev/null @@ -1,113 +0,0 @@ - -Linearized model: Predictions were generated on 16-Feb-2020 at 10:36:41 using OpenFAST, compiled as a 64-bit application using single precision at commit v2.2.0 - linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn - -Description from the FAST input file: FAST Certification - Test #24: NREL 5.0 MW Baseline Wind Turbine with OC3 Hywind Configuration, for use in offshore analysis - -Simulation information: - Simulation time: 100.0000 s - Rotor Speed: 1.2367 rad/s - Azimuth: 5.8684 rad - Number of continuous states: 4 - Number of discrete states: 0 - Number of constraint states: 0 - Number of inputs: 9 - Number of outputs: 16 - Jacobians included in this file? No - -Order of continuous states: - Row/Column Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 2.55136520E-01 F ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m - 2 4.29760981E+00 F ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad - 3 -2.58691749E-03 F ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s - 4 1.23670995E+00 F ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s - -Order of continuous state derivatives: - Row/Column Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 -2.58691749E-03 F First time derivative of ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s - 2 1.23670995E+00 F First time derivative of ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s - 3 7.78495288E-03 F First time derivative of ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s/s - 4 1.26017234E-03 F First time derivative of ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s/s - -Order of inputs: - Column Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 1.10000000E+01 F IfW Extended input: horizontal wind speed (steady/uniform wind), m/s - 2 0.00000000E+00 F IfW Extended input: vertical power-law shear exponent, - - 3 0.00000000E+00 F IfW Extended input: propagation direction, rad - 4 0.00000000E+00 T ED Blade 1 pitch command, rad - 5 0.00000000E+00 T ED Blade 2 pitch command, rad - 6 0.00000000E+00 T ED Blade 3 pitch command, rad - 7 0.00000000E+00 F ED Yaw moment, Nm - 8 4.00176055E+04 F ED Generator torque, Nm - 9 0.00000000E+00 F ED Extended input: collective blade-pitch command, rad - -Order of outputs: - Row Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 1.10000000E+01 F IfW Wind1VelX, (m/s) - 2 4.53171631E+03 F SrvD GenPwr, (kW) - 3 4.00176086E+01 F SrvD GenTq, (kN-m) - 4 0.00000000E+00 T ED BldPitch1, (deg) - 5 3.36234894E+02 F ED Azimuth, (deg) - 6 1.18097095E+01 F ED RotSpeed, (rpm) - 7 1.14554187E+03 F ED GenSpeed, (rpm) - 8 8.15625582E-03 F ED NcIMUTAxs, (m/s^2) - 9 2.55136520E-01 F ED TTDspFA, (m) - 10 7.93808105E+02 F ED RotThrust, (kN) - 11 3.88815332E+03 F ED RotTorq, (kN-m) - 12 5.02919570E+04 F ED TwHt2MLyt, (kN-m) - 13 1.09643970E+03 F ED TwHt9MLyt, (kN-m) - 14 5.43100000E+04 F ED TwrBsMyt, (kN-m) - 15 6.95476250E+05 F AD RtAeroFxh, (N) - 16 3.93677925E+06 F AD RtAeroMxh, (N-m) - - -Linearized state matrices: - -A: 4 x 4 - 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 - -6.13652848E+00 1.32509753E-02 -2.98756205E-01 8.73515043E-01 - -3.88082898E-04 3.91159454E-04 -2.36135194E-02 -9.77851546E-01 -B: 4 x 9 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 1.99553894E-01 3.28597213E-01 -9.15682982E-02 -3.45443359E+00 -1.80591336E+00 -5.41624614E-01 0.00000000E+00 -3.09139562E-14 -5.80197157E+00 - 2.25818620E-02 -1.37530787E-02 -5.03037741E-04 -7.09174141E-03 -1.15554268E-02 -1.70886734E-02 0.00000000E+00 -2.21955065E-06 -3.57358416E-02 -C: 16 x 4 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.07346002E+04 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.15657020E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 5.72957795E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.54928748E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.26281186E+02 - -6.36353230E+00 1.37411451E-02 -3.09823239E-01 9.05827840E-01 - 1.00000001E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 7.16950133E+02 1.53222954E+00 -5.34154179E+01 2.88367421E+02 - -1.95867815E+00 1.96354273E+00 -1.18665061E+02 3.54045787E+04 - 1.97620314E+05 -6.84340334E+01 1.43820149E+03 -4.66454411E+01 - 1.19856824E+04 1.11838263E+02 -1.32426573E+03 -1.14351611E+03 - 2.13637823E+05 -8.47041889E+01 1.70992990E+03 -7.66658042E+01 - -1.46114682E+03 3.05305838E+03 -8.73095334E+04 3.87338946E+05 - -1.99298330E+04 1.08527538E+04 -1.03199703E+06 -2.41571175E+06 -D: 16 x 9 - 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 2.06935732E-01 3.40752619E-01 -9.49555784E-02 -3.58221899E+00 -1.87271725E+00 -5.61660042E-01 0.00000000E+00 0.00000000E+00 -6.01659628E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 6.02344256E+01 -7.84014651E+01 8.59497387E+00 -4.05261763E+02 -6.48746347E+02 -7.48489314E+02 0.00000000E+00 0.00000000E+00 -1.80249742E+03 - 1.13480575E+02 -6.91275795E+01 -2.51913240E+00 -3.56047941E+01 -5.79261322E+01 -8.59326035E+01 0.00000000E+00 8.58457826E-02 -1.79463530E+02 - -1.45943785E+02 -4.46807321E+03 9.62571260E+02 1.76449148E+04 -1.10162786E+03 -1.35180323E+04 0.00000000E+00 0.00000000E+00 3.02525464E+03 - -1.79512833E+00 8.10381133E+03 -1.71501383E+03 -2.89545899E+04 4.65752417E+03 2.66851242E+04 0.00000000E+00 0.00000000E+00 2.38805846E+03 - -1.85705869E+02 -5.56302377E+03 1.19914847E+03 2.20094465E+04 -1.32662356E+03 -1.67971452E+04 0.00000000E+00 0.00000000E+00 3.88567769E+03 - 8.28684992E+04 -4.10967716E+04 -1.84826351E+03 -7.97149811E+05 -8.53604761E+05 -8.09845319E+05 0.00000000E+00 0.00000000E+00 -2.46059989E+06 - 9.86885167E+05 -6.01020994E+05 -2.22716720E+04 -3.09984459E+05 -5.04840687E+05 -7.46798658E+05 0.00000000E+00 0.00000000E+00 -1.56162380E+06 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin deleted file mode 100644 index 5e932718e5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTLin_EDM.lin +++ /dev/null @@ -1,139 +0,0 @@ - -Linearized model: Predictions were generated on 17-Feb-2020 at 19:44:51 using OpenFAST, compiled as a 64-bit application using single precision at commit v2.2.0 - linked with NWTC Subroutine Library; ElastoDyn; InflowWind; AeroDyn; ServoDyn - -Description from the FAST input file: FAST Certification - Test #24: NREL 5.0 MW Baseline Wind Turbine with OC3 Hywind Configuration, for use in offshore analysis - -Simulation information: - Simulation time: 103.4900 s - Rotor Speed: 0.4781 rad/s - Azimuth: 1.5151 rad - Number of continuous states: 4 - Number of discrete states: 0 - Number of constraint states: 0 - Number of inputs: 9 - Number of outputs: 16 - Jacobians included in this file? No - -Order of continuous states: - Row/Column Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 2.55793370E-02 F ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m - 2 6.22744131E+00 F ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad - 3 3.49810551E-04 F ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s - 4 4.78124619E-01 F ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s - -Order of continuous state derivatives: - Row/Column Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 3.49810551E-04 F First time derivative of ED 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s - 2 4.78124619E-01 F First time derivative of ED Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s - 3 1.47421670E-03 F First time derivative of ED First time derivative of 1st tower fore-aft bending mode DOF (internal DOF index = DOF_TFA1), m/s/s - 4 1.45823855E-04 F First time derivative of ED First time derivative of Variable speed generator DOF (internal DOF index = DOF_GeAz), rad/s/s - -Order of inputs: - Column Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 4.00000000E+00 F IfW Extended input: horizontal wind speed (steady/uniform wind), m/s - 2 0.00000000E+00 F IfW Extended input: vertical power-law shear exponent, - - 3 0.00000000E+00 F IfW Extended input: propagation direction, rad - 4 0.00000000E+00 T ED Blade 1 pitch command, rad - 5 0.00000000E+00 T ED Blade 2 pitch command, rad - 6 0.00000000E+00 T ED Blade 3 pitch command, rad - 7 0.00000000E+00 F ED Yaw moment, Nm - 8 5.01650195E+03 F ED Generator torque, Nm - 9 0.00000000E+00 F ED Extended input: collective blade-pitch command, rad - -Order of outputs: - Row Operating Point Rotating Frame? Description - ---------- --------------- --------------- ----------- - 1 4.00000000E+00 F IfW Wind1VelX, (m/s) - 2 2.19627060E+02 F SrvD GenPwr, (kW) - 3 5.01650238E+00 F SrvD GenTq, (kN-m) - 4 0.00000000E+00 T ED BldPitch1, (deg) - 5 8.68060989E+01 F ED Azimuth, (deg) - 6 4.56575346E+00 F ED RotSpeed, (rpm) - 7 4.42878082E+02 F ED GenSpeed, (rpm) - 8 1.52781035E-03 F ED NcIMUTAxs, (m/s^2) - 9 2.55793370E-02 F ED TTDspFA, (m) - 10 1.89466110E+02 F ED RotThrust, (kN) - 11 4.87334503E+02 F ED RotTorq, (kN-m) - 12 5.65206299E+03 F ED TwHt2MLyt, (kN-m) - 13 -1.05843262E+03 F ED TwHt9MLyt, (kN-m) - 14 6.20309961E+03 F ED TwrBsMyt, (kN-m) - 15 9.55657109E+04 F AD RtAeroFxh, (N) - 16 4.92973375E+05 F AD RtAeroMxh, (N-m) - - -ED M:1_PtfmSgDOF 2_PtfmSwDOF 3_PtfmHvDOF 4_PtfmRDOF 5_PtfmPDOF 6_PtfmYDOF 7_TwFADOF1 8_TwSSDOF1 9_TwFADOF1 10_TwSSDOF2 11_Yaw 12_RFrl 13_GeAz 14_DrTr 15_TFrl 16_B1Flap1 17_B1Edge1 18_B1Flap2 19_B2Flap1 20_B2Edge1 21_B2Flap2 22_B3Flap1 23_B3Edge1 24_B3Flap2 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.436753E+06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.162617E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.162617E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.437026E+08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 - -Linearized state matrices: - -A: 4 x 4 - 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 - -6.13095767E+00 2.10929947E-03 -1.30824956E-01 2.60824183E-01 - -3.97371065E-05 -2.97061610E-05 -8.76258473E-03 -7.03664054E-02 -B: 4 x 9 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 8.08636086E-02 5.15570541E-02 -1.07947296E-02 -3.04121206E-01 -5.79966842E-02 -4.85026796E-01 0.00000000E+00 -8.26409604E-15 -8.47144686E-01 - 8.45572091E-03 -2.34904056E-03 -1.56646286E-04 -1.40163473E-04 -1.67115258E-03 5.66750221E-05 0.00000000E+00 -2.21954956E-06 -1.75464103E-03 -C: 16 x 4 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.37805313E+03 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.09840777E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 5.72962166E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.54929431E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.26281623E+02 - -6.35818159E+00 2.18747378E-03 -1.35671496E-01 2.70490750E-01 - 1.00000001E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 7.17708351E+02 1.49987938E-01 -2.05190497E+01 8.72514854E+01 - -1.99392697E-01 -1.50074876E-01 -4.40361458E+01 1.68182781E+03 - 1.97611550E+05 -1.27756204E+01 8.92650310E+02 1.43200968E+01 - 1.20265478E+04 2.14999549E+01 -5.16132805E+02 -3.93126141E+02 - 2.13628326E+05 -1.59284473E+01 1.02849407E+03 1.15711579E+01 - -1.50339610E+02 3.83023940E+02 -3.53599138E+04 1.16828000E+05 - -2.26968844E+03 -1.25580581E+03 -3.82954232E+05 -1.03973897E+06 -D: 16 x 9 - 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.72957761E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 8.38605449E-02 5.34678436E-02 -1.11948001E-02 -3.15392432E-01 -6.01461308E-02 -5.03002678E-01 0.00000000E+00 0.00000000E+00 -8.78541241E-01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 2.45205301E+01 -1.32016661E+01 5.75268619E-01 -8.85213617E+01 -1.14884245E+02 -6.12511953E+01 0.00000000E+00 0.00000000E+00 -2.64656802E+02 - 4.24943959E+01 -1.18052861E+01 -7.86784011E-01 -7.02168785E-01 -8.39977581E+00 2.84198290E-01 0.00000000E+00 8.58456282E-02 -8.81774631E+00 - -5.58289322E+01 -7.22833451E+02 1.04183054E+02 3.01216691E+02 -2.27400925E+03 2.37330747E+03 0.00000000E+00 0.00000000E+00 4.00514917E+02 - -6.38550548E+00 1.31272126E+03 -1.84443164E+02 -1.50602509E+02 4.43840667E+03 -3.86759910E+03 0.00000000E+00 0.00000000E+00 4.20205062E+02 - -7.13336537E+01 -8.99692616E+02 1.29739769E+02 3.81561803E+02 -2.82507358E+03 2.96163314E+03 0.00000000E+00 0.00000000E+00 5.18121363E+02 - 3.36939487E+04 -7.35300767E+03 -6.50066623E+02 -1.23023326E+05 -1.21463182E+05 -1.16274559E+05 0.00000000E+00 0.00000000E+00 -3.60761067E+05 - 3.69540220E+05 -1.02655802E+05 -6.83271299E+03 -6.12378711E+03 -7.30380151E+04 2.47680138E+03 0.00000000E+00 0.00000000E+00 -7.66850009E+04 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin.outb b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin.outb deleted file mode 100644 index 16156bff3f261730a6d3035792a74265229665aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4678 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 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin_ID4.outb b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOutBin_ID4.outb deleted file mode 100644 index f7571efad96e7d981d287ff224a73af09d086532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11641 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 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev deleted file mode 100644 index 75393fd728..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_HD.elev +++ /dev/null @@ -1,9 +0,0 @@ - -These predictions were generated by HydroDyn on 25-Oct-2018 at 16:39:49. - - Time Wave1Elev - (sec) (m) - 0.0000 -0.0000e+01 - 0.2500 -1.0000e+01 - 0.5000 -0.0000e+01 - 0.7500 1.0000e+01 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm deleted file mode 100644 index 6d96c46f2b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTOut_V7.elm +++ /dev/null @@ -1,7 +0,0 @@ -This file was generated by FAST(v7.02.00d-bjj, 20-Feb-2013) on 23-Oct-2018 at 13:35:57. -Time VX20 VY20 VZ20 Alpha01 DynPres01 CLift01 CDrag01 CNorm01 CTang01 CMomt01 Pitch01 AxInd01 TanInd01 ForcN01 ForcT01 Pmomt01 ReNum01 -(sec) (m/sec) (m/sec) (m/sec) (deg) (Pa) (-) (-) (-) (-) (-) (deg) (-) (-) (N) (N) (N-m) (x10^6) -0.000 1.10E+01 0.00E+00 0.00E+00 5.52E+01 7.43E+01 0.00E+00 5.00E-01 4.96E-01 -2.15E-01 0.00E+00 1.32E+01 0.00E+00 0.00E+00 1.03E+01 -4.03E+00 0.00E+00 4.67E-01 -0.010 1.10E+01 0.00E+00 0.00E+00 5.61E+01 7.30E+01 0.00E+00 1.00E+00 8.11E-01 -5.56E-01 -1.15E-02 1.32E+01 0.00E+00 0.00E+00 2.70E+01 -9.52E+00 -2.59E-01 4.45E-01 -0.020 1.10E+01 0.00E+00 0.00E+00 5.48E+01 7.91E+01 0.00E+00 1.00E+00 8.99E-01 -5.08E-01 -3.35E-02 1.32E+01 0.00E+00 0.00E+00 2.14E+01 -9.36E+00 -5.40E-01 4.09E-01 -0.030 1.10E+01 0.00E+00 0.00E+00 5.07E+01 7.33E+01 0.00E+00 1.00E+00 8.50E-01 -5.49E-01 -4.05E-02 1.32E+01 0.00E+00 0.00E+00 2.91E+01 -9.81E+00 -6.89E-01 4.08E-01 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml deleted file mode 100644 index 9eff04c79b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTSum_Pendulum.SD.sum.yaml +++ /dev/null @@ -1,178 +0,0 @@ - -#This summary file was generated by SubDyn on 21-Jul-2020 at 21:06:35. - -#Unless specified, units are consistent with Input units, [SI] system is advised. -#____________________________________________________________________________________________________ -#TP reference point: 0.000000E+00 0.000000E+00 0.000000E+00 -#____________________________________________________________________________________________________ -# Internal FEM representation -nNodes_I: 1 # Number of Nodes: "interface" (I) -nNodes_C: 0 # Number of Nodes: "reactions" (C) -nNodes_L: 2 # Number of Nodes: "internal" (L) -nNodes : 3 # Number of Nodes: total (I+C+L) -nDOFI__ : 6 # Number of DOFs: "interface" (I__) -nDOFI_B : 6 # Number of DOFs: "interface" retained (I_B) -nDOFI_F : 0 # Number of DOFs: "interface" fixed (I_F) -nDOFC__ : 0 # Number of DOFs: "reactions" (C__) -nDOFC_B : 0 # Number of DOFs: "reactions" retained (C_B) -nDOFC_L : 0 # Number of DOFs: "reactions" internal (C_L) -nDOFC_F : 0 # Number of DOFs: "reactions" fixed (C_F) -nDOFR__ : 6 # Number of DOFs: "intf+react" (__R) -nDOFL_L : 13 # Number of DOFs: "internal" internal (L_L) -nDOF__B : 6 # Number of DOFs: retained (__B) -nDOF__L : 13 # Number of DOFs: internal (__L) -nDOF__F : 0 # Number of DOFs: fixed (__F) -nDOF_red: 19 # Number of DOFs: total -Nodes_I: # 1 x 1 "interface" nodes" - - [ 1,] -Nodes_C: # 1 x 0 "reaction" nodes" - - [ ] -Nodes_L: # 1 x 2 "internal" nodes" - - [ 2, 3,] -DOF_I__: # 1 x 6 "interface" DOFs" - - [ 1, 2, 3, 4, 5, 6,] -DOF_I_B: # 1 x 6 "interface" retained DOFs - - [ 1, 2, 3, 4, 5, 6,] -DOF_I_F: # 1 x 0 "interface" fixed DOFs - - [ ] -DOF_C__: # 1 x 0 "reaction" DOFs" - - [ ] -DOF_C_B: # 1 x 0 "reaction" retained DOFs - - [ ] -DOF_C_L: # 1 x 0 "reaction" internal DOFs - - [ ] -DOF_C_F: # 1 x 0 "reaction" fixed DOFs - - [ ] -DOF_L_L: # 1 x 13 "internal" internal DOFs - - [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,] -DOF_R_: # 1 x 6 "interface&reaction" DOFs - - [ 1, 2, 3, 4, 5, 6,] -DOF___B: # 1 x 6 all retained DOFs - - [ 1, 2, 3, 4, 5, 6,] -DOF___F: # 1 x 0 all fixed DOFs - - [ ] -DOF___L: # 1 x 13 all internal DOFs - - [ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,] - -#Index map from DOF to nodes -# Node No., DOF/Node, NodalDOF -DOF2Nodes: # 19 x 3 (nDOFRed x 3, for each constrained DOF, col1: node index, col2: number of DOF, col3: DOF starting from 1) - - [ 1, 6, 1,] # 1 - - [ 1, 6, 2,] # 2 - - [ 1, 6, 3,] # 3 - - [ 1, 6, 4,] # 4 - - [ 1, 6, 5,] # 5 - - [ 1, 6, 6,] # 6 - - [ 2, 7, 1,] # 7 - - [ 2, 7, 2,] # 8 - - [ 2, 7, 3,] # 9 - - [ 2, 7, 4,] # 10 - - [ 2, 7, 5,] # 11 - - [ 2, 7, 6,] # 12 - - [ 2, 7, 7,] # 13 - - [ 3, 6, 1,] # 14 - - [ 3, 6, 2,] # 15 - - [ 3, 6, 3,] # 16 - - [ 3, 6, 4,] # 17 - - [ 3, 6, 5,] # 18 - - [ 3, 6, 6,] # 19 -# Node_[#] X_[m] Y_[m] Z_[m] JType_[-] JDirX_[-] JDirY_[-] JDirZ_[-] JStff_[Nm/rad] -Nodes: # 3 x 9 - - [ 1., 0.000, 0.000, 0.000, 1., 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 2., 0.000, 0.000, -1.000, 3., 0.000000E+00, 0.100000E+01, 0.000000E+00, 0.100000E+03,] - - [ 3., 0.000, 0.000, -6.000, 1., 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] -# Elem_[#] Node_1 Node_2 Prop_1 Prop_2 Type Length_[m] Area_[m^2] Dens._[kg/m^3] E_[N/m2] G_[N/m2] shear_[-] Ixx_[m^4] Iyy_[m^4] Jzz_[m^4] T0_[N] -Elements: # 2 x 16 - - [ 1., 1., 2., 1., 1., 1., 1.000, 0.011, 7850.000, 0.210000E+12, 0.807690E+11, 0.510133E+00, 0.463699E-04, 0.463699E-04, 0.927398E-04, -0.999000E+37,] - - [ 2., 2., 3., 1., 1., 1., 5.000, 0.011, 7850.000, 0.210000E+12, 0.807690E+11, 0.510133E+00, 0.463699E-04, 0.463699E-04, 0.927398E-04, -0.999000E+37,] -#____________________________________________________________________________________________________ -#Eigenfrequencies for full system (no constraint) [Hz] -Full_frequencies: # 1 x 19 - - [ 0.000000E+00, 4.782174E-03, 5.782056E-03, 1.522578E-02, 1.585262E-02, 6.756457E-02, 3.940118E-01, 3.530664E+01, 5.101479E+01, 1.177512E+02, 1.704280E+02, 2.854026E+02, 3.801668E+02, 4.601985E+02, 1.001558E+03, 1.095818E+03, 1.766957E+03, 1.800239E+03, 2.902576E+03,] -#CB frequencies [Hz] -CB_frequencies: # 1 x 5 - - [ 2.571561E-02, 5.154897E+00, 3.448768E+01, 3.639185E+01, 9.826435E+01,] -#____________________________________________________________________________________________________ -#FEM Eigenvectors (19 x 19) [m or rad]. Number of shown eigenvectors (total # of DOFs minus restrained nodes' DOFs): 19 -Full_Modes: # 19 x 19 - - [ 0.000000E+00, 4.107411E-02, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, 7.512471E-01, 0.000000E+00, -3.245722E-01, 0.000000E+00, -1.302897E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.985932E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -8.682085E-02,] - - [ 0.000000E+00, 0.000000E+00, 3.928473E-02, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, -3.568193E-01, 0.000000E+00, 0.000000E+00, -3.979489E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.165798E-01, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -8.184897E-01, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, -1.732139E-01, -2.449020E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 8.397360E-01, 0.000000E+00, 5.083995E-01, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 1.626639E-01, 0.000000E+00, 0.000000E+00, -2.324761E-01, 0.000000E+00, 1.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, -4.090358E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00,] - - [ 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -8.184897E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, -1.215898E-01, 0.000000E+00, 0.000000E+00, -7.675238E-01, 0.000000E+00, -2.487521E-01, 0.000000E+00, 6.702434E-01, 0.000000E+00, 2.557473E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -7.781176E-02, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.816464E-02,] - - [ 0.000000E+00, 0.000000E+00, -1.339292E-01, 7.550979E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.725307E-01, 0.000000E+00, 1.078532E-01, 0.000000E+00, 0.000000E+00, 1.984064E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -3.020253E-02, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.969184E-01, 0.000000E+00, 0.000000E+00, -3.030816E-01, 0.000000E+00, 0.000000E+00,] - - [ 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.969184E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -3.030816E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, -1.732139E-01, -2.449021E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 7.799248E-01, 0.000000E+00, 3.130864E-01, 0.000000E+00, 0.000000E+00, -4.453690E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 5.135798E-02, 0.000000E+00,] - - [ 0.000000E+00, 1.626640E-01, 0.000000E+00, 0.000000E+00, -2.324762E-01, 0.000000E+00, 9.999956E-01, 0.000000E+00, -9.863876E-01, 0.000000E+00, -3.489279E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 9.502386E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.572086E-01,] - - [ 0.000000E+00, 1.756818E-01, 0.000000E+00, 0.000000E+00, -2.470031E-01, 0.000000E+00, -7.930491E-02, 0.000000E+00, 9.515405E-01, 0.000000E+00, 8.192991E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.170988E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 2.710940E-02,] - - [ 0.000000E+00, -1.000000E+00, 0.000000E+00, 0.000000E+00, 4.674933E-01, 0.000000E+00, 1.479579E-01, 0.000000E+00, 8.417776E-01, 0.000000E+00, -4.334266E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.977116E-02, 0.000000E+00, 0.000000E+00, 0.000000E+00, -4.443453E-03,] - - [ 0.000000E+00, 0.000000E+00, -1.000000E+00, -4.694142E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -9.010279E-01, 0.000000E+00, 5.078576E-01, 0.000000E+00, 0.000000E+00, -1.340460E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.052559E-02, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 1.636979E-01, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, -1.732143E-01, -2.449026E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -7.873605E-01, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, -3.582121E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 3.046357E-02, 0.000000E+00,] - - [ 0.000000E+00, 1.756821E-01, 0.000000E+00, 0.000000E+00, -2.470036E-01, 0.000000E+00, -7.936198E-02, 0.000000E+00, -9.463903E-01, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -5.912242E-02, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.340981E-02,] - - [ 9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.636979E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00,] -#____________________________________________________________________________________________________ -#CB Matrices (PhiM,PhiR) (constraint applied) -PhiM: # 13 x 5 (CB modes) - - [ -1.017239E-07, 0.000000E+00, -1.550054E-02, 0.000000E+00, 9.460907E-02,] - - [ 0.000000E+00, -3.957648E-03, 0.000000E+00, 2.756187E-02, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, -7.510861E-03, 0.000000E+00, 4.323204E-02, 0.000000E+00,] - - [ 1.932527E-07, 0.000000E+00, 2.180389E-02, 0.000000E+00, -1.297702E-01,] - - [ 1.643735E-02, 0.000000E+00, 5.763143E-02, 0.000000E+00, 4.326063E-02,] - - [ -8.218800E-02, 0.000000E+00, 9.318795E-02, 0.000000E+00, 8.384577E-02,] - - [ 0.000000E+00, -8.710870E-02, 0.000000E+00, -8.717469E-02, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, -1.995024E-02, 0.000000E+00, -8.186166E-02, 0.000000E+00,] - - [ 1.643767E-02, 0.000000E+00, -8.281329E-02, 0.000000E+00, -1.453021E-01,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] -PhiR: # 13 x 6 (Guyan modes) - - [ 9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 1.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00,] - - [ 0.000000E+00, 1.254181E-07, 0.000000E+00, 1.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ -2.268250E-08, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00, 0.000000E+00,] - - [ -5.952277E-03, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.093535E+00, 0.000000E+00,] - - [ 1.029762E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.467684E+00, 0.000000E+00,] - - [ -0.000000E+00, 1.000000E+00, -0.000000E+00, 6.000004E+00, -0.000000E+00, -0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 9.999999E-01, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000001E+00, 0.000000E+00, 0.000000E+00,] - - [ -5.952381E-03, -0.000000E+00, -0.000000E+00, -0.000000E+00, 1.093537E+00, -0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.000000E+00,] -#____________________________________________________________________________________________________ -#SubDyn's Structure Equivalent Stiffness and Mass Matrices at the TP reference point (Guyan DOFs) -KBBt: # 6 x 6 - - [ 8.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 8.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, -4.000000E+00, 0.000000E+00, 4.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ -4.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -6.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.000000E+00,] -MBBt: # 6 x 6 - - [ 5.460311E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.732566E+03, 0.000000E+00,] - - [ 0.000000E+00, 5.326888E+02, 0.000000E+00, 1.598067E+03, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 5.326886E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 1.598067E+03, 0.000000E+00, 6.394453E+03, 0.000000E+00, 0.000000E+00,] - - [ -1.732566E+03, 0.000000E+00, 0.000000E+00, 0.000000E+00, 7.326801E+03, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 4.368048E+00,] -CBBt: # 6 x 6 (user Guyan Damping + potential joint damping from CB-reduction) - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00,] -#____________________________________________________________________________________________________ -#Rigid Body Equivalent Mass Matrix w.r.t. (0,0,0). -MRB: # 6 x 6 - - [ 5.460311E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00, -1.732566E+03, 0.000000E+00,] - - [ 0.000000E+00, 5.326888E+02, 0.000000E+00, 1.598067E+03, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 5.326886E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00,] - - [ 0.000000E+00, 1.598067E+03, 0.000000E+00, 6.394453E+03, 0.000000E+00, 0.000000E+00,] - - [ -1.732566E+03, 0.000000E+00, 0.000000E+00, 0.000000E+00, 7.326801E+03, 0.000000E+00,] - - [ 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 4.368048E+00,] diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd deleted file mode 100644 index bc00931188..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FASTWnd.wnd +++ /dev/null @@ -1,8 +0,0 @@ -! Deterministic Wind file -! Time Wind Wind Vert. Horiz. Vert. LinV Gust -! Speed Dir Speed Shear Shear Shear Speed - 00.00 06.0 0.0 0.0 0.0 0.0 0.0 0.0 - 20.05 06.0 0.0 0.0 0.0 0.0 0.0 0.0 - 20.10 08.0 0.0 0.0 0.0 0.0 0.0 0.0 - 40.05 08.0 0.0 0.0 0.0 0.0 0.0 0.0 -999.99 08.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla deleted file mode 100644 index 7fd86524fa..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade000.bla +++ /dev/null @@ -1,32 +0,0 @@ -Comment -13 r[m] EI_Flp[Nm2] EI_Edg[Nm2] Mass_[kg/m] PhiOut[deg] Out[0/1] PBF[m] PBE[m] -0.0 18110000000 18113600000 715.0 00.0 1 0 0 -3.2 15287400000 19788800000 779.4 13.3 0 0 0 -7.2 5528360000 8063160000 421.9 13.3 0 0 0 -11.2 3949460000 7271660000 439.0 13.2 0 0 0 -15.2 2388650000 4948490000 368.0 11.1 0 0 0 -22.2 1588710000 3995280000 339.1 9.1 0 0 0 -30.2 681300000 2734240000 277.3 6.5 1 0 0 -38.2 238630000 1584100000 210.9 4.4 0 0 0 -46.2 90880000 797810000 146.3 2.5 1 0 0 -54.2 39360000 395120000 95.0 1.0 0 0 0 -57.7 23840000 261710000 69.8 0.3 0 0 0 -59.7 10080000 101630000 51.7 0.1 0 0 0 -61.5 170000 5010000 10.9 0.0 0 0 0 -0.00 !BetaC -0.03 0.03 0.03 0.03 0.03 0.03 0.03 0.03 log decr. For mode 1-4 X C Beta t/c Yac/c -00.0 3.5 13.308 100 0.25000 -03.2 3.751109176 13.308 100 0.23284 -07.2 4.208520941 13.308 90 0.18382 -11.2 4.640859231 13.181 40 0.13481 -15.2 4.6248112 11.072 35 0.12500 -22.2 4.266988438 9.110 30 0.12500 -30.2 3.782642105 6.711 25 0.12500 -38.2 3.30106 4.401 21 0.12500 -46.2 2.82106 2.503 17 0.12500 -54.2 2.34106 0.954 17 0.12500 -57.7 2.0544545 0.319 17 0.12500 -59.7 1.579883655 0.140 17 0.12500 -61.5 0.877604473 0.000 17 0.12500 -data/ProfileFile.pro -61.5 Xtipbr diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld deleted file mode 100644 index 808ab31aa3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade001.bld +++ /dev/null @@ -1,32 +0,0 @@ -#001 Comment -13 r[m] EI_Flp[Nm2] EI_Edg[Nm2] Mass_[kg/m] PhiOut[deg] Out[0/1] PBF[m] PBE[m] -0.0 18110000000 18113600000 715.0 00.0 1 0 0 -3.2 15287400000 19788800000 779.4 13.3 0 0 0 -7.2 5528360000 8063160000 421.9 13.3 0 0 0 -11.2 3949460000 7271660000 439.0 13.2 0 0 0 -15.2 2388650000 4948490000 368.0 11.1 0 0 0 -22.2 1588710000 3995280000 339.1 9.1 0 0 0 -30.2 681300000 2734240000 277.3 6.5 1 0 0 -38.2 238630000 1584100000 210.9 4.4 0 0 0 -46.2 90880000 797810000 146.3 2.5 1 0 0 -54.2 39360000 395120000 95.0 1.0 0 0 0 -57.7 23840000 261710000 69.8 0.3 0 0 0 -59.7 10080000 101630000 51.7 0.1 0 0 0 -61.5 170000 5010000 10.9 0.0 0 0 0 -0.00 !BetaC -0.03 0.03 0.03 0.03 0.03 0.03 0.03 0.03 log decr. For mode 1-4 X C Beta t/c Yac/c AeroTors -00.0 3.5 13.308 100 0.25000 0 -03.2 3.751109176 13.308 100 0.23284 1 -07.2 4.208520941 13.308 90 0.18382 1 -11.2 4.640859231 13.181 40 0.13481 1 -15.2 4.6248112 11.072 35 0.12500 1 -22.2 4.266988438 9.110 30 0.12500 1 -30.2 3.782642105 6.711 25 0.12500 1 -38.2 3.30106 4.401 21 0.12500 1 -46.2 2.82106 2.503 17 0.12500 1 -54.2 2.34106 0.954 17 0.12500 1 -57.7 2.0544545 0.319 17 0.12500 1 -59.7 1.579883655 0.140 17 0.12500 1 -61.5 0.877604473 0.000 17 0.12500 1 -data/ProfileFile.pro -61.5 Xtipbr diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld deleted file mode 100644 index 31b012cd06..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade002.bld +++ /dev/null @@ -1,56 +0,0 @@ -#002 Comment -25 r[m] EI_Flp[Nm2] EI_Edg[Nm2] Mass_[kg/m] PhiOut[deg] Out[0/1] PBF[m] PBE[m] GKt[Nm2] -0.0 18110000000 18113600000 715.0 00.0 1 0 0 1.00E+20 -1.2 19424900000 19558600000 814.5 13.3 0 0 0 1.00E+20 -3.2 15287400000 19788800000 779.4 13.3 0 0 0 1.00E+20 -5.2 7229720000 10220600000 474.2 13.3 0 0 0 1.00E+20 -7.2 5528360000 8063160000 421.9 13.3 0 0 0 1.00E+20 -9.2 4936840000 7009180000 420.9 13.3 0 0 0 1.00E+20 -11.2 3949460000 7271660000 439.0 13.2 0 0 0 1.00E+20 -13.2 2933740000 6244530000 401.7 12.2 0 0 0 1.00E+20 -15.2 2388650000 4948490000 368.0 11.1 0 0 0 1.00E+20 -18.2 2050050000 4501400000 357.4 10.2 0 0 0 1.00E+20 -22.2 1588710000 3995280000 339.1 9.1 0 0 0 1.00E+20 -26.2 1102380000 3447140000 310.4 7.9 0 0 0 1.00E+20 -30.2 681300000 2734240000 277.3 6.5 1 0 0 1.00E+20 -34.2 408900000 2334030000 254.5 5.5 0 0 0 1.00E+20 -38.2 238630000 1584100000 210.9 4.4 0 0 0 1.00E+20 -42.2 126010000 1183680000 173.9 3.3 0 0 0 1.00E+20 -46.2 90880000 797810000 146.3 2.5 1 0 0 1.00E+20 -50.2 61050000 518190000 113.0 1.7 0 0 0 1.00E+20 -54.2 39360000 395120000 95.0 1.0 0 0 0 1.00E+20 -56.2 30410000 304730000 76.8 0.6 0 0 0 1.00E+20 -57.7 23840000 261710000 69.8 0.3 0 0 0 1.00E+20 -58.7 16000000 137880000 58.9 0.2 0 0 0 1.00E+20 -59.7 10080000 101630000 51.7 0.1 0 0 0 1.00E+20 -60.7 4600000 64260000 43.9 0.1 0 0 0 1.00E+20 -61.5 170000 5010000 10.9 0.0 0 0 0 1.00E+20 -0.00 !BetaC -0.03 0.03 0.03 0.03 0.03 0.03 0.03 0.03 log decr. For mode 1-4 X C Beta t/c Yac/c AeroTors ProfileSet -00.0 3.5 13.308 100 0.25000 1 1 -01.2 3.522594595 13.308 100 0.24951 1 1 -03.2 3.751109176 13.308 100 0.23284 1 1 -05.2 3.979815059 13.308 100 0.20833 1 1 -07.2 4.208520941 13.308 90 0.18382 1 1 -09.2 4.437226824 13.308 40 0.15931 1 1 -11.2 4.640859231 13.181 40 0.13481 1 1 -13.2 4.6734155 12.192 35 0.12500 1 1 -15.2 4.6248112 11.072 35 0.12500 1 1 -18.2 4.4712112 10.232 35 0.12500 1 1 -22.2 4.266988438 9.110 30 0.12500 1 1 -26.2 4.035273684 7.932 25 0.12500 1 1 -30.2 3.782642105 6.711 25 0.12500 1 1 -34.2 3.54106 5.546 25 0.12500 1 1 -38.2 3.30106 4.401 21 0.12500 1 1 -42.2 3.06106 3.332 21 0.12500 1 1 -46.2 2.82106 2.503 17 0.12500 1 1 -50.2 2.58106 1.730 17 0.12500 1 1 -54.2 2.34106 0.954 17 0.12500 1 1 -56.2 2.2112045 0.574 17 0.12500 1 1 -57.7 2.0544545 0.319 17 0.12500 1 1 -58.7 1.845517824 0.216 17 0.12500 1 1 -59.7 1.579883655 0.140 17 0.12500 1 1 -60.7 1.2087202 0.062 17 0.12500 1 1 -61.5 0.877604473 0.000 17 0.12500 1 1 -data/ProfileFile.pro -61.5 Xtipbr diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld deleted file mode 100644 index 48ca5a6978..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXBlade003.bld +++ /dev/null @@ -1,21 +0,0 @@ -#003 Comment -5 r[m] EI_Flp[Nm2] EI_Edg[Nm2] GKt[Nm2] Mass[kg/m] Jxx[kg.m] PBF[m] PBE[m] Str.Twist[°] PhiOut[°] Ycog[m] Yshc[m] Out[0/1] - 0.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 1 - 25.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 - 50.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 - 75.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 - 100.0000 1.8683e+12 1.8682e+12 7.0547e+11 8.8282e+03 1.3967e+05 0.0000 0.0000 0.00 0.00 0.0000 0.0000 0 --90.00 ! If BetaC<0 use section pitch angles; if BetaC>0 Beta=constant (classic formulation) -#LOGD -1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 ; Flapwise LOGD -1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 ; Edgewise LOGD -1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 1.0e-8 ; Torsion LOGD -#AERO -; X[m] C[m] Beta[°] t/C[%] Yac/C[-] Pitching Aero.Pro.Set - 0.0000 2.000 0.00 100.00 0.250 1 1 - 25.0000 2.000 0.00 100.00 0.250 1 1 - 50.0000 2.000 0.00 100.00 0.250 1 1 - 75.0000 2.000 0.00 100.00 0.250 1 1 - 100.0000 2.000 0.00 100.00 0.250 1 1 -data/ProfileFile.pro -99999.00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV0.int b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV0.int deleted file mode 100644 index 5df18a5d5b28c9b45ec0b48786925a5fb7d9a306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11352 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 J6(Ac%{y#QJk9q(A diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV3.res b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXOutBinV3.res deleted file mode 100644 index 6eb3adf00c07212006a28cf7fe6c2b133b305dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeZZU|`?`VjdtC0%BeumIPvbAa+SDPAGx} zftU%(hKT{W3}?@rvE{nH*fKcar@6_c*_I5oSRsR>FGw6nGVI^P(9F;bB!K{%C;;4s BB(VSh diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro deleted file mode 100644 index ebdd1b70da..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXProfile.pro +++ /dev/null @@ -1,1016 +0,0 @@ -PROFILE SET 1: Comment -2 -18.00 100.00 -251 -Profile 1, Set 1 - 18% AOA Cl Cd Cm 18% --1.8000000E+02 -4.0000000E-01 5.0000000E-02 -6.6800000E-02 --1.7800000E+02 -2.4810000E-01 5.6979005E-02 3.2800000E-03 --1.7600000E+02 -8.1400000E-02 7.5713730E-02 7.6720000E-02 --1.7400000E+02 1.0040000E-01 1.0290074E-01 1.5672000E-01 --1.7200000E+02 2.9600000E-01 1.3523661E-01 2.3360000E-01 --1.7000000E+02 4.7300000E-01 1.6941791E-01 2.7136000E-01 --1.6800000E+02 5.2260000E-01 2.0214119E-01 2.6528000E-01 --1.6600000E+02 5.4130000E-01 2.3010303E-01 2.5376000E-01 --1.6400000E+02 4.9650000E-01 2.5000000E-01 2.4000000E-01 --1.6200000E+02 4.6530000E-01 2.6016631E-01 2.3248000E-01 --1.6000000E+02 4.5000000E-01 2.6548681E-01 2.2912000E-01 --1.5800000E+02 4.6100000E-01 2.7248397E-01 2.3536000E-01 --1.5600000E+02 4.9440000E-01 2.8768028E-01 2.5264000E-01 --1.5400000E+02 5.5046361E-01 3.1759823E-01 2.7873657E-01 --1.5200000E+02 6.1396608E-01 3.6045801E-01 3.0006065E-01 --1.5000000E+02 6.7000628E-01 4.0586462E-01 3.2308783E-01 --1.4800000E+02 7.0770287E-01 4.5295807E-01 3.3980436E-01 --1.4600000E+02 7.4161481E-01 5.0087833E-01 3.5551030E-01 --1.4400000E+02 7.6856222E-01 5.4876542E-01 3.6985848E-01 --1.4200000E+02 7.8869353E-01 5.9575931E-01 3.8288806E-01 --1.4000000E+02 8.0222023E-01 6.4100000E-01 3.9464363E-01 --1.3800000E+02 8.0940261E-01 6.8590215E-01 4.0517341E-01 --1.3600000E+02 8.1053705E-01 7.3120113E-01 4.1452780E-01 --1.3400000E+02 8.0594512E-01 7.7531136E-01 4.2275813E-01 --1.3200000E+02 7.9596425E-01 8.1857786E-01 4.2991567E-01 --1.3000000E+02 7.8094007E-01 8.6060000E-01 4.3605090E-01 --1.2800000E+02 7.6122019E-01 9.0132006E-01 4.4121290E-01 --1.2600000E+02 7.3714923E-01 9.4068533E-01 4.4544903E-01 --1.2400000E+02 7.0906508E-01 9.7821853E-01 4.4880461E-01 --1.2200000E+02 6.7729608E-01 1.0142228E+00 4.5132287E-01 --1.2000000E+02 6.4215894E-01 1.0482000E+00 4.5304487E-01 --1.1800000E+02 6.0395751E-01 1.0802061E+00 4.5400954E-01 --1.1600000E+02 5.6298196E-01 1.1102554E+00 4.5425378E-01 --1.1400000E+02 5.1950851E-01 1.1378430E+00 4.5381259E-01 --1.1200000E+02 4.7379944E-01 1.1634949E+00 4.5271919E-01 --1.1000000E+02 4.2610350E-01 1.1866000E+00 4.5100519E-01 --1.0800000E+02 3.7665646E-01 1.2073773E+00 4.4870078E-01 --1.0600000E+02 3.2568191E-01 1.2259430E+00 4.4583483E-01 --1.0400000E+02 2.7339216E-01 1.2416746E+00 4.4243506E-01 --1.0200000E+02 2.1998931E-01 1.2555655E+00 4.3852819E-01 --1.0000000E+02 1.6566636E-01 1.2665000E+00 4.3414003E-01 --9.8000000E+01 1.1060839E-01 1.2752980E+00 4.2929558E-01 --9.6000000E+01 5.4993857E-02 1.2819458E+00 4.2401913E-01 --9.4000000E+01 -1.0041200E-03 1.2844808E+00 4.1833426E-01 --9.2000000E+01 -5.7216440E-02 1.2857982E+00 4.1226392E-01 --9.0000000E+01 -1.1347665E-01 1.2863000E+00 4.0583041E-01 --8.8000000E+01 -1.6961958E-01 1.2837866E+00 3.9905539E-01 --8.6000000E+01 -2.2547994E-01 1.2780933E+00 3.9195980E-01 --8.4000000E+01 -2.8089095E-01 1.2713222E+00 3.8456387E-01 --8.2000000E+01 -3.3568295E-01 1.2617782E+00 3.7688695E-01 --8.0000000E+01 -3.8968202E-01 1.2504000E+00 3.6894750E-01 --7.8000000E+01 -4.4270859E-01 1.2372024E+00 3.6076287E-01 --7.6000000E+01 -4.9457615E-01 1.2217980E+00 3.5234924E-01 --7.4000000E+01 -5.4508990E-01 1.2049106E+00 3.4372142E-01 --7.2000000E+01 -5.9404553E-01 1.1859838E+00 3.3489264E-01 --7.0000000E+01 -6.4122798E-01 1.1654000E+00 3.2587438E-01 --6.8000000E+01 -6.8641039E-01 1.1431275E+00 3.1667613E-01 --6.6000000E+01 -7.2935301E-01 1.1190173E+00 3.0730511E-01 --6.4000000E+01 -7.6980240E-01 1.0933857E+00 2.9776607E-01 --6.2000000E+01 -8.0749070E-01 1.0659453E+00 2.8806090E-01 --6.0000000E+01 -8.4213514E-01 1.0368000E+00 2.7818840E-01 --5.8000000E+01 -8.7343785E-01 1.0058711E+00 2.6814391E-01 --5.6000000E+01 -9.0108599E-01 9.7301646E-01 2.5791893E-01 --5.4000000E+01 -9.2475231E-01 9.3829725E-01 2.4750078E-01 --5.2000000E+01 -9.4409624E-01 9.0149442E-01 2.3687219E-01 --5.0000000E+01 -9.5876557E-01 8.6250000E-01 2.2601086E-01 --4.8000000E+01 -9.6839892E-01 8.2116674E-01 2.1488911E-01 --4.6000000E+01 -9.7262906E-01 7.7724007E-01 2.0347336E-01 --4.4000000E+01 -9.7108730E-01 7.3039427E-01 1.9172381E-01 --4.2000000E+01 -9.6340899E-01 6.8020982E-01 1.7959393E-01 --4.0000000E+01 -9.5500000E-01 6.2730000E-01 1.6703018E-01 --3.8000000E+01 -9.4600000E-01 5.7149033E-01 1.5397159E-01 --3.6000000E+01 -9.3600000E-01 5.1292880E-01 1.4034954E-01 --3.4000000E+01 -9.2400000E-01 4.5095130E-01 1.2608748E-01 --3.2000000E+01 -9.1200000E-01 3.8269856E-01 1.1110090E-01 --3.0000000E+01 -9.0000000E-01 3.2610000E-01 9.4958218E-02 --2.9000000E+01 -8.8589127E-01 3.0767714E-01 8.6907123E-02 --2.8000000E+01 -8.6233893E-01 2.9189846E-01 7.8384267E-02 --2.7000000E+01 -8.3150083E-01 2.7827773E-01 6.9608788E-02 --2.6000000E+01 -7.9553481E-01 2.6632871E-01 6.0799827E-02 --2.5000000E+01 -7.5659873E-01 2.5556518E-01 5.2176522E-02 --2.4000000E+01 -7.1685043E-01 2.4550091E-01 4.3958012E-02 --2.3000000E+01 -6.7844777E-01 2.3564965E-01 3.6363437E-02 --2.2000000E+01 -6.4354858E-01 2.2552517E-01 2.9611936E-02 --2.1000000E+01 -6.1431072E-01 2.1464125E-01 2.3922648E-02 --2.0000000E+01 -5.9289204E-01 2.0251165E-01 1.9514712E-02 --1.9500000E+01 -5.8699378E-01 1.9551304E-01 1.8062448E-02 --1.9000000E+01 -5.8109552E-01 1.8851442E-01 1.6610183E-02 --1.8500000E+01 -5.7836086E-01 1.8084652E-01 1.5824749E-02 --1.8000000E+01 -5.7562619E-01 1.7317861E-01 1.5039315E-02 --1.7500000E+01 -5.7693243E-01 1.6577103E-01 1.4336321E-02 --1.7000000E+01 -5.7823867E-01 1.5836345E-01 1.3633327E-02 --1.6500000E+01 -5.9853289E-01 1.4940440E-01 1.0950506E-02 --1.6000000E+01 -6.1882711E-01 1.4044535E-01 8.2676848E-03 --1.5500000E+01 -6.7014193E-01 1.2253995E-01 -2.5428471E-03 --1.5000000E+01 -7.2145675E-01 1.0463454E-01 -1.3353379E-02 --1.4500000E+01 -8.0837459E-01 7.2768129E-02 -3.3394616E-02 --1.4000000E+01 -8.9529242E-01 4.0901718E-02 -5.3435853E-02 --1.3500000E+01 -8.8699667E-01 3.3187649E-02 -7.4705994E-02 --1.3000000E+01 -8.7870091E-01 2.5473580E-02 -9.5976134E-02 --1.2500000E+01 -8.2645570E-01 2.1687489E-02 -1.0698332E-01 --1.2000000E+01 -7.7421048E-01 1.7901397E-02 -1.1799051E-01 --1.1500000E+01 -7.1646130E-01 1.6084101E-02 -1.2186851E-01 --1.1000000E+01 -6.5871211E-01 1.4266805E-02 -1.2574650E-01 --1.0500000E+01 -5.9830006E-01 1.3334879E-02 -1.2769876E-01 --1.0000000E+01 -5.3788801E-01 1.2402953E-02 -1.2965102E-01 --9.5000000E+00 -4.7704887E-01 1.1743114E-02 -1.3119547E-01 --9.0000000E+00 -4.1620973E-01 1.1083275E-02 -1.3273992E-01 --8.5000000E+00 -3.5594463E-01 1.0575386E-02 -1.3399676E-01 --8.0000000E+00 -2.9567953E-01 1.0067496E-02 -1.3525360E-01 --7.5000000E+00 -2.3622463E-01 9.6788175E-03 -1.3633601E-01 --7.0000000E+00 -1.7676972E-01 9.2901389E-03 -1.3741841E-01 --6.5000000E+00 -1.1846463E-01 9.0002149E-03 -1.3846117E-01 --6.0000000E+00 -6.0159535E-02 8.7102909E-03 -1.3950392E-01 --5.5000000E+00 -6.4439750E-04 8.4819003E-03 -1.4044771E-01 --5.0000000E+00 5.8870740E-02 8.2535096E-03 -1.4139150E-01 --4.5000000E+00 1.1896666E-01 8.0224761E-03 -1.4230337E-01 --4.0000000E+00 1.7906257E-01 7.7914425E-03 -1.4321523E-01 --3.5000000E+00 2.3913166E-01 7.6165617E-03 -1.4411139E-01 --3.0000000E+00 2.9920074E-01 7.4416808E-03 -1.4500754E-01 --2.5000000E+00 3.5895569E-01 7.3343867E-03 -1.4590797E-01 --2.0000000E+00 4.1871064E-01 7.2270926E-03 -1.4680839E-01 --1.5000000E+00 4.7855629E-01 7.1228084E-03 -1.4766048E-01 --1.0000000E+00 5.3840194E-01 7.0185241E-03 -1.4851256E-01 --5.0000000E-01 5.9858880E-01 6.8795762E-03 -1.4927122E-01 -0.0000000E+00 6.5877566E-01 6.7406282E-03 -1.5002988E-01 -5.0000000E-01 7.1941267E-01 6.7403141E-03 -1.5074808E-01 -1.0000000E+00 7.8004967E-01 6.7400000E-03 -1.5146628E-01 -1.5000000E+00 8.3816844E-01 6.8947275E-03 -1.5160596E-01 -2.0000000E+00 8.9628720E-01 7.0494550E-03 -1.5174563E-01 -2.5000000E+00 9.5225775E-01 7.2094007E-03 -1.5192498E-01 -3.0000000E+00 1.0082283E+00 7.3693463E-03 -1.5210433E-01 -3.5000000E+00 1.0649419E+00 7.5459198E-03 -1.5197914E-01 -4.0000000E+00 1.1216555E+00 7.7224932E-03 -1.5185395E-01 -4.5000000E+00 1.1790484E+00 7.9887797E-03 -1.5166838E-01 -5.0000000E+00 1.2364412E+00 8.2550661E-03 -1.5148281E-01 -5.5000000E+00 1.2911315E+00 8.5451465E-03 -1.5105930E-01 -6.0000000E+00 1.3458217E+00 8.8352269E-03 -1.5063578E-01 -6.5000000E+00 1.3987349E+00 9.1548924E-03 -1.4999056E-01 -7.0000000E+00 1.4516480E+00 9.4745578E-03 -1.4934533E-01 -7.5000000E+00 1.5024387E+00 9.8680894E-03 -1.4845598E-01 -8.0000000E+00 1.5532294E+00 1.0261621E-02 -1.4756662E-01 -8.5000000E+00 1.6006183E+00 1.0795751E-02 -1.4619628E-01 -9.0000000E+00 1.6480072E+00 1.1329880E-02 -1.4482594E-01 -9.5000000E+00 1.6895051E+00 1.2095909E-02 -1.4312977E-01 -1.0000000E+01 1.7310029E+00 1.2861938E-02 -1.4143360E-01 -1.0500000E+01 1.7523811E+00 1.3709787E-02 -1.3896483E-01 -1.1000000E+01 1.7737592E+00 1.4557635E-02 -1.3649605E-01 -1.1500000E+01 1.7559954E+00 1.8864974E-02 -1.3390148E-01 -1.2000000E+01 1.7382316E+00 2.3172313E-02 -1.3130690E-01 -1.2500000E+01 1.6329848E+00 3.8673912E-02 -1.3237228E-01 -1.3000000E+01 1.5277380E+00 5.4175511E-02 -1.3343766E-01 -1.3500000E+01 1.4996226E+00 7.2910940E-02 -1.3087134E-01 -1.4000000E+01 1.4715072E+00 9.1646369E-02 -1.2830501E-01 -1.4500000E+01 1.4519308E+00 9.8651400E-02 -1.2714268E-01 -1.5000000E+01 1.4323544E+00 1.0565643E-01 -1.2598034E-01 -1.5500000E+01 1.4136528E+00 1.1355748E-01 -1.2547756E-01 -1.6000000E+01 1.3949511E+00 1.2145852E-01 -1.2497478E-01 -1.6500000E+01 1.3771778E+00 1.3149642E-01 -1.2630785E-01 -1.7000000E+01 1.3594044E+00 1.4153432E-01 -1.2764091E-01 -1.7500000E+01 1.3426130E+00 1.5135984E-01 -1.2942521E-01 -1.8000000E+01 1.3258215E+00 1.6118536E-01 -1.3120950E-01 -1.8500000E+01 1.3100655E+00 1.7163450E-01 -1.3281644E-01 -1.9000000E+01 1.2943094E+00 1.8208364E-01 -1.3442338E-01 -1.9500000E+01 1.2796424E+00 1.9292170E-01 -1.3578460E-01 -2.0000000E+01 1.2649754E+00 2.0375975E-01 -1.3714581E-01 -2.1000000E+01 1.2379265E+00 2.2594778E-01 -1.3958378E-01 -2.2000000E+01 1.2132700E+00 2.4860967E-01 -1.4182994E-01 -2.3000000E+01 1.1911130E+00 2.7170740E-01 -1.4397698E-01 -2.4000000E+01 1.1715627E+00 2.9520294E-01 -1.4611757E-01 -2.5000000E+01 1.1547261E+00 3.1905823E-01 -1.4834437E-01 -2.6000000E+01 1.1407104E+00 3.4323527E-01 -1.5075007E-01 -2.7000000E+01 1.1296228E+00 3.6769599E-01 -1.5342733E-01 -2.8000000E+01 1.1215705E+00 3.9240238E-01 -1.5646883E-01 -2.9000000E+01 1.1166605E+00 4.1731639E-01 -1.5996725E-01 -3.0000000E+01 1.1150000E+00 4.4240000E-01 -1.6401525E-01 -3.2000000E+01 1.1200000E+00 4.9415055E-01 -1.7804703E-01 -3.4000000E+01 1.1250000E+00 5.4628325E-01 -1.9127586E-01 -3.6000000E+01 1.1302000E+00 5.9675108E-01 -2.0375902E-01 -3.8000000E+01 1.1400000E+00 6.4593756E-01 -2.1555093E-01 -4.0000000E+01 1.1452397E+00 6.9380000E-01 -2.2670345E-01 -4.2000000E+01 1.1448578E+00 7.4031368E-01 -2.3726624E-01 -4.4000000E+01 1.1381346E+00 7.8551731E-01 -2.4686502E-01 -4.6000000E+01 1.1257306E+00 8.2929407E-01 -2.5570774E-01 -4.8000000E+01 1.1082083E+00 8.7180269E-01 -2.6428767E-01 -5.0000000E+01 1.0860505E+00 9.1270000E-01 -2.7267575E-01 -5.2000000E+01 1.0596750E+00 9.5199445E-01 -2.8092289E-01 -5.4000000E+01 1.0294483E+00 9.8969637E-01 -2.8906318E-01 -5.6000000E+01 9.9569550E-01 1.0254973E+00 -2.9711688E-01 -5.8000000E+01 9.5871014E-01 1.0596647E+00 -3.0509292E-01 -6.0000000E+01 9.1876081E-01 1.0919000E+00 -3.1299114E-01 -6.2000000E+01 8.7609702E-01 1.1222910E+00 -3.2080427E-01 -6.4000000E+01 8.3095338E-01 1.1508772E+00 -3.2851956E-01 -6.6000000E+01 7.8355266E-01 1.1773280E+00 -3.3612028E-01 -6.8000000E+01 7.3410779E-01 1.2020466E+00 -3.4358689E-01 -7.0000000E+01 6.8282291E-01 1.2246000E+00 -3.5089813E-01 -7.2000000E+01 6.2989366E-01 1.2451519E+00 -3.5803189E-01 -7.4000000E+01 5.7550684E-01 1.2638003E+00 -3.6496593E-01 -7.6000000E+01 5.1983937E-01 1.2801051E+00 -3.7167852E-01 -7.8000000E+01 4.6305689E-01 1.2947564E+00 -3.7814897E-01 -8.0000000E+01 4.0531195E-01 1.3070000E+00 -3.8435805E-01 -8.2000000E+01 3.4674178E-01 1.3173181E+00 -3.9028841E-01 -8.4000000E+01 2.8746589E-01 1.3257459E+00 -3.9592486E-01 -8.6000000E+01 2.2758350E-01 1.3311894E+00 -4.0125471E-01 -8.8000000E+01 1.6717078E-01 1.3354616E+00 -4.0626801E-01 -9.0000000E+01 1.0627813E-01 1.3373000E+00 -4.1095779E-01 -9.2000000E+01 4.3021145E-02 1.3363173E+00 -4.1532382E-01 -9.4000000E+01 -1.9038670E-02 1.3339005E+00 -4.1936326E-01 -9.6000000E+01 -8.0928289E-02 1.3302638E+00 -4.2307564E-01 -9.8000000E+01 -1.4244199E-01 1.3232023E+00 -4.2646197E-01 -1.0000000E+02 -2.0337687E-01 1.3142000E+00 -4.2952454E-01 -1.0200000E+02 -2.6353485E-01 1.3032495E+00 -4.3226653E-01 -1.0400000E+02 -3.2272425E-01 1.2897213E+00 -4.3469173E-01 -1.0600000E+02 -3.8076098E-01 1.2744930E+00 -4.3680411E-01 -1.0800000E+02 -4.3746916E-01 1.2567449E+00 -4.3860738E-01 -1.1000000E+02 -4.9268116E-01 1.2370000E+00 -4.4010442E-01 -1.1200000E+02 -5.4623685E-01 1.2151664E+00 -4.4129669E-01 -1.1400000E+02 -5.9798209E-01 1.1910326E+00 -4.4218347E-01 -1.1600000E+02 -6.4776620E-01 1.1650608E+00 -4.4276098E-01 -1.1800000E+02 -6.9543840E-01 1.1367906E+00 -4.4302140E-01 -1.2000000E+02 -7.4080000E-01 1.1066000E+00 -4.4296000E-01 -1.2200000E+02 -7.8380000E-01 1.0744324E+00 -4.4256000E-01 -1.2400000E+02 -8.2420000E-01 1.0402056E+00 -4.4176000E-01 -1.2600000E+02 -8.6170000E-01 1.0042975E+00 -4.4056000E-01 -1.2800000E+02 -8.9610000E-01 9.6640530E-01 -4.3880000E-01 -1.3000000E+02 -9.2710000E-01 9.2690000E-01 -4.3664000E-01 -1.3200000E+02 -9.5440000E-01 8.8578087E-01 -4.3376000E-01 -1.3400000E+02 -9.7740000E-01 8.4305973E-01 -4.3024000E-01 -1.3600000E+02 -9.8970000E-01 7.9909989E-01 -4.2472000E-01 -1.3800000E+02 -1.0021000E+00 7.5363717E-01 -4.1928000E-01 -1.4000000E+02 -1.0144000E+00 7.0750000E-01 -4.1376000E-01 -1.4200000E+02 -9.9520000E-01 6.5965806E-01 -4.0272000E-01 -1.4400000E+02 -9.7590000E-01 6.0912117E-01 -3.9168000E-01 -1.4600000E+02 -9.5670000E-01 5.5696009E-01 -3.8064000E-01 -1.4800000E+02 -9.3100000E-01 5.0424559E-01 -3.6680000E-01 -1.5000000E+02 -8.9100000E-01 4.5204845E-01 -3.4632000E-01 -1.5200000E+02 -8.5090000E-01 4.0143943E-01 -3.2584000E-01 -1.5400000E+02 -8.1090000E-01 3.5348931E-01 -3.0536000E-01 -1.5600000E+02 -7.5770000E-01 3.1504233E-01 -2.7920000E-01 -1.5800000E+02 -7.1650000E-01 2.9154894E-01 -2.5912000E-01 -1.6000000E+02 -7.0000000E-01 2.7693012E-01 -2.5112000E-01 -1.6200000E+02 -7.1300000E-01 2.6510681E-01 -2.5696000E-01 -1.6400000E+02 -7.4870000E-01 2.5000000E-01 -2.7312000E-01 -1.6600000E+02 -7.8613407E-01 2.2703171E-01 -2.9784000E-01 -1.6800000E+02 -8.2227926E-01 1.9762822E-01 -3.2912000E-01 -1.7000000E+02 -8.5000000E-01 1.6471690E-01 -3.6832000E-01 -1.7200000E+02 -8.5228250E-01 1.3122509E-01 -3.3616000E-01 -1.7400000E+02 -7.7260000E-01 1.0008014E-01 -2.7080000E-01 -1.7600000E+02 -6.2980000E-01 7.4209408E-02 -1.9872000E-01 -1.7800000E+02 -5.1490000E-01 5.6540244E-02 -1.3416000E-01 -1.8000000E+02 -4.0000000E-01 5.0000000E-02 -6.9520000E-02 -Profile 2, Set 1 - 100% AOA Cl Cd Cm 100% --1.8000000E+02 -1.0000000E-03 6.0000000E-01 0.0000000E+00 --1.7800000E+02 -9.8888889E-04 6.0000000E-01 0.0000000E+00 --1.7600000E+02 -9.7777778E-04 6.0000000E-01 0.0000000E+00 --1.7400000E+02 -9.6666667E-04 6.0000000E-01 0.0000000E+00 --1.7200000E+02 -9.5555556E-04 6.0000000E-01 0.0000000E+00 --1.7000000E+02 -9.4444444E-04 6.0000000E-01 0.0000000E+00 --1.6800000E+02 -9.3333333E-04 6.0000000E-01 0.0000000E+00 --1.6600000E+02 -9.2222222E-04 6.0000000E-01 0.0000000E+00 --1.6400000E+02 -9.1111111E-04 6.0000000E-01 0.0000000E+00 --1.6200000E+02 -9.0000000E-04 6.0000000E-01 0.0000000E+00 --1.6000000E+02 -8.8888889E-04 6.0000000E-01 0.0000000E+00 --1.5800000E+02 -8.7777778E-04 6.0000000E-01 0.0000000E+00 --1.5600000E+02 -8.6666667E-04 6.0000000E-01 0.0000000E+00 --1.5400000E+02 -8.5555556E-04 6.0000000E-01 0.0000000E+00 --1.5200000E+02 -8.4444444E-04 6.0000000E-01 0.0000000E+00 --1.5000000E+02 -8.3333333E-04 6.0000000E-01 0.0000000E+00 --1.4800000E+02 -8.2222222E-04 6.0000000E-01 0.0000000E+00 --1.4600000E+02 -8.1111111E-04 6.0000000E-01 0.0000000E+00 --1.4400000E+02 -8.0000000E-04 6.0000000E-01 0.0000000E+00 --1.4200000E+02 -7.8888889E-04 6.0000000E-01 0.0000000E+00 --1.4000000E+02 -7.7777778E-04 6.0000000E-01 0.0000000E+00 --1.3800000E+02 -7.6666667E-04 6.0000000E-01 0.0000000E+00 --1.3600000E+02 -7.5555556E-04 6.0000000E-01 0.0000000E+00 --1.3400000E+02 -7.4444444E-04 6.0000000E-01 0.0000000E+00 --1.3200000E+02 -7.3333333E-04 6.0000000E-01 0.0000000E+00 --1.3000000E+02 -7.2222222E-04 6.0000000E-01 0.0000000E+00 --1.2800000E+02 -7.1111111E-04 6.0000000E-01 0.0000000E+00 --1.2600000E+02 -7.0000000E-04 6.0000000E-01 0.0000000E+00 --1.2400000E+02 -6.8888889E-04 6.0000000E-01 0.0000000E+00 --1.2200000E+02 -6.7777778E-04 6.0000000E-01 0.0000000E+00 --1.2000000E+02 -6.6666667E-04 6.0000000E-01 0.0000000E+00 --1.1800000E+02 -6.5555556E-04 6.0000000E-01 0.0000000E+00 --1.1600000E+02 -6.4444444E-04 6.0000000E-01 0.0000000E+00 --1.1400000E+02 -6.3333333E-04 6.0000000E-01 0.0000000E+00 --1.1200000E+02 -6.2222222E-04 6.0000000E-01 0.0000000E+00 --1.1000000E+02 -6.1111111E-04 6.0000000E-01 0.0000000E+00 --1.0800000E+02 -6.0000000E-04 6.0000000E-01 0.0000000E+00 --1.0600000E+02 -5.8888889E-04 6.0000000E-01 0.0000000E+00 --1.0400000E+02 -5.7777778E-04 6.0000000E-01 0.0000000E+00 --1.0200000E+02 -5.6666667E-04 6.0000000E-01 0.0000000E+00 --1.0000000E+02 -5.5555556E-04 6.0000000E-01 0.0000000E+00 --9.8000000E+01 -5.4444444E-04 6.0000000E-01 0.0000000E+00 --9.6000000E+01 -5.3333333E-04 6.0000000E-01 0.0000000E+00 --9.4000000E+01 -5.2222222E-04 6.0000000E-01 0.0000000E+00 --9.2000000E+01 -5.1111111E-04 6.0000000E-01 0.0000000E+00 --9.0000000E+01 -5.0000000E-04 6.0000000E-01 0.0000000E+00 --8.8000000E+01 -4.8888889E-04 6.0000000E-01 0.0000000E+00 --8.6000000E+01 -4.7777778E-04 6.0000000E-01 0.0000000E+00 --8.4000000E+01 -4.6666667E-04 6.0000000E-01 0.0000000E+00 --8.2000000E+01 -4.5555556E-04 6.0000000E-01 0.0000000E+00 --8.0000000E+01 -4.4444444E-04 6.0000000E-01 0.0000000E+00 --7.8000000E+01 -4.3333333E-04 6.0000000E-01 0.0000000E+00 --7.6000000E+01 -4.2222222E-04 6.0000000E-01 0.0000000E+00 --7.4000000E+01 -4.1111111E-04 6.0000000E-01 0.0000000E+00 --7.2000000E+01 -4.0000000E-04 6.0000000E-01 0.0000000E+00 --7.0000000E+01 -3.8888889E-04 6.0000000E-01 0.0000000E+00 --6.8000000E+01 -3.7777778E-04 6.0000000E-01 0.0000000E+00 --6.6000000E+01 -3.6666667E-04 6.0000000E-01 0.0000000E+00 --6.4000000E+01 -3.5555556E-04 6.0000000E-01 0.0000000E+00 --6.2000000E+01 -3.4444444E-04 6.0000000E-01 0.0000000E+00 --6.0000000E+01 -3.3333333E-04 6.0000000E-01 0.0000000E+00 --5.8000000E+01 -3.2222222E-04 6.0000000E-01 0.0000000E+00 --5.6000000E+01 -3.1111111E-04 6.0000000E-01 0.0000000E+00 --5.4000000E+01 -3.0000000E-04 6.0000000E-01 0.0000000E+00 --5.2000000E+01 -2.8888889E-04 6.0000000E-01 0.0000000E+00 --5.0000000E+01 -2.7777778E-04 6.0000000E-01 0.0000000E+00 --4.8000000E+01 -2.6666667E-04 6.0000000E-01 0.0000000E+00 --4.6000000E+01 -2.5555556E-04 6.0000000E-01 0.0000000E+00 --4.4000000E+01 -2.4444444E-04 6.0000000E-01 0.0000000E+00 --4.2000000E+01 -2.3333333E-04 6.0000000E-01 0.0000000E+00 --4.0000000E+01 -2.2222222E-04 6.0000000E-01 0.0000000E+00 --3.8000000E+01 -2.1111111E-04 6.0000000E-01 0.0000000E+00 --3.6000000E+01 -2.0000000E-04 6.0000000E-01 0.0000000E+00 --3.4000000E+01 -1.8888889E-04 6.0000000E-01 0.0000000E+00 --3.2000000E+01 -1.7777778E-04 6.0000000E-01 0.0000000E+00 --3.0000000E+01 -1.6666667E-04 6.0000000E-01 0.0000000E+00 --2.9000000E+01 -1.6111111E-04 6.0000000E-01 0.0000000E+00 --2.8000000E+01 -1.5555556E-04 6.0000000E-01 0.0000000E+00 --2.7000000E+01 -1.5000000E-04 6.0000000E-01 0.0000000E+00 --2.6000000E+01 -1.4444444E-04 6.0000000E-01 0.0000000E+00 --2.5000000E+01 -1.3888889E-04 6.0000000E-01 0.0000000E+00 --2.4000000E+01 -1.3333333E-04 6.0000000E-01 0.0000000E+00 --2.3000000E+01 -1.2777778E-04 6.0000000E-01 0.0000000E+00 --2.2000000E+01 -1.2222222E-04 6.0000000E-01 0.0000000E+00 --2.1000000E+01 -1.1666667E-04 6.0000000E-01 0.0000000E+00 --2.0000000E+01 -1.1111111E-04 6.0000000E-01 0.0000000E+00 --1.9500000E+01 -1.0833333E-04 6.0000000E-01 0.0000000E+00 --1.9000000E+01 -1.0555556E-04 6.0000000E-01 0.0000000E+00 --1.8500000E+01 -1.0277778E-04 6.0000000E-01 0.0000000E+00 --1.8000000E+01 -1.0000000E-04 6.0000000E-01 0.0000000E+00 --1.7500000E+01 -9.7222222E-05 6.0000000E-01 0.0000000E+00 --1.7000000E+01 -9.4444444E-05 6.0000000E-01 0.0000000E+00 --1.6500000E+01 -9.1666667E-05 6.0000000E-01 0.0000000E+00 --1.6000000E+01 -8.8888889E-05 6.0000000E-01 0.0000000E+00 --1.5500000E+01 -8.6111111E-05 6.0000000E-01 0.0000000E+00 --1.5000000E+01 -8.3333333E-05 6.0000000E-01 0.0000000E+00 --1.4500000E+01 -8.0555556E-05 6.0000000E-01 0.0000000E+00 --1.4000000E+01 -7.7777778E-05 6.0000000E-01 0.0000000E+00 --1.3500000E+01 -7.5000000E-05 6.0000000E-01 0.0000000E+00 --1.3000000E+01 -7.2222222E-05 6.0000000E-01 0.0000000E+00 --1.2500000E+01 -6.9444444E-05 6.0000000E-01 0.0000000E+00 --1.2000000E+01 -6.6666667E-05 6.0000000E-01 0.0000000E+00 --1.1500000E+01 -6.3888889E-05 6.0000000E-01 0.0000000E+00 --1.1000000E+01 -6.1111111E-05 6.0000000E-01 0.0000000E+00 --1.0500000E+01 -5.8333333E-05 6.0000000E-01 0.0000000E+00 --1.0000000E+01 -5.5555556E-05 6.0000000E-01 0.0000000E+00 --9.5000000E+00 -5.2777778E-05 6.0000000E-01 0.0000000E+00 --9.0000000E+00 -5.0000000E-05 6.0000000E-01 0.0000000E+00 --8.5000000E+00 -4.7222222E-05 6.0000000E-01 0.0000000E+00 --8.0000000E+00 -4.4444444E-05 6.0000000E-01 0.0000000E+00 --7.5000000E+00 -4.1666667E-05 6.0000000E-01 0.0000000E+00 --7.0000000E+00 -3.8888889E-05 6.0000000E-01 0.0000000E+00 --6.5000000E+00 -3.6111111E-05 6.0000000E-01 0.0000000E+00 --6.0000000E+00 -3.3333333E-05 6.0000000E-01 0.0000000E+00 --5.5000000E+00 -3.0555556E-05 6.0000000E-01 0.0000000E+00 --5.0000000E+00 -2.7777778E-05 6.0000000E-01 0.0000000E+00 --4.5000000E+00 -2.5000000E-05 6.0000000E-01 0.0000000E+00 --4.0000000E+00 -2.2222222E-05 6.0000000E-01 0.0000000E+00 --3.5000000E+00 -1.9444444E-05 6.0000000E-01 0.0000000E+00 --3.0000000E+00 -1.6666667E-05 6.0000000E-01 0.0000000E+00 --2.5000000E+00 -1.3888889E-05 6.0000000E-01 0.0000000E+00 --2.0000000E+00 -1.1111111E-05 6.0000000E-01 0.0000000E+00 --1.5000000E+00 -8.3333333E-06 6.0000000E-01 0.0000000E+00 --1.0000000E+00 -5.5555556E-06 6.0000000E-01 0.0000000E+00 --5.0000000E-01 -2.7777778E-06 6.0000000E-01 0.0000000E+00 -0.0000000E+00 1.0842022E-19 6.0000000E-01 0.0000000E+00 -5.0000000E-01 2.7777778E-06 6.0000000E-01 0.0000000E+00 -1.0000000E+00 5.5555556E-06 6.0000000E-01 0.0000000E+00 -1.5000000E+00 8.3333333E-06 6.0000000E-01 0.0000000E+00 -2.0000000E+00 1.1111111E-05 6.0000000E-01 0.0000000E+00 -2.5000000E+00 1.3888889E-05 6.0000000E-01 0.0000000E+00 -3.0000000E+00 1.6666667E-05 6.0000000E-01 0.0000000E+00 -3.5000000E+00 1.9444444E-05 6.0000000E-01 0.0000000E+00 -4.0000000E+00 2.2222222E-05 6.0000000E-01 0.0000000E+00 -4.5000000E+00 2.5000000E-05 6.0000000E-01 0.0000000E+00 -5.0000000E+00 2.7777778E-05 6.0000000E-01 0.0000000E+00 -5.5000000E+00 3.0555556E-05 6.0000000E-01 0.0000000E+00 -6.0000000E+00 3.3333333E-05 6.0000000E-01 0.0000000E+00 -6.5000000E+00 3.6111111E-05 6.0000000E-01 0.0000000E+00 -7.0000000E+00 3.8888889E-05 6.0000000E-01 0.0000000E+00 -7.5000000E+00 4.1666667E-05 6.0000000E-01 0.0000000E+00 -8.0000000E+00 4.4444444E-05 6.0000000E-01 0.0000000E+00 -8.5000000E+00 4.7222222E-05 6.0000000E-01 0.0000000E+00 -9.0000000E+00 5.0000000E-05 6.0000000E-01 0.0000000E+00 -9.5000000E+00 5.2777778E-05 6.0000000E-01 0.0000000E+00 -1.0000000E+01 5.5555556E-05 6.0000000E-01 0.0000000E+00 -1.0500000E+01 5.8333333E-05 6.0000000E-01 0.0000000E+00 -1.1000000E+01 6.1111111E-05 6.0000000E-01 0.0000000E+00 -1.1500000E+01 6.3888889E-05 6.0000000E-01 0.0000000E+00 -1.2000000E+01 6.6666667E-05 6.0000000E-01 0.0000000E+00 -1.2500000E+01 6.9444444E-05 6.0000000E-01 0.0000000E+00 -1.3000000E+01 7.2222222E-05 6.0000000E-01 0.0000000E+00 -1.3500000E+01 7.5000000E-05 6.0000000E-01 0.0000000E+00 -1.4000000E+01 7.7777778E-05 6.0000000E-01 0.0000000E+00 -1.4500000E+01 8.0555556E-05 6.0000000E-01 0.0000000E+00 -1.5000000E+01 8.3333333E-05 6.0000000E-01 0.0000000E+00 -1.5500000E+01 8.6111111E-05 6.0000000E-01 0.0000000E+00 -1.6000000E+01 8.8888889E-05 6.0000000E-01 0.0000000E+00 -1.6500000E+01 9.1666667E-05 6.0000000E-01 0.0000000E+00 -1.7000000E+01 9.4444444E-05 6.0000000E-01 0.0000000E+00 -1.7500000E+01 9.7222222E-05 6.0000000E-01 0.0000000E+00 -1.8000000E+01 1.0000000E-04 6.0000000E-01 0.0000000E+00 -1.8500000E+01 1.0277778E-04 6.0000000E-01 0.0000000E+00 -1.9000000E+01 1.0555556E-04 6.0000000E-01 0.0000000E+00 -1.9500000E+01 1.0833333E-04 6.0000000E-01 0.0000000E+00 -2.0000000E+01 1.1111111E-04 6.0000000E-01 0.0000000E+00 -2.1000000E+01 1.1666667E-04 6.0000000E-01 0.0000000E+00 -2.2000000E+01 1.2222222E-04 6.0000000E-01 0.0000000E+00 -2.3000000E+01 1.2777778E-04 6.0000000E-01 0.0000000E+00 -2.4000000E+01 1.3333333E-04 6.0000000E-01 0.0000000E+00 -2.5000000E+01 1.3888889E-04 6.0000000E-01 0.0000000E+00 -2.6000000E+01 1.4444444E-04 6.0000000E-01 0.0000000E+00 -2.7000000E+01 1.5000000E-04 6.0000000E-01 0.0000000E+00 -2.8000000E+01 1.5555556E-04 6.0000000E-01 0.0000000E+00 -2.9000000E+01 1.6111111E-04 6.0000000E-01 0.0000000E+00 -3.0000000E+01 1.6666667E-04 6.0000000E-01 0.0000000E+00 -3.2000000E+01 1.7777778E-04 6.0000000E-01 0.0000000E+00 -3.4000000E+01 1.8888889E-04 6.0000000E-01 0.0000000E+00 -3.6000000E+01 2.0000000E-04 6.0000000E-01 0.0000000E+00 -3.8000000E+01 2.1111111E-04 6.0000000E-01 0.0000000E+00 -4.0000000E+01 2.2222222E-04 6.0000000E-01 0.0000000E+00 -4.2000000E+01 2.3333333E-04 6.0000000E-01 0.0000000E+00 -4.4000000E+01 2.4444444E-04 6.0000000E-01 0.0000000E+00 -4.6000000E+01 2.5555556E-04 6.0000000E-01 0.0000000E+00 -4.8000000E+01 2.6666667E-04 6.0000000E-01 0.0000000E+00 -5.0000000E+01 2.7777778E-04 6.0000000E-01 0.0000000E+00 -5.2000000E+01 2.8888889E-04 6.0000000E-01 0.0000000E+00 -5.4000000E+01 3.0000000E-04 6.0000000E-01 0.0000000E+00 -5.6000000E+01 3.1111111E-04 6.0000000E-01 0.0000000E+00 -5.8000000E+01 3.2222222E-04 6.0000000E-01 0.0000000E+00 -6.0000000E+01 3.3333333E-04 6.0000000E-01 0.0000000E+00 -6.2000000E+01 3.4444444E-04 6.0000000E-01 0.0000000E+00 -6.4000000E+01 3.5555556E-04 6.0000000E-01 0.0000000E+00 -6.6000000E+01 3.6666667E-04 6.0000000E-01 0.0000000E+00 -6.8000000E+01 3.7777778E-04 6.0000000E-01 0.0000000E+00 -7.0000000E+01 3.8888889E-04 6.0000000E-01 0.0000000E+00 -7.2000000E+01 4.0000000E-04 6.0000000E-01 0.0000000E+00 -7.4000000E+01 4.1111111E-04 6.0000000E-01 0.0000000E+00 -7.6000000E+01 4.2222222E-04 6.0000000E-01 0.0000000E+00 -7.8000000E+01 4.3333333E-04 6.0000000E-01 0.0000000E+00 -8.0000000E+01 4.4444444E-04 6.0000000E-01 0.0000000E+00 -8.2000000E+01 4.5555556E-04 6.0000000E-01 0.0000000E+00 -8.4000000E+01 4.6666667E-04 6.0000000E-01 0.0000000E+00 -8.6000000E+01 4.7777778E-04 6.0000000E-01 0.0000000E+00 -8.8000000E+01 4.8888889E-04 6.0000000E-01 0.0000000E+00 -9.0000000E+01 5.0000000E-04 6.0000000E-01 0.0000000E+00 -9.2000000E+01 5.1111111E-04 6.0000000E-01 0.0000000E+00 -9.4000000E+01 5.2222222E-04 6.0000000E-01 0.0000000E+00 -9.6000000E+01 5.3333333E-04 6.0000000E-01 0.0000000E+00 -9.8000000E+01 5.4444444E-04 6.0000000E-01 0.0000000E+00 -1.0000000E+02 5.5555556E-04 6.0000000E-01 0.0000000E+00 -1.0200000E+02 5.6666667E-04 6.0000000E-01 0.0000000E+00 -1.0400000E+02 5.7777778E-04 6.0000000E-01 0.0000000E+00 -1.0600000E+02 5.8888889E-04 6.0000000E-01 0.0000000E+00 -1.0800000E+02 6.0000000E-04 6.0000000E-01 0.0000000E+00 -1.1000000E+02 6.1111111E-04 6.0000000E-01 0.0000000E+00 -1.1200000E+02 6.2222222E-04 6.0000000E-01 0.0000000E+00 -1.1400000E+02 6.3333333E-04 6.0000000E-01 0.0000000E+00 -1.1600000E+02 6.4444444E-04 6.0000000E-01 0.0000000E+00 -1.1800000E+02 6.5555556E-04 6.0000000E-01 0.0000000E+00 -1.2000000E+02 6.6666667E-04 6.0000000E-01 0.0000000E+00 -1.2200000E+02 6.7777778E-04 6.0000000E-01 0.0000000E+00 -1.2400000E+02 6.8888889E-04 6.0000000E-01 0.0000000E+00 -1.2600000E+02 7.0000000E-04 6.0000000E-01 0.0000000E+00 -1.2800000E+02 7.1111111E-04 6.0000000E-01 0.0000000E+00 -1.3000000E+02 7.2222222E-04 6.0000000E-01 0.0000000E+00 -1.3200000E+02 7.3333333E-04 6.0000000E-01 0.0000000E+00 -1.3400000E+02 7.4444444E-04 6.0000000E-01 0.0000000E+00 -1.3600000E+02 7.5555556E-04 6.0000000E-01 0.0000000E+00 -1.3800000E+02 7.6666667E-04 6.0000000E-01 0.0000000E+00 -1.4000000E+02 7.7777778E-04 6.0000000E-01 0.0000000E+00 -1.4200000E+02 7.8888889E-04 6.0000000E-01 0.0000000E+00 -1.4400000E+02 8.0000000E-04 6.0000000E-01 0.0000000E+00 -1.4600000E+02 8.1111111E-04 6.0000000E-01 0.0000000E+00 -1.4800000E+02 8.2222222E-04 6.0000000E-01 0.0000000E+00 -1.5000000E+02 8.3333333E-04 6.0000000E-01 0.0000000E+00 -1.5200000E+02 8.4444444E-04 6.0000000E-01 0.0000000E+00 -1.5400000E+02 8.5555556E-04 6.0000000E-01 0.0000000E+00 -1.5600000E+02 8.6666667E-04 6.0000000E-01 0.0000000E+00 -1.5800000E+02 8.7777778E-04 6.0000000E-01 0.0000000E+00 -1.6000000E+02 8.8888889E-04 6.0000000E-01 0.0000000E+00 -1.6200000E+02 9.0000000E-04 6.0000000E-01 0.0000000E+00 -1.6400000E+02 9.1111111E-04 6.0000000E-01 0.0000000E+00 -1.6600000E+02 9.2222222E-04 6.0000000E-01 0.0000000E+00 -1.6800000E+02 9.3333333E-04 6.0000000E-01 0.0000000E+00 -1.7000000E+02 9.4444444E-04 6.0000000E-01 0.0000000E+00 -1.7200000E+02 9.5555556E-04 6.0000000E-01 0.0000000E+00 -1.7400000E+02 9.6666667E-04 6.0000000E-01 0.0000000E+00 -1.7600000E+02 9.7777778E-04 6.0000000E-01 0.0000000E+00 -1.7800000E+02 9.8888889E-04 6.0000000E-01 0.0000000E+00 -1.8000000E+02 1.0000000E-03 6.0000000E-01 0.0000000E+00 -PROFILE SET 2: Comment 2 -2 -24.00 57.00 -251 -Profile 1, Set 2 - 24% AOA Cl Cd Cm 24% --1.8000000E+02 -3.7080000E-01 5.0000000E-02 -6.6800000E-02 --1.7800000E+02 -2.3007983E-01 5.6996066E-02 3.2800000E-03 --1.7600000E+02 -7.5517601E-02 7.5772226E-02 7.6720000E-02 --1.7400000E+02 9.3181440E-02 1.0301042E-01 1.5672000E-01 --1.7200000E+02 2.7482692E-01 1.3539260E-01 2.3360000E-01 --1.7000000E+02 4.3933974E-01 1.6960071E-01 2.7136000E-01 --1.6800000E+02 4.8560200E-01 2.0231668E-01 2.6528000E-01 --1.6600000E+02 5.0317695E-01 2.3022246E-01 2.5376000E-01 --1.6400000E+02 4.6171454E-01 2.5000000E-01 2.4000000E-01 --1.6200000E+02 4.3287137E-01 2.5997675E-01 2.3248000E-01 --1.6000000E+02 4.1880299E-01 2.6506223E-01 2.2912000E-01 --1.5800000E+02 4.2920973E-01 2.7181146E-01 2.3536000E-01 --1.5600000E+02 4.6048810E-01 2.8677947E-01 2.5264000E-01 --1.5400000E+02 5.1290839E-01 3.1652130E-01 2.7873657E-01 --1.5200000E+02 5.7230396E-01 3.5940305E-01 3.0006065E-01 --1.5000000E+02 6.2478753E-01 4.0494886E-01 3.2308783E-01 --1.4800000E+02 6.6019994E-01 4.5225476E-01 3.3980436E-01 --1.4600000E+02 6.9210804E-01 5.0041679E-01 3.5551030E-01 --1.4400000E+02 7.1753888E-01 5.4853098E-01 3.6985848E-01 --1.4200000E+02 7.3662342E-01 5.9569337E-01 3.8288806E-01 --1.4000000E+02 7.4955176E-01 6.4100000E-01 3.9464363E-01 --1.3800000E+02 7.5655990E-01 6.8590215E-01 4.0517341E-01 --1.3600000E+02 7.5791802E-01 7.3120113E-01 4.1452780E-01 --1.3400000E+02 7.5392024E-01 7.7531136E-01 4.2275813E-01 --1.3200000E+02 7.4487604E-01 8.1857786E-01 4.2991567E-01 --1.3000000E+02 7.3110303E-01 8.6060000E-01 4.3605090E-01 --1.2800000E+02 7.1292122E-01 9.0132006E-01 4.4121290E-01 --1.2600000E+02 6.9064833E-01 9.4068533E-01 4.4544903E-01 --1.2400000E+02 6.6459625E-01 9.7821853E-01 4.4880461E-01 --1.2200000E+02 6.3506842E-01 1.0142228E+00 4.5132287E-01 --1.2000000E+02 6.0235788E-01 1.0482000E+00 4.5304487E-01 --1.1800000E+02 5.6674603E-01 1.0802061E+00 4.5400954E-01 --1.1600000E+02 5.2850190E-01 1.1102554E+00 4.5425378E-01 --1.1400000E+02 4.8788183E-01 1.1378430E+00 4.5381259E-01 --1.1200000E+02 4.4512948E-01 1.1634949E+00 4.5271919E-01 --1.1000000E+02 4.0047618E-01 1.1866000E+00 4.5100519E-01 --1.0800000E+02 3.5414141E-01 1.2073773E+00 4.4870078E-01 --1.0600000E+02 3.0633355E-01 1.2259430E+00 4.4583483E-01 --1.0400000E+02 2.5725070E-01 1.2416746E+00 4.4243506E-01 --1.0200000E+02 2.0708164E-01 1.2555655E+00 4.3852819E-01 --1.0000000E+02 1.5600689E-01 1.2665000E+00 4.3414003E-01 --9.8000000E+01 1.0419980E-01 1.2752980E+00 4.2929558E-01 --9.6000000E+01 5.1827745E-02 1.2819458E+00 4.2401913E-01 --9.4000000E+01 -9.4667954E-04 1.2844808E+00 4.1833426E-01 --9.2000000E+01 -5.3964404E-02 1.2857982E+00 4.1226392E-01 --9.0000000E+01 -1.0706861E-01 1.2863000E+00 4.0583041E-01 --8.8000000E+01 -1.6010345E-01 1.2837866E+00 3.9905539E-01 --8.6000000E+01 -2.1291271E-01 1.2780933E+00 3.9195980E-01 --8.4000000E+01 -2.6533855E-01 1.2713222E+00 3.8456387E-01 --8.2000000E+01 -3.1722013E-01 1.2617782E+00 3.7688695E-01 --8.0000000E+01 -3.6839234E-01 1.2504000E+00 3.6894750E-01 --7.8000000E+01 -4.1868451E-01 1.2372024E+00 3.6076287E-01 --7.6000000E+01 -4.6791909E-01 1.2217980E+00 3.5234924E-01 --7.4000000E+01 -5.1591044E-01 1.2049106E+00 3.4372142E-01 --7.2000000E+01 -5.6246361E-01 1.1859838E+00 3.3489264E-01 --7.0000000E+01 -6.0737319E-01 1.1654000E+00 3.2587438E-01 --6.8000000E+01 -6.5042225E-01 1.1431275E+00 3.1667613E-01 --6.6000000E+01 -6.9138133E-01 1.1190173E+00 3.0730511E-01 --6.4000000E+01 -7.3000761E-01 1.0933857E+00 2.9776607E-01 --6.2000000E+01 -7.6604423E-01 1.0659453E+00 2.8806090E-01 --6.0000000E+01 -7.9921980E-01 1.0368000E+00 2.7818840E-01 --5.8000000E+01 -8.2924816E-01 1.0058711E+00 2.6814391E-01 --5.6000000E+01 -8.5582850E-01 9.7301646E-01 2.5791893E-01 --5.4000000E+01 -8.7864587E-01 9.3829725E-01 2.4750078E-01 --5.2000000E+01 -8.9737214E-01 9.0149442E-01 2.3687219E-01 --5.0000000E+01 -9.1166766E-01 8.6250000E-01 2.2601086E-01 --4.8000000E+01 -9.2118350E-01 8.2116674E-01 2.1488911E-01 --4.6000000E+01 -9.2556467E-01 7.7724007E-01 2.0347336E-01 --4.4000000E+01 -9.2445423E-01 7.3039427E-01 1.9172381E-01 --4.2000000E+01 -9.1749853E-01 6.8020982E-01 1.7959393E-01 --4.0000000E+01 -9.0984107E-01 6.2730000E-01 1.6703018E-01 --3.8000000E+01 -9.0161414E-01 5.7149033E-01 1.5397159E-01 --3.6000000E+01 -8.9242716E-01 5.1292880E-01 1.4034954E-01 --3.4000000E+01 -8.8132520E-01 4.5131152E-01 1.2608748E-01 --3.2000000E+01 -8.7021442E-01 3.8431956E-01 1.1110090E-01 --3.0000000E+01 -8.5909483E-01 3.2610000E-01 9.4958218E-02 --2.9000000E+01 -8.5976973E-01 3.0497775E-01 8.7667452E-02 --2.8000000E+01 -8.6159135E-01 2.8666880E-01 8.0668716E-02 --2.7000000E+01 -8.6425508E-01 2.7054544E-01 7.3910297E-02 --2.6000000E+01 -8.6745631E-01 2.5597998E-01 6.7340483E-02 --2.5000000E+01 -8.7089041E-01 2.4234474E-01 6.0907558E-02 --2.4000000E+01 -8.7425279E-01 2.2901202E-01 5.4559810E-02 --2.3000000E+01 -8.7813915E-01 2.1690612E-01 4.8466134E-02 --2.2000000E+01 -8.8189576E-01 2.0550890E-01 4.2368435E-02 --2.1000000E+01 -8.8532825E-01 1.9464944E-01 3.6196697E-02 --2.0000000E+01 -8.8824227E-01 1.8415686E-01 2.9880905E-02 --1.9500000E+01 -8.8934285E-01 1.7900855E-01 2.6615975E-02 --1.9000000E+01 -8.9044343E-01 1.7386023E-01 2.3351044E-02 --1.8500000E+01 -8.9109040E-01 1.6872445E-01 1.9944072E-02 --1.8000000E+01 -8.9173737E-01 1.6358867E-01 1.6537099E-02 --1.7500000E+01 -8.9146773E-01 1.5837997E-01 1.2953077E-02 --1.7000000E+01 -8.9119808E-01 1.5317127E-01 9.3690542E-03 --1.6500000E+01 -8.8651715E-01 1.4780420E-01 5.5729745E-03 --1.6000000E+01 -8.8183622E-01 1.4243713E-01 1.7768947E-03 --1.5500000E+01 -8.7483575E-01 1.3682624E-01 -2.2662501E-03 --1.5000000E+01 -8.6783528E-01 1.3121534E-01 -6.3093948E-03 --1.4500000E+01 -8.5659133E-01 1.2527518E-01 -1.0634612E-02 --1.4000000E+01 -8.4534737E-01 1.1933501E-01 -1.4959829E-02 --1.3500000E+01 -8.2985818E-01 1.1298012E-01 -1.9602127E-02 --1.3000000E+01 -8.1436899E-01 1.0662523E-01 -2.4244424E-02 --1.2500000E+01 -7.9499698E-01 9.9770162E-02 -2.9238809E-02 --1.2000000E+01 -7.7562497E-01 9.2915094E-02 -3.4233194E-02 --1.1500000E+01 -7.5042427E-01 8.4917922E-02 -3.9863844E-02 --1.1000000E+01 -7.2522356E-01 7.6920749E-02 -4.5494493E-02 --1.0500000E+01 -7.0166226E-01 7.1444718E-02 -6.1634335E-02 --1.0000000E+01 -6.7810095E-01 6.5968686E-02 -7.7774177E-02 --9.5000000E+00 -6.3087528E-01 5.4937458E-02 -8.7344419E-02 --9.0000000E+00 -5.8364960E-01 4.3906229E-02 -9.6914660E-02 --8.5000000E+00 -5.3119389E-01 3.1801879E-02 -1.0447700E-01 --8.0000000E+00 -4.7873818E-01 1.9697529E-02 -1.1203933E-01 --7.5000000E+00 -4.0984329E-01 1.5668509E-02 -1.2340658E-01 --7.0000000E+00 -3.4094839E-01 1.1639488E-02 -1.3477382E-01 --6.5000000E+00 -2.7319015E-01 1.1511571E-02 -1.4005509E-01 --6.0000000E+00 -2.0543190E-01 1.1383654E-02 -1.4533636E-01 --5.5000000E+00 -1.4008407E-01 1.0887060E-02 -1.4802557E-01 --5.0000000E+00 -7.4736249E-02 1.0390466E-02 -1.5071477E-01 --4.5000000E+00 -1.0925257E-02 1.0187598E-02 -1.5226586E-01 --4.0000000E+00 5.2885736E-02 9.9847291E-03 -1.5381694E-01 --3.5000000E+00 1.1494406E-01 1.0023815E-02 -1.5475831E-01 --3.0000000E+00 1.7700239E-01 1.0062900E-02 -1.5569968E-01 --2.5000000E+00 2.3900932E-01 1.0124970E-02 -1.5639901E-01 --2.0000000E+00 3.0101624E-01 1.0187039E-02 -1.5709834E-01 --1.5000000E+00 3.6396668E-01 1.0281807E-02 -1.5767127E-01 --1.0000000E+00 4.2691712E-01 1.0376574E-02 -1.5824419E-01 --5.0000000E-01 4.8963800E-01 1.0501861E-02 -1.5873509E-01 -0.0000000E+00 5.5235887E-01 1.0627147E-02 -1.5922598E-01 -5.0000000E-01 6.1409321E-01 1.0787656E-02 -1.5966991E-01 -1.0000000E+00 6.7582754E-01 1.0948164E-02 -1.6011383E-01 -1.5000000E+00 7.3681057E-01 1.1136666E-02 -1.6045572E-01 -2.0000000E+00 7.9779359E-01 1.1325167E-02 -1.6079761E-01 -2.5000000E+00 8.5929688E-01 1.1550519E-02 -1.6108218E-01 -3.0000000E+00 9.2080016E-01 1.1775871E-02 -1.6136674E-01 -3.5000000E+00 9.8203113E-01 1.2036683E-02 -1.6155182E-01 -4.0000000E+00 1.0432621E+00 1.2297495E-02 -1.6173689E-01 -4.5000000E+00 1.1033698E+00 1.2604357E-02 -1.6167774E-01 -5.0000000E+00 1.1634774E+00 1.2911219E-02 -1.6161858E-01 -5.5000000E+00 1.2219564E+00 1.3275399E-02 -1.6140612E-01 -6.0000000E+00 1.2804353E+00 1.3639579E-02 -1.6119365E-01 -6.5000000E+00 1.3338964E+00 1.4111196E-02 -1.6076362E-01 -7.0000000E+00 1.3873575E+00 1.4582812E-02 -1.6033358E-01 -7.5000000E+00 1.4457454E+00 1.4886902E-02 -1.5977991E-01 -8.0000000E+00 1.5041332E+00 1.5190991E-02 -1.5922624E-01 -8.5000000E+00 1.5531272E+00 1.5840679E-02 -1.5842394E-01 -9.0000000E+00 1.6021211E+00 1.6490367E-02 -1.5762163E-01 -9.5000000E+00 1.6454078E+00 1.6931419E-02 -1.5669297E-01 -1.0000000E+01 1.6886945E+00 1.7372471E-02 -1.5576430E-01 -1.0500000E+01 1.7129639E+00 1.7904612E-02 -1.5427137E-01 -1.1000000E+01 1.7372332E+00 1.8436752E-02 -1.5277843E-01 -1.1500000E+01 1.7723415E+00 1.9408985E-02 -1.5063186E-01 -1.2000000E+01 1.8074498E+00 2.0381218E-02 -1.4848529E-01 -1.2500000E+01 1.8441227E+00 2.1553468E-02 -1.4612356E-01 -1.3000000E+01 1.8807955E+00 2.2725718E-02 -1.4376182E-01 -1.3500000E+01 1.8988876E+00 2.4025093E-02 -1.4349296E-01 -1.4000000E+01 1.9169797E+00 2.5324467E-02 -1.4322409E-01 -1.4500000E+01 1.8570856E+00 7.9539379E-02 -1.4675834E-01 -1.5000000E+01 1.7971915E+00 1.3375429E-01 -1.5029258E-01 -1.5500000E+01 1.7559874E+00 1.4584513E-01 -1.5227813E-01 -1.6000000E+01 1.7147832E+00 1.5793596E-01 -1.5426368E-01 -1.6500000E+01 1.6758508E+00 1.6932982E-01 -1.5495058E-01 -1.7000000E+01 1.6369184E+00 1.8072367E-01 -1.5563747E-01 -1.7500000E+01 1.6003422E+00 1.9152197E-01 -1.5615981E-01 -1.8000000E+01 1.5637660E+00 2.0232026E-01 -1.5668214E-01 -1.8500000E+01 1.5296305E+00 2.1262440E-01 -1.5706803E-01 -1.9000000E+01 1.4954950E+00 2.2292854E-01 -1.5745392E-01 -1.9500000E+01 1.4638847E+00 2.3283994E-01 -1.5773148E-01 -2.0000000E+01 1.4322743E+00 2.4275134E-01 -1.5800904E-01 -2.1000000E+01 1.3742728E+00 2.6199150E-01 -1.5840372E-01 -2.2000000E+01 1.3216595E+00 2.8085183E-01 -1.5869422E-01 -2.3000000E+01 1.2746033E+00 2.9953516E-01 -1.5893675E-01 -2.4000000E+01 1.2332732E+00 3.1824432E-01 -1.5918756E-01 -2.5000000E+01 1.1978381E+00 3.3718214E-01 -1.5950288E-01 -2.6000000E+01 1.1684669E+00 3.5655144E-01 -1.5993893E-01 -2.7000000E+01 1.1453285E+00 3.7655505E-01 -1.6055197E-01 -2.8000000E+01 1.1285920E+00 3.9739580E-01 -1.6139821E-01 -2.9000000E+01 1.1184261E+00 4.1927650E-01 -1.6253389E-01 -3.0000000E+01 1.1150000E+00 4.4240000E-01 -1.6401525E-01 -3.2000000E+01 1.1189099E+00 4.9324020E-01 -1.7804703E-01 -3.4000000E+01 1.1228100E+00 5.4608095E-01 -1.9127586E-01 -3.6000000E+01 1.1268998E+00 5.9675108E-01 -2.0375902E-01 -3.8000000E+01 1.1355616E+00 6.4593756E-01 -2.1555093E-01 -4.0000000E+01 1.1396662E+00 6.9380000E-01 -2.2670345E-01 -4.2000000E+01 1.1381718E+00 7.4031368E-01 -2.3726624E-01 -4.4000000E+01 1.1303801E+00 7.8551731E-01 -2.4686502E-01 -4.6000000E+01 1.1169649E+00 8.2929407E-01 -2.5570774E-01 -4.8000000E+01 1.0985004E+00 8.7180269E-01 -2.6428767E-01 -5.0000000E+01 1.0754796E+00 9.1270000E-01 -2.7267575E-01 -5.2000000E+01 1.0483295E+00 9.5199445E-01 -2.8092289E-01 -5.4000000E+01 1.0174243E+00 9.8969637E-01 -2.8906318E-01 -5.6000000E+01 9.8309664E-01 1.0254973E+00 -2.9711688E-01 -5.8000000E+01 9.4564611E-01 1.0596647E+00 -3.0509292E-01 -6.0000000E+01 9.0534690E-01 1.0919000E+00 -3.1299114E-01 -6.2000000E+01 8.6245327E-01 1.1222910E+00 -3.2080427E-01 -6.4000000E+01 8.1720387E-01 1.1508772E+00 -3.2851956E-01 -6.6000000E+01 7.6982482E-01 1.1773280E+00 -3.3612028E-01 -6.8000000E+01 7.2053169E-01 1.2020466E+00 -3.4358689E-01 -7.0000000E+01 6.6953062E-01 1.2246000E+00 -3.5089813E-01 -7.2000000E+01 6.1701864E-01 1.2451519E+00 -3.5803189E-01 -7.4000000E+01 5.6318332E-01 1.2638003E+00 -3.6496593E-01 -7.6000000E+01 5.0820189E-01 1.2801051E+00 -3.7167852E-01 -7.8000000E+01 4.5223988E-01 1.2947564E+00 -3.7814897E-01 -8.0000000E+01 3.9544936E-01 1.3070000E+00 -3.8435805E-01 -8.2000000E+01 3.3796690E-01 1.3173181E+00 -3.9028841E-01 -8.4000000E+01 2.7991129E-01 1.3257459E+00 -3.9592486E-01 -8.6000000E+01 2.2138109E-01 1.3311894E+00 -4.0125471E-01 -8.8000000E+01 1.6245211E-01 1.3354616E+00 -4.0626801E-01 -9.0000000E+01 1.0317481E-01 1.3373000E+00 -4.1095779E-01 -9.2000000E+01 4.1723054E-02 1.3363173E+00 -4.1532382E-01 -9.4000000E+01 -1.8445679E-02 1.3339005E+00 -4.1936326E-01 -9.6000000E+01 -7.8328872E-02 1.3302638E+00 -4.2307564E-01 -9.8000000E+01 -1.3772811E-01 1.3232023E+00 -4.2646197E-01 -1.0000000E+02 -1.9644850E-01 1.3142000E+00 -4.2952454E-01 -1.0200000E+02 -2.5430058E-01 1.3032495E+00 -4.3226653E-01 -1.0400000E+02 -3.1110187E-01 1.2897213E+00 -4.3469173E-01 -1.0600000E+02 -3.6667790E-01 1.2744930E+00 -4.3680411E-01 -1.0800000E+02 -4.2086284E-01 1.2567449E+00 -4.3860738E-01 -1.1000000E+02 -4.7349944E-01 1.2370000E+00 -4.4010442E-01 -1.1200000E+02 -5.2443836E-01 1.2151664E+00 -4.4129669E-01 -1.1400000E+02 -5.7353658E-01 1.1910326E+00 -4.4218347E-01 -1.1600000E+02 -6.2065503E-01 1.1650608E+00 -4.4276098E-01 -1.1800000E+02 -6.6565509E-01 1.1367906E+00 -4.4302140E-01 -1.2000000E+02 -7.0835296E-01 1.1066000E+00 -4.4296000E-01 -1.2200000E+02 -7.4870666E-01 1.0744324E+00 -4.4256000E-01 -1.2400000E+02 -7.8649560E-01 1.0402056E+00 -4.4176000E-01 -1.2600000E+02 -8.2144138E-01 1.0042975E+00 -4.4056000E-01 -1.2800000E+02 -8.5336200E-01 9.6640530E-01 -4.3880000E-01 -1.3000000E+02 -8.8198113E-01 9.2690000E-01 -4.3664000E-01 -1.3200000E+02 -9.0702358E-01 8.8578087E-01 -4.3376000E-01 -1.3400000E+02 -9.2793053E-01 8.4305973E-01 -4.3024000E-01 -1.3600000E+02 -9.3864468E-01 7.9909989E-01 -4.2472000E-01 -1.3800000E+02 -9.4942962E-01 7.5363717E-01 -4.1928000E-01 -1.4000000E+02 -9.6009579E-01 7.0750000E-01 -4.1376000E-01 -1.4200000E+02 -9.4095497E-01 6.5959283E-01 -4.0272000E-01 -1.4400000E+02 -9.2175707E-01 6.0888925E-01 -3.9168000E-01 -1.4600000E+02 -9.0269110E-01 5.5650350E-01 -3.8064000E-01 -1.4800000E+02 -8.7753577E-01 5.0354984E-01 -3.6680000E-01 -1.5000000E+02 -8.3896560E-01 4.5114253E-01 -3.4632000E-01 -1.5200000E+02 -8.0037923E-01 4.0039581E-01 -3.2584000E-01 -1.5400000E+02 -7.6196489E-01 3.5242395E-01 -3.0536000E-01 -1.5600000E+02 -7.1123784E-01 3.1404132E-01 -2.7920000E-01 -1.5800000E+02 -6.7186683E-01 2.9074532E-01 -2.5912000E-01 -1.6000000E+02 -6.5571333E-01 2.7639825E-01 -2.5112000E-01 -1.6200000E+02 -6.6719688E-01 2.6486238E-01 -2.5696000E-01 -1.6400000E+02 -6.9987478E-01 2.5000000E-01 -2.7312000E-01 -1.6600000E+02 -7.5236044E-01 2.2718741E-01 -2.9784000E-01 -1.6800000E+02 -8.1642199E-01 1.9785702E-01 -3.2912000E-01 -1.7000000E+02 -8.5000000E-01 1.6495522E-01 -3.6832000E-01 -1.7200000E+02 -8.1865860E-01 1.3142846E-01 -3.3616000E-01 -1.7400000E+02 -7.1845619E-01 1.0022313E-01 -2.7080000E-01 -1.7600000E+02 -5.8505061E-01 7.4285672E-02 -1.9872000E-01 -1.7800000E+02 -4.7781347E-01 5.6562488E-02 -1.3416000E-01 -1.8000000E+02 -3.7080000E-01 5.0000000E-02 -6.9520000E-02 -Profile 2, Set 2 - 57% AOA Cl Cd Cm 57% --1.8000000E+02 -2.6086270E-01 2.4065434E-01 -6.6800000E-02 --1.7800000E+02 -1.6200987E-01 2.3313291E-01 3.2800000E-03 --1.7600000E+02 -5.3223218E-02 2.2711022E-01 7.6720000E-02 --1.7400000E+02 6.5731224E-02 2.2241974E-01 1.5672000E-01 --1.7200000E+02 1.9403956E-01 2.1889494E-01 2.3360000E-01 --1.7000000E+02 3.1046992E-01 2.1636929E-01 2.7136000E-01 --1.6800000E+02 3.4346850E-01 2.1467628E-01 2.6528000E-01 --1.6600000E+02 3.5621641E-01 2.1364937E-01 2.5376000E-01 --1.6400000E+02 3.2715444E-01 2.1312203E-01 2.4000000E-01 --1.6200000E+02 3.0698954E-01 2.1292775E-01 2.3248000E-01 --1.6000000E+02 2.9727562E-01 2.1290000E-01 2.2912000E-01 --1.5800000E+02 3.0493217E-01 2.2091983E-01 2.3536000E-01 --1.5600000E+02 3.2744292E-01 2.4331762E-01 2.5264000E-01 --1.5400000E+02 3.6503951E-01 2.7760082E-01 2.7873657E-01 --1.5200000E+02 4.0767028E-01 3.2127687E-01 3.0006065E-01 --1.5000000E+02 4.4544722E-01 3.7185322E-01 3.2308783E-01 --1.4800000E+02 4.7110785E-01 4.2683731E-01 3.3980436E-01 --1.4600000E+02 4.9430964E-01 4.8373659E-01 3.5551030E-01 --1.4400000E+02 5.1292081E-01 5.4005850E-01 3.6985848E-01 --1.4200000E+02 5.2702288E-01 5.9331049E-01 3.8288806E-01 --1.4000000E+02 5.3674007E-01 6.4100000E-01 3.9464363E-01 --1.3800000E+02 5.4222998E-01 6.8590215E-01 4.0517341E-01 --1.3600000E+02 5.4367533E-01 7.3120113E-01 4.1452780E-01 --1.3400000E+02 5.4127674E-01 7.7531136E-01 4.2275813E-01 --1.3200000E+02 5.3524658E-01 8.1857786E-01 4.2991567E-01 --1.3000000E+02 5.2580391E-01 8.6060000E-01 4.3605090E-01 --1.2800000E+02 5.1317025E-01 9.0132006E-01 4.4121290E-01 --1.2600000E+02 4.9756633E-01 9.4068533E-01 4.4544903E-01 --1.2400000E+02 4.7920946E-01 9.7821853E-01 4.4880461E-01 --1.2200000E+02 4.5831163E-01 1.0142228E+00 4.5132287E-01 --1.2000000E+02 4.3507808E-01 1.0482000E+00 4.5304487E-01 --1.1800000E+02 4.0970638E-01 1.0802061E+00 4.5400954E-01 --1.1600000E+02 3.8238587E-01 1.1102554E+00 4.5425378E-01 --1.1400000E+02 3.5329732E-01 1.1378430E+00 4.5381259E-01 --1.1200000E+02 3.2261301E-01 1.1634949E+00 4.5271919E-01 --1.1000000E+02 2.9049685E-01 1.1866000E+00 4.5100519E-01 --1.0800000E+02 2.5710473E-01 1.2073773E+00 4.4870078E-01 --1.0600000E+02 2.2258502E-01 1.2259430E+00 4.4583483E-01 --1.0400000E+02 1.8707913E-01 1.2416746E+00 4.4243506E-01 --1.0200000E+02 1.5072219E-01 1.2555655E+00 4.3852819E-01 --1.0000000E+02 1.1364376E-01 1.2665000E+00 4.3414003E-01 --9.8000000E+01 7.5968638E-02 1.2752980E+00 4.2929558E-01 --9.6000000E+01 3.7817674E-02 1.2819458E+00 4.2401913E-01 --9.4000000E+01 -6.9135313E-04 1.2844808E+00 4.1833426E-01 --9.2000000E+01 -3.9442841E-02 1.2857982E+00 4.1226392E-01 --9.0000000E+01 -7.8322446E-02 1.2863000E+00 4.0583041E-01 --8.8000000E+01 -1.1721615E-01 1.2837866E+00 3.9905539E-01 --8.6000000E+01 -1.5600929E-01 1.2780933E+00 3.9195980E-01 --8.4000000E+01 -1.9458561E-01 1.2713222E+00 3.8456387E-01 --8.2000000E+01 -2.3282630E-01 1.2617782E+00 3.7688695E-01 --8.0000000E+01 -2.7060901E-01 1.2504000E+00 3.6894750E-01 --7.8000000E+01 -3.0780689E-01 1.2372024E+00 3.6076287E-01 --7.6000000E+01 -3.4428762E-01 1.2217980E+00 3.5234924E-01 --7.4000000E+01 -3.7991250E-01 1.2049106E+00 3.4372142E-01 --7.2000000E+01 -4.1453552E-01 1.1859838E+00 3.3489264E-01 --7.0000000E+01 -4.4800248E-01 1.1654000E+00 3.2587438E-01 --6.8000000E+01 -4.8015018E-01 1.1431275E+00 3.1667613E-01 --6.6000000E+01 -5.1080565E-01 1.1190173E+00 3.0730511E-01 --6.4000000E+01 -5.3978549E-01 1.0933857E+00 2.9776607E-01 --6.2000000E+01 -5.6689532E-01 1.0659453E+00 2.8806090E-01 --6.0000000E+01 -5.9192939E-01 1.0368000E+00 2.7818840E-01 --5.8000000E+01 -6.1467034E-01 1.0058711E+00 2.6814391E-01 --5.6000000E+01 -6.3488929E-01 9.7301646E-01 2.5791893E-01 --5.4000000E+01 -6.5234612E-01 9.3829725E-01 2.4750078E-01 --5.2000000E+01 -6.6679017E-01 9.0149442E-01 2.3687219E-01 --5.0000000E+01 -6.7796143E-01 8.6250000E-01 2.2601086E-01 --4.8000000E+01 -6.8559221E-01 8.2116674E-01 2.1488911E-01 --4.6000000E+01 -6.8940943E-01 7.7724007E-01 2.0347336E-01 --4.4000000E+01 -6.8913774E-01 7.2973921E-01 1.9172381E-01 --4.2000000E+01 -6.8450342E-01 6.7726207E-01 1.7959393E-01 --4.0000000E+01 -6.7933634E-01 6.2730000E-01 1.6703018E-01 --3.8000000E+01 -6.7373414E-01 5.8345422E-01 1.5397159E-01 --3.6000000E+01 -6.6740367E-01 5.4261465E-01 1.4034954E-01 --3.4000000E+01 -6.5962852E-01 5.0348652E-01 1.2608748E-01 --3.2000000E+01 -6.5183308E-01 4.6609514E-01 1.1110090E-01 --3.0000000E+01 -6.4401735E-01 4.3040914E-01 9.4958218E-02 --2.9000000E+01 -6.4410974E-01 4.1357775E-01 8.9291383E-02 --2.8000000E+01 -6.4441201E-01 3.9734701E-01 8.4362092E-02 --2.7000000E+01 -6.4496180E-01 3.8173722E-01 7.9999491E-02 --2.6000000E+01 -6.4579673E-01 3.6676863E-01 7.6032723E-02 --2.5000000E+01 -6.4695443E-01 3.5246152E-01 7.2290931E-02 --2.4000000E+01 -6.4847255E-01 3.3883616E-01 6.8603260E-02 --2.3000000E+01 -6.5038870E-01 3.2591283E-01 6.4798855E-02 --2.2000000E+01 -6.5274054E-01 3.1371178E-01 6.0706858E-02 --2.1000000E+01 -6.5556568E-01 3.0225330E-01 5.6156414E-02 --2.0000000E+01 -6.5890177E-01 2.9155766E-01 5.0976667E-02 --1.9500000E+01 -6.6084410E-01 2.8728820E-01 4.7711826E-02 --1.9000000E+01 -6.6278643E-01 2.8301874E-01 4.4446984E-02 --1.8500000E+01 -6.6502187E-01 2.7923292E-01 4.0116082E-02 --1.8000000E+01 -6.6725730E-01 2.7544710E-01 3.5785180E-02 --1.7500000E+01 -6.6980466E-01 2.7195469E-01 3.1074294E-02 --1.7000000E+01 -6.7235201E-01 2.6846228E-01 2.6363407E-02 --1.6500000E+01 -6.7523011E-01 2.6507306E-01 2.1958612E-02 --1.6000000E+01 -6.7810820E-01 2.6168384E-01 1.7553816E-02 --1.5500000E+01 -6.8133585E-01 2.5822353E-01 1.4104836E-02 --1.5000000E+01 -6.8456349E-01 2.5476321E-01 1.0655855E-02 --1.4500000E+01 -6.8815951E-01 2.5154235E-01 7.5550427E-03 --1.4000000E+01 -6.9175553E-01 2.4832149E-01 4.4542304E-03 --1.3500000E+01 -6.9573874E-01 2.4530946E-01 1.4556958E-03 --1.3000000E+01 -6.9972194E-01 2.4229742E-01 -1.5428388E-03 --1.2500000E+01 -7.0411115E-01 2.3919694E-01 -4.1451931E-03 --1.2000000E+01 -7.0850036E-01 2.3609645E-01 -6.7475473E-03 --1.1500000E+01 -7.1331439E-01 2.3261022E-01 -8.6598187E-03 --1.1000000E+01 -7.1812841E-01 2.2912399E-01 -1.0572090E-02 --1.0500000E+01 -7.2338608E-01 2.2483721E-01 -1.1500280E-02 --1.0000000E+01 -7.2864374E-01 2.2055043E-01 -1.2428470E-02 --9.5000000E+00 -7.6640939E-01 2.1538238E-01 -1.3351477E-02 --9.0000000E+00 -8.0417503E-01 2.1021432E-01 -1.4274484E-02 --8.5000000E+00 -8.3959124E-01 2.0681938E-01 -2.0099807E-02 --8.0000000E+00 -8.7500744E-01 2.0342444E-01 -2.5925130E-02 --7.5000000E+00 -8.3440425E-01 1.9680217E-01 -2.8468869E-02 --7.0000000E+00 -7.9380105E-01 1.9017990E-01 -3.1012608E-02 --6.5000000E+00 -7.5711722E-01 1.8766607E-01 -3.9892345E-02 --6.0000000E+00 -7.2043339E-01 1.8515224E-01 -4.8772081E-02 --5.5000000E+00 -6.7854338E-01 1.7877714E-01 -5.5802547E-02 --5.0000000E+00 -6.3665337E-01 1.7240203E-01 -6.2833012E-02 --4.5000000E+00 -5.7684109E-01 1.6689625E-01 -6.7512806E-02 --4.0000000E+00 -5.1702880E-01 1.6139047E-01 -7.2192600E-02 --3.5000000E+00 -4.5467292E-01 1.5825650E-01 -7.4646484E-02 --3.0000000E+00 -3.9231703E-01 1.5512252E-01 -7.7100367E-02 --2.5000000E+00 -3.3024687E-01 1.5103837E-01 -7.9615935E-02 --2.0000000E+00 -2.6817670E-01 1.4695421E-01 -8.2131502E-02 --1.5000000E+00 -2.0610579E-01 1.3951342E-01 -8.5448967E-02 --1.0000000E+00 -1.4403487E-01 1.3207262E-01 -8.8766431E-02 --5.0000000E-01 -8.1964943E-02 1.2852293E-01 -9.2987757E-02 -0.0000000E+00 -1.9895016E-02 1.2497323E-01 -9.7209082E-02 -5.0000000E-01 4.2175067E-02 1.2465997E-01 -1.0301186E-01 -1.0000000E+00 1.0424515E-01 1.2434671E-01 -1.0881463E-01 -1.5000000E+00 1.6631560E-01 1.2284508E-01 -1.1466399E-01 -2.0000000E+00 2.2838605E-01 1.2134344E-01 -1.2051335E-01 -2.5000000E+00 2.9045610E-01 1.2083531E-01 -1.2521937E-01 -3.0000000E+00 3.5252615E-01 1.2032717E-01 -1.2992539E-01 -3.5000000E+00 4.1459660E-01 1.2053650E-01 -1.3359110E-01 -4.0000000E+00 4.7666705E-01 1.2074582E-01 -1.3725681E-01 -4.5000000E+00 5.3873710E-01 1.2082657E-01 -1.4050035E-01 -5.0000000E+00 6.0080715E-01 1.2090732E-01 -1.4374389E-01 -5.5000000E+00 6.6287760E-01 1.2173159E-01 -1.4683513E-01 -6.0000000E+00 7.2494805E-01 1.2255586E-01 -1.4992637E-01 -6.5000000E+00 7.8701810E-01 1.2277745E-01 -1.5253298E-01 -7.0000000E+00 8.4908815E-01 1.2299903E-01 -1.5513959E-01 -7.5000000E+00 9.1115857E-01 1.2287699E-01 -1.5696547E-01 -8.0000000E+00 9.7322898E-01 1.2275495E-01 -1.5879135E-01 -8.5000000E+00 1.0352994E+00 1.2252295E-01 -1.6016361E-01 -9.0000000E+00 1.0973698E+00 1.2229095E-01 -1.6153587E-01 -9.5000000E+00 1.1594419E+00 1.2223135E-01 -1.6320728E-01 -1.0000000E+01 1.2215139E+00 1.2217174E-01 -1.6487869E-01 -1.0500000E+01 1.2841391E+00 1.2218989E-01 -1.6636940E-01 -1.1000000E+01 1.3467642E+00 1.2220804E-01 -1.6786010E-01 -1.1500000E+01 1.4044194E+00 1.2595604E-01 -1.6848553E-01 -1.2000000E+01 1.4620746E+00 1.2970404E-01 -1.6911095E-01 -1.2500000E+01 1.4929721E+00 1.6198863E-01 -1.6778943E-01 -1.3000000E+01 1.5238696E+00 1.9427321E-01 -1.6646790E-01 -1.3500000E+01 1.5417361E+00 2.0633252E-01 -1.6655316E-01 -1.4000000E+01 1.5596026E+00 2.1839183E-01 -1.6663841E-01 -1.4500000E+01 1.5751592E+00 2.3010475E-01 -1.6695390E-01 -1.5000000E+01 1.5907157E+00 2.4181767E-01 -1.6726938E-01 -1.5500000E+01 1.6046489E+00 2.5275715E-01 -1.6993854E-01 -1.6000000E+01 1.6185821E+00 2.6369663E-01 -1.7260769E-01 -1.6500000E+01 1.6280830E+00 2.7402080E-01 -1.7372881E-01 -1.7000000E+01 1.6375838E+00 2.8434496E-01 -1.7484993E-01 -1.7500000E+01 1.6366015E+00 2.9476927E-01 -1.7690551E-01 -1.8000000E+01 1.6356192E+00 3.0519358E-01 -1.7896109E-01 -1.8500000E+01 1.6332945E+00 3.1565198E-01 -1.8215430E-01 -1.9000000E+01 1.6309697E+00 3.2611037E-01 -1.8534751E-01 -1.9500000E+01 1.6273795E+00 3.3659955E-01 -1.8736764E-01 -2.0000000E+01 1.6237893E+00 3.4708873E-01 -1.8938777E-01 -2.1000000E+01 1.6010999E+00 3.6625854E-01 -1.8867734E-01 -2.2000000E+01 1.5575610E+00 3.8473515E-01 -1.8674903E-01 -2.3000000E+01 1.4986420E+00 4.0260191E-01 -1.8390731E-01 -2.4000000E+01 1.4298123E+00 4.1994217E-01 -1.8045664E-01 -2.5000000E+01 1.3565415E+00 4.3683929E-01 -1.7670151E-01 -2.6000000E+01 1.2842989E+00 4.5337661E-01 -1.7294638E-01 -2.7000000E+01 1.2185540E+00 4.6963751E-01 -1.6949571E-01 -2.8000000E+01 1.1647762E+00 4.8570533E-01 -1.6665399E-01 -2.9000000E+01 1.1284351E+00 5.0166342E-01 -1.6472568E-01 -3.0000000E+01 1.1150000E+00 5.1759514E-01 -1.6401525E-01 -3.2000000E+01 1.1148055E+00 5.4971325E-01 -1.7804703E-01 -3.4000000E+01 1.1145647E+00 5.8258441E-01 -1.9127586E-01 -3.6000000E+01 1.1144747E+00 6.1748759E-01 -2.0375902E-01 -3.8000000E+01 1.1188511E+00 6.5429796E-01 -2.1555093E-01 -4.0000000E+01 1.1186821E+00 6.9380000E-01 -2.2670345E-01 -4.2000000E+01 1.1129993E+00 7.3818154E-01 -2.3726624E-01 -4.4000000E+01 1.1011847E+00 7.8504351E-01 -2.4686502E-01 -4.6000000E+01 1.0839623E+00 8.2929407E-01 -2.5570774E-01 -4.8000000E+01 1.0619503E+00 8.7180269E-01 -2.6428767E-01 -5.0000000E+01 1.0356804E+00 9.1270000E-01 -2.7267575E-01 -5.2000000E+01 1.0056136E+00 9.5199445E-01 -2.8092289E-01 -5.4000000E+01 9.7215441E-01 9.8969637E-01 -2.8906318E-01 -5.6000000E+01 9.3566220E-01 1.0254973E+00 -2.9711688E-01 -5.8000000E+01 8.9646038E-01 1.0596647E+00 -3.0509292E-01 -6.0000000E+01 8.5484386E-01 1.0919000E+00 -3.1299114E-01 -6.2000000E+01 8.1108487E-01 1.1222910E+00 -3.2080427E-01 -6.4000000E+01 7.6543730E-01 1.1508772E+00 -3.2851956E-01 -6.6000000E+01 7.1813982E-01 1.1773280E+00 -3.3612028E-01 -6.8000000E+01 6.6941800E-01 1.2020466E+00 -3.4358689E-01 -7.0000000E+01 6.1948548E-01 1.2246000E+00 -3.5089813E-01 -7.2000000E+01 5.6854447E-01 1.2451519E+00 -3.5803189E-01 -7.4000000E+01 5.1678556E-01 1.2638003E+00 -3.6496593E-01 -7.6000000E+01 4.6438710E-01 1.2801051E+00 -3.7167852E-01 -7.8000000E+01 4.1151410E-01 1.2947564E+00 -3.7814897E-01 -8.0000000E+01 3.5831694E-01 1.3070000E+00 -3.8435805E-01 -8.2000000E+01 3.0492969E-01 1.3173181E+00 -3.9028841E-01 -8.4000000E+01 2.5146838E-01 1.3257459E+00 -3.9592486E-01 -8.6000000E+01 1.9802917E-01 1.3311894E+00 -4.0125471E-01 -8.8000000E+01 1.4468642E-01 1.3354616E+00 -4.0626801E-01 -9.0000000E+01 9.1490875E-02 1.3373000E+00 -4.1095779E-01 -9.2000000E+01 3.6835771E-02 1.3363173E+00 -4.1532382E-01 -9.4000000E+01 -1.6213082E-02 1.3339005E+00 -4.1936326E-01 -9.6000000E+01 -6.8542131E-02 1.3302638E+00 -4.2307564E-01 -9.8000000E+01 -1.1998046E-01 1.3232023E+00 -4.2646197E-01 -1.0000000E+02 -1.7036334E-01 1.3142000E+00 -4.2952454E-01 -1.0200000E+02 -2.1953381E-01 1.3032495E+00 -4.3226653E-01 -1.0400000E+02 -2.6734390E-01 1.2897213E+00 -4.3469173E-01 -1.0600000E+02 -3.1365544E-01 1.2744930E+00 -4.3680411E-01 -1.0800000E+02 -3.5834040E-01 1.2567449E+00 -4.3860738E-01 -1.1000000E+02 -4.0128072E-01 1.2370000E+00 -4.4010442E-01 -1.1200000E+02 -4.4236756E-01 1.2151664E+00 -4.4129669E-01 -1.1400000E+02 -4.8149982E-01 1.1910326E+00 -4.4218347E-01 -1.1600000E+02 -5.1858210E-01 1.1650608E+00 -4.4276098E-01 -1.1800000E+02 -5.5352165E-01 1.1367906E+00 -4.4302140E-01 -1.2000000E+02 -5.8619063E-01 1.1066000E+00 -4.4296000E-01 -1.2200000E+02 -6.1658108E-01 1.0744324E+00 -4.4256000E-01 -1.2400000E+02 -6.4453942E-01 1.0402056E+00 -4.4176000E-01 -1.2600000E+02 -6.6986862E-01 1.0042975E+00 -4.4056000E-01 -1.2800000E+02 -6.9245447E-01 9.6640530E-01 -4.3880000E-01 -1.3000000E+02 -7.1210968E-01 9.2690000E-01 -4.3664000E-01 -1.3200000E+02 -7.2865251E-01 8.8578087E-01 -4.3376000E-01 -1.3400000E+02 -7.4167915E-01 8.4305973E-01 -4.3024000E-01 -1.3600000E+02 -7.4642260E-01 7.9909989E-01 -4.2472000E-01 -1.3800000E+02 -7.5112691E-01 7.5363717E-01 -4.1928000E-01 -1.4000000E+02 -7.5564172E-01 7.0750000E-01 -4.1376000E-01 -1.4200000E+02 -7.3672370E-01 6.5693499E-01 -4.0272000E-01 -1.4400000E+02 -7.1791022E-01 5.9943915E-01 -3.9168000E-01 -1.4600000E+02 -6.9934886E-01 5.3789862E-01 -3.8064000E-01 -1.4800000E+02 -6.7624424E-01 4.7519954E-01 -3.6680000E-01 -1.5000000E+02 -6.4305733E-01 4.1422808E-01 -3.4632000E-01 -1.5200000E+02 -6.1016974E-01 3.5787036E-01 -3.2584000E-01 -1.5400000E+02 -5.7772536E-01 3.0901255E-01 -3.0536000E-01 -1.5600000E+02 -5.3630890E-01 2.7054079E-01 -2.7920000E-01 -1.5800000E+02 -5.0382399E-01 2.4534122E-01 -2.5912000E-01 -1.6000000E+02 -4.8897509E-01 2.3630000E-01 -2.5112000E-01 -1.6200000E+02 -4.9474923E-01 2.3630435E-01 -2.5696000E-01 -1.6400000E+02 -5.1604898E-01 2.3633483E-01 -2.7312000E-01 -1.6600000E+02 -5.4927232E-01 2.3641757E-01 -2.9784000E-01 -1.6800000E+02 -5.9070228E-01 2.3657868E-01 -3.2912000E-01 -1.7000000E+02 -6.4238939E-01 2.3684429E-01 -3.6832000E-01 -1.7200000E+02 -6.0310098E-01 2.3724054E-01 -3.3616000E-01 -1.7400000E+02 -5.1460605E-01 2.3779354E-01 -2.7080000E-01 -1.7600000E+02 -4.1657023E-01 2.3852942E-01 -1.9872000E-01 -1.7800000E+02 -3.3818357E-01 2.3947431E-01 -1.3416000E-01 -1.8000000E+02 -2.6086270E-01 2.4065434E-01 -6.9520000E-02 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko deleted file mode 100644 index 91b1a97759..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/FLEXWaveKin.wko +++ /dev/null @@ -1,24 +0,0 @@ -Wave kinematics - 3 -CrestHeightMax 2.695 m -LongitudinalVelocityMax 2.064 m/s -LongitudinalAccelerationMax 1.034 m/s^2 - 20.00 5.39 12.54 11 Water Depth/Hs/Tp/spectype - 1 Number of displacements - 0.00 -12 Number of Relative Depths - 0.000 0.050 0.100 0.150 0.200 0.300 0.400 0.500 0.600 0.700 0.800 1.000 - t [eta u_1..u_nDepths a_1..a_nDepths](x,t) * nDisplacements - 0.000 -0.04 -0.03 -0.03 -0.03 -0.03 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 1.03 1.01 0.98 0.96 0.94 0.90 0.87 0.84 0.82 0.80 0.79 0.78 - 0.250 0.30 0.23 0.23 0.22 0.21 0.21 0.20 0.19 0.19 0.18 0.18 0.18 0.17 1.03 1.00 0.98 0.96 0.93 0.90 0.86 0.84 0.82 0.80 0.79 0.78 - 0.500 0.63 0.49 0.47 0.46 0.45 0.44 0.42 0.41 0.40 0.39 0.38 0.37 0.37 1.01 0.98 0.96 0.93 0.91 0.88 0.85 0.82 0.80 0.78 0.77 0.76 - 0.750 0.96 0.73 0.71 0.70 0.68 0.67 0.64 0.62 0.60 0.58 0.57 0.56 0.55 0.97 0.94 0.92 0.90 0.88 0.84 0.81 0.79 0.77 0.75 0.74 0.73 - 1.000 1.26 0.97 0.94 0.92 0.90 0.88 0.84 0.81 0.79 0.77 0.75 0.74 0.73 0.91 0.89 0.87 0.85 0.83 0.80 0.77 0.74 0.73 0.71 0.70 0.69 - 1.250 1.55 1.19 1.16 1.13 1.10 1.08 1.04 1.00 0.97 0.94 0.92 0.91 0.90 0.85 0.82 0.81 0.79 0.77 0.74 0.71 0.69 0.67 0.66 0.65 0.64 - 1.500 1.81 1.39 1.35 1.32 1.29 1.26 1.21 1.17 1.13 1.10 1.08 1.06 1.05 0.76 0.75 0.73 0.71 0.70 0.67 0.64 0.62 0.61 0.59 0.59 0.58 - 1.750 2.05 1.57 1.53 1.49 1.46 1.43 1.37 1.32 1.28 1.25 1.22 1.20 1.19 0.67 0.66 0.64 0.62 0.61 0.59 0.57 0.55 0.53 0.52 0.51 0.51 - 2.000 2.25 1.72 1.68 1.64 1.60 1.57 1.50 1.45 1.41 1.37 1.34 1.32 1.30 0.57 0.55 0.54 0.53 0.52 0.50 0.48 0.46 0.45 0.44 0.44 0.43 - 2.250 2.42 1.85 1.81 1.76 1.72 1.68 1.62 1.56 1.51 1.47 1.44 1.42 1.40 0.46 0.44 0.43 0.42 0.41 0.40 0.38 0.37 0.36 0.35 0.35 0.34 - 2.500 2.55 1.95 1.90 1.86 1.82 1.78 1.70 1.64 1.59 1.55 1.52 1.49 1.48 0.34 0.33 0.32 0.31 0.31 0.29 0.28 0.27 0.27 0.26 0.26 0.25 - 2.750 2.64 2.02 1.97 1.92 1.88 1.84 1.76 1.70 1.65 1.60 1.57 1.55 1.53 0.21 0.21 0.20 0.20 0.19 0.18 0.18 0.17 0.17 0.16 0.16 0.16 - 3.000 2.69 2.06 2.01 1.96 1.91 1.87 1.80 1.73 1.68 1.63 1.60 1.58 1.56 0.08 0.08 0.08 0.08 0.08 0.07 0.07 0.07 0.07 0.06 0.06 0.06 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat deleted file mode 100644 index aed79911a2..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_ae.dat +++ /dev/null @@ -1,83 +0,0 @@ -2 -1 40 -0.0000E+00 5.3800E+00 1.0000E+02 1 ; -2.0000E+00 5.3800E+00 1.0000E+02 1 ; -4.7120E+00 5.3800E+00 9.6915E+01 1 ; -5.3960E+00 5.3800E+00 9.5291E+01 1 ; -6.3190E+00 5.3886E+00 9.2664E+01 1 ; -7.4750E+00 5.4212E+00 8.8775E+01 1 ; -8.8580E+00 5.4865E+00 8.3448E+01 1 ; -1.0458E+01 5.5887E+00 7.6689E+01 1 ; -1.2268E+01 5.7247E+00 6.8754E+01 1 ; -1.4275E+01 5.8817E+00 6.0273E+01 1 ; -1.6467E+01 6.0346E+00 5.2291E+01 1 ; -1.8833E+01 6.1478E+00 4.5826E+01 1 ; -2.1356E+01 6.2020E+00 4.0950E+01 1 ; -2.4023E+01 6.1950E+00 3.7343E+01 1 ; -2.6817E+01 6.1292E+00 3.4518E+01 1 ; -2.9721E+01 6.0096E+00 3.2270E+01 1 ; -3.2719E+01 5.8432E+00 3.0488E+01 1 ; -3.5791E+01 5.6400E+00 2.9020E+01 1 ; -3.8920E+01 5.4107E+00 2.7756E+01 1 ; -4.2086E+01 5.1613E+00 2.6693E+01 1 ; -4.5272E+01 4.8974E+00 2.5829E+01 1 ; -4.8457E+01 4.6255E+00 2.5157E+01 1 ; -5.1623E+01 4.3519E+00 2.4665E+01 1 ; -5.4750E+01 4.0827E+00 2.4338E+01 1 ; -5.7820E+01 3.8220E+00 2.4156E+01 1 ; -6.0815E+01 3.5724E+00 2.4100E+01 1 ; -6.3716E+01 3.3364E+00 2.4100E+01 1 ; -6.6506E+01 3.1161E+00 2.4100E+01 1 ; -6.9168E+01 2.9130E+00 2.4100E+01 1 ; -7.1687E+01 2.7275E+00 2.4100E+01 1 ; -7.4047E+01 2.5595E+00 2.4100E+01 1 ; -7.6234E+01 2.4087E+00 2.4100E+01 1 ; -7.8234E+01 2.2660E+00 2.4100E+01 1 ; -8.0037E+01 2.1175E+00 2.4100E+01 1 ; -8.1631E+01 1.9588E+00 2.4100E+01 1 ; -8.3006E+01 1.7913E+00 2.4100E+01 1 ; -8.4155E+01 1.6013E+00 2.4100E+01 1 ; -8.5070E+01 1.3858E+00 2.4100E+01 1 ; -8.5746E+01 1.1384E+00 2.4100E+01 1 ; -8.6366E+01 8.3354E-01 2.4100E+01 1 ; -2 40 -0.0000E+00 6.3800E+00 1.0E+02 1 ; -2.0000E+00 6.3800E+00 1.0E+02 1 ; -4.7120E+00 6.3800E+00 9.6E+01 1 ; -5.3960E+00 6.3800E+00 9.5E+01 1 ; -6.3190E+00 6.3886E+00 9.2E+01 1 ; -7.4750E+00 6.4212E+00 8.8E+01 1 ; -8.8580E+00 6.4865E+00 8.3E+01 1 ; -1.0458E+01 6.5887E+00 7.6E+01 1 ; -1.2268E+01 6.7247E+00 6.8E+01 1 ; -1.4275E+01 6.8817E+00 6.0E+01 1 ; -1.6467E+01 7.0346E+00 5.2E+01 1 ; -1.8833E+01 7.1478E+00 4.5E+01 1 ; -2.1356E+01 7.2020E+00 4.0E+01 1 ; -2.4023E+01 7.1950E+00 3.7E+01 1 ; -2.6817E+01 7.1292E+00 3.4E+01 1 ; -2.9721E+01 7.0096E+00 3.2E+01 1 ; -3.2719E+01 6.8432E+00 3.0E+01 1 ; -3.5791E+01 6.6400E+00 2.9E+01 1 ; -3.8920E+01 6.4107E+00 2.7E+01 1 ; -4.2086E+01 6.1613E+00 2.6E+01 1 ; -4.5272E+01 5.8974E+00 2.5E+01 1 ; -4.8457E+01 4.6255E+00 2.5E+01 1 ; -5.1623E+01 4.3519E+00 2.4E+01 1 ; -5.4750E+01 4.0827E+00 2.4E+01 1 ; -5.7820E+01 4.8220E+00 2.4E+01 1 ; -6.0815E+01 3.5724E+00 2.4E+01 1 ; -6.3716E+01 3.3364E+00 2.4E+01 1 ; -6.6506E+01 3.1161E+00 2.4E+01 1 ; -6.9168E+01 3.9130E+00 2.4E+01 1 ; -7.1687E+01 3.7275E+00 2.4E+01 1 ; -7.4047E+01 3.5595E+00 2.4E+01 1 ; -7.6234E+01 3.4087E+00 2.4E+01 1 ; -7.8234E+01 3.2660E+00 2.4E+01 1 ; -8.0037E+01 3.1175E+00 2.4E+01 1 ; -8.1631E+01 2.9588E+00 2.4E+01 1 ; -8.3006E+01 2.7913E+00 2.4E+01 1 ; -8.4155E+01 2.6013E+00 2.4E+01 1 ; -8.5070E+01 2.3858E+00 2.4E+01 1 ; -8.5746E+01 2.1384E+00 2.4E+01 1 ; -8.6366E+01 7.3354E-01 2.4E+01 1 ; diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat deleted file mode 100644 index a6bc2f07ec..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.dat +++ /dev/null @@ -1,800 +0,0 @@ - 2.50000E-02 -4.63467E+00 -5.50392E+01 -1.05444E+02 4.39306E+01 1.98584E+01 -4.21387E+00 9.24958E+01 9.47559E+01 9.70159E+01 -4.63467E+00 -5.25861E+01 -1.00538E+02 4.16729E+01 1.87738E+01 -4.12530E+00 8.79804E+01 9.01337E+01 9.22870E+01 -1.72650E+02 -2.29778E+02 -2.86906E+02 5.16662E+01 2.69843E+01 2.30229E+00 2.75983E+02 2.83747E+02 2.91511E+02 - 5.00000E-02 -6.78871E+00 -5.85374E+01 -1.10286E+02 4.51875E+01 2.05059E+01 -4.17575E+00 9.71638E+01 9.95491E+01 1.01935E+02 -6.78872E+00 -5.36313E+01 -1.00474E+02 4.06721E+01 1.83368E+01 -3.99861E+00 8.81330E+01 9.03048E+01 9.24767E+01 -1.70496E+02 -2.26280E+02 -2.82064E+02 5.04093E+01 2.63367E+01 2.26417E+00 2.71315E+02 2.78953E+02 2.86592E+02 - 7.50000E-02 -8.94277E+00 -6.20356E+01 -1.15128E+02 4.64445E+01 2.11534E+01 -4.13763E+00 1.01832E+02 1.04342E+02 1.06853E+02 -8.94276E+00 -5.46765E+01 -1.00410E+02 3.96714E+01 1.78997E+01 -3.87192E+00 8.82855E+01 9.04760E+01 9.26664E+01 -1.68342E+02 -2.22782E+02 -2.77221E+02 4.91523E+01 2.56892E+01 2.22605E+00 2.66647E+02 2.74160E+02 2.81673E+02 - 1.00000E-01 -1.10968E+01 -6.55338E+01 -1.19971E+02 4.77015E+01 2.18010E+01 -4.09951E+00 1.06500E+02 1.09136E+02 1.11772E+02 -1.10968E+01 -5.57217E+01 -1.00347E+02 3.86707E+01 1.74627E+01 -3.74523E+00 8.84381E+01 9.06471E+01 9.28561E+01 -1.66188E+02 -2.19284E+02 -2.72379E+02 4.78953E+01 2.50416E+01 2.18793E+00 2.61979E+02 2.69367E+02 2.76755E+02 - 1.25000E-01 -1.32509E+01 -6.90320E+01 -1.24813E+02 4.89585E+01 2.24485E+01 -4.06139E+00 1.11168E+02 1.13929E+02 1.16690E+02 -1.32509E+01 -5.67669E+01 -1.00283E+02 3.76699E+01 1.70257E+01 -3.61855E+00 8.85907E+01 9.08183E+01 9.30458E+01 -1.64034E+02 -2.15785E+02 -2.67537E+02 4.66383E+01 2.43941E+01 2.14981E+00 2.57311E+02 2.64574E+02 2.71836E+02 - 1.50000E-01 -1.54049E+01 -7.25302E+01 -1.29655E+02 5.02155E+01 2.30961E+01 -4.02327E+00 1.15836E+02 1.18722E+02 1.21609E+02 -1.54049E+01 -5.78121E+01 -1.00219E+02 3.66692E+01 1.65887E+01 -3.49186E+00 8.87433E+01 9.09894E+01 9.32355E+01 -1.61880E+02 -2.12287E+02 -2.62694E+02 4.53814E+01 2.37465E+01 2.11169E+00 2.52643E+02 2.59780E+02 2.66918E+02 - 1.75000E-01 -1.75590E+01 -7.60284E+01 -1.34498E+02 5.14724E+01 2.37436E+01 -3.98515E+00 1.20504E+02 1.23516E+02 1.26527E+02 -1.75590E+01 -5.88573E+01 -1.00156E+02 3.56685E+01 1.61516E+01 -3.36517E+00 8.88959E+01 9.11605E+01 9.34252E+01 -1.59726E+02 -2.08789E+02 -2.57852E+02 4.41244E+01 2.30990E+01 2.07357E+00 2.47975E+02 2.54987E+02 2.61999E+02 - 2.00000E-01 -1.97130E+01 -7.95266E+01 -1.39340E+02 5.27294E+01 2.43912E+01 -3.94702E+00 1.25172E+02 1.28309E+02 1.31446E+02 -1.97130E+01 -5.99024E+01 -1.00092E+02 3.46677E+01 1.57146E+01 -3.23848E+00 8.90484E+01 9.13317E+01 9.36149E+01 -1.57572E+02 -2.05291E+02 -2.53009E+02 4.28674E+01 2.24514E+01 2.03544E+00 2.43307E+02 2.50194E+02 2.57080E+02 - 2.25000E-01 -2.18671E+01 -8.30248E+01 -1.44182E+02 5.39864E+01 2.50387E+01 -3.90891E+00 1.29840E+02 1.33102E+02 1.36365E+02 -2.18671E+01 -6.09476E+01 -1.00028E+02 3.36670E+01 1.52776E+01 -3.11179E+00 8.92010E+01 9.15028E+01 9.38046E+01 -1.55418E+02 -2.01793E+02 -2.48167E+02 4.16104E+01 2.18039E+01 1.99733E+00 2.38639E+02 2.45400E+02 2.52162E+02 - 2.50000E-01 -2.40211E+01 -8.65230E+01 -1.49025E+02 5.52434E+01 2.56863E+01 -3.87078E+00 1.34508E+02 1.37896E+02 1.41283E+02 -2.40211E+01 -6.19928E+01 -9.99645E+01 3.26662E+01 1.48406E+01 -2.98510E+00 8.93536E+01 9.16740E+01 9.39943E+01 -1.53264E+02 -1.98294E+02 -2.43325E+02 4.03535E+01 2.11563E+01 1.95920E+00 2.33971E+02 2.40607E+02 2.47243E+02 - 2.75000E-01 -2.61751E+01 -9.00212E+01 -1.53867E+02 5.65003E+01 2.63338E+01 -3.83266E+00 1.39176E+02 1.42689E+02 1.46202E+02 -2.61752E+01 -6.30380E+01 -9.99008E+01 3.16655E+01 1.44036E+01 -2.85841E+00 8.95062E+01 9.18451E+01 9.41840E+01 -1.51110E+02 -1.94796E+02 -2.38482E+02 3.90965E+01 2.05088E+01 1.92108E+00 2.29303E+02 2.35814E+02 2.42325E+02 - 3.00000E-01 -2.83292E+01 -9.35194E+01 -1.58710E+02 5.77573E+01 2.69814E+01 -3.79454E+00 1.43844E+02 1.47482E+02 1.51120E+02 -2.83292E+01 -6.40832E+01 -9.98372E+01 3.06648E+01 1.39665E+01 -2.73172E+00 8.96588E+01 9.20162E+01 9.43737E+01 -1.48956E+02 -1.91298E+02 -2.33640E+02 3.78395E+01 1.98612E+01 1.88296E+00 2.24635E+02 2.31020E+02 2.37406E+02 - 3.25000E-01 -3.04833E+01 -9.70176E+01 -1.63552E+02 5.90143E+01 2.76289E+01 -3.75642E+00 1.48512E+02 1.52275E+02 1.56039E+02 -3.04832E+01 -6.51284E+01 -9.97735E+01 2.96640E+01 1.35295E+01 -2.60503E+00 8.98113E+01 9.21874E+01 9.45634E+01 -1.46802E+02 -1.87800E+02 -2.28798E+02 3.65825E+01 1.92137E+01 1.84484E+00 2.19967E+02 2.26227E+02 2.32487E+02 - 3.50000E-01 -3.26373E+01 -1.00516E+02 -1.68394E+02 6.02713E+01 2.82765E+01 -3.71830E+00 1.53180E+02 1.57069E+02 1.60958E+02 -3.26373E+01 -6.61735E+01 -9.97098E+01 2.86633E+01 1.30925E+01 -2.47834E+00 8.99639E+01 9.23585E+01 9.47531E+01 -1.44648E+02 -1.84302E+02 -2.23955E+02 3.53256E+01 1.85661E+01 1.80672E+00 2.15299E+02 2.21434E+02 2.27569E+02 - 3.75000E-01 -3.47913E+01 -1.04014E+02 -1.73237E+02 6.15282E+01 2.89240E+01 -3.68018E+00 1.57848E+02 1.61862E+02 1.65876E+02 -3.47913E+01 -6.72187E+01 -9.96461E+01 2.76626E+01 1.26555E+01 -2.35165E+00 9.01165E+01 9.25296E+01 9.49428E+01 -1.42494E+02 -1.80803E+02 -2.19113E+02 3.40686E+01 1.79186E+01 1.76860E+00 2.10631E+02 2.16641E+02 2.22650E+02 - 4.00000E-01 -3.69454E+01 -1.07512E+02 -1.78079E+02 6.27852E+01 2.95716E+01 -3.64206E+00 1.62516E+02 1.66655E+02 1.70795E+02 -3.69454E+01 -6.82639E+01 -9.95824E+01 2.66618E+01 1.22184E+01 -2.22496E+00 9.02691E+01 9.27008E+01 9.51325E+01 -1.40340E+02 -1.77305E+02 -2.14271E+02 3.28116E+01 1.72710E+01 1.73048E+00 2.05963E+02 2.11847E+02 2.17732E+02 - 4.25000E-01 -3.90994E+01 -1.11010E+02 -1.82921E+02 6.40422E+01 3.02191E+01 -3.60394E+00 1.67184E+02 1.71449E+02 1.75713E+02 -3.90994E+01 -6.93091E+01 -9.95188E+01 2.56611E+01 1.17814E+01 -2.09827E+00 9.04216E+01 9.28719E+01 9.53222E+01 -1.38186E+02 -1.73807E+02 -2.09428E+02 3.15546E+01 1.66235E+01 1.69236E+00 2.01295E+02 2.07054E+02 2.12813E+02 - 4.50000E-01 -4.12535E+01 -1.14509E+02 -1.87764E+02 6.52992E+01 3.08667E+01 -3.56582E+00 1.71852E+02 1.76242E+02 1.80632E+02 -4.12535E+01 -7.03543E+01 -9.94551E+01 2.46604E+01 1.13444E+01 -1.97158E+00 9.05742E+01 9.30431E+01 9.55119E+01 -1.36032E+02 -1.70309E+02 -2.04586E+02 3.02977E+01 1.59759E+01 1.65424E+00 1.96627E+02 2.02261E+02 2.07894E+02 - 4.75000E-01 -4.34075E+01 -1.18007E+02 -1.92606E+02 6.65561E+01 3.15142E+01 -3.52770E+00 1.76520E+02 1.81035E+02 1.85551E+02 -4.34075E+01 -7.13995E+01 -9.93914E+01 2.36596E+01 1.09074E+01 -1.84489E+00 9.07268E+01 9.32142E+01 9.57016E+01 -1.33878E+02 -1.66811E+02 -1.99744E+02 2.90407E+01 1.53284E+01 1.61612E+00 1.91959E+02 1.97467E+02 2.02976E+02 - 5.00000E-01 -4.55616E+01 -1.21505E+02 -1.97448E+02 6.78131E+01 3.21618E+01 -3.48958E+00 1.81188E+02 1.85829E+02 1.90469E+02 -4.55616E+01 -7.24446E+01 -9.93277E+01 2.26589E+01 1.04703E+01 -1.71820E+00 9.08794E+01 9.33853E+01 9.58913E+01 -1.31724E+02 -1.63312E+02 -1.94901E+02 2.77837E+01 1.46809E+01 1.57800E+00 1.87291E+02 1.92674E+02 1.98057E+02 - 5.25000E-01 -4.77156E+01 -1.25003E+02 -2.02291E+02 6.90701E+01 3.28093E+01 -3.45146E+00 1.85856E+02 1.90622E+02 1.95388E+02 -4.77156E+01 -7.34898E+01 -9.92640E+01 2.16582E+01 1.00333E+01 -1.59152E+00 9.10320E+01 9.35565E+01 9.60810E+01 -1.29569E+02 -1.59814E+02 -1.90059E+02 2.65267E+01 1.40333E+01 1.53988E+00 1.82623E+02 1.87881E+02 1.93139E+02 - 5.50000E-01 -4.98697E+01 -1.28501E+02 -2.07133E+02 7.03271E+01 3.34569E+01 -3.41333E+00 1.90524E+02 1.95415E+02 2.00306E+02 -4.98697E+01 -7.45350E+01 -9.92004E+01 2.06574E+01 9.59630E+00 -1.46483E+00 9.11845E+01 9.37276E+01 9.62707E+01 -1.27415E+02 -1.56316E+02 -1.85217E+02 2.52698E+01 1.33858E+01 1.50176E+00 1.77955E+02 1.83087E+02 1.88220E+02 - 5.75000E-01 -5.20237E+01 -1.32000E+02 -2.11975E+02 7.15840E+01 3.41044E+01 -3.37522E+00 1.95192E+02 2.00208E+02 2.05225E+02 -5.20237E+01 -7.55802E+01 -9.91367E+01 1.96567E+01 9.15928E+00 -1.33814E+00 9.13371E+01 9.38988E+01 9.64604E+01 -1.25261E+02 -1.52818E+02 -1.80374E+02 2.40128E+01 1.27382E+01 1.46363E+00 1.73287E+02 1.78294E+02 1.83301E+02 - 6.00000E-01 -5.41778E+01 -1.35498E+02 -2.16818E+02 7.28410E+01 3.47520E+01 -3.33710E+00 1.99860E+02 2.05002E+02 2.10144E+02 -5.41778E+01 -7.66254E+01 -9.90730E+01 1.86560E+01 8.72225E+00 -1.21145E+00 9.14897E+01 9.40699E+01 9.66501E+01 -1.23107E+02 -1.49320E+02 -1.75532E+02 2.27558E+01 1.20907E+01 1.42551E+00 1.68619E+02 1.73501E+02 1.78383E+02 - 6.25000E-01 -5.63318E+01 -1.38996E+02 -2.21660E+02 7.40980E+01 3.53995E+01 -3.29897E+00 2.04528E+02 2.09795E+02 2.15062E+02 -5.63318E+01 -7.76706E+01 -9.90093E+01 1.76552E+01 8.28523E+00 -1.08476E+00 9.16423E+01 9.42410E+01 9.68398E+01 -1.20953E+02 -1.45821E+02 -1.70689E+02 2.14988E+01 1.14431E+01 1.38739E+00 1.63951E+02 1.68708E+02 1.73464E+02 - 6.50000E-01 -5.84859E+01 -1.42494E+02 -2.26503E+02 7.53550E+01 3.60471E+01 -3.26085E+00 2.09196E+02 2.14588E+02 2.19981E+02 -5.84859E+01 -7.87158E+01 -9.89456E+01 1.66545E+01 7.84821E+00 -9.58068E-01 9.17948E+01 9.44122E+01 9.70295E+01 -1.18799E+02 -1.42323E+02 -1.65847E+02 2.02419E+01 1.07956E+01 1.34927E+00 1.59283E+02 1.63914E+02 1.68546E+02 - 6.75000E-01 -6.06399E+01 -1.45992E+02 -2.31345E+02 7.66119E+01 3.66946E+01 -3.22273E+00 2.13864E+02 2.19382E+02 2.24899E+02 -6.06399E+01 -7.97609E+01 -9.88820E+01 1.56537E+01 7.41118E+00 -8.31380E-01 9.19474E+01 9.45833E+01 9.72192E+01 -1.16645E+02 -1.38825E+02 -1.61005E+02 1.89849E+01 1.01480E+01 1.31115E+00 1.54615E+02 1.59121E+02 1.63627E+02 - 7.00000E-01 -6.27940E+01 -1.49491E+02 -2.36187E+02 7.78689E+01 3.73422E+01 -3.18461E+00 2.18532E+02 2.24175E+02 2.29818E+02 -6.27940E+01 -8.08061E+01 -9.88183E+01 1.46530E+01 6.97416E+00 -7.04690E-01 9.21000E+01 9.47544E+01 9.74089E+01 -1.14491E+02 -1.35327E+02 -1.56162E+02 1.77279E+01 9.50047E+00 1.27303E+00 1.49947E+02 1.54328E+02 1.58708E+02 - 7.25000E-01 -6.49480E+01 -1.52989E+02 -2.41030E+02 7.91259E+01 3.79897E+01 -3.14649E+00 2.23200E+02 2.28968E+02 2.34737E+02 -6.49480E+01 -8.18513E+01 -9.87546E+01 1.36523E+01 6.53714E+00 -5.78002E-01 9.22526E+01 9.49256E+01 9.75986E+01 -1.12337E+02 -1.31829E+02 -1.51320E+02 1.64709E+01 8.85292E+00 1.23491E+00 1.45279E+02 1.49534E+02 1.53790E+02 - 7.50000E-01 -6.71021E+01 -1.56487E+02 -2.45872E+02 8.03829E+01 3.86372E+01 -3.10837E+00 2.27868E+02 2.33762E+02 2.39655E+02 -6.71021E+01 -8.28965E+01 -9.86909E+01 1.26515E+01 6.10012E+00 -4.51311E-01 9.24052E+01 9.50967E+01 9.77883E+01 -1.10183E+02 -1.28330E+02 -1.46478E+02 1.52139E+01 8.20537E+00 1.19679E+00 1.40611E+02 1.44741E+02 1.48871E+02 - 7.75000E-01 -6.92561E+01 -1.59985E+02 -2.50714E+02 8.16398E+01 3.92848E+01 -3.07025E+00 2.32536E+02 2.38555E+02 2.44574E+02 -6.92561E+01 -8.39417E+01 -9.86272E+01 1.16508E+01 5.66309E+00 -3.24621E-01 9.25577E+01 9.52679E+01 9.79780E+01 -1.08029E+02 -1.24832E+02 -1.41635E+02 1.39570E+01 7.55782E+00 1.15867E+00 1.35943E+02 1.39948E+02 1.43953E+02 - 8.00000E-01 -7.14102E+01 -1.63483E+02 -2.55557E+02 8.28968E+01 3.99323E+01 -3.03213E+00 2.37204E+02 2.43348E+02 2.49492E+02 -7.14102E+01 -8.49869E+01 -9.85636E+01 1.06501E+01 5.22607E+00 -1.97933E-01 9.27103E+01 9.54390E+01 9.81677E+01 -1.05875E+02 -1.21334E+02 -1.36793E+02 1.27000E+01 6.91027E+00 1.12055E+00 1.31275E+02 1.35154E+02 1.39034E+02 - 8.25000E-01 -7.35642E+01 -1.66982E+02 -2.60399E+02 8.41538E+01 4.05799E+01 -2.99401E+00 2.41872E+02 2.48141E+02 2.54411E+02 -7.35642E+01 -8.60321E+01 -9.84999E+01 9.64934E+00 4.78905E+00 -7.12429E-02 9.28629E+01 9.56101E+01 9.83574E+01 -1.03721E+02 -1.17836E+02 -1.31951E+02 1.14430E+01 6.26272E+00 1.08243E+00 1.26607E+02 1.30361E+02 1.34115E+02 - 8.50000E-01 -7.57183E+01 -1.70480E+02 -2.65241E+02 8.54108E+01 4.12274E+01 -2.95589E+00 2.46540E+02 2.52935E+02 2.59330E+02 -7.57183E+01 -8.70772E+01 -9.84362E+01 8.64860E+00 4.35202E+00 5.54448E-02 9.30155E+01 9.57813E+01 9.85471E+01 -1.01567E+02 -1.14338E+02 -1.27108E+02 1.01860E+01 5.61518E+00 1.04431E+00 1.21939E+02 1.25568E+02 1.29197E+02 - 8.75000E-01 -7.78723E+01 -1.73978E+02 -2.70084E+02 8.66677E+01 4.18750E+01 -2.91777E+00 2.51208E+02 2.57728E+02 2.64248E+02 -7.78723E+01 -8.81224E+01 -9.83725E+01 7.64787E+00 3.91500E+00 1.82135E-01 9.31680E+01 9.59524E+01 9.87368E+01 -9.94128E+01 -1.10839E+02 -1.22266E+02 8.92907E+00 4.96763E+00 1.00619E+00 1.17271E+02 1.20775E+02 1.24278E+02 - 9.00000E-01 -8.00264E+01 -1.77476E+02 -2.74926E+02 8.79247E+01 4.25225E+01 -2.87965E+00 2.55876E+02 2.62521E+02 2.69167E+02 -8.00264E+01 -8.91676E+01 -9.83088E+01 6.64713E+00 3.47798E+00 3.08826E-01 9.33206E+01 9.61236E+01 9.89265E+01 -9.72587E+01 -1.07341E+02 -1.17424E+02 7.67209E+00 4.32008E+00 9.68065E-01 1.12603E+02 1.15981E+02 1.19360E+02 - 9.25000E-01 -8.21804E+01 -1.80974E+02 -2.79768E+02 8.91817E+01 4.31701E+01 -2.84152E+00 2.60544E+02 2.67315E+02 2.74085E+02 -8.21804E+01 -9.02128E+01 -9.82452E+01 5.64640E+00 3.04096E+00 4.35513E-01 9.34732E+01 9.62947E+01 9.91162E+01 -9.51047E+01 -1.03843E+02 -1.12581E+02 6.41512E+00 3.67253E+00 9.29944E-01 1.07935E+02 1.11188E+02 1.14441E+02 - 9.50000E-01 -8.43345E+01 -1.84473E+02 -2.84611E+02 9.04387E+01 4.38176E+01 -2.80341E+00 2.65212E+02 2.72108E+02 2.79004E+02 -8.43345E+01 -9.12580E+01 -9.81815E+01 4.64566E+00 2.60393E+00 5.62204E-01 9.36258E+01 9.64658E+01 9.93059E+01 -9.29506E+01 -1.00345E+02 -1.07739E+02 5.15814E+00 3.02498E+00 8.91823E-01 1.03267E+02 1.06395E+02 1.09522E+02 - 9.75000E-01 -8.64885E+01 -1.87971E+02 -2.89453E+02 9.16956E+01 4.44652E+01 -2.76529E+00 2.69880E+02 2.76901E+02 2.83923E+02 -8.64885E+01 -9.23032E+01 -9.81178E+01 3.64493E+00 2.16691E+00 6.88892E-01 9.37784E+01 9.66370E+01 9.94956E+01 -9.07966E+01 -9.68465E+01 -1.02896E+02 3.90117E+00 2.37744E+00 8.53703E-01 9.85989E+01 1.01601E+02 1.04604E+02 - 1.00000E+00 -1.74804E+02 -2.33276E+02 -2.91748E+02 5.29232E+01 2.76318E+01 2.34041E+00 2.80651E+02 2.88540E+02 2.96429E+02 -2.48062E+00 -5.15410E+01 -1.00601E+02 4.26736E+01 1.92108E+01 -4.25199E+00 8.78278E+01 8.99626E+01 9.20973E+01 -2.48062E+00 -5.15410E+01 -1.00601E+02 4.26736E+01 1.92108E+01 -4.25199E+00 8.78278E+01 8.99626E+01 9.20973E+01 - 1.02500E+00 -1.76959E+02 -2.36775E+02 -2.96591E+02 5.41802E+01 2.82794E+01 2.37853E+00 2.85319E+02 2.93333E+02 3.01348E+02 -4.63467E+00 -5.50392E+01 -1.05444E+02 4.39306E+01 1.98584E+01 -4.21387E+00 9.24958E+01 9.47559E+01 9.70159E+01 -4.63467E+00 -5.25861E+01 -1.00538E+02 4.16729E+01 1.87738E+01 -4.12530E+00 8.79804E+01 9.01337E+01 9.22870E+01 - 1.05000E+00 -1.79113E+02 -2.40273E+02 -3.01433E+02 5.54372E+01 2.89269E+01 2.41665E+00 2.89987E+02 2.98127E+02 3.06266E+02 -6.78871E+00 -5.85374E+01 -1.10286E+02 4.51875E+01 2.05059E+01 -4.17575E+00 9.71638E+01 9.95491E+01 1.01935E+02 -6.78872E+00 -5.36313E+01 -1.00474E+02 4.06721E+01 1.83368E+01 -3.99861E+00 8.81330E+01 9.03048E+01 9.24767E+01 - 1.07500E+00 -1.81267E+02 -2.43771E+02 -3.06275E+02 5.66941E+01 2.95745E+01 2.45477E+00 2.94655E+02 3.02920E+02 3.11185E+02 -8.94277E+00 -6.20356E+01 -1.15128E+02 4.64445E+01 2.11534E+01 -4.13763E+00 1.01832E+02 1.04342E+02 1.06853E+02 -8.94276E+00 -5.46765E+01 -1.00410E+02 3.96714E+01 1.78997E+01 -3.87192E+00 8.82855E+01 9.04760E+01 9.26664E+01 - 1.10000E+00 -1.83421E+02 -2.47269E+02 -3.11118E+02 5.79511E+01 3.02220E+01 2.49289E+00 2.99323E+02 3.07713E+02 3.16104E+02 -1.10968E+01 -6.55338E+01 -1.19971E+02 4.77015E+01 2.18010E+01 -4.09951E+00 1.06500E+02 1.09136E+02 1.11772E+02 -1.10968E+01 -5.57217E+01 -1.00347E+02 3.86707E+01 1.74627E+01 -3.74523E+00 8.84381E+01 9.06471E+01 9.28561E+01 - 1.12500E+00 -1.85575E+02 -2.50767E+02 -3.15960E+02 5.92081E+01 3.08696E+01 2.53101E+00 3.03991E+02 3.12507E+02 3.21022E+02 -1.32509E+01 -6.90320E+01 -1.24813E+02 4.89585E+01 2.24485E+01 -4.06139E+00 1.11168E+02 1.13929E+02 1.16690E+02 -1.32509E+01 -5.67669E+01 -1.00283E+02 3.76699E+01 1.70257E+01 -3.61855E+00 8.85907E+01 9.08183E+01 9.30458E+01 - 1.15000E+00 -1.87729E+02 -2.54266E+02 -3.20802E+02 6.04651E+01 3.15171E+01 2.56914E+00 3.08659E+02 3.17300E+02 3.25941E+02 -1.54049E+01 -7.25302E+01 -1.29655E+02 5.02155E+01 2.30961E+01 -4.02327E+00 1.15836E+02 1.18722E+02 1.21609E+02 -1.54049E+01 -5.78121E+01 -1.00219E+02 3.66692E+01 1.65887E+01 -3.49186E+00 8.87433E+01 9.09894E+01 9.32355E+01 - 1.17500E+00 -1.89883E+02 -2.57764E+02 -3.25645E+02 6.17220E+01 3.21647E+01 2.60726E+00 3.13327E+02 3.22093E+02 3.30859E+02 -1.75590E+01 -7.60284E+01 -1.34498E+02 5.14724E+01 2.37436E+01 -3.98515E+00 1.20504E+02 1.23516E+02 1.26527E+02 -1.75590E+01 -5.88573E+01 -1.00156E+02 3.56685E+01 1.61516E+01 -3.36517E+00 8.88959E+01 9.11605E+01 9.34252E+01 - 1.20000E+00 -1.92037E+02 -2.61262E+02 -3.30487E+02 6.29790E+01 3.28122E+01 2.64537E+00 3.17995E+02 3.26886E+02 3.35778E+02 -1.97130E+01 -7.95266E+01 -1.39340E+02 5.27294E+01 2.43912E+01 -3.94702E+00 1.25172E+02 1.28309E+02 1.31446E+02 -1.97130E+01 -5.99024E+01 -1.00092E+02 3.46677E+01 1.57146E+01 -3.23848E+00 8.90484E+01 9.13317E+01 9.36149E+01 - 1.22500E+00 -1.94191E+02 -2.64760E+02 -3.35329E+02 6.42360E+01 3.34597E+01 2.68349E+00 3.22663E+02 3.31680E+02 3.40697E+02 -2.18671E+01 -8.30248E+01 -1.44182E+02 5.39864E+01 2.50387E+01 -3.90891E+00 1.29840E+02 1.33102E+02 1.36365E+02 -2.18671E+01 -6.09476E+01 -1.00028E+02 3.36670E+01 1.52776E+01 -3.11179E+00 8.92010E+01 9.15028E+01 9.38046E+01 - 1.25000E+00 -1.96345E+02 -2.68258E+02 -3.40172E+02 6.54930E+01 3.41073E+01 2.72162E+00 3.27331E+02 3.36473E+02 3.45615E+02 -2.40211E+01 -8.65230E+01 -1.49025E+02 5.52434E+01 2.56863E+01 -3.87078E+00 1.34508E+02 1.37896E+02 1.41283E+02 -2.40211E+01 -6.19928E+01 -9.99645E+01 3.26662E+01 1.48406E+01 -2.98510E+00 8.93536E+01 9.16740E+01 9.39943E+01 - 1.27500E+00 -1.98499E+02 -2.71757E+02 -3.45014E+02 6.67500E+01 3.47548E+01 2.75974E+00 3.31999E+02 3.41266E+02 3.50534E+02 -2.61751E+01 -9.00212E+01 -1.53867E+02 5.65003E+01 2.63338E+01 -3.83266E+00 1.39176E+02 1.42689E+02 1.46202E+02 -2.61752E+01 -6.30380E+01 -9.99008E+01 3.16655E+01 1.44036E+01 -2.85841E+00 8.95062E+01 9.18451E+01 9.41840E+01 - 1.30000E+00 -2.00653E+02 -2.75255E+02 -3.49857E+02 6.80069E+01 3.54024E+01 2.79786E+00 3.36667E+02 3.46060E+02 3.55452E+02 -2.83292E+01 -9.35194E+01 -1.58710E+02 5.77573E+01 2.69814E+01 -3.79454E+00 1.43844E+02 1.47482E+02 1.51120E+02 -2.83292E+01 -6.40832E+01 -9.98372E+01 3.06648E+01 1.39665E+01 -2.73172E+00 8.96588E+01 9.20162E+01 9.43737E+01 - 1.32500E+00 -2.02807E+02 -2.78753E+02 -3.54699E+02 6.92639E+01 3.60499E+01 2.83598E+00 3.41335E+02 3.50853E+02 3.60371E+02 -3.04833E+01 -9.70176E+01 -1.63552E+02 5.90143E+01 2.76289E+01 -3.75642E+00 1.48512E+02 1.52275E+02 1.56039E+02 -3.04832E+01 -6.51284E+01 -9.97735E+01 2.96640E+01 1.35295E+01 -2.60503E+00 8.98113E+01 9.21874E+01 9.45634E+01 - 1.35000E+00 -2.04961E+02 -2.82251E+02 -3.59541E+02 7.05209E+01 3.66975E+01 2.87410E+00 3.46003E+02 3.55646E+02 3.65289E+02 -3.26373E+01 -1.00516E+02 -1.68394E+02 6.02713E+01 2.82765E+01 -3.71830E+00 1.53180E+02 1.57069E+02 1.60958E+02 -3.26373E+01 -6.61735E+01 -9.97098E+01 2.86633E+01 1.30925E+01 -2.47834E+00 8.99639E+01 9.23585E+01 9.47531E+01 - 1.37500E+00 -2.07115E+02 -2.85749E+02 -3.64384E+02 7.17779E+01 3.73450E+01 2.91222E+00 3.50671E+02 3.60440E+02 3.70208E+02 -3.47913E+01 -1.04014E+02 -1.73237E+02 6.15282E+01 2.89240E+01 -3.68018E+00 1.57848E+02 1.61862E+02 1.65876E+02 -3.47913E+01 -6.72187E+01 -9.96461E+01 2.76626E+01 1.26555E+01 -2.35165E+00 9.01165E+01 9.25296E+01 9.49428E+01 - 1.40000E+00 -2.09269E+02 -2.89248E+02 -3.69226E+02 7.30348E+01 3.79926E+01 2.95034E+00 3.55339E+02 3.65233E+02 3.75127E+02 -3.69454E+01 -1.07512E+02 -1.78079E+02 6.27852E+01 2.95716E+01 -3.64206E+00 1.62516E+02 1.66655E+02 1.70795E+02 -3.69454E+01 -6.82639E+01 -9.95824E+01 2.66618E+01 1.22184E+01 -2.22496E+00 9.02691E+01 9.27008E+01 9.51325E+01 - 1.42500E+00 -2.11423E+02 -2.92746E+02 -3.74068E+02 7.42918E+01 3.86401E+01 2.98846E+00 3.60007E+02 3.70026E+02 3.80045E+02 -3.90994E+01 -1.11010E+02 -1.82921E+02 6.40422E+01 3.02191E+01 -3.60394E+00 1.67184E+02 1.71449E+02 1.75713E+02 -3.90994E+01 -6.93091E+01 -9.95188E+01 2.56611E+01 1.17814E+01 -2.09827E+00 9.04216E+01 9.28719E+01 9.53222E+01 - 1.45000E+00 -2.13577E+02 -2.96244E+02 -3.78911E+02 7.55488E+01 3.92877E+01 3.02658E+00 3.64675E+02 3.74819E+02 3.84964E+02 -4.12535E+01 -1.14509E+02 -1.87764E+02 6.52992E+01 3.08667E+01 -3.56582E+00 1.71852E+02 1.76242E+02 1.80632E+02 -4.12535E+01 -7.03543E+01 -9.94551E+01 2.46604E+01 1.13444E+01 -1.97158E+00 9.05742E+01 9.30431E+01 9.55119E+01 - 1.47500E+00 -2.15731E+02 -2.99742E+02 -3.83753E+02 7.68057E+01 3.99352E+01 3.06470E+00 3.69343E+02 3.79613E+02 3.89882E+02 -4.34075E+01 -1.18007E+02 -1.92606E+02 6.65561E+01 3.15142E+01 -3.52770E+00 1.76520E+02 1.81035E+02 1.85551E+02 -4.34075E+01 -7.13995E+01 -9.93914E+01 2.36596E+01 1.09074E+01 -1.84489E+00 9.07268E+01 9.32142E+01 9.57016E+01 - 1.50000E+00 -2.17885E+02 -3.03240E+02 -3.88595E+02 7.80627E+01 4.05828E+01 3.10282E+00 3.74011E+02 3.84406E+02 3.94801E+02 -4.55616E+01 -1.21505E+02 -1.97448E+02 6.78131E+01 3.21618E+01 -3.48958E+00 1.81188E+02 1.85829E+02 1.90469E+02 -4.55616E+01 -7.24446E+01 -9.93277E+01 2.26589E+01 1.04703E+01 -1.71820E+00 9.08794E+01 9.33853E+01 9.58913E+01 - 1.52500E+00 -2.20040E+02 -3.06739E+02 -3.93438E+02 7.93197E+01 4.12303E+01 3.14095E+00 3.78679E+02 3.89199E+02 3.99720E+02 -4.77156E+01 -1.25003E+02 -2.02291E+02 6.90701E+01 3.28093E+01 -3.45146E+00 1.85856E+02 1.90622E+02 1.95388E+02 -4.77156E+01 -7.34898E+01 -9.92640E+01 2.16582E+01 1.00333E+01 -1.59152E+00 9.10320E+01 9.35565E+01 9.60810E+01 - 1.55000E+00 -2.22194E+02 -3.10237E+02 -3.98280E+02 8.05767E+01 4.18779E+01 3.17907E+00 3.83347E+02 3.93993E+02 4.04638E+02 -4.98697E+01 -1.28501E+02 -2.07133E+02 7.03271E+01 3.34569E+01 -3.41333E+00 1.90524E+02 1.95415E+02 2.00306E+02 -4.98697E+01 -7.45350E+01 -9.92004E+01 2.06574E+01 9.59630E+00 -1.46483E+00 9.11845E+01 9.37276E+01 9.62707E+01 - 1.57500E+00 -2.24348E+02 -3.13735E+02 -4.03122E+02 8.18337E+01 4.25254E+01 3.21718E+00 3.88015E+02 3.98786E+02 4.09557E+02 -5.20237E+01 -1.32000E+02 -2.11975E+02 7.15840E+01 3.41044E+01 -3.37522E+00 1.95192E+02 2.00208E+02 2.05225E+02 -5.20237E+01 -7.55802E+01 -9.91367E+01 1.96567E+01 9.15928E+00 -1.33814E+00 9.13371E+01 9.38988E+01 9.64604E+01 - 1.60000E+00 -2.26502E+02 -3.17233E+02 -4.07965E+02 8.30906E+01 4.31730E+01 3.25531E+00 3.92683E+02 4.03579E+02 4.14475E+02 -5.41778E+01 -1.35498E+02 -2.16818E+02 7.28410E+01 3.47520E+01 -3.33710E+00 1.99860E+02 2.05002E+02 2.10144E+02 -5.41778E+01 -7.66254E+01 -9.90730E+01 1.86560E+01 8.72225E+00 -1.21145E+00 9.14897E+01 9.40699E+01 9.66501E+01 - 1.62500E+00 -2.28656E+02 -3.20731E+02 -4.12807E+02 8.43476E+01 4.38205E+01 3.29343E+00 3.97351E+02 4.08372E+02 4.19394E+02 -5.63318E+01 -1.38996E+02 -2.21660E+02 7.40980E+01 3.53995E+01 -3.29897E+00 2.04528E+02 2.09795E+02 2.15062E+02 -5.63318E+01 -7.76706E+01 -9.90093E+01 1.76552E+01 8.28523E+00 -1.08476E+00 9.16423E+01 9.42410E+01 9.68398E+01 - 1.65000E+00 -2.30810E+02 -3.24230E+02 -4.17650E+02 8.56046E+01 4.44681E+01 3.33154E+00 4.02019E+02 4.13166E+02 4.24313E+02 -5.84859E+01 -1.42494E+02 -2.26503E+02 7.53550E+01 3.60471E+01 -3.26085E+00 2.09196E+02 2.14588E+02 2.19981E+02 -5.84859E+01 -7.87158E+01 -9.89456E+01 1.66545E+01 7.84821E+00 -9.58068E-01 9.17948E+01 9.44122E+01 9.70295E+01 - 1.67500E+00 -2.32964E+02 -3.27728E+02 -4.22492E+02 8.68616E+01 4.51156E+01 3.36967E+00 4.06687E+02 4.17959E+02 4.29231E+02 -6.06399E+01 -1.45992E+02 -2.31345E+02 7.66119E+01 3.66946E+01 -3.22273E+00 2.13864E+02 2.19382E+02 2.24899E+02 -6.06399E+01 -7.97609E+01 -9.88820E+01 1.56537E+01 7.41118E+00 -8.31380E-01 9.19474E+01 9.45833E+01 9.72192E+01 - 1.70000E+00 -2.35118E+02 -3.31226E+02 -4.27334E+02 8.81185E+01 4.57632E+01 3.40779E+00 4.11355E+02 4.22752E+02 4.34150E+02 -6.27940E+01 -1.49491E+02 -2.36187E+02 7.78689E+01 3.73422E+01 -3.18461E+00 2.18532E+02 2.24175E+02 2.29818E+02 -6.27940E+01 -8.08061E+01 -9.88183E+01 1.46530E+01 6.97416E+00 -7.04690E-01 9.21000E+01 9.47544E+01 9.74089E+01 - 1.72500E+00 -2.37272E+02 -3.34724E+02 -4.32177E+02 8.93755E+01 4.64107E+01 3.44592E+00 4.16023E+02 4.27546E+02 4.39068E+02 -6.49480E+01 -1.52989E+02 -2.41030E+02 7.91259E+01 3.79897E+01 -3.14649E+00 2.23200E+02 2.28968E+02 2.34737E+02 -6.49480E+01 -8.18513E+01 -9.87546E+01 1.36523E+01 6.53714E+00 -5.78002E-01 9.22526E+01 9.49256E+01 9.75986E+01 - 1.75000E+00 -2.39426E+02 -3.38222E+02 -4.37019E+02 9.06325E+01 4.70583E+01 3.48403E+00 4.20691E+02 4.32339E+02 4.43987E+02 -6.71021E+01 -1.56487E+02 -2.45872E+02 8.03829E+01 3.86372E+01 -3.10837E+00 2.27868E+02 2.33762E+02 2.39655E+02 -6.71021E+01 -8.28965E+01 -9.86909E+01 1.26515E+01 6.10012E+00 -4.51311E-01 9.24052E+01 9.50967E+01 9.77883E+01 - 1.77500E+00 -2.41580E+02 -3.41721E+02 -4.41861E+02 9.18895E+01 4.77058E+01 3.52215E+00 4.25359E+02 4.37132E+02 4.48906E+02 -6.92561E+01 -1.59985E+02 -2.50714E+02 8.16398E+01 3.92848E+01 -3.07025E+00 2.32536E+02 2.38555E+02 2.44574E+02 -6.92561E+01 -8.39417E+01 -9.86272E+01 1.16508E+01 5.66309E+00 -3.24621E-01 9.25577E+01 9.52679E+01 9.79780E+01 - 1.80000E+00 -2.43734E+02 -3.45219E+02 -4.46704E+02 9.31464E+01 4.83534E+01 3.56028E+00 4.30027E+02 4.41926E+02 4.53824E+02 -7.14102E+01 -1.63483E+02 -2.55557E+02 8.28968E+01 3.99323E+01 -3.03213E+00 2.37204E+02 2.43348E+02 2.49492E+02 -7.14102E+01 -8.49869E+01 -9.85636E+01 1.06501E+01 5.22607E+00 -1.97933E-01 9.27103E+01 9.54390E+01 9.81677E+01 - 1.82500E+00 -2.45888E+02 -3.48717E+02 -4.51546E+02 9.44034E+01 4.90009E+01 3.59839E+00 4.34695E+02 4.46719E+02 4.58743E+02 -7.35642E+01 -1.66982E+02 -2.60399E+02 8.41538E+01 4.05799E+01 -2.99401E+00 2.41872E+02 2.48141E+02 2.54411E+02 -7.35642E+01 -8.60321E+01 -9.84999E+01 9.64934E+00 4.78905E+00 -7.12429E-02 9.28629E+01 9.56101E+01 9.83574E+01 - 1.85000E+00 -2.48042E+02 -3.52215E+02 -4.56388E+02 9.56604E+01 4.96485E+01 3.63652E+00 4.39363E+02 4.51512E+02 4.63661E+02 -7.57183E+01 -1.70480E+02 -2.65241E+02 8.54108E+01 4.12274E+01 -2.95589E+00 2.46540E+02 2.52935E+02 2.59330E+02 -7.57183E+01 -8.70772E+01 -9.84362E+01 8.64860E+00 4.35202E+00 5.54448E-02 9.30155E+01 9.57813E+01 9.85471E+01 - 1.87500E+00 -2.50196E+02 -3.55713E+02 -4.61231E+02 9.69174E+01 5.02960E+01 3.67464E+00 4.44031E+02 4.56305E+02 4.68580E+02 -7.78723E+01 -1.73978E+02 -2.70084E+02 8.66677E+01 4.18750E+01 -2.91777E+00 2.51208E+02 2.57728E+02 2.64248E+02 -7.78723E+01 -8.81224E+01 -9.83725E+01 7.64787E+00 3.91500E+00 1.82135E-01 9.31680E+01 9.59524E+01 9.87368E+01 - 1.90000E+00 -2.52350E+02 -3.59212E+02 -4.66073E+02 9.81743E+01 5.09436E+01 3.71275E+00 4.48699E+02 4.61099E+02 4.73499E+02 -8.00264E+01 -1.77476E+02 -2.74926E+02 8.79247E+01 4.25225E+01 -2.87965E+00 2.55876E+02 2.62521E+02 2.69167E+02 -8.00264E+01 -8.91676E+01 -9.83088E+01 6.64713E+00 3.47798E+00 3.08826E-01 9.33206E+01 9.61236E+01 9.89265E+01 - 1.92500E+00 -2.54504E+02 -3.62710E+02 -4.70915E+02 9.94313E+01 5.15911E+01 3.75088E+00 4.53367E+02 4.65892E+02 4.78417E+02 -8.21804E+01 -1.80974E+02 -2.79768E+02 8.91817E+01 4.31701E+01 -2.84152E+00 2.60544E+02 2.67315E+02 2.74085E+02 -8.21804E+01 -9.02128E+01 -9.82452E+01 5.64640E+00 3.04096E+00 4.35513E-01 9.34732E+01 9.62947E+01 9.91162E+01 - 1.95000E+00 -2.56658E+02 -3.66208E+02 -4.75758E+02 1.00688E+02 5.22386E+01 3.78899E+00 4.58035E+02 4.70685E+02 4.83336E+02 -8.43345E+01 -1.84473E+02 -2.84611E+02 9.04387E+01 4.38176E+01 -2.80341E+00 2.65212E+02 2.72108E+02 2.79004E+02 -8.43345E+01 -9.12580E+01 -9.81815E+01 4.64566E+00 2.60393E+00 5.62204E-01 9.36258E+01 9.64658E+01 9.93059E+01 - 1.97500E+00 -2.58812E+02 -3.69706E+02 -4.80600E+02 1.01945E+02 5.28862E+01 3.82712E+00 4.62703E+02 4.75479E+02 4.88254E+02 -8.64885E+01 -1.87971E+02 -2.89453E+02 9.16956E+01 4.44652E+01 -2.76529E+00 2.69880E+02 2.76901E+02 2.83923E+02 -8.64885E+01 -9.23032E+01 -9.81178E+01 3.64493E+00 2.16691E+00 6.88892E-01 9.37784E+01 9.66370E+01 9.94956E+01 - 2.00000E+00 -1.74804E+02 -3.31397E+02 -4.87990E+02 1.43232E+02 7.10147E+01 -1.20234E+00 4.61268E+02 4.73426E+02 4.85585E+02 -1.74804E+02 -2.33276E+02 -2.91748E+02 5.29232E+01 2.76318E+01 2.34041E+00 2.80651E+02 2.88540E+02 2.96429E+02 -2.48062E+00 -5.15410E+01 -1.00601E+02 4.26736E+01 1.92108E+01 -4.25199E+00 8.78278E+01 8.99626E+01 9.20973E+01 - 2.02500E+00 -1.76959E+02 -3.34895E+02 -4.92832E+02 1.44489E+02 7.16622E+01 -1.16422E+00 4.65936E+02 4.78220E+02 4.90504E+02 -1.76959E+02 -2.36775E+02 -2.96591E+02 5.41802E+01 2.82794E+01 2.37853E+00 2.85319E+02 2.93333E+02 3.01348E+02 -4.63467E+00 -5.50392E+01 -1.05444E+02 4.39306E+01 1.98584E+01 -4.21387E+00 9.24958E+01 9.47559E+01 9.70159E+01 - 2.05000E+00 -1.79113E+02 -3.38393E+02 -4.97674E+02 1.45746E+02 7.23098E+01 -1.12609E+00 4.70604E+02 4.83013E+02 4.95422E+02 -1.79113E+02 -2.40273E+02 -3.01433E+02 5.54372E+01 2.89269E+01 2.41665E+00 2.89987E+02 2.98127E+02 3.06266E+02 -6.78871E+00 -5.85374E+01 -1.10286E+02 4.51875E+01 2.05059E+01 -4.17575E+00 9.71638E+01 9.95491E+01 1.01935E+02 - 2.07500E+00 -1.81267E+02 -3.41892E+02 -5.02517E+02 1.47003E+02 7.29573E+01 -1.08798E+00 4.75272E+02 4.87806E+02 5.00341E+02 -1.81267E+02 -2.43771E+02 -3.06275E+02 5.66941E+01 2.95745E+01 2.45477E+00 2.94655E+02 3.02920E+02 3.11185E+02 -8.94277E+00 -6.20356E+01 -1.15128E+02 4.64445E+01 2.11534E+01 -4.13763E+00 1.01832E+02 1.04342E+02 1.06853E+02 - 2.10000E+00 -1.83421E+02 -3.45390E+02 -5.07359E+02 1.48260E+02 7.36049E+01 -1.04985E+00 4.79940E+02 4.92600E+02 5.05259E+02 -1.83421E+02 -2.47269E+02 -3.11118E+02 5.79511E+01 3.02220E+01 2.49289E+00 2.99323E+02 3.07713E+02 3.16104E+02 -1.10968E+01 -6.55338E+01 -1.19971E+02 4.77015E+01 2.18010E+01 -4.09951E+00 1.06500E+02 1.09136E+02 1.11772E+02 - 2.12500E+00 -1.85575E+02 -3.48888E+02 -5.12201E+02 1.49517E+02 7.42524E+01 -1.01173E+00 4.84608E+02 4.97393E+02 5.10178E+02 -1.85575E+02 -2.50767E+02 -3.15960E+02 5.92081E+01 3.08696E+01 2.53101E+00 3.03991E+02 3.12507E+02 3.21022E+02 -1.32509E+01 -6.90320E+01 -1.24813E+02 4.89585E+01 2.24485E+01 -4.06139E+00 1.11168E+02 1.13929E+02 1.16690E+02 - 2.15000E+00 -1.87729E+02 -3.52386E+02 -5.17044E+02 1.50773E+02 7.48999E+01 -9.73615E-01 4.89276E+02 5.02186E+02 5.15097E+02 -1.87729E+02 -2.54266E+02 -3.20802E+02 6.04651E+01 3.15171E+01 2.56914E+00 3.08659E+02 3.17300E+02 3.25941E+02 -1.54049E+01 -7.25302E+01 -1.29655E+02 5.02155E+01 2.30961E+01 -4.02327E+00 1.15836E+02 1.18722E+02 1.21609E+02 - 2.17500E+00 -1.89883E+02 -3.55884E+02 -5.21886E+02 1.52030E+02 7.55475E+01 -9.35488E-01 4.93944E+02 5.06979E+02 5.20015E+02 -1.89883E+02 -2.57764E+02 -3.25645E+02 6.17220E+01 3.21647E+01 2.60726E+00 3.13327E+02 3.22093E+02 3.30859E+02 -1.75590E+01 -7.60284E+01 -1.34498E+02 5.14724E+01 2.37436E+01 -3.98515E+00 1.20504E+02 1.23516E+02 1.26527E+02 - 2.20000E+00 -1.92037E+02 -3.59383E+02 -5.26729E+02 1.53287E+02 7.61950E+01 -8.97372E-01 4.98612E+02 5.11773E+02 5.24934E+02 -1.92037E+02 -2.61262E+02 -3.30487E+02 6.29790E+01 3.28122E+01 2.64537E+00 3.17995E+02 3.26886E+02 3.35778E+02 -1.97130E+01 -7.95266E+01 -1.39340E+02 5.27294E+01 2.43912E+01 -3.94702E+00 1.25172E+02 1.28309E+02 1.31446E+02 - 2.22500E+00 -1.94191E+02 -3.62881E+02 -5.31571E+02 1.54544E+02 7.68426E+01 -8.59244E-01 5.03280E+02 5.16566E+02 5.29852E+02 -1.94191E+02 -2.64760E+02 -3.35329E+02 6.42360E+01 3.34597E+01 2.68349E+00 3.22663E+02 3.31680E+02 3.40697E+02 -2.18671E+01 -8.30248E+01 -1.44182E+02 5.39864E+01 2.50387E+01 -3.90891E+00 1.29840E+02 1.33102E+02 1.36365E+02 - 2.25000E+00 -1.96345E+02 -3.66379E+02 -5.36413E+02 1.55801E+02 7.74901E+01 -8.21128E-01 5.07948E+02 5.21359E+02 5.34771E+02 -1.96345E+02 -2.68258E+02 -3.40172E+02 6.54930E+01 3.41073E+01 2.72162E+00 3.27331E+02 3.36473E+02 3.45615E+02 -2.40211E+01 -8.65230E+01 -1.49025E+02 5.52434E+01 2.56863E+01 -3.87078E+00 1.34508E+02 1.37896E+02 1.41283E+02 - 2.27500E+00 -1.98499E+02 -3.69877E+02 -5.41256E+02 1.57058E+02 7.81377E+01 -7.83012E-01 5.12616E+02 5.26153E+02 5.39690E+02 -1.98499E+02 -2.71757E+02 -3.45014E+02 6.67500E+01 3.47548E+01 2.75974E+00 3.31999E+02 3.41266E+02 3.50534E+02 -2.61751E+01 -9.00212E+01 -1.53867E+02 5.65003E+01 2.63338E+01 -3.83266E+00 1.39176E+02 1.42689E+02 1.46202E+02 - 2.30000E+00 -2.00653E+02 -3.73375E+02 -5.46098E+02 1.58315E+02 7.87852E+01 -7.44884E-01 5.17284E+02 5.30946E+02 5.44608E+02 -2.00653E+02 -2.75255E+02 -3.49857E+02 6.80069E+01 3.54024E+01 2.79786E+00 3.36667E+02 3.46060E+02 3.55452E+02 -2.83292E+01 -9.35194E+01 -1.58710E+02 5.77573E+01 2.69814E+01 -3.79454E+00 1.43844E+02 1.47482E+02 1.51120E+02 - 2.32500E+00 -2.02807E+02 -3.76874E+02 -5.50940E+02 1.59572E+02 7.94328E+01 -7.06768E-01 5.21952E+02 5.35739E+02 5.49527E+02 -2.02807E+02 -2.78753E+02 -3.54699E+02 6.92639E+01 3.60499E+01 2.83598E+00 3.41335E+02 3.50853E+02 3.60371E+02 -3.04833E+01 -9.70176E+01 -1.63552E+02 5.90143E+01 2.76289E+01 -3.75642E+00 1.48512E+02 1.52275E+02 1.56039E+02 - 2.35000E+00 -2.04961E+02 -3.80372E+02 -5.55783E+02 1.60829E+02 8.00803E+01 -6.68641E-01 5.26620E+02 5.40533E+02 5.54445E+02 -2.04961E+02 -2.82251E+02 -3.59541E+02 7.05209E+01 3.66975E+01 2.87410E+00 3.46003E+02 3.55646E+02 3.65289E+02 -3.26373E+01 -1.00516E+02 -1.68394E+02 6.02713E+01 2.82765E+01 -3.71830E+00 1.53180E+02 1.57069E+02 1.60958E+02 - 2.37500E+00 -2.07115E+02 -3.83870E+02 -5.60625E+02 1.62086E+02 8.07279E+01 -6.30524E-01 5.31288E+02 5.45326E+02 5.59364E+02 -2.07115E+02 -2.85749E+02 -3.64384E+02 7.17779E+01 3.73450E+01 2.91222E+00 3.50671E+02 3.60440E+02 3.70208E+02 -3.47913E+01 -1.04014E+02 -1.73237E+02 6.15282E+01 2.89240E+01 -3.68018E+00 1.57848E+02 1.61862E+02 1.65876E+02 - 2.40000E+00 -2.09269E+02 -3.87368E+02 -5.65467E+02 1.63343E+02 8.13754E+01 -5.92408E-01 5.35956E+02 5.50119E+02 5.64283E+02 -2.09269E+02 -2.89248E+02 -3.69226E+02 7.30348E+01 3.79926E+01 2.95034E+00 3.55339E+02 3.65233E+02 3.75127E+02 -3.69454E+01 -1.07512E+02 -1.78079E+02 6.27852E+01 2.95716E+01 -3.64206E+00 1.62516E+02 1.66655E+02 1.70795E+02 - 2.42500E+00 -2.11423E+02 -3.90867E+02 -5.70310E+02 1.64600E+02 8.20230E+01 -5.54281E-01 5.40624E+02 5.54912E+02 5.69201E+02 -2.11423E+02 -2.92746E+02 -3.74068E+02 7.42918E+01 3.86401E+01 2.98846E+00 3.60007E+02 3.70026E+02 3.80045E+02 -3.90994E+01 -1.11010E+02 -1.82921E+02 6.40422E+01 3.02191E+01 -3.60394E+00 1.67184E+02 1.71449E+02 1.75713E+02 - 2.45000E+00 -2.13577E+02 -3.94365E+02 -5.75152E+02 1.65857E+02 8.26705E+01 -5.16165E-01 5.45292E+02 5.59706E+02 5.74120E+02 -2.13577E+02 -2.96244E+02 -3.78911E+02 7.55488E+01 3.92877E+01 3.02658E+00 3.64675E+02 3.74819E+02 3.84964E+02 -4.12535E+01 -1.14509E+02 -1.87764E+02 6.52992E+01 3.08667E+01 -3.56582E+00 1.71852E+02 1.76242E+02 1.80632E+02 - 2.47500E+00 -2.15731E+02 -3.97863E+02 -5.79994E+02 1.67114E+02 8.33181E+01 -4.78037E-01 5.49960E+02 5.64499E+02 5.79038E+02 -2.15731E+02 -2.99742E+02 -3.83753E+02 7.68057E+01 3.99352E+01 3.06470E+00 3.69343E+02 3.79613E+02 3.89882E+02 -4.34075E+01 -1.18007E+02 -1.92606E+02 6.65561E+01 3.15142E+01 -3.52770E+00 1.76520E+02 1.81035E+02 1.85551E+02 - 2.50000E+00 -2.17885E+02 -4.01361E+02 -5.84837E+02 1.68371E+02 8.39656E+01 -4.39921E-01 5.54628E+02 5.69292E+02 5.83957E+02 -2.17885E+02 -3.03240E+02 -3.88595E+02 7.80627E+01 4.05828E+01 3.10282E+00 3.74011E+02 3.84406E+02 3.94801E+02 -4.55616E+01 -1.21505E+02 -1.97448E+02 6.78131E+01 3.21618E+01 -3.48958E+00 1.81188E+02 1.85829E+02 1.90469E+02 - 2.52500E+00 -2.20040E+02 -4.04859E+02 -5.89679E+02 1.69628E+02 8.46132E+01 -4.01805E-01 5.59296E+02 5.74086E+02 5.88876E+02 -2.20040E+02 -3.06739E+02 -3.93438E+02 7.93197E+01 4.12303E+01 3.14095E+00 3.78679E+02 3.89199E+02 3.99720E+02 -4.77156E+01 -1.25003E+02 -2.02291E+02 6.90701E+01 3.28093E+01 -3.45146E+00 1.85856E+02 1.90622E+02 1.95388E+02 - 2.55000E+00 -2.22194E+02 -4.08358E+02 -5.94521E+02 1.70885E+02 8.52607E+01 -3.63677E-01 5.63964E+02 5.78879E+02 5.93794E+02 -2.22194E+02 -3.10237E+02 -3.98280E+02 8.05767E+01 4.18779E+01 3.17907E+00 3.83347E+02 3.93993E+02 4.04638E+02 -4.98697E+01 -1.28501E+02 -2.07133E+02 7.03271E+01 3.34569E+01 -3.41333E+00 1.90524E+02 1.95415E+02 2.00306E+02 - 2.57500E+00 -2.24348E+02 -4.11856E+02 -5.99364E+02 1.72142E+02 8.59083E+01 -3.25561E-01 5.68632E+02 5.83672E+02 5.98713E+02 -2.24348E+02 -3.13735E+02 -4.03122E+02 8.18337E+01 4.25254E+01 3.21718E+00 3.88015E+02 3.98786E+02 4.09557E+02 -5.20237E+01 -1.32000E+02 -2.11975E+02 7.15840E+01 3.41044E+01 -3.37522E+00 1.95192E+02 2.00208E+02 2.05225E+02 - 2.60000E+00 -2.26502E+02 -4.15354E+02 -6.04206E+02 1.73399E+02 8.65558E+01 -2.87434E-01 5.73300E+02 5.88466E+02 6.03631E+02 -2.26502E+02 -3.17233E+02 -4.07965E+02 8.30906E+01 4.31730E+01 3.25531E+00 3.92683E+02 4.03579E+02 4.14475E+02 -5.41778E+01 -1.35498E+02 -2.16818E+02 7.28410E+01 3.47520E+01 -3.33710E+00 1.99860E+02 2.05002E+02 2.10144E+02 - 2.62500E+00 -2.28656E+02 -4.18852E+02 -6.09049E+02 1.74656E+02 8.72034E+01 -2.49317E-01 5.77968E+02 5.93259E+02 6.08550E+02 -2.28656E+02 -3.20731E+02 -4.12807E+02 8.43476E+01 4.38205E+01 3.29343E+00 3.97351E+02 4.08372E+02 4.19394E+02 -5.63318E+01 -1.38996E+02 -2.21660E+02 7.40980E+01 3.53995E+01 -3.29897E+00 2.04528E+02 2.09795E+02 2.15062E+02 - 2.65000E+00 -2.30810E+02 -4.22350E+02 -6.13891E+02 1.75913E+02 8.78509E+01 -2.11201E-01 5.82636E+02 5.98052E+02 6.13469E+02 -2.30810E+02 -3.24230E+02 -4.17650E+02 8.56046E+01 4.44681E+01 3.33154E+00 4.02019E+02 4.13166E+02 4.24313E+02 -5.84859E+01 -1.42494E+02 -2.26503E+02 7.53550E+01 3.60471E+01 -3.26085E+00 2.09196E+02 2.14588E+02 2.19981E+02 - 2.67500E+00 -2.32964E+02 -4.25849E+02 -6.18733E+02 1.77170E+02 8.84985E+01 -1.73074E-01 5.87304E+02 6.02845E+02 6.18387E+02 -2.32964E+02 -3.27728E+02 -4.22492E+02 8.68616E+01 4.51156E+01 3.36967E+00 4.06687E+02 4.17959E+02 4.29231E+02 -6.06399E+01 -1.45992E+02 -2.31345E+02 7.66119E+01 3.66946E+01 -3.22273E+00 2.13864E+02 2.19382E+02 2.24899E+02 - 2.70000E+00 -2.35118E+02 -4.29347E+02 -6.23576E+02 1.78427E+02 8.91460E+01 -1.34957E-01 5.91972E+02 6.07639E+02 6.23306E+02 -2.35118E+02 -3.31226E+02 -4.27334E+02 8.81185E+01 4.57632E+01 3.40779E+00 4.11355E+02 4.22752E+02 4.34150E+02 -6.27940E+01 -1.49491E+02 -2.36187E+02 7.78689E+01 3.73422E+01 -3.18461E+00 2.18532E+02 2.24175E+02 2.29818E+02 - 2.72500E+00 -2.37272E+02 -4.32845E+02 -6.28418E+02 1.79684E+02 8.97936E+01 -9.68302E-02 5.96640E+02 6.12432E+02 6.28224E+02 -2.37272E+02 -3.34724E+02 -4.32177E+02 8.93755E+01 4.64107E+01 3.44592E+00 4.16023E+02 4.27546E+02 4.39068E+02 -6.49480E+01 -1.52989E+02 -2.41030E+02 7.91259E+01 3.79897E+01 -3.14649E+00 2.23200E+02 2.28968E+02 2.34737E+02 - 2.75000E+00 -2.39426E+02 -4.36343E+02 -6.33260E+02 1.80941E+02 9.04411E+01 -5.87139E-02 6.01308E+02 6.17225E+02 6.33143E+02 -2.39426E+02 -3.38222E+02 -4.37019E+02 9.06325E+01 4.70583E+01 3.48403E+00 4.20691E+02 4.32339E+02 4.43987E+02 -6.71021E+01 -1.56487E+02 -2.45872E+02 8.03829E+01 3.86372E+01 -3.10837E+00 2.27868E+02 2.33762E+02 2.39655E+02 - 2.77500E+00 -2.41580E+02 -4.39841E+02 -6.38103E+02 1.82198E+02 9.10887E+01 -2.05975E-02 6.05976E+02 6.22019E+02 6.38062E+02 -2.41580E+02 -3.41721E+02 -4.41861E+02 9.18895E+01 4.77058E+01 3.52215E+00 4.25359E+02 4.37132E+02 4.48906E+02 -6.92561E+01 -1.59985E+02 -2.50714E+02 8.16398E+01 3.92848E+01 -3.07025E+00 2.32536E+02 2.38555E+02 2.44574E+02 - 2.80000E+00 -2.43734E+02 -4.43340E+02 -6.42945E+02 1.83455E+02 9.17362E+01 1.75297E-02 6.10644E+02 6.26812E+02 6.42980E+02 -2.43734E+02 -3.45219E+02 -4.46704E+02 9.31464E+01 4.83534E+01 3.56028E+00 4.30027E+02 4.41926E+02 4.53824E+02 -7.14102E+01 -1.63483E+02 -2.55557E+02 8.28968E+01 3.99323E+01 -3.03213E+00 2.37204E+02 2.43348E+02 2.49492E+02 - 2.82500E+00 -2.45888E+02 -4.46838E+02 -6.47787E+02 1.84712E+02 9.23838E+01 5.56461E-02 6.15312E+02 6.31605E+02 6.47899E+02 -2.45888E+02 -3.48717E+02 -4.51546E+02 9.44034E+01 4.90009E+01 3.59839E+00 4.34695E+02 4.46719E+02 4.58743E+02 -7.35642E+01 -1.66982E+02 -2.60399E+02 8.41538E+01 4.05799E+01 -2.99401E+00 2.41872E+02 2.48141E+02 2.54411E+02 - 2.85000E+00 -2.48042E+02 -4.50336E+02 -6.52630E+02 1.85969E+02 9.30313E+01 9.37733E-02 6.19980E+02 6.36398E+02 6.52817E+02 -2.48042E+02 -3.52215E+02 -4.56388E+02 9.56604E+01 4.96485E+01 3.63652E+00 4.39363E+02 4.51512E+02 4.63661E+02 -7.57183E+01 -1.70480E+02 -2.65241E+02 8.54108E+01 4.12274E+01 -2.95589E+00 2.46540E+02 2.52935E+02 2.59330E+02 - 2.87500E+00 -2.50196E+02 -4.53834E+02 -6.57472E+02 1.87226E+02 9.36788E+01 1.31890E-01 6.24648E+02 6.41192E+02 6.57736E+02 -2.50196E+02 -3.55713E+02 -4.61231E+02 9.69174E+01 5.02960E+01 3.67464E+00 4.44031E+02 4.56305E+02 4.68580E+02 -7.78723E+01 -1.73978E+02 -2.70084E+02 8.66677E+01 4.18750E+01 -2.91777E+00 2.51208E+02 2.57728E+02 2.64248E+02 - 2.90000E+00 -2.52350E+02 -4.57332E+02 -6.62314E+02 1.88483E+02 9.43264E+01 1.70006E-01 6.29316E+02 6.45985E+02 6.62654E+02 -2.52350E+02 -3.59212E+02 -4.66073E+02 9.81743E+01 5.09436E+01 3.71275E+00 4.48699E+02 4.61099E+02 4.73499E+02 -8.00264E+01 -1.77476E+02 -2.74926E+02 8.79247E+01 4.25225E+01 -2.87965E+00 2.55876E+02 2.62521E+02 2.69167E+02 - 2.92500E+00 -2.54504E+02 -4.60831E+02 -6.67157E+02 1.89740E+02 9.49739E+01 2.08133E-01 6.33984E+02 6.50778E+02 6.67573E+02 -2.54504E+02 -3.62710E+02 -4.70915E+02 9.94313E+01 5.15911E+01 3.75088E+00 4.53367E+02 4.65892E+02 4.78417E+02 -8.21804E+01 -1.80974E+02 -2.79768E+02 8.91817E+01 4.31701E+01 -2.84152E+00 2.60544E+02 2.67315E+02 2.74085E+02 - 2.95000E+00 -2.56658E+02 -4.64329E+02 -6.71999E+02 1.90997E+02 9.56215E+01 2.46250E-01 6.38652E+02 6.55572E+02 6.72492E+02 -2.56658E+02 -3.66208E+02 -4.75758E+02 1.00688E+02 5.22386E+01 3.78899E+00 4.58035E+02 4.70685E+02 4.83336E+02 -8.43345E+01 -1.84473E+02 -2.84611E+02 9.04387E+01 4.38176E+01 -2.80341E+00 2.65212E+02 2.72108E+02 2.79004E+02 - 2.97500E+00 -2.58812E+02 -4.67827E+02 -6.76841E+02 1.92254E+02 9.62690E+01 2.84377E-01 6.43320E+02 6.60365E+02 6.77410E+02 -2.58812E+02 -3.69706E+02 -4.80600E+02 1.01945E+02 5.28862E+01 3.82712E+00 4.62703E+02 4.75479E+02 4.88254E+02 -8.64885E+01 -1.87971E+02 -2.89453E+02 9.16956E+01 4.44652E+01 -2.76529E+00 2.69880E+02 2.76901E+02 2.83923E+02 - 3.00000E+00 -3.47128E+02 -5.13133E+02 -6.79137E+02 1.53481E+02 7.94357E+01 5.39007E+00 6.54091E+02 6.72004E+02 6.89917E+02 -1.74804E+02 -3.31397E+02 -4.87990E+02 1.43232E+02 7.10147E+01 -1.20234E+00 4.61268E+02 4.73426E+02 4.85585E+02 -1.74804E+02 -2.33276E+02 -2.91748E+02 5.29232E+01 2.76318E+01 2.34041E+00 2.80651E+02 2.88540E+02 2.96429E+02 - 3.02500E+00 -3.49282E+02 -5.16631E+02 -6.83979E+02 1.54738E+02 8.00832E+01 5.42818E+00 6.58759E+02 6.76797E+02 6.94835E+02 -1.76959E+02 -3.34895E+02 -4.92832E+02 1.44489E+02 7.16622E+01 -1.16422E+00 4.65936E+02 4.78220E+02 4.90504E+02 -1.76959E+02 -2.36775E+02 -2.96591E+02 5.41802E+01 2.82794E+01 2.37853E+00 2.85319E+02 2.93333E+02 3.01348E+02 - 3.05000E+00 -3.51436E+02 -5.20129E+02 -6.88821E+02 1.55995E+02 8.07308E+01 5.46631E+00 6.63427E+02 6.81591E+02 6.99754E+02 -1.79113E+02 -3.38393E+02 -4.97674E+02 1.45746E+02 7.23098E+01 -1.12609E+00 4.70604E+02 4.83013E+02 4.95422E+02 -1.79113E+02 -2.40273E+02 -3.01433E+02 5.54372E+01 2.89269E+01 2.41665E+00 2.89987E+02 2.98127E+02 3.06266E+02 - 3.07500E+00 -3.53590E+02 -5.23627E+02 -6.93664E+02 1.57252E+02 8.13783E+01 5.50442E+00 6.68095E+02 6.86384E+02 7.04673E+02 -1.81267E+02 -3.41892E+02 -5.02517E+02 1.47003E+02 7.29573E+01 -1.08798E+00 4.75272E+02 4.87806E+02 5.00341E+02 -1.81267E+02 -2.43771E+02 -3.06275E+02 5.66941E+01 2.95745E+01 2.45477E+00 2.94655E+02 3.02920E+02 3.11185E+02 - 3.10000E+00 -3.55745E+02 -5.27125E+02 -6.98506E+02 1.58509E+02 8.20259E+01 5.54255E+00 6.72763E+02 6.91177E+02 7.09591E+02 -1.83421E+02 -3.45390E+02 -5.07359E+02 1.48260E+02 7.36049E+01 -1.04985E+00 4.79940E+02 4.92600E+02 5.05259E+02 -1.83421E+02 -2.47269E+02 -3.11118E+02 5.79511E+01 3.02220E+01 2.49289E+00 2.99323E+02 3.07713E+02 3.16104E+02 - 3.12500E+00 -3.57899E+02 -5.30624E+02 -7.03349E+02 1.59766E+02 8.26734E+01 5.58067E+00 6.77431E+02 6.95970E+02 7.14510E+02 -1.85575E+02 -3.48888E+02 -5.12201E+02 1.49517E+02 7.42524E+01 -1.01173E+00 4.84608E+02 4.97393E+02 5.10178E+02 -1.85575E+02 -2.50767E+02 -3.15960E+02 5.92081E+01 3.08696E+01 2.53101E+00 3.03991E+02 3.12507E+02 3.21022E+02 - 3.15000E+00 -3.60053E+02 -5.34122E+02 -7.08191E+02 1.61023E+02 8.33210E+01 5.61879E+00 6.82099E+02 7.00764E+02 7.19428E+02 -1.87729E+02 -3.52386E+02 -5.17044E+02 1.50773E+02 7.48999E+01 -9.73615E-01 4.89276E+02 5.02186E+02 5.15097E+02 -1.87729E+02 -2.54266E+02 -3.20802E+02 6.04651E+01 3.15171E+01 2.56914E+00 3.08659E+02 3.17300E+02 3.25941E+02 - 3.17500E+00 -3.62207E+02 -5.37620E+02 -7.13033E+02 1.62280E+02 8.39685E+01 5.65692E+00 6.86767E+02 7.05557E+02 7.24347E+02 -1.89883E+02 -3.55884E+02 -5.21886E+02 1.52030E+02 7.55475E+01 -9.35488E-01 4.93944E+02 5.06979E+02 5.20015E+02 -1.89883E+02 -2.57764E+02 -3.25645E+02 6.17220E+01 3.21647E+01 2.60726E+00 3.13327E+02 3.22093E+02 3.30859E+02 - 3.20000E+00 -3.64361E+02 -5.41118E+02 -7.17875E+02 1.63537E+02 8.46161E+01 5.69503E+00 6.91435E+02 7.10350E+02 7.29266E+02 -1.92037E+02 -3.59383E+02 -5.26729E+02 1.53287E+02 7.61950E+01 -8.97372E-01 4.98612E+02 5.11773E+02 5.24934E+02 -1.92037E+02 -2.61262E+02 -3.30487E+02 6.29790E+01 3.28122E+01 2.64537E+00 3.17995E+02 3.26886E+02 3.35778E+02 - 3.22500E+00 -3.66515E+02 -5.44616E+02 -7.22718E+02 1.64794E+02 8.52636E+01 5.73316E+00 6.96103E+02 7.15144E+02 7.34184E+02 -1.94191E+02 -3.62881E+02 -5.31571E+02 1.54544E+02 7.68426E+01 -8.59244E-01 5.03280E+02 5.16566E+02 5.29852E+02 -1.94191E+02 -2.64760E+02 -3.35329E+02 6.42360E+01 3.34597E+01 2.68349E+00 3.22663E+02 3.31680E+02 3.40697E+02 - 3.25000E+00 -3.68669E+02 -5.48115E+02 -7.27560E+02 1.66051E+02 8.59112E+01 5.77127E+00 7.00771E+02 7.19937E+02 7.39103E+02 -1.96345E+02 -3.66379E+02 -5.36413E+02 1.55801E+02 7.74901E+01 -8.21128E-01 5.07948E+02 5.21359E+02 5.34771E+02 -1.96345E+02 -2.68258E+02 -3.40172E+02 6.54930E+01 3.41073E+01 2.72162E+00 3.27331E+02 3.36473E+02 3.45615E+02 - 3.27500E+00 -3.70823E+02 -5.51613E+02 -7.32403E+02 1.67308E+02 8.65587E+01 5.80939E+00 7.05439E+02 7.24730E+02 7.44021E+02 -1.98499E+02 -3.69877E+02 -5.41256E+02 1.57058E+02 7.81377E+01 -7.83012E-01 5.12616E+02 5.26153E+02 5.39690E+02 -1.98499E+02 -2.71757E+02 -3.45014E+02 6.67500E+01 3.47548E+01 2.75974E+00 3.31999E+02 3.41266E+02 3.50534E+02 - 3.30000E+00 -3.72977E+02 -5.55111E+02 -7.37245E+02 1.68565E+02 8.72063E+01 5.84752E+00 7.10107E+02 7.29523E+02 7.48940E+02 -2.00653E+02 -3.73375E+02 -5.46098E+02 1.58315E+02 7.87852E+01 -7.44884E-01 5.17284E+02 5.30946E+02 5.44608E+02 -2.00653E+02 -2.75255E+02 -3.49857E+02 6.80069E+01 3.54024E+01 2.79786E+00 3.36667E+02 3.46060E+02 3.55452E+02 - 3.32500E+00 -3.75131E+02 -5.58609E+02 -7.42087E+02 1.69822E+02 8.78538E+01 5.88563E+00 7.14775E+02 7.34317E+02 7.53859E+02 -2.02807E+02 -3.76874E+02 -5.50940E+02 1.59572E+02 7.94328E+01 -7.06768E-01 5.21952E+02 5.35739E+02 5.49527E+02 -2.02807E+02 -2.78753E+02 -3.54699E+02 6.92639E+01 3.60499E+01 2.83598E+00 3.41335E+02 3.50853E+02 3.60371E+02 - 3.35000E+00 -3.77285E+02 -5.62107E+02 -7.46930E+02 1.71079E+02 8.85013E+01 5.92376E+00 7.19443E+02 7.39110E+02 7.58777E+02 -2.04961E+02 -3.80372E+02 -5.55783E+02 1.60829E+02 8.00803E+01 -6.68641E-01 5.26620E+02 5.40533E+02 5.54445E+02 -2.04961E+02 -2.82251E+02 -3.59541E+02 7.05209E+01 3.66975E+01 2.87410E+00 3.46003E+02 3.55646E+02 3.65289E+02 - 3.37500E+00 -3.79439E+02 -5.65606E+02 -7.51772E+02 1.72336E+02 8.91489E+01 5.96188E+00 7.24111E+02 7.43903E+02 7.63696E+02 -2.07115E+02 -3.83870E+02 -5.60625E+02 1.62086E+02 8.07279E+01 -6.30524E-01 5.31288E+02 5.45326E+02 5.59364E+02 -2.07115E+02 -2.85749E+02 -3.64384E+02 7.17779E+01 3.73450E+01 2.91222E+00 3.50671E+02 3.60440E+02 3.70208E+02 - 3.40000E+00 -3.81593E+02 -5.69104E+02 -7.56614E+02 1.73593E+02 8.97964E+01 5.99999E+00 7.28779E+02 7.48697E+02 7.68614E+02 -2.09269E+02 -3.87368E+02 -5.65467E+02 1.63343E+02 8.13754E+01 -5.92408E-01 5.35956E+02 5.50119E+02 5.64283E+02 -2.09269E+02 -2.89248E+02 -3.69226E+02 7.30348E+01 3.79926E+01 2.95034E+00 3.55339E+02 3.65233E+02 3.75127E+02 - 3.42500E+00 -3.83747E+02 -5.72602E+02 -7.61457E+02 1.74850E+02 9.04440E+01 6.03813E+00 7.33447E+02 7.53490E+02 7.73533E+02 -2.11423E+02 -3.90867E+02 -5.70310E+02 1.64600E+02 8.20230E+01 -5.54281E-01 5.40624E+02 5.54912E+02 5.69201E+02 -2.11423E+02 -2.92746E+02 -3.74068E+02 7.42918E+01 3.86401E+01 2.98846E+00 3.60007E+02 3.70026E+02 3.80045E+02 - 3.45000E+00 -3.85901E+02 -5.76100E+02 -7.66299E+02 1.76107E+02 9.10915E+01 6.07623E+00 7.38115E+02 7.58283E+02 7.78452E+02 -2.13577E+02 -3.94365E+02 -5.75152E+02 1.65857E+02 8.26705E+01 -5.16165E-01 5.45292E+02 5.59706E+02 5.74120E+02 -2.13577E+02 -2.96244E+02 -3.78911E+02 7.55488E+01 3.92877E+01 3.02658E+00 3.64675E+02 3.74819E+02 3.84964E+02 - 3.47500E+00 -3.88055E+02 -5.79598E+02 -7.71141E+02 1.77364E+02 9.17391E+01 6.11437E+00 7.42783E+02 7.63077E+02 7.83370E+02 -2.15731E+02 -3.97863E+02 -5.79994E+02 1.67114E+02 8.33181E+01 -4.78037E-01 5.49960E+02 5.64499E+02 5.79038E+02 -2.15731E+02 -2.99742E+02 -3.83753E+02 7.68057E+01 3.99352E+01 3.06470E+00 3.69343E+02 3.79613E+02 3.89882E+02 - 3.50000E+00 -3.90209E+02 -5.83097E+02 -7.75984E+02 1.78621E+02 9.23866E+01 6.15248E+00 7.47451E+02 7.67870E+02 7.88289E+02 -2.17885E+02 -4.01361E+02 -5.84837E+02 1.68371E+02 8.39656E+01 -4.39921E-01 5.54628E+02 5.69292E+02 5.83957E+02 -2.17885E+02 -3.03240E+02 -3.88595E+02 7.80627E+01 4.05828E+01 3.10282E+00 3.74011E+02 3.84406E+02 3.94801E+02 - 3.52500E+00 -3.92363E+02 -5.86595E+02 -7.80826E+02 1.79878E+02 9.30342E+01 6.19060E+00 7.52119E+02 7.72663E+02 7.93207E+02 -2.20040E+02 -4.04859E+02 -5.89679E+02 1.69628E+02 8.46132E+01 -4.01805E-01 5.59296E+02 5.74086E+02 5.88876E+02 -2.20040E+02 -3.06739E+02 -3.93438E+02 7.93197E+01 4.12303E+01 3.14095E+00 3.78679E+02 3.89199E+02 3.99720E+02 - 3.55000E+00 -3.94517E+02 -5.90093E+02 -7.85669E+02 1.81135E+02 9.36817E+01 6.22873E+00 7.56787E+02 7.77456E+02 7.98126E+02 -2.22194E+02 -4.08358E+02 -5.94521E+02 1.70885E+02 8.52607E+01 -3.63677E-01 5.63964E+02 5.78879E+02 5.93794E+02 -2.22194E+02 -3.10237E+02 -3.98280E+02 8.05767E+01 4.18779E+01 3.17907E+00 3.83347E+02 3.93993E+02 4.04638E+02 - 3.57500E+00 -3.96671E+02 -5.93591E+02 -7.90511E+02 1.82392E+02 9.43293E+01 6.26684E+00 7.61455E+02 7.82250E+02 8.03044E+02 -2.24348E+02 -4.11856E+02 -5.99364E+02 1.72142E+02 8.59083E+01 -3.25561E-01 5.68632E+02 5.83672E+02 5.98713E+02 -2.24348E+02 -3.13735E+02 -4.03122E+02 8.18337E+01 4.25254E+01 3.21718E+00 3.88015E+02 3.98786E+02 4.09557E+02 - 3.60000E+00 -3.98826E+02 -5.97089E+02 -7.95353E+02 1.83649E+02 9.49768E+01 6.30497E+00 7.66123E+02 7.87043E+02 8.07963E+02 -2.26502E+02 -4.15354E+02 -6.04206E+02 1.73399E+02 8.65558E+01 -2.87434E-01 5.73300E+02 5.88466E+02 6.03631E+02 -2.26502E+02 -3.17233E+02 -4.07965E+02 8.30906E+01 4.31730E+01 3.25531E+00 3.92683E+02 4.03579E+02 4.14475E+02 - 3.62500E+00 -4.00980E+02 -6.00588E+02 -8.00196E+02 1.84906E+02 9.56244E+01 6.34308E+00 7.70791E+02 7.91836E+02 8.12882E+02 -2.28656E+02 -4.18852E+02 -6.09049E+02 1.74656E+02 8.72034E+01 -2.49317E-01 5.77968E+02 5.93259E+02 6.08550E+02 -2.28656E+02 -3.20731E+02 -4.12807E+02 8.43476E+01 4.38205E+01 3.29343E+00 3.97351E+02 4.08372E+02 4.19394E+02 - 3.65000E+00 -4.03134E+02 -6.04086E+02 -8.05038E+02 1.86163E+02 9.62719E+01 6.38120E+00 7.75459E+02 7.96630E+02 8.17800E+02 -2.30810E+02 -4.22350E+02 -6.13891E+02 1.75913E+02 8.78509E+01 -2.11201E-01 5.82636E+02 5.98052E+02 6.13469E+02 -2.30810E+02 -3.24230E+02 -4.17650E+02 8.56046E+01 4.44681E+01 3.33154E+00 4.02019E+02 4.13166E+02 4.24313E+02 - 3.67500E+00 -4.05288E+02 -6.07584E+02 -8.09880E+02 1.87420E+02 9.69195E+01 6.41933E+00 7.80127E+02 8.01423E+02 8.22719E+02 -2.32964E+02 -4.25849E+02 -6.18733E+02 1.77170E+02 8.84985E+01 -1.73074E-01 5.87304E+02 6.02845E+02 6.18387E+02 -2.32964E+02 -3.27728E+02 -4.22492E+02 8.68616E+01 4.51156E+01 3.36967E+00 4.06687E+02 4.17959E+02 4.29231E+02 - 3.70000E+00 -4.07442E+02 -6.11082E+02 -8.14723E+02 1.88677E+02 9.75670E+01 6.45744E+00 7.84795E+02 8.06216E+02 8.27638E+02 -2.35118E+02 -4.29347E+02 -6.23576E+02 1.78427E+02 8.91460E+01 -1.34957E-01 5.91972E+02 6.07639E+02 6.23306E+02 -2.35118E+02 -3.31226E+02 -4.27334E+02 8.81185E+01 4.57632E+01 3.40779E+00 4.11355E+02 4.22752E+02 4.34150E+02 - 3.72500E+00 -4.09596E+02 -6.14580E+02 -8.19565E+02 1.89934E+02 9.82146E+01 6.49557E+00 7.89463E+02 8.11010E+02 8.32556E+02 -2.37272E+02 -4.32845E+02 -6.28418E+02 1.79684E+02 8.97936E+01 -9.68302E-02 5.96640E+02 6.12432E+02 6.28224E+02 -2.37272E+02 -3.34724E+02 -4.32177E+02 8.93755E+01 4.64107E+01 3.44592E+00 4.16023E+02 4.27546E+02 4.39068E+02 - 3.75000E+00 -4.11750E+02 -6.18079E+02 -8.24407E+02 1.91191E+02 9.88621E+01 6.53369E+00 7.94131E+02 8.15803E+02 8.37475E+02 -2.39426E+02 -4.36343E+02 -6.33260E+02 1.80941E+02 9.04411E+01 -5.87139E-02 6.01308E+02 6.17225E+02 6.33143E+02 -2.39426E+02 -3.38222E+02 -4.37019E+02 9.06325E+01 4.70583E+01 3.48403E+00 4.20691E+02 4.32339E+02 4.43987E+02 - 3.77500E+00 -4.13904E+02 -6.21577E+02 -8.29250E+02 1.92448E+02 9.95097E+01 6.57180E+00 7.98799E+02 8.20596E+02 8.42393E+02 -2.41580E+02 -4.39841E+02 -6.38103E+02 1.82198E+02 9.10887E+01 -2.05975E-02 6.05976E+02 6.22019E+02 6.38062E+02 -2.41580E+02 -3.41721E+02 -4.41861E+02 9.18895E+01 4.77058E+01 3.52215E+00 4.25359E+02 4.37132E+02 4.48906E+02 - 3.80000E+00 -4.16058E+02 -6.25075E+02 -8.34092E+02 1.93705E+02 1.00157E+02 6.60994E+00 8.03467E+02 8.25389E+02 8.47312E+02 -2.43734E+02 -4.43340E+02 -6.42945E+02 1.83455E+02 9.17362E+01 1.75297E-02 6.10644E+02 6.26812E+02 6.42980E+02 -2.43734E+02 -3.45219E+02 -4.46704E+02 9.31464E+01 4.83534E+01 3.56028E+00 4.30027E+02 4.41926E+02 4.53824E+02 - 3.82500E+00 -4.18212E+02 -6.28573E+02 -8.38934E+02 1.94961E+02 1.00805E+02 6.64804E+00 8.08135E+02 8.30183E+02 8.52230E+02 -2.45888E+02 -4.46838E+02 -6.47787E+02 1.84712E+02 9.23838E+01 5.56461E-02 6.15312E+02 6.31605E+02 6.47899E+02 -2.45888E+02 -3.48717E+02 -4.51546E+02 9.44034E+01 4.90009E+01 3.59839E+00 4.34695E+02 4.46719E+02 4.58743E+02 - 3.85000E+00 -4.20366E+02 -6.32071E+02 -8.43777E+02 1.96218E+02 1.01452E+02 6.68618E+00 8.12803E+02 8.34976E+02 8.57149E+02 -2.48042E+02 -4.50336E+02 -6.52630E+02 1.85969E+02 9.30313E+01 9.37733E-02 6.19980E+02 6.36398E+02 6.52817E+02 -2.48042E+02 -3.52215E+02 -4.56388E+02 9.56604E+01 4.96485E+01 3.63652E+00 4.39363E+02 4.51512E+02 4.63661E+02 - 3.87500E+00 -4.22520E+02 -6.35570E+02 -8.48619E+02 1.97475E+02 1.02100E+02 6.72429E+00 8.17471E+02 8.39769E+02 8.62068E+02 -2.50196E+02 -4.53834E+02 -6.57472E+02 1.87226E+02 9.36788E+01 1.31890E-01 6.24648E+02 6.41192E+02 6.57736E+02 -2.50196E+02 -3.55713E+02 -4.61231E+02 9.69174E+01 5.02960E+01 3.67464E+00 4.44031E+02 4.56305E+02 4.68580E+02 - 3.90000E+00 -4.24674E+02 -6.39068E+02 -8.53461E+02 1.98732E+02 1.02747E+02 6.76241E+00 8.22139E+02 8.44563E+02 8.66986E+02 -2.52350E+02 -4.57332E+02 -6.62314E+02 1.88483E+02 9.43264E+01 1.70006E-01 6.29316E+02 6.45985E+02 6.62654E+02 -2.52350E+02 -3.59212E+02 -4.66073E+02 9.81743E+01 5.09436E+01 3.71275E+00 4.48699E+02 4.61099E+02 4.73499E+02 - 3.92500E+00 -4.26828E+02 -6.42566E+02 -8.58304E+02 1.99989E+02 1.03395E+02 6.80054E+00 8.26807E+02 8.49356E+02 8.71905E+02 -2.54504E+02 -4.60831E+02 -6.67157E+02 1.89740E+02 9.49739E+01 2.08133E-01 6.33984E+02 6.50778E+02 6.67573E+02 -2.54504E+02 -3.62710E+02 -4.70915E+02 9.94313E+01 5.15911E+01 3.75088E+00 4.53367E+02 4.65892E+02 4.78417E+02 - 3.95000E+00 -4.28982E+02 -6.46064E+02 -8.63146E+02 2.01246E+02 1.04042E+02 6.83865E+00 8.31475E+02 8.54149E+02 8.76823E+02 -2.56658E+02 -4.64329E+02 -6.71999E+02 1.90997E+02 9.56215E+01 2.46250E-01 6.38652E+02 6.55572E+02 6.72492E+02 -2.56658E+02 -3.66208E+02 -4.75758E+02 1.00688E+02 5.22386E+01 3.78899E+00 4.58035E+02 4.70685E+02 4.83336E+02 - 3.97500E+00 -4.31136E+02 -6.49562E+02 -8.67989E+02 2.02503E+02 1.04690E+02 6.87678E+00 8.36143E+02 8.58943E+02 8.81742E+02 -2.58812E+02 -4.67827E+02 -6.76841E+02 1.92254E+02 9.62690E+01 2.84377E-01 6.43320E+02 6.60365E+02 6.77410E+02 -2.58812E+02 -3.69706E+02 -4.80600E+02 1.01945E+02 5.28862E+01 3.82712E+00 4.62703E+02 4.75479E+02 4.88254E+02 - 4.00000E+00 -3.47128E+02 -6.11253E+02 -8.75378E+02 2.43790E+02 1.22819E+02 1.84732E+00 8.34708E+02 8.56890E+02 8.79073E+02 -3.47128E+02 -5.13133E+02 -6.79137E+02 1.53481E+02 7.94357E+01 5.39007E+00 6.54091E+02 6.72004E+02 6.89917E+02 -1.74804E+02 -3.31397E+02 -4.87990E+02 1.43232E+02 7.10147E+01 -1.20234E+00 4.61268E+02 4.73426E+02 4.85585E+02 - 4.02500E+00 -3.49282E+02 -6.14751E+02 -8.80220E+02 2.45047E+02 1.23466E+02 1.88544E+00 8.39376E+02 8.61684E+02 8.83991E+02 -3.49282E+02 -5.16631E+02 -6.83979E+02 1.54738E+02 8.00832E+01 5.42818E+00 6.58759E+02 6.76797E+02 6.94835E+02 -1.76959E+02 -3.34895E+02 -4.92832E+02 1.44489E+02 7.16622E+01 -1.16422E+00 4.65936E+02 4.78220E+02 4.90504E+02 - 4.05000E+00 -3.51436E+02 -6.18250E+02 -8.85063E+02 2.46304E+02 1.24114E+02 1.92357E+00 8.44044E+02 8.66477E+02 8.88910E+02 -3.51436E+02 -5.20129E+02 -6.88821E+02 1.55995E+02 8.07308E+01 5.46631E+00 6.63427E+02 6.81591E+02 6.99754E+02 -1.79113E+02 -3.38393E+02 -4.97674E+02 1.45746E+02 7.23098E+01 -1.12609E+00 4.70604E+02 4.83013E+02 4.95422E+02 - 4.07500E+00 -3.53590E+02 -6.21748E+02 -8.89905E+02 2.47561E+02 1.24761E+02 1.96168E+00 8.48712E+02 8.71270E+02 8.93828E+02 -3.53590E+02 -5.23627E+02 -6.93664E+02 1.57252E+02 8.13783E+01 5.50442E+00 6.68095E+02 6.86384E+02 7.04673E+02 -1.81267E+02 -3.41892E+02 -5.02517E+02 1.47003E+02 7.29573E+01 -1.08798E+00 4.75272E+02 4.87806E+02 5.00341E+02 - 4.10000E+00 -3.55745E+02 -6.25246E+02 -8.94747E+02 2.48818E+02 1.25409E+02 1.99981E+00 8.53380E+02 8.76063E+02 8.98747E+02 -3.55745E+02 -5.27125E+02 -6.98506E+02 1.58509E+02 8.20259E+01 5.54255E+00 6.72763E+02 6.91177E+02 7.09591E+02 -1.83421E+02 -3.45390E+02 -5.07359E+02 1.48260E+02 7.36049E+01 -1.04985E+00 4.79940E+02 4.92600E+02 5.05259E+02 - 4.12500E+00 -3.57899E+02 -6.28744E+02 -8.99590E+02 2.50075E+02 1.26056E+02 2.03793E+00 8.58048E+02 8.80857E+02 9.03666E+02 -3.57899E+02 -5.30624E+02 -7.03349E+02 1.59766E+02 8.26734E+01 5.58067E+00 6.77431E+02 6.95970E+02 7.14510E+02 -1.85575E+02 -3.48888E+02 -5.12201E+02 1.49517E+02 7.42524E+01 -1.01173E+00 4.84608E+02 4.97393E+02 5.10178E+02 - 4.15000E+00 -3.60053E+02 -6.32242E+02 -9.04432E+02 2.51332E+02 1.26704E+02 2.07604E+00 8.62716E+02 8.85650E+02 9.08584E+02 -3.60053E+02 -5.34122E+02 -7.08191E+02 1.61023E+02 8.33210E+01 5.61879E+00 6.82099E+02 7.00764E+02 7.19428E+02 -1.87729E+02 -3.52386E+02 -5.17044E+02 1.50773E+02 7.48999E+01 -9.73615E-01 4.89276E+02 5.02186E+02 5.15097E+02 - 4.17500E+00 -3.62207E+02 -6.35741E+02 -9.09275E+02 2.52589E+02 1.27351E+02 2.11416E+00 8.67384E+02 8.90443E+02 9.13503E+02 -3.62207E+02 -5.37620E+02 -7.13033E+02 1.62280E+02 8.39685E+01 5.65692E+00 6.86767E+02 7.05557E+02 7.24347E+02 -1.89883E+02 -3.55884E+02 -5.21886E+02 1.52030E+02 7.55475E+01 -9.35488E-01 4.93944E+02 5.06979E+02 5.20015E+02 - 4.20000E+00 -3.64361E+02 -6.39239E+02 -9.14117E+02 2.53846E+02 1.27999E+02 2.15230E+00 8.72052E+02 8.95237E+02 9.18421E+02 -3.64361E+02 -5.41118E+02 -7.17875E+02 1.63537E+02 8.46161E+01 5.69503E+00 6.91435E+02 7.10350E+02 7.29266E+02 -1.92037E+02 -3.59383E+02 -5.26729E+02 1.53287E+02 7.61950E+01 -8.97372E-01 4.98612E+02 5.11773E+02 5.24934E+02 - 4.22500E+00 -3.66515E+02 -6.42737E+02 -9.18959E+02 2.55102E+02 1.28646E+02 2.19041E+00 8.76720E+02 9.00030E+02 9.23340E+02 -3.66515E+02 -5.44616E+02 -7.22718E+02 1.64794E+02 8.52636E+01 5.73316E+00 6.96103E+02 7.15144E+02 7.34184E+02 -1.94191E+02 -3.62881E+02 -5.31571E+02 1.54544E+02 7.68426E+01 -8.59244E-01 5.03280E+02 5.16566E+02 5.29852E+02 - 4.25000E+00 -3.68669E+02 -6.46235E+02 -9.23802E+02 2.56359E+02 1.29294E+02 2.22853E+00 8.81388E+02 9.04823E+02 9.28259E+02 -3.68669E+02 -5.48115E+02 -7.27560E+02 1.66051E+02 8.59112E+01 5.77127E+00 7.00771E+02 7.19937E+02 7.39103E+02 -1.96345E+02 -3.66379E+02 -5.36413E+02 1.55801E+02 7.74901E+01 -8.21128E-01 5.07948E+02 5.21359E+02 5.34771E+02 - 4.27500E+00 -3.70823E+02 -6.49733E+02 -9.28644E+02 2.57616E+02 1.29942E+02 2.26664E+00 8.86056E+02 9.09617E+02 9.33177E+02 -3.70823E+02 -5.51613E+02 -7.32403E+02 1.67308E+02 8.65587E+01 5.80939E+00 7.05439E+02 7.24730E+02 7.44021E+02 -1.98499E+02 -3.69877E+02 -5.41256E+02 1.57058E+02 7.81377E+01 -7.83012E-01 5.12616E+02 5.26153E+02 5.39690E+02 - 4.30000E+00 -3.72977E+02 -6.53232E+02 -9.33486E+02 2.58873E+02 1.30589E+02 2.30476E+00 8.90724E+02 9.14410E+02 9.38096E+02 -3.72977E+02 -5.55111E+02 -7.37245E+02 1.68565E+02 8.72063E+01 5.84752E+00 7.10107E+02 7.29523E+02 7.48940E+02 -2.00653E+02 -3.73375E+02 -5.46098E+02 1.58315E+02 7.87852E+01 -7.44884E-01 5.17284E+02 5.30946E+02 5.44608E+02 - 4.32500E+00 -3.75131E+02 -6.56730E+02 -9.38329E+02 2.60130E+02 1.31237E+02 2.34290E+00 8.95392E+02 9.19203E+02 9.43014E+02 -3.75131E+02 -5.58609E+02 -7.42087E+02 1.69822E+02 8.78538E+01 5.88563E+00 7.14775E+02 7.34317E+02 7.53859E+02 -2.02807E+02 -3.76874E+02 -5.50940E+02 1.59572E+02 7.94328E+01 -7.06768E-01 5.21952E+02 5.35739E+02 5.49527E+02 - 4.35000E+00 -3.77285E+02 -6.60228E+02 -9.43171E+02 2.61387E+02 1.31884E+02 2.38102E+00 9.00060E+02 9.23996E+02 9.47933E+02 -3.77285E+02 -5.62107E+02 -7.46930E+02 1.71079E+02 8.85013E+01 5.92376E+00 7.19443E+02 7.39110E+02 7.58777E+02 -2.04961E+02 -3.80372E+02 -5.55783E+02 1.60829E+02 8.00803E+01 -6.68641E-01 5.26620E+02 5.40533E+02 5.54445E+02 - 4.37500E+00 -3.79439E+02 -6.63726E+02 -9.48013E+02 2.62644E+02 1.32532E+02 2.41913E+00 9.04728E+02 9.28790E+02 9.52852E+02 -3.79439E+02 -5.65606E+02 -7.51772E+02 1.72336E+02 8.91489E+01 5.96188E+00 7.24111E+02 7.43903E+02 7.63696E+02 -2.07115E+02 -3.83870E+02 -5.60625E+02 1.62086E+02 8.07279E+01 -6.30524E-01 5.31288E+02 5.45326E+02 5.59364E+02 - 4.40000E+00 -3.81593E+02 -6.67224E+02 -9.52856E+02 2.63901E+02 1.33179E+02 2.45725E+00 9.09396E+02 9.33583E+02 9.57770E+02 -3.81593E+02 -5.69104E+02 -7.56614E+02 1.73593E+02 8.97964E+01 5.99999E+00 7.28779E+02 7.48697E+02 7.68614E+02 -2.09269E+02 -3.87368E+02 -5.65467E+02 1.63343E+02 8.13754E+01 -5.92408E-01 5.35956E+02 5.50119E+02 5.64283E+02 - 4.42500E+00 -3.83747E+02 -6.70723E+02 -9.57698E+02 2.65158E+02 1.33827E+02 2.49536E+00 9.14064E+02 9.38376E+02 9.62689E+02 -3.83747E+02 -5.72602E+02 -7.61457E+02 1.74850E+02 9.04440E+01 6.03813E+00 7.33447E+02 7.53490E+02 7.73533E+02 -2.11423E+02 -3.90867E+02 -5.70310E+02 1.64600E+02 8.20230E+01 -5.54281E-01 5.40624E+02 5.54912E+02 5.69201E+02 - 4.45000E+00 -3.85901E+02 -6.74221E+02 -9.62540E+02 2.66415E+02 1.34474E+02 2.53350E+00 9.18732E+02 9.43170E+02 9.67607E+02 -3.85901E+02 -5.76100E+02 -7.66299E+02 1.76107E+02 9.10915E+01 6.07623E+00 7.38115E+02 7.58283E+02 7.78452E+02 -2.13577E+02 -3.94365E+02 -5.75152E+02 1.65857E+02 8.26705E+01 -5.16165E-01 5.45292E+02 5.59706E+02 5.74120E+02 - 4.47500E+00 -3.88055E+02 -6.77719E+02 -9.67383E+02 2.67672E+02 1.35122E+02 2.57162E+00 9.23400E+02 9.47963E+02 9.72526E+02 -3.88055E+02 -5.79598E+02 -7.71141E+02 1.77364E+02 9.17391E+01 6.11437E+00 7.42783E+02 7.63077E+02 7.83370E+02 -2.15731E+02 -3.97863E+02 -5.79994E+02 1.67114E+02 8.33181E+01 -4.78037E-01 5.49960E+02 5.64499E+02 5.79038E+02 - 4.50000E+00 -3.90209E+02 -6.81217E+02 -9.72225E+02 2.68929E+02 1.35769E+02 2.60974E+00 9.28068E+02 9.52756E+02 9.77445E+02 -3.90209E+02 -5.83097E+02 -7.75984E+02 1.78621E+02 9.23866E+01 6.15248E+00 7.47451E+02 7.67870E+02 7.88289E+02 -2.17885E+02 -4.01361E+02 -5.84837E+02 1.68371E+02 8.39656E+01 -4.39921E-01 5.54628E+02 5.69292E+02 5.83957E+02 - 4.52500E+00 -3.92363E+02 -6.84715E+02 -9.77068E+02 2.70186E+02 1.36417E+02 2.64785E+00 9.32736E+02 9.57549E+02 9.82363E+02 -3.92363E+02 -5.86595E+02 -7.80826E+02 1.79878E+02 9.30342E+01 6.19060E+00 7.52119E+02 7.72663E+02 7.93207E+02 -2.20040E+02 -4.04859E+02 -5.89679E+02 1.69628E+02 8.46132E+01 -4.01805E-01 5.59296E+02 5.74086E+02 5.88876E+02 - 4.55000E+00 -3.94517E+02 -6.88214E+02 -9.81910E+02 2.71443E+02 1.37065E+02 2.68597E+00 9.37404E+02 9.62343E+02 9.87282E+02 -3.94517E+02 -5.90093E+02 -7.85669E+02 1.81135E+02 9.36817E+01 6.22873E+00 7.56787E+02 7.77456E+02 7.98126E+02 -2.22194E+02 -4.08358E+02 -5.94521E+02 1.70885E+02 8.52607E+01 -3.63677E-01 5.63964E+02 5.78879E+02 5.93794E+02 - 4.57500E+00 -3.96671E+02 -6.91712E+02 -9.86752E+02 2.72700E+02 1.37712E+02 2.72411E+00 9.42072E+02 9.67136E+02 9.92200E+02 -3.96671E+02 -5.93591E+02 -7.90511E+02 1.82392E+02 9.43293E+01 6.26684E+00 7.61455E+02 7.82250E+02 8.03044E+02 -2.24348E+02 -4.11856E+02 -5.99364E+02 1.72142E+02 8.59083E+01 -3.25561E-01 5.68632E+02 5.83672E+02 5.98713E+02 - 4.60000E+00 -3.98826E+02 -6.95210E+02 -9.91595E+02 2.73957E+02 1.38360E+02 2.76222E+00 9.46740E+02 9.71929E+02 9.97119E+02 -3.98826E+02 -5.97089E+02 -7.95353E+02 1.83649E+02 9.49768E+01 6.30497E+00 7.66123E+02 7.87043E+02 8.07963E+02 -2.26502E+02 -4.15354E+02 -6.04206E+02 1.73399E+02 8.65558E+01 -2.87434E-01 5.73300E+02 5.88466E+02 6.03631E+02 - 4.62500E+00 -4.00980E+02 -6.98708E+02 -9.96437E+02 2.75214E+02 1.39007E+02 2.80034E+00 9.51408E+02 9.76723E+02 1.00204E+03 -4.00980E+02 -6.00588E+02 -8.00196E+02 1.84906E+02 9.56244E+01 6.34308E+00 7.70791E+02 7.91836E+02 8.12882E+02 -2.28656E+02 -4.18852E+02 -6.09049E+02 1.74656E+02 8.72034E+01 -2.49317E-01 5.77968E+02 5.93259E+02 6.08550E+02 - 4.65000E+00 -4.03134E+02 -7.02206E+02 -1.00128E+03 2.76471E+02 1.39655E+02 2.83846E+00 9.56076E+02 9.81516E+02 1.00696E+03 -4.03134E+02 -6.04086E+02 -8.05038E+02 1.86163E+02 9.62719E+01 6.38120E+00 7.75459E+02 7.96630E+02 8.17800E+02 -2.30810E+02 -4.22350E+02 -6.13891E+02 1.75913E+02 8.78509E+01 -2.11201E-01 5.82636E+02 5.98052E+02 6.13469E+02 - 4.67500E+00 -4.05288E+02 -7.05705E+02 -1.00612E+03 2.77728E+02 1.40302E+02 2.87657E+00 9.60744E+02 9.86309E+02 1.01187E+03 -4.05288E+02 -6.07584E+02 -8.09880E+02 1.87420E+02 9.69195E+01 6.41933E+00 7.80127E+02 8.01423E+02 8.22719E+02 -2.32964E+02 -4.25849E+02 -6.18733E+02 1.77170E+02 8.84985E+01 -1.73074E-01 5.87304E+02 6.02845E+02 6.18387E+02 - 4.70000E+00 -4.07442E+02 -7.09203E+02 -1.01096E+03 2.78985E+02 1.40950E+02 2.91471E+00 9.65412E+02 9.91103E+02 1.01679E+03 -4.07442E+02 -6.11082E+02 -8.14723E+02 1.88677E+02 9.75670E+01 6.45744E+00 7.84795E+02 8.06216E+02 8.27638E+02 -2.35118E+02 -4.29347E+02 -6.23576E+02 1.78427E+02 8.91460E+01 -1.34957E-01 5.91972E+02 6.07639E+02 6.23306E+02 - 4.72500E+00 -4.09596E+02 -7.12701E+02 -1.01581E+03 2.80242E+02 1.41597E+02 2.95283E+00 9.70080E+02 9.95896E+02 1.02171E+03 -4.09596E+02 -6.14580E+02 -8.19565E+02 1.89934E+02 9.82146E+01 6.49557E+00 7.89463E+02 8.11010E+02 8.32556E+02 -2.37272E+02 -4.32845E+02 -6.28418E+02 1.79684E+02 8.97936E+01 -9.68302E-02 5.96640E+02 6.12432E+02 6.28224E+02 - 4.75000E+00 -4.11750E+02 -7.16199E+02 -1.02065E+03 2.81499E+02 1.42245E+02 2.99094E+00 9.74748E+02 1.00069E+03 1.02663E+03 -4.11750E+02 -6.18079E+02 -8.24407E+02 1.91191E+02 9.88621E+01 6.53369E+00 7.94131E+02 8.15803E+02 8.37475E+02 -2.39426E+02 -4.36343E+02 -6.33260E+02 1.80941E+02 9.04411E+01 -5.87139E-02 6.01308E+02 6.17225E+02 6.33143E+02 - 4.77500E+00 -4.13904E+02 -7.19697E+02 -1.02549E+03 2.82756E+02 1.42893E+02 3.02906E+00 9.79416E+02 1.00548E+03 1.03155E+03 -4.13904E+02 -6.21577E+02 -8.29250E+02 1.92448E+02 9.95097E+01 6.57180E+00 7.98799E+02 8.20596E+02 8.42393E+02 -2.41580E+02 -4.39841E+02 -6.38103E+02 1.82198E+02 9.10887E+01 -2.05975E-02 6.05976E+02 6.22019E+02 6.38062E+02 - 4.80000E+00 -4.16058E+02 -7.23196E+02 -1.03033E+03 2.84013E+02 1.43540E+02 3.06718E+00 9.84084E+02 1.01028E+03 1.03647E+03 -4.16058E+02 -6.25075E+02 -8.34092E+02 1.93705E+02 1.00157E+02 6.60994E+00 8.03467E+02 8.25389E+02 8.47312E+02 -2.43734E+02 -4.43340E+02 -6.42945E+02 1.83455E+02 9.17362E+01 1.75297E-02 6.10644E+02 6.26812E+02 6.42980E+02 - 4.82500E+00 -4.18212E+02 -7.26694E+02 -1.03518E+03 2.85270E+02 1.44188E+02 3.10531E+00 9.88752E+02 1.01507E+03 1.04139E+03 -4.18212E+02 -6.28573E+02 -8.38934E+02 1.94961E+02 1.00805E+02 6.64804E+00 8.08135E+02 8.30183E+02 8.52230E+02 -2.45888E+02 -4.46838E+02 -6.47787E+02 1.84712E+02 9.23838E+01 5.56461E-02 6.15312E+02 6.31605E+02 6.47899E+02 - 4.85000E+00 -4.20366E+02 -7.30192E+02 -1.04002E+03 2.86527E+02 1.44835E+02 3.14343E+00 9.93420E+02 1.01986E+03 1.04630E+03 -4.20366E+02 -6.32071E+02 -8.43777E+02 1.96218E+02 1.01452E+02 6.68618E+00 8.12803E+02 8.34976E+02 8.57149E+02 -2.48042E+02 -4.50336E+02 -6.52630E+02 1.85969E+02 9.30313E+01 9.37733E-02 6.19980E+02 6.36398E+02 6.52817E+02 - 4.87500E+00 -4.22520E+02 -7.33690E+02 -1.04486E+03 2.87784E+02 1.45483E+02 3.18155E+00 9.98088E+02 1.02466E+03 1.05122E+03 -4.22520E+02 -6.35570E+02 -8.48619E+02 1.97475E+02 1.02100E+02 6.72429E+00 8.17471E+02 8.39769E+02 8.62068E+02 -2.50196E+02 -4.53834E+02 -6.57472E+02 1.87226E+02 9.36788E+01 1.31890E-01 6.24648E+02 6.41192E+02 6.57736E+02 - 4.90000E+00 -4.24674E+02 -7.37188E+02 -1.04970E+03 2.89041E+02 1.46130E+02 3.21966E+00 1.00276E+03 1.02945E+03 1.05614E+03 -4.24674E+02 -6.39068E+02 -8.53461E+02 1.98732E+02 1.02747E+02 6.76241E+00 8.22139E+02 8.44563E+02 8.66986E+02 -2.52350E+02 -4.57332E+02 -6.62314E+02 1.88483E+02 9.43264E+01 1.70006E-01 6.29316E+02 6.45985E+02 6.62654E+02 - 4.92500E+00 -4.26828E+02 -7.40687E+02 -1.05455E+03 2.90298E+02 1.46778E+02 3.25778E+00 1.00742E+03 1.03424E+03 1.06106E+03 -4.26828E+02 -6.42566E+02 -8.58304E+02 1.99989E+02 1.03395E+02 6.80054E+00 8.26807E+02 8.49356E+02 8.71905E+02 -2.54504E+02 -4.60831E+02 -6.67157E+02 1.89740E+02 9.49739E+01 2.08133E-01 6.33984E+02 6.50778E+02 6.67573E+02 - 4.95000E+00 -4.28982E+02 -7.44185E+02 -1.05939E+03 2.91555E+02 1.47425E+02 3.29592E+00 1.01209E+03 1.03904E+03 1.06598E+03 -4.28982E+02 -6.46064E+02 -8.63146E+02 2.01246E+02 1.04042E+02 6.83865E+00 8.31475E+02 8.54149E+02 8.76823E+02 -2.56658E+02 -4.64329E+02 -6.71999E+02 1.90997E+02 9.56215E+01 2.46250E-01 6.38652E+02 6.55572E+02 6.72492E+02 - 4.97500E+00 -4.31136E+02 -7.47683E+02 -1.06423E+03 2.92812E+02 1.48073E+02 3.33403E+00 1.01676E+03 1.04383E+03 1.07090E+03 -4.31136E+02 -6.49562E+02 -8.67989E+02 2.02503E+02 1.04690E+02 6.87678E+00 8.36143E+02 8.58943E+02 8.81742E+02 -2.58812E+02 -4.67827E+02 -6.76841E+02 1.92254E+02 9.62690E+01 2.84377E-01 6.43320E+02 6.60365E+02 6.77410E+02 - 5.00000E+00 -5.19452E+02 -7.92989E+02 -1.06653E+03 2.54039E+02 1.31240E+02 8.43972E+00 1.02753E+03 1.05547E+03 1.08340E+03 -3.47128E+02 -6.11253E+02 -8.75378E+02 2.43790E+02 1.22819E+02 1.84732E+00 8.34708E+02 8.56890E+02 8.79073E+02 -3.47128E+02 -5.13133E+02 -6.79137E+02 1.53481E+02 7.94357E+01 5.39007E+00 6.54091E+02 6.72004E+02 6.89917E+02 - 5.02500E+00 -5.21606E+02 -7.96487E+02 -1.07137E+03 2.55296E+02 1.31887E+02 8.47784E+00 1.03220E+03 1.06026E+03 1.08832E+03 -3.49282E+02 -6.14751E+02 -8.80220E+02 2.45047E+02 1.23466E+02 1.88544E+00 8.39376E+02 8.61684E+02 8.83991E+02 -3.49282E+02 -5.16631E+02 -6.83979E+02 1.54738E+02 8.00832E+01 5.42818E+00 6.58759E+02 6.76797E+02 6.94835E+02 - 5.05000E+00 -5.23760E+02 -7.99985E+02 -1.07621E+03 2.56553E+02 1.32535E+02 8.51596E+00 1.03687E+03 1.06505E+03 1.09324E+03 -3.51436E+02 -6.18250E+02 -8.85063E+02 2.46304E+02 1.24114E+02 1.92357E+00 8.44044E+02 8.66477E+02 8.88910E+02 -3.51436E+02 -5.20129E+02 -6.88821E+02 1.55995E+02 8.07308E+01 5.46631E+00 6.63427E+02 6.81591E+02 6.99754E+02 - 5.07500E+00 -5.25914E+02 -8.03483E+02 -1.08105E+03 2.57810E+02 1.33182E+02 8.55410E+00 1.04153E+03 1.06985E+03 1.09816E+03 -3.53590E+02 -6.21748E+02 -8.89905E+02 2.47561E+02 1.24761E+02 1.96168E+00 8.48712E+02 8.71270E+02 8.93828E+02 -3.53590E+02 -5.23627E+02 -6.93664E+02 1.57252E+02 8.13783E+01 5.50442E+00 6.68095E+02 6.86384E+02 7.04673E+02 - 5.10000E+00 -5.28068E+02 -8.06981E+02 -1.08589E+03 2.59067E+02 1.33830E+02 8.59221E+00 1.04620E+03 1.07464E+03 1.10308E+03 -3.55745E+02 -6.25246E+02 -8.94747E+02 2.48818E+02 1.25409E+02 1.99981E+00 8.53380E+02 8.76063E+02 8.98747E+02 -3.55745E+02 -5.27125E+02 -6.98506E+02 1.58509E+02 8.20259E+01 5.54255E+00 6.72763E+02 6.91177E+02 7.09591E+02 - 5.12500E+00 -5.30222E+02 -8.10480E+02 -1.09074E+03 2.60324E+02 1.34477E+02 8.63033E+00 1.05087E+03 1.07943E+03 1.10800E+03 -3.57899E+02 -6.28744E+02 -8.99590E+02 2.50075E+02 1.26056E+02 2.03793E+00 8.58048E+02 8.80857E+02 9.03666E+02 -3.57899E+02 -5.30624E+02 -7.03349E+02 1.59766E+02 8.26734E+01 5.58067E+00 6.77431E+02 6.95970E+02 7.14510E+02 - 5.15000E+00 -5.32377E+02 -8.13978E+02 -1.09558E+03 2.61581E+02 1.35125E+02 8.66844E+00 1.05554E+03 1.08423E+03 1.11292E+03 -3.60053E+02 -6.32242E+02 -9.04432E+02 2.51332E+02 1.26704E+02 2.07604E+00 8.62716E+02 8.85650E+02 9.08584E+02 -3.60053E+02 -5.34122E+02 -7.08191E+02 1.61023E+02 8.33210E+01 5.61879E+00 6.82099E+02 7.00764E+02 7.19428E+02 - 5.17500E+00 -5.34531E+02 -8.17476E+02 -1.10042E+03 2.62838E+02 1.35772E+02 8.70656E+00 1.06021E+03 1.08902E+03 1.11783E+03 -3.62207E+02 -6.35741E+02 -9.09275E+02 2.52589E+02 1.27351E+02 2.11416E+00 8.67384E+02 8.90443E+02 9.13503E+02 -3.62207E+02 -5.37620E+02 -7.13033E+02 1.62280E+02 8.39685E+01 5.65692E+00 6.86767E+02 7.05557E+02 7.24347E+02 - 5.20000E+00 -5.36685E+02 -8.20974E+02 -1.10526E+03 2.64095E+02 1.36420E+02 8.74470E+00 1.06487E+03 1.09381E+03 1.12275E+03 -3.64361E+02 -6.39239E+02 -9.14117E+02 2.53846E+02 1.27999E+02 2.15230E+00 8.72052E+02 8.95237E+02 9.18421E+02 -3.64361E+02 -5.41118E+02 -7.17875E+02 1.63537E+02 8.46161E+01 5.69503E+00 6.91435E+02 7.10350E+02 7.29266E+02 - 5.22500E+00 -5.38839E+02 -8.24472E+02 -1.11011E+03 2.65352E+02 1.37067E+02 8.78281E+00 1.06954E+03 1.09861E+03 1.12767E+03 -3.66515E+02 -6.42737E+02 -9.18959E+02 2.55102E+02 1.28646E+02 2.19041E+00 8.76720E+02 9.00030E+02 9.23340E+02 -3.66515E+02 -5.44616E+02 -7.22718E+02 1.64794E+02 8.52636E+01 5.73316E+00 6.96103E+02 7.15144E+02 7.34184E+02 - 5.25000E+00 -5.40993E+02 -8.27971E+02 -1.11495E+03 2.66609E+02 1.37715E+02 8.82093E+00 1.07421E+03 1.10340E+03 1.13259E+03 -3.68669E+02 -6.46235E+02 -9.23802E+02 2.56359E+02 1.29294E+02 2.22853E+00 8.81388E+02 9.04823E+02 9.28259E+02 -3.68669E+02 -5.48115E+02 -7.27560E+02 1.66051E+02 8.59112E+01 5.77127E+00 7.00771E+02 7.19937E+02 7.39103E+02 - 5.27500E+00 -5.43147E+02 -8.31469E+02 -1.11979E+03 2.67866E+02 1.38363E+02 8.85905E+00 1.07888E+03 1.10819E+03 1.13751E+03 -3.70823E+02 -6.49733E+02 -9.28644E+02 2.57616E+02 1.29942E+02 2.26664E+00 8.86056E+02 9.09617E+02 9.33177E+02 -3.70823E+02 -5.51613E+02 -7.32403E+02 1.67308E+02 8.65587E+01 5.80939E+00 7.05439E+02 7.24730E+02 7.44021E+02 - 5.30000E+00 -5.45301E+02 -8.34967E+02 -1.12463E+03 2.69123E+02 1.39010E+02 8.89716E+00 1.08355E+03 1.11299E+03 1.14243E+03 -3.72977E+02 -6.53232E+02 -9.33486E+02 2.58873E+02 1.30589E+02 2.30476E+00 8.90724E+02 9.14410E+02 9.38096E+02 -3.72977E+02 -5.55111E+02 -7.37245E+02 1.68565E+02 8.72063E+01 5.84752E+00 7.10107E+02 7.29523E+02 7.48940E+02 - 5.32500E+00 -5.47455E+02 -8.38465E+02 -1.12948E+03 2.70380E+02 1.39658E+02 8.93530E+00 1.08821E+03 1.11778E+03 1.14735E+03 -3.75131E+02 -6.56730E+02 -9.38329E+02 2.60130E+02 1.31237E+02 2.34290E+00 8.95392E+02 9.19203E+02 9.43014E+02 -3.75131E+02 -5.58609E+02 -7.42087E+02 1.69822E+02 8.78538E+01 5.88563E+00 7.14775E+02 7.34317E+02 7.53859E+02 - 5.35000E+00 -5.49609E+02 -8.41963E+02 -1.13432E+03 2.71637E+02 1.40305E+02 8.97342E+00 1.09288E+03 1.12257E+03 1.15226E+03 -3.77285E+02 -6.60228E+02 -9.43171E+02 2.61387E+02 1.31884E+02 2.38102E+00 9.00060E+02 9.23996E+02 9.47933E+02 -3.77285E+02 -5.62107E+02 -7.46930E+02 1.71079E+02 8.85013E+01 5.92376E+00 7.19443E+02 7.39110E+02 7.58777E+02 - 5.37500E+00 -5.51763E+02 -8.45462E+02 -1.13916E+03 2.72894E+02 1.40953E+02 9.01153E+00 1.09755E+03 1.12737E+03 1.15718E+03 -3.79439E+02 -6.63726E+02 -9.48013E+02 2.62644E+02 1.32532E+02 2.41913E+00 9.04728E+02 9.28790E+02 9.52852E+02 -3.79439E+02 -5.65606E+02 -7.51772E+02 1.72336E+02 8.91489E+01 5.96188E+00 7.24111E+02 7.43903E+02 7.63696E+02 - 5.40000E+00 -5.53917E+02 -8.48960E+02 -1.14400E+03 2.74151E+02 1.41600E+02 9.04965E+00 1.10222E+03 1.13216E+03 1.16210E+03 -3.81593E+02 -6.67224E+02 -9.52856E+02 2.63901E+02 1.33179E+02 2.45725E+00 9.09396E+02 9.33583E+02 9.57770E+02 -3.81593E+02 -5.69104E+02 -7.56614E+02 1.73593E+02 8.97964E+01 5.99999E+00 7.28779E+02 7.48697E+02 7.68614E+02 - 5.42500E+00 -5.56071E+02 -8.52458E+02 -1.14885E+03 2.75408E+02 1.42248E+02 9.08777E+00 1.10689E+03 1.13695E+03 1.16702E+03 -3.83747E+02 -6.70723E+02 -9.57698E+02 2.65158E+02 1.33827E+02 2.49536E+00 9.14064E+02 9.38376E+02 9.62689E+02 -3.83747E+02 -5.72602E+02 -7.61457E+02 1.74850E+02 9.04440E+01 6.03813E+00 7.33447E+02 7.53490E+02 7.73533E+02 - 5.45000E+00 -5.58225E+02 -8.55956E+02 -1.15369E+03 2.76665E+02 1.42895E+02 9.12591E+00 1.11155E+03 1.14175E+03 1.17194E+03 -3.85901E+02 -6.74221E+02 -9.62540E+02 2.66415E+02 1.34474E+02 2.53350E+00 9.18732E+02 9.43170E+02 9.67607E+02 -3.85901E+02 -5.76100E+02 -7.66299E+02 1.76107E+02 9.10915E+01 6.07623E+00 7.38115E+02 7.58283E+02 7.78452E+02 - 5.47500E+00 -5.60379E+02 -8.59454E+02 -1.15853E+03 2.77922E+02 1.43543E+02 9.16402E+00 1.11622E+03 1.14654E+03 1.17686E+03 -3.88055E+02 -6.77719E+02 -9.67383E+02 2.67672E+02 1.35122E+02 2.57162E+00 9.23400E+02 9.47963E+02 9.72526E+02 -3.88055E+02 -5.79598E+02 -7.71141E+02 1.77364E+02 9.17391E+01 6.11437E+00 7.42783E+02 7.63077E+02 7.83370E+02 - 5.50000E+00 -5.62533E+02 -8.62953E+02 -1.16337E+03 2.79179E+02 1.44190E+02 9.20214E+00 1.12089E+03 1.15133E+03 1.18178E+03 -3.90209E+02 -6.81217E+02 -9.72225E+02 2.68929E+02 1.35769E+02 2.60974E+00 9.28068E+02 9.52756E+02 9.77445E+02 -3.90209E+02 -5.83097E+02 -7.75984E+02 1.78621E+02 9.23866E+01 6.15248E+00 7.47451E+02 7.67870E+02 7.88289E+02 - 5.52500E+00 -5.64687E+02 -8.66451E+02 -1.16821E+03 2.80436E+02 1.44838E+02 9.24025E+00 1.12556E+03 1.15613E+03 1.18670E+03 -3.92363E+02 -6.84715E+02 -9.77068E+02 2.70186E+02 1.36417E+02 2.64785E+00 9.32736E+02 9.57549E+02 9.82363E+02 -3.92363E+02 -5.86595E+02 -7.80826E+02 1.79878E+02 9.30342E+01 6.19060E+00 7.52119E+02 7.72663E+02 7.93207E+02 - 5.55000E+00 -5.66841E+02 -8.69949E+02 -1.17306E+03 2.81693E+02 1.45486E+02 9.27837E+00 1.13023E+03 1.16092E+03 1.19161E+03 -3.94517E+02 -6.88214E+02 -9.81910E+02 2.71443E+02 1.37065E+02 2.68597E+00 9.37404E+02 9.62343E+02 9.87282E+02 -3.94517E+02 -5.90093E+02 -7.85669E+02 1.81135E+02 9.36817E+01 6.22873E+00 7.56787E+02 7.77456E+02 7.98126E+02 - 5.57500E+00 -5.68995E+02 -8.73447E+02 -1.17790E+03 2.82950E+02 1.46133E+02 9.31651E+00 1.13489E+03 1.16571E+03 1.19653E+03 -3.96671E+02 -6.91712E+02 -9.86752E+02 2.72700E+02 1.37712E+02 2.72411E+00 9.42072E+02 9.67136E+02 9.92200E+02 -3.96671E+02 -5.93591E+02 -7.90511E+02 1.82392E+02 9.43293E+01 6.26684E+00 7.61455E+02 7.82250E+02 8.03044E+02 - 5.60000E+00 -5.71149E+02 -8.76945E+02 -1.18274E+03 2.84207E+02 1.46781E+02 9.35463E+00 1.13956E+03 1.17051E+03 1.20145E+03 -3.98826E+02 -6.95210E+02 -9.91595E+02 2.73957E+02 1.38360E+02 2.76222E+00 9.46740E+02 9.71929E+02 9.97119E+02 -3.98826E+02 -5.97089E+02 -7.95353E+02 1.83649E+02 9.49768E+01 6.30497E+00 7.66123E+02 7.87043E+02 8.07963E+02 - 5.62500E+00 -5.73303E+02 -8.80444E+02 -1.18758E+03 2.85464E+02 1.47428E+02 9.39274E+00 1.14423E+03 1.17530E+03 1.20637E+03 -4.00980E+02 -6.98708E+02 -9.96437E+02 2.75214E+02 1.39007E+02 2.80034E+00 9.51408E+02 9.76723E+02 1.00204E+03 -4.00980E+02 -6.00588E+02 -8.00196E+02 1.84906E+02 9.56244E+01 6.34308E+00 7.70791E+02 7.91836E+02 8.12882E+02 - 5.65000E+00 -5.75457E+02 -8.83942E+02 -1.19243E+03 2.86721E+02 1.48076E+02 9.43086E+00 1.14890E+03 1.18009E+03 1.21129E+03 -4.03134E+02 -7.02206E+02 -1.00128E+03 2.76471E+02 1.39655E+02 2.83846E+00 9.56076E+02 9.81516E+02 1.00696E+03 -4.03134E+02 -6.04086E+02 -8.05038E+02 1.86163E+02 9.62719E+01 6.38120E+00 7.75459E+02 7.96630E+02 8.17800E+02 - 5.67500E+00 -5.77612E+02 -8.87440E+02 -1.19727E+03 2.87978E+02 1.48723E+02 9.46897E+00 1.15357E+03 1.18489E+03 1.21621E+03 -4.05288E+02 -7.05705E+02 -1.00612E+03 2.77728E+02 1.40302E+02 2.87657E+00 9.60744E+02 9.86309E+02 1.01187E+03 -4.05288E+02 -6.07584E+02 -8.09880E+02 1.87420E+02 9.69195E+01 6.41933E+00 7.80127E+02 8.01423E+02 8.22719E+02 - 5.70000E+00 -5.79766E+02 -8.90938E+02 -1.20211E+03 2.89235E+02 1.49371E+02 9.50711E+00 1.15823E+03 1.18968E+03 1.22113E+03 -4.07442E+02 -7.09203E+02 -1.01096E+03 2.78985E+02 1.40950E+02 2.91471E+00 9.65412E+02 9.91103E+02 1.01679E+03 -4.07442E+02 -6.11082E+02 -8.14723E+02 1.88677E+02 9.75670E+01 6.45744E+00 7.84795E+02 8.06216E+02 8.27638E+02 - 5.72500E+00 -5.81920E+02 -8.94436E+02 -1.20695E+03 2.90492E+02 1.50018E+02 9.54523E+00 1.16290E+03 1.19447E+03 1.22604E+03 -4.09596E+02 -7.12701E+02 -1.01581E+03 2.80242E+02 1.41597E+02 2.95283E+00 9.70080E+02 9.95896E+02 1.02171E+03 -4.09596E+02 -6.14580E+02 -8.19565E+02 1.89934E+02 9.82146E+01 6.49557E+00 7.89463E+02 8.11010E+02 8.32556E+02 - 5.75000E+00 -5.84074E+02 -8.97935E+02 -1.21180E+03 2.91749E+02 1.50666E+02 9.58334E+00 1.16757E+03 1.19927E+03 1.23096E+03 -4.11750E+02 -7.16199E+02 -1.02065E+03 2.81499E+02 1.42245E+02 2.99094E+00 9.74748E+02 1.00069E+03 1.02663E+03 -4.11750E+02 -6.18079E+02 -8.24407E+02 1.91191E+02 9.88621E+01 6.53369E+00 7.94131E+02 8.15803E+02 8.37475E+02 - 5.77500E+00 -5.86228E+02 -9.01433E+02 -1.21664E+03 2.93006E+02 1.51314E+02 9.62146E+00 1.17224E+03 1.20406E+03 1.23588E+03 -4.13904E+02 -7.19697E+02 -1.02549E+03 2.82756E+02 1.42893E+02 3.02906E+00 9.79416E+02 1.00548E+03 1.03155E+03 -4.13904E+02 -6.21577E+02 -8.29250E+02 1.92448E+02 9.95097E+01 6.57180E+00 7.98799E+02 8.20596E+02 8.42393E+02 - 5.80000E+00 -5.88382E+02 -9.04931E+02 -1.22148E+03 2.94263E+02 1.51961E+02 9.65958E+00 1.17691E+03 1.20885E+03 1.24080E+03 -4.16058E+02 -7.23196E+02 -1.03033E+03 2.84013E+02 1.43540E+02 3.06718E+00 9.84084E+02 1.01028E+03 1.03647E+03 -4.16058E+02 -6.25075E+02 -8.34092E+02 1.93705E+02 1.00157E+02 6.60994E+00 8.03467E+02 8.25389E+02 8.47312E+02 - 5.82500E+00 -5.90536E+02 -9.08429E+02 -1.22632E+03 2.95520E+02 1.52609E+02 9.69772E+00 1.18157E+03 1.21365E+03 1.24572E+03 -4.18212E+02 -7.26694E+02 -1.03518E+03 2.85270E+02 1.44188E+02 3.10531E+00 9.88752E+02 1.01507E+03 1.04139E+03 -4.18212E+02 -6.28573E+02 -8.38934E+02 1.94961E+02 1.00805E+02 6.64804E+00 8.08135E+02 8.30183E+02 8.52230E+02 - 5.85000E+00 -5.92690E+02 -9.11927E+02 -1.23117E+03 2.96776E+02 1.53256E+02 9.73583E+00 1.18624E+03 1.21844E+03 1.25064E+03 -4.20366E+02 -7.30192E+02 -1.04002E+03 2.86527E+02 1.44835E+02 3.14343E+00 9.93420E+02 1.01986E+03 1.04630E+03 -4.20366E+02 -6.32071E+02 -8.43777E+02 1.96218E+02 1.01452E+02 6.68618E+00 8.12803E+02 8.34976E+02 8.57149E+02 - 5.87500E+00 -5.94844E+02 -9.15426E+02 -1.23601E+03 2.98033E+02 1.53904E+02 9.77395E+00 1.19091E+03 1.22323E+03 1.25556E+03 -4.22520E+02 -7.33690E+02 -1.04486E+03 2.87784E+02 1.45483E+02 3.18155E+00 9.98088E+02 1.02466E+03 1.05122E+03 -4.22520E+02 -6.35570E+02 -8.48619E+02 1.97475E+02 1.02100E+02 6.72429E+00 8.17471E+02 8.39769E+02 8.62068E+02 - 5.90000E+00 -5.96998E+02 -9.18924E+02 -1.24085E+03 2.99290E+02 1.54551E+02 9.81206E+00 1.19558E+03 1.22803E+03 1.26047E+03 -4.24674E+02 -7.37188E+02 -1.04970E+03 2.89041E+02 1.46130E+02 3.21966E+00 1.00276E+03 1.02945E+03 1.05614E+03 -4.24674E+02 -6.39068E+02 -8.53461E+02 1.98732E+02 1.02747E+02 6.76241E+00 8.22139E+02 8.44563E+02 8.66986E+02 - 5.92500E+00 -5.99152E+02 -9.22422E+02 -1.24569E+03 3.00547E+02 1.55199E+02 9.85018E+00 1.20025E+03 1.23282E+03 1.26539E+03 -4.26828E+02 -7.40687E+02 -1.05455E+03 2.90298E+02 1.46778E+02 3.25778E+00 1.00742E+03 1.03424E+03 1.06106E+03 -4.26828E+02 -6.42566E+02 -8.58304E+02 1.99989E+02 1.03395E+02 6.80054E+00 8.26807E+02 8.49356E+02 8.71905E+02 - 5.95000E+00 -6.01306E+02 -9.25920E+02 -1.25053E+03 3.01804E+02 1.55846E+02 9.88832E+00 1.20491E+03 1.23761E+03 1.27031E+03 -4.28982E+02 -7.44185E+02 -1.05939E+03 2.91555E+02 1.47425E+02 3.29592E+00 1.01209E+03 1.03904E+03 1.06598E+03 -4.28982E+02 -6.46064E+02 -8.63146E+02 2.01246E+02 1.04042E+02 6.83865E+00 8.31475E+02 8.54149E+02 8.76823E+02 - 5.97500E+00 -6.03460E+02 -9.29419E+02 -1.25538E+03 3.03061E+02 1.56494E+02 9.92644E+00 1.20958E+03 1.24241E+03 1.27523E+03 -4.31136E+02 -7.47683E+02 -1.06423E+03 2.92812E+02 1.48073E+02 3.33403E+00 1.01676E+03 1.04383E+03 1.07090E+03 -4.31136E+02 -6.49562E+02 -8.67989E+02 2.02503E+02 1.04690E+02 6.87678E+00 8.36143E+02 8.58943E+02 8.81742E+02 - 6.00000E+00 -5.19452E+02 -8.91109E+02 -1.26277E+03 3.44348E+02 1.74622E+02 4.89698E+00 1.20815E+03 1.24035E+03 1.27256E+03 -5.19452E+02 -7.92989E+02 -1.06653E+03 2.54039E+02 1.31240E+02 8.43972E+00 1.02753E+03 1.05547E+03 1.08340E+03 -3.47128E+02 -6.11253E+02 -8.75378E+02 2.43790E+02 1.22819E+02 1.84732E+00 8.34708E+02 8.56890E+02 8.79073E+02 - 6.02500E+00 -5.21606E+02 -8.94608E+02 -1.26761E+03 3.45605E+02 1.75270E+02 4.93509E+00 1.21282E+03 1.24515E+03 1.27748E+03 -5.21606E+02 -7.96487E+02 -1.07137E+03 2.55296E+02 1.31887E+02 8.47784E+00 1.03220E+03 1.06026E+03 1.08832E+03 -3.49282E+02 -6.14751E+02 -8.80220E+02 2.45047E+02 1.23466E+02 1.88544E+00 8.39376E+02 8.61684E+02 8.83991E+02 - 6.05000E+00 -5.23760E+02 -8.98106E+02 -1.27245E+03 3.46862E+02 1.75917E+02 4.97321E+00 1.21748E+03 1.24994E+03 1.28240E+03 -5.23760E+02 -7.99985E+02 -1.07621E+03 2.56553E+02 1.32535E+02 8.51596E+00 1.03687E+03 1.06505E+03 1.09324E+03 -3.51436E+02 -6.18250E+02 -8.85063E+02 2.46304E+02 1.24114E+02 1.92357E+00 8.44044E+02 8.66477E+02 8.88910E+02 - 6.07500E+00 -5.25914E+02 -9.01604E+02 -1.27729E+03 3.48119E+02 1.76565E+02 5.01135E+00 1.22215E+03 1.25473E+03 1.28732E+03 -5.25914E+02 -8.03483E+02 -1.08105E+03 2.57810E+02 1.33182E+02 8.55410E+00 1.04153E+03 1.06985E+03 1.09816E+03 -3.53590E+02 -6.21748E+02 -8.89905E+02 2.47561E+02 1.24761E+02 1.96168E+00 8.48712E+02 8.71270E+02 8.93828E+02 - 6.10000E+00 -5.28068E+02 -9.05102E+02 -1.28214E+03 3.49376E+02 1.77213E+02 5.04947E+00 1.22682E+03 1.25953E+03 1.29223E+03 -5.28068E+02 -8.06981E+02 -1.08589E+03 2.59067E+02 1.33830E+02 8.59221E+00 1.04620E+03 1.07464E+03 1.10308E+03 -3.55745E+02 -6.25246E+02 -8.94747E+02 2.48818E+02 1.25409E+02 1.99981E+00 8.53380E+02 8.76063E+02 8.98747E+02 - 6.12500E+00 -5.30222E+02 -9.08600E+02 -1.28698E+03 3.50633E+02 1.77860E+02 5.08758E+00 1.23149E+03 1.26432E+03 1.29715E+03 -5.30222E+02 -8.10480E+02 -1.09074E+03 2.60324E+02 1.34477E+02 8.63033E+00 1.05087E+03 1.07943E+03 1.10800E+03 -3.57899E+02 -6.28744E+02 -8.99590E+02 2.50075E+02 1.26056E+02 2.03793E+00 8.58048E+02 8.80857E+02 9.03666E+02 - 6.15000E+00 -5.32377E+02 -9.12099E+02 -1.29182E+03 3.51890E+02 1.78508E+02 5.12570E+00 1.23616E+03 1.26911E+03 1.30207E+03 -5.32377E+02 -8.13978E+02 -1.09558E+03 2.61581E+02 1.35125E+02 8.66844E+00 1.05554E+03 1.08423E+03 1.11292E+03 -3.60053E+02 -6.32242E+02 -9.04432E+02 2.51332E+02 1.26704E+02 2.07604E+00 8.62716E+02 8.85650E+02 9.08584E+02 - 6.17500E+00 -5.34531E+02 -9.15597E+02 -1.29666E+03 3.53147E+02 1.79155E+02 5.16381E+00 1.24082E+03 1.27391E+03 1.30699E+03 -5.34531E+02 -8.17476E+02 -1.10042E+03 2.62838E+02 1.35772E+02 8.70656E+00 1.06021E+03 1.08902E+03 1.11783E+03 -3.62207E+02 -6.35741E+02 -9.09275E+02 2.52589E+02 1.27351E+02 2.11416E+00 8.67384E+02 8.90443E+02 9.13503E+02 - 6.20000E+00 -5.36685E+02 -9.19095E+02 -1.30151E+03 3.54404E+02 1.79803E+02 5.20195E+00 1.24549E+03 1.27870E+03 1.31191E+03 -5.36685E+02 -8.20974E+02 -1.10526E+03 2.64095E+02 1.36420E+02 8.74470E+00 1.06487E+03 1.09381E+03 1.12275E+03 -3.64361E+02 -6.39239E+02 -9.14117E+02 2.53846E+02 1.27999E+02 2.15230E+00 8.72052E+02 8.95237E+02 9.18421E+02 - 6.22500E+00 -5.38839E+02 -9.22593E+02 -1.30635E+03 3.55661E+02 1.80450E+02 5.24007E+00 1.25016E+03 1.28349E+03 1.31683E+03 -5.38839E+02 -8.24472E+02 -1.11011E+03 2.65352E+02 1.37067E+02 8.78281E+00 1.06954E+03 1.09861E+03 1.12767E+03 -3.66515E+02 -6.42737E+02 -9.18959E+02 2.55102E+02 1.28646E+02 2.19041E+00 8.76720E+02 9.00030E+02 9.23340E+02 - 6.25000E+00 -5.40993E+02 -9.26091E+02 -1.31119E+03 3.56918E+02 1.81098E+02 5.27819E+00 1.25483E+03 1.28829E+03 1.32175E+03 -5.40993E+02 -8.27971E+02 -1.11495E+03 2.66609E+02 1.37715E+02 8.82093E+00 1.07421E+03 1.10340E+03 1.13259E+03 -3.68669E+02 -6.46235E+02 -9.23802E+02 2.56359E+02 1.29294E+02 2.22853E+00 8.81388E+02 9.04823E+02 9.28259E+02 - 6.27500E+00 -5.43147E+02 -9.29590E+02 -1.31603E+03 3.58174E+02 1.81745E+02 5.31630E+00 1.25950E+03 1.29308E+03 1.32667E+03 -5.43147E+02 -8.31469E+02 -1.11979E+03 2.67866E+02 1.38363E+02 8.85905E+00 1.07888E+03 1.10819E+03 1.13751E+03 -3.70823E+02 -6.49733E+02 -9.28644E+02 2.57616E+02 1.29942E+02 2.26664E+00 8.86056E+02 9.09617E+02 9.33177E+02 - 6.30000E+00 -5.45301E+02 -9.33088E+02 -1.32087E+03 3.59431E+02 1.82393E+02 5.35442E+00 1.26416E+03 1.29787E+03 1.33158E+03 -5.45301E+02 -8.34967E+02 -1.12463E+03 2.69123E+02 1.39010E+02 8.89716E+00 1.08355E+03 1.11299E+03 1.14243E+03 -3.72977E+02 -6.53232E+02 -9.33486E+02 2.58873E+02 1.30589E+02 2.30476E+00 8.90724E+02 9.14410E+02 9.38096E+02 - 6.32500E+00 -5.47455E+02 -9.36586E+02 -1.32572E+03 3.60688E+02 1.83040E+02 5.39256E+00 1.26883E+03 1.30267E+03 1.33650E+03 -5.47455E+02 -8.38465E+02 -1.12948E+03 2.70380E+02 1.39658E+02 8.93530E+00 1.08821E+03 1.11778E+03 1.14735E+03 -3.75131E+02 -6.56730E+02 -9.38329E+02 2.60130E+02 1.31237E+02 2.34290E+00 8.95392E+02 9.19203E+02 9.43014E+02 - 6.35000E+00 -5.49609E+02 -9.40084E+02 -1.33056E+03 3.61945E+02 1.83688E+02 5.43067E+00 1.27350E+03 1.30746E+03 1.34142E+03 -5.49609E+02 -8.41963E+02 -1.13432E+03 2.71637E+02 1.40305E+02 8.97342E+00 1.09288E+03 1.12257E+03 1.15226E+03 -3.77285E+02 -6.60228E+02 -9.43171E+02 2.61387E+02 1.31884E+02 2.38102E+00 9.00060E+02 9.23996E+02 9.47933E+02 - 6.37500E+00 -5.51763E+02 -9.43582E+02 -1.33540E+03 3.63202E+02 1.84336E+02 5.46879E+00 1.27817E+03 1.31225E+03 1.34634E+03 -5.51763E+02 -8.45462E+02 -1.13916E+03 2.72894E+02 1.40953E+02 9.01153E+00 1.09755E+03 1.12737E+03 1.15718E+03 -3.79439E+02 -6.63726E+02 -9.48013E+02 2.62644E+02 1.32532E+02 2.41913E+00 9.04728E+02 9.28790E+02 9.52852E+02 - 6.40000E+00 -5.53917E+02 -9.47081E+02 -1.34024E+03 3.64459E+02 1.84983E+02 5.50691E+00 1.28284E+03 1.31705E+03 1.35126E+03 -5.53917E+02 -8.48960E+02 -1.14400E+03 2.74151E+02 1.41600E+02 9.04965E+00 1.10222E+03 1.13216E+03 1.16210E+03 -3.81593E+02 -6.67224E+02 -9.52856E+02 2.63901E+02 1.33179E+02 2.45725E+00 9.09396E+02 9.33583E+02 9.57770E+02 - 6.42500E+00 -5.56071E+02 -9.50579E+02 -1.34509E+03 3.65716E+02 1.85631E+02 5.54502E+00 1.28750E+03 1.32184E+03 1.35618E+03 -5.56071E+02 -8.52458E+02 -1.14885E+03 2.75408E+02 1.42248E+02 9.08777E+00 1.10689E+03 1.13695E+03 1.16702E+03 -3.83747E+02 -6.70723E+02 -9.57698E+02 2.65158E+02 1.33827E+02 2.49536E+00 9.14064E+02 9.38376E+02 9.62689E+02 - 6.45000E+00 -5.58225E+02 -9.54077E+02 -1.34993E+03 3.66973E+02 1.86278E+02 5.58316E+00 1.29217E+03 1.32663E+03 1.36110E+03 -5.58225E+02 -8.55956E+02 -1.15369E+03 2.76665E+02 1.42895E+02 9.12591E+00 1.11155E+03 1.14175E+03 1.17194E+03 -3.85901E+02 -6.74221E+02 -9.62540E+02 2.66415E+02 1.34474E+02 2.53350E+00 9.18732E+02 9.43170E+02 9.67607E+02 - 6.47500E+00 -5.60379E+02 -9.57575E+02 -1.35477E+03 3.68230E+02 1.86926E+02 5.62128E+00 1.29684E+03 1.33143E+03 1.36601E+03 -5.60379E+02 -8.59454E+02 -1.15853E+03 2.77922E+02 1.43543E+02 9.16402E+00 1.11622E+03 1.14654E+03 1.17686E+03 -3.88055E+02 -6.77719E+02 -9.67383E+02 2.67672E+02 1.35122E+02 2.57162E+00 9.23400E+02 9.47963E+02 9.72526E+02 - 6.50000E+00 -5.62533E+02 -9.61073E+02 -1.35961E+03 3.69487E+02 1.87573E+02 5.65939E+00 1.30151E+03 1.33622E+03 1.37093E+03 -5.62533E+02 -8.62953E+02 -1.16337E+03 2.79179E+02 1.44190E+02 9.20214E+00 1.12089E+03 1.15133E+03 1.18178E+03 -3.90209E+02 -6.81217E+02 -9.72225E+02 2.68929E+02 1.35769E+02 2.60974E+00 9.28068E+02 9.52756E+02 9.77445E+02 - 6.52500E+00 -5.64687E+02 -9.64572E+02 -1.36446E+03 3.70744E+02 1.88221E+02 5.69751E+00 1.30618E+03 1.34101E+03 1.37585E+03 -5.64687E+02 -8.66451E+02 -1.16821E+03 2.80436E+02 1.44838E+02 9.24025E+00 1.12556E+03 1.15613E+03 1.18670E+03 -3.92363E+02 -6.84715E+02 -9.77068E+02 2.70186E+02 1.36417E+02 2.64785E+00 9.32736E+02 9.57549E+02 9.82363E+02 - 6.55000E+00 -5.66841E+02 -9.68070E+02 -1.36930E+03 3.72001E+02 1.88868E+02 5.73563E+00 1.31084E+03 1.34581E+03 1.38077E+03 -5.66841E+02 -8.69949E+02 -1.17306E+03 2.81693E+02 1.45486E+02 9.27837E+00 1.13023E+03 1.16092E+03 1.19161E+03 -3.94517E+02 -6.88214E+02 -9.81910E+02 2.71443E+02 1.37065E+02 2.68597E+00 9.37404E+02 9.62343E+02 9.87282E+02 - 6.57500E+00 -5.68995E+02 -9.71568E+02 -1.37414E+03 3.73258E+02 1.89516E+02 5.77376E+00 1.31551E+03 1.35060E+03 1.38569E+03 -5.68995E+02 -8.73447E+02 -1.17790E+03 2.82950E+02 1.46133E+02 9.31651E+00 1.13489E+03 1.16571E+03 1.19653E+03 -3.96671E+02 -6.91712E+02 -9.86752E+02 2.72700E+02 1.37712E+02 2.72411E+00 9.42072E+02 9.67136E+02 9.92200E+02 - 6.60000E+00 -5.71149E+02 -9.75066E+02 -1.37898E+03 3.74515E+02 1.90164E+02 5.81188E+00 1.32018E+03 1.35539E+03 1.39061E+03 -5.71149E+02 -8.76945E+02 -1.18274E+03 2.84207E+02 1.46781E+02 9.35463E+00 1.13956E+03 1.17051E+03 1.20145E+03 -3.98826E+02 -6.95210E+02 -9.91595E+02 2.73957E+02 1.38360E+02 2.76222E+00 9.46740E+02 9.71929E+02 9.97119E+02 - 6.62500E+00 -5.73303E+02 -9.78564E+02 -1.38383E+03 3.75772E+02 1.90811E+02 5.85000E+00 1.32485E+03 1.36019E+03 1.39553E+03 -5.73303E+02 -8.80444E+02 -1.18758E+03 2.85464E+02 1.47428E+02 9.39274E+00 1.14423E+03 1.17530E+03 1.20637E+03 -4.00980E+02 -6.98708E+02 -9.96437E+02 2.75214E+02 1.39007E+02 2.80034E+00 9.51408E+02 9.76723E+02 1.00204E+03 - 6.65000E+00 -5.75457E+02 -9.82063E+02 -1.38867E+03 3.77029E+02 1.91459E+02 5.88811E+00 1.32952E+03 1.36498E+03 1.40044E+03 -5.75457E+02 -8.83942E+02 -1.19243E+03 2.86721E+02 1.48076E+02 9.43086E+00 1.14890E+03 1.18009E+03 1.21129E+03 -4.03134E+02 -7.02206E+02 -1.00128E+03 2.76471E+02 1.39655E+02 2.83846E+00 9.56076E+02 9.81516E+02 1.00696E+03 - 6.67500E+00 -5.77612E+02 -9.85561E+02 -1.39351E+03 3.78286E+02 1.92106E+02 5.92623E+00 1.33418E+03 1.36977E+03 1.40536E+03 -5.77612E+02 -8.87440E+02 -1.19727E+03 2.87978E+02 1.48723E+02 9.46897E+00 1.15357E+03 1.18489E+03 1.21621E+03 -4.05288E+02 -7.05705E+02 -1.00612E+03 2.77728E+02 1.40302E+02 2.87657E+00 9.60744E+02 9.86309E+02 1.01187E+03 - 6.70000E+00 -5.79766E+02 -9.89059E+02 -1.39835E+03 3.79543E+02 1.92754E+02 5.96437E+00 1.33885E+03 1.37457E+03 1.41028E+03 -5.79766E+02 -8.90938E+02 -1.20211E+03 2.89235E+02 1.49371E+02 9.50711E+00 1.15823E+03 1.18968E+03 1.22113E+03 -4.07442E+02 -7.09203E+02 -1.01096E+03 2.78985E+02 1.40950E+02 2.91471E+00 9.65412E+02 9.91103E+02 1.01679E+03 - 6.72500E+00 -5.81920E+02 -9.92557E+02 -1.40319E+03 3.80800E+02 1.93401E+02 6.00248E+00 1.34352E+03 1.37936E+03 1.41520E+03 -5.81920E+02 -8.94436E+02 -1.20695E+03 2.90492E+02 1.50018E+02 9.54523E+00 1.16290E+03 1.19447E+03 1.22604E+03 -4.09596E+02 -7.12701E+02 -1.01581E+03 2.80242E+02 1.41597E+02 2.95283E+00 9.70080E+02 9.95896E+02 1.02171E+03 - 6.75000E+00 -5.84074E+02 -9.96055E+02 -1.40804E+03 3.82057E+02 1.94049E+02 6.04060E+00 1.34819E+03 1.38415E+03 1.42012E+03 -5.84074E+02 -8.97935E+02 -1.21180E+03 2.91749E+02 1.50666E+02 9.58334E+00 1.16757E+03 1.19927E+03 1.23096E+03 -4.11750E+02 -7.16199E+02 -1.02065E+03 2.81499E+02 1.42245E+02 2.99094E+00 9.74748E+02 1.00069E+03 1.02663E+03 - 6.77500E+00 -5.86228E+02 -9.99554E+02 -1.41288E+03 3.83314E+02 1.94696E+02 6.07872E+00 1.35286E+03 1.38895E+03 1.42504E+03 -5.86228E+02 -9.01433E+02 -1.21664E+03 2.93006E+02 1.51314E+02 9.62146E+00 1.17224E+03 1.20406E+03 1.23588E+03 -4.13904E+02 -7.19697E+02 -1.02549E+03 2.82756E+02 1.42893E+02 3.02906E+00 9.79416E+02 1.00548E+03 1.03155E+03 - 6.80000E+00 -5.88382E+02 -1.00305E+03 -1.41772E+03 3.84571E+02 1.95344E+02 6.11683E+00 1.35752E+03 1.39374E+03 1.42996E+03 -5.88382E+02 -9.04931E+02 -1.22148E+03 2.94263E+02 1.51961E+02 9.65958E+00 1.17691E+03 1.20885E+03 1.24080E+03 -4.16058E+02 -7.23196E+02 -1.03033E+03 2.84013E+02 1.43540E+02 3.06718E+00 9.84084E+02 1.01028E+03 1.03647E+03 - 6.82500E+00 -5.90536E+02 -1.00655E+03 -1.42256E+03 3.85828E+02 1.95991E+02 6.15497E+00 1.36219E+03 1.39853E+03 1.43487E+03 -5.90536E+02 -9.08429E+02 -1.22632E+03 2.95520E+02 1.52609E+02 9.69772E+00 1.18157E+03 1.21365E+03 1.24572E+03 -4.18212E+02 -7.26694E+02 -1.03518E+03 2.85270E+02 1.44188E+02 3.10531E+00 9.88752E+02 1.01507E+03 1.04139E+03 - 6.85000E+00 -5.92690E+02 -1.01005E+03 -1.42741E+03 3.87085E+02 1.96639E+02 6.19309E+00 1.36686E+03 1.40333E+03 1.43979E+03 -5.92690E+02 -9.11927E+02 -1.23117E+03 2.96776E+02 1.53256E+02 9.73583E+00 1.18624E+03 1.21844E+03 1.25064E+03 -4.20366E+02 -7.30192E+02 -1.04002E+03 2.86527E+02 1.44835E+02 3.14343E+00 9.93420E+02 1.01986E+03 1.04630E+03 - 6.87500E+00 -5.94844E+02 -1.01355E+03 -1.43225E+03 3.88342E+02 1.97287E+02 6.23120E+00 1.37153E+03 1.40812E+03 1.44471E+03 -5.94844E+02 -9.15426E+02 -1.23601E+03 2.98033E+02 1.53904E+02 9.77395E+00 1.19091E+03 1.22323E+03 1.25556E+03 -4.22520E+02 -7.33690E+02 -1.04486E+03 2.87784E+02 1.45483E+02 3.18155E+00 9.98088E+02 1.02466E+03 1.05122E+03 - 6.90000E+00 -5.96998E+02 -1.01704E+03 -1.43709E+03 3.89599E+02 1.97934E+02 6.26932E+00 1.37620E+03 1.41291E+03 1.44963E+03 -5.96998E+02 -9.18924E+02 -1.24085E+03 2.99290E+02 1.54551E+02 9.81206E+00 1.19558E+03 1.22803E+03 1.26047E+03 -4.24674E+02 -7.37188E+02 -1.04970E+03 2.89041E+02 1.46130E+02 3.21966E+00 1.00276E+03 1.02945E+03 1.05614E+03 - 6.92500E+00 -5.99152E+02 -1.02054E+03 -1.44193E+03 3.90856E+02 1.98582E+02 6.30744E+00 1.38086E+03 1.41771E+03 1.45455E+03 -5.99152E+02 -9.22422E+02 -1.24569E+03 3.00547E+02 1.55199E+02 9.85018E+00 1.20025E+03 1.23282E+03 1.26539E+03 -4.26828E+02 -7.40687E+02 -1.05455E+03 2.90298E+02 1.46778E+02 3.25778E+00 1.00742E+03 1.03424E+03 1.06106E+03 - 6.95000E+00 -6.01306E+02 -1.02404E+03 -1.44678E+03 3.92113E+02 1.99229E+02 6.34557E+00 1.38553E+03 1.42250E+03 1.45947E+03 -6.01306E+02 -9.25920E+02 -1.25053E+03 3.01804E+02 1.55846E+02 9.88832E+00 1.20491E+03 1.23761E+03 1.27031E+03 -4.28982E+02 -7.44185E+02 -1.05939E+03 2.91555E+02 1.47425E+02 3.29592E+00 1.01209E+03 1.03904E+03 1.06598E+03 - 6.97500E+00 -6.03460E+02 -1.02754E+03 -1.45162E+03 3.93370E+02 1.99877E+02 6.38369E+00 1.39020E+03 1.42729E+03 1.46439E+03 -6.03460E+02 -9.29419E+02 -1.25538E+03 3.03061E+02 1.56494E+02 9.92644E+00 1.20958E+03 1.24241E+03 1.27523E+03 -4.31136E+02 -7.47683E+02 -1.06423E+03 2.92812E+02 1.48073E+02 3.33403E+00 1.01676E+03 1.04383E+03 1.07090E+03 - 7.00000E+00 -6.91776E+02 -1.07284E+03 -1.45391E+03 3.54597E+02 1.83043E+02 1.14894E+01 1.40097E+03 1.43893E+03 1.47689E+03 -5.19452E+02 -8.91109E+02 -1.26277E+03 3.44348E+02 1.74622E+02 4.89698E+00 1.20815E+03 1.24035E+03 1.27256E+03 -5.19452E+02 -7.92989E+02 -1.06653E+03 2.54039E+02 1.31240E+02 8.43972E+00 1.02753E+03 1.05547E+03 1.08340E+03 - 7.02500E+00 -6.93930E+02 -1.07634E+03 -1.45876E+03 3.55854E+02 1.83691E+02 1.15275E+01 1.40564E+03 1.44372E+03 1.48181E+03 -5.21606E+02 -8.94608E+02 -1.26761E+03 3.45605E+02 1.75270E+02 4.93509E+00 1.21282E+03 1.24515E+03 1.27748E+03 -5.21606E+02 -7.96487E+02 -1.07137E+03 2.55296E+02 1.31887E+02 8.47784E+00 1.03220E+03 1.06026E+03 1.08832E+03 - 7.05000E+00 -6.96084E+02 -1.07984E+03 -1.46360E+03 3.57111E+02 1.84338E+02 1.15656E+01 1.41031E+03 1.44852E+03 1.48673E+03 -5.23760E+02 -8.98106E+02 -1.27245E+03 3.46862E+02 1.75917E+02 4.97321E+00 1.21748E+03 1.24994E+03 1.28240E+03 -5.23760E+02 -7.99985E+02 -1.07621E+03 2.56553E+02 1.32535E+02 8.51596E+00 1.03687E+03 1.06505E+03 1.09324E+03 - 7.07500E+00 -6.98238E+02 -1.08334E+03 -1.46844E+03 3.58368E+02 1.84986E+02 1.16038E+01 1.41497E+03 1.45331E+03 1.49165E+03 -5.25914E+02 -9.01604E+02 -1.27729E+03 3.48119E+02 1.76565E+02 5.01135E+00 1.22215E+03 1.25473E+03 1.28732E+03 -5.25914E+02 -8.03483E+02 -1.08105E+03 2.57810E+02 1.33182E+02 8.55410E+00 1.04153E+03 1.06985E+03 1.09816E+03 - 7.10000E+00 -7.00392E+02 -1.08684E+03 -1.47328E+03 3.59625E+02 1.85634E+02 1.16419E+01 1.41964E+03 1.45810E+03 1.49657E+03 -5.28068E+02 -9.05102E+02 -1.28214E+03 3.49376E+02 1.77213E+02 5.04947E+00 1.22682E+03 1.25953E+03 1.29223E+03 -5.28068E+02 -8.06981E+02 -1.08589E+03 2.59067E+02 1.33830E+02 8.59221E+00 1.04620E+03 1.07464E+03 1.10308E+03 - 7.12500E+00 -7.02546E+02 -1.09034E+03 -1.47813E+03 3.60882E+02 1.86281E+02 1.16800E+01 1.42431E+03 1.46290E+03 1.50149E+03 -5.30222E+02 -9.08600E+02 -1.28698E+03 3.50633E+02 1.77860E+02 5.08758E+00 1.23149E+03 1.26432E+03 1.29715E+03 -5.30222E+02 -8.10480E+02 -1.09074E+03 2.60324E+02 1.34477E+02 8.63033E+00 1.05087E+03 1.07943E+03 1.10800E+03 - 7.15000E+00 -7.04700E+02 -1.09383E+03 -1.48297E+03 3.62139E+02 1.86929E+02 1.17181E+01 1.42898E+03 1.46769E+03 1.50640E+03 -5.32377E+02 -9.12099E+02 -1.29182E+03 3.51890E+02 1.78508E+02 5.12570E+00 1.23616E+03 1.26911E+03 1.30207E+03 -5.32377E+02 -8.13978E+02 -1.09558E+03 2.61581E+02 1.35125E+02 8.66844E+00 1.05554E+03 1.08423E+03 1.11292E+03 - 7.17500E+00 -7.06854E+02 -1.09733E+03 -1.48781E+03 3.63396E+02 1.87576E+02 1.17562E+01 1.43365E+03 1.47248E+03 1.51132E+03 -5.34531E+02 -9.15597E+02 -1.29666E+03 3.53147E+02 1.79155E+02 5.16381E+00 1.24082E+03 1.27391E+03 1.30699E+03 -5.34531E+02 -8.17476E+02 -1.10042E+03 2.62838E+02 1.35772E+02 8.70656E+00 1.06021E+03 1.08902E+03 1.11783E+03 - 7.20000E+00 -7.09008E+02 -1.10083E+03 -1.49265E+03 3.64653E+02 1.88224E+02 1.17944E+01 1.43831E+03 1.47728E+03 1.51624E+03 -5.36685E+02 -9.19095E+02 -1.30151E+03 3.54404E+02 1.79803E+02 5.20195E+00 1.24549E+03 1.27870E+03 1.31191E+03 -5.36685E+02 -8.20974E+02 -1.10526E+03 2.64095E+02 1.36420E+02 8.74470E+00 1.06487E+03 1.09381E+03 1.12275E+03 - 7.22500E+00 -7.11163E+02 -1.10433E+03 -1.49749E+03 3.65910E+02 1.88871E+02 1.18325E+01 1.44298E+03 1.48207E+03 1.52116E+03 -5.38839E+02 -9.22593E+02 -1.30635E+03 3.55661E+02 1.80450E+02 5.24007E+00 1.25016E+03 1.28349E+03 1.31683E+03 -5.38839E+02 -8.24472E+02 -1.11011E+03 2.65352E+02 1.37067E+02 8.78281E+00 1.06954E+03 1.09861E+03 1.12767E+03 - 7.25000E+00 -7.13317E+02 -1.10783E+03 -1.50234E+03 3.67167E+02 1.89519E+02 1.18706E+01 1.44765E+03 1.48686E+03 1.52608E+03 -5.40993E+02 -9.26091E+02 -1.31119E+03 3.56918E+02 1.81098E+02 5.27819E+00 1.25483E+03 1.28829E+03 1.32175E+03 -5.40993E+02 -8.27971E+02 -1.11495E+03 2.66609E+02 1.37715E+02 8.82093E+00 1.07421E+03 1.10340E+03 1.13259E+03 - 7.27500E+00 -7.15471E+02 -1.11132E+03 -1.50718E+03 3.68424E+02 1.90166E+02 1.19087E+01 1.45232E+03 1.49166E+03 1.53100E+03 -5.43147E+02 -9.29590E+02 -1.31603E+03 3.58174E+02 1.81745E+02 5.31630E+00 1.25950E+03 1.29308E+03 1.32667E+03 -5.43147E+02 -8.31469E+02 -1.11979E+03 2.67866E+02 1.38363E+02 8.85905E+00 1.07888E+03 1.10819E+03 1.13751E+03 - 7.30000E+00 -7.17625E+02 -1.11482E+03 -1.51202E+03 3.69681E+02 1.90814E+02 1.19468E+01 1.45699E+03 1.49645E+03 1.53592E+03 -5.45301E+02 -9.33088E+02 -1.32087E+03 3.59431E+02 1.82393E+02 5.35442E+00 1.26416E+03 1.29787E+03 1.33158E+03 -5.45301E+02 -8.34967E+02 -1.12463E+03 2.69123E+02 1.39010E+02 8.89716E+00 1.08355E+03 1.11299E+03 1.14243E+03 - 7.32500E+00 -7.19779E+02 -1.11832E+03 -1.51686E+03 3.70938E+02 1.91462E+02 1.19850E+01 1.46165E+03 1.50124E+03 1.54083E+03 -5.47455E+02 -9.36586E+02 -1.32572E+03 3.60688E+02 1.83040E+02 5.39256E+00 1.26883E+03 1.30267E+03 1.33650E+03 -5.47455E+02 -8.38465E+02 -1.12948E+03 2.70380E+02 1.39658E+02 8.93530E+00 1.08821E+03 1.11778E+03 1.14735E+03 - 7.35000E+00 -7.21933E+02 -1.12182E+03 -1.52171E+03 3.72195E+02 1.92109E+02 1.20231E+01 1.46632E+03 1.50604E+03 1.54575E+03 -5.49609E+02 -9.40084E+02 -1.33056E+03 3.61945E+02 1.83688E+02 5.43067E+00 1.27350E+03 1.30746E+03 1.34142E+03 -5.49609E+02 -8.41963E+02 -1.13432E+03 2.71637E+02 1.40305E+02 8.97342E+00 1.09288E+03 1.12257E+03 1.15226E+03 - 7.37500E+00 -7.24087E+02 -1.12532E+03 -1.52655E+03 3.73452E+02 1.92757E+02 1.20612E+01 1.47099E+03 1.51083E+03 1.55067E+03 -5.51763E+02 -9.43582E+02 -1.33540E+03 3.63202E+02 1.84336E+02 5.46879E+00 1.27817E+03 1.31225E+03 1.34634E+03 -5.51763E+02 -8.45462E+02 -1.13916E+03 2.72894E+02 1.40953E+02 9.01153E+00 1.09755E+03 1.12737E+03 1.15718E+03 - 7.40000E+00 -7.26241E+02 -1.12882E+03 -1.53139E+03 3.74709E+02 1.93404E+02 1.20993E+01 1.47566E+03 1.51562E+03 1.55559E+03 -5.53917E+02 -9.47081E+02 -1.34024E+03 3.64459E+02 1.84983E+02 5.50691E+00 1.28284E+03 1.31705E+03 1.35126E+03 -5.53917E+02 -8.48960E+02 -1.14400E+03 2.74151E+02 1.41600E+02 9.04965E+00 1.10222E+03 1.13216E+03 1.16210E+03 - 7.42500E+00 -7.28395E+02 -1.13231E+03 -1.53623E+03 3.75966E+02 1.94052E+02 1.21374E+01 1.48033E+03 1.52042E+03 1.56051E+03 -5.56071E+02 -9.50579E+02 -1.34509E+03 3.65716E+02 1.85631E+02 5.54502E+00 1.28750E+03 1.32184E+03 1.35618E+03 -5.56071E+02 -8.52458E+02 -1.14885E+03 2.75408E+02 1.42248E+02 9.08777E+00 1.10689E+03 1.13695E+03 1.16702E+03 - 7.45000E+00 -7.30549E+02 -1.13581E+03 -1.54108E+03 3.77223E+02 1.94699E+02 1.21756E+01 1.48499E+03 1.52521E+03 1.56543E+03 -5.58225E+02 -9.54077E+02 -1.34993E+03 3.66973E+02 1.86278E+02 5.58316E+00 1.29217E+03 1.32663E+03 1.36110E+03 -5.58225E+02 -8.55956E+02 -1.15369E+03 2.76665E+02 1.42895E+02 9.12591E+00 1.11155E+03 1.14175E+03 1.17194E+03 - 7.47500E+00 -7.32703E+02 -1.13931E+03 -1.54592E+03 3.78480E+02 1.95347E+02 1.22137E+01 1.48966E+03 1.53000E+03 1.57035E+03 -5.60379E+02 -9.57575E+02 -1.35477E+03 3.68230E+02 1.86926E+02 5.62128E+00 1.29684E+03 1.33143E+03 1.36601E+03 -5.60379E+02 -8.59454E+02 -1.15853E+03 2.77922E+02 1.43543E+02 9.16402E+00 1.11622E+03 1.14654E+03 1.17686E+03 - 7.50000E+00 -7.34857E+02 -1.14281E+03 -1.55076E+03 3.79737E+02 1.95994E+02 1.22518E+01 1.49433E+03 1.53480E+03 1.57526E+03 -5.62533E+02 -9.61073E+02 -1.35961E+03 3.69487E+02 1.87573E+02 5.65939E+00 1.30151E+03 1.33622E+03 1.37093E+03 -5.62533E+02 -8.62953E+02 -1.16337E+03 2.79179E+02 1.44190E+02 9.20214E+00 1.12089E+03 1.15133E+03 1.18178E+03 - 7.52500E+00 -7.37011E+02 -1.14631E+03 -1.55560E+03 3.80994E+02 1.96642E+02 1.22899E+01 1.49900E+03 1.53959E+03 1.58018E+03 -5.64687E+02 -9.64572E+02 -1.36446E+03 3.70744E+02 1.88221E+02 5.69751E+00 1.30618E+03 1.34101E+03 1.37585E+03 -5.64687E+02 -8.66451E+02 -1.16821E+03 2.80436E+02 1.44838E+02 9.24025E+00 1.12556E+03 1.15613E+03 1.18670E+03 - 7.55000E+00 -7.39165E+02 -1.14981E+03 -1.56045E+03 3.82251E+02 1.97289E+02 1.23280E+01 1.50367E+03 1.54438E+03 1.58510E+03 -5.66841E+02 -9.68070E+02 -1.36930E+03 3.72001E+02 1.88868E+02 5.73563E+00 1.31084E+03 1.34581E+03 1.38077E+03 -5.66841E+02 -8.69949E+02 -1.17306E+03 2.81693E+02 1.45486E+02 9.27837E+00 1.13023E+03 1.16092E+03 1.19161E+03 - 7.57500E+00 -7.41319E+02 -1.15330E+03 -1.56529E+03 3.83508E+02 1.97937E+02 1.23662E+01 1.50833E+03 1.54918E+03 1.59002E+03 -5.68995E+02 -9.71568E+02 -1.37414E+03 3.73258E+02 1.89516E+02 5.77376E+00 1.31551E+03 1.35060E+03 1.38569E+03 -5.68995E+02 -8.73447E+02 -1.17790E+03 2.82950E+02 1.46133E+02 9.31651E+00 1.13489E+03 1.16571E+03 1.19653E+03 - 7.60000E+00 -7.43473E+02 -1.15680E+03 -1.57013E+03 3.84765E+02 1.98585E+02 1.24043E+01 1.51300E+03 1.55397E+03 1.59494E+03 -5.71149E+02 -9.75066E+02 -1.37898E+03 3.74515E+02 1.90164E+02 5.81188E+00 1.32018E+03 1.35539E+03 1.39061E+03 -5.71149E+02 -8.76945E+02 -1.18274E+03 2.84207E+02 1.46781E+02 9.35463E+00 1.13956E+03 1.17051E+03 1.20145E+03 - 7.62500E+00 -7.45627E+02 -1.16030E+03 -1.57497E+03 3.86022E+02 1.99232E+02 1.24424E+01 1.51767E+03 1.55876E+03 1.59986E+03 -5.73303E+02 -9.78564E+02 -1.38383E+03 3.75772E+02 1.90811E+02 5.85000E+00 1.32485E+03 1.36019E+03 1.39553E+03 -5.73303E+02 -8.80444E+02 -1.18758E+03 2.85464E+02 1.47428E+02 9.39274E+00 1.14423E+03 1.17530E+03 1.20637E+03 - 7.65000E+00 -7.47781E+02 -1.16380E+03 -1.57981E+03 3.87279E+02 1.99880E+02 1.24805E+01 1.52234E+03 1.56356E+03 1.60478E+03 -5.75457E+02 -9.82063E+02 -1.38867E+03 3.77029E+02 1.91459E+02 5.88811E+00 1.32952E+03 1.36498E+03 1.40044E+03 -5.75457E+02 -8.83942E+02 -1.19243E+03 2.86721E+02 1.48076E+02 9.43086E+00 1.14890E+03 1.18009E+03 1.21129E+03 - 7.67500E+00 -7.49935E+02 -1.16730E+03 -1.58466E+03 3.88536E+02 2.00527E+02 1.25186E+01 1.52701E+03 1.56835E+03 1.60969E+03 -5.77612E+02 -9.85561E+02 -1.39351E+03 3.78286E+02 1.92106E+02 5.92623E+00 1.33418E+03 1.36977E+03 1.40536E+03 -5.77612E+02 -8.87440E+02 -1.19727E+03 2.87978E+02 1.48723E+02 9.46897E+00 1.15357E+03 1.18489E+03 1.21621E+03 - 7.70000E+00 -7.52089E+02 -1.17079E+03 -1.58950E+03 3.89793E+02 2.01175E+02 1.25568E+01 1.53167E+03 1.57314E+03 1.61461E+03 -5.79766E+02 -9.89059E+02 -1.39835E+03 3.79543E+02 1.92754E+02 5.96437E+00 1.33885E+03 1.37457E+03 1.41028E+03 -5.79766E+02 -8.90938E+02 -1.20211E+03 2.89235E+02 1.49371E+02 9.50711E+00 1.15823E+03 1.18968E+03 1.22113E+03 - 7.72500E+00 -7.54244E+02 -1.17429E+03 -1.59434E+03 3.91050E+02 2.01822E+02 1.25949E+01 1.53634E+03 1.57794E+03 1.61953E+03 -5.81920E+02 -9.92557E+02 -1.40319E+03 3.80800E+02 1.93401E+02 6.00248E+00 1.34352E+03 1.37936E+03 1.41520E+03 -5.81920E+02 -8.94436E+02 -1.20695E+03 2.90492E+02 1.50018E+02 9.54523E+00 1.16290E+03 1.19447E+03 1.22604E+03 - 7.75000E+00 -7.56398E+02 -1.17779E+03 -1.59918E+03 3.92307E+02 2.02470E+02 1.26330E+01 1.54101E+03 1.58273E+03 1.62445E+03 -5.84074E+02 -9.96055E+02 -1.40804E+03 3.82057E+02 1.94049E+02 6.04060E+00 1.34819E+03 1.38415E+03 1.42012E+03 -5.84074E+02 -8.97935E+02 -1.21180E+03 2.91749E+02 1.50666E+02 9.58334E+00 1.16757E+03 1.19927E+03 1.23096E+03 - 7.77500E+00 -7.58552E+02 -1.18129E+03 -1.60403E+03 3.93564E+02 2.03117E+02 1.26711E+01 1.54568E+03 1.58752E+03 1.62937E+03 -5.86228E+02 -9.99554E+02 -1.41288E+03 3.83314E+02 1.94696E+02 6.07872E+00 1.35286E+03 1.38895E+03 1.42504E+03 -5.86228E+02 -9.01433E+02 -1.21664E+03 2.93006E+02 1.51314E+02 9.62146E+00 1.17224E+03 1.20406E+03 1.23588E+03 - 7.80000E+00 -7.60706E+02 -1.18479E+03 -1.60887E+03 3.94821E+02 2.03765E+02 1.27092E+01 1.55035E+03 1.59232E+03 1.63429E+03 -5.88382E+02 -1.00305E+03 -1.41772E+03 3.84571E+02 1.95344E+02 6.11683E+00 1.35752E+03 1.39374E+03 1.42996E+03 -5.88382E+02 -9.04931E+02 -1.22148E+03 2.94263E+02 1.51961E+02 9.65958E+00 1.17691E+03 1.20885E+03 1.24080E+03 - 7.82500E+00 -7.62860E+02 -1.18829E+03 -1.61371E+03 3.96078E+02 2.04412E+02 1.27474E+01 1.55501E+03 1.59711E+03 1.63921E+03 -5.90536E+02 -1.00655E+03 -1.42256E+03 3.85828E+02 1.95991E+02 6.15497E+00 1.36219E+03 1.39853E+03 1.43487E+03 -5.90536E+02 -9.08429E+02 -1.22632E+03 2.95520E+02 1.52609E+02 9.69772E+00 1.18157E+03 1.21365E+03 1.24572E+03 - 7.85000E+00 -7.65014E+02 -1.19178E+03 -1.61855E+03 3.97335E+02 2.05060E+02 1.27855E+01 1.55968E+03 1.60190E+03 1.64412E+03 -5.92690E+02 -1.01005E+03 -1.42741E+03 3.87085E+02 1.96639E+02 6.19309E+00 1.36686E+03 1.40333E+03 1.43979E+03 -5.92690E+02 -9.11927E+02 -1.23117E+03 2.96776E+02 1.53256E+02 9.73583E+00 1.18624E+03 1.21844E+03 1.25064E+03 - 7.87500E+00 -7.67168E+02 -1.19528E+03 -1.62340E+03 3.98592E+02 2.05708E+02 1.28236E+01 1.56435E+03 1.60670E+03 1.64904E+03 -5.94844E+02 -1.01355E+03 -1.43225E+03 3.88342E+02 1.97287E+02 6.23120E+00 1.37153E+03 1.40812E+03 1.44471E+03 -5.94844E+02 -9.15426E+02 -1.23601E+03 2.98033E+02 1.53904E+02 9.77395E+00 1.19091E+03 1.22323E+03 1.25556E+03 - 7.90000E+00 -7.69322E+02 -1.19878E+03 -1.62824E+03 3.99848E+02 2.06355E+02 1.28617E+01 1.56902E+03 1.61149E+03 1.65396E+03 -5.96998E+02 -1.01704E+03 -1.43709E+03 3.89599E+02 1.97934E+02 6.26932E+00 1.37620E+03 1.41291E+03 1.44963E+03 -5.96998E+02 -9.18924E+02 -1.24085E+03 2.99290E+02 1.54551E+02 9.81206E+00 1.19558E+03 1.22803E+03 1.26047E+03 - 7.92500E+00 -7.71476E+02 -1.20228E+03 -1.63308E+03 4.01105E+02 2.07003E+02 1.28998E+01 1.57369E+03 1.61628E+03 1.65888E+03 -5.99152E+02 -1.02054E+03 -1.44193E+03 3.90856E+02 1.98582E+02 6.30744E+00 1.38086E+03 1.41771E+03 1.45455E+03 -5.99152E+02 -9.22422E+02 -1.24569E+03 3.00547E+02 1.55199E+02 9.85018E+00 1.20025E+03 1.23282E+03 1.26539E+03 - 7.95000E+00 -7.73630E+02 -1.20578E+03 -1.63792E+03 4.02362E+02 2.07650E+02 1.29380E+01 1.57835E+03 1.62108E+03 1.66380E+03 -6.01306E+02 -1.02404E+03 -1.44678E+03 3.92113E+02 1.99229E+02 6.34557E+00 1.38553E+03 1.42250E+03 1.45947E+03 -6.01306E+02 -9.25920E+02 -1.25053E+03 3.01804E+02 1.55846E+02 9.88832E+00 1.20491E+03 1.23761E+03 1.27031E+03 - 7.97500E+00 -7.75784E+02 -1.20927E+03 -1.64277E+03 4.03619E+02 2.08298E+02 1.29761E+01 1.58302E+03 1.62587E+03 1.66872E+03 -6.03460E+02 -1.02754E+03 -1.45162E+03 3.93370E+02 1.99877E+02 6.38369E+00 1.39020E+03 1.42729E+03 1.46439E+03 -6.03460E+02 -9.29419E+02 -1.25538E+03 3.03061E+02 1.56494E+02 9.92644E+00 1.20958E+03 1.24241E+03 1.27523E+03 - 8.00000E+00 -6.91776E+02 -1.17097E+03 -1.65015E+03 4.44906E+02 2.26426E+02 7.94663E+00 1.58159E+03 1.62382E+03 1.66605E+03 -6.91776E+02 -1.07284E+03 -1.45391E+03 3.54597E+02 1.83043E+02 1.14894E+01 1.40097E+03 1.43893E+03 1.47689E+03 -5.19452E+02 -8.91109E+02 -1.26277E+03 3.44348E+02 1.74622E+02 4.89698E+00 1.20815E+03 1.24035E+03 1.27256E+03 - 8.02500E+00 -6.93930E+02 -1.17446E+03 -1.65500E+03 4.46163E+02 2.27074E+02 7.98474E+00 1.58626E+03 1.62861E+03 1.67097E+03 -6.93930E+02 -1.07634E+03 -1.45876E+03 3.55854E+02 1.83691E+02 1.15275E+01 1.40564E+03 1.44372E+03 1.48181E+03 -5.21606E+02 -8.94608E+02 -1.26761E+03 3.45605E+02 1.75270E+02 4.93509E+00 1.21282E+03 1.24515E+03 1.27748E+03 - 8.05000E+00 -6.96084E+02 -1.17796E+03 -1.65984E+03 4.47420E+02 2.27721E+02 8.02287E+00 1.59092E+03 1.63340E+03 1.67589E+03 -6.96084E+02 -1.07984E+03 -1.46360E+03 3.57111E+02 1.84338E+02 1.15656E+01 1.41031E+03 1.44852E+03 1.48673E+03 -5.23760E+02 -8.98106E+02 -1.27245E+03 3.46862E+02 1.75917E+02 4.97321E+00 1.21748E+03 1.24994E+03 1.28240E+03 - 8.07500E+00 -6.98238E+02 -1.18146E+03 -1.66468E+03 4.48677E+02 2.28369E+02 8.06101E+00 1.59559E+03 1.63820E+03 1.68080E+03 -6.98238E+02 -1.08334E+03 -1.46844E+03 3.58368E+02 1.84986E+02 1.16038E+01 1.41497E+03 1.45331E+03 1.49165E+03 -5.25914E+02 -9.01604E+02 -1.27729E+03 3.48119E+02 1.76565E+02 5.01135E+00 1.22215E+03 1.25473E+03 1.28732E+03 - 8.10000E+00 -7.00392E+02 -1.18496E+03 -1.66952E+03 4.49934E+02 2.29016E+02 8.09913E+00 1.60026E+03 1.64299E+03 1.68572E+03 -7.00392E+02 -1.08684E+03 -1.47328E+03 3.59625E+02 1.85634E+02 1.16419E+01 1.41964E+03 1.45810E+03 1.49657E+03 -5.28068E+02 -9.05102E+02 -1.28214E+03 3.49376E+02 1.77213E+02 5.04947E+00 1.22682E+03 1.25953E+03 1.29223E+03 - 8.12500E+00 -7.02546E+02 -1.18846E+03 -1.67437E+03 4.51191E+02 2.29664E+02 8.13724E+00 1.60493E+03 1.64778E+03 1.69064E+03 -7.02546E+02 -1.09034E+03 -1.47813E+03 3.60882E+02 1.86281E+02 1.16800E+01 1.42431E+03 1.46290E+03 1.50149E+03 -5.30222E+02 -9.08600E+02 -1.28698E+03 3.50633E+02 1.77860E+02 5.08758E+00 1.23149E+03 1.26432E+03 1.29715E+03 - 8.15000E+00 -7.04700E+02 -1.19195E+03 -1.67921E+03 4.52448E+02 2.30311E+02 8.17535E+00 1.60960E+03 1.65258E+03 1.69556E+03 -7.04700E+02 -1.09383E+03 -1.48297E+03 3.62139E+02 1.86929E+02 1.17181E+01 1.42898E+03 1.46769E+03 1.50640E+03 -5.32377E+02 -9.12099E+02 -1.29182E+03 3.51890E+02 1.78508E+02 5.12570E+00 1.23616E+03 1.26911E+03 1.30207E+03 - 8.17500E+00 -7.06854E+02 -1.19545E+03 -1.68405E+03 4.53705E+02 2.30959E+02 8.21347E+00 1.61426E+03 1.65737E+03 1.70048E+03 -7.06854E+02 -1.09733E+03 -1.48781E+03 3.63396E+02 1.87576E+02 1.17562E+01 1.43365E+03 1.47248E+03 1.51132E+03 -5.34531E+02 -9.15597E+02 -1.29666E+03 3.53147E+02 1.79155E+02 5.16381E+00 1.24082E+03 1.27391E+03 1.30699E+03 - 8.20000E+00 -7.09008E+02 -1.19895E+03 -1.68889E+03 4.54962E+02 2.31607E+02 8.25161E+00 1.61893E+03 1.66216E+03 1.70540E+03 -7.09008E+02 -1.10083E+03 -1.49265E+03 3.64653E+02 1.88224E+02 1.17944E+01 1.43831E+03 1.47728E+03 1.51624E+03 -5.36685E+02 -9.19095E+02 -1.30151E+03 3.54404E+02 1.79803E+02 5.20195E+00 1.24549E+03 1.27870E+03 1.31191E+03 - 8.22500E+00 -7.11163E+02 -1.20245E+03 -1.69374E+03 4.56219E+02 2.32254E+02 8.28973E+00 1.62360E+03 1.66696E+03 1.71032E+03 -7.11163E+02 -1.10433E+03 -1.49749E+03 3.65910E+02 1.88871E+02 1.18325E+01 1.44298E+03 1.48207E+03 1.52116E+03 -5.38839E+02 -9.22593E+02 -1.30635E+03 3.55661E+02 1.80450E+02 5.24007E+00 1.25016E+03 1.28349E+03 1.31683E+03 - 8.25000E+00 -7.13317E+02 -1.20595E+03 -1.69858E+03 4.57476E+02 2.32902E+02 8.32784E+00 1.62827E+03 1.67175E+03 1.71523E+03 -7.13317E+02 -1.10783E+03 -1.50234E+03 3.67167E+02 1.89519E+02 1.18706E+01 1.44765E+03 1.48686E+03 1.52608E+03 -5.40993E+02 -9.26091E+02 -1.31119E+03 3.56918E+02 1.81098E+02 5.27819E+00 1.25483E+03 1.28829E+03 1.32175E+03 - 8.27500E+00 -7.15471E+02 -1.20945E+03 -1.70342E+03 4.58733E+02 2.33549E+02 8.36595E+00 1.63294E+03 1.67654E+03 1.72015E+03 -7.15471E+02 -1.11132E+03 -1.50718E+03 3.68424E+02 1.90166E+02 1.19087E+01 1.45232E+03 1.49166E+03 1.53100E+03 -5.43147E+02 -9.29590E+02 -1.31603E+03 3.58174E+02 1.81745E+02 5.31630E+00 1.25950E+03 1.29308E+03 1.32667E+03 - 8.30000E+00 -7.17625E+02 -1.21294E+03 -1.70826E+03 4.59990E+02 2.34197E+02 8.40407E+00 1.63760E+03 1.68134E+03 1.72507E+03 -7.17625E+02 -1.11482E+03 -1.51202E+03 3.69681E+02 1.90814E+02 1.19468E+01 1.45699E+03 1.49645E+03 1.53592E+03 -5.45301E+02 -9.33088E+02 -1.32087E+03 3.59431E+02 1.82393E+02 5.35442E+00 1.26416E+03 1.29787E+03 1.33158E+03 - 8.32500E+00 -7.19779E+02 -1.21644E+03 -1.71311E+03 4.61246E+02 2.34844E+02 8.44221E+00 1.64227E+03 1.68613E+03 1.72999E+03 -7.19779E+02 -1.11832E+03 -1.51686E+03 3.70938E+02 1.91462E+02 1.19850E+01 1.46165E+03 1.50124E+03 1.54083E+03 -5.47455E+02 -9.36586E+02 -1.32572E+03 3.60688E+02 1.83040E+02 5.39256E+00 1.26883E+03 1.30267E+03 1.33650E+03 - 8.35000E+00 -7.21933E+02 -1.21994E+03 -1.71795E+03 4.62504E+02 2.35492E+02 8.48034E+00 1.64694E+03 1.69092E+03 1.73491E+03 -7.21933E+02 -1.12182E+03 -1.52171E+03 3.72195E+02 1.92109E+02 1.20231E+01 1.46632E+03 1.50604E+03 1.54575E+03 -5.49609E+02 -9.40084E+02 -1.33056E+03 3.61945E+02 1.83688E+02 5.43067E+00 1.27350E+03 1.30746E+03 1.34142E+03 - 8.37500E+00 -7.24087E+02 -1.22344E+03 -1.72279E+03 4.63760E+02 2.36139E+02 8.51845E+00 1.65161E+03 1.69572E+03 1.73983E+03 -7.24087E+02 -1.12532E+03 -1.52655E+03 3.73452E+02 1.92757E+02 1.20612E+01 1.47099E+03 1.51083E+03 1.55067E+03 -5.51763E+02 -9.43582E+02 -1.33540E+03 3.63202E+02 1.84336E+02 5.46879E+00 1.27817E+03 1.31225E+03 1.34634E+03 - 8.40000E+00 -7.26241E+02 -1.22694E+03 -1.72763E+03 4.65017E+02 2.36787E+02 8.55655E+00 1.65628E+03 1.70051E+03 1.74475E+03 -7.26241E+02 -1.12882E+03 -1.53139E+03 3.74709E+02 1.93404E+02 1.20993E+01 1.47566E+03 1.51562E+03 1.55559E+03 -5.53917E+02 -9.47081E+02 -1.34024E+03 3.64459E+02 1.84983E+02 5.50691E+00 1.28284E+03 1.31705E+03 1.35126E+03 - 8.42500E+00 -7.28395E+02 -1.23043E+03 -1.73247E+03 4.66274E+02 2.37435E+02 8.59468E+00 1.66094E+03 1.70530E+03 1.74966E+03 -7.28395E+02 -1.13231E+03 -1.53623E+03 3.75966E+02 1.94052E+02 1.21374E+01 1.48033E+03 1.52042E+03 1.56051E+03 -5.56071E+02 -9.50579E+02 -1.34509E+03 3.65716E+02 1.85631E+02 5.54502E+00 1.28750E+03 1.32184E+03 1.35618E+03 - 8.45000E+00 -7.30549E+02 -1.23393E+03 -1.73732E+03 4.67531E+02 2.38082E+02 8.63282E+00 1.66561E+03 1.71010E+03 1.75458E+03 -7.30549E+02 -1.13581E+03 -1.54108E+03 3.77223E+02 1.94699E+02 1.21756E+01 1.48499E+03 1.52521E+03 1.56543E+03 -5.58225E+02 -9.54077E+02 -1.34993E+03 3.66973E+02 1.86278E+02 5.58316E+00 1.29217E+03 1.32663E+03 1.36110E+03 - 8.47500E+00 -7.32703E+02 -1.23743E+03 -1.74216E+03 4.68788E+02 2.38730E+02 8.67094E+00 1.67028E+03 1.71489E+03 1.75950E+03 -7.32703E+02 -1.13931E+03 -1.54592E+03 3.78480E+02 1.95347E+02 1.22137E+01 1.48966E+03 1.53000E+03 1.57035E+03 -5.60379E+02 -9.57575E+02 -1.35477E+03 3.68230E+02 1.86926E+02 5.62128E+00 1.29684E+03 1.33143E+03 1.36601E+03 - 8.50000E+00 -7.34857E+02 -1.24093E+03 -1.74700E+03 4.70045E+02 2.39377E+02 8.70905E+00 1.67495E+03 1.71968E+03 1.76442E+03 -7.34857E+02 -1.14281E+03 -1.55076E+03 3.79737E+02 1.95994E+02 1.22518E+01 1.49433E+03 1.53480E+03 1.57526E+03 -5.62533E+02 -9.61073E+02 -1.35961E+03 3.69487E+02 1.87573E+02 5.65939E+00 1.30151E+03 1.33622E+03 1.37093E+03 - 8.52500E+00 -7.37011E+02 -1.24443E+03 -1.75184E+03 4.71302E+02 2.40025E+02 8.74716E+00 1.67962E+03 1.72448E+03 1.76934E+03 -7.37011E+02 -1.14631E+03 -1.55560E+03 3.80994E+02 1.96642E+02 1.22899E+01 1.49900E+03 1.53959E+03 1.58018E+03 -5.64687E+02 -9.64572E+02 -1.36446E+03 3.70744E+02 1.88221E+02 5.69751E+00 1.30618E+03 1.34101E+03 1.37585E+03 - 8.55000E+00 -7.39165E+02 -1.24793E+03 -1.75669E+03 4.72559E+02 2.40672E+02 8.78528E+00 1.68428E+03 1.72927E+03 1.77426E+03 -7.39165E+02 -1.14981E+03 -1.56045E+03 3.82251E+02 1.97289E+02 1.23280E+01 1.50367E+03 1.54438E+03 1.58510E+03 -5.66841E+02 -9.68070E+02 -1.36930E+03 3.72001E+02 1.88868E+02 5.73563E+00 1.31084E+03 1.34581E+03 1.38077E+03 - 8.57500E+00 -7.41319E+02 -1.25142E+03 -1.76153E+03 4.73816E+02 2.41320E+02 8.82342E+00 1.68895E+03 1.73406E+03 1.77918E+03 -7.41319E+02 -1.15330E+03 -1.56529E+03 3.83508E+02 1.97937E+02 1.23662E+01 1.50833E+03 1.54918E+03 1.59002E+03 -5.68995E+02 -9.71568E+02 -1.37414E+03 3.73258E+02 1.89516E+02 5.77376E+00 1.31551E+03 1.35060E+03 1.38569E+03 - 8.60000E+00 -7.43473E+02 -1.25492E+03 -1.76637E+03 4.75073E+02 2.41967E+02 8.86154E+00 1.69362E+03 1.73886E+03 1.78409E+03 -7.43473E+02 -1.15680E+03 -1.57013E+03 3.84765E+02 1.98585E+02 1.24043E+01 1.51300E+03 1.55397E+03 1.59494E+03 -5.71149E+02 -9.75066E+02 -1.37898E+03 3.74515E+02 1.90164E+02 5.81188E+00 1.32018E+03 1.35539E+03 1.39061E+03 - 8.62500E+00 -7.45627E+02 -1.25842E+03 -1.77121E+03 4.76330E+02 2.42615E+02 8.89965E+00 1.69829E+03 1.74365E+03 1.78901E+03 -7.45627E+02 -1.16030E+03 -1.57497E+03 3.86022E+02 1.99232E+02 1.24424E+01 1.51767E+03 1.55876E+03 1.59986E+03 -5.73303E+02 -9.78564E+02 -1.38383E+03 3.75772E+02 1.90811E+02 5.85000E+00 1.32485E+03 1.36019E+03 1.39553E+03 - 8.65000E+00 -7.47781E+02 -1.26192E+03 -1.77606E+03 4.77587E+02 2.43262E+02 8.93776E+00 1.70296E+03 1.74844E+03 1.79393E+03 -7.47781E+02 -1.16380E+03 -1.57981E+03 3.87279E+02 1.99880E+02 1.24805E+01 1.52234E+03 1.56356E+03 1.60478E+03 -5.75457E+02 -9.82063E+02 -1.38867E+03 3.77029E+02 1.91459E+02 5.88811E+00 1.32952E+03 1.36498E+03 1.40044E+03 - 8.67500E+00 -7.49935E+02 -1.26542E+03 -1.78090E+03 4.78844E+02 2.43910E+02 8.97589E+00 1.70762E+03 1.75324E+03 1.79885E+03 -7.49935E+02 -1.16730E+03 -1.58466E+03 3.88536E+02 2.00527E+02 1.25186E+01 1.52701E+03 1.56835E+03 1.60969E+03 -5.77612E+02 -9.85561E+02 -1.39351E+03 3.78286E+02 1.92106E+02 5.92623E+00 1.33418E+03 1.36977E+03 1.40536E+03 - 8.70000E+00 -7.52089E+02 -1.26892E+03 -1.78574E+03 4.80101E+02 2.44558E+02 9.01402E+00 1.71229E+03 1.75803E+03 1.80377E+03 -7.52089E+02 -1.17079E+03 -1.58950E+03 3.89793E+02 2.01175E+02 1.25568E+01 1.53167E+03 1.57314E+03 1.61461E+03 -5.79766E+02 -9.89059E+02 -1.39835E+03 3.79543E+02 1.92754E+02 5.96437E+00 1.33885E+03 1.37457E+03 1.41028E+03 - 8.72500E+00 -7.54244E+02 -1.27241E+03 -1.79058E+03 4.81358E+02 2.45205E+02 9.05215E+00 1.71696E+03 1.76282E+03 1.80869E+03 -7.54244E+02 -1.17429E+03 -1.59434E+03 3.91050E+02 2.01822E+02 1.25949E+01 1.53634E+03 1.57794E+03 1.61953E+03 -5.81920E+02 -9.92557E+02 -1.40319E+03 3.80800E+02 1.93401E+02 6.00248E+00 1.34352E+03 1.37936E+03 1.41520E+03 - 8.75000E+00 -7.56398E+02 -1.27591E+03 -1.79543E+03 4.82615E+02 2.45853E+02 9.09026E+00 1.72163E+03 1.76762E+03 1.81361E+03 -7.56398E+02 -1.17779E+03 -1.59918E+03 3.92307E+02 2.02470E+02 1.26330E+01 1.54101E+03 1.58273E+03 1.62445E+03 -5.84074E+02 -9.96055E+02 -1.40804E+03 3.82057E+02 1.94049E+02 6.04060E+00 1.34819E+03 1.38415E+03 1.42012E+03 - 8.77500E+00 -7.58552E+02 -1.27941E+03 -1.80027E+03 4.83872E+02 2.46500E+02 9.12837E+00 1.72630E+03 1.77241E+03 1.81852E+03 -7.58552E+02 -1.18129E+03 -1.60403E+03 3.93564E+02 2.03117E+02 1.26711E+01 1.54568E+03 1.58752E+03 1.62937E+03 -5.86228E+02 -9.99554E+02 -1.41288E+03 3.83314E+02 1.94696E+02 6.07872E+00 1.35286E+03 1.38895E+03 1.42504E+03 - 8.80000E+00 -7.60706E+02 -1.28291E+03 -1.80511E+03 4.85129E+02 2.47148E+02 9.16649E+00 1.73096E+03 1.77720E+03 1.82344E+03 -7.60706E+02 -1.18479E+03 -1.60887E+03 3.94821E+02 2.03765E+02 1.27092E+01 1.55035E+03 1.59232E+03 1.63429E+03 -5.88382E+02 -1.00305E+03 -1.41772E+03 3.84571E+02 1.95344E+02 6.11683E+00 1.35752E+03 1.39374E+03 1.42996E+03 - 8.82500E+00 -7.62860E+02 -1.28641E+03 -1.80995E+03 4.86386E+02 2.47795E+02 9.20463E+00 1.73563E+03 1.78200E+03 1.82836E+03 -7.62860E+02 -1.18829E+03 -1.61371E+03 3.96078E+02 2.04412E+02 1.27474E+01 1.55501E+03 1.59711E+03 1.63921E+03 -5.90536E+02 -1.00655E+03 -1.42256E+03 3.85828E+02 1.95991E+02 6.15497E+00 1.36219E+03 1.39853E+03 1.43487E+03 - 8.85000E+00 -7.65014E+02 -1.28990E+03 -1.81479E+03 4.87643E+02 2.48443E+02 9.24275E+00 1.74030E+03 1.78679E+03 1.83328E+03 -7.65014E+02 -1.19178E+03 -1.61855E+03 3.97335E+02 2.05060E+02 1.27855E+01 1.55968E+03 1.60190E+03 1.64412E+03 -5.92690E+02 -1.01005E+03 -1.42741E+03 3.87085E+02 1.96639E+02 6.19309E+00 1.36686E+03 1.40333E+03 1.43979E+03 - 8.87500E+00 -7.67168E+02 -1.29340E+03 -1.81964E+03 4.88900E+02 2.49090E+02 9.28086E+00 1.74497E+03 1.79158E+03 1.83820E+03 -7.67168E+02 -1.19528E+03 -1.62340E+03 3.98592E+02 2.05708E+02 1.28236E+01 1.56435E+03 1.60670E+03 1.64904E+03 -5.94844E+02 -1.01355E+03 -1.43225E+03 3.88342E+02 1.97287E+02 6.23120E+00 1.37153E+03 1.40812E+03 1.44471E+03 - 8.90000E+00 -7.69322E+02 -1.29690E+03 -1.82448E+03 4.90157E+02 2.49738E+02 9.31897E+00 1.74964E+03 1.79638E+03 1.84312E+03 -7.69322E+02 -1.19878E+03 -1.62824E+03 3.99848E+02 2.06355E+02 1.28617E+01 1.56902E+03 1.61149E+03 1.65396E+03 -5.96998E+02 -1.01704E+03 -1.43709E+03 3.89599E+02 1.97934E+02 6.26932E+00 1.37620E+03 1.41291E+03 1.44963E+03 - 8.92500E+00 -7.71476E+02 -1.30040E+03 -1.82932E+03 4.91414E+02 2.50386E+02 9.35709E+00 1.75430E+03 1.80117E+03 1.84804E+03 -7.71476E+02 -1.20228E+03 -1.63308E+03 4.01105E+02 2.07003E+02 1.28998E+01 1.57369E+03 1.61628E+03 1.65888E+03 -5.99152E+02 -1.02054E+03 -1.44193E+03 3.90856E+02 1.98582E+02 6.30744E+00 1.38086E+03 1.41771E+03 1.45455E+03 - 8.95000E+00 -7.73630E+02 -1.30390E+03 -1.83416E+03 4.92671E+02 2.51033E+02 9.39523E+00 1.75897E+03 1.80596E+03 1.85295E+03 -7.73630E+02 -1.20578E+03 -1.63792E+03 4.02362E+02 2.07650E+02 1.29380E+01 1.57835E+03 1.62108E+03 1.66380E+03 -6.01306E+02 -1.02404E+03 -1.44678E+03 3.92113E+02 1.99229E+02 6.34557E+00 1.38553E+03 1.42250E+03 1.45947E+03 - 8.97500E+00 -7.75784E+02 -1.30740E+03 -1.83901E+03 4.93928E+02 2.51681E+02 9.43335E+00 1.76364E+03 1.81076E+03 1.85787E+03 -7.75784E+02 -1.20927E+03 -1.64277E+03 4.03619E+02 2.08298E+02 1.29761E+01 1.58302E+03 1.62587E+03 1.66872E+03 -6.03460E+02 -1.02754E+03 -1.45162E+03 3.93370E+02 1.99877E+02 6.38369E+00 1.39020E+03 1.42729E+03 1.46439E+03 - 9.00000E+00 -8.64100E+02 -1.35270E+03 -1.84130E+03 4.55155E+02 2.34847E+02 1.45390E+01 1.77441E+03 1.82240E+03 1.87038E+03 -6.91776E+02 -1.17097E+03 -1.65015E+03 4.44906E+02 2.26426E+02 7.94663E+00 1.58159E+03 1.62382E+03 1.66605E+03 -6.91776E+02 -1.07284E+03 -1.45391E+03 3.54597E+02 1.83043E+02 1.14894E+01 1.40097E+03 1.43893E+03 1.47689E+03 - 9.02500E+00 -8.66254E+02 -1.35620E+03 -1.84614E+03 4.56412E+02 2.35495E+02 1.45771E+01 1.77908E+03 1.82719E+03 1.87530E+03 -6.93930E+02 -1.17446E+03 -1.65500E+03 4.46163E+02 2.27074E+02 7.98474E+00 1.58626E+03 1.62861E+03 1.67097E+03 -6.93930E+02 -1.07634E+03 -1.45876E+03 3.55854E+02 1.83691E+02 1.15275E+01 1.40564E+03 1.44372E+03 1.48181E+03 - 9.05000E+00 -8.68408E+02 -1.35970E+03 -1.85099E+03 4.57669E+02 2.36142E+02 1.46153E+01 1.78375E+03 1.83198E+03 1.88022E+03 -6.96084E+02 -1.17796E+03 -1.65984E+03 4.47420E+02 2.27721E+02 8.02287E+00 1.59092E+03 1.63340E+03 1.67589E+03 -6.96084E+02 -1.07984E+03 -1.46360E+03 3.57111E+02 1.84338E+02 1.15656E+01 1.41031E+03 1.44852E+03 1.48673E+03 - 9.07500E+00 -8.70562E+02 -1.36320E+03 -1.85583E+03 4.58926E+02 2.36790E+02 1.46534E+01 1.78841E+03 1.83678E+03 1.88514E+03 -6.98238E+02 -1.18146E+03 -1.66468E+03 4.48677E+02 2.28369E+02 8.06101E+00 1.59559E+03 1.63820E+03 1.68080E+03 -6.98238E+02 -1.08334E+03 -1.46844E+03 3.58368E+02 1.84986E+02 1.16038E+01 1.41497E+03 1.45331E+03 1.49165E+03 - 9.10000E+00 -8.72716E+02 -1.36669E+03 -1.86067E+03 4.60183E+02 2.37437E+02 1.46915E+01 1.79308E+03 1.84157E+03 1.89005E+03 -7.00392E+02 -1.18496E+03 -1.66952E+03 4.49934E+02 2.29016E+02 8.09913E+00 1.60026E+03 1.64299E+03 1.68572E+03 -7.00392E+02 -1.08684E+03 -1.47328E+03 3.59625E+02 1.85634E+02 1.16419E+01 1.41964E+03 1.45810E+03 1.49657E+03 - 9.12500E+00 -8.74870E+02 -1.37019E+03 -1.86551E+03 4.61440E+02 2.38085E+02 1.47296E+01 1.79775E+03 1.84636E+03 1.89497E+03 -7.02546E+02 -1.18846E+03 -1.67437E+03 4.51191E+02 2.29664E+02 8.13724E+00 1.60493E+03 1.64778E+03 1.69064E+03 -7.02546E+02 -1.09034E+03 -1.47813E+03 3.60882E+02 1.86281E+02 1.16800E+01 1.42431E+03 1.46290E+03 1.50149E+03 - 9.15000E+00 -8.77024E+02 -1.37369E+03 -1.87036E+03 4.62697E+02 2.38733E+02 1.47677E+01 1.80242E+03 1.85116E+03 1.89989E+03 -7.04700E+02 -1.19195E+03 -1.67921E+03 4.52448E+02 2.30311E+02 8.17535E+00 1.60960E+03 1.65258E+03 1.69556E+03 -7.04700E+02 -1.09383E+03 -1.48297E+03 3.62139E+02 1.86929E+02 1.17181E+01 1.42898E+03 1.46769E+03 1.50640E+03 - 9.17500E+00 -8.79178E+02 -1.37719E+03 -1.87520E+03 4.63954E+02 2.39380E+02 1.48059E+01 1.80709E+03 1.85595E+03 1.90481E+03 -7.06854E+02 -1.19545E+03 -1.68405E+03 4.53705E+02 2.30959E+02 8.21347E+00 1.61426E+03 1.65737E+03 1.70048E+03 -7.06854E+02 -1.09733E+03 -1.48781E+03 3.63396E+02 1.87576E+02 1.17562E+01 1.43365E+03 1.47248E+03 1.51132E+03 - 9.20000E+00 -8.81332E+02 -1.38069E+03 -1.88004E+03 4.65211E+02 2.40028E+02 1.48440E+01 1.81175E+03 1.86074E+03 1.90973E+03 -7.09008E+02 -1.19895E+03 -1.68889E+03 4.54962E+02 2.31607E+02 8.25161E+00 1.61893E+03 1.66216E+03 1.70540E+03 -7.09008E+02 -1.10083E+03 -1.49265E+03 3.64653E+02 1.88224E+02 1.17944E+01 1.43831E+03 1.47728E+03 1.51624E+03 - 9.22500E+00 -8.83486E+02 -1.38418E+03 -1.88488E+03 4.66468E+02 2.40675E+02 1.48821E+01 1.81642E+03 1.86554E+03 1.91465E+03 -7.11163E+02 -1.20245E+03 -1.69374E+03 4.56219E+02 2.32254E+02 8.28973E+00 1.62360E+03 1.66696E+03 1.71032E+03 -7.11163E+02 -1.10433E+03 -1.49749E+03 3.65910E+02 1.88871E+02 1.18325E+01 1.44298E+03 1.48207E+03 1.52116E+03 - 9.25000E+00 -8.85640E+02 -1.38768E+03 -1.88973E+03 4.67725E+02 2.41323E+02 1.49202E+01 1.82109E+03 1.87033E+03 1.91957E+03 -7.13317E+02 -1.20595E+03 -1.69858E+03 4.57476E+02 2.32902E+02 8.32784E+00 1.62827E+03 1.67175E+03 1.71523E+03 -7.13317E+02 -1.10783E+03 -1.50234E+03 3.67167E+02 1.89519E+02 1.18706E+01 1.44765E+03 1.48686E+03 1.52608E+03 - 9.27500E+00 -8.87794E+02 -1.39118E+03 -1.89457E+03 4.68982E+02 2.41970E+02 1.49584E+01 1.82576E+03 1.87512E+03 1.92448E+03 -7.15471E+02 -1.20945E+03 -1.70342E+03 4.58733E+02 2.33549E+02 8.36595E+00 1.63294E+03 1.67654E+03 1.72015E+03 -7.15471E+02 -1.11132E+03 -1.50718E+03 3.68424E+02 1.90166E+02 1.19087E+01 1.45232E+03 1.49166E+03 1.53100E+03 - 9.30000E+00 -8.89949E+02 -1.39468E+03 -1.89941E+03 4.70239E+02 2.42618E+02 1.49965E+01 1.83043E+03 1.87992E+03 1.92940E+03 -7.17625E+02 -1.21294E+03 -1.70826E+03 4.59990E+02 2.34197E+02 8.40407E+00 1.63760E+03 1.68134E+03 1.72507E+03 -7.17625E+02 -1.11482E+03 -1.51202E+03 3.69681E+02 1.90814E+02 1.19468E+01 1.45699E+03 1.49645E+03 1.53592E+03 - 9.32500E+00 -8.92103E+02 -1.39818E+03 -1.90425E+03 4.71496E+02 2.43265E+02 1.50346E+01 1.83509E+03 1.88471E+03 1.93432E+03 -7.19779E+02 -1.21644E+03 -1.71311E+03 4.61246E+02 2.34844E+02 8.44221E+00 1.64227E+03 1.68613E+03 1.72999E+03 -7.19779E+02 -1.11832E+03 -1.51686E+03 3.70938E+02 1.91462E+02 1.19850E+01 1.46165E+03 1.50124E+03 1.54083E+03 - 9.35000E+00 -8.94257E+02 -1.40168E+03 -1.90909E+03 4.72753E+02 2.43913E+02 1.50727E+01 1.83976E+03 1.88950E+03 1.93924E+03 -7.21933E+02 -1.21994E+03 -1.71795E+03 4.62504E+02 2.35492E+02 8.48034E+00 1.64694E+03 1.69092E+03 1.73491E+03 -7.21933E+02 -1.12182E+03 -1.52171E+03 3.72195E+02 1.92109E+02 1.20231E+01 1.46632E+03 1.50604E+03 1.54575E+03 - 9.37500E+00 -8.96411E+02 -1.40517E+03 -1.91394E+03 4.74010E+02 2.44560E+02 1.51108E+01 1.84443E+03 1.89429E+03 1.94416E+03 -7.24087E+02 -1.22344E+03 -1.72279E+03 4.63760E+02 2.36139E+02 8.51845E+00 1.65161E+03 1.69572E+03 1.73983E+03 -7.24087E+02 -1.12532E+03 -1.52655E+03 3.73452E+02 1.92757E+02 1.20612E+01 1.47099E+03 1.51083E+03 1.55067E+03 - 9.40000E+00 -8.98565E+02 -1.40867E+03 -1.91878E+03 4.75267E+02 2.45208E+02 1.51490E+01 1.84910E+03 1.89909E+03 1.94908E+03 -7.26241E+02 -1.22694E+03 -1.72763E+03 4.65017E+02 2.36787E+02 8.55655E+00 1.65628E+03 1.70051E+03 1.74475E+03 -7.26241E+02 -1.12882E+03 -1.53139E+03 3.74709E+02 1.93404E+02 1.20993E+01 1.47566E+03 1.51562E+03 1.55559E+03 - 9.42500E+00 -9.00719E+02 -1.41217E+03 -1.92362E+03 4.76524E+02 2.45856E+02 1.51871E+01 1.85377E+03 1.90388E+03 1.95400E+03 -7.28395E+02 -1.23043E+03 -1.73247E+03 4.66274E+02 2.37435E+02 8.59468E+00 1.66094E+03 1.70530E+03 1.74966E+03 -7.28395E+02 -1.13231E+03 -1.53623E+03 3.75966E+02 1.94052E+02 1.21374E+01 1.48033E+03 1.52042E+03 1.56051E+03 - 9.45000E+00 -9.02873E+02 -1.41567E+03 -1.92846E+03 4.77781E+02 2.46503E+02 1.52252E+01 1.85843E+03 1.90867E+03 1.95891E+03 -7.30549E+02 -1.23393E+03 -1.73732E+03 4.67531E+02 2.38082E+02 8.63282E+00 1.66561E+03 1.71010E+03 1.75458E+03 -7.30549E+02 -1.13581E+03 -1.54108E+03 3.77223E+02 1.94699E+02 1.21756E+01 1.48499E+03 1.52521E+03 1.56543E+03 - 9.47500E+00 -9.05027E+02 -1.41917E+03 -1.93331E+03 4.79038E+02 2.47151E+02 1.52633E+01 1.86310E+03 1.91347E+03 1.96383E+03 -7.32703E+02 -1.23743E+03 -1.74216E+03 4.68788E+02 2.38730E+02 8.67094E+00 1.67028E+03 1.71489E+03 1.75950E+03 -7.32703E+02 -1.13931E+03 -1.54592E+03 3.78480E+02 1.95347E+02 1.22137E+01 1.48966E+03 1.53000E+03 1.57035E+03 - 9.50000E+00 -9.07181E+02 -1.42266E+03 -1.93815E+03 4.80295E+02 2.47798E+02 1.53015E+01 1.86777E+03 1.91826E+03 1.96875E+03 -7.34857E+02 -1.24093E+03 -1.74700E+03 4.70045E+02 2.39377E+02 8.70905E+00 1.67495E+03 1.71968E+03 1.76442E+03 -7.34857E+02 -1.14281E+03 -1.55076E+03 3.79737E+02 1.95994E+02 1.22518E+01 1.49433E+03 1.53480E+03 1.57526E+03 - 9.52500E+00 -9.09335E+02 -1.42616E+03 -1.94299E+03 4.81552E+02 2.48446E+02 1.53396E+01 1.87244E+03 1.92305E+03 1.97367E+03 -7.37011E+02 -1.24443E+03 -1.75184E+03 4.71302E+02 2.40025E+02 8.74716E+00 1.67962E+03 1.72448E+03 1.76934E+03 -7.37011E+02 -1.14631E+03 -1.55560E+03 3.80994E+02 1.96642E+02 1.22899E+01 1.49900E+03 1.53959E+03 1.58018E+03 - 9.55000E+00 -9.11489E+02 -1.42966E+03 -1.94783E+03 4.82809E+02 2.49093E+02 1.53777E+01 1.87711E+03 1.92785E+03 1.97859E+03 -7.39165E+02 -1.24793E+03 -1.75669E+03 4.72559E+02 2.40672E+02 8.78528E+00 1.68428E+03 1.72927E+03 1.77426E+03 -7.39165E+02 -1.14981E+03 -1.56045E+03 3.82251E+02 1.97289E+02 1.23280E+01 1.50367E+03 1.54438E+03 1.58510E+03 - 9.57500E+00 -9.13643E+02 -1.43316E+03 -1.95268E+03 4.84066E+02 2.49741E+02 1.54158E+01 1.88177E+03 1.93264E+03 1.98351E+03 -7.41319E+02 -1.25142E+03 -1.76153E+03 4.73816E+02 2.41320E+02 8.82342E+00 1.68895E+03 1.73406E+03 1.77918E+03 -7.41319E+02 -1.15330E+03 -1.56529E+03 3.83508E+02 1.97937E+02 1.23662E+01 1.50833E+03 1.54918E+03 1.59002E+03 - 9.60000E+00 -9.15797E+02 -1.43666E+03 -1.95752E+03 4.85323E+02 2.50388E+02 1.54539E+01 1.88644E+03 1.93743E+03 1.98843E+03 -7.43473E+02 -1.25492E+03 -1.76637E+03 4.75073E+02 2.41967E+02 8.86154E+00 1.69362E+03 1.73886E+03 1.78409E+03 -7.43473E+02 -1.15680E+03 -1.57013E+03 3.84765E+02 1.98585E+02 1.24043E+01 1.51300E+03 1.55397E+03 1.59494E+03 - 9.62500E+00 -9.17951E+02 -1.44016E+03 -1.96236E+03 4.86580E+02 2.51036E+02 1.54921E+01 1.89111E+03 1.94223E+03 1.99334E+03 -7.45627E+02 -1.25842E+03 -1.77121E+03 4.76330E+02 2.42615E+02 8.89965E+00 1.69829E+03 1.74365E+03 1.78901E+03 -7.45627E+02 -1.16030E+03 -1.57497E+03 3.86022E+02 1.99232E+02 1.24424E+01 1.51767E+03 1.55876E+03 1.59986E+03 - 9.65000E+00 -9.20105E+02 -1.44365E+03 -1.96720E+03 4.87837E+02 2.51683E+02 1.55302E+01 1.89578E+03 1.94702E+03 1.99826E+03 -7.47781E+02 -1.26192E+03 -1.77606E+03 4.77587E+02 2.43262E+02 8.93776E+00 1.70296E+03 1.74844E+03 1.79393E+03 -7.47781E+02 -1.16380E+03 -1.57981E+03 3.87279E+02 1.99880E+02 1.24805E+01 1.52234E+03 1.56356E+03 1.60478E+03 - 9.67500E+00 -9.22259E+02 -1.44715E+03 -1.97205E+03 4.89094E+02 2.52331E+02 1.55683E+01 1.90045E+03 1.95181E+03 2.00318E+03 -7.49935E+02 -1.26542E+03 -1.78090E+03 4.78844E+02 2.43910E+02 8.97589E+00 1.70762E+03 1.75324E+03 1.79885E+03 -7.49935E+02 -1.16730E+03 -1.58466E+03 3.88536E+02 2.00527E+02 1.25186E+01 1.52701E+03 1.56835E+03 1.60969E+03 - 9.70000E+00 -9.24413E+02 -1.45065E+03 -1.97689E+03 4.90351E+02 2.52979E+02 1.56064E+01 1.90511E+03 1.95661E+03 2.00810E+03 -7.52089E+02 -1.26892E+03 -1.78574E+03 4.80101E+02 2.44558E+02 9.01402E+00 1.71229E+03 1.75803E+03 1.80377E+03 -7.52089E+02 -1.17079E+03 -1.58950E+03 3.89793E+02 2.01175E+02 1.25568E+01 1.53167E+03 1.57314E+03 1.61461E+03 - 9.72500E+00 -9.26567E+02 -1.45415E+03 -1.98173E+03 4.91608E+02 2.53626E+02 1.56445E+01 1.90978E+03 1.96140E+03 2.01302E+03 -7.54244E+02 -1.27241E+03 -1.79058E+03 4.81358E+02 2.45205E+02 9.05215E+00 1.71696E+03 1.76282E+03 1.80869E+03 -7.54244E+02 -1.17429E+03 -1.59434E+03 3.91050E+02 2.01822E+02 1.25949E+01 1.53634E+03 1.57794E+03 1.61953E+03 - 9.75000E+00 -9.28721E+02 -1.45765E+03 -1.98657E+03 4.92865E+02 2.54274E+02 1.56827E+01 1.91445E+03 1.96619E+03 2.01794E+03 -7.56398E+02 -1.27591E+03 -1.79543E+03 4.82615E+02 2.45853E+02 9.09026E+00 1.72163E+03 1.76762E+03 1.81361E+03 -7.56398E+02 -1.17779E+03 -1.59918E+03 3.92307E+02 2.02470E+02 1.26330E+01 1.54101E+03 1.58273E+03 1.62445E+03 - 9.77500E+00 -9.30875E+02 -1.46115E+03 -1.99141E+03 4.94122E+02 2.54921E+02 1.57208E+01 1.91912E+03 1.97099E+03 2.02286E+03 -7.58552E+02 -1.27941E+03 -1.80027E+03 4.83872E+02 2.46500E+02 9.12837E+00 1.72630E+03 1.77241E+03 1.81852E+03 -7.58552E+02 -1.18129E+03 -1.60403E+03 3.93564E+02 2.03117E+02 1.26711E+01 1.54568E+03 1.58752E+03 1.62937E+03 - 9.80000E+00 -9.33029E+02 -1.46464E+03 -1.99626E+03 4.95379E+02 2.55569E+02 1.57589E+01 1.92379E+03 1.97578E+03 2.02778E+03 -7.60706E+02 -1.28291E+03 -1.80511E+03 4.85129E+02 2.47148E+02 9.16649E+00 1.73096E+03 1.77720E+03 1.82344E+03 -7.60706E+02 -1.18479E+03 -1.60887E+03 3.94821E+02 2.03765E+02 1.27092E+01 1.55035E+03 1.59232E+03 1.63429E+03 - 9.82500E+00 -9.35184E+02 -1.46814E+03 -2.00110E+03 4.96636E+02 2.56216E+02 1.57970E+01 1.92845E+03 1.98057E+03 2.03269E+03 -7.62860E+02 -1.28641E+03 -1.80995E+03 4.86386E+02 2.47795E+02 9.20463E+00 1.73563E+03 1.78200E+03 1.82836E+03 -7.62860E+02 -1.18829E+03 -1.61371E+03 3.96078E+02 2.04412E+02 1.27474E+01 1.55501E+03 1.59711E+03 1.63921E+03 - 9.85000E+00 -9.37338E+02 -1.47164E+03 -2.00594E+03 4.97893E+02 2.56864E+02 1.58351E+01 1.93312E+03 1.98537E+03 2.03761E+03 -7.65014E+02 -1.28990E+03 -1.81479E+03 4.87643E+02 2.48443E+02 9.24275E+00 1.74030E+03 1.78679E+03 1.83328E+03 -7.65014E+02 -1.19178E+03 -1.61855E+03 3.97335E+02 2.05060E+02 1.27855E+01 1.55968E+03 1.60190E+03 1.64412E+03 - 9.87500E+00 -9.39492E+02 -1.47514E+03 -2.01078E+03 4.99150E+02 2.57511E+02 1.58733E+01 1.93779E+03 1.99016E+03 2.04253E+03 -7.67168E+02 -1.29340E+03 -1.81964E+03 4.88900E+02 2.49090E+02 9.28086E+00 1.74497E+03 1.79158E+03 1.83820E+03 -7.67168E+02 -1.19528E+03 -1.62340E+03 3.98592E+02 2.05708E+02 1.28236E+01 1.56435E+03 1.60670E+03 1.64904E+03 - 9.90000E+00 -9.41646E+02 -1.47864E+03 -2.01563E+03 5.00407E+02 2.58159E+02 1.59114E+01 1.94246E+03 1.99495E+03 2.04745E+03 -7.69322E+02 -1.29690E+03 -1.82448E+03 4.90157E+02 2.49738E+02 9.31897E+00 1.74964E+03 1.79638E+03 1.84312E+03 -7.69322E+02 -1.19878E+03 -1.62824E+03 3.99848E+02 2.06355E+02 1.28617E+01 1.56902E+03 1.61149E+03 1.65396E+03 - 9.92500E+00 -9.43800E+02 -1.48213E+03 -2.02047E+03 5.01664E+02 2.58807E+02 1.59495E+01 1.94713E+03 1.99975E+03 2.05237E+03 -7.71476E+02 -1.30040E+03 -1.82932E+03 4.91414E+02 2.50386E+02 9.35709E+00 1.75430E+03 1.80117E+03 1.84804E+03 -7.71476E+02 -1.20228E+03 -1.63308E+03 4.01105E+02 2.07003E+02 1.28998E+01 1.57369E+03 1.61628E+03 1.65888E+03 - 9.95000E+00 -9.45954E+02 -1.48563E+03 -2.02531E+03 5.02921E+02 2.59454E+02 1.59876E+01 1.95179E+03 2.00454E+03 2.05729E+03 -7.73630E+02 -1.30390E+03 -1.83416E+03 4.92671E+02 2.51033E+02 9.39523E+00 1.75897E+03 1.80596E+03 1.85295E+03 -7.73630E+02 -1.20578E+03 -1.63792E+03 4.02362E+02 2.07650E+02 1.29380E+01 1.57835E+03 1.62108E+03 1.66380E+03 - 9.97500E+00 -9.48108E+02 -1.48913E+03 -2.03015E+03 5.04177E+02 2.60102E+02 1.60257E+01 1.95646E+03 2.00933E+03 2.06221E+03 -7.75784E+02 -1.30740E+03 -1.83901E+03 4.93928E+02 2.51681E+02 9.43335E+00 1.76364E+03 1.81076E+03 1.85787E+03 -7.75784E+02 -1.20927E+03 -1.64277E+03 4.03619E+02 2.08298E+02 1.29761E+01 1.58302E+03 1.62587E+03 1.66872E+03 - 1.00000E+01 -8.64100E+02 -1.45082E+03 -2.03754E+03 5.45464E+02 2.78230E+02 1.09963E+01 1.95503E+03 2.00728E+03 2.05954E+03 -8.64100E+02 -1.35270E+03 -1.84130E+03 4.55155E+02 2.34847E+02 1.45390E+01 1.77441E+03 1.82240E+03 1.87038E+03 -6.91776E+02 -1.17097E+03 -1.65015E+03 4.44906E+02 2.26426E+02 7.94663E+00 1.58159E+03 1.62382E+03 1.66605E+03 - 1.00250E+01 -8.66254E+02 -1.45432E+03 -2.04239E+03 5.46721E+02 2.78878E+02 1.10344E+01 1.95970E+03 2.01207E+03 2.06445E+03 -8.66254E+02 -1.35620E+03 -1.84614E+03 4.56412E+02 2.35495E+02 1.45771E+01 1.77908E+03 1.82719E+03 1.87530E+03 -6.93930E+02 -1.17446E+03 -1.65500E+03 4.46163E+02 2.27074E+02 7.98474E+00 1.58626E+03 1.62861E+03 1.67097E+03 - 1.00500E+01 -8.68408E+02 -1.45782E+03 -2.04723E+03 5.47978E+02 2.79525E+02 1.10725E+01 1.96436E+03 2.01687E+03 2.06937E+03 -8.68408E+02 -1.35970E+03 -1.85099E+03 4.57669E+02 2.36142E+02 1.46153E+01 1.78375E+03 1.83198E+03 1.88022E+03 -6.96084E+02 -1.17796E+03 -1.65984E+03 4.47420E+02 2.27721E+02 8.02287E+00 1.59092E+03 1.63340E+03 1.67589E+03 - 1.00750E+01 -8.70562E+02 -1.46132E+03 -2.05207E+03 5.49235E+02 2.80173E+02 1.11107E+01 1.96903E+03 2.02166E+03 2.07429E+03 -8.70562E+02 -1.36320E+03 -1.85583E+03 4.58926E+02 2.36790E+02 1.46534E+01 1.78841E+03 1.83678E+03 1.88514E+03 -6.98238E+02 -1.18146E+03 -1.66468E+03 4.48677E+02 2.28369E+02 8.06101E+00 1.59559E+03 1.63820E+03 1.68080E+03 - 1.01000E+01 -8.72716E+02 -1.46481E+03 -2.05691E+03 5.50492E+02 2.80820E+02 1.11488E+01 1.97370E+03 2.02645E+03 2.07921E+03 -8.72716E+02 -1.36669E+03 -1.86067E+03 4.60183E+02 2.37437E+02 1.46915E+01 1.79308E+03 1.84157E+03 1.89005E+03 -7.00392E+02 -1.18496E+03 -1.66952E+03 4.49934E+02 2.29016E+02 8.09913E+00 1.60026E+03 1.64299E+03 1.68572E+03 - 1.01250E+01 -8.74870E+02 -1.46831E+03 -2.06176E+03 5.51749E+02 2.81468E+02 1.11869E+01 1.97837E+03 2.03125E+03 2.08413E+03 -8.74870E+02 -1.37019E+03 -1.86551E+03 4.61440E+02 2.38085E+02 1.47296E+01 1.79775E+03 1.84636E+03 1.89497E+03 -7.02546E+02 -1.18846E+03 -1.67437E+03 4.51191E+02 2.29664E+02 8.13724E+00 1.60493E+03 1.64778E+03 1.69064E+03 - 1.01500E+01 -8.77024E+02 -1.47181E+03 -2.06660E+03 5.53006E+02 2.82115E+02 1.12250E+01 1.98304E+03 2.03604E+03 2.08905E+03 -8.77024E+02 -1.37369E+03 -1.87036E+03 4.62697E+02 2.38733E+02 1.47677E+01 1.80242E+03 1.85116E+03 1.89989E+03 -7.04700E+02 -1.19195E+03 -1.67921E+03 4.52448E+02 2.30311E+02 8.17535E+00 1.60960E+03 1.65258E+03 1.69556E+03 - 1.01750E+01 -8.79178E+02 -1.47531E+03 -2.07144E+03 5.54263E+02 2.82763E+02 1.12631E+01 1.98770E+03 2.04083E+03 2.09397E+03 -8.79178E+02 -1.37719E+03 -1.87520E+03 4.63954E+02 2.39380E+02 1.48059E+01 1.80709E+03 1.85595E+03 1.90481E+03 -7.06854E+02 -1.19545E+03 -1.68405E+03 4.53705E+02 2.30959E+02 8.21347E+00 1.61426E+03 1.65737E+03 1.70048E+03 - 1.02000E+01 -8.81332E+02 -1.47881E+03 -2.07628E+03 5.55520E+02 2.83410E+02 1.13013E+01 1.99237E+03 2.04563E+03 2.09888E+03 -8.81332E+02 -1.38069E+03 -1.88004E+03 4.65211E+02 2.40028E+02 1.48440E+01 1.81175E+03 1.86074E+03 1.90973E+03 -7.09008E+02 -1.19895E+03 -1.68889E+03 4.54962E+02 2.31607E+02 8.25161E+00 1.61893E+03 1.66216E+03 1.70540E+03 - 1.02250E+01 -8.83486E+02 -1.48231E+03 -2.08112E+03 5.56777E+02 2.84058E+02 1.13394E+01 1.99704E+03 2.05042E+03 2.10380E+03 -8.83486E+02 -1.38418E+03 -1.88488E+03 4.66468E+02 2.40675E+02 1.48821E+01 1.81642E+03 1.86554E+03 1.91465E+03 -7.11163E+02 -1.20245E+03 -1.69374E+03 4.56219E+02 2.32254E+02 8.28973E+00 1.62360E+03 1.66696E+03 1.71032E+03 - 1.02500E+01 -8.85640E+02 -1.48580E+03 -2.08597E+03 5.58034E+02 2.84706E+02 1.13775E+01 2.00171E+03 2.05521E+03 2.10872E+03 -8.85640E+02 -1.38768E+03 -1.88973E+03 4.67725E+02 2.41323E+02 1.49202E+01 1.82109E+03 1.87033E+03 1.91957E+03 -7.13317E+02 -1.20595E+03 -1.69858E+03 4.57476E+02 2.32902E+02 8.32784E+00 1.62827E+03 1.67175E+03 1.71523E+03 - 1.02750E+01 -8.87794E+02 -1.48930E+03 -2.09081E+03 5.59291E+02 2.85353E+02 1.14156E+01 2.00638E+03 2.06001E+03 2.11364E+03 -8.87794E+02 -1.39118E+03 -1.89457E+03 4.68982E+02 2.41970E+02 1.49584E+01 1.82576E+03 1.87512E+03 1.92448E+03 -7.15471E+02 -1.20945E+03 -1.70342E+03 4.58733E+02 2.33549E+02 8.36595E+00 1.63294E+03 1.67654E+03 1.72015E+03 - 1.03000E+01 -8.89949E+02 -1.49280E+03 -2.09565E+03 5.60548E+02 2.86001E+02 1.14537E+01 2.01104E+03 2.06480E+03 2.11856E+03 -8.89949E+02 -1.39468E+03 -1.89941E+03 4.70239E+02 2.42618E+02 1.49965E+01 1.83043E+03 1.87992E+03 1.92940E+03 -7.17625E+02 -1.21294E+03 -1.70826E+03 4.59990E+02 2.34197E+02 8.40407E+00 1.63760E+03 1.68134E+03 1.72507E+03 - 1.03250E+01 -8.92103E+02 -1.49630E+03 -2.10049E+03 5.61805E+02 2.86648E+02 1.14919E+01 2.01571E+03 2.06959E+03 2.12348E+03 -8.92103E+02 -1.39818E+03 -1.90425E+03 4.71496E+02 2.43265E+02 1.50346E+01 1.83509E+03 1.88471E+03 1.93432E+03 -7.19779E+02 -1.21644E+03 -1.71311E+03 4.61246E+02 2.34844E+02 8.44221E+00 1.64227E+03 1.68613E+03 1.72999E+03 - 1.03500E+01 -8.94257E+02 -1.49980E+03 -2.10534E+03 5.63062E+02 2.87296E+02 1.15300E+01 2.02038E+03 2.07439E+03 2.12840E+03 -8.94257E+02 -1.40168E+03 -1.90909E+03 4.72753E+02 2.43913E+02 1.50727E+01 1.83976E+03 1.88950E+03 1.93924E+03 -7.21933E+02 -1.21994E+03 -1.71795E+03 4.62504E+02 2.35492E+02 8.48034E+00 1.64694E+03 1.69092E+03 1.73491E+03 - 1.03750E+01 -8.96411E+02 -1.50329E+03 -2.11018E+03 5.64318E+02 2.87943E+02 1.15681E+01 2.02505E+03 2.07918E+03 2.13331E+03 -8.96411E+02 -1.40517E+03 -1.91394E+03 4.74010E+02 2.44560E+02 1.51108E+01 1.84443E+03 1.89429E+03 1.94416E+03 -7.24087E+02 -1.22344E+03 -1.72279E+03 4.63760E+02 2.36139E+02 8.51845E+00 1.65161E+03 1.69572E+03 1.73983E+03 - 1.04000E+01 -8.98565E+02 -1.50679E+03 -2.11502E+03 5.65576E+02 2.88591E+02 1.16062E+01 2.02972E+03 2.08397E+03 2.13823E+03 -8.98565E+02 -1.40867E+03 -1.91878E+03 4.75267E+02 2.45208E+02 1.51490E+01 1.84910E+03 1.89909E+03 1.94908E+03 -7.26241E+02 -1.22694E+03 -1.72763E+03 4.65017E+02 2.36787E+02 8.55655E+00 1.65628E+03 1.70051E+03 1.74475E+03 - 1.04250E+01 -9.00719E+02 -1.51029E+03 -2.11986E+03 5.66832E+02 2.89238E+02 1.16443E+01 2.03438E+03 2.08877E+03 2.14315E+03 -9.00719E+02 -1.41217E+03 -1.92362E+03 4.76524E+02 2.45856E+02 1.51871E+01 1.85377E+03 1.90388E+03 1.95400E+03 -7.28395E+02 -1.23043E+03 -1.73247E+03 4.66274E+02 2.37435E+02 8.59468E+00 1.66094E+03 1.70530E+03 1.74966E+03 - 1.04500E+01 -9.02873E+02 -1.51379E+03 -2.12471E+03 5.68089E+02 2.89886E+02 1.16825E+01 2.03905E+03 2.09356E+03 2.14807E+03 -9.02873E+02 -1.41567E+03 -1.92846E+03 4.77781E+02 2.46503E+02 1.52252E+01 1.85843E+03 1.90867E+03 1.95891E+03 -7.30549E+02 -1.23393E+03 -1.73732E+03 4.67531E+02 2.38082E+02 8.63282E+00 1.66561E+03 1.71010E+03 1.75458E+03 - 1.04750E+01 -9.05027E+02 -1.51729E+03 -2.12955E+03 5.69346E+02 2.90534E+02 1.17206E+01 2.04372E+03 2.09835E+03 2.15299E+03 -9.05027E+02 -1.41917E+03 -1.93331E+03 4.79038E+02 2.47151E+02 1.52633E+01 1.86310E+03 1.91347E+03 1.96383E+03 -7.32703E+02 -1.23743E+03 -1.74216E+03 4.68788E+02 2.38730E+02 8.67094E+00 1.67028E+03 1.71489E+03 1.75950E+03 - 1.05000E+01 -9.07181E+02 -1.52079E+03 -2.13439E+03 5.70603E+02 2.91181E+02 1.17587E+01 2.04839E+03 2.10315E+03 2.15791E+03 -9.07181E+02 -1.42266E+03 -1.93815E+03 4.80295E+02 2.47798E+02 1.53015E+01 1.86777E+03 1.91826E+03 1.96875E+03 -7.34857E+02 -1.24093E+03 -1.74700E+03 4.70045E+02 2.39377E+02 8.70905E+00 1.67495E+03 1.71968E+03 1.76442E+03 - 1.05250E+01 -9.09335E+02 -1.52428E+03 -2.13923E+03 5.71860E+02 2.91829E+02 1.17968E+01 2.05306E+03 2.10794E+03 2.16283E+03 -9.09335E+02 -1.42616E+03 -1.94299E+03 4.81552E+02 2.48446E+02 1.53396E+01 1.87244E+03 1.92305E+03 1.97367E+03 -7.37011E+02 -1.24443E+03 -1.75184E+03 4.71302E+02 2.40025E+02 8.74716E+00 1.67962E+03 1.72448E+03 1.76934E+03 - 1.05500E+01 -9.11489E+02 -1.52778E+03 -2.14408E+03 5.73117E+02 2.92476E+02 1.18349E+01 2.05772E+03 2.11273E+03 2.16774E+03 -9.11489E+02 -1.42966E+03 -1.94783E+03 4.82809E+02 2.49093E+02 1.53777E+01 1.87711E+03 1.92785E+03 1.97859E+03 -7.39165E+02 -1.24793E+03 -1.75669E+03 4.72559E+02 2.40672E+02 8.78528E+00 1.68428E+03 1.72927E+03 1.77426E+03 - 1.05750E+01 -9.13643E+02 -1.53128E+03 -2.14892E+03 5.74374E+02 2.93124E+02 1.18731E+01 2.06239E+03 2.11753E+03 2.17266E+03 -9.13643E+02 -1.43316E+03 -1.95268E+03 4.84066E+02 2.49741E+02 1.54158E+01 1.88177E+03 1.93264E+03 1.98351E+03 -7.41319E+02 -1.25142E+03 -1.76153E+03 4.73816E+02 2.41320E+02 8.82342E+00 1.68895E+03 1.73406E+03 1.77918E+03 - 1.06000E+01 -9.15797E+02 -1.53478E+03 -2.15376E+03 5.75631E+02 2.93771E+02 1.19112E+01 2.06706E+03 2.12232E+03 2.17758E+03 -9.15797E+02 -1.43666E+03 -1.95752E+03 4.85323E+02 2.50388E+02 1.54539E+01 1.88644E+03 1.93743E+03 1.98843E+03 -7.43473E+02 -1.25492E+03 -1.76637E+03 4.75073E+02 2.41967E+02 8.86154E+00 1.69362E+03 1.73886E+03 1.78409E+03 - 1.06250E+01 -9.17951E+02 -1.53828E+03 -2.15860E+03 5.76888E+02 2.94419E+02 1.19493E+01 2.07173E+03 2.12711E+03 2.18250E+03 -9.17951E+02 -1.44016E+03 -1.96236E+03 4.86580E+02 2.51036E+02 1.54921E+01 1.89111E+03 1.94223E+03 1.99334E+03 -7.45627E+02 -1.25842E+03 -1.77121E+03 4.76330E+02 2.42615E+02 8.89965E+00 1.69829E+03 1.74365E+03 1.78901E+03 - 1.06500E+01 -9.20105E+02 -1.54177E+03 -2.16344E+03 5.78145E+02 2.95066E+02 1.19874E+01 2.07640E+03 2.13191E+03 2.18742E+03 -9.20105E+02 -1.44365E+03 -1.96720E+03 4.87837E+02 2.51683E+02 1.55302E+01 1.89578E+03 1.94702E+03 1.99826E+03 -7.47781E+02 -1.26192E+03 -1.77606E+03 4.77587E+02 2.43262E+02 8.93776E+00 1.70296E+03 1.74844E+03 1.79393E+03 - 1.06750E+01 -9.22259E+02 -1.54527E+03 -2.16829E+03 5.79402E+02 2.95714E+02 1.20255E+01 2.08106E+03 2.13670E+03 2.19234E+03 -9.22259E+02 -1.44715E+03 -1.97205E+03 4.89094E+02 2.52331E+02 1.55683E+01 1.90045E+03 1.95181E+03 2.00318E+03 -7.49935E+02 -1.26542E+03 -1.78090E+03 4.78844E+02 2.43910E+02 8.97589E+00 1.70762E+03 1.75324E+03 1.79885E+03 - 1.07000E+01 -9.24413E+02 -1.54877E+03 -2.17313E+03 5.80659E+02 2.96361E+02 1.20637E+01 2.08573E+03 2.14149E+03 2.19726E+03 -9.24413E+02 -1.45065E+03 -1.97689E+03 4.90351E+02 2.52979E+02 1.56064E+01 1.90511E+03 1.95661E+03 2.00810E+03 -7.52089E+02 -1.26892E+03 -1.78574E+03 4.80101E+02 2.44558E+02 9.01402E+00 1.71229E+03 1.75803E+03 1.80377E+03 - 1.07250E+01 -9.26567E+02 -1.55227E+03 -2.17797E+03 5.81916E+02 2.97009E+02 1.21018E+01 2.09040E+03 2.14629E+03 2.20218E+03 -9.26567E+02 -1.45415E+03 -1.98173E+03 4.91608E+02 2.53626E+02 1.56445E+01 1.90978E+03 1.96140E+03 2.01302E+03 -7.54244E+02 -1.27241E+03 -1.79058E+03 4.81358E+02 2.45205E+02 9.05215E+00 1.71696E+03 1.76282E+03 1.80869E+03 - 1.07500E+01 -9.28721E+02 -1.55577E+03 -2.18281E+03 5.83173E+02 2.97657E+02 1.21399E+01 2.09507E+03 2.15108E+03 2.20709E+03 -9.28721E+02 -1.45765E+03 -1.98657E+03 4.92865E+02 2.54274E+02 1.56827E+01 1.91445E+03 1.96619E+03 2.01794E+03 -7.56398E+02 -1.27591E+03 -1.79543E+03 4.82615E+02 2.45853E+02 9.09026E+00 1.72163E+03 1.76762E+03 1.81361E+03 - 1.07750E+01 -9.30875E+02 -1.55927E+03 -2.18766E+03 5.84430E+02 2.98304E+02 1.21781E+01 2.09974E+03 2.15587E+03 2.21201E+03 -9.30875E+02 -1.46115E+03 -1.99141E+03 4.94122E+02 2.54921E+02 1.57208E+01 1.91912E+03 1.97099E+03 2.02286E+03 -7.58552E+02 -1.27941E+03 -1.80027E+03 4.83872E+02 2.46500E+02 9.12837E+00 1.72630E+03 1.77241E+03 1.81852E+03 - 1.08000E+01 -9.33029E+02 -1.56276E+03 -2.19250E+03 5.85687E+02 2.98952E+02 1.22161E+01 2.10440E+03 2.16067E+03 2.21693E+03 -9.33029E+02 -1.46464E+03 -1.99626E+03 4.95379E+02 2.55569E+02 1.57589E+01 1.92379E+03 1.97578E+03 2.02778E+03 -7.60706E+02 -1.28291E+03 -1.80511E+03 4.85129E+02 2.47148E+02 9.16649E+00 1.73096E+03 1.77720E+03 1.82344E+03 - 1.08250E+01 -9.35184E+02 -1.56626E+03 -2.19734E+03 5.86944E+02 2.99599E+02 1.22543E+01 2.10907E+03 2.16546E+03 2.22185E+03 -9.35184E+02 -1.46814E+03 -2.00110E+03 4.96636E+02 2.56216E+02 1.57970E+01 1.92845E+03 1.98057E+03 2.03269E+03 -7.62860E+02 -1.28641E+03 -1.80995E+03 4.86386E+02 2.47795E+02 9.20463E+00 1.73563E+03 1.78200E+03 1.82836E+03 - 1.08500E+01 -9.37338E+02 -1.56976E+03 -2.20218E+03 5.88201E+02 3.00247E+02 1.22924E+01 2.11374E+03 2.17025E+03 2.22677E+03 -9.37338E+02 -1.47164E+03 -2.00594E+03 4.97893E+02 2.56864E+02 1.58351E+01 1.93312E+03 1.98537E+03 2.03761E+03 -7.65014E+02 -1.28990E+03 -1.81479E+03 4.87643E+02 2.48443E+02 9.24275E+00 1.74030E+03 1.78679E+03 1.83328E+03 - 1.08750E+01 -9.39492E+02 -1.57326E+03 -2.20703E+03 5.89458E+02 3.00894E+02 1.23305E+01 2.11841E+03 2.17505E+03 2.23169E+03 -9.39492E+02 -1.47514E+03 -2.01078E+03 4.99150E+02 2.57511E+02 1.58733E+01 1.93779E+03 1.99016E+03 2.04253E+03 -7.67168E+02 -1.29340E+03 -1.81964E+03 4.88900E+02 2.49090E+02 9.28086E+00 1.74497E+03 1.79158E+03 1.83820E+03 - 1.09000E+01 -9.41646E+02 -1.57676E+03 -2.21187E+03 5.90715E+02 3.01542E+02 1.23687E+01 2.12308E+03 2.17984E+03 2.23661E+03 -9.41646E+02 -1.47864E+03 -2.01563E+03 5.00407E+02 2.58159E+02 1.59114E+01 1.94246E+03 1.99495E+03 2.04745E+03 -7.69322E+02 -1.29690E+03 -1.82448E+03 4.90157E+02 2.49738E+02 9.31897E+00 1.74964E+03 1.79638E+03 1.84312E+03 - 1.09250E+01 -9.43800E+02 -1.58026E+03 -2.21671E+03 5.91972E+02 3.02189E+02 1.24067E+01 2.12774E+03 2.18463E+03 2.24152E+03 -9.43800E+02 -1.48213E+03 -2.02047E+03 5.01664E+02 2.58807E+02 1.59495E+01 1.94713E+03 1.99975E+03 2.05237E+03 -7.71476E+02 -1.30040E+03 -1.82932E+03 4.91414E+02 2.50386E+02 9.35709E+00 1.75430E+03 1.80117E+03 1.84804E+03 - 1.09500E+01 -9.45954E+02 -1.58375E+03 -2.22155E+03 5.93229E+02 3.02837E+02 1.24449E+01 2.13241E+03 2.18943E+03 2.24644E+03 -9.45954E+02 -1.48563E+03 -2.02531E+03 5.02921E+02 2.59454E+02 1.59876E+01 1.95179E+03 2.00454E+03 2.05729E+03 -7.73630E+02 -1.30390E+03 -1.83416E+03 4.92671E+02 2.51033E+02 9.39523E+00 1.75897E+03 1.80596E+03 1.85295E+03 - 1.09750E+01 -9.48108E+02 -1.58725E+03 -2.22640E+03 5.94486E+02 3.03484E+02 1.24830E+01 2.13708E+03 2.19422E+03 2.25136E+03 -9.48108E+02 -1.48913E+03 -2.03015E+03 5.04177E+02 2.60102E+02 1.60257E+01 1.95646E+03 2.00933E+03 2.06221E+03 -7.75784E+02 -1.30740E+03 -1.83901E+03 4.93928E+02 2.51681E+02 9.43335E+00 1.76364E+03 1.81076E+03 1.85787E+03 - 1.10000E+01 -1.03642E+03 -1.63256E+03 -2.22869E+03 5.55714E+02 2.86651E+02 1.75887E+01 2.14785E+03 2.20586E+03 2.26387E+03 -8.64100E+02 -1.45082E+03 -2.03754E+03 5.45464E+02 2.78230E+02 1.09963E+01 1.95503E+03 2.00728E+03 2.05954E+03 -8.64100E+02 -1.35270E+03 -1.84130E+03 4.55155E+02 2.34847E+02 1.45390E+01 1.77441E+03 1.82240E+03 1.87038E+03 - 1.10250E+01 -1.03858E+03 -1.63606E+03 -2.23353E+03 5.56970E+02 2.87299E+02 1.76268E+01 2.15252E+03 2.21065E+03 2.26879E+03 -8.66254E+02 -1.45432E+03 -2.04239E+03 5.46721E+02 2.78878E+02 1.10344E+01 1.95970E+03 2.01207E+03 2.06445E+03 -8.66254E+02 -1.35620E+03 -1.84614E+03 4.56412E+02 2.35495E+02 1.45771E+01 1.77908E+03 1.82719E+03 1.87530E+03 - 1.10500E+01 -1.04073E+03 -1.63955E+03 -2.23838E+03 5.58227E+02 2.87946E+02 1.76649E+01 2.15719E+03 2.21545E+03 2.27370E+03 -8.68408E+02 -1.45782E+03 -2.04723E+03 5.47978E+02 2.79525E+02 1.10725E+01 1.96436E+03 2.01687E+03 2.06937E+03 -8.68408E+02 -1.35970E+03 -1.85099E+03 4.57669E+02 2.36142E+02 1.46153E+01 1.78375E+03 1.83198E+03 1.88022E+03 - 1.10750E+01 -1.04289E+03 -1.64305E+03 -2.24322E+03 5.59484E+02 2.88594E+02 1.77031E+01 2.16185E+03 2.22024E+03 2.27862E+03 -8.70562E+02 -1.46132E+03 -2.05207E+03 5.49235E+02 2.80173E+02 1.11107E+01 1.96903E+03 2.02166E+03 2.07429E+03 -8.70562E+02 -1.36320E+03 -1.85583E+03 4.58926E+02 2.36790E+02 1.46534E+01 1.78841E+03 1.83678E+03 1.88514E+03 - 1.11000E+01 -1.04504E+03 -1.64655E+03 -2.24806E+03 5.60741E+02 2.89241E+02 1.77412E+01 2.16652E+03 2.22503E+03 2.28354E+03 -8.72716E+02 -1.46481E+03 -2.05691E+03 5.50492E+02 2.80820E+02 1.11488E+01 1.97370E+03 2.02645E+03 2.07921E+03 -8.72716E+02 -1.36669E+03 -1.86067E+03 4.60183E+02 2.37437E+02 1.46915E+01 1.79308E+03 1.84157E+03 1.89005E+03 - 1.11250E+01 -1.04719E+03 -1.65005E+03 -2.25290E+03 5.61998E+02 2.89889E+02 1.77793E+01 2.17119E+03 2.22983E+03 2.28846E+03 -8.74870E+02 -1.46831E+03 -2.06176E+03 5.51749E+02 2.81468E+02 1.11869E+01 1.97837E+03 2.03125E+03 2.08413E+03 -8.74870E+02 -1.37019E+03 -1.86551E+03 4.61440E+02 2.38085E+02 1.47296E+01 1.79775E+03 1.84636E+03 1.89497E+03 - 1.11500E+01 -1.04935E+03 -1.65355E+03 -2.25774E+03 5.63255E+02 2.90536E+02 1.78174E+01 2.17586E+03 2.23462E+03 2.29338E+03 -8.77024E+02 -1.47181E+03 -2.06660E+03 5.53006E+02 2.82115E+02 1.12250E+01 1.98304E+03 2.03604E+03 2.08905E+03 -8.77024E+02 -1.37369E+03 -1.87036E+03 4.62697E+02 2.38733E+02 1.47677E+01 1.80242E+03 1.85116E+03 1.89989E+03 - 1.11750E+01 -1.05150E+03 -1.65704E+03 -2.26259E+03 5.64512E+02 2.91184E+02 1.78555E+01 2.18053E+03 2.23941E+03 2.29830E+03 -8.79178E+02 -1.47531E+03 -2.07144E+03 5.54263E+02 2.82763E+02 1.12631E+01 1.98770E+03 2.04083E+03 2.09397E+03 -8.79178E+02 -1.37719E+03 -1.87520E+03 4.63954E+02 2.39380E+02 1.48059E+01 1.80709E+03 1.85595E+03 1.90481E+03 - 1.12000E+01 -1.05366E+03 -1.66054E+03 -2.26743E+03 5.65769E+02 2.91831E+02 1.78937E+01 2.18519E+03 2.24421E+03 2.30322E+03 -8.81332E+02 -1.47881E+03 -2.07628E+03 5.55520E+02 2.83410E+02 1.13013E+01 1.99237E+03 2.04563E+03 2.09888E+03 -8.81332E+02 -1.38069E+03 -1.88004E+03 4.65211E+02 2.40028E+02 1.48440E+01 1.81175E+03 1.86074E+03 1.90973E+03 - 1.12250E+01 -1.05581E+03 -1.66404E+03 -2.27227E+03 5.67026E+02 2.92479E+02 1.79318E+01 2.18986E+03 2.24900E+03 2.30814E+03 -8.83486E+02 -1.48231E+03 -2.08112E+03 5.56777E+02 2.84058E+02 1.13394E+01 1.99704E+03 2.05042E+03 2.10380E+03 -8.83486E+02 -1.38418E+03 -1.88488E+03 4.66468E+02 2.40675E+02 1.48821E+01 1.81642E+03 1.86554E+03 1.91465E+03 - 1.12500E+01 -1.05796E+03 -1.66754E+03 -2.27711E+03 5.68283E+02 2.93127E+02 1.79699E+01 2.19453E+03 2.25379E+03 2.31305E+03 -8.85640E+02 -1.48580E+03 -2.08597E+03 5.58034E+02 2.84706E+02 1.13775E+01 2.00171E+03 2.05521E+03 2.10872E+03 -8.85640E+02 -1.38768E+03 -1.88973E+03 4.67725E+02 2.41323E+02 1.49202E+01 1.82109E+03 1.87033E+03 1.91957E+03 - 1.12750E+01 -1.06012E+03 -1.67104E+03 -2.28196E+03 5.69540E+02 2.93774E+02 1.80080E+01 2.19920E+03 2.25859E+03 2.31797E+03 -8.87794E+02 -1.48930E+03 -2.09081E+03 5.59291E+02 2.85353E+02 1.14156E+01 2.00638E+03 2.06001E+03 2.11364E+03 -8.87794E+02 -1.39118E+03 -1.89457E+03 4.68982E+02 2.41970E+02 1.49584E+01 1.82576E+03 1.87512E+03 1.92448E+03 - 1.13000E+01 -1.06227E+03 -1.67454E+03 -2.28680E+03 5.70797E+02 2.94422E+02 1.80461E+01 2.20387E+03 2.26338E+03 2.32289E+03 -8.89949E+02 -1.49280E+03 -2.09565E+03 5.60548E+02 2.86001E+02 1.14537E+01 2.01104E+03 2.06480E+03 2.11856E+03 -8.89949E+02 -1.39468E+03 -1.89941E+03 4.70239E+02 2.42618E+02 1.49965E+01 1.83043E+03 1.87992E+03 1.92940E+03 - 1.13250E+01 -1.06443E+03 -1.67803E+03 -2.29164E+03 5.72054E+02 2.95069E+02 1.80843E+01 2.20853E+03 2.26817E+03 2.32781E+03 -8.92103E+02 -1.49630E+03 -2.10049E+03 5.61805E+02 2.86648E+02 1.14919E+01 2.01571E+03 2.06959E+03 2.12348E+03 -8.92103E+02 -1.39818E+03 -1.90425E+03 4.71496E+02 2.43265E+02 1.50346E+01 1.83509E+03 1.88471E+03 1.93432E+03 - 1.13500E+01 -1.06658E+03 -1.68153E+03 -2.29648E+03 5.73311E+02 2.95717E+02 1.81224E+01 2.21320E+03 2.27297E+03 2.33273E+03 -8.94257E+02 -1.49980E+03 -2.10534E+03 5.63062E+02 2.87296E+02 1.15300E+01 2.02038E+03 2.07439E+03 2.12840E+03 -8.94257E+02 -1.40168E+03 -1.90909E+03 4.72753E+02 2.43913E+02 1.50727E+01 1.83976E+03 1.88950E+03 1.93924E+03 - 1.13750E+01 -1.06873E+03 -1.68503E+03 -2.30133E+03 5.74568E+02 2.96364E+02 1.81605E+01 2.21787E+03 2.27776E+03 2.33765E+03 -8.96411E+02 -1.50329E+03 -2.11018E+03 5.64318E+02 2.87943E+02 1.15681E+01 2.02505E+03 2.07918E+03 2.13331E+03 -8.96411E+02 -1.40517E+03 -1.91394E+03 4.74010E+02 2.44560E+02 1.51108E+01 1.84443E+03 1.89429E+03 1.94416E+03 - 1.14000E+01 -1.07089E+03 -1.68853E+03 -2.30617E+03 5.75825E+02 2.97012E+02 1.81986E+01 2.22254E+03 2.28255E+03 2.34257E+03 -8.98565E+02 -1.50679E+03 -2.11502E+03 5.65576E+02 2.88591E+02 1.16062E+01 2.02972E+03 2.08397E+03 2.13823E+03 -8.98565E+02 -1.40867E+03 -1.91878E+03 4.75267E+02 2.45208E+02 1.51490E+01 1.84910E+03 1.89909E+03 1.94908E+03 - 1.14250E+01 -1.07304E+03 -1.69203E+03 -2.31101E+03 5.77082E+02 2.97659E+02 1.82367E+01 2.22721E+03 2.28735E+03 2.34748E+03 -9.00719E+02 -1.51029E+03 -2.11986E+03 5.66832E+02 2.89238E+02 1.16443E+01 2.03438E+03 2.08877E+03 2.14315E+03 -9.00719E+02 -1.41217E+03 -1.92362E+03 4.76524E+02 2.45856E+02 1.51871E+01 1.85377E+03 1.90388E+03 1.95400E+03 - 1.14500E+01 -1.07520E+03 -1.69552E+03 -2.31585E+03 5.78339E+02 2.98307E+02 1.82749E+01 2.23187E+03 2.29214E+03 2.35240E+03 -9.02873E+02 -1.51379E+03 -2.12471E+03 5.68089E+02 2.89886E+02 1.16825E+01 2.03905E+03 2.09356E+03 2.14807E+03 -9.02873E+02 -1.41567E+03 -1.92846E+03 4.77781E+02 2.46503E+02 1.52252E+01 1.85843E+03 1.90867E+03 1.95891E+03 - 1.14750E+01 -1.07735E+03 -1.69902E+03 -2.32070E+03 5.79596E+02 2.98954E+02 1.83130E+01 2.23654E+03 2.29693E+03 2.35732E+03 -9.05027E+02 -1.51729E+03 -2.12955E+03 5.69346E+02 2.90534E+02 1.17206E+01 2.04372E+03 2.09835E+03 2.15299E+03 -9.05027E+02 -1.41917E+03 -1.93331E+03 4.79038E+02 2.47151E+02 1.52633E+01 1.86310E+03 1.91347E+03 1.96383E+03 - 1.15000E+01 -1.07950E+03 -1.70252E+03 -2.32554E+03 5.80853E+02 2.99602E+02 1.83511E+01 2.24121E+03 2.30173E+03 2.36224E+03 -9.07181E+02 -1.52079E+03 -2.13439E+03 5.70603E+02 2.91181E+02 1.17587E+01 2.04839E+03 2.10315E+03 2.15791E+03 -9.07181E+02 -1.42266E+03 -1.93815E+03 4.80295E+02 2.47798E+02 1.53015E+01 1.86777E+03 1.91826E+03 1.96875E+03 - 1.15250E+01 -1.08166E+03 -1.70602E+03 -2.33038E+03 5.82110E+02 3.00250E+02 1.83892E+01 2.24588E+03 2.30652E+03 2.36716E+03 -9.09335E+02 -1.52428E+03 -2.13923E+03 5.71860E+02 2.91829E+02 1.17968E+01 2.05306E+03 2.10794E+03 2.16283E+03 -9.09335E+02 -1.42616E+03 -1.94299E+03 4.81552E+02 2.48446E+02 1.53396E+01 1.87244E+03 1.92305E+03 1.97367E+03 - 1.15500E+01 -1.08381E+03 -1.70952E+03 -2.33522E+03 5.83367E+02 3.00897E+02 1.84273E+01 2.25055E+03 2.31131E+03 2.37208E+03 -9.11489E+02 -1.52778E+03 -2.14408E+03 5.73117E+02 2.92476E+02 1.18349E+01 2.05772E+03 2.11273E+03 2.16774E+03 -9.11489E+02 -1.42966E+03 -1.94783E+03 4.82809E+02 2.49093E+02 1.53777E+01 1.87711E+03 1.92785E+03 1.97859E+03 - 1.15750E+01 -1.08597E+03 -1.71302E+03 -2.34006E+03 5.84624E+02 3.01545E+02 1.84655E+01 2.25521E+03 2.31610E+03 2.37700E+03 -9.13643E+02 -1.53128E+03 -2.14892E+03 5.74374E+02 2.93124E+02 1.18731E+01 2.06239E+03 2.11753E+03 2.17266E+03 -9.13643E+02 -1.43316E+03 -1.95268E+03 4.84066E+02 2.49741E+02 1.54158E+01 1.88177E+03 1.93264E+03 1.98351E+03 - 1.16000E+01 -1.08812E+03 -1.71651E+03 -2.34491E+03 5.85881E+02 3.02192E+02 1.85036E+01 2.25988E+03 2.32090E+03 2.38191E+03 -9.15797E+02 -1.53478E+03 -2.15376E+03 5.75631E+02 2.93771E+02 1.19112E+01 2.06706E+03 2.12232E+03 2.17758E+03 -9.15797E+02 -1.43666E+03 -1.95752E+03 4.85323E+02 2.50388E+02 1.54539E+01 1.88644E+03 1.93743E+03 1.98843E+03 - 1.16250E+01 -1.09028E+03 -1.72001E+03 -2.34975E+03 5.87138E+02 3.02840E+02 1.85417E+01 2.26455E+03 2.32569E+03 2.38683E+03 -9.17951E+02 -1.53828E+03 -2.15860E+03 5.76888E+02 2.94419E+02 1.19493E+01 2.07173E+03 2.12711E+03 2.18250E+03 -9.17951E+02 -1.44016E+03 -1.96236E+03 4.86580E+02 2.51036E+02 1.54921E+01 1.89111E+03 1.94223E+03 1.99334E+03 - 1.16500E+01 -1.09243E+03 -1.72351E+03 -2.35459E+03 5.88395E+02 3.03487E+02 1.85799E+01 2.26922E+03 2.33048E+03 2.39175E+03 -9.20105E+02 -1.54177E+03 -2.16344E+03 5.78145E+02 2.95066E+02 1.19874E+01 2.07640E+03 2.13191E+03 2.18742E+03 -9.20105E+02 -1.44365E+03 -1.96720E+03 4.87837E+02 2.51683E+02 1.55302E+01 1.89578E+03 1.94702E+03 1.99826E+03 - 1.16750E+01 -1.09458E+03 -1.72701E+03 -2.35943E+03 5.89652E+02 3.04135E+02 1.86179E+01 2.27389E+03 2.33528E+03 2.39667E+03 -9.22259E+02 -1.54527E+03 -2.16829E+03 5.79402E+02 2.95714E+02 1.20255E+01 2.08106E+03 2.13670E+03 2.19234E+03 -9.22259E+02 -1.44715E+03 -1.97205E+03 4.89094E+02 2.52331E+02 1.55683E+01 1.90045E+03 1.95181E+03 2.00318E+03 - 1.17000E+01 -1.09674E+03 -1.73051E+03 -2.36428E+03 5.90909E+02 3.04782E+02 1.86561E+01 2.27855E+03 2.34007E+03 2.40159E+03 -9.24413E+02 -1.54877E+03 -2.17313E+03 5.80659E+02 2.96361E+02 1.20637E+01 2.08573E+03 2.14149E+03 2.19726E+03 -9.24413E+02 -1.45065E+03 -1.97689E+03 4.90351E+02 2.52979E+02 1.56064E+01 1.90511E+03 1.95661E+03 2.00810E+03 - 1.17250E+01 -1.09889E+03 -1.73400E+03 -2.36912E+03 5.92166E+02 3.05430E+02 1.86942E+01 2.28322E+03 2.34486E+03 2.40651E+03 -9.26567E+02 -1.55227E+03 -2.17797E+03 5.81916E+02 2.97009E+02 1.21018E+01 2.09040E+03 2.14629E+03 2.20218E+03 -9.26567E+02 -1.45415E+03 -1.98173E+03 4.91608E+02 2.53626E+02 1.56445E+01 1.90978E+03 1.96140E+03 2.01302E+03 - 1.17500E+01 -1.10105E+03 -1.73750E+03 -2.37396E+03 5.93423E+02 3.06078E+02 1.87323E+01 2.28789E+03 2.34966E+03 2.41143E+03 -9.28721E+02 -1.55577E+03 -2.18281E+03 5.83173E+02 2.97657E+02 1.21399E+01 2.09507E+03 2.15108E+03 2.20709E+03 -9.28721E+02 -1.45765E+03 -1.98657E+03 4.92865E+02 2.54274E+02 1.56827E+01 1.91445E+03 1.96619E+03 2.01794E+03 - 1.17750E+01 -1.10320E+03 -1.74100E+03 -2.37880E+03 5.94680E+02 3.06725E+02 1.87705E+01 2.29256E+03 2.35445E+03 2.41634E+03 -9.30875E+02 -1.55927E+03 -2.18766E+03 5.84430E+02 2.98304E+02 1.21781E+01 2.09974E+03 2.15587E+03 2.21201E+03 -9.30875E+02 -1.46115E+03 -1.99141E+03 4.94122E+02 2.54921E+02 1.57208E+01 1.91912E+03 1.97099E+03 2.02286E+03 - 1.18000E+01 -1.10535E+03 -1.74450E+03 -2.38365E+03 5.95937E+02 3.07373E+02 1.88085E+01 2.29723E+03 2.35924E+03 2.42126E+03 -9.33029E+02 -1.56276E+03 -2.19250E+03 5.85687E+02 2.98952E+02 1.22161E+01 2.10440E+03 2.16067E+03 2.21693E+03 -9.33029E+02 -1.46464E+03 -1.99626E+03 4.95379E+02 2.55569E+02 1.57589E+01 1.92379E+03 1.97578E+03 2.02778E+03 - 1.18250E+01 -1.10751E+03 -1.74800E+03 -2.38849E+03 5.97194E+02 3.08020E+02 1.88467E+01 2.30189E+03 2.36404E+03 2.42618E+03 -9.35184E+02 -1.56626E+03 -2.19734E+03 5.86944E+02 2.99599E+02 1.22543E+01 2.10907E+03 2.16546E+03 2.22185E+03 -9.35184E+02 -1.46814E+03 -2.00110E+03 4.96636E+02 2.56216E+02 1.57970E+01 1.92845E+03 1.98057E+03 2.03269E+03 - 1.18500E+01 -1.10966E+03 -1.75150E+03 -2.39333E+03 5.98451E+02 3.08668E+02 1.88848E+01 2.30656E+03 2.36883E+03 2.43110E+03 -9.37338E+02 -1.56976E+03 -2.20218E+03 5.88201E+02 3.00247E+02 1.22924E+01 2.11374E+03 2.17025E+03 2.22677E+03 -9.37338E+02 -1.47164E+03 -2.00594E+03 4.97893E+02 2.56864E+02 1.58351E+01 1.93312E+03 1.98537E+03 2.03761E+03 - 1.18750E+01 -1.11182E+03 -1.75499E+03 -2.39817E+03 5.99708E+02 3.09315E+02 1.89229E+01 2.31123E+03 2.37362E+03 2.43602E+03 -9.39492E+02 -1.57326E+03 -2.20703E+03 5.89458E+02 3.00894E+02 1.23305E+01 2.11841E+03 2.17505E+03 2.23169E+03 -9.39492E+02 -1.47514E+03 -2.01078E+03 4.99150E+02 2.57511E+02 1.58733E+01 1.93779E+03 1.99016E+03 2.04253E+03 - 1.19000E+01 -1.11397E+03 -1.75849E+03 -2.40301E+03 6.00965E+02 3.09963E+02 1.89611E+01 2.31590E+03 2.37842E+03 2.44094E+03 -9.41646E+02 -1.57676E+03 -2.21187E+03 5.90715E+02 3.01542E+02 1.23687E+01 2.12308E+03 2.17984E+03 2.23661E+03 -9.41646E+02 -1.47864E+03 -2.01563E+03 5.00407E+02 2.58159E+02 1.59114E+01 1.94246E+03 1.99495E+03 2.04745E+03 - 1.19250E+01 -1.11612E+03 -1.76199E+03 -2.40786E+03 6.02222E+02 3.10610E+02 1.89992E+01 2.32057E+03 2.38321E+03 2.44586E+03 -9.43800E+02 -1.58026E+03 -2.21671E+03 5.91972E+02 3.02189E+02 1.24067E+01 2.12774E+03 2.18463E+03 2.24152E+03 -9.43800E+02 -1.48213E+03 -2.02047E+03 5.01664E+02 2.58807E+02 1.59495E+01 1.94713E+03 1.99975E+03 2.05237E+03 - 1.19500E+01 -1.11828E+03 -1.76549E+03 -2.41270E+03 6.03479E+02 3.11258E+02 1.90373E+01 2.32523E+03 2.38800E+03 2.45077E+03 -9.45954E+02 -1.58375E+03 -2.22155E+03 5.93229E+02 3.02837E+02 1.24449E+01 2.13241E+03 2.18943E+03 2.24644E+03 -9.45954E+02 -1.48563E+03 -2.02531E+03 5.02921E+02 2.59454E+02 1.59876E+01 1.95179E+03 2.00454E+03 2.05729E+03 - 1.19750E+01 -1.12043E+03 -1.76899E+03 -2.41754E+03 6.04736E+02 3.11905E+02 1.90754E+01 2.32990E+03 2.39280E+03 2.45569E+03 -9.48108E+02 -1.58725E+03 -2.22640E+03 5.94486E+02 3.03484E+02 1.24830E+01 2.13708E+03 2.19422E+03 2.25136E+03 -9.48108E+02 -1.48913E+03 -2.03015E+03 5.04177E+02 2.60102E+02 1.60257E+01 1.95646E+03 2.00933E+03 2.06221E+03 - 1.20000E+01 -1.03642E+03 -1.73068E+03 -2.42493E+03 6.46022E+02 3.30034E+02 1.40459E+01 2.32847E+03 2.39075E+03 2.45302E+03 -1.03642E+03 -1.63256E+03 -2.22869E+03 5.55714E+02 2.86651E+02 1.75887E+01 2.14785E+03 2.20586E+03 2.26387E+03 -8.64100E+02 -1.45082E+03 -2.03754E+03 5.45464E+02 2.78230E+02 1.09963E+01 1.95503E+03 2.00728E+03 2.05954E+03 - 1.20250E+01 -1.03858E+03 -1.73418E+03 -2.42977E+03 6.47279E+02 3.30681E+02 1.40841E+01 2.33314E+03 2.39554E+03 2.45794E+03 -1.03858E+03 -1.63606E+03 -2.23353E+03 5.56970E+02 2.87299E+02 1.76268E+01 2.15252E+03 2.21065E+03 2.26879E+03 -8.66254E+02 -1.45432E+03 -2.04239E+03 5.46721E+02 2.78878E+02 1.10344E+01 1.95970E+03 2.01207E+03 2.06445E+03 - 1.20500E+01 -1.04073E+03 -1.73767E+03 -2.43462E+03 6.48536E+02 3.31329E+02 1.41222E+01 2.33780E+03 2.40033E+03 2.46286E+03 -1.04073E+03 -1.63955E+03 -2.23838E+03 5.58227E+02 2.87946E+02 1.76649E+01 2.15719E+03 2.21545E+03 2.27370E+03 -8.68408E+02 -1.45782E+03 -2.04723E+03 5.47978E+02 2.79525E+02 1.10725E+01 1.96436E+03 2.01687E+03 2.06937E+03 - 1.20750E+01 -1.04289E+03 -1.74117E+03 -2.43946E+03 6.49793E+02 3.31977E+02 1.41603E+01 2.34247E+03 2.40513E+03 2.46778E+03 -1.04289E+03 -1.64305E+03 -2.24322E+03 5.59484E+02 2.88594E+02 1.77031E+01 2.16185E+03 2.22024E+03 2.27862E+03 -8.70562E+02 -1.46132E+03 -2.05207E+03 5.49235E+02 2.80173E+02 1.11107E+01 1.96903E+03 2.02166E+03 2.07429E+03 - 1.21000E+01 -1.04504E+03 -1.74467E+03 -2.44430E+03 6.51050E+02 3.32624E+02 1.41984E+01 2.34714E+03 2.40992E+03 2.47270E+03 -1.04504E+03 -1.64655E+03 -2.24806E+03 5.60741E+02 2.89241E+02 1.77412E+01 2.16652E+03 2.22503E+03 2.28354E+03 -8.72716E+02 -1.46481E+03 -2.05691E+03 5.50492E+02 2.80820E+02 1.11488E+01 1.97370E+03 2.02645E+03 2.07921E+03 - 1.21250E+01 -1.04719E+03 -1.74817E+03 -2.44914E+03 6.52307E+02 3.33272E+02 1.42366E+01 2.35181E+03 2.41471E+03 2.47762E+03 -1.04719E+03 -1.65005E+03 -2.25290E+03 5.61998E+02 2.89889E+02 1.77793E+01 2.17119E+03 2.22983E+03 2.28846E+03 -8.74870E+02 -1.46831E+03 -2.06176E+03 5.51749E+02 2.81468E+02 1.11869E+01 1.97837E+03 2.03125E+03 2.08413E+03 - 1.21500E+01 -1.04935E+03 -1.75167E+03 -2.45399E+03 6.53564E+02 3.33919E+02 1.42747E+01 2.35648E+03 2.41951E+03 2.48253E+03 -1.04935E+03 -1.65355E+03 -2.25774E+03 5.63255E+02 2.90536E+02 1.78174E+01 2.17586E+03 2.23462E+03 2.29338E+03 -8.77024E+02 -1.47181E+03 -2.06660E+03 5.53006E+02 2.82115E+02 1.12250E+01 1.98304E+03 2.03604E+03 2.08905E+03 - 1.21750E+01 -1.05150E+03 -1.75517E+03 -2.45883E+03 6.54821E+02 3.34567E+02 1.43128E+01 2.36114E+03 2.42430E+03 2.48745E+03 -1.05150E+03 -1.65704E+03 -2.26259E+03 5.64512E+02 2.91184E+02 1.78555E+01 2.18053E+03 2.23941E+03 2.29830E+03 -8.79178E+02 -1.47531E+03 -2.07144E+03 5.54263E+02 2.82763E+02 1.12631E+01 1.98770E+03 2.04083E+03 2.09397E+03 - 1.22000E+01 -1.05366E+03 -1.75866E+03 -2.46367E+03 6.56078E+02 3.35214E+02 1.43509E+01 2.36581E+03 2.42909E+03 2.49237E+03 -1.05366E+03 -1.66054E+03 -2.26743E+03 5.65769E+02 2.91831E+02 1.78937E+01 2.18519E+03 2.24421E+03 2.30322E+03 -8.81332E+02 -1.47881E+03 -2.07628E+03 5.55520E+02 2.83410E+02 1.13013E+01 1.99237E+03 2.04563E+03 2.09888E+03 - 1.22250E+01 -1.05581E+03 -1.76216E+03 -2.46851E+03 6.57335E+02 3.35862E+02 1.43890E+01 2.37048E+03 2.43389E+03 2.49729E+03 -1.05581E+03 -1.66404E+03 -2.27227E+03 5.67026E+02 2.92479E+02 1.79318E+01 2.18986E+03 2.24900E+03 2.30814E+03 -8.83486E+02 -1.48231E+03 -2.08112E+03 5.56777E+02 2.84058E+02 1.13394E+01 1.99704E+03 2.05042E+03 2.10380E+03 - 1.22500E+01 -1.05796E+03 -1.76566E+03 -2.47336E+03 6.58592E+02 3.36509E+02 1.44272E+01 2.37515E+03 2.43868E+03 2.50221E+03 -1.05796E+03 -1.66754E+03 -2.27711E+03 5.68283E+02 2.93127E+02 1.79699E+01 2.19453E+03 2.25379E+03 2.31305E+03 -8.85640E+02 -1.48580E+03 -2.08597E+03 5.58034E+02 2.84706E+02 1.13775E+01 2.00171E+03 2.05521E+03 2.10872E+03 - 1.22750E+01 -1.06012E+03 -1.76916E+03 -2.47820E+03 6.59849E+02 3.37157E+02 1.44653E+01 2.37982E+03 2.44347E+03 2.50713E+03 -1.06012E+03 -1.67104E+03 -2.28196E+03 5.69540E+02 2.93774E+02 1.80080E+01 2.19920E+03 2.25859E+03 2.31797E+03 -8.87794E+02 -1.48930E+03 -2.09081E+03 5.59291E+02 2.85353E+02 1.14156E+01 2.00638E+03 2.06001E+03 2.11364E+03 - 1.23000E+01 -1.06227E+03 -1.77266E+03 -2.48304E+03 6.61106E+02 3.37805E+02 1.45034E+01 2.38448E+03 2.44827E+03 2.51205E+03 -1.06227E+03 -1.67454E+03 -2.28680E+03 5.70797E+02 2.94422E+02 1.80461E+01 2.20387E+03 2.26338E+03 2.32289E+03 -8.89949E+02 -1.49280E+03 -2.09565E+03 5.60548E+02 2.86001E+02 1.14537E+01 2.01104E+03 2.06480E+03 2.11856E+03 - 1.23250E+01 -1.06443E+03 -1.77615E+03 -2.48788E+03 6.62363E+02 3.38452E+02 1.45415E+01 2.38915E+03 2.45306E+03 2.51697E+03 -1.06443E+03 -1.67803E+03 -2.29164E+03 5.72054E+02 2.95069E+02 1.80843E+01 2.20853E+03 2.26817E+03 2.32781E+03 -8.92103E+02 -1.49630E+03 -2.10049E+03 5.61805E+02 2.86648E+02 1.14919E+01 2.01571E+03 2.06959E+03 2.12348E+03 - 1.23500E+01 -1.06658E+03 -1.77965E+03 -2.49272E+03 6.63620E+02 3.39100E+02 1.45796E+01 2.39382E+03 2.45785E+03 2.52188E+03 -1.06658E+03 -1.68153E+03 -2.29648E+03 5.73311E+02 2.95717E+02 1.81224E+01 2.21320E+03 2.27297E+03 2.33273E+03 -8.94257E+02 -1.49980E+03 -2.10534E+03 5.63062E+02 2.87296E+02 1.15300E+01 2.02038E+03 2.07439E+03 2.12840E+03 - 1.23750E+01 -1.06873E+03 -1.78315E+03 -2.49757E+03 6.64877E+02 3.39747E+02 1.46178E+01 2.39849E+03 2.46265E+03 2.52680E+03 -1.06873E+03 -1.68503E+03 -2.30133E+03 5.74568E+02 2.96364E+02 1.81605E+01 2.21787E+03 2.27776E+03 2.33765E+03 -8.96411E+02 -1.50329E+03 -2.11018E+03 5.64318E+02 2.87943E+02 1.15681E+01 2.02505E+03 2.07918E+03 2.13331E+03 - 1.24000E+01 -1.07089E+03 -1.78665E+03 -2.50241E+03 6.66134E+02 3.40395E+02 1.46559E+01 2.40316E+03 2.46744E+03 2.53172E+03 -1.07089E+03 -1.68853E+03 -2.30617E+03 5.75825E+02 2.97012E+02 1.81986E+01 2.22254E+03 2.28255E+03 2.34257E+03 -8.98565E+02 -1.50679E+03 -2.11502E+03 5.65576E+02 2.88591E+02 1.16062E+01 2.02972E+03 2.08397E+03 2.13823E+03 - 1.24250E+01 -1.07304E+03 -1.79015E+03 -2.50725E+03 6.67391E+02 3.41042E+02 1.46940E+01 2.40782E+03 2.47223E+03 2.53664E+03 -1.07304E+03 -1.69203E+03 -2.31101E+03 5.77082E+02 2.97659E+02 1.82367E+01 2.22721E+03 2.28735E+03 2.34748E+03 -9.00719E+02 -1.51029E+03 -2.11986E+03 5.66832E+02 2.89238E+02 1.16443E+01 2.03438E+03 2.08877E+03 2.14315E+03 - 1.24500E+01 -1.07520E+03 -1.79365E+03 -2.51209E+03 6.68647E+02 3.41690E+02 1.47321E+01 2.41249E+03 2.47702E+03 2.54156E+03 -1.07520E+03 -1.69552E+03 -2.31585E+03 5.78339E+02 2.98307E+02 1.82749E+01 2.23187E+03 2.29214E+03 2.35240E+03 -9.02873E+02 -1.51379E+03 -2.12471E+03 5.68089E+02 2.89886E+02 1.16825E+01 2.03905E+03 2.09356E+03 2.14807E+03 - 1.24750E+01 -1.07735E+03 -1.79714E+03 -2.51694E+03 6.69904E+02 3.42337E+02 1.47702E+01 2.41716E+03 2.48182E+03 2.54648E+03 -1.07735E+03 -1.69902E+03 -2.32070E+03 5.79596E+02 2.98954E+02 1.83130E+01 2.23654E+03 2.29693E+03 2.35732E+03 -9.05027E+02 -1.51729E+03 -2.12955E+03 5.69346E+02 2.90534E+02 1.17206E+01 2.04372E+03 2.09835E+03 2.15299E+03 - 1.25000E+01 -1.07950E+03 -1.80064E+03 -2.52178E+03 6.71161E+02 3.42985E+02 1.48084E+01 2.42183E+03 2.48661E+03 2.55140E+03 -1.07950E+03 -1.70252E+03 -2.32554E+03 5.80853E+02 2.99602E+02 1.83511E+01 2.24121E+03 2.30173E+03 2.36224E+03 -9.07181E+02 -1.52079E+03 -2.13439E+03 5.70603E+02 2.91181E+02 1.17587E+01 2.04839E+03 2.10315E+03 2.15791E+03 - 1.25250E+01 -1.08166E+03 -1.80414E+03 -2.52662E+03 6.72418E+02 3.43632E+02 1.48465E+01 2.42650E+03 2.49140E+03 2.55631E+03 -1.08166E+03 -1.70602E+03 -2.33038E+03 5.82110E+02 3.00250E+02 1.83892E+01 2.24588E+03 2.30652E+03 2.36716E+03 -9.09335E+02 -1.52428E+03 -2.13923E+03 5.71860E+02 2.91829E+02 1.17968E+01 2.05306E+03 2.10794E+03 2.16283E+03 - 1.25500E+01 -1.08381E+03 -1.80764E+03 -2.53146E+03 6.73675E+02 3.44280E+02 1.48846E+01 2.43116E+03 2.49620E+03 2.56123E+03 -1.08381E+03 -1.70952E+03 -2.33522E+03 5.83367E+02 3.00897E+02 1.84273E+01 2.25055E+03 2.31131E+03 2.37208E+03 -9.11489E+02 -1.52778E+03 -2.14408E+03 5.73117E+02 2.92476E+02 1.18349E+01 2.05772E+03 2.11273E+03 2.16774E+03 - 1.25750E+01 -1.08597E+03 -1.81114E+03 -2.53631E+03 6.74932E+02 3.44928E+02 1.49227E+01 2.43583E+03 2.50099E+03 2.56615E+03 -1.08597E+03 -1.71302E+03 -2.34006E+03 5.84624E+02 3.01545E+02 1.84655E+01 2.25521E+03 2.31610E+03 2.37700E+03 -9.13643E+02 -1.53128E+03 -2.14892E+03 5.74374E+02 2.93124E+02 1.18731E+01 2.06239E+03 2.11753E+03 2.17266E+03 - 1.26000E+01 -1.08812E+03 -1.81463E+03 -2.54115E+03 6.76189E+02 3.45575E+02 1.49608E+01 2.44050E+03 2.50578E+03 2.57107E+03 -1.08812E+03 -1.71651E+03 -2.34491E+03 5.85881E+02 3.02192E+02 1.85036E+01 2.25988E+03 2.32090E+03 2.38191E+03 -9.15797E+02 -1.53478E+03 -2.15376E+03 5.75631E+02 2.93771E+02 1.19112E+01 2.06706E+03 2.12232E+03 2.17758E+03 - 1.26250E+01 -1.09028E+03 -1.81813E+03 -2.54599E+03 6.77446E+02 3.46223E+02 1.49990E+01 2.44517E+03 2.51058E+03 2.57599E+03 -1.09028E+03 -1.72001E+03 -2.34975E+03 5.87138E+02 3.02840E+02 1.85417E+01 2.26455E+03 2.32569E+03 2.38683E+03 -9.17951E+02 -1.53828E+03 -2.15860E+03 5.76888E+02 2.94419E+02 1.19493E+01 2.07173E+03 2.12711E+03 2.18250E+03 - 1.26500E+01 -1.09243E+03 -1.82163E+03 -2.55083E+03 6.78703E+02 3.46870E+02 1.50371E+01 2.44984E+03 2.51537E+03 2.58091E+03 -1.09243E+03 -1.72351E+03 -2.35459E+03 5.88395E+02 3.03487E+02 1.85799E+01 2.26922E+03 2.33048E+03 2.39175E+03 -9.20105E+02 -1.54177E+03 -2.16344E+03 5.78145E+02 2.95066E+02 1.19874E+01 2.07640E+03 2.13191E+03 2.18742E+03 - 1.26750E+01 -1.09458E+03 -1.82513E+03 -2.55568E+03 6.79960E+02 3.47518E+02 1.50752E+01 2.45450E+03 2.52016E+03 2.58583E+03 -1.09458E+03 -1.72701E+03 -2.35943E+03 5.89652E+02 3.04135E+02 1.86179E+01 2.27389E+03 2.33528E+03 2.39667E+03 -9.22259E+02 -1.54527E+03 -2.16829E+03 5.79402E+02 2.95714E+02 1.20255E+01 2.08106E+03 2.13670E+03 2.19234E+03 - 1.27000E+01 -1.09674E+03 -1.82863E+03 -2.56052E+03 6.81217E+02 3.48165E+02 1.51133E+01 2.45917E+03 2.52496E+03 2.59074E+03 -1.09674E+03 -1.73051E+03 -2.36428E+03 5.90909E+02 3.04782E+02 1.86561E+01 2.27855E+03 2.34007E+03 2.40159E+03 -9.24413E+02 -1.54877E+03 -2.17313E+03 5.80659E+02 2.96361E+02 1.20637E+01 2.08573E+03 2.14149E+03 2.19726E+03 - 1.27250E+01 -1.09889E+03 -1.83213E+03 -2.56536E+03 6.82474E+02 3.48813E+02 1.51514E+01 2.46384E+03 2.52975E+03 2.59566E+03 -1.09889E+03 -1.73400E+03 -2.36912E+03 5.92166E+02 3.05430E+02 1.86942E+01 2.28322E+03 2.34486E+03 2.40651E+03 -9.26567E+02 -1.55227E+03 -2.17797E+03 5.81916E+02 2.97009E+02 1.21018E+01 2.09040E+03 2.14629E+03 2.20218E+03 - 1.27500E+01 -1.10105E+03 -1.83562E+03 -2.57020E+03 6.83731E+02 3.49460E+02 1.51896E+01 2.46851E+03 2.53454E+03 2.60058E+03 -1.10105E+03 -1.73750E+03 -2.37396E+03 5.93423E+02 3.06078E+02 1.87323E+01 2.28789E+03 2.34966E+03 2.41143E+03 -9.28721E+02 -1.55577E+03 -2.18281E+03 5.83173E+02 2.97657E+02 1.21399E+01 2.09507E+03 2.15108E+03 2.20709E+03 - 1.27750E+01 -1.10320E+03 -1.83912E+03 -2.57504E+03 6.84988E+02 3.50108E+02 1.52277E+01 2.47318E+03 2.53934E+03 2.60550E+03 -1.10320E+03 -1.74100E+03 -2.37880E+03 5.94680E+02 3.06725E+02 1.87705E+01 2.29256E+03 2.35445E+03 2.41634E+03 -9.30875E+02 -1.55927E+03 -2.18766E+03 5.84430E+02 2.98304E+02 1.21781E+01 2.09974E+03 2.15587E+03 2.21201E+03 - 1.28000E+01 -1.10535E+03 -1.84262E+03 -2.57989E+03 6.86245E+02 3.50755E+02 1.52658E+01 2.47784E+03 2.54413E+03 2.61042E+03 -1.10535E+03 -1.74450E+03 -2.38365E+03 5.95937E+02 3.07373E+02 1.88085E+01 2.29723E+03 2.35924E+03 2.42126E+03 -9.33029E+02 -1.56276E+03 -2.19250E+03 5.85687E+02 2.98952E+02 1.22161E+01 2.10440E+03 2.16067E+03 2.21693E+03 - 1.28250E+01 -1.10751E+03 -1.84612E+03 -2.58473E+03 6.87502E+02 3.51403E+02 1.53039E+01 2.48251E+03 2.54892E+03 2.61534E+03 -1.10751E+03 -1.74800E+03 -2.38849E+03 5.97194E+02 3.08020E+02 1.88467E+01 2.30189E+03 2.36404E+03 2.42618E+03 -9.35184E+02 -1.56626E+03 -2.19734E+03 5.86944E+02 2.99599E+02 1.22543E+01 2.10907E+03 2.16546E+03 2.22185E+03 - 1.28500E+01 -1.10966E+03 -1.84962E+03 -2.58957E+03 6.88759E+02 3.52051E+02 1.53420E+01 2.48718E+03 2.55372E+03 2.62026E+03 -1.10966E+03 -1.75150E+03 -2.39333E+03 5.98451E+02 3.08668E+02 1.88848E+01 2.30656E+03 2.36883E+03 2.43110E+03 -9.37338E+02 -1.56976E+03 -2.20218E+03 5.88201E+02 3.00247E+02 1.22924E+01 2.11374E+03 2.17025E+03 2.22677E+03 - 1.28750E+01 -1.11182E+03 -1.85311E+03 -2.59441E+03 6.90016E+02 3.52698E+02 1.53802E+01 2.49185E+03 2.55851E+03 2.62517E+03 -1.11182E+03 -1.75499E+03 -2.39817E+03 5.99708E+02 3.09315E+02 1.89229E+01 2.31123E+03 2.37362E+03 2.43602E+03 -9.39492E+02 -1.57326E+03 -2.20703E+03 5.89458E+02 3.00894E+02 1.23305E+01 2.11841E+03 2.17505E+03 2.23169E+03 - 1.29000E+01 -1.11397E+03 -1.85661E+03 -2.59926E+03 6.91273E+02 3.53346E+02 1.54183E+01 2.49652E+03 2.56330E+03 2.63009E+03 -1.11397E+03 -1.75849E+03 -2.40301E+03 6.00965E+02 3.09963E+02 1.89611E+01 2.31590E+03 2.37842E+03 2.44094E+03 -9.41646E+02 -1.57676E+03 -2.21187E+03 5.90715E+02 3.01542E+02 1.23687E+01 2.12308E+03 2.17984E+03 2.23661E+03 - 1.29250E+01 -1.11612E+03 -1.86011E+03 -2.60410E+03 6.92530E+02 3.53993E+02 1.54564E+01 2.50118E+03 2.56810E+03 2.63501E+03 -1.11612E+03 -1.76199E+03 -2.40786E+03 6.02222E+02 3.10610E+02 1.89992E+01 2.32057E+03 2.38321E+03 2.44586E+03 -9.43800E+02 -1.58026E+03 -2.21671E+03 5.91972E+02 3.02189E+02 1.24067E+01 2.12774E+03 2.18463E+03 2.24152E+03 - 1.29500E+01 -1.11828E+03 -1.86361E+03 -2.60894E+03 6.93787E+02 3.54641E+02 1.54945E+01 2.50585E+03 2.57289E+03 2.63993E+03 -1.11828E+03 -1.76549E+03 -2.41270E+03 6.03479E+02 3.11258E+02 1.90373E+01 2.32523E+03 2.38800E+03 2.45077E+03 -9.45954E+02 -1.58375E+03 -2.22155E+03 5.93229E+02 3.02837E+02 1.24449E+01 2.13241E+03 2.18943E+03 2.24644E+03 - 1.29750E+01 -1.12043E+03 -1.86711E+03 -2.61378E+03 6.95044E+02 3.55288E+02 1.55326E+01 2.51052E+03 2.57768E+03 2.64485E+03 -1.12043E+03 -1.76899E+03 -2.41754E+03 6.04736E+02 3.11905E+02 1.90754E+01 2.32990E+03 2.39280E+03 2.45569E+03 -9.48108E+02 -1.58725E+03 -2.22640E+03 5.94486E+02 3.03484E+02 1.24830E+01 2.13708E+03 2.19422E+03 2.25136E+03 - 1.30000E+01 -1.20875E+03 -1.91241E+03 -2.61608E+03 6.56272E+02 3.38455E+02 2.06383E+01 2.52129E+03 2.58932E+03 2.65736E+03 -1.03642E+03 -1.73068E+03 -2.42493E+03 6.46022E+02 3.30034E+02 1.40459E+01 2.32847E+03 2.39075E+03 2.45302E+03 -1.03642E+03 -1.63256E+03 -2.22869E+03 5.55714E+02 2.86651E+02 1.75887E+01 2.14785E+03 2.20586E+03 2.26387E+03 - 1.30250E+01 -1.21090E+03 -1.91591E+03 -2.62092E+03 6.57529E+02 3.39103E+02 2.06765E+01 2.52596E+03 2.59412E+03 2.66227E+03 -1.03858E+03 -1.73418E+03 -2.42977E+03 6.47279E+02 3.30681E+02 1.40841E+01 2.33314E+03 2.39554E+03 2.45794E+03 -1.03858E+03 -1.63606E+03 -2.23353E+03 5.56970E+02 2.87299E+02 1.76268E+01 2.15252E+03 2.21065E+03 2.26879E+03 - 1.30500E+01 -1.21306E+03 -1.91941E+03 -2.62576E+03 6.58786E+02 3.39750E+02 2.07146E+01 2.53063E+03 2.59891E+03 2.66719E+03 -1.04073E+03 -1.73767E+03 -2.43462E+03 6.48536E+02 3.31329E+02 1.41222E+01 2.33780E+03 2.40033E+03 2.46286E+03 -1.04073E+03 -1.63955E+03 -2.23838E+03 5.58227E+02 2.87946E+02 1.76649E+01 2.15719E+03 2.21545E+03 2.27370E+03 - 1.30750E+01 -1.21521E+03 -1.92291E+03 -2.63061E+03 6.60042E+02 3.40398E+02 2.07527E+01 2.53529E+03 2.60370E+03 2.67211E+03 -1.04289E+03 -1.74117E+03 -2.43946E+03 6.49793E+02 3.31977E+02 1.41603E+01 2.34247E+03 2.40513E+03 2.46778E+03 -1.04289E+03 -1.64305E+03 -2.24322E+03 5.59484E+02 2.88594E+02 1.77031E+01 2.16185E+03 2.22024E+03 2.27862E+03 - 1.31000E+01 -1.21736E+03 -1.92641E+03 -2.63545E+03 6.61299E+02 3.41045E+02 2.07908E+01 2.53996E+03 2.60850E+03 2.67703E+03 -1.04504E+03 -1.74467E+03 -2.44430E+03 6.51050E+02 3.32624E+02 1.41984E+01 2.34714E+03 2.40992E+03 2.47270E+03 -1.04504E+03 -1.64655E+03 -2.24806E+03 5.60741E+02 2.89241E+02 1.77412E+01 2.16652E+03 2.22503E+03 2.28354E+03 - 1.31250E+01 -1.21952E+03 -1.92990E+03 -2.64029E+03 6.62556E+02 3.41693E+02 2.08290E+01 2.54463E+03 2.61329E+03 2.68195E+03 -1.04719E+03 -1.74817E+03 -2.44914E+03 6.52307E+02 3.33272E+02 1.42366E+01 2.35181E+03 2.41471E+03 2.47762E+03 -1.04719E+03 -1.65005E+03 -2.25290E+03 5.61998E+02 2.89889E+02 1.77793E+01 2.17119E+03 2.22983E+03 2.28846E+03 - 1.31500E+01 -1.22167E+03 -1.93340E+03 -2.64513E+03 6.63813E+02 3.42340E+02 2.08671E+01 2.54930E+03 2.61808E+03 2.68687E+03 -1.04935E+03 -1.75167E+03 -2.45399E+03 6.53564E+02 3.33919E+02 1.42747E+01 2.35648E+03 2.41951E+03 2.48253E+03 -1.04935E+03 -1.65355E+03 -2.25774E+03 5.63255E+02 2.90536E+02 1.78174E+01 2.17586E+03 2.23462E+03 2.29338E+03 - 1.31750E+01 -1.22383E+03 -1.93690E+03 -2.64998E+03 6.65070E+02 3.42988E+02 2.09052E+01 2.55397E+03 2.62288E+03 2.69179E+03 -1.05150E+03 -1.75517E+03 -2.45883E+03 6.54821E+02 3.34567E+02 1.43128E+01 2.36114E+03 2.42430E+03 2.48745E+03 -1.05150E+03 -1.65704E+03 -2.26259E+03 5.64512E+02 2.91184E+02 1.78555E+01 2.18053E+03 2.23941E+03 2.29830E+03 - 1.32000E+01 -1.22598E+03 -1.94040E+03 -2.65482E+03 6.66327E+02 3.43635E+02 2.09433E+01 2.55863E+03 2.62767E+03 2.69670E+03 -1.05366E+03 -1.75866E+03 -2.46367E+03 6.56078E+02 3.35214E+02 1.43509E+01 2.36581E+03 2.42909E+03 2.49237E+03 -1.05366E+03 -1.66054E+03 -2.26743E+03 5.65769E+02 2.91831E+02 1.78937E+01 2.18519E+03 2.24421E+03 2.30322E+03 - 1.32250E+01 -1.22813E+03 -1.94390E+03 -2.65966E+03 6.67584E+02 3.44283E+02 2.09814E+01 2.56330E+03 2.63246E+03 2.70162E+03 -1.05581E+03 -1.76216E+03 -2.46851E+03 6.57335E+02 3.35862E+02 1.43890E+01 2.37048E+03 2.43389E+03 2.49729E+03 -1.05581E+03 -1.66404E+03 -2.27227E+03 5.67026E+02 2.92479E+02 1.79318E+01 2.18986E+03 2.24900E+03 2.30814E+03 - 1.32500E+01 -1.23029E+03 -1.94740E+03 -2.66450E+03 6.68841E+02 3.44930E+02 2.10196E+01 2.56797E+03 2.63726E+03 2.70654E+03 -1.05796E+03 -1.76566E+03 -2.47336E+03 6.58592E+02 3.36509E+02 1.44272E+01 2.37515E+03 2.43868E+03 2.50221E+03 -1.05796E+03 -1.66754E+03 -2.27711E+03 5.68283E+02 2.93127E+02 1.79699E+01 2.19453E+03 2.25379E+03 2.31305E+03 - 1.32750E+01 -1.23244E+03 -1.95089E+03 -2.66934E+03 6.70098E+02 3.45578E+02 2.10577E+01 2.57264E+03 2.64205E+03 2.71146E+03 -1.06012E+03 -1.76916E+03 -2.47820E+03 6.59849E+02 3.37157E+02 1.44653E+01 2.37982E+03 2.44347E+03 2.50713E+03 -1.06012E+03 -1.67104E+03 -2.28196E+03 5.69540E+02 2.93774E+02 1.80080E+01 2.19920E+03 2.25859E+03 2.31797E+03 - 1.33000E+01 -1.23460E+03 -1.95439E+03 -2.67419E+03 6.71355E+02 3.46226E+02 2.10958E+01 2.57731E+03 2.64684E+03 2.71638E+03 -1.06227E+03 -1.77266E+03 -2.48304E+03 6.61106E+02 3.37805E+02 1.45034E+01 2.38448E+03 2.44827E+03 2.51205E+03 -1.06227E+03 -1.67454E+03 -2.28680E+03 5.70797E+02 2.94422E+02 1.80461E+01 2.20387E+03 2.26338E+03 2.32289E+03 - 1.33250E+01 -1.23675E+03 -1.95789E+03 -2.67903E+03 6.72612E+02 3.46873E+02 2.11339E+01 2.58197E+03 2.65164E+03 2.72130E+03 -1.06443E+03 -1.77615E+03 -2.48788E+03 6.62363E+02 3.38452E+02 1.45415E+01 2.38915E+03 2.45306E+03 2.51697E+03 -1.06443E+03 -1.67803E+03 -2.29164E+03 5.72054E+02 2.95069E+02 1.80843E+01 2.20853E+03 2.26817E+03 2.32781E+03 - 1.33500E+01 -1.23890E+03 -1.96139E+03 -2.68387E+03 6.73869E+02 3.47521E+02 2.11720E+01 2.58664E+03 2.65643E+03 2.72622E+03 -1.06658E+03 -1.77965E+03 -2.49272E+03 6.63620E+02 3.39100E+02 1.45796E+01 2.39382E+03 2.45785E+03 2.52188E+03 -1.06658E+03 -1.68153E+03 -2.29648E+03 5.73311E+02 2.95717E+02 1.81224E+01 2.21320E+03 2.27297E+03 2.33273E+03 - 1.33750E+01 -1.24106E+03 -1.96489E+03 -2.68871E+03 6.75126E+02 3.48168E+02 2.12102E+01 2.59131E+03 2.66122E+03 2.73113E+03 -1.06873E+03 -1.78315E+03 -2.49757E+03 6.64877E+02 3.39747E+02 1.46178E+01 2.39849E+03 2.46265E+03 2.52680E+03 -1.06873E+03 -1.68503E+03 -2.30133E+03 5.74568E+02 2.96364E+02 1.81605E+01 2.21787E+03 2.27776E+03 2.33765E+03 - 1.34000E+01 -1.24321E+03 -1.96838E+03 -2.69356E+03 6.76383E+02 3.48816E+02 2.12483E+01 2.59598E+03 2.66602E+03 2.73605E+03 -1.07089E+03 -1.78665E+03 -2.50241E+03 6.66134E+02 3.40395E+02 1.46559E+01 2.40316E+03 2.46744E+03 2.53172E+03 -1.07089E+03 -1.68853E+03 -2.30617E+03 5.75825E+02 2.97012E+02 1.81986E+01 2.22254E+03 2.28255E+03 2.34257E+03 - 1.34250E+01 -1.24537E+03 -1.97188E+03 -2.69840E+03 6.77640E+02 3.49463E+02 2.12864E+01 2.60065E+03 2.67081E+03 2.74097E+03 -1.07304E+03 -1.79015E+03 -2.50725E+03 6.67391E+02 3.41042E+02 1.46940E+01 2.40782E+03 2.47223E+03 2.53664E+03 -1.07304E+03 -1.69203E+03 -2.31101E+03 5.77082E+02 2.97659E+02 1.82367E+01 2.22721E+03 2.28735E+03 2.34748E+03 - 1.34500E+01 -1.24752E+03 -1.97538E+03 -2.70324E+03 6.78897E+02 3.50111E+02 2.13245E+01 2.60531E+03 2.67560E+03 2.74589E+03 -1.07520E+03 -1.79365E+03 -2.51209E+03 6.68647E+02 3.41690E+02 1.47321E+01 2.41249E+03 2.47702E+03 2.54156E+03 -1.07520E+03 -1.69552E+03 -2.31585E+03 5.78339E+02 2.98307E+02 1.82749E+01 2.23187E+03 2.29214E+03 2.35240E+03 - 1.34750E+01 -1.24967E+03 -1.97888E+03 -2.70808E+03 6.80154E+02 3.50758E+02 2.13626E+01 2.60998E+03 2.68040E+03 2.75081E+03 -1.07735E+03 -1.79714E+03 -2.51694E+03 6.69904E+02 3.42337E+02 1.47702E+01 2.41716E+03 2.48182E+03 2.54648E+03 -1.07735E+03 -1.69902E+03 -2.32070E+03 5.79596E+02 2.98954E+02 1.83130E+01 2.23654E+03 2.29693E+03 2.35732E+03 - 1.35000E+01 -1.25183E+03 -1.98238E+03 -2.71293E+03 6.81411E+02 3.51406E+02 2.14008E+01 2.61465E+03 2.68519E+03 2.75573E+03 -1.07950E+03 -1.80064E+03 -2.52178E+03 6.71161E+02 3.42985E+02 1.48084E+01 2.42183E+03 2.48661E+03 2.55140E+03 -1.07950E+03 -1.70252E+03 -2.32554E+03 5.80853E+02 2.99602E+02 1.83511E+01 2.24121E+03 2.30173E+03 2.36224E+03 - 1.35250E+01 -1.25398E+03 -1.98588E+03 -2.71777E+03 6.82668E+02 3.52053E+02 2.14389E+01 2.61932E+03 2.68998E+03 2.76065E+03 -1.08166E+03 -1.80414E+03 -2.52662E+03 6.72418E+02 3.43632E+02 1.48465E+01 2.42650E+03 2.49140E+03 2.55631E+03 -1.08166E+03 -1.70602E+03 -2.33038E+03 5.82110E+02 3.00250E+02 1.83892E+01 2.24588E+03 2.30652E+03 2.36716E+03 - 1.35500E+01 -1.25614E+03 -1.98937E+03 -2.72261E+03 6.83925E+02 3.52701E+02 2.14770E+01 2.62399E+03 2.69478E+03 2.76556E+03 -1.08381E+03 -1.80764E+03 -2.53146E+03 6.73675E+02 3.44280E+02 1.48846E+01 2.43116E+03 2.49620E+03 2.56123E+03 -1.08381E+03 -1.70952E+03 -2.33522E+03 5.83367E+02 3.00897E+02 1.84273E+01 2.25055E+03 2.31131E+03 2.37208E+03 - 1.35750E+01 -1.25829E+03 -1.99287E+03 -2.72745E+03 6.85182E+02 3.53349E+02 2.15151E+01 2.62865E+03 2.69957E+03 2.77048E+03 -1.08597E+03 -1.81114E+03 -2.53631E+03 6.74932E+02 3.44928E+02 1.49227E+01 2.43583E+03 2.50099E+03 2.56615E+03 -1.08597E+03 -1.71302E+03 -2.34006E+03 5.84624E+02 3.01545E+02 1.84655E+01 2.25521E+03 2.31610E+03 2.37700E+03 - 1.36000E+01 -1.26044E+03 -1.99637E+03 -2.73230E+03 6.86439E+02 3.53996E+02 2.15532E+01 2.63332E+03 2.70436E+03 2.77540E+03 -1.08812E+03 -1.81463E+03 -2.54115E+03 6.76189E+02 3.45575E+02 1.49608E+01 2.44050E+03 2.50578E+03 2.57107E+03 -1.08812E+03 -1.71651E+03 -2.34491E+03 5.85881E+02 3.02192E+02 1.85036E+01 2.25988E+03 2.32090E+03 2.38191E+03 - 1.36250E+01 -1.26260E+03 -1.99987E+03 -2.73714E+03 6.87696E+02 3.54644E+02 2.15914E+01 2.63799E+03 2.70916E+03 2.78032E+03 -1.09028E+03 -1.81813E+03 -2.54599E+03 6.77446E+02 3.46223E+02 1.49990E+01 2.44517E+03 2.51058E+03 2.57599E+03 -1.09028E+03 -1.72001E+03 -2.34975E+03 5.87138E+02 3.02840E+02 1.85417E+01 2.26455E+03 2.32569E+03 2.38683E+03 - 1.36500E+01 -1.26475E+03 -2.00337E+03 -2.74198E+03 6.88953E+02 3.55291E+02 2.16295E+01 2.64266E+03 2.71395E+03 2.78524E+03 -1.09243E+03 -1.82163E+03 -2.55083E+03 6.78703E+02 3.46870E+02 1.50371E+01 2.44984E+03 2.51537E+03 2.58091E+03 -1.09243E+03 -1.72351E+03 -2.35459E+03 5.88395E+02 3.03487E+02 1.85799E+01 2.26922E+03 2.33048E+03 2.39175E+03 - 1.36750E+01 -1.26691E+03 -2.00686E+03 -2.74682E+03 6.90210E+02 3.55939E+02 2.16676E+01 2.64733E+03 2.71874E+03 2.79016E+03 -1.09458E+03 -1.82513E+03 -2.55568E+03 6.79960E+02 3.47518E+02 1.50752E+01 2.45450E+03 2.52016E+03 2.58583E+03 -1.09458E+03 -1.72701E+03 -2.35943E+03 5.89652E+02 3.04135E+02 1.86179E+01 2.27389E+03 2.33528E+03 2.39667E+03 - 1.37000E+01 -1.26906E+03 -2.01036E+03 -2.75166E+03 6.91467E+02 3.56586E+02 2.17057E+01 2.65199E+03 2.72354E+03 2.79508E+03 -1.09674E+03 -1.82863E+03 -2.56052E+03 6.81217E+02 3.48165E+02 1.51133E+01 2.45917E+03 2.52496E+03 2.59074E+03 -1.09674E+03 -1.73051E+03 -2.36428E+03 5.90909E+02 3.04782E+02 1.86561E+01 2.27855E+03 2.34007E+03 2.40159E+03 - 1.37250E+01 -1.27122E+03 -2.01386E+03 -2.75651E+03 6.92724E+02 3.57234E+02 2.17438E+01 2.65666E+03 2.72833E+03 2.79999E+03 -1.09889E+03 -1.83213E+03 -2.56536E+03 6.82474E+02 3.48813E+02 1.51514E+01 2.46384E+03 2.52975E+03 2.59566E+03 -1.09889E+03 -1.73400E+03 -2.36912E+03 5.92166E+02 3.05430E+02 1.86942E+01 2.28322E+03 2.34486E+03 2.40651E+03 - 1.37500E+01 -1.27337E+03 -2.01736E+03 -2.76135E+03 6.93981E+02 3.57881E+02 2.17820E+01 2.66133E+03 2.73312E+03 2.80491E+03 -1.10105E+03 -1.83562E+03 -2.57020E+03 6.83731E+02 3.49460E+02 1.51896E+01 2.46851E+03 2.53454E+03 2.60058E+03 -1.10105E+03 -1.73750E+03 -2.37396E+03 5.93423E+02 3.06078E+02 1.87323E+01 2.28789E+03 2.34966E+03 2.41143E+03 - 1.37750E+01 -1.27552E+03 -2.02086E+03 -2.76619E+03 6.95238E+02 3.58529E+02 2.18201E+01 2.66600E+03 2.73792E+03 2.80983E+03 -1.10320E+03 -1.83912E+03 -2.57504E+03 6.84988E+02 3.50108E+02 1.52277E+01 2.47318E+03 2.53934E+03 2.60550E+03 -1.10320E+03 -1.74100E+03 -2.37880E+03 5.94680E+02 3.06725E+02 1.87705E+01 2.29256E+03 2.35445E+03 2.41634E+03 - 1.38000E+01 -1.27768E+03 -2.02436E+03 -2.77103E+03 6.96495E+02 3.59176E+02 2.18582E+01 2.67067E+03 2.74271E+03 2.81475E+03 -1.10535E+03 -1.84262E+03 -2.57989E+03 6.86245E+02 3.50755E+02 1.52658E+01 2.47784E+03 2.54413E+03 2.61042E+03 -1.10535E+03 -1.74450E+03 -2.38365E+03 5.95937E+02 3.07373E+02 1.88085E+01 2.29723E+03 2.35924E+03 2.42126E+03 - 1.38250E+01 -1.27983E+03 -2.02785E+03 -2.77588E+03 6.97752E+02 3.59824E+02 2.18963E+01 2.67533E+03 2.74750E+03 2.81967E+03 -1.10751E+03 -1.84612E+03 -2.58473E+03 6.87502E+02 3.51403E+02 1.53039E+01 2.48251E+03 2.54892E+03 2.61534E+03 -1.10751E+03 -1.74800E+03 -2.38849E+03 5.97194E+02 3.08020E+02 1.88467E+01 2.30189E+03 2.36404E+03 2.42618E+03 - 1.38500E+01 -1.28199E+03 -2.03135E+03 -2.78072E+03 6.99009E+02 3.60472E+02 2.19344E+01 2.68000E+03 2.75230E+03 2.82459E+03 -1.10966E+03 -1.84962E+03 -2.58957E+03 6.88759E+02 3.52051E+02 1.53420E+01 2.48718E+03 2.55372E+03 2.62026E+03 -1.10966E+03 -1.75150E+03 -2.39333E+03 5.98451E+02 3.08668E+02 1.88848E+01 2.30656E+03 2.36883E+03 2.43110E+03 - 1.38750E+01 -1.28414E+03 -2.03485E+03 -2.78556E+03 7.00266E+02 3.61119E+02 2.19726E+01 2.68467E+03 2.75709E+03 2.82951E+03 -1.11182E+03 -1.85311E+03 -2.59441E+03 6.90016E+02 3.52698E+02 1.53802E+01 2.49185E+03 2.55851E+03 2.62517E+03 -1.11182E+03 -1.75499E+03 -2.39817E+03 5.99708E+02 3.09315E+02 1.89229E+01 2.31123E+03 2.37362E+03 2.43602E+03 - 1.39000E+01 -1.28629E+03 -2.03835E+03 -2.79040E+03 7.01523E+02 3.61767E+02 2.20107E+01 2.68934E+03 2.76188E+03 2.83442E+03 -1.11397E+03 -1.85661E+03 -2.59926E+03 6.91273E+02 3.53346E+02 1.54183E+01 2.49652E+03 2.56330E+03 2.63009E+03 -1.11397E+03 -1.75849E+03 -2.40301E+03 6.00965E+02 3.09963E+02 1.89611E+01 2.31590E+03 2.37842E+03 2.44094E+03 - 1.39250E+01 -1.28845E+03 -2.04185E+03 -2.79525E+03 7.02780E+02 3.62414E+02 2.20488E+01 2.69401E+03 2.76668E+03 2.83934E+03 -1.11612E+03 -1.86011E+03 -2.60410E+03 6.92530E+02 3.53993E+02 1.54564E+01 2.50118E+03 2.56810E+03 2.63501E+03 -1.11612E+03 -1.76199E+03 -2.40786E+03 6.02222E+02 3.10610E+02 1.89992E+01 2.32057E+03 2.38321E+03 2.44586E+03 - 1.39500E+01 -1.29060E+03 -2.04534E+03 -2.80009E+03 7.04037E+02 3.63062E+02 2.20869E+01 2.69867E+03 2.77147E+03 2.84426E+03 -1.11828E+03 -1.86361E+03 -2.60894E+03 6.93787E+02 3.54641E+02 1.54945E+01 2.50585E+03 2.57289E+03 2.63993E+03 -1.11828E+03 -1.76549E+03 -2.41270E+03 6.03479E+02 3.11258E+02 1.90373E+01 2.32523E+03 2.38800E+03 2.45077E+03 - 1.39750E+01 -1.29276E+03 -2.04884E+03 -2.80493E+03 7.05294E+02 3.63709E+02 2.21250E+01 2.70334E+03 2.77626E+03 2.84918E+03 -1.12043E+03 -1.86711E+03 -2.61378E+03 6.95044E+02 3.55288E+02 1.55326E+01 2.51052E+03 2.57768E+03 2.64485E+03 -1.12043E+03 -1.76899E+03 -2.41754E+03 6.04736E+02 3.11905E+02 1.90754E+01 2.32990E+03 2.39280E+03 2.45569E+03 - 1.40000E+01 -1.20875E+03 -2.01053E+03 -2.81232E+03 7.46580E+02 3.81838E+02 1.70956E+01 2.70191E+03 2.77421E+03 2.84651E+03 -1.20875E+03 -1.91241E+03 -2.61608E+03 6.56272E+02 3.38455E+02 2.06383E+01 2.52129E+03 2.58932E+03 2.65736E+03 -1.03642E+03 -1.73068E+03 -2.42493E+03 6.46022E+02 3.30034E+02 1.40459E+01 2.32847E+03 2.39075E+03 2.45302E+03 - 1.40250E+01 -1.21090E+03 -2.01403E+03 -2.81716E+03 7.47837E+02 3.82485E+02 1.71337E+01 2.70658E+03 2.77900E+03 2.85143E+03 -1.21090E+03 -1.91591E+03 -2.62092E+03 6.57529E+02 3.39103E+02 2.06765E+01 2.52596E+03 2.59412E+03 2.66227E+03 -1.03858E+03 -1.73418E+03 -2.42977E+03 6.47279E+02 3.30681E+02 1.40841E+01 2.33314E+03 2.39554E+03 2.45794E+03 - 1.40500E+01 -1.21306E+03 -2.01753E+03 -2.82200E+03 7.49094E+02 3.83133E+02 1.71718E+01 2.71124E+03 2.78380E+03 2.85635E+03 -1.21306E+03 -1.91941E+03 -2.62576E+03 6.58786E+02 3.39750E+02 2.07146E+01 2.53063E+03 2.59891E+03 2.66719E+03 -1.04073E+03 -1.73767E+03 -2.43462E+03 6.48536E+02 3.31329E+02 1.41222E+01 2.33780E+03 2.40033E+03 2.46286E+03 - 1.40750E+01 -1.21521E+03 -2.02103E+03 -2.82685E+03 7.50351E+02 3.83780E+02 1.72100E+01 2.71591E+03 2.78859E+03 2.86127E+03 -1.21521E+03 -1.92291E+03 -2.63061E+03 6.60042E+02 3.40398E+02 2.07527E+01 2.53529E+03 2.60370E+03 2.67211E+03 -1.04289E+03 -1.74117E+03 -2.43946E+03 6.49793E+02 3.31977E+02 1.41603E+01 2.34247E+03 2.40513E+03 2.46778E+03 - 1.41000E+01 -1.21736E+03 -2.02453E+03 -2.83169E+03 7.51608E+02 3.84428E+02 1.72481E+01 2.72058E+03 2.79338E+03 2.86619E+03 -1.21736E+03 -1.92641E+03 -2.63545E+03 6.61299E+02 3.41045E+02 2.07908E+01 2.53996E+03 2.60850E+03 2.67703E+03 -1.04504E+03 -1.74467E+03 -2.44430E+03 6.51050E+02 3.32624E+02 1.41984E+01 2.34714E+03 2.40992E+03 2.47270E+03 - 1.41250E+01 -1.21952E+03 -2.02802E+03 -2.83653E+03 7.52865E+02 3.85076E+02 1.72862E+01 2.72525E+03 2.79818E+03 2.87110E+03 -1.21952E+03 -1.92990E+03 -2.64029E+03 6.62556E+02 3.41693E+02 2.08290E+01 2.54463E+03 2.61329E+03 2.68195E+03 -1.04719E+03 -1.74817E+03 -2.44914E+03 6.52307E+02 3.33272E+02 1.42366E+01 2.35181E+03 2.41471E+03 2.47762E+03 - 1.41500E+01 -1.22167E+03 -2.03152E+03 -2.84137E+03 7.54122E+02 3.85723E+02 1.73243E+01 2.72992E+03 2.80297E+03 2.87602E+03 -1.22167E+03 -1.93340E+03 -2.64513E+03 6.63813E+02 3.42340E+02 2.08671E+01 2.54930E+03 2.61808E+03 2.68687E+03 -1.04935E+03 -1.75167E+03 -2.45399E+03 6.53564E+02 3.33919E+02 1.42747E+01 2.35648E+03 2.41951E+03 2.48253E+03 - 1.41750E+01 -1.22383E+03 -2.03502E+03 -2.84622E+03 7.55379E+02 3.86371E+02 1.73624E+01 2.73458E+03 2.80776E+03 2.88094E+03 -1.22383E+03 -1.93690E+03 -2.64998E+03 6.65070E+02 3.42988E+02 2.09052E+01 2.55397E+03 2.62288E+03 2.69179E+03 -1.05150E+03 -1.75517E+03 -2.45883E+03 6.54821E+02 3.34567E+02 1.43128E+01 2.36114E+03 2.42430E+03 2.48745E+03 - 1.42000E+01 -1.22598E+03 -2.03852E+03 -2.85106E+03 7.56636E+02 3.87018E+02 1.74006E+01 2.73925E+03 2.81256E+03 2.88586E+03 -1.22598E+03 -1.94040E+03 -2.65482E+03 6.66327E+02 3.43635E+02 2.09433E+01 2.55863E+03 2.62767E+03 2.69670E+03 -1.05366E+03 -1.75866E+03 -2.46367E+03 6.56078E+02 3.35214E+02 1.43509E+01 2.36581E+03 2.42909E+03 2.49237E+03 - 1.42250E+01 -1.22813E+03 -2.04202E+03 -2.85590E+03 7.57893E+02 3.87666E+02 1.74387E+01 2.74392E+03 2.81735E+03 2.89078E+03 -1.22813E+03 -1.94390E+03 -2.65966E+03 6.67584E+02 3.44283E+02 2.09814E+01 2.56330E+03 2.63246E+03 2.70162E+03 -1.05581E+03 -1.76216E+03 -2.46851E+03 6.57335E+02 3.35862E+02 1.43890E+01 2.37048E+03 2.43389E+03 2.49729E+03 - 1.42500E+01 -1.23029E+03 -2.04552E+03 -2.86074E+03 7.59150E+02 3.88313E+02 1.74768E+01 2.74859E+03 2.82214E+03 2.89570E+03 -1.23029E+03 -1.94740E+03 -2.66450E+03 6.68841E+02 3.44930E+02 2.10196E+01 2.56797E+03 2.63726E+03 2.70654E+03 -1.05796E+03 -1.76566E+03 -2.47336E+03 6.58592E+02 3.36509E+02 1.44272E+01 2.37515E+03 2.43868E+03 2.50221E+03 - 1.42750E+01 -1.23244E+03 -2.04901E+03 -2.86559E+03 7.60407E+02 3.88961E+02 1.75149E+01 2.75326E+03 2.82694E+03 2.90062E+03 -1.23244E+03 -1.95089E+03 -2.66934E+03 6.70098E+02 3.45578E+02 2.10577E+01 2.57264E+03 2.64205E+03 2.71146E+03 -1.06012E+03 -1.76916E+03 -2.47820E+03 6.59849E+02 3.37157E+02 1.44653E+01 2.37982E+03 2.44347E+03 2.50713E+03 - 1.43000E+01 -1.23460E+03 -2.05251E+03 -2.87043E+03 7.61664E+02 3.89608E+02 1.75530E+01 2.75792E+03 2.83173E+03 2.90553E+03 -1.23460E+03 -1.95439E+03 -2.67419E+03 6.71355E+02 3.46226E+02 2.10958E+01 2.57731E+03 2.64684E+03 2.71638E+03 -1.06227E+03 -1.77266E+03 -2.48304E+03 6.61106E+02 3.37805E+02 1.45034E+01 2.38448E+03 2.44827E+03 2.51205E+03 - 1.43250E+01 -1.23675E+03 -2.05601E+03 -2.87527E+03 7.62921E+02 3.90256E+02 1.75912E+01 2.76259E+03 2.83652E+03 2.91045E+03 -1.23675E+03 -1.95789E+03 -2.67903E+03 6.72612E+02 3.46873E+02 2.11339E+01 2.58197E+03 2.65164E+03 2.72130E+03 -1.06443E+03 -1.77615E+03 -2.48788E+03 6.62363E+02 3.38452E+02 1.45415E+01 2.38915E+03 2.45306E+03 2.51697E+03 - 1.43500E+01 -1.23890E+03 -2.05951E+03 -2.88011E+03 7.64178E+02 3.90903E+02 1.76293E+01 2.76726E+03 2.84132E+03 2.91537E+03 -1.23890E+03 -1.96139E+03 -2.68387E+03 6.73869E+02 3.47521E+02 2.11720E+01 2.58664E+03 2.65643E+03 2.72622E+03 -1.06658E+03 -1.77965E+03 -2.49272E+03 6.63620E+02 3.39100E+02 1.45796E+01 2.39382E+03 2.45785E+03 2.52188E+03 - 1.43750E+01 -1.24106E+03 -2.06301E+03 -2.88496E+03 7.65435E+02 3.91551E+02 1.76674E+01 2.77193E+03 2.84611E+03 2.92029E+03 -1.24106E+03 -1.96489E+03 -2.68871E+03 6.75126E+02 3.48168E+02 2.12102E+01 2.59131E+03 2.66122E+03 2.73113E+03 -1.06873E+03 -1.78315E+03 -2.49757E+03 6.64877E+02 3.39747E+02 1.46178E+01 2.39849E+03 2.46265E+03 2.52680E+03 - 1.44000E+01 -1.24321E+03 -2.06651E+03 -2.88980E+03 7.66692E+02 3.92199E+02 1.77056E+01 2.77660E+03 2.85090E+03 2.92521E+03 -1.24321E+03 -1.96838E+03 -2.69356E+03 6.76383E+02 3.48816E+02 2.12483E+01 2.59598E+03 2.66602E+03 2.73605E+03 -1.07089E+03 -1.78665E+03 -2.50241E+03 6.66134E+02 3.40395E+02 1.46559E+01 2.40316E+03 2.46744E+03 2.53172E+03 - 1.44250E+01 -1.24537E+03 -2.07000E+03 -2.89464E+03 7.67949E+02 3.92846E+02 1.77436E+01 2.78126E+03 2.85570E+03 2.93013E+03 -1.24537E+03 -1.97188E+03 -2.69840E+03 6.77640E+02 3.49463E+02 2.12864E+01 2.60065E+03 2.67081E+03 2.74097E+03 -1.07304E+03 -1.79015E+03 -2.50725E+03 6.67391E+02 3.41042E+02 1.46940E+01 2.40782E+03 2.47223E+03 2.53664E+03 - 1.44500E+01 -1.24752E+03 -2.07350E+03 -2.89948E+03 7.69206E+02 3.93494E+02 1.77818E+01 2.78593E+03 2.86049E+03 2.93505E+03 -1.24752E+03 -1.97538E+03 -2.70324E+03 6.78897E+02 3.50111E+02 2.13245E+01 2.60531E+03 2.67560E+03 2.74589E+03 -1.07520E+03 -1.79365E+03 -2.51209E+03 6.68647E+02 3.41690E+02 1.47321E+01 2.41249E+03 2.47702E+03 2.54156E+03 - 1.44750E+01 -1.24967E+03 -2.07700E+03 -2.90432E+03 7.70463E+02 3.94141E+02 1.78199E+01 2.79060E+03 2.86528E+03 2.93996E+03 -1.24967E+03 -1.97888E+03 -2.70808E+03 6.80154E+02 3.50758E+02 2.13626E+01 2.60998E+03 2.68040E+03 2.75081E+03 -1.07735E+03 -1.79714E+03 -2.51694E+03 6.69904E+02 3.42337E+02 1.47702E+01 2.41716E+03 2.48182E+03 2.54648E+03 - 1.45000E+01 -1.25183E+03 -2.08050E+03 -2.90917E+03 7.71719E+02 3.94789E+02 1.78580E+01 2.79527E+03 2.87008E+03 2.94488E+03 -1.25183E+03 -1.98238E+03 -2.71293E+03 6.81411E+02 3.51406E+02 2.14008E+01 2.61465E+03 2.68519E+03 2.75573E+03 -1.07950E+03 -1.80064E+03 -2.52178E+03 6.71161E+02 3.42985E+02 1.48084E+01 2.42183E+03 2.48661E+03 2.55140E+03 - 1.45250E+01 -1.25398E+03 -2.08400E+03 -2.91401E+03 7.72976E+02 3.95436E+02 1.78962E+01 2.79994E+03 2.87487E+03 2.94980E+03 -1.25398E+03 -1.98588E+03 -2.71777E+03 6.82668E+02 3.52053E+02 2.14389E+01 2.61932E+03 2.68998E+03 2.76065E+03 -1.08166E+03 -1.80414E+03 -2.52662E+03 6.72418E+02 3.43632E+02 1.48465E+01 2.42650E+03 2.49140E+03 2.55631E+03 - 1.45500E+01 -1.25614E+03 -2.08749E+03 -2.91885E+03 7.74233E+02 3.96084E+02 1.79343E+01 2.80460E+03 2.87966E+03 2.95472E+03 -1.25614E+03 -1.98937E+03 -2.72261E+03 6.83925E+02 3.52701E+02 2.14770E+01 2.62399E+03 2.69478E+03 2.76556E+03 -1.08381E+03 -1.80764E+03 -2.53146E+03 6.73675E+02 3.44280E+02 1.48846E+01 2.43116E+03 2.49620E+03 2.56123E+03 - 1.45750E+01 -1.25829E+03 -2.09099E+03 -2.92369E+03 7.75490E+02 3.96731E+02 1.79724E+01 2.80927E+03 2.88446E+03 2.95964E+03 -1.25829E+03 -1.99287E+03 -2.72745E+03 6.85182E+02 3.53349E+02 2.15151E+01 2.62865E+03 2.69957E+03 2.77048E+03 -1.08597E+03 -1.81114E+03 -2.53631E+03 6.74932E+02 3.44928E+02 1.49227E+01 2.43583E+03 2.50099E+03 2.56615E+03 - 1.46000E+01 -1.26044E+03 -2.09449E+03 -2.92854E+03 7.76747E+02 3.97379E+02 1.80105E+01 2.81394E+03 2.88925E+03 2.96456E+03 -1.26044E+03 -1.99637E+03 -2.73230E+03 6.86439E+02 3.53996E+02 2.15532E+01 2.63332E+03 2.70436E+03 2.77540E+03 -1.08812E+03 -1.81463E+03 -2.54115E+03 6.76189E+02 3.45575E+02 1.49608E+01 2.44050E+03 2.50578E+03 2.57107E+03 - 1.46250E+01 -1.26260E+03 -2.09799E+03 -2.93338E+03 7.78004E+02 3.98026E+02 1.80486E+01 2.81861E+03 2.89404E+03 2.96948E+03 -1.26260E+03 -1.99987E+03 -2.73714E+03 6.87696E+02 3.54644E+02 2.15914E+01 2.63799E+03 2.70916E+03 2.78032E+03 -1.09028E+03 -1.81813E+03 -2.54599E+03 6.77446E+02 3.46223E+02 1.49990E+01 2.44517E+03 2.51058E+03 2.57599E+03 - 1.46500E+01 -1.26475E+03 -2.10149E+03 -2.93822E+03 7.79261E+02 3.98674E+02 1.80868E+01 2.82328E+03 2.89884E+03 2.97439E+03 -1.26475E+03 -2.00337E+03 -2.74198E+03 6.88953E+02 3.55291E+02 2.16295E+01 2.64266E+03 2.71395E+03 2.78524E+03 -1.09243E+03 -1.82163E+03 -2.55083E+03 6.78703E+02 3.46870E+02 1.50371E+01 2.44984E+03 2.51537E+03 2.58091E+03 - 1.46750E+01 -1.26691E+03 -2.10499E+03 -2.94306E+03 7.80518E+02 3.99322E+02 1.81249E+01 2.82794E+03 2.90363E+03 2.97931E+03 -1.26691E+03 -2.00686E+03 -2.74682E+03 6.90210E+02 3.55939E+02 2.16676E+01 2.64733E+03 2.71874E+03 2.79016E+03 -1.09458E+03 -1.82513E+03 -2.55568E+03 6.79960E+02 3.47518E+02 1.50752E+01 2.45450E+03 2.52016E+03 2.58583E+03 - 1.47000E+01 -1.26906E+03 -2.10848E+03 -2.94791E+03 7.81775E+02 3.99969E+02 1.81630E+01 2.83261E+03 2.90842E+03 2.98423E+03 -1.26906E+03 -2.01036E+03 -2.75166E+03 6.91467E+02 3.56586E+02 2.17057E+01 2.65199E+03 2.72354E+03 2.79508E+03 -1.09674E+03 -1.82863E+03 -2.56052E+03 6.81217E+02 3.48165E+02 1.51133E+01 2.45917E+03 2.52496E+03 2.59074E+03 - 1.47250E+01 -1.27122E+03 -2.11198E+03 -2.95275E+03 7.83032E+02 4.00617E+02 1.82011E+01 2.83728E+03 2.91322E+03 2.98915E+03 -1.27122E+03 -2.01386E+03 -2.75651E+03 6.92724E+02 3.57234E+02 2.17438E+01 2.65666E+03 2.72833E+03 2.79999E+03 -1.09889E+03 -1.83213E+03 -2.56536E+03 6.82474E+02 3.48813E+02 1.51514E+01 2.46384E+03 2.52975E+03 2.59566E+03 - 1.47500E+01 -1.27337E+03 -2.11548E+03 -2.95759E+03 7.84289E+02 4.01264E+02 1.82392E+01 2.84195E+03 2.91801E+03 2.99407E+03 -1.27337E+03 -2.01736E+03 -2.76135E+03 6.93981E+02 3.57881E+02 2.17820E+01 2.66133E+03 2.73312E+03 2.80491E+03 -1.10105E+03 -1.83562E+03 -2.57020E+03 6.83731E+02 3.49460E+02 1.51896E+01 2.46851E+03 2.53454E+03 2.60058E+03 - 1.47750E+01 -1.27552E+03 -2.11898E+03 -2.96243E+03 7.85546E+02 4.01912E+02 1.82774E+01 2.84662E+03 2.92280E+03 2.99899E+03 -1.27552E+03 -2.02086E+03 -2.76619E+03 6.95238E+02 3.58529E+02 2.18201E+01 2.66600E+03 2.73792E+03 2.80983E+03 -1.10320E+03 -1.83912E+03 -2.57504E+03 6.84988E+02 3.50108E+02 1.52277E+01 2.47318E+03 2.53934E+03 2.60550E+03 - 1.48000E+01 -1.27768E+03 -2.12248E+03 -2.96728E+03 7.86803E+02 4.02559E+02 1.83155E+01 2.85128E+03 2.92759E+03 3.00391E+03 -1.27768E+03 -2.02436E+03 -2.77103E+03 6.96495E+02 3.59176E+02 2.18582E+01 2.67067E+03 2.74271E+03 2.81475E+03 -1.10535E+03 -1.84262E+03 -2.57989E+03 6.86245E+02 3.50755E+02 1.52658E+01 2.47784E+03 2.54413E+03 2.61042E+03 - 1.48250E+01 -1.27983E+03 -2.12597E+03 -2.97212E+03 7.88060E+02 4.03207E+02 1.83536E+01 2.85595E+03 2.93239E+03 3.00882E+03 -1.27983E+03 -2.02785E+03 -2.77588E+03 6.97752E+02 3.59824E+02 2.18963E+01 2.67533E+03 2.74750E+03 2.81967E+03 -1.10751E+03 -1.84612E+03 -2.58473E+03 6.87502E+02 3.51403E+02 1.53039E+01 2.48251E+03 2.54892E+03 2.61534E+03 - 1.48500E+01 -1.28199E+03 -2.12947E+03 -2.97696E+03 7.89317E+02 4.03854E+02 1.83917E+01 2.86062E+03 2.93718E+03 3.01374E+03 -1.28199E+03 -2.03135E+03 -2.78072E+03 6.99009E+02 3.60472E+02 2.19344E+01 2.68000E+03 2.75230E+03 2.82459E+03 -1.10966E+03 -1.84962E+03 -2.58957E+03 6.88759E+02 3.52051E+02 1.53420E+01 2.48718E+03 2.55372E+03 2.62026E+03 - 1.48750E+01 -1.28414E+03 -2.13297E+03 -2.98180E+03 7.90574E+02 4.04502E+02 1.84298E+01 2.86529E+03 2.94197E+03 3.01866E+03 -1.28414E+03 -2.03485E+03 -2.78556E+03 7.00266E+02 3.61119E+02 2.19726E+01 2.68467E+03 2.75709E+03 2.82951E+03 -1.11182E+03 -1.85311E+03 -2.59441E+03 6.90016E+02 3.52698E+02 1.53802E+01 2.49185E+03 2.55851E+03 2.62517E+03 - 1.49000E+01 -1.28629E+03 -2.13647E+03 -2.98664E+03 7.91831E+02 4.05150E+02 1.84680E+01 2.86996E+03 2.94677E+03 3.02358E+03 -1.28629E+03 -2.03835E+03 -2.79040E+03 7.01523E+02 3.61767E+02 2.20107E+01 2.68934E+03 2.76188E+03 2.83442E+03 -1.11397E+03 -1.85661E+03 -2.59926E+03 6.91273E+02 3.53346E+02 1.54183E+01 2.49652E+03 2.56330E+03 2.63009E+03 - 1.49250E+01 -1.28845E+03 -2.13997E+03 -2.99149E+03 7.93088E+02 4.05797E+02 1.85061E+01 2.87462E+03 2.95156E+03 3.02850E+03 -1.28845E+03 -2.04185E+03 -2.79525E+03 7.02780E+02 3.62414E+02 2.20488E+01 2.69401E+03 2.76668E+03 2.83934E+03 -1.11612E+03 -1.86011E+03 -2.60410E+03 6.92530E+02 3.53993E+02 1.54564E+01 2.50118E+03 2.56810E+03 2.63501E+03 - 1.49500E+01 -1.29060E+03 -2.14347E+03 -2.99633E+03 7.94345E+02 4.06445E+02 1.85442E+01 2.87929E+03 2.95635E+03 3.03342E+03 -1.29060E+03 -2.04534E+03 -2.80009E+03 7.04037E+02 3.63062E+02 2.20869E+01 2.69867E+03 2.77147E+03 2.84426E+03 -1.11828E+03 -1.86361E+03 -2.60894E+03 6.93787E+02 3.54641E+02 1.54945E+01 2.50585E+03 2.57289E+03 2.63993E+03 - 1.49750E+01 -1.29276E+03 -2.14696E+03 -3.00117E+03 7.95602E+02 4.07092E+02 1.85823E+01 2.88396E+03 2.96115E+03 3.03834E+03 -1.29276E+03 -2.04884E+03 -2.80493E+03 7.05294E+02 3.63709E+02 2.21250E+01 2.70334E+03 2.77626E+03 2.84918E+03 -1.12043E+03 -1.86711E+03 -2.61378E+03 6.95044E+02 3.55288E+02 1.55326E+01 2.51052E+03 2.57768E+03 2.64485E+03 - 1.50000E+01 -1.38107E+03 -2.19227E+03 -3.00347E+03 7.56830E+02 3.90259E+02 2.36880E+01 2.89473E+03 2.97279E+03 3.05084E+03 -1.20875E+03 -2.01053E+03 -2.81232E+03 7.46580E+02 3.81838E+02 1.70956E+01 2.70191E+03 2.77421E+03 2.84651E+03 -1.20875E+03 -1.91241E+03 -2.61608E+03 6.56272E+02 3.38455E+02 2.06383E+01 2.52129E+03 2.58932E+03 2.65736E+03 - 1.50250E+01 -1.38323E+03 -2.19577E+03 -3.00831E+03 7.58087E+02 3.90906E+02 2.37261E+01 2.89940E+03 2.97758E+03 3.05576E+03 -1.21090E+03 -2.01403E+03 -2.81716E+03 7.47837E+02 3.82485E+02 1.71337E+01 2.70658E+03 2.77900E+03 2.85143E+03 -1.21090E+03 -1.91591E+03 -2.62092E+03 6.57529E+02 3.39103E+02 2.06765E+01 2.52596E+03 2.59412E+03 2.66227E+03 - 1.50500E+01 -1.38538E+03 -2.19927E+03 -3.01315E+03 7.59344E+02 3.91554E+02 2.37642E+01 2.90407E+03 2.98237E+03 3.06068E+03 -1.21306E+03 -2.01753E+03 -2.82200E+03 7.49094E+02 3.83133E+02 1.71718E+01 2.71124E+03 2.78380E+03 2.85635E+03 -1.21306E+03 -1.91941E+03 -2.62576E+03 6.58786E+02 3.39750E+02 2.07146E+01 2.53063E+03 2.59891E+03 2.66719E+03 - 1.50750E+01 -1.38753E+03 -2.20276E+03 -3.01799E+03 7.60601E+02 3.92201E+02 2.38024E+01 2.90873E+03 2.98717E+03 3.06560E+03 -1.21521E+03 -2.02103E+03 -2.82685E+03 7.50351E+02 3.83780E+02 1.72100E+01 2.71591E+03 2.78859E+03 2.86127E+03 -1.21521E+03 -1.92291E+03 -2.63061E+03 6.60042E+02 3.40398E+02 2.07527E+01 2.53529E+03 2.60370E+03 2.67211E+03 - 1.51000E+01 -1.38969E+03 -2.20626E+03 -3.02284E+03 7.61857E+02 3.92849E+02 2.38405E+01 2.91340E+03 2.99196E+03 3.07052E+03 -1.21736E+03 -2.02453E+03 -2.83169E+03 7.51608E+02 3.84428E+02 1.72481E+01 2.72058E+03 2.79338E+03 2.86619E+03 -1.21736E+03 -1.92641E+03 -2.63545E+03 6.61299E+02 3.41045E+02 2.07908E+01 2.53996E+03 2.60850E+03 2.67703E+03 - 1.51250E+01 -1.39184E+03 -2.20976E+03 -3.02768E+03 7.63115E+02 3.93497E+02 2.38786E+01 2.91807E+03 2.99675E+03 3.07544E+03 -1.21952E+03 -2.02802E+03 -2.83653E+03 7.52865E+02 3.85076E+02 1.72862E+01 2.72525E+03 2.79818E+03 2.87110E+03 -1.21952E+03 -1.92990E+03 -2.64029E+03 6.62556E+02 3.41693E+02 2.08290E+01 2.54463E+03 2.61329E+03 2.68195E+03 - 1.51500E+01 -1.39400E+03 -2.21326E+03 -3.03252E+03 7.64371E+02 3.94144E+02 2.39167E+01 2.92274E+03 3.00155E+03 3.08035E+03 -1.22167E+03 -2.03152E+03 -2.84137E+03 7.54122E+02 3.85723E+02 1.73243E+01 2.72992E+03 2.80297E+03 2.87602E+03 -1.22167E+03 -1.93340E+03 -2.64513E+03 6.63813E+02 3.42340E+02 2.08671E+01 2.54930E+03 2.61808E+03 2.68687E+03 - 1.51750E+01 -1.39615E+03 -2.21676E+03 -3.03736E+03 7.65628E+02 3.94792E+02 2.39548E+01 2.92741E+03 3.00634E+03 3.08527E+03 -1.22383E+03 -2.03502E+03 -2.84622E+03 7.55379E+02 3.86371E+02 1.73624E+01 2.73458E+03 2.80776E+03 2.88094E+03 -1.22383E+03 -1.93690E+03 -2.64998E+03 6.65070E+02 3.42988E+02 2.09052E+01 2.55397E+03 2.62288E+03 2.69179E+03 - 1.52000E+01 -1.39830E+03 -2.22026E+03 -3.04221E+03 7.66885E+02 3.95439E+02 2.39930E+01 2.93207E+03 3.01113E+03 3.09019E+03 -1.22598E+03 -2.03852E+03 -2.85106E+03 7.56636E+02 3.87018E+02 1.74006E+01 2.73925E+03 2.81256E+03 2.88586E+03 -1.22598E+03 -1.94040E+03 -2.65482E+03 6.66327E+02 3.43635E+02 2.09433E+01 2.55863E+03 2.62767E+03 2.69670E+03 - 1.52250E+01 -1.40046E+03 -2.22375E+03 -3.04705E+03 7.68142E+02 3.96087E+02 2.40311E+01 2.93674E+03 3.01593E+03 3.09511E+03 -1.22813E+03 -2.04202E+03 -2.85590E+03 7.57893E+02 3.87666E+02 1.74387E+01 2.74392E+03 2.81735E+03 2.89078E+03 -1.22813E+03 -1.94390E+03 -2.65966E+03 6.67584E+02 3.44283E+02 2.09814E+01 2.56330E+03 2.63246E+03 2.70162E+03 - 1.52500E+01 -1.40261E+03 -2.22725E+03 -3.05189E+03 7.69399E+02 3.96734E+02 2.40692E+01 2.94141E+03 3.02072E+03 3.10003E+03 -1.23029E+03 -2.04552E+03 -2.86074E+03 7.59150E+02 3.88313E+02 1.74768E+01 2.74859E+03 2.82214E+03 2.89570E+03 -1.23029E+03 -1.94740E+03 -2.66450E+03 6.68841E+02 3.44930E+02 2.10196E+01 2.56797E+03 2.63726E+03 2.70654E+03 - 1.52750E+01 -1.40477E+03 -2.23075E+03 -3.05673E+03 7.70656E+02 3.97382E+02 2.41074E+01 2.94608E+03 3.02551E+03 3.10495E+03 -1.23244E+03 -2.04901E+03 -2.86559E+03 7.60407E+02 3.88961E+02 1.75149E+01 2.75326E+03 2.82694E+03 2.90062E+03 -1.23244E+03 -1.95089E+03 -2.66934E+03 6.70098E+02 3.45578E+02 2.10577E+01 2.57264E+03 2.64205E+03 2.71146E+03 - 1.53000E+01 -1.40692E+03 -2.23425E+03 -3.06158E+03 7.71913E+02 3.98029E+02 2.41454E+01 2.95075E+03 3.03031E+03 3.10987E+03 -1.23460E+03 -2.05251E+03 -2.87043E+03 7.61664E+02 3.89608E+02 1.75530E+01 2.75792E+03 2.83173E+03 2.90553E+03 -1.23460E+03 -1.95439E+03 -2.67419E+03 6.71355E+02 3.46226E+02 2.10958E+01 2.57731E+03 2.64684E+03 2.71638E+03 - 1.53250E+01 -1.40907E+03 -2.23775E+03 -3.06642E+03 7.73170E+02 3.98677E+02 2.41836E+01 2.95541E+03 3.03510E+03 3.11478E+03 -1.23675E+03 -2.05601E+03 -2.87527E+03 7.62921E+02 3.90256E+02 1.75912E+01 2.76259E+03 2.83652E+03 2.91045E+03 -1.23675E+03 -1.95789E+03 -2.67903E+03 6.72612E+02 3.46873E+02 2.11339E+01 2.58197E+03 2.65164E+03 2.72130E+03 - 1.53500E+01 -1.41123E+03 -2.24124E+03 -3.07126E+03 7.74427E+02 3.99324E+02 2.42217E+01 2.96008E+03 3.03989E+03 3.11970E+03 -1.23890E+03 -2.05951E+03 -2.88011E+03 7.64178E+02 3.90903E+02 1.76293E+01 2.76726E+03 2.84132E+03 2.91537E+03 -1.23890E+03 -1.96139E+03 -2.68387E+03 6.73869E+02 3.47521E+02 2.11720E+01 2.58664E+03 2.65643E+03 2.72622E+03 - 1.53750E+01 -1.41338E+03 -2.24474E+03 -3.07610E+03 7.75684E+02 3.99972E+02 2.42598E+01 2.96475E+03 3.04469E+03 3.12462E+03 -1.24106E+03 -2.06301E+03 -2.88496E+03 7.65435E+02 3.91551E+02 1.76674E+01 2.77193E+03 2.84611E+03 2.92029E+03 -1.24106E+03 -1.96489E+03 -2.68871E+03 6.75126E+02 3.48168E+02 2.12102E+01 2.59131E+03 2.66122E+03 2.73113E+03 - 1.54000E+01 -1.41554E+03 -2.24824E+03 -3.08094E+03 7.76941E+02 4.00620E+02 2.42980E+01 2.96942E+03 3.04948E+03 3.12954E+03 -1.24321E+03 -2.06651E+03 -2.88980E+03 7.66692E+02 3.92199E+02 1.77056E+01 2.77660E+03 2.85090E+03 2.92521E+03 -1.24321E+03 -1.96838E+03 -2.69356E+03 6.76383E+02 3.48816E+02 2.12483E+01 2.59598E+03 2.66602E+03 2.73605E+03 - 1.54250E+01 -1.41769E+03 -2.25174E+03 -3.08579E+03 7.78198E+02 4.01267E+02 2.43360E+01 2.97409E+03 3.05427E+03 3.13446E+03 -1.24537E+03 -2.07000E+03 -2.89464E+03 7.67949E+02 3.92846E+02 1.77436E+01 2.78126E+03 2.85570E+03 2.93013E+03 -1.24537E+03 -1.97188E+03 -2.69840E+03 6.77640E+02 3.49463E+02 2.12864E+01 2.60065E+03 2.67081E+03 2.74097E+03 - 1.54500E+01 -1.41984E+03 -2.25524E+03 -3.09063E+03 7.79455E+02 4.01915E+02 2.43742E+01 2.97875E+03 3.05907E+03 3.13938E+03 -1.24752E+03 -2.07350E+03 -2.89948E+03 7.69206E+02 3.93494E+02 1.77818E+01 2.78593E+03 2.86049E+03 2.93505E+03 -1.24752E+03 -1.97538E+03 -2.70324E+03 6.78897E+02 3.50111E+02 2.13245E+01 2.60531E+03 2.67560E+03 2.74589E+03 - 1.54750E+01 -1.42200E+03 -2.25874E+03 -3.09547E+03 7.80712E+02 4.02562E+02 2.44123E+01 2.98342E+03 3.06386E+03 3.14430E+03 -1.24967E+03 -2.07700E+03 -2.90432E+03 7.70463E+02 3.94141E+02 1.78199E+01 2.79060E+03 2.86528E+03 2.93996E+03 -1.24967E+03 -1.97888E+03 -2.70808E+03 6.80154E+02 3.50758E+02 2.13626E+01 2.60998E+03 2.68040E+03 2.75081E+03 - 1.55000E+01 -1.42415E+03 -2.26223E+03 -3.10031E+03 7.81969E+02 4.03210E+02 2.44504E+01 2.98809E+03 3.06865E+03 3.14921E+03 -1.25183E+03 -2.08050E+03 -2.90917E+03 7.71719E+02 3.94789E+02 1.78580E+01 2.79527E+03 2.87008E+03 2.94488E+03 -1.25183E+03 -1.98238E+03 -2.71293E+03 6.81411E+02 3.51406E+02 2.14008E+01 2.61465E+03 2.68519E+03 2.75573E+03 - 1.55250E+01 -1.42631E+03 -2.26573E+03 -3.10516E+03 7.83226E+02 4.03857E+02 2.44886E+01 2.99276E+03 3.07345E+03 3.15413E+03 -1.25398E+03 -2.08400E+03 -2.91401E+03 7.72976E+02 3.95436E+02 1.78962E+01 2.79994E+03 2.87487E+03 2.94980E+03 -1.25398E+03 -1.98588E+03 -2.71777E+03 6.82668E+02 3.52053E+02 2.14389E+01 2.61932E+03 2.68998E+03 2.76065E+03 - 1.55500E+01 -1.42846E+03 -2.26923E+03 -3.11000E+03 7.84483E+02 4.04505E+02 2.45266E+01 2.99743E+03 3.07824E+03 3.15905E+03 -1.25614E+03 -2.08749E+03 -2.91885E+03 7.74233E+02 3.96084E+02 1.79343E+01 2.80460E+03 2.87966E+03 2.95472E+03 -1.25614E+03 -1.98937E+03 -2.72261E+03 6.83925E+02 3.52701E+02 2.14770E+01 2.62399E+03 2.69478E+03 2.76556E+03 - 1.55750E+01 -1.43061E+03 -2.27273E+03 -3.11484E+03 7.85740E+02 4.05152E+02 2.45648E+01 3.00209E+03 3.08303E+03 3.16397E+03 -1.25829E+03 -2.09099E+03 -2.92369E+03 7.75490E+02 3.96731E+02 1.79724E+01 2.80927E+03 2.88446E+03 2.95964E+03 -1.25829E+03 -1.99287E+03 -2.72745E+03 6.85182E+02 3.53349E+02 2.15151E+01 2.62865E+03 2.69957E+03 2.77048E+03 - 1.56000E+01 -1.43277E+03 -2.27623E+03 -3.11968E+03 7.86997E+02 4.05800E+02 2.46029E+01 3.00676E+03 3.08783E+03 3.16889E+03 -1.26044E+03 -2.09449E+03 -2.92854E+03 7.76747E+02 3.97379E+02 1.80105E+01 2.81394E+03 2.88925E+03 2.96456E+03 -1.26044E+03 -1.99637E+03 -2.73230E+03 6.86439E+02 3.53996E+02 2.15532E+01 2.63332E+03 2.70436E+03 2.77540E+03 - 1.56250E+01 -1.43492E+03 -2.27972E+03 -3.12453E+03 7.88254E+02 4.06448E+02 2.46410E+01 3.01143E+03 3.09262E+03 3.17381E+03 -1.26260E+03 -2.09799E+03 -2.93338E+03 7.78004E+02 3.98026E+02 1.80486E+01 2.81861E+03 2.89404E+03 2.96948E+03 -1.26260E+03 -1.99987E+03 -2.73714E+03 6.87696E+02 3.54644E+02 2.15914E+01 2.63799E+03 2.70916E+03 2.78032E+03 - 1.56500E+01 -1.43708E+03 -2.28322E+03 -3.12937E+03 7.89511E+02 4.07095E+02 2.46792E+01 3.01610E+03 3.09741E+03 3.17873E+03 -1.26475E+03 -2.10149E+03 -2.93822E+03 7.79261E+02 3.98674E+02 1.80868E+01 2.82328E+03 2.89884E+03 2.97439E+03 -1.26475E+03 -2.00337E+03 -2.74198E+03 6.88953E+02 3.55291E+02 2.16295E+01 2.64266E+03 2.71395E+03 2.78524E+03 - 1.56750E+01 -1.43923E+03 -2.28672E+03 -3.13421E+03 7.90768E+02 4.07743E+02 2.47172E+01 3.02077E+03 3.10221E+03 3.18365E+03 -1.26691E+03 -2.10499E+03 -2.94306E+03 7.80518E+02 3.99322E+02 1.81249E+01 2.82794E+03 2.90363E+03 2.97931E+03 -1.26691E+03 -2.00686E+03 -2.74682E+03 6.90210E+02 3.55939E+02 2.16676E+01 2.64733E+03 2.71874E+03 2.79016E+03 - 1.57000E+01 -1.44139E+03 -2.29022E+03 -3.13905E+03 7.92025E+02 4.08390E+02 2.47554E+01 3.02543E+03 3.10700E+03 3.18856E+03 -1.26906E+03 -2.10848E+03 -2.94791E+03 7.81775E+02 3.99969E+02 1.81630E+01 2.83261E+03 2.90842E+03 2.98423E+03 -1.26906E+03 -2.01036E+03 -2.75166E+03 6.91467E+02 3.56586E+02 2.17057E+01 2.65199E+03 2.72354E+03 2.79508E+03 - 1.57250E+01 -1.44354E+03 -2.29372E+03 -3.14390E+03 7.93282E+02 4.09038E+02 2.47935E+01 3.03010E+03 3.11179E+03 3.19348E+03 -1.27122E+03 -2.11198E+03 -2.95275E+03 7.83032E+02 4.00617E+02 1.82011E+01 2.83728E+03 2.91322E+03 2.98915E+03 -1.27122E+03 -2.01386E+03 -2.75651E+03 6.92724E+02 3.57234E+02 2.17438E+01 2.65666E+03 2.72833E+03 2.79999E+03 - 1.57500E+01 -1.44569E+03 -2.29722E+03 -3.14874E+03 7.94539E+02 4.09685E+02 2.48316E+01 3.03477E+03 3.11659E+03 3.19840E+03 -1.27337E+03 -2.11548E+03 -2.95759E+03 7.84289E+02 4.01264E+02 1.82392E+01 2.84195E+03 2.91801E+03 2.99407E+03 -1.27337E+03 -2.01736E+03 -2.76135E+03 6.93981E+02 3.57881E+02 2.17820E+01 2.66133E+03 2.73312E+03 2.80491E+03 - 1.57750E+01 -1.44785E+03 -2.30071E+03 -3.15358E+03 7.95796E+02 4.10333E+02 2.48698E+01 3.03944E+03 3.12138E+03 3.20332E+03 -1.27552E+03 -2.11898E+03 -2.96243E+03 7.85546E+02 4.01912E+02 1.82774E+01 2.84662E+03 2.92280E+03 2.99899E+03 -1.27552E+03 -2.02086E+03 -2.76619E+03 6.95238E+02 3.58529E+02 2.18201E+01 2.66600E+03 2.73792E+03 2.80983E+03 - 1.58000E+01 -1.45000E+03 -2.30421E+03 -3.15842E+03 7.97053E+02 4.10980E+02 2.49078E+01 3.04411E+03 3.12617E+03 3.20824E+03 -1.27768E+03 -2.12248E+03 -2.96728E+03 7.86803E+02 4.02559E+02 1.83155E+01 2.85128E+03 2.92759E+03 3.00391E+03 -1.27768E+03 -2.02436E+03 -2.77103E+03 6.96495E+02 3.59176E+02 2.18582E+01 2.67067E+03 2.74271E+03 2.81475E+03 - 1.58250E+01 -1.45216E+03 -2.30771E+03 -3.16326E+03 7.98310E+02 4.11628E+02 2.49460E+01 3.04877E+03 3.13097E+03 3.21316E+03 -1.27983E+03 -2.12597E+03 -2.97212E+03 7.88060E+02 4.03207E+02 1.83536E+01 2.85595E+03 2.93239E+03 3.00882E+03 -1.27983E+03 -2.02785E+03 -2.77588E+03 6.97752E+02 3.59824E+02 2.18963E+01 2.67533E+03 2.74750E+03 2.81967E+03 - 1.58500E+01 -1.45431E+03 -2.31121E+03 -3.16811E+03 7.99567E+02 4.12275E+02 2.49841E+01 3.05344E+03 3.13576E+03 3.21808E+03 -1.28199E+03 -2.12947E+03 -2.97696E+03 7.89317E+02 4.03854E+02 1.83917E+01 2.86062E+03 2.93718E+03 3.01374E+03 -1.28199E+03 -2.03135E+03 -2.78072E+03 6.99009E+02 3.60472E+02 2.19344E+01 2.68000E+03 2.75230E+03 2.82459E+03 - 1.58750E+01 -1.45646E+03 -2.31471E+03 -3.17295E+03 8.00824E+02 4.12923E+02 2.50222E+01 3.05811E+03 3.14055E+03 3.22299E+03 -1.28414E+03 -2.13297E+03 -2.98180E+03 7.90574E+02 4.04502E+02 1.84298E+01 2.86529E+03 2.94197E+03 3.01866E+03 -1.28414E+03 -2.03485E+03 -2.78556E+03 7.00266E+02 3.61119E+02 2.19726E+01 2.68467E+03 2.75709E+03 2.82951E+03 - 1.59000E+01 -1.45862E+03 -2.31820E+03 -3.17779E+03 8.02081E+02 4.13571E+02 2.50604E+01 3.06278E+03 3.14535E+03 3.22791E+03 -1.28629E+03 -2.13647E+03 -2.98664E+03 7.91831E+02 4.05150E+02 1.84680E+01 2.86996E+03 2.94677E+03 3.02358E+03 -1.28629E+03 -2.03835E+03 -2.79040E+03 7.01523E+02 3.61767E+02 2.20107E+01 2.68934E+03 2.76188E+03 2.83442E+03 - 1.59250E+01 -1.46077E+03 -2.32170E+03 -3.18263E+03 8.03338E+02 4.14218E+02 2.50984E+01 3.06745E+03 3.15014E+03 3.23283E+03 -1.28845E+03 -2.13997E+03 -2.99149E+03 7.93088E+02 4.05797E+02 1.85061E+01 2.87462E+03 2.95156E+03 3.02850E+03 -1.28845E+03 -2.04185E+03 -2.79525E+03 7.02780E+02 3.62414E+02 2.20488E+01 2.69401E+03 2.76668E+03 2.83934E+03 - 1.59500E+01 -1.46293E+03 -2.32520E+03 -3.18748E+03 8.04595E+02 4.14866E+02 2.51366E+01 3.07211E+03 3.15493E+03 3.23775E+03 -1.29060E+03 -2.14347E+03 -2.99633E+03 7.94345E+02 4.06445E+02 1.85442E+01 2.87929E+03 2.95635E+03 3.03342E+03 -1.29060E+03 -2.04534E+03 -2.80009E+03 7.04037E+02 3.63062E+02 2.20869E+01 2.69867E+03 2.77147E+03 2.84426E+03 - 1.59750E+01 -1.46508E+03 -2.32870E+03 -3.19232E+03 8.05852E+02 4.15513E+02 2.51747E+01 3.07678E+03 3.15973E+03 3.24267E+03 -1.29276E+03 -2.14696E+03 -3.00117E+03 7.95602E+02 4.07092E+02 1.85823E+01 2.88396E+03 2.96115E+03 3.03834E+03 -1.29276E+03 -2.04884E+03 -2.80493E+03 7.05294E+02 3.63709E+02 2.21250E+01 2.70334E+03 2.77626E+03 2.84918E+03 - 1.60000E+01 -1.38107E+03 -2.29039E+03 -3.19971E+03 8.47138E+02 4.33642E+02 2.01453E+01 3.07535E+03 3.15767E+03 3.24000E+03 -1.38107E+03 -2.19227E+03 -3.00347E+03 7.56830E+02 3.90259E+02 2.36880E+01 2.89473E+03 2.97279E+03 3.05084E+03 -1.20875E+03 -2.01053E+03 -2.81232E+03 7.46580E+02 3.81838E+02 1.70956E+01 2.70191E+03 2.77421E+03 2.84651E+03 - 1.60250E+01 -1.38323E+03 -2.29389E+03 -3.20455E+03 8.48395E+02 4.34289E+02 2.01834E+01 3.08002E+03 3.16247E+03 3.24492E+03 -1.38323E+03 -2.19577E+03 -3.00831E+03 7.58087E+02 3.90906E+02 2.37261E+01 2.89940E+03 2.97758E+03 3.05576E+03 -1.21090E+03 -2.01403E+03 -2.81716E+03 7.47837E+02 3.82485E+02 1.71337E+01 2.70658E+03 2.77900E+03 2.85143E+03 - 1.60500E+01 -1.38538E+03 -2.29739E+03 -3.20939E+03 8.49652E+02 4.34937E+02 2.02215E+01 3.08468E+03 3.16726E+03 3.24984E+03 -1.38538E+03 -2.19927E+03 -3.01315E+03 7.59344E+02 3.91554E+02 2.37642E+01 2.90407E+03 2.98237E+03 3.06068E+03 -1.21306E+03 -2.01753E+03 -2.82200E+03 7.49094E+02 3.83133E+02 1.71718E+01 2.71124E+03 2.78380E+03 2.85635E+03 - 1.60750E+01 -1.38753E+03 -2.30088E+03 -3.21424E+03 8.50909E+02 4.35584E+02 2.02596E+01 3.08935E+03 3.17205E+03 3.25475E+03 -1.38753E+03 -2.20276E+03 -3.01799E+03 7.60601E+02 3.92201E+02 2.38024E+01 2.90873E+03 2.98717E+03 3.06560E+03 -1.21521E+03 -2.02103E+03 -2.82685E+03 7.50351E+02 3.83780E+02 1.72100E+01 2.71591E+03 2.78859E+03 2.86127E+03 - 1.61000E+01 -1.38969E+03 -2.30438E+03 -3.21908E+03 8.52166E+02 4.36232E+02 2.02977E+01 3.09402E+03 3.17685E+03 3.25967E+03 -1.38969E+03 -2.20626E+03 -3.02284E+03 7.61857E+02 3.92849E+02 2.38405E+01 2.91340E+03 2.99196E+03 3.07052E+03 -1.21736E+03 -2.02453E+03 -2.83169E+03 7.51608E+02 3.84428E+02 1.72481E+01 2.72058E+03 2.79338E+03 2.86619E+03 - 1.61250E+01 -1.39184E+03 -2.30788E+03 -3.22392E+03 8.53423E+02 4.36879E+02 2.03359E+01 3.09869E+03 3.18164E+03 3.26459E+03 -1.39184E+03 -2.20976E+03 -3.02768E+03 7.63115E+02 3.93497E+02 2.38786E+01 2.91807E+03 2.99675E+03 3.07544E+03 -1.21952E+03 -2.02802E+03 -2.83653E+03 7.52865E+02 3.85076E+02 1.72862E+01 2.72525E+03 2.79818E+03 2.87110E+03 - 1.61500E+01 -1.39400E+03 -2.31138E+03 -3.22876E+03 8.54680E+02 4.37527E+02 2.03740E+01 3.10336E+03 3.18643E+03 3.26951E+03 -1.39400E+03 -2.21326E+03 -3.03252E+03 7.64371E+02 3.94144E+02 2.39167E+01 2.92274E+03 3.00155E+03 3.08035E+03 -1.22167E+03 -2.03152E+03 -2.84137E+03 7.54122E+02 3.85723E+02 1.73243E+01 2.72992E+03 2.80297E+03 2.87602E+03 - 1.61750E+01 -1.39615E+03 -2.31488E+03 -3.23360E+03 8.55937E+02 4.38174E+02 2.04121E+01 3.10802E+03 3.19123E+03 3.27443E+03 -1.39615E+03 -2.21676E+03 -3.03736E+03 7.65628E+02 3.94792E+02 2.39548E+01 2.92741E+03 3.00634E+03 3.08527E+03 -1.22383E+03 -2.03502E+03 -2.84622E+03 7.55379E+02 3.86371E+02 1.73624E+01 2.73458E+03 2.80776E+03 2.88094E+03 - 1.62000E+01 -1.39830E+03 -2.31838E+03 -3.23845E+03 8.57194E+02 4.38822E+02 2.04503E+01 3.11269E+03 3.19602E+03 3.27935E+03 -1.39830E+03 -2.22026E+03 -3.04221E+03 7.66885E+02 3.95439E+02 2.39930E+01 2.93207E+03 3.01113E+03 3.09019E+03 -1.22598E+03 -2.03852E+03 -2.85106E+03 7.56636E+02 3.87018E+02 1.74006E+01 2.73925E+03 2.81256E+03 2.88586E+03 - 1.62250E+01 -1.40046E+03 -2.32187E+03 -3.24329E+03 8.58451E+02 4.39470E+02 2.04883E+01 3.11736E+03 3.20081E+03 3.28427E+03 -1.40046E+03 -2.22375E+03 -3.04705E+03 7.68142E+02 3.96087E+02 2.40311E+01 2.93674E+03 3.01593E+03 3.09511E+03 -1.22813E+03 -2.04202E+03 -2.85590E+03 7.57893E+02 3.87666E+02 1.74387E+01 2.74392E+03 2.81735E+03 2.89078E+03 - 1.62500E+01 -1.40261E+03 -2.32537E+03 -3.24813E+03 8.59708E+02 4.40117E+02 2.05265E+01 3.12203E+03 3.20561E+03 3.28918E+03 -1.40261E+03 -2.22725E+03 -3.05189E+03 7.69399E+02 3.96734E+02 2.40692E+01 2.94141E+03 3.02072E+03 3.10003E+03 -1.23029E+03 -2.04552E+03 -2.86074E+03 7.59150E+02 3.88313E+02 1.74768E+01 2.74859E+03 2.82214E+03 2.89570E+03 - 1.62750E+01 -1.40477E+03 -2.32887E+03 -3.25297E+03 8.60965E+02 4.40765E+02 2.05646E+01 3.12670E+03 3.21040E+03 3.29410E+03 -1.40477E+03 -2.23075E+03 -3.05673E+03 7.70656E+02 3.97382E+02 2.41074E+01 2.94608E+03 3.02551E+03 3.10495E+03 -1.23244E+03 -2.04901E+03 -2.86559E+03 7.60407E+02 3.88961E+02 1.75149E+01 2.75326E+03 2.82694E+03 2.90062E+03 - 1.63000E+01 -1.40692E+03 -2.33237E+03 -3.25782E+03 8.62222E+02 4.41412E+02 2.06027E+01 3.13136E+03 3.21519E+03 3.29902E+03 -1.40692E+03 -2.23425E+03 -3.06158E+03 7.71913E+02 3.98029E+02 2.41454E+01 2.95075E+03 3.03031E+03 3.10987E+03 -1.23460E+03 -2.05251E+03 -2.87043E+03 7.61664E+02 3.89608E+02 1.75530E+01 2.75792E+03 2.83173E+03 2.90553E+03 - 1.63250E+01 -1.40907E+03 -2.33587E+03 -3.26266E+03 8.63479E+02 4.42060E+02 2.06409E+01 3.13603E+03 3.21999E+03 3.30394E+03 -1.40907E+03 -2.23775E+03 -3.06642E+03 7.73170E+02 3.98677E+02 2.41836E+01 2.95541E+03 3.03510E+03 3.11478E+03 -1.23675E+03 -2.05601E+03 -2.87527E+03 7.62921E+02 3.90256E+02 1.75912E+01 2.76259E+03 2.83652E+03 2.91045E+03 - 1.63500E+01 -1.41123E+03 -2.33936E+03 -3.26750E+03 8.64736E+02 4.42707E+02 2.06789E+01 3.14070E+03 3.22478E+03 3.30886E+03 -1.41123E+03 -2.24124E+03 -3.07126E+03 7.74427E+02 3.99324E+02 2.42217E+01 2.96008E+03 3.03989E+03 3.11970E+03 -1.23890E+03 -2.05951E+03 -2.88011E+03 7.64178E+02 3.90903E+02 1.76293E+01 2.76726E+03 2.84132E+03 2.91537E+03 - 1.63750E+01 -1.41338E+03 -2.34286E+03 -3.27234E+03 8.65993E+02 4.43355E+02 2.07171E+01 3.14537E+03 3.22957E+03 3.31378E+03 -1.41338E+03 -2.24474E+03 -3.07610E+03 7.75684E+02 3.99972E+02 2.42598E+01 2.96475E+03 3.04469E+03 3.12462E+03 -1.24106E+03 -2.06301E+03 -2.88496E+03 7.65435E+02 3.91551E+02 1.76674E+01 2.77193E+03 2.84611E+03 2.92029E+03 - 1.64000E+01 -1.41554E+03 -2.34636E+03 -3.27719E+03 8.67250E+02 4.44002E+02 2.07552E+01 3.15004E+03 3.23437E+03 3.31870E+03 -1.41554E+03 -2.24824E+03 -3.08094E+03 7.76941E+02 4.00620E+02 2.42980E+01 2.96942E+03 3.04948E+03 3.12954E+03 -1.24321E+03 -2.06651E+03 -2.88980E+03 7.66692E+02 3.92199E+02 1.77056E+01 2.77660E+03 2.85090E+03 2.92521E+03 - 1.64250E+01 -1.41769E+03 -2.34986E+03 -3.28203E+03 8.68507E+02 4.44650E+02 2.07933E+01 3.15470E+03 3.23916E+03 3.32361E+03 -1.41769E+03 -2.25174E+03 -3.08579E+03 7.78198E+02 4.01267E+02 2.43360E+01 2.97409E+03 3.05427E+03 3.13446E+03 -1.24537E+03 -2.07000E+03 -2.89464E+03 7.67949E+02 3.92846E+02 1.77436E+01 2.78126E+03 2.85570E+03 2.93013E+03 - 1.64500E+01 -1.41984E+03 -2.35336E+03 -3.28687E+03 8.69764E+02 4.45298E+02 2.08315E+01 3.15937E+03 3.24395E+03 3.32853E+03 -1.41984E+03 -2.25524E+03 -3.09063E+03 7.79455E+02 4.01915E+02 2.43742E+01 2.97875E+03 3.05907E+03 3.13938E+03 -1.24752E+03 -2.07350E+03 -2.89948E+03 7.69206E+02 3.93494E+02 1.77818E+01 2.78593E+03 2.86049E+03 2.93505E+03 - 1.64750E+01 -1.42200E+03 -2.35686E+03 -3.29171E+03 8.71021E+02 4.45945E+02 2.08695E+01 3.16404E+03 3.24875E+03 3.33345E+03 -1.42200E+03 -2.25874E+03 -3.09547E+03 7.80712E+02 4.02562E+02 2.44123E+01 2.98342E+03 3.06386E+03 3.14430E+03 -1.24967E+03 -2.07700E+03 -2.90432E+03 7.70463E+02 3.94141E+02 1.78199E+01 2.79060E+03 2.86528E+03 2.93996E+03 - 1.65000E+01 -1.42415E+03 -2.36035E+03 -3.29656E+03 8.72278E+02 4.46593E+02 2.09077E+01 3.16871E+03 3.25354E+03 3.33837E+03 -1.42415E+03 -2.26223E+03 -3.10031E+03 7.81969E+02 4.03210E+02 2.44504E+01 2.98809E+03 3.06865E+03 3.14921E+03 -1.25183E+03 -2.08050E+03 -2.90917E+03 7.71719E+02 3.94789E+02 1.78580E+01 2.79527E+03 2.87008E+03 2.94488E+03 - 1.65250E+01 -1.42631E+03 -2.36385E+03 -3.30140E+03 8.73535E+02 4.47240E+02 2.09458E+01 3.17338E+03 3.25833E+03 3.34329E+03 -1.42631E+03 -2.26573E+03 -3.10516E+03 7.83226E+02 4.03857E+02 2.44886E+01 2.99276E+03 3.07345E+03 3.15413E+03 -1.25398E+03 -2.08400E+03 -2.91401E+03 7.72976E+02 3.95436E+02 1.78962E+01 2.79994E+03 2.87487E+03 2.94980E+03 - 1.65500E+01 -1.42846E+03 -2.36735E+03 -3.30624E+03 8.74791E+02 4.47888E+02 2.09839E+01 3.17804E+03 3.26313E+03 3.34821E+03 -1.42846E+03 -2.26923E+03 -3.11000E+03 7.84483E+02 4.04505E+02 2.45266E+01 2.99743E+03 3.07824E+03 3.15905E+03 -1.25614E+03 -2.08749E+03 -2.91885E+03 7.74233E+02 3.96084E+02 1.79343E+01 2.80460E+03 2.87966E+03 2.95472E+03 - 1.65750E+01 -1.43061E+03 -2.37085E+03 -3.31108E+03 8.76049E+02 4.48535E+02 2.10221E+01 3.18271E+03 3.26792E+03 3.35313E+03 -1.43061E+03 -2.27273E+03 -3.11484E+03 7.85740E+02 4.05152E+02 2.45648E+01 3.00209E+03 3.08303E+03 3.16397E+03 -1.25829E+03 -2.09099E+03 -2.92369E+03 7.75490E+02 3.96731E+02 1.79724E+01 2.80927E+03 2.88446E+03 2.95964E+03 - 1.66000E+01 -1.43277E+03 -2.37435E+03 -3.31593E+03 8.77305E+02 4.49183E+02 2.10601E+01 3.18738E+03 3.27271E+03 3.35805E+03 -1.43277E+03 -2.27623E+03 -3.11968E+03 7.86997E+02 4.05800E+02 2.46029E+01 3.00676E+03 3.08783E+03 3.16889E+03 -1.26044E+03 -2.09449E+03 -2.92854E+03 7.76747E+02 3.97379E+02 1.80105E+01 2.81394E+03 2.88925E+03 2.96456E+03 - 1.66250E+01 -1.43492E+03 -2.37784E+03 -3.32077E+03 8.78562E+02 4.49830E+02 2.10983E+01 3.19205E+03 3.27751E+03 3.36296E+03 -1.43492E+03 -2.27972E+03 -3.12453E+03 7.88254E+02 4.06448E+02 2.46410E+01 3.01143E+03 3.09262E+03 3.17381E+03 -1.26260E+03 -2.09799E+03 -2.93338E+03 7.78004E+02 3.98026E+02 1.80486E+01 2.81861E+03 2.89404E+03 2.96948E+03 - 1.66500E+01 -1.43708E+03 -2.38134E+03 -3.32561E+03 8.79819E+02 4.50478E+02 2.11364E+01 3.19672E+03 3.28230E+03 3.36788E+03 -1.43708E+03 -2.28322E+03 -3.12937E+03 7.89511E+02 4.07095E+02 2.46792E+01 3.01610E+03 3.09741E+03 3.17873E+03 -1.26475E+03 -2.10149E+03 -2.93822E+03 7.79261E+02 3.98674E+02 1.80868E+01 2.82328E+03 2.89884E+03 2.97439E+03 - 1.66750E+01 -1.43923E+03 -2.38484E+03 -3.33045E+03 8.81076E+02 4.51125E+02 2.11745E+01 3.20138E+03 3.28709E+03 3.37280E+03 -1.43923E+03 -2.28672E+03 -3.13421E+03 7.90768E+02 4.07743E+02 2.47172E+01 3.02077E+03 3.10221E+03 3.18365E+03 -1.26691E+03 -2.10499E+03 -2.94306E+03 7.80518E+02 3.99322E+02 1.81249E+01 2.82794E+03 2.90363E+03 2.97931E+03 - 1.67000E+01 -1.44139E+03 -2.38834E+03 -3.33529E+03 8.82333E+02 4.51773E+02 2.12127E+01 3.20605E+03 3.29189E+03 3.37772E+03 -1.44139E+03 -2.29022E+03 -3.13905E+03 7.92025E+02 4.08390E+02 2.47554E+01 3.02543E+03 3.10700E+03 3.18856E+03 -1.26906E+03 -2.10848E+03 -2.94791E+03 7.81775E+02 3.99969E+02 1.81630E+01 2.83261E+03 2.90842E+03 2.98423E+03 - 1.67250E+01 -1.44354E+03 -2.39184E+03 -3.34014E+03 8.83590E+02 4.52421E+02 2.12507E+01 3.21072E+03 3.29668E+03 3.38264E+03 -1.44354E+03 -2.29372E+03 -3.14390E+03 7.93282E+02 4.09038E+02 2.47935E+01 3.03010E+03 3.11179E+03 3.19348E+03 -1.27122E+03 -2.11198E+03 -2.95275E+03 7.83032E+02 4.00617E+02 1.82011E+01 2.83728E+03 2.91322E+03 2.98915E+03 - 1.67500E+01 -1.44569E+03 -2.39534E+03 -3.34498E+03 8.84847E+02 4.53068E+02 2.12889E+01 3.21539E+03 3.30147E+03 3.38756E+03 -1.44569E+03 -2.29722E+03 -3.14874E+03 7.94539E+02 4.09685E+02 2.48316E+01 3.03477E+03 3.11659E+03 3.19840E+03 -1.27337E+03 -2.11548E+03 -2.95759E+03 7.84289E+02 4.01264E+02 1.82392E+01 2.84195E+03 2.91801E+03 2.99407E+03 - 1.67750E+01 -1.44785E+03 -2.39883E+03 -3.34982E+03 8.86104E+02 4.53716E+02 2.13270E+01 3.22006E+03 3.30627E+03 3.39248E+03 -1.44785E+03 -2.30071E+03 -3.15358E+03 7.95796E+02 4.10333E+02 2.48698E+01 3.03944E+03 3.12138E+03 3.20332E+03 -1.27552E+03 -2.11898E+03 -2.96243E+03 7.85546E+02 4.01912E+02 1.82774E+01 2.84662E+03 2.92280E+03 2.99899E+03 - 1.68000E+01 -1.45000E+03 -2.40233E+03 -3.35466E+03 8.87361E+02 4.54363E+02 2.13651E+01 3.22472E+03 3.31106E+03 3.39739E+03 -1.45000E+03 -2.30421E+03 -3.15842E+03 7.97053E+02 4.10980E+02 2.49078E+01 3.04411E+03 3.12617E+03 3.20824E+03 -1.27768E+03 -2.12248E+03 -2.96728E+03 7.86803E+02 4.02559E+02 1.83155E+01 2.85128E+03 2.92759E+03 3.00391E+03 - 1.68250E+01 -1.45216E+03 -2.40583E+03 -3.35951E+03 8.88618E+02 4.55011E+02 2.14033E+01 3.22939E+03 3.31585E+03 3.40231E+03 -1.45216E+03 -2.30771E+03 -3.16326E+03 7.98310E+02 4.11628E+02 2.49460E+01 3.04877E+03 3.13097E+03 3.21316E+03 -1.27983E+03 -2.12597E+03 -2.97212E+03 7.88060E+02 4.03207E+02 1.83536E+01 2.85595E+03 2.93239E+03 3.00882E+03 - 1.68500E+01 -1.45431E+03 -2.40933E+03 -3.36435E+03 8.89875E+02 4.55658E+02 2.14413E+01 3.23406E+03 3.32065E+03 3.40723E+03 -1.45431E+03 -2.31121E+03 -3.16811E+03 7.99567E+02 4.12275E+02 2.49841E+01 3.05344E+03 3.13576E+03 3.21808E+03 -1.28199E+03 -2.12947E+03 -2.97696E+03 7.89317E+02 4.03854E+02 1.83917E+01 2.86062E+03 2.93718E+03 3.01374E+03 - 1.68750E+01 -1.45646E+03 -2.41283E+03 -3.36919E+03 8.91132E+02 4.56306E+02 2.14795E+01 3.23873E+03 3.32544E+03 3.41215E+03 -1.45646E+03 -2.31471E+03 -3.17295E+03 8.00824E+02 4.12923E+02 2.50222E+01 3.05811E+03 3.14055E+03 3.22299E+03 -1.28414E+03 -2.13297E+03 -2.98180E+03 7.90574E+02 4.04502E+02 1.84298E+01 2.86529E+03 2.94197E+03 3.01866E+03 - 1.69000E+01 -1.45862E+03 -2.41633E+03 -3.37403E+03 8.92389E+02 4.56953E+02 2.15176E+01 3.24340E+03 3.33023E+03 3.41707E+03 -1.45862E+03 -2.31820E+03 -3.17779E+03 8.02081E+02 4.13571E+02 2.50604E+01 3.06278E+03 3.14535E+03 3.22791E+03 -1.28629E+03 -2.13647E+03 -2.98664E+03 7.91831E+02 4.05150E+02 1.84680E+01 2.86996E+03 2.94677E+03 3.02358E+03 - 1.69250E+01 -1.46077E+03 -2.41982E+03 -3.37888E+03 8.93646E+02 4.57601E+02 2.15557E+01 3.24806E+03 3.33503E+03 3.42199E+03 -1.46077E+03 -2.32170E+03 -3.18263E+03 8.03338E+02 4.14218E+02 2.50984E+01 3.06745E+03 3.15014E+03 3.23283E+03 -1.28845E+03 -2.13997E+03 -2.99149E+03 7.93088E+02 4.05797E+02 1.85061E+01 2.87462E+03 2.95156E+03 3.02850E+03 - 1.69500E+01 -1.46293E+03 -2.42332E+03 -3.38372E+03 8.94903E+02 4.58249E+02 2.15939E+01 3.25273E+03 3.33982E+03 3.42691E+03 -1.46293E+03 -2.32520E+03 -3.18748E+03 8.04595E+02 4.14866E+02 2.51366E+01 3.07211E+03 3.15493E+03 3.23775E+03 -1.29060E+03 -2.14347E+03 -2.99633E+03 7.94345E+02 4.06445E+02 1.85442E+01 2.87929E+03 2.95635E+03 3.03342E+03 - 1.69750E+01 -1.46508E+03 -2.42682E+03 -3.38856E+03 8.96160E+02 4.58896E+02 2.16320E+01 3.25740E+03 3.34461E+03 3.43182E+03 -1.46508E+03 -2.32870E+03 -3.19232E+03 8.05852E+02 4.15513E+02 2.51747E+01 3.07678E+03 3.15973E+03 3.24267E+03 -1.29276E+03 -2.14696E+03 -3.00117E+03 7.95602E+02 4.07092E+02 1.85823E+01 2.88396E+03 2.96115E+03 3.03834E+03 - 1.70000E+01 -1.55340E+03 -2.47213E+03 -3.39086E+03 8.57388E+02 4.42063E+02 2.67377E+01 3.26817E+03 3.35625E+03 3.44433E+03 -1.38107E+03 -2.29039E+03 -3.19971E+03 8.47138E+02 4.33642E+02 2.01453E+01 3.07535E+03 3.15767E+03 3.24000E+03 -1.38107E+03 -2.19227E+03 -3.00347E+03 7.56830E+02 3.90259E+02 2.36880E+01 2.89473E+03 2.97279E+03 3.05084E+03 - 1.70250E+01 -1.55555E+03 -2.47562E+03 -3.39570E+03 8.58645E+02 4.42710E+02 2.67758E+01 3.27284E+03 3.36104E+03 3.44925E+03 -1.38323E+03 -2.29389E+03 -3.20455E+03 8.48395E+02 4.34289E+02 2.01834E+01 3.08002E+03 3.16247E+03 3.24492E+03 -1.38323E+03 -2.19577E+03 -3.00831E+03 7.58087E+02 3.90906E+02 2.37261E+01 2.89940E+03 2.97758E+03 3.05576E+03 - 1.70500E+01 -1.55770E+03 -2.47912E+03 -3.40054E+03 8.59902E+02 4.43358E+02 2.68139E+01 3.27751E+03 3.36584E+03 3.45417E+03 -1.38538E+03 -2.29739E+03 -3.20939E+03 8.49652E+02 4.34937E+02 2.02215E+01 3.08468E+03 3.16726E+03 3.24984E+03 -1.38538E+03 -2.19927E+03 -3.01315E+03 7.59344E+02 3.91554E+02 2.37642E+01 2.90407E+03 2.98237E+03 3.06068E+03 - 1.70750E+01 -1.55986E+03 -2.48262E+03 -3.40538E+03 8.61159E+02 4.44005E+02 2.68521E+01 3.28217E+03 3.37063E+03 3.45909E+03 -1.38753E+03 -2.30088E+03 -3.21424E+03 8.50909E+02 4.35584E+02 2.02596E+01 3.08935E+03 3.17205E+03 3.25475E+03 -1.38753E+03 -2.20276E+03 -3.01799E+03 7.60601E+02 3.92201E+02 2.38024E+01 2.90873E+03 2.98717E+03 3.06560E+03 - 1.71000E+01 -1.56201E+03 -2.48612E+03 -3.41022E+03 8.62416E+02 4.44653E+02 2.68901E+01 3.28684E+03 3.37542E+03 3.46401E+03 -1.38969E+03 -2.30438E+03 -3.21908E+03 8.52166E+02 4.36232E+02 2.02977E+01 3.09402E+03 3.17685E+03 3.25967E+03 -1.38969E+03 -2.20626E+03 -3.02284E+03 7.61857E+02 3.92849E+02 2.38405E+01 2.91340E+03 2.99196E+03 3.07052E+03 - 1.71250E+01 -1.56417E+03 -2.48962E+03 -3.41507E+03 8.63673E+02 4.45300E+02 2.69283E+01 3.29151E+03 3.38022E+03 3.46892E+03 -1.39184E+03 -2.30788E+03 -3.22392E+03 8.53423E+02 4.36879E+02 2.03359E+01 3.09869E+03 3.18164E+03 3.26459E+03 -1.39184E+03 -2.20976E+03 -3.02768E+03 7.63115E+02 3.93497E+02 2.38786E+01 2.91807E+03 2.99675E+03 3.07544E+03 - 1.71500E+01 -1.56632E+03 -2.49311E+03 -3.41991E+03 8.64930E+02 4.45948E+02 2.69664E+01 3.29618E+03 3.38501E+03 3.47384E+03 -1.39400E+03 -2.31138E+03 -3.22876E+03 8.54680E+02 4.37527E+02 2.03740E+01 3.10336E+03 3.18643E+03 3.26951E+03 -1.39400E+03 -2.21326E+03 -3.03252E+03 7.64371E+02 3.94144E+02 2.39167E+01 2.92274E+03 3.00155E+03 3.08035E+03 - 1.71750E+01 -1.56847E+03 -2.49661E+03 -3.42475E+03 8.66186E+02 4.46595E+02 2.70045E+01 3.30085E+03 3.38980E+03 3.47876E+03 -1.39615E+03 -2.31488E+03 -3.23360E+03 8.55937E+02 4.38174E+02 2.04121E+01 3.10802E+03 3.19123E+03 3.27443E+03 -1.39615E+03 -2.21676E+03 -3.03736E+03 7.65628E+02 3.94792E+02 2.39548E+01 2.92741E+03 3.00634E+03 3.08527E+03 - 1.72000E+01 -1.57063E+03 -2.50011E+03 -3.42959E+03 8.67444E+02 4.47243E+02 2.70427E+01 3.30551E+03 3.39460E+03 3.48368E+03 -1.39830E+03 -2.31838E+03 -3.23845E+03 8.57194E+02 4.38822E+02 2.04503E+01 3.11269E+03 3.19602E+03 3.27935E+03 -1.39830E+03 -2.22026E+03 -3.04221E+03 7.66885E+02 3.95439E+02 2.39930E+01 2.93207E+03 3.01113E+03 3.09019E+03 - 1.72250E+01 -1.57278E+03 -2.50361E+03 -3.43444E+03 8.68700E+02 4.47891E+02 2.70807E+01 3.31018E+03 3.39939E+03 3.48860E+03 -1.40046E+03 -2.32187E+03 -3.24329E+03 8.58451E+02 4.39470E+02 2.04883E+01 3.11736E+03 3.20081E+03 3.28427E+03 -1.40046E+03 -2.22375E+03 -3.04705E+03 7.68142E+02 3.96087E+02 2.40311E+01 2.93674E+03 3.01593E+03 3.09511E+03 - 1.72500E+01 -1.57494E+03 -2.50711E+03 -3.43928E+03 8.69957E+02 4.48538E+02 2.71189E+01 3.31485E+03 3.40418E+03 3.49352E+03 -1.40261E+03 -2.32537E+03 -3.24813E+03 8.59708E+02 4.40117E+02 2.05265E+01 3.12203E+03 3.20561E+03 3.28918E+03 -1.40261E+03 -2.22725E+03 -3.05189E+03 7.69399E+02 3.96734E+02 2.40692E+01 2.94141E+03 3.02072E+03 3.10003E+03 - 1.72750E+01 -1.57709E+03 -2.51061E+03 -3.44412E+03 8.71214E+02 4.49186E+02 2.71570E+01 3.31952E+03 3.40898E+03 3.49844E+03 -1.40477E+03 -2.32887E+03 -3.25297E+03 8.60965E+02 4.40765E+02 2.05646E+01 3.12670E+03 3.21040E+03 3.29410E+03 -1.40477E+03 -2.23075E+03 -3.05673E+03 7.70656E+02 3.97382E+02 2.41074E+01 2.94608E+03 3.02551E+03 3.10495E+03 - 1.73000E+01 -1.57924E+03 -2.51410E+03 -3.44896E+03 8.72471E+02 4.49833E+02 2.71951E+01 3.32419E+03 3.41377E+03 3.50335E+03 -1.40692E+03 -2.33237E+03 -3.25782E+03 8.62222E+02 4.41412E+02 2.06027E+01 3.13136E+03 3.21519E+03 3.29902E+03 -1.40692E+03 -2.23425E+03 -3.06158E+03 7.71913E+02 3.98029E+02 2.41454E+01 2.95075E+03 3.03031E+03 3.10987E+03 - 1.73250E+01 -1.58140E+03 -2.51760E+03 -3.45381E+03 8.73728E+02 4.50481E+02 2.72333E+01 3.32885E+03 3.41856E+03 3.50827E+03 -1.40907E+03 -2.33587E+03 -3.26266E+03 8.63479E+02 4.42060E+02 2.06409E+01 3.13603E+03 3.21999E+03 3.30394E+03 -1.40907E+03 -2.23775E+03 -3.06642E+03 7.73170E+02 3.98677E+02 2.41836E+01 2.95541E+03 3.03510E+03 3.11478E+03 - 1.73500E+01 -1.58355E+03 -2.52110E+03 -3.45865E+03 8.74985E+02 4.51128E+02 2.72713E+01 3.33352E+03 3.42336E+03 3.51319E+03 -1.41123E+03 -2.33936E+03 -3.26750E+03 8.64736E+02 4.42707E+02 2.06789E+01 3.14070E+03 3.22478E+03 3.30886E+03 -1.41123E+03 -2.24124E+03 -3.07126E+03 7.74427E+02 3.99324E+02 2.42217E+01 2.96008E+03 3.03989E+03 3.11970E+03 - 1.73750E+01 -1.58571E+03 -2.52460E+03 -3.46349E+03 8.76242E+02 4.51776E+02 2.73095E+01 3.33819E+03 3.42815E+03 3.51811E+03 -1.41338E+03 -2.34286E+03 -3.27234E+03 8.65993E+02 4.43355E+02 2.07171E+01 3.14537E+03 3.22957E+03 3.31378E+03 -1.41338E+03 -2.24474E+03 -3.07610E+03 7.75684E+02 3.99972E+02 2.42598E+01 2.96475E+03 3.04469E+03 3.12462E+03 - 1.74000E+01 -1.58786E+03 -2.52810E+03 -3.46833E+03 8.77499E+02 4.52423E+02 2.73476E+01 3.34286E+03 3.43294E+03 3.52303E+03 -1.41554E+03 -2.34636E+03 -3.27719E+03 8.67250E+02 4.44002E+02 2.07552E+01 3.15004E+03 3.23437E+03 3.31870E+03 -1.41554E+03 -2.24824E+03 -3.08094E+03 7.76941E+02 4.00620E+02 2.42980E+01 2.96942E+03 3.04948E+03 3.12954E+03 - 1.74250E+01 -1.59001E+03 -2.53159E+03 -3.47318E+03 8.78756E+02 4.53071E+02 2.73857E+01 3.34753E+03 3.43774E+03 3.52795E+03 -1.41769E+03 -2.34986E+03 -3.28203E+03 8.68507E+02 4.44650E+02 2.07933E+01 3.15470E+03 3.23916E+03 3.32361E+03 -1.41769E+03 -2.25174E+03 -3.08579E+03 7.78198E+02 4.01267E+02 2.43360E+01 2.97409E+03 3.05427E+03 3.13446E+03 - 1.74500E+01 -1.59217E+03 -2.53509E+03 -3.47802E+03 8.80013E+02 4.53719E+02 2.74239E+01 3.35219E+03 3.44253E+03 3.53287E+03 -1.41984E+03 -2.35336E+03 -3.28687E+03 8.69764E+02 4.45298E+02 2.08315E+01 3.15937E+03 3.24395E+03 3.32853E+03 -1.41984E+03 -2.25524E+03 -3.09063E+03 7.79455E+02 4.01915E+02 2.43742E+01 2.97875E+03 3.05907E+03 3.13938E+03 - 1.74750E+01 -1.59432E+03 -2.53859E+03 -3.48286E+03 8.81270E+02 4.54366E+02 2.74619E+01 3.35686E+03 3.44732E+03 3.53778E+03 -1.42200E+03 -2.35686E+03 -3.29171E+03 8.71021E+02 4.45945E+02 2.08695E+01 3.16404E+03 3.24875E+03 3.33345E+03 -1.42200E+03 -2.25874E+03 -3.09547E+03 7.80712E+02 4.02562E+02 2.44123E+01 2.98342E+03 3.06386E+03 3.14430E+03 - 1.75000E+01 -1.59648E+03 -2.54209E+03 -3.48770E+03 8.82527E+02 4.55014E+02 2.75001E+01 3.36153E+03 3.45212E+03 3.54270E+03 -1.42415E+03 -2.36035E+03 -3.29656E+03 8.72278E+02 4.46593E+02 2.09077E+01 3.16871E+03 3.25354E+03 3.33837E+03 -1.42415E+03 -2.26223E+03 -3.10031E+03 7.81969E+02 4.03210E+02 2.44504E+01 2.98809E+03 3.06865E+03 3.14921E+03 - 1.75250E+01 -1.59863E+03 -2.54559E+03 -3.49254E+03 8.83784E+02 4.55661E+02 2.75382E+01 3.36620E+03 3.45691E+03 3.54762E+03 -1.42631E+03 -2.36385E+03 -3.30140E+03 8.73535E+02 4.47240E+02 2.09458E+01 3.17338E+03 3.25833E+03 3.34329E+03 -1.42631E+03 -2.26573E+03 -3.10516E+03 7.83226E+02 4.03857E+02 2.44886E+01 2.99276E+03 3.07345E+03 3.15413E+03 - 1.75500E+01 -1.60078E+03 -2.54909E+03 -3.49739E+03 8.85041E+02 4.56309E+02 2.75763E+01 3.37087E+03 3.46170E+03 3.55254E+03 -1.42846E+03 -2.36735E+03 -3.30624E+03 8.74791E+02 4.47888E+02 2.09839E+01 3.17804E+03 3.26313E+03 3.34821E+03 -1.42846E+03 -2.26923E+03 -3.11000E+03 7.84483E+02 4.04505E+02 2.45266E+01 2.99743E+03 3.07824E+03 3.15905E+03 - 1.75750E+01 -1.60294E+03 -2.55258E+03 -3.50223E+03 8.86298E+02 4.56956E+02 2.76145E+01 3.37553E+03 3.46650E+03 3.55746E+03 -1.43061E+03 -2.37085E+03 -3.31108E+03 8.76049E+02 4.48535E+02 2.10221E+01 3.18271E+03 3.26792E+03 3.35313E+03 -1.43061E+03 -2.27273E+03 -3.11484E+03 7.85740E+02 4.05152E+02 2.45648E+01 3.00209E+03 3.08303E+03 3.16397E+03 - 1.76000E+01 -1.60509E+03 -2.55608E+03 -3.50707E+03 8.87555E+02 4.57604E+02 2.76525E+01 3.38020E+03 3.47129E+03 3.56238E+03 -1.43277E+03 -2.37435E+03 -3.31593E+03 8.77305E+02 4.49183E+02 2.10601E+01 3.18738E+03 3.27271E+03 3.35805E+03 -1.43277E+03 -2.27623E+03 -3.11968E+03 7.86997E+02 4.05800E+02 2.46029E+01 3.00676E+03 3.08783E+03 3.16889E+03 - 1.76250E+01 -1.60725E+03 -2.55958E+03 -3.51191E+03 8.88812E+02 4.58251E+02 2.76907E+01 3.38487E+03 3.47608E+03 3.56730E+03 -1.43492E+03 -2.37784E+03 -3.32077E+03 8.78562E+02 4.49830E+02 2.10983E+01 3.19205E+03 3.27751E+03 3.36296E+03 -1.43492E+03 -2.27972E+03 -3.12453E+03 7.88254E+02 4.06448E+02 2.46410E+01 3.01143E+03 3.09262E+03 3.17381E+03 - 1.76500E+01 -1.60940E+03 -2.56308E+03 -3.51676E+03 8.90069E+02 4.58899E+02 2.77288E+01 3.38954E+03 3.48088E+03 3.57221E+03 -1.43708E+03 -2.38134E+03 -3.32561E+03 8.79819E+02 4.50478E+02 2.11364E+01 3.19672E+03 3.28230E+03 3.36788E+03 -1.43708E+03 -2.28322E+03 -3.12937E+03 7.89511E+02 4.07095E+02 2.46792E+01 3.01610E+03 3.09741E+03 3.17873E+03 - 1.76750E+01 -1.61155E+03 -2.56658E+03 -3.52160E+03 8.91326E+02 4.59546E+02 2.77669E+01 3.39421E+03 3.48567E+03 3.57713E+03 -1.43923E+03 -2.38484E+03 -3.33045E+03 8.81076E+02 4.51125E+02 2.11745E+01 3.20138E+03 3.28709E+03 3.37280E+03 -1.43923E+03 -2.28672E+03 -3.13421E+03 7.90768E+02 4.07743E+02 2.47172E+01 3.02077E+03 3.10221E+03 3.18365E+03 - 1.77000E+01 -1.61371E+03 -2.57008E+03 -3.52644E+03 8.92583E+02 4.60194E+02 2.78051E+01 3.39887E+03 3.49046E+03 3.58205E+03 -1.44139E+03 -2.38834E+03 -3.33529E+03 8.82333E+02 4.51773E+02 2.12127E+01 3.20605E+03 3.29189E+03 3.37772E+03 -1.44139E+03 -2.29022E+03 -3.13905E+03 7.92025E+02 4.08390E+02 2.47554E+01 3.02543E+03 3.10700E+03 3.18856E+03 - 1.77250E+01 -1.61586E+03 -2.57357E+03 -3.53128E+03 8.93840E+02 4.60842E+02 2.78431E+01 3.40354E+03 3.49526E+03 3.58697E+03 -1.44354E+03 -2.39184E+03 -3.34014E+03 8.83590E+02 4.52421E+02 2.12507E+01 3.21072E+03 3.29668E+03 3.38264E+03 -1.44354E+03 -2.29372E+03 -3.14390E+03 7.93282E+02 4.09038E+02 2.47935E+01 3.03010E+03 3.11179E+03 3.19348E+03 - 1.77500E+01 -1.61802E+03 -2.57707E+03 -3.53613E+03 8.95097E+02 4.61489E+02 2.78813E+01 3.40821E+03 3.50005E+03 3.59189E+03 -1.44569E+03 -2.39534E+03 -3.34498E+03 8.84847E+02 4.53068E+02 2.12889E+01 3.21539E+03 3.30147E+03 3.38756E+03 -1.44569E+03 -2.29722E+03 -3.14874E+03 7.94539E+02 4.09685E+02 2.48316E+01 3.03477E+03 3.11659E+03 3.19840E+03 - 1.77750E+01 -1.62017E+03 -2.58057E+03 -3.54097E+03 8.96354E+02 4.62137E+02 2.79194E+01 3.41288E+03 3.50484E+03 3.59681E+03 -1.44785E+03 -2.39883E+03 -3.34982E+03 8.86104E+02 4.53716E+02 2.13270E+01 3.22006E+03 3.30627E+03 3.39248E+03 -1.44785E+03 -2.30071E+03 -3.15358E+03 7.95796E+02 4.10333E+02 2.48698E+01 3.03944E+03 3.12138E+03 3.20332E+03 - 1.78000E+01 -1.62232E+03 -2.58407E+03 -3.54581E+03 8.97611E+02 4.62784E+02 2.79575E+01 3.41755E+03 3.50964E+03 3.60173E+03 -1.45000E+03 -2.40233E+03 -3.35466E+03 8.87361E+02 4.54363E+02 2.13651E+01 3.22472E+03 3.31106E+03 3.39739E+03 -1.45000E+03 -2.30421E+03 -3.15842E+03 7.97053E+02 4.10980E+02 2.49078E+01 3.04411E+03 3.12617E+03 3.20824E+03 - 1.78250E+01 -1.62448E+03 -2.58757E+03 -3.55065E+03 8.98868E+02 4.63432E+02 2.79957E+01 3.42221E+03 3.51443E+03 3.60664E+03 -1.45216E+03 -2.40583E+03 -3.35951E+03 8.88618E+02 4.55011E+02 2.14033E+01 3.22939E+03 3.31585E+03 3.40231E+03 -1.45216E+03 -2.30771E+03 -3.16326E+03 7.98310E+02 4.11628E+02 2.49460E+01 3.04877E+03 3.13097E+03 3.21316E+03 - 1.78500E+01 -1.62663E+03 -2.59106E+03 -3.55550E+03 9.00125E+02 4.64079E+02 2.80337E+01 3.42688E+03 3.51922E+03 3.61156E+03 -1.45431E+03 -2.40933E+03 -3.36435E+03 8.89875E+02 4.55658E+02 2.14413E+01 3.23406E+03 3.32065E+03 3.40723E+03 -1.45431E+03 -2.31121E+03 -3.16811E+03 7.99567E+02 4.12275E+02 2.49841E+01 3.05344E+03 3.13576E+03 3.21808E+03 - 1.78750E+01 -1.62879E+03 -2.59456E+03 -3.56034E+03 9.01382E+02 4.64727E+02 2.80719E+01 3.43155E+03 3.52402E+03 3.61648E+03 -1.45646E+03 -2.41283E+03 -3.36919E+03 8.91132E+02 4.56306E+02 2.14795E+01 3.23873E+03 3.32544E+03 3.41215E+03 -1.45646E+03 -2.31471E+03 -3.17295E+03 8.00824E+02 4.12923E+02 2.50222E+01 3.05811E+03 3.14055E+03 3.22299E+03 - 1.79000E+01 -1.63094E+03 -2.59806E+03 -3.56518E+03 9.02639E+02 4.65374E+02 2.81100E+01 3.43622E+03 3.52881E+03 3.62140E+03 -1.45862E+03 -2.41633E+03 -3.37403E+03 8.92389E+02 4.56953E+02 2.15176E+01 3.24340E+03 3.33023E+03 3.41707E+03 -1.45862E+03 -2.31820E+03 -3.17779E+03 8.02081E+02 4.13571E+02 2.50604E+01 3.06278E+03 3.14535E+03 3.22791E+03 - 1.79250E+01 -1.63310E+03 -2.60156E+03 -3.57002E+03 9.03896E+02 4.66022E+02 2.81481E+01 3.44089E+03 3.53360E+03 3.62632E+03 -1.46077E+03 -2.41982E+03 -3.37888E+03 8.93646E+02 4.57601E+02 2.15557E+01 3.24806E+03 3.33503E+03 3.42199E+03 -1.46077E+03 -2.32170E+03 -3.18263E+03 8.03338E+02 4.14218E+02 2.50984E+01 3.06745E+03 3.15014E+03 3.23283E+03 - 1.79500E+01 -1.63525E+03 -2.60506E+03 -3.57486E+03 9.05153E+02 4.66670E+02 2.81863E+01 3.44555E+03 3.53840E+03 3.63124E+03 -1.46293E+03 -2.42332E+03 -3.38372E+03 8.94903E+02 4.58249E+02 2.15939E+01 3.25273E+03 3.33982E+03 3.42691E+03 -1.46293E+03 -2.32520E+03 -3.18748E+03 8.04595E+02 4.14866E+02 2.51366E+01 3.07211E+03 3.15493E+03 3.23775E+03 - 1.79750E+01 -1.63740E+03 -2.60856E+03 -3.57971E+03 9.06410E+02 4.67317E+02 2.82244E+01 3.45022E+03 3.54319E+03 3.63616E+03 -1.46508E+03 -2.42682E+03 -3.38856E+03 8.96160E+02 4.58896E+02 2.16320E+01 3.25740E+03 3.34461E+03 3.43182E+03 -1.46508E+03 -2.32870E+03 -3.19232E+03 8.05852E+02 4.15513E+02 2.51747E+01 3.07678E+03 3.15973E+03 3.24267E+03 - 1.80000E+01 -1.55340E+03 -2.57025E+03 -3.58710E+03 9.47696E+02 4.85445E+02 2.31949E+01 3.44879E+03 3.54114E+03 3.63349E+03 -1.55340E+03 -2.47213E+03 -3.39086E+03 8.57388E+02 4.42063E+02 2.67377E+01 3.26817E+03 3.35625E+03 3.44433E+03 -1.38107E+03 -2.29039E+03 -3.19971E+03 8.47138E+02 4.33642E+02 2.01453E+01 3.07535E+03 3.15767E+03 3.24000E+03 - 1.80250E+01 -1.55555E+03 -2.57374E+03 -3.59194E+03 9.48953E+02 4.86093E+02 2.32331E+01 3.45346E+03 3.54593E+03 3.63841E+03 -1.55555E+03 -2.47562E+03 -3.39570E+03 8.58645E+02 4.42710E+02 2.67758E+01 3.27284E+03 3.36104E+03 3.44925E+03 -1.38323E+03 -2.29389E+03 -3.20455E+03 8.48395E+02 4.34289E+02 2.01834E+01 3.08002E+03 3.16247E+03 3.24492E+03 - 1.80500E+01 -1.55770E+03 -2.57724E+03 -3.59678E+03 9.50210E+02 4.86741E+02 2.32711E+01 3.45812E+03 3.55072E+03 3.64332E+03 -1.55770E+03 -2.47912E+03 -3.40054E+03 8.59902E+02 4.43358E+02 2.68139E+01 3.27751E+03 3.36584E+03 3.45417E+03 -1.38538E+03 -2.29739E+03 -3.20939E+03 8.49652E+02 4.34937E+02 2.02215E+01 3.08468E+03 3.16726E+03 3.24984E+03 - 1.80750E+01 -1.55986E+03 -2.58074E+03 -3.60162E+03 9.51467E+02 4.87388E+02 2.33093E+01 3.46279E+03 3.55552E+03 3.64824E+03 -1.55986E+03 -2.48262E+03 -3.40538E+03 8.61159E+02 4.44005E+02 2.68521E+01 3.28217E+03 3.37063E+03 3.45909E+03 -1.38753E+03 -2.30088E+03 -3.21424E+03 8.50909E+02 4.35584E+02 2.02596E+01 3.08935E+03 3.17205E+03 3.25475E+03 - 1.81000E+01 -1.56201E+03 -2.58424E+03 -3.60647E+03 9.52724E+02 4.88036E+02 2.33474E+01 3.46746E+03 3.56031E+03 3.65316E+03 -1.56201E+03 -2.48612E+03 -3.41022E+03 8.62416E+02 4.44653E+02 2.68901E+01 3.28684E+03 3.37542E+03 3.46401E+03 -1.38969E+03 -2.30438E+03 -3.21908E+03 8.52166E+02 4.36232E+02 2.02977E+01 3.09402E+03 3.17685E+03 3.25967E+03 - 1.81250E+01 -1.56417E+03 -2.58774E+03 -3.61131E+03 9.53981E+02 4.88683E+02 2.33855E+01 3.47213E+03 3.56510E+03 3.65808E+03 -1.56417E+03 -2.48962E+03 -3.41507E+03 8.63673E+02 4.45300E+02 2.69283E+01 3.29151E+03 3.38022E+03 3.46892E+03 -1.39184E+03 -2.30788E+03 -3.22392E+03 8.53423E+02 4.36879E+02 2.03359E+01 3.09869E+03 3.18164E+03 3.26459E+03 - 1.81500E+01 -1.56632E+03 -2.59124E+03 -3.61615E+03 9.55238E+02 4.89331E+02 2.34237E+01 3.47680E+03 3.56990E+03 3.66300E+03 -1.56632E+03 -2.49311E+03 -3.41991E+03 8.64930E+02 4.45948E+02 2.69664E+01 3.29618E+03 3.38501E+03 3.47384E+03 -1.39400E+03 -2.31138E+03 -3.22876E+03 8.54680E+02 4.37527E+02 2.03740E+01 3.10336E+03 3.18643E+03 3.26951E+03 - 1.81750E+01 -1.56847E+03 -2.59473E+03 -3.62099E+03 9.56495E+02 4.89978E+02 2.34617E+01 3.48146E+03 3.57469E+03 3.66792E+03 -1.56847E+03 -2.49661E+03 -3.42475E+03 8.66186E+02 4.46595E+02 2.70045E+01 3.30085E+03 3.38980E+03 3.47876E+03 -1.39615E+03 -2.31488E+03 -3.23360E+03 8.55937E+02 4.38174E+02 2.04121E+01 3.10802E+03 3.19123E+03 3.27443E+03 - 1.82000E+01 -1.57063E+03 -2.59823E+03 -3.62584E+03 9.57752E+02 4.90626E+02 2.34999E+01 3.48613E+03 3.57948E+03 3.67284E+03 -1.57063E+03 -2.50011E+03 -3.42959E+03 8.67444E+02 4.47243E+02 2.70427E+01 3.30551E+03 3.39460E+03 3.48368E+03 -1.39830E+03 -2.31838E+03 -3.23845E+03 8.57194E+02 4.38822E+02 2.04503E+01 3.11269E+03 3.19602E+03 3.27935E+03 - 1.82250E+01 -1.57278E+03 -2.60173E+03 -3.63068E+03 9.59009E+02 4.91273E+02 2.35380E+01 3.49080E+03 3.58428E+03 3.67775E+03 -1.57278E+03 -2.50361E+03 -3.43444E+03 8.68700E+02 4.47891E+02 2.70807E+01 3.31018E+03 3.39939E+03 3.48860E+03 -1.40046E+03 -2.32187E+03 -3.24329E+03 8.58451E+02 4.39470E+02 2.04883E+01 3.11736E+03 3.20081E+03 3.28427E+03 - 1.82500E+01 -1.57494E+03 -2.60523E+03 -3.63552E+03 9.60266E+02 4.91921E+02 2.35761E+01 3.49547E+03 3.58907E+03 3.68267E+03 -1.57494E+03 -2.50711E+03 -3.43928E+03 8.69957E+02 4.48538E+02 2.71189E+01 3.31485E+03 3.40418E+03 3.49352E+03 -1.40261E+03 -2.32537E+03 -3.24813E+03 8.59708E+02 4.40117E+02 2.05265E+01 3.12203E+03 3.20561E+03 3.28918E+03 - 1.82750E+01 -1.57709E+03 -2.60873E+03 -3.64036E+03 9.61523E+02 4.92569E+02 2.36143E+01 3.50014E+03 3.59386E+03 3.68759E+03 -1.57709E+03 -2.51061E+03 -3.44412E+03 8.71214E+02 4.49186E+02 2.71570E+01 3.31952E+03 3.40898E+03 3.49844E+03 -1.40477E+03 -2.32887E+03 -3.25297E+03 8.60965E+02 4.40765E+02 2.05646E+01 3.12670E+03 3.21040E+03 3.29410E+03 - 1.83000E+01 -1.57924E+03 -2.61222E+03 -3.64520E+03 9.62780E+02 4.93216E+02 2.36523E+01 3.50480E+03 3.59866E+03 3.69251E+03 -1.57924E+03 -2.51410E+03 -3.44896E+03 8.72471E+02 4.49833E+02 2.71951E+01 3.32419E+03 3.41377E+03 3.50335E+03 -1.40692E+03 -2.33237E+03 -3.25782E+03 8.62222E+02 4.41412E+02 2.06027E+01 3.13136E+03 3.21519E+03 3.29902E+03 - 1.83250E+01 -1.58140E+03 -2.61572E+03 -3.65005E+03 9.64037E+02 4.93864E+02 2.36905E+01 3.50947E+03 3.60345E+03 3.69743E+03 -1.58140E+03 -2.51760E+03 -3.45381E+03 8.73728E+02 4.50481E+02 2.72333E+01 3.32885E+03 3.41856E+03 3.50827E+03 -1.40907E+03 -2.33587E+03 -3.26266E+03 8.63479E+02 4.42060E+02 2.06409E+01 3.13603E+03 3.21999E+03 3.30394E+03 - 1.83500E+01 -1.58355E+03 -2.61922E+03 -3.65489E+03 9.65294E+02 4.94511E+02 2.37286E+01 3.51414E+03 3.60824E+03 3.70235E+03 -1.58355E+03 -2.52110E+03 -3.45865E+03 8.74985E+02 4.51128E+02 2.72713E+01 3.33352E+03 3.42336E+03 3.51319E+03 -1.41123E+03 -2.33936E+03 -3.26750E+03 8.64736E+02 4.42707E+02 2.06789E+01 3.14070E+03 3.22478E+03 3.30886E+03 - 1.83750E+01 -1.58571E+03 -2.62272E+03 -3.65973E+03 9.66551E+02 4.95159E+02 2.37667E+01 3.51881E+03 3.61304E+03 3.70727E+03 -1.58571E+03 -2.52460E+03 -3.46349E+03 8.76242E+02 4.51776E+02 2.73095E+01 3.33819E+03 3.42815E+03 3.51811E+03 -1.41338E+03 -2.34286E+03 -3.27234E+03 8.65993E+02 4.43355E+02 2.07171E+01 3.14537E+03 3.22957E+03 3.31378E+03 - 1.84000E+01 -1.58786E+03 -2.62622E+03 -3.66457E+03 9.67808E+02 4.95806E+02 2.38049E+01 3.52348E+03 3.61783E+03 3.71218E+03 -1.58786E+03 -2.52810E+03 -3.46833E+03 8.77499E+02 4.52423E+02 2.73476E+01 3.34286E+03 3.43294E+03 3.52303E+03 -1.41554E+03 -2.34636E+03 -3.27719E+03 8.67250E+02 4.44002E+02 2.07552E+01 3.15004E+03 3.23437E+03 3.31870E+03 - 1.84250E+01 -1.59001E+03 -2.62972E+03 -3.66942E+03 9.69065E+02 4.96454E+02 2.38429E+01 3.52814E+03 3.62262E+03 3.71710E+03 -1.59001E+03 -2.53159E+03 -3.47318E+03 8.78756E+02 4.53071E+02 2.73857E+01 3.34753E+03 3.43774E+03 3.52795E+03 -1.41769E+03 -2.34986E+03 -3.28203E+03 8.68507E+02 4.44650E+02 2.07933E+01 3.15470E+03 3.23916E+03 3.32361E+03 - 1.84500E+01 -1.59217E+03 -2.63321E+03 -3.67426E+03 9.70322E+02 4.97101E+02 2.38811E+01 3.53281E+03 3.62742E+03 3.72202E+03 -1.59217E+03 -2.53509E+03 -3.47802E+03 8.80013E+02 4.53719E+02 2.74239E+01 3.35219E+03 3.44253E+03 3.53287E+03 -1.41984E+03 -2.35336E+03 -3.28687E+03 8.69764E+02 4.45298E+02 2.08315E+01 3.15937E+03 3.24395E+03 3.32853E+03 - 1.84750E+01 -1.59432E+03 -2.63671E+03 -3.67910E+03 9.71579E+02 4.97749E+02 2.39192E+01 3.53748E+03 3.63221E+03 3.72694E+03 -1.59432E+03 -2.53859E+03 -3.48286E+03 8.81270E+02 4.54366E+02 2.74619E+01 3.35686E+03 3.44732E+03 3.53778E+03 -1.42200E+03 -2.35686E+03 -3.29171E+03 8.71021E+02 4.45945E+02 2.08695E+01 3.16404E+03 3.24875E+03 3.33345E+03 - 1.85000E+01 -1.59648E+03 -2.64021E+03 -3.68394E+03 9.72836E+02 4.98396E+02 2.39573E+01 3.54215E+03 3.63700E+03 3.73186E+03 -1.59648E+03 -2.54209E+03 -3.48770E+03 8.82527E+02 4.55014E+02 2.75001E+01 3.36153E+03 3.45212E+03 3.54270E+03 -1.42415E+03 -2.36035E+03 -3.29656E+03 8.72278E+02 4.46593E+02 2.09077E+01 3.16871E+03 3.25354E+03 3.33837E+03 - 1.85250E+01 -1.59863E+03 -2.64371E+03 -3.68879E+03 9.74093E+02 4.99044E+02 2.39955E+01 3.54682E+03 3.64180E+03 3.73678E+03 -1.59863E+03 -2.54559E+03 -3.49254E+03 8.83784E+02 4.55661E+02 2.75382E+01 3.36620E+03 3.45691E+03 3.54762E+03 -1.42631E+03 -2.36385E+03 -3.30140E+03 8.73535E+02 4.47240E+02 2.09458E+01 3.17338E+03 3.25833E+03 3.34329E+03 - 1.85500E+01 -1.60078E+03 -2.64721E+03 -3.69363E+03 9.75349E+02 4.99692E+02 2.40336E+01 3.55148E+03 3.64659E+03 3.74170E+03 -1.60078E+03 -2.54909E+03 -3.49739E+03 8.85041E+02 4.56309E+02 2.75763E+01 3.37087E+03 3.46170E+03 3.55254E+03 -1.42846E+03 -2.36735E+03 -3.30624E+03 8.74791E+02 4.47888E+02 2.09839E+01 3.17804E+03 3.26313E+03 3.34821E+03 - 1.85750E+01 -1.60294E+03 -2.65070E+03 -3.69847E+03 9.76607E+02 5.00339E+02 2.40717E+01 3.55615E+03 3.65138E+03 3.74661E+03 -1.60294E+03 -2.55258E+03 -3.50223E+03 8.86298E+02 4.56956E+02 2.76145E+01 3.37553E+03 3.46650E+03 3.55746E+03 -1.43061E+03 -2.37085E+03 -3.31108E+03 8.76049E+02 4.48535E+02 2.10221E+01 3.18271E+03 3.26792E+03 3.35313E+03 - 1.86000E+01 -1.60509E+03 -2.65420E+03 -3.70331E+03 9.77864E+02 5.00987E+02 2.41098E+01 3.56082E+03 3.65618E+03 3.75153E+03 -1.60509E+03 -2.55608E+03 -3.50707E+03 8.87555E+02 4.57604E+02 2.76525E+01 3.38020E+03 3.47129E+03 3.56238E+03 -1.43277E+03 -2.37435E+03 -3.31593E+03 8.77305E+02 4.49183E+02 2.10601E+01 3.18738E+03 3.27271E+03 3.35805E+03 - 1.86250E+01 -1.60725E+03 -2.65770E+03 -3.70816E+03 9.79120E+02 5.01634E+02 2.41479E+01 3.56549E+03 3.66097E+03 3.75645E+03 -1.60725E+03 -2.55958E+03 -3.51191E+03 8.88812E+02 4.58251E+02 2.76907E+01 3.38487E+03 3.47608E+03 3.56730E+03 -1.43492E+03 -2.37784E+03 -3.32077E+03 8.78562E+02 4.49830E+02 2.10983E+01 3.19205E+03 3.27751E+03 3.36296E+03 - 1.86500E+01 -1.60940E+03 -2.66120E+03 -3.71300E+03 9.80377E+02 5.02282E+02 2.41861E+01 3.57016E+03 3.66576E+03 3.76137E+03 -1.60940E+03 -2.56308E+03 -3.51676E+03 8.90069E+02 4.58899E+02 2.77288E+01 3.38954E+03 3.48088E+03 3.57221E+03 -1.43708E+03 -2.38134E+03 -3.32561E+03 8.79819E+02 4.50478E+02 2.11364E+01 3.19672E+03 3.28230E+03 3.36788E+03 - 1.86750E+01 -1.61155E+03 -2.66470E+03 -3.71784E+03 9.81634E+02 5.02929E+02 2.42242E+01 3.57482E+03 3.67056E+03 3.76629E+03 -1.61155E+03 -2.56658E+03 -3.52160E+03 8.91326E+02 4.59546E+02 2.77669E+01 3.39421E+03 3.48567E+03 3.57713E+03 -1.43923E+03 -2.38484E+03 -3.33045E+03 8.81076E+02 4.51125E+02 2.11745E+01 3.20138E+03 3.28709E+03 3.37280E+03 - 1.87000E+01 -1.61371E+03 -2.66820E+03 -3.72268E+03 9.82891E+02 5.03577E+02 2.42623E+01 3.57949E+03 3.67535E+03 3.77121E+03 -1.61371E+03 -2.57008E+03 -3.52644E+03 8.92583E+02 4.60194E+02 2.78051E+01 3.39887E+03 3.49046E+03 3.58205E+03 -1.44139E+03 -2.38834E+03 -3.33529E+03 8.82333E+02 4.51773E+02 2.12127E+01 3.20605E+03 3.29189E+03 3.37772E+03 - 1.87250E+01 -1.61586E+03 -2.67169E+03 -3.72753E+03 9.84148E+02 5.04224E+02 2.43004E+01 3.58416E+03 3.68014E+03 3.77613E+03 -1.61586E+03 -2.57357E+03 -3.53128E+03 8.93840E+02 4.60842E+02 2.78431E+01 3.40354E+03 3.49526E+03 3.58697E+03 -1.44354E+03 -2.39184E+03 -3.34014E+03 8.83590E+02 4.52421E+02 2.12507E+01 3.21072E+03 3.29668E+03 3.38264E+03 - 1.87500E+01 -1.61802E+03 -2.67519E+03 -3.73237E+03 9.85405E+02 5.04872E+02 2.43385E+01 3.58883E+03 3.68494E+03 3.78104E+03 -1.61802E+03 -2.57707E+03 -3.53613E+03 8.95097E+02 4.61489E+02 2.78813E+01 3.40821E+03 3.50005E+03 3.59189E+03 -1.44569E+03 -2.39534E+03 -3.34498E+03 8.84847E+02 4.53068E+02 2.12889E+01 3.21539E+03 3.30147E+03 3.38756E+03 - 1.87750E+01 -1.62017E+03 -2.67869E+03 -3.73721E+03 9.86662E+02 5.05520E+02 2.43767E+01 3.59350E+03 3.68973E+03 3.78596E+03 -1.62017E+03 -2.58057E+03 -3.54097E+03 8.96354E+02 4.62137E+02 2.79194E+01 3.41288E+03 3.50484E+03 3.59681E+03 -1.44785E+03 -2.39883E+03 -3.34982E+03 8.86104E+02 4.53716E+02 2.13270E+01 3.22006E+03 3.30627E+03 3.39248E+03 - 1.88000E+01 -1.62232E+03 -2.68219E+03 -3.74205E+03 9.87919E+02 5.06167E+02 2.44148E+01 3.59816E+03 3.69452E+03 3.79088E+03 -1.62232E+03 -2.58407E+03 -3.54581E+03 8.97611E+02 4.62784E+02 2.79575E+01 3.41755E+03 3.50964E+03 3.60173E+03 -1.45000E+03 -2.40233E+03 -3.35466E+03 8.87361E+02 4.54363E+02 2.13651E+01 3.22472E+03 3.31106E+03 3.39739E+03 - 1.88250E+01 -1.62448E+03 -2.68569E+03 -3.74689E+03 9.89176E+02 5.06815E+02 2.44529E+01 3.60283E+03 3.69932E+03 3.79580E+03 -1.62448E+03 -2.58757E+03 -3.55065E+03 8.98868E+02 4.63432E+02 2.79957E+01 3.42221E+03 3.51443E+03 3.60664E+03 -1.45216E+03 -2.40583E+03 -3.35951E+03 8.88618E+02 4.55011E+02 2.14033E+01 3.22939E+03 3.31585E+03 3.40231E+03 - 1.88500E+01 -1.62663E+03 -2.68919E+03 -3.75174E+03 9.90433E+02 5.07462E+02 2.44910E+01 3.60750E+03 3.70411E+03 3.80072E+03 -1.62663E+03 -2.59106E+03 -3.55550E+03 9.00125E+02 4.64079E+02 2.80337E+01 3.42688E+03 3.51922E+03 3.61156E+03 -1.45431E+03 -2.40933E+03 -3.36435E+03 8.89875E+02 4.55658E+02 2.14413E+01 3.23406E+03 3.32065E+03 3.40723E+03 - 1.88750E+01 -1.62879E+03 -2.69268E+03 -3.75658E+03 9.91690E+02 5.08110E+02 2.45291E+01 3.61217E+03 3.70890E+03 3.80564E+03 -1.62879E+03 -2.59456E+03 -3.56034E+03 9.01382E+02 4.64727E+02 2.80719E+01 3.43155E+03 3.52402E+03 3.61648E+03 -1.45646E+03 -2.41283E+03 -3.36919E+03 8.91132E+02 4.56306E+02 2.14795E+01 3.23873E+03 3.32544E+03 3.41215E+03 - 1.89000E+01 -1.63094E+03 -2.69618E+03 -3.76142E+03 9.92947E+02 5.08757E+02 2.45673E+01 3.61684E+03 3.71370E+03 3.81056E+03 -1.63094E+03 -2.59806E+03 -3.56518E+03 9.02639E+02 4.65374E+02 2.81100E+01 3.43622E+03 3.52881E+03 3.62140E+03 -1.45862E+03 -2.41633E+03 -3.37403E+03 8.92389E+02 4.56953E+02 2.15176E+01 3.24340E+03 3.33023E+03 3.41707E+03 - 1.89250E+01 -1.63310E+03 -2.69968E+03 -3.76626E+03 9.94204E+02 5.09405E+02 2.46054E+01 3.62150E+03 3.71849E+03 3.81547E+03 -1.63310E+03 -2.60156E+03 -3.57002E+03 9.03896E+02 4.66022E+02 2.81481E+01 3.44089E+03 3.53360E+03 3.62632E+03 -1.46077E+03 -2.41982E+03 -3.37888E+03 8.93646E+02 4.57601E+02 2.15557E+01 3.24806E+03 3.33503E+03 3.42199E+03 - 1.89500E+01 -1.63525E+03 -2.70318E+03 -3.77111E+03 9.95461E+02 5.10052E+02 2.46435E+01 3.62617E+03 3.72328E+03 3.82039E+03 -1.63525E+03 -2.60506E+03 -3.57486E+03 9.05153E+02 4.66670E+02 2.81863E+01 3.44555E+03 3.53840E+03 3.63124E+03 -1.46293E+03 -2.42332E+03 -3.38372E+03 8.94903E+02 4.58249E+02 2.15939E+01 3.25273E+03 3.33982E+03 3.42691E+03 - 1.89750E+01 -1.63740E+03 -2.70668E+03 -3.77595E+03 9.96718E+02 5.10700E+02 2.46816E+01 3.63084E+03 3.72808E+03 3.82531E+03 -1.63740E+03 -2.60856E+03 -3.57971E+03 9.06410E+02 4.67317E+02 2.82244E+01 3.45022E+03 3.54319E+03 3.63616E+03 -1.46508E+03 -2.42682E+03 -3.38856E+03 8.96160E+02 4.58896E+02 2.16320E+01 3.25740E+03 3.34461E+03 3.43182E+03 - 1.90000E+01 -1.72572E+03 -2.75198E+03 -3.77824E+03 9.57946E+02 4.93867E+02 2.97873E+01 3.64161E+03 3.73971E+03 3.83782E+03 -1.55340E+03 -2.57025E+03 -3.58710E+03 9.47696E+02 4.85445E+02 2.31949E+01 3.44879E+03 3.54114E+03 3.63349E+03 -1.55340E+03 -2.47213E+03 -3.39086E+03 8.57388E+02 4.42063E+02 2.67377E+01 3.26817E+03 3.35625E+03 3.44433E+03 - 1.90250E+01 -1.72787E+03 -2.75548E+03 -3.78309E+03 9.59203E+02 4.94514E+02 2.98255E+01 3.64628E+03 3.74451E+03 3.84274E+03 -1.55555E+03 -2.57374E+03 -3.59194E+03 9.48953E+02 4.86093E+02 2.32331E+01 3.45346E+03 3.54593E+03 3.63841E+03 -1.55555E+03 -2.47562E+03 -3.39570E+03 8.58645E+02 4.42710E+02 2.67758E+01 3.27284E+03 3.36104E+03 3.44925E+03 - 1.90500E+01 -1.73003E+03 -2.75898E+03 -3.78793E+03 9.60460E+02 4.95162E+02 2.98635E+01 3.65095E+03 3.74930E+03 3.84766E+03 -1.55770E+03 -2.57724E+03 -3.59678E+03 9.50210E+02 4.86741E+02 2.32711E+01 3.45812E+03 3.55072E+03 3.64332E+03 -1.55770E+03 -2.47912E+03 -3.40054E+03 8.59902E+02 4.43358E+02 2.68139E+01 3.27751E+03 3.36584E+03 3.45417E+03 - 1.90750E+01 -1.73218E+03 -2.76248E+03 -3.79277E+03 9.61717E+02 4.95809E+02 2.99017E+01 3.65561E+03 3.75409E+03 3.85257E+03 -1.55986E+03 -2.58074E+03 -3.60162E+03 9.51467E+02 4.87388E+02 2.33093E+01 3.46279E+03 3.55552E+03 3.64824E+03 -1.55986E+03 -2.48262E+03 -3.40538E+03 8.61159E+02 4.44005E+02 2.68521E+01 3.28217E+03 3.37063E+03 3.45909E+03 - 1.91000E+01 -1.73434E+03 -2.76597E+03 -3.79761E+03 9.62974E+02 4.96457E+02 2.99398E+01 3.66028E+03 3.75889E+03 3.85749E+03 -1.56201E+03 -2.58424E+03 -3.60647E+03 9.52724E+02 4.88036E+02 2.33474E+01 3.46746E+03 3.56031E+03 3.65316E+03 -1.56201E+03 -2.48612E+03 -3.41022E+03 8.62416E+02 4.44653E+02 2.68901E+01 3.28684E+03 3.37542E+03 3.46401E+03 - 1.91250E+01 -1.73649E+03 -2.76947E+03 -3.80246E+03 9.64231E+02 4.97104E+02 2.99779E+01 3.66495E+03 3.76368E+03 3.86241E+03 -1.56417E+03 -2.58774E+03 -3.61131E+03 9.53981E+02 4.88683E+02 2.33855E+01 3.47213E+03 3.56510E+03 3.65808E+03 -1.56417E+03 -2.48962E+03 -3.41507E+03 8.63673E+02 4.45300E+02 2.69283E+01 3.29151E+03 3.38022E+03 3.46892E+03 - 1.91500E+01 -1.73864E+03 -2.77297E+03 -3.80730E+03 9.65488E+02 4.97752E+02 3.00161E+01 3.66962E+03 3.76847E+03 3.86733E+03 -1.56632E+03 -2.59124E+03 -3.61615E+03 9.55238E+02 4.89331E+02 2.34237E+01 3.47680E+03 3.56990E+03 3.66300E+03 -1.56632E+03 -2.49311E+03 -3.41991E+03 8.64930E+02 4.45948E+02 2.69664E+01 3.29618E+03 3.38501E+03 3.47384E+03 - 1.91750E+01 -1.74080E+03 -2.77647E+03 -3.81214E+03 9.66744E+02 4.98399E+02 3.00541E+01 3.67429E+03 3.77327E+03 3.87225E+03 -1.56847E+03 -2.59473E+03 -3.62099E+03 9.56495E+02 4.89978E+02 2.34617E+01 3.48146E+03 3.57469E+03 3.66792E+03 -1.56847E+03 -2.49661E+03 -3.42475E+03 8.66186E+02 4.46595E+02 2.70045E+01 3.30085E+03 3.38980E+03 3.47876E+03 - 1.92000E+01 -1.74295E+03 -2.77997E+03 -3.81698E+03 9.68002E+02 4.99047E+02 3.00923E+01 3.67895E+03 3.77806E+03 3.87717E+03 -1.57063E+03 -2.59823E+03 -3.62584E+03 9.57752E+02 4.90626E+02 2.34999E+01 3.48613E+03 3.57948E+03 3.67284E+03 -1.57063E+03 -2.50011E+03 -3.42959E+03 8.67444E+02 4.47243E+02 2.70427E+01 3.30551E+03 3.39460E+03 3.48368E+03 - 1.92250E+01 -1.74511E+03 -2.78347E+03 -3.82182E+03 9.69258E+02 4.99694E+02 3.01304E+01 3.68362E+03 3.78285E+03 3.88209E+03 -1.57278E+03 -2.60173E+03 -3.63068E+03 9.59009E+02 4.91273E+02 2.35380E+01 3.49080E+03 3.58428E+03 3.67775E+03 -1.57278E+03 -2.50361E+03 -3.43444E+03 8.68700E+02 4.47891E+02 2.70807E+01 3.31018E+03 3.39939E+03 3.48860E+03 - 1.92500E+01 -1.74726E+03 -2.78696E+03 -3.82667E+03 9.70515E+02 5.00342E+02 3.01685E+01 3.68829E+03 3.78765E+03 3.88700E+03 -1.57494E+03 -2.60523E+03 -3.63552E+03 9.60266E+02 4.91921E+02 2.35761E+01 3.49547E+03 3.58907E+03 3.68267E+03 -1.57494E+03 -2.50711E+03 -3.43928E+03 8.69957E+02 4.48538E+02 2.71189E+01 3.31485E+03 3.40418E+03 3.49352E+03 - 1.92750E+01 -1.74941E+03 -2.79046E+03 -3.83151E+03 9.71772E+02 5.00990E+02 3.02067E+01 3.69296E+03 3.79244E+03 3.89192E+03 -1.57709E+03 -2.60873E+03 -3.64036E+03 9.61523E+02 4.92569E+02 2.36143E+01 3.50014E+03 3.59386E+03 3.68759E+03 -1.57709E+03 -2.51061E+03 -3.44412E+03 8.71214E+02 4.49186E+02 2.71570E+01 3.31952E+03 3.40898E+03 3.49844E+03 - 1.93000E+01 -1.75157E+03 -2.79396E+03 -3.83635E+03 9.73029E+02 5.01637E+02 3.02447E+01 3.69763E+03 3.79723E+03 3.89684E+03 -1.57924E+03 -2.61222E+03 -3.64520E+03 9.62780E+02 4.93216E+02 2.36523E+01 3.50480E+03 3.59866E+03 3.69251E+03 -1.57924E+03 -2.51410E+03 -3.44896E+03 8.72471E+02 4.49833E+02 2.71951E+01 3.32419E+03 3.41377E+03 3.50335E+03 - 1.93250E+01 -1.75372E+03 -2.79746E+03 -3.84119E+03 9.74286E+02 5.02285E+02 3.02829E+01 3.70229E+03 3.80203E+03 3.90176E+03 -1.58140E+03 -2.61572E+03 -3.65005E+03 9.64037E+02 4.93864E+02 2.36905E+01 3.50947E+03 3.60345E+03 3.69743E+03 -1.58140E+03 -2.51760E+03 -3.45381E+03 8.73728E+02 4.50481E+02 2.72333E+01 3.32885E+03 3.41856E+03 3.50827E+03 - 1.93500E+01 -1.75588E+03 -2.80096E+03 -3.84604E+03 9.75543E+02 5.02932E+02 3.03210E+01 3.70696E+03 3.80682E+03 3.90668E+03 -1.58355E+03 -2.61922E+03 -3.65489E+03 9.65294E+02 4.94511E+02 2.37286E+01 3.51414E+03 3.60824E+03 3.70235E+03 -1.58355E+03 -2.52110E+03 -3.45865E+03 8.74985E+02 4.51128E+02 2.72713E+01 3.33352E+03 3.42336E+03 3.51319E+03 - 1.93750E+01 -1.75803E+03 -2.80445E+03 -3.85088E+03 9.76800E+02 5.03580E+02 3.03591E+01 3.71163E+03 3.81161E+03 3.91160E+03 -1.58571E+03 -2.62272E+03 -3.65973E+03 9.66551E+02 4.95159E+02 2.37667E+01 3.51881E+03 3.61304E+03 3.70727E+03 -1.58571E+03 -2.52460E+03 -3.46349E+03 8.76242E+02 4.51776E+02 2.73095E+01 3.33819E+03 3.42815E+03 3.51811E+03 - 1.94000E+01 -1.76018E+03 -2.80795E+03 -3.85572E+03 9.78057E+02 5.04227E+02 3.03973E+01 3.71630E+03 3.81641E+03 3.91652E+03 -1.58786E+03 -2.62622E+03 -3.66457E+03 9.67808E+02 4.95806E+02 2.38049E+01 3.52348E+03 3.61783E+03 3.71218E+03 -1.58786E+03 -2.52810E+03 -3.46833E+03 8.77499E+02 4.52423E+02 2.73476E+01 3.34286E+03 3.43294E+03 3.52303E+03 - 1.94250E+01 -1.76234E+03 -2.81145E+03 -3.86056E+03 9.79314E+02 5.04875E+02 3.04353E+01 3.72097E+03 3.82120E+03 3.92143E+03 -1.59001E+03 -2.62972E+03 -3.66942E+03 9.69065E+02 4.96454E+02 2.38429E+01 3.52814E+03 3.62262E+03 3.71710E+03 -1.59001E+03 -2.53159E+03 -3.47318E+03 8.78756E+02 4.53071E+02 2.73857E+01 3.34753E+03 3.43774E+03 3.52795E+03 - 1.94500E+01 -1.76449E+03 -2.81495E+03 -3.86541E+03 9.80571E+02 5.05522E+02 3.04735E+01 3.72563E+03 3.82599E+03 3.92635E+03 -1.59217E+03 -2.63321E+03 -3.67426E+03 9.70322E+02 4.97101E+02 2.38811E+01 3.53281E+03 3.62742E+03 3.72202E+03 -1.59217E+03 -2.53509E+03 -3.47802E+03 8.80013E+02 4.53719E+02 2.74239E+01 3.35219E+03 3.44253E+03 3.53287E+03 - 1.94750E+01 -1.76665E+03 -2.81845E+03 -3.87025E+03 9.81828E+02 5.06170E+02 3.05116E+01 3.73030E+03 3.83079E+03 3.93127E+03 -1.59432E+03 -2.63671E+03 -3.67910E+03 9.71579E+02 4.97749E+02 2.39192E+01 3.53748E+03 3.63221E+03 3.72694E+03 -1.59432E+03 -2.53859E+03 -3.48286E+03 8.81270E+02 4.54366E+02 2.74619E+01 3.35686E+03 3.44732E+03 3.53778E+03 - 1.95000E+01 -1.76880E+03 -2.82195E+03 -3.87509E+03 9.83085E+02 5.06817E+02 3.05497E+01 3.73497E+03 3.83558E+03 3.93619E+03 -1.59648E+03 -2.64021E+03 -3.68394E+03 9.72836E+02 4.98396E+02 2.39573E+01 3.54215E+03 3.63700E+03 3.73186E+03 -1.59648E+03 -2.54209E+03 -3.48770E+03 8.82527E+02 4.55014E+02 2.75001E+01 3.36153E+03 3.45212E+03 3.54270E+03 - 1.95250E+01 -1.77095E+03 -2.82544E+03 -3.87993E+03 9.84342E+02 5.07465E+02 3.05879E+01 3.73964E+03 3.84037E+03 3.94111E+03 -1.59863E+03 -2.64371E+03 -3.68879E+03 9.74093E+02 4.99044E+02 2.39955E+01 3.54682E+03 3.64180E+03 3.73678E+03 -1.59863E+03 -2.54559E+03 -3.49254E+03 8.83784E+02 4.55661E+02 2.75382E+01 3.36620E+03 3.45691E+03 3.54762E+03 - 1.95500E+01 -1.77311E+03 -2.82894E+03 -3.88478E+03 9.85599E+02 5.08113E+02 3.06260E+01 3.74431E+03 3.84517E+03 3.94603E+03 -1.60078E+03 -2.64721E+03 -3.69363E+03 9.75349E+02 4.99692E+02 2.40336E+01 3.55148E+03 3.64659E+03 3.74170E+03 -1.60078E+03 -2.54909E+03 -3.49739E+03 8.85041E+02 4.56309E+02 2.75763E+01 3.37087E+03 3.46170E+03 3.55254E+03 - 1.95750E+01 -1.77526E+03 -2.83244E+03 -3.88962E+03 9.86856E+02 5.08760E+02 3.06641E+01 3.74897E+03 3.84996E+03 3.95095E+03 -1.60294E+03 -2.65070E+03 -3.69847E+03 9.76607E+02 5.00339E+02 2.40717E+01 3.55615E+03 3.65138E+03 3.74661E+03 -1.60294E+03 -2.55258E+03 -3.50223E+03 8.86298E+02 4.56956E+02 2.76145E+01 3.37553E+03 3.46650E+03 3.55746E+03 - 1.96000E+01 -1.77742E+03 -2.83594E+03 -3.89446E+03 9.88113E+02 5.09408E+02 3.07022E+01 3.75364E+03 3.85475E+03 3.95586E+03 -1.60509E+03 -2.65420E+03 -3.70331E+03 9.77864E+02 5.00987E+02 2.41098E+01 3.56082E+03 3.65618E+03 3.75153E+03 -1.60509E+03 -2.55608E+03 -3.50707E+03 8.87555E+02 4.57604E+02 2.76525E+01 3.38020E+03 3.47129E+03 3.56238E+03 - 1.96250E+01 -1.77957E+03 -2.83944E+03 -3.89930E+03 9.89370E+02 5.10055E+02 3.07403E+01 3.75831E+03 3.85955E+03 3.96078E+03 -1.60725E+03 -2.65770E+03 -3.70816E+03 9.79120E+02 5.01634E+02 2.41479E+01 3.56549E+03 3.66097E+03 3.75645E+03 -1.60725E+03 -2.55958E+03 -3.51191E+03 8.88812E+02 4.58251E+02 2.76907E+01 3.38487E+03 3.47608E+03 3.56730E+03 - 1.96500E+01 -1.78172E+03 -2.84293E+03 -3.90415E+03 9.90627E+02 5.10703E+02 3.07785E+01 3.76298E+03 3.86434E+03 3.96570E+03 -1.60940E+03 -2.66120E+03 -3.71300E+03 9.80377E+02 5.02282E+02 2.41861E+01 3.57016E+03 3.66576E+03 3.76137E+03 -1.60940E+03 -2.56308E+03 -3.51676E+03 8.90069E+02 4.58899E+02 2.77288E+01 3.38954E+03 3.48088E+03 3.57221E+03 - 1.96750E+01 -1.78388E+03 -2.84643E+03 -3.90899E+03 9.91884E+02 5.11350E+02 3.08166E+01 3.76765E+03 3.86913E+03 3.97062E+03 -1.61155E+03 -2.66470E+03 -3.71784E+03 9.81634E+02 5.02929E+02 2.42242E+01 3.57482E+03 3.67056E+03 3.76629E+03 -1.61155E+03 -2.56658E+03 -3.52160E+03 8.91326E+02 4.59546E+02 2.77669E+01 3.39421E+03 3.48567E+03 3.57713E+03 - 1.97000E+01 -1.78603E+03 -2.84993E+03 -3.91383E+03 9.93141E+02 5.11998E+02 3.08547E+01 3.77231E+03 3.87393E+03 3.97554E+03 -1.61371E+03 -2.66820E+03 -3.72268E+03 9.82891E+02 5.03577E+02 2.42623E+01 3.57949E+03 3.67535E+03 3.77121E+03 -1.61371E+03 -2.57008E+03 -3.52644E+03 8.92583E+02 4.60194E+02 2.78051E+01 3.39887E+03 3.49046E+03 3.58205E+03 - 1.97250E+01 -1.78819E+03 -2.85343E+03 -3.91867E+03 9.94398E+02 5.12645E+02 3.08928E+01 3.77698E+03 3.87872E+03 3.98046E+03 -1.61586E+03 -2.67169E+03 -3.72753E+03 9.84148E+02 5.04224E+02 2.43004E+01 3.58416E+03 3.68014E+03 3.77613E+03 -1.61586E+03 -2.57357E+03 -3.53128E+03 8.93840E+02 4.60842E+02 2.78431E+01 3.40354E+03 3.49526E+03 3.58697E+03 - 1.97500E+01 -1.79034E+03 -2.85693E+03 -3.92351E+03 9.95655E+02 5.13293E+02 3.09309E+01 3.78165E+03 3.88351E+03 3.98538E+03 -1.61802E+03 -2.67519E+03 -3.73237E+03 9.85405E+02 5.04872E+02 2.43385E+01 3.58883E+03 3.68494E+03 3.78104E+03 -1.61802E+03 -2.57707E+03 -3.53613E+03 8.95097E+02 4.61489E+02 2.78813E+01 3.40821E+03 3.50005E+03 3.59189E+03 - 1.97750E+01 -1.79249E+03 -2.86043E+03 -3.92836E+03 9.96912E+02 5.13940E+02 3.09691E+01 3.78632E+03 3.88831E+03 3.99029E+03 -1.62017E+03 -2.67869E+03 -3.73721E+03 9.86662E+02 5.05520E+02 2.43767E+01 3.59350E+03 3.68973E+03 3.78596E+03 -1.62017E+03 -2.58057E+03 -3.54097E+03 8.96354E+02 4.62137E+02 2.79194E+01 3.41288E+03 3.50484E+03 3.59681E+03 - 1.98000E+01 -1.79465E+03 -2.86392E+03 -3.93320E+03 9.98169E+02 5.14588E+02 3.10072E+01 3.79099E+03 3.89310E+03 3.99521E+03 -1.62232E+03 -2.68219E+03 -3.74205E+03 9.87919E+02 5.06167E+02 2.44148E+01 3.59816E+03 3.69452E+03 3.79088E+03 -1.62232E+03 -2.58407E+03 -3.54581E+03 8.97611E+02 4.62784E+02 2.79575E+01 3.41755E+03 3.50964E+03 3.60173E+03 - 1.98250E+01 -1.79680E+03 -2.86742E+03 -3.93804E+03 9.99426E+02 5.15236E+02 3.10453E+01 3.79565E+03 3.89789E+03 4.00013E+03 -1.62448E+03 -2.68569E+03 -3.74689E+03 9.89176E+02 5.06815E+02 2.44529E+01 3.60283E+03 3.69932E+03 3.79580E+03 -1.62448E+03 -2.58757E+03 -3.55065E+03 8.98868E+02 4.63432E+02 2.79957E+01 3.42221E+03 3.51443E+03 3.60664E+03 - 1.98500E+01 -1.79896E+03 -2.87092E+03 -3.94288E+03 1.00068E+03 5.15883E+02 3.10834E+01 3.80032E+03 3.90269E+03 4.00505E+03 -1.62663E+03 -2.68919E+03 -3.75174E+03 9.90433E+02 5.07462E+02 2.44910E+01 3.60750E+03 3.70411E+03 3.80072E+03 -1.62663E+03 -2.59106E+03 -3.55550E+03 9.00125E+02 4.64079E+02 2.80337E+01 3.42688E+03 3.51922E+03 3.61156E+03 - 1.98750E+01 -1.80111E+03 -2.87442E+03 -3.94773E+03 1.00194E+03 5.16531E+02 3.11215E+01 3.80499E+03 3.90748E+03 4.00997E+03 -1.62879E+03 -2.69268E+03 -3.75658E+03 9.91690E+02 5.08110E+02 2.45291E+01 3.61217E+03 3.70890E+03 3.80564E+03 -1.62879E+03 -2.59456E+03 -3.56034E+03 9.01382E+02 4.64727E+02 2.80719E+01 3.43155E+03 3.52402E+03 3.61648E+03 - 1.99000E+01 -1.80327E+03 -2.87792E+03 -3.95257E+03 1.00320E+03 5.17178E+02 3.11597E+01 3.80966E+03 3.91227E+03 4.01489E+03 -1.63094E+03 -2.69618E+03 -3.76142E+03 9.92947E+02 5.08757E+02 2.45673E+01 3.61684E+03 3.71370E+03 3.81056E+03 -1.63094E+03 -2.59806E+03 -3.56518E+03 9.02639E+02 4.65374E+02 2.81100E+01 3.43622E+03 3.52881E+03 3.62140E+03 - 1.99250E+01 -1.80542E+03 -2.88142E+03 -3.95741E+03 1.00445E+03 5.17826E+02 3.11978E+01 3.81433E+03 3.91707E+03 4.01981E+03 -1.63310E+03 -2.69968E+03 -3.76626E+03 9.94204E+02 5.09405E+02 2.46054E+01 3.62150E+03 3.71849E+03 3.81547E+03 -1.63310E+03 -2.60156E+03 -3.57002E+03 9.03896E+02 4.66022E+02 2.81481E+01 3.44089E+03 3.53360E+03 3.62632E+03 - 1.99500E+01 -1.80757E+03 -2.88491E+03 -3.96225E+03 1.00571E+03 5.18473E+02 3.12359E+01 3.81899E+03 3.92186E+03 4.02473E+03 -1.63525E+03 -2.70318E+03 -3.77111E+03 9.95461E+02 5.10052E+02 2.46435E+01 3.62617E+03 3.72328E+03 3.82039E+03 -1.63525E+03 -2.60506E+03 -3.57486E+03 9.05153E+02 4.66670E+02 2.81863E+01 3.44555E+03 3.53840E+03 3.63124E+03 - 1.99750E+01 -1.80973E+03 -2.88841E+03 -3.96710E+03 1.00697E+03 5.19121E+02 3.12740E+01 3.82366E+03 3.92665E+03 4.02964E+03 -1.63740E+03 -2.70668E+03 -3.77595E+03 9.96718E+02 5.10700E+02 2.46816E+01 3.63084E+03 3.72808E+03 3.82531E+03 -1.63740E+03 -2.60856E+03 -3.57971E+03 9.06410E+02 4.67317E+02 2.82244E+01 3.45022E+03 3.54319E+03 3.63616E+03 - 2.00000E+01 -1.72572E+03 -2.85010E+03 -3.97449E+03 1.04825E+03 5.37249E+02 2.62446E+01 3.82223E+03 3.92460E+03 4.02697E+03 -1.72572E+03 -2.75198E+03 -3.77824E+03 9.57946E+02 4.93867E+02 2.97873E+01 3.64161E+03 3.73971E+03 3.83782E+03 -1.55340E+03 -2.57025E+03 -3.58710E+03 9.47696E+02 4.85445E+02 2.31949E+01 3.44879E+03 3.54114E+03 3.63349E+03 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel deleted file mode 100644 index 40fc5b19ae..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_ascii.sel +++ /dev/null @@ -1,41 +0,0 @@ -________________________________________________________________________________________________________________________ - Version ID : HAWC2AERO 2.4w - Time : 10:02:19 - Date : 24:01.2013 -________________________________________________________________________________________________________________________ - Result file : ./Hawc2ascii.dat -________________________________________________________________________________________________________________________ - Scans Channels Time [sec] Format - 800 28 20.000 ASCII - - Channel Variable Description - - 1 Time s Time - 2 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, -1.00, -47.50 - 3 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, -1.00, -47.50 - 4 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, -1.00, -47.50 - 5 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, -1.00, -50.00 - 6 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, -1.00, -50.00 - 7 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, -1.00, -50.00 - 8 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, -1.00, -52.50 - 9 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, -1.00, -52.50 - 10 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, -1.00, -52.50 - 11 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 0.00, -47.50 - 12 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -47.50 - 13 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 0.00, -47.50 - 14 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 0.00, -50.00 - 15 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -50.00 - 16 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 0.00, -50.00 - 17 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 0.00, -52.50 - 18 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -52.50 - 19 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 0.00, -52.50 - 20 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 1.00, -47.50 - 21 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 1.00, -47.50 - 22 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 1.00, -47.50 - 23 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 1.00, -50.00 - 24 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 1.00, -50.00 - 25 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 1.00, -50.00 - 26 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 2.50, 1.00, -52.50 - 27 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 1.00, -52.50 - 28 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos -2.50, 1.00, -52.50 -________________________________________________________________________________________________________________________ diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/HAWC2_out_bin.dat deleted file mode 100644 index 2fd25b9fc60a6ff8d04b0e108546892b97ec0866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44800 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 o6P=e{28+o?{kQrTZ|q0yyà¶¿¯Ž?»Þ?-ø @¡Ö²@E=A’ AÉT„@%@#@`¢:À‘× Àd’ñ¿Âv#¿{QO@Fä:@µù>Ò=Àž–À“wÀŠ{À¼i‰ÀË(À€—jÀÚ\À‘ä›ÀÞì¿ h.¿kP«¿©s±?x…@-E@Ïý|?YE˜¿Î0?'6Â?§ª@ë-³@—‡Ak4ò@Ó*”@ËÑ"@<§-ÀGGÀ¶íÀ^ô-¿«„`@Êk@Ì/7>úÀ \ No newline at end of file diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ParquetFile_test.parquet b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/ParquetFile_test.parquet deleted file mode 100644 index 549c998c47471d501f6954610d26a45fedc7b144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2951 zcmcguPjBKz6gPx=lPFTF)f$1s0a?3fRV5S~$S$i~1_)pZ1W1CxRTcRkU}759JLm(lQR@!!ycxK+;-+S}k6Lr+&m;mz`^Pww`UP%&wGMh5A&%r zCaAyj1%L3x{-$F;(vdYA8*urkP+BlP*iw7M2}=!lP96?Ke=TMThp&ERMIyS_FeR= zTlNxYaAL=@-P76qC~M1>4g`B@nsA#q^4NiEf}DpVI3~$a$4Bn&Yq+@fE{Jj6GrMl3 zYv`tSu}*VgT{!a*cE?U_Lmg@^f~hr{FBwB+psNl>X6cTs$&L)-x2$f1xMBCO?)h2a z;4OQ%0%jcr>y{~pjjTagWjw%R*v?^!Og&&y*OWQD=7C)nk_Vriye%zA>A?knOsmYHhe^`w$RhMH{lRl5N+H1qCP zYEC#5^3{ouE8l3v)(qRJwmA*+JA7uMiQKf!yS}CN(&w}zawe8l?AAodVSmy{60a}Y z{06_p0$?xPw3E%WTEv);p^51c*uRuc1?(Fzax=Y^N$Bk?u`5^^L$+E2El2o{)Nb~{ zMxt{HcuNyQ64L{PZ;lj8CH7jaX0dYCGrAA3t8uE@U*kxT>yiOBP!bsgPO5 zBwTtq9vmAaPaE(<&J(pkgYY2-j#@IiTFIP2Jckg^NUrlnp29`nMw}7>0?Yn zULZCl%QTf@v#VGI$FrGN_-jrPQ@yG|a^lrU?J2(-a%xVsd?(@72WM)<0@PTuzkJ71 zVuEwK$>({pId}CQzVm%Pg+eW%K8=l2EEB)kqCPpLolURSgu<8KOJeO`@OgEaESrG) z3Ve}TP>QCZT7|jp=6Wt(C zB!CZd0S|$Eb)k>?L`B8l6@4-fmil>eMYB3+k?{fJ2NoDR$MXZ`Q3=lzSdDul$2s6H zppzrMB7|LK7qxVa^F06sH0KT8<|lqo{n<|r!`bREuEZ& SkKjj;`$yGxD5?%W!T$l4HRPoL diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in deleted file mode 100644 index 53e2fcaa18..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoDISCON_PowerTracking.in +++ /dev/null @@ -1,151 +0,0 @@ -! Controller parameter input file for the Main_ED wind turbine -! - File written using ROSCO version 2.6.0 controller tuning logic on 01/21/23 - -!------- DEBUG ------------------------------------------------------------ -1 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} - -!------- CONTROLLER FLAGS ------------------------------------------------- -1 ! F_LPFType - {1: first-order low-pass filter, 2: second-order low-pass filter}, [rad/s] (currently filters generator speed and pitch control signals -0 ! F_NotchType - Notch on the measured generator speed and/or tower fore-aft motion (for floating) {0: disable, 1: generator speed, 2: tower-top fore-aft motion, 3: generator speed and tower-top fore-aft motion} -0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} -3 ! VS_ControlMode - Generator torque control mode in above rated conditions {0: constant torque, 1: constant power, 2: TSR tracking PI control with constant torque, 3: TSR tracking PI control with constant power} -1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} -0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} -1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} -1 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} -2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} -1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} -0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} -0 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} -0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} -0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} -0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time} -0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} -0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} -0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} - -!------- FILTERS ---------------------------------------------------------- -0.61500 ! F_LPFCornerFreq >>> Tunedvalue was: 0.31500 - Corner frequency (-3dB point) in the low-pass filters, [rad/s] -0.00000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] -0.00000 ! F_NotchCornerFreq - Natural frequency of the notch filter, [rad/s] -0.000000 0.250000 ! F_NotchBetaNumDen - Two notch damping values (numerator and denominator, resp) - determines the width and depth of the notch, [-] -0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. -0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. -0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. -0.000000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. -0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. -3.780000 1.000000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control [rad/s, -]. - -!------- BLADE PITCH CONTROL ---------------------------------------------- -30 ! PC_GS_n - Amount of gain-scheduling table entries -0.150511 0.170047 0.187567 0.203638 0.218616 0.232742 0.246187 0.258963 0.271200 0.283059 0.294514 0.305550 0.316371 0.326840 0.337077 0.347108 0.356849 0.366502 0.375849 0.385148 0.394189 0.403154 0.411886 0.420555 0.429027 0.437457 0.445707 0.453937 0.461993 0.470003 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. --1.802655 -1.644720 -1.508878 -1.390797 -1.287208 -1.195596 -1.113999 -1.040858 -0.974925 -0.915183 -0.860801 -0.811087 -0.765465 -0.723450 -0.684631 -0.648656 -0.615223 -0.584073 -0.554979 -0.527745 -0.502197 -0.478183 -0.455570 -0.434238 -0.414082 -0.395006 -0.376927 -0.359768 -0.343460 -0.327942 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. --0.747085 -0.690899 -0.642574 -0.600566 -0.563714 -0.531124 -0.502095 -0.476076 -0.452620 -0.431367 -0.412020 -0.394335 -0.378105 -0.363158 -0.349348 -0.336550 -0.324656 -0.313574 -0.303224 -0.293536 -0.284447 -0.275904 -0.267860 -0.260271 -0.253100 -0.246314 -0.239882 -0.233778 -0.227977 -0.222456 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. -0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains -0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) -1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. -0.036320000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. -0.174500000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. --0.17450000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. -1.395100000000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. -0.036320000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] -0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] - -!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- -9.600000 12.000000 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] -0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] -0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] -0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] -0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. -0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] - -!------- VS TORQUE CONTROL ------------------------------------------------ -100.0000000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] -2580460.182070 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] -650000.0000000 ! VS_MaxRat >>> TunedValued:650000.0000000 - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. -2838506.200270 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. -0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. -0.680000000000 ! VS_MinOMSpd >>> TunedValue: - Minimum generator speed [rad/s] -1452489.929660 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side), [Nm/(rad/s)^2] -3600000.000000 ! VS_RtPwr - Wind turbine rated power [W] -2580460.182070 ! VS_RtTq - Rated torque, [Nm]. -1.395100000000 ! VS_RefSpd - Rated generator speed [rad/s] -1 ! VS_n - Number of generator PI torque controller gains --6954512.69764 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) --781263.090000 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) -9.595 ! VS_TSRopt >>> TunedValue:8.82 - Power-maximizing region 2 tip-speed-ratio [rad]. - -!------- SETPOINT SMOOTHER --------------------------------------------- -1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. -0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. - -!------- POWER REFERENCE TRACKING -------------------------------------- -45 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_RotorSpeeds array -3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 20.5 21.0 21.5 22.0 22.5 23.0 23.5 24.0 24.5 25.0 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s]. -0.6910268144787133 0.6960401593650649 0.7165597438704334 0.738185676421178 0.7608053103653986 0.7776758882514259 0.9275392403488596 0.9519480597035652 1.0186573938021806 1.0857272198939956 1.1535923474943748 1.205354257912827 1.2447250825053235 1.265512130479433 1.2731046664774792 1.2768229123691115 1.3035008107787789 1.3644268867738227 1.3950661379469709 1.3949948761209916 1.394923614295013 1.3948523524690342 1.394781090643055 1.3947098288170765 1.394638566991098 1.394567305165119 1.39449604333914 1.3944247815131616 1.3943535196871826 1.3942822578612035 1.3942109960352247 1.3941397342092463 1.3940684723832677 1.3939972105572886 1.3939259487313096 1.3938546869053312 1.3937834250793522 1.3937121632533735 1.3936409014273947 1.275861750264016 1.2764425597166416 1.2770233691692672 1.2776041786218928 1.2781849880745186 1.2787657975271445 ! PRC_RotorSpeeds - Array of rotor speeds corresponding to PRC_WindSpeeds [rad/s]. - -!------- WIND SPEED ESTIMATOR --------------------------------------------- -65.085 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] -1 ! WE_CP_n - Amount of parameters in the Cp array -0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function -0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] -1.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] -34722804.00000 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] -1.225 ! WE_RhoAir - Air density, [kg m^-3] -"SWT-3p6-130_Cp_Ct_Cq.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) -36 26 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios -60 ! WE_FOPoles_N - Number of first-order system poles used in EKF -3.0000 3.3103 3.6207 3.9310 4.2414 4.5517 4.8621 5.1724 5.4828 5.7931 6.1034 6.4138 6.7241 7.0345 7.3448 7.6552 7.9655 8.2759 8.5862 8.8966 9.2069 9.5172 9.8276 10.1379 10.4483 10.7586 11.0690 11.3793 11.6897 12.0000 12.4333 12.8667 13.3000 13.7333 14.1667 14.6000 15.0333 15.4667 15.9000 16.3333 16.7667 17.2000 17.6333 18.0667 18.5000 18.9333 19.3667 19.8000 20.2333 20.6667 21.1000 21.5333 21.9667 22.4000 22.8333 23.2667 23.7000 24.1333 24.5667 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] --0.01675237 -0.01848537 -0.02021837 -0.02195138 -0.02368438 -0.02541738 -0.02715039 -0.02888339 -0.03061639 -0.03234940 -0.03408240 -0.03581540 -0.03754841 -0.03928141 -0.04101441 -0.04274742 -0.04448042 -0.04621342 -0.04794643 -0.04967943 -0.05141243 -0.05314544 -0.05487844 -0.05661144 -0.05572739 -0.05017938 -0.04026019 -0.02871709 -0.00971339 -0.04067865 0.00818207 0.00211342 -0.00482802 -0.01262516 -0.02096731 -0.02974463 -0.03916053 -0.04874708 -0.05875276 -0.06931562 -0.07999290 -0.09081923 -0.10219998 -0.11405921 -0.12562480 -0.13746588 -0.14961465 -0.16249907 -0.17543461 -0.18782154 -0.20027790 -0.21343756 -0.22678626 -0.24101883 -0.25473108 -0.26767005 -0.28052026 -0.29438557 -0.30826452 -0.32314303 ! WE_FOPoles - First order system poles [1/s] - -!------- YAW CONTROL ------------------------------------------------------ -0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] -4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. -0.00870 ! Y_Rate - Yaw rate [rad/s] -0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] -0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] -0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp -0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki - -!------- TOWER FORE-AFT DAMPING ------------------------------------------- --1.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller [rad s/m] -0.0 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] -0.0 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] - -!------- MINIMUM PITCH SATURATION ------------------------------------------- -45 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) -3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 20.5 21.0 21.5 22.0 22.5 23.0 23.5 24.0 24.5 25.0 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] -0.03433429157815764 0.031810319257858856 0.0290411053542571 0.026159059732509628 0.023197536519278562 0.02023601330604749 0.016539572859770497 0.012812807649260424 0.009178197567017179 0.0055435874847739285 0.0019089774025306792 0.00035367821989023234 -0.0001847841217967057 -0.0006880495172071447 0.0011581050975086446 0.07313877536508506 0.10080437650314836 0.12350678083692652 0.143559308829277 0.16319259532494113 0.18282588182060522 0.19751809368049394 0.2121360790842221 0.2267540644879502 0.24148455945770236 0.2562873503246761 0.27109014119164987 0.2851632439462169 0.2986736364561117 0.3121840289660065 0.3256944214759013 0.337480946474891 0.3490998890057371 0.360718831536583 0.37233777406742913 0.3839567165982751 0.39557565912912107 0.40673217388403315 0.41782455324483364 0.42891693260563396 0.44000931196643445 0.45110169132723493 0.4621940706880354 0.47314377493350046 0.483632110622263 ! PS_BldPitchMin - Minimum blade pitch angles [rad] - -!------- SHUTDOWN ----------------------------------------------------------- -0.436300000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] -0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] - -!------- Floating ----------------------------------------------------------- -0.000000000000 ! Fl_Kp - Nacelle velocity proportional feedback gain [s] - -!------- FLAP ACTUATION ----------------------------------------------------- -0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] -0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] -0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] -0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] - -!------- Open Loop Control ----------------------------------------------------- -"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) -0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) -0 ! Ind_BldPitch - The column in OL_Filename that contains the blade pitch input in rad -0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm -0 ! Ind_YawRate - The column in OL_Filename that contains the generator torque in Nm - -!------- Pitch Actuator Model ----------------------------------------------------- -3.140000000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] -0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] - -!------- External Controller Interface ----------------------------------------------------- -"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format -"unused" ! DLL_InFile - Name of input file sent to the DLL (-) -"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) - -!------- ZeroMQ Interface --------------------------------------------------------- -"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") -2 ! ZMQ_UpdatePeriod - Call ZeroMQ every [x] seconds, [s] diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt deleted file mode 100644 index fecaae6404..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/RoscoPerformance_CpCtCq.txt +++ /dev/null @@ -1,29 +0,0 @@ -# ----- Rotor performance tables for the OpenFAST_5MW wind turbine ----- -# ------------ Written on Oct-30-19 using the ROSCO toolbox ------------ - -# Pitch angle vector - x axis (matrix columns) (deg) --1.0 -0.5 0.0 0.5 1.0 -# TSR vector - y axis (matrix rows) (-) -3.0 3.5 4.0 -# Wind speed vector - z axis (m/s) -11.4 - -# Power coefficient - -0.089542 0.094392 0.099145 0.103788 0.108307 -0.141508 0.147502 0.153253 0.158739 0.163935 -0.201243 0.207940 0.214159 0.219868 0.225035 - - -# Thrust coefficient - -0.230643 0.231358 0.231931 0.232351 0.232612 -0.296203 0.296020 0.295605 0.294960 0.294088 -0.365790 0.364336 0.362614 0.360628 0.358382 - - -# Torque coefficient - -0.029876 0.031494 0.033080 0.034629 0.036137 -0.040469 0.042184 0.043828 0.045397 0.046883 -0.050359 0.052034 0.053591 0.055019 0.056312 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_1Grp2Chan_TimeTrack.tdms b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_1Grp2Chan_TimeTrack.tdms deleted file mode 100644 index b09be010028a6c37af380da97c19b6bb4a224bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmWG>3C`tXU|`4)Vqg$q0y2Q$3WQ<+aRq@`Up*x?EwMDGL|tFqIX}lyT?8n|1;mU% z3}S--NHGr(m#4*N<|P-U=BDPAfYfNLU%033(<*y@h+J_=Vo^zaep*^_Dp(pQ3I?xq)HHfR5g^NSWw zz43DYj`CyQ!Z|Ue%jI7``N?WPg^m6wzsRDHmA4f`+oijC#8+Np4&V3 k$(}7={L9|AQsVo{mQD74V)e>PTe|j7C}NiN*!0aF08ixAWB>pF diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_2Grp2Chan.tdms b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TDMS_2Grp2Chan.tdms deleted file mode 100644 index cf9b2e919aefb324943c3908cd03d889680d9451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019 zcmWG>3C`tXU|`4)Vqmz>3}gVoeh9_D0;Gk3SYO?}D8ID8QC(l%IX@>PGdERT1Sre} z#Ed`;V#9y{kb$b)5vN)Sgjy$r(ZwZ+xdmW7EJ~cf8<)5+#@upnA02RMt50;*C9V&mz9xNSj5325geGb^5M^N=o>;u3CK85Og zZf`c_I#B2(RR1e`sZ-fN9dDrKyt9Y6>w~?p&8N$E+`sO3{I_a9m-5s7H?{_9wV!-v z&)i_HvZM9V{#NGZtMR-a_J87Beq(j(tNrRV4vDK>F7NNFyS(7U~2_UqQ$Cw)8gVgJDgOiB(yYzO!fw=Usa^K5@I z!!+Bc55Deyb8EKU@kO8aXNp=E%XB`ofBNRI^!XQ0_e(u;VfMay4VDTR7*2H`hlM4G zZjkOp;WOm+q3|2_^`r0^1SX>J8xkj>@EJBwM&UQGOhw@{giS-?H!Poy!e{t71BKt< zH4BB$FlROjzv1m16h4FfJQRMzg!w3ZhDQrf_zlL3Q1}e3i&6Lu*Oq|!%yt}!PYb^7 zXI0~o|EKoQewDkJ=;4n~>`z!;kj~w4%l=5F*6pW>ANN1(X(%d~@YR0a+J%3eA6(y` zwVi)~(cc^PyBmJ2H=Xg&{!zs$?C&bK|6;#W zwm&c}rcRbwh*|qhJGS63gw0JGBzoC)C(sRyN?BklF KWft-5w+8^)7CplN diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat deleted file mode 100644 index 3bc428de60..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_1.dat +++ /dev/null @@ -1,11 +0,0 @@ -VARIABLES = "Alpha_[deg]","Cl_[-]","Cd_[-]" --3.821594 -0.1068473 0.01848371 --0.1351164 0.00076118 0.0133004 -7.051793 0.6396082 0.03828023 -18.14393 1.323551 0.1517825 -24.83678 1.788388 0.3538913 -29.01219 1.475058 0.2442263 -36.01752 1.786413 0.4773372 -37.48678 1.915456 0.7654659 -41.04442 1.728049 0.71557 -47.60305 1.444345 1.050172 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat deleted file mode 100644 index b9b7fafcdd..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TecplotASCII_2.dat +++ /dev/null @@ -1,28 +0,0 @@ -TITLE = "accosurf-007 t= 15.5894" -VARIABLES = "CoordinateX" -"CoordinateY" -"CoordinateZ" -"u[m/s]" -"v[m/s]" -"w[m/s]" -DATASETAUXDATA NORM_m.s="0.28762452E+03 " -DATASETAUXDATA PATH="/lustre/cray/" -DATASETAUXDATA TIMESTAMP="01:35:32_19.02.2020" -DATASETAUXDATA TINF_K="0.28815000E+03 " -ZONE T="dom-7" - STRANDID=7, SOLUTIONTIME=15.5894049 - I=3, J=4, K=1, ZONETYPE=Ordered - DATAPACKING=POINT - DT=(SINGLE SINGLE SINGLE SINGLE SINGLE SINGLE ) - 0.000000000E+00 -1.000000000E+02 0.000000000E+00 6.422097965E-09 1.117181000E-11 -1.143066718E-11 - 0.000000000E+00 -9.600000000E+01 0.000000000E+00 6.424601295E-09 8.401054158E-12 -1.158505930E-11 - 0.000000000E+00 -9.200000000E+01 0.000000000E+00 6.426116972E-09 6.519663281E-12 -1.169956233E-11 - 0.000000000E+00 -8.800000000E+01 0.000000000E+00 6.426900789E-09 5.326627594E-12 -1.180718977E-11 - 0.000000000E+00 -8.400000000E+01 0.000000000E+00 6.427312460E-09 5.249155711E-12 -1.310005490E-11 - 0.000000000E+00 -8.000000000E+01 0.000000000E+00 1.353533626E+00 -8.091490017E-04 -2.368479269E-03 - 0.000000000E+00 -7.600000000E+01 0.000000000E+00 2.526548393E-08 1.098948450E-11 -4.482937632E-11 - 0.000000000E+00 -7.200000000E+01 0.000000000E+00 2.526406639E-08 9.429169251E-12 -4.497692149E-11 - 0.000000000E+00 -6.800000000E+01 0.000000000E+00 2.526252274E-08 7.517836180E-12 -4.499923351E-11 - 0.000000000E+00 -6.400000000E+01 0.000000000E+00 2.526164522E-08 5.834952747E-12 -4.466245082E-11 - 0.000000000E+00 -6.000000000E+01 0.000000000E+00 2.525990261E-08 4.354900121E-12 -4.505384260E-11 - 0.000000000E+00 -5.600000000E+01 0.000000000E+00 2.525895049E-08 3.207297926E-12 -4.506787304E-11 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt deleted file mode 100644 index 594d650c54..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSimTS.txt +++ /dev/null @@ -1,17 +0,0 @@ ---------------TurbSim v2.00.* User Time Series Input File----------------------- -Comment --------------------------------------------------------------------------------- - 3 nComp - Number of velocity components in the file - 1 nPoints - Number of time series points contained in this file (-) - 1 RefPtID - Index of the reference point (1-nPoints) - Pointyi Pointzi ! nPoints listed in order of increasing height - (m) (m) - 0.00 80.00 ---------Time Series------------------------------------------------------------- -Elapsed Time Point01u Point01v Point01w - (s) (m/s) (m/s) (m/s) -0.00 9.373997257 -0.863171203 -1.009559755 -0.01 9.291859275 -0.787680428 -1.030878636 -0.02 9.267038696 -0.870045789 -1.090877688 -0.03 9.404202705 -0.903012754 -1.009028963 -0.04 9.339542454 -0.751390609 -1.02042094 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_FAST.bts b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_FAST.bts deleted file mode 100644 index 3e8497ae4bd0f76e97b8b578d542cce1e32eadfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 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 S3*Xk&8PWI)l;IpO_@v}hE%Oop diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_NoTwr.bts b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_NoTwr.bts deleted file mode 100644 index 030a0ddac796a25a103b7d9523d3e4dfeed970bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7372 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 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_WithTwr.bts b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/TurbSim_WithTwr.bts deleted file mode 100644 index 0546d43a1f8e415c62196f61cb985b0af604d737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9772 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

>B_M@)Gbh>_ZsX#vy|RZBA@=zhOp^AF z4S^A{^R|o!$`Ry6<9k`h*^h?luB(_Zh^O~)2{mijV-K&2H4~8{lOTRTt2ygy2Dp!Y z*9;t&s)Pq7A14HaVj>itNv$YJC(Jpdx^+zk&o^>_xlRp%B6WT%W&wNveF2+;j#%0F z{F}nNX}i}&*bCQiOxygqY#+P*()`Ie&vu}%S&CKRe#^SG(zhyH}m7+|YcEbMh=a)7!inyI=O{i9kP>at0~29|We z#@WIGG&?BUe2ra#OL^}`2s94w7FiG~sQaBu zQwe3mKjEW1NKXlDuXugktI+pR=Sep-t{83<{p{E_QU!?@Sc*(IFE#9>0$vp1Pp98Z z9XD~m7x$XSN-#nF&osduEtf1M+F8)2Fp;3k^E6wTVY3qW1Vx;vX-+SI;bk4@m*mOP1my(h;$O~ug%tb7qnS6pf+Fy z0A){F%{ag=N^6JrO`qmW0w=-APD6^*v^a73)=5mP2k+H>tR}JSFK^TJlGm4 zBJz5tD#k$F6+g*jl~7u=f6rgSP-mG|tHip#T!-dbtGojHqI(?GKUgAj)}$!{NhYAL z1CziV+;unuVFBM@@k{U(=_{KLYcn;@x83oYq&&{?k}I@Z%Y5i>aSZ*M zVA=QMf@0mrb%)d}D&wPWz+q+QWcN%p;*vyzpzazFUjfG38=cX(C5y=+LEGi3D#>@Cmhm+BFyD**VP~f_es5ONCGq2u zbbkmqoLHpkYpNG;M|u?2*4qV17CTkHR#OR8Wj(Pp$0KF^Fp}20#dm>87IMmM`ac}U zjxg&O#_51sFXz^6o$`mRiqnoqfEz88j4Ry7DNfwwoo?Gm7~OA?Hu#mcDqr;+f24&U zw^9J;-j2O1g#U76tAxak>;Mh>j{|7XO`f>gKW<)7-?z3y52PFlH$6>_U6*2d`)x%H z;7X#})ksfCr$w`*mX#lo3vk?V&-OCB{wrDYm~ybDLBJtsVsz23mmT_w-SSxU>^+St zL0*Mi3((aY&SjVmBzM#w#|Q*mGjb8~$hd<#f9dg>Vk^Lvi28+J-is3N%Zz;3q{;iK zM~*rxg0yRhF{hh(_l&M~7WHHfiS!cG_85>fIx2T;EFh^*Y^_!a&C^}$@PLyO6I0y6 zgwe5o+WS)HJge^+tMxli1&hwb<*47z3@UScC8!s89*0?r5O_C%nN7xW>G6DEt2Mb? z)0o-GT0vK==-lPE+8aO~Hnl`n(yu`c8dX9l^Gn!HSSPiYze1Erm|M=|fTS(`3rgh3 zCrPsS%a#&s;J4IXy$nTJ2Ic^xYFa}lV|Z}YkvX>wqfnWfQ`;Vbebb%AWBLCx$(i41 z41oXOb_IBXoae4LtAvA;;b>Pwj);hUU-&@%+6H7n87iZbJDf0Z%Y2vCuMH(uXR=1d zSs(nWu3KIg#rH=zvL?>kZ(I2lU5=)B#0_lIX`*(`ovbs$=+SZ=9!bonq!4#VI<14G z5=hmSF+a_9kz28XGRGB-)w}pBgz&zeu6J|KEiFxU?-UYMGBJ3l>|-ig-eraIxSp(1*(1K*n1fx+`C;b_aNp#R}+>qDlq zTFYb?oY=Ai7mY5RdJf$xbSvJ`7h^$UT%48{E({l#eltp)5gK%LkK5k(@7gY>+`vW1 zw<$v!!fU2lUz*j?o;vFpsL@ecUrdiOe^OOKQ)6|w366svpjEbTnI{PI(lC?QzGJzi zGoVA;bo0aZsu%HG7XzPKlLw(lH%k%}0qtLFBDGy_mor;t{@?Z#uBm-A=-1`p{F>H^ zliAtzFf6-PK7#6cRf1hXl3$_DCjIQrlE$5_>yUT>*1CHVRYRYVr5;eQJeS=HC?^Dt z&*Nx(#FQa*z7MXO_exjb5rwC7(>#&~KeO$dGDi=TqD`KVPvbur>T_K5Lb;2uwKFQ= zc?rgUJy3nJymWhue`S>t3(ztBmt1r0w zYL+=3vAziy@qIqD9<-_bX08Ugn#T4| z4HbITkZ-Wcwz0xXQ+Kz@)f!x{1=y_IUjFdb`tL)9n_0NdT5pGM6m?zgI~v-{4))oj zTL7n;-qfDu5*>BK2einnGq6S97>y^qWUfj`sKA4-W6O%18l7ghRi?SeOFwgQL*-pz zY_@03#JDpX1(0r)+%A4ra#}bKkj@o{uH*;|Uf_kW_iD+`M9LZI{!;7W|H1CVlb~m` zcC&&_>*7NA5!4+pm2kFs6X2JivLU`mN!c?{j?|`2%h?0*^ABhDIC+mqkRb6V*$qzV zOkV+)gIUg%q(<_y4FS=ZN$^vCy={%y1#ZKPNsb`!n_Uho$5te}$P@P}Vy=S?IlWw3t7Qo>BY7{AaPHqG!HyQIqgD>EALe z${cbDo&rhM?OAez30j%O?vPgwME)Ci|9mLe6unB1+0(qD5}F%J7hrbrfAYJp0q&Qc z)(x4~oA(}@?L9x>VNGN9$)n6oG_qJn=l_{Qu^%q^Iqf_ut@ANjkISAWFP5Ttb15_C zHGc+4b{3x1z1r(hzg9vM1Fn zS!}@4ac~5jU~$L>;;$vu`0qx@qMR3)@k6{G(~Ta#&rkpI@d8`$n}&Hy z(;0Enlg{j&TRZ)x&RSiAFWbaGPtv*MZLc$0=2mIzcT0Dx-6QQoR|}83f8iF*sDzC} z5}orqv}@hyx4;GE0iHSIiE3B4UYzU>lwIyTgn1;~#nx~@!g~zL{C$ii#MwrQ>NO#c zZ0gM{Y_uejKI5UxlGmNL)bs53!+H7%V+`P}#aY+kMdW}==$zc_Y7!j#=XiS#s;Pd| z^In}D=p_5@_C4pS%p zj&>zWUzuqe@!=19&rr-~2CaPR4iu;aGzD%ju}1Uv@s=I>HEnbH_Qhw|o*f6qR+Ds4 zYF*Dcu!JkzxC!FoKHq(9qq2)`2O~+q!Nt?yjV_wrI{>2;s>Z##i2?~(9JQC4pmV!N zvzo;6MfZ(%HK+t1#ScijV_QZ<1xlA#4%6z%N#T`uAMDbm{B;9SFHb|F*fRKBrIcs+ zx5v=(t@W4!iKYnOW+c4u!_x&P;?3R&{a5GmW>|s~o+;;JPMdoFiZI)kF zWDGwW6|@HPdqy7w=TQe2L)SS8wrOY+6pXNDr!`vk7*7r3!qM%(V(V>gyFmwrL6!-1 z-D+W)j{oAijnw{*H2lof`s$pu7)VnIOE6upEzt>0wt1z5STUQ@P_ny!p~{0(x7=n7 zTmC7{2=ZjRLlEXq`s`Xw)^D;s0et~_FdZm-WfE<&M!sb+*dn9blA8ojUQQhU#s<@< zWlz+1hQ1a($yW(Jk`LGzw>Krz+1fhimOst>o=~3+9OaW=^Lq@mRom5_+@Z(LpTna&d*|Gu&O*+wI;m|upi%Zd9+28CxW^ZX z-df;|${on~<@tAPCOe5=HErv5arEtMZpW^UHG;k7?~wUSl~B5PMSVHoY1iZGQ^H!# z*;&W#0I=4yP_(en6DFQW9e?g$gbDU^M|QMsEbKn$ly*|_4K~hzd*Tq2?xRlDATCf% zv6rJILV9g&SB_m{Q(9>T5LkRWh^G=1BMUPB(3Z;edBOD77fWidn6%(_L*c{y&gy#)D8zFFnqOqBJjcff%>dVN0%M`%Z6>jzF?L^cR&J z-6)Z3J#eZv%#rU5vNsJ-E?fRn71np1CtWzcLtE~T?y^z|E5kJ7iZQbZB0FUI>9S(_ zboUFc57Sye9D5adKy7c=gk3(gGquJf_R(4A=B;)GEsq$F8molYbVE$dP;sx-^z{}4b~Al(Ku_>z!JZ%8{?a6E z{9IeV%^A_Nh!DbFYVG%!U4y`vi=J4f`Z?5zejS|DF4WQ1NZoe{peH^aiRf2MOwfIBzWN~g|{g5S}+-0!%aVC5=iFu+)-Ei$Zs6uR%K4wIv>J)r0kQP{WZcz%81iN5ackG)UXG#Xxb~R!7hRPg=sgHL`@yaYN~+|y=!9^b zCH#KN<|ZX@M4y}3d!fnP8uR0O&^YFa>|S4;TZ&+>I8UQx{2j|s_CT;RJl$8#jLJ-*Hq6WFgdmzUpC zcv6&Hu_quCcN@J%g4Q&mZkLqwu@pp2m*dCNdD?bE#Dgnrm+ z>?h0`sY=+*z62Vt{6Y2>Zmxn({elNi4EMJDwM4FvKG3Cw?my7Nvax*2UsxWhP~p6o z4L%Gs!^bkUVA1d%#BMDei>)#(`~!``#v#_R1{(okVQ<~bFf%cKt zc8GSu1_#n+;rqKm)o%9h}tcExGJ>!BU;BN^3Flzy3gH^8G^Cye&tQ{30 zMRV$9(k1^ee5rm5L?s{x{YFmFYbHB@d-_`_Uh5bg1$``PfZ7CAU;Pf#aj|Z3jXY4B zgHp3_;_R6DX5DTQ=afINTdhTzxO7G8kGWF1h`zm4*+6AQHBpKu42l3j_IJzxa8IyG z$Sv)o4oWi?--;kY!JJ<}>4M$B1K_as!pJmWkWZlWcG)W;Z4a8q+T||CvHBq;24_s6 ztw`)1CcO4DfG*E&`vA5a8|}|puzW!;t1vX4FEM>XI0B!?tAvJ6<&2kPcj+r>qi7@D I!K@STe~;=^!T.AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) - 3 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] - 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] - 0 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} - 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} -False TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] -False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] -"unused" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] -====== Environmental Conditions =================================================================== - 1.225 AirDens - Air density (kg/m^3) - 1.4639E-05 KinVisc - Kinematic air viscosity (m^2/s) - 335 SpdSound - Speed of sound (m/s) - 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] - 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] - 0.5 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True] -====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] - 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] -"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] -True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] -True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] -True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] -False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] -False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] -"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] - 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] -====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] - 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] - 2 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] -====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] -"Elliptic_OLAF.dat" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] -====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] - 3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] -====== Airfoil Information ========================================================================= - 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) - 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) - 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) - 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) - 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) - 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) - 1 NumAFfiles - Number of airfoil files used (-) -"Polar2PiAlpha_AD15.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) -====== Rotor/Blade Properties ===================================================================== -True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) -"Elliptic_AD15_blade_40_cos.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) -"Elliptic_AD15_blade_40_dummy.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] -"Elliptic_AD15_blade_40_dummy.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] - 7 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] -TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) -(m) (m) (-) (-) -0.0000000E+00 1.0000000E+01 1.0000000E+00 1.0000000E-01 -2.3330000E+01 9.3300000E+00 1.0000000E+00 1.0000000E-01 -4.6670000E+01 8.6700000E+00 1.0000000E+00 1.0000000E-01 -7.0000000E+01 8.0000000E+00 1.0000000E+00 1.0000000E-01 -9.3330000E+01 7.3300000E+00 1.0000000E+00 1.0000000E-01 -1.1667000E+02 6.6700000E+00 1.0000000E+00 1.0000000E-01 -1.4000000E+02 6.0000000E+00 1.0000000E+00 1.0000000E-01 -====== Outputs ==================================================================================== -False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) - 0 NBlOuts - Number of blade node outputs [0 - 9] (-) - 1 BlOutNd - Blade nodes whose values will be output (-) - 0 NTwOuts - Number of tower node outputs [0 - 9] (-) - 1 TwOutNd - Tower nodes whose values will be output (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"RtTSR" -"RtVAvgxh" -"RtVAvgyh" -"RtVAvgzh" -"RtSkew" -"RtAeroFxh" -"RtAeroFyh" -"RtAeroFzh" -"RtAeroMxh" -"RtAeroMyh" -"RtAeroMzh" -"RtAeroPwr" -"RtAeroCp" -"RtAeroCq" -"RtAeroCt" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) -====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section] - 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) - "All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) - OutListAD - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -Fx -Fy -Vx -Vy -VUndx -VUndy -VUndz -STVx -STVy -STVz -Vrel -TnInd -AxInd -Theta -Phi -Vindx -Vindy -Alpha -Gam -Fn -Ft -Cl -Cd -Cm -Cx -Cy -Cn -Ct -Fl -Fd -Mm -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) ---------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat deleted file mode 100644 index b38b9d07c9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat +++ /dev/null @@ -1,46 +0,0 @@ -AERODYN v15.00.* - BLADE DEFINITION INPUT FILE -Turbine EllipticWing, Generated by script Main_CreateModel.py V112-3.075MW - ---- Blade Properties --- -40 NumBlNds - Number of blade nodes used in the analysis (-) -BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID -(m) (m) (m) (deg) (deg) (m) (-) - 0 0 0 0 0 1.00000000e-05 1 - 8.10672966e-03 0 0 0 0 8.05000000e-02 1 - 3.23743434e-02 0 0 0 0 1.60400000e-01 1 - 7.26454564e-02 0 0 0 0 2.39300000e-01 1 - 1.28658895e-01 0 0 0 0 3.16700000e-01 1 - 2.00051391e-01 0 0 0 0 3.92000000e-01 1 - 2.86359936e-01 0 0 0 0 4.64700000e-01 1 - 3.87024786e-01 0 0 0 0 5.34500000e-01 1 - 5.01393091e-01 0 0 0 0 6.00700000e-01 1 - 6.28723130e-01 0 0 0 0 6.63100000e-01 1 - 7.68189116e-01 0 0 0 0 7.21200000e-01 1 - 9.18886561e-01 0 0 0 0 7.74600000e-01 1 - 1.07983813e+00 0 0 0 0 8.23000000e-01 1 - 1.25000000e+00 0 0 0 0 8.66000000e-01 1 - 1.42826860e+00 0 0 0 0 9.03500000e-01 1 - 1.61348778e+00 0 0 0 0 9.35000000e-01 1 - 1.80445634e+00 0 0 0 0 9.60500000e-01 1 - 1.99993577e+00 0 0 0 0 9.79800000e-01 1 - 2.19865830e+00 0 0 0 0 9.92700000e-01 1 - 2.39933515e+00 0 0 0 0 9.99200000e-01 1 - 2.60066485e+00 0 0 0 0 9.99200000e-01 1 - 2.80134170e+00 0 0 0 0 9.92700000e-01 1 - 3.00006423e+00 0 0 0 0 9.79800000e-01 1 - 3.19554366e+00 0 0 0 0 9.60500000e-01 1 - 3.38651222e+00 0 0 0 0 9.35000000e-01 1 - 3.57173140e+00 0 0 0 0 9.03500000e-01 1 - 3.75000000e+00 0 0 0 0 8.66000000e-01 1 - 3.92016187e+00 0 0 0 0 8.23000000e-01 1 - 4.08111344e+00 0 0 0 0 7.74600000e-01 1 - 4.23181088e+00 0 0 0 0 7.21200000e-01 1 - 4.37127687e+00 0 0 0 0 6.63100000e-01 1 - 4.49860691e+00 0 0 0 0 6.00700000e-01 1 - 4.61297521e+00 0 0 0 0 5.34500000e-01 1 - 4.71364006e+00 0 0 0 0 4.64700000e-01 1 - 4.79994861e+00 0 0 0 0 3.92000000e-01 1 - 4.87134110e+00 0 0 0 0 3.16700000e-01 1 - 4.92735454e+00 0 0 0 0 2.39300000e-01 1 - 4.96762566e+00 0 0 0 0 1.60400000e-01 1 - 4.99189327e+00 0 0 0 0 8.05000000e-02 1 - 5 0 0 0 0 1.00000000e-05 1 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat deleted file mode 100644 index 9e6c6b5c45..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat +++ /dev/null @@ -1,57 +0,0 @@ -------- InflowWind INPUT FILE ------------------------------------------------------------------------- -Input for elliptical wing uniform wind ---------------------------------------------------------------------------------------------------------------- -False Echo - Echo input data to .ech (flag) - 2 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined; 7=native Bladed FF) - 0 PropagationDir - Direction of wind propagation (meteorological rotation from aligned with X (positive rotates towards -Y) -- degrees) (not used for native Bladed format WindType=7) - 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) - 1 NWindVel - Number of points to output the wind velocity (0 to 9) - 0 WindVxiList - List of coordinates in the inertial X direction (m) - 0 WindVyiList - List of coordinates in the inertial Y direction (m) - 100 WindVziList - List of coordinates in the inertial Z direction (m) -================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= - 1 HWindSpeed - Horizontal wind speed (m/s) - 100 RefHt - Reference height for horizontal wind speed (m) - 0 PLExp - Power law exponent (-) -================== Parameters for Uniform wind file [used only for WindType = 2] ============================ -"Elliptic_Wind.wnd" FileName_Uni - Filename of time series data for uniform wind field. (-) - 100 RefHt_Uni - Reference height for horizontal wind speed (m) - 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) -================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== -"unused" FileName_BTS - Name of the Full field wind file to use (.bts) -================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= -"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values -False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 -================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== -"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) -"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) -"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) - 64 nx - number of grids in the x direction (in the 3 files above) (-) - 32 ny - number of grids in the y direction (in the 3 files above) (-) - 32 nz - number of grids in the z direction (in the 3 files above) (-) - 16 dx - distance (in meters) between points in the x direction (m) - 3 dy - distance (in meters) between points in the y direction (m) - 3 dz - distance (in meters) between points in the z direction (m) - 15000 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) - ------------- Scaling parameters for turbulence --------------------------------------------------------- - 2 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] - 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] - 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] - 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] - 1.2 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] - 0.8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] - 0.2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] - ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- - 12 URef - Mean u-component wind speed at the reference height (m/s) - 2 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) - 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) - 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) - 0 XOffset - Initial offset in +x direction (shift of wind box) -====================== OUTPUT ================================================== -False SumPrint - Print summary data to .IfW.sum (flag) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"Wind1VelX" X-direction wind velocity at point WindList(1) -"Wind1VelY" Y-direction wind velocity at point WindList(1) -"Wind1VelZ" Z-direction wind velocity at point WindList(1) -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) ---------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat deleted file mode 100644 index 8c357663de..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat +++ /dev/null @@ -1,45 +0,0 @@ ---------------------------- FREE WAKE INPUT FILE ---------------------------------------------- -Free wake input file for the elliptic wing case ---------------------------- GENERAL OPTIONS --------------------------------------------------- -5 IntMethod Integration method {4: 2nd order Predictor/Corrector, 5: Forward Euler 1st order, default: 5} (switch) -default DTfvw Time interval for wake propagation. {default: dtaero} (s) -99999 FreeWakeStart Time when wake is free. (-) value = always free. {default: 0.0} (s) -0.0 FullCircStart Time at which full circulation is reached. {default: 0.0} (s) ---------------------------- CIRCULATION SPECIFICATIONS ---------------------------------------- -1 CircSolvingMethod Circulation solving method {1: Cl-Based, 2: No-Flow Through, 3: Prescribed, default: 1 }(switch) -0.00005 CircSolvConvCrit Convergence criteria {default: 0.001} [only if CircSolvingMethod=1] (-) -0.1 CircSolvRelaxation Relaxation factor {default: 0.1} [only if CircSolvingMethod=1] (-) -200 CircSolvMaxIter Maximum number of iterations for circulation solving {default: 30} (-) -"NA" PrescribedCircFile File containing prescribed circulation [only if CircSolvingMethod=3] (quoted string) -=============================================================================================== ---------------------------- WAKE OPTIONS ------------------------------------------------------ -------------------- WAKE EXTENT AND DISCRETIZATION -------------------------------------------- -100 nNWPanel Number of near-wake panels (-) -10 WakeLength Total wake distance, in number of wake panels (-) -default FreeWakeLength Wake length that is free, in number of wake panels (-) {default: WakeLength} -default FWShedVorticity Include shed vorticity in the far wake {default: false} -------------------- WAKE REGULARIZATIONS AND DIFFUSION ----------------------------------------- -0 DiffusionMethod Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0} -0 RegDeterMethod Method to determine the regularization parameters {0: Manual, 1: Optimized, default: 0 } -2 RegFunction Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch) -1 WakeRegMethod Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch) -0.0 WakeRegFactor Wake regularization factor (m) -0.0 WingRegFactor Wing regularization factor (m) -100 CoreSpreadEddyVisc Eddy viscosity in core spreading methods, typical values 1-1000 -------------------- WAKE TREATMENT OPTIONS --------------------------------------------------- -False TwrShadowOnWake Include tower flow disturbance effects on wake convection {default:false} [only if TwrPotent or TwrShadow] -0 ShearModel Shear Model {0: No treatment, 1: Mirrored vorticity, default: 0} -------------------- SPEEDUP OPTIONS ----------------------------------------------------------- -1 VelocityMethod Method to determine the velocity {1:Biot-Savart Segment, 2:Particle tree, default: 1} -1.5 TreeBranchFactor Branch radius fraction above which a multipole calculation is used {default: 2.0} [only if VelocityMethod=2] -1 PartPerSegment Number of particles per segment [only if VelocityMethod=2] -=============================================================================================== ---------------------------- OUTPUT OPTIONS --------------------------------------------------- -1 WrVTk Outputs Visualization Toolkit (VTK) (independent of .fst option) {False: NoVTK, True: Write VTK at each time step} (flag) -1 nVTKBlades Number of blades for which VTK files are exported {0: No VTK per blade, n: VTK for blade 1 to n} (-) -1 VTKCoord Coordinate system used for VTK export. {1: Global, 2: Hub, 3: Both, "default": 1} -default VTK_fps Frame rate for VTK output (frames per second) {"all" for all glue code timesteps, "default" for all FVW timesteps} [only if WrVTK=1] -0 nGridOut Number of grid outputs -GridName DTOut XStart XEnd nX YStart YEnd nY ZStart ZEnd nZ -(-) (s) (m) (m) (-) (m) (m) (-) (m) (m) (-) -=============================================================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd deleted file mode 100644 index fa64f04d43..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd +++ /dev/null @@ -1,5 +0,0 @@ -!Wind file with step changes in wind speed. -!Time Wind Wind Vert. Horiz. Vert. LinV Gust -! Speed Dir Speed Shear Shear Shear Speed -0.00 1.00 0.00 0.10 0.00 0.00 0.00 0.00 -1000.0 1.00 0.00 0.10 0.00 0.00 0.00 0.00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr deleted file mode 100644 index df2a42bc7f..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr +++ /dev/null @@ -1,55 +0,0 @@ ------ AeroDyn MultiRotor Driver Input File -------------------------------------- -Elliptical wing test case for OLAF free vortex wake ------ Input Configuration ---------------------------------------------------- -False Echo - Echo input parameters to ".ech"? - 1000 TMax - Total run time (s) - 100 DT - Simulation time step (s) -"Elliptic_AD15_40.dat" AeroFile - Name of the AeroDyn input file ------ Inflow Data ----------------------------------------------------------- - 1 CompInflow - Compute inflow wind velocities (switch) {0=Steady Wind; 1=InflowWind} -"Elliptic_IW.dat" InflowFile - Name of the InflowWind input file - 0 HWindSpeed - Horizontal wind speed [used only when CompInflow=0 and NumCase=0] (m/s) - 0 RefHt - Reference height for horizontal wind speed [used only when CompInflow=0 and NumCase=0] (m) - 0 PLExp - Power law exponent [used only when CompInflow=0 and NumCase=0] (-) ------ Turbine Data ----------------------------------------------------------- -1 NumTurbines - Number of turbines -====== Turbine 1 ================================================================ - False BasicHAWTFormat(1) - Flag to switch between basic or generic input format {True: next 7 lines are basic inputs, False: Base/Twr/Nac/Hub/Bld geometry and motion must follow} -0,0,00 BaseOriginInit(1) - x,y,z coordinates of base origin (m) -0,0,0 BaseOrientationInit(1) - successive rotations (theta_x, theta_y, theta_z) defining initial orientation of the base frame from the global frame (e.g. roll, tilt, yaw) (deg) -True HasTower(1) - True if turbine has a tower (flag) -False HAWTprojection(1) - True if turbine is horizontal axis (for AeroDyn projections) (flag) -0,0,0 TwrOrigin_t(1) - Coordinate of tower base in base coordinates [used only when HasTower is True] (m) -0,0,100 NacOrigin_t(1) - x,y,z coordinates of nacelle origin (and tower top) from base, in base coordinates (m) -0,0,0 HubOrigin_n(1) - NOTE: Bar has 7m overhang, tilt of 6deg, and twr2shaft 3.09343 x,y,z coordinates of hub origin from nacelle origin, in nacelle coordinates (m) -0,0,0 HubOrientation_n(1) - successive rotations (theta_x, theta_y, theta_z) defining initial orientation of the hub frame from the nacelle frame (e.g. roll, tilt, yaw). The x axis needs to be aligned with the rotational speed. (deg) ------ Turbine 1 Blades ----------------------------------------------------------------- -1 NumBlades(1) - Number of blades for current rotor (-) -0,0,0 BldOrigin_h(1_1) - Orign of blade 1 wrt. hub origin in hub coordinates (m) --90,0,-90 BldOrientation_h(1_1) - successive rotations (theta_x, theta_y, theta_z) defining initial orientation of the blade frame from the hub frame such that the "z" is along span, "y" along trailing edge without pitch (azimuth, precone, pitch) (deg) -0.0 BldHubRad_bl(1_1) - z-offset in blade coordinates of blade 1 where radial input data start (m) ------ Turbine 1 Base Motion ----------------------------------------------------------------- -0 BaseMotionType(1) - Type of motion prescribed for this base {0: fixed, 1: Sinusoidal motion, 2: arbitrary motion} (flag) -1 DegreeOfFreedom(1) - {1:xt, 2:yt, 3:zt, 4:theta_xt, 5:theta_yt, 6:theta_zt} [used only when BaseMotionType=1] (flag) -0 Amplitude(1) - Amplitude of sinusoidal motion [used only when BaseMotionType=1] -0 Frequency(1) - Frequency of sinusoidal motion [used only when BaseMotionType=1] -"" BaseMotionFileName(1) - Filename containing rotor motion [used only when BaseMotionType=2] ------ Turbine 1 Nacelle Motion ----------------------------------------------------------------- -0 NacMotionType(1) - Type of motion prescribed for the nacelle {0: fixed yaw, 1: time varying yaw angle} (flag) -0 NacYaw(1) - Yaw angle (about z_t) of the nacelle [user only when NacMotionType=0] (deg) -"NA" NacMotionFileName(1) - Filename containing yaw motion [used only when NacMotionType=1] ------ Turbine 1 Rotor Motion ----------------------------------------------------------------- -0 RotMotionType(1) - Type of motion prescribed for this rotor {0: constant rotation, 1: time varying rotation} (flag) -0. RotSpeed(1) - Rotational speed of rotor in rotor coordinates [used only when RotorMotionType=0] (rpm) -"NA" RotMotionFileName(1) - Filename containing rotor motion [used only when RotorMotionType=1] ------ Turbine 1 Blade Pitch Motion ----------------------------------------------------------------- -0 BldMotionType(1) - Type of pitch motion prescribed for the blades {0: fixed, 1: time varying pitch} (flag) -0 BldPitch(1_1) - Blade 1 pitch [used only when BlMotiontype=1] (deg) -"NA" BldMotionFileName(1_1) - Filename containing blade pitch motion [used only when BlMotionType=1] ------ I/O Settings ----------------------------------------------------------- -"ES15.8E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) -2 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both} -0 WrVTK - VTK visualization data output: (switch) {0=none; 1=animation} -0.25 VTKHubRad - HubRadius for VTK visualization (m) --0.1,-0.1,-0.1,0.2,0.2,0.2 VTKNacDim - Nacelle Dimension for VTK visualization x0,y0,z0,Lx,Ly,Lz (m) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat deleted file mode 100644 index a704f032bf..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat +++ /dev/null @@ -1,152 +0,0 @@ -! ------------ AirfoilInfo v1.00.x Input File ----------------------------------. -! Airfoil properties to be used with AeroDyn v15 -! Generated from ... -! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! -! ------------------------------------------------------------------------------ -"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=3] -1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) -0 NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. -"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. -1 NumTabs ! Number of airfoil tables in this file. Each table must have lines for Re and Ctrl. -! ------------------------------------------------------------------------------ -! data for table 1 -! ------------------------------------------------------------------------------ -1.0 Re ! Reynolds number in millions -0 Ctrl ! Control setting (must be 0 for current AirfoilInfo) -True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line -!........................................ -0.0 alpha0 ! 0-lift angle of attack, depends on airfoil. -27.8411 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) --27.8411 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] -0 S2 ! Constant in the f curve best-fit for AOA>alpha1;by definition it depends on the airfoil. [ignored if UAMod<>1] -0 S3 ! Constant in the f curve best-fit for alpha2<=AOA1] -0 S4 ! Constant in the f curve best-fit for AOA1] -2.598 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. --2.598 Cn2 ! As Cn1 for negative AOAs. -default St_sh ! Strouhal's shedding frequency constant. [default = 0.19] -0.0 Cd0 ! 2D drag coefficient value at 0-lift. -0.0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] -0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] -0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] -0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] -0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] -0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] -default x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] -default UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] -default filtCutOff ! Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5] -!........................................ -! Table of aerodynamics coefficients -98 NumAlf ! Number of data lines in the following table -! Alpha Cl Cd Cm -! (deg) (-) (-) (-) --1.80000000e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00 --1.79000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.78000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.77000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.76000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.75000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.74000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.73000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.72000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.71000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.70000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.69000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.68000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.67000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.66000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.65000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.60000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.50000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.40000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.30000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.20000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.10000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --1.00000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --9.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --8.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --7.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --6.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --5.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --4.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --3.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 --2.50000000e+01 -2.74156000e+00 0.00000000e+00 0.00000000e+00 --2.00000000e+01 -2.19325000e+00 0.00000000e+00 0.00000000e+00 --1.70000000e+01 -1.86426000e+00 0.00000000e+00 0.00000000e+00 --1.60000000e+01 -1.75460000e+00 0.00000000e+00 0.00000000e+00 --1.50000000e+01 -1.64493000e+00 0.00000000e+00 0.00000000e+00 --1.40000000e+01 -1.53527000e+00 0.00000000e+00 0.00000000e+00 --1.30000000e+01 -1.42561000e+00 0.00000000e+00 0.00000000e+00 --1.20000000e+01 -1.31595000e+00 0.00000000e+00 0.00000000e+00 --1.10000000e+01 -1.20628000e+00 0.00000000e+00 0.00000000e+00 --1.00000000e+01 -1.09662000e+00 0.00000000e+00 0.00000000e+00 --9.00000000e+00 -9.86960000e-01 0.00000000e+00 0.00000000e+00 --8.00000000e+00 -8.77300000e-01 0.00000000e+00 0.00000000e+00 --7.00000000e+00 -7.67640000e-01 0.00000000e+00 0.00000000e+00 --6.00000000e+00 -6.57970000e-01 0.00000000e+00 0.00000000e+00 --4.00000000e+00 -4.38650000e-01 0.00000000e+00 0.00000000e+00 --2.00000000e+00 -2.19320000e-01 0.00000000e+00 0.00000000e+00 - 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 - 1.00000000e+00 1.09660000e-01 0.00000000e+00 0.00000000e+00 - 2.00000000e+00 2.19320000e-01 0.00000000e+00 0.00000000e+00 - 3.00000000e+00 3.28990000e-01 0.00000000e+00 0.00000000e+00 - 4.00000000e+00 4.38650000e-01 0.00000000e+00 0.00000000e+00 - 5.00000000e+00 5.48310000e-01 0.00000000e+00 0.00000000e+00 - 6.00000000e+00 6.57970000e-01 0.00000000e+00 0.00000000e+00 - 7.00000000e+00 7.67640000e-01 0.00000000e+00 0.00000000e+00 - 8.00000000e+00 8.77300000e-01 0.00000000e+00 0.00000000e+00 - 9.00000000e+00 9.86960000e-01 0.00000000e+00 0.00000000e+00 - 1.00000000e+01 1.09662000e+00 0.00000000e+00 0.00000000e+00 - 1.10000000e+01 1.20628000e+00 0.00000000e+00 0.00000000e+00 - 1.20000000e+01 1.31595000e+00 0.00000000e+00 0.00000000e+00 - 1.30000000e+01 1.42561000e+00 0.00000000e+00 0.00000000e+00 - 1.40000000e+01 1.53527000e+00 0.00000000e+00 0.00000000e+00 - 1.50000000e+01 1.64493000e+00 0.00000000e+00 0.00000000e+00 - 1.60000000e+01 1.75460000e+00 0.00000000e+00 0.00000000e+00 - 1.70000000e+01 1.86426000e+00 0.00000000e+00 0.00000000e+00 - 1.80000000e+01 1.97392000e+00 0.00000000e+00 0.00000000e+00 - 2.00000000e+01 2.19325000e+00 0.00000000e+00 0.00000000e+00 - 2.20000000e+01 2.41257000e+00 0.00000000e+00 0.00000000e+00 - 2.50000000e+01 2.74156000e+00 0.00000000e+00 0.00000000e+00 - 3.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 4.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 5.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 6.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 7.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 8.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 9.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.00000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.10000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.20000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.30000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.40000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.50000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.60000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.65000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.66000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.67000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.68000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.69000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.70000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.71000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.72000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.73000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.74000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.75000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.76000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.77000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.78000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.79000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 - 1.80000000e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py deleted file mode 100644 index 13db865e8e..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py +++ /dev/null @@ -1,29 +0,0 @@ -import glob -import os - -MyDir=os.path.join(os.path.dirname(__file__),'example_files') - -__all__ = ['MyDir', 'reading_test'] - -def reading_test(Pattern, Reader, DEBUG=False): - nError=0 - if DEBUG: - print('') - failedTest=[] - for f in glob.glob(os.path.join(MyDir,Pattern)): - if os.path.splitext(f)[-1] in ['.py','.pyc'] or f.find('_TMP')>0: - continue - try: - obj = Reader(f) - s=type(obj).__name__.replace('File','')[:20] - if DEBUG: - print('[ OK ] {:30s}\t{:20s} {:20s}'.format(os.path.basename(f)[:30],s)) - except: - nError += 1 - failedTest=[os.path.basename(f)] - if DEBUG: - print('[FAIL] {:30s}\tException occurred'.format(os.path.basename(f)[:30])) - raise - if nError>0: - print('Reading failed for files: ',failedTest) - raise Exception('Some tests failed') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py deleted file mode 100644 index 3f56ef4425..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py +++ /dev/null @@ -1,127 +0,0 @@ -import os -import numpy as np -import re -import pandas as pd -import unittest -from .helpers_for_test import MyDir, reading_test - -from pyFAST.input_output.bladed_out_file import BladedFile - - - -class Test(unittest.TestCase): - - def test_001_read_all(self): - reading_test('Bladed_out_*.*', BladedFile) - - - def test_Bladed(self): - ## check for binary - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary.$41')) - #F = BladedFile(os.path.join(MyDir,'Bladed_out_binary.$41')) - DF = F.toDataFrame() - self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[0],146245.984375) - self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[-1],156967.484375) - - ## check for ASCII - F = BladedFile(os.path.join(MyDir,'Bladed_out_ascii.$41')) - DF = F.toDataFrame() - self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[0],146363.8) - self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[-1],156967.22) - - def test_Bladed_case2_project(self): - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$PJ')) - DF = F.toDataFrame() - #print(DFS.keys()) - #DF=DFS['Misc'] - - #print(DF.shape) - #print(DF.columns) - #print(DF.columns[0]) - #print(DF.columns[50]) - self.assertEqual(DF.shape, (10, 89)) - self.assertEqual(DF.columns[0] , 'Time [s]') - self.assertEqual(DF.columns[1] , 'Time from start of simulation [s]') - self.assertEqual(DF.columns[27] , '26.41m-DPMOM1 [Nm/m]') - self.assertEqual(DF.columns[69], '38.75m-Blade 1 y-position [m]') - self.assertEqual(DF.columns[88], 'Foundation Fz [N]') - self.assertAlmostEqual(DF['Time from start of simulation [s]'][0] , 7.0 ) - self.assertAlmostEqual(DF['26.41m-DPMOM1 [Nm/m]'][0] , -226.85083, 5 ) - self.assertAlmostEqual(DF['38.75m-Blade 1 y-position [m]'].values[0], -27.949090957, 5 ) - self.assertAlmostEqual(DF['38.75m-Blade 1 y-position [m]'].values[-1], -39.96076965, 5 ) - self.assertAlmostEqual(DF['Foundation Fz [N]'][0] , -1092165.5 ) - self.assertAlmostEqual(DF['Foundation Fz [N]'].values[-1] , -1093664.75 ) - - self.assertFalse(DF.isnull().values.any()) - - def test_Bladed_case2_indiv(self): - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$12')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (10, 14)) - self.assertEqual(DF.columns[0] , 'Time [s]') - self.assertEqual(DF.columns[1] , 'POW2 [W]') - self.assertAlmostEqual(DF['POW2 [W]'].values[-1] , 1940463.0) - - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$25')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (10, 17)) - self.assertEqual(DF.columns[0] , 'Time [s]') - self.assertEqual(DF.columns[1] , '-15.0m-MXT [Nm]') - self.assertAlmostEqual(DF['-15.0m-MXT [Nm]'].values[-1], 1587526.625) - - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$69')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (10, 7)) - self.assertEqual(DF.columns[0] , 'Time [s]') - self.assertEqual(DF.columns[1] , 'Foundation Mx [Nm]') - self.assertAlmostEqual(DF['Foundation Mx [Nm]'].values[-1], 1587236.375) - - - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$37')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (522, 6)) - self.assertEqual(DF.columns[0] , 'Time [s]') - self.assertEqual(DF.columns[1] , 'Simulation Time [s]') - self.assertAlmostEqual(DF['State with largest error [N]'].values[-1], 9.0) - - # NOTE: this binary file is detected as ascii, and the reading fails.. - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2_fail.$55')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (50, 1)) - self.assertEqual(DF.columns[0] , 'Step size histogram [N]') - #self.assertTrue(np.isnan(DF['Step size histogram [N]'].values[-1])) - self.assertEqual(DF['Step size histogram [N]'].values[-1],0.0) - - # NOTE: this one is properly dected as binary - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$55')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (50, 1)) - self.assertEqual(DF.columns[0] , 'Step size histogram [N]') - self.assertEqual(DF['Step size histogram [N]'].values[-1], 0) - - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$46')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (10, 13)) - self.assertEqual(DF.columns[1] , 'Node 1-Water particle velocity in X direction [m/s]') - self.assertEqual(DF['Node 1-Water particle velocity in X direction [m/s]'].values[-1],-0.25) - - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$06')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (10, 5)) - self.assertEqual(DF.columns[1] , 'Generator torque [Nm]') - self.assertEqual(DF['Generator torque [Nm]'].values[-1],12852.1953125) - - F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$23')) - DF=F.toDataFrame() - self.assertEqual(DF.shape, (10, 9)) - self.assertEqual(DF.columns[1] , 'Stationary hub Mx [Nm]') - self.assertEqual(DF['Stationary hub Mx [Nm]'].values[-1],1112279.375) - - -if __name__ == '__main__': - unittest.main() - #Test().test_001_read_all() - #Test().test_Bladed() - #Test().test_Bladed_case2_project() - #Test().test_Bladed_case2_indiv() - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py deleted file mode 100644 index 7170a17f9d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py +++ /dev/null @@ -1,53 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output import CSVFile - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('CSV*.*', CSVFile) - - def DF(self,FN): - """ Reads a file and return a dataframe """ - return CSVFile(os.path.join(MyDir,FN)).toDataFrame() - - def test_CSV(self): - self.assertEqual(self.DF('CSVAutoCommentChar.txt').shape,(11,6)) - - DF=self.DF('CSVColInHeader.csv') - self.assertTrue(all(DF.columns.values==['ColA','ColB','ColC'])) - self.assertEqual(DF.shape,(2,3)) - - DF=self.DF('CSVColInHeader2.csv') - self.assertTrue(all(DF.columns.values==['ColA','ColB','ColC'])) - self.assertEqual(DF.shape,(2,3)) - - DF=self.DF('CSVColInHeader3.csv') - self.assertTrue(all(DF.columns.values==['ColA','ColB','ColC'])) - self.assertEqual(DF.shape,(2,3)) - - #DF=self.DF('CSVComma_UTF16.csv') # TODO encoding - #self.assertEqual(DF.shape,(4,3)) - - self.assertEqual(self.DF('CSVComma.csv').shape,(4,2)) - self.assertEqual(self.DF('CSVDateNaN.csv').shape,(11,2)) - self.assertEqual(self.DF('CSVNoHeader.csv').shape,(4,2)) - self.assertEqual(self.DF('CSVSemi.csv').shape,(3,2)) - self.assertEqual(self.DF('CSVSpace_ExtraCol.csv').shape,(5,4)) - self.assertEqual(self.DF('CSVTab.csv').shape,(5,2)) - - DF = self.DF('CSVTwoLinesHeaders.txt') - self.assertEqual(DF.columns.values[-1],'GenTq_(kN m)') - self.assertEqual(DF.shape,(9,6)) - - def test_CSV_string(self): - DF=self.DF('CSVxIsString.csv') - self.assertEqual(DF.shape,(7,2)) - self.assertEqual(DF.columns.values[0],'Label_[-]') - - -if __name__ == '__main__': - #Test().test_CSV() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py deleted file mode 100644 index 731104f0e1..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py +++ /dev/null @@ -1,197 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.input_output.fast_input_file import ExtPtfmFile -from pyFAST.input_output.fast_input_file import ADPolarFile -from pyFAST.input_output.fast_input_file import EDBladeFile -from pyFAST.input_output.fast_wind_file import FASTWndFile - - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('FASTIn*.*', FASTInputFile) - - def test_FASTIn(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_BD.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['PitchK'],2.0e+07) - self.assertAlmostEqual(F['MemberGeom'][-1,2],61.5) - self.assertAlmostEqual(F['MemberGeom'][-2,3],0.023000) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_BD_bld.dat')) - F.test_ascii(bCompareWritesOnly=False,bDelete=True) - self.assertEqual(F['DampingCoeffs'][0][0],0.01) - # TODO BeamDyn Blade properties are not really "user friendly" - self.assertAlmostEqual(F['BeamProperties']['span'][1],1.0) - self.assertAlmostEqual(F['BeamProperties']['K'][1][0,0],1.8e+08) # K11 @ section 2 - self.assertAlmostEqual(F['BeamProperties']['M'][1][0,0],1.2) # M11 @ section 2 - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['RotSpeed'],0.2) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED_bld.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['BldEdgSh(6)'],-0.6952) - F.comment = 'ElastoDyn file' - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED_twr.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['AdjFASt'],1) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertTrue(F['TipLoss']) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_ExtPtfm_SubSef.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['StiffnessMatrix'][2,2],1.96653266e+09) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_HD.dat')) - #F.test_ascii(bCompareWritesOnly=True,bDelete=True) # TODO - self.assertAlmostEqual(F['RdtnDT'],0.0125) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_IF_NoHead.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertAlmostEqual(F['Z0'],0.03) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_SbD.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['Joints'][0,3],-100) - self.assertEqual(int(F['Members'][0,1]),1) - self.assertEqual(int(F['Members'][0,2]),2) - - F=FASTInputFile(os.path.join(MyDir,'FASTIn_SD.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F['PitManRat(1)'],2) - - def test_FASTADBld(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_bld.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertTrue('NumBlNds' in F.keys()) - df = F.toDataFrame() - self.assertEqual(df['BlChord_[m]'].values[-1], 1.419) - self.assertTrue('c2_Swp_Approx_[m]' in df.keys()) -# import matplotlib.pyplot as plt -# fig,axes = plt.subplots(1, 3, sharey=False, figsize=(10.4,4.8)) # (6.4,4.8) -# fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) -# ax= axes[0] -# ax.plot( df['BlSpn_[m]'], df['BlCrvAC_[m]'], 'k-' , label='Prebend AC') -# #ax.plot( df['BlSpn_[m]'], df['x'], '--' , label='x') -# ax.plot( df['BlSpn_[m]'], df['c2_Crv_Approx_[m]'], ':' , label='c2') -# ax.legend() -# ax= axes[1] -# ax.plot( df['BlSpn_[m]'], df['BlSwpAC_[m]'], 'k-' , label='Sweep AC') -# #ax.plot( df['BlSpn_[m]'], df['y'], '--' , label='y') -# ax.plot( df['BlSpn_[m]'], df['c2_Swp_Approx_[m]'], ':' , label='c2') -# ax.legend() -# ax= axes[2] -# ax.plot( df['BlSpn_[m]'], df['AC_Approx_[-]'], '-' , label='AC') -# ax.set_xlabel('') -# ax.set_ylabel('') -# ax.legend() -# plt.show() - - def test_FASTADPol(self): - #F=FASTInputFile(os.path.join(MyDir,'FASTIn_arf_coords.txt')) - #print(F.keys()) - F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_arfl.dat')) - df = F.toDataFrame() - self.assertTrue('Cn_pot_[-]' in df.keys()) - # --- Test Dedicated code - F = ADPolarFile() - F.read(os.path.join(MyDir,'FASTIn_AD15_arfl.dat')) - - def test_FASTADPolMulti(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_arf_multitabs.dat')) - F.test_ascii(bCompareWritesOnly=False,bDelete=True) - - dfs = F.toDataFrame() - self.assertTrue('AFCoeff_2' in dfs.keys()) - - df1 = dfs['AFCoeff_1'] - df2 = dfs['AFCoeff_2'] - self.assertTrue('Cn_pot_[-]' in df2.keys()) - - self.assertEqual(df1.shape[0],23) - self.assertEqual(df2.shape[0],24) - - F = ADPolarFile(numTabs=2) - F.write('_DUMMY') - - def test_FASTEDBld(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED_bld.dat')) - F.test_ascii(bCompareWritesOnly=True, bDelete=True) - self.assertEqual(F['BldEdgSh(6)'],-0.6952) - df = F.toDataFrame() - self.assertAlmostEqual(df['ShapeFlap1_[-]'].values[40],0.8530735996) - # --- Test Dedicated code - F = EDBladeFile() - F.read(os.path.join(MyDir,'FASTIn_ED_bld.dat')) - - def test_FASTExt(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_ExtPtfm_SubSef.dat')) - F.test_ascii(bCompareWritesOnly=False, bDelete=True) - self.assertEqual(F['StiffnessMatrix'][2,2],1.96653266e+09) - # --- Test Dedicated code - F = ExtPtfmFile() - F.read(os.path.join(MyDir,'FASTIn_ExtPtfm_SubSef.dat')) - F.test_ascii(bCompareWritesOnly=False, bDelete=True) - df=F.toDataFrame() - self.assertAlmostEqual(df['InpF_Fx_[N]'].values[-1], 1660.749680) - - def test_FASTWnd(self): - F=FASTWndFile(os.path.join(MyDir,'FASTWnd.wnd')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - - def test_FASTInGraph(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_HD.dat')) - #graph = F.toGraph() - #print(graph) - #self.assertEqual(len(graph.Nodes), 4) - #self.assertEqual(len(graph.Elements), 3) -# - #F=FASTInputFile(os.path.join(MyDir,'FASTIn_SbD.dat')) - #print(F) - #graph = F.toGraph() -# self.assertEqual(len(graph.Nodes), 2) -# self.assertEqual(len(graph.Elements), 1) - def test_FASTInMoorDyn(self): - # MoorDyn version 1 - F=FASTInputFile(os.path.join(MyDir,'FASTIn_MD-v1.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(float(F['LineTypes'][0,1]),0.02) - - # MoorDyn version 2 - F=FASTInputFile(os.path.join(MyDir,'FASTIn_MD-v2.dat')) - #F.write(os.path.join(MyDir,'FASTIn_MD-v2.dat---OUT')) - self.assertTrue('Points' in F.keys()) - self.assertTrue('LineTypes' in F.keys()) - self.assertTrue('LineProp' in F.keys()) - self.assertEqual(F['LineProp'].shape , (3,7)) - self.assertEqual(F['LineTypes'].shape , (1,10)) - self.assertEqual(F['Points'].shape , (6,9)) - self.assertEqual(len(F['Outlist']) , 6) - self.assertEqual(F['Outlist'][0] , 'FairTen1') - self.assertEqual(F['LineProp'][0,0] , '1') - self.assertEqual(F['LineProp'][0,1] , 'main') - self.assertEqual(F['LineProp'][0,6] , '-') - - def test_FASTInAirfoil(self): - F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_arfl.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertTrue('InterpOrd' in F.keys()) - self.assertTrue('AFCoeff' in F.keys()) - self.assertEqual(F['AFCoeff'].shape, (30,4)) - -if __name__ == '__main__': - #Test().test_FASTEDBld() - #Test().test_FASTADBld() - #Test().test_FASTADPol() - #Test().test_FASTADPolMulti() - #Test().test_FASTExt() - #Test().test_FASTIn() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py deleted file mode 100644 index 60e2439fab..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py +++ /dev/null @@ -1,25 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.fast_input_deck import FASTInputDeck - -class Test(unittest.TestCase): - - def test_deck_driver(self): - F=FASTInputDeck(os.path.join(MyDir,'input_decks/Main_EllipticalWingInf_OLAF.dvr')) - #F.test_ascii(bCompareWritesOnly=True,bDelete=True) - self.assertEqual(F.fst['NumTurbines'],1) - - self.assertEqual(F.version,'AD_driver') - self.assertEqual(F.ADversion,'AD15') - self.assertTrue(F.fst is not None) - self.assertTrue(F.IW is not None) - self.assertTrue(F.AD is not None) - self.assertTrue(F.AD.Bld1 is not None) - - - -if __name__ == '__main__': - #Test().test_FASTIn() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py deleted file mode 100644 index 4c607acb0a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py +++ /dev/null @@ -1,58 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output import FASTLinearizationFile - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('FASTLin*.*', FASTLinearizationFile) - - def test_FASTLin(self): - - # --- Test basic read - F=FASTLinearizationFile(os.path.join(MyDir,'FASTLin.lin')) - self.assertAlmostEqual(F['A'][3,1], 3.91159454E-04 ) - self.assertAlmostEqual(F['u'][7] ,4.00176055E+04) - - # Test properties - np.testing.assert_almost_equal(F.nx , 4) - np.testing.assert_almost_equal(F.nu , 9) - np.testing.assert_almost_equal(F.ny , 16) - np.testing.assert_almost_equal(F.nz , 0 ) - - # Test keys - np.testing.assert_almost_equal(F['Azimuth'] , 5.8684 , 4) - np.testing.assert_almost_equal(F['RotSpeed'] , 1.2367 , 4) - self.assertEqual(F['WindSpeed'], None ) # NOTE: might become NaN in the future - - # --- Test methods - dfs = F.toDataFrame() # Make sure this runs - - # Test EVA - fd, zeta, Q, f0 = F.eva() - np.testing.assert_almost_equal(f0 , [0.394858], 4) - np.testing.assert_almost_equal(zeta, [0.06078], 4) - - # Test state removal - F.removeStates(pattern='generator') - fd, zeta, Q, f0 = F.eva() - dfs = F.toDataFrame() # Make sure this runs - np.testing.assert_almost_equal(F.nx , 2) - np.testing.assert_almost_equal(f0 , [0.394258], 4) - np.testing.assert_almost_equal(zeta, [0.0603 ], 4) - - - # --- Test lin file with M (only for EB's special branch...) - F=FASTLinearizationFile(os.path.join(MyDir,'FASTLin_EDM.lin')) - dfs=F.toDataFrame() - M=dfs['M'] - self.assertAlmostEqual(M['7_TwFADOF1']['7_TwFADOF1'],0.436753E+06) - self.assertAlmostEqual(M['13_GeAz']['13_GeAz'] , 0.437026E+08) - - - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py deleted file mode 100644 index 81b94ed418..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py +++ /dev/null @@ -1,44 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output import FASTOutputFile - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('FASTOut*.*', FASTOutputFile) - - def DF(self,FN): - """ Reads a file and return a dataframe """ - return FASTOutputFile(os.path.join(MyDir,FN)).toDataFrame() - - def test_FASTOut(self): - self.assertEqual(self.DF('FASTOut.out').values[-1,1],1036) - - def test_FASTOutBin(self): - # --- Test reading - F = FASTOutputFile(os.path.join(MyDir,'FASTOutBin.outb')) - M = F.toDataFrame() - self.assertAlmostEqual(M['GenPwr_[kW]'].values[-1],40.57663190807828) - # --- Test writing - tempFilename = '_FASTOutBin_out.outb' - # Write to tempfile - F.write(tempFilename) - # Read written file - F2= FASTOutputFile(tempFilename) - # Test that read data match - np.testing.assert_almost_equal(F.data,F2.data, 4) - np.testing.assert_almost_equal(F.data[-1,-1] ,40.57663190807828, 10) - np.testing.assert_almost_equal(F2.data[-1,-1],40.57663190807828, 10) - self.assertEqual(F2.info['attribute_names'][-1],'GenPwr') - self.assertEqual(F2.info['attribute_units'][-1],'kW') - # cleanup - try: - os.remove(tempFilename) - except: - pass - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py deleted file mode 100644 index 803fa30c32..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py +++ /dev/null @@ -1,42 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output import FASTSummaryFile - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('FASTSum*.*', FASTSummaryFile) - - def test_FASTSum(self): - f = FASTSummaryFile(os.path.join(MyDir, 'FASTSum_Pendulum.SD.sum.yaml')) - np.testing.assert_almost_equal(f['CB_frequencies'].ravel(),[2.571561E-02,5.154897E+00,3.448768E+01,3.639185E+01,9.826435E+01], 5) - - # Test toDataFrame - df=f.toDataFrame(sortDim=2) - np.testing.assert_almost_equal(df['z_[m]'].values,[-6,-1,0]) - np.testing.assert_almost_equal(df['GuyanMode1x_[m]'].values[0],0.6) - - # Test toJSON - dJSON=f.toJSON('_test.json') - np.testing.assert_almost_equal(dJSON['Connectivity'], [[0,1],[1,2]]) - try: - os.remove('_test.json') - except: - pass - - - def test_FASTSumGraph(self): - f = FASTSummaryFile(os.path.join(MyDir, 'FASTSum_Pendulum.SD.sum.yaml')) - graph = f.toGraph() - # print(graph) - self.assertEqual(len(graph.Nodes), 3) - self.assertEqual(len(graph.Elements), 2) - self.assertEqual(len(graph.Modes), 11) - np.testing.assert_almost_equal(graph.Modes[10]['freq'], 98.26435) - - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py deleted file mode 100644 index 6a31e276f5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py +++ /dev/null @@ -1,59 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.flex_profile_file import FLEXProfileFile -from pyFAST.input_output.flex_blade_file import FLEXBladeFile -from pyFAST.input_output.flex_wavekin_file import FLEXWaveKinFile -from pyFAST.input_output.flex_doc_file import FLEXDocFile - - -import pandas as pd - -class Test(unittest.TestCase): - - #def test_001_read_all(self, DEBUG=True): - # reading_test('FLEX*.*', weio.read) - - def DF(self,FN): - """ Reads a file with weio and return a dataframe """ - pass - #return Flex(os.path.join(MyDir,FN)).toDataFrame() - - def test_FLEXProfiles(self): - df = FLEXProfileFile(os.path.join(MyDir,'FLEXProfile.pro')).toDataFrame() - self.assertAlmostEqual(df['pc_set_2_t_57.0'].values[2,2],0.22711022) - - def test_FLEXBlade(self): - Bld=FLEXBladeFile(os.path.join(MyDir,'FLEXBlade002.bld')).toDataFrame() - self.assertAlmostEqual(Bld['r_[m]'].values[-1],61.5) - self.assertAlmostEqual(Bld['Mass_[kg/m]'].values[-1],10.9) - self.assertAlmostEqual(Bld['Chord_[m]'].values[3],3.979815059) - - def test_FLEXWaves(self): - wk = FLEXWaveKinFile(os.path.join(MyDir, 'FLEXWaveKin.wko')) - self.assertEqual(wk['MaxLongiVel'],2.064) - self.assertEqual(wk['Tp'] ,12.54) - self.assertEqual(len(wk['RelDepth']),12) - self.assertEqual(wk['data']['Time_[s]'].values[-1],3.0) - self.assertEqual(wk['data']['a_z=20.0_x=0.0_[m/s^2]'].values[-1],0.06) - - def test_FLEXDoc(self): - doc = FLEXDocFile(os.path.join(MyDir, 'FLEXDocFile.out')) - self.assertAlmostEqual(doc['RNA']['Mass'], 2.85e-6) - self.assertAlmostEqual(doc['Tower']['Length'], 1.0) - self.assertAlmostEqual(doc['Tower']['SectionData'].shape[0], 11) - self.assertAlmostEqual(doc['Tower']['SectionData'].shape[1], 9) - self.assertAlmostEqual(doc['Tower']['ShapeFunction_DOF1_Shape'].shape[0], 12) - self.assertAlmostEqual(doc['Foundation']['Mass'], 900000) - self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF1_Shape'].shape[0], 101) - self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF1_Shape']['H_[m]'].values[-1], 100) - self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF1_Shape']['U_[m]'].values[-1], 1) - self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF2_Shape']['U_[m]'].values[-1], 0) - self.assertEqual(type(doc['Blade']['ShapeFunction_DOF1_Shape']) is pd.DataFrame, True) - - -if __name__ == '__main__': -# Test().test_FLEXWaves() -# Test().test_FLEXDoc() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py deleted file mode 100644 index 3c987724bb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py +++ /dev/null @@ -1,112 +0,0 @@ -import unittest -import os -import numpy as np -import pyFAST.input_output as weio -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.hawc2_dat_file import HAWC2DatFile -from pyFAST.input_output.hawc2_ae_file import HAWC2AEFile -from pyFAST.input_output.hawc2_pc_file import HAWC2PCFile -from pyFAST.input_output.hawc2_st_file import HAWC2StFile -from pyFAST.input_output.hawcstab2_ind_file import HAWCStab2IndFile -from pyFAST.input_output.hawcstab2_pwr_file import HAWCStab2PwrFile - - -class Test(unittest.TestCase): - - def test_001_read_all(self): - reading_test('HAWC*.*', weio.read) - - def DF(self,FN): - """ Reads a file with weio and return a dataframe """ - return weio.read(os.path.join(MyDir,FN)).toDataFrame() - - def test_HAWC2(self): - F=HAWC2DatFile(os.path.join(MyDir,'HAWC2_out_ascii.dat')) - DF=F.toDataFrame() - self.assertEqual(DF.values[-1,1],-1.72572E+03) - self.assertEqual(DF.values[-1,-1], 3.63349E+03) - self.assertEqual(DF.columns[0], 'Time_[s]') - self.assertEqual(DF.columns[1], 'WSPgl.coo.,Vy_[m/s]') - - # Test that "exported dat files" are the same - # NOTE: cannot do comparison of sel files since names are different - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - os.remove(os.path.join(MyDir,'HAWC2_out_ascii_TMP.sel')) - os.remove(os.path.join(MyDir,'HAWC2_out_ascii_TMP2.sel')) - - def test_HAWC2_st(self): - # --- not FPM - F=HAWC2StFile(os.path.join(MyDir,'HAWC2_st.st')) - dfs=F.toDataFrame() - set11=dfs['1_1'] - set22=dfs['2_2'] - self.assertEqual(set11['m_[kg/m]'].values[-1], 2536.27) - self.assertEqual(set11['A_[m^2]'].values[-1], 0.298) - self.assertEqual(set22['r_[m]'].values[-1], 1.96256) - self.assertEqual(set22['ri_x_[m]'].values[-1], 1.36) - # --- FPM - F=HAWC2StFile(os.path.join(MyDir,'HAWC2_st_fpm.st')) - dfs=F.toDataFrame() - set11=dfs['1_1'] - np.testing.assert_almost_equal(set11['m_[kg/m]'].values[-1], 5.6348074, 3) - np.testing.assert_almost_equal(set11['K66'].values[-1], 8.41526513e04, 3) - - def test_HAWC2_pc(self): - F=HAWC2PCFile(os.path.join(MyDir,'HAWC2_pc.dat')) - self.assertEqual(len(F.data.pc_sets),1) - thicknesses = F.data.pc_sets[1][0] - firstPolar = F.data.pc_sets[1][1][0] - np.testing.assert_almost_equal(thicknesses, [24.1, 30.1, 36, 48, 60, 100]) - self.assertEqual(firstPolar.shape, (105,4)) - np.testing.assert_almost_equal(firstPolar[0,0], -180) - np.testing.assert_almost_equal(firstPolar[-1,0], 180) - - def test_BHAWC(self): - F=HAWC2DatFile(os.path.join(MyDir,'BHAWC_out_ascii.sel')) - DF=F.toDataFrame() - self.assertEqual(DF.values[-1,1], 147.85) - self.assertEqual(DF.columns[0], 't_[s]') - self.assertEqual(DF.columns[1], 'ang_azi_[deg]') - - # Testing that "exported" sel files are the same - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP.dat')) - os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP2.dat')) - - # Testing that "exported" dat files are the same - F=HAWC2DatFile(os.path.join(MyDir,'BHAWC_out_ascii.dat')) - F.test_ascii(bCompareWritesOnly=True,bDelete=True) - os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP.sel')) - os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP2.sel')) - - def test_HAWCStab2(self): - # power file - F=HAWCStab2PwrFile(os.path.join(MyDir,'HAWCStab2.pwr')) - DF=F.toDataFrame() - self.assertAlmostEqual(DF.values[-1,1],0.1553480512E+05) - self.assertAlmostEqual(DF.values[-1,-1], 0.3181950053E+09) - self.assertEqual(DF.columns[0], 'V_[m/s]') - self.assertEqual(DF.columns[1], 'P_[kW]') - # induction files - F=HAWCStab2IndFile(os.path.join(MyDir,'HAWCStab2_u3000.ind')) # normal .ind - DF=F.toDataFrame() - self.assertAlmostEqual(DF.values[-1,1],0.517961E+00) - self.assertAlmostEqual(DF.values[-1,-1], 0.354614E-02) - self.assertEqual(DF.columns[0], 's_[m]') - self.assertEqual(DF.columns[1], 'A_[-]') - F=HAWCStab2IndFile(os.path.join(MyDir,'HAWCStab2_defl_u3000.ind')) # defl .ind - DF=F.toDataFrame() - self.assertAlmostEqual(DF.values[-1,1],19) - self.assertAlmostEqual(DF.values[-1,-1], 0.242932E-05) - self.assertEqual(DF.columns[0], 's_[m]') - self.assertEqual(DF.columns[1], 'Element_no_[-]') - F=HAWCStab2IndFile(os.path.join(MyDir,'HAWCStab2_fext_u3000.ind')) # fext .ind - DF=F.toDataFrame() - self.assertAlmostEqual(DF.values[-1,1],20) - self.assertAlmostEqual(DF.values[-1,-1], -0.170519E+03) - self.assertEqual(DF.columns[0], 's_[m]') - self.assertEqual(DF.columns[1], 'Node_[-]') - -if __name__ == '__main__': - #Test().test_HAWC2_st() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py deleted file mode 100644 index f8a6712568..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py +++ /dev/null @@ -1,24 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.mannbox_file import MannBoxFile - - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('MannBox_*.*', MannBoxFile) - - def test_MannBox(self): - # --- Test read/write - F = MannBoxFile(os.path.join(MyDir,'MannBox_2x4x8.bin')) - F.write( os.path.join(MyDir,'MannBox_2x4x8_TMP.bin')) - F2= MannBoxFile(os.path.join(MyDir,'MannBox_2x4x8_TMP.bin')) - os.remove( os.path.join(MyDir,'MannBox_2x4x8_TMP.bin')) - np.testing.assert_almost_equal(F['field'].shape ,[2,4,8]) - np.testing.assert_almost_equal(F['field'][:,:,:],F2['field'][:,:,:],8) - np.testing.assert_almost_equal(F['field'][1,3,5], -3.6654968, 6) - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py deleted file mode 100644 index 42d442855e..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py +++ /dev/null @@ -1,26 +0,0 @@ -import unittest -import os -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.parquet_file import ParquetFile - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('ParquetFile*.*', ParquetFile) - - def DF(self,FN): - """ Reads a file and return a dataframe """ - return ParquetFile(os.path.join(MyDir,FN)).toDataFrame() - - def test_ParquetFile(self): - df=self.DF('ParquetFile_test.parquet') - self.assertListEqual(list(df.columns),["Column1","Column 2","Column Str"]) - self.assertEqual(df.shape,(3,3)) - self.assertEqual(df.loc[0,"Column Str"],'abc') - self.assertEqual(df.loc[0, "Column1"], 1) - - - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py deleted file mode 100644 index c7051864e5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) - import matplotlib.pyplot as plt - print('\n--------------------------------------------------------------') - for f in files: - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - plt.close('all') - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py deleted file mode 100644 index 897f3c3901..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py +++ /dev/null @@ -1,35 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output import TurbSimFile - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('TurbSim_*.*', TurbSimFile) - - def test_TurbSim(self): - # --- Test without tower - F = TurbSimFile(os.path.join(MyDir,'TurbSim_NoTwr.bts')) - F.write( os.path.join(MyDir,'TurbSim_NoTwr_TMP.bts')) - F2= TurbSimFile(os.path.join(MyDir,'TurbSim_NoTwr_TMP.bts')) - os.remove( os.path.join(MyDir,'TurbSim_NoTwr_TMP.bts')) - np.testing.assert_almost_equal(F['u'][0,:,:,:],F2['u'][0,:,:,:],4) - np.testing.assert_almost_equal(F['u'][1,:,:,:],F2['u'][1,:,:,:],4) - np.testing.assert_almost_equal(F['u'][2,:,:,:],F2['u'][2,:,:,:],4) - # --- Test with tower - F = TurbSimFile(os.path.join(MyDir,'TurbSim_WithTwr.bts')) - np.testing.assert_almost_equal(F['u'][2,-1,1,3], 0.508036, 5) - np.testing.assert_almost_equal(F['u'][0, 4,2,0], 7.4867466, 5) - np.testing.assert_almost_equal(F['uTwr'][0, 4, :], [6.1509, 6.4063, 8.9555, 7.6943], 4) - F.write( os.path.join(MyDir,'TurbSim_WithTwr_TMP.bts')) - F2= TurbSimFile(os.path.join(MyDir,'TurbSim_WithTwr_TMP.bts')) - os.remove( os.path.join(MyDir,'TurbSim_WithTwr_TMP.bts')) - np.testing.assert_almost_equal(F['u'][0,:,:,:],F2['u'][0,:,:,:],3) - np.testing.assert_almost_equal(F['u'][1,:,:,:],F2['u'][1,:,:,:],3) - np.testing.assert_almost_equal(F['u'][2,:,:,:],F2['u'][2,:,:,:],3) - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py deleted file mode 100644 index 7b52f712ee..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py +++ /dev/null @@ -1,24 +0,0 @@ -import unittest -import os -import numpy as np -from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test -from pyFAST.input_output.vtk_file import VTKFile - - - -class Test(unittest.TestCase): - - def test_001_read_all(self, DEBUG=True): - reading_test('VTK*.*', VTKFile) - - def test_VTKStruct(self): - f = VTKFile(os.path.join(MyDir, 'VTKStructuredPointsPointData.vtk')) - np.testing.assert_almost_equal(f.points,f.point_data['DisXY']) - - np.testing.assert_almost_equal(f.xp_grid,[0,20,40]) - np.testing.assert_almost_equal(f.point_data_grid['DisXY'][:,0,0,0],[0,20,40]) - - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py deleted file mode 100644 index d2219754cb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py +++ /dev/null @@ -1,107 +0,0 @@ -import unittest -import numpy as np -import os as os -from pyFAST.input_output.mini_yaml import * - - -class Test(unittest.TestCase): - def test_scalar(self): - # Scalar integer - D = yaml_read(text='k: 10 # comment') - self.assertDictEqual(D, {'k':10}) - self.assertIsInstance(D['k'], int) - # Scalar float - D = yaml_read(text='k: 10.# comment') - self.assertDictEqual(D, {'k':10}) - self.assertIsInstance(D['k'], float) - # Scalar string - D = yaml_read(text='k:s# comment') - self.assertDictEqual(D, {'k':'s'}) - self.assertIsInstance(D['k'], str) - - def test_lists(self): - # list integer - D = yaml_read(text='k:[ 10 ,] # comment') - self.assertDictEqual(D, {'k':[10]}) - self.assertTrue(np.issubdtype(D['k'][0], np.integer)) - #self.assertIsInstance(D['k'][0], np.int32) - # list float - D = yaml_read(text='k: [ 10., ]# comment') - self.assertDictEqual(D, {'k':[10]}) - self.assertIsInstance(D['k'][0], float) - # list string - D = yaml_read(text='k: [ s ,] #comment') - self.assertDictEqual(D, {'k': ['s']}) - self.assertIsInstance(D['k'][0], str) - # empty - D = yaml_read(text='k:[ ] # comment') - self.assertIsInstance(D['k'], np.ndarray) - self.assertTrue(len(D['k'])==0) - - # list integers - D = yaml_read(text='k: [ 10, 20, 30,] # comment') - np.testing.assert_array_equal(D['k'], [10,20,30]) - self.assertTrue(np.issubdtype(D['k'].dtype, np.integer)) - # list float - D = yaml_read(text='k: [ 10., 20.5, 30,] # comment') - np.testing.assert_array_equal(D['k'], [10,20.5,30]) - self.assertTrue(np.issubdtype(D['k'].dtype, float)) - # list str - D = yaml_read(text='k: [ a , b , c,] # comment') - np.testing.assert_array_equal(D['k'], ['a','b','c']) - self.assertTrue(np.issubdtype(D['k'].dtype, str)) - - # list mixed, for now all as strings - D = yaml_read(text='k: [ 1 , b , 0,] # comment') - np.testing.assert_array_equal(D['k'], ['1','b','0']) - self.assertTrue(np.issubdtype(D['k'].dtype, str)) - - def test_arrays(self): - # Empty array - D = yaml_read(text="""k: # comment - - [ ] """) - self.assertIsInstance(D['k'], np.ndarray) - self.assertEqual(D['k'].shape, (1,0)) # that's a choice... - - # Float array - D = yaml_read(text="""k:# comment - - [ 1, 3.5 ]# comment """) - self.assertIsInstance(D['k'], np.ndarray) - self.assertEqual(D['k'].shape, (1,2)) - self.assertTrue(np.issubdtype(D['k'].dtype, float)) - np.testing.assert_array_equal(D['k'], [[1,3.5]]) - - # int array - D = yaml_read(text="""k:# comment - - [ 1 , ]# comment - - [2] - - """) - self.assertIsInstance(D['k'], np.ndarray) - self.assertEqual(D['k'].shape, (2,1)) - self.assertTrue(np.issubdtype(D['k'].dtype, np.integer)) - np.testing.assert_array_equal(D['k'], [[1],[2]]) - - # string array - D = yaml_read(text="""k:# comment - - [ a , b ,c ] - - [d, e ,f , ] - # comment - """) - self.assertIsInstance(D['k'], np.ndarray) - self.assertEqual(D['k'].shape, (2,3)) - self.assertTrue(np.issubdtype(D['k'].dtype, str)) - np.testing.assert_array_equal(D['k'], [['a','b','c'],['d','e','f']]) - - # Mixed array - D = yaml_read(text="""k:# comment - - [ a, 3.5 ]# comment """) - self.assertIsInstance(D['k'], np.ndarray) - self.assertEqual(D['k'].shape, (1,2)) - self.assertTrue(np.issubdtype(D['k'].dtype, str)) - np.testing.assert_array_equal(D['k'], [['a','3']]) - - -if __name__=='__main__': - #Test().test_arrays() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py deleted file mode 100644 index d462f4afa0..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py +++ /dev/null @@ -1,688 +0,0 @@ -""" -Basics Classes for a "geometrical" graph model: - - nodes have a position (x,y,z), and some data (taken from a list of properties) - - elements (links) connect nodes, they contain some data (taken from a list of properties) - -An ordering of Elements, Nodes, and Properties is present, but whenever possible, -the "ID" is used to identify them, instead of their index. - - -Nodes: - Node.ID: unique ID (int) of the node. IDs never change. - Node.x,y,z: coordinate of the nodes - Node.data : dictionary of data stored at the node - -Elements: - Elem.ID: unique ID (int) of the element. IDs never change. - Elem.nodeIDs: list of node IDs making up the element - Elem.nodes : list of nodes making the element (by reference) # NOTE: this has cross reference! - Elem.nodeProps : properties # Nodal properties. NOTE: cannot be transfered to node because of how SubDyn handles it.. - Elem.data : dictionary of data stored at the element - # Optional - Elem.propset: string referring to the property set in the dictionary of properties - Elem.propIDs: IDs used for the properties of this element at each node - -NodePropertySets: dictionary of NodeProperties - Node Property: - NProp.ID: unique ID of the node proprety - NProp.data: dictionary of data - - -ElemPropertySets: dictionary of ElemProperties - -""" - -import numpy as np -import pandas as pd - - -# --------------------------------------------------------------------------------} -# --- Node -# --------------------------------------------------------------------------------{ -class Node(object): - def __init__(self, ID, x, y, z=0, **kwargs): - self.ID = int(ID) - self.x = x - self.y = y - self.z = z - self.data = kwargs - - def setData(self, data_dict): - """ set or add data""" - for k,v in data_dict.items(): - #if k in self.data.keys(): - # print('Warning overriding key {} for node {}'.format(k,self.ID)) - self.data[k]=v - - def __repr__(self): - s=' x:{:7.2f} y:{:7.2f} z:{:7.2f} {:}'.format(self.ID, self.x, self.y, self.z, self.data) - return s - -# --------------------------------------------------------------------------------} -# --- Properties -# --------------------------------------------------------------------------------{ -class Property(dict): - def __init__(self, ID, data=None, **kwargs): - """ - data is a dictionary - """ - dict.__init__(self) - self.ID= int(ID) - self.update(kwargs) - if data is not None: - self.update(data) - - @property - def data(self): - return {k:v for k,v in self.items() if k!='ID'} - - def __repr__(self): - s=' {:}'.format(self.ID, self.data) - return s - -class NodeProperty(Property): - def __init__(self, ID, data=None, **kwargs): - Property.__init__(self, ID, data, **kwargs) - def __repr__(self): - s=' {:}'.format(self.ID, self.data) - return s - -class ElemProperty(Property): - def __init__(self, ID, data=None, **kwargs): - Property.__init__(self, ID, data, **kwargs) - def __repr__(self): - s=' {:}'.format(self.ID, self.data) - return s - - -# --------------------------------------------------------------------------------} -# --- Elements -# --------------------------------------------------------------------------------{ -class Element(dict): - def __init__(self, ID, nodeIDs, nodes=None, propset=None, propIDs=None, properties=None, **kwargs): - """ - - """ - self.ID = int(ID) - self.nodeIDs = nodeIDs - self.propset = propset - self.propIDs = propIDs - self.data = kwargs # Nodal data - self.nodes = nodes # Typically a trigger based on nodeIDs - self.nodeProps= properties # Typically a trigger based on propIDs. Otherwise list of dictionaries - if (self.propIDs is not None) and (self.propset is None): - raise Exception('`propset` should be provided if `propIDs` are provided') - if (self.propIDs is not None) and (self.propset is not None) and properties is not None: - raise Exception('When providing `propset` & `propIDs`, properties should not be provided') - if nodes is not None: - if len(nodes)!=len(nodeIDs): - raise Exception('List of nodes has different length than list of nodeIDs') - for i, (ID,n) in enumerate(zip(nodeIDs,nodes)): - if n.ID!=ID: - raise Exception('Node ID do not match {}/={} for node index {}'.format(n.ID,ID,i)) - - @property - def length(self): - n1=self.nodes[0] - n2=self.nodes[1] - return np.sqrt((n1.x-n2.x)**2+(n1.y-n2.y)**2+(n1.z-n2.z)**2) - - def setData(self, data_dict): - """ set or add data""" - for k,v in data_dict.items(): - #if k in self.data.keys(): - # print('Warning overriding key {} for node {}'.format(k,self.ID)) - self.data[k]=v - - def __repr__(self): - s=' NodeIDs: {} {}'.format(self.ID, self.nodeIDs, self.data) - if self.propIDs is not None: - s+=' {'+'propIDs:{} propset:{}'.format(self.propIDs, self.propset)+'}' - if self.nodes is not None: - s+=' l={:.2f}'.format(self.length) - return s - - -# --------------------------------------------------------------------------------} -# --- Mode -# --------------------------------------------------------------------------------{ -class Mode(dict): - def __init__(self, data, name, freq=1, **kwargs): - dict.__init__(self) - - self['name']=name - self['freq']=freq - self['data']=data # displacements nNodes x 3 assuming a given sorting of nodes - - def __repr__(self): - s=' name:{:4s} freq:{:} '.format(self['name'], self['freq']) - return s - - def reSort(self,I): - self['data']=self['data'][I,:] - -# --------------------------------------------------------------------------------} -# --- Graph -# --------------------------------------------------------------------------------{ -class GraphModel(object): - def __init__(self, Elements=None, Nodes=None, NodePropertySets=None, ElemPropertySets=None, MiscPropertySets=None ): - self.Elements = Elements if Elements is not None else [] - self.Nodes = Nodes if Nodes is not None else [] - self.NodePropertySets = NodePropertySets if NodePropertySets is not None else {} - self.ElemPropertySets = ElemPropertySets if ElemPropertySets is not None else {} - self.MiscPropertySets = MiscPropertySets if MiscPropertySets is not None else {} - # Dynamics - self.Modes = [] - self.Motions = [] - # Optimization variables - self._nodeIDs2Elements = {} # dictionary with key NodeID and value list of ElementID - self._nodeIDs2Elements = {} # dictionary with key NodeID and value list of elements - self._elementIDs2NodeIDs = {} # dictionary with key ElemID and value list of nodes IDs - self._connectivity =[]# - - def addNode(self,node): - self.Nodes.append(node) - - def addElement(self,elem): - # Giving nodes to element if these were not provided - elem.nodes=[self.getNode(i) for i in elem.nodeIDs] - # Giving props to element if these were not provided - if elem.propIDs is not None: - elem.nodeProps=[self.getNodeProperty(elem.propset, i) for i in elem.propIDs] - self.Elements.append(elem) - - # --- Getters - def getNode(self, nodeID): - for n in self.Nodes: - if n.ID==nodeID: - return n - raise KeyError('NodeID {} not found in Nodes'.format(nodeID)) - - def getElement(self, elemID): - for e in self.Elements: - if e.ID==elemID: - return e - raise KeyError('ElemID {} not found in Elements'.format(elemID)) - - def getNodeProperty(self, setname, propID): - for p in self.NodePropertySets[setname]: - if p.ID==propID: - return p - raise KeyError('PropID {} not found for Node propset {}'.format(propID,setname)) - - def getElementProperty(self, setname, propID): - for p in self.ElemPropertySets[setname]: - if p.ID==propID: - return p - raise KeyError('PropID {} not found for Element propset {}'.format(propID,setname)) - - def getMiscProperty(self, setname, propID): - for p in self.MiscPropertySets[setname]: - if p.ID==propID: - return p - raise KeyError('PropID {} not found for Misc propset {}'.format(propID,setname)) - - # --- - @property - def nodeIDs2ElementIDs(self): - """ Return list of elements IDs connected to each node""" - if len(self._nodeIDs2ElementIDs) == 0: - # Compute list of connected elements for each node - self._nodeIDs2ElementIDs=dict() - for i,n in enumerate(self.Nodes): - self._nodeIDs2ElementIDs[n.ID] = [e.ID for e in self.Elements if n.ID in e.nodeIDs] - return self._nodeIDs2ElementIDs - - @property - def nodeIDs2Elements(self): - """ Return list of elements connected to each node""" - if len(self._nodeIDs2Elements) == 0: - # Compute list of connected elements for each node - self._nodeIDs2Elements - for i,n in enumerate(self.Nodes): - self._nodeIDs2Elements[n.ID] = [e for e in self.Elements if n.ID in e.nodeIDs] - return self._nodeIDs2Elements - - - @property - def elementIDs2NodeIDs(self): - """ returns """ - if len(self._elementIDs2NodeIDs) ==0: - self._elementIDs2NodeIDs =dict() - for e in self.Elements: - self._elementIDs2NodeIDs[e.ID] = [n.ID for n in e.nodes] - return self._elementIDs2NodeIDs - - - @property - def connectivity(self): - """ returns connectivity, assuming points are indexed starting at 0 - NOTE: this is basically element2Nodes but reindexed - """ - if len(self._connectivity) ==0: - self._connectivity = [[self.Nodes.index(n) for n in e.nodes] for e in self.Elements] - return self._connectivity - - - # --- Handling of (element/material) Properties - def addElementPropertySet(self, setname): - self.ElemPropertySets[setname]= [] - - def addNodePropertySet(self, setname): - self.NodePropertySets[setname]= [] - - def addMiscPropertySet(self, setname): - self.MiscPropertySets[setname]= [] - - def addNodeProperty(self, setname, prop): - if not isinstance(prop, NodeProperty): - print(type(prop)) - raise Exception('Property needs to inherit from NodeProperty') - self.PropertySets[setname].append(prop) - - def addNodeProperty(self, setname, prop): - if not isinstance(prop, NodeProperty): - print(type(prop)) - raise Exception('Property needs to inherit from NodeProperty') - self.NodePropertySets[setname].append(prop) - - def addElementProperty(self, setname, prop): - if not isinstance(prop, ElemProperty): - print(type(prop)) - raise Exception('Property needs to inherit from ElementProperty') - self.ElemPropertySets[setname].append(prop) - - def addMiscProperty(self, setname, prop): - if not isinstance(prop, ElemProperty): - print(type(prop)) - raise Exception('Property needs to inherit from Property') - self.MiscPropertySets[setname].append(prop) - - # --- Data and node and element prop setters - def setElementNodalProp(self, elem, propset, propIDs): - """ - Set Nodal Properties to each node of an element - """ - for node, pID in zip(elem.nodes, propIDs): - node.setData(self.getNodeProperty(propset, pID).data) - - def setElementNodalPropToElem(self, elem): - """ - Set Element Properties to an element - TODO: this seems to be a hack. It should be automatic I think... - """ - propset=elem.propset - propIDs=elem.propIDs - # USING PROPID 0!!! - elem.setData(self.getNodeProperty(propset, propIDs[0]).data) - # TODO average the two maybe.. - - def setNodeNodalProp(self, node, propset, propID): - """ - Set Nodal Properties to a node - """ - node.setData(self.getNodeProperty(propset, propID).data) - - def setNodalData(self, nodeID, **data_dict): - self.getNode(nodeID).setData(data_dict) - - def __repr__(self): - s='<{} object> with keys:\n'.format(type(self).__name__) - s+='- Nodes ({}):\n'.format(len(self.Nodes)) - s+='\n'.join(str(n) for n in self.Nodes) - s+='\n- Elements ({}):\n'.format(len(self.Elements)) - s+='\n'.join(str(n) for n in self.Elements) - s+='\n- NodePropertySets ({}):'.format(len(self.NodePropertySets)) - for k,v in self.NodePropertySets.items(): - s+='\n> {} ({}):\n'.format(k, len(v)) - s+='\n'.join(str(p) for p in v) - s+='\n- ElementPropertySets ({}):'.format(len(self.ElemPropertySets)) - for k,v in self.ElemPropertySets.items(): - s+='\n> {} ({}):\n'.format(k, len(v)) - s+='\n'.join(str(p) for p in v) - s+='\n- MiscPropertySets ({}):'.format(len(self.MiscPropertySets)) - for k,v in self.MiscPropertySets.items(): - s+='\n> {} ({}):\n'.format(k, len(v)) - s+='\n'.join(str(p) for p in v) - s+='\n- Modes ({}):\n'.format(len(self.Modes)) - s+='\n'.join(str(m) for m in self.Modes) - s+='\n- Motions ({}):'.format(len(self.Motions)) - for m in self.Motions: - s+='\n> {}\n'.format({k:v for k,v in m.items() if not isintance(v,np.ndarray)}) - return s - - # --------------------------------------------------------------------------------} - # --- Geometrical properties - # --------------------------------------------------------------------------------{ - @property - def extent(self): - xmax=np.max([node.x for node in self.Nodes]) - ymax=np.max([node.y for node in self.Nodes]) - zmax=np.max([node.z for node in self.Nodes]) - xmin=np.min([node.x for node in self.Nodes]) - ymin=np.min([node.y for node in self.Nodes]) - zmin=np.min([node.z for node in self.Nodes]) - return [xmin,ymin,zmin],[xmax,ymax,zmax],[xmax-xmin,ymax-ymin,zmax-zmin] - - @property - def maxDimension(self): - _,_,D=self.extent - return np.max(D) - - @property - def points(self): - nNodes = len(self.Nodes) - Points = np.zeros((nNodes,3)) - for i,n in enumerate(self.Nodes): - Points[i,:]=(n.x, n.y, n.z) - return Points - - def toLines(self, output='coord'): - if output=='coord': - lines = np.zeros((len(self.Elements), 2, 3)) # - for ie, e in enumerate(self.Elements): - n1=e.nodes[0] - n2=e.nodes[-1] - lines[ie, 0, : ] = (n1.x, n1.y, n1.z) - lines[ie, 1, : ] = (n2.x, n2.y, n2.z) - elif output=='lines3d': - import mpl_toolkits.mplot3d as plt3d - lines=[] - for ie, e in enumerate(self.Elements): - n1=e.nodes[0] - n2=e.nodes[-1] - line = plt3d.art3d.Line3D((n1.x,n2.x), (n1.y,n2.y), (n1.z,n2.z)) - lines.append(line) - else: - raise NotImplementedError() - - return lines - - # --------------------------------------------------------------------------------} - # --- Change of connectivity - # --------------------------------------------------------------------------------{ - def connecticityHasChanged(self): - self._nodeIDs2ElementIDs = dict() - self._nodeIDs2Elements = dict() - self._elementIDs2NodeIDs = dict() - self._connectivity=[] - - def updateConnectivity(self): - for e in self.Elements: - e.nodes=[self.getNode(i) for i in e.nodeIDs] - - for e in self.Elements: - e.nodeProps = [self.getNodeProperty(e.propset, ID) for ID in e.propIDs] - - # Potentially call nodeIDs2ElementIDs etc - - - def _divideElement(self, elemID, nPerElement, maxElemId, keysNotToCopy=[]): - """ divide a given element by nPerElement (add nodes and elements to graph) """ - if len(self.Modes)>0: - raise Exception('Cannot divide graph when mode data is present') - if len(self.Motions)>0: - raise Exception('Cannot divide graph when motion data is present') - - maxNodeId=np.max([n.ID for n in self.Nodes]) - e = self.getElement(elemID) - newElems = [] - if len(e.nodes)==2: - n1=e.nodes[0] - n2=e.nodes[1] - subNodes=[n1] - for iSub in range(1,nPerElement): - maxNodeId += 1 - #data_dict = n1.data.copy() - data_dict = dict() - fact = float(iSub)/nPerElement - # Interpolating position - x = n1.x*(1-fact)+n2.x*fact - y = n1.y*(1-fact)+n2.y*fact - z = n1.z*(1-fact)+n2.z*fact - # Interpolating data (only if floats) - for k,v in n1.data.items(): - if k not in keysNotToCopy: - try: - data_dict[k] = n1.data[k]*(1-fact) + n2.data[k]*fact - except: - data_dict[k] = n1.data[k] - ni = Node(maxNodeId, x, y, z, **data_dict) - subNodes.append(ni) - self.addNode(ni) - subNodes+=[n2] - e.nodes =subNodes[0:2] - e.nodeIDs=[e.ID for e in e.nodes] - for i in range(1,nPerElement): - maxElemId+=1 - elem_dict = e.data.copy() - # Creating extra properties if necessary - if e.propIDs is not None: - if all(e.propIDs==e.propIDs[0]): - # No need to create a new property - propIDs=e.propIDs - propset=e.propset - else: - raise NotImplementedError('Division of element with different properties on both ends. TODO add new property.') - elem= Element(maxElemId, [subNodes[i].ID, subNodes[i+1].ID], propset=propset, propIDs=propIDs, **elem_dict ) - newElems.append(elem) - return newElems - - - def sortNodesBy(self,key): - """ Sort nodes, will affect the connectivity, but node IDs remain the same""" - - # TODO, that's quite doable - if len(self.Modes)>0: - raise Exception('Cannot sort nodes when mode data is present') - if len(self.Motions)>0: - raise Exception('Cannot sort nodes when motion data is present') - - nNodes = len(self.Nodes) - if key=='x': - values=[n.x for n in self.Nodes] - elif key=='y': - values=[n.y for n in self.Nodes] - elif key=='z': - values=[n.z for n in self.Nodes] - elif key=='ID': - values=[n.ID for n in self.Nodes] - else: - values=[n[key] for n in self.Nodes] - I= np.argsort(values) - self.Nodes=[self.Nodes[i] for i in I] - - # Trigger, remove precomputed values related to connectivity: - self.connecticityHasChanged() - - return self - - def divideElements(self, nPerElement, excludeDataKey='', excludeDataList=[], method='append', keysNotToCopy=[]): - """ divide all elements by nPerElement (add nodes and elements to graph) - - - excludeDataKey: is provided, will exclude elements such that e.data[key] in `excludeDataList` - - - method: append or insert - - - keysNotToCopy: when duplicating node and element data, make sure not to duplicate data with these keys - For instance if a node that has a boundary condition, it should not be passed to the - node that is created when dividing an element. - - Example: - to avoid dividing elements of `Type` 'Cable' or `Rigid`, call as follows: - self.divideElements(3, excludeDataKey='Type', excludeDataList=['Cable','Rigid'] ) - - """ - maxNodeId=np.max([n.ID for n in self.Nodes]) - maxElemId=np.max([e.ID for e in self.Elements]) - - if nPerElement<=0: - raise Exception('nPerElement should be more than 0') - - newElements=[] - for ie in np.arange(len(self.Elements)): # cannot enumerate since length increases - elemID = self.Elements[ie].ID - if method=='insert': - newElements+=[self.getElement(elemID)] # newElements contains - if (len(excludeDataKey)>0 and self.Elements[ie].data[excludeDataKey] not in excludeDataList) or len(excludeDataKey)==0: - elems = self._divideElement(elemID, nPerElement, maxElemId, keysNotToCopy) - maxElemId+=len(elems) - newElements+=elems - else: - print('Not dividing element with ID {}, based on key `{}` with value `{}`'.format(elemID, excludeDataKey,self.Elements[ie].data[excludeDataKey])) - # Adding elements at the end - if method=='append': - pass - elif method=='insert': - self.Elements=[] # We clear all elements - else: - raise NotImplementedError('Element Insertions') - - for e in newElements: - self.addElement(e) - - # Trigger, remove precomputed values related to connectivity: - self.connecticityHasChanged() - - return self - - # --------------------------------------------------------------------------------} - # --- Dynamics - # --------------------------------------------------------------------------------{ - def addMode(self,displ,name=None,freq=1): - if name is None: - name='Mode '+str(len(self.Modes)) - mode = Mode(data=displ, name=name, freq=freq) - self.Modes.append(mode) - - - # --------------------------------------------------------------------------------} - # --- Ouputs / converters - # --------------------------------------------------------------------------------{ - def nodalDataFrame(self, sortBy=None): - """ return a DataFrame of all the nodal data """ - data=dict() - nNodes=len(self.Nodes) - for i,n in enumerate(self.Nodes): - if i==0: - data['ID'] = np.zeros(nNodes).astype(int) - data['x'] = np.zeros(nNodes) - data['y'] = np.zeros(nNodes) - data['z'] = np.zeros(nNodes) - - data['ID'][i] = n.ID - data['x'][i] = n.x - data['y'][i] = n.y - data['z'][i] = n.z - for k,v in n.data.items(): - if k not in data: - data[k] = np.zeros(nNodes) - try: - data[k][i]=v - except: - pass - df = pd.DataFrame(data) - # Sorting - if sortBy is not None: - df.sort_values([sortBy],inplace=True,ascending=True) - df.reset_index(drop=True,inplace=True) - return df - - - def toJSON(self,outfile=None): - d=dict(); - Points=self.points - d['Connectivity'] = self.connectivity - d['Nodes'] = Points.tolist() - - d['ElemProps']=list() - for iElem,elem in enumerate(self.Elements): - Shape = elem.data['shape'] if 'shape' in elem.data.keys() else 'cylinder' - Type = elem.data['Type'] if 'Type' in elem.data.keys() else 1 - try: - Diam = elem.D - except: - Diam = elem.data['D'] if 'D' in elem.data.keys() else 1 - if Shape=='cylinder': - d['ElemProps'].append({'shape':'cylinder','type':Type, 'Diam':Diam}) - else: - raise NotImplementedError() - - - d['Modes']=[ - { - 'name': self.Modes[iMode]['name'], - 'omega':self.Modes[iMode]['freq']*2*np.pi, #in [rad/s] - 'Displ':self.Modes[iMode]['data'].tolist() - } for iMode,mode in enumerate(self.Modes)] - d['groundLevel']=np.min(Points[:,2]) # TODO - - if outfile is not None: - import json - jsonFile=outfile - with open(jsonFile, 'w', encoding='utf-8') as f: - #f.write(to_json(d)) - try: - #f.write(unicode(json.dumps(d, ensure_ascii=False))) #, indent=2) - #f.write(json.dumps(d, ensure_ascii=False)) #, indent=2) - f.write(json.dumps(d, ensure_ascii=False)) - except: - print('>>> FAILED') - json.dump(d, f, indent=0) - return d - -# - - - -INDENT = 3 -SPACE = " " -NEWLINE = "\n" -# Changed basestring to str, and dict uses items() instead of iteritems(). - -def to_json(o, level=0): - ret = "" - if isinstance(o, dict): - if level==0: - ret += "{" + NEWLINE - comma = "" - for k, v in o.items(): - ret += comma - comma = ",\n" - ret += SPACE * INDENT * (level + 1) - ret += '"' + str(k) + '":' + SPACE - ret += to_json(v, level + 1) - ret += NEWLINE + SPACE * INDENT * level + "}" - else: - ret += "{" - comma = "" - for k, v in o.items(): - ret += comma - comma = ",\n" - ret += SPACE - ret += '"' + str(k) + '":' + SPACE - ret += to_json(v, level + 1) - ret += "}" - - elif isinstance(o, str): - ret += '"' + o + '"' - elif isinstance(o, list): - ret += "[" + ",".join([to_json(e, level + 1) for e in o]) + "]" - # Tuples are interpreted as lists - elif isinstance(o, tuple): - ret += "[" + ",".join(to_json(e, level + 1) for e in o) + "]" - elif isinstance(o, bool): - ret += "true" if o else "false" - elif isinstance(o, int): - ret += str(o) - elif isinstance(o, float): - ret += '%.7g' % o - elif isinstance(o, numpy.ndarray) and numpy.issubdtype(o.dtype, numpy.integer): - ret += "[" + ','.join(map(str, o.flatten().tolist())) + "]" - elif isinstance(o, numpy.ndarray) and numpy.issubdtype(o.dtype, numpy.inexact): - ret += "[" + ','.join(map(lambda x: '%.7g' % x, o.flatten().tolist())) + "]" - elif o is None: - ret += 'null' - else: - raise TypeError("Unknown type '%s' for json serialization" % str(type(o))) - return ret diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py deleted file mode 100644 index ce3179de2e..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py +++ /dev/null @@ -1,1091 +0,0 @@ -"""Read/Write TurbSim File - -Part of weio library: https://github.com/ebranlard/weio - -""" -import pandas as pd -import numpy as np -import os -import struct -import time - -try: - from .file import File, EmptyFileError -except: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - File=dict - -class TurbSimFile(File): - """ - Read/write a TurbSim turbulence file (.bts). The object behaves as a dictionary. - - Main keys - --------- - - 'u': velocity field, shape (3 x nt x ny x nz) - - 'y', 'z', 't': space and time coordinates - - 'dt', 'ID', 'info' - - 'zTwr', 'uTwr': tower coordinates and field if present (3 x nt x nTwr) - - 'zRef', 'uRef': height and velocity at a reference point (usually not hub) - - Main methods - ------------ - - read, write, toDataFrame, keys - - valuesAt, vertProfile, horizontalPlane, verticalPlane, closestPoint - - fitPowerLaw - - makePeriodic, checkPeriodic - - Examples - -------- - - ts = TurbSimFile('Turb.bts') - print(ts.keys()) - print(ts['u'].shape) - u,v,w = ts.valuesAt(y=10.5, z=90) - - - """ - - @staticmethod - def defaultExtensions(): - return ['.bts'] - - @staticmethod - def formatName(): - return 'TurbSim binary' - - def __init__(self, filename=None, **kwargs): - self.filename = None - if filename: - self.read(filename, **kwargs) - - def read(self, filename=None, header_only=False, tdecimals=8): - """ read BTS file, with field: - u (3 x nt x ny x nz) - uTwr (3 x nt x nTwr) - """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - scl = np.zeros(3, np.float32); off = np.zeros(3, np.float32) - with open(self.filename, mode='rb') as f: - # Reading header info - ID, nz, ny, nTwr, nt = struct.unpack('0) - for it in range(nt): - Buffer = np.frombuffer(f.read(2*3*ny*nz), dtype=np.int16).astype(np.float32).reshape([3, ny, nz], order='F') - u[:,it,:,:]=Buffer - Buffer = np.frombuffer(f.read(2*3*nTwr), dtype=np.int16).astype(np.float32).reshape([3, nTwr], order='F') - uTwr[:,it,:]=Buffer - u -= off[:, None, None, None] - u /= scl[:, None, None, None] - self['u'] = u - uTwr -= off[:, None, None] - uTwr /= scl[:, None, None] - self['uTwr'] = uTwr - self['info'] = info - self['ID'] = ID - self['dt'] = np.round(dt, tdecimals) # dt is stored in single precision in the TurbSim output - self['y'] = np.arange(ny)*dy - self['y'] -= np.mean(self['y']) # y always centered on 0 - self['z'] = np.arange(nz)*dz +zBottom - self['t'] = np.round(np.arange(nt)*dt, tdecimals) - self['zTwr'] =-np.arange(nTwr)*dz + zBottom - self['zRef'] = zHub - self['uRef'] = uHub - - def write(self, filename=None): - """ - write a BTS file, using the following keys: 'u','z','y','t','uTwr' - u (3 x nt x ny x nz) - uTwr (3 x nt x nTwr) - """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - - nDim, nt, ny, nz = self['u'].shape - if 'uTwr' not in self.keys() : - self['uTwr']=np.zeros((3,nt,0)) - if 'ID' not in self.keys() : - self['ID']=7 - - _, _, nTwr = self['uTwr'].shape - tsTwr = self['uTwr'] - ts = self['u'] - intmin = -32768 - intrng = 65535 - off = np.empty((3), dtype = np.float32) - scl = np.empty((3), dtype = np.float32) - info = 'Generated by TurbSimFile on {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) - # Calculate scaling, offsets and scaling data - out = np.empty(ts.shape, dtype=np.int16) - outTwr = np.empty(tsTwr.shape, dtype=np.int16) - for k in range(3): - all_min, all_max = ts[k].min(), ts[k].max() - if nTwr>0: - all_min=min(all_min, tsTwr[k].min()) - all_max=max(all_max, tsTwr[k].max()) - if all_min == all_max: - scl[k] = 1 - else: - scl[k] = intrng / (all_max-all_min) - off[k] = intmin - scl[k] * all_min - out[k] = (ts[k] * scl[k] + off[k]).astype(np.int16) - outTwr[k] = (tsTwr[k] * scl[k] + off[k]).astype(np.int16) - z0 = self['z'][0] - dz = self['z'][1]- self['z'][0] - dy = self['y'][1]- self['y'][0] - dt = self['t'][1]- self['t'][0] - - # Providing estimates of uHub and zHub even if these fields are not used - zHub,uHub, bHub = self.hubValues() - - with open(self.filename, mode='wb') as f: - f.write(struct.pack('0: - s+=' - zTwr: [{} ... {}], dz: {}, n: {} \n'.format(self['zTwr'][0],self['zTwr'][-1],self['zTwr'][1]-self['zTwr'][0],len(self['zTwr'])) - if 'uTwr' in self.keys() and self['uTwr'].shape[2]>0: - s+=' - uTwr: ({} x {} x {} ) \n'.format(*(self['uTwr'].shape)) - ux,uy,uz=self['uTwr'][0], self['uTwr'][1], self['uTwr'][2] - s+=' ux: min: {}, max: {}, mean: {} \n'.format(np.min(ux), np.max(ux), np.mean(ux)) - s+=' uy: min: {}, max: {}, mean: {} \n'.format(np.min(uy), np.max(uy), np.mean(uy)) - s+=' uz: min: {}, max: {}, mean: {} \n'.format(np.min(uz), np.max(uz), np.mean(uz)) - s += ' Useful methods:\n' - s += ' - read, write, toDataFrame, keys\n' - s += ' - valuesAt, vertProfile, horizontalPlane, verticalPlane, closestPoint\n' - s += ' - fitPowerLaw\n' - s += ' - makePeriodic, checkPeriodic\n' - return s - - def toDataFrame(self): - dfs={} - - ny = len(self['y']) - nz = len(self['y']) - # Index at mid box - iy,iz = self.iMid - - # Mean vertical profile - z, m, s = self.vertProfile() - ti = s/m*100 - cols=['z_[m]','u_[m/s]','v_[m/s]','w_[m/s]','sigma_u_[m/s]','sigma_v_[m/s]','sigma_w_[m/s]','TI_[%]'] - data = np.column_stack((z, m[0,:],m[1,:],m[2,:],s[0,:],s[1,:],s[2,:],ti[0,:])) - dfs['VertProfile'] = pd.DataFrame(data = data ,columns = cols) - - # Mid time series - u = self['u'][:,:,iy,iz] - cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] - data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) - dfs['ZMidLine'] = pd.DataFrame(data = data ,columns = cols) - - - # ZMid YStart time series - u = self['u'][:,:,0,iz] - cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] - data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) - dfs['ZMidYStartLine'] = pd.DataFrame(data = data ,columns = cols) - - # ZMid YEnd time series - u = self['u'][:,:,-1,iz] - cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] - data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) - dfs['ZMidYEndLine'] = pd.DataFrame(data = data ,columns = cols) - - # Mid crosscorr y - y, rho_uu_y, rho_vv_y, rho_ww_y = self.crosscorr_y() - cols = ['y_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] - data = np.column_stack((y, rho_uu_y, rho_vv_y, rho_ww_y)) - dfs['Mid_xcorr_y'] = pd.DataFrame(data = data ,columns = cols) - - # Mid crosscorr z - z, rho_uu_z, rho_vv_z, rho_ww_z = self.crosscorr_z() - cols = ['z_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] - data = np.column_stack((z, rho_uu_z, rho_vv_z, rho_ww_z)) - dfs['Mid_xcorr_z'] = pd.DataFrame(data = data ,columns = cols) - - # Mid csd - try: - fc, chi_uu, chi_vv, chi_ww = self.csd_longi() - cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] - data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) - dfs['Mid_csd_longi'] = pd.DataFrame(data = data ,columns = cols) - - # Mid csd - fc, chi_uu, chi_vv, chi_ww = self.csd_lat() - cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] - data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) - dfs['Mid_csd_lat'] = pd.DataFrame(data = data ,columns = cols) - - # Mid csd - fc, chi_uu, chi_vv, chi_ww = self.csd_vert() - cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] - data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) - dfs['Mid_csd_vert'] = pd.DataFrame(data = data ,columns = cols) - except ModuleNotFoundError: - print('Module scipy.signal not available') - except ImportError: - print('Likely issue with fftpack') - - - # Hub time series - #try: - # zHub = self['zHub'] - # iz = np.argmin(np.abs(self['z']-zHub)) - # u = self['u'][:,:,iy,iz] - # Cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] - # data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) - # dfs['TSHubLine'] = pd.DataFrame(data = data ,columns = Cols) - #except: - # pass - return dfs - - def toDataset(self): - """ - Convert the data that was read in into a xarray Dataset - - # TODO SORT OUT THE DIFFERENCE WITH toDataSet - """ - from xarray import IndexVariable, DataArray, Dataset - - print('[TODO] pyFAST.input_output.turbsim_file.toDataset: merge with function toDataSet') - - y = IndexVariable("y", self.y, attrs={"description":"lateral coordinate","units":"m"}) - zround = np.asarray([np.round(zz,6) for zz in self.z]) #the open function here returns something like *.0000000001 which is annoying - z = IndexVariable("z", zround, attrs={"description":"vertical coordinate","units":"m"}) - time = IndexVariable("time", self.t, attrs={"description":"time since start of simulation","units":"s"}) - - da = {} - for component,direction,velname in zip([0,1,2],["x","y","z"],["u","v","w"]): - # the dataset produced here has y/z axes swapped relative to data stored in original object - velocity = np.swapaxes(self["u"][component,...],1,2) - da[velname] = DataArray(velocity, - coords={"time":time,"y":y,"z":z}, - dims=["time","y","z"], - name="velocity", - attrs={"description":"velocity along {0}".format(direction),"units":"m/s"}) - - return Dataset(data_vars=da, coords={"time":time,"y":y,"z":z}) - - def toDataSet(self, datetime=False): - """ - Convert the data that was read in into a xarray Dataset - - # TODO SORT OUT THE DIFFERENCE WITH toDataset - """ - import xarray as xr - - print('[TODO] pyFAST.input_output.turbsim_file.toDataSet: should be discontinued') - print('[TODO] pyFAST.input_output.turbsim_file.toDataSet: merge with function toDataset') - - if datetime: - timearray = pd.to_datetime(self['t'], unit='s', origin=pd.to_datetime('2000-01-01 00:00:00')) - timestr = 'datetime' - else: - timearray = self['t'] - timestr = 'time' - - ds = xr.Dataset( - data_vars=dict( - u=([timestr,'y','z'], self['u'][0,:,:,:]), - v=([timestr,'y','z'], self['u'][1,:,:,:]), - w=([timestr,'y','z'], self['u'][2,:,:,:]), - ), - coords={ - timestr : timearray, - 'y' : self['y'], - 'z' : self['z'], - }, - ) - - # Add mean computations - ds['up'] = ds['u'] - ds['u'].mean(dim=timestr) - ds['vp'] = ds['v'] - ds['v'].mean(dim=timestr) - ds['wp'] = ds['w'] - ds['w'].mean(dim=timestr) - - if datetime: - # Add time (in s) to the variable list - ds['time'] = (('datetime'), self['t']) - - return ds - - # Useful converters - def fromAMRWind(self, filename, timestep, output_frequency, sampling_identifier, verbose=1, fileout=None, zref=None, xloc=None): - """ - Reads a AMRWind netcdf file, grabs a group of sampling planes (e.g. p_slice), - return an instance of TurbSimFile, optionally write turbsim file to disk - - - Parameters - ---------- - filename : str, - full path to netcdf file generated by amrwind - timestep : float, - amr-wind code timestep (time.fixed_dt) - output_frequency : int, - frequency chosen for sampling output in amrwind input file (sampling.output_frequency) - sampling_identifier : str, - identifier of the sampling being requested (an entry of sampling.labels in amrwind input file) - zref : float, - height to be written to turbsim as the reference height. if none is given, it is taken as the vertical centerpoint of the slice - """ - try: - from pyFAST.input_output.amrwind_file import AMRWindFile - except: - try: - from .amrwind_file import AMRWindFile - except: - from amrwind_file import AMRWindFile - - obj = AMRWindFile(filename,timestep,output_frequency, group_name=sampling_identifier) - - self["u"] = np.ndarray((3,obj.nt,obj.ny,obj.nz)) - - xloc = float(obj.data.x[0]) if xloc is None else xloc - if verbose: - print("Grabbing the slice at x={0} m".format(xloc)) - self['u'][0,:,:,:] = np.swapaxes(obj.data.u.sel(x=xloc).values,1,2) - self['u'][1,:,:,:] = np.swapaxes(obj.data.v.sel(x=xloc).values,1,2) - self['u'][2,:,:,:] = np.swapaxes(obj.data.w.sel(x=xloc).values,1,2) - self['t'] = obj.data.t.values - - self['y'] = obj.data.y.values - self['z'] = obj.data.z.values - self['dt'] = obj.output_dt - - self['ID'] = 7 - ltime = time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime()) - self['info'] = 'Converted from AMRWind output file {0} {1:s}.'.format(filename,ltime) - - iz = int(obj.nz/2) - self['zRef'] = float(obj.data.z[iz]) if zref is None else zref - if verbose: - print("Setting the TurbSim file reference height to z={0} m".format(self["zRef"])) - - self['uRef'] = float(obj.data.u.sel(x=xloc).sel(y=0).sel(z=self["zRef"]).mean().values) - self['zRef'], self['uRef'], bHub = self.hubValues() - - if fileout is not None: - filebase = os.path.splitext(filename)[1] - fileout = filebase+".bts" - if verbose: - print("===> {0}".format(fileout)) - self.write(fileout) - - - def fromAMRWind_legacy(self, filename, dt, nt, y, z, sampling_identifier='p_sw2'): - """ - Convert current TurbSim file into one generated from AMR-Wind LES sampling data in .nc format - Assumes: - -- u, v, w (nt, nx * ny * nz) - -- u is aligned with x-axis (flow is not rotated) - this consideration needs to be added - - - INPUTS: - - filename: (string) full path to .nc sampling data file - - sampling_identifier: (string) name of sampling plane group from .inp file (e.g. "p_sw2") - - dt: timestep size [s] - - nt: number of timesteps (sequential) you want to read in, starting at the first timestep available - INPUTS: TODO - - y: user-defined vector of coordinate positions in y - - z: user-defined vector of coordinate positions in z - - uref: (float) reference mean velocity (e.g. 8.0 hub height mean velocity from input file) - - zref: (float) hub height (e.t. 150.0) - """ - import xarray as xr - - print('[TODO] fromAMRWind_legacy: function might be unfinished. Merge with fromAMRWind') - print('[TODO] fromAMRWind_legacy: figure out y, and z from data (see fromAMRWind)') - - # read in sampling data plane - ds = xr.open_dataset(filename, - engine='netcdf4', - group=sampling_identifier) - ny, nz, _ = ds.attrs['ijk_dims'] - noffsets = len(ds.attrs['offsets']) - t = np.arange(0, dt*(nt-0.5), dt) - print('max time [s] = ', t[-1]) - - self['u']=np.ndarray((3,nt,ny,nz)) #, buffer=shm.buf) - # read in AMRWind velocity data - self['u'][0,:,:,:] = ds['velocityx'].isel(num_time_steps=slice(0,nt)).values.reshape(nt,noffsets,ny,nz)[:,1,:,:] # last index = 1 refers to 2nd offset plane at -1200 m - self['u'][1,:,:,:] = ds['velocityy'].isel(num_time_steps=slice(0,nt)).values.reshape(nt,noffsets,ny,nz)[:,1,:,:] - self['u'][2,:,:,:] = ds['velocityz'].isel(num_time_steps=slice(0,nt)).values.reshape(nt,noffsets,ny,nz)[:,1,:,:] - self['t'] = t - self['y'] = y - self['z'] = z - self['dt'] = dt - # TODO - self['ID'] = 7 # ... - self['info'] = 'Converted from AMRWind fields {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) -# self['zTwr'] = np.array([]) -# self['uTwr'] = np.array([]) - self['zRef'] = zref #None - self['uRef'] = uref #None - self['zRef'], self['uRef'], bHub = self.hubValues() - - def fromMannBox(self, u, v, w, dx, U, y, z, addU=None): - """ - Convert current TurbSim file into one generated from MannBox - Assumes: - u, v, w (nt x ny x nz) - - y: goes from -ly/2 to ly/2 this is an IMPORTANT subtlety - The field u needs to respect this convention! - (fields from weio.mannbox_file do respect this convention - but when exported to binary files, the y axis is flipped again) - - INPUTS: - - u, v, w : mann box fields - - dx: axial spacing of mann box (to compute time) - - U: reference speed of mann box (to compute time) - - y: y coords of mann box - - z: z coords of mann box - """ - nt,ny,nz = u.shape - dt = dx/U - t = np.arange(0, dt*(nt-0.5), dt) - nt = len(t) - if y[0]>y[-1]: - raise Exception('y is assumed to go from - to +') - - self['u']=np.zeros((3, nt, ny, nz)) - self['u'][0,:,:,:] = u - self['u'][1,:,:,:] = v - self['u'][2,:,:,:] = w - if addU is not None: - self['u'][0,:,:,:] += addU - self['t'] = t - self['y'] = y - self['z'] = z - self['dt'] = dt - # TODO - self['ID'] = 7 # ... - self['info'] = 'Converted from MannBox fields {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) -# self['zTwr'] = np.array([]) -# self['uTwr'] = np.array([]) - self['zRef'] = None - self['uRef'] = None - self['zRef'], self['uRef'], bHub = self.hubValues() - - def toMannBox(self, base=None, removeUConstant=None, removeAllUMean=False): - """ - removeUConstant: float, will be removed from all values of the U box - removeAllUMean: If true, the time-average of each y-z points will be substracted - """ - try: - from weio.mannbox_file import MannBoxFile - except: - try: - from .mannbox_file import MannBoxFile - except: - from mannbox_file import MannBoxFile - # filename - if base is None: - base = os.path.splitext(self.filename)[0] - base = base+'_{}x{}x{}'.format(*self['u'].shape[1:]) - - mn = MannBoxFile() - mn.fromTurbSim(self['u'], 0, removeConstant=removeUConstant, removeAllMean=removeAllUMean) - mn.write(base+'.u') - - mn.fromTurbSim(self['u'], 1) - mn.write(base+'.v') - - mn.fromTurbSim(self['u'], 2) - mn.write(base+'.w') - - # --- Useful IO - def writeInfo(ts, filename): - """ Write info to txt """ - infofile = filename - with open(filename,'w') as f: - f.write(str(ts)) - zMid =(ts['z'][0]+ts['z'][-1])/2 - f.write('Middle height of box: {:.3f}\n'.format(zMid)) - y_fit, pfit, model, _ = ts.fitPowerLaw(z_ref=zMid, y_span='mid', U_guess=10, alpha_guess=0.1) - f.write('Power law: alpha={:.5f} - u={:.5f} at z={:.5f}\n'.format(pfit[1],pfit[0],zMid)) - f.write('Periodic: {}\n'.format(ts.checkPeriodic(sigmaTol=1.5, aTol=0.5))) - - - - def writeProbes(ts, probefile, yProbe, zProbe): - """ Create a CSV file with wind speed data at given probe locations - defined by the vectors yProbe and zProbe. All combinations of y and z are extracted. - INPUTS: - - probefile: filename of CSV file to be written - - yProbe: array like of y locations - - zProbe: array like of z locations - """ - Columns=['Time_[s]'] - Data = ts['t'] - for y in yProbe: - for z in zProbe: - iy = np.argmin(np.abs(ts['y']-y)) - iz = np.argmin(np.abs(ts['z']-z)) - lbl = '_y{:.0f}_z{:.0f}'.format(ts['y'][iy], ts['z'][iz]) - Columns+=['{}{}_[m/s]'.format(c,lbl) for c in['u','v','w']] - DataSub = np.column_stack((ts['u'][0,:,iy,iz],ts['u'][1,:,iy,iz],ts['u'][2,:,iy,iz])) - Data = np.column_stack((Data, DataSub)) - np.savetxt(probefile, Data, header=','.join(Columns), delimiter=',') - - def fitPowerLaw(ts, z_ref=None, y_span='full', U_guess=10, alpha_guess=0.1): - """ - Fit power law to vertical profile - INPUTS: - - z_ref: reference height used to define the "U_ref" - - y_span: if 'full', average the vertical profile accross all y-values - if 'mid', average the vertical profile at the middle y value - """ - if z_ref is None: - # use mid height for z_ref - z_ref =(ts['z'][0]+ts['z'][-1])/2 - # Average time series - z, u, _ = ts.vertProfile(y_span=y_span) - u = u[0,:] - u_fit, pfit, model = fit_powerlaw_u_alpha(z, u, z_ref=z_ref, p0=(U_guess, alpha_guess)) - return u_fit, pfit, model, z_ref - -# Functions from BTS_File.py to be ported here -# def TI(self,y=None,z=None,j=None,k=None): -# """ -# If no argument is given, compute TI over entire grid and return array of size (ny,nz). Else, compute TI at the specified point. -# -# Parameters -# ---------- -# y : float, -# cross-stream position [m] -# z : float, -# vertical position AGL [m] -# j : int, -# grid index along cross-stream -# k : int, -# grid index along vertical -# """ -# if ((y==None) & (j==None)): -# return np.std(self.U,axis=0) / np.mean(self.U,axis=0) -# if ((y==None) & (j!=None)): -# return (np.std(self.U[:,j,k])/np.mean(self.U[:,j,k])) -# if ((y!=None) & (j==None)): -# uSeries = self.U[:,self.y2j(y),self.z2k(z)] -# return np.std(uSeries)/np.mean(uSeries) -# -# def visualize(self,component='U',time=0): -# """ -# Quick peak at the data for a given component, at a specific time. -# """ -# data = getattr(self,component)[time,:,:] -# plt.figure() ; -# plt.imshow(data) ; -# plt.colorbar() -# plt.show() -# -# def spectrum(self,component='u',y=None,z=None): -# """ -# Calculate spectrum of a specific component, given time series at ~ hub. -# -# Parameters -# ---------- -# component : string, -# which component to use -# y : float, -# y coordinate [m] of specific location -# z : float, -# z coordinate [m] of specific location -# -# """ -# if y==None: -# k = self.kHub -# j = self.jHub -# data = getattr(self,component) -# data = data[:,j,k] -# N = data.size -# freqs = fftpack.fftfreq(N,self.dT)[1:N/2] -# psd = (np.abs(fftpack.fft(data,N)[1:N/2]))**2 -# return [freqs, psd] -# -# def getRotorPoints(self): -# """ -# In the square y-z slice, return which points are at the edge of the rotor in the horizontal and vertical directions. -# -# Returns -# ------- -# jLeft : int, -# index for grid point that matches the left side of the rotor (when looking towards upstream) -# jRight : int, -# index for grid point that matches the right side of the rotor (when looking towards upstream) -# kBot : int, -# index for grid point that matches the bottom of the rotor -# kTop : int, -# index for grid point that matches the top of the rotor -# """ -# self.zBotRotor = self.zHub - self.R -# self.zTopRotor = self.zHub + self.R -# self.yLeftRotor = self.yHub - self.R -# self.yRightRotor = self.yHub + self.R -# self.jLeftRotor = self.y2j(self.yLeftRotor) -# self.jRightRotor = self.y2j(self.yRightRotor) -# self.kBotRotor = self.z2k(self.zBotRotor) -# self.kTopRotor = self.z2k(self.zTopRotor) -# - - - -def fit_powerlaw_u_alpha(x, y, z_ref=100, p0=(10,0.1)): - """ - p[0] : u_ref - p[1] : alpha - """ - import scipy.optimize as so - pfit, _ = so.curve_fit(lambda x, *p : p[0] * (x / z_ref) ** p[1], x, y, p0=p0) - y_fit = pfit[0] * (x / z_ref) ** pfit[1] - coeffs_dict={'u_ref':pfit[0],'alpha':pfit[1]} - formula = '{u_ref} * (z / {z_ref}) ** {alpha}' - fitted_fun = lambda xx: pfit[0] * (xx / z_ref) ** pfit[1] - return y_fit, pfit, {'coeffs':coeffs_dict,'formula':formula,'fitted_function':fitted_fun} - -if __name__=='__main__': - ts = TurbSimFile('../_tests/TurbSim.bts') - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py deleted file mode 100644 index 85be93b5cc..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py +++ /dev/null @@ -1,102 +0,0 @@ -from itertools import takewhile -import pandas as pd -import numpy as np -try: - from .file import File, WrongFormatError, BrokenFormatError -except: - File = dict - class WrongFormatError(Exception): pass - class BrokenFormatError(Exception): pass - - -class TurbSimTSFile(File): - - @staticmethod - def defaultExtensions(): - return ['.txt'] - - @staticmethod - def formatName(): - return 'TurbSim time series' - - def _read(self, *args, **kwargs): - self['header']=[] - nHeaderMax=10 - # Reading - iFirstData=-1 - with open(self.filename, 'r', errors="surrogateescape") as f: - for i, line in enumerate(f): - if i>nHeaderMax: - raise BrokenFormatError('`nComp` not found in file') - if line.lower().find('ncomp')>=0: - iFirstData=i - break - self['header'].append(line.strip()) - self['nComp'] = int(line.split()[0]) - line = f.readline().strip() - nPoints = int(line.split()[0]) - line = f.readline().strip() - self['ID'] = int(line.split()[0]) - f.readline() - f.readline() - self['Points']=np.zeros((nPoints,2)) - for i in np.arange(nPoints): - line = f.readline().strip() - self['Points'][i,:]= np.array(line.split()).astype(float) - f.readline() - f.readline() - f.readline() - lines=[] - # reading full data - self['data'] = np.array([l.strip().split() for l in takewhile(lambda x: len(x.strip())>0, f.readlines())]).astype(float) - - def columns(self): - Comp=['u','v','w'] - return ['Time']+['Point{}{}'.format(ip+1,Comp[ic]) for ic in np.arange(self['nComp']) for ip in np.arange(len(self['Points']))] - - def units(self): - nPoints = self['Points'].shape[0] - return ['(s)'] + ['(m/s)']*nPoints*self['nComp'] - - def toString(self): - - def toStringVLD(val,lab,descr): - val='{}'.format(val) - lab='{}'.format(lab) - if len(val)<13: - val='{:13s}'.format(val) - if len(lab)<13: - lab='{:13s}'.format(lab) - return val+' '+lab+' - '+descr.strip().strip('-')+'\n' - - s='\n'.join(self['header'])+'\n' - nPoints = self['Points'].shape[0] - s+=toStringVLD(self['nComp'],'nComp' ,'Number of velocity components in the file' ) - s+=toStringVLD(nPoints ,'nPoints','Number of time series points contained in this file(-)') - s+=toStringVLD(self['ID'] ,'RefPtID','Index of the reference point (1-nPoints)') - s+='{:^16s}{:^16s} {}\n'.format('Pointyi','Pointzi','! nPoints listed in order of increasing height') - s+='{:^16s}{:^16s}\n'.format('(m)','(m)') - for row in self['Points']: - s+=''.join(['{:16.8e}'.format(v) for v in row])+'\n' - - s+='--------Time Series-------------------------------------------------------------\n' - s+=''.join(['{:^16s}'.format(c) for c in self.columns()])+'\n' - s+=''.join(['{:^16s}'.format(c) for c in self.units()])+'\n' - s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['data']) - return s - - def _write(self): - with open(self.filename,'w') as f: - f.write(self.toString()) - - - - def _toDataFrame(self): - Cols = ['{}_{}'.format(c.replace(' ','_'), u.replace('(','[').replace(')',']')) for c,u in zip(self.columns(),self.units())] - dfs={} - dfs['Points'] = pd.DataFrame(data = self['Points'],columns = ['PointYi','PointZi']) - dfs['TimeSeries'] = pd.DataFrame(data = self['data'] ,columns = Cols) - - return dfs - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py deleted file mode 100644 index e3ed2f77f5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py +++ /dev/null @@ -1,1349 +0,0 @@ -""" -Read/Write VTK files - -Part of weio library: https://github.com/ebranlard/weio - -""" -import pandas as pd -import numpy as np -import numpy -import os -from functools import reduce -import collections - -try: - from .file import File, EmptyFileError, WrongFormatError, BrokenFormatError -except ImportError: - EmptyFileError = type('EmptyFileError', (Exception,),{}) - WrongFormatError = type('WrongFormatError', (Exception,),{}) - BrokenFormatError = type('BrokenFormatError', (Exception,),{}) - File=dict - -class VTKFile(File): - """ - Read/write a VTK file (.vtk). - - Main attributes for grids: - --------- - - xp_grid, yp_grid, zp_grid: vectors of points locations - - point_data_grid: dictionary containing data at the grid points - - Main attributes for mesh: - --------- - - points - - point_data - - cells - - cell_data - - Main methods - ------------ - - read, write - - Examples - -------- - vtk = VTKFile('DisXZ1.vtk') - x = vtk.x_grid - z = vtk.z_grid - Ux = vtk.point_data_grid['DisXZ'][:,0,:,0] - - """ - @staticmethod - def defaultExtensions(): - return ['.vtk','.vtp'] - - @staticmethod - def formatName(): - return 'VTK file' - - def __init__(self,filename=None,**kwargs): - self.filename = None - # For regular grid - self.xp_grid=None # location of points - self.yp_grid=None - self.zp_grid=None - self.point_data_grid = None - - # Main Data - self.points = None - self.field_data = {} - self.point_data = {} - self.dataset = {} - - - - # Data for reading only - self.cell_data_raw = {} - self.c = None # Cell - self.ct = None # CellTypes - self.active = None - self.is_ascii = False - self.split = [] - self.num_items = 0 - self.section = None - - # Propagate read - if filename: - self.read(filename=filename,**kwargs) - - - def read(self, filename=None): - """ read a VTK file """ - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - if not os.path.isfile(self.filename): - raise OSError(2,'File not found:',self.filename) - if os.stat(self.filename).st_size == 0: - raise EmptyFileError('File is empty:',self.filename) - - with open(filename, "rb") as f: - # initialize output data - # skip header and title - f.readline() - f.readline() - - data_type = f.readline().decode("utf-8").strip().upper() - if data_type not in ["ASCII", "BINARY"]: - raise ReadError('Unknown VTK data type ',data_type) - self.is_ascii = data_type == "ASCII" - - while True: - line = f.readline().decode("utf-8") - if not line: - # EOF - break - - line = line.strip() - if len(line) == 0: - continue - - self.split = line.split() - self.section = self.split[0].upper() - - if self.section in vtk_sections: - _read_section(f, self) - else: - _read_subsection(f, self) - - # --- Postpro - _check_mesh(self) # generate points if needed - cells, cell_data = translate_cells(self.c, self.ct, self.cell_data_raw) - self.cells = cells - self.cell_data = cell_data - - if self.dataset['type']=='STRUCTURED_POINTS': - self.point_data_grid = {} - # We provide point_data_grid, corresponds to point_data but reshaped - for k,PD in self.point_data.items(): - # NOTE: tested foe len(y)=1, len(z)=1 - self.point_data_grid[k]=PD.reshape(len(self.xp_grid), len(self.yp_grid), len(self.zp_grid),PD.shape[1], order='F') - - - def write(self, filename=None, binary=True): - """ - Write to unstructured grid - TODO structured grid - """ - - if filename: - self.filename = filename - if not self.filename: - raise Exception('No filename provided') - - - def pad(array): - return np.pad(array, ((0, 0), (0, 1)), "constant") - - if self.points.shape[1] == 2: - points = pad(self.points) - else: - points = self.points - - if self.point_data: - for name, values in self.point_data.items(): - if len(values.shape) == 2 and values.shape[1] == 2: - self.point_data[name] = pad(values) - - for name, data in self.cell_data.items(): - for k, values in enumerate(data): - if len(values.shape) == 2 and values.shape[1] == 2: - data[k] = pad(data[k]) - - with open(filename, "wb") as f: - f.write(b"# vtk DataFile Version 4.2\n") - f.write("written \n".encode("utf-8")) - f.write(("BINARY\n" if binary else "ASCII\n").encode("utf-8")) - f.write(b"DATASET UNSTRUCTURED_GRID\n") - - # write points and cells - _write_points(f, points, binary) - _write_cells(f, self.cells, binary) - - # write point data - if self.point_data: - num_points = self.points.shape[0] - f.write("POINT_DATA {}\n".format(num_points).encode("utf-8")) - _write_field_data(f, self.point_data, binary) - - # write cell data - if self.cell_data: - total_num_cells = sum(len(c.data) for c in self.cells) - f.write("CELL_DATA {}\n".format(total_num_cells).encode("utf-8")) - _write_field_data(f, self.cell_data, binary) - - - def __repr__(self): - s='<{} object> with keys:\n'.format(type(self).__name__) - for k,v in self.items(): - s+=' - {}: {}\n'.format(k,v) - return s - - - def __repr__(self): - """ print function """ - def show_grid(v,s): - if v is None: - return - if len(v)==0: - return - if len(v)==1: - lines.append('- {}: [{}], n: {}'.format(s,v[0],len(v))) - else: - lines.append('- {}: [{} ... {}], dx: {}, n: {}'.format(s,v[0],v[-1],v[1]-v[0],len(v))) - - lines = ['<{} object> with attributes:'.format(type(self).__name__)] - show_grid(self.xp_grid, 'xp_grid') - show_grid(self.yp_grid, 'yp_grid') - show_grid(self.zp_grid, 'zp_grid') - - if self.point_data_grid: - lines.append('- point_data_grid:') - for k,v in self.point_data_grid.items(): - lines.append(' "{}" : {}'.format(k,v.shape)) - - lines.append('- points {}'.format(len(self.points))) - if len(self.cells) > 0: - lines.append("- cells:") - for tpe, elems in self.cells: - lines.append(" {}: {}".format(tpe,len(elems))) - else: - lines.append(" No cells.") - - if self.point_data: - lines.append('- point_data:') - for k,v in self.point_data.items(): - lines.append(' "{}" : {}'.format(k,v.shape)) - - if self.cell_data: - names = ", ".join(self.cell_data.keys()) - lines.append(" Cell data: {}".format(names)) - - return "\n".join(lines) - - - def toDataFrame(self): - return None - - - -# Save FlowData Object to vtk -# """ -# n_points = self.dimensions.x1 * self.dimensions.x2 * self.dimensions.x3 -# vtk_file = Output(filename) - #self.file = open(self.filename, "w") - #self.ln = "\n" -# vtk_file.write_line('# vtk DataFile Version 3.0') -# vtk_file.write_line('array.mean0D') -# vtk_file.write_line('ASCII') -# vtk_file.write_line('DATASET STRUCTURED_POINTS') -# vtk_file.write_line('DIMENSIONS {}'.format(self.dimensions)) -# vtk_file.write_line('ORIGIN {}'.format(self.origin)) -# vtk_file.write_line('SPACING {}'.format(self.spacing)) -# vtk_file.write_line('POINT_DATA {}'.format(n_points)) -# vtk_file.write_line('FIELD attributes 1') -# vtk_file.write_line('UAvg 3 {} float'.format(n_points)) -# for u, v, w in zip(self.u, self.v, self.w): -# vtk_file.write_line('{}'.format(Vec3(u, v, w))) - -# --- Paraview -# except: from paraview.simple import * -# sliceFile = sliceDir + '/' + tStartStr + '/' + sliceName -# print ' Slice file 1a: ' + sliceFile -# slice_1a_vtk = LegacyVTKReader( FileNames=[sliceFile] ) -# sliceFile = sliceDir + '/' + tEndStr + '/' + sliceName -# DataRepresentation3 = GetDisplayProperties(slice_1a_vtk) -# DataRepresentation3.Visibility = 0 -# SetActiveSource(slice_1a_vtk) - -# --- VTK -# import np -# from vtk import vtkStructuredPointsReader -# from vtk.util import np as VN -# -# reader = vtkStructuredPointsReader() -# reader.SetFileName(filename) -# reader.ReadAllVectorsOn() -# reader.ReadAllScalarsOn() -# reader.Update() -# -# data = reader.GetOutput() -# -# dim = data.GetDimensions() -# vec = list(dim) -# vec = [i-1 for i in dim] -# vec.append(3) -# -# u = VN.vtk_to_np(data.GetCellData().GetArray('velocity')) -# b = VN.vtk_to_numpy(data.GetCellData().GetArray('cell_centered_B')) -# -# u = u.reshape(vec,order='F') -# b = b.reshape(vec,order='F') -# -# x = zeros(data.GetNumberOfPoints()) -# y = zeros(data.GetNumberOfPoints()) -# z = zeros(data.GetNumberOfPoints()) -# -# for i in range(data.GetNumberOfPoints()): -# x[i],y[i],z[i] = data.GetPoint(i) -# -# x = x.reshape(dim,order='F') -# y = y.reshape(dim,order='F') -# z = z.reshape(dim,order='F') - -# --- vtk -# import vtk -# import numpy -# import vtk_demo.version as version -# -# -# def main(): -# """ -# :return: The render window interactor. -# """ -# -# chessboard_resolution = 5 -# n_lut_colors = 256 -# data_max_value = 1 -# -# # Provide some geometry -# chessboard = vtk.vtkPlaneSource() -# chessboard.SetXResolution(chessboard_resolution) -# chessboard.SetYResolution(chessboard_resolution) -# num_squares = chessboard_resolution * chessboard_resolution -# # Force an update so we can set cell data -# chessboard.Update() -# -# # Make some arbitrary data to show on the chessboard geometry -# data = vtk.vtkFloatArray() -# for i in range(num_squares): -# if i == 4: -# # This square should in principle light up with color given by SetNanColor below -# data.InsertNextTuple1(numpy.nan) -# else: -# thing = (i * data_max_value) / (num_squares - 1) -# data.InsertNextTuple1(thing) -# -# # Make a LookupTable -# lut = vtk.vtkLookupTable() -# lut.SetNumberOfColors(n_lut_colors) -# lut.Build() -# lut.SetTableRange(0, data_max_value) -# lut.SetNanColor(.1, .5, .99, 1.0) # <------ This color gets used -# for i in range(n_lut_colors): -# # Fill it with arbitrary colors, e.g. grayscale -# x = data_max_value*i/(n_lut_colors-1) -# lut.SetTableValue(i, x, x, x, 1.0) -# lut.SetNanColor(.99, .99, .1, 1.0) # <----- This color gets ignored! ...except by GetNanColor -# -# print(lut.GetNanColor()) # <-- Prints the color set by the last SetNanColor call above! -# -# chessboard.GetOutput().GetCellData().SetScalars(data) -# -# mapper = vtk.vtkPolyDataMapper() -# mapper.SetInputConnection(chessboard.GetOutputPort()) -# mapper.SetScalarRange(0, data_max_value) -# mapper.SetLookupTable(lut) -# mapper.Update() -# -# actor = vtk.vtkActor() -# actor.SetMapper(mapper) -# -# renderer = vtk.vtkRenderer() -# ren_win = vtk.vtkRenderWindow() -# ren_win.AddRenderer(renderer) -# renderer.SetBackground(vtk.vtkNamedColors().GetColor3d('MidnightBlue')) -# renderer.AddActor(actor) -# -# iren = vtk.vtkRenderWindowInteractor() - -# --- pyvtk -# """Read vtk-file stored previously with tovtk.""" -# p = pyvtk.VtkData(filename) -# xn = array(p.structure.points) -# dims = p.structure.dimensions -# try: -# N = eval(p.header.split(" ")[-1]) - - # --- Extract - # # Convert the center of the turbine coordinate in m to High-Resolution domains left most corner in (i,j) - # xe_index = int(origin_at_precusr[0]/10) - # ye_index = int(origin_at_precusr[1]/10) - # - # # Read the full domain from VTK - # reader = vtk.vtkStructuredPointsReader() - # reader.SetFileName(in_vtk) - # reader.Update() - # - # # Extract the High Resolution domain at same spacial spacing by specifying the (i,i+14),(j,j+14),(k,k+20) tuples - # extract = vtk.vtkExtractVOI() - # extract.SetInputConnection(reader.GetOutputPort()) - # extract.SetVOI(xe_index, xe_index+14, ye_index, ye_index+14, 0, 26) - # extract.SetSampleRate(1, 1, 1) - # extract.Update() - # - # # Write the extract as VTK - # points = extract.GetOutput() - # vec = points.GetPointData().GetVectors('Amb') - # - # with open(out_vtk, 'a') as the_file: - # the_file.write('# vtk DataFile Version 3.0\n') - # the_file.write('High\n') - # the_file.write('ASCII\n') - # the_file.write('DATASET STRUCTURED_POINTS\n') - # the_file.write('DIMENSIONS %d %d %d\n' % points.GetDimensions()) - # the_file.write('ORIGIN %f %f %f\n' % origin_at_stitch) - # the_file.write('SPACING %f %f %f\n' % points.GetSpacing()) - # the_file.write('POINT_DATA %d\n' % points.GetNumberOfPoints()) - # the_file.write('VECTORS Amb float\n') - # for i in range(points.GetNumberOfPoints()): - # the_file.write('%f %f %f\n' % vec.GetTuple(i) ) - - # --- Stitch - # reader = vtk.vtkStructuredPointsReader() - # reader.SetFileName(in_vtk) - # reader.Update() - # - # hAppend = vtk.vtkImageAppend() - # hAppend.SetAppendAxis(0) - # for i in range(nx): - # hAppend.AddInputData(reader.GetOutput()) - # hAppend.Update() - # - # vAppend = vtk.vtkImageAppend() - # vAppend.SetAppendAxis(1) - # for i in range(ny): - # vAppend.AddInputData(hAppend.GetOutput()) - # vAppend.Update() - # - # points = vAppend.GetOutput() - # vec = points.GetPointData().GetVectors('Amb') - # - # with open(out_vtk, 'a') as the_file: - # the_file.write('# vtk DataFile Version 3.0\n') - # the_file.write('Low\n') - # the_file.write('ASCII\n') - # the_file.write('DATASET STRUCTURED_POINTS\n') - # the_file.write('DIMENSIONS %d %d %d\n' % points.GetDimensions()) - # the_file.write('ORIGIN %f %f %f\n' % points.GetOrigin()) - # the_file.write('SPACING %f %f %f\n' % points.GetSpacing()) - # the_file.write('POINT_DATA %d\n' % points.GetNumberOfPoints()) - # the_file.write('VECTORS Amb float\n') - # for i in range(points.GetNumberOfPoints()): - # the_file.write('%f %f %f\n' % vec.GetTuple(i) ) - - - # - - -# --------------------------------------------------------------------------------} -# --- The code below is taken from meshio -# https://github.com/nschloe/meshio -# The MIT License (MIT) -# Copyright (c) 2015-2020 meshio developers -# --------------------------------------------------------------------------------{ -ReadError = BrokenFormatError -WriteError = BrokenFormatError - -def _vtk_to_meshio_order(vtk_type, numnodes, dtype=int): - # meshio uses the same node ordering as VTK for most cell types. However, for the - # linear wedge, the ordering of the gmsh Prism [1] is adopted since this is found in - # most codes (Abaqus, Ansys, Nastran,...). In the vtkWedge [2], the normal of the - # (0,1,2) triangle points outwards, while in gmsh this normal points inwards. - # [1] http://gmsh.info/doc/texinfo/gmsh.html#Node-ordering - # [2] https://vtk.org/doc/nightly/html/classvtkWedge.html - if vtk_type == 13: - return numpy.array([0, 2, 1, 3, 5, 4], dtype=dtype) - else: - return numpy.arange(0, numnodes, dtype=dtype) - -def _meshio_to_vtk_order(meshio_type, numnodes, dtype=int): - if meshio_type == "wedge": - return numpy.array([0, 2, 1, 3, 5, 4], dtype=dtype) - else: - return numpy.arange(0, numnodes, dtype=dtype) - -vtk_to_meshio_type = { - 0: "empty", - 1: "vertex", - # 2: 'poly_vertex', - 3: "line", - # 4: 'poly_line', - 5: "triangle", - # 6: 'triangle_strip', - 7: "polygon", - 8: "pixel", - 9: "quad", - 10: "tetra", - # 11: 'voxel', - 12: "hexahedron", - 13: "wedge", - 14: "pyramid", - 15: "penta_prism", - 16: "hexa_prism", - 21: "line3", - 22: "triangle6", - 23: "quad8", - 24: "tetra10", - 25: "hexahedron20", - 26: "wedge15", - 27: "pyramid13", - 28: "quad9", - 29: "hexahedron27", - 30: "quad6", - 31: "wedge12", - 32: "wedge18", - 33: "hexahedron24", - 34: "triangle7", - 35: "line4", - 42: "polyhedron", - # - # 60: VTK_HIGHER_ORDER_EDGE, - # 61: VTK_HIGHER_ORDER_TRIANGLE, - # 62: VTK_HIGHER_ORDER_QUAD, - # 63: VTK_HIGHER_ORDER_POLYGON, - # 64: VTK_HIGHER_ORDER_TETRAHEDRON, - # 65: VTK_HIGHER_ORDER_WEDGE, - # 66: VTK_HIGHER_ORDER_PYRAMID, - # 67: VTK_HIGHER_ORDER_HEXAHEDRON, - # Arbitrary order Lagrange elements - 68: "VTK_LAGRANGE_CURVE", - 69: "VTK_LAGRANGE_TRIANGLE", - 70: "VTK_LAGRANGE_QUADRILATERAL", - 71: "VTK_LAGRANGE_TETRAHEDRON", - 72: "VTK_LAGRANGE_HEXAHEDRON", - 73: "VTK_LAGRANGE_WEDGE", - 74: "VTK_LAGRANGE_PYRAMID", - # Arbitrary order Bezier elements - 75: "VTK_BEZIER_CURVE", - 76: "VTK_BEZIER_TRIANGLE", - 77: "VTK_BEZIER_QUADRILATERAL", - 78: "VTK_BEZIER_TETRAHEDRON", - 79: "VTK_BEZIER_HEXAHEDRON", - 80: "VTK_BEZIER_WEDGE", - 81: "VTK_BEZIER_PYRAMID", -} -meshio_to_vtk_type = {v: k for k, v in vtk_to_meshio_type.items()} - - -# --------------------------------------------------------------------------------} -# --- Mesh -# --------------------------------------------------------------------------------{ -class CellBlock(collections.namedtuple("CellBlock", ["type", "data"])): - def __repr__(self): - return "".format(self.type,len(self.data)) -# --------------------------------------------------------------------------------} -# --- File _vtk.py from meshio -# --------------------------------------------------------------------------------{ -vtk_type_to_numnodes = numpy.array( - [ - 0, # empty - 1, # vertex - -1, # poly_vertex - 2, # line - -1, # poly_line - 3, # triangle - -1, # triangle_strip - -1, # polygon - -1, # pixel - 4, # quad - 4, # tetra - -1, # voxel - 8, # hexahedron - 6, # wedge - 5, # pyramid - 10, # penta_prism - 12, # hexa_prism - -1, - -1, - -1, - -1, - 3, # line3 - 6, # triangle6 - 8, # quad8 - 10, # tetra10 - 20, # hexahedron20 - 15, # wedge15 - 13, # pyramid13 - 9, # quad9 - 27, # hexahedron27 - 6, # quad6 - 12, # wedge12 - 18, # wedge18 - 24, # hexahedron24 - 7, # triangle7 - 4, # line4 - ] -) - - -# These are all VTK data types. -# One sometimes finds 'vtktypeint64', but this is ill-formed. -vtk_to_numpy_dtype_name = { - "bit": "bool", - "unsigned_char": "uint8", - "char": "int8", - "unsigned_short": "uint16", - "short": "int16", - "unsigned_int": "uint32", - "int": "int32", - "unsigned_long": "uint64", - "long": "int64", - "float": "float32", - "double": "float64", - "vtktypeint32": "int32", # vtk DataFile Version 5.1 - "vtktypeint64": "int64", # vtk DataFile Version 5.1 - "vtkidtype": "int32", # may be either 32-bit or 64-bit (VTK_USE_64BIT_IDS) -} - -numpy_to_vtk_dtype = { - v: k for k, v in vtk_to_numpy_dtype_name.items() if "vtk" not in k -} - -# supported vtk dataset types -vtk_dataset_types = [ - "UNSTRUCTURED_GRID", - "STRUCTURED_POINTS", - "STRUCTURED_GRID", - "RECTILINEAR_GRID", -] -# additional infos per dataset type -vtk_dataset_infos = { - "UNSTRUCTURED_GRID": [], - "STRUCTURED_POINTS": [ - "DIMENSIONS", - "ORIGIN", - "SPACING", - "ASPECT_RATIO", # alternative for SPACING in version 1.0 and 2.0 - ], - "STRUCTURED_GRID": ["DIMENSIONS"], - "RECTILINEAR_GRID": [ - "DIMENSIONS", - "X_COORDINATES", - "Y_COORDINATES", - "Z_COORDINATES", - ], -} - -# all main sections in vtk -vtk_sections = [ - "METADATA", - "DATASET", - "POINTS", - "CELLS", - "CELL_TYPES", - "POINT_DATA", - "CELL_DATA", - "LOOKUP_TABLE", - "COLOR_SCALARS", -] - - - - - -def read(filename): - """Reads a VTK vtk file.""" - with open(filename, "rb") as f: - out = read_buffer(f) - return out - - -def read_buffer(f): - # initialize output data - info = VTKFile() - - # skip header and title - f.readline() - f.readline() - - data_type = f.readline().decode("utf-8").strip().upper() - if data_type not in ["ASCII", "BINARY"]: - raise WrongFormatError("Unknown VTK data type ",data_type) - info.is_ascii = data_type == "ASCII" - - while True: - line = f.readline().decode("utf-8") - if not line: - # EOF - break - - line = line.strip() - if len(line) == 0: - continue - - info.split = line.split() - info.section = info.split[0].upper() - - if info.section in vtk_sections: - _read_section(f, info) - else: - _read_subsection(f, info) - - _check_mesh(info) - cells, cell_data = translate_cells(info.c, info.ct, info.cell_data_raw) - - info.cells = cells - info.cell_data = cell_data - - return info - - -def _read_section(f, info): - if info.section == "METADATA": - _skip_meta(f) - - elif info.section == "DATASET": - info.active = "DATASET" - info.dataset["type"] = info.split[1].upper() - if info.dataset["type"] not in vtk_dataset_types: - raise BrokenFormatError( - "Only VTK '{}' supported (not {}).".format( - "', '".join(vtk_dataset_types), info.dataset["type"] - ) - ) - - elif info.section == "POINTS": - info.active = "POINTS" - info.num_points = int(info.split[1]) - data_type = info.split[2].lower() - info.points = _read_points(f, data_type, info.is_ascii, info.num_points) - - elif info.section == "CELLS": - info.active = "CELLS" - last_pos = f.tell() - try: - line = f.readline().decode("utf-8") - except UnicodeDecodeError: - line = "" - if "OFFSETS" in line: - # vtk DataFile Version 5.1 - appearing in Paraview 5.8.1 outputs - # No specification found for this file format. - # See the question on ParaView Discourse Forum: - # . - info.num_offsets = int(info.split[1]) - info.num_items = int(info.split[2]) - dtype = numpy.dtype(vtk_to_numpy_dtype_name[line.split()[1]]) - offsets = _read_cells(f, info.is_ascii, info.num_offsets, dtype) - line = f.readline().decode("utf-8") - assert "CONNECTIVITY" in line - dtype = numpy.dtype(vtk_to_numpy_dtype_name[line.split()[1]]) - connectivity = _read_cells(f, info.is_ascii, info.num_items, dtype) - info.c = (offsets, connectivity) - else: - f.seek(last_pos) - info.num_items = int(info.split[2]) - info.c = _read_cells(f, info.is_ascii, info.num_items) - - elif info.section == "CELL_TYPES": - info.active = "CELL_TYPES" - info.num_items = int(info.split[1]) - info.ct = _read_cell_types(f, info.is_ascii, info.num_items) - - elif info.section == "POINT_DATA": - info.active = "POINT_DATA" - info.num_items = int(info.split[1]) - - elif info.section == "CELL_DATA": - info.active = "CELL_DATA" - info.num_items = int(info.split[1]) - - elif info.section == "LOOKUP_TABLE": - info.num_items = int(info.split[2]) - numpy.fromfile(f, count=info.num_items * 4, sep=" ", dtype=float) - # rgba = data.reshape((info.num_items, 4)) - - elif info.section == "COLOR_SCALARS": - nValues = int(info.split[2]) - # re-use num_items from active POINT/CELL_DATA - num_items = info.num_items - dtype = numpy.ubyte - if info.is_ascii: - dtype = float - numpy.fromfile(f, count=num_items * nValues, dtype=dtype) - - -def _read_subsection(f, info): - if info.active == "POINT_DATA": - d = info.point_data - elif info.active == "CELL_DATA": - d = info.cell_data_raw - elif info.active == "DATASET": - d = info.dataset - else: - d = info.field_data - - if info.section in vtk_dataset_infos[info.dataset["type"]]: - if info.section[1:] == "_COORDINATES": - info.num_points = int(info.split[1]) - data_type = info.split[2].lower() - d[info.section] = _read_coords(f, data_type, info.is_ascii, info.num_points) - else: - if info.section == "DIMENSIONS": - d[info.section] = list(map(int, info.split[1:])) - else: - d[info.section] = list(map(float, info.split[1:])) - if len(d[info.section]) != 3: - raise BrokenFormatError( - "Wrong number of info in section '{}'. Need 3, got {}.".format( - info.section, len(d[info.section]) - ) - ) - elif info.section == "SCALARS": - d.update(_read_scalar_field(f, info.num_items, info.split, info.is_ascii)) - elif info.section == "VECTORS": - d.update(_read_field(f, info.num_items, info.split, [3], info.is_ascii)) - elif info.section == "TENSORS": - d.update(_read_field(f, info.num_items, info.split, [3, 3], info.is_ascii)) - elif info.section == "FIELD": - d.update(_read_fields(f, int(info.split[2]), info.is_ascii)) - else: - raise WrongFormatError("Unknown section ",info.section) - - -def _check_mesh(info): - if info.dataset["type"] == "UNSTRUCTURED_GRID": - if info.c is None: - raise ReadError("Required section CELLS not found.") - if info.ct is None: - raise ReadError("Required section CELL_TYPES not found.") - - elif info.dataset["type"] == "STRUCTURED_POINTS": - dim = info.dataset["DIMENSIONS"] - ori = info.dataset["ORIGIN"] - spa = ( - info.dataset["SPACING"] - if "SPACING" in info.dataset - else info.dataset["ASPECT_RATIO"] - ) - axis = [ - numpy.linspace(ori[i], ori[i] + (dim[i] - 1.0) * spa[i], dim[i]) - for i in range(3) - ] - info.xp_grid=axis[0] - info.yp_grid=axis[1] - info.zp_grid=axis[2] - - info.points = _generate_points(axis) - info.c, info.ct = _generate_cells(dim=info.dataset["DIMENSIONS"]) - - elif info.dataset["type"] == "RECTILINEAR_GRID": - axis = [ - info.dataset["X_COORDINATES"], - info.dataset["Y_COORDINATES"], - info.dataset["Z_COORDINATES"], - ] - info.xp_grid=axis[0] - info.yp_grid=axis[1] - info.zp_grid=axis[2] - - info.points = _generate_points(axis) - info.c, info.ct = _generate_cells(dim=info.dataset["DIMENSIONS"]) - - elif info.dataset["type"] == "STRUCTURED_GRID": - info.c, info.ct = _generate_cells(dim=info.dataset["DIMENSIONS"]) - # TODO x_grid, y_grid, z_grid points - - - -def _generate_cells(dim): - ele_dim = [d - 1 for d in dim if d > 1] - ele_no = numpy.prod(ele_dim, dtype=int) - spatial_dim = len(ele_dim) - - if spatial_dim == 1: - # cells are lines in 1D - cells = numpy.empty((ele_no, 3), dtype=int) - cells[:, 0] = 2 - cells[:, 1] = numpy.arange(ele_no, dtype=int) - cells[:, 2] = cells[:, 1] + 1 - cell_types = numpy.full(ele_no, 3, dtype=int) - - elif spatial_dim == 2: - # cells are quad in 2D - cells = numpy.empty((ele_no, 5), dtype=int) - cells[:, 0] = 4 - cells[:, 1] = numpy.arange(0, ele_no, dtype=int) - cells[:, 1] += numpy.arange(0, ele_no, dtype=int) // ele_dim[0] - cells[:, 2] = cells[:, 1] + 1 - cells[:, 3] = cells[:, 1] + 2 + ele_dim[0] - cells[:, 4] = cells[:, 3] - 1 - cell_types = numpy.full(ele_no, 9, dtype=int) - else: - # cells are hex in 3D - cells = numpy.empty((ele_no, 9), dtype=int) - cells[:, 0] = 8 - cells[:, 1] = numpy.arange(ele_no) - cells[:, 1] += (ele_dim[0] + ele_dim[1] + 1) * ( - numpy.arange(ele_no) // (ele_dim[0] * ele_dim[1]) - ) - cells[:, 1] += (numpy.arange(ele_no) % (ele_dim[0] * ele_dim[1])) // ele_dim[0] - cells[:, 2] = cells[:, 1] + 1 - cells[:, 3] = cells[:, 1] + 2 + ele_dim[0] - cells[:, 4] = cells[:, 3] - 1 - cells[:, 5] = cells[:, 1] + (1 + ele_dim[0]) * (1 + ele_dim[1]) - cells[:, 6] = cells[:, 5] + 1 - cells[:, 7] = cells[:, 5] + 2 + ele_dim[0] - cells[:, 8] = cells[:, 7] - 1 - cell_types = numpy.full(ele_no, 12, dtype=int) - - return cells.reshape(-1), cell_types - -def _generate_points(axis): - x_dim = len(axis[0]) - y_dim = len(axis[1]) - z_dim = len(axis[2]) - pnt_no = x_dim * y_dim * z_dim - x_id, y_id, z_id = numpy.mgrid[0:x_dim, 0:y_dim, 0:z_dim] - points = numpy.empty((pnt_no, 3), dtype=axis[0].dtype) - # VTK sorts points and cells in Fortran order - points[:, 0] = axis[0][x_id.reshape(-1, order="F")] - points[:, 1] = axis[1][y_id.reshape(-1, order="F")] - points[:, 2] = axis[2][z_id.reshape(-1, order="F")] - return points - - -def _read_coords(f, data_type, is_ascii, num_points): - dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) - if is_ascii: - coords = numpy.fromfile(f, count=num_points, sep=" ", dtype=dtype) - else: - # Binary data is big endian, see - # . - dtype = dtype.newbyteorder(">") - coords = numpy.fromfile(f, count=num_points, dtype=dtype) - line = f.readline().decode("utf-8") - if line != "\n": - raise ReadError() - return coords - - -def _read_points(f, data_type, is_ascii, num_points): - dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) - if is_ascii: - points = numpy.fromfile(f, count=num_points * 3, sep=" ", dtype=dtype) - else: - # Binary data is big endian, see - # . - dtype = dtype.newbyteorder(">") - points = numpy.fromfile(f, count=num_points * 3, dtype=dtype) - line = f.readline().decode("utf-8") - if line != "\n": - raise ReadError() - return points.reshape((num_points, 3)) - - -def _read_cells(f, is_ascii, num_items, dtype=numpy.dtype("int32")): - if is_ascii: - c = numpy.fromfile(f, count=num_items, sep=" ", dtype=dtype) - else: - dtype = dtype.newbyteorder(">") - c = numpy.fromfile(f, count=num_items, dtype=dtype) - line = f.readline().decode("utf-8") - if line != "\n": - raise ReadError() - return c - - -def _read_cell_types(f, is_ascii, num_items): - if is_ascii: - ct = numpy.fromfile(f, count=int(num_items), sep=" ", dtype=int) - else: - # binary - ct = numpy.fromfile(f, count=int(num_items), dtype=">i4") - line = f.readline().decode("utf-8") - # Sometimes, there's no newline at the end - if line.strip() != "": - raise ReadError() - return ct - - -def _read_scalar_field(f, num_data, split, is_ascii): - data_name = split[1] - data_type = split[2].lower() - try: - num_comp = int(split[3]) - except IndexError: - num_comp = 1 - - # The standard says: - # > The parameter numComp must range between (1,4) inclusive; [...] - if not (0 < num_comp < 5): - raise ReadError("The parameter numComp must range between (1,4) inclusive") - - dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) - lt, _ = f.readline().decode("utf-8").split() - if lt.upper() != "LOOKUP_TABLE": - raise ReadError() - - if is_ascii: - data = numpy.fromfile(f, count=num_data * num_comp, sep=" ", dtype=dtype) - else: - # Binary data is big endian, see - # . - dtype = dtype.newbyteorder(">") - data = numpy.fromfile(f, count=num_data * num_comp, dtype=dtype) - line = f.readline().decode("utf-8") - if line != "\n": - raise ReadError() - - data = data.reshape(-1, num_comp) - return {data_name: data} - - -def _read_field(f, num_data, split, shape, is_ascii): - data_name = split[1] - data_type = split[2].lower() - - dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) - # prod() - # - k = reduce((lambda x, y: x * y), shape) - - if is_ascii: - data = numpy.fromfile(f, count=k * num_data, sep=" ", dtype=dtype) - else: - # Binary data is big endian, see - # . - dtype = dtype.newbyteorder(">") - data = numpy.fromfile(f, count=k * num_data, dtype=dtype) - line = f.readline().decode("utf-8") - if line != "\n": - raise ReadError() - - data = data.reshape(-1, *shape) - return {data_name: data} - - -def _read_fields(f, num_fields, is_ascii): - data = {} - for _ in range(num_fields): - line = f.readline().decode("utf-8").split() - if line[0] == "METADATA": - _skip_meta(f) - name, shape0, shape1, data_type = f.readline().decode("utf-8").split() - else: - name, shape0, shape1, data_type = line - - shape0 = int(shape0) - shape1 = int(shape1) - dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type.lower()]) - - if is_ascii: - dat = numpy.fromfile(f, count=shape0 * shape1, sep=" ", dtype=dtype) - else: - # Binary data is big endian, see - # . - dtype = dtype.newbyteorder(">") - dat = numpy.fromfile(f, count=shape0 * shape1, dtype=dtype) - line = f.readline().decode("utf-8") - if line != "\n": - raise ReadError() - - if shape0 != 1: - dat = dat.reshape((shape1, shape0)) - - data[name] = dat - - return data - - -def _skip_meta(f): - # skip possible metadata - # https://vtk.org/doc/nightly/html/IOLegacyInformationFormat.html - while True: - line = f.readline().decode("utf-8").strip() - if not line: - # end of metadata is a blank line - break - - -def translate_cells(data, types, cell_data_raw): - # https://www.vtk.org/doc/nightly/html/vtkCellType_8h_source.html - # Translate it into the cells array. - # `data` is a one-dimensional vector with - # (num_points0, p0, p1, ... ,pk, numpoints1, p10, p11, ..., p1k, ... - # or a tuple with (offsets, connectivity) - has_polygon = numpy.any(types == meshio_to_vtk_type["polygon"]) - - cells = [] - cell_data = {} - if has_polygon: - numnodes = numpy.empty(len(types), dtype=int) - # If some polygons are in the VTK file, loop over the cells - numcells = len(types) - offsets = numpy.empty(len(types), dtype=int) - offsets[0] = 0 - for idx in range(numcells - 1): - numnodes[idx] = data[offsets[idx]] - offsets[idx + 1] = offsets[idx] + numnodes[idx] + 1 - - idx = numcells - 1 - numnodes[idx] = data[offsets[idx]] - if not numpy.all(numnodes == data[offsets]): - raise ReadError() - - # TODO: cell_data - for idx, vtk_cell_type in enumerate(types): - start = offsets[idx] + 1 - cell_idx = start + _vtk_to_meshio_order( - vtk_cell_type, numnodes[idx], offsets.dtype - ) - cell = data[cell_idx] - - cell_type = vtk_to_meshio_type[vtk_cell_type] - if cell_type == "polygon": - cell_type += str(data[offsets[idx]]) - - if len(cells) > 0 and cells[-1].type == cell_type: - cells[-1].data.append(cell) - else: - cells.append(CellBlock(cell_type, [cell])) - - # convert data to numpy arrays - for k, c in enumerate(cells): - cells[k] = CellBlock(c.type, numpy.array(c.data)) - else: - # Deduct offsets from the cell types. This is much faster than manually going - # through the data array. Slight disadvantage: This doesn't work for cells with - # a custom number of points. - numnodes = vtk_type_to_numnodes[types] - if not numpy.all(numnodes > 0): - raise ReadError("File contains cells that meshio cannot handle.") - if isinstance(data, tuple): - offsets, conn = data - if not numpy.all(numnodes == numpy.diff(offsets)): - raise ReadError() - idx0 = 0 - else: - offsets = numpy.cumsum(numnodes + 1) - (numnodes + 1) - - if not numpy.all(numnodes == data[offsets]): - raise ReadError() - idx0 = 1 - conn = data - - b = numpy.concatenate( - [[0], numpy.where(types[:-1] != types[1:])[0] + 1, [len(types)]] - ) - for start, end in zip(b[:-1], b[1:]): - meshio_type = vtk_to_meshio_type[types[start]] - n = numnodes[start] - cell_idx = idx0 + _vtk_to_meshio_order(types[start], n, dtype=offsets.dtype) - indices = numpy.add.outer(offsets[start:end], cell_idx) - cells.append(CellBlock(meshio_type, conn[indices])) - for name, d in cell_data_raw.items(): - if name not in cell_data: - cell_data[name] = [] - cell_data[name].append(d[start:end]) - - return cells, cell_data - - -def write(filename, mesh, binary=True): - def pad(array): - return numpy.pad(array, ((0, 0), (0, 1)), "constant") - - if mesh.points.shape[1] == 2: - points = pad(mesh.points) - else: - points = mesh.points - - if mesh.point_data: - for name, values in mesh.point_data.items(): - if len(values.shape) == 2 and values.shape[1] == 2: - mesh.point_data[name] = pad(values) - - for name, data in mesh.cell_data.items(): - for k, values in enumerate(data): - if len(values.shape) == 2 and values.shape[1] == 2: - data[k] = pad(data[k]) - - with open(filename, "wb") as f: - f.write(b"# vtk DataFile Version 4.2\n") - f.write("written \n".encode("utf-8")) - f.write(("BINARY\n" if binary else "ASCII\n").encode("utf-8")) - f.write(b"DATASET UNSTRUCTURED_GRID\n") - - # write points and cells - _write_points(f, points, binary) - _write_cells(f, mesh.cells, binary) - - # write point data - if mesh.point_data: - num_points = mesh.points.shape[0] - f.write("POINT_DATA {}\n".format(num_points).encode("utf-8")) - _write_field_data(f, mesh.point_data, binary) - - # write cell data - if mesh.cell_data: - total_num_cells = sum(len(c.data) for c in mesh.cells) - f.write("CELL_DATA {}\n".format(total_num_cells).encode("utf-8")) - _write_field_data(f, mesh.cell_data, binary) - - -def _write_points(f, points, binary): - f.write( - "POINTS {} {}\n".format( - len(points), numpy_to_vtk_dtype[points.dtype.name] - ).encode("utf-8") - ) - - if binary: - # Binary data must be big endian, see - # . - # if points.dtype.byteorder == "<" or ( - # points.dtype.byteorder == "=" and sys.byteorder == "little" - # ): - points.astype(points.dtype.newbyteorder(">")).tofile(f, sep="") - else: - # ascii - points.tofile(f, sep=" ") - f.write(b"\n") - - -def _write_cells(f, cells, binary): - total_num_cells = sum([len(c.data) for c in cells]) - total_num_idx = sum([c.data.size for c in cells]) - # For each cell, the number of nodes is stored - total_num_idx += total_num_cells - f.write("CELLS {} {}\n".format(total_num_cells,total_num_idx).encode("utf-8")) - if binary: - for c in cells: - n = c.data.shape[1] - cell_idx = _meshio_to_vtk_order(c.type, n) - dtype = numpy.dtype(">i4") - # One must force endianness here: - # - numpy.column_stack( - [ - numpy.full(c.data.shape[0], n, dtype=dtype), - c.data[:, cell_idx].astype(dtype), - ], - ).astype(dtype).tofile(f, sep="") - f.write(b"\n") - else: - # ascii - for c in cells: - n = c.data.shape[1] - cell_idx = _meshio_to_vtk_order(c.type, n) - # prepend a column with the value n - numpy.column_stack( - [ - numpy.full(c.data.shape[0], n, dtype=c.data.dtype), - c.data[:, cell_idx], - ] - ).tofile(f, sep="\n") - f.write(b"\n") - - # write cell types - f.write("CELL_TYPES {}\n".format(total_num_cells).encode("utf-8")) - if binary: - for c in cells: - key_ = c.type[:7] if c.type[:7] == "polygon" else c.type - vtk_type = meshio_to_vtk_type[key_] - numpy.full(len(c.data), vtk_type, dtype=numpy.dtype(">i4")).tofile( - f, sep="" - ) - f.write(b"\n") - else: - # ascii - for c in cells: - key_ = c.type[:7] if c.type[:7] == "polygon" else c.type - numpy.full(len(c.data), meshio_to_vtk_type[key_]).tofile(f, sep="\n") - f.write(b"\n") - - -def _write_field_data(f, data, binary): - f.write(("FIELD FieldData {}\n".format(len(data))).encode("utf-8")) - for name, values in data.items(): - if isinstance(values, list): - values = numpy.concatenate(values) - if len(values.shape) == 1: - num_tuples = values.shape[0] - num_components = 1 - else: - num_tuples = values.shape[0] - num_components = values.shape[1] - - if " " in name: - raise WriteError("VTK doesn't support spaces in field names", name) - - f.write( - ( - "{} {} {} {}\n".format( - name, - num_components, - num_tuples, - numpy_to_vtk_dtype[values.dtype.name], - ) - ).encode("utf-8") - ) - if binary: - values.astype(values.dtype.newbyteorder(">")).tofile(f, sep="") - else: - # ascii - values.tofile(f, sep=" ") - # numpy.savetxt(f, points) - f.write(b"\n") - - - -if __name__=='__main__': - #plane=VTKFile('tests/_TODO/FastFarm.Low.DisXY1.t1200.vtk') - #plane=VTKFile('tests/_TODO/FastFarm.Low.DisXZ1.t1200.vtk') - plane=VTKFile('tests/_TODO/FastFarm.Low.DisXY1.t0_fake.vtk') - print(plane.points) - #plane=VTKFile('tests/_TODO/Main_NM80_OF24_vc.FVW_Hub.AllSeg.000000130.vtk') - print(plane) -# print(plane.points) -# print(plane.cells) -# print(plane.cell_data_raw) -# print(plane.cell_data) -# print('x_grid',plane.x_grid) -# print('PointData',plane.point_data.keys()) -# print('PointData',plane.point_data_grid.keys()) -# print('PointData',plane.points.shape) -# print(plane.dataset) -# if len(plane.z_grid)==1: -# print('PointData',plane.point_data['DisXY'].shape) -# D=plane.point_data['DisXY'] -# print(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1]) -# -# DD= D.reshape(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1], order='F') -# print(DD.shape) -# import matplotlib.pyplot as plt -# plt.contourf(plane.x_grid, plane.y_grid, DD[:,:,0,0].T) -# plt.show() -# elif len(plane.y_grid)==1: -# -# print('PointData',plane.point_data['DisXZ'].shape) -# D=plane.point_data['DisXZ'] -# print(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1]) -# -# DD= D.reshape(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1], order='F') -# print(DD.shape) -# import matplotlib.pyplot as plt -# #plt.contourf(plane.x_grid, plane.z_grid, DD[:,0,:,1].T, antialiased=False) -# plt.pcolor(plane.x_grid, plane.z_grid, DD[:,0,:,1].T) -# plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py deleted file mode 100644 index 186ab8bdb5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py +++ /dev/null @@ -1,343 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Author: - Bjarne S. Kallesoee - - -Description: - Reads all HAWC2 output data formats, HAWC2 ascii, HAWC2 binary and FLEX - -call ex.: - # creat data file object, call without extension, but with parth - file = ReadHawc2("HAWC2ex/tests") - # if called with ReadOnly = 1 as - file = ReadHawc2("HAWC2ex/tests",ReadOnly=1) - # no channels a stored in memory, otherwise read channels are stored for reuse - - # channels are called by a list - file([0,2,1,1]) => channels 1,3,2,2 - # if empty all channels are returned - file() => all channels as 1,2,3,... - file.t => time vector - -1. version: 19/4-2011 -2. version: 5/11-2015 fixed columns to get description right, fixed time vector (mmpe@dtu.dk) - -Need to be done: - * add error handling for allmost every thing - -""" -import numpy as np -import os - -#from wetb import gtsdf - -# FIXME: numpy doesn't like io.open binary fid in PY27, why is that? As a hack -# workaround, use opent for PY23 compatibility when handling text files, -# and default open for binary - -################################################################################ -################################################################################ -################################################################################ -# Read HAWC2 class -################################################################################ -class ReadHawc2(object): - """ - """ -################################################################################ -# read *.sel file - def _ReadSelFile(self): - """ - Some title - ========== - - Using docstrings formatted according to the reStructuredText specs - can be used for automated documentation generation with for instance - Sphinx: http://sphinx.pocoo.org/. - - Parameters - ---------- - signal : ndarray - some description - - Returns - ------- - output : int - describe variable - """ - - # read *.sel hawc2 output file for result info - if self.FileName.lower().endswith('.sel'): - self.FileName = self.FileName[:-4] - fid = open(self.FileName + '.sel', 'r') - Lines = fid.readlines() - fid.close() - if Lines[0].lower().find('bhawc')>=0: - # --- Find line with scan info - iLine=0 - for i in np.arange(5,10): - if Lines[i].lower().find('scans')>=0: - iLine=i+1 - if iLine==0: - raise Exception('Cannot find the keyword "scans"') - temp = Lines[iLine].split() - self.NrSc = int(temp[0]) - self.NrCh = int(temp[1]) - self.Time = float(temp[2]) - self.Freq = self.NrSc / self.Time - self.t = np.linspace(0, self.Time, self.NrSc + 1)[1:] - # --- Find line with channel info - iLine=0 - for i in np.arange(5,13): - if Lines[i].lower().find('channel')>=0: - iLine=i+1 - if iLine==0: - raise Exception('Cannot find the keyword "Channel"') - - # reads channel info (name, unit and description) - Name = []; Unit = []; Description = []; - for i in range(0, self.NrCh+1): - if (i+iLine)>=len(Lines): - break - line = Lines[i + iLine].strip() - if len(line)==0: - continue - # --- removing number and unit - sp=[sp.strip() for sp in line.split() if len(sp.strip())>0] - num = sp[0] - iNum = line.find(num) - line = line[iNum+len(num)+1:] - unit = sp[-1] - iUnit = line.find(unit) - line = line[:iUnit] - # --- Splitting to find label and description - sp=[sp.strip() for sp in line.split('\t') if len(sp.strip())>0] - if len(sp)!=2: - for nSpaces in np.arange(2,15): - sp=[sp.strip() for sp in line.split(' '*nSpaces) if len(sp.strip())>0] - if len(sp)==2: - break - if len(sp)!=2: - raise Exception('Dont know how to split the input of the sel file into 4 columns') - - Unit.append(unit) - Description.append(sp[0]) - Name.append(sp[1]) - - self.ChInfo = [Name, Unit, Description] - self.FileFormat = 'BHAWC_ASCII' - else: - - # findes general result info (number of scans, number of channels, - # simulation time and file format) - temp = Lines[8].split() - self.NrSc = int(temp[0]) - self.NrCh = int(temp[1]) - self.Time = float(temp[2]) - self.Freq = self.NrSc / self.Time - self.t = np.linspace(0, self.Time, self.NrSc + 1)[1:] - Format = temp[3] - # reads channel info (name, unit and description) - Name = []; Unit = []; Description = []; - for i in range(0, self.NrCh): - temp = str(Lines[i + 12][12:43]); Name.append(temp.strip()) - temp = str(Lines[i + 12][43:54]); Unit.append(temp.strip()) - temp = str(Lines[i + 12][54:-1]); Description.append(temp.strip()) - self.ChInfo = [Name, Unit, Description] - # if binary file format, scaling factors are read - if Format.lower() == 'binary': - self.ScaleFactor = np.zeros(self.NrCh) - self.FileFormat = 'HAWC2_BINARY' - for i in range(0, self.NrCh): - self.ScaleFactor[i] = float(Lines[i + 12 + self.NrCh + 2]) - else: - self.FileFormat = 'HAWC2_ASCII' -################################################################################ -# read sensor file for FLEX format - def _ReadSensorFile(self): - # read sensor file used if results are saved in FLEX format - DirName = os.path.dirname(self.FileName) - try: - fid = opent(DirName + r"\sensor ", 'r') - except IOError: - print("can't finde sensor file for FLEX format") - return - Lines = fid.readlines() - fid.close() - # reads channel info (name, unit and description) - self.NrCh = 0 - Name = [] - Unit = [] - Description = [] - for i in range(2, len(Lines)): - temp = Lines[i] - if not temp.strip(): - break - self.NrCh += 1 - temp = str(Lines[i][38:45]) - Unit.append(temp.strip()) - temp = str(Lines[i][45:53]) - Name.append(temp.strip()) - temp = str(Lines[i][53:]) - Description.append(temp.strip()) - self.ChInfo = [Name, Unit, Description] - # read general info from *.int file - fid = open(self.FileName, 'rb') - fid.seek(4 * 19) - if not np.fromfile(fid, 'int32', 1) == self.NrCh: - print("number of sensors in sensor file and data file are not consisten") - fid.seek(4 * (self.NrCh) + 4, 1) - self.Version = np.fromfile(fid, 'int32',1)[0] - time_start, time_step = np.fromfile(fid, 'f', 2) - self.Freq = 1 / time_step - self.ScaleFactor = np.fromfile(fid, 'f', self.NrCh) - fid.seek(2 * 4 * self.NrCh + 48 * 2) - self.NrSc = int(len(np.fromfile(fid, 'int16')) / self.NrCh) - self.Time = self.NrSc * time_step - self.t = np.arange(0, self.Time, time_step) + time_start - fid.close() -################################################################################ -# init function, load channel and other general result file info - def __init__(self, FileName, ReadOnly=0): - self.FileName = FileName - self.ReadOnly = ReadOnly - self.Iknown = [] # to keep track of what has been read all ready - self.Data = np.zeros(0) - if FileName.lower().endswith('.sel') or os.path.isfile(FileName + ".sel"): - self._ReadSelFile() - elif FileName.lower().endswith('.dat') and os.path.isfile(os.path.splitext(FileName)[0] + ".sel"): - self.FileName = os.path.splitext(FileName)[0] - self._ReadSelFile() - elif FileName.lower().endswith('.int') or FileName.lower().endswith('.res'): - self.FileFormat = 'FLEX' - self._ReadSensorFile() - elif os.path.isfile(self.FileName + ".int"): - self.FileName = self.FileName + ".int" - self.FileFormat = 'FLEX' - self._ReadSensorFile() - elif os.path.isfile(self.FileName + ".res"): - self.FileName = self.FileName + ".res" - self.FileFormat = 'FLEX' - self._ReadSensorFile() - elif FileName.lower().endswith('.hdf5') or os.path.isfile(self.FileName + ".hdf5"): - self.FileFormat = 'GTSDF' - self.ReadGtsdf() - else: - raise Exception("unknown file: " + FileName) -################################################################################ -# Read results in binary format - def ReadBinary(self, ChVec=None): - ChVec = [] if ChVec is None else ChVec - if not ChVec: - ChVec = range(0, self.NrCh) - with open(self.FileName + '.dat', 'rb') as fid: - data = np.zeros((self.NrSc, len(ChVec))) - j = 0 - for i in ChVec: - fid.seek(i * self.NrSc * 2, 0) - data[:, j] = np.fromfile(fid, 'int16', self.NrSc) * self.ScaleFactor[i] - j += 1 - return data -################################################################################ -# Read results in ASCII format - def ReadAscii(self, ChVec=None): - ChVec = [] if ChVec is None else ChVec - if not ChVec: - ChVec = range(0, self.NrCh) - temp = np.loadtxt(self.FileName + '.dat', usecols=ChVec) - return temp.reshape((self.NrSc, len(ChVec))) -################################################################################ -# Read results in FLEX format - def ReadFLEX(self, ChVec=None): - ChVec = [] if ChVec is None else ChVec - if not ChVec: - ChVec = range(1, self.NrCh) - fid = open(self.FileName, 'rb') - fid.seek(2 * 4 * self.NrCh + 48 * 2) - temp = np.fromfile(fid, 'int16') - if self.Version==3: - temp = temp.reshape(self.NrCh, self.NrSc).transpose() - else: - temp = temp.reshape(self.NrSc, self.NrCh) - fid.close() - return np.dot(temp[:, ChVec], np.diag(self.ScaleFactor[ChVec])) -################################################################################ -# Read results in GTSD format - def ReadGtsdf(self): - raise NotImplementedError - #self.t, data, info = gtsdf.load(self.FileName + '.hdf5') - #self.Time = self.t - #self.ChInfo = [['Time'] + info['attribute_names'], - # ['s'] + info['attribute_units'], - # ['Time'] + info['attribute_descriptions']] - #self.NrCh = data.shape[1] + 1 - #self.NrSc = data.shape[0] - #self.Freq = self.NrSc / self.Time - #self.FileFormat = 'GTSDF' - #self.gtsdf_description = info['description'] - #data = np.hstack([self.Time[:,np.newaxis], data]) - #return data -################################################################################ -# One stop call for reading all data formats - def ReadAll(self, ChVec=None): - ChVec = [] if ChVec is None else ChVec - if not ChVec and not self.FileFormat == 'GTSDF': - ChVec = range(0, self.NrCh) - if self.FileFormat == 'HAWC2_BINARY': - return self.ReadBinary(ChVec) - elif self.FileFormat == 'HAWC2_ASCII' or self.FileFormat == 'BHAWC_ASCII': - return self.ReadAscii(ChVec) - elif self.FileFormat == 'GTSDF': - return self.ReadGtsdf() - elif self.FileFormat == 'FLEX': - return self.ReadFLEX(ChVec) - else: - raise Exception('Unknown file format {} for hawc2 out file'.format(self.FileFormat)) - -################################################################################ -# Main read data call, read, save and sort data - def __call__(self, ChVec=None): - ChVec = [] if ChVec is None else ChVec - if not ChVec: - ChVec = range(0, self.NrCh) - elif max(ChVec) >= self.NrCh: - print("to high channel number") - return - # if ReadOnly, read data but no storeing in memory - if self.ReadOnly: - return self.ReadAll(ChVec) - # if not ReadOnly, sort in known and new channels, read new channels - # and return all requested channels - else: - # sort into known channels and channels to be read - I1 = [] - I2 = [] # I1=Channel mapping, I2=Channels to be read - for i in ChVec: - try: - I1.append(self.Iknown.index(i)) - except: - self.Iknown.append(i) - I2.append(i) - I1.append(len(I1)) - # read new channels - if I2: - temp = self.ReadAll(I2) - # add new channels to Data - if self.Data.any(): - self.Data = np.append(self.Data, temp, axis=1) - # if first call, so Daata is empty - else: - self.Data = temp - return self.Data[:, tuple(I1)] - - -################################################################################ -################################################################################ -################################################################################ -# write HAWC2 class, to be implemented -################################################################################ - -if __name__ == '__main__': - res_file = ReadHawc2('structure_wind') - results = res_file.ReadAscii() - channelinfo = res_file.ChInfo diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py deleted file mode 100644 index f58b7bc5cf..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# d = None -# d = dir() -# -# from .htc_file import HTCFile -# from .log_file import LogFile -# from .ae_file import AEFile -# from .at_time_file import AtTimeFile -# from .pc_file import PCFile -# from . import shear_file -# from .st_file import StFile -# -# __all__ = sorted([m for m in set(dir()) - set(d)]) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py deleted file mode 100644 index 2521d47a82..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py +++ /dev/null @@ -1,138 +0,0 @@ -import os -import numpy as np - - -class AEFile(object): - - """Read and write the HAWC2 AE (aerodynamic blade layout) file - - examples - -------- - >>> aefile = AEFile(r"tests/test_files/NREL_5MW_ae.txt") - >>> aefile.thickness(36) # Interpolated thickness at radius 36 - 23.78048780487805 - >>> aefile.chord(36) # Interpolated chord at radius 36 - 3.673 - >>> aefile.pc_set_nr(36) # pc set number at radius 36 - 1 - >>> ae= AEFile() - ae.add_set(radius=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], - chord=[1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1], - thickness=[100.0, 100.0, 90.0, 80.0, 70.0, 60.0, 50.0, 40.0, 30.0, 20.0, 10.0], - pc_set_id=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]) - >>> str(ae) - 1 r[m] Chord[m] T/C[%] Set no. - 1 11 - 0.00000000000000000e+00 1.10000000000000009e+00 1.00000000000000000e+02 1 - 1.00000000000000006e-01 1.00000000000000000e+00 1.00000000000000000e+02 1 - 2.00000000000000011e-01 9.00000000000000022e-01 9.00000000000000000e+01 1 - 2.99999999999999989e-01 8.00000000000000044e-01 8.00000000000000000e+01 1 - 4.00000000000000022e-01 6.99999999999999956e-01 7.00000000000000000e+01 1 - 5.00000000000000000e-01 5.99999999999999978e-01 6.00000000000000000e+01 1 - 5.99999999999999978e-01 5.00000000000000000e-01 5.00000000000000000e+01 1 - 6.99999999999999956e-01 4.00000000000000022e-01 4.00000000000000000e+01 1 - 8.00000000000000044e-01 2.99999999999999989e-01 3.00000000000000000e+01 1 - 9.00000000000000022e-01 2.00000000000000011e-01 2.00000000000000000e+01 1 - 1.00000000000000000e+00 1.00000000000000006e-01 1.00000000000000000e+01 1 - """ - - cols = ['radius', 'chord', 'relative_thickness', 'setnr'] - - def __init__(self, filename=None): - self.ae_sets = {} - if filename is not None: - self._read_file(filename) - - def _value(self, radius, column, set_nr=1): - ae_data = self.ae_sets[set_nr] - if radius is None: - return ae_data[:, column] - else: - return np.interp(radius, ae_data[:, 0], ae_data[:, column]) - - def chord(self, radius=None, set_nr=1): - return self._value(radius, 1, set_nr) - - def thickness(self, radius=None, set_nr=1): - return self._value(radius, 2, set_nr) - - def radius_ae(self, radius=None, set_nr=1): - radii = self.ae_sets[set_nr][:, 0] - if radius: - return radii[np.argmin(np.abs(radii - radius))] - else: - return radii - - def pc_set_nr(self, radius, set_nr=1): - ae_data = self.ae_sets[set_nr] - index = np.searchsorted(ae_data[:, 0], radius) - index = max(1, index) - # --- Emmanuel's addition - maxRad = np.max(ae_data[:,0]) - index2 = np.argmin(np.abs(ae_data[:, 0]-radius)) - if abs(ae_data[index2,0]-radius)<1e-4*maxRad: - # We are very close to an ae location, we use this set - return ae_data[index2, 3] - # Otherwise we look at index before or after - setnrs = ae_data[index - 1:index + 1, 3] - if setnrs[0] != setnrs[-1]: - print('[WARN] AE file, at radius {}, should return a set between {}. Using first one.'.format(radius,setnrs)) - return setnrs[0] - - def add_set(self, radius, chord, thickness, pc_set_id, set_id=None): - '''This method will add another set to the ae data''' - if set_id is None: - set_id = 1 - while set_id in self.ae_sets.keys(): - set_id += 1 - self.ae_sets[set_id] = np.array([radius, chord, thickness, pc_set_id]).T - return set_id - - def __str__(self): - '''This method will create a string that is formatted like an ae file with the data in this class''' - n_sets = len(self.ae_sets) - retval = str(n_sets) + ' r[m] Chord[m] T/C[%] Set no.\n' - for st_idx, st in self.ae_sets.items(): - retval += str(st_idx) + ' ' + str(len(st)) + '\n' - for line in st: - retval += '%25.17e %25.17e %25.17e %5d\n' % (line[0], line[1], line[2], line[3]) - return retval - - def save(self, filename): - if not os.path.isdir(os.path.dirname(filename)): - # fails if dirname is empty string - if len(os.path.dirname(filename)) > 0: - os.makedirs(os.path.dirname(filename)) - with open(filename, 'w') as fid: - fid.write(str(self)) - - def _read_file(self, filename): - ''' This method will read in the ae data from a HAWC2 ae file''' - with open(filename) as fid: - lines = fid.readlines() - nsets = int(lines[0].split()[0]) - lptr = 1 - self.ae_sets = {} - for _ in range(1, nsets + 1): - set_nr, n_rows = [int(v) for v in lines[lptr].split()[:2]] - lptr += 1 - data = np.array([[float(v) for v in l.split()[:4]] for l in lines[lptr:lptr + n_rows]]) - self.ae_sets[set_nr] = data - lptr += n_rows - - -def main(): - if __name__ == "__main__": - ae = AEFile(os.path.dirname(__file__) + "/tests/test_files/NREL_5MW_ae.txt") - print(ae.radius_ae(36)) - print(ae.thickness()) - print(ae.chord(36)) - print(ae.pc_set_nr(36)) - ae.add_set(radius=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], - chord=[1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1], - thickness=[100.0, 100.0, 90.0, 80.0, 70.0, 60.0, 50.0, 40.0, 30.0, 20.0, 10.0], - pc_set_id=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]) - print(str(ae)) - - -main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py deleted file mode 100644 index 22aa3e40f3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py +++ /dev/null @@ -1,479 +0,0 @@ -''' -Created on 20/01/2014 - -@author: MMPE - -See documentation of HTCFile below - -''' -import os -from collections import OrderedDict -import collections - - -class OrderedDict(collections.OrderedDict): - pass - - def __str__(self): - return "\n".join(["%-30s\t %s" % ((str(k) + ":"), str(v)) for k, v in self.items()]) - - -def parse_next_line(lines): - _3to2list = list(lines.pop(0).split(";")) - line, comments, = _3to2list[:1] + [_3to2list[1:]] - comments = ";".join(comments).rstrip() - while lines and lines[0].lstrip().startswith(";"): - comments += "\n%s" % lines.pop(0).rstrip() - return line.strip(), comments - - -def fmt_value(v): - try: - if int(float(v)) == float(v): - return int(float(v)) - return float(v) - except ValueError: - return v.replace("\\", "/") - - -class HTCContents(object): - lines = [] - contents = None - name_ = "" - parent = None - - def __getitem__(self, key): - if isinstance(key, str): - key = key.replace(".", "/") - if "/" in key: - keys = key.split('/') - val = self.contents[keys[0]] - for k in keys[1:]: - val = val[k] - return val - return self.contents[key] - else: - return self.values[key] - - def __getattr__(self, *args, **kwargs): - if args[0] in ['__members__', '__methods__']: - # fix python2 related issue. In py2, dir(self) calls - # __getattr__(('__members__',)), and this call must fail unhandled to work - return object.__getattribute__(self, *args, **kwargs) - try: - return object.__getattribute__(self, *args, **kwargs) - except Exception: - k = args[0] - if k.endswith("__1"): - k = k[:-3] - return self.contents[k] - - def __setattr__(self, *args, **kwargs): - _3to2list1 = list(args) - k, v, = _3to2list1[:1] + _3to2list1[1:] - if k in dir(self): # in ['section', 'filename', 'lines']: - if isinstance(self, HTCLine) and k == 'values': - args = k, list(v) - return object.__setattr__(self, *args, **kwargs) - if isinstance(v, str): - v = [fmt_value(v) for v in v.split()] - if not isinstance(v, HTCContents): - if not isinstance(v, (list, tuple)): - v = [v] - if k in self.contents: - self.contents[k].values = v - return - v = HTCLine(k, v, "") - self.contents[k] = v - v.parent = self - - def __delattr__(self, *args, **kwargs): - k, = args - if k in self: - del self.contents[k] - - def __iter__(self): - # mainbodies must preceed constraints - values = ([v for v in self.contents.values() if v.name_ == 'main_body'] + - [v for v in self.contents.values() if v.name_ != 'main_body']) - return iter(values) - - def __contains__(self, key): - if self.contents is None: - return False - return key in self.contents - - def get(self, section, default=None): - try: - return self[section] - except KeyError: - return default - - def __call__(self, **kwargs): - """Allow accesing one of multiple subsections with same name, e.g. the main body where name=='shaft' - > htc.new_htc_structure.main_body(name='shaft') - - or one of multiple lines with same name, e.g. the section in c2_def where value[0]==3 - > htc.new_htc_structure.main_body.c2_def.sec(v0=3) - """ - lst = [s for s in self.parent if s.name_ == self.name_ and ( - all([k in s and s[k][0] == v for k, v in kwargs.items()]) or - (all([k[0] == 'v' for k in kwargs]) and all([s[int(k[1:])] == v for k, v in kwargs.items()])) - )] - assert len(lst) == 1 - return lst[0] - - def keys(self): - return list(self.contents.keys()) - - def _add_contents(self, contents): - if contents.name_ not in self: - self[contents.name_] = contents - else: - ending = "__2" - while contents.name_ + ending in self: - ending = "__%d" % (1 + float("0%s" % ending.replace("__", ""))) - self[contents.name_ + ending] = contents - contents.parent = self - - def add_section(self, section_name, members={}, section=None, allow_duplicate=False, **kwargs): - if isinstance(section_name, HTCSection): - section = section_name - section_name = section.name_ - if section_name in self and allow_duplicate is False: - return self[section_name] - if section_name == "output": - section = HTCOutputSection(section_name) - elif section_name.startswith("output_at_time"): - section = HTCOutputAtTimeSection(section_name) - elif section is None: - section = HTCSection(section_name) - self._add_contents(section) - kwargs.update(members) - for k, v in kwargs.items(): - section[k] = v - return section - - def delete(self): - keys = [k for (k, v) in self.parent.contents.items() if v == self] - for k in keys: - del self.parent.contents[k] - - def location(self): - if self.parent is None: - return os.path.basename(self.filename) - else: - name = [k for k in self.parent.keys() if self.parent[k] == self][0] - return self.parent.location() + "/" + name - - def compare(self, other, compare_order=False): - my_keys = self.keys() - other_keys = other.keys() - s = "" - while my_keys or other_keys: - if my_keys: - if (my_keys[0] in other_keys): - if compare_order: - other_i = 0 - else: - other_i = other_keys.index(my_keys[0]) - while other_keys[other_i] != my_keys[0]: - s += "\n".join(["+ %s" % l for l in str(other[other_keys.pop(other_i)] - ).strip().split("\n")]) + "\n\n" - - s += self[my_keys.pop(0)].compare(other[other_keys.pop(other_i)]) - - else: - s += "\n".join(["- %s" % l for l in str(self[my_keys.pop(0)]).strip().split("\n")]) + "\n\n" - else: - s += "\n".join(["+ %s" % l for l in str(other[other_keys.pop(0)]).strip().split("\n")]) + "\n\n" - return s - - -class HTCSection(HTCContents): - end_comments = "" - begin_comments = "" - - def __init__(self, name, begin_comments="", end_comments=""): - self.name_ = name.strip() # strip if tabs in name somehow - self.begin_comments = begin_comments.strip(" \t") - self.end_comments = end_comments.strip(" \t") - self.contents = OrderedDict() - self.parent = None - - @property - def section_name(self): - return self.name_ - - @section_name.setter - def section_name(self, value): - self.name_ = value - - def add_line(self, name, values, comments=""): - line = HTCLine(name, values, comments) - self._add_contents(line) - return line - - def __setitem__(self, key, value): - if isinstance(value, HTCContents): - self.contents[key] = value - value.parent = self - elif isinstance(value, (str, int, float)): - self.add_line(key, [value]) - else: - self.add_line(key, value) - - @staticmethod - def from_lines(lines): - line, begin_comments = parse_next_line(lines) - name = line[6:].lower() - if name == "output": - section = HTCOutputSection(name, begin_comments) - elif name.startswith("output_at_time"): - section = HTCOutputAtTimeSection(name, begin_comments) - else: - section = HTCSection(name, begin_comments) - while lines: - if lines[0].strip() == "": - lines.pop(0) - if lines[0].lower().startswith("begin"): - section._add_contents(HTCSection.from_lines(lines)) - elif lines[0].lower().startswith("end"): - line, section.end_comments = parse_next_line(lines) - break - elif lines: - section._add_contents(section.line_from_line(lines)) - else: - raise Exception("Section '%s' has not end" % section.name_) - return section - - def line_from_line(self, lines): - return HTCLine.from_lines(lines) - - def __str__(self, level=0): - s = "%sbegin %s;%s\n" % (" " * level, self.name_, (("", "\t" + self.begin_comments) - [bool(self.begin_comments.strip())]).replace("\t\n", "\n")) - s += "".join([c.__str__(level + 1) for c in self]) - s += "%send %s;%s\n" % (" " * level, self.name_, (("", "\t" + self.end_comments) - [self.end_comments.strip() != ""]).replace("\t\n", "\n")) - return s - - def get_subsection_by_name(self, name, field='name'): - return self.get_section(name, field) - - def get_section(self, name, field='name'): - lst = [s for s in self if field in s and s[field][0] == name] - if len(lst) == 1: - return lst[0] - elif len(lst) == 0: - raise ValueError("subsection with %s='%s' not found" % (field, name)) - else: - raise ValueError("Multiple subsection with %s='%s' not found" % (field, name)) - - def get_element(self, key, value): - """Return subsection where subsection.==value or line where line.values[key]==value""" - if isinstance(key, int): - lst = [s for s in self if s.values[key] == value] - elif isinstance(key, str): - lst = [s for s in self if key in s and s[key][0] == name] - else: - raise ValueError("Key argument must be int or str") - if len(lst) == 1: - return lst[0] - elif len(lst) == 0: - raise ValueError("contents with '%s=%s' not found" % (key, value)) - else: - raise ValueError("Multiple contents with '%s=%s' not found" % (key, value)) - - def copy(self): - copy = HTCSection(name=self.name_, begin_comments=self.begin_comments, end_comments=self.end_comments) - for k, v in self.contents.items(): - copy.contents[k] = v.copy() - return copy - - -class HTCLine(HTCContents): - values = None - comments = "" - - def __init__(self, name, values, comments): - if "__" in name: - name = name[:name.index("__")] - self.name_ = name - self.values = list(values) - self.comments = comments.strip(" \t") - self.parent = None - - def __repr__(self): - return str(self) - - def __str__(self, level=0): - if self.name_ == "": - return "" - return "%s%s%s;%s\n" % (" " * (level), self.name_, - ("", "\t" + self.str_values())[bool(self.values)], - ("", "\t" + self.comments)[bool(self.comments.strip())]) - - def str_values(self): - return " ".join([str(v) for v in self.values]) - - def __getitem__(self, key): - try: - return self.values[key] - except Exception: - raise IndexError("Parameter %s does not exists for %s" % (key + 1, self.location())) - - def __setitem__(self, key, value): - if isinstance(key, int): - self.values[key] = value - else: - raise NotImplementedError - - @staticmethod - def from_lines(lines): - line, end_comments = parse_next_line(lines) - if len(line.split()) > 0: - _3to2list3 = list(line.split()) - name, values, = _3to2list3[:1] + [_3to2list3[1:]] - else: - name = line - values = [] - - values = [fmt_value(v) for v in values] - return HTCLine(name, values, end_comments) - - def compare(self, other): - s = "" - if self.values != other.values: - s += "\n".join(["+ %s" % l for l in str(self).strip().split("\n")]) + "\n" - s += "\n".join(["- %s" % l for l in str(other).strip().split("\n")]) + "\n" - s += "\n" - return s - - def copy(self): - return HTCLine(name=self.name_, values=self.values, comments=self.comments) - - -class HTCOutputSection(HTCSection): - sensors = None - - def __init__(self, name, begin_comments="", end_comments=""): - HTCSection.__init__(self, name, begin_comments=begin_comments, end_comments=end_comments) - self.sensors = [] - - def add_sensor(self, type, sensor, values=None, comment="", nr=None): - values = [] if values is None else values - self._add_sensor(HTCSensor(type, sensor, values, comment), nr) - - def _add_sensor(self, htcSensor, nr=None): - if nr is None: - nr = len(self.sensors) - self.sensors.insert(nr, htcSensor) - htcSensor.parent = self - - def line_from_line(self, lines): - name = lines[0].split()[0].strip() - - if name in ['filename', 'data_format', 'buffer', 'time']: - return HTCLine.from_lines(lines) - else: - return HTCSensor.from_lines(lines) - - def _add_contents(self, contents): - if isinstance(contents, HTCSensor): - self._add_sensor(contents) - else: - return HTCSection._add_contents(self, contents) - - def __str__(self, level=0): - s = "%sbegin %s;%s\n" % (" " * level, self.name_, ("", "\t" + self.begin_comments) - [len(self.begin_comments.strip()) > 0]) - s += "".join([c.__str__(level + 1) for c in self]) - s += "".join([s.__str__(level + 1) for s in self.sensors]) - s += "%send %s;%s\n" % (" " * level, self.name_, ("", "\t" + self.end_comments) - [self.end_comments.strip() != ""]) - return s - - def compare(self, other): - s = HTCContents.compare(self, other) - for s1, s2 in zip(self.sensors, other.sensors): - s += s1.compare(s2) - for s1 in self.sensors[len(other.sensors):]: - s += "\n".join(["- %s" % l for l in str(s1).strip().split("\n")]) + "\n" - for s2 in self.sensors[len(self.sensors):]: - s += "\n".join(["- %s" % l for l in str(s2).strip().split("\n")]) + "\n" - - return s - - -class HTCOutputAtTimeSection(HTCOutputSection): - type = None - time = None - - def __init__(self, name, begin_comments="", end_comments=""): - if len(name.split()) < 3: - raise ValueError('"keyword" and "time" arguments required for output_at_time command:\n%s' % name) - name, self.type, time = name.split() - self.time = float(time) - HTCOutputSection.__init__(self, name, begin_comments=begin_comments, end_comments=end_comments) - - def __str__(self, level=0): - s = "%sbegin %s %s %s;%s\n" % (" " * level, self.name_, self.type, self.time, - ("", "\t" + self.begin_comments)[len(self.begin_comments.strip())]) - s += "".join([c.__str__(level + 1) for c in self]) - s += "".join([s.__str__(level + 1) for s in self.sensors]) - s += "%send %s;%s\n" % (" " * level, self.name_, ("", "\t" + self.end_comments) - [self.end_comments.strip() != ""]) - return s - - -class HTCSensor(HTCLine): - type = "" - sensor = "" - values = [] - - def __init__(self, type, sensor, values, comments): - self.type = type - self.sensor = sensor - self.values = list(values) - self.comments = comments.strip(" \t") - - @staticmethod - def from_lines(lines): - line, comments = parse_next_line(lines) - if len(line.split()) > 2: - _3to2list5 = list(line.split()) - type, sensor, values, = _3to2list5[:2] + [_3to2list5[2:]] - elif len(line.split()) == 2: - type, sensor = line.split() - values = [] - else: - type, sensor, values = "", "", [] - - def fmt(v): - try: - if int(float(v)) == float(v): - return int(float(v)) - return float(v) - except ValueError: - return v - values = [fmt(v) for v in values] - return HTCSensor(type, sensor, values, comments) - - def __str__(self, level=0): - return "%s%s %s%s;%s\n" % (" " * (level), - self.type, - self.sensor, - ("", "\t" + self.str_values())[bool(self.values)], - ("", "\t" + self.comments)[bool(self.comments.strip())]) - - def delete(self): - self.parent.sensors.remove(self) - - def compare(self, other): - s = "" - if self.sensor != other.sensor or self.values != other.values: - s += "\n".join(["+ %s" % l for l in str(self).strip().split("\n")]) + "\n" - s += "\n".join(["- %s" % l for l in str(other).strip().split("\n")]) + "\n" - s += "\n" - return s diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py deleted file mode 100644 index 7275bbac29..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py +++ /dev/null @@ -1,143 +0,0 @@ -''' -Created on 20/01/2014 - -@author: MMPE - -See documentation of HTCFile below - -''' -import os - - - - -class HTCDefaults(object): - - empty_htc = """begin simulation; - time_stop 600; - solvertype 2; (newmark) - begin newmark; - deltat 0.02; - end newmark; - end simulation; - ; - ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- - ; - begin wind ; - density 1.225 ; - wsp 10 ; - tint 1; - horizontal_input 1 ; 0=false, 1=true - windfield_rotations 0 0.0 0.0 ; yaw, tilt, rotation - center_pos0 0 0 -30 ; hub heigth - shear_format 1 0;0=none,1=constant,2=log,3=power,4=linear - turb_format 0 ; 0=none, 1=mann,2=flex - tower_shadow_method 0 ; 0=none, 1=potential flow, 2=jet - end wind; - ; - ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- - ; - ; - begin output; - filename ./tmp; - general time; - end output; - exit;""" - - def add_mann_turbulence(self, L=29.4, ae23=1, Gamma=3.9, seed=1001, high_frq_compensation=True, - filenames=None, - no_grid_points=(16384, 32, 32), box_dimension=(6000, 100, 100), - dont_scale=False, - std_scaling=None): - wind = self.add_section('wind') - wind.turb_format = 1 - mann = wind.add_section('mann') - if 'create_turb_parameters' in mann: - mann.create_turb_parameters.values = [L, ae23, Gamma, seed, int(high_frq_compensation)] - else: - mann.add_line('create_turb_parameters', [L, ae23, Gamma, seed, int(high_frq_compensation)], - "L, alfaeps, gamma, seed, highfrq compensation") - if filenames is None: - - import numpy as np - dxyz = tuple(np.array(box_dimension) / no_grid_points) - from wetb.wind.turbulence import mann_turbulence - filenames = ["./turb/" + mann_turbulence.name_format % - ((L, ae23, Gamma, high_frq_compensation) + no_grid_points + dxyz + (seed, uvw)) - for uvw in ['u', 'v', 'w']] - if isinstance(filenames, str): - filenames = ["./turb/%s_s%04d%s.bin" % (filenames, seed, c) for c in ['u', 'v', 'w']] - for filename, c in zip(filenames, ['u', 'v', 'w']): - setattr(mann, 'filename_%s' % c, filename) - for c, n, dim in zip(['u', 'v', 'w'], no_grid_points, box_dimension): - setattr(mann, 'box_dim_%s' % c, "%d %.4f" % (n, dim / (n))) - if dont_scale: - mann.dont_scale = 1 - else: - try: - del mann.dont_scale - except KeyError: - pass - if std_scaling is not None: - mann.std_scaling = "%f %f %f" % std_scaling - else: - try: - del mann.std_scaling - except KeyError: - pass - - def add_turb_export(self, filename="export_%s.turb", samplefrq=None): - exp = self.wind.add_section('turb_export', allow_duplicate=True) - for uvw in 'uvw': - exp.add_line('filename_%s' % uvw, [filename % uvw]) - sf = samplefrq or max(1, int(self.wind.mann.box_dim_u[1] / (self.wind.wsp[0] * self.deltat()))) - exp.samplefrq = sf - if "time" in self.output: - exp.time_start = self.output.time[0] - else: - exp.time_start = 0 - exp.nsteps = (self.simulation.time_stop[0] - exp.time_start[0]) / self.deltat() - for vw in 'vw': - exp.add_line('box_dim_%s' % vw, self.wind.mann['box_dim_%s' % vw].values) - - def import_dtu_we_controller_input(self, filename): - dtu_we_controller = [dll for dll in self.dll if dll.name[0] == 'dtu_we_controller'][0] - with open(filename) as fid: - lines = fid.readlines() - K_r1 = float(lines[1].replace("K = ", '').replace("[Nm/(rad/s)^2]", '')) - Kp_r2 = float(lines[4].replace("Kp = ", '').replace("[Nm/(rad/s)]", '')) - Ki_r2 = float(lines[5].replace("Ki = ", '').replace("[Nm/rad]", '')) - Kp_r3 = float(lines[7].replace("Kp = ", '').replace("[rad/(rad/s)]", '')) - Ki_r3 = float(lines[8].replace("Ki = ", '').replace("[rad/rad]", '')) - KK = lines[9].split("]") - KK1 = float(KK[0].replace("K1 = ", '').replace("[deg", '')) - KK2 = float(KK[1].replace(", K2 = ", '').replace("[deg^2", '')) - cs = dtu_we_controller.init - cs.constant__11.values[1] = "%.6E" % K_r1 - cs.constant__12.values[1] = "%.6E" % Kp_r2 - cs.constant__13.values[1] = "%.6E" % Ki_r2 - cs.constant__16.values[1] = "%.6E" % Kp_r3 - cs.constant__17.values[1] = "%.6E" % Ki_r3 - cs.constant__21.values[1] = "%.6E" % KK1 - cs.constant__22.values[1] = "%.6E" % KK2 - - def add_hydro(self, mudlevel, mwl, gravity=9.81, rho=1027): - wp = self.add_section("hydro").add_section('water_properties') - wp.mudlevel = mudlevel - wp.mwl = mwl - wp.gravity = gravity - wp.rho = rho - - -class HTCExtensions(object): - def get_shear(self): - shear_type, parameter = self.wind.shear_format.values - z0 = -self.wind.center_pos0[2] - wsp = self.wind.wsp[0] - if shear_type == 1: # constant - return lambda z: wsp - elif shear_type == 3: - from wetb.wind.shear import power_shear - return power_shear(parameter, z0, wsp) - else: - raise NotImplementedError diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py deleted file mode 100644 index c2b859bcff..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py +++ /dev/null @@ -1,600 +0,0 @@ -''' -Created on 20/01/2014 - -See documentation of HTCFile below - -''' -# from wetb.utils.process_exec import pexec -# from wetb.hawc2.hawc2_pbs_file import HAWC2PBSFile -# import jinja2 -# from wetb.utils.cluster_tools.os_path import fixcase, abspath, pjoin - -from collections import OrderedDict -from .htc_contents import HTCContents, HTCSection, HTCLine -from .htc_extensions import HTCDefaults, HTCExtensions -import os - -# --- cluster_tools/os_path -def fmt_path(path): - return path.lower().replace("\\", "/") - -def repl(path): - return path.replace("\\", "/") - -def abspath(path): - return repl(os.path.abspath(path)) - -def relpath(path, start=None): - return repl(os.path.relpath(path, start)) - -def realpath(path): - return repl(os.path.realpath(path)) - -def pjoin(*path): - return repl(os.path.join(*path)) - -def fixcase(path): - path = realpath(str(path)).replace("\\", "/") - p, rest = os.path.splitdrive(path) - p += "/" - for f in rest[1:].split("/"): - f_lst = [f_ for f_ in os.listdir(p) if f_.lower() == f.lower()] - if len(f_lst) > 1: - # use the case sensitive match - f_lst = [f_ for f_ in f_lst if f_ == f] - if len(f_lst) == 0: - raise IOError("'%s' not found in '%s'" % (f, p)) - # Use matched folder - p = pjoin(p, f_lst[0]) - return p -# --- end os_path - -class HTCFile(HTCContents, HTCDefaults, HTCExtensions): - """Wrapper for HTC files - - Examples: - --------- - >>> htcfile = HTCFile('htc/test.htc') - >>> htcfile.wind.wsp = 10 - >>> htcfile.save() - - #--------------------------------------------- - >>> htc = HTCFile(filename=None, modelpath=None) # create minimal htcfile - - #Add section - >>> htc.add_section('hydro') - - #Add subsection - >>> htc.hydro.add_section("hydro_element") - - #Set values - >>> htc.hydro.hydro_element.wave_breaking = [2, 6.28, 1] # or - >>> htc.hydro.hydro_element.wave_breaking = 2, 6.28, 1 - - #Set comments - >>> htc.hydro.hydro_element.wave_breaking.comments = "This is a comment" - - #Access section - >>> hydro_element = htc.hydro.hydro_element #or - >>> hydro_element = htc['hydro.hydro_element'] # or - >>> hydro_element = htc['hydro/hydro_element'] # or - >>> print (hydro_element.wave_breaking) #string represenation - wave_breaking 2 6.28 1; This is a comment - >>> print (hydro_element.wave_breaking.name_) # command - wave_breaking - >>> print (hydro_element.wave_breaking.values) # values - [2, 6.28, 1 - >>> print (hydro_element.wave_breaking.comments) # comments - This is a comment - >>> print (hydro_element.wave_breaking[0]) # first value - 2 - - #Delete element - htc.simulation.logfile.delete() - #or - del htc.simulation.logfile #Delete logfile line. Raise keyerror if not exists - - """ - - filename = None - jinja_tags = {} - htc_inputfiles = [] - level = 0 - modelpath = "../" - initial_comments = None - - def __init__(self, filename=None, modelpath=None, jinja_tags={}): - """ - Parameters - --------- - filename : str - Absolute filename of htc file - modelpath : str - Model path relative to htc file - """ - if filename is not None: - try: - filename = fixcase(abspath(filename)) - with self.open(str(filename)): - pass - except Exception: - pass - - self.filename = filename - - self.jinja_tags = jinja_tags - self.modelpath = modelpath or self.auto_detect_modelpath() - - if filename and self.modelpath != "unknown" and not os.path.isabs(self.modelpath): - drive, p = os.path.splitdrive(os.path.join(os.path.dirname(str(self.filename)), self.modelpath)) - self.modelpath = os.path.join(drive, os.path.splitdrive(os.path.realpath(p))[1]).replace("\\", "/") - if self.modelpath != 'unknown' and self.modelpath[-1] != '/': - self.modelpath += "/" - - self.load() - - def auto_detect_modelpath(self): - if self.filename is None: - return "../" - - #print (["../"*i for i in range(3)]) - import numpy as np - input_files = HTCFile(self.filename, 'unknown').input_files() - if len(input_files) == 1: # only input file is the htc file - return "../" - rel_input_files = [f for f in input_files if not os.path.isabs(f)] - - def isfile_case_insensitive(f): - try: - f = fixcase(f) # raises exception if not existing - return os.path.isfile(f) - except IOError: - return False - found = ([np.sum([isfile_case_insensitive(os.path.join(os.path.dirname(self.filename), "../" * i, f)) - for f in rel_input_files]) for i in range(4)]) - - if max(found) > 0: - relpath = "../" * np.argmax(found) - return abspath(pjoin(os.path.dirname(self.filename), relpath)) - else: - print("Modelpath cannot be autodetected for '%s'.\nInput files not found near htc file" % self.filename) - return 'unknown' - - def load(self): - self.contents = OrderedDict() - self.initial_comments = [] - self.htc_inputfiles = [] - if self.filename is None: - lines = self.empty_htc.split("\n") - else: - lines = self.readlines(self.filename) - - lines = [l.strip() for l in lines] - - #lines = copy(self.lines) - while lines: - if lines[0].startswith(";"): - self.initial_comments.append(lines.pop(0).strip() + "\n") - elif lines[0].lower().startswith("begin"): - self._add_contents(HTCSection.from_lines(lines)) - else: - line = HTCLine.from_lines(lines) - if line.name_ == "exit": - break - self._add_contents(line) - - def readfilelines(self, filename): - with self.open(self.unix_path(os.path.abspath(filename.replace('\\', '/'))), encoding='cp1252') as fid: - txt = fid.read() - if txt[:10].encode().startswith(b'\xc3\xaf\xc2\xbb\xc2\xbf'): - txt = txt[3:] - if self.jinja_tags: - template = jinja2.Template(txt) - txt = template.render(**self.jinja_tags) - return txt.replace("\r", "").split("\n") - - def readlines(self, filename): - if filename != self.filename: # self.filename may be changed by set_name/save. Added it when needed instead - self.htc_inputfiles.append(filename) - htc_lines = [] - lines = self.readfilelines(filename) - for l in lines: - if l.lower().lstrip().startswith('continue_in_file'): - filename = l.lstrip().split(";")[0][len("continue_in_file"):].strip().lower() - - if self.modelpath == 'unknown': - p = os.path.dirname(self.filename) - try: - lu = [os.path.isfile(os.path.abspath(os.path.join(p, "../" * i, filename.replace("\\", "/")))) - for i in range(4)].index(True) - filename = os.path.join(p, "../" * lu, filename) - except ValueError: - print('[FAIL] Cannot continue in file: {}'.format(filename)) - filename = None - else: - filename = os.path.join(self.modelpath, filename) - if not os.path.isfile(filename): - print('[FAIL] Cannot continue in file: {}'.format(filename)) - filename=None - if filename is not None: - #print('[INFO] Continuing in file: {}'.format(filename)) - for line in self.readlines(filename): - if line.lstrip().lower().startswith('exit'): - break - htc_lines.append(line) - else: - htc_lines.append(l) - return htc_lines - - def __setitem__(self, key, value): - self.contents[key] = value - - def __str__(self): - self.contents # load - return "".join(self.initial_comments + [c.__str__(1) for c in self] + ["exit;"]) - - def save(self, filename=None): - """Saves the htc object to an htc file. - - Args: - filename (str, optional): Specifies the filename of the htc file to be saved. - If the value is none, the filename attribute of the object will be used as the filename. - Defaults to None. - """ - self.contents # load if not loaded - if filename is None: - filename = self.filename - else: - self.filename = filename - # exist_ok does not exist in Python27 - if not os.path.exists(os.path.dirname(filename)) and os.path.dirname(filename) != "": - os.makedirs(os.path.dirname(filename)) # , exist_ok=True) - with self.open(filename, 'w', encoding='cp1252') as fid: - fid.write(str(self)) - - def set_name(self, name, subfolder=''): - """Sets the base filename of the simulation files. - - Args: - name (str): Specifies name of the log file, dat file (for animation), hdf5 file (for visualization) and htc file. - subfolder (str, optional): Specifies the name of a subfolder to place the files in. - If the value is an empty string, no subfolders will be created. - Defaults to ''. - - Returns: - None - """ - # if os.path.isabs(folder) is False and os.path.relpath(folder).startswith("htc" + os.path.sep): - self.contents # load if not loaded - - def fmt_folder(folder, subfolder): return "./" + \ - os.path.relpath(os.path.join(folder, subfolder)).replace("\\", "/") - - self.filename = os.path.abspath(os.path.join(self.modelpath, fmt_folder( - 'htc', subfolder), "%s.htc" % name)).replace("\\", "/") - if 'simulation' in self and 'logfile' in self.simulation: - self.simulation.logfile = os.path.join(fmt_folder('log', subfolder), "%s.log" % name).replace("\\", "/") - if 'animation' in self.simulation: - self.simulation.animation = os.path.join(fmt_folder( - 'animation', subfolder), "%s.dat" % name).replace("\\", "/") - if 'visualization' in self.simulation: - f = os.path.join(fmt_folder('visualization', subfolder), "%s.hdf5" % name).replace("\\", "/") - self.simulation.visualization[0] = f - elif 'test_structure' in self and 'logfile' in self.test_structure: # hawc2aero - self.test_structure.logfile = os.path.join(fmt_folder('log', subfolder), "%s.log" % name).replace("\\", "/") - if 'output' in self: - self.output.filename = os.path.join(fmt_folder('res', subfolder), "%s" % name).replace("\\", "/") - - def set_time(self, start=None, stop=None, step=None): - self.contents # load if not loaded - if stop is not None: - self.simulation.time_stop = stop - else: - stop = self.simulation.time_stop[0] - if step is not None: - self.simulation.newmark.deltat = step - if start is not None: - self.output.time = start, stop - if "wind" in self: # and self.wind.turb_format[0] > 0: - self.wind.scale_time_start = start - - def expected_simulation_time(self): - return 600 - - def pbs_file(self, hawc2_path, hawc2_cmd, queue='workq', walltime=None, - input_files=None, output_files=None, copy_turb=(True, True)): - walltime = walltime or self.expected_simulation_time() * 2 - if len(copy_turb) == 1: - copy_turb_fwd, copy_turb_back = copy_turb, copy_turb - else: - copy_turb_fwd, copy_turb_back = copy_turb - - input_files = input_files or self.input_files() - if copy_turb_fwd: - input_files += [f for f in self.turbulence_files() if os.path.isfile(f)] - - output_files = output_files or self.output_files() - if copy_turb_back: - output_files += self.turbulence_files() - - return HAWC2PBSFile(hawc2_path, hawc2_cmd, self.filename, self.modelpath, - input_files, output_files, - queue, walltime) - - def input_files(self): - self.contents # load if not loaded - if self.modelpath == "unknown": - files = [str(f).replace("\\", "/") for f in [self.filename] + self.htc_inputfiles] - else: - files = [os.path.abspath(str(f)).replace("\\", "/") for f in [self.filename] + self.htc_inputfiles] - if 'new_htc_structure' in self: - for mb in [self.new_htc_structure[mb] - for mb in self.new_htc_structure.keys() if mb.startswith('main_body')]: - if "timoschenko_input" in mb: - files.append(mb.timoschenko_input.filename[0]) - files.append(mb.get('external_bladedata_dll', [None, None, None])[2]) - if 'aero' in self: - files.append(self.aero.ae_filename[0]) - files.append(self.aero.pc_filename[0]) - files.append(self.aero.get('external_bladedata_dll', [None, None, None])[2]) - files.append(self.aero.get('output_profile_coef_filename', [None])[0]) - if 'dynstall_ateflap' in self.aero: - files.append(self.aero.dynstall_ateflap.get('flap', [None] * 3)[2]) - if 'bemwake_method' in self.aero: - files.append(self.aero.bemwake_method.get('a-ct-filename', [None] * 3)[0]) - for dll in [self.dll[dll] for dll in self.get('dll', {}).keys() if 'filename' in self.dll[dll]]: - files.append(dll.filename[0]) - f, ext = os.path.splitext(dll.filename[0]) - files.append(f + "_64" + ext) - if 'wind' in self: - files.append(self.wind.get('user_defined_shear', [None])[0]) - files.append(self.wind.get('user_defined_shear_turbulence', [None])[0]) - files.append(self.wind.get('met_mast_wind', [None])[0]) - if 'wakes' in self: - files.append(self.wind.get('use_specific_deficit_file', [None])[0]) - files.append(self.wind.get('write_ct_cq_file', [None])[0]) - files.append(self.wind.get('write_final_deficits', [None])[0]) - if 'hydro' in self: - if 'water_properties' in self.hydro: - files.append(self.hydro.water_properties.get('water_kinematics_dll', [None])[0]) - files.append(self.hydro.water_properties.get('water_kinematics_dll', [None, None])[1]) - if 'soil' in self: - if 'soil_element' in self.soil: - files.append(self.soil.soil_element.get('datafile', [None])[0]) - try: - dtu_we_controller = self.dll.get_subsection_by_name('dtu_we_controller') - theta_min = dtu_we_controller.init.constant__5[1] - if theta_min >= 90: - files.append(os.path.join(os.path.dirname( - dtu_we_controller.filename[0]), "wpdata.%d" % theta_min).replace("\\", "/")) - except Exception: - pass - - try: - files.append(self.force.dll.dll[0]) - except Exception: - pass - - def fix_path_case(f): - if os.path.isabs(f): - return self.unix_path(f) - elif self.modelpath != "unknown": - try: - return "./" + os.path.relpath(self.unix_path(os.path.join(self.modelpath, f)), - self.modelpath).replace("\\", "/") - except IOError: - return f - else: - return f - return [fix_path_case(f) for f in set(files) if f] - - def output_files(self): - self.contents # load if not loaded - files = [] - for k, index in [('simulation/logfile', 0), - ('simulation/animation', 0), - ('simulation/visualization', 0), - ('new_htc_structure/beam_output_file_name', 0), - ('new_htc_structure/body_output_file_name', 0), - ('new_htc_structure/struct_inertia_output_file_name', 0), - ('new_htc_structure/body_eigenanalysis_file_name', 0), - ('new_htc_structure/constraint_output_file_name', 0), - ('wind/turb_export/filename_u', 0), - ('wind/turb_export/filename_v', 0), - ('wind/turb_export/filename_w', 0)]: - line = self.get(k) - if line: - files.append(line[index]) - if 'new_htc_structure' in self: - if 'system_eigenanalysis' in self.new_htc_structure: - f = self.new_htc_structure.system_eigenanalysis[0] - files.append(f) - files.append(os.path.join(os.path.dirname(f), 'mode*.dat').replace("\\", "/")) - if 'structure_eigenanalysis_file_name' in self.new_htc_structure: - f = self.new_htc_structure.structure_eigenanalysis_file_name[0] - files.append(f) - files.append(os.path.join(os.path.dirname(f), 'mode*.dat').replace("\\", "/")) - files.extend(self.res_file_lst()) - - for key in [k for k in self.contents.keys() if k.startswith("output_at_time")]: - files.append(self[key]['filename'][0] + ".dat") - return [f.lower() for f in files if f] - - def turbulence_files(self): - self.contents # load if not loaded - if 'wind' not in self.contents.keys() or self.wind.turb_format[0] == 0: - return [] - elif self.wind.turb_format[0] == 1: - files = [self.get('wind.mann.filename_%s' % comp, [None])[0] for comp in ['u', 'v', 'w']] - elif self.wind.turb_format[0] == 2: - files = [self.get('wind.flex.filename_%s' % comp, [None])[0] for comp in ['u', 'v', 'w']] - return [f for f in files if f] - - def res_file_lst(self): - self.contents # load if not loaded - res = [] - for output in [self[k] for k in self.keys() - if self[k].name_.startswith("output") and not self[k].name_.startswith("output_at_time")]: - dataformat = output.get('data_format', 'hawc_ascii') - res_filename = output.filename[0] - if dataformat[0] == "gtsdf" or dataformat[0] == "gtsdf64": - res.append(res_filename + ".hdf5") - elif dataformat[0] == "flex_int": - res.extend([res_filename + ".int", os.path.join(os.path.dirname(res_filename), 'sensor')]) - else: - res.extend([res_filename + ".sel", res_filename + ".dat"]) - return res - - def _simulate(self, exe, skip_if_up_to_date=False): - self.contents # load if not loaded - if skip_if_up_to_date: - from os.path import isfile, getmtime, isabs - res_file = os.path.join(self.modelpath, self.res_file_lst()[0]) - htc_file = os.path.join(self.modelpath, self.filename) - if isabs(exe): - exe_file = exe - else: - exe_file = os.path.join(self.modelpath, exe) - #print (from_unix(getmtime(res_file)), from_unix(getmtime(htc_file))) - if (isfile(htc_file) and isfile(res_file) and isfile(exe_file) and - str(HTCFile(htc_file)) == str(self) and - getmtime(res_file) > getmtime(htc_file) and getmtime(res_file) > getmtime(exe_file)): - if "".join(self.readfilelines(htc_file)) == str(self): - return - - self.save() - htcfile = os.path.relpath(self.filename, self.modelpath) - assert any([os.path.isfile(os.path.join(f, exe)) for f in [''] + os.environ['PATH'].split(";")]), exe - return pexec([exe, htcfile], self.modelpath) - - def simulate(self, exe, skip_if_up_to_date=False): - errorcode, stdout, stderr, cmd = self._simulate(exe, skip_if_up_to_date) - if ('simulation' in self.keys() and "logfile" in self.simulation and - os.path.isfile(os.path.join(self.modelpath, self.simulation.logfile[0]))): - with self.open(os.path.join(self.modelpath, self.simulation.logfile[0])) as fid: - log = fid.read() - else: - log = "%s\n%s" % (str(stdout), str(stderr)) - - if errorcode or 'Elapsed time' not in log: - log_lines = log.split("\n") - error_lines = [i for i, l in enumerate(log_lines) if 'error' in l.lower()] - if error_lines: - import numpy as np - line_i = np.r_[np.array([error_lines + i for i in np.arange(-3, 4)]).flatten(), - np.arange(-5, 0) + len(log_lines)] - line_i = sorted(np.unique(np.maximum(np.minimum(line_i, len(log_lines) - 1), 0))) - - lines = ["%04d %s" % (i, log_lines[i]) for i in line_i] - for jump in np.where(np.diff(line_i) > 1)[0]: - lines.insert(jump, "...") - - error_log = "\n".join(lines) - else: - error_log = log - raise Exception("\nError code: %s\nstdout:\n%s\n--------------\nstderr:\n%s\n--------------\nlog:\n%s\n--------------\ncmd:\n%s" % - (errorcode, str(stdout), str(stderr), error_log, cmd)) - return str(stdout) + str(stderr), log - - def simulate_hawc2stab2(self, exe): - errorcode, stdout, stderr, cmd = self._simulate(exe, skip_if_up_to_date=False) - - if errorcode: - raise Exception("\nstdout:\n%s\n--------------\nstderr:\n%s\n--------------\ncmd:\n%s" % - (str(stdout), str(stderr), cmd)) - return str(stdout) + str(stderr) - - def deltat(self): - return self.simulation.newmark.deltat[0] - - def compare(self, other): - if isinstance(other, str): - other = HTCFile(other) - return HTCContents.compare(self, other) - - @property - def open(self): - return open - - def unix_path(self, filename): - filename = os.path.realpath(str(filename)).replace("\\", "/") - ufn, rest = os.path.splitdrive(filename) - ufn += "/" - for f in rest[1:].split("/"): - f_lst = [f_ for f_ in os.listdir(ufn) if f_.lower() == f.lower()] - if len(f_lst) > 1: - # use the case sensitive match - f_lst = [f_ for f_ in f_lst if f_ == f] - if len(f_lst) == 0: - raise IOError("'%s' not found in '%s'" % (f, ufn)) - else: # one match found - ufn = os.path.join(ufn, f_lst[0]) - return ufn.replace("\\", "/") - - -# -# def get_body(self, name): -# lst = [b for b in self.new_htc_structure if b.name_=="main_body" and b.name[0]==name] -# if len(lst)==1: -# return lst[0] -# else: -# if len(lst)==0: -# raise ValueError("Body '%s' not found"%name) -# else: -# raise NotImplementedError() -# - -class H2aeroHTCFile(HTCFile): - def __init__(self, filename=None, modelpath=None): - HTCFile.__init__(self, filename=filename, modelpath=modelpath) - - @property - def simulation(self): - return self.test_structure - - def set_time(self, start=None, stop=None, step=None): - if stop is not None: - self.test_structure.time_stop = stop - else: - stop = self.simulation.time_stop[0] - if step is not None: - self.test_structure.deltat = step - if start is not None: - self.output.time = start, stop - if "wind" in self and self.wind.turb_format[0] > 0: - self.wind.scale_time_start = start - - -class SSH_HTCFile(HTCFile): - def __init__(self, ssh, filename=None, modelpath=None): - object.__setattr__(self, 'ssh', ssh) - HTCFile.__init__(self, filename=filename, modelpath=modelpath) - - @property - def open(self): - return self.ssh.open - - def unix_path(self, filename): - rel_filename = os.path.relpath(filename, self.modelpath).replace("\\", "/") - _, out, _ = self.ssh.execute("find -ipath ./%s" % rel_filename, cwd=self.modelpath) - out = out.strip() - if out == "": - raise IOError("'%s' not found in '%s'" % (rel_filename, self.modelpath)) - elif "\n" in out: - raise IOError("Multiple '%s' found in '%s' (due to case senitivity)" % (rel_filename, self.modelpath)) - else: - drive, path = os.path.splitdrive(os.path.join(self.modelpath, out)) - path = os.path.realpath(path).replace("\\", "/") - return os.path.join(drive, os.path.splitdrive(path)[1]) - - -if "__main__" == __name__: - f = HTCFile(r"C:/Work/BAR-Local/Hawc2ToBeamDyn/sim.htc", ".") - print(f.input_files()) -# f.save(r"C:\mmpe\HAWC2\models\DTU10MWRef6.0\htc\DTU_10MW_RWT_power_curve.htc") -# -# f = HTCFile(r"C:\mmpe\HAWC2\models\DTU10MWRef6.0\htc\DTU_10MW_RWT.htc", "../") -# f.set_time = 0, 1, .1 -# print(f.simulate(r"C:\mmpe\HAWC2\bin\HAWC2_12.8\hawc2mb.exe")) -# -# f.save(r"C:\mmpe\HAWC2\models\DTU10MWRef6.0\htc\DTU_10MW_RWT.htc") diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py deleted file mode 100644 index 990f52bb74..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py +++ /dev/null @@ -1,55 +0,0 @@ -import glob -import os -import copy -from wetb.hawc2.hawc2_pbs_file import JESS_WINE32_HAWC2MB -from wetb.hawc2.htc_file import HTCFile -from wetb.utils.cluster_tools.pbsfile import PBSMultiRunner - - -class HTCFileSet(): - def __init__(self, model_path, htc_lst="**/*.htc"): - self.model_path = model_path - - if not isinstance(htc_lst, list): - htc_lst = [htc_lst] - - self.htc_files = [] - for htc_path in htc_lst: - if os.path.isfile(htc_path): - self.htc_files.append(htc_path) - else: - if not os.path.isabs(htc_path): - htc_path = os.path.join(model_path, htc_path) - for filename in glob.iglob(htc_path, recursive=True): - self.htc_files.append(filename) - - def pbs_files(self, hawc2_path, hawc2_cmd, queue='workq', walltime=None, - input_files=None, output_files=None, copy_turb=(True, True)): - - return (HTCFile(htc).pbs_file(hawc2_path, hawc2_cmd, queue=queue, walltime=walltime, - input_files=copy.copy(input_files), - output_files=copy.copy(output_files), - copy_turb=copy_turb) for htc in self.htc_files) - - def save_pbs_files(self, hawc2_path=None, hawc2_cmd=JESS_WINE32_HAWC2MB, queue='workq', walltime=None, - input_files=None, output_files=None, copy_turb=(True, True)): - for pbs in self.pbs_files(hawc2_path, hawc2_cmd, queue=queue, walltime=walltime, - input_files=input_files, output_files=output_files, - copy_turb=copy_turb): - pbs.save(self.model_path) - - -if __name__ == '__main__': - #model_path = r'R:\HAWC2_tests\v12.6_mmpe3\win32\simple1' - model_path = "w:/simple1" - pbs_files = HTCFileSet(model_path).pbs_files( - hawc2_path=r"R:\HAWC2_tests\v12.6_mmpe3\hawc2\win32", hawc2_cmd=JESS_WINE32_HAWC2MB, input_files=['data/*']) - import pandas as pd - time_overview = pd.read_excel( - r'C:\mmpe\programming\Fortran\HAWC2_git\HAWC2\pytest_hawc2\release_tests\Time_overview.xlsx') - for pbs in pbs_files: - f = pbs.filename - - pbs.walltime = time_overview.loc[f[:-3].replace("pbs_in/", 'simple1/')]['mean'] * 24 * 3600 - pbs.save(model_path) - PBSMultiRunner(model_path, nodes=1, ppn=10).save() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py deleted file mode 100644 index 83e0a1baca..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py +++ /dev/null @@ -1,163 +0,0 @@ -''' -Created on 24/04/2014 - -@author: MMPE -''' - -import os -import numpy as np - -class PCFile(object): - """Read HAWC2 PC (profile coefficients) file - - examples - -------- - >>> pcfile = PCFile("tests/test_files/NREL_5MW_pc.txt") - >>> pcfile.CL(21,10) # CL for thickness 21% and AOA=10deg - 1.358 - >>> pcfile.CD(21,10) # CD for thickness 21% and AOA=10deg - 0.0255 - >>> pcfile.CM(21,10) # CM for thickness 21% and AOA=10deg - -0.1103 - """ - def __init__(self, filename=None): - self.pc_sets = {} - if filename is not None: - with open (filename) as fid: - lines = fid.readlines() - self._parse_lines(lines) - self.filename = filename - self.fmt = ' 19.015e' - - def _parse_lines(self, lines): - """Read HAWC2 PC file (profile coefficient file). - """ - nsets = int(lines[0].split()[0]) - lptr = 1 - for nset in range(1, nsets + 1): - nprofiles = int(lines[lptr].split()[0]) - lptr += 1 - #assert nprofiles >= 2 - thicknesses = [] - profiles = [] - for profile_nr in range(nprofiles): - profile_nr, n_rows, thickness = lines[lptr ].split()[:3] - profile_nr, n_rows, thickness = int(profile_nr), int(n_rows), float(thickness) - lptr += 1 - data = np.array([[float(v) for v in l.split()[:4]] for l in lines[lptr:lptr + n_rows]]) - thicknesses.append(thickness) - profiles.append(data) - lptr += n_rows - self.pc_sets[nset] = (np.array(thicknesses), profiles) - - def _Cxxx(self, thickness, alpha, column, pc_set_nr=1): - thicknesses, profiles = self.pc_sets[pc_set_nr] - index = np.searchsorted(thicknesses, thickness) - if index == 0: - index = 1 - - Cx0, Cx1 = profiles[index - 1:index + 1] - Cx0 = np.interp(alpha, Cx0[:, 0], Cx0[:, column]) - Cx1 = np.interp(alpha, Cx1[:, 0], Cx1[:, column]) - th0, th1 = thicknesses[index - 1:index + 1] - return Cx0 + (Cx1 - Cx0) * (thickness - th0) / (th1 - th0) - - def _CxxxH2(self, thickness, alpha, column, pc_set_nr=1): - thicknesses, profiles = self.pc_sets[pc_set_nr] - index = np.searchsorted(thicknesses, thickness) - if index == 0: - index = 1 - - Cx0, Cx1 = profiles[index - 1:index + 1] - - Cx0 = np.interp(np.arange(360), Cx0[:,0]+180, Cx0[:,column]) - Cx1 = np.interp(np.arange(360), Cx1[:,0]+180, Cx1[:,column]) - #Cx0 = np.interp(alpha, Cx0[:, 0], Cx0[:, column]) - #Cx1 = np.interp(alpha, Cx1[:, 0], Cx1[:, column]) - th0, th1 = thicknesses[index - 1:index + 1] - cx = Cx0 + (Cx1 - Cx0) * (thickness - th0) / (th1 - th0) - return np.interp(alpha+180, np.arange(360), cx) - - def CL(self, thickness, alpha, pc_set_nr=1): - """Lift coefficient - - Parameters - --------- - thickness : float - thickness [5] - alpha : float - Angle of attack [deg] - pc_set_nr : int optional - pc set number, default is 1, normally obtained from ae-file - - Returns - ------- - Lift coefficient : float - """ - return self._Cxxx(thickness, alpha, 1, pc_set_nr) - - def CL_H2(self, thickness, alpha, pc_set_nr=1): - return self._CxxxH2(thickness, alpha, 1, pc_set_nr) - - def CD(self, thickness, alpha, pc_set_nr=1): - """Drag coefficient - - Parameters - --------- - radius : float - radius [m] - alpha : float - Angle of attack [deg] - pc_set_nr : int optional - pc set number, default is 1, normally obtained from ae-file - - Returns - ------- - Drag coefficient : float - """ - return self._Cxxx(thickness, alpha, 2, pc_set_nr) - - def CM(self, thickness, alpha, pc_set_nr=1): - return self._Cxxx(thickness, alpha, 3, pc_set_nr) - - def __str__(self, comments=None): - """This method will create a string that is formatted like a pc file - with the data in this class. - """ - - if comments is None: - comments = {} - - cols = ['Angle of Attac', 'cl', 'cd', 'cm'] - linefmt = ' '.join(['{%i:%s}' % (i, self.fmt) for i in range(len(cols))]) - - n_sets = len(self.pc_sets) - retval = str(n_sets) + '\n' - for idx_pc, (set_tcs, set_pcs) in self.pc_sets.items(): - retval += str(len(set_tcs)) + '\n' - for i, (tc, pc) in enumerate(zip(set_tcs, set_pcs)): - nr = pc.shape[0] - retval += '%i %i %1.08f\n' % (i+1, nr, tc) - for line in pc: - retval += linefmt.format(*line) + '\n' - return retval - - def save(self, filename): - if not os.path.isdir(os.path.dirname(filename)): - # fails if dirname is empty string - if len(os.path.dirname(filename)) > 0: - os.makedirs(os.path.dirname(filename)) - with open(filename, 'w') as fid: - fid.write(str(self)) - self.filename = filename - - -if __name__ == "__main__": - pcfile = PCFile("tests/test_files/NREL_5MW_pc.txt") - - print (pcfile.CL(21,10)) # CL for thickness 21% and AOA=10deg - #1.358 - print (pcfile.CD(21,10)) # CD for thickness 21% and AOA=10deg - #0.0255 - print (pcfile.CM(21,10)) # CM for thickness 21% and AOA=10deg - #-0.1103 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py deleted file mode 100644 index 91497a0521..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py +++ /dev/null @@ -1,302 +0,0 @@ -''' -Created on 24/04/2014 - -@author: MMPE -''' -import types -import os -import numpy as np - - -stc = "r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e" -fpm = 'r m x_cg y_cg ri_x ri_y pitch x_e y_e K_11 K_12 K_13 K_14 K_15 K_16 K_22' -fpm += ' K_23 K_24 K_25 K_26 K_33 K_34 K_35 K_36 K_44 K_45 K_46 K_55 K_56 K_66' - -class StFile(object): - """Read HAWC2 St (beam element structural data) file - - Methods are autogenerated for: - - - r : curved length distance from main_body node 1 [m] - - m : mass per unit length [kg/m] - - x_cg : xc2-coordinate from C1/2 to mass center [m] - - y_cg : yc2-coordinate from C1/2 to mass center [m] - - ri_x : radius of gyration related to elastic center. Corresponds to rotation about principal bending xe axis [m] - - ri_y : radius of gyration related to elastic center. Corresponds to rotation about principal bending ye axis [m] - - xs : xc2-coordinate from C1/2 to shear center [m]. The shear center is the point where external forces only contributes to pure bending and no torsion. - - ys : yc2-coordinate from C1/2 to shear center [m]. The shear center is the point where external forces only contributes to pure bending and no torsion. - - E : modulus of elasticity [N/m2] - - G : shear modulus of elasticity [N/m2] - - Ix : area moment of inertia with respect to principal bending xe axis [m4]. This is the principal bending axis most parallel to the xc2 axis - - Iy : area moment of inertia with respect to principal bending ye axis [m4] - - K : torsional stiffness constant with respect to ze axis at the shear center [m4/rad]. For a circular section only this is identical to the polar moment of inertia. - - k_x : shear factor for force in principal bending xe direction [-] - - k_y : shear factor for force in principal bending ye direction [-] - - A : cross sectional area [m2] - - pitch : structural pitch about z_c2 axis. This is the angle between the xc2 -axis defined with the c2_def command and the main principal bending axis xe. - - xe : xc2-coordinate from C1/2 to center of elasticity [m]. The elastic center is the point where radial force (in the z-direction) does not contribute to bending around the x or y directions. - - ye : yc2-coordinate from C1/2 to center of elasticity [m]. The elastic center is the point where radial force (in the - - The autogenerated methods have the following structure - - def xxx(radius=None, mset=1, set=1): - Parameters: - ----------- - radius : int, float, array_like or None, optional - Radius/radii of interest\n - If int, float or array_like: values are interpolated to requested radius/radii - If None (default): Values of all radii specified in st file returned - mset : int, optional - Main set number - set : int, optional - Sub set number - - - Examples - -------- - >>> stfile = StFile(r"tests/test_files/DTU_10MW_RWT_Blade_st.dat") - >>> print (stfile.m()) # Mass at nodes - [ 1189.51054664 1191.64291781 1202.76694262 ... 15.42438683] - >>> print (st.E(radius=36, mset=1, set=1)) # Elasticity interpolated to radius 36m - 8722924514.652649 - >>> print (st.E(radius=36, mset=1, set=2)) # Same for stiff blade set - 8.722924514652648e+17 - """ - - def __init__(self, filename=None): - - # in case the user wants to create a new non-existing st file - if filename is None: - self.main_data_sets = {} - return - - with open(filename) as fid: - txt = fid.read() -# Some files starts with first set ("#1...") with out specifying number of sets -# no_maindata_sets = int(txt.strip()[0]) -# assert no_maindata_sets == txt.count("#") - self.main_data_sets = {} - for mset in txt.split("#")[1:]: - mset_nr = int(mset.strip().split()[0]) - set_data_dict = {} - - for set_txt in mset.split("$")[1:]: - set_lines = set_txt.split("\n") - set_nr, no_rows = map(int, set_lines[0].split()[:2]) - assert set_nr not in set_data_dict - try: - # HAWC2 will ignore everything after the 19th element, - # some users have placed comments here after a ; - linelst = [set_lines[i].split(';')[0].split() for i in range(1, no_rows + 1)] - except Exception as e: - print('it went wrong at (set/subset):', mset_nr, set_nr, - 'with', no_rows, 'rows') - raise e - set_data_dict[set_nr] = np.array(linelst, dtype=float) - self.main_data_sets[mset_nr] = set_data_dict - - if len(linelst[0])==len(stc.split()): - self.cols = stc.split() - elif len(linelst[0])==len(fpm.split()): - self.cols = fpm.split() - else: - raise TypeError('wrong number of columns in st file') - - for i, name in enumerate(self.cols): - setattr(self, name, lambda radius=None, mset=1, set=1, - column=i: self._value(radius, column, mset, set)) - - def _value(self, radius, column, mset_nr=1, set_nr=1): - st_data = self.main_data_sets[mset_nr][set_nr] - if radius is None: - radius = self.radius_st(None, mset_nr, set_nr) - return np.interp(radius, st_data[:, 0], st_data[:, column]) - - def radius_st(self, radius=None, mset=1, set=1): - r = self.main_data_sets[mset][set][:, 0] - if radius is None: - return r - return r[np.argmin(np.abs(r - radius))] - - def to_str(self, mset=1, set=1, precision='%12.5e '): - d = self.main_data_sets[mset][set] - return '\n'.join([(precision * d.shape[1]) % tuple(row) for row in d]) - - def set_value(self, mset_nr, set_nr, **kwargs): - for k, v in kwargs.items(): - column = self.cols.index(k) - self.main_data_sets[mset_nr][set_nr][:, column] = v - - def save(self, filename, precision='%15.07e', encoding='utf-8'): - """Save all data defined in main_data_sets to st file. - """ - - # when creating empty st object, cols is not set yet - if not hasattr(self, 'cols'): - if self.main_data_sets[1][1].shape[1]==19: - self.cols = stc.split() - elif self.main_data_sets[1][1].shape[1]==30: - self.cols = fpm.split() - else: - c = self.main_data_sets[1][1].shape[1] - raise TypeError(f'St input needs 19 (iso) or 30 (aniso/fpm) cols, not {c}') - - colwidth = len(precision % 1) - sep = '=' * colwidth * len(self.cols) + '\n' - colhead = ''.join([k.center(colwidth) for k in self.cols]) + '\n' - - nsets = len(self.main_data_sets) - # fails if dirname is empty string - if len(os.path.dirname(filename)) > 0: - os.makedirs(os.path.dirname(filename), exist_ok=True) - with open(filename, 'w', encoding=encoding) as fid: - fid.write('%i ; number of sets, Nset\n' % nsets) - for mset, set_data_dict in self.main_data_sets.items(): - fid.write('#%i ; set number\n' % mset) - for set, set_array in set_data_dict.items(): - dstr = self.to_str(mset=mset, set=set, precision=precision) - npoints = self.main_data_sets[mset][set].shape[0] - fid.write(sep + colhead + sep) - fid.write('$%i %i\n' % (set, npoints)) - fid.write(dstr + '\n') - - def element_stiffnessmatrix(self, radius, mset_nr, set_nr, length): - """Compute the element stiffness matrix - - Parameters - ---------- - radius : float - radius of element (used of obtain element properties - length : float - eleement length - """ - - # not supported for FPM format - if len(self.cols)==30: - return - - K = np.zeros((13, 13)) - "r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e" - ES1, ES2, EMOD, GMOD, IX, IY, IZ, KX, KY, A = [getattr(self, n)(radius, mset_nr, set_nr) - for n in "x_sh,y_sh,E,G,I_x,I_y,I_p,k_x,k_y,A".split(",")] - ELLGTH = length - - ETAX = EMOD * IX / (KY * GMOD * A * ELLGTH**2) - ETAY = EMOD * IY / (KX * GMOD * A * ELLGTH**2) - ROX = 1 / (1 + 12 * ETAX) - ROY = 1 / (1 + 12 * ETAY) - ROY = 1 / (1 + 12 * ETAX) - K[1, 1] = 12 * EMOD * IY * ROY / ELLGTH**3 - K[1, 5] = 6 * EMOD * IY * ROY / ELLGTH**2 - K[1, 6] = -K[1, 1] * ES2 - K[1, 7] = -K[1, 1] - K[1, 11] = K[1, 5] - K[1, 12] = -K[1, 6] - K[2, 2] = 12 * EMOD * IX * ROX / ELLGTH**3 - K[2, 4] = -6 * EMOD * IX * ROX / ELLGTH**2 - K[2, 6] = K[2, 2] * ES1 - K[2, 8] = -K[2, 2] - K[2, 10] = K[2, 4] - K[2, 12] = -K[2, 6] - K[3, 3] = A * EMOD / ELLGTH - K[3, 9] = -K[3, 3] - K[4, 4] = 4 * EMOD * IX * (1 + 3 * ETAX) * ROX / ELLGTH - K[4, 6] = K[2, 4] * ES1 - K[4, 8] = -K[2, 4] - K[4, 10] = 2 * EMOD * IX * (1 - 6 * ETAX) * ROX / ELLGTH - K[4, 12] = -K[4, 6] - K[5, 5] = 4 * EMOD * IY * (1 + 3 * ETAY) * ROY / ELLGTH - K[5, 6] = -K[1, 5] * ES2 - K[5, 7] = -K[1, 5] - K[5, 11] = 2 * EMOD * IY * (1 - 6 * ETAY) * ROY / ELLGTH - K[5, 12] = -K[5, 6] - K[6, 6] = GMOD * IZ / ELLGTH + 12 * EMOD * (IX * ES1**2 * ROX + IY * ES2**2 * ROY) / ELLGTH**3 - K[6, 7] = K[1, 12] - K[6, 8] = K[2, 12] - K[6, 10] = -K[4, 12] - K[6, 11] = -K[5, 12] - K[6, 12] = -K[6, 6] - K[7, 7] = K[1, 1] - K[7, 11] = -K[1, 5] - K[7, 12] = K[1, 6] - K[8, 8] = K[2, 2] - K[8, 10] = -K[2, 4] - K[8, 12] = K[2, 6] - K[9, 9] = K[3, 3] - K[10, 10] = K[4, 4] - K[10, 12] = -K[4, 6] - K[11, 11] = K[5, 5] - K[11, 12] = -K[5, 6] - K[12, 12] = K[6, 6] - K = K[1:, 1:] - K = K + K.T - np.eye(12) * K - return K - - def shape_function_ori(self, radius, mset_nr, set_nr, length, z): - - # not supported for FPM format - if len(self.cols)==30: - return - - XSC, YSC, EMOD, GMOD, IX, IY, IZ, KX, KY, AREA = [getattr(self, n)(radius, mset_nr, set_nr) - for n in "x_sh,y_sh,E,G,I_x,I_y,I_p,k_x,k_y,A".split(",")] - - etax = EMOD * IX / KY / GMOD / AREA / (length**2) - etay = EMOD * IY / KX / GMOD / AREA / (length**2) - rhox = 1 / (1 + 12 * etax) - rhoy = 1 / (1 + 12 * etay) - - f1 = z / length - f2 = 1 - f1 - f3x = f1 * (3 * f1 - 2 * f1**2 + 12 * etax) * rhox - f4x = f2 * (3 * f2 - 2 * f2**2 + 12 * etax) * rhox - f5x = length * (f1**2 - (1 - 6 * etax) * f1 - 6 * etax) * f1 * rhox - f6x = length * (f2**2 - (1 - 6 * etax) * f2 - 6 * etax) * f2 * rhox - f7x = 6 / length * f1 * f2 * rhox - f8x = f1 * (3 * f1 - 2 * (1 - 6 * etax)) * rhox - f9x = f2 * (3 * f2 - 2 * (1 - 6 * etax)) * rhox - - f3y = f1 * (3 * f1 - 2 * f1**2 + 12 * etay) * rhoy - f4y = f2 * (3 * f2 - 2 * f2**2 + 12 * etay) * rhoy - f5y = length * (f1**2 - (1 - 6 * etay) * f1 - 6 * etay) * f1 * rhoy - f6y = length * (f2**2 - (1 - 6 * etay) * f2 - 6 * etay) * f2 * rhoy - f7y = 6 / length * f1 * f2 * rhoy - f8y = f1 * (3 * f1 - 2 * (1 - 6 * etay)) * rhoy - f9y = f2 * (3 * f2 - 2 * (1 - 6 * etay)) * rhoy - - return np.array([[f4y, 0, 0, 0, -f7y, 0], - [0, f4x, 0, f7x, 0, 0], - [0, 0, f2, 0, 0, 0], - [0, f6x, 0, f9x, 0, 0], - [-f6y, 0, 0, 0, f9y, 0], - [(f2 - f4y) * YSC, -(f2 - f4x) * XSC, 0, f7x * XSC, f7y * YSC, f2], - [f3y, 0, 0, 0, f7y, 0], - [0, f3x, 0, -f7x, 0, 0], - [0, 0, f1, 0, 0, 0], - [0, -f5x, 0, f8x, 0, 0], - [f5y, 0, 0, 0, f8y, 0], - [(f1 - f3y) * YSC, -(f1 - f3x) * XSC, 0, -f7x * XSC, -f7y * YSC, f1]]).T - - -if __name__ == "__main__": - import os - cwd = os.path.dirname(__file__) - st = StFile(os.path.join(cwd, r'tests/test_files/DTU_10MW_RWT_Blade_st.dat')) - print(st.m()) - print(st.E(radius=36, mset=1, set=1)) # Elastic blade - print(st.E(radius=36, mset=1, set=2)) # stiff blade - #print (st.radius()) - xyz = np.array([st.x_e(), st.y_e(), st.r()]).T[:40] - n = 2 - xyz = np.array([st.x_e(None, 1, n), st.y_e(None, 1, n), st.r(None, 1, n)]).T[:40] - #print (xyz) - print(np.sqrt(np.sum((xyz[1:] - xyz[:-1]) ** 2, 1)).sum()) - print(xyz[-1, 2]) - print(np.sqrt(np.sum((xyz[1:] - xyz[:-1]) ** 2, 1)).sum() - xyz[-1, 2]) - print(st.x_e(67.8883), st.y_e(67.8883)) - #print (np.sqrt(np.sum(np.diff(xyz, 0) ** 2, 1))) - print(st.pitch(67.8883 - 0.01687)) - print(st.pitch(23.2446)) - - # print (st.) - # print (st.) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst deleted file mode 100644 index 000b67d7c3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst +++ /dev/null @@ -1,3 +0,0 @@ - -More details coming soon! -------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py deleted file mode 100644 index 6e37965272..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ - -# NOTE: we make the main functions available here, so that we can change the interface in the future. -from pyFAST.linearization.tools import getMBCOP, getCampbellDataOP -from pyFAST.linearization.tools import writeModesForViz -from pyFAST.linearization.tools import readModesForViz -from pyFAST.linearization.tools import writeVizFile -from pyFAST.linearization.tools import writeVizFiles - -from pyFAST.linearization.mbc import fx_mbc3 -from pyFAST.linearization.campbell import postproCampbell, plotCampbell, plotCampbellDataFile -from pyFAST.linearization.campbell_data import IdentifyModes -from pyFAST.linearization.campbell_data import IdentifiedModesDict -from pyFAST.linearization.campbell_data import printCampbellDataOP -from pyFAST.linearization.campbell_data import campbellData2TXT -from pyFAST.linearization.campbell_data import extractShortModeDescription -from pyFAST.linearization.campbell_data import campbell_diagram_data_oneOP - -from pyFAST.linearization.linearization import writeLinearizationFiles diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py deleted file mode 100644 index 97793b85d3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py +++ /dev/null @@ -1,515 +0,0 @@ -""" - -Generic functions to help setup a Campbell diagram with OpenFAST - -These are high level functions for manipulate multiple operating points (multiple .fst files). - -For more granularity, see: - - pyFAST.linearization.tools.py - - pyFAST.linearization.campbell_data.py - -Main functions: - -- postproMBC(xlsFile=None, csvBase=None, sortedSuffix=None, csvModesID=None, xlssheet=None): - Generate Cambell diagram data from an xls file, or a set of csv files - - -""" - -import os -import pandas as pd -# import re -import numpy as np -from pyFAST.linearization.tools import getMBCOPs -from pyFAST.linearization.tools import getCampbellDataOPs -from pyFAST.linearization.tools import estimateLengths - -from pyFAST.linearization.campbell_data import campbell_diagram_data_oneOP, campbellData2CSV, campbellData2TXT -from pyFAST.linearization.campbell_data import IdentifyModes - - -def postproCampbell(fstFiles, BladeLen=None, TowerLen=None, verbose=True, - WS_legacy=None, - nFreqOut=500, freqRange=None, posDampRange=None, # Options for TXT output - removeTwrAzimuth=False, starSub=None, removeStatesPattern=None, # Options for A matrix selection - writeModes=None, **kwargs # Options for .viz files - ): - """ - Postprocess linearization files to extract Campbell diagram (linearization at different Operating points) - - Run MBC - - Postprocess to put into "CampbellData" matlab form - - Perform mode identification (work in progress) - - Export to disk - - INPUTS: - - fstFiles: list of fst files - - INPUTS (related to A matrices): - - removeTwrAzimuth: if False do nothing - otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g: 'tower|Drivetrain' or '^AD' - see FASTLinearizationFile. - - INPUTS (related to Campbell_Summary.txt output): - - nFreqOut: maximum number of frequencies to write to Campbell_Summary.txt file - - freqRange: range in which frequencies are "accepted", if None: [-np.inf, np.inf] - - posDampRange: range in which damping are "accepted' , if None: [1e-5, 0.96] - - INPUTS (related to .viz files): - - writeModes: if True, a binary file and a .viz file is written to disk for OpenFAST VTK visualization. - if None, the binary file is written only if a checkpoint file is present. - For instance, if the main file is : 'main.fst', - the binary file will be : 'main.ModeShapeVTK.pyPostMBC' - the viz file will be : 'main.ModeShapeVTK.viz' - the checkpoint file is expected to be : 'main.ModeShapeVTK.chkp' - - **kwargs: list of key/values to be passed to writeVizFile (see function below) - VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None - - OUTPUTS: - - OP: dataframe of operating points - - Freq: dataframe of frequencies for each OP and identified mode - - Damp: dataframe of dampings for each OP and identified mode - - UnMapped: - - ModeData: all mode data all mode data - """ - if len(fstFiles)==0: - raise Exception('postproCampbell requires a list of at least one .fst') - - if len(fstFiles)==1 and os.path.splitext(fstFiles[0])[1]=='.pkl': - # Temporary hack for debugging, using a pickle file - import pickle - CD = pickle.load(open(fstFiles[0],'rb')) - else: - # --- Attemps to extract Blade Length and TowerLen from first file... - CD, MBC = getCampbellDataOPs(fstFiles, writeModes=writeModes, BladeLen=BladeLen, TowerLen=TowerLen, - removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern, verbose=verbose, **kwargs) - - # --- Identify modes - modeID_table,modesDesc=IdentifyModes(CD) - - # --- Write files to disk - # Write csv file for manual identification step.. - baseName = os.path.join(os.path.dirname(fstFiles[0]), 'Campbell') - modeID_file = campbellData2CSV(baseName, CD, modeID_table, modesDesc) - # Write summary txt file to help manual identification step.. - txtFileName = baseName+'_Summary.txt' - campbellData2TXT(CD, txtFileName=txtFileName, nFreqOut=nFreqOut, freqRange=freqRange, posDampRange=posDampRange) - - # --- Return nice dataframes (assuming the identification is correct) - # TODO, for now we reread the files... - OP, Freq, Damp, UnMapped, ModeData = postproMBC(csvModesIDFile=modeID_file, verbose=verbose, WS_legacy=WS_legacy) - - return OP, Freq, Damp, UnMapped, ModeData, modeID_file - -# --------------------------------------------------------------------------------} -# --- Postprocessing -# --------------------------------------------------------------------------------{ -def postproMBC(xlsFile=None, csvModesIDFile=None, xlssheet=None, verbose=True, WS_legacy=None, suffix=''): - """ - Generate Cambell diagram data from an xls file, or a set of csv files - INPUTS: - - xlsFile: path to an excel file, or, basename for a set of csv files generated by campbellFolderPostPro - - csvModesIDFile: filename of csv file containing mode identification table. - Its parent directory is noted csvBase. - Other csv files will be asssumed to located in the same folder: - - csvBase + 'Campbell_OP.csv' - - csvBase + 'Campbell_PointI.csv' I=1..n_Op - - (csvBase + 'Campbell_ModesID.csv') - - vebose: more outputs to screen - - WS_legacy: for OpenFAST 2.3, wind speed is unknown (NaN), a vector of operating point WS is needed - OUTPUTS: - - Freq: dataframe with columns [WS, RPM, Freq_Mode1,.., Freq_ModeN] for the N identified modes - - Damp: dataframe with columns [WS, RPM, Damp_Mode1,.., Damp_ModeN] (damping ratios), for the N identified modes - - UnMapped: dataframe with columns [WS, RPM, Freq, Damp] for all unidenfied modes - - ModesData: low-level data, dictionaries for each OP with frequencies and damping - """ - rpmSweep=False - if xlsFile is not None: - from pandas import ExcelFile - # --- Excel file reading - OPFileName=xlsFile; - IDFileName=xlsFile; - sheets=dict() - # Reading all sheets - if verbose: - print('Reading Excel file: ',xlsFile) - xls = pd.ExcelFile(xlsFile) - dfs = {} - for sheet_name in xls.sheet_names: - # Reading sheet - df = xls.parse(sheet_name, header=None) - if df.shape[0]>0: - sheets[sheet_name]=df - OP = sheets['OP'] - WS = OP.iloc[1,1:].values - RPM = OP.iloc[2,1:].values - ID = None - if any([s.find('mps')>0 for s in sheets.keys()]): - rpmSweep = False - sweepVar = WS - sweepUnit = 'mps' - xlssheet='WS_ModesID' if xlssheet is None else xlssheet - else: - rpmSweep = True - sweepVar = RPM - sweepUnit = 'rpm' - xlssheet ='ModesID' if xlssheet is None else xlssheet - if xlssheet not in sheets.keys(): - raise Exception('Mode identification sheet {} not found in excel file'.format(xlssheet)) - ID = sheets[xlssheet] - # Storing data for each points, we try a bunch of keys since matlab script uses a loose num2str for now - Points=dict() - for i,v in enumerate(sweepVar): - keys=[('{:.'+str(ires)+'f} {:s}').format(v,sweepUnit) for ires in [0,1,2,3,4]] - for k in keys: - try: - Points[i] = sheets[k] - except: - pass - if i not in Points.keys(): - raise Exception('Couldnf find sheet for operating point {:d}'.format(i)) - elif csvModesIDFile is not None: - # --- csv file reading - IDFileName=csvModesIDFile - csvBase=os.path.join(os.path.dirname(csvModesIDFile),'') - OPFileName=csvBase+'Campbell_OP{:}.csv'.format(suffix) - if verbose: - print('Reading csv file: ',OPFileName) - OP = pd.read_csv(OPFileName, sep = ',') - if verbose: - print('Reading csv file: ',IDFileName) - ID = pd.read_csv(IDFileName, sep = ',',header=None) - nCol = OP.shape[1]-1 - naCount = OP.isna().sum(axis=1) - WS = OP.iloc[0,1:].values - RPM = OP.iloc[1,1:].values - del OP - # Storing data for each points into a dict - Points=dict() - for i,v in enumerate(WS): - OPFile = csvBase+'Campbell_Point{:02d}{:}.csv'.format(i+1,suffix) - #print(OPFile, WS[i], RPM[i]) - Points[i] = pd.read_csv(OPFile, sep = ',', header=None, dtype='object') - else: - raise Exception('Provide either an Excel file or a csv (ModesID) file') - # --- Mode Identification - ID.iloc[:,0].fillna('Unknown', inplace=True) # replace nan - ModeNames = ID.iloc[2: ,0].values - ModeIDs = ID.iloc[2: ,1:].values - nModesIDd = len(ModeNames) # Number of modes identified in the ID file - - if ModeIDs.shape[1]!=len(WS): - print('OP Windspeed:',WS) - raise Exception('Inconsistent number of operating points between OP ({} points) and ID ({} points) data.\nOP filename: {}\nID filename: {}\n'.format(ModeIDs.shape[1], len(WS), OPFileName, IDFileName)) - - # --- Extract Frequencies and Damping from Point table - ModeData=[] - ioff=0 - coff=0 - for i,ws in enumerate(WS): - P = Points[i] - opData = dict() - opData['Fnat'] = P.iloc[1+ioff, 1::5+coff].values[:].astype(float) # natural frequencies - opData['Fdmp'] = P.iloc[2+ioff, 1::5+coff].values[:].astype(float) # damped frequencies - opData['Damps'] = P.iloc[3+ioff, 1::5+coff].values[:].astype(float) # Damping values - ModeData.append(opData) - - # ---Dealing with missing WS - if np.any(np.isnan(np.array(WS).astype(float))) or np.all(np.array(WS).astype(float)==0): - print('[WARN] WS were not provided in linearization (all NaN), likely old OpenFAST version ') - if WS_legacy is not None: - print(' > Using WS_legacy provided.') - if len(WS_legacy)!=len(WS): - raise Exception('WS_legacy should have length {} instead of {}'.format(len(WS),len(WS_legacy))) - WS = WS_legacy - else: - print('[WARN] WS was replaced with index!') - WS = np.arange(0,len(WS)) - - # --- Creating a cleaner table of operating points - OP = pd.DataFrame(np.nan, index=np.arange(len(WS)), columns=['WS_[m/s]', 'RotSpeed_[rpm]']) - OP['WS_[m/s]'] = WS - OP['RotSpeed_[rpm]'] = RPM - - UnMapped_WS = [] - UnMapped_RPM = [] - UnMapped_Freq = [] - UnMapped_Damp = [] - # --- Unidentified modes, before "nModes" - for iOP,(ws,rpm) in enumerate(zip(WS,RPM)): - m = ModeData[iOP] - nModesMax = len(m['Fnat']) - #nModes = min(nModesMax, nModesIDd) # somehow sometimes we have 15 modes IDd but only 14 in the ModeData.. - Indices = (np.asarray(ModeIDs[:,iOP])-1).astype(int) - IndicesMissing = [i for i in np.arange(nModesMax) if i not in Indices] - f = np.asarray([m['Fnat'] [iiMode] for iiMode in IndicesMissing]) - d = np.asarray([m['Damps'][iiMode] for iiMode in IndicesMissing]) - ws = np.asarray([ws]*len(f)) - rpm = np.asarray([rpm]*len(f)) - UnMapped_Freq = np.concatenate((UnMapped_Freq, f)) - UnMapped_Damp = np.concatenate((UnMapped_Damp, d)) - UnMapped_WS = np.concatenate((UnMapped_WS, ws)) - UnMapped_RPM = np.concatenate((UnMapped_RPM, rpm)) - ## --- Unidentified modes, beyond "nModes" - #for m,ws,rpm in zip(ModeData,WS,RPM): - # f = m['Fnat'][nModesIDd:] - # d = m['Damps'][nModesIDd:] - # ws = np.asarray([ws]*len(f)) - # rpm = np.asarray([rpm]*len(f)) - # UnMapped_Freq = np.concatenate((UnMapped_Freq, f)) - # UnMapped_Damp = np.concatenate((UnMapped_Damp, d)) - # UnMapped_WS = np.concatenate((UnMapped_WS, ws)) - # UnMapped_RPM = np.concatenate((UnMapped_RPM, rpm)) - - # --- Put identified modes into a more convenient form - cols=[ m.split('-')[0].strip().replace(' ','_') for m in ModeNames] - cols=[v + str(cols[:i].count(v) + 1) if cols.count(v) > 1 else v for i, v in enumerate(cols)] - Freq = pd.DataFrame(np.nan, index=np.arange(len(WS)), columns=cols) - Damp = pd.DataFrame(np.nan, index=np.arange(len(WS)), columns=cols) - for iMode in np.arange(nModesIDd): - ModeIndices = (np.asarray(ModeIDs[iMode,:])-1).astype(int) - ModeName= ModeNames[iMode].replace('_',' ') - if ModeName.find('(not shown)')>0: - f = np.asarray([m['Fnat'][iiMode] for m,iiMode in zip(ModeData,ModeIndices) if iiMode>=0 ]) - d = np.asarray([m['Damps'][iiMode] for m,iiMode in zip(ModeData,ModeIndices) if iiMode>=0 ]) - ws = np.asarray([ws for ws,iiMode in zip(WS,ModeIndices) if iiMode>=0 ]) - rpm = np.asarray([rpm for rpm,iiMode in zip(RPM,ModeIndices) if iiMode>=0 ]) - UnMapped_Freq = np.concatenate((UnMapped_Freq, f)) - UnMapped_Damp = np.concatenate((UnMapped_Damp, d)) - UnMapped_WS = np.concatenate((UnMapped_WS, ws)) - UnMapped_RPM = np.concatenate((UnMapped_RPM, rpm)) - else: - if all(ModeIndices==-1): - print('Mode not IDd: {}, name: {}.'.format(iMode, ModeName)) - else: - f=[] - d=[] - #f2=np.asarray([m['Fnat'] [iiMode] if iiMode>=0 else np.nan for m,iiMode in zip(ModeData,ModeIndices)]) - #d2=np.asarray([m['Damps'][iiMode] if iiMode>=0 else np.nan for m,iiMode in zip(ModeData,ModeIndices)]) - for iOP, (m,iiMode) in enumerate(zip(ModeData, ModeIndices)): - if iiMode<0: - f.append(np.nan) - d.append(np.nan) - elif iiMode>=len(m['Fnat']): - print('[WARN] ID {} for mode `{}` at OP {} is beyond maximum number allowed'.format(iiMode+1, ModeName, iOP+1)) - f.append(np.nan) - d.append(np.nan) - else: - f.append(m['Fnat'] [iiMode]) - d.append(m['Damps'][iiMode]) - Freq.iloc[:, iMode]=f - Damp.iloc[:, iMode]=d - # Removing modes that are full nan (not_shown ones) - # NOTE: damgerous since OP is not part of it anymore - # Freq.dropna(how='all',axis=0,inplace=True) - # Freq.dropna(how='all',axis=1,inplace=True) - # Damp.dropna(how='all',axis=0,inplace=True) - # Damp.dropna(how='all',axis=1,inplace=True) - - # --- UnMapped modes into a dataframe - M = np.column_stack((UnMapped_WS, UnMapped_RPM, UnMapped_Freq, UnMapped_Damp)) - UnMapped = pd.DataFrame(data=M, columns=['WS_[m/s]','RotSpeed_[rpm]','Freq_[Hz]','Damping_[-]']) - - return OP, Freq, Damp, UnMapped, ModeData - - -# --------------------------------------------------------------------------------} -# --- Plotting -# --------------------------------------------------------------------------------{ -def campbellModeStyles(i, lbl): - """ """ - import matplotlib.pyplot as plt - FullLineStyles = [':', '-', '-+', '-o', '-^', '-s', '--x', '--d', '-.', '-v', '-+', ':o', ':^', ':s', ':x', ':d', ':.', '--','--+','--o','--^','--s','--x','--d','--.']; - Markers = ['', '+', 'o', '^', 's', 'd', 'x', '.'] - LineStyles = ['-', ':', '-.', '--']; - Colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] - MW_Light_Blue = np.array([114,147,203])/255. - MW_Light_Orange = np.array([225,151,76])/255. - MW_Light_Green = np.array([132,186,91])/255. - MW_LightLight_Green = np.array([163,230,112])/255. - MW_Light_Red = np.array([226,115,115])/255. - MW_Light_Gray = np.array([128,133,133])/255. - MW_Light_Purple = np.array([144,103,167])/255. - MW_Light_DarkRed = np.array([171,104,87])/255. - MW_Light_Kaki = np.array([204,194,16])/255. - MW_Blue = np.array([57,106,177])/255. - MW_Orange = np.array([218,124,48])/255. - MW_Green = np.array([62,150,81])/255. - MW_Red = np.array([204,37,41])/255. - MW_Gray = np.array([83,81,84])/255. - MW_Purple = np.array([107,76,154])/255. - MW_DarkRed = np.array([146,36,40])/255. - MW_Kaki = np.array([148,139,61])/255. - - lbl=lbl.lower().replace('_',' ') - ms = 4 - c = Colors[np.mod(i,len(Colors))] - ls = LineStyles[np.mod(int(i/len(Markers)),len(LineStyles))] - mk = Markers[np.mod(i,len(Markers))] - # Color - if any([s in lbl for s in ['1st tower']]): - c=MW_Blue - elif any([s in lbl for s in ['2nd tower']]): - c=MW_Light_Blue - elif any([s in lbl for s in ['1st blade edge','drivetrain']]): - c=MW_Red - elif any([s in lbl for s in ['1st blade flap']]): - c=MW_Green - elif any([s in lbl for s in ['2nd blade flap']]): - c=MW_Light_Green - elif any([s in lbl for s in ['3rd blade flap']]): - c=MW_LightLight_Green - elif any([s in lbl for s in ['2nd blade edge']]): - c=MW_Light_Red - elif any([s in lbl for s in ['1st blade torsion']]): - c=MW_Purple - # Line style - if any([s in lbl for s in ['tower fa','collective','drivetrain','coll']]): - ls='-' - elif any([s in lbl for s in ['tower ss','regressive','bw']]): - ls='--' - elif any([s in lbl for s in ['tower ss','progressive','fw']]): - ls='-.' - # Marker - if any([s in lbl for s in ['collective','coll']]): - mk='2'; ms=8 - elif any([s in lbl for s in ['blade','tower','drivetrain']]): - mk=''; - return c, ls, ms, mk - -def plotCampbell(OP, Freq, Damp, sx='WS_[m/s]', UnMapped=None, fig=None, axes=None, ylim=None, legend=True, plotUnMapped=True, ps=[1,3,6,9]): - """ Plot Campbell data as returned by postproMBC - - INPUTS: - - OP : dataframe of operating points (as returned by postMBC) - - Freq : dataframe of Frequencies at each OP (as returned by postMBC) - - OP : dataframe of damping ratios at each OP points (as returned by postMBC) - - sx: label of the dataframes used for the "x" axis of the Campbell plot - OPTIONAL INPUTS: - - UnMapped: dataframe of UnMapped modes - - fig, axes: optional fig and axes used for plotting (freq and damp) - - ylim: limits for the frequency axis - - ps: multiple of "p" (rotational speed) to plot in the background - """ - import matplotlib.pyplot as plt - - - # Init figure - if fig is None: - fig,axes_ = plt.subplots(1,2) - # fig.set_size_inches(7,7.0,forward=True) # default is (6.4,4.8) - fig.set_size_inches(13,7.0,forward=True) # default is (6.4,4.8) - fig.subplots_adjust(top=0.78,bottom=0.11,left=0.04,right=0.98,hspace=0.06,wspace=0.16) - if axes is None: - axes=axes_ - - # Estimating figure range - FreqRange = [0 , np.nanmax(Freq.values)*1.01] - DampRange = [np.nanmin(Damp.iloc[:,2:]), np.nanmax(Damp.values)*1.01] - - if ylim is not None: - FreqRange=ylim - if DampRange[0]>0: - DampRange[0]=0 - - # Plot "background" 1p 3p 6p 9p. Potentiallymake this an option - RPM = OP['RotSpeed_[rpm]'].values - omega = RPM/60*2*np.pi - freq_1p = omega/(2*np.pi) - for p in ps: - axes[0].plot(OP[sx].values, p*freq_1p, ':',color=(0.7,0.7,0.7), lw=1.0) - - # Plot mapped modes - Markers = ['+', 'o', '^', 's', 'd', 'x', '.'] - iModeValid=0 - xPlot=[]; yPlot=[] - for iMode,lbl in enumerate(Freq.columns.values): - if lbl.find('not_shown')>0: - # TODO ADD TO UNMAPPED - continue - iModeValid+=1 - c, ls, ms, mk = campbellModeStyles(iModeValid, lbl) - if len(RPM)==1 and len(mk)==0: - mk = Markers[np.mod(iMode,len(Markers))] - ms=5 - axes[0].plot(OP[sx].values, Freq[lbl].values, ls, marker=mk, label=lbl.replace('_',' '), markersize=ms, color=c) - axes[1].plot(OP[sx].values, Damp[lbl].values, ls, marker=mk , markersize=ms, color=c) - xPlot=np.concatenate((xPlot, OP[sx].values)) - yPlot=np.concatenate((yPlot, Freq[lbl].values)) - - # Unmapped modes (NOTE: plotted after to over-plot) - if plotUnMapped and UnMapped is not None: - axes[0].plot(UnMapped[sx].values, UnMapped['Freq_[Hz]' ].values, '.', markersize=2, color=[0.5,0.5,0.5]) - axes[1].plot(UnMapped[sx].values, UnMapped['Damping_[-]'].values, '.', markersize=1, color=[0.5,0.5,0.5]) - # Highligh duplicates (also after) - Points=[(x,y) for x,y in zip(xPlot,yPlot)] - Plot = pd.Series(Points) - for xDupl,yDupl in Plot[Plot.duplicated()]: - axes[0].plot(xDupl,yDupl, 'o',color='r') - - axes[0].set_xlabel(sx.replace('_',' ')) - axes[1].set_xlabel(sx.replace('_',' ')) - axes[0].set_ylabel('Frequencies [Hz]') - axes[1].set_ylabel('Damping ratios [-]') - if legend: - axes[0].legend(bbox_to_anchor=(0., 1.02, 2.16, .802), loc='lower left', ncol=4, mode="expand", borderaxespad=0.) - if not np.any(np.isnan(FreqRange)): - axes[0].set_ylim(FreqRange) - - XLIM=axes[1].get_xlim() - axes[1].plot(XLIM, [0,0],'-', color='k', lw=0.5) - axes[1].set_xlim(XLIM) - if not np.any(np.isnan(DampRange)): - axes[1].set_ylim(DampRange) - return fig, axes - - -def plotCampbellDataFile(xls_or_csv, ws_or_rpm='rpm', sheetname=None, ylim=None, WS_legacy=None, to_csv=False, suffix='', returnData=False, - fig=None, axes=None, legend=True, plotUnMapped=True, ps=[1,3,6,9]): - """ - Wrapper for plotCampbell, takes an Excel or csv file as argument. Returns a figure. - - INPUTS: - - - - WS_legacy: for OpenFAST 2.3, wind speed is unknown (NaN), a vector of operating point WS is needed - """ - if ws_or_rpm.lower()=='ws': - sx='WS_[m/s]' - else: - sx='RotSpeed_[rpm]' - - ext = os.path.splitext(xls_or_csv)[1].lower() - baseDir = os.path.dirname(xls_or_csv) - basename = os.path.splitext(os.path.basename(xls_or_csv))[0] - - # --- Read xlsx or csv filse - if ext=='.xlsx': - OP, Freq, Damp, UnMapped, ModeData = postproMBC(xlsFile=xls_or_csv,xlssheet=sheetname, WS_legacy=WS_legacy, suffix=suffix) - - elif ext=='.csv': - OP, Freq, Damp, UnMapped, ModeData = postproMBC(csvModesIDFile=xls_or_csv, WS_legacy=WS_legacy, suffix=suffix) - - pass - - else: - raise Exception('Extension should be csv or xlsx, got {} instead.'.format(ext),) - - # --- Plot - fig, axes = plotCampbell(OP, Freq, Damp, sx=sx, UnMapped=UnMapped, ylim=ylim, fig=fig, axes=axes, legend=legend, plotUnMapped=plotUnMapped, ps=ps) - figName = os.path.join(baseDir,basename+'_'+ws_or_rpm) - - if to_csv: - Freq.to_csv(os.path.join(baseDir, 'freq.csv'), index=None, sep=' ', na_rep='NaN') - Damp.to_csv(os.path.join(baseDir, 'damp.csv'), index=None, sep=' ', na_rep='NaN') - OP.to_csv(os.path.join(baseDir, 'op.csv'), index=None, sep=' ', na_rep='NaN') - - if returnData: - return fig, axes, figName, OP, Freq, Damp - else: - return fig, axes, figName - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py deleted file mode 100644 index ca975cb0b3..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py +++ /dev/null @@ -1,692 +0,0 @@ -""" -Tools to manipulate: - - "CDDOP": campbell data at one operating point - - "CampbellData" list of CDDOP (for multiple operating points) - -""" - -import re -import numpy as np - -def campbell_diagram_data_oneOP(mbc_data, BladeLen=None, TowerLen=None): - """ - Return Campbell Data for one Operating Point "CDDOP" - - """ - CDDOP={} - usePercent = False; - # - # mbc_data.eigSol = eiganalysis(mbc_data.AvgA); - ndof = mbc_data['ndof2'] + mbc_data['ndof1']; #size(mbc_data.AvgA,1)/2; # number of translational states - nModes = len(mbc_data['eigSol']['Evals']) - #print(nModes) - DescStates = PrettyStateDescriptions(mbc_data['DescStates'], mbc_data['ndof2'], mbc_data['performedTransformation']); - - ## store indices of max mode for state and to order natural frequencies - #StatesMaxMode_vals = np.amax(mbc_data['eigSol']['MagnitudeModes'],axis=1); # find which mode has the maximum value for each state (max of each row before scaling) - StatesMaxMode = np.argmax(mbc_data['eigSol']['MagnitudeModes'],axis=1); # find which mode has the maximum value for each state (max of each row before scaling) - SortedFreqIndx = np.argsort((mbc_data['eigSol']['NaturalFreqs_Hz']).flatten(),kind="heapsort"); - #print(SortedFreqIndx) - - - if BladeLen is not None and TowerLen is not None: - ## get the scaling factors for the mode rows - ScalingFactor = getScaleFactors(DescStates, TowerLen, BladeLen); - - ## scale the magnitude of the modes by ScalingFactor (for consistent units) - # and then scale the columns so that their maximum is 1 - - ModesMagnitude = np.matmul(np.diag(ScalingFactor), mbc_data['eigSol']['MagnitudeModes']); # scale the rows - #print(ModesMagnitude) - - CDDOP['ScalingFactor'] = ScalingFactor; - else: - ModesMagnitude = mbc_data['eigSol']['MagnitudeModes']; - - if usePercent: - scaleCol = np.sum( ModesMagnitude )/100; # find the sum of the column, and multiply by 100 (divide here) to get a percentage - else: - scaleCol = np.amax(ModesMagnitude,axis=0); #find the maximum value in the column, so the first element has value of 1 - - ModesMagnitude = np.matmul(ModesMagnitude,np.diag(1./scaleCol)) # scale the columns - - # --- Summary data (array for all modes) - CDDOP['NaturalFreq_Hz'] = mbc_data['eigSol']['NaturalFreqs_Hz'][SortedFreqIndx] - CDDOP['DampingRatio'] = mbc_data['eigSol']['DampRatios'][SortedFreqIndx] - CDDOP['RotSpeed_rpm'] = mbc_data['RotSpeed_rpm'] - if 'WindSpeed' in mbc_data: - CDDOP['WindSpeed'] = mbc_data['WindSpeed'] - - #print(ModesMagnitude) - - # --- Storing data per mode - CDDOP['Modes']=[] - for i in range(nModes): - CData={} - CData['NaturalFreq_Hz'] = mbc_data['eigSol']['NaturalFreqs_Hz'][SortedFreqIndx[i]][0] - CData['DampedFreq_Hz'] = mbc_data['eigSol']['DampedFreqs_Hz'][SortedFreqIndx[i]][0]; - CData['DampingRatio'] = mbc_data['eigSol']['DampRatios'][SortedFreqIndx[i]][0]; - - - #print(np.argsort(ModesMagnitude[:,SortedFreqIndx[0]])[::-1]) - # sort indices in descending order - sort_state = np.argsort( ModesMagnitude[:,SortedFreqIndx[i]])[::-1]; - - #print(type(sort_state)) - CData['DescStates']=[DescStates[i] for i in sort_state] - CData['MagnitudePhase']=ModesMagnitude[sort_state,SortedFreqIndx[i]]; - Phase = mbc_data['eigSol']['PhaseModes_deg'][sort_state,SortedFreqIndx[i]]; - # if the phase is more than +/- 90 degrees different than the first - # one (whose value == 1 or is the largest %), we'll stick a negative value on the magnitude: - Phase = np.mod(Phase, 360); - - CData['PhaseDiff'] = np.mod( Phase - Phase[0], 360); # difference in range [0, 360) - PhaseIndx = CData['PhaseDiff'] > 180; - CData['PhaseDiff'][PhaseIndx] = CData['PhaseDiff'][PhaseIndx] - 360; # move to range (-180, 180] - - if ~usePercent: - PhaseIndx = CData['PhaseDiff'] > 90; - CData['MagnitudePhase'][PhaseIndx] = -1*CData['MagnitudePhase'][PhaseIndx]; - CData['PhaseDiff'][PhaseIndx] = CData['PhaseDiff'][PhaseIndx] - 180; - - PhaseIndx = CData['PhaseDiff'] <= -90; - CData['MagnitudePhase'][PhaseIndx] = -1*CData['MagnitudePhase'][PhaseIndx]; - CData['PhaseDiff'][PhaseIndx] = CData['PhaseDiff'][PhaseIndx] + 180; - - #print(CData['MagnitudePhase']) - #print(CData['PhaseDiff']) - - CData['StateHasMaxAtThisMode'] = np.ones(ndof, dtype=bool); - ix = (StatesMaxMode == SortedFreqIndx[i]); - tmp=ix[sort_state] - CData['StateHasMaxAtThisMode']=tmp - - #print(CData['StateHasMaxAtThisMode']) - #print(CData['NaturalFreq_Hz']) - CDDOP['Modes'].append(CData) - - #print(CDDOP[0]['MagnitudePhase']) - # Adding short description to summary - CDDOP['ShortModeDescr'] =[extractShortModeDescription(CDDOP['Modes'][i]) for i in range(nModes)] - - - CDDOP['nColsPerMode'] = 5; - CDDOP['ModesTable'] = {} - - for i in range(nModes): - colStart = i*CDDOP['nColsPerMode']; - CDDOP['ModesTable'][1, colStart+1 ] = 'Mode number:'; - CDDOP['ModesTable'][1, colStart+2 ] = i; - - CDDOP['ModesTable'][2, colStart+1 ] = 'Natural (undamped) frequency (Hz):'; - CDDOP['ModesTable'][2, colStart+2 ] = CDDOP['Modes'][i]['NaturalFreq_Hz'] - - CDDOP['ModesTable'][3, colStart+1 ] = 'Damped frequency (Hz):'; - CDDOP['ModesTable'][3, colStart+2 ] = CDDOP['Modes'][i]['DampedFreq_Hz'] - - CDDOP['ModesTable'][4, colStart+1 ] = 'Damping ratio (-):'; - CDDOP['ModesTable'][4, colStart+2 ] = CDDOP['Modes'][i]['DampingRatio'] - - CDDOP['ModesTable'][5, colStart+1 ] = 'Mode ' + str(i) + ' state description'; - CDDOP['ModesTable'][5, colStart+2 ] = 'State has max at mode ' + str(i); - if usePercent: - CDDOP['ModesTable'][5, colStart+3 ] = 'Mode ' + str(i) + ' contribution (%)'; - else: - CDDOP['ModesTable'][5, colStart+3 ] = 'Mode ' + str(i) + ' signed magnitude'; - - CDDOP['ModesTable'][5, colStart+4 ] = 'Mode ' + str(i) + ' phase (deg)'; - - # need to cross check these 4 lines - CDDOP['ModesTable'][6,colStart+1] = CDDOP['Modes'][i]['DescStates']; - CDDOP['ModesTable'][6,colStart+2] = CDDOP['Modes'][i]['StateHasMaxAtThisMode']; - CDDOP['ModesTable'][6,colStart+3] = CDDOP['Modes'][i]['MagnitudePhase']; - CDDOP['ModesTable'][6,colStart+4] = CDDOP['Modes'][i]['PhaseDiff']; - - #print(CDDOP['ModesTable']) - return CDDOP - - -def getScaleFactors(DescStates, TowerLen, BladeLen): - - ScalingFactor = np.ones(len(DescStates)) - - # look at the state description strings for tower and blade - # translational dofs: - for i in range(len(ScalingFactor)): - - # look for blade dofs: - if DescStates[i].find('blade')!=-1 or DescStates[i].find('Blade')!=-1: - if DescStates[i].find('rotational')==-1: # make sure this isn't a rotational dof from BeamDyn - ScalingFactor[i] = 1.0/BladeLen; - #print(DescStates[i]) - - # look for tower translational dofs: - if DescStates[i].find('tower')!=-1 or DescStates[i].find('Tower')!=-1: - ScalingFactor[i] = 1.0/TowerLen; - - # look for blade dofs: - elif DescStates[i].find('blade')!=-1 or DescStates[i].find('Blade')!=-1: - if DescStates[i].find('rotational')==-1: # make sure this isn't a rotational dof from BeamDyn - ScalingFactor[i] = 1.0/BladeLen; - - return ScalingFactor - - -def printCampbellDataOP(CDDOP, nModesMax=15, nCharMaxDesc=50) : - """ - Print frequencies, damping and mode description for Campbell diagram data at one operating points (CDDOP) - INPUTS: - - CDDOP: dictionary as returned by campbell_diagram_data_oneOP - - nModesMax : Maximum number of modes to be shown - - nCharMaxDesc: Maximum number of characters for description written to screen - OUTPUTS - - Freq: frequencies for each modes - - Damp: Damping for each modes - - See matlab-toolbox/Campbell/printCDDDOP.m - """ - nModesMax = np.min([len(CDDOP['Modes']),nModesMax]) - Freq = np.array([CDDOP['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) - Damp = np.array([CDDOP['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)]) - print('Mode, NatFreq_[Hz], Damp_Ratio_[-], LogDec._[%], Mode_content_[-]') - for i in np.arange(nModesMax): - Mode = CDDOP['Modes'][i] - # Extracting description the best we can - Desc = extractShortModeDescription(Mode) - print('{:3d} ,{:12.3f}, {:8.5f} , {:7.4f}, {:s}'.format(i+1,Mode['NaturalFreq_Hz'],Mode['DampingRatio'],Mode['DampingRatio']*100*2*np.pi, Desc[:min(nCharMaxDesc,len(Desc))])) - return Freq, Damp - - -# --------------------------------------------------------------------------------} -# --- Manipulation of multiple operating points -# --------------------------------------------------------------------------------{ - -def campbellData2TXT(CD, txtFileName=None, nFreqOut=500, freqRange=None, posDampRange=None, skipNonEDBD=True): - """ Write frequencies, damping, and mode contents for each operating points to a string - Write to file if filename provided - INPUTS: - - nFreqOut: maximum number of frequencies to write to Campbell_Summary.txt file - - freqRange: range in which frequencies are "accepted", if None: [-np.inf, np.inf] - - posDampRange: range in which damping are "accepted' , if None: [1e-5, 0.96] - """ - if not isinstance(CD, list): - CD=[CD] - if freqRange is None: - freqRange =[-np.inf, np.inf] - if posDampRange is None: - posDampRange =[1e-5, 0.96] - - def mode2txtline(cd, im): - m = cd['Modes'][im] - Desc = cd['ShortModeDescr'][im] - zeta = m['DampingRatio'] - return '{:03d} ; {:8.3f} ; {:7.4f} ; {:s}\n'.format(im+1,m['NaturalFreq_Hz'],m['DampingRatio'],Desc) - - txt='' - for iOP,cd in enumerate(CD): - WS = cd['WindSpeed'] - RPM = cd['RotSpeed_rpm'] - nFreqOut_loc = np.min([len(cd['Modes']),nFreqOut]) - txt+='# -----------------------------------------------------------------------\n' - txt+='# --- OP {:d} - WS {:.1f} - RPM {:.2f} \n'.format(iOP+1, WS, RPM) - txt+='# -----------------------------------------------------------------------\n' - txt+='# --- "Selected" modes\n' - txt+='# ID; Freq [Hz]; Zeta [-]; Mode content\n' - skippedDamp=[] - skippedFreq=[] - skippedEDBD=[] - for im in np.arange(nFreqOut_loc): - m = cd['Modes'][im] - Desc = cd['ShortModeDescr'][im] - zeta = m['DampingRatio'] - freq = m['NaturalFreq_Hz'] - hasED = Desc.find('ED')>=0 - hasBD = Desc.find('BD')>=0 - hasAD = Desc.find('AD')>=0 - if (freq>freqRange[1] or freqposDampRange[1] or abs(zeta)0: - txt+='# --- Skipped (No ED/BD)\n' - for im in skippedEDBD: - txt+=mode2txtline(cd, im) - if len(skippedFreq)>0: - txt+='# --- Skipped (Frequency outside of `freqRange`={})\n'.format(freqRange) - for im in skippedFreq: - txt+=mode2txtline(cd, im) - if len(skippedDamp)>0: - txt+='# --- Skipped (Damping outside of `posDampRange`={})\n'.format(posDampRange) - for im in skippedDamp: - txt+=mode2txtline(cd, im) - if txtFileName is not None: - with open(txtFileName, 'w') as f: - f.write(txt) - return txt - -def campbellData2CSV(baseName, CD, modeID_table, modesDesc): - # Write summary of Campbell data and modes identification to several CSV files - # The files generated will be: - # - [BaseName '_ModesID.csv '] - # - [BaseName '_OP.csv '] - # - [BaseName '_PointsXX.csv'] for each operating point where XX is the index. - # - # INPUTS: - # - BaseName : basename that will be used to create the different CSV Files - # - ModesData: structure as returned by IdentifyModes - - nModes = modeID_table.shape[0] - nOP = modeID_table.shape[1] - filenames=[] - - # --- Write ModeID using Matlab format - filename='{:s}_ModesID.csv'.format(baseName) - filenames.append(filename) - with open(filename, 'w') as f: - f.write('Mode Number Table,' +','.join(['']*nOP) +'\n') - if np.isnan(CD[0]['WindSpeed']): - f.write('Rotor Speed (rpm),' +','.join([str(cd['RotSpeed_rpm']) for cd in CD]) +'\n') - else: - f.write('Wind Speed (mps),' +','.join([str(cd['WindSpeed']) for cd in CD]) +'\n') - for im, v in enumerate(modesDesc): - f.write(v[0]+',' +','.join([str(ID) for ID in modeID_table[im,:]]) +'\n') - - # --- Write OP using Matlab format - filename='{:s}_OP.csv'.format(baseName) - filenames.append(filename) - with open(filename, 'w') as f: - f.write('Operating Points,' +','.join(['']*nOP) +'\n') - f.write('Wind Speed (mps),' +','.join([str(cd['WindSpeed']) for cd in CD]) +'\n') - f.write('Rotor Speed (rpm),' +','.join([str(cd['RotSpeed_rpm']) for cd in CD]) +'\n') - - # --- Write Modes for each OP - for iOP,cd in enumerate(CD): - filename='{:s}_Point{:02d}.csv'.format(baseName,iOP+1) - filenames.append(filename) - with open(filename, 'w') as f: - Modes = cd['Modes'] - f.write(','.join(['Mode Number:,{:d},,,'.format(im+1) for im,m in enumerate(Modes)]) +'\n') - f.write(','.join(['Natural (undamped) frequency (Hz):, {:f},,,'.format(m['NaturalFreq_Hz']) for im,m in enumerate(Modes)]) +'\n') - f.write(','.join(['Damped frequency (Hz):, {:f},,,'.format(m['DampedFreq_Hz']) for im,m in enumerate(Modes)]) +'\n') - f.write(','.join(['Damping Ratio (-):, {:f},,,'.format(m['DampingRatio']) for im,m in enumerate(Modes)]) +'\n') - f.write(','.join(['Mode {:d} state description,State has max at mode {:d},Mode {:d} signed magnitude,Mode {:d} phase (deg),'.format(im+1,im+1,im+1,im+1) for im,m in enumerate(Modes)]) +'\n') - nComp = len(Modes[0]['DescStates']) - for iC in np.arange(nComp): - f.write(','.join(['{:s},{:d},{:f},{:f},'.format(m['DescStates'][iC].replace(',',' '),m['StateHasMaxAtThisMode'][iC],m['MagnitudePhase'][iC],m['PhaseDiff'][iC]) for im,m in enumerate(Modes)]) +'\n') - - return filenames[0] - - -def IdentifyModes(CampbellData): - """ - Attempts to perform an identification of the modes. - For now, the method is based on the energy content of the modes, and the state descriptions where the energy is maximum - - Original contribution by: Srinivasa B. Ramisett, ramisettisrinivas@yahoo.com, http://ramisetti.github.io - """ - #import pickle - #pickle.dump(CampbellData, open('C:/Work/_libs/python-toolbox/data/_CampbellData_UA4_DB2.pkl','wb')) - - - # --- Looking at states descriptions (of first run, first mode), to see if we are offshore. - # NOTE: DescStates is likely the same for all modes - DescStates = CampbellData[0]['Modes'][0]['DescStates'] - hasHeave = any(['heave' in s.lower() for s in DescStates]) - hasSurge = any(['surge' in s.lower() for s in DescStates]) - hasSway = any(['sway' in s.lower() for s in DescStates]) - hasYaw = any(['platform yaw' in s.lower() for s in DescStates]) - hasRoll = any(['platform roll tilt' in s.lower() for s in DescStates]) - hasPitch = any(['platform pitch tilt' in s.lower() for s in DescStates]) - hasEdge1Col = any(['1st edgewise bending-mode dof of blade collective' in s.lower() for s in DescStates]) - - # --- Setting up a list of modes with - modesDesc = [] - modesDesc.append( ['Generator DOF (not shown)' , 'ED Variable speed generator DOF, rad'] ) - # Platform DOFs - if hasSurge: - modesDesc.append( ['Platform surge', 'ED Platform horizontal surge translation DOF, m'] ) - if hasSway: - modesDesc.append( ['Platform sway', 'ED Platform horizontal sway translation DOF, m'] ) - if hasHeave: - modesDesc.append( ['Platform heave', 'ED Platform vertical heave translation DOF, m'] ) - if hasRoll: - modesDesc.append( ['Platform roll', 'ED Platform roll tilt rotation DOF, rad'] ) - if hasPitch: - modesDesc.append( ['Platform pitch', 'ED Platform pitch tilt rotation DOF, rad'] ) - if hasYaw: - modesDesc.append( ['Platform yaw', 'ED Platform yaw rotation DOF, rad'] ) - - modesDesc.append( ['1st Tower FA' , 'ED 1st tower fore-aft bending mode DOF, m'] ) - modesDesc.append( ['1st Tower SS' , 'ED 1st tower side-to-side bending mode DOF, m'] ) - modesDesc.append( ['1st Blade Flap (Regressive)' , 'ED 1st flapwise bending-mode DOF of blade (sine|cosine), m', r'Blade (sine|cosine) finite element node \d rotational displacement in Y, rad'] ) - modesDesc.append( ['1st Blade Flap (Collective)' , 'ED 1st flapwise bending-mode DOF of blade collective, m', r'Blade collective finite element node \d rotational displacement in Y, rad'] ) - modesDesc.append( ['1st Blade Flap (Progressive)' , 'ED 1st flapwise bending-mode DOF of blade (sine|cosine), m'] ) # , ... # 'Blade (sine|cosine) finite element node \d rotational displacement in Y, rad'] - modesDesc.append( ['1st Blade Edge (Regressive)' , 'ED 1st edgewise bending-mode DOF of blade (sine|cosine), m', r'Blade (sine|cosine) finite element node \d rotational displacement in X, rad'] ) - if hasEdge1Col: - modesDesc.append(['1st Blade Edge (Collective)', 'ED 1st edgewise bending-mode DOF of blade collective, m'] ) # , ... # 'Blade (sine|cosine) finite element node \d rotational displacement in Y, rad'] - modesDesc.append( ['1st Blade Edge (Progressive)' , 'ED 1st edgewise bending-mode DOF of blade (sine|cosine), m'] ) - modesDesc.append( ['1st Drivetrain Torsion' , 'ED Drivetrain rotational-flexibility DOF, rad'] ) - modesDesc.append( ['2nd Tower FA' , 'ED 2nd tower fore-aft bending mode DOF, m'] ) - modesDesc.append( ['2nd Tower SS' , 'ED 2nd tower side-to-side bending mode DOF, m'] ) - modesDesc.append( ['2nd Blade Flap (Regressive)' , 'ED 2nd flapwise bending-mode DOF of blade (sine|cosine), m'] ) - modesDesc.append( ['2nd Blade Flap (Collective)' , 'ED 2nd flapwise bending-mode DOF of blade collective, m', r'Blade collective finite element node \d rotational displacement in Y, rad'] ) - modesDesc.append( ['2nd Blade Flap (Progressive)' , 'ED 2nd flapwise bending-mode DOF of blade (sine|cosine), m'] ) - modesDesc.append( ['Nacelle Yaw (not shown)' , 'ED Nacelle yaw DOF, rad'] ) - - - nModes = int(len(modesDesc)) - nRuns = int(len(CampbellData)) - modeID_table=np.zeros((nModes,nRuns)).astype(int) - - - - def doesDescriptionMatch(description, listOfModePatterns): - """ loop through all mode desrption """ - for iModePattern, modeIDdescList in enumerate(listOfModePatterns): - modeIDName = modeIDdescList[0] - patternList = modeIDdescList[1:] # list of patterns for a given mode - found, pattern = doesDescriptionMatchPatternList(description, patternList) - if found: - return True, iModePattern, pattern - return False, -1, '' - - def doesDescriptionMatchPatternList(description, patternList): - """ loop through all patterns to find a match """ - for pattern in patternList: - # Looking for targetDesc into description - if re.search(pattern ,description, re.IGNORECASE)!=None: - return True, pattern - return False, '' - - - verbose=False - Levels=[1,2,3] - - - # --- Loop on operating points/Runs - for i in range(nRuns): - Modes = CampbellData[i]['Modes'] - nModes = len(Modes) - # Array of logical, False for Modes that are not identified - modesIdentified = [False] * nModes - modesSkipped = [False] * nModes - #verbose=verbose and i==0 # only display for first mode for now.. - #verbose=i==1 - - # --- Give an index to each mode so that we can easily identify them - for im, mode in enumerate(Modes): - mode['index']=im - - # --- Skip modes based on simple criteria - for im, mode in enumerate(Modes): - if mode['NaturalFreq_Hz'] < 1e-5 or mode['DampingRatio'] > 0.98: - modesSkipped[im]=True - - - - modesDescLocal = modesDesc.copy() - - # --- Level 1 - Find well-defined modes (modes which have only one Max) - if 1 in Levels: - for im, mode in enumerate(Modes): - if modesIdentified[im] or modesSkipped[im]: - continue # skip this mode since it has already been identified - stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==1)).flatten() - if len(stateMax)==1: - description = mode['DescStates'][stateMax[0]] - if description.startswith('AD'): - # We skipp the pure "AD" modes - modesSkipped[im] = True - continue - found, modeID, patternMatched = doesDescriptionMatch(description, modesDescLocal) - if found and modeID_table[modeID,i]==0: - modesDescLocal[modeID] = [None,] # we empty this mode patternlist so that it cannot be matched again - modesIdentified[im] = True - modeID_table[modeID,i] = im+1 # Using Matlab Indexing - if verbose: - print('L1 Mode {} identified using pattern: {}'.format(im+1,patternMatched)) - print(' String was: ', description) - #else: - # print('>>> Cannot identify mode with description {}. Update MBC3 script.'.format(description)) - - # --- Level 2 - Find modes with several max - Looping on mode pattern to respect expected frequency order - if 2 in Levels: - for modeID, modeIDdescList in enumerate(modesDescLocal): - modeIDName = modeIDdescList[0] - patternList = modeIDdescList[1:] - # Skip modes already identified above - if modeID_table[modeID,i]>0: - continue - if verbose: - print('------------------------- LEVEL 2 - LOOKING FOR MODE ',modeIDName) - - found = False; - # --- Loop on all non-identified modes in increasing order - im = 0; - for im, mode in enumerate(Modes): - if modesIdentified[im] or modesSkipped[im]: - continue # move to next mode - # List of component descriptions where this mode has maximum values - stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==1)).flatten() - descriptions = np.array(mode['DescStates'])[stateMax] - descriptions = descriptions[:7] # we keep only the first 7 descriptions - descriptionsED = [d for d in descriptions if d.startswith('ED')] - descriptionsBD = [d for d in descriptions if d.startswith('BD')] - descriptionsAD = [d for d in descriptions if d.startswith('AD')] - descriptionsMisc = [d for d in descriptions if d not in descriptionsED+descriptionsBD+descriptionsAD] - descriptions = descriptionsED+descriptionsBD+descriptionsMisc # NOTE: we skipp AD descriptions - j = 0; - for description in descriptions: - found, pattern = doesDescriptionMatchPatternList(description, patternList) - if found: - if verbose: - print('L2 Mode {} identified using pattern {}'.format(im+1,pattern)) - modeID_table[modeID,i] = im+1 # Using Matlab Indexing - modesDescLocal[modeID] = [None,] # we empty this mode patternlist so that it cannot be matched again - modesIdentified[im] = True; - break - if found: - break - if verbose: - print('>> modeIDTable',modeID_table[:,i]) - # We disqualify modes that had max and that didn't match anything: - for im, mode in enumerate(Modes): - if modesIdentified[im] or modesSkipped[im]: - continue # move to next mode - stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==1)).flatten() - if len(stateMax)>=1: - modesSkipped[im]=True - shortdescr = CampbellData[i]['ShortModeDescr'][im] - if verbose: - if shortdescr.find('ED')>=0: - print('>>>> short', CampbellData[i]['ShortModeDescr'][im]) - print('>>>> Problem in IdentifyModes. ED DOF found in level 2') - - if 3 in Levels: - # --- Level 3 - Try our best for modes with no max - # Loop on modes to be identified - for modeID, modeIDdescList in enumerate(modesDescLocal): - modeIDName = modeIDdescList[0] - patternList = modeIDdescList[1:] - - # Skip modes already identified above - if modeID_table[modeID,i]>0: - continue - if verbose: - print('------------------------- LEVEL 3 - LOOKING FOR MODE ',modeIDName) - - found = False; - # --- Loop on all non-identified modes in increasing order - im = 0; - while not found and im < nModes: # Loop on modes - mode = Modes[im] - if modesIdentified[im] or modesSkipped[im]: - pass - else: - # --- Otherwise, use as mode descriptions the other ones. Seems weird - stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==0)).flatten() - descriptions = np.array(mode['DescStates'])[stateMax] - ADcounts = np.sum([s.startswith('AD') for s in descriptions[:5]]) - - descriptions2= np.array(mode['DescStates'])[mode['StateHasMaxAtThisMode']] - if len(descriptions2) == 0: - noMax=True - descriptions3 = mode['DescStates'][:5] - else: - noMax=False - if ADcounts<5: - descriptions=[d for d in descriptions if not d.startswith('AD')] -# descriptionsED = [d for d in descriptions if d.startswith('ED')] -# descriptionsBD = [d for d in descriptions if d.startswith('BD')] -# descriptionsAD = [d for d in descriptions if d.startswith('AD')] -# descriptionsMisc = [d for d in descriptions if d not in descriptionsED+descriptionsBD+descriptionsAD] -# descriptions = descriptionsED+descriptionsBD+descriptionsMisc # NOTE: we skipp AD descriptions - descriptions = descriptions[:5] # we keep only the first 7 descriptions - if verbose: - print('>>> Mode',mode['index'], modesIdentified[im], modesSkipped[im]) - print('>>>> descr', [replaceModeDescription(s) for s in descriptions]) - print('>>>> short', CampbellData[i]['ShortModeDescr'][im]) - else: - descriptions=[] -# #descriptions = descriptions[:7] # we keep only the first 7 descriptions - - j = 0; - while not found and j < len(descriptions): - j = j + 1; - if not found: - for targetDesc in patternList: - # Looking for targetDesc into list of descriptions - if re.search(targetDesc ,descriptions[j-1],re.IGNORECASE)!=None: - modeID_table[modeID,i] = im+1 # Using Matlab Indexing - if verbose: - print('L3 Mode {} identified as {}'.format(im+1,targetDesc)) - print(' String was: ', descriptions[j-1]) - modesIdentified[im] = True; - found = True; - break; - im=im+1; # increment counter - if verbose: - print('>> modeIDTable',modeID_table[:,i]) - - if verbose: - print('---------- Summary') - for j in np.arange(len(modeID_table)): - print('{:32s} {:d}'.format(modesDesc[j][0],modeID_table[j,i])) - print('---------- ') - - - return modeID_table,modesDesc - -def IdentifiedModesDict(CampbellData,modeID_table,modesDesc): - """ - To be called with the results of IdentifyModes. - Create a list of dictionaries to more easily interprete the result - """ - nOP = modeID_table.shape[1] - modesInfoPerOP=[] - for iOP in np.arange(nOP): - modesInfo={} - for i in np.arange(len(modesDesc)): - desc = modesDesc[i][0] - ID = int(modeID_table[i,iOP]) - if ID==0: - freq=np.nan - damp=np.nan - cont='' - else: - freq = np.around(CampbellData[iOP]['Modes'][ID-1]['NaturalFreq_Hz'],5) - damp = np.around(CampbellData[iOP]['Modes'][ID-1]['DampingRatio'],5) - cont = CampbellData[iOP]['ShortModeDescr'][ID-1] - modesInfo[desc]={'ID':ID,'f0':freq,'zeta':damp,'cont':cont} - modesInfoPerOP.append(modesInfo) - return modesInfoPerOP - -def extractShortModeDescription(mode): - """ - Look at which modes have max, append these description, perform shortening substitution - The description starts with noMax if no maximum exsits in this mode - The ElastoDyn modes are placed first - """ - descriptions = np.array(mode['DescStates'])[mode['StateHasMaxAtThisMode']] - if len(descriptions) == 0: - noMax=True - descriptions = mode['DescStates'][:5] - else: - noMax=False - sED = [s for s in descriptions if s.startswith('ED')] - sBD = [s for s in descriptions if s.startswith('BD')] - sMisc = [s for s in descriptions if s not in sED+sBD] - sAll = [replaceModeDescription(s) for s in sED+sBD+sMisc] - shortdescr = ' - '.join(sAll) - if noMax: - shortdescr = 'NoMax - ' + shortdescr - return shortdescr - - -def replaceModeDescription(s): - """ Perform substitutions to make the mode description shorter""" - s = s.replace('Blade','Bld') - s = s.replace('blade','Bld') - s = s.replace('First time derivative of','d/dt of') - s = s.replace('fore-aft bending mode DOF, m','FA') - s = s.replace('side-to-side bending mode DOF, m','SS') - s = s.replace('bending-mode DOF of Bld ','') - s = s.replace(' rotational-flexibility DOF, rad','-rot') - s = s.replace('rotational displacement in ','rot') - s = s.replace('translational displacement in ','trans') - s = s.replace('Platform horizontal surge translation DOF','Platform surge') - s = s.replace('Platform vertical heave translation DOF','Platform heave') - s = s.replace('Platform pitch tilt rotation DOF','Platform pitch') - s = s.replace(', rad','') - s = s.replace(', m','') - s = s.replace('finite element node ','N') - s = s.replace('cosine','cos') - s = s.replace('sine','sin') - s = s.replace('flapwise','FLAP') - s = s.replace('edgewise','EDGE') - s = s.replace('collective','coll.') - s = s.replace('rotZ','TORS-ROT') - s = s.replace('transX','FLAP-DISP') - s = s.replace('transY','EDGE-DISP') - s = s.replace('rotX','EDGE') - s = s.replace('rotY','FLAP') - return s - - -def PrettyStateDescriptions(DescStates, ndof2, performedTransformation): - idx=np.array(list(range(0,ndof2))+list(range(ndof2*2+1,len(DescStates)))) - tmpDS = [DescStates[i] for i in idx] - - if performedTransformation: - key_vals=[['BD_1','Blade collective'],['BD_2','Blade cosine'],['BD_3','Blade sine'],['blade 1','blade collective'], ['blade 2','blade cosine'], ['blade 3','Blade sine '], - ['PitchBearing1','Pitch bearing collective '], ['PitchBearing2','Pitch bearing cosine '], ['PitchBearing3','Pitch bearing sine '], - ['at Blade', 'at blade'], - ['of Blade', 'of blade'], - ] - # Replace Substrings from String List - sub = dict(key_vals) - for key, val in sub.items(): - for idx, ele in enumerate(tmpDS): - if key in ele: - tmpDS[idx] = ele.replace(key, val) - - StateDesc=tmpDS - else: - StateDesc = tmpDS - - for i in range(len( StateDesc )): - First = re.split(r'\(',StateDesc[i],2) - Last = re.split(r'\)',StateDesc[i],2) - - if len(First)>0 and len(Last)>0 and len(First[0]) != len(StateDesc[i]) and len( Last[-1] ) != len(StateDesc[i]): - StateDesc[i] = (First[0]).strip() + Last[-1]; - #print(StateDesc[i]) - - return StateDesc - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md deleted file mode 100644 index dd76b04bdf..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md +++ /dev/null @@ -1,15 +0,0 @@ -This directory contains different working examples to work with the linearization package and the linearization file outputs of OpenFAST. - - -Examples using low-level functions: - -- `ex1a_OneLinFile_SimpleEigenAnalysis.py`: read a .lin file, extract the A matrix, and perform and eigenvalue analysis -- `ex1b_OneLinFile_NoRotation.py`: post-process one linearization file from OpenFAST (still using the MBC). - - -Examples using higher-level functions: - -- `ex3a_MultiLinFile_Campbell.py`: Script to to post-process several linearization files generated by different OpenFAST simulations. - -- `runCampbell.py`: Generates a Campbell diagram; write OpenFAST input files, run openfast, postprocess the linearization files, and generate the Campbell diagram plot. Requires an openfast executable. - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py deleted file mode 100644 index cf3213c3b4..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -- Open a lin file generated by OpenFAST -- Perform a simple eigenvalue analysis of the A matrix (not performing MBC) - -- Example on how to extract submatrices of the A,B,C,D - -""" -import os -import numpy as np -from pyFAST.tools.eva import eigA -from pyFAST.input_output.fast_linearization_file import FASTLinearizationFile -scriptDir = os.path.dirname(__file__) - -# --- Open lin File -linFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_BladeOnly/Main.1.lin') -lin = FASTLinearizationFile(linFile) -print('Keys available:',lin.keys()) - -# --- Perform eigenvalue analysis -#fd, zeta, Q, f0 = eigA(lin['A']) -fd, zeta, Q, f0 = lin.eva() -print('Nat. freq. [Hz], Damping ratio [%]') -print(np.column_stack((np.around(f0,4),np.around(zeta*100,4)))) - -# --- Using dataframes instead of numpy arrays for convenient indexing of variables -dfs = lin.toDataFrame() -print('Dataframe available:',dfs.keys()) -A = dfs['A'] -print(A.columns) - -# --- Extract sub matrix for tower degrees of freedom -#EDdof = ['qt1FA_[m]' ,'qt1SS_[m]' ,'qt2FA_[m]' ,'qt2SS_[m]'] -#EDvel = ['d_qt1FA_[m/s]','d_qt1SS_[m/s]','d_qt2FA_[m/s]','d_qt2SS_[m/s]'] -#print(A.loc[EDvel,EDdof]) # - M^{-1}K (stiffness) -#print(A.loc[EDvel,EDvel]) # - M^{-1}D (damping) - - -if __name__=='__main__': - np.testing.assert_almost_equal(fd[:3], [0.672, 1.079,1.981],3) - np.testing.assert_almost_equal(zeta[:3]*100, [0.474, 0.471,0.489],3) - -if __name__=='__test__': - np.testing.assert_almost_equal(fd[:3], [0.672, 1.079,1.981],3) - np.testing.assert_almost_equal(zeta[:3]*100, [0.474, 0.471,0.489],3) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py deleted file mode 100644 index c760ba19a7..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Script to postprocess one linearization file from OpenFAST. -NOTE: this should not be used if the rotor is turning (multiple lin files would be needed). -This script would typically be used for a standstill analysis (no rotation), -or to compute modes of when only isolated degrees of freedom are turned on (and no rotation). - -NOTE: should match the script found in the matlab-toolbox -""" -import os -import numpy as np -import pyFAST.linearization as lin - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -# Script Parameters -BladeLen = 40.04 # Blade length, used to tune relative modal energy [m] -TowerLen = 55.59 # Tower length, used to tune relative modal energy [m] -lin_file = os.path.join(scriptDir,'../../../data/example_files/Standstill.1.lin') # Linearization file - -# Get Campbell Diagram Data for one Operating Point (CDDOP) given a .lin file -# Performing MBC (NOTE: not stricly necessary without rotation) -CDDOP, MBC = lin.getCampbellDataOP([lin_file], BladeLen=BladeLen, TowerLen=TowerLen) - -# Outputs to screen -Freq,Damp = lin.printCampbellDataOP(CDDOP, nModesMax=10, nCharMaxDesc=50) - -if __name__=='__main__': - pass - -if __name__=='__test__': - np.testing.assert_almost_equal(Freq[:3] ,[0.427, 0.450, 0.669], 3) - np.testing.assert_almost_equal(Damp[:3]*np.pi*2*100,[1.9505,2.1309,5.0649], 4) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py deleted file mode 100644 index 773a95f27c..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Script to postprocess multiple lin files from OpenFAST. - - the multiple lin files are obtained for the same periodic operating point (OP) - - the different lin files are assumed to be at different azimuthal positions - - MBC3 is performed to go from rotating frame to fixed frame - - binary mode file is written so that openFAST can be rerun - - viz file is written -""" -import os -import glob -import numpy as np -import pyFAST.linearization as lin - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -# --- Script Parameters -simDir = os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Land_Lin_Rotating/') # Simulation directory -fstFile = os.path.join(simDir,'./Main.fst') # fstFile, lin files will be assumed to be basename.i.lin -vizDict = {'VTKLinModes':15, 'VTKLinScale':10} # Options for .viz file. Default values are: VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None - - -# --- Get Campbell Diagram Data for one Operating Point (CDDOP) given an OpenFAST input file -# Perform MBC transformation based on all lin files found next to .fst file -CDDOP, MBCOP = lin.getCampbellDataOP(fstFile, writeModes=True, verbose=True) # alternatively provide a list of lin files - -# --- Write Viz file -vizfile = lin.writeVizFile(fstFile, verbose=True, **vizDict) - -# --- Outputs to screen -Freq,Damp = lin.printCampbellDataOP(CDDOP, nModesMax=10, nCharMaxDesc=50) - -if __name__=='__main__': - pass - -if __name__=='__test__': - np.testing.assert_almost_equal(Freq[:4], [0.588, 0.722 , 0.842, 0.937],3) - np.testing.assert_almost_equal(Damp[:4]*100, [63.106, 52.529, 44.01, 1.634],3) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py deleted file mode 100644 index 6694a4f3d6..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Script to post-process several linearization files generated by different OpenFAST simulations. - -Each OpenFAST simulation is considered to be at a different operating point (OP). -Typically, this is run for several wind speed/RPM. - -A Campbell diagram is plotted, showing the frequencies and damping of each modes for each operating point. - -An attempt to identify the turbine modes is done by the script, but a manual sorting is usually needed. -This is done by opening the csv file generated (Campbell_ModesID.csv), and changing the indices. - -The "plot call" at the end of the script can then be repeated with the updated csv file. - - -""" -import os -import glob -import numpy as np -import matplotlib.pyplot as plt -import pyFAST.linearization as lin - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -# --- Script Parameters -fstFiles = glob.glob(os.path.join(scriptDir,'../../../data/linearization_outputs/*.fst')) # list of fst files where linearization were run, lin file will be looked for -# fstFiles = glob.glob(os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Land_Lin_Rotating/*.fst')) # list of fst files where linearization were run, lin file will be looked for -fstFiles.sort() # Important for unittest - -# --- Step 3: Run MBC, identify Modes, generate CSV files, and binary modes -# Find lin files, perform MBC, and try to identify modes. A csv file is written with the mode IDs. -OP, Freq, Damp, UnMapped, ModeData, modeID_file = lin.postproCampbell(fstFiles, writeModes=True, verbose=True) - -# Edit the mode ID file manually to better identify/distribute the modes -print('[TODO] Edit this file manually: ',modeID_file) -# modeID_file='Campbell_ModesID_Sorted.csv' - -# --- Step 4: Plot Campbell -fig, axes, figName = lin.plotCampbellDataFile(modeID_file, 'ws', ylim=None) - - - -# --- Step 5: Generate visualization data (for advanced users) - -# --- Step 5a: Write viz files (Only useful if OpenFAST was run with WrVTK=3) -vizDict = {'VTKLinModes':2, 'VTKLinScale':10} # Options for .viz file. Default values are: VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None -vizFiles = lin.writeVizFiles(fstFiles, verbose=True, **vizDict) - -# --- Step 5b: Run FAST with VIZ files to generate VTKs -import pyFAST.case_generation.runner as runner -simDir = os.path.dirname(fstFiles[0]) -fastExe = os.path.join(scriptDir, '../../../data/openfast.exe') -### Option 1 write a batch file and run it -# batchfile = runner.writeBatch(os.path.join(simDir,'_RUNViz.bat'), vizFiles, fastExe=fastExe, flags='-VTKLin') -# runner.runBatch(batchfile) -### Option 2: direct calls -# runner.run_cmds(vizFiles, fastExe, showOutputs=True, flags=['-VTKLin']) - -# --- Step 5c: Convert VTKs to AVI - TODO -# % Also, this is experimental and users might need to adapt the inputs and batchfile content -# pvPython = 'pvpython'; % path to paraview-python binary -# pythonPlotScript = 'C:/Work/FAST/matlab-toolbox/Campbell/plotModeShapes.py'; % path to python plot script -# paraviewStateFile = 'C:/Work/FAST/matlab-toolbox/Campbell/ED_Surfaces.pvsm'; % path to paraview State file -# writeAVIbatch([simulationFolder '/_RunAVI.bat'], simulationFolder, operatingPointsFile, pvPython, pythonPlotScript, paraviewStateFile); - -if __name__=='__main__': -# plt.show() - pass - -if __name__=='__test__': - # Something weird is happening on github action, order is different, - np.testing.assert_almost_equal(Freq['1st_Tower_FA'][:2], [0.324446, 0.331407],3) - np.testing.assert_almost_equal(Damp['1st_Tower_FA'][:2], [0.00352, 0.06034],4) - np.testing.assert_almost_equal(OP['WS_[m/s]'], [0, 3],2) - np.testing.assert_almost_equal(OP['RotSpeed_[rpm]'], [0, 6.972],2) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py deleted file mode 100644 index 0f0841588b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py +++ /dev/null @@ -1,94 +0,0 @@ -""" -Example script to create a Campbell diagram with OpenFAST -This script does not use the "trim" option, which means the user needs to provide a large simulation time (simTime) after which linearization will be done. - -NOTE: This script is only an example. - The example data is suitable for OpenFAST 2.5. - -Adapt this script to your need, by calling the different subfunctions presented. - -The script should be consistent with the one found in the matlab toolbox - -""" - -import numpy as np -import pandas as pd -import os -import pyFAST.linearization as lin -import pyFAST.case_generation.runner as runner - -import matplotlib.pyplot as plt - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -def campbell_example(writeFSTfiles=True, runFAST=True, postproLin=True): - """ Main flags - writeFSTfiles = True # Write OpenFAST input files based on template and operatingPointsFile - runFAST = True # Run OpenFAST - postproLin = True # Postprocess the linearization outputs (*.lin) - """ - - # --- Parameters to generate linearization input files - simulationFolder = os.path.join(scriptDir, '../../../data/NREL5MW/_5MW_Land_Lin_Trim/') # Output folder for input files and linearization (will be created) - templateFstFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Templates/Main.fst') # Main file, used as a template - operatingPointsFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Templates/LinearizationPoints_NoServo.csv') - nPerPeriod = 36 # Number of linearization per revolution - - # --- Parameters to run OpenFAST - fastExe = os.path.join(scriptDir, '../../../data/openfast.exe') # Path to a FAST exe (and dll) - - # --- Step 1: Write OpenFAST inputs files for each operating points - baseDict = {'DT':0.01} # Example of how inputs can be overriden (see case_gen.py templateReplace) - fstFiles = lin.writeLinearizationFiles(templateFstFile, simulationFolder, operatingPointsFile, nPerPeriod=nPerPeriod, baseDict=baseDict) - - # Create a batch script (optional) - runner.writeBatch(os.path.join(simulationFolder,'_RUN_ALL.bat'), fstFiles, fastExe=fastExe) - - # --- Step 2: run OpenFAST - if runFAST: - runner.run_fastfiles(fstFiles, fastExe=fastExe, parallel=True, showOutputs=True, nCores=4) - - # --- Step 3: Run MBC, identify Modes, generate CSV files, and binary modes - if postproLin: - OP, Freq, Damp, _, _, modeID_file = lin.postproCampbell(fstFiles, writeModes=True, verbose=True) - # Edit the modeID file manually to identify the modes - print('[TODO] Edit this file manually: ',modeID_file) - - # --- Step 4: Campbell diagram plot - csvFile = os.path.join(simulationFolder, 'Campbell_ModesID.csv') # <<< TODO Change me if manual identification is done - fig, axes, figName = lin.plotCampbellDataFile(csvFile, ws_or_rpm='ws', ylim=[0,4]) - # fig.savefig(figName+'.png') - - - - # --- Step 5: Generate visualization data (for advanced users) - - # --- Step 5a: Write viz files (Only useful if OpenFAST was run with WrVTK=3) - vizDict = {'VTKLinModes':10, 'VTKLinScale':10} # Options for .viz file. Default values are: - vizFiles = lin.writeVizFiles(fstFiles, verbose=True, **vizDict) - - # --- Step 5b: Run FAST with VIZ files to generate VTKs - simDir = os.path.dirname(fstFiles[0]) - ### Option 1 write a batch file and run it - # batchfile = runner.writeBatch(os.path.join(simDir,'_RUNViz.bat'), vizFiles, fastExe=fastExe, flags='-VTKLin') - # runner.runBatch(batchfile) - ### Option 2: direct calls - # runner.run_cmds(vizFiles, fastExe, showOutputs=True, flags=['-VTKLin']) - - # --- Step 5c: Convert VTKs to AVI - TODO - # % Also, this is experimental and users might need to adapt the inputs and batchfile content - # pvPython = 'pvpython'; % path to paraview-python binary - # pythonPlotScript = 'C:/Work/FAST/matlab-toolbox/Campbell/plotModeShapes.py'; % path to python plot script - # paraviewStateFile = 'C:/Work/FAST/matlab-toolbox/Campbell/ED_Surfaces.pvsm'; % path to paraview State file - # writeAVIbatch([simulationFolder '/_RunAVI.bat'], simulationFolder, operatingPointsFile, pvPython, pythonPlotScript, paraviewStateFile); - - -if __name__=='__main__': - campbell_example(runFAST=False) - plt.show() - -if __name__=='__test__': - campbell_example(runFAST=False, postproLin=False) - pass # this example needs an openfast binary - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py deleted file mode 100644 index 9d0dc90584..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py +++ /dev/null @@ -1,396 +0,0 @@ -""" -Tools for OpenFAST linearization, that rely on pyFAST - -Generic tools are found in campbell.py and mbc - - -Main functions --------------- -def campbell(caseFile, mainFst, tStart, nPerPeriod, workDir, toolboxDir, matlabExe, fastExe, - baseDict=None, generateInputs=True, runFast=True, runMBC=True, prefix='',sortedSuffix=None, ylim=None) - Wrapper function to perform a Campbell diagram study - -def writeLinearizationFiles(main_fst, workDir, operatingPointsFile, - nPerPeriod=36, baseDict=None, tStart=100, - LinInputs=0, LinOutputs=0) - Write FAST inputs files for linearization, to a given directory `workDir`. - - - - -Sub functions -------------- -def readOperatingPoints(OP_file): - Reads an "Operating Point" delimited file to a pandas DataFrame - -def defaultFilenames(OP, rpmSweep=None): - Generate default filenames for linearization based on RotorSpeed (for rpmSweep) or WindSpeed - -""" -import os, glob -import pandas as pd -import numpy as np -from pyFAST.linearization.campbell import postproCampbell, plotCampbell - -# TODO Alternative, Aeroelastic SE -#--- Used for functions campbell, -import pyFAST.case_generation.runner as runner -from pyFAST.input_output import FASTInputFile -from pyFAST.input_output import FASTInputDeck -from pyFAST.case_generation.case_gen import templateReplace - -def campbell(templateFstFile, operatingPointsFile, workDir, toolboxDir, fastExe, - nPerPeriod=36, baseDict=None, tStart=5400, trim=True, viz=False, - trimGainPitch = 0.001, trimGainGenTorque = 300, - maxTrq= None, - generateInputs=True, runFast=True, runMBC=True, prefix='',sortedSuffix=None, ylim=None, - removeTwrAzimuth=False, starSub=None, removeStatesPattern=None # Options for A matrices - ): - """ - Wrapper function to perform a Campbell diagram study - see: writeLinearizationFiles, postproLinearization and postproMBC for more description of inputs. - - INPUTS: - - templateFstFile Main file, used as a template - - operatingPointsFile input file with WS, RPM, Pitch, and potentially gen torque and tower top FA - - tStart Time after which linearization is done (need to reach periodic steady state) - - nPerPeriod Number of linearizations per revolution - - workDir Output folder for FAST input files and linearization (will be created) - - fastExe Full path to a FAST exe (and dll) - - toolboxDir path to matlab-toolbox - - matlabExe path the matlab or octave exe - - prefix: strings such that the output files will looked like: [folder prefix ] - - sortedSuffix use a separate file where IDs have been sorted - - runFast Logical to specify whether to run the simulations or not - - removeTwrAzimuth: if False do nothing - otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g: 'tower|Drivetrain' or '^AD' - see FASTLinearizationFile. - """ - Cases=pd.read_csv(caseFile); Cases.rename(columns=lambda x: x.strip(), inplace=True) - - # --- Generating input files - if generateInputs: - #GenTorq = Cases['GenTrq_[kNm]'] # TODO - # Generate input files - fastfiles= writeLinearizationFiles(mainFst, workDir, operatingPointsFile, - nPerPeriod=nPerPeriod, baseDict=baseDict, tStart=tStart, trim=trim, viz=viz, - trimGainPitch=trimGainPitch, trimGainGenTorque=trimGainGenTorque, - prefix=prefix, maxTrq=maxTrq) - # Create a batch script (optional) - runner.writeBatch(os.path.join(workDir,'_RUN_ALL.bat'),fastfiles,fastExe=fastExe) - - # --- Run the simulations - if runFast: - runner.run_fastfiles(fastfiles, fastExe=fastExe, parallel=True, showOutputs=True, nCores=3) - - # --- Postprocess linearization outputs (MBC + modes ID) - if runMBC: - OP, Freq, Damp, _, _, modeID_file = postproCampbell(FSTfilenames, removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern, suffix=suffix) - - # --- Plot Campbell - fig, axes = plotCampbell(OP, Freq, Damp, sx='WS_[m/s]', UnMapped=UnMapped, ylim=ylim) - #fig, axes = plotCampbell(Freq, Damp, sx='RPM_[rpm]', UnMapped=UnMapped) - # fig.savefig('{:s}CampbellWS.png'.format(suffix)) - return OP, Freq, Damp, fig - - -def readOperatingPoints(OP_file): - """ - Reads an "Operating Point" delimited file to a pandas DataFrame - - The standard column names are (in any order): - - RotorSpeed_[rpm], WindSpeed_[m/s], PitchAngle_[deg], GeneratorTorque_[Nm], Filename_[-] - - """ - OP=pd.read_csv(OP_file); - for c in OP.columns: - if c.lower().find('kn-m')>1 or c.lower().find('knm')>1: - OP[c]*=1000 - OP.rename(columns=lambda x: x.strip().lower().replace(' ','').replace('_','').replace('(','[').split('[')[0], inplace=True) - # Perform column replacements (tolerating small variations) - # format: old:new - OP.rename(columns={'wind':'windspeed','ws': 'windspeed'}, inplace=True) - OP.rename(columns={'rotorspeed': 'rotorspeed', 'rpm': 'rotorspeed','omega':'rotorspeed'}, inplace=True) - OP.rename(columns={'file': 'filename'}, inplace=True) - OP.rename(columns={'pitch': 'pitchangle', 'bldpitch':'pitchangle'}, inplace=True) - OP.rename(columns={'gentrq': 'generatortorque', 'gentorque':'generatortorque'}, inplace=True) - OP.rename(columns={'ttdspfa': 'ttdspfa'}, inplace=True) - OP.rename(columns={'oopdefl': 'oopdefl'}, inplace=True) - OP.rename(columns={'amean': 'a_bar', 'ameanfromct': 'a_bar'}, inplace=True) - - # Standardizing column names - OP.rename(columns={ - 'rotorspeed': 'RotorSpeed_[rpm]', - 'rotspeed': 'RotorSpeed_[rpm]', - 'windspeed' : 'WindSpeed_[m/s]', - 'pitchangle': 'PitchAngle_[deg]', - 'generatortorque': 'GeneratorTorque_[Nm]', - 'filename': 'Filename_[-]', - 'ttdspfa': 'TTDspFA_[m]', - 'oopdefl': 'OoPDefl_[m]', - 'a_bar': 'a_bar_[-]', - }, inplace=True) - if 'FileName_[-]' not in OP.columns: - OP['Filename_[-]']=defaultFilenames(OP) - return OP - -def defaultFilenames(OP, rpmSweep=None): - """ - Generate default filenames for linearization based on RotorSpeed (for rpmSweep) or WindSpeed - If RotorSpeed is a field, windspeed is preferred for filenames, unless, rpmSweep is set to true as input - - INPUTS: - - OP: structure with field RotorSpeed, and optionally WindSpeed - OPTIONAL INPUTS: - - rpmSweep : if present, overrides the logic: if true, rpm is used, otherwise ws - OUTPUTS: - - filenames: list of strings with default filenames for linearization simulations - """ - - if rpmSweep is None: - if 'WindSpeed_[m/s]' not in OP.columns: - rpmSweep=True - elif len(np.unique(OP['WindSpeed_[m/s]']))==1: - rpmSweep=True - else: - rpmSweep=False - nOP=len(OP['RotorSpeed_[rpm]']); - filenames=['']*nOP; - for iOP, line in OP.iterrows(): - if rpmSweep: - filenames[iOP]='rpm{:05.2f}.fst'.format(line['RotorSpeed_[rpm]']) - else: - filenames[iOP]='ws{:04.1f}.fst'.format(line['WindSpeed_[m/s]']) - return filenames - -def writeLinearizationFiles(main_fst, workDir, operatingPointsFile, - nPerPeriod=36, baseDict=None, tStart=5400, trim=True, viz=False, - trimGainPitch = 0.001, trimGainGenTorque = 300, - maxTrq= None, - LinInputs=0, LinOutputs=0): - """ - Write FAST inputs files for linearization, to a given directory `workDir`. - - - INPUTS: - - main_fst: path to an existing .fst file - This file (and the ones it refers to) will be used as templates. - Values of the templates can be modified using `baseDict`. - The parent directory of the main fst file will be copied to `workDir`. - - workDir: directory (will be created) where the simulation files will be generated - - - operatingPointsFile: csv file containing operating conditions - - nPerPeriod : number of linearization points per rotation (usually 12 or 36) - - baseDict : a dictionary of inputs files keys to be applied to all simulations - Ignored if not provided. - e.g. baseDict={'DT':0.01, 'EDFile|ShftTilt':-5, 'InflowFile|PLexp':0.0} - see templateReplaceGeneral. - - tStart: time at which the linearization will start. - When triming option is not available, this needs to be sufficiently large for - the rotor to reach an equilibrium - - trim: flag to use the trim option (more TODO) - - viz : flag to setup the files to use VTK vizualization of modes (more TODO) - - trimGainPitch : [only for OpenFAST>2.3] Gain for Pitch trim (done around Max Torque) - - trimGainGenTorque : [only for OpenFAST>2.3] Gain for GenTrq trim (done below Max Torque) - - maxTrq: maximum/rated generator torque in Nm, we'll use this to determine which trim to do - - LinInputs: linearize wrt. inputs (see OpenFAST documentation). {0,1,2, default:1} - - LinOutputs: linearize wrt. outputs (see OpenFAST documentation). {0,1, default:0} - - OUTPUTS: - - list of fst files created - """ - - # --- Optional values - if baseDict is None: - baseDict=dict() - - # --- Checking main fst file - deck = FASTInputDeck(main_fst, ['ED','AD']) - fst = deck.fst - ED = deck.fst_vt['ElastoDyn'] # TODO update using basedict - AD = deck.AD # TODO update using basedict - - # Update fst file with basedict if needed - fst_keys = fst.keys() - for k,v in baseDict.items(): - if k in fst_keys: - print('Updating fst file key {} from {} to {}'.format(k,fst[k],v)) - fst[k] = v - - # Sanity checks - if fst['CompAero']>0: - if AD is None: - raise Exception('Unable to read AeroDyn file but the file will be needed to generate cases.') - if ED is None: - raise Exception('Unable to infer BladeLen, ElastoDyn file not found.') - BladeLen = ED['TipRad'] - ED['HubRad'] - hasTrim = 'TrimCase' in fst.keys() - - - # --- Reading operating points - OP = readOperatingPoints(operatingPointsFile) - - if fst['CompServo']==1: - if 'GeneratorTorque_[Nm]' not in OP: - raise Exception('`GeneratorTorque_[Nm]` not found in operating point file. It needs to be provided when the controller is active (`CompServo>0`).') - if maxTrq is None: - maxTrq = np.max(OP['GeneratorTorque_[Nm]']) - # TODO, safety checks - # if SD['PCMode'),[0]) - # error('When CompServo is 1, the PCMode should be 0 or 1'); - # if ~ismember(GetFASTPar(paramSD,'VSContrl'),[0,1]) - # error('When CompServo is 1, the VSContrl should be 0 or 1'); - - if trim and not hasTrim: - trim=False - print('[WARN] Deactivating trim since not available in this version of OpenFAST') - if viz and not hasTrim: - viz=False - print('[WARN] Deactivating VTK vizualization since not available in this version of OpenFAST') - - if AD is not None: - if AD['WakeMod']==2 and AD['DBEMT_Mod'] in [1,3]: - if 'a_bar_[-]' not in OP.keys(): - print('[WARN] Axial induction `a` not present in Operating point file, but DBEMT needs `tau1_constant`. Provide this column, or make sure your value of `tau1_const` is valid') - - - # --- Generating list of parameters that vary based on the operating conditions provided - PARAMS = [] - for i, op in OP.iterrows(): - # Extract operating conditions (TODO, handling of missing fields) - ws = op['WindSpeed_[m/s]'] - rpm = op['RotorSpeed_[rpm]'] - pitch = op['PitchAngle_[deg]'] - filename = op['Filename_[-]'] - if 'TTDspFA_[m]' in op.keys(): - tt= op['TTDspFA_[m]'] - else: - tt=None - if 'OoPDefl_[m]' in op.keys(): - oop= op['OoPDefl_[m]'] - else: - oop=None - - # Main Flags - noAero=abs(ws)<0.001 - - nLinTimes = nPerPeriod - if abs(rpm)<0.001: - nLinTimes=1 - ws=1e-4 - - # Determine linearization times based on RPM and nPerPeriod - Omega = rpm/60*2*np.pi - if trim: - LinTimes=[9999]*nLinTimes - Tmax = tStart - else: - if abs(Omega)<0.001: - LinTimes = [tStart] - Tmax = tStart+1 - else: - T = 2*np.pi/Omega - LinTimes = np.linspace(tStart,tStart+T,nLinTimes+1)[:-1] - Tmax = tStart+1.01*T - # --- Creating "linDict", dictionary of changes to fast input files for linearization - linDict=dict() - linDict['__name__'] = os.path.splitext(filename)[0] - # --- Main fst options - linDict['TMax'] = Tmax - linDict['TStart'] = 0 - - if noAero: - if not viz: # viz require aerodyn.. - linDict['CompAero'] = 0 - linDict['CompInflow'] = 0 - # --- Linearization options - linDict['Linearize'] = True - if trim: - linDict['CalcSteady'] = True - if fst['CompServo']==1: - GenTrq= op['GeneratorTorque_[Nm]'] - trq_rat = np.abs((GenTrq -maxTrq))/maxTrq*100 - print('ws {:5.2f} - GenTrq {:9.1f} - ratio: {:9.2f} '.format(ws, GenTrq, trq_rat), end='') - if abs(op['GeneratorTorque_[Nm]']-maxTrq)/maxTrq*100 < 5 and (not noAero): - linDict['TrimCase'] = 3 # Adjust Pitch to get desired RPM - linDict['TrimGain'] = trimGainPitch; - print('Trim: {} - Gain: {}'.format(3, trimGainPitch)) - # TrimGain = .1 / (RotSpeed(iOP) * pi/30); %-> convert RotSpeed to rad/s - # TrimGain = TrimGain*0.1 - # NOTE: set rated speed to a small value so that Qgen=Qrated - linDict['ServoFile|VS_RtGnSp'] = 0.01 - else: - linDict['TrimCase'] = 2 # Adjust GenTorque to get desired RPM - linDict['TrimGain'] = trimGainGenTorque; - print('Trim: {} - Gain: {}'.format(2, trimGainGenTorque)) - # TrimGain = 3340 / (RotSpeed(iOP) * pi/30); %-> convert RotSpeed to rad/s - else: - # NOTE: in that case, trimming will just "wait", trim variable is not relevant - linDict['TrimCase'] = 3 - linDict['TrimGain'] = 0.001 - # TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only when CalcSteady=True] - # TrimTol - Tolerance for the rotational speed convergence [>eps] [used only when CalcSteady=True] - # TrimGain - Proportional gain for the rotational speed error (rad/(rad/s) or Nm/(rad/s)) [>0] [used only when CalcSteady=True] - # Twr_Kdmp - Damping factor for the tower (N/(m/s)) [>=0] [used only when CalcSteady=True] - # Bld_Kdmp - Damping factor for the blade (N/(m/s)) [>=0] [used only when CalcSteady=True] - else: - linDict['CalcSteady'] = False - linDict['NLinTimes'] = len(LinTimes) - linDict['LinTimes'] = list(LinTimes) - linDict['OutFmt'] = '"ES20.11E3"' # Important for decent resolution - linDict['LinInputs'] = LinInputs # 0: none, 1: standard, 2: to get full linearizations - linDict['LinOutputs'] = LinOutputs # 0: none, 1: based on outlist - # --- Mode shape vizualization options - if viz: - linDict['WrVTK'] = 3 - linDict['VTK_type'] = 1 - linDict['VTK_fields'] = True - linDict['VTK_fps'] = 30 - else: - linDict['WrVTK'] = 0 - # --- Aero options - if fst['CompAero']>0: - if AD['WakeMod']==2 and AD['DBEMT_Mod'] in [1,3]: - if 'a_bar_[-]' in OP.keys(): - a_bar= op['a_bar_[-]'] - linDict['AeroFile|tau1_const'] = np.around(1.1/(1-1.3*min(a_bar,0.5))*BladeLen/ws, 3) - print('>>> setting tau_1 to ', linDict['AeroFile|tau1_const']) - # linDict['AeroFile|WakeMod'] = 1 # Needed for linearization - # linDict['AeroFile|AFAeroMod'] = 1 # Needed for linearization - # linDict['AeroFile|FrozenWake'] = True # Needed for linearization - # --- Inflow options - if fst['CompInflow']>0: - linDict['InflowFile|WindType'] = 1 - linDict['InflowFile|HWindSpeed'] = ws - # --- ElastoDyn options - linDict['EDFile|BlPitch(1)'] = pitch - linDict['EDFile|BlPitch(2)'] = pitch - linDict['EDFile|BlPitch(3)'] = pitch - linDict['EDFile|RotSpeed'] = rpm - if tt is not None: - linDict['EDFile|TTDspFA'] = tt - if oop is not None: - linDict['EDFile|OoPDefl'] = oop - # --- Servo options - - # --- Merging linDict dictionary with user override inputs - for k,v in baseDict.items(): - if k in linDict and v != linDict[k]: - print('Overriding key {} with value {} (previous value {})'.format(k,v,linDict[k])) - linDict[k]=v - - PARAMS.append(linDict) - - # --- Generating all files in a workDir - refDir = os.path.dirname(main_fst) - main_file = os.path.basename(main_fst) - fastfiles = templateReplace(PARAMS,refDir,outputDir=workDir,removeRefSubFiles=True,main_file=main_file) - - return fastfiles - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py deleted file mode 100644 index cf9f4e1d48..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py +++ /dev/null @@ -1,639 +0,0 @@ -############################################################# -# Extract OpenFAST Matrices from linearization files # -# Authors: Srinivasa B. Ramisetti # -# Created: 01-July-2020 # -# E-mail: ramisettisrinivas@yahoo.com # -# Web: http://ramisetti.github.io # -############################################################# -#!/usr/bin/env python - -import os, distutils -import collections -from itertools import islice -import numpy as np -import re -from pyFAST.input_output.fast_linearization_file import FASTLinearizationFile - -def _isbool(str): - flag=0 - if str=='T' or str=='True': - flag=1 - return flag - - -def findBladeTriplets(rotFrame, Desc, verbose=True): - - # Find the number of, and indices for, triplets in the rotating frame: - chkStr = [r'[Bb]lade \d', r'[Bb]lade [Rr]oot \d', r'BD_\d', r'[Bb]\d', r'[Bb]lade\d', r'PitchBearing\d', r'\d'] - - origDesc = Desc; - - # hack for ElastoDyn state names (remove unnecessary text in parenthesis) - for i in range(len(rotFrame)): - if Desc[i] is None: - raise Exception('Description not defined, likely a bug.') - ix = Desc[i].find('(internal DOF index = ') - if ix>0: - ix2 = Desc[i].find(')') - Desc[i] = Desc[i][:ix]+Desc[i][ix2+1:] - - - NTriplets = 0; # first initialize to zero - Triplets = []; - for i in range(len(rotFrame)): # loop through inputs/outputs/states - if rotFrame[i] == 'T': # this is in the rotating frame - Tmp = -1*np.ones(3) - foundTriplet = False - foundBladeNumber = False - for chk in chkStr: - BldNoCol = re.search(chk,Desc[i]) - if BldNoCol!=None: - foundBladeNumber = True - - Bldstr=BldNoCol.group() - # create another regular expression to find the - # exact match on a different blade: - strng = re.split(Bldstr,Desc[i],1) #this should return the strings before and after the match - - - FirstStr = strng[0] + Bldstr[:len(Bldstr)-1] + '.' - checkThisStr = FirstStr + strng[1] - - #we need to get rid of the special characters that - #may exist in Desc{}: - checkThisStr=checkThisStr.replace(')',r'\)').replace('(', r'\(').replace('^',r'\^') - FirstStr = FirstStr. replace(')',r'\)').replace('(', r'\(').replace('^',r'\^') - - k = int(Bldstr[len(Bldstr)-1]) - Tmp[k-1] = int(i) - break - - #print(Tmp,j) - - # find the other match values - if foundBladeNumber: - for j in range((i+1),len(rotFrame)): # loop through all remaining control inputs - #print(i, j) - if rotFrame[j]: # this is in the rotating frame - BldNoCol = re.search(checkThisStr, Desc[j]) - if BldNoCol!=None: - Num = re.search(FirstStr,Desc[j]).group(); - k = int(Num[len(Num)-1]); - Tmp[k-1] = int(j); # save the indices for the remaining blades - #TmpTmp=Tmp+1 - #print(BldNoCol.group(),i,j,k) - if ( (Tmp>-1).all() ): # true if all the elements of Tmp are nonzero; thus, we found a triplet of rotating indices - foundTriplet = True; - - Triplets.append(Tmp); # these are the indices for control input triplets in the rotating frame - - NTriplets = NTriplets + 1; # this is the number of control input triplets in the rotating frame - - # we'll set rotFrame to false so that we don't have to check the found channels again; also allows us to throw error if we have a rotating channel that doesn't have a unique match - for idx in Tmp: - id=int(idx) - rotFrame[id] = 0; - - break; - - if foundTriplet==False: - if verbose: - print('Rotating channel "', i, Desc[i], '" does not form a unique blade triplet. Blade(s) not found: ', np.array(np.where(Tmp == -1))+1 ) - else: - if verbose: - print( 'Could not find blade number in rotating channel "', Desc[i], '".') - #print(NTriplets) - #print(Triplets) - - return Triplets, NTriplets - -def reOrderByIdx_1D(arry,Indi): - tmp=[None]*len(arry) - j=0 - for i in Indi: - tmp[i]=arry[j] - j=j+1 - return tmp - -def reOrderByIdx_2D(arry,Indi,Indj): - #tmp=[[None]*arry.shape[0]]*arry.shape[1] - tmp=np.empty((arry.shape[0], arry.shape[1])) - #print(arry.shape, len(Indi), len(Indj)) - if arry.shape[0]!= len(Indi): - Indi=np.arange(0,arry.shape[0]) - if arry.shape[1]!= len(Indj): - Indj=np.arange(0,arry.shape[1]) - - p=0 - q=0 - for i in Indi: - q=0 - for j in Indj: - tmp[i][j]=arry[p][q] - q=q+1 - p=p+1 - return tmp - -def getStateOrderingIndx(matData): - - #StateOrderingIndx={} - StateOrderingIndx = np.arange(0,matData['NumStates']) - lastModName = ''; - lastModOrd = 0; - mod_nDOFs = 0; # number of DOFs in each module - sum_nDOFs2 = 0; # running total of second-order DOFs - sum_nDOFs1 = 0; # running total of first-order DOFs - indx_start = 0; # starting index of the modules - - for i in range(0,matData['NumStates']): - - tmp=(matData['DescStates'][i]); # name of the module whose states we are looking at - modName = tmp.split(' ')[0] - ModOrd = matData['StateDerivOrder'][i] - - if lastModName!=modName or lastModOrd!= ModOrd: - # this is the start of a new set of DOFs, so we'll set the - # indices for the last matrix - if lastModOrd == 2: - mod_nDOFs = int(mod_nDOFs/2); - #print('mmmm ', mod_nDOFs, indx_start, matData['ndof2'], i) - StateOrderingIndx[ indx_start :(indx_start+mod_nDOFs)] = sum_nDOFs2 + np.arange(0,mod_nDOFs); # q2 starts at 1 - StateOrderingIndx[ (indx_start+mod_nDOFs):(i)] = sum_nDOFs2 + matData['ndof2'] + np.arange(0,mod_nDOFs); # q2_dot starts at matData.ndof2 + 1 - - sum_nDOFs2 = sum_nDOFs2 + mod_nDOFs; - else: - if indx_start < mod_nDOFs: - StateOrderingIndx[indx_start:(indx_start+mod_nDOFs)] = sum_nDOFs1 + matData['NumStates2'] + np.arange(0,mod_nDOFs); # q1 starts at matData.NumStates2 + 1 - - sum_nDOFs1 = sum_nDOFs1 + mod_nDOFs; - - # reset for a new module (or new 1st-order states in the same module) - mod_nDOFs = 0; - - indx_start = i; #start of this module - lastModName = modName; - lastModOrd = matData['StateDerivOrder'][i]; - - mod_nDOFs = mod_nDOFs+1; - - - # repeat for the last module found: - if lastModOrd == 2: - mod_nDOFs = int(mod_nDOFs/2); - #print(mod_nDOFs,indx_start) - StateOrderingIndx[indx_start:(indx_start+mod_nDOFs)] = sum_nDOFs2 + np.arange(0,mod_nDOFs); # q2 starts at 1 - StateOrderingIndx[(indx_start+mod_nDOFs):matData['NumStates']] = sum_nDOFs2 + matData['ndof2'] + np.arange(0,mod_nDOFs); # q2_dot starts at matData.ndof2 + 1 - else: - StateOrderingIndx[indx_start:(indx_start+mod_nDOFs)] = sum_nDOFs1 + matData['NumStates2'] + np.arange(0,mod_nDOFs); # q1 starts at matData.NumStates2 + 1 - - #print(StateOrderingIndx) - return StateOrderingIndx - -def readOP(fid, n, defaultDerivOrder=2): - OP=[] - Var = {'RotatingFrame': [], 'DerivativeOrder': [], 'Description': []} - colNames=fid.readline().strip() - dummy= fid.readline().strip() - bHasDeriv= colNames.find('Derivative Order')>=0 - for i, line in enumerate(fid): - sp=line.strip().split() - if sp[1].find(',')>=0: - # Most likely this OP has three values (e.g. orientation angles) - # For now we discard the two other values - OP.append(float(sp[1][:-1])) - iRot=4 - else: - OP.append(float(sp[1])) - iRot=2 - Var['RotatingFrame'].append(sp[iRot]) - if bHasDeriv: - Var['DerivativeOrder'].append(int(sp[iRot+1])) - Var['Description'].append(' '.join(sp[iRot+2:]).strip()) - else: - Var['DerivativeOrder'].append(defaultDerivOrder) - Var['Description'].append(' '.join(sp[iRot+1:]).strip()) - if i>=n-1: - break - - tmp = dict() - tmp['x_op'] = OP - tmp['x_rotFrame'] = Var['RotatingFrame'] - tmp['x_DerivOrder'] = Var['DerivativeOrder'] - tmp['x_desc'] = Var['Description'] - - return tmp - - - -def readFASTMatrix(f): - name="" - m=0 - tmp=[] - for line in islice(f,1): - # copy matrix name to tmp_name - tmp_name=line.strip().split(':')[0] - # get matrix dimensions if matrix exists - if tmp_name != "": - m=int(line.strip().split(':')[1].split('x')[0]) - n=int(line.strip().split(':')[1].split('x')[1]) - - # copy matrix into tmp list - if m!=0: - name=tmp_name - for line in islice(f,m): - tmp.append([float(num) for num in line.split()]) - tmp=np.array(tmp) - - return name,tmp - -def ReadFASTLinear(filename, starSub=None, removeStatesPattern=None): - """ - Read one lin file. - - INPUTS: - - filename: linfile name, string. - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g: 'tower|Drivetrain' or '^AD' - see FASTLinearizationFile. - OUTPUTS: - - data: a dictionary with fields matching the MATLAB implementation. - """ - - # --- Read lin file - f = FASTLinearizationFile(filename, starSub=starSub, removeStatesPattern=removeStatesPattern) - - # --- Legacy structure. TODO, just use "f" - data={} - data['n_x'] = f.nx - data['n_u'] = f.nu - data['n_y'] = f.ny - data['n_z'] = f.nz - KeyMap={'t':'t'} - KeyMap.update({'Azimuth':'Azimuth', 'WindSpeed':'WindSpeed', 'RotSpeed':'RotSpeed'}) - KeyMap.update({'x_op':'x', 'xdot_op':'xdot', 'z_op':'z', 'y_op':'y'}) - for knew,kold in KeyMap.items(): - if kold in f.keys(): - data[knew] = f[kold] - data['WindSpeed'] = data['WindSpeed'] if data['WindSpeed'] is not None else np.nan - data['RotSpeed'] = data['RotSpeed'] if data['RotSpeed'] is not None else np.nan - data['Azimuth'] = np.mod(data['Azimuth'],2.0*np.pi) - if data['n_x']>0: - data['x_rotFrame'] = f['x_info']['RotatingFrame'] - data['x_DerivOrder'] = f['x_info']['DerivativeOrder'] - data['x_desc'] = f['x_info']['Description'] - data['xdot_desc'] = f['xdot_info']['Description'] - data['n_x2'] = np.sum(data['x_DerivOrder']== 2) - data['x_op'] = f['x'] - else: - data['n_x2'] = 0; - if data['n_z']>0: - data['z_desc'] = f['z_info']['Description'] - data['z_op'] = f['z'] - if data['n_u']>0: - data['u_rotFrame'] = f['u_info']['RotatingFrame'] - data['u_desc'] = f['u_info']['Description'] - data['u_op'] = f['u'] - if data['n_y']>0: - data['y_rotFrame'] = f['y_info']['RotatingFrame'] - data['y_desc'] = f['y_info']['Description'] - data['y_op'] = f['y'] - for k in ['A','B','C','D']: - if k in f.keys(): - data[k] = f[k] - return data, None - -def ReadFASTLinearLegacy(filename): - """ - Legacy reader, TODO remove in future release - """ - - def extractVal(lines, key): - for l in lines: - if l.find(key)>=0: - return l.split(key)[1].split()[0] - return None - - def readToMarker(fid, marker, nMax): - lines=[] - for i, line in enumerate(fid): - if i>nMax: - raise BrokenFormatError('`{}` not found in file'.format(marker)) - if line.find(marker)>=0: - break - lines.append(line.strip()) - return lines, line - - with open(filename) as f: - info = {} - data = {} - SetOfMatrices = 1 - info['name'] = os.path.splitext(os.path.basename(filename))[0] - - # --- - header, lastLine=readToMarker(f, 'Jacobians included', 30) - header.append(lastLine) - data['t'] = float(extractVal(header,'Simulation time:' )) - data['n_x'] = int(extractVal(header,'Number of continuous states:')) - data['n_xd'] = int(extractVal(header,'Number of discrete states:' )) - data['n_z'] = int(extractVal(header,'Number of constraint states:')) - data['n_u'] = int(extractVal(header,'Number of inputs:' )) - data['n_y'] = int(extractVal(header,'Number of outputs:' )) - bJac = extractVal(header,'Jacobians included in this file?') - if bJac: - SetOfMatrices = 2 - try: - data['Azimuth'] = float(extractVal(header,'Azimuth:')) - except: - data['Azimuth'] = None - try: - data['RotSpeed'] = float(extractVal(header,'Rotor Speed:')) # rad/s - except: - data['RotSpeed'] = np.nan - try: - data['WindSpeed'] = float(extractVal(header,'Wind Speed:')) - except: - data['WindSpeed'] = np.nan - - data['Azimuth']=np.mod(data['Azimuth'],2.0*np.pi) - try: - # skip next three lines - for line in islice(f,2): - pass - if data['n_x'] > 0: - temp = readOP(f, data['n_x']) - data['x_op']=temp['x_op'] - data['x_rotFrame']=temp['x_rotFrame'] - data['x_DerivOrder']=temp['x_DerivOrder'] - data['x_desc']=temp['x_desc'] - - # skip next three lines - for line in islice(f,2): - pass - - temp = readOP(f, data['n_x'], defaultDerivOrder=2) - data['xdot_op']=temp['x_op'] - data['xdot_desc']=temp['x_desc'] - - #(number of second-order states) - data['n_x2'] = sum(1 for i in data['x_DerivOrder'] if i == 2) - else: - data['n_x2'] = 0; - - - if data['n_xd'] > 0: - # skip next three lines - for line in islice(f,2): - pass - temp = readOP(f, data['n_xd'], defaultDerivOrder=2) - data['xd_op']=temp['x_op'] - data['xd_desc']=temp['x_desc'] - if data['n_z'] > 0: - # skip next three lines - for line in islice(f,2): - pass - temp = readOP(f, data['n_z'], defaultDerivOrder=0) - data['z_op']=temp['x_op'] - data['z_desc']=temp['x_desc'] - if data['n_u'] > 0: - # skip next three lines - for line in islice(f,2): - pass - temp = readOP(f, data['n_u'], defaultDerivOrder=0) - data['u_op']=temp['x_op'] - data['u_desc']=temp['x_desc'] - data['u_rotFrame']=temp['x_rotFrame'] - if data['n_y'] > 0: - # skip next three lines - for line in islice(f,2): - pass - temp = readOP(f, data['n_y'], defaultDerivOrder=0) - data['y_op']=temp['x_op'] - data['y_desc']=temp['x_desc'] - data['y_rotFrame']=temp['x_rotFrame'] - - # skip next one line - for line in islice(f,4): - pass - - mat_names=[] - while True: - name,mat=readFASTMatrix(f) - if not name: - break; - mat_names.append(name) - data[name]=mat - - return data, info - - except (ValueError, AssertionError): - raise - - -def get_Mats(FileNames, verbose=True, removeTwrAzimuth=False, starSub=None, removeStatesPattern=None): - """ - Extra main data from a list of lin files. - INPUTS: - - FileNames : list of lin files - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g: 'tower|Drivetrain' or '^AD' - see FASTLinearizationFile. - - removeTwrAzimuth: if False do nothing - otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). - - """ - NAzimStep = len(FileNames) - data = [None]*NAzimStep - # --- Read all files - for iFile, filename in enumerate(FileNames): - #data[iFile], _ = ReadFASTLinearLegacy(FileNames[iFile]); - data[iFile],_= ReadFASTLinear(FileNames[iFile], starSub=starSub, removeStatesPattern=removeStatesPattern); - Azimuth = np.array([d['Azimuth'] for d in data])*180/np.pi - # --- Sort by azimuth, not required, but filenames are not sorted, nor are the lin times azimuth - ISort = np.argsort(Azimuth) - Azimuth = Azimuth[ISort] - data = [data[i] for i in ISort] - FileNames = [FileNames[i] for i in ISort] - # --- Remove some azimuth - if removeTwrAzimuth: - IDiscard = [i for i,a in enumerate(Azimuth) if np.any(np.abs(np.array([60,180,300])-a)<4) ] - n=len(FileNames[0]); sfmt='{:'+str(n+2)+'s}' - for i in IDiscard: - print(' discard: '+sfmt.format(FileNames[i]) + ' (psi={:5.1f})'.format(Azimuth[i])) - data = [d for i,d in enumerate(data) if i not in IDiscard] - NAzimStep= len(data) - - - matData={} - matData['NAzimStep']= NAzimStep; - - # --- Using last azimuth to initial some of the "matData" variables - # Input data from linearization files - matData['NumStates'] = int(data[NAzimStep-1]['n_x']); - matData['NumStates2'] = int(data[NAzimStep-1]['n_x2']); - - #return data, matData - matData['ndof1'] = int(matData['NumStates'] - matData['NumStates2']); # number of first-order states = number of first-order DOFs - matData['ndof2'] = int(data[NAzimStep-1]['n_x2'] / 2); # half the number of second-order states = number of second-order DOFs - #% matData['ndof'] = matData['ndof2'] + matData['ndof1']; #half the number of second-order states plus the number of first-order states (i.e., states that aren't derivatives) - - matData['NumInputs'] = int(data[NAzimStep-1]['n_u']); - matData['NumOutputs'] = int(data[NAzimStep-1]['n_y']); - - # allocate space for these variables - matData['Azimuth'] = np.zeros(NAzimStep); - matData['Omega'] = np.zeros(NAzimStep); - matData['OmegaDot'] = np.zeros(NAzimStep); - matData['WindSpeed'] = np.zeros(NAzimStep)*np.nan; - - if matData['NumStates'] > 0: - matData['DescStates'] = data[NAzimStep-1]['x_desc']; - matData['StateDerivOrder'] = data[NAzimStep-1]['x_DerivOrder']; - matData['xdop'] = np.zeros((matData['NumStates'], NAzimStep)) - matData['xop'] = np.zeros((matData['NumStates'], NAzimStep)) - matData['A'] = np.zeros((matData['NumStates'], matData['NumStates'], NAzimStep)) - - if matData['NumInputs'] > 0: - matData['DescCntrlInpt'] = data[NAzimStep-1]['u_desc']; - matData['u_op'] = np.zeros((matData['NumInputs'],NAzimStep)) - if matData['NumStates']>0: - matData['B'] = np.zeros((matData['NumStates'], matData['NumInputs'],NAzimStep)) - - if matData['NumOutputs'] > 0: - matData['DescOutput'] = data[NAzimStep-1]['y_desc'] - matData['y_op'] = np.zeros((matData['NumOutputs'],NAzimStep)) - - if matData['NumStates'] > 0: - matData['C'] = np.zeros((matData['NumOutputs'], matData['NumStates'], NAzimStep)) - if matData['NumInputs'] > 0: - matData['D'] = np.zeros((matData['NumOutputs'], matData['NumInputs'], NAzimStep)) - - # Reorder state matrices so that they follow the {q2, q2_dot, q1} - # format that is assumed in the MBC3 equations. - if matData['NumStates'] > 0: - # keep StateOrderingIndx for applying inverse of MBC3 later - # (to visualize mode shapes) - matData['StateOrderingIndx'] = getStateOrderingIndx(matData) - - sortedIndx=matData['StateOrderingIndx'] - #print(sortedIndx) - x_rotFrame= reOrderByIdx_1D(data[NAzimStep-1]['x_rotFrame'],sortedIndx) - matData['DescStates'] = reOrderByIdx_1D(data[NAzimStep-1]['x_desc'],sortedIndx) - matData['StateDerivOrder'] = reOrderByIdx_1D(data[NAzimStep-1]['x_DerivOrder'],sortedIndx) - - # --- Store file data into matData - for iFile in np.arange(0,NAzimStep): - matData['Omega'][iFile] = data[iFile]['RotSpeed'] ; - matData['Azimuth'][iFile] = data[iFile]['Azimuth']*180/np.pi; - matData['WindSpeed'][iFile] = data[iFile]['WindSpeed'] - - if 'A' in data[iFile]: - matData['A'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['A'],sortedIndx,sortedIndx) - #print('size of matData[A] for file ', iFile, ' is :', matData['A'].shape) - if 'B' in data[iFile]: - matData['B'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['B'],sortedIndx,np.arange(0,matData['NumStates'])) - #print('size of matData[B] for file ', iFile, ' is :', matData['B'].shape) - if 'C' in data[iFile]: - matData['C'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['C'],np.arange(0,matData['NumStates']),sortedIndx) - #print('size of matData[C] for file ', iFile, ' is :', matData['C'].shape) - if 'D' in data[iFile]: - matData['D'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['D'],sortedIndx,sortedIndx) - #print('size of matData[D] for file ', iFile, ' is :', matData['D'].shape) - - if 'x_op' in data[iFile]: - matData['xop'][:,iFile] = reOrderByIdx_1D(data[iFile]['x_op'],sortedIndx) - #print('matData[xop] for file ', iFile,' is :',(matData['xop'][:,iFile])) - if 'xdot_op' in data[iFile]: - matData['xdop'][:,iFile] = reOrderByIdx_1D(data[iFile]['xdot_op'],sortedIndx) - #print('matData[xdop] for file ', iFile,' is :',(matData['xdop'][:,iFile])) - - if 'u_op' in data[iFile]: - matData['u_op'][:,iFile] = data[iFile]['u_op'] - - if 'y_op' in data[iFile]: - matData['y_op'][:,iFile] = data[iFile]['y_op'] - - - # Find the azimuth-averaged linearized 1st order state matrices: - if 'A' in matData: - matData['Avgxdop'] = np.mean(matData['xdop'],axis=1) - matData['Avgxop'] = np.mean(matData['xop'], axis=1) - matData['AvgA'] = np.mean(matData['A'],axis=2) - - #print(matData['AvgA']) - if 'B' in matData: - matData['AvgB'] = np.mean(matData['B'],axis=2) - - if 'C' in matData: - matData['AvgC'] = np.mean(matData['C'],axis=2) - - if 'D' in matData: - matData['AvgD'] = np.mean(matData['D'],axis=2) - - - foundED = True; - for i in range(matData['ndof2']): - # find the starting index of the string 'DOF_GeAz' - if (matData['DescStates'][i].find('DOF_GeAz') != -1): - matData['Omega'] = matData['xdop'][i,:] - matData['OmegaDot'] = matData['xdop'][i+matData['ndof2'],:] - foundED = True - break - - for i in range(matData['ndof2']): - # find the starting index of the string 'DOF_DrTr' - if (matData['DescStates'][i].find('DOF_DrTr') != -1): - matData['Omega'] = matData['Omega'] + matData['xdop'][i,:] #This always comes after DOF_GeAz so let's just add it here (it won't get written over later). - matData['OmegaDot'] = matData['OmegaDot'] + matData['xdop'][i+matData['ndof2'],:] - foundED = True - break - - if not foundED: - for i in range(matData['ndof2']): - # find the starting index of the string 'Gearbox_Rot' - if (matData['DescStates'][i].find('MBD Gearbox_Rot') != -1): - matData['Omega'] = matData['xdop'][i,:] - matData['OmegaDot'] = matData['xdop'][i+matData['ndof2'],:] - break - - #print("\n".join(matData['DescStates'])) - #exit() - # ----------- Find multi-blade coordinate (MBC) transformation indices ---- - - # Find the indices for, state triplets in the rotating frame - # (note that we avoid the "first time derivative" states) - if matData['ndof2'] > 0: - matData['RotTripletIndicesStates2'], matData['n_RotTripletStates2'] = findBladeTriplets(x_rotFrame[0:matData['ndof2']],matData['DescStates'][0:matData['ndof2']], verbose=verbose) - else: - matData['RotTripletIndicesStates2'] = []; - matData['n_RotTripletStates2'] = 0; - - if matData['ndof1'] > 0: - matData['RotTripletIndicesStates1'], matData['n_RotTripletStates1'] = findBladeTriplets( x_rotFrame[matData['NumStates2']:] ,matData['DescStates'][matData['NumStates2']:] , verbose=verbose); - else: - matData['RotTripletIndicesStates1'] = []; - matData['n_RotTripletStates1'] = 0; - - # Find the indices for control input triplets in the rotating frame: - if matData['NumInputs'] > 0: - matData['RotTripletIndicesCntrlInpt'], matData['n_RotTripletInputs'] = findBladeTriplets(data[0]['u_rotFrame'],matData['DescCntrlInpt'], verbose=verbose ); - else: - matData['RotTripletIndicesCntrlInpt'] = []; - matData['n_RotTripletInputs'] = 0; - - # Find the indices for output measurement triplets in the rotating frame: - if (matData['NumOutputs'] > 0 ): - matData['RotTripletIndicesOutput'], matData['n_RotTripletOutputs'] = findBladeTriplets(data[0]['y_rotFrame'],matData['DescOutput'], verbose=verbose ); - else: - matData['RotTripletIndicesOutput'] = []; - matData['n_RotTripletOutputs'] = 0; - - return matData, data - -if __name__ == '__main__': - madData,dat = get_Mats(['file.lin']) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py deleted file mode 100644 index 9bfee75aeb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py +++ /dev/null @@ -1,523 +0,0 @@ -""" - -""" -import numpy as np -import scipy.linalg as scp -import os -from pyFAST.linearization.linfile import get_Mats - - -# --------------------------------------------------------------------------------} -# --- Utils -# --------------------------------------------------------------------------------{ -def get_tt_inverse(sin_col, cos_col): - - c1 = cos_col[0]; - c2 = cos_col[1]; - c3 = cos_col[2]; - - s1 = sin_col[0]; - s2 = sin_col[1]; - s3 = sin_col[2]; - - ttv = [ [c2*s3 - s2*c3, c3*s1 - s3*c1, c1*s2 - s1*c2], - [ s2 - s3 , s3 - s1, s1 - s2 ], - [ c3 - c2 , c1 - c3, c2 - c1 ] ] - ttv = ttv/(1.5*np.sqrt(3)); - - return ttv - -def get_new_seq(rot_triplet,ntot): -# rot_triplet is size n x 3 - #print('rot_triplet ', len(rot_triplet)) - rot_triplet=np.array(rot_triplet,dtype=int) - if (rot_triplet.size==0): - nRotTriplets=0 - nb=0 - #return np.array([]),0,0; - else: - nRotTriplets,nb = rot_triplet.shape; - - #print(nRotTriplets,nb,rot_triplet.flatten()) - - if (nb != 3 and nRotTriplets != 0 and ntot!= 0): - print('**ERROR: the number of column vectors in the rotating triplet must equal 3, the num of blades'); - new_seq = np.range(1,ntot) - else: - non_rotating = np.ones(ntot,dtype=int); - #print(non_rotating) - non_rotating[rot_triplet.flatten()] = 0; # if they are rotating, set them false; - a=np.array(np.nonzero(non_rotating)).flatten() - b=(rot_triplet.reshape(nRotTriplets*nb, 1)).flatten() - new_seq = np.concatenate((a,b)); - - #print(new_seq) - return new_seq,nRotTriplets,nb - -def eiganalysis(A, ndof2=None, ndof1=None): - """ """ - mbc={} - m, ns = A.shape; - if(m!=ns): - raise Exception('**ERROR: the state-space matrix is not a square matrix.'); - - if ndof2 is None: - # Assume that all DOF are second order - ndof1 = 0; - ndof2 = int(ns/2) - - if np.mod(ns,2) != 0: - raise Exception('**ERROR: the input matrix is not of even order.'); - elif ndof1 is None: - # Assume that first order states are "reminder" - ndof1 = ns - 2*ndof2; - if ndof1 < 0: - raise Exception('**ERROR: ndof2 must be no larger than half the dimension of the state-space matrix.'); - else: - if ns != int(2*ndof2 + ndof1): - raise Exception('**ERROR: the dimension of the state-space matrix must equal 2*ndof2 + ndof1.'); - - ndof = ndof2 + ndof1; - - # Matlab code - KEEP ME - #[origEigenVects, origEvals] = eig(A,'vector'); %,'nobalance' - #positiveImagEvals = find( imag(origEvals) > 0); - #mbc.Evals = origEvals(positiveImagEvals); - #mbc.EigenVects = origEigenVects([1:ndof2 (ndof2*2+1):ns],positiveImagEvals); % save q2 and q1, throw away q2_dot - # EigenVects_save = origEigenVects(:,positiveImagEvals); % save these for VTK visualization; - #real_Evals = real(mbc.Evals); - #imag_Evals = imag(mbc.Evals); - #mbc.NaturalFrequencies = sqrt( real_Evals.^2 + imag_Evals.^2 ); - - origEvals, origEigenVects = np.linalg.eig(A); #,'nobalance' - # errorInSolution = norm(A * mbc.EigenVects - mbc.EigenVects* diag(mbc.EigenVals) ) - # these eigenvalues aren't sorted, so we just take the ones with - # positive imaginary parts to get the pairs for modes with damping < 1: - positiveImagEvals = np.argwhere( origEvals.imag > 0.0); - - mbc['Evals'] = origEvals[positiveImagEvals]; - row=np.array(list(range(0,ndof2))+list(range(ndof2*2+1,ns))) - col=positiveImagEvals - - mbc['EigenVects']=origEigenVects[row,col].transpose(); # save q2 and q1, throw away q2_dot - EigenVects_save=origEigenVects[:,positiveImagEvals]; # save these for VTK visualization; - - real_Evals = mbc['Evals'].real; - imag_Evals = mbc['Evals'].imag; - - mbc['NaturalFrequencies'] = np.sqrt( real_Evals**2 + imag_Evals**2 ); - mbc['DampRatios'] = -real_Evals/mbc['NaturalFrequencies'] - mbc['DampedFrequencies'] = imag_Evals; - - mbc['NumRigidBodyModes'] = ndof - len(positiveImagEvals); - - mbc['NaturalFreqs_Hz'] = mbc['NaturalFrequencies']/(2.0*np.pi) - mbc['DampedFreqs_Hz'] = mbc['DampedFrequencies']/(2.0*np.pi); - mbc['MagnitudeModes'] = np.abs(mbc['EigenVects']); - mbc['PhaseModes_deg'] = np.angle(mbc['EigenVects'])*180.0/np.pi; - return mbc, EigenVects_save[:,:,0] - -# --------------------------------------------------------------------------------} -# --- Main function -# --------------------------------------------------------------------------------{ -def fx_mbc3(FileNames, verbose=True, starSub=None, removeStatesPattern=None, removeTwrAzimuth=False): - """ - Perform MBC2 funciton based on a list of lin files. - NOTE: variable names and data structure match MATLAB implementation. - - INPUTS: - - FileNames: list of lin files for a given operating point - - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g: 'tower|Drivetrain' or '^AD' - see FASTLinearizationFile. - - removeTwrAzimuth: if False do nothing - otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). - - NOTE: unlike the matlab function, fx_mbc3 does not write the modes for VTK visualization - Instead use the wrapper function def getCDDOP from pyFAST.linearization.tools - - Original contribution by: Srinivasa B. Ramisett, ramisettisrinivas@yahoo.com, http://ramisetti.github.io - """ - - MBC={} - matData, _ = get_Mats(FileNames, verbose=verbose, starSub=starSub, removeStatesPattern=removeStatesPattern, removeTwrAzimuth=removeTwrAzimuth) - - # print('matData[Omega] ', matData['Omega']) - # print('matData[OmegaDot] ', matData['OmegaDot']) - - MBC['DescStates'] = matData['DescStates'] # save this in the MBC type for possible campbell_diagram processing later - MBC['ndof2'] = matData['ndof2'] - MBC['ndof1'] = matData['ndof1'] - MBC['RotSpeed_rpm'] = np.mean(matData['Omega'])*(30/np.pi); #rad/s to rpm - MBC['WindSpeed'] = np.mean(matData['WindSpeed']) # NOTE: might be NaN for old files - - # print('RotSpeed_rpm ',MBC['RotSpeed_rpm']) - # print('ndof1 ', MBC['ndof1']) - # print('ndof2 ', MBC['ndof2']) - # print(matData['RotTripletIndicesStates2']) - - # TODO infer number of blades from ElastoDyn - # TODO differentiate between number of blades, and the "nb" for MBC - # nb = 3; % number of blades required for MBC3 - # ---------- Multi-Blade-Coordinate transformation ------------------------------------------- - new_seq_dof2, dummy, nb = get_new_seq(matData['RotTripletIndicesStates2'],matData['ndof2']); # these are the first ndof2 states (not "first time derivative" states); these values are used to calculate matrix transformations - new_seq_dof1, dummy, nb2 = get_new_seq(matData['RotTripletIndicesStates1'],matData['ndof1']); # these are the first-order ndof1 states; these values are used to calculate matrix transformations - - nb = max(nb,nb2); - if (nb==0): - #print('*** fx_mbc3: no states were found, so assuming turbine has 3 blades. ***') - #nb = 3 # TODO, somehow in the past, we assumed 3 blades. - print('*** fx_mbc3: no states were found. Setting number of blades to 0. Skipping MBC3 ***') - - - new_seq_states=np.concatenate((new_seq_dof2, new_seq_dof2+matData['ndof2'])) - if new_seq_dof1.size!=0: - new_seq_states=np.concatenate((new_seq_states,new_seq_dof1+matData['NumStates2'])) - - #new_seq_states = [new_seq_dof2; new_seq_dof2+matData['ndof2']; new_seq_dof1+matData['NumStates2']]; # combine the second-order states, including "first time derivatives", with first-order states (assumes ordering of displacements and velocities in state matrices); these values are used to calculate matrix transformations - # second-order NonRotating q2, second-order Rotating q2, - # second-order NonRotating q2_dot, second-order Rotating q2_dot, - # first-order NonRotating q1, first-order Rotating q1 - - - if nb == 3: - MBC['performedTransformation'] = True; - - if matData['n_RotTripletStates2'] + matData['n_RotTripletStates1'] < 1: - print('*** There are no rotating states. MBC transformation, therefore, cannot be performed.'); - - # perhaps just warn and perform eigenanalysis anyway? - if (matData['n_RotTripletStates2']*nb > matData['ndof2']): - print('**ERROR: the rotating second-order dof exceeds the total num of second-order dof'); - elif (matData['n_RotTripletStates1']*nb > matData['ndof1']): - print('**ERROR: the rotating first-order dof exceeds the total num of first-order dof'); - - new_seq_inp,dummy,dummy = get_new_seq(matData['RotTripletIndicesCntrlInpt'],matData['NumInputs']); - new_seq_out,dummy,dummy = get_new_seq(matData['RotTripletIndicesOutput'],matData['NumOutputs']); - - n_FixFrameStates2 = matData['ndof2'] - matData['n_RotTripletStates2']*nb; # fixed-frame second-order dof - n_FixFrameStates1 = matData['ndof1'] - matData['n_RotTripletStates1']*nb; # fixed-frame first-order dof - n_FixFrameInputs = matData['NumInputs'] - matData['n_RotTripletInputs']*nb; # fixed-frame control inputs - n_FixFrameOutputs = matData['NumOutputs'] - matData['n_RotTripletOutputs']*nb; # fixed-frame outputs - - #print(n_FixFrameOutputs,n_FixFrameInputs, n_FixFrameStates1, n_FixFrameStates2) - - if ( len(matData['Omega']) != matData['NAzimStep']): - print('**ERROR: the size of Omega vector must equal matData.NAzimStep, the num of azimuth steps') - if ( len(matData['OmegaDot']) != matData['NAzimStep']): - print('**ERROR: the size of OmegaDot vector must equal matData.NAzimStep, the num of azimuth steps'); - - - nLin = matData['A'].shape[-1] - MBC['A'] = np.zeros(matData['A'].shape) - MBC['B'] = np.zeros((len(new_seq_states),len(new_seq_inp),matData['NAzimStep'])) - if 'C' in matData.keys(): - MBC['C']=np.zeros(matData['C'].shape) - else: - MBC['C']=np.zeros((0,0,nLin)) - if 'D' in matData.keys(): - MBC['D']=np.zeros(matData['D'].shape) - else: - MBC['D']=np.zeros((0,0,nLin)) - - # print('new_seq_inp ',new_seq_inp) - # print('new_seq_out ',new_seq_out) - # print('new_seq_states ', new_seq_states) - - # begin azimuth loop - for iaz in reversed(range(matData['NAzimStep'])): - #(loop backwards so we don't reallocate memory each time [i.e. variables with iaz index aren't getting larger each time]) - - temp=np.arange(nb) - # compute azimuth positions of blades: - az = matData['Azimuth'][iaz]*np.pi/180.0 + 2*np.pi/nb* temp ; # Eq. 1, azimuth in radians - - # get rotor speed squared - OmegaSquared = matData['Omega'][iaz]**2; - - #print(OmegaSquared) - - # compute transformation matrices - cos_col = np.cos(az); - sin_col = np.sin(az); - - tt=np.column_stack((np.ones(3),cos_col,sin_col)) # Eq. 9, t_tilde - ttv = get_tt_inverse(sin_col, cos_col); # inverse of tt (computed analytically in function below) - tt2 = np.column_stack((np.zeros(3), -sin_col, cos_col)) # Eq. 16 a, t_tilde_2 - tt3 = np.column_stack((np.zeros(3), -cos_col, -sin_col)) # Eq. 16 b, t_tilde_3 - - #--- - T1 = np.eye(n_FixFrameStates2); # Eq. 11 for second-order states only - #print('B ',T1, n_FixFrameStates2, matData['n_RotTripletStates2']) - for ii in range(matData['n_RotTripletStates2']): - T1 = scp.block_diag(T1,tt) - - T1v = np.eye(n_FixFrameStates2); # inverse of T1 - for ii in range(matData['n_RotTripletStates2']): - T1v = scp.block_diag(T1v, ttv); - - T2 = np.zeros([n_FixFrameStates2,n_FixFrameStates2]); # Eq. 14 for second-order states only - for ii in range(matData['n_RotTripletStates2']): - T2 = scp.block_diag(T2, tt2); - - #print('T1, T1v, T2 ',T1.shape, T1v.shape, T2.shape) - #--- - T1q = np.eye(n_FixFrameStates1); # Eq. 11 for first-order states (eq. 8 in MBC3 Update document) - for ii in range(matData['n_RotTripletStates1']): - T1q = scp.block_diag(T1q, tt); - - T1qv = np.eye(n_FixFrameStates1); # inverse of T1q - for ii in range(matData['n_RotTripletStates1']): - T1qv = scp.block_diag(T1qv, ttv); - - T2q = np.zeros([n_FixFrameStates1,n_FixFrameStates1]); # Eq. 14 for first-order states (eq. 9 in MBC3 Update document) - for ii in range(matData['n_RotTripletStates1']): - T2q = scp.block_diag(T2q, tt2); - - #print('T1q, T1qv, T2q ',T1q.shape, T1qv.shape, T2q.shape) - # T1qc = np.eye(matData.NumHDInputs); # inverse of T1q - - #--- - T3 = np.zeros([n_FixFrameStates2,n_FixFrameStates2]); # Eq. 15 - for ii in range(matData['n_RotTripletStates2']): - T3 = scp.block_diag(T3, tt3); - - #--- - T1c = np.eye(n_FixFrameInputs); # Eq. 21 - for ii in range(matData['n_RotTripletInputs']): - T1c = scp.block_diag(T1c, tt) - - T1ov = np.eye(n_FixFrameOutputs); # inverse of Tlo (Eq. 23) - for ii in range(matData['n_RotTripletOutputs']): - T1ov = scp.block_diag(T1ov, ttv); - - #print('T3, T1c, T1ov ',T3.shape, T1c.shape, T1ov.shape, matData['A'].shape) - # mbc transformation of first-order matrices - # if ( MBC.EqnsOrder == 1 ) # activate later - - #print('Before ',T1c) - - if 'A' in matData: - #A = matData['A'][:,:,iaz] - #A_reordered = A[np.ix_(new_seq_states, new_seq_states)] - # Eq. 29 - L1=np.concatenate((T1, np.zeros([matData['ndof2'],matData['ndof2']]), np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) - L2=np.concatenate((matData['Omega'][iaz]*T2,T1,np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) - L3=np.concatenate((np.zeros([matData['ndof1'], matData['ndof2']]),np.zeros([matData['ndof1'], matData['ndof2']]), T1q), axis=1) - L=np.matmul(matData['A'][new_seq_states[:,None],new_seq_states,iaz], np.concatenate((L1,L2,L3),axis=0)) - - R1=np.concatenate((matData['Omega'][iaz]*T2, np.zeros([matData['ndof2'],matData['ndof2']]), np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) - R2=np.concatenate((OmegaSquared*T3 + matData['OmegaDot'][iaz]*T2, 2*matData['Omega'][iaz]*T2, np.zeros([matData['ndof2'], matData['ndof1']])),axis=1) - R3=np.concatenate((np.zeros([matData['ndof1'], matData['ndof2']]), np.zeros([matData['ndof1'], matData['ndof2']]), matData['Omega'][iaz]*T2q), axis=1) - - R=np.concatenate((R1,R2,R3),axis=0) - - MBC['A'][new_seq_states[:,None],new_seq_states,iaz]=np.matmul(scp.block_diag(T1v, T1v, T1qv),(L-R)) - - # ffname='AAA'+str(iaz)+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['A'][:,:,iaz],fmt='%5.4f') - # f.write('\n') - - if 'B' in matData: - # Eq. 30 - MBC['B'][new_seq_states[:,None],new_seq_inp,iaz]=np.matmul(np.matmul(scp.block_diag(T1v, T1v, T1qv), matData['B'][new_seq_states[:,None],new_seq_inp,iaz]),T1c) - - # ffname='BBB'+str(iaz)+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['B'][:,:,iaz],fmt='%5.4f') - # f.write('\n') - - if 'C' in matData: - # Eq. 31 - - L1=np.concatenate((T1, np.zeros([matData['ndof2'],matData['ndof2']]), np.zeros([matData['ndof2'], matData['ndof1']])),axis=1) - L2=np.concatenate((matData['Omega'][iaz]*T2, T1, np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) - L3=np.concatenate((np.zeros([matData['ndof1'], matData['ndof2']]), np.zeros([matData['ndof1'], matData['ndof2']]), T1q), axis=1) - - MBC['C'][new_seq_out[:,None], new_seq_states,iaz]=np.matmul(np.matmul(T1ov,matData['C'][new_seq_out[:,None],new_seq_states,iaz]),np.concatenate((L1,L2,L3),axis=0)) - - # ffname='CCC'+str(iaz)+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['C'][:,:,iaz],fmt='%5.4f') - # f.write('\n') - - if 'D' in matData: - # Eq. 32 - MBC['D'][new_seq_out[:,None],new_seq_inp,iaz] = np.matmul(np.matmul(T1ov,matData['D'][new_seq_out[:,None],new_seq_inp,iaz]), T1c) - - # ffname='DDD'+str(iaz)+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['D'][:,:,iaz],fmt='%5.4f') - # f.write('\n') - - # end # end of azimuth loop - else: - print(' fx_mbc3 WARNING: Number of blades is ', str(nb), ' not 3. MBC transformation was not performed.') - MBC['performedTransformation'] = False; - - # initialize matrices - if 'A' in matData: - MBC['A'] = matData['A'] # initalize matrix - if 'B' in matData: - MBC['B'] = matData['B'] # initalize matrix - if 'C' in matData: - MBC['C'] = matData['C'] # initalize matrix - if 'D' in matData: - MBC['D'] = matData['D'] # initalize matrix - - # ------------- Eigensolution and Azimuth Averages ------------------------- - if 'A' in MBC: - MBC['AvgA'] = np.mean(MBC['A'],axis=2); # azimuth-average of azimuth-dependent MBC.A matrices - MBC['eigSol'], EigenVects_save = eiganalysis(MBC['AvgA'], matData['ndof2'], matData['ndof1']); - MBC['EigenVects_save'] = EigenVects_save - MBC['nb'] = nb - - if 'B' in MBC: - MBC['AvgB'] = np.mean(MBC['B'],axis=2); # azimuth-average of azimuth-dependent MBC.B matrices - # ffname='BBB_avg'+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['AvgB'],fmt='%5.4f') - # f.write('\n') - - if 'C' in MBC: - MBC['AvgC'] = np.mean(MBC['C'],axis=2); # azimuth-average of azimuth-dependent MBC.C matrices - # ffname='CCC_avg'+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['AvgC'],fmt='%5.4f') - # f.write('\n') - - if 'D' in MBC: - MBC['AvgD'] = np.mean(MBC['D'],axis=2); # azimuth-average of azimuth-dependent MBC.D matrices - # ffname='DDD_avg'+'.txt' - # with open(ffname, "a") as f: - # np.savetxt(f,MBC['AvgD'],fmt='%5.4f') - # f.write('\n') - - return MBC, matData - - -#%% ------------------------------------------------------------------------ -def formatModesForViz(MBC, matData, nb, EigenVects_save): - """ - get data required for VTK visualization: - MBC.eigSol.EigenVects_save(:,SortedFreqIndx) - """ - nAzimuth = len(matData['Azimuth']) - nStates, nModes = EigenVects_save.shape - - SortedFreqIndx = np.argsort((MBC['eigSol']['NaturalFreqs_Hz']).flatten(),kind="heapsort") - - #put these in order of natural frequency: - VTK = dict() - VTK['NaturalFreq_Hz'] = MBC['eigSol']['NaturalFreqs_Hz'][ SortedFreqIndx] # nModes - VTK['DampedFreq_Hz'] = MBC['eigSol']['DampedFreqs_Hz'][ SortedFreqIndx] # nModes - VTK['DampingRatio'] = MBC['eigSol']['DampRatios'][ SortedFreqIndx] # nModes - x_eig = EigenVects_save[:, SortedFreqIndx] # nStates x nModes - # Adopt a convention such that the real part of the first state is positive (arbitrary) - S=np.sign(np.real(x_eig[0,:])) - x_eig = S * x_eig - VTK['x_eig'] = np.tile(x_eig, nAzimuth).reshape((x_eig.shape[0],x_eig.shape[1],nAzimuth)) - - if MBC['performedTransformation']: - # inverse MBC3 (Eq. 4, to move from collective, sine, cosine back to blade 1, blade 2, blade 3): - dof1_offset = MBC['ndof2']*2 - for iaz, azimuth in enumerate(matData['Azimuth']): - # MBC3 transformation matrices - az = azimuth*np.pi/180.0 + 2*np.pi/nb* np.arange(nb)# % Eq. 1, azimuth in radians - az = az.reshape((-1,1)) # column vector - tt = np.column_stack( (np.ones((nb,1)), np.cos(az), np.sin(az))) #% Eq. 9, t_tilde - # MBC on second order states - I3_2nd = np.array(matData['RotTripletIndicesStates2']).astype(int) - for i2 in range(I3_2nd.shape[0]): - i3x = I3_2nd[i2,:] - i3xdot= I3_2nd[i2,:]+MBC['ndof2'] - VTK['x_eig'][i3x , :, iaz] = tt.dot(x_eig[i3x ,:]) - VTK['x_eig'][i3xdot, :, iaz] = tt.dot(x_eig[i3xdot,:]) - # MBC on first order states - I3_1st = np.array(matData['RotTripletIndicesStates1']).astype(int) - for i1 in range(I3_1st.shape[0]): - i3x = I3_1st[i1] + dof1_offset - VTK['x_eig'][i3x, :, iaz] = tt.dot(x_eig[i3x,:]) - # put this in order states are stored in FAST - I = matData['StateOrderingIndx'] - VTK['x_desc'] = np.array(MBC['DescStates'])[I] - VTK['x_eig'] = VTK['x_eig'][I,:,:] # nStates x nModes x nAzimuth - VTK['x_eig_magnitude'] = np.abs( VTK['x_eig']) # nStates x nModes x nAzimuth - VTK['x_eig_phase'] = np.angle(VTK['x_eig']) # nStates x nModes x nAzimuth - return VTK - - - - -if __name__=='__main__': - pass - - # FileNames=['5MW_Land_ModeShapes-1.fst', '5MW_Land_ModeShapes-2.fst', '5MW_Land_ModeShapes-3.fst', '5MW_Land_ModeShapes-6.fst', '5MW_Land_ModeShapes-7.fst']; - #FileNames=['5MW_Land_BD_Linear-1.fst', '5MW_Land_BD_Linear-2.fst', '5MW_Land_BD_Linear-3.fst', '5MW_Land_BD_Linear-6.fst', '5MW_Land_BD_Linear-7.fst']; - - #FileNames=['5MW_Land_BD_Linear-1.fst']; - - #FileNames=['DLC-1.1/5MW_Land_BD_Linear-7.1.lin', 'DLC-1.1/5MW_Land_BD_Linear-7.2.lin'] - #FileNames=['/Users/sramiset/Desktop/OpenFAST/5MW_Land_BD_Linear/5MW_Land_BD_Linear-1.1.lin','/Users/sramiset/Desktop/OpenFAST/5MW_Land_BD_Linear/5MW_Land_BD_Linear-1.2.lin'] - # CampbellData=runMBC(FileNames) - # print('Preparing campbell diagram data!'); - # # TO DO read x-axis for wind speed or rotor speed from csv file - # #op_csv=pd.read_csv('input.csv', sep=',') - # OP=[2,4,6,8,10] - - # modeID_table,modesDesc=IdentifyModes(CampbellData) - - # #print(modesDesc) - - # nModes=modeID_table.shape[0] - # nRuns=modeID_table.shape[1] - # cols=[item[0] for item in list(modesDesc.values())] - # #cols.append('1P');cols.append('3P');cols.append('6P') - # #cols.append('9P');cols.append('12P') - # frequency=pd.DataFrame(np.nan, index=np.arange(nRuns), columns=cols) - # dampratio=pd.DataFrame(np.nan, index=np.arange(nRuns), columns=cols) - # FreqPlotData=np.zeros((nRuns,nModes)) - # DampPlotData=np.zeros((nRuns,nModes)) - # for i in range(nRuns): - # for modeID in range(len(modesDesc)): # list of modes we want to identify - # idx=int(modeID_table[modeID,i]) - # FreqPlotData[i,modeID]=CampbellData[i]['Modes'][idx]['NaturalFreq_Hz'] - # DampPlotData[i,modeID]=CampbellData[i]['Modes'][idx]['DampingRatio'] - # #print(i,modeID,modesDesc[modeID][0],FreqPlotData[i,modeID]) - # frequency.iloc[i,:]=FreqPlotData[i,:] - # dampratio.iloc[i,:]=DampPlotData[i,:] - - # for i in range(len(OP)): - # # for 15 DOF - # frequency.index.values[i]=OP[i] - # dampratio.index.values[i]=OP[i] - - # # import openpyxl - # # xfile = openpyxl.load_workbook('/Users/sramiset/Desktop/OpenFAST/mbc3_py/CampbellDiagram_Template.xlsx') - - # pCD.plotCampbellData(OP,frequency,dampratio) - - # frequency['1P']=np.nan - # frequency['3P']=np.nan - # frequency['6P']=np.nan - # frequency['9P']=np.nan - # frequency['12P']=np.nan - - # print(nRuns) - # for i in range(nRuns): - # # for 1P,3P,6P,9P,and 12P harmonics - # tmp=OP[i]/60.0 - # print(i,tmp) - # LZ=15 - # frequency.iloc[i,LZ]=tmp - # frequency.iloc[i,LZ+1]=3*tmp - # frequency.iloc[i,LZ+2]=6*tmp - # frequency.iloc[i,LZ+3]=9*tmp - # frequency.iloc[i,LZ+4]=12*tmp - # print(frequency) - # frequency.transpose().to_excel(r'CampbellData.xlsx') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py deleted file mode 100644 index 0568bf7232..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py +++ /dev/null @@ -1,42 +0,0 @@ -import sys -import os -import glob -import matplotlib.pyplot as plt -# Local -from pyFAST.linearization.linearization import plotCampbellDataFile - - -if len(sys.argv) not in [2,3,4]: - print(""" -usage: - plotCampbellData XLS_OR_CSV [WS_OR_RPM] [sheetname] - -where: - - XLS_OR_CSV: is an Excel file, or the ModesID CSV file generated by the matlab - postprocessing of the linearization. - The "ModesID" CSV file can have any name, but the remaining csv files - are assumed to be [Campbell_Points*.csv and Campbell_OP.csv] - in the same folder of the "ModesID" csv. - - - WS_OR_RPM: is `ws` or `rpm` (case insensitive), value use for x-axis - - - sheetname: optional argument to specify the ModesID sheet of the xls file. -""") - sys.exit(-1) - - -# --- Input handling -xls_or_csv = sys.argv[1] -if len(sys.argv)>=3: - ws_or_rpm = sys.argv[2] -else: - ws_or_rpm = 'rpm' -if len(sys.argv)>=4: - sheetname = sys.argv[3] -else: - sheetname = None - -fig, axes, figName = plotCampbellDataFile(xls_or_csv, ws_or_rpm, sheetname, ylim=None) -print('Figure saved to:',figName) -fig.savefig(figName, dpi=300) -plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py deleted file mode 100644 index 50fd338f03..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py +++ /dev/null @@ -1,134 +0,0 @@ -from paraview.simple import * -import os -import sys -import glob -import numpy as np - -if len(sys.argv) not in [3,4]: - print('Error: Not enough argument provided.') - print(""" -usage: - plotModeShapes ROOT_PATH STATEFILE [OUTPUTDIR] - -where: - ROOT_PATH: Path of the form VTKDIR\ROOTNAME - where VTKDIR is the directory where vtp files are located - Modes and LinTimes will be selected using the pattern: - ROOT_PATH.Mode*.LinTime*.vtp - STATEFILE: State file used for visualization - -""") - sys.exit(-1) - -# --- Input Parameters -RootPath = os.path.normpath(sys.argv[1]) -StateFile = os.path.normpath(sys.argv[2]) -if len(sys.argv)==4: - OutputDir = os.path.normpath(sys.argv[3]) -else: - OutputDir='./' - -# --- Script Parameters -Suffix = 'LinTime1.' # Depends on viz option VTKLinTim= 1 or 2 -fps = 3 # frames per second (rate to save in the .avi file) -nModes = 15 # number of modes to visualize - -vFPS= np.linspace(5,1,nModes).astype(int) - -# --- Derived params -parentDir = os.path.dirname(RootPath) -rootSim = os.path.basename(RootPath) -mainDirName = os.path.abspath(parentDir) - -# --- Constants -StructureModule = 'ED' -BladeMesh = "AD_Blade" - -print('') -print('RootName :',rootSim) -print('MainDirName:',mainDirName) -print('StateFile :',StateFile) -print('') - -for iMode in range(nModes): # iMode starts at 0, so add 1 - rootMode = rootSim+'.Mode{:d}.'.format(iMode+1)+Suffix - absrootMode = os.path.join(mainDirName, rootMode) - print('***' + absrootMode + '***') - # nLinTimes = len(glob.glob(os.path.join(mainDirName,RootName)+'.Mode1.LinTime*.AD_Blade1..vtp')) - - # determine number of leading zeros in this mode shape - nLeadingZeros = 0 - exists = False - while (not exists) and nLeadingZeros < 6: - nLeadingZeros = nLeadingZeros + 1 - txt = '{:0' + str(nLeadingZeros) + 'd}' - fileLeadingZeros = txt.format(1) - Blade1File = absrootMode + BladeMesh + '1.' + fileLeadingZeros + '.vtp' - exists = os.path.isfile(Blade1File) - - #print(Blade1File) - if not exists: - print(' Could not find files to load.') - else: - LoadState(StateFile, LoadStateDataFileOptions='Choose File Names', - DataDirectory=mainDirName, - a5MW_Land_DLL_WTurbMode1LinTime1AD_Blade10FileName =[absrootMode + BladeMesh + '1.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1AD_Blade20FileName =[absrootMode + BladeMesh + '2.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1AD_Blade30FileName =[absrootMode + BladeMesh + '3.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1Blade1Surface0FileName =[absrootMode + 'Blade1Surface.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1Blade2Surface0FileName =[absrootMode + 'Blade2Surface.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1Blade3Surface0FileName =[absrootMode + 'Blade3Surface.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1ED_Hub0FileName =[absrootMode + StructureModule + '_Hub.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1ED_Nacelle0FileName =[absrootMode + StructureModule + '_Nacelle.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1ED_TowerLn2Mesh_motion0FileName=[absrootMode + StructureModule + '_TowerLn2Mesh_motion.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1HubSurface0FileName =[absrootMode + 'HubSurface.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1NacelleSurface0FileName =[absrootMode + 'NacelleSurface.' + fileLeadingZeros + '.vtp'], - a5MW_Land_DLL_WTurbMode1LinTime1TowerSurface0FileName =[absrootMode + 'TowerSurface.' + fileLeadingZeros + '.vtp'] - ) - ## find new sources - # blade 1 - for iBlade in range(3): - Blade = FindSource(rootMode + BladeMesh + str(iBlade+1) + '...vtp') - SetActiveSource(Blade) - ExtendFileSeries(Blade) - Blade = FindSource(rootMode + 'Blade' + str(iBlade+1) + 'Surface...vtp') - SetActiveSource(Blade) - ExtendFileSeries(Blade) - # Hub - Hub = FindSource(rootMode + StructureModule + '_Hub...vtp') - SetActiveSource(Hub) - ExtendFileSeries(Hub) - Hub = FindSource(rootMode + 'HubSurface...vtp') - SetActiveSource(Hub) - ExtendFileSeries(Hub) - - # nacelle - Nacelle = FindSource(rootMode + StructureModule + '_Nacelle...vtp') - SetActiveSource(Nacelle) - ExtendFileSeries(Nacelle) - Nacelle = FindSource(rootMode + 'NacelleSurface...vtp') - SetActiveSource(Nacelle) - ExtendFileSeries(Nacelle) - - # tower - Tower = FindSource(rootMode + StructureModule + '_TowerLn2Mesh_motion...vtp') - SetActiveSource(Tower) - ExtendFileSeries(Tower) - Tower = FindSource(rootMode + 'TowerSurface...vtp') - SetActiveSource(Tower) - ExtendFileSeries(Tower) - - ##### - SetActiveView(GetRenderView()) - #view = GetActiveView() - layout = GetLayout() - - animFile= os.path.join(OutputDir, rootSim+'.Mode{:d}.avi'.format(iMode+1)) - print('Saving animation... ',animFile, end='') - WriteAnimation(animFile, viewOrLayout=layout, FrameRate=vFPS[iMode], ImageResolution=(1544,784), Compression=True)# ImageResolution=(1544,784) -# SaveAnimation(rootMode + 'avi', viewOrLayout=layout, FrameRate=fps, ImageResolution=(1544,784) ) - # this .pvsm file defaults to (2734,1178) without ImageResolution arguments, resulting in a bunch of warnings - # For some reason, ParaView is ignoring the FrameRate argument and always uses a value of 1. - print(' Done.') - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py deleted file mode 100644 index e18d0d62de..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py +++ /dev/null @@ -1,103 +0,0 @@ -import unittest -import os -import glob -import numpy as np -import pyFAST.linearization.mbc as mbc -import pyFAST.linearization.campbell as camp - - -MyDir=os.path.join(os.path.dirname(__file__)) - -class Test(unittest.TestCase): - - def mbc3_standstill(self, lin_file): - # Script Parameters - BladeLen = 40.04 # Blade length, used to tune relative modal energy [m] - TowerLen = 55.59 # Tower length, used to tune relative modal energy [m] - - # Derived parameters - lin_files = np.array([lin_file]) - - # Performing MBC (NOTE: not stricly necessary without rotation) - mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) - CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) - - nModesMax = np.min([len(CD['Modes']),10]) - Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) - Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)]) - LogDec = Damp*100*2*np.pi - return Freq, Damp, LogDec - - def test_mbc3_standstill(self): - lin_file = os.path.join(MyDir,'../../../data/example_files/Standstill.1.lin') - Freq, Damp, LogDec = self.mbc3_standstill(lin_file) - np.testing.assert_almost_equal(Freq[:3] ,[0.427, 0.450, 0.669], 3) - np.testing.assert_almost_equal(LogDec[:3],[1.9505,2.1309,5.0649], 4) - - def test_mbc3_standstill_old(self): - lin_file = os.path.join(MyDir, '../../../data/example_files/Standstill_old.1.lin') - Freq, Damp, LogDec = self.mbc3_standstill(lin_file) - np.testing.assert_almost_equal(Freq[:3] ,[0.427, 0.449, 0.667], 3) - np.testing.assert_almost_equal(LogDec[:3],[1.9497,2.1162,5.0113], 4) - - def test_mbc3_ED_Azi3(self): - # --- ElastoDyn, second order states only - # Script Parameters - BladeLen = 61.5 # Blade length, used to tune relative modal energy [m] - TowerLen = 87.6 # Tower length, used to tune relative modal energy [m] - lin_files = glob.glob(os.path.join(MyDir,'../../../data/linearization_outputs/ws03.0*.lin')) - - # Performing MBC - mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) - CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) - - nModesMax = np.min([len(CD['Modes']),10]) - Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) - Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)])*100 - np.testing.assert_almost_equal(Freq[:3],[0.31402747,0.33140717,0.6263423], 3) - np.testing.assert_almost_equal(Damp[:3],[0.43860177,6.03443072,2.48116647], 4) - - def test_mbc3_EDHD(self): - # --- ElastoDyn and HydroDyn, mix of second order states and first order - # Script Parameters - BladeLen = 61.5 # Blade length, used to tune relative modal energy [m] - TowerLen = 87.6 # Tower length, used to tune relative modal energy [m] - lin_files = [os.path.join(MyDir,'../../../data/example_files/StandstillSemi_ForID_EDHD.1.lin')] - - # Performing MBC - mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) - CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) - - nModesMax = np.min([len(CD['Modes']),10]) - Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) - Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)])*100 - Freq_ref = [0.00852735,0.00865675,0.01333642 ,0.03147209 ,0.03544405,0.03550137,0.04915103,0.07296769 ,0.07801498 ,0.08493981] - Damp_ref = [0.16886295,3.43729876,25.10525282,56.73819059,2.56872571,2.45772964,0.18473601,23.22413272,11.67420729,24.10895804] - - np.testing.assert_almost_equal(Freq, Freq_ref, 4) - np.testing.assert_almost_equal(Damp, Damp_ref, 4) - - def test_mbc3_EDBD(self): - # --- ElastoDyn and BeamDyn, second order states - # Script Parameters - BladeLen = 100.0 # Blade length, used to tune relative modal energy [m] - TowerLen = 100.0 # Tower length, used to tune relative modal energy [m] - lin_files = [os.path.join(MyDir,'../../../data/example_files/BAR_URC_EDBD.1.lin')] - - # Performing MBC - mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) - CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) - - nModesMax = np.min([len(CD['Modes']),10]) - Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) - Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)])*100 - Freq_ref = [0.18549539,0.18727956,1.12675789,1.25491926,9.03091505,9.05584944,9.31045707,9.36779001,11.30081115,13.78922866] - Damp_ref = [0.40656628,0.40815288,0.64834856,0.75063003,6.02032061,8.60631293,6.29886588,8.37207306,9.96489352,9.70093435] - - np.testing.assert_almost_equal(Freq, Freq_ref, 4) - np.testing.assert_almost_equal(Damp, Damp_ref, 4) - - -if __name__ == '__main__': -# Test().test_000_debug() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py deleted file mode 100644 index 98de8c67b9..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py +++ /dev/null @@ -1,94 +0,0 @@ -import unittest -import os -import numpy as np -import pyFAST -import pyFAST.linearization as lin - -MyDir = os.path.dirname(__file__) - -class Test(unittest.TestCase): - - def test_ED(self): - # Check that identify modes works as intended for a standstill case with ElastoDyn - # NOTE: there are still some issues for the 2nd tower FA - # - BladeLen=40 - TowerLen=55 - lin_files = [os.path.join(MyDir,'../../../data/example_files/Standstill_ForID_ED.1.lin')] - - mbc_data, matData = lin.fx_mbc3(lin_files, verbose=False) - CD = lin.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) - - modeID_table,modesDesc = lin.IdentifyModes([CD]) - modeIDs= lin.IdentifiedModesDict([CD], modeID_table, modesDesc)[0] - #for k,v in modeIDs.items(): - # print(k,v) - - modeID_table_Manual = [0 , 2 , 1 , 4 , 6 , 5 , 7 , 8 , 3 , 13 , 14 , 9 , 11 , 10 , 0 ] - modeID_table_Ref = [0 , 2 , 1 , 4 , 6 , 5 , 7 , 3 , 8 , 12, 13 , 14 , 9 , 10 , 11 , 0 ] - - np.testing.assert_equal(modeID_table[:,0],modeID_table_Ref) - - np.testing.assert_equal(modeIDs['1st Tower FA']['ID'],2) - np.testing.assert_equal(modeIDs['1st Tower SS']['ID'],1) - np.testing.assert_equal(modeIDs['1st Blade Flap (Regressive)']['ID'],4) - np.testing.assert_equal(modeIDs['1st Blade Edge (Regressive)']['ID'],7) - np.testing.assert_equal(modeIDs['2nd Tower FA']['ID'],13) # Should be 13 - np.testing.assert_equal(modeIDs['2nd Tower SS']['ID'],14) - np.testing.assert_equal(modeIDs['2nd Blade Flap (Regressive)']['ID'],9) - - np.testing.assert_almost_equal(modeIDs['1st Tower FA']['f0'],0.44331, 4) - np.testing.assert_almost_equal(modeIDs['1st Tower SS']['f0'],0.42219, 4) - np.testing.assert_almost_equal(modeIDs['1st Blade Flap (Regressive)']['f0'],0.90737, 4) - np.testing.assert_almost_equal(modeIDs['1st Blade Edge (Regressive)']['f0'],1.82162, 4) - np.testing.assert_almost_equal(modeIDs['2nd Tower SS']['f0'],4.28604,4) - np.testing.assert_almost_equal(modeIDs['2nd Blade Flap (Regressive)']['f0'],2.53595,4) - - def test_HD(self): - # Check that identify modes works as intended for a standstill case with ElastoDyn and Hydrodyn - # NOTE: there are still some issues for the 2nd tower FA - # - BladeLen=40 - TowerLen=55 - lin_files = [os.path.join(MyDir,'../../../data/example_files/StandstillSemi_ForID_EDHD.1.lin')] - - mbc_data, matData = lin.fx_mbc3(lin_files, verbose=False) - CD = lin.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) - sSummary = lin.campbellData2TXT(CD, nFreqOut=65) - - modeID_table,modesDesc = lin.IdentifyModes([CD]) - modeIDs= lin.IdentifiedModesDict([CD], modeID_table, modesDesc)[0] - -# print(sSummary) -# -# for k,v in modeIDs.items(): -# print(k,v) -# -# print(modeID_table) - - np.testing.assert_equal(modeIDs['1st Blade Flap (Regressive)' ]['ID'], 47) - np.testing.assert_equal(modeIDs['1st Blade Flap (Progressive)']['ID'], 50) - #np.testing.assert_equal(modeIDs['1st Blade Edge (Regressive)' ]['ID'], 55) -# np.testing.assert_equal(modeIDs['1st Blade Edge (Progressive)']['ID'], 56) - np.testing.assert_equal(modeIDs['2nd Blade Flap (Regressive)' ]['ID'], 58) - np.testing.assert_equal(modeIDs['2nd Blade Flap (Progressive)']['ID'], 59) - np.testing.assert_equal(modeIDs['2nd Blade Flap (Collective)' ]['ID'], 60) - np.testing.assert_equal(modeIDs['1st Blade Edge (Collective)' ]['ID'], 51) - - np.testing.assert_equal(modeIDs['Platform sway' ]['ID'], 1) - np.testing.assert_equal(modeIDs['Platform surge' ]['ID'], 2) - np.testing.assert_equal(modeIDs['Platform heave' ]['ID'], 7) - np.testing.assert_equal(modeIDs['Platform yaw' ]['ID'], 3) - - - # Test that might need to updated after the indentification is improved - # NOTE: the results below are probaly not good -# np.testing.assert_equal(modeIDs['1st Tower FA']['ID'],52) -# np.testing.assert_equal(modeIDs['1st Tower SS']['ID'],53) -# np.testing.assert_equal(modeIDs['1st Blade Flap (Collective)' ]['ID'], 54) -# np.testing.assert_equal(modeIDs['2nd Tower SS' ]['ID'], 62) - -if __name__ == '__main__': - #Test().test_ED() - #Test().test_HD() - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py deleted file mode 100644 index df0508007b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py +++ /dev/null @@ -1,118 +0,0 @@ -import unittest -import os -import numpy as np -import matplotlib.pyplot as plt -import pyFAST.linearization as lin - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - - -f0_ref = [0.587830219596616, 0.722482755465059, 0.841644628629986, 0.937126199078433, 1.237130544073060, 1.837320640593674, 1.986990893316201, 2.133747228535351, 2.256063763227361] -zeta_ref = [6.310588187661754e-01, 5.252901946117751e-01, 4.401008557171799e-01, 1.634432195163714e-02, 1.235888553742901e-02, 1.555277937084565e-01, 1.428798211984810e-01, 1.337606910498821e-01, 2.258501382142458e-02] -Qmag_11 = [1.514472004400742e-05, 1.947994954300747e-01, 1.754772630476129e-01, 1.825691131755990e-01, 4.495989525843738e-03, 5.053399414140790e-03, 5.969950454246335e-03, 1.471919803320060e-02, 1.285988755307813e-02, 1.308283162729386e-02, 5.593620867971226e-05, 7.194814559410425e-01, 6.481158301940565e-01, 6.743091970923338e-01, 1.660569542445695e-02, 1.866445885760891e-02, 2.204969081277093e-02, 5.436456602636927e-02, 4.749730280101332e-02, 4.832073474448904e-02] -Qmag_83 = [1.441947564996028e-06, 6.371604702191713e-03, 6.305232540330547e-03, 6.289204718671321e-03, 6.932640151237337e-03, 6.546664262594788e-03, 6.589993010888945e-03, 5.227729076001339e-02, 5.129797039680727e-02, 5.179175676167141e-02, 1.933180057575511e-05, 8.542237903835923e-02, 8.453254543550748e-02, 8.431766477028646e-02, 9.294402939527062e-02, 8.776935516478050e-02, 8.835025196127627e-02, 7.008674823885858e-01, 6.877379994442021e-01, 6.943580595381521e-01] -Qphi_92 = [1.561610973903578, -1.700282526230297, -1.701805350416750, -1.697002105810609, 1.548360360707519, 1.547997531767750, 1.548270549679593, 2.395681952509270, 2.461948283219694, 2.405369652375428, -3.128191072180800, -0.106899265135085, -0.108422089321542, -0.103618844715400, -3.141441685376858, 3.141380792862958, -3.141531496404784, -2.294120093575104, -2.227853762864683, -2.284432393708950] -Qphi_11 = [-4.475921307027970e-02, -7.345405529305936e-01, 1.372699116580623e+00, -2.700369426141966e+00, 1.484807930794751e+00, -2.598715647054003e+00, -5.805991423437629e-01, -1.530872103538168e+00, 5.410725214387462e-01, 2.766892929144499e+00, 2.208954492083937e+00, 1.519173152223936e+00, -2.656772485444435e+00, -4.466557209874353e-01, -2.544663671230343e+00, -3.450019418994276e-01, 1.673114562810780e+00, 7.228416016163599e-01, 2.794786226593286e+00, -1.262578672880562e+00] - -def compare(var, x1, x2, res, plot=False): - try: - np.testing.assert_almost_equal(x1, x2, res) - except: - if True: - raise - print('fail', var, 'with ', res) - if plot: - fig,axes = plt.subplots(2, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - axes[0].plot(x1, label='new') - axes[0].plot(x2, label='ref') - axes[0].legend() - axes[1].plot(x2-x1) - plt.title(var) - -class Test(unittest.TestCase): - - def test_readBinMatlab(self): - matBinFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup') - # Read bin file - d = lin.readModesForViz(matBinFile) - # Test against known matlab values - Qmag = d['x_eig_magnitude'] - Qphi = d['x_eig_phase'] - np.testing.assert_equal(Qmag.shape, (20,9,3)) - np.testing.assert_almost_equal(d['NaturalFreq_Hz'],f0_ref , 15) # 16 fails - np.testing.assert_almost_equal(d['DampingRatio'] ,zeta_ref, 16) # 17 fails - np.testing.assert_almost_equal(Qmag[:,0,0],Qmag_11, 15) - np.testing.assert_almost_equal(Qmag[:,7,2],Qmag_83, 15) - np.testing.assert_almost_equal(Qphi[:,0,0],Qphi_11, 15) - np.testing.assert_almost_equal(Qphi[:,8,1],Qphi_92, 15) - - def test_readWriteBinMatlab(self): - matBinFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup') - matBinFile_tmp = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup_tmp') - # Read the data - d = lin.readModesForViz(matBinFile) - # Write it - lin.writeModesForViz(d, matBinFile_tmp) - # Read what we wrote - d = lin.readModesForViz(matBinFile_tmp) - # Test against known matlab values - Qmag = d['x_eig_magnitude'] - Qphi = d['x_eig_phase'] - np.testing.assert_equal(Qmag.shape, (20,9,3)) - np.testing.assert_almost_equal(d['NaturalFreq_Hz'],f0_ref , 15) # 16 fails - np.testing.assert_almost_equal(d['DampingRatio'] ,zeta_ref, 16) # 17 fails - np.testing.assert_almost_equal(Qmag[:,0,0],Qmag_11, 15) - np.testing.assert_almost_equal(Qmag[:,7,2],Qmag_83, 15) - np.testing.assert_almost_equal(Qphi[:,0,0],Qphi_11, 15) - np.testing.assert_almost_equal(Qphi[:,8,1],Qphi_92, 15) - try: - os.remove(matBinFile_tmp) - except: - pass - - def test_writeBinPython(self): - matBinFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup') - fstFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.fst') - - # --- Perform python MBC and write modes to binary file - CDDOP, MBCOP = lin.getCampbellDataOP(fstFile, writeModes=True) - - # --- Read matlab binary file (reference) - d2 = lin.readModesForViz(matBinFile) - - # --- Read python binary fie - d = lin.readModesForViz(MBCOP['modeFile']) - # Outputs to screen - #Freq,Damp = lin.printCampbellDataOP(CDDOP, nModesMax=10, nCharMaxDesc=50) - - # Test against known matlab values - Qmag1 = d['x_eig_magnitude'] - Qphi1 = d['x_eig_phase'] - Qmag2 = d2['x_eig_magnitude'] - Qphi2 = d2['x_eig_phase'] - np.testing.assert_equal(Qmag1.shape, (20,9,3)) - compare('f0', d['NaturalFreq_Hz'],f0_ref , 14) # 15 fails - compare('ze', d['DampingRatio'] ,zeta_ref, 15) # 16 fails - compare('f0', d['NaturalFreq_Hz'], d2['NaturalFreq_Hz'], 14) # 15 fails - compare('ze', d['DampingRatio'] , d2['DampingRatio'], 15) # 16 fails - # Somehow values for state 0 and 10 are off... - for iAz in range(1): - for iMode in range(9): - v1 = Qmag1[:,iMode,iAz] - v2 = Qmag2[:,iMode,iAz] - v1 = np.concatenate((Qmag1[1:10,iMode,iAz],Qmag1[11:-1,iMode,iAz] )) - v2 = np.concatenate((Qmag2[1:10,iMode,iAz],Qmag2[11:-1,iMode,iAz] )) - compare('q{:d}{:d}'.format(iMode,iAz), v1, v2, 10, plot=False) - - for iAz in range(1): - for iMode in range(9): - v1 = np.concatenate((Qphi1[1:10,iMode,iAz],Qphi1[11:-1,iMode,iAz] )) - v2 = np.concatenate((Qphi2[1:10,iMode,iAz],Qphi2[11:-1,iMode,iAz] )) - compare('p{:d}{:d}'.format(iMode,iAz), v1, v2, 10, plot=False) - #plt.show() - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py deleted file mode 100644 index 14faa56d62..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py +++ /dev/null @@ -1,31 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) - for f in files: - print('\n--------------------------------------------------------------') - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py deleted file mode 100644 index 0d3693b791..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py +++ /dev/null @@ -1,397 +0,0 @@ -""" -Simple tools to assist in doing linearization analyses with OpenFAST -""" -import numpy as np -import re -import os -import glob -import struct - -from pyFAST.linearization.mbc import fx_mbc3, formatModesForViz -from pyFAST.linearization.campbell_data import campbell_diagram_data_oneOP # - - -def getCampbellDataOP(fstFile_or_linFiles, writeModes=None, BladeLen=None, TowerLen=None, - removeTwrAzimuth=False, starSub=None, removeStatesPattern=None, verbose=False, - writeViz=False, **kwargs): - """ - Return Campbell Data at one operating point from a .fst file or a list of lin files - INPUTS: - - fstFile_or_linFiles: filename of one .fst file, or, list of .lin files - examples: 'main.fst' or ['main.1.lin', 'main.4.lin'] - - - writeModes: if True, a binary file and a .viz file is written to disk for OpenFAST VTK visualization. - if None, the binary file is written only if a checkpoint file is present. - For instance, if the main file is : 'main.fst', - the binary file will be : 'main.ModeShapeVTK.pyPostMBC' - the viz file will be : 'main.ModeShapeVTK.viz' - the checkpoint file is expected to be : 'main.ModeShapeVTK.chkp' - - - BladeLen: blade length needed to scale the Campbell diagram data. - if None: the length is inferred by reading the .fst file (and ED file) - - TowerLen: tower length needed to scale the Campbell diagram data. - if None: the length is inferred by reading the .fst file (and ED file) - - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g: 'tower|Drivetrain' or '^AD' - see FASTLinearizationFile. - - removeTwrAzimuth: if False do nothing - otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). - - verbose: if True, more info is written to stdout - - - **kwargs: list of key/values to be passed to writeVizFile (see function below) - VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None - - OUTPUTS: - - CDDOP: campbell diagram data for operating point (dictionary with many keys) - - MBCOP: MBC data for operating point (dictionary) - """ - # --- Figure out if the user provided a .fst file or a list of .lin files - fstFile, linFiles = getFST_and_LinFiles(fstFile_or_linFiles, verbose=verbose) - - # --- Open lin files for given OP/fst file, perform MBC - MBCOP, matData = getMBCOP(fstFile=fstFile, linFiles=linFiles, verbose=verbose, removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern) - if MBCOP is None: - return None, None - - # --- Check if checkpoint file exists. If it does, we write the Modes - fullpathbase, ext = os.path.splitext(fstFile) - fullpath_chkp = fullpathbase + '.ModeShapeVTK.chkp' - fullpath_modes = fullpathbase + '.ModeShapeVTK.pyPostMBC' - if writeModes is None: - writeModes = os.path.exists(fullpath_chkp) - - # --- Write Modes for OpenFAST VTK visualization - if writeModes: - writeMBCOPForViz(MBCOP, matData, fullpath_modes, verbose=verbose) - MBCOP['modeFile'] = fullpath_modes - else: - MBCOP['modeFile'] = None - - # --- Write Viz file if requested (NOTE: better to do this outside) - if writeViz: - vizfile = writeVizFile(fstFile, verbose=verbose, **kwargs) - MBCOP['vizFile'] = vizfile - else: - MBCOP['vizFile'] = None - - # --- Estimate blade and tower length for scaling - if BladeLen is None and TowerLen is None: - BladeLen, TowerLen = estimateLengths(fstFile, verbose=verbose) - - # --- put data into "CampbellData" format - CDDOP = campbell_diagram_data_oneOP(MBCOP, BladeLen, TowerLen) - - return CDDOP, MBCOP - - -def getCampbellDataOPs(fstFiles, BladeLen=None, TowerLen=None, verbose=False, **kwargs): - """ - Return Campbell Data at several operating points from a list of .fst files - see getCampbellDataOP for input arguments - """ - # --- Estimate blade length and tower length for scaling - if BladeLen is None and TowerLen is None: - BladeLen, TowerLen = estimateLengths(fstFiles[0], verbose=verbose) - - # --- Run MBC for all operating points - MBC = [] - CDD = [] - for i_lin, fstFile in enumerate(fstFiles): - CDDOP, MBCOP = getCampbellDataOP(fstFile, BladeLen=BladeLen, TowerLen=TowerLen, verbose=verbose, **kwargs) - if MBCOP is not None: - CDD.append(CDDOP) - MBC.append(MBCOP) - # Remove missing data - if len(CDD)==0: - raise Exception('No linearization file found') - return CDD, MBC - -def getMBCOP(fstFile, linFiles=None, verbose=False, removeTwrAzimuth=False, starSub=None, removeStatesPattern=None): - """ - Run necessary MBC for an OpenFAST file (one operating point) - - INPUTS: - - fstFile: main openfast `.fst` filename - - linFiles: list of linfiles, inferred from fstfile if None provided - - starSub: if None, raise an error if `****` are present - otherwise replace *** with `starSub` (e.g. 0) - see FASTLinearizationFile. - - removeStatesPattern: remove states matching a giving description pattern. - e.g. r'^AD' : remove the AeroDyn states - see FASTLinearizationFile. - - removeTwrAzimuth: if False do nothing - otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). - - """ - - # --- Find available lin files - if linFiles is None: - linFiles = findLinFiles(fstFile, verbose=verbose) - - # --- run MBC3 and campbell post_pro on lin files, generate postMBC file if needed - if len(linFiles)>0: - MBC, matData = fx_mbc3(linFiles, verbose=False, removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern) - else: - return None, None - - return MBC, matData - -def getMBCOPs(fstfiles, verbose=True, removeTwrAzimuth=False): - """ - Run MBC transform on set of openfast linear outputs (multiple operating points) - - INPUTS: - - fstfiles: list of .fst files - """ - MBC = [None]*len(fstfiles) - for i_lin, fstfile in enumerate(fstfiles): - # MBC for a given operating point (OP) - MBC[i_lin], matData = getMBCOP(fstfile, verbose=verbose, removeTwrAzimuth=removeTwrAzimuth) - return MBC - - - -def getFST_and_LinFiles(fstFile_or_linFiles, verbose=False): - """ - Given a .fst or a list of .lin files, return both: - - if a fst file is provided, .lin file next to it are sought for - - if a list of line files are provided, return the .fst file from which they originated - """ - if isinstance(fstFile_or_linFiles,str): - # The user provided a string, we expect it's a .fst file - fullpathbase, ext = os.path.splitext(fstFile_or_linFiles) - if ext.lower()!='.fst': - raise Exception('Provide either one fst file, or a list of .lin files') - fstFile = fstFile_or_linFiles - # --- Find available lin files - linFiles = findLinFiles(fstFile, verbose=verbose) - else: - # the user provided a list (hopefully) - fullpathbase, ext = os.path.splitext(fstFile_or_linFiles[0]) - if ext.lower()!='.lin': - print(fstFile_or_linFiles) - raise Exception('Provide either one fst file, or a list of .lin files') - linFiles = fstFile_or_linFiles - fullpathbase, ext = os.path.splitext(fullpathbase) - fstFile = fullpathbase+'.fst' - - return fstFile, linFiles - -def writeVizFile(fstFile, VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None, verbose=False): - fullpathbase, ext = os.path.splitext(fstFile) - filebase = os.path.basename(fullpathbase) - fullpath_viz = fullpathbase + '.ModeShapeVTK.viz' - base_chkp = filebase + '.ModeShapeVTK' - base_modes = filebase + '.ModeShapeVTK.pyPostMBC' - - if VTKModes is None: - VTKModes=','.join((np.arange(VTKLinModes)+1).astype(str)) - - with open(fullpath_viz, 'w') as f: - f.write('------- OpenFAST MODE-SHAPE INPUT FILE -------------------------------------------\n'); - f.write('# Options for visualizing mode shapes\n'); - f.write('---------------------- FILE NAMES ----------------------------------------------\n'); - f.write('"{:s}" CheckpointRoot - Rootname of the checkpoint file written when OpenFAST generated the linearization files (without the ".chkp" extension)\n'.format(base_chkp)) - f.write('"{:s}" ModesFileName - Name of the mode-shape file (with eigenvectors)\n'.format(base_modes)) - f.write('---------------------- VISUALIZATION OPTIONS -----------------------------------\n') - f.write('{:d} VTKLinModes - Number of modes to visualize (0 <= VTKLinModes <= NumModes)\n'.format(VTKLinModes)) - f.write('{:s} VTKModes - List of which VTKLinModes modes will be visualized (modes will be added sequentially from the last value entered)\n'.format(VTKModes)) - f.write('{:f} VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n'.format(VTKLinScale)) - f.write('{:d} VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n'.format(VTKLinTim)) - f.write('{} VTKLinTimes1 - If VTKLinTim=2, visualize modes at LinTimes(1) only? (if false, files will be generated at all LinTimes)\n'.format(VTKLinTimes1)) - f.write('{:f} VTKLinPhase - Phase used when making one animation for all LinTimes together (used only when VTKLinTim=1)\n'.format(VTKLinPhase)) -# if isnan(opts.VTKLinScale) -# % Then user didn't specify it, we use some logic -# if CompElast==1 % ElastoDyn - VTKLinScale=10 -# fprintf(fid,'10 VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n'); -# elseif CompElast==2 % BeamDyn - VTKLinScale=0.1 -# fprintf(fid,'0.1 VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n'); -# fprintf(fid,'%f VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n',opts.VTKLinScale); -# end -# if isnan(opts.VTKLinTim) -# % The user didn't specify this, we use some logic -# fprintf(fid,'2 VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n'); -# else -# if (RPM<1e-3) % When RPM =0, VTKLinTim=1 would only produce one VTK -# fprintf(fid,'2 VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n'); -# else -# fprintf(fid,'%d VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n',opts.VTKLinTim); -# end -# end -# if length(opts.VTKLinTimes1)==0 -# % The user didn't specify this -# fprintf(fid,'true VTKLinTimes1 - If VTKLinTim=2, visualize modes at LinTimes(1) only? (if false, files will be generated at all LinTimes)\n'); -# else -# fprintf(fid,'%s VTKLinTimes1 - If VTKLinTim=2, visualize modes at LinTimes(1) only? (if false, files will be generated at all LinTimes)\n',opts.VTKLinTimes1); -# end -# fclose(fid); - if verbose: - print(' Written Viz File:', fullpath_viz) - return fullpath_viz - -def writeVizFiles(fstFiles, **kwargs): - """ write viz file for a set of fst files - see writeVizFile - """ - return [writeVizFile(fst, **kwargs) for fst in fstFiles] - -# ------------------------------------------------------------------------ -def fread(fid, n, type): - """ Mimic the matlab function fread""" - fmt, nbytes = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type] - v = struct.unpack(fmt * n, fid.read(nbytes * n)) - if n==1: - return v[0] - else: - return np.asarray(v) - -def fwrite(fid, data, type): - """ Mimic the matlab function fwrite""" - # @ is used for packing in native byte order - # B - unsigned integer 8 bits - # h - integer 16 bits - # i - integer 32 bits - # f - float 32 bits - # d - float 64 bits - fmt, _ = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type] - if hasattr(data, '__len__'): - data = data.flatten(order='F') - n=len(data) - fid.write(struct.pack('@'+str(n)+fmt, *data)) - else: - fid.write(struct.pack('@'+fmt, data)) - - -def writeMBCOPForViz(MBCOP, matData, modesFilename, nModesOut=None, nDigits=None, verbose=False, hack=False): - VTK = formatModesForViz(MBCOP, matData, MBCOP['nb'], MBCOP['EigenVects_save']) - return writeModesForViz(VTK, modesFilename, nModesOut=nModesOut, nDigits=nDigits, verbose=verbose, hack=hack) - -# def writeModesForViz(f0, fd, zeta, Q, modesFilename, format='OFBinary'): -def writeModesForViz(VTK, modesFilename, nModesOut=None, nDigits=None, verbose=False, hack=False): - """ - write binary file that will be read by OpenFAST to export modes to VTK - """ - - reFmt = 'float64' #8-byte real numbers - nStates, nModes, nLinTimes = VTK['x_eig_magnitude'].shape - if nModesOut is None: - nModesOut=nModes - - #------- HACK to compare with matlab - if hack: - VTK['NaturalFreq_Hz'] =VTK['NaturalFreq_Hz']*0 + 1 - VTK['DampingRatio'] =VTK['DampingRatio'] *0 + 2 - VTK['DampedFreq_Hz'] =VTK['DampedFreq_Hz'] *0 + 3 - for iMode in range(nModes): - VTK['x_eig_magnitude'][:,iMode,:] = np.zeros((nStates,nLinTimes)) + iMode+1 - VTK['x_eig_phase'] [:,iMode,:] = np.zeros((nStates,nLinTimes)) + iMode+1 - VTK['x_eig_magnitude'][2,iMode,:] = 12 - VTK['x_eig_phase'] [4,iMode,:] = 11 - nModesOut=1 - # ------END HACK - # --- Reduce differences python/Matlab by rounding - if nDigits is not None: - res = 10**nDigits - VTK['NaturalFreq_Hz'] = np.around(VTK['NaturalFreq_Hz'] , nDigits) - VTK['DampingRatio'] = np.around(VTK['DampingRatio'] , nDigits) - VTK['DampedFreq_Hz'] = np.around(VTK['DampedFreq_Hz'] , nDigits) - VTK['x_eig_magnitude'] = np.around(VTK['x_eig_magnitude'], nDigits) - VTK['x_eig_phase' ] = np.around(VTK['x_eig_phase'] , nDigits) - - # --- Write to disk - with open(modesFilename, 'wb') as fid: - fwrite(fid, 1, 'int32' )# write a file identifier in case we ever change this format - fwrite(fid, nModesOut, 'int32' )# number of modes (for easier file reading) - fwrite(fid, nStates, 'int32' )# number of states (for easier file reading) - fwrite(fid, nLinTimes,'int32' )# number of azimuths (i.e., LinTimes) (for easier file reading) - # Freq and damping (not used in the FAST visualization algorithm) - fwrite(fid, VTK['NaturalFreq_Hz'], reFmt) - fwrite(fid, VTK['DampingRatio'], reFmt) - fwrite(fid, VTK['DampedFreq_Hz'], reFmt) - # Writing data mode by mode - for iMode in range(nModesOut): - fwrite(fid, VTK['x_eig_magnitude'][:,iMode,:], reFmt) - fwrite(fid, VTK['x_eig_phase'] [:,iMode,:], reFmt) - if verbose: - print(' Written ModeFile:', modesFilename) - -def readModesForViz(modesFilename): - """ """ - reFmt = 'float64' #8-byte real numbers - with open(modesFilename, 'rb') as fid: - fformat = fread(fid, 1, 'int32' ) # format identifier - nModes = fread(fid, 1, 'int32' ) # number of modes (for easier file reading) - nStates = fread(fid, 1, 'int32' ) # number of states (for easier file reading) - nLinTimes= fread(fid, 1, 'int32' ) # number of azimuths (i.e., LinTimes) (for easier file reading) - # Freq and damping (not used in the FAST visualization algorithm) - f0 = fread(fid, nModes, reFmt ) # number of modes (for easier file reading) - zeta = fread(fid, nModes, reFmt ) # number of states (for easier file reading) - fd = fread(fid, nModes, reFmt ) # number of azimuths (i.e., LinTimes) (for easier file reading) - # Reading data mode by mode - Qmag = np.zeros((nStates, nModes, nLinTimes)) - Qphi = np.zeros((nStates, nModes, nLinTimes)) - for iMode in range(nModes): - mag = fread(fid, nStates*nLinTimes, reFmt).reshape((nStates,nLinTimes), order='F') - phi = fread(fid, nStates*nLinTimes, reFmt).reshape((nStates,nLinTimes), order='F') - Qmag[:,iMode,:] = mag - Qphi[:,iMode,:] = phi - - VTK = {} - VTK['NaturalFreq_Hz'] = f0 - VTK['DampingRatio'] = zeta - VTK['DampedFreq_Hz'] = fd - VTK['x_eig_magnitude'] = Qmag - VTK['x_eig_phase'] = Qphi - - return VTK - - -def findLinFiles(fstFile, verbose=False): - """ - Find .lin files given a .fst file - """ - fullpathbase, ext = os.path.splitext(fstFile) - # NOTE: the code below is problematic for module lin files ED.1.lin - # So we do a re search to filter these out - # First use glob - lin_file_fmt = '{}.*.lin'.format(fullpathbase) - lin_files = glob.glob(lin_file_fmt) - # Then use re for stricter search - lin_file_fmt_re = r'.*\.[0-9]+\.lin' - lin_files = glob_re(lin_file_fmt_re, lin_files) - if len(lin_files)==0: - if verbose: - print('[WARN] Lin. files: {} ({})'.format(lin_file_fmt, len(lin_files))) - else: - if verbose: - print(' Lin. files: {} ({})'.format(lin_file_fmt, len(lin_files))) - return lin_files - -def estimateLengths(fstFile, verbose=False): - if os.path.exists(fstFile): - # try to read BladeLen and TowerLen from fst file - # TODO: can be done with pyFAST.io or AeroElasticSE - # The interface is very similar - from pyFAST.input_output.fast_input_deck import FASTInputDeck - fst = FASTInputDeck(fstFile, 'ED') - ED = fst.fst_vt['ElastoDyn'] - if ED is None: - raise Exception('Unable to infer BladeLen and TowerLen, ElastoDyn file not found. FST file is: ',fstFile) - BladeLen = ED['TipRad'] - ED['HubRad'] - TowerLen = ED['TowerHt'] - else: - raise Exception('Provide `BladeLen` and `TowerLen`, or, an existing fst and ED file') - if verbose: - print('BladeLength (for scaling): ',BladeLen) - print('TowerLength (for scaling): ',TowerLen) - - return BladeLen, TowerLen - -def glob_re(pattern, strings): - """ Apply a pattern to a list of strings - Typically used as "glob" and "re" to select a list of files matting a given mattern""" - return list(filter(re.compile(pattern).match, strings)) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py deleted file mode 100644 index e0cf56f7eb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py +++ /dev/null @@ -1,211 +0,0 @@ -""" -Tools to work with OLAF the vortex code implemented in openfast -""" -import numpy as np - - -def OLAFParams(omega_rpm, U0, R, a=0.3, aScale=1.2, - deltaPsiDeg=6, nPerRot=None, - targetFreeWakeLengthD=1, - targetWakeLengthD=4., - nNWrot=8, - nNWrotFree=1, - nFWrot=0, nFWrotFree=0, - verbose=True, dt_glue_code=None): - """ - Computes recommended time step and wake length for OLAF based on: - - INPUTS: - - omega_rpm: rotational speed [RPM] - - U0: mean wind speed [m/s] - - R: rotor radius [m] - - OPTIONS FOR TIME STEP: - - either: - - deltaPsiDeg : target azimuthal discretization [deg] - or - - nPerRot : number of time step per rotations. - deltaPsiDeg - nPerRot - 5 72 - 6 60 - 7 51.5 - 8 45 - - dt_glue_code: glue code time step. If provided, the time step of OLAF will be approximated - such that it is a multiple of the glue-code time step. - - OPTIONS FOR WAKE LENGTH: - - a: average axial induction factor at the rotor [-] - - aScale: scaling factor to estimate induction, such that the wake convection velocity is: - Uc=U0(1-aScale*a) - - targetWakeLengthD: target wake length in diameter [D] - - nNWrot : minimum number of near wake rotations - - nFWrot : minimum number of far wake rotations - - nFWrotFree : minimum number of far wake rotations (free panels) - - """ - def myprint(*args, **kwargs): - if verbose: - print(*args, **kwargs) - - # Rotational period - omega = omega_rpm*2*np.pi/60 - T = 2*np.pi/omega - # Convection velocity - Uc = U0 * (1-aScale*a) - - # Desired time step - if nPerRot is not None: - dt_wanted = np.around(T/nPerRot,5) - deltaPsiDeg = np.around(omega*dt_wanted*180/np.pi ,2) - else: - dt_wanted = np.around(deltaPsiDeg/(6*omega_rpm),5) - nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) - - # Adapting desired time step based on glue code time step - if dt_glue_code is not None: - dt_rounded = round(dt_wanted/dt_glue_code)*dt_glue_code - deltaPsiDeg2 = np.around(omega*dt_rounded *180/np.pi ,2) - myprint('>>> To satisfy glue-code dt:') - myprint(' Rounding dt from {} to {}'.format(dt_wanted, dt_rounded )) - myprint(' Changing dpsi from {} to {}'.format(deltaPsiDeg, deltaPsiDeg2)) - dt_fvw = dt_rounded - deltaPsiDeg = deltaPsiDeg2 - nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) - else: - dt_fvw = dt_wanted - - # Useful functions - n2L = lambda n: (n * dt_fvw * Uc)/(2*R) # convert number of panels to distance - n2R = lambda n: n * dt_fvw / T # convert number of panels to number of rotations - n2t = lambda n: n * dt_fvw # convert number of panels to time - - # All Wake (AW) panels - Wake length from mean wind speed - targetWakeLength = targetWakeLengthD * 2 * R - nAWPanels_FromU0 = int(targetWakeLength / (Uc*dt_fvw)) - # Free near wake panels (based on distance) - targetFreeWakeLength = targetFreeWakeLengthD * 2 * R - nNWPanelsFree_FromU0 = int(targetFreeWakeLength / (Uc*dt_fvw)) - nNWPanelsFree_FromRot = int(nNWrotFree*nPerRot) - # Far wake (FW) panels, always from number of rotations - nFWPanels = int(nFWrot*nPerRot) - nFWPanelsFree = int(nFWrotFree*nPerRot) - # Wake length from rotational speed and number of rotations - nAWPanels_FromRot = int(nNWrot*nPerRot) # Total number of panels NW+FW - - # Below we chose between criteria on number of rotation or donwstream distance - # This can be adapted/improved - myprint('Number of panels (NW free) from wind speed and distance:{:15d}'.format(nNWPanelsFree_FromU0)) - myprint('Number of panels (NW free) from number of rotations :{:15d}'.format(nNWPanelsFree_FromRot)) - myprint('Number of panels (NW+FW) from wind speed and distance:{:15d}'.format(nAWPanels_FromU0)) - myprint('Number of panels (NW+FW) from number of rotations :{:15d}'.format(nAWPanels_FromRot)) - myprint('Number of panels (NW+FW) from average between two :{:15d}'.format(int((nAWPanels_FromRot+nAWPanels_FromU0)/2))) - if nAWPanels_FromRot>nAWPanels_FromU0: - # Criteria based on rotation wins: - myprint('[INFO] Using number of rotations to setup number of panels') - nAWPanels = nAWPanels_FromRot # Total number of panels NW+FW - else: - myprint('[INFO] Using wind speed and distance to setup number of panels') - # Wake distance wins, we keep the nFW from rot but increase nNW - nAWPanels = nAWPanels_FromU0 # Total number of panels NW+FW - if nNWPanelsFree_FromRot>nNWPanelsFree_FromU0: - # Criteria based on rotation wins: - myprint('[INFO] Using number of rotations to setup number of free panels') - nNWPanelsFree = nNWPanelsFree_FromRot - else: - myprint('[INFO] Using wind speed and distance to setup number of free panels') - # Wake distance wins, we keep the nFW from rot but increase nNW - nNWPanelsFree = nNWPanelsFree_FromU0 - - nNWPanels = nAWPanels - nFWPanels # nNW = All-Far Wake - - # See "free" near wake - if nNWPanelsFree>nNWPanels: - nNWPanelsFree=nNWPanels - myprint('[INFO] Capping number of free NW panels to max.') - if nNWPanelsFree0: - nFWPanelsFree=0 - myprint('[INFO] Setting number of Free FW panels to zero because a frozen near wake is used') - - # Transient time (twice the time to develop the full wake extent) - # This is the minimum recommended time before convergence of the wake is expected - # (might be quite long) - tMin = 2 * dt_fvw*nAWPanels - if verbose: - myprint('') - myprint('{:15.2f} Transient time ({:5.1f} rot)'.format(tMin, tMin/T)) - myprint('{:15d} nAWPanels ({:5.1f} rot, {:5.1f}D)'.format(nAWPanels, n2R(nAWPanels), n2L(nAWPanels))) - myprint('') - myprint('OLAF INPUT FILE:') - myprint('----------------------- GENERAL OPTIONS ---------------------') - myprint('{:15.6f} DTFVW (delta psi = {:5.1f}deg)'.format(dt_fvw, deltaPsiDeg)) - myprint('--------------- WAKE EXTENT AND DISCRETIZATION --------------') - myprint('{:15d} nNWPanels ({:5.1f} rot, {:5.1f}D)'.format(nNWPanels , n2R(nNWPanels ), n2L(nNWPanels ))) - myprint('{:15d} nNWPanelsFree ({:5.1f} rot, {:5.1f}D {:5.1f})'.format(nNWPanelsFree, n2R(nNWPanelsFree), n2L(nNWPanelsFree), n2t(nNWPanelsFree))) - myprint('{:15d} nFWPanels ({:5.1f} rot, {:5.1f}D)'.format(nFWPanels , n2R(nFWPanels ), n2L(nFWPanels ))) - myprint('{:15d} nFWPanelsFree ({:5.1f} rot, {:5.1f}D)'.format(nFWPanelsFree, n2R(nFWPanelsFree), n2L(nFWPanelsFree))) - - return dt_fvw, tMin, nNWPanels, nNWPanelsFree, nFWPanels, nFWPanelsFree - - - -def OLAFParamsRPM(omega_rpm, deltaPsiDeg=6, nNWrot=2, nFWrot=10, nFWrotFree=3, nPerRot=None, verbose=True, dt_glue_code=None, totalRot=None): - """ - Computes recommended time step and wake length based on the rotational speed in RPM - - INPUTS: - - omega_rpm: rotational speed in RPM - - deltaPsiDeg : azimuthal discretization in deg - - nNWrot : number of near wake rotations - - nFWrot : total number of far wake rotations - - nFWrotFree : number of far wake rotations that are free - - deltaPsiDeg - nPerRot - 5 72 - 6 60 - 7 51.5 - 8 45 - """ - omega_rpm = np.asarray(omega_rpm) - omega = omega_rpm*2*np.pi/60 - T = 2*np.pi/omega - if nPerRot is not None: - dt_wanted = np.around(T/nPerRot,5) - deltaPsiDeg = np.around(omega*dt_wanted*180/np.pi ,2) - else: - dt_wanted = np.around(deltaPsiDeg/(6*omega_rpm),5) - nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) - if dt_glue_code is not None: - dt_rounded = round(dt_wanted/dt_glue_code)*dt_glue_code - deltaPsiDeg2 = np.around(omega*dt_rounded *180/np.pi ,2) - print('>>> To satisfy glue-code dt:') - print(' Rounding dt from {} to {}'.format(dt_wanted, dt_rounded )) - print(' Changing dpsi from {} to {}'.format(deltaPsiDeg, deltaPsiDeg2)) - dt_wanted = dt_rounded - deltaPsiDeg = deltaPsiDeg2 - nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) - - nNWPanel = int(nNWrot*nPerRot) - nFWPanel = int(nFWrot*nPerRot) - nFWPanelFree = int(nFWrotFree*nPerRot) - - if totalRot is None: - totalRot = (nNWrot + nFWrot)*3 # going three-times through the entire wake - - tMax = dt_wanted*nPerRot*totalRot - - if verbose: - print(dt_wanted , ' dt') - print(int (nNWPanel ), ' nNWPanel ({} rotations)'.format(nNWrot)) - print(int (nFWPanel ), ' FarWakeLength ({} rotations)'.format(nFWrot)) - print(int (nFWPanelFree), ' FreeFarWakeLength ({} rotations)'.format(nFWrotFree)) - print(tMax , ' Tmax ({} rotations)'.format(totalRot)) - - return dt_wanted, tMax, nNWPanel, nFWPanel, nFWPanelFree - - - - - - -if __name__ == '__main__': - OLAFParams(omega_rpm = 4.87558, U0=8, R=63, deltaPsiDeg=6, verbose=True) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py deleted file mode 100644 index 7778de4b7a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# For now making everything available -from pyFAST.postpro.postpro import * -from pyFAST.tools.fatigue import equivalent_load diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py deleted file mode 100644 index 40e2511b98..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -- Open and OpenFAST binary file -- Convert it to a pandas dataframe -- Compute damage equivalent load for a given Wohler exponent -""" -import os -import numpy as np -import matplotlib.pyplot as plt -from pyFAST.input_output import FASTOutputFile -from pyFAST.postpro import equivalent_load - -# Get current directory so this script can be called from any location -scriptDir = os.path.dirname(__file__) - -# Read an openFAST binary -fastoutFilename = os.path.join(scriptDir, '../../../data/example_files/fastout_allnodes.outb') -df = FASTOutputFile(fastoutFilename).toDataFrame() - - -# Compute equivalent load for one signal and Wohler slope -m = 1 # Wohler slope -Leq = equivalent_load(df['Time_[s]'], df['RootMyc1_[kN-m]'], m=m) -print('Leq ',Leq) -# Leq = equivalent_load(df['Time_[s]'], df['RootMyc1_[kN-m]'], m=m, method='fatpack') # requires package fatpack - - -if __name__ == '__main__': - plt.show() -if __name__ == '__test__': - np.testing.assert_almost_equal(Leq , 284.30398, 3) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py deleted file mode 100644 index 6e1b8320ba..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -This example opens a fast output file, and interpolate a timeseries to a given radial location. -This is convenient when outputs are required at a station different from the ones used in the OpenFAST outputs. - -""" -import os -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt - -import pyFAST.input_output as io -import pyFAST.input_output.postpro as postpro - -def main(): - # Get current directory so this script can be called from any location - MyDir=os.path.dirname(__file__) - - # --- Read an openfast output file - outFile = os.path.join(MyDir,'../../../data/example_files/fastout_allnodes.outb') - df = io.fast_output_file.FASTOutputFile(outFile).toDataFrame() - - # --- Define output radial stations - # Option 1 - Get all these locations automatically (recommended) - fstFile = os.path.join(MyDir,'../../../data/NREL5MW/Main_Onshore.fst') # must correspond to the one used to generate outputs - d = postpro.FASTSpanwiseOutputs(fstFile, df.columns.values) - r_AD = d['r_AD'] - r_ED_bld = d['r_ED_bld'] - r_ED_twr = d['r_ED_twr'] - r_BD = d['r_BD'] - IR_AD = d['IR_AD'] - IR_ED_bld = d['IR_ED_bld'] - IR_ED_twr = d['IR_ED_twr'] - IR_BD = d['IR_BD'] - TwrLen = d['TwrLen'] - R = d['R'] - r_hub = d['r_hub'] - fst = d['fst'] - - # Option 2 - Get ouputs locations for each module - #r_ED_gag, IR_ED = ED_BldGag(fstFile) - #r_AD_gag, IR_AD = AD_BldGag(fstFile) - - # Option 3 - Define them manually.. - #r_AD = [0.,30.,60.] - #r_ED = [0.,30.,60.] - - # --- Interpolate Cl and TDx at desired radial position - # NOTE: format need to be adjusted if you use AllOuts, or outputs at few nodes - r = 60 # Radial location where outputs are to be interpolated - Cl_interp = postpro.radialInterpTS(df, r, 'Cl_[-]', r_AD, bldFmt='AB{:d}', ndFmt='N{:03d}') - TDx_interp = postpro.radialInterpTS(df, r, 'TDx_[m]', r_ED_bld, bldFmt='B{:d}' , ndFmt='N{:03d}') - #TDx_interp = postpro.radialInterpTS(df, r, 'TDx_[m]', r_ED_bld, bldFmt='B{:d}' , ndFmt='N{d}') - - # --- Plot - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - ax.plot(df['Time_[s]'].values, df['AB1N017Cl_[-]'].values, label='Section before (r={}m)'.format(r_AD[16])) - ax.plot(df['Time_[s]'].values, Cl_interp.values , label='Interpolated (r={}m)'.format(r)) - ax.plot(df['Time_[s]'].values, df['AB1N018Cl_[-]'].values, label='Section after (r={}m)'.format(r_AD[17])) - ax.set_xlabel('Time [s]') - ax.set_ylabel('Cl [-]') - ax.set_xlim([7,10]) - ax.set_ylim([0.35,0.48]) - ax.legend() - ax.tick_params(direction='in') - ax.set_title('FAST - interpolate radial time series') - -if __name__=='__main__': - main() - plt.show() - -if __name__=='__test__': - main() - -if __name__=='__export__': - main() - from welib.tools.repo import export_figs_callback - export_figs_callback(__file__) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py deleted file mode 100644 index 32d1ba712a..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Plot average OpenFAST outputs as function of the radial position -""" -import os -import glob -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt - -import pyFAST.input_output as io -import pyFAST.postpro as postpro - -def main(): - - # Get current directory so this script can be called from any location - scriptDir=os.path.dirname(__file__) - - # --- Step 1: Read an openfast output file - outFile = os.path.join(scriptDir,'../../../data/example_files/fastout_allnodes.outb') - df = io.fast_output_file.FASTOutputFile(outFile).toDataFrame() - - # --- Step2 : Average data and extrat the radial stations - # Averaging here is done over 1 period (avgParam=1, avgMethod='periods') - # To get the output radial stations, a .fst file is needed - fstFile = os.path.join(scriptDir,'../../../data/NREL5MW/Main_Onshore.fst') - out = postpro.spanwisePostPro(FST_In=fstFile, avgMethod='periods', avgParam=1, df=df) - dfRad_ED=out['ED_bld']; dfRad_AD = out['AD']; dfRad_BD = out['BD'] - - # --- Step1&2 at once (when .outb and .fst are next to each other in same folder, with same name) - # out = postpro.spanwisePostPro(FST_In=fstFile, avgMethod='periods', avgParam=1, out_ext='.outb') - - # --- (Optional, compute time series average) - # Averaging here is done over the last 100s (avgParam=100, avgMethod='constantwindow') - #dfAvg = postpro.averageDF(df, avgMethod='constantwindow' ,avgParam=100) - - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - ax.plot(dfRad_AD['r/R_[-]'].values, dfRad_AD['B1Cl_[-]'].values/dfRad_AD['B1Cl_[-]'].max() , label='Lift coefficient (AeroDyn)') - ax.plot(dfRad_ED['r/R_[-]'].values, dfRad_ED['B1TDx_[m]'].values/dfRad_ED['B1TDx_[m]'].max(), label='Flap displacement (ElastoDyn)') - ax.set_xlabel('r/R [-]') - ax.set_ylabel('Values normalized by max [-]') - ax.legend() - ax.tick_params(direction='in') - ax.set_title('FAST - Average radial outputs') - -if __name__=='__main__': - main() - plt.show() - -if __name__=='__test__': - main() - -if __name__=='__export__': - main() - from welib.tools.repo import export_figs_callback - export_figs_callback(__file__) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py deleted file mode 100644 index 69a5047246..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py +++ /dev/null @@ -1,27 +0,0 @@ -""" -Remap a dataframe: change names, and perform operations (e.g. change units, scale, combine signals) -""" -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -import os -# Local -import pyFAST.input_output as io -import pyFAST.input_output.postpro as postpro - -if __name__ == '__main__': - ColumnMap={ - 'WS_[m/s]' : '{Wind1VelX_[m/s]}' , # create a new column from existing one - 'RtTSR_[-]' : '{RtTSR_[-]} * 2 + {RtAeroCt_[-]}' , # change value of column - 'RotSpeed_[rad/s]' : '{RotSpeed_[rpm]} * 2*np.pi/60 ', # new column [rpm] -> [rad/s] - } - - # Get current directory so this script can be called from any location - MyDir=os.path.dirname(__file__) - # --- Step 1: Read an openfast output file - outFile = os.path.join(MyDir,'../../../data/example_files/fastout_allnodes.outb') - df = io.fast_output_file.FASTOutputFile(outFile).toDataFrame() - # Change columns based on formulae, potentially adding new columns - df = postpro.remap_df(df, ColumnMap) - - #df.to_csv('_Out.csv', index=False) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py deleted file mode 100644 index 79bdd8debb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py +++ /dev/null @@ -1,1844 +0,0 @@ -# --- For cmd.py -import os -import pandas as pd -import numpy as np -import re - -import pyFAST.input_output as weio -from pyFAST.common import PYFASTException as WELIBException - -# --- fast libraries -from pyFAST.input_output.fast_input_file import FASTInputFile -from pyFAST.input_output.fast_output_file import FASTOutputFile -from pyFAST.input_output.fast_input_deck import FASTInputDeck -import pyFAST.fastfarm.fastfarm as fastfarm - -# --------------------------------------------------------------------------------} -# --- Tools for IO -# --------------------------------------------------------------------------------{ -def getEDClass(class_or_filename): - """ - Return ElastoDyn instance of FileCl - INPUT: either - - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) - - a filepath to a ElastoDyn input file - - a filepath to a main OpenFAST input file - """ - if hasattr(class_or_filename,'startswith'): # if string - ED = FASTInputFile(class_or_filename) - if 'EDFile' in ED.keys(): # User provided a .fst file... - parentDir=os.path.dirname(class_or_filename) - EDfilename = os.path.join(parentDir, ED['EDFile'].replace('"','')) - ED = FASTInputFile(EDfilename) - else: - ED = class_or_filename - return ED - -def ED_BldStations(ED): - """ Returns ElastoDyn Blade Station positions, useful to know where the outputs are. - INPUTS: - - ED: either: - - a filename of a ElastoDyn input file - - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) - - OUTUPTS: - - bld_fract: fraction of the blade length were stations are defined - - r_nodes: spanwise position from the rotor apex of the Blade stations - """ - ED = getEDClass(ED) - - nBldNodes = ED['BldNodes'] - bld_fract = np.arange(1./nBldNodes/2., 1, 1./nBldNodes) - r_nodes = bld_fract*(ED['TipRad']-ED['HubRad']) + ED['HubRad'] - return bld_fract, r_nodes - -def ED_TwrStations(ED, addBase=True): - """ Returns ElastoDyn Tower Station positions, useful to know where the outputs are. - INPUTS: - - ED: either: - - a filename of a ElastoDyn input file - - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) - - OUTPUTS: - - r_fract: fraction of the towet length were stations are defined - - h_nodes: height from the *ground* of the stations (not from the Tower base) - """ - ED = getEDClass(ED) - - nTwrNodes = ED['TwrNodes'] - twr_fract = np.arange(1./nTwrNodes/2., 1, 1./nTwrNodes) - h_nodes = twr_fract*(ED['TowerHt']-ED['TowerBsHt']) - if addBase: - h_nodes += ED['TowerBsHt'] - return twr_fract, h_nodes - -def ED_BldGag(ED): - """ Returns the radial position of ElastoDyn blade gages - INPUTS: - - ED: either: - - a filename of a ElastoDyn input file - - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) - OUTPUTS: - - r_gag: The radial positions of the gages, given from the rotor apex - """ - ED = getEDClass(ED) - _,r_nodes= ED_BldStations(ED) - - # if ED.hasNodal: - # return r_nodes, None - nOuts = ED['NBlGages'] - if nOuts<=0: - return np.array([]), np.array([]) - if type(ED['BldGagNd']) is list: - Inodes = np.asarray(ED['BldGagNd']) - else: - Inodes = np.array([ED['BldGagNd']]) - r_gag = r_nodes[ Inodes[:nOuts] -1] - return r_gag, Inodes - -def ED_TwrGag(ED, addBase=True): - """ Returns the heights of ElastoDyn blade gages - INPUTS: - - ED: either: - - a filename of a ElastoDyn input file - - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) - - addBase: if True, TowerBsHt is added to h_gag - OUTPUTS: - - h_gag: The heights of the gages, given from the ground height (tower base + TowerBsHt) - """ - ED = getEDClass(ED) - - _,h_nodes= ED_TwrStations(ED, addBase=addBase) - nOuts = ED['NTwGages'] - if nOuts<=0: - return np.array([]), None - if type(ED['TwrGagNd']) is list: - Inodes = np.asarray(ED['TwrGagNd']) - else: - Inodes = np.array([ED['TwrGagNd']]) - h_gag = h_nodes[ Inodes[:nOuts] -1] - return h_gag, Inodes - - -def AD14_BldGag(AD): - """ Returns the radial position of AeroDyn 14 blade gages (based on "print" in column 6) - INPUTS: - - AD: either: - - a filename of a AeroDyn input file - - an instance of FileCl, as returned by reading the file, AD = weio.read(AD_filename) - OUTPUTS: - - r_gag: The radial positions of the gages, given from the blade root - """ - if hasattr(AD,'startswith'): # if string - AD = FASTInputFile(AD) - - Nodes=AD['BldAeroNodes'] - if Nodes.shape[1]==6: - doPrint= np.array([ n.lower().find('p')==0 for n in Nodes[:,5]]) - else: - doPrint=np.array([ True for n in Nodes[:,0]]) - - r_gag = Nodes[doPrint,0].astype(float) - IR = np.arange(1,len(Nodes)+1)[doPrint] - return r_gag, IR - -def AD_BldGag(AD,AD_bld,chordOut=False): - """ Returns the radial position of AeroDyn blade gages - INPUTS: - - AD: either: - - a filename of a AeroDyn input file - - an instance of FileCl, as returned by reading the file, AD = weio.read(AD_filename) - - AD_bld: either: - - a filename of a AeroDyn Blade input file - - an instance of FileCl, as returned by reading the file, AD_bld = weio.read(AD_bld_filename) - OUTPUTS: - - r_gag: The radial positions of the gages, given from the blade root - """ - if hasattr(AD,'startswith'): # if string - AD = FASTInputFile(AD) - if hasattr(AD_bld,'startswith'): # if string - AD_bld = FASTInputFile(AD_bld) - #print(AD_bld.keys()) - nOuts=AD['NBlOuts'] - if nOuts<=0: - if chordOut: - return np.array([]), np.array([]) - else: - return np.array([]) - INodes = np.array(AD['BlOutNd'][:nOuts]) - r_gag = AD_bld['BldAeroNodes'][INodes-1,0] - if chordOut: - chord_gag = AD_bld['BldAeroNodes'][INodes-1,5] - return r_gag,chord_gag - else: - return r_gag - -def BD_BldStations(BD, BDBld): - """ Returns BeamDyn Blade Quadrature Points positions: - - Defines where BeamDyn outputs are provided. - - Used by BeamDyn for the Input Mesh u%DistrLoad - and the Output Mesh y%BldMotion - NOTE: This should match the quadrature points in the summary file of BeamDyn for a straight beam - This will NOT match the "Initial Nodes" reported in the summary file. - INPUTS: - - BD: either: - - a filename of a BeamDyn input file - - an instance of FileCl, as returned by reading the file, BD = weio.read(BD_filename) - - BDBld: same as BD but for the BeamDyn blade file - OUTPUTS: - - r_nodes: spanwise position from the balde root of the Blade stations - """ - GAUSS_QUADRATURE = 1 - TRAP_QUADRATURE = 2 - - if hasattr(BD,'startswith'): # if string - BD = FASTInputFile(BD) - if hasattr(BDBld,'startswith'): # if string - BDBld = FASTInputFile(BDBld) - # BD['BldFile'].replace('"','')) - - # --- Extract relevant info from BD files - z_kp = BD['MemberGeom'][:,2] - R = z_kp[-1]-z_kp[0] - - nStations = BDBld['station_total'] - rStations = BDBld['BeamProperties']['span']*R - quad = BD['quadrature'] - - refine = BD['refine'] - nodes_per_elem = BD['order_elem'] + 1 - if 'default' in str(refine).lower(): - refine = 1 - - # --- Distribution of points - if quad==GAUSS_QUADRATURE: - # See BD_GaussPointWeight - # Number of Gauss points - nqp = nodes_per_elem #- 1 - # qp_indx_offset = 1 ! we skip the first node on the input mesh (AD needs values at the end points, but BD doesn't use them) - x, _ = np.polynomial.legendre.leggauss(nqp) - r= R*(1+x)/2 - - elif quad==TRAP_QUADRATURE: - # See BD_TrapezoidalPointWeight - nqp = (nStations - 1)*refine + 1 - # qp_indx_offset = 0 - # BldMotionNodeLoc = BD_MESH_QP ! we want to output y%BldMotion at the blade input property stations, and this will be a short-cut - dr = np.diff(rStations)/refine - rmid = np.concatenate( [rStations[:-1]+dr*(iref+1) for iref in np.arange(refine-1) ]) - r = np.concatenate( (rStations, rmid)) - r = np.unique(np.sort(r)) - else: - raise NotImplementedError('Only Gauss and Trap quadrature implemented') - return r - -def BD_BldGag(BD): - """ Returns the radial position of BeamDyn blade gages - INPUTS: - - BD: either: - - a filename of a BeamDyn input file - - an instance of FileCl, as returned by reading the file, BD = weio.read(BD_filename) - OUTPUTS: - - r_gag: The radial positions of the gages, given from the rotor apex - """ - if hasattr(BD,'startswith'): # if string - BD = FASTInputFile(BD) - - M = BD['MemberGeom'] - r_nodes = M[:,2] # NOTE: we select the z axis here, and we don't take curvilenear coord - nOuts = BD['NNodeOuts'] - if nOuts<=0: - nOuts=0 - if type(BD['OutNd']) is list: - Inodes = np.asarray(BD['OutNd']) - else: - Inodes = np.array([BD['OutNd']]) - r_gag = r_nodes[ Inodes[:nOuts] -1] - return r_gag, Inodes, r_nodes - -# -def SD_MembersNodes(SD): - sd = SubDyn(SD) - return sd.pointsMN - -def SD_MembersJoints(SD): - sd = SubDyn(SD) - return sd.pointsMJ - -def SD_MembersGages(SD): - sd = SubDyn(SD) - return sd.pointsMNout - -# -# 1, 7, 14, 21, 30, 36, 43, 52, 58 BldGagNd List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] - -# --------------------------------------------------------------------------------} -# --- Helper functions for radial data -# --------------------------------------------------------------------------------{ -def _HarmonizeSpanwiseData(Name, Columns, vr, R, IR=None) : - """ helper function to use with spanwiseAD and spanwiseED """ - # --- Data present - data = [c for _,c in Columns if c is not None] - ColNames = [n for n,_ in Columns if n is not None] - Lengths = [len(d) for d in data] - if len(data)<=0: - print('[WARN] No spanwise data for '+Name) - return None, None, None - - # --- Harmonize data so that they all have the same length - nrMax = np.max(Lengths) - ids=np.arange(nrMax) - if vr is None: - bFakeVr=True - vr_bar = ids/(nrMax-1) - else: - vr_bar=vr/R - bFakeVr=False - if (nrMax)len(vr_bar): - raise Exception('Inconsitent length between radial stations and max index present in output chanels') - - for i in np.arange(len(data)): - d=data[i] - if len(d)len(vr_bar): - raise Exception('Inconsistent length between radial stations ({:d}) and max index present in output chanels ({:d})'.format(len(vr_bar),nrMax)) - df.insert(0, sspan_bar+'_[-]', vr_bar) - - if IR is not None: - df['Node_[#]']=IR[:nrMax] - df['i_[#]']=ids+1 - if vr is not None: - df[sspan+'_[m]'] = vr[:nrMax] - return df - -def find_matching_columns(Cols, PatternMap): - ColsInfo=[] - nrMax=0 - for colpattern,colmap in PatternMap.items(): - # Extracting columns matching pattern - cols, sIdx = find_matching_pattern(Cols, colpattern) - if len(cols)>0: - # Sorting by ID - cols = np.asarray(cols) - Idx = np.array([int(s) for s in sIdx]) - Isort = np.argsort(Idx) - Idx = Idx[Isort] - cols = cols[Isort] - col={'name':colmap,'Idx':Idx,'cols':cols} - nrMax=max(nrMax,np.max(Idx)) - ColsInfo.append(col) - return ColsInfo,nrMax - -def extract_spanwise_data(ColsInfo, nrMax, df=None,ts=None): - """ - Extract spanwise data based on some column info - ColsInfo: see find_matching_columns - """ - nCols = len(ColsInfo) - if nCols==0: - return None - if ts is not None: - Values = np.zeros((nrMax,nCols)) - Values[:] = np.nan - elif df is not None: - raise NotImplementedError() - - ColNames =[c['name'] for c in ColsInfo] - - for ic,c in enumerate(ColsInfo): - Idx, cols, colname = c['Idx'], c['cols'], c['name'] - for idx,col in zip(Idx,cols): - Values[idx-1,ic]=ts[col] - nMissing = np.sum(np.isnan(Values[:,ic])) - if len(cols)nrMax: - print('[WARN] More values found for {}, found {}/{}'.format(colname,len(cols),nrMax)) - df = pd.DataFrame(data=Values, columns=ColNames) - df = df.reindex(sorted(df.columns), axis=1) - return df - - -def _BDSpanMap(): - BDSpanMap=dict() - for sB in ['B1','B2','B3']: - # Old nodal outputs - BDSpanMap['^'+sB+r'N(\d)TDxr_\[m\]'] = sB+'TDxr_[m]' - BDSpanMap['^'+sB+r'N(\d)TDyr_\[m\]'] = sB+'TDyr_[m]' - BDSpanMap['^'+sB+r'N(\d)TDzr_\[m\]'] = sB+'TDzr_[m]' - # New nodal outputs - BDSpanMap['^'+sB+r'N(\d*)_FxL_\[N\]'] = sB+'FxL_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FxL_\[N\]'] = sB+'FxL_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FxL_\[N\]'] = sB+'FxL_[N]' - BDSpanMap['^'+sB+r'N(\d*)_MxL_\[N-m\]'] = sB+'MxL_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MxL_\[N-m\]'] = sB+'MxL_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MxL_\[N-m\]'] = sB+'MxL_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_Fxr_\[N\]'] = sB+'Fxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_Fxr_\[N\]'] = sB+'Fxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_Fxr_\[N\]'] = sB+'Fxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_Mxr_\[N-m\]'] = sB+'Mxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_Mxr_\[N-m\]'] = sB+'Mxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_Mxr_\[N-m\]'] = sB+'Mxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_TDxr_\[m\]'] = sB+'TDxr_[m]' - BDSpanMap['^'+sB+r'N(\d*)_TDyr_\[m\]'] = sB+'TDyr_[m]' - BDSpanMap['^'+sB+r'N(\d*)_TDzr_\[m\]'] = sB+'TDzr_[m]' - BDSpanMap['^'+sB+r'N(\d*)_RDxr_\[-\]'] = sB+'RDxr_[-]' - BDSpanMap['^'+sB+r'N(\d*)_RDyr_\[-\]'] = sB+'RDyr_[-]' - BDSpanMap['^'+sB+r'N(\d*)_RDzr_\[-\]'] = sB+'RDzr_[-]' - BDSpanMap['^'+sB+r'N(\d*)_AbsXg_\[m\]'] = sB+'AbsXg_[m]' - BDSpanMap['^'+sB+r'N(\d*)_AbsYg_\[m\]'] = sB+'AbsYg_[m]' - BDSpanMap['^'+sB+r'N(\d*)_AbsZg_\[m\]'] = sB+'AbsZg_[m]' - BDSpanMap['^'+sB+r'N(\d*)_AbsXr_\[m\]'] = sB+'AbsXr_[m]' - BDSpanMap['^'+sB+r'N(\d*)_AbsYr_\[m\]'] = sB+'AbsYr_[m]' - BDSpanMap['^'+sB+r'N(\d*)_AbsZr_\[m\]'] = sB+'AbsZr_[m]' - BDSpanMap['^'+sB+r'N(\d*)_TVxg_\[m/s\]'] = sB+'TVxg_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVyg_\[m/s\]'] = sB+'TVyg_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVzg_\[m/s\]'] = sB+'TVzg_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVxl_\[m/s\]'] = sB+'TVxl_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVyl_\[m/s\]'] = sB+'TVyl_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVzl_\[m/s\]'] = sB+'TVzl_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVxr_\[m/s\]'] = sB+'TVxr_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVyr_\[m/s\]'] = sB+'TVyr_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_TVzr_\[m/s\]'] = sB+'TVzr_[m/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVxg_\[deg/s\]'] = sB+'RVxg_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVyg_\[deg/s\]'] = sB+'RVyg_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVzg_\[deg/s\]'] = sB+'RVzg_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVxl_\[deg/s\]'] = sB+'RVxl_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVyl_\[deg/s\]'] = sB+'RVyl_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVzl_\[deg/s\]'] = sB+'RVzl_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVxr_\[deg/s\]'] = sB+'RVxr_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVyr_\[deg/s\]'] = sB+'RVyr_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_RVzr_\[deg/s\]'] = sB+'RVzr_[deg/s]' - BDSpanMap['^'+sB+r'N(\d*)_TAxl_\[m/s^2\]'] = sB+'TAxl_[m/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_TAyl_\[m/s^2\]'] = sB+'TAyl_[m/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_TAzl_\[m/s^2\]'] = sB+'TAzl_[m/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_TAxr_\[m/s^2\]'] = sB+'TAxr_[m/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_TAyr_\[m/s^2\]'] = sB+'TAyr_[m/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_TAzr_\[m/s^2\]'] = sB+'TAzr_[m/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_RAxl_\[deg/s^2\]'] = sB+'RAxl_[deg/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_RAyl_\[deg/s^2\]'] = sB+'RAyl_[deg/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_RAzl_\[deg/s^2\]'] = sB+'RAzl_[deg/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_RAxr_\[deg/s^2\]'] = sB+'RAxr_[deg/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_RAyr_\[deg/s^2\]'] = sB+'RAyr_[deg/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_RAzr_\[deg/s^2\]'] = sB+'RAzr_[deg/s^2]' - BDSpanMap['^'+sB+r'N(\d*)_PFxL_\[N\]'] = sB+'PFxL_[N]' - BDSpanMap['^'+sB+r'N(\d*)_PFyL_\[N\]'] = sB+'PFyL_[N]' - BDSpanMap['^'+sB+r'N(\d*)_PFzL_\[N\]'] = sB+'PFzL_[N]' - BDSpanMap['^'+sB+r'N(\d*)_PMxL_\[N-m\]'] = sB+'PMxL_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_PMyL_\[N-m\]'] = sB+'PMyL_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_PMzL_\[N-m\]'] = sB+'PMzL_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_DFxL_\[N/m\]'] = sB+'DFxL_[N/m]' - BDSpanMap['^'+sB+r'N(\d*)_DFyL_\[N/m\]'] = sB+'DFyL_[N/m]' - BDSpanMap['^'+sB+r'N(\d*)_DFzL_\[N/m\]'] = sB+'DFzL_[N/m]' - BDSpanMap['^'+sB+r'N(\d*)_DMxL_\[N-m/m\]'] = sB+'DMxL_[N-m/m]' - BDSpanMap['^'+sB+r'N(\d*)_DMyL_\[N-m/m\]'] = sB+'DMyL_[N-m/m]' - BDSpanMap['^'+sB+r'N(\d*)_DMzL_\[N-m/m\]'] = sB+'DMzL_[N-m/m]' - BDSpanMap['^'+sB+r'N(\d*)_DFxR_\[N/m\]'] = sB+'DFxR_[N/m]' - BDSpanMap['^'+sB+r'N(\d*)_DFyR_\[N/m\]'] = sB+'DFyR_[N/m]' - BDSpanMap['^'+sB+r'N(\d*)_DFzR_\[N/m\]'] = sB+'DFzR_[N/m]' - BDSpanMap['^'+sB+r'N(\d*)_DMxR_\[N-m/m\]'] = sB+'DMxR_[N-m/m]' - BDSpanMap['^'+sB+r'N(\d*)_DMyR_\[N-m/m\]'] = sB+'DMyR_[N-m/m]' - BDSpanMap['^'+sB+r'N(\d*)_DMzR_\[N-m/m\]'] = sB+'DMzR_[N-m/m]' - BDSpanMap['^'+sB+r'N(\d*)_FFbxl_\[N\]'] = sB+'FFbxl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFbyl_\[N\]'] = sB+'FFbyl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFbzl_\[N\]'] = sB+'FFbzl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFbxr_\[N\]'] = sB+'FFbxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFbyr_\[N\]'] = sB+'FFbyr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFbzr_\[N\]'] = sB+'FFbzr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_MFbxl_\[N-m\]'] = sB+'MFbxl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFbyl_\[N-m\]'] = sB+'MFbyl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFbzl_\[N-m\]'] = sB+'MFbzl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFbxr_\[N-m\]'] = sB+'MFbxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFbyr_\[N-m\]'] = sB+'MFbyr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFbzr_\[N-m\]'] = sB+'MFbzr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_FFcxl_\[N\]'] = sB+'FFcxl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFcyl_\[N\]'] = sB+'FFcyl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFczl_\[N\]'] = sB+'FFczl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFcxr_\[N\]'] = sB+'FFcxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFcyr_\[N\]'] = sB+'FFcyr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFczr_\[N\]'] = sB+'FFczr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_MFcxl_\[N-m\]'] = sB+'MFcxl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFcyl_\[N-m\]'] = sB+'MFcyl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFczl_\[N-m\]'] = sB+'MFczl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFcxr_\[N-m\]'] = sB+'MFcxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFcyr_\[N-m\]'] = sB+'MFcyr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFczr_\[N-m\]'] = sB+'MFczr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_FFdxl_\[N\]'] = sB+'FFdxl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFdyl_\[N\]'] = sB+'FFdyl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFdzl_\[N\]'] = sB+'FFdzl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFdxr_\[N\]'] = sB+'FFdxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFdyr_\[N\]'] = sB+'FFdyr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFdzr_\[N\]'] = sB+'FFdzr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_MFdxl_\[N-m\]'] = sB+'MFdxl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFdyl_\[N-m\]'] = sB+'MFdyl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFdzl_\[N-m\]'] = sB+'MFdzl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFdxr_\[N-m\]'] = sB+'MFdxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFdyr_\[N-m\]'] = sB+'MFdyr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFdzr_\[N-m\]'] = sB+'MFdzr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_FFgxl_\[N\]'] = sB+'FFgxl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFgyl_\[N\]'] = sB+'FFgyl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFgzl_\[N\]'] = sB+'FFgzl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFgxr_\[N\]'] = sB+'FFgxr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFgyr_\[N\]'] = sB+'FFgyr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFgzr_\[N\]'] = sB+'FFgzr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_MFgxl_\[N-m\]'] = sB+'MFgxl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFgyl_\[N-m\]'] = sB+'MFgyl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFgzl_\[N-m\]'] = sB+'MFgzl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFgxr_\[N-m\]'] = sB+'MFgxr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFgyr_\[N-m\]'] = sB+'MFgyr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFgzr_\[N-m\]'] = sB+'MFgzr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_FFixl_\[N\]'] = sB+'FFixl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFiyl_\[N\]'] = sB+'FFiyl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFizl_\[N\]'] = sB+'FFizl_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFixr_\[N\]'] = sB+'FFixr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFiyr_\[N\]'] = sB+'FFiyr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_FFizr_\[N\]'] = sB+'FFizr_[N]' - BDSpanMap['^'+sB+r'N(\d*)_MFixl_\[N-m\]'] = sB+'MFixl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFiyl_\[N-m\]'] = sB+'MFiyl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFizl_\[N-m\]'] = sB+'MFizl_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFixr_\[N-m\]'] = sB+'MFixr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFiyr_\[N-m\]'] = sB+'MFiyr_[N-m]' - BDSpanMap['^'+sB+r'N(\d*)_MFizr_\[N-m\]'] = sB+'MFizr_[N-m]' - return BDSpanMap - - -def spanwiseColBD(Cols): - """ Return column info, available columns and indices that contain BD spanwise data""" - BDSpanMap = _BDSpanMap() - return find_matching_columns(Cols, BDSpanMap) - -def spanwiseColED(Cols): - """ Return column info, available columns and indices that contain ED spanwise data""" - EDSpanMap=dict() - # All Outs - for sB in ['B1','B2','B3']: - EDSpanMap['^[A]*'+sB+r'N(\d*)ALx_\[m/s^2\]' ] = sB+'ALx_[m/s^2]' - EDSpanMap['^[A]*'+sB+r'N(\d*)ALy_\[m/s^2\]' ] = sB+'ALy_[m/s^2]' - EDSpanMap['^[A]*'+sB+r'N(\d*)ALz_\[m/s^2\]' ] = sB+'ALz_[m/s^2]' - EDSpanMap['^[A]*'+sB+r'N(\d*)TDx_\[m\]' ] = sB+'TDx_[m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)TDy_\[m\]' ] = sB+'TDy_[m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)TDz_\[m\]' ] = sB+'TDz_[m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)RDx_\[deg\]' ] = sB+'RDx_[deg]' - EDSpanMap['^[A]*'+sB+r'N(\d*)RDy_\[deg\]' ] = sB+'RDy_[deg]' - EDSpanMap['^[A]*'+sB+r'N(\d*)RDz_\[deg\]' ] = sB+'RDz_[deg]' - EDSpanMap['^[A]*'+sB+r'N(\d*)MLx_\[kN-m\]' ] = sB+'MLx_[kN-m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)MLy_\[kN-m\]' ] = sB+'MLy_[kN-m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)MLz_\[kN-m\]' ] = sB+'MLz_[kN-m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)FLx_\[kN\]' ] = sB+'FLx_[kN]' - EDSpanMap['^[A]*'+sB+r'N(\d*)FLy_\[kN\]' ] = sB+'FLy_[kN]' - EDSpanMap['^[A]*'+sB+r'N(\d*)FLz_\[kN\]' ] = sB+'FLz_[kN]' - EDSpanMap['^[A]*'+sB+r'N(\d*)FLxNT_\[kN\]' ] = sB+'FLxNT_[kN]' - EDSpanMap['^[A]*'+sB+r'N(\d*)FLyNT_\[kN\]' ] = sB+'FLyNT_[kN]' - EDSpanMap['^[A]*'+sB+r'N(\d*)FlyNT_\[kN\]' ] = sB+'FLyNT_[kN]' # <<< Unfortunate - EDSpanMap['^[A]*'+sB+r'N(\d*)MLxNT_\[kN-m\]'] = sB+'MLxNT_[kN-m]' - EDSpanMap['^[A]*'+sB+r'N(\d*)MLyNT_\[kN-m\]'] = sB+'MLyNT_[kN-m]' - # Old - for sB in ['b1','b2','b3']: - SB=sB.upper() - EDSpanMap[r'^Spn(\d)ALx'+sB+r'_\[m/s^2\]']=SB+'ALx_[m/s^2]' - EDSpanMap[r'^Spn(\d)ALy'+sB+r'_\[m/s^2\]']=SB+'ALy_[m/s^2]' - EDSpanMap[r'^Spn(\d)ALz'+sB+r'_\[m/s^2\]']=SB+'ALz_[m/s^2]' - EDSpanMap[r'^Spn(\d)TDx'+sB+r'_\[m\]' ]=SB+'TDx_[m]' - EDSpanMap[r'^Spn(\d)TDy'+sB+r'_\[m\]' ]=SB+'TDy_[m]' - EDSpanMap[r'^Spn(\d)TDz'+sB+r'_\[m\]' ]=SB+'TDz_[m]' - EDSpanMap[r'^Spn(\d)RDx'+sB+r'_\[deg\]' ]=SB+'RDx_[deg]' - EDSpanMap[r'^Spn(\d)RDy'+sB+r'_\[deg\]' ]=SB+'RDy_[deg]' - EDSpanMap[r'^Spn(\d)RDz'+sB+r'_\[deg\]' ]=SB+'RDz_[deg]' - EDSpanMap[r'^Spn(\d)FLx'+sB+r'_\[kN\]' ]=SB+'FLx_[kN]' - EDSpanMap[r'^Spn(\d)FLy'+sB+r'_\[kN\]' ]=SB+'FLy_[kN]' - EDSpanMap[r'^Spn(\d)FLz'+sB+r'_\[kN\]' ]=SB+'FLz_[kN]' - EDSpanMap[r'^Spn(\d)MLy'+sB+r'_\[kN-m\]' ]=SB+'MLx_[kN-m]' - EDSpanMap[r'^Spn(\d)MLx'+sB+r'_\[kN-m\]' ]=SB+'MLy_[kN-m]' - EDSpanMap[r'^Spn(\d)MLz'+sB+r'_\[kN-m\]' ]=SB+'MLz_[kN-m]' - return find_matching_columns(Cols, EDSpanMap) - -def spanwiseColEDTwr(Cols): - """ Return column info, available columns and indices that contain ED spanwise data""" - EDSpanMap=dict() - # All Outs - EDSpanMap[r'^TwHt(\d*)ALxt_\[m/s^2\]'] = 'ALxt_[m/s^2]' - EDSpanMap[r'^TwHt(\d*)ALyt_\[m/s^2\]'] = 'ALyt_[m/s^2]' - EDSpanMap[r'^TwHt(\d*)ALzt_\[m/s^2\]'] = 'ALzt_[m/s^2]' - EDSpanMap[r'^TwHt(\d*)TDxt_\[m\]' ] = 'TDxt_[m]' - EDSpanMap[r'^TwHt(\d*)TDyt_\[m\]' ] = 'TDyt_[m]' - EDSpanMap[r'^TwHt(\d*)TDzt_\[m\]' ] = 'TDzt_[m]' - EDSpanMap[r'^TwHt(\d*)RDxt_\[deg\]' ] = 'RDxt_[deg]' - EDSpanMap[r'^TwHt(\d*)RDyt_\[deg\]' ] = 'RDyt_[deg]' - EDSpanMap[r'^TwHt(\d*)RDzt_\[deg\]' ] = 'RDzt_[deg]' - EDSpanMap[r'^TwHt(\d*)TPxi_\[m\]' ] = 'TPxi_[m]' - EDSpanMap[r'^TwHt(\d*)TPyi_\[m\]' ] = 'TPyi_[m]' - EDSpanMap[r'^TwHt(\d*)TPzi_\[m\]' ] = 'TPzi_[m]' - EDSpanMap[r'^TwHt(\d*)RPxi_\[deg\]' ] = 'RPxi_[deg]' - EDSpanMap[r'^TwHt(\d*)RPyi_\[deg\]' ] = 'RPyi_[deg]' - EDSpanMap[r'^TwHt(\d*)RPzi_\[deg\]' ] = 'RPzi_[deg]' - EDSpanMap[r'^TwHt(\d*)FLxt_\[kN\]' ] = 'FLxt_[kN]' - EDSpanMap[r'^TwHt(\d*)FLyt_\[kN\]' ] = 'FLyt_[kN]' - EDSpanMap[r'^TwHt(\d*)FLzt_\[kN\]' ] = 'FLzt_[kN]' - EDSpanMap[r'^TwHt(\d*)MLxt_\[kN-m\]' ] = 'MLxt_[kN-m]' - EDSpanMap[r'^TwHt(\d*)MLyt_\[kN-m\]' ] = 'MLyt_[kN-m]' - EDSpanMap[r'^TwHt(\d*)MLzt_\[kN-m\]' ] = 'MLzt_[kN-m]' - return find_matching_columns(Cols, EDSpanMap) - - - -def spanwiseColAD(Cols): - """ Return column info, available columns and indices that contain AD spanwise data""" - ADSpanMap=dict() - for sB in ['B1','B2','B3']: - ADSpanMap['^[A]*'+sB+r'N(\d*)Alpha_\[deg\]'] =sB+'Alpha_[deg]' - ADSpanMap['^[A]*'+sB+r'N(\d*)AxInd_\[-\]' ] =sB+'AxInd_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)TnInd_\[-\]' ] =sB+'TnInd_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)AxInd_qs_\[-\]' ]=sB+'AxInd_qs_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)TnInd_qs_\[-\]' ]=sB+'TnInd_qs_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_k_\[-\]' ]=sB+'BEM_k_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_kp_\[-\]' ]=sB+'BEM_kp_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_F_\[-\]' ]=sB+'BEM_F_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_CT_qs_\[-\]' ]=sB+'BEM_CT_qs_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Cl_\[-\]' ] =sB+'Cl_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Cd_\[-\]' ] =sB+'Cd_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Cm_\[-\]' ] =sB+'Cm_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Cx_\[-\]' ] =sB+'Cx_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Cy_\[-\]' ] =sB+'Cy_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Cn_\[-\]' ] =sB+'Cn_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Ct_\[-\]' ] =sB+'Ct_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Re_\[-\]' ] =sB+'Re_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vrel_\[m/s\]' ] =sB+'Vrel_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Theta_\[deg\]'] =sB+'Theta_[deg]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Phi_\[deg\]' ] =sB+'Phi_[deg]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Curve_\[deg\]'] =sB+'Curve_[deg]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindx_\[m/s\]'] =sB+'Vindx_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindy_\[m/s\]'] =sB+'Vindy_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindxi_\[m/s\]'] =sB+'Vindxi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindyi_\[m/s\]'] =sB+'Vindyi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindzi_\[m/s\]'] =sB+'Vindzi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindxh_\[m/s\]'] =sB+'Vindxh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindyh_\[m/s\]'] =sB+'Vindyh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindzh_\[m/s\]'] =sB+'Vindzh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindxp_\[m/s\]'] =sB+'Vindxp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindyp_\[m/s\]'] =sB+'Vindyp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vindzp_\[m/s\]'] =sB+'Vindzp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fx_\[N/m\]' ] =sB+'Fx_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fy_\[N/m\]' ] =sB+'Fy_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fxi_\[N/m\]' ] =sB+'Fxi_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fyi_\[N/m\]' ] =sB+'Fyi_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fzi_\[N/m\]' ] =sB+'Fzi_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Mxi_\[N-m/m\]' ] =sB+'Mxi_[N-m/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Myi_\[N-m/m\]' ] =sB+'Myi_[N-m/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Mzi_\[N-m/m\]' ] =sB+'Mzi_[N-m/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fl_\[N/m\]' ] =sB+'Fl_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fd_\[N/m\]' ] =sB+'Fd_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Fn_\[N/m\]' ] =sB+'Fn_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Ft_\[N/m\]' ] =sB+'Ft_[N/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VUndx_\[m/s\]'] =sB+'VUndx_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VUndy_\[m/s\]'] =sB+'VUndy_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VUndz_\[m/s\]'] =sB+'VUndz_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VUndxi_\[m/s\]'] =sB+'VUndxi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VUndyi_\[m/s\]'] =sB+'VUndyi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VUndzi_\[m/s\]'] =sB+'VUndzi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisx_\[m/s\]'] =sB+'VDisx_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisy_\[m/s\]'] =sB+'VDisy_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisz_\[m/s\]'] =sB+'VDisz_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisxi_\[m/s\]'] =sB+'VDisxi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisyi_\[m/s\]'] =sB+'VDisyi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDiszi_\[m/s\]'] =sB+'VDiszi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisxh_\[m/s\]'] =sB+'VDisxh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisyh_\[m/s\]'] =sB+'VDisyh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDiszh_\[m/s\]'] =sB+'VDiszh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisxp_\[m/s\]'] =sB+'VDisxp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDisyp_\[m/s\]'] =sB+'VDisyp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)VDiszp_\[m/s\]'] =sB+'VDiszp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVx_\[m/s\]' ] =sB+'STVx_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVy_\[m/s\]' ] =sB+'STVy_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVz_\[m/s\]' ] =sB+'STVz_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVxi_\[m/s\]' ] =sB+'STVxi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVyi_\[m/s\]' ] =sB+'STVyi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVzi_\[m/s\]' ] =sB+'STVzi_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVxh_\[m/s\]' ] =sB+'STVxh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVyh_\[m/s\]' ] =sB+'STVyh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVzh_\[m/s\]' ] =sB+'STVzh_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVxp_\[m/s\]' ] =sB+'STVxp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVyp_\[m/s\]' ] =sB+'STVyp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)STVzp_\[m/s\]' ] =sB+'STVzp_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vx_\[m/s\]' ] =sB+'Vx_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vy_\[m/s\]' ] =sB+'Vy_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Vz_\[m/s\]' ] =sB+'Vz_[m/s]' - ADSpanMap['^[A]*'+sB+r'N(\d*)DynP_\[Pa\]' ] =sB+'DynP_[Pa]' - ADSpanMap['^[A]*'+sB+r'N(\d*)M_\[-\]' ] =sB+'M_[-]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Mm_\[N-m/m\]' ] =sB+'Mm_[N-m/m]' - ADSpanMap['^[A]*'+sB+r'N(\d*)Gam_\[' ] =sB+'Gam_[m^2/s]' #DBGOuts - # DEPRECIATED - ADSpanMap['^[A]*'+sB+r'N(\d*)AOA_\[deg\]' ] =sB+'Alpha_[deg]' # DBGOuts - ADSpanMap['^[A]*'+sB+r'N(\d*)AIn_\[deg\]' ] =sB+'AxInd_[-]' # DBGOuts NOTE BUG Unit - ADSpanMap['^[A]*'+sB+r'N(\d*)ApI_\[deg\]' ] =sB+'TnInd_[-]' # DBGOuts NOTE BUG Unit - ADSpanMap['^[A]*'+sB+r'N(\d*)AIn_\[-\]' ] =sB+'AxInd_[-]' # DBGOuts - ADSpanMap['^[A]*'+sB+r'N(\d*)ApI_\[-\]' ] =sB+'TnInd_[-]' # DBGOuts - ADSpanMap['^[A]*'+sB+r'N(\d*)Uin_\[m/s\]' ] =sB+'Uin_[m/s]' # DBGOuts - ADSpanMap['^[A]*'+sB+r'N(\d*)Uit_\[m/s\]' ] =sB+'Uit_[m/s]' # DBGOuts - ADSpanMap['^[A]*'+sB+r'N(\d*)Uir_\[m/s\]' ] =sB+'Uir_[m/s]' # DBGOuts - ADSpanMap['^[A]*'+sB+r'N(\d*)Twst_\[deg\]' ] =sB+'Twst_[deg]' #DBGOuts - # --- AD 14 - ADSpanMap[r'^Alpha(\d*)_\[deg\]' ]='Alpha_[deg]' - ADSpanMap[r'^DynPres(\d*)_\[Pa\]' ]='DynPres_[Pa]' - ADSpanMap[r'^CLift(\d*)_\[-\]' ]='CLift_[-]' - ADSpanMap[r'^CDrag(\d*)_\[-\]' ]='CDrag_[-]' - ADSpanMap[r'^CNorm(\d*)_\[-\]' ]='CNorm_[-]' - ADSpanMap[r'^CTang(\d*)_\[-\]' ]='CTang_[-]' - ADSpanMap[r'^CMomt(\d*)_\[-\]' ]='CMomt_[-]' - ADSpanMap[r'^Pitch(\d*)_\[deg\]' ]='Pitch_[deg]' - ADSpanMap[r'^AxInd(\d*)_\[-\]' ]='AxInd_[-]' - ADSpanMap[r'^TanInd(\d*)_\[-\]' ]='TanInd_[-]' - ADSpanMap[r'^ForcN(\d*)_\[N\]' ]='ForcN_[N]' - ADSpanMap[r'^ForcT(\d*)_\[N\]' ]='ForcT_[N]' - ADSpanMap[r'^Pmomt(\d*)_\[N-m\]' ]='Pmomt_[N-N]' - ADSpanMap[r'^ReNum(\d*)_\[x10^6\]']='ReNum_[x10^6]' - ADSpanMap[r'^Gamma(\d*)_\[m^2/s\]']='Gamma_[m^2/s]' - - return find_matching_columns(Cols, ADSpanMap) - -def insert_extra_columns_AD(dfRad, tsAvg, vr=None, rho=None, R=None, nB=None, chord=None): - # --- Compute additional values (AD15 only) - if dfRad is None: - return None - if dfRad.shape[1]==0: - return dfRad - if chord is not None: - if vr is not None: - chord =chord[0:len(dfRad)] - for sB in ['B1','B2','B3']: - for coord in ['i','p','h']: - for comp in ['x','y','z']: - s=comp+coord - try: - dfRad[sB+'Vflw{}_[m/s]'.format(s)] = dfRad[sB+'VDis{}_[m/s]'.format(s)] - dfRad[sB+'STV{}_[m/s]'.format(s)] - except: - pass - for coord in ['i','p','h']: - for comp in ['x','y','z']: - s=comp+coord - try: - dfRad[sB+'Vrel{}_[m/s]'.format(s)] = dfRad[sB+'VDis{}_[m/s]'.format(s)] - dfRad[sB+'STV{}_[m/s]'.format(s)] + dfRad[sB+'Vind{}_[m/s]'.format(s)] - except: - pass - try: - s='p' - dfRad[sB+'phi_{}_[def]'.format(s)] = np.arctan2(dfRad[sB+'Vrelx{}_[m/s]'.format(s)], dfRad[sB+'Vrely{}_[m/s]'.format(s)])*180/np.pi - except: - pass - try: - vr_bar=vr/R - Fx = dfRad[sB+'Fx_[N/m]'] - U0 = tsAvg['Wind1VelX_[m/s]'] - Ct=nB*Fx/(0.5 * rho * 2 * U0**2 * np.pi * vr) - Ct[vr<0.01*R] = 0 - dfRad[sB+'Ctloc_[-]'] = Ct - CT=2*np.trapz(vr_bar*Ct,vr_bar) - dfRad[sB+'CtAvg_[-]']= CT*np.ones(vr.shape) - except: - pass - try: - dfRad[sB+'Gamma_[m^2/s]'] = 1/2 * chord* dfRad[sB+'Vrel_[m/s]'] * dfRad[sB+'Cl_[-]'] - except: - pass - try: - if not sB+'Vindx_[m/s]' in dfRad.columns: - dfRad[sB+'Vindx_[m/s]']= -dfRad[sB+'AxInd_[-]'].values * dfRad[sB+'Vx_[m/s]'].values - dfRad[sB+'Vindy_[m/s]']= dfRad[sB+'TnInd_[-]'].values * dfRad[sB+'Vy_[m/s]'].values - except: - pass - return dfRad - - - -def spanwisePostPro(FST_In=None,avgMethod='constantwindow',avgParam=5,out_ext='.outb',df=None): - """ - Postprocess FAST radial data. - if avgMethod is not None: Average the time series, return a dataframe nr x nColumns - - INPUTS: - - FST_IN: Fast .fst input file - - avgMethod='periods', avgParam=2: average over 2 last periods, Needs Azimuth sensors!!! - - avgMethod='constantwindow', avgParam=5: average over 5s of simulation - - postprofile: outputfile to write radial data - """ - # --- Opens Fast output and performs averaging - if df is None: - filename =FST_In.replace('.fst',out_ext).replace('.dvr',out_ext) - df = FASTOutputFile(filename).toDataFrame() - returnDF=True - else: - filename='' - returnDF=False - # NOTE: spanwise script doest not support duplicate columns - df = df.loc[:,~df.columns.duplicated()] - if avgMethod is not None: - dfAvg = averageDF(df,avgMethod=avgMethod ,avgParam=avgParam, filename=filename) # NOTE: average 5 last seconds - else: - dfAvg=df - # --- The script assume '_' between units and colnames - Cols= dfAvg.columns - # --- Extract info (e.g. radial positions) from Fast input file - # We don't have a .fst input file, so we'll rely on some default values for "r" - rho = 1.225 - chord = None - # --- Extract radial positions of output channels - d = FASTSpanwiseOutputs(FST_In, OutputCols=Cols) - r_AD = d['r_AD'] - r_ED_bld = d['r_ED_bld'] - r_ED_twr = d['r_ED_twr'] - r_BD = d['r_BD'] - IR_AD = d['IR_AD'] - IR_ED_bld = d['IR_ED_bld'] - IR_ED_twr = d['IR_ED_twr'] - IR_BD = d['IR_BD'] - TwrLen = d['TwrLen'] - R = d['R'] - r_hub = d['r_hub'] - fst = d['fst'] - - if R is None: - R=1 - try: - chord = fst.AD.Bld1['BldAeroNodes'][:,5] # Full span - except: - pass - try: - rho = fst.AD['Rho'] - except: - try: - rho = fst.AD['AirDens'] - except: - pass - #print('r_AD:', r_AD) - #print('r_ED:', r_ED) - #print('r_BD:', r_BD) - #print('I_AD:', IR_AD) - #print('I_ED:', IR_ED) - #print('I_BD:', IR_BD) - out = {} - if returnDF: - out['df'] = df - out['dfAvg'] = dfAvg - # --- Extract radial data and export to csv if needed - # --- AD - ColsInfoAD, nrMaxAD = spanwiseColAD(Cols) - dfRad_AD = extract_spanwise_data(ColsInfoAD, nrMaxAD, df=None, ts=dfAvg.iloc[0]) - dfRad_AD = insert_extra_columns_AD(dfRad_AD, dfAvg.iloc[0], vr=r_AD, rho=rho, R=R, nB=3, chord=chord) - dfRad_AD = insert_spanwise_columns(dfRad_AD, r_AD, R=R, IR=IR_AD) - out['AD'] = dfRad_AD - # --- ED Bld - ColsInfoED, nrMaxED = spanwiseColED(Cols) - dfRad_ED = extract_spanwise_data(ColsInfoED, nrMaxED, df=None, ts=dfAvg.iloc[0]) - dfRad_ED = insert_spanwise_columns(dfRad_ED, r_ED_bld, R=R, IR=IR_ED_bld) - out['ED_bld'] = dfRad_ED - # --- ED Twr - ColsInfoED, nrMaxEDt = spanwiseColEDTwr(Cols) - dfRad_EDt = extract_spanwise_data(ColsInfoED, nrMaxEDt, df=None, ts=dfAvg.iloc[0]) - dfRad_EDt2 = insert_spanwise_columns(dfRad_EDt, r_ED_twr, R=TwrLen, IR=IR_ED_twr, sspan='H',sspan_bar='H/L') - # TODO we could insert TwrBs and TwrTp quantities here... - out['ED_twr'] = dfRad_EDt - # --- BD - ColsInfoBD, nrMaxBD = spanwiseColBD(Cols) - dfRad_BD = extract_spanwise_data(ColsInfoBD, nrMaxBD, df=None, ts=dfAvg.iloc[0]) - dfRad_BD = insert_spanwise_columns(dfRad_BD, r_BD, R=R, IR=IR_BD) - out['BD'] = dfRad_BD - # --- SubDyn - try: - # NOTE: fst might be None - sd = SubDyn(fst.SD) - #MN = sd.pointsMN - MNout, MJout = sd.memberPostPro(dfAvg) - out['SD_MembersOut'] = MNout - out['SD_JointsOut'] = MJout - except: - out['SD_MembersOut'] = None - out['SD_JointsOut'] = None - - # Combine all into a dictionary - return out - -def radialAvg(filename, avgMethod, avgParam, raw_name='', df=None, raiseException=True): - """ - Wrapper function, for instance used by pyDatView apply either: - spanwisePostPro or spanwisePostProFF (FAST.Farm) - """ - - base,out_ext = os.path.splitext(filename) - if df is None: - df = FASTOutputFile(filename).toDataFrame() - - # --- Detect if it's a FAST Farm file - sCols = ''.join(df.columns) - if sCols.find('WkDf')>1 or sCols.find('CtT')>0: - # --- FAST FARM files - Files=[base+ext for ext in ['.fstf','.FSTF','.Fstf','.fmas','.FMAS','.Fmas'] if os.path.exists(base+ext)] - if len(Files)==0: - fst_in=None - #raise Exception('Error: No .fstf file found with name: '+base+'.fstf') - else: - fst_in=Files[0] - - dfRad,_,dfDiam = fastfarm.spanwisePostProFF(fst_in,avgMethod=avgMethod,avgParam=avgParam,D=1,df=df) - dfs_new = [dfRad,dfDiam] - names_new=[raw_name+'_rad', raw_name+'_diam'] - else: - # --- FAST files - # HACK for AD file to find the right .fst file - iDotAD=base.lower().find('.ad') - if iDotAD>1: - base=base[:iDotAD] - # - Files=[base+ext for ext in ['.fst','.FST','.Fst','.dvr','.Dvr','.DVR'] if os.path.exists(base+ext)] - if len(Files)==0: - fst_in=None - #raise Exception('Error: No .fst file found with name: '+base+'.fst') - else: - fst_in=Files[0] - - try: - out = spanwisePostPro(fst_in, avgMethod=avgMethod, avgParam=avgParam, out_ext=out_ext, df = df) - dfRadED=out['ED_bld']; dfRadAD = out['AD']; dfRadBD = out['BD'] - dfs_new = [dfRadAD, dfRadED, dfRadBD] - names_new=[raw_name+'_AD', raw_name+'_ED', raw_name+'_BD'] - except: - if raiseException: - raise - else: - print('[WARN] radialAvg failed for filename {}'.format(filename)) - dfs_new =[None] - names_new=[''] - return dfs_new, names_new - -def spanwisePostProRows(df, FST_In=None): - """ - Returns a 3D matrix: n x nSpan x nColumn where df is of size n x mColumn - - NOTE: this is really not optimal. Spanwise columns should be extracted only once.. - """ - # --- Extract info (e.g. radial positions) from Fast input file - # We don't have a .fst input file, so we'll rely on some default values for "r" - rho = 1.225 - chord = None - # --- Extract radial positions of output channels - d = FASTSpanwiseOutputs(FST_In, OutputCols=df.columns.values) - r_AD = d['r_AD'] - r_ED_bld = d['r_ED_bld'] - r_ED_twr = d['r_ED_twr'] - r_BD = d['r_BD'] - IR_AD = d['IR_AD'] - IR_ED_bld = d['IR_ED_bld'] - IR_ED_twr = d['IR_ED_twr'] - IR_BD = d['IR_BD'] - TwrLen = d['TwrLen'] - R = d['R'] - r_hub = d['r_hub'] - fst = d['fst'] - #print('r_AD:', r_AD) - #print('r_ED:', r_ED) - #print('r_BD:', r_BD) - if R is None: - R=1 - try: - chord = fst.AD.Bld1['BldAeroNodes'][:,5] # Full span - except: - pass - try: - rho = fst.AD['Rho'] - except: - try: - rho = fst.AD['AirDens'] - except: - print('[WARN] Using default air density (1.225)') - pass - # --- Extract radial data for each azimuthal average - M_AD=None - M_ED=None - M_BD=None - Col_AD=None - Col_ED=None - Col_BD=None - v = df.index.values - - # --- Getting Column info - Cols=df.columns.values - if r_AD is not None: - ColsInfoAD, nrMaxAD = spanwiseColAD(Cols) - if r_ED_bld is not None: - ColsInfoED, nrMaxED = spanwiseColED(Cols) - if r_BD is not None: - ColsInfoBD, nrMaxBD = spanwiseColBD(Cols) - for i,val in enumerate(v): - if r_AD is not None: - dfRad_AD = extract_spanwise_data(ColsInfoAD, nrMaxAD, df=None, ts=df.iloc[i]) - dfRad_AD = insert_extra_columns_AD(dfRad_AD, df.iloc[i], vr=r_AD, rho=rho, R=R, nB=3, chord=chord) - dfRad_AD = insert_spanwise_columns(dfRad_AD, r_AD, R=R, IR=IR_AD) - if i==0: - M_AD = np.zeros((len(v), len(dfRad_AD), len(dfRad_AD.columns))) - Col_AD=dfRad_AD.columns.values - M_AD[i, :, : ] = dfRad_AD.values - if r_ED_bld is not None and len(r_ED_bld)>0: - dfRad_ED = extract_spanwise_data(ColsInfoED, nrMaxED, df=None, ts=df.iloc[i]) - dfRad_ED = insert_spanwise_columns(dfRad_ED, r_ED_bld, R=R, IR=IR_ED) - if i==0: - M_ED = np.zeros((len(v), len(dfRad_ED), len(dfRad_ED.columns))) - Col_ED=dfRad_ED.columns.values - M_ED[i, :, : ] = dfRad_ED.values - if r_BD is not None and len(r_BD)>0: - dfRad_BD = extract_spanwise_data(ColsInfoBD, nrMaxBD, df=None, ts=df.iloc[i]) - dfRad_BD = insert_spanwise_columns(dfRad_BD, r_BD, R=R, IR=IR_BD) - if i==0: - M_BD = np.zeros((len(v), len(dfRad_BD), len(dfRad_BD.columns))) - Col_BD=dfRad_BD.columns.values - M_BD[i, :, : ] = dfRad_BD.values - return M_AD, Col_AD, M_ED, Col_ED, M_BD, Col_BD - - -def FASTSpanwiseOutputs(FST_In, OutputCols=None, verbose=False): - """ Returns spanwise positions where OpenFAST has outputs - INPUTS: - - FST_In: fast input file (.fst) - OUTPUTS: - dictionary with fields: - - r_AD: radial positions of FAST Outputs from the rotor center - """ - R = None - TwrLen = None - r_hub =0 - r_AD = None - r_ED_bld = None - r_ED_twr = None - r_BD = None - IR_ED_bld = None - IR_ED_twr = None - IR_AD = None - IR_BD = None - fst=None - if FST_In is not None: - fst = FASTInputDeck(FST_In, readlist=['AD','ADbld','ED','BD','BDbld','SD']) - # NOTE: all this below should be in FASTInputDeck - if fst.version == 'F7': - # --- FAST7 - if not hasattr(fst,'AD'): - raise Exception('The AeroDyn file couldn''t be found or read, from main file: '+FST_In) - r_AD,IR_AD = AD14_BldGag(fst.AD) - R = fst.fst['TipRad'] - try: - rho = fst.AD['Rho'] - except: - rho = fst.AD['AirDens'] - else: - # --- OpenFAST 2 - R = None - - # --- ElastoDyn - if 'NumTurbines' in fst.fst.keys(): - # AeroDyn driver... - if 'HubRad(1)' in fst.fst.keys(): - r_hub = fst.fst['HubRad(1)'] - else: - r_hub = fst.fst['BldHubRad_bl(1_1)'] - - elif not hasattr(fst,'ED'): - if verbose: - print('[WARN] The Elastodyn file couldn''t be found or read, from main file: '+FST_In) - #raise Exception('The Elastodyn file couldn''t be found or read, from main file: '+FST_In) - else: - R = fst.ED['TipRad'] - r_hub = fst.ED['HubRad'] - if fst.ED.hasNodal: - _, r_ED_bld = ED_BldStations(fst.ED) - IR_ED_bld =None - else: - r_ED_bld, IR_ED_bld = ED_BldGag(fst.ED) - - # No nodal output for elastodyn tower yet - TwrLen = fst.ED['TowerHt'] -fst.ED['TowerBsHt'] - r_ED_twr, IR_ED_twr = ED_TwrGag(fst.ED) - - # --- BeamDyn - if fst.BD is not None: - if R is None: - R = r_BD_All[-1] # just in case ED file missing - if fst.BD.hasNodal: - r_BD = BD_BldStations(fst.BD, fst.BDbld) - else: - r_BD, IR_BD, r_BD_All = BD_BldGag(fst.BD) - r_BD= r_BD+r_hub - - # --- AeroDyn - if fst.AD is None: - if verbose: - print('[WARN] The AeroDyn file couldn''t be found or read, from main file: '+FST_In) - #raise Exception('The AeroDyn file couldn''t be found or read, from main file: '+FST_In) - else: - if fst.ADversion == 'AD15': - if fst.AD.Bld1 is None: - raise Exception('The AeroDyn blade file couldn''t be found or read, from main file: '+FST_In) - - if 'B1N001Cl_[-]' in OutputCols or np.any(np.char.find(list(OutputCols),'AB1N')==0): - # This was compiled with all outs - r_AD = fst.AD.Bld1['BldAeroNodes'][:,0] # Full span - r_AD += r_hub - IR_AD = None - else: - r_AD,_ = AD_BldGag(fst.AD,fst.AD.Bld1, chordOut = True) # Only at Gages locations - r_AD += r_hub - - if R is None: - # ElastoDyn was not read, we use R from AD - R = fst.AD.Bld1['BldAeroNodes'][-1,0] - - elif fst.ADversion == 'AD14': - r_AD,IR_AD = AD14_BldGag(fst.AD) - - else: - raise Exception('AeroDyn version unknown') - # Put everything into a dictionary for convenience - outs = {'r_AD':r_AD, 'IR_AD':IR_AD, 'r_ED_bld':r_ED_bld, 'IR_ED_bld':IR_ED_bld, 'r_ED_twr':r_ED_twr, 'IR_ED_twr':IR_ED_twr, 'r_BD':r_BD, 'IR_BD':IR_BD} - outs['R'] = R - outs['TwrLen']= TwrLen - outs['r_hub'] = r_hub - outs['fst'] = fst - return outs # r_AD, r_ED, r_BD, IR_AD, IR_ED, IR_BD, R, r_hub, fst - - - -def spanwiseConcat(df): - """ - Perform time-concatenation of all the spanwise data (AeroDyn only for now) - - For instance if df is: - - Time B1N001Alpha B1N002Alpha B1N003Alpha - t a1 a2 a3 - - with t, a1, a2, a3, arrays or length nt - - The concatenated dataframe will be: - Time i Alpha - t 1 a1 - t 2 a2 - t 3 a3 - - INPUTS: - - df: a dataframe, typically returned by FASTOutputFile (nt x (nc*nr + nother) ) - - OUTPUTS: - - dfCat: the time-concatenated dataframe (nt*nr x (2 + nc) ) - - """ - Cols = df.columns - ColsInfoAD, nrMaxAD = spanwiseColAD(Cols) - nChan = len(ColsInfoAD) - if nChan==0: - raise WELIBException('Cannot perform spanwise concatenation, no AeroDyn spanwise data was detected in the dataframe (e.g. columns of the form "AB1N001Cl_[-]"). ') - imin = np.min( [np.min(ColsInfoAD[i]['Idx']) for i in range(nChan)] ) - imax = np.max( [np.max(ColsInfoAD[i]['Idx']) for i in range(nChan)] ) - if 'Time_[s]' not in df.columns: - raise WELIBException('Cannot perform spanwise concatenation, the column `Time_[s]` is not present in the dataframe.') - time = df['Time_[s]'] - nt = len(time) - # We add two channels one for time, one for ispan - data = np.zeros((nt*nrMaxAD, nChan+2))*np.nan - # Loop on Channels and radial positions.. - for ic in range(nChan): - for ir in range(nrMaxAD): - data[ir*nt:(ir+1)*nt, 0] = time - data[ir*nt:(ir+1)*nt, 1] = ir+1 - IdxAvailableForThisChannel = ColsInfoAD[ic]['Idx'] - chanName = ColsInfoAD[ic]['name'] - colName = ColsInfoAD[ic]['cols'][ir] - #print('Channel {}: colName {}'.format(chanName, colName)) - try: - if ir+1 in IdxAvailableForThisChannel: - data[ir*nt:(ir+1)*nt, ic+2] = df[colName].values - except: - pass - #else: - # raise Exception('Channel {}: Index missing {}'.format(chanName, ic+1)) - columns = ['Time_[s]'] + ['i_[-]'] + [ColsInfoAD[i]['name'] for i in range(nChan)] - dfCat = pd.DataFrame(data=data, columns=columns) - - return dfCat - - -def addToOutlist(OutList, Signals): - if not isinstance(Signals,list): - raise Exception('Signals must be a list') - for s in Signals: - ss=s.split()[0].strip().strip('"').strip('\'') - AlreadyIn = any([o.find(ss)==1 for o in OutList ]) - if not AlreadyIn: - OutList.append(s) - return OutList - - - -# --------------------------------------------------------------------------------} -# --- Generic df -# --------------------------------------------------------------------------------{ -def remap_df(df, ColMap, bColKeepNewOnly=False, inPlace=False, dataDict=None, verbose=False): - """ - NOTE: see welib.tools.pandalib - - Add/rename columns of a dataframe, potentially perform operations between columns - - dataDict: dictionary of data to be made available as "variable" in the column mapping - 'key' (new) : value (old) - - Example: - - ColumnMap={ - 'WS_[m/s]' : '{Wind1VelX_[m/s]}' , # create a new column from existing one - 'RtTSR_[-]' : '{RtTSR_[-]} * 2 + {RtAeroCt_[-]}' , # change value of column - 'RotSpeed_[rad/s]' : '{RotSpeed_[rpm]} * 2*np.pi/60 ', # new column [rpm] -> [rad/s] - 'q_p' : ['Q_P_[rad]', '{PtfmSurge_[deg]}*np.pi/180'] # List of possible matches - } - # Read - df = weio.read('FASTOutBin.outb').toDataFrame() - # Change columns based on formulae, potentially adding new columns - df = fastlib.remap_df(df, ColumnMap, inplace=True) - - """ - # Insert dataDict into namespace - if dataDict is not None: - for k,v in dataDict.items(): - exec('{:s} = dataDict["{:s}"]'.format(k,k)) - - - if not inPlace: - df=df.copy() - ColMapMiss=[] - ColNew=[] - RenameMap=dict() - # Loop for expressions - for k0,v in ColMap.items(): - k=k0.strip() - if type(v) is not list: - values = [v] - else: - values = v - Found = False - for v in values: - v=v.strip() - if Found: - break # We avoid replacing twice - if v.find('{')>=0: - # --- This is an advanced substitution using formulae - search_results = re.finditer(r'\{.*?\}', v) - expr=v - if verbose: - print('Attempt to insert column {:15s} with expr {}'.format(k,v)) - # For more advanced operations, we use an eval - bFail=False - for item in search_results: - col=item.group(0)[1:-1] - if col not in df.columns: - ColMapMiss.append(col) - bFail=True - expr=expr.replace(item.group(0),'df[\''+col+'\']') - #print(k0, '=', expr) - if not bFail: - df[k]=eval(expr) - ColNew.append(k) - else: - print('[WARN] Column not present in dataframe, cannot evaluate: ',expr) - else: - #print(k0,'=',v) - if v not in df.columns: - ColMapMiss.append(v) - if verbose: - print('[WARN] Column not present in dataframe: ',v) - else: - if k in RenameMap.keys(): - print('[WARN] Not renaming {} with {} as the key is already present'.format(k,v)) - else: - RenameMap[k]=v - Found=True - - # Applying renaming only now so that expressions may be applied in any order - for k,v in RenameMap.items(): - if verbose: - print('Renaming column {:15s} > {}'.format(v,k)) - k=k.strip() - iCol = list(df.columns).index(v) - df.columns.values[iCol]=k - ColNew.append(k) - df.columns = df.columns.values # Hack to ensure columns are updated - - if len(ColMapMiss)>0: - print('[FAIL] The following columns were not found in the dataframe:',ColMapMiss) - #print('Available columns are:',df.columns.values) - - if bColKeepNewOnly: - ColNew = [c for c,_ in ColMap.items() if c in ColNew]# Making sure we respec order from user - ColKeepSafe = [c for c in ColNew if c in df.columns.values] - ColKeepMiss = [c for c in ColNew if c not in df.columns.values] - if len(ColKeepMiss)>0: - print('[WARN] Signals missing and omitted for ColKeep:\n '+'\n '.join(ColKeepMiss)) - df=df[ColKeepSafe] - return df - - -# --------------------------------------------------------------------------------} -# --- Tools for PostProcessing one or several simulations -# --------------------------------------------------------------------------------{ -def _zero_crossings(y,x=None,direction=None): - """ - Find zero-crossing points in a discrete vector, using linear interpolation. - direction: 'up' or 'down', to select only up-crossings or down-crossings - Returns: - x values xzc such that y(yzc)==0 - indexes izc, such that the zero is between y[izc] (excluded) and y[izc+1] (included) - if direction is not provided, also returns: - sign, equal to 1 for up crossing - """ - y=np.asarray(y) - if x is None: - x=np.arange(len(y)) - - if np.any((x[1:] - x[0:-1]) <= 0.0): - raise Exception('x values need to be in ascending order') - - # Indices before zero-crossing - iBef = np.where(y[1:]*y[0:-1] < 0.0)[0] - - # Find the zero crossing by linear interpolation - xzc = x[iBef] - y[iBef] * (x[iBef+1] - x[iBef]) / (y[iBef+1] - y[iBef]) - - # Selecting points that are exactly 0 and where neighbor change sign - iZero = np.where(y == 0.0)[0] - iZero = iZero[np.where((iZero > 0) & (iZero < x.size-1))] - iZero = iZero[np.where(y[iZero-1]*y[iZero+1] < 0.0)] - - # Concatenate - xzc = np.concatenate((xzc, x[iZero])) - iBef = np.concatenate((iBef, iZero)) - - # Sort - iSort = np.argsort(xzc) - xzc, iBef = xzc[iSort], iBef[iSort] - - # Return up-crossing, down crossing or both - sign = np.sign(y[iBef+1]-y[iBef]) - if direction == 'up': - I= np.where(sign==1)[0] - return xzc[I],iBef[I] - elif direction == 'down': - I= np.where(sign==-1)[0] - return xzc[I],iBef[I] - elif direction is not None: - raise Exception('Direction should be either `up` or `down`') - return xzc, iBef, sign - -def find_matching_pattern(List, pattern, sort=False, integers=True, n=1): - r""" Return elements of a list of strings that match a pattern - and return the n first matching group - - Example: - - find_matching_pattern(['Misc','TxN1_[m]', 'TxN20_[m]'], 'TxN(\d+)_\[m\]') - returns: Matches = 1,20 - """ - reg_pattern=re.compile(pattern) - MatchedElements=[] - Matches=[] - for l in List: - match=reg_pattern.search(l) - if match: - MatchedElements.append(l) - if len(match.groups(1))>0: - Matches.append(match.groups(1)[0]) - else: - Matches.append('') - - MatchedElements = np.asarray(MatchedElements) - Matches = np.asarray(Matches) - - if integers: - Matches = Matches.astype(int) - - if sort: - # Sorting by Matched string, NOTE: assumes that MatchedStrings are int. - # that's probably not necessary since alphabetical/integer sorting should be the same - # but it might be useful if number of leading zero differs, which would skew the sorting.. - Isort = np.argsort(Matches) - MatchedElements = MatchedElements[Isort] - Matches = Matches[Isort] - - return MatchedElements, Matches - - -def extractSpanTS(df, pattern): - r""" - Extract spanwise time series of a given "type" (e.g. Cl for each radial node) - Return a dataframe of size nt x nr - - NOTE: time is not inserted in the output dataframe - - To find "r" use FASTSpanwiseOutputs, it is different for AeroDyn/ElastoDyn/BeamDyn/ - There is no guarantee that the number of columns matching pattern will exactly - corresponds to the number of radial stations. That's the responsability of the - OpenFAST user. - - INPUTS: - - df : a dataframe of size nt x nColumns - - pattern: Pattern used to find "radial" columns amongst the dataframe columns - r'B1N(\d*)Cl_\[-\]' - r'^AB1N(\d*)Cl_\[-\]' -> to match AB1N001Cl_[-], AB1N002Cl_[-], etc. - OUTPUTS: - - dfOut : a dataframe of size nt x nr where nr is the number of radial stations matching the pattern. The radial stations are sorted. - """ - cols, sIdx = find_matching_pattern(df.columns, pattern, sort=True) - return df[cols] - - -def _extractSpanTSReg_Legacy(ts, col_pattern, colname, IR=None): - r""" Helper function to extract spanwise results, like B1N1Cl B1N2Cl etc. - - Example - col_pattern: r'B1N(\d*)Cl_\[-\]' - colname : r'B1Cl_[-]' - """ - # Extracting columns matching pattern - cols, sIdx = find_matching_pattern(ts.keys(), col_pattern, sort=True) - if len(cols) ==0: - return (None,None) - - nrMax = np.max(Idx) - Values = np.zeros((nrMax,1)) - Values[:] = np.nan -# if IR is None: -# cols = [col_pattern.format(ir+1) for ir in range(nr)] -# else: -# cols = [col_pattern.format(ir) for ir in IR] - for idx,col in zip(Idx,cols): - Values[idx-1]=ts[col] - nMissing = np.sum(np.isnan(Values)) - if nMissing==nrMax: - return (None,None) - if len(cols)nrMax: - print('[WARN] More values found for {}, found {}/{}'.format(colname,len(cols),nrMax)) - return (colname,Values) - -def _extractSpanTS_Legacy(ts, nr, col_pattern, colname, IR=None): - """ Helper function to extract spanwise results, like B1N1Cl B1N2Cl etc. - - Example - col_pattern: 'B1N{:d}Cl_[-]' - colname : 'B1Cl_[-]' - """ - Values=np.zeros((nr,1)) - if IR is None: - cols = [col_pattern.format(ir+1) for ir in range(nr)] - else: - cols = [col_pattern.format(ir) for ir in IR] - colsExist = [c for c in cols if c in ts.keys() ] - if len(colsExist)==0: - return (None,None) - - Values = [ts[c] if c in ts.keys() else np.nan for c in cols ] - nMissing = np.sum(np.isnan(Values)) - #Values = ts[cols].T - #nCoun=len(Values) - if nMissing==nr: - return (None,None) - if len(colsExist)nr: - print('[WARN] More values found for {}, found {}/{}'.format(colname,len(cols),nr)) - return (colname,Values) - -def radialInterpTS(df, r, varName, r_ref, blade=1, bldFmt='AB{:d}', ndFmt='N{:03d}', method='interp'): - """ - Interpolate a time series at a given radial position for a given variable (varName) - INPUTS: - - df : a dataframe (typically with OpenFAST time series) - - r : radial positions of node where data is to be interpolated - - varName: variable name (and unit) to be interpolated. - The dataframe column will be assumed to be "BldFmt"+"ndFmt"+varName - - r_ref : radial position of nodal data present in the dataframe - - bldFmt : format for blade number, e.g. 'B{:d}' or 'AB{:d}' - - ndFmt : format for node number, e.g. 'N{:d}' or 'N{:03d}' - OUTPUT: - - interpolated time series - """ - # --- Sanity checks - r_ref = np.asarray(r_ref) - if not np.all(r_ref[:-1] <= r_ref[1:]): - raise Exception('This function only works for ascending radial values') - - # No extrapolation - if rnp.max(r_ref): - raise Exception('Extrapolation not supported') - - # Exactly on first or last nodes - if r==r_ref[0]: - col=bldFmt.format(blade) + ndFmt.format(1) + varName - if col in df.columns.values: - return df[col] - else: - raise Exception('Column {} not found in dataframe'.format(col)) - elif r==r_ref[-1]: - col=bldFmt.format(blade) + ndFmt.format(len(r_ref)+1) + varName - if col in df.columns.values: - return df[col] - else: - raise Exception('Column {} not found in dataframe'.format(col)) - - if method=='interp': - # Interpolation - iBef = np.where(r_reftStart].copy() - - dfPsi= bin_mean_DF(df, psiBin, colPsi) - if np.any(dfPsi['Counts']<1): - print('[WARN] some bins have no data! Increase the bin size.') - - return dfPsi - - -def averageDF(df,avgMethod='periods',avgParam=None,ColMap=None,ColKeep=None,ColSort=None,stats=['mean'], filename=''): - """ - See average PostPro for documentation, same interface, just does it for one dataframe - """ - def renameCol(x): - for k,v in ColMap.items(): - if x==v: - return k - return x - # Sanity - if len(filename)>0: - filename=' (File: {})'.format(filename) - - sTAllowed = ['Time_[s]','Time [s]'] - sT = [s for s in sTAllowed if s in df.columns] - if len(sT)==0: - raise WELIBException('The dataframe must contain one of the following column: {}'.format(','.join(sTAllowed))) - - # Before doing the colomn map we store the time - time = df[sT[0]].values - timenoNA = time[~np.isnan(time)] - # Column mapping - if ColMap is not None: - ColMapMiss = [v for _,v in ColMap.items() if v not in df.columns.values] - if len(ColMapMiss)>0: - print('[WARN] Signals missing and omitted for ColMap:\n '+'\n '.join(ColMapMiss)) - df.rename(columns=renameCol,inplace=True) - ## Defining a window for stats (start time and end time) - if avgMethod.lower()=='constantwindow': - tEnd = timenoNA[-1] - if avgParam is None: - tStart=timenoNA[0] - else: - tStart =tEnd-avgParam - elif avgMethod.lower()=='periods': - # --- Using azimuth to find periods - sAAllowed = ['Azimuth_[deg]','Azimuth [deg]'] - sA = [s for s in sAAllowed if s in df.columns] - if len(sA)==0: - raise WELIBException('The dataframe must contain one of the following columns: {}.\nYou cannot use the averaging method by `periods`, use `constantwindow` instead.\n{}'.format(','.join(sAAllowed),filename)) - # NOTE: potentially we could average over each period and then average - psi=df[sA[0]].values - _,iBef = _zero_crossings(psi-psi[-2],direction='up') - if len(iBef)==0: - _,iBef = _zero_crossings(psi-180,direction='up') - if len(iBef)==0: - print('[WARN] Not able to find a zero crossing!{}'.format(filename)) - tEnd = time[-1] - iBef=[0] - else: - tEnd = time[iBef[-1]] - - if avgParam is None: - tStart=time[iBef[0]] - else: - avgParam=int(avgParam) - if len(iBef)-10: - print('[WARN] Signals missing and omitted for ColKeep:\n '+'\n '.join(ColKeepMiss)) - df=df[ColKeepSafe] - if tStart=tStart) & (time<=tEnd) & (~np.isnan(time)))[0] - iEnd = IWindow[-1] - iStart = IWindow[0] - ## Absolute and relative differences at window extremities - DeltaValuesAbs=(df.iloc[iEnd]-df.iloc[iStart]).abs() -# DeltaValuesRel=(df.iloc[iEnd]-df.iloc[iStart]).abs()/df.iloc[iEnd] - DeltaValuesRel=(df.iloc[IWindow].max()-df.iloc[IWindow].min())/df.iloc[IWindow].mean() - #EndValues=df.iloc[iEnd] - #if avgMethod.lower()=='periods_omega': - # if DeltaValuesRel['RotSpeed_[rpm]']*100>5: - # print('[WARN] Rotational speed vary more than 5% in averaging window ({}%) for simulation: {}'.format(DeltaValuesRel['RotSpeed_[rpm]']*100,f)) - ## Stats values during window - # MeanValues = df[IWindow].mean() - # StdValues = df[IWindow].std() - if 'mean' in stats: - MeanValues = pd.DataFrame(df.iloc[IWindow].mean()).transpose() - else: - raise NotImplementedError() - return MeanValues - - - -def averagePostPro(outFiles_or_DFs,avgMethod='periods',avgParam=None, - ColMap=None,ColKeep=None,ColSort=None,stats=['mean'], - skipIfWrongCol=False): - """ Opens a list of FAST output files, perform average of its signals and return a panda dataframe - For now, the scripts only computes the mean within a time window which may be a constant or a time that is a function of the rotational speed (see `avgMethod`). - The script only computes the mean for now. Other stats will be added - INPUTS: - - outFiles_or_DFs: list of fst filenames or dataframes - - `ColMap` : dictionary where the key is the new column name, and v the old column name. - Default: None, output is not sorted - NOTE: the mapping is done before sorting and `ColKeep` is applied - ColMap = {'WS':Wind1VelX_[m/s], 'RPM': 'RotSpeed_[rpm]'} - `ColKeep` : List of strings corresponding to the signals to analyse. - Default: None, all columns are analysed - Example: ColKeep=['RotSpeed_[rpm]','BldPitch1_[deg]','RtAeroCp_[-]'] - or: ColKeep=list(ColMap.keys()) - `avgMethod` : string defining the method used to determine the extent of the averaging window: - - 'periods': use a number of periods(`avgParam`), determined by the azimuth. - - 'periods_omega': use a number of periods(`avgParam`), determined by the mean RPM - - 'constantwindow': the averaging window is constant (defined by `avgParam`). - `avgParam`: based on `avgMethod` it is either - - for 'periods_*': the number of revolutions for the window. - Default: None, as many period as possible are used - - for 'constantwindow': the number of seconds for the window - Default: None, full simulation length is used - """ - result=None - if len(outFiles_or_DFs)==0: - raise Exception('No outFiles or DFs provided') - - invalidFiles =[] - # Loop trough files and populate result - for i,f in enumerate(outFiles_or_DFs): - if isinstance(f, pd.DataFrame): - df = f - else: - try: - df=weio.read(f).toDataFrame() - #df=FASTOutputFile(f).toDataFrame()A # For pyFAST - except: - invalidFiles.append(f) - continue - postpro=averageDF(df, avgMethod=avgMethod, avgParam=avgParam, ColMap=ColMap, ColKeep=ColKeep,ColSort=ColSort,stats=stats, filename=f) - MeanValues=postpro # todo - if result is None: - # We create a dataframe here, now that we know the colums - columns = MeanValues.columns - result = pd.DataFrame(np.nan, index=np.arange(len(outFiles_or_DFs)), columns=columns) - if MeanValues.shape[1]!=result.shape[1]: - columns_ref = result.columns - columns_loc = MeanValues.columns - if skipIfWrongCol: - print('[WARN] File {} has {} columns and not {}. Skipping.'.format(f, MeanValues.shape[1], result.shape[1])) - else: - try: - MeanValues=MeanValues[columns_ref] - result.iloc[i,:] = MeanValues.copy().values - print('[WARN] File {} has more columns than other files. Truncating.'.format(f, MeanValues.shape[1], result.shape[1])) - except: - print('[WARN] File {} is missing some columns compared to other files. Skipping.'.format(f)) - else: - result.iloc[i,:] = MeanValues.copy().values - - - if len(invalidFiles)==len(outFiles_or_DFs): - raise Exception('None of the files can be read (or exist)!. For instance, cannot find: {}'.format(invalidFiles[0])) - elif len(invalidFiles)>0: - print('[WARN] There were {} missing/invalid files: \n {}'.format(len(invalidFiles),'\n'.join(invalidFiles))) - - if ColSort is not None: - if not ColSort in result.keys(): - print('[INFO] Columns present: ', result.keys()) - raise Exception('[FAIL] Cannot sort results with column `{}`, column not present in dataframe (see above)'.format(ColSort)) - # Sorting - result.sort_values([ColSort],inplace=True,ascending=True) - result.reset_index(drop=True,inplace=True) - - return result - - -def integrateMoment(r, F): - r""" - Integrate moment from force and radial station - M_j = \int_{r_j}^(r_n) f(r) * (r-r_j) dr for j=1,nr - TODO: integrate analytically the "r" part - """ - M = np.zeros(len(r)-1) - for ir,_ in enumerate(r[:-1]): - M[ir] = np.trapz(F[ir:]*(r[ir:]-r[ir]), r[ir:]-r[ir]) - return M - -def integrateMomentTS(r, F): - r""" - Integrate moment from time series of forces at nr radial stations - - Compute - M_j = \int_{r_j}^(r_n) f(r) * (r-r_j) dr for j=1,nr - M_j = \int_{r_j}^(r_n) f(r) *r*dr - r_j * \int_(r_j}^{r_n} f(r) dr - j are the columns of M - - NOTE: simply trapezoidal integration is used. - The "r" term is not integrated analytically. This can be improved! - - INPUTS: - - r: array of size nr, of radial stations (ordered) - - F: array nt x nr of time series of forces at each radial stations - OUTPUTS: - - M: array nt x nr of integrated moment at each radial station - - """ - import scipy.integrate as si - # Compute \int_{r_j}^{r_n} f(r) dr, with "j" each column - IF = np.fliplr(-si.cumtrapz(np.fliplr(F), r[-1::-1])) - # Compute \int_{r_j}^{r_n} f(r)*r dr, with "j" each column - FR = F * r - IFR = np.fliplr(-si.cumtrapz(np.fliplr(FR), r[-1::-1])) - # Compute x_j * \int_{r_j}^(r_n) f(r) * r dr - R_IF = IF * r[:-1] - # \int_{r_j}^(r_n) f(r) * (r-r_j) dr = IF + IFR - M = IFR - R_IF - - - # --- Sanity checks - M0 = integrateMoment(r, F[0,:]) - Mm1 = integrateMoment(r, F[-1,:]) - if np.max(np.abs(M0-M[0,:]))>1e-8: - raise Exception('>>> Inaccuracies in integrateMomentTS') - if np.max(np.abs(Mm1-M[-1,:]))>1e-8: - raise Exception('>>> Inaccuracies in integrateMomentTS') - - return M - -if __name__ == '__main__': - - df = FASTOutputFile('ad_driver_yaw.6.outb').toDataFrame() - dfCat = spanwiseConcat(df) - print(dfCat) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py deleted file mode 100644 index c7051864e5..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py +++ /dev/null @@ -1,33 +0,0 @@ -import unittest -import numpy as np -import glob -import os - -def execfile(filepath, globals=None, locals=None): - """ Execute a given python file """ - if globals is None: - globals = {"__name__": "__main__"} - globals.update({ - "__file__": filepath, - }) - with open(filepath, 'rb') as file: - exec(compile(file.read(), filepath, 'exec'), globals, locals) - -class TestExamples(unittest.TestCase): - def test_run_examples(self): - exclude_list=[] - # Add tests to class - MyDir=os.path.dirname(__file__) - files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) - import matplotlib.pyplot as plt - print('\n--------------------------------------------------------------') - for f in files: - print('Running example script: {}'.format(f)) - if hasattr(self,'subTest'): - with self.subTest(filename=os.path.basename(f)): - execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) - plt.close('all') - - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py deleted file mode 100644 index 17eab9fe25..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py +++ /dev/null @@ -1,1446 +0,0 @@ -""" -Set of tools to fit a model to data. - -The quality of a fit is usually a strong function of the initial guess. -Because of this this package contains different kind of "helpers" and "wrapper" tools. - -FUNCTIONS ---------- - -This package can help fitting using: - 1) High level functions, e.g. fit_sinusoid -OR using the `model_fit` function that handles: - 2) User defined "eval" model, e.g. the user sets a string '{a}*x + {b}*x**2' - 3) Predefined models, e.g. Gaussian, logarithmic, weibull_pdf, etc. - 4) Predefined fitters, e.g. SinusoidFitter, DiscretePolynomialFitter, ContinuousPolynomialFitter - -1) The high level fitting functions available are: - - fit_sinusoid - - fit_polynomial - - fit_gaussian - -2) User defined model, using the `model_fit_function`: - - model_fit('eval: {a} + {b}*x**3 + {c}*x**5', x, y) - - model_fit('eval: {u_ref}*(x/{z_ref})**{alpha}', x, y, p0=(8,9,0.1), bounds=(0.001,100)) - User defined models, will require the user to provide an initial guess and potentially bounds - -3) Fitting using predefined models using the `model_fit` function : - - model_fit('predef: gaussian', x, y) - - model_fit('predef: gaussian-yoff', x, y) - - model_fit('predef: powerlaw_alpha', x, y, p0=(0.1), **fun_kwargs) - - model_fit('predef: powerlaw_u_alpha', x, y, **fun_kwargs) - - model_fit('predef: expdecay', x, y) - - model_fit('predef: weibull_pdf', x, y) - Predefined models have default values for bounds and guesses that can be overriden. - -4) Predefined fitters, wrapped with the `model_fit` function: - - model_fit('fitter: sinusoid', x, y) - - model_fit('fitter: polynomial_discrete', x, y, exponents=[0,2,4]) - - model_fit('fitter: polynomial_continuous', x, y, order=3) - Predefined fitters can handle bounds/initial guess better - -INPUTS: --------- -All functions have the following inputs: - - x: array on the x-axis - - y: values on the y-axis (to be fitted against a model) -Additionally some functions have the following inputs: - - p0: initial values for parameters, either a string or a dict: - - string: the string is converted to a dictionary, assuming key value pairs - example: 'a=0, b=1.3' - - dictionary, then keys should corresponds to the parameters of the model - example: {'a':0, 'b':1.3} - - bounds: bounds for each parameters, either a string or a dictionary. - NOTE: pi and inf are available to set bounds - - if a string, the string is converted to a dictionary assuming key value pairs - example: 'a=(0,3), b=(-inf,pi)' - - if a dictionary, the keys should corresponds to the parameters of the model - example: {'a':(0,3), 'b':(-inf,pi)} - -OUTPUTS: --------- -All functions returns the same outputs: - - y_fit : the fit to the y data - - pfit : the list of parameters used - - fitter: a `ModelFitter` object useful to manipulate the fit, in particular: - - fitter.model: dictionary with readable versions of the parameters, formula, - function to reevaluate the fit on a different x, etc. - - fitter.data: data used for the fit - - fitter.fit_data: perform another fit using different data - -MISC ----- -High-level fitters, predefined models or fitters can be added to this class. - -""" -import numpy as np -import scipy.optimize as so -import scipy.stats as stats -import string -import re -from collections import OrderedDict -from numpy import sqrt, pi, exp, cos, sin, log, inf, arctan # for user convenience -import six - -# --------------------------------------------------------------------------------} -# --- High level fitters -# --------------------------------------------------------------------------------{ -def fit_sinusoid(x,y,physical=False): - """ Fits a sinusoid to y with formula: - if physical is False: y_fit=A*sin(omega*x+phi)+B - if physical is True: y_fit=A*sin(2*pi(f+phi/360))+B """ - y_fit, pfit, fitter = model_fit('fitter: sinusoid', x, y, physical=physical) - return y_fit, pfit, fitter - -def fit_polynomial(x, y, order=None, exponents=None): - """ Fits a polynomial to y, either: - - full up to a given order: y_fit= {a_i} x^i , i=0..order - - or using a discrete set of exponents: y_fit= {a_i} x^e[i], i=0,..len(exponents) - OPTIONAL INPUTS: - - order: integer - Maximum order of polynomial, e.g. 2: for a x**0 + b x**1 + c x**2 - - exponents: array-like - Exponents to be used. e.g. [0,2,5] for a x**0 + b x**2 + c x**5 - """ - if order is not None: - y_fit, pfit, fitter = model_fit('fitter: polynomial_continuous', x, y, order=order) - else: - y_fit, pfit, fitter = model_fit('fitter: polynomial_discrete', x, y, exponents=exponents) - return y_fit, pfit, fitter - -def fit_gaussian(x, y, offset=False): - """ Fits a gaussin to y, with the following formula: - offset is True : '1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2)' - offset is False: '1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2) + {y0}' - """ - if offset: - return model_fit('predef: gaussian-yoff', x, y) - else: - return model_fit('predef: gaussian', x, y) - -# --------------------------------------------------------------------------------} -# --- Simple mid level fitter -# --------------------------------------------------------------------------------{ -def fit_polynomial_continuous(x, y, order): - """Fit a polynomial with a continuous set of exponents up to a given order - - Parameters - ---------- - x,y: see `model_fit` - order: integer - Maximum order of polynomial, e.g. 2: for a x**0 + b x**1 + c x**2 - - Returns - ------- - see `model_fit` - """ - pfit = np.polyfit(x,y,order) - y_fit = np.polyval(pfit,x) - - # coeffs_dict, e.g. {'a':xxx, 'b':xxx}, formula = 'a*x + b' - variables = string.ascii_lowercase[:order+1] - coeffs_dict = OrderedDict([(var,coeff) for i,(coeff,var) in enumerate(zip(pfit,variables))]) - formula = ' + '.join(['{}*x**{}'.format(var,order-i) for i,var in enumerate(variables)]) - formula = _clean_formula(formula) - - return y_fit,pfit,{'coeffs':coeffs_dict,'formula':formula,'fitted_function':lambda xx : np.polyval(pfit,xx)} - -def fit_polynomial_discrete(x, y, exponents): - """Fit a polynomial with a discrete set of exponents - - Parameters - ---------- - x,y: see `model_fit` - exponents: array-like - Exponents to be used. e.g. [0,2,5] for a x**0 + b x**2 + c x**5 - - Returns - ------- - see `model_fit` - """ - #exponents=-np.sort(-np.asarray(exponents)) - X_poly=np.array([]) - for i,e in enumerate(exponents): - if i==0: - X_poly = np.array([x**e]) - else: - X_poly = np.vstack((X_poly,x**e)) - try: - pfit = np.linalg.lstsq(X_poly.T, y, rcond=None)[0] - except: - pfit = np.linalg.lstsq(X_poly.T, y) - y_fit= np.dot(pfit, X_poly) - - variables = string.ascii_lowercase[:len(exponents)] - coeffs_dict = OrderedDict([(var,coeff) for i,(coeff,var) in enumerate(zip(pfit,variables))]) - formula = ' + '.join(['{}*x**{}'.format(var,e) for var,e in zip(variables,exponents)]) - formula = _clean_formula(formula) - - return y_fit,pfit,{'coeffs':coeffs_dict,'formula':formula} - - -def fit_powerlaw_u_alpha(x, y, z_ref=100, p0=(10,0.1)): - """ - p[0] : u_ref - p[1] : alpha - """ - pfit, _ = so.curve_fit(lambda x, *p : p[0] * (x / z_ref) ** p[1], x, y, p0=p0) - y_fit = pfit[0] * (x / z_ref) ** pfit[1] - coeffs_dict=OrderedDict([('u_ref',pfit[0]),('alpha',pfit[1])]) - formula = '{u_ref} * (z / {z_ref}) ** {alpha}' - fitted_fun = lambda xx: pfit[0] * (xx / z_ref) ** pfit[1] - return y_fit, pfit, {'coeffs':coeffs_dict,'formula':formula,'fitted_function':fitted_fun} - - -def polyfit2d(x, y, z, kx=3, ky=3, order=None): - ''' - Two dimensional polynomial fitting by least squares. - Fits the functional form f(x,y) = z. - - Notes - ----- - Resultant fit can be plotted with: - np.polynomial.polynomial.polygrid2d(x, y, soln.reshape((kx+1, ky+1))) - - Parameters - ---------- - x, y: array-like, 1d - x and y coordinates. - z: np.ndarray, 2d - Surface to fit. - kx, ky: int, default is 3 - Polynomial order in x and y, respectively. - order: int or None, default is None - If None, all coefficients up to maxiumum kx, ky, ie. up to and including x^kx*y^ky, are considered. - If int, coefficients up to a maximum of kx+ky <= order are considered. - - Returns - ------- - Return paramters from np.linalg.lstsq. - - soln: np.ndarray - Array of polynomial coefficients. - residuals: np.ndarray - rank: int - s: np.ndarray - - # The resultant fit can be visualised with: - # - # fitted_surf = np.polynomial.polynomial.polyval2d(x, y, soln.reshape((kx+1,ky+1))) - # plt.matshow(fitted_surf - - - ''' - - # grid coords - x, y = np.meshgrid(x, y) - # coefficient array, up to x^kx, y^ky - coeffs = np.ones((kx+1, ky+1)) - - # solve array - a = np.zeros((coeffs.size, x.size)) - - # for each coefficient produce array x^i, y^j - for index, (j, i) in enumerate(np.ndindex(coeffs.shape)): # TODO should it be i,j - # do not include powers greater than order - if order is not None and i + j > order: - arr = np.zeros_like(x) - else: - arr = coeffs[i, j] * x**i * y**j - a[index] = arr.ravel() - - # do leastsq fitting and return leastsq result - return np.linalg.lstsq(a.T, np.ravel(z), rcond=None) - - - -# --------------------------------------------------------------------------------} -# --- Predifined functions NOTE: they need to be registered in variable `MODELS` -# --------------------------------------------------------------------------------{ -def gaussian(x, p): - """ p = (mu,sigma) """ - return 1/(p[1]*np.sqrt(2*np.pi)) * np.exp(-1/2*((x-p[0])/p[1])**2) - -def gaussian_w_offset(x, p): - """ p = (mu,sigma,y0) """ - return 1/(p[1]*np.sqrt(2*np.pi)) * np.exp(-1/2*((x-p[0])/p[1])**2) + p[2] - -def logarithmic(x, p): - """ p = (a,b) """ - return p[0]*np.log(x)+p[1] - -def powerlaw_all(x, p): - """ p = (alpha,u_ref,z_ref) """ - return p[1] * (x / p[2]) ** p[0] - -def powerlaw_alpha(x, p, u_ref=10, z_ref=100): - """ p = alpha """ - return u_ref * (x / z_ref) ** p[0] - -def powerlaw_u_alpha(x, p, z_ref=100): - """ p = (alpha, u_ref) """ - return p[1] * (x / z_ref) ** p[0] - -def expdecay(x, p, z_ref=100): - """ p = (A, k, B) formula: {A}*exp(-{k}*x)+{B} """, - return p[0]* np.exp(-p[1]*x) + p[2] - -def weibull_pdf(x, p, z_ref=100): - """ p = (A, k) formula: {k}*x**({k}-1) / {A}**{k} * np.exp(-x/{A})**{k} """, - # NOTE: if x is 0, a divide by zero error is incountered if p[1]-1<0 - p=list(p) - return p[1] * x ** (p[1] - 1) / p[0] ** p[1] * np.exp(-(x / p[0]) ** p[1]) - -def sinusoid(x, p): - """ p = (A,omega,phi,B) """ - return p[0]*np.sin(p[1]*x+p[2]) + p[3] -def sinusoid_f(x, p): - """ p = (A,f,phi_deg,B) """ - return p[0]*np.sin(2*pi*(p[1]*x+p[2]/360)) + p[3] - - - -def secondorder_impulse(t, p): - """ p = (A, omega0, zeta, B, t0) """ - A, omega0, zeta, B, t0 = p - omegad = omega0 * sqrt(1-zeta**2) - phi = np.arctan2(zeta, sqrt(1-zeta**2)) - x = np.zeros(t.shape) - bp = t>=t0 - t = t[bp]-t0 - x[bp] += A * sin(omegad * t) * exp(-zeta * omega0 * t) - x+=B - return x - -def secondorder_step(t, p): - """ p = (A, omega0, zeta, B, t0) """ - A, omega0, zeta, B, t0 = p - omegad = omega0 * sqrt(1-zeta**2) - phi = np.arctan2(zeta, sqrt(1-zeta**2)) - x = np.zeros(t.shape) - bp = t>=t0 - t = t[bp]-t0 - x[bp] += A * ( 1- exp(-zeta*omega0 *t)/sqrt(1-zeta**2) * cos(omegad*t - phi)) - x+=B - return x - - -def gentorque(x, p): - """ - INPUTS: - x: generator or rotor speed - p= (RtGnSp, RtTq , Rgn2K , SlPc , SpdGenOn) - RtGnSp Rated generator speed for simple variable-speed generator control (HSS side) (rpm) - RtTq Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) - Rgn2K Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) - SlPc Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) - - OUTPUTS: - GenTrq: Generator torque [Nm] - - """ - - # Init - RtGnSp, RtTq , Rgn2K , SlPc, SpdGenOn = p - GenTrq=np.zeros(x.shape) - - xmin,xmax=np.min(x), np.max(x) -# if RtGnSp<(xmin+xmax)*0.4: -# return GenTrq - - # Setting up different regions - xR21_Start = RtGnSp*(1-SlPc/100) - bR0 = xSpdGenOn , x=xR21_Start , x<=RtGnSp) - bR3 = x>RtGnSp - # R21 - y1, y2 = Rgn2K*xR21_Start**2, RtTq - x1, x2 = xR21_Start , RtGnSp - m=(y2-y1)/(x2-x1) - GenTrq[bR21] = m*(x[bR21]-x1) + y1 # R21 - GenTrq[bR2] = Rgn2K * x[bR2]**2 # R2 - GenTrq[bR3] = RtTq # R3 - return GenTrq - - -MODELS =[ -# {'label':'User defined model', -# 'name':'eval:', -# 'formula':'{a}*x**2 + {b}', -# 'coeffs':None, -# 'consts':None, -# 'bounds':None }, -{'label':'Gaussian', 'handle':gaussian,'id':'predef: gaussian', -'formula':'1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2)', -'coeffs' :'mu=0, sigma=1', # Order Important -'consts' :None, -'bounds' :None}, -{'label':'Gaussian with y-offset','handle':gaussian_w_offset,'id':'predef: gaussian-yoff', -'formula':'1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2) + {y0}', -'coeffs' :'mu=0, sigma=1, y0=0', #Order Important -'consts' :None, -'bounds' :'sigma=(-inf,inf), mu=(-inf,inf), y0=(-inf,inf)'}, -{'label':'Exponential', 'handle': expdecay, 'id':'predef: expdecay', -'formula':'{A}*exp(-{k}*x)+{B}', -'coeffs' :'A=1, k=1, B=0', # Order Important -'consts' :None, -'bounds' :None}, -{'label':'Logarithmic', 'handle': logarithmic, 'id':'predef: logarithmic', -'formula':'{a}*log(x)+{b}', -'coeffs' :'a=1, b=0', # Order Important -'consts' :None, -'bounds' :None}, -{'label':'2nd order impulse/decay (manual)', 'handle': secondorder_impulse, 'id':'predef: secondorder_impulse', -'formula':'{A}*exp(-{zeta}*{omega}*(x-{x0})) * sin({omega}*sqrt(1-{zeta}**2))) +{B}', -'coeffs' :'A=1, omega=1, zeta=0.001, B=0, x0=0', # Order Important -'consts' :None, -'bounds' :'A=(-inf,inf), omega=(0,100), zeta=(0,1), B=(-inf,inf), x0=(-inf,inf)'}, -{'label':'2nd order step (manual)', 'handle': secondorder_step, 'id':'predef: secondorder_step', -'formula':'{A}*(1-exp(-{zeta}*{omega}*(x-{x0}))/sqrt(1-{zeta}**2) * cos({omega}*sqrt(1-{zeta}**2)-arctan({zeta}/sqrt(1-{zeta}**2)))) +{B}', -'coeffs' :'A=1, omega=1, zeta=0.001, B=0, x0=0', # Order Important -'consts' :None, -'bounds' :'A=(-inf,inf), omega=(0,100), zeta=(0,1), B=(-inf,inf), x0=(-inf,inf)'}, - -# --- Wind Energy -{'label':'Power law (alpha)', 'handle':powerlaw_alpha, 'id':'predef: powerlaw_alpha', -'formula':'{u_ref} * (z / {z_ref}) ** {alpha}', -'coeffs' : 'alpha=0.1', # Order important -'consts' : 'u_ref=10, z_ref=100', -'bounds' : 'alpha=(-1,1)'}, -{'label':'Power law (alpha,u)', 'handle':powerlaw_u_alpha, 'id':'predef: powerlaw_u_alpha', -'formula':'{u_ref} * (z / {z_ref}) ** {alpha}', -'coeffs': 'alpha=0.1, u_ref=10', # Order important -'consts': 'z_ref=100', -'bounds': 'u_ref=(0,inf), alpha=(-1,1)'}, -# 'powerlaw_all':{'label':'Power law (alpha,u,z)', 'handle':powerlaw_all, # NOTE: not that useful -# 'formula':'{u_ref} * (z / {z_ref}) ** {alpha}', -# 'coeffs': 'alpha=0.1, u_ref=10, z_ref=100', -# 'consts': None, -# 'bounds': 'u_ref=(0,inf), alpha=(-1,1), z_ref=(0,inf)'}, -{'label':'Weibull PDF', 'handle': weibull_pdf, 'id':'predef: weibull_pdf', -'formula':'{k}*x**({k}-1) / {A}**{k} * np.exp(-x/{A})**{k}', -'coeffs' :'A=1, k=1', # Order Important -'consts' :None, -'bounds' :'A=(0.1,inf), k=(0,5)'}, -{'label':'Generator Torque', 'handle': gentorque, 'id':'predef: gentorque', -'formula': '{RtGnSp} , {RtTq} , {Rgn2K} , {SlPc} , {SpdGenOn}', -'coeffs' : 'RtGnSp=100 , RtTq=1000 , Rgn2K=0.01 ,SlPc=5 , SpdGenOn=0', # Order Important -'consts' :None, -'bounds' :'RtGnSp=(0.1,inf) , RtTq=(1,inf), Rgn2K=(0.0,0.1) ,SlPc=(0,20) , SpdGenOn=(0,inf)'} -] - -# --------------------------------------------------------------------------------} -# --- Main function wrapper -# --------------------------------------------------------------------------------{ -def model_fit(func, x, y, p0=None, bounds=None, **fun_kwargs): - """ - Parameters - ---------- - func: string or function handle - - function handle - - string starting with "fitter: ": (see variable FITTERS) - - "fitter: polynomial_continuous 5' : polyfit order 5 - - "fitter: polynomial_discrete 0 2 3 ': fit polynomial of exponents 0 2 3 - - string providing an expression to evaluate, e.g.: - - "eval: {a}*x + {b}*x**2 " - - string starting with "predef": (see variable MODELS) - - "predef: powerlaw_alpha" : - - "predef: powerlaw_all" : - - "predef: gaussian " : - - x: array of x values - y: array of y values - p0: initial values for parameters, either a string or a dict: - - if a string: the string is converted to a dictionary, assuming key value pairs - example: 'a=0, b=1.3' - - if a dictionary, then keys should corresponds to the parameters of the model - example: {'a':0, 'b':1.3} - bounds: bounds for each parameters, either a string or a dictionary. - NOTE: pi and inf are available to set bounds - - if a string, the string is converted to a dictionary assuming key value pairs - example: 'a=(0,3), b=(-inf,pi)' - - if a dictionary, the keys should corresponds to the parameters of the model - example: {'a':(0,3), 'b':(-inf,pi)} - - Returns - ------- - y_fit: array with same shape as `x` - fitted data. - pfit : fitted parameters - fitter: ModelFitter object - """ - - if isinstance(func,six.string_types) and func.find('fitter:')==0: - # --- This is a high level fitter, we call the class - # The info about the class are storred in the global variable FITTERS - # See e.g. SinusoidFitter, DiscretePolynomialFitter - predef_fitters=[m['id'] for m in FITTERS] - if func not in predef_fitters: - raise Exception('Function `{}` not defined in curve_fitting module\n Available fitters: {}'.format(func,predef_fitters)) - i = predef_fitters.index(func) - FitterDict = FITTERS[i] - consts = FITTERS[i]['consts'] - args, missing = set_common_keys(consts, fun_kwargs) - if len(missing)>0: - raise Exception('Curve fitting with `{}` requires the following arguments {}. Missing: {}'.format(func,consts.keys(),missing)) - # Calling the class - fitter = FitterDict['handle'](x=x, y=y, p0=p0, bounds=bounds, **fun_kwargs) - else: - fitter = ModelFitter(func, x, y, p0=p0, bounds=bounds, **fun_kwargs) - - pfit = [v for _,v in fitter.model['coeffs'].items()] - return fitter.data['y_fit'], pfit , fitter - - -# --------------------------------------------------------------------------------} -# --- Main Class -# --------------------------------------------------------------------------------{ -class ModelFitter(): - def __init__(self,func=None, x=None, y=None, p0=None, bounds=None, **fun_kwargs): - - self.model={ - 'name':None, 'model_function':None, 'consts':fun_kwargs, 'formula': 'unavailable', # model signature - 'coeffs':None, 'formula_num':'unavailable', 'fitted_function':None, 'coeffs_init':p0, 'bounds':bounds, # model fitting - 'R2':None, - } - self.data={'x':x,'y':y,'y_fit':None} - - if func is None: - return - self.set_model(func, **fun_kwargs) - - # Initialize function if present - # Perform fit if data and function is present - if x is not None and y is not None: - self.fit_data(x,y,p0,bounds) - - def set_model(self,func, **fun_kwargs): - if callable(func): - # We don't have much additional info - self.model['model_function'] = func - self.model['name'] = func.__name__ - pass - - elif isinstance(func,six.string_types): - if func.find('predef:')==0: - # --- Minimization from a predefined function - predef_models=[m['id'] for m in MODELS] - if func not in predef_models: - raise Exception('Predefined function `{}` not defined in curve_fitting module\n Available functions: {}'.format(func,predef_models)) - i = predef_models.index(func) - ModelDict = MODELS[i] - self.model['model_function'] = ModelDict['handle'] - self.model['name'] = ModelDict['label'] - self.model['formula'] = ModelDict['formula'] - self.model['coeffs'] = extract_key_num(ModelDict['coeffs']) - self.model['coeffs_init'] = self.model['coeffs'].copy() - self.model['consts'] = extract_key_num(ModelDict['consts']) - self.model['bounds'] = extract_key_tuples(ModelDict['bounds']) - - elif func.find('eval:')==0: - # --- Minimization from a eval string - formula=func[5:] - # Extract coeffs {a} {b} {c}, replace by p[0] - variables, formula_eval = extract_variables(formula) - nParams=len(variables) - if nParams==0: - raise Exception('Formula should contains parameters in curly brackets, e.g.: {a}, {b}, {u_1}. No parameters found in {}'.format(formula)) - - # Check that the formula evaluates - x=np.array([1,2,5])*np.sqrt(2) # some random evaluation vector.. - p=[np.sqrt(2)/4]*nParams # some random initial conditions - try: - y=eval(formula_eval) - y=np.asarray(y) - if y.shape!=x.shape: - raise Exception('The formula does not return an array of same size as the input variable x. The formula must include `x`: {}'.format(formula_eval)) - except SyntaxError: - raise Exception('The formula does not evaluate, syntax error raised: {}'.format(formula_eval)) - except ZeroDivisionError: - pass - - # Creating the actual function - def func(x, p): - return eval(formula_eval) - - self.model['model_function'] = func - self.model['name'] = 'user function' - self.model['formula'] = formula - self.model['coeffs'] = OrderedDict([(k,v) for k,v in zip(variables,p)]) - self.model['coeffs_init'] = self.model['coeffs'].copy() - self.model['consts'] = {} - self.model['bounds'] = None - - else: - raise Exception('func string needs to start with `eval:` of `predef:`, func: {}'.format(func)) - else: - raise Exception('func should be string or callable') - - if fun_kwargs is None: - return - if len(fun_kwargs)==0: - return - if self.model['consts'] is None: - raise Exception('Fun_kwargs provided, but no function constants were defined') - - self.model['consts'], missing = set_common_keys(self.model['consts'], fun_kwargs ) - if len(missing)>0: - raise Exception('Curve fitting with function `{}` requires the following arguments {}. Missing: {}'.format(func.__name__,consts.keys(),missing)) - - def setup_bounds(self, bounds, nParams): - if bounds is not None: - self.model['bounds']=bounds # store in model - bounds=self.model['bounds'] # usemodel bounds as default - if bounds is not None: - if isinstance(bounds ,six.string_types): - bounds=extract_key_tuples(bounds) - - if isinstance(bounds ,dict): - if len(bounds)==0 or 'all' in bounds.keys(): - bounds=([-np.inf]*nParams,[np.inf]*nParams) - elif self.model['coeffs'] is not None: - b1=[] - b2=[] - for k in self.model['coeffs'].keys(): - if k in bounds.keys(): - b1.append(bounds[k][0]) - b2.append(bounds[k][1]) - else: - # TODO merge default bounds - raise Exception('Bounds dictionary is missing the key: `{}`'.format(k)) - bounds=(b1,b2) - else: - raise NotImplementedError('Bounds dictionary with no known model coeffs.') - else: - # so.curve_fit needs a 2-tuple - b1,b2=bounds[0],bounds[1] - if not hasattr(b1,'__len__'): - b1=[b1]*nParams - if not hasattr(b2,'__len__'): - b2=[b2]*nParams - bounds=(b1,b2) - else: - bounds=([-np.inf]*nParams,[np.inf]*nParams) - - self.model['bounds']=bounds # store in model - - def setup_guess(self, p0, bounds, nParams): - """ - Setup initial parameter values for the fit, based on what the user provided, and potentially the bounds - - INPUTS: - - p0: initial parameter values for the fit - - if a string (e.g. " a=1, b=3"), it's converted to a dict - - if a dict, the ordered keys of model['coeffs'] are used to sort p0 - - bounds: tuple of lower and upper bounds for each parameters. - Parameters are ordered as function of models['coeffs'] - bounds[0]: lower bounds or all parameters - bounds[1]: upper bounds or all parameters - - We can assume that the bounds are set - """ - def middleOfBounds(i): - """ return middle of bounds for parameter `i`""" - bLow = bounds[0][i] - bHigh = bounds[0][2] - if (bLow,bHigh)==(-np.inf,np.inf): - p_i=0 - elif bLow==-np.inf: - p_i = -abs(bHigh)*2 - elif bHigh== np.inf: - p_i = abs(bLow)*2 - else: - p_i = (bLow+bHigh)/2 - return p_i - - if isinstance(p0 ,six.string_types): - p0=extract_key_num(p0) - if len(p0)==0: - p0=None - - if p0 is None: - # There is some tricky logic here between the priority of bounds and coeffs - if self.model['coeffs'] is not None: - # We rely on function to give us decent init coefficients - p0 = ([v for _,v in self.model['coeffs'].items()]) - elif bounds is None: - p0 = ([0]*nParams) - else: - # use middle of bounds - p0 = [0]*nParams - for i,(b1,b2) in enumerate(zip(bounds[0],bounds[1])): - p0[i] = middleOfBounds(i) - p0 = (p0) - elif isinstance(p0,dict): - # User supplied a dictionary, we use the ordered keys of coeffs to sort p0 - p0_dict=p0.copy() - if self.model['coeffs'] is not None: - p0=[] - for k in self.model['coeffs'].keys(): - if k in p0_dict.keys(): - p0.append(p0_dict[k]) - else: - raise Exception('Guess dictionary is missing the key: `{}`'.format(k)) - else: - raise NotImplementedError('Guess dictionary with no known model coeffs.') - - - if not hasattr(p0,'__len__'): - p0=(p0,) - - # --- Last check that p0 is within bounds - if bounds is not None: - for p,k,lb,ub in zip(p0, self.model['coeffs'].keys(), bounds[0], bounds[1]): - if pub: - raise Exception('Parameter `{}` has the guess value {}, which is larger than the upper bound ({})'.format(k,p,ub)) - # TODO potentially set it as middle of bounds - - # --- Finally, store the initial guesses in the model - self.model['coeffs_init'] = p0 - - def fit(self, func, x, y, p0=None, bounds=None, **fun_kwargs): - """ Fit model defined by a function to data (x,y) """ - # Setup function - self.set_model(func, **fun_kwargs) - # Fit data to model - self.fit_data(x, y, p0, bounds) - - def clean_data(self,x,y): - x=np.asarray(x) - y=np.asarray(y) - bNaN=~np.isnan(y) - y=y[bNaN] - x=x[bNaN] - bNaN=~np.isnan(x) - y=y[bNaN] - x=x[bNaN] - self.data['x']=x - self.data['y']=y - return x,y - - def fit_data(self, x, y, p0=None, bounds=None): - """ fit data, assuming a model is already setup""" - if self.model['model_function'] is None: - raise Exception('Call set_function first') - - # Cleaning data, and store it in object - x,y=self.clean_data(x,y) - - # nParams - if isinstance(p0 ,six.string_types): - p0=extract_key_num(p0) - if len(p0)==0: - p0=None - if p0 is not None: - if hasattr(p0,'__len__'): - nParams=len(p0) - else: - nParams=1 - elif self.model['coeffs'] is not None: - nParams=len(self.model['coeffs']) - else: - raise Exception('Initial guess `p0` needs to be provided since we cant infer the size of the model coefficients.') - if self.model['coeffs'] is not None: - if len(self.model['coeffs'])!=nParams: - raise Exception('Inconsistent dimension between model guess (size {}) and the model parameters (size {})'.format(nParams,len(self.model['coeffs']))) - - # Bounds - self.setup_bounds(bounds,nParams) - - # Initial conditions - self.setup_guess(p0,self.model['bounds'],nParams) - - # Fitting - minimize_me = lambda x, *p : self.model['model_function'](x, p, **self.model['consts']) - pfit, pcov = so.curve_fit(minimize_me, x, y, p0=self.model['coeffs_init'], bounds=self.model['bounds']) - - # --- Reporting information about the fit (after the fit) - y_fit = self.model['model_function'](x, pfit, **self.model['consts']) - self.store_fit_info(y_fit, pfit) - - # --- Return a fitted function - self.model['fitted_function'] = lambda xx: self.model['model_function'](xx, pfit, **self.model['consts']) - - def store_fit_info(self, y_fit, pfit): - # --- Reporting information about the fit (after the fit) - self.data['y_fit']=y_fit - self.model['R2'] = rsquare(self.data['y'], y_fit) - if self.model['coeffs'] is not None: - if not isinstance(self.model['coeffs'], OrderedDict): - raise Exception('Coeffs need to be of type OrderedDict') - for k,v in zip(self.model['coeffs'].keys(), pfit): - self.model['coeffs'][k]=v - - # Replace numerical values in formula - if self.model['formula'] is not None: - formula_num=self.model['formula'] - for k,v in self.model['coeffs'].items(): - formula_num = formula_num.replace('{'+k+'}',str(v)) - for k,v in self.model['consts'].items(): - formula_num = formula_num.replace('{'+k+'}',str(v)) - self.model['formula_num'] = formula_num - - def formula_num(self, fmt=None): - """ return formula with coeffs and consts evaluted numerically""" - if fmt is None: - fmt_fun = lambda x: str(x) - elif isinstance(fmt,six.string_types): - fmt_fun = lambda x: ('{'+fmt+'}').format(x) - elif callable(fmt): - fmt_fun = fmt - formula_num=self.model['formula'] - for k,v in self.model['coeffs'].items(): - formula_num = formula_num.replace('{'+k+'}',fmt_fun(v)) - for k,v in self.model['consts'].items(): - formula_num = formula_num.replace('{'+k+'}',fmt_fun(v)) - return formula_num - - - - def plot(self, x=None, fig=None, ax=None): - if x is None: - x=self.data['x'] - - sFormula = _clean_formula(self.model['formula'],latex=True) - - import matplotlib.pyplot as plt - import matplotlib.patches as mpatches - - if fig is None: - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - - ax.plot(self.data['x'], self.data['y'], '.', label='Data') - ax.plot(x, self.model['fitted_function'](x), '-', label='Model ' + sFormula) - - # Add extra info to the legend - handles, labels = ax.get_legend_handles_labels() # get existing handles and labels - empty_patch = mpatches.Patch(color='none', label='Extra label') # create a patch with no color - for k,v in self.model['coeffs'].items(): - handles.append(empty_patch) # add new patches and labels to list - labels.append(r'${:s}$ = {}'.format(pretty_param(k),pretty_num_short(v))) - handles.append(empty_patch) # add new patches and labels to list - labels.append('$R^2$ = {}'.format(pretty_num_short(self.model['R2']))) - ax.legend(handles, labels) - - - #ax.set_xlabel('') - #ax.set_ylabel('') - return fig,ax - - def print_guessbounds(self): - s='' - p0 = self.model['coeffs_init'] - bounds = self.model['bounds'] - for i,(k,v) in enumerate(self.model['coeffs'].items()): - print( (pretty_num(bounds[0][i]),pretty_num(p0[i]), pretty_num(bounds[1][i])) ) - s+='{:15s}: {:10s} < {:10s} < {:10s}\n'.format(k, pretty_num(bounds[0][i]),pretty_num(p0[i]), pretty_num(bounds[1][i])) - print(s) - - - def __repr__(self): - s='<{} object> with fields:\n'.format(type(self).__name__) - s+=' - data, dictionary with keys: \n' - s+=' - x: [{} ... {}], n: {} \n'.format(self.data['x'][0],self.data['x'][-1],len(self.data['x'])) - s+=' - y: [{} ... {}], n: {} \n'.format(self.data['y'][0],self.data['y'][-1],len(self.data['y'])) - s+=' - model, dictionary with keys: \n' - for k,v in self.model.items(): - s=s+' - {:15s}: {}\n'.format(k,v) - return s - - -# --------------------------------------------------------------------------------} -# --- Wrapper for predefined fitters -# --------------------------------------------------------------------------------{ -class PredefinedModelFitter(ModelFitter): - def __init__(self, x=None, y=None, p0=None, bounds=None, **kwargs): - ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) # NOTE: not passing data - - self.kwargs=kwargs - - if x is not None and y is not None: - self.fit_data(x,y,p0,bounds) - - def setup_model(self): - """ - Setup model: - - guess/coeffs_init: return params in format needed for curve_fit (p0,p1,p2,p3) - - bound : bounds in format needed for curve_fit ((low0,low1,low2), (high0, high1)) - - coeffs : OrderedDict, necessary for user print - - formula : necessary for user print - """ - #self.model['coeffs'] = OrderedDict([(var,1) for i,var in enumerate(variables)]) - #self.model['formula'] = '' - #self.model['coeffs_init']=p_guess - #self.model['bounds']=bounds_guess - raise NotImplementedError('To be implemented by child class') - - def model_function(self, x, p): - raise NotImplementedError('To be implemented by child class') - - def fit_data(self, x, y, p0=None, bounds=None): - # Cleaning data - x,y=self.clean_data(x,y) - - # --- setup model - # guess initial parameters, potential bounds, and set necessary data - self.setup_model() - - # --- Minimization - minimize_me = lambda x, *p : self.model_function(x, p) - if self.model['bounds'] is None: - pfit, pcov = so.curve_fit(minimize_me, x, y, p0=self.model['coeffs_init']) - else: - pfit, pcov = so.curve_fit(minimize_me, x, y, p0=self.model['coeffs_init'], bounds=self.model['bounds']) - # --- Reporting information about the fit (after the fit) - # And Return a fitted function - y_fit = self.model_function(x, pfit) - self.model['fitted_function']=lambda xx : self.model_function(xx, pfit) - self.store_fit_info(y_fit, pfit) - - def plot_guess(self, x=None, fig=None, ax=None): - """ plotthe guess values""" - if x is None: - x=self.data['x'] - import matplotlib.pyplot as plt - if fig is None: - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - - p_guess = self.model['coeffs_init'] - - ax.plot(self.data['x'], self.data['y'] , '.', label='Data') - ax.plot(x, self.model_function(x,p_guess), '-', label='Model at guessed parameters') - ax.legend() - - -# --------------------------------------------------------------------------------} -# --- Predefined fitters -# --------------------------------------------------------------------------------{ -class SecondOrderFitterImpulse(PredefinedModelFitter): - - def model_function(self, x, p): - return secondorder_impulse(x, p) - - def setup_model(self): - """ p = (A, omega0, zeta, B, t0) """ - self.model['coeffs'] = OrderedDict([('A',1),('omega',1),('zeta',0.01),('B',0),('t0',0)]) - self.model['formula'] = '{A}*exp(-{zeta}*{omega}*(x-{x0}))*sin({omega}*sqrt(1-{zeta}**2)))+{B}' - - # --- Guess Initial values - x, y = self.data['x'],self.data['y'] - # TODO use signal - dt = x[1]-x[0] - omega0 = main_frequency(x,y) - A = np.max(y) - np.min(y) - B = np.mean(y) - zeta = 0.1 - y_start = y[0]+0.01*A - bDeviate = np.argwhere(abs(y-y_start)>abs(y_start-y[0]))[0] - t0 = x[bDeviate[0]] - p_guess = np.array([A, omega0, zeta, B, t0]) - self.model['coeffs_init'] = p_guess - # --- Set Bounds - T = x[-1]-x[0] - dt = x[1]-x[0] - om_min = 2*np.pi/T/2 - om_max = 2*np.pi/dt/2 - b_A = (A*0.1,A*3) - b_om = (om_min,om_max) - b_zeta = (0,1) - b_B = (np.min(y),np.max(y)) - b_x0 = (np.min(x),np.max(x)) - self.model['bounds'] = ((b_A[0],b_om[0],b_zeta[0],b_B[0],b_x0[0]),(b_A[1],b_om[1],b_zeta[1],b_B[1],b_x0[1])) - #self.plot_guess(); import matplotlib.pyplot as plt; plt.show() - #self.print_guessbounds(); - -class SecondOrderFitterStep(PredefinedModelFitter): - - def model_function(self, x, p): - return secondorder_step(x, p) - - def setup_model(self): - """ p = (A, omega0, zeta, B, t0) """ - self.model['coeffs'] = OrderedDict([('A',1),('omega',1),('zeta',0.01),('B',0),('t0',0)]) - self.model['formula'] ='{A}*(1-exp(-{zeta}*{omega}*(x-{x0}))/sqrt(1-{zeta}**2) * cos({omega}*sqrt(1-{zeta}**2)-arctan({zeta}/sqrt(1-{zeta}**2)))) +{B}' - # --- Guess Initial values - x, y = self.data['x'],self.data['y'] - # TODO use signal - omega0 = main_frequency(x,y) - A = np.max(y) - np.min(y) - B = y[0] - zeta = 0.1 - y_start = y[0]+0.01*A - bDeviate = np.argwhere(abs(y-y_start)>abs(y_start-y[0]))[0] - t0 = x[bDeviate[0]] - p_guess = np.array([A, omega0, zeta, B, t0]) - self.model['coeffs_init'] = p_guess - # --- Set Bounds - T = x[-1]-x[0] - dt = x[1]-x[0] - om_min = 2*np.pi/T/2 - om_max = 2*np.pi/dt/2 - b_A = (A*0.1,A*3) - b_om = (om_min,om_max) - b_zeta = (0,1) - b_B = (np.min(y),np.max(y)) - b_x0 = (np.min(x),np.max(x)) - self.model['bounds'] = ((b_A[0],b_om[0],b_zeta[0],b_B[0],b_x0[0]),(b_A[1],b_om[1],b_zeta[1],b_B[1],b_x0[1])) - #self.plot_guess(); import matplotlib.pyplot as plt; plt.show() - #self.print_guessbounds(); - -# --------------------------------------------------------------------------------} -# --- Predefined fitter -# --------------------------------------------------------------------------------{ -class ContinuousPolynomialFitter(ModelFitter): - def __init__(self,order=None, x=None, y=None, p0=None, bounds=None): - ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) - self.setOrder(int(order)) - if order is not None and x is not None and y is not None: - self.fit_data(x,y,p0,bounds) - - def setOrder(self, order): - self.order=order - if order is not None: - variables= string.ascii_lowercase[:order+1] - self.model['coeffs'] = OrderedDict([(var,1) for i,var in enumerate(variables)]) - formula = ' + '.join(['{}*x**{}'.format('{'+var+'}',order-i) for i,var in enumerate(variables)]) - self.model['formula'] = _clean_formula(formula) - - def fit_data(self, x, y, p0=None, bounds=None): - if self.order is None: - raise Exception('Polynomial Fitter not set, call function `setOrder` to set order') - # Cleaning data - x,y=self.clean_data(x,y) - - nParams=self.order+1 - # Bounds - self.setup_bounds(bounds, nParams) # TODO - # Initial conditions - self.setup_guess(p0, bounds, nParams) # TODO - - # Fitting - pfit = np.polyfit(x,y,self.order) - - # --- Reporting information about the fit (after the fit) - y_fit = np.polyval(pfit,x) - self.store_fit_info(y_fit, pfit) - - # --- Return a fitted function - self.model['fitted_function']=lambda xx : np.polyval(pfit,xx) - - -class DiscretePolynomialFitter(ModelFitter): - def __init__(self,exponents=None, x=None, y=None, p0=None, bounds=None): - ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) - self.setExponents(exponents) - if exponents is not None and x is not None and y is not None: - self.fit_data(x,y,p0,bounds) - - def setExponents(self, exponents): - self.exponents=exponents - if exponents is not None: - #exponents=-np.sort(-np.asarray(exponents)) - self.exponents=exponents - variables= string.ascii_lowercase[:len(exponents)] - self.model['coeffs'] = OrderedDict([(var,1) for i,var in enumerate(variables)]) - formula = ' + '.join(['{}*x**{}'.format('{'+var+'}',e) for var,e in zip(variables,exponents)]) - self.model['formula'] = _clean_formula(formula) - - def fit_data(self, x, y, p0=None, bounds=None): - if self.exponents is None: - raise Exception('Polynomial Fitter not set, call function `setExponents` to set exponents') - # Cleaning data, and store it in object - x,y=self.clean_data(x,y) - - nParams=len(self.exponents) - # Bounds - self.setup_bounds(bounds, nParams) # TODO - # Initial conditions - self.setup_guess(p0, bounds, nParams) # TODO - - X_poly=np.array([]) - for i,e in enumerate(self.exponents): - if i==0: - X_poly = np.array([x**e]) - else: - X_poly = np.vstack((X_poly,x**e)) - try: - pfit = np.linalg.lstsq(X_poly.T, y, rcond=None)[0] - except: - pfit = np.linalg.lstsq(X_poly.T, y) - - # --- Reporting information about the fit (after the fit) - y_fit= np.dot(pfit, X_poly) - self.store_fit_info(y_fit, pfit) - - # --- Return a fitted function - def fitted_function(xx): - y=np.zeros(xx.shape) - for i,(e,c) in enumerate(zip(self.exponents,pfit)): - y += c*xx**e - return y - self.model['fitted_function']=fitted_function - - -class SinusoidFitter(ModelFitter): - def __init__(self, physical=False, x=None, y=None, p0=None, bounds=None): - ModelFitter.__init__(self, x=None, y=None, p0=p0, bounds=bounds) - #self.setOrder(int(order)) - self.physical=physical - if physical: - self.model['coeffs'] = OrderedDict([('A',1),('f',1),('phi',0),('B',0)]) - self.model['formula'] = '{A} * sin(2*pi*({f}*x + {phi}/360)) + {B}' - else: - self.model['coeffs'] = OrderedDict([('A',1),('omega',1),('phi',0),('B',0)]) - self.model['formula'] = '{A} * sin({omega}*x + {phi}) + {B}' - - if x is not None and y is not None: - self.fit_data(x,y,p0,bounds) - - def fit_data(self, x, y, p0=None, bounds=None): - # Cleaning data - x,y=self.clean_data(x,y) - - # TODO use signal - guess_freq= main_frequency(x,y)/(2*np.pi) # [Hz] - guess_amp = np.std(y) * 2.**0.5 - guess_offset = np.mean(y) - if self.physical: - guess = np.array([guess_amp, guess_freq, 0., guess_offset]) - minimize_me = lambda x, *p : sinusoid_f(x, p) - else: - guess = np.array([guess_amp, 2.*np.pi*guess_freq, 0., guess_offset]) - minimize_me = lambda x, *p : sinusoid(x, p) - self.model['coeffs_init'] = guess - - pfit, pcov = so.curve_fit(minimize_me, x, y, p0=guess) - - # --- Reporting information about the fit (after the fit) - # And Return a fitted function - if self.physical: - y_fit = sinusoid_f(x, pfit) - self.model['fitted_function']=lambda xx : sinusoid_f(xx, pfit) - else: - y_fit = sinusoid(x, pfit) - self.model['fitted_function']=lambda xx : sinusoid(xx, pfit) - self.store_fit_info(y_fit, pfit) - - - -class GeneratorTorqueFitter(ModelFitter): - def __init__(self,x=None, y=None, p0=None, bounds=None): - ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) - -# RtGnSp, RtTq , Rgn2K , SlPc , SpdGenOn = p -# {'label':'Generator Torque', 'handle': gentorque, 'id':'predef: gentorque', -# 'formula': '{RtGnSp} , {RtTq} , {Rgn2K} , {SlPc} , {SpdGenOn}', - self.model['coeffs']= extract_key_num('RtGnSp=100 , RtTq=1000 , Rgn2K=0.01 ,SlPc=5 , SpdGenOn=0') -# 'consts' :None, -# 'bounds' :'RtGnSp=(0.1,inf) , RtTq=(1,inf), Rgn2K=(0.0,0.1) ,SlPc=(0,20) , SpdGenOn=(0,inf)'} - if x is not None and y is not None: - self.fit_data(x,y,p0,bounds) - - def fit_data(self, x, y, p0=None, bounds=None): - #nParams=5 - ## Bounds - #self.setup_bounds(bounds,nParams) # TODO - ## Initial conditions - #self.setup_guess(p0,bounds,nParams) # TODO - - # Cleaning data, and store it in object - x,y=self.clean_data(x,y) - - I = np.argsort(x) - x=x[I] - y=y[I] - - # Estimating deltas - xMin, xMax=np.min(x),np.max(x) - yMin, yMax=np.min(y),np.max(y) - DeltaX = (xMax-xMin)*0.02 - DeltaY = (yMax-yMin)*0.02 - - # Binning data - x_bin=np.linspace(xMin,xMax,min(200,len(x))) - x_lin=x_bin[0:-1]+np.diff(x_bin) - #y_lin=np.interp(x_lin,x,y) # TODO replace by bining - y_lin = np.histogram(y, x_bin, weights=y)[0]/ np.histogram(y, x_bin)[0] - y_lin, _, _ = stats.binned_statistic(x, y, statistic='mean', bins=x_bin) - x_lin, _, _ = stats.binned_statistic(x, x, statistic='mean', bins=x_bin) - bNaN=~np.isnan(y_lin) - y_lin=y_lin[bNaN] - x_lin=x_lin[bNaN] - - # --- Find good guess of parameters based on data - # SpdGenOn - iOn = np.where(y>0)[0][0] - SpdGenOn_0 = x[iOn] - SpdGenOn_Bnds = (max(x[iOn]-DeltaX,xMin), min(x[iOn]+DeltaX,xMax)) - # Slpc - Slpc_0 = 5 - Slpc_Bnds = (0,10) - # RtTq - RtTq_0 = yMax - RtTq_Bnds = (yMax-DeltaY, yMax+DeltaY) - # RtGnSp - iCloseRt = np.where(y>yMax*0.50)[0][0] - RtGnSp_0 = x[iCloseRt] - RtGnSp_Bnds = ( RtGnSp_0 -DeltaX*2, RtGnSp_0+DeltaX*2) - # Rgn2K - #print('>>>',SpdGenOn_0, RtGnSp_0) - bR2=np.logical_and(x>SpdGenOn_0, x ['a','b'] - The variables are replaced with p[0],..,p[n] in order of appearance - """ - regex = r"\{(.*?)\}" - matches = re.finditer(regex, sFormula, re.DOTALL) - formula_eval=sFormula - variables=[] - ivar=0 - for i, match in enumerate(matches): - for groupNum in range(0, len(match.groups())): - var = match.group(1) - if var not in variables: - variables.append(var) - formula_eval = formula_eval.replace('{'+match.group(1)+'}','p[{:d}]'.format(ivar)) - ivar+=1 - return variables, formula_eval - - -def extract_key_tuples(text): - """ - all=(0.1,-2),b=(inf,0), c=(-inf,0.3e+10) - """ - if text is None: - return {} - regex = re.compile(r'(?P[\w\-]+)=\((?P[0-9+epinf.-]*?),(?P[0-9+epinf.-]*?)\)($|,)') - return {match.group("key"): (float(match.group("value1")),float(match.group("value2"))) for match in regex.finditer(text.replace(' ',''))} - -def extract_key_num(text): - """ - all=0.1, b=inf, c=-0.3e+10 - """ - if text is None: - return {} - regex = re.compile(r'(?P[\w\-]+)=(?P[0-9+epinf.-]*?)($|,)') - return OrderedDict([(match.group("key"), float(match.group("value"))) for match in regex.finditer(text.replace(' ',''))]) - -def extract_key_miscnum(text): - """ - all=0.1, b=(inf,0), c=[-inf,0.3e+10,10,11]) - """ - def isint(s): - try: - int(s) - return True - except: - return False - - if text is None: - return {} - sp=re.compile('([\w]+)=').split(text.replace(' ','')) - if len(sp)<3: - return {} - sp=sp[1:] - keys = sp[0::2] - values = sp[1::2] - d={} - for (k,v) in zip(keys,values): - if v.find('(')>=0: - v=v.replace('(','').replace(')','') - v=v.split(',') - vect=tuple([float(val) for val in v if len(val.strip())>0]) - elif v.find('[')>=0: - v=v.replace('[','').replace(']','') - v=v.split(',') - vect=[int(val) if isint(val) else float(val) for val in v if len(val.strip())>0] # NOTE returning lists - elif v.find('True')>=0: - v=v.replace(',','').strip() - vect=True - elif v.find('False')>=0: - v=v.replace(',','').strip() - vect=False - else: - v=v.replace(',','').strip() - vect=int(v) if isint(v) else float(v) - d[k]=vect - return d - -def set_common_keys(dict_target, dict_source): - """ Set a dictionary using another one, missing keys in source dictionary are reported""" - keys_missing=[] - for k in dict_target.keys(): - if k in dict_source.keys(): - dict_target[k]=dict_source[k] - else: - keys_missing.append(k) - return dict_target, keys_missing - -def _clean_formula(s, latex=False): - s = s.replace('+-','-').replace('**1','').replace('*x**0','') - s = s.replace('np.','') - if latex: - #s = s.replace('{','$').replace('}','$') - s = s.replace('phi',r'\phi') - s = s.replace('alpha',r'\alpha') - s = s.replace('beta' ,r'\alpha') - s = s.replace('zeta' ,r'\zeta') - s = s.replace('mu' ,r'\mu' ) - s = s.replace('pi' ,r'\pi' ) - s = s.replace('sigma',r'\sigma') - s = s.replace('omega',r'\omega') - s = s.replace('_ref',r'_{ref}') # make this general - s = s.replace(r'(',r'{(') - s = s.replace(r')',r')}') - s = s.replace(r'**',r'^') - s = s.replace(r'*', '') - s = s.replace('sin',r'\sin') - s = s.replace('exp',r'\exp') - s = s.replace('sqrt',r'\sqrt') - s = r'$'+s+r'$' - else: - s = s.replace('{','').replace('}','') - return s - - -def main_frequency(t,y): - """ - Returns main frequency of a signal - NOTE: this tool below to welib.tools.signal_analysis, but put here for convenience - """ - dt = t[1]-t[0] # assume uniform spacing of time and frequency - om = np.fft.fftfreq(len(t), (dt))*2*np.pi - Fyy = abs(np.fft.fft(y)) - omega = abs(om[np.argmax(Fyy[1:])+1]) # exclude the zero frequency (mean) - return omega - -def rsquare(y, f): - """ Compute coefficient of determination of data fit model and RMSE - [r2] = rsquare(y,f) - RSQUARE computes the coefficient of determination (R-square) value from - actual data Y and model data F. - INPUTS - y : Actual data - f : Model fit - OUTPUT - R2 : Coefficient of determination - """ - # Compare inputs - if not np.all(y.shape == f.shape) : - raise Exception('Y and F must be the same size') - # Check for NaN - tmp = np.logical_not(np.logical_or(np.isnan(y),np.isnan(f))) - y = y[tmp] - f = f[tmp] - R2 = max(0,1-np.sum((y-f)**2)/np.sum((y-np.mean(y))** 2)) - return R2 - -def pretty_param(s): - if s in ['alpha','beta','delta','gamma','epsilon','zeta','lambda','mu','nu','pi','rho','sigma','phi','psi','omega']: - s = r'\{}'.format(s) - s = s.replace('_ref',r'_{ref}') # make this general.. - return s - -def pretty_num(x): - if abs(x)<1000 and abs(x)>1e-4: - return "{:9.4f}".format(x) - else: - return '{:.3e}'.format(x) - -def pretty_num_short(x,digits=3): - if digits==4: - if abs(x)<1000 and abs(x)>1e-1: - return "{:.4f}".format(x) - else: - return "{:.4e}".format(x) - elif digits==3: - if abs(x)<1000 and abs(x)>1e-1: - return "{:.3f}".format(x) - else: - return "{:.3e}".format(x) - elif digits==2: - if abs(x)<1000 and abs(x)>1e-1: - return "{:.2f}".format(x) - else: - return "{:.2e}".format(x) - - -if __name__ == '__main__': - # --- Writing example models to file for pyDatView tests - a,b,c = 2.0, 3.0, 4.0 - u_ref,z_ref,alpha=10,12,0.12 - mu,sigma=0.5,1.2 - x = np.linspace(0.1,30,20) - A,k,B=0.5,1.2,10 - y_exp=expdecay(x,(A,k,B)) - A, k = 10, 2.3, - y_weib=weibull_pdf(x,(A,k)) - y_log=logarithmic(x,(a,b)) - exponents=[0,3,5] - y_poly = a + b*x**3 + c*x**5 - y_power=powerlaw_all(x,(alpha,u_ref,z_ref)) - y_gauss=gaussian(x,(mu,sigma)) - A= 101; B= -200.5; omega = 0.4; phi = np.pi/3 - y_sin=sinusoid(x,(A,omega,phi,B)) + np.random.normal(0, 0.1, len(x)) - M=np.column_stack((x,y_poly,y_power,y_gauss,y_gauss+10,y_weib,y_exp,y_log,y_sin)) - np.savetxt('../TestFit.csv',M,header='x,poly,power,gauss,gauss_off,weib,expdecay,log,sin',delimiter=',') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py deleted file mode 100644 index 4f751b0346..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py +++ /dev/null @@ -1,373 +0,0 @@ -""" -Context: - -Logarithmic decrement: - - delta = 1/N log [ x(t) / x(t+N T_d)] = 2 pi zeta / sqrt(1-zeta^2) - -Damping ratio: - - zeta = delta / sqrt( 4 pi^2 + delta^2 ) - -Damped period, frequency: - - Td = 2pi / omega_d - - omegad = omega_0 sqrt(1-zeta**2) - -Damping exponent: - - - alpha = zeta omega_0 = delta/ T_d - - -""" - -import numpy as np - -__all__ = ['freqDampEstimator'] -__all__ += ['freqDampFromPeaks'] -__all__ += ['zetaEnvelop'] -__all__ += ['TestDamping'] - -def indexes(y, thres=0.3, min_dist=1, thres_abs=False): - """Peak detection routine. - - Finds the numeric index of the peaks in *y* by taking its first order difference. By using - *thres* and *min_dist* parameters, it is possible to reduce the number of - detected peaks. *y* must be signed. - - Parameters - ---------- - y : ndarray (signed) - 1D amplitude data to search for peaks. - thres : float, defining threshold. Only the peaks with amplitude higher than the - threshold will be detected. - if thres_abs is False: between [0., 1.], normalized threshold. - min_dist : int - Minimum distance between each detected peak. The peak with the highest - amplitude is preferred to satisfy this constraint. - thres_abs: boolean - If True, the thres value will be interpreted as an absolute value, instead of - a normalized threshold. - - Returns - ------- - ndarray - Array containing the numeric indexes of the peaks that were detected - """ - if isinstance(y, np.ndarray) and np.issubdtype(y.dtype, np.unsignedinteger): - raise ValueError("y must be signed") - - if not thres_abs: - thres = thres * (np.max(y) - np.min(y)) + np.min(y) - - min_dist = int(min_dist) - - # compute first order difference - dy = np.diff(y) - - # propagate left and right values successively to fill all plateau pixels (0-value) - zeros,=np.where(dy == 0) - - # check if the signal is totally flat - if len(zeros) == len(y) - 1: - return np.array([]) - - if len(zeros): - # compute first order difference of zero indexes - zeros_diff = np.diff(zeros) - # check when zeros are not chained together - zeros_diff_not_one, = np.add(np.where(zeros_diff != 1), 1) - # make an array of the chained zero indexes - zero_plateaus = np.split(zeros, zeros_diff_not_one) - - # fix if leftmost value in dy is zero - if zero_plateaus[0][0] == 0: - dy[zero_plateaus[0]] = dy[zero_plateaus[0][-1] + 1] - zero_plateaus.pop(0) - - # fix if rightmost value of dy is zero - if len(zero_plateaus) and zero_plateaus[-1][-1] == len(dy) - 1: - dy[zero_plateaus[-1]] = dy[zero_plateaus[-1][0] - 1] - zero_plateaus.pop(-1) - - # for each chain of zero indexes - for plateau in zero_plateaus: - median = np.median(plateau) - # set leftmost values to leftmost non zero values - dy[plateau[plateau < median]] = dy[plateau[0] - 1] - # set rightmost and middle values to rightmost non zero values - dy[plateau[plateau >= median]] = dy[plateau[-1] + 1] - - # find the peaks by using the first order difference - peaks = np.where((np.hstack([dy, 0.]) < 0.) - & (np.hstack([0., dy]) > 0.) - & (np.greater(y, thres)))[0] - - # handle multiple peaks, respecting the minimum distance - if peaks.size > 1 and min_dist > 1: - highest = peaks[np.argsort(y[peaks])][::-1] - rem = np.ones(y.size, dtype=bool) - rem[peaks] = False - - for peak in highest: - if not rem[peak]: - sl = slice(max(0, peak - min_dist), peak + min_dist + 1) - rem[sl] = True - rem[peak] = False - - peaks = np.arange(y.size)[~rem] - - return peaks - - -#indexes =indexes(x, thres=0.02/max(x), min_dist=1, thres_abs=true) -def logDecFromThreshold(x, threshold=None, bothSides=False, decay=True): - """ Detect maxima in a signal, computes the log deg based on it - """ - if bothSides: - ldPos,iTPos,stdPos,IPos,vldPos = logDecFromThreshold( x, threshold=threshold, decay=decay) - ldNeg,iTNeg,stdNeg,INeg,vldNeg = logDecFromThreshold(-x, threshold=threshold, decay=decay) - return (ldPos+ldNeg)/2, (iTPos+iTNeg)/2, (stdPos+stdNeg)/2, (IPos,INeg), (vldPos, vldNeg) - - if threshold is None: - threshold = np.mean(abs(x-np.mean(x)))/3; - I =indexes(x, thres=threshold, min_dist=1, thres_abs=True) - # Estimating "index" period - iT = round(np.median(np.diff(I))); - vn=np.arange(0,len(I)-1)+1 - # Quick And Dirty Way using one as ref and assuming all periods were found - if decay: - # For a decay we take the first peak as a reference - vLogDec = 1/vn*np.log( x[I[0]]/x[I[1:]] ) # Logarithmic decrement - else: - # For negative damping we take the last peak as a reference - vLogDec = 1/vn*np.log( x[I[-2::-1]]/x[I[-1]] ) # Logarithmic decrement - logdec = np.mean(vLogDec); - std_logdec = np.std(vLogDec) ; - return logdec, iT, std_logdec, I, vLogDec - -def logDecTwoTimes(x, t, i1, i2, Td): - t1, t2 = t[i1], t[i2] - x1, x2 = x[i1], x[i2] - N = (t2-t1)/Td - logdec = 1/N * np.log(x1/x2) - return logdec - -def zetaTwoTimes(x, t, i1, i2, Td): - logdec = logDecTwoTimes(x, t, i1, i2, Td) - zeta = logdec/np.sqrt(4*np.pi**2 + logdec**2) # damping ratio - return zeta - -def zetaRange(x, t, IPos, INeg, Td, decay): - """ - Compute naive zeta based on different peak values (first, mid, last) - """ - def naivezeta(i1, i2): - zetaP = zetaTwoTimes( x, t, IPos[i1], IPos[i2], Td) - zetaN = zetaTwoTimes( -x, t, INeg[i1], INeg[i2], Td) - return [zetaP, zetaN] - zetas = [] - # --- Computing naive log dec from first and last peaks - zetas += naivezeta(0, -1) - # --- Computing naive log dec from one peak and the middle one - if len(IPos)>3 and len(INeg)>3: - if decay: - i1, i2 = 0, int(len(IPos)/2) - else: - i1, i2 = -int(len(IPos)/2), -1 - zetas += naivezeta(i1, i2) - zetaSup = np.max(zetas) - zetaInf = np.min(zetas) - zetaMean = np.mean(zetas) - return zetaSup, zetaInf, zetaMean - -def zetaEnvelop(x, t, omega0, zeta, iRef, moff=0): - """ NOTE: x is assumed to be centered on 0""" - m = np.mean(x) - tref = t[iRef] - Aref = x[iRef]-m - epos = Aref*np.exp(-zeta*omega0*(t-tref))+m+moff - eneg = -Aref*np.exp(-zeta*omega0*(t-tref))+m+moff - return epos, eneg - - -def freqDampFromPeaks(x, t, threshold=None, plot=False, refPoint='mid'): - """ - Use Upper and lower peaks to compute log decrements between neighboring peaks - Previously called logDecFromDecay. - """ - info = {} - x = np.array(x).copy() - m = np.mean(x) - x = x-m # we remove the mean once and for all - if threshold is None: - threshold = np.mean(abs(x))/3 - - dt = t[1]-t[0] # todo signal with dt not uniform - - # Is it a decay or an exloding signal - xstart, xend = np.array_split(np.abs(x),2) - decay= np.mean(xstart)> np.mean(xend) - - # --- Computing log decs from positive and negative side and taking the mean - logdec,iT,std,(IPos,INeg), (vLogDecPos, vLogDecNeg) = logDecFromThreshold( x, threshold=threshold, bothSides=True, decay=decay) - - # --- Finding damped period - Td = iT*dt # Period of damped oscillations. Badly estimated due to dt resolution - # % Better estimate of period - # [T,~,iCross]=fGetPeriodFromZeroCrossing(x(1:IPos(end)),dt); - fd = 1/Td - - # --- Naive ranges - zetaMax, zetaMin, zetaMean = zetaRange(x, t, IPos, INeg, Td, decay) - - zeta = logdec/np.sqrt(4*np.pi**2 + logdec**2 ) # Damping Ratio - fn = fd/np.sqrt(1-zeta**2) - T0 = 1/fn - omega0=2*np.pi*fn - # --- Model - # Estimating signal params - alpha = logdec/Td - omega = 2*np.pi*fd - # Find amplitude at a reference peak - # (we chose the middle peak of the time series to minimize period drift before and after) - # We will adjust for phase and time offset later - i1 = IPos[int(len(IPos)/2)] - A1 = x[i1] - t1 = dt*i1 - # --- Find a zero up-crossing around our value of reference for phase determination - XX=x[i1:] - ineg = i1+np.where(XX<0)[0][0] - ipos = ineg-1 - xcross = [x[ipos],x[ineg]] - icross = [ipos,ineg] - i0 = np.interp(0,xcross,icross) # precise 0-up-crossing - t0 = dt*i0 - phi0 = np.mod(2*np.pi- omega*t0+np.pi/2,2*np.pi); - # --- Model - A = A1/(np.exp(-alpha*t1)*np.cos(omega*t1+phi0)); # Adjust for phase and time offset - x_model = A*np.exp(-alpha*t)*np.cos(omega*t+phi0)+m; - epos = A*np.exp(-alpha*t)+m - eneg = -A*np.exp(-alpha*t)+m - - if plot: - if refPoint=='mid': - iRef = i1 - elif refPoint=='start': - iRef = IPos[0] - else: - iRef = IPos[-1] - import matplotlib.pyplot as plt - print('LogDec.: {:.4f} - Damping ratio: {:.4f} - F_n: {:.4f} - F_d: {:.4f} - T_d:{:.3f} - T_n:{:.3f}'.format(logdec, zeta, fn, fd, Td,T0)) - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - ax.plot(t, x+m) - ax.plot(t[IPos],x[IPos]+m,'o') - ax.plot(t[INeg],x[INeg]+m,'o') - epos, eneg = zetaEnvelop(x, t, omega0, zeta, iRef=iRef, moff=m) - ax.plot(t ,epos, 'k--', label=r'$\zeta={:.4f}$'.format(zeta)) - ax.plot(t ,eneg, 'k--') - epos, eneg = zetaEnvelop(x, t, omega0, zetaMax, iRef=iRef, moff=m) - ax.plot(t ,epos, 'b:', label=r'$\zeta={:.4f}$'.format(zetaMax)) - ax.plot(t ,eneg, 'b:') - epos, eneg = zetaEnvelop(x, t, omega0, zetaMin, iRef=iRef, moff=m) - ax.plot(t ,epos, 'r:', label=r'$\zeta={:.4f}$'.format(zetaMin)) - ax.plot(t ,eneg, 'r:') - #ax.plot(t ,x_model,'k:') - #ax.legend() - dx = np.max(abs(x-m)) - ax.set_ylim([m-dx*1.1 , m+dx*1.1]) - - # We return a dictionary - info['zeta'] = zeta - info['fd'] = fd - info['Td'] = Td - info['fn'] = fn - info['omega0'] = omega0 - info['IPos'] = IPos - info['INeg'] = INeg - # TODO - info['x_model'] = x_model - info['epos'] = epos - info['eneg'] = eneg - # - info['zeta'] = zeta - info['zetaMin'] = zetaMin - info['zetaMax'] = zetaMax - info['zetaMean'] = zetaMean - - return fn, zeta, info - - -def freqDampEstimator(x, t, opts): - """ - Estimate natural frequency and damping ratio. - Wrapper function to use different methods. - - """ - if opts['method']=='fromPeaks': - fn, zeta, info = freqDampFromPeaks(x, t) - else: - raise NotImplementedError() - return fn, zeta, info - - - -# --------------------------------------------------------------------------------} -# --- Unittests -# --------------------------------------------------------------------------------{ -import unittest - -class TestDamping(unittest.TestCase): - - def test_logdec_from_peaks(self): - plot = (__name__ == '__main__') - - for zeta in [0.1, -0.01]: - T0 = 10 - Td = T0 / np.sqrt(1-zeta**2) - delta = 2*np.pi*zeta/np.sqrt(1-zeta**2) # logdec - alpha = delta/Td - t = np.linspace(0,30*Td,2000) - x = np.cos(2*np.pi/Td*t)*np.exp(-alpha*t)+10; - fn, zeta_out, info = freqDampFromPeaks(x, t, plot=plot) - self.assertAlmostEqual(zeta , zeta_out,4) - self.assertAlmostEqual(1/T0 , fn ,2) - - if __name__ == '__main__': - import matplotlib.pyplot as plt - plt.show() - -if __name__ == '__main__': - unittest.main() -# import matplotlib.pyplot as plt -# import pydatview.io as weio -# df= weio.read('DampingExplodingExample2.csv').toDataFrame() -# M = df.values -# x= M[:,1] -# t= M[:,0] -# #for zeta in [-0.01, 0.1]: -# # T0 = 30 -# # Td = T0 / np.sqrt(1-zeta**2) -# # delta = 2*np.pi*zeta/np.sqrt(1-zeta**2) # logdec -# # alpha = delta/Td -# # x = np.cos(2*np.pi/Td*t)*np.exp(-alpha*t)+10; -# # df.insert(1,'PureDecay{}'.format(zeta), x) -# -# #df.to_csv('DECAY_Example.csv',index=False, sep=',') -# -# # Td = 10 -# # zeta = -0.01 # damping ratio (<1) -# # delta = 2*np.pi*zeta/np.sqrt(1-zeta**2) # logdec -# # alpha = delta/Td -# # t = np.linspace(0,30*Td,1000) -# # x = np.cos(2*np.pi/Td*t)*np.exp(-alpha*t)+10; -# # -# # fn, zeta, info = freqDampFromPeaks(x, t, plot=True, refPoint='mid') -# plt.show() - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py deleted file mode 100644 index a135ecd733..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py +++ /dev/null @@ -1,332 +0,0 @@ -""" -Eigenvalue analyses (EVA) tools for: - - arbitrary systems: system matrix (A) - - and mechnical systems: mass (M), stiffness (K) and damping (C) matrices - -Some definitions: - - - zeta: damping ratio - - - delta/log_dec: logarithmic decrement - - - xi: approximation of logarithmic decrement: xi = 2 pi zeta - - - omega0 : natural frequency - - - omega_d : damped frequency omega_d = omega_0 sqrt(1-zeta^2) - - -""" -import pandas as pd -import numpy as np -from scipy import linalg - -def polyeig(*A, sort=False, normQ=None): - """ - Solve the polynomial eigenvalue problem: - (A0 + e A1 +...+ e**p Ap)x = 0 - - Return the eigenvectors [x_i] and eigenvalues [e_i] that are solutions. - - Usage: - X,e = polyeig(A0,A1,..,Ap) - - Most common usage, to solve a second order system: (K + C e + M e**2) x =0 - X,e = polyeig(K,C,M) - - """ - if len(A)<=0: - raise Exception('Provide at least one matrix') - for Ai in A: - if Ai.shape[0] != Ai.shape[1]: - raise Exception('Matrices must be square') - if Ai.shape != A[0].shape: - raise Exception('All matrices must have the same shapes'); - - n = A[0].shape[0] - l = len(A)-1 - # Assemble matrices for generalized problem - C = np.block([ - [np.zeros((n*(l-1),n)), np.eye(n*(l-1))], - [-np.column_stack( A[0:-1])] - ]) - D = np.block([ - [np.eye(n*(l-1)), np.zeros((n*(l-1), n))], - [np.zeros((n, n*(l-1))), A[-1] ] - ]); - # Solve generalized eigenvalue problem - e, X = linalg.eig(C, D); - if np.all(np.isreal(e)): - e=np.real(e) - X=X[:n,:] - - # Sort eigen values - if sort: - I = np.argsort(e) - X = X[:,I] - e = e[I] - - # Scaling each mode by max - if normQ=='byMax': - X /= np.tile(np.max(np.abs(X),axis=0), (n,1)) - - return X, e - - -def eig(K, M=None, freq_out=False, sort=True, normQ=None, discardIm=False, massScaling=True): - """ performs eigenvalue analysis and return same values as matlab - - returns: - Q : matrix of column eigenvectors - Lambda: matrix where diagonal values are eigenvalues - frequency = np.sqrt(np.diag(Lambda))/(2*np.pi) - or - frequencies (if freq_out is True) - """ - if M is not None: - D,Q = linalg.eig(K,M) - # --- rescaling using mass matrix to be consistent with Matlab - # TODO, this can be made smarter - # TODO this should be a normQ - if massScaling: - for j in range(M.shape[1]): - q_j = Q[:,j] - modalmass_j = np.dot(q_j.T,M).dot(q_j) - Q[:,j]= Q[:,j]/np.sqrt(modalmass_j) - Lambda=np.dot(Q.T,K).dot(Q) - else: - D,Q = linalg.eig(K) - Lambda = np.diag(D) - - # --- Sort - lambdaDiag=np.diag(Lambda) - if sort: - I = np.argsort(lambdaDiag) - Q = Q[:,I] - lambdaDiag = lambdaDiag[I] - if freq_out: - Lambda = np.sqrt(lambdaDiag)/(2*np.pi) # frequencies [Hz] - else: - Lambda = np.diag(lambdaDiag) # enforcing purely diagonal - - # --- Renormalize modes if users wants to - if normQ == 'byMax': - for j in range(Q.shape[1]): - q_j = Q[:,j] - iMax = np.argmax(np.abs(q_j)) - scale = q_j[iMax] # not using abs to normalize to "1" and not "+/-1" - Q[:,j]= Q[:,j]/scale - - # --- Sanitization, ensure real values - if discardIm: - Q_im = np.imag(Q) - Q = np.real(Q) - imm = np.mean(np.abs(Q_im),axis = 0) - bb = imm>0 - if sum(bb)>0: - W=list(np.where(bb)[0]) - print('[WARN] Found {:d} complex eigenvectors at positions {}/{}'.format(sum(bb),W,Q.shape[0])) - Lambda = np.real(Lambda) - - - - return Q,Lambda - - -def eigA(A, nq=None, nq1=None, fullEV=False, normQ=None, sort=True): - """ - Perform eigenvalue analysis on a "state" matrix A - where states are assumed to be ordered as {q, q_dot, q1} - This order is only relevant for returning the eigenvectors. - - INPUTS: - - A : square state matrix - - nq: number of second order states, optional, relevant if fullEV is False - - nq1: number of first order states, optional, relevant if fullEV is False - - fullEV: if True, the entire eigenvectors are returned, otherwise, - only the part associated with q and q1 are returned - - normQ: 'byMax': normalize by maximum - None: do not normalize - OUPUTS: - - freq_d: damped frequencies [Hz] - - zeta : damping ratios [-] - - Q : column eigenvectors - - freq_0: natural frequencies [Hz] - """ - n,m = A.shape - - if m!=n: - raise Exception('Matrix needs to be squared') - if nq is None: - if nq1 is None: - nq1=0 - nq = int((n-nq1)/2) - else: - nq1 = n-2*nq - if n!=2*nq+nq1 or nq1<0: - raise Exception('Number of 1st and second order dofs should match the matrix shape (n= 2*nq + nq1') - Q, Lambda = eig(A, sort=False) - v = np.diag(Lambda) - - if not fullEV: - Q=np.delete(Q, slice(nq,2*nq), axis=0) - - # Selecting eigenvalues with positive imaginary part (frequency) - Ipos = np.imag(v)>0 - Q = Q[:,Ipos] - v = v[Ipos] - - # Frequencies and damping based on compled eigenvalues - omega_0 = np.abs(v) # natural cylic frequency [rad/s] - freq_d = np.imag(v)/(2*np.pi) # damped frequency [Hz] - zeta = - np.real(v)/omega_0 # damping ratio - freq_0 = omega_0/(2*np.pi) # natural frequency [Hz] - - # Sorting - if sort: - I = np.argsort(freq_0) - freq_d = freq_d[I] - freq_0 = freq_0[I] - zeta = zeta[I] - Q = Q[:,I] - - # Normalize Q - if normQ=='byMax': - for j in range(Q.shape[1]): - q_j = Q[:,j] - scale = np.max(np.abs(q_j)) - Q[:,j]= Q[:,j]/scale - return freq_d, zeta, Q, freq_0 - - - -def eigMK(M, K, sort=True, normQ=None, discardIm=False, freq_out=True, massScaling=True): - """ - Eigenvalue analysis of a mechanical system - M, K: mass, and stiffness matrices respectively - - Should be equivalent to calling eig(K, M) in Matlab (NOTE: argument swap) - except that frequencies are returned instead of "Lambda" - - OUTPUTS: - Q, freq_0 if freq_out - Q, Lambda otherwise - """ - return eig(K, M, sort=sort, normQ=normQ, discardIm=discardIm, freq_out=freq_out, massScaling=massScaling) - - -def eigMCK(M, C, K, method='full_matrix', sort=True, normQ=None): - """ - Eigenvalue analysis of a mechanical system - M, C, K: mass, damping, and stiffness matrices respectively - - NOTE: full_matrix, state_space and state_space_gen should return the same - when damping is present - """ - if np.linalg.norm(C)<1e-14: - if method.lower() not in ['state_space', 'state_space_gen']: - # No damping - Q, freq_0 = eigMK(M, K, sort=sort, freq_out=True, normQ=normQ) - freq_d = freq_0 - zeta = freq_0*0 - return freq_d, zeta, Q, freq_0 - - - n = M.shape[0] # Number of DOFs - - if method.lower()=='diag_beta': - ## using K, M and damping assuming diagonal beta matrix (Rayleigh Damping) - Q, Lambda = eig(K,M, sort=False) # provide scaled EV, important, no sorting here! - freq_0 = np.sqrt(np.diag(Lambda))/(2*np.pi) - betaMat = np.dot(Q,C).dot(Q.T) - xi = (np.diag(betaMat)*np.pi/(2*np.pi*freq_0)) - xi[xi>2*np.pi] = np.NAN - zeta = xi/(2*np.pi) - freq_d = freq_0*np.sqrt(1-zeta**2) - elif method.lower()=='full_matrix': - ## Method 2 - Damping based on K, M and full D matrix - Q,v = polyeig(K,C,M, sort=sort, normQ=normQ) - #omega0 = np.abs(e) - zeta = - np.real(v) / np.abs(v) - freq_d = np.imag(v) / (2*np.pi) - # Keeping only positive frequencies - bValid = freq_d > 1e-08 - freq_d = freq_d[bValid] - zeta = zeta[bValid] - Q = Q[:,bValid] - # logdec2 = 2*pi*dampratio_sorted./sqrt(1-dampratio_sorted.^2); - - elif method.lower()=='state_space': - # See welib.system.statespace.StateMatrix - Minv = np.linalg.inv(M) - I = np.eye(n) - Z = np.zeros((n, n)) - A = np.block([[np.zeros((n, n)), np.eye(n)], - [ -Minv@K , -Minv@C ]]) - return eigA(A, normQ=normQ, sort=sort) - - elif method.lower()=='state_space_gen': - I = np.eye(n) - Z = np.zeros((n, n)) - A = np.block([[Z, I], - [-K, -C]]) - B = np.block([[I, Z], - [Z, M]]) - # solve the generalized eigenvalue problem - D, Q = linalg.eig(A, B) - # Keeping every other states (assuming pairs..) - v = D[::2] - Q = Q[:n, ::2] - - # calculate natural frequencies and damping - omega_0 = np.abs(v) # natural cyclic frequency [rad/s] - freq_d = np.imag(v)/(2*np.pi) # damped frequency [Hz] - zeta = - np.real(v)/omega_0 # damping ratio - - else: - raise NotImplementedError() - - # Sorting - if sort: - I = np.argsort(freq_d) - freq_d = freq_d[I] - zeta = zeta[I] - Q = Q[:,I] - # Undamped frequency - freq_0 = freq_d / np.sqrt(1 - zeta**2) - #xi = 2 * np.pi * zeta # pseudo log-dec - return freq_d, zeta, Q, freq_0 - - -if __name__=='__main__': - np.set_printoptions(linewidth=300, precision=4) - nDOF = 2 - M = np.zeros((nDOF,nDOF)) - K = np.zeros((nDOF,nDOF)) - C = np.zeros((nDOF,nDOF)) - M[0,0] = 430000; - M[1,1] = 42000000; - C[0,0] = 7255; - C[1,1] = M[1,1]*0.001; - K[0,0] = 2700000.; - K[1,1] = 200000000.; - - freq_d, zeta, Q, freq, xi = eigMCK(M,C,K) - print(freq_d) - print(Q) - - - #M = diag([3,0,0,0], [0, 1,0,0], [0,0,3,0],[0,0,0, 1]) - M = np.diag([3,1,3,1]) - C = np.array([[0.4 , 0 , -0.3 , 0] , [0 , 0 , 0 , 0] , [-0.3 , 0 , 0.5 , -0.2 ] , [ 0 , 0 , -0.2 , 0.2]]) - K = np.array([[-7 , 2 , 4 , 0] , [2 , -4 , 2 , 0] , [4 , 2 , -9 , 3 ] , [ 0 , 0 , 3 , -3]]) - - X,e = polyeig(K,C,M) - print('X:\n',X) - print('e:\n',e) - # Test taht first eigenvector and valur satisfy eigenvalue problem: - s = e[0]; - x = X[:,0]; - res = (M*s**2 + C*s + K).dot(x) # residuals - assert(np.all(np.abs(res)<1e-12)) - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py deleted file mode 100644 index e88936d26d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py +++ /dev/null @@ -1,1221 +0,0 @@ -""" -Tools for fatigue analysis - - -Main functions: -- equivalent_load: calculate damage equivalent load for a given signal -- find_range_count: returns range and number of cycles for a given signal - -Subfunctions: -- eq_load: calculate equivalent loads using one of the two rain flow counting methods -- cycle_matrix: calculates a matrix of cycles (binned on amplitude and mean value) -- eq_load_and_cycles: calculate eq_loads of multiple time series (e.g. life time equivalent load) - - -Main aglorithms for rain flow counting: -- rainflow_windap: taken from [2], based on [3] -- rainflow_astm: taken from [2], based [4] -- fatpack: using [5] - - -References: - [1] Hayman (2012) MLife theory manual for Version 1.00 - [2] Wind energy toolbox, wetb.fatigue_tools, DTU wind energy, Denmark - [3] "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A - [4] Adam Nieslony - Rainflow Counting Algorithm, MATLAB Central File Exchange - http://www.mathworks.com/matlabcentral/fileexchange/3026) - [5] Fatpack - Python package - https://github.com/Gunnstein/fatpack - - -""" -import warnings -import numpy as np - - -__all__ = ['equivalent_load', 'find_range_count'] -__all__ += ['rainflow_astm', 'rainflow_windap','eq_load','eq_load_and_cycles','cycle_matrix','cycle_matrix2'] - - -class SignalConstantError(Exception): - pass - - -def equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap', - meanBin=True, binStartAt0=False, - outputMore=False, debug=False): - """Equivalent load calculation - - Calculate the damage equivalent load for a given signal and a given Wohler exponent - - INPUTS - - time : array-like, the time values corresponding to the signal (s) - - signals : array-like, the load signal - - m : Wohler exponent (default is 3) - - Teq : The equivalent period (Default 1, for 1Hz) - - bins : Number of bins in rainflow count histogram - - method: rain flow counting algorithm: 'rainflow_windap', 'rainflow_astm' or 'fatpack' - - meanBin: if True, use the mean of the ranges within a bin (recommended) - otherwise use the middle of the bin (not recommended). - - binStartAt0: if True bins start at zero. Otherwise, start a lowest range - - outputMore: if True, returns range, cycles and bins as well - - OUTPUTS - - Leq : the equivalent load for given m and Teq - - or (if outputMore is True ) - - - Leq, S, N, bins, DELi: - - S: ranges - - N: cycles - - bins: bin edges - - DELi: component 'i' of the DEL (for cycle i) - """ - time = np.asarray(time) - signal = np.asarray(signal) - - # Remove nan, might not be the cleanest - b = ~np.isnan(signal) - signal = signal[b] - time = time[b] - - try: - if len(time)<=1: - raise Exception() - if type(time[0]) is np.datetime64: - T = T/np.timedelta64(1,'s') # or T.item().total_seconds() - else: - T = time[-1]-time[0] # time length of signal (s). Will fail for signal of length 1 - if T==0: - raise Exception() - - neq = T/Teq # number of equivalent periods, see Eq. (26) of [1] - - # --- Range (S) and counts (N) - N, S, bins = find_range_count(signal, bins=bins, method=method, meanBin=meanBin, binStartAt0=binStartAt0) - - # --- get DEL - DELi = S**m * N / neq - Leq = DELi.sum() ** (1/m) # See e.g. eq. (30) of [1] - - except: - if outputMore: - return np.nan, np.nan, np.nan, np.nan, np.nan - else: - return np.nan - - if debug: - for i,(b,n,s,DEL) in enumerate(zip(bins, N, S, DELi)): - if n>0: - print('Bin {:3d}: [{:6.1f}-{:6.1f}] Mid:{:6.1f} - Mean:{:6.1f} Counts:{:4.1f} DEL:{:8.1f} Fraction:{:3.0f}%'.format(i,b,bins[i+1],(b+bins[i+1])/2,s,n,DEL,DEL/Leq**m*100)) - if outputMore: - return Leq, S, N, bins, DELi - else: - return Leq - - -def find_range_count(signal, bins, method='rainflow_windap', meanBin=True, binStartAt0=True): - """ - Returns number of cycles `N` for each range range `S` - Equidistant bins are setup based on the min/max of the signal. - INPUTS: - - signal: array - - bins : 1d-array, int - If bins is a sequence, left edges (and the rightmost edge) of the bins. - If bins is an int, a sequence is created dividing the range `min`--`max` of signal into `bins` number of equally sized bins. - OUTPUTS: - - N: number of cycles for each bin - - S: Ranges for each bin - S is either the center of the bin (meanBin=False) - or - S is the mean of the ranges within this bin (meanBin=True) - - S_bin_edges: edges of the bins - """ - - if method in rainflow_func_dict.keys(): - rainflow_func = rainflow_func_dict[method] - try: - N, S, S_bin_edges, _, _ = cycle_matrix(signal, ampl_bins=bins, mean_bins=1, rainflow_func=rainflow_func, binStartAt0=binStartAt0) - except SignalConstantError: - return np.nan, np.nan, np.nan - - S_bin_edges = S_bin_edges.flatten() - N = N.flatten() - S = S.flatten() - S_mid = (S_bin_edges[:-1] + S_bin_edges[1:]) / 2 - if not meanBin: - S=S_mid - - elif method=='fatpack': - import fatpack - # find rainflow ranges - try: - ranges = fatpack.find_rainflow_ranges(signal) - except IndexError: - # Currently fails for constant signal - return np.nan, np.nan, np.nan - # --- Legacy fatpack - # if (not binStartAt0) and (not meanBin): - # N, S = fatpack.find_range_count(ranges, bins) - # --- Setup bins - # If binStartAt0 is True, the same bins as WINDAP are used - S_bin_edges = create_bins(ranges, bins, binStartAt0=binStartAt0) - # --- Using bin_count to get value at center of bins - N, S = bin_count(ranges, S_bin_edges, meanBin=meanBin) - - else: - raise NotImplementedError('Rain flow algorithm {}'.format(method)) - - # Remove NaN - b = np.isnan(S) - S[b] = 0 - N[b] = 0 - - return N, S, S_bin_edges - -def create_bins(x, bins, binStartAt0=False): - """ - Equidistant bins are setup based on the min/max of the x, unless the user provided the bins as a sequence. - INPUTS: - - x: array - - bins : 1d-array, int - If bins is a sequence, left edges (and the rightmost edge) of the bins. - If bins is an int, a sequence is created dividing the range `min`--`max` of x into `bins` number of equally sized bins. - OUTPUTS: - - bins: - """ - if isinstance(bins, int): - xmax = np.max(x) - xmin, xmax = np.min(x), np.max(x) - if binStartAt0: - xmin = 0 - else: - xmin = np.min(x) - if xmin==xmax: - # I belive that's what's done by histogram. double check - xmin=xmin-0.5 - xmax=xmax+0.5 - bins = np.linspace(xmin, xmax, num=bins + 1) - return bins - - -def bin_count(x, bins, meanBin=True): - """ - Return counts of x within bins - """ - if not meanBin: - # Use the middle of the bin - N, bns = np.histogram(x, bins=bins) - S = bns[:-1] + np.diff(bns) / 2. - else: - bins = create_bins(x, bins, binStartAt0=False) - import pandas as pd - df = pd.DataFrame(data=x, columns=['x']) - xmid = (bins[:-1]+bins[1:])/2 - df['x_mid']= pd.cut(df['x'], bins= bins, labels = xmid ) # Adding a column that has bin attribute - df2 = df.groupby('x_mid').mean() # Average by bin - df['N'] = 1 - dfCount = df[['N','x_mid']].groupby('x_mid').sum() - df2['N'] = dfCount['N'] - # Just in case some bins are missing (will be nan) - df2 = df2.reindex(xmid) - df2 = df2.fillna(0) - S = df2['x'].values - N = df2['N'].values - return N, S - - - - -def check_signal(signal): - # check input data validity - if not type(signal).__name__ == 'ndarray': - raise TypeError('signal must be ndarray, not: ' + type(signal).__name__) - - elif len(signal.shape) not in (1, 2): - raise TypeError('signal must be 1D or 2D, not: ' + str(len(signal.shape))) - - if len(signal.shape) == 2: - if signal.shape[1] > 1: - raise TypeError('signal must have one column only, not: ' + str(signal.shape[1])) - if np.min(signal) == np.max(signal): - raise SignalConstantError("Signal is constant, cannot compute DLC and range") - - -def rainflow_windap(signal, levels=255., thresshold=(255 / 50)): - """Windap equivalent rainflow counting - - - Calculate the amplitude and mean values of half cycles in signal - - This algorithms used by this routine is implemented directly as described in - "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A - - Parameters - ---------- - Signal : array-like - The raw signal - - levels : int, optional - The signal is discretize into this number of levels. - 255 is equivalent to the implementation in Windap - - thresshold : int, optional - Cycles smaller than this thresshold are ignored - 255/50 is equivalent to the implementation in Windap - - Returns - ------- - ampl : array-like - Peak to peak amplitudes of the half cycles - - mean : array-like - Mean values of the half cycles - - - Examples - -------- - >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - >>> ampl, mean = rainflow_windap(signal) - """ - check_signal(signal) - #type is required by and - signal = signal.astype(np.double) - if np.all(np.isnan(signal)): - return None - offset = np.nanmin(signal) - signal -= offset - if np.nanmax(signal) > 0: - gain = np.nanmax(signal) / levels - signal = signal / gain - signal = np.round(signal).astype(int) - - - # If possible the module is compiled using cython otherwise the python implementation is used - - - #Convert to list of local minima/maxima where difference > thresshold - sig_ext = peak_trough(signal, thresshold) - - - #rainflow count - ampl_mean = pair_range_amplitude_mean(sig_ext) - - ampl_mean = np.array(ampl_mean) - ampl_mean = np.round(ampl_mean / thresshold) * gain * thresshold - ampl_mean[:, 1] += offset - return ampl_mean.T - - - -def rainflow_astm(signal): - """Matlab equivalent rainflow counting - - Calculate the amplitude and mean values of half cycles in signal - - This implemementation is based on the c-implementation by Adam Nieslony found at - the MATLAB Central File Exchange http://www.mathworks.com/matlabcentral/fileexchange/3026 - - Parameters - ---------- - Signal : array-like - The raw signal - - Returns - ------- - ampl : array-like - peak to peak amplitudes of the half cycles (note that the matlab implementation - uses peak amplitude instead of peak to peak) - - mean : array-like - Mean values of the half cycles - - - Examples - -------- - >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - >>> ampl, mean = rainflow_astm(signal) - """ - check_signal(signal) - - # type is reuqired by and - signal = signal.astype(np.double) - - # Import find extremes and rainflow. - # If possible the module is compiled using cython otherwise the python implementation is used - - # Remove points which is not local minimum/maximum - sig_ext = find_extremes(signal) - - # rainflow count - ampl_mean = np.array(rainflowcount(sig_ext)) - - return np.array(ampl_mean).T - - -def eq_load(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=1, rainflow_func=rainflow_windap): - """Equivalent load calculation - - Calculate the equivalent loads for a list of Wohler exponent and number of equivalent loads - - Parameters - ---------- - signals : list of tuples or array_like - - if list of tuples: list must have format [(sig1_weight, sig1),(sig2_weight, sig1),...] where\n - - sigx_weight is the weight of signal x\n - - sigx is signal x\n - - if array_like: The signal - no_bins : int, optional - Number of bins in rainflow count histogram - m : int, float or array-like, optional - Wohler exponent (default is [3, 4, 6, 8, 10, 12]) - neq : int, float or array-like, optional - The equivalent number of load cycles (default is 1, but normally the time duration in seconds is used) - rainflow_func : {rainflow_windap, rainflow_astm}, optional - The rainflow counting function to use (default is rainflow_windap) - - Returns - ------- - eq_loads : array-like - List of lists of equivalent loads for the corresponding equivalent number(s) and Wohler exponents - - Examples - -------- - >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - >>> eq_load(signal, no_bins=50, neq=[1, 17], m=[3, 4, 6], rainflow_func=rainflow_windap) - [[10.311095426959747, 9.5942535021382174, 9.0789213365013932], # neq = 1, m=[3,4,6] - [4.010099657859783, 4.7249689509841746, 5.6618639965313005]], # neq = 17, m=[3,4,6] - - eq_load([(.4, signal), (.6, signal)], no_bins=50, neq=[1, 17], m=[3, 4, 6], rainflow_func=rainflow_windap) - [[10.311095426959747, 9.5942535021382174, 9.0789213365013932], # neq = 1, m=[3,4,6] - [4.010099657859783, 4.7249689509841746, 5.6618639965313005]], # neq = 17, m=[3,4,6] - """ - try: - return eq_load_and_cycles(signals, no_bins, m, neq, rainflow_func)[0] - except TypeError: - return [[np.nan] * len(np.atleast_1d(m))] * len(np.atleast_1d(neq)) - - -def eq_load_and_cycles(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=[10 ** 6, 10 ** 7, 10 ** 8], rainflow_func=rainflow_windap): - """Calculate combined fatigue equivalent load - - Parameters - ---------- - signals : list of tuples or array_like - - if list of tuples: list must have format [(sig1_weight, sig1),(sig2_weight, sig1),...] where\n - - sigx_weight is the weight of signal x\n - - sigx is signal x\n - - if array_like: The signal - no_bins : int, optional - Number of bins for rainflow counting - m : int, float or array-like, optional - Wohler exponent (default is [3, 4, 6, 8, 10, 12]) - neq : int or array-like, optional - Equivalent number, default is [10^6, 10^7, 10^8] - rainflow_func : {rainflow_windap, rainflow_astm}, optional - The rainflow counting function to use (default is rainflow_windap) - - Returns - ------- - eq_loads : array-like - List of lists of equivalent loads for the corresponding equivalent number(s) and Wohler exponents - cycles : array_like - 2d array with shape = (no_ampl_bins, 1) - ampl_bin_mean : array_like - mean amplitude of the bins - ampl_bin_edges - Edges of the amplitude bins - """ - cycles, ampl_bin_mean, ampl_bin_edges, _, _ = cycle_matrix(signals, no_bins, 1, rainflow_func) - if 0: #to be similar to windap - ampl_bin_mean = (ampl_bin_edges[:-1] + ampl_bin_edges[1:]) / 2 - cycles, ampl_bin_mean = cycles.flatten(), ampl_bin_mean.flatten() - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - #DEL = [[( (cycles * ampl_bin_mean ** _m) / _neq) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)] - eq_loads = [[((np.nansum(cycles * ampl_bin_mean ** _m) / _neq) ** (1. / _m)) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)] - return eq_loads, cycles, ampl_bin_mean, ampl_bin_edges - - -def cycle_matrix(signals, ampl_bins=10, mean_bins=10, rainflow_func=rainflow_windap, binStartAt0=True): - """Markow load cycle matrix - - Calculate the Markow load cycle matrix - - Parameters - ---------- - Signals : array-like or list of tuples - - if array-like, the raw signal\n - - if list of tuples, list of (weight, signal), e.g. [(0.1,sig1), (0.8,sig2), (.1,sig3)]\n - ampl_bins : int or array-like, optional - if int, Number of amplitude value bins (default is 10) - if array-like, the bin edges for amplitude - mean_bins : int or array-like, optional - if int, Number of mean value bins (default is 10) - if array-like, the bin edges for mea - rainflow_func : {rainflow_windap, rainflow_astm}, optional - The rainflow counting function to use (default is rainflow_windap) - binStartAt0 : boolean - Start the bins at 0. Otherwise, start at the min of ranges - - Returns - ------- - cycles : ndarray, shape(ampl_bins, mean_bins) - A bi-dimensional histogram of load cycles(full cycles). Amplitudes are\ - histogrammed along the first dimension and mean values are histogrammed along the second dimension. - ampl_bin_mean : ndarray, shape(ampl_bins,) - The average cycle amplitude of the bins - ampl_edges : ndarray, shape(ampl_bins+1,) - The amplitude bin edges - mean_bin_mean : ndarray, shape(ampl_bins,) - The average cycle mean of the bins - mean_edges : ndarray, shape(mean_bins+1,) - The mean bin edges - - Examples - -------- - >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - >>> cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = cycle_matrix(signal) - >>> cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = cycle_matrix([(.4, signal), (.6,signal)]) - """ - - if isinstance(signals[0], tuple): - weights, ampls, means = np.array([(np.zeros_like(ampl)+weight,ampl,mean) for weight, signal in signals for ampl,mean in rainflow_func(signal[:]).T], dtype=np.float64).T - else: - ampls, means = rainflow_func(signals[:]) - weights = np.ones_like(ampls) - if isinstance(ampl_bins, int): - ampl_bins = create_bins(ampls[weights>0], ampl_bins, binStartAt0=binStartAt0) - cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights) - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - ampl_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * ampls)[0] - ampl_bin_mean = np.nanmean(ampl_bin_sum / np.where(cycles,cycles,np.nan),1) - mean_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * means)[0] - mean_bin_mean = np.nanmean(mean_bin_sum / np.where(cycles, cycles, np.nan), 1) - cycles = cycles / 2 # to get full cycles - return cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges - - -def cycle_matrix2(signal, nrb_amp, nrb_mean, rainflow_func=rainflow_windap): - """ - Same as wetb.fatigue.cycle_matrix but bin from min_amp to - max_amp instead of 0 to max_amp. - - Parameters - ---------- - - Signal : ndarray(n) - 1D Raw signal array - - nrb_amp : int - Number of bins for the amplitudes - - nrb_mean : int - Number of bins for the means - - rainflow_func : {rainflow_windap, rainflow_astm}, optional - The rainflow counting function to use (default is rainflow_windap) - - Returns - ------- - - cycles : ndarray, shape(ampl_bins, mean_bins) - A bi-dimensional histogram of load cycles(full cycles). Amplitudes are\ - histogrammed along the first dimension and mean values are histogrammed - along the second dimension. - - ampl_edges : ndarray, shape(no_bins+1,n) - The amplitude bin edges - - mean_edges : ndarray, shape(no_bins+1,n) - The mean bin edges - - """ - bins = [nrb_amp, nrb_mean] - ampls, means = rainflow_func(signal) - weights = np.ones_like(ampls) - cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, bins, - weights=weights) - cycles = cycles / 2 # to get full cycles - - return cycles, ampl_edges, mean_edges - -# --------------------------------------------------------------------------------} -# --- Rainflowcount_astm.py -# --------------------------------------------------------------------------------{ -''' -Created on 27/02/2013 - -@author: mmpe - -How to use: - -import_cython("cy_rainflowcount",'cy_rainflowcount.py','') -from cy_rainflowcount import find_extremes,rainflow - -ext = find_extremes(np.array([-2,0,1,0,-3,0,5,0,-1,0,3,0,-4,0,4,0,-2]).astype(np.double)) -print rainflow(ext) -''' -def find_extremes(signal): #cpdef find_extremes(np.ndarray[double,ndim=1] signal): - """return indexes of local minima and maxima plus first and last element of signal""" - - #cdef int pi, i - # sign of gradient - sign_grad = np.int8(np.sign(np.diff(signal))) - - # remove plateaus(sign_grad==0) by sign_grad[plateau_index]=sign_grad[plateau_index-1] - plateau_indexes, = np.where(sign_grad == 0) - if len(plateau_indexes) > 0 and plateau_indexes[0] == 0: - # first element is a plateau - if len(plateau_indexes) == len(sign_grad): - # All values are equal to crossing level! - return np.array([0]) - - # set first element = first element which is not a plateau and delete plateau index - i = 0 - while sign_grad[i] == 0: - i += 1 - sign_grad[0] = sign_grad[i] - - plateau_indexes = np.delete(plateau_indexes, 0) - - for pi in plateau_indexes.tolist(): - sign_grad[pi] = sign_grad[pi - 1] - - extremes, = np.where(np.r_[1, (sign_grad[1:] * sign_grad[:-1] < 0), 1]) - - return signal[extremes] - - -def rainflowcount(sig): #cpdef rainflowcount(np.ndarray[double,ndim=1] sig): - """Cython compilable rain ampl_mean count without time analysis - - - This implemementation is based on the c-implementation by Adam Nieslony found at - the MATLAB Central File Exchange http://www.mathworks.com/matlabcentral/fileexchange/3026 - - References - ---------- - Adam Nieslony, "Determination of fragments of multiaxial service loading - strongly influencing the fatigue of machine components," - Mechanical Systems and Signal Processing 23, no. 8 (2009): 2712-2721. - - and is based on the following standard: - ASTM E 1049-85 (Reapproved 1997), Standard practices for cycle counting in - fatigue analysis, in: Annual Book of ASTM Standards, vol. 03.01, ASTM, - Philadelphia, 1999, pp. 710-718. - - Copyright (c) 1999-2002 by Adam Nieslony - - Ported to Cython compilable Python by Mads M Pedersen - In addition peak amplitude is changed to peak to peak amplitude - - - """ - - #cdef int sig_ptr, index - #cdef double ampl - a = [] - sig_ptr = 0 - ampl_mean = [] - for _ in range(len(sig)): - a.append(sig[sig_ptr]) - sig_ptr += 1 - while len(a) > 2 and abs(a[-3] - a[-2]) <= abs(a[-2] - a[-1]): - ampl = abs(a[-3] - a[-2]) - mean = (a[-3] + a[-2]) / 2; - if len(a) == 3: - del a[0] - if ampl > 0: - ampl_mean.append((ampl, mean)) - elif len(a) > 3: - del a[-3:-1] - if ampl > 0: - ampl_mean.append((ampl, mean)) - ampl_mean.append((ampl, mean)) - for index in range(len(a) - 1): - ampl = abs(a[index] - a[index + 1]) - mean = (a[index] + a[index + 1]) / 2; - if ampl > 0: - ampl_mean.append((ampl, mean)) - return ampl_mean - -# --------------------------------------------------------------------------------} -# --- Peak_trough.py -# --------------------------------------------------------------------------------{ -# @cython.locals(BEGIN=cython.int, MINZO=cython.int, MAXZO=cython.int, ENDZO=cython.int, \ -# R=cython.int, L=cython.int, i=cython.int, p=cython.int, f=cython.int) -def peak_trough(x, R): #cpdef np.ndarray[long,ndim=1] peak_trough(np.ndarray[long,ndim=1] x, int R): - """ - Returns list of local maxima/minima. - - x: 1-dimensional numpy array containing signal - R: Thresshold (minimum difference between succeeding min and max - - This routine is implemented directly as described in - "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A - """ - - BEGIN = 0 - MINZO = 1 - MAXZO = 2 - ENDZO = 3 - S = np.zeros(x.shape[0] + 1, dtype=int) - - L = x.shape[0] - goto = BEGIN - - while 1: - if goto == BEGIN: - trough = x[0] - peak = x[0] - - i = 0 - p = 1 - f = 0 - while goto == BEGIN: - i += 1 - if i == L: - goto = ENDZO - continue - else: - if x[i] > peak: - peak = x[i] - if peak - trough >= R: - S[p] = trough - goto = MAXZO - continue - elif x[i] < trough: - trough = x[i] - if peak - trough >= R: - S[p] = peak - goto = MINZO - continue - - elif goto == MINZO: - f = -1 - - while goto == MINZO: - i += 1 - if i == L: - goto = ENDZO - continue - else: - if x[i] < trough: - trough = x[i] - else: - if x[i] - trough >= R: - p += 1 - S[p] = trough - peak = x[i] - goto = MAXZO - continue - elif goto == MAXZO: - f = 1 - while goto == MAXZO: - i += 1 - if i == L: - goto = ENDZO - continue - else: - if x[i] > peak: - peak = x[i] - else: - if peak - x[i] >= R: - p += 1 - S[p] = peak - trough = x[i] - goto = MINZO - continue - elif goto == ENDZO: - - n = p + 1 - if abs(f) == 1: - if f == 1: - S[n] = peak - else: - S[n] = trough - else: - S[n] = (trough + peak) / 2 - S = S[1:n + 1] - return S - - -# --------------------------------------------------------------------------------} -# --- pair_range.py -# --------------------------------------------------------------------------------{ -# @cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int) -def pair_range_amplitude(x): # cpdef pair_range(np.ndarray[long,ndim=1] x): - """ - Returns a list of half-cycle-amplitudes - x: Peak-Trough sequence (integer list of local minima and maxima) - - This routine is implemented according to - "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A - except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix - """ - - x = x - np.min(x) - k = np.max(x) - n = x.shape[0] - S = np.zeros(n + 1) - - #A = np.zeros(k+1) - flow = [] - S[1] = x[0] - ptr = 1 - p = 1 - q = 1 - f = 0 - # phase 1 - while True: - p += 1 - q += 1 - - # read - S[p] = x[ptr] - ptr += 1 - - if q == n: - f = 1 - while p >= 4: - if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) \ - or\ - (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]): - ampl = abs(S[p - 2] - S[p - 1]) - # A[ampl]+=2 #Two half cycles - flow.append(ampl) - flow.append(ampl) - S[p - 2] = S[p] - - p -= 2 - else: - break - - if f == 0: - pass - else: - break - # phase 2 - q = 0 - while True: - q += 1 - if p == q: - break - else: - ampl = abs(S[q + 1] - S[q]) - # A[ampl]+=1 - flow.append(ampl) - return flow - - - - - -# @cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int) -def pair_range_from_to(x): # cpdef pair_range(np.ndarray[long,ndim=1] x): - """ - Returns a list of half-cycle-amplitudes - x: Peak-Trough sequence (integer list of local minima and maxima) - - This routine is implemented according to - "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A - except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix - """ - - x = x - np.min(x) - k = np.max(x) - n = x.shape[0] - S = np.zeros(n + 1) - - A = np.zeros((k + 1, k + 1)) - S[1] = x[0] - ptr = 1 - p = 1 - q = 1 - f = 0 - # phase 1 - while True: - p += 1 - q += 1 - - # read - S[p] = x[ptr] - ptr += 1 - - if q == n: - f = 1 - while p >= 4: - #print S[p - 3:p + 1] - #print S[p - 2], ">", S[p - 3], ", ", S[p - 1], ">=", S[p - 3], ", ", S[p], ">=", S[p - 2], (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) - #print S[p - 2], "<", S[p - 3], ", ", S[p - 1], "<=", S[p - 3], ", ", S[p], "<=", S[p - 2], (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]) - #print (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) or (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]) - if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) or \ - (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]): - A[S[p - 2], S[p - 1]] += 1 - A[S[p - 1], S[p - 2]] += 1 - S[p - 2] = S[p] - p -= 2 - else: - break - - if f == 1: - break # q==n - # phase 2 - q = 0 - while True: - q += 1 - if p == q: - break - else: - #print S[q], "to", S[q + 1] - A[S[q], S[q + 1]] += 1 - return A - -# @cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int) -def pair_range_amplitude_mean(x): # cpdef pair_range(np.ndarray[long,ndim=1] x): - """ - Returns a list of half-cycle-amplitudes - x: Peak-Trough sequence (integer list of local minima and maxima) - - This routine is implemented according to - "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A - except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix - """ - - x = x - np.min(x) - k = np.max(x) - n = x.shape[0] - S = np.zeros(n + 1) - ampl_mean = [] - A = np.zeros((k + 1, k + 1)) - S[1] = x[0] - ptr = 1 - p = 1 - q = 1 - f = 0 - # phase 1 - while True: - p += 1 - q += 1 - - # read - S[p] = x[ptr] - ptr += 1 - - if q == n: - f = 1 - while p >= 4: - if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) \ - or\ - (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]): - # Extract two intermediate half cycles - ampl = abs(S[p - 2] - S[p - 1]) - mean = (S[p - 2] + S[p - 1]) / 2 - ampl_mean.append((ampl, mean)) - ampl_mean.append((ampl, mean)) - - S[p - 2] = S[p] - - p -= 2 - else: - break - - if f == 0: - pass - else: - break - # phase 2 - q = 0 - while True: - q += 1 - if p == q: - break - else: - ampl = abs(S[q + 1] - S[q]) - mean = (S[q + 1] + S[q]) / 2 - ampl_mean.append((ampl, mean)) - return ampl_mean - - -rainflow_func_dict = {'rainflow_windap':rainflow_windap, 'rainflow_astm':rainflow_astm} - - -# --------------------------------------------------------------------------------} -# --- Unittests -# --------------------------------------------------------------------------------{ -import unittest - -class TestFatigue(unittest.TestCase): - - def test_leq_1hz(self): - """Simple test of wetb.fatigue.eq_load using a sine - signal. - """ - amplitude = 1 - m = 1 - point_per_deg = 100 - - for amplitude in [1,2,3]: - peak2peak = amplitude * 2 - # sine signal with 10 periods (20 peaks) - nr_periods = 10 - time = np.linspace(0, nr_periods*2*np.pi, point_per_deg*180) - neq = time[-1] - # mean value of the signal shouldn't matter - signal = amplitude * np.sin(time) + 5 - r_eq_1hz = eq_load(signal, no_bins=1, m=m, neq=neq)[0] - r_eq_1hz_expected = 2*((nr_periods*amplitude**m)/neq)**(1/m) - np.testing.assert_allclose(r_eq_1hz, r_eq_1hz_expected) - - # sine signal with 20 periods (40 peaks) - nr_periods = 20 - time = np.linspace(0, nr_periods*2*np.pi, point_per_deg*180) - neq = time[-1] - # mean value of the signal shouldn't matter - signal = amplitude * np.sin(time) + 9 - r_eq_1hz2 = eq_load(signal, no_bins=1, m=m, neq=neq)[0] - r_eq_1hz_expected2 = 2*((nr_periods*amplitude**m)/neq)**(1/m) - np.testing.assert_allclose(r_eq_1hz2, r_eq_1hz_expected2) - - # 1hz equivalent should be independent of the length of the signal - np.testing.assert_allclose(r_eq_1hz, r_eq_1hz2) - - def test_rainflow_combi(self): - # Signal with two frequencies and amplitudes - amplitude = 1 - # peak2peak = amplitude * 2 - m = 1 - point_per_deg = 100 - - nr_periods = 10 - time = np.linspace(0, nr_periods*2*np.pi, point_per_deg*180) - - signal = (amplitude*np.sin(time)) + 5 + (amplitude*0.2*np.cos(5*time)) - cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = \ - cycle_matrix(signal, ampl_bins=10, mean_bins=5) - - cycles.sum() - - - - def test_astm1(self): - - signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - - ampl, mean = rainflow_astm(signal) - np.testing.assert_array_equal(np.histogram2d(ampl, mean, [6, 4])[0], np.array([[ 0., 1., 0., 0.], - [ 1., 0., 0., 2.], - [ 0., 0., 0., 0.], - [ 0., 0., 0., 1.], - [ 0., 0., 0., 0.], - [ 0., 0., 1., 2.]])) - - def test_windap1(self): - signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - ampl, mean = rainflow_windap(signal, 18, 2) - np.testing.assert_array_equal(np.histogram2d(ampl, mean, [6, 4])[0], np.array([[ 0., 0., 1., 0.], - [ 1., 0., 0., 2.], - [ 0., 0., 0., 0.], - [ 0., 0., 0., 1.], - [ 0., 0., 0., 0.], - [ 0., 0., 2., 1.]])) - - def test_eq_load_basic(self): - import numpy.testing - signal1 = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) - try: - M1=eq_load(signal1, no_bins=50, neq=[1, 17], m=[3, 4, 6], rainflow_func=rainflow_windap) - doTest=True - except FloatingPointError as e: - doTest=False - print('>>> Floating point error') - M1_ref=np.array([[10.348414123746581, 9.635653414943068, 9.122399471334054], [4.024613313976801, 4.745357541147315, 5.68897815218057]]) - #M1_ref=np.array([[10.311095426959747, 9.5942535021382174, 9.0789213365013932],[4.010099657859783, 4.7249689509841746, 5.6618639965313005]]) - numpy.testing.assert_almost_equal(M1,M1_ref,decimal=5) - #signal2 = signal1 * 1.1 - # print (eq_load(signal1, no_bins=50, neq=17, rainflow_func=rainflow_windap)) - # print (eq_load(signal1, no_bins=50, neq=17, rainflow_func=rainflow_astm)) - # # equivalent load for default wohler slopes - # # Cycle matrix with 4 amplitude bins and 4 mean value bins - # print (cycle_matrix(signal1, 4, 4, rainflow_func=rainflow_windap)) - # print (cycle_matrix(signal1, 4, 4, rainflow_func=rainflow_astm)) - # # Cycle matrix where signal1 and signal2 contributes with 50% each - # print (cycle_matrix([(.5, signal1), (.5, signal2)], 4, 8, rainflow_func=rainflow_astm)) - - - def test_equivalent_load(self): - """ Higher level interface """ - try: - import fatpack - hasFatpack=True - except: - hasFatpack=False - dt = 0.1 - f0 = 1 ; - A = 5 ; - t=np.arange(0,10,dt); - y=A*np.sin(2*np.pi*f0*t) - - Leq = equivalent_load(t, y, m=10, bins=100, method='rainflow_windap') - np.testing.assert_almost_equal(Leq, 9.4714702, 3) - - Leq = equivalent_load(t, y, m=1, bins=100, method='rainflow_windap') - np.testing.assert_almost_equal(Leq, 9.4625320, 3) - - Leq = equivalent_load(t, y, m=4, bins=10, method='rainflow_windap') - np.testing.assert_almost_equal(Leq, 9.420937, 3) - - - if hasFatpack: - Leq = equivalent_load(t, y, m=4, bins=10, method='fatpack', binStartAt0=False, meanBin=False) - np.testing.assert_almost_equal(Leq, 9.584617089, 3) - - Leq = equivalent_load(t, y, m=4, bins=1, method='fatpack', binStartAt0=False, meanBin=False) - np.testing.assert_almost_equal(Leq, 9.534491302, 3) - - - - def test_equivalent_load_sines(self): - # Check analytical formulae for sine of various frequencies - # See welib.tools.examples.Example_Fatigue.py - try: - import fatpack - hasFatpack=True - except: - hasFatpack=False - - # --- Dependency on frequency - m = 2 # Wohler slope - A = 3 # Amplitude - nT = 100 # Number of periods - nPerT = 100 # Number of points per period - Teq = 1 # Equivalent period [s] - nBins = 10 # Number of bins - - vf =np.linspace(0.1,10,21) - vT = 1/vf - T_max=np.max(vT*nT) - vomega =vf*2*np.pi - Leq1 = np.zeros_like(vomega) - Leq2 = np.zeros_like(vomega) - Leq_ref = np.zeros_like(vomega) - for it, (T,omega) in enumerate(zip(vT,vomega)): - # --- Option 1 - Same number of periods - time = np.linspace(0, nT*T, nPerT*nT+1) - signal = A * np.sin(omega*time) # Mean does not matter - T_all=time[-1] - Leq1[it] = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='rainflow_windap') - if hasFatpack: - Leq2[it] = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=False) - Leq_ref = 2*A*(vf*Teq)**(1/m) - np.testing.assert_array_almost_equal( Leq1/A, Leq_ref/A, 2) - if hasFatpack: - np.testing.assert_array_almost_equal(Leq2/A, Leq_ref/A, 2) - #import matplotlib.pyplot as plt - #fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - #fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - #ax.plot(vf, Leq_ref/A, 'kd' , label ='Theory') - #ax.plot(vf, Leq1 /A, 'o' , label ='Windap m={}'.format(m)) - #if hasFatpack: - # ax.plot(vf, Leq2/A, 'k.' , label ='Fatpack') - #ax.legend() - #plt.show() - - def test_equivalent_load_sines_sum(self): - # --- Sum of two sinusoids - try: - import fatpack - hasFatpack=True - except: - hasFatpack=False - bs0 = True # Bin Start at 0 - m = 2 # Wohler slope - nPerT = 100 # Number of points per period - Teq = 1 # Equivalent period [s] - nBins = 10 # Number of bins - nT1 = 10 # Number of periods - nT2 = 20 # Number of periods - T1 = 10 - T2 = 5 - A1 = 3 # Amplitude - A2 = 5 # Amplitude - # --- Signals - time1 = np.linspace(0, nT1*T1, nPerT*nT1+1) - time2 = np.linspace(0, nT2*T2, nPerT*nT2+1) - signal1 = A1 * np.sin(2*np.pi/T1*time1) - signal2 = A2 * np.sin(2*np.pi/T2*time2) - # --- Individual Leq - #print('----------------- SIGNAL 1') - DEL1 = (2*A1)**m * nT1/time1[-1] - Leq_th = (DEL1)**(1/m) - Leq1 = equivalent_load(time1, signal1, m=m, Teq=Teq, bins=nBins, method='rainflow_windap', binStartAt0=bs0) - if hasFatpack: - Leq2 = equivalent_load(time1, signal1, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=bs0) - np.testing.assert_array_almost_equal(Leq2, Leq_th, 3) - np.testing.assert_array_almost_equal(Leq1, Leq_th, 1) - #print('>>> Leq1 ',Leq1) - #print('>>> Leq2 ',Leq2) - #print('>>> Leq TH ',Leq_th) - #print('----------------- SIGNAL 2') - DEL2 = (2*A2)**m * nT2/time2[-1] - Leq_th = (DEL2)**(1/m) - Leq1 = equivalent_load(time2, signal2, m=m, Teq=Teq, bins=nBins, method='rainflow_windap', binStartAt0=bs0) - if hasFatpack: - Leq2 = equivalent_load(time2, signal2, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=bs0) - np.testing.assert_array_almost_equal(Leq2, Leq_th, 3) - np.testing.assert_array_almost_equal(Leq1, Leq_th, 1) - #print('>>> Leq1 ',Leq1) - #print('>>> Leq2 ',Leq2) - #print('>>> Leq TH ',Leq_th) - # --- Concatenation - #print('----------------- CONCATENATION') - signal = np.concatenate((signal1, signal2)) - time = np.concatenate((time1, time2+time1[-1])) - T_all=time[-1] - DEL1 = (2*A1)**m * nT1/T_all - DEL2 = (2*A2)**m * nT2/T_all - Leq_th = (DEL1+DEL2)**(1/m) - Leq1 = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='rainflow_windap', binStartAt0=bs0) - if hasFatpack: - Leq2 = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=bs0) - np.testing.assert_array_almost_equal(Leq2, Leq_th, 1) - np.testing.assert_array_almost_equal(Leq1, Leq_th, 1) - #print('>>> Leq1 ',Leq1) - #print('>>> Leq2 ',Leq2) - #print('>>> Leq TH ',Leq_th) - - - - def test_eqload_cornercases(self): - try: - import fatpack - hasFatpack=True - except: - hasFatpack=False - # Signal of length 1 - time=[0]; signal=[0] - Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap') - np.testing.assert_equal(Leq, np.nan) - - # Datetime - time= [np.datetime64('2023-10-01'), np.datetime64('2023-10-02')] - signal= [0,1] - Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap') - np.testing.assert_equal(Leq, np.nan) - - # Constant signal - time =[0,1] - signal =[1,1] - Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap') - np.testing.assert_equal(Leq, np.nan) - if hasFatpack: - Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='fatpack') - np.testing.assert_equal(Leq, np.nan) - - - -if __name__ == '__main__': - unittest.main() - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py deleted file mode 100644 index 5da1833d1d..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py +++ /dev/null @@ -1,209 +0,0 @@ -import pandas as pd -import numpy as np -import re - - -def pd_interp1(x_new, xLabel, df): - """ Interpolate a panda dataframe based on a set of new value - This function assumes that the dataframe is a simple 2d-table - """ - from pyFAST.tools.signal_analysis import multiInterp - x_old = df[xLabel].values - data_new=multiInterp(x_new, x_old, df.values.T) - return pd.DataFrame(data=data_new.T, columns=df.columns.values) - #nRow,nCol = df.shape - #nRow = len(xnew) - #data = np.zeros((nRow,nCol)) - #xref =df[xLabel].values.astype(float) - #for col,i in zip(df.columns.values,range(nCol)): - # yref = df[col].values - # if yref.dtype!=float: - # raise Exception('Wrong type for yref, consider using astype(float)') - # data[:,i] = np.interp(xnew, xref, yref) - #return pd.DataFrame(data=data, columns = df.columns) - -def create_dummy_dataframe(size): - return pd.DataFrame(data={'col1': np.linspace(0,1,size), 'col2': np.random.normal(0,1,size)}) - - - -def remap_df(df, ColMap, bColKeepNewOnly=False, inPlace=False, dataDict=None, verbose=False): - """ - NOTE: see welib.fast.postpro - - Add/rename columns of a dataframe, potentially perform operations between columns - - dataDict: dictionary of data to be made available as "variable" in the column mapping - 'key' (new) : value (old) - - Example: - - ColumnMap={ - 'WS_[m/s]' : '{Wind1VelX_[m/s]}' , # create a new column from existing one - 'RtTSR_[-]' : '{RtTSR_[-]} * 2 + {RtAeroCt_[-]}' , # change value of column - 'RotSpeed_[rad/s]' : '{RotSpeed_[rpm]} * 2*np.pi/60 ', # new column [rpm] -> [rad/s] - 'q_p' : ['Q_P_[rad]', '{PtfmSurge_[deg]}*np.pi/180'] # List of possible matches - } - # Read - df = weio.read('FASTOutBin.outb').toDataFrame() - # Change columns based on formulae, potentially adding new columns - df = fastlib.remap_df(df, ColumnMap, inplace=True) - - """ - # Insert dataDict into namespace - if dataDict is not None: - for k,v in dataDict.items(): - exec('{:s} = dataDict["{:s}"]'.format(k,k)) - - - if not inPlace: - df=df.copy() - ColMapMiss=[] - ColNew=[] - RenameMap=dict() - # Loop for expressions - for k0,v in ColMap.items(): - k=k0.strip() - if type(v) is not list: - values = [v] - else: - values = v - Found = False - for v in values: - v=v.strip() - if Found: - break # We avoid replacing twice - if v.find('{')>=0: - # --- This is an advanced substitution using formulae - search_results = re.finditer(r'\{.*?\}', v) - expr=v - if verbose: - print('Attempt to insert column {:15s} with expr {}'.format(k,v)) - # For more advanced operations, we use an eval - bFail=False - for item in search_results: - col=item.group(0)[1:-1] - if col not in df.columns: - ColMapMiss.append(col) - bFail=True - expr=expr.replace(item.group(0),'df[\''+col+'\']') - #print(k0, '=', expr) - if not bFail: - df[k]=eval(expr) - ColNew.append(k) - else: - print('[WARN] Column not present in dataframe, cannot evaluate: ',expr) - else: - #print(k0,'=',v) - if v not in df.columns: - ColMapMiss.append(v) - if verbose: - print('[WARN] Column not present in dataframe: ',v) - else: - if k in RenameMap.keys(): - print('[WARN] Not renaming {} with {} as the key is already present'.format(k,v)) - else: - RenameMap[k]=v - Found=True - - # Applying renaming only now so that expressions may be applied in any order - for k,v in RenameMap.items(): - if verbose: - print('Renaming column {:15s} > {}'.format(v,k)) - k=k.strip() - iCol = list(df.columns).index(v) - df.columns.values[iCol]=k - ColNew.append(k) - df.columns = df.columns.values # Hack to ensure columns are updated - - if len(ColMapMiss)>0: - print('[FAIL] The following columns were not found in the dataframe:',ColMapMiss) - #print('Available columns are:',df.columns.values) - - if bColKeepNewOnly: - ColNew = [c for c,_ in ColMap.items() if c in ColNew]# Making sure we respec order from user - ColKeepSafe = [c for c in ColNew if c in df.columns.values] - ColKeepMiss = [c for c in ColNew if c not in df.columns.values] - if len(ColKeepMiss)>0: - print('[WARN] Signals missing and omitted for ColKeep:\n '+'\n '.join(ColKeepMiss)) - df=df[ColKeepSafe] - return df - -def changeUnits(df, flavor='SI', inPlace=True): - """ Change units of a dataframe - - # TODO harmonize with dfToSIunits in welib.fast.tools.lin.py ! - """ - def splitunit(s): - iu=s.rfind('[') - if iu>0: - return s[:iu], s[iu+1:].replace(']','') - else: - return s, '' - def change_units_to_WE(s, c): - """ - Change units to wind energy units - s: channel name (string) containing units, typically 'speed_[rad/s]' - c: channel (array) - """ - svar, u = splitunit(s) - u=u.lower() - scalings = {} - # OLD = NEW - scalings['rad/s'] = (30/np.pi,'rpm') # TODO decide - scalings['rad' ] = (180/np.pi,'deg') - scalings['n'] = (1e-3, 'kN') - scalings['nm'] = (1e-3, 'kNm') - scalings['n-m'] = (1e-3, 'kNm') - scalings['n*m'] = (1e-3, 'kNm') - scalings['w'] = (1e-3, 'kW') - if u in scalings.keys(): - scale, new_unit = scalings[u] - s = svar+'['+new_unit+']' - c *= scale - return s, c - - def change_units_to_SI(s, c): - """ - Change units to SI units - TODO, a lot more units conversion needed...will add them as we go - s: channel name (string) containing units, typically 'speed_[rad/s]' - c: channel (array) - """ - svar, u = splitunit(s) - u=u.lower() - scalings = {} - # OLD = NEW - scalings['rpm'] = (np.pi/30,'rad/s') - scalings['rad' ] = (180/np.pi,'deg') - scalings['deg/s' ] = (np.pi/180,'rad/s') - scalings['kn'] = (1e3, 'N') - scalings['knm'] = (1e3, 'Nm') - scalings['kn-m'] = (1e3, 'Nm') - scalings['kn*m'] = (1e3, 'Nm') - scalings['kw'] = (1e3, 'W') - if u in scalings.keys(): - scale, new_unit = scalings[u] - s = svar+'['+new_unit+']' - c *= scale - return s, c - - if not inPlace: - raise NotImplementedError() - - if flavor == 'WE': - cols = [] - for i, colname in enumerate(df.columns): - colname_new, df.iloc[:,i] = change_units_to_WE(colname, df.iloc[:,i]) - cols.append(colname_new) - df.columns = cols - elif flavor == 'SI': - cols = [] - for i, colname in enumerate(df.columns): - colname_new, df.iloc[:,i] = change_units_to_SI(colname, df.iloc[:,i]) - cols.append(colname_new) - df.columns = cols - else: - raise NotImplementedError(flavor) - return df - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py deleted file mode 100644 index 1cce7de8bb..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py +++ /dev/null @@ -1,893 +0,0 @@ -""" -Signal analysis tools. -NOTE: naming this module "signal.py" can sometimes create conflict with numpy - -""" -import numpy as np -from numpy.random import rand -import pandas as pd - - -# --- List of available filters -FILTERS=[ - {'name':'Moving average' , 'param':100 , 'paramName':'Window Size' , 'paramRange':[1 , 100000] , 'increment':1 , 'digits':0} , - {'name':'Low pass 1st order' , 'param':1.0, 'paramName':'Cutoff Freq.' , 'paramRange':[0.0001 , 100000] , 'increment':0.1, 'digits':4} , - {'name':'High pass 1st order' , 'param':0.1 , 'paramName':'Cutoff Freq.' , 'paramRange':[0.0001 , 100000] , 'increment':0.1, 'digits':4} , -] - -SAMPLERS=[ - {'name':'Replace', 'param':[], 'paramName':'New x'}, - {'name':'Insert', 'param':[], 'paramName':'Insert list'}, - {'name':'Remove', 'param':[], 'paramName':'Remove list'}, - {'name':'Every n', 'param':2 , 'paramName':'n'}, - {'name':'Linspace', 'param':[0,1,100] , 'paramName':'xmin, xmax, n'}, - {'name':'Time-based', 'param':0.01 , 'paramName':'Sample time (s)'}, - {'name':'Delta x', 'param':[0.1,np.nan,np.nan], 'paramName':'dx, xmin, xmax'}, -] - - - -def reject_outliers(y, x=None, m = 2., replaceNaN=True): - """ Reject outliers: - If replaceNaN is true: they are replaced by NaN - Otherwise they are removed - """ - if m==0: - # No rejection... - pass - else: - dd = np.abs(y - np.nanmedian(y)) - mdev = np.nanmedian(dd) - if mdev: - ss = dd/mdev - b=ss=0, j< len(xp)-1) - jOK = j[bOK] - dd[bOK] = (x[bOK] - xp[jOK]) / (xp[jOK + 1] - xp[jOK]) - jBef=j - jAft=j+1 - # - bLower =j<0 - bUpper =j>=len(xp)-1 - # Use first and last values for anything beyond xp - jAft[bUpper] = len(xp)-1 - jBef[bUpper] = len(xp)-1 - jAft[bLower] = 0 - jBef[bLower] = 0 - if extrap=='bounded': - #OK - pass - elif extrap=='nan': - # Set values to nan if out of bounds - bBeyond= np.logical_or(xnp.max(xp)) - dd[bBeyond] = np.nan - else: - raise NotImplementedError() - - return (1 - dd) * fp[:,jBef] + fp[:,jAft] * dd - -def interpArray(x, xp, fp, extrap='bounded'): - """ - Interpolate all the columns of a matrix `fp` based on one new value `x` - INPUTS: - - x : scalar new values - - xp : array ( np ), old values - - fp : array ( nval, np), matrix values to be interpolated - """ - # Sanity - xp = np.asarray(xp) - assert fp.shape[1]==len(xp), 'Second dimension of fp should have the same length as xp' - - if fp.shape[1]==0: - raise Exception('Second dimension of fp should be >0') - - j = np.searchsorted(xp, x) - 1 - if j<0: - # Before bounds - if extrap=='bounded': - return fp[:,0] - elif extrap=='nan': - return fp[:,0]*np.nan - else: - raise NotImplementedError() - - elif j>=len(xp)-1: - # After bounds - if extrap=='bounded': - return fp[:,-1] - elif extrap=='nan': - return fp[:,-1]*np.nan - else: - raise NotImplementedError() - else: - # Normal case, within bounds - dd = (x- xp[j]) / (xp[j+1] - xp[j]) - return (1 - dd) * fp[:,j] + fp[:,j+1] * dd - - -def interpDF(x_new, xLabel, df, extrap='bounded'): - """ Resample a dataframe using linear interpolation""" - x_old = df[xLabel].values - #x_new=np.sort(x_new) - # --- Method 1 (pandas) - #df_new = df_old.copy() - #df_new = df_new.set_index(x_old) - #df_new = df_new.reindex(df_new.index | x_new) - #df_new = df_new.interpolate().loc[x_new] - #df_new = df_new.reset_index() - # --- Method 2 interp storing dx - data_new=multiInterp(x_new, x_old, df.values.T, extrap=extrap) - df_new = pd.DataFrame(data=data_new.T, columns=df.columns.values) - df_new[xLabel] = x_new # Just in case this value was replaced by nan.. - return df_new - - -def resample_interp(x_old, x_new, y_old=None, df_old=None): - #x_new=np.sort(x_new) - if df_old is not None: - # --- Method 1 (pandas) - #df_new = df_old.copy() - #df_new = df_new.set_index(x_old) - #df_new = df_new.reindex(df_new.index | x_new) - #df_new = df_new.interpolate().loc[x_new] - #df_new = df_new.reset_index() - # --- Method 2 interp storing dx - data_new=multiInterp(x_new, x_old, df_old.values.T) - df_new = pd.DataFrame(data=data_new.T, columns=df_old.columns.values) - return df_new - - if y_old is not None: - return np.interp(x_new, x_old, y_old) - - -def applySamplerDF(df_old, x_col, sampDict): - x_old=df_old[x_col].values - x_new, df_new =applySampler(x_old, y_old=None, sampDict=sampDict, df_old=df_old) - df_new[x_col]=x_new - return df_new - - -def applySampler(x_old, y_old, sampDict, df_old=None): - - param = np.asarray(sampDict['param']).ravel() - - if sampDict['name']=='Replace': - if len(param)==0: - raise Exception('Error: At least one value is required to resample the x values with') - x_new = param - return x_new, resample_interp(x_old, x_new, y_old, df_old) - - elif sampDict['name']=='Insert': - if len(param)==0: - raise Exception('Error: provide a list of values to insert') - x_new = np.sort(np.concatenate((x_old.ravel(),param))) - return x_new, resample_interp(x_old, x_new, y_old, df_old) - - elif sampDict['name']=='Remove': - I=[] - if len(param)==0: - raise Exception('Error: provide a list of values to remove') - for d in param: - Ifound= np.where(np.abs(x_old-d)<1e-3)[0] - if len(Ifound)>0: - I+=list(Ifound.ravel()) - x_new=np.delete(x_old,I) - return x_new, resample_interp(x_old, x_new, y_old, df_old) - - elif sampDict['name']=='Delta x': - if len(param)==0: - raise Exception('Error: provide value for dx') - dx = param[0] - if dx==0: - raise Exception('Error: `dx` cannot be 0') - if len(param)==1: - # NOTE: not using min/max if data loops (like airfoil) - xmin = np.nanmin(x_old) - xmax = np.nanmax(x_old) + dx/2 - elif len(param)==3: - xmin = param[1] - xmax = param[2] - if np.isnan(xmin): - xmin = np.nanmin(x_old) - if np.isnan(xmax): - xmax = np.nanmax(x_old) + dx/2 - else: - raise Exception('Error: the sampling parameters should be a list of three values `dx, xmin, xmax`') - x_new = np.arange(xmin, xmax, dx) - if len(x_new)==0: - xmax = xmin+dx*1.1 # NOTE: we do it like this to account for negative dx - x_new = np.arange(xmin, xmax, dx) - param = [dx, xmin, xmax] - return x_new, resample_interp(x_old, x_new, y_old, df_old) - - elif sampDict['name']=='Linspace': - if len(param)!=3: - raise Exception('Error: Provide three parameters for linspace: xmin, xmax, n') - xmin = float(param[0]) - xmax = float(param[1]) - n = int(param[2]) - x_new = np.linspace(xmin, xmax, n) - return x_new, resample_interp(x_old, x_new, y_old, df_old) - - elif sampDict['name']=='Every n': - if len(param)==0: - raise Exception('Error: provide value for n') - n = int(param[0]) - if n==0: - raise Exception('Error: |n| should be at least 1') - - x_new=x_old[::n] - if df_old is not None: - return x_new, (df_old.copy()).iloc[::n,:] - if y_old is not None: - return x_new, y_old[::n] - - elif sampDict['name'] == 'Time-based': - if len(param) == 0: - raise Exception('Error: provide value for new sampling time') - sample_time = float(param[0]) - if sample_time <= 0: - raise Exception('Error: sample time must be positive') - - time_index = pd.TimedeltaIndex(x_old, unit="S") - x_new = pd.Series(x_old, index=time_index).resample("{:f}S".format(sample_time)).mean().interpolate().values - - if df_old is not None: - df_new = df_old.set_index(time_index, inplace=False).resample("{:f}S".format(sample_time)).mean() - df_new = df_new.interpolate().reset_index(drop=True) - return x_new, df_new - if y_old is not None: - y_new = pd.Series(y_old, index=time_index).resample("{:f}S".format(sample_time)).mean() - y_new = y_new.interpolate().values - return x_new, y_new - - else: - raise NotImplementedError('{}'.format(sampDict)) - pass - -# --------------------------------------------------------------------------------} -# --- Filters -# --------------------------------------------------------------------------------{ -# def moving_average(x, w): -# #t_new = np.arange(0,Tmax,dt) -# #nt = len(t_new) -# #nw=400 -# #u_new = moving_average(np.floor(np.linspace(0,3,nt+nw-1))*3+3.5, nw) -# return np.convolve(x, np.ones(w), 'valid') / w -# def moving_average(x,N,mode='same'): -# y=np.convolve(x, np.ones((N,))/N, mode=mode) -# return y -def moving_average(a, n=3) : - """ - perform moving average, return a vector of same length as input - - NOTE: also in kalman.filters - """ - a = a.ravel() - a = np.concatenate(([a[0]]*(n-1),a)) # repeating first values - ret = np.cumsum(a, dtype = float) - ret[n:] = ret[n:] - ret[:-n] - ret=ret[n - 1:] / n - return ret - -def lowpass1(y, dt, fc=3) : - """ - 1st order low pass filter - """ - tau=1/(2*np.pi*fc) - alpha=dt/(tau+dt) - y_filt=np.zeros(y.shape) - y_filt[0]=y[0] - for i in np.arange(1,len(y)): - y_filt[i]=alpha*y[i] + (1-alpha)*y_filt[i-1] - return y_filt - -def highpass1(y, dt, fc=3) : - """ - 1st order high pass filter - """ - tau=1/(2*np.pi*fc) - alpha=tau/(tau+dt) - y_filt=np.zeros(y.shape) - y_filt[0]=0 - for i in np.arange(1,len(y)): - y_filt[i]=alpha*y_filt[i-1] + alpha*(y[i]-y[i-1]) - m0=np.mean(y) - m1=np.mean(y_filt) - y_filt+=m0-m1 - return y_filt - - -def applyFilter(x, y, filtDict): - if filtDict['name']=='Moving average': - return moving_average(y, n=np.round(filtDict['param']).astype(int)) - elif filtDict['name']=='Low pass 1st order': - dt = x[1]-x[0] - return lowpass1(y, dt=dt, fc=filtDict['param']) - elif filtDict['name']=='High pass 1st order': - dt = x[1]-x[0] - return highpass1(y, dt=dt, fc=filtDict['param']) - else: - raise NotImplementedError('{}'.format(filtDict)) - -def applyFilterDF(df_old, x_col, options): - """ apply filter on a dataframe """ - # Brute force loop - df_new = df_old.copy() - x = df_new[x_col] - for (colName, colData) in df_new.iteritems(): - if colName != x_col: - df_new[colName] = applyFilter(x, colData, options) - return df_new - - -# --------------------------------------------------------------------------------} -# --- -# --------------------------------------------------------------------------------{ -def zero_crossings(y, x=None, direction=None, bouncingZero=False): - """ - Find zero-crossing points in a discrete vector, using linear interpolation. - - direction: 'up' or 'down', to select only up-crossings or down-crossings - bouncingZero: also returns zeros that are exactly zero and do not change sign - - returns: - x values xzc such that y(yzc)==0 - indexes izc, such that the zero is between y[izc] (excluded) and y[izc+1] (included) - - if direction is not provided, also returns: - sign, equal to 1 for up crossing - """ - if x is None: - x=np.arange(len(y)) - else: - x = np.asarray(x) - y = np.asarray(y) - - if np.any((x[1:] - x[0:-1]) <= 0.0): - raise Exception('x values need to be in ascending order') - - # Indices before zero-crossing - iBef = np.where(y[1:]*y[0:-1] < 0.0)[0] - - # Find the zero crossing by linear interpolation - xzc = x[iBef] - y[iBef] * (x[iBef+1] - x[iBef]) / (y[iBef+1] - y[iBef]) - - # Selecting points that are exactly 0 and where neighbor change sign - iZero = np.where(y == 0.0)[0] - iZero = iZero[np.where((iZero > 0) & (iZero < x.size-1))] - if not bouncingZero: - iZero = iZero[np.where(y[iZero-1]*y[iZero+1] < 0.0)] # we only accept zeros that change signs - - # Concatenate - xzc = np.concatenate((xzc, x[iZero])) - iBef = np.concatenate((iBef, iZero)) - - # Sort - iSort = np.argsort(xzc) - xzc, iBef = xzc[iSort], iBef[iSort] - - # Return up-crossing, down crossing or both - sign = np.sign(y[iBef+1]-y[iBef]) - if direction == 'up': - I= np.where(sign==1)[0] - return xzc[I],iBef[I] - elif direction == 'down': - I= np.where(sign==-1)[0] - return xzc[I],iBef[I] - elif direction is not None: - raise Exception('Direction should be either `up` or `down` or `None`') - return xzc, iBef, sign - - -# --------------------------------------------------------------------------------} -# --- Correlation -# --------------------------------------------------------------------------------{ -def correlation(x, nMax=80, dt=1, method='numpy'): - """ - Compute auto correlation of a signal - """ - - def acf(x, nMax=20): - return np.array([1]+[np.corrcoef(x[:-i], x[i:])[0,1] for i in range(1, nMax)]) - - - nvec = np.arange(0,nMax) - if method=='manual': - sigma2 = np.var(x) - R = np.zeros(nMax) - R[0] =1 - for i,nDelay in enumerate(nvec[1:]): - R[i+1] = np.mean( x[0:-nDelay] * x[nDelay:] ) / sigma2 - #R[i+1] = np.corrcoef(x[:-nDelay], x[nDelay:])[0,1] - - elif method=='numpy': - R= acf(x, nMax=nMax) - else: - raise NotImplementedError() - - tau = nvec*dt - return R, tau -# Auto-correlation comes in two versions: statistical and convolution. They both do the same, except for a little detail: The statistical version is normalized to be on the interval [-1,1]. Here is an example of how you do the statistical one: -# -# -# def autocorr(x): -# result = numpy.correlate(x, x, mode='full') -# return result[result.size/2:] - - - - - -def correlated_signal(coeff, n=1000, seed=None): - """ - Create a correlated random signal of length `n` based on the correlation coefficient `coeff` - value[t] = coeff * value[t-1] + (1-coeff) * random - """ - if coeff<0 or coeff>1: - raise Exception('Correlation coefficient should be between 0 and 1') - if seed is not None: - np.random.seed(seed) - - x = np.zeros(n) - rvec = rand(n) - x[0] = rvec[0] - for m in np.arange(1,n): - x[m] = coeff*x[m-1] + (1-coeff)*rvec[m] - x-=np.mean(x) - return x - - -def find_time_offset(t, f, g, outputAll=False): - """ - Find time offset between two signals (may be negative) - - t_offset = find_time_offset(t, f, g) - f(t+t_offset) ~= g(t) - - """ - import scipy - from scipy.signal import correlate - # Remove mean and normalize by std - f = f.copy() - g = g.copy() - f -= f.mean() - g -= g.mean() - f /= f.std() - g /= g.std() - - # Find cross-correlation - xcorr = correlate(f, g) - - # Lags - n = len(f) - dt = t[1]-t[0] - lag = np.arange(1-n, n)*dt - - # Time offset is located at maximum correlation - t_offset = lag[xcorr.argmax()] - - if outputAll: - return t_offset, lag, xcorr - else: - return t_offset - -def amplitude(x, t=None, T = None, mask=None, debug=False): - """ - Compute signal amplitude (max-min)/2. - If a frequency is provided, the calculation is the average on each period - - x: signal time series - mask - time at which transient starts - """ - if mask is not None: - x = x[mask] - if t is not None: - t = t[mask] - # - if T is not None and t is not None: - t -= t[0] - if t[-1]<=T: - return (np.max(x)-np.min(x))/2 - n = int(t[-1]/T) - A = 0 - for i in range(n): - b = np.logical_and(t<=(i+1)*T , t>=i*T) - A+=(np.max(x[b])-np.min(x[b]))/2 - A/=n - - if debug: - import matplotlib.pyplot as plt - from welib.tools.colors import python_colors - fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - ax.plot(t, x-np.mean(x) ,'k-', lw=3, label='Original') - for i in range(n): - b = np.logical_and(t<=(i+1)*T , t>=i*T) - A=(np.max(x[b])-np.min(x[b]))/2 - ax.plot(t[b]- i*T, x[b]-np.mean(x[b]), c=python_colors(i), label='A={}'.format(A)) - ax.plot([0,0,T,T,0],[-A,A,A,-A,-A] ,'--', c=python_colors(i) ) - ax.set_xlabel('time') - ax.set_ylabel('x') - ax.legend() - return A - - # split signals into subsets - else: - return (np.max(x)-np.min(x))/2 - -def phase_shift(A, B, t, omega, tStart=0, deg=True, debug=False): - """ - A: reference signal - omega: expected frequency of reference signal - """ - b =t>=tStart - t = t[b] - A = A[b] - B = B[b] - t_offset, lag, xcorr = find_time_offset(t, A, B, outputAll=True) - phi0 = t_offset*omega # Phase offset in radians - phi = np.mod(phi0, 2*np.pi) - if phi > 0.8 * np.pi: - phi = phi-2*np.pi - if deg: - phi *=180/np.pi - phi0*=180/np.pi - if phi<-190: - phi+=360 -# if debug: -# raise NotImplementedError() - return phi - -def input_output_amplitude_phase(t, u, y, omega_u=None, A_u=None, deg=True, mask=None, debug=False): - """ - Return amplitude ratio and phase shift between a reference input `u` and output `y` - Typically used when the input is a sinusoidal signal and the output is "similar". - - INPUTS: - - t: time vector, length nt - - u: input time series, length nt - - y: output time series, length nt - - omega_u: cyclic frequency, required to convert time offset to phase - when provided, amplitude ratio is computed for each possible periods, and averaged - - A_u : amplitude of input signal (typically known if y is a sinusoid) - - deg: phase is returned in degrees - - mask: mask to be applied to t, u, y - """ - if mask is not None: - t = t[mask] - u = u[mask] - y = y[mask] - if omega_u is None: - raise NotImplementedError() - T=None - else: - T = 2*np.pi/omega_u - - # --- Amplitude ratio - A_y = amplitude(y, t, T=T, debug=debug) - if A_u is None: - A_u = amplitude(u, t, T=T) - G = A_y/A_u - - # --- Phase shift - phi = phase_shift(u, y, t, omega_u, deg=deg, debug=debug) - - return G, phi - - -def sine_approx(t, x, method='least_square'): - """ - Sinusoidal approximation of input signal x - """ - if method=='least_square': - from welib.tools.curve_fitting import fit_sinusoid - y_fit, pfit, fitter = fit_sinusoid(t, x) - omega = fitter.model['coeffs']['omega'] - A = fitter.model['coeffs']['A'] - phi = fitter.model['coeffs']['phi'] - x2 = y_fit - else: - raise NotImplementedError() - - - return x2, omega, A, phi - - -# --------------------------------------------------------------------------------} -# --- Convolution -# --------------------------------------------------------------------------------{ -def convolution_integral(time, f, g, method='auto'): - r""" - Compute convolution integral: - f * g = \int 0^t f(tau) g(t-tau) dtau = g * f - For now, only works for uniform time vector, an exception is raised otherwise - - method=['auto','direct','fft'], - see scipy.signal.convolve - see scipy.signal.fftconvolve - """ - from scipy.signal import convolve - dt = time[1]-time[0] - if len(np.unique(np.around(np.diff(time)/dt,3)))>1: - raise Exception('Convolution integral implemented for uniform time vector') - - #np.convolve(f.ravel(), g.ravel() )[:len(time)]*dt - return convolve(f.ravel(), g.ravel() )[:len(time)]*dt - - -# --------------------------------------------------------------------------------} -# --- Intervals/peaks -# --------------------------------------------------------------------------------{ -def intervals(b, min_length=1, forgivingJump=True, removeSmallRel=True, removeSmallFact=0.1, mergeCloseRel=False, mergeCloseFact=0.2): - """ - Describe intervals from a boolean vector where intervals are indicated by True - - INPUT: - - b : a logical vector, where 1 means, I'm in an interval. - - min_length: if provided, do not return intervals of length < min_length - - forgivingJump: if true, merge intervals that are separated by a distance < min_length - - removeSmallRel: remove intervals that have a small length compared to the max length of intervals - - removeSmallFact: factor used for removeSmallRel - - mergeCloseRel: merge intervals that are closer than a fraction of the typical distance between intervals - - OUTPUTS: - - IStart : ending indices - - IEnd : ending indices - - Length: interval lenghts (IEnd-IStart+1) - - IStart, IEnd, Lengths = intervals([False, True, True, False, True, True, True, False]) - np.testing.assert_equal(IStart , np.array([1,4])) - np.testing.assert_equal(IEnd , np.array([2,6])) - np.testing.assert_equal(Lengths, np.array([2,3])) - """ - b = np.asarray(b) - total = np.sum(b) - - min_length=max(min_length,1) - if forgivingJump: - min_jump=min_length - else: - min_jump=1 - - if total==0: - IStart = np.array([]) - IEnd = np.array([]) - Lengths= np.array([]) - return IStart, IEnd, Lengths - elif total==1: - i = np.where(b)[0][0] - IStart = np.array([i]) - IEnd = np.array([i]) - Lengths= np.array([1]) - else: - n = len(b) - Idx = np.arange(n)[b] - delta_Idx=np.diff(Idx) - jumps =np.where(delta_Idx>min_jump)[0] - if len(jumps)==0: - IStart = np.array([Idx[0]]) - IEnd = np.array([Idx[-1]]) - else: - istart=Idx[0] - jumps=np.concatenate(([-1],jumps,[len(Idx)-1])) - IStart = Idx[jumps[:-1]+1] # intervals start right after a jump - IEnd = Idx[jumps[1:]] # intervals stops at jump - Lengths = IEnd-IStart+1 - - # Removing intervals smaller than min_length - bKeep = Lengths>=min_length - IStart = IStart[bKeep] - IEnd = IEnd[bKeep] - Lengths = Lengths[bKeep] - # Removing intervals smaller than less than a fraction of the max interval - if removeSmallRel: - bKeep = Lengths>=removeSmallFact*np.max(Lengths) - IStart = IStart[bKeep] - IEnd = IEnd[bKeep] - Lengths = Lengths[bKeep] - - # Distances between intervals - if mergeCloseRel: - if len(IStart)<=2: - pass - else: - D = IStart[1:]-IEnd[0:-1] - #print('D',D,np.max(D),int(np.max(D) * mergeCloseFact)) - min_length = max(int(np.max(D) * mergeCloseFact), min_length) - if min_length<=1: - pass - else: - #print('Readjusting min_length to {} to accomodate for max interval spacing of {:.0f}'.format(min_length, np.mean(D))) - return intervals(b, min_length=min_length, forgivingJump=True, removeSmallRel=removeSmallRel, removeSmallFact=removeSmallFact, mergeCloseRel=False) - return IStart, IEnd, Lengths - -def peaks(x, threshold=0.3, threshold_abs=True, method='intervals', min_length=3, - mergeCloseRel=True, returnIntervals=False): - """ - Find peaks in a signal, above a given threshold - INPUTS: - - x : 1d-array, signal - - threshold : scalar, absolute or relative threshold beyond which peaks are looked for - relative threshold are proportion of the max-min of the signal (between 0-1) - - threshold_abs : boolean, specify whether the threshold is absolute or relative - - method : string, selects which method is used to find the peaks, between: - - 'interval' : one peak per interval above the threshold - - 'derivative': uses derivative to find maxima, may return more than one per interval - - min_length: - - if 'interval' method is used: minimum interval - - if 'derivative' method is used: minimum distance between two peaks - - OPTIONS for interval method: - - mergeCloseRel: logical, if True, attempts to merge intervals that are close to each other compare to the typical interval spacing - set to False if all peaks are wanted - - returnIntervals: logical, if true, return intervals used for interval method - OUTPUTS: - - I : index of the peaks - -[IStart, IEnd] if return intervals is true, see function `intervals` - - - see also: - scipy.signal.find_peaks - - """ - if not threshold_abs: - threshold = threshold * (np.max(y) - np.min(y)) + np.min(y) - - if method =='intervals': - IStart, IEnd, Lengths = intervals(x>threshold, min_length=min_length, mergeCloseRel=mergeCloseRel) - I = np.array([iS if L==1 else np.argmax(x[iS:iE+1])+iS for iS,iE,L in zip(IStart,IEnd,Lengths)]) - if returnIntervals: - return I, IStart, IEnd - else: - return I - - elif method =='derivative': - I = indexes(x, thres=threshold, thres_abs=True, min_dist=min_length) - return I - else: - raise NotImplementedError('Method {}'.format(method)) - - - -# --------------------------------------------------------------------------------} -# --- Simple signals -# --------------------------------------------------------------------------------{ -def impulse(time, t0=0, A=1, epsilon=None, **kwargs): - """ - returns a dirac function: - A/dt if t==t0 - 0 otherwise - - Since the impulse response is poorly defined in discrete space, it's recommended - to use a smooth_delta. See the welib.tools.functions.delta - """ - from .functions import delta - t=np.asarray(time)-t0 - y= delta(t, epsilon=epsilon, **kwargs)*A - return y - -def step(time, t0=0, valueAtStep=0, A=1): - """ - returns a step function: - 0 if tt0 - valueAtStep if t==t0 - - NOTE: see also welib.tools.functions.Pi - """ - return np.heaviside(time-t0, valueAtStep)*A - -def ramp(time, t0=0, valueAtStep=0, A=1): - """ - returns a ramp function: - 0 if t=t0 - - NOTE: see also welib.tools.functions.Pi - """ - t=np.asarray(time)-t0 - y=np.zeros(t.shape) - y[t>=0]=A*t[t>=0] - return y - - -def hat(time, T=1, t0=0, A=1, method='abs'): - """ - returns a hat function: - A*hat if |t-t0|0.01: - print('[WARN] dt from tmax-tmin different from dt from t2-t1 {} {}'.format(dt, dtDelta0) ) - Fs = 1/dt - if averaging =='none': - frq, PSD, Info = psd(y, fs=Fs, detrend=detrend, return_onesided=True) - elif averaging =='binning': - frq, PSD, Info = psd_binned(y, fs=Fs, detrend=detrend, return_onesided=True, nPerDecade=nPerDecade) - elif averaging=='welch': - # --- Welch - PSD - #overlap_frac=0.5 - #return fnextpow2(np.sqrt(len(x)/(1-overlap_frac))) - nFFTAll=fnextpow2(n) - if nExp is None: - nExp=int(np.log(nFFTAll)/np.log(2))-1 - nPerSeg=2**nExp - if nPerSeg>n: - print('[WARN] Power of 2 value was too high and was reduced. Disable averaging to use the full spectrum.'); - nExp=int(np.log(nFFTAll)/np.log(2))-1 - nPerSeg=2**nExp - if averaging_window=='hamming': - window = hamming(nPerSeg, True)# True=Symmetric, like matlab - elif averaging_window=='hann': - window = hann(nPerSeg, True) - elif averaging_window=='rectangular': - window = boxcar(nPerSeg) - else: - raise Exception('Averaging window unknown {}'.format(averaging_window)) - frq, PSD, Info = pwelch(y, fs=Fs, window=window, detrend=detrend) - Info.nExp = nExp - else: - raise Exception('Averaging method unknown {}'.format(averaging)) - - # --- Formatting output - if output_type=='amplitude': - deltaf = frq[1]-frq[0] - Y = np.sqrt(PSD*2*deltaf) - # NOTE: the above should be the same as:Y=abs(Y[range(nhalf)])/n;Y[1:-1]=Y[1:-1]*2; - elif output_type=='psd': # one sided - Y = PSD - elif output_type=='f x psd': - Y = PSD*frq - else: - raise NotImplementedError('Contact developer') - if detrend: - frq= frq[1:] - Y = Y[1:] - return frq, Y, Info - - - -# --------------------------------------------------------------------------------} -# --- Spectral simple (averaging below) -# --------------------------------------------------------------------------------{ -def fft_amplitude(y, fs=1.0, detrend ='constant', return_onesided=True): - """ Returns FFT amplitude of signal """ - frq, PSD, Info = psd(y, fs=fs, detrend=detrend, return_onesided=return_onesided) - deltaf = frq[1]-frq[0] - Y = np.sqrt(PSD*2*deltaf) - return frq, Y, Info - - -def psd_binned(y, fs=1.0, nPerDecade=10, detrend ='constant', return_onesided=True): - """ - Return PSD binned with nPoints per decade - """ - # --- First return regular PSD - frq, PSD, Info = psd(y, fs=fs, detrend=detrend, return_onesided=return_onesided) - - add0=False - if frq[0]==0: - add0=True - f0 = 0 - PSD0 = PSD[0] - frq=frq[1:] - PSD=PSD[1:] - - # -- Then bin per decase - log_f = np.log10(frq) - ndecades = np.ceil(log_f[-1] -log_f[0]) - xbins = np.linspace(log_f[0], log_f[-1], int(ndecades*nPerDecade)) - - # Using Pandas to bin.. - df = pd.DataFrame(data=np.column_stack((log_f,PSD)), columns=['x','y']) - xmid = (xbins[:-1]+xbins[1:])/2 - df['Bin'] = pd.cut(df['x'], bins=xbins, labels=xmid ) # Adding a column that has bin attribute - df2 = df.groupby('Bin', observed=False).mean() # Average by bin - df2 = df2.reindex(xmid) - log_f_bin = df2['x'].values - PSD_bin = df2['y'].values - frq2= 10**log_f_bin - PSD2= PSD_bin - if add0: - frq2=np.concatenate( ([f0 ], frq2) ) - PSD2=np.concatenate( ([PSD0], PSD2) ) - b = ~np.isnan(frq2) - frq2 = frq2[b] - PSD2 = PSD2[b] - - #import matplotlib.pyplot as plt - #fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - #fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - #ax.plot(log_f, PSD, label='') - #ax.plot(log_f_bin, PSD_bin, 'o', label='') - #for x in xbins: - # ax.axvline(x, ls=':', c=(0.5,0.5,0.5)) - #ax.set_xlabel('') - #ax.set_ylabel('') - #ax.legend() - #plt.show() - - #Info.df = frq[1]-frq[0] - #Info.fMax = frq[-1] - #Info.LFreq = len(frq) - #Info.LSeg = len(Y) - #Info.LWin = len(Y) - #Info.LOvlp = 0 - #Info.nFFT = len(Y) - #Info.nseg = 1 - Info.nPerDecade = nPerDecade - Info.xbins = xbins - - return frq2, PSD2, Info - - -def psd(y, fs=1.0, detrend ='constant', return_onesided=True): - """ Perform PSD without averaging """ - if not return_onesided: - raise NotImplementedError('Double sided todo') - - if detrend is None: - detrend=False - - if detrend=='constant' or detrend==True: - m=np.mean(y); - else: - m=0; - - n = len(y) - if n%2==0: - nhalf = int(n/2+1) - else: - nhalf = int((n+1)/2) - - frq = np.arange(nhalf)*fs/n; - Y = np.fft.rfft(y-m) #Y = np.fft.fft(y) - PSD = abs(Y[range(nhalf)])**2 /(n*fs) # PSD - PSD[1:-1] = PSD[1:-1]*2; - class InfoClass(): - pass - Info = InfoClass(); - Info.df = frq[1]-frq[0] - Info.fMax = frq[-1] - Info.LFreq = len(frq) - Info.LSeg = len(Y) - Info.LWin = len(Y) - Info.LOvlp = 0 - Info.nFFT = len(Y) - Info.nseg = 1 - return frq, PSD, Info - - -# --------------------------------------------------------------------------------} -# --- Windows -# --------------------------------------------------------------------------------{ -"""The suite of window functions.""" -def fnextpow2(x): - return 2**np.ceil( np.log(x)*0.99999999999/np.log(2)); - -def fDefaultWinLen(x,overlap_frac=0.5): - return fnextpow2(np.sqrt(len(x)/(1-overlap_frac))) - -def fDefaultWinLenMatlab(x): - return np.fix((len(x)-3)*2./9.) - -def _len_guards(M): - """Handle small or incorrect window lengths""" - if int(M) != M or M < 0: - raise ValueError('Window length M must be a non-negative integer') - return M <= 1 - -def _extend(M, sym): - """Extend window by 1 sample if needed for DFT-even symmetry""" - if not sym: - return M + 1, True - else: - return M, False - -def _truncate(w, needed): - """Truncate window by 1 sample if needed for DFT-even symmetry""" - if needed: - return w[:-1] - else: - return w - -def general_cosine(M, a, sym=True): - if _len_guards(M): - return np.ones(M) - M, needs_trunc = _extend(M, sym) - - fac = np.linspace(-np.pi, np.pi, M) - w = np.zeros(M) - for k in range(len(a)): - w += a[k] * np.cos(k * fac) - - return _truncate(w, needs_trunc) - - -def boxcar(M, sym=True): - """Return a boxcar or rectangular window. - - Also known as a rectangular window or Dirichlet window, this is equivalent - to no window at all. - """ - if _len_guards(M): - return np.ones(M) - M, needs_trunc = _extend(M, sym) - - w = np.ones(M, float) - - return _truncate(w, needs_trunc) - -def hann(M, sym=True): # same as hanning(*args, **kwargs): - return general_hamming(M, 0.5, sym) - - -def general_hamming(M, alpha, sym=True): - r"""Return a generalized Hamming window. - The generalized Hamming window is constructed by multiplying a rectangular - window by one period of a cosine function [1]_. - w(n) = \alpha - \left(1 - \alpha\right) \cos\left(\frac{2\pi{n}}{M-1}\right) - \qquad 0 \leq n \leq M-1 - """ - return general_cosine(M, [alpha, 1. - alpha], sym) - - -def hamming(M, sym=True): - r"""Return a Hamming window. - The Hamming window is a taper formed by using a raised cosine with - non-zero endpoints, optimized to minimize the nearest side lobe. - w(n) = 0.54 - 0.46 \cos\left(\frac{2\pi{n}}{M-1}\right) - \qquad 0 \leq n \leq M-1 - """ - return general_hamming(M, 0.54, sym) - -_win_equiv_raw = { - ('boxcar', 'box', 'ones', 'rect', 'rectangular'): (boxcar, False), - ('hamming', 'hamm', 'ham'): (hamming, False), - ('hanning', 'hann', 'han'): (hann, False), -} - -# Fill dict with all valid window name strings -_win_equiv = {} -for k, v in _win_equiv_raw.items(): - for key in k: - _win_equiv[key] = v[0] - -# Keep track of which windows need additional parameters -_needs_param = set() -for k, v in _win_equiv_raw.items(): - if v[1]: - _needs_param.update(k) - - -def get_window(window, Nx, fftbins=True): - """ - Return a window. - - Parameters - ---------- - window : string, float, or tuple - The type of window to create. See below for more details. - Nx : int - The number of samples in the window. - fftbins : bool, optional - If True (default), create a "periodic" window, ready to use with - `ifftshift` and be multiplied by the result of an FFT (see also - `fftpack.fftfreq`). - If False, create a "symmetric" window, for use in filter design. - """ - sym = not fftbins - try: - beta = float(window) - except (TypeError, ValueError): - args = () - if isinstance(window, tuple): - winstr = window[0] - if len(window) > 1: - args = window[1:] - elif isinstance(window, string_types): - if window in _needs_param: - raise ValueError("The '" + window + "' window needs one or " - "more parameters -- pass a tuple.") - else: - winstr = window - else: - raise ValueError("%s as window type is not supported." % - str(type(window))) - - try: - winfunc = _win_equiv[winstr] - except KeyError: - raise ValueError("Unknown window type.") - - params = (Nx,) + args + (sym,) - else: - winfunc = kaiser - params = (Nx, beta, sym) - - return winfunc(*params) - - - - - - -# --------------------------------------------------------------------------------} -# --- Helpers -# --------------------------------------------------------------------------------{ -def odd_ext(x, n, axis=-1): - """ - Odd extension at the boundaries of an array - Generate a new ndarray by making an odd extension of `x` along an axis. - """ - if n < 1: - return x - if n > x.shape[axis] - 1: - raise ValueError(("The extension length n (%d) is too big. " + - "It must not exceed x.shape[axis]-1, which is %d.") - % (n, x.shape[axis] - 1)) - left_end = axis_slice(x, start=0, stop=1, axis=axis) - left_ext = axis_slice(x, start=n, stop=0, step=-1, axis=axis) - right_end = axis_slice(x, start=-1, axis=axis) - right_ext = axis_slice(x, start=-2, stop=-(n + 2), step=-1, axis=axis) - ext = np.concatenate((2 * left_end - left_ext, - x, - 2 * right_end - right_ext), - axis=axis) - return ext - - -def even_ext(x, n, axis=-1): - """ - Even extension at the boundaries of an array - Generate a new ndarray by making an even extension of `x` along an axis. - """ - if n < 1: - return x - if n > x.shape[axis] - 1: - raise ValueError(("The extension length n (%d) is too big. " + - "It must not exceed x.shape[axis]-1, which is %d.") - % (n, x.shape[axis] - 1)) - left_ext = axis_slice(x, start=n, stop=0, step=-1, axis=axis) - right_ext = axis_slice(x, start=-2, stop=-(n + 2), step=-1, axis=axis) - ext = np.concatenate((left_ext, - x, - right_ext), - axis=axis) - return ext - - -def const_ext(x, n, axis=-1): - """ - Constant extension at the boundaries of an array - Generate a new ndarray that is a constant extension of `x` along an axis. - The extension repeats the values at the first and last element of - the axis. - """ - if n < 1: - return x - left_end = axis_slice(x, start=0, stop=1, axis=axis) - ones_shape = [1] * x.ndim - ones_shape[axis] = n - ones = np.ones(ones_shape, dtype=x.dtype) - left_ext = ones * left_end - right_end = axis_slice(x, start=-1, axis=axis) - right_ext = ones * right_end - ext = np.concatenate((left_ext, - x, - right_ext), - axis=axis) - return ext - - -def zero_ext(x, n, axis=-1): - """ - Zero padding at the boundaries of an array - Generate a new ndarray that is a zero padded extension of `x` along - an axis. - """ - if n < 1: - return x - zeros_shape = list(x.shape) - zeros_shape[axis] = n - zeros = np.zeros(zeros_shape, dtype=x.dtype) - ext = np.concatenate((zeros, x, zeros), axis=axis) - return ext - -def signaltools_detrend(data, axis=-1, type='linear', bp=0): - """ - Remove linear trend along axis from data. - - Parameters - ---------- - data : array_like - The input data. - axis : int, optional - The axis along which to detrend the data. By default this is the - last axis (-1). - type : {'linear', 'constant'}, optional - The type of detrending. If ``type == 'linear'`` (default), - the result of a linear least-squares fit to `data` is subtracted - from `data`. - If ``type == 'constant'``, only the mean of `data` is subtracted. - bp : array_like of ints, optional - A sequence of break points. If given, an individual linear fit is - performed for each part of `data` between two break points. - Break points are specified as indices into `data`. - - Returns - ------- - ret : ndarray - The detrended input data. - """ - if type not in ['linear', 'l', 'constant', 'c']: - raise ValueError("Trend type must be 'linear' or 'constant'.") - data = np.asarray(data) - dtype = data.dtype.char - if dtype not in 'dfDF': - dtype = 'd' - if type in ['constant', 'c']: - #print('Removing mean') - ret = data - np.expand_dims(np.mean(data, axis), axis) - return ret - else: - #print('Removing linear?') - dshape = data.shape - N = dshape[axis] - bp = sort(unique(r_[0, bp, N])) - if np.any(bp > N): - raise ValueError("Breakpoints must be less than length " - "of data along given axis.") - Nreg = len(bp) - 1 - # Restructure data so that axis is along first dimension and - # all other dimensions are collapsed into second dimension - rnk = len(dshape) - if axis < 0: - axis = axis + rnk - newdims = r_[axis, 0:axis, axis + 1:rnk] - newdata = reshape(np.transpose(data, tuple(newdims)), - (N, _prod(dshape) // N)) - newdata = newdata.copy() # make sure we have a copy - if newdata.dtype.char not in 'dfDF': - newdata = newdata.astype(dtype) - # Find leastsq fit and remove it for each piece - for m in range(Nreg): - Npts = bp[m + 1] - bp[m] - A = ones((Npts, 2), dtype) - A[:, 0] = cast[dtype](np.arange(1, Npts + 1) * 1.0 / Npts) - sl = slice(bp[m], bp[m + 1]) - coef, resids, rank, s = np.linalg.lstsq(A, newdata[sl]) - newdata[sl] = newdata[sl] - dot(A, coef) - # Put data back in original shape. - tdshape = take(dshape, newdims, 0) - ret = np.reshape(newdata, tuple(tdshape)) - vals = list(range(1, rnk)) - olddims = vals[:axis] + [0] + vals[axis:] - ret = np.transpose(ret, tuple(olddims)) - return ret - - - -# --------------------------------------------------------------------------------} -# --- Spectral Averaging -# --------------------------------------------------------------------------------{ -"""Tools for spectral analysis. """ - -def welch(x, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None, - detrend='constant', return_onesided=True, scaling='density', - axis=-1): - """Interface identical to scipy.signal """ - - if detrend==True: - detrend='constant' - - freqs, Pxx = csd(x, x, fs, window, nperseg, noverlap, nfft, detrend, return_onesided, scaling, axis) - return freqs, Pxx.real - -#>>>> -def pwelch(x, window='hamming', noverlap=None, nfft=None, fs=1.0, nperseg=None, - detrend=False, return_onesided=True, scaling='density', - axis=-1): - r""" - NOTE: interface and default options modified to match matlab's implementation - >> detrend: default to False - >> window : default to 'hamming' - >> window: if an integer, use 'hamming(window, sym=True)' - - - Estimate power spectral density using Welch's method. - - Welch's method [1]_ computes an estimate of the power spectral - density by dividing the data into overlapping segments, computing a - modified periodogram for each segment and averaging the - periodograms. - - Parameters - ---------- - x : array_like - Time series of measurement values - fs : float, optional - Sampling frequency of the `x` time series. Defaults to 1.0. - window : str or tuple or array_like, optional - Desired window to use. If `window` is a string or tuple, it is - passed to `get_window` to generate the window values, which are - DFT-even by default. See `get_window` for a list of windows and - required parameters. If `window` is array_like it will be used - directly as the window and its length must be nperseg. Defaults - to a Hann window. - nperseg : int, optional - Length of each segment. Defaults to None, but if window is str or - tuple, is set to 256, and if window is array_like, is set to the - length of the window. - noverlap : int, optional - Number of points to overlap between segments. If `None`, - ``noverlap = nperseg // 2``. Defaults to `None`. - nfft : int, optional - Length of the FFT used, if a zero padded FFT is desired. If - `None`, the FFT length is `nperseg`. Defaults to `None`. - detrend : str or function or `False`, optional - Specifies how to detrend each segment. If `detrend` is a - string, it is passed as the `type` argument to the `detrend` - function. If it is a function, it takes a segment and returns a - detrended segment. If `detrend` is `False`, no detrending is - done. Defaults to 'constant'. - return_onesided : bool, optional - If `True`, return a one-sided spectrum for real data. If - `False` return a two-sided spectrum. Note that for complex - data, a two-sided spectrum is always returned. - scaling : { 'density', 'spectrum' }, optional - Selects between computing the power spectral density ('density') - where `Pxx` has units of V**2/Hz and computing the power - spectrum ('spectrum') where `Pxx` has units of V**2, if `x` - is measured in V and `fs` is measured in Hz. Defaults to - 'density' - axis : int, optional - Axis along which the periodogram is computed; the default is - over the last axis (i.e. ``axis=-1``). - - Returns - ------- - f : ndarray - Array of sample frequencies. - Pxx : ndarray - Power spectral density or power spectrum of x. - - See Also - -------- - periodogram: Simple, optionally modified periodogram - lombscargle: Lomb-Scargle periodogram for unevenly sampled data - - Notes - ----- - An appropriate amount of overlap will depend on the choice of window - and on your requirements. For the default Hann window an overlap of - 50% is a reasonable trade off between accurately estimating the - signal power, while not over counting any of the data. Narrower - windows may require a larger overlap. - - If `noverlap` is 0, this method is equivalent to Bartlett's method - [2]_. - - .. versionadded:: 0.12.0 - - References - ---------- - .. [1] P. Welch, "The use of the fast Fourier transform for the - estimation of power spectra: A method based on time averaging - over short, modified periodograms", IEEE Trans. Audio - Electroacoust. vol. 15, pp. 70-73, 1967. - .. [2] M.S. Bartlett, "Periodogram Analysis and Continuous Spectra", - Biometrika, vol. 37, pp. 1-16, 1950. - - """ - import math - def fnextpow2(x): - return 2**math.ceil( math.log(x)*0.99999999999/math.log(2)); - - # MANU >>> CHANGE OF DEFAULT OPTIONS - # MANU - If a length is provided use symmetric hamming window - if type(window)==int: - window=hamming(window, True) - # MANU - do not use 256 as default - if isinstance(window, string_types) or isinstance(window, tuple): - if nperseg is None: - if noverlap is None: - overlap_frac=0.5 - elif noverlap == 0: - overlap_frac=0 - else: - raise NotImplementedError('TODO noverlap set but not nperseg') - #nperseg = 256 # then change to default - nperseg=fnextpow2(math.sqrt(x.shape[-1]/(1-overlap_frac))); - - # MANU accepting true as detrend - if detrend==True: - detrend='constant' - - freqs, Pxx, Info = csd(x, x, fs, window, nperseg, noverlap, nfft, detrend, - return_onesided, scaling, axis, returnInfo=True) - - return freqs, Pxx.real, Info - - -def csd(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None, - detrend='constant', return_onesided=True, scaling='density', axis=-1, - returnInfo=False - ): - r""" - Estimate the cross power spectral density, Pxy, using Welch's - method. - """ - - freqs, _, Pxy, Info = _spectral_helper(x, y, fs, window, nperseg, noverlap, nfft, - detrend, return_onesided, scaling, axis, - mode='psd') - - # Average over windows. - if len(Pxy.shape) >= 2 and Pxy.size > 0: - if Pxy.shape[-1] > 1: - Pxy = Pxy.mean(axis=-1) - else: - Pxy = np.reshape(Pxy, Pxy.shape[:-1]) - - if returnInfo: - return freqs, Pxy, Info - else: - return freqs, Pxy - - - -def coherence(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, - nfft=None, detrend='constant', axis=-1): - r""" - Estimate the magnitude squared coherence estimate, Cxy, of - discrete-time signals X and Y using Welch's method. - - ``Cxy = abs(Pxy)**2/(Pxx*Pyy)``, where `Pxx` and `Pyy` are power - spectral density estimates of X and Y, and `Pxy` is the cross - spectral density estimate of X and Y. - """ - - freqs, Pxx, Infoxx = welch(x, fs, window, nperseg, noverlap, nfft, detrend, axis=axis) - _, Pyy, Infoyy = welch(y, fs, window, nperseg, noverlap, nfft, detrend, axis=axis) - _, Pxy, Infoxy = csd(x, y, fs, window, nperseg, noverlap, nfft, detrend, axis=axis, returnInfo=True) - - Cxy = np.abs(Pxy)**2 / Pxx / Pyy - - return freqs, Cxy, Infoxx - - -def _spectral_helper(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, - nfft=None, detrend='constant', return_onesided=True, - scaling='spectrum', axis=-1, mode='psd', boundary=None, - padded=False): - """ Calculate various forms of windowed FFTs for PSD, CSD, etc. """ - if mode not in ['psd', 'stft']: - raise ValueError("Unknown value for mode %s, must be one of: " - "{'psd', 'stft'}" % mode) - - - - - - boundary_funcs = {'even': even_ext, - 'odd': odd_ext, - 'constant': const_ext, - 'zeros': zero_ext, - None: None} - - if boundary not in boundary_funcs: - raise ValueError("Unknown boundary option '{0}', must be one of: {1}" - .format(boundary, list(boundary_funcs.keys()))) - - # If x and y are the same object we can save ourselves some computation. - same_data = y is x - - if not same_data and mode != 'psd': - raise ValueError("x and y must be equal if mode is 'stft'") - - axis = int(axis) - - # Ensure we have np.arrays, get outdtype - x = np.asarray(x) - if not same_data: - y = np.asarray(y) - outdtype = np.result_type(x, y, np.complex64) - else: - outdtype = np.result_type(x, np.complex64) - - if not same_data: - # Check if we can broadcast the outer axes together - xouter = list(x.shape) - youter = list(y.shape) - xouter.pop(axis) - youter.pop(axis) - try: - outershape = np.broadcast(np.empty(xouter), np.empty(youter)).shape - except ValueError: - raise ValueError('x and y cannot be broadcast together.') - - if same_data: - if x.size == 0: - return np.empty(x.shape), np.empty(x.shape), np.empty(x.shape) - else: - if x.size == 0 or y.size == 0: - outshape = outershape + (min([x.shape[axis], y.shape[axis]]),) - emptyout = np.rollaxis(np.empty(outshape), -1, axis) - return emptyout, emptyout, emptyout - - if x.ndim > 1: - if axis != -1: - x = np.rollaxis(x, axis, len(x.shape)) - if not same_data and y.ndim > 1: - y = np.rollaxis(y, axis, len(y.shape)) - - # Check if x and y are the same length, zero-pad if necessary - if not same_data: - if x.shape[-1] != y.shape[-1]: - if x.shape[-1] < y.shape[-1]: - pad_shape = list(x.shape) - pad_shape[-1] = y.shape[-1] - x.shape[-1] - x = np.concatenate((x, np.zeros(pad_shape)), -1) - else: - pad_shape = list(y.shape) - pad_shape[-1] = x.shape[-1] - y.shape[-1] - y = np.concatenate((y, np.zeros(pad_shape)), -1) - - if nperseg is not None: # if specified by user - nperseg = int(nperseg) - if nperseg < 1: - raise ValueError('nperseg must be a positive integer') - - # parse window; if array like, then set nperseg = win.shape - win, nperseg = _triage_segments(window, nperseg,input_length=x.shape[-1]) - - if nfft is None: - nfft = nperseg - elif nfft < nperseg: - raise ValueError('nfft must be greater than or equal to nperseg.') - else: - nfft = int(nfft) - - if noverlap is None: - noverlap = nperseg//2 - else: - noverlap = int(noverlap) - if noverlap >= nperseg: - raise ValueError('noverlap must be less than nperseg.') - nstep = nperseg - noverlap - - # Padding occurs after boundary extension, so that the extended signal ends - # in zeros, instead of introducing an impulse at the end. - # I.e. if x = [..., 3, 2] - # extend then pad -> [..., 3, 2, 2, 3, 0, 0, 0] - # pad then extend -> [..., 3, 2, 0, 0, 0, 2, 3] - - if boundary is not None: - ext_func = boundary_funcs[boundary] - x = ext_func(x, nperseg//2, axis=-1) - if not same_data: - y = ext_func(y, nperseg//2, axis=-1) - - if padded: - # Pad to integer number of windowed segments - # I.e make x.shape[-1] = nperseg + (nseg-1)*nstep, with integer nseg - nadd = (-(x.shape[-1]-nperseg) % nstep) % nperseg - zeros_shape = list(x.shape[:-1]) + [nadd] - x = np.concatenate((x, np.zeros(zeros_shape)), axis=-1) - if not same_data: - zeros_shape = list(y.shape[:-1]) + [nadd] - y = np.concatenate((y, np.zeros(zeros_shape)), axis=-1) - - # Handle detrending and window functions - if not detrend: - def detrend_func(d): - return d - elif not hasattr(detrend, '__call__'): - def detrend_func(d): - return signaltools_detrend(d, type=detrend, axis=-1) - elif axis != -1: - # Wrap this function so that it receives a shape that it could - # reasonably expect to receive. - def detrend_func(d): - d = np.rollaxis(d, -1, axis) - d = detrend(d) - return np.rollaxis(d, axis, len(d.shape)) - else: - detrend_func = detrend - - if np.result_type(win,np.complex64) != outdtype: - win = win.astype(outdtype) - - if scaling == 'density': - scale = 1.0 / (fs * (win*win).sum()) - elif scaling == 'spectrum': - scale = 1.0 / win.sum()**2 - else: - raise ValueError('Unknown scaling: %r' % scaling) - - if mode == 'stft': - scale = np.sqrt(scale) - - if return_onesided: - if np.iscomplexobj(x): - sides = 'twosided' - #warnings.warn('Input data is complex, switching to ' 'return_onesided=False') - else: - sides = 'onesided' - if not same_data: - if np.iscomplexobj(y): - sides = 'twosided' - #warnings.warn('Input data is complex, switching to return_onesided=False') - else: - sides = 'twosided' - - if sides == 'twosided': - raise Exception('NOT IMPLEMENTED') - #freqs = fftpack.fftfreq(nfft, 1/fs) - elif sides == 'onesided': - freqs = np.fft.rfftfreq(nfft, 1/fs) - - # Perform the windowed FFTs - result = _fft_helper(x, win, detrend_func, nperseg, noverlap, nfft, sides) - - if not same_data: - # All the same operations on the y data - result_y = _fft_helper(y, win, detrend_func, nperseg, noverlap, nfft, - sides) - result = np.conjugate(result) * result_y - elif mode == 'psd': - result = np.conjugate(result) * result - - result *= scale - if sides == 'onesided' and mode == 'psd': - if nfft % 2: - result[..., 1:] *= 2 - else: - # Last point is unpaired Nyquist freq point, don't double - result[..., 1:-1] *= 2 - - time = np.arange(nperseg/2, x.shape[-1] - nperseg/2 + 1, - nperseg - noverlap)/float(fs) - if boundary is not None: - time -= (nperseg/2) / fs - - result = result.astype(outdtype) - - # All imaginary parts are zero anyways - if same_data and mode != 'stft': - result = result.real - - # Output is going to have new last axis for time/window index, so a - # negative axis index shifts down one - if axis < 0: - axis -= 1 - - # Roll frequency axis back to axis where the data came from - result = np.rollaxis(result, -1, axis) - - # TODO - class InfoClass(): - pass - Info = InfoClass(); - Info.df=freqs[1]-freqs[0] - Info.fMax=freqs[-1] - Info.LFreq=len(freqs) - Info.LSeg=nperseg - Info.LWin=len(win) - Info.LOvlp=noverlap - Info.nFFT=nfft - Info.nseg=-1 - #print('df:{:.3f} - fm:{:.2f} - nseg:{} - Lf:{:5d} - Lseg:{:5d} - Lwin:{:5d} - Lovlp:{:5d} - Nfft:{:5d} - Lsig:{}'.format(freqs[1]-freqs[0],freqs[-1],-1,len(freqs),nperseg,len(win),noverlap,nfft,x.shape[-1])) - return freqs, time, result, Info - - -def _fft_helper(x, win, detrend_func, nperseg, noverlap, nfft, sides): - """ Calculate windowed FFT """ - # Created strided array of data segments - if nperseg == 1 and noverlap == 0: - result = x[..., np.newaxis] - else: - # http://stackoverflow.com/a/5568169 - step = nperseg - noverlap - shape = x.shape[:-1]+((x.shape[-1]-noverlap)//step, nperseg) - strides = x.strides[:-1]+(step*x.strides[-1], x.strides[-1]) - result = np.lib.stride_tricks.as_strided(x, shape=shape, - strides=strides) - - # Detrend each data segment individually - result = detrend_func(result) - - # Apply window by multiplication - result = win * result - - # Perform the fft. Acts on last axis by default. Zero-pads automatically - if sides == 'twosided': - raise Exception('NOT IMPLEMENTED') - #func = fftpack.fft - else: - result = result.real - func = np.fft.rfft - result = func(result, n=nfft) - - return result - -def _triage_segments(window, nperseg,input_length): - """ - Parses window and nperseg arguments for spectrogram and _spectral_helper. - This is a helper function, not meant to be called externally. - """ - - #parse window; if array like, then set nperseg = win.shape - if isinstance(window, string_types) or isinstance(window, tuple): - # if nperseg not specified - if nperseg is None: - nperseg = 256 # then change to default - if nperseg > input_length: - print('nperseg = {0:d} is greater than input length ' - ' = {1:d}, using nperseg = {1:d}' - .format(nperseg, input_length)) - nperseg = input_length - win = get_window(window, nperseg) - else: - win = np.asarray(window) - if len(win.shape) != 1: - raise ValueError('window must be 1-D') - if input_length < win.shape[-1]: - raise ValueError('window is longer than input signal') - if nperseg is None: - nperseg = win.shape[0] - elif nperseg is not None: - if nperseg != win.shape[0]: - raise ValueError("value specified for nperseg is different from" - " length of window") - - return win, nperseg - - - - -# -------------------------------------------------------------------------------- -# --- Simple implementations to figure out the math -# -------------------------------------------------------------------------------- -def DFT(x, method='vectorized'): - """ - Calculate the Discrete Fourier Transform (DFT) of real signal x - - Definition: - for k in 0..N-1 (but defined for k in ZZ, see below for index) - - X_k = sum_n=0^{N-1} x_n e^{-i 2 pi k n /N} - - = sum_n=0^{N-1} x_n [ cos( 2 pi k n /N) - i sin( 2 pi k n /N) - - Xk are complex numbers. The amplitude/phase are: - A = |X_k|/N - phi = atan2(Im(Xk) / Re(Xk) - - Indices: - The DFT creates a periodic signal of period N - X[k] = X[k+N] - X[-k] = X[N-k] - - Therefore, any set of successive indices could be used. - For instance, with N=4: [0,1,2,3], [-1,0,1,2], [-2,-1,0,1] (canonical one) - [0,..N/2-1], [-N/2, ..N/2-1] - - If N is even - 0 is the 0th frequency (mean) - 1.....N/2-1 terms corresponds to positive frequencies - N/2.....N-1 terms corresponds to negative frequencies - If N is odd - 0 is the 0th frequency (mean) - 1.....(N-1)/2 terms corresponds to positive frequencies - (N+1)/2..N-1 terms corresponds to negative frequencies - - Frequencies convention: (see np.fft.fftfreq and DFT_freq) - f = [0, 1, ..., n/2-1, -n/2, ..., -1] / (dt*n) if n is even - f = [0, 1, ..., (n-1)/2, -(n-1)/2, ..., -1] / (dt*n) if n is odd - - NOTE: when n is even you could chose to go to +n/2 and start at -n/2+1 - The Python convention goes to n/2-1 and start at -n/2. - - Properties: - - if x is a real signal - X[-k] = X*[k] (=X[N-k]) - - Parseval's theorem: sum |x_n|^2 = sum |X_k|^2 (energy conservation) - - - """ - N = len(x) - - if method=='naive': - X = np.zeros_like(x, dtype=complex) - for k in np.arange(N): - for n in np.arange(N): - X[k] += x[n] * np.exp(-1j * 2*np.pi * k * n / N) - - elif method=='vectorized': - n = np.arange(N) - k = n.reshape((N, 1)) # k*n will be of shape (N x N) - e = np.exp(-2j * np.pi * k * n / N) - X = np.dot(e, x) - elif method=='fft': - X = np.fft.fft(x) - elif method=='fft_py': - X = recursive_fft(x) - else: - raise NotImplementedError() - - return X - -def IDFT(X, method='vectorized'): - """ - Calculate the Inverse Discrete Fourier Transform (IDFT) of complex coefficients X - - The transformation DFT->IDFT is fully reversible - - Definition: - for n in 0..N-1: - - x_n = 1/N sum_k=0^{N-1} X_k e^{i 2 pi k n/N} - = 1/N sum_k=0^{N-1} X_k [ cos( 2 pi k n/N) + i sin( 2 pi k n/N) - = 1/N sum_k=0^{N-1} A_k [ cos( 2 pi k n/N + phi_k) + i sin( 2 pi k n/N + phi_k) - - Xk are complex numbers, that can be written X[k] = A[k] e^{j phi[k]} therefore. - - Properties: - - if the "X" given as input come from a DFT, then the coefficients are periodic with period N - Therefore - X[-k] = X[N-k], - X[k] = X[N+k] - and therefore (see the discussion in the documentation of DFT), the summation from - k=0 to N-1 can be interpreted as a summation over any other indices set of length N. - - if "X" comes for the DFT of x, where x is a real signal, then: - X[-k] = X*[k] (=X[N-k]) - - - a converse is that, if X has conjugate symmetry (X[k]=X*[N-k]), then the IDFT will be real: - - x_n = 1/N sum_k=0^{N-1} A_k cos( 2 pi k n/N + phi_k) - 1/N sum_k={-(N-1)/2}^{(N-1)/2} A_k cos( 2 pi k n/N + phi_k) - - But remember that the A_k and phi_k need to satisfy the conjugate symmetry, so they are not - fully independent. - If we want x to be the sum over "N0" independent components, then we need to do the IDFT - of a spectrum "X" of length 2N0-1. - - Indices and frequency (python convention): - (see np.fft.fftfreq and DFT_freq) - f = [0, 1, ..., n/2-1, -n/2, ..., -1] / (dt*n) if n is even - f = [0, 1, ..., (n-1)/2, -(n-1)/2, ..., -1] / (dt*n) if n is odd - - When n is even, we lack symmetry of frequency, so it can potentially - make sense to enforce that the X[-n/2] component is 0 when generating - a signal with IDFT - - - - """ - N = len(X) - - if method in ['naive', 'manual', 'sum']: - x = np.zeros_like(X, dtype=complex) - for k in np.arange(N): - for n in np.arange(N): - x[k] += X[n] * np.exp(1j * 2*np.pi * k * n / N) - x = x/N - - elif method=='vectorized': - n = np.arange(N) - k = n.reshape((N, 1)) # k*n will be of shape (N x N) - e = np.exp(2j * np.pi * k * n / N) - x = np.dot(e, X) / N - - elif method=='ifft': - x = np.fft.ifft(X) - - #elif method=='ifft_py': - # x = IFFT(X) - else: - raise NotImplementedError('IDFT: Method {}'.format(method)) - - x = np.real_if_close(x) - - return x - -def DFT_freq(time=None, N=None, T=None, doublesided=True): - """ Returns the frequencies corresponding to a time vector `time`. - The signal "x" and "time" are assumed to have the same length - INPUTS: - - time: 1d array of time - OR - - N: number of time values - - T: time length of signal - """ - if time is not None: - N = len(time) - T = time[-1]-time[0] - dt = T/(N-1) - df = 1/(dt*N) - nhalf_pos, nhalf_neg = nhalf_fft(N) - if doublesided: - freq_pos = np.arange(nhalf_pos+1)*df - freq_neg = np.arange(nhalf_neg,0)*df - freq = np.concatenate((freq_pos, freq_neg)) - assert(len(freq) == N) - else: - # single sided - fMax = nhalf_pos * df - #freq = np.arange(0, fMax+df/2, df) - freq = np.arange(nhalf_pos+1)*df - return freq - -def IDFT_time(freq=None, doublesided=True): - """ Returns the time vector corresponding to a frequency vector `freq`. - - If doublesided is True - The signal "x" , "time" and freq are assumed to have the same length - Note: might lead to some inaccuracies, just use for double checking! - - INPUTS: - - freq: 1d array of time - """ - if doublesided: - N = len(freq) - time = freq*0 - if np.mod(N,2)==0: - nhalf=int(N/2)-1 - else: - nhalf=int((N-1)/2) - fMax = freq[nhalf] - df = (fMax-0)/(nhalf) - dt = 1/(df*N) - tMax= (N-1)*dt - #time = np.arange(0,(N-1)*dt+dt/2, dt) - time = np.linspace(0,tMax, N) - else: - raise NotImplementedError() - return time - -def recursive_fft(x): - """ - A recursive implementation of the 1D Cooley-Tukey FFT - - Returns the same as DFT (see documentation) - - Input should have a length of power of 2. - Reference: Kong, Siauw, Bayen - Python Numerical Methods - """ - N = len(x) - if not is_power_of_two(N): - raise Exception('Recursive FFT requires a power of 2') - - - if N == 1: - return x - else: - X_even = recursive_fft(x[::2]) - X_odd = recursive_fft(x[1::2]) - factor = np.exp(-2j*np.pi*np.arange(N)/ N) - X = np.concatenate([X_even+factor[:int(N/2)]*X_odd, X_even+factor[int(N/2):]*X_odd]) - return X - -def nhalf_fft(N): - """ - Follows the convention of fftfreq - fmax = f[nhalf_pos] = nhalf_pos*df (fftfreq convention) - - fpos = f[:nhalf_pos+1] - fneg = f[nhalf_pos+1:] - - """ - if N%2 ==0: - nhalf_pos = int(N/2)-1 - nhalf_neg = -int(N/2) - else: - nhalf_pos = int((N-1)/2) - nhalf_neg = -nhalf_pos - return nhalf_pos, nhalf_neg - - -def check_DFT_real(X): - """ Check that signal X is the DFT of a real signal - and that therefore IDFT(X) will return a real signal. - For this to be the case, we need conjugate symmetry: - X[k] = X[N-k]* - """ - from welib.tools.spectral import nhalf_fft - N = len(X) - nh, _ = nhalf_fft(N) - Xpos = X[1:nh+1] # we dont take the DC component [0] - Xneg = np.flipud(X[nh+1:]) # might contain one more frequency than the pos part - - if np.mod(N,2)==0: - # We have one extra negative frequency, we check that X is zero there and remove the value. - if Xneg[-1]!=0: - raise Exception('check_DFT_real: Component {} (first negative frequency) is {} instead of zero, but it should be zero if N is even.'.format(nh+1, X[nh+1])) - Xneg = Xneg[:-1] - - notConjugate = Xpos-np.conjugate(Xneg)!=0 - if np.any(notConjugate): - nNotConjugate=sum(notConjugate) - I = np.where(notConjugate)[0][:3] + 1 # +1 for DC component that was removed - raise Exception('check_DFT_real: {}/{} values of the spectrum are not complex conjugate of there symmetric frequency counterpart. See for instance indices: {}'.format(nNotConjugate, nh, I)) - -def double_sided_DFT_real(X1, N=None): - """ - Take a single sided part of a DFT (X1) and make it double sided signal X, of length N, - ensuring that the IDFT of X will be real. - This is done by ensuring conjugate symmetry: - X[k] = X[N-k]* - For N even, the first negative frequency component is set to 0 because it has no positive counterpart. - - Calling check_DFT_real(X) should return no Exception. - - INPUTS: - - X1: array of complex values of length N1 - - N: required length of the output array (2N1-1 or 2N1) - OUTPUTS: - - X: double sided spectrum: - [X1 flip(X1*[1:]) ] - or - [X1 [0] flip(X1*[1:]) ] - """ - if N is None: - N=2*len(X1)-1 # we make it an odd number to ensure symmetry of frequency - else: - if N not in [2*len(X1)-1, 2*len(X1), 2*len(X1)-2]: - raise Exception('N should be twice the length of the single sided spectrum, or one less.') - - if N % 2 ==0: - # Even number - if N == 2*len(X1)-2: - # rfftfreq - # TODO, there look into irfft to see the convention - X = np.concatenate((X1[:-1], [0], np.flipud(np.conjugate(X1[1:-1])))) - else: - X = np.concatenate((X1, [0], np.flipud(np.conjugate(X1[1:])))) - else: - X = np.concatenate((X1, np.flipud(np.conjugate(X1[1:])))) - return X - - -# --------------------------------------------------------------------------------} -# --- Helper functions -# --------------------------------------------------------------------------------{ -def is_power_of_two(n): - """ Uses bit manipulation to figure out if an integer is a power of two""" - return (n != 0) and (n & (n-1) == 0) - -def sinesum(time, As, freqs): - x =np.zeros_like(time) - for ai,fi in zip(As, freqs): - x += ai*np.sin(2*np.pi*fi*time) - return x - - -# --------------------------------------------------------------------------------} -# --- Unittests -# --------------------------------------------------------------------------------{ -import unittest - -class TestSpectral(unittest.TestCase): - - def default_signal(self, time, mean=0): - freqs=[1,4,7 ] # [Hz] - As =[3,1,1/2] # [misc] - x = sinesum(time, As, freqs) + mean - return x - - def compare_with_npfft(self, time, x): - # Compare lowlevels functions with npfft - # Useful to make sure the basic math is correct - N = len(time) - dt = (time[-1]-time[0])/(N-1) - tMax = time[-1] - - # --- Test frequency, dt/df/N-relationships - f_ref = np.fft.fftfreq(N, dt) - nhalf_pos, nhalf_neg = nhalf_fft(N) - fhalf = DFT_freq(time, doublesided = False) - freq = DFT_freq(time, doublesided = True) - df = freq[1]-freq[0] - fmax = fhalf[-1] - - np.testing.assert_almost_equal(fhalf , f_ref[:nhalf_pos+1], 10) - np.testing.assert_almost_equal(fhalf[-1] , np.max(f_ref), 10) - np.testing.assert_almost_equal( 1/(dt*df), N) - np.testing.assert_almost_equal(freq , f_ref, 10) - if N%2 == 0: - np.testing.assert_almost_equal(2*fmax/df, N-2 , 10) - else: - np.testing.assert_almost_equal(2*fmax/df, N-1 , 10) - - # --- Test DFT methods - X0 = DFT(x, method='fft') - X1 = DFT(x, method='naive') - X2 = DFT(x, method='vectorized') - - np.testing.assert_almost_equal(X1, X0, 10) - np.testing.assert_almost_equal(X2, X0, 10) - if is_power_of_two(N): - X3 = DFT(x, method='fft_py') - np.testing.assert_almost_equal(X3, X0, 10) - - # --- Test IDFT methods - x_back0 = IDFT(X0, method='ifft') - x_back1 = IDFT(X0, method='naive') - x_back2 = IDFT(X0, method='vectorized') - np.testing.assert_almost_equal(x_back1, x_back0, 10) - np.testing.assert_almost_equal(x_back2, x_back0, 10) - - np.testing.assert_almost_equal(x_back0, x, 10) - - def test_lowlevel_fft_even(self): - # Test lowlevel functions - time = np.linspace(0,10,16) # NOTE: need a power of two for fft_py - x = self.default_signal(time, mean=0) - self.compare_with_npfft(time, x) - - def test_lowlevel_fft_odd(self): - # Test lowlevel functions - time = np.linspace(0,10,17) - x = self.default_signal(time, mean=0) - self.compare_with_npfft(time, x) - - def test_fft_amplitude(self): - dt=0.1 - t=np.arange(0,10,dt); - f0=1; - A=5; - y=A*np.sin(2*np.pi*f0*t) - f,Y,_=fft_amplitude(y,fs=1/dt,detrend=False) - i=np.argmax(Y) - self.assertAlmostEqual(Y[i],A) - self.assertAlmostEqual(f[i],f0) - - def test_fft_binning(self): - dt=0.1 - t=np.arange(0,10,dt); - f0=1; - A=5; - y=A*np.sin(2*np.pi*f0*t) - - f, Y, Info = psd_binned(y, fs=1/dt, nPerDecade=10, detrend ='constant') - f2, Y2, Info2 = psd (y, fs=1/dt, detrend ='constant') - #print(f) - #print(Y) - - #import matplotlib.pyplot as plt - #fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) - #fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) - #ax.plot( f2, Y2 , label='Full') - #ax.plot( f, Y , label='Binned') - #ax.set_xlabel('') - #ax.set_ylabel('') - #ax.legend() - #plt.show() - -if __name__ == '__main__': - #TestSpectral().test_fft_binning() - #TestSpectral().test_ifft() - #TestSpectral().test_lowlevel_fft_even() - #TestSpectral().test_lowlevel_fft_odd() - unittest.main() - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py deleted file mode 100644 index ec9cc17170..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py +++ /dev/null @@ -1,384 +0,0 @@ -""" -Set of tools for statistics - - measures (R^2, RMSE) - - pdf distributions - - Binning - -""" -import numpy as np -import pandas as pd - -# --------------------------------------------------------------------------------} -# --- Stats measures -# --------------------------------------------------------------------------------{ -def comparison_stats(t1, y1, t2, y2, stats='sigRatio,eps,R2', method='mean', absVal=True): - """ - y1: ref - y2: other - - """ - from welib.tools.fatigue import equivalent_load - - sp=stats.split(',') - stats = {} - sStats=[] - - t1=np.asarray(t1).astype(float) - y1=np.asarray(y1).astype(float) - t2=np.asarray(t2).astype(float) - y2=np.asarray(y2).astype(float) - - # Loop on statistics requested - for s in sp: - s= s.strip().lower() - if s=='sigratio': - # Ratio of standard deviation: - sig_ref = float(np.nanstd(y1)) - sig_est = float(np.nanstd(y2)) - try: - r_sig = sig_est/sig_ref - except: - r_sig = np.nan - stats = {'sigRatio':r_sig} - sStats+= [r'$\sigma_\mathrm{est}/\sigma_\mathrm{ref} = $'+r'{:.3f}'.format(r_sig)] - - elif s=='eps': - # Mean relative error - eps = float(mean_rel_err(t1, y1, t2, y2, method=method, absVal=absVal)) - stats['eps'] = eps - sStats+=['$\epsilon=$'+r'{:.1f}%'.format(eps)] - - elif s=='r2': - # Rsquare - R2 = float(rsquare(y2, y1)[0]) - stats['R2'] = R2 - sStats+=[r'$R^2=$'+r'{:.3f}'.format(R2)] - - elif s=='epsleq': - Leq1 = equivalent_load(t1, y1, m=5, bins=100, method='fatpack') - Leq2 = equivalent_load(t2, y2, m=5, bins=100, method='fatpack') - epsLeq = (Leq2-Leq1)/Leq1*100 - stats['epsLeq'] = epsLeq - sStats+=[r'$\epsilon L_{eq}=$'+r'{:.1f}%'.format(epsLeq)] - - else: - raise NotImplementedError(s) - sStats=' - '.join(sStats) - return stats, sStats - - - -def rsquare(y, f, c = True): - """ Compute coefficient of determination of data fit model and RMSE - [r2 rmse] = rsquare(y,f) - [r2 rmse] = rsquare(y,f,c) - RSQUARE computes the coefficient of determination (R-square) value from - actual data Y and model data F. The code uses a general version of - R-square, based on comparing the variability of the estimation errors - with the variability of the original values. RSQUARE also outputs the - root mean squared error (RMSE) for the user's convenience. - Note: RSQUARE ignores comparisons involving NaN values. - INPUTS - Y : Actual data - F : Model fit - - # OPTION - C : Constant term in model - R-square may be a questionable measure of fit when no - constant term is included in the model. - [DEFAULT] TRUE : Use traditional R-square computation - FALSE : Uses alternate R-square computation for model - without constant term [R2 = 1 - NORM(Y-F)/NORM(Y)] - # OUTPUT - R2 : Coefficient of determination - RMSE : Root mean squared error """ - # Sanity - if not np.all(y.shape == f.shape) : - raise Exception('Y and F must be the same size') - y = np.asarray(y).astype(float) - f = np.asarray(f).astype(float) - # Check for NaN - tmp = np.logical_not(np.logical_or(np.isnan(y),np.isnan(f))) - y = y[tmp] - f = f[tmp] - if c: - r2 = max(0,1-np.sum((y-f)**2)/np.sum((y-np.mean(y))** 2)) - else: - r2 = 1 - np.sum((y - f) ** 2) / np.sum((y) ** 2) - if r2 < 0: - import warnings - warnings.warn('Consider adding a constant term to your model') - r2 = 0 - rmse = np.sqrt(np.mean((y - f) ** 2)) - return r2,rmse - -def mean_rel_err(t1=None, y1=None, t2=None, y2=None, method='meanabs', verbose=False, varname='', absVal=True): - """ - return mean relative error in % - - Methods: - 'mean' : 100 * |y1-y2|/mean(y1) - 'meanabs': 100 * |y1-y2|/mean(|y1|) - 'minmax': y1 and y2 scaled between 0.5 and 1.5 - |y1s-y2s|/|y1| - '0-2': signals are scalled between 0 & 2 - """ - def myabs(y): - if absVal: - return np.abs(y) - else: - return y - - - if t1 is None and t2 is None: - pass - else: - if len(y1)!=len(y2): - y2=np.interp(t1,t2,y2) - if method=='mean': - # Method 1 relative to mean - ref_val = np.nanmean(y1) - meanrelerr = np.nanmean(myabs(y2-y1)/ref_val)*100 - elif method=='meanabs': - ref_val = np.nanmean(abs(y1)) - meanrelerr = np.nanmean(myabs(y2-y1)/ref_val)*100 - elif method=='loc': - meanrelerr = np.nanmean(myabs(y2-y1)/abs(y1))*100 - elif method=='minmax': - # Method 2 scaling signals - Min=min(np.nanmin(y1), np.nanmin(y2)) - Max=max(np.nanmax(y1), np.nanmax(y2)) - y1=(y1-Min)/(Max-Min)+0.5 - y2=(y2-Min)/(Max-Min)+0.5 - meanrelerr = np.nanmean(myabs(y2-y1)/np.abs(y1))*100 - elif method=='1-2': - # transform values from 1 to 2 - Min=min(np.nanmin(y1), np.nanmin(y2)) - Max=max(np.nanmax(y1), np.nanmax(y2)) - y1 = (y1-Min)/(Max-Min)+1 - y2 = (y2-Min)/(Max-Min)+1 - meanrelerr = np.nanmean(myabs(y2-y1)/np.abs(y1))*100 - else: - raise Exception('Unknown method',method) - - if verbose: - if len(varname)>0: - print('Mean rel error {:15s} {:7.2f} %'.format(varname, meanrelerr)) - else: - print('Mean rel error {:7.2f} %'.format( meanrelerr)) - return meanrelerr - - -# --------------------------------------------------------------------------------} -# --- PDF -# --------------------------------------------------------------------------------{ -def pdf(y, method='histogram', n=50, **kwargs): - """ - Compute the probability density function. - Wrapper over the different methods present in this package - """ - if method =='sns': - xh, yh = pdf_sns(y, nBins=n, **kwargs) - elif method =='gaussian_kde': - xh, yh = pdf_gaussian_kde(y, nOut=n, **kwargs) - elif method =='histogram': - xh, yh = pdf_histogram(y, nBins=n, **kwargs) - else: - raise NotImplementedError(f'pdf method: {method}') - return xh, yh - - -def pdf_histogram(y,nBins=50, norm=True, count=False): - yh, xh = np.histogram(y[~np.isnan(y)], bins=nBins) - dx = xh[1] - xh[0] - xh = xh[:-1] + dx/2 - if count: - yh = yh / (len(n)*dx) # TODO DEBUG /VERIFY THIS - else: - yh = yh / (nBins*dx) - if norm: - yh=yh/np.trapz(yh,xh) - return xh,yh - -def pdf_gaussian_kde(data, bw='scott', nOut=100, cut=3, clip=(-np.inf,np.inf)): - """ - Returns a smooth probability density function (univariate kernel density estimate - kde) - Inspired from `_univariate_kdeplot` from `seaborn.distributions` - - INPUTS: - bw: float defining bandwidth or method (string) to find it (more or less sigma) - cut: number of bandwidth kept for x axis (e.g. 3 sigmas) - clip: (xmin, xmax) values - OUTPUTS: - x, y: where y(x) = pdf(data) - """ - from scipy import stats - from six import string_types - - data = np.asarray(data) - data = data[~np.isnan(data)] - # Gaussian kde - kde = stats.gaussian_kde(data, bw_method = bw) - # Finding a relevant support (i.e. x values) - if isinstance(bw, string_types): - bw_ = "scotts" if bw == "scott" else bw - bw = getattr(kde, "%s_factor" % bw_)() * np.std(data) - x_min = max(data.min() - bw * cut, clip[0]) - x_max = min(data.max() + bw * cut, clip[1]) - x = np.linspace(x_min, x_max, nOut) - # Computing kde on support - y = kde(x) - return x, y - - -def pdf_sklearn(y): - #from sklearn.neighbors import KernelDensity - #kde = KernelDensity(kernel='gaussian', bandwidth=0.75).fit(y) #you can supply a bandwidth - #x=np.linspace(0,5,100)[:, np.newaxis] - #log_density_values=kde.score_samples(x) - #density=np.exp(log_density) - pass - -def pdf_sns(y,nBins=50): - import seaborn.apionly as sns - hh=sns.distplot(y,hist=True,norm_hist=False).get_lines()[0].get_data() - xh=hh[0] - yh=hh[1] - return xh,yh - -# --------------------------------------------------------------------------------} -# --- Binning -# --------------------------------------------------------------------------------{ -def bin_DF(df, xbins, colBin, stats='mean'): - """ - Perform bin averaging of a dataframe - INPUTS: - - df : pandas dataframe - - xBins: end points delimiting the bins, array of ascending x values - - colBin: column name (string) of the dataframe, used for binning - OUTPUTS: - binned dataframe, with additional columns 'Counts' for the number - - """ - if colBin not in df.columns.values: - raise Exception('The column `{}` does not appear to be in the dataframe'.format(colBin)) - xmid = (xbins[:-1]+xbins[1:])/2 - df['Bin'] = pd.cut(df[colBin], bins=xbins, labels=xmid ) # Adding a column that has bin attribute - if stats=='mean': - df2 = df.groupby('Bin', observed=False).mean() # Average by bin - elif stats=='std': - df2 = df.groupby('Bin', observed=False).std() # std by bin - # also counting - df['Counts'] = 1 - dfCount=df[['Counts','Bin']].groupby('Bin', observed=False).sum() - df2['Counts'] = dfCount['Counts'] - # Just in case some bins are missing (will be nan) - df2 = df2.reindex(xmid) - return df2 - -def bin_signal(x, y, xbins=None, stats='mean', nBins=None): - """ - Perform bin averaging of a signal - INPUTS: - - x: x-values - - y: y-values, signal values - - xBins: end points delimiting the bins, array of ascending x values - OUTPUTS: - - xBinned, yBinned - - """ - if xbins is None: - xmin, xmax = np.min(x), np.max(x) - dx = (xmax-xmin)/nBins - xbins=np.arange(xmin, xmax+dx/2, dx) - df = pd.DataFrame(data=np.column_stack((x,y)), columns=['x','y']) - df2 = bin_DF(df, xbins, colBin='x', stats=stats) - return df2['x'].values, df2['y'].values - - - -def bin2d_signal(x, y, z, xbins=None, ybins=None, nXBins=None, nYBins=None): - """ - Bin signal z based on x and y values using xbins and ybins - - """ - if xbins is None: - xmin, xmax = np.min(x), np.max(x) - dx = (xmax-xmin)/nXBins - xbins=np.arange(xmin, xmax+dx/2, dx) - if ybins is None: - ymin, ymax = np.min(y), np.max(y) - dy = (ymax-ymin)/nYBins - ybins=np.arange(ymin, ymax+dy/2, dy) - - x = np.asarray(x).flatten() - y = np.asarray(y).flatten() - z = np.asarray(z).flatten() - - Counts = np.zeros((len(xbins)-1, len(ybins)-1)) - XMean = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan - YMean = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan - ZMean = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan - ZStd = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan - - xmid = xbins[:-1] + np.diff(xbins)/2 - ymid = ybins[:-1] + np.diff(ybins)/2 - YMid, XMid = np.meshgrid(ymid, xmid) - - for ixb, xb in enumerate(xbins[:-1]): - print(ixb) - bX = np.logical_and(x >= xb, x <= xbins[ixb+1]) # TODO decide on bounds - for iyb, yb in enumerate(ybins[:-1]): - bY = np.logical_and(y >= yb, y <= ybins[iyb+1]) # TODO decide on bounds - - bXY = np.logical_and(bX, bY) - Counts[ixb, iyb] = sum(bXY) - if Counts[ixb,iyb]>0: - ZMean [ixb, iyb] = np.mean(z[bXY]) - ZStd [ixb, iyb] = np.std( z[bXY]) - XMean [ixb, iyb] = np.mean(x[bXY]) - YMean [ixb, iyb] = np.mean(y[bXY]) - - return XMean, YMean, ZMean, ZStd, Counts, XMid, YMid - - - - - - -def azimuthal_average_DF(df, psiBin=np.arange(0,360+1,10), colPsi='Azimuth_[deg]', tStart=None, colTime='Time_[s]'): - """ - Average a dataframe based on azimuthal value - Returns a dataframe with same amount of columns as input, and azimuthal values as index - """ - if tStart is not None: - if colTime not in df.columns.values: - raise Exception('The column `{}` does not appear to be in the dataframe'.format(colTime)) - df=df[ df[colTime]>tStart].copy() - - dfPsi= bin_DF(df, psiBin, colPsi, stats='mean') - if np.any(dfPsi['Counts']<1): - print('[WARN] some bins have no data! Increase the bin size.') - - return dfPsi - - -def azimuthal_std_DF(df, psiBin=np.arange(0,360+1,10), colPsi='Azimuth_[deg]', tStart=None, colTime='Time_[s]'): - """ - Average a dataframe based on azimuthal value - Returns a dataframe with same amount of columns as input, and azimuthal values as index - """ - if tStart is not None: - if colTime not in df.columns.values: - raise Exception('The column `{}` does not appear to be in the dataframe'.format(colTime)) - df=df[ df[colTime]>tStart].copy() - - dfPsi= bin_DF(df, psiBin, colPsi, stats='std') - if np.any(dfPsi['Counts']<1): - print('[WARN] some bins have no data! Increase the bin size.') - - return dfPsi - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py deleted file mode 100644 index eaa7f673f6..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py +++ /dev/null @@ -1,6 +0,0 @@ -import unittest -import numpy as np -from pyFAST.tools.fatigue import TestFatigue - -if __name__ == '__main__': - unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py deleted file mode 100644 index 2c1bebe484..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py +++ /dev/null @@ -1,75 +0,0 @@ -import numpy as np -import time - -def pretty_time(t): - # fPrettyTime: returns a 6-characters string corresponding to the input time in seconds. - # fPrettyTime(612)=='10m12s' - # AUTHOR: E. Branlard - if(t<0): - s='------'; - elif (t<1) : - c=np.floor(t*100); - s='{:2d}.{:02d}s'.format(0,int(c)) - elif(t<60) : - s=np.floor(t); - c=np.floor((t-s)*100); - s='{:2d}.{:02d}s'.format(int(s),int(c)) - elif(t<3600) : - m=np.floor(t/60); - s=np.mod( np.floor(t), 60); - s='{:2d}m{:02d}s'.format(int(m),int(s)) - elif(t<86400) : - h=np.floor(t/3600); - m=np.floor(( np.mod( np.floor(t) , 3600))/60); - s='{:2d}h{:02d}m'.format(int(h),int(m)) - elif(t<8553600) : #below 3month - d=np.floor(t/86400); - h=np.floor( np.mod(np.floor(t), 86400)/3600); - s='{:2d}d{:02d}h'.format(int(d),int(h)) - elif(t<31536000): - m=t/(3600*24*30.5); - s='{:4.1f}mo'.format(m) - #s='+3mon.'; - else: - y=t/(3600*24*365.25); - s='{:.1f}y'.format(y) - return s - - -class Timer(object): - """ Time a set of commands, as a context manager - usage: - - with Timer('A name'): - cmd1 - cmd2 - """ - def __init__(self, name=None, writeBefore=False, silent=False, nChar=40): - self.name = name - self.writeBefore = writeBefore - self.silent=silent - self.nChar=nChar - self.sFmt='{:'+str(nChar+1)+'s}' - - def ref_str(self): - s='[TIME] ' - if self.name: - s+=self.sFmt.format(self.name[:self.nChar]) - return s - - def __enter__(self): - if self.silent: - return - self.tstart = time.time() - if self.writeBefore: - s=self.ref_str() - print(s,end='') - - def __exit__(self, type, value, traceback): - if self.silent: - return - if self.writeBefore: - print('Elapsed: {:6s}'.format(pretty_time(time.time() - self.tstart))) - else: - s=self.ref_str() - print(s+'Elapsed: {:6s}'.format(pretty_time(time.time() - self.tstart))) diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py deleted file mode 100644 index 66cc759813..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py +++ /dev/null @@ -1,373 +0,0 @@ -import zmq -import multiprocessing as mp -import numpy as np -import plotly.graph_objs as go -from plotly.subplots import make_subplots -import plotly.io as pio -import threading -from IPython.display import display, clear_output -import time -import json -import matplotlib.pyplot as plt -import gzip -import pickle -import os -import threading - -class RFInteractor: - "" - - "" - def __init__(self, - ZmqInAddress: str = 'tcp://127.0.0.1:5555', - ZmqOutAddress: str = 'tcp://127.0.0.1:5556', - ZmqInChannels: list = [None], - live_plot: bool = True, - verbose: bool = False, - path_out: str = None, - save_comms_log: bool = False, - name: str = 'OFZMQSims'): - - self.ZmqInAddress = ZmqInAddress - self.ZmqOutAddress = ZmqOutAddress - self.live_plot = live_plot - self.plot_lock = threading.Lock() - self.fig = False - self.allowable_requests = ['VelH', 'VelV', 'AngleH', 'AngleV', 'BlPitchCom1', - 'BlPitchCom2', 'BlPitchCom3', 'GenTq', 'alpha'] - self.verbose = verbose - self.name = name - - # ------ Connect to Publisher - if self.ZmqOutAddress is not None: - self.pub_context = zmq.Context() - self.subscriber = self.pub_context.socket(zmq.SUB) - self.subscriber.bind(self.ZmqOutAddress) - self.subscriber.setsockopt_string(zmq.SUBSCRIBE, "") # for now subscribe to all - # self.running = True - self.subscriber_thread = None - self.running_event = threading.Event() - self.lock = threading.Lock() - self.sub_dict = {} - - if self.ZmqInAddress is not None: - self.req_context = zmq.Context() - self.requester = self.req_context.socket(zmq.REP) - self.requester.bind(self.ZmqInAddress) - # self.poller = zmq.Poller() - # self.poller.register(self.requester, zmq.POLLIN) - self.cont_req_off = 0 - self.cont_req_threshold = 10 - - if self.ZmqInAddress is not None and self.ZmqOutAddress is not None: - self.poller = zmq.Poller() - self.poller.register(self.requester, zmq.POLLIN) - self.poller.register(self.subscriber, zmq.POLLIN) - - self.shared_dict = SharedData() - elif self.ZmqInAddress is not None and self.ZmqOutAddress is None: - self.poller = zmq.Poller() - self.poller.register(self.requester, zmq.POLLIN) - else: - pass - - self.running = True - - print('ZMQ Real Time interactor for FAST initialized. \n PUB-SUB protocol: {} | REQ-REP protocol: {}'.format(self.ZmqOutAddress, - self.ZmqInAddress)) - - # ------ - self.path_out = path_out - self.save_comms_log = save_comms_log - - if self.save_comms_log: - print('Communication log will be saved at: {} \n'.format(self.path_out)) - os.makedirs(self.path_out, exist_ok=True) - - pass - - - @staticmethod - def _update_dict(update_, dict_): - for key, value in update_.items(): - if key not in dict_: - dict_[key] = [] - dict_[key].append(value) - else: - dict_[key].append(value) - - return dict_ - - def get_shared_dict(self): - with self.lock: - return self.sub_dict - - def update_plot(self): - if not self.fig: - # Exclude 'Time' and 'TurbId' from subplot titles - subplot_keys = [key for key in self.sub_dict.keys() if key not in [' Time', 'TurbId']] - # Initialize subplots only if they haven't been initialized yet - self.fig = make_subplots(rows=len(subplot_keys), cols=1, subplot_titles=subplot_keys) - - row_index = 1 # Initialize row index - - for trace_name in subplot_keys: - self.fig.add_scatter(y=self.sub_dict[trace_name], mode='lines', name=trace_name, row=row_index, col=1) - row_index += 1 # Increment row index - - self.fig.update_layout(height=1200, title_text=f"TurbId: {self.sub_dict['TurbId'][-1]} - Time = {self.sub_dict[' Time'][-1]} (s)") - display(self.fig) # Display the initial figure - - else: - subplot_keys = [key for key in self.sub_dict.keys() if key not in [' Time', 'TurbId']] - for i, trace_name in enumerate(subplot_keys): - self.fig.data[i].y = self.sub_dict[trace_name] - - self.fig.update_layout(height=1200, title_text=f"TurbId: {self.sub_dict['TurbId'][-1]} - Time = {self.sub_dict[' Time'][-1]} (s)") - clear_output(wait=True) - display(self.fig) - - def static_plot(self): - subplot_keys = [key for key in self.sub_dict.keys() if key not in [' Time', 'TurbId']] - fig = make_subplots(rows=len(subplot_keys), cols=1, subplot_titles=subplot_keys) - - fig, ax = plt.subplots(len(subplot_keys), 1, figsize=(10, 10)) - for i, trace_name in enumerate(subplot_keys): - ax[i].plot(self.sub_dict[trace_name]) - ax[i].set_title(trace_name) - - return plt.show() - - - def fast_sub(self, N_plots_update = 100, plot: bool = True, shared: bool = False): - """ - - """ - count = 0 - while True: - update_ = self.subscriber.recv_json() - print(update_) - if self.verbose: - print(update_) - - if not shared: - self.sub_dict = self._update_dict(update_, self.sub_dict) - else: - self.shared_dict.update_dict(update_) - - if count == 0: - self.data_length = len(self.sub_dict) - - count += 1 - if count % N_plots_update == 0 and plot and not shared: - self.update_plot() - # time.sleep(1) - - # check if communication is still open - if list(update_.values())[2:] == [0.0]*(self.data_length - 2): - break - # except Exception as e: - # print('{}'.format(e)) - # self.running_event.set() - - print('Subscription to FAST channel closed.') - self.subscriber.close() - self.pub_context.term() - - if shared: - self.running_event.set() - - # saving only at the end to avoid performance issues. Data is available - # real-time in self.sub_dict anyway - - if self.save_comms_log: - with gzip.open(self.path_out + '{}.pkl.gz'.format(self.name), 'wb') as f: - pickle.dump(self.sub_dict, f, protocol=pickle.HIGHEST_PROTOCOL) - - pass - - def fast_rep(self, rep_dict, verbose: bool = False): - """ - - """ - - socks = dict(self.poller.poll(1000)) - if self.requester in socks and socks[self.requester] == zmq.POLLIN: - req_ = self.requester.recv_string() - - requests = req_.split(";") - response = ';'.join(map(str, rep_dict.values())) + ';' - - response = response = ';'.join(map(str, rep_dict.values())) + ';' - - # Send the response - self.requester.send_string(response) - - if verbose: - print(f'Response sent: {response}') - else: - if verbose: - print('No request received, waiting...') - self.cont_req_off += 1 - - - if self.cont_req_off > self.cont_req_threshold: - print('Requester closed due to inactivity.') - self.requester.close() - self.req_context.term() - self.running_event.set() - - return True - - return False - - def zmq_full_communication(self, rep_dict, verbose: bool = False): - """ - Full communication between the subscriber and the requester - """ - count = 0 - socks = dict(self.poller.poll(1000)) - if self.requester in socks and socks[self.requester] == zmq.POLLIN: - req_ = self.requester.recv_string() - - requests = req_.split(";") - response = ';'.join(map(str, rep_dict.values())) + ';' - - response = response = ';'.join(map(str, rep_dict.values())) + ';' - - # Send the response - self.requester.send_string(response) - - if verbose: - print(f'Response sent: {response}') - - elif self.subscriber in socks and socks[self.subscriber] == zmq.POLLIN: - update_ = self.subscriber.recv_json() - if self.verbose: - print(update_) - - self.sub_dict = self._update_dict(update_, self.sub_dict) - - if count == 0: - self.data_length = len(self.sub_dict) - - count += 1 - # if count % N_plots_update == 0 and plot and not shared: - # self.update_plot() - # # time.sleep(1) - - # check if communication is still open - if list(update_.values())[2:] == [0.0]*(self.data_length - 2): - self.cont_req_off += 1 - else: - if verbose: - print('No request received, waiting...') - self.cont_req_off += 1 - - if self.cont_req_off > self.cont_req_threshold: - print('Requester closed due to inactivity.') - self.requester.close() - self.req_context.term() - self.running_event.set() - - return True - - return False - - def zmq_read_publisher(self): - update_ = self.subscriber.recv_json() - - with self.lock: - self.sub_dict = self._update_dict(update_, self.sub_dict) - - data_length = len(self.sub_dict) - - if list(update_.values())[2:] == [0.0]*(data_length - 2): - print('Subscription to FAST channel closed.') - self.subscriber.close() - self.pub_context.term() - return self.sub_dict, True - - return self.sub_dict, False - - def zmq_read_requester(self, verbose: bool = False): - - socks = dict(self.poller.poll(2000)) - if self.requester in socks and socks[self.requester] == zmq.POLLIN: - req_ = self.requester.recv_string() - return req_ - else: - self.cont_req_off += 1 - - if verbose: - print('No request received, waiting...') - - return None - - def zmq_send_reply(self, rep_dict): - response = ';'.join(map(str, rep_dict.values())) + ';' - self.requester.send_string(response) - return response - - def communication_check(self, verbose: bool = False): - """ - Check if communication is still open - """ - - socks = dict(self.poller.poll(2000)) - # check if there are still communications open - if len(socks) == 0: - return True - else: - return False - - - - - - - - - - -class SharedData: - """ - Shared data class for multiprocessing - """ - def __init__(self): - self.shared_dict = {} - self.lock = threading.Lock() - - def update_dict(self, update_): - with self.lock: - for key, value in update_.items(): - if key not in self.shared_dict: - self.shared_dict[key] = [] - self.shared_dict[key].append(value) - else: - self.shared_dict[key].append(value) - - return self.shared_dict - - def get_shared_dict(self): - with self.lock: - return self.shared_dict - - def clear_dict(self): - with self.lock: - self.shared_dict = {} - - return self.shared_dict - - - - - - - - - - - - - diff --git a/zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py b/zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py deleted file mode 100644 index 657de8757b..0000000000 --- a/zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py +++ /dev/null @@ -1,43 +0,0 @@ -"""" -Test 01 -======= -Testing message integrity of the communication between the real-time interactor and the FAST model. - - -""" -import os -import pickle -import gzip -import numpy as np -import matplotlib.pyplot as plt - -from openfast_toolbox.io import FASTOutputFile - -def test01_integrity(path_zmq_out: str, path_fast_out: str): - - # Load zmq output - with gzip.open(path_zmq_out, 'rb') as f: - zmq_data = pickle.load(f) - - # Load FAST output - fast_data = FASTOutputFile(path_fast_out).toDataFrame() - - # # Compare - # assert len(zmq_data) == len(fast_data) - - outputs = fast_data.columns - - for output in outputs: - output_zmq = ' ' + output.split('_')[0] - assert np.allclose(zmq_data[output_zmq], fast_data[output], atol=1e-6) - - print('Test 01 passed.') - - return True - -if __name__ == '__main__': - cwd = os.getcwd() - path_zmq_out = os.path.join(cwd, '../zmq_logs/OFZMQ_test01.pkl.gz') - path_fast_out = os.path.join(cwd, '../../templateDir/Main01.outb') - test01_integrity(path_zmq_out, path_fast_out) - \ No newline at end of file

>B_M@)Gbh>_ZsX#vy|RZBA@=zhOp^AF z4S^A{^R|o!$`Ry6<9k`h*^h?luB(_Zh^O~)2{mijV-K&2H4~8{lOTRTt2ygy2Dp!Y z*9;t&s)Pq7A14HaVj>itNv$YJC(Jpdx^+zk&o^>_xlRp%B6WT%W&wNveF2+;j#%0F z{F}nNX}i}&*bCQiOxygqY#+P*()`Ie&vu}%S&CKRe#^SG(zhyH}m7+|YcEbMh=a)7!inyI=O{i9kP>at0~29|We z#@WIGG&?BUe2ra#OL^}`2s94w7FiG~sQaBu zQwe3mKjEW1NKXlDuXugktI+pR=Sep-t{83<{p{E_QU!?@Sc*(IFE#9>0$vp1Pp98Z z9XD~m7x$XSN-#nF&osduEtf1M+F8)2Fp;3k^E6wTVY3qW1Vx;vX-+SI;bk4@m*mOP1my(h;$O~ug%tb7qnS6pf+Fy z0A){F%{ag=N^6JrO`qmW0w=-APD6^*v^a73)=5mP2k+H>tR}JSFK^TJlGm4 zBJz5tD#k$F6+g*jl~7u=f6rgSP-mG|tHip#T!-dbtGojHqI(?GKUgAj)}$!{NhYAL z1CziV+;unuVFBM@@k{U(=_{KLYcn;@x83oYq&&{?k}I@Z%Y5i>aSZ*M zVA=QMf@0mrb%)d}D&wPWz+q+QWcN%p;*vyzpzazFUjfG38=cX(C5y=+LEGi3D#>@Cmhm+BFyD**VP~f_es5ONCGq2u zbbkmqoLHpkYpNG;M|u?2*4qV17CTkHR#OR8Wj(Pp$0KF^Fp}20#dm>87IMmM`ac}U zjxg&O#_51sFXz^6o$`mRiqnoqfEz88j4Ry7DNfwwoo?Gm7~OA?Hu#mcDqr;+f24&U zw^9J;-j2O1g#U76tAxak>;Mh>j{|7XO`f>gKW<)7-?z3y52PFlH$6>_U6*2d`)x%H z;7X#})ksfCr$w`*mX#lo3vk?V&-OCB{wrDYm~ybDLBJtsVsz23mmT_w-SSxU>^+St zL0*Mi3((aY&SjVmBzM#w#|Q*mGjb8~$hd<#f9dg>Vk^Lvi28+J-is3N%Zz;3q{;iK zM~*rxg0yRhF{hh(_l&M~7WHHfiS!cG_85>fIx2T;EFh^*Y^_!a&C^}$@PLyO6I0y6 zgwe5o+WS)HJge^+tMxli1&hwb<*47z3@UScC8!s89*0?r5O_C%nN7xW>G6DEt2Mb? z)0o-GT0vK==-lPE+8aO~Hnl`n(yu`c8dX9l^Gn!HSSPiYze1Erm|M=|fTS(`3rgh3 zCrPsS%a#&s;J4IXy$nTJ2Ic^xYFa}lV|Z}YkvX>wqfnWfQ`;Vbebb%AWBLCx$(i41 z41oXOb_IBXoae4LtAvA;;b>Pwj);hUU-&@%+6H7n87iZbJDf0Z%Y2vCuMH(uXR=1d zSs(nWu3KIg#rH=zvL?>kZ(I2lU5=)B#0_lIX`*(`ovbs$=+SZ=9!bonq!4#VI<14G z5=hmSF+a_9kz28XGRGB-)w}pBgz&zeu6J|KEiFxU?-UYMGBJ3l>|-ig-eraIxSp(1*(1K*n1fx+`C;b_aNp#R}+>qDlq zTFYb?oY=Ai7mY5RdJf$xbSvJ`7h^$UT%48{E({l#eltp)5gK%LkK5k(@7gY>+`vW1 zw<$v!!fU2lUz*j?o;vFpsL@ecUrdiOe^OOKQ)6|w366svpjEbTnI{PI(lC?QzGJzi zGoVA;bo0aZsu%HG7XzPKlLw(lH%k%}0qtLFBDGy_mor;t{@?Z#uBm-A=-1`p{F>H^ zliAtzFf6-PK7#6cRf1hXl3$_DCjIQrlE$5_>yUT>*1CHVRYRYVr5;eQJeS=HC?^Dt z&*Nx(#FQa*z7MXO_exjb5rwC7(>#&~KeO$dGDi=TqD`KVPvbur>T_K5Lb;2uwKFQ= zc?rgUJy3nJymWhue`S>t3(ztBmt1r0w zYL+=3vAziy@qIqD9<-_bX08Ugn#T4| z4HbITkZ-Wcwz0xXQ+Kz@)f!x{1=y_IUjFdb`tL)9n_0NdT5pGM6m?zgI~v-{4))oj zTL7n;-qfDu5*>BK2einnGq6S97>y^qWUfj`sKA4-W6O%18l7ghRi?SeOFwgQL*-pz zY_@03#JDpX1(0r)+%A4ra#}bKkj@o{uH*;|Uf_kW_iD+`M9LZI{!;7W|H1CVlb~m` zcC&&_>*7NA5!4+pm2kFs6X2JivLU`mN!c?{j?|`2%h?0*^ABhDIC+mqkRb6V*$qzV zOkV+)gIUg%q(<_y4FS=ZN$^vCy={%y1#ZKPNsb`!n_Uho$5te}$P@P}Vy=S?IlWw3t7Qo>BY7{AaPHqG!HyQIqgD>EALe z${cbDo&rhM?OAez30j%O?vPgwME)Ci|9mLe6unB1+0(qD5}F%J7hrbrfAYJp0q&Qc z)(x4~oA(}@?L9x>VNGN9$)n6oG_qJn=l_{Qu^%q^Iqf_ut@ANjkISAWFP5Ttb15_C zHGc+4b{3x1z1r(hzg9vM1Fn zS!}@4ac~5jU~$L>;;$vu`0qx@qMR3)@k6{G(~Ta#&rkpI@d8`$n}&Hy z(;0Enlg{j&TRZ)x&RSiAFWbaGPtv*MZLc$0=2mIzcT0Dx-6QQoR|}83f8iF*sDzC} z5}orqv}@hyx4;GE0iHSIiE3B4UYzU>lwIyTgn1;~#nx~@!g~zL{C$ii#MwrQ>NO#c zZ0gM{Y_uejKI5UxlGmNL)bs53!+H7%V+`P}#aY+kMdW}==$zc_Y7!j#=XiS#s;Pd| z^In}D=p_5@_C4pS%p zj&>zWUzuqe@!=19&rr-~2CaPR4iu;aGzD%ju}1Uv@s=I>HEnbH_Qhw|o*f6qR+Ds4 zYF*Dcu!JkzxC!FoKHq(9qq2)`2O~+q!Nt?yjV_wrI{>2;s>Z##i2?~(9JQC4pmV!N zvzo;6MfZ(%HK+t1#ScijV_QZ<1xlA#4%6z%N#T`uAMDbm{B;9SFHb|F*fRKBrIcs+ zx5v=(t@W4!iKYnOW+c4u!_x&P;?3R&{a5GmW>|s~o+;;JPMdoFiZI)kF zWDGwW6|@HPdqy7w=TQe2L)SS8wrOY+6pXNDr!`vk7*7r3!qM%(V(V>gyFmwrL6!-1 z-D+W)j{oAijnw{*H2lof`s$pu7)VnIOE6upEzt>0wt1z5STUQ@P_ny!p~{0(x7=n7 zTmC7{2=ZjRLlEXq`s`Xw)^D;s0et~_FdZm-WfE<&M!sb+*dn9blA8ojUQQhU#s<@< zWlz+1hQ1a($yW(Jk`LGzw>Krz+1fhimOst>o=~3+9OaW=^Lq@mRom5_+@Z(LpTna&d*|Gu&O*+wI;m|upi%Zd9+28CxW^ZX z-df;|${on~<@tAPCOe5=HErv5arEtMZpW^UHG;k7?~wUSl~B5PMSVHoY1iZGQ^H!# z*;&W#0I=4yP_(en6DFQW9e?g$gbDU^M|QMsEbKn$ly*|_4K~hzd*Tq2?xRlDATCf% zv6rJILV9g&SB_m{Q(9>T5LkRWh^G=1BMUPB(3Z;edBOD77fWidn6%(_L*c{y&gy#)D8zFFnqOqBJjcff%>dVN0%M`%Z6>jzF?L^cR&J z-6)Z3J#eZv%#rU5vNsJ-E?fRn71np1CtWzcLtE~T?y^z|E5kJ7iZQbZB0FUI>9S(_ zboUFc57Sye9D5adKy7c=gk3(gGquJf_R(4A=B;)GEsq$F8molYbVE$dP;sx-^z{}4b~Al(Ku_>z!JZ%8{?a6E z{9IeV%^A_Nh!DbFYVG%!U4y`vi=J4f`Z?5zejS|DF4WQ1NZoe{peH^aiRf2MOwfIBzWN~g|{g5S}+-0!%aVC5=iFu+)-Ei$Zs6uR%K4wIv>J)r0kQP{WZcz%81iN5ackG)UXG#Xxb~R!7hRPg=sgHL`@yaYN~+|y=!9^b zCH#KN<|ZX@M4y}3d!fnP8uR0O&^YFa>|S4;TZ&+>I8UQx{2j|s_CT;RJl$8#jLJ-*Hq6WFgdmzUpC zcv6&Hu_quCcN@J%g4Q&mZkLqwu@pp2m*dCNdD?bE#Dgnrm+ z>?h0`sY=+*z62Vt{6Y2>Zmxn({elNi4EMJDwM4FvKG3Cw?my7Nvax*2UsxWhP~p6o z4L%Gs!^bkUVA1d%#BMDei>)#(`~!``#v#_R1{(okVQ<~bFf%cKt zc8GSu1_#n+;rqKm)o%9h}tcExGJ>!BU;BN^3Flzy3gH^8G^Cye&tQ{30 zMRV$9(k1^ee5rm5L?s{x{YFmFYbHB@d-_`_Uh5bg1$``PfZ7CAU;Pf#aj|Z3jXY4B zgHp3_;_R6DX5DTQ=afINTdhTzxO7G8kGWF1h`zm4*+6AQHBpKu42l3j_IJzxa8IyG z$Sv)o4oWi?--;kY!JJ<}>4M$B1K_as!pJmWkWZlWcG)W;Z4a8q+T||CvHBq;24_s6 ztw`)1CcO4DfG*E&`vA5a8|}|puzW!;t1vX4FEM>XI0B!?tAvJ6<&2kPcj+r>qi7@D I!K@STe~;=^!T.AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) + 3 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] + 0 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} + 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} +False TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] +"unused" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] +====== Environmental Conditions =================================================================== + 1.225 AirDens - Air density (kg/m^3) + 1.4639E-05 KinVisc - Kinematic air viscosity (m^2/s) + 335 SpdSound - Speed of sound (m/s) + 103500 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] + 1700 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] + 0.5 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True] +====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3] + 2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] + 100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] +====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2] + 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] + 2 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] +====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] +"Elliptic_OLAF.dat" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] + 3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] +====== Airfoil Information ========================================================================= + 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) + 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) + 2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-) + 3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-) + 4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-) + 0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-) + 1 NumAFfiles - Number of airfoil files used (-) +"Polar2PiAlpha_AD15.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"Elliptic_AD15_blade_40_cos.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"Elliptic_AD15_blade_40_dummy.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"Elliptic_AD15_blade_40_dummy.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] + 7 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) +(m) (m) (-) (-) +0.0000000E+00 1.0000000E+01 1.0000000E+00 1.0000000E-01 +2.3330000E+01 9.3300000E+00 1.0000000E+00 1.0000000E-01 +4.6670000E+01 8.6700000E+00 1.0000000E+00 1.0000000E-01 +7.0000000E+01 8.0000000E+00 1.0000000E+00 1.0000000E-01 +9.3330000E+01 7.3300000E+00 1.0000000E+00 1.0000000E-01 +1.1667000E+02 6.6700000E+00 1.0000000E+00 1.0000000E-01 +1.4000000E+02 6.0000000E+00 1.0000000E+00 1.0000000E-01 +====== Outputs ==================================================================================== +False SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) + 0 NBlOuts - Number of blade node outputs [0 - 9] (-) + 1 BlOutNd - Blade nodes whose values will be output (-) + 0 NTwOuts - Number of tower node outputs [0 - 9] (-) + 1 TwOutNd - Tower nodes whose values will be output (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"RtTSR" +"RtVAvgxh" +"RtVAvgyh" +"RtVAvgzh" +"RtSkew" +"RtAeroFxh" +"RtAeroFyh" +"RtAeroFzh" +"RtAeroMxh" +"RtAeroMyh" +"RtAeroMzh" +"RtAeroPwr" +"RtAeroCp" +"RtAeroCq" +"RtAeroCt" +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section] + 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) + "All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) + OutListAD - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +Fx +Fy +Vx +Vy +VUndx +VUndy +VUndz +STVx +STVy +STVz +Vrel +TnInd +AxInd +Theta +Phi +Vindx +Vindy +Alpha +Gam +Fn +Ft +Cl +Cd +Cm +Cx +Cy +Cn +Ct +Fl +Fd +Mm +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat new file mode 100644 index 0000000000..b38b9d07c9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_AD15_blade_40_cos.dat @@ -0,0 +1,46 @@ +AERODYN v15.00.* - BLADE DEFINITION INPUT FILE +Turbine EllipticWing, Generated by script Main_CreateModel.py V112-3.075MW - +--- Blade Properties --- +40 NumBlNds - Number of blade nodes used in the analysis (-) +BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID +(m) (m) (m) (deg) (deg) (m) (-) + 0 0 0 0 0 1.00000000e-05 1 + 8.10672966e-03 0 0 0 0 8.05000000e-02 1 + 3.23743434e-02 0 0 0 0 1.60400000e-01 1 + 7.26454564e-02 0 0 0 0 2.39300000e-01 1 + 1.28658895e-01 0 0 0 0 3.16700000e-01 1 + 2.00051391e-01 0 0 0 0 3.92000000e-01 1 + 2.86359936e-01 0 0 0 0 4.64700000e-01 1 + 3.87024786e-01 0 0 0 0 5.34500000e-01 1 + 5.01393091e-01 0 0 0 0 6.00700000e-01 1 + 6.28723130e-01 0 0 0 0 6.63100000e-01 1 + 7.68189116e-01 0 0 0 0 7.21200000e-01 1 + 9.18886561e-01 0 0 0 0 7.74600000e-01 1 + 1.07983813e+00 0 0 0 0 8.23000000e-01 1 + 1.25000000e+00 0 0 0 0 8.66000000e-01 1 + 1.42826860e+00 0 0 0 0 9.03500000e-01 1 + 1.61348778e+00 0 0 0 0 9.35000000e-01 1 + 1.80445634e+00 0 0 0 0 9.60500000e-01 1 + 1.99993577e+00 0 0 0 0 9.79800000e-01 1 + 2.19865830e+00 0 0 0 0 9.92700000e-01 1 + 2.39933515e+00 0 0 0 0 9.99200000e-01 1 + 2.60066485e+00 0 0 0 0 9.99200000e-01 1 + 2.80134170e+00 0 0 0 0 9.92700000e-01 1 + 3.00006423e+00 0 0 0 0 9.79800000e-01 1 + 3.19554366e+00 0 0 0 0 9.60500000e-01 1 + 3.38651222e+00 0 0 0 0 9.35000000e-01 1 + 3.57173140e+00 0 0 0 0 9.03500000e-01 1 + 3.75000000e+00 0 0 0 0 8.66000000e-01 1 + 3.92016187e+00 0 0 0 0 8.23000000e-01 1 + 4.08111344e+00 0 0 0 0 7.74600000e-01 1 + 4.23181088e+00 0 0 0 0 7.21200000e-01 1 + 4.37127687e+00 0 0 0 0 6.63100000e-01 1 + 4.49860691e+00 0 0 0 0 6.00700000e-01 1 + 4.61297521e+00 0 0 0 0 5.34500000e-01 1 + 4.71364006e+00 0 0 0 0 4.64700000e-01 1 + 4.79994861e+00 0 0 0 0 3.92000000e-01 1 + 4.87134110e+00 0 0 0 0 3.16700000e-01 1 + 4.92735454e+00 0 0 0 0 2.39300000e-01 1 + 4.96762566e+00 0 0 0 0 1.60400000e-01 1 + 4.99189327e+00 0 0 0 0 8.05000000e-02 1 + 5 0 0 0 0 1.00000000e-05 1 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat new file mode 100644 index 0000000000..9e6c6b5c45 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_IW.dat @@ -0,0 +1,57 @@ +------- InflowWind INPUT FILE ------------------------------------------------------------------------- +Input for elliptical wing uniform wind +--------------------------------------------------------------------------------------------------------------- +False Echo - Echo input data to .ech (flag) + 2 WindType - switch for wind file type (1=steady; 2=uniform; 3=binary TurbSim FF; 4=binary Bladed-style FF; 5=HAWC format; 6=User defined; 7=native Bladed FF) + 0 PropagationDir - Direction of wind propagation (meteorological rotation from aligned with X (positive rotates towards -Y) -- degrees) (not used for native Bladed format WindType=7) + 0 VFlowAng - Upflow angle (degrees) (not used for native Bladed format WindType=7) + 1 NWindVel - Number of points to output the wind velocity (0 to 9) + 0 WindVxiList - List of coordinates in the inertial X direction (m) + 0 WindVyiList - List of coordinates in the inertial Y direction (m) + 100 WindVziList - List of coordinates in the inertial Z direction (m) +================== Parameters for Steady Wind Conditions [used only for WindType = 1] ========================= + 1 HWindSpeed - Horizontal wind speed (m/s) + 100 RefHt - Reference height for horizontal wind speed (m) + 0 PLExp - Power law exponent (-) +================== Parameters for Uniform wind file [used only for WindType = 2] ============================ +"Elliptic_Wind.wnd" FileName_Uni - Filename of time series data for uniform wind field. (-) + 100 RefHt_Uni - Reference height for horizontal wind speed (m) + 125.88 RefLength - Reference length for linear horizontal and vertical sheer (-) +================== Parameters for Binary TurbSim Full-Field files [used only for WindType = 3] ============== +"unused" FileName_BTS - Name of the Full field wind file to use (.bts) +================== Parameters for Binary Bladed-style Full-Field files [used only for WindType = 4 or WindType = 7] ========= +"unused" FileNameRoot - WindType=4: Rootname of the full-field wind file to use (.wnd, .sum); WindType=7: name of the intermediate file with wind scaling values +False TowerFile - Have tower file (.twr) (flag) ignored when WindType = 7 +================== Parameters for HAWC-format binary files [Only used with WindType = 5] ===================== +"unused" FileName_u - name of the file containing the u-component fluctuating wind (.bin) +"unused" FileName_v - name of the file containing the v-component fluctuating wind (.bin) +"unused" FileName_w - name of the file containing the w-component fluctuating wind (.bin) + 64 nx - number of grids in the x direction (in the 3 files above) (-) + 32 ny - number of grids in the y direction (in the 3 files above) (-) + 32 nz - number of grids in the z direction (in the 3 files above) (-) + 16 dx - distance (in meters) between points in the x direction (m) + 3 dy - distance (in meters) between points in the y direction (m) + 3 dz - distance (in meters) between points in the z direction (m) + 15000 RefHt_Hawc - reference height; the height (in meters) of the vertical center of the grid (m) + ------------- Scaling parameters for turbulence --------------------------------------------------------- + 2 ScaleMethod - Turbulence scaling method [0 = none, 1 = direct scaling, 2 = calculate scaling factor based on a desired standard deviation] + 1 SFx - Turbulence scaling factor for the x direction (-) [ScaleMethod=1] + 1 SFy - Turbulence scaling factor for the y direction (-) [ScaleMethod=1] + 1 SFz - Turbulence scaling factor for the z direction (-) [ScaleMethod=1] + 1.2 SigmaFx - Turbulence standard deviation to calculate scaling from in x direction (m/s) [ScaleMethod=2] + 0.8 SigmaFy - Turbulence standard deviation to calculate scaling from in y direction (m/s) [ScaleMethod=2] + 0.2 SigmaFz - Turbulence standard deviation to calculate scaling from in z direction (m/s) [ScaleMethod=2] + ------------- Mean wind profile parameters (added to HAWC-format files) --------------------------------- + 12 URef - Mean u-component wind speed at the reference height (m/s) + 2 WindProfile - Wind profile type (0=constant;1=logarithmic,2=power law) + 0.2 PLExp_Hawc - Power law exponent (-) (used for PL wind profile type only) + 0.03 Z0 - Surface roughness length (m) (used for LG wind profile type only) + 0 XOffset - Initial offset in +x direction (shift of wind box) +====================== OUTPUT ================================================== +False SumPrint - Print summary data to .IfW.sum (flag) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Wind1VelX" X-direction wind velocity at point WindList(1) +"Wind1VelY" Y-direction wind velocity at point WindList(1) +"Wind1VelZ" Z-direction wind velocity at point WindList(1) +END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +--------------------------------------------------------------------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat new file mode 100644 index 0000000000..8c357663de --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_OLAF.dat @@ -0,0 +1,45 @@ +--------------------------- FREE WAKE INPUT FILE ---------------------------------------------- +Free wake input file for the elliptic wing case +--------------------------- GENERAL OPTIONS --------------------------------------------------- +5 IntMethod Integration method {4: 2nd order Predictor/Corrector, 5: Forward Euler 1st order, default: 5} (switch) +default DTfvw Time interval for wake propagation. {default: dtaero} (s) +99999 FreeWakeStart Time when wake is free. (-) value = always free. {default: 0.0} (s) +0.0 FullCircStart Time at which full circulation is reached. {default: 0.0} (s) +--------------------------- CIRCULATION SPECIFICATIONS ---------------------------------------- +1 CircSolvingMethod Circulation solving method {1: Cl-Based, 2: No-Flow Through, 3: Prescribed, default: 1 }(switch) +0.00005 CircSolvConvCrit Convergence criteria {default: 0.001} [only if CircSolvingMethod=1] (-) +0.1 CircSolvRelaxation Relaxation factor {default: 0.1} [only if CircSolvingMethod=1] (-) +200 CircSolvMaxIter Maximum number of iterations for circulation solving {default: 30} (-) +"NA" PrescribedCircFile File containing prescribed circulation [only if CircSolvingMethod=3] (quoted string) +=============================================================================================== +--------------------------- WAKE OPTIONS ------------------------------------------------------ +------------------- WAKE EXTENT AND DISCRETIZATION -------------------------------------------- +100 nNWPanel Number of near-wake panels (-) +10 WakeLength Total wake distance, in number of wake panels (-) +default FreeWakeLength Wake length that is free, in number of wake panels (-) {default: WakeLength} +default FWShedVorticity Include shed vorticity in the far wake {default: false} +------------------- WAKE REGULARIZATIONS AND DIFFUSION ----------------------------------------- +0 DiffusionMethod Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0} +0 RegDeterMethod Method to determine the regularization parameters {0: Manual, 1: Optimized, default: 0 } +2 RegFunction Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch) +1 WakeRegMethod Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch) +0.0 WakeRegFactor Wake regularization factor (m) +0.0 WingRegFactor Wing regularization factor (m) +100 CoreSpreadEddyVisc Eddy viscosity in core spreading methods, typical values 1-1000 +------------------- WAKE TREATMENT OPTIONS --------------------------------------------------- +False TwrShadowOnWake Include tower flow disturbance effects on wake convection {default:false} [only if TwrPotent or TwrShadow] +0 ShearModel Shear Model {0: No treatment, 1: Mirrored vorticity, default: 0} +------------------- SPEEDUP OPTIONS ----------------------------------------------------------- +1 VelocityMethod Method to determine the velocity {1:Biot-Savart Segment, 2:Particle tree, default: 1} +1.5 TreeBranchFactor Branch radius fraction above which a multipole calculation is used {default: 2.0} [only if VelocityMethod=2] +1 PartPerSegment Number of particles per segment [only if VelocityMethod=2] +=============================================================================================== +--------------------------- OUTPUT OPTIONS --------------------------------------------------- +1 WrVTk Outputs Visualization Toolkit (VTK) (independent of .fst option) {False: NoVTK, True: Write VTK at each time step} (flag) +1 nVTKBlades Number of blades for which VTK files are exported {0: No VTK per blade, n: VTK for blade 1 to n} (-) +1 VTKCoord Coordinate system used for VTK export. {1: Global, 2: Hub, 3: Both, "default": 1} +default VTK_fps Frame rate for VTK output (frames per second) {"all" for all glue code timesteps, "default" for all FVW timesteps} [only if WrVTK=1] +0 nGridOut Number of grid outputs +GridName DTOut XStart XEnd nX YStart YEnd nY ZStart ZEnd nZ +(-) (s) (m) (m) (-) (m) (m) (-) (m) (m) (-) +=============================================================================================== diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd new file mode 100644 index 0000000000..fa64f04d43 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Elliptic_Wind.wnd @@ -0,0 +1,5 @@ +!Wind file with step changes in wind speed. +!Time Wind Wind Vert. Horiz. Vert. LinV Gust +! Speed Dir Speed Shear Shear Shear Speed +0.00 1.00 0.00 0.10 0.00 0.00 0.00 0.00 +1000.0 1.00 0.00 0.10 0.00 0.00 0.00 0.00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr new file mode 100644 index 0000000000..df2a42bc7f --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Main_EllipticalWingInf_OLAF.dvr @@ -0,0 +1,55 @@ +----- AeroDyn MultiRotor Driver Input File -------------------------------------- +Elliptical wing test case for OLAF free vortex wake +----- Input Configuration ---------------------------------------------------- +False Echo - Echo input parameters to ".ech"? + 1000 TMax - Total run time (s) + 100 DT - Simulation time step (s) +"Elliptic_AD15_40.dat" AeroFile - Name of the AeroDyn input file +----- Inflow Data ----------------------------------------------------------- + 1 CompInflow - Compute inflow wind velocities (switch) {0=Steady Wind; 1=InflowWind} +"Elliptic_IW.dat" InflowFile - Name of the InflowWind input file + 0 HWindSpeed - Horizontal wind speed [used only when CompInflow=0 and NumCase=0] (m/s) + 0 RefHt - Reference height for horizontal wind speed [used only when CompInflow=0 and NumCase=0] (m) + 0 PLExp - Power law exponent [used only when CompInflow=0 and NumCase=0] (-) +----- Turbine Data ----------------------------------------------------------- +1 NumTurbines - Number of turbines +====== Turbine 1 ================================================================ + False BasicHAWTFormat(1) - Flag to switch between basic or generic input format {True: next 7 lines are basic inputs, False: Base/Twr/Nac/Hub/Bld geometry and motion must follow} +0,0,00 BaseOriginInit(1) - x,y,z coordinates of base origin (m) +0,0,0 BaseOrientationInit(1) - successive rotations (theta_x, theta_y, theta_z) defining initial orientation of the base frame from the global frame (e.g. roll, tilt, yaw) (deg) +True HasTower(1) - True if turbine has a tower (flag) +False HAWTprojection(1) - True if turbine is horizontal axis (for AeroDyn projections) (flag) +0,0,0 TwrOrigin_t(1) - Coordinate of tower base in base coordinates [used only when HasTower is True] (m) +0,0,100 NacOrigin_t(1) - x,y,z coordinates of nacelle origin (and tower top) from base, in base coordinates (m) +0,0,0 HubOrigin_n(1) - NOTE: Bar has 7m overhang, tilt of 6deg, and twr2shaft 3.09343 x,y,z coordinates of hub origin from nacelle origin, in nacelle coordinates (m) +0,0,0 HubOrientation_n(1) - successive rotations (theta_x, theta_y, theta_z) defining initial orientation of the hub frame from the nacelle frame (e.g. roll, tilt, yaw). The x axis needs to be aligned with the rotational speed. (deg) +----- Turbine 1 Blades ----------------------------------------------------------------- +1 NumBlades(1) - Number of blades for current rotor (-) +0,0,0 BldOrigin_h(1_1) - Orign of blade 1 wrt. hub origin in hub coordinates (m) +-90,0,-90 BldOrientation_h(1_1) - successive rotations (theta_x, theta_y, theta_z) defining initial orientation of the blade frame from the hub frame such that the "z" is along span, "y" along trailing edge without pitch (azimuth, precone, pitch) (deg) +0.0 BldHubRad_bl(1_1) - z-offset in blade coordinates of blade 1 where radial input data start (m) +----- Turbine 1 Base Motion ----------------------------------------------------------------- +0 BaseMotionType(1) - Type of motion prescribed for this base {0: fixed, 1: Sinusoidal motion, 2: arbitrary motion} (flag) +1 DegreeOfFreedom(1) - {1:xt, 2:yt, 3:zt, 4:theta_xt, 5:theta_yt, 6:theta_zt} [used only when BaseMotionType=1] (flag) +0 Amplitude(1) - Amplitude of sinusoidal motion [used only when BaseMotionType=1] +0 Frequency(1) - Frequency of sinusoidal motion [used only when BaseMotionType=1] +"" BaseMotionFileName(1) - Filename containing rotor motion [used only when BaseMotionType=2] +----- Turbine 1 Nacelle Motion ----------------------------------------------------------------- +0 NacMotionType(1) - Type of motion prescribed for the nacelle {0: fixed yaw, 1: time varying yaw angle} (flag) +0 NacYaw(1) - Yaw angle (about z_t) of the nacelle [user only when NacMotionType=0] (deg) +"NA" NacMotionFileName(1) - Filename containing yaw motion [used only when NacMotionType=1] +----- Turbine 1 Rotor Motion ----------------------------------------------------------------- +0 RotMotionType(1) - Type of motion prescribed for this rotor {0: constant rotation, 1: time varying rotation} (flag) +0. RotSpeed(1) - Rotational speed of rotor in rotor coordinates [used only when RotorMotionType=0] (rpm) +"NA" RotMotionFileName(1) - Filename containing rotor motion [used only when RotorMotionType=1] +----- Turbine 1 Blade Pitch Motion ----------------------------------------------------------------- +0 BldMotionType(1) - Type of pitch motion prescribed for the blades {0: fixed, 1: time varying pitch} (flag) +0 BldPitch(1_1) - Blade 1 pitch [used only when BlMotiontype=1] (deg) +"NA" BldMotionFileName(1_1) - Filename containing blade pitch motion [used only when BlMotionType=1] +----- I/O Settings ----------------------------------------------------------- +"ES15.8E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +2 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both} +0 WrVTK - VTK visualization data output: (switch) {0=none; 1=animation} +0.25 VTKHubRad - HubRadius for VTK visualization (m) +-0.1,-0.1,-0.1,0.2,0.2,0.2 VTKNacDim - Nacelle Dimension for VTK visualization x0,y0,z0,Lx,Ly,Lz (m) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat new file mode 100644 index 0000000000..a704f032bf --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/example_files/input_decks/Polar2PiAlpha_AD15.dat @@ -0,0 +1,152 @@ +! ------------ AirfoilInfo v1.00.x Input File ----------------------------------. +! Airfoil properties to be used with AeroDyn v15 +! Generated from ... +! note that this file uses Marshall Buhl's new input file processing; start all comment lines with ! +! ------------------------------------------------------------------------------ +"DEFAULT" InterpOrd ! Interpolation order to use for quasi-steady table lookup {1=linear; 3=cubic spline; "default"} [default=3] +1.0 NonDimArea ! The non-dimensional area of the airfoil (area/chord^2) (set to 1.0 if unsure or unneeded) +0 NumCoords ! The number of coordinates in the airfoil shape file. Set to zero if coordinates not included. +"unused" BL_file ! The file name including the boundary layer characteristics of the profile. Ignored if the aeroacoustic module is not called. +1 NumTabs ! Number of airfoil tables in this file. Each table must have lines for Re and Ctrl. +! ------------------------------------------------------------------------------ +! data for table 1 +! ------------------------------------------------------------------------------ +1.0 Re ! Reynolds number in millions +0 Ctrl ! Control setting (must be 0 for current AirfoilInfo) +True InclUAdata ! Is unsteady aerodynamics data included in this table? If TRUE, then include 30 UA coefficients below this line +!........................................ +0.0 alpha0 ! 0-lift angle of attack, depends on airfoil. +27.8411 alpha1 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA>alpha0. (deg) +-27.8411 alpha2 ! Angle of attack at f=0.7, (approximately the stall angle) for AOA1] +0 S2 ! Constant in the f curve best-fit for AOA>alpha1;by definition it depends on the airfoil. [ignored if UAMod<>1] +0 S3 ! Constant in the f curve best-fit for alpha2<=AOA1] +0 S4 ! Constant in the f curve best-fit for AOA1] +2.598 Cn1 ! Critical value of C0n at leading edge separation. It should be extracted from airfoil data at a given Mach and Reynolds number. It can be calculated from the static value of Cn at either the break in the pitching moment or the loss of chord force at the onset of stall. It is close to the condition of maximum lift of the airfoil at low Mach numbers. +-2.598 Cn2 ! As Cn1 for negative AOAs. +default St_sh ! Strouhal's shedding frequency constant. [default = 0.19] +0.0 Cd0 ! 2D drag coefficient value at 0-lift. +0.0 Cm0 ! 2D pitching moment coefficient about 1/4-chord location, at 0-lift, positive if nose up. [If the aerodynamics coefficients table does not include a column for Cm, this needs to be set to 0.0] +0 k0 ! Constant in the \hat(x)_cp curve best-fit; = (\hat(x)_AC-0.25). [ignored if UAMod<>1] +0 k1 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] +0 k2 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] +0 k3 ! Constant in the \hat(x)_cp curve best-fit. [ignored if UAMod<>1] +0 k1_hat ! Constant in the expression of Cc due to leading edge vortex effects. [ignored if UAMod<>1] +default x_cp_bar ! Constant in the expression of \hat(x)_cp^v. [ignored if UAMod<>1, default = 0.2] +default UACutout ! Angle of attack above which unsteady aerodynamics are disabled (deg). [Specifying the string "Default" sets UACutout to 45 degrees] +default filtCutOff ! Reduced frequency cut-off for low-pass filtering the AoA input to UA, as well as the 1st and 2nd derivatives (-) [default = 0.5] +!........................................ +! Table of aerodynamics coefficients +98 NumAlf ! Number of data lines in the following table +! Alpha Cl Cd Cm +! (deg) (-) (-) (-) +-1.80000000e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00 +-1.79000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.78000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.77000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.76000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.75000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.74000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.73000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.72000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.71000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.70000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.69000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.68000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.67000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.66000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.65000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.60000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.50000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.40000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.30000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.20000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.10000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-1.00000000e+02 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-9.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-8.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-7.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-6.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-5.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-4.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-3.00000000e+01 -2.99990000e+00 0.00000000e+00 0.00000000e+00 +-2.50000000e+01 -2.74156000e+00 0.00000000e+00 0.00000000e+00 +-2.00000000e+01 -2.19325000e+00 0.00000000e+00 0.00000000e+00 +-1.70000000e+01 -1.86426000e+00 0.00000000e+00 0.00000000e+00 +-1.60000000e+01 -1.75460000e+00 0.00000000e+00 0.00000000e+00 +-1.50000000e+01 -1.64493000e+00 0.00000000e+00 0.00000000e+00 +-1.40000000e+01 -1.53527000e+00 0.00000000e+00 0.00000000e+00 +-1.30000000e+01 -1.42561000e+00 0.00000000e+00 0.00000000e+00 +-1.20000000e+01 -1.31595000e+00 0.00000000e+00 0.00000000e+00 +-1.10000000e+01 -1.20628000e+00 0.00000000e+00 0.00000000e+00 +-1.00000000e+01 -1.09662000e+00 0.00000000e+00 0.00000000e+00 +-9.00000000e+00 -9.86960000e-01 0.00000000e+00 0.00000000e+00 +-8.00000000e+00 -8.77300000e-01 0.00000000e+00 0.00000000e+00 +-7.00000000e+00 -7.67640000e-01 0.00000000e+00 0.00000000e+00 +-6.00000000e+00 -6.57970000e-01 0.00000000e+00 0.00000000e+00 +-4.00000000e+00 -4.38650000e-01 0.00000000e+00 0.00000000e+00 +-2.00000000e+00 -2.19320000e-01 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 1.00000000e+00 1.09660000e-01 0.00000000e+00 0.00000000e+00 + 2.00000000e+00 2.19320000e-01 0.00000000e+00 0.00000000e+00 + 3.00000000e+00 3.28990000e-01 0.00000000e+00 0.00000000e+00 + 4.00000000e+00 4.38650000e-01 0.00000000e+00 0.00000000e+00 + 5.00000000e+00 5.48310000e-01 0.00000000e+00 0.00000000e+00 + 6.00000000e+00 6.57970000e-01 0.00000000e+00 0.00000000e+00 + 7.00000000e+00 7.67640000e-01 0.00000000e+00 0.00000000e+00 + 8.00000000e+00 8.77300000e-01 0.00000000e+00 0.00000000e+00 + 9.00000000e+00 9.86960000e-01 0.00000000e+00 0.00000000e+00 + 1.00000000e+01 1.09662000e+00 0.00000000e+00 0.00000000e+00 + 1.10000000e+01 1.20628000e+00 0.00000000e+00 0.00000000e+00 + 1.20000000e+01 1.31595000e+00 0.00000000e+00 0.00000000e+00 + 1.30000000e+01 1.42561000e+00 0.00000000e+00 0.00000000e+00 + 1.40000000e+01 1.53527000e+00 0.00000000e+00 0.00000000e+00 + 1.50000000e+01 1.64493000e+00 0.00000000e+00 0.00000000e+00 + 1.60000000e+01 1.75460000e+00 0.00000000e+00 0.00000000e+00 + 1.70000000e+01 1.86426000e+00 0.00000000e+00 0.00000000e+00 + 1.80000000e+01 1.97392000e+00 0.00000000e+00 0.00000000e+00 + 2.00000000e+01 2.19325000e+00 0.00000000e+00 0.00000000e+00 + 2.20000000e+01 2.41257000e+00 0.00000000e+00 0.00000000e+00 + 2.50000000e+01 2.74156000e+00 0.00000000e+00 0.00000000e+00 + 3.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 4.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 5.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 6.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 7.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 8.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 9.00000000e+01 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.00000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.10000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.20000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.30000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.40000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.50000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.60000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.65000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.66000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.67000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.68000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.69000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.70000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.71000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.72000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.73000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.74000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.75000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.76000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.77000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.78000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.79000000e+02 2.99990000e+00 0.00000000e+00 0.00000000e+00 + 1.80000000e+02 0.00000000e+00 0.00000000e+00 0.00000000e+00 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py new file mode 100644 index 0000000000..13db865e8e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/helpers_for_test.py @@ -0,0 +1,29 @@ +import glob +import os + +MyDir=os.path.join(os.path.dirname(__file__),'example_files') + +__all__ = ['MyDir', 'reading_test'] + +def reading_test(Pattern, Reader, DEBUG=False): + nError=0 + if DEBUG: + print('') + failedTest=[] + for f in glob.glob(os.path.join(MyDir,Pattern)): + if os.path.splitext(f)[-1] in ['.py','.pyc'] or f.find('_TMP')>0: + continue + try: + obj = Reader(f) + s=type(obj).__name__.replace('File','')[:20] + if DEBUG: + print('[ OK ] {:30s}\t{:20s} {:20s}'.format(os.path.basename(f)[:30],s)) + except: + nError += 1 + failedTest=[os.path.basename(f)] + if DEBUG: + print('[FAIL] {:30s}\tException occurred'.format(os.path.basename(f)[:30])) + raise + if nError>0: + print('Reading failed for files: ',failedTest) + raise Exception('Some tests failed') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py new file mode 100644 index 0000000000..3f56ef4425 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_bladed.py @@ -0,0 +1,127 @@ +import os +import numpy as np +import re +import pandas as pd +import unittest +from .helpers_for_test import MyDir, reading_test + +from pyFAST.input_output.bladed_out_file import BladedFile + + + +class Test(unittest.TestCase): + + def test_001_read_all(self): + reading_test('Bladed_out_*.*', BladedFile) + + + def test_Bladed(self): + ## check for binary + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary.$41')) + #F = BladedFile(os.path.join(MyDir,'Bladed_out_binary.$41')) + DF = F.toDataFrame() + self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[0],146245.984375) + self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[-1],156967.484375) + + ## check for ASCII + F = BladedFile(os.path.join(MyDir,'Bladed_out_ascii.$41')) + DF = F.toDataFrame() + self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[0],146363.8) + self.assertAlmostEqual(DF['0.0m-Blade 1 Fx (Root axes) [N]'].values[-1],156967.22) + + def test_Bladed_case2_project(self): + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$PJ')) + DF = F.toDataFrame() + #print(DFS.keys()) + #DF=DFS['Misc'] + + #print(DF.shape) + #print(DF.columns) + #print(DF.columns[0]) + #print(DF.columns[50]) + self.assertEqual(DF.shape, (10, 89)) + self.assertEqual(DF.columns[0] , 'Time [s]') + self.assertEqual(DF.columns[1] , 'Time from start of simulation [s]') + self.assertEqual(DF.columns[27] , '26.41m-DPMOM1 [Nm/m]') + self.assertEqual(DF.columns[69], '38.75m-Blade 1 y-position [m]') + self.assertEqual(DF.columns[88], 'Foundation Fz [N]') + self.assertAlmostEqual(DF['Time from start of simulation [s]'][0] , 7.0 ) + self.assertAlmostEqual(DF['26.41m-DPMOM1 [Nm/m]'][0] , -226.85083, 5 ) + self.assertAlmostEqual(DF['38.75m-Blade 1 y-position [m]'].values[0], -27.949090957, 5 ) + self.assertAlmostEqual(DF['38.75m-Blade 1 y-position [m]'].values[-1], -39.96076965, 5 ) + self.assertAlmostEqual(DF['Foundation Fz [N]'][0] , -1092165.5 ) + self.assertAlmostEqual(DF['Foundation Fz [N]'].values[-1] , -1093664.75 ) + + self.assertFalse(DF.isnull().values.any()) + + def test_Bladed_case2_indiv(self): + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$12')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (10, 14)) + self.assertEqual(DF.columns[0] , 'Time [s]') + self.assertEqual(DF.columns[1] , 'POW2 [W]') + self.assertAlmostEqual(DF['POW2 [W]'].values[-1] , 1940463.0) + + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$25')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (10, 17)) + self.assertEqual(DF.columns[0] , 'Time [s]') + self.assertEqual(DF.columns[1] , '-15.0m-MXT [Nm]') + self.assertAlmostEqual(DF['-15.0m-MXT [Nm]'].values[-1], 1587526.625) + + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$69')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (10, 7)) + self.assertEqual(DF.columns[0] , 'Time [s]') + self.assertEqual(DF.columns[1] , 'Foundation Mx [Nm]') + self.assertAlmostEqual(DF['Foundation Mx [Nm]'].values[-1], 1587236.375) + + + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$37')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (522, 6)) + self.assertEqual(DF.columns[0] , 'Time [s]') + self.assertEqual(DF.columns[1] , 'Simulation Time [s]') + self.assertAlmostEqual(DF['State with largest error [N]'].values[-1], 9.0) + + # NOTE: this binary file is detected as ascii, and the reading fails.. + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2_fail.$55')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (50, 1)) + self.assertEqual(DF.columns[0] , 'Step size histogram [N]') + #self.assertTrue(np.isnan(DF['Step size histogram [N]'].values[-1])) + self.assertEqual(DF['Step size histogram [N]'].values[-1],0.0) + + # NOTE: this one is properly dected as binary + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$55')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (50, 1)) + self.assertEqual(DF.columns[0] , 'Step size histogram [N]') + self.assertEqual(DF['Step size histogram [N]'].values[-1], 0) + + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$46')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (10, 13)) + self.assertEqual(DF.columns[1] , 'Node 1-Water particle velocity in X direction [m/s]') + self.assertEqual(DF['Node 1-Water particle velocity in X direction [m/s]'].values[-1],-0.25) + + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$06')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (10, 5)) + self.assertEqual(DF.columns[1] , 'Generator torque [Nm]') + self.assertEqual(DF['Generator torque [Nm]'].values[-1],12852.1953125) + + F = BladedFile(os.path.join(MyDir,'Bladed_out_binary_case2.$23')) + DF=F.toDataFrame() + self.assertEqual(DF.shape, (10, 9)) + self.assertEqual(DF.columns[1] , 'Stationary hub Mx [Nm]') + self.assertEqual(DF['Stationary hub Mx [Nm]'].values[-1],1112279.375) + + +if __name__ == '__main__': + unittest.main() + #Test().test_001_read_all() + #Test().test_Bladed() + #Test().test_Bladed_case2_project() + #Test().test_Bladed_case2_indiv() + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py new file mode 100644 index 0000000000..7170a17f9d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_csv.py @@ -0,0 +1,53 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output import CSVFile + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('CSV*.*', CSVFile) + + def DF(self,FN): + """ Reads a file and return a dataframe """ + return CSVFile(os.path.join(MyDir,FN)).toDataFrame() + + def test_CSV(self): + self.assertEqual(self.DF('CSVAutoCommentChar.txt').shape,(11,6)) + + DF=self.DF('CSVColInHeader.csv') + self.assertTrue(all(DF.columns.values==['ColA','ColB','ColC'])) + self.assertEqual(DF.shape,(2,3)) + + DF=self.DF('CSVColInHeader2.csv') + self.assertTrue(all(DF.columns.values==['ColA','ColB','ColC'])) + self.assertEqual(DF.shape,(2,3)) + + DF=self.DF('CSVColInHeader3.csv') + self.assertTrue(all(DF.columns.values==['ColA','ColB','ColC'])) + self.assertEqual(DF.shape,(2,3)) + + #DF=self.DF('CSVComma_UTF16.csv') # TODO encoding + #self.assertEqual(DF.shape,(4,3)) + + self.assertEqual(self.DF('CSVComma.csv').shape,(4,2)) + self.assertEqual(self.DF('CSVDateNaN.csv').shape,(11,2)) + self.assertEqual(self.DF('CSVNoHeader.csv').shape,(4,2)) + self.assertEqual(self.DF('CSVSemi.csv').shape,(3,2)) + self.assertEqual(self.DF('CSVSpace_ExtraCol.csv').shape,(5,4)) + self.assertEqual(self.DF('CSVTab.csv').shape,(5,2)) + + DF = self.DF('CSVTwoLinesHeaders.txt') + self.assertEqual(DF.columns.values[-1],'GenTq_(kN m)') + self.assertEqual(DF.shape,(9,6)) + + def test_CSV_string(self): + DF=self.DF('CSVxIsString.csv') + self.assertEqual(DF.shape,(7,2)) + self.assertEqual(DF.columns.values[0],'Label_[-]') + + +if __name__ == '__main__': + #Test().test_CSV() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py new file mode 100644 index 0000000000..731104f0e1 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input.py @@ -0,0 +1,197 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.input_output.fast_input_file import ExtPtfmFile +from pyFAST.input_output.fast_input_file import ADPolarFile +from pyFAST.input_output.fast_input_file import EDBladeFile +from pyFAST.input_output.fast_wind_file import FASTWndFile + + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('FASTIn*.*', FASTInputFile) + + def test_FASTIn(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_BD.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['PitchK'],2.0e+07) + self.assertAlmostEqual(F['MemberGeom'][-1,2],61.5) + self.assertAlmostEqual(F['MemberGeom'][-2,3],0.023000) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_BD_bld.dat')) + F.test_ascii(bCompareWritesOnly=False,bDelete=True) + self.assertEqual(F['DampingCoeffs'][0][0],0.01) + # TODO BeamDyn Blade properties are not really "user friendly" + self.assertAlmostEqual(F['BeamProperties']['span'][1],1.0) + self.assertAlmostEqual(F['BeamProperties']['K'][1][0,0],1.8e+08) # K11 @ section 2 + self.assertAlmostEqual(F['BeamProperties']['M'][1][0,0],1.2) # M11 @ section 2 + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['RotSpeed'],0.2) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED_bld.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['BldEdgSh(6)'],-0.6952) + F.comment = 'ElastoDyn file' + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED_twr.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['AdjFASt'],1) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertTrue(F['TipLoss']) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_ExtPtfm_SubSef.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['StiffnessMatrix'][2,2],1.96653266e+09) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_HD.dat')) + #F.test_ascii(bCompareWritesOnly=True,bDelete=True) # TODO + self.assertAlmostEqual(F['RdtnDT'],0.0125) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_IF_NoHead.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertAlmostEqual(F['Z0'],0.03) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_SbD.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['Joints'][0,3],-100) + self.assertEqual(int(F['Members'][0,1]),1) + self.assertEqual(int(F['Members'][0,2]),2) + + F=FASTInputFile(os.path.join(MyDir,'FASTIn_SD.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F['PitManRat(1)'],2) + + def test_FASTADBld(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_bld.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertTrue('NumBlNds' in F.keys()) + df = F.toDataFrame() + self.assertEqual(df['BlChord_[m]'].values[-1], 1.419) + self.assertTrue('c2_Swp_Approx_[m]' in df.keys()) +# import matplotlib.pyplot as plt +# fig,axes = plt.subplots(1, 3, sharey=False, figsize=(10.4,4.8)) # (6.4,4.8) +# fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) +# ax= axes[0] +# ax.plot( df['BlSpn_[m]'], df['BlCrvAC_[m]'], 'k-' , label='Prebend AC') +# #ax.plot( df['BlSpn_[m]'], df['x'], '--' , label='x') +# ax.plot( df['BlSpn_[m]'], df['c2_Crv_Approx_[m]'], ':' , label='c2') +# ax.legend() +# ax= axes[1] +# ax.plot( df['BlSpn_[m]'], df['BlSwpAC_[m]'], 'k-' , label='Sweep AC') +# #ax.plot( df['BlSpn_[m]'], df['y'], '--' , label='y') +# ax.plot( df['BlSpn_[m]'], df['c2_Swp_Approx_[m]'], ':' , label='c2') +# ax.legend() +# ax= axes[2] +# ax.plot( df['BlSpn_[m]'], df['AC_Approx_[-]'], '-' , label='AC') +# ax.set_xlabel('') +# ax.set_ylabel('') +# ax.legend() +# plt.show() + + def test_FASTADPol(self): + #F=FASTInputFile(os.path.join(MyDir,'FASTIn_arf_coords.txt')) + #print(F.keys()) + F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_arfl.dat')) + df = F.toDataFrame() + self.assertTrue('Cn_pot_[-]' in df.keys()) + # --- Test Dedicated code + F = ADPolarFile() + F.read(os.path.join(MyDir,'FASTIn_AD15_arfl.dat')) + + def test_FASTADPolMulti(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_arf_multitabs.dat')) + F.test_ascii(bCompareWritesOnly=False,bDelete=True) + + dfs = F.toDataFrame() + self.assertTrue('AFCoeff_2' in dfs.keys()) + + df1 = dfs['AFCoeff_1'] + df2 = dfs['AFCoeff_2'] + self.assertTrue('Cn_pot_[-]' in df2.keys()) + + self.assertEqual(df1.shape[0],23) + self.assertEqual(df2.shape[0],24) + + F = ADPolarFile(numTabs=2) + F.write('_DUMMY') + + def test_FASTEDBld(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_ED_bld.dat')) + F.test_ascii(bCompareWritesOnly=True, bDelete=True) + self.assertEqual(F['BldEdgSh(6)'],-0.6952) + df = F.toDataFrame() + self.assertAlmostEqual(df['ShapeFlap1_[-]'].values[40],0.8530735996) + # --- Test Dedicated code + F = EDBladeFile() + F.read(os.path.join(MyDir,'FASTIn_ED_bld.dat')) + + def test_FASTExt(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_ExtPtfm_SubSef.dat')) + F.test_ascii(bCompareWritesOnly=False, bDelete=True) + self.assertEqual(F['StiffnessMatrix'][2,2],1.96653266e+09) + # --- Test Dedicated code + F = ExtPtfmFile() + F.read(os.path.join(MyDir,'FASTIn_ExtPtfm_SubSef.dat')) + F.test_ascii(bCompareWritesOnly=False, bDelete=True) + df=F.toDataFrame() + self.assertAlmostEqual(df['InpF_Fx_[N]'].values[-1], 1660.749680) + + def test_FASTWnd(self): + F=FASTWndFile(os.path.join(MyDir,'FASTWnd.wnd')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + + def test_FASTInGraph(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_HD.dat')) + #graph = F.toGraph() + #print(graph) + #self.assertEqual(len(graph.Nodes), 4) + #self.assertEqual(len(graph.Elements), 3) +# + #F=FASTInputFile(os.path.join(MyDir,'FASTIn_SbD.dat')) + #print(F) + #graph = F.toGraph() +# self.assertEqual(len(graph.Nodes), 2) +# self.assertEqual(len(graph.Elements), 1) + def test_FASTInMoorDyn(self): + # MoorDyn version 1 + F=FASTInputFile(os.path.join(MyDir,'FASTIn_MD-v1.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(float(F['LineTypes'][0,1]),0.02) + + # MoorDyn version 2 + F=FASTInputFile(os.path.join(MyDir,'FASTIn_MD-v2.dat')) + #F.write(os.path.join(MyDir,'FASTIn_MD-v2.dat---OUT')) + self.assertTrue('Points' in F.keys()) + self.assertTrue('LineTypes' in F.keys()) + self.assertTrue('LineProp' in F.keys()) + self.assertEqual(F['LineProp'].shape , (3,7)) + self.assertEqual(F['LineTypes'].shape , (1,10)) + self.assertEqual(F['Points'].shape , (6,9)) + self.assertEqual(len(F['Outlist']) , 6) + self.assertEqual(F['Outlist'][0] , 'FairTen1') + self.assertEqual(F['LineProp'][0,0] , '1') + self.assertEqual(F['LineProp'][0,1] , 'main') + self.assertEqual(F['LineProp'][0,6] , '-') + + def test_FASTInAirfoil(self): + F=FASTInputFile(os.path.join(MyDir,'FASTIn_AD15_arfl.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertTrue('InterpOrd' in F.keys()) + self.assertTrue('AFCoeff' in F.keys()) + self.assertEqual(F['AFCoeff'].shape, (30,4)) + +if __name__ == '__main__': + #Test().test_FASTEDBld() + #Test().test_FASTADBld() + #Test().test_FASTADPol() + #Test().test_FASTADPolMulti() + #Test().test_FASTExt() + #Test().test_FASTIn() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py new file mode 100644 index 0000000000..60e2439fab --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_input_deck.py @@ -0,0 +1,25 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.fast_input_deck import FASTInputDeck + +class Test(unittest.TestCase): + + def test_deck_driver(self): + F=FASTInputDeck(os.path.join(MyDir,'input_decks/Main_EllipticalWingInf_OLAF.dvr')) + #F.test_ascii(bCompareWritesOnly=True,bDelete=True) + self.assertEqual(F.fst['NumTurbines'],1) + + self.assertEqual(F.version,'AD_driver') + self.assertEqual(F.ADversion,'AD15') + self.assertTrue(F.fst is not None) + self.assertTrue(F.IW is not None) + self.assertTrue(F.AD is not None) + self.assertTrue(F.AD.Bld1 is not None) + + + +if __name__ == '__main__': + #Test().test_FASTIn() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py new file mode 100644 index 0000000000..4c607acb0a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_linearization.py @@ -0,0 +1,58 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output import FASTLinearizationFile + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('FASTLin*.*', FASTLinearizationFile) + + def test_FASTLin(self): + + # --- Test basic read + F=FASTLinearizationFile(os.path.join(MyDir,'FASTLin.lin')) + self.assertAlmostEqual(F['A'][3,1], 3.91159454E-04 ) + self.assertAlmostEqual(F['u'][7] ,4.00176055E+04) + + # Test properties + np.testing.assert_almost_equal(F.nx , 4) + np.testing.assert_almost_equal(F.nu , 9) + np.testing.assert_almost_equal(F.ny , 16) + np.testing.assert_almost_equal(F.nz , 0 ) + + # Test keys + np.testing.assert_almost_equal(F['Azimuth'] , 5.8684 , 4) + np.testing.assert_almost_equal(F['RotSpeed'] , 1.2367 , 4) + self.assertEqual(F['WindSpeed'], None ) # NOTE: might become NaN in the future + + # --- Test methods + dfs = F.toDataFrame() # Make sure this runs + + # Test EVA + fd, zeta, Q, f0 = F.eva() + np.testing.assert_almost_equal(f0 , [0.394858], 4) + np.testing.assert_almost_equal(zeta, [0.06078], 4) + + # Test state removal + F.removeStates(pattern='generator') + fd, zeta, Q, f0 = F.eva() + dfs = F.toDataFrame() # Make sure this runs + np.testing.assert_almost_equal(F.nx , 2) + np.testing.assert_almost_equal(f0 , [0.394258], 4) + np.testing.assert_almost_equal(zeta, [0.0603 ], 4) + + + # --- Test lin file with M (only for EB's special branch...) + F=FASTLinearizationFile(os.path.join(MyDir,'FASTLin_EDM.lin')) + dfs=F.toDataFrame() + M=dfs['M'] + self.assertAlmostEqual(M['7_TwFADOF1']['7_TwFADOF1'],0.436753E+06) + self.assertAlmostEqual(M['13_GeAz']['13_GeAz'] , 0.437026E+08) + + + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py new file mode 100644 index 0000000000..81b94ed418 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_output.py @@ -0,0 +1,44 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output import FASTOutputFile + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('FASTOut*.*', FASTOutputFile) + + def DF(self,FN): + """ Reads a file and return a dataframe """ + return FASTOutputFile(os.path.join(MyDir,FN)).toDataFrame() + + def test_FASTOut(self): + self.assertEqual(self.DF('FASTOut.out').values[-1,1],1036) + + def test_FASTOutBin(self): + # --- Test reading + F = FASTOutputFile(os.path.join(MyDir,'FASTOutBin.outb')) + M = F.toDataFrame() + self.assertAlmostEqual(M['GenPwr_[kW]'].values[-1],40.57663190807828) + # --- Test writing + tempFilename = '_FASTOutBin_out.outb' + # Write to tempfile + F.write(tempFilename) + # Read written file + F2= FASTOutputFile(tempFilename) + # Test that read data match + np.testing.assert_almost_equal(F.data,F2.data, 4) + np.testing.assert_almost_equal(F.data[-1,-1] ,40.57663190807828, 10) + np.testing.assert_almost_equal(F2.data[-1,-1],40.57663190807828, 10) + self.assertEqual(F2.info['attribute_names'][-1],'GenPwr') + self.assertEqual(F2.info['attribute_units'][-1],'kW') + # cleanup + try: + os.remove(tempFilename) + except: + pass + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py new file mode 100644 index 0000000000..803fa30c32 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_fast_summary.py @@ -0,0 +1,42 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output import FASTSummaryFile + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('FASTSum*.*', FASTSummaryFile) + + def test_FASTSum(self): + f = FASTSummaryFile(os.path.join(MyDir, 'FASTSum_Pendulum.SD.sum.yaml')) + np.testing.assert_almost_equal(f['CB_frequencies'].ravel(),[2.571561E-02,5.154897E+00,3.448768E+01,3.639185E+01,9.826435E+01], 5) + + # Test toDataFrame + df=f.toDataFrame(sortDim=2) + np.testing.assert_almost_equal(df['z_[m]'].values,[-6,-1,0]) + np.testing.assert_almost_equal(df['GuyanMode1x_[m]'].values[0],0.6) + + # Test toJSON + dJSON=f.toJSON('_test.json') + np.testing.assert_almost_equal(dJSON['Connectivity'], [[0,1],[1,2]]) + try: + os.remove('_test.json') + except: + pass + + + def test_FASTSumGraph(self): + f = FASTSummaryFile(os.path.join(MyDir, 'FASTSum_Pendulum.SD.sum.yaml')) + graph = f.toGraph() + # print(graph) + self.assertEqual(len(graph.Nodes), 3) + self.assertEqual(len(graph.Elements), 2) + self.assertEqual(len(graph.Modes), 11) + np.testing.assert_almost_equal(graph.Modes[10]['freq'], 98.26435) + + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py new file mode 100644 index 0000000000..6a31e276f5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_flex.py @@ -0,0 +1,59 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.flex_profile_file import FLEXProfileFile +from pyFAST.input_output.flex_blade_file import FLEXBladeFile +from pyFAST.input_output.flex_wavekin_file import FLEXWaveKinFile +from pyFAST.input_output.flex_doc_file import FLEXDocFile + + +import pandas as pd + +class Test(unittest.TestCase): + + #def test_001_read_all(self, DEBUG=True): + # reading_test('FLEX*.*', weio.read) + + def DF(self,FN): + """ Reads a file with weio and return a dataframe """ + pass + #return Flex(os.path.join(MyDir,FN)).toDataFrame() + + def test_FLEXProfiles(self): + df = FLEXProfileFile(os.path.join(MyDir,'FLEXProfile.pro')).toDataFrame() + self.assertAlmostEqual(df['pc_set_2_t_57.0'].values[2,2],0.22711022) + + def test_FLEXBlade(self): + Bld=FLEXBladeFile(os.path.join(MyDir,'FLEXBlade002.bld')).toDataFrame() + self.assertAlmostEqual(Bld['r_[m]'].values[-1],61.5) + self.assertAlmostEqual(Bld['Mass_[kg/m]'].values[-1],10.9) + self.assertAlmostEqual(Bld['Chord_[m]'].values[3],3.979815059) + + def test_FLEXWaves(self): + wk = FLEXWaveKinFile(os.path.join(MyDir, 'FLEXWaveKin.wko')) + self.assertEqual(wk['MaxLongiVel'],2.064) + self.assertEqual(wk['Tp'] ,12.54) + self.assertEqual(len(wk['RelDepth']),12) + self.assertEqual(wk['data']['Time_[s]'].values[-1],3.0) + self.assertEqual(wk['data']['a_z=20.0_x=0.0_[m/s^2]'].values[-1],0.06) + + def test_FLEXDoc(self): + doc = FLEXDocFile(os.path.join(MyDir, 'FLEXDocFile.out')) + self.assertAlmostEqual(doc['RNA']['Mass'], 2.85e-6) + self.assertAlmostEqual(doc['Tower']['Length'], 1.0) + self.assertAlmostEqual(doc['Tower']['SectionData'].shape[0], 11) + self.assertAlmostEqual(doc['Tower']['SectionData'].shape[1], 9) + self.assertAlmostEqual(doc['Tower']['ShapeFunction_DOF1_Shape'].shape[0], 12) + self.assertAlmostEqual(doc['Foundation']['Mass'], 900000) + self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF1_Shape'].shape[0], 101) + self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF1_Shape']['H_[m]'].values[-1], 100) + self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF1_Shape']['U_[m]'].values[-1], 1) + self.assertAlmostEqual(doc['Foundation']['ShapeFunction_DOF2_Shape']['U_[m]'].values[-1], 0) + self.assertEqual(type(doc['Blade']['ShapeFunction_DOF1_Shape']) is pd.DataFrame, True) + + +if __name__ == '__main__': +# Test().test_FLEXWaves() +# Test().test_FLEXDoc() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py new file mode 100644 index 0000000000..3c987724bb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_hawc.py @@ -0,0 +1,112 @@ +import unittest +import os +import numpy as np +import pyFAST.input_output as weio +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.hawc2_dat_file import HAWC2DatFile +from pyFAST.input_output.hawc2_ae_file import HAWC2AEFile +from pyFAST.input_output.hawc2_pc_file import HAWC2PCFile +from pyFAST.input_output.hawc2_st_file import HAWC2StFile +from pyFAST.input_output.hawcstab2_ind_file import HAWCStab2IndFile +from pyFAST.input_output.hawcstab2_pwr_file import HAWCStab2PwrFile + + +class Test(unittest.TestCase): + + def test_001_read_all(self): + reading_test('HAWC*.*', weio.read) + + def DF(self,FN): + """ Reads a file with weio and return a dataframe """ + return weio.read(os.path.join(MyDir,FN)).toDataFrame() + + def test_HAWC2(self): + F=HAWC2DatFile(os.path.join(MyDir,'HAWC2_out_ascii.dat')) + DF=F.toDataFrame() + self.assertEqual(DF.values[-1,1],-1.72572E+03) + self.assertEqual(DF.values[-1,-1], 3.63349E+03) + self.assertEqual(DF.columns[0], 'Time_[s]') + self.assertEqual(DF.columns[1], 'WSPgl.coo.,Vy_[m/s]') + + # Test that "exported dat files" are the same + # NOTE: cannot do comparison of sel files since names are different + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + os.remove(os.path.join(MyDir,'HAWC2_out_ascii_TMP.sel')) + os.remove(os.path.join(MyDir,'HAWC2_out_ascii_TMP2.sel')) + + def test_HAWC2_st(self): + # --- not FPM + F=HAWC2StFile(os.path.join(MyDir,'HAWC2_st.st')) + dfs=F.toDataFrame() + set11=dfs['1_1'] + set22=dfs['2_2'] + self.assertEqual(set11['m_[kg/m]'].values[-1], 2536.27) + self.assertEqual(set11['A_[m^2]'].values[-1], 0.298) + self.assertEqual(set22['r_[m]'].values[-1], 1.96256) + self.assertEqual(set22['ri_x_[m]'].values[-1], 1.36) + # --- FPM + F=HAWC2StFile(os.path.join(MyDir,'HAWC2_st_fpm.st')) + dfs=F.toDataFrame() + set11=dfs['1_1'] + np.testing.assert_almost_equal(set11['m_[kg/m]'].values[-1], 5.6348074, 3) + np.testing.assert_almost_equal(set11['K66'].values[-1], 8.41526513e04, 3) + + def test_HAWC2_pc(self): + F=HAWC2PCFile(os.path.join(MyDir,'HAWC2_pc.dat')) + self.assertEqual(len(F.data.pc_sets),1) + thicknesses = F.data.pc_sets[1][0] + firstPolar = F.data.pc_sets[1][1][0] + np.testing.assert_almost_equal(thicknesses, [24.1, 30.1, 36, 48, 60, 100]) + self.assertEqual(firstPolar.shape, (105,4)) + np.testing.assert_almost_equal(firstPolar[0,0], -180) + np.testing.assert_almost_equal(firstPolar[-1,0], 180) + + def test_BHAWC(self): + F=HAWC2DatFile(os.path.join(MyDir,'BHAWC_out_ascii.sel')) + DF=F.toDataFrame() + self.assertEqual(DF.values[-1,1], 147.85) + self.assertEqual(DF.columns[0], 't_[s]') + self.assertEqual(DF.columns[1], 'ang_azi_[deg]') + + # Testing that "exported" sel files are the same + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP.dat')) + os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP2.dat')) + + # Testing that "exported" dat files are the same + F=HAWC2DatFile(os.path.join(MyDir,'BHAWC_out_ascii.dat')) + F.test_ascii(bCompareWritesOnly=True,bDelete=True) + os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP.sel')) + os.remove(os.path.join(MyDir,'BHAWC_out_ascii_TMP2.sel')) + + def test_HAWCStab2(self): + # power file + F=HAWCStab2PwrFile(os.path.join(MyDir,'HAWCStab2.pwr')) + DF=F.toDataFrame() + self.assertAlmostEqual(DF.values[-1,1],0.1553480512E+05) + self.assertAlmostEqual(DF.values[-1,-1], 0.3181950053E+09) + self.assertEqual(DF.columns[0], 'V_[m/s]') + self.assertEqual(DF.columns[1], 'P_[kW]') + # induction files + F=HAWCStab2IndFile(os.path.join(MyDir,'HAWCStab2_u3000.ind')) # normal .ind + DF=F.toDataFrame() + self.assertAlmostEqual(DF.values[-1,1],0.517961E+00) + self.assertAlmostEqual(DF.values[-1,-1], 0.354614E-02) + self.assertEqual(DF.columns[0], 's_[m]') + self.assertEqual(DF.columns[1], 'A_[-]') + F=HAWCStab2IndFile(os.path.join(MyDir,'HAWCStab2_defl_u3000.ind')) # defl .ind + DF=F.toDataFrame() + self.assertAlmostEqual(DF.values[-1,1],19) + self.assertAlmostEqual(DF.values[-1,-1], 0.242932E-05) + self.assertEqual(DF.columns[0], 's_[m]') + self.assertEqual(DF.columns[1], 'Element_no_[-]') + F=HAWCStab2IndFile(os.path.join(MyDir,'HAWCStab2_fext_u3000.ind')) # fext .ind + DF=F.toDataFrame() + self.assertAlmostEqual(DF.values[-1,1],20) + self.assertAlmostEqual(DF.values[-1,-1], -0.170519E+03) + self.assertEqual(DF.columns[0], 's_[m]') + self.assertEqual(DF.columns[1], 'Node_[-]') + +if __name__ == '__main__': + #Test().test_HAWC2_st() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py new file mode 100644 index 0000000000..f8a6712568 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_mannbox.py @@ -0,0 +1,24 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.mannbox_file import MannBoxFile + + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('MannBox_*.*', MannBoxFile) + + def test_MannBox(self): + # --- Test read/write + F = MannBoxFile(os.path.join(MyDir,'MannBox_2x4x8.bin')) + F.write( os.path.join(MyDir,'MannBox_2x4x8_TMP.bin')) + F2= MannBoxFile(os.path.join(MyDir,'MannBox_2x4x8_TMP.bin')) + os.remove( os.path.join(MyDir,'MannBox_2x4x8_TMP.bin')) + np.testing.assert_almost_equal(F['field'].shape ,[2,4,8]) + np.testing.assert_almost_equal(F['field'][:,:,:],F2['field'][:,:,:],8) + np.testing.assert_almost_equal(F['field'][1,3,5], -3.6654968, 6) + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py new file mode 100644 index 0000000000..42d442855e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_parquet.py @@ -0,0 +1,26 @@ +import unittest +import os +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.parquet_file import ParquetFile + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('ParquetFile*.*', ParquetFile) + + def DF(self,FN): + """ Reads a file and return a dataframe """ + return ParquetFile(os.path.join(MyDir,FN)).toDataFrame() + + def test_ParquetFile(self): + df=self.DF('ParquetFile_test.parquet') + self.assertListEqual(list(df.columns),["Column1","Column 2","Column Str"]) + self.assertEqual(df.shape,(3,3)) + self.assertEqual(df.loc[0,"Column Str"],'abc') + self.assertEqual(df.loc[0, "Column1"], 1) + + + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py new file mode 100644 index 0000000000..c7051864e5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_run_Examples.py @@ -0,0 +1,33 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) + import matplotlib.pyplot as plt + print('\n--------------------------------------------------------------') + for f in files: + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + plt.close('all') + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py new file mode 100644 index 0000000000..897f3c3901 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_turbsim.py @@ -0,0 +1,35 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output import TurbSimFile + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('TurbSim_*.*', TurbSimFile) + + def test_TurbSim(self): + # --- Test without tower + F = TurbSimFile(os.path.join(MyDir,'TurbSim_NoTwr.bts')) + F.write( os.path.join(MyDir,'TurbSim_NoTwr_TMP.bts')) + F2= TurbSimFile(os.path.join(MyDir,'TurbSim_NoTwr_TMP.bts')) + os.remove( os.path.join(MyDir,'TurbSim_NoTwr_TMP.bts')) + np.testing.assert_almost_equal(F['u'][0,:,:,:],F2['u'][0,:,:,:],4) + np.testing.assert_almost_equal(F['u'][1,:,:,:],F2['u'][1,:,:,:],4) + np.testing.assert_almost_equal(F['u'][2,:,:,:],F2['u'][2,:,:,:],4) + # --- Test with tower + F = TurbSimFile(os.path.join(MyDir,'TurbSim_WithTwr.bts')) + np.testing.assert_almost_equal(F['u'][2,-1,1,3], 0.508036, 5) + np.testing.assert_almost_equal(F['u'][0, 4,2,0], 7.4867466, 5) + np.testing.assert_almost_equal(F['uTwr'][0, 4, :], [6.1509, 6.4063, 8.9555, 7.6943], 4) + F.write( os.path.join(MyDir,'TurbSim_WithTwr_TMP.bts')) + F2= TurbSimFile(os.path.join(MyDir,'TurbSim_WithTwr_TMP.bts')) + os.remove( os.path.join(MyDir,'TurbSim_WithTwr_TMP.bts')) + np.testing.assert_almost_equal(F['u'][0,:,:,:],F2['u'][0,:,:,:],3) + np.testing.assert_almost_equal(F['u'][1,:,:,:],F2['u'][1,:,:,:],3) + np.testing.assert_almost_equal(F['u'][2,:,:,:],F2['u'][2,:,:,:],3) + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py new file mode 100644 index 0000000000..7b52f712ee --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_vtk.py @@ -0,0 +1,24 @@ +import unittest +import os +import numpy as np +from pyFAST.input_output.tests.helpers_for_test import MyDir, reading_test +from pyFAST.input_output.vtk_file import VTKFile + + + +class Test(unittest.TestCase): + + def test_001_read_all(self, DEBUG=True): + reading_test('VTK*.*', VTKFile) + + def test_VTKStruct(self): + f = VTKFile(os.path.join(MyDir, 'VTKStructuredPointsPointData.vtk')) + np.testing.assert_almost_equal(f.points,f.point_data['DisXY']) + + np.testing.assert_almost_equal(f.xp_grid,[0,20,40]) + np.testing.assert_almost_equal(f.point_data_grid['DisXY'][:,0,0,0],[0,20,40]) + + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py new file mode 100644 index 0000000000..d2219754cb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tests/test_yaml.py @@ -0,0 +1,107 @@ +import unittest +import numpy as np +import os as os +from pyFAST.input_output.mini_yaml import * + + +class Test(unittest.TestCase): + def test_scalar(self): + # Scalar integer + D = yaml_read(text='k: 10 # comment') + self.assertDictEqual(D, {'k':10}) + self.assertIsInstance(D['k'], int) + # Scalar float + D = yaml_read(text='k: 10.# comment') + self.assertDictEqual(D, {'k':10}) + self.assertIsInstance(D['k'], float) + # Scalar string + D = yaml_read(text='k:s# comment') + self.assertDictEqual(D, {'k':'s'}) + self.assertIsInstance(D['k'], str) + + def test_lists(self): + # list integer + D = yaml_read(text='k:[ 10 ,] # comment') + self.assertDictEqual(D, {'k':[10]}) + self.assertTrue(np.issubdtype(D['k'][0], np.integer)) + #self.assertIsInstance(D['k'][0], np.int32) + # list float + D = yaml_read(text='k: [ 10., ]# comment') + self.assertDictEqual(D, {'k':[10]}) + self.assertIsInstance(D['k'][0], float) + # list string + D = yaml_read(text='k: [ s ,] #comment') + self.assertDictEqual(D, {'k': ['s']}) + self.assertIsInstance(D['k'][0], str) + # empty + D = yaml_read(text='k:[ ] # comment') + self.assertIsInstance(D['k'], np.ndarray) + self.assertTrue(len(D['k'])==0) + + # list integers + D = yaml_read(text='k: [ 10, 20, 30,] # comment') + np.testing.assert_array_equal(D['k'], [10,20,30]) + self.assertTrue(np.issubdtype(D['k'].dtype, np.integer)) + # list float + D = yaml_read(text='k: [ 10., 20.5, 30,] # comment') + np.testing.assert_array_equal(D['k'], [10,20.5,30]) + self.assertTrue(np.issubdtype(D['k'].dtype, float)) + # list str + D = yaml_read(text='k: [ a , b , c,] # comment') + np.testing.assert_array_equal(D['k'], ['a','b','c']) + self.assertTrue(np.issubdtype(D['k'].dtype, str)) + + # list mixed, for now all as strings + D = yaml_read(text='k: [ 1 , b , 0,] # comment') + np.testing.assert_array_equal(D['k'], ['1','b','0']) + self.assertTrue(np.issubdtype(D['k'].dtype, str)) + + def test_arrays(self): + # Empty array + D = yaml_read(text="""k: # comment + - [ ] """) + self.assertIsInstance(D['k'], np.ndarray) + self.assertEqual(D['k'].shape, (1,0)) # that's a choice... + + # Float array + D = yaml_read(text="""k:# comment + - [ 1, 3.5 ]# comment """) + self.assertIsInstance(D['k'], np.ndarray) + self.assertEqual(D['k'].shape, (1,2)) + self.assertTrue(np.issubdtype(D['k'].dtype, float)) + np.testing.assert_array_equal(D['k'], [[1,3.5]]) + + # int array + D = yaml_read(text="""k:# comment + - [ 1 , ]# comment + - [2] + + """) + self.assertIsInstance(D['k'], np.ndarray) + self.assertEqual(D['k'].shape, (2,1)) + self.assertTrue(np.issubdtype(D['k'].dtype, np.integer)) + np.testing.assert_array_equal(D['k'], [[1],[2]]) + + # string array + D = yaml_read(text="""k:# comment + - [ a , b ,c ] + - [d, e ,f , ] + # comment + """) + self.assertIsInstance(D['k'], np.ndarray) + self.assertEqual(D['k'].shape, (2,3)) + self.assertTrue(np.issubdtype(D['k'].dtype, str)) + np.testing.assert_array_equal(D['k'], [['a','b','c'],['d','e','f']]) + + # Mixed array + D = yaml_read(text="""k:# comment + - [ a, 3.5 ]# comment """) + self.assertIsInstance(D['k'], np.ndarray) + self.assertEqual(D['k'].shape, (1,2)) + self.assertTrue(np.issubdtype(D['k'].dtype, str)) + np.testing.assert_array_equal(D['k'], [['a','3']]) + + +if __name__=='__main__': + #Test().test_arrays() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py new file mode 100644 index 0000000000..d462f4afa0 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/tools/graph.py @@ -0,0 +1,688 @@ +""" +Basics Classes for a "geometrical" graph model: + - nodes have a position (x,y,z), and some data (taken from a list of properties) + - elements (links) connect nodes, they contain some data (taken from a list of properties) + +An ordering of Elements, Nodes, and Properties is present, but whenever possible, +the "ID" is used to identify them, instead of their index. + + +Nodes: + Node.ID: unique ID (int) of the node. IDs never change. + Node.x,y,z: coordinate of the nodes + Node.data : dictionary of data stored at the node + +Elements: + Elem.ID: unique ID (int) of the element. IDs never change. + Elem.nodeIDs: list of node IDs making up the element + Elem.nodes : list of nodes making the element (by reference) # NOTE: this has cross reference! + Elem.nodeProps : properties # Nodal properties. NOTE: cannot be transfered to node because of how SubDyn handles it.. + Elem.data : dictionary of data stored at the element + # Optional + Elem.propset: string referring to the property set in the dictionary of properties + Elem.propIDs: IDs used for the properties of this element at each node + +NodePropertySets: dictionary of NodeProperties + Node Property: + NProp.ID: unique ID of the node proprety + NProp.data: dictionary of data + + +ElemPropertySets: dictionary of ElemProperties + +""" + +import numpy as np +import pandas as pd + + +# --------------------------------------------------------------------------------} +# --- Node +# --------------------------------------------------------------------------------{ +class Node(object): + def __init__(self, ID, x, y, z=0, **kwargs): + self.ID = int(ID) + self.x = x + self.y = y + self.z = z + self.data = kwargs + + def setData(self, data_dict): + """ set or add data""" + for k,v in data_dict.items(): + #if k in self.data.keys(): + # print('Warning overriding key {} for node {}'.format(k,self.ID)) + self.data[k]=v + + def __repr__(self): + s=' x:{:7.2f} y:{:7.2f} z:{:7.2f} {:}'.format(self.ID, self.x, self.y, self.z, self.data) + return s + +# --------------------------------------------------------------------------------} +# --- Properties +# --------------------------------------------------------------------------------{ +class Property(dict): + def __init__(self, ID, data=None, **kwargs): + """ + data is a dictionary + """ + dict.__init__(self) + self.ID= int(ID) + self.update(kwargs) + if data is not None: + self.update(data) + + @property + def data(self): + return {k:v for k,v in self.items() if k!='ID'} + + def __repr__(self): + s=' {:}'.format(self.ID, self.data) + return s + +class NodeProperty(Property): + def __init__(self, ID, data=None, **kwargs): + Property.__init__(self, ID, data, **kwargs) + def __repr__(self): + s=' {:}'.format(self.ID, self.data) + return s + +class ElemProperty(Property): + def __init__(self, ID, data=None, **kwargs): + Property.__init__(self, ID, data, **kwargs) + def __repr__(self): + s=' {:}'.format(self.ID, self.data) + return s + + +# --------------------------------------------------------------------------------} +# --- Elements +# --------------------------------------------------------------------------------{ +class Element(dict): + def __init__(self, ID, nodeIDs, nodes=None, propset=None, propIDs=None, properties=None, **kwargs): + """ + + """ + self.ID = int(ID) + self.nodeIDs = nodeIDs + self.propset = propset + self.propIDs = propIDs + self.data = kwargs # Nodal data + self.nodes = nodes # Typically a trigger based on nodeIDs + self.nodeProps= properties # Typically a trigger based on propIDs. Otherwise list of dictionaries + if (self.propIDs is not None) and (self.propset is None): + raise Exception('`propset` should be provided if `propIDs` are provided') + if (self.propIDs is not None) and (self.propset is not None) and properties is not None: + raise Exception('When providing `propset` & `propIDs`, properties should not be provided') + if nodes is not None: + if len(nodes)!=len(nodeIDs): + raise Exception('List of nodes has different length than list of nodeIDs') + for i, (ID,n) in enumerate(zip(nodeIDs,nodes)): + if n.ID!=ID: + raise Exception('Node ID do not match {}/={} for node index {}'.format(n.ID,ID,i)) + + @property + def length(self): + n1=self.nodes[0] + n2=self.nodes[1] + return np.sqrt((n1.x-n2.x)**2+(n1.y-n2.y)**2+(n1.z-n2.z)**2) + + def setData(self, data_dict): + """ set or add data""" + for k,v in data_dict.items(): + #if k in self.data.keys(): + # print('Warning overriding key {} for node {}'.format(k,self.ID)) + self.data[k]=v + + def __repr__(self): + s=' NodeIDs: {} {}'.format(self.ID, self.nodeIDs, self.data) + if self.propIDs is not None: + s+=' {'+'propIDs:{} propset:{}'.format(self.propIDs, self.propset)+'}' + if self.nodes is not None: + s+=' l={:.2f}'.format(self.length) + return s + + +# --------------------------------------------------------------------------------} +# --- Mode +# --------------------------------------------------------------------------------{ +class Mode(dict): + def __init__(self, data, name, freq=1, **kwargs): + dict.__init__(self) + + self['name']=name + self['freq']=freq + self['data']=data # displacements nNodes x 3 assuming a given sorting of nodes + + def __repr__(self): + s=' name:{:4s} freq:{:} '.format(self['name'], self['freq']) + return s + + def reSort(self,I): + self['data']=self['data'][I,:] + +# --------------------------------------------------------------------------------} +# --- Graph +# --------------------------------------------------------------------------------{ +class GraphModel(object): + def __init__(self, Elements=None, Nodes=None, NodePropertySets=None, ElemPropertySets=None, MiscPropertySets=None ): + self.Elements = Elements if Elements is not None else [] + self.Nodes = Nodes if Nodes is not None else [] + self.NodePropertySets = NodePropertySets if NodePropertySets is not None else {} + self.ElemPropertySets = ElemPropertySets if ElemPropertySets is not None else {} + self.MiscPropertySets = MiscPropertySets if MiscPropertySets is not None else {} + # Dynamics + self.Modes = [] + self.Motions = [] + # Optimization variables + self._nodeIDs2Elements = {} # dictionary with key NodeID and value list of ElementID + self._nodeIDs2Elements = {} # dictionary with key NodeID and value list of elements + self._elementIDs2NodeIDs = {} # dictionary with key ElemID and value list of nodes IDs + self._connectivity =[]# + + def addNode(self,node): + self.Nodes.append(node) + + def addElement(self,elem): + # Giving nodes to element if these were not provided + elem.nodes=[self.getNode(i) for i in elem.nodeIDs] + # Giving props to element if these were not provided + if elem.propIDs is not None: + elem.nodeProps=[self.getNodeProperty(elem.propset, i) for i in elem.propIDs] + self.Elements.append(elem) + + # --- Getters + def getNode(self, nodeID): + for n in self.Nodes: + if n.ID==nodeID: + return n + raise KeyError('NodeID {} not found in Nodes'.format(nodeID)) + + def getElement(self, elemID): + for e in self.Elements: + if e.ID==elemID: + return e + raise KeyError('ElemID {} not found in Elements'.format(elemID)) + + def getNodeProperty(self, setname, propID): + for p in self.NodePropertySets[setname]: + if p.ID==propID: + return p + raise KeyError('PropID {} not found for Node propset {}'.format(propID,setname)) + + def getElementProperty(self, setname, propID): + for p in self.ElemPropertySets[setname]: + if p.ID==propID: + return p + raise KeyError('PropID {} not found for Element propset {}'.format(propID,setname)) + + def getMiscProperty(self, setname, propID): + for p in self.MiscPropertySets[setname]: + if p.ID==propID: + return p + raise KeyError('PropID {} not found for Misc propset {}'.format(propID,setname)) + + # --- + @property + def nodeIDs2ElementIDs(self): + """ Return list of elements IDs connected to each node""" + if len(self._nodeIDs2ElementIDs) == 0: + # Compute list of connected elements for each node + self._nodeIDs2ElementIDs=dict() + for i,n in enumerate(self.Nodes): + self._nodeIDs2ElementIDs[n.ID] = [e.ID for e in self.Elements if n.ID in e.nodeIDs] + return self._nodeIDs2ElementIDs + + @property + def nodeIDs2Elements(self): + """ Return list of elements connected to each node""" + if len(self._nodeIDs2Elements) == 0: + # Compute list of connected elements for each node + self._nodeIDs2Elements + for i,n in enumerate(self.Nodes): + self._nodeIDs2Elements[n.ID] = [e for e in self.Elements if n.ID in e.nodeIDs] + return self._nodeIDs2Elements + + + @property + def elementIDs2NodeIDs(self): + """ returns """ + if len(self._elementIDs2NodeIDs) ==0: + self._elementIDs2NodeIDs =dict() + for e in self.Elements: + self._elementIDs2NodeIDs[e.ID] = [n.ID for n in e.nodes] + return self._elementIDs2NodeIDs + + + @property + def connectivity(self): + """ returns connectivity, assuming points are indexed starting at 0 + NOTE: this is basically element2Nodes but reindexed + """ + if len(self._connectivity) ==0: + self._connectivity = [[self.Nodes.index(n) for n in e.nodes] for e in self.Elements] + return self._connectivity + + + # --- Handling of (element/material) Properties + def addElementPropertySet(self, setname): + self.ElemPropertySets[setname]= [] + + def addNodePropertySet(self, setname): + self.NodePropertySets[setname]= [] + + def addMiscPropertySet(self, setname): + self.MiscPropertySets[setname]= [] + + def addNodeProperty(self, setname, prop): + if not isinstance(prop, NodeProperty): + print(type(prop)) + raise Exception('Property needs to inherit from NodeProperty') + self.PropertySets[setname].append(prop) + + def addNodeProperty(self, setname, prop): + if not isinstance(prop, NodeProperty): + print(type(prop)) + raise Exception('Property needs to inherit from NodeProperty') + self.NodePropertySets[setname].append(prop) + + def addElementProperty(self, setname, prop): + if not isinstance(prop, ElemProperty): + print(type(prop)) + raise Exception('Property needs to inherit from ElementProperty') + self.ElemPropertySets[setname].append(prop) + + def addMiscProperty(self, setname, prop): + if not isinstance(prop, ElemProperty): + print(type(prop)) + raise Exception('Property needs to inherit from Property') + self.MiscPropertySets[setname].append(prop) + + # --- Data and node and element prop setters + def setElementNodalProp(self, elem, propset, propIDs): + """ + Set Nodal Properties to each node of an element + """ + for node, pID in zip(elem.nodes, propIDs): + node.setData(self.getNodeProperty(propset, pID).data) + + def setElementNodalPropToElem(self, elem): + """ + Set Element Properties to an element + TODO: this seems to be a hack. It should be automatic I think... + """ + propset=elem.propset + propIDs=elem.propIDs + # USING PROPID 0!!! + elem.setData(self.getNodeProperty(propset, propIDs[0]).data) + # TODO average the two maybe.. + + def setNodeNodalProp(self, node, propset, propID): + """ + Set Nodal Properties to a node + """ + node.setData(self.getNodeProperty(propset, propID).data) + + def setNodalData(self, nodeID, **data_dict): + self.getNode(nodeID).setData(data_dict) + + def __repr__(self): + s='<{} object> with keys:\n'.format(type(self).__name__) + s+='- Nodes ({}):\n'.format(len(self.Nodes)) + s+='\n'.join(str(n) for n in self.Nodes) + s+='\n- Elements ({}):\n'.format(len(self.Elements)) + s+='\n'.join(str(n) for n in self.Elements) + s+='\n- NodePropertySets ({}):'.format(len(self.NodePropertySets)) + for k,v in self.NodePropertySets.items(): + s+='\n> {} ({}):\n'.format(k, len(v)) + s+='\n'.join(str(p) for p in v) + s+='\n- ElementPropertySets ({}):'.format(len(self.ElemPropertySets)) + for k,v in self.ElemPropertySets.items(): + s+='\n> {} ({}):\n'.format(k, len(v)) + s+='\n'.join(str(p) for p in v) + s+='\n- MiscPropertySets ({}):'.format(len(self.MiscPropertySets)) + for k,v in self.MiscPropertySets.items(): + s+='\n> {} ({}):\n'.format(k, len(v)) + s+='\n'.join(str(p) for p in v) + s+='\n- Modes ({}):\n'.format(len(self.Modes)) + s+='\n'.join(str(m) for m in self.Modes) + s+='\n- Motions ({}):'.format(len(self.Motions)) + for m in self.Motions: + s+='\n> {}\n'.format({k:v for k,v in m.items() if not isintance(v,np.ndarray)}) + return s + + # --------------------------------------------------------------------------------} + # --- Geometrical properties + # --------------------------------------------------------------------------------{ + @property + def extent(self): + xmax=np.max([node.x for node in self.Nodes]) + ymax=np.max([node.y for node in self.Nodes]) + zmax=np.max([node.z for node in self.Nodes]) + xmin=np.min([node.x for node in self.Nodes]) + ymin=np.min([node.y for node in self.Nodes]) + zmin=np.min([node.z for node in self.Nodes]) + return [xmin,ymin,zmin],[xmax,ymax,zmax],[xmax-xmin,ymax-ymin,zmax-zmin] + + @property + def maxDimension(self): + _,_,D=self.extent + return np.max(D) + + @property + def points(self): + nNodes = len(self.Nodes) + Points = np.zeros((nNodes,3)) + for i,n in enumerate(self.Nodes): + Points[i,:]=(n.x, n.y, n.z) + return Points + + def toLines(self, output='coord'): + if output=='coord': + lines = np.zeros((len(self.Elements), 2, 3)) # + for ie, e in enumerate(self.Elements): + n1=e.nodes[0] + n2=e.nodes[-1] + lines[ie, 0, : ] = (n1.x, n1.y, n1.z) + lines[ie, 1, : ] = (n2.x, n2.y, n2.z) + elif output=='lines3d': + import mpl_toolkits.mplot3d as plt3d + lines=[] + for ie, e in enumerate(self.Elements): + n1=e.nodes[0] + n2=e.nodes[-1] + line = plt3d.art3d.Line3D((n1.x,n2.x), (n1.y,n2.y), (n1.z,n2.z)) + lines.append(line) + else: + raise NotImplementedError() + + return lines + + # --------------------------------------------------------------------------------} + # --- Change of connectivity + # --------------------------------------------------------------------------------{ + def connecticityHasChanged(self): + self._nodeIDs2ElementIDs = dict() + self._nodeIDs2Elements = dict() + self._elementIDs2NodeIDs = dict() + self._connectivity=[] + + def updateConnectivity(self): + for e in self.Elements: + e.nodes=[self.getNode(i) for i in e.nodeIDs] + + for e in self.Elements: + e.nodeProps = [self.getNodeProperty(e.propset, ID) for ID in e.propIDs] + + # Potentially call nodeIDs2ElementIDs etc + + + def _divideElement(self, elemID, nPerElement, maxElemId, keysNotToCopy=[]): + """ divide a given element by nPerElement (add nodes and elements to graph) """ + if len(self.Modes)>0: + raise Exception('Cannot divide graph when mode data is present') + if len(self.Motions)>0: + raise Exception('Cannot divide graph when motion data is present') + + maxNodeId=np.max([n.ID for n in self.Nodes]) + e = self.getElement(elemID) + newElems = [] + if len(e.nodes)==2: + n1=e.nodes[0] + n2=e.nodes[1] + subNodes=[n1] + for iSub in range(1,nPerElement): + maxNodeId += 1 + #data_dict = n1.data.copy() + data_dict = dict() + fact = float(iSub)/nPerElement + # Interpolating position + x = n1.x*(1-fact)+n2.x*fact + y = n1.y*(1-fact)+n2.y*fact + z = n1.z*(1-fact)+n2.z*fact + # Interpolating data (only if floats) + for k,v in n1.data.items(): + if k not in keysNotToCopy: + try: + data_dict[k] = n1.data[k]*(1-fact) + n2.data[k]*fact + except: + data_dict[k] = n1.data[k] + ni = Node(maxNodeId, x, y, z, **data_dict) + subNodes.append(ni) + self.addNode(ni) + subNodes+=[n2] + e.nodes =subNodes[0:2] + e.nodeIDs=[e.ID for e in e.nodes] + for i in range(1,nPerElement): + maxElemId+=1 + elem_dict = e.data.copy() + # Creating extra properties if necessary + if e.propIDs is not None: + if all(e.propIDs==e.propIDs[0]): + # No need to create a new property + propIDs=e.propIDs + propset=e.propset + else: + raise NotImplementedError('Division of element with different properties on both ends. TODO add new property.') + elem= Element(maxElemId, [subNodes[i].ID, subNodes[i+1].ID], propset=propset, propIDs=propIDs, **elem_dict ) + newElems.append(elem) + return newElems + + + def sortNodesBy(self,key): + """ Sort nodes, will affect the connectivity, but node IDs remain the same""" + + # TODO, that's quite doable + if len(self.Modes)>0: + raise Exception('Cannot sort nodes when mode data is present') + if len(self.Motions)>0: + raise Exception('Cannot sort nodes when motion data is present') + + nNodes = len(self.Nodes) + if key=='x': + values=[n.x for n in self.Nodes] + elif key=='y': + values=[n.y for n in self.Nodes] + elif key=='z': + values=[n.z for n in self.Nodes] + elif key=='ID': + values=[n.ID for n in self.Nodes] + else: + values=[n[key] for n in self.Nodes] + I= np.argsort(values) + self.Nodes=[self.Nodes[i] for i in I] + + # Trigger, remove precomputed values related to connectivity: + self.connecticityHasChanged() + + return self + + def divideElements(self, nPerElement, excludeDataKey='', excludeDataList=[], method='append', keysNotToCopy=[]): + """ divide all elements by nPerElement (add nodes and elements to graph) + + - excludeDataKey: is provided, will exclude elements such that e.data[key] in `excludeDataList` + + - method: append or insert + + - keysNotToCopy: when duplicating node and element data, make sure not to duplicate data with these keys + For instance if a node that has a boundary condition, it should not be passed to the + node that is created when dividing an element. + + Example: + to avoid dividing elements of `Type` 'Cable' or `Rigid`, call as follows: + self.divideElements(3, excludeDataKey='Type', excludeDataList=['Cable','Rigid'] ) + + """ + maxNodeId=np.max([n.ID for n in self.Nodes]) + maxElemId=np.max([e.ID for e in self.Elements]) + + if nPerElement<=0: + raise Exception('nPerElement should be more than 0') + + newElements=[] + for ie in np.arange(len(self.Elements)): # cannot enumerate since length increases + elemID = self.Elements[ie].ID + if method=='insert': + newElements+=[self.getElement(elemID)] # newElements contains + if (len(excludeDataKey)>0 and self.Elements[ie].data[excludeDataKey] not in excludeDataList) or len(excludeDataKey)==0: + elems = self._divideElement(elemID, nPerElement, maxElemId, keysNotToCopy) + maxElemId+=len(elems) + newElements+=elems + else: + print('Not dividing element with ID {}, based on key `{}` with value `{}`'.format(elemID, excludeDataKey,self.Elements[ie].data[excludeDataKey])) + # Adding elements at the end + if method=='append': + pass + elif method=='insert': + self.Elements=[] # We clear all elements + else: + raise NotImplementedError('Element Insertions') + + for e in newElements: + self.addElement(e) + + # Trigger, remove precomputed values related to connectivity: + self.connecticityHasChanged() + + return self + + # --------------------------------------------------------------------------------} + # --- Dynamics + # --------------------------------------------------------------------------------{ + def addMode(self,displ,name=None,freq=1): + if name is None: + name='Mode '+str(len(self.Modes)) + mode = Mode(data=displ, name=name, freq=freq) + self.Modes.append(mode) + + + # --------------------------------------------------------------------------------} + # --- Ouputs / converters + # --------------------------------------------------------------------------------{ + def nodalDataFrame(self, sortBy=None): + """ return a DataFrame of all the nodal data """ + data=dict() + nNodes=len(self.Nodes) + for i,n in enumerate(self.Nodes): + if i==0: + data['ID'] = np.zeros(nNodes).astype(int) + data['x'] = np.zeros(nNodes) + data['y'] = np.zeros(nNodes) + data['z'] = np.zeros(nNodes) + + data['ID'][i] = n.ID + data['x'][i] = n.x + data['y'][i] = n.y + data['z'][i] = n.z + for k,v in n.data.items(): + if k not in data: + data[k] = np.zeros(nNodes) + try: + data[k][i]=v + except: + pass + df = pd.DataFrame(data) + # Sorting + if sortBy is not None: + df.sort_values([sortBy],inplace=True,ascending=True) + df.reset_index(drop=True,inplace=True) + return df + + + def toJSON(self,outfile=None): + d=dict(); + Points=self.points + d['Connectivity'] = self.connectivity + d['Nodes'] = Points.tolist() + + d['ElemProps']=list() + for iElem,elem in enumerate(self.Elements): + Shape = elem.data['shape'] if 'shape' in elem.data.keys() else 'cylinder' + Type = elem.data['Type'] if 'Type' in elem.data.keys() else 1 + try: + Diam = elem.D + except: + Diam = elem.data['D'] if 'D' in elem.data.keys() else 1 + if Shape=='cylinder': + d['ElemProps'].append({'shape':'cylinder','type':Type, 'Diam':Diam}) + else: + raise NotImplementedError() + + + d['Modes']=[ + { + 'name': self.Modes[iMode]['name'], + 'omega':self.Modes[iMode]['freq']*2*np.pi, #in [rad/s] + 'Displ':self.Modes[iMode]['data'].tolist() + } for iMode,mode in enumerate(self.Modes)] + d['groundLevel']=np.min(Points[:,2]) # TODO + + if outfile is not None: + import json + jsonFile=outfile + with open(jsonFile, 'w', encoding='utf-8') as f: + #f.write(to_json(d)) + try: + #f.write(unicode(json.dumps(d, ensure_ascii=False))) #, indent=2) + #f.write(json.dumps(d, ensure_ascii=False)) #, indent=2) + f.write(json.dumps(d, ensure_ascii=False)) + except: + print('>>> FAILED') + json.dump(d, f, indent=0) + return d + +# + + + +INDENT = 3 +SPACE = " " +NEWLINE = "\n" +# Changed basestring to str, and dict uses items() instead of iteritems(). + +def to_json(o, level=0): + ret = "" + if isinstance(o, dict): + if level==0: + ret += "{" + NEWLINE + comma = "" + for k, v in o.items(): + ret += comma + comma = ",\n" + ret += SPACE * INDENT * (level + 1) + ret += '"' + str(k) + '":' + SPACE + ret += to_json(v, level + 1) + ret += NEWLINE + SPACE * INDENT * level + "}" + else: + ret += "{" + comma = "" + for k, v in o.items(): + ret += comma + comma = ",\n" + ret += SPACE + ret += '"' + str(k) + '":' + SPACE + ret += to_json(v, level + 1) + ret += "}" + + elif isinstance(o, str): + ret += '"' + o + '"' + elif isinstance(o, list): + ret += "[" + ",".join([to_json(e, level + 1) for e in o]) + "]" + # Tuples are interpreted as lists + elif isinstance(o, tuple): + ret += "[" + ",".join(to_json(e, level + 1) for e in o) + "]" + elif isinstance(o, bool): + ret += "true" if o else "false" + elif isinstance(o, int): + ret += str(o) + elif isinstance(o, float): + ret += '%.7g' % o + elif isinstance(o, numpy.ndarray) and numpy.issubdtype(o.dtype, numpy.integer): + ret += "[" + ','.join(map(str, o.flatten().tolist())) + "]" + elif isinstance(o, numpy.ndarray) and numpy.issubdtype(o.dtype, numpy.inexact): + ret += "[" + ','.join(map(lambda x: '%.7g' % x, o.flatten().tolist())) + "]" + elif o is None: + ret += 'null' + else: + raise TypeError("Unknown type '%s' for json serialization" % str(type(o))) + return ret diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py new file mode 100644 index 0000000000..ce3179de2e --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_file.py @@ -0,0 +1,1091 @@ +"""Read/Write TurbSim File + +Part of weio library: https://github.com/ebranlard/weio + +""" +import pandas as pd +import numpy as np +import os +import struct +import time + +try: + from .file import File, EmptyFileError +except: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + File=dict + +class TurbSimFile(File): + """ + Read/write a TurbSim turbulence file (.bts). The object behaves as a dictionary. + + Main keys + --------- + - 'u': velocity field, shape (3 x nt x ny x nz) + - 'y', 'z', 't': space and time coordinates + - 'dt', 'ID', 'info' + - 'zTwr', 'uTwr': tower coordinates and field if present (3 x nt x nTwr) + - 'zRef', 'uRef': height and velocity at a reference point (usually not hub) + + Main methods + ------------ + - read, write, toDataFrame, keys + - valuesAt, vertProfile, horizontalPlane, verticalPlane, closestPoint + - fitPowerLaw + - makePeriodic, checkPeriodic + + Examples + -------- + + ts = TurbSimFile('Turb.bts') + print(ts.keys()) + print(ts['u'].shape) + u,v,w = ts.valuesAt(y=10.5, z=90) + + + """ + + @staticmethod + def defaultExtensions(): + return ['.bts'] + + @staticmethod + def formatName(): + return 'TurbSim binary' + + def __init__(self, filename=None, **kwargs): + self.filename = None + if filename: + self.read(filename, **kwargs) + + def read(self, filename=None, header_only=False, tdecimals=8): + """ read BTS file, with field: + u (3 x nt x ny x nz) + uTwr (3 x nt x nTwr) + """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + scl = np.zeros(3, np.float32); off = np.zeros(3, np.float32) + with open(self.filename, mode='rb') as f: + # Reading header info + ID, nz, ny, nTwr, nt = struct.unpack('0) + for it in range(nt): + Buffer = np.frombuffer(f.read(2*3*ny*nz), dtype=np.int16).astype(np.float32).reshape([3, ny, nz], order='F') + u[:,it,:,:]=Buffer + Buffer = np.frombuffer(f.read(2*3*nTwr), dtype=np.int16).astype(np.float32).reshape([3, nTwr], order='F') + uTwr[:,it,:]=Buffer + u -= off[:, None, None, None] + u /= scl[:, None, None, None] + self['u'] = u + uTwr -= off[:, None, None] + uTwr /= scl[:, None, None] + self['uTwr'] = uTwr + self['info'] = info + self['ID'] = ID + self['dt'] = np.round(dt, tdecimals) # dt is stored in single precision in the TurbSim output + self['y'] = np.arange(ny)*dy + self['y'] -= np.mean(self['y']) # y always centered on 0 + self['z'] = np.arange(nz)*dz +zBottom + self['t'] = np.round(np.arange(nt)*dt, tdecimals) + self['zTwr'] =-np.arange(nTwr)*dz + zBottom + self['zRef'] = zHub + self['uRef'] = uHub + + def write(self, filename=None): + """ + write a BTS file, using the following keys: 'u','z','y','t','uTwr' + u (3 x nt x ny x nz) + uTwr (3 x nt x nTwr) + """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + + nDim, nt, ny, nz = self['u'].shape + if 'uTwr' not in self.keys() : + self['uTwr']=np.zeros((3,nt,0)) + if 'ID' not in self.keys() : + self['ID']=7 + + _, _, nTwr = self['uTwr'].shape + tsTwr = self['uTwr'] + ts = self['u'] + intmin = -32768 + intrng = 65535 + off = np.empty((3), dtype = np.float32) + scl = np.empty((3), dtype = np.float32) + info = 'Generated by TurbSimFile on {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) + # Calculate scaling, offsets and scaling data + out = np.empty(ts.shape, dtype=np.int16) + outTwr = np.empty(tsTwr.shape, dtype=np.int16) + for k in range(3): + all_min, all_max = ts[k].min(), ts[k].max() + if nTwr>0: + all_min=min(all_min, tsTwr[k].min()) + all_max=max(all_max, tsTwr[k].max()) + if all_min == all_max: + scl[k] = 1 + else: + scl[k] = intrng / (all_max-all_min) + off[k] = intmin - scl[k] * all_min + out[k] = (ts[k] * scl[k] + off[k]).astype(np.int16) + outTwr[k] = (tsTwr[k] * scl[k] + off[k]).astype(np.int16) + z0 = self['z'][0] + dz = self['z'][1]- self['z'][0] + dy = self['y'][1]- self['y'][0] + dt = self['t'][1]- self['t'][0] + + # Providing estimates of uHub and zHub even if these fields are not used + zHub,uHub, bHub = self.hubValues() + + with open(self.filename, mode='wb') as f: + f.write(struct.pack('0: + s+=' - zTwr: [{} ... {}], dz: {}, n: {} \n'.format(self['zTwr'][0],self['zTwr'][-1],self['zTwr'][1]-self['zTwr'][0],len(self['zTwr'])) + if 'uTwr' in self.keys() and self['uTwr'].shape[2]>0: + s+=' - uTwr: ({} x {} x {} ) \n'.format(*(self['uTwr'].shape)) + ux,uy,uz=self['uTwr'][0], self['uTwr'][1], self['uTwr'][2] + s+=' ux: min: {}, max: {}, mean: {} \n'.format(np.min(ux), np.max(ux), np.mean(ux)) + s+=' uy: min: {}, max: {}, mean: {} \n'.format(np.min(uy), np.max(uy), np.mean(uy)) + s+=' uz: min: {}, max: {}, mean: {} \n'.format(np.min(uz), np.max(uz), np.mean(uz)) + s += ' Useful methods:\n' + s += ' - read, write, toDataFrame, keys\n' + s += ' - valuesAt, vertProfile, horizontalPlane, verticalPlane, closestPoint\n' + s += ' - fitPowerLaw\n' + s += ' - makePeriodic, checkPeriodic\n' + return s + + def toDataFrame(self): + dfs={} + + ny = len(self['y']) + nz = len(self['y']) + # Index at mid box + iy,iz = self.iMid + + # Mean vertical profile + z, m, s = self.vertProfile() + ti = s/m*100 + cols=['z_[m]','u_[m/s]','v_[m/s]','w_[m/s]','sigma_u_[m/s]','sigma_v_[m/s]','sigma_w_[m/s]','TI_[%]'] + data = np.column_stack((z, m[0,:],m[1,:],m[2,:],s[0,:],s[1,:],s[2,:],ti[0,:])) + dfs['VertProfile'] = pd.DataFrame(data = data ,columns = cols) + + # Mid time series + u = self['u'][:,:,iy,iz] + cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] + data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) + dfs['ZMidLine'] = pd.DataFrame(data = data ,columns = cols) + + + # ZMid YStart time series + u = self['u'][:,:,0,iz] + cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] + data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) + dfs['ZMidYStartLine'] = pd.DataFrame(data = data ,columns = cols) + + # ZMid YEnd time series + u = self['u'][:,:,-1,iz] + cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] + data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) + dfs['ZMidYEndLine'] = pd.DataFrame(data = data ,columns = cols) + + # Mid crosscorr y + y, rho_uu_y, rho_vv_y, rho_ww_y = self.crosscorr_y() + cols = ['y_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] + data = np.column_stack((y, rho_uu_y, rho_vv_y, rho_ww_y)) + dfs['Mid_xcorr_y'] = pd.DataFrame(data = data ,columns = cols) + + # Mid crosscorr z + z, rho_uu_z, rho_vv_z, rho_ww_z = self.crosscorr_z() + cols = ['z_[m]', 'rho_uu_[-]','rho_vv_[-]','rho_ww_[-]'] + data = np.column_stack((z, rho_uu_z, rho_vv_z, rho_ww_z)) + dfs['Mid_xcorr_z'] = pd.DataFrame(data = data ,columns = cols) + + # Mid csd + try: + fc, chi_uu, chi_vv, chi_ww = self.csd_longi() + cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] + data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) + dfs['Mid_csd_longi'] = pd.DataFrame(data = data ,columns = cols) + + # Mid csd + fc, chi_uu, chi_vv, chi_ww = self.csd_lat() + cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] + data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) + dfs['Mid_csd_lat'] = pd.DataFrame(data = data ,columns = cols) + + # Mid csd + fc, chi_uu, chi_vv, chi_ww = self.csd_vert() + cols = ['f_[Hz]','chi_uu_[-]', 'chi_vv_[-]','chi_ww_[-]'] + data = np.column_stack((fc, chi_uu, chi_vv, chi_ww)) + dfs['Mid_csd_vert'] = pd.DataFrame(data = data ,columns = cols) + except ModuleNotFoundError: + print('Module scipy.signal not available') + except ImportError: + print('Likely issue with fftpack') + + + # Hub time series + #try: + # zHub = self['zHub'] + # iz = np.argmin(np.abs(self['z']-zHub)) + # u = self['u'][:,:,iy,iz] + # Cols=['t_[s]','u_[m/s]','v_[m/s]','w_[m/s]'] + # data = np.column_stack((self['t'],u[0,:],u[1,:],u[2,:])) + # dfs['TSHubLine'] = pd.DataFrame(data = data ,columns = Cols) + #except: + # pass + return dfs + + def toDataset(self): + """ + Convert the data that was read in into a xarray Dataset + + # TODO SORT OUT THE DIFFERENCE WITH toDataSet + """ + from xarray import IndexVariable, DataArray, Dataset + + print('[TODO] pyFAST.input_output.turbsim_file.toDataset: merge with function toDataSet') + + y = IndexVariable("y", self.y, attrs={"description":"lateral coordinate","units":"m"}) + zround = np.asarray([np.round(zz,6) for zz in self.z]) #the open function here returns something like *.0000000001 which is annoying + z = IndexVariable("z", zround, attrs={"description":"vertical coordinate","units":"m"}) + time = IndexVariable("time", self.t, attrs={"description":"time since start of simulation","units":"s"}) + + da = {} + for component,direction,velname in zip([0,1,2],["x","y","z"],["u","v","w"]): + # the dataset produced here has y/z axes swapped relative to data stored in original object + velocity = np.swapaxes(self["u"][component,...],1,2) + da[velname] = DataArray(velocity, + coords={"time":time,"y":y,"z":z}, + dims=["time","y","z"], + name="velocity", + attrs={"description":"velocity along {0}".format(direction),"units":"m/s"}) + + return Dataset(data_vars=da, coords={"time":time,"y":y,"z":z}) + + def toDataSet(self, datetime=False): + """ + Convert the data that was read in into a xarray Dataset + + # TODO SORT OUT THE DIFFERENCE WITH toDataset + """ + import xarray as xr + + print('[TODO] pyFAST.input_output.turbsim_file.toDataSet: should be discontinued') + print('[TODO] pyFAST.input_output.turbsim_file.toDataSet: merge with function toDataset') + + if datetime: + timearray = pd.to_datetime(self['t'], unit='s', origin=pd.to_datetime('2000-01-01 00:00:00')) + timestr = 'datetime' + else: + timearray = self['t'] + timestr = 'time' + + ds = xr.Dataset( + data_vars=dict( + u=([timestr,'y','z'], self['u'][0,:,:,:]), + v=([timestr,'y','z'], self['u'][1,:,:,:]), + w=([timestr,'y','z'], self['u'][2,:,:,:]), + ), + coords={ + timestr : timearray, + 'y' : self['y'], + 'z' : self['z'], + }, + ) + + # Add mean computations + ds['up'] = ds['u'] - ds['u'].mean(dim=timestr) + ds['vp'] = ds['v'] - ds['v'].mean(dim=timestr) + ds['wp'] = ds['w'] - ds['w'].mean(dim=timestr) + + if datetime: + # Add time (in s) to the variable list + ds['time'] = (('datetime'), self['t']) + + return ds + + # Useful converters + def fromAMRWind(self, filename, timestep, output_frequency, sampling_identifier, verbose=1, fileout=None, zref=None, xloc=None): + """ + Reads a AMRWind netcdf file, grabs a group of sampling planes (e.g. p_slice), + return an instance of TurbSimFile, optionally write turbsim file to disk + + + Parameters + ---------- + filename : str, + full path to netcdf file generated by amrwind + timestep : float, + amr-wind code timestep (time.fixed_dt) + output_frequency : int, + frequency chosen for sampling output in amrwind input file (sampling.output_frequency) + sampling_identifier : str, + identifier of the sampling being requested (an entry of sampling.labels in amrwind input file) + zref : float, + height to be written to turbsim as the reference height. if none is given, it is taken as the vertical centerpoint of the slice + """ + try: + from pyFAST.input_output.amrwind_file import AMRWindFile + except: + try: + from .amrwind_file import AMRWindFile + except: + from amrwind_file import AMRWindFile + + obj = AMRWindFile(filename,timestep,output_frequency, group_name=sampling_identifier) + + self["u"] = np.ndarray((3,obj.nt,obj.ny,obj.nz)) + + xloc = float(obj.data.x[0]) if xloc is None else xloc + if verbose: + print("Grabbing the slice at x={0} m".format(xloc)) + self['u'][0,:,:,:] = np.swapaxes(obj.data.u.sel(x=xloc).values,1,2) + self['u'][1,:,:,:] = np.swapaxes(obj.data.v.sel(x=xloc).values,1,2) + self['u'][2,:,:,:] = np.swapaxes(obj.data.w.sel(x=xloc).values,1,2) + self['t'] = obj.data.t.values + + self['y'] = obj.data.y.values + self['z'] = obj.data.z.values + self['dt'] = obj.output_dt + + self['ID'] = 7 + ltime = time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime()) + self['info'] = 'Converted from AMRWind output file {0} {1:s}.'.format(filename,ltime) + + iz = int(obj.nz/2) + self['zRef'] = float(obj.data.z[iz]) if zref is None else zref + if verbose: + print("Setting the TurbSim file reference height to z={0} m".format(self["zRef"])) + + self['uRef'] = float(obj.data.u.sel(x=xloc).sel(y=0).sel(z=self["zRef"]).mean().values) + self['zRef'], self['uRef'], bHub = self.hubValues() + + if fileout is not None: + filebase = os.path.splitext(filename)[1] + fileout = filebase+".bts" + if verbose: + print("===> {0}".format(fileout)) + self.write(fileout) + + + def fromAMRWind_legacy(self, filename, dt, nt, y, z, sampling_identifier='p_sw2'): + """ + Convert current TurbSim file into one generated from AMR-Wind LES sampling data in .nc format + Assumes: + -- u, v, w (nt, nx * ny * nz) + -- u is aligned with x-axis (flow is not rotated) - this consideration needs to be added + + + INPUTS: + - filename: (string) full path to .nc sampling data file + - sampling_identifier: (string) name of sampling plane group from .inp file (e.g. "p_sw2") + - dt: timestep size [s] + - nt: number of timesteps (sequential) you want to read in, starting at the first timestep available + INPUTS: TODO + - y: user-defined vector of coordinate positions in y + - z: user-defined vector of coordinate positions in z + - uref: (float) reference mean velocity (e.g. 8.0 hub height mean velocity from input file) + - zref: (float) hub height (e.t. 150.0) + """ + import xarray as xr + + print('[TODO] fromAMRWind_legacy: function might be unfinished. Merge with fromAMRWind') + print('[TODO] fromAMRWind_legacy: figure out y, and z from data (see fromAMRWind)') + + # read in sampling data plane + ds = xr.open_dataset(filename, + engine='netcdf4', + group=sampling_identifier) + ny, nz, _ = ds.attrs['ijk_dims'] + noffsets = len(ds.attrs['offsets']) + t = np.arange(0, dt*(nt-0.5), dt) + print('max time [s] = ', t[-1]) + + self['u']=np.ndarray((3,nt,ny,nz)) #, buffer=shm.buf) + # read in AMRWind velocity data + self['u'][0,:,:,:] = ds['velocityx'].isel(num_time_steps=slice(0,nt)).values.reshape(nt,noffsets,ny,nz)[:,1,:,:] # last index = 1 refers to 2nd offset plane at -1200 m + self['u'][1,:,:,:] = ds['velocityy'].isel(num_time_steps=slice(0,nt)).values.reshape(nt,noffsets,ny,nz)[:,1,:,:] + self['u'][2,:,:,:] = ds['velocityz'].isel(num_time_steps=slice(0,nt)).values.reshape(nt,noffsets,ny,nz)[:,1,:,:] + self['t'] = t + self['y'] = y + self['z'] = z + self['dt'] = dt + # TODO + self['ID'] = 7 # ... + self['info'] = 'Converted from AMRWind fields {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) +# self['zTwr'] = np.array([]) +# self['uTwr'] = np.array([]) + self['zRef'] = zref #None + self['uRef'] = uref #None + self['zRef'], self['uRef'], bHub = self.hubValues() + + def fromMannBox(self, u, v, w, dx, U, y, z, addU=None): + """ + Convert current TurbSim file into one generated from MannBox + Assumes: + u, v, w (nt x ny x nz) + + y: goes from -ly/2 to ly/2 this is an IMPORTANT subtlety + The field u needs to respect this convention! + (fields from weio.mannbox_file do respect this convention + but when exported to binary files, the y axis is flipped again) + + INPUTS: + - u, v, w : mann box fields + - dx: axial spacing of mann box (to compute time) + - U: reference speed of mann box (to compute time) + - y: y coords of mann box + - z: z coords of mann box + """ + nt,ny,nz = u.shape + dt = dx/U + t = np.arange(0, dt*(nt-0.5), dt) + nt = len(t) + if y[0]>y[-1]: + raise Exception('y is assumed to go from - to +') + + self['u']=np.zeros((3, nt, ny, nz)) + self['u'][0,:,:,:] = u + self['u'][1,:,:,:] = v + self['u'][2,:,:,:] = w + if addU is not None: + self['u'][0,:,:,:] += addU + self['t'] = t + self['y'] = y + self['z'] = z + self['dt'] = dt + # TODO + self['ID'] = 7 # ... + self['info'] = 'Converted from MannBox fields {:s}.'.format(time.strftime('%d-%b-%Y at %H:%M:%S', time.localtime())) +# self['zTwr'] = np.array([]) +# self['uTwr'] = np.array([]) + self['zRef'] = None + self['uRef'] = None + self['zRef'], self['uRef'], bHub = self.hubValues() + + def toMannBox(self, base=None, removeUConstant=None, removeAllUMean=False): + """ + removeUConstant: float, will be removed from all values of the U box + removeAllUMean: If true, the time-average of each y-z points will be substracted + """ + try: + from weio.mannbox_file import MannBoxFile + except: + try: + from .mannbox_file import MannBoxFile + except: + from mannbox_file import MannBoxFile + # filename + if base is None: + base = os.path.splitext(self.filename)[0] + base = base+'_{}x{}x{}'.format(*self['u'].shape[1:]) + + mn = MannBoxFile() + mn.fromTurbSim(self['u'], 0, removeConstant=removeUConstant, removeAllMean=removeAllUMean) + mn.write(base+'.u') + + mn.fromTurbSim(self['u'], 1) + mn.write(base+'.v') + + mn.fromTurbSim(self['u'], 2) + mn.write(base+'.w') + + # --- Useful IO + def writeInfo(ts, filename): + """ Write info to txt """ + infofile = filename + with open(filename,'w') as f: + f.write(str(ts)) + zMid =(ts['z'][0]+ts['z'][-1])/2 + f.write('Middle height of box: {:.3f}\n'.format(zMid)) + y_fit, pfit, model, _ = ts.fitPowerLaw(z_ref=zMid, y_span='mid', U_guess=10, alpha_guess=0.1) + f.write('Power law: alpha={:.5f} - u={:.5f} at z={:.5f}\n'.format(pfit[1],pfit[0],zMid)) + f.write('Periodic: {}\n'.format(ts.checkPeriodic(sigmaTol=1.5, aTol=0.5))) + + + + def writeProbes(ts, probefile, yProbe, zProbe): + """ Create a CSV file with wind speed data at given probe locations + defined by the vectors yProbe and zProbe. All combinations of y and z are extracted. + INPUTS: + - probefile: filename of CSV file to be written + - yProbe: array like of y locations + - zProbe: array like of z locations + """ + Columns=['Time_[s]'] + Data = ts['t'] + for y in yProbe: + for z in zProbe: + iy = np.argmin(np.abs(ts['y']-y)) + iz = np.argmin(np.abs(ts['z']-z)) + lbl = '_y{:.0f}_z{:.0f}'.format(ts['y'][iy], ts['z'][iz]) + Columns+=['{}{}_[m/s]'.format(c,lbl) for c in['u','v','w']] + DataSub = np.column_stack((ts['u'][0,:,iy,iz],ts['u'][1,:,iy,iz],ts['u'][2,:,iy,iz])) + Data = np.column_stack((Data, DataSub)) + np.savetxt(probefile, Data, header=','.join(Columns), delimiter=',') + + def fitPowerLaw(ts, z_ref=None, y_span='full', U_guess=10, alpha_guess=0.1): + """ + Fit power law to vertical profile + INPUTS: + - z_ref: reference height used to define the "U_ref" + - y_span: if 'full', average the vertical profile accross all y-values + if 'mid', average the vertical profile at the middle y value + """ + if z_ref is None: + # use mid height for z_ref + z_ref =(ts['z'][0]+ts['z'][-1])/2 + # Average time series + z, u, _ = ts.vertProfile(y_span=y_span) + u = u[0,:] + u_fit, pfit, model = fit_powerlaw_u_alpha(z, u, z_ref=z_ref, p0=(U_guess, alpha_guess)) + return u_fit, pfit, model, z_ref + +# Functions from BTS_File.py to be ported here +# def TI(self,y=None,z=None,j=None,k=None): +# """ +# If no argument is given, compute TI over entire grid and return array of size (ny,nz). Else, compute TI at the specified point. +# +# Parameters +# ---------- +# y : float, +# cross-stream position [m] +# z : float, +# vertical position AGL [m] +# j : int, +# grid index along cross-stream +# k : int, +# grid index along vertical +# """ +# if ((y==None) & (j==None)): +# return np.std(self.U,axis=0) / np.mean(self.U,axis=0) +# if ((y==None) & (j!=None)): +# return (np.std(self.U[:,j,k])/np.mean(self.U[:,j,k])) +# if ((y!=None) & (j==None)): +# uSeries = self.U[:,self.y2j(y),self.z2k(z)] +# return np.std(uSeries)/np.mean(uSeries) +# +# def visualize(self,component='U',time=0): +# """ +# Quick peak at the data for a given component, at a specific time. +# """ +# data = getattr(self,component)[time,:,:] +# plt.figure() ; +# plt.imshow(data) ; +# plt.colorbar() +# plt.show() +# +# def spectrum(self,component='u',y=None,z=None): +# """ +# Calculate spectrum of a specific component, given time series at ~ hub. +# +# Parameters +# ---------- +# component : string, +# which component to use +# y : float, +# y coordinate [m] of specific location +# z : float, +# z coordinate [m] of specific location +# +# """ +# if y==None: +# k = self.kHub +# j = self.jHub +# data = getattr(self,component) +# data = data[:,j,k] +# N = data.size +# freqs = fftpack.fftfreq(N,self.dT)[1:N/2] +# psd = (np.abs(fftpack.fft(data,N)[1:N/2]))**2 +# return [freqs, psd] +# +# def getRotorPoints(self): +# """ +# In the square y-z slice, return which points are at the edge of the rotor in the horizontal and vertical directions. +# +# Returns +# ------- +# jLeft : int, +# index for grid point that matches the left side of the rotor (when looking towards upstream) +# jRight : int, +# index for grid point that matches the right side of the rotor (when looking towards upstream) +# kBot : int, +# index for grid point that matches the bottom of the rotor +# kTop : int, +# index for grid point that matches the top of the rotor +# """ +# self.zBotRotor = self.zHub - self.R +# self.zTopRotor = self.zHub + self.R +# self.yLeftRotor = self.yHub - self.R +# self.yRightRotor = self.yHub + self.R +# self.jLeftRotor = self.y2j(self.yLeftRotor) +# self.jRightRotor = self.y2j(self.yRightRotor) +# self.kBotRotor = self.z2k(self.zBotRotor) +# self.kTopRotor = self.z2k(self.zTopRotor) +# + + + +def fit_powerlaw_u_alpha(x, y, z_ref=100, p0=(10,0.1)): + """ + p[0] : u_ref + p[1] : alpha + """ + import scipy.optimize as so + pfit, _ = so.curve_fit(lambda x, *p : p[0] * (x / z_ref) ** p[1], x, y, p0=p0) + y_fit = pfit[0] * (x / z_ref) ** pfit[1] + coeffs_dict={'u_ref':pfit[0],'alpha':pfit[1]} + formula = '{u_ref} * (z / {z_ref}) ** {alpha}' + fitted_fun = lambda xx: pfit[0] * (xx / z_ref) ** pfit[1] + return y_fit, pfit, {'coeffs':coeffs_dict,'formula':formula,'fitted_function':fitted_fun} + +if __name__=='__main__': + ts = TurbSimFile('../_tests/TurbSim.bts') + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py new file mode 100644 index 0000000000..85be93b5cc --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/turbsim_ts_file.py @@ -0,0 +1,102 @@ +from itertools import takewhile +import pandas as pd +import numpy as np +try: + from .file import File, WrongFormatError, BrokenFormatError +except: + File = dict + class WrongFormatError(Exception): pass + class BrokenFormatError(Exception): pass + + +class TurbSimTSFile(File): + + @staticmethod + def defaultExtensions(): + return ['.txt'] + + @staticmethod + def formatName(): + return 'TurbSim time series' + + def _read(self, *args, **kwargs): + self['header']=[] + nHeaderMax=10 + # Reading + iFirstData=-1 + with open(self.filename, 'r', errors="surrogateescape") as f: + for i, line in enumerate(f): + if i>nHeaderMax: + raise BrokenFormatError('`nComp` not found in file') + if line.lower().find('ncomp')>=0: + iFirstData=i + break + self['header'].append(line.strip()) + self['nComp'] = int(line.split()[0]) + line = f.readline().strip() + nPoints = int(line.split()[0]) + line = f.readline().strip() + self['ID'] = int(line.split()[0]) + f.readline() + f.readline() + self['Points']=np.zeros((nPoints,2)) + for i in np.arange(nPoints): + line = f.readline().strip() + self['Points'][i,:]= np.array(line.split()).astype(float) + f.readline() + f.readline() + f.readline() + lines=[] + # reading full data + self['data'] = np.array([l.strip().split() for l in takewhile(lambda x: len(x.strip())>0, f.readlines())]).astype(float) + + def columns(self): + Comp=['u','v','w'] + return ['Time']+['Point{}{}'.format(ip+1,Comp[ic]) for ic in np.arange(self['nComp']) for ip in np.arange(len(self['Points']))] + + def units(self): + nPoints = self['Points'].shape[0] + return ['(s)'] + ['(m/s)']*nPoints*self['nComp'] + + def toString(self): + + def toStringVLD(val,lab,descr): + val='{}'.format(val) + lab='{}'.format(lab) + if len(val)<13: + val='{:13s}'.format(val) + if len(lab)<13: + lab='{:13s}'.format(lab) + return val+' '+lab+' - '+descr.strip().strip('-')+'\n' + + s='\n'.join(self['header'])+'\n' + nPoints = self['Points'].shape[0] + s+=toStringVLD(self['nComp'],'nComp' ,'Number of velocity components in the file' ) + s+=toStringVLD(nPoints ,'nPoints','Number of time series points contained in this file(-)') + s+=toStringVLD(self['ID'] ,'RefPtID','Index of the reference point (1-nPoints)') + s+='{:^16s}{:^16s} {}\n'.format('Pointyi','Pointzi','! nPoints listed in order of increasing height') + s+='{:^16s}{:^16s}\n'.format('(m)','(m)') + for row in self['Points']: + s+=''.join(['{:16.8e}'.format(v) for v in row])+'\n' + + s+='--------Time Series-------------------------------------------------------------\n' + s+=''.join(['{:^16s}'.format(c) for c in self.columns()])+'\n' + s+=''.join(['{:^16s}'.format(c) for c in self.units()])+'\n' + s+='\n'.join(''.join('{:16.8e}'.format(x) for x in y) for y in self['data']) + return s + + def _write(self): + with open(self.filename,'w') as f: + f.write(self.toString()) + + + + def _toDataFrame(self): + Cols = ['{}_{}'.format(c.replace(' ','_'), u.replace('(','[').replace(')',']')) for c,u in zip(self.columns(),self.units())] + dfs={} + dfs['Points'] = pd.DataFrame(data = self['Points'],columns = ['PointYi','PointZi']) + dfs['TimeSeries'] = pd.DataFrame(data = self['data'] ,columns = Cols) + + return dfs + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py new file mode 100644 index 0000000000..e3ed2f77f5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/vtk_file.py @@ -0,0 +1,1349 @@ +""" +Read/Write VTK files + +Part of weio library: https://github.com/ebranlard/weio + +""" +import pandas as pd +import numpy as np +import numpy +import os +from functools import reduce +import collections + +try: + from .file import File, EmptyFileError, WrongFormatError, BrokenFormatError +except ImportError: + EmptyFileError = type('EmptyFileError', (Exception,),{}) + WrongFormatError = type('WrongFormatError', (Exception,),{}) + BrokenFormatError = type('BrokenFormatError', (Exception,),{}) + File=dict + +class VTKFile(File): + """ + Read/write a VTK file (.vtk). + + Main attributes for grids: + --------- + - xp_grid, yp_grid, zp_grid: vectors of points locations + - point_data_grid: dictionary containing data at the grid points + + Main attributes for mesh: + --------- + - points + - point_data + - cells + - cell_data + + Main methods + ------------ + - read, write + + Examples + -------- + vtk = VTKFile('DisXZ1.vtk') + x = vtk.x_grid + z = vtk.z_grid + Ux = vtk.point_data_grid['DisXZ'][:,0,:,0] + + """ + @staticmethod + def defaultExtensions(): + return ['.vtk','.vtp'] + + @staticmethod + def formatName(): + return 'VTK file' + + def __init__(self,filename=None,**kwargs): + self.filename = None + # For regular grid + self.xp_grid=None # location of points + self.yp_grid=None + self.zp_grid=None + self.point_data_grid = None + + # Main Data + self.points = None + self.field_data = {} + self.point_data = {} + self.dataset = {} + + + + # Data for reading only + self.cell_data_raw = {} + self.c = None # Cell + self.ct = None # CellTypes + self.active = None + self.is_ascii = False + self.split = [] + self.num_items = 0 + self.section = None + + # Propagate read + if filename: + self.read(filename=filename,**kwargs) + + + def read(self, filename=None): + """ read a VTK file """ + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + if not os.path.isfile(self.filename): + raise OSError(2,'File not found:',self.filename) + if os.stat(self.filename).st_size == 0: + raise EmptyFileError('File is empty:',self.filename) + + with open(filename, "rb") as f: + # initialize output data + # skip header and title + f.readline() + f.readline() + + data_type = f.readline().decode("utf-8").strip().upper() + if data_type not in ["ASCII", "BINARY"]: + raise ReadError('Unknown VTK data type ',data_type) + self.is_ascii = data_type == "ASCII" + + while True: + line = f.readline().decode("utf-8") + if not line: + # EOF + break + + line = line.strip() + if len(line) == 0: + continue + + self.split = line.split() + self.section = self.split[0].upper() + + if self.section in vtk_sections: + _read_section(f, self) + else: + _read_subsection(f, self) + + # --- Postpro + _check_mesh(self) # generate points if needed + cells, cell_data = translate_cells(self.c, self.ct, self.cell_data_raw) + self.cells = cells + self.cell_data = cell_data + + if self.dataset['type']=='STRUCTURED_POINTS': + self.point_data_grid = {} + # We provide point_data_grid, corresponds to point_data but reshaped + for k,PD in self.point_data.items(): + # NOTE: tested foe len(y)=1, len(z)=1 + self.point_data_grid[k]=PD.reshape(len(self.xp_grid), len(self.yp_grid), len(self.zp_grid),PD.shape[1], order='F') + + + def write(self, filename=None, binary=True): + """ + Write to unstructured grid + TODO structured grid + """ + + if filename: + self.filename = filename + if not self.filename: + raise Exception('No filename provided') + + + def pad(array): + return np.pad(array, ((0, 0), (0, 1)), "constant") + + if self.points.shape[1] == 2: + points = pad(self.points) + else: + points = self.points + + if self.point_data: + for name, values in self.point_data.items(): + if len(values.shape) == 2 and values.shape[1] == 2: + self.point_data[name] = pad(values) + + for name, data in self.cell_data.items(): + for k, values in enumerate(data): + if len(values.shape) == 2 and values.shape[1] == 2: + data[k] = pad(data[k]) + + with open(filename, "wb") as f: + f.write(b"# vtk DataFile Version 4.2\n") + f.write("written \n".encode("utf-8")) + f.write(("BINARY\n" if binary else "ASCII\n").encode("utf-8")) + f.write(b"DATASET UNSTRUCTURED_GRID\n") + + # write points and cells + _write_points(f, points, binary) + _write_cells(f, self.cells, binary) + + # write point data + if self.point_data: + num_points = self.points.shape[0] + f.write("POINT_DATA {}\n".format(num_points).encode("utf-8")) + _write_field_data(f, self.point_data, binary) + + # write cell data + if self.cell_data: + total_num_cells = sum(len(c.data) for c in self.cells) + f.write("CELL_DATA {}\n".format(total_num_cells).encode("utf-8")) + _write_field_data(f, self.cell_data, binary) + + + def __repr__(self): + s='<{} object> with keys:\n'.format(type(self).__name__) + for k,v in self.items(): + s+=' - {}: {}\n'.format(k,v) + return s + + + def __repr__(self): + """ print function """ + def show_grid(v,s): + if v is None: + return + if len(v)==0: + return + if len(v)==1: + lines.append('- {}: [{}], n: {}'.format(s,v[0],len(v))) + else: + lines.append('- {}: [{} ... {}], dx: {}, n: {}'.format(s,v[0],v[-1],v[1]-v[0],len(v))) + + lines = ['<{} object> with attributes:'.format(type(self).__name__)] + show_grid(self.xp_grid, 'xp_grid') + show_grid(self.yp_grid, 'yp_grid') + show_grid(self.zp_grid, 'zp_grid') + + if self.point_data_grid: + lines.append('- point_data_grid:') + for k,v in self.point_data_grid.items(): + lines.append(' "{}" : {}'.format(k,v.shape)) + + lines.append('- points {}'.format(len(self.points))) + if len(self.cells) > 0: + lines.append("- cells:") + for tpe, elems in self.cells: + lines.append(" {}: {}".format(tpe,len(elems))) + else: + lines.append(" No cells.") + + if self.point_data: + lines.append('- point_data:') + for k,v in self.point_data.items(): + lines.append(' "{}" : {}'.format(k,v.shape)) + + if self.cell_data: + names = ", ".join(self.cell_data.keys()) + lines.append(" Cell data: {}".format(names)) + + return "\n".join(lines) + + + def toDataFrame(self): + return None + + + +# Save FlowData Object to vtk +# """ +# n_points = self.dimensions.x1 * self.dimensions.x2 * self.dimensions.x3 +# vtk_file = Output(filename) + #self.file = open(self.filename, "w") + #self.ln = "\n" +# vtk_file.write_line('# vtk DataFile Version 3.0') +# vtk_file.write_line('array.mean0D') +# vtk_file.write_line('ASCII') +# vtk_file.write_line('DATASET STRUCTURED_POINTS') +# vtk_file.write_line('DIMENSIONS {}'.format(self.dimensions)) +# vtk_file.write_line('ORIGIN {}'.format(self.origin)) +# vtk_file.write_line('SPACING {}'.format(self.spacing)) +# vtk_file.write_line('POINT_DATA {}'.format(n_points)) +# vtk_file.write_line('FIELD attributes 1') +# vtk_file.write_line('UAvg 3 {} float'.format(n_points)) +# for u, v, w in zip(self.u, self.v, self.w): +# vtk_file.write_line('{}'.format(Vec3(u, v, w))) + +# --- Paraview +# except: from paraview.simple import * +# sliceFile = sliceDir + '/' + tStartStr + '/' + sliceName +# print ' Slice file 1a: ' + sliceFile +# slice_1a_vtk = LegacyVTKReader( FileNames=[sliceFile] ) +# sliceFile = sliceDir + '/' + tEndStr + '/' + sliceName +# DataRepresentation3 = GetDisplayProperties(slice_1a_vtk) +# DataRepresentation3.Visibility = 0 +# SetActiveSource(slice_1a_vtk) + +# --- VTK +# import np +# from vtk import vtkStructuredPointsReader +# from vtk.util import np as VN +# +# reader = vtkStructuredPointsReader() +# reader.SetFileName(filename) +# reader.ReadAllVectorsOn() +# reader.ReadAllScalarsOn() +# reader.Update() +# +# data = reader.GetOutput() +# +# dim = data.GetDimensions() +# vec = list(dim) +# vec = [i-1 for i in dim] +# vec.append(3) +# +# u = VN.vtk_to_np(data.GetCellData().GetArray('velocity')) +# b = VN.vtk_to_numpy(data.GetCellData().GetArray('cell_centered_B')) +# +# u = u.reshape(vec,order='F') +# b = b.reshape(vec,order='F') +# +# x = zeros(data.GetNumberOfPoints()) +# y = zeros(data.GetNumberOfPoints()) +# z = zeros(data.GetNumberOfPoints()) +# +# for i in range(data.GetNumberOfPoints()): +# x[i],y[i],z[i] = data.GetPoint(i) +# +# x = x.reshape(dim,order='F') +# y = y.reshape(dim,order='F') +# z = z.reshape(dim,order='F') + +# --- vtk +# import vtk +# import numpy +# import vtk_demo.version as version +# +# +# def main(): +# """ +# :return: The render window interactor. +# """ +# +# chessboard_resolution = 5 +# n_lut_colors = 256 +# data_max_value = 1 +# +# # Provide some geometry +# chessboard = vtk.vtkPlaneSource() +# chessboard.SetXResolution(chessboard_resolution) +# chessboard.SetYResolution(chessboard_resolution) +# num_squares = chessboard_resolution * chessboard_resolution +# # Force an update so we can set cell data +# chessboard.Update() +# +# # Make some arbitrary data to show on the chessboard geometry +# data = vtk.vtkFloatArray() +# for i in range(num_squares): +# if i == 4: +# # This square should in principle light up with color given by SetNanColor below +# data.InsertNextTuple1(numpy.nan) +# else: +# thing = (i * data_max_value) / (num_squares - 1) +# data.InsertNextTuple1(thing) +# +# # Make a LookupTable +# lut = vtk.vtkLookupTable() +# lut.SetNumberOfColors(n_lut_colors) +# lut.Build() +# lut.SetTableRange(0, data_max_value) +# lut.SetNanColor(.1, .5, .99, 1.0) # <------ This color gets used +# for i in range(n_lut_colors): +# # Fill it with arbitrary colors, e.g. grayscale +# x = data_max_value*i/(n_lut_colors-1) +# lut.SetTableValue(i, x, x, x, 1.0) +# lut.SetNanColor(.99, .99, .1, 1.0) # <----- This color gets ignored! ...except by GetNanColor +# +# print(lut.GetNanColor()) # <-- Prints the color set by the last SetNanColor call above! +# +# chessboard.GetOutput().GetCellData().SetScalars(data) +# +# mapper = vtk.vtkPolyDataMapper() +# mapper.SetInputConnection(chessboard.GetOutputPort()) +# mapper.SetScalarRange(0, data_max_value) +# mapper.SetLookupTable(lut) +# mapper.Update() +# +# actor = vtk.vtkActor() +# actor.SetMapper(mapper) +# +# renderer = vtk.vtkRenderer() +# ren_win = vtk.vtkRenderWindow() +# ren_win.AddRenderer(renderer) +# renderer.SetBackground(vtk.vtkNamedColors().GetColor3d('MidnightBlue')) +# renderer.AddActor(actor) +# +# iren = vtk.vtkRenderWindowInteractor() + +# --- pyvtk +# """Read vtk-file stored previously with tovtk.""" +# p = pyvtk.VtkData(filename) +# xn = array(p.structure.points) +# dims = p.structure.dimensions +# try: +# N = eval(p.header.split(" ")[-1]) + + # --- Extract + # # Convert the center of the turbine coordinate in m to High-Resolution domains left most corner in (i,j) + # xe_index = int(origin_at_precusr[0]/10) + # ye_index = int(origin_at_precusr[1]/10) + # + # # Read the full domain from VTK + # reader = vtk.vtkStructuredPointsReader() + # reader.SetFileName(in_vtk) + # reader.Update() + # + # # Extract the High Resolution domain at same spacial spacing by specifying the (i,i+14),(j,j+14),(k,k+20) tuples + # extract = vtk.vtkExtractVOI() + # extract.SetInputConnection(reader.GetOutputPort()) + # extract.SetVOI(xe_index, xe_index+14, ye_index, ye_index+14, 0, 26) + # extract.SetSampleRate(1, 1, 1) + # extract.Update() + # + # # Write the extract as VTK + # points = extract.GetOutput() + # vec = points.GetPointData().GetVectors('Amb') + # + # with open(out_vtk, 'a') as the_file: + # the_file.write('# vtk DataFile Version 3.0\n') + # the_file.write('High\n') + # the_file.write('ASCII\n') + # the_file.write('DATASET STRUCTURED_POINTS\n') + # the_file.write('DIMENSIONS %d %d %d\n' % points.GetDimensions()) + # the_file.write('ORIGIN %f %f %f\n' % origin_at_stitch) + # the_file.write('SPACING %f %f %f\n' % points.GetSpacing()) + # the_file.write('POINT_DATA %d\n' % points.GetNumberOfPoints()) + # the_file.write('VECTORS Amb float\n') + # for i in range(points.GetNumberOfPoints()): + # the_file.write('%f %f %f\n' % vec.GetTuple(i) ) + + # --- Stitch + # reader = vtk.vtkStructuredPointsReader() + # reader.SetFileName(in_vtk) + # reader.Update() + # + # hAppend = vtk.vtkImageAppend() + # hAppend.SetAppendAxis(0) + # for i in range(nx): + # hAppend.AddInputData(reader.GetOutput()) + # hAppend.Update() + # + # vAppend = vtk.vtkImageAppend() + # vAppend.SetAppendAxis(1) + # for i in range(ny): + # vAppend.AddInputData(hAppend.GetOutput()) + # vAppend.Update() + # + # points = vAppend.GetOutput() + # vec = points.GetPointData().GetVectors('Amb') + # + # with open(out_vtk, 'a') as the_file: + # the_file.write('# vtk DataFile Version 3.0\n') + # the_file.write('Low\n') + # the_file.write('ASCII\n') + # the_file.write('DATASET STRUCTURED_POINTS\n') + # the_file.write('DIMENSIONS %d %d %d\n' % points.GetDimensions()) + # the_file.write('ORIGIN %f %f %f\n' % points.GetOrigin()) + # the_file.write('SPACING %f %f %f\n' % points.GetSpacing()) + # the_file.write('POINT_DATA %d\n' % points.GetNumberOfPoints()) + # the_file.write('VECTORS Amb float\n') + # for i in range(points.GetNumberOfPoints()): + # the_file.write('%f %f %f\n' % vec.GetTuple(i) ) + + + # + + +# --------------------------------------------------------------------------------} +# --- The code below is taken from meshio +# https://github.com/nschloe/meshio +# The MIT License (MIT) +# Copyright (c) 2015-2020 meshio developers +# --------------------------------------------------------------------------------{ +ReadError = BrokenFormatError +WriteError = BrokenFormatError + +def _vtk_to_meshio_order(vtk_type, numnodes, dtype=int): + # meshio uses the same node ordering as VTK for most cell types. However, for the + # linear wedge, the ordering of the gmsh Prism [1] is adopted since this is found in + # most codes (Abaqus, Ansys, Nastran,...). In the vtkWedge [2], the normal of the + # (0,1,2) triangle points outwards, while in gmsh this normal points inwards. + # [1] http://gmsh.info/doc/texinfo/gmsh.html#Node-ordering + # [2] https://vtk.org/doc/nightly/html/classvtkWedge.html + if vtk_type == 13: + return numpy.array([0, 2, 1, 3, 5, 4], dtype=dtype) + else: + return numpy.arange(0, numnodes, dtype=dtype) + +def _meshio_to_vtk_order(meshio_type, numnodes, dtype=int): + if meshio_type == "wedge": + return numpy.array([0, 2, 1, 3, 5, 4], dtype=dtype) + else: + return numpy.arange(0, numnodes, dtype=dtype) + +vtk_to_meshio_type = { + 0: "empty", + 1: "vertex", + # 2: 'poly_vertex', + 3: "line", + # 4: 'poly_line', + 5: "triangle", + # 6: 'triangle_strip', + 7: "polygon", + 8: "pixel", + 9: "quad", + 10: "tetra", + # 11: 'voxel', + 12: "hexahedron", + 13: "wedge", + 14: "pyramid", + 15: "penta_prism", + 16: "hexa_prism", + 21: "line3", + 22: "triangle6", + 23: "quad8", + 24: "tetra10", + 25: "hexahedron20", + 26: "wedge15", + 27: "pyramid13", + 28: "quad9", + 29: "hexahedron27", + 30: "quad6", + 31: "wedge12", + 32: "wedge18", + 33: "hexahedron24", + 34: "triangle7", + 35: "line4", + 42: "polyhedron", + # + # 60: VTK_HIGHER_ORDER_EDGE, + # 61: VTK_HIGHER_ORDER_TRIANGLE, + # 62: VTK_HIGHER_ORDER_QUAD, + # 63: VTK_HIGHER_ORDER_POLYGON, + # 64: VTK_HIGHER_ORDER_TETRAHEDRON, + # 65: VTK_HIGHER_ORDER_WEDGE, + # 66: VTK_HIGHER_ORDER_PYRAMID, + # 67: VTK_HIGHER_ORDER_HEXAHEDRON, + # Arbitrary order Lagrange elements + 68: "VTK_LAGRANGE_CURVE", + 69: "VTK_LAGRANGE_TRIANGLE", + 70: "VTK_LAGRANGE_QUADRILATERAL", + 71: "VTK_LAGRANGE_TETRAHEDRON", + 72: "VTK_LAGRANGE_HEXAHEDRON", + 73: "VTK_LAGRANGE_WEDGE", + 74: "VTK_LAGRANGE_PYRAMID", + # Arbitrary order Bezier elements + 75: "VTK_BEZIER_CURVE", + 76: "VTK_BEZIER_TRIANGLE", + 77: "VTK_BEZIER_QUADRILATERAL", + 78: "VTK_BEZIER_TETRAHEDRON", + 79: "VTK_BEZIER_HEXAHEDRON", + 80: "VTK_BEZIER_WEDGE", + 81: "VTK_BEZIER_PYRAMID", +} +meshio_to_vtk_type = {v: k for k, v in vtk_to_meshio_type.items()} + + +# --------------------------------------------------------------------------------} +# --- Mesh +# --------------------------------------------------------------------------------{ +class CellBlock(collections.namedtuple("CellBlock", ["type", "data"])): + def __repr__(self): + return "".format(self.type,len(self.data)) +# --------------------------------------------------------------------------------} +# --- File _vtk.py from meshio +# --------------------------------------------------------------------------------{ +vtk_type_to_numnodes = numpy.array( + [ + 0, # empty + 1, # vertex + -1, # poly_vertex + 2, # line + -1, # poly_line + 3, # triangle + -1, # triangle_strip + -1, # polygon + -1, # pixel + 4, # quad + 4, # tetra + -1, # voxel + 8, # hexahedron + 6, # wedge + 5, # pyramid + 10, # penta_prism + 12, # hexa_prism + -1, + -1, + -1, + -1, + 3, # line3 + 6, # triangle6 + 8, # quad8 + 10, # tetra10 + 20, # hexahedron20 + 15, # wedge15 + 13, # pyramid13 + 9, # quad9 + 27, # hexahedron27 + 6, # quad6 + 12, # wedge12 + 18, # wedge18 + 24, # hexahedron24 + 7, # triangle7 + 4, # line4 + ] +) + + +# These are all VTK data types. +# One sometimes finds 'vtktypeint64', but this is ill-formed. +vtk_to_numpy_dtype_name = { + "bit": "bool", + "unsigned_char": "uint8", + "char": "int8", + "unsigned_short": "uint16", + "short": "int16", + "unsigned_int": "uint32", + "int": "int32", + "unsigned_long": "uint64", + "long": "int64", + "float": "float32", + "double": "float64", + "vtktypeint32": "int32", # vtk DataFile Version 5.1 + "vtktypeint64": "int64", # vtk DataFile Version 5.1 + "vtkidtype": "int32", # may be either 32-bit or 64-bit (VTK_USE_64BIT_IDS) +} + +numpy_to_vtk_dtype = { + v: k for k, v in vtk_to_numpy_dtype_name.items() if "vtk" not in k +} + +# supported vtk dataset types +vtk_dataset_types = [ + "UNSTRUCTURED_GRID", + "STRUCTURED_POINTS", + "STRUCTURED_GRID", + "RECTILINEAR_GRID", +] +# additional infos per dataset type +vtk_dataset_infos = { + "UNSTRUCTURED_GRID": [], + "STRUCTURED_POINTS": [ + "DIMENSIONS", + "ORIGIN", + "SPACING", + "ASPECT_RATIO", # alternative for SPACING in version 1.0 and 2.0 + ], + "STRUCTURED_GRID": ["DIMENSIONS"], + "RECTILINEAR_GRID": [ + "DIMENSIONS", + "X_COORDINATES", + "Y_COORDINATES", + "Z_COORDINATES", + ], +} + +# all main sections in vtk +vtk_sections = [ + "METADATA", + "DATASET", + "POINTS", + "CELLS", + "CELL_TYPES", + "POINT_DATA", + "CELL_DATA", + "LOOKUP_TABLE", + "COLOR_SCALARS", +] + + + + + +def read(filename): + """Reads a VTK vtk file.""" + with open(filename, "rb") as f: + out = read_buffer(f) + return out + + +def read_buffer(f): + # initialize output data + info = VTKFile() + + # skip header and title + f.readline() + f.readline() + + data_type = f.readline().decode("utf-8").strip().upper() + if data_type not in ["ASCII", "BINARY"]: + raise WrongFormatError("Unknown VTK data type ",data_type) + info.is_ascii = data_type == "ASCII" + + while True: + line = f.readline().decode("utf-8") + if not line: + # EOF + break + + line = line.strip() + if len(line) == 0: + continue + + info.split = line.split() + info.section = info.split[0].upper() + + if info.section in vtk_sections: + _read_section(f, info) + else: + _read_subsection(f, info) + + _check_mesh(info) + cells, cell_data = translate_cells(info.c, info.ct, info.cell_data_raw) + + info.cells = cells + info.cell_data = cell_data + + return info + + +def _read_section(f, info): + if info.section == "METADATA": + _skip_meta(f) + + elif info.section == "DATASET": + info.active = "DATASET" + info.dataset["type"] = info.split[1].upper() + if info.dataset["type"] not in vtk_dataset_types: + raise BrokenFormatError( + "Only VTK '{}' supported (not {}).".format( + "', '".join(vtk_dataset_types), info.dataset["type"] + ) + ) + + elif info.section == "POINTS": + info.active = "POINTS" + info.num_points = int(info.split[1]) + data_type = info.split[2].lower() + info.points = _read_points(f, data_type, info.is_ascii, info.num_points) + + elif info.section == "CELLS": + info.active = "CELLS" + last_pos = f.tell() + try: + line = f.readline().decode("utf-8") + except UnicodeDecodeError: + line = "" + if "OFFSETS" in line: + # vtk DataFile Version 5.1 - appearing in Paraview 5.8.1 outputs + # No specification found for this file format. + # See the question on ParaView Discourse Forum: + # . + info.num_offsets = int(info.split[1]) + info.num_items = int(info.split[2]) + dtype = numpy.dtype(vtk_to_numpy_dtype_name[line.split()[1]]) + offsets = _read_cells(f, info.is_ascii, info.num_offsets, dtype) + line = f.readline().decode("utf-8") + assert "CONNECTIVITY" in line + dtype = numpy.dtype(vtk_to_numpy_dtype_name[line.split()[1]]) + connectivity = _read_cells(f, info.is_ascii, info.num_items, dtype) + info.c = (offsets, connectivity) + else: + f.seek(last_pos) + info.num_items = int(info.split[2]) + info.c = _read_cells(f, info.is_ascii, info.num_items) + + elif info.section == "CELL_TYPES": + info.active = "CELL_TYPES" + info.num_items = int(info.split[1]) + info.ct = _read_cell_types(f, info.is_ascii, info.num_items) + + elif info.section == "POINT_DATA": + info.active = "POINT_DATA" + info.num_items = int(info.split[1]) + + elif info.section == "CELL_DATA": + info.active = "CELL_DATA" + info.num_items = int(info.split[1]) + + elif info.section == "LOOKUP_TABLE": + info.num_items = int(info.split[2]) + numpy.fromfile(f, count=info.num_items * 4, sep=" ", dtype=float) + # rgba = data.reshape((info.num_items, 4)) + + elif info.section == "COLOR_SCALARS": + nValues = int(info.split[2]) + # re-use num_items from active POINT/CELL_DATA + num_items = info.num_items + dtype = numpy.ubyte + if info.is_ascii: + dtype = float + numpy.fromfile(f, count=num_items * nValues, dtype=dtype) + + +def _read_subsection(f, info): + if info.active == "POINT_DATA": + d = info.point_data + elif info.active == "CELL_DATA": + d = info.cell_data_raw + elif info.active == "DATASET": + d = info.dataset + else: + d = info.field_data + + if info.section in vtk_dataset_infos[info.dataset["type"]]: + if info.section[1:] == "_COORDINATES": + info.num_points = int(info.split[1]) + data_type = info.split[2].lower() + d[info.section] = _read_coords(f, data_type, info.is_ascii, info.num_points) + else: + if info.section == "DIMENSIONS": + d[info.section] = list(map(int, info.split[1:])) + else: + d[info.section] = list(map(float, info.split[1:])) + if len(d[info.section]) != 3: + raise BrokenFormatError( + "Wrong number of info in section '{}'. Need 3, got {}.".format( + info.section, len(d[info.section]) + ) + ) + elif info.section == "SCALARS": + d.update(_read_scalar_field(f, info.num_items, info.split, info.is_ascii)) + elif info.section == "VECTORS": + d.update(_read_field(f, info.num_items, info.split, [3], info.is_ascii)) + elif info.section == "TENSORS": + d.update(_read_field(f, info.num_items, info.split, [3, 3], info.is_ascii)) + elif info.section == "FIELD": + d.update(_read_fields(f, int(info.split[2]), info.is_ascii)) + else: + raise WrongFormatError("Unknown section ",info.section) + + +def _check_mesh(info): + if info.dataset["type"] == "UNSTRUCTURED_GRID": + if info.c is None: + raise ReadError("Required section CELLS not found.") + if info.ct is None: + raise ReadError("Required section CELL_TYPES not found.") + + elif info.dataset["type"] == "STRUCTURED_POINTS": + dim = info.dataset["DIMENSIONS"] + ori = info.dataset["ORIGIN"] + spa = ( + info.dataset["SPACING"] + if "SPACING" in info.dataset + else info.dataset["ASPECT_RATIO"] + ) + axis = [ + numpy.linspace(ori[i], ori[i] + (dim[i] - 1.0) * spa[i], dim[i]) + for i in range(3) + ] + info.xp_grid=axis[0] + info.yp_grid=axis[1] + info.zp_grid=axis[2] + + info.points = _generate_points(axis) + info.c, info.ct = _generate_cells(dim=info.dataset["DIMENSIONS"]) + + elif info.dataset["type"] == "RECTILINEAR_GRID": + axis = [ + info.dataset["X_COORDINATES"], + info.dataset["Y_COORDINATES"], + info.dataset["Z_COORDINATES"], + ] + info.xp_grid=axis[0] + info.yp_grid=axis[1] + info.zp_grid=axis[2] + + info.points = _generate_points(axis) + info.c, info.ct = _generate_cells(dim=info.dataset["DIMENSIONS"]) + + elif info.dataset["type"] == "STRUCTURED_GRID": + info.c, info.ct = _generate_cells(dim=info.dataset["DIMENSIONS"]) + # TODO x_grid, y_grid, z_grid points + + + +def _generate_cells(dim): + ele_dim = [d - 1 for d in dim if d > 1] + ele_no = numpy.prod(ele_dim, dtype=int) + spatial_dim = len(ele_dim) + + if spatial_dim == 1: + # cells are lines in 1D + cells = numpy.empty((ele_no, 3), dtype=int) + cells[:, 0] = 2 + cells[:, 1] = numpy.arange(ele_no, dtype=int) + cells[:, 2] = cells[:, 1] + 1 + cell_types = numpy.full(ele_no, 3, dtype=int) + + elif spatial_dim == 2: + # cells are quad in 2D + cells = numpy.empty((ele_no, 5), dtype=int) + cells[:, 0] = 4 + cells[:, 1] = numpy.arange(0, ele_no, dtype=int) + cells[:, 1] += numpy.arange(0, ele_no, dtype=int) // ele_dim[0] + cells[:, 2] = cells[:, 1] + 1 + cells[:, 3] = cells[:, 1] + 2 + ele_dim[0] + cells[:, 4] = cells[:, 3] - 1 + cell_types = numpy.full(ele_no, 9, dtype=int) + else: + # cells are hex in 3D + cells = numpy.empty((ele_no, 9), dtype=int) + cells[:, 0] = 8 + cells[:, 1] = numpy.arange(ele_no) + cells[:, 1] += (ele_dim[0] + ele_dim[1] + 1) * ( + numpy.arange(ele_no) // (ele_dim[0] * ele_dim[1]) + ) + cells[:, 1] += (numpy.arange(ele_no) % (ele_dim[0] * ele_dim[1])) // ele_dim[0] + cells[:, 2] = cells[:, 1] + 1 + cells[:, 3] = cells[:, 1] + 2 + ele_dim[0] + cells[:, 4] = cells[:, 3] - 1 + cells[:, 5] = cells[:, 1] + (1 + ele_dim[0]) * (1 + ele_dim[1]) + cells[:, 6] = cells[:, 5] + 1 + cells[:, 7] = cells[:, 5] + 2 + ele_dim[0] + cells[:, 8] = cells[:, 7] - 1 + cell_types = numpy.full(ele_no, 12, dtype=int) + + return cells.reshape(-1), cell_types + +def _generate_points(axis): + x_dim = len(axis[0]) + y_dim = len(axis[1]) + z_dim = len(axis[2]) + pnt_no = x_dim * y_dim * z_dim + x_id, y_id, z_id = numpy.mgrid[0:x_dim, 0:y_dim, 0:z_dim] + points = numpy.empty((pnt_no, 3), dtype=axis[0].dtype) + # VTK sorts points and cells in Fortran order + points[:, 0] = axis[0][x_id.reshape(-1, order="F")] + points[:, 1] = axis[1][y_id.reshape(-1, order="F")] + points[:, 2] = axis[2][z_id.reshape(-1, order="F")] + return points + + +def _read_coords(f, data_type, is_ascii, num_points): + dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) + if is_ascii: + coords = numpy.fromfile(f, count=num_points, sep=" ", dtype=dtype) + else: + # Binary data is big endian, see + # . + dtype = dtype.newbyteorder(">") + coords = numpy.fromfile(f, count=num_points, dtype=dtype) + line = f.readline().decode("utf-8") + if line != "\n": + raise ReadError() + return coords + + +def _read_points(f, data_type, is_ascii, num_points): + dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) + if is_ascii: + points = numpy.fromfile(f, count=num_points * 3, sep=" ", dtype=dtype) + else: + # Binary data is big endian, see + # . + dtype = dtype.newbyteorder(">") + points = numpy.fromfile(f, count=num_points * 3, dtype=dtype) + line = f.readline().decode("utf-8") + if line != "\n": + raise ReadError() + return points.reshape((num_points, 3)) + + +def _read_cells(f, is_ascii, num_items, dtype=numpy.dtype("int32")): + if is_ascii: + c = numpy.fromfile(f, count=num_items, sep=" ", dtype=dtype) + else: + dtype = dtype.newbyteorder(">") + c = numpy.fromfile(f, count=num_items, dtype=dtype) + line = f.readline().decode("utf-8") + if line != "\n": + raise ReadError() + return c + + +def _read_cell_types(f, is_ascii, num_items): + if is_ascii: + ct = numpy.fromfile(f, count=int(num_items), sep=" ", dtype=int) + else: + # binary + ct = numpy.fromfile(f, count=int(num_items), dtype=">i4") + line = f.readline().decode("utf-8") + # Sometimes, there's no newline at the end + if line.strip() != "": + raise ReadError() + return ct + + +def _read_scalar_field(f, num_data, split, is_ascii): + data_name = split[1] + data_type = split[2].lower() + try: + num_comp = int(split[3]) + except IndexError: + num_comp = 1 + + # The standard says: + # > The parameter numComp must range between (1,4) inclusive; [...] + if not (0 < num_comp < 5): + raise ReadError("The parameter numComp must range between (1,4) inclusive") + + dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) + lt, _ = f.readline().decode("utf-8").split() + if lt.upper() != "LOOKUP_TABLE": + raise ReadError() + + if is_ascii: + data = numpy.fromfile(f, count=num_data * num_comp, sep=" ", dtype=dtype) + else: + # Binary data is big endian, see + # . + dtype = dtype.newbyteorder(">") + data = numpy.fromfile(f, count=num_data * num_comp, dtype=dtype) + line = f.readline().decode("utf-8") + if line != "\n": + raise ReadError() + + data = data.reshape(-1, num_comp) + return {data_name: data} + + +def _read_field(f, num_data, split, shape, is_ascii): + data_name = split[1] + data_type = split[2].lower() + + dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type]) + # prod() + # + k = reduce((lambda x, y: x * y), shape) + + if is_ascii: + data = numpy.fromfile(f, count=k * num_data, sep=" ", dtype=dtype) + else: + # Binary data is big endian, see + # . + dtype = dtype.newbyteorder(">") + data = numpy.fromfile(f, count=k * num_data, dtype=dtype) + line = f.readline().decode("utf-8") + if line != "\n": + raise ReadError() + + data = data.reshape(-1, *shape) + return {data_name: data} + + +def _read_fields(f, num_fields, is_ascii): + data = {} + for _ in range(num_fields): + line = f.readline().decode("utf-8").split() + if line[0] == "METADATA": + _skip_meta(f) + name, shape0, shape1, data_type = f.readline().decode("utf-8").split() + else: + name, shape0, shape1, data_type = line + + shape0 = int(shape0) + shape1 = int(shape1) + dtype = numpy.dtype(vtk_to_numpy_dtype_name[data_type.lower()]) + + if is_ascii: + dat = numpy.fromfile(f, count=shape0 * shape1, sep=" ", dtype=dtype) + else: + # Binary data is big endian, see + # . + dtype = dtype.newbyteorder(">") + dat = numpy.fromfile(f, count=shape0 * shape1, dtype=dtype) + line = f.readline().decode("utf-8") + if line != "\n": + raise ReadError() + + if shape0 != 1: + dat = dat.reshape((shape1, shape0)) + + data[name] = dat + + return data + + +def _skip_meta(f): + # skip possible metadata + # https://vtk.org/doc/nightly/html/IOLegacyInformationFormat.html + while True: + line = f.readline().decode("utf-8").strip() + if not line: + # end of metadata is a blank line + break + + +def translate_cells(data, types, cell_data_raw): + # https://www.vtk.org/doc/nightly/html/vtkCellType_8h_source.html + # Translate it into the cells array. + # `data` is a one-dimensional vector with + # (num_points0, p0, p1, ... ,pk, numpoints1, p10, p11, ..., p1k, ... + # or a tuple with (offsets, connectivity) + has_polygon = numpy.any(types == meshio_to_vtk_type["polygon"]) + + cells = [] + cell_data = {} + if has_polygon: + numnodes = numpy.empty(len(types), dtype=int) + # If some polygons are in the VTK file, loop over the cells + numcells = len(types) + offsets = numpy.empty(len(types), dtype=int) + offsets[0] = 0 + for idx in range(numcells - 1): + numnodes[idx] = data[offsets[idx]] + offsets[idx + 1] = offsets[idx] + numnodes[idx] + 1 + + idx = numcells - 1 + numnodes[idx] = data[offsets[idx]] + if not numpy.all(numnodes == data[offsets]): + raise ReadError() + + # TODO: cell_data + for idx, vtk_cell_type in enumerate(types): + start = offsets[idx] + 1 + cell_idx = start + _vtk_to_meshio_order( + vtk_cell_type, numnodes[idx], offsets.dtype + ) + cell = data[cell_idx] + + cell_type = vtk_to_meshio_type[vtk_cell_type] + if cell_type == "polygon": + cell_type += str(data[offsets[idx]]) + + if len(cells) > 0 and cells[-1].type == cell_type: + cells[-1].data.append(cell) + else: + cells.append(CellBlock(cell_type, [cell])) + + # convert data to numpy arrays + for k, c in enumerate(cells): + cells[k] = CellBlock(c.type, numpy.array(c.data)) + else: + # Deduct offsets from the cell types. This is much faster than manually going + # through the data array. Slight disadvantage: This doesn't work for cells with + # a custom number of points. + numnodes = vtk_type_to_numnodes[types] + if not numpy.all(numnodes > 0): + raise ReadError("File contains cells that meshio cannot handle.") + if isinstance(data, tuple): + offsets, conn = data + if not numpy.all(numnodes == numpy.diff(offsets)): + raise ReadError() + idx0 = 0 + else: + offsets = numpy.cumsum(numnodes + 1) - (numnodes + 1) + + if not numpy.all(numnodes == data[offsets]): + raise ReadError() + idx0 = 1 + conn = data + + b = numpy.concatenate( + [[0], numpy.where(types[:-1] != types[1:])[0] + 1, [len(types)]] + ) + for start, end in zip(b[:-1], b[1:]): + meshio_type = vtk_to_meshio_type[types[start]] + n = numnodes[start] + cell_idx = idx0 + _vtk_to_meshio_order(types[start], n, dtype=offsets.dtype) + indices = numpy.add.outer(offsets[start:end], cell_idx) + cells.append(CellBlock(meshio_type, conn[indices])) + for name, d in cell_data_raw.items(): + if name not in cell_data: + cell_data[name] = [] + cell_data[name].append(d[start:end]) + + return cells, cell_data + + +def write(filename, mesh, binary=True): + def pad(array): + return numpy.pad(array, ((0, 0), (0, 1)), "constant") + + if mesh.points.shape[1] == 2: + points = pad(mesh.points) + else: + points = mesh.points + + if mesh.point_data: + for name, values in mesh.point_data.items(): + if len(values.shape) == 2 and values.shape[1] == 2: + mesh.point_data[name] = pad(values) + + for name, data in mesh.cell_data.items(): + for k, values in enumerate(data): + if len(values.shape) == 2 and values.shape[1] == 2: + data[k] = pad(data[k]) + + with open(filename, "wb") as f: + f.write(b"# vtk DataFile Version 4.2\n") + f.write("written \n".encode("utf-8")) + f.write(("BINARY\n" if binary else "ASCII\n").encode("utf-8")) + f.write(b"DATASET UNSTRUCTURED_GRID\n") + + # write points and cells + _write_points(f, points, binary) + _write_cells(f, mesh.cells, binary) + + # write point data + if mesh.point_data: + num_points = mesh.points.shape[0] + f.write("POINT_DATA {}\n".format(num_points).encode("utf-8")) + _write_field_data(f, mesh.point_data, binary) + + # write cell data + if mesh.cell_data: + total_num_cells = sum(len(c.data) for c in mesh.cells) + f.write("CELL_DATA {}\n".format(total_num_cells).encode("utf-8")) + _write_field_data(f, mesh.cell_data, binary) + + +def _write_points(f, points, binary): + f.write( + "POINTS {} {}\n".format( + len(points), numpy_to_vtk_dtype[points.dtype.name] + ).encode("utf-8") + ) + + if binary: + # Binary data must be big endian, see + # . + # if points.dtype.byteorder == "<" or ( + # points.dtype.byteorder == "=" and sys.byteorder == "little" + # ): + points.astype(points.dtype.newbyteorder(">")).tofile(f, sep="") + else: + # ascii + points.tofile(f, sep=" ") + f.write(b"\n") + + +def _write_cells(f, cells, binary): + total_num_cells = sum([len(c.data) for c in cells]) + total_num_idx = sum([c.data.size for c in cells]) + # For each cell, the number of nodes is stored + total_num_idx += total_num_cells + f.write("CELLS {} {}\n".format(total_num_cells,total_num_idx).encode("utf-8")) + if binary: + for c in cells: + n = c.data.shape[1] + cell_idx = _meshio_to_vtk_order(c.type, n) + dtype = numpy.dtype(">i4") + # One must force endianness here: + # + numpy.column_stack( + [ + numpy.full(c.data.shape[0], n, dtype=dtype), + c.data[:, cell_idx].astype(dtype), + ], + ).astype(dtype).tofile(f, sep="") + f.write(b"\n") + else: + # ascii + for c in cells: + n = c.data.shape[1] + cell_idx = _meshio_to_vtk_order(c.type, n) + # prepend a column with the value n + numpy.column_stack( + [ + numpy.full(c.data.shape[0], n, dtype=c.data.dtype), + c.data[:, cell_idx], + ] + ).tofile(f, sep="\n") + f.write(b"\n") + + # write cell types + f.write("CELL_TYPES {}\n".format(total_num_cells).encode("utf-8")) + if binary: + for c in cells: + key_ = c.type[:7] if c.type[:7] == "polygon" else c.type + vtk_type = meshio_to_vtk_type[key_] + numpy.full(len(c.data), vtk_type, dtype=numpy.dtype(">i4")).tofile( + f, sep="" + ) + f.write(b"\n") + else: + # ascii + for c in cells: + key_ = c.type[:7] if c.type[:7] == "polygon" else c.type + numpy.full(len(c.data), meshio_to_vtk_type[key_]).tofile(f, sep="\n") + f.write(b"\n") + + +def _write_field_data(f, data, binary): + f.write(("FIELD FieldData {}\n".format(len(data))).encode("utf-8")) + for name, values in data.items(): + if isinstance(values, list): + values = numpy.concatenate(values) + if len(values.shape) == 1: + num_tuples = values.shape[0] + num_components = 1 + else: + num_tuples = values.shape[0] + num_components = values.shape[1] + + if " " in name: + raise WriteError("VTK doesn't support spaces in field names", name) + + f.write( + ( + "{} {} {} {}\n".format( + name, + num_components, + num_tuples, + numpy_to_vtk_dtype[values.dtype.name], + ) + ).encode("utf-8") + ) + if binary: + values.astype(values.dtype.newbyteorder(">")).tofile(f, sep="") + else: + # ascii + values.tofile(f, sep=" ") + # numpy.savetxt(f, points) + f.write(b"\n") + + + +if __name__=='__main__': + #plane=VTKFile('tests/_TODO/FastFarm.Low.DisXY1.t1200.vtk') + #plane=VTKFile('tests/_TODO/FastFarm.Low.DisXZ1.t1200.vtk') + plane=VTKFile('tests/_TODO/FastFarm.Low.DisXY1.t0_fake.vtk') + print(plane.points) + #plane=VTKFile('tests/_TODO/Main_NM80_OF24_vc.FVW_Hub.AllSeg.000000130.vtk') + print(plane) +# print(plane.points) +# print(plane.cells) +# print(plane.cell_data_raw) +# print(plane.cell_data) +# print('x_grid',plane.x_grid) +# print('PointData',plane.point_data.keys()) +# print('PointData',plane.point_data_grid.keys()) +# print('PointData',plane.points.shape) +# print(plane.dataset) +# if len(plane.z_grid)==1: +# print('PointData',plane.point_data['DisXY'].shape) +# D=plane.point_data['DisXY'] +# print(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1]) +# +# DD= D.reshape(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1], order='F') +# print(DD.shape) +# import matplotlib.pyplot as plt +# plt.contourf(plane.x_grid, plane.y_grid, DD[:,:,0,0].T) +# plt.show() +# elif len(plane.y_grid)==1: +# +# print('PointData',plane.point_data['DisXZ'].shape) +# D=plane.point_data['DisXZ'] +# print(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1]) +# +# DD= D.reshape(len(plane.x_grid), len(plane.y_grid), len(plane.z_grid),D.shape[1], order='F') +# print(DD.shape) +# import matplotlib.pyplot as plt +# #plt.contourf(plane.x_grid, plane.z_grid, DD[:,0,:,1].T, antialiased=False) +# plt.pcolor(plane.x_grid, plane.z_grid, DD[:,0,:,1].T) +# plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py new file mode 100644 index 0000000000..186ab8bdb5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/Hawc2io.py @@ -0,0 +1,343 @@ +# -*- coding: utf-8 -*- +""" +Author: + Bjarne S. Kallesoee + + +Description: + Reads all HAWC2 output data formats, HAWC2 ascii, HAWC2 binary and FLEX + +call ex.: + # creat data file object, call without extension, but with parth + file = ReadHawc2("HAWC2ex/tests") + # if called with ReadOnly = 1 as + file = ReadHawc2("HAWC2ex/tests",ReadOnly=1) + # no channels a stored in memory, otherwise read channels are stored for reuse + + # channels are called by a list + file([0,2,1,1]) => channels 1,3,2,2 + # if empty all channels are returned + file() => all channels as 1,2,3,... + file.t => time vector + +1. version: 19/4-2011 +2. version: 5/11-2015 fixed columns to get description right, fixed time vector (mmpe@dtu.dk) + +Need to be done: + * add error handling for allmost every thing + +""" +import numpy as np +import os + +#from wetb import gtsdf + +# FIXME: numpy doesn't like io.open binary fid in PY27, why is that? As a hack +# workaround, use opent for PY23 compatibility when handling text files, +# and default open for binary + +################################################################################ +################################################################################ +################################################################################ +# Read HAWC2 class +################################################################################ +class ReadHawc2(object): + """ + """ +################################################################################ +# read *.sel file + def _ReadSelFile(self): + """ + Some title + ========== + + Using docstrings formatted according to the reStructuredText specs + can be used for automated documentation generation with for instance + Sphinx: http://sphinx.pocoo.org/. + + Parameters + ---------- + signal : ndarray + some description + + Returns + ------- + output : int + describe variable + """ + + # read *.sel hawc2 output file for result info + if self.FileName.lower().endswith('.sel'): + self.FileName = self.FileName[:-4] + fid = open(self.FileName + '.sel', 'r') + Lines = fid.readlines() + fid.close() + if Lines[0].lower().find('bhawc')>=0: + # --- Find line with scan info + iLine=0 + for i in np.arange(5,10): + if Lines[i].lower().find('scans')>=0: + iLine=i+1 + if iLine==0: + raise Exception('Cannot find the keyword "scans"') + temp = Lines[iLine].split() + self.NrSc = int(temp[0]) + self.NrCh = int(temp[1]) + self.Time = float(temp[2]) + self.Freq = self.NrSc / self.Time + self.t = np.linspace(0, self.Time, self.NrSc + 1)[1:] + # --- Find line with channel info + iLine=0 + for i in np.arange(5,13): + if Lines[i].lower().find('channel')>=0: + iLine=i+1 + if iLine==0: + raise Exception('Cannot find the keyword "Channel"') + + # reads channel info (name, unit and description) + Name = []; Unit = []; Description = []; + for i in range(0, self.NrCh+1): + if (i+iLine)>=len(Lines): + break + line = Lines[i + iLine].strip() + if len(line)==0: + continue + # --- removing number and unit + sp=[sp.strip() for sp in line.split() if len(sp.strip())>0] + num = sp[0] + iNum = line.find(num) + line = line[iNum+len(num)+1:] + unit = sp[-1] + iUnit = line.find(unit) + line = line[:iUnit] + # --- Splitting to find label and description + sp=[sp.strip() for sp in line.split('\t') if len(sp.strip())>0] + if len(sp)!=2: + for nSpaces in np.arange(2,15): + sp=[sp.strip() for sp in line.split(' '*nSpaces) if len(sp.strip())>0] + if len(sp)==2: + break + if len(sp)!=2: + raise Exception('Dont know how to split the input of the sel file into 4 columns') + + Unit.append(unit) + Description.append(sp[0]) + Name.append(sp[1]) + + self.ChInfo = [Name, Unit, Description] + self.FileFormat = 'BHAWC_ASCII' + else: + + # findes general result info (number of scans, number of channels, + # simulation time and file format) + temp = Lines[8].split() + self.NrSc = int(temp[0]) + self.NrCh = int(temp[1]) + self.Time = float(temp[2]) + self.Freq = self.NrSc / self.Time + self.t = np.linspace(0, self.Time, self.NrSc + 1)[1:] + Format = temp[3] + # reads channel info (name, unit and description) + Name = []; Unit = []; Description = []; + for i in range(0, self.NrCh): + temp = str(Lines[i + 12][12:43]); Name.append(temp.strip()) + temp = str(Lines[i + 12][43:54]); Unit.append(temp.strip()) + temp = str(Lines[i + 12][54:-1]); Description.append(temp.strip()) + self.ChInfo = [Name, Unit, Description] + # if binary file format, scaling factors are read + if Format.lower() == 'binary': + self.ScaleFactor = np.zeros(self.NrCh) + self.FileFormat = 'HAWC2_BINARY' + for i in range(0, self.NrCh): + self.ScaleFactor[i] = float(Lines[i + 12 + self.NrCh + 2]) + else: + self.FileFormat = 'HAWC2_ASCII' +################################################################################ +# read sensor file for FLEX format + def _ReadSensorFile(self): + # read sensor file used if results are saved in FLEX format + DirName = os.path.dirname(self.FileName) + try: + fid = opent(DirName + r"\sensor ", 'r') + except IOError: + print("can't finde sensor file for FLEX format") + return + Lines = fid.readlines() + fid.close() + # reads channel info (name, unit and description) + self.NrCh = 0 + Name = [] + Unit = [] + Description = [] + for i in range(2, len(Lines)): + temp = Lines[i] + if not temp.strip(): + break + self.NrCh += 1 + temp = str(Lines[i][38:45]) + Unit.append(temp.strip()) + temp = str(Lines[i][45:53]) + Name.append(temp.strip()) + temp = str(Lines[i][53:]) + Description.append(temp.strip()) + self.ChInfo = [Name, Unit, Description] + # read general info from *.int file + fid = open(self.FileName, 'rb') + fid.seek(4 * 19) + if not np.fromfile(fid, 'int32', 1) == self.NrCh: + print("number of sensors in sensor file and data file are not consisten") + fid.seek(4 * (self.NrCh) + 4, 1) + self.Version = np.fromfile(fid, 'int32',1)[0] + time_start, time_step = np.fromfile(fid, 'f', 2) + self.Freq = 1 / time_step + self.ScaleFactor = np.fromfile(fid, 'f', self.NrCh) + fid.seek(2 * 4 * self.NrCh + 48 * 2) + self.NrSc = int(len(np.fromfile(fid, 'int16')) / self.NrCh) + self.Time = self.NrSc * time_step + self.t = np.arange(0, self.Time, time_step) + time_start + fid.close() +################################################################################ +# init function, load channel and other general result file info + def __init__(self, FileName, ReadOnly=0): + self.FileName = FileName + self.ReadOnly = ReadOnly + self.Iknown = [] # to keep track of what has been read all ready + self.Data = np.zeros(0) + if FileName.lower().endswith('.sel') or os.path.isfile(FileName + ".sel"): + self._ReadSelFile() + elif FileName.lower().endswith('.dat') and os.path.isfile(os.path.splitext(FileName)[0] + ".sel"): + self.FileName = os.path.splitext(FileName)[0] + self._ReadSelFile() + elif FileName.lower().endswith('.int') or FileName.lower().endswith('.res'): + self.FileFormat = 'FLEX' + self._ReadSensorFile() + elif os.path.isfile(self.FileName + ".int"): + self.FileName = self.FileName + ".int" + self.FileFormat = 'FLEX' + self._ReadSensorFile() + elif os.path.isfile(self.FileName + ".res"): + self.FileName = self.FileName + ".res" + self.FileFormat = 'FLEX' + self._ReadSensorFile() + elif FileName.lower().endswith('.hdf5') or os.path.isfile(self.FileName + ".hdf5"): + self.FileFormat = 'GTSDF' + self.ReadGtsdf() + else: + raise Exception("unknown file: " + FileName) +################################################################################ +# Read results in binary format + def ReadBinary(self, ChVec=None): + ChVec = [] if ChVec is None else ChVec + if not ChVec: + ChVec = range(0, self.NrCh) + with open(self.FileName + '.dat', 'rb') as fid: + data = np.zeros((self.NrSc, len(ChVec))) + j = 0 + for i in ChVec: + fid.seek(i * self.NrSc * 2, 0) + data[:, j] = np.fromfile(fid, 'int16', self.NrSc) * self.ScaleFactor[i] + j += 1 + return data +################################################################################ +# Read results in ASCII format + def ReadAscii(self, ChVec=None): + ChVec = [] if ChVec is None else ChVec + if not ChVec: + ChVec = range(0, self.NrCh) + temp = np.loadtxt(self.FileName + '.dat', usecols=ChVec) + return temp.reshape((self.NrSc, len(ChVec))) +################################################################################ +# Read results in FLEX format + def ReadFLEX(self, ChVec=None): + ChVec = [] if ChVec is None else ChVec + if not ChVec: + ChVec = range(1, self.NrCh) + fid = open(self.FileName, 'rb') + fid.seek(2 * 4 * self.NrCh + 48 * 2) + temp = np.fromfile(fid, 'int16') + if self.Version==3: + temp = temp.reshape(self.NrCh, self.NrSc).transpose() + else: + temp = temp.reshape(self.NrSc, self.NrCh) + fid.close() + return np.dot(temp[:, ChVec], np.diag(self.ScaleFactor[ChVec])) +################################################################################ +# Read results in GTSD format + def ReadGtsdf(self): + raise NotImplementedError + #self.t, data, info = gtsdf.load(self.FileName + '.hdf5') + #self.Time = self.t + #self.ChInfo = [['Time'] + info['attribute_names'], + # ['s'] + info['attribute_units'], + # ['Time'] + info['attribute_descriptions']] + #self.NrCh = data.shape[1] + 1 + #self.NrSc = data.shape[0] + #self.Freq = self.NrSc / self.Time + #self.FileFormat = 'GTSDF' + #self.gtsdf_description = info['description'] + #data = np.hstack([self.Time[:,np.newaxis], data]) + #return data +################################################################################ +# One stop call for reading all data formats + def ReadAll(self, ChVec=None): + ChVec = [] if ChVec is None else ChVec + if not ChVec and not self.FileFormat == 'GTSDF': + ChVec = range(0, self.NrCh) + if self.FileFormat == 'HAWC2_BINARY': + return self.ReadBinary(ChVec) + elif self.FileFormat == 'HAWC2_ASCII' or self.FileFormat == 'BHAWC_ASCII': + return self.ReadAscii(ChVec) + elif self.FileFormat == 'GTSDF': + return self.ReadGtsdf() + elif self.FileFormat == 'FLEX': + return self.ReadFLEX(ChVec) + else: + raise Exception('Unknown file format {} for hawc2 out file'.format(self.FileFormat)) + +################################################################################ +# Main read data call, read, save and sort data + def __call__(self, ChVec=None): + ChVec = [] if ChVec is None else ChVec + if not ChVec: + ChVec = range(0, self.NrCh) + elif max(ChVec) >= self.NrCh: + print("to high channel number") + return + # if ReadOnly, read data but no storeing in memory + if self.ReadOnly: + return self.ReadAll(ChVec) + # if not ReadOnly, sort in known and new channels, read new channels + # and return all requested channels + else: + # sort into known channels and channels to be read + I1 = [] + I2 = [] # I1=Channel mapping, I2=Channels to be read + for i in ChVec: + try: + I1.append(self.Iknown.index(i)) + except: + self.Iknown.append(i) + I2.append(i) + I1.append(len(I1)) + # read new channels + if I2: + temp = self.ReadAll(I2) + # add new channels to Data + if self.Data.any(): + self.Data = np.append(self.Data, temp, axis=1) + # if first call, so Daata is empty + else: + self.Data = temp + return self.Data[:, tuple(I1)] + + +################################################################################ +################################################################################ +################################################################################ +# write HAWC2 class, to be implemented +################################################################################ + +if __name__ == '__main__': + res_file = ReadHawc2('structure_wind') + results = res_file.ReadAscii() + channelinfo = res_file.ChInfo diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py new file mode 100644 index 0000000000..f58b7bc5cf --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/__init__.py @@ -0,0 +1,12 @@ +# d = None +# d = dir() +# +# from .htc_file import HTCFile +# from .log_file import LogFile +# from .ae_file import AEFile +# from .at_time_file import AtTimeFile +# from .pc_file import PCFile +# from . import shear_file +# from .st_file import StFile +# +# __all__ = sorted([m for m in set(dir()) - set(d)]) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py new file mode 100644 index 0000000000..2521d47a82 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/ae_file.py @@ -0,0 +1,138 @@ +import os +import numpy as np + + +class AEFile(object): + + """Read and write the HAWC2 AE (aerodynamic blade layout) file + + examples + -------- + >>> aefile = AEFile(r"tests/test_files/NREL_5MW_ae.txt") + >>> aefile.thickness(36) # Interpolated thickness at radius 36 + 23.78048780487805 + >>> aefile.chord(36) # Interpolated chord at radius 36 + 3.673 + >>> aefile.pc_set_nr(36) # pc set number at radius 36 + 1 + >>> ae= AEFile() + ae.add_set(radius=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], + chord=[1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1], + thickness=[100.0, 100.0, 90.0, 80.0, 70.0, 60.0, 50.0, 40.0, 30.0, 20.0, 10.0], + pc_set_id=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]) + >>> str(ae) + 1 r[m] Chord[m] T/C[%] Set no. + 1 11 + 0.00000000000000000e+00 1.10000000000000009e+00 1.00000000000000000e+02 1 + 1.00000000000000006e-01 1.00000000000000000e+00 1.00000000000000000e+02 1 + 2.00000000000000011e-01 9.00000000000000022e-01 9.00000000000000000e+01 1 + 2.99999999999999989e-01 8.00000000000000044e-01 8.00000000000000000e+01 1 + 4.00000000000000022e-01 6.99999999999999956e-01 7.00000000000000000e+01 1 + 5.00000000000000000e-01 5.99999999999999978e-01 6.00000000000000000e+01 1 + 5.99999999999999978e-01 5.00000000000000000e-01 5.00000000000000000e+01 1 + 6.99999999999999956e-01 4.00000000000000022e-01 4.00000000000000000e+01 1 + 8.00000000000000044e-01 2.99999999999999989e-01 3.00000000000000000e+01 1 + 9.00000000000000022e-01 2.00000000000000011e-01 2.00000000000000000e+01 1 + 1.00000000000000000e+00 1.00000000000000006e-01 1.00000000000000000e+01 1 + """ + + cols = ['radius', 'chord', 'relative_thickness', 'setnr'] + + def __init__(self, filename=None): + self.ae_sets = {} + if filename is not None: + self._read_file(filename) + + def _value(self, radius, column, set_nr=1): + ae_data = self.ae_sets[set_nr] + if radius is None: + return ae_data[:, column] + else: + return np.interp(radius, ae_data[:, 0], ae_data[:, column]) + + def chord(self, radius=None, set_nr=1): + return self._value(radius, 1, set_nr) + + def thickness(self, radius=None, set_nr=1): + return self._value(radius, 2, set_nr) + + def radius_ae(self, radius=None, set_nr=1): + radii = self.ae_sets[set_nr][:, 0] + if radius: + return radii[np.argmin(np.abs(radii - radius))] + else: + return radii + + def pc_set_nr(self, radius, set_nr=1): + ae_data = self.ae_sets[set_nr] + index = np.searchsorted(ae_data[:, 0], radius) + index = max(1, index) + # --- Emmanuel's addition + maxRad = np.max(ae_data[:,0]) + index2 = np.argmin(np.abs(ae_data[:, 0]-radius)) + if abs(ae_data[index2,0]-radius)<1e-4*maxRad: + # We are very close to an ae location, we use this set + return ae_data[index2, 3] + # Otherwise we look at index before or after + setnrs = ae_data[index - 1:index + 1, 3] + if setnrs[0] != setnrs[-1]: + print('[WARN] AE file, at radius {}, should return a set between {}. Using first one.'.format(radius,setnrs)) + return setnrs[0] + + def add_set(self, radius, chord, thickness, pc_set_id, set_id=None): + '''This method will add another set to the ae data''' + if set_id is None: + set_id = 1 + while set_id in self.ae_sets.keys(): + set_id += 1 + self.ae_sets[set_id] = np.array([radius, chord, thickness, pc_set_id]).T + return set_id + + def __str__(self): + '''This method will create a string that is formatted like an ae file with the data in this class''' + n_sets = len(self.ae_sets) + retval = str(n_sets) + ' r[m] Chord[m] T/C[%] Set no.\n' + for st_idx, st in self.ae_sets.items(): + retval += str(st_idx) + ' ' + str(len(st)) + '\n' + for line in st: + retval += '%25.17e %25.17e %25.17e %5d\n' % (line[0], line[1], line[2], line[3]) + return retval + + def save(self, filename): + if not os.path.isdir(os.path.dirname(filename)): + # fails if dirname is empty string + if len(os.path.dirname(filename)) > 0: + os.makedirs(os.path.dirname(filename)) + with open(filename, 'w') as fid: + fid.write(str(self)) + + def _read_file(self, filename): + ''' This method will read in the ae data from a HAWC2 ae file''' + with open(filename) as fid: + lines = fid.readlines() + nsets = int(lines[0].split()[0]) + lptr = 1 + self.ae_sets = {} + for _ in range(1, nsets + 1): + set_nr, n_rows = [int(v) for v in lines[lptr].split()[:2]] + lptr += 1 + data = np.array([[float(v) for v in l.split()[:4]] for l in lines[lptr:lptr + n_rows]]) + self.ae_sets[set_nr] = data + lptr += n_rows + + +def main(): + if __name__ == "__main__": + ae = AEFile(os.path.dirname(__file__) + "/tests/test_files/NREL_5MW_ae.txt") + print(ae.radius_ae(36)) + print(ae.thickness()) + print(ae.chord(36)) + print(ae.pc_set_nr(36)) + ae.add_set(radius=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], + chord=[1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1], + thickness=[100.0, 100.0, 90.0, 80.0, 70.0, 60.0, 50.0, 40.0, 30.0, 20.0, 10.0], + pc_set_id=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]) + print(str(ae)) + + +main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py new file mode 100644 index 0000000000..22aa3e40f3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_contents.py @@ -0,0 +1,479 @@ +''' +Created on 20/01/2014 + +@author: MMPE + +See documentation of HTCFile below + +''' +import os +from collections import OrderedDict +import collections + + +class OrderedDict(collections.OrderedDict): + pass + + def __str__(self): + return "\n".join(["%-30s\t %s" % ((str(k) + ":"), str(v)) for k, v in self.items()]) + + +def parse_next_line(lines): + _3to2list = list(lines.pop(0).split(";")) + line, comments, = _3to2list[:1] + [_3to2list[1:]] + comments = ";".join(comments).rstrip() + while lines and lines[0].lstrip().startswith(";"): + comments += "\n%s" % lines.pop(0).rstrip() + return line.strip(), comments + + +def fmt_value(v): + try: + if int(float(v)) == float(v): + return int(float(v)) + return float(v) + except ValueError: + return v.replace("\\", "/") + + +class HTCContents(object): + lines = [] + contents = None + name_ = "" + parent = None + + def __getitem__(self, key): + if isinstance(key, str): + key = key.replace(".", "/") + if "/" in key: + keys = key.split('/') + val = self.contents[keys[0]] + for k in keys[1:]: + val = val[k] + return val + return self.contents[key] + else: + return self.values[key] + + def __getattr__(self, *args, **kwargs): + if args[0] in ['__members__', '__methods__']: + # fix python2 related issue. In py2, dir(self) calls + # __getattr__(('__members__',)), and this call must fail unhandled to work + return object.__getattribute__(self, *args, **kwargs) + try: + return object.__getattribute__(self, *args, **kwargs) + except Exception: + k = args[0] + if k.endswith("__1"): + k = k[:-3] + return self.contents[k] + + def __setattr__(self, *args, **kwargs): + _3to2list1 = list(args) + k, v, = _3to2list1[:1] + _3to2list1[1:] + if k in dir(self): # in ['section', 'filename', 'lines']: + if isinstance(self, HTCLine) and k == 'values': + args = k, list(v) + return object.__setattr__(self, *args, **kwargs) + if isinstance(v, str): + v = [fmt_value(v) for v in v.split()] + if not isinstance(v, HTCContents): + if not isinstance(v, (list, tuple)): + v = [v] + if k in self.contents: + self.contents[k].values = v + return + v = HTCLine(k, v, "") + self.contents[k] = v + v.parent = self + + def __delattr__(self, *args, **kwargs): + k, = args + if k in self: + del self.contents[k] + + def __iter__(self): + # mainbodies must preceed constraints + values = ([v for v in self.contents.values() if v.name_ == 'main_body'] + + [v for v in self.contents.values() if v.name_ != 'main_body']) + return iter(values) + + def __contains__(self, key): + if self.contents is None: + return False + return key in self.contents + + def get(self, section, default=None): + try: + return self[section] + except KeyError: + return default + + def __call__(self, **kwargs): + """Allow accesing one of multiple subsections with same name, e.g. the main body where name=='shaft' + > htc.new_htc_structure.main_body(name='shaft') + + or one of multiple lines with same name, e.g. the section in c2_def where value[0]==3 + > htc.new_htc_structure.main_body.c2_def.sec(v0=3) + """ + lst = [s for s in self.parent if s.name_ == self.name_ and ( + all([k in s and s[k][0] == v for k, v in kwargs.items()]) or + (all([k[0] == 'v' for k in kwargs]) and all([s[int(k[1:])] == v for k, v in kwargs.items()])) + )] + assert len(lst) == 1 + return lst[0] + + def keys(self): + return list(self.contents.keys()) + + def _add_contents(self, contents): + if contents.name_ not in self: + self[contents.name_] = contents + else: + ending = "__2" + while contents.name_ + ending in self: + ending = "__%d" % (1 + float("0%s" % ending.replace("__", ""))) + self[contents.name_ + ending] = contents + contents.parent = self + + def add_section(self, section_name, members={}, section=None, allow_duplicate=False, **kwargs): + if isinstance(section_name, HTCSection): + section = section_name + section_name = section.name_ + if section_name in self and allow_duplicate is False: + return self[section_name] + if section_name == "output": + section = HTCOutputSection(section_name) + elif section_name.startswith("output_at_time"): + section = HTCOutputAtTimeSection(section_name) + elif section is None: + section = HTCSection(section_name) + self._add_contents(section) + kwargs.update(members) + for k, v in kwargs.items(): + section[k] = v + return section + + def delete(self): + keys = [k for (k, v) in self.parent.contents.items() if v == self] + for k in keys: + del self.parent.contents[k] + + def location(self): + if self.parent is None: + return os.path.basename(self.filename) + else: + name = [k for k in self.parent.keys() if self.parent[k] == self][0] + return self.parent.location() + "/" + name + + def compare(self, other, compare_order=False): + my_keys = self.keys() + other_keys = other.keys() + s = "" + while my_keys or other_keys: + if my_keys: + if (my_keys[0] in other_keys): + if compare_order: + other_i = 0 + else: + other_i = other_keys.index(my_keys[0]) + while other_keys[other_i] != my_keys[0]: + s += "\n".join(["+ %s" % l for l in str(other[other_keys.pop(other_i)] + ).strip().split("\n")]) + "\n\n" + + s += self[my_keys.pop(0)].compare(other[other_keys.pop(other_i)]) + + else: + s += "\n".join(["- %s" % l for l in str(self[my_keys.pop(0)]).strip().split("\n")]) + "\n\n" + else: + s += "\n".join(["+ %s" % l for l in str(other[other_keys.pop(0)]).strip().split("\n")]) + "\n\n" + return s + + +class HTCSection(HTCContents): + end_comments = "" + begin_comments = "" + + def __init__(self, name, begin_comments="", end_comments=""): + self.name_ = name.strip() # strip if tabs in name somehow + self.begin_comments = begin_comments.strip(" \t") + self.end_comments = end_comments.strip(" \t") + self.contents = OrderedDict() + self.parent = None + + @property + def section_name(self): + return self.name_ + + @section_name.setter + def section_name(self, value): + self.name_ = value + + def add_line(self, name, values, comments=""): + line = HTCLine(name, values, comments) + self._add_contents(line) + return line + + def __setitem__(self, key, value): + if isinstance(value, HTCContents): + self.contents[key] = value + value.parent = self + elif isinstance(value, (str, int, float)): + self.add_line(key, [value]) + else: + self.add_line(key, value) + + @staticmethod + def from_lines(lines): + line, begin_comments = parse_next_line(lines) + name = line[6:].lower() + if name == "output": + section = HTCOutputSection(name, begin_comments) + elif name.startswith("output_at_time"): + section = HTCOutputAtTimeSection(name, begin_comments) + else: + section = HTCSection(name, begin_comments) + while lines: + if lines[0].strip() == "": + lines.pop(0) + if lines[0].lower().startswith("begin"): + section._add_contents(HTCSection.from_lines(lines)) + elif lines[0].lower().startswith("end"): + line, section.end_comments = parse_next_line(lines) + break + elif lines: + section._add_contents(section.line_from_line(lines)) + else: + raise Exception("Section '%s' has not end" % section.name_) + return section + + def line_from_line(self, lines): + return HTCLine.from_lines(lines) + + def __str__(self, level=0): + s = "%sbegin %s;%s\n" % (" " * level, self.name_, (("", "\t" + self.begin_comments) + [bool(self.begin_comments.strip())]).replace("\t\n", "\n")) + s += "".join([c.__str__(level + 1) for c in self]) + s += "%send %s;%s\n" % (" " * level, self.name_, (("", "\t" + self.end_comments) + [self.end_comments.strip() != ""]).replace("\t\n", "\n")) + return s + + def get_subsection_by_name(self, name, field='name'): + return self.get_section(name, field) + + def get_section(self, name, field='name'): + lst = [s for s in self if field in s and s[field][0] == name] + if len(lst) == 1: + return lst[0] + elif len(lst) == 0: + raise ValueError("subsection with %s='%s' not found" % (field, name)) + else: + raise ValueError("Multiple subsection with %s='%s' not found" % (field, name)) + + def get_element(self, key, value): + """Return subsection where subsection.==value or line where line.values[key]==value""" + if isinstance(key, int): + lst = [s for s in self if s.values[key] == value] + elif isinstance(key, str): + lst = [s for s in self if key in s and s[key][0] == name] + else: + raise ValueError("Key argument must be int or str") + if len(lst) == 1: + return lst[0] + elif len(lst) == 0: + raise ValueError("contents with '%s=%s' not found" % (key, value)) + else: + raise ValueError("Multiple contents with '%s=%s' not found" % (key, value)) + + def copy(self): + copy = HTCSection(name=self.name_, begin_comments=self.begin_comments, end_comments=self.end_comments) + for k, v in self.contents.items(): + copy.contents[k] = v.copy() + return copy + + +class HTCLine(HTCContents): + values = None + comments = "" + + def __init__(self, name, values, comments): + if "__" in name: + name = name[:name.index("__")] + self.name_ = name + self.values = list(values) + self.comments = comments.strip(" \t") + self.parent = None + + def __repr__(self): + return str(self) + + def __str__(self, level=0): + if self.name_ == "": + return "" + return "%s%s%s;%s\n" % (" " * (level), self.name_, + ("", "\t" + self.str_values())[bool(self.values)], + ("", "\t" + self.comments)[bool(self.comments.strip())]) + + def str_values(self): + return " ".join([str(v) for v in self.values]) + + def __getitem__(self, key): + try: + return self.values[key] + except Exception: + raise IndexError("Parameter %s does not exists for %s" % (key + 1, self.location())) + + def __setitem__(self, key, value): + if isinstance(key, int): + self.values[key] = value + else: + raise NotImplementedError + + @staticmethod + def from_lines(lines): + line, end_comments = parse_next_line(lines) + if len(line.split()) > 0: + _3to2list3 = list(line.split()) + name, values, = _3to2list3[:1] + [_3to2list3[1:]] + else: + name = line + values = [] + + values = [fmt_value(v) for v in values] + return HTCLine(name, values, end_comments) + + def compare(self, other): + s = "" + if self.values != other.values: + s += "\n".join(["+ %s" % l for l in str(self).strip().split("\n")]) + "\n" + s += "\n".join(["- %s" % l for l in str(other).strip().split("\n")]) + "\n" + s += "\n" + return s + + def copy(self): + return HTCLine(name=self.name_, values=self.values, comments=self.comments) + + +class HTCOutputSection(HTCSection): + sensors = None + + def __init__(self, name, begin_comments="", end_comments=""): + HTCSection.__init__(self, name, begin_comments=begin_comments, end_comments=end_comments) + self.sensors = [] + + def add_sensor(self, type, sensor, values=None, comment="", nr=None): + values = [] if values is None else values + self._add_sensor(HTCSensor(type, sensor, values, comment), nr) + + def _add_sensor(self, htcSensor, nr=None): + if nr is None: + nr = len(self.sensors) + self.sensors.insert(nr, htcSensor) + htcSensor.parent = self + + def line_from_line(self, lines): + name = lines[0].split()[0].strip() + + if name in ['filename', 'data_format', 'buffer', 'time']: + return HTCLine.from_lines(lines) + else: + return HTCSensor.from_lines(lines) + + def _add_contents(self, contents): + if isinstance(contents, HTCSensor): + self._add_sensor(contents) + else: + return HTCSection._add_contents(self, contents) + + def __str__(self, level=0): + s = "%sbegin %s;%s\n" % (" " * level, self.name_, ("", "\t" + self.begin_comments) + [len(self.begin_comments.strip()) > 0]) + s += "".join([c.__str__(level + 1) for c in self]) + s += "".join([s.__str__(level + 1) for s in self.sensors]) + s += "%send %s;%s\n" % (" " * level, self.name_, ("", "\t" + self.end_comments) + [self.end_comments.strip() != ""]) + return s + + def compare(self, other): + s = HTCContents.compare(self, other) + for s1, s2 in zip(self.sensors, other.sensors): + s += s1.compare(s2) + for s1 in self.sensors[len(other.sensors):]: + s += "\n".join(["- %s" % l for l in str(s1).strip().split("\n")]) + "\n" + for s2 in self.sensors[len(self.sensors):]: + s += "\n".join(["- %s" % l for l in str(s2).strip().split("\n")]) + "\n" + + return s + + +class HTCOutputAtTimeSection(HTCOutputSection): + type = None + time = None + + def __init__(self, name, begin_comments="", end_comments=""): + if len(name.split()) < 3: + raise ValueError('"keyword" and "time" arguments required for output_at_time command:\n%s' % name) + name, self.type, time = name.split() + self.time = float(time) + HTCOutputSection.__init__(self, name, begin_comments=begin_comments, end_comments=end_comments) + + def __str__(self, level=0): + s = "%sbegin %s %s %s;%s\n" % (" " * level, self.name_, self.type, self.time, + ("", "\t" + self.begin_comments)[len(self.begin_comments.strip())]) + s += "".join([c.__str__(level + 1) for c in self]) + s += "".join([s.__str__(level + 1) for s in self.sensors]) + s += "%send %s;%s\n" % (" " * level, self.name_, ("", "\t" + self.end_comments) + [self.end_comments.strip() != ""]) + return s + + +class HTCSensor(HTCLine): + type = "" + sensor = "" + values = [] + + def __init__(self, type, sensor, values, comments): + self.type = type + self.sensor = sensor + self.values = list(values) + self.comments = comments.strip(" \t") + + @staticmethod + def from_lines(lines): + line, comments = parse_next_line(lines) + if len(line.split()) > 2: + _3to2list5 = list(line.split()) + type, sensor, values, = _3to2list5[:2] + [_3to2list5[2:]] + elif len(line.split()) == 2: + type, sensor = line.split() + values = [] + else: + type, sensor, values = "", "", [] + + def fmt(v): + try: + if int(float(v)) == float(v): + return int(float(v)) + return float(v) + except ValueError: + return v + values = [fmt(v) for v in values] + return HTCSensor(type, sensor, values, comments) + + def __str__(self, level=0): + return "%s%s %s%s;%s\n" % (" " * (level), + self.type, + self.sensor, + ("", "\t" + self.str_values())[bool(self.values)], + ("", "\t" + self.comments)[bool(self.comments.strip())]) + + def delete(self): + self.parent.sensors.remove(self) + + def compare(self, other): + s = "" + if self.sensor != other.sensor or self.values != other.values: + s += "\n".join(["+ %s" % l for l in str(self).strip().split("\n")]) + "\n" + s += "\n".join(["- %s" % l for l in str(other).strip().split("\n")]) + "\n" + s += "\n" + return s diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py new file mode 100644 index 0000000000..7275bbac29 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_extensions.py @@ -0,0 +1,143 @@ +''' +Created on 20/01/2014 + +@author: MMPE + +See documentation of HTCFile below + +''' +import os + + + + +class HTCDefaults(object): + + empty_htc = """begin simulation; + time_stop 600; + solvertype 2; (newmark) + begin newmark; + deltat 0.02; + end newmark; + end simulation; + ; + ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- + ; + begin wind ; + density 1.225 ; + wsp 10 ; + tint 1; + horizontal_input 1 ; 0=false, 1=true + windfield_rotations 0 0.0 0.0 ; yaw, tilt, rotation + center_pos0 0 0 -30 ; hub heigth + shear_format 1 0;0=none,1=constant,2=log,3=power,4=linear + turb_format 0 ; 0=none, 1=mann,2=flex + tower_shadow_method 0 ; 0=none, 1=potential flow, 2=jet + end wind; + ; + ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- + ; + ; + begin output; + filename ./tmp; + general time; + end output; + exit;""" + + def add_mann_turbulence(self, L=29.4, ae23=1, Gamma=3.9, seed=1001, high_frq_compensation=True, + filenames=None, + no_grid_points=(16384, 32, 32), box_dimension=(6000, 100, 100), + dont_scale=False, + std_scaling=None): + wind = self.add_section('wind') + wind.turb_format = 1 + mann = wind.add_section('mann') + if 'create_turb_parameters' in mann: + mann.create_turb_parameters.values = [L, ae23, Gamma, seed, int(high_frq_compensation)] + else: + mann.add_line('create_turb_parameters', [L, ae23, Gamma, seed, int(high_frq_compensation)], + "L, alfaeps, gamma, seed, highfrq compensation") + if filenames is None: + + import numpy as np + dxyz = tuple(np.array(box_dimension) / no_grid_points) + from wetb.wind.turbulence import mann_turbulence + filenames = ["./turb/" + mann_turbulence.name_format % + ((L, ae23, Gamma, high_frq_compensation) + no_grid_points + dxyz + (seed, uvw)) + for uvw in ['u', 'v', 'w']] + if isinstance(filenames, str): + filenames = ["./turb/%s_s%04d%s.bin" % (filenames, seed, c) for c in ['u', 'v', 'w']] + for filename, c in zip(filenames, ['u', 'v', 'w']): + setattr(mann, 'filename_%s' % c, filename) + for c, n, dim in zip(['u', 'v', 'w'], no_grid_points, box_dimension): + setattr(mann, 'box_dim_%s' % c, "%d %.4f" % (n, dim / (n))) + if dont_scale: + mann.dont_scale = 1 + else: + try: + del mann.dont_scale + except KeyError: + pass + if std_scaling is not None: + mann.std_scaling = "%f %f %f" % std_scaling + else: + try: + del mann.std_scaling + except KeyError: + pass + + def add_turb_export(self, filename="export_%s.turb", samplefrq=None): + exp = self.wind.add_section('turb_export', allow_duplicate=True) + for uvw in 'uvw': + exp.add_line('filename_%s' % uvw, [filename % uvw]) + sf = samplefrq or max(1, int(self.wind.mann.box_dim_u[1] / (self.wind.wsp[0] * self.deltat()))) + exp.samplefrq = sf + if "time" in self.output: + exp.time_start = self.output.time[0] + else: + exp.time_start = 0 + exp.nsteps = (self.simulation.time_stop[0] - exp.time_start[0]) / self.deltat() + for vw in 'vw': + exp.add_line('box_dim_%s' % vw, self.wind.mann['box_dim_%s' % vw].values) + + def import_dtu_we_controller_input(self, filename): + dtu_we_controller = [dll for dll in self.dll if dll.name[0] == 'dtu_we_controller'][0] + with open(filename) as fid: + lines = fid.readlines() + K_r1 = float(lines[1].replace("K = ", '').replace("[Nm/(rad/s)^2]", '')) + Kp_r2 = float(lines[4].replace("Kp = ", '').replace("[Nm/(rad/s)]", '')) + Ki_r2 = float(lines[5].replace("Ki = ", '').replace("[Nm/rad]", '')) + Kp_r3 = float(lines[7].replace("Kp = ", '').replace("[rad/(rad/s)]", '')) + Ki_r3 = float(lines[8].replace("Ki = ", '').replace("[rad/rad]", '')) + KK = lines[9].split("]") + KK1 = float(KK[0].replace("K1 = ", '').replace("[deg", '')) + KK2 = float(KK[1].replace(", K2 = ", '').replace("[deg^2", '')) + cs = dtu_we_controller.init + cs.constant__11.values[1] = "%.6E" % K_r1 + cs.constant__12.values[1] = "%.6E" % Kp_r2 + cs.constant__13.values[1] = "%.6E" % Ki_r2 + cs.constant__16.values[1] = "%.6E" % Kp_r3 + cs.constant__17.values[1] = "%.6E" % Ki_r3 + cs.constant__21.values[1] = "%.6E" % KK1 + cs.constant__22.values[1] = "%.6E" % KK2 + + def add_hydro(self, mudlevel, mwl, gravity=9.81, rho=1027): + wp = self.add_section("hydro").add_section('water_properties') + wp.mudlevel = mudlevel + wp.mwl = mwl + wp.gravity = gravity + wp.rho = rho + + +class HTCExtensions(object): + def get_shear(self): + shear_type, parameter = self.wind.shear_format.values + z0 = -self.wind.center_pos0[2] + wsp = self.wind.wsp[0] + if shear_type == 1: # constant + return lambda z: wsp + elif shear_type == 3: + from wetb.wind.shear import power_shear + return power_shear(parameter, z0, wsp) + else: + raise NotImplementedError diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py new file mode 100644 index 0000000000..c2b859bcff --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file.py @@ -0,0 +1,600 @@ +''' +Created on 20/01/2014 + +See documentation of HTCFile below + +''' +# from wetb.utils.process_exec import pexec +# from wetb.hawc2.hawc2_pbs_file import HAWC2PBSFile +# import jinja2 +# from wetb.utils.cluster_tools.os_path import fixcase, abspath, pjoin + +from collections import OrderedDict +from .htc_contents import HTCContents, HTCSection, HTCLine +from .htc_extensions import HTCDefaults, HTCExtensions +import os + +# --- cluster_tools/os_path +def fmt_path(path): + return path.lower().replace("\\", "/") + +def repl(path): + return path.replace("\\", "/") + +def abspath(path): + return repl(os.path.abspath(path)) + +def relpath(path, start=None): + return repl(os.path.relpath(path, start)) + +def realpath(path): + return repl(os.path.realpath(path)) + +def pjoin(*path): + return repl(os.path.join(*path)) + +def fixcase(path): + path = realpath(str(path)).replace("\\", "/") + p, rest = os.path.splitdrive(path) + p += "/" + for f in rest[1:].split("/"): + f_lst = [f_ for f_ in os.listdir(p) if f_.lower() == f.lower()] + if len(f_lst) > 1: + # use the case sensitive match + f_lst = [f_ for f_ in f_lst if f_ == f] + if len(f_lst) == 0: + raise IOError("'%s' not found in '%s'" % (f, p)) + # Use matched folder + p = pjoin(p, f_lst[0]) + return p +# --- end os_path + +class HTCFile(HTCContents, HTCDefaults, HTCExtensions): + """Wrapper for HTC files + + Examples: + --------- + >>> htcfile = HTCFile('htc/test.htc') + >>> htcfile.wind.wsp = 10 + >>> htcfile.save() + + #--------------------------------------------- + >>> htc = HTCFile(filename=None, modelpath=None) # create minimal htcfile + + #Add section + >>> htc.add_section('hydro') + + #Add subsection + >>> htc.hydro.add_section("hydro_element") + + #Set values + >>> htc.hydro.hydro_element.wave_breaking = [2, 6.28, 1] # or + >>> htc.hydro.hydro_element.wave_breaking = 2, 6.28, 1 + + #Set comments + >>> htc.hydro.hydro_element.wave_breaking.comments = "This is a comment" + + #Access section + >>> hydro_element = htc.hydro.hydro_element #or + >>> hydro_element = htc['hydro.hydro_element'] # or + >>> hydro_element = htc['hydro/hydro_element'] # or + >>> print (hydro_element.wave_breaking) #string represenation + wave_breaking 2 6.28 1; This is a comment + >>> print (hydro_element.wave_breaking.name_) # command + wave_breaking + >>> print (hydro_element.wave_breaking.values) # values + [2, 6.28, 1 + >>> print (hydro_element.wave_breaking.comments) # comments + This is a comment + >>> print (hydro_element.wave_breaking[0]) # first value + 2 + + #Delete element + htc.simulation.logfile.delete() + #or + del htc.simulation.logfile #Delete logfile line. Raise keyerror if not exists + + """ + + filename = None + jinja_tags = {} + htc_inputfiles = [] + level = 0 + modelpath = "../" + initial_comments = None + + def __init__(self, filename=None, modelpath=None, jinja_tags={}): + """ + Parameters + --------- + filename : str + Absolute filename of htc file + modelpath : str + Model path relative to htc file + """ + if filename is not None: + try: + filename = fixcase(abspath(filename)) + with self.open(str(filename)): + pass + except Exception: + pass + + self.filename = filename + + self.jinja_tags = jinja_tags + self.modelpath = modelpath or self.auto_detect_modelpath() + + if filename and self.modelpath != "unknown" and not os.path.isabs(self.modelpath): + drive, p = os.path.splitdrive(os.path.join(os.path.dirname(str(self.filename)), self.modelpath)) + self.modelpath = os.path.join(drive, os.path.splitdrive(os.path.realpath(p))[1]).replace("\\", "/") + if self.modelpath != 'unknown' and self.modelpath[-1] != '/': + self.modelpath += "/" + + self.load() + + def auto_detect_modelpath(self): + if self.filename is None: + return "../" + + #print (["../"*i for i in range(3)]) + import numpy as np + input_files = HTCFile(self.filename, 'unknown').input_files() + if len(input_files) == 1: # only input file is the htc file + return "../" + rel_input_files = [f for f in input_files if not os.path.isabs(f)] + + def isfile_case_insensitive(f): + try: + f = fixcase(f) # raises exception if not existing + return os.path.isfile(f) + except IOError: + return False + found = ([np.sum([isfile_case_insensitive(os.path.join(os.path.dirname(self.filename), "../" * i, f)) + for f in rel_input_files]) for i in range(4)]) + + if max(found) > 0: + relpath = "../" * np.argmax(found) + return abspath(pjoin(os.path.dirname(self.filename), relpath)) + else: + print("Modelpath cannot be autodetected for '%s'.\nInput files not found near htc file" % self.filename) + return 'unknown' + + def load(self): + self.contents = OrderedDict() + self.initial_comments = [] + self.htc_inputfiles = [] + if self.filename is None: + lines = self.empty_htc.split("\n") + else: + lines = self.readlines(self.filename) + + lines = [l.strip() for l in lines] + + #lines = copy(self.lines) + while lines: + if lines[0].startswith(";"): + self.initial_comments.append(lines.pop(0).strip() + "\n") + elif lines[0].lower().startswith("begin"): + self._add_contents(HTCSection.from_lines(lines)) + else: + line = HTCLine.from_lines(lines) + if line.name_ == "exit": + break + self._add_contents(line) + + def readfilelines(self, filename): + with self.open(self.unix_path(os.path.abspath(filename.replace('\\', '/'))), encoding='cp1252') as fid: + txt = fid.read() + if txt[:10].encode().startswith(b'\xc3\xaf\xc2\xbb\xc2\xbf'): + txt = txt[3:] + if self.jinja_tags: + template = jinja2.Template(txt) + txt = template.render(**self.jinja_tags) + return txt.replace("\r", "").split("\n") + + def readlines(self, filename): + if filename != self.filename: # self.filename may be changed by set_name/save. Added it when needed instead + self.htc_inputfiles.append(filename) + htc_lines = [] + lines = self.readfilelines(filename) + for l in lines: + if l.lower().lstrip().startswith('continue_in_file'): + filename = l.lstrip().split(";")[0][len("continue_in_file"):].strip().lower() + + if self.modelpath == 'unknown': + p = os.path.dirname(self.filename) + try: + lu = [os.path.isfile(os.path.abspath(os.path.join(p, "../" * i, filename.replace("\\", "/")))) + for i in range(4)].index(True) + filename = os.path.join(p, "../" * lu, filename) + except ValueError: + print('[FAIL] Cannot continue in file: {}'.format(filename)) + filename = None + else: + filename = os.path.join(self.modelpath, filename) + if not os.path.isfile(filename): + print('[FAIL] Cannot continue in file: {}'.format(filename)) + filename=None + if filename is not None: + #print('[INFO] Continuing in file: {}'.format(filename)) + for line in self.readlines(filename): + if line.lstrip().lower().startswith('exit'): + break + htc_lines.append(line) + else: + htc_lines.append(l) + return htc_lines + + def __setitem__(self, key, value): + self.contents[key] = value + + def __str__(self): + self.contents # load + return "".join(self.initial_comments + [c.__str__(1) for c in self] + ["exit;"]) + + def save(self, filename=None): + """Saves the htc object to an htc file. + + Args: + filename (str, optional): Specifies the filename of the htc file to be saved. + If the value is none, the filename attribute of the object will be used as the filename. + Defaults to None. + """ + self.contents # load if not loaded + if filename is None: + filename = self.filename + else: + self.filename = filename + # exist_ok does not exist in Python27 + if not os.path.exists(os.path.dirname(filename)) and os.path.dirname(filename) != "": + os.makedirs(os.path.dirname(filename)) # , exist_ok=True) + with self.open(filename, 'w', encoding='cp1252') as fid: + fid.write(str(self)) + + def set_name(self, name, subfolder=''): + """Sets the base filename of the simulation files. + + Args: + name (str): Specifies name of the log file, dat file (for animation), hdf5 file (for visualization) and htc file. + subfolder (str, optional): Specifies the name of a subfolder to place the files in. + If the value is an empty string, no subfolders will be created. + Defaults to ''. + + Returns: + None + """ + # if os.path.isabs(folder) is False and os.path.relpath(folder).startswith("htc" + os.path.sep): + self.contents # load if not loaded + + def fmt_folder(folder, subfolder): return "./" + \ + os.path.relpath(os.path.join(folder, subfolder)).replace("\\", "/") + + self.filename = os.path.abspath(os.path.join(self.modelpath, fmt_folder( + 'htc', subfolder), "%s.htc" % name)).replace("\\", "/") + if 'simulation' in self and 'logfile' in self.simulation: + self.simulation.logfile = os.path.join(fmt_folder('log', subfolder), "%s.log" % name).replace("\\", "/") + if 'animation' in self.simulation: + self.simulation.animation = os.path.join(fmt_folder( + 'animation', subfolder), "%s.dat" % name).replace("\\", "/") + if 'visualization' in self.simulation: + f = os.path.join(fmt_folder('visualization', subfolder), "%s.hdf5" % name).replace("\\", "/") + self.simulation.visualization[0] = f + elif 'test_structure' in self and 'logfile' in self.test_structure: # hawc2aero + self.test_structure.logfile = os.path.join(fmt_folder('log', subfolder), "%s.log" % name).replace("\\", "/") + if 'output' in self: + self.output.filename = os.path.join(fmt_folder('res', subfolder), "%s" % name).replace("\\", "/") + + def set_time(self, start=None, stop=None, step=None): + self.contents # load if not loaded + if stop is not None: + self.simulation.time_stop = stop + else: + stop = self.simulation.time_stop[0] + if step is not None: + self.simulation.newmark.deltat = step + if start is not None: + self.output.time = start, stop + if "wind" in self: # and self.wind.turb_format[0] > 0: + self.wind.scale_time_start = start + + def expected_simulation_time(self): + return 600 + + def pbs_file(self, hawc2_path, hawc2_cmd, queue='workq', walltime=None, + input_files=None, output_files=None, copy_turb=(True, True)): + walltime = walltime or self.expected_simulation_time() * 2 + if len(copy_turb) == 1: + copy_turb_fwd, copy_turb_back = copy_turb, copy_turb + else: + copy_turb_fwd, copy_turb_back = copy_turb + + input_files = input_files or self.input_files() + if copy_turb_fwd: + input_files += [f for f in self.turbulence_files() if os.path.isfile(f)] + + output_files = output_files or self.output_files() + if copy_turb_back: + output_files += self.turbulence_files() + + return HAWC2PBSFile(hawc2_path, hawc2_cmd, self.filename, self.modelpath, + input_files, output_files, + queue, walltime) + + def input_files(self): + self.contents # load if not loaded + if self.modelpath == "unknown": + files = [str(f).replace("\\", "/") for f in [self.filename] + self.htc_inputfiles] + else: + files = [os.path.abspath(str(f)).replace("\\", "/") for f in [self.filename] + self.htc_inputfiles] + if 'new_htc_structure' in self: + for mb in [self.new_htc_structure[mb] + for mb in self.new_htc_structure.keys() if mb.startswith('main_body')]: + if "timoschenko_input" in mb: + files.append(mb.timoschenko_input.filename[0]) + files.append(mb.get('external_bladedata_dll', [None, None, None])[2]) + if 'aero' in self: + files.append(self.aero.ae_filename[0]) + files.append(self.aero.pc_filename[0]) + files.append(self.aero.get('external_bladedata_dll', [None, None, None])[2]) + files.append(self.aero.get('output_profile_coef_filename', [None])[0]) + if 'dynstall_ateflap' in self.aero: + files.append(self.aero.dynstall_ateflap.get('flap', [None] * 3)[2]) + if 'bemwake_method' in self.aero: + files.append(self.aero.bemwake_method.get('a-ct-filename', [None] * 3)[0]) + for dll in [self.dll[dll] for dll in self.get('dll', {}).keys() if 'filename' in self.dll[dll]]: + files.append(dll.filename[0]) + f, ext = os.path.splitext(dll.filename[0]) + files.append(f + "_64" + ext) + if 'wind' in self: + files.append(self.wind.get('user_defined_shear', [None])[0]) + files.append(self.wind.get('user_defined_shear_turbulence', [None])[0]) + files.append(self.wind.get('met_mast_wind', [None])[0]) + if 'wakes' in self: + files.append(self.wind.get('use_specific_deficit_file', [None])[0]) + files.append(self.wind.get('write_ct_cq_file', [None])[0]) + files.append(self.wind.get('write_final_deficits', [None])[0]) + if 'hydro' in self: + if 'water_properties' in self.hydro: + files.append(self.hydro.water_properties.get('water_kinematics_dll', [None])[0]) + files.append(self.hydro.water_properties.get('water_kinematics_dll', [None, None])[1]) + if 'soil' in self: + if 'soil_element' in self.soil: + files.append(self.soil.soil_element.get('datafile', [None])[0]) + try: + dtu_we_controller = self.dll.get_subsection_by_name('dtu_we_controller') + theta_min = dtu_we_controller.init.constant__5[1] + if theta_min >= 90: + files.append(os.path.join(os.path.dirname( + dtu_we_controller.filename[0]), "wpdata.%d" % theta_min).replace("\\", "/")) + except Exception: + pass + + try: + files.append(self.force.dll.dll[0]) + except Exception: + pass + + def fix_path_case(f): + if os.path.isabs(f): + return self.unix_path(f) + elif self.modelpath != "unknown": + try: + return "./" + os.path.relpath(self.unix_path(os.path.join(self.modelpath, f)), + self.modelpath).replace("\\", "/") + except IOError: + return f + else: + return f + return [fix_path_case(f) for f in set(files) if f] + + def output_files(self): + self.contents # load if not loaded + files = [] + for k, index in [('simulation/logfile', 0), + ('simulation/animation', 0), + ('simulation/visualization', 0), + ('new_htc_structure/beam_output_file_name', 0), + ('new_htc_structure/body_output_file_name', 0), + ('new_htc_structure/struct_inertia_output_file_name', 0), + ('new_htc_structure/body_eigenanalysis_file_name', 0), + ('new_htc_structure/constraint_output_file_name', 0), + ('wind/turb_export/filename_u', 0), + ('wind/turb_export/filename_v', 0), + ('wind/turb_export/filename_w', 0)]: + line = self.get(k) + if line: + files.append(line[index]) + if 'new_htc_structure' in self: + if 'system_eigenanalysis' in self.new_htc_structure: + f = self.new_htc_structure.system_eigenanalysis[0] + files.append(f) + files.append(os.path.join(os.path.dirname(f), 'mode*.dat').replace("\\", "/")) + if 'structure_eigenanalysis_file_name' in self.new_htc_structure: + f = self.new_htc_structure.structure_eigenanalysis_file_name[0] + files.append(f) + files.append(os.path.join(os.path.dirname(f), 'mode*.dat').replace("\\", "/")) + files.extend(self.res_file_lst()) + + for key in [k for k in self.contents.keys() if k.startswith("output_at_time")]: + files.append(self[key]['filename'][0] + ".dat") + return [f.lower() for f in files if f] + + def turbulence_files(self): + self.contents # load if not loaded + if 'wind' not in self.contents.keys() or self.wind.turb_format[0] == 0: + return [] + elif self.wind.turb_format[0] == 1: + files = [self.get('wind.mann.filename_%s' % comp, [None])[0] for comp in ['u', 'v', 'w']] + elif self.wind.turb_format[0] == 2: + files = [self.get('wind.flex.filename_%s' % comp, [None])[0] for comp in ['u', 'v', 'w']] + return [f for f in files if f] + + def res_file_lst(self): + self.contents # load if not loaded + res = [] + for output in [self[k] for k in self.keys() + if self[k].name_.startswith("output") and not self[k].name_.startswith("output_at_time")]: + dataformat = output.get('data_format', 'hawc_ascii') + res_filename = output.filename[0] + if dataformat[0] == "gtsdf" or dataformat[0] == "gtsdf64": + res.append(res_filename + ".hdf5") + elif dataformat[0] == "flex_int": + res.extend([res_filename + ".int", os.path.join(os.path.dirname(res_filename), 'sensor')]) + else: + res.extend([res_filename + ".sel", res_filename + ".dat"]) + return res + + def _simulate(self, exe, skip_if_up_to_date=False): + self.contents # load if not loaded + if skip_if_up_to_date: + from os.path import isfile, getmtime, isabs + res_file = os.path.join(self.modelpath, self.res_file_lst()[0]) + htc_file = os.path.join(self.modelpath, self.filename) + if isabs(exe): + exe_file = exe + else: + exe_file = os.path.join(self.modelpath, exe) + #print (from_unix(getmtime(res_file)), from_unix(getmtime(htc_file))) + if (isfile(htc_file) and isfile(res_file) and isfile(exe_file) and + str(HTCFile(htc_file)) == str(self) and + getmtime(res_file) > getmtime(htc_file) and getmtime(res_file) > getmtime(exe_file)): + if "".join(self.readfilelines(htc_file)) == str(self): + return + + self.save() + htcfile = os.path.relpath(self.filename, self.modelpath) + assert any([os.path.isfile(os.path.join(f, exe)) for f in [''] + os.environ['PATH'].split(";")]), exe + return pexec([exe, htcfile], self.modelpath) + + def simulate(self, exe, skip_if_up_to_date=False): + errorcode, stdout, stderr, cmd = self._simulate(exe, skip_if_up_to_date) + if ('simulation' in self.keys() and "logfile" in self.simulation and + os.path.isfile(os.path.join(self.modelpath, self.simulation.logfile[0]))): + with self.open(os.path.join(self.modelpath, self.simulation.logfile[0])) as fid: + log = fid.read() + else: + log = "%s\n%s" % (str(stdout), str(stderr)) + + if errorcode or 'Elapsed time' not in log: + log_lines = log.split("\n") + error_lines = [i for i, l in enumerate(log_lines) if 'error' in l.lower()] + if error_lines: + import numpy as np + line_i = np.r_[np.array([error_lines + i for i in np.arange(-3, 4)]).flatten(), + np.arange(-5, 0) + len(log_lines)] + line_i = sorted(np.unique(np.maximum(np.minimum(line_i, len(log_lines) - 1), 0))) + + lines = ["%04d %s" % (i, log_lines[i]) for i in line_i] + for jump in np.where(np.diff(line_i) > 1)[0]: + lines.insert(jump, "...") + + error_log = "\n".join(lines) + else: + error_log = log + raise Exception("\nError code: %s\nstdout:\n%s\n--------------\nstderr:\n%s\n--------------\nlog:\n%s\n--------------\ncmd:\n%s" % + (errorcode, str(stdout), str(stderr), error_log, cmd)) + return str(stdout) + str(stderr), log + + def simulate_hawc2stab2(self, exe): + errorcode, stdout, stderr, cmd = self._simulate(exe, skip_if_up_to_date=False) + + if errorcode: + raise Exception("\nstdout:\n%s\n--------------\nstderr:\n%s\n--------------\ncmd:\n%s" % + (str(stdout), str(stderr), cmd)) + return str(stdout) + str(stderr) + + def deltat(self): + return self.simulation.newmark.deltat[0] + + def compare(self, other): + if isinstance(other, str): + other = HTCFile(other) + return HTCContents.compare(self, other) + + @property + def open(self): + return open + + def unix_path(self, filename): + filename = os.path.realpath(str(filename)).replace("\\", "/") + ufn, rest = os.path.splitdrive(filename) + ufn += "/" + for f in rest[1:].split("/"): + f_lst = [f_ for f_ in os.listdir(ufn) if f_.lower() == f.lower()] + if len(f_lst) > 1: + # use the case sensitive match + f_lst = [f_ for f_ in f_lst if f_ == f] + if len(f_lst) == 0: + raise IOError("'%s' not found in '%s'" % (f, ufn)) + else: # one match found + ufn = os.path.join(ufn, f_lst[0]) + return ufn.replace("\\", "/") + + +# +# def get_body(self, name): +# lst = [b for b in self.new_htc_structure if b.name_=="main_body" and b.name[0]==name] +# if len(lst)==1: +# return lst[0] +# else: +# if len(lst)==0: +# raise ValueError("Body '%s' not found"%name) +# else: +# raise NotImplementedError() +# + +class H2aeroHTCFile(HTCFile): + def __init__(self, filename=None, modelpath=None): + HTCFile.__init__(self, filename=filename, modelpath=modelpath) + + @property + def simulation(self): + return self.test_structure + + def set_time(self, start=None, stop=None, step=None): + if stop is not None: + self.test_structure.time_stop = stop + else: + stop = self.simulation.time_stop[0] + if step is not None: + self.test_structure.deltat = step + if start is not None: + self.output.time = start, stop + if "wind" in self and self.wind.turb_format[0] > 0: + self.wind.scale_time_start = start + + +class SSH_HTCFile(HTCFile): + def __init__(self, ssh, filename=None, modelpath=None): + object.__setattr__(self, 'ssh', ssh) + HTCFile.__init__(self, filename=filename, modelpath=modelpath) + + @property + def open(self): + return self.ssh.open + + def unix_path(self, filename): + rel_filename = os.path.relpath(filename, self.modelpath).replace("\\", "/") + _, out, _ = self.ssh.execute("find -ipath ./%s" % rel_filename, cwd=self.modelpath) + out = out.strip() + if out == "": + raise IOError("'%s' not found in '%s'" % (rel_filename, self.modelpath)) + elif "\n" in out: + raise IOError("Multiple '%s' found in '%s' (due to case senitivity)" % (rel_filename, self.modelpath)) + else: + drive, path = os.path.splitdrive(os.path.join(self.modelpath, out)) + path = os.path.realpath(path).replace("\\", "/") + return os.path.join(drive, os.path.splitdrive(path)[1]) + + +if "__main__" == __name__: + f = HTCFile(r"C:/Work/BAR-Local/Hawc2ToBeamDyn/sim.htc", ".") + print(f.input_files()) +# f.save(r"C:\mmpe\HAWC2\models\DTU10MWRef6.0\htc\DTU_10MW_RWT_power_curve.htc") +# +# f = HTCFile(r"C:\mmpe\HAWC2\models\DTU10MWRef6.0\htc\DTU_10MW_RWT.htc", "../") +# f.set_time = 0, 1, .1 +# print(f.simulate(r"C:\mmpe\HAWC2\bin\HAWC2_12.8\hawc2mb.exe")) +# +# f.save(r"C:\mmpe\HAWC2\models\DTU10MWRef6.0\htc\DTU_10MW_RWT.htc") diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py new file mode 100644 index 0000000000..990f52bb74 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/htc_file_set.py @@ -0,0 +1,55 @@ +import glob +import os +import copy +from wetb.hawc2.hawc2_pbs_file import JESS_WINE32_HAWC2MB +from wetb.hawc2.htc_file import HTCFile +from wetb.utils.cluster_tools.pbsfile import PBSMultiRunner + + +class HTCFileSet(): + def __init__(self, model_path, htc_lst="**/*.htc"): + self.model_path = model_path + + if not isinstance(htc_lst, list): + htc_lst = [htc_lst] + + self.htc_files = [] + for htc_path in htc_lst: + if os.path.isfile(htc_path): + self.htc_files.append(htc_path) + else: + if not os.path.isabs(htc_path): + htc_path = os.path.join(model_path, htc_path) + for filename in glob.iglob(htc_path, recursive=True): + self.htc_files.append(filename) + + def pbs_files(self, hawc2_path, hawc2_cmd, queue='workq', walltime=None, + input_files=None, output_files=None, copy_turb=(True, True)): + + return (HTCFile(htc).pbs_file(hawc2_path, hawc2_cmd, queue=queue, walltime=walltime, + input_files=copy.copy(input_files), + output_files=copy.copy(output_files), + copy_turb=copy_turb) for htc in self.htc_files) + + def save_pbs_files(self, hawc2_path=None, hawc2_cmd=JESS_WINE32_HAWC2MB, queue='workq', walltime=None, + input_files=None, output_files=None, copy_turb=(True, True)): + for pbs in self.pbs_files(hawc2_path, hawc2_cmd, queue=queue, walltime=walltime, + input_files=input_files, output_files=output_files, + copy_turb=copy_turb): + pbs.save(self.model_path) + + +if __name__ == '__main__': + #model_path = r'R:\HAWC2_tests\v12.6_mmpe3\win32\simple1' + model_path = "w:/simple1" + pbs_files = HTCFileSet(model_path).pbs_files( + hawc2_path=r"R:\HAWC2_tests\v12.6_mmpe3\hawc2\win32", hawc2_cmd=JESS_WINE32_HAWC2MB, input_files=['data/*']) + import pandas as pd + time_overview = pd.read_excel( + r'C:\mmpe\programming\Fortran\HAWC2_git\HAWC2\pytest_hawc2\release_tests\Time_overview.xlsx') + for pbs in pbs_files: + f = pbs.filename + + pbs.walltime = time_overview.loc[f[:-3].replace("pbs_in/", 'simple1/')]['mean'] * 24 * 3600 + pbs.save(model_path) + PBSMultiRunner(model_path, nodes=1, ppn=10).save() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py new file mode 100644 index 0000000000..83e0a1baca --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/pc_file.py @@ -0,0 +1,163 @@ +''' +Created on 24/04/2014 + +@author: MMPE +''' + +import os +import numpy as np + +class PCFile(object): + """Read HAWC2 PC (profile coefficients) file + + examples + -------- + >>> pcfile = PCFile("tests/test_files/NREL_5MW_pc.txt") + >>> pcfile.CL(21,10) # CL for thickness 21% and AOA=10deg + 1.358 + >>> pcfile.CD(21,10) # CD for thickness 21% and AOA=10deg + 0.0255 + >>> pcfile.CM(21,10) # CM for thickness 21% and AOA=10deg + -0.1103 + """ + def __init__(self, filename=None): + self.pc_sets = {} + if filename is not None: + with open (filename) as fid: + lines = fid.readlines() + self._parse_lines(lines) + self.filename = filename + self.fmt = ' 19.015e' + + def _parse_lines(self, lines): + """Read HAWC2 PC file (profile coefficient file). + """ + nsets = int(lines[0].split()[0]) + lptr = 1 + for nset in range(1, nsets + 1): + nprofiles = int(lines[lptr].split()[0]) + lptr += 1 + #assert nprofiles >= 2 + thicknesses = [] + profiles = [] + for profile_nr in range(nprofiles): + profile_nr, n_rows, thickness = lines[lptr ].split()[:3] + profile_nr, n_rows, thickness = int(profile_nr), int(n_rows), float(thickness) + lptr += 1 + data = np.array([[float(v) for v in l.split()[:4]] for l in lines[lptr:lptr + n_rows]]) + thicknesses.append(thickness) + profiles.append(data) + lptr += n_rows + self.pc_sets[nset] = (np.array(thicknesses), profiles) + + def _Cxxx(self, thickness, alpha, column, pc_set_nr=1): + thicknesses, profiles = self.pc_sets[pc_set_nr] + index = np.searchsorted(thicknesses, thickness) + if index == 0: + index = 1 + + Cx0, Cx1 = profiles[index - 1:index + 1] + Cx0 = np.interp(alpha, Cx0[:, 0], Cx0[:, column]) + Cx1 = np.interp(alpha, Cx1[:, 0], Cx1[:, column]) + th0, th1 = thicknesses[index - 1:index + 1] + return Cx0 + (Cx1 - Cx0) * (thickness - th0) / (th1 - th0) + + def _CxxxH2(self, thickness, alpha, column, pc_set_nr=1): + thicknesses, profiles = self.pc_sets[pc_set_nr] + index = np.searchsorted(thicknesses, thickness) + if index == 0: + index = 1 + + Cx0, Cx1 = profiles[index - 1:index + 1] + + Cx0 = np.interp(np.arange(360), Cx0[:,0]+180, Cx0[:,column]) + Cx1 = np.interp(np.arange(360), Cx1[:,0]+180, Cx1[:,column]) + #Cx0 = np.interp(alpha, Cx0[:, 0], Cx0[:, column]) + #Cx1 = np.interp(alpha, Cx1[:, 0], Cx1[:, column]) + th0, th1 = thicknesses[index - 1:index + 1] + cx = Cx0 + (Cx1 - Cx0) * (thickness - th0) / (th1 - th0) + return np.interp(alpha+180, np.arange(360), cx) + + def CL(self, thickness, alpha, pc_set_nr=1): + """Lift coefficient + + Parameters + --------- + thickness : float + thickness [5] + alpha : float + Angle of attack [deg] + pc_set_nr : int optional + pc set number, default is 1, normally obtained from ae-file + + Returns + ------- + Lift coefficient : float + """ + return self._Cxxx(thickness, alpha, 1, pc_set_nr) + + def CL_H2(self, thickness, alpha, pc_set_nr=1): + return self._CxxxH2(thickness, alpha, 1, pc_set_nr) + + def CD(self, thickness, alpha, pc_set_nr=1): + """Drag coefficient + + Parameters + --------- + radius : float + radius [m] + alpha : float + Angle of attack [deg] + pc_set_nr : int optional + pc set number, default is 1, normally obtained from ae-file + + Returns + ------- + Drag coefficient : float + """ + return self._Cxxx(thickness, alpha, 2, pc_set_nr) + + def CM(self, thickness, alpha, pc_set_nr=1): + return self._Cxxx(thickness, alpha, 3, pc_set_nr) + + def __str__(self, comments=None): + """This method will create a string that is formatted like a pc file + with the data in this class. + """ + + if comments is None: + comments = {} + + cols = ['Angle of Attac', 'cl', 'cd', 'cm'] + linefmt = ' '.join(['{%i:%s}' % (i, self.fmt) for i in range(len(cols))]) + + n_sets = len(self.pc_sets) + retval = str(n_sets) + '\n' + for idx_pc, (set_tcs, set_pcs) in self.pc_sets.items(): + retval += str(len(set_tcs)) + '\n' + for i, (tc, pc) in enumerate(zip(set_tcs, set_pcs)): + nr = pc.shape[0] + retval += '%i %i %1.08f\n' % (i+1, nr, tc) + for line in pc: + retval += linefmt.format(*line) + '\n' + return retval + + def save(self, filename): + if not os.path.isdir(os.path.dirname(filename)): + # fails if dirname is empty string + if len(os.path.dirname(filename)) > 0: + os.makedirs(os.path.dirname(filename)) + with open(filename, 'w') as fid: + fid.write(str(self)) + self.filename = filename + + +if __name__ == "__main__": + pcfile = PCFile("tests/test_files/NREL_5MW_pc.txt") + + print (pcfile.CL(21,10)) # CL for thickness 21% and AOA=10deg + #1.358 + print (pcfile.CD(21,10)) # CD for thickness 21% and AOA=10deg + #0.0255 + print (pcfile.CM(21,10)) # CM for thickness 21% and AOA=10deg + #-0.1103 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py new file mode 100644 index 0000000000..91497a0521 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/input_output/wetb/hawc2/st_file.py @@ -0,0 +1,302 @@ +''' +Created on 24/04/2014 + +@author: MMPE +''' +import types +import os +import numpy as np + + +stc = "r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e" +fpm = 'r m x_cg y_cg ri_x ri_y pitch x_e y_e K_11 K_12 K_13 K_14 K_15 K_16 K_22' +fpm += ' K_23 K_24 K_25 K_26 K_33 K_34 K_35 K_36 K_44 K_45 K_46 K_55 K_56 K_66' + +class StFile(object): + """Read HAWC2 St (beam element structural data) file + + Methods are autogenerated for: + + - r : curved length distance from main_body node 1 [m] + - m : mass per unit length [kg/m] + - x_cg : xc2-coordinate from C1/2 to mass center [m] + - y_cg : yc2-coordinate from C1/2 to mass center [m] + - ri_x : radius of gyration related to elastic center. Corresponds to rotation about principal bending xe axis [m] + - ri_y : radius of gyration related to elastic center. Corresponds to rotation about principal bending ye axis [m] + - xs : xc2-coordinate from C1/2 to shear center [m]. The shear center is the point where external forces only contributes to pure bending and no torsion. + - ys : yc2-coordinate from C1/2 to shear center [m]. The shear center is the point where external forces only contributes to pure bending and no torsion. + - E : modulus of elasticity [N/m2] + - G : shear modulus of elasticity [N/m2] + - Ix : area moment of inertia with respect to principal bending xe axis [m4]. This is the principal bending axis most parallel to the xc2 axis + - Iy : area moment of inertia with respect to principal bending ye axis [m4] + - K : torsional stiffness constant with respect to ze axis at the shear center [m4/rad]. For a circular section only this is identical to the polar moment of inertia. + - k_x : shear factor for force in principal bending xe direction [-] + - k_y : shear factor for force in principal bending ye direction [-] + - A : cross sectional area [m2] + - pitch : structural pitch about z_c2 axis. This is the angle between the xc2 -axis defined with the c2_def command and the main principal bending axis xe. + - xe : xc2-coordinate from C1/2 to center of elasticity [m]. The elastic center is the point where radial force (in the z-direction) does not contribute to bending around the x or y directions. + - ye : yc2-coordinate from C1/2 to center of elasticity [m]. The elastic center is the point where radial force (in the + + The autogenerated methods have the following structure + + def xxx(radius=None, mset=1, set=1): + Parameters: + ----------- + radius : int, float, array_like or None, optional + Radius/radii of interest\n + If int, float or array_like: values are interpolated to requested radius/radii + If None (default): Values of all radii specified in st file returned + mset : int, optional + Main set number + set : int, optional + Sub set number + + + Examples + -------- + >>> stfile = StFile(r"tests/test_files/DTU_10MW_RWT_Blade_st.dat") + >>> print (stfile.m()) # Mass at nodes + [ 1189.51054664 1191.64291781 1202.76694262 ... 15.42438683] + >>> print (st.E(radius=36, mset=1, set=1)) # Elasticity interpolated to radius 36m + 8722924514.652649 + >>> print (st.E(radius=36, mset=1, set=2)) # Same for stiff blade set + 8.722924514652648e+17 + """ + + def __init__(self, filename=None): + + # in case the user wants to create a new non-existing st file + if filename is None: + self.main_data_sets = {} + return + + with open(filename) as fid: + txt = fid.read() +# Some files starts with first set ("#1...") with out specifying number of sets +# no_maindata_sets = int(txt.strip()[0]) +# assert no_maindata_sets == txt.count("#") + self.main_data_sets = {} + for mset in txt.split("#")[1:]: + mset_nr = int(mset.strip().split()[0]) + set_data_dict = {} + + for set_txt in mset.split("$")[1:]: + set_lines = set_txt.split("\n") + set_nr, no_rows = map(int, set_lines[0].split()[:2]) + assert set_nr not in set_data_dict + try: + # HAWC2 will ignore everything after the 19th element, + # some users have placed comments here after a ; + linelst = [set_lines[i].split(';')[0].split() for i in range(1, no_rows + 1)] + except Exception as e: + print('it went wrong at (set/subset):', mset_nr, set_nr, + 'with', no_rows, 'rows') + raise e + set_data_dict[set_nr] = np.array(linelst, dtype=float) + self.main_data_sets[mset_nr] = set_data_dict + + if len(linelst[0])==len(stc.split()): + self.cols = stc.split() + elif len(linelst[0])==len(fpm.split()): + self.cols = fpm.split() + else: + raise TypeError('wrong number of columns in st file') + + for i, name in enumerate(self.cols): + setattr(self, name, lambda radius=None, mset=1, set=1, + column=i: self._value(radius, column, mset, set)) + + def _value(self, radius, column, mset_nr=1, set_nr=1): + st_data = self.main_data_sets[mset_nr][set_nr] + if radius is None: + radius = self.radius_st(None, mset_nr, set_nr) + return np.interp(radius, st_data[:, 0], st_data[:, column]) + + def radius_st(self, radius=None, mset=1, set=1): + r = self.main_data_sets[mset][set][:, 0] + if radius is None: + return r + return r[np.argmin(np.abs(r - radius))] + + def to_str(self, mset=1, set=1, precision='%12.5e '): + d = self.main_data_sets[mset][set] + return '\n'.join([(precision * d.shape[1]) % tuple(row) for row in d]) + + def set_value(self, mset_nr, set_nr, **kwargs): + for k, v in kwargs.items(): + column = self.cols.index(k) + self.main_data_sets[mset_nr][set_nr][:, column] = v + + def save(self, filename, precision='%15.07e', encoding='utf-8'): + """Save all data defined in main_data_sets to st file. + """ + + # when creating empty st object, cols is not set yet + if not hasattr(self, 'cols'): + if self.main_data_sets[1][1].shape[1]==19: + self.cols = stc.split() + elif self.main_data_sets[1][1].shape[1]==30: + self.cols = fpm.split() + else: + c = self.main_data_sets[1][1].shape[1] + raise TypeError(f'St input needs 19 (iso) or 30 (aniso/fpm) cols, not {c}') + + colwidth = len(precision % 1) + sep = '=' * colwidth * len(self.cols) + '\n' + colhead = ''.join([k.center(colwidth) for k in self.cols]) + '\n' + + nsets = len(self.main_data_sets) + # fails if dirname is empty string + if len(os.path.dirname(filename)) > 0: + os.makedirs(os.path.dirname(filename), exist_ok=True) + with open(filename, 'w', encoding=encoding) as fid: + fid.write('%i ; number of sets, Nset\n' % nsets) + for mset, set_data_dict in self.main_data_sets.items(): + fid.write('#%i ; set number\n' % mset) + for set, set_array in set_data_dict.items(): + dstr = self.to_str(mset=mset, set=set, precision=precision) + npoints = self.main_data_sets[mset][set].shape[0] + fid.write(sep + colhead + sep) + fid.write('$%i %i\n' % (set, npoints)) + fid.write(dstr + '\n') + + def element_stiffnessmatrix(self, radius, mset_nr, set_nr, length): + """Compute the element stiffness matrix + + Parameters + ---------- + radius : float + radius of element (used of obtain element properties + length : float + eleement length + """ + + # not supported for FPM format + if len(self.cols)==30: + return + + K = np.zeros((13, 13)) + "r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e" + ES1, ES2, EMOD, GMOD, IX, IY, IZ, KX, KY, A = [getattr(self, n)(radius, mset_nr, set_nr) + for n in "x_sh,y_sh,E,G,I_x,I_y,I_p,k_x,k_y,A".split(",")] + ELLGTH = length + + ETAX = EMOD * IX / (KY * GMOD * A * ELLGTH**2) + ETAY = EMOD * IY / (KX * GMOD * A * ELLGTH**2) + ROX = 1 / (1 + 12 * ETAX) + ROY = 1 / (1 + 12 * ETAY) + ROY = 1 / (1 + 12 * ETAX) + K[1, 1] = 12 * EMOD * IY * ROY / ELLGTH**3 + K[1, 5] = 6 * EMOD * IY * ROY / ELLGTH**2 + K[1, 6] = -K[1, 1] * ES2 + K[1, 7] = -K[1, 1] + K[1, 11] = K[1, 5] + K[1, 12] = -K[1, 6] + K[2, 2] = 12 * EMOD * IX * ROX / ELLGTH**3 + K[2, 4] = -6 * EMOD * IX * ROX / ELLGTH**2 + K[2, 6] = K[2, 2] * ES1 + K[2, 8] = -K[2, 2] + K[2, 10] = K[2, 4] + K[2, 12] = -K[2, 6] + K[3, 3] = A * EMOD / ELLGTH + K[3, 9] = -K[3, 3] + K[4, 4] = 4 * EMOD * IX * (1 + 3 * ETAX) * ROX / ELLGTH + K[4, 6] = K[2, 4] * ES1 + K[4, 8] = -K[2, 4] + K[4, 10] = 2 * EMOD * IX * (1 - 6 * ETAX) * ROX / ELLGTH + K[4, 12] = -K[4, 6] + K[5, 5] = 4 * EMOD * IY * (1 + 3 * ETAY) * ROY / ELLGTH + K[5, 6] = -K[1, 5] * ES2 + K[5, 7] = -K[1, 5] + K[5, 11] = 2 * EMOD * IY * (1 - 6 * ETAY) * ROY / ELLGTH + K[5, 12] = -K[5, 6] + K[6, 6] = GMOD * IZ / ELLGTH + 12 * EMOD * (IX * ES1**2 * ROX + IY * ES2**2 * ROY) / ELLGTH**3 + K[6, 7] = K[1, 12] + K[6, 8] = K[2, 12] + K[6, 10] = -K[4, 12] + K[6, 11] = -K[5, 12] + K[6, 12] = -K[6, 6] + K[7, 7] = K[1, 1] + K[7, 11] = -K[1, 5] + K[7, 12] = K[1, 6] + K[8, 8] = K[2, 2] + K[8, 10] = -K[2, 4] + K[8, 12] = K[2, 6] + K[9, 9] = K[3, 3] + K[10, 10] = K[4, 4] + K[10, 12] = -K[4, 6] + K[11, 11] = K[5, 5] + K[11, 12] = -K[5, 6] + K[12, 12] = K[6, 6] + K = K[1:, 1:] + K = K + K.T - np.eye(12) * K + return K + + def shape_function_ori(self, radius, mset_nr, set_nr, length, z): + + # not supported for FPM format + if len(self.cols)==30: + return + + XSC, YSC, EMOD, GMOD, IX, IY, IZ, KX, KY, AREA = [getattr(self, n)(radius, mset_nr, set_nr) + for n in "x_sh,y_sh,E,G,I_x,I_y,I_p,k_x,k_y,A".split(",")] + + etax = EMOD * IX / KY / GMOD / AREA / (length**2) + etay = EMOD * IY / KX / GMOD / AREA / (length**2) + rhox = 1 / (1 + 12 * etax) + rhoy = 1 / (1 + 12 * etay) + + f1 = z / length + f2 = 1 - f1 + f3x = f1 * (3 * f1 - 2 * f1**2 + 12 * etax) * rhox + f4x = f2 * (3 * f2 - 2 * f2**2 + 12 * etax) * rhox + f5x = length * (f1**2 - (1 - 6 * etax) * f1 - 6 * etax) * f1 * rhox + f6x = length * (f2**2 - (1 - 6 * etax) * f2 - 6 * etax) * f2 * rhox + f7x = 6 / length * f1 * f2 * rhox + f8x = f1 * (3 * f1 - 2 * (1 - 6 * etax)) * rhox + f9x = f2 * (3 * f2 - 2 * (1 - 6 * etax)) * rhox + + f3y = f1 * (3 * f1 - 2 * f1**2 + 12 * etay) * rhoy + f4y = f2 * (3 * f2 - 2 * f2**2 + 12 * etay) * rhoy + f5y = length * (f1**2 - (1 - 6 * etay) * f1 - 6 * etay) * f1 * rhoy + f6y = length * (f2**2 - (1 - 6 * etay) * f2 - 6 * etay) * f2 * rhoy + f7y = 6 / length * f1 * f2 * rhoy + f8y = f1 * (3 * f1 - 2 * (1 - 6 * etay)) * rhoy + f9y = f2 * (3 * f2 - 2 * (1 - 6 * etay)) * rhoy + + return np.array([[f4y, 0, 0, 0, -f7y, 0], + [0, f4x, 0, f7x, 0, 0], + [0, 0, f2, 0, 0, 0], + [0, f6x, 0, f9x, 0, 0], + [-f6y, 0, 0, 0, f9y, 0], + [(f2 - f4y) * YSC, -(f2 - f4x) * XSC, 0, f7x * XSC, f7y * YSC, f2], + [f3y, 0, 0, 0, f7y, 0], + [0, f3x, 0, -f7x, 0, 0], + [0, 0, f1, 0, 0, 0], + [0, -f5x, 0, f8x, 0, 0], + [f5y, 0, 0, 0, f8y, 0], + [(f1 - f3y) * YSC, -(f1 - f3x) * XSC, 0, -f7x * XSC, -f7y * YSC, f1]]).T + + +if __name__ == "__main__": + import os + cwd = os.path.dirname(__file__) + st = StFile(os.path.join(cwd, r'tests/test_files/DTU_10MW_RWT_Blade_st.dat')) + print(st.m()) + print(st.E(radius=36, mset=1, set=1)) # Elastic blade + print(st.E(radius=36, mset=1, set=2)) # stiff blade + #print (st.radius()) + xyz = np.array([st.x_e(), st.y_e(), st.r()]).T[:40] + n = 2 + xyz = np.array([st.x_e(None, 1, n), st.y_e(None, 1, n), st.r(None, 1, n)]).T[:40] + #print (xyz) + print(np.sqrt(np.sum((xyz[1:] - xyz[:-1]) ** 2, 1)).sum()) + print(xyz[-1, 2]) + print(np.sqrt(np.sum((xyz[1:] - xyz[:-1]) ** 2, 1)).sum() - xyz[-1, 2]) + print(st.x_e(67.8883), st.y_e(67.8883)) + #print (np.sqrt(np.sum(np.diff(xyz, 0) ** 2, 1))) + print(st.pitch(67.8883 - 0.01687)) + print(st.pitch(23.2446)) + + # print (st.) + # print (st.) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst new file mode 100644 index 0000000000..000b67d7c3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/README.rst @@ -0,0 +1,3 @@ + +More details coming soon! +------------------------- diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py new file mode 100644 index 0000000000..6e37965272 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/__init__.py @@ -0,0 +1,18 @@ + +# NOTE: we make the main functions available here, so that we can change the interface in the future. +from pyFAST.linearization.tools import getMBCOP, getCampbellDataOP +from pyFAST.linearization.tools import writeModesForViz +from pyFAST.linearization.tools import readModesForViz +from pyFAST.linearization.tools import writeVizFile +from pyFAST.linearization.tools import writeVizFiles + +from pyFAST.linearization.mbc import fx_mbc3 +from pyFAST.linearization.campbell import postproCampbell, plotCampbell, plotCampbellDataFile +from pyFAST.linearization.campbell_data import IdentifyModes +from pyFAST.linearization.campbell_data import IdentifiedModesDict +from pyFAST.linearization.campbell_data import printCampbellDataOP +from pyFAST.linearization.campbell_data import campbellData2TXT +from pyFAST.linearization.campbell_data import extractShortModeDescription +from pyFAST.linearization.campbell_data import campbell_diagram_data_oneOP + +from pyFAST.linearization.linearization import writeLinearizationFiles diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py new file mode 100644 index 0000000000..97793b85d3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell.py @@ -0,0 +1,515 @@ +""" + +Generic functions to help setup a Campbell diagram with OpenFAST + +These are high level functions for manipulate multiple operating points (multiple .fst files). + +For more granularity, see: + - pyFAST.linearization.tools.py + - pyFAST.linearization.campbell_data.py + +Main functions: + +- postproMBC(xlsFile=None, csvBase=None, sortedSuffix=None, csvModesID=None, xlssheet=None): + Generate Cambell diagram data from an xls file, or a set of csv files + + +""" + +import os +import pandas as pd +# import re +import numpy as np +from pyFAST.linearization.tools import getMBCOPs +from pyFAST.linearization.tools import getCampbellDataOPs +from pyFAST.linearization.tools import estimateLengths + +from pyFAST.linearization.campbell_data import campbell_diagram_data_oneOP, campbellData2CSV, campbellData2TXT +from pyFAST.linearization.campbell_data import IdentifyModes + + +def postproCampbell(fstFiles, BladeLen=None, TowerLen=None, verbose=True, + WS_legacy=None, + nFreqOut=500, freqRange=None, posDampRange=None, # Options for TXT output + removeTwrAzimuth=False, starSub=None, removeStatesPattern=None, # Options for A matrix selection + writeModes=None, **kwargs # Options for .viz files + ): + """ + Postprocess linearization files to extract Campbell diagram (linearization at different Operating points) + - Run MBC + - Postprocess to put into "CampbellData" matlab form + - Perform mode identification (work in progress) + - Export to disk + + INPUTS: + - fstFiles: list of fst files + + INPUTS (related to A matrices): + - removeTwrAzimuth: if False do nothing + otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g: 'tower|Drivetrain' or '^AD' + see FASTLinearizationFile. + + INPUTS (related to Campbell_Summary.txt output): + - nFreqOut: maximum number of frequencies to write to Campbell_Summary.txt file + - freqRange: range in which frequencies are "accepted", if None: [-np.inf, np.inf] + - posDampRange: range in which damping are "accepted' , if None: [1e-5, 0.96] + + INPUTS (related to .viz files): + - writeModes: if True, a binary file and a .viz file is written to disk for OpenFAST VTK visualization. + if None, the binary file is written only if a checkpoint file is present. + For instance, if the main file is : 'main.fst', + the binary file will be : 'main.ModeShapeVTK.pyPostMBC' + the viz file will be : 'main.ModeShapeVTK.viz' + the checkpoint file is expected to be : 'main.ModeShapeVTK.chkp' + - **kwargs: list of key/values to be passed to writeVizFile (see function below) + VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None + + OUTPUTS: + - OP: dataframe of operating points + - Freq: dataframe of frequencies for each OP and identified mode + - Damp: dataframe of dampings for each OP and identified mode + - UnMapped: + - ModeData: all mode data all mode data + """ + if len(fstFiles)==0: + raise Exception('postproCampbell requires a list of at least one .fst') + + if len(fstFiles)==1 and os.path.splitext(fstFiles[0])[1]=='.pkl': + # Temporary hack for debugging, using a pickle file + import pickle + CD = pickle.load(open(fstFiles[0],'rb')) + else: + # --- Attemps to extract Blade Length and TowerLen from first file... + CD, MBC = getCampbellDataOPs(fstFiles, writeModes=writeModes, BladeLen=BladeLen, TowerLen=TowerLen, + removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern, verbose=verbose, **kwargs) + + # --- Identify modes + modeID_table,modesDesc=IdentifyModes(CD) + + # --- Write files to disk + # Write csv file for manual identification step.. + baseName = os.path.join(os.path.dirname(fstFiles[0]), 'Campbell') + modeID_file = campbellData2CSV(baseName, CD, modeID_table, modesDesc) + # Write summary txt file to help manual identification step.. + txtFileName = baseName+'_Summary.txt' + campbellData2TXT(CD, txtFileName=txtFileName, nFreqOut=nFreqOut, freqRange=freqRange, posDampRange=posDampRange) + + # --- Return nice dataframes (assuming the identification is correct) + # TODO, for now we reread the files... + OP, Freq, Damp, UnMapped, ModeData = postproMBC(csvModesIDFile=modeID_file, verbose=verbose, WS_legacy=WS_legacy) + + return OP, Freq, Damp, UnMapped, ModeData, modeID_file + +# --------------------------------------------------------------------------------} +# --- Postprocessing +# --------------------------------------------------------------------------------{ +def postproMBC(xlsFile=None, csvModesIDFile=None, xlssheet=None, verbose=True, WS_legacy=None, suffix=''): + """ + Generate Cambell diagram data from an xls file, or a set of csv files + INPUTS: + - xlsFile: path to an excel file, or, basename for a set of csv files generated by campbellFolderPostPro + - csvModesIDFile: filename of csv file containing mode identification table. + Its parent directory is noted csvBase. + Other csv files will be asssumed to located in the same folder: + - csvBase + 'Campbell_OP.csv' + - csvBase + 'Campbell_PointI.csv' I=1..n_Op + - (csvBase + 'Campbell_ModesID.csv') + - vebose: more outputs to screen + - WS_legacy: for OpenFAST 2.3, wind speed is unknown (NaN), a vector of operating point WS is needed + OUTPUTS: + - Freq: dataframe with columns [WS, RPM, Freq_Mode1,.., Freq_ModeN] for the N identified modes + - Damp: dataframe with columns [WS, RPM, Damp_Mode1,.., Damp_ModeN] (damping ratios), for the N identified modes + - UnMapped: dataframe with columns [WS, RPM, Freq, Damp] for all unidenfied modes + - ModesData: low-level data, dictionaries for each OP with frequencies and damping + """ + rpmSweep=False + if xlsFile is not None: + from pandas import ExcelFile + # --- Excel file reading + OPFileName=xlsFile; + IDFileName=xlsFile; + sheets=dict() + # Reading all sheets + if verbose: + print('Reading Excel file: ',xlsFile) + xls = pd.ExcelFile(xlsFile) + dfs = {} + for sheet_name in xls.sheet_names: + # Reading sheet + df = xls.parse(sheet_name, header=None) + if df.shape[0]>0: + sheets[sheet_name]=df + OP = sheets['OP'] + WS = OP.iloc[1,1:].values + RPM = OP.iloc[2,1:].values + ID = None + if any([s.find('mps')>0 for s in sheets.keys()]): + rpmSweep = False + sweepVar = WS + sweepUnit = 'mps' + xlssheet='WS_ModesID' if xlssheet is None else xlssheet + else: + rpmSweep = True + sweepVar = RPM + sweepUnit = 'rpm' + xlssheet ='ModesID' if xlssheet is None else xlssheet + if xlssheet not in sheets.keys(): + raise Exception('Mode identification sheet {} not found in excel file'.format(xlssheet)) + ID = sheets[xlssheet] + # Storing data for each points, we try a bunch of keys since matlab script uses a loose num2str for now + Points=dict() + for i,v in enumerate(sweepVar): + keys=[('{:.'+str(ires)+'f} {:s}').format(v,sweepUnit) for ires in [0,1,2,3,4]] + for k in keys: + try: + Points[i] = sheets[k] + except: + pass + if i not in Points.keys(): + raise Exception('Couldnf find sheet for operating point {:d}'.format(i)) + elif csvModesIDFile is not None: + # --- csv file reading + IDFileName=csvModesIDFile + csvBase=os.path.join(os.path.dirname(csvModesIDFile),'') + OPFileName=csvBase+'Campbell_OP{:}.csv'.format(suffix) + if verbose: + print('Reading csv file: ',OPFileName) + OP = pd.read_csv(OPFileName, sep = ',') + if verbose: + print('Reading csv file: ',IDFileName) + ID = pd.read_csv(IDFileName, sep = ',',header=None) + nCol = OP.shape[1]-1 + naCount = OP.isna().sum(axis=1) + WS = OP.iloc[0,1:].values + RPM = OP.iloc[1,1:].values + del OP + # Storing data for each points into a dict + Points=dict() + for i,v in enumerate(WS): + OPFile = csvBase+'Campbell_Point{:02d}{:}.csv'.format(i+1,suffix) + #print(OPFile, WS[i], RPM[i]) + Points[i] = pd.read_csv(OPFile, sep = ',', header=None, dtype='object') + else: + raise Exception('Provide either an Excel file or a csv (ModesID) file') + # --- Mode Identification + ID.iloc[:,0].fillna('Unknown', inplace=True) # replace nan + ModeNames = ID.iloc[2: ,0].values + ModeIDs = ID.iloc[2: ,1:].values + nModesIDd = len(ModeNames) # Number of modes identified in the ID file + + if ModeIDs.shape[1]!=len(WS): + print('OP Windspeed:',WS) + raise Exception('Inconsistent number of operating points between OP ({} points) and ID ({} points) data.\nOP filename: {}\nID filename: {}\n'.format(ModeIDs.shape[1], len(WS), OPFileName, IDFileName)) + + # --- Extract Frequencies and Damping from Point table + ModeData=[] + ioff=0 + coff=0 + for i,ws in enumerate(WS): + P = Points[i] + opData = dict() + opData['Fnat'] = P.iloc[1+ioff, 1::5+coff].values[:].astype(float) # natural frequencies + opData['Fdmp'] = P.iloc[2+ioff, 1::5+coff].values[:].astype(float) # damped frequencies + opData['Damps'] = P.iloc[3+ioff, 1::5+coff].values[:].astype(float) # Damping values + ModeData.append(opData) + + # ---Dealing with missing WS + if np.any(np.isnan(np.array(WS).astype(float))) or np.all(np.array(WS).astype(float)==0): + print('[WARN] WS were not provided in linearization (all NaN), likely old OpenFAST version ') + if WS_legacy is not None: + print(' > Using WS_legacy provided.') + if len(WS_legacy)!=len(WS): + raise Exception('WS_legacy should have length {} instead of {}'.format(len(WS),len(WS_legacy))) + WS = WS_legacy + else: + print('[WARN] WS was replaced with index!') + WS = np.arange(0,len(WS)) + + # --- Creating a cleaner table of operating points + OP = pd.DataFrame(np.nan, index=np.arange(len(WS)), columns=['WS_[m/s]', 'RotSpeed_[rpm]']) + OP['WS_[m/s]'] = WS + OP['RotSpeed_[rpm]'] = RPM + + UnMapped_WS = [] + UnMapped_RPM = [] + UnMapped_Freq = [] + UnMapped_Damp = [] + # --- Unidentified modes, before "nModes" + for iOP,(ws,rpm) in enumerate(zip(WS,RPM)): + m = ModeData[iOP] + nModesMax = len(m['Fnat']) + #nModes = min(nModesMax, nModesIDd) # somehow sometimes we have 15 modes IDd but only 14 in the ModeData.. + Indices = (np.asarray(ModeIDs[:,iOP])-1).astype(int) + IndicesMissing = [i for i in np.arange(nModesMax) if i not in Indices] + f = np.asarray([m['Fnat'] [iiMode] for iiMode in IndicesMissing]) + d = np.asarray([m['Damps'][iiMode] for iiMode in IndicesMissing]) + ws = np.asarray([ws]*len(f)) + rpm = np.asarray([rpm]*len(f)) + UnMapped_Freq = np.concatenate((UnMapped_Freq, f)) + UnMapped_Damp = np.concatenate((UnMapped_Damp, d)) + UnMapped_WS = np.concatenate((UnMapped_WS, ws)) + UnMapped_RPM = np.concatenate((UnMapped_RPM, rpm)) + ## --- Unidentified modes, beyond "nModes" + #for m,ws,rpm in zip(ModeData,WS,RPM): + # f = m['Fnat'][nModesIDd:] + # d = m['Damps'][nModesIDd:] + # ws = np.asarray([ws]*len(f)) + # rpm = np.asarray([rpm]*len(f)) + # UnMapped_Freq = np.concatenate((UnMapped_Freq, f)) + # UnMapped_Damp = np.concatenate((UnMapped_Damp, d)) + # UnMapped_WS = np.concatenate((UnMapped_WS, ws)) + # UnMapped_RPM = np.concatenate((UnMapped_RPM, rpm)) + + # --- Put identified modes into a more convenient form + cols=[ m.split('-')[0].strip().replace(' ','_') for m in ModeNames] + cols=[v + str(cols[:i].count(v) + 1) if cols.count(v) > 1 else v for i, v in enumerate(cols)] + Freq = pd.DataFrame(np.nan, index=np.arange(len(WS)), columns=cols) + Damp = pd.DataFrame(np.nan, index=np.arange(len(WS)), columns=cols) + for iMode in np.arange(nModesIDd): + ModeIndices = (np.asarray(ModeIDs[iMode,:])-1).astype(int) + ModeName= ModeNames[iMode].replace('_',' ') + if ModeName.find('(not shown)')>0: + f = np.asarray([m['Fnat'][iiMode] for m,iiMode in zip(ModeData,ModeIndices) if iiMode>=0 ]) + d = np.asarray([m['Damps'][iiMode] for m,iiMode in zip(ModeData,ModeIndices) if iiMode>=0 ]) + ws = np.asarray([ws for ws,iiMode in zip(WS,ModeIndices) if iiMode>=0 ]) + rpm = np.asarray([rpm for rpm,iiMode in zip(RPM,ModeIndices) if iiMode>=0 ]) + UnMapped_Freq = np.concatenate((UnMapped_Freq, f)) + UnMapped_Damp = np.concatenate((UnMapped_Damp, d)) + UnMapped_WS = np.concatenate((UnMapped_WS, ws)) + UnMapped_RPM = np.concatenate((UnMapped_RPM, rpm)) + else: + if all(ModeIndices==-1): + print('Mode not IDd: {}, name: {}.'.format(iMode, ModeName)) + else: + f=[] + d=[] + #f2=np.asarray([m['Fnat'] [iiMode] if iiMode>=0 else np.nan for m,iiMode in zip(ModeData,ModeIndices)]) + #d2=np.asarray([m['Damps'][iiMode] if iiMode>=0 else np.nan for m,iiMode in zip(ModeData,ModeIndices)]) + for iOP, (m,iiMode) in enumerate(zip(ModeData, ModeIndices)): + if iiMode<0: + f.append(np.nan) + d.append(np.nan) + elif iiMode>=len(m['Fnat']): + print('[WARN] ID {} for mode `{}` at OP {} is beyond maximum number allowed'.format(iiMode+1, ModeName, iOP+1)) + f.append(np.nan) + d.append(np.nan) + else: + f.append(m['Fnat'] [iiMode]) + d.append(m['Damps'][iiMode]) + Freq.iloc[:, iMode]=f + Damp.iloc[:, iMode]=d + # Removing modes that are full nan (not_shown ones) + # NOTE: damgerous since OP is not part of it anymore + # Freq.dropna(how='all',axis=0,inplace=True) + # Freq.dropna(how='all',axis=1,inplace=True) + # Damp.dropna(how='all',axis=0,inplace=True) + # Damp.dropna(how='all',axis=1,inplace=True) + + # --- UnMapped modes into a dataframe + M = np.column_stack((UnMapped_WS, UnMapped_RPM, UnMapped_Freq, UnMapped_Damp)) + UnMapped = pd.DataFrame(data=M, columns=['WS_[m/s]','RotSpeed_[rpm]','Freq_[Hz]','Damping_[-]']) + + return OP, Freq, Damp, UnMapped, ModeData + + +# --------------------------------------------------------------------------------} +# --- Plotting +# --------------------------------------------------------------------------------{ +def campbellModeStyles(i, lbl): + """ """ + import matplotlib.pyplot as plt + FullLineStyles = [':', '-', '-+', '-o', '-^', '-s', '--x', '--d', '-.', '-v', '-+', ':o', ':^', ':s', ':x', ':d', ':.', '--','--+','--o','--^','--s','--x','--d','--.']; + Markers = ['', '+', 'o', '^', 's', 'd', 'x', '.'] + LineStyles = ['-', ':', '-.', '--']; + Colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] + MW_Light_Blue = np.array([114,147,203])/255. + MW_Light_Orange = np.array([225,151,76])/255. + MW_Light_Green = np.array([132,186,91])/255. + MW_LightLight_Green = np.array([163,230,112])/255. + MW_Light_Red = np.array([226,115,115])/255. + MW_Light_Gray = np.array([128,133,133])/255. + MW_Light_Purple = np.array([144,103,167])/255. + MW_Light_DarkRed = np.array([171,104,87])/255. + MW_Light_Kaki = np.array([204,194,16])/255. + MW_Blue = np.array([57,106,177])/255. + MW_Orange = np.array([218,124,48])/255. + MW_Green = np.array([62,150,81])/255. + MW_Red = np.array([204,37,41])/255. + MW_Gray = np.array([83,81,84])/255. + MW_Purple = np.array([107,76,154])/255. + MW_DarkRed = np.array([146,36,40])/255. + MW_Kaki = np.array([148,139,61])/255. + + lbl=lbl.lower().replace('_',' ') + ms = 4 + c = Colors[np.mod(i,len(Colors))] + ls = LineStyles[np.mod(int(i/len(Markers)),len(LineStyles))] + mk = Markers[np.mod(i,len(Markers))] + # Color + if any([s in lbl for s in ['1st tower']]): + c=MW_Blue + elif any([s in lbl for s in ['2nd tower']]): + c=MW_Light_Blue + elif any([s in lbl for s in ['1st blade edge','drivetrain']]): + c=MW_Red + elif any([s in lbl for s in ['1st blade flap']]): + c=MW_Green + elif any([s in lbl for s in ['2nd blade flap']]): + c=MW_Light_Green + elif any([s in lbl for s in ['3rd blade flap']]): + c=MW_LightLight_Green + elif any([s in lbl for s in ['2nd blade edge']]): + c=MW_Light_Red + elif any([s in lbl for s in ['1st blade torsion']]): + c=MW_Purple + # Line style + if any([s in lbl for s in ['tower fa','collective','drivetrain','coll']]): + ls='-' + elif any([s in lbl for s in ['tower ss','regressive','bw']]): + ls='--' + elif any([s in lbl for s in ['tower ss','progressive','fw']]): + ls='-.' + # Marker + if any([s in lbl for s in ['collective','coll']]): + mk='2'; ms=8 + elif any([s in lbl for s in ['blade','tower','drivetrain']]): + mk=''; + return c, ls, ms, mk + +def plotCampbell(OP, Freq, Damp, sx='WS_[m/s]', UnMapped=None, fig=None, axes=None, ylim=None, legend=True, plotUnMapped=True, ps=[1,3,6,9]): + """ Plot Campbell data as returned by postproMBC + + INPUTS: + - OP : dataframe of operating points (as returned by postMBC) + - Freq : dataframe of Frequencies at each OP (as returned by postMBC) + - OP : dataframe of damping ratios at each OP points (as returned by postMBC) + - sx: label of the dataframes used for the "x" axis of the Campbell plot + OPTIONAL INPUTS: + - UnMapped: dataframe of UnMapped modes + - fig, axes: optional fig and axes used for plotting (freq and damp) + - ylim: limits for the frequency axis + - ps: multiple of "p" (rotational speed) to plot in the background + """ + import matplotlib.pyplot as plt + + + # Init figure + if fig is None: + fig,axes_ = plt.subplots(1,2) + # fig.set_size_inches(7,7.0,forward=True) # default is (6.4,4.8) + fig.set_size_inches(13,7.0,forward=True) # default is (6.4,4.8) + fig.subplots_adjust(top=0.78,bottom=0.11,left=0.04,right=0.98,hspace=0.06,wspace=0.16) + if axes is None: + axes=axes_ + + # Estimating figure range + FreqRange = [0 , np.nanmax(Freq.values)*1.01] + DampRange = [np.nanmin(Damp.iloc[:,2:]), np.nanmax(Damp.values)*1.01] + + if ylim is not None: + FreqRange=ylim + if DampRange[0]>0: + DampRange[0]=0 + + # Plot "background" 1p 3p 6p 9p. Potentiallymake this an option + RPM = OP['RotSpeed_[rpm]'].values + omega = RPM/60*2*np.pi + freq_1p = omega/(2*np.pi) + for p in ps: + axes[0].plot(OP[sx].values, p*freq_1p, ':',color=(0.7,0.7,0.7), lw=1.0) + + # Plot mapped modes + Markers = ['+', 'o', '^', 's', 'd', 'x', '.'] + iModeValid=0 + xPlot=[]; yPlot=[] + for iMode,lbl in enumerate(Freq.columns.values): + if lbl.find('not_shown')>0: + # TODO ADD TO UNMAPPED + continue + iModeValid+=1 + c, ls, ms, mk = campbellModeStyles(iModeValid, lbl) + if len(RPM)==1 and len(mk)==0: + mk = Markers[np.mod(iMode,len(Markers))] + ms=5 + axes[0].plot(OP[sx].values, Freq[lbl].values, ls, marker=mk, label=lbl.replace('_',' '), markersize=ms, color=c) + axes[1].plot(OP[sx].values, Damp[lbl].values, ls, marker=mk , markersize=ms, color=c) + xPlot=np.concatenate((xPlot, OP[sx].values)) + yPlot=np.concatenate((yPlot, Freq[lbl].values)) + + # Unmapped modes (NOTE: plotted after to over-plot) + if plotUnMapped and UnMapped is not None: + axes[0].plot(UnMapped[sx].values, UnMapped['Freq_[Hz]' ].values, '.', markersize=2, color=[0.5,0.5,0.5]) + axes[1].plot(UnMapped[sx].values, UnMapped['Damping_[-]'].values, '.', markersize=1, color=[0.5,0.5,0.5]) + # Highligh duplicates (also after) + Points=[(x,y) for x,y in zip(xPlot,yPlot)] + Plot = pd.Series(Points) + for xDupl,yDupl in Plot[Plot.duplicated()]: + axes[0].plot(xDupl,yDupl, 'o',color='r') + + axes[0].set_xlabel(sx.replace('_',' ')) + axes[1].set_xlabel(sx.replace('_',' ')) + axes[0].set_ylabel('Frequencies [Hz]') + axes[1].set_ylabel('Damping ratios [-]') + if legend: + axes[0].legend(bbox_to_anchor=(0., 1.02, 2.16, .802), loc='lower left', ncol=4, mode="expand", borderaxespad=0.) + if not np.any(np.isnan(FreqRange)): + axes[0].set_ylim(FreqRange) + + XLIM=axes[1].get_xlim() + axes[1].plot(XLIM, [0,0],'-', color='k', lw=0.5) + axes[1].set_xlim(XLIM) + if not np.any(np.isnan(DampRange)): + axes[1].set_ylim(DampRange) + return fig, axes + + +def plotCampbellDataFile(xls_or_csv, ws_or_rpm='rpm', sheetname=None, ylim=None, WS_legacy=None, to_csv=False, suffix='', returnData=False, + fig=None, axes=None, legend=True, plotUnMapped=True, ps=[1,3,6,9]): + """ + Wrapper for plotCampbell, takes an Excel or csv file as argument. Returns a figure. + + INPUTS: + + + - WS_legacy: for OpenFAST 2.3, wind speed is unknown (NaN), a vector of operating point WS is needed + """ + if ws_or_rpm.lower()=='ws': + sx='WS_[m/s]' + else: + sx='RotSpeed_[rpm]' + + ext = os.path.splitext(xls_or_csv)[1].lower() + baseDir = os.path.dirname(xls_or_csv) + basename = os.path.splitext(os.path.basename(xls_or_csv))[0] + + # --- Read xlsx or csv filse + if ext=='.xlsx': + OP, Freq, Damp, UnMapped, ModeData = postproMBC(xlsFile=xls_or_csv,xlssheet=sheetname, WS_legacy=WS_legacy, suffix=suffix) + + elif ext=='.csv': + OP, Freq, Damp, UnMapped, ModeData = postproMBC(csvModesIDFile=xls_or_csv, WS_legacy=WS_legacy, suffix=suffix) + + pass + + else: + raise Exception('Extension should be csv or xlsx, got {} instead.'.format(ext),) + + # --- Plot + fig, axes = plotCampbell(OP, Freq, Damp, sx=sx, UnMapped=UnMapped, ylim=ylim, fig=fig, axes=axes, legend=legend, plotUnMapped=plotUnMapped, ps=ps) + figName = os.path.join(baseDir,basename+'_'+ws_or_rpm) + + if to_csv: + Freq.to_csv(os.path.join(baseDir, 'freq.csv'), index=None, sep=' ', na_rep='NaN') + Damp.to_csv(os.path.join(baseDir, 'damp.csv'), index=None, sep=' ', na_rep='NaN') + OP.to_csv(os.path.join(baseDir, 'op.csv'), index=None, sep=' ', na_rep='NaN') + + if returnData: + return fig, axes, figName, OP, Freq, Damp + else: + return fig, axes, figName + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py new file mode 100644 index 0000000000..ca975cb0b3 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/campbell_data.py @@ -0,0 +1,692 @@ +""" +Tools to manipulate: + - "CDDOP": campbell data at one operating point + - "CampbellData" list of CDDOP (for multiple operating points) + +""" + +import re +import numpy as np + +def campbell_diagram_data_oneOP(mbc_data, BladeLen=None, TowerLen=None): + """ + Return Campbell Data for one Operating Point "CDDOP" + + """ + CDDOP={} + usePercent = False; + # + # mbc_data.eigSol = eiganalysis(mbc_data.AvgA); + ndof = mbc_data['ndof2'] + mbc_data['ndof1']; #size(mbc_data.AvgA,1)/2; # number of translational states + nModes = len(mbc_data['eigSol']['Evals']) + #print(nModes) + DescStates = PrettyStateDescriptions(mbc_data['DescStates'], mbc_data['ndof2'], mbc_data['performedTransformation']); + + ## store indices of max mode for state and to order natural frequencies + #StatesMaxMode_vals = np.amax(mbc_data['eigSol']['MagnitudeModes'],axis=1); # find which mode has the maximum value for each state (max of each row before scaling) + StatesMaxMode = np.argmax(mbc_data['eigSol']['MagnitudeModes'],axis=1); # find which mode has the maximum value for each state (max of each row before scaling) + SortedFreqIndx = np.argsort((mbc_data['eigSol']['NaturalFreqs_Hz']).flatten(),kind="heapsort"); + #print(SortedFreqIndx) + + + if BladeLen is not None and TowerLen is not None: + ## get the scaling factors for the mode rows + ScalingFactor = getScaleFactors(DescStates, TowerLen, BladeLen); + + ## scale the magnitude of the modes by ScalingFactor (for consistent units) + # and then scale the columns so that their maximum is 1 + + ModesMagnitude = np.matmul(np.diag(ScalingFactor), mbc_data['eigSol']['MagnitudeModes']); # scale the rows + #print(ModesMagnitude) + + CDDOP['ScalingFactor'] = ScalingFactor; + else: + ModesMagnitude = mbc_data['eigSol']['MagnitudeModes']; + + if usePercent: + scaleCol = np.sum( ModesMagnitude )/100; # find the sum of the column, and multiply by 100 (divide here) to get a percentage + else: + scaleCol = np.amax(ModesMagnitude,axis=0); #find the maximum value in the column, so the first element has value of 1 + + ModesMagnitude = np.matmul(ModesMagnitude,np.diag(1./scaleCol)) # scale the columns + + # --- Summary data (array for all modes) + CDDOP['NaturalFreq_Hz'] = mbc_data['eigSol']['NaturalFreqs_Hz'][SortedFreqIndx] + CDDOP['DampingRatio'] = mbc_data['eigSol']['DampRatios'][SortedFreqIndx] + CDDOP['RotSpeed_rpm'] = mbc_data['RotSpeed_rpm'] + if 'WindSpeed' in mbc_data: + CDDOP['WindSpeed'] = mbc_data['WindSpeed'] + + #print(ModesMagnitude) + + # --- Storing data per mode + CDDOP['Modes']=[] + for i in range(nModes): + CData={} + CData['NaturalFreq_Hz'] = mbc_data['eigSol']['NaturalFreqs_Hz'][SortedFreqIndx[i]][0] + CData['DampedFreq_Hz'] = mbc_data['eigSol']['DampedFreqs_Hz'][SortedFreqIndx[i]][0]; + CData['DampingRatio'] = mbc_data['eigSol']['DampRatios'][SortedFreqIndx[i]][0]; + + + #print(np.argsort(ModesMagnitude[:,SortedFreqIndx[0]])[::-1]) + # sort indices in descending order + sort_state = np.argsort( ModesMagnitude[:,SortedFreqIndx[i]])[::-1]; + + #print(type(sort_state)) + CData['DescStates']=[DescStates[i] for i in sort_state] + CData['MagnitudePhase']=ModesMagnitude[sort_state,SortedFreqIndx[i]]; + Phase = mbc_data['eigSol']['PhaseModes_deg'][sort_state,SortedFreqIndx[i]]; + # if the phase is more than +/- 90 degrees different than the first + # one (whose value == 1 or is the largest %), we'll stick a negative value on the magnitude: + Phase = np.mod(Phase, 360); + + CData['PhaseDiff'] = np.mod( Phase - Phase[0], 360); # difference in range [0, 360) + PhaseIndx = CData['PhaseDiff'] > 180; + CData['PhaseDiff'][PhaseIndx] = CData['PhaseDiff'][PhaseIndx] - 360; # move to range (-180, 180] + + if ~usePercent: + PhaseIndx = CData['PhaseDiff'] > 90; + CData['MagnitudePhase'][PhaseIndx] = -1*CData['MagnitudePhase'][PhaseIndx]; + CData['PhaseDiff'][PhaseIndx] = CData['PhaseDiff'][PhaseIndx] - 180; + + PhaseIndx = CData['PhaseDiff'] <= -90; + CData['MagnitudePhase'][PhaseIndx] = -1*CData['MagnitudePhase'][PhaseIndx]; + CData['PhaseDiff'][PhaseIndx] = CData['PhaseDiff'][PhaseIndx] + 180; + + #print(CData['MagnitudePhase']) + #print(CData['PhaseDiff']) + + CData['StateHasMaxAtThisMode'] = np.ones(ndof, dtype=bool); + ix = (StatesMaxMode == SortedFreqIndx[i]); + tmp=ix[sort_state] + CData['StateHasMaxAtThisMode']=tmp + + #print(CData['StateHasMaxAtThisMode']) + #print(CData['NaturalFreq_Hz']) + CDDOP['Modes'].append(CData) + + #print(CDDOP[0]['MagnitudePhase']) + # Adding short description to summary + CDDOP['ShortModeDescr'] =[extractShortModeDescription(CDDOP['Modes'][i]) for i in range(nModes)] + + + CDDOP['nColsPerMode'] = 5; + CDDOP['ModesTable'] = {} + + for i in range(nModes): + colStart = i*CDDOP['nColsPerMode']; + CDDOP['ModesTable'][1, colStart+1 ] = 'Mode number:'; + CDDOP['ModesTable'][1, colStart+2 ] = i; + + CDDOP['ModesTable'][2, colStart+1 ] = 'Natural (undamped) frequency (Hz):'; + CDDOP['ModesTable'][2, colStart+2 ] = CDDOP['Modes'][i]['NaturalFreq_Hz'] + + CDDOP['ModesTable'][3, colStart+1 ] = 'Damped frequency (Hz):'; + CDDOP['ModesTable'][3, colStart+2 ] = CDDOP['Modes'][i]['DampedFreq_Hz'] + + CDDOP['ModesTable'][4, colStart+1 ] = 'Damping ratio (-):'; + CDDOP['ModesTable'][4, colStart+2 ] = CDDOP['Modes'][i]['DampingRatio'] + + CDDOP['ModesTable'][5, colStart+1 ] = 'Mode ' + str(i) + ' state description'; + CDDOP['ModesTable'][5, colStart+2 ] = 'State has max at mode ' + str(i); + if usePercent: + CDDOP['ModesTable'][5, colStart+3 ] = 'Mode ' + str(i) + ' contribution (%)'; + else: + CDDOP['ModesTable'][5, colStart+3 ] = 'Mode ' + str(i) + ' signed magnitude'; + + CDDOP['ModesTable'][5, colStart+4 ] = 'Mode ' + str(i) + ' phase (deg)'; + + # need to cross check these 4 lines + CDDOP['ModesTable'][6,colStart+1] = CDDOP['Modes'][i]['DescStates']; + CDDOP['ModesTable'][6,colStart+2] = CDDOP['Modes'][i]['StateHasMaxAtThisMode']; + CDDOP['ModesTable'][6,colStart+3] = CDDOP['Modes'][i]['MagnitudePhase']; + CDDOP['ModesTable'][6,colStart+4] = CDDOP['Modes'][i]['PhaseDiff']; + + #print(CDDOP['ModesTable']) + return CDDOP + + +def getScaleFactors(DescStates, TowerLen, BladeLen): + + ScalingFactor = np.ones(len(DescStates)) + + # look at the state description strings for tower and blade + # translational dofs: + for i in range(len(ScalingFactor)): + + # look for blade dofs: + if DescStates[i].find('blade')!=-1 or DescStates[i].find('Blade')!=-1: + if DescStates[i].find('rotational')==-1: # make sure this isn't a rotational dof from BeamDyn + ScalingFactor[i] = 1.0/BladeLen; + #print(DescStates[i]) + + # look for tower translational dofs: + if DescStates[i].find('tower')!=-1 or DescStates[i].find('Tower')!=-1: + ScalingFactor[i] = 1.0/TowerLen; + + # look for blade dofs: + elif DescStates[i].find('blade')!=-1 or DescStates[i].find('Blade')!=-1: + if DescStates[i].find('rotational')==-1: # make sure this isn't a rotational dof from BeamDyn + ScalingFactor[i] = 1.0/BladeLen; + + return ScalingFactor + + +def printCampbellDataOP(CDDOP, nModesMax=15, nCharMaxDesc=50) : + """ + Print frequencies, damping and mode description for Campbell diagram data at one operating points (CDDOP) + INPUTS: + - CDDOP: dictionary as returned by campbell_diagram_data_oneOP + - nModesMax : Maximum number of modes to be shown + - nCharMaxDesc: Maximum number of characters for description written to screen + OUTPUTS + - Freq: frequencies for each modes + - Damp: Damping for each modes + + See matlab-toolbox/Campbell/printCDDDOP.m + """ + nModesMax = np.min([len(CDDOP['Modes']),nModesMax]) + Freq = np.array([CDDOP['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) + Damp = np.array([CDDOP['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)]) + print('Mode, NatFreq_[Hz], Damp_Ratio_[-], LogDec._[%], Mode_content_[-]') + for i in np.arange(nModesMax): + Mode = CDDOP['Modes'][i] + # Extracting description the best we can + Desc = extractShortModeDescription(Mode) + print('{:3d} ,{:12.3f}, {:8.5f} , {:7.4f}, {:s}'.format(i+1,Mode['NaturalFreq_Hz'],Mode['DampingRatio'],Mode['DampingRatio']*100*2*np.pi, Desc[:min(nCharMaxDesc,len(Desc))])) + return Freq, Damp + + +# --------------------------------------------------------------------------------} +# --- Manipulation of multiple operating points +# --------------------------------------------------------------------------------{ + +def campbellData2TXT(CD, txtFileName=None, nFreqOut=500, freqRange=None, posDampRange=None, skipNonEDBD=True): + """ Write frequencies, damping, and mode contents for each operating points to a string + Write to file if filename provided + INPUTS: + - nFreqOut: maximum number of frequencies to write to Campbell_Summary.txt file + - freqRange: range in which frequencies are "accepted", if None: [-np.inf, np.inf] + - posDampRange: range in which damping are "accepted' , if None: [1e-5, 0.96] + """ + if not isinstance(CD, list): + CD=[CD] + if freqRange is None: + freqRange =[-np.inf, np.inf] + if posDampRange is None: + posDampRange =[1e-5, 0.96] + + def mode2txtline(cd, im): + m = cd['Modes'][im] + Desc = cd['ShortModeDescr'][im] + zeta = m['DampingRatio'] + return '{:03d} ; {:8.3f} ; {:7.4f} ; {:s}\n'.format(im+1,m['NaturalFreq_Hz'],m['DampingRatio'],Desc) + + txt='' + for iOP,cd in enumerate(CD): + WS = cd['WindSpeed'] + RPM = cd['RotSpeed_rpm'] + nFreqOut_loc = np.min([len(cd['Modes']),nFreqOut]) + txt+='# -----------------------------------------------------------------------\n' + txt+='# --- OP {:d} - WS {:.1f} - RPM {:.2f} \n'.format(iOP+1, WS, RPM) + txt+='# -----------------------------------------------------------------------\n' + txt+='# --- "Selected" modes\n' + txt+='# ID; Freq [Hz]; Zeta [-]; Mode content\n' + skippedDamp=[] + skippedFreq=[] + skippedEDBD=[] + for im in np.arange(nFreqOut_loc): + m = cd['Modes'][im] + Desc = cd['ShortModeDescr'][im] + zeta = m['DampingRatio'] + freq = m['NaturalFreq_Hz'] + hasED = Desc.find('ED')>=0 + hasBD = Desc.find('BD')>=0 + hasAD = Desc.find('AD')>=0 + if (freq>freqRange[1] or freqposDampRange[1] or abs(zeta)0: + txt+='# --- Skipped (No ED/BD)\n' + for im in skippedEDBD: + txt+=mode2txtline(cd, im) + if len(skippedFreq)>0: + txt+='# --- Skipped (Frequency outside of `freqRange`={})\n'.format(freqRange) + for im in skippedFreq: + txt+=mode2txtline(cd, im) + if len(skippedDamp)>0: + txt+='# --- Skipped (Damping outside of `posDampRange`={})\n'.format(posDampRange) + for im in skippedDamp: + txt+=mode2txtline(cd, im) + if txtFileName is not None: + with open(txtFileName, 'w') as f: + f.write(txt) + return txt + +def campbellData2CSV(baseName, CD, modeID_table, modesDesc): + # Write summary of Campbell data and modes identification to several CSV files + # The files generated will be: + # - [BaseName '_ModesID.csv '] + # - [BaseName '_OP.csv '] + # - [BaseName '_PointsXX.csv'] for each operating point where XX is the index. + # + # INPUTS: + # - BaseName : basename that will be used to create the different CSV Files + # - ModesData: structure as returned by IdentifyModes + + nModes = modeID_table.shape[0] + nOP = modeID_table.shape[1] + filenames=[] + + # --- Write ModeID using Matlab format + filename='{:s}_ModesID.csv'.format(baseName) + filenames.append(filename) + with open(filename, 'w') as f: + f.write('Mode Number Table,' +','.join(['']*nOP) +'\n') + if np.isnan(CD[0]['WindSpeed']): + f.write('Rotor Speed (rpm),' +','.join([str(cd['RotSpeed_rpm']) for cd in CD]) +'\n') + else: + f.write('Wind Speed (mps),' +','.join([str(cd['WindSpeed']) for cd in CD]) +'\n') + for im, v in enumerate(modesDesc): + f.write(v[0]+',' +','.join([str(ID) for ID in modeID_table[im,:]]) +'\n') + + # --- Write OP using Matlab format + filename='{:s}_OP.csv'.format(baseName) + filenames.append(filename) + with open(filename, 'w') as f: + f.write('Operating Points,' +','.join(['']*nOP) +'\n') + f.write('Wind Speed (mps),' +','.join([str(cd['WindSpeed']) for cd in CD]) +'\n') + f.write('Rotor Speed (rpm),' +','.join([str(cd['RotSpeed_rpm']) for cd in CD]) +'\n') + + # --- Write Modes for each OP + for iOP,cd in enumerate(CD): + filename='{:s}_Point{:02d}.csv'.format(baseName,iOP+1) + filenames.append(filename) + with open(filename, 'w') as f: + Modes = cd['Modes'] + f.write(','.join(['Mode Number:,{:d},,,'.format(im+1) for im,m in enumerate(Modes)]) +'\n') + f.write(','.join(['Natural (undamped) frequency (Hz):, {:f},,,'.format(m['NaturalFreq_Hz']) for im,m in enumerate(Modes)]) +'\n') + f.write(','.join(['Damped frequency (Hz):, {:f},,,'.format(m['DampedFreq_Hz']) for im,m in enumerate(Modes)]) +'\n') + f.write(','.join(['Damping Ratio (-):, {:f},,,'.format(m['DampingRatio']) for im,m in enumerate(Modes)]) +'\n') + f.write(','.join(['Mode {:d} state description,State has max at mode {:d},Mode {:d} signed magnitude,Mode {:d} phase (deg),'.format(im+1,im+1,im+1,im+1) for im,m in enumerate(Modes)]) +'\n') + nComp = len(Modes[0]['DescStates']) + for iC in np.arange(nComp): + f.write(','.join(['{:s},{:d},{:f},{:f},'.format(m['DescStates'][iC].replace(',',' '),m['StateHasMaxAtThisMode'][iC],m['MagnitudePhase'][iC],m['PhaseDiff'][iC]) for im,m in enumerate(Modes)]) +'\n') + + return filenames[0] + + +def IdentifyModes(CampbellData): + """ + Attempts to perform an identification of the modes. + For now, the method is based on the energy content of the modes, and the state descriptions where the energy is maximum + + Original contribution by: Srinivasa B. Ramisett, ramisettisrinivas@yahoo.com, http://ramisetti.github.io + """ + #import pickle + #pickle.dump(CampbellData, open('C:/Work/_libs/python-toolbox/data/_CampbellData_UA4_DB2.pkl','wb')) + + + # --- Looking at states descriptions (of first run, first mode), to see if we are offshore. + # NOTE: DescStates is likely the same for all modes + DescStates = CampbellData[0]['Modes'][0]['DescStates'] + hasHeave = any(['heave' in s.lower() for s in DescStates]) + hasSurge = any(['surge' in s.lower() for s in DescStates]) + hasSway = any(['sway' in s.lower() for s in DescStates]) + hasYaw = any(['platform yaw' in s.lower() for s in DescStates]) + hasRoll = any(['platform roll tilt' in s.lower() for s in DescStates]) + hasPitch = any(['platform pitch tilt' in s.lower() for s in DescStates]) + hasEdge1Col = any(['1st edgewise bending-mode dof of blade collective' in s.lower() for s in DescStates]) + + # --- Setting up a list of modes with + modesDesc = [] + modesDesc.append( ['Generator DOF (not shown)' , 'ED Variable speed generator DOF, rad'] ) + # Platform DOFs + if hasSurge: + modesDesc.append( ['Platform surge', 'ED Platform horizontal surge translation DOF, m'] ) + if hasSway: + modesDesc.append( ['Platform sway', 'ED Platform horizontal sway translation DOF, m'] ) + if hasHeave: + modesDesc.append( ['Platform heave', 'ED Platform vertical heave translation DOF, m'] ) + if hasRoll: + modesDesc.append( ['Platform roll', 'ED Platform roll tilt rotation DOF, rad'] ) + if hasPitch: + modesDesc.append( ['Platform pitch', 'ED Platform pitch tilt rotation DOF, rad'] ) + if hasYaw: + modesDesc.append( ['Platform yaw', 'ED Platform yaw rotation DOF, rad'] ) + + modesDesc.append( ['1st Tower FA' , 'ED 1st tower fore-aft bending mode DOF, m'] ) + modesDesc.append( ['1st Tower SS' , 'ED 1st tower side-to-side bending mode DOF, m'] ) + modesDesc.append( ['1st Blade Flap (Regressive)' , 'ED 1st flapwise bending-mode DOF of blade (sine|cosine), m', r'Blade (sine|cosine) finite element node \d rotational displacement in Y, rad'] ) + modesDesc.append( ['1st Blade Flap (Collective)' , 'ED 1st flapwise bending-mode DOF of blade collective, m', r'Blade collective finite element node \d rotational displacement in Y, rad'] ) + modesDesc.append( ['1st Blade Flap (Progressive)' , 'ED 1st flapwise bending-mode DOF of blade (sine|cosine), m'] ) # , ... # 'Blade (sine|cosine) finite element node \d rotational displacement in Y, rad'] + modesDesc.append( ['1st Blade Edge (Regressive)' , 'ED 1st edgewise bending-mode DOF of blade (sine|cosine), m', r'Blade (sine|cosine) finite element node \d rotational displacement in X, rad'] ) + if hasEdge1Col: + modesDesc.append(['1st Blade Edge (Collective)', 'ED 1st edgewise bending-mode DOF of blade collective, m'] ) # , ... # 'Blade (sine|cosine) finite element node \d rotational displacement in Y, rad'] + modesDesc.append( ['1st Blade Edge (Progressive)' , 'ED 1st edgewise bending-mode DOF of blade (sine|cosine), m'] ) + modesDesc.append( ['1st Drivetrain Torsion' , 'ED Drivetrain rotational-flexibility DOF, rad'] ) + modesDesc.append( ['2nd Tower FA' , 'ED 2nd tower fore-aft bending mode DOF, m'] ) + modesDesc.append( ['2nd Tower SS' , 'ED 2nd tower side-to-side bending mode DOF, m'] ) + modesDesc.append( ['2nd Blade Flap (Regressive)' , 'ED 2nd flapwise bending-mode DOF of blade (sine|cosine), m'] ) + modesDesc.append( ['2nd Blade Flap (Collective)' , 'ED 2nd flapwise bending-mode DOF of blade collective, m', r'Blade collective finite element node \d rotational displacement in Y, rad'] ) + modesDesc.append( ['2nd Blade Flap (Progressive)' , 'ED 2nd flapwise bending-mode DOF of blade (sine|cosine), m'] ) + modesDesc.append( ['Nacelle Yaw (not shown)' , 'ED Nacelle yaw DOF, rad'] ) + + + nModes = int(len(modesDesc)) + nRuns = int(len(CampbellData)) + modeID_table=np.zeros((nModes,nRuns)).astype(int) + + + + def doesDescriptionMatch(description, listOfModePatterns): + """ loop through all mode desrption """ + for iModePattern, modeIDdescList in enumerate(listOfModePatterns): + modeIDName = modeIDdescList[0] + patternList = modeIDdescList[1:] # list of patterns for a given mode + found, pattern = doesDescriptionMatchPatternList(description, patternList) + if found: + return True, iModePattern, pattern + return False, -1, '' + + def doesDescriptionMatchPatternList(description, patternList): + """ loop through all patterns to find a match """ + for pattern in patternList: + # Looking for targetDesc into description + if re.search(pattern ,description, re.IGNORECASE)!=None: + return True, pattern + return False, '' + + + verbose=False + Levels=[1,2,3] + + + # --- Loop on operating points/Runs + for i in range(nRuns): + Modes = CampbellData[i]['Modes'] + nModes = len(Modes) + # Array of logical, False for Modes that are not identified + modesIdentified = [False] * nModes + modesSkipped = [False] * nModes + #verbose=verbose and i==0 # only display for first mode for now.. + #verbose=i==1 + + # --- Give an index to each mode so that we can easily identify them + for im, mode in enumerate(Modes): + mode['index']=im + + # --- Skip modes based on simple criteria + for im, mode in enumerate(Modes): + if mode['NaturalFreq_Hz'] < 1e-5 or mode['DampingRatio'] > 0.98: + modesSkipped[im]=True + + + + modesDescLocal = modesDesc.copy() + + # --- Level 1 - Find well-defined modes (modes which have only one Max) + if 1 in Levels: + for im, mode in enumerate(Modes): + if modesIdentified[im] or modesSkipped[im]: + continue # skip this mode since it has already been identified + stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==1)).flatten() + if len(stateMax)==1: + description = mode['DescStates'][stateMax[0]] + if description.startswith('AD'): + # We skipp the pure "AD" modes + modesSkipped[im] = True + continue + found, modeID, patternMatched = doesDescriptionMatch(description, modesDescLocal) + if found and modeID_table[modeID,i]==0: + modesDescLocal[modeID] = [None,] # we empty this mode patternlist so that it cannot be matched again + modesIdentified[im] = True + modeID_table[modeID,i] = im+1 # Using Matlab Indexing + if verbose: + print('L1 Mode {} identified using pattern: {}'.format(im+1,patternMatched)) + print(' String was: ', description) + #else: + # print('>>> Cannot identify mode with description {}. Update MBC3 script.'.format(description)) + + # --- Level 2 - Find modes with several max - Looping on mode pattern to respect expected frequency order + if 2 in Levels: + for modeID, modeIDdescList in enumerate(modesDescLocal): + modeIDName = modeIDdescList[0] + patternList = modeIDdescList[1:] + # Skip modes already identified above + if modeID_table[modeID,i]>0: + continue + if verbose: + print('------------------------- LEVEL 2 - LOOKING FOR MODE ',modeIDName) + + found = False; + # --- Loop on all non-identified modes in increasing order + im = 0; + for im, mode in enumerate(Modes): + if modesIdentified[im] or modesSkipped[im]: + continue # move to next mode + # List of component descriptions where this mode has maximum values + stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==1)).flatten() + descriptions = np.array(mode['DescStates'])[stateMax] + descriptions = descriptions[:7] # we keep only the first 7 descriptions + descriptionsED = [d for d in descriptions if d.startswith('ED')] + descriptionsBD = [d for d in descriptions if d.startswith('BD')] + descriptionsAD = [d for d in descriptions if d.startswith('AD')] + descriptionsMisc = [d for d in descriptions if d not in descriptionsED+descriptionsBD+descriptionsAD] + descriptions = descriptionsED+descriptionsBD+descriptionsMisc # NOTE: we skipp AD descriptions + j = 0; + for description in descriptions: + found, pattern = doesDescriptionMatchPatternList(description, patternList) + if found: + if verbose: + print('L2 Mode {} identified using pattern {}'.format(im+1,pattern)) + modeID_table[modeID,i] = im+1 # Using Matlab Indexing + modesDescLocal[modeID] = [None,] # we empty this mode patternlist so that it cannot be matched again + modesIdentified[im] = True; + break + if found: + break + if verbose: + print('>> modeIDTable',modeID_table[:,i]) + # We disqualify modes that had max and that didn't match anything: + for im, mode in enumerate(Modes): + if modesIdentified[im] or modesSkipped[im]: + continue # move to next mode + stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==1)).flatten() + if len(stateMax)>=1: + modesSkipped[im]=True + shortdescr = CampbellData[i]['ShortModeDescr'][im] + if verbose: + if shortdescr.find('ED')>=0: + print('>>>> short', CampbellData[i]['ShortModeDescr'][im]) + print('>>>> Problem in IdentifyModes. ED DOF found in level 2') + + if 3 in Levels: + # --- Level 3 - Try our best for modes with no max + # Loop on modes to be identified + for modeID, modeIDdescList in enumerate(modesDescLocal): + modeIDName = modeIDdescList[0] + patternList = modeIDdescList[1:] + + # Skip modes already identified above + if modeID_table[modeID,i]>0: + continue + if verbose: + print('------------------------- LEVEL 3 - LOOKING FOR MODE ',modeIDName) + + found = False; + # --- Loop on all non-identified modes in increasing order + im = 0; + while not found and im < nModes: # Loop on modes + mode = Modes[im] + if modesIdentified[im] or modesSkipped[im]: + pass + else: + # --- Otherwise, use as mode descriptions the other ones. Seems weird + stateMax=np.argwhere((mode['StateHasMaxAtThisMode']==0)).flatten() + descriptions = np.array(mode['DescStates'])[stateMax] + ADcounts = np.sum([s.startswith('AD') for s in descriptions[:5]]) + + descriptions2= np.array(mode['DescStates'])[mode['StateHasMaxAtThisMode']] + if len(descriptions2) == 0: + noMax=True + descriptions3 = mode['DescStates'][:5] + else: + noMax=False + if ADcounts<5: + descriptions=[d for d in descriptions if not d.startswith('AD')] +# descriptionsED = [d for d in descriptions if d.startswith('ED')] +# descriptionsBD = [d for d in descriptions if d.startswith('BD')] +# descriptionsAD = [d for d in descriptions if d.startswith('AD')] +# descriptionsMisc = [d for d in descriptions if d not in descriptionsED+descriptionsBD+descriptionsAD] +# descriptions = descriptionsED+descriptionsBD+descriptionsMisc # NOTE: we skipp AD descriptions + descriptions = descriptions[:5] # we keep only the first 7 descriptions + if verbose: + print('>>> Mode',mode['index'], modesIdentified[im], modesSkipped[im]) + print('>>>> descr', [replaceModeDescription(s) for s in descriptions]) + print('>>>> short', CampbellData[i]['ShortModeDescr'][im]) + else: + descriptions=[] +# #descriptions = descriptions[:7] # we keep only the first 7 descriptions + + j = 0; + while not found and j < len(descriptions): + j = j + 1; + if not found: + for targetDesc in patternList: + # Looking for targetDesc into list of descriptions + if re.search(targetDesc ,descriptions[j-1],re.IGNORECASE)!=None: + modeID_table[modeID,i] = im+1 # Using Matlab Indexing + if verbose: + print('L3 Mode {} identified as {}'.format(im+1,targetDesc)) + print(' String was: ', descriptions[j-1]) + modesIdentified[im] = True; + found = True; + break; + im=im+1; # increment counter + if verbose: + print('>> modeIDTable',modeID_table[:,i]) + + if verbose: + print('---------- Summary') + for j in np.arange(len(modeID_table)): + print('{:32s} {:d}'.format(modesDesc[j][0],modeID_table[j,i])) + print('---------- ') + + + return modeID_table,modesDesc + +def IdentifiedModesDict(CampbellData,modeID_table,modesDesc): + """ + To be called with the results of IdentifyModes. + Create a list of dictionaries to more easily interprete the result + """ + nOP = modeID_table.shape[1] + modesInfoPerOP=[] + for iOP in np.arange(nOP): + modesInfo={} + for i in np.arange(len(modesDesc)): + desc = modesDesc[i][0] + ID = int(modeID_table[i,iOP]) + if ID==0: + freq=np.nan + damp=np.nan + cont='' + else: + freq = np.around(CampbellData[iOP]['Modes'][ID-1]['NaturalFreq_Hz'],5) + damp = np.around(CampbellData[iOP]['Modes'][ID-1]['DampingRatio'],5) + cont = CampbellData[iOP]['ShortModeDescr'][ID-1] + modesInfo[desc]={'ID':ID,'f0':freq,'zeta':damp,'cont':cont} + modesInfoPerOP.append(modesInfo) + return modesInfoPerOP + +def extractShortModeDescription(mode): + """ + Look at which modes have max, append these description, perform shortening substitution + The description starts with noMax if no maximum exsits in this mode + The ElastoDyn modes are placed first + """ + descriptions = np.array(mode['DescStates'])[mode['StateHasMaxAtThisMode']] + if len(descriptions) == 0: + noMax=True + descriptions = mode['DescStates'][:5] + else: + noMax=False + sED = [s for s in descriptions if s.startswith('ED')] + sBD = [s for s in descriptions if s.startswith('BD')] + sMisc = [s for s in descriptions if s not in sED+sBD] + sAll = [replaceModeDescription(s) for s in sED+sBD+sMisc] + shortdescr = ' - '.join(sAll) + if noMax: + shortdescr = 'NoMax - ' + shortdescr + return shortdescr + + +def replaceModeDescription(s): + """ Perform substitutions to make the mode description shorter""" + s = s.replace('Blade','Bld') + s = s.replace('blade','Bld') + s = s.replace('First time derivative of','d/dt of') + s = s.replace('fore-aft bending mode DOF, m','FA') + s = s.replace('side-to-side bending mode DOF, m','SS') + s = s.replace('bending-mode DOF of Bld ','') + s = s.replace(' rotational-flexibility DOF, rad','-rot') + s = s.replace('rotational displacement in ','rot') + s = s.replace('translational displacement in ','trans') + s = s.replace('Platform horizontal surge translation DOF','Platform surge') + s = s.replace('Platform vertical heave translation DOF','Platform heave') + s = s.replace('Platform pitch tilt rotation DOF','Platform pitch') + s = s.replace(', rad','') + s = s.replace(', m','') + s = s.replace('finite element node ','N') + s = s.replace('cosine','cos') + s = s.replace('sine','sin') + s = s.replace('flapwise','FLAP') + s = s.replace('edgewise','EDGE') + s = s.replace('collective','coll.') + s = s.replace('rotZ','TORS-ROT') + s = s.replace('transX','FLAP-DISP') + s = s.replace('transY','EDGE-DISP') + s = s.replace('rotX','EDGE') + s = s.replace('rotY','FLAP') + return s + + +def PrettyStateDescriptions(DescStates, ndof2, performedTransformation): + idx=np.array(list(range(0,ndof2))+list(range(ndof2*2+1,len(DescStates)))) + tmpDS = [DescStates[i] for i in idx] + + if performedTransformation: + key_vals=[['BD_1','Blade collective'],['BD_2','Blade cosine'],['BD_3','Blade sine'],['blade 1','blade collective'], ['blade 2','blade cosine'], ['blade 3','Blade sine '], + ['PitchBearing1','Pitch bearing collective '], ['PitchBearing2','Pitch bearing cosine '], ['PitchBearing3','Pitch bearing sine '], + ['at Blade', 'at blade'], + ['of Blade', 'of blade'], + ] + # Replace Substrings from String List + sub = dict(key_vals) + for key, val in sub.items(): + for idx, ele in enumerate(tmpDS): + if key in ele: + tmpDS[idx] = ele.replace(key, val) + + StateDesc=tmpDS + else: + StateDesc = tmpDS + + for i in range(len( StateDesc )): + First = re.split(r'\(',StateDesc[i],2) + Last = re.split(r'\)',StateDesc[i],2) + + if len(First)>0 and len(Last)>0 and len(First[0]) != len(StateDesc[i]) and len( Last[-1] ) != len(StateDesc[i]): + StateDesc[i] = (First[0]).strip() + Last[-1]; + #print(StateDesc[i]) + + return StateDesc + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md new file mode 100644 index 0000000000..dd76b04bdf --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/README.md @@ -0,0 +1,15 @@ +This directory contains different working examples to work with the linearization package and the linearization file outputs of OpenFAST. + + +Examples using low-level functions: + +- `ex1a_OneLinFile_SimpleEigenAnalysis.py`: read a .lin file, extract the A matrix, and perform and eigenvalue analysis +- `ex1b_OneLinFile_NoRotation.py`: post-process one linearization file from OpenFAST (still using the MBC). + + +Examples using higher-level functions: + +- `ex3a_MultiLinFile_Campbell.py`: Script to to post-process several linearization files generated by different OpenFAST simulations. + +- `runCampbell.py`: Generates a Campbell diagram; write OpenFAST input files, run openfast, postprocess the linearization files, and generate the Campbell diagram plot. Requires an openfast executable. + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py new file mode 100644 index 0000000000..cf3213c3b4 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1a_OneLinFile_SimpleEigenAnalysis.py @@ -0,0 +1,44 @@ +""" +- Open a lin file generated by OpenFAST +- Perform a simple eigenvalue analysis of the A matrix (not performing MBC) + +- Example on how to extract submatrices of the A,B,C,D + +""" +import os +import numpy as np +from pyFAST.tools.eva import eigA +from pyFAST.input_output.fast_linearization_file import FASTLinearizationFile +scriptDir = os.path.dirname(__file__) + +# --- Open lin File +linFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_BladeOnly/Main.1.lin') +lin = FASTLinearizationFile(linFile) +print('Keys available:',lin.keys()) + +# --- Perform eigenvalue analysis +#fd, zeta, Q, f0 = eigA(lin['A']) +fd, zeta, Q, f0 = lin.eva() +print('Nat. freq. [Hz], Damping ratio [%]') +print(np.column_stack((np.around(f0,4),np.around(zeta*100,4)))) + +# --- Using dataframes instead of numpy arrays for convenient indexing of variables +dfs = lin.toDataFrame() +print('Dataframe available:',dfs.keys()) +A = dfs['A'] +print(A.columns) + +# --- Extract sub matrix for tower degrees of freedom +#EDdof = ['qt1FA_[m]' ,'qt1SS_[m]' ,'qt2FA_[m]' ,'qt2SS_[m]'] +#EDvel = ['d_qt1FA_[m/s]','d_qt1SS_[m/s]','d_qt2FA_[m/s]','d_qt2SS_[m/s]'] +#print(A.loc[EDvel,EDdof]) # - M^{-1}K (stiffness) +#print(A.loc[EDvel,EDvel]) # - M^{-1}D (damping) + + +if __name__=='__main__': + np.testing.assert_almost_equal(fd[:3], [0.672, 1.079,1.981],3) + np.testing.assert_almost_equal(zeta[:3]*100, [0.474, 0.471,0.489],3) + +if __name__=='__test__': + np.testing.assert_almost_equal(fd[:3], [0.672, 1.079,1.981],3) + np.testing.assert_almost_equal(zeta[:3]*100, [0.474, 0.471,0.489],3) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py new file mode 100644 index 0000000000..c760ba19a7 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex1b_OneLinFile_NoRotation.py @@ -0,0 +1,33 @@ +""" +Script to postprocess one linearization file from OpenFAST. +NOTE: this should not be used if the rotor is turning (multiple lin files would be needed). +This script would typically be used for a standstill analysis (no rotation), +or to compute modes of when only isolated degrees of freedom are turned on (and no rotation). + +NOTE: should match the script found in the matlab-toolbox +""" +import os +import numpy as np +import pyFAST.linearization as lin + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +# Script Parameters +BladeLen = 40.04 # Blade length, used to tune relative modal energy [m] +TowerLen = 55.59 # Tower length, used to tune relative modal energy [m] +lin_file = os.path.join(scriptDir,'../../../data/example_files/Standstill.1.lin') # Linearization file + +# Get Campbell Diagram Data for one Operating Point (CDDOP) given a .lin file +# Performing MBC (NOTE: not stricly necessary without rotation) +CDDOP, MBC = lin.getCampbellDataOP([lin_file], BladeLen=BladeLen, TowerLen=TowerLen) + +# Outputs to screen +Freq,Damp = lin.printCampbellDataOP(CDDOP, nModesMax=10, nCharMaxDesc=50) + +if __name__=='__main__': + pass + +if __name__=='__test__': + np.testing.assert_almost_equal(Freq[:3] ,[0.427, 0.450, 0.669], 3) + np.testing.assert_almost_equal(Damp[:3]*np.pi*2*100,[1.9505,2.1309,5.0649], 4) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py new file mode 100644 index 0000000000..773a95f27c --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex2a_MultiLinFiles_OneOP.py @@ -0,0 +1,38 @@ +""" +Script to postprocess multiple lin files from OpenFAST. + - the multiple lin files are obtained for the same periodic operating point (OP) + - the different lin files are assumed to be at different azimuthal positions + - MBC3 is performed to go from rotating frame to fixed frame + - binary mode file is written so that openFAST can be rerun + - viz file is written +""" +import os +import glob +import numpy as np +import pyFAST.linearization as lin + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +# --- Script Parameters +simDir = os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Land_Lin_Rotating/') # Simulation directory +fstFile = os.path.join(simDir,'./Main.fst') # fstFile, lin files will be assumed to be basename.i.lin +vizDict = {'VTKLinModes':15, 'VTKLinScale':10} # Options for .viz file. Default values are: VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None + + +# --- Get Campbell Diagram Data for one Operating Point (CDDOP) given an OpenFAST input file +# Perform MBC transformation based on all lin files found next to .fst file +CDDOP, MBCOP = lin.getCampbellDataOP(fstFile, writeModes=True, verbose=True) # alternatively provide a list of lin files + +# --- Write Viz file +vizfile = lin.writeVizFile(fstFile, verbose=True, **vizDict) + +# --- Outputs to screen +Freq,Damp = lin.printCampbellDataOP(CDDOP, nModesMax=10, nCharMaxDesc=50) + +if __name__=='__main__': + pass + +if __name__=='__test__': + np.testing.assert_almost_equal(Freq[:4], [0.588, 0.722 , 0.842, 0.937],3) + np.testing.assert_almost_equal(Damp[:4]*100, [63.106, 52.529, 44.01, 1.634],3) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py new file mode 100644 index 0000000000..6694a4f3d6 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/ex3a_MultiLinFile_Campbell.py @@ -0,0 +1,75 @@ +""" +Script to post-process several linearization files generated by different OpenFAST simulations. + +Each OpenFAST simulation is considered to be at a different operating point (OP). +Typically, this is run for several wind speed/RPM. + +A Campbell diagram is plotted, showing the frequencies and damping of each modes for each operating point. + +An attempt to identify the turbine modes is done by the script, but a manual sorting is usually needed. +This is done by opening the csv file generated (Campbell_ModesID.csv), and changing the indices. + +The "plot call" at the end of the script can then be repeated with the updated csv file. + + +""" +import os +import glob +import numpy as np +import matplotlib.pyplot as plt +import pyFAST.linearization as lin + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +# --- Script Parameters +fstFiles = glob.glob(os.path.join(scriptDir,'../../../data/linearization_outputs/*.fst')) # list of fst files where linearization were run, lin file will be looked for +# fstFiles = glob.glob(os.path.join(scriptDir,'../../../data/NREL5MW/5MW_Land_Lin_Rotating/*.fst')) # list of fst files where linearization were run, lin file will be looked for +fstFiles.sort() # Important for unittest + +# --- Step 3: Run MBC, identify Modes, generate CSV files, and binary modes +# Find lin files, perform MBC, and try to identify modes. A csv file is written with the mode IDs. +OP, Freq, Damp, UnMapped, ModeData, modeID_file = lin.postproCampbell(fstFiles, writeModes=True, verbose=True) + +# Edit the mode ID file manually to better identify/distribute the modes +print('[TODO] Edit this file manually: ',modeID_file) +# modeID_file='Campbell_ModesID_Sorted.csv' + +# --- Step 4: Plot Campbell +fig, axes, figName = lin.plotCampbellDataFile(modeID_file, 'ws', ylim=None) + + + +# --- Step 5: Generate visualization data (for advanced users) + +# --- Step 5a: Write viz files (Only useful if OpenFAST was run with WrVTK=3) +vizDict = {'VTKLinModes':2, 'VTKLinScale':10} # Options for .viz file. Default values are: VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None +vizFiles = lin.writeVizFiles(fstFiles, verbose=True, **vizDict) + +# --- Step 5b: Run FAST with VIZ files to generate VTKs +import pyFAST.case_generation.runner as runner +simDir = os.path.dirname(fstFiles[0]) +fastExe = os.path.join(scriptDir, '../../../data/openfast.exe') +### Option 1 write a batch file and run it +# batchfile = runner.writeBatch(os.path.join(simDir,'_RUNViz.bat'), vizFiles, fastExe=fastExe, flags='-VTKLin') +# runner.runBatch(batchfile) +### Option 2: direct calls +# runner.run_cmds(vizFiles, fastExe, showOutputs=True, flags=['-VTKLin']) + +# --- Step 5c: Convert VTKs to AVI - TODO +# % Also, this is experimental and users might need to adapt the inputs and batchfile content +# pvPython = 'pvpython'; % path to paraview-python binary +# pythonPlotScript = 'C:/Work/FAST/matlab-toolbox/Campbell/plotModeShapes.py'; % path to python plot script +# paraviewStateFile = 'C:/Work/FAST/matlab-toolbox/Campbell/ED_Surfaces.pvsm'; % path to paraview State file +# writeAVIbatch([simulationFolder '/_RunAVI.bat'], simulationFolder, operatingPointsFile, pvPython, pythonPlotScript, paraviewStateFile); + +if __name__=='__main__': +# plt.show() + pass + +if __name__=='__test__': + # Something weird is happening on github action, order is different, + np.testing.assert_almost_equal(Freq['1st_Tower_FA'][:2], [0.324446, 0.331407],3) + np.testing.assert_almost_equal(Damp['1st_Tower_FA'][:2], [0.00352, 0.06034],4) + np.testing.assert_almost_equal(OP['WS_[m/s]'], [0, 3],2) + np.testing.assert_almost_equal(OP['RotSpeed_[rpm]'], [0, 6.972],2) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py new file mode 100644 index 0000000000..0f0841588b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/examples/runCampbell.py @@ -0,0 +1,94 @@ +""" +Example script to create a Campbell diagram with OpenFAST +This script does not use the "trim" option, which means the user needs to provide a large simulation time (simTime) after which linearization will be done. + +NOTE: This script is only an example. + The example data is suitable for OpenFAST 2.5. + +Adapt this script to your need, by calling the different subfunctions presented. + +The script should be consistent with the one found in the matlab toolbox + +""" + +import numpy as np +import pandas as pd +import os +import pyFAST.linearization as lin +import pyFAST.case_generation.runner as runner + +import matplotlib.pyplot as plt + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +def campbell_example(writeFSTfiles=True, runFAST=True, postproLin=True): + """ Main flags + writeFSTfiles = True # Write OpenFAST input files based on template and operatingPointsFile + runFAST = True # Run OpenFAST + postproLin = True # Postprocess the linearization outputs (*.lin) + """ + + # --- Parameters to generate linearization input files + simulationFolder = os.path.join(scriptDir, '../../../data/NREL5MW/_5MW_Land_Lin_Trim/') # Output folder for input files and linearization (will be created) + templateFstFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Templates/Main.fst') # Main file, used as a template + operatingPointsFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Templates/LinearizationPoints_NoServo.csv') + nPerPeriod = 36 # Number of linearization per revolution + + # --- Parameters to run OpenFAST + fastExe = os.path.join(scriptDir, '../../../data/openfast.exe') # Path to a FAST exe (and dll) + + # --- Step 1: Write OpenFAST inputs files for each operating points + baseDict = {'DT':0.01} # Example of how inputs can be overriden (see case_gen.py templateReplace) + fstFiles = lin.writeLinearizationFiles(templateFstFile, simulationFolder, operatingPointsFile, nPerPeriod=nPerPeriod, baseDict=baseDict) + + # Create a batch script (optional) + runner.writeBatch(os.path.join(simulationFolder,'_RUN_ALL.bat'), fstFiles, fastExe=fastExe) + + # --- Step 2: run OpenFAST + if runFAST: + runner.run_fastfiles(fstFiles, fastExe=fastExe, parallel=True, showOutputs=True, nCores=4) + + # --- Step 3: Run MBC, identify Modes, generate CSV files, and binary modes + if postproLin: + OP, Freq, Damp, _, _, modeID_file = lin.postproCampbell(fstFiles, writeModes=True, verbose=True) + # Edit the modeID file manually to identify the modes + print('[TODO] Edit this file manually: ',modeID_file) + + # --- Step 4: Campbell diagram plot + csvFile = os.path.join(simulationFolder, 'Campbell_ModesID.csv') # <<< TODO Change me if manual identification is done + fig, axes, figName = lin.plotCampbellDataFile(csvFile, ws_or_rpm='ws', ylim=[0,4]) + # fig.savefig(figName+'.png') + + + + # --- Step 5: Generate visualization data (for advanced users) + + # --- Step 5a: Write viz files (Only useful if OpenFAST was run with WrVTK=3) + vizDict = {'VTKLinModes':10, 'VTKLinScale':10} # Options for .viz file. Default values are: + vizFiles = lin.writeVizFiles(fstFiles, verbose=True, **vizDict) + + # --- Step 5b: Run FAST with VIZ files to generate VTKs + simDir = os.path.dirname(fstFiles[0]) + ### Option 1 write a batch file and run it + # batchfile = runner.writeBatch(os.path.join(simDir,'_RUNViz.bat'), vizFiles, fastExe=fastExe, flags='-VTKLin') + # runner.runBatch(batchfile) + ### Option 2: direct calls + # runner.run_cmds(vizFiles, fastExe, showOutputs=True, flags=['-VTKLin']) + + # --- Step 5c: Convert VTKs to AVI - TODO + # % Also, this is experimental and users might need to adapt the inputs and batchfile content + # pvPython = 'pvpython'; % path to paraview-python binary + # pythonPlotScript = 'C:/Work/FAST/matlab-toolbox/Campbell/plotModeShapes.py'; % path to python plot script + # paraviewStateFile = 'C:/Work/FAST/matlab-toolbox/Campbell/ED_Surfaces.pvsm'; % path to paraview State file + # writeAVIbatch([simulationFolder '/_RunAVI.bat'], simulationFolder, operatingPointsFile, pvPython, pythonPlotScript, paraviewStateFile); + + +if __name__=='__main__': + campbell_example(runFAST=False) + plt.show() + +if __name__=='__test__': + campbell_example(runFAST=False, postproLin=False) + pass # this example needs an openfast binary + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py new file mode 100644 index 0000000000..9d0dc90584 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linearization.py @@ -0,0 +1,396 @@ +""" +Tools for OpenFAST linearization, that rely on pyFAST + +Generic tools are found in campbell.py and mbc + + +Main functions +-------------- +def campbell(caseFile, mainFst, tStart, nPerPeriod, workDir, toolboxDir, matlabExe, fastExe, + baseDict=None, generateInputs=True, runFast=True, runMBC=True, prefix='',sortedSuffix=None, ylim=None) + Wrapper function to perform a Campbell diagram study + +def writeLinearizationFiles(main_fst, workDir, operatingPointsFile, + nPerPeriod=36, baseDict=None, tStart=100, + LinInputs=0, LinOutputs=0) + Write FAST inputs files for linearization, to a given directory `workDir`. + + + + +Sub functions +------------- +def readOperatingPoints(OP_file): + Reads an "Operating Point" delimited file to a pandas DataFrame + +def defaultFilenames(OP, rpmSweep=None): + Generate default filenames for linearization based on RotorSpeed (for rpmSweep) or WindSpeed + +""" +import os, glob +import pandas as pd +import numpy as np +from pyFAST.linearization.campbell import postproCampbell, plotCampbell + +# TODO Alternative, Aeroelastic SE +#--- Used for functions campbell, +import pyFAST.case_generation.runner as runner +from pyFAST.input_output import FASTInputFile +from pyFAST.input_output import FASTInputDeck +from pyFAST.case_generation.case_gen import templateReplace + +def campbell(templateFstFile, operatingPointsFile, workDir, toolboxDir, fastExe, + nPerPeriod=36, baseDict=None, tStart=5400, trim=True, viz=False, + trimGainPitch = 0.001, trimGainGenTorque = 300, + maxTrq= None, + generateInputs=True, runFast=True, runMBC=True, prefix='',sortedSuffix=None, ylim=None, + removeTwrAzimuth=False, starSub=None, removeStatesPattern=None # Options for A matrices + ): + """ + Wrapper function to perform a Campbell diagram study + see: writeLinearizationFiles, postproLinearization and postproMBC for more description of inputs. + + INPUTS: + - templateFstFile Main file, used as a template + - operatingPointsFile input file with WS, RPM, Pitch, and potentially gen torque and tower top FA + - tStart Time after which linearization is done (need to reach periodic steady state) + - nPerPeriod Number of linearizations per revolution + - workDir Output folder for FAST input files and linearization (will be created) + - fastExe Full path to a FAST exe (and dll) + - toolboxDir path to matlab-toolbox + - matlabExe path the matlab or octave exe + - prefix: strings such that the output files will looked like: [folder prefix ] + - sortedSuffix use a separate file where IDs have been sorted + - runFast Logical to specify whether to run the simulations or not + - removeTwrAzimuth: if False do nothing + otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g: 'tower|Drivetrain' or '^AD' + see FASTLinearizationFile. + """ + Cases=pd.read_csv(caseFile); Cases.rename(columns=lambda x: x.strip(), inplace=True) + + # --- Generating input files + if generateInputs: + #GenTorq = Cases['GenTrq_[kNm]'] # TODO + # Generate input files + fastfiles= writeLinearizationFiles(mainFst, workDir, operatingPointsFile, + nPerPeriod=nPerPeriod, baseDict=baseDict, tStart=tStart, trim=trim, viz=viz, + trimGainPitch=trimGainPitch, trimGainGenTorque=trimGainGenTorque, + prefix=prefix, maxTrq=maxTrq) + # Create a batch script (optional) + runner.writeBatch(os.path.join(workDir,'_RUN_ALL.bat'),fastfiles,fastExe=fastExe) + + # --- Run the simulations + if runFast: + runner.run_fastfiles(fastfiles, fastExe=fastExe, parallel=True, showOutputs=True, nCores=3) + + # --- Postprocess linearization outputs (MBC + modes ID) + if runMBC: + OP, Freq, Damp, _, _, modeID_file = postproCampbell(FSTfilenames, removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern, suffix=suffix) + + # --- Plot Campbell + fig, axes = plotCampbell(OP, Freq, Damp, sx='WS_[m/s]', UnMapped=UnMapped, ylim=ylim) + #fig, axes = plotCampbell(Freq, Damp, sx='RPM_[rpm]', UnMapped=UnMapped) + # fig.savefig('{:s}CampbellWS.png'.format(suffix)) + return OP, Freq, Damp, fig + + +def readOperatingPoints(OP_file): + """ + Reads an "Operating Point" delimited file to a pandas DataFrame + + The standard column names are (in any order): + - RotorSpeed_[rpm], WindSpeed_[m/s], PitchAngle_[deg], GeneratorTorque_[Nm], Filename_[-] + + """ + OP=pd.read_csv(OP_file); + for c in OP.columns: + if c.lower().find('kn-m')>1 or c.lower().find('knm')>1: + OP[c]*=1000 + OP.rename(columns=lambda x: x.strip().lower().replace(' ','').replace('_','').replace('(','[').split('[')[0], inplace=True) + # Perform column replacements (tolerating small variations) + # format: old:new + OP.rename(columns={'wind':'windspeed','ws': 'windspeed'}, inplace=True) + OP.rename(columns={'rotorspeed': 'rotorspeed', 'rpm': 'rotorspeed','omega':'rotorspeed'}, inplace=True) + OP.rename(columns={'file': 'filename'}, inplace=True) + OP.rename(columns={'pitch': 'pitchangle', 'bldpitch':'pitchangle'}, inplace=True) + OP.rename(columns={'gentrq': 'generatortorque', 'gentorque':'generatortorque'}, inplace=True) + OP.rename(columns={'ttdspfa': 'ttdspfa'}, inplace=True) + OP.rename(columns={'oopdefl': 'oopdefl'}, inplace=True) + OP.rename(columns={'amean': 'a_bar', 'ameanfromct': 'a_bar'}, inplace=True) + + # Standardizing column names + OP.rename(columns={ + 'rotorspeed': 'RotorSpeed_[rpm]', + 'rotspeed': 'RotorSpeed_[rpm]', + 'windspeed' : 'WindSpeed_[m/s]', + 'pitchangle': 'PitchAngle_[deg]', + 'generatortorque': 'GeneratorTorque_[Nm]', + 'filename': 'Filename_[-]', + 'ttdspfa': 'TTDspFA_[m]', + 'oopdefl': 'OoPDefl_[m]', + 'a_bar': 'a_bar_[-]', + }, inplace=True) + if 'FileName_[-]' not in OP.columns: + OP['Filename_[-]']=defaultFilenames(OP) + return OP + +def defaultFilenames(OP, rpmSweep=None): + """ + Generate default filenames for linearization based on RotorSpeed (for rpmSweep) or WindSpeed + If RotorSpeed is a field, windspeed is preferred for filenames, unless, rpmSweep is set to true as input + + INPUTS: + - OP: structure with field RotorSpeed, and optionally WindSpeed + OPTIONAL INPUTS: + - rpmSweep : if present, overrides the logic: if true, rpm is used, otherwise ws + OUTPUTS: + - filenames: list of strings with default filenames for linearization simulations + """ + + if rpmSweep is None: + if 'WindSpeed_[m/s]' not in OP.columns: + rpmSweep=True + elif len(np.unique(OP['WindSpeed_[m/s]']))==1: + rpmSweep=True + else: + rpmSweep=False + nOP=len(OP['RotorSpeed_[rpm]']); + filenames=['']*nOP; + for iOP, line in OP.iterrows(): + if rpmSweep: + filenames[iOP]='rpm{:05.2f}.fst'.format(line['RotorSpeed_[rpm]']) + else: + filenames[iOP]='ws{:04.1f}.fst'.format(line['WindSpeed_[m/s]']) + return filenames + +def writeLinearizationFiles(main_fst, workDir, operatingPointsFile, + nPerPeriod=36, baseDict=None, tStart=5400, trim=True, viz=False, + trimGainPitch = 0.001, trimGainGenTorque = 300, + maxTrq= None, + LinInputs=0, LinOutputs=0): + """ + Write FAST inputs files for linearization, to a given directory `workDir`. + + + INPUTS: + - main_fst: path to an existing .fst file + This file (and the ones it refers to) will be used as templates. + Values of the templates can be modified using `baseDict`. + The parent directory of the main fst file will be copied to `workDir`. + - workDir: directory (will be created) where the simulation files will be generated + + - operatingPointsFile: csv file containing operating conditions + - nPerPeriod : number of linearization points per rotation (usually 12 or 36) + - baseDict : a dictionary of inputs files keys to be applied to all simulations + Ignored if not provided. + e.g. baseDict={'DT':0.01, 'EDFile|ShftTilt':-5, 'InflowFile|PLexp':0.0} + see templateReplaceGeneral. + - tStart: time at which the linearization will start. + When triming option is not available, this needs to be sufficiently large for + the rotor to reach an equilibrium + - trim: flag to use the trim option (more TODO) + - viz : flag to setup the files to use VTK vizualization of modes (more TODO) + - trimGainPitch : [only for OpenFAST>2.3] Gain for Pitch trim (done around Max Torque) + - trimGainGenTorque : [only for OpenFAST>2.3] Gain for GenTrq trim (done below Max Torque) + - maxTrq: maximum/rated generator torque in Nm, we'll use this to determine which trim to do + - LinInputs: linearize wrt. inputs (see OpenFAST documentation). {0,1,2, default:1} + - LinOutputs: linearize wrt. outputs (see OpenFAST documentation). {0,1, default:0} + + OUTPUTS: + - list of fst files created + """ + + # --- Optional values + if baseDict is None: + baseDict=dict() + + # --- Checking main fst file + deck = FASTInputDeck(main_fst, ['ED','AD']) + fst = deck.fst + ED = deck.fst_vt['ElastoDyn'] # TODO update using basedict + AD = deck.AD # TODO update using basedict + + # Update fst file with basedict if needed + fst_keys = fst.keys() + for k,v in baseDict.items(): + if k in fst_keys: + print('Updating fst file key {} from {} to {}'.format(k,fst[k],v)) + fst[k] = v + + # Sanity checks + if fst['CompAero']>0: + if AD is None: + raise Exception('Unable to read AeroDyn file but the file will be needed to generate cases.') + if ED is None: + raise Exception('Unable to infer BladeLen, ElastoDyn file not found.') + BladeLen = ED['TipRad'] - ED['HubRad'] + hasTrim = 'TrimCase' in fst.keys() + + + # --- Reading operating points + OP = readOperatingPoints(operatingPointsFile) + + if fst['CompServo']==1: + if 'GeneratorTorque_[Nm]' not in OP: + raise Exception('`GeneratorTorque_[Nm]` not found in operating point file. It needs to be provided when the controller is active (`CompServo>0`).') + if maxTrq is None: + maxTrq = np.max(OP['GeneratorTorque_[Nm]']) + # TODO, safety checks + # if SD['PCMode'),[0]) + # error('When CompServo is 1, the PCMode should be 0 or 1'); + # if ~ismember(GetFASTPar(paramSD,'VSContrl'),[0,1]) + # error('When CompServo is 1, the VSContrl should be 0 or 1'); + + if trim and not hasTrim: + trim=False + print('[WARN] Deactivating trim since not available in this version of OpenFAST') + if viz and not hasTrim: + viz=False + print('[WARN] Deactivating VTK vizualization since not available in this version of OpenFAST') + + if AD is not None: + if AD['WakeMod']==2 and AD['DBEMT_Mod'] in [1,3]: + if 'a_bar_[-]' not in OP.keys(): + print('[WARN] Axial induction `a` not present in Operating point file, but DBEMT needs `tau1_constant`. Provide this column, or make sure your value of `tau1_const` is valid') + + + # --- Generating list of parameters that vary based on the operating conditions provided + PARAMS = [] + for i, op in OP.iterrows(): + # Extract operating conditions (TODO, handling of missing fields) + ws = op['WindSpeed_[m/s]'] + rpm = op['RotorSpeed_[rpm]'] + pitch = op['PitchAngle_[deg]'] + filename = op['Filename_[-]'] + if 'TTDspFA_[m]' in op.keys(): + tt= op['TTDspFA_[m]'] + else: + tt=None + if 'OoPDefl_[m]' in op.keys(): + oop= op['OoPDefl_[m]'] + else: + oop=None + + # Main Flags + noAero=abs(ws)<0.001 + + nLinTimes = nPerPeriod + if abs(rpm)<0.001: + nLinTimes=1 + ws=1e-4 + + # Determine linearization times based on RPM and nPerPeriod + Omega = rpm/60*2*np.pi + if trim: + LinTimes=[9999]*nLinTimes + Tmax = tStart + else: + if abs(Omega)<0.001: + LinTimes = [tStart] + Tmax = tStart+1 + else: + T = 2*np.pi/Omega + LinTimes = np.linspace(tStart,tStart+T,nLinTimes+1)[:-1] + Tmax = tStart+1.01*T + # --- Creating "linDict", dictionary of changes to fast input files for linearization + linDict=dict() + linDict['__name__'] = os.path.splitext(filename)[0] + # --- Main fst options + linDict['TMax'] = Tmax + linDict['TStart'] = 0 + + if noAero: + if not viz: # viz require aerodyn.. + linDict['CompAero'] = 0 + linDict['CompInflow'] = 0 + # --- Linearization options + linDict['Linearize'] = True + if trim: + linDict['CalcSteady'] = True + if fst['CompServo']==1: + GenTrq= op['GeneratorTorque_[Nm]'] + trq_rat = np.abs((GenTrq -maxTrq))/maxTrq*100 + print('ws {:5.2f} - GenTrq {:9.1f} - ratio: {:9.2f} '.format(ws, GenTrq, trq_rat), end='') + if abs(op['GeneratorTorque_[Nm]']-maxTrq)/maxTrq*100 < 5 and (not noAero): + linDict['TrimCase'] = 3 # Adjust Pitch to get desired RPM + linDict['TrimGain'] = trimGainPitch; + print('Trim: {} - Gain: {}'.format(3, trimGainPitch)) + # TrimGain = .1 / (RotSpeed(iOP) * pi/30); %-> convert RotSpeed to rad/s + # TrimGain = TrimGain*0.1 + # NOTE: set rated speed to a small value so that Qgen=Qrated + linDict['ServoFile|VS_RtGnSp'] = 0.01 + else: + linDict['TrimCase'] = 2 # Adjust GenTorque to get desired RPM + linDict['TrimGain'] = trimGainGenTorque; + print('Trim: {} - Gain: {}'.format(2, trimGainGenTorque)) + # TrimGain = 3340 / (RotSpeed(iOP) * pi/30); %-> convert RotSpeed to rad/s + else: + # NOTE: in that case, trimming will just "wait", trim variable is not relevant + linDict['TrimCase'] = 3 + linDict['TrimGain'] = 0.001 + # TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only when CalcSteady=True] + # TrimTol - Tolerance for the rotational speed convergence [>eps] [used only when CalcSteady=True] + # TrimGain - Proportional gain for the rotational speed error (rad/(rad/s) or Nm/(rad/s)) [>0] [used only when CalcSteady=True] + # Twr_Kdmp - Damping factor for the tower (N/(m/s)) [>=0] [used only when CalcSteady=True] + # Bld_Kdmp - Damping factor for the blade (N/(m/s)) [>=0] [used only when CalcSteady=True] + else: + linDict['CalcSteady'] = False + linDict['NLinTimes'] = len(LinTimes) + linDict['LinTimes'] = list(LinTimes) + linDict['OutFmt'] = '"ES20.11E3"' # Important for decent resolution + linDict['LinInputs'] = LinInputs # 0: none, 1: standard, 2: to get full linearizations + linDict['LinOutputs'] = LinOutputs # 0: none, 1: based on outlist + # --- Mode shape vizualization options + if viz: + linDict['WrVTK'] = 3 + linDict['VTK_type'] = 1 + linDict['VTK_fields'] = True + linDict['VTK_fps'] = 30 + else: + linDict['WrVTK'] = 0 + # --- Aero options + if fst['CompAero']>0: + if AD['WakeMod']==2 and AD['DBEMT_Mod'] in [1,3]: + if 'a_bar_[-]' in OP.keys(): + a_bar= op['a_bar_[-]'] + linDict['AeroFile|tau1_const'] = np.around(1.1/(1-1.3*min(a_bar,0.5))*BladeLen/ws, 3) + print('>>> setting tau_1 to ', linDict['AeroFile|tau1_const']) + # linDict['AeroFile|WakeMod'] = 1 # Needed for linearization + # linDict['AeroFile|AFAeroMod'] = 1 # Needed for linearization + # linDict['AeroFile|FrozenWake'] = True # Needed for linearization + # --- Inflow options + if fst['CompInflow']>0: + linDict['InflowFile|WindType'] = 1 + linDict['InflowFile|HWindSpeed'] = ws + # --- ElastoDyn options + linDict['EDFile|BlPitch(1)'] = pitch + linDict['EDFile|BlPitch(2)'] = pitch + linDict['EDFile|BlPitch(3)'] = pitch + linDict['EDFile|RotSpeed'] = rpm + if tt is not None: + linDict['EDFile|TTDspFA'] = tt + if oop is not None: + linDict['EDFile|OoPDefl'] = oop + # --- Servo options + + # --- Merging linDict dictionary with user override inputs + for k,v in baseDict.items(): + if k in linDict and v != linDict[k]: + print('Overriding key {} with value {} (previous value {})'.format(k,v,linDict[k])) + linDict[k]=v + + PARAMS.append(linDict) + + # --- Generating all files in a workDir + refDir = os.path.dirname(main_fst) + main_file = os.path.basename(main_fst) + fastfiles = templateReplace(PARAMS,refDir,outputDir=workDir,removeRefSubFiles=True,main_file=main_file) + + return fastfiles + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py new file mode 100644 index 0000000000..cf9f4e1d48 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/linfile.py @@ -0,0 +1,639 @@ +############################################################# +# Extract OpenFAST Matrices from linearization files # +# Authors: Srinivasa B. Ramisetti # +# Created: 01-July-2020 # +# E-mail: ramisettisrinivas@yahoo.com # +# Web: http://ramisetti.github.io # +############################################################# +#!/usr/bin/env python + +import os, distutils +import collections +from itertools import islice +import numpy as np +import re +from pyFAST.input_output.fast_linearization_file import FASTLinearizationFile + +def _isbool(str): + flag=0 + if str=='T' or str=='True': + flag=1 + return flag + + +def findBladeTriplets(rotFrame, Desc, verbose=True): + + # Find the number of, and indices for, triplets in the rotating frame: + chkStr = [r'[Bb]lade \d', r'[Bb]lade [Rr]oot \d', r'BD_\d', r'[Bb]\d', r'[Bb]lade\d', r'PitchBearing\d', r'\d'] + + origDesc = Desc; + + # hack for ElastoDyn state names (remove unnecessary text in parenthesis) + for i in range(len(rotFrame)): + if Desc[i] is None: + raise Exception('Description not defined, likely a bug.') + ix = Desc[i].find('(internal DOF index = ') + if ix>0: + ix2 = Desc[i].find(')') + Desc[i] = Desc[i][:ix]+Desc[i][ix2+1:] + + + NTriplets = 0; # first initialize to zero + Triplets = []; + for i in range(len(rotFrame)): # loop through inputs/outputs/states + if rotFrame[i] == 'T': # this is in the rotating frame + Tmp = -1*np.ones(3) + foundTriplet = False + foundBladeNumber = False + for chk in chkStr: + BldNoCol = re.search(chk,Desc[i]) + if BldNoCol!=None: + foundBladeNumber = True + + Bldstr=BldNoCol.group() + # create another regular expression to find the + # exact match on a different blade: + strng = re.split(Bldstr,Desc[i],1) #this should return the strings before and after the match + + + FirstStr = strng[0] + Bldstr[:len(Bldstr)-1] + '.' + checkThisStr = FirstStr + strng[1] + + #we need to get rid of the special characters that + #may exist in Desc{}: + checkThisStr=checkThisStr.replace(')',r'\)').replace('(', r'\(').replace('^',r'\^') + FirstStr = FirstStr. replace(')',r'\)').replace('(', r'\(').replace('^',r'\^') + + k = int(Bldstr[len(Bldstr)-1]) + Tmp[k-1] = int(i) + break + + #print(Tmp,j) + + # find the other match values + if foundBladeNumber: + for j in range((i+1),len(rotFrame)): # loop through all remaining control inputs + #print(i, j) + if rotFrame[j]: # this is in the rotating frame + BldNoCol = re.search(checkThisStr, Desc[j]) + if BldNoCol!=None: + Num = re.search(FirstStr,Desc[j]).group(); + k = int(Num[len(Num)-1]); + Tmp[k-1] = int(j); # save the indices for the remaining blades + #TmpTmp=Tmp+1 + #print(BldNoCol.group(),i,j,k) + if ( (Tmp>-1).all() ): # true if all the elements of Tmp are nonzero; thus, we found a triplet of rotating indices + foundTriplet = True; + + Triplets.append(Tmp); # these are the indices for control input triplets in the rotating frame + + NTriplets = NTriplets + 1; # this is the number of control input triplets in the rotating frame + + # we'll set rotFrame to false so that we don't have to check the found channels again; also allows us to throw error if we have a rotating channel that doesn't have a unique match + for idx in Tmp: + id=int(idx) + rotFrame[id] = 0; + + break; + + if foundTriplet==False: + if verbose: + print('Rotating channel "', i, Desc[i], '" does not form a unique blade triplet. Blade(s) not found: ', np.array(np.where(Tmp == -1))+1 ) + else: + if verbose: + print( 'Could not find blade number in rotating channel "', Desc[i], '".') + #print(NTriplets) + #print(Triplets) + + return Triplets, NTriplets + +def reOrderByIdx_1D(arry,Indi): + tmp=[None]*len(arry) + j=0 + for i in Indi: + tmp[i]=arry[j] + j=j+1 + return tmp + +def reOrderByIdx_2D(arry,Indi,Indj): + #tmp=[[None]*arry.shape[0]]*arry.shape[1] + tmp=np.empty((arry.shape[0], arry.shape[1])) + #print(arry.shape, len(Indi), len(Indj)) + if arry.shape[0]!= len(Indi): + Indi=np.arange(0,arry.shape[0]) + if arry.shape[1]!= len(Indj): + Indj=np.arange(0,arry.shape[1]) + + p=0 + q=0 + for i in Indi: + q=0 + for j in Indj: + tmp[i][j]=arry[p][q] + q=q+1 + p=p+1 + return tmp + +def getStateOrderingIndx(matData): + + #StateOrderingIndx={} + StateOrderingIndx = np.arange(0,matData['NumStates']) + lastModName = ''; + lastModOrd = 0; + mod_nDOFs = 0; # number of DOFs in each module + sum_nDOFs2 = 0; # running total of second-order DOFs + sum_nDOFs1 = 0; # running total of first-order DOFs + indx_start = 0; # starting index of the modules + + for i in range(0,matData['NumStates']): + + tmp=(matData['DescStates'][i]); # name of the module whose states we are looking at + modName = tmp.split(' ')[0] + ModOrd = matData['StateDerivOrder'][i] + + if lastModName!=modName or lastModOrd!= ModOrd: + # this is the start of a new set of DOFs, so we'll set the + # indices for the last matrix + if lastModOrd == 2: + mod_nDOFs = int(mod_nDOFs/2); + #print('mmmm ', mod_nDOFs, indx_start, matData['ndof2'], i) + StateOrderingIndx[ indx_start :(indx_start+mod_nDOFs)] = sum_nDOFs2 + np.arange(0,mod_nDOFs); # q2 starts at 1 + StateOrderingIndx[ (indx_start+mod_nDOFs):(i)] = sum_nDOFs2 + matData['ndof2'] + np.arange(0,mod_nDOFs); # q2_dot starts at matData.ndof2 + 1 + + sum_nDOFs2 = sum_nDOFs2 + mod_nDOFs; + else: + if indx_start < mod_nDOFs: + StateOrderingIndx[indx_start:(indx_start+mod_nDOFs)] = sum_nDOFs1 + matData['NumStates2'] + np.arange(0,mod_nDOFs); # q1 starts at matData.NumStates2 + 1 + + sum_nDOFs1 = sum_nDOFs1 + mod_nDOFs; + + # reset for a new module (or new 1st-order states in the same module) + mod_nDOFs = 0; + + indx_start = i; #start of this module + lastModName = modName; + lastModOrd = matData['StateDerivOrder'][i]; + + mod_nDOFs = mod_nDOFs+1; + + + # repeat for the last module found: + if lastModOrd == 2: + mod_nDOFs = int(mod_nDOFs/2); + #print(mod_nDOFs,indx_start) + StateOrderingIndx[indx_start:(indx_start+mod_nDOFs)] = sum_nDOFs2 + np.arange(0,mod_nDOFs); # q2 starts at 1 + StateOrderingIndx[(indx_start+mod_nDOFs):matData['NumStates']] = sum_nDOFs2 + matData['ndof2'] + np.arange(0,mod_nDOFs); # q2_dot starts at matData.ndof2 + 1 + else: + StateOrderingIndx[indx_start:(indx_start+mod_nDOFs)] = sum_nDOFs1 + matData['NumStates2'] + np.arange(0,mod_nDOFs); # q1 starts at matData.NumStates2 + 1 + + #print(StateOrderingIndx) + return StateOrderingIndx + +def readOP(fid, n, defaultDerivOrder=2): + OP=[] + Var = {'RotatingFrame': [], 'DerivativeOrder': [], 'Description': []} + colNames=fid.readline().strip() + dummy= fid.readline().strip() + bHasDeriv= colNames.find('Derivative Order')>=0 + for i, line in enumerate(fid): + sp=line.strip().split() + if sp[1].find(',')>=0: + # Most likely this OP has three values (e.g. orientation angles) + # For now we discard the two other values + OP.append(float(sp[1][:-1])) + iRot=4 + else: + OP.append(float(sp[1])) + iRot=2 + Var['RotatingFrame'].append(sp[iRot]) + if bHasDeriv: + Var['DerivativeOrder'].append(int(sp[iRot+1])) + Var['Description'].append(' '.join(sp[iRot+2:]).strip()) + else: + Var['DerivativeOrder'].append(defaultDerivOrder) + Var['Description'].append(' '.join(sp[iRot+1:]).strip()) + if i>=n-1: + break + + tmp = dict() + tmp['x_op'] = OP + tmp['x_rotFrame'] = Var['RotatingFrame'] + tmp['x_DerivOrder'] = Var['DerivativeOrder'] + tmp['x_desc'] = Var['Description'] + + return tmp + + + +def readFASTMatrix(f): + name="" + m=0 + tmp=[] + for line in islice(f,1): + # copy matrix name to tmp_name + tmp_name=line.strip().split(':')[0] + # get matrix dimensions if matrix exists + if tmp_name != "": + m=int(line.strip().split(':')[1].split('x')[0]) + n=int(line.strip().split(':')[1].split('x')[1]) + + # copy matrix into tmp list + if m!=0: + name=tmp_name + for line in islice(f,m): + tmp.append([float(num) for num in line.split()]) + tmp=np.array(tmp) + + return name,tmp + +def ReadFASTLinear(filename, starSub=None, removeStatesPattern=None): + """ + Read one lin file. + + INPUTS: + - filename: linfile name, string. + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g: 'tower|Drivetrain' or '^AD' + see FASTLinearizationFile. + OUTPUTS: + - data: a dictionary with fields matching the MATLAB implementation. + """ + + # --- Read lin file + f = FASTLinearizationFile(filename, starSub=starSub, removeStatesPattern=removeStatesPattern) + + # --- Legacy structure. TODO, just use "f" + data={} + data['n_x'] = f.nx + data['n_u'] = f.nu + data['n_y'] = f.ny + data['n_z'] = f.nz + KeyMap={'t':'t'} + KeyMap.update({'Azimuth':'Azimuth', 'WindSpeed':'WindSpeed', 'RotSpeed':'RotSpeed'}) + KeyMap.update({'x_op':'x', 'xdot_op':'xdot', 'z_op':'z', 'y_op':'y'}) + for knew,kold in KeyMap.items(): + if kold in f.keys(): + data[knew] = f[kold] + data['WindSpeed'] = data['WindSpeed'] if data['WindSpeed'] is not None else np.nan + data['RotSpeed'] = data['RotSpeed'] if data['RotSpeed'] is not None else np.nan + data['Azimuth'] = np.mod(data['Azimuth'],2.0*np.pi) + if data['n_x']>0: + data['x_rotFrame'] = f['x_info']['RotatingFrame'] + data['x_DerivOrder'] = f['x_info']['DerivativeOrder'] + data['x_desc'] = f['x_info']['Description'] + data['xdot_desc'] = f['xdot_info']['Description'] + data['n_x2'] = np.sum(data['x_DerivOrder']== 2) + data['x_op'] = f['x'] + else: + data['n_x2'] = 0; + if data['n_z']>0: + data['z_desc'] = f['z_info']['Description'] + data['z_op'] = f['z'] + if data['n_u']>0: + data['u_rotFrame'] = f['u_info']['RotatingFrame'] + data['u_desc'] = f['u_info']['Description'] + data['u_op'] = f['u'] + if data['n_y']>0: + data['y_rotFrame'] = f['y_info']['RotatingFrame'] + data['y_desc'] = f['y_info']['Description'] + data['y_op'] = f['y'] + for k in ['A','B','C','D']: + if k in f.keys(): + data[k] = f[k] + return data, None + +def ReadFASTLinearLegacy(filename): + """ + Legacy reader, TODO remove in future release + """ + + def extractVal(lines, key): + for l in lines: + if l.find(key)>=0: + return l.split(key)[1].split()[0] + return None + + def readToMarker(fid, marker, nMax): + lines=[] + for i, line in enumerate(fid): + if i>nMax: + raise BrokenFormatError('`{}` not found in file'.format(marker)) + if line.find(marker)>=0: + break + lines.append(line.strip()) + return lines, line + + with open(filename) as f: + info = {} + data = {} + SetOfMatrices = 1 + info['name'] = os.path.splitext(os.path.basename(filename))[0] + + # --- + header, lastLine=readToMarker(f, 'Jacobians included', 30) + header.append(lastLine) + data['t'] = float(extractVal(header,'Simulation time:' )) + data['n_x'] = int(extractVal(header,'Number of continuous states:')) + data['n_xd'] = int(extractVal(header,'Number of discrete states:' )) + data['n_z'] = int(extractVal(header,'Number of constraint states:')) + data['n_u'] = int(extractVal(header,'Number of inputs:' )) + data['n_y'] = int(extractVal(header,'Number of outputs:' )) + bJac = extractVal(header,'Jacobians included in this file?') + if bJac: + SetOfMatrices = 2 + try: + data['Azimuth'] = float(extractVal(header,'Azimuth:')) + except: + data['Azimuth'] = None + try: + data['RotSpeed'] = float(extractVal(header,'Rotor Speed:')) # rad/s + except: + data['RotSpeed'] = np.nan + try: + data['WindSpeed'] = float(extractVal(header,'Wind Speed:')) + except: + data['WindSpeed'] = np.nan + + data['Azimuth']=np.mod(data['Azimuth'],2.0*np.pi) + try: + # skip next three lines + for line in islice(f,2): + pass + if data['n_x'] > 0: + temp = readOP(f, data['n_x']) + data['x_op']=temp['x_op'] + data['x_rotFrame']=temp['x_rotFrame'] + data['x_DerivOrder']=temp['x_DerivOrder'] + data['x_desc']=temp['x_desc'] + + # skip next three lines + for line in islice(f,2): + pass + + temp = readOP(f, data['n_x'], defaultDerivOrder=2) + data['xdot_op']=temp['x_op'] + data['xdot_desc']=temp['x_desc'] + + #(number of second-order states) + data['n_x2'] = sum(1 for i in data['x_DerivOrder'] if i == 2) + else: + data['n_x2'] = 0; + + + if data['n_xd'] > 0: + # skip next three lines + for line in islice(f,2): + pass + temp = readOP(f, data['n_xd'], defaultDerivOrder=2) + data['xd_op']=temp['x_op'] + data['xd_desc']=temp['x_desc'] + if data['n_z'] > 0: + # skip next three lines + for line in islice(f,2): + pass + temp = readOP(f, data['n_z'], defaultDerivOrder=0) + data['z_op']=temp['x_op'] + data['z_desc']=temp['x_desc'] + if data['n_u'] > 0: + # skip next three lines + for line in islice(f,2): + pass + temp = readOP(f, data['n_u'], defaultDerivOrder=0) + data['u_op']=temp['x_op'] + data['u_desc']=temp['x_desc'] + data['u_rotFrame']=temp['x_rotFrame'] + if data['n_y'] > 0: + # skip next three lines + for line in islice(f,2): + pass + temp = readOP(f, data['n_y'], defaultDerivOrder=0) + data['y_op']=temp['x_op'] + data['y_desc']=temp['x_desc'] + data['y_rotFrame']=temp['x_rotFrame'] + + # skip next one line + for line in islice(f,4): + pass + + mat_names=[] + while True: + name,mat=readFASTMatrix(f) + if not name: + break; + mat_names.append(name) + data[name]=mat + + return data, info + + except (ValueError, AssertionError): + raise + + +def get_Mats(FileNames, verbose=True, removeTwrAzimuth=False, starSub=None, removeStatesPattern=None): + """ + Extra main data from a list of lin files. + INPUTS: + - FileNames : list of lin files + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g: 'tower|Drivetrain' or '^AD' + see FASTLinearizationFile. + - removeTwrAzimuth: if False do nothing + otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). + + """ + NAzimStep = len(FileNames) + data = [None]*NAzimStep + # --- Read all files + for iFile, filename in enumerate(FileNames): + #data[iFile], _ = ReadFASTLinearLegacy(FileNames[iFile]); + data[iFile],_= ReadFASTLinear(FileNames[iFile], starSub=starSub, removeStatesPattern=removeStatesPattern); + Azimuth = np.array([d['Azimuth'] for d in data])*180/np.pi + # --- Sort by azimuth, not required, but filenames are not sorted, nor are the lin times azimuth + ISort = np.argsort(Azimuth) + Azimuth = Azimuth[ISort] + data = [data[i] for i in ISort] + FileNames = [FileNames[i] for i in ISort] + # --- Remove some azimuth + if removeTwrAzimuth: + IDiscard = [i for i,a in enumerate(Azimuth) if np.any(np.abs(np.array([60,180,300])-a)<4) ] + n=len(FileNames[0]); sfmt='{:'+str(n+2)+'s}' + for i in IDiscard: + print(' discard: '+sfmt.format(FileNames[i]) + ' (psi={:5.1f})'.format(Azimuth[i])) + data = [d for i,d in enumerate(data) if i not in IDiscard] + NAzimStep= len(data) + + + matData={} + matData['NAzimStep']= NAzimStep; + + # --- Using last azimuth to initial some of the "matData" variables + # Input data from linearization files + matData['NumStates'] = int(data[NAzimStep-1]['n_x']); + matData['NumStates2'] = int(data[NAzimStep-1]['n_x2']); + + #return data, matData + matData['ndof1'] = int(matData['NumStates'] - matData['NumStates2']); # number of first-order states = number of first-order DOFs + matData['ndof2'] = int(data[NAzimStep-1]['n_x2'] / 2); # half the number of second-order states = number of second-order DOFs + #% matData['ndof'] = matData['ndof2'] + matData['ndof1']; #half the number of second-order states plus the number of first-order states (i.e., states that aren't derivatives) + + matData['NumInputs'] = int(data[NAzimStep-1]['n_u']); + matData['NumOutputs'] = int(data[NAzimStep-1]['n_y']); + + # allocate space for these variables + matData['Azimuth'] = np.zeros(NAzimStep); + matData['Omega'] = np.zeros(NAzimStep); + matData['OmegaDot'] = np.zeros(NAzimStep); + matData['WindSpeed'] = np.zeros(NAzimStep)*np.nan; + + if matData['NumStates'] > 0: + matData['DescStates'] = data[NAzimStep-1]['x_desc']; + matData['StateDerivOrder'] = data[NAzimStep-1]['x_DerivOrder']; + matData['xdop'] = np.zeros((matData['NumStates'], NAzimStep)) + matData['xop'] = np.zeros((matData['NumStates'], NAzimStep)) + matData['A'] = np.zeros((matData['NumStates'], matData['NumStates'], NAzimStep)) + + if matData['NumInputs'] > 0: + matData['DescCntrlInpt'] = data[NAzimStep-1]['u_desc']; + matData['u_op'] = np.zeros((matData['NumInputs'],NAzimStep)) + if matData['NumStates']>0: + matData['B'] = np.zeros((matData['NumStates'], matData['NumInputs'],NAzimStep)) + + if matData['NumOutputs'] > 0: + matData['DescOutput'] = data[NAzimStep-1]['y_desc'] + matData['y_op'] = np.zeros((matData['NumOutputs'],NAzimStep)) + + if matData['NumStates'] > 0: + matData['C'] = np.zeros((matData['NumOutputs'], matData['NumStates'], NAzimStep)) + if matData['NumInputs'] > 0: + matData['D'] = np.zeros((matData['NumOutputs'], matData['NumInputs'], NAzimStep)) + + # Reorder state matrices so that they follow the {q2, q2_dot, q1} + # format that is assumed in the MBC3 equations. + if matData['NumStates'] > 0: + # keep StateOrderingIndx for applying inverse of MBC3 later + # (to visualize mode shapes) + matData['StateOrderingIndx'] = getStateOrderingIndx(matData) + + sortedIndx=matData['StateOrderingIndx'] + #print(sortedIndx) + x_rotFrame= reOrderByIdx_1D(data[NAzimStep-1]['x_rotFrame'],sortedIndx) + matData['DescStates'] = reOrderByIdx_1D(data[NAzimStep-1]['x_desc'],sortedIndx) + matData['StateDerivOrder'] = reOrderByIdx_1D(data[NAzimStep-1]['x_DerivOrder'],sortedIndx) + + # --- Store file data into matData + for iFile in np.arange(0,NAzimStep): + matData['Omega'][iFile] = data[iFile]['RotSpeed'] ; + matData['Azimuth'][iFile] = data[iFile]['Azimuth']*180/np.pi; + matData['WindSpeed'][iFile] = data[iFile]['WindSpeed'] + + if 'A' in data[iFile]: + matData['A'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['A'],sortedIndx,sortedIndx) + #print('size of matData[A] for file ', iFile, ' is :', matData['A'].shape) + if 'B' in data[iFile]: + matData['B'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['B'],sortedIndx,np.arange(0,matData['NumStates'])) + #print('size of matData[B] for file ', iFile, ' is :', matData['B'].shape) + if 'C' in data[iFile]: + matData['C'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['C'],np.arange(0,matData['NumStates']),sortedIndx) + #print('size of matData[C] for file ', iFile, ' is :', matData['C'].shape) + if 'D' in data[iFile]: + matData['D'][:,:,iFile]=reOrderByIdx_2D(data[iFile]['D'],sortedIndx,sortedIndx) + #print('size of matData[D] for file ', iFile, ' is :', matData['D'].shape) + + if 'x_op' in data[iFile]: + matData['xop'][:,iFile] = reOrderByIdx_1D(data[iFile]['x_op'],sortedIndx) + #print('matData[xop] for file ', iFile,' is :',(matData['xop'][:,iFile])) + if 'xdot_op' in data[iFile]: + matData['xdop'][:,iFile] = reOrderByIdx_1D(data[iFile]['xdot_op'],sortedIndx) + #print('matData[xdop] for file ', iFile,' is :',(matData['xdop'][:,iFile])) + + if 'u_op' in data[iFile]: + matData['u_op'][:,iFile] = data[iFile]['u_op'] + + if 'y_op' in data[iFile]: + matData['y_op'][:,iFile] = data[iFile]['y_op'] + + + # Find the azimuth-averaged linearized 1st order state matrices: + if 'A' in matData: + matData['Avgxdop'] = np.mean(matData['xdop'],axis=1) + matData['Avgxop'] = np.mean(matData['xop'], axis=1) + matData['AvgA'] = np.mean(matData['A'],axis=2) + + #print(matData['AvgA']) + if 'B' in matData: + matData['AvgB'] = np.mean(matData['B'],axis=2) + + if 'C' in matData: + matData['AvgC'] = np.mean(matData['C'],axis=2) + + if 'D' in matData: + matData['AvgD'] = np.mean(matData['D'],axis=2) + + + foundED = True; + for i in range(matData['ndof2']): + # find the starting index of the string 'DOF_GeAz' + if (matData['DescStates'][i].find('DOF_GeAz') != -1): + matData['Omega'] = matData['xdop'][i,:] + matData['OmegaDot'] = matData['xdop'][i+matData['ndof2'],:] + foundED = True + break + + for i in range(matData['ndof2']): + # find the starting index of the string 'DOF_DrTr' + if (matData['DescStates'][i].find('DOF_DrTr') != -1): + matData['Omega'] = matData['Omega'] + matData['xdop'][i,:] #This always comes after DOF_GeAz so let's just add it here (it won't get written over later). + matData['OmegaDot'] = matData['OmegaDot'] + matData['xdop'][i+matData['ndof2'],:] + foundED = True + break + + if not foundED: + for i in range(matData['ndof2']): + # find the starting index of the string 'Gearbox_Rot' + if (matData['DescStates'][i].find('MBD Gearbox_Rot') != -1): + matData['Omega'] = matData['xdop'][i,:] + matData['OmegaDot'] = matData['xdop'][i+matData['ndof2'],:] + break + + #print("\n".join(matData['DescStates'])) + #exit() + # ----------- Find multi-blade coordinate (MBC) transformation indices ---- + + # Find the indices for, state triplets in the rotating frame + # (note that we avoid the "first time derivative" states) + if matData['ndof2'] > 0: + matData['RotTripletIndicesStates2'], matData['n_RotTripletStates2'] = findBladeTriplets(x_rotFrame[0:matData['ndof2']],matData['DescStates'][0:matData['ndof2']], verbose=verbose) + else: + matData['RotTripletIndicesStates2'] = []; + matData['n_RotTripletStates2'] = 0; + + if matData['ndof1'] > 0: + matData['RotTripletIndicesStates1'], matData['n_RotTripletStates1'] = findBladeTriplets( x_rotFrame[matData['NumStates2']:] ,matData['DescStates'][matData['NumStates2']:] , verbose=verbose); + else: + matData['RotTripletIndicesStates1'] = []; + matData['n_RotTripletStates1'] = 0; + + # Find the indices for control input triplets in the rotating frame: + if matData['NumInputs'] > 0: + matData['RotTripletIndicesCntrlInpt'], matData['n_RotTripletInputs'] = findBladeTriplets(data[0]['u_rotFrame'],matData['DescCntrlInpt'], verbose=verbose ); + else: + matData['RotTripletIndicesCntrlInpt'] = []; + matData['n_RotTripletInputs'] = 0; + + # Find the indices for output measurement triplets in the rotating frame: + if (matData['NumOutputs'] > 0 ): + matData['RotTripletIndicesOutput'], matData['n_RotTripletOutputs'] = findBladeTriplets(data[0]['y_rotFrame'],matData['DescOutput'], verbose=verbose ); + else: + matData['RotTripletIndicesOutput'] = []; + matData['n_RotTripletOutputs'] = 0; + + return matData, data + +if __name__ == '__main__': + madData,dat = get_Mats(['file.lin']) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py new file mode 100644 index 0000000000..9bfee75aeb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/mbc.py @@ -0,0 +1,523 @@ +""" + +""" +import numpy as np +import scipy.linalg as scp +import os +from pyFAST.linearization.linfile import get_Mats + + +# --------------------------------------------------------------------------------} +# --- Utils +# --------------------------------------------------------------------------------{ +def get_tt_inverse(sin_col, cos_col): + + c1 = cos_col[0]; + c2 = cos_col[1]; + c3 = cos_col[2]; + + s1 = sin_col[0]; + s2 = sin_col[1]; + s3 = sin_col[2]; + + ttv = [ [c2*s3 - s2*c3, c3*s1 - s3*c1, c1*s2 - s1*c2], + [ s2 - s3 , s3 - s1, s1 - s2 ], + [ c3 - c2 , c1 - c3, c2 - c1 ] ] + ttv = ttv/(1.5*np.sqrt(3)); + + return ttv + +def get_new_seq(rot_triplet,ntot): +# rot_triplet is size n x 3 + #print('rot_triplet ', len(rot_triplet)) + rot_triplet=np.array(rot_triplet,dtype=int) + if (rot_triplet.size==0): + nRotTriplets=0 + nb=0 + #return np.array([]),0,0; + else: + nRotTriplets,nb = rot_triplet.shape; + + #print(nRotTriplets,nb,rot_triplet.flatten()) + + if (nb != 3 and nRotTriplets != 0 and ntot!= 0): + print('**ERROR: the number of column vectors in the rotating triplet must equal 3, the num of blades'); + new_seq = np.range(1,ntot) + else: + non_rotating = np.ones(ntot,dtype=int); + #print(non_rotating) + non_rotating[rot_triplet.flatten()] = 0; # if they are rotating, set them false; + a=np.array(np.nonzero(non_rotating)).flatten() + b=(rot_triplet.reshape(nRotTriplets*nb, 1)).flatten() + new_seq = np.concatenate((a,b)); + + #print(new_seq) + return new_seq,nRotTriplets,nb + +def eiganalysis(A, ndof2=None, ndof1=None): + """ """ + mbc={} + m, ns = A.shape; + if(m!=ns): + raise Exception('**ERROR: the state-space matrix is not a square matrix.'); + + if ndof2 is None: + # Assume that all DOF are second order + ndof1 = 0; + ndof2 = int(ns/2) + + if np.mod(ns,2) != 0: + raise Exception('**ERROR: the input matrix is not of even order.'); + elif ndof1 is None: + # Assume that first order states are "reminder" + ndof1 = ns - 2*ndof2; + if ndof1 < 0: + raise Exception('**ERROR: ndof2 must be no larger than half the dimension of the state-space matrix.'); + else: + if ns != int(2*ndof2 + ndof1): + raise Exception('**ERROR: the dimension of the state-space matrix must equal 2*ndof2 + ndof1.'); + + ndof = ndof2 + ndof1; + + # Matlab code - KEEP ME + #[origEigenVects, origEvals] = eig(A,'vector'); %,'nobalance' + #positiveImagEvals = find( imag(origEvals) > 0); + #mbc.Evals = origEvals(positiveImagEvals); + #mbc.EigenVects = origEigenVects([1:ndof2 (ndof2*2+1):ns],positiveImagEvals); % save q2 and q1, throw away q2_dot + # EigenVects_save = origEigenVects(:,positiveImagEvals); % save these for VTK visualization; + #real_Evals = real(mbc.Evals); + #imag_Evals = imag(mbc.Evals); + #mbc.NaturalFrequencies = sqrt( real_Evals.^2 + imag_Evals.^2 ); + + origEvals, origEigenVects = np.linalg.eig(A); #,'nobalance' + # errorInSolution = norm(A * mbc.EigenVects - mbc.EigenVects* diag(mbc.EigenVals) ) + # these eigenvalues aren't sorted, so we just take the ones with + # positive imaginary parts to get the pairs for modes with damping < 1: + positiveImagEvals = np.argwhere( origEvals.imag > 0.0); + + mbc['Evals'] = origEvals[positiveImagEvals]; + row=np.array(list(range(0,ndof2))+list(range(ndof2*2+1,ns))) + col=positiveImagEvals + + mbc['EigenVects']=origEigenVects[row,col].transpose(); # save q2 and q1, throw away q2_dot + EigenVects_save=origEigenVects[:,positiveImagEvals]; # save these for VTK visualization; + + real_Evals = mbc['Evals'].real; + imag_Evals = mbc['Evals'].imag; + + mbc['NaturalFrequencies'] = np.sqrt( real_Evals**2 + imag_Evals**2 ); + mbc['DampRatios'] = -real_Evals/mbc['NaturalFrequencies'] + mbc['DampedFrequencies'] = imag_Evals; + + mbc['NumRigidBodyModes'] = ndof - len(positiveImagEvals); + + mbc['NaturalFreqs_Hz'] = mbc['NaturalFrequencies']/(2.0*np.pi) + mbc['DampedFreqs_Hz'] = mbc['DampedFrequencies']/(2.0*np.pi); + mbc['MagnitudeModes'] = np.abs(mbc['EigenVects']); + mbc['PhaseModes_deg'] = np.angle(mbc['EigenVects'])*180.0/np.pi; + return mbc, EigenVects_save[:,:,0] + +# --------------------------------------------------------------------------------} +# --- Main function +# --------------------------------------------------------------------------------{ +def fx_mbc3(FileNames, verbose=True, starSub=None, removeStatesPattern=None, removeTwrAzimuth=False): + """ + Perform MBC2 funciton based on a list of lin files. + NOTE: variable names and data structure match MATLAB implementation. + + INPUTS: + - FileNames: list of lin files for a given operating point + + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g: 'tower|Drivetrain' or '^AD' + see FASTLinearizationFile. + - removeTwrAzimuth: if False do nothing + otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). + + NOTE: unlike the matlab function, fx_mbc3 does not write the modes for VTK visualization + Instead use the wrapper function def getCDDOP from pyFAST.linearization.tools + + Original contribution by: Srinivasa B. Ramisett, ramisettisrinivas@yahoo.com, http://ramisetti.github.io + """ + + MBC={} + matData, _ = get_Mats(FileNames, verbose=verbose, starSub=starSub, removeStatesPattern=removeStatesPattern, removeTwrAzimuth=removeTwrAzimuth) + + # print('matData[Omega] ', matData['Omega']) + # print('matData[OmegaDot] ', matData['OmegaDot']) + + MBC['DescStates'] = matData['DescStates'] # save this in the MBC type for possible campbell_diagram processing later + MBC['ndof2'] = matData['ndof2'] + MBC['ndof1'] = matData['ndof1'] + MBC['RotSpeed_rpm'] = np.mean(matData['Omega'])*(30/np.pi); #rad/s to rpm + MBC['WindSpeed'] = np.mean(matData['WindSpeed']) # NOTE: might be NaN for old files + + # print('RotSpeed_rpm ',MBC['RotSpeed_rpm']) + # print('ndof1 ', MBC['ndof1']) + # print('ndof2 ', MBC['ndof2']) + # print(matData['RotTripletIndicesStates2']) + + # TODO infer number of blades from ElastoDyn + # TODO differentiate between number of blades, and the "nb" for MBC + # nb = 3; % number of blades required for MBC3 + # ---------- Multi-Blade-Coordinate transformation ------------------------------------------- + new_seq_dof2, dummy, nb = get_new_seq(matData['RotTripletIndicesStates2'],matData['ndof2']); # these are the first ndof2 states (not "first time derivative" states); these values are used to calculate matrix transformations + new_seq_dof1, dummy, nb2 = get_new_seq(matData['RotTripletIndicesStates1'],matData['ndof1']); # these are the first-order ndof1 states; these values are used to calculate matrix transformations + + nb = max(nb,nb2); + if (nb==0): + #print('*** fx_mbc3: no states were found, so assuming turbine has 3 blades. ***') + #nb = 3 # TODO, somehow in the past, we assumed 3 blades. + print('*** fx_mbc3: no states were found. Setting number of blades to 0. Skipping MBC3 ***') + + + new_seq_states=np.concatenate((new_seq_dof2, new_seq_dof2+matData['ndof2'])) + if new_seq_dof1.size!=0: + new_seq_states=np.concatenate((new_seq_states,new_seq_dof1+matData['NumStates2'])) + + #new_seq_states = [new_seq_dof2; new_seq_dof2+matData['ndof2']; new_seq_dof1+matData['NumStates2']]; # combine the second-order states, including "first time derivatives", with first-order states (assumes ordering of displacements and velocities in state matrices); these values are used to calculate matrix transformations + # second-order NonRotating q2, second-order Rotating q2, + # second-order NonRotating q2_dot, second-order Rotating q2_dot, + # first-order NonRotating q1, first-order Rotating q1 + + + if nb == 3: + MBC['performedTransformation'] = True; + + if matData['n_RotTripletStates2'] + matData['n_RotTripletStates1'] < 1: + print('*** There are no rotating states. MBC transformation, therefore, cannot be performed.'); + + # perhaps just warn and perform eigenanalysis anyway? + if (matData['n_RotTripletStates2']*nb > matData['ndof2']): + print('**ERROR: the rotating second-order dof exceeds the total num of second-order dof'); + elif (matData['n_RotTripletStates1']*nb > matData['ndof1']): + print('**ERROR: the rotating first-order dof exceeds the total num of first-order dof'); + + new_seq_inp,dummy,dummy = get_new_seq(matData['RotTripletIndicesCntrlInpt'],matData['NumInputs']); + new_seq_out,dummy,dummy = get_new_seq(matData['RotTripletIndicesOutput'],matData['NumOutputs']); + + n_FixFrameStates2 = matData['ndof2'] - matData['n_RotTripletStates2']*nb; # fixed-frame second-order dof + n_FixFrameStates1 = matData['ndof1'] - matData['n_RotTripletStates1']*nb; # fixed-frame first-order dof + n_FixFrameInputs = matData['NumInputs'] - matData['n_RotTripletInputs']*nb; # fixed-frame control inputs + n_FixFrameOutputs = matData['NumOutputs'] - matData['n_RotTripletOutputs']*nb; # fixed-frame outputs + + #print(n_FixFrameOutputs,n_FixFrameInputs, n_FixFrameStates1, n_FixFrameStates2) + + if ( len(matData['Omega']) != matData['NAzimStep']): + print('**ERROR: the size of Omega vector must equal matData.NAzimStep, the num of azimuth steps') + if ( len(matData['OmegaDot']) != matData['NAzimStep']): + print('**ERROR: the size of OmegaDot vector must equal matData.NAzimStep, the num of azimuth steps'); + + + nLin = matData['A'].shape[-1] + MBC['A'] = np.zeros(matData['A'].shape) + MBC['B'] = np.zeros((len(new_seq_states),len(new_seq_inp),matData['NAzimStep'])) + if 'C' in matData.keys(): + MBC['C']=np.zeros(matData['C'].shape) + else: + MBC['C']=np.zeros((0,0,nLin)) + if 'D' in matData.keys(): + MBC['D']=np.zeros(matData['D'].shape) + else: + MBC['D']=np.zeros((0,0,nLin)) + + # print('new_seq_inp ',new_seq_inp) + # print('new_seq_out ',new_seq_out) + # print('new_seq_states ', new_seq_states) + + # begin azimuth loop + for iaz in reversed(range(matData['NAzimStep'])): + #(loop backwards so we don't reallocate memory each time [i.e. variables with iaz index aren't getting larger each time]) + + temp=np.arange(nb) + # compute azimuth positions of blades: + az = matData['Azimuth'][iaz]*np.pi/180.0 + 2*np.pi/nb* temp ; # Eq. 1, azimuth in radians + + # get rotor speed squared + OmegaSquared = matData['Omega'][iaz]**2; + + #print(OmegaSquared) + + # compute transformation matrices + cos_col = np.cos(az); + sin_col = np.sin(az); + + tt=np.column_stack((np.ones(3),cos_col,sin_col)) # Eq. 9, t_tilde + ttv = get_tt_inverse(sin_col, cos_col); # inverse of tt (computed analytically in function below) + tt2 = np.column_stack((np.zeros(3), -sin_col, cos_col)) # Eq. 16 a, t_tilde_2 + tt3 = np.column_stack((np.zeros(3), -cos_col, -sin_col)) # Eq. 16 b, t_tilde_3 + + #--- + T1 = np.eye(n_FixFrameStates2); # Eq. 11 for second-order states only + #print('B ',T1, n_FixFrameStates2, matData['n_RotTripletStates2']) + for ii in range(matData['n_RotTripletStates2']): + T1 = scp.block_diag(T1,tt) + + T1v = np.eye(n_FixFrameStates2); # inverse of T1 + for ii in range(matData['n_RotTripletStates2']): + T1v = scp.block_diag(T1v, ttv); + + T2 = np.zeros([n_FixFrameStates2,n_FixFrameStates2]); # Eq. 14 for second-order states only + for ii in range(matData['n_RotTripletStates2']): + T2 = scp.block_diag(T2, tt2); + + #print('T1, T1v, T2 ',T1.shape, T1v.shape, T2.shape) + #--- + T1q = np.eye(n_FixFrameStates1); # Eq. 11 for first-order states (eq. 8 in MBC3 Update document) + for ii in range(matData['n_RotTripletStates1']): + T1q = scp.block_diag(T1q, tt); + + T1qv = np.eye(n_FixFrameStates1); # inverse of T1q + for ii in range(matData['n_RotTripletStates1']): + T1qv = scp.block_diag(T1qv, ttv); + + T2q = np.zeros([n_FixFrameStates1,n_FixFrameStates1]); # Eq. 14 for first-order states (eq. 9 in MBC3 Update document) + for ii in range(matData['n_RotTripletStates1']): + T2q = scp.block_diag(T2q, tt2); + + #print('T1q, T1qv, T2q ',T1q.shape, T1qv.shape, T2q.shape) + # T1qc = np.eye(matData.NumHDInputs); # inverse of T1q + + #--- + T3 = np.zeros([n_FixFrameStates2,n_FixFrameStates2]); # Eq. 15 + for ii in range(matData['n_RotTripletStates2']): + T3 = scp.block_diag(T3, tt3); + + #--- + T1c = np.eye(n_FixFrameInputs); # Eq. 21 + for ii in range(matData['n_RotTripletInputs']): + T1c = scp.block_diag(T1c, tt) + + T1ov = np.eye(n_FixFrameOutputs); # inverse of Tlo (Eq. 23) + for ii in range(matData['n_RotTripletOutputs']): + T1ov = scp.block_diag(T1ov, ttv); + + #print('T3, T1c, T1ov ',T3.shape, T1c.shape, T1ov.shape, matData['A'].shape) + # mbc transformation of first-order matrices + # if ( MBC.EqnsOrder == 1 ) # activate later + + #print('Before ',T1c) + + if 'A' in matData: + #A = matData['A'][:,:,iaz] + #A_reordered = A[np.ix_(new_seq_states, new_seq_states)] + # Eq. 29 + L1=np.concatenate((T1, np.zeros([matData['ndof2'],matData['ndof2']]), np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) + L2=np.concatenate((matData['Omega'][iaz]*T2,T1,np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) + L3=np.concatenate((np.zeros([matData['ndof1'], matData['ndof2']]),np.zeros([matData['ndof1'], matData['ndof2']]), T1q), axis=1) + L=np.matmul(matData['A'][new_seq_states[:,None],new_seq_states,iaz], np.concatenate((L1,L2,L3),axis=0)) + + R1=np.concatenate((matData['Omega'][iaz]*T2, np.zeros([matData['ndof2'],matData['ndof2']]), np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) + R2=np.concatenate((OmegaSquared*T3 + matData['OmegaDot'][iaz]*T2, 2*matData['Omega'][iaz]*T2, np.zeros([matData['ndof2'], matData['ndof1']])),axis=1) + R3=np.concatenate((np.zeros([matData['ndof1'], matData['ndof2']]), np.zeros([matData['ndof1'], matData['ndof2']]), matData['Omega'][iaz]*T2q), axis=1) + + R=np.concatenate((R1,R2,R3),axis=0) + + MBC['A'][new_seq_states[:,None],new_seq_states,iaz]=np.matmul(scp.block_diag(T1v, T1v, T1qv),(L-R)) + + # ffname='AAA'+str(iaz)+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['A'][:,:,iaz],fmt='%5.4f') + # f.write('\n') + + if 'B' in matData: + # Eq. 30 + MBC['B'][new_seq_states[:,None],new_seq_inp,iaz]=np.matmul(np.matmul(scp.block_diag(T1v, T1v, T1qv), matData['B'][new_seq_states[:,None],new_seq_inp,iaz]),T1c) + + # ffname='BBB'+str(iaz)+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['B'][:,:,iaz],fmt='%5.4f') + # f.write('\n') + + if 'C' in matData: + # Eq. 31 + + L1=np.concatenate((T1, np.zeros([matData['ndof2'],matData['ndof2']]), np.zeros([matData['ndof2'], matData['ndof1']])),axis=1) + L2=np.concatenate((matData['Omega'][iaz]*T2, T1, np.zeros([matData['ndof2'], matData['ndof1']])), axis=1) + L3=np.concatenate((np.zeros([matData['ndof1'], matData['ndof2']]), np.zeros([matData['ndof1'], matData['ndof2']]), T1q), axis=1) + + MBC['C'][new_seq_out[:,None], new_seq_states,iaz]=np.matmul(np.matmul(T1ov,matData['C'][new_seq_out[:,None],new_seq_states,iaz]),np.concatenate((L1,L2,L3),axis=0)) + + # ffname='CCC'+str(iaz)+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['C'][:,:,iaz],fmt='%5.4f') + # f.write('\n') + + if 'D' in matData: + # Eq. 32 + MBC['D'][new_seq_out[:,None],new_seq_inp,iaz] = np.matmul(np.matmul(T1ov,matData['D'][new_seq_out[:,None],new_seq_inp,iaz]), T1c) + + # ffname='DDD'+str(iaz)+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['D'][:,:,iaz],fmt='%5.4f') + # f.write('\n') + + # end # end of azimuth loop + else: + print(' fx_mbc3 WARNING: Number of blades is ', str(nb), ' not 3. MBC transformation was not performed.') + MBC['performedTransformation'] = False; + + # initialize matrices + if 'A' in matData: + MBC['A'] = matData['A'] # initalize matrix + if 'B' in matData: + MBC['B'] = matData['B'] # initalize matrix + if 'C' in matData: + MBC['C'] = matData['C'] # initalize matrix + if 'D' in matData: + MBC['D'] = matData['D'] # initalize matrix + + # ------------- Eigensolution and Azimuth Averages ------------------------- + if 'A' in MBC: + MBC['AvgA'] = np.mean(MBC['A'],axis=2); # azimuth-average of azimuth-dependent MBC.A matrices + MBC['eigSol'], EigenVects_save = eiganalysis(MBC['AvgA'], matData['ndof2'], matData['ndof1']); + MBC['EigenVects_save'] = EigenVects_save + MBC['nb'] = nb + + if 'B' in MBC: + MBC['AvgB'] = np.mean(MBC['B'],axis=2); # azimuth-average of azimuth-dependent MBC.B matrices + # ffname='BBB_avg'+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['AvgB'],fmt='%5.4f') + # f.write('\n') + + if 'C' in MBC: + MBC['AvgC'] = np.mean(MBC['C'],axis=2); # azimuth-average of azimuth-dependent MBC.C matrices + # ffname='CCC_avg'+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['AvgC'],fmt='%5.4f') + # f.write('\n') + + if 'D' in MBC: + MBC['AvgD'] = np.mean(MBC['D'],axis=2); # azimuth-average of azimuth-dependent MBC.D matrices + # ffname='DDD_avg'+'.txt' + # with open(ffname, "a") as f: + # np.savetxt(f,MBC['AvgD'],fmt='%5.4f') + # f.write('\n') + + return MBC, matData + + +#%% ------------------------------------------------------------------------ +def formatModesForViz(MBC, matData, nb, EigenVects_save): + """ + get data required for VTK visualization: + MBC.eigSol.EigenVects_save(:,SortedFreqIndx) + """ + nAzimuth = len(matData['Azimuth']) + nStates, nModes = EigenVects_save.shape + + SortedFreqIndx = np.argsort((MBC['eigSol']['NaturalFreqs_Hz']).flatten(),kind="heapsort") + + #put these in order of natural frequency: + VTK = dict() + VTK['NaturalFreq_Hz'] = MBC['eigSol']['NaturalFreqs_Hz'][ SortedFreqIndx] # nModes + VTK['DampedFreq_Hz'] = MBC['eigSol']['DampedFreqs_Hz'][ SortedFreqIndx] # nModes + VTK['DampingRatio'] = MBC['eigSol']['DampRatios'][ SortedFreqIndx] # nModes + x_eig = EigenVects_save[:, SortedFreqIndx] # nStates x nModes + # Adopt a convention such that the real part of the first state is positive (arbitrary) + S=np.sign(np.real(x_eig[0,:])) + x_eig = S * x_eig + VTK['x_eig'] = np.tile(x_eig, nAzimuth).reshape((x_eig.shape[0],x_eig.shape[1],nAzimuth)) + + if MBC['performedTransformation']: + # inverse MBC3 (Eq. 4, to move from collective, sine, cosine back to blade 1, blade 2, blade 3): + dof1_offset = MBC['ndof2']*2 + for iaz, azimuth in enumerate(matData['Azimuth']): + # MBC3 transformation matrices + az = azimuth*np.pi/180.0 + 2*np.pi/nb* np.arange(nb)# % Eq. 1, azimuth in radians + az = az.reshape((-1,1)) # column vector + tt = np.column_stack( (np.ones((nb,1)), np.cos(az), np.sin(az))) #% Eq. 9, t_tilde + # MBC on second order states + I3_2nd = np.array(matData['RotTripletIndicesStates2']).astype(int) + for i2 in range(I3_2nd.shape[0]): + i3x = I3_2nd[i2,:] + i3xdot= I3_2nd[i2,:]+MBC['ndof2'] + VTK['x_eig'][i3x , :, iaz] = tt.dot(x_eig[i3x ,:]) + VTK['x_eig'][i3xdot, :, iaz] = tt.dot(x_eig[i3xdot,:]) + # MBC on first order states + I3_1st = np.array(matData['RotTripletIndicesStates1']).astype(int) + for i1 in range(I3_1st.shape[0]): + i3x = I3_1st[i1] + dof1_offset + VTK['x_eig'][i3x, :, iaz] = tt.dot(x_eig[i3x,:]) + # put this in order states are stored in FAST + I = matData['StateOrderingIndx'] + VTK['x_desc'] = np.array(MBC['DescStates'])[I] + VTK['x_eig'] = VTK['x_eig'][I,:,:] # nStates x nModes x nAzimuth + VTK['x_eig_magnitude'] = np.abs( VTK['x_eig']) # nStates x nModes x nAzimuth + VTK['x_eig_phase'] = np.angle(VTK['x_eig']) # nStates x nModes x nAzimuth + return VTK + + + + +if __name__=='__main__': + pass + + # FileNames=['5MW_Land_ModeShapes-1.fst', '5MW_Land_ModeShapes-2.fst', '5MW_Land_ModeShapes-3.fst', '5MW_Land_ModeShapes-6.fst', '5MW_Land_ModeShapes-7.fst']; + #FileNames=['5MW_Land_BD_Linear-1.fst', '5MW_Land_BD_Linear-2.fst', '5MW_Land_BD_Linear-3.fst', '5MW_Land_BD_Linear-6.fst', '5MW_Land_BD_Linear-7.fst']; + + #FileNames=['5MW_Land_BD_Linear-1.fst']; + + #FileNames=['DLC-1.1/5MW_Land_BD_Linear-7.1.lin', 'DLC-1.1/5MW_Land_BD_Linear-7.2.lin'] + #FileNames=['/Users/sramiset/Desktop/OpenFAST/5MW_Land_BD_Linear/5MW_Land_BD_Linear-1.1.lin','/Users/sramiset/Desktop/OpenFAST/5MW_Land_BD_Linear/5MW_Land_BD_Linear-1.2.lin'] + # CampbellData=runMBC(FileNames) + # print('Preparing campbell diagram data!'); + # # TO DO read x-axis for wind speed or rotor speed from csv file + # #op_csv=pd.read_csv('input.csv', sep=',') + # OP=[2,4,6,8,10] + + # modeID_table,modesDesc=IdentifyModes(CampbellData) + + # #print(modesDesc) + + # nModes=modeID_table.shape[0] + # nRuns=modeID_table.shape[1] + # cols=[item[0] for item in list(modesDesc.values())] + # #cols.append('1P');cols.append('3P');cols.append('6P') + # #cols.append('9P');cols.append('12P') + # frequency=pd.DataFrame(np.nan, index=np.arange(nRuns), columns=cols) + # dampratio=pd.DataFrame(np.nan, index=np.arange(nRuns), columns=cols) + # FreqPlotData=np.zeros((nRuns,nModes)) + # DampPlotData=np.zeros((nRuns,nModes)) + # for i in range(nRuns): + # for modeID in range(len(modesDesc)): # list of modes we want to identify + # idx=int(modeID_table[modeID,i]) + # FreqPlotData[i,modeID]=CampbellData[i]['Modes'][idx]['NaturalFreq_Hz'] + # DampPlotData[i,modeID]=CampbellData[i]['Modes'][idx]['DampingRatio'] + # #print(i,modeID,modesDesc[modeID][0],FreqPlotData[i,modeID]) + # frequency.iloc[i,:]=FreqPlotData[i,:] + # dampratio.iloc[i,:]=DampPlotData[i,:] + + # for i in range(len(OP)): + # # for 15 DOF + # frequency.index.values[i]=OP[i] + # dampratio.index.values[i]=OP[i] + + # # import openpyxl + # # xfile = openpyxl.load_workbook('/Users/sramiset/Desktop/OpenFAST/mbc3_py/CampbellDiagram_Template.xlsx') + + # pCD.plotCampbellData(OP,frequency,dampratio) + + # frequency['1P']=np.nan + # frequency['3P']=np.nan + # frequency['6P']=np.nan + # frequency['9P']=np.nan + # frequency['12P']=np.nan + + # print(nRuns) + # for i in range(nRuns): + # # for 1P,3P,6P,9P,and 12P harmonics + # tmp=OP[i]/60.0 + # print(i,tmp) + # LZ=15 + # frequency.iloc[i,LZ]=tmp + # frequency.iloc[i,LZ+1]=3*tmp + # frequency.iloc[i,LZ+2]=6*tmp + # frequency.iloc[i,LZ+3]=9*tmp + # frequency.iloc[i,LZ+4]=12*tmp + # print(frequency) + # frequency.transpose().to_excel(r'CampbellData.xlsx') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py new file mode 100644 index 0000000000..0568bf7232 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotCampbellData.py @@ -0,0 +1,42 @@ +import sys +import os +import glob +import matplotlib.pyplot as plt +# Local +from pyFAST.linearization.linearization import plotCampbellDataFile + + +if len(sys.argv) not in [2,3,4]: + print(""" +usage: + plotCampbellData XLS_OR_CSV [WS_OR_RPM] [sheetname] + +where: + - XLS_OR_CSV: is an Excel file, or the ModesID CSV file generated by the matlab + postprocessing of the linearization. + The "ModesID" CSV file can have any name, but the remaining csv files + are assumed to be [Campbell_Points*.csv and Campbell_OP.csv] + in the same folder of the "ModesID" csv. + + - WS_OR_RPM: is `ws` or `rpm` (case insensitive), value use for x-axis + + - sheetname: optional argument to specify the ModesID sheet of the xls file. +""") + sys.exit(-1) + + +# --- Input handling +xls_or_csv = sys.argv[1] +if len(sys.argv)>=3: + ws_or_rpm = sys.argv[2] +else: + ws_or_rpm = 'rpm' +if len(sys.argv)>=4: + sheetname = sys.argv[3] +else: + sheetname = None + +fig, axes, figName = plotCampbellDataFile(xls_or_csv, ws_or_rpm, sheetname, ylim=None) +print('Figure saved to:',figName) +fig.savefig(figName, dpi=300) +plt.show() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py new file mode 100644 index 0000000000..50fd338f03 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/plotModeShapes.py @@ -0,0 +1,134 @@ +from paraview.simple import * +import os +import sys +import glob +import numpy as np + +if len(sys.argv) not in [3,4]: + print('Error: Not enough argument provided.') + print(""" +usage: + plotModeShapes ROOT_PATH STATEFILE [OUTPUTDIR] + +where: + ROOT_PATH: Path of the form VTKDIR\ROOTNAME + where VTKDIR is the directory where vtp files are located + Modes and LinTimes will be selected using the pattern: + ROOT_PATH.Mode*.LinTime*.vtp + STATEFILE: State file used for visualization + +""") + sys.exit(-1) + +# --- Input Parameters +RootPath = os.path.normpath(sys.argv[1]) +StateFile = os.path.normpath(sys.argv[2]) +if len(sys.argv)==4: + OutputDir = os.path.normpath(sys.argv[3]) +else: + OutputDir='./' + +# --- Script Parameters +Suffix = 'LinTime1.' # Depends on viz option VTKLinTim= 1 or 2 +fps = 3 # frames per second (rate to save in the .avi file) +nModes = 15 # number of modes to visualize + +vFPS= np.linspace(5,1,nModes).astype(int) + +# --- Derived params +parentDir = os.path.dirname(RootPath) +rootSim = os.path.basename(RootPath) +mainDirName = os.path.abspath(parentDir) + +# --- Constants +StructureModule = 'ED' +BladeMesh = "AD_Blade" + +print('') +print('RootName :',rootSim) +print('MainDirName:',mainDirName) +print('StateFile :',StateFile) +print('') + +for iMode in range(nModes): # iMode starts at 0, so add 1 + rootMode = rootSim+'.Mode{:d}.'.format(iMode+1)+Suffix + absrootMode = os.path.join(mainDirName, rootMode) + print('***' + absrootMode + '***') + # nLinTimes = len(glob.glob(os.path.join(mainDirName,RootName)+'.Mode1.LinTime*.AD_Blade1..vtp')) + + # determine number of leading zeros in this mode shape + nLeadingZeros = 0 + exists = False + while (not exists) and nLeadingZeros < 6: + nLeadingZeros = nLeadingZeros + 1 + txt = '{:0' + str(nLeadingZeros) + 'd}' + fileLeadingZeros = txt.format(1) + Blade1File = absrootMode + BladeMesh + '1.' + fileLeadingZeros + '.vtp' + exists = os.path.isfile(Blade1File) + + #print(Blade1File) + if not exists: + print(' Could not find files to load.') + else: + LoadState(StateFile, LoadStateDataFileOptions='Choose File Names', + DataDirectory=mainDirName, + a5MW_Land_DLL_WTurbMode1LinTime1AD_Blade10FileName =[absrootMode + BladeMesh + '1.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1AD_Blade20FileName =[absrootMode + BladeMesh + '2.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1AD_Blade30FileName =[absrootMode + BladeMesh + '3.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1Blade1Surface0FileName =[absrootMode + 'Blade1Surface.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1Blade2Surface0FileName =[absrootMode + 'Blade2Surface.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1Blade3Surface0FileName =[absrootMode + 'Blade3Surface.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1ED_Hub0FileName =[absrootMode + StructureModule + '_Hub.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1ED_Nacelle0FileName =[absrootMode + StructureModule + '_Nacelle.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1ED_TowerLn2Mesh_motion0FileName=[absrootMode + StructureModule + '_TowerLn2Mesh_motion.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1HubSurface0FileName =[absrootMode + 'HubSurface.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1NacelleSurface0FileName =[absrootMode + 'NacelleSurface.' + fileLeadingZeros + '.vtp'], + a5MW_Land_DLL_WTurbMode1LinTime1TowerSurface0FileName =[absrootMode + 'TowerSurface.' + fileLeadingZeros + '.vtp'] + ) + ## find new sources + # blade 1 + for iBlade in range(3): + Blade = FindSource(rootMode + BladeMesh + str(iBlade+1) + '...vtp') + SetActiveSource(Blade) + ExtendFileSeries(Blade) + Blade = FindSource(rootMode + 'Blade' + str(iBlade+1) + 'Surface...vtp') + SetActiveSource(Blade) + ExtendFileSeries(Blade) + # Hub + Hub = FindSource(rootMode + StructureModule + '_Hub...vtp') + SetActiveSource(Hub) + ExtendFileSeries(Hub) + Hub = FindSource(rootMode + 'HubSurface...vtp') + SetActiveSource(Hub) + ExtendFileSeries(Hub) + + # nacelle + Nacelle = FindSource(rootMode + StructureModule + '_Nacelle...vtp') + SetActiveSource(Nacelle) + ExtendFileSeries(Nacelle) + Nacelle = FindSource(rootMode + 'NacelleSurface...vtp') + SetActiveSource(Nacelle) + ExtendFileSeries(Nacelle) + + # tower + Tower = FindSource(rootMode + StructureModule + '_TowerLn2Mesh_motion...vtp') + SetActiveSource(Tower) + ExtendFileSeries(Tower) + Tower = FindSource(rootMode + 'TowerSurface...vtp') + SetActiveSource(Tower) + ExtendFileSeries(Tower) + + ##### + SetActiveView(GetRenderView()) + #view = GetActiveView() + layout = GetLayout() + + animFile= os.path.join(OutputDir, rootSim+'.Mode{:d}.avi'.format(iMode+1)) + print('Saving animation... ',animFile, end='') + WriteAnimation(animFile, viewOrLayout=layout, FrameRate=vFPS[iMode], ImageResolution=(1544,784), Compression=True)# ImageResolution=(1544,784) +# SaveAnimation(rootMode + 'avi', viewOrLayout=layout, FrameRate=fps, ImageResolution=(1544,784) ) + # this .pvsm file defaults to (2734,1178) without ImageResolution arguments, resulting in a bunch of warnings + # For some reason, ParaView is ignoring the FrameRate argument and always uses a value of 1. + print(' Done.') + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py new file mode 100644 index 0000000000..e18d0d62de --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_campbell_data.py @@ -0,0 +1,103 @@ +import unittest +import os +import glob +import numpy as np +import pyFAST.linearization.mbc as mbc +import pyFAST.linearization.campbell as camp + + +MyDir=os.path.join(os.path.dirname(__file__)) + +class Test(unittest.TestCase): + + def mbc3_standstill(self, lin_file): + # Script Parameters + BladeLen = 40.04 # Blade length, used to tune relative modal energy [m] + TowerLen = 55.59 # Tower length, used to tune relative modal energy [m] + + # Derived parameters + lin_files = np.array([lin_file]) + + # Performing MBC (NOTE: not stricly necessary without rotation) + mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) + CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) + + nModesMax = np.min([len(CD['Modes']),10]) + Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) + Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)]) + LogDec = Damp*100*2*np.pi + return Freq, Damp, LogDec + + def test_mbc3_standstill(self): + lin_file = os.path.join(MyDir,'../../../data/example_files/Standstill.1.lin') + Freq, Damp, LogDec = self.mbc3_standstill(lin_file) + np.testing.assert_almost_equal(Freq[:3] ,[0.427, 0.450, 0.669], 3) + np.testing.assert_almost_equal(LogDec[:3],[1.9505,2.1309,5.0649], 4) + + def test_mbc3_standstill_old(self): + lin_file = os.path.join(MyDir, '../../../data/example_files/Standstill_old.1.lin') + Freq, Damp, LogDec = self.mbc3_standstill(lin_file) + np.testing.assert_almost_equal(Freq[:3] ,[0.427, 0.449, 0.667], 3) + np.testing.assert_almost_equal(LogDec[:3],[1.9497,2.1162,5.0113], 4) + + def test_mbc3_ED_Azi3(self): + # --- ElastoDyn, second order states only + # Script Parameters + BladeLen = 61.5 # Blade length, used to tune relative modal energy [m] + TowerLen = 87.6 # Tower length, used to tune relative modal energy [m] + lin_files = glob.glob(os.path.join(MyDir,'../../../data/linearization_outputs/ws03.0*.lin')) + + # Performing MBC + mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) + CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) + + nModesMax = np.min([len(CD['Modes']),10]) + Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) + Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)])*100 + np.testing.assert_almost_equal(Freq[:3],[0.31402747,0.33140717,0.6263423], 3) + np.testing.assert_almost_equal(Damp[:3],[0.43860177,6.03443072,2.48116647], 4) + + def test_mbc3_EDHD(self): + # --- ElastoDyn and HydroDyn, mix of second order states and first order + # Script Parameters + BladeLen = 61.5 # Blade length, used to tune relative modal energy [m] + TowerLen = 87.6 # Tower length, used to tune relative modal energy [m] + lin_files = [os.path.join(MyDir,'../../../data/example_files/StandstillSemi_ForID_EDHD.1.lin')] + + # Performing MBC + mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) + CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) + + nModesMax = np.min([len(CD['Modes']),10]) + Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) + Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)])*100 + Freq_ref = [0.00852735,0.00865675,0.01333642 ,0.03147209 ,0.03544405,0.03550137,0.04915103,0.07296769 ,0.07801498 ,0.08493981] + Damp_ref = [0.16886295,3.43729876,25.10525282,56.73819059,2.56872571,2.45772964,0.18473601,23.22413272,11.67420729,24.10895804] + + np.testing.assert_almost_equal(Freq, Freq_ref, 4) + np.testing.assert_almost_equal(Damp, Damp_ref, 4) + + def test_mbc3_EDBD(self): + # --- ElastoDyn and BeamDyn, second order states + # Script Parameters + BladeLen = 100.0 # Blade length, used to tune relative modal energy [m] + TowerLen = 100.0 # Tower length, used to tune relative modal energy [m] + lin_files = [os.path.join(MyDir,'../../../data/example_files/BAR_URC_EDBD.1.lin')] + + # Performing MBC + mbc_data, matData = mbc.fx_mbc3(lin_files, verbose=False) + CD = camp.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) + + nModesMax = np.min([len(CD['Modes']),10]) + Freq = np.array([CD['Modes'][i]['NaturalFreq_Hz'] for i in np.arange(nModesMax)]) + Damp = np.array([CD['Modes'][i]['DampingRatio'] for i in np.arange(nModesMax)])*100 + Freq_ref = [0.18549539,0.18727956,1.12675789,1.25491926,9.03091505,9.05584944,9.31045707,9.36779001,11.30081115,13.78922866] + Damp_ref = [0.40656628,0.40815288,0.64834856,0.75063003,6.02032061,8.60631293,6.29886588,8.37207306,9.96489352,9.70093435] + + np.testing.assert_almost_equal(Freq, Freq_ref, 4) + np.testing.assert_almost_equal(Damp, Damp_ref, 4) + + +if __name__ == '__main__': +# Test().test_000_debug() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py new file mode 100644 index 0000000000..98de8c67b9 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesID.py @@ -0,0 +1,94 @@ +import unittest +import os +import numpy as np +import pyFAST +import pyFAST.linearization as lin + +MyDir = os.path.dirname(__file__) + +class Test(unittest.TestCase): + + def test_ED(self): + # Check that identify modes works as intended for a standstill case with ElastoDyn + # NOTE: there are still some issues for the 2nd tower FA + # + BladeLen=40 + TowerLen=55 + lin_files = [os.path.join(MyDir,'../../../data/example_files/Standstill_ForID_ED.1.lin')] + + mbc_data, matData = lin.fx_mbc3(lin_files, verbose=False) + CD = lin.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) + + modeID_table,modesDesc = lin.IdentifyModes([CD]) + modeIDs= lin.IdentifiedModesDict([CD], modeID_table, modesDesc)[0] + #for k,v in modeIDs.items(): + # print(k,v) + + modeID_table_Manual = [0 , 2 , 1 , 4 , 6 , 5 , 7 , 8 , 3 , 13 , 14 , 9 , 11 , 10 , 0 ] + modeID_table_Ref = [0 , 2 , 1 , 4 , 6 , 5 , 7 , 3 , 8 , 12, 13 , 14 , 9 , 10 , 11 , 0 ] + + np.testing.assert_equal(modeID_table[:,0],modeID_table_Ref) + + np.testing.assert_equal(modeIDs['1st Tower FA']['ID'],2) + np.testing.assert_equal(modeIDs['1st Tower SS']['ID'],1) + np.testing.assert_equal(modeIDs['1st Blade Flap (Regressive)']['ID'],4) + np.testing.assert_equal(modeIDs['1st Blade Edge (Regressive)']['ID'],7) + np.testing.assert_equal(modeIDs['2nd Tower FA']['ID'],13) # Should be 13 + np.testing.assert_equal(modeIDs['2nd Tower SS']['ID'],14) + np.testing.assert_equal(modeIDs['2nd Blade Flap (Regressive)']['ID'],9) + + np.testing.assert_almost_equal(modeIDs['1st Tower FA']['f0'],0.44331, 4) + np.testing.assert_almost_equal(modeIDs['1st Tower SS']['f0'],0.42219, 4) + np.testing.assert_almost_equal(modeIDs['1st Blade Flap (Regressive)']['f0'],0.90737, 4) + np.testing.assert_almost_equal(modeIDs['1st Blade Edge (Regressive)']['f0'],1.82162, 4) + np.testing.assert_almost_equal(modeIDs['2nd Tower SS']['f0'],4.28604,4) + np.testing.assert_almost_equal(modeIDs['2nd Blade Flap (Regressive)']['f0'],2.53595,4) + + def test_HD(self): + # Check that identify modes works as intended for a standstill case with ElastoDyn and Hydrodyn + # NOTE: there are still some issues for the 2nd tower FA + # + BladeLen=40 + TowerLen=55 + lin_files = [os.path.join(MyDir,'../../../data/example_files/StandstillSemi_ForID_EDHD.1.lin')] + + mbc_data, matData = lin.fx_mbc3(lin_files, verbose=False) + CD = lin.campbell_diagram_data_oneOP(mbc_data,BladeLen,TowerLen) + sSummary = lin.campbellData2TXT(CD, nFreqOut=65) + + modeID_table,modesDesc = lin.IdentifyModes([CD]) + modeIDs= lin.IdentifiedModesDict([CD], modeID_table, modesDesc)[0] + +# print(sSummary) +# +# for k,v in modeIDs.items(): +# print(k,v) +# +# print(modeID_table) + + np.testing.assert_equal(modeIDs['1st Blade Flap (Regressive)' ]['ID'], 47) + np.testing.assert_equal(modeIDs['1st Blade Flap (Progressive)']['ID'], 50) + #np.testing.assert_equal(modeIDs['1st Blade Edge (Regressive)' ]['ID'], 55) +# np.testing.assert_equal(modeIDs['1st Blade Edge (Progressive)']['ID'], 56) + np.testing.assert_equal(modeIDs['2nd Blade Flap (Regressive)' ]['ID'], 58) + np.testing.assert_equal(modeIDs['2nd Blade Flap (Progressive)']['ID'], 59) + np.testing.assert_equal(modeIDs['2nd Blade Flap (Collective)' ]['ID'], 60) + np.testing.assert_equal(modeIDs['1st Blade Edge (Collective)' ]['ID'], 51) + + np.testing.assert_equal(modeIDs['Platform sway' ]['ID'], 1) + np.testing.assert_equal(modeIDs['Platform surge' ]['ID'], 2) + np.testing.assert_equal(modeIDs['Platform heave' ]['ID'], 7) + np.testing.assert_equal(modeIDs['Platform yaw' ]['ID'], 3) + + + # Test that might need to updated after the indentification is improved + # NOTE: the results below are probaly not good +# np.testing.assert_equal(modeIDs['1st Tower FA']['ID'],52) +# np.testing.assert_equal(modeIDs['1st Tower SS']['ID'],53) +# np.testing.assert_equal(modeIDs['1st Blade Flap (Collective)' ]['ID'], 54) +# np.testing.assert_equal(modeIDs['2nd Tower SS' ]['ID'], 62) + +if __name__ == '__main__': + #Test().test_ED() + #Test().test_HD() + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py new file mode 100644 index 0000000000..df0508007b --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_modesVizBinary.py @@ -0,0 +1,118 @@ +import unittest +import os +import numpy as np +import matplotlib.pyplot as plt +import pyFAST.linearization as lin + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + + +f0_ref = [0.587830219596616, 0.722482755465059, 0.841644628629986, 0.937126199078433, 1.237130544073060, 1.837320640593674, 1.986990893316201, 2.133747228535351, 2.256063763227361] +zeta_ref = [6.310588187661754e-01, 5.252901946117751e-01, 4.401008557171799e-01, 1.634432195163714e-02, 1.235888553742901e-02, 1.555277937084565e-01, 1.428798211984810e-01, 1.337606910498821e-01, 2.258501382142458e-02] +Qmag_11 = [1.514472004400742e-05, 1.947994954300747e-01, 1.754772630476129e-01, 1.825691131755990e-01, 4.495989525843738e-03, 5.053399414140790e-03, 5.969950454246335e-03, 1.471919803320060e-02, 1.285988755307813e-02, 1.308283162729386e-02, 5.593620867971226e-05, 7.194814559410425e-01, 6.481158301940565e-01, 6.743091970923338e-01, 1.660569542445695e-02, 1.866445885760891e-02, 2.204969081277093e-02, 5.436456602636927e-02, 4.749730280101332e-02, 4.832073474448904e-02] +Qmag_83 = [1.441947564996028e-06, 6.371604702191713e-03, 6.305232540330547e-03, 6.289204718671321e-03, 6.932640151237337e-03, 6.546664262594788e-03, 6.589993010888945e-03, 5.227729076001339e-02, 5.129797039680727e-02, 5.179175676167141e-02, 1.933180057575511e-05, 8.542237903835923e-02, 8.453254543550748e-02, 8.431766477028646e-02, 9.294402939527062e-02, 8.776935516478050e-02, 8.835025196127627e-02, 7.008674823885858e-01, 6.877379994442021e-01, 6.943580595381521e-01] +Qphi_92 = [1.561610973903578, -1.700282526230297, -1.701805350416750, -1.697002105810609, 1.548360360707519, 1.547997531767750, 1.548270549679593, 2.395681952509270, 2.461948283219694, 2.405369652375428, -3.128191072180800, -0.106899265135085, -0.108422089321542, -0.103618844715400, -3.141441685376858, 3.141380792862958, -3.141531496404784, -2.294120093575104, -2.227853762864683, -2.284432393708950] +Qphi_11 = [-4.475921307027970e-02, -7.345405529305936e-01, 1.372699116580623e+00, -2.700369426141966e+00, 1.484807930794751e+00, -2.598715647054003e+00, -5.805991423437629e-01, -1.530872103538168e+00, 5.410725214387462e-01, 2.766892929144499e+00, 2.208954492083937e+00, 1.519173152223936e+00, -2.656772485444435e+00, -4.466557209874353e-01, -2.544663671230343e+00, -3.450019418994276e-01, 1.673114562810780e+00, 7.228416016163599e-01, 2.794786226593286e+00, -1.262578672880562e+00] + +def compare(var, x1, x2, res, plot=False): + try: + np.testing.assert_almost_equal(x1, x2, res) + except: + if True: + raise + print('fail', var, 'with ', res) + if plot: + fig,axes = plt.subplots(2, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + axes[0].plot(x1, label='new') + axes[0].plot(x2, label='ref') + axes[0].legend() + axes[1].plot(x2-x1) + plt.title(var) + +class Test(unittest.TestCase): + + def test_readBinMatlab(self): + matBinFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup') + # Read bin file + d = lin.readModesForViz(matBinFile) + # Test against known matlab values + Qmag = d['x_eig_magnitude'] + Qphi = d['x_eig_phase'] + np.testing.assert_equal(Qmag.shape, (20,9,3)) + np.testing.assert_almost_equal(d['NaturalFreq_Hz'],f0_ref , 15) # 16 fails + np.testing.assert_almost_equal(d['DampingRatio'] ,zeta_ref, 16) # 17 fails + np.testing.assert_almost_equal(Qmag[:,0,0],Qmag_11, 15) + np.testing.assert_almost_equal(Qmag[:,7,2],Qmag_83, 15) + np.testing.assert_almost_equal(Qphi[:,0,0],Qphi_11, 15) + np.testing.assert_almost_equal(Qphi[:,8,1],Qphi_92, 15) + + def test_readWriteBinMatlab(self): + matBinFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup') + matBinFile_tmp = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup_tmp') + # Read the data + d = lin.readModesForViz(matBinFile) + # Write it + lin.writeModesForViz(d, matBinFile_tmp) + # Read what we wrote + d = lin.readModesForViz(matBinFile_tmp) + # Test against known matlab values + Qmag = d['x_eig_magnitude'] + Qphi = d['x_eig_phase'] + np.testing.assert_equal(Qmag.shape, (20,9,3)) + np.testing.assert_almost_equal(d['NaturalFreq_Hz'],f0_ref , 15) # 16 fails + np.testing.assert_almost_equal(d['DampingRatio'] ,zeta_ref, 16) # 17 fails + np.testing.assert_almost_equal(Qmag[:,0,0],Qmag_11, 15) + np.testing.assert_almost_equal(Qmag[:,7,2],Qmag_83, 15) + np.testing.assert_almost_equal(Qphi[:,0,0],Qphi_11, 15) + np.testing.assert_almost_equal(Qphi[:,8,1],Qphi_92, 15) + try: + os.remove(matBinFile_tmp) + except: + pass + + def test_writeBinPython(self): + matBinFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.ModeShapeVTK.postMBC_backup') + fstFile = os.path.join(scriptDir, '../../../data/NREL5MW/5MW_Land_Lin_Rotating/Main.fst') + + # --- Perform python MBC and write modes to binary file + CDDOP, MBCOP = lin.getCampbellDataOP(fstFile, writeModes=True) + + # --- Read matlab binary file (reference) + d2 = lin.readModesForViz(matBinFile) + + # --- Read python binary fie + d = lin.readModesForViz(MBCOP['modeFile']) + # Outputs to screen + #Freq,Damp = lin.printCampbellDataOP(CDDOP, nModesMax=10, nCharMaxDesc=50) + + # Test against known matlab values + Qmag1 = d['x_eig_magnitude'] + Qphi1 = d['x_eig_phase'] + Qmag2 = d2['x_eig_magnitude'] + Qphi2 = d2['x_eig_phase'] + np.testing.assert_equal(Qmag1.shape, (20,9,3)) + compare('f0', d['NaturalFreq_Hz'],f0_ref , 14) # 15 fails + compare('ze', d['DampingRatio'] ,zeta_ref, 15) # 16 fails + compare('f0', d['NaturalFreq_Hz'], d2['NaturalFreq_Hz'], 14) # 15 fails + compare('ze', d['DampingRatio'] , d2['DampingRatio'], 15) # 16 fails + # Somehow values for state 0 and 10 are off... + for iAz in range(1): + for iMode in range(9): + v1 = Qmag1[:,iMode,iAz] + v2 = Qmag2[:,iMode,iAz] + v1 = np.concatenate((Qmag1[1:10,iMode,iAz],Qmag1[11:-1,iMode,iAz] )) + v2 = np.concatenate((Qmag2[1:10,iMode,iAz],Qmag2[11:-1,iMode,iAz] )) + compare('q{:d}{:d}'.format(iMode,iAz), v1, v2, 10, plot=False) + + for iAz in range(1): + for iMode in range(9): + v1 = np.concatenate((Qphi1[1:10,iMode,iAz],Qphi1[11:-1,iMode,iAz] )) + v2 = np.concatenate((Qphi2[1:10,iMode,iAz],Qphi2[11:-1,iMode,iAz] )) + compare('p{:d}{:d}'.format(iMode,iAz), v1, v2, 10, plot=False) + #plt.show() + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py new file mode 100644 index 0000000000..14faa56d62 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tests/test_run_Examples.py @@ -0,0 +1,31 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) + for f in files: + print('\n--------------------------------------------------------------') + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py new file mode 100644 index 0000000000..0d3693b791 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/linearization/tools.py @@ -0,0 +1,397 @@ +""" +Simple tools to assist in doing linearization analyses with OpenFAST +""" +import numpy as np +import re +import os +import glob +import struct + +from pyFAST.linearization.mbc import fx_mbc3, formatModesForViz +from pyFAST.linearization.campbell_data import campbell_diagram_data_oneOP # + + +def getCampbellDataOP(fstFile_or_linFiles, writeModes=None, BladeLen=None, TowerLen=None, + removeTwrAzimuth=False, starSub=None, removeStatesPattern=None, verbose=False, + writeViz=False, **kwargs): + """ + Return Campbell Data at one operating point from a .fst file or a list of lin files + INPUTS: + - fstFile_or_linFiles: filename of one .fst file, or, list of .lin files + examples: 'main.fst' or ['main.1.lin', 'main.4.lin'] + + - writeModes: if True, a binary file and a .viz file is written to disk for OpenFAST VTK visualization. + if None, the binary file is written only if a checkpoint file is present. + For instance, if the main file is : 'main.fst', + the binary file will be : 'main.ModeShapeVTK.pyPostMBC' + the viz file will be : 'main.ModeShapeVTK.viz' + the checkpoint file is expected to be : 'main.ModeShapeVTK.chkp' + + - BladeLen: blade length needed to scale the Campbell diagram data. + if None: the length is inferred by reading the .fst file (and ED file) + - TowerLen: tower length needed to scale the Campbell diagram data. + if None: the length is inferred by reading the .fst file (and ED file) + + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g: 'tower|Drivetrain' or '^AD' + see FASTLinearizationFile. + - removeTwrAzimuth: if False do nothing + otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). + - verbose: if True, more info is written to stdout + + - **kwargs: list of key/values to be passed to writeVizFile (see function below) + VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None + + OUTPUTS: + - CDDOP: campbell diagram data for operating point (dictionary with many keys) + - MBCOP: MBC data for operating point (dictionary) + """ + # --- Figure out if the user provided a .fst file or a list of .lin files + fstFile, linFiles = getFST_and_LinFiles(fstFile_or_linFiles, verbose=verbose) + + # --- Open lin files for given OP/fst file, perform MBC + MBCOP, matData = getMBCOP(fstFile=fstFile, linFiles=linFiles, verbose=verbose, removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern) + if MBCOP is None: + return None, None + + # --- Check if checkpoint file exists. If it does, we write the Modes + fullpathbase, ext = os.path.splitext(fstFile) + fullpath_chkp = fullpathbase + '.ModeShapeVTK.chkp' + fullpath_modes = fullpathbase + '.ModeShapeVTK.pyPostMBC' + if writeModes is None: + writeModes = os.path.exists(fullpath_chkp) + + # --- Write Modes for OpenFAST VTK visualization + if writeModes: + writeMBCOPForViz(MBCOP, matData, fullpath_modes, verbose=verbose) + MBCOP['modeFile'] = fullpath_modes + else: + MBCOP['modeFile'] = None + + # --- Write Viz file if requested (NOTE: better to do this outside) + if writeViz: + vizfile = writeVizFile(fstFile, verbose=verbose, **kwargs) + MBCOP['vizFile'] = vizfile + else: + MBCOP['vizFile'] = None + + # --- Estimate blade and tower length for scaling + if BladeLen is None and TowerLen is None: + BladeLen, TowerLen = estimateLengths(fstFile, verbose=verbose) + + # --- put data into "CampbellData" format + CDDOP = campbell_diagram_data_oneOP(MBCOP, BladeLen, TowerLen) + + return CDDOP, MBCOP + + +def getCampbellDataOPs(fstFiles, BladeLen=None, TowerLen=None, verbose=False, **kwargs): + """ + Return Campbell Data at several operating points from a list of .fst files + see getCampbellDataOP for input arguments + """ + # --- Estimate blade length and tower length for scaling + if BladeLen is None and TowerLen is None: + BladeLen, TowerLen = estimateLengths(fstFiles[0], verbose=verbose) + + # --- Run MBC for all operating points + MBC = [] + CDD = [] + for i_lin, fstFile in enumerate(fstFiles): + CDDOP, MBCOP = getCampbellDataOP(fstFile, BladeLen=BladeLen, TowerLen=TowerLen, verbose=verbose, **kwargs) + if MBCOP is not None: + CDD.append(CDDOP) + MBC.append(MBCOP) + # Remove missing data + if len(CDD)==0: + raise Exception('No linearization file found') + return CDD, MBC + +def getMBCOP(fstFile, linFiles=None, verbose=False, removeTwrAzimuth=False, starSub=None, removeStatesPattern=None): + """ + Run necessary MBC for an OpenFAST file (one operating point) + + INPUTS: + - fstFile: main openfast `.fst` filename + - linFiles: list of linfiles, inferred from fstfile if None provided + - starSub: if None, raise an error if `****` are present + otherwise replace *** with `starSub` (e.g. 0) + see FASTLinearizationFile. + - removeStatesPattern: remove states matching a giving description pattern. + e.g. r'^AD' : remove the AeroDyn states + see FASTLinearizationFile. + - removeTwrAzimuth: if False do nothing + otherwise discard lin files where azimuth in [60, 180, 300]+/-4deg (close to tower). + + """ + + # --- Find available lin files + if linFiles is None: + linFiles = findLinFiles(fstFile, verbose=verbose) + + # --- run MBC3 and campbell post_pro on lin files, generate postMBC file if needed + if len(linFiles)>0: + MBC, matData = fx_mbc3(linFiles, verbose=False, removeTwrAzimuth=removeTwrAzimuth, starSub=starSub, removeStatesPattern=removeStatesPattern) + else: + return None, None + + return MBC, matData + +def getMBCOPs(fstfiles, verbose=True, removeTwrAzimuth=False): + """ + Run MBC transform on set of openfast linear outputs (multiple operating points) + + INPUTS: + - fstfiles: list of .fst files + """ + MBC = [None]*len(fstfiles) + for i_lin, fstfile in enumerate(fstfiles): + # MBC for a given operating point (OP) + MBC[i_lin], matData = getMBCOP(fstfile, verbose=verbose, removeTwrAzimuth=removeTwrAzimuth) + return MBC + + + +def getFST_and_LinFiles(fstFile_or_linFiles, verbose=False): + """ + Given a .fst or a list of .lin files, return both: + - if a fst file is provided, .lin file next to it are sought for + - if a list of line files are provided, return the .fst file from which they originated + """ + if isinstance(fstFile_or_linFiles,str): + # The user provided a string, we expect it's a .fst file + fullpathbase, ext = os.path.splitext(fstFile_or_linFiles) + if ext.lower()!='.fst': + raise Exception('Provide either one fst file, or a list of .lin files') + fstFile = fstFile_or_linFiles + # --- Find available lin files + linFiles = findLinFiles(fstFile, verbose=verbose) + else: + # the user provided a list (hopefully) + fullpathbase, ext = os.path.splitext(fstFile_or_linFiles[0]) + if ext.lower()!='.lin': + print(fstFile_or_linFiles) + raise Exception('Provide either one fst file, or a list of .lin files') + linFiles = fstFile_or_linFiles + fullpathbase, ext = os.path.splitext(fullpathbase) + fstFile = fullpathbase+'.fst' + + return fstFile, linFiles + +def writeVizFile(fstFile, VTKLinModes=15, VTKLinScale=10, VTKLinTim=1, VTKLinTimes1=True, VTKLinPhase=0, VTKModes=None, verbose=False): + fullpathbase, ext = os.path.splitext(fstFile) + filebase = os.path.basename(fullpathbase) + fullpath_viz = fullpathbase + '.ModeShapeVTK.viz' + base_chkp = filebase + '.ModeShapeVTK' + base_modes = filebase + '.ModeShapeVTK.pyPostMBC' + + if VTKModes is None: + VTKModes=','.join((np.arange(VTKLinModes)+1).astype(str)) + + with open(fullpath_viz, 'w') as f: + f.write('------- OpenFAST MODE-SHAPE INPUT FILE -------------------------------------------\n'); + f.write('# Options for visualizing mode shapes\n'); + f.write('---------------------- FILE NAMES ----------------------------------------------\n'); + f.write('"{:s}" CheckpointRoot - Rootname of the checkpoint file written when OpenFAST generated the linearization files (without the ".chkp" extension)\n'.format(base_chkp)) + f.write('"{:s}" ModesFileName - Name of the mode-shape file (with eigenvectors)\n'.format(base_modes)) + f.write('---------------------- VISUALIZATION OPTIONS -----------------------------------\n') + f.write('{:d} VTKLinModes - Number of modes to visualize (0 <= VTKLinModes <= NumModes)\n'.format(VTKLinModes)) + f.write('{:s} VTKModes - List of which VTKLinModes modes will be visualized (modes will be added sequentially from the last value entered)\n'.format(VTKModes)) + f.write('{:f} VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n'.format(VTKLinScale)) + f.write('{:d} VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n'.format(VTKLinTim)) + f.write('{} VTKLinTimes1 - If VTKLinTim=2, visualize modes at LinTimes(1) only? (if false, files will be generated at all LinTimes)\n'.format(VTKLinTimes1)) + f.write('{:f} VTKLinPhase - Phase used when making one animation for all LinTimes together (used only when VTKLinTim=1)\n'.format(VTKLinPhase)) +# if isnan(opts.VTKLinScale) +# % Then user didn't specify it, we use some logic +# if CompElast==1 % ElastoDyn - VTKLinScale=10 +# fprintf(fid,'10 VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n'); +# elseif CompElast==2 % BeamDyn - VTKLinScale=0.1 +# fprintf(fid,'0.1 VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n'); +# fprintf(fid,'%f VTKLinScale - Mode shape visualization scaling factor (exaggerates mode shapes: try 10 for ElastoDyn; 0.1 for BeamDyn)\n',opts.VTKLinScale); +# end +# if isnan(opts.VTKLinTim) +# % The user didn't specify this, we use some logic +# fprintf(fid,'2 VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n'); +# else +# if (RPM<1e-3) % When RPM =0, VTKLinTim=1 would only produce one VTK +# fprintf(fid,'2 VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n'); +# else +# fprintf(fid,'%d VTKLinTim - Switch to make one animation for all LinTimes together (VTKLinTim=1) or separate animations for each LinTimes (VTKLinTim=2)\n',opts.VTKLinTim); +# end +# end +# if length(opts.VTKLinTimes1)==0 +# % The user didn't specify this +# fprintf(fid,'true VTKLinTimes1 - If VTKLinTim=2, visualize modes at LinTimes(1) only? (if false, files will be generated at all LinTimes)\n'); +# else +# fprintf(fid,'%s VTKLinTimes1 - If VTKLinTim=2, visualize modes at LinTimes(1) only? (if false, files will be generated at all LinTimes)\n',opts.VTKLinTimes1); +# end +# fclose(fid); + if verbose: + print(' Written Viz File:', fullpath_viz) + return fullpath_viz + +def writeVizFiles(fstFiles, **kwargs): + """ write viz file for a set of fst files + see writeVizFile + """ + return [writeVizFile(fst, **kwargs) for fst in fstFiles] + +# ------------------------------------------------------------------------ +def fread(fid, n, type): + """ Mimic the matlab function fread""" + fmt, nbytes = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type] + v = struct.unpack(fmt * n, fid.read(nbytes * n)) + if n==1: + return v[0] + else: + return np.asarray(v) + +def fwrite(fid, data, type): + """ Mimic the matlab function fwrite""" + # @ is used for packing in native byte order + # B - unsigned integer 8 bits + # h - integer 16 bits + # i - integer 32 bits + # f - float 32 bits + # d - float 64 bits + fmt, _ = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type] + if hasattr(data, '__len__'): + data = data.flatten(order='F') + n=len(data) + fid.write(struct.pack('@'+str(n)+fmt, *data)) + else: + fid.write(struct.pack('@'+fmt, data)) + + +def writeMBCOPForViz(MBCOP, matData, modesFilename, nModesOut=None, nDigits=None, verbose=False, hack=False): + VTK = formatModesForViz(MBCOP, matData, MBCOP['nb'], MBCOP['EigenVects_save']) + return writeModesForViz(VTK, modesFilename, nModesOut=nModesOut, nDigits=nDigits, verbose=verbose, hack=hack) + +# def writeModesForViz(f0, fd, zeta, Q, modesFilename, format='OFBinary'): +def writeModesForViz(VTK, modesFilename, nModesOut=None, nDigits=None, verbose=False, hack=False): + """ + write binary file that will be read by OpenFAST to export modes to VTK + """ + + reFmt = 'float64' #8-byte real numbers + nStates, nModes, nLinTimes = VTK['x_eig_magnitude'].shape + if nModesOut is None: + nModesOut=nModes + + #------- HACK to compare with matlab + if hack: + VTK['NaturalFreq_Hz'] =VTK['NaturalFreq_Hz']*0 + 1 + VTK['DampingRatio'] =VTK['DampingRatio'] *0 + 2 + VTK['DampedFreq_Hz'] =VTK['DampedFreq_Hz'] *0 + 3 + for iMode in range(nModes): + VTK['x_eig_magnitude'][:,iMode,:] = np.zeros((nStates,nLinTimes)) + iMode+1 + VTK['x_eig_phase'] [:,iMode,:] = np.zeros((nStates,nLinTimes)) + iMode+1 + VTK['x_eig_magnitude'][2,iMode,:] = 12 + VTK['x_eig_phase'] [4,iMode,:] = 11 + nModesOut=1 + # ------END HACK + # --- Reduce differences python/Matlab by rounding + if nDigits is not None: + res = 10**nDigits + VTK['NaturalFreq_Hz'] = np.around(VTK['NaturalFreq_Hz'] , nDigits) + VTK['DampingRatio'] = np.around(VTK['DampingRatio'] , nDigits) + VTK['DampedFreq_Hz'] = np.around(VTK['DampedFreq_Hz'] , nDigits) + VTK['x_eig_magnitude'] = np.around(VTK['x_eig_magnitude'], nDigits) + VTK['x_eig_phase' ] = np.around(VTK['x_eig_phase'] , nDigits) + + # --- Write to disk + with open(modesFilename, 'wb') as fid: + fwrite(fid, 1, 'int32' )# write a file identifier in case we ever change this format + fwrite(fid, nModesOut, 'int32' )# number of modes (for easier file reading) + fwrite(fid, nStates, 'int32' )# number of states (for easier file reading) + fwrite(fid, nLinTimes,'int32' )# number of azimuths (i.e., LinTimes) (for easier file reading) + # Freq and damping (not used in the FAST visualization algorithm) + fwrite(fid, VTK['NaturalFreq_Hz'], reFmt) + fwrite(fid, VTK['DampingRatio'], reFmt) + fwrite(fid, VTK['DampedFreq_Hz'], reFmt) + # Writing data mode by mode + for iMode in range(nModesOut): + fwrite(fid, VTK['x_eig_magnitude'][:,iMode,:], reFmt) + fwrite(fid, VTK['x_eig_phase'] [:,iMode,:], reFmt) + if verbose: + print(' Written ModeFile:', modesFilename) + +def readModesForViz(modesFilename): + """ """ + reFmt = 'float64' #8-byte real numbers + with open(modesFilename, 'rb') as fid: + fformat = fread(fid, 1, 'int32' ) # format identifier + nModes = fread(fid, 1, 'int32' ) # number of modes (for easier file reading) + nStates = fread(fid, 1, 'int32' ) # number of states (for easier file reading) + nLinTimes= fread(fid, 1, 'int32' ) # number of azimuths (i.e., LinTimes) (for easier file reading) + # Freq and damping (not used in the FAST visualization algorithm) + f0 = fread(fid, nModes, reFmt ) # number of modes (for easier file reading) + zeta = fread(fid, nModes, reFmt ) # number of states (for easier file reading) + fd = fread(fid, nModes, reFmt ) # number of azimuths (i.e., LinTimes) (for easier file reading) + # Reading data mode by mode + Qmag = np.zeros((nStates, nModes, nLinTimes)) + Qphi = np.zeros((nStates, nModes, nLinTimes)) + for iMode in range(nModes): + mag = fread(fid, nStates*nLinTimes, reFmt).reshape((nStates,nLinTimes), order='F') + phi = fread(fid, nStates*nLinTimes, reFmt).reshape((nStates,nLinTimes), order='F') + Qmag[:,iMode,:] = mag + Qphi[:,iMode,:] = phi + + VTK = {} + VTK['NaturalFreq_Hz'] = f0 + VTK['DampingRatio'] = zeta + VTK['DampedFreq_Hz'] = fd + VTK['x_eig_magnitude'] = Qmag + VTK['x_eig_phase'] = Qphi + + return VTK + + +def findLinFiles(fstFile, verbose=False): + """ + Find .lin files given a .fst file + """ + fullpathbase, ext = os.path.splitext(fstFile) + # NOTE: the code below is problematic for module lin files ED.1.lin + # So we do a re search to filter these out + # First use glob + lin_file_fmt = '{}.*.lin'.format(fullpathbase) + lin_files = glob.glob(lin_file_fmt) + # Then use re for stricter search + lin_file_fmt_re = r'.*\.[0-9]+\.lin' + lin_files = glob_re(lin_file_fmt_re, lin_files) + if len(lin_files)==0: + if verbose: + print('[WARN] Lin. files: {} ({})'.format(lin_file_fmt, len(lin_files))) + else: + if verbose: + print(' Lin. files: {} ({})'.format(lin_file_fmt, len(lin_files))) + return lin_files + +def estimateLengths(fstFile, verbose=False): + if os.path.exists(fstFile): + # try to read BladeLen and TowerLen from fst file + # TODO: can be done with pyFAST.io or AeroElasticSE + # The interface is very similar + from pyFAST.input_output.fast_input_deck import FASTInputDeck + fst = FASTInputDeck(fstFile, 'ED') + ED = fst.fst_vt['ElastoDyn'] + if ED is None: + raise Exception('Unable to infer BladeLen and TowerLen, ElastoDyn file not found. FST file is: ',fstFile) + BladeLen = ED['TipRad'] - ED['HubRad'] + TowerLen = ED['TowerHt'] + else: + raise Exception('Provide `BladeLen` and `TowerLen`, or, an existing fst and ED file') + if verbose: + print('BladeLength (for scaling): ',BladeLen) + print('TowerLength (for scaling): ',TowerLen) + + return BladeLen, TowerLen + +def glob_re(pattern, strings): + """ Apply a pattern to a list of strings + Typically used as "glob" and "re" to select a list of files matting a given mattern""" + return list(filter(re.compile(pattern).match, strings)) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py new file mode 100644 index 0000000000..e0cf56f7eb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/modules/olaf.py @@ -0,0 +1,211 @@ +""" +Tools to work with OLAF the vortex code implemented in openfast +""" +import numpy as np + + +def OLAFParams(omega_rpm, U0, R, a=0.3, aScale=1.2, + deltaPsiDeg=6, nPerRot=None, + targetFreeWakeLengthD=1, + targetWakeLengthD=4., + nNWrot=8, + nNWrotFree=1, + nFWrot=0, nFWrotFree=0, + verbose=True, dt_glue_code=None): + """ + Computes recommended time step and wake length for OLAF based on: + + INPUTS: + - omega_rpm: rotational speed [RPM] + - U0: mean wind speed [m/s] + - R: rotor radius [m] + + OPTIONS FOR TIME STEP: + - either: + - deltaPsiDeg : target azimuthal discretization [deg] + or + - nPerRot : number of time step per rotations. + deltaPsiDeg - nPerRot + 5 72 + 6 60 + 7 51.5 + 8 45 + - dt_glue_code: glue code time step. If provided, the time step of OLAF will be approximated + such that it is a multiple of the glue-code time step. + + OPTIONS FOR WAKE LENGTH: + - a: average axial induction factor at the rotor [-] + - aScale: scaling factor to estimate induction, such that the wake convection velocity is: + Uc=U0(1-aScale*a) + - targetWakeLengthD: target wake length in diameter [D] + - nNWrot : minimum number of near wake rotations + - nFWrot : minimum number of far wake rotations + - nFWrotFree : minimum number of far wake rotations (free panels) + + """ + def myprint(*args, **kwargs): + if verbose: + print(*args, **kwargs) + + # Rotational period + omega = omega_rpm*2*np.pi/60 + T = 2*np.pi/omega + # Convection velocity + Uc = U0 * (1-aScale*a) + + # Desired time step + if nPerRot is not None: + dt_wanted = np.around(T/nPerRot,5) + deltaPsiDeg = np.around(omega*dt_wanted*180/np.pi ,2) + else: + dt_wanted = np.around(deltaPsiDeg/(6*omega_rpm),5) + nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) + + # Adapting desired time step based on glue code time step + if dt_glue_code is not None: + dt_rounded = round(dt_wanted/dt_glue_code)*dt_glue_code + deltaPsiDeg2 = np.around(omega*dt_rounded *180/np.pi ,2) + myprint('>>> To satisfy glue-code dt:') + myprint(' Rounding dt from {} to {}'.format(dt_wanted, dt_rounded )) + myprint(' Changing dpsi from {} to {}'.format(deltaPsiDeg, deltaPsiDeg2)) + dt_fvw = dt_rounded + deltaPsiDeg = deltaPsiDeg2 + nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) + else: + dt_fvw = dt_wanted + + # Useful functions + n2L = lambda n: (n * dt_fvw * Uc)/(2*R) # convert number of panels to distance + n2R = lambda n: n * dt_fvw / T # convert number of panels to number of rotations + n2t = lambda n: n * dt_fvw # convert number of panels to time + + # All Wake (AW) panels - Wake length from mean wind speed + targetWakeLength = targetWakeLengthD * 2 * R + nAWPanels_FromU0 = int(targetWakeLength / (Uc*dt_fvw)) + # Free near wake panels (based on distance) + targetFreeWakeLength = targetFreeWakeLengthD * 2 * R + nNWPanelsFree_FromU0 = int(targetFreeWakeLength / (Uc*dt_fvw)) + nNWPanelsFree_FromRot = int(nNWrotFree*nPerRot) + # Far wake (FW) panels, always from number of rotations + nFWPanels = int(nFWrot*nPerRot) + nFWPanelsFree = int(nFWrotFree*nPerRot) + # Wake length from rotational speed and number of rotations + nAWPanels_FromRot = int(nNWrot*nPerRot) # Total number of panels NW+FW + + # Below we chose between criteria on number of rotation or donwstream distance + # This can be adapted/improved + myprint('Number of panels (NW free) from wind speed and distance:{:15d}'.format(nNWPanelsFree_FromU0)) + myprint('Number of panels (NW free) from number of rotations :{:15d}'.format(nNWPanelsFree_FromRot)) + myprint('Number of panels (NW+FW) from wind speed and distance:{:15d}'.format(nAWPanels_FromU0)) + myprint('Number of panels (NW+FW) from number of rotations :{:15d}'.format(nAWPanels_FromRot)) + myprint('Number of panels (NW+FW) from average between two :{:15d}'.format(int((nAWPanels_FromRot+nAWPanels_FromU0)/2))) + if nAWPanels_FromRot>nAWPanels_FromU0: + # Criteria based on rotation wins: + myprint('[INFO] Using number of rotations to setup number of panels') + nAWPanels = nAWPanels_FromRot # Total number of panels NW+FW + else: + myprint('[INFO] Using wind speed and distance to setup number of panels') + # Wake distance wins, we keep the nFW from rot but increase nNW + nAWPanels = nAWPanels_FromU0 # Total number of panels NW+FW + if nNWPanelsFree_FromRot>nNWPanelsFree_FromU0: + # Criteria based on rotation wins: + myprint('[INFO] Using number of rotations to setup number of free panels') + nNWPanelsFree = nNWPanelsFree_FromRot + else: + myprint('[INFO] Using wind speed and distance to setup number of free panels') + # Wake distance wins, we keep the nFW from rot but increase nNW + nNWPanelsFree = nNWPanelsFree_FromU0 + + nNWPanels = nAWPanels - nFWPanels # nNW = All-Far Wake + + # See "free" near wake + if nNWPanelsFree>nNWPanels: + nNWPanelsFree=nNWPanels + myprint('[INFO] Capping number of free NW panels to max.') + if nNWPanelsFree0: + nFWPanelsFree=0 + myprint('[INFO] Setting number of Free FW panels to zero because a frozen near wake is used') + + # Transient time (twice the time to develop the full wake extent) + # This is the minimum recommended time before convergence of the wake is expected + # (might be quite long) + tMin = 2 * dt_fvw*nAWPanels + if verbose: + myprint('') + myprint('{:15.2f} Transient time ({:5.1f} rot)'.format(tMin, tMin/T)) + myprint('{:15d} nAWPanels ({:5.1f} rot, {:5.1f}D)'.format(nAWPanels, n2R(nAWPanels), n2L(nAWPanels))) + myprint('') + myprint('OLAF INPUT FILE:') + myprint('----------------------- GENERAL OPTIONS ---------------------') + myprint('{:15.6f} DTFVW (delta psi = {:5.1f}deg)'.format(dt_fvw, deltaPsiDeg)) + myprint('--------------- WAKE EXTENT AND DISCRETIZATION --------------') + myprint('{:15d} nNWPanels ({:5.1f} rot, {:5.1f}D)'.format(nNWPanels , n2R(nNWPanels ), n2L(nNWPanels ))) + myprint('{:15d} nNWPanelsFree ({:5.1f} rot, {:5.1f}D {:5.1f})'.format(nNWPanelsFree, n2R(nNWPanelsFree), n2L(nNWPanelsFree), n2t(nNWPanelsFree))) + myprint('{:15d} nFWPanels ({:5.1f} rot, {:5.1f}D)'.format(nFWPanels , n2R(nFWPanels ), n2L(nFWPanels ))) + myprint('{:15d} nFWPanelsFree ({:5.1f} rot, {:5.1f}D)'.format(nFWPanelsFree, n2R(nFWPanelsFree), n2L(nFWPanelsFree))) + + return dt_fvw, tMin, nNWPanels, nNWPanelsFree, nFWPanels, nFWPanelsFree + + + +def OLAFParamsRPM(omega_rpm, deltaPsiDeg=6, nNWrot=2, nFWrot=10, nFWrotFree=3, nPerRot=None, verbose=True, dt_glue_code=None, totalRot=None): + """ + Computes recommended time step and wake length based on the rotational speed in RPM + + INPUTS: + - omega_rpm: rotational speed in RPM + - deltaPsiDeg : azimuthal discretization in deg + - nNWrot : number of near wake rotations + - nFWrot : total number of far wake rotations + - nFWrotFree : number of far wake rotations that are free + + deltaPsiDeg - nPerRot + 5 72 + 6 60 + 7 51.5 + 8 45 + """ + omega_rpm = np.asarray(omega_rpm) + omega = omega_rpm*2*np.pi/60 + T = 2*np.pi/omega + if nPerRot is not None: + dt_wanted = np.around(T/nPerRot,5) + deltaPsiDeg = np.around(omega*dt_wanted*180/np.pi ,2) + else: + dt_wanted = np.around(deltaPsiDeg/(6*omega_rpm),5) + nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) + if dt_glue_code is not None: + dt_rounded = round(dt_wanted/dt_glue_code)*dt_glue_code + deltaPsiDeg2 = np.around(omega*dt_rounded *180/np.pi ,2) + print('>>> To satisfy glue-code dt:') + print(' Rounding dt from {} to {}'.format(dt_wanted, dt_rounded )) + print(' Changing dpsi from {} to {}'.format(deltaPsiDeg, deltaPsiDeg2)) + dt_wanted = dt_rounded + deltaPsiDeg = deltaPsiDeg2 + nPerRot = int(2*np.pi /(deltaPsiDeg*np.pi/180)) + + nNWPanel = int(nNWrot*nPerRot) + nFWPanel = int(nFWrot*nPerRot) + nFWPanelFree = int(nFWrotFree*nPerRot) + + if totalRot is None: + totalRot = (nNWrot + nFWrot)*3 # going three-times through the entire wake + + tMax = dt_wanted*nPerRot*totalRot + + if verbose: + print(dt_wanted , ' dt') + print(int (nNWPanel ), ' nNWPanel ({} rotations)'.format(nNWrot)) + print(int (nFWPanel ), ' FarWakeLength ({} rotations)'.format(nFWrot)) + print(int (nFWPanelFree), ' FreeFarWakeLength ({} rotations)'.format(nFWrotFree)) + print(tMax , ' Tmax ({} rotations)'.format(totalRot)) + + return dt_wanted, tMax, nNWPanel, nFWPanel, nFWPanelFree + + + + + + +if __name__ == '__main__': + OLAFParams(omega_rpm = 4.87558, U0=8, R=63, deltaPsiDeg=6, verbose=True) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py new file mode 100644 index 0000000000..7778de4b7a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/__init__.py @@ -0,0 +1,3 @@ +# For now making everything available +from pyFAST.postpro.postpro import * +from pyFAST.tools.fatigue import equivalent_load diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py new file mode 100644 index 0000000000..40e2511b98 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_EquivalentLoad.py @@ -0,0 +1,30 @@ +""" +- Open and OpenFAST binary file +- Convert it to a pandas dataframe +- Compute damage equivalent load for a given Wohler exponent +""" +import os +import numpy as np +import matplotlib.pyplot as plt +from pyFAST.input_output import FASTOutputFile +from pyFAST.postpro import equivalent_load + +# Get current directory so this script can be called from any location +scriptDir = os.path.dirname(__file__) + +# Read an openFAST binary +fastoutFilename = os.path.join(scriptDir, '../../../data/example_files/fastout_allnodes.outb') +df = FASTOutputFile(fastoutFilename).toDataFrame() + + +# Compute equivalent load for one signal and Wohler slope +m = 1 # Wohler slope +Leq = equivalent_load(df['Time_[s]'], df['RootMyc1_[kN-m]'], m=m) +print('Leq ',Leq) +# Leq = equivalent_load(df['Time_[s]'], df['RootMyc1_[kN-m]'], m=m, method='fatpack') # requires package fatpack + + +if __name__ == '__main__': + plt.show() +if __name__ == '__test__': + np.testing.assert_almost_equal(Leq , 284.30398, 3) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py new file mode 100644 index 0000000000..6e1b8320ba --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialInterp.py @@ -0,0 +1,79 @@ +""" +This example opens a fast output file, and interpolate a timeseries to a given radial location. +This is convenient when outputs are required at a station different from the ones used in the OpenFAST outputs. + +""" +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +import pyFAST.input_output as io +import pyFAST.input_output.postpro as postpro + +def main(): + # Get current directory so this script can be called from any location + MyDir=os.path.dirname(__file__) + + # --- Read an openfast output file + outFile = os.path.join(MyDir,'../../../data/example_files/fastout_allnodes.outb') + df = io.fast_output_file.FASTOutputFile(outFile).toDataFrame() + + # --- Define output radial stations + # Option 1 - Get all these locations automatically (recommended) + fstFile = os.path.join(MyDir,'../../../data/NREL5MW/Main_Onshore.fst') # must correspond to the one used to generate outputs + d = postpro.FASTSpanwiseOutputs(fstFile, df.columns.values) + r_AD = d['r_AD'] + r_ED_bld = d['r_ED_bld'] + r_ED_twr = d['r_ED_twr'] + r_BD = d['r_BD'] + IR_AD = d['IR_AD'] + IR_ED_bld = d['IR_ED_bld'] + IR_ED_twr = d['IR_ED_twr'] + IR_BD = d['IR_BD'] + TwrLen = d['TwrLen'] + R = d['R'] + r_hub = d['r_hub'] + fst = d['fst'] + + # Option 2 - Get ouputs locations for each module + #r_ED_gag, IR_ED = ED_BldGag(fstFile) + #r_AD_gag, IR_AD = AD_BldGag(fstFile) + + # Option 3 - Define them manually.. + #r_AD = [0.,30.,60.] + #r_ED = [0.,30.,60.] + + # --- Interpolate Cl and TDx at desired radial position + # NOTE: format need to be adjusted if you use AllOuts, or outputs at few nodes + r = 60 # Radial location where outputs are to be interpolated + Cl_interp = postpro.radialInterpTS(df, r, 'Cl_[-]', r_AD, bldFmt='AB{:d}', ndFmt='N{:03d}') + TDx_interp = postpro.radialInterpTS(df, r, 'TDx_[m]', r_ED_bld, bldFmt='B{:d}' , ndFmt='N{:03d}') + #TDx_interp = postpro.radialInterpTS(df, r, 'TDx_[m]', r_ED_bld, bldFmt='B{:d}' , ndFmt='N{d}') + + # --- Plot + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + ax.plot(df['Time_[s]'].values, df['AB1N017Cl_[-]'].values, label='Section before (r={}m)'.format(r_AD[16])) + ax.plot(df['Time_[s]'].values, Cl_interp.values , label='Interpolated (r={}m)'.format(r)) + ax.plot(df['Time_[s]'].values, df['AB1N018Cl_[-]'].values, label='Section after (r={}m)'.format(r_AD[17])) + ax.set_xlabel('Time [s]') + ax.set_ylabel('Cl [-]') + ax.set_xlim([7,10]) + ax.set_ylim([0.35,0.48]) + ax.legend() + ax.tick_params(direction='in') + ax.set_title('FAST - interpolate radial time series') + +if __name__=='__main__': + main() + plt.show() + +if __name__=='__test__': + main() + +if __name__=='__export__': + main() + from welib.tools.repo import export_figs_callback + export_figs_callback(__file__) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py new file mode 100644 index 0000000000..32d1ba712a --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_RadialPostPro.py @@ -0,0 +1,57 @@ +""" +Plot average OpenFAST outputs as function of the radial position +""" +import os +import glob +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +import pyFAST.input_output as io +import pyFAST.postpro as postpro + +def main(): + + # Get current directory so this script can be called from any location + scriptDir=os.path.dirname(__file__) + + # --- Step 1: Read an openfast output file + outFile = os.path.join(scriptDir,'../../../data/example_files/fastout_allnodes.outb') + df = io.fast_output_file.FASTOutputFile(outFile).toDataFrame() + + # --- Step2 : Average data and extrat the radial stations + # Averaging here is done over 1 period (avgParam=1, avgMethod='periods') + # To get the output radial stations, a .fst file is needed + fstFile = os.path.join(scriptDir,'../../../data/NREL5MW/Main_Onshore.fst') + out = postpro.spanwisePostPro(FST_In=fstFile, avgMethod='periods', avgParam=1, df=df) + dfRad_ED=out['ED_bld']; dfRad_AD = out['AD']; dfRad_BD = out['BD'] + + # --- Step1&2 at once (when .outb and .fst are next to each other in same folder, with same name) + # out = postpro.spanwisePostPro(FST_In=fstFile, avgMethod='periods', avgParam=1, out_ext='.outb') + + # --- (Optional, compute time series average) + # Averaging here is done over the last 100s (avgParam=100, avgMethod='constantwindow') + #dfAvg = postpro.averageDF(df, avgMethod='constantwindow' ,avgParam=100) + + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + ax.plot(dfRad_AD['r/R_[-]'].values, dfRad_AD['B1Cl_[-]'].values/dfRad_AD['B1Cl_[-]'].max() , label='Lift coefficient (AeroDyn)') + ax.plot(dfRad_ED['r/R_[-]'].values, dfRad_ED['B1TDx_[m]'].values/dfRad_ED['B1TDx_[m]'].max(), label='Flap displacement (ElastoDyn)') + ax.set_xlabel('r/R [-]') + ax.set_ylabel('Values normalized by max [-]') + ax.legend() + ax.tick_params(direction='in') + ax.set_title('FAST - Average radial outputs') + +if __name__=='__main__': + main() + plt.show() + +if __name__=='__test__': + main() + +if __name__=='__export__': + main() + from welib.tools.repo import export_figs_callback + export_figs_callback(__file__) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py new file mode 100644 index 0000000000..69a5047246 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/examples/Example_Remap.py @@ -0,0 +1,27 @@ +""" +Remap a dataframe: change names, and perform operations (e.g. change units, scale, combine signals) +""" +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import os +# Local +import pyFAST.input_output as io +import pyFAST.input_output.postpro as postpro + +if __name__ == '__main__': + ColumnMap={ + 'WS_[m/s]' : '{Wind1VelX_[m/s]}' , # create a new column from existing one + 'RtTSR_[-]' : '{RtTSR_[-]} * 2 + {RtAeroCt_[-]}' , # change value of column + 'RotSpeed_[rad/s]' : '{RotSpeed_[rpm]} * 2*np.pi/60 ', # new column [rpm] -> [rad/s] + } + + # Get current directory so this script can be called from any location + MyDir=os.path.dirname(__file__) + # --- Step 1: Read an openfast output file + outFile = os.path.join(MyDir,'../../../data/example_files/fastout_allnodes.outb') + df = io.fast_output_file.FASTOutputFile(outFile).toDataFrame() + # Change columns based on formulae, potentially adding new columns + df = postpro.remap_df(df, ColumnMap) + + #df.to_csv('_Out.csv', index=False) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py new file mode 100644 index 0000000000..79bdd8debb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/postpro.py @@ -0,0 +1,1844 @@ +# --- For cmd.py +import os +import pandas as pd +import numpy as np +import re + +import pyFAST.input_output as weio +from pyFAST.common import PYFASTException as WELIBException + +# --- fast libraries +from pyFAST.input_output.fast_input_file import FASTInputFile +from pyFAST.input_output.fast_output_file import FASTOutputFile +from pyFAST.input_output.fast_input_deck import FASTInputDeck +import pyFAST.fastfarm.fastfarm as fastfarm + +# --------------------------------------------------------------------------------} +# --- Tools for IO +# --------------------------------------------------------------------------------{ +def getEDClass(class_or_filename): + """ + Return ElastoDyn instance of FileCl + INPUT: either + - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) + - a filepath to a ElastoDyn input file + - a filepath to a main OpenFAST input file + """ + if hasattr(class_or_filename,'startswith'): # if string + ED = FASTInputFile(class_or_filename) + if 'EDFile' in ED.keys(): # User provided a .fst file... + parentDir=os.path.dirname(class_or_filename) + EDfilename = os.path.join(parentDir, ED['EDFile'].replace('"','')) + ED = FASTInputFile(EDfilename) + else: + ED = class_or_filename + return ED + +def ED_BldStations(ED): + """ Returns ElastoDyn Blade Station positions, useful to know where the outputs are. + INPUTS: + - ED: either: + - a filename of a ElastoDyn input file + - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) + + OUTUPTS: + - bld_fract: fraction of the blade length were stations are defined + - r_nodes: spanwise position from the rotor apex of the Blade stations + """ + ED = getEDClass(ED) + + nBldNodes = ED['BldNodes'] + bld_fract = np.arange(1./nBldNodes/2., 1, 1./nBldNodes) + r_nodes = bld_fract*(ED['TipRad']-ED['HubRad']) + ED['HubRad'] + return bld_fract, r_nodes + +def ED_TwrStations(ED, addBase=True): + """ Returns ElastoDyn Tower Station positions, useful to know where the outputs are. + INPUTS: + - ED: either: + - a filename of a ElastoDyn input file + - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) + + OUTPUTS: + - r_fract: fraction of the towet length were stations are defined + - h_nodes: height from the *ground* of the stations (not from the Tower base) + """ + ED = getEDClass(ED) + + nTwrNodes = ED['TwrNodes'] + twr_fract = np.arange(1./nTwrNodes/2., 1, 1./nTwrNodes) + h_nodes = twr_fract*(ED['TowerHt']-ED['TowerBsHt']) + if addBase: + h_nodes += ED['TowerBsHt'] + return twr_fract, h_nodes + +def ED_BldGag(ED): + """ Returns the radial position of ElastoDyn blade gages + INPUTS: + - ED: either: + - a filename of a ElastoDyn input file + - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) + OUTPUTS: + - r_gag: The radial positions of the gages, given from the rotor apex + """ + ED = getEDClass(ED) + _,r_nodes= ED_BldStations(ED) + + # if ED.hasNodal: + # return r_nodes, None + nOuts = ED['NBlGages'] + if nOuts<=0: + return np.array([]), np.array([]) + if type(ED['BldGagNd']) is list: + Inodes = np.asarray(ED['BldGagNd']) + else: + Inodes = np.array([ED['BldGagNd']]) + r_gag = r_nodes[ Inodes[:nOuts] -1] + return r_gag, Inodes + +def ED_TwrGag(ED, addBase=True): + """ Returns the heights of ElastoDyn blade gages + INPUTS: + - ED: either: + - a filename of a ElastoDyn input file + - an instance of FileCl, as returned by reading the file, ED = weio.read(ED_filename) + - addBase: if True, TowerBsHt is added to h_gag + OUTPUTS: + - h_gag: The heights of the gages, given from the ground height (tower base + TowerBsHt) + """ + ED = getEDClass(ED) + + _,h_nodes= ED_TwrStations(ED, addBase=addBase) + nOuts = ED['NTwGages'] + if nOuts<=0: + return np.array([]), None + if type(ED['TwrGagNd']) is list: + Inodes = np.asarray(ED['TwrGagNd']) + else: + Inodes = np.array([ED['TwrGagNd']]) + h_gag = h_nodes[ Inodes[:nOuts] -1] + return h_gag, Inodes + + +def AD14_BldGag(AD): + """ Returns the radial position of AeroDyn 14 blade gages (based on "print" in column 6) + INPUTS: + - AD: either: + - a filename of a AeroDyn input file + - an instance of FileCl, as returned by reading the file, AD = weio.read(AD_filename) + OUTPUTS: + - r_gag: The radial positions of the gages, given from the blade root + """ + if hasattr(AD,'startswith'): # if string + AD = FASTInputFile(AD) + + Nodes=AD['BldAeroNodes'] + if Nodes.shape[1]==6: + doPrint= np.array([ n.lower().find('p')==0 for n in Nodes[:,5]]) + else: + doPrint=np.array([ True for n in Nodes[:,0]]) + + r_gag = Nodes[doPrint,0].astype(float) + IR = np.arange(1,len(Nodes)+1)[doPrint] + return r_gag, IR + +def AD_BldGag(AD,AD_bld,chordOut=False): + """ Returns the radial position of AeroDyn blade gages + INPUTS: + - AD: either: + - a filename of a AeroDyn input file + - an instance of FileCl, as returned by reading the file, AD = weio.read(AD_filename) + - AD_bld: either: + - a filename of a AeroDyn Blade input file + - an instance of FileCl, as returned by reading the file, AD_bld = weio.read(AD_bld_filename) + OUTPUTS: + - r_gag: The radial positions of the gages, given from the blade root + """ + if hasattr(AD,'startswith'): # if string + AD = FASTInputFile(AD) + if hasattr(AD_bld,'startswith'): # if string + AD_bld = FASTInputFile(AD_bld) + #print(AD_bld.keys()) + nOuts=AD['NBlOuts'] + if nOuts<=0: + if chordOut: + return np.array([]), np.array([]) + else: + return np.array([]) + INodes = np.array(AD['BlOutNd'][:nOuts]) + r_gag = AD_bld['BldAeroNodes'][INodes-1,0] + if chordOut: + chord_gag = AD_bld['BldAeroNodes'][INodes-1,5] + return r_gag,chord_gag + else: + return r_gag + +def BD_BldStations(BD, BDBld): + """ Returns BeamDyn Blade Quadrature Points positions: + - Defines where BeamDyn outputs are provided. + - Used by BeamDyn for the Input Mesh u%DistrLoad + and the Output Mesh y%BldMotion + NOTE: This should match the quadrature points in the summary file of BeamDyn for a straight beam + This will NOT match the "Initial Nodes" reported in the summary file. + INPUTS: + - BD: either: + - a filename of a BeamDyn input file + - an instance of FileCl, as returned by reading the file, BD = weio.read(BD_filename) + - BDBld: same as BD but for the BeamDyn blade file + OUTPUTS: + - r_nodes: spanwise position from the balde root of the Blade stations + """ + GAUSS_QUADRATURE = 1 + TRAP_QUADRATURE = 2 + + if hasattr(BD,'startswith'): # if string + BD = FASTInputFile(BD) + if hasattr(BDBld,'startswith'): # if string + BDBld = FASTInputFile(BDBld) + # BD['BldFile'].replace('"','')) + + # --- Extract relevant info from BD files + z_kp = BD['MemberGeom'][:,2] + R = z_kp[-1]-z_kp[0] + + nStations = BDBld['station_total'] + rStations = BDBld['BeamProperties']['span']*R + quad = BD['quadrature'] + + refine = BD['refine'] + nodes_per_elem = BD['order_elem'] + 1 + if 'default' in str(refine).lower(): + refine = 1 + + # --- Distribution of points + if quad==GAUSS_QUADRATURE: + # See BD_GaussPointWeight + # Number of Gauss points + nqp = nodes_per_elem #- 1 + # qp_indx_offset = 1 ! we skip the first node on the input mesh (AD needs values at the end points, but BD doesn't use them) + x, _ = np.polynomial.legendre.leggauss(nqp) + r= R*(1+x)/2 + + elif quad==TRAP_QUADRATURE: + # See BD_TrapezoidalPointWeight + nqp = (nStations - 1)*refine + 1 + # qp_indx_offset = 0 + # BldMotionNodeLoc = BD_MESH_QP ! we want to output y%BldMotion at the blade input property stations, and this will be a short-cut + dr = np.diff(rStations)/refine + rmid = np.concatenate( [rStations[:-1]+dr*(iref+1) for iref in np.arange(refine-1) ]) + r = np.concatenate( (rStations, rmid)) + r = np.unique(np.sort(r)) + else: + raise NotImplementedError('Only Gauss and Trap quadrature implemented') + return r + +def BD_BldGag(BD): + """ Returns the radial position of BeamDyn blade gages + INPUTS: + - BD: either: + - a filename of a BeamDyn input file + - an instance of FileCl, as returned by reading the file, BD = weio.read(BD_filename) + OUTPUTS: + - r_gag: The radial positions of the gages, given from the rotor apex + """ + if hasattr(BD,'startswith'): # if string + BD = FASTInputFile(BD) + + M = BD['MemberGeom'] + r_nodes = M[:,2] # NOTE: we select the z axis here, and we don't take curvilenear coord + nOuts = BD['NNodeOuts'] + if nOuts<=0: + nOuts=0 + if type(BD['OutNd']) is list: + Inodes = np.asarray(BD['OutNd']) + else: + Inodes = np.array([BD['OutNd']]) + r_gag = r_nodes[ Inodes[:nOuts] -1] + return r_gag, Inodes, r_nodes + +# +def SD_MembersNodes(SD): + sd = SubDyn(SD) + return sd.pointsMN + +def SD_MembersJoints(SD): + sd = SubDyn(SD) + return sd.pointsMJ + +def SD_MembersGages(SD): + sd = SubDyn(SD) + return sd.pointsMNout + +# +# 1, 7, 14, 21, 30, 36, 43, 52, 58 BldGagNd List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + +# --------------------------------------------------------------------------------} +# --- Helper functions for radial data +# --------------------------------------------------------------------------------{ +def _HarmonizeSpanwiseData(Name, Columns, vr, R, IR=None) : + """ helper function to use with spanwiseAD and spanwiseED """ + # --- Data present + data = [c for _,c in Columns if c is not None] + ColNames = [n for n,_ in Columns if n is not None] + Lengths = [len(d) for d in data] + if len(data)<=0: + print('[WARN] No spanwise data for '+Name) + return None, None, None + + # --- Harmonize data so that they all have the same length + nrMax = np.max(Lengths) + ids=np.arange(nrMax) + if vr is None: + bFakeVr=True + vr_bar = ids/(nrMax-1) + else: + vr_bar=vr/R + bFakeVr=False + if (nrMax)len(vr_bar): + raise Exception('Inconsitent length between radial stations and max index present in output chanels') + + for i in np.arange(len(data)): + d=data[i] + if len(d)len(vr_bar): + raise Exception('Inconsistent length between radial stations ({:d}) and max index present in output chanels ({:d})'.format(len(vr_bar),nrMax)) + df.insert(0, sspan_bar+'_[-]', vr_bar) + + if IR is not None: + df['Node_[#]']=IR[:nrMax] + df['i_[#]']=ids+1 + if vr is not None: + df[sspan+'_[m]'] = vr[:nrMax] + return df + +def find_matching_columns(Cols, PatternMap): + ColsInfo=[] + nrMax=0 + for colpattern,colmap in PatternMap.items(): + # Extracting columns matching pattern + cols, sIdx = find_matching_pattern(Cols, colpattern) + if len(cols)>0: + # Sorting by ID + cols = np.asarray(cols) + Idx = np.array([int(s) for s in sIdx]) + Isort = np.argsort(Idx) + Idx = Idx[Isort] + cols = cols[Isort] + col={'name':colmap,'Idx':Idx,'cols':cols} + nrMax=max(nrMax,np.max(Idx)) + ColsInfo.append(col) + return ColsInfo,nrMax + +def extract_spanwise_data(ColsInfo, nrMax, df=None,ts=None): + """ + Extract spanwise data based on some column info + ColsInfo: see find_matching_columns + """ + nCols = len(ColsInfo) + if nCols==0: + return None + if ts is not None: + Values = np.zeros((nrMax,nCols)) + Values[:] = np.nan + elif df is not None: + raise NotImplementedError() + + ColNames =[c['name'] for c in ColsInfo] + + for ic,c in enumerate(ColsInfo): + Idx, cols, colname = c['Idx'], c['cols'], c['name'] + for idx,col in zip(Idx,cols): + Values[idx-1,ic]=ts[col] + nMissing = np.sum(np.isnan(Values[:,ic])) + if len(cols)nrMax: + print('[WARN] More values found for {}, found {}/{}'.format(colname,len(cols),nrMax)) + df = pd.DataFrame(data=Values, columns=ColNames) + df = df.reindex(sorted(df.columns), axis=1) + return df + + +def _BDSpanMap(): + BDSpanMap=dict() + for sB in ['B1','B2','B3']: + # Old nodal outputs + BDSpanMap['^'+sB+r'N(\d)TDxr_\[m\]'] = sB+'TDxr_[m]' + BDSpanMap['^'+sB+r'N(\d)TDyr_\[m\]'] = sB+'TDyr_[m]' + BDSpanMap['^'+sB+r'N(\d)TDzr_\[m\]'] = sB+'TDzr_[m]' + # New nodal outputs + BDSpanMap['^'+sB+r'N(\d*)_FxL_\[N\]'] = sB+'FxL_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FxL_\[N\]'] = sB+'FxL_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FxL_\[N\]'] = sB+'FxL_[N]' + BDSpanMap['^'+sB+r'N(\d*)_MxL_\[N-m\]'] = sB+'MxL_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MxL_\[N-m\]'] = sB+'MxL_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MxL_\[N-m\]'] = sB+'MxL_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_Fxr_\[N\]'] = sB+'Fxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_Fxr_\[N\]'] = sB+'Fxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_Fxr_\[N\]'] = sB+'Fxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_Mxr_\[N-m\]'] = sB+'Mxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_Mxr_\[N-m\]'] = sB+'Mxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_Mxr_\[N-m\]'] = sB+'Mxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_TDxr_\[m\]'] = sB+'TDxr_[m]' + BDSpanMap['^'+sB+r'N(\d*)_TDyr_\[m\]'] = sB+'TDyr_[m]' + BDSpanMap['^'+sB+r'N(\d*)_TDzr_\[m\]'] = sB+'TDzr_[m]' + BDSpanMap['^'+sB+r'N(\d*)_RDxr_\[-\]'] = sB+'RDxr_[-]' + BDSpanMap['^'+sB+r'N(\d*)_RDyr_\[-\]'] = sB+'RDyr_[-]' + BDSpanMap['^'+sB+r'N(\d*)_RDzr_\[-\]'] = sB+'RDzr_[-]' + BDSpanMap['^'+sB+r'N(\d*)_AbsXg_\[m\]'] = sB+'AbsXg_[m]' + BDSpanMap['^'+sB+r'N(\d*)_AbsYg_\[m\]'] = sB+'AbsYg_[m]' + BDSpanMap['^'+sB+r'N(\d*)_AbsZg_\[m\]'] = sB+'AbsZg_[m]' + BDSpanMap['^'+sB+r'N(\d*)_AbsXr_\[m\]'] = sB+'AbsXr_[m]' + BDSpanMap['^'+sB+r'N(\d*)_AbsYr_\[m\]'] = sB+'AbsYr_[m]' + BDSpanMap['^'+sB+r'N(\d*)_AbsZr_\[m\]'] = sB+'AbsZr_[m]' + BDSpanMap['^'+sB+r'N(\d*)_TVxg_\[m/s\]'] = sB+'TVxg_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVyg_\[m/s\]'] = sB+'TVyg_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVzg_\[m/s\]'] = sB+'TVzg_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVxl_\[m/s\]'] = sB+'TVxl_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVyl_\[m/s\]'] = sB+'TVyl_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVzl_\[m/s\]'] = sB+'TVzl_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVxr_\[m/s\]'] = sB+'TVxr_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVyr_\[m/s\]'] = sB+'TVyr_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_TVzr_\[m/s\]'] = sB+'TVzr_[m/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVxg_\[deg/s\]'] = sB+'RVxg_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVyg_\[deg/s\]'] = sB+'RVyg_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVzg_\[deg/s\]'] = sB+'RVzg_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVxl_\[deg/s\]'] = sB+'RVxl_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVyl_\[deg/s\]'] = sB+'RVyl_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVzl_\[deg/s\]'] = sB+'RVzl_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVxr_\[deg/s\]'] = sB+'RVxr_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVyr_\[deg/s\]'] = sB+'RVyr_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_RVzr_\[deg/s\]'] = sB+'RVzr_[deg/s]' + BDSpanMap['^'+sB+r'N(\d*)_TAxl_\[m/s^2\]'] = sB+'TAxl_[m/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_TAyl_\[m/s^2\]'] = sB+'TAyl_[m/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_TAzl_\[m/s^2\]'] = sB+'TAzl_[m/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_TAxr_\[m/s^2\]'] = sB+'TAxr_[m/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_TAyr_\[m/s^2\]'] = sB+'TAyr_[m/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_TAzr_\[m/s^2\]'] = sB+'TAzr_[m/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_RAxl_\[deg/s^2\]'] = sB+'RAxl_[deg/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_RAyl_\[deg/s^2\]'] = sB+'RAyl_[deg/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_RAzl_\[deg/s^2\]'] = sB+'RAzl_[deg/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_RAxr_\[deg/s^2\]'] = sB+'RAxr_[deg/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_RAyr_\[deg/s^2\]'] = sB+'RAyr_[deg/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_RAzr_\[deg/s^2\]'] = sB+'RAzr_[deg/s^2]' + BDSpanMap['^'+sB+r'N(\d*)_PFxL_\[N\]'] = sB+'PFxL_[N]' + BDSpanMap['^'+sB+r'N(\d*)_PFyL_\[N\]'] = sB+'PFyL_[N]' + BDSpanMap['^'+sB+r'N(\d*)_PFzL_\[N\]'] = sB+'PFzL_[N]' + BDSpanMap['^'+sB+r'N(\d*)_PMxL_\[N-m\]'] = sB+'PMxL_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_PMyL_\[N-m\]'] = sB+'PMyL_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_PMzL_\[N-m\]'] = sB+'PMzL_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_DFxL_\[N/m\]'] = sB+'DFxL_[N/m]' + BDSpanMap['^'+sB+r'N(\d*)_DFyL_\[N/m\]'] = sB+'DFyL_[N/m]' + BDSpanMap['^'+sB+r'N(\d*)_DFzL_\[N/m\]'] = sB+'DFzL_[N/m]' + BDSpanMap['^'+sB+r'N(\d*)_DMxL_\[N-m/m\]'] = sB+'DMxL_[N-m/m]' + BDSpanMap['^'+sB+r'N(\d*)_DMyL_\[N-m/m\]'] = sB+'DMyL_[N-m/m]' + BDSpanMap['^'+sB+r'N(\d*)_DMzL_\[N-m/m\]'] = sB+'DMzL_[N-m/m]' + BDSpanMap['^'+sB+r'N(\d*)_DFxR_\[N/m\]'] = sB+'DFxR_[N/m]' + BDSpanMap['^'+sB+r'N(\d*)_DFyR_\[N/m\]'] = sB+'DFyR_[N/m]' + BDSpanMap['^'+sB+r'N(\d*)_DFzR_\[N/m\]'] = sB+'DFzR_[N/m]' + BDSpanMap['^'+sB+r'N(\d*)_DMxR_\[N-m/m\]'] = sB+'DMxR_[N-m/m]' + BDSpanMap['^'+sB+r'N(\d*)_DMyR_\[N-m/m\]'] = sB+'DMyR_[N-m/m]' + BDSpanMap['^'+sB+r'N(\d*)_DMzR_\[N-m/m\]'] = sB+'DMzR_[N-m/m]' + BDSpanMap['^'+sB+r'N(\d*)_FFbxl_\[N\]'] = sB+'FFbxl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFbyl_\[N\]'] = sB+'FFbyl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFbzl_\[N\]'] = sB+'FFbzl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFbxr_\[N\]'] = sB+'FFbxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFbyr_\[N\]'] = sB+'FFbyr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFbzr_\[N\]'] = sB+'FFbzr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_MFbxl_\[N-m\]'] = sB+'MFbxl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFbyl_\[N-m\]'] = sB+'MFbyl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFbzl_\[N-m\]'] = sB+'MFbzl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFbxr_\[N-m\]'] = sB+'MFbxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFbyr_\[N-m\]'] = sB+'MFbyr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFbzr_\[N-m\]'] = sB+'MFbzr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_FFcxl_\[N\]'] = sB+'FFcxl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFcyl_\[N\]'] = sB+'FFcyl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFczl_\[N\]'] = sB+'FFczl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFcxr_\[N\]'] = sB+'FFcxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFcyr_\[N\]'] = sB+'FFcyr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFczr_\[N\]'] = sB+'FFczr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_MFcxl_\[N-m\]'] = sB+'MFcxl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFcyl_\[N-m\]'] = sB+'MFcyl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFczl_\[N-m\]'] = sB+'MFczl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFcxr_\[N-m\]'] = sB+'MFcxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFcyr_\[N-m\]'] = sB+'MFcyr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFczr_\[N-m\]'] = sB+'MFczr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_FFdxl_\[N\]'] = sB+'FFdxl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFdyl_\[N\]'] = sB+'FFdyl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFdzl_\[N\]'] = sB+'FFdzl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFdxr_\[N\]'] = sB+'FFdxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFdyr_\[N\]'] = sB+'FFdyr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFdzr_\[N\]'] = sB+'FFdzr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_MFdxl_\[N-m\]'] = sB+'MFdxl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFdyl_\[N-m\]'] = sB+'MFdyl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFdzl_\[N-m\]'] = sB+'MFdzl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFdxr_\[N-m\]'] = sB+'MFdxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFdyr_\[N-m\]'] = sB+'MFdyr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFdzr_\[N-m\]'] = sB+'MFdzr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_FFgxl_\[N\]'] = sB+'FFgxl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFgyl_\[N\]'] = sB+'FFgyl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFgzl_\[N\]'] = sB+'FFgzl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFgxr_\[N\]'] = sB+'FFgxr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFgyr_\[N\]'] = sB+'FFgyr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFgzr_\[N\]'] = sB+'FFgzr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_MFgxl_\[N-m\]'] = sB+'MFgxl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFgyl_\[N-m\]'] = sB+'MFgyl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFgzl_\[N-m\]'] = sB+'MFgzl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFgxr_\[N-m\]'] = sB+'MFgxr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFgyr_\[N-m\]'] = sB+'MFgyr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFgzr_\[N-m\]'] = sB+'MFgzr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_FFixl_\[N\]'] = sB+'FFixl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFiyl_\[N\]'] = sB+'FFiyl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFizl_\[N\]'] = sB+'FFizl_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFixr_\[N\]'] = sB+'FFixr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFiyr_\[N\]'] = sB+'FFiyr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_FFizr_\[N\]'] = sB+'FFizr_[N]' + BDSpanMap['^'+sB+r'N(\d*)_MFixl_\[N-m\]'] = sB+'MFixl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFiyl_\[N-m\]'] = sB+'MFiyl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFizl_\[N-m\]'] = sB+'MFizl_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFixr_\[N-m\]'] = sB+'MFixr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFiyr_\[N-m\]'] = sB+'MFiyr_[N-m]' + BDSpanMap['^'+sB+r'N(\d*)_MFizr_\[N-m\]'] = sB+'MFizr_[N-m]' + return BDSpanMap + + +def spanwiseColBD(Cols): + """ Return column info, available columns and indices that contain BD spanwise data""" + BDSpanMap = _BDSpanMap() + return find_matching_columns(Cols, BDSpanMap) + +def spanwiseColED(Cols): + """ Return column info, available columns and indices that contain ED spanwise data""" + EDSpanMap=dict() + # All Outs + for sB in ['B1','B2','B3']: + EDSpanMap['^[A]*'+sB+r'N(\d*)ALx_\[m/s^2\]' ] = sB+'ALx_[m/s^2]' + EDSpanMap['^[A]*'+sB+r'N(\d*)ALy_\[m/s^2\]' ] = sB+'ALy_[m/s^2]' + EDSpanMap['^[A]*'+sB+r'N(\d*)ALz_\[m/s^2\]' ] = sB+'ALz_[m/s^2]' + EDSpanMap['^[A]*'+sB+r'N(\d*)TDx_\[m\]' ] = sB+'TDx_[m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)TDy_\[m\]' ] = sB+'TDy_[m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)TDz_\[m\]' ] = sB+'TDz_[m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)RDx_\[deg\]' ] = sB+'RDx_[deg]' + EDSpanMap['^[A]*'+sB+r'N(\d*)RDy_\[deg\]' ] = sB+'RDy_[deg]' + EDSpanMap['^[A]*'+sB+r'N(\d*)RDz_\[deg\]' ] = sB+'RDz_[deg]' + EDSpanMap['^[A]*'+sB+r'N(\d*)MLx_\[kN-m\]' ] = sB+'MLx_[kN-m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)MLy_\[kN-m\]' ] = sB+'MLy_[kN-m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)MLz_\[kN-m\]' ] = sB+'MLz_[kN-m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)FLx_\[kN\]' ] = sB+'FLx_[kN]' + EDSpanMap['^[A]*'+sB+r'N(\d*)FLy_\[kN\]' ] = sB+'FLy_[kN]' + EDSpanMap['^[A]*'+sB+r'N(\d*)FLz_\[kN\]' ] = sB+'FLz_[kN]' + EDSpanMap['^[A]*'+sB+r'N(\d*)FLxNT_\[kN\]' ] = sB+'FLxNT_[kN]' + EDSpanMap['^[A]*'+sB+r'N(\d*)FLyNT_\[kN\]' ] = sB+'FLyNT_[kN]' + EDSpanMap['^[A]*'+sB+r'N(\d*)FlyNT_\[kN\]' ] = sB+'FLyNT_[kN]' # <<< Unfortunate + EDSpanMap['^[A]*'+sB+r'N(\d*)MLxNT_\[kN-m\]'] = sB+'MLxNT_[kN-m]' + EDSpanMap['^[A]*'+sB+r'N(\d*)MLyNT_\[kN-m\]'] = sB+'MLyNT_[kN-m]' + # Old + for sB in ['b1','b2','b3']: + SB=sB.upper() + EDSpanMap[r'^Spn(\d)ALx'+sB+r'_\[m/s^2\]']=SB+'ALx_[m/s^2]' + EDSpanMap[r'^Spn(\d)ALy'+sB+r'_\[m/s^2\]']=SB+'ALy_[m/s^2]' + EDSpanMap[r'^Spn(\d)ALz'+sB+r'_\[m/s^2\]']=SB+'ALz_[m/s^2]' + EDSpanMap[r'^Spn(\d)TDx'+sB+r'_\[m\]' ]=SB+'TDx_[m]' + EDSpanMap[r'^Spn(\d)TDy'+sB+r'_\[m\]' ]=SB+'TDy_[m]' + EDSpanMap[r'^Spn(\d)TDz'+sB+r'_\[m\]' ]=SB+'TDz_[m]' + EDSpanMap[r'^Spn(\d)RDx'+sB+r'_\[deg\]' ]=SB+'RDx_[deg]' + EDSpanMap[r'^Spn(\d)RDy'+sB+r'_\[deg\]' ]=SB+'RDy_[deg]' + EDSpanMap[r'^Spn(\d)RDz'+sB+r'_\[deg\]' ]=SB+'RDz_[deg]' + EDSpanMap[r'^Spn(\d)FLx'+sB+r'_\[kN\]' ]=SB+'FLx_[kN]' + EDSpanMap[r'^Spn(\d)FLy'+sB+r'_\[kN\]' ]=SB+'FLy_[kN]' + EDSpanMap[r'^Spn(\d)FLz'+sB+r'_\[kN\]' ]=SB+'FLz_[kN]' + EDSpanMap[r'^Spn(\d)MLy'+sB+r'_\[kN-m\]' ]=SB+'MLx_[kN-m]' + EDSpanMap[r'^Spn(\d)MLx'+sB+r'_\[kN-m\]' ]=SB+'MLy_[kN-m]' + EDSpanMap[r'^Spn(\d)MLz'+sB+r'_\[kN-m\]' ]=SB+'MLz_[kN-m]' + return find_matching_columns(Cols, EDSpanMap) + +def spanwiseColEDTwr(Cols): + """ Return column info, available columns and indices that contain ED spanwise data""" + EDSpanMap=dict() + # All Outs + EDSpanMap[r'^TwHt(\d*)ALxt_\[m/s^2\]'] = 'ALxt_[m/s^2]' + EDSpanMap[r'^TwHt(\d*)ALyt_\[m/s^2\]'] = 'ALyt_[m/s^2]' + EDSpanMap[r'^TwHt(\d*)ALzt_\[m/s^2\]'] = 'ALzt_[m/s^2]' + EDSpanMap[r'^TwHt(\d*)TDxt_\[m\]' ] = 'TDxt_[m]' + EDSpanMap[r'^TwHt(\d*)TDyt_\[m\]' ] = 'TDyt_[m]' + EDSpanMap[r'^TwHt(\d*)TDzt_\[m\]' ] = 'TDzt_[m]' + EDSpanMap[r'^TwHt(\d*)RDxt_\[deg\]' ] = 'RDxt_[deg]' + EDSpanMap[r'^TwHt(\d*)RDyt_\[deg\]' ] = 'RDyt_[deg]' + EDSpanMap[r'^TwHt(\d*)RDzt_\[deg\]' ] = 'RDzt_[deg]' + EDSpanMap[r'^TwHt(\d*)TPxi_\[m\]' ] = 'TPxi_[m]' + EDSpanMap[r'^TwHt(\d*)TPyi_\[m\]' ] = 'TPyi_[m]' + EDSpanMap[r'^TwHt(\d*)TPzi_\[m\]' ] = 'TPzi_[m]' + EDSpanMap[r'^TwHt(\d*)RPxi_\[deg\]' ] = 'RPxi_[deg]' + EDSpanMap[r'^TwHt(\d*)RPyi_\[deg\]' ] = 'RPyi_[deg]' + EDSpanMap[r'^TwHt(\d*)RPzi_\[deg\]' ] = 'RPzi_[deg]' + EDSpanMap[r'^TwHt(\d*)FLxt_\[kN\]' ] = 'FLxt_[kN]' + EDSpanMap[r'^TwHt(\d*)FLyt_\[kN\]' ] = 'FLyt_[kN]' + EDSpanMap[r'^TwHt(\d*)FLzt_\[kN\]' ] = 'FLzt_[kN]' + EDSpanMap[r'^TwHt(\d*)MLxt_\[kN-m\]' ] = 'MLxt_[kN-m]' + EDSpanMap[r'^TwHt(\d*)MLyt_\[kN-m\]' ] = 'MLyt_[kN-m]' + EDSpanMap[r'^TwHt(\d*)MLzt_\[kN-m\]' ] = 'MLzt_[kN-m]' + return find_matching_columns(Cols, EDSpanMap) + + + +def spanwiseColAD(Cols): + """ Return column info, available columns and indices that contain AD spanwise data""" + ADSpanMap=dict() + for sB in ['B1','B2','B3']: + ADSpanMap['^[A]*'+sB+r'N(\d*)Alpha_\[deg\]'] =sB+'Alpha_[deg]' + ADSpanMap['^[A]*'+sB+r'N(\d*)AxInd_\[-\]' ] =sB+'AxInd_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)TnInd_\[-\]' ] =sB+'TnInd_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)AxInd_qs_\[-\]' ]=sB+'AxInd_qs_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)TnInd_qs_\[-\]' ]=sB+'TnInd_qs_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_k_\[-\]' ]=sB+'BEM_k_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_kp_\[-\]' ]=sB+'BEM_kp_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_F_\[-\]' ]=sB+'BEM_F_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)BEM_CT_qs_\[-\]' ]=sB+'BEM_CT_qs_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Cl_\[-\]' ] =sB+'Cl_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Cd_\[-\]' ] =sB+'Cd_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Cm_\[-\]' ] =sB+'Cm_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Cx_\[-\]' ] =sB+'Cx_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Cy_\[-\]' ] =sB+'Cy_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Cn_\[-\]' ] =sB+'Cn_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Ct_\[-\]' ] =sB+'Ct_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Re_\[-\]' ] =sB+'Re_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vrel_\[m/s\]' ] =sB+'Vrel_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Theta_\[deg\]'] =sB+'Theta_[deg]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Phi_\[deg\]' ] =sB+'Phi_[deg]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Curve_\[deg\]'] =sB+'Curve_[deg]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindx_\[m/s\]'] =sB+'Vindx_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindy_\[m/s\]'] =sB+'Vindy_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindxi_\[m/s\]'] =sB+'Vindxi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindyi_\[m/s\]'] =sB+'Vindyi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindzi_\[m/s\]'] =sB+'Vindzi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindxh_\[m/s\]'] =sB+'Vindxh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindyh_\[m/s\]'] =sB+'Vindyh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindzh_\[m/s\]'] =sB+'Vindzh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindxp_\[m/s\]'] =sB+'Vindxp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindyp_\[m/s\]'] =sB+'Vindyp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vindzp_\[m/s\]'] =sB+'Vindzp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fx_\[N/m\]' ] =sB+'Fx_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fy_\[N/m\]' ] =sB+'Fy_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fxi_\[N/m\]' ] =sB+'Fxi_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fyi_\[N/m\]' ] =sB+'Fyi_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fzi_\[N/m\]' ] =sB+'Fzi_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Mxi_\[N-m/m\]' ] =sB+'Mxi_[N-m/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Myi_\[N-m/m\]' ] =sB+'Myi_[N-m/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Mzi_\[N-m/m\]' ] =sB+'Mzi_[N-m/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fl_\[N/m\]' ] =sB+'Fl_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fd_\[N/m\]' ] =sB+'Fd_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Fn_\[N/m\]' ] =sB+'Fn_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Ft_\[N/m\]' ] =sB+'Ft_[N/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VUndx_\[m/s\]'] =sB+'VUndx_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VUndy_\[m/s\]'] =sB+'VUndy_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VUndz_\[m/s\]'] =sB+'VUndz_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VUndxi_\[m/s\]'] =sB+'VUndxi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VUndyi_\[m/s\]'] =sB+'VUndyi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VUndzi_\[m/s\]'] =sB+'VUndzi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisx_\[m/s\]'] =sB+'VDisx_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisy_\[m/s\]'] =sB+'VDisy_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisz_\[m/s\]'] =sB+'VDisz_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisxi_\[m/s\]'] =sB+'VDisxi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisyi_\[m/s\]'] =sB+'VDisyi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDiszi_\[m/s\]'] =sB+'VDiszi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisxh_\[m/s\]'] =sB+'VDisxh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisyh_\[m/s\]'] =sB+'VDisyh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDiszh_\[m/s\]'] =sB+'VDiszh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisxp_\[m/s\]'] =sB+'VDisxp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDisyp_\[m/s\]'] =sB+'VDisyp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)VDiszp_\[m/s\]'] =sB+'VDiszp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVx_\[m/s\]' ] =sB+'STVx_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVy_\[m/s\]' ] =sB+'STVy_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVz_\[m/s\]' ] =sB+'STVz_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVxi_\[m/s\]' ] =sB+'STVxi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVyi_\[m/s\]' ] =sB+'STVyi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVzi_\[m/s\]' ] =sB+'STVzi_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVxh_\[m/s\]' ] =sB+'STVxh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVyh_\[m/s\]' ] =sB+'STVyh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVzh_\[m/s\]' ] =sB+'STVzh_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVxp_\[m/s\]' ] =sB+'STVxp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVyp_\[m/s\]' ] =sB+'STVyp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)STVzp_\[m/s\]' ] =sB+'STVzp_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vx_\[m/s\]' ] =sB+'Vx_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vy_\[m/s\]' ] =sB+'Vy_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Vz_\[m/s\]' ] =sB+'Vz_[m/s]' + ADSpanMap['^[A]*'+sB+r'N(\d*)DynP_\[Pa\]' ] =sB+'DynP_[Pa]' + ADSpanMap['^[A]*'+sB+r'N(\d*)M_\[-\]' ] =sB+'M_[-]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Mm_\[N-m/m\]' ] =sB+'Mm_[N-m/m]' + ADSpanMap['^[A]*'+sB+r'N(\d*)Gam_\[' ] =sB+'Gam_[m^2/s]' #DBGOuts + # DEPRECIATED + ADSpanMap['^[A]*'+sB+r'N(\d*)AOA_\[deg\]' ] =sB+'Alpha_[deg]' # DBGOuts + ADSpanMap['^[A]*'+sB+r'N(\d*)AIn_\[deg\]' ] =sB+'AxInd_[-]' # DBGOuts NOTE BUG Unit + ADSpanMap['^[A]*'+sB+r'N(\d*)ApI_\[deg\]' ] =sB+'TnInd_[-]' # DBGOuts NOTE BUG Unit + ADSpanMap['^[A]*'+sB+r'N(\d*)AIn_\[-\]' ] =sB+'AxInd_[-]' # DBGOuts + ADSpanMap['^[A]*'+sB+r'N(\d*)ApI_\[-\]' ] =sB+'TnInd_[-]' # DBGOuts + ADSpanMap['^[A]*'+sB+r'N(\d*)Uin_\[m/s\]' ] =sB+'Uin_[m/s]' # DBGOuts + ADSpanMap['^[A]*'+sB+r'N(\d*)Uit_\[m/s\]' ] =sB+'Uit_[m/s]' # DBGOuts + ADSpanMap['^[A]*'+sB+r'N(\d*)Uir_\[m/s\]' ] =sB+'Uir_[m/s]' # DBGOuts + ADSpanMap['^[A]*'+sB+r'N(\d*)Twst_\[deg\]' ] =sB+'Twst_[deg]' #DBGOuts + # --- AD 14 + ADSpanMap[r'^Alpha(\d*)_\[deg\]' ]='Alpha_[deg]' + ADSpanMap[r'^DynPres(\d*)_\[Pa\]' ]='DynPres_[Pa]' + ADSpanMap[r'^CLift(\d*)_\[-\]' ]='CLift_[-]' + ADSpanMap[r'^CDrag(\d*)_\[-\]' ]='CDrag_[-]' + ADSpanMap[r'^CNorm(\d*)_\[-\]' ]='CNorm_[-]' + ADSpanMap[r'^CTang(\d*)_\[-\]' ]='CTang_[-]' + ADSpanMap[r'^CMomt(\d*)_\[-\]' ]='CMomt_[-]' + ADSpanMap[r'^Pitch(\d*)_\[deg\]' ]='Pitch_[deg]' + ADSpanMap[r'^AxInd(\d*)_\[-\]' ]='AxInd_[-]' + ADSpanMap[r'^TanInd(\d*)_\[-\]' ]='TanInd_[-]' + ADSpanMap[r'^ForcN(\d*)_\[N\]' ]='ForcN_[N]' + ADSpanMap[r'^ForcT(\d*)_\[N\]' ]='ForcT_[N]' + ADSpanMap[r'^Pmomt(\d*)_\[N-m\]' ]='Pmomt_[N-N]' + ADSpanMap[r'^ReNum(\d*)_\[x10^6\]']='ReNum_[x10^6]' + ADSpanMap[r'^Gamma(\d*)_\[m^2/s\]']='Gamma_[m^2/s]' + + return find_matching_columns(Cols, ADSpanMap) + +def insert_extra_columns_AD(dfRad, tsAvg, vr=None, rho=None, R=None, nB=None, chord=None): + # --- Compute additional values (AD15 only) + if dfRad is None: + return None + if dfRad.shape[1]==0: + return dfRad + if chord is not None: + if vr is not None: + chord =chord[0:len(dfRad)] + for sB in ['B1','B2','B3']: + for coord in ['i','p','h']: + for comp in ['x','y','z']: + s=comp+coord + try: + dfRad[sB+'Vflw{}_[m/s]'.format(s)] = dfRad[sB+'VDis{}_[m/s]'.format(s)] - dfRad[sB+'STV{}_[m/s]'.format(s)] + except: + pass + for coord in ['i','p','h']: + for comp in ['x','y','z']: + s=comp+coord + try: + dfRad[sB+'Vrel{}_[m/s]'.format(s)] = dfRad[sB+'VDis{}_[m/s]'.format(s)] - dfRad[sB+'STV{}_[m/s]'.format(s)] + dfRad[sB+'Vind{}_[m/s]'.format(s)] + except: + pass + try: + s='p' + dfRad[sB+'phi_{}_[def]'.format(s)] = np.arctan2(dfRad[sB+'Vrelx{}_[m/s]'.format(s)], dfRad[sB+'Vrely{}_[m/s]'.format(s)])*180/np.pi + except: + pass + try: + vr_bar=vr/R + Fx = dfRad[sB+'Fx_[N/m]'] + U0 = tsAvg['Wind1VelX_[m/s]'] + Ct=nB*Fx/(0.5 * rho * 2 * U0**2 * np.pi * vr) + Ct[vr<0.01*R] = 0 + dfRad[sB+'Ctloc_[-]'] = Ct + CT=2*np.trapz(vr_bar*Ct,vr_bar) + dfRad[sB+'CtAvg_[-]']= CT*np.ones(vr.shape) + except: + pass + try: + dfRad[sB+'Gamma_[m^2/s]'] = 1/2 * chord* dfRad[sB+'Vrel_[m/s]'] * dfRad[sB+'Cl_[-]'] + except: + pass + try: + if not sB+'Vindx_[m/s]' in dfRad.columns: + dfRad[sB+'Vindx_[m/s]']= -dfRad[sB+'AxInd_[-]'].values * dfRad[sB+'Vx_[m/s]'].values + dfRad[sB+'Vindy_[m/s]']= dfRad[sB+'TnInd_[-]'].values * dfRad[sB+'Vy_[m/s]'].values + except: + pass + return dfRad + + + +def spanwisePostPro(FST_In=None,avgMethod='constantwindow',avgParam=5,out_ext='.outb',df=None): + """ + Postprocess FAST radial data. + if avgMethod is not None: Average the time series, return a dataframe nr x nColumns + + INPUTS: + - FST_IN: Fast .fst input file + - avgMethod='periods', avgParam=2: average over 2 last periods, Needs Azimuth sensors!!! + - avgMethod='constantwindow', avgParam=5: average over 5s of simulation + - postprofile: outputfile to write radial data + """ + # --- Opens Fast output and performs averaging + if df is None: + filename =FST_In.replace('.fst',out_ext).replace('.dvr',out_ext) + df = FASTOutputFile(filename).toDataFrame() + returnDF=True + else: + filename='' + returnDF=False + # NOTE: spanwise script doest not support duplicate columns + df = df.loc[:,~df.columns.duplicated()] + if avgMethod is not None: + dfAvg = averageDF(df,avgMethod=avgMethod ,avgParam=avgParam, filename=filename) # NOTE: average 5 last seconds + else: + dfAvg=df + # --- The script assume '_' between units and colnames + Cols= dfAvg.columns + # --- Extract info (e.g. radial positions) from Fast input file + # We don't have a .fst input file, so we'll rely on some default values for "r" + rho = 1.225 + chord = None + # --- Extract radial positions of output channels + d = FASTSpanwiseOutputs(FST_In, OutputCols=Cols) + r_AD = d['r_AD'] + r_ED_bld = d['r_ED_bld'] + r_ED_twr = d['r_ED_twr'] + r_BD = d['r_BD'] + IR_AD = d['IR_AD'] + IR_ED_bld = d['IR_ED_bld'] + IR_ED_twr = d['IR_ED_twr'] + IR_BD = d['IR_BD'] + TwrLen = d['TwrLen'] + R = d['R'] + r_hub = d['r_hub'] + fst = d['fst'] + + if R is None: + R=1 + try: + chord = fst.AD.Bld1['BldAeroNodes'][:,5] # Full span + except: + pass + try: + rho = fst.AD['Rho'] + except: + try: + rho = fst.AD['AirDens'] + except: + pass + #print('r_AD:', r_AD) + #print('r_ED:', r_ED) + #print('r_BD:', r_BD) + #print('I_AD:', IR_AD) + #print('I_ED:', IR_ED) + #print('I_BD:', IR_BD) + out = {} + if returnDF: + out['df'] = df + out['dfAvg'] = dfAvg + # --- Extract radial data and export to csv if needed + # --- AD + ColsInfoAD, nrMaxAD = spanwiseColAD(Cols) + dfRad_AD = extract_spanwise_data(ColsInfoAD, nrMaxAD, df=None, ts=dfAvg.iloc[0]) + dfRad_AD = insert_extra_columns_AD(dfRad_AD, dfAvg.iloc[0], vr=r_AD, rho=rho, R=R, nB=3, chord=chord) + dfRad_AD = insert_spanwise_columns(dfRad_AD, r_AD, R=R, IR=IR_AD) + out['AD'] = dfRad_AD + # --- ED Bld + ColsInfoED, nrMaxED = spanwiseColED(Cols) + dfRad_ED = extract_spanwise_data(ColsInfoED, nrMaxED, df=None, ts=dfAvg.iloc[0]) + dfRad_ED = insert_spanwise_columns(dfRad_ED, r_ED_bld, R=R, IR=IR_ED_bld) + out['ED_bld'] = dfRad_ED + # --- ED Twr + ColsInfoED, nrMaxEDt = spanwiseColEDTwr(Cols) + dfRad_EDt = extract_spanwise_data(ColsInfoED, nrMaxEDt, df=None, ts=dfAvg.iloc[0]) + dfRad_EDt2 = insert_spanwise_columns(dfRad_EDt, r_ED_twr, R=TwrLen, IR=IR_ED_twr, sspan='H',sspan_bar='H/L') + # TODO we could insert TwrBs and TwrTp quantities here... + out['ED_twr'] = dfRad_EDt + # --- BD + ColsInfoBD, nrMaxBD = spanwiseColBD(Cols) + dfRad_BD = extract_spanwise_data(ColsInfoBD, nrMaxBD, df=None, ts=dfAvg.iloc[0]) + dfRad_BD = insert_spanwise_columns(dfRad_BD, r_BD, R=R, IR=IR_BD) + out['BD'] = dfRad_BD + # --- SubDyn + try: + # NOTE: fst might be None + sd = SubDyn(fst.SD) + #MN = sd.pointsMN + MNout, MJout = sd.memberPostPro(dfAvg) + out['SD_MembersOut'] = MNout + out['SD_JointsOut'] = MJout + except: + out['SD_MembersOut'] = None + out['SD_JointsOut'] = None + + # Combine all into a dictionary + return out + +def radialAvg(filename, avgMethod, avgParam, raw_name='', df=None, raiseException=True): + """ + Wrapper function, for instance used by pyDatView apply either: + spanwisePostPro or spanwisePostProFF (FAST.Farm) + """ + + base,out_ext = os.path.splitext(filename) + if df is None: + df = FASTOutputFile(filename).toDataFrame() + + # --- Detect if it's a FAST Farm file + sCols = ''.join(df.columns) + if sCols.find('WkDf')>1 or sCols.find('CtT')>0: + # --- FAST FARM files + Files=[base+ext for ext in ['.fstf','.FSTF','.Fstf','.fmas','.FMAS','.Fmas'] if os.path.exists(base+ext)] + if len(Files)==0: + fst_in=None + #raise Exception('Error: No .fstf file found with name: '+base+'.fstf') + else: + fst_in=Files[0] + + dfRad,_,dfDiam = fastfarm.spanwisePostProFF(fst_in,avgMethod=avgMethod,avgParam=avgParam,D=1,df=df) + dfs_new = [dfRad,dfDiam] + names_new=[raw_name+'_rad', raw_name+'_diam'] + else: + # --- FAST files + # HACK for AD file to find the right .fst file + iDotAD=base.lower().find('.ad') + if iDotAD>1: + base=base[:iDotAD] + # + Files=[base+ext for ext in ['.fst','.FST','.Fst','.dvr','.Dvr','.DVR'] if os.path.exists(base+ext)] + if len(Files)==0: + fst_in=None + #raise Exception('Error: No .fst file found with name: '+base+'.fst') + else: + fst_in=Files[0] + + try: + out = spanwisePostPro(fst_in, avgMethod=avgMethod, avgParam=avgParam, out_ext=out_ext, df = df) + dfRadED=out['ED_bld']; dfRadAD = out['AD']; dfRadBD = out['BD'] + dfs_new = [dfRadAD, dfRadED, dfRadBD] + names_new=[raw_name+'_AD', raw_name+'_ED', raw_name+'_BD'] + except: + if raiseException: + raise + else: + print('[WARN] radialAvg failed for filename {}'.format(filename)) + dfs_new =[None] + names_new=[''] + return dfs_new, names_new + +def spanwisePostProRows(df, FST_In=None): + """ + Returns a 3D matrix: n x nSpan x nColumn where df is of size n x mColumn + + NOTE: this is really not optimal. Spanwise columns should be extracted only once.. + """ + # --- Extract info (e.g. radial positions) from Fast input file + # We don't have a .fst input file, so we'll rely on some default values for "r" + rho = 1.225 + chord = None + # --- Extract radial positions of output channels + d = FASTSpanwiseOutputs(FST_In, OutputCols=df.columns.values) + r_AD = d['r_AD'] + r_ED_bld = d['r_ED_bld'] + r_ED_twr = d['r_ED_twr'] + r_BD = d['r_BD'] + IR_AD = d['IR_AD'] + IR_ED_bld = d['IR_ED_bld'] + IR_ED_twr = d['IR_ED_twr'] + IR_BD = d['IR_BD'] + TwrLen = d['TwrLen'] + R = d['R'] + r_hub = d['r_hub'] + fst = d['fst'] + #print('r_AD:', r_AD) + #print('r_ED:', r_ED) + #print('r_BD:', r_BD) + if R is None: + R=1 + try: + chord = fst.AD.Bld1['BldAeroNodes'][:,5] # Full span + except: + pass + try: + rho = fst.AD['Rho'] + except: + try: + rho = fst.AD['AirDens'] + except: + print('[WARN] Using default air density (1.225)') + pass + # --- Extract radial data for each azimuthal average + M_AD=None + M_ED=None + M_BD=None + Col_AD=None + Col_ED=None + Col_BD=None + v = df.index.values + + # --- Getting Column info + Cols=df.columns.values + if r_AD is not None: + ColsInfoAD, nrMaxAD = spanwiseColAD(Cols) + if r_ED_bld is not None: + ColsInfoED, nrMaxED = spanwiseColED(Cols) + if r_BD is not None: + ColsInfoBD, nrMaxBD = spanwiseColBD(Cols) + for i,val in enumerate(v): + if r_AD is not None: + dfRad_AD = extract_spanwise_data(ColsInfoAD, nrMaxAD, df=None, ts=df.iloc[i]) + dfRad_AD = insert_extra_columns_AD(dfRad_AD, df.iloc[i], vr=r_AD, rho=rho, R=R, nB=3, chord=chord) + dfRad_AD = insert_spanwise_columns(dfRad_AD, r_AD, R=R, IR=IR_AD) + if i==0: + M_AD = np.zeros((len(v), len(dfRad_AD), len(dfRad_AD.columns))) + Col_AD=dfRad_AD.columns.values + M_AD[i, :, : ] = dfRad_AD.values + if r_ED_bld is not None and len(r_ED_bld)>0: + dfRad_ED = extract_spanwise_data(ColsInfoED, nrMaxED, df=None, ts=df.iloc[i]) + dfRad_ED = insert_spanwise_columns(dfRad_ED, r_ED_bld, R=R, IR=IR_ED) + if i==0: + M_ED = np.zeros((len(v), len(dfRad_ED), len(dfRad_ED.columns))) + Col_ED=dfRad_ED.columns.values + M_ED[i, :, : ] = dfRad_ED.values + if r_BD is not None and len(r_BD)>0: + dfRad_BD = extract_spanwise_data(ColsInfoBD, nrMaxBD, df=None, ts=df.iloc[i]) + dfRad_BD = insert_spanwise_columns(dfRad_BD, r_BD, R=R, IR=IR_BD) + if i==0: + M_BD = np.zeros((len(v), len(dfRad_BD), len(dfRad_BD.columns))) + Col_BD=dfRad_BD.columns.values + M_BD[i, :, : ] = dfRad_BD.values + return M_AD, Col_AD, M_ED, Col_ED, M_BD, Col_BD + + +def FASTSpanwiseOutputs(FST_In, OutputCols=None, verbose=False): + """ Returns spanwise positions where OpenFAST has outputs + INPUTS: + - FST_In: fast input file (.fst) + OUTPUTS: + dictionary with fields: + - r_AD: radial positions of FAST Outputs from the rotor center + """ + R = None + TwrLen = None + r_hub =0 + r_AD = None + r_ED_bld = None + r_ED_twr = None + r_BD = None + IR_ED_bld = None + IR_ED_twr = None + IR_AD = None + IR_BD = None + fst=None + if FST_In is not None: + fst = FASTInputDeck(FST_In, readlist=['AD','ADbld','ED','BD','BDbld','SD']) + # NOTE: all this below should be in FASTInputDeck + if fst.version == 'F7': + # --- FAST7 + if not hasattr(fst,'AD'): + raise Exception('The AeroDyn file couldn''t be found or read, from main file: '+FST_In) + r_AD,IR_AD = AD14_BldGag(fst.AD) + R = fst.fst['TipRad'] + try: + rho = fst.AD['Rho'] + except: + rho = fst.AD['AirDens'] + else: + # --- OpenFAST 2 + R = None + + # --- ElastoDyn + if 'NumTurbines' in fst.fst.keys(): + # AeroDyn driver... + if 'HubRad(1)' in fst.fst.keys(): + r_hub = fst.fst['HubRad(1)'] + else: + r_hub = fst.fst['BldHubRad_bl(1_1)'] + + elif not hasattr(fst,'ED'): + if verbose: + print('[WARN] The Elastodyn file couldn''t be found or read, from main file: '+FST_In) + #raise Exception('The Elastodyn file couldn''t be found or read, from main file: '+FST_In) + else: + R = fst.ED['TipRad'] + r_hub = fst.ED['HubRad'] + if fst.ED.hasNodal: + _, r_ED_bld = ED_BldStations(fst.ED) + IR_ED_bld =None + else: + r_ED_bld, IR_ED_bld = ED_BldGag(fst.ED) + + # No nodal output for elastodyn tower yet + TwrLen = fst.ED['TowerHt'] -fst.ED['TowerBsHt'] + r_ED_twr, IR_ED_twr = ED_TwrGag(fst.ED) + + # --- BeamDyn + if fst.BD is not None: + if R is None: + R = r_BD_All[-1] # just in case ED file missing + if fst.BD.hasNodal: + r_BD = BD_BldStations(fst.BD, fst.BDbld) + else: + r_BD, IR_BD, r_BD_All = BD_BldGag(fst.BD) + r_BD= r_BD+r_hub + + # --- AeroDyn + if fst.AD is None: + if verbose: + print('[WARN] The AeroDyn file couldn''t be found or read, from main file: '+FST_In) + #raise Exception('The AeroDyn file couldn''t be found or read, from main file: '+FST_In) + else: + if fst.ADversion == 'AD15': + if fst.AD.Bld1 is None: + raise Exception('The AeroDyn blade file couldn''t be found or read, from main file: '+FST_In) + + if 'B1N001Cl_[-]' in OutputCols or np.any(np.char.find(list(OutputCols),'AB1N')==0): + # This was compiled with all outs + r_AD = fst.AD.Bld1['BldAeroNodes'][:,0] # Full span + r_AD += r_hub + IR_AD = None + else: + r_AD,_ = AD_BldGag(fst.AD,fst.AD.Bld1, chordOut = True) # Only at Gages locations + r_AD += r_hub + + if R is None: + # ElastoDyn was not read, we use R from AD + R = fst.AD.Bld1['BldAeroNodes'][-1,0] + + elif fst.ADversion == 'AD14': + r_AD,IR_AD = AD14_BldGag(fst.AD) + + else: + raise Exception('AeroDyn version unknown') + # Put everything into a dictionary for convenience + outs = {'r_AD':r_AD, 'IR_AD':IR_AD, 'r_ED_bld':r_ED_bld, 'IR_ED_bld':IR_ED_bld, 'r_ED_twr':r_ED_twr, 'IR_ED_twr':IR_ED_twr, 'r_BD':r_BD, 'IR_BD':IR_BD} + outs['R'] = R + outs['TwrLen']= TwrLen + outs['r_hub'] = r_hub + outs['fst'] = fst + return outs # r_AD, r_ED, r_BD, IR_AD, IR_ED, IR_BD, R, r_hub, fst + + + +def spanwiseConcat(df): + """ + Perform time-concatenation of all the spanwise data (AeroDyn only for now) + + For instance if df is: + + Time B1N001Alpha B1N002Alpha B1N003Alpha + t a1 a2 a3 + + with t, a1, a2, a3, arrays or length nt + + The concatenated dataframe will be: + Time i Alpha + t 1 a1 + t 2 a2 + t 3 a3 + + INPUTS: + - df: a dataframe, typically returned by FASTOutputFile (nt x (nc*nr + nother) ) + + OUTPUTS: + - dfCat: the time-concatenated dataframe (nt*nr x (2 + nc) ) + + """ + Cols = df.columns + ColsInfoAD, nrMaxAD = spanwiseColAD(Cols) + nChan = len(ColsInfoAD) + if nChan==0: + raise WELIBException('Cannot perform spanwise concatenation, no AeroDyn spanwise data was detected in the dataframe (e.g. columns of the form "AB1N001Cl_[-]"). ') + imin = np.min( [np.min(ColsInfoAD[i]['Idx']) for i in range(nChan)] ) + imax = np.max( [np.max(ColsInfoAD[i]['Idx']) for i in range(nChan)] ) + if 'Time_[s]' not in df.columns: + raise WELIBException('Cannot perform spanwise concatenation, the column `Time_[s]` is not present in the dataframe.') + time = df['Time_[s]'] + nt = len(time) + # We add two channels one for time, one for ispan + data = np.zeros((nt*nrMaxAD, nChan+2))*np.nan + # Loop on Channels and radial positions.. + for ic in range(nChan): + for ir in range(nrMaxAD): + data[ir*nt:(ir+1)*nt, 0] = time + data[ir*nt:(ir+1)*nt, 1] = ir+1 + IdxAvailableForThisChannel = ColsInfoAD[ic]['Idx'] + chanName = ColsInfoAD[ic]['name'] + colName = ColsInfoAD[ic]['cols'][ir] + #print('Channel {}: colName {}'.format(chanName, colName)) + try: + if ir+1 in IdxAvailableForThisChannel: + data[ir*nt:(ir+1)*nt, ic+2] = df[colName].values + except: + pass + #else: + # raise Exception('Channel {}: Index missing {}'.format(chanName, ic+1)) + columns = ['Time_[s]'] + ['i_[-]'] + [ColsInfoAD[i]['name'] for i in range(nChan)] + dfCat = pd.DataFrame(data=data, columns=columns) + + return dfCat + + +def addToOutlist(OutList, Signals): + if not isinstance(Signals,list): + raise Exception('Signals must be a list') + for s in Signals: + ss=s.split()[0].strip().strip('"').strip('\'') + AlreadyIn = any([o.find(ss)==1 for o in OutList ]) + if not AlreadyIn: + OutList.append(s) + return OutList + + + +# --------------------------------------------------------------------------------} +# --- Generic df +# --------------------------------------------------------------------------------{ +def remap_df(df, ColMap, bColKeepNewOnly=False, inPlace=False, dataDict=None, verbose=False): + """ + NOTE: see welib.tools.pandalib + + Add/rename columns of a dataframe, potentially perform operations between columns + + dataDict: dictionary of data to be made available as "variable" in the column mapping + 'key' (new) : value (old) + + Example: + + ColumnMap={ + 'WS_[m/s]' : '{Wind1VelX_[m/s]}' , # create a new column from existing one + 'RtTSR_[-]' : '{RtTSR_[-]} * 2 + {RtAeroCt_[-]}' , # change value of column + 'RotSpeed_[rad/s]' : '{RotSpeed_[rpm]} * 2*np.pi/60 ', # new column [rpm] -> [rad/s] + 'q_p' : ['Q_P_[rad]', '{PtfmSurge_[deg]}*np.pi/180'] # List of possible matches + } + # Read + df = weio.read('FASTOutBin.outb').toDataFrame() + # Change columns based on formulae, potentially adding new columns + df = fastlib.remap_df(df, ColumnMap, inplace=True) + + """ + # Insert dataDict into namespace + if dataDict is not None: + for k,v in dataDict.items(): + exec('{:s} = dataDict["{:s}"]'.format(k,k)) + + + if not inPlace: + df=df.copy() + ColMapMiss=[] + ColNew=[] + RenameMap=dict() + # Loop for expressions + for k0,v in ColMap.items(): + k=k0.strip() + if type(v) is not list: + values = [v] + else: + values = v + Found = False + for v in values: + v=v.strip() + if Found: + break # We avoid replacing twice + if v.find('{')>=0: + # --- This is an advanced substitution using formulae + search_results = re.finditer(r'\{.*?\}', v) + expr=v + if verbose: + print('Attempt to insert column {:15s} with expr {}'.format(k,v)) + # For more advanced operations, we use an eval + bFail=False + for item in search_results: + col=item.group(0)[1:-1] + if col not in df.columns: + ColMapMiss.append(col) + bFail=True + expr=expr.replace(item.group(0),'df[\''+col+'\']') + #print(k0, '=', expr) + if not bFail: + df[k]=eval(expr) + ColNew.append(k) + else: + print('[WARN] Column not present in dataframe, cannot evaluate: ',expr) + else: + #print(k0,'=',v) + if v not in df.columns: + ColMapMiss.append(v) + if verbose: + print('[WARN] Column not present in dataframe: ',v) + else: + if k in RenameMap.keys(): + print('[WARN] Not renaming {} with {} as the key is already present'.format(k,v)) + else: + RenameMap[k]=v + Found=True + + # Applying renaming only now so that expressions may be applied in any order + for k,v in RenameMap.items(): + if verbose: + print('Renaming column {:15s} > {}'.format(v,k)) + k=k.strip() + iCol = list(df.columns).index(v) + df.columns.values[iCol]=k + ColNew.append(k) + df.columns = df.columns.values # Hack to ensure columns are updated + + if len(ColMapMiss)>0: + print('[FAIL] The following columns were not found in the dataframe:',ColMapMiss) + #print('Available columns are:',df.columns.values) + + if bColKeepNewOnly: + ColNew = [c for c,_ in ColMap.items() if c in ColNew]# Making sure we respec order from user + ColKeepSafe = [c for c in ColNew if c in df.columns.values] + ColKeepMiss = [c for c in ColNew if c not in df.columns.values] + if len(ColKeepMiss)>0: + print('[WARN] Signals missing and omitted for ColKeep:\n '+'\n '.join(ColKeepMiss)) + df=df[ColKeepSafe] + return df + + +# --------------------------------------------------------------------------------} +# --- Tools for PostProcessing one or several simulations +# --------------------------------------------------------------------------------{ +def _zero_crossings(y,x=None,direction=None): + """ + Find zero-crossing points in a discrete vector, using linear interpolation. + direction: 'up' or 'down', to select only up-crossings or down-crossings + Returns: + x values xzc such that y(yzc)==0 + indexes izc, such that the zero is between y[izc] (excluded) and y[izc+1] (included) + if direction is not provided, also returns: + sign, equal to 1 for up crossing + """ + y=np.asarray(y) + if x is None: + x=np.arange(len(y)) + + if np.any((x[1:] - x[0:-1]) <= 0.0): + raise Exception('x values need to be in ascending order') + + # Indices before zero-crossing + iBef = np.where(y[1:]*y[0:-1] < 0.0)[0] + + # Find the zero crossing by linear interpolation + xzc = x[iBef] - y[iBef] * (x[iBef+1] - x[iBef]) / (y[iBef+1] - y[iBef]) + + # Selecting points that are exactly 0 and where neighbor change sign + iZero = np.where(y == 0.0)[0] + iZero = iZero[np.where((iZero > 0) & (iZero < x.size-1))] + iZero = iZero[np.where(y[iZero-1]*y[iZero+1] < 0.0)] + + # Concatenate + xzc = np.concatenate((xzc, x[iZero])) + iBef = np.concatenate((iBef, iZero)) + + # Sort + iSort = np.argsort(xzc) + xzc, iBef = xzc[iSort], iBef[iSort] + + # Return up-crossing, down crossing or both + sign = np.sign(y[iBef+1]-y[iBef]) + if direction == 'up': + I= np.where(sign==1)[0] + return xzc[I],iBef[I] + elif direction == 'down': + I= np.where(sign==-1)[0] + return xzc[I],iBef[I] + elif direction is not None: + raise Exception('Direction should be either `up` or `down`') + return xzc, iBef, sign + +def find_matching_pattern(List, pattern, sort=False, integers=True, n=1): + r""" Return elements of a list of strings that match a pattern + and return the n first matching group + + Example: + + find_matching_pattern(['Misc','TxN1_[m]', 'TxN20_[m]'], 'TxN(\d+)_\[m\]') + returns: Matches = 1,20 + """ + reg_pattern=re.compile(pattern) + MatchedElements=[] + Matches=[] + for l in List: + match=reg_pattern.search(l) + if match: + MatchedElements.append(l) + if len(match.groups(1))>0: + Matches.append(match.groups(1)[0]) + else: + Matches.append('') + + MatchedElements = np.asarray(MatchedElements) + Matches = np.asarray(Matches) + + if integers: + Matches = Matches.astype(int) + + if sort: + # Sorting by Matched string, NOTE: assumes that MatchedStrings are int. + # that's probably not necessary since alphabetical/integer sorting should be the same + # but it might be useful if number of leading zero differs, which would skew the sorting.. + Isort = np.argsort(Matches) + MatchedElements = MatchedElements[Isort] + Matches = Matches[Isort] + + return MatchedElements, Matches + + +def extractSpanTS(df, pattern): + r""" + Extract spanwise time series of a given "type" (e.g. Cl for each radial node) + Return a dataframe of size nt x nr + + NOTE: time is not inserted in the output dataframe + + To find "r" use FASTSpanwiseOutputs, it is different for AeroDyn/ElastoDyn/BeamDyn/ + There is no guarantee that the number of columns matching pattern will exactly + corresponds to the number of radial stations. That's the responsability of the + OpenFAST user. + + INPUTS: + - df : a dataframe of size nt x nColumns + - pattern: Pattern used to find "radial" columns amongst the dataframe columns + r'B1N(\d*)Cl_\[-\]' + r'^AB1N(\d*)Cl_\[-\]' -> to match AB1N001Cl_[-], AB1N002Cl_[-], etc. + OUTPUTS: + - dfOut : a dataframe of size nt x nr where nr is the number of radial stations matching the pattern. The radial stations are sorted. + """ + cols, sIdx = find_matching_pattern(df.columns, pattern, sort=True) + return df[cols] + + +def _extractSpanTSReg_Legacy(ts, col_pattern, colname, IR=None): + r""" Helper function to extract spanwise results, like B1N1Cl B1N2Cl etc. + + Example + col_pattern: r'B1N(\d*)Cl_\[-\]' + colname : r'B1Cl_[-]' + """ + # Extracting columns matching pattern + cols, sIdx = find_matching_pattern(ts.keys(), col_pattern, sort=True) + if len(cols) ==0: + return (None,None) + + nrMax = np.max(Idx) + Values = np.zeros((nrMax,1)) + Values[:] = np.nan +# if IR is None: +# cols = [col_pattern.format(ir+1) for ir in range(nr)] +# else: +# cols = [col_pattern.format(ir) for ir in IR] + for idx,col in zip(Idx,cols): + Values[idx-1]=ts[col] + nMissing = np.sum(np.isnan(Values)) + if nMissing==nrMax: + return (None,None) + if len(cols)nrMax: + print('[WARN] More values found for {}, found {}/{}'.format(colname,len(cols),nrMax)) + return (colname,Values) + +def _extractSpanTS_Legacy(ts, nr, col_pattern, colname, IR=None): + """ Helper function to extract spanwise results, like B1N1Cl B1N2Cl etc. + + Example + col_pattern: 'B1N{:d}Cl_[-]' + colname : 'B1Cl_[-]' + """ + Values=np.zeros((nr,1)) + if IR is None: + cols = [col_pattern.format(ir+1) for ir in range(nr)] + else: + cols = [col_pattern.format(ir) for ir in IR] + colsExist = [c for c in cols if c in ts.keys() ] + if len(colsExist)==0: + return (None,None) + + Values = [ts[c] if c in ts.keys() else np.nan for c in cols ] + nMissing = np.sum(np.isnan(Values)) + #Values = ts[cols].T + #nCoun=len(Values) + if nMissing==nr: + return (None,None) + if len(colsExist)nr: + print('[WARN] More values found for {}, found {}/{}'.format(colname,len(cols),nr)) + return (colname,Values) + +def radialInterpTS(df, r, varName, r_ref, blade=1, bldFmt='AB{:d}', ndFmt='N{:03d}', method='interp'): + """ + Interpolate a time series at a given radial position for a given variable (varName) + INPUTS: + - df : a dataframe (typically with OpenFAST time series) + - r : radial positions of node where data is to be interpolated + - varName: variable name (and unit) to be interpolated. + The dataframe column will be assumed to be "BldFmt"+"ndFmt"+varName + - r_ref : radial position of nodal data present in the dataframe + - bldFmt : format for blade number, e.g. 'B{:d}' or 'AB{:d}' + - ndFmt : format for node number, e.g. 'N{:d}' or 'N{:03d}' + OUTPUT: + - interpolated time series + """ + # --- Sanity checks + r_ref = np.asarray(r_ref) + if not np.all(r_ref[:-1] <= r_ref[1:]): + raise Exception('This function only works for ascending radial values') + + # No extrapolation + if rnp.max(r_ref): + raise Exception('Extrapolation not supported') + + # Exactly on first or last nodes + if r==r_ref[0]: + col=bldFmt.format(blade) + ndFmt.format(1) + varName + if col in df.columns.values: + return df[col] + else: + raise Exception('Column {} not found in dataframe'.format(col)) + elif r==r_ref[-1]: + col=bldFmt.format(blade) + ndFmt.format(len(r_ref)+1) + varName + if col in df.columns.values: + return df[col] + else: + raise Exception('Column {} not found in dataframe'.format(col)) + + if method=='interp': + # Interpolation + iBef = np.where(r_reftStart].copy() + + dfPsi= bin_mean_DF(df, psiBin, colPsi) + if np.any(dfPsi['Counts']<1): + print('[WARN] some bins have no data! Increase the bin size.') + + return dfPsi + + +def averageDF(df,avgMethod='periods',avgParam=None,ColMap=None,ColKeep=None,ColSort=None,stats=['mean'], filename=''): + """ + See average PostPro for documentation, same interface, just does it for one dataframe + """ + def renameCol(x): + for k,v in ColMap.items(): + if x==v: + return k + return x + # Sanity + if len(filename)>0: + filename=' (File: {})'.format(filename) + + sTAllowed = ['Time_[s]','Time [s]'] + sT = [s for s in sTAllowed if s in df.columns] + if len(sT)==0: + raise WELIBException('The dataframe must contain one of the following column: {}'.format(','.join(sTAllowed))) + + # Before doing the colomn map we store the time + time = df[sT[0]].values + timenoNA = time[~np.isnan(time)] + # Column mapping + if ColMap is not None: + ColMapMiss = [v for _,v in ColMap.items() if v not in df.columns.values] + if len(ColMapMiss)>0: + print('[WARN] Signals missing and omitted for ColMap:\n '+'\n '.join(ColMapMiss)) + df.rename(columns=renameCol,inplace=True) + ## Defining a window for stats (start time and end time) + if avgMethod.lower()=='constantwindow': + tEnd = timenoNA[-1] + if avgParam is None: + tStart=timenoNA[0] + else: + tStart =tEnd-avgParam + elif avgMethod.lower()=='periods': + # --- Using azimuth to find periods + sAAllowed = ['Azimuth_[deg]','Azimuth [deg]'] + sA = [s for s in sAAllowed if s in df.columns] + if len(sA)==0: + raise WELIBException('The dataframe must contain one of the following columns: {}.\nYou cannot use the averaging method by `periods`, use `constantwindow` instead.\n{}'.format(','.join(sAAllowed),filename)) + # NOTE: potentially we could average over each period and then average + psi=df[sA[0]].values + _,iBef = _zero_crossings(psi-psi[-2],direction='up') + if len(iBef)==0: + _,iBef = _zero_crossings(psi-180,direction='up') + if len(iBef)==0: + print('[WARN] Not able to find a zero crossing!{}'.format(filename)) + tEnd = time[-1] + iBef=[0] + else: + tEnd = time[iBef[-1]] + + if avgParam is None: + tStart=time[iBef[0]] + else: + avgParam=int(avgParam) + if len(iBef)-10: + print('[WARN] Signals missing and omitted for ColKeep:\n '+'\n '.join(ColKeepMiss)) + df=df[ColKeepSafe] + if tStart=tStart) & (time<=tEnd) & (~np.isnan(time)))[0] + iEnd = IWindow[-1] + iStart = IWindow[0] + ## Absolute and relative differences at window extremities + DeltaValuesAbs=(df.iloc[iEnd]-df.iloc[iStart]).abs() +# DeltaValuesRel=(df.iloc[iEnd]-df.iloc[iStart]).abs()/df.iloc[iEnd] + DeltaValuesRel=(df.iloc[IWindow].max()-df.iloc[IWindow].min())/df.iloc[IWindow].mean() + #EndValues=df.iloc[iEnd] + #if avgMethod.lower()=='periods_omega': + # if DeltaValuesRel['RotSpeed_[rpm]']*100>5: + # print('[WARN] Rotational speed vary more than 5% in averaging window ({}%) for simulation: {}'.format(DeltaValuesRel['RotSpeed_[rpm]']*100,f)) + ## Stats values during window + # MeanValues = df[IWindow].mean() + # StdValues = df[IWindow].std() + if 'mean' in stats: + MeanValues = pd.DataFrame(df.iloc[IWindow].mean()).transpose() + else: + raise NotImplementedError() + return MeanValues + + + +def averagePostPro(outFiles_or_DFs,avgMethod='periods',avgParam=None, + ColMap=None,ColKeep=None,ColSort=None,stats=['mean'], + skipIfWrongCol=False): + """ Opens a list of FAST output files, perform average of its signals and return a panda dataframe + For now, the scripts only computes the mean within a time window which may be a constant or a time that is a function of the rotational speed (see `avgMethod`). + The script only computes the mean for now. Other stats will be added + INPUTS: + + outFiles_or_DFs: list of fst filenames or dataframes + + `ColMap` : dictionary where the key is the new column name, and v the old column name. + Default: None, output is not sorted + NOTE: the mapping is done before sorting and `ColKeep` is applied + ColMap = {'WS':Wind1VelX_[m/s], 'RPM': 'RotSpeed_[rpm]'} + `ColKeep` : List of strings corresponding to the signals to analyse. + Default: None, all columns are analysed + Example: ColKeep=['RotSpeed_[rpm]','BldPitch1_[deg]','RtAeroCp_[-]'] + or: ColKeep=list(ColMap.keys()) + `avgMethod` : string defining the method used to determine the extent of the averaging window: + - 'periods': use a number of periods(`avgParam`), determined by the azimuth. + - 'periods_omega': use a number of periods(`avgParam`), determined by the mean RPM + - 'constantwindow': the averaging window is constant (defined by `avgParam`). + `avgParam`: based on `avgMethod` it is either + - for 'periods_*': the number of revolutions for the window. + Default: None, as many period as possible are used + - for 'constantwindow': the number of seconds for the window + Default: None, full simulation length is used + """ + result=None + if len(outFiles_or_DFs)==0: + raise Exception('No outFiles or DFs provided') + + invalidFiles =[] + # Loop trough files and populate result + for i,f in enumerate(outFiles_or_DFs): + if isinstance(f, pd.DataFrame): + df = f + else: + try: + df=weio.read(f).toDataFrame() + #df=FASTOutputFile(f).toDataFrame()A # For pyFAST + except: + invalidFiles.append(f) + continue + postpro=averageDF(df, avgMethod=avgMethod, avgParam=avgParam, ColMap=ColMap, ColKeep=ColKeep,ColSort=ColSort,stats=stats, filename=f) + MeanValues=postpro # todo + if result is None: + # We create a dataframe here, now that we know the colums + columns = MeanValues.columns + result = pd.DataFrame(np.nan, index=np.arange(len(outFiles_or_DFs)), columns=columns) + if MeanValues.shape[1]!=result.shape[1]: + columns_ref = result.columns + columns_loc = MeanValues.columns + if skipIfWrongCol: + print('[WARN] File {} has {} columns and not {}. Skipping.'.format(f, MeanValues.shape[1], result.shape[1])) + else: + try: + MeanValues=MeanValues[columns_ref] + result.iloc[i,:] = MeanValues.copy().values + print('[WARN] File {} has more columns than other files. Truncating.'.format(f, MeanValues.shape[1], result.shape[1])) + except: + print('[WARN] File {} is missing some columns compared to other files. Skipping.'.format(f)) + else: + result.iloc[i,:] = MeanValues.copy().values + + + if len(invalidFiles)==len(outFiles_or_DFs): + raise Exception('None of the files can be read (or exist)!. For instance, cannot find: {}'.format(invalidFiles[0])) + elif len(invalidFiles)>0: + print('[WARN] There were {} missing/invalid files: \n {}'.format(len(invalidFiles),'\n'.join(invalidFiles))) + + if ColSort is not None: + if not ColSort in result.keys(): + print('[INFO] Columns present: ', result.keys()) + raise Exception('[FAIL] Cannot sort results with column `{}`, column not present in dataframe (see above)'.format(ColSort)) + # Sorting + result.sort_values([ColSort],inplace=True,ascending=True) + result.reset_index(drop=True,inplace=True) + + return result + + +def integrateMoment(r, F): + r""" + Integrate moment from force and radial station + M_j = \int_{r_j}^(r_n) f(r) * (r-r_j) dr for j=1,nr + TODO: integrate analytically the "r" part + """ + M = np.zeros(len(r)-1) + for ir,_ in enumerate(r[:-1]): + M[ir] = np.trapz(F[ir:]*(r[ir:]-r[ir]), r[ir:]-r[ir]) + return M + +def integrateMomentTS(r, F): + r""" + Integrate moment from time series of forces at nr radial stations + + Compute + M_j = \int_{r_j}^(r_n) f(r) * (r-r_j) dr for j=1,nr + M_j = \int_{r_j}^(r_n) f(r) *r*dr - r_j * \int_(r_j}^{r_n} f(r) dr + j are the columns of M + + NOTE: simply trapezoidal integration is used. + The "r" term is not integrated analytically. This can be improved! + + INPUTS: + - r: array of size nr, of radial stations (ordered) + - F: array nt x nr of time series of forces at each radial stations + OUTPUTS: + - M: array nt x nr of integrated moment at each radial station + + """ + import scipy.integrate as si + # Compute \int_{r_j}^{r_n} f(r) dr, with "j" each column + IF = np.fliplr(-si.cumtrapz(np.fliplr(F), r[-1::-1])) + # Compute \int_{r_j}^{r_n} f(r)*r dr, with "j" each column + FR = F * r + IFR = np.fliplr(-si.cumtrapz(np.fliplr(FR), r[-1::-1])) + # Compute x_j * \int_{r_j}^(r_n) f(r) * r dr + R_IF = IF * r[:-1] + # \int_{r_j}^(r_n) f(r) * (r-r_j) dr = IF + IFR + M = IFR - R_IF + + + # --- Sanity checks + M0 = integrateMoment(r, F[0,:]) + Mm1 = integrateMoment(r, F[-1,:]) + if np.max(np.abs(M0-M[0,:]))>1e-8: + raise Exception('>>> Inaccuracies in integrateMomentTS') + if np.max(np.abs(Mm1-M[-1,:]))>1e-8: + raise Exception('>>> Inaccuracies in integrateMomentTS') + + return M + +if __name__ == '__main__': + + df = FASTOutputFile('ad_driver_yaw.6.outb').toDataFrame() + dfCat = spanwiseConcat(df) + print(dfCat) diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py new file mode 100644 index 0000000000..c7051864e5 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/postpro/tests/test_run_Examples.py @@ -0,0 +1,33 @@ +import unittest +import numpy as np +import glob +import os + +def execfile(filepath, globals=None, locals=None): + """ Execute a given python file """ + if globals is None: + globals = {"__name__": "__main__"} + globals.update({ + "__file__": filepath, + }) + with open(filepath, 'rb') as file: + exec(compile(file.read(), filepath, 'exec'), globals, locals) + +class TestExamples(unittest.TestCase): + def test_run_examples(self): + exclude_list=[] + # Add tests to class + MyDir=os.path.dirname(__file__) + files = glob.glob(os.path.join(MyDir,'../examples/[a-zA-Z]*.py')) + import matplotlib.pyplot as plt + print('\n--------------------------------------------------------------') + for f in files: + print('Running example script: {}'.format(f)) + if hasattr(self,'subTest'): + with self.subTest(filename=os.path.basename(f)): + execfile(f, {'__name__': '__test__', 'print': lambda *_:None}) + plt.close('all') + + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py new file mode 100644 index 0000000000..17eab9fe25 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/curve_fitting.py @@ -0,0 +1,1446 @@ +""" +Set of tools to fit a model to data. + +The quality of a fit is usually a strong function of the initial guess. +Because of this this package contains different kind of "helpers" and "wrapper" tools. + +FUNCTIONS +--------- + +This package can help fitting using: + 1) High level functions, e.g. fit_sinusoid +OR using the `model_fit` function that handles: + 2) User defined "eval" model, e.g. the user sets a string '{a}*x + {b}*x**2' + 3) Predefined models, e.g. Gaussian, logarithmic, weibull_pdf, etc. + 4) Predefined fitters, e.g. SinusoidFitter, DiscretePolynomialFitter, ContinuousPolynomialFitter + +1) The high level fitting functions available are: + - fit_sinusoid + - fit_polynomial + - fit_gaussian + +2) User defined model, using the `model_fit_function`: + - model_fit('eval: {a} + {b}*x**3 + {c}*x**5', x, y) + - model_fit('eval: {u_ref}*(x/{z_ref})**{alpha}', x, y, p0=(8,9,0.1), bounds=(0.001,100)) + User defined models, will require the user to provide an initial guess and potentially bounds + +3) Fitting using predefined models using the `model_fit` function : + - model_fit('predef: gaussian', x, y) + - model_fit('predef: gaussian-yoff', x, y) + - model_fit('predef: powerlaw_alpha', x, y, p0=(0.1), **fun_kwargs) + - model_fit('predef: powerlaw_u_alpha', x, y, **fun_kwargs) + - model_fit('predef: expdecay', x, y) + - model_fit('predef: weibull_pdf', x, y) + Predefined models have default values for bounds and guesses that can be overriden. + +4) Predefined fitters, wrapped with the `model_fit` function: + - model_fit('fitter: sinusoid', x, y) + - model_fit('fitter: polynomial_discrete', x, y, exponents=[0,2,4]) + - model_fit('fitter: polynomial_continuous', x, y, order=3) + Predefined fitters can handle bounds/initial guess better + +INPUTS: +-------- +All functions have the following inputs: + - x: array on the x-axis + - y: values on the y-axis (to be fitted against a model) +Additionally some functions have the following inputs: + - p0: initial values for parameters, either a string or a dict: + - string: the string is converted to a dictionary, assuming key value pairs + example: 'a=0, b=1.3' + - dictionary, then keys should corresponds to the parameters of the model + example: {'a':0, 'b':1.3} + - bounds: bounds for each parameters, either a string or a dictionary. + NOTE: pi and inf are available to set bounds + - if a string, the string is converted to a dictionary assuming key value pairs + example: 'a=(0,3), b=(-inf,pi)' + - if a dictionary, the keys should corresponds to the parameters of the model + example: {'a':(0,3), 'b':(-inf,pi)} + +OUTPUTS: +-------- +All functions returns the same outputs: + - y_fit : the fit to the y data + - pfit : the list of parameters used + - fitter: a `ModelFitter` object useful to manipulate the fit, in particular: + - fitter.model: dictionary with readable versions of the parameters, formula, + function to reevaluate the fit on a different x, etc. + - fitter.data: data used for the fit + - fitter.fit_data: perform another fit using different data + +MISC +---- +High-level fitters, predefined models or fitters can be added to this class. + +""" +import numpy as np +import scipy.optimize as so +import scipy.stats as stats +import string +import re +from collections import OrderedDict +from numpy import sqrt, pi, exp, cos, sin, log, inf, arctan # for user convenience +import six + +# --------------------------------------------------------------------------------} +# --- High level fitters +# --------------------------------------------------------------------------------{ +def fit_sinusoid(x,y,physical=False): + """ Fits a sinusoid to y with formula: + if physical is False: y_fit=A*sin(omega*x+phi)+B + if physical is True: y_fit=A*sin(2*pi(f+phi/360))+B """ + y_fit, pfit, fitter = model_fit('fitter: sinusoid', x, y, physical=physical) + return y_fit, pfit, fitter + +def fit_polynomial(x, y, order=None, exponents=None): + """ Fits a polynomial to y, either: + - full up to a given order: y_fit= {a_i} x^i , i=0..order + - or using a discrete set of exponents: y_fit= {a_i} x^e[i], i=0,..len(exponents) + OPTIONAL INPUTS: + - order: integer + Maximum order of polynomial, e.g. 2: for a x**0 + b x**1 + c x**2 + - exponents: array-like + Exponents to be used. e.g. [0,2,5] for a x**0 + b x**2 + c x**5 + """ + if order is not None: + y_fit, pfit, fitter = model_fit('fitter: polynomial_continuous', x, y, order=order) + else: + y_fit, pfit, fitter = model_fit('fitter: polynomial_discrete', x, y, exponents=exponents) + return y_fit, pfit, fitter + +def fit_gaussian(x, y, offset=False): + """ Fits a gaussin to y, with the following formula: + offset is True : '1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2)' + offset is False: '1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2) + {y0}' + """ + if offset: + return model_fit('predef: gaussian-yoff', x, y) + else: + return model_fit('predef: gaussian', x, y) + +# --------------------------------------------------------------------------------} +# --- Simple mid level fitter +# --------------------------------------------------------------------------------{ +def fit_polynomial_continuous(x, y, order): + """Fit a polynomial with a continuous set of exponents up to a given order + + Parameters + ---------- + x,y: see `model_fit` + order: integer + Maximum order of polynomial, e.g. 2: for a x**0 + b x**1 + c x**2 + + Returns + ------- + see `model_fit` + """ + pfit = np.polyfit(x,y,order) + y_fit = np.polyval(pfit,x) + + # coeffs_dict, e.g. {'a':xxx, 'b':xxx}, formula = 'a*x + b' + variables = string.ascii_lowercase[:order+1] + coeffs_dict = OrderedDict([(var,coeff) for i,(coeff,var) in enumerate(zip(pfit,variables))]) + formula = ' + '.join(['{}*x**{}'.format(var,order-i) for i,var in enumerate(variables)]) + formula = _clean_formula(formula) + + return y_fit,pfit,{'coeffs':coeffs_dict,'formula':formula,'fitted_function':lambda xx : np.polyval(pfit,xx)} + +def fit_polynomial_discrete(x, y, exponents): + """Fit a polynomial with a discrete set of exponents + + Parameters + ---------- + x,y: see `model_fit` + exponents: array-like + Exponents to be used. e.g. [0,2,5] for a x**0 + b x**2 + c x**5 + + Returns + ------- + see `model_fit` + """ + #exponents=-np.sort(-np.asarray(exponents)) + X_poly=np.array([]) + for i,e in enumerate(exponents): + if i==0: + X_poly = np.array([x**e]) + else: + X_poly = np.vstack((X_poly,x**e)) + try: + pfit = np.linalg.lstsq(X_poly.T, y, rcond=None)[0] + except: + pfit = np.linalg.lstsq(X_poly.T, y) + y_fit= np.dot(pfit, X_poly) + + variables = string.ascii_lowercase[:len(exponents)] + coeffs_dict = OrderedDict([(var,coeff) for i,(coeff,var) in enumerate(zip(pfit,variables))]) + formula = ' + '.join(['{}*x**{}'.format(var,e) for var,e in zip(variables,exponents)]) + formula = _clean_formula(formula) + + return y_fit,pfit,{'coeffs':coeffs_dict,'formula':formula} + + +def fit_powerlaw_u_alpha(x, y, z_ref=100, p0=(10,0.1)): + """ + p[0] : u_ref + p[1] : alpha + """ + pfit, _ = so.curve_fit(lambda x, *p : p[0] * (x / z_ref) ** p[1], x, y, p0=p0) + y_fit = pfit[0] * (x / z_ref) ** pfit[1] + coeffs_dict=OrderedDict([('u_ref',pfit[0]),('alpha',pfit[1])]) + formula = '{u_ref} * (z / {z_ref}) ** {alpha}' + fitted_fun = lambda xx: pfit[0] * (xx / z_ref) ** pfit[1] + return y_fit, pfit, {'coeffs':coeffs_dict,'formula':formula,'fitted_function':fitted_fun} + + +def polyfit2d(x, y, z, kx=3, ky=3, order=None): + ''' + Two dimensional polynomial fitting by least squares. + Fits the functional form f(x,y) = z. + + Notes + ----- + Resultant fit can be plotted with: + np.polynomial.polynomial.polygrid2d(x, y, soln.reshape((kx+1, ky+1))) + + Parameters + ---------- + x, y: array-like, 1d + x and y coordinates. + z: np.ndarray, 2d + Surface to fit. + kx, ky: int, default is 3 + Polynomial order in x and y, respectively. + order: int or None, default is None + If None, all coefficients up to maxiumum kx, ky, ie. up to and including x^kx*y^ky, are considered. + If int, coefficients up to a maximum of kx+ky <= order are considered. + + Returns + ------- + Return paramters from np.linalg.lstsq. + + soln: np.ndarray + Array of polynomial coefficients. + residuals: np.ndarray + rank: int + s: np.ndarray + + # The resultant fit can be visualised with: + # + # fitted_surf = np.polynomial.polynomial.polyval2d(x, y, soln.reshape((kx+1,ky+1))) + # plt.matshow(fitted_surf + + + ''' + + # grid coords + x, y = np.meshgrid(x, y) + # coefficient array, up to x^kx, y^ky + coeffs = np.ones((kx+1, ky+1)) + + # solve array + a = np.zeros((coeffs.size, x.size)) + + # for each coefficient produce array x^i, y^j + for index, (j, i) in enumerate(np.ndindex(coeffs.shape)): # TODO should it be i,j + # do not include powers greater than order + if order is not None and i + j > order: + arr = np.zeros_like(x) + else: + arr = coeffs[i, j] * x**i * y**j + a[index] = arr.ravel() + + # do leastsq fitting and return leastsq result + return np.linalg.lstsq(a.T, np.ravel(z), rcond=None) + + + +# --------------------------------------------------------------------------------} +# --- Predifined functions NOTE: they need to be registered in variable `MODELS` +# --------------------------------------------------------------------------------{ +def gaussian(x, p): + """ p = (mu,sigma) """ + return 1/(p[1]*np.sqrt(2*np.pi)) * np.exp(-1/2*((x-p[0])/p[1])**2) + +def gaussian_w_offset(x, p): + """ p = (mu,sigma,y0) """ + return 1/(p[1]*np.sqrt(2*np.pi)) * np.exp(-1/2*((x-p[0])/p[1])**2) + p[2] + +def logarithmic(x, p): + """ p = (a,b) """ + return p[0]*np.log(x)+p[1] + +def powerlaw_all(x, p): + """ p = (alpha,u_ref,z_ref) """ + return p[1] * (x / p[2]) ** p[0] + +def powerlaw_alpha(x, p, u_ref=10, z_ref=100): + """ p = alpha """ + return u_ref * (x / z_ref) ** p[0] + +def powerlaw_u_alpha(x, p, z_ref=100): + """ p = (alpha, u_ref) """ + return p[1] * (x / z_ref) ** p[0] + +def expdecay(x, p, z_ref=100): + """ p = (A, k, B) formula: {A}*exp(-{k}*x)+{B} """, + return p[0]* np.exp(-p[1]*x) + p[2] + +def weibull_pdf(x, p, z_ref=100): + """ p = (A, k) formula: {k}*x**({k}-1) / {A}**{k} * np.exp(-x/{A})**{k} """, + # NOTE: if x is 0, a divide by zero error is incountered if p[1]-1<0 + p=list(p) + return p[1] * x ** (p[1] - 1) / p[0] ** p[1] * np.exp(-(x / p[0]) ** p[1]) + +def sinusoid(x, p): + """ p = (A,omega,phi,B) """ + return p[0]*np.sin(p[1]*x+p[2]) + p[3] +def sinusoid_f(x, p): + """ p = (A,f,phi_deg,B) """ + return p[0]*np.sin(2*pi*(p[1]*x+p[2]/360)) + p[3] + + + +def secondorder_impulse(t, p): + """ p = (A, omega0, zeta, B, t0) """ + A, omega0, zeta, B, t0 = p + omegad = omega0 * sqrt(1-zeta**2) + phi = np.arctan2(zeta, sqrt(1-zeta**2)) + x = np.zeros(t.shape) + bp = t>=t0 + t = t[bp]-t0 + x[bp] += A * sin(omegad * t) * exp(-zeta * omega0 * t) + x+=B + return x + +def secondorder_step(t, p): + """ p = (A, omega0, zeta, B, t0) """ + A, omega0, zeta, B, t0 = p + omegad = omega0 * sqrt(1-zeta**2) + phi = np.arctan2(zeta, sqrt(1-zeta**2)) + x = np.zeros(t.shape) + bp = t>=t0 + t = t[bp]-t0 + x[bp] += A * ( 1- exp(-zeta*omega0 *t)/sqrt(1-zeta**2) * cos(omegad*t - phi)) + x+=B + return x + + +def gentorque(x, p): + """ + INPUTS: + x: generator or rotor speed + p= (RtGnSp, RtTq , Rgn2K , SlPc , SpdGenOn) + RtGnSp Rated generator speed for simple variable-speed generator control (HSS side) (rpm) + RtTq Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) + Rgn2K Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) + SlPc Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) + + OUTPUTS: + GenTrq: Generator torque [Nm] + + """ + + # Init + RtGnSp, RtTq , Rgn2K , SlPc, SpdGenOn = p + GenTrq=np.zeros(x.shape) + + xmin,xmax=np.min(x), np.max(x) +# if RtGnSp<(xmin+xmax)*0.4: +# return GenTrq + + # Setting up different regions + xR21_Start = RtGnSp*(1-SlPc/100) + bR0 = xSpdGenOn , x=xR21_Start , x<=RtGnSp) + bR3 = x>RtGnSp + # R21 + y1, y2 = Rgn2K*xR21_Start**2, RtTq + x1, x2 = xR21_Start , RtGnSp + m=(y2-y1)/(x2-x1) + GenTrq[bR21] = m*(x[bR21]-x1) + y1 # R21 + GenTrq[bR2] = Rgn2K * x[bR2]**2 # R2 + GenTrq[bR3] = RtTq # R3 + return GenTrq + + +MODELS =[ +# {'label':'User defined model', +# 'name':'eval:', +# 'formula':'{a}*x**2 + {b}', +# 'coeffs':None, +# 'consts':None, +# 'bounds':None }, +{'label':'Gaussian', 'handle':gaussian,'id':'predef: gaussian', +'formula':'1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2)', +'coeffs' :'mu=0, sigma=1', # Order Important +'consts' :None, +'bounds' :None}, +{'label':'Gaussian with y-offset','handle':gaussian_w_offset,'id':'predef: gaussian-yoff', +'formula':'1/({sigma}*sqrt(2*pi)) * exp(-1/2 * ((x-{mu})/{sigma})**2) + {y0}', +'coeffs' :'mu=0, sigma=1, y0=0', #Order Important +'consts' :None, +'bounds' :'sigma=(-inf,inf), mu=(-inf,inf), y0=(-inf,inf)'}, +{'label':'Exponential', 'handle': expdecay, 'id':'predef: expdecay', +'formula':'{A}*exp(-{k}*x)+{B}', +'coeffs' :'A=1, k=1, B=0', # Order Important +'consts' :None, +'bounds' :None}, +{'label':'Logarithmic', 'handle': logarithmic, 'id':'predef: logarithmic', +'formula':'{a}*log(x)+{b}', +'coeffs' :'a=1, b=0', # Order Important +'consts' :None, +'bounds' :None}, +{'label':'2nd order impulse/decay (manual)', 'handle': secondorder_impulse, 'id':'predef: secondorder_impulse', +'formula':'{A}*exp(-{zeta}*{omega}*(x-{x0})) * sin({omega}*sqrt(1-{zeta}**2))) +{B}', +'coeffs' :'A=1, omega=1, zeta=0.001, B=0, x0=0', # Order Important +'consts' :None, +'bounds' :'A=(-inf,inf), omega=(0,100), zeta=(0,1), B=(-inf,inf), x0=(-inf,inf)'}, +{'label':'2nd order step (manual)', 'handle': secondorder_step, 'id':'predef: secondorder_step', +'formula':'{A}*(1-exp(-{zeta}*{omega}*(x-{x0}))/sqrt(1-{zeta}**2) * cos({omega}*sqrt(1-{zeta}**2)-arctan({zeta}/sqrt(1-{zeta}**2)))) +{B}', +'coeffs' :'A=1, omega=1, zeta=0.001, B=0, x0=0', # Order Important +'consts' :None, +'bounds' :'A=(-inf,inf), omega=(0,100), zeta=(0,1), B=(-inf,inf), x0=(-inf,inf)'}, + +# --- Wind Energy +{'label':'Power law (alpha)', 'handle':powerlaw_alpha, 'id':'predef: powerlaw_alpha', +'formula':'{u_ref} * (z / {z_ref}) ** {alpha}', +'coeffs' : 'alpha=0.1', # Order important +'consts' : 'u_ref=10, z_ref=100', +'bounds' : 'alpha=(-1,1)'}, +{'label':'Power law (alpha,u)', 'handle':powerlaw_u_alpha, 'id':'predef: powerlaw_u_alpha', +'formula':'{u_ref} * (z / {z_ref}) ** {alpha}', +'coeffs': 'alpha=0.1, u_ref=10', # Order important +'consts': 'z_ref=100', +'bounds': 'u_ref=(0,inf), alpha=(-1,1)'}, +# 'powerlaw_all':{'label':'Power law (alpha,u,z)', 'handle':powerlaw_all, # NOTE: not that useful +# 'formula':'{u_ref} * (z / {z_ref}) ** {alpha}', +# 'coeffs': 'alpha=0.1, u_ref=10, z_ref=100', +# 'consts': None, +# 'bounds': 'u_ref=(0,inf), alpha=(-1,1), z_ref=(0,inf)'}, +{'label':'Weibull PDF', 'handle': weibull_pdf, 'id':'predef: weibull_pdf', +'formula':'{k}*x**({k}-1) / {A}**{k} * np.exp(-x/{A})**{k}', +'coeffs' :'A=1, k=1', # Order Important +'consts' :None, +'bounds' :'A=(0.1,inf), k=(0,5)'}, +{'label':'Generator Torque', 'handle': gentorque, 'id':'predef: gentorque', +'formula': '{RtGnSp} , {RtTq} , {Rgn2K} , {SlPc} , {SpdGenOn}', +'coeffs' : 'RtGnSp=100 , RtTq=1000 , Rgn2K=0.01 ,SlPc=5 , SpdGenOn=0', # Order Important +'consts' :None, +'bounds' :'RtGnSp=(0.1,inf) , RtTq=(1,inf), Rgn2K=(0.0,0.1) ,SlPc=(0,20) , SpdGenOn=(0,inf)'} +] + +# --------------------------------------------------------------------------------} +# --- Main function wrapper +# --------------------------------------------------------------------------------{ +def model_fit(func, x, y, p0=None, bounds=None, **fun_kwargs): + """ + Parameters + ---------- + func: string or function handle + - function handle + - string starting with "fitter: ": (see variable FITTERS) + - "fitter: polynomial_continuous 5' : polyfit order 5 + - "fitter: polynomial_discrete 0 2 3 ': fit polynomial of exponents 0 2 3 + - string providing an expression to evaluate, e.g.: + - "eval: {a}*x + {b}*x**2 " + - string starting with "predef": (see variable MODELS) + - "predef: powerlaw_alpha" : + - "predef: powerlaw_all" : + - "predef: gaussian " : + + x: array of x values + y: array of y values + p0: initial values for parameters, either a string or a dict: + - if a string: the string is converted to a dictionary, assuming key value pairs + example: 'a=0, b=1.3' + - if a dictionary, then keys should corresponds to the parameters of the model + example: {'a':0, 'b':1.3} + bounds: bounds for each parameters, either a string or a dictionary. + NOTE: pi and inf are available to set bounds + - if a string, the string is converted to a dictionary assuming key value pairs + example: 'a=(0,3), b=(-inf,pi)' + - if a dictionary, the keys should corresponds to the parameters of the model + example: {'a':(0,3), 'b':(-inf,pi)} + + Returns + ------- + y_fit: array with same shape as `x` + fitted data. + pfit : fitted parameters + fitter: ModelFitter object + """ + + if isinstance(func,six.string_types) and func.find('fitter:')==0: + # --- This is a high level fitter, we call the class + # The info about the class are storred in the global variable FITTERS + # See e.g. SinusoidFitter, DiscretePolynomialFitter + predef_fitters=[m['id'] for m in FITTERS] + if func not in predef_fitters: + raise Exception('Function `{}` not defined in curve_fitting module\n Available fitters: {}'.format(func,predef_fitters)) + i = predef_fitters.index(func) + FitterDict = FITTERS[i] + consts = FITTERS[i]['consts'] + args, missing = set_common_keys(consts, fun_kwargs) + if len(missing)>0: + raise Exception('Curve fitting with `{}` requires the following arguments {}. Missing: {}'.format(func,consts.keys(),missing)) + # Calling the class + fitter = FitterDict['handle'](x=x, y=y, p0=p0, bounds=bounds, **fun_kwargs) + else: + fitter = ModelFitter(func, x, y, p0=p0, bounds=bounds, **fun_kwargs) + + pfit = [v for _,v in fitter.model['coeffs'].items()] + return fitter.data['y_fit'], pfit , fitter + + +# --------------------------------------------------------------------------------} +# --- Main Class +# --------------------------------------------------------------------------------{ +class ModelFitter(): + def __init__(self,func=None, x=None, y=None, p0=None, bounds=None, **fun_kwargs): + + self.model={ + 'name':None, 'model_function':None, 'consts':fun_kwargs, 'formula': 'unavailable', # model signature + 'coeffs':None, 'formula_num':'unavailable', 'fitted_function':None, 'coeffs_init':p0, 'bounds':bounds, # model fitting + 'R2':None, + } + self.data={'x':x,'y':y,'y_fit':None} + + if func is None: + return + self.set_model(func, **fun_kwargs) + + # Initialize function if present + # Perform fit if data and function is present + if x is not None and y is not None: + self.fit_data(x,y,p0,bounds) + + def set_model(self,func, **fun_kwargs): + if callable(func): + # We don't have much additional info + self.model['model_function'] = func + self.model['name'] = func.__name__ + pass + + elif isinstance(func,six.string_types): + if func.find('predef:')==0: + # --- Minimization from a predefined function + predef_models=[m['id'] for m in MODELS] + if func not in predef_models: + raise Exception('Predefined function `{}` not defined in curve_fitting module\n Available functions: {}'.format(func,predef_models)) + i = predef_models.index(func) + ModelDict = MODELS[i] + self.model['model_function'] = ModelDict['handle'] + self.model['name'] = ModelDict['label'] + self.model['formula'] = ModelDict['formula'] + self.model['coeffs'] = extract_key_num(ModelDict['coeffs']) + self.model['coeffs_init'] = self.model['coeffs'].copy() + self.model['consts'] = extract_key_num(ModelDict['consts']) + self.model['bounds'] = extract_key_tuples(ModelDict['bounds']) + + elif func.find('eval:')==0: + # --- Minimization from a eval string + formula=func[5:] + # Extract coeffs {a} {b} {c}, replace by p[0] + variables, formula_eval = extract_variables(formula) + nParams=len(variables) + if nParams==0: + raise Exception('Formula should contains parameters in curly brackets, e.g.: {a}, {b}, {u_1}. No parameters found in {}'.format(formula)) + + # Check that the formula evaluates + x=np.array([1,2,5])*np.sqrt(2) # some random evaluation vector.. + p=[np.sqrt(2)/4]*nParams # some random initial conditions + try: + y=eval(formula_eval) + y=np.asarray(y) + if y.shape!=x.shape: + raise Exception('The formula does not return an array of same size as the input variable x. The formula must include `x`: {}'.format(formula_eval)) + except SyntaxError: + raise Exception('The formula does not evaluate, syntax error raised: {}'.format(formula_eval)) + except ZeroDivisionError: + pass + + # Creating the actual function + def func(x, p): + return eval(formula_eval) + + self.model['model_function'] = func + self.model['name'] = 'user function' + self.model['formula'] = formula + self.model['coeffs'] = OrderedDict([(k,v) for k,v in zip(variables,p)]) + self.model['coeffs_init'] = self.model['coeffs'].copy() + self.model['consts'] = {} + self.model['bounds'] = None + + else: + raise Exception('func string needs to start with `eval:` of `predef:`, func: {}'.format(func)) + else: + raise Exception('func should be string or callable') + + if fun_kwargs is None: + return + if len(fun_kwargs)==0: + return + if self.model['consts'] is None: + raise Exception('Fun_kwargs provided, but no function constants were defined') + + self.model['consts'], missing = set_common_keys(self.model['consts'], fun_kwargs ) + if len(missing)>0: + raise Exception('Curve fitting with function `{}` requires the following arguments {}. Missing: {}'.format(func.__name__,consts.keys(),missing)) + + def setup_bounds(self, bounds, nParams): + if bounds is not None: + self.model['bounds']=bounds # store in model + bounds=self.model['bounds'] # usemodel bounds as default + if bounds is not None: + if isinstance(bounds ,six.string_types): + bounds=extract_key_tuples(bounds) + + if isinstance(bounds ,dict): + if len(bounds)==0 or 'all' in bounds.keys(): + bounds=([-np.inf]*nParams,[np.inf]*nParams) + elif self.model['coeffs'] is not None: + b1=[] + b2=[] + for k in self.model['coeffs'].keys(): + if k in bounds.keys(): + b1.append(bounds[k][0]) + b2.append(bounds[k][1]) + else: + # TODO merge default bounds + raise Exception('Bounds dictionary is missing the key: `{}`'.format(k)) + bounds=(b1,b2) + else: + raise NotImplementedError('Bounds dictionary with no known model coeffs.') + else: + # so.curve_fit needs a 2-tuple + b1,b2=bounds[0],bounds[1] + if not hasattr(b1,'__len__'): + b1=[b1]*nParams + if not hasattr(b2,'__len__'): + b2=[b2]*nParams + bounds=(b1,b2) + else: + bounds=([-np.inf]*nParams,[np.inf]*nParams) + + self.model['bounds']=bounds # store in model + + def setup_guess(self, p0, bounds, nParams): + """ + Setup initial parameter values for the fit, based on what the user provided, and potentially the bounds + + INPUTS: + - p0: initial parameter values for the fit + - if a string (e.g. " a=1, b=3"), it's converted to a dict + - if a dict, the ordered keys of model['coeffs'] are used to sort p0 + - bounds: tuple of lower and upper bounds for each parameters. + Parameters are ordered as function of models['coeffs'] + bounds[0]: lower bounds or all parameters + bounds[1]: upper bounds or all parameters + + We can assume that the bounds are set + """ + def middleOfBounds(i): + """ return middle of bounds for parameter `i`""" + bLow = bounds[0][i] + bHigh = bounds[0][2] + if (bLow,bHigh)==(-np.inf,np.inf): + p_i=0 + elif bLow==-np.inf: + p_i = -abs(bHigh)*2 + elif bHigh== np.inf: + p_i = abs(bLow)*2 + else: + p_i = (bLow+bHigh)/2 + return p_i + + if isinstance(p0 ,six.string_types): + p0=extract_key_num(p0) + if len(p0)==0: + p0=None + + if p0 is None: + # There is some tricky logic here between the priority of bounds and coeffs + if self.model['coeffs'] is not None: + # We rely on function to give us decent init coefficients + p0 = ([v for _,v in self.model['coeffs'].items()]) + elif bounds is None: + p0 = ([0]*nParams) + else: + # use middle of bounds + p0 = [0]*nParams + for i,(b1,b2) in enumerate(zip(bounds[0],bounds[1])): + p0[i] = middleOfBounds(i) + p0 = (p0) + elif isinstance(p0,dict): + # User supplied a dictionary, we use the ordered keys of coeffs to sort p0 + p0_dict=p0.copy() + if self.model['coeffs'] is not None: + p0=[] + for k in self.model['coeffs'].keys(): + if k in p0_dict.keys(): + p0.append(p0_dict[k]) + else: + raise Exception('Guess dictionary is missing the key: `{}`'.format(k)) + else: + raise NotImplementedError('Guess dictionary with no known model coeffs.') + + + if not hasattr(p0,'__len__'): + p0=(p0,) + + # --- Last check that p0 is within bounds + if bounds is not None: + for p,k,lb,ub in zip(p0, self.model['coeffs'].keys(), bounds[0], bounds[1]): + if pub: + raise Exception('Parameter `{}` has the guess value {}, which is larger than the upper bound ({})'.format(k,p,ub)) + # TODO potentially set it as middle of bounds + + # --- Finally, store the initial guesses in the model + self.model['coeffs_init'] = p0 + + def fit(self, func, x, y, p0=None, bounds=None, **fun_kwargs): + """ Fit model defined by a function to data (x,y) """ + # Setup function + self.set_model(func, **fun_kwargs) + # Fit data to model + self.fit_data(x, y, p0, bounds) + + def clean_data(self,x,y): + x=np.asarray(x) + y=np.asarray(y) + bNaN=~np.isnan(y) + y=y[bNaN] + x=x[bNaN] + bNaN=~np.isnan(x) + y=y[bNaN] + x=x[bNaN] + self.data['x']=x + self.data['y']=y + return x,y + + def fit_data(self, x, y, p0=None, bounds=None): + """ fit data, assuming a model is already setup""" + if self.model['model_function'] is None: + raise Exception('Call set_function first') + + # Cleaning data, and store it in object + x,y=self.clean_data(x,y) + + # nParams + if isinstance(p0 ,six.string_types): + p0=extract_key_num(p0) + if len(p0)==0: + p0=None + if p0 is not None: + if hasattr(p0,'__len__'): + nParams=len(p0) + else: + nParams=1 + elif self.model['coeffs'] is not None: + nParams=len(self.model['coeffs']) + else: + raise Exception('Initial guess `p0` needs to be provided since we cant infer the size of the model coefficients.') + if self.model['coeffs'] is not None: + if len(self.model['coeffs'])!=nParams: + raise Exception('Inconsistent dimension between model guess (size {}) and the model parameters (size {})'.format(nParams,len(self.model['coeffs']))) + + # Bounds + self.setup_bounds(bounds,nParams) + + # Initial conditions + self.setup_guess(p0,self.model['bounds'],nParams) + + # Fitting + minimize_me = lambda x, *p : self.model['model_function'](x, p, **self.model['consts']) + pfit, pcov = so.curve_fit(minimize_me, x, y, p0=self.model['coeffs_init'], bounds=self.model['bounds']) + + # --- Reporting information about the fit (after the fit) + y_fit = self.model['model_function'](x, pfit, **self.model['consts']) + self.store_fit_info(y_fit, pfit) + + # --- Return a fitted function + self.model['fitted_function'] = lambda xx: self.model['model_function'](xx, pfit, **self.model['consts']) + + def store_fit_info(self, y_fit, pfit): + # --- Reporting information about the fit (after the fit) + self.data['y_fit']=y_fit + self.model['R2'] = rsquare(self.data['y'], y_fit) + if self.model['coeffs'] is not None: + if not isinstance(self.model['coeffs'], OrderedDict): + raise Exception('Coeffs need to be of type OrderedDict') + for k,v in zip(self.model['coeffs'].keys(), pfit): + self.model['coeffs'][k]=v + + # Replace numerical values in formula + if self.model['formula'] is not None: + formula_num=self.model['formula'] + for k,v in self.model['coeffs'].items(): + formula_num = formula_num.replace('{'+k+'}',str(v)) + for k,v in self.model['consts'].items(): + formula_num = formula_num.replace('{'+k+'}',str(v)) + self.model['formula_num'] = formula_num + + def formula_num(self, fmt=None): + """ return formula with coeffs and consts evaluted numerically""" + if fmt is None: + fmt_fun = lambda x: str(x) + elif isinstance(fmt,six.string_types): + fmt_fun = lambda x: ('{'+fmt+'}').format(x) + elif callable(fmt): + fmt_fun = fmt + formula_num=self.model['formula'] + for k,v in self.model['coeffs'].items(): + formula_num = formula_num.replace('{'+k+'}',fmt_fun(v)) + for k,v in self.model['consts'].items(): + formula_num = formula_num.replace('{'+k+'}',fmt_fun(v)) + return formula_num + + + + def plot(self, x=None, fig=None, ax=None): + if x is None: + x=self.data['x'] + + sFormula = _clean_formula(self.model['formula'],latex=True) + + import matplotlib.pyplot as plt + import matplotlib.patches as mpatches + + if fig is None: + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + + ax.plot(self.data['x'], self.data['y'], '.', label='Data') + ax.plot(x, self.model['fitted_function'](x), '-', label='Model ' + sFormula) + + # Add extra info to the legend + handles, labels = ax.get_legend_handles_labels() # get existing handles and labels + empty_patch = mpatches.Patch(color='none', label='Extra label') # create a patch with no color + for k,v in self.model['coeffs'].items(): + handles.append(empty_patch) # add new patches and labels to list + labels.append(r'${:s}$ = {}'.format(pretty_param(k),pretty_num_short(v))) + handles.append(empty_patch) # add new patches and labels to list + labels.append('$R^2$ = {}'.format(pretty_num_short(self.model['R2']))) + ax.legend(handles, labels) + + + #ax.set_xlabel('') + #ax.set_ylabel('') + return fig,ax + + def print_guessbounds(self): + s='' + p0 = self.model['coeffs_init'] + bounds = self.model['bounds'] + for i,(k,v) in enumerate(self.model['coeffs'].items()): + print( (pretty_num(bounds[0][i]),pretty_num(p0[i]), pretty_num(bounds[1][i])) ) + s+='{:15s}: {:10s} < {:10s} < {:10s}\n'.format(k, pretty_num(bounds[0][i]),pretty_num(p0[i]), pretty_num(bounds[1][i])) + print(s) + + + def __repr__(self): + s='<{} object> with fields:\n'.format(type(self).__name__) + s+=' - data, dictionary with keys: \n' + s+=' - x: [{} ... {}], n: {} \n'.format(self.data['x'][0],self.data['x'][-1],len(self.data['x'])) + s+=' - y: [{} ... {}], n: {} \n'.format(self.data['y'][0],self.data['y'][-1],len(self.data['y'])) + s+=' - model, dictionary with keys: \n' + for k,v in self.model.items(): + s=s+' - {:15s}: {}\n'.format(k,v) + return s + + +# --------------------------------------------------------------------------------} +# --- Wrapper for predefined fitters +# --------------------------------------------------------------------------------{ +class PredefinedModelFitter(ModelFitter): + def __init__(self, x=None, y=None, p0=None, bounds=None, **kwargs): + ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) # NOTE: not passing data + + self.kwargs=kwargs + + if x is not None and y is not None: + self.fit_data(x,y,p0,bounds) + + def setup_model(self): + """ + Setup model: + - guess/coeffs_init: return params in format needed for curve_fit (p0,p1,p2,p3) + - bound : bounds in format needed for curve_fit ((low0,low1,low2), (high0, high1)) + - coeffs : OrderedDict, necessary for user print + - formula : necessary for user print + """ + #self.model['coeffs'] = OrderedDict([(var,1) for i,var in enumerate(variables)]) + #self.model['formula'] = '' + #self.model['coeffs_init']=p_guess + #self.model['bounds']=bounds_guess + raise NotImplementedError('To be implemented by child class') + + def model_function(self, x, p): + raise NotImplementedError('To be implemented by child class') + + def fit_data(self, x, y, p0=None, bounds=None): + # Cleaning data + x,y=self.clean_data(x,y) + + # --- setup model + # guess initial parameters, potential bounds, and set necessary data + self.setup_model() + + # --- Minimization + minimize_me = lambda x, *p : self.model_function(x, p) + if self.model['bounds'] is None: + pfit, pcov = so.curve_fit(minimize_me, x, y, p0=self.model['coeffs_init']) + else: + pfit, pcov = so.curve_fit(minimize_me, x, y, p0=self.model['coeffs_init'], bounds=self.model['bounds']) + # --- Reporting information about the fit (after the fit) + # And Return a fitted function + y_fit = self.model_function(x, pfit) + self.model['fitted_function']=lambda xx : self.model_function(xx, pfit) + self.store_fit_info(y_fit, pfit) + + def plot_guess(self, x=None, fig=None, ax=None): + """ plotthe guess values""" + if x is None: + x=self.data['x'] + import matplotlib.pyplot as plt + if fig is None: + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + + p_guess = self.model['coeffs_init'] + + ax.plot(self.data['x'], self.data['y'] , '.', label='Data') + ax.plot(x, self.model_function(x,p_guess), '-', label='Model at guessed parameters') + ax.legend() + + +# --------------------------------------------------------------------------------} +# --- Predefined fitters +# --------------------------------------------------------------------------------{ +class SecondOrderFitterImpulse(PredefinedModelFitter): + + def model_function(self, x, p): + return secondorder_impulse(x, p) + + def setup_model(self): + """ p = (A, omega0, zeta, B, t0) """ + self.model['coeffs'] = OrderedDict([('A',1),('omega',1),('zeta',0.01),('B',0),('t0',0)]) + self.model['formula'] = '{A}*exp(-{zeta}*{omega}*(x-{x0}))*sin({omega}*sqrt(1-{zeta}**2)))+{B}' + + # --- Guess Initial values + x, y = self.data['x'],self.data['y'] + # TODO use signal + dt = x[1]-x[0] + omega0 = main_frequency(x,y) + A = np.max(y) - np.min(y) + B = np.mean(y) + zeta = 0.1 + y_start = y[0]+0.01*A + bDeviate = np.argwhere(abs(y-y_start)>abs(y_start-y[0]))[0] + t0 = x[bDeviate[0]] + p_guess = np.array([A, omega0, zeta, B, t0]) + self.model['coeffs_init'] = p_guess + # --- Set Bounds + T = x[-1]-x[0] + dt = x[1]-x[0] + om_min = 2*np.pi/T/2 + om_max = 2*np.pi/dt/2 + b_A = (A*0.1,A*3) + b_om = (om_min,om_max) + b_zeta = (0,1) + b_B = (np.min(y),np.max(y)) + b_x0 = (np.min(x),np.max(x)) + self.model['bounds'] = ((b_A[0],b_om[0],b_zeta[0],b_B[0],b_x0[0]),(b_A[1],b_om[1],b_zeta[1],b_B[1],b_x0[1])) + #self.plot_guess(); import matplotlib.pyplot as plt; plt.show() + #self.print_guessbounds(); + +class SecondOrderFitterStep(PredefinedModelFitter): + + def model_function(self, x, p): + return secondorder_step(x, p) + + def setup_model(self): + """ p = (A, omega0, zeta, B, t0) """ + self.model['coeffs'] = OrderedDict([('A',1),('omega',1),('zeta',0.01),('B',0),('t0',0)]) + self.model['formula'] ='{A}*(1-exp(-{zeta}*{omega}*(x-{x0}))/sqrt(1-{zeta}**2) * cos({omega}*sqrt(1-{zeta}**2)-arctan({zeta}/sqrt(1-{zeta}**2)))) +{B}' + # --- Guess Initial values + x, y = self.data['x'],self.data['y'] + # TODO use signal + omega0 = main_frequency(x,y) + A = np.max(y) - np.min(y) + B = y[0] + zeta = 0.1 + y_start = y[0]+0.01*A + bDeviate = np.argwhere(abs(y-y_start)>abs(y_start-y[0]))[0] + t0 = x[bDeviate[0]] + p_guess = np.array([A, omega0, zeta, B, t0]) + self.model['coeffs_init'] = p_guess + # --- Set Bounds + T = x[-1]-x[0] + dt = x[1]-x[0] + om_min = 2*np.pi/T/2 + om_max = 2*np.pi/dt/2 + b_A = (A*0.1,A*3) + b_om = (om_min,om_max) + b_zeta = (0,1) + b_B = (np.min(y),np.max(y)) + b_x0 = (np.min(x),np.max(x)) + self.model['bounds'] = ((b_A[0],b_om[0],b_zeta[0],b_B[0],b_x0[0]),(b_A[1],b_om[1],b_zeta[1],b_B[1],b_x0[1])) + #self.plot_guess(); import matplotlib.pyplot as plt; plt.show() + #self.print_guessbounds(); + +# --------------------------------------------------------------------------------} +# --- Predefined fitter +# --------------------------------------------------------------------------------{ +class ContinuousPolynomialFitter(ModelFitter): + def __init__(self,order=None, x=None, y=None, p0=None, bounds=None): + ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) + self.setOrder(int(order)) + if order is not None and x is not None and y is not None: + self.fit_data(x,y,p0,bounds) + + def setOrder(self, order): + self.order=order + if order is not None: + variables= string.ascii_lowercase[:order+1] + self.model['coeffs'] = OrderedDict([(var,1) for i,var in enumerate(variables)]) + formula = ' + '.join(['{}*x**{}'.format('{'+var+'}',order-i) for i,var in enumerate(variables)]) + self.model['formula'] = _clean_formula(formula) + + def fit_data(self, x, y, p0=None, bounds=None): + if self.order is None: + raise Exception('Polynomial Fitter not set, call function `setOrder` to set order') + # Cleaning data + x,y=self.clean_data(x,y) + + nParams=self.order+1 + # Bounds + self.setup_bounds(bounds, nParams) # TODO + # Initial conditions + self.setup_guess(p0, bounds, nParams) # TODO + + # Fitting + pfit = np.polyfit(x,y,self.order) + + # --- Reporting information about the fit (after the fit) + y_fit = np.polyval(pfit,x) + self.store_fit_info(y_fit, pfit) + + # --- Return a fitted function + self.model['fitted_function']=lambda xx : np.polyval(pfit,xx) + + +class DiscretePolynomialFitter(ModelFitter): + def __init__(self,exponents=None, x=None, y=None, p0=None, bounds=None): + ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) + self.setExponents(exponents) + if exponents is not None and x is not None and y is not None: + self.fit_data(x,y,p0,bounds) + + def setExponents(self, exponents): + self.exponents=exponents + if exponents is not None: + #exponents=-np.sort(-np.asarray(exponents)) + self.exponents=exponents + variables= string.ascii_lowercase[:len(exponents)] + self.model['coeffs'] = OrderedDict([(var,1) for i,var in enumerate(variables)]) + formula = ' + '.join(['{}*x**{}'.format('{'+var+'}',e) for var,e in zip(variables,exponents)]) + self.model['formula'] = _clean_formula(formula) + + def fit_data(self, x, y, p0=None, bounds=None): + if self.exponents is None: + raise Exception('Polynomial Fitter not set, call function `setExponents` to set exponents') + # Cleaning data, and store it in object + x,y=self.clean_data(x,y) + + nParams=len(self.exponents) + # Bounds + self.setup_bounds(bounds, nParams) # TODO + # Initial conditions + self.setup_guess(p0, bounds, nParams) # TODO + + X_poly=np.array([]) + for i,e in enumerate(self.exponents): + if i==0: + X_poly = np.array([x**e]) + else: + X_poly = np.vstack((X_poly,x**e)) + try: + pfit = np.linalg.lstsq(X_poly.T, y, rcond=None)[0] + except: + pfit = np.linalg.lstsq(X_poly.T, y) + + # --- Reporting information about the fit (after the fit) + y_fit= np.dot(pfit, X_poly) + self.store_fit_info(y_fit, pfit) + + # --- Return a fitted function + def fitted_function(xx): + y=np.zeros(xx.shape) + for i,(e,c) in enumerate(zip(self.exponents,pfit)): + y += c*xx**e + return y + self.model['fitted_function']=fitted_function + + +class SinusoidFitter(ModelFitter): + def __init__(self, physical=False, x=None, y=None, p0=None, bounds=None): + ModelFitter.__init__(self, x=None, y=None, p0=p0, bounds=bounds) + #self.setOrder(int(order)) + self.physical=physical + if physical: + self.model['coeffs'] = OrderedDict([('A',1),('f',1),('phi',0),('B',0)]) + self.model['formula'] = '{A} * sin(2*pi*({f}*x + {phi}/360)) + {B}' + else: + self.model['coeffs'] = OrderedDict([('A',1),('omega',1),('phi',0),('B',0)]) + self.model['formula'] = '{A} * sin({omega}*x + {phi}) + {B}' + + if x is not None and y is not None: + self.fit_data(x,y,p0,bounds) + + def fit_data(self, x, y, p0=None, bounds=None): + # Cleaning data + x,y=self.clean_data(x,y) + + # TODO use signal + guess_freq= main_frequency(x,y)/(2*np.pi) # [Hz] + guess_amp = np.std(y) * 2.**0.5 + guess_offset = np.mean(y) + if self.physical: + guess = np.array([guess_amp, guess_freq, 0., guess_offset]) + minimize_me = lambda x, *p : sinusoid_f(x, p) + else: + guess = np.array([guess_amp, 2.*np.pi*guess_freq, 0., guess_offset]) + minimize_me = lambda x, *p : sinusoid(x, p) + self.model['coeffs_init'] = guess + + pfit, pcov = so.curve_fit(minimize_me, x, y, p0=guess) + + # --- Reporting information about the fit (after the fit) + # And Return a fitted function + if self.physical: + y_fit = sinusoid_f(x, pfit) + self.model['fitted_function']=lambda xx : sinusoid_f(xx, pfit) + else: + y_fit = sinusoid(x, pfit) + self.model['fitted_function']=lambda xx : sinusoid(xx, pfit) + self.store_fit_info(y_fit, pfit) + + + +class GeneratorTorqueFitter(ModelFitter): + def __init__(self,x=None, y=None, p0=None, bounds=None): + ModelFitter.__init__(self,x=None, y=None, p0=p0, bounds=bounds) + +# RtGnSp, RtTq , Rgn2K , SlPc , SpdGenOn = p +# {'label':'Generator Torque', 'handle': gentorque, 'id':'predef: gentorque', +# 'formula': '{RtGnSp} , {RtTq} , {Rgn2K} , {SlPc} , {SpdGenOn}', + self.model['coeffs']= extract_key_num('RtGnSp=100 , RtTq=1000 , Rgn2K=0.01 ,SlPc=5 , SpdGenOn=0') +# 'consts' :None, +# 'bounds' :'RtGnSp=(0.1,inf) , RtTq=(1,inf), Rgn2K=(0.0,0.1) ,SlPc=(0,20) , SpdGenOn=(0,inf)'} + if x is not None and y is not None: + self.fit_data(x,y,p0,bounds) + + def fit_data(self, x, y, p0=None, bounds=None): + #nParams=5 + ## Bounds + #self.setup_bounds(bounds,nParams) # TODO + ## Initial conditions + #self.setup_guess(p0,bounds,nParams) # TODO + + # Cleaning data, and store it in object + x,y=self.clean_data(x,y) + + I = np.argsort(x) + x=x[I] + y=y[I] + + # Estimating deltas + xMin, xMax=np.min(x),np.max(x) + yMin, yMax=np.min(y),np.max(y) + DeltaX = (xMax-xMin)*0.02 + DeltaY = (yMax-yMin)*0.02 + + # Binning data + x_bin=np.linspace(xMin,xMax,min(200,len(x))) + x_lin=x_bin[0:-1]+np.diff(x_bin) + #y_lin=np.interp(x_lin,x,y) # TODO replace by bining + y_lin = np.histogram(y, x_bin, weights=y)[0]/ np.histogram(y, x_bin)[0] + y_lin, _, _ = stats.binned_statistic(x, y, statistic='mean', bins=x_bin) + x_lin, _, _ = stats.binned_statistic(x, x, statistic='mean', bins=x_bin) + bNaN=~np.isnan(y_lin) + y_lin=y_lin[bNaN] + x_lin=x_lin[bNaN] + + # --- Find good guess of parameters based on data + # SpdGenOn + iOn = np.where(y>0)[0][0] + SpdGenOn_0 = x[iOn] + SpdGenOn_Bnds = (max(x[iOn]-DeltaX,xMin), min(x[iOn]+DeltaX,xMax)) + # Slpc + Slpc_0 = 5 + Slpc_Bnds = (0,10) + # RtTq + RtTq_0 = yMax + RtTq_Bnds = (yMax-DeltaY, yMax+DeltaY) + # RtGnSp + iCloseRt = np.where(y>yMax*0.50)[0][0] + RtGnSp_0 = x[iCloseRt] + RtGnSp_Bnds = ( RtGnSp_0 -DeltaX*2, RtGnSp_0+DeltaX*2) + # Rgn2K + #print('>>>',SpdGenOn_0, RtGnSp_0) + bR2=np.logical_and(x>SpdGenOn_0, x ['a','b'] + The variables are replaced with p[0],..,p[n] in order of appearance + """ + regex = r"\{(.*?)\}" + matches = re.finditer(regex, sFormula, re.DOTALL) + formula_eval=sFormula + variables=[] + ivar=0 + for i, match in enumerate(matches): + for groupNum in range(0, len(match.groups())): + var = match.group(1) + if var not in variables: + variables.append(var) + formula_eval = formula_eval.replace('{'+match.group(1)+'}','p[{:d}]'.format(ivar)) + ivar+=1 + return variables, formula_eval + + +def extract_key_tuples(text): + """ + all=(0.1,-2),b=(inf,0), c=(-inf,0.3e+10) + """ + if text is None: + return {} + regex = re.compile(r'(?P[\w\-]+)=\((?P[0-9+epinf.-]*?),(?P[0-9+epinf.-]*?)\)($|,)') + return {match.group("key"): (float(match.group("value1")),float(match.group("value2"))) for match in regex.finditer(text.replace(' ',''))} + +def extract_key_num(text): + """ + all=0.1, b=inf, c=-0.3e+10 + """ + if text is None: + return {} + regex = re.compile(r'(?P[\w\-]+)=(?P[0-9+epinf.-]*?)($|,)') + return OrderedDict([(match.group("key"), float(match.group("value"))) for match in regex.finditer(text.replace(' ',''))]) + +def extract_key_miscnum(text): + """ + all=0.1, b=(inf,0), c=[-inf,0.3e+10,10,11]) + """ + def isint(s): + try: + int(s) + return True + except: + return False + + if text is None: + return {} + sp=re.compile('([\w]+)=').split(text.replace(' ','')) + if len(sp)<3: + return {} + sp=sp[1:] + keys = sp[0::2] + values = sp[1::2] + d={} + for (k,v) in zip(keys,values): + if v.find('(')>=0: + v=v.replace('(','').replace(')','') + v=v.split(',') + vect=tuple([float(val) for val in v if len(val.strip())>0]) + elif v.find('[')>=0: + v=v.replace('[','').replace(']','') + v=v.split(',') + vect=[int(val) if isint(val) else float(val) for val in v if len(val.strip())>0] # NOTE returning lists + elif v.find('True')>=0: + v=v.replace(',','').strip() + vect=True + elif v.find('False')>=0: + v=v.replace(',','').strip() + vect=False + else: + v=v.replace(',','').strip() + vect=int(v) if isint(v) else float(v) + d[k]=vect + return d + +def set_common_keys(dict_target, dict_source): + """ Set a dictionary using another one, missing keys in source dictionary are reported""" + keys_missing=[] + for k in dict_target.keys(): + if k in dict_source.keys(): + dict_target[k]=dict_source[k] + else: + keys_missing.append(k) + return dict_target, keys_missing + +def _clean_formula(s, latex=False): + s = s.replace('+-','-').replace('**1','').replace('*x**0','') + s = s.replace('np.','') + if latex: + #s = s.replace('{','$').replace('}','$') + s = s.replace('phi',r'\phi') + s = s.replace('alpha',r'\alpha') + s = s.replace('beta' ,r'\alpha') + s = s.replace('zeta' ,r'\zeta') + s = s.replace('mu' ,r'\mu' ) + s = s.replace('pi' ,r'\pi' ) + s = s.replace('sigma',r'\sigma') + s = s.replace('omega',r'\omega') + s = s.replace('_ref',r'_{ref}') # make this general + s = s.replace(r'(',r'{(') + s = s.replace(r')',r')}') + s = s.replace(r'**',r'^') + s = s.replace(r'*', '') + s = s.replace('sin',r'\sin') + s = s.replace('exp',r'\exp') + s = s.replace('sqrt',r'\sqrt') + s = r'$'+s+r'$' + else: + s = s.replace('{','').replace('}','') + return s + + +def main_frequency(t,y): + """ + Returns main frequency of a signal + NOTE: this tool below to welib.tools.signal_analysis, but put here for convenience + """ + dt = t[1]-t[0] # assume uniform spacing of time and frequency + om = np.fft.fftfreq(len(t), (dt))*2*np.pi + Fyy = abs(np.fft.fft(y)) + omega = abs(om[np.argmax(Fyy[1:])+1]) # exclude the zero frequency (mean) + return omega + +def rsquare(y, f): + """ Compute coefficient of determination of data fit model and RMSE + [r2] = rsquare(y,f) + RSQUARE computes the coefficient of determination (R-square) value from + actual data Y and model data F. + INPUTS + y : Actual data + f : Model fit + OUTPUT + R2 : Coefficient of determination + """ + # Compare inputs + if not np.all(y.shape == f.shape) : + raise Exception('Y and F must be the same size') + # Check for NaN + tmp = np.logical_not(np.logical_or(np.isnan(y),np.isnan(f))) + y = y[tmp] + f = f[tmp] + R2 = max(0,1-np.sum((y-f)**2)/np.sum((y-np.mean(y))** 2)) + return R2 + +def pretty_param(s): + if s in ['alpha','beta','delta','gamma','epsilon','zeta','lambda','mu','nu','pi','rho','sigma','phi','psi','omega']: + s = r'\{}'.format(s) + s = s.replace('_ref',r'_{ref}') # make this general.. + return s + +def pretty_num(x): + if abs(x)<1000 and abs(x)>1e-4: + return "{:9.4f}".format(x) + else: + return '{:.3e}'.format(x) + +def pretty_num_short(x,digits=3): + if digits==4: + if abs(x)<1000 and abs(x)>1e-1: + return "{:.4f}".format(x) + else: + return "{:.4e}".format(x) + elif digits==3: + if abs(x)<1000 and abs(x)>1e-1: + return "{:.3f}".format(x) + else: + return "{:.3e}".format(x) + elif digits==2: + if abs(x)<1000 and abs(x)>1e-1: + return "{:.2f}".format(x) + else: + return "{:.2e}".format(x) + + +if __name__ == '__main__': + # --- Writing example models to file for pyDatView tests + a,b,c = 2.0, 3.0, 4.0 + u_ref,z_ref,alpha=10,12,0.12 + mu,sigma=0.5,1.2 + x = np.linspace(0.1,30,20) + A,k,B=0.5,1.2,10 + y_exp=expdecay(x,(A,k,B)) + A, k = 10, 2.3, + y_weib=weibull_pdf(x,(A,k)) + y_log=logarithmic(x,(a,b)) + exponents=[0,3,5] + y_poly = a + b*x**3 + c*x**5 + y_power=powerlaw_all(x,(alpha,u_ref,z_ref)) + y_gauss=gaussian(x,(mu,sigma)) + A= 101; B= -200.5; omega = 0.4; phi = np.pi/3 + y_sin=sinusoid(x,(A,omega,phi,B)) + np.random.normal(0, 0.1, len(x)) + M=np.column_stack((x,y_poly,y_power,y_gauss,y_gauss+10,y_weib,y_exp,y_log,y_sin)) + np.savetxt('../TestFit.csv',M,header='x,poly,power,gauss,gauss_off,weib,expdecay,log,sin',delimiter=',') diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py new file mode 100644 index 0000000000..4f751b0346 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/damping.py @@ -0,0 +1,373 @@ +""" +Context: + +Logarithmic decrement: + + delta = 1/N log [ x(t) / x(t+N T_d)] = 2 pi zeta / sqrt(1-zeta^2) + +Damping ratio: + + zeta = delta / sqrt( 4 pi^2 + delta^2 ) + +Damped period, frequency: + + Td = 2pi / omega_d + + omegad = omega_0 sqrt(1-zeta**2) + +Damping exponent: + + + alpha = zeta omega_0 = delta/ T_d + + +""" + +import numpy as np + +__all__ = ['freqDampEstimator'] +__all__ += ['freqDampFromPeaks'] +__all__ += ['zetaEnvelop'] +__all__ += ['TestDamping'] + +def indexes(y, thres=0.3, min_dist=1, thres_abs=False): + """Peak detection routine. + + Finds the numeric index of the peaks in *y* by taking its first order difference. By using + *thres* and *min_dist* parameters, it is possible to reduce the number of + detected peaks. *y* must be signed. + + Parameters + ---------- + y : ndarray (signed) + 1D amplitude data to search for peaks. + thres : float, defining threshold. Only the peaks with amplitude higher than the + threshold will be detected. + if thres_abs is False: between [0., 1.], normalized threshold. + min_dist : int + Minimum distance between each detected peak. The peak with the highest + amplitude is preferred to satisfy this constraint. + thres_abs: boolean + If True, the thres value will be interpreted as an absolute value, instead of + a normalized threshold. + + Returns + ------- + ndarray + Array containing the numeric indexes of the peaks that were detected + """ + if isinstance(y, np.ndarray) and np.issubdtype(y.dtype, np.unsignedinteger): + raise ValueError("y must be signed") + + if not thres_abs: + thres = thres * (np.max(y) - np.min(y)) + np.min(y) + + min_dist = int(min_dist) + + # compute first order difference + dy = np.diff(y) + + # propagate left and right values successively to fill all plateau pixels (0-value) + zeros,=np.where(dy == 0) + + # check if the signal is totally flat + if len(zeros) == len(y) - 1: + return np.array([]) + + if len(zeros): + # compute first order difference of zero indexes + zeros_diff = np.diff(zeros) + # check when zeros are not chained together + zeros_diff_not_one, = np.add(np.where(zeros_diff != 1), 1) + # make an array of the chained zero indexes + zero_plateaus = np.split(zeros, zeros_diff_not_one) + + # fix if leftmost value in dy is zero + if zero_plateaus[0][0] == 0: + dy[zero_plateaus[0]] = dy[zero_plateaus[0][-1] + 1] + zero_plateaus.pop(0) + + # fix if rightmost value of dy is zero + if len(zero_plateaus) and zero_plateaus[-1][-1] == len(dy) - 1: + dy[zero_plateaus[-1]] = dy[zero_plateaus[-1][0] - 1] + zero_plateaus.pop(-1) + + # for each chain of zero indexes + for plateau in zero_plateaus: + median = np.median(plateau) + # set leftmost values to leftmost non zero values + dy[plateau[plateau < median]] = dy[plateau[0] - 1] + # set rightmost and middle values to rightmost non zero values + dy[plateau[plateau >= median]] = dy[plateau[-1] + 1] + + # find the peaks by using the first order difference + peaks = np.where((np.hstack([dy, 0.]) < 0.) + & (np.hstack([0., dy]) > 0.) + & (np.greater(y, thres)))[0] + + # handle multiple peaks, respecting the minimum distance + if peaks.size > 1 and min_dist > 1: + highest = peaks[np.argsort(y[peaks])][::-1] + rem = np.ones(y.size, dtype=bool) + rem[peaks] = False + + for peak in highest: + if not rem[peak]: + sl = slice(max(0, peak - min_dist), peak + min_dist + 1) + rem[sl] = True + rem[peak] = False + + peaks = np.arange(y.size)[~rem] + + return peaks + + +#indexes =indexes(x, thres=0.02/max(x), min_dist=1, thres_abs=true) +def logDecFromThreshold(x, threshold=None, bothSides=False, decay=True): + """ Detect maxima in a signal, computes the log deg based on it + """ + if bothSides: + ldPos,iTPos,stdPos,IPos,vldPos = logDecFromThreshold( x, threshold=threshold, decay=decay) + ldNeg,iTNeg,stdNeg,INeg,vldNeg = logDecFromThreshold(-x, threshold=threshold, decay=decay) + return (ldPos+ldNeg)/2, (iTPos+iTNeg)/2, (stdPos+stdNeg)/2, (IPos,INeg), (vldPos, vldNeg) + + if threshold is None: + threshold = np.mean(abs(x-np.mean(x)))/3; + I =indexes(x, thres=threshold, min_dist=1, thres_abs=True) + # Estimating "index" period + iT = round(np.median(np.diff(I))); + vn=np.arange(0,len(I)-1)+1 + # Quick And Dirty Way using one as ref and assuming all periods were found + if decay: + # For a decay we take the first peak as a reference + vLogDec = 1/vn*np.log( x[I[0]]/x[I[1:]] ) # Logarithmic decrement + else: + # For negative damping we take the last peak as a reference + vLogDec = 1/vn*np.log( x[I[-2::-1]]/x[I[-1]] ) # Logarithmic decrement + logdec = np.mean(vLogDec); + std_logdec = np.std(vLogDec) ; + return logdec, iT, std_logdec, I, vLogDec + +def logDecTwoTimes(x, t, i1, i2, Td): + t1, t2 = t[i1], t[i2] + x1, x2 = x[i1], x[i2] + N = (t2-t1)/Td + logdec = 1/N * np.log(x1/x2) + return logdec + +def zetaTwoTimes(x, t, i1, i2, Td): + logdec = logDecTwoTimes(x, t, i1, i2, Td) + zeta = logdec/np.sqrt(4*np.pi**2 + logdec**2) # damping ratio + return zeta + +def zetaRange(x, t, IPos, INeg, Td, decay): + """ + Compute naive zeta based on different peak values (first, mid, last) + """ + def naivezeta(i1, i2): + zetaP = zetaTwoTimes( x, t, IPos[i1], IPos[i2], Td) + zetaN = zetaTwoTimes( -x, t, INeg[i1], INeg[i2], Td) + return [zetaP, zetaN] + zetas = [] + # --- Computing naive log dec from first and last peaks + zetas += naivezeta(0, -1) + # --- Computing naive log dec from one peak and the middle one + if len(IPos)>3 and len(INeg)>3: + if decay: + i1, i2 = 0, int(len(IPos)/2) + else: + i1, i2 = -int(len(IPos)/2), -1 + zetas += naivezeta(i1, i2) + zetaSup = np.max(zetas) + zetaInf = np.min(zetas) + zetaMean = np.mean(zetas) + return zetaSup, zetaInf, zetaMean + +def zetaEnvelop(x, t, omega0, zeta, iRef, moff=0): + """ NOTE: x is assumed to be centered on 0""" + m = np.mean(x) + tref = t[iRef] + Aref = x[iRef]-m + epos = Aref*np.exp(-zeta*omega0*(t-tref))+m+moff + eneg = -Aref*np.exp(-zeta*omega0*(t-tref))+m+moff + return epos, eneg + + +def freqDampFromPeaks(x, t, threshold=None, plot=False, refPoint='mid'): + """ + Use Upper and lower peaks to compute log decrements between neighboring peaks + Previously called logDecFromDecay. + """ + info = {} + x = np.array(x).copy() + m = np.mean(x) + x = x-m # we remove the mean once and for all + if threshold is None: + threshold = np.mean(abs(x))/3 + + dt = t[1]-t[0] # todo signal with dt not uniform + + # Is it a decay or an exloding signal + xstart, xend = np.array_split(np.abs(x),2) + decay= np.mean(xstart)> np.mean(xend) + + # --- Computing log decs from positive and negative side and taking the mean + logdec,iT,std,(IPos,INeg), (vLogDecPos, vLogDecNeg) = logDecFromThreshold( x, threshold=threshold, bothSides=True, decay=decay) + + # --- Finding damped period + Td = iT*dt # Period of damped oscillations. Badly estimated due to dt resolution + # % Better estimate of period + # [T,~,iCross]=fGetPeriodFromZeroCrossing(x(1:IPos(end)),dt); + fd = 1/Td + + # --- Naive ranges + zetaMax, zetaMin, zetaMean = zetaRange(x, t, IPos, INeg, Td, decay) + + zeta = logdec/np.sqrt(4*np.pi**2 + logdec**2 ) # Damping Ratio + fn = fd/np.sqrt(1-zeta**2) + T0 = 1/fn + omega0=2*np.pi*fn + # --- Model + # Estimating signal params + alpha = logdec/Td + omega = 2*np.pi*fd + # Find amplitude at a reference peak + # (we chose the middle peak of the time series to minimize period drift before and after) + # We will adjust for phase and time offset later + i1 = IPos[int(len(IPos)/2)] + A1 = x[i1] + t1 = dt*i1 + # --- Find a zero up-crossing around our value of reference for phase determination + XX=x[i1:] + ineg = i1+np.where(XX<0)[0][0] + ipos = ineg-1 + xcross = [x[ipos],x[ineg]] + icross = [ipos,ineg] + i0 = np.interp(0,xcross,icross) # precise 0-up-crossing + t0 = dt*i0 + phi0 = np.mod(2*np.pi- omega*t0+np.pi/2,2*np.pi); + # --- Model + A = A1/(np.exp(-alpha*t1)*np.cos(omega*t1+phi0)); # Adjust for phase and time offset + x_model = A*np.exp(-alpha*t)*np.cos(omega*t+phi0)+m; + epos = A*np.exp(-alpha*t)+m + eneg = -A*np.exp(-alpha*t)+m + + if plot: + if refPoint=='mid': + iRef = i1 + elif refPoint=='start': + iRef = IPos[0] + else: + iRef = IPos[-1] + import matplotlib.pyplot as plt + print('LogDec.: {:.4f} - Damping ratio: {:.4f} - F_n: {:.4f} - F_d: {:.4f} - T_d:{:.3f} - T_n:{:.3f}'.format(logdec, zeta, fn, fd, Td,T0)) + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + ax.plot(t, x+m) + ax.plot(t[IPos],x[IPos]+m,'o') + ax.plot(t[INeg],x[INeg]+m,'o') + epos, eneg = zetaEnvelop(x, t, omega0, zeta, iRef=iRef, moff=m) + ax.plot(t ,epos, 'k--', label=r'$\zeta={:.4f}$'.format(zeta)) + ax.plot(t ,eneg, 'k--') + epos, eneg = zetaEnvelop(x, t, omega0, zetaMax, iRef=iRef, moff=m) + ax.plot(t ,epos, 'b:', label=r'$\zeta={:.4f}$'.format(zetaMax)) + ax.plot(t ,eneg, 'b:') + epos, eneg = zetaEnvelop(x, t, omega0, zetaMin, iRef=iRef, moff=m) + ax.plot(t ,epos, 'r:', label=r'$\zeta={:.4f}$'.format(zetaMin)) + ax.plot(t ,eneg, 'r:') + #ax.plot(t ,x_model,'k:') + #ax.legend() + dx = np.max(abs(x-m)) + ax.set_ylim([m-dx*1.1 , m+dx*1.1]) + + # We return a dictionary + info['zeta'] = zeta + info['fd'] = fd + info['Td'] = Td + info['fn'] = fn + info['omega0'] = omega0 + info['IPos'] = IPos + info['INeg'] = INeg + # TODO + info['x_model'] = x_model + info['epos'] = epos + info['eneg'] = eneg + # + info['zeta'] = zeta + info['zetaMin'] = zetaMin + info['zetaMax'] = zetaMax + info['zetaMean'] = zetaMean + + return fn, zeta, info + + +def freqDampEstimator(x, t, opts): + """ + Estimate natural frequency and damping ratio. + Wrapper function to use different methods. + + """ + if opts['method']=='fromPeaks': + fn, zeta, info = freqDampFromPeaks(x, t) + else: + raise NotImplementedError() + return fn, zeta, info + + + +# --------------------------------------------------------------------------------} +# --- Unittests +# --------------------------------------------------------------------------------{ +import unittest + +class TestDamping(unittest.TestCase): + + def test_logdec_from_peaks(self): + plot = (__name__ == '__main__') + + for zeta in [0.1, -0.01]: + T0 = 10 + Td = T0 / np.sqrt(1-zeta**2) + delta = 2*np.pi*zeta/np.sqrt(1-zeta**2) # logdec + alpha = delta/Td + t = np.linspace(0,30*Td,2000) + x = np.cos(2*np.pi/Td*t)*np.exp(-alpha*t)+10; + fn, zeta_out, info = freqDampFromPeaks(x, t, plot=plot) + self.assertAlmostEqual(zeta , zeta_out,4) + self.assertAlmostEqual(1/T0 , fn ,2) + + if __name__ == '__main__': + import matplotlib.pyplot as plt + plt.show() + +if __name__ == '__main__': + unittest.main() +# import matplotlib.pyplot as plt +# import pydatview.io as weio +# df= weio.read('DampingExplodingExample2.csv').toDataFrame() +# M = df.values +# x= M[:,1] +# t= M[:,0] +# #for zeta in [-0.01, 0.1]: +# # T0 = 30 +# # Td = T0 / np.sqrt(1-zeta**2) +# # delta = 2*np.pi*zeta/np.sqrt(1-zeta**2) # logdec +# # alpha = delta/Td +# # x = np.cos(2*np.pi/Td*t)*np.exp(-alpha*t)+10; +# # df.insert(1,'PureDecay{}'.format(zeta), x) +# +# #df.to_csv('DECAY_Example.csv',index=False, sep=',') +# +# # Td = 10 +# # zeta = -0.01 # damping ratio (<1) +# # delta = 2*np.pi*zeta/np.sqrt(1-zeta**2) # logdec +# # alpha = delta/Td +# # t = np.linspace(0,30*Td,1000) +# # x = np.cos(2*np.pi/Td*t)*np.exp(-alpha*t)+10; +# # +# # fn, zeta, info = freqDampFromPeaks(x, t, plot=True, refPoint='mid') +# plt.show() + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py new file mode 100644 index 0000000000..a135ecd733 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/eva.py @@ -0,0 +1,332 @@ +""" +Eigenvalue analyses (EVA) tools for: + - arbitrary systems: system matrix (A) + - and mechnical systems: mass (M), stiffness (K) and damping (C) matrices + +Some definitions: + + - zeta: damping ratio + + - delta/log_dec: logarithmic decrement + + - xi: approximation of logarithmic decrement: xi = 2 pi zeta + + - omega0 : natural frequency + + - omega_d : damped frequency omega_d = omega_0 sqrt(1-zeta^2) + + +""" +import pandas as pd +import numpy as np +from scipy import linalg + +def polyeig(*A, sort=False, normQ=None): + """ + Solve the polynomial eigenvalue problem: + (A0 + e A1 +...+ e**p Ap)x = 0 + + Return the eigenvectors [x_i] and eigenvalues [e_i] that are solutions. + + Usage: + X,e = polyeig(A0,A1,..,Ap) + + Most common usage, to solve a second order system: (K + C e + M e**2) x =0 + X,e = polyeig(K,C,M) + + """ + if len(A)<=0: + raise Exception('Provide at least one matrix') + for Ai in A: + if Ai.shape[0] != Ai.shape[1]: + raise Exception('Matrices must be square') + if Ai.shape != A[0].shape: + raise Exception('All matrices must have the same shapes'); + + n = A[0].shape[0] + l = len(A)-1 + # Assemble matrices for generalized problem + C = np.block([ + [np.zeros((n*(l-1),n)), np.eye(n*(l-1))], + [-np.column_stack( A[0:-1])] + ]) + D = np.block([ + [np.eye(n*(l-1)), np.zeros((n*(l-1), n))], + [np.zeros((n, n*(l-1))), A[-1] ] + ]); + # Solve generalized eigenvalue problem + e, X = linalg.eig(C, D); + if np.all(np.isreal(e)): + e=np.real(e) + X=X[:n,:] + + # Sort eigen values + if sort: + I = np.argsort(e) + X = X[:,I] + e = e[I] + + # Scaling each mode by max + if normQ=='byMax': + X /= np.tile(np.max(np.abs(X),axis=0), (n,1)) + + return X, e + + +def eig(K, M=None, freq_out=False, sort=True, normQ=None, discardIm=False, massScaling=True): + """ performs eigenvalue analysis and return same values as matlab + + returns: + Q : matrix of column eigenvectors + Lambda: matrix where diagonal values are eigenvalues + frequency = np.sqrt(np.diag(Lambda))/(2*np.pi) + or + frequencies (if freq_out is True) + """ + if M is not None: + D,Q = linalg.eig(K,M) + # --- rescaling using mass matrix to be consistent with Matlab + # TODO, this can be made smarter + # TODO this should be a normQ + if massScaling: + for j in range(M.shape[1]): + q_j = Q[:,j] + modalmass_j = np.dot(q_j.T,M).dot(q_j) + Q[:,j]= Q[:,j]/np.sqrt(modalmass_j) + Lambda=np.dot(Q.T,K).dot(Q) + else: + D,Q = linalg.eig(K) + Lambda = np.diag(D) + + # --- Sort + lambdaDiag=np.diag(Lambda) + if sort: + I = np.argsort(lambdaDiag) + Q = Q[:,I] + lambdaDiag = lambdaDiag[I] + if freq_out: + Lambda = np.sqrt(lambdaDiag)/(2*np.pi) # frequencies [Hz] + else: + Lambda = np.diag(lambdaDiag) # enforcing purely diagonal + + # --- Renormalize modes if users wants to + if normQ == 'byMax': + for j in range(Q.shape[1]): + q_j = Q[:,j] + iMax = np.argmax(np.abs(q_j)) + scale = q_j[iMax] # not using abs to normalize to "1" and not "+/-1" + Q[:,j]= Q[:,j]/scale + + # --- Sanitization, ensure real values + if discardIm: + Q_im = np.imag(Q) + Q = np.real(Q) + imm = np.mean(np.abs(Q_im),axis = 0) + bb = imm>0 + if sum(bb)>0: + W=list(np.where(bb)[0]) + print('[WARN] Found {:d} complex eigenvectors at positions {}/{}'.format(sum(bb),W,Q.shape[0])) + Lambda = np.real(Lambda) + + + + return Q,Lambda + + +def eigA(A, nq=None, nq1=None, fullEV=False, normQ=None, sort=True): + """ + Perform eigenvalue analysis on a "state" matrix A + where states are assumed to be ordered as {q, q_dot, q1} + This order is only relevant for returning the eigenvectors. + + INPUTS: + - A : square state matrix + - nq: number of second order states, optional, relevant if fullEV is False + - nq1: number of first order states, optional, relevant if fullEV is False + - fullEV: if True, the entire eigenvectors are returned, otherwise, + only the part associated with q and q1 are returned + - normQ: 'byMax': normalize by maximum + None: do not normalize + OUPUTS: + - freq_d: damped frequencies [Hz] + - zeta : damping ratios [-] + - Q : column eigenvectors + - freq_0: natural frequencies [Hz] + """ + n,m = A.shape + + if m!=n: + raise Exception('Matrix needs to be squared') + if nq is None: + if nq1 is None: + nq1=0 + nq = int((n-nq1)/2) + else: + nq1 = n-2*nq + if n!=2*nq+nq1 or nq1<0: + raise Exception('Number of 1st and second order dofs should match the matrix shape (n= 2*nq + nq1') + Q, Lambda = eig(A, sort=False) + v = np.diag(Lambda) + + if not fullEV: + Q=np.delete(Q, slice(nq,2*nq), axis=0) + + # Selecting eigenvalues with positive imaginary part (frequency) + Ipos = np.imag(v)>0 + Q = Q[:,Ipos] + v = v[Ipos] + + # Frequencies and damping based on compled eigenvalues + omega_0 = np.abs(v) # natural cylic frequency [rad/s] + freq_d = np.imag(v)/(2*np.pi) # damped frequency [Hz] + zeta = - np.real(v)/omega_0 # damping ratio + freq_0 = omega_0/(2*np.pi) # natural frequency [Hz] + + # Sorting + if sort: + I = np.argsort(freq_0) + freq_d = freq_d[I] + freq_0 = freq_0[I] + zeta = zeta[I] + Q = Q[:,I] + + # Normalize Q + if normQ=='byMax': + for j in range(Q.shape[1]): + q_j = Q[:,j] + scale = np.max(np.abs(q_j)) + Q[:,j]= Q[:,j]/scale + return freq_d, zeta, Q, freq_0 + + + +def eigMK(M, K, sort=True, normQ=None, discardIm=False, freq_out=True, massScaling=True): + """ + Eigenvalue analysis of a mechanical system + M, K: mass, and stiffness matrices respectively + + Should be equivalent to calling eig(K, M) in Matlab (NOTE: argument swap) + except that frequencies are returned instead of "Lambda" + + OUTPUTS: + Q, freq_0 if freq_out + Q, Lambda otherwise + """ + return eig(K, M, sort=sort, normQ=normQ, discardIm=discardIm, freq_out=freq_out, massScaling=massScaling) + + +def eigMCK(M, C, K, method='full_matrix', sort=True, normQ=None): + """ + Eigenvalue analysis of a mechanical system + M, C, K: mass, damping, and stiffness matrices respectively + + NOTE: full_matrix, state_space and state_space_gen should return the same + when damping is present + """ + if np.linalg.norm(C)<1e-14: + if method.lower() not in ['state_space', 'state_space_gen']: + # No damping + Q, freq_0 = eigMK(M, K, sort=sort, freq_out=True, normQ=normQ) + freq_d = freq_0 + zeta = freq_0*0 + return freq_d, zeta, Q, freq_0 + + + n = M.shape[0] # Number of DOFs + + if method.lower()=='diag_beta': + ## using K, M and damping assuming diagonal beta matrix (Rayleigh Damping) + Q, Lambda = eig(K,M, sort=False) # provide scaled EV, important, no sorting here! + freq_0 = np.sqrt(np.diag(Lambda))/(2*np.pi) + betaMat = np.dot(Q,C).dot(Q.T) + xi = (np.diag(betaMat)*np.pi/(2*np.pi*freq_0)) + xi[xi>2*np.pi] = np.NAN + zeta = xi/(2*np.pi) + freq_d = freq_0*np.sqrt(1-zeta**2) + elif method.lower()=='full_matrix': + ## Method 2 - Damping based on K, M and full D matrix + Q,v = polyeig(K,C,M, sort=sort, normQ=normQ) + #omega0 = np.abs(e) + zeta = - np.real(v) / np.abs(v) + freq_d = np.imag(v) / (2*np.pi) + # Keeping only positive frequencies + bValid = freq_d > 1e-08 + freq_d = freq_d[bValid] + zeta = zeta[bValid] + Q = Q[:,bValid] + # logdec2 = 2*pi*dampratio_sorted./sqrt(1-dampratio_sorted.^2); + + elif method.lower()=='state_space': + # See welib.system.statespace.StateMatrix + Minv = np.linalg.inv(M) + I = np.eye(n) + Z = np.zeros((n, n)) + A = np.block([[np.zeros((n, n)), np.eye(n)], + [ -Minv@K , -Minv@C ]]) + return eigA(A, normQ=normQ, sort=sort) + + elif method.lower()=='state_space_gen': + I = np.eye(n) + Z = np.zeros((n, n)) + A = np.block([[Z, I], + [-K, -C]]) + B = np.block([[I, Z], + [Z, M]]) + # solve the generalized eigenvalue problem + D, Q = linalg.eig(A, B) + # Keeping every other states (assuming pairs..) + v = D[::2] + Q = Q[:n, ::2] + + # calculate natural frequencies and damping + omega_0 = np.abs(v) # natural cyclic frequency [rad/s] + freq_d = np.imag(v)/(2*np.pi) # damped frequency [Hz] + zeta = - np.real(v)/omega_0 # damping ratio + + else: + raise NotImplementedError() + + # Sorting + if sort: + I = np.argsort(freq_d) + freq_d = freq_d[I] + zeta = zeta[I] + Q = Q[:,I] + # Undamped frequency + freq_0 = freq_d / np.sqrt(1 - zeta**2) + #xi = 2 * np.pi * zeta # pseudo log-dec + return freq_d, zeta, Q, freq_0 + + +if __name__=='__main__': + np.set_printoptions(linewidth=300, precision=4) + nDOF = 2 + M = np.zeros((nDOF,nDOF)) + K = np.zeros((nDOF,nDOF)) + C = np.zeros((nDOF,nDOF)) + M[0,0] = 430000; + M[1,1] = 42000000; + C[0,0] = 7255; + C[1,1] = M[1,1]*0.001; + K[0,0] = 2700000.; + K[1,1] = 200000000.; + + freq_d, zeta, Q, freq, xi = eigMCK(M,C,K) + print(freq_d) + print(Q) + + + #M = diag([3,0,0,0], [0, 1,0,0], [0,0,3,0],[0,0,0, 1]) + M = np.diag([3,1,3,1]) + C = np.array([[0.4 , 0 , -0.3 , 0] , [0 , 0 , 0 , 0] , [-0.3 , 0 , 0.5 , -0.2 ] , [ 0 , 0 , -0.2 , 0.2]]) + K = np.array([[-7 , 2 , 4 , 0] , [2 , -4 , 2 , 0] , [4 , 2 , -9 , 3 ] , [ 0 , 0 , 3 , -3]]) + + X,e = polyeig(K,C,M) + print('X:\n',X) + print('e:\n',e) + # Test taht first eigenvector and valur satisfy eigenvalue problem: + s = e[0]; + x = X[:,0]; + res = (M*s**2 + C*s + K).dot(x) # residuals + assert(np.all(np.abs(res)<1e-12)) + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py new file mode 100644 index 0000000000..e88936d26d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/fatigue.py @@ -0,0 +1,1221 @@ +""" +Tools for fatigue analysis + + +Main functions: +- equivalent_load: calculate damage equivalent load for a given signal +- find_range_count: returns range and number of cycles for a given signal + +Subfunctions: +- eq_load: calculate equivalent loads using one of the two rain flow counting methods +- cycle_matrix: calculates a matrix of cycles (binned on amplitude and mean value) +- eq_load_and_cycles: calculate eq_loads of multiple time series (e.g. life time equivalent load) + + +Main aglorithms for rain flow counting: +- rainflow_windap: taken from [2], based on [3] +- rainflow_astm: taken from [2], based [4] +- fatpack: using [5] + + +References: + [1] Hayman (2012) MLife theory manual for Version 1.00 + [2] Wind energy toolbox, wetb.fatigue_tools, DTU wind energy, Denmark + [3] "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A + [4] Adam Nieslony - Rainflow Counting Algorithm, MATLAB Central File Exchange + http://www.mathworks.com/matlabcentral/fileexchange/3026) + [5] Fatpack - Python package + https://github.com/Gunnstein/fatpack + + +""" +import warnings +import numpy as np + + +__all__ = ['equivalent_load', 'find_range_count'] +__all__ += ['rainflow_astm', 'rainflow_windap','eq_load','eq_load_and_cycles','cycle_matrix','cycle_matrix2'] + + +class SignalConstantError(Exception): + pass + + +def equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap', + meanBin=True, binStartAt0=False, + outputMore=False, debug=False): + """Equivalent load calculation + + Calculate the damage equivalent load for a given signal and a given Wohler exponent + + INPUTS + - time : array-like, the time values corresponding to the signal (s) + - signals : array-like, the load signal + - m : Wohler exponent (default is 3) + - Teq : The equivalent period (Default 1, for 1Hz) + - bins : Number of bins in rainflow count histogram + - method: rain flow counting algorithm: 'rainflow_windap', 'rainflow_astm' or 'fatpack' + - meanBin: if True, use the mean of the ranges within a bin (recommended) + otherwise use the middle of the bin (not recommended). + - binStartAt0: if True bins start at zero. Otherwise, start a lowest range + - outputMore: if True, returns range, cycles and bins as well + + OUTPUTS + - Leq : the equivalent load for given m and Teq + + or (if outputMore is True ) + + - Leq, S, N, bins, DELi: + - S: ranges + - N: cycles + - bins: bin edges + - DELi: component 'i' of the DEL (for cycle i) + """ + time = np.asarray(time) + signal = np.asarray(signal) + + # Remove nan, might not be the cleanest + b = ~np.isnan(signal) + signal = signal[b] + time = time[b] + + try: + if len(time)<=1: + raise Exception() + if type(time[0]) is np.datetime64: + T = T/np.timedelta64(1,'s') # or T.item().total_seconds() + else: + T = time[-1]-time[0] # time length of signal (s). Will fail for signal of length 1 + if T==0: + raise Exception() + + neq = T/Teq # number of equivalent periods, see Eq. (26) of [1] + + # --- Range (S) and counts (N) + N, S, bins = find_range_count(signal, bins=bins, method=method, meanBin=meanBin, binStartAt0=binStartAt0) + + # --- get DEL + DELi = S**m * N / neq + Leq = DELi.sum() ** (1/m) # See e.g. eq. (30) of [1] + + except: + if outputMore: + return np.nan, np.nan, np.nan, np.nan, np.nan + else: + return np.nan + + if debug: + for i,(b,n,s,DEL) in enumerate(zip(bins, N, S, DELi)): + if n>0: + print('Bin {:3d}: [{:6.1f}-{:6.1f}] Mid:{:6.1f} - Mean:{:6.1f} Counts:{:4.1f} DEL:{:8.1f} Fraction:{:3.0f}%'.format(i,b,bins[i+1],(b+bins[i+1])/2,s,n,DEL,DEL/Leq**m*100)) + if outputMore: + return Leq, S, N, bins, DELi + else: + return Leq + + +def find_range_count(signal, bins, method='rainflow_windap', meanBin=True, binStartAt0=True): + """ + Returns number of cycles `N` for each range range `S` + Equidistant bins are setup based on the min/max of the signal. + INPUTS: + - signal: array + - bins : 1d-array, int + If bins is a sequence, left edges (and the rightmost edge) of the bins. + If bins is an int, a sequence is created dividing the range `min`--`max` of signal into `bins` number of equally sized bins. + OUTPUTS: + - N: number of cycles for each bin + - S: Ranges for each bin + S is either the center of the bin (meanBin=False) + or + S is the mean of the ranges within this bin (meanBin=True) + - S_bin_edges: edges of the bins + """ + + if method in rainflow_func_dict.keys(): + rainflow_func = rainflow_func_dict[method] + try: + N, S, S_bin_edges, _, _ = cycle_matrix(signal, ampl_bins=bins, mean_bins=1, rainflow_func=rainflow_func, binStartAt0=binStartAt0) + except SignalConstantError: + return np.nan, np.nan, np.nan + + S_bin_edges = S_bin_edges.flatten() + N = N.flatten() + S = S.flatten() + S_mid = (S_bin_edges[:-1] + S_bin_edges[1:]) / 2 + if not meanBin: + S=S_mid + + elif method=='fatpack': + import fatpack + # find rainflow ranges + try: + ranges = fatpack.find_rainflow_ranges(signal) + except IndexError: + # Currently fails for constant signal + return np.nan, np.nan, np.nan + # --- Legacy fatpack + # if (not binStartAt0) and (not meanBin): + # N, S = fatpack.find_range_count(ranges, bins) + # --- Setup bins + # If binStartAt0 is True, the same bins as WINDAP are used + S_bin_edges = create_bins(ranges, bins, binStartAt0=binStartAt0) + # --- Using bin_count to get value at center of bins + N, S = bin_count(ranges, S_bin_edges, meanBin=meanBin) + + else: + raise NotImplementedError('Rain flow algorithm {}'.format(method)) + + # Remove NaN + b = np.isnan(S) + S[b] = 0 + N[b] = 0 + + return N, S, S_bin_edges + +def create_bins(x, bins, binStartAt0=False): + """ + Equidistant bins are setup based on the min/max of the x, unless the user provided the bins as a sequence. + INPUTS: + - x: array + - bins : 1d-array, int + If bins is a sequence, left edges (and the rightmost edge) of the bins. + If bins is an int, a sequence is created dividing the range `min`--`max` of x into `bins` number of equally sized bins. + OUTPUTS: + - bins: + """ + if isinstance(bins, int): + xmax = np.max(x) + xmin, xmax = np.min(x), np.max(x) + if binStartAt0: + xmin = 0 + else: + xmin = np.min(x) + if xmin==xmax: + # I belive that's what's done by histogram. double check + xmin=xmin-0.5 + xmax=xmax+0.5 + bins = np.linspace(xmin, xmax, num=bins + 1) + return bins + + +def bin_count(x, bins, meanBin=True): + """ + Return counts of x within bins + """ + if not meanBin: + # Use the middle of the bin + N, bns = np.histogram(x, bins=bins) + S = bns[:-1] + np.diff(bns) / 2. + else: + bins = create_bins(x, bins, binStartAt0=False) + import pandas as pd + df = pd.DataFrame(data=x, columns=['x']) + xmid = (bins[:-1]+bins[1:])/2 + df['x_mid']= pd.cut(df['x'], bins= bins, labels = xmid ) # Adding a column that has bin attribute + df2 = df.groupby('x_mid').mean() # Average by bin + df['N'] = 1 + dfCount = df[['N','x_mid']].groupby('x_mid').sum() + df2['N'] = dfCount['N'] + # Just in case some bins are missing (will be nan) + df2 = df2.reindex(xmid) + df2 = df2.fillna(0) + S = df2['x'].values + N = df2['N'].values + return N, S + + + + +def check_signal(signal): + # check input data validity + if not type(signal).__name__ == 'ndarray': + raise TypeError('signal must be ndarray, not: ' + type(signal).__name__) + + elif len(signal.shape) not in (1, 2): + raise TypeError('signal must be 1D or 2D, not: ' + str(len(signal.shape))) + + if len(signal.shape) == 2: + if signal.shape[1] > 1: + raise TypeError('signal must have one column only, not: ' + str(signal.shape[1])) + if np.min(signal) == np.max(signal): + raise SignalConstantError("Signal is constant, cannot compute DLC and range") + + +def rainflow_windap(signal, levels=255., thresshold=(255 / 50)): + """Windap equivalent rainflow counting + + + Calculate the amplitude and mean values of half cycles in signal + + This algorithms used by this routine is implemented directly as described in + "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A + + Parameters + ---------- + Signal : array-like + The raw signal + + levels : int, optional + The signal is discretize into this number of levels. + 255 is equivalent to the implementation in Windap + + thresshold : int, optional + Cycles smaller than this thresshold are ignored + 255/50 is equivalent to the implementation in Windap + + Returns + ------- + ampl : array-like + Peak to peak amplitudes of the half cycles + + mean : array-like + Mean values of the half cycles + + + Examples + -------- + >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + >>> ampl, mean = rainflow_windap(signal) + """ + check_signal(signal) + #type is required by and + signal = signal.astype(np.double) + if np.all(np.isnan(signal)): + return None + offset = np.nanmin(signal) + signal -= offset + if np.nanmax(signal) > 0: + gain = np.nanmax(signal) / levels + signal = signal / gain + signal = np.round(signal).astype(int) + + + # If possible the module is compiled using cython otherwise the python implementation is used + + + #Convert to list of local minima/maxima where difference > thresshold + sig_ext = peak_trough(signal, thresshold) + + + #rainflow count + ampl_mean = pair_range_amplitude_mean(sig_ext) + + ampl_mean = np.array(ampl_mean) + ampl_mean = np.round(ampl_mean / thresshold) * gain * thresshold + ampl_mean[:, 1] += offset + return ampl_mean.T + + + +def rainflow_astm(signal): + """Matlab equivalent rainflow counting + + Calculate the amplitude and mean values of half cycles in signal + + This implemementation is based on the c-implementation by Adam Nieslony found at + the MATLAB Central File Exchange http://www.mathworks.com/matlabcentral/fileexchange/3026 + + Parameters + ---------- + Signal : array-like + The raw signal + + Returns + ------- + ampl : array-like + peak to peak amplitudes of the half cycles (note that the matlab implementation + uses peak amplitude instead of peak to peak) + + mean : array-like + Mean values of the half cycles + + + Examples + -------- + >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + >>> ampl, mean = rainflow_astm(signal) + """ + check_signal(signal) + + # type is reuqired by and + signal = signal.astype(np.double) + + # Import find extremes and rainflow. + # If possible the module is compiled using cython otherwise the python implementation is used + + # Remove points which is not local minimum/maximum + sig_ext = find_extremes(signal) + + # rainflow count + ampl_mean = np.array(rainflowcount(sig_ext)) + + return np.array(ampl_mean).T + + +def eq_load(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=1, rainflow_func=rainflow_windap): + """Equivalent load calculation + + Calculate the equivalent loads for a list of Wohler exponent and number of equivalent loads + + Parameters + ---------- + signals : list of tuples or array_like + - if list of tuples: list must have format [(sig1_weight, sig1),(sig2_weight, sig1),...] where\n + - sigx_weight is the weight of signal x\n + - sigx is signal x\n + - if array_like: The signal + no_bins : int, optional + Number of bins in rainflow count histogram + m : int, float or array-like, optional + Wohler exponent (default is [3, 4, 6, 8, 10, 12]) + neq : int, float or array-like, optional + The equivalent number of load cycles (default is 1, but normally the time duration in seconds is used) + rainflow_func : {rainflow_windap, rainflow_astm}, optional + The rainflow counting function to use (default is rainflow_windap) + + Returns + ------- + eq_loads : array-like + List of lists of equivalent loads for the corresponding equivalent number(s) and Wohler exponents + + Examples + -------- + >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + >>> eq_load(signal, no_bins=50, neq=[1, 17], m=[3, 4, 6], rainflow_func=rainflow_windap) + [[10.311095426959747, 9.5942535021382174, 9.0789213365013932], # neq = 1, m=[3,4,6] + [4.010099657859783, 4.7249689509841746, 5.6618639965313005]], # neq = 17, m=[3,4,6] + + eq_load([(.4, signal), (.6, signal)], no_bins=50, neq=[1, 17], m=[3, 4, 6], rainflow_func=rainflow_windap) + [[10.311095426959747, 9.5942535021382174, 9.0789213365013932], # neq = 1, m=[3,4,6] + [4.010099657859783, 4.7249689509841746, 5.6618639965313005]], # neq = 17, m=[3,4,6] + """ + try: + return eq_load_and_cycles(signals, no_bins, m, neq, rainflow_func)[0] + except TypeError: + return [[np.nan] * len(np.atleast_1d(m))] * len(np.atleast_1d(neq)) + + +def eq_load_and_cycles(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=[10 ** 6, 10 ** 7, 10 ** 8], rainflow_func=rainflow_windap): + """Calculate combined fatigue equivalent load + + Parameters + ---------- + signals : list of tuples or array_like + - if list of tuples: list must have format [(sig1_weight, sig1),(sig2_weight, sig1),...] where\n + - sigx_weight is the weight of signal x\n + - sigx is signal x\n + - if array_like: The signal + no_bins : int, optional + Number of bins for rainflow counting + m : int, float or array-like, optional + Wohler exponent (default is [3, 4, 6, 8, 10, 12]) + neq : int or array-like, optional + Equivalent number, default is [10^6, 10^7, 10^8] + rainflow_func : {rainflow_windap, rainflow_astm}, optional + The rainflow counting function to use (default is rainflow_windap) + + Returns + ------- + eq_loads : array-like + List of lists of equivalent loads for the corresponding equivalent number(s) and Wohler exponents + cycles : array_like + 2d array with shape = (no_ampl_bins, 1) + ampl_bin_mean : array_like + mean amplitude of the bins + ampl_bin_edges + Edges of the amplitude bins + """ + cycles, ampl_bin_mean, ampl_bin_edges, _, _ = cycle_matrix(signals, no_bins, 1, rainflow_func) + if 0: #to be similar to windap + ampl_bin_mean = (ampl_bin_edges[:-1] + ampl_bin_edges[1:]) / 2 + cycles, ampl_bin_mean = cycles.flatten(), ampl_bin_mean.flatten() + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + #DEL = [[( (cycles * ampl_bin_mean ** _m) / _neq) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)] + eq_loads = [[((np.nansum(cycles * ampl_bin_mean ** _m) / _neq) ** (1. / _m)) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)] + return eq_loads, cycles, ampl_bin_mean, ampl_bin_edges + + +def cycle_matrix(signals, ampl_bins=10, mean_bins=10, rainflow_func=rainflow_windap, binStartAt0=True): + """Markow load cycle matrix + + Calculate the Markow load cycle matrix + + Parameters + ---------- + Signals : array-like or list of tuples + - if array-like, the raw signal\n + - if list of tuples, list of (weight, signal), e.g. [(0.1,sig1), (0.8,sig2), (.1,sig3)]\n + ampl_bins : int or array-like, optional + if int, Number of amplitude value bins (default is 10) + if array-like, the bin edges for amplitude + mean_bins : int or array-like, optional + if int, Number of mean value bins (default is 10) + if array-like, the bin edges for mea + rainflow_func : {rainflow_windap, rainflow_astm}, optional + The rainflow counting function to use (default is rainflow_windap) + binStartAt0 : boolean + Start the bins at 0. Otherwise, start at the min of ranges + + Returns + ------- + cycles : ndarray, shape(ampl_bins, mean_bins) + A bi-dimensional histogram of load cycles(full cycles). Amplitudes are\ + histogrammed along the first dimension and mean values are histogrammed along the second dimension. + ampl_bin_mean : ndarray, shape(ampl_bins,) + The average cycle amplitude of the bins + ampl_edges : ndarray, shape(ampl_bins+1,) + The amplitude bin edges + mean_bin_mean : ndarray, shape(ampl_bins,) + The average cycle mean of the bins + mean_edges : ndarray, shape(mean_bins+1,) + The mean bin edges + + Examples + -------- + >>> signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + >>> cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = cycle_matrix(signal) + >>> cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = cycle_matrix([(.4, signal), (.6,signal)]) + """ + + if isinstance(signals[0], tuple): + weights, ampls, means = np.array([(np.zeros_like(ampl)+weight,ampl,mean) for weight, signal in signals for ampl,mean in rainflow_func(signal[:]).T], dtype=np.float64).T + else: + ampls, means = rainflow_func(signals[:]) + weights = np.ones_like(ampls) + if isinstance(ampl_bins, int): + ampl_bins = create_bins(ampls[weights>0], ampl_bins, binStartAt0=binStartAt0) + cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + ampl_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * ampls)[0] + ampl_bin_mean = np.nanmean(ampl_bin_sum / np.where(cycles,cycles,np.nan),1) + mean_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * means)[0] + mean_bin_mean = np.nanmean(mean_bin_sum / np.where(cycles, cycles, np.nan), 1) + cycles = cycles / 2 # to get full cycles + return cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges + + +def cycle_matrix2(signal, nrb_amp, nrb_mean, rainflow_func=rainflow_windap): + """ + Same as wetb.fatigue.cycle_matrix but bin from min_amp to + max_amp instead of 0 to max_amp. + + Parameters + ---------- + + Signal : ndarray(n) + 1D Raw signal array + + nrb_amp : int + Number of bins for the amplitudes + + nrb_mean : int + Number of bins for the means + + rainflow_func : {rainflow_windap, rainflow_astm}, optional + The rainflow counting function to use (default is rainflow_windap) + + Returns + ------- + + cycles : ndarray, shape(ampl_bins, mean_bins) + A bi-dimensional histogram of load cycles(full cycles). Amplitudes are\ + histogrammed along the first dimension and mean values are histogrammed + along the second dimension. + + ampl_edges : ndarray, shape(no_bins+1,n) + The amplitude bin edges + + mean_edges : ndarray, shape(no_bins+1,n) + The mean bin edges + + """ + bins = [nrb_amp, nrb_mean] + ampls, means = rainflow_func(signal) + weights = np.ones_like(ampls) + cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, bins, + weights=weights) + cycles = cycles / 2 # to get full cycles + + return cycles, ampl_edges, mean_edges + +# --------------------------------------------------------------------------------} +# --- Rainflowcount_astm.py +# --------------------------------------------------------------------------------{ +''' +Created on 27/02/2013 + +@author: mmpe + +How to use: + +import_cython("cy_rainflowcount",'cy_rainflowcount.py','') +from cy_rainflowcount import find_extremes,rainflow + +ext = find_extremes(np.array([-2,0,1,0,-3,0,5,0,-1,0,3,0,-4,0,4,0,-2]).astype(np.double)) +print rainflow(ext) +''' +def find_extremes(signal): #cpdef find_extremes(np.ndarray[double,ndim=1] signal): + """return indexes of local minima and maxima plus first and last element of signal""" + + #cdef int pi, i + # sign of gradient + sign_grad = np.int8(np.sign(np.diff(signal))) + + # remove plateaus(sign_grad==0) by sign_grad[plateau_index]=sign_grad[plateau_index-1] + plateau_indexes, = np.where(sign_grad == 0) + if len(plateau_indexes) > 0 and plateau_indexes[0] == 0: + # first element is a plateau + if len(plateau_indexes) == len(sign_grad): + # All values are equal to crossing level! + return np.array([0]) + + # set first element = first element which is not a plateau and delete plateau index + i = 0 + while sign_grad[i] == 0: + i += 1 + sign_grad[0] = sign_grad[i] + + plateau_indexes = np.delete(plateau_indexes, 0) + + for pi in plateau_indexes.tolist(): + sign_grad[pi] = sign_grad[pi - 1] + + extremes, = np.where(np.r_[1, (sign_grad[1:] * sign_grad[:-1] < 0), 1]) + + return signal[extremes] + + +def rainflowcount(sig): #cpdef rainflowcount(np.ndarray[double,ndim=1] sig): + """Cython compilable rain ampl_mean count without time analysis + + + This implemementation is based on the c-implementation by Adam Nieslony found at + the MATLAB Central File Exchange http://www.mathworks.com/matlabcentral/fileexchange/3026 + + References + ---------- + Adam Nieslony, "Determination of fragments of multiaxial service loading + strongly influencing the fatigue of machine components," + Mechanical Systems and Signal Processing 23, no. 8 (2009): 2712-2721. + + and is based on the following standard: + ASTM E 1049-85 (Reapproved 1997), Standard practices for cycle counting in + fatigue analysis, in: Annual Book of ASTM Standards, vol. 03.01, ASTM, + Philadelphia, 1999, pp. 710-718. + + Copyright (c) 1999-2002 by Adam Nieslony + + Ported to Cython compilable Python by Mads M Pedersen + In addition peak amplitude is changed to peak to peak amplitude + + + """ + + #cdef int sig_ptr, index + #cdef double ampl + a = [] + sig_ptr = 0 + ampl_mean = [] + for _ in range(len(sig)): + a.append(sig[sig_ptr]) + sig_ptr += 1 + while len(a) > 2 and abs(a[-3] - a[-2]) <= abs(a[-2] - a[-1]): + ampl = abs(a[-3] - a[-2]) + mean = (a[-3] + a[-2]) / 2; + if len(a) == 3: + del a[0] + if ampl > 0: + ampl_mean.append((ampl, mean)) + elif len(a) > 3: + del a[-3:-1] + if ampl > 0: + ampl_mean.append((ampl, mean)) + ampl_mean.append((ampl, mean)) + for index in range(len(a) - 1): + ampl = abs(a[index] - a[index + 1]) + mean = (a[index] + a[index + 1]) / 2; + if ampl > 0: + ampl_mean.append((ampl, mean)) + return ampl_mean + +# --------------------------------------------------------------------------------} +# --- Peak_trough.py +# --------------------------------------------------------------------------------{ +# @cython.locals(BEGIN=cython.int, MINZO=cython.int, MAXZO=cython.int, ENDZO=cython.int, \ +# R=cython.int, L=cython.int, i=cython.int, p=cython.int, f=cython.int) +def peak_trough(x, R): #cpdef np.ndarray[long,ndim=1] peak_trough(np.ndarray[long,ndim=1] x, int R): + """ + Returns list of local maxima/minima. + + x: 1-dimensional numpy array containing signal + R: Thresshold (minimum difference between succeeding min and max + + This routine is implemented directly as described in + "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A + """ + + BEGIN = 0 + MINZO = 1 + MAXZO = 2 + ENDZO = 3 + S = np.zeros(x.shape[0] + 1, dtype=int) + + L = x.shape[0] + goto = BEGIN + + while 1: + if goto == BEGIN: + trough = x[0] + peak = x[0] + + i = 0 + p = 1 + f = 0 + while goto == BEGIN: + i += 1 + if i == L: + goto = ENDZO + continue + else: + if x[i] > peak: + peak = x[i] + if peak - trough >= R: + S[p] = trough + goto = MAXZO + continue + elif x[i] < trough: + trough = x[i] + if peak - trough >= R: + S[p] = peak + goto = MINZO + continue + + elif goto == MINZO: + f = -1 + + while goto == MINZO: + i += 1 + if i == L: + goto = ENDZO + continue + else: + if x[i] < trough: + trough = x[i] + else: + if x[i] - trough >= R: + p += 1 + S[p] = trough + peak = x[i] + goto = MAXZO + continue + elif goto == MAXZO: + f = 1 + while goto == MAXZO: + i += 1 + if i == L: + goto = ENDZO + continue + else: + if x[i] > peak: + peak = x[i] + else: + if peak - x[i] >= R: + p += 1 + S[p] = peak + trough = x[i] + goto = MINZO + continue + elif goto == ENDZO: + + n = p + 1 + if abs(f) == 1: + if f == 1: + S[n] = peak + else: + S[n] = trough + else: + S[n] = (trough + peak) / 2 + S = S[1:n + 1] + return S + + +# --------------------------------------------------------------------------------} +# --- pair_range.py +# --------------------------------------------------------------------------------{ +# @cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int) +def pair_range_amplitude(x): # cpdef pair_range(np.ndarray[long,ndim=1] x): + """ + Returns a list of half-cycle-amplitudes + x: Peak-Trough sequence (integer list of local minima and maxima) + + This routine is implemented according to + "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A + except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix + """ + + x = x - np.min(x) + k = np.max(x) + n = x.shape[0] + S = np.zeros(n + 1) + + #A = np.zeros(k+1) + flow = [] + S[1] = x[0] + ptr = 1 + p = 1 + q = 1 + f = 0 + # phase 1 + while True: + p += 1 + q += 1 + + # read + S[p] = x[ptr] + ptr += 1 + + if q == n: + f = 1 + while p >= 4: + if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) \ + or\ + (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]): + ampl = abs(S[p - 2] - S[p - 1]) + # A[ampl]+=2 #Two half cycles + flow.append(ampl) + flow.append(ampl) + S[p - 2] = S[p] + + p -= 2 + else: + break + + if f == 0: + pass + else: + break + # phase 2 + q = 0 + while True: + q += 1 + if p == q: + break + else: + ampl = abs(S[q + 1] - S[q]) + # A[ampl]+=1 + flow.append(ampl) + return flow + + + + + +# @cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int) +def pair_range_from_to(x): # cpdef pair_range(np.ndarray[long,ndim=1] x): + """ + Returns a list of half-cycle-amplitudes + x: Peak-Trough sequence (integer list of local minima and maxima) + + This routine is implemented according to + "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A + except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix + """ + + x = x - np.min(x) + k = np.max(x) + n = x.shape[0] + S = np.zeros(n + 1) + + A = np.zeros((k + 1, k + 1)) + S[1] = x[0] + ptr = 1 + p = 1 + q = 1 + f = 0 + # phase 1 + while True: + p += 1 + q += 1 + + # read + S[p] = x[ptr] + ptr += 1 + + if q == n: + f = 1 + while p >= 4: + #print S[p - 3:p + 1] + #print S[p - 2], ">", S[p - 3], ", ", S[p - 1], ">=", S[p - 3], ", ", S[p], ">=", S[p - 2], (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) + #print S[p - 2], "<", S[p - 3], ", ", S[p - 1], "<=", S[p - 3], ", ", S[p], "<=", S[p - 2], (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]) + #print (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) or (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]) + if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) or \ + (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]): + A[S[p - 2], S[p - 1]] += 1 + A[S[p - 1], S[p - 2]] += 1 + S[p - 2] = S[p] + p -= 2 + else: + break + + if f == 1: + break # q==n + # phase 2 + q = 0 + while True: + q += 1 + if p == q: + break + else: + #print S[q], "to", S[q + 1] + A[S[q], S[q + 1]] += 1 + return A + +# @cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int) +def pair_range_amplitude_mean(x): # cpdef pair_range(np.ndarray[long,ndim=1] x): + """ + Returns a list of half-cycle-amplitudes + x: Peak-Trough sequence (integer list of local minima and maxima) + + This routine is implemented according to + "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A + except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix + """ + + x = x - np.min(x) + k = np.max(x) + n = x.shape[0] + S = np.zeros(n + 1) + ampl_mean = [] + A = np.zeros((k + 1, k + 1)) + S[1] = x[0] + ptr = 1 + p = 1 + q = 1 + f = 0 + # phase 1 + while True: + p += 1 + q += 1 + + # read + S[p] = x[ptr] + ptr += 1 + + if q == n: + f = 1 + while p >= 4: + if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) \ + or\ + (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]): + # Extract two intermediate half cycles + ampl = abs(S[p - 2] - S[p - 1]) + mean = (S[p - 2] + S[p - 1]) / 2 + ampl_mean.append((ampl, mean)) + ampl_mean.append((ampl, mean)) + + S[p - 2] = S[p] + + p -= 2 + else: + break + + if f == 0: + pass + else: + break + # phase 2 + q = 0 + while True: + q += 1 + if p == q: + break + else: + ampl = abs(S[q + 1] - S[q]) + mean = (S[q + 1] + S[q]) / 2 + ampl_mean.append((ampl, mean)) + return ampl_mean + + +rainflow_func_dict = {'rainflow_windap':rainflow_windap, 'rainflow_astm':rainflow_astm} + + +# --------------------------------------------------------------------------------} +# --- Unittests +# --------------------------------------------------------------------------------{ +import unittest + +class TestFatigue(unittest.TestCase): + + def test_leq_1hz(self): + """Simple test of wetb.fatigue.eq_load using a sine + signal. + """ + amplitude = 1 + m = 1 + point_per_deg = 100 + + for amplitude in [1,2,3]: + peak2peak = amplitude * 2 + # sine signal with 10 periods (20 peaks) + nr_periods = 10 + time = np.linspace(0, nr_periods*2*np.pi, point_per_deg*180) + neq = time[-1] + # mean value of the signal shouldn't matter + signal = amplitude * np.sin(time) + 5 + r_eq_1hz = eq_load(signal, no_bins=1, m=m, neq=neq)[0] + r_eq_1hz_expected = 2*((nr_periods*amplitude**m)/neq)**(1/m) + np.testing.assert_allclose(r_eq_1hz, r_eq_1hz_expected) + + # sine signal with 20 periods (40 peaks) + nr_periods = 20 + time = np.linspace(0, nr_periods*2*np.pi, point_per_deg*180) + neq = time[-1] + # mean value of the signal shouldn't matter + signal = amplitude * np.sin(time) + 9 + r_eq_1hz2 = eq_load(signal, no_bins=1, m=m, neq=neq)[0] + r_eq_1hz_expected2 = 2*((nr_periods*amplitude**m)/neq)**(1/m) + np.testing.assert_allclose(r_eq_1hz2, r_eq_1hz_expected2) + + # 1hz equivalent should be independent of the length of the signal + np.testing.assert_allclose(r_eq_1hz, r_eq_1hz2) + + def test_rainflow_combi(self): + # Signal with two frequencies and amplitudes + amplitude = 1 + # peak2peak = amplitude * 2 + m = 1 + point_per_deg = 100 + + nr_periods = 10 + time = np.linspace(0, nr_periods*2*np.pi, point_per_deg*180) + + signal = (amplitude*np.sin(time)) + 5 + (amplitude*0.2*np.cos(5*time)) + cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges = \ + cycle_matrix(signal, ampl_bins=10, mean_bins=5) + + cycles.sum() + + + + def test_astm1(self): + + signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + + ampl, mean = rainflow_astm(signal) + np.testing.assert_array_equal(np.histogram2d(ampl, mean, [6, 4])[0], np.array([[ 0., 1., 0., 0.], + [ 1., 0., 0., 2.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 1.], + [ 0., 0., 0., 0.], + [ 0., 0., 1., 2.]])) + + def test_windap1(self): + signal = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + ampl, mean = rainflow_windap(signal, 18, 2) + np.testing.assert_array_equal(np.histogram2d(ampl, mean, [6, 4])[0], np.array([[ 0., 0., 1., 0.], + [ 1., 0., 0., 2.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 1.], + [ 0., 0., 0., 0.], + [ 0., 0., 2., 1.]])) + + def test_eq_load_basic(self): + import numpy.testing + signal1 = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0]) + try: + M1=eq_load(signal1, no_bins=50, neq=[1, 17], m=[3, 4, 6], rainflow_func=rainflow_windap) + doTest=True + except FloatingPointError as e: + doTest=False + print('>>> Floating point error') + M1_ref=np.array([[10.348414123746581, 9.635653414943068, 9.122399471334054], [4.024613313976801, 4.745357541147315, 5.68897815218057]]) + #M1_ref=np.array([[10.311095426959747, 9.5942535021382174, 9.0789213365013932],[4.010099657859783, 4.7249689509841746, 5.6618639965313005]]) + numpy.testing.assert_almost_equal(M1,M1_ref,decimal=5) + #signal2 = signal1 * 1.1 + # print (eq_load(signal1, no_bins=50, neq=17, rainflow_func=rainflow_windap)) + # print (eq_load(signal1, no_bins=50, neq=17, rainflow_func=rainflow_astm)) + # # equivalent load for default wohler slopes + # # Cycle matrix with 4 amplitude bins and 4 mean value bins + # print (cycle_matrix(signal1, 4, 4, rainflow_func=rainflow_windap)) + # print (cycle_matrix(signal1, 4, 4, rainflow_func=rainflow_astm)) + # # Cycle matrix where signal1 and signal2 contributes with 50% each + # print (cycle_matrix([(.5, signal1), (.5, signal2)], 4, 8, rainflow_func=rainflow_astm)) + + + def test_equivalent_load(self): + """ Higher level interface """ + try: + import fatpack + hasFatpack=True + except: + hasFatpack=False + dt = 0.1 + f0 = 1 ; + A = 5 ; + t=np.arange(0,10,dt); + y=A*np.sin(2*np.pi*f0*t) + + Leq = equivalent_load(t, y, m=10, bins=100, method='rainflow_windap') + np.testing.assert_almost_equal(Leq, 9.4714702, 3) + + Leq = equivalent_load(t, y, m=1, bins=100, method='rainflow_windap') + np.testing.assert_almost_equal(Leq, 9.4625320, 3) + + Leq = equivalent_load(t, y, m=4, bins=10, method='rainflow_windap') + np.testing.assert_almost_equal(Leq, 9.420937, 3) + + + if hasFatpack: + Leq = equivalent_load(t, y, m=4, bins=10, method='fatpack', binStartAt0=False, meanBin=False) + np.testing.assert_almost_equal(Leq, 9.584617089, 3) + + Leq = equivalent_load(t, y, m=4, bins=1, method='fatpack', binStartAt0=False, meanBin=False) + np.testing.assert_almost_equal(Leq, 9.534491302, 3) + + + + def test_equivalent_load_sines(self): + # Check analytical formulae for sine of various frequencies + # See welib.tools.examples.Example_Fatigue.py + try: + import fatpack + hasFatpack=True + except: + hasFatpack=False + + # --- Dependency on frequency + m = 2 # Wohler slope + A = 3 # Amplitude + nT = 100 # Number of periods + nPerT = 100 # Number of points per period + Teq = 1 # Equivalent period [s] + nBins = 10 # Number of bins + + vf =np.linspace(0.1,10,21) + vT = 1/vf + T_max=np.max(vT*nT) + vomega =vf*2*np.pi + Leq1 = np.zeros_like(vomega) + Leq2 = np.zeros_like(vomega) + Leq_ref = np.zeros_like(vomega) + for it, (T,omega) in enumerate(zip(vT,vomega)): + # --- Option 1 - Same number of periods + time = np.linspace(0, nT*T, nPerT*nT+1) + signal = A * np.sin(omega*time) # Mean does not matter + T_all=time[-1] + Leq1[it] = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='rainflow_windap') + if hasFatpack: + Leq2[it] = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=False) + Leq_ref = 2*A*(vf*Teq)**(1/m) + np.testing.assert_array_almost_equal( Leq1/A, Leq_ref/A, 2) + if hasFatpack: + np.testing.assert_array_almost_equal(Leq2/A, Leq_ref/A, 2) + #import matplotlib.pyplot as plt + #fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + #fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + #ax.plot(vf, Leq_ref/A, 'kd' , label ='Theory') + #ax.plot(vf, Leq1 /A, 'o' , label ='Windap m={}'.format(m)) + #if hasFatpack: + # ax.plot(vf, Leq2/A, 'k.' , label ='Fatpack') + #ax.legend() + #plt.show() + + def test_equivalent_load_sines_sum(self): + # --- Sum of two sinusoids + try: + import fatpack + hasFatpack=True + except: + hasFatpack=False + bs0 = True # Bin Start at 0 + m = 2 # Wohler slope + nPerT = 100 # Number of points per period + Teq = 1 # Equivalent period [s] + nBins = 10 # Number of bins + nT1 = 10 # Number of periods + nT2 = 20 # Number of periods + T1 = 10 + T2 = 5 + A1 = 3 # Amplitude + A2 = 5 # Amplitude + # --- Signals + time1 = np.linspace(0, nT1*T1, nPerT*nT1+1) + time2 = np.linspace(0, nT2*T2, nPerT*nT2+1) + signal1 = A1 * np.sin(2*np.pi/T1*time1) + signal2 = A2 * np.sin(2*np.pi/T2*time2) + # --- Individual Leq + #print('----------------- SIGNAL 1') + DEL1 = (2*A1)**m * nT1/time1[-1] + Leq_th = (DEL1)**(1/m) + Leq1 = equivalent_load(time1, signal1, m=m, Teq=Teq, bins=nBins, method='rainflow_windap', binStartAt0=bs0) + if hasFatpack: + Leq2 = equivalent_load(time1, signal1, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=bs0) + np.testing.assert_array_almost_equal(Leq2, Leq_th, 3) + np.testing.assert_array_almost_equal(Leq1, Leq_th, 1) + #print('>>> Leq1 ',Leq1) + #print('>>> Leq2 ',Leq2) + #print('>>> Leq TH ',Leq_th) + #print('----------------- SIGNAL 2') + DEL2 = (2*A2)**m * nT2/time2[-1] + Leq_th = (DEL2)**(1/m) + Leq1 = equivalent_load(time2, signal2, m=m, Teq=Teq, bins=nBins, method='rainflow_windap', binStartAt0=bs0) + if hasFatpack: + Leq2 = equivalent_load(time2, signal2, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=bs0) + np.testing.assert_array_almost_equal(Leq2, Leq_th, 3) + np.testing.assert_array_almost_equal(Leq1, Leq_th, 1) + #print('>>> Leq1 ',Leq1) + #print('>>> Leq2 ',Leq2) + #print('>>> Leq TH ',Leq_th) + # --- Concatenation + #print('----------------- CONCATENATION') + signal = np.concatenate((signal1, signal2)) + time = np.concatenate((time1, time2+time1[-1])) + T_all=time[-1] + DEL1 = (2*A1)**m * nT1/T_all + DEL2 = (2*A2)**m * nT2/T_all + Leq_th = (DEL1+DEL2)**(1/m) + Leq1 = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='rainflow_windap', binStartAt0=bs0) + if hasFatpack: + Leq2 = equivalent_load(time, signal, m=m, Teq=Teq, bins=nBins, method='fatpack', binStartAt0=bs0) + np.testing.assert_array_almost_equal(Leq2, Leq_th, 1) + np.testing.assert_array_almost_equal(Leq1, Leq_th, 1) + #print('>>> Leq1 ',Leq1) + #print('>>> Leq2 ',Leq2) + #print('>>> Leq TH ',Leq_th) + + + + def test_eqload_cornercases(self): + try: + import fatpack + hasFatpack=True + except: + hasFatpack=False + # Signal of length 1 + time=[0]; signal=[0] + Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap') + np.testing.assert_equal(Leq, np.nan) + + # Datetime + time= [np.datetime64('2023-10-01'), np.datetime64('2023-10-02')] + signal= [0,1] + Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap') + np.testing.assert_equal(Leq, np.nan) + + # Constant signal + time =[0,1] + signal =[1,1] + Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='rainflow_windap') + np.testing.assert_equal(Leq, np.nan) + if hasFatpack: + Leq= equivalent_load(time, signal, m=3, Teq=1, bins=100, method='fatpack') + np.testing.assert_equal(Leq, np.nan) + + + +if __name__ == '__main__': + unittest.main() + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py new file mode 100644 index 0000000000..5da1833d1d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/pandalib.py @@ -0,0 +1,209 @@ +import pandas as pd +import numpy as np +import re + + +def pd_interp1(x_new, xLabel, df): + """ Interpolate a panda dataframe based on a set of new value + This function assumes that the dataframe is a simple 2d-table + """ + from pyFAST.tools.signal_analysis import multiInterp + x_old = df[xLabel].values + data_new=multiInterp(x_new, x_old, df.values.T) + return pd.DataFrame(data=data_new.T, columns=df.columns.values) + #nRow,nCol = df.shape + #nRow = len(xnew) + #data = np.zeros((nRow,nCol)) + #xref =df[xLabel].values.astype(float) + #for col,i in zip(df.columns.values,range(nCol)): + # yref = df[col].values + # if yref.dtype!=float: + # raise Exception('Wrong type for yref, consider using astype(float)') + # data[:,i] = np.interp(xnew, xref, yref) + #return pd.DataFrame(data=data, columns = df.columns) + +def create_dummy_dataframe(size): + return pd.DataFrame(data={'col1': np.linspace(0,1,size), 'col2': np.random.normal(0,1,size)}) + + + +def remap_df(df, ColMap, bColKeepNewOnly=False, inPlace=False, dataDict=None, verbose=False): + """ + NOTE: see welib.fast.postpro + + Add/rename columns of a dataframe, potentially perform operations between columns + + dataDict: dictionary of data to be made available as "variable" in the column mapping + 'key' (new) : value (old) + + Example: + + ColumnMap={ + 'WS_[m/s]' : '{Wind1VelX_[m/s]}' , # create a new column from existing one + 'RtTSR_[-]' : '{RtTSR_[-]} * 2 + {RtAeroCt_[-]}' , # change value of column + 'RotSpeed_[rad/s]' : '{RotSpeed_[rpm]} * 2*np.pi/60 ', # new column [rpm] -> [rad/s] + 'q_p' : ['Q_P_[rad]', '{PtfmSurge_[deg]}*np.pi/180'] # List of possible matches + } + # Read + df = weio.read('FASTOutBin.outb').toDataFrame() + # Change columns based on formulae, potentially adding new columns + df = fastlib.remap_df(df, ColumnMap, inplace=True) + + """ + # Insert dataDict into namespace + if dataDict is not None: + for k,v in dataDict.items(): + exec('{:s} = dataDict["{:s}"]'.format(k,k)) + + + if not inPlace: + df=df.copy() + ColMapMiss=[] + ColNew=[] + RenameMap=dict() + # Loop for expressions + for k0,v in ColMap.items(): + k=k0.strip() + if type(v) is not list: + values = [v] + else: + values = v + Found = False + for v in values: + v=v.strip() + if Found: + break # We avoid replacing twice + if v.find('{')>=0: + # --- This is an advanced substitution using formulae + search_results = re.finditer(r'\{.*?\}', v) + expr=v + if verbose: + print('Attempt to insert column {:15s} with expr {}'.format(k,v)) + # For more advanced operations, we use an eval + bFail=False + for item in search_results: + col=item.group(0)[1:-1] + if col not in df.columns: + ColMapMiss.append(col) + bFail=True + expr=expr.replace(item.group(0),'df[\''+col+'\']') + #print(k0, '=', expr) + if not bFail: + df[k]=eval(expr) + ColNew.append(k) + else: + print('[WARN] Column not present in dataframe, cannot evaluate: ',expr) + else: + #print(k0,'=',v) + if v not in df.columns: + ColMapMiss.append(v) + if verbose: + print('[WARN] Column not present in dataframe: ',v) + else: + if k in RenameMap.keys(): + print('[WARN] Not renaming {} with {} as the key is already present'.format(k,v)) + else: + RenameMap[k]=v + Found=True + + # Applying renaming only now so that expressions may be applied in any order + for k,v in RenameMap.items(): + if verbose: + print('Renaming column {:15s} > {}'.format(v,k)) + k=k.strip() + iCol = list(df.columns).index(v) + df.columns.values[iCol]=k + ColNew.append(k) + df.columns = df.columns.values # Hack to ensure columns are updated + + if len(ColMapMiss)>0: + print('[FAIL] The following columns were not found in the dataframe:',ColMapMiss) + #print('Available columns are:',df.columns.values) + + if bColKeepNewOnly: + ColNew = [c for c,_ in ColMap.items() if c in ColNew]# Making sure we respec order from user + ColKeepSafe = [c for c in ColNew if c in df.columns.values] + ColKeepMiss = [c for c in ColNew if c not in df.columns.values] + if len(ColKeepMiss)>0: + print('[WARN] Signals missing and omitted for ColKeep:\n '+'\n '.join(ColKeepMiss)) + df=df[ColKeepSafe] + return df + +def changeUnits(df, flavor='SI', inPlace=True): + """ Change units of a dataframe + + # TODO harmonize with dfToSIunits in welib.fast.tools.lin.py ! + """ + def splitunit(s): + iu=s.rfind('[') + if iu>0: + return s[:iu], s[iu+1:].replace(']','') + else: + return s, '' + def change_units_to_WE(s, c): + """ + Change units to wind energy units + s: channel name (string) containing units, typically 'speed_[rad/s]' + c: channel (array) + """ + svar, u = splitunit(s) + u=u.lower() + scalings = {} + # OLD = NEW + scalings['rad/s'] = (30/np.pi,'rpm') # TODO decide + scalings['rad' ] = (180/np.pi,'deg') + scalings['n'] = (1e-3, 'kN') + scalings['nm'] = (1e-3, 'kNm') + scalings['n-m'] = (1e-3, 'kNm') + scalings['n*m'] = (1e-3, 'kNm') + scalings['w'] = (1e-3, 'kW') + if u in scalings.keys(): + scale, new_unit = scalings[u] + s = svar+'['+new_unit+']' + c *= scale + return s, c + + def change_units_to_SI(s, c): + """ + Change units to SI units + TODO, a lot more units conversion needed...will add them as we go + s: channel name (string) containing units, typically 'speed_[rad/s]' + c: channel (array) + """ + svar, u = splitunit(s) + u=u.lower() + scalings = {} + # OLD = NEW + scalings['rpm'] = (np.pi/30,'rad/s') + scalings['rad' ] = (180/np.pi,'deg') + scalings['deg/s' ] = (np.pi/180,'rad/s') + scalings['kn'] = (1e3, 'N') + scalings['knm'] = (1e3, 'Nm') + scalings['kn-m'] = (1e3, 'Nm') + scalings['kn*m'] = (1e3, 'Nm') + scalings['kw'] = (1e3, 'W') + if u in scalings.keys(): + scale, new_unit = scalings[u] + s = svar+'['+new_unit+']' + c *= scale + return s, c + + if not inPlace: + raise NotImplementedError() + + if flavor == 'WE': + cols = [] + for i, colname in enumerate(df.columns): + colname_new, df.iloc[:,i] = change_units_to_WE(colname, df.iloc[:,i]) + cols.append(colname_new) + df.columns = cols + elif flavor == 'SI': + cols = [] + for i, colname in enumerate(df.columns): + colname_new, df.iloc[:,i] = change_units_to_SI(colname, df.iloc[:,i]) + cols.append(colname_new) + df.columns = cols + else: + raise NotImplementedError(flavor) + return df + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py new file mode 100644 index 0000000000..1cce7de8bb --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/signal_analysis.py @@ -0,0 +1,893 @@ +""" +Signal analysis tools. +NOTE: naming this module "signal.py" can sometimes create conflict with numpy + +""" +import numpy as np +from numpy.random import rand +import pandas as pd + + +# --- List of available filters +FILTERS=[ + {'name':'Moving average' , 'param':100 , 'paramName':'Window Size' , 'paramRange':[1 , 100000] , 'increment':1 , 'digits':0} , + {'name':'Low pass 1st order' , 'param':1.0, 'paramName':'Cutoff Freq.' , 'paramRange':[0.0001 , 100000] , 'increment':0.1, 'digits':4} , + {'name':'High pass 1st order' , 'param':0.1 , 'paramName':'Cutoff Freq.' , 'paramRange':[0.0001 , 100000] , 'increment':0.1, 'digits':4} , +] + +SAMPLERS=[ + {'name':'Replace', 'param':[], 'paramName':'New x'}, + {'name':'Insert', 'param':[], 'paramName':'Insert list'}, + {'name':'Remove', 'param':[], 'paramName':'Remove list'}, + {'name':'Every n', 'param':2 , 'paramName':'n'}, + {'name':'Linspace', 'param':[0,1,100] , 'paramName':'xmin, xmax, n'}, + {'name':'Time-based', 'param':0.01 , 'paramName':'Sample time (s)'}, + {'name':'Delta x', 'param':[0.1,np.nan,np.nan], 'paramName':'dx, xmin, xmax'}, +] + + + +def reject_outliers(y, x=None, m = 2., replaceNaN=True): + """ Reject outliers: + If replaceNaN is true: they are replaced by NaN + Otherwise they are removed + """ + if m==0: + # No rejection... + pass + else: + dd = np.abs(y - np.nanmedian(y)) + mdev = np.nanmedian(dd) + if mdev: + ss = dd/mdev + b=ss=0, j< len(xp)-1) + jOK = j[bOK] + dd[bOK] = (x[bOK] - xp[jOK]) / (xp[jOK + 1] - xp[jOK]) + jBef=j + jAft=j+1 + # + bLower =j<0 + bUpper =j>=len(xp)-1 + # Use first and last values for anything beyond xp + jAft[bUpper] = len(xp)-1 + jBef[bUpper] = len(xp)-1 + jAft[bLower] = 0 + jBef[bLower] = 0 + if extrap=='bounded': + #OK + pass + elif extrap=='nan': + # Set values to nan if out of bounds + bBeyond= np.logical_or(xnp.max(xp)) + dd[bBeyond] = np.nan + else: + raise NotImplementedError() + + return (1 - dd) * fp[:,jBef] + fp[:,jAft] * dd + +def interpArray(x, xp, fp, extrap='bounded'): + """ + Interpolate all the columns of a matrix `fp` based on one new value `x` + INPUTS: + - x : scalar new values + - xp : array ( np ), old values + - fp : array ( nval, np), matrix values to be interpolated + """ + # Sanity + xp = np.asarray(xp) + assert fp.shape[1]==len(xp), 'Second dimension of fp should have the same length as xp' + + if fp.shape[1]==0: + raise Exception('Second dimension of fp should be >0') + + j = np.searchsorted(xp, x) - 1 + if j<0: + # Before bounds + if extrap=='bounded': + return fp[:,0] + elif extrap=='nan': + return fp[:,0]*np.nan + else: + raise NotImplementedError() + + elif j>=len(xp)-1: + # After bounds + if extrap=='bounded': + return fp[:,-1] + elif extrap=='nan': + return fp[:,-1]*np.nan + else: + raise NotImplementedError() + else: + # Normal case, within bounds + dd = (x- xp[j]) / (xp[j+1] - xp[j]) + return (1 - dd) * fp[:,j] + fp[:,j+1] * dd + + +def interpDF(x_new, xLabel, df, extrap='bounded'): + """ Resample a dataframe using linear interpolation""" + x_old = df[xLabel].values + #x_new=np.sort(x_new) + # --- Method 1 (pandas) + #df_new = df_old.copy() + #df_new = df_new.set_index(x_old) + #df_new = df_new.reindex(df_new.index | x_new) + #df_new = df_new.interpolate().loc[x_new] + #df_new = df_new.reset_index() + # --- Method 2 interp storing dx + data_new=multiInterp(x_new, x_old, df.values.T, extrap=extrap) + df_new = pd.DataFrame(data=data_new.T, columns=df.columns.values) + df_new[xLabel] = x_new # Just in case this value was replaced by nan.. + return df_new + + +def resample_interp(x_old, x_new, y_old=None, df_old=None): + #x_new=np.sort(x_new) + if df_old is not None: + # --- Method 1 (pandas) + #df_new = df_old.copy() + #df_new = df_new.set_index(x_old) + #df_new = df_new.reindex(df_new.index | x_new) + #df_new = df_new.interpolate().loc[x_new] + #df_new = df_new.reset_index() + # --- Method 2 interp storing dx + data_new=multiInterp(x_new, x_old, df_old.values.T) + df_new = pd.DataFrame(data=data_new.T, columns=df_old.columns.values) + return df_new + + if y_old is not None: + return np.interp(x_new, x_old, y_old) + + +def applySamplerDF(df_old, x_col, sampDict): + x_old=df_old[x_col].values + x_new, df_new =applySampler(x_old, y_old=None, sampDict=sampDict, df_old=df_old) + df_new[x_col]=x_new + return df_new + + +def applySampler(x_old, y_old, sampDict, df_old=None): + + param = np.asarray(sampDict['param']).ravel() + + if sampDict['name']=='Replace': + if len(param)==0: + raise Exception('Error: At least one value is required to resample the x values with') + x_new = param + return x_new, resample_interp(x_old, x_new, y_old, df_old) + + elif sampDict['name']=='Insert': + if len(param)==0: + raise Exception('Error: provide a list of values to insert') + x_new = np.sort(np.concatenate((x_old.ravel(),param))) + return x_new, resample_interp(x_old, x_new, y_old, df_old) + + elif sampDict['name']=='Remove': + I=[] + if len(param)==0: + raise Exception('Error: provide a list of values to remove') + for d in param: + Ifound= np.where(np.abs(x_old-d)<1e-3)[0] + if len(Ifound)>0: + I+=list(Ifound.ravel()) + x_new=np.delete(x_old,I) + return x_new, resample_interp(x_old, x_new, y_old, df_old) + + elif sampDict['name']=='Delta x': + if len(param)==0: + raise Exception('Error: provide value for dx') + dx = param[0] + if dx==0: + raise Exception('Error: `dx` cannot be 0') + if len(param)==1: + # NOTE: not using min/max if data loops (like airfoil) + xmin = np.nanmin(x_old) + xmax = np.nanmax(x_old) + dx/2 + elif len(param)==3: + xmin = param[1] + xmax = param[2] + if np.isnan(xmin): + xmin = np.nanmin(x_old) + if np.isnan(xmax): + xmax = np.nanmax(x_old) + dx/2 + else: + raise Exception('Error: the sampling parameters should be a list of three values `dx, xmin, xmax`') + x_new = np.arange(xmin, xmax, dx) + if len(x_new)==0: + xmax = xmin+dx*1.1 # NOTE: we do it like this to account for negative dx + x_new = np.arange(xmin, xmax, dx) + param = [dx, xmin, xmax] + return x_new, resample_interp(x_old, x_new, y_old, df_old) + + elif sampDict['name']=='Linspace': + if len(param)!=3: + raise Exception('Error: Provide three parameters for linspace: xmin, xmax, n') + xmin = float(param[0]) + xmax = float(param[1]) + n = int(param[2]) + x_new = np.linspace(xmin, xmax, n) + return x_new, resample_interp(x_old, x_new, y_old, df_old) + + elif sampDict['name']=='Every n': + if len(param)==0: + raise Exception('Error: provide value for n') + n = int(param[0]) + if n==0: + raise Exception('Error: |n| should be at least 1') + + x_new=x_old[::n] + if df_old is not None: + return x_new, (df_old.copy()).iloc[::n,:] + if y_old is not None: + return x_new, y_old[::n] + + elif sampDict['name'] == 'Time-based': + if len(param) == 0: + raise Exception('Error: provide value for new sampling time') + sample_time = float(param[0]) + if sample_time <= 0: + raise Exception('Error: sample time must be positive') + + time_index = pd.TimedeltaIndex(x_old, unit="S") + x_new = pd.Series(x_old, index=time_index).resample("{:f}S".format(sample_time)).mean().interpolate().values + + if df_old is not None: + df_new = df_old.set_index(time_index, inplace=False).resample("{:f}S".format(sample_time)).mean() + df_new = df_new.interpolate().reset_index(drop=True) + return x_new, df_new + if y_old is not None: + y_new = pd.Series(y_old, index=time_index).resample("{:f}S".format(sample_time)).mean() + y_new = y_new.interpolate().values + return x_new, y_new + + else: + raise NotImplementedError('{}'.format(sampDict)) + pass + +# --------------------------------------------------------------------------------} +# --- Filters +# --------------------------------------------------------------------------------{ +# def moving_average(x, w): +# #t_new = np.arange(0,Tmax,dt) +# #nt = len(t_new) +# #nw=400 +# #u_new = moving_average(np.floor(np.linspace(0,3,nt+nw-1))*3+3.5, nw) +# return np.convolve(x, np.ones(w), 'valid') / w +# def moving_average(x,N,mode='same'): +# y=np.convolve(x, np.ones((N,))/N, mode=mode) +# return y +def moving_average(a, n=3) : + """ + perform moving average, return a vector of same length as input + + NOTE: also in kalman.filters + """ + a = a.ravel() + a = np.concatenate(([a[0]]*(n-1),a)) # repeating first values + ret = np.cumsum(a, dtype = float) + ret[n:] = ret[n:] - ret[:-n] + ret=ret[n - 1:] / n + return ret + +def lowpass1(y, dt, fc=3) : + """ + 1st order low pass filter + """ + tau=1/(2*np.pi*fc) + alpha=dt/(tau+dt) + y_filt=np.zeros(y.shape) + y_filt[0]=y[0] + for i in np.arange(1,len(y)): + y_filt[i]=alpha*y[i] + (1-alpha)*y_filt[i-1] + return y_filt + +def highpass1(y, dt, fc=3) : + """ + 1st order high pass filter + """ + tau=1/(2*np.pi*fc) + alpha=tau/(tau+dt) + y_filt=np.zeros(y.shape) + y_filt[0]=0 + for i in np.arange(1,len(y)): + y_filt[i]=alpha*y_filt[i-1] + alpha*(y[i]-y[i-1]) + m0=np.mean(y) + m1=np.mean(y_filt) + y_filt+=m0-m1 + return y_filt + + +def applyFilter(x, y, filtDict): + if filtDict['name']=='Moving average': + return moving_average(y, n=np.round(filtDict['param']).astype(int)) + elif filtDict['name']=='Low pass 1st order': + dt = x[1]-x[0] + return lowpass1(y, dt=dt, fc=filtDict['param']) + elif filtDict['name']=='High pass 1st order': + dt = x[1]-x[0] + return highpass1(y, dt=dt, fc=filtDict['param']) + else: + raise NotImplementedError('{}'.format(filtDict)) + +def applyFilterDF(df_old, x_col, options): + """ apply filter on a dataframe """ + # Brute force loop + df_new = df_old.copy() + x = df_new[x_col] + for (colName, colData) in df_new.iteritems(): + if colName != x_col: + df_new[colName] = applyFilter(x, colData, options) + return df_new + + +# --------------------------------------------------------------------------------} +# --- +# --------------------------------------------------------------------------------{ +def zero_crossings(y, x=None, direction=None, bouncingZero=False): + """ + Find zero-crossing points in a discrete vector, using linear interpolation. + + direction: 'up' or 'down', to select only up-crossings or down-crossings + bouncingZero: also returns zeros that are exactly zero and do not change sign + + returns: + x values xzc such that y(yzc)==0 + indexes izc, such that the zero is between y[izc] (excluded) and y[izc+1] (included) + + if direction is not provided, also returns: + sign, equal to 1 for up crossing + """ + if x is None: + x=np.arange(len(y)) + else: + x = np.asarray(x) + y = np.asarray(y) + + if np.any((x[1:] - x[0:-1]) <= 0.0): + raise Exception('x values need to be in ascending order') + + # Indices before zero-crossing + iBef = np.where(y[1:]*y[0:-1] < 0.0)[0] + + # Find the zero crossing by linear interpolation + xzc = x[iBef] - y[iBef] * (x[iBef+1] - x[iBef]) / (y[iBef+1] - y[iBef]) + + # Selecting points that are exactly 0 and where neighbor change sign + iZero = np.where(y == 0.0)[0] + iZero = iZero[np.where((iZero > 0) & (iZero < x.size-1))] + if not bouncingZero: + iZero = iZero[np.where(y[iZero-1]*y[iZero+1] < 0.0)] # we only accept zeros that change signs + + # Concatenate + xzc = np.concatenate((xzc, x[iZero])) + iBef = np.concatenate((iBef, iZero)) + + # Sort + iSort = np.argsort(xzc) + xzc, iBef = xzc[iSort], iBef[iSort] + + # Return up-crossing, down crossing or both + sign = np.sign(y[iBef+1]-y[iBef]) + if direction == 'up': + I= np.where(sign==1)[0] + return xzc[I],iBef[I] + elif direction == 'down': + I= np.where(sign==-1)[0] + return xzc[I],iBef[I] + elif direction is not None: + raise Exception('Direction should be either `up` or `down` or `None`') + return xzc, iBef, sign + + +# --------------------------------------------------------------------------------} +# --- Correlation +# --------------------------------------------------------------------------------{ +def correlation(x, nMax=80, dt=1, method='numpy'): + """ + Compute auto correlation of a signal + """ + + def acf(x, nMax=20): + return np.array([1]+[np.corrcoef(x[:-i], x[i:])[0,1] for i in range(1, nMax)]) + + + nvec = np.arange(0,nMax) + if method=='manual': + sigma2 = np.var(x) + R = np.zeros(nMax) + R[0] =1 + for i,nDelay in enumerate(nvec[1:]): + R[i+1] = np.mean( x[0:-nDelay] * x[nDelay:] ) / sigma2 + #R[i+1] = np.corrcoef(x[:-nDelay], x[nDelay:])[0,1] + + elif method=='numpy': + R= acf(x, nMax=nMax) + else: + raise NotImplementedError() + + tau = nvec*dt + return R, tau +# Auto-correlation comes in two versions: statistical and convolution. They both do the same, except for a little detail: The statistical version is normalized to be on the interval [-1,1]. Here is an example of how you do the statistical one: +# +# +# def autocorr(x): +# result = numpy.correlate(x, x, mode='full') +# return result[result.size/2:] + + + + + +def correlated_signal(coeff, n=1000, seed=None): + """ + Create a correlated random signal of length `n` based on the correlation coefficient `coeff` + value[t] = coeff * value[t-1] + (1-coeff) * random + """ + if coeff<0 or coeff>1: + raise Exception('Correlation coefficient should be between 0 and 1') + if seed is not None: + np.random.seed(seed) + + x = np.zeros(n) + rvec = rand(n) + x[0] = rvec[0] + for m in np.arange(1,n): + x[m] = coeff*x[m-1] + (1-coeff)*rvec[m] + x-=np.mean(x) + return x + + +def find_time_offset(t, f, g, outputAll=False): + """ + Find time offset between two signals (may be negative) + + t_offset = find_time_offset(t, f, g) + f(t+t_offset) ~= g(t) + + """ + import scipy + from scipy.signal import correlate + # Remove mean and normalize by std + f = f.copy() + g = g.copy() + f -= f.mean() + g -= g.mean() + f /= f.std() + g /= g.std() + + # Find cross-correlation + xcorr = correlate(f, g) + + # Lags + n = len(f) + dt = t[1]-t[0] + lag = np.arange(1-n, n)*dt + + # Time offset is located at maximum correlation + t_offset = lag[xcorr.argmax()] + + if outputAll: + return t_offset, lag, xcorr + else: + return t_offset + +def amplitude(x, t=None, T = None, mask=None, debug=False): + """ + Compute signal amplitude (max-min)/2. + If a frequency is provided, the calculation is the average on each period + + x: signal time series + mask - time at which transient starts + """ + if mask is not None: + x = x[mask] + if t is not None: + t = t[mask] + # + if T is not None and t is not None: + t -= t[0] + if t[-1]<=T: + return (np.max(x)-np.min(x))/2 + n = int(t[-1]/T) + A = 0 + for i in range(n): + b = np.logical_and(t<=(i+1)*T , t>=i*T) + A+=(np.max(x[b])-np.min(x[b]))/2 + A/=n + + if debug: + import matplotlib.pyplot as plt + from welib.tools.colors import python_colors + fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + ax.plot(t, x-np.mean(x) ,'k-', lw=3, label='Original') + for i in range(n): + b = np.logical_and(t<=(i+1)*T , t>=i*T) + A=(np.max(x[b])-np.min(x[b]))/2 + ax.plot(t[b]- i*T, x[b]-np.mean(x[b]), c=python_colors(i), label='A={}'.format(A)) + ax.plot([0,0,T,T,0],[-A,A,A,-A,-A] ,'--', c=python_colors(i) ) + ax.set_xlabel('time') + ax.set_ylabel('x') + ax.legend() + return A + + # split signals into subsets + else: + return (np.max(x)-np.min(x))/2 + +def phase_shift(A, B, t, omega, tStart=0, deg=True, debug=False): + """ + A: reference signal + omega: expected frequency of reference signal + """ + b =t>=tStart + t = t[b] + A = A[b] + B = B[b] + t_offset, lag, xcorr = find_time_offset(t, A, B, outputAll=True) + phi0 = t_offset*omega # Phase offset in radians + phi = np.mod(phi0, 2*np.pi) + if phi > 0.8 * np.pi: + phi = phi-2*np.pi + if deg: + phi *=180/np.pi + phi0*=180/np.pi + if phi<-190: + phi+=360 +# if debug: +# raise NotImplementedError() + return phi + +def input_output_amplitude_phase(t, u, y, omega_u=None, A_u=None, deg=True, mask=None, debug=False): + """ + Return amplitude ratio and phase shift between a reference input `u` and output `y` + Typically used when the input is a sinusoidal signal and the output is "similar". + + INPUTS: + - t: time vector, length nt + - u: input time series, length nt + - y: output time series, length nt + - omega_u: cyclic frequency, required to convert time offset to phase + when provided, amplitude ratio is computed for each possible periods, and averaged + - A_u : amplitude of input signal (typically known if y is a sinusoid) + - deg: phase is returned in degrees + - mask: mask to be applied to t, u, y + """ + if mask is not None: + t = t[mask] + u = u[mask] + y = y[mask] + if omega_u is None: + raise NotImplementedError() + T=None + else: + T = 2*np.pi/omega_u + + # --- Amplitude ratio + A_y = amplitude(y, t, T=T, debug=debug) + if A_u is None: + A_u = amplitude(u, t, T=T) + G = A_y/A_u + + # --- Phase shift + phi = phase_shift(u, y, t, omega_u, deg=deg, debug=debug) + + return G, phi + + +def sine_approx(t, x, method='least_square'): + """ + Sinusoidal approximation of input signal x + """ + if method=='least_square': + from welib.tools.curve_fitting import fit_sinusoid + y_fit, pfit, fitter = fit_sinusoid(t, x) + omega = fitter.model['coeffs']['omega'] + A = fitter.model['coeffs']['A'] + phi = fitter.model['coeffs']['phi'] + x2 = y_fit + else: + raise NotImplementedError() + + + return x2, omega, A, phi + + +# --------------------------------------------------------------------------------} +# --- Convolution +# --------------------------------------------------------------------------------{ +def convolution_integral(time, f, g, method='auto'): + r""" + Compute convolution integral: + f * g = \int 0^t f(tau) g(t-tau) dtau = g * f + For now, only works for uniform time vector, an exception is raised otherwise + + method=['auto','direct','fft'], + see scipy.signal.convolve + see scipy.signal.fftconvolve + """ + from scipy.signal import convolve + dt = time[1]-time[0] + if len(np.unique(np.around(np.diff(time)/dt,3)))>1: + raise Exception('Convolution integral implemented for uniform time vector') + + #np.convolve(f.ravel(), g.ravel() )[:len(time)]*dt + return convolve(f.ravel(), g.ravel() )[:len(time)]*dt + + +# --------------------------------------------------------------------------------} +# --- Intervals/peaks +# --------------------------------------------------------------------------------{ +def intervals(b, min_length=1, forgivingJump=True, removeSmallRel=True, removeSmallFact=0.1, mergeCloseRel=False, mergeCloseFact=0.2): + """ + Describe intervals from a boolean vector where intervals are indicated by True + + INPUT: + - b : a logical vector, where 1 means, I'm in an interval. + - min_length: if provided, do not return intervals of length < min_length + - forgivingJump: if true, merge intervals that are separated by a distance < min_length + - removeSmallRel: remove intervals that have a small length compared to the max length of intervals + - removeSmallFact: factor used for removeSmallRel + - mergeCloseRel: merge intervals that are closer than a fraction of the typical distance between intervals + + OUTPUTS: + - IStart : ending indices + - IEnd : ending indices + - Length: interval lenghts (IEnd-IStart+1) + + IStart, IEnd, Lengths = intervals([False, True, True, False, True, True, True, False]) + np.testing.assert_equal(IStart , np.array([1,4])) + np.testing.assert_equal(IEnd , np.array([2,6])) + np.testing.assert_equal(Lengths, np.array([2,3])) + """ + b = np.asarray(b) + total = np.sum(b) + + min_length=max(min_length,1) + if forgivingJump: + min_jump=min_length + else: + min_jump=1 + + if total==0: + IStart = np.array([]) + IEnd = np.array([]) + Lengths= np.array([]) + return IStart, IEnd, Lengths + elif total==1: + i = np.where(b)[0][0] + IStart = np.array([i]) + IEnd = np.array([i]) + Lengths= np.array([1]) + else: + n = len(b) + Idx = np.arange(n)[b] + delta_Idx=np.diff(Idx) + jumps =np.where(delta_Idx>min_jump)[0] + if len(jumps)==0: + IStart = np.array([Idx[0]]) + IEnd = np.array([Idx[-1]]) + else: + istart=Idx[0] + jumps=np.concatenate(([-1],jumps,[len(Idx)-1])) + IStart = Idx[jumps[:-1]+1] # intervals start right after a jump + IEnd = Idx[jumps[1:]] # intervals stops at jump + Lengths = IEnd-IStart+1 + + # Removing intervals smaller than min_length + bKeep = Lengths>=min_length + IStart = IStart[bKeep] + IEnd = IEnd[bKeep] + Lengths = Lengths[bKeep] + # Removing intervals smaller than less than a fraction of the max interval + if removeSmallRel: + bKeep = Lengths>=removeSmallFact*np.max(Lengths) + IStart = IStart[bKeep] + IEnd = IEnd[bKeep] + Lengths = Lengths[bKeep] + + # Distances between intervals + if mergeCloseRel: + if len(IStart)<=2: + pass + else: + D = IStart[1:]-IEnd[0:-1] + #print('D',D,np.max(D),int(np.max(D) * mergeCloseFact)) + min_length = max(int(np.max(D) * mergeCloseFact), min_length) + if min_length<=1: + pass + else: + #print('Readjusting min_length to {} to accomodate for max interval spacing of {:.0f}'.format(min_length, np.mean(D))) + return intervals(b, min_length=min_length, forgivingJump=True, removeSmallRel=removeSmallRel, removeSmallFact=removeSmallFact, mergeCloseRel=False) + return IStart, IEnd, Lengths + +def peaks(x, threshold=0.3, threshold_abs=True, method='intervals', min_length=3, + mergeCloseRel=True, returnIntervals=False): + """ + Find peaks in a signal, above a given threshold + INPUTS: + - x : 1d-array, signal + - threshold : scalar, absolute or relative threshold beyond which peaks are looked for + relative threshold are proportion of the max-min of the signal (between 0-1) + - threshold_abs : boolean, specify whether the threshold is absolute or relative + - method : string, selects which method is used to find the peaks, between: + - 'interval' : one peak per interval above the threshold + - 'derivative': uses derivative to find maxima, may return more than one per interval + - min_length: + - if 'interval' method is used: minimum interval + - if 'derivative' method is used: minimum distance between two peaks + + OPTIONS for interval method: + - mergeCloseRel: logical, if True, attempts to merge intervals that are close to each other compare to the typical interval spacing + set to False if all peaks are wanted + - returnIntervals: logical, if true, return intervals used for interval method + OUTPUTS: + - I : index of the peaks + -[IStart, IEnd] if return intervals is true, see function `intervals` + + + see also: + scipy.signal.find_peaks + + """ + if not threshold_abs: + threshold = threshold * (np.max(y) - np.min(y)) + np.min(y) + + if method =='intervals': + IStart, IEnd, Lengths = intervals(x>threshold, min_length=min_length, mergeCloseRel=mergeCloseRel) + I = np.array([iS if L==1 else np.argmax(x[iS:iE+1])+iS for iS,iE,L in zip(IStart,IEnd,Lengths)]) + if returnIntervals: + return I, IStart, IEnd + else: + return I + + elif method =='derivative': + I = indexes(x, thres=threshold, thres_abs=True, min_dist=min_length) + return I + else: + raise NotImplementedError('Method {}'.format(method)) + + + +# --------------------------------------------------------------------------------} +# --- Simple signals +# --------------------------------------------------------------------------------{ +def impulse(time, t0=0, A=1, epsilon=None, **kwargs): + """ + returns a dirac function: + A/dt if t==t0 + 0 otherwise + + Since the impulse response is poorly defined in discrete space, it's recommended + to use a smooth_delta. See the welib.tools.functions.delta + """ + from .functions import delta + t=np.asarray(time)-t0 + y= delta(t, epsilon=epsilon, **kwargs)*A + return y + +def step(time, t0=0, valueAtStep=0, A=1): + """ + returns a step function: + 0 if tt0 + valueAtStep if t==t0 + + NOTE: see also welib.tools.functions.Pi + """ + return np.heaviside(time-t0, valueAtStep)*A + +def ramp(time, t0=0, valueAtStep=0, A=1): + """ + returns a ramp function: + 0 if t=t0 + + NOTE: see also welib.tools.functions.Pi + """ + t=np.asarray(time)-t0 + y=np.zeros(t.shape) + y[t>=0]=A*t[t>=0] + return y + + +def hat(time, T=1, t0=0, A=1, method='abs'): + """ + returns a hat function: + A*hat if |t-t0|0.01: + print('[WARN] dt from tmax-tmin different from dt from t2-t1 {} {}'.format(dt, dtDelta0) ) + Fs = 1/dt + if averaging =='none': + frq, PSD, Info = psd(y, fs=Fs, detrend=detrend, return_onesided=True) + elif averaging =='binning': + frq, PSD, Info = psd_binned(y, fs=Fs, detrend=detrend, return_onesided=True, nPerDecade=nPerDecade) + elif averaging=='welch': + # --- Welch - PSD + #overlap_frac=0.5 + #return fnextpow2(np.sqrt(len(x)/(1-overlap_frac))) + nFFTAll=fnextpow2(n) + if nExp is None: + nExp=int(np.log(nFFTAll)/np.log(2))-1 + nPerSeg=2**nExp + if nPerSeg>n: + print('[WARN] Power of 2 value was too high and was reduced. Disable averaging to use the full spectrum.'); + nExp=int(np.log(nFFTAll)/np.log(2))-1 + nPerSeg=2**nExp + if averaging_window=='hamming': + window = hamming(nPerSeg, True)# True=Symmetric, like matlab + elif averaging_window=='hann': + window = hann(nPerSeg, True) + elif averaging_window=='rectangular': + window = boxcar(nPerSeg) + else: + raise Exception('Averaging window unknown {}'.format(averaging_window)) + frq, PSD, Info = pwelch(y, fs=Fs, window=window, detrend=detrend) + Info.nExp = nExp + else: + raise Exception('Averaging method unknown {}'.format(averaging)) + + # --- Formatting output + if output_type=='amplitude': + deltaf = frq[1]-frq[0] + Y = np.sqrt(PSD*2*deltaf) + # NOTE: the above should be the same as:Y=abs(Y[range(nhalf)])/n;Y[1:-1]=Y[1:-1]*2; + elif output_type=='psd': # one sided + Y = PSD + elif output_type=='f x psd': + Y = PSD*frq + else: + raise NotImplementedError('Contact developer') + if detrend: + frq= frq[1:] + Y = Y[1:] + return frq, Y, Info + + + +# --------------------------------------------------------------------------------} +# --- Spectral simple (averaging below) +# --------------------------------------------------------------------------------{ +def fft_amplitude(y, fs=1.0, detrend ='constant', return_onesided=True): + """ Returns FFT amplitude of signal """ + frq, PSD, Info = psd(y, fs=fs, detrend=detrend, return_onesided=return_onesided) + deltaf = frq[1]-frq[0] + Y = np.sqrt(PSD*2*deltaf) + return frq, Y, Info + + +def psd_binned(y, fs=1.0, nPerDecade=10, detrend ='constant', return_onesided=True): + """ + Return PSD binned with nPoints per decade + """ + # --- First return regular PSD + frq, PSD, Info = psd(y, fs=fs, detrend=detrend, return_onesided=return_onesided) + + add0=False + if frq[0]==0: + add0=True + f0 = 0 + PSD0 = PSD[0] + frq=frq[1:] + PSD=PSD[1:] + + # -- Then bin per decase + log_f = np.log10(frq) + ndecades = np.ceil(log_f[-1] -log_f[0]) + xbins = np.linspace(log_f[0], log_f[-1], int(ndecades*nPerDecade)) + + # Using Pandas to bin.. + df = pd.DataFrame(data=np.column_stack((log_f,PSD)), columns=['x','y']) + xmid = (xbins[:-1]+xbins[1:])/2 + df['Bin'] = pd.cut(df['x'], bins=xbins, labels=xmid ) # Adding a column that has bin attribute + df2 = df.groupby('Bin', observed=False).mean() # Average by bin + df2 = df2.reindex(xmid) + log_f_bin = df2['x'].values + PSD_bin = df2['y'].values + frq2= 10**log_f_bin + PSD2= PSD_bin + if add0: + frq2=np.concatenate( ([f0 ], frq2) ) + PSD2=np.concatenate( ([PSD0], PSD2) ) + b = ~np.isnan(frq2) + frq2 = frq2[b] + PSD2 = PSD2[b] + + #import matplotlib.pyplot as plt + #fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + #fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + #ax.plot(log_f, PSD, label='') + #ax.plot(log_f_bin, PSD_bin, 'o', label='') + #for x in xbins: + # ax.axvline(x, ls=':', c=(0.5,0.5,0.5)) + #ax.set_xlabel('') + #ax.set_ylabel('') + #ax.legend() + #plt.show() + + #Info.df = frq[1]-frq[0] + #Info.fMax = frq[-1] + #Info.LFreq = len(frq) + #Info.LSeg = len(Y) + #Info.LWin = len(Y) + #Info.LOvlp = 0 + #Info.nFFT = len(Y) + #Info.nseg = 1 + Info.nPerDecade = nPerDecade + Info.xbins = xbins + + return frq2, PSD2, Info + + +def psd(y, fs=1.0, detrend ='constant', return_onesided=True): + """ Perform PSD without averaging """ + if not return_onesided: + raise NotImplementedError('Double sided todo') + + if detrend is None: + detrend=False + + if detrend=='constant' or detrend==True: + m=np.mean(y); + else: + m=0; + + n = len(y) + if n%2==0: + nhalf = int(n/2+1) + else: + nhalf = int((n+1)/2) + + frq = np.arange(nhalf)*fs/n; + Y = np.fft.rfft(y-m) #Y = np.fft.fft(y) + PSD = abs(Y[range(nhalf)])**2 /(n*fs) # PSD + PSD[1:-1] = PSD[1:-1]*2; + class InfoClass(): + pass + Info = InfoClass(); + Info.df = frq[1]-frq[0] + Info.fMax = frq[-1] + Info.LFreq = len(frq) + Info.LSeg = len(Y) + Info.LWin = len(Y) + Info.LOvlp = 0 + Info.nFFT = len(Y) + Info.nseg = 1 + return frq, PSD, Info + + +# --------------------------------------------------------------------------------} +# --- Windows +# --------------------------------------------------------------------------------{ +"""The suite of window functions.""" +def fnextpow2(x): + return 2**np.ceil( np.log(x)*0.99999999999/np.log(2)); + +def fDefaultWinLen(x,overlap_frac=0.5): + return fnextpow2(np.sqrt(len(x)/(1-overlap_frac))) + +def fDefaultWinLenMatlab(x): + return np.fix((len(x)-3)*2./9.) + +def _len_guards(M): + """Handle small or incorrect window lengths""" + if int(M) != M or M < 0: + raise ValueError('Window length M must be a non-negative integer') + return M <= 1 + +def _extend(M, sym): + """Extend window by 1 sample if needed for DFT-even symmetry""" + if not sym: + return M + 1, True + else: + return M, False + +def _truncate(w, needed): + """Truncate window by 1 sample if needed for DFT-even symmetry""" + if needed: + return w[:-1] + else: + return w + +def general_cosine(M, a, sym=True): + if _len_guards(M): + return np.ones(M) + M, needs_trunc = _extend(M, sym) + + fac = np.linspace(-np.pi, np.pi, M) + w = np.zeros(M) + for k in range(len(a)): + w += a[k] * np.cos(k * fac) + + return _truncate(w, needs_trunc) + + +def boxcar(M, sym=True): + """Return a boxcar or rectangular window. + + Also known as a rectangular window or Dirichlet window, this is equivalent + to no window at all. + """ + if _len_guards(M): + return np.ones(M) + M, needs_trunc = _extend(M, sym) + + w = np.ones(M, float) + + return _truncate(w, needs_trunc) + +def hann(M, sym=True): # same as hanning(*args, **kwargs): + return general_hamming(M, 0.5, sym) + + +def general_hamming(M, alpha, sym=True): + r"""Return a generalized Hamming window. + The generalized Hamming window is constructed by multiplying a rectangular + window by one period of a cosine function [1]_. + w(n) = \alpha - \left(1 - \alpha\right) \cos\left(\frac{2\pi{n}}{M-1}\right) + \qquad 0 \leq n \leq M-1 + """ + return general_cosine(M, [alpha, 1. - alpha], sym) + + +def hamming(M, sym=True): + r"""Return a Hamming window. + The Hamming window is a taper formed by using a raised cosine with + non-zero endpoints, optimized to minimize the nearest side lobe. + w(n) = 0.54 - 0.46 \cos\left(\frac{2\pi{n}}{M-1}\right) + \qquad 0 \leq n \leq M-1 + """ + return general_hamming(M, 0.54, sym) + +_win_equiv_raw = { + ('boxcar', 'box', 'ones', 'rect', 'rectangular'): (boxcar, False), + ('hamming', 'hamm', 'ham'): (hamming, False), + ('hanning', 'hann', 'han'): (hann, False), +} + +# Fill dict with all valid window name strings +_win_equiv = {} +for k, v in _win_equiv_raw.items(): + for key in k: + _win_equiv[key] = v[0] + +# Keep track of which windows need additional parameters +_needs_param = set() +for k, v in _win_equiv_raw.items(): + if v[1]: + _needs_param.update(k) + + +def get_window(window, Nx, fftbins=True): + """ + Return a window. + + Parameters + ---------- + window : string, float, or tuple + The type of window to create. See below for more details. + Nx : int + The number of samples in the window. + fftbins : bool, optional + If True (default), create a "periodic" window, ready to use with + `ifftshift` and be multiplied by the result of an FFT (see also + `fftpack.fftfreq`). + If False, create a "symmetric" window, for use in filter design. + """ + sym = not fftbins + try: + beta = float(window) + except (TypeError, ValueError): + args = () + if isinstance(window, tuple): + winstr = window[0] + if len(window) > 1: + args = window[1:] + elif isinstance(window, string_types): + if window in _needs_param: + raise ValueError("The '" + window + "' window needs one or " + "more parameters -- pass a tuple.") + else: + winstr = window + else: + raise ValueError("%s as window type is not supported." % + str(type(window))) + + try: + winfunc = _win_equiv[winstr] + except KeyError: + raise ValueError("Unknown window type.") + + params = (Nx,) + args + (sym,) + else: + winfunc = kaiser + params = (Nx, beta, sym) + + return winfunc(*params) + + + + + + +# --------------------------------------------------------------------------------} +# --- Helpers +# --------------------------------------------------------------------------------{ +def odd_ext(x, n, axis=-1): + """ + Odd extension at the boundaries of an array + Generate a new ndarray by making an odd extension of `x` along an axis. + """ + if n < 1: + return x + if n > x.shape[axis] - 1: + raise ValueError(("The extension length n (%d) is too big. " + + "It must not exceed x.shape[axis]-1, which is %d.") + % (n, x.shape[axis] - 1)) + left_end = axis_slice(x, start=0, stop=1, axis=axis) + left_ext = axis_slice(x, start=n, stop=0, step=-1, axis=axis) + right_end = axis_slice(x, start=-1, axis=axis) + right_ext = axis_slice(x, start=-2, stop=-(n + 2), step=-1, axis=axis) + ext = np.concatenate((2 * left_end - left_ext, + x, + 2 * right_end - right_ext), + axis=axis) + return ext + + +def even_ext(x, n, axis=-1): + """ + Even extension at the boundaries of an array + Generate a new ndarray by making an even extension of `x` along an axis. + """ + if n < 1: + return x + if n > x.shape[axis] - 1: + raise ValueError(("The extension length n (%d) is too big. " + + "It must not exceed x.shape[axis]-1, which is %d.") + % (n, x.shape[axis] - 1)) + left_ext = axis_slice(x, start=n, stop=0, step=-1, axis=axis) + right_ext = axis_slice(x, start=-2, stop=-(n + 2), step=-1, axis=axis) + ext = np.concatenate((left_ext, + x, + right_ext), + axis=axis) + return ext + + +def const_ext(x, n, axis=-1): + """ + Constant extension at the boundaries of an array + Generate a new ndarray that is a constant extension of `x` along an axis. + The extension repeats the values at the first and last element of + the axis. + """ + if n < 1: + return x + left_end = axis_slice(x, start=0, stop=1, axis=axis) + ones_shape = [1] * x.ndim + ones_shape[axis] = n + ones = np.ones(ones_shape, dtype=x.dtype) + left_ext = ones * left_end + right_end = axis_slice(x, start=-1, axis=axis) + right_ext = ones * right_end + ext = np.concatenate((left_ext, + x, + right_ext), + axis=axis) + return ext + + +def zero_ext(x, n, axis=-1): + """ + Zero padding at the boundaries of an array + Generate a new ndarray that is a zero padded extension of `x` along + an axis. + """ + if n < 1: + return x + zeros_shape = list(x.shape) + zeros_shape[axis] = n + zeros = np.zeros(zeros_shape, dtype=x.dtype) + ext = np.concatenate((zeros, x, zeros), axis=axis) + return ext + +def signaltools_detrend(data, axis=-1, type='linear', bp=0): + """ + Remove linear trend along axis from data. + + Parameters + ---------- + data : array_like + The input data. + axis : int, optional + The axis along which to detrend the data. By default this is the + last axis (-1). + type : {'linear', 'constant'}, optional + The type of detrending. If ``type == 'linear'`` (default), + the result of a linear least-squares fit to `data` is subtracted + from `data`. + If ``type == 'constant'``, only the mean of `data` is subtracted. + bp : array_like of ints, optional + A sequence of break points. If given, an individual linear fit is + performed for each part of `data` between two break points. + Break points are specified as indices into `data`. + + Returns + ------- + ret : ndarray + The detrended input data. + """ + if type not in ['linear', 'l', 'constant', 'c']: + raise ValueError("Trend type must be 'linear' or 'constant'.") + data = np.asarray(data) + dtype = data.dtype.char + if dtype not in 'dfDF': + dtype = 'd' + if type in ['constant', 'c']: + #print('Removing mean') + ret = data - np.expand_dims(np.mean(data, axis), axis) + return ret + else: + #print('Removing linear?') + dshape = data.shape + N = dshape[axis] + bp = sort(unique(r_[0, bp, N])) + if np.any(bp > N): + raise ValueError("Breakpoints must be less than length " + "of data along given axis.") + Nreg = len(bp) - 1 + # Restructure data so that axis is along first dimension and + # all other dimensions are collapsed into second dimension + rnk = len(dshape) + if axis < 0: + axis = axis + rnk + newdims = r_[axis, 0:axis, axis + 1:rnk] + newdata = reshape(np.transpose(data, tuple(newdims)), + (N, _prod(dshape) // N)) + newdata = newdata.copy() # make sure we have a copy + if newdata.dtype.char not in 'dfDF': + newdata = newdata.astype(dtype) + # Find leastsq fit and remove it for each piece + for m in range(Nreg): + Npts = bp[m + 1] - bp[m] + A = ones((Npts, 2), dtype) + A[:, 0] = cast[dtype](np.arange(1, Npts + 1) * 1.0 / Npts) + sl = slice(bp[m], bp[m + 1]) + coef, resids, rank, s = np.linalg.lstsq(A, newdata[sl]) + newdata[sl] = newdata[sl] - dot(A, coef) + # Put data back in original shape. + tdshape = take(dshape, newdims, 0) + ret = np.reshape(newdata, tuple(tdshape)) + vals = list(range(1, rnk)) + olddims = vals[:axis] + [0] + vals[axis:] + ret = np.transpose(ret, tuple(olddims)) + return ret + + + +# --------------------------------------------------------------------------------} +# --- Spectral Averaging +# --------------------------------------------------------------------------------{ +"""Tools for spectral analysis. """ + +def welch(x, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None, + detrend='constant', return_onesided=True, scaling='density', + axis=-1): + """Interface identical to scipy.signal """ + + if detrend==True: + detrend='constant' + + freqs, Pxx = csd(x, x, fs, window, nperseg, noverlap, nfft, detrend, return_onesided, scaling, axis) + return freqs, Pxx.real + +#>>>> +def pwelch(x, window='hamming', noverlap=None, nfft=None, fs=1.0, nperseg=None, + detrend=False, return_onesided=True, scaling='density', + axis=-1): + r""" + NOTE: interface and default options modified to match matlab's implementation + >> detrend: default to False + >> window : default to 'hamming' + >> window: if an integer, use 'hamming(window, sym=True)' + + + Estimate power spectral density using Welch's method. + + Welch's method [1]_ computes an estimate of the power spectral + density by dividing the data into overlapping segments, computing a + modified periodogram for each segment and averaging the + periodograms. + + Parameters + ---------- + x : array_like + Time series of measurement values + fs : float, optional + Sampling frequency of the `x` time series. Defaults to 1.0. + window : str or tuple or array_like, optional + Desired window to use. If `window` is a string or tuple, it is + passed to `get_window` to generate the window values, which are + DFT-even by default. See `get_window` for a list of windows and + required parameters. If `window` is array_like it will be used + directly as the window and its length must be nperseg. Defaults + to a Hann window. + nperseg : int, optional + Length of each segment. Defaults to None, but if window is str or + tuple, is set to 256, and if window is array_like, is set to the + length of the window. + noverlap : int, optional + Number of points to overlap between segments. If `None`, + ``noverlap = nperseg // 2``. Defaults to `None`. + nfft : int, optional + Length of the FFT used, if a zero padded FFT is desired. If + `None`, the FFT length is `nperseg`. Defaults to `None`. + detrend : str or function or `False`, optional + Specifies how to detrend each segment. If `detrend` is a + string, it is passed as the `type` argument to the `detrend` + function. If it is a function, it takes a segment and returns a + detrended segment. If `detrend` is `False`, no detrending is + done. Defaults to 'constant'. + return_onesided : bool, optional + If `True`, return a one-sided spectrum for real data. If + `False` return a two-sided spectrum. Note that for complex + data, a two-sided spectrum is always returned. + scaling : { 'density', 'spectrum' }, optional + Selects between computing the power spectral density ('density') + where `Pxx` has units of V**2/Hz and computing the power + spectrum ('spectrum') where `Pxx` has units of V**2, if `x` + is measured in V and `fs` is measured in Hz. Defaults to + 'density' + axis : int, optional + Axis along which the periodogram is computed; the default is + over the last axis (i.e. ``axis=-1``). + + Returns + ------- + f : ndarray + Array of sample frequencies. + Pxx : ndarray + Power spectral density or power spectrum of x. + + See Also + -------- + periodogram: Simple, optionally modified periodogram + lombscargle: Lomb-Scargle periodogram for unevenly sampled data + + Notes + ----- + An appropriate amount of overlap will depend on the choice of window + and on your requirements. For the default Hann window an overlap of + 50% is a reasonable trade off between accurately estimating the + signal power, while not over counting any of the data. Narrower + windows may require a larger overlap. + + If `noverlap` is 0, this method is equivalent to Bartlett's method + [2]_. + + .. versionadded:: 0.12.0 + + References + ---------- + .. [1] P. Welch, "The use of the fast Fourier transform for the + estimation of power spectra: A method based on time averaging + over short, modified periodograms", IEEE Trans. Audio + Electroacoust. vol. 15, pp. 70-73, 1967. + .. [2] M.S. Bartlett, "Periodogram Analysis and Continuous Spectra", + Biometrika, vol. 37, pp. 1-16, 1950. + + """ + import math + def fnextpow2(x): + return 2**math.ceil( math.log(x)*0.99999999999/math.log(2)); + + # MANU >>> CHANGE OF DEFAULT OPTIONS + # MANU - If a length is provided use symmetric hamming window + if type(window)==int: + window=hamming(window, True) + # MANU - do not use 256 as default + if isinstance(window, string_types) or isinstance(window, tuple): + if nperseg is None: + if noverlap is None: + overlap_frac=0.5 + elif noverlap == 0: + overlap_frac=0 + else: + raise NotImplementedError('TODO noverlap set but not nperseg') + #nperseg = 256 # then change to default + nperseg=fnextpow2(math.sqrt(x.shape[-1]/(1-overlap_frac))); + + # MANU accepting true as detrend + if detrend==True: + detrend='constant' + + freqs, Pxx, Info = csd(x, x, fs, window, nperseg, noverlap, nfft, detrend, + return_onesided, scaling, axis, returnInfo=True) + + return freqs, Pxx.real, Info + + +def csd(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None, + detrend='constant', return_onesided=True, scaling='density', axis=-1, + returnInfo=False + ): + r""" + Estimate the cross power spectral density, Pxy, using Welch's + method. + """ + + freqs, _, Pxy, Info = _spectral_helper(x, y, fs, window, nperseg, noverlap, nfft, + detrend, return_onesided, scaling, axis, + mode='psd') + + # Average over windows. + if len(Pxy.shape) >= 2 and Pxy.size > 0: + if Pxy.shape[-1] > 1: + Pxy = Pxy.mean(axis=-1) + else: + Pxy = np.reshape(Pxy, Pxy.shape[:-1]) + + if returnInfo: + return freqs, Pxy, Info + else: + return freqs, Pxy + + + +def coherence(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, + nfft=None, detrend='constant', axis=-1): + r""" + Estimate the magnitude squared coherence estimate, Cxy, of + discrete-time signals X and Y using Welch's method. + + ``Cxy = abs(Pxy)**2/(Pxx*Pyy)``, where `Pxx` and `Pyy` are power + spectral density estimates of X and Y, and `Pxy` is the cross + spectral density estimate of X and Y. + """ + + freqs, Pxx, Infoxx = welch(x, fs, window, nperseg, noverlap, nfft, detrend, axis=axis) + _, Pyy, Infoyy = welch(y, fs, window, nperseg, noverlap, nfft, detrend, axis=axis) + _, Pxy, Infoxy = csd(x, y, fs, window, nperseg, noverlap, nfft, detrend, axis=axis, returnInfo=True) + + Cxy = np.abs(Pxy)**2 / Pxx / Pyy + + return freqs, Cxy, Infoxx + + +def _spectral_helper(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, + nfft=None, detrend='constant', return_onesided=True, + scaling='spectrum', axis=-1, mode='psd', boundary=None, + padded=False): + """ Calculate various forms of windowed FFTs for PSD, CSD, etc. """ + if mode not in ['psd', 'stft']: + raise ValueError("Unknown value for mode %s, must be one of: " + "{'psd', 'stft'}" % mode) + + + + + + boundary_funcs = {'even': even_ext, + 'odd': odd_ext, + 'constant': const_ext, + 'zeros': zero_ext, + None: None} + + if boundary not in boundary_funcs: + raise ValueError("Unknown boundary option '{0}', must be one of: {1}" + .format(boundary, list(boundary_funcs.keys()))) + + # If x and y are the same object we can save ourselves some computation. + same_data = y is x + + if not same_data and mode != 'psd': + raise ValueError("x and y must be equal if mode is 'stft'") + + axis = int(axis) + + # Ensure we have np.arrays, get outdtype + x = np.asarray(x) + if not same_data: + y = np.asarray(y) + outdtype = np.result_type(x, y, np.complex64) + else: + outdtype = np.result_type(x, np.complex64) + + if not same_data: + # Check if we can broadcast the outer axes together + xouter = list(x.shape) + youter = list(y.shape) + xouter.pop(axis) + youter.pop(axis) + try: + outershape = np.broadcast(np.empty(xouter), np.empty(youter)).shape + except ValueError: + raise ValueError('x and y cannot be broadcast together.') + + if same_data: + if x.size == 0: + return np.empty(x.shape), np.empty(x.shape), np.empty(x.shape) + else: + if x.size == 0 or y.size == 0: + outshape = outershape + (min([x.shape[axis], y.shape[axis]]),) + emptyout = np.rollaxis(np.empty(outshape), -1, axis) + return emptyout, emptyout, emptyout + + if x.ndim > 1: + if axis != -1: + x = np.rollaxis(x, axis, len(x.shape)) + if not same_data and y.ndim > 1: + y = np.rollaxis(y, axis, len(y.shape)) + + # Check if x and y are the same length, zero-pad if necessary + if not same_data: + if x.shape[-1] != y.shape[-1]: + if x.shape[-1] < y.shape[-1]: + pad_shape = list(x.shape) + pad_shape[-1] = y.shape[-1] - x.shape[-1] + x = np.concatenate((x, np.zeros(pad_shape)), -1) + else: + pad_shape = list(y.shape) + pad_shape[-1] = x.shape[-1] - y.shape[-1] + y = np.concatenate((y, np.zeros(pad_shape)), -1) + + if nperseg is not None: # if specified by user + nperseg = int(nperseg) + if nperseg < 1: + raise ValueError('nperseg must be a positive integer') + + # parse window; if array like, then set nperseg = win.shape + win, nperseg = _triage_segments(window, nperseg,input_length=x.shape[-1]) + + if nfft is None: + nfft = nperseg + elif nfft < nperseg: + raise ValueError('nfft must be greater than or equal to nperseg.') + else: + nfft = int(nfft) + + if noverlap is None: + noverlap = nperseg//2 + else: + noverlap = int(noverlap) + if noverlap >= nperseg: + raise ValueError('noverlap must be less than nperseg.') + nstep = nperseg - noverlap + + # Padding occurs after boundary extension, so that the extended signal ends + # in zeros, instead of introducing an impulse at the end. + # I.e. if x = [..., 3, 2] + # extend then pad -> [..., 3, 2, 2, 3, 0, 0, 0] + # pad then extend -> [..., 3, 2, 0, 0, 0, 2, 3] + + if boundary is not None: + ext_func = boundary_funcs[boundary] + x = ext_func(x, nperseg//2, axis=-1) + if not same_data: + y = ext_func(y, nperseg//2, axis=-1) + + if padded: + # Pad to integer number of windowed segments + # I.e make x.shape[-1] = nperseg + (nseg-1)*nstep, with integer nseg + nadd = (-(x.shape[-1]-nperseg) % nstep) % nperseg + zeros_shape = list(x.shape[:-1]) + [nadd] + x = np.concatenate((x, np.zeros(zeros_shape)), axis=-1) + if not same_data: + zeros_shape = list(y.shape[:-1]) + [nadd] + y = np.concatenate((y, np.zeros(zeros_shape)), axis=-1) + + # Handle detrending and window functions + if not detrend: + def detrend_func(d): + return d + elif not hasattr(detrend, '__call__'): + def detrend_func(d): + return signaltools_detrend(d, type=detrend, axis=-1) + elif axis != -1: + # Wrap this function so that it receives a shape that it could + # reasonably expect to receive. + def detrend_func(d): + d = np.rollaxis(d, -1, axis) + d = detrend(d) + return np.rollaxis(d, axis, len(d.shape)) + else: + detrend_func = detrend + + if np.result_type(win,np.complex64) != outdtype: + win = win.astype(outdtype) + + if scaling == 'density': + scale = 1.0 / (fs * (win*win).sum()) + elif scaling == 'spectrum': + scale = 1.0 / win.sum()**2 + else: + raise ValueError('Unknown scaling: %r' % scaling) + + if mode == 'stft': + scale = np.sqrt(scale) + + if return_onesided: + if np.iscomplexobj(x): + sides = 'twosided' + #warnings.warn('Input data is complex, switching to ' 'return_onesided=False') + else: + sides = 'onesided' + if not same_data: + if np.iscomplexobj(y): + sides = 'twosided' + #warnings.warn('Input data is complex, switching to return_onesided=False') + else: + sides = 'twosided' + + if sides == 'twosided': + raise Exception('NOT IMPLEMENTED') + #freqs = fftpack.fftfreq(nfft, 1/fs) + elif sides == 'onesided': + freqs = np.fft.rfftfreq(nfft, 1/fs) + + # Perform the windowed FFTs + result = _fft_helper(x, win, detrend_func, nperseg, noverlap, nfft, sides) + + if not same_data: + # All the same operations on the y data + result_y = _fft_helper(y, win, detrend_func, nperseg, noverlap, nfft, + sides) + result = np.conjugate(result) * result_y + elif mode == 'psd': + result = np.conjugate(result) * result + + result *= scale + if sides == 'onesided' and mode == 'psd': + if nfft % 2: + result[..., 1:] *= 2 + else: + # Last point is unpaired Nyquist freq point, don't double + result[..., 1:-1] *= 2 + + time = np.arange(nperseg/2, x.shape[-1] - nperseg/2 + 1, + nperseg - noverlap)/float(fs) + if boundary is not None: + time -= (nperseg/2) / fs + + result = result.astype(outdtype) + + # All imaginary parts are zero anyways + if same_data and mode != 'stft': + result = result.real + + # Output is going to have new last axis for time/window index, so a + # negative axis index shifts down one + if axis < 0: + axis -= 1 + + # Roll frequency axis back to axis where the data came from + result = np.rollaxis(result, -1, axis) + + # TODO + class InfoClass(): + pass + Info = InfoClass(); + Info.df=freqs[1]-freqs[0] + Info.fMax=freqs[-1] + Info.LFreq=len(freqs) + Info.LSeg=nperseg + Info.LWin=len(win) + Info.LOvlp=noverlap + Info.nFFT=nfft + Info.nseg=-1 + #print('df:{:.3f} - fm:{:.2f} - nseg:{} - Lf:{:5d} - Lseg:{:5d} - Lwin:{:5d} - Lovlp:{:5d} - Nfft:{:5d} - Lsig:{}'.format(freqs[1]-freqs[0],freqs[-1],-1,len(freqs),nperseg,len(win),noverlap,nfft,x.shape[-1])) + return freqs, time, result, Info + + +def _fft_helper(x, win, detrend_func, nperseg, noverlap, nfft, sides): + """ Calculate windowed FFT """ + # Created strided array of data segments + if nperseg == 1 and noverlap == 0: + result = x[..., np.newaxis] + else: + # http://stackoverflow.com/a/5568169 + step = nperseg - noverlap + shape = x.shape[:-1]+((x.shape[-1]-noverlap)//step, nperseg) + strides = x.strides[:-1]+(step*x.strides[-1], x.strides[-1]) + result = np.lib.stride_tricks.as_strided(x, shape=shape, + strides=strides) + + # Detrend each data segment individually + result = detrend_func(result) + + # Apply window by multiplication + result = win * result + + # Perform the fft. Acts on last axis by default. Zero-pads automatically + if sides == 'twosided': + raise Exception('NOT IMPLEMENTED') + #func = fftpack.fft + else: + result = result.real + func = np.fft.rfft + result = func(result, n=nfft) + + return result + +def _triage_segments(window, nperseg,input_length): + """ + Parses window and nperseg arguments for spectrogram and _spectral_helper. + This is a helper function, not meant to be called externally. + """ + + #parse window; if array like, then set nperseg = win.shape + if isinstance(window, string_types) or isinstance(window, tuple): + # if nperseg not specified + if nperseg is None: + nperseg = 256 # then change to default + if nperseg > input_length: + print('nperseg = {0:d} is greater than input length ' + ' = {1:d}, using nperseg = {1:d}' + .format(nperseg, input_length)) + nperseg = input_length + win = get_window(window, nperseg) + else: + win = np.asarray(window) + if len(win.shape) != 1: + raise ValueError('window must be 1-D') + if input_length < win.shape[-1]: + raise ValueError('window is longer than input signal') + if nperseg is None: + nperseg = win.shape[0] + elif nperseg is not None: + if nperseg != win.shape[0]: + raise ValueError("value specified for nperseg is different from" + " length of window") + + return win, nperseg + + + + +# -------------------------------------------------------------------------------- +# --- Simple implementations to figure out the math +# -------------------------------------------------------------------------------- +def DFT(x, method='vectorized'): + """ + Calculate the Discrete Fourier Transform (DFT) of real signal x + + Definition: + for k in 0..N-1 (but defined for k in ZZ, see below for index) + + X_k = sum_n=0^{N-1} x_n e^{-i 2 pi k n /N} + + = sum_n=0^{N-1} x_n [ cos( 2 pi k n /N) - i sin( 2 pi k n /N) + + Xk are complex numbers. The amplitude/phase are: + A = |X_k|/N + phi = atan2(Im(Xk) / Re(Xk) + + Indices: + The DFT creates a periodic signal of period N + X[k] = X[k+N] + X[-k] = X[N-k] + + Therefore, any set of successive indices could be used. + For instance, with N=4: [0,1,2,3], [-1,0,1,2], [-2,-1,0,1] (canonical one) + [0,..N/2-1], [-N/2, ..N/2-1] + + If N is even + 0 is the 0th frequency (mean) + 1.....N/2-1 terms corresponds to positive frequencies + N/2.....N-1 terms corresponds to negative frequencies + If N is odd + 0 is the 0th frequency (mean) + 1.....(N-1)/2 terms corresponds to positive frequencies + (N+1)/2..N-1 terms corresponds to negative frequencies + + Frequencies convention: (see np.fft.fftfreq and DFT_freq) + f = [0, 1, ..., n/2-1, -n/2, ..., -1] / (dt*n) if n is even + f = [0, 1, ..., (n-1)/2, -(n-1)/2, ..., -1] / (dt*n) if n is odd + + NOTE: when n is even you could chose to go to +n/2 and start at -n/2+1 + The Python convention goes to n/2-1 and start at -n/2. + + Properties: + - if x is a real signal + X[-k] = X*[k] (=X[N-k]) + - Parseval's theorem: sum |x_n|^2 = sum |X_k|^2 (energy conservation) + + + """ + N = len(x) + + if method=='naive': + X = np.zeros_like(x, dtype=complex) + for k in np.arange(N): + for n in np.arange(N): + X[k] += x[n] * np.exp(-1j * 2*np.pi * k * n / N) + + elif method=='vectorized': + n = np.arange(N) + k = n.reshape((N, 1)) # k*n will be of shape (N x N) + e = np.exp(-2j * np.pi * k * n / N) + X = np.dot(e, x) + elif method=='fft': + X = np.fft.fft(x) + elif method=='fft_py': + X = recursive_fft(x) + else: + raise NotImplementedError() + + return X + +def IDFT(X, method='vectorized'): + """ + Calculate the Inverse Discrete Fourier Transform (IDFT) of complex coefficients X + + The transformation DFT->IDFT is fully reversible + + Definition: + for n in 0..N-1: + + x_n = 1/N sum_k=0^{N-1} X_k e^{i 2 pi k n/N} + = 1/N sum_k=0^{N-1} X_k [ cos( 2 pi k n/N) + i sin( 2 pi k n/N) + = 1/N sum_k=0^{N-1} A_k [ cos( 2 pi k n/N + phi_k) + i sin( 2 pi k n/N + phi_k) + + Xk are complex numbers, that can be written X[k] = A[k] e^{j phi[k]} therefore. + + Properties: + - if the "X" given as input come from a DFT, then the coefficients are periodic with period N + Therefore + X[-k] = X[N-k], + X[k] = X[N+k] + and therefore (see the discussion in the documentation of DFT), the summation from + k=0 to N-1 can be interpreted as a summation over any other indices set of length N. + - if "X" comes for the DFT of x, where x is a real signal, then: + X[-k] = X*[k] (=X[N-k]) + + - a converse is that, if X has conjugate symmetry (X[k]=X*[N-k]), then the IDFT will be real: + + x_n = 1/N sum_k=0^{N-1} A_k cos( 2 pi k n/N + phi_k) + 1/N sum_k={-(N-1)/2}^{(N-1)/2} A_k cos( 2 pi k n/N + phi_k) + + But remember that the A_k and phi_k need to satisfy the conjugate symmetry, so they are not + fully independent. + If we want x to be the sum over "N0" independent components, then we need to do the IDFT + of a spectrum "X" of length 2N0-1. + + Indices and frequency (python convention): + (see np.fft.fftfreq and DFT_freq) + f = [0, 1, ..., n/2-1, -n/2, ..., -1] / (dt*n) if n is even + f = [0, 1, ..., (n-1)/2, -(n-1)/2, ..., -1] / (dt*n) if n is odd + + When n is even, we lack symmetry of frequency, so it can potentially + make sense to enforce that the X[-n/2] component is 0 when generating + a signal with IDFT + + + + """ + N = len(X) + + if method in ['naive', 'manual', 'sum']: + x = np.zeros_like(X, dtype=complex) + for k in np.arange(N): + for n in np.arange(N): + x[k] += X[n] * np.exp(1j * 2*np.pi * k * n / N) + x = x/N + + elif method=='vectorized': + n = np.arange(N) + k = n.reshape((N, 1)) # k*n will be of shape (N x N) + e = np.exp(2j * np.pi * k * n / N) + x = np.dot(e, X) / N + + elif method=='ifft': + x = np.fft.ifft(X) + + #elif method=='ifft_py': + # x = IFFT(X) + else: + raise NotImplementedError('IDFT: Method {}'.format(method)) + + x = np.real_if_close(x) + + return x + +def DFT_freq(time=None, N=None, T=None, doublesided=True): + """ Returns the frequencies corresponding to a time vector `time`. + The signal "x" and "time" are assumed to have the same length + INPUTS: + - time: 1d array of time + OR + - N: number of time values + - T: time length of signal + """ + if time is not None: + N = len(time) + T = time[-1]-time[0] + dt = T/(N-1) + df = 1/(dt*N) + nhalf_pos, nhalf_neg = nhalf_fft(N) + if doublesided: + freq_pos = np.arange(nhalf_pos+1)*df + freq_neg = np.arange(nhalf_neg,0)*df + freq = np.concatenate((freq_pos, freq_neg)) + assert(len(freq) == N) + else: + # single sided + fMax = nhalf_pos * df + #freq = np.arange(0, fMax+df/2, df) + freq = np.arange(nhalf_pos+1)*df + return freq + +def IDFT_time(freq=None, doublesided=True): + """ Returns the time vector corresponding to a frequency vector `freq`. + + If doublesided is True + The signal "x" , "time" and freq are assumed to have the same length + Note: might lead to some inaccuracies, just use for double checking! + + INPUTS: + - freq: 1d array of time + """ + if doublesided: + N = len(freq) + time = freq*0 + if np.mod(N,2)==0: + nhalf=int(N/2)-1 + else: + nhalf=int((N-1)/2) + fMax = freq[nhalf] + df = (fMax-0)/(nhalf) + dt = 1/(df*N) + tMax= (N-1)*dt + #time = np.arange(0,(N-1)*dt+dt/2, dt) + time = np.linspace(0,tMax, N) + else: + raise NotImplementedError() + return time + +def recursive_fft(x): + """ + A recursive implementation of the 1D Cooley-Tukey FFT + + Returns the same as DFT (see documentation) + + Input should have a length of power of 2. + Reference: Kong, Siauw, Bayen - Python Numerical Methods + """ + N = len(x) + if not is_power_of_two(N): + raise Exception('Recursive FFT requires a power of 2') + + + if N == 1: + return x + else: + X_even = recursive_fft(x[::2]) + X_odd = recursive_fft(x[1::2]) + factor = np.exp(-2j*np.pi*np.arange(N)/ N) + X = np.concatenate([X_even+factor[:int(N/2)]*X_odd, X_even+factor[int(N/2):]*X_odd]) + return X + +def nhalf_fft(N): + """ + Follows the convention of fftfreq + fmax = f[nhalf_pos] = nhalf_pos*df (fftfreq convention) + + fpos = f[:nhalf_pos+1] + fneg = f[nhalf_pos+1:] + + """ + if N%2 ==0: + nhalf_pos = int(N/2)-1 + nhalf_neg = -int(N/2) + else: + nhalf_pos = int((N-1)/2) + nhalf_neg = -nhalf_pos + return nhalf_pos, nhalf_neg + + +def check_DFT_real(X): + """ Check that signal X is the DFT of a real signal + and that therefore IDFT(X) will return a real signal. + For this to be the case, we need conjugate symmetry: + X[k] = X[N-k]* + """ + from welib.tools.spectral import nhalf_fft + N = len(X) + nh, _ = nhalf_fft(N) + Xpos = X[1:nh+1] # we dont take the DC component [0] + Xneg = np.flipud(X[nh+1:]) # might contain one more frequency than the pos part + + if np.mod(N,2)==0: + # We have one extra negative frequency, we check that X is zero there and remove the value. + if Xneg[-1]!=0: + raise Exception('check_DFT_real: Component {} (first negative frequency) is {} instead of zero, but it should be zero if N is even.'.format(nh+1, X[nh+1])) + Xneg = Xneg[:-1] + + notConjugate = Xpos-np.conjugate(Xneg)!=0 + if np.any(notConjugate): + nNotConjugate=sum(notConjugate) + I = np.where(notConjugate)[0][:3] + 1 # +1 for DC component that was removed + raise Exception('check_DFT_real: {}/{} values of the spectrum are not complex conjugate of there symmetric frequency counterpart. See for instance indices: {}'.format(nNotConjugate, nh, I)) + +def double_sided_DFT_real(X1, N=None): + """ + Take a single sided part of a DFT (X1) and make it double sided signal X, of length N, + ensuring that the IDFT of X will be real. + This is done by ensuring conjugate symmetry: + X[k] = X[N-k]* + For N even, the first negative frequency component is set to 0 because it has no positive counterpart. + + Calling check_DFT_real(X) should return no Exception. + + INPUTS: + - X1: array of complex values of length N1 + - N: required length of the output array (2N1-1 or 2N1) + OUTPUTS: + - X: double sided spectrum: + [X1 flip(X1*[1:]) ] + or + [X1 [0] flip(X1*[1:]) ] + """ + if N is None: + N=2*len(X1)-1 # we make it an odd number to ensure symmetry of frequency + else: + if N not in [2*len(X1)-1, 2*len(X1), 2*len(X1)-2]: + raise Exception('N should be twice the length of the single sided spectrum, or one less.') + + if N % 2 ==0: + # Even number + if N == 2*len(X1)-2: + # rfftfreq + # TODO, there look into irfft to see the convention + X = np.concatenate((X1[:-1], [0], np.flipud(np.conjugate(X1[1:-1])))) + else: + X = np.concatenate((X1, [0], np.flipud(np.conjugate(X1[1:])))) + else: + X = np.concatenate((X1, np.flipud(np.conjugate(X1[1:])))) + return X + + +# --------------------------------------------------------------------------------} +# --- Helper functions +# --------------------------------------------------------------------------------{ +def is_power_of_two(n): + """ Uses bit manipulation to figure out if an integer is a power of two""" + return (n != 0) and (n & (n-1) == 0) + +def sinesum(time, As, freqs): + x =np.zeros_like(time) + for ai,fi in zip(As, freqs): + x += ai*np.sin(2*np.pi*fi*time) + return x + + +# --------------------------------------------------------------------------------} +# --- Unittests +# --------------------------------------------------------------------------------{ +import unittest + +class TestSpectral(unittest.TestCase): + + def default_signal(self, time, mean=0): + freqs=[1,4,7 ] # [Hz] + As =[3,1,1/2] # [misc] + x = sinesum(time, As, freqs) + mean + return x + + def compare_with_npfft(self, time, x): + # Compare lowlevels functions with npfft + # Useful to make sure the basic math is correct + N = len(time) + dt = (time[-1]-time[0])/(N-1) + tMax = time[-1] + + # --- Test frequency, dt/df/N-relationships + f_ref = np.fft.fftfreq(N, dt) + nhalf_pos, nhalf_neg = nhalf_fft(N) + fhalf = DFT_freq(time, doublesided = False) + freq = DFT_freq(time, doublesided = True) + df = freq[1]-freq[0] + fmax = fhalf[-1] + + np.testing.assert_almost_equal(fhalf , f_ref[:nhalf_pos+1], 10) + np.testing.assert_almost_equal(fhalf[-1] , np.max(f_ref), 10) + np.testing.assert_almost_equal( 1/(dt*df), N) + np.testing.assert_almost_equal(freq , f_ref, 10) + if N%2 == 0: + np.testing.assert_almost_equal(2*fmax/df, N-2 , 10) + else: + np.testing.assert_almost_equal(2*fmax/df, N-1 , 10) + + # --- Test DFT methods + X0 = DFT(x, method='fft') + X1 = DFT(x, method='naive') + X2 = DFT(x, method='vectorized') + + np.testing.assert_almost_equal(X1, X0, 10) + np.testing.assert_almost_equal(X2, X0, 10) + if is_power_of_two(N): + X3 = DFT(x, method='fft_py') + np.testing.assert_almost_equal(X3, X0, 10) + + # --- Test IDFT methods + x_back0 = IDFT(X0, method='ifft') + x_back1 = IDFT(X0, method='naive') + x_back2 = IDFT(X0, method='vectorized') + np.testing.assert_almost_equal(x_back1, x_back0, 10) + np.testing.assert_almost_equal(x_back2, x_back0, 10) + + np.testing.assert_almost_equal(x_back0, x, 10) + + def test_lowlevel_fft_even(self): + # Test lowlevel functions + time = np.linspace(0,10,16) # NOTE: need a power of two for fft_py + x = self.default_signal(time, mean=0) + self.compare_with_npfft(time, x) + + def test_lowlevel_fft_odd(self): + # Test lowlevel functions + time = np.linspace(0,10,17) + x = self.default_signal(time, mean=0) + self.compare_with_npfft(time, x) + + def test_fft_amplitude(self): + dt=0.1 + t=np.arange(0,10,dt); + f0=1; + A=5; + y=A*np.sin(2*np.pi*f0*t) + f,Y,_=fft_amplitude(y,fs=1/dt,detrend=False) + i=np.argmax(Y) + self.assertAlmostEqual(Y[i],A) + self.assertAlmostEqual(f[i],f0) + + def test_fft_binning(self): + dt=0.1 + t=np.arange(0,10,dt); + f0=1; + A=5; + y=A*np.sin(2*np.pi*f0*t) + + f, Y, Info = psd_binned(y, fs=1/dt, nPerDecade=10, detrend ='constant') + f2, Y2, Info2 = psd (y, fs=1/dt, detrend ='constant') + #print(f) + #print(Y) + + #import matplotlib.pyplot as plt + #fig,ax = plt.subplots(1, 1, sharey=False, figsize=(6.4,4.8)) # (6.4,4.8) + #fig.subplots_adjust(left=0.12, right=0.95, top=0.95, bottom=0.11, hspace=0.20, wspace=0.20) + #ax.plot( f2, Y2 , label='Full') + #ax.plot( f, Y , label='Binned') + #ax.set_xlabel('') + #ax.set_ylabel('') + #ax.legend() + #plt.show() + +if __name__ == '__main__': + #TestSpectral().test_fft_binning() + #TestSpectral().test_ifft() + #TestSpectral().test_lowlevel_fft_even() + #TestSpectral().test_lowlevel_fft_odd() + unittest.main() + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py new file mode 100644 index 0000000000..ec9cc17170 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/stats.py @@ -0,0 +1,384 @@ +""" +Set of tools for statistics + - measures (R^2, RMSE) + - pdf distributions + - Binning + +""" +import numpy as np +import pandas as pd + +# --------------------------------------------------------------------------------} +# --- Stats measures +# --------------------------------------------------------------------------------{ +def comparison_stats(t1, y1, t2, y2, stats='sigRatio,eps,R2', method='mean', absVal=True): + """ + y1: ref + y2: other + + """ + from welib.tools.fatigue import equivalent_load + + sp=stats.split(',') + stats = {} + sStats=[] + + t1=np.asarray(t1).astype(float) + y1=np.asarray(y1).astype(float) + t2=np.asarray(t2).astype(float) + y2=np.asarray(y2).astype(float) + + # Loop on statistics requested + for s in sp: + s= s.strip().lower() + if s=='sigratio': + # Ratio of standard deviation: + sig_ref = float(np.nanstd(y1)) + sig_est = float(np.nanstd(y2)) + try: + r_sig = sig_est/sig_ref + except: + r_sig = np.nan + stats = {'sigRatio':r_sig} + sStats+= [r'$\sigma_\mathrm{est}/\sigma_\mathrm{ref} = $'+r'{:.3f}'.format(r_sig)] + + elif s=='eps': + # Mean relative error + eps = float(mean_rel_err(t1, y1, t2, y2, method=method, absVal=absVal)) + stats['eps'] = eps + sStats+=['$\epsilon=$'+r'{:.1f}%'.format(eps)] + + elif s=='r2': + # Rsquare + R2 = float(rsquare(y2, y1)[0]) + stats['R2'] = R2 + sStats+=[r'$R^2=$'+r'{:.3f}'.format(R2)] + + elif s=='epsleq': + Leq1 = equivalent_load(t1, y1, m=5, bins=100, method='fatpack') + Leq2 = equivalent_load(t2, y2, m=5, bins=100, method='fatpack') + epsLeq = (Leq2-Leq1)/Leq1*100 + stats['epsLeq'] = epsLeq + sStats+=[r'$\epsilon L_{eq}=$'+r'{:.1f}%'.format(epsLeq)] + + else: + raise NotImplementedError(s) + sStats=' - '.join(sStats) + return stats, sStats + + + +def rsquare(y, f, c = True): + """ Compute coefficient of determination of data fit model and RMSE + [r2 rmse] = rsquare(y,f) + [r2 rmse] = rsquare(y,f,c) + RSQUARE computes the coefficient of determination (R-square) value from + actual data Y and model data F. The code uses a general version of + R-square, based on comparing the variability of the estimation errors + with the variability of the original values. RSQUARE also outputs the + root mean squared error (RMSE) for the user's convenience. + Note: RSQUARE ignores comparisons involving NaN values. + INPUTS + Y : Actual data + F : Model fit + + # OPTION + C : Constant term in model + R-square may be a questionable measure of fit when no + constant term is included in the model. + [DEFAULT] TRUE : Use traditional R-square computation + FALSE : Uses alternate R-square computation for model + without constant term [R2 = 1 - NORM(Y-F)/NORM(Y)] + # OUTPUT + R2 : Coefficient of determination + RMSE : Root mean squared error """ + # Sanity + if not np.all(y.shape == f.shape) : + raise Exception('Y and F must be the same size') + y = np.asarray(y).astype(float) + f = np.asarray(f).astype(float) + # Check for NaN + tmp = np.logical_not(np.logical_or(np.isnan(y),np.isnan(f))) + y = y[tmp] + f = f[tmp] + if c: + r2 = max(0,1-np.sum((y-f)**2)/np.sum((y-np.mean(y))** 2)) + else: + r2 = 1 - np.sum((y - f) ** 2) / np.sum((y) ** 2) + if r2 < 0: + import warnings + warnings.warn('Consider adding a constant term to your model') + r2 = 0 + rmse = np.sqrt(np.mean((y - f) ** 2)) + return r2,rmse + +def mean_rel_err(t1=None, y1=None, t2=None, y2=None, method='meanabs', verbose=False, varname='', absVal=True): + """ + return mean relative error in % + + Methods: + 'mean' : 100 * |y1-y2|/mean(y1) + 'meanabs': 100 * |y1-y2|/mean(|y1|) + 'minmax': y1 and y2 scaled between 0.5 and 1.5 + |y1s-y2s|/|y1| + '0-2': signals are scalled between 0 & 2 + """ + def myabs(y): + if absVal: + return np.abs(y) + else: + return y + + + if t1 is None and t2 is None: + pass + else: + if len(y1)!=len(y2): + y2=np.interp(t1,t2,y2) + if method=='mean': + # Method 1 relative to mean + ref_val = np.nanmean(y1) + meanrelerr = np.nanmean(myabs(y2-y1)/ref_val)*100 + elif method=='meanabs': + ref_val = np.nanmean(abs(y1)) + meanrelerr = np.nanmean(myabs(y2-y1)/ref_val)*100 + elif method=='loc': + meanrelerr = np.nanmean(myabs(y2-y1)/abs(y1))*100 + elif method=='minmax': + # Method 2 scaling signals + Min=min(np.nanmin(y1), np.nanmin(y2)) + Max=max(np.nanmax(y1), np.nanmax(y2)) + y1=(y1-Min)/(Max-Min)+0.5 + y2=(y2-Min)/(Max-Min)+0.5 + meanrelerr = np.nanmean(myabs(y2-y1)/np.abs(y1))*100 + elif method=='1-2': + # transform values from 1 to 2 + Min=min(np.nanmin(y1), np.nanmin(y2)) + Max=max(np.nanmax(y1), np.nanmax(y2)) + y1 = (y1-Min)/(Max-Min)+1 + y2 = (y2-Min)/(Max-Min)+1 + meanrelerr = np.nanmean(myabs(y2-y1)/np.abs(y1))*100 + else: + raise Exception('Unknown method',method) + + if verbose: + if len(varname)>0: + print('Mean rel error {:15s} {:7.2f} %'.format(varname, meanrelerr)) + else: + print('Mean rel error {:7.2f} %'.format( meanrelerr)) + return meanrelerr + + +# --------------------------------------------------------------------------------} +# --- PDF +# --------------------------------------------------------------------------------{ +def pdf(y, method='histogram', n=50, **kwargs): + """ + Compute the probability density function. + Wrapper over the different methods present in this package + """ + if method =='sns': + xh, yh = pdf_sns(y, nBins=n, **kwargs) + elif method =='gaussian_kde': + xh, yh = pdf_gaussian_kde(y, nOut=n, **kwargs) + elif method =='histogram': + xh, yh = pdf_histogram(y, nBins=n, **kwargs) + else: + raise NotImplementedError(f'pdf method: {method}') + return xh, yh + + +def pdf_histogram(y,nBins=50, norm=True, count=False): + yh, xh = np.histogram(y[~np.isnan(y)], bins=nBins) + dx = xh[1] - xh[0] + xh = xh[:-1] + dx/2 + if count: + yh = yh / (len(n)*dx) # TODO DEBUG /VERIFY THIS + else: + yh = yh / (nBins*dx) + if norm: + yh=yh/np.trapz(yh,xh) + return xh,yh + +def pdf_gaussian_kde(data, bw='scott', nOut=100, cut=3, clip=(-np.inf,np.inf)): + """ + Returns a smooth probability density function (univariate kernel density estimate - kde) + Inspired from `_univariate_kdeplot` from `seaborn.distributions` + + INPUTS: + bw: float defining bandwidth or method (string) to find it (more or less sigma) + cut: number of bandwidth kept for x axis (e.g. 3 sigmas) + clip: (xmin, xmax) values + OUTPUTS: + x, y: where y(x) = pdf(data) + """ + from scipy import stats + from six import string_types + + data = np.asarray(data) + data = data[~np.isnan(data)] + # Gaussian kde + kde = stats.gaussian_kde(data, bw_method = bw) + # Finding a relevant support (i.e. x values) + if isinstance(bw, string_types): + bw_ = "scotts" if bw == "scott" else bw + bw = getattr(kde, "%s_factor" % bw_)() * np.std(data) + x_min = max(data.min() - bw * cut, clip[0]) + x_max = min(data.max() + bw * cut, clip[1]) + x = np.linspace(x_min, x_max, nOut) + # Computing kde on support + y = kde(x) + return x, y + + +def pdf_sklearn(y): + #from sklearn.neighbors import KernelDensity + #kde = KernelDensity(kernel='gaussian', bandwidth=0.75).fit(y) #you can supply a bandwidth + #x=np.linspace(0,5,100)[:, np.newaxis] + #log_density_values=kde.score_samples(x) + #density=np.exp(log_density) + pass + +def pdf_sns(y,nBins=50): + import seaborn.apionly as sns + hh=sns.distplot(y,hist=True,norm_hist=False).get_lines()[0].get_data() + xh=hh[0] + yh=hh[1] + return xh,yh + +# --------------------------------------------------------------------------------} +# --- Binning +# --------------------------------------------------------------------------------{ +def bin_DF(df, xbins, colBin, stats='mean'): + """ + Perform bin averaging of a dataframe + INPUTS: + - df : pandas dataframe + - xBins: end points delimiting the bins, array of ascending x values + - colBin: column name (string) of the dataframe, used for binning + OUTPUTS: + binned dataframe, with additional columns 'Counts' for the number + + """ + if colBin not in df.columns.values: + raise Exception('The column `{}` does not appear to be in the dataframe'.format(colBin)) + xmid = (xbins[:-1]+xbins[1:])/2 + df['Bin'] = pd.cut(df[colBin], bins=xbins, labels=xmid ) # Adding a column that has bin attribute + if stats=='mean': + df2 = df.groupby('Bin', observed=False).mean() # Average by bin + elif stats=='std': + df2 = df.groupby('Bin', observed=False).std() # std by bin + # also counting + df['Counts'] = 1 + dfCount=df[['Counts','Bin']].groupby('Bin', observed=False).sum() + df2['Counts'] = dfCount['Counts'] + # Just in case some bins are missing (will be nan) + df2 = df2.reindex(xmid) + return df2 + +def bin_signal(x, y, xbins=None, stats='mean', nBins=None): + """ + Perform bin averaging of a signal + INPUTS: + - x: x-values + - y: y-values, signal values + - xBins: end points delimiting the bins, array of ascending x values + OUTPUTS: + - xBinned, yBinned + + """ + if xbins is None: + xmin, xmax = np.min(x), np.max(x) + dx = (xmax-xmin)/nBins + xbins=np.arange(xmin, xmax+dx/2, dx) + df = pd.DataFrame(data=np.column_stack((x,y)), columns=['x','y']) + df2 = bin_DF(df, xbins, colBin='x', stats=stats) + return df2['x'].values, df2['y'].values + + + +def bin2d_signal(x, y, z, xbins=None, ybins=None, nXBins=None, nYBins=None): + """ + Bin signal z based on x and y values using xbins and ybins + + """ + if xbins is None: + xmin, xmax = np.min(x), np.max(x) + dx = (xmax-xmin)/nXBins + xbins=np.arange(xmin, xmax+dx/2, dx) + if ybins is None: + ymin, ymax = np.min(y), np.max(y) + dy = (ymax-ymin)/nYBins + ybins=np.arange(ymin, ymax+dy/2, dy) + + x = np.asarray(x).flatten() + y = np.asarray(y).flatten() + z = np.asarray(z).flatten() + + Counts = np.zeros((len(xbins)-1, len(ybins)-1)) + XMean = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan + YMean = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan + ZMean = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan + ZStd = np.zeros((len(xbins)-1, len(ybins)-1))*np.nan + + xmid = xbins[:-1] + np.diff(xbins)/2 + ymid = ybins[:-1] + np.diff(ybins)/2 + YMid, XMid = np.meshgrid(ymid, xmid) + + for ixb, xb in enumerate(xbins[:-1]): + print(ixb) + bX = np.logical_and(x >= xb, x <= xbins[ixb+1]) # TODO decide on bounds + for iyb, yb in enumerate(ybins[:-1]): + bY = np.logical_and(y >= yb, y <= ybins[iyb+1]) # TODO decide on bounds + + bXY = np.logical_and(bX, bY) + Counts[ixb, iyb] = sum(bXY) + if Counts[ixb,iyb]>0: + ZMean [ixb, iyb] = np.mean(z[bXY]) + ZStd [ixb, iyb] = np.std( z[bXY]) + XMean [ixb, iyb] = np.mean(x[bXY]) + YMean [ixb, iyb] = np.mean(y[bXY]) + + return XMean, YMean, ZMean, ZStd, Counts, XMid, YMid + + + + + + +def azimuthal_average_DF(df, psiBin=np.arange(0,360+1,10), colPsi='Azimuth_[deg]', tStart=None, colTime='Time_[s]'): + """ + Average a dataframe based on azimuthal value + Returns a dataframe with same amount of columns as input, and azimuthal values as index + """ + if tStart is not None: + if colTime not in df.columns.values: + raise Exception('The column `{}` does not appear to be in the dataframe'.format(colTime)) + df=df[ df[colTime]>tStart].copy() + + dfPsi= bin_DF(df, psiBin, colPsi, stats='mean') + if np.any(dfPsi['Counts']<1): + print('[WARN] some bins have no data! Increase the bin size.') + + return dfPsi + + +def azimuthal_std_DF(df, psiBin=np.arange(0,360+1,10), colPsi='Azimuth_[deg]', tStart=None, colTime='Time_[s]'): + """ + Average a dataframe based on azimuthal value + Returns a dataframe with same amount of columns as input, and azimuthal values as index + """ + if tStart is not None: + if colTime not in df.columns.values: + raise Exception('The column `{}` does not appear to be in the dataframe'.format(colTime)) + df=df[ df[colTime]>tStart].copy() + + dfPsi= bin_DF(df, psiBin, colPsi, stats='std') + if np.any(dfPsi['Counts']<1): + print('[WARN] some bins have no data! Increase the bin size.') + + return dfPsi + + + + diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/__init__.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py new file mode 100644 index 0000000000..eaa7f673f6 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tests/test_fatigue.py @@ -0,0 +1,6 @@ +import unittest +import numpy as np +from pyFAST.tools.fatigue import TestFatigue + +if __name__ == '__main__': + unittest.main() diff --git a/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py new file mode 100644 index 0000000000..2c1bebe484 --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/pyFAST/tools/tictoc.py @@ -0,0 +1,75 @@ +import numpy as np +import time + +def pretty_time(t): + # fPrettyTime: returns a 6-characters string corresponding to the input time in seconds. + # fPrettyTime(612)=='10m12s' + # AUTHOR: E. Branlard + if(t<0): + s='------'; + elif (t<1) : + c=np.floor(t*100); + s='{:2d}.{:02d}s'.format(0,int(c)) + elif(t<60) : + s=np.floor(t); + c=np.floor((t-s)*100); + s='{:2d}.{:02d}s'.format(int(s),int(c)) + elif(t<3600) : + m=np.floor(t/60); + s=np.mod( np.floor(t), 60); + s='{:2d}m{:02d}s'.format(int(m),int(s)) + elif(t<86400) : + h=np.floor(t/3600); + m=np.floor(( np.mod( np.floor(t) , 3600))/60); + s='{:2d}h{:02d}m'.format(int(h),int(m)) + elif(t<8553600) : #below 3month + d=np.floor(t/86400); + h=np.floor( np.mod(np.floor(t), 86400)/3600); + s='{:2d}d{:02d}h'.format(int(d),int(h)) + elif(t<31536000): + m=t/(3600*24*30.5); + s='{:4.1f}mo'.format(m) + #s='+3mon.'; + else: + y=t/(3600*24*365.25); + s='{:.1f}y'.format(y) + return s + + +class Timer(object): + """ Time a set of commands, as a context manager + usage: + + with Timer('A name'): + cmd1 + cmd2 + """ + def __init__(self, name=None, writeBefore=False, silent=False, nChar=40): + self.name = name + self.writeBefore = writeBefore + self.silent=silent + self.nChar=nChar + self.sFmt='{:'+str(nChar+1)+'s}' + + def ref_str(self): + s='[TIME] ' + if self.name: + s+=self.sFmt.format(self.name[:self.nChar]) + return s + + def __enter__(self): + if self.silent: + return + self.tstart = time.time() + if self.writeBefore: + s=self.ref_str() + print(s,end='') + + def __exit__(self, type, value, traceback): + if self.silent: + return + if self.writeBefore: + print('Elapsed: {:6s}'.format(pretty_time(time.time() - self.tstart))) + else: + s=self.ref_str() + print(s+'Elapsed: {:6s}'.format(pretty_time(time.time() - self.tstart))) diff --git a/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py new file mode 100644 index 0000000000..de48093f3d --- /dev/null +++ b/zmq_coupling_tests/zmq_python_toolbox/real_fast_interactor.py @@ -0,0 +1,151 @@ +import zmq +import multiprocessing as mp +import numpy as np +import plotly.graph_objs as go +from plotly.subplots import make_subplots +import plotly.io as pio +import threading +from IPython.display import display, clear_output +import time +import json +import matplotlib.pyplot as plt + +class RFInteractor: + "" + + "" + def __init__(self, + ZmqInAddress: str = 'tcp://127.0.0.1:5555', + ZmqOutAddress: str = 'tcp://127.0.0.1:5556', + ZmqInChannels: list = [None], + live_plot: bool = True, + verbose: bool = False): + + self.ZmqInAddress = ZmqInAddress + self.ZmqOutAddress = ZmqOutAddress + self.live_plot = live_plot + self.plot_lock = threading.Lock() + self.fig = False + self.allowable_requests = ['VelH', 'VelV', 'AngleH', 'AngleV', 'BlPitchCom1', + 'BlPitchCom2', 'BlPitchCom3', 'GenTq', 'alpha'] + self.verbose = verbose + + # ------ Connect to Publisher + if self.ZmqOutAddress is not None: + self.pub_context = zmq.Context() + self.subscriber = self.pub_context.socket(zmq.SUB) + self.subscriber.bind(self.ZmqOutAddress) + self.subscriber.setsockopt_string(zmq.SUBSCRIBE, "") # for now subscribe to all + + self.sub_dict = {} + + if self.ZmqInAddress is not None: + self.req_context = zmq.Context() + self.requester = self.req_context.socket(zmq.REP) + self.requester.bind(self.ZmqInAddress) + + print('ZMQ Real Time interactor for FAST initialized. \n PUB-SUB protocol: {} | REQ-REP protocol: {}'.format(self.ZmqOutAddress, + self.ZmqInAddress)) + pass + + + @staticmethod + def _update_dict(update_, dict_): + for key, value in update_.items(): + if key not in dict_: + dict_[key] = [] + dict_[key].append(value) + else: + dict_[key].append(value) + + return dict_ + + def update_plot(self): + if not self.fig: + # Exclude 'Time' and 'TurbId' from subplot titles + subplot_keys = [key for key in self.sub_dict.keys() if key not in [' Time', 'TurbId']] + # Initialize subplots only if they haven't been initialized yet + self.fig = make_subplots(rows=len(subplot_keys), cols=1, subplot_titles=subplot_keys) + + row_index = 1 # Initialize row index + + for trace_name in subplot_keys: + self.fig.add_scatter(y=self.sub_dict[trace_name], mode='lines', name=trace_name, row=row_index, col=1) + row_index += 1 # Increment row index + + self.fig.update_layout(height=1200, title_text=f"TurbId: {self.sub_dict['TurbId'][-1]} - Time = {self.sub_dict[' Time'][-1]} (s)") + display(self.fig) # Display the initial figure + + else: + subplot_keys = [key for key in self.sub_dict.keys() if key not in [' Time', 'TurbId']] + for i, trace_name in enumerate(subplot_keys): + self.fig.data[i].y = self.sub_dict[trace_name] + + self.fig.update_layout(height=1200, title_text=f"TurbId: {self.sub_dict['TurbId'][-1]} - Time = {self.sub_dict[' Time'][-1]} (s)") + clear_output(wait=True) + display(self.fig) + + def static_plot(self): + subplot_keys = [key for key in self.sub_dict.keys() if key not in [' Time', 'TurbId']] + fig = make_subplots(rows=len(subplot_keys), cols=1, subplot_titles=subplot_keys) + + fig, ax = plt.subplots(len(subplot_keys), 1, figsize=(10, 10)) + for i, trace_name in enumerate(subplot_keys): + ax[i].plot(self.sub_dict[trace_name]) + ax[i].set_title(trace_name) + + return plt.show() + + + + + def fast_sub(self, N_plots_update = 100, plot: bool = True): + """ + Dummy function for the subscription to the FAST channel + TODO: Need to split acquisition and plotting, maybe multiprocessing, to avoid messages loss + """ + count = 0 + + while True: + update_ = self.subscriber.recv_json() + + if self.verbose: + print(update_) + + self.sub_dict = self._update_dict(update_, self.sub_dict) + + if count == 0: + self.data_length = len(self.sub_dict) + + count += 1 + if count % N_plots_update == 0 and plot: + self.update_plot() + # time.sleep(1) + + # check if communication is still open + if list(update_.values())[2:] == [0.0]*(self.data_length - 2): + break + + def fast_rep(self, rep_dict): + """ + + """ + req_ = self.requester.recv_string() + print(req_) + requests = req_.split(";") + + response = ';'.join(map(str, rep_dict.values())) + ';' + self.requester.send_string(response) + pass + + + + + + + + + + + + From b0f04e00a70ba6ba67105b4191765721f2c2683d Mon Sep 17 00:00:00 2001 From: lorenzoschena <63848406+lorenzoschena@users.noreply.github.com> Date: Wed, 12 Jun 2024 11:02:52 +0200 Subject: [PATCH 08/14] test01 passed --- .gitignore | 7 +- README.rst | 2 +- modules/openfast-library/src/FAST_Subs.f90 | 8 +- zmq_coupling_tests/templateDir/Main02.outb | Bin 1761946 -> 0 bytes .../OFZMQ_test01}/AeroData/Cylinder1.dat | 0 .../OFZMQ_test01}/AeroData/Cylinder2.dat | 0 .../OFZMQ_test01}/AeroData/DU21_A17.dat | 0 .../OFZMQ_test01}/AeroData/DU25_A17.dat | 0 .../OFZMQ_test01}/AeroData/DU30_A17.dat | 0 .../OFZMQ_test01}/AeroData/DU35_A17.dat | 0 .../OFZMQ_test01}/AeroData/DU40_A17.dat | 0 .../OFZMQ_test01}/AeroData/NACA64_A17.dat | 0 .../OFZMQ_test01}/Airfoils/Cylinder1.dat | 0 .../Airfoils/Cylinder1_coords.txt | 0 .../OFZMQ_test01}/Airfoils/Cylinder2.dat | 0 .../Airfoils/Cylinder2_coords.txt | 0 .../OFZMQ_test01}/Airfoils/DU21_A17.dat | 0 .../Airfoils/DU21_A17_coords.txt | 0 .../OFZMQ_test01}/Airfoils/DU25_A17.dat | 0 .../Airfoils/DU25_A17_coords.txt | 0 .../OFZMQ_test01}/Airfoils/DU30_A17.dat | 0 .../Airfoils/DU30_A17_coords.txt | 0 .../OFZMQ_test01}/Airfoils/DU35_A17.dat | 0 .../Airfoils/DU35_A17_coords.txt | 0 .../OFZMQ_test01}/Airfoils/DU40_A17.dat | 0 .../Airfoils/DU40_A17_coords.txt | 0 .../OFZMQ_test01}/Airfoils/NACA64_A17.dat | 0 .../Airfoils/NACA64_A17_coords.txt | 0 .../OFZMQ_test01}/Cp_Ct_Cq.NREL5MW.txt | 0 .../OFZMQ_test01}/DISCON.IN | 0 .../OFZMQ_test01}/IceDyn_Input.dat | 0 .../OFZMQ_test01}/IceFloe_IEC_Crushing.dat | 0 .../NRELOffshrBsline5MW_AeroDyn_blade.dat | 0 .../NRELOffshrBsline5MW_BeamDyn.dat | 0 .../NRELOffshrBsline5MW_BeamDyn_Blade.dat | 0 .../NRELOffshrBsline5MW_Blade.dat | 0 .../NRELOffshrBsline5MW_InflowWind.dat | 0 ...LOffshrBsline5MW_Monopile_IEC_Crushing.inp | 0 .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 2 +- .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 0 ...ffshrBsline5MW_Onshore_ElastoDyn_Tower.dat | 0 .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 0 .../OFZMQ_test01/OFZMQ_test01.AD.sum | 61 + .../OFZMQ_test01/OFZMQ_test01.ED.sum | 210 + .../OFZMQ_test01/OFZMQ_test01.SrvD.sum | 66 + .../OFZMQ_test01/OFZMQ_test01.UA.sum | 16 + .../OFZMQ_test01/OFZMQ_test01.ech | 107 + .../OFZMQ_test01/OFZMQ_test01.fst | 86 + .../OFZMQ_test01/OFZMQ_test01.sum | 103 + .../templatesDir/clean/AeroData/Cylinder1.dat | 19 + .../templatesDir/clean/AeroData/Cylinder2.dat | 19 + .../templatesDir/clean/AeroData/DU21_A17.dat | 158 + .../templatesDir/clean/AeroData/DU25_A17.dat | 157 + .../templatesDir/clean/AeroData/DU30_A17.dat | 159 + .../templatesDir/clean/AeroData/DU35_A17.dat | 151 + .../templatesDir/clean/AeroData/DU40_A17.dat | 152 + .../clean/AeroData/NACA64_A17.dat | 143 + .../templatesDir/clean/Airfoils/Cylinder1.dat | 59 + .../clean/Airfoils/Cylinder1_coords.txt | 407 + .../templatesDir/clean/Airfoils/Cylinder2.dat | 60 + .../clean/Airfoils/Cylinder2_coords.txt | 407 + .../templatesDir/clean/Airfoils/DU21_A17.dat | 196 + .../clean/Airfoils/DU21_A17_coords.txt | 407 + .../templatesDir/clean/Airfoils/DU25_A17.dat | 194 + .../clean/Airfoils/DU25_A17_coords.txt | 407 + .../templatesDir/clean/Airfoils/DU30_A17.dat | 198 + .../clean/Airfoils/DU30_A17_coords.txt | 407 + .../templatesDir/clean/Airfoils/DU35_A17.dat | 189 + .../clean/Airfoils/DU35_A17_coords.txt | 407 + .../templatesDir/clean/Airfoils/DU40_A17.dat | 190 + .../clean/Airfoils/DU40_A17_coords.txt | 407 + .../clean/Airfoils/NACA64_A17.dat | 181 + .../clean/Airfoils/NACA64_A17_coords.txt | 407 + .../templatesDir/clean/Cp_Ct_Cq.NREL5MW.txt | 99 + .../templatesDir/clean/DISCON.IN | 192 + .../templatesDir/clean/IceDyn_Input.dat | 74 + .../clean/IceFloe_IEC_Crushing.dat | 51 + .../templatesDir/clean/Main01.AD.sum | 61 + .../templatesDir/clean/Main01.ED.sum | 210 + .../templatesDir/clean/Main01.SrvD.sum | 66 + .../templatesDir/clean/Main01.UA.sum | 16 + .../templatesDir/clean/Main01.ech | 107 + .../templatesDir/clean/Main01.sum | 103 + .../clean}/Main02.AD.sum | 2 +- .../clean}/Main02.ED.sum | 2 +- .../clean}/Main02.SrvD.sum | 4 +- .../clean}/Main02.UA.sum | 2 +- .../clean}/Main02.ech | 6 +- .../clean}/Main02.fst | 0 .../clean}/Main02.sum | 2 +- .../NRELOffshrBsline5MW_AeroDyn_blade.dat | 28 + .../clean/NRELOffshrBsline5MW_BeamDyn.dat | 94 + .../NRELOffshrBsline5MW_BeamDyn_Blade.dat | 756 + .../clean/NRELOffshrBsline5MW_Blade.dat | 83 + .../clean/NRELOffshrBsline5MW_InflowWind.dat | 71 + ...LOffshrBsline5MW_Monopile_IEC_Crushing.inp | 26 + .../NRELOffshrBsline5MW_Onshore_AeroDyn15.dat | 106 + .../NRELOffshrBsline5MW_Onshore_ElastoDyn.dat | 160 + ...ffshrBsline5MW_Onshore_ElastoDyn_Tower.dat | 54 + .../NRELOffshrBsline5MW_Onshore_ServoDyn.dat | 110 + .../clean}/README.md | 0 .../clean}/uniform.hh | 0 .../zmq_python_toolbox/SUBtests.ipynb | 17082 +--------------- .../real_fast_interactor.py | 31 +- .../tests/test01_integrity.py | 43 + 105 files changed, 8746 insertions(+), 17044 deletions(-) delete mode 100644 zmq_coupling_tests/templateDir/Main02.outb rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/Cylinder1.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/Cylinder2.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/DU21_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/DU25_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/DU30_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/DU35_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/DU40_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/AeroData/NACA64_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/Cylinder1.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/Cylinder1_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/Cylinder2.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/Cylinder2_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU21_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU21_A17_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU25_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU25_A17_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU30_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU30_A17_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU35_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU35_A17_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU40_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/DU40_A17_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/NACA64_A17.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Airfoils/NACA64_A17_coords.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/Cp_Ct_Cq.NREL5MW.txt (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/DISCON.IN (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/IceDyn_Input.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/IceFloe_IEC_Crushing.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_AeroDyn_blade.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_BeamDyn.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_BeamDyn_Blade.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_Blade.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_InflowWind.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat (99%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat (100%) rename zmq_coupling_tests/{templateDir => templatesDir/OFZMQ_test01}/NRELOffshrBsline5MW_Onshore_ServoDyn.dat (100%) create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.AD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ED.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.SrvD.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.UA.sum create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.ech create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.fst create mode 100644 zmq_coupling_tests/templatesDir/OFZMQ_test01/OFZMQ_test01.sum create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/AeroData/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder1_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/Cylinder2_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU21_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU25_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU30_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU35_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/DU40_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Airfoils/NACA64_A17_coords.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/Cp_Ct_Cq.NREL5MW.txt create mode 100644 zmq_coupling_tests/templatesDir/clean/DISCON.IN create mode 100644 zmq_coupling_tests/templatesDir/clean/IceDyn_Input.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/IceFloe_IEC_Crushing.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/Main01.AD.sum create mode 100644 zmq_coupling_tests/templatesDir/clean/Main01.ED.sum create mode 100644 zmq_coupling_tests/templatesDir/clean/Main01.SrvD.sum create mode 100644 zmq_coupling_tests/templatesDir/clean/Main01.UA.sum create mode 100644 zmq_coupling_tests/templatesDir/clean/Main01.ech create mode 100644 zmq_coupling_tests/templatesDir/clean/Main01.sum rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.AD.sum (97%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.ED.sum (99%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.SrvD.sum (96%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.UA.sum (99%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.ech (94%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.fst (100%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/Main02.sum (98%) create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_AeroDyn_blade.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_BeamDyn_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Blade.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_InflowWind.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Monopile_IEC_Crushing.inp create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_AeroDyn15.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ElastoDyn_Tower.dat create mode 100644 zmq_coupling_tests/templatesDir/clean/NRELOffshrBsline5MW_Onshore_ServoDyn.dat rename zmq_coupling_tests/{templateDir => templatesDir/clean}/README.md (100%) rename zmq_coupling_tests/{templateDir => templatesDir/clean}/uniform.hh (100%) create mode 100644 zmq_coupling_tests/zmq_python_toolbox/tests/test01_integrity.py diff --git a/.gitignore b/.gitignore index bc38298017..5c98e5139a 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,9 @@ varcache # old repo for zmq pr /RealTimeFAST -/cJSON \ No newline at end of file +/cJSON + +# simulation output files +*.out +*.outb +*.pkl.gz diff --git a/README.rst b/README.rst index b1da5a9f57..183c4c3fea 100644 --- a/README.rst +++ b/README.rst @@ -23,7 +23,7 @@ Updates detach from the ZMQ connection (close the socket). Currently, EOF signals are zeros, to keep float format. (`line 5649`) - Added warning if user passes wind speed at runtime, as it will trigger Inflow Wind to use the steady model around the rotor disk (`line 3580`) - Added variables `ZmqInDT` and `ZmqOutDT` to the input file, to set the time step for the ZMQ connection (`line 3586` - `line 3641`) - +- Added variable check in input: if Zmq does not recognize one requested output, it will display it (not stopping the simulation) (`line 2500` - `line 2506`) ======== diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index af0a4a47ad..25fd984cc5 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -2497,7 +2497,13 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ZmqOutChnlsIdx, ZmqOutChannel end do if (minval(ZmqOutChnlsIdx) == 0) then - call WrScr('Warning: one channel requested from ZMQ was not identified') ! CU = unit number for the output + call WrScr('Warning: one channel requested from ZMQ was not identified') ! CU = unit number for the output + ! Find the missing channel and print it + do i = 1, SIZE(p_FAST%ZmqOutChannels) + if (ZmqOutChnlsIdx(i) == 0) then + call WrScr('Channel not found: '//trim(p_FAST%ZmqOutChannels(i))) + end if + end do end if ! Augmenting ZMQ output to handle wind turbine id and current time stamp diff --git a/zmq_coupling_tests/templateDir/Main02.outb b/zmq_coupling_tests/templateDir/Main02.outb deleted file mode 100644 index 948b542a25857a2cdbc2c66b75b16513228fac42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1761946 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 z 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 z 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